diff --git a/.ci/Valgrind-Ubuntu_focal.supp b/.ci/Valgrind-Ubuntu_focal.supp deleted file mode 100644 index cb9d1449..00000000 --- a/.ci/Valgrind-Ubuntu_focal.supp +++ /dev/null @@ -1,6 +0,0 @@ -{ - - Memcheck:Cond - ... - fun:s_decode_header -} diff --git a/.ci/build.sh b/.ci/build.sh deleted file mode 100755 index d9dc412a..00000000 --- a/.ci/build.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash -echo "$1 ($2, $3)..." - -make clean 1>/dev/null 2>/dev/null - -echo -n "building..." - -if [ -f /proc/cpuinfo ] -then - MAKE_JOBS=$(( ($(cat /proc/cpuinfo | grep -E '^processor[[:space:]]*:' | tail -n -1 | cut -d':' -f2) + 1) * 2 + 1 )) -else - MAKE_JOBS=8 -fi - -CFLAGS="$2 $CFLAGS $4" EXTRALIBS="$5" make -j$MAKE_JOBS -f $3 all_test 1>gcc_1.txt 2>gcc_2.txt -mret=$? -cnt=$(wc -l < gcc_2.txt) -# ignore 1 line since ar prints to stderr instead of stdout and ar is called for -# $(LIBNAME) -if [[ $mret -ne 0 ]] || [[ $cnt -gt 1 ]]; then - echo "build $1 failed! printing gcc_2.txt now for convenience" - cat gcc_2.txt - exit 1 -fi - -# remove the standard arguments from the make options -opts=${3//makefile.shared/} -opts=${opts//makefile/} -opts=${opts//V=1/} -opts=${opts//COVERAGE=1/} -opts=$(echo $opts | tr -d '[:space:]') - -# if there's something else than the standard arguments we check if we're currently -# building a Travis PR and if it's like that, we skip those tests -if [ ! -z "$opts" ]; then - if [ ! -z "$TRAVIS_PULL_REQUEST" ] && [ "$TRAVIS_PULL_REQUEST" != "false" ]; then - echo "PR Tests skipped" | tee testok.txt - exit 0 - fi -fi - -echo -n "testing..." - -if [ -a test ] && [ -f test ] && [ -x test ]; then - ((./test >test_std.txt 2>test_err.txt && ./tv_gen > tv.txt) && echo "$1 test passed." && echo "y" > testok.txt) || (echo "$1 test failed, look at test_err.txt or tv.txt" && exit 1) - if find *_tv.txt -type f 1>/dev/null 2>/dev/null ; then - for f in *_tv.txt; do - # check for lines starting with '<' ($f might be a subset of notes/$f) - difftroubles=$(diff -i -w -B $f notes/$f | grep '^<') - if [ -n "$difftroubles" ]; then - echo "FAILURE: $f" - diff -i -w -B $f notes/$f - echo "tv_gen $f failed" && rm -f testok.txt && exit 1 - else - true - fi - done - fi -fi - - -if [ -a testok.txt ] && [ -f testok.txt ]; then - if [ "$LTC_COVERAGE" != "" ]; then - bash .ci/coverage_more.sh > test_coverage_more.txt || exit 1 - lcov_opts="--capture --no-external --directory src -q" - lcov_out=$(echo coverage_$1_$2_$3 | tr ' -=+' '_')".info" - lcov $lcov_opts --output-file $lcov_out - fi - exit 0 -fi -exit 1 diff --git a/.ci/build_options.sh b/.ci/build_options.sh deleted file mode 100755 index 85048be4..00000000 --- a/.ci/build_options.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash - -if [ "$#" != "5" ]; then - echo "Usage is: ${0} \"build_options\" \"\" \"\" \"\" " - echo "CC=gcc ${0} \"build_options\" \" \" \"makefile\" \"-DUSE_LTM -DLTM_DESC -I../libtommath\" ../libtommath/libtommath.a" - exit -1 -fi - -# output version -bash .ci/printinfo.sh - -set -e - -options=( --DLTC_EASY --DLTC_FORTUNA_RESEED_RATELIMIT_STATIC --DLTC_FORTUNA_USE_ENCRYPT_ONLY --DLTC_MECC_FP --DLTC_NO_TABLES --DLTC_NO_FAST --DLTC_NO_ASM --DLTC_NO_DEPRECATED_APIS --DLTC_NO_ECC_TIMING_RESISTANT --DLTC_NO_RSA_BLINDING --DLTC_PTHREAD --DLTC_SMALL_CODE --DLTC_SMALL_STACK -) - -make clean V=0 -make pre_gen -for opt in ${options[@]}; do - echo "Build: $opt" - CFLAGS="$2 $CFLAGS $4 $opt" EXTRALIBS="$5" make -j$(nproc) -f $3 AMALGAM=1 all 1>>gcc_1.txt 2>>gcc_2.txt - ./small - make clean V=0 -done - -# we don't want LTC_EASY when running the tests now -unset 'options[0]' - -echo "All: ${options[@]}" -CFLAGS="$2 $CFLAGS $4 ${options[@]}" EXTRALIBS="$5" make -j$(nproc) -f $3 AMALGAM=1 all 1>>gcc_1.txt 2>>gcc_2.txt -./test >test_std.txt 2>test_err.txt - -exit 0 diff --git a/.ci/check_source.sh b/.ci/check_source.sh deleted file mode 100755 index ce13a09d..00000000 --- a/.ci/check_source.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -# output version -bash .ci/printinfo.sh - -make clean > /dev/null - -echo "checking..." -./helper.pl --check-all || exit 1 - -exit 0 diff --git a/.ci/clang-tidy.sh b/.ci/clang-tidy.sh deleted file mode 100755 index bfe37268..00000000 --- a/.ci/clang-tidy.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash - -# output version -bash .ci/printinfo.sh - -# tested with clang-tidy from llvm-6.0.0 -# not tested with Travis-CI - -#### we use the main test sets: -# readability -# misc -# clang-analyzer -# google -# performance -# modernize -# cert -# bugprone -# portability - -#### the following checks are skipped -# google-readability-function-size -# readability-function-size -# google-readability-casting -# readability-braces-around-statements -# misc-macro-parentheses -# clang-analyzer-valist.Uninitialized - -echo "Run clang-tidy version" - -clang-tidy --version || exit 1 - -echo "Run clang-tidy..." - -clang-tidy src/*/*.c src/*/*/*.c src/*/*/*/*.c src/*/*/*/*/*.c -warnings-as-errors='*' --quiet --checks=-*,\ -readability-*,-readability-function-size,-readability-braces-around-statements,\ -misc-*,-misc-macro-parentheses,\ -clang-analyzer-*,-clang-analyzer-valist.Uninitialized,\ -google-*,-google-readability-function-size,-google-readability-casting,\ -performance-*,\ -modernize-*,\ -cert-*,\ -bugprone-*,\ -portability-* -- -DUSE_LTM -DLTM_DESC -Isrc/headers -I../libtommath || { echo "clang-tidy FAILED!"; exit 1; } - -echo "clang-tidy ok" - -exit 0 diff --git a/.ci/cmake.bat b/.ci/cmake.bat deleted file mode 100644 index a3dc43df..00000000 --- a/.ci/cmake.bat +++ /dev/null @@ -1,9 +0,0 @@ - -if "Visual Studio 2017"=="%APPVEYOR_BUILD_WORKER_IMAGE%" goto :eof -if "Visual Studio 2015"=="%APPVEYOR_BUILD_WORKER_IMAGE%" goto :eof - -mkdir build -cd build -cmake -G "Ninja" .. -ninja -cd.. diff --git a/.ci/coverage.sh b/.ci/coverage.sh deleted file mode 100755 index 4ebd0f0d..00000000 --- a/.ci/coverage.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash - -set -e - -if [ "$TRAVIS_CI" == "private" ]; then - exit 0 -fi - -if [ "$#" != "5" ]; then - echo "Usage is: ${0} \"coverage\" \"\" \"\" \"\" " - echo "CC=gcc ${0} \"coverage\" \" \" \"makefile\" \"-DUSE_LTM -DLTM_DESC -I../libtommath\" ../libtommath/libtommath.a" - exit -1 -fi - -if [ -z "$(echo $CC | grep "gcc")" ]; then - echo "no gcc detected, early exit success" - exit 0 -fi - -if [ "$(echo $3 | grep -v 'makefile[.]')" == "" ]; then - echo "only run $0 for the regular makefile, early exit success" - exit 0 -fi - -# output version -bash .ci/printinfo.sh - -bash .ci/build.sh " $1" " $2" " $3 COVERAGE=1" "$4" "$5" -if [ -a testok.txt ] && [ -f testok.txt ]; then - echo -else - echo - echo "Test failed" - exit 1 -fi - -bash .ci/coverage_more.sh "$5" > test_coverage_more.txt || { rm -f testok.txt && exit 1 ; } - -make lcov-single -# if this isn't run on CI create coverage locally -if [ "$CI" == "" ]; then - make lcov-html -else - coveralls-lcov coverage.info --service-job-id="$GITHUB_RUN_ID" --service-name="github" --repo-token="$REPO_TOKEN" --branch="$GITHUB_REF_NAME" --service-pull-request="$PR_NUMBER" -fi - -exit 0 diff --git a/.ci/coverage_more.sh b/.ci/coverage_more.sh deleted file mode 100755 index aef4241e..00000000 --- a/.ci/coverage_more.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash - -set -e - -function pdiv() { - printf "\n====== %s ======\n" "$*" -} - -if [ "$#" = "1" -a "$(echo $1 | grep 'gmp')" != "" ]; then - pdiv "Test GMP" - ./test t gmp -fi - -pdiv "Sizes" -./sizes -pdiv "Constants" -./constants - -pdiv "Generate hashsum_tv.txt" -for i in $(for j in $(echo $(./hashsum -h | awk '/Algorithms/,EOF' | tail -n +2)); do echo $j; done | sort); do - echo -n "$i: " && ./hashsum -a $i tests/test.key -done > hashsum_tv.txt - -pdiv "Compare hashsum_tv.txt" -difftroubles=$(diff -i -w -B hashsum_tv.txt notes/hashsum_tv.txt | grep '^<') || true -if [ -n "$difftroubles" ]; then - echo "FAILURE: hashsum_tv.tx" - diff -i -w -B hashsum_tv.txt notes/hashsum_tv.txt - echo "hashsum failed" - exit 1 -else - echo "hashsum okay" -fi - -pdiv "aesgcm" -./hashsum -a sha256 aesgcm > aesgcm.sha256sum -./aesgcm -e aesgcm aesgcm.enc0 "00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF" -./aesgcm -d aesgcm.enc0 aesgcm.dec0 "00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF" -./aesgcm -e aesgcm aesgcm.enc1 "00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABB" -./aesgcm -d aesgcm.enc1 aesgcm.dec1 "00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABB" -for i in {0..1}; do - rm aesgcm - mv aesgcm.dec${i} aesgcm - ./hashsum -c aesgcm.sha256sum -done -chmod +x aesgcm - -exit 0 diff --git a/.ci/meta_builds.sh b/.ci/meta_builds.sh deleted file mode 100755 index 1084d07b..00000000 --- a/.ci/meta_builds.sh +++ /dev/null @@ -1,114 +0,0 @@ -#!/bin/bash -# -# This builds different stuff depending on the compiler: -# gcc - valgrind, coverage -# clang - asan, ubsan, scan-build -# both - the two testbuild's NOTEST and NOFILE - -set -e - -if [ "$#" = "5" -a "$(echo $3 | grep -v 'makefile[.]')" = "" ]; then - echo "only run $0 for the regular makefile, early exit success" - exit 0 -fi - -if [ -f /proc/cpuinfo ] -then - MAKE_JOBS=$(( ($(cat /proc/cpuinfo | grep -E '^processor[[:space:]]*:' | tail -n -1 | cut -d':' -f2) + 1) * 2 + 1 )) -else - MAKE_JOBS=8 -fi - -function run_gcc() { - bash .ci/check_source.sh "CHECK_SOURCES" "$2" "$3" "$4" "$5" - - make -j$(nproc) latex-tables V=0 - - ./latex-tables - - echo "verify docs..." - while read -r line; do - grep -q -e "$line" doc/crypt.tex || { echo "Failed to find \"$line\" in doc/crypt.tex"; exit 1; } - done < <(./latex-tables | grep '^\\' | sed 's@\\@\\\\@g') - echo "docs OK" - - make clean &>/dev/null - - echo - echo "Build for ASAN..." - - make -j$MAKE_JOBS CFLAGS="-fsanitize=address -fno-omit-frame-pointer -static-libasan $2 $CFLAGS $4" EXTRALIBS="-lasan $5" test LTC_DEBUG=1 V=1 1>gcc_1.txt 2>gcc_2.txt - - echo - echo "Run ASAN tests with LTM..." - - ASAN_OPTIONS=verbosity=1 ./test t ltm 1>test_std.txt 2> test_err.txt || exit 1 - - if echo $* | grep -q GMP ; then - echo - echo "Run ASAN tests with GMP..." - - ASAN_OPTIONS=verbosity=1 ./test t gmp 1>test_std.txt 2> test_err.txt || exit 1 - fi - - make clean &>/dev/null - - echo - echo "Create code coverage" - - bash .ci/coverage.sh "COVERAGE" "$2" "$3" "$4" "$5" -} - -function run_clang() { - # output version - bash .ci/printinfo.sh - - scan_build=$(which scan-build) || true - [ -z "$scan_build" ] && scan_build=$(find /usr/bin/ -name 'scan-build-[0-9]*' | sort -nr | head -n1) || true - [ -z "$scan_build" ] && { echo "couldn't find clang scan-build"; exit 1; } || echo "run $scan_build" - $scan_build --status-bugs make -j$MAKE_JOBS all CFLAGS="$2 $CFLAGS $4" EXTRALIBS="$5" - - make clean &>/dev/null - - echo - echo "Build for UBSAN..." - - make -j$MAKE_JOBS LDFLAGS="-fsanitize=undefined" CFLAGS="$2 $CFLAGS $4" EXTRALIBS="$5" all LTC_DEBUG=1 V=1 1>gcc_1.txt 2>gcc_2.txt - - echo "Run UBSAN tests with LTM..." - UBSAN_OPTIONS=verbosity=1 ./test t ltm 1>test_std.txt 2> test_err.txt || exit 1 - - if echo $* | grep -q GMP ; then - echo - echo "Run UBSAN tests with GMP..." - - UBSAN_OPTIONS=verbosity=1 ./test t gmp 1>test_std.txt 2> test_err.txt || exit 1 - fi -} - -make clean &>/dev/null - -EXTRALIBS="$5" - -echo $* | grep -q GMP && EXTRALIBS="$EXTRALIBS -lgmp" - -if [ -z "$(echo $CC | grep "clang")" ]; then - run_gcc "$1" "$2" "$3" "$4" "$EXTRALIBS" -else - run_clang "$1" "$2" "$3" "$4" "$EXTRALIBS" -fi - -make clean &>/dev/null - -bash .ci/testbuild.sh "NOTEST" "-DLTC_NO_TEST" "$3" "$4" "$EXTRALIBS" - -make clean &>/dev/null - -bash .ci/testbuild.sh "NOFILE" "-DLTC_NO_FILE" "$3" "$4" "$EXTRALIBS" - -make clean &>/dev/null - -echo -echo "Build full debug..." - -make -j$MAKE_JOBS CFLAGS="$2 $CFLAGS $4" EXTRALIBS="$EXTRALIBS" all_test LTC_DEBUG=2 V=1 1>gcc_1.txt 2>gcc_2.txt diff --git a/.ci/printinfo.sh b/.ci/printinfo.sh deleted file mode 100644 index 213af5b1..00000000 --- a/.ci/printinfo.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -version=$(git describe --tags --always --dirty 2>/dev/null) -if [ ! -e ".git" ] || [ -z $version ] -then - version=$(grep "^VERSION=" makefile_include.mk | sed "s/.*=//") -fi -echo "Testing version:" $version -#grep "VERSION=" makefile | perl -e "@a = split('=', <>); print @a[1];"` - -# get uname -echo "uname="`uname -a` - -# get gcc name -if [ -z ${CC} ] -then - CC="gcc" -fi -echo "${CC}="`${CC} -dumpversion` -echo diff --git a/.ci/run.sh b/.ci/run.sh deleted file mode 100755 index 09a278dd..00000000 --- a/.ci/run.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash - -# output version -bash .ci/printinfo.sh - -bash .ci/build.sh " $1" "$2" "$3" "$4" "$5" -if [ -a testok.txt ] && [ -f testok.txt ]; then - echo -else - echo - echo "Test failed" - exit 1 -fi - -rm -f testok.txt -bash .ci/build.sh " $1" "$2" "$3 LTC_DEBUG=1" "$4" "$5" -if [ -a testok.txt ] && [ -f testok.txt ]; then - echo -else - echo - echo "Test failed" - exit 1 -fi - -rm -f testok.txt -bash .ci/build.sh " $1" "$2 -O2" "$3 IGNORE_SPEED=1" "$4" "$5" -if [ -a testok.txt ] && [ -f testok.txt ]; then - echo -else - echo - echo "Test failed" - exit 1 -fi - -rm -f testok.txt -bash .ci/build.sh " $1" "$2" "$3 IGNORE_SPEED=1 LTC_SMALL=1" "$4" "$5" -if [ -a testok.txt ] && [ -f testok.txt ]; then - echo -else - echo - echo "Test failed" - exit 1 -fi - -exit 0 diff --git a/.ci/testbuild.sh b/.ci/testbuild.sh deleted file mode 100755 index d18f53f5..00000000 --- a/.ci/testbuild.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -# output version -bash .ci/printinfo.sh - -if [ -f /proc/cpuinfo ] -then - MAKE_JOBS=$(( ($(cat /proc/cpuinfo | grep -E '^processor[[:space:]]*:' | tail -n -1 | cut -d':' -f2) + 1) * 2 + 1 )) -else - MAKE_JOBS=8 -fi - -echo "$1 (Build Only, $2, $3)..." -make clean 1>/dev/null 2>/dev/null -echo -n "building..." -touch testok.txt -make -j$MAKE_JOBS -f $3 test tv_gen CFLAGS="$2 $CFLAGS $4" EXTRALIBS="$5" 1>gcc_1.txt 2>gcc_2.txt || (echo "build $1 failed see gcc_2.txt for more information" && cat gcc_2.txt && rm -f testok.txt && exit 1) -if find testok.txt -type f 1>/dev/null 2>/dev/null ; then - echo "successful" - exit 0 -fi -exit 1 diff --git a/.ci/valgrind.sh b/.ci/valgrind.sh deleted file mode 100755 index 303358c5..00000000 --- a/.ci/valgrind.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -set -e - -if [ "$#" = "5" -a "$(echo $3 | grep -v 'makefile[.]')" = "" ]; then - echo "only run $0 for the regular makefile, early exit success" - exit 0 -fi - -if [ -f /proc/cpuinfo ] -then - MAKE_JOBS=$(( ($(cat /proc/cpuinfo | grep -E '^processor[[:space:]]*:' | tail -n -1 | cut -d':' -f2) + 1) * 2 + 1 )) -else - MAKE_JOBS=8 -fi - -# output version -bash .ci/printinfo.sh - -make clean &>/dev/null - -echo "Build for valgrind..." - -# set DWARFv4 as debug format for clang, since it creates DWARFv5 as default which isn't support in old valgrind -[ -z "$(echo $CC | grep "clang")" ] || GFLAG="-gdwarf-4" - -make -j$MAKE_JOBS CFLAGS="$2 $CFLAGS $4 $GFLAG" EXTRALIBS="$5" test LTC_DEBUG=1 1>gcc_1.txt 2>gcc_2.txt - -echo "Run tests with valgrind..." - -for i in `seq 1 10` ; do sleep 300 && echo "Valgrind tests in Progress..."; done & -alive_pid=$! - -readonly VALGRIND_OPTS="--error-exitcode=666 --leak-check=full --show-leak-kinds=all --errors-for-leak-kinds=all" - -readonly distro="$(lsb_release -si)_$(lsb_release -sc)" -readonly suppfile=".ci/Valgrind-${distro}.supp" -function get_suppfile() { [ -f "$suppfile" ] && echo "--suppressions=$suppfile" || echo ""; } -readonly VALGRIND_EXTRA_OPTS=$(get_suppfile) - -valgrind $VALGRIND_OPTS $VALGRIND_EXTRA_OPTS ./test >test_std.txt 2> >(tee -a test_err.txt >&2) || { kill $alive_pid; echo "Valgrind failed"; exit 1; } - -kill $alive_pid diff --git a/.clang-format b/.clang-format deleted file mode 100644 index 686711f3..00000000 --- a/.clang-format +++ /dev/null @@ -1,42 +0,0 @@ ---- -AccessModifierOffset: -2 -ConstructorInitializerIndentWidth: 4 -AlignEscapedNewlinesLeft: false -AlignTrailingComments: true -AllowAllParametersOfDeclarationOnNextLine: false -AllowShortIfStatementsOnASingleLine: false -AllowShortLoopsOnASingleLine: false -AlwaysBreakTemplateDeclarations: false -AlwaysBreakBeforeMultilineStrings: false -BreakBeforeBinaryOperators: false -BreakConstructorInitializersBeforeComma: false -BinPackParameters: true -ColumnLimit: 120 -ConstructorInitializerAllOnOneLineOrOnePerLine: true -DerivePointerBinding: true -ExperimentalAutoDetectBinPacking: false -IndentCaseLabels: true -MaxEmptyLinesToKeep: 1 -NamespaceIndentation: None -ObjCSpaceBeforeProtocolList: false -PenaltyBreakComment: 60 -PenaltyBreakString: 1000 -PenaltyBreakFirstLessLess: 120 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 200 -PointerBindsToType: false -SpacesBeforeTrailingComments: 1 -Cpp11BracedListStyle: false -Standard: Cpp03 -IndentWidth: 3 -TabWidth: 8 -UseTab: Never -BreakBeforeBraces: Linux -IndentFunctionDeclarationAfterType: false -SpacesInParentheses: false -SpaceInEmptyParentheses: false -SpacesInCStyleCastParentheses: false -SpaceAfterControlStatementKeyword: true -SpaceBeforeAssignmentOperators: true -... - diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 5a182b9c..00000000 --- a/.gitattributes +++ /dev/null @@ -1,7 +0,0 @@ -/.gitattributes export-ignore -/.gitignore export-ignore -/.travis.yml export-ignore - -/** export-subst - -/tests/test.key -text diff --git a/.github/ISSUE_TEMPLATE/01-bug_report.md b/.github/ISSUE_TEMPLATE/01-bug_report.md deleted file mode 100644 index 99c90e60..00000000 --- a/.github/ISSUE_TEMPLATE/01-bug_report.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: Bug report -about: Create a bug report -title: '' -labels: bug -assignees: '' - ---- - - - -### Prerequisites - -* [ ] Checked the developer manual -* [ ] Checked that your issue isn't already filed: https://github.com/issues?utf8=✓&q=repo%3Alibtom%2Flibtomcrypt -* [ ] Checked that your issue isn't due to the fact that you're using asymmetric cryptography and you forgot linking in and/or setting an MPI provider (usually this causes either random crashes or runtime errors like `LTC_ARGCHK 'ltc_mp.name != NULL' failure ...`). c.f. Ch. "Math Descriptors" of the developer manual. -* [ ] Checked that your issue isn't related to TomsFastMath's limitation that PK operations can by default only be done with max. 2048bit keys - -### Description - -[Description of the issue] - -### Steps to Reproduce - - -### Version - -You can get this information from the define `SCRYPT` in `src/include/tomcrypt.h` or your local git repository by running `git describe --always --tags --dirty`. -Also, please include the compiler, the compiler version, the architecture and (if applicable) the MPI provider, the OS and what version of the OS you're experiencing the issue. - -### Additional Information - -Any additional information, configuration or data that might be necessary to reproduce the issue. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index eed63fdd..00000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,18 +0,0 @@ - - -### Checklist - - -* [ ] documentation is added or updated -* [ ] tests are added or updated -* [ ] if this fixes something: added a `Fixes:` tag to the commit message diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 0d03169e..00000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,168 +0,0 @@ -name: CI - -on: - push: - branches: - - master - - develop - - 'release/**' - - 'support/**' - - 'ci/**' - pull_request: - branches: - - master - - develop - - 'release/**' - - 'support/**' - - 'ci/**' - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - Docs: - runs-on: ubuntu-24.04 - container: texlive/texlive:latest-medium - steps: - - uses: actions/checkout@v4 - - name: generate PDF - run: | - make docs - cp doc/crypt.pdf crypt-${{ github.run_id }}.pdf - - name: upload PDF - uses: actions/upload-artifact@v4 - with: - name: crypt-${{ github.run_id }}.pdf - path: crypt-${{ github.run_id }}.pdf - Build: - runs-on: ${{ matrix.os }} - strategy: - matrix: - cc: [ gcc, clang ] - os: [ ubuntu-22.04, ubuntu-24.04 ] - config: - - { BUILDNAME: 'META_BUILDS', BUILDOPTIONS: '-DGMP_DESC', BUILDSCRIPT: '.ci/meta_builds.sh' } - - { BUILDNAME: 'VALGRIND', BUILDOPTIONS: '', BUILDSCRIPT: '.ci/valgrind.sh' } - - { BUILDNAME: 'STOCK', BUILDOPTIONS: '', BUILDSCRIPT: '.ci/run.sh' } - - { BUILDNAME: 'BUILD_OPTIONS', BUILDOPTIONS: '', BUILDSCRIPT: '.ci/build_options.sh' } - - { BUILDNAME: 'STOCK-MPI', BUILDOPTIONS: '-ULTM_DESC -UTFM_DESC -UUSE_LTM -UUSE_TFM', BUILDSCRIPT: '.ci/run.sh' } - - { BUILDNAME: 'STOCK+ARGTYPE=1', BUILDOPTIONS: '-DARGTYPE=1', BUILDSCRIPT: '.ci/run.sh' } - - { BUILDNAME: 'STOCK+ARGTYPE=2', BUILDOPTIONS: '-DARGTYPE=2', BUILDSCRIPT: '.ci/run.sh' } - - { BUILDNAME: 'STOCK+ARGTYPE=3', BUILDOPTIONS: '-DARGTYPE=3', BUILDSCRIPT: '.ci/run.sh' } - - { BUILDNAME: 'STOCK+ARGTYPE=4', BUILDOPTIONS: '-DARGTYPE=4', BUILDSCRIPT: '.ci/run.sh' } - steps: - - uses: actions/checkout@v4 - - name: install dependencies - uses: nick-fields/retry@v4.0.0 - with: - timeout_minutes: 20 - max_attempts: 3 - command: | - sudo apt-get update -qq - sudo apt-get install -y libgmp-dev valgrind libtool-bin clang-tools lcov ruby clang - sudo apt-get remove -y libtommath1 - sudo gem install coveralls-lcov - curl -s https://packagecloud.io/install/repositories/libtom/packages/script.deb.sh | sudo bash - sudo apt-get install libtfm-git-dev libtommath-git-dev - - name: run tests - env: - CC: "${{ matrix.cc }}" - PR_NUMBER: ${{ github.event.number }} - REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - bash "${{ matrix.config.BUILDSCRIPT }}" "${{ matrix.config.BUILDNAME }}" "-DUSE_LTM -DLTM_DESC" "makefile V=1" "${{ matrix.config.BUILDOPTIONS }}" "-ltommath" - bash "${{ matrix.config.BUILDSCRIPT }}" "${{ matrix.config.BUILDNAME }}" "-DUSE_TFM -DTFM_DESC" "makefile.shared V=1" "${{ matrix.config.BUILDOPTIONS }}" "-ltfm" - - name: regular logs - if: ${{ !failure() }} - run: | - cat gcc_1.txt || true - cat gcc_2.txt || true - - name: error logs - if: ${{ failure() }} - run: | - cat gcc_1.txt || true - cat gcc_2.txt || true - cat test_std.txt || true - cat test_err.txt || true - cat tv.txt || true - - name: pack build directory - if: ${{ failure() }} - run: | - tar cJf build-${{ github.run_id }}.tar.xz --exclude ./build-${{ github.run_id }}.tar.xz . - - name: upload Artifact - if: ${{ failure() }} - uses: actions/upload-artifact@v4 - with: - name: build-${{ github.run_id }}.tar.xz - path: build-${{ github.run_id }}.tar.xz - retention-days: 1 - - Amalgam: - runs-on: ${{ matrix.os }} - strategy: - matrix: - cc: [ gcc, clang ] - os: [ ubuntu-22.04, ubuntu-24.04 ] - steps: - - uses: actions/checkout@v4 - - name: install dependencies - uses: nick-fields/retry@v4.0.0 - with: - timeout_minutes: 20 - max_attempts: 3 - command: | - sudo apt-get update -qq - sudo apt-get remove -y libtommath1 - curl -s https://packagecloud.io/install/repositories/libtom/packages/script.deb.sh | sudo bash - sudo apt-get install libtommath-git-dev - - name: run tests - env: - CC: "${{ matrix.cc }}" - run: | - make pre_gen - make CFLAGS="-DLTM_DESC -DUSE_LTM" EXTRALIBS="-ltommath" AMALGAM=1 -j$(nproc) check - - CMake: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ ubuntu-22.04, ubuntu-24.04, ubuntu-22.04-arm, ubuntu-24.04-arm ] - build_type: [ '', -DCMAKE_BUILD_TYPE=Debug, -DCMAKE_BUILD_TYPE=Release, -DCMAKE_BUILD_TYPE=RelWithDebInfo, -DCMAKE_BUILD_TYPE=MinSizeRel ] - cc: [ clang, gcc ] - cflags: [ '', '-DLTC_CFLAGS="-DLTC_NO_ASM"'] - config: - # Static library build - - { CMAKEOPTIONS: '-DBUILD_SHARED_LIBS=Off' } - # Shared library build - - { CMAKEOPTIONS: '-DBUILD_SHARED_LIBS=On' } - steps: - - uses: actions/checkout@v4 - - name: install dependencies - uses: nick-fields/retry@v4.0.0 - with: - timeout_minutes: 20 - max_attempts: 3 - command: | - sudo apt-get update -qq - sudo apt-get remove -y libtommath1 - curl -s https://packagecloud.io/install/repositories/libtom/packages/script.deb.sh | sudo bash - sudo apt-get install libtommath-git-dev - sudo apt-get install -y cmake gcc clang llvm - - name: build - run: | - mkdir build - cd build - CC=${{ matrix.cc }} cmake ${{ matrix.config.CMAKEOPTIONS }} ${{ matrix.build_type }} ${{ matrix.cflags }} .. - make -j$(nproc) - - name: test - run: | - cd build - CC=${{ matrix.cc }} cmake ${{ matrix.config.CMAKEOPTIONS }} ${{ matrix.build_type }} ${{ matrix.cflags }} -DBUILD_TESTING=On .. - make -j$(nproc) - ctest - - name: error logs - if: ${{ failure() }} - run: | - cat build/Testing/Temporary/LastTest.log || true - cat demo/build/Testing/Temporary/LastTest.log || true diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 09324220..00000000 --- a/.gitignore +++ /dev/null @@ -1,121 +0,0 @@ -# suppress compiler/linker output -*.[oa] -*.obj -*.dylib* -*.dll* -*.so* -[Dd]ebug/ -[Rr]elease/ -/MSVC_* -.bin/ - -# release files -/libtomcrypt-* -/crypt-* -pre_gen/ - -# suppress output of build process -gcc_[12].txt -testok.txt -test_*.txt -tv.txt -*_tv.txt -doxygen/ -doc/crypt.pdf -doc/refman.pdf - -# *nix/windows test executables -ltc-* -aesgcm -aesgcm.exe -constants -constants.exe -crypt -crypt.exe -der_print_flexi -der_print_flexi.exe -hashsum -hashsum.exe -multi -multi.exe -openssl-enc -openssl-enc.exe -openssh-privkey -openssh-privkey.exe -latex-tables -latex-tables.exe -sizes -sizes.exe -small -small.exe -test -test.exe -tv_gen -tv_gen.exe -timing -timing.exe - -# Visual Studio special files -# ignore user specific settings -*.user -*.suo -# ignore non-compressed browse file (holds information for ClassView, IntelliSense and WizardBar) -*.ncb -# ignore VS intermediate and program database files -*.idb -*.pdb - -# Eclipse special files -.project -.cproject -.settings/ - -# KDevelop special files -*.kdev4 - - -# macOS special files -.DS_Store - -# other special files -showlibs # symlink to .libs - -# oops ;) but we don't want them to appear in the repository... -*.stackdump -*.core - -# misc -*.rej -*.patch -*.diff -*.orig -*.out -*.ll -*.gcda -*.gcno -*.gcov -libtomcrypt.pc - -# output from doc generation -doxygen/ -*.dvi -*.log -*.aux -*.toc -*.idx -*.ilg -*.ind -*.out -*.lof -*.bak - -coverage*/ -coverage*.info - -# coverity intermediate directory etc. -cov-int/ -.coverity_* -libtomcrypt.lzma - -# cmake build directories -build*/ diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 3de1b021..00000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,441 +0,0 @@ -# SPDX-License-Identifier: Unlicense -# -# LibTomCrypt, modular cryptographic library -- Tom St Denis -# - -cmake_minimum_required(VERSION 3.22) - -project( - libtomcrypt - VERSION 1.18.2 - DESCRIPTION "A modular cryptographic library." - HOMEPAGE_URL "https://www.libtom.net/LibTomCrypt" - LANGUAGES C -) - -# package release version -# -# * bump if re-releasing the same VERSION + patches -# * set to 1 if releasing a new VERSION -set(PACKAGE_RELEASE_VERSION 1) - -# ----------------------------------------------------------------------------- -# Include CMake modules -# ----------------------------------------------------------------------------- -include(GNUInstallDirs) -include(CheckIPOSupported) -include(CMakePackageConfigHelpers) -# for potential builds against gnump -include(FindPkgConfig) -# for potential builds with MSVC -include(CMakePushCheckState) -include(CheckSymbolExists) -# default is "No tests" -option(BUILD_TESTING "" OFF) -include(CTest) -include(sources.cmake) - -# ----------------------------------------------------------------------------- -# Options -# ----------------------------------------------------------------------------- -option(WITH_LTM "Build with support for libtommath" TRUE) -option(WITH_TFM "Build with support for tomsfastmath" FALSE) -option(WITH_GMP "Build with support for GNU Multi Precision Arithmetic Library" FALSE) -set(MPI_PROVIDER - "LTM" - CACHE STRING "Build tests and demos against 'LTM', 'TFM' or 'GMP', default is LTM" -) -option(BUILD_SHARED_LIBS - "Build shared library and only the shared library if \"ON\", default is static" OFF -) -option(WITH_PTHREAD "Build with pthread support" FALSE) - -# ----------------------------------------------------------------------------- -# Compose CFLAGS -# ----------------------------------------------------------------------------- -set(LTC_CFLAGS "" CACHE STRING "Optional user-specific CFLAGS") -set(LTC_LDFLAGS "" CACHE STRING "Optional user-specific LDFLAGS") - -# Some information ported from makefile_include.mk - -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - message(STATUS "Setting build type to 'Release' as none was specified.") - set(CMAKE_BUILD_TYPE "Release") -endif() - -# We differentiate between MSVC, WATCOM and GCC-compatible compilers -if(MSVC) - set(LTC_C_FLAGS -W3) -elseif(WATCOM) - set(LTC_C_FLAGS -fo=.obj -oaxt -3r -w3) -else() - set(LTC_C_FLAGS - -Wall - -Wsign-compare - -Wextra - -Wshadow - -Wdeclaration-after-statement - -Wbad-function-cast - -Wcast-align - -Wstrict-prototypes - -Wpointer-arith - -Wsystem-headers - ) - set(CMAKE_C_FLAGS_DEBUG "-g3") - if(LTC_CFLAGS MATCHES "-DARGTYPE") - set(ARGTYPE "") - else() - set(ARGTYPE "-DARGTYPE=4") - endif() - set(CMAKE_C_FLAGS_RELEASE "-O3 -funroll-loops -fomit-frame-pointer ${ARGTYPE}") - if(BUILD_SHARED_LIBS) - set(CMAKE_C_FLAGS_RELWITHDEBINFO "-g3 -O2 ${ARGTYPE}") - else() - set(CMAKE_C_FLAGS_RELWITHDEBINFO "-g3 -O2") - endif() - set(CMAKE_C_FLAGS_MINSIZEREL "-Os") -endif() - -# What compiler do we have and what are their...uhm... peculiarities -if(CMAKE_C_COMPILER_ID MATCHES "(C|c?)lang") - list(APPEND LTC_C_FLAGS -Wno-typedef-redefinition -Wno-tautological-compare - -Wno-builtin-requires-header - ) - # Clang requires at least '-O1' for dead code eliminiation - set(CMAKE_C_FLAGS_DEBUG "-O1 ${CMAKE_C_FLAGS_DEBUG}") -endif() -if(CMAKE_C_COMPILER MATCHES "mingw") - list(APPEND LTC_C_FLAGS -Wno-shadow -Wno-expansion-to-defined -Wno-declaration-after-statement - -Wno-bad-function-cast - ) -endif() -if(CMAKE_SYSTEM_NAME MATCHES "Darwin") - list(APPEND LTC_C_FLAGS -Wno-nullability-completeness) -endif() -if(CMAKE_SYSTEM_NAME MATCHES "CYGWIN") - list(APPEND LTC_C_FLAGS -no-undefined) -endif() - -# If the user set the environment variables at generate-time, append them in order to allow -# overriding our defaults. -# ~~~ -# ${LTC_CFLAGS} means the user passed it via sth like: -# $ cmake -DLTC_CFLAGS="foo" -# ~~~ -list(APPEND LTC_C_FLAGS ${LTC_CFLAGS}) -list(APPEND LTC_LD_FLAGS ${LTC_LDFLAGS}) - -# ----------------------------------------------------------------------------- -# Library targets -# ----------------------------------------------------------------------------- -add_library(${PROJECT_NAME} ${SOURCES} ${PUBLIC_HEADERS} ${PRIVATE_HEADERS}) - -target_include_directories( - ${PROJECT_NAME} PUBLIC $ - $ -) - -target_compile_options(${PROJECT_NAME} BEFORE PRIVATE ${LTC_C_FLAGS}) -target_link_options(${PROJECT_NAME} BEFORE PRIVATE ${LTC_LD_FLAGS}) - -set_target_properties( - ${PROJECT_NAME} - PROPERTIES OUTPUT_NAME tomcrypt - VERSION ${PROJECT_VERSION} - SOVERSION ${PROJECT_VERSION_MAJOR} - PUBLIC_HEADER "${PUBLIC_HEADERS}" -) - -if(MSVC) - cmake_push_check_state() - set(CMAKE_REQUIRED_LIBRARIES bcrypt) - check_symbol_exists(BCryptGenRandom "Windows.h;bcrypt.h" BCRYPT_AVAILABLE) - cmake_pop_check_state() - if(BCRYPT_AVAILABLE) - target_link_libraries(${PROJECT_NAME} PRIVATE Bcrypt) - list(APPEND LTC_C_FLAGS -DLTC_WIN32_BCRYPT) - endif() -endif() - -option(COMPILE_LTO "Build with LTO enabled") -if(COMPILE_LTO) - check_ipo_supported(RESULT COMPILER_SUPPORTS_LTO) - if(COMPILER_SUPPORTS_LTO) - set_property(TARGET ${PROJECT_NAME} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) - else() - message( - SEND_ERROR - "This compiler does not support LTO. Reconfigure ${PROJECT_NAME} with -DCOMPILE_LTO=OFF." - ) - endif() -endif() - -# ----------------------------------------------------------------------------- -# MPI provider -# ----------------------------------------------------------------------------- -# libtommath -if(WITH_LTM) - find_package(libtommath 1.2.0 REQUIRED) - - target_compile_definitions(${PROJECT_NAME} PUBLIC LTM_DESC) - if(MPI_PROVIDER MATCHES "LTM") - target_compile_definitions(${PROJECT_NAME} PUBLIC USE_LTM) - endif() - target_link_libraries(${PROJECT_NAME} PUBLIC libtommath) - list(APPEND LTC_PKG_CONFIG_CFLAGS -DLTM_DESC) - list(APPEND LTC_PKG_CONFIG_LIBS -ltommath) - list(APPEND LTC_DEBIAN_MPI_PROVIDER_DEPENDS libtommath-dev) -endif() -# tomsfastmath -if(WITH_TFM) - find_package(tomsfastmath 0.13.1 REQUIRED) - - target_compile_definitions(${PROJECT_NAME} PUBLIC TFM_DESC) - if(MPI_PROVIDER MATCHES "TFM") - target_compile_definitions(${PROJECT_NAME} PUBLIC USE_TFM) - endif() - target_link_libraries(${PROJECT_NAME} PUBLIC tomsfastmath) - list(APPEND LTC_PKG_CONFIG_CFLAGS -DTFM_DESC) - list(APPEND LTC_PKG_CONFIG_LIBS -ltfm) - list(APPEND LTC_DEBIAN_MPI_PROVIDER_DEPENDS libtfm-dev) -endif() -# GNU MP -if(WITH_GMP) - pkg_check_modules(GMP REQUIRED gmp>=6.1.2) - - target_compile_definitions(${PROJECT_NAME} PUBLIC GMP_DESC) - if(MPI_PROVIDER MATCHES "GMP") - target_compile_definitions(${PROJECT_NAME} PUBLIC USE_GMP) - endif() - target_link_libraries(${PROJECT_NAME} PUBLIC ${GMP_LIBRARIES}) - list(APPEND LTC_PKG_CONFIG_CFLAGS -DGMP_DESC) - list(APPEND LTC_PKG_CONFIG_LIBS -lgmp) - list(APPEND LTC_DEBIAN_MPI_PROVIDER_DEPENDS libgmp-dev) -endif() - -# ----------------------------------------------------------------------------- -# other options -# ----------------------------------------------------------------------------- - -if(WITH_PTHREAD) - set(THREADS_PREFER_PTHREAD_FLAG ON) - find_package(Threads REQUIRED) - if(CMAKE_USE_PTHREADS_INIT) - target_compile_definitions(${PROJECT_NAME} PUBLIC LTC_PTHREAD) - target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads) - list(APPEND LTC_PKG_CONFIG_CFLAGS -DLTC_PTHREAD) - else() - message( - SEND_ERROR - "pthreads not supported. Reconfigure ${PROJECT_NAME} with -DWITH_PTHREAD=OFF." - ) - endif() -endif() - -list(JOIN LTC_PKG_CONFIG_CFLAGS " " PKG_CONFIG_CFLAGS) -list(JOIN LTC_PKG_CONFIG_LIBS " " PKG_CONFIG_LIBS) -list(JOIN LTC_DEBIAN_MPI_PROVIDER_DEPENDS " " DEBIAN_MPI_PROVIDER_DEPENDS) - -# ----------------------------------------------------------------------------- -# demos&test targets -# ----------------------------------------------------------------------------- - -add_subdirectory(demos) -if(BUILD_TESTING) - enable_testing() - add_subdirectory(tests) -endif() - -# --------------------------------------------------------------------------------------- -# Install/export targets and files -# --------------------------------------------------------------------------------------- -set(CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") -set(PROJECT_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake") -set(PROJECT_CONFIG_FILE "${PROJECT_NAME}-config.cmake") -set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") - -# install targets -install( - TARGETS ${PROJECT_NAME} - EXPORT ${TARGETS_EXPORT_NAME} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Libraries - RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} -) - -# Install libtomcrypt.pc for pkg-config if we build a shared library -if(BUILD_SHARED_LIBS) - # Let the user override the default directory of the pkg-config file (usually this shouldn't be - # required to be changed) - set(CMAKE_INSTALL_PKGCONFIGDIR - "${CMAKE_INSTALL_LIBDIR}/pkgconfig" - CACHE PATH "Folder where to install .pc files" - ) - - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc @ONLY - ) - - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc - DESTINATION ${CMAKE_INSTALL_PKGCONFIGDIR} - ) -endif() - -# generate package version file -write_basic_package_version_file( - ${PROJECT_VERSION_FILE} - VERSION ${PROJECT_VERSION} - COMPATIBILITY SameMajorVersion -) - -# install version file -install(FILES ${PROJECT_VERSION_FILE} DESTINATION ${CONFIG_INSTALL_DIR}) - -# build directory package config -export(EXPORT ${TARGETS_EXPORT_NAME} FILE ${PROJECT_CONFIG_FILE}) - -# installed package config -install( - EXPORT ${TARGETS_EXPORT_NAME} - DESTINATION ${CONFIG_INSTALL_DIR} - FILE ${PROJECT_CONFIG_FILE} -) - -# add to CMake registry -export(PACKAGE ${PROJECT_NAME}) - -# --------------------------------------------------------------------------------------- -# Create release packages -# --------------------------------------------------------------------------------------- - -# determine distribution and architecture -find_program(LSB_RELEASE lsb_release) -find_program(SYSCTL sysctl) -find_program(UNAME uname) - -if(UNAME) - execute_process( - COMMAND uname -m - OUTPUT_VARIABLE MACHINE_ARCH - OUTPUT_STRIP_TRAILING_WHITESPACE - ) -elseif(SYSCTL) - execute_process( - COMMAND sysctl -b hw.machine_arch - OUTPUT_VARIABLE MACHINE_ARCH - OUTPUT_STRIP_TRAILING_WHITESPACE - ) -else() - string(TOLOWER ${CMAKE_SYSTEM_NAME} MACHINE_ARCH) -endif() - -if(LSB_RELEASE) - execute_process( - COMMAND lsb_release -si - OUTPUT_VARIABLE LINUX_DISTRO - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - execute_process( - COMMAND lsb_release -sc - OUTPUT_VARIABLE LINUX_DISTRO_CODENAME - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - execute_process( - COMMAND lsb_release -sr - OUTPUT_VARIABLE LINUX_DISTRO_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - - string(TOLOWER ${LINUX_DISTRO} LINUX_DISTRO) - if(LINUX_DISTRO_CODENAME STREQUAL "n/a") - set(DISTRO_PACK_PATH ${LINUX_DISTRO}/${LINUX_DISTRO_VERSION}/) - else() - set(DISTRO_PACK_PATH ${LINUX_DISTRO}/${LINUX_DISTRO_CODENAME}/) - endif() -else() - set(DISTRO_PACK_PATH ${CMAKE_SYSTEM_NAME}/) -endif() - -# make sure untagged versions get a different package name -execute_process( - COMMAND git describe --exact-match --tags - ERROR_QUIET - RESULT_VARIABLE REPO_HAS_TAG -) -if(REPO_HAS_TAG EQUAL 0) - set(PACKAGE_NAME_SUFFIX "") -else() - set(PACKAGE_NAME_SUFFIX "-git") - message(STATUS "Use -git suffix") -endif() - -# default CPack generators -set(CPACK_GENERATOR TGZ STGZ) - -# extra CPack generators -if(LINUX_DISTRO STREQUAL "debian" - OR LINUX_DISTRO STREQUAL "ubuntu" - OR LINUX_DISTRO STREQUAL "linuxmint" -) - list(APPEND CPACK_GENERATOR DEB) -elseif( - LINUX_DISTRO STREQUAL "fedora" - OR LINUX_DISTRO STREQUAL "opensuse" - OR LINUX_DISTRO STREQUAL "centos" -) - list(APPEND CPACK_GENERATOR RPM) -elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") - list(APPEND CPACK_GENERATOR FREEBSD) -endif() - -set(LTC_DEBIAN_SHARED_PACKAGE_NAME "${PROJECT_NAME}${PACKAGE_NAME_SUFFIX}${PROJECT_VERSION_MAJOR}") - -# general CPack config -set(CPACK_PACKAGE_DIRECTORY ${CMAKE_BINARY_DIR}/packages/${DISTRO_PACK_PATH}) -message(STATUS "CPack: packages will be generated under ${CPACK_PACKAGE_DIRECTORY}") -if(BUILD_SHARED_LIBS) - set(CPACK_PACKAGE_NAME "${PROJECT_NAME}${PROJECT_VERSION_MAJOR}") - set(CPACK_DEBIAN_PACKAGE_NAME "${LTC_DEBIAN_SHARED_PACKAGE_NAME}") -else() - set(CPACK_PACKAGE_NAME "${PROJECT_NAME}-devel") - set(CPACK_DEBIAN_LIBRARIES_PACKAGE_NAME "${PROJECT_NAME}${PACKAGE_NAME_SUFFIX}-dev") -endif() -set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LibTomCrypt") -set(CPACK_PACKAGE_VENDOR "libtom projects") -set(CPACK_PACKAGE_CONTACT "libtom@googlegroups.com") -set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") -set(PACKAGE_NAME_TRAILER ${CPACK_PACKAGE_VERSION}-${PACKAGE_RELEASE_VERSION}_${MACHINE_ARCH}) -set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${PACKAGE_NAME_TRAILER}) -set(CPACK_STRIP_FILES ON) - -# deb specific CPack config -set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT) -set(CPACK_DEBIAN_DEBUGINFO_PACKAGE ON) -set(CPACK_DEBIAN_PACKAGE_RELEASE ${PACKAGE_RELEASE_VERSION}) -set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) -if(BUILD_SHARED_LIBS) - set(CPACK_DEBIAN_PACKAGE_SECTION "libs") - set(CPACK_DEBIAN_PACKAGE_DEPENDS ${DEBIAN_MPI_PROVIDER_DEPENDS}) -else() - set(CPACK_DEBIAN_PACKAGE_SECTION "libdevel") - set(CPACK_DEBIAN_PACKAGE_DEPENDS ${LTC_DEBIAN_SHARED_PACKAGE_NAME}) - set(CPACK_DEB_COMPONENT_INSTALL ON) - set(CPACK_ARCHIVE_COMPONENT_INSTALL ON) - set(CPACK_COMPONENTS_ALL Libraries) -endif() - -# rpm specific CPack config -set(CPACK_RPM_PACKAGE_RELEASE ${PACKAGE_RELEASE_VERSION}) -set(CPACK_RPM_PACKAGE_ARCHITECTURE ${MACHINE_ARCH}) -set(CPACK_RPM_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-${PROJECT_VERSION}") -set(CPACK_RPM_PACKAGE_LICENSE "The Unlicense") - -# FreeBSD specific CPack config -set(CPACK_FREEBSD_PACKAGE_MAINTAINER "gahr@FreeBSD.org") -set(CPACK_FREEBSD_PACKAGE_ORIGIN "security/libtomcrypt") -set(CPACK_FREEBSD_PACKAGE_CATEGORIES "security") - -include(CPack) diff --git a/LICENSE b/LICENSE index b23b3c86..2e83cda4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,26 +1,9 @@ - The LibTom license +LibTomCrypt is public domain. As should all quality software be. -This is free and unencumbered software released into the public domain. +All of the software was either written by or donated to Tom St Denis for the purposes +of this project. The only exception is the SAFER.C source which has no known +license status (assumed copyrighted) which is why SAFER,C is shipped as disabled. -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. +Tom St Denis -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to diff --git a/README.md b/README.md deleted file mode 100644 index d6850637..00000000 --- a/README.md +++ /dev/null @@ -1,204 +0,0 @@ -# libtomcrypt - -Previously the git repository contained `doc/crypt.pdf` for detailed documentation. -This was changed and the file is now only available from the tarball of the appropriate version -or from the page https://github.com/libtom/libtomcrypt/releases . - -## Project Status - -### Travis CI - -master: [![Build Status](https://github.com/libtom/libtomcrypt/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/libtom/libtomcrypt/actions/workflows/main.yml?query=branch%3Amaster+++) [![Coverage Status](https://coveralls.io/repos/libtom/libtomcrypt/badge.png?branch=master)](https://coveralls.io/r/libtom/libtomcrypt) - -develop: [![Build Status](https://github.com/libtom/libtomcrypt/actions/workflows/main.yml/badge.svg?branch=develop)](https://github.com/libtom/libtomcrypt/actions/workflows/main.yml?query=branch%3Adevelop+++) [![Coverage Status](https://coveralls.io/repos/libtom/libtomcrypt/badge.png?branch=develop)](https://coveralls.io/r/libtom/libtomcrypt) - -### AppVeyor - -master: [![Build status](https://ci.appveyor.com/api/projects/status/xyl2nbdsyp1tj9ye/branch/master?svg=true)](https://ci.appveyor.com/project/libtom/libtomcrypt/branch/master) - -develop: [![Build status](https://ci.appveyor.com/api/projects/status/xyl2nbdsyp1tj9ye/branch/develop?svg=true)](https://ci.appveyor.com/project/libtom/libtomcrypt/branch/develop) - -### Coverity - -[![Coverity Scan Build Status](https://scan.coverity.com/projects/487/badge.svg)](https://scan.coverity.com/projects/487) - -### ABI Laboratory - -API/ABI changes: [check here](https://abi-laboratory.pro/tracker/timeline/libtomcrypt/) - -## Submitting patches - -Please branch off from develop if you want to submit a patch. - -Patch integration will be faster if tests and documentation are included. - -Please update the makefiles in a separate commit. To update them simply run the `updatemakes.sh` script. - -If you have something bigger to submit, feel free to contact us beforehand. -Then we can give you write access to this repo, so you can open your PR based on this repo -and we can easier follow the rebase-before-merge approach we're using (or even do the rebase ourself). - -### Reviews - -We're using Pull Request reviews to make sure that the code is in line with the existing code base. - -Please have a look [here](https://help.github.com/articles/approving-a-pull-request-with-required-reviews/) to get an idea of the approach. - -## Branches - -Please be aware, that all branches besides _master_ and _develop_ __can__ and __will be__ force-pushed, rebased and/or removed! - -If you want to rely on such an _unstable_ branch, create your own fork of this repository to make sure nothing breaks for you. - -## Configuration options - -By default the library builds its entire feature set (besides `katja`) in a (depending on your needs more or less) optimal way. - -There are numerous configuration options available if you want to trim down the functionality of the library. - -Please have a look at `src/headers/tomcrypt_custom.h` for all available configuration options. - -The following list is a small part of the available, but the most often required, configuration switches. - -| Flag | Behavior | -| ---- | -------- | -| `LTC_NO_TEST` | Remove all algorithm self-tests from the library | -| `LTC_NO_FILE` | Remove all API functions requiring a pre-defined `FILE` data-type (mostly useful for embedded targets) | -| `GMP_DESC` | enable [gmp](https://gmplib.org/) as MPI provider *\*1* | -| `LTM_DESC` | enable [libtommath](http://www.libtom.net/) as MPI provider *\*1* | -| `TFM_DESC` | enable [tomsfastmath](http://www.libtom.net/) as MPI provider *\*1* *\*2* | -| `USE_GMP` | use `gmp` as MPI provider when building the binaries *\*3* | -| `USE_LTM` | use `libtommath` as MPI provider when building the binaries *\*3* | -| `USE_TFM` | use `tomsfastmath` as MPI provider when building the binaries *\*3* | - -*\*1* It is possible to build the library against all MPI providers in parallel and choose at startup-time which math library should be used. - -*\*2* Please be aware that `tomsfastmath` has the limitation of a fixed max size of MPI's. - -*\*3* Only one is supported at the time & this is only required when building the binaries, not when building the library itself. - -## Building the library - -There are several `makefile`s provided. Please choose the one that fits best for you. - -| makefile | use-case | -| -------- | -------- | -| `makefile` | builds a static library (GNU Make required) | -| `makefile.shared` | builds a shared (and static) library (GNU Make required) | -| `makefile.unix` | for unusual UNIX platforms, or if you do not have GNU Make | -| `makefile.mingw` | for usage with the mingw compiler on MS Windows | -| `makefile.msvc` | for usage with the MSVC compiler on MS Windows | -| `libtomcrypt_VS2008.sln` | A VisualStudio 2008 project for MS Windows | - -### Make targets - -The `makefile`s provide several targets to build (VS project excluded). -The following list does not claim to be complete resp. to be available across all `makefile` variants. - -| target | application | -| ------ | ----------- | -| *empty target*/none given | c.f. `library` -| `library` | builds only the library | -| `hashsum` | builds the `hashsum` binary, similar to [`shasum`](https://linux.die.net/man/1/shasum), but with support for all hash-algorithms included in the library *\*4* | -| `crypt` | builds the `crypt` binary, implementing something similar to [`crypt`](https://linux.die.net/man/3/crypt) *\*4* | -| `sizes` | builds the `sizes` binary, printing all internal data sizes on invocation *\*4* | -| `constants` | builds the `constants` binary, printing all internal constants on invocation *\*4* | -| `openssl-enc` | builds the `openssl-enc` binary, which is more or less compatible to [`openssl enc`](https://linux.die.net/man/1/enc) *\*4* *\*5* | -| `test` | builds the `test` binary, which runs all algorithm self-tests + some extended tests *\*4* | -| `timing` | builds the `timing` binary, which can be used to measure timings for algorithms and modes *\*4* | -| `bins` | builds `hashsum` *\*4* | -| `all_test` | builds `test`, `hashsum`, `crypt`, `small`, `tv_gen`, `sizes` & `constants` *\*4* | -| `docs` | builds the developer documentation `doc/crypt.pdf` | -| `install` | installs the `library` and header files *\*7* *\*8* | -| `install_bins` | installs the binaries created by the `bins` target *\*7* *\*8* | -| `install_docs` | installs the documentation created by the `docs` target *\*7* *\*8* | -| `install_test` | installs the test-app created by the `test` target *\*7* *\*8* | -| `install_all` | installs everything (i.e. `library`, `bins`, `docs` and `test`) *\*8* | -| `uninstall` | uninstalls the `library` and header files | - -*\*4* also builds `library` - -*\*5* broken build in some configurations, therefore not built by default - -*\*7* also builds the necessary artifact(s) before installing it - -*\*8* also have a look at the 'Installation' section of this file - -### Examples - -You want to build the library as static library - - make - -You want to build the library as shared library - - make -f makefile.shared - -You have `libtommath` installed on your system and want to build a static library and the `test` binary to run the self-tests. - - make CFLAGS="-DUSE_LTM -DLTM_DESC" EXTRALIBS="-ltommath" test - -You have `tomsfastmath` installed on your system and want to build a shared library and all binaries - - make -f makefile.shared CFLAGS="-DUSE_TFM -DTFM_DESC" EXTRALIBS="-ltfm" all demos - -You have `gmp`, `libtommath` and `tomsfastmath` installed on your system and want to build a static library and the `timing` binary to measure timings against `gmp`. - - make CFLAGS="-DUSE_GMP -DGMP_DESC -DLTM_DESC -DTFM_DESC" EXTRALIBS="-lgmp" timing - -If you have `libtommath` in a non-standard location: - - make CFLAGS="-DUSE_LTM -DLTM_DESC -I/opt/devel/ltm" EXTRALIBS="/opt/devel/ltm/libtommath.a" all - -You want to enable AES-NI support: - - make CFLAGS=-DLTC_AES_NI - -## Installation - -There exist several _install_ make-targets which are described in the table above. - -These targets support the standard ways (c.f. [[GNU]], [[FreeBSD]]) -to modify the installation path via the following set of variables: - - DESTDIR - PREFIX - LIBPATH - INCPATH - DATAPATH - BINPATH - -The entire set of the variables is only supported in `makefile`, `makefile.shared` and `makefile.unix`. - -In case you have to use one of the other makefiles, check in the file which variables are supported. - -### Examples - -You want to install the static library to the default paths - - make install - -You want to install the shared library to a special path and use it from this path - - make -f makefile.shared PREFIX=/opt/special/path - -Have a look at the developer documentation, [[GNU]] or [[FreeBSD]] to get a detailed explanation of all the variables. - -## CMake support - -The project provides support for the CMake build system. - -``` -git clone https://github.com/libtom/libtomcrypt.git -mkdir -p libtomcrypt/build -cd libtomcrypt/build -cmake .. -make -j$(nproc) -``` - -More details around building with CMake can be found in the developer documentation. - - -[GNU]: https://www.gnu.org/prep/standards/html_node/DESTDIR.html - -[FreeBSD]: https://www.freebsd.org/doc/en/books/porters-handbook/porting-prefix.html diff --git a/aes.c b/aes.c new file mode 100644 index 00000000..949c22b6 --- /dev/null +++ b/aes.c @@ -0,0 +1,701 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* AES implementation by Tom St Denis + * + * Derived from the Public Domain source code by + +--- + * rijndael-alg-fst.c + * + * @version 3.0 (December 2000) + * + * Optimised ANSI C code for the Rijndael cipher (now AES) + * + * @author Vincent Rijmen + * @author Antoon Bosselaers + * @author Paulo Barreto +--- + */ + +#include "mycrypt.h" + +#ifdef RIJNDAEL + +#ifndef ENCRYPT_ONLY + +#define SETUP rijndael_setup +#define ECB_ENC rijndael_ecb_encrypt +#define ECB_DEC rijndael_ecb_decrypt +#define ECB_TEST rijndael_test +#define ECB_KS rijndael_keysize + +const struct _cipher_descriptor rijndael_desc = +{ + "rijndael", + 6, + 16, 32, 16, 10, + SETUP, ECB_ENC, ECB_DEC, ECB_TEST, ECB_KS +}; + +const struct _cipher_descriptor aes_desc = +{ + "aes", + 6, + 16, 32, 16, 10, + SETUP, ECB_ENC, ECB_DEC, ECB_TEST, ECB_KS +}; + +#else + +#define SETUP rijndael_enc_setup +#define ECB_ENC rijndael_enc_ecb_encrypt +#define ECB_KS rijndael_enc_keysize + +const struct _cipher_descriptor rijndael_enc_desc = +{ + "rijndael", + 6, + 16, 32, 16, 10, + SETUP, ECB_ENC, NULL, NULL, ECB_KS +}; + +const struct _cipher_descriptor aes_enc_desc = +{ + "aes", + 6, + 16, 32, 16, 10, + SETUP, ECB_ENC, NULL, NULL, ECB_KS +}; + +#endif + +#include "aes_tab.c" + +static ulong32 setup_mix(ulong32 temp) +{ + return (Te4_3[byte(temp, 2)]) ^ + (Te4_2[byte(temp, 1)]) ^ + (Te4_1[byte(temp, 0)]) ^ + (Te4_0[byte(temp, 3)]); +} + +#ifndef ENCRYPT_ONLY +#ifdef SMALL_CODE +static ulong32 setup_mix2(ulong32 temp) +{ + return Td0(255 & Te4[byte(temp, 3)]) ^ + Td1(255 & Te4[byte(temp, 2)]) ^ + Td2(255 & Te4[byte(temp, 1)]) ^ + Td3(255 & Te4[byte(temp, 0)]); +} +#endif +#endif + +int SETUP(const unsigned char *key, int keylen, int rounds, symmetric_key *skey) +{ + int i, j; + ulong32 temp, *rk; +#ifndef ENCRYPT_ONLY + ulong32 *rrk; +#endif + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); + + if (keylen != 16 && keylen != 24 && keylen != 32) { + return CRYPT_INVALID_KEYSIZE; + } + + if (rounds != 0 && rounds != (10 + ((keylen/8)-2)*2)) { + return CRYPT_INVALID_ROUNDS; + } + + skey->rijndael.Nr = 10 + ((keylen/8)-2)*2; + + /* setup the forward key */ + i = 0; + rk = skey->rijndael.eK; + LOAD32H(rk[0], key ); + LOAD32H(rk[1], key + 4); + LOAD32H(rk[2], key + 8); + LOAD32H(rk[3], key + 12); + if (keylen == 16) { + j = 44; + for (;;) { + temp = rk[3]; + rk[4] = rk[0] ^ setup_mix(temp) ^ rcon[i]; + rk[5] = rk[1] ^ rk[4]; + rk[6] = rk[2] ^ rk[5]; + rk[7] = rk[3] ^ rk[6]; + if (++i == 10) { + break; + } + rk += 4; + } + } else if (keylen == 24) { + j = 52; + LOAD32H(rk[4], key + 16); + LOAD32H(rk[5], key + 20); + for (;;) { + #ifdef _MSC_VER + temp = skey->rijndael.eK[rk - skey->rijndael.eK + 5]; + #else + temp = rk[5]; + #endif + rk[ 6] = rk[ 0] ^ setup_mix(temp) ^ rcon[i]; + rk[ 7] = rk[ 1] ^ rk[ 6]; + rk[ 8] = rk[ 2] ^ rk[ 7]; + rk[ 9] = rk[ 3] ^ rk[ 8]; + if (++i == 8) { + break; + } + rk[10] = rk[ 4] ^ rk[ 9]; + rk[11] = rk[ 5] ^ rk[10]; + rk += 6; + } + } else if (keylen == 32) { + j = 60; + LOAD32H(rk[4], key + 16); + LOAD32H(rk[5], key + 20); + LOAD32H(rk[6], key + 24); + LOAD32H(rk[7], key + 28); + for (;;) { + #ifdef _MSC_VER + temp = skey->rijndael.eK[rk - skey->rijndael.eK + 7]; + #else + temp = rk[7]; + #endif + rk[ 8] = rk[ 0] ^ setup_mix(temp) ^ rcon[i]; + rk[ 9] = rk[ 1] ^ rk[ 8]; + rk[10] = rk[ 2] ^ rk[ 9]; + rk[11] = rk[ 3] ^ rk[10]; + if (++i == 7) { + break; + } + temp = rk[11]; + rk[12] = rk[ 4] ^ setup_mix(ROR(temp, 8)); + rk[13] = rk[ 5] ^ rk[12]; + rk[14] = rk[ 6] ^ rk[13]; + rk[15] = rk[ 7] ^ rk[14]; + rk += 8; + } + } else { + /* this can't happen */ + j = 4; + } + +#ifndef ENCRYPT_ONLY + /* setup the inverse key now */ + rk = skey->rijndael.dK; + rrk = skey->rijndael.eK + j - 4; + + /* apply the inverse MixColumn transform to all round keys but the first and the last: */ + /* copy first */ + *rk++ = *rrk++; + *rk++ = *rrk++; + *rk++ = *rrk++; + *rk = *rrk; + rk -= 3; rrk -= 3; + + for (i = 1; i < skey->rijndael.Nr; i++) { + rrk -= 4; + rk += 4; + #ifdef SMALL_CODE + temp = rrk[0]; + rk[0] = setup_mix2(temp); + temp = rrk[1]; + rk[1] = setup_mix2(temp); + temp = rrk[2]; + rk[2] = setup_mix2(temp); + temp = rrk[3]; + rk[3] = setup_mix2(temp); + #else + temp = rrk[0]; + rk[0] = + Tks0[byte(temp, 3)] ^ + Tks1[byte(temp, 2)] ^ + Tks2[byte(temp, 1)] ^ + Tks3[byte(temp, 0)]; + temp = rrk[1]; + rk[1] = + Tks0[byte(temp, 3)] ^ + Tks1[byte(temp, 2)] ^ + Tks2[byte(temp, 1)] ^ + Tks3[byte(temp, 0)]; + temp = rrk[2]; + rk[2] = + Tks0[byte(temp, 3)] ^ + Tks1[byte(temp, 2)] ^ + Tks2[byte(temp, 1)] ^ + Tks3[byte(temp, 0)]; + temp = rrk[3]; + rk[3] = + Tks0[byte(temp, 3)] ^ + Tks1[byte(temp, 2)] ^ + Tks2[byte(temp, 1)] ^ + Tks3[byte(temp, 0)]; + #endif + + } + + /* copy last */ + rrk -= 4; + rk += 4; + *rk++ = *rrk++; + *rk++ = *rrk++; + *rk++ = *rrk++; + *rk = *rrk; +#endif /* ENCRYPT_ONLY */ + + return CRYPT_OK; +} + +#ifdef CLEAN_STACK +static void _rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) +#else +void ECB_ENC(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) +#endif +{ + ulong32 s0, s1, s2, s3, t0, t1, t2, t3, *rk; + int Nr, r; + + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(skey != NULL); + + Nr = skey->rijndael.Nr; + rk = skey->rijndael.eK; + + /* + * map byte array block to cipher state + * and add initial round key: + */ + LOAD32H(s0, pt ); s0 ^= rk[0]; + LOAD32H(s1, pt + 4); s1 ^= rk[1]; + LOAD32H(s2, pt + 8); s2 ^= rk[2]; + LOAD32H(s3, pt + 12); s3 ^= rk[3]; + + +#ifdef SMALL_CODE + + for (r = 0; ; r++) { + rk += 4; + t0 = + Te0(byte(s0, 3)) ^ + Te1(byte(s1, 2)) ^ + Te2(byte(s2, 1)) ^ + Te3(byte(s3, 0)) ^ + rk[0]; + t1 = + Te0(byte(s1, 3)) ^ + Te1(byte(s2, 2)) ^ + Te2(byte(s3, 1)) ^ + Te3(byte(s0, 0)) ^ + rk[1]; + t2 = + Te0(byte(s2, 3)) ^ + Te1(byte(s3, 2)) ^ + Te2(byte(s0, 1)) ^ + Te3(byte(s1, 0)) ^ + rk[2]; + t3 = + Te0(byte(s3, 3)) ^ + Te1(byte(s0, 2)) ^ + Te2(byte(s1, 1)) ^ + Te3(byte(s2, 0)) ^ + rk[3]; + if (r == Nr-2) { + break; + } + s0 = t0; s1 = t1; s2 = t2; s3 = t3; + } + rk += 4; + +#else + + /* + * Nr - 1 full rounds: + */ + r = Nr >> 1; + for (;;) { + t0 = + Te0(byte(s0, 3)) ^ + Te1(byte(s1, 2)) ^ + Te2(byte(s2, 1)) ^ + Te3(byte(s3, 0)) ^ + rk[4]; + t1 = + Te0(byte(s1, 3)) ^ + Te1(byte(s2, 2)) ^ + Te2(byte(s3, 1)) ^ + Te3(byte(s0, 0)) ^ + rk[5]; + t2 = + Te0(byte(s2, 3)) ^ + Te1(byte(s3, 2)) ^ + Te2(byte(s0, 1)) ^ + Te3(byte(s1, 0)) ^ + rk[6]; + t3 = + Te0(byte(s3, 3)) ^ + Te1(byte(s0, 2)) ^ + Te2(byte(s1, 1)) ^ + Te3(byte(s2, 0)) ^ + rk[7]; + + rk += 8; + if (--r == 0) { + break; + } + + s0 = + Te0(byte(t0, 3)) ^ + Te1(byte(t1, 2)) ^ + Te2(byte(t2, 1)) ^ + Te3(byte(t3, 0)) ^ + rk[0]; + s1 = + Te0(byte(t1, 3)) ^ + Te1(byte(t2, 2)) ^ + Te2(byte(t3, 1)) ^ + Te3(byte(t0, 0)) ^ + rk[1]; + s2 = + Te0(byte(t2, 3)) ^ + Te1(byte(t3, 2)) ^ + Te2(byte(t0, 1)) ^ + Te3(byte(t1, 0)) ^ + rk[2]; + s3 = + Te0(byte(t3, 3)) ^ + Te1(byte(t0, 2)) ^ + Te2(byte(t1, 1)) ^ + Te3(byte(t2, 0)) ^ + rk[3]; + } + +#endif + + /* + * apply last round and + * map cipher state to byte array block: + */ + s0 = + (Te4_3[byte(t0, 3)]) ^ + (Te4_2[byte(t1, 2)]) ^ + (Te4_1[byte(t2, 1)]) ^ + (Te4_0[byte(t3, 0)]) ^ + rk[0]; + STORE32H(s0, ct); + s1 = + (Te4_3[byte(t1, 3)]) ^ + (Te4_2[byte(t2, 2)]) ^ + (Te4_1[byte(t3, 1)]) ^ + (Te4_0[byte(t0, 0)]) ^ + rk[1]; + STORE32H(s1, ct+4); + s2 = + (Te4_3[byte(t2, 3)]) ^ + (Te4_2[byte(t3, 2)]) ^ + (Te4_1[byte(t0, 1)]) ^ + (Te4_0[byte(t1, 0)]) ^ + rk[2]; + STORE32H(s2, ct+8); + s3 = + (Te4_3[byte(t3, 3)]) ^ + (Te4_2[byte(t0, 2)]) ^ + (Te4_1[byte(t1, 1)]) ^ + (Te4_0[byte(t2, 0)]) ^ + rk[3]; + STORE32H(s3, ct+12); +} + +#ifdef CLEAN_STACK +void ECB_ENC(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) +{ + _rijndael_ecb_encrypt(pt, ct, skey); + burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2); +} +#endif + +#ifndef ENCRYPT_ONLY + +#ifdef CLEAN_STACK +static void _rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) +#else +void ECB_DEC(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) +#endif +{ + ulong32 s0, s1, s2, s3, t0, t1, t2, t3, *rk; + int Nr, r; + + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(skey != NULL); + + Nr = skey->rijndael.Nr; + rk = skey->rijndael.dK; + + /* + * map byte array block to cipher state + * and add initial round key: + */ + LOAD32H(s0, ct ); s0 ^= rk[0]; + LOAD32H(s1, ct + 4); s1 ^= rk[1]; + LOAD32H(s2, ct + 8); s2 ^= rk[2]; + LOAD32H(s3, ct + 12); s3 ^= rk[3]; + +#ifdef SMALL_CODE + for (r = 0; ; r++) { + rk += 4; + t0 = + Td0(byte(s0, 3)) ^ + Td1(byte(s3, 2)) ^ + Td2(byte(s2, 1)) ^ + Td3(byte(s1, 0)) ^ + rk[0]; + t1 = + Td0(byte(s1, 3)) ^ + Td1(byte(s0, 2)) ^ + Td2(byte(s3, 1)) ^ + Td3(byte(s2, 0)) ^ + rk[1]; + t2 = + Td0(byte(s2, 3)) ^ + Td1(byte(s1, 2)) ^ + Td2(byte(s0, 1)) ^ + Td3(byte(s3, 0)) ^ + rk[2]; + t3 = + Td0(byte(s3, 3)) ^ + Td1(byte(s2, 2)) ^ + Td2(byte(s1, 1)) ^ + Td3(byte(s0, 0)) ^ + rk[3]; + if (r == Nr-2) { + break; + } + s0 = t0; s1 = t1; s2 = t2; s3 = t3; + } + rk += 4; + +#else + + /* + * Nr - 1 full rounds: + */ + r = Nr >> 1; + for (;;) { + + t0 = + Td0(byte(s0, 3)) ^ + Td1(byte(s3, 2)) ^ + Td2(byte(s2, 1)) ^ + Td3(byte(s1, 0)) ^ + rk[4]; + t1 = + Td0(byte(s1, 3)) ^ + Td1(byte(s0, 2)) ^ + Td2(byte(s3, 1)) ^ + Td3(byte(s2, 0)) ^ + rk[5]; + t2 = + Td0(byte(s2, 3)) ^ + Td1(byte(s1, 2)) ^ + Td2(byte(s0, 1)) ^ + Td3(byte(s3, 0)) ^ + rk[6]; + t3 = + Td0(byte(s3, 3)) ^ + Td1(byte(s2, 2)) ^ + Td2(byte(s1, 1)) ^ + Td3(byte(s0, 0)) ^ + rk[7]; + + rk += 8; + if (--r == 0) { + break; + } + + + s0 = + Td0(byte(t0, 3)) ^ + Td1(byte(t3, 2)) ^ + Td2(byte(t2, 1)) ^ + Td3(byte(t1, 0)) ^ + rk[0]; + s1 = + Td0(byte(t1, 3)) ^ + Td1(byte(t0, 2)) ^ + Td2(byte(t3, 1)) ^ + Td3(byte(t2, 0)) ^ + rk[1]; + s2 = + Td0(byte(t2, 3)) ^ + Td1(byte(t1, 2)) ^ + Td2(byte(t0, 1)) ^ + Td3(byte(t3, 0)) ^ + rk[2]; + s3 = + Td0(byte(t3, 3)) ^ + Td1(byte(t2, 2)) ^ + Td2(byte(t1, 1)) ^ + Td3(byte(t0, 0)) ^ + rk[3]; + } +#endif + + /* + * apply last round and + * map cipher state to byte array block: + */ + s0 = + (Td4[byte(t0, 3)] & 0xff000000) ^ + (Td4[byte(t3, 2)] & 0x00ff0000) ^ + (Td4[byte(t2, 1)] & 0x0000ff00) ^ + (Td4[byte(t1, 0)] & 0x000000ff) ^ + rk[0]; + STORE32H(s0, pt); + s1 = + (Td4[byte(t1, 3)] & 0xff000000) ^ + (Td4[byte(t0, 2)] & 0x00ff0000) ^ + (Td4[byte(t3, 1)] & 0x0000ff00) ^ + (Td4[byte(t2, 0)] & 0x000000ff) ^ + rk[1]; + STORE32H(s1, pt+4); + s2 = + (Td4[byte(t2, 3)] & 0xff000000) ^ + (Td4[byte(t1, 2)] & 0x00ff0000) ^ + (Td4[byte(t0, 1)] & 0x0000ff00) ^ + (Td4[byte(t3, 0)] & 0x000000ff) ^ + rk[2]; + STORE32H(s2, pt+8); + s3 = + (Td4[byte(t3, 3)] & 0xff000000) ^ + (Td4[byte(t2, 2)] & 0x00ff0000) ^ + (Td4[byte(t1, 1)] & 0x0000ff00) ^ + (Td4[byte(t0, 0)] & 0x000000ff) ^ + rk[3]; + STORE32H(s3, pt+12); +} + + +#ifdef CLEAN_STACK +void ECB_DEC(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) +{ + _rijndael_ecb_decrypt(ct, pt, skey); + burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2); +} +#endif + +int ECB_TEST(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + int err; + static const struct { + int keylen; + unsigned char key[32], pt[16], ct[16]; + } tests[] = { + { 16, + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, + { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, + { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, + 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a } + }, { + 24, + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 }, + { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, + { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0, + 0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 } + }, { + 32, + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }, + { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, + { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf, + 0xea, 0xfc, 0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 } + } + }; + + symmetric_key key; + unsigned char tmp[2][16]; + int i, y; + + for (i = 0; i < (int)(sizeof(tests)/sizeof(tests[0])); i++) { + zeromem(&key, sizeof(key)); + if ((err = rijndael_setup(tests[i].key, tests[i].keylen, 0, &key)) != CRYPT_OK) { + return err; + } + + rijndael_ecb_encrypt(tests[i].pt, tmp[0], &key); + rijndael_ecb_decrypt(tmp[0], tmp[1], &key); + if (memcmp(tmp[0], tests[i].ct, 16) || memcmp(tmp[1], tests[i].pt, 16)) { +#if 0 + printf("\n\nTest %d failed\n", i); + if (memcmp(tmp[0], tests[i].ct, 16)) { + printf("CT: "); + for (i = 0; i < 16; i++) { + printf("%02x ", tmp[0][i]); + } + printf("\n"); + } else { + printf("PT: "); + for (i = 0; i < 16; i++) { + printf("%02x ", tmp[1][i]); + } + printf("\n"); + } +#endif + return CRYPT_FAIL_TESTVECTOR; + } + + /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ + for (y = 0; y < 16; y++) tmp[0][y] = 0; + for (y = 0; y < 1000; y++) rijndael_ecb_encrypt(tmp[0], tmp[0], &key); + for (y = 0; y < 1000; y++) rijndael_ecb_decrypt(tmp[0], tmp[0], &key); + for (y = 0; y < 16; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; + } + return CRYPT_OK; + #endif +} + +#endif /* ENCRYPT_ONLY */ + +int ECB_KS(int *desired_keysize) +{ + _ARGCHK(desired_keysize != NULL); + + if (*desired_keysize < 16) + return CRYPT_INVALID_KEYSIZE; + if (*desired_keysize < 24) { + *desired_keysize = 16; + return CRYPT_OK; + } else if (*desired_keysize < 32) { + *desired_keysize = 24; + return CRYPT_OK; + } else { + *desired_keysize = 32; + return CRYPT_OK; + } +} + +#endif + diff --git a/src/ciphers/aes/aes_tab.c b/aes_tab.c similarity index 81% rename from src/ciphers/aes/aes_tab.c rename to aes_tab.c index d1818341..cb450a77 100644 --- a/src/ciphers/aes/aes_tab.c +++ b/aes_tab.c @@ -1,5 +1,13 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ /* The precomputed tables for AES */ /* Te0[x] = S [x].[02, 01, 01, 03]; @@ -15,12 +23,6 @@ Td3[x] = Si[x].[09, 0d, 0b, 0e]; Td4[x] = Si[x].[01, 01, 01, 01]; */ -#if defined(LTC_RIJNDAEL) && defined(LTC_AES_TAB_C) - -/** - @file aes_tab.c - AES tables -*/ static const ulong32 TE0[256] = { 0xc66363a5UL, 0xf87c7c84UL, 0xee777799UL, 0xf67b7b8dUL, 0xfff2f20dUL, 0xd66b6bbdUL, 0xde6f6fb1UL, 0x91c5c554UL, @@ -88,7 +90,6 @@ static const ulong32 TE0[256] = { 0x7bb0b0cbUL, 0xa85454fcUL, 0x6dbbbbd6UL, 0x2c16163aUL, }; -#if !defined(PELI_TAB) && defined(LTC_SMALL_CODE) static const ulong32 Te4[256] = { 0x63636363UL, 0x7c7c7c7cUL, 0x77777777UL, 0x7b7b7b7bUL, 0xf2f2f2f2UL, 0x6b6b6b6bUL, 0x6f6f6f6fUL, 0xc5c5c5c5UL, @@ -155,7 +156,6 @@ static const ulong32 Te4[256] = { 0x41414141UL, 0x99999999UL, 0x2d2d2d2dUL, 0x0f0f0f0fUL, 0xb0b0b0b0UL, 0x54545454UL, 0xbbbbbbbbUL, 0x16161616UL, }; -#endif #ifndef ENCRYPT_ONLY @@ -295,17 +295,17 @@ static const ulong32 Td4[256] = { #endif /* ENCRYPT_ONLY */ -#ifdef LTC_SMALL_CODE +#ifdef SMALL_CODE #define Te0(x) TE0[x] -#define Te1(x) RORc(TE0[x], 8) -#define Te2(x) RORc(TE0[x], 16) -#define Te3(x) RORc(TE0[x], 24) +#define Te1(x) ROR(TE0[x], 8) +#define Te2(x) ROR(TE0[x], 16) +#define Te3(x) ROR(TE0[x], 24) #define Td0(x) TD0[x] -#define Td1(x) RORc(TD0[x], 8) -#define Td2(x) RORc(TD0[x], 16) -#define Td3(x) RORc(TD0[x], 24) +#define Td1(x) ROR(TD0[x], 8) +#define Td2(x) ROR(TD0[x], 16) +#define Td3(x) ROR(TD0[x], 24) #define Te4_0 0x000000FF & Te4 #define Te4_1 0x0000FF00 & Te4 @@ -524,147 +524,145 @@ static const ulong32 TE3[256] = { 0xb0b0cb7bUL, 0x5454fca8UL, 0xbbbbd66dUL, 0x16163a2cUL, }; -#ifndef PELI_TAB static const ulong32 Te4_0[] = { -0x00000063UL, 0x0000007cUL, 0x00000077UL, 0x0000007bUL, 0x000000f2UL, 0x0000006bUL, 0x0000006fUL, 0x000000c5UL, -0x00000030UL, 0x00000001UL, 0x00000067UL, 0x0000002bUL, 0x000000feUL, 0x000000d7UL, 0x000000abUL, 0x00000076UL, -0x000000caUL, 0x00000082UL, 0x000000c9UL, 0x0000007dUL, 0x000000faUL, 0x00000059UL, 0x00000047UL, 0x000000f0UL, -0x000000adUL, 0x000000d4UL, 0x000000a2UL, 0x000000afUL, 0x0000009cUL, 0x000000a4UL, 0x00000072UL, 0x000000c0UL, -0x000000b7UL, 0x000000fdUL, 0x00000093UL, 0x00000026UL, 0x00000036UL, 0x0000003fUL, 0x000000f7UL, 0x000000ccUL, -0x00000034UL, 0x000000a5UL, 0x000000e5UL, 0x000000f1UL, 0x00000071UL, 0x000000d8UL, 0x00000031UL, 0x00000015UL, -0x00000004UL, 0x000000c7UL, 0x00000023UL, 0x000000c3UL, 0x00000018UL, 0x00000096UL, 0x00000005UL, 0x0000009aUL, -0x00000007UL, 0x00000012UL, 0x00000080UL, 0x000000e2UL, 0x000000ebUL, 0x00000027UL, 0x000000b2UL, 0x00000075UL, -0x00000009UL, 0x00000083UL, 0x0000002cUL, 0x0000001aUL, 0x0000001bUL, 0x0000006eUL, 0x0000005aUL, 0x000000a0UL, -0x00000052UL, 0x0000003bUL, 0x000000d6UL, 0x000000b3UL, 0x00000029UL, 0x000000e3UL, 0x0000002fUL, 0x00000084UL, -0x00000053UL, 0x000000d1UL, 0x00000000UL, 0x000000edUL, 0x00000020UL, 0x000000fcUL, 0x000000b1UL, 0x0000005bUL, -0x0000006aUL, 0x000000cbUL, 0x000000beUL, 0x00000039UL, 0x0000004aUL, 0x0000004cUL, 0x00000058UL, 0x000000cfUL, -0x000000d0UL, 0x000000efUL, 0x000000aaUL, 0x000000fbUL, 0x00000043UL, 0x0000004dUL, 0x00000033UL, 0x00000085UL, -0x00000045UL, 0x000000f9UL, 0x00000002UL, 0x0000007fUL, 0x00000050UL, 0x0000003cUL, 0x0000009fUL, 0x000000a8UL, -0x00000051UL, 0x000000a3UL, 0x00000040UL, 0x0000008fUL, 0x00000092UL, 0x0000009dUL, 0x00000038UL, 0x000000f5UL, -0x000000bcUL, 0x000000b6UL, 0x000000daUL, 0x00000021UL, 0x00000010UL, 0x000000ffUL, 0x000000f3UL, 0x000000d2UL, -0x000000cdUL, 0x0000000cUL, 0x00000013UL, 0x000000ecUL, 0x0000005fUL, 0x00000097UL, 0x00000044UL, 0x00000017UL, -0x000000c4UL, 0x000000a7UL, 0x0000007eUL, 0x0000003dUL, 0x00000064UL, 0x0000005dUL, 0x00000019UL, 0x00000073UL, -0x00000060UL, 0x00000081UL, 0x0000004fUL, 0x000000dcUL, 0x00000022UL, 0x0000002aUL, 0x00000090UL, 0x00000088UL, -0x00000046UL, 0x000000eeUL, 0x000000b8UL, 0x00000014UL, 0x000000deUL, 0x0000005eUL, 0x0000000bUL, 0x000000dbUL, -0x000000e0UL, 0x00000032UL, 0x0000003aUL, 0x0000000aUL, 0x00000049UL, 0x00000006UL, 0x00000024UL, 0x0000005cUL, -0x000000c2UL, 0x000000d3UL, 0x000000acUL, 0x00000062UL, 0x00000091UL, 0x00000095UL, 0x000000e4UL, 0x00000079UL, -0x000000e7UL, 0x000000c8UL, 0x00000037UL, 0x0000006dUL, 0x0000008dUL, 0x000000d5UL, 0x0000004eUL, 0x000000a9UL, -0x0000006cUL, 0x00000056UL, 0x000000f4UL, 0x000000eaUL, 0x00000065UL, 0x0000007aUL, 0x000000aeUL, 0x00000008UL, -0x000000baUL, 0x00000078UL, 0x00000025UL, 0x0000002eUL, 0x0000001cUL, 0x000000a6UL, 0x000000b4UL, 0x000000c6UL, -0x000000e8UL, 0x000000ddUL, 0x00000074UL, 0x0000001fUL, 0x0000004bUL, 0x000000bdUL, 0x0000008bUL, 0x0000008aUL, -0x00000070UL, 0x0000003eUL, 0x000000b5UL, 0x00000066UL, 0x00000048UL, 0x00000003UL, 0x000000f6UL, 0x0000000eUL, -0x00000061UL, 0x00000035UL, 0x00000057UL, 0x000000b9UL, 0x00000086UL, 0x000000c1UL, 0x0000001dUL, 0x0000009eUL, -0x000000e1UL, 0x000000f8UL, 0x00000098UL, 0x00000011UL, 0x00000069UL, 0x000000d9UL, 0x0000008eUL, 0x00000094UL, -0x0000009bUL, 0x0000001eUL, 0x00000087UL, 0x000000e9UL, 0x000000ceUL, 0x00000055UL, 0x00000028UL, 0x000000dfUL, -0x0000008cUL, 0x000000a1UL, 0x00000089UL, 0x0000000dUL, 0x000000bfUL, 0x000000e6UL, 0x00000042UL, 0x00000068UL, +0x00000063UL, 0x0000007cUL, 0x00000077UL, 0x0000007bUL, 0x000000f2UL, 0x0000006bUL, 0x0000006fUL, 0x000000c5UL, +0x00000030UL, 0x00000001UL, 0x00000067UL, 0x0000002bUL, 0x000000feUL, 0x000000d7UL, 0x000000abUL, 0x00000076UL, +0x000000caUL, 0x00000082UL, 0x000000c9UL, 0x0000007dUL, 0x000000faUL, 0x00000059UL, 0x00000047UL, 0x000000f0UL, +0x000000adUL, 0x000000d4UL, 0x000000a2UL, 0x000000afUL, 0x0000009cUL, 0x000000a4UL, 0x00000072UL, 0x000000c0UL, +0x000000b7UL, 0x000000fdUL, 0x00000093UL, 0x00000026UL, 0x00000036UL, 0x0000003fUL, 0x000000f7UL, 0x000000ccUL, +0x00000034UL, 0x000000a5UL, 0x000000e5UL, 0x000000f1UL, 0x00000071UL, 0x000000d8UL, 0x00000031UL, 0x00000015UL, +0x00000004UL, 0x000000c7UL, 0x00000023UL, 0x000000c3UL, 0x00000018UL, 0x00000096UL, 0x00000005UL, 0x0000009aUL, +0x00000007UL, 0x00000012UL, 0x00000080UL, 0x000000e2UL, 0x000000ebUL, 0x00000027UL, 0x000000b2UL, 0x00000075UL, +0x00000009UL, 0x00000083UL, 0x0000002cUL, 0x0000001aUL, 0x0000001bUL, 0x0000006eUL, 0x0000005aUL, 0x000000a0UL, +0x00000052UL, 0x0000003bUL, 0x000000d6UL, 0x000000b3UL, 0x00000029UL, 0x000000e3UL, 0x0000002fUL, 0x00000084UL, +0x00000053UL, 0x000000d1UL, 0x00000000UL, 0x000000edUL, 0x00000020UL, 0x000000fcUL, 0x000000b1UL, 0x0000005bUL, +0x0000006aUL, 0x000000cbUL, 0x000000beUL, 0x00000039UL, 0x0000004aUL, 0x0000004cUL, 0x00000058UL, 0x000000cfUL, +0x000000d0UL, 0x000000efUL, 0x000000aaUL, 0x000000fbUL, 0x00000043UL, 0x0000004dUL, 0x00000033UL, 0x00000085UL, +0x00000045UL, 0x000000f9UL, 0x00000002UL, 0x0000007fUL, 0x00000050UL, 0x0000003cUL, 0x0000009fUL, 0x000000a8UL, +0x00000051UL, 0x000000a3UL, 0x00000040UL, 0x0000008fUL, 0x00000092UL, 0x0000009dUL, 0x00000038UL, 0x000000f5UL, +0x000000bcUL, 0x000000b6UL, 0x000000daUL, 0x00000021UL, 0x00000010UL, 0x000000ffUL, 0x000000f3UL, 0x000000d2UL, +0x000000cdUL, 0x0000000cUL, 0x00000013UL, 0x000000ecUL, 0x0000005fUL, 0x00000097UL, 0x00000044UL, 0x00000017UL, +0x000000c4UL, 0x000000a7UL, 0x0000007eUL, 0x0000003dUL, 0x00000064UL, 0x0000005dUL, 0x00000019UL, 0x00000073UL, +0x00000060UL, 0x00000081UL, 0x0000004fUL, 0x000000dcUL, 0x00000022UL, 0x0000002aUL, 0x00000090UL, 0x00000088UL, +0x00000046UL, 0x000000eeUL, 0x000000b8UL, 0x00000014UL, 0x000000deUL, 0x0000005eUL, 0x0000000bUL, 0x000000dbUL, +0x000000e0UL, 0x00000032UL, 0x0000003aUL, 0x0000000aUL, 0x00000049UL, 0x00000006UL, 0x00000024UL, 0x0000005cUL, +0x000000c2UL, 0x000000d3UL, 0x000000acUL, 0x00000062UL, 0x00000091UL, 0x00000095UL, 0x000000e4UL, 0x00000079UL, +0x000000e7UL, 0x000000c8UL, 0x00000037UL, 0x0000006dUL, 0x0000008dUL, 0x000000d5UL, 0x0000004eUL, 0x000000a9UL, +0x0000006cUL, 0x00000056UL, 0x000000f4UL, 0x000000eaUL, 0x00000065UL, 0x0000007aUL, 0x000000aeUL, 0x00000008UL, +0x000000baUL, 0x00000078UL, 0x00000025UL, 0x0000002eUL, 0x0000001cUL, 0x000000a6UL, 0x000000b4UL, 0x000000c6UL, +0x000000e8UL, 0x000000ddUL, 0x00000074UL, 0x0000001fUL, 0x0000004bUL, 0x000000bdUL, 0x0000008bUL, 0x0000008aUL, +0x00000070UL, 0x0000003eUL, 0x000000b5UL, 0x00000066UL, 0x00000048UL, 0x00000003UL, 0x000000f6UL, 0x0000000eUL, +0x00000061UL, 0x00000035UL, 0x00000057UL, 0x000000b9UL, 0x00000086UL, 0x000000c1UL, 0x0000001dUL, 0x0000009eUL, +0x000000e1UL, 0x000000f8UL, 0x00000098UL, 0x00000011UL, 0x00000069UL, 0x000000d9UL, 0x0000008eUL, 0x00000094UL, +0x0000009bUL, 0x0000001eUL, 0x00000087UL, 0x000000e9UL, 0x000000ceUL, 0x00000055UL, 0x00000028UL, 0x000000dfUL, +0x0000008cUL, 0x000000a1UL, 0x00000089UL, 0x0000000dUL, 0x000000bfUL, 0x000000e6UL, 0x00000042UL, 0x00000068UL, 0x00000041UL, 0x00000099UL, 0x0000002dUL, 0x0000000fUL, 0x000000b0UL, 0x00000054UL, 0x000000bbUL, 0x00000016UL }; static const ulong32 Te4_1[] = { -0x00006300UL, 0x00007c00UL, 0x00007700UL, 0x00007b00UL, 0x0000f200UL, 0x00006b00UL, 0x00006f00UL, 0x0000c500UL, -0x00003000UL, 0x00000100UL, 0x00006700UL, 0x00002b00UL, 0x0000fe00UL, 0x0000d700UL, 0x0000ab00UL, 0x00007600UL, -0x0000ca00UL, 0x00008200UL, 0x0000c900UL, 0x00007d00UL, 0x0000fa00UL, 0x00005900UL, 0x00004700UL, 0x0000f000UL, -0x0000ad00UL, 0x0000d400UL, 0x0000a200UL, 0x0000af00UL, 0x00009c00UL, 0x0000a400UL, 0x00007200UL, 0x0000c000UL, -0x0000b700UL, 0x0000fd00UL, 0x00009300UL, 0x00002600UL, 0x00003600UL, 0x00003f00UL, 0x0000f700UL, 0x0000cc00UL, -0x00003400UL, 0x0000a500UL, 0x0000e500UL, 0x0000f100UL, 0x00007100UL, 0x0000d800UL, 0x00003100UL, 0x00001500UL, -0x00000400UL, 0x0000c700UL, 0x00002300UL, 0x0000c300UL, 0x00001800UL, 0x00009600UL, 0x00000500UL, 0x00009a00UL, -0x00000700UL, 0x00001200UL, 0x00008000UL, 0x0000e200UL, 0x0000eb00UL, 0x00002700UL, 0x0000b200UL, 0x00007500UL, -0x00000900UL, 0x00008300UL, 0x00002c00UL, 0x00001a00UL, 0x00001b00UL, 0x00006e00UL, 0x00005a00UL, 0x0000a000UL, -0x00005200UL, 0x00003b00UL, 0x0000d600UL, 0x0000b300UL, 0x00002900UL, 0x0000e300UL, 0x00002f00UL, 0x00008400UL, -0x00005300UL, 0x0000d100UL, 0x00000000UL, 0x0000ed00UL, 0x00002000UL, 0x0000fc00UL, 0x0000b100UL, 0x00005b00UL, -0x00006a00UL, 0x0000cb00UL, 0x0000be00UL, 0x00003900UL, 0x00004a00UL, 0x00004c00UL, 0x00005800UL, 0x0000cf00UL, -0x0000d000UL, 0x0000ef00UL, 0x0000aa00UL, 0x0000fb00UL, 0x00004300UL, 0x00004d00UL, 0x00003300UL, 0x00008500UL, -0x00004500UL, 0x0000f900UL, 0x00000200UL, 0x00007f00UL, 0x00005000UL, 0x00003c00UL, 0x00009f00UL, 0x0000a800UL, -0x00005100UL, 0x0000a300UL, 0x00004000UL, 0x00008f00UL, 0x00009200UL, 0x00009d00UL, 0x00003800UL, 0x0000f500UL, -0x0000bc00UL, 0x0000b600UL, 0x0000da00UL, 0x00002100UL, 0x00001000UL, 0x0000ff00UL, 0x0000f300UL, 0x0000d200UL, -0x0000cd00UL, 0x00000c00UL, 0x00001300UL, 0x0000ec00UL, 0x00005f00UL, 0x00009700UL, 0x00004400UL, 0x00001700UL, -0x0000c400UL, 0x0000a700UL, 0x00007e00UL, 0x00003d00UL, 0x00006400UL, 0x00005d00UL, 0x00001900UL, 0x00007300UL, -0x00006000UL, 0x00008100UL, 0x00004f00UL, 0x0000dc00UL, 0x00002200UL, 0x00002a00UL, 0x00009000UL, 0x00008800UL, -0x00004600UL, 0x0000ee00UL, 0x0000b800UL, 0x00001400UL, 0x0000de00UL, 0x00005e00UL, 0x00000b00UL, 0x0000db00UL, -0x0000e000UL, 0x00003200UL, 0x00003a00UL, 0x00000a00UL, 0x00004900UL, 0x00000600UL, 0x00002400UL, 0x00005c00UL, -0x0000c200UL, 0x0000d300UL, 0x0000ac00UL, 0x00006200UL, 0x00009100UL, 0x00009500UL, 0x0000e400UL, 0x00007900UL, -0x0000e700UL, 0x0000c800UL, 0x00003700UL, 0x00006d00UL, 0x00008d00UL, 0x0000d500UL, 0x00004e00UL, 0x0000a900UL, -0x00006c00UL, 0x00005600UL, 0x0000f400UL, 0x0000ea00UL, 0x00006500UL, 0x00007a00UL, 0x0000ae00UL, 0x00000800UL, -0x0000ba00UL, 0x00007800UL, 0x00002500UL, 0x00002e00UL, 0x00001c00UL, 0x0000a600UL, 0x0000b400UL, 0x0000c600UL, -0x0000e800UL, 0x0000dd00UL, 0x00007400UL, 0x00001f00UL, 0x00004b00UL, 0x0000bd00UL, 0x00008b00UL, 0x00008a00UL, -0x00007000UL, 0x00003e00UL, 0x0000b500UL, 0x00006600UL, 0x00004800UL, 0x00000300UL, 0x0000f600UL, 0x00000e00UL, -0x00006100UL, 0x00003500UL, 0x00005700UL, 0x0000b900UL, 0x00008600UL, 0x0000c100UL, 0x00001d00UL, 0x00009e00UL, -0x0000e100UL, 0x0000f800UL, 0x00009800UL, 0x00001100UL, 0x00006900UL, 0x0000d900UL, 0x00008e00UL, 0x00009400UL, -0x00009b00UL, 0x00001e00UL, 0x00008700UL, 0x0000e900UL, 0x0000ce00UL, 0x00005500UL, 0x00002800UL, 0x0000df00UL, -0x00008c00UL, 0x0000a100UL, 0x00008900UL, 0x00000d00UL, 0x0000bf00UL, 0x0000e600UL, 0x00004200UL, 0x00006800UL, +0x00006300UL, 0x00007c00UL, 0x00007700UL, 0x00007b00UL, 0x0000f200UL, 0x00006b00UL, 0x00006f00UL, 0x0000c500UL, +0x00003000UL, 0x00000100UL, 0x00006700UL, 0x00002b00UL, 0x0000fe00UL, 0x0000d700UL, 0x0000ab00UL, 0x00007600UL, +0x0000ca00UL, 0x00008200UL, 0x0000c900UL, 0x00007d00UL, 0x0000fa00UL, 0x00005900UL, 0x00004700UL, 0x0000f000UL, +0x0000ad00UL, 0x0000d400UL, 0x0000a200UL, 0x0000af00UL, 0x00009c00UL, 0x0000a400UL, 0x00007200UL, 0x0000c000UL, +0x0000b700UL, 0x0000fd00UL, 0x00009300UL, 0x00002600UL, 0x00003600UL, 0x00003f00UL, 0x0000f700UL, 0x0000cc00UL, +0x00003400UL, 0x0000a500UL, 0x0000e500UL, 0x0000f100UL, 0x00007100UL, 0x0000d800UL, 0x00003100UL, 0x00001500UL, +0x00000400UL, 0x0000c700UL, 0x00002300UL, 0x0000c300UL, 0x00001800UL, 0x00009600UL, 0x00000500UL, 0x00009a00UL, +0x00000700UL, 0x00001200UL, 0x00008000UL, 0x0000e200UL, 0x0000eb00UL, 0x00002700UL, 0x0000b200UL, 0x00007500UL, +0x00000900UL, 0x00008300UL, 0x00002c00UL, 0x00001a00UL, 0x00001b00UL, 0x00006e00UL, 0x00005a00UL, 0x0000a000UL, +0x00005200UL, 0x00003b00UL, 0x0000d600UL, 0x0000b300UL, 0x00002900UL, 0x0000e300UL, 0x00002f00UL, 0x00008400UL, +0x00005300UL, 0x0000d100UL, 0x00000000UL, 0x0000ed00UL, 0x00002000UL, 0x0000fc00UL, 0x0000b100UL, 0x00005b00UL, +0x00006a00UL, 0x0000cb00UL, 0x0000be00UL, 0x00003900UL, 0x00004a00UL, 0x00004c00UL, 0x00005800UL, 0x0000cf00UL, +0x0000d000UL, 0x0000ef00UL, 0x0000aa00UL, 0x0000fb00UL, 0x00004300UL, 0x00004d00UL, 0x00003300UL, 0x00008500UL, +0x00004500UL, 0x0000f900UL, 0x00000200UL, 0x00007f00UL, 0x00005000UL, 0x00003c00UL, 0x00009f00UL, 0x0000a800UL, +0x00005100UL, 0x0000a300UL, 0x00004000UL, 0x00008f00UL, 0x00009200UL, 0x00009d00UL, 0x00003800UL, 0x0000f500UL, +0x0000bc00UL, 0x0000b600UL, 0x0000da00UL, 0x00002100UL, 0x00001000UL, 0x0000ff00UL, 0x0000f300UL, 0x0000d200UL, +0x0000cd00UL, 0x00000c00UL, 0x00001300UL, 0x0000ec00UL, 0x00005f00UL, 0x00009700UL, 0x00004400UL, 0x00001700UL, +0x0000c400UL, 0x0000a700UL, 0x00007e00UL, 0x00003d00UL, 0x00006400UL, 0x00005d00UL, 0x00001900UL, 0x00007300UL, +0x00006000UL, 0x00008100UL, 0x00004f00UL, 0x0000dc00UL, 0x00002200UL, 0x00002a00UL, 0x00009000UL, 0x00008800UL, +0x00004600UL, 0x0000ee00UL, 0x0000b800UL, 0x00001400UL, 0x0000de00UL, 0x00005e00UL, 0x00000b00UL, 0x0000db00UL, +0x0000e000UL, 0x00003200UL, 0x00003a00UL, 0x00000a00UL, 0x00004900UL, 0x00000600UL, 0x00002400UL, 0x00005c00UL, +0x0000c200UL, 0x0000d300UL, 0x0000ac00UL, 0x00006200UL, 0x00009100UL, 0x00009500UL, 0x0000e400UL, 0x00007900UL, +0x0000e700UL, 0x0000c800UL, 0x00003700UL, 0x00006d00UL, 0x00008d00UL, 0x0000d500UL, 0x00004e00UL, 0x0000a900UL, +0x00006c00UL, 0x00005600UL, 0x0000f400UL, 0x0000ea00UL, 0x00006500UL, 0x00007a00UL, 0x0000ae00UL, 0x00000800UL, +0x0000ba00UL, 0x00007800UL, 0x00002500UL, 0x00002e00UL, 0x00001c00UL, 0x0000a600UL, 0x0000b400UL, 0x0000c600UL, +0x0000e800UL, 0x0000dd00UL, 0x00007400UL, 0x00001f00UL, 0x00004b00UL, 0x0000bd00UL, 0x00008b00UL, 0x00008a00UL, +0x00007000UL, 0x00003e00UL, 0x0000b500UL, 0x00006600UL, 0x00004800UL, 0x00000300UL, 0x0000f600UL, 0x00000e00UL, +0x00006100UL, 0x00003500UL, 0x00005700UL, 0x0000b900UL, 0x00008600UL, 0x0000c100UL, 0x00001d00UL, 0x00009e00UL, +0x0000e100UL, 0x0000f800UL, 0x00009800UL, 0x00001100UL, 0x00006900UL, 0x0000d900UL, 0x00008e00UL, 0x00009400UL, +0x00009b00UL, 0x00001e00UL, 0x00008700UL, 0x0000e900UL, 0x0000ce00UL, 0x00005500UL, 0x00002800UL, 0x0000df00UL, +0x00008c00UL, 0x0000a100UL, 0x00008900UL, 0x00000d00UL, 0x0000bf00UL, 0x0000e600UL, 0x00004200UL, 0x00006800UL, 0x00004100UL, 0x00009900UL, 0x00002d00UL, 0x00000f00UL, 0x0000b000UL, 0x00005400UL, 0x0000bb00UL, 0x00001600UL }; static const ulong32 Te4_2[] = { -0x00630000UL, 0x007c0000UL, 0x00770000UL, 0x007b0000UL, 0x00f20000UL, 0x006b0000UL, 0x006f0000UL, 0x00c50000UL, -0x00300000UL, 0x00010000UL, 0x00670000UL, 0x002b0000UL, 0x00fe0000UL, 0x00d70000UL, 0x00ab0000UL, 0x00760000UL, -0x00ca0000UL, 0x00820000UL, 0x00c90000UL, 0x007d0000UL, 0x00fa0000UL, 0x00590000UL, 0x00470000UL, 0x00f00000UL, -0x00ad0000UL, 0x00d40000UL, 0x00a20000UL, 0x00af0000UL, 0x009c0000UL, 0x00a40000UL, 0x00720000UL, 0x00c00000UL, -0x00b70000UL, 0x00fd0000UL, 0x00930000UL, 0x00260000UL, 0x00360000UL, 0x003f0000UL, 0x00f70000UL, 0x00cc0000UL, -0x00340000UL, 0x00a50000UL, 0x00e50000UL, 0x00f10000UL, 0x00710000UL, 0x00d80000UL, 0x00310000UL, 0x00150000UL, -0x00040000UL, 0x00c70000UL, 0x00230000UL, 0x00c30000UL, 0x00180000UL, 0x00960000UL, 0x00050000UL, 0x009a0000UL, -0x00070000UL, 0x00120000UL, 0x00800000UL, 0x00e20000UL, 0x00eb0000UL, 0x00270000UL, 0x00b20000UL, 0x00750000UL, -0x00090000UL, 0x00830000UL, 0x002c0000UL, 0x001a0000UL, 0x001b0000UL, 0x006e0000UL, 0x005a0000UL, 0x00a00000UL, -0x00520000UL, 0x003b0000UL, 0x00d60000UL, 0x00b30000UL, 0x00290000UL, 0x00e30000UL, 0x002f0000UL, 0x00840000UL, -0x00530000UL, 0x00d10000UL, 0x00000000UL, 0x00ed0000UL, 0x00200000UL, 0x00fc0000UL, 0x00b10000UL, 0x005b0000UL, -0x006a0000UL, 0x00cb0000UL, 0x00be0000UL, 0x00390000UL, 0x004a0000UL, 0x004c0000UL, 0x00580000UL, 0x00cf0000UL, -0x00d00000UL, 0x00ef0000UL, 0x00aa0000UL, 0x00fb0000UL, 0x00430000UL, 0x004d0000UL, 0x00330000UL, 0x00850000UL, -0x00450000UL, 0x00f90000UL, 0x00020000UL, 0x007f0000UL, 0x00500000UL, 0x003c0000UL, 0x009f0000UL, 0x00a80000UL, -0x00510000UL, 0x00a30000UL, 0x00400000UL, 0x008f0000UL, 0x00920000UL, 0x009d0000UL, 0x00380000UL, 0x00f50000UL, -0x00bc0000UL, 0x00b60000UL, 0x00da0000UL, 0x00210000UL, 0x00100000UL, 0x00ff0000UL, 0x00f30000UL, 0x00d20000UL, -0x00cd0000UL, 0x000c0000UL, 0x00130000UL, 0x00ec0000UL, 0x005f0000UL, 0x00970000UL, 0x00440000UL, 0x00170000UL, -0x00c40000UL, 0x00a70000UL, 0x007e0000UL, 0x003d0000UL, 0x00640000UL, 0x005d0000UL, 0x00190000UL, 0x00730000UL, -0x00600000UL, 0x00810000UL, 0x004f0000UL, 0x00dc0000UL, 0x00220000UL, 0x002a0000UL, 0x00900000UL, 0x00880000UL, -0x00460000UL, 0x00ee0000UL, 0x00b80000UL, 0x00140000UL, 0x00de0000UL, 0x005e0000UL, 0x000b0000UL, 0x00db0000UL, -0x00e00000UL, 0x00320000UL, 0x003a0000UL, 0x000a0000UL, 0x00490000UL, 0x00060000UL, 0x00240000UL, 0x005c0000UL, -0x00c20000UL, 0x00d30000UL, 0x00ac0000UL, 0x00620000UL, 0x00910000UL, 0x00950000UL, 0x00e40000UL, 0x00790000UL, -0x00e70000UL, 0x00c80000UL, 0x00370000UL, 0x006d0000UL, 0x008d0000UL, 0x00d50000UL, 0x004e0000UL, 0x00a90000UL, -0x006c0000UL, 0x00560000UL, 0x00f40000UL, 0x00ea0000UL, 0x00650000UL, 0x007a0000UL, 0x00ae0000UL, 0x00080000UL, -0x00ba0000UL, 0x00780000UL, 0x00250000UL, 0x002e0000UL, 0x001c0000UL, 0x00a60000UL, 0x00b40000UL, 0x00c60000UL, -0x00e80000UL, 0x00dd0000UL, 0x00740000UL, 0x001f0000UL, 0x004b0000UL, 0x00bd0000UL, 0x008b0000UL, 0x008a0000UL, -0x00700000UL, 0x003e0000UL, 0x00b50000UL, 0x00660000UL, 0x00480000UL, 0x00030000UL, 0x00f60000UL, 0x000e0000UL, -0x00610000UL, 0x00350000UL, 0x00570000UL, 0x00b90000UL, 0x00860000UL, 0x00c10000UL, 0x001d0000UL, 0x009e0000UL, -0x00e10000UL, 0x00f80000UL, 0x00980000UL, 0x00110000UL, 0x00690000UL, 0x00d90000UL, 0x008e0000UL, 0x00940000UL, -0x009b0000UL, 0x001e0000UL, 0x00870000UL, 0x00e90000UL, 0x00ce0000UL, 0x00550000UL, 0x00280000UL, 0x00df0000UL, -0x008c0000UL, 0x00a10000UL, 0x00890000UL, 0x000d0000UL, 0x00bf0000UL, 0x00e60000UL, 0x00420000UL, 0x00680000UL, +0x00630000UL, 0x007c0000UL, 0x00770000UL, 0x007b0000UL, 0x00f20000UL, 0x006b0000UL, 0x006f0000UL, 0x00c50000UL, +0x00300000UL, 0x00010000UL, 0x00670000UL, 0x002b0000UL, 0x00fe0000UL, 0x00d70000UL, 0x00ab0000UL, 0x00760000UL, +0x00ca0000UL, 0x00820000UL, 0x00c90000UL, 0x007d0000UL, 0x00fa0000UL, 0x00590000UL, 0x00470000UL, 0x00f00000UL, +0x00ad0000UL, 0x00d40000UL, 0x00a20000UL, 0x00af0000UL, 0x009c0000UL, 0x00a40000UL, 0x00720000UL, 0x00c00000UL, +0x00b70000UL, 0x00fd0000UL, 0x00930000UL, 0x00260000UL, 0x00360000UL, 0x003f0000UL, 0x00f70000UL, 0x00cc0000UL, +0x00340000UL, 0x00a50000UL, 0x00e50000UL, 0x00f10000UL, 0x00710000UL, 0x00d80000UL, 0x00310000UL, 0x00150000UL, +0x00040000UL, 0x00c70000UL, 0x00230000UL, 0x00c30000UL, 0x00180000UL, 0x00960000UL, 0x00050000UL, 0x009a0000UL, +0x00070000UL, 0x00120000UL, 0x00800000UL, 0x00e20000UL, 0x00eb0000UL, 0x00270000UL, 0x00b20000UL, 0x00750000UL, +0x00090000UL, 0x00830000UL, 0x002c0000UL, 0x001a0000UL, 0x001b0000UL, 0x006e0000UL, 0x005a0000UL, 0x00a00000UL, +0x00520000UL, 0x003b0000UL, 0x00d60000UL, 0x00b30000UL, 0x00290000UL, 0x00e30000UL, 0x002f0000UL, 0x00840000UL, +0x00530000UL, 0x00d10000UL, 0x00000000UL, 0x00ed0000UL, 0x00200000UL, 0x00fc0000UL, 0x00b10000UL, 0x005b0000UL, +0x006a0000UL, 0x00cb0000UL, 0x00be0000UL, 0x00390000UL, 0x004a0000UL, 0x004c0000UL, 0x00580000UL, 0x00cf0000UL, +0x00d00000UL, 0x00ef0000UL, 0x00aa0000UL, 0x00fb0000UL, 0x00430000UL, 0x004d0000UL, 0x00330000UL, 0x00850000UL, +0x00450000UL, 0x00f90000UL, 0x00020000UL, 0x007f0000UL, 0x00500000UL, 0x003c0000UL, 0x009f0000UL, 0x00a80000UL, +0x00510000UL, 0x00a30000UL, 0x00400000UL, 0x008f0000UL, 0x00920000UL, 0x009d0000UL, 0x00380000UL, 0x00f50000UL, +0x00bc0000UL, 0x00b60000UL, 0x00da0000UL, 0x00210000UL, 0x00100000UL, 0x00ff0000UL, 0x00f30000UL, 0x00d20000UL, +0x00cd0000UL, 0x000c0000UL, 0x00130000UL, 0x00ec0000UL, 0x005f0000UL, 0x00970000UL, 0x00440000UL, 0x00170000UL, +0x00c40000UL, 0x00a70000UL, 0x007e0000UL, 0x003d0000UL, 0x00640000UL, 0x005d0000UL, 0x00190000UL, 0x00730000UL, +0x00600000UL, 0x00810000UL, 0x004f0000UL, 0x00dc0000UL, 0x00220000UL, 0x002a0000UL, 0x00900000UL, 0x00880000UL, +0x00460000UL, 0x00ee0000UL, 0x00b80000UL, 0x00140000UL, 0x00de0000UL, 0x005e0000UL, 0x000b0000UL, 0x00db0000UL, +0x00e00000UL, 0x00320000UL, 0x003a0000UL, 0x000a0000UL, 0x00490000UL, 0x00060000UL, 0x00240000UL, 0x005c0000UL, +0x00c20000UL, 0x00d30000UL, 0x00ac0000UL, 0x00620000UL, 0x00910000UL, 0x00950000UL, 0x00e40000UL, 0x00790000UL, +0x00e70000UL, 0x00c80000UL, 0x00370000UL, 0x006d0000UL, 0x008d0000UL, 0x00d50000UL, 0x004e0000UL, 0x00a90000UL, +0x006c0000UL, 0x00560000UL, 0x00f40000UL, 0x00ea0000UL, 0x00650000UL, 0x007a0000UL, 0x00ae0000UL, 0x00080000UL, +0x00ba0000UL, 0x00780000UL, 0x00250000UL, 0x002e0000UL, 0x001c0000UL, 0x00a60000UL, 0x00b40000UL, 0x00c60000UL, +0x00e80000UL, 0x00dd0000UL, 0x00740000UL, 0x001f0000UL, 0x004b0000UL, 0x00bd0000UL, 0x008b0000UL, 0x008a0000UL, +0x00700000UL, 0x003e0000UL, 0x00b50000UL, 0x00660000UL, 0x00480000UL, 0x00030000UL, 0x00f60000UL, 0x000e0000UL, +0x00610000UL, 0x00350000UL, 0x00570000UL, 0x00b90000UL, 0x00860000UL, 0x00c10000UL, 0x001d0000UL, 0x009e0000UL, +0x00e10000UL, 0x00f80000UL, 0x00980000UL, 0x00110000UL, 0x00690000UL, 0x00d90000UL, 0x008e0000UL, 0x00940000UL, +0x009b0000UL, 0x001e0000UL, 0x00870000UL, 0x00e90000UL, 0x00ce0000UL, 0x00550000UL, 0x00280000UL, 0x00df0000UL, +0x008c0000UL, 0x00a10000UL, 0x00890000UL, 0x000d0000UL, 0x00bf0000UL, 0x00e60000UL, 0x00420000UL, 0x00680000UL, 0x00410000UL, 0x00990000UL, 0x002d0000UL, 0x000f0000UL, 0x00b00000UL, 0x00540000UL, 0x00bb0000UL, 0x00160000UL }; static const ulong32 Te4_3[] = { -0x63000000UL, 0x7c000000UL, 0x77000000UL, 0x7b000000UL, 0xf2000000UL, 0x6b000000UL, 0x6f000000UL, 0xc5000000UL, -0x30000000UL, 0x01000000UL, 0x67000000UL, 0x2b000000UL, 0xfe000000UL, 0xd7000000UL, 0xab000000UL, 0x76000000UL, -0xca000000UL, 0x82000000UL, 0xc9000000UL, 0x7d000000UL, 0xfa000000UL, 0x59000000UL, 0x47000000UL, 0xf0000000UL, -0xad000000UL, 0xd4000000UL, 0xa2000000UL, 0xaf000000UL, 0x9c000000UL, 0xa4000000UL, 0x72000000UL, 0xc0000000UL, -0xb7000000UL, 0xfd000000UL, 0x93000000UL, 0x26000000UL, 0x36000000UL, 0x3f000000UL, 0xf7000000UL, 0xcc000000UL, -0x34000000UL, 0xa5000000UL, 0xe5000000UL, 0xf1000000UL, 0x71000000UL, 0xd8000000UL, 0x31000000UL, 0x15000000UL, -0x04000000UL, 0xc7000000UL, 0x23000000UL, 0xc3000000UL, 0x18000000UL, 0x96000000UL, 0x05000000UL, 0x9a000000UL, -0x07000000UL, 0x12000000UL, 0x80000000UL, 0xe2000000UL, 0xeb000000UL, 0x27000000UL, 0xb2000000UL, 0x75000000UL, -0x09000000UL, 0x83000000UL, 0x2c000000UL, 0x1a000000UL, 0x1b000000UL, 0x6e000000UL, 0x5a000000UL, 0xa0000000UL, -0x52000000UL, 0x3b000000UL, 0xd6000000UL, 0xb3000000UL, 0x29000000UL, 0xe3000000UL, 0x2f000000UL, 0x84000000UL, -0x53000000UL, 0xd1000000UL, 0x00000000UL, 0xed000000UL, 0x20000000UL, 0xfc000000UL, 0xb1000000UL, 0x5b000000UL, -0x6a000000UL, 0xcb000000UL, 0xbe000000UL, 0x39000000UL, 0x4a000000UL, 0x4c000000UL, 0x58000000UL, 0xcf000000UL, -0xd0000000UL, 0xef000000UL, 0xaa000000UL, 0xfb000000UL, 0x43000000UL, 0x4d000000UL, 0x33000000UL, 0x85000000UL, -0x45000000UL, 0xf9000000UL, 0x02000000UL, 0x7f000000UL, 0x50000000UL, 0x3c000000UL, 0x9f000000UL, 0xa8000000UL, -0x51000000UL, 0xa3000000UL, 0x40000000UL, 0x8f000000UL, 0x92000000UL, 0x9d000000UL, 0x38000000UL, 0xf5000000UL, -0xbc000000UL, 0xb6000000UL, 0xda000000UL, 0x21000000UL, 0x10000000UL, 0xff000000UL, 0xf3000000UL, 0xd2000000UL, -0xcd000000UL, 0x0c000000UL, 0x13000000UL, 0xec000000UL, 0x5f000000UL, 0x97000000UL, 0x44000000UL, 0x17000000UL, -0xc4000000UL, 0xa7000000UL, 0x7e000000UL, 0x3d000000UL, 0x64000000UL, 0x5d000000UL, 0x19000000UL, 0x73000000UL, -0x60000000UL, 0x81000000UL, 0x4f000000UL, 0xdc000000UL, 0x22000000UL, 0x2a000000UL, 0x90000000UL, 0x88000000UL, -0x46000000UL, 0xee000000UL, 0xb8000000UL, 0x14000000UL, 0xde000000UL, 0x5e000000UL, 0x0b000000UL, 0xdb000000UL, -0xe0000000UL, 0x32000000UL, 0x3a000000UL, 0x0a000000UL, 0x49000000UL, 0x06000000UL, 0x24000000UL, 0x5c000000UL, -0xc2000000UL, 0xd3000000UL, 0xac000000UL, 0x62000000UL, 0x91000000UL, 0x95000000UL, 0xe4000000UL, 0x79000000UL, -0xe7000000UL, 0xc8000000UL, 0x37000000UL, 0x6d000000UL, 0x8d000000UL, 0xd5000000UL, 0x4e000000UL, 0xa9000000UL, -0x6c000000UL, 0x56000000UL, 0xf4000000UL, 0xea000000UL, 0x65000000UL, 0x7a000000UL, 0xae000000UL, 0x08000000UL, -0xba000000UL, 0x78000000UL, 0x25000000UL, 0x2e000000UL, 0x1c000000UL, 0xa6000000UL, 0xb4000000UL, 0xc6000000UL, -0xe8000000UL, 0xdd000000UL, 0x74000000UL, 0x1f000000UL, 0x4b000000UL, 0xbd000000UL, 0x8b000000UL, 0x8a000000UL, -0x70000000UL, 0x3e000000UL, 0xb5000000UL, 0x66000000UL, 0x48000000UL, 0x03000000UL, 0xf6000000UL, 0x0e000000UL, -0x61000000UL, 0x35000000UL, 0x57000000UL, 0xb9000000UL, 0x86000000UL, 0xc1000000UL, 0x1d000000UL, 0x9e000000UL, -0xe1000000UL, 0xf8000000UL, 0x98000000UL, 0x11000000UL, 0x69000000UL, 0xd9000000UL, 0x8e000000UL, 0x94000000UL, -0x9b000000UL, 0x1e000000UL, 0x87000000UL, 0xe9000000UL, 0xce000000UL, 0x55000000UL, 0x28000000UL, 0xdf000000UL, -0x8c000000UL, 0xa1000000UL, 0x89000000UL, 0x0d000000UL, 0xbf000000UL, 0xe6000000UL, 0x42000000UL, 0x68000000UL, +0x63000000UL, 0x7c000000UL, 0x77000000UL, 0x7b000000UL, 0xf2000000UL, 0x6b000000UL, 0x6f000000UL, 0xc5000000UL, +0x30000000UL, 0x01000000UL, 0x67000000UL, 0x2b000000UL, 0xfe000000UL, 0xd7000000UL, 0xab000000UL, 0x76000000UL, +0xca000000UL, 0x82000000UL, 0xc9000000UL, 0x7d000000UL, 0xfa000000UL, 0x59000000UL, 0x47000000UL, 0xf0000000UL, +0xad000000UL, 0xd4000000UL, 0xa2000000UL, 0xaf000000UL, 0x9c000000UL, 0xa4000000UL, 0x72000000UL, 0xc0000000UL, +0xb7000000UL, 0xfd000000UL, 0x93000000UL, 0x26000000UL, 0x36000000UL, 0x3f000000UL, 0xf7000000UL, 0xcc000000UL, +0x34000000UL, 0xa5000000UL, 0xe5000000UL, 0xf1000000UL, 0x71000000UL, 0xd8000000UL, 0x31000000UL, 0x15000000UL, +0x04000000UL, 0xc7000000UL, 0x23000000UL, 0xc3000000UL, 0x18000000UL, 0x96000000UL, 0x05000000UL, 0x9a000000UL, +0x07000000UL, 0x12000000UL, 0x80000000UL, 0xe2000000UL, 0xeb000000UL, 0x27000000UL, 0xb2000000UL, 0x75000000UL, +0x09000000UL, 0x83000000UL, 0x2c000000UL, 0x1a000000UL, 0x1b000000UL, 0x6e000000UL, 0x5a000000UL, 0xa0000000UL, +0x52000000UL, 0x3b000000UL, 0xd6000000UL, 0xb3000000UL, 0x29000000UL, 0xe3000000UL, 0x2f000000UL, 0x84000000UL, +0x53000000UL, 0xd1000000UL, 0x00000000UL, 0xed000000UL, 0x20000000UL, 0xfc000000UL, 0xb1000000UL, 0x5b000000UL, +0x6a000000UL, 0xcb000000UL, 0xbe000000UL, 0x39000000UL, 0x4a000000UL, 0x4c000000UL, 0x58000000UL, 0xcf000000UL, +0xd0000000UL, 0xef000000UL, 0xaa000000UL, 0xfb000000UL, 0x43000000UL, 0x4d000000UL, 0x33000000UL, 0x85000000UL, +0x45000000UL, 0xf9000000UL, 0x02000000UL, 0x7f000000UL, 0x50000000UL, 0x3c000000UL, 0x9f000000UL, 0xa8000000UL, +0x51000000UL, 0xa3000000UL, 0x40000000UL, 0x8f000000UL, 0x92000000UL, 0x9d000000UL, 0x38000000UL, 0xf5000000UL, +0xbc000000UL, 0xb6000000UL, 0xda000000UL, 0x21000000UL, 0x10000000UL, 0xff000000UL, 0xf3000000UL, 0xd2000000UL, +0xcd000000UL, 0x0c000000UL, 0x13000000UL, 0xec000000UL, 0x5f000000UL, 0x97000000UL, 0x44000000UL, 0x17000000UL, +0xc4000000UL, 0xa7000000UL, 0x7e000000UL, 0x3d000000UL, 0x64000000UL, 0x5d000000UL, 0x19000000UL, 0x73000000UL, +0x60000000UL, 0x81000000UL, 0x4f000000UL, 0xdc000000UL, 0x22000000UL, 0x2a000000UL, 0x90000000UL, 0x88000000UL, +0x46000000UL, 0xee000000UL, 0xb8000000UL, 0x14000000UL, 0xde000000UL, 0x5e000000UL, 0x0b000000UL, 0xdb000000UL, +0xe0000000UL, 0x32000000UL, 0x3a000000UL, 0x0a000000UL, 0x49000000UL, 0x06000000UL, 0x24000000UL, 0x5c000000UL, +0xc2000000UL, 0xd3000000UL, 0xac000000UL, 0x62000000UL, 0x91000000UL, 0x95000000UL, 0xe4000000UL, 0x79000000UL, +0xe7000000UL, 0xc8000000UL, 0x37000000UL, 0x6d000000UL, 0x8d000000UL, 0xd5000000UL, 0x4e000000UL, 0xa9000000UL, +0x6c000000UL, 0x56000000UL, 0xf4000000UL, 0xea000000UL, 0x65000000UL, 0x7a000000UL, 0xae000000UL, 0x08000000UL, +0xba000000UL, 0x78000000UL, 0x25000000UL, 0x2e000000UL, 0x1c000000UL, 0xa6000000UL, 0xb4000000UL, 0xc6000000UL, +0xe8000000UL, 0xdd000000UL, 0x74000000UL, 0x1f000000UL, 0x4b000000UL, 0xbd000000UL, 0x8b000000UL, 0x8a000000UL, +0x70000000UL, 0x3e000000UL, 0xb5000000UL, 0x66000000UL, 0x48000000UL, 0x03000000UL, 0xf6000000UL, 0x0e000000UL, +0x61000000UL, 0x35000000UL, 0x57000000UL, 0xb9000000UL, 0x86000000UL, 0xc1000000UL, 0x1d000000UL, 0x9e000000UL, +0xe1000000UL, 0xf8000000UL, 0x98000000UL, 0x11000000UL, 0x69000000UL, 0xd9000000UL, 0x8e000000UL, 0x94000000UL, +0x9b000000UL, 0x1e000000UL, 0x87000000UL, 0xe9000000UL, 0xce000000UL, 0x55000000UL, 0x28000000UL, 0xdf000000UL, +0x8c000000UL, 0xa1000000UL, 0x89000000UL, 0x0d000000UL, 0xbf000000UL, 0xe6000000UL, 0x42000000UL, 0x68000000UL, 0x41000000UL, 0x99000000UL, 0x2d000000UL, 0x0f000000UL, 0xb0000000UL, 0x54000000UL, 0xbb000000UL, 0x16000000UL }; -#endif /* pelimac */ #ifndef ENCRYPT_ONLY @@ -868,142 +866,142 @@ static const ulong32 TD3[256] = { }; static const ulong32 Tks0[] = { -0x00000000UL, 0x0e090d0bUL, 0x1c121a16UL, 0x121b171dUL, 0x3824342cUL, 0x362d3927UL, 0x24362e3aUL, 0x2a3f2331UL, -0x70486858UL, 0x7e416553UL, 0x6c5a724eUL, 0x62537f45UL, 0x486c5c74UL, 0x4665517fUL, 0x547e4662UL, 0x5a774b69UL, -0xe090d0b0UL, 0xee99ddbbUL, 0xfc82caa6UL, 0xf28bc7adUL, 0xd8b4e49cUL, 0xd6bde997UL, 0xc4a6fe8aUL, 0xcaaff381UL, -0x90d8b8e8UL, 0x9ed1b5e3UL, 0x8ccaa2feUL, 0x82c3aff5UL, 0xa8fc8cc4UL, 0xa6f581cfUL, 0xb4ee96d2UL, 0xbae79bd9UL, -0xdb3bbb7bUL, 0xd532b670UL, 0xc729a16dUL, 0xc920ac66UL, 0xe31f8f57UL, 0xed16825cUL, 0xff0d9541UL, 0xf104984aUL, -0xab73d323UL, 0xa57ade28UL, 0xb761c935UL, 0xb968c43eUL, 0x9357e70fUL, 0x9d5eea04UL, 0x8f45fd19UL, 0x814cf012UL, -0x3bab6bcbUL, 0x35a266c0UL, 0x27b971ddUL, 0x29b07cd6UL, 0x038f5fe7UL, 0x0d8652ecUL, 0x1f9d45f1UL, 0x119448faUL, -0x4be30393UL, 0x45ea0e98UL, 0x57f11985UL, 0x59f8148eUL, 0x73c737bfUL, 0x7dce3ab4UL, 0x6fd52da9UL, 0x61dc20a2UL, -0xad766df6UL, 0xa37f60fdUL, 0xb16477e0UL, 0xbf6d7aebUL, 0x955259daUL, 0x9b5b54d1UL, 0x894043ccUL, 0x87494ec7UL, -0xdd3e05aeUL, 0xd33708a5UL, 0xc12c1fb8UL, 0xcf2512b3UL, 0xe51a3182UL, 0xeb133c89UL, 0xf9082b94UL, 0xf701269fUL, -0x4de6bd46UL, 0x43efb04dUL, 0x51f4a750UL, 0x5ffdaa5bUL, 0x75c2896aUL, 0x7bcb8461UL, 0x69d0937cUL, 0x67d99e77UL, -0x3daed51eUL, 0x33a7d815UL, 0x21bccf08UL, 0x2fb5c203UL, 0x058ae132UL, 0x0b83ec39UL, 0x1998fb24UL, 0x1791f62fUL, -0x764dd68dUL, 0x7844db86UL, 0x6a5fcc9bUL, 0x6456c190UL, 0x4e69e2a1UL, 0x4060efaaUL, 0x527bf8b7UL, 0x5c72f5bcUL, -0x0605bed5UL, 0x080cb3deUL, 0x1a17a4c3UL, 0x141ea9c8UL, 0x3e218af9UL, 0x302887f2UL, 0x223390efUL, 0x2c3a9de4UL, -0x96dd063dUL, 0x98d40b36UL, 0x8acf1c2bUL, 0x84c61120UL, 0xaef93211UL, 0xa0f03f1aUL, 0xb2eb2807UL, 0xbce2250cUL, -0xe6956e65UL, 0xe89c636eUL, 0xfa877473UL, 0xf48e7978UL, 0xdeb15a49UL, 0xd0b85742UL, 0xc2a3405fUL, 0xccaa4d54UL, -0x41ecdaf7UL, 0x4fe5d7fcUL, 0x5dfec0e1UL, 0x53f7cdeaUL, 0x79c8eedbUL, 0x77c1e3d0UL, 0x65daf4cdUL, 0x6bd3f9c6UL, -0x31a4b2afUL, 0x3fadbfa4UL, 0x2db6a8b9UL, 0x23bfa5b2UL, 0x09808683UL, 0x07898b88UL, 0x15929c95UL, 0x1b9b919eUL, -0xa17c0a47UL, 0xaf75074cUL, 0xbd6e1051UL, 0xb3671d5aUL, 0x99583e6bUL, 0x97513360UL, 0x854a247dUL, 0x8b432976UL, -0xd134621fUL, 0xdf3d6f14UL, 0xcd267809UL, 0xc32f7502UL, 0xe9105633UL, 0xe7195b38UL, 0xf5024c25UL, 0xfb0b412eUL, -0x9ad7618cUL, 0x94de6c87UL, 0x86c57b9aUL, 0x88cc7691UL, 0xa2f355a0UL, 0xacfa58abUL, 0xbee14fb6UL, 0xb0e842bdUL, -0xea9f09d4UL, 0xe49604dfUL, 0xf68d13c2UL, 0xf8841ec9UL, 0xd2bb3df8UL, 0xdcb230f3UL, 0xcea927eeUL, 0xc0a02ae5UL, -0x7a47b13cUL, 0x744ebc37UL, 0x6655ab2aUL, 0x685ca621UL, 0x42638510UL, 0x4c6a881bUL, 0x5e719f06UL, 0x5078920dUL, -0x0a0fd964UL, 0x0406d46fUL, 0x161dc372UL, 0x1814ce79UL, 0x322bed48UL, 0x3c22e043UL, 0x2e39f75eUL, 0x2030fa55UL, -0xec9ab701UL, 0xe293ba0aUL, 0xf088ad17UL, 0xfe81a01cUL, 0xd4be832dUL, 0xdab78e26UL, 0xc8ac993bUL, 0xc6a59430UL, -0x9cd2df59UL, 0x92dbd252UL, 0x80c0c54fUL, 0x8ec9c844UL, 0xa4f6eb75UL, 0xaaffe67eUL, 0xb8e4f163UL, 0xb6edfc68UL, -0x0c0a67b1UL, 0x02036abaUL, 0x10187da7UL, 0x1e1170acUL, 0x342e539dUL, 0x3a275e96UL, 0x283c498bUL, 0x26354480UL, -0x7c420fe9UL, 0x724b02e2UL, 0x605015ffUL, 0x6e5918f4UL, 0x44663bc5UL, 0x4a6f36ceUL, 0x587421d3UL, 0x567d2cd8UL, -0x37a10c7aUL, 0x39a80171UL, 0x2bb3166cUL, 0x25ba1b67UL, 0x0f853856UL, 0x018c355dUL, 0x13972240UL, 0x1d9e2f4bUL, -0x47e96422UL, 0x49e06929UL, 0x5bfb7e34UL, 0x55f2733fUL, 0x7fcd500eUL, 0x71c45d05UL, 0x63df4a18UL, 0x6dd64713UL, -0xd731dccaUL, 0xd938d1c1UL, 0xcb23c6dcUL, 0xc52acbd7UL, 0xef15e8e6UL, 0xe11ce5edUL, 0xf307f2f0UL, 0xfd0efffbUL, +0x00000000UL, 0x0e090d0bUL, 0x1c121a16UL, 0x121b171dUL, 0x3824342cUL, 0x362d3927UL, 0x24362e3aUL, 0x2a3f2331UL, +0x70486858UL, 0x7e416553UL, 0x6c5a724eUL, 0x62537f45UL, 0x486c5c74UL, 0x4665517fUL, 0x547e4662UL, 0x5a774b69UL, +0xe090d0b0UL, 0xee99ddbbUL, 0xfc82caa6UL, 0xf28bc7adUL, 0xd8b4e49cUL, 0xd6bde997UL, 0xc4a6fe8aUL, 0xcaaff381UL, +0x90d8b8e8UL, 0x9ed1b5e3UL, 0x8ccaa2feUL, 0x82c3aff5UL, 0xa8fc8cc4UL, 0xa6f581cfUL, 0xb4ee96d2UL, 0xbae79bd9UL, +0xdb3bbb7bUL, 0xd532b670UL, 0xc729a16dUL, 0xc920ac66UL, 0xe31f8f57UL, 0xed16825cUL, 0xff0d9541UL, 0xf104984aUL, +0xab73d323UL, 0xa57ade28UL, 0xb761c935UL, 0xb968c43eUL, 0x9357e70fUL, 0x9d5eea04UL, 0x8f45fd19UL, 0x814cf012UL, +0x3bab6bcbUL, 0x35a266c0UL, 0x27b971ddUL, 0x29b07cd6UL, 0x038f5fe7UL, 0x0d8652ecUL, 0x1f9d45f1UL, 0x119448faUL, +0x4be30393UL, 0x45ea0e98UL, 0x57f11985UL, 0x59f8148eUL, 0x73c737bfUL, 0x7dce3ab4UL, 0x6fd52da9UL, 0x61dc20a2UL, +0xad766df6UL, 0xa37f60fdUL, 0xb16477e0UL, 0xbf6d7aebUL, 0x955259daUL, 0x9b5b54d1UL, 0x894043ccUL, 0x87494ec7UL, +0xdd3e05aeUL, 0xd33708a5UL, 0xc12c1fb8UL, 0xcf2512b3UL, 0xe51a3182UL, 0xeb133c89UL, 0xf9082b94UL, 0xf701269fUL, +0x4de6bd46UL, 0x43efb04dUL, 0x51f4a750UL, 0x5ffdaa5bUL, 0x75c2896aUL, 0x7bcb8461UL, 0x69d0937cUL, 0x67d99e77UL, +0x3daed51eUL, 0x33a7d815UL, 0x21bccf08UL, 0x2fb5c203UL, 0x058ae132UL, 0x0b83ec39UL, 0x1998fb24UL, 0x1791f62fUL, +0x764dd68dUL, 0x7844db86UL, 0x6a5fcc9bUL, 0x6456c190UL, 0x4e69e2a1UL, 0x4060efaaUL, 0x527bf8b7UL, 0x5c72f5bcUL, +0x0605bed5UL, 0x080cb3deUL, 0x1a17a4c3UL, 0x141ea9c8UL, 0x3e218af9UL, 0x302887f2UL, 0x223390efUL, 0x2c3a9de4UL, +0x96dd063dUL, 0x98d40b36UL, 0x8acf1c2bUL, 0x84c61120UL, 0xaef93211UL, 0xa0f03f1aUL, 0xb2eb2807UL, 0xbce2250cUL, +0xe6956e65UL, 0xe89c636eUL, 0xfa877473UL, 0xf48e7978UL, 0xdeb15a49UL, 0xd0b85742UL, 0xc2a3405fUL, 0xccaa4d54UL, +0x41ecdaf7UL, 0x4fe5d7fcUL, 0x5dfec0e1UL, 0x53f7cdeaUL, 0x79c8eedbUL, 0x77c1e3d0UL, 0x65daf4cdUL, 0x6bd3f9c6UL, +0x31a4b2afUL, 0x3fadbfa4UL, 0x2db6a8b9UL, 0x23bfa5b2UL, 0x09808683UL, 0x07898b88UL, 0x15929c95UL, 0x1b9b919eUL, +0xa17c0a47UL, 0xaf75074cUL, 0xbd6e1051UL, 0xb3671d5aUL, 0x99583e6bUL, 0x97513360UL, 0x854a247dUL, 0x8b432976UL, +0xd134621fUL, 0xdf3d6f14UL, 0xcd267809UL, 0xc32f7502UL, 0xe9105633UL, 0xe7195b38UL, 0xf5024c25UL, 0xfb0b412eUL, +0x9ad7618cUL, 0x94de6c87UL, 0x86c57b9aUL, 0x88cc7691UL, 0xa2f355a0UL, 0xacfa58abUL, 0xbee14fb6UL, 0xb0e842bdUL, +0xea9f09d4UL, 0xe49604dfUL, 0xf68d13c2UL, 0xf8841ec9UL, 0xd2bb3df8UL, 0xdcb230f3UL, 0xcea927eeUL, 0xc0a02ae5UL, +0x7a47b13cUL, 0x744ebc37UL, 0x6655ab2aUL, 0x685ca621UL, 0x42638510UL, 0x4c6a881bUL, 0x5e719f06UL, 0x5078920dUL, +0x0a0fd964UL, 0x0406d46fUL, 0x161dc372UL, 0x1814ce79UL, 0x322bed48UL, 0x3c22e043UL, 0x2e39f75eUL, 0x2030fa55UL, +0xec9ab701UL, 0xe293ba0aUL, 0xf088ad17UL, 0xfe81a01cUL, 0xd4be832dUL, 0xdab78e26UL, 0xc8ac993bUL, 0xc6a59430UL, +0x9cd2df59UL, 0x92dbd252UL, 0x80c0c54fUL, 0x8ec9c844UL, 0xa4f6eb75UL, 0xaaffe67eUL, 0xb8e4f163UL, 0xb6edfc68UL, +0x0c0a67b1UL, 0x02036abaUL, 0x10187da7UL, 0x1e1170acUL, 0x342e539dUL, 0x3a275e96UL, 0x283c498bUL, 0x26354480UL, +0x7c420fe9UL, 0x724b02e2UL, 0x605015ffUL, 0x6e5918f4UL, 0x44663bc5UL, 0x4a6f36ceUL, 0x587421d3UL, 0x567d2cd8UL, +0x37a10c7aUL, 0x39a80171UL, 0x2bb3166cUL, 0x25ba1b67UL, 0x0f853856UL, 0x018c355dUL, 0x13972240UL, 0x1d9e2f4bUL, +0x47e96422UL, 0x49e06929UL, 0x5bfb7e34UL, 0x55f2733fUL, 0x7fcd500eUL, 0x71c45d05UL, 0x63df4a18UL, 0x6dd64713UL, +0xd731dccaUL, 0xd938d1c1UL, 0xcb23c6dcUL, 0xc52acbd7UL, 0xef15e8e6UL, 0xe11ce5edUL, 0xf307f2f0UL, 0xfd0efffbUL, 0xa779b492UL, 0xa970b999UL, 0xbb6bae84UL, 0xb562a38fUL, 0x9f5d80beUL, 0x91548db5UL, 0x834f9aa8UL, 0x8d4697a3UL }; static const ulong32 Tks1[] = { -0x00000000UL, 0x0b0e090dUL, 0x161c121aUL, 0x1d121b17UL, 0x2c382434UL, 0x27362d39UL, 0x3a24362eUL, 0x312a3f23UL, -0x58704868UL, 0x537e4165UL, 0x4e6c5a72UL, 0x4562537fUL, 0x74486c5cUL, 0x7f466551UL, 0x62547e46UL, 0x695a774bUL, -0xb0e090d0UL, 0xbbee99ddUL, 0xa6fc82caUL, 0xadf28bc7UL, 0x9cd8b4e4UL, 0x97d6bde9UL, 0x8ac4a6feUL, 0x81caaff3UL, -0xe890d8b8UL, 0xe39ed1b5UL, 0xfe8ccaa2UL, 0xf582c3afUL, 0xc4a8fc8cUL, 0xcfa6f581UL, 0xd2b4ee96UL, 0xd9bae79bUL, -0x7bdb3bbbUL, 0x70d532b6UL, 0x6dc729a1UL, 0x66c920acUL, 0x57e31f8fUL, 0x5ced1682UL, 0x41ff0d95UL, 0x4af10498UL, -0x23ab73d3UL, 0x28a57adeUL, 0x35b761c9UL, 0x3eb968c4UL, 0x0f9357e7UL, 0x049d5eeaUL, 0x198f45fdUL, 0x12814cf0UL, -0xcb3bab6bUL, 0xc035a266UL, 0xdd27b971UL, 0xd629b07cUL, 0xe7038f5fUL, 0xec0d8652UL, 0xf11f9d45UL, 0xfa119448UL, -0x934be303UL, 0x9845ea0eUL, 0x8557f119UL, 0x8e59f814UL, 0xbf73c737UL, 0xb47dce3aUL, 0xa96fd52dUL, 0xa261dc20UL, -0xf6ad766dUL, 0xfda37f60UL, 0xe0b16477UL, 0xebbf6d7aUL, 0xda955259UL, 0xd19b5b54UL, 0xcc894043UL, 0xc787494eUL, -0xaedd3e05UL, 0xa5d33708UL, 0xb8c12c1fUL, 0xb3cf2512UL, 0x82e51a31UL, 0x89eb133cUL, 0x94f9082bUL, 0x9ff70126UL, -0x464de6bdUL, 0x4d43efb0UL, 0x5051f4a7UL, 0x5b5ffdaaUL, 0x6a75c289UL, 0x617bcb84UL, 0x7c69d093UL, 0x7767d99eUL, -0x1e3daed5UL, 0x1533a7d8UL, 0x0821bccfUL, 0x032fb5c2UL, 0x32058ae1UL, 0x390b83ecUL, 0x241998fbUL, 0x2f1791f6UL, -0x8d764dd6UL, 0x867844dbUL, 0x9b6a5fccUL, 0x906456c1UL, 0xa14e69e2UL, 0xaa4060efUL, 0xb7527bf8UL, 0xbc5c72f5UL, -0xd50605beUL, 0xde080cb3UL, 0xc31a17a4UL, 0xc8141ea9UL, 0xf93e218aUL, 0xf2302887UL, 0xef223390UL, 0xe42c3a9dUL, -0x3d96dd06UL, 0x3698d40bUL, 0x2b8acf1cUL, 0x2084c611UL, 0x11aef932UL, 0x1aa0f03fUL, 0x07b2eb28UL, 0x0cbce225UL, -0x65e6956eUL, 0x6ee89c63UL, 0x73fa8774UL, 0x78f48e79UL, 0x49deb15aUL, 0x42d0b857UL, 0x5fc2a340UL, 0x54ccaa4dUL, -0xf741ecdaUL, 0xfc4fe5d7UL, 0xe15dfec0UL, 0xea53f7cdUL, 0xdb79c8eeUL, 0xd077c1e3UL, 0xcd65daf4UL, 0xc66bd3f9UL, -0xaf31a4b2UL, 0xa43fadbfUL, 0xb92db6a8UL, 0xb223bfa5UL, 0x83098086UL, 0x8807898bUL, 0x9515929cUL, 0x9e1b9b91UL, -0x47a17c0aUL, 0x4caf7507UL, 0x51bd6e10UL, 0x5ab3671dUL, 0x6b99583eUL, 0x60975133UL, 0x7d854a24UL, 0x768b4329UL, -0x1fd13462UL, 0x14df3d6fUL, 0x09cd2678UL, 0x02c32f75UL, 0x33e91056UL, 0x38e7195bUL, 0x25f5024cUL, 0x2efb0b41UL, -0x8c9ad761UL, 0x8794de6cUL, 0x9a86c57bUL, 0x9188cc76UL, 0xa0a2f355UL, 0xabacfa58UL, 0xb6bee14fUL, 0xbdb0e842UL, -0xd4ea9f09UL, 0xdfe49604UL, 0xc2f68d13UL, 0xc9f8841eUL, 0xf8d2bb3dUL, 0xf3dcb230UL, 0xeecea927UL, 0xe5c0a02aUL, -0x3c7a47b1UL, 0x37744ebcUL, 0x2a6655abUL, 0x21685ca6UL, 0x10426385UL, 0x1b4c6a88UL, 0x065e719fUL, 0x0d507892UL, -0x640a0fd9UL, 0x6f0406d4UL, 0x72161dc3UL, 0x791814ceUL, 0x48322bedUL, 0x433c22e0UL, 0x5e2e39f7UL, 0x552030faUL, -0x01ec9ab7UL, 0x0ae293baUL, 0x17f088adUL, 0x1cfe81a0UL, 0x2dd4be83UL, 0x26dab78eUL, 0x3bc8ac99UL, 0x30c6a594UL, -0x599cd2dfUL, 0x5292dbd2UL, 0x4f80c0c5UL, 0x448ec9c8UL, 0x75a4f6ebUL, 0x7eaaffe6UL, 0x63b8e4f1UL, 0x68b6edfcUL, -0xb10c0a67UL, 0xba02036aUL, 0xa710187dUL, 0xac1e1170UL, 0x9d342e53UL, 0x963a275eUL, 0x8b283c49UL, 0x80263544UL, -0xe97c420fUL, 0xe2724b02UL, 0xff605015UL, 0xf46e5918UL, 0xc544663bUL, 0xce4a6f36UL, 0xd3587421UL, 0xd8567d2cUL, -0x7a37a10cUL, 0x7139a801UL, 0x6c2bb316UL, 0x6725ba1bUL, 0x560f8538UL, 0x5d018c35UL, 0x40139722UL, 0x4b1d9e2fUL, -0x2247e964UL, 0x2949e069UL, 0x345bfb7eUL, 0x3f55f273UL, 0x0e7fcd50UL, 0x0571c45dUL, 0x1863df4aUL, 0x136dd647UL, -0xcad731dcUL, 0xc1d938d1UL, 0xdccb23c6UL, 0xd7c52acbUL, 0xe6ef15e8UL, 0xede11ce5UL, 0xf0f307f2UL, 0xfbfd0effUL, +0x00000000UL, 0x0b0e090dUL, 0x161c121aUL, 0x1d121b17UL, 0x2c382434UL, 0x27362d39UL, 0x3a24362eUL, 0x312a3f23UL, +0x58704868UL, 0x537e4165UL, 0x4e6c5a72UL, 0x4562537fUL, 0x74486c5cUL, 0x7f466551UL, 0x62547e46UL, 0x695a774bUL, +0xb0e090d0UL, 0xbbee99ddUL, 0xa6fc82caUL, 0xadf28bc7UL, 0x9cd8b4e4UL, 0x97d6bde9UL, 0x8ac4a6feUL, 0x81caaff3UL, +0xe890d8b8UL, 0xe39ed1b5UL, 0xfe8ccaa2UL, 0xf582c3afUL, 0xc4a8fc8cUL, 0xcfa6f581UL, 0xd2b4ee96UL, 0xd9bae79bUL, +0x7bdb3bbbUL, 0x70d532b6UL, 0x6dc729a1UL, 0x66c920acUL, 0x57e31f8fUL, 0x5ced1682UL, 0x41ff0d95UL, 0x4af10498UL, +0x23ab73d3UL, 0x28a57adeUL, 0x35b761c9UL, 0x3eb968c4UL, 0x0f9357e7UL, 0x049d5eeaUL, 0x198f45fdUL, 0x12814cf0UL, +0xcb3bab6bUL, 0xc035a266UL, 0xdd27b971UL, 0xd629b07cUL, 0xe7038f5fUL, 0xec0d8652UL, 0xf11f9d45UL, 0xfa119448UL, +0x934be303UL, 0x9845ea0eUL, 0x8557f119UL, 0x8e59f814UL, 0xbf73c737UL, 0xb47dce3aUL, 0xa96fd52dUL, 0xa261dc20UL, +0xf6ad766dUL, 0xfda37f60UL, 0xe0b16477UL, 0xebbf6d7aUL, 0xda955259UL, 0xd19b5b54UL, 0xcc894043UL, 0xc787494eUL, +0xaedd3e05UL, 0xa5d33708UL, 0xb8c12c1fUL, 0xb3cf2512UL, 0x82e51a31UL, 0x89eb133cUL, 0x94f9082bUL, 0x9ff70126UL, +0x464de6bdUL, 0x4d43efb0UL, 0x5051f4a7UL, 0x5b5ffdaaUL, 0x6a75c289UL, 0x617bcb84UL, 0x7c69d093UL, 0x7767d99eUL, +0x1e3daed5UL, 0x1533a7d8UL, 0x0821bccfUL, 0x032fb5c2UL, 0x32058ae1UL, 0x390b83ecUL, 0x241998fbUL, 0x2f1791f6UL, +0x8d764dd6UL, 0x867844dbUL, 0x9b6a5fccUL, 0x906456c1UL, 0xa14e69e2UL, 0xaa4060efUL, 0xb7527bf8UL, 0xbc5c72f5UL, +0xd50605beUL, 0xde080cb3UL, 0xc31a17a4UL, 0xc8141ea9UL, 0xf93e218aUL, 0xf2302887UL, 0xef223390UL, 0xe42c3a9dUL, +0x3d96dd06UL, 0x3698d40bUL, 0x2b8acf1cUL, 0x2084c611UL, 0x11aef932UL, 0x1aa0f03fUL, 0x07b2eb28UL, 0x0cbce225UL, +0x65e6956eUL, 0x6ee89c63UL, 0x73fa8774UL, 0x78f48e79UL, 0x49deb15aUL, 0x42d0b857UL, 0x5fc2a340UL, 0x54ccaa4dUL, +0xf741ecdaUL, 0xfc4fe5d7UL, 0xe15dfec0UL, 0xea53f7cdUL, 0xdb79c8eeUL, 0xd077c1e3UL, 0xcd65daf4UL, 0xc66bd3f9UL, +0xaf31a4b2UL, 0xa43fadbfUL, 0xb92db6a8UL, 0xb223bfa5UL, 0x83098086UL, 0x8807898bUL, 0x9515929cUL, 0x9e1b9b91UL, +0x47a17c0aUL, 0x4caf7507UL, 0x51bd6e10UL, 0x5ab3671dUL, 0x6b99583eUL, 0x60975133UL, 0x7d854a24UL, 0x768b4329UL, +0x1fd13462UL, 0x14df3d6fUL, 0x09cd2678UL, 0x02c32f75UL, 0x33e91056UL, 0x38e7195bUL, 0x25f5024cUL, 0x2efb0b41UL, +0x8c9ad761UL, 0x8794de6cUL, 0x9a86c57bUL, 0x9188cc76UL, 0xa0a2f355UL, 0xabacfa58UL, 0xb6bee14fUL, 0xbdb0e842UL, +0xd4ea9f09UL, 0xdfe49604UL, 0xc2f68d13UL, 0xc9f8841eUL, 0xf8d2bb3dUL, 0xf3dcb230UL, 0xeecea927UL, 0xe5c0a02aUL, +0x3c7a47b1UL, 0x37744ebcUL, 0x2a6655abUL, 0x21685ca6UL, 0x10426385UL, 0x1b4c6a88UL, 0x065e719fUL, 0x0d507892UL, +0x640a0fd9UL, 0x6f0406d4UL, 0x72161dc3UL, 0x791814ceUL, 0x48322bedUL, 0x433c22e0UL, 0x5e2e39f7UL, 0x552030faUL, +0x01ec9ab7UL, 0x0ae293baUL, 0x17f088adUL, 0x1cfe81a0UL, 0x2dd4be83UL, 0x26dab78eUL, 0x3bc8ac99UL, 0x30c6a594UL, +0x599cd2dfUL, 0x5292dbd2UL, 0x4f80c0c5UL, 0x448ec9c8UL, 0x75a4f6ebUL, 0x7eaaffe6UL, 0x63b8e4f1UL, 0x68b6edfcUL, +0xb10c0a67UL, 0xba02036aUL, 0xa710187dUL, 0xac1e1170UL, 0x9d342e53UL, 0x963a275eUL, 0x8b283c49UL, 0x80263544UL, +0xe97c420fUL, 0xe2724b02UL, 0xff605015UL, 0xf46e5918UL, 0xc544663bUL, 0xce4a6f36UL, 0xd3587421UL, 0xd8567d2cUL, +0x7a37a10cUL, 0x7139a801UL, 0x6c2bb316UL, 0x6725ba1bUL, 0x560f8538UL, 0x5d018c35UL, 0x40139722UL, 0x4b1d9e2fUL, +0x2247e964UL, 0x2949e069UL, 0x345bfb7eUL, 0x3f55f273UL, 0x0e7fcd50UL, 0x0571c45dUL, 0x1863df4aUL, 0x136dd647UL, +0xcad731dcUL, 0xc1d938d1UL, 0xdccb23c6UL, 0xd7c52acbUL, 0xe6ef15e8UL, 0xede11ce5UL, 0xf0f307f2UL, 0xfbfd0effUL, 0x92a779b4UL, 0x99a970b9UL, 0x84bb6baeUL, 0x8fb562a3UL, 0xbe9f5d80UL, 0xb591548dUL, 0xa8834f9aUL, 0xa38d4697UL }; static const ulong32 Tks2[] = { -0x00000000UL, 0x0d0b0e09UL, 0x1a161c12UL, 0x171d121bUL, 0x342c3824UL, 0x3927362dUL, 0x2e3a2436UL, 0x23312a3fUL, -0x68587048UL, 0x65537e41UL, 0x724e6c5aUL, 0x7f456253UL, 0x5c74486cUL, 0x517f4665UL, 0x4662547eUL, 0x4b695a77UL, -0xd0b0e090UL, 0xddbbee99UL, 0xcaa6fc82UL, 0xc7adf28bUL, 0xe49cd8b4UL, 0xe997d6bdUL, 0xfe8ac4a6UL, 0xf381caafUL, -0xb8e890d8UL, 0xb5e39ed1UL, 0xa2fe8ccaUL, 0xaff582c3UL, 0x8cc4a8fcUL, 0x81cfa6f5UL, 0x96d2b4eeUL, 0x9bd9bae7UL, -0xbb7bdb3bUL, 0xb670d532UL, 0xa16dc729UL, 0xac66c920UL, 0x8f57e31fUL, 0x825ced16UL, 0x9541ff0dUL, 0x984af104UL, -0xd323ab73UL, 0xde28a57aUL, 0xc935b761UL, 0xc43eb968UL, 0xe70f9357UL, 0xea049d5eUL, 0xfd198f45UL, 0xf012814cUL, -0x6bcb3babUL, 0x66c035a2UL, 0x71dd27b9UL, 0x7cd629b0UL, 0x5fe7038fUL, 0x52ec0d86UL, 0x45f11f9dUL, 0x48fa1194UL, -0x03934be3UL, 0x0e9845eaUL, 0x198557f1UL, 0x148e59f8UL, 0x37bf73c7UL, 0x3ab47dceUL, 0x2da96fd5UL, 0x20a261dcUL, -0x6df6ad76UL, 0x60fda37fUL, 0x77e0b164UL, 0x7aebbf6dUL, 0x59da9552UL, 0x54d19b5bUL, 0x43cc8940UL, 0x4ec78749UL, -0x05aedd3eUL, 0x08a5d337UL, 0x1fb8c12cUL, 0x12b3cf25UL, 0x3182e51aUL, 0x3c89eb13UL, 0x2b94f908UL, 0x269ff701UL, -0xbd464de6UL, 0xb04d43efUL, 0xa75051f4UL, 0xaa5b5ffdUL, 0x896a75c2UL, 0x84617bcbUL, 0x937c69d0UL, 0x9e7767d9UL, -0xd51e3daeUL, 0xd81533a7UL, 0xcf0821bcUL, 0xc2032fb5UL, 0xe132058aUL, 0xec390b83UL, 0xfb241998UL, 0xf62f1791UL, -0xd68d764dUL, 0xdb867844UL, 0xcc9b6a5fUL, 0xc1906456UL, 0xe2a14e69UL, 0xefaa4060UL, 0xf8b7527bUL, 0xf5bc5c72UL, -0xbed50605UL, 0xb3de080cUL, 0xa4c31a17UL, 0xa9c8141eUL, 0x8af93e21UL, 0x87f23028UL, 0x90ef2233UL, 0x9de42c3aUL, -0x063d96ddUL, 0x0b3698d4UL, 0x1c2b8acfUL, 0x112084c6UL, 0x3211aef9UL, 0x3f1aa0f0UL, 0x2807b2ebUL, 0x250cbce2UL, -0x6e65e695UL, 0x636ee89cUL, 0x7473fa87UL, 0x7978f48eUL, 0x5a49deb1UL, 0x5742d0b8UL, 0x405fc2a3UL, 0x4d54ccaaUL, -0xdaf741ecUL, 0xd7fc4fe5UL, 0xc0e15dfeUL, 0xcdea53f7UL, 0xeedb79c8UL, 0xe3d077c1UL, 0xf4cd65daUL, 0xf9c66bd3UL, -0xb2af31a4UL, 0xbfa43fadUL, 0xa8b92db6UL, 0xa5b223bfUL, 0x86830980UL, 0x8b880789UL, 0x9c951592UL, 0x919e1b9bUL, -0x0a47a17cUL, 0x074caf75UL, 0x1051bd6eUL, 0x1d5ab367UL, 0x3e6b9958UL, 0x33609751UL, 0x247d854aUL, 0x29768b43UL, -0x621fd134UL, 0x6f14df3dUL, 0x7809cd26UL, 0x7502c32fUL, 0x5633e910UL, 0x5b38e719UL, 0x4c25f502UL, 0x412efb0bUL, -0x618c9ad7UL, 0x6c8794deUL, 0x7b9a86c5UL, 0x769188ccUL, 0x55a0a2f3UL, 0x58abacfaUL, 0x4fb6bee1UL, 0x42bdb0e8UL, -0x09d4ea9fUL, 0x04dfe496UL, 0x13c2f68dUL, 0x1ec9f884UL, 0x3df8d2bbUL, 0x30f3dcb2UL, 0x27eecea9UL, 0x2ae5c0a0UL, -0xb13c7a47UL, 0xbc37744eUL, 0xab2a6655UL, 0xa621685cUL, 0x85104263UL, 0x881b4c6aUL, 0x9f065e71UL, 0x920d5078UL, -0xd9640a0fUL, 0xd46f0406UL, 0xc372161dUL, 0xce791814UL, 0xed48322bUL, 0xe0433c22UL, 0xf75e2e39UL, 0xfa552030UL, -0xb701ec9aUL, 0xba0ae293UL, 0xad17f088UL, 0xa01cfe81UL, 0x832dd4beUL, 0x8e26dab7UL, 0x993bc8acUL, 0x9430c6a5UL, -0xdf599cd2UL, 0xd25292dbUL, 0xc54f80c0UL, 0xc8448ec9UL, 0xeb75a4f6UL, 0xe67eaaffUL, 0xf163b8e4UL, 0xfc68b6edUL, -0x67b10c0aUL, 0x6aba0203UL, 0x7da71018UL, 0x70ac1e11UL, 0x539d342eUL, 0x5e963a27UL, 0x498b283cUL, 0x44802635UL, -0x0fe97c42UL, 0x02e2724bUL, 0x15ff6050UL, 0x18f46e59UL, 0x3bc54466UL, 0x36ce4a6fUL, 0x21d35874UL, 0x2cd8567dUL, -0x0c7a37a1UL, 0x017139a8UL, 0x166c2bb3UL, 0x1b6725baUL, 0x38560f85UL, 0x355d018cUL, 0x22401397UL, 0x2f4b1d9eUL, -0x642247e9UL, 0x692949e0UL, 0x7e345bfbUL, 0x733f55f2UL, 0x500e7fcdUL, 0x5d0571c4UL, 0x4a1863dfUL, 0x47136dd6UL, -0xdccad731UL, 0xd1c1d938UL, 0xc6dccb23UL, 0xcbd7c52aUL, 0xe8e6ef15UL, 0xe5ede11cUL, 0xf2f0f307UL, 0xfffbfd0eUL, +0x00000000UL, 0x0d0b0e09UL, 0x1a161c12UL, 0x171d121bUL, 0x342c3824UL, 0x3927362dUL, 0x2e3a2436UL, 0x23312a3fUL, +0x68587048UL, 0x65537e41UL, 0x724e6c5aUL, 0x7f456253UL, 0x5c74486cUL, 0x517f4665UL, 0x4662547eUL, 0x4b695a77UL, +0xd0b0e090UL, 0xddbbee99UL, 0xcaa6fc82UL, 0xc7adf28bUL, 0xe49cd8b4UL, 0xe997d6bdUL, 0xfe8ac4a6UL, 0xf381caafUL, +0xb8e890d8UL, 0xb5e39ed1UL, 0xa2fe8ccaUL, 0xaff582c3UL, 0x8cc4a8fcUL, 0x81cfa6f5UL, 0x96d2b4eeUL, 0x9bd9bae7UL, +0xbb7bdb3bUL, 0xb670d532UL, 0xa16dc729UL, 0xac66c920UL, 0x8f57e31fUL, 0x825ced16UL, 0x9541ff0dUL, 0x984af104UL, +0xd323ab73UL, 0xde28a57aUL, 0xc935b761UL, 0xc43eb968UL, 0xe70f9357UL, 0xea049d5eUL, 0xfd198f45UL, 0xf012814cUL, +0x6bcb3babUL, 0x66c035a2UL, 0x71dd27b9UL, 0x7cd629b0UL, 0x5fe7038fUL, 0x52ec0d86UL, 0x45f11f9dUL, 0x48fa1194UL, +0x03934be3UL, 0x0e9845eaUL, 0x198557f1UL, 0x148e59f8UL, 0x37bf73c7UL, 0x3ab47dceUL, 0x2da96fd5UL, 0x20a261dcUL, +0x6df6ad76UL, 0x60fda37fUL, 0x77e0b164UL, 0x7aebbf6dUL, 0x59da9552UL, 0x54d19b5bUL, 0x43cc8940UL, 0x4ec78749UL, +0x05aedd3eUL, 0x08a5d337UL, 0x1fb8c12cUL, 0x12b3cf25UL, 0x3182e51aUL, 0x3c89eb13UL, 0x2b94f908UL, 0x269ff701UL, +0xbd464de6UL, 0xb04d43efUL, 0xa75051f4UL, 0xaa5b5ffdUL, 0x896a75c2UL, 0x84617bcbUL, 0x937c69d0UL, 0x9e7767d9UL, +0xd51e3daeUL, 0xd81533a7UL, 0xcf0821bcUL, 0xc2032fb5UL, 0xe132058aUL, 0xec390b83UL, 0xfb241998UL, 0xf62f1791UL, +0xd68d764dUL, 0xdb867844UL, 0xcc9b6a5fUL, 0xc1906456UL, 0xe2a14e69UL, 0xefaa4060UL, 0xf8b7527bUL, 0xf5bc5c72UL, +0xbed50605UL, 0xb3de080cUL, 0xa4c31a17UL, 0xa9c8141eUL, 0x8af93e21UL, 0x87f23028UL, 0x90ef2233UL, 0x9de42c3aUL, +0x063d96ddUL, 0x0b3698d4UL, 0x1c2b8acfUL, 0x112084c6UL, 0x3211aef9UL, 0x3f1aa0f0UL, 0x2807b2ebUL, 0x250cbce2UL, +0x6e65e695UL, 0x636ee89cUL, 0x7473fa87UL, 0x7978f48eUL, 0x5a49deb1UL, 0x5742d0b8UL, 0x405fc2a3UL, 0x4d54ccaaUL, +0xdaf741ecUL, 0xd7fc4fe5UL, 0xc0e15dfeUL, 0xcdea53f7UL, 0xeedb79c8UL, 0xe3d077c1UL, 0xf4cd65daUL, 0xf9c66bd3UL, +0xb2af31a4UL, 0xbfa43fadUL, 0xa8b92db6UL, 0xa5b223bfUL, 0x86830980UL, 0x8b880789UL, 0x9c951592UL, 0x919e1b9bUL, +0x0a47a17cUL, 0x074caf75UL, 0x1051bd6eUL, 0x1d5ab367UL, 0x3e6b9958UL, 0x33609751UL, 0x247d854aUL, 0x29768b43UL, +0x621fd134UL, 0x6f14df3dUL, 0x7809cd26UL, 0x7502c32fUL, 0x5633e910UL, 0x5b38e719UL, 0x4c25f502UL, 0x412efb0bUL, +0x618c9ad7UL, 0x6c8794deUL, 0x7b9a86c5UL, 0x769188ccUL, 0x55a0a2f3UL, 0x58abacfaUL, 0x4fb6bee1UL, 0x42bdb0e8UL, +0x09d4ea9fUL, 0x04dfe496UL, 0x13c2f68dUL, 0x1ec9f884UL, 0x3df8d2bbUL, 0x30f3dcb2UL, 0x27eecea9UL, 0x2ae5c0a0UL, +0xb13c7a47UL, 0xbc37744eUL, 0xab2a6655UL, 0xa621685cUL, 0x85104263UL, 0x881b4c6aUL, 0x9f065e71UL, 0x920d5078UL, +0xd9640a0fUL, 0xd46f0406UL, 0xc372161dUL, 0xce791814UL, 0xed48322bUL, 0xe0433c22UL, 0xf75e2e39UL, 0xfa552030UL, +0xb701ec9aUL, 0xba0ae293UL, 0xad17f088UL, 0xa01cfe81UL, 0x832dd4beUL, 0x8e26dab7UL, 0x993bc8acUL, 0x9430c6a5UL, +0xdf599cd2UL, 0xd25292dbUL, 0xc54f80c0UL, 0xc8448ec9UL, 0xeb75a4f6UL, 0xe67eaaffUL, 0xf163b8e4UL, 0xfc68b6edUL, +0x67b10c0aUL, 0x6aba0203UL, 0x7da71018UL, 0x70ac1e11UL, 0x539d342eUL, 0x5e963a27UL, 0x498b283cUL, 0x44802635UL, +0x0fe97c42UL, 0x02e2724bUL, 0x15ff6050UL, 0x18f46e59UL, 0x3bc54466UL, 0x36ce4a6fUL, 0x21d35874UL, 0x2cd8567dUL, +0x0c7a37a1UL, 0x017139a8UL, 0x166c2bb3UL, 0x1b6725baUL, 0x38560f85UL, 0x355d018cUL, 0x22401397UL, 0x2f4b1d9eUL, +0x642247e9UL, 0x692949e0UL, 0x7e345bfbUL, 0x733f55f2UL, 0x500e7fcdUL, 0x5d0571c4UL, 0x4a1863dfUL, 0x47136dd6UL, +0xdccad731UL, 0xd1c1d938UL, 0xc6dccb23UL, 0xcbd7c52aUL, 0xe8e6ef15UL, 0xe5ede11cUL, 0xf2f0f307UL, 0xfffbfd0eUL, 0xb492a779UL, 0xb999a970UL, 0xae84bb6bUL, 0xa38fb562UL, 0x80be9f5dUL, 0x8db59154UL, 0x9aa8834fUL, 0x97a38d46UL }; static const ulong32 Tks3[] = { -0x00000000UL, 0x090d0b0eUL, 0x121a161cUL, 0x1b171d12UL, 0x24342c38UL, 0x2d392736UL, 0x362e3a24UL, 0x3f23312aUL, -0x48685870UL, 0x4165537eUL, 0x5a724e6cUL, 0x537f4562UL, 0x6c5c7448UL, 0x65517f46UL, 0x7e466254UL, 0x774b695aUL, -0x90d0b0e0UL, 0x99ddbbeeUL, 0x82caa6fcUL, 0x8bc7adf2UL, 0xb4e49cd8UL, 0xbde997d6UL, 0xa6fe8ac4UL, 0xaff381caUL, -0xd8b8e890UL, 0xd1b5e39eUL, 0xcaa2fe8cUL, 0xc3aff582UL, 0xfc8cc4a8UL, 0xf581cfa6UL, 0xee96d2b4UL, 0xe79bd9baUL, -0x3bbb7bdbUL, 0x32b670d5UL, 0x29a16dc7UL, 0x20ac66c9UL, 0x1f8f57e3UL, 0x16825cedUL, 0x0d9541ffUL, 0x04984af1UL, -0x73d323abUL, 0x7ade28a5UL, 0x61c935b7UL, 0x68c43eb9UL, 0x57e70f93UL, 0x5eea049dUL, 0x45fd198fUL, 0x4cf01281UL, -0xab6bcb3bUL, 0xa266c035UL, 0xb971dd27UL, 0xb07cd629UL, 0x8f5fe703UL, 0x8652ec0dUL, 0x9d45f11fUL, 0x9448fa11UL, -0xe303934bUL, 0xea0e9845UL, 0xf1198557UL, 0xf8148e59UL, 0xc737bf73UL, 0xce3ab47dUL, 0xd52da96fUL, 0xdc20a261UL, -0x766df6adUL, 0x7f60fda3UL, 0x6477e0b1UL, 0x6d7aebbfUL, 0x5259da95UL, 0x5b54d19bUL, 0x4043cc89UL, 0x494ec787UL, -0x3e05aeddUL, 0x3708a5d3UL, 0x2c1fb8c1UL, 0x2512b3cfUL, 0x1a3182e5UL, 0x133c89ebUL, 0x082b94f9UL, 0x01269ff7UL, -0xe6bd464dUL, 0xefb04d43UL, 0xf4a75051UL, 0xfdaa5b5fUL, 0xc2896a75UL, 0xcb84617bUL, 0xd0937c69UL, 0xd99e7767UL, -0xaed51e3dUL, 0xa7d81533UL, 0xbccf0821UL, 0xb5c2032fUL, 0x8ae13205UL, 0x83ec390bUL, 0x98fb2419UL, 0x91f62f17UL, -0x4dd68d76UL, 0x44db8678UL, 0x5fcc9b6aUL, 0x56c19064UL, 0x69e2a14eUL, 0x60efaa40UL, 0x7bf8b752UL, 0x72f5bc5cUL, -0x05bed506UL, 0x0cb3de08UL, 0x17a4c31aUL, 0x1ea9c814UL, 0x218af93eUL, 0x2887f230UL, 0x3390ef22UL, 0x3a9de42cUL, -0xdd063d96UL, 0xd40b3698UL, 0xcf1c2b8aUL, 0xc6112084UL, 0xf93211aeUL, 0xf03f1aa0UL, 0xeb2807b2UL, 0xe2250cbcUL, -0x956e65e6UL, 0x9c636ee8UL, 0x877473faUL, 0x8e7978f4UL, 0xb15a49deUL, 0xb85742d0UL, 0xa3405fc2UL, 0xaa4d54ccUL, -0xecdaf741UL, 0xe5d7fc4fUL, 0xfec0e15dUL, 0xf7cdea53UL, 0xc8eedb79UL, 0xc1e3d077UL, 0xdaf4cd65UL, 0xd3f9c66bUL, -0xa4b2af31UL, 0xadbfa43fUL, 0xb6a8b92dUL, 0xbfa5b223UL, 0x80868309UL, 0x898b8807UL, 0x929c9515UL, 0x9b919e1bUL, -0x7c0a47a1UL, 0x75074cafUL, 0x6e1051bdUL, 0x671d5ab3UL, 0x583e6b99UL, 0x51336097UL, 0x4a247d85UL, 0x4329768bUL, -0x34621fd1UL, 0x3d6f14dfUL, 0x267809cdUL, 0x2f7502c3UL, 0x105633e9UL, 0x195b38e7UL, 0x024c25f5UL, 0x0b412efbUL, -0xd7618c9aUL, 0xde6c8794UL, 0xc57b9a86UL, 0xcc769188UL, 0xf355a0a2UL, 0xfa58abacUL, 0xe14fb6beUL, 0xe842bdb0UL, -0x9f09d4eaUL, 0x9604dfe4UL, 0x8d13c2f6UL, 0x841ec9f8UL, 0xbb3df8d2UL, 0xb230f3dcUL, 0xa927eeceUL, 0xa02ae5c0UL, -0x47b13c7aUL, 0x4ebc3774UL, 0x55ab2a66UL, 0x5ca62168UL, 0x63851042UL, 0x6a881b4cUL, 0x719f065eUL, 0x78920d50UL, -0x0fd9640aUL, 0x06d46f04UL, 0x1dc37216UL, 0x14ce7918UL, 0x2bed4832UL, 0x22e0433cUL, 0x39f75e2eUL, 0x30fa5520UL, -0x9ab701ecUL, 0x93ba0ae2UL, 0x88ad17f0UL, 0x81a01cfeUL, 0xbe832dd4UL, 0xb78e26daUL, 0xac993bc8UL, 0xa59430c6UL, -0xd2df599cUL, 0xdbd25292UL, 0xc0c54f80UL, 0xc9c8448eUL, 0xf6eb75a4UL, 0xffe67eaaUL, 0xe4f163b8UL, 0xedfc68b6UL, -0x0a67b10cUL, 0x036aba02UL, 0x187da710UL, 0x1170ac1eUL, 0x2e539d34UL, 0x275e963aUL, 0x3c498b28UL, 0x35448026UL, -0x420fe97cUL, 0x4b02e272UL, 0x5015ff60UL, 0x5918f46eUL, 0x663bc544UL, 0x6f36ce4aUL, 0x7421d358UL, 0x7d2cd856UL, -0xa10c7a37UL, 0xa8017139UL, 0xb3166c2bUL, 0xba1b6725UL, 0x8538560fUL, 0x8c355d01UL, 0x97224013UL, 0x9e2f4b1dUL, -0xe9642247UL, 0xe0692949UL, 0xfb7e345bUL, 0xf2733f55UL, 0xcd500e7fUL, 0xc45d0571UL, 0xdf4a1863UL, 0xd647136dUL, -0x31dccad7UL, 0x38d1c1d9UL, 0x23c6dccbUL, 0x2acbd7c5UL, 0x15e8e6efUL, 0x1ce5ede1UL, 0x07f2f0f3UL, 0x0efffbfdUL, +0x00000000UL, 0x090d0b0eUL, 0x121a161cUL, 0x1b171d12UL, 0x24342c38UL, 0x2d392736UL, 0x362e3a24UL, 0x3f23312aUL, +0x48685870UL, 0x4165537eUL, 0x5a724e6cUL, 0x537f4562UL, 0x6c5c7448UL, 0x65517f46UL, 0x7e466254UL, 0x774b695aUL, +0x90d0b0e0UL, 0x99ddbbeeUL, 0x82caa6fcUL, 0x8bc7adf2UL, 0xb4e49cd8UL, 0xbde997d6UL, 0xa6fe8ac4UL, 0xaff381caUL, +0xd8b8e890UL, 0xd1b5e39eUL, 0xcaa2fe8cUL, 0xc3aff582UL, 0xfc8cc4a8UL, 0xf581cfa6UL, 0xee96d2b4UL, 0xe79bd9baUL, +0x3bbb7bdbUL, 0x32b670d5UL, 0x29a16dc7UL, 0x20ac66c9UL, 0x1f8f57e3UL, 0x16825cedUL, 0x0d9541ffUL, 0x04984af1UL, +0x73d323abUL, 0x7ade28a5UL, 0x61c935b7UL, 0x68c43eb9UL, 0x57e70f93UL, 0x5eea049dUL, 0x45fd198fUL, 0x4cf01281UL, +0xab6bcb3bUL, 0xa266c035UL, 0xb971dd27UL, 0xb07cd629UL, 0x8f5fe703UL, 0x8652ec0dUL, 0x9d45f11fUL, 0x9448fa11UL, +0xe303934bUL, 0xea0e9845UL, 0xf1198557UL, 0xf8148e59UL, 0xc737bf73UL, 0xce3ab47dUL, 0xd52da96fUL, 0xdc20a261UL, +0x766df6adUL, 0x7f60fda3UL, 0x6477e0b1UL, 0x6d7aebbfUL, 0x5259da95UL, 0x5b54d19bUL, 0x4043cc89UL, 0x494ec787UL, +0x3e05aeddUL, 0x3708a5d3UL, 0x2c1fb8c1UL, 0x2512b3cfUL, 0x1a3182e5UL, 0x133c89ebUL, 0x082b94f9UL, 0x01269ff7UL, +0xe6bd464dUL, 0xefb04d43UL, 0xf4a75051UL, 0xfdaa5b5fUL, 0xc2896a75UL, 0xcb84617bUL, 0xd0937c69UL, 0xd99e7767UL, +0xaed51e3dUL, 0xa7d81533UL, 0xbccf0821UL, 0xb5c2032fUL, 0x8ae13205UL, 0x83ec390bUL, 0x98fb2419UL, 0x91f62f17UL, +0x4dd68d76UL, 0x44db8678UL, 0x5fcc9b6aUL, 0x56c19064UL, 0x69e2a14eUL, 0x60efaa40UL, 0x7bf8b752UL, 0x72f5bc5cUL, +0x05bed506UL, 0x0cb3de08UL, 0x17a4c31aUL, 0x1ea9c814UL, 0x218af93eUL, 0x2887f230UL, 0x3390ef22UL, 0x3a9de42cUL, +0xdd063d96UL, 0xd40b3698UL, 0xcf1c2b8aUL, 0xc6112084UL, 0xf93211aeUL, 0xf03f1aa0UL, 0xeb2807b2UL, 0xe2250cbcUL, +0x956e65e6UL, 0x9c636ee8UL, 0x877473faUL, 0x8e7978f4UL, 0xb15a49deUL, 0xb85742d0UL, 0xa3405fc2UL, 0xaa4d54ccUL, +0xecdaf741UL, 0xe5d7fc4fUL, 0xfec0e15dUL, 0xf7cdea53UL, 0xc8eedb79UL, 0xc1e3d077UL, 0xdaf4cd65UL, 0xd3f9c66bUL, +0xa4b2af31UL, 0xadbfa43fUL, 0xb6a8b92dUL, 0xbfa5b223UL, 0x80868309UL, 0x898b8807UL, 0x929c9515UL, 0x9b919e1bUL, +0x7c0a47a1UL, 0x75074cafUL, 0x6e1051bdUL, 0x671d5ab3UL, 0x583e6b99UL, 0x51336097UL, 0x4a247d85UL, 0x4329768bUL, +0x34621fd1UL, 0x3d6f14dfUL, 0x267809cdUL, 0x2f7502c3UL, 0x105633e9UL, 0x195b38e7UL, 0x024c25f5UL, 0x0b412efbUL, +0xd7618c9aUL, 0xde6c8794UL, 0xc57b9a86UL, 0xcc769188UL, 0xf355a0a2UL, 0xfa58abacUL, 0xe14fb6beUL, 0xe842bdb0UL, +0x9f09d4eaUL, 0x9604dfe4UL, 0x8d13c2f6UL, 0x841ec9f8UL, 0xbb3df8d2UL, 0xb230f3dcUL, 0xa927eeceUL, 0xa02ae5c0UL, +0x47b13c7aUL, 0x4ebc3774UL, 0x55ab2a66UL, 0x5ca62168UL, 0x63851042UL, 0x6a881b4cUL, 0x719f065eUL, 0x78920d50UL, +0x0fd9640aUL, 0x06d46f04UL, 0x1dc37216UL, 0x14ce7918UL, 0x2bed4832UL, 0x22e0433cUL, 0x39f75e2eUL, 0x30fa5520UL, +0x9ab701ecUL, 0x93ba0ae2UL, 0x88ad17f0UL, 0x81a01cfeUL, 0xbe832dd4UL, 0xb78e26daUL, 0xac993bc8UL, 0xa59430c6UL, +0xd2df599cUL, 0xdbd25292UL, 0xc0c54f80UL, 0xc9c8448eUL, 0xf6eb75a4UL, 0xffe67eaaUL, 0xe4f163b8UL, 0xedfc68b6UL, +0x0a67b10cUL, 0x036aba02UL, 0x187da710UL, 0x1170ac1eUL, 0x2e539d34UL, 0x275e963aUL, 0x3c498b28UL, 0x35448026UL, +0x420fe97cUL, 0x4b02e272UL, 0x5015ff60UL, 0x5918f46eUL, 0x663bc544UL, 0x6f36ce4aUL, 0x7421d358UL, 0x7d2cd856UL, +0xa10c7a37UL, 0xa8017139UL, 0xb3166c2bUL, 0xba1b6725UL, 0x8538560fUL, 0x8c355d01UL, 0x97224013UL, 0x9e2f4b1dUL, +0xe9642247UL, 0xe0692949UL, 0xfb7e345bUL, 0xf2733f55UL, 0xcd500e7fUL, 0xc45d0571UL, 0xdf4a1863UL, 0xd647136dUL, +0x31dccad7UL, 0x38d1c1d9UL, 0x23c6dccbUL, 0x2acbd7c5UL, 0x15e8e6efUL, 0x1ce5ede1UL, 0x07f2f0f3UL, 0x0efffbfdUL, 0x79b492a7UL, 0x70b999a9UL, 0x6bae84bbUL, 0x62a38fb5UL, 0x5d80be9fUL, 0x548db591UL, 0x4f9aa883UL, 0x4697a38dUL }; @@ -1011,12 +1009,8 @@ static const ulong32 Tks3[] = { #endif /* SMALL CODE */ -#ifndef PELI_TAB static const ulong32 rcon[] = { 0x01000000UL, 0x02000000UL, 0x04000000UL, 0x08000000UL, 0x10000000UL, 0x20000000UL, 0x40000000UL, 0x80000000UL, 0x1B000000UL, 0x36000000UL, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */ }; -#endif - -#endif /* LTC_AES_TAB_C */ diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 0c6f6a21..00000000 --- a/appveyor.yml +++ /dev/null @@ -1,56 +0,0 @@ -version: 1.18.2-develop+{build} -branches: - only: - - master - - develop - - /^release/ - - /^appveyor/ - - /^build-ci/ -image: -- Visual Studio 2022 -- Visual Studio 2019 -- Visual Studio 2017 -- Visual Studio 2015 -environment: - matrix: - - LTC_CC: cl - - LTC_CC: clang-cl -matrix: - exclude: - - image: Visual Studio 2019 - LTC_CC: clang-cl - - image: Visual Studio 2017 - LTC_CC: clang-cl - - image: Visual Studio 2015 - LTC_CC: clang-cl -build_script: -- cmd: >- - if "Visual Studio 2022"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" - if "Visual Studio 2019"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" - if "Visual Studio 2017"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" - if "Visual Studio 2015"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 - if "Visual Studio 2015"=="%APPVEYOR_BUILD_WORKER_IMAGE%" call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64 - if "clang-cl"=="%LTC_CC%" set "PATH=C:\Program Files\LLVM\bin;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\Llvm\x64\bin;%PATH%" - if "clang-cl"=="%LTC_CC%" clang-cl --version - cd.. - git clone https://github.com/libtom/libtommath.git --branch=master - cp libtomcrypt\.ci\cmake.bat libtommath\cmake.bat - cd libtommath - cmake.bat - nmake -f makefile.msvc - cd.. - cd libtomcrypt - .ci\cmake.bat - nmake -f makefile.msvc all CC=%LTC_CC% - cp test.exe test-stock.exe - cp timing.exe timing-stock.exe - nmake -f makefile.msvc clean - nmake -f makefile.msvc all CC=%LTC_CC% CFLAGS="/Ox /DUSE_LTM /DLTM_DESC /DLTC_NO_ACCEL /I../libtommath" -test_script: -- cmd: >- - test-stock.exe - test.exe - timing-stock.exe cipher_ecb aes - timing.exe cipher_ecb aes - timing-stock.exe hash sha - timing.exe hash sha diff --git a/authors b/authors new file mode 100644 index 00000000..ba4ea6b3 --- /dev/null +++ b/authors @@ -0,0 +1,55 @@ +This is a list of people who have contributed [directly or indirectly] to the project +[in no partcular order]. If you have helped and your name is not here email me at +tomstdenis@yahoo.com. + + +1) Richard.van.de.Laarschot@ict.nl + + Gave help porting the lib to MSVC particularly pointed out various warnings and errors. + +2) Richard Heathfield + + Gave a lot of help concerning valid C portable code. + +3) Ajay K. Agrawal + + Helped port the library to MSVC and spotted a few bugs and errors. + +4) Brian Gladman + + Wrote the AES and Serpent code used. Found a bug in the hash code for certain types of inputs. + +5) Svante Seleborg + + Submitted the "ampi.c" code as well as many suggestions on improving the readability of the source code. + +6) Clay Culver + + Submitted a fix for "rsa.c" which cleaned up some code. Submited some other fixes too. :-) + Clay has helped find bugs in various pieces of code including the registry functions, base64 routines + and the make process. He is also now the primary author of the libtomcrypt reference manual and has plan + at making a HTML version. + +7) Jason Klapste + + Submitted fixes to the yarrow, hash, make process and test code as well as other subtle bug fixes. The +yarrow code can now default to any cipher/hash that is left after you remove them from a build. + +8) Dobes Vandermeer + + Submitted HMAC code that worked flawlessly out of the box... good job! Also submitted a MD4 routine. + Submitted some modified DES code that was merged into the code base [using the libtomcrypt API] + +9) Wayne Scott (wscott@bitmover.com) + + Submitted base64 that complies with the RFC standards. Submitted some ideas to improve the RSA key generation + as well. + +10) Sky Schulz (sky@ogn.com) + + Has submitted a set of ideas to improve the library and make it more attractive for professional users. + +11) Mike Frysinger + + Together with Clay came up with a more "unix friendly" makefile. Mike Frysinger has been keeping copies of + the library for the Gentoo linux distribution. \ No newline at end of file diff --git a/base64_decode.c b/base64_decode.c new file mode 100644 index 00000000..6729480e --- /dev/null +++ b/base64_decode.c @@ -0,0 +1,76 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* compliant base64 code donated by Wayne Scott (wscott@bitmover.com) */ +#include "mycrypt.h" + +#ifdef BASE64 + +static const unsigned char map[256] = { +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, +255, 254, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, +255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255, +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, +255, 255, 255, 255 }; + +int base64_decode(const unsigned char *in, unsigned long len, + unsigned char *out, unsigned long *outlen) +{ + unsigned long t, x, y, z; + unsigned char c; + int g; + + _ARGCHK(in != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + + g = 3; + for (x = y = z = t = 0; x < len; x++) { + c = map[in[x]&0xFF]; + if (c == 255) continue; + if (c == 254) { c = 0; g--; } + t = (t<<6)|c; + if (++y == 4) { + if (z + g > *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + out[z++] = (unsigned char)((t>>16)&255); + if (g > 1) out[z++] = (unsigned char)((t>>8)&255); + if (g > 2) out[z++] = (unsigned char)(t&255); + y = t = 0; + } + } + if (y != 0) { + return CRYPT_INVALID_PACKET; + } + *outlen = z; + return CRYPT_OK; +} + +#endif + diff --git a/base64_encode.c b/base64_encode.c new file mode 100644 index 00000000..c322bccb --- /dev/null +++ b/base64_encode.c @@ -0,0 +1,63 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* compliant base64 code donated by Wayne Scott (wscott@bitmover.com) */ +#include "mycrypt.h" + +#ifdef BASE64 + +static const char *codes = +"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +int base64_encode(const unsigned char *in, unsigned long len, + unsigned char *out, unsigned long *outlen) +{ + unsigned long i, len2, leven; + unsigned char *p; + + _ARGCHK(in != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + + /* valid output size ? */ + len2 = 4 * ((len + 2) / 3); + if (*outlen < len2 + 1) { + return CRYPT_BUFFER_OVERFLOW; + } + p = out; + leven = 3*(len / 3); + for (i = 0; i < leven; i += 3) { + *p++ = codes[(in[0] >> 2) & 0x3F]; + *p++ = codes[(((in[0] & 3) << 4) + (in[1] >> 4)) & 0x3F]; + *p++ = codes[(((in[1] & 0xf) << 2) + (in[2] >> 6)) & 0x3F]; + *p++ = codes[in[2] & 0x3F]; + in += 3; + } + /* Pad it if necessary... */ + if (i < len) { + unsigned a = in[0]; + unsigned b = (i+1 < len) ? in[1] : 0; + + *p++ = codes[(a >> 2) & 0x3F]; + *p++ = codes[(((a & 3) << 4) + (b >> 4)) & 0x3F]; + *p++ = (i+1 < len) ? codes[(((b & 0xf) << 2)) & 0x3F] : '='; + *p++ = '='; + } + + /* append a NULL byte */ + *p = '\0'; + + /* return ok */ + *outlen = p - out; + return CRYPT_OK; +} + +#endif + diff --git a/bin.in b/bin.in deleted file mode 100644 index 3f2851ce..00000000 --- a/bin.in +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -# Shell wrapper script for the executables when built with the shared -# libtomcrypt library. - -set -euf - -rootdir="$(cd -- "${0%/*}/" && pwd -P)" -binpath="$rootdir/.bin/${0##*/}" - -[ -z "${LD_LIBRARY_PATH:=$rootdir}" ] || - LD_LIBRARY_PATH="$rootdir:$LD_LIBRARY_PATH" - -export LD_LIBRARY_PATH - -if [ -n "${1+x}" ]; then - exec "$binpath" "${@:-}" -else - exec "$binpath" -fi diff --git a/src/ciphers/blowfish.c b/blowfish.c similarity index 73% rename from src/ciphers/blowfish.c rename to blowfish.c index 257eab7e..229ba88c 100644 --- a/src/ciphers/blowfish.c +++ b/blowfish.c @@ -1,25 +1,27 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/** - @file blowfish.c - Implementation of the Blowfish block cipher, Tom St Denis -*/ -#include "tomcrypt_private.h" +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" -#ifdef LTC_BLOWFISH +#ifdef BLOWFISH -const struct ltc_cipher_descriptor blowfish_desc = +const struct _cipher_descriptor blowfish_desc = { "blowfish", 0, - 8, 72, 8, 16, + 8, 56, 8, 16, &blowfish_setup, &blowfish_ecb_encrypt, &blowfish_ecb_decrypt, &blowfish_test, - &blowfish_done, - &blowfish_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + &blowfish_keysize }; static const ulong32 ORIG_P[16 + 2] = { @@ -289,250 +291,154 @@ static const ulong32 ORIG_S[4][256] = { 0xB74E6132UL, 0xCE77E25BUL, 0x578FDFE3UL, 0x3AC372E6UL } }; -#ifndef __GNUC__ -#define F(x) ((S1[LTC_BYTE(x,3)] + S2[LTC_BYTE(x,2)]) ^ S3[LTC_BYTE(x,1)]) + S4[LTC_BYTE(x,0)] -#else -#define F(x) ((skey->blowfish.S[0][LTC_BYTE(x,3)] + skey->blowfish.S[1][LTC_BYTE(x,2)]) ^ skey->blowfish.S[2][LTC_BYTE(x,1)]) + skey->blowfish.S[3][LTC_BYTE(x,0)] -#endif - -static void s_blowfish_encipher(ulong32 *L, ulong32 *R, const symmetric_key *skey) +int blowfish_setup(const unsigned char *key, int keylen, int num_rounds, + symmetric_key *skey) { - int rounds; + ulong32 x, y, z, A; + unsigned char B[8]; - ulong32 l, r; -#ifndef __GNUC__ - const ulong32 *S1, *S2, *S3, *S4; + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); - S1 = skey->blowfish.S[0]; - S2 = skey->blowfish.S[1]; - S3 = skey->blowfish.S[2]; - S4 = skey->blowfish.S[3]; -#endif - - l = *L; - r = *R; - - /* do 16 rounds */ - for (rounds = 0; rounds < 16; ) { - l ^= skey->blowfish.K[rounds++]; r ^= F(l); - r ^= skey->blowfish.K[rounds++]; l ^= F(r); - l ^= skey->blowfish.K[rounds++]; r ^= F(l); - r ^= skey->blowfish.K[rounds++]; l ^= F(r); + /* check key length */ + if (keylen < 8 || keylen > 56) { + return CRYPT_INVALID_KEYSIZE; } - /* last keying */ - l ^= skey->blowfish.K[16]; - r ^= skey->blowfish.K[17]; + /* check rounds */ + if (num_rounds != 0 && num_rounds != 16) { + return CRYPT_INVALID_ROUNDS; + } - *L = r; - *R = l; -} - -void blowfish_enc(ulong32 *data, unsigned long blocks, const symmetric_key *skey) -{ - unsigned long i; - ulong32 *d = data; - - for (i = 0; i < blocks; ++i) { - s_blowfish_encipher(d, d + 1, skey); - d += 2; + /* load in key bytes (Supplied by David Hopwood) */ + for (x = y = 0; x < 18; x++) { + A = 0; + for (z = 0; z < 4; z++) { + A = (A << 8) | ((ulong32)key[y++] & 255); + if (y == (ulong32)keylen) { + y = 0; + } + } + skey->blowfish.K[x] = ORIG_P[x] ^ A; } -} -static ulong32 s_blowfish_stream2word(const unsigned char *d, int dlen, int *cur) -{ - unsigned int z; - int y = *cur; - ulong32 ret = 0; - - for (z = 0; z < 4; z++) { - ret = (ret << 8) | ((ulong32)d[y++] & 255); - if (y == dlen) { - y = 0; + /* copy sboxes */ + for (x = 0; x < 4; x++) { + for (y = 0; y < 256; y++) { + skey->blowfish.S[x][y] = ORIG_S[x][y]; } } - *cur = y; - return ret; -} - - /** - Expand the Blowfish internal state - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param data The additional data you wish to pass (can be NULL) - @param datalen The additional data length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ -int blowfish_expand(const unsigned char *key, int keylen, - const unsigned char *data, int datalen, - symmetric_key *skey) -{ - ulong32 x, y, A, B[2]; - int i; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - - /* load in key bytes (Supplied by David Hopwood) */ - i = 0; - for (x = 0; x < 18; x++) { - A = s_blowfish_stream2word(key, keylen, &i); - skey->blowfish.K[x] ^= A; + /* encrypt K array */ + for (x = 0; x < 8; x++) { + B[x] = 0; } - - - i = 0; - B[0] = 0; - B[1] = 0; + for (x = 0; x < 18; x += 2) { - if (data != NULL) { - B[0] ^= s_blowfish_stream2word(data, datalen, &i); - B[1] ^= s_blowfish_stream2word(data, datalen, &i); - } - /* encrypt it */ - s_blowfish_encipher(&B[0], &B[1], skey); - /* copy it */ - skey->blowfish.K[x] = B[0]; - skey->blowfish.K[x+1] = B[1]; + /* encrypt it */ + blowfish_ecb_encrypt(B, B, skey); + /* copy it */ + LOAD32H(skey->blowfish.K[x], &B[0]); + LOAD32H(skey->blowfish.K[x+1], &B[4]); } /* encrypt S array */ for (x = 0; x < 4; x++) { for (y = 0; y < 256; y += 2) { - if (data != NULL) { - B[0] ^= s_blowfish_stream2word(data, datalen, &i); - B[1] ^= s_blowfish_stream2word(data, datalen, &i); - } /* encrypt it */ - s_blowfish_encipher(&B[0], &B[1], skey); + blowfish_ecb_encrypt(B, B, skey); /* copy it */ - skey->blowfish.S[x][y] = B[0]; - skey->blowfish.S[x][y+1] = B[1]; + LOAD32H(skey->blowfish.S[x][y], &B[0]); + LOAD32H(skey->blowfish.S[x][y+1], &B[4]); } } -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK zeromem(B, sizeof(B)); #endif return CRYPT_OK; } -/** - Initialize the Blowfish block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful -*/ -int blowfish_setup(const unsigned char *key, int keylen, int num_rounds, - symmetric_key *skey) -{ - /* check key length */ - if (keylen < 8 || keylen > 72) { - return CRYPT_INVALID_KEYSIZE; - } - /* check rounds */ - if (num_rounds != 0 && num_rounds != 16) { - return CRYPT_INVALID_ROUNDS; - } - - return blowfish_setup_with_data(key, keylen, NULL, 0, skey); -} - -/** - Alternative initialize of the Blowfish block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param data The additional data you wish to pass (can be NULL) - @param datalen The additional data length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful -*/ - -int blowfish_setup_with_data(const unsigned char *key, int keylen, - const unsigned char *data, int datalen, - symmetric_key *skey) -{ - XMEMCPY(skey->blowfish.K, ORIG_P, sizeof(ORIG_P)); - XMEMCPY(skey->blowfish.S, ORIG_S, sizeof(ORIG_S)); - return blowfish_expand(key, keylen, data, datalen, skey); -} - -/** - Encrypts a block of text with Blowfish - @param pt The input plaintext (8 bytes) - @param ct The output ciphertext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -#ifdef LTC_CLEAN_STACK -static int s_blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +#ifndef __GNUC__ +#define F(x) ((S1[byte(x,3)] + S2[byte(x,2)]) ^ S3[byte(x,1)]) + S4[byte(x,0)] #else -int blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -#endif -{ - ulong32 L, R; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - /* load it */ - LOAD32H(L, &pt[0]); - LOAD32H(R, &pt[4]); - - s_blowfish_encipher(&L, &R, skey); - - /* store */ - STORE32H(L, &ct[0]); - STORE32H(R, &ct[4]); - - return CRYPT_OK; -} - -#ifdef LTC_CLEAN_STACK -int blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - int err = s_blowfish_ecb_encrypt(pt, ct, skey); - burn_stack(sizeof(ulong32) * 2 + sizeof(int)); - return err; -} +#define F(x) ((key->blowfish.S[0][byte(x,3)] + key->blowfish.S[1][byte(x,2)]) ^ key->blowfish.S[2][byte(x,1)]) + key->blowfish.S[3][byte(x,0)] #endif -/** - Decrypts a block of text with Blowfish - @param ct The input ciphertext (8 bytes) - @param pt The output plaintext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -#ifdef LTC_CLEAN_STACK -static int s_blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +#ifdef CLEAN_STACK +static void _blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) #else -int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +void blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) #endif { ulong32 L, R; int r; #ifndef __GNUC__ - const ulong32 *S1, *S2, *S3, *S4; + ulong32 *S1, *S2, *S3, *S4; #endif - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(key != NULL); #ifndef __GNUC__ - S1 = skey->blowfish.S[0]; - S2 = skey->blowfish.S[1]; - S3 = skey->blowfish.S[2]; - S4 = skey->blowfish.S[3]; + S1 = key->blowfish.S[0]; + S2 = key->blowfish.S[1]; + S3 = key->blowfish.S[2]; + S4 = key->blowfish.S[3]; +#endif + + /* load it */ + LOAD32H(L, &pt[0]); + LOAD32H(R, &pt[4]); + + /* do 16 rounds */ + for (r = 0; r < 16; ) { + L ^= key->blowfish.K[r++]; R ^= F(L); + R ^= key->blowfish.K[r++]; L ^= F(R); + L ^= key->blowfish.K[r++]; R ^= F(L); + R ^= key->blowfish.K[r++]; L ^= F(R); + } + + /* last keying */ + R ^= key->blowfish.K[17]; + L ^= key->blowfish.K[16]; + + /* store */ + STORE32H(R, &ct[0]); + STORE32H(L, &ct[4]); +} + +#ifdef CLEAN_STACK +void blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) +{ + _blowfish_ecb_encrypt(pt, ct, key); + burn_stack(sizeof(ulong32) * 2 + sizeof(int)); +} +#endif + +#ifdef CLEAN_STACK +static void _blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) +#else +void blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) +#endif +{ + ulong32 L, R; + int r; +#ifndef __GNUC__ + ulong32 *S1, *S2, *S3, *S4; +#endif + + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(key != NULL); + +#ifndef __GNUC__ + S1 = key->blowfish.S[0]; + S2 = key->blowfish.S[1]; + S3 = key->blowfish.S[2]; + S4 = key->blowfish.S[3]; #endif /* load it */ @@ -540,42 +446,36 @@ int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symme LOAD32H(L, &ct[4]); /* undo last keying */ - R ^= skey->blowfish.K[17]; - L ^= skey->blowfish.K[16]; + R ^= key->blowfish.K[17]; + L ^= key->blowfish.K[16]; /* do 16 rounds */ for (r = 15; r > 0; ) { - L ^= F(R); R ^= skey->blowfish.K[r--]; - R ^= F(L); L ^= skey->blowfish.K[r--]; - L ^= F(R); R ^= skey->blowfish.K[r--]; - R ^= F(L); L ^= skey->blowfish.K[r--]; + L ^= F(R); R ^= key->blowfish.K[r--]; + R ^= F(L); L ^= key->blowfish.K[r--]; + L ^= F(R); R ^= key->blowfish.K[r--]; + R ^= F(L); L ^= key->blowfish.K[r--]; } /* store */ STORE32H(L, &pt[0]); STORE32H(R, &pt[4]); - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +#ifdef CLEAN_STACK +void blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) { - int err = s_blowfish_ecb_decrypt(ct, pt, skey); + _blowfish_ecb_decrypt(ct, pt, key); burn_stack(sizeof(ulong32) * 2 + sizeof(int)); - return err; } #endif -/** - Performs a self-test of the Blowfish block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ int blowfish_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else int err; symmetric_key key; static const struct { @@ -611,8 +511,7 @@ int blowfish_test(void) blowfish_ecb_decrypt(tmp[0], tmp[1], &key); /* compare */ - if ((ltc_compare_testvector(tmp[0], 8, tests[x].ct, 8, "Blowfish Encrypt", x) != 0) || - (ltc_compare_testvector(tmp[1], 8, tests[x].pt, 8, "Blowfish Decrypt", x) != 0)) { + if ((memcmp(tmp[0], tests[x].ct, 8) != 0) || (memcmp(tmp[1], tests[x].pt, 8) != 0)) { return CRYPT_FAIL_TESTVECTOR; } @@ -622,39 +521,21 @@ int blowfish_test(void) for (y = 0; y < 1000; y++) blowfish_ecb_decrypt(tmp[0], tmp[0], &key); for (y = 0; y < 8; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; } - - return CRYPT_OK; #endif } -/** Terminate the context - @param skey The scheduled key -*/ -void blowfish_done(symmetric_key *skey) +int blowfish_keysize(int *desired_keysize) { - LTC_UNUSED_PARAM(skey); -} + _ARGCHK(desired_keysize != NULL); -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int blowfish_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - - if (*keysize < 8) { + if (*desired_keysize < 8) { return CRYPT_INVALID_KEYSIZE; - } - if (*keysize > 72) { - *keysize = 72; + } else if (*desired_keysize > 56) { + *desired_keysize = 56; } return CRYPT_OK; } -#undef F - #endif diff --git a/burn_stack.c b/burn_stack.c new file mode 100644 index 00000000..17b13911 --- /dev/null +++ b/burn_stack.c @@ -0,0 +1,21 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +void burn_stack(unsigned long len) +{ + unsigned char buf[32]; + zeromem(buf, sizeof(buf)); + if (len > (unsigned long)sizeof(buf)) + burn_stack(len - sizeof(buf)); +} + + diff --git a/src/ciphers/cast5.c b/cast5.c similarity index 70% rename from src/ciphers/cast5.c rename to cast5.c index d93f6b6b..dcb78abe 100644 --- a/src/ciphers/cast5.c +++ b/cast5.c @@ -1,15 +1,19 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - - /** - @file cast5.c - Implementation of LTC_CAST5 (RFC 2144) by Tom St Denis +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org */ -#include "tomcrypt_private.h" +/* Implementation of CAST5 (RFC 2144) by Tom St Denis */ +#include "mycrypt.h" -#ifdef LTC_CAST5 +#ifdef CAST5 -const struct ltc_cipher_descriptor cast5_desc = { +const struct _cipher_descriptor cast5_desc = { "cast5", 15, 5, 16, 8, 16, @@ -17,388 +21,378 @@ const struct ltc_cipher_descriptor cast5_desc = { &cast5_ecb_encrypt, &cast5_ecb_decrypt, &cast5_test, - &cast5_done, - &cast5_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + &cast5_keysize }; static const ulong32 S1[256] = { -0x30fb40d4UL, 0x9fa0ff0bUL, 0x6beccd2fUL, 0x3f258c7aUL, 0x1e213f2fUL, 0x9c004dd3UL, -0x6003e540UL, 0xcf9fc949UL, 0xbfd4af27UL, 0x88bbbdb5UL, 0xe2034090UL, 0x98d09675UL, -0x6e63a0e0UL, 0x15c361d2UL, 0xc2e7661dUL, 0x22d4ff8eUL, 0x28683b6fUL, 0xc07fd059UL, -0xff2379c8UL, 0x775f50e2UL, 0x43c340d3UL, 0xdf2f8656UL, 0x887ca41aUL, 0xa2d2bd2dUL, -0xa1c9e0d6UL, 0x346c4819UL, 0x61b76d87UL, 0x22540f2fUL, 0x2abe32e1UL, 0xaa54166bUL, -0x22568e3aUL, 0xa2d341d0UL, 0x66db40c8UL, 0xa784392fUL, 0x004dff2fUL, 0x2db9d2deUL, -0x97943facUL, 0x4a97c1d8UL, 0x527644b7UL, 0xb5f437a7UL, 0xb82cbaefUL, 0xd751d159UL, -0x6ff7f0edUL, 0x5a097a1fUL, 0x827b68d0UL, 0x90ecf52eUL, 0x22b0c054UL, 0xbc8e5935UL, -0x4b6d2f7fUL, 0x50bb64a2UL, 0xd2664910UL, 0xbee5812dUL, 0xb7332290UL, 0xe93b159fUL, -0xb48ee411UL, 0x4bff345dUL, 0xfd45c240UL, 0xad31973fUL, 0xc4f6d02eUL, 0x55fc8165UL, -0xd5b1caadUL, 0xa1ac2daeUL, 0xa2d4b76dUL, 0xc19b0c50UL, 0x882240f2UL, 0x0c6e4f38UL, -0xa4e4bfd7UL, 0x4f5ba272UL, 0x564c1d2fUL, 0xc59c5319UL, 0xb949e354UL, 0xb04669feUL, -0xb1b6ab8aUL, 0xc71358ddUL, 0x6385c545UL, 0x110f935dUL, 0x57538ad5UL, 0x6a390493UL, -0xe63d37e0UL, 0x2a54f6b3UL, 0x3a787d5fUL, 0x6276a0b5UL, 0x19a6fcdfUL, 0x7a42206aUL, -0x29f9d4d5UL, 0xf61b1891UL, 0xbb72275eUL, 0xaa508167UL, 0x38901091UL, 0xc6b505ebUL, -0x84c7cb8cUL, 0x2ad75a0fUL, 0x874a1427UL, 0xa2d1936bUL, 0x2ad286afUL, 0xaa56d291UL, -0xd7894360UL, 0x425c750dUL, 0x93b39e26UL, 0x187184c9UL, 0x6c00b32dUL, 0x73e2bb14UL, -0xa0bebc3cUL, 0x54623779UL, 0x64459eabUL, 0x3f328b82UL, 0x7718cf82UL, 0x59a2cea6UL, -0x04ee002eUL, 0x89fe78e6UL, 0x3fab0950UL, 0x325ff6c2UL, 0x81383f05UL, 0x6963c5c8UL, -0x76cb5ad6UL, 0xd49974c9UL, 0xca180dcfUL, 0x380782d5UL, 0xc7fa5cf6UL, 0x8ac31511UL, -0x35e79e13UL, 0x47da91d0UL, 0xf40f9086UL, 0xa7e2419eUL, 0x31366241UL, 0x051ef495UL, -0xaa573b04UL, 0x4a805d8dUL, 0x548300d0UL, 0x00322a3cUL, 0xbf64cddfUL, 0xba57a68eUL, -0x75c6372bUL, 0x50afd341UL, 0xa7c13275UL, 0x915a0bf5UL, 0x6b54bfabUL, 0x2b0b1426UL, -0xab4cc9d7UL, 0x449ccd82UL, 0xf7fbf265UL, 0xab85c5f3UL, 0x1b55db94UL, 0xaad4e324UL, -0xcfa4bd3fUL, 0x2deaa3e2UL, 0x9e204d02UL, 0xc8bd25acUL, 0xeadf55b3UL, 0xd5bd9e98UL, -0xe31231b2UL, 0x2ad5ad6cUL, 0x954329deUL, 0xadbe4528UL, 0xd8710f69UL, 0xaa51c90fUL, -0xaa786bf6UL, 0x22513f1eUL, 0xaa51a79bUL, 0x2ad344ccUL, 0x7b5a41f0UL, 0xd37cfbadUL, -0x1b069505UL, 0x41ece491UL, 0xb4c332e6UL, 0x032268d4UL, 0xc9600accUL, 0xce387e6dUL, -0xbf6bb16cUL, 0x6a70fb78UL, 0x0d03d9c9UL, 0xd4df39deUL, 0xe01063daUL, 0x4736f464UL, -0x5ad328d8UL, 0xb347cc96UL, 0x75bb0fc3UL, 0x98511bfbUL, 0x4ffbcc35UL, 0xb58bcf6aUL, -0xe11f0abcUL, 0xbfc5fe4aUL, 0xa70aec10UL, 0xac39570aUL, 0x3f04442fUL, 0x6188b153UL, -0xe0397a2eUL, 0x5727cb79UL, 0x9ceb418fUL, 0x1cacd68dUL, 0x2ad37c96UL, 0x0175cb9dUL, -0xc69dff09UL, 0xc75b65f0UL, 0xd9db40d8UL, 0xec0e7779UL, 0x4744ead4UL, 0xb11c3274UL, -0xdd24cb9eUL, 0x7e1c54bdUL, 0xf01144f9UL, 0xd2240eb1UL, 0x9675b3fdUL, 0xa3ac3755UL, -0xd47c27afUL, 0x51c85f4dUL, 0x56907596UL, 0xa5bb15e6UL, 0x580304f0UL, 0xca042cf1UL, -0x011a37eaUL, 0x8dbfaadbUL, 0x35ba3e4aUL, 0x3526ffa0UL, 0xc37b4d09UL, 0xbc306ed9UL, -0x98a52666UL, 0x5648f725UL, 0xff5e569dUL, 0x0ced63d0UL, 0x7c63b2cfUL, 0x700b45e1UL, -0xd5ea50f1UL, 0x85a92872UL, 0xaf1fbda7UL, 0xd4234870UL, 0xa7870bf3UL, 0x2d3b4d79UL, -0x42e04198UL, 0x0cd0ede7UL, 0x26470db8UL, 0xf881814cUL, 0x474d6ad7UL, 0x7c0c5e5cUL, -0xd1231959UL, 0x381b7298UL, 0xf5d2f4dbUL, 0xab838653UL, 0x6e2f1e23UL, 0x83719c9eUL, -0xbd91e046UL, 0x9a56456eUL, 0xdc39200cUL, 0x20c8c571UL, 0x962bda1cUL, 0xe1e696ffUL, -0xb141ab08UL, 0x7cca89b9UL, 0x1a69e783UL, 0x02cc4843UL, 0xa2f7c579UL, 0x429ef47dUL, +0x30fb40d4UL, 0x9fa0ff0bUL, 0x6beccd2fUL, 0x3f258c7aUL, 0x1e213f2fUL, 0x9c004dd3UL, +0x6003e540UL, 0xcf9fc949UL, 0xbfd4af27UL, 0x88bbbdb5UL, 0xe2034090UL, 0x98d09675UL, +0x6e63a0e0UL, 0x15c361d2UL, 0xc2e7661dUL, 0x22d4ff8eUL, 0x28683b6fUL, 0xc07fd059UL, +0xff2379c8UL, 0x775f50e2UL, 0x43c340d3UL, 0xdf2f8656UL, 0x887ca41aUL, 0xa2d2bd2dUL, +0xa1c9e0d6UL, 0x346c4819UL, 0x61b76d87UL, 0x22540f2fUL, 0x2abe32e1UL, 0xaa54166bUL, +0x22568e3aUL, 0xa2d341d0UL, 0x66db40c8UL, 0xa784392fUL, 0x004dff2fUL, 0x2db9d2deUL, +0x97943facUL, 0x4a97c1d8UL, 0x527644b7UL, 0xb5f437a7UL, 0xb82cbaefUL, 0xd751d159UL, +0x6ff7f0edUL, 0x5a097a1fUL, 0x827b68d0UL, 0x90ecf52eUL, 0x22b0c054UL, 0xbc8e5935UL, +0x4b6d2f7fUL, 0x50bb64a2UL, 0xd2664910UL, 0xbee5812dUL, 0xb7332290UL, 0xe93b159fUL, +0xb48ee411UL, 0x4bff345dUL, 0xfd45c240UL, 0xad31973fUL, 0xc4f6d02eUL, 0x55fc8165UL, +0xd5b1caadUL, 0xa1ac2daeUL, 0xa2d4b76dUL, 0xc19b0c50UL, 0x882240f2UL, 0x0c6e4f38UL, +0xa4e4bfd7UL, 0x4f5ba272UL, 0x564c1d2fUL, 0xc59c5319UL, 0xb949e354UL, 0xb04669feUL, +0xb1b6ab8aUL, 0xc71358ddUL, 0x6385c545UL, 0x110f935dUL, 0x57538ad5UL, 0x6a390493UL, +0xe63d37e0UL, 0x2a54f6b3UL, 0x3a787d5fUL, 0x6276a0b5UL, 0x19a6fcdfUL, 0x7a42206aUL, +0x29f9d4d5UL, 0xf61b1891UL, 0xbb72275eUL, 0xaa508167UL, 0x38901091UL, 0xc6b505ebUL, +0x84c7cb8cUL, 0x2ad75a0fUL, 0x874a1427UL, 0xa2d1936bUL, 0x2ad286afUL, 0xaa56d291UL, +0xd7894360UL, 0x425c750dUL, 0x93b39e26UL, 0x187184c9UL, 0x6c00b32dUL, 0x73e2bb14UL, +0xa0bebc3cUL, 0x54623779UL, 0x64459eabUL, 0x3f328b82UL, 0x7718cf82UL, 0x59a2cea6UL, +0x04ee002eUL, 0x89fe78e6UL, 0x3fab0950UL, 0x325ff6c2UL, 0x81383f05UL, 0x6963c5c8UL, +0x76cb5ad6UL, 0xd49974c9UL, 0xca180dcfUL, 0x380782d5UL, 0xc7fa5cf6UL, 0x8ac31511UL, +0x35e79e13UL, 0x47da91d0UL, 0xf40f9086UL, 0xa7e2419eUL, 0x31366241UL, 0x051ef495UL, +0xaa573b04UL, 0x4a805d8dUL, 0x548300d0UL, 0x00322a3cUL, 0xbf64cddfUL, 0xba57a68eUL, +0x75c6372bUL, 0x50afd341UL, 0xa7c13275UL, 0x915a0bf5UL, 0x6b54bfabUL, 0x2b0b1426UL, +0xab4cc9d7UL, 0x449ccd82UL, 0xf7fbf265UL, 0xab85c5f3UL, 0x1b55db94UL, 0xaad4e324UL, +0xcfa4bd3fUL, 0x2deaa3e2UL, 0x9e204d02UL, 0xc8bd25acUL, 0xeadf55b3UL, 0xd5bd9e98UL, +0xe31231b2UL, 0x2ad5ad6cUL, 0x954329deUL, 0xadbe4528UL, 0xd8710f69UL, 0xaa51c90fUL, +0xaa786bf6UL, 0x22513f1eUL, 0xaa51a79bUL, 0x2ad344ccUL, 0x7b5a41f0UL, 0xd37cfbadUL, +0x1b069505UL, 0x41ece491UL, 0xb4c332e6UL, 0x032268d4UL, 0xc9600accUL, 0xce387e6dUL, +0xbf6bb16cUL, 0x6a70fb78UL, 0x0d03d9c9UL, 0xd4df39deUL, 0xe01063daUL, 0x4736f464UL, +0x5ad328d8UL, 0xb347cc96UL, 0x75bb0fc3UL, 0x98511bfbUL, 0x4ffbcc35UL, 0xb58bcf6aUL, +0xe11f0abcUL, 0xbfc5fe4aUL, 0xa70aec10UL, 0xac39570aUL, 0x3f04442fUL, 0x6188b153UL, +0xe0397a2eUL, 0x5727cb79UL, 0x9ceb418fUL, 0x1cacd68dUL, 0x2ad37c96UL, 0x0175cb9dUL, +0xc69dff09UL, 0xc75b65f0UL, 0xd9db40d8UL, 0xec0e7779UL, 0x4744ead4UL, 0xb11c3274UL, +0xdd24cb9eUL, 0x7e1c54bdUL, 0xf01144f9UL, 0xd2240eb1UL, 0x9675b3fdUL, 0xa3ac3755UL, +0xd47c27afUL, 0x51c85f4dUL, 0x56907596UL, 0xa5bb15e6UL, 0x580304f0UL, 0xca042cf1UL, +0x011a37eaUL, 0x8dbfaadbUL, 0x35ba3e4aUL, 0x3526ffa0UL, 0xc37b4d09UL, 0xbc306ed9UL, +0x98a52666UL, 0x5648f725UL, 0xff5e569dUL, 0x0ced63d0UL, 0x7c63b2cfUL, 0x700b45e1UL, +0xd5ea50f1UL, 0x85a92872UL, 0xaf1fbda7UL, 0xd4234870UL, 0xa7870bf3UL, 0x2d3b4d79UL, +0x42e04198UL, 0x0cd0ede7UL, 0x26470db8UL, 0xf881814cUL, 0x474d6ad7UL, 0x7c0c5e5cUL, +0xd1231959UL, 0x381b7298UL, 0xf5d2f4dbUL, 0xab838653UL, 0x6e2f1e23UL, 0x83719c9eUL, +0xbd91e046UL, 0x9a56456eUL, 0xdc39200cUL, 0x20c8c571UL, 0x962bda1cUL, 0xe1e696ffUL, +0xb141ab08UL, 0x7cca89b9UL, 0x1a69e783UL, 0x02cc4843UL, 0xa2f7c579UL, 0x429ef47dUL, 0x427b169cUL, 0x5ac9f049UL, 0xdd8f0f00UL, 0x5c8165bfUL}; static const ulong32 S2[256] = { -0x1f201094UL, 0xef0ba75bUL, 0x69e3cf7eUL, 0x393f4380UL, 0xfe61cf7aUL, 0xeec5207aUL, -0x55889c94UL, 0x72fc0651UL, 0xada7ef79UL, 0x4e1d7235UL, 0xd55a63ceUL, 0xde0436baUL, -0x99c430efUL, 0x5f0c0794UL, 0x18dcdb7dUL, 0xa1d6eff3UL, 0xa0b52f7bUL, 0x59e83605UL, -0xee15b094UL, 0xe9ffd909UL, 0xdc440086UL, 0xef944459UL, 0xba83ccb3UL, 0xe0c3cdfbUL, -0xd1da4181UL, 0x3b092ab1UL, 0xf997f1c1UL, 0xa5e6cf7bUL, 0x01420ddbUL, 0xe4e7ef5bUL, -0x25a1ff41UL, 0xe180f806UL, 0x1fc41080UL, 0x179bee7aUL, 0xd37ac6a9UL, 0xfe5830a4UL, -0x98de8b7fUL, 0x77e83f4eUL, 0x79929269UL, 0x24fa9f7bUL, 0xe113c85bUL, 0xacc40083UL, -0xd7503525UL, 0xf7ea615fUL, 0x62143154UL, 0x0d554b63UL, 0x5d681121UL, 0xc866c359UL, -0x3d63cf73UL, 0xcee234c0UL, 0xd4d87e87UL, 0x5c672b21UL, 0x071f6181UL, 0x39f7627fUL, -0x361e3084UL, 0xe4eb573bUL, 0x602f64a4UL, 0xd63acd9cUL, 0x1bbc4635UL, 0x9e81032dUL, -0x2701f50cUL, 0x99847ab4UL, 0xa0e3df79UL, 0xba6cf38cUL, 0x10843094UL, 0x2537a95eUL, -0xf46f6ffeUL, 0xa1ff3b1fUL, 0x208cfb6aUL, 0x8f458c74UL, 0xd9e0a227UL, 0x4ec73a34UL, -0xfc884f69UL, 0x3e4de8dfUL, 0xef0e0088UL, 0x3559648dUL, 0x8a45388cUL, 0x1d804366UL, -0x721d9bfdUL, 0xa58684bbUL, 0xe8256333UL, 0x844e8212UL, 0x128d8098UL, 0xfed33fb4UL, -0xce280ae1UL, 0x27e19ba5UL, 0xd5a6c252UL, 0xe49754bdUL, 0xc5d655ddUL, 0xeb667064UL, -0x77840b4dUL, 0xa1b6a801UL, 0x84db26a9UL, 0xe0b56714UL, 0x21f043b7UL, 0xe5d05860UL, -0x54f03084UL, 0x066ff472UL, 0xa31aa153UL, 0xdadc4755UL, 0xb5625dbfUL, 0x68561be6UL, -0x83ca6b94UL, 0x2d6ed23bUL, 0xeccf01dbUL, 0xa6d3d0baUL, 0xb6803d5cUL, 0xaf77a709UL, -0x33b4a34cUL, 0x397bc8d6UL, 0x5ee22b95UL, 0x5f0e5304UL, 0x81ed6f61UL, 0x20e74364UL, -0xb45e1378UL, 0xde18639bUL, 0x881ca122UL, 0xb96726d1UL, 0x8049a7e8UL, 0x22b7da7bUL, -0x5e552d25UL, 0x5272d237UL, 0x79d2951cUL, 0xc60d894cUL, 0x488cb402UL, 0x1ba4fe5bUL, -0xa4b09f6bUL, 0x1ca815cfUL, 0xa20c3005UL, 0x8871df63UL, 0xb9de2fcbUL, 0x0cc6c9e9UL, -0x0beeff53UL, 0xe3214517UL, 0xb4542835UL, 0x9f63293cUL, 0xee41e729UL, 0x6e1d2d7cUL, -0x50045286UL, 0x1e6685f3UL, 0xf33401c6UL, 0x30a22c95UL, 0x31a70850UL, 0x60930f13UL, -0x73f98417UL, 0xa1269859UL, 0xec645c44UL, 0x52c877a9UL, 0xcdff33a6UL, 0xa02b1741UL, -0x7cbad9a2UL, 0x2180036fUL, 0x50d99c08UL, 0xcb3f4861UL, 0xc26bd765UL, 0x64a3f6abUL, -0x80342676UL, 0x25a75e7bUL, 0xe4e6d1fcUL, 0x20c710e6UL, 0xcdf0b680UL, 0x17844d3bUL, -0x31eef84dUL, 0x7e0824e4UL, 0x2ccb49ebUL, 0x846a3baeUL, 0x8ff77888UL, 0xee5d60f6UL, -0x7af75673UL, 0x2fdd5cdbUL, 0xa11631c1UL, 0x30f66f43UL, 0xb3faec54UL, 0x157fd7faUL, -0xef8579ccUL, 0xd152de58UL, 0xdb2ffd5eUL, 0x8f32ce19UL, 0x306af97aUL, 0x02f03ef8UL, -0x99319ad5UL, 0xc242fa0fUL, 0xa7e3ebb0UL, 0xc68e4906UL, 0xb8da230cUL, 0x80823028UL, -0xdcdef3c8UL, 0xd35fb171UL, 0x088a1bc8UL, 0xbec0c560UL, 0x61a3c9e8UL, 0xbca8f54dUL, -0xc72feffaUL, 0x22822e99UL, 0x82c570b4UL, 0xd8d94e89UL, 0x8b1c34bcUL, 0x301e16e6UL, -0x273be979UL, 0xb0ffeaa6UL, 0x61d9b8c6UL, 0x00b24869UL, 0xb7ffce3fUL, 0x08dc283bUL, -0x43daf65aUL, 0xf7e19798UL, 0x7619b72fUL, 0x8f1c9ba4UL, 0xdc8637a0UL, 0x16a7d3b1UL, -0x9fc393b7UL, 0xa7136eebUL, 0xc6bcc63eUL, 0x1a513742UL, 0xef6828bcUL, 0x520365d6UL, -0x2d6a77abUL, 0x3527ed4bUL, 0x821fd216UL, 0x095c6e2eUL, 0xdb92f2fbUL, 0x5eea29cbUL, -0x145892f5UL, 0x91584f7fUL, 0x5483697bUL, 0x2667a8ccUL, 0x85196048UL, 0x8c4baceaUL, -0x833860d4UL, 0x0d23e0f9UL, 0x6c387e8aUL, 0x0ae6d249UL, 0xb284600cUL, 0xd835731dUL, -0xdcb1c647UL, 0xac4c56eaUL, 0x3ebd81b3UL, 0x230eabb0UL, 0x6438bc87UL, 0xf0b5b1faUL, -0x8f5ea2b3UL, 0xfc184642UL, 0x0a036b7aUL, 0x4fb089bdUL, 0x649da589UL, 0xa345415eUL, -0x5c038323UL, 0x3e5d3bb9UL, 0x43d79572UL, 0x7e6dd07cUL, 0x06dfdf1eUL, 0x6c6cc4efUL, +0x1f201094UL, 0xef0ba75bUL, 0x69e3cf7eUL, 0x393f4380UL, 0xfe61cf7aUL, 0xeec5207aUL, +0x55889c94UL, 0x72fc0651UL, 0xada7ef79UL, 0x4e1d7235UL, 0xd55a63ceUL, 0xde0436baUL, +0x99c430efUL, 0x5f0c0794UL, 0x18dcdb7dUL, 0xa1d6eff3UL, 0xa0b52f7bUL, 0x59e83605UL, +0xee15b094UL, 0xe9ffd909UL, 0xdc440086UL, 0xef944459UL, 0xba83ccb3UL, 0xe0c3cdfbUL, +0xd1da4181UL, 0x3b092ab1UL, 0xf997f1c1UL, 0xa5e6cf7bUL, 0x01420ddbUL, 0xe4e7ef5bUL, +0x25a1ff41UL, 0xe180f806UL, 0x1fc41080UL, 0x179bee7aUL, 0xd37ac6a9UL, 0xfe5830a4UL, +0x98de8b7fUL, 0x77e83f4eUL, 0x79929269UL, 0x24fa9f7bUL, 0xe113c85bUL, 0xacc40083UL, +0xd7503525UL, 0xf7ea615fUL, 0x62143154UL, 0x0d554b63UL, 0x5d681121UL, 0xc866c359UL, +0x3d63cf73UL, 0xcee234c0UL, 0xd4d87e87UL, 0x5c672b21UL, 0x071f6181UL, 0x39f7627fUL, +0x361e3084UL, 0xe4eb573bUL, 0x602f64a4UL, 0xd63acd9cUL, 0x1bbc4635UL, 0x9e81032dUL, +0x2701f50cUL, 0x99847ab4UL, 0xa0e3df79UL, 0xba6cf38cUL, 0x10843094UL, 0x2537a95eUL, +0xf46f6ffeUL, 0xa1ff3b1fUL, 0x208cfb6aUL, 0x8f458c74UL, 0xd9e0a227UL, 0x4ec73a34UL, +0xfc884f69UL, 0x3e4de8dfUL, 0xef0e0088UL, 0x3559648dUL, 0x8a45388cUL, 0x1d804366UL, +0x721d9bfdUL, 0xa58684bbUL, 0xe8256333UL, 0x844e8212UL, 0x128d8098UL, 0xfed33fb4UL, +0xce280ae1UL, 0x27e19ba5UL, 0xd5a6c252UL, 0xe49754bdUL, 0xc5d655ddUL, 0xeb667064UL, +0x77840b4dUL, 0xa1b6a801UL, 0x84db26a9UL, 0xe0b56714UL, 0x21f043b7UL, 0xe5d05860UL, +0x54f03084UL, 0x066ff472UL, 0xa31aa153UL, 0xdadc4755UL, 0xb5625dbfUL, 0x68561be6UL, +0x83ca6b94UL, 0x2d6ed23bUL, 0xeccf01dbUL, 0xa6d3d0baUL, 0xb6803d5cUL, 0xaf77a709UL, +0x33b4a34cUL, 0x397bc8d6UL, 0x5ee22b95UL, 0x5f0e5304UL, 0x81ed6f61UL, 0x20e74364UL, +0xb45e1378UL, 0xde18639bUL, 0x881ca122UL, 0xb96726d1UL, 0x8049a7e8UL, 0x22b7da7bUL, +0x5e552d25UL, 0x5272d237UL, 0x79d2951cUL, 0xc60d894cUL, 0x488cb402UL, 0x1ba4fe5bUL, +0xa4b09f6bUL, 0x1ca815cfUL, 0xa20c3005UL, 0x8871df63UL, 0xb9de2fcbUL, 0x0cc6c9e9UL, +0x0beeff53UL, 0xe3214517UL, 0xb4542835UL, 0x9f63293cUL, 0xee41e729UL, 0x6e1d2d7cUL, +0x50045286UL, 0x1e6685f3UL, 0xf33401c6UL, 0x30a22c95UL, 0x31a70850UL, 0x60930f13UL, +0x73f98417UL, 0xa1269859UL, 0xec645c44UL, 0x52c877a9UL, 0xcdff33a6UL, 0xa02b1741UL, +0x7cbad9a2UL, 0x2180036fUL, 0x50d99c08UL, 0xcb3f4861UL, 0xc26bd765UL, 0x64a3f6abUL, +0x80342676UL, 0x25a75e7bUL, 0xe4e6d1fcUL, 0x20c710e6UL, 0xcdf0b680UL, 0x17844d3bUL, +0x31eef84dUL, 0x7e0824e4UL, 0x2ccb49ebUL, 0x846a3baeUL, 0x8ff77888UL, 0xee5d60f6UL, +0x7af75673UL, 0x2fdd5cdbUL, 0xa11631c1UL, 0x30f66f43UL, 0xb3faec54UL, 0x157fd7faUL, +0xef8579ccUL, 0xd152de58UL, 0xdb2ffd5eUL, 0x8f32ce19UL, 0x306af97aUL, 0x02f03ef8UL, +0x99319ad5UL, 0xc242fa0fUL, 0xa7e3ebb0UL, 0xc68e4906UL, 0xb8da230cUL, 0x80823028UL, +0xdcdef3c8UL, 0xd35fb171UL, 0x088a1bc8UL, 0xbec0c560UL, 0x61a3c9e8UL, 0xbca8f54dUL, +0xc72feffaUL, 0x22822e99UL, 0x82c570b4UL, 0xd8d94e89UL, 0x8b1c34bcUL, 0x301e16e6UL, +0x273be979UL, 0xb0ffeaa6UL, 0x61d9b8c6UL, 0x00b24869UL, 0xb7ffce3fUL, 0x08dc283bUL, +0x43daf65aUL, 0xf7e19798UL, 0x7619b72fUL, 0x8f1c9ba4UL, 0xdc8637a0UL, 0x16a7d3b1UL, +0x9fc393b7UL, 0xa7136eebUL, 0xc6bcc63eUL, 0x1a513742UL, 0xef6828bcUL, 0x520365d6UL, +0x2d6a77abUL, 0x3527ed4bUL, 0x821fd216UL, 0x095c6e2eUL, 0xdb92f2fbUL, 0x5eea29cbUL, +0x145892f5UL, 0x91584f7fUL, 0x5483697bUL, 0x2667a8ccUL, 0x85196048UL, 0x8c4baceaUL, +0x833860d4UL, 0x0d23e0f9UL, 0x6c387e8aUL, 0x0ae6d249UL, 0xb284600cUL, 0xd835731dUL, +0xdcb1c647UL, 0xac4c56eaUL, 0x3ebd81b3UL, 0x230eabb0UL, 0x6438bc87UL, 0xf0b5b1faUL, +0x8f5ea2b3UL, 0xfc184642UL, 0x0a036b7aUL, 0x4fb089bdUL, 0x649da589UL, 0xa345415eUL, +0x5c038323UL, 0x3e5d3bb9UL, 0x43d79572UL, 0x7e6dd07cUL, 0x06dfdf1eUL, 0x6c6cc4efUL, 0x7160a539UL, 0x73bfbe70UL, 0x83877605UL, 0x4523ecf1UL}; static const ulong32 S3[256] = { -0x8defc240UL, 0x25fa5d9fUL, 0xeb903dbfUL, 0xe810c907UL, 0x47607fffUL, 0x369fe44bUL, -0x8c1fc644UL, 0xaececa90UL, 0xbeb1f9bfUL, 0xeefbcaeaUL, 0xe8cf1950UL, 0x51df07aeUL, -0x920e8806UL, 0xf0ad0548UL, 0xe13c8d83UL, 0x927010d5UL, 0x11107d9fUL, 0x07647db9UL, -0xb2e3e4d4UL, 0x3d4f285eUL, 0xb9afa820UL, 0xfade82e0UL, 0xa067268bUL, 0x8272792eUL, -0x553fb2c0UL, 0x489ae22bUL, 0xd4ef9794UL, 0x125e3fbcUL, 0x21fffceeUL, 0x825b1bfdUL, -0x9255c5edUL, 0x1257a240UL, 0x4e1a8302UL, 0xbae07fffUL, 0x528246e7UL, 0x8e57140eUL, -0x3373f7bfUL, 0x8c9f8188UL, 0xa6fc4ee8UL, 0xc982b5a5UL, 0xa8c01db7UL, 0x579fc264UL, -0x67094f31UL, 0xf2bd3f5fUL, 0x40fff7c1UL, 0x1fb78dfcUL, 0x8e6bd2c1UL, 0x437be59bUL, -0x99b03dbfUL, 0xb5dbc64bUL, 0x638dc0e6UL, 0x55819d99UL, 0xa197c81cUL, 0x4a012d6eUL, -0xc5884a28UL, 0xccc36f71UL, 0xb843c213UL, 0x6c0743f1UL, 0x8309893cUL, 0x0feddd5fUL, -0x2f7fe850UL, 0xd7c07f7eUL, 0x02507fbfUL, 0x5afb9a04UL, 0xa747d2d0UL, 0x1651192eUL, -0xaf70bf3eUL, 0x58c31380UL, 0x5f98302eUL, 0x727cc3c4UL, 0x0a0fb402UL, 0x0f7fef82UL, -0x8c96fdadUL, 0x5d2c2aaeUL, 0x8ee99a49UL, 0x50da88b8UL, 0x8427f4a0UL, 0x1eac5790UL, -0x796fb449UL, 0x8252dc15UL, 0xefbd7d9bUL, 0xa672597dUL, 0xada840d8UL, 0x45f54504UL, -0xfa5d7403UL, 0xe83ec305UL, 0x4f91751aUL, 0x925669c2UL, 0x23efe941UL, 0xa903f12eUL, -0x60270df2UL, 0x0276e4b6UL, 0x94fd6574UL, 0x927985b2UL, 0x8276dbcbUL, 0x02778176UL, -0xf8af918dUL, 0x4e48f79eUL, 0x8f616ddfUL, 0xe29d840eUL, 0x842f7d83UL, 0x340ce5c8UL, -0x96bbb682UL, 0x93b4b148UL, 0xef303cabUL, 0x984faf28UL, 0x779faf9bUL, 0x92dc560dUL, -0x224d1e20UL, 0x8437aa88UL, 0x7d29dc96UL, 0x2756d3dcUL, 0x8b907ceeUL, 0xb51fd240UL, -0xe7c07ce3UL, 0xe566b4a1UL, 0xc3e9615eUL, 0x3cf8209dUL, 0x6094d1e3UL, 0xcd9ca341UL, -0x5c76460eUL, 0x00ea983bUL, 0xd4d67881UL, 0xfd47572cUL, 0xf76cedd9UL, 0xbda8229cUL, -0x127dadaaUL, 0x438a074eUL, 0x1f97c090UL, 0x081bdb8aUL, 0x93a07ebeUL, 0xb938ca15UL, -0x97b03cffUL, 0x3dc2c0f8UL, 0x8d1ab2ecUL, 0x64380e51UL, 0x68cc7bfbUL, 0xd90f2788UL, -0x12490181UL, 0x5de5ffd4UL, 0xdd7ef86aUL, 0x76a2e214UL, 0xb9a40368UL, 0x925d958fUL, -0x4b39fffaUL, 0xba39aee9UL, 0xa4ffd30bUL, 0xfaf7933bUL, 0x6d498623UL, 0x193cbcfaUL, -0x27627545UL, 0x825cf47aUL, 0x61bd8ba0UL, 0xd11e42d1UL, 0xcead04f4UL, 0x127ea392UL, -0x10428db7UL, 0x8272a972UL, 0x9270c4a8UL, 0x127de50bUL, 0x285ba1c8UL, 0x3c62f44fUL, -0x35c0eaa5UL, 0xe805d231UL, 0x428929fbUL, 0xb4fcdf82UL, 0x4fb66a53UL, 0x0e7dc15bUL, -0x1f081fabUL, 0x108618aeUL, 0xfcfd086dUL, 0xf9ff2889UL, 0x694bcc11UL, 0x236a5caeUL, -0x12deca4dUL, 0x2c3f8cc5UL, 0xd2d02dfeUL, 0xf8ef5896UL, 0xe4cf52daUL, 0x95155b67UL, -0x494a488cUL, 0xb9b6a80cUL, 0x5c8f82bcUL, 0x89d36b45UL, 0x3a609437UL, 0xec00c9a9UL, -0x44715253UL, 0x0a874b49UL, 0xd773bc40UL, 0x7c34671cUL, 0x02717ef6UL, 0x4feb5536UL, -0xa2d02fffUL, 0xd2bf60c4UL, 0xd43f03c0UL, 0x50b4ef6dUL, 0x07478cd1UL, 0x006e1888UL, -0xa2e53f55UL, 0xb9e6d4bcUL, 0xa2048016UL, 0x97573833UL, 0xd7207d67UL, 0xde0f8f3dUL, -0x72f87b33UL, 0xabcc4f33UL, 0x7688c55dUL, 0x7b00a6b0UL, 0x947b0001UL, 0x570075d2UL, -0xf9bb88f8UL, 0x8942019eUL, 0x4264a5ffUL, 0x856302e0UL, 0x72dbd92bUL, 0xee971b69UL, -0x6ea22fdeUL, 0x5f08ae2bUL, 0xaf7a616dUL, 0xe5c98767UL, 0xcf1febd2UL, 0x61efc8c2UL, -0xf1ac2571UL, 0xcc8239c2UL, 0x67214cb8UL, 0xb1e583d1UL, 0xb7dc3e62UL, 0x7f10bdceUL, -0xf90a5c38UL, 0x0ff0443dUL, 0x606e6dc6UL, 0x60543a49UL, 0x5727c148UL, 0x2be98a1dUL, -0x8ab41738UL, 0x20e1be24UL, 0xaf96da0fUL, 0x68458425UL, 0x99833be5UL, 0x600d457dUL, -0x282f9350UL, 0x8334b362UL, 0xd91d1120UL, 0x2b6d8da0UL, 0x642b1e31UL, 0x9c305a00UL, -0x52bce688UL, 0x1b03588aUL, 0xf7baefd5UL, 0x4142ed9cUL, 0xa4315c11UL, 0x83323ec5UL, +0x8defc240UL, 0x25fa5d9fUL, 0xeb903dbfUL, 0xe810c907UL, 0x47607fffUL, 0x369fe44bUL, +0x8c1fc644UL, 0xaececa90UL, 0xbeb1f9bfUL, 0xeefbcaeaUL, 0xe8cf1950UL, 0x51df07aeUL, +0x920e8806UL, 0xf0ad0548UL, 0xe13c8d83UL, 0x927010d5UL, 0x11107d9fUL, 0x07647db9UL, +0xb2e3e4d4UL, 0x3d4f285eUL, 0xb9afa820UL, 0xfade82e0UL, 0xa067268bUL, 0x8272792eUL, +0x553fb2c0UL, 0x489ae22bUL, 0xd4ef9794UL, 0x125e3fbcUL, 0x21fffceeUL, 0x825b1bfdUL, +0x9255c5edUL, 0x1257a240UL, 0x4e1a8302UL, 0xbae07fffUL, 0x528246e7UL, 0x8e57140eUL, +0x3373f7bfUL, 0x8c9f8188UL, 0xa6fc4ee8UL, 0xc982b5a5UL, 0xa8c01db7UL, 0x579fc264UL, +0x67094f31UL, 0xf2bd3f5fUL, 0x40fff7c1UL, 0x1fb78dfcUL, 0x8e6bd2c1UL, 0x437be59bUL, +0x99b03dbfUL, 0xb5dbc64bUL, 0x638dc0e6UL, 0x55819d99UL, 0xa197c81cUL, 0x4a012d6eUL, +0xc5884a28UL, 0xccc36f71UL, 0xb843c213UL, 0x6c0743f1UL, 0x8309893cUL, 0x0feddd5fUL, +0x2f7fe850UL, 0xd7c07f7eUL, 0x02507fbfUL, 0x5afb9a04UL, 0xa747d2d0UL, 0x1651192eUL, +0xaf70bf3eUL, 0x58c31380UL, 0x5f98302eUL, 0x727cc3c4UL, 0x0a0fb402UL, 0x0f7fef82UL, +0x8c96fdadUL, 0x5d2c2aaeUL, 0x8ee99a49UL, 0x50da88b8UL, 0x8427f4a0UL, 0x1eac5790UL, +0x796fb449UL, 0x8252dc15UL, 0xefbd7d9bUL, 0xa672597dUL, 0xada840d8UL, 0x45f54504UL, +0xfa5d7403UL, 0xe83ec305UL, 0x4f91751aUL, 0x925669c2UL, 0x23efe941UL, 0xa903f12eUL, +0x60270df2UL, 0x0276e4b6UL, 0x94fd6574UL, 0x927985b2UL, 0x8276dbcbUL, 0x02778176UL, +0xf8af918dUL, 0x4e48f79eUL, 0x8f616ddfUL, 0xe29d840eUL, 0x842f7d83UL, 0x340ce5c8UL, +0x96bbb682UL, 0x93b4b148UL, 0xef303cabUL, 0x984faf28UL, 0x779faf9bUL, 0x92dc560dUL, +0x224d1e20UL, 0x8437aa88UL, 0x7d29dc96UL, 0x2756d3dcUL, 0x8b907ceeUL, 0xb51fd240UL, +0xe7c07ce3UL, 0xe566b4a1UL, 0xc3e9615eUL, 0x3cf8209dUL, 0x6094d1e3UL, 0xcd9ca341UL, +0x5c76460eUL, 0x00ea983bUL, 0xd4d67881UL, 0xfd47572cUL, 0xf76cedd9UL, 0xbda8229cUL, +0x127dadaaUL, 0x438a074eUL, 0x1f97c090UL, 0x081bdb8aUL, 0x93a07ebeUL, 0xb938ca15UL, +0x97b03cffUL, 0x3dc2c0f8UL, 0x8d1ab2ecUL, 0x64380e51UL, 0x68cc7bfbUL, 0xd90f2788UL, +0x12490181UL, 0x5de5ffd4UL, 0xdd7ef86aUL, 0x76a2e214UL, 0xb9a40368UL, 0x925d958fUL, +0x4b39fffaUL, 0xba39aee9UL, 0xa4ffd30bUL, 0xfaf7933bUL, 0x6d498623UL, 0x193cbcfaUL, +0x27627545UL, 0x825cf47aUL, 0x61bd8ba0UL, 0xd11e42d1UL, 0xcead04f4UL, 0x127ea392UL, +0x10428db7UL, 0x8272a972UL, 0x9270c4a8UL, 0x127de50bUL, 0x285ba1c8UL, 0x3c62f44fUL, +0x35c0eaa5UL, 0xe805d231UL, 0x428929fbUL, 0xb4fcdf82UL, 0x4fb66a53UL, 0x0e7dc15bUL, +0x1f081fabUL, 0x108618aeUL, 0xfcfd086dUL, 0xf9ff2889UL, 0x694bcc11UL, 0x236a5caeUL, +0x12deca4dUL, 0x2c3f8cc5UL, 0xd2d02dfeUL, 0xf8ef5896UL, 0xe4cf52daUL, 0x95155b67UL, +0x494a488cUL, 0xb9b6a80cUL, 0x5c8f82bcUL, 0x89d36b45UL, 0x3a609437UL, 0xec00c9a9UL, +0x44715253UL, 0x0a874b49UL, 0xd773bc40UL, 0x7c34671cUL, 0x02717ef6UL, 0x4feb5536UL, +0xa2d02fffUL, 0xd2bf60c4UL, 0xd43f03c0UL, 0x50b4ef6dUL, 0x07478cd1UL, 0x006e1888UL, +0xa2e53f55UL, 0xb9e6d4bcUL, 0xa2048016UL, 0x97573833UL, 0xd7207d67UL, 0xde0f8f3dUL, +0x72f87b33UL, 0xabcc4f33UL, 0x7688c55dUL, 0x7b00a6b0UL, 0x947b0001UL, 0x570075d2UL, +0xf9bb88f8UL, 0x8942019eUL, 0x4264a5ffUL, 0x856302e0UL, 0x72dbd92bUL, 0xee971b69UL, +0x6ea22fdeUL, 0x5f08ae2bUL, 0xaf7a616dUL, 0xe5c98767UL, 0xcf1febd2UL, 0x61efc8c2UL, +0xf1ac2571UL, 0xcc8239c2UL, 0x67214cb8UL, 0xb1e583d1UL, 0xb7dc3e62UL, 0x7f10bdceUL, +0xf90a5c38UL, 0x0ff0443dUL, 0x606e6dc6UL, 0x60543a49UL, 0x5727c148UL, 0x2be98a1dUL, +0x8ab41738UL, 0x20e1be24UL, 0xaf96da0fUL, 0x68458425UL, 0x99833be5UL, 0x600d457dUL, +0x282f9350UL, 0x8334b362UL, 0xd91d1120UL, 0x2b6d8da0UL, 0x642b1e31UL, 0x9c305a00UL, +0x52bce688UL, 0x1b03588aUL, 0xf7baefd5UL, 0x4142ed9cUL, 0xa4315c11UL, 0x83323ec5UL, 0xdfef4636UL, 0xa133c501UL, 0xe9d3531cUL, 0xee353783UL}; static const ulong32 S4[256] = { -0x9db30420UL, 0x1fb6e9deUL, 0xa7be7befUL, 0xd273a298UL, 0x4a4f7bdbUL, 0x64ad8c57UL, -0x85510443UL, 0xfa020ed1UL, 0x7e287affUL, 0xe60fb663UL, 0x095f35a1UL, 0x79ebf120UL, -0xfd059d43UL, 0x6497b7b1UL, 0xf3641f63UL, 0x241e4adfUL, 0x28147f5fUL, 0x4fa2b8cdUL, -0xc9430040UL, 0x0cc32220UL, 0xfdd30b30UL, 0xc0a5374fUL, 0x1d2d00d9UL, 0x24147b15UL, -0xee4d111aUL, 0x0fca5167UL, 0x71ff904cUL, 0x2d195ffeUL, 0x1a05645fUL, 0x0c13fefeUL, -0x081b08caUL, 0x05170121UL, 0x80530100UL, 0xe83e5efeUL, 0xac9af4f8UL, 0x7fe72701UL, -0xd2b8ee5fUL, 0x06df4261UL, 0xbb9e9b8aUL, 0x7293ea25UL, 0xce84ffdfUL, 0xf5718801UL, -0x3dd64b04UL, 0xa26f263bUL, 0x7ed48400UL, 0x547eebe6UL, 0x446d4ca0UL, 0x6cf3d6f5UL, -0x2649abdfUL, 0xaea0c7f5UL, 0x36338cc1UL, 0x503f7e93UL, 0xd3772061UL, 0x11b638e1UL, -0x72500e03UL, 0xf80eb2bbUL, 0xabe0502eUL, 0xec8d77deUL, 0x57971e81UL, 0xe14f6746UL, -0xc9335400UL, 0x6920318fUL, 0x081dbb99UL, 0xffc304a5UL, 0x4d351805UL, 0x7f3d5ce3UL, -0xa6c866c6UL, 0x5d5bcca9UL, 0xdaec6feaUL, 0x9f926f91UL, 0x9f46222fUL, 0x3991467dUL, -0xa5bf6d8eUL, 0x1143c44fUL, 0x43958302UL, 0xd0214eebUL, 0x022083b8UL, 0x3fb6180cUL, -0x18f8931eUL, 0x281658e6UL, 0x26486e3eUL, 0x8bd78a70UL, 0x7477e4c1UL, 0xb506e07cUL, -0xf32d0a25UL, 0x79098b02UL, 0xe4eabb81UL, 0x28123b23UL, 0x69dead38UL, 0x1574ca16UL, -0xdf871b62UL, 0x211c40b7UL, 0xa51a9ef9UL, 0x0014377bUL, 0x041e8ac8UL, 0x09114003UL, -0xbd59e4d2UL, 0xe3d156d5UL, 0x4fe876d5UL, 0x2f91a340UL, 0x557be8deUL, 0x00eae4a7UL, -0x0ce5c2ecUL, 0x4db4bba6UL, 0xe756bdffUL, 0xdd3369acUL, 0xec17b035UL, 0x06572327UL, -0x99afc8b0UL, 0x56c8c391UL, 0x6b65811cUL, 0x5e146119UL, 0x6e85cb75UL, 0xbe07c002UL, -0xc2325577UL, 0x893ff4ecUL, 0x5bbfc92dUL, 0xd0ec3b25UL, 0xb7801ab7UL, 0x8d6d3b24UL, -0x20c763efUL, 0xc366a5fcUL, 0x9c382880UL, 0x0ace3205UL, 0xaac9548aUL, 0xeca1d7c7UL, -0x041afa32UL, 0x1d16625aUL, 0x6701902cUL, 0x9b757a54UL, 0x31d477f7UL, 0x9126b031UL, -0x36cc6fdbUL, 0xc70b8b46UL, 0xd9e66a48UL, 0x56e55a79UL, 0x026a4cebUL, 0x52437effUL, -0x2f8f76b4UL, 0x0df980a5UL, 0x8674cde3UL, 0xedda04ebUL, 0x17a9be04UL, 0x2c18f4dfUL, -0xb7747f9dUL, 0xab2af7b4UL, 0xefc34d20UL, 0x2e096b7cUL, 0x1741a254UL, 0xe5b6a035UL, -0x213d42f6UL, 0x2c1c7c26UL, 0x61c2f50fUL, 0x6552daf9UL, 0xd2c231f8UL, 0x25130f69UL, -0xd8167fa2UL, 0x0418f2c8UL, 0x001a96a6UL, 0x0d1526abUL, 0x63315c21UL, 0x5e0a72ecUL, -0x49bafefdUL, 0x187908d9UL, 0x8d0dbd86UL, 0x311170a7UL, 0x3e9b640cUL, 0xcc3e10d7UL, -0xd5cad3b6UL, 0x0caec388UL, 0xf73001e1UL, 0x6c728affUL, 0x71eae2a1UL, 0x1f9af36eUL, -0xcfcbd12fUL, 0xc1de8417UL, 0xac07be6bUL, 0xcb44a1d8UL, 0x8b9b0f56UL, 0x013988c3UL, -0xb1c52fcaUL, 0xb4be31cdUL, 0xd8782806UL, 0x12a3a4e2UL, 0x6f7de532UL, 0x58fd7eb6UL, -0xd01ee900UL, 0x24adffc2UL, 0xf4990fc5UL, 0x9711aac5UL, 0x001d7b95UL, 0x82e5e7d2UL, -0x109873f6UL, 0x00613096UL, 0xc32d9521UL, 0xada121ffUL, 0x29908415UL, 0x7fbb977fUL, -0xaf9eb3dbUL, 0x29c9ed2aUL, 0x5ce2a465UL, 0xa730f32cUL, 0xd0aa3fe8UL, 0x8a5cc091UL, -0xd49e2ce7UL, 0x0ce454a9UL, 0xd60acd86UL, 0x015f1919UL, 0x77079103UL, 0xdea03af6UL, -0x78a8565eUL, 0xdee356dfUL, 0x21f05cbeUL, 0x8b75e387UL, 0xb3c50651UL, 0xb8a5c3efUL, -0xd8eeb6d2UL, 0xe523be77UL, 0xc2154529UL, 0x2f69efdfUL, 0xafe67afbUL, 0xf470c4b2UL, -0xf3e0eb5bUL, 0xd6cc9876UL, 0x39e4460cUL, 0x1fda8538UL, 0x1987832fUL, 0xca007367UL, -0xa99144f8UL, 0x296b299eUL, 0x492fc295UL, 0x9266beabUL, 0xb5676e69UL, 0x9bd3dddaUL, -0xdf7e052fUL, 0xdb25701cUL, 0x1b5e51eeUL, 0xf65324e6UL, 0x6afce36cUL, 0x0316cc04UL, -0x8644213eUL, 0xb7dc59d0UL, 0x7965291fUL, 0xccd6fd43UL, 0x41823979UL, 0x932bcdf6UL, -0xb657c34dUL, 0x4edfd282UL, 0x7ae5290cUL, 0x3cb9536bUL, 0x851e20feUL, 0x9833557eUL, +0x9db30420UL, 0x1fb6e9deUL, 0xa7be7befUL, 0xd273a298UL, 0x4a4f7bdbUL, 0x64ad8c57UL, +0x85510443UL, 0xfa020ed1UL, 0x7e287affUL, 0xe60fb663UL, 0x095f35a1UL, 0x79ebf120UL, +0xfd059d43UL, 0x6497b7b1UL, 0xf3641f63UL, 0x241e4adfUL, 0x28147f5fUL, 0x4fa2b8cdUL, +0xc9430040UL, 0x0cc32220UL, 0xfdd30b30UL, 0xc0a5374fUL, 0x1d2d00d9UL, 0x24147b15UL, +0xee4d111aUL, 0x0fca5167UL, 0x71ff904cUL, 0x2d195ffeUL, 0x1a05645fUL, 0x0c13fefeUL, +0x081b08caUL, 0x05170121UL, 0x80530100UL, 0xe83e5efeUL, 0xac9af4f8UL, 0x7fe72701UL, +0xd2b8ee5fUL, 0x06df4261UL, 0xbb9e9b8aUL, 0x7293ea25UL, 0xce84ffdfUL, 0xf5718801UL, +0x3dd64b04UL, 0xa26f263bUL, 0x7ed48400UL, 0x547eebe6UL, 0x446d4ca0UL, 0x6cf3d6f5UL, +0x2649abdfUL, 0xaea0c7f5UL, 0x36338cc1UL, 0x503f7e93UL, 0xd3772061UL, 0x11b638e1UL, +0x72500e03UL, 0xf80eb2bbUL, 0xabe0502eUL, 0xec8d77deUL, 0x57971e81UL, 0xe14f6746UL, +0xc9335400UL, 0x6920318fUL, 0x081dbb99UL, 0xffc304a5UL, 0x4d351805UL, 0x7f3d5ce3UL, +0xa6c866c6UL, 0x5d5bcca9UL, 0xdaec6feaUL, 0x9f926f91UL, 0x9f46222fUL, 0x3991467dUL, +0xa5bf6d8eUL, 0x1143c44fUL, 0x43958302UL, 0xd0214eebUL, 0x022083b8UL, 0x3fb6180cUL, +0x18f8931eUL, 0x281658e6UL, 0x26486e3eUL, 0x8bd78a70UL, 0x7477e4c1UL, 0xb506e07cUL, +0xf32d0a25UL, 0x79098b02UL, 0xe4eabb81UL, 0x28123b23UL, 0x69dead38UL, 0x1574ca16UL, +0xdf871b62UL, 0x211c40b7UL, 0xa51a9ef9UL, 0x0014377bUL, 0x041e8ac8UL, 0x09114003UL, +0xbd59e4d2UL, 0xe3d156d5UL, 0x4fe876d5UL, 0x2f91a340UL, 0x557be8deUL, 0x00eae4a7UL, +0x0ce5c2ecUL, 0x4db4bba6UL, 0xe756bdffUL, 0xdd3369acUL, 0xec17b035UL, 0x06572327UL, +0x99afc8b0UL, 0x56c8c391UL, 0x6b65811cUL, 0x5e146119UL, 0x6e85cb75UL, 0xbe07c002UL, +0xc2325577UL, 0x893ff4ecUL, 0x5bbfc92dUL, 0xd0ec3b25UL, 0xb7801ab7UL, 0x8d6d3b24UL, +0x20c763efUL, 0xc366a5fcUL, 0x9c382880UL, 0x0ace3205UL, 0xaac9548aUL, 0xeca1d7c7UL, +0x041afa32UL, 0x1d16625aUL, 0x6701902cUL, 0x9b757a54UL, 0x31d477f7UL, 0x9126b031UL, +0x36cc6fdbUL, 0xc70b8b46UL, 0xd9e66a48UL, 0x56e55a79UL, 0x026a4cebUL, 0x52437effUL, +0x2f8f76b4UL, 0x0df980a5UL, 0x8674cde3UL, 0xedda04ebUL, 0x17a9be04UL, 0x2c18f4dfUL, +0xb7747f9dUL, 0xab2af7b4UL, 0xefc34d20UL, 0x2e096b7cUL, 0x1741a254UL, 0xe5b6a035UL, +0x213d42f6UL, 0x2c1c7c26UL, 0x61c2f50fUL, 0x6552daf9UL, 0xd2c231f8UL, 0x25130f69UL, +0xd8167fa2UL, 0x0418f2c8UL, 0x001a96a6UL, 0x0d1526abUL, 0x63315c21UL, 0x5e0a72ecUL, +0x49bafefdUL, 0x187908d9UL, 0x8d0dbd86UL, 0x311170a7UL, 0x3e9b640cUL, 0xcc3e10d7UL, +0xd5cad3b6UL, 0x0caec388UL, 0xf73001e1UL, 0x6c728affUL, 0x71eae2a1UL, 0x1f9af36eUL, +0xcfcbd12fUL, 0xc1de8417UL, 0xac07be6bUL, 0xcb44a1d8UL, 0x8b9b0f56UL, 0x013988c3UL, +0xb1c52fcaUL, 0xb4be31cdUL, 0xd8782806UL, 0x12a3a4e2UL, 0x6f7de532UL, 0x58fd7eb6UL, +0xd01ee900UL, 0x24adffc2UL, 0xf4990fc5UL, 0x9711aac5UL, 0x001d7b95UL, 0x82e5e7d2UL, +0x109873f6UL, 0x00613096UL, 0xc32d9521UL, 0xada121ffUL, 0x29908415UL, 0x7fbb977fUL, +0xaf9eb3dbUL, 0x29c9ed2aUL, 0x5ce2a465UL, 0xa730f32cUL, 0xd0aa3fe8UL, 0x8a5cc091UL, +0xd49e2ce7UL, 0x0ce454a9UL, 0xd60acd86UL, 0x015f1919UL, 0x77079103UL, 0xdea03af6UL, +0x78a8565eUL, 0xdee356dfUL, 0x21f05cbeUL, 0x8b75e387UL, 0xb3c50651UL, 0xb8a5c3efUL, +0xd8eeb6d2UL, 0xe523be77UL, 0xc2154529UL, 0x2f69efdfUL, 0xafe67afbUL, 0xf470c4b2UL, +0xf3e0eb5bUL, 0xd6cc9876UL, 0x39e4460cUL, 0x1fda8538UL, 0x1987832fUL, 0xca007367UL, +0xa99144f8UL, 0x296b299eUL, 0x492fc295UL, 0x9266beabUL, 0xb5676e69UL, 0x9bd3dddaUL, +0xdf7e052fUL, 0xdb25701cUL, 0x1b5e51eeUL, 0xf65324e6UL, 0x6afce36cUL, 0x0316cc04UL, +0x8644213eUL, 0xb7dc59d0UL, 0x7965291fUL, 0xccd6fd43UL, 0x41823979UL, 0x932bcdf6UL, +0xb657c34dUL, 0x4edfd282UL, 0x7ae5290cUL, 0x3cb9536bUL, 0x851e20feUL, 0x9833557eUL, 0x13ecf0b0UL, 0xd3ffb372UL, 0x3f85c5c1UL, 0x0aef7ed2UL}; static const ulong32 S5[256] = { -0x7ec90c04UL, 0x2c6e74b9UL, 0x9b0e66dfUL, 0xa6337911UL, 0xb86a7fffUL, 0x1dd358f5UL, -0x44dd9d44UL, 0x1731167fUL, 0x08fbf1faUL, 0xe7f511ccUL, 0xd2051b00UL, 0x735aba00UL, -0x2ab722d8UL, 0x386381cbUL, 0xacf6243aUL, 0x69befd7aUL, 0xe6a2e77fUL, 0xf0c720cdUL, -0xc4494816UL, 0xccf5c180UL, 0x38851640UL, 0x15b0a848UL, 0xe68b18cbUL, 0x4caadeffUL, -0x5f480a01UL, 0x0412b2aaUL, 0x259814fcUL, 0x41d0efe2UL, 0x4e40b48dUL, 0x248eb6fbUL, -0x8dba1cfeUL, 0x41a99b02UL, 0x1a550a04UL, 0xba8f65cbUL, 0x7251f4e7UL, 0x95a51725UL, -0xc106ecd7UL, 0x97a5980aUL, 0xc539b9aaUL, 0x4d79fe6aUL, 0xf2f3f763UL, 0x68af8040UL, -0xed0c9e56UL, 0x11b4958bUL, 0xe1eb5a88UL, 0x8709e6b0UL, 0xd7e07156UL, 0x4e29fea7UL, -0x6366e52dUL, 0x02d1c000UL, 0xc4ac8e05UL, 0x9377f571UL, 0x0c05372aUL, 0x578535f2UL, -0x2261be02UL, 0xd642a0c9UL, 0xdf13a280UL, 0x74b55bd2UL, 0x682199c0UL, 0xd421e5ecUL, -0x53fb3ce8UL, 0xc8adedb3UL, 0x28a87fc9UL, 0x3d959981UL, 0x5c1ff900UL, 0xfe38d399UL, -0x0c4eff0bUL, 0x062407eaUL, 0xaa2f4fb1UL, 0x4fb96976UL, 0x90c79505UL, 0xb0a8a774UL, -0xef55a1ffUL, 0xe59ca2c2UL, 0xa6b62d27UL, 0xe66a4263UL, 0xdf65001fUL, 0x0ec50966UL, -0xdfdd55bcUL, 0x29de0655UL, 0x911e739aUL, 0x17af8975UL, 0x32c7911cUL, 0x89f89468UL, -0x0d01e980UL, 0x524755f4UL, 0x03b63cc9UL, 0x0cc844b2UL, 0xbcf3f0aaUL, 0x87ac36e9UL, -0xe53a7426UL, 0x01b3d82bUL, 0x1a9e7449UL, 0x64ee2d7eUL, 0xcddbb1daUL, 0x01c94910UL, -0xb868bf80UL, 0x0d26f3fdUL, 0x9342ede7UL, 0x04a5c284UL, 0x636737b6UL, 0x50f5b616UL, -0xf24766e3UL, 0x8eca36c1UL, 0x136e05dbUL, 0xfef18391UL, 0xfb887a37UL, 0xd6e7f7d4UL, -0xc7fb7dc9UL, 0x3063fcdfUL, 0xb6f589deUL, 0xec2941daUL, 0x26e46695UL, 0xb7566419UL, -0xf654efc5UL, 0xd08d58b7UL, 0x48925401UL, 0xc1bacb7fUL, 0xe5ff550fUL, 0xb6083049UL, -0x5bb5d0e8UL, 0x87d72e5aUL, 0xab6a6ee1UL, 0x223a66ceUL, 0xc62bf3cdUL, 0x9e0885f9UL, -0x68cb3e47UL, 0x086c010fUL, 0xa21de820UL, 0xd18b69deUL, 0xf3f65777UL, 0xfa02c3f6UL, -0x407edac3UL, 0xcbb3d550UL, 0x1793084dUL, 0xb0d70ebaUL, 0x0ab378d5UL, 0xd951fb0cUL, -0xded7da56UL, 0x4124bbe4UL, 0x94ca0b56UL, 0x0f5755d1UL, 0xe0e1e56eUL, 0x6184b5beUL, -0x580a249fUL, 0x94f74bc0UL, 0xe327888eUL, 0x9f7b5561UL, 0xc3dc0280UL, 0x05687715UL, -0x646c6bd7UL, 0x44904db3UL, 0x66b4f0a3UL, 0xc0f1648aUL, 0x697ed5afUL, 0x49e92ff6UL, -0x309e374fUL, 0x2cb6356aUL, 0x85808573UL, 0x4991f840UL, 0x76f0ae02UL, 0x083be84dUL, -0x28421c9aUL, 0x44489406UL, 0x736e4cb8UL, 0xc1092910UL, 0x8bc95fc6UL, 0x7d869cf4UL, -0x134f616fUL, 0x2e77118dUL, 0xb31b2be1UL, 0xaa90b472UL, 0x3ca5d717UL, 0x7d161bbaUL, -0x9cad9010UL, 0xaf462ba2UL, 0x9fe459d2UL, 0x45d34559UL, 0xd9f2da13UL, 0xdbc65487UL, -0xf3e4f94eUL, 0x176d486fUL, 0x097c13eaUL, 0x631da5c7UL, 0x445f7382UL, 0x175683f4UL, -0xcdc66a97UL, 0x70be0288UL, 0xb3cdcf72UL, 0x6e5dd2f3UL, 0x20936079UL, 0x459b80a5UL, -0xbe60e2dbUL, 0xa9c23101UL, 0xeba5315cUL, 0x224e42f2UL, 0x1c5c1572UL, 0xf6721b2cUL, -0x1ad2fff3UL, 0x8c25404eUL, 0x324ed72fUL, 0x4067b7fdUL, 0x0523138eUL, 0x5ca3bc78UL, -0xdc0fd66eUL, 0x75922283UL, 0x784d6b17UL, 0x58ebb16eUL, 0x44094f85UL, 0x3f481d87UL, -0xfcfeae7bUL, 0x77b5ff76UL, 0x8c2302bfUL, 0xaaf47556UL, 0x5f46b02aUL, 0x2b092801UL, -0x3d38f5f7UL, 0x0ca81f36UL, 0x52af4a8aUL, 0x66d5e7c0UL, 0xdf3b0874UL, 0x95055110UL, -0x1b5ad7a8UL, 0xf61ed5adUL, 0x6cf6e479UL, 0x20758184UL, 0xd0cefa65UL, 0x88f7be58UL, -0x4a046826UL, 0x0ff6f8f3UL, 0xa09c7f70UL, 0x5346aba0UL, 0x5ce96c28UL, 0xe176eda3UL, -0x6bac307fUL, 0x376829d2UL, 0x85360fa9UL, 0x17e3fe2aUL, 0x24b79767UL, 0xf5a96b20UL, -0xd6cd2595UL, 0x68ff1ebfUL, 0x7555442cUL, 0xf19f06beUL, 0xf9e0659aUL, 0xeeb9491dUL, -0x34010718UL, 0xbb30cab8UL, 0xe822fe15UL, 0x88570983UL, 0x750e6249UL, 0xda627e55UL, +0x7ec90c04UL, 0x2c6e74b9UL, 0x9b0e66dfUL, 0xa6337911UL, 0xb86a7fffUL, 0x1dd358f5UL, +0x44dd9d44UL, 0x1731167fUL, 0x08fbf1faUL, 0xe7f511ccUL, 0xd2051b00UL, 0x735aba00UL, +0x2ab722d8UL, 0x386381cbUL, 0xacf6243aUL, 0x69befd7aUL, 0xe6a2e77fUL, 0xf0c720cdUL, +0xc4494816UL, 0xccf5c180UL, 0x38851640UL, 0x15b0a848UL, 0xe68b18cbUL, 0x4caadeffUL, +0x5f480a01UL, 0x0412b2aaUL, 0x259814fcUL, 0x41d0efe2UL, 0x4e40b48dUL, 0x248eb6fbUL, +0x8dba1cfeUL, 0x41a99b02UL, 0x1a550a04UL, 0xba8f65cbUL, 0x7251f4e7UL, 0x95a51725UL, +0xc106ecd7UL, 0x97a5980aUL, 0xc539b9aaUL, 0x4d79fe6aUL, 0xf2f3f763UL, 0x68af8040UL, +0xed0c9e56UL, 0x11b4958bUL, 0xe1eb5a88UL, 0x8709e6b0UL, 0xd7e07156UL, 0x4e29fea7UL, +0x6366e52dUL, 0x02d1c000UL, 0xc4ac8e05UL, 0x9377f571UL, 0x0c05372aUL, 0x578535f2UL, +0x2261be02UL, 0xd642a0c9UL, 0xdf13a280UL, 0x74b55bd2UL, 0x682199c0UL, 0xd421e5ecUL, +0x53fb3ce8UL, 0xc8adedb3UL, 0x28a87fc9UL, 0x3d959981UL, 0x5c1ff900UL, 0xfe38d399UL, +0x0c4eff0bUL, 0x062407eaUL, 0xaa2f4fb1UL, 0x4fb96976UL, 0x90c79505UL, 0xb0a8a774UL, +0xef55a1ffUL, 0xe59ca2c2UL, 0xa6b62d27UL, 0xe66a4263UL, 0xdf65001fUL, 0x0ec50966UL, +0xdfdd55bcUL, 0x29de0655UL, 0x911e739aUL, 0x17af8975UL, 0x32c7911cUL, 0x89f89468UL, +0x0d01e980UL, 0x524755f4UL, 0x03b63cc9UL, 0x0cc844b2UL, 0xbcf3f0aaUL, 0x87ac36e9UL, +0xe53a7426UL, 0x01b3d82bUL, 0x1a9e7449UL, 0x64ee2d7eUL, 0xcddbb1daUL, 0x01c94910UL, +0xb868bf80UL, 0x0d26f3fdUL, 0x9342ede7UL, 0x04a5c284UL, 0x636737b6UL, 0x50f5b616UL, +0xf24766e3UL, 0x8eca36c1UL, 0x136e05dbUL, 0xfef18391UL, 0xfb887a37UL, 0xd6e7f7d4UL, +0xc7fb7dc9UL, 0x3063fcdfUL, 0xb6f589deUL, 0xec2941daUL, 0x26e46695UL, 0xb7566419UL, +0xf654efc5UL, 0xd08d58b7UL, 0x48925401UL, 0xc1bacb7fUL, 0xe5ff550fUL, 0xb6083049UL, +0x5bb5d0e8UL, 0x87d72e5aUL, 0xab6a6ee1UL, 0x223a66ceUL, 0xc62bf3cdUL, 0x9e0885f9UL, +0x68cb3e47UL, 0x086c010fUL, 0xa21de820UL, 0xd18b69deUL, 0xf3f65777UL, 0xfa02c3f6UL, +0x407edac3UL, 0xcbb3d550UL, 0x1793084dUL, 0xb0d70ebaUL, 0x0ab378d5UL, 0xd951fb0cUL, +0xded7da56UL, 0x4124bbe4UL, 0x94ca0b56UL, 0x0f5755d1UL, 0xe0e1e56eUL, 0x6184b5beUL, +0x580a249fUL, 0x94f74bc0UL, 0xe327888eUL, 0x9f7b5561UL, 0xc3dc0280UL, 0x05687715UL, +0x646c6bd7UL, 0x44904db3UL, 0x66b4f0a3UL, 0xc0f1648aUL, 0x697ed5afUL, 0x49e92ff6UL, +0x309e374fUL, 0x2cb6356aUL, 0x85808573UL, 0x4991f840UL, 0x76f0ae02UL, 0x083be84dUL, +0x28421c9aUL, 0x44489406UL, 0x736e4cb8UL, 0xc1092910UL, 0x8bc95fc6UL, 0x7d869cf4UL, +0x134f616fUL, 0x2e77118dUL, 0xb31b2be1UL, 0xaa90b472UL, 0x3ca5d717UL, 0x7d161bbaUL, +0x9cad9010UL, 0xaf462ba2UL, 0x9fe459d2UL, 0x45d34559UL, 0xd9f2da13UL, 0xdbc65487UL, +0xf3e4f94eUL, 0x176d486fUL, 0x097c13eaUL, 0x631da5c7UL, 0x445f7382UL, 0x175683f4UL, +0xcdc66a97UL, 0x70be0288UL, 0xb3cdcf72UL, 0x6e5dd2f3UL, 0x20936079UL, 0x459b80a5UL, +0xbe60e2dbUL, 0xa9c23101UL, 0xeba5315cUL, 0x224e42f2UL, 0x1c5c1572UL, 0xf6721b2cUL, +0x1ad2fff3UL, 0x8c25404eUL, 0x324ed72fUL, 0x4067b7fdUL, 0x0523138eUL, 0x5ca3bc78UL, +0xdc0fd66eUL, 0x75922283UL, 0x784d6b17UL, 0x58ebb16eUL, 0x44094f85UL, 0x3f481d87UL, +0xfcfeae7bUL, 0x77b5ff76UL, 0x8c2302bfUL, 0xaaf47556UL, 0x5f46b02aUL, 0x2b092801UL, +0x3d38f5f7UL, 0x0ca81f36UL, 0x52af4a8aUL, 0x66d5e7c0UL, 0xdf3b0874UL, 0x95055110UL, +0x1b5ad7a8UL, 0xf61ed5adUL, 0x6cf6e479UL, 0x20758184UL, 0xd0cefa65UL, 0x88f7be58UL, +0x4a046826UL, 0x0ff6f8f3UL, 0xa09c7f70UL, 0x5346aba0UL, 0x5ce96c28UL, 0xe176eda3UL, +0x6bac307fUL, 0x376829d2UL, 0x85360fa9UL, 0x17e3fe2aUL, 0x24b79767UL, 0xf5a96b20UL, +0xd6cd2595UL, 0x68ff1ebfUL, 0x7555442cUL, 0xf19f06beUL, 0xf9e0659aUL, 0xeeb9491dUL, +0x34010718UL, 0xbb30cab8UL, 0xe822fe15UL, 0x88570983UL, 0x750e6249UL, 0xda627e55UL, 0x5e76ffa8UL, 0xb1534546UL, 0x6d47de08UL, 0xefe9e7d4UL}; static const ulong32 S6[256] = { -0xf6fa8f9dUL, 0x2cac6ce1UL, 0x4ca34867UL, 0xe2337f7cUL, 0x95db08e7UL, 0x016843b4UL, -0xeced5cbcUL, 0x325553acUL, 0xbf9f0960UL, 0xdfa1e2edUL, 0x83f0579dUL, 0x63ed86b9UL, -0x1ab6a6b8UL, 0xde5ebe39UL, 0xf38ff732UL, 0x8989b138UL, 0x33f14961UL, 0xc01937bdUL, -0xf506c6daUL, 0xe4625e7eUL, 0xa308ea99UL, 0x4e23e33cUL, 0x79cbd7ccUL, 0x48a14367UL, -0xa3149619UL, 0xfec94bd5UL, 0xa114174aUL, 0xeaa01866UL, 0xa084db2dUL, 0x09a8486fUL, -0xa888614aUL, 0x2900af98UL, 0x01665991UL, 0xe1992863UL, 0xc8f30c60UL, 0x2e78ef3cUL, -0xd0d51932UL, 0xcf0fec14UL, 0xf7ca07d2UL, 0xd0a82072UL, 0xfd41197eUL, 0x9305a6b0UL, -0xe86be3daUL, 0x74bed3cdUL, 0x372da53cUL, 0x4c7f4448UL, 0xdab5d440UL, 0x6dba0ec3UL, -0x083919a7UL, 0x9fbaeed9UL, 0x49dbcfb0UL, 0x4e670c53UL, 0x5c3d9c01UL, 0x64bdb941UL, -0x2c0e636aUL, 0xba7dd9cdUL, 0xea6f7388UL, 0xe70bc762UL, 0x35f29adbUL, 0x5c4cdd8dUL, -0xf0d48d8cUL, 0xb88153e2UL, 0x08a19866UL, 0x1ae2eac8UL, 0x284caf89UL, 0xaa928223UL, -0x9334be53UL, 0x3b3a21bfUL, 0x16434be3UL, 0x9aea3906UL, 0xefe8c36eUL, 0xf890cdd9UL, -0x80226daeUL, 0xc340a4a3UL, 0xdf7e9c09UL, 0xa694a807UL, 0x5b7c5eccUL, 0x221db3a6UL, -0x9a69a02fUL, 0x68818a54UL, 0xceb2296fUL, 0x53c0843aUL, 0xfe893655UL, 0x25bfe68aUL, -0xb4628abcUL, 0xcf222ebfUL, 0x25ac6f48UL, 0xa9a99387UL, 0x53bddb65UL, 0xe76ffbe7UL, -0xe967fd78UL, 0x0ba93563UL, 0x8e342bc1UL, 0xe8a11be9UL, 0x4980740dUL, 0xc8087dfcUL, -0x8de4bf99UL, 0xa11101a0UL, 0x7fd37975UL, 0xda5a26c0UL, 0xe81f994fUL, 0x9528cd89UL, -0xfd339fedUL, 0xb87834bfUL, 0x5f04456dUL, 0x22258698UL, 0xc9c4c83bUL, 0x2dc156beUL, -0x4f628daaUL, 0x57f55ec5UL, 0xe2220abeUL, 0xd2916ebfUL, 0x4ec75b95UL, 0x24f2c3c0UL, -0x42d15d99UL, 0xcd0d7fa0UL, 0x7b6e27ffUL, 0xa8dc8af0UL, 0x7345c106UL, 0xf41e232fUL, -0x35162386UL, 0xe6ea8926UL, 0x3333b094UL, 0x157ec6f2UL, 0x372b74afUL, 0x692573e4UL, -0xe9a9d848UL, 0xf3160289UL, 0x3a62ef1dUL, 0xa787e238UL, 0xf3a5f676UL, 0x74364853UL, -0x20951063UL, 0x4576698dUL, 0xb6fad407UL, 0x592af950UL, 0x36f73523UL, 0x4cfb6e87UL, -0x7da4cec0UL, 0x6c152daaUL, 0xcb0396a8UL, 0xc50dfe5dUL, 0xfcd707abUL, 0x0921c42fUL, -0x89dff0bbUL, 0x5fe2be78UL, 0x448f4f33UL, 0x754613c9UL, 0x2b05d08dUL, 0x48b9d585UL, -0xdc049441UL, 0xc8098f9bUL, 0x7dede786UL, 0xc39a3373UL, 0x42410005UL, 0x6a091751UL, -0x0ef3c8a6UL, 0x890072d6UL, 0x28207682UL, 0xa9a9f7beUL, 0xbf32679dUL, 0xd45b5b75UL, -0xb353fd00UL, 0xcbb0e358UL, 0x830f220aUL, 0x1f8fb214UL, 0xd372cf08UL, 0xcc3c4a13UL, -0x8cf63166UL, 0x061c87beUL, 0x88c98f88UL, 0x6062e397UL, 0x47cf8e7aUL, 0xb6c85283UL, -0x3cc2acfbUL, 0x3fc06976UL, 0x4e8f0252UL, 0x64d8314dUL, 0xda3870e3UL, 0x1e665459UL, -0xc10908f0UL, 0x513021a5UL, 0x6c5b68b7UL, 0x822f8aa0UL, 0x3007cd3eUL, 0x74719eefUL, -0xdc872681UL, 0x073340d4UL, 0x7e432fd9UL, 0x0c5ec241UL, 0x8809286cUL, 0xf592d891UL, -0x08a930f6UL, 0x957ef305UL, 0xb7fbffbdUL, 0xc266e96fUL, 0x6fe4ac98UL, 0xb173ecc0UL, -0xbc60b42aUL, 0x953498daUL, 0xfba1ae12UL, 0x2d4bd736UL, 0x0f25faabUL, 0xa4f3fcebUL, -0xe2969123UL, 0x257f0c3dUL, 0x9348af49UL, 0x361400bcUL, 0xe8816f4aUL, 0x3814f200UL, -0xa3f94043UL, 0x9c7a54c2UL, 0xbc704f57UL, 0xda41e7f9UL, 0xc25ad33aUL, 0x54f4a084UL, -0xb17f5505UL, 0x59357cbeUL, 0xedbd15c8UL, 0x7f97c5abUL, 0xba5ac7b5UL, 0xb6f6deafUL, -0x3a479c3aUL, 0x5302da25UL, 0x653d7e6aUL, 0x54268d49UL, 0x51a477eaUL, 0x5017d55bUL, -0xd7d25d88UL, 0x44136c76UL, 0x0404a8c8UL, 0xb8e5a121UL, 0xb81a928aUL, 0x60ed5869UL, -0x97c55b96UL, 0xeaec991bUL, 0x29935913UL, 0x01fdb7f1UL, 0x088e8dfaUL, 0x9ab6f6f5UL, -0x3b4cbf9fUL, 0x4a5de3abUL, 0xe6051d35UL, 0xa0e1d855UL, 0xd36b4cf1UL, 0xf544edebUL, -0xb0e93524UL, 0xbebb8fbdUL, 0xa2d762cfUL, 0x49c92f54UL, 0x38b5f331UL, 0x7128a454UL, +0xf6fa8f9dUL, 0x2cac6ce1UL, 0x4ca34867UL, 0xe2337f7cUL, 0x95db08e7UL, 0x016843b4UL, +0xeced5cbcUL, 0x325553acUL, 0xbf9f0960UL, 0xdfa1e2edUL, 0x83f0579dUL, 0x63ed86b9UL, +0x1ab6a6b8UL, 0xde5ebe39UL, 0xf38ff732UL, 0x8989b138UL, 0x33f14961UL, 0xc01937bdUL, +0xf506c6daUL, 0xe4625e7eUL, 0xa308ea99UL, 0x4e23e33cUL, 0x79cbd7ccUL, 0x48a14367UL, +0xa3149619UL, 0xfec94bd5UL, 0xa114174aUL, 0xeaa01866UL, 0xa084db2dUL, 0x09a8486fUL, +0xa888614aUL, 0x2900af98UL, 0x01665991UL, 0xe1992863UL, 0xc8f30c60UL, 0x2e78ef3cUL, +0xd0d51932UL, 0xcf0fec14UL, 0xf7ca07d2UL, 0xd0a82072UL, 0xfd41197eUL, 0x9305a6b0UL, +0xe86be3daUL, 0x74bed3cdUL, 0x372da53cUL, 0x4c7f4448UL, 0xdab5d440UL, 0x6dba0ec3UL, +0x083919a7UL, 0x9fbaeed9UL, 0x49dbcfb0UL, 0x4e670c53UL, 0x5c3d9c01UL, 0x64bdb941UL, +0x2c0e636aUL, 0xba7dd9cdUL, 0xea6f7388UL, 0xe70bc762UL, 0x35f29adbUL, 0x5c4cdd8dUL, +0xf0d48d8cUL, 0xb88153e2UL, 0x08a19866UL, 0x1ae2eac8UL, 0x284caf89UL, 0xaa928223UL, +0x9334be53UL, 0x3b3a21bfUL, 0x16434be3UL, 0x9aea3906UL, 0xefe8c36eUL, 0xf890cdd9UL, +0x80226daeUL, 0xc340a4a3UL, 0xdf7e9c09UL, 0xa694a807UL, 0x5b7c5eccUL, 0x221db3a6UL, +0x9a69a02fUL, 0x68818a54UL, 0xceb2296fUL, 0x53c0843aUL, 0xfe893655UL, 0x25bfe68aUL, +0xb4628abcUL, 0xcf222ebfUL, 0x25ac6f48UL, 0xa9a99387UL, 0x53bddb65UL, 0xe76ffbe7UL, +0xe967fd78UL, 0x0ba93563UL, 0x8e342bc1UL, 0xe8a11be9UL, 0x4980740dUL, 0xc8087dfcUL, +0x8de4bf99UL, 0xa11101a0UL, 0x7fd37975UL, 0xda5a26c0UL, 0xe81f994fUL, 0x9528cd89UL, +0xfd339fedUL, 0xb87834bfUL, 0x5f04456dUL, 0x22258698UL, 0xc9c4c83bUL, 0x2dc156beUL, +0x4f628daaUL, 0x57f55ec5UL, 0xe2220abeUL, 0xd2916ebfUL, 0x4ec75b95UL, 0x24f2c3c0UL, +0x42d15d99UL, 0xcd0d7fa0UL, 0x7b6e27ffUL, 0xa8dc8af0UL, 0x7345c106UL, 0xf41e232fUL, +0x35162386UL, 0xe6ea8926UL, 0x3333b094UL, 0x157ec6f2UL, 0x372b74afUL, 0x692573e4UL, +0xe9a9d848UL, 0xf3160289UL, 0x3a62ef1dUL, 0xa787e238UL, 0xf3a5f676UL, 0x74364853UL, +0x20951063UL, 0x4576698dUL, 0xb6fad407UL, 0x592af950UL, 0x36f73523UL, 0x4cfb6e87UL, +0x7da4cec0UL, 0x6c152daaUL, 0xcb0396a8UL, 0xc50dfe5dUL, 0xfcd707abUL, 0x0921c42fUL, +0x89dff0bbUL, 0x5fe2be78UL, 0x448f4f33UL, 0x754613c9UL, 0x2b05d08dUL, 0x48b9d585UL, +0xdc049441UL, 0xc8098f9bUL, 0x7dede786UL, 0xc39a3373UL, 0x42410005UL, 0x6a091751UL, +0x0ef3c8a6UL, 0x890072d6UL, 0x28207682UL, 0xa9a9f7beUL, 0xbf32679dUL, 0xd45b5b75UL, +0xb353fd00UL, 0xcbb0e358UL, 0x830f220aUL, 0x1f8fb214UL, 0xd372cf08UL, 0xcc3c4a13UL, +0x8cf63166UL, 0x061c87beUL, 0x88c98f88UL, 0x6062e397UL, 0x47cf8e7aUL, 0xb6c85283UL, +0x3cc2acfbUL, 0x3fc06976UL, 0x4e8f0252UL, 0x64d8314dUL, 0xda3870e3UL, 0x1e665459UL, +0xc10908f0UL, 0x513021a5UL, 0x6c5b68b7UL, 0x822f8aa0UL, 0x3007cd3eUL, 0x74719eefUL, +0xdc872681UL, 0x073340d4UL, 0x7e432fd9UL, 0x0c5ec241UL, 0x8809286cUL, 0xf592d891UL, +0x08a930f6UL, 0x957ef305UL, 0xb7fbffbdUL, 0xc266e96fUL, 0x6fe4ac98UL, 0xb173ecc0UL, +0xbc60b42aUL, 0x953498daUL, 0xfba1ae12UL, 0x2d4bd736UL, 0x0f25faabUL, 0xa4f3fcebUL, +0xe2969123UL, 0x257f0c3dUL, 0x9348af49UL, 0x361400bcUL, 0xe8816f4aUL, 0x3814f200UL, +0xa3f94043UL, 0x9c7a54c2UL, 0xbc704f57UL, 0xda41e7f9UL, 0xc25ad33aUL, 0x54f4a084UL, +0xb17f5505UL, 0x59357cbeUL, 0xedbd15c8UL, 0x7f97c5abUL, 0xba5ac7b5UL, 0xb6f6deafUL, +0x3a479c3aUL, 0x5302da25UL, 0x653d7e6aUL, 0x54268d49UL, 0x51a477eaUL, 0x5017d55bUL, +0xd7d25d88UL, 0x44136c76UL, 0x0404a8c8UL, 0xb8e5a121UL, 0xb81a928aUL, 0x60ed5869UL, +0x97c55b96UL, 0xeaec991bUL, 0x29935913UL, 0x01fdb7f1UL, 0x088e8dfaUL, 0x9ab6f6f5UL, +0x3b4cbf9fUL, 0x4a5de3abUL, 0xe6051d35UL, 0xa0e1d855UL, 0xd36b4cf1UL, 0xf544edebUL, +0xb0e93524UL, 0xbebb8fbdUL, 0xa2d762cfUL, 0x49c92f54UL, 0x38b5f331UL, 0x7128a454UL, 0x48392905UL, 0xa65b1db8UL, 0x851c97bdUL, 0xd675cf2fUL}; static const ulong32 S7[256] = { -0x85e04019UL, 0x332bf567UL, 0x662dbfffUL, 0xcfc65693UL, 0x2a8d7f6fUL, 0xab9bc912UL, -0xde6008a1UL, 0x2028da1fUL, 0x0227bce7UL, 0x4d642916UL, 0x18fac300UL, 0x50f18b82UL, -0x2cb2cb11UL, 0xb232e75cUL, 0x4b3695f2UL, 0xb28707deUL, 0xa05fbcf6UL, 0xcd4181e9UL, -0xe150210cUL, 0xe24ef1bdUL, 0xb168c381UL, 0xfde4e789UL, 0x5c79b0d8UL, 0x1e8bfd43UL, -0x4d495001UL, 0x38be4341UL, 0x913cee1dUL, 0x92a79c3fUL, 0x089766beUL, 0xbaeeadf4UL, -0x1286becfUL, 0xb6eacb19UL, 0x2660c200UL, 0x7565bde4UL, 0x64241f7aUL, 0x8248dca9UL, -0xc3b3ad66UL, 0x28136086UL, 0x0bd8dfa8UL, 0x356d1cf2UL, 0x107789beUL, 0xb3b2e9ceUL, -0x0502aa8fUL, 0x0bc0351eUL, 0x166bf52aUL, 0xeb12ff82UL, 0xe3486911UL, 0xd34d7516UL, -0x4e7b3affUL, 0x5f43671bUL, 0x9cf6e037UL, 0x4981ac83UL, 0x334266ceUL, 0x8c9341b7UL, -0xd0d854c0UL, 0xcb3a6c88UL, 0x47bc2829UL, 0x4725ba37UL, 0xa66ad22bUL, 0x7ad61f1eUL, -0x0c5cbafaUL, 0x4437f107UL, 0xb6e79962UL, 0x42d2d816UL, 0x0a961288UL, 0xe1a5c06eUL, -0x13749e67UL, 0x72fc081aUL, 0xb1d139f7UL, 0xf9583745UL, 0xcf19df58UL, 0xbec3f756UL, -0xc06eba30UL, 0x07211b24UL, 0x45c28829UL, 0xc95e317fUL, 0xbc8ec511UL, 0x38bc46e9UL, -0xc6e6fa14UL, 0xbae8584aUL, 0xad4ebc46UL, 0x468f508bUL, 0x7829435fUL, 0xf124183bUL, -0x821dba9fUL, 0xaff60ff4UL, 0xea2c4e6dUL, 0x16e39264UL, 0x92544a8bUL, 0x009b4fc3UL, -0xaba68cedUL, 0x9ac96f78UL, 0x06a5b79aUL, 0xb2856e6eUL, 0x1aec3ca9UL, 0xbe838688UL, -0x0e0804e9UL, 0x55f1be56UL, 0xe7e5363bUL, 0xb3a1f25dUL, 0xf7debb85UL, 0x61fe033cUL, -0x16746233UL, 0x3c034c28UL, 0xda6d0c74UL, 0x79aac56cUL, 0x3ce4e1adUL, 0x51f0c802UL, -0x98f8f35aUL, 0x1626a49fUL, 0xeed82b29UL, 0x1d382fe3UL, 0x0c4fb99aUL, 0xbb325778UL, -0x3ec6d97bUL, 0x6e77a6a9UL, 0xcb658b5cUL, 0xd45230c7UL, 0x2bd1408bUL, 0x60c03eb7UL, -0xb9068d78UL, 0xa33754f4UL, 0xf430c87dUL, 0xc8a71302UL, 0xb96d8c32UL, 0xebd4e7beUL, -0xbe8b9d2dUL, 0x7979fb06UL, 0xe7225308UL, 0x8b75cf77UL, 0x11ef8da4UL, 0xe083c858UL, -0x8d6b786fUL, 0x5a6317a6UL, 0xfa5cf7a0UL, 0x5dda0033UL, 0xf28ebfb0UL, 0xf5b9c310UL, -0xa0eac280UL, 0x08b9767aUL, 0xa3d9d2b0UL, 0x79d34217UL, 0x021a718dUL, 0x9ac6336aUL, -0x2711fd60UL, 0x438050e3UL, 0x069908a8UL, 0x3d7fedc4UL, 0x826d2befUL, 0x4eeb8476UL, -0x488dcf25UL, 0x36c9d566UL, 0x28e74e41UL, 0xc2610acaUL, 0x3d49a9cfUL, 0xbae3b9dfUL, -0xb65f8de6UL, 0x92aeaf64UL, 0x3ac7d5e6UL, 0x9ea80509UL, 0xf22b017dUL, 0xa4173f70UL, -0xdd1e16c3UL, 0x15e0d7f9UL, 0x50b1b887UL, 0x2b9f4fd5UL, 0x625aba82UL, 0x6a017962UL, -0x2ec01b9cUL, 0x15488aa9UL, 0xd716e740UL, 0x40055a2cUL, 0x93d29a22UL, 0xe32dbf9aUL, -0x058745b9UL, 0x3453dc1eUL, 0xd699296eUL, 0x496cff6fUL, 0x1c9f4986UL, 0xdfe2ed07UL, -0xb87242d1UL, 0x19de7eaeUL, 0x053e561aUL, 0x15ad6f8cUL, 0x66626c1cUL, 0x7154c24cUL, -0xea082b2aUL, 0x93eb2939UL, 0x17dcb0f0UL, 0x58d4f2aeUL, 0x9ea294fbUL, 0x52cf564cUL, -0x9883fe66UL, 0x2ec40581UL, 0x763953c3UL, 0x01d6692eUL, 0xd3a0c108UL, 0xa1e7160eUL, -0xe4f2dfa6UL, 0x693ed285UL, 0x74904698UL, 0x4c2b0eddUL, 0x4f757656UL, 0x5d393378UL, -0xa132234fUL, 0x3d321c5dUL, 0xc3f5e194UL, 0x4b269301UL, 0xc79f022fUL, 0x3c997e7eUL, -0x5e4f9504UL, 0x3ffafbbdUL, 0x76f7ad0eUL, 0x296693f4UL, 0x3d1fce6fUL, 0xc61e45beUL, -0xd3b5ab34UL, 0xf72bf9b7UL, 0x1b0434c0UL, 0x4e72b567UL, 0x5592a33dUL, 0xb5229301UL, -0xcfd2a87fUL, 0x60aeb767UL, 0x1814386bUL, 0x30bcc33dUL, 0x38a0c07dUL, 0xfd1606f2UL, -0xc363519bUL, 0x589dd390UL, 0x5479f8e6UL, 0x1cb8d647UL, 0x97fd61a9UL, 0xea7759f4UL, -0x2d57539dUL, 0x569a58cfUL, 0xe84e63adUL, 0x462e1b78UL, 0x6580f87eUL, 0xf3817914UL, -0x91da55f4UL, 0x40a230f3UL, 0xd1988f35UL, 0xb6e318d2UL, 0x3ffa50bcUL, 0x3d40f021UL, -0xc3c0bdaeUL, 0x4958c24cUL, 0x518f36b2UL, 0x84b1d370UL, 0x0fedce83UL, 0x878ddadaUL, +0x85e04019UL, 0x332bf567UL, 0x662dbfffUL, 0xcfc65693UL, 0x2a8d7f6fUL, 0xab9bc912UL, +0xde6008a1UL, 0x2028da1fUL, 0x0227bce7UL, 0x4d642916UL, 0x18fac300UL, 0x50f18b82UL, +0x2cb2cb11UL, 0xb232e75cUL, 0x4b3695f2UL, 0xb28707deUL, 0xa05fbcf6UL, 0xcd4181e9UL, +0xe150210cUL, 0xe24ef1bdUL, 0xb168c381UL, 0xfde4e789UL, 0x5c79b0d8UL, 0x1e8bfd43UL, +0x4d495001UL, 0x38be4341UL, 0x913cee1dUL, 0x92a79c3fUL, 0x089766beUL, 0xbaeeadf4UL, +0x1286becfUL, 0xb6eacb19UL, 0x2660c200UL, 0x7565bde4UL, 0x64241f7aUL, 0x8248dca9UL, +0xc3b3ad66UL, 0x28136086UL, 0x0bd8dfa8UL, 0x356d1cf2UL, 0x107789beUL, 0xb3b2e9ceUL, +0x0502aa8fUL, 0x0bc0351eUL, 0x166bf52aUL, 0xeb12ff82UL, 0xe3486911UL, 0xd34d7516UL, +0x4e7b3affUL, 0x5f43671bUL, 0x9cf6e037UL, 0x4981ac83UL, 0x334266ceUL, 0x8c9341b7UL, +0xd0d854c0UL, 0xcb3a6c88UL, 0x47bc2829UL, 0x4725ba37UL, 0xa66ad22bUL, 0x7ad61f1eUL, +0x0c5cbafaUL, 0x4437f107UL, 0xb6e79962UL, 0x42d2d816UL, 0x0a961288UL, 0xe1a5c06eUL, +0x13749e67UL, 0x72fc081aUL, 0xb1d139f7UL, 0xf9583745UL, 0xcf19df58UL, 0xbec3f756UL, +0xc06eba30UL, 0x07211b24UL, 0x45c28829UL, 0xc95e317fUL, 0xbc8ec511UL, 0x38bc46e9UL, +0xc6e6fa14UL, 0xbae8584aUL, 0xad4ebc46UL, 0x468f508bUL, 0x7829435fUL, 0xf124183bUL, +0x821dba9fUL, 0xaff60ff4UL, 0xea2c4e6dUL, 0x16e39264UL, 0x92544a8bUL, 0x009b4fc3UL, +0xaba68cedUL, 0x9ac96f78UL, 0x06a5b79aUL, 0xb2856e6eUL, 0x1aec3ca9UL, 0xbe838688UL, +0x0e0804e9UL, 0x55f1be56UL, 0xe7e5363bUL, 0xb3a1f25dUL, 0xf7debb85UL, 0x61fe033cUL, +0x16746233UL, 0x3c034c28UL, 0xda6d0c74UL, 0x79aac56cUL, 0x3ce4e1adUL, 0x51f0c802UL, +0x98f8f35aUL, 0x1626a49fUL, 0xeed82b29UL, 0x1d382fe3UL, 0x0c4fb99aUL, 0xbb325778UL, +0x3ec6d97bUL, 0x6e77a6a9UL, 0xcb658b5cUL, 0xd45230c7UL, 0x2bd1408bUL, 0x60c03eb7UL, +0xb9068d78UL, 0xa33754f4UL, 0xf430c87dUL, 0xc8a71302UL, 0xb96d8c32UL, 0xebd4e7beUL, +0xbe8b9d2dUL, 0x7979fb06UL, 0xe7225308UL, 0x8b75cf77UL, 0x11ef8da4UL, 0xe083c858UL, +0x8d6b786fUL, 0x5a6317a6UL, 0xfa5cf7a0UL, 0x5dda0033UL, 0xf28ebfb0UL, 0xf5b9c310UL, +0xa0eac280UL, 0x08b9767aUL, 0xa3d9d2b0UL, 0x79d34217UL, 0x021a718dUL, 0x9ac6336aUL, +0x2711fd60UL, 0x438050e3UL, 0x069908a8UL, 0x3d7fedc4UL, 0x826d2befUL, 0x4eeb8476UL, +0x488dcf25UL, 0x36c9d566UL, 0x28e74e41UL, 0xc2610acaUL, 0x3d49a9cfUL, 0xbae3b9dfUL, +0xb65f8de6UL, 0x92aeaf64UL, 0x3ac7d5e6UL, 0x9ea80509UL, 0xf22b017dUL, 0xa4173f70UL, +0xdd1e16c3UL, 0x15e0d7f9UL, 0x50b1b887UL, 0x2b9f4fd5UL, 0x625aba82UL, 0x6a017962UL, +0x2ec01b9cUL, 0x15488aa9UL, 0xd716e740UL, 0x40055a2cUL, 0x93d29a22UL, 0xe32dbf9aUL, +0x058745b9UL, 0x3453dc1eUL, 0xd699296eUL, 0x496cff6fUL, 0x1c9f4986UL, 0xdfe2ed07UL, +0xb87242d1UL, 0x19de7eaeUL, 0x053e561aUL, 0x15ad6f8cUL, 0x66626c1cUL, 0x7154c24cUL, +0xea082b2aUL, 0x93eb2939UL, 0x17dcb0f0UL, 0x58d4f2aeUL, 0x9ea294fbUL, 0x52cf564cUL, +0x9883fe66UL, 0x2ec40581UL, 0x763953c3UL, 0x01d6692eUL, 0xd3a0c108UL, 0xa1e7160eUL, +0xe4f2dfa6UL, 0x693ed285UL, 0x74904698UL, 0x4c2b0eddUL, 0x4f757656UL, 0x5d393378UL, +0xa132234fUL, 0x3d321c5dUL, 0xc3f5e194UL, 0x4b269301UL, 0xc79f022fUL, 0x3c997e7eUL, +0x5e4f9504UL, 0x3ffafbbdUL, 0x76f7ad0eUL, 0x296693f4UL, 0x3d1fce6fUL, 0xc61e45beUL, +0xd3b5ab34UL, 0xf72bf9b7UL, 0x1b0434c0UL, 0x4e72b567UL, 0x5592a33dUL, 0xb5229301UL, +0xcfd2a87fUL, 0x60aeb767UL, 0x1814386bUL, 0x30bcc33dUL, 0x38a0c07dUL, 0xfd1606f2UL, +0xc363519bUL, 0x589dd390UL, 0x5479f8e6UL, 0x1cb8d647UL, 0x97fd61a9UL, 0xea7759f4UL, +0x2d57539dUL, 0x569a58cfUL, 0xe84e63adUL, 0x462e1b78UL, 0x6580f87eUL, 0xf3817914UL, +0x91da55f4UL, 0x40a230f3UL, 0xd1988f35UL, 0xb6e318d2UL, 0x3ffa50bcUL, 0x3d40f021UL, +0xc3c0bdaeUL, 0x4958c24cUL, 0x518f36b2UL, 0x84b1d370UL, 0x0fedce83UL, 0x878ddadaUL, 0xf2a279c7UL, 0x94e01be8UL, 0x90716f4bUL, 0x954b8aa3UL}; static const ulong32 S8[256] = { -0xe216300dUL, 0xbbddfffcUL, 0xa7ebdabdUL, 0x35648095UL, 0x7789f8b7UL, 0xe6c1121bUL, -0x0e241600UL, 0x052ce8b5UL, 0x11a9cfb0UL, 0xe5952f11UL, 0xece7990aUL, 0x9386d174UL, -0x2a42931cUL, 0x76e38111UL, 0xb12def3aUL, 0x37ddddfcUL, 0xde9adeb1UL, 0x0a0cc32cUL, -0xbe197029UL, 0x84a00940UL, 0xbb243a0fUL, 0xb4d137cfUL, 0xb44e79f0UL, 0x049eedfdUL, -0x0b15a15dUL, 0x480d3168UL, 0x8bbbde5aUL, 0x669ded42UL, 0xc7ece831UL, 0x3f8f95e7UL, -0x72df191bUL, 0x7580330dUL, 0x94074251UL, 0x5c7dcdfaUL, 0xabbe6d63UL, 0xaa402164UL, -0xb301d40aUL, 0x02e7d1caUL, 0x53571daeUL, 0x7a3182a2UL, 0x12a8ddecUL, 0xfdaa335dUL, -0x176f43e8UL, 0x71fb46d4UL, 0x38129022UL, 0xce949ad4UL, 0xb84769adUL, 0x965bd862UL, -0x82f3d055UL, 0x66fb9767UL, 0x15b80b4eUL, 0x1d5b47a0UL, 0x4cfde06fUL, 0xc28ec4b8UL, -0x57e8726eUL, 0x647a78fcUL, 0x99865d44UL, 0x608bd593UL, 0x6c200e03UL, 0x39dc5ff6UL, -0x5d0b00a3UL, 0xae63aff2UL, 0x7e8bd632UL, 0x70108c0cUL, 0xbbd35049UL, 0x2998df04UL, -0x980cf42aUL, 0x9b6df491UL, 0x9e7edd53UL, 0x06918548UL, 0x58cb7e07UL, 0x3b74ef2eUL, -0x522fffb1UL, 0xd24708ccUL, 0x1c7e27cdUL, 0xa4eb215bUL, 0x3cf1d2e2UL, 0x19b47a38UL, -0x424f7618UL, 0x35856039UL, 0x9d17dee7UL, 0x27eb35e6UL, 0xc9aff67bUL, 0x36baf5b8UL, -0x09c467cdUL, 0xc18910b1UL, 0xe11dbf7bUL, 0x06cd1af8UL, 0x7170c608UL, 0x2d5e3354UL, -0xd4de495aUL, 0x64c6d006UL, 0xbcc0c62cUL, 0x3dd00db3UL, 0x708f8f34UL, 0x77d51b42UL, -0x264f620fUL, 0x24b8d2bfUL, 0x15c1b79eUL, 0x46a52564UL, 0xf8d7e54eUL, 0x3e378160UL, -0x7895cda5UL, 0x859c15a5UL, 0xe6459788UL, 0xc37bc75fUL, 0xdb07ba0cUL, 0x0676a3abUL, -0x7f229b1eUL, 0x31842e7bUL, 0x24259fd7UL, 0xf8bef472UL, 0x835ffcb8UL, 0x6df4c1f2UL, -0x96f5b195UL, 0xfd0af0fcUL, 0xb0fe134cUL, 0xe2506d3dUL, 0x4f9b12eaUL, 0xf215f225UL, -0xa223736fUL, 0x9fb4c428UL, 0x25d04979UL, 0x34c713f8UL, 0xc4618187UL, 0xea7a6e98UL, -0x7cd16efcUL, 0x1436876cUL, 0xf1544107UL, 0xbedeee14UL, 0x56e9af27UL, 0xa04aa441UL, -0x3cf7c899UL, 0x92ecbae6UL, 0xdd67016dUL, 0x151682ebUL, 0xa842eedfUL, 0xfdba60b4UL, -0xf1907b75UL, 0x20e3030fUL, 0x24d8c29eUL, 0xe139673bUL, 0xefa63fb8UL, 0x71873054UL, -0xb6f2cf3bUL, 0x9f326442UL, 0xcb15a4ccUL, 0xb01a4504UL, 0xf1e47d8dUL, 0x844a1be5UL, -0xbae7dfdcUL, 0x42cbda70UL, 0xcd7dae0aUL, 0x57e85b7aUL, 0xd53f5af6UL, 0x20cf4d8cUL, -0xcea4d428UL, 0x79d130a4UL, 0x3486ebfbUL, 0x33d3cddcUL, 0x77853b53UL, 0x37effcb5UL, -0xc5068778UL, 0xe580b3e6UL, 0x4e68b8f4UL, 0xc5c8b37eUL, 0x0d809ea2UL, 0x398feb7cUL, -0x132a4f94UL, 0x43b7950eUL, 0x2fee7d1cUL, 0x223613bdUL, 0xdd06caa2UL, 0x37df932bUL, -0xc4248289UL, 0xacf3ebc3UL, 0x5715f6b7UL, 0xef3478ddUL, 0xf267616fUL, 0xc148cbe4UL, -0x9052815eUL, 0x5e410fabUL, 0xb48a2465UL, 0x2eda7fa4UL, 0xe87b40e4UL, 0xe98ea084UL, -0x5889e9e1UL, 0xefd390fcUL, 0xdd07d35bUL, 0xdb485694UL, 0x38d7e5b2UL, 0x57720101UL, -0x730edebcUL, 0x5b643113UL, 0x94917e4fUL, 0x503c2fbaUL, 0x646f1282UL, 0x7523d24aUL, -0xe0779695UL, 0xf9c17a8fUL, 0x7a5b2121UL, 0xd187b896UL, 0x29263a4dUL, 0xba510cdfUL, -0x81f47c9fUL, 0xad1163edUL, 0xea7b5965UL, 0x1a00726eUL, 0x11403092UL, 0x00da6d77UL, -0x4a0cdd61UL, 0xad1f4603UL, 0x605bdfb0UL, 0x9eedc364UL, 0x22ebe6a8UL, 0xcee7d28aUL, -0xa0e736a0UL, 0x5564a6b9UL, 0x10853209UL, 0xc7eb8f37UL, 0x2de705caUL, 0x8951570fUL, -0xdf09822bUL, 0xbd691a6cUL, 0xaa12e4f2UL, 0x87451c0fUL, 0xe0f6a27aUL, 0x3ada4819UL, -0x4cf1764fUL, 0x0d771c2bUL, 0x67cdb156UL, 0x350d8384UL, 0x5938fa0fUL, 0x42399ef3UL, -0x36997b07UL, 0x0e84093dUL, 0x4aa93e61UL, 0x8360d87bUL, 0x1fa98b0cUL, 0x1149382cUL, -0xe97625a5UL, 0x0614d1b7UL, 0x0e25244bUL, 0x0c768347UL, 0x589e8d82UL, 0x0d2059d1UL, -0xa466bb1eUL, 0xf8da0a82UL, 0x04f19130UL, 0xba6e4ec0UL, 0x99265164UL, 0x1ee7230dUL, +0xe216300dUL, 0xbbddfffcUL, 0xa7ebdabdUL, 0x35648095UL, 0x7789f8b7UL, 0xe6c1121bUL, +0x0e241600UL, 0x052ce8b5UL, 0x11a9cfb0UL, 0xe5952f11UL, 0xece7990aUL, 0x9386d174UL, +0x2a42931cUL, 0x76e38111UL, 0xb12def3aUL, 0x37ddddfcUL, 0xde9adeb1UL, 0x0a0cc32cUL, +0xbe197029UL, 0x84a00940UL, 0xbb243a0fUL, 0xb4d137cfUL, 0xb44e79f0UL, 0x049eedfdUL, +0x0b15a15dUL, 0x480d3168UL, 0x8bbbde5aUL, 0x669ded42UL, 0xc7ece831UL, 0x3f8f95e7UL, +0x72df191bUL, 0x7580330dUL, 0x94074251UL, 0x5c7dcdfaUL, 0xabbe6d63UL, 0xaa402164UL, +0xb301d40aUL, 0x02e7d1caUL, 0x53571daeUL, 0x7a3182a2UL, 0x12a8ddecUL, 0xfdaa335dUL, +0x176f43e8UL, 0x71fb46d4UL, 0x38129022UL, 0xce949ad4UL, 0xb84769adUL, 0x965bd862UL, +0x82f3d055UL, 0x66fb9767UL, 0x15b80b4eUL, 0x1d5b47a0UL, 0x4cfde06fUL, 0xc28ec4b8UL, +0x57e8726eUL, 0x647a78fcUL, 0x99865d44UL, 0x608bd593UL, 0x6c200e03UL, 0x39dc5ff6UL, +0x5d0b00a3UL, 0xae63aff2UL, 0x7e8bd632UL, 0x70108c0cUL, 0xbbd35049UL, 0x2998df04UL, +0x980cf42aUL, 0x9b6df491UL, 0x9e7edd53UL, 0x06918548UL, 0x58cb7e07UL, 0x3b74ef2eUL, +0x522fffb1UL, 0xd24708ccUL, 0x1c7e27cdUL, 0xa4eb215bUL, 0x3cf1d2e2UL, 0x19b47a38UL, +0x424f7618UL, 0x35856039UL, 0x9d17dee7UL, 0x27eb35e6UL, 0xc9aff67bUL, 0x36baf5b8UL, +0x09c467cdUL, 0xc18910b1UL, 0xe11dbf7bUL, 0x06cd1af8UL, 0x7170c608UL, 0x2d5e3354UL, +0xd4de495aUL, 0x64c6d006UL, 0xbcc0c62cUL, 0x3dd00db3UL, 0x708f8f34UL, 0x77d51b42UL, +0x264f620fUL, 0x24b8d2bfUL, 0x15c1b79eUL, 0x46a52564UL, 0xf8d7e54eUL, 0x3e378160UL, +0x7895cda5UL, 0x859c15a5UL, 0xe6459788UL, 0xc37bc75fUL, 0xdb07ba0cUL, 0x0676a3abUL, +0x7f229b1eUL, 0x31842e7bUL, 0x24259fd7UL, 0xf8bef472UL, 0x835ffcb8UL, 0x6df4c1f2UL, +0x96f5b195UL, 0xfd0af0fcUL, 0xb0fe134cUL, 0xe2506d3dUL, 0x4f9b12eaUL, 0xf215f225UL, +0xa223736fUL, 0x9fb4c428UL, 0x25d04979UL, 0x34c713f8UL, 0xc4618187UL, 0xea7a6e98UL, +0x7cd16efcUL, 0x1436876cUL, 0xf1544107UL, 0xbedeee14UL, 0x56e9af27UL, 0xa04aa441UL, +0x3cf7c899UL, 0x92ecbae6UL, 0xdd67016dUL, 0x151682ebUL, 0xa842eedfUL, 0xfdba60b4UL, +0xf1907b75UL, 0x20e3030fUL, 0x24d8c29eUL, 0xe139673bUL, 0xefa63fb8UL, 0x71873054UL, +0xb6f2cf3bUL, 0x9f326442UL, 0xcb15a4ccUL, 0xb01a4504UL, 0xf1e47d8dUL, 0x844a1be5UL, +0xbae7dfdcUL, 0x42cbda70UL, 0xcd7dae0aUL, 0x57e85b7aUL, 0xd53f5af6UL, 0x20cf4d8cUL, +0xcea4d428UL, 0x79d130a4UL, 0x3486ebfbUL, 0x33d3cddcUL, 0x77853b53UL, 0x37effcb5UL, +0xc5068778UL, 0xe580b3e6UL, 0x4e68b8f4UL, 0xc5c8b37eUL, 0x0d809ea2UL, 0x398feb7cUL, +0x132a4f94UL, 0x43b7950eUL, 0x2fee7d1cUL, 0x223613bdUL, 0xdd06caa2UL, 0x37df932bUL, +0xc4248289UL, 0xacf3ebc3UL, 0x5715f6b7UL, 0xef3478ddUL, 0xf267616fUL, 0xc148cbe4UL, +0x9052815eUL, 0x5e410fabUL, 0xb48a2465UL, 0x2eda7fa4UL, 0xe87b40e4UL, 0xe98ea084UL, +0x5889e9e1UL, 0xefd390fcUL, 0xdd07d35bUL, 0xdb485694UL, 0x38d7e5b2UL, 0x57720101UL, +0x730edebcUL, 0x5b643113UL, 0x94917e4fUL, 0x503c2fbaUL, 0x646f1282UL, 0x7523d24aUL, +0xe0779695UL, 0xf9c17a8fUL, 0x7a5b2121UL, 0xd187b896UL, 0x29263a4dUL, 0xba510cdfUL, +0x81f47c9fUL, 0xad1163edUL, 0xea7b5965UL, 0x1a00726eUL, 0x11403092UL, 0x00da6d77UL, +0x4a0cdd61UL, 0xad1f4603UL, 0x605bdfb0UL, 0x9eedc364UL, 0x22ebe6a8UL, 0xcee7d28aUL, +0xa0e736a0UL, 0x5564a6b9UL, 0x10853209UL, 0xc7eb8f37UL, 0x2de705caUL, 0x8951570fUL, +0xdf09822bUL, 0xbd691a6cUL, 0xaa12e4f2UL, 0x87451c0fUL, 0xe0f6a27aUL, 0x3ada4819UL, +0x4cf1764fUL, 0x0d771c2bUL, 0x67cdb156UL, 0x350d8384UL, 0x5938fa0fUL, 0x42399ef3UL, +0x36997b07UL, 0x0e84093dUL, 0x4aa93e61UL, 0x8360d87bUL, 0x1fa98b0cUL, 0x1149382cUL, +0xe97625a5UL, 0x0614d1b7UL, 0x0e25244bUL, 0x0c768347UL, 0x589e8d82UL, 0x0d2059d1UL, +0xa466bb1eUL, 0xf8da0a82UL, 0x04f19130UL, 0xba6e4ec0UL, 0x99265164UL, 0x1ee7230dUL, 0x50b2ad80UL, 0xeaee6801UL, 0x8db2a283UL, 0xea8bf59eUL}; /* returns the i'th byte of a variable */ #ifdef _MSC_VER #define GB(x, i) ((unsigned char)((x[(15-i)>>2])>>(unsigned)(8*((15-i)&3)))) -#else +#else #define GB(x, i) (((x[(15-i)>>2])>>(unsigned)(8*((15-i)&3)))&255) -#endif +#endif - /** - Initialize the LTC_CAST5 block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ -#ifdef LTC_CLEAN_STACK -static int s_cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) +#ifdef CLEAN_STACK +static int _cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) #else int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) #endif @@ -407,13 +401,13 @@ int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ unsigned char buf[16]; int y, i; - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); if (num_rounds != 12 && num_rounds != 16 && num_rounds != 0) { - return CRYPT_INVALID_ROUNDS; + return CRYPT_INVALID_ROUNDS; } - + if (num_rounds == 12 && keylen > 10) { return CRYPT_INVALID_ROUNDS; } @@ -472,165 +466,149 @@ int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ skey->cast5.keylen = keylen; -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK zeromem(buf, sizeof(buf)); zeromem(x, sizeof(x)); zeromem(z, sizeof(z)); -#endif +#endif return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { int z; - z = s_cast5_setup(key, keylen, num_rounds, skey); + z = _cast5_setup(key, keylen, num_rounds, skey); burn_stack(sizeof(ulong32)*8 + 16 + sizeof(int)*2); return z; } #endif -#define FI cast5_FI -static LTC_INLINE ulong32 FI(ulong32 R, ulong32 Km, ulong32 Kr) +#ifdef _MSC_VER + #define INLINE __inline +#else + #define INLINE +#endif + +INLINE static ulong32 FI(ulong32 R, ulong32 Km, ulong32 Kr) { ulong32 I; I = (Km + R); I = ROL(I, Kr); - return ((S1[LTC_BYTE(I, 3)] ^ S2[LTC_BYTE(I,2)]) - S3[LTC_BYTE(I,1)]) + S4[LTC_BYTE(I,0)]; + return ((S1[byte(I, 3)] ^ S2[byte(I,2)]) - S3[byte(I,1)]) + S4[byte(I,0)]; } - -static LTC_INLINE ulong32 FII(ulong32 R, ulong32 Km, ulong32 Kr) + +INLINE static ulong32 FII(ulong32 R, ulong32 Km, ulong32 Kr) { ulong32 I; I = (Km ^ R); I = ROL(I, Kr); - return ((S1[LTC_BYTE(I, 3)] - S2[LTC_BYTE(I,2)]) + S3[LTC_BYTE(I,1)]) ^ S4[LTC_BYTE(I,0)]; + return ((S1[byte(I, 3)] - S2[byte(I,2)]) + S3[byte(I,1)]) ^ S4[byte(I,0)]; } -static LTC_INLINE ulong32 FIII(ulong32 R, ulong32 Km, ulong32 Kr) +INLINE static ulong32 FIII(ulong32 R, ulong32 Km, ulong32 Kr) { ulong32 I; I = (Km - R); I = ROL(I, Kr); - return ((S1[LTC_BYTE(I, 3)] + S2[LTC_BYTE(I,2)]) ^ S3[LTC_BYTE(I,1)]) - S4[LTC_BYTE(I,0)]; + return ((S1[byte(I, 3)] + S2[byte(I,2)]) ^ S3[byte(I,1)]) - S4[byte(I,0)]; } -/** - Encrypts a block of text with LTC_CAST5 - @param pt The input plaintext (8 bytes) - @param ct The output ciphertext (8 bytes) - @param skey The key as scheduled -*/ -#ifdef LTC_CLEAN_STACK -static int s_cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +#ifdef CLEAN_STACK +static void _cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) #else -int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +void cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) #endif { ulong32 R, L; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(key != NULL); - LOAD32H(L,&pt[0]); + LOAD32H(L,&pt[0]); LOAD32H(R,&pt[4]); - L ^= FI(R, skey->cast5.K[0], skey->cast5.K[16]); - R ^= FII(L, skey->cast5.K[1], skey->cast5.K[17]); - L ^= FIII(R, skey->cast5.K[2], skey->cast5.K[18]); - R ^= FI(L, skey->cast5.K[3], skey->cast5.K[19]); - L ^= FII(R, skey->cast5.K[4], skey->cast5.K[20]); - R ^= FIII(L, skey->cast5.K[5], skey->cast5.K[21]); - L ^= FI(R, skey->cast5.K[6], skey->cast5.K[22]); - R ^= FII(L, skey->cast5.K[7], skey->cast5.K[23]); - L ^= FIII(R, skey->cast5.K[8], skey->cast5.K[24]); - R ^= FI(L, skey->cast5.K[9], skey->cast5.K[25]); - L ^= FII(R, skey->cast5.K[10], skey->cast5.K[26]); - R ^= FIII(L, skey->cast5.K[11], skey->cast5.K[27]); - if (skey->cast5.keylen > 10) { - L ^= FI(R, skey->cast5.K[12], skey->cast5.K[28]); - R ^= FII(L, skey->cast5.K[13], skey->cast5.K[29]); - L ^= FIII(R, skey->cast5.K[14], skey->cast5.K[30]); - R ^= FI(L, skey->cast5.K[15], skey->cast5.K[31]); + L ^= FI(R, key->cast5.K[0], key->cast5.K[16]); + R ^= FII(L, key->cast5.K[1], key->cast5.K[17]); + L ^= FIII(R, key->cast5.K[2], key->cast5.K[18]); + R ^= FI(L, key->cast5.K[3], key->cast5.K[19]); + L ^= FII(R, key->cast5.K[4], key->cast5.K[20]); + R ^= FIII(L, key->cast5.K[5], key->cast5.K[21]); + L ^= FI(R, key->cast5.K[6], key->cast5.K[22]); + R ^= FII(L, key->cast5.K[7], key->cast5.K[23]); + L ^= FIII(R, key->cast5.K[8], key->cast5.K[24]); + R ^= FI(L, key->cast5.K[9], key->cast5.K[25]); + L ^= FII(R, key->cast5.K[10], key->cast5.K[26]); + R ^= FIII(L, key->cast5.K[11], key->cast5.K[27]); + if (key->cast5.keylen > 10) { + L ^= FI(R, key->cast5.K[12], key->cast5.K[28]); + R ^= FII(L, key->cast5.K[13], key->cast5.K[29]); + L ^= FIII(R, key->cast5.K[14], key->cast5.K[30]); + R ^= FI(L, key->cast5.K[15], key->cast5.K[31]); } STORE32H(R,&ct[0]); STORE32H(L,&ct[4]); - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +#ifdef CLEAN_STACK +void cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) { - int err = s_cast5_ecb_encrypt(pt,ct,skey); + _cast5_ecb_encrypt(pt,ct,key); burn_stack(sizeof(ulong32)*3); - return err; } #endif -/** - Decrypts a block of text with LTC_CAST5 - @param ct The input ciphertext (8 bytes) - @param pt The output plaintext (8 bytes) - @param skey The key as scheduled -*/ -#ifdef LTC_CLEAN_STACK -static int s_cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +#ifdef CLEAN_STACK +static void _cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) #else -int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +void cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) #endif { ulong32 R, L; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(key != NULL); - LOAD32H(R,&ct[0]); + LOAD32H(R,&ct[0]); LOAD32H(L,&ct[4]); - if (skey->cast5.keylen > 10) { - R ^= FI(L, skey->cast5.K[15], skey->cast5.K[31]); - L ^= FIII(R, skey->cast5.K[14], skey->cast5.K[30]); - R ^= FII(L, skey->cast5.K[13], skey->cast5.K[29]); - L ^= FI(R, skey->cast5.K[12], skey->cast5.K[28]); + if (key->cast5.keylen > 10) { + R ^= FI(L, key->cast5.K[15], key->cast5.K[31]); + L ^= FIII(R, key->cast5.K[14], key->cast5.K[30]); + R ^= FII(L, key->cast5.K[13], key->cast5.K[29]); + L ^= FI(R, key->cast5.K[12], key->cast5.K[28]); } - R ^= FIII(L, skey->cast5.K[11], skey->cast5.K[27]); - L ^= FII(R, skey->cast5.K[10], skey->cast5.K[26]); - R ^= FI(L, skey->cast5.K[9], skey->cast5.K[25]); - L ^= FIII(R, skey->cast5.K[8], skey->cast5.K[24]); - R ^= FII(L, skey->cast5.K[7], skey->cast5.K[23]); - L ^= FI(R, skey->cast5.K[6], skey->cast5.K[22]); - R ^= FIII(L, skey->cast5.K[5], skey->cast5.K[21]); - L ^= FII(R, skey->cast5.K[4], skey->cast5.K[20]); - R ^= FI(L, skey->cast5.K[3], skey->cast5.K[19]); - L ^= FIII(R, skey->cast5.K[2], skey->cast5.K[18]); - R ^= FII(L, skey->cast5.K[1], skey->cast5.K[17]); - L ^= FI(R, skey->cast5.K[0], skey->cast5.K[16]); + R ^= FIII(L, key->cast5.K[11], key->cast5.K[27]); + L ^= FII(R, key->cast5.K[10], key->cast5.K[26]); + R ^= FI(L, key->cast5.K[9], key->cast5.K[25]); + L ^= FIII(R, key->cast5.K[8], key->cast5.K[24]); + R ^= FII(L, key->cast5.K[7], key->cast5.K[23]); + L ^= FI(R, key->cast5.K[6], key->cast5.K[22]); + R ^= FIII(L, key->cast5.K[5], key->cast5.K[21]); + L ^= FII(R, key->cast5.K[4], key->cast5.K[20]); + R ^= FI(L, key->cast5.K[3], key->cast5.K[19]); + L ^= FIII(R, key->cast5.K[2], key->cast5.K[18]); + R ^= FII(L, key->cast5.K[1], key->cast5.K[17]); + L ^= FI(R, key->cast5.K[0], key->cast5.K[16]); STORE32H(L,&pt[0]); STORE32H(R,&pt[4]); - - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +#ifdef CLEAN_STACK +void cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) { - int err = s_cast5_ecb_decrypt(ct,pt,skey); + _cast5_ecb_decrypt(ct,pt,key); burn_stack(sizeof(ulong32)*3); - return err; } #endif -/** - Performs a self-test of the LTC_CAST5 block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ int cast5_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else static const struct { int keylen; unsigned char key[16]; @@ -663,8 +641,7 @@ int cast5_test(void) } cast5_ecb_encrypt(tests[i].pt, tmp[0], &key); cast5_ecb_decrypt(tmp[0], tmp[1], &key); - if ((ltc_compare_testvector(tmp[0], 8, tests[i].ct, 8, "CAST5 Encrypt", i) != 0) || - (ltc_compare_testvector(tmp[1], 8, tests[i].pt, 8, "CAST5 Decrypt", i) != 0)) { + if ((memcmp(tmp[0], tests[i].ct, 8) != 0) || (memcmp(tmp[1], tests[i].pt, 8) != 0)) { return CRYPT_FAIL_TESTVECTOR; } /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ @@ -672,38 +649,21 @@ int cast5_test(void) for (y = 0; y < 1000; y++) cast5_ecb_encrypt(tmp[0], tmp[0], &key); for (y = 0; y < 1000; y++) cast5_ecb_decrypt(tmp[0], tmp[0], &key); for (y = 0; y < 8; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; - + } return CRYPT_OK; #endif } -/** Terminate the context - @param skey The scheduled key -*/ -void cast5_done(symmetric_key *skey) +int cast5_keysize(int *desired_keysize) { - LTC_UNUSED_PARAM(skey); -} - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int cast5_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize < 5) { + _ARGCHK(desired_keysize != NULL); + if (*desired_keysize < 5) { return CRYPT_INVALID_KEYSIZE; - } - if (*keysize > 16) { - *keysize = 16; + } else if (*desired_keysize > 16) { + *desired_keysize = 16; } return CRYPT_OK; -} - -#undef GB -#undef FI +} #endif diff --git a/cbc_decrypt.c b/cbc_decrypt.c new file mode 100644 index 00000000..3f4958ac --- /dev/null +++ b/cbc_decrypt.c @@ -0,0 +1,57 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef CBC + +int cbc_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_CBC *cbc) +{ + int x, err; + unsigned char tmp[MAXBLOCKSIZE], tmp2[MAXBLOCKSIZE]; + + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(cbc != NULL); + + /* decrypt the block from ct into tmp */ + if ((err = cipher_is_valid(cbc->cipher)) != CRYPT_OK) { + return err; + } + _ARGCHK(cipher_descriptor[cbc->cipher].ecb_decrypt != NULL); + + /* is blocklen valid? */ + if (cbc->blocklen < 0 || cbc->blocklen > (int)sizeof(cbc->IV)) { + return CRYPT_INVALID_ARG; + } + + /* decrypt and xor IV against the plaintext of the previous step */ + cipher_descriptor[cbc->cipher].ecb_decrypt(ct, tmp, &cbc->key); + for (x = 0; x < cbc->blocklen; x++) { + /* copy CT in case ct == pt */ + tmp2[x] = ct[x]; + + /* actually decrypt the byte */ + pt[x] = tmp[x] ^ cbc->IV[x]; + } + + /* replace IV with this current ciphertext */ + for (x = 0; x < cbc->blocklen; x++) { + cbc->IV[x] = tmp2[x]; + } + #ifdef CLEAN_STACK + zeromem(tmp, sizeof(tmp)); + zeromem(tmp2, sizeof(tmp2)); + #endif + return CRYPT_OK; +} + +#endif + diff --git a/cbc_encrypt.c b/cbc_encrypt.c new file mode 100644 index 00000000..8db5b5b9 --- /dev/null +++ b/cbc_encrypt.c @@ -0,0 +1,52 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef CBC + +int cbc_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_CBC *cbc) +{ + int x, err; + unsigned char tmp[MAXBLOCKSIZE]; + + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(cbc != NULL); + + if ((err = cipher_is_valid(cbc->cipher)) != CRYPT_OK) { + return err; + } + + /* is blocklen valid? */ + if (cbc->blocklen < 0 || cbc->blocklen > (int)sizeof(cbc->IV)) { + return CRYPT_INVALID_ARG; + } + + /* xor IV against plaintext */ + for (x = 0; x < cbc->blocklen; x++) { + tmp[x] = pt[x] ^ cbc->IV[x]; + } + + /* encrypt */ + cipher_descriptor[cbc->cipher].ecb_encrypt(tmp, ct, &cbc->key); + + /* store IV [ciphertext] for a future block */ + for (x = 0; x < cbc->blocklen; x++) { + cbc->IV[x] = ct[x]; + } + + #ifdef CLEAN_STACK + zeromem(tmp, sizeof(tmp)); + #endif + return CRYPT_OK; +} + +#endif diff --git a/cbc_getiv.c b/cbc_getiv.c new file mode 100644 index 00000000..89356a04 --- /dev/null +++ b/cbc_getiv.c @@ -0,0 +1,30 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef CBC + +int cbc_getiv(unsigned char *IV, unsigned long *len, symmetric_CBC *cbc) +{ + _ARGCHK(IV != NULL); + _ARGCHK(len != NULL); + _ARGCHK(cbc != NULL); + if ((unsigned long)cbc->blocklen > *len) { + return CRYPT_BUFFER_OVERFLOW; + } + XMEMCPY(IV, cbc->IV, cbc->blocklen); + *len = cbc->blocklen; + + return CRYPT_OK; +} + +#endif diff --git a/cbc_setiv.c b/cbc_setiv.c new file mode 100644 index 00000000..9fa562b4 --- /dev/null +++ b/cbc_setiv.c @@ -0,0 +1,28 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef CBC + +int cbc_setiv(const unsigned char *IV, unsigned long len, symmetric_CBC *cbc) +{ + _ARGCHK(IV != NULL); + _ARGCHK(cbc != NULL); + if (len != (unsigned long)cbc->blocklen) { + return CRYPT_INVALID_ARG; + } + XMEMCPY(cbc->IV, IV, len); + return CRYPT_OK; +} + +#endif + diff --git a/cbc_start.c b/cbc_start.c new file mode 100644 index 00000000..f0d5fb66 --- /dev/null +++ b/cbc_start.c @@ -0,0 +1,43 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef CBC + +int cbc_start(int cipher, const unsigned char *IV, const unsigned char *key, + int keylen, int num_rounds, symmetric_CBC *cbc) +{ + int x, err; + + _ARGCHK(IV != NULL); + _ARGCHK(key != NULL); + _ARGCHK(cbc != NULL); + + /* bad param? */ + if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { + return err; + } + + /* setup cipher */ + if ((err = cipher_descriptor[cipher].setup(key, keylen, num_rounds, &cbc->key)) != CRYPT_OK) { + return err; + } + + /* copy IV */ + cbc->blocklen = cipher_descriptor[cipher].block_length; + cbc->cipher = cipher; + for (x = 0; x < cbc->blocklen; x++) { + cbc->IV[x] = IV[x]; + } + return CRYPT_OK; +} + +#endif diff --git a/cfb_decrypt.c b/cfb_decrypt.c new file mode 100644 index 00000000..1e1d3c01 --- /dev/null +++ b/cfb_decrypt.c @@ -0,0 +1,48 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef CFB + +int cfb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CFB *cfb) +{ + int err; + + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(cfb != NULL); + + if ((err = cipher_is_valid(cfb->cipher)) != CRYPT_OK) { + return err; + } + + /* is blocklen/padlen valid? */ + if (cfb->blocklen < 0 || cfb->blocklen > (int)sizeof(cfb->IV) || + cfb->padlen < 0 || cfb->padlen > (int)sizeof(cfb->pad)) { + return CRYPT_INVALID_ARG; + } + + while (len-- > 0) { + if (cfb->padlen == cfb->blocklen) { + cipher_descriptor[cfb->cipher].ecb_encrypt(cfb->pad, cfb->IV, &cfb->key); + cfb->padlen = 0; + } + cfb->pad[cfb->padlen] = *ct; + *pt = *ct ^ cfb->IV[cfb->padlen]; + ++pt; + ++ct; + ++cfb->padlen; + } + return CRYPT_OK; +} + +#endif + diff --git a/cfb_encrypt.c b/cfb_encrypt.c new file mode 100644 index 00000000..80169598 --- /dev/null +++ b/cfb_encrypt.c @@ -0,0 +1,46 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef CFB + +int cfb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CFB *cfb) +{ + int err; + + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(cfb != NULL); + + if ((err = cipher_is_valid(cfb->cipher)) != CRYPT_OK) { + return err; + } + + /* is blocklen/padlen valid? */ + if (cfb->blocklen < 0 || cfb->blocklen > (int)sizeof(cfb->IV) || + cfb->padlen < 0 || cfb->padlen > (int)sizeof(cfb->pad)) { + return CRYPT_INVALID_ARG; + } + + while (len-- > 0) { + if (cfb->padlen == cfb->blocklen) { + cipher_descriptor[cfb->cipher].ecb_encrypt(cfb->pad, cfb->IV, &cfb->key); + cfb->padlen = 0; + } + cfb->pad[cfb->padlen] = (*ct = *pt ^ cfb->IV[cfb->padlen]); + ++pt; + ++ct; + ++cfb->padlen; + } + return CRYPT_OK; +} + +#endif diff --git a/cfb_getiv.c b/cfb_getiv.c new file mode 100644 index 00000000..c54f70f2 --- /dev/null +++ b/cfb_getiv.c @@ -0,0 +1,30 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef CFB + +int cfb_getiv(unsigned char *IV, unsigned long *len, symmetric_CFB *cfb) +{ + _ARGCHK(IV != NULL); + _ARGCHK(len != NULL); + _ARGCHK(cfb != NULL); + if ((unsigned long)cfb->blocklen > *len) { + return CRYPT_BUFFER_OVERFLOW; + } + XMEMCPY(IV, cfb->IV, cfb->blocklen); + *len = cfb->blocklen; + + return CRYPT_OK; +} + +#endif diff --git a/cfb_setiv.c b/cfb_setiv.c new file mode 100644 index 00000000..ddbbe598 --- /dev/null +++ b/cfb_setiv.c @@ -0,0 +1,39 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef CFB + +int cfb_setiv(const unsigned char *IV, unsigned long len, symmetric_CFB *cfb) +{ + int err; + + _ARGCHK(IV != NULL); + _ARGCHK(cfb != NULL); + + if ((err = cipher_is_valid(cfb->cipher)) != CRYPT_OK) { + return err; + } + + if (len != (unsigned long)cfb->blocklen) { + return CRYPT_INVALID_ARG; + } + + /* force next block */ + cfb->padlen = 0; + cipher_descriptor[cfb->cipher].ecb_encrypt(IV, cfb->IV, &cfb->key); + + return CRYPT_OK; +} + +#endif + diff --git a/cfb_start.c b/cfb_start.c new file mode 100644 index 00000000..d471412a --- /dev/null +++ b/cfb_start.c @@ -0,0 +1,47 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef CFB + +int cfb_start(int cipher, const unsigned char *IV, const unsigned char *key, + int keylen, int num_rounds, symmetric_CFB *cfb) +{ + int x, err; + + _ARGCHK(IV != NULL); + _ARGCHK(key != NULL); + _ARGCHK(cfb != NULL); + + if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { + return err; + } + + + /* copy data */ + cfb->cipher = cipher; + cfb->blocklen = cipher_descriptor[cipher].block_length; + for (x = 0; x < cfb->blocklen; x++) + cfb->IV[x] = IV[x]; + + /* init the cipher */ + if ((err = cipher_descriptor[cipher].setup(key, keylen, num_rounds, &cfb->key)) != CRYPT_OK) { + return err; + } + + /* encrypt the IV */ + cipher_descriptor[cfb->cipher].ecb_encrypt(cfb->IV, cfb->IV, &cfb->key); + cfb->padlen = 0; + + return CRYPT_OK; +} + +#endif diff --git a/changes b/changes index dc56d08d..e74b1d83 100644 --- a/changes +++ b/changes @@ -1,606 +1,3 @@ -July 1st, 2018 -v1.18.2 - -- Fix Side Channel Based ECDSA Key Extraction (CVE-2018-12437) (PR #408) - -- Fix potential stack overflow when DER flexi-decoding (CVE-2018-0739) (PR #373) - -- Fix two-key 3DES (PR #390) - -- Fix accelerated CTR mode (PR #359) - -- Fix Fortuna PRNG (PR #363) - -- Fix compilation on platforms where cc doesn't point to gcc (PR #382) - -- Fix using the wrong environment variable LT instead of LIBTOOL (PR #392) - -- Fix build on platforms where the compiler provides __WCHAR_MAX__ but wchar.h is not available (PR #390) - -- Fix & re-factor crypt_list_all_sizes() and crypt_list_all_constants() (PR #414) - -- Minor fixes (PR's #350 #351 #375 #377 #378 #379) - -January 22nd, 2018 -v1.18.1 - -- Fix wrong SHA3 blocksizes, thanks to Claus Fischer for reporting this via Mail (PR #329) - -- Fix NULL-pointer dereference in `ccm_memory()` with LTC_CLEAN_STACK enabled (PR #327) - -- Fix `ccm_process()` being unable to process input buffers longer than 256 bytes (PR #326) - -- Fix the `register_all_{ciphers,hashes,prngs}()` return values (PR #316) - -- Fix some typos, warnings and duplicate prototypes in code & doc (PR's #310 #320 #321 #335) - -- Fix possible undefined behavior with LTC_PTHREAD (PR #337) - -- Fix some DER bugs (PR #339) - -- Fix CTR-mode when accelerator is used (OP-TEE/optee_os #2086) - -- Fix installation procedure (Issue #340) - -October 10th, 2017 -v1.18.0 - -- Bugfix multi2 - -- Bugfix Noekeon - -- Bugfix XTEA - -- Bugfix rng_get_bytes() on windows where we could read from c:\dev\random - -- Fixed the Bleichbacher Signature attack in PKCS#1 v1.5 EMSA, thanks to Alex Dent - -- Fixed a potential cache-based timing attack in CCM, thanks to Sebastian Verschoor - -- Fix GCM counter reuse and potential timing attacks in EAX, OCB and OCBv3, - thanks to Raphaël Jamet - -- Implement hardened RSA operations when CRT is used - -- Enabled timing resistant calculations of ECC and RSA operations per default - -- Applied some patches from the OLPC project regarding PKCS#1 and preventing - the hash algorithms from overflowing - -- Larry Bugbee contributed the necessary stuff to more easily call libtomcrypt - from a dynamic language like Python, as shown in his pyTomCrypt - -- Nikos Mavrogiannopoulos contributed RSA blinding and export of RSA and DSA keys - in OpenSSL/GnuTLS compatible format - -- Patrick Pelletier contributed a smart volley of patches - -- Christopher Brown contributed some patches and additions to ASN.1/DER - -- Pascal Brand of STMicroelectronics contributed patches regarding CCM, the - XTS mode and RSA private key operations with keys without CRT parameters - -- RC2 now also works with smaller key-sizes - -- Improved/extended several tests & demos - -- Hardened DSA and RSA by testing (through Karel's perl-CryptX) - against Google's "Wycheproof" and Kudelski Security's "CDF" - -- Fixed all compiler warnings - -- Fixed several build issues on FreeBSD, NetBSD, Linux x32 ABI, HP-UX/IA64, - Mac OS X, Windows (32&64bit, Cygwin, MingW & MSVC) ... - -- Re-worked all makefiles - -- Re-worked most PRNG's - -- The code is now verified by a linter, thanks to Francois Perrad - -- Documentation (crypt.pdf) is now built deterministically, thanks to Michael Stapelberg - -- Add Adler32 and CRC32 checksum algorithms - -- Add Base64-URL de-/encoding and some strict variants - -- Add Blake2b & Blake2s (hash & mac), thanks to Kelvin Sherlock - -- Add Camellia block cipher - -- Add ChaCha (stream cipher), Poly1305 (mac), ChaCha20Poly1305 (encauth) - -- Add constant-time mem-compare mem_neq() - -- Add DER GeneralizedTime de-/encoding - -- Add DSA and ECC key generation FIPS-186-4 compliance - -- Add HKDF, thanks to RyanC (especially for also providing documentation :-) ) - -- Add OCBv3 - -- Add PKCS#1 v1.5 mode of SSL3.0 - -- Add PKCS#1 testvectors from RSA - -- Add PKCS#8 & X.509 import for RSA keys - -- Add stream cipher API - -- Add SHA3 & SHAKE - -- Add SHA512/256 and SHA512/224 - -- Add Triple-DES 2-key mode, thanks to Paul Howarth - -- Brought back Diffie-Hellman - -May 12th, 2007 -v1.17 -- Cryptography Research Inc. contributed another small volley of patches, one to fix __WCHAR_DEFINED__ for BSD platforms, - another to silence MSVC warnings. - -- Added LTC_XCBC_PURE to XCBC mode which lets you use it in three-key mode. - -- [CRI] Added libtomcrypt.dsp for Visual C++ users. - -- [CRI] Added more functions for manipulating the ECC fixed point cache (including saving and loading) - -- [CRI] Modified ecc_make_key() to always produce keys smaller than base point order, for standards-compliance - -- Elliptic Semiconductor contributed XTS chaining mode to the cipher suite (subsequently optimized it) - -- Fixed xcbc_init() keylen when using single key mode. - -- Bruce Fortune pointed out a typo in the hmac_process() description in the manual. Fixed. - -- Added variable width counter support to CTR mode - -- Fixed CMAC (aka OMAC) when using 64-bit block ciphers and LTC_FAST ... my bad. - -- Fixed bug in ecc_is_valid() that would basically always return true - -- renamed a lot of macros to add the LTC_ prefix [e.g. RIJNDAEL => LTC_RIJNDAEL] - -December 16th, 2006 -v1.16 -- Brian Gladman pointed out that a recent change to GCM broke how the IV was handled. Currently the code complies against his test vectors - so the code should be considered frozen now. - -- Trevor from Cryptography Research Inc. submitted patches to convert the ECC code to be generic allowing curve parameters to be submitted - at runtime. - -- Fixed various doxygen comments - -- Added UTF8 support to the ASN1 code - -- Fixed STOREXXH macros for x86 platforms (Fix found at Elliptic Inc.) - -- Added makefile.unix which is BSD compatible, you have to manually tweak it since well I don't use it normally - -- removed a few lingering memcpy's - -- Fixed memory free errors in ecc_sign_hash() that can arise if the mp_init_multi() fails - -- Fixed incorrect return value in pkcs_1_pss_decode() which would correctly set res to 0 (indicating an incorrect signature) but - would return CRYPT_OK to the caller - -- ltc_ecc_mulmod() could leak memory if mp_init(&mu) failed, fixed. Would you believe that ltc_ecc_mulmod_timing() had the same - bug? Also fixed. :-) - -- Added Shamir's trick to the ECC side (defined as LTC_ECC_SHAMIR, enabled by default), gets ~1.34x to ~1.40x faster ECC verifications - -- Added Brian's vector #46 to the GCM code. It catches the ctr counter error from v1.15. Originally I was going to add all of his vectors, - but they're not as easy to parse and I got a lot of other things to do. Regression! - -- Various other small fixes to the ECC code to clean up error handling (I think most of that was from the move in 1.06 to the plugins) - All of the errors were in cleaning up from heap failures. So they were not likely to be triggered in normal usage - Made similar fixes to the RSA and DSA code (my bad) - -- Cryptography Research Inc. contributed a bunch of fixes to silence warnings (with MSVC) w.r.t. assigned data to unsigned char types. - -- Martin Marko suggested some fixes to make the RNG build with WinCE. - -- Updates to the manual for print (some fixes thanks to Martin Marko) - - -November 17th, 2006 -v1.15 -- Andreas Lange found that if sha256_init DID fail in fortuna it wouldn't clean up the state correctly. Thanks. - Fortunately sha256_init cannot fail (as of v1.14) :-) - -- Andreas Lange contributed RMD-256 and RMD-320 code. - -- Removed mutex locks from fortuna_import as they create a deadlock and aren't required anyways [Avi Zelmanovich] - -- Added LTC_NO_PROTOTYPES to avoid prototyping functions like memset/memcpy. Required for fans of GCC 3.3.x - -- David Eder caught a off by one overrun bug in pmac_done() which can be exploited if your output tag buffer is - smaller than the block size of the cipher, e.g. if you have a 4-byte buffer and you tell pmac_done that you want - a 4-byte TAG it will store 4 bytes but return an outlen of 5. - -- Added signatures to the ECC and RSA benchmarks - -- Added LTC_PROFILE to run the PK tests only once in the timing demo (so you can capture events properly) - -- Andreas contributed PKCS #1 v1.5 code that merged cleanly with the existing PKCS code. w00t. - (update: I had to fix it to include the digestInfo and what not. Bad Andreas, bad! hehehe) - -- Fixed a signed variable error in gcm_process() (hard to trigger bug fortunately) - -- Removed all memcmp/memset/memcpy from the source (replaced with X macros) - -- Renamed macros HMAC/OMAC/PMAC to have a LTC_ prefix. If you pass these on the command line please update your makefiles - -- Added XCBC-MAC support [RFC 3566] - -- fixed LOAD32H and LOAD64H to stop putting out that darn warning :-) - -- Added the Korean SEED block cipher [RFC 4269] - -- Added LTC_VALGRIND define which makes SOBER-128 and RC4 a pure PRNG (and not a stream cipher). Useful if you use - Valgrind to debug your code (reported by Andreas Lange) - -- Made SOBER-128 more portable by removing the ASCII key in the test function (my bad, sorry). - -- Martin Mocko pointed out that if you have no PRNGs defined the lib won't build. Fixed, also fixed for if you have no - hashes defined. - -- Sped up F8 mode with LTC_FAST - -- Made CTR mode RFC 3686 compliant (increment counter first), to enable, OR the value LTC_CTR_RFC3686 to the "mode" - parameter you pass to ctr_start(), otherwise it will be LTC compliant (e.g. encrypt then increment) - -- Added ctr_test() to test CTR mode against RFC 3686 - -- Added crypt_fsa() ... O_o - -- Fixed LTC_ECC_TIMING_RESISTANT so it once again builds properly (pt add/dbl are through the plugin now) - -- Added ANSI X9.63 (sec 4.3.6) import/export of public keys (cannot export to compressed formats but will import - hybrid compressed) - -- Added SECP curves for 112, 128, and 160 bits (only the 'r1' curves) - -- Added 3GPP-F9 MAC (thanks to Greg Rose for the test vectors) - -- Added the KASUMI block cipher - -- Added F9/XCBC/OMAC callbacks to the cipher plugin - -- Added RSA PKCS #1 v1.5 signature/encrypt tests to rsa_test.c - -- Fix to yarrow_test() to not call yarrow_done() which is invalid in that context (thanks Valgrind) - -- Christophe Devine pointed out that Anubis would fail on various 64-bit UNIX boxes when "x>>24" was used as an index, we needed - to mask it with 0xFF. Thanks. Fixed. - -August 0x1E, 0x07D6 -v1.14 -- Renamed the chaining mode macros from XXX to LTC_XXX_MODE. Should help avoid polluting the macro name space. - -- clean up of SHA-256 - -- Chris Colman pointed out that der_decode_sequence_* allows LTC_ASN1_SETOF to accept SEQUENCEs and vice versa. - Decoder [non-flexi decoder that is] is more strict now and requires a match. - -- Steffen Jaeckel pointed out a typo in the user manual (re: rsa_exptmod). Fixed. This disproves the notion that - nobody reads it. :-) - -- Made GCM a bit more portable w.r.t. handling the CTR IV (e.g. & with 255) - -- Add LTC_VERBOSE if you really want to see what test is doing :-) - -- Added SSE2 support to GCM [use GCM_TABLES_SSE2 to enable], shaves 2 cycles per byte on Opteron processors - Shaved 4 cycles on a Prescott (Intel P4) - Requires you align your gcm_state on a 16 byte boundary, see gcm_memory() for more info - -- Added missing prototype for f8_test_mode() - -- two fixes to CCM for corner cases [L+noncelen > 15] and fixing the CTR pad to encrypt the CBC-MAC tag - -- Franz Glasner pointed out the ARGTYPE=4 is not actually valid. Fixed. - -- Fixed bug in f8_start() if your key < saltkey unspecified behaviour occurs. :-( - -- Documented F8 mode. Yeah, because you read the manual. - -- Minor updates to the technotes. - - -June 17th, 2006 -v1.13 -- Fixed to fortuna_start() to clean up state if an error occurs. Not really useful at this stage (sha256 can't fail) but useful - if I ever make fortuna pluggable - -- Mike Marin submitted a whole bunch of patches for fixing up the libs on traditional UNIX platforms. Go AIX! Thanks! - -- One of bugs found in the multi demo highlights that at least with gcc you need to pass integers with a UL prefix to ensure - they're unsigned long - -- Updated the FP ECC code to use affine points. It's teh fast. - -- Made it so many functions which return CRYPT_BUFFER_OVERFLOW now also indicate the required buffer size, note that not all functions - do this (most do though). - -- Added F8 chaining mode. It's super neato. - -May 29th, 2006 -v1.12 -- Fixed OID encoder/decoder/length to properly handle the first two parts of an OID, matches 2002 X.690 now. - -- [Wesley Shields] Allows both GMP/LTM and TFM to be defined now. - -- [Wesley Shields] GMP pluggin is cleaner now and doesn't use deprecated symbols. Yipee - -- Added count_lsb_bits to get the number of leading LSB zero bits there are. - -- Fixed a bug in the INTEGER encoders for values of -(256**k)/2 - -- Added BOOLEAN type to ASN.1 thingy-ma-do-hicky - -- Testprof doesn't strictly require GMP ... oops [Nils Durner] - -- Added LTC_CALL and LTC_EXPORT macros in tomcrypt_cfg.h to support various calling and linker conventions - (Thanks to John Kirk from Demonware) - -- In what has to be the best thing since sliced bread I bring you MECC_FP which is the fixed point - ECC point multiplier. It's fast, it's sexy and what's more it's hella fast [did I mention it's fast?] - You can tune it somewhat with FP_LUT (default to 8) for look-up width. - Read section 8.2 of the manual for more info. - It is disabled by default, you'll have to build LTC with it defined to get it. - -- Fixed bug in ecc_test.c (from testprof) to include the 521 [not 512] bit curve. :-) - -April 4th, 2006 -v1.11 -- Removed printf's from lrw_test ... whoops - -- lrw_process now checks the return of the cipher ecb encrypt/decrypt calls - -- lrw_start was not using num_rounds ... - -- Adam Miller reported a bug in the flexi decoder with elements past the end of a sequence. Fixed. - -- Bruce Guenter suggested I use --tag=CC for libtool builds where the compiler may think it's C++. (I applied this to LTM and TFM) - -- Optimized the ECC for TFM a bit by removing the useless "if" statements (most TFM functions don't return error codes) - Actually shaved a good chunk of time off and made the code smaller. By default with TFM the stock LTC point add/dbl functions - will be totally omitted (ECC-256 make key times on a Prescott for old vs. new are 11.03M vs. 9.59M cycles) - -- added missing CVS tags to ltc_ecc_mulmod.c - -- corrected typo in tomcrypt_cfg.h about what the file has been called - -- corrected my address in the user manual. A "bit" out of date. - -- added lrw_gen to tv_gen - -- added GMP plugin, only tested on a AMD64 and x86_32 Gentoo Linux box so be aware - -- made testme.sh runs diff case insensitivityly [whatever...] cuz GMP outputs lowercase satan text - -- added LDFLAGS to the makefile to allow cross porting linking options - -- added lrw_test() to the header file ... whoops - -- changed libtomcrypt.org to libtomcrypt.com .... mumble mumble - -- Updates to detect __STRICT_ANSI__ which is defined in --std=c99 modes (note -ansi is not supported as it lacks long long) so you can - build LTC out of the box with c99 (note: it'll be slower as there is no asm in this case) - -- Updated pelican.c and aes_tab.c to undef tables not-required. The tables are static so both AES and Pelican MAC would have copies. Save a few KB in the final binary. - -- Added LTC_NO_FAST to the makefile.icc to compensate for the fact ICC v9 can't handle it (Pelican MAC fails for instance) - -February 11th, 2006 -v1.10 -- Free ecb/cbc/ctr/lrw structures in timing code by calling the "done" function - -- fixed bug in lrw_process() which would always use the slow update ... - -- vastly sped up gcm_gf_mult() when LTC_FAST is defined. This speeds up LRW and GCM state creation, useful for servers with GCM - -- Removed NLS since there are some attacks against it. - -- fixed memory leak in rsa_import reported by John Kuhns - ++ re-released as the rsa fix was incorrect (bad John bad ... hehehe) and I missed some NULLs in the static descriptor entry for ciphers - -January 26th, 2006 -v1.09 -- Added missing doxygen comments to some of the ASN.1 routines - -- Added "easy button" define LTC_EASY and LTC will build with a subset of all the algos. Reduces build times for typical - configurations. Tunable [see tomcrypt_custom.h] - -- Added some error detection to reg_algs() of the testprof.a library to detect when the PRNG is not setup correctly (took me 10 mins to figure out, PITA!) - -- Similar fixes to timing demo (MD5 not defined when EASY is defined) - -- Added the NLS enc+mac stream cipher from QUALCOMM, disabled for this release, waiting on test vectors - -- Finally added an auto-update script for the makefiles. So when I add new files/dirs it can automatically fix up the makefiles [all four of them...] - -- Added LRW to the list of cipher modes supported - -- cleaned up ciphers definitions to remove cbc/cfb/ofb/ctr/etc from the namespace when not used. - -November 24th, 2005 -v1.08 -- Added SET and SET OF support to the ASN.1 side - -- Fixed up X macros, added QSORT to the mix [thanks SET/SETOF] - -- Added XMEMCMP to the list of X macros - -- In der_decode_sequence() the SHORT_INTEGER type was not being handled correctly [oddly enough it worked just enough to make RSA work ... go figure!] - -- Fixed bug in math descriptors where if you hadn't defined MECC (ECC support) you would get linker errors - -- Added RSA accelerators to the math descriptors to make it possible to not include the stock routines if you supply your own. - -- dsa_decrypt_key() was erroneously dependent on MECC not MDSA ... whoops - -- Moved DSA size limits to tomcrypt_pk.h so they're defined with LTC_NO_PK+MDSA - -- cleaned up tomcrypt_custom.h to make customizable PK easier (and also cleaned up the error traps so they're correctly reported) - -November 18th, 2005 -v1.07 -- Craig Schlenter pointed out the "encrypt" demo doesn't call ctr_start() correctly. That's because as of a few releases ago - I added support to set the mode of the counter at init time - -- Fixed some "testprof" make issues - -- Added RSA keygen to the math descriptors - -- Fixed install_test target ... oops - -- made the "ranlib" program renamable useful for cross-compiling - -- Made the cipher accelerators return error codes. :-) - -- Made CCM accept a pre-scheduled key to speed it up if you use the same key for multiple packets - -- Added "Katja" public key crypto. It's based on the recent N = p^2q work by Katja. I added OAEP padding - to it. Note this code has been disabled not because it doesn't work but because it hasn't been thoroughly - analyzed. It does carry some advantages over RSA (slightly smaller public key, faster decrypt) but also - some annoying "setup" issues like the primes are smaller which makes ECM factoring more plausible. - -- Made makefile accept a NODOCS flag to disable the requirement of tetex to install LTC for you no tetex people... all 3 of ya :-) - -- Cleaned up rsa_export() since "zero" was handled with a SHORT_INTEGER - -- Cleaned up the LIBTEST_S definitions in both GNU makefiles. A few minor touchups as well. - -- Made the cipher ecb encrypt/decrypt return an int as well, changed ALL dependent code to check for this. - -- der_decode_choice() would fail to mark a NULL as "used" when decoding. Fixed - -- ecc_decrypt_key() now uses find_hash_oid() to clean up the code ;-) - -- Added mp_neg() to the math descriptors. - -- Swapped arguments for the pkcs_1_mgf1() function so the hash_idx is the first param (to be more consistent) - -- Made the math descriptors buildable when RSA has been undefined - -- ECC timing demo now capable of detecting which curves have been defined - -- Refactored the ECC code so it's easier to maintain. (note: the form of this code hasn't really changed since I first added ECC ... :-/) - -- Updated the documentation w.r.t. ECC and the accelerators to keep it current - -- Fixed bug in ltc_init_multi() which would fail to free all allocated memory on error. - -- Fixed bug in ecc_decrypt_key() which could possibly lead to overflows (if MAXBLOCKSIZE > ECC_BUF_SIZE and you have a hash that emits MAXBLOCKSIZE bytes) - -- Added encrypt/decrypt to the DSA side (basically DH with DSA parameters) - -- Updated makefiles to remove references to the old DH object files and the ecc_sys.o crap ... clean code ahead! - -- ecc_import() now checks if the point it reads in lies on the curve (to prevent degenerative points from being used) - -- ECC code now ALWAYS uses the accelerator interface. This allows people who use the accelerators to not have the stock - ECC point add/dbl/mul code linked in. Yeah space savings! Rah Rah Rah. - -- Added LTC_MUTEX_* support to Yarrow and Fortuna allowing you to use respective prng_state as a global PRNG state [e.g. thread-safe] if you define one of the LTC_* defines at - build time (e.g. LTC_PTHREAD == pthreads) - -- Added PPC32 support to the rotate macros (tested on an IBM PPC 405) and LTC_FAST macros (it aint fast but it's faster than stock) - -- Added ltc_mp checks in all *_make_key() and *_import() which will help catch newbs who don't register their bignum first :-) - -- the UTCTIME type was missing from der_length_sequence() [oops, oh like you've never done that] - -- the main makefile allows you to rename the make command [e.g. MAKE=gmake gmake install] so you can build LTC on platforms where the default make command sucks [e.g. BSD] - -- Added DER flexi decoder which allows the decoding of arbitrary DER encoded packets without knowing - their structure in advance (thanks to MSVC for finding 3 bugs in it just prior to release! ... don't ask) - -August 1st, 2005 -v1.06 -- Fixed rand_prime() to accept negative inputs as a signal for BBS primes. [Fredrik Olsson] - -- Added fourth ARGCHK type which outputs to stderr and continues. Useful if you trap sigsegv. [Valient Gough] - -- Removed the DH code from the tree - -- Made the ECC code fully public (you can access ecc_mulmod directly now) useful for debuging - -- Added ecc test to tv_gen - -- Added hmac callback to hash descriptors. - -- Fixed two doxy comment errors in the UTCTIME functions - -- rsa_import() can now read OpenSSL format DER public keys as well as the PKCS #1 RSAPublicKey format. - Note that rsa_export() **ONLY** writes PKCS #1 formats - -- Changed MIN/MAX to only define if not already present. -- Kirk J from Demonware ... - -- Ported tv_gen to new framework (and yes, I made ecc vectors BEFORE changing the API and YES they match now :-)) - -- ported testing scripts to support pluggable math. yipee! - -- Wrote a TFM descriptor ... yipee - -- Cleaned up LTC_FAST in CBC mode a bit - -- Merged in patches from Michael Brown for the sparc/sparc64 targets - -- Added find_hash_oid() to search for a hash by its OID - -- Cleaned up a few stray CLEAN_STACKs that should have been LTC_CLEAN_STACK - -- Added timing resistant ECC, enable by defining LTC_ECC_TIMING_RESISTANT then use ECC API as normal - -- Updated the ECC documentation as it was a bit out of date - -June 27th, 2005 -v1.05 - -- Added Technote #6 which covers the current PK compliance. - -- Fixed buffer overflow in OAEP decoder - -- Added CHOICE to the list of ASN.1 types - -- Added UTCTIME to the list of ASN.1 types - -- Added MUTEX locks around descriptor table functions [but not on the functions that are dependent on them] - All functions call *_is_valid() before using a descriptor index which means the respective table must be unlocked before - it can be accessed. However, during the operation [e.g. CCM] if the descriptor has been altered the results will be - undefined. - -- Minor updates to the manual to reflect recent changes - -- Added a catch to for an error that should never come up in rsa_exptmod(). Just being thorough. - -June 15th, 2005 -v1.04 - -- Fixed off by one [bit] error in dsa_make_key() it was too high by one bit [not a security problem just inconsistent] - -- ECC-224 curve was wrong [it was an ok curve just not NIST, so no security flaw just interoperability]. - -- Removed point compression since it slows down ECC ops to save a measly couple bytes. - This makes the ecc export format incompatible with 1.03 [it shouldn't change in the future] - -- Removed ECC-160 from timing and added the other curves - -June 9th, 2005 -v1.03 - -- Users may want to note that on a P4/GCC3.4 platform "-fno-regmove" greatly accelerates the ciphers/hashes. - -------------------------------------------------------------------------------------------------------------- - -- Made it install the testing library in the icc/static makefiles - -- Found bug in ccm_memory.c which would fail to compile when LTC_CLEAN_STACK was enabled - -- Simon Johnson proposed I do a fully automated test suite. Hence "testme.sh" was born - -- Added LTC_NO_TEST which forces test vectors off (regardless of what tomcrypt_custom.h has) - -- Added LTC_NO_TABLES which disables large tables (where possible, regardless of what tomcrypt_custom.h has) - -- New test script found a bug in twofish.c when TABLES was disabled. Yeah testing! - -- Added a LTC_FAST specific test to the testing software. - -- Updated test driver to actually halt on errors and just print them out (useful for say... automated testing...) - -- Added bounds checking to Pelican MAC - -- Added BIT and OCTET STRING to the ASN.1 side of things. - -- Pekka Riikonen pointed out that my ctr_start() function should accept the counter mode. - -- Cleaned up warnings in testprof - -- Removed redundant mu and point mapping in ecc_verify_hash() so it should be a bit faster now - -- Pekka pointed out that the AES key structure was using 32 bytes more than it ought to. - -- Added quick defines to remove entire classes of algorithms. This makes it easier if you want to build with just - one algorithm (say AES or SHA-256). Defines are LTC_NO_CIPHERS, LTC_NO_MODES, LTC_NO_HASHES, LTC_NO_MACS, - LTC_NO_PRNGS, LTC_NO_PK, LTC_NO_PKCS - -- As part of the move for ECC to X9.62 I've changed the signature algorithm to EC DSA. No API changes. - -- Pekka helped me clean up the PKCS #1 v2.1 [OAEP/PSS] code - -- Wrote new DER SEQUENCE coder/decoder - -- RSA, DSA and ECDSA now use the DER SEQUENCE code (saves a lot of code!) - -- DSA output is now a DER SEQUENCE (so not compatible with previous releases). - -- Added Technote #5 which shows how to build LTC on an AMD64 to have a variety of algorithms in only ~80KB of code. - -- Changed temp variable in LOAD/STORE macros to "ulong32" for 32-bit ops. Makes it safer on Big endian platforms - -- Added INSTALL_GROUP and INSTALL_USER which you can specify on the build to override the default USER/GROUP the library - is to be installed as - -- Removed "testprof" from the default build. - -- Added IA5, NULL and Object Identifier to the list of ASN.1 DER supported types - -- The "no_oops" target (part of zipup) now scans for non-cvs files. This helps prevent temp/scratch files from appearing in releases ;-) - -- Added DERs for missing hashes, but just the OID not the PKCS #1 v1.5 additions. - -- Removed PKCS #1 v1.5 from the tree since it's taking up space and you ought to use v2.1 anyways - -- Kevin Kenny pointed out a few stray // comments - -- INTEGER code properly supports negatives and zero padding [Pekka!] - -- Sorted asn1/der/ directory ... less of a mess now ;-) - -- Added PRINTABLE STRING type - -- Removed ECC-160 as it wasn't a standard curve - -- Made ecc_shared_secret() ANSI X9.63 compliant - -- Changed "printf" to "fprintf(stderr, " in the testbench... ;-) - -- Optimized the GCM table creation. On 1KB packets [with key switching] the new GCM is 12.7x faster than before. - -- Changed OID representation for hashes to be just a list of unsigned longs (so you can compare against them nicely after decoding a sequence) - -- ECC code now uses Montgomery reduction ... it's even faster [ECC-256 make key down from 37.4M to 4.6M cycles on an Athlon64] - -- Added SHORT_INTEGER so users can easily store DER encoded INTEGER types without using the bignum math library - -- Fixed OMAC code so that with LTC_FAST it doesn't require that LTC_FAST_TYPE divides 16 [it has to divide the block size instead] - -- ECC key export is now a simple [and documented] SEQUENCE, the "encrypt_key" also uses a new SEQUENCE format. - -- Thanks goes to the following testers - Michael Brown - Solaris 10/uSPARCII - Richard Outerbridge - MacOS - Martin Carpenter - Solaris 8/uSPARCII [Thanks for cleaning up the scripts] - Greg Rose - ... SunOS 5.8/SPARC [... what's with the SPARCS?] - Matt Johnston - MacOS X [Thanks for pointing out GCC 4 problems with -Os] - -April 19th, 2005 -v1.02 - -- Added LTC_TEST support to gcm_test() - -- "pt/ct" can now be NULL in gcm_process() if you are processing zero bytes - -- Optimized GCM by removing the "double copy" handling of the plaintext/aad - -- Richard Outerbridge pointed out that x86_prof won't build on MACOS and that the manual - erroneously refers to "mycrypt" all over the place. Fixed. - -April 17th, 2005 -v1.01 - ** Secure Science Corporation has supported this release cycle by sponsoring the development time taken. Their - continuing support of this project has helped me maintain a steady pace in order to keep LibTomCrypt up to date, - stable and more efficient. - ----------------------------------------------------------------------------------------------------- - -- Updated base64_decode.c so if there are more than 3 '=' signs it would stop parsing - -- Merged in latest mpi that fixed a few bugs here and there - -- Updated OAEP encoder/decoder to catch when the hash output is too large - Cleaned up PSS code too - -- Andy Bontoft fixed a bug in my demos/tests/makefile.msvc ... seems "dsa_test.c" isn't an object - afterall. Thanks. - -- Made invalid ECC key sizes (configuration) not hard fault the program (it returns an error code now) - -- SAFER has been re-enabled after I was pointed to http://www.ciphersbyritter.com/NEWS2/95032301.HTM - [Mark Kotiaho] - -- Added CCM mode to the encauth list (now has EAX, OCB and CCM, c'est un treo magnifique!) - -- Added missing ASN.1 header to the RSA keys ... oops... now the rsa_export/import are FULLY compatible - with other libs like OpenSSL (comment: Test vectors would go a long way RSA...) - -- Manually merged in fix to the prime_random_ex() LTM function that ensures the 2nd MSB is set properly. Now - When you say "I want a 1024/8 byte RSA key" the MSB bit of the modulus is set as expected. Note I generally - don't view this as a "huge issue" but it's just one less nit to worry about. [Bryan Klisch] - -- A new CVS has been setup on my Athlon64 box... if you want developer access send me an email (and at this point the email would have to be awesome). - -- Updated API for ECB and CBC shell code. Now can process N whole blocks in one call (like $DEITY intended) - -- Introduced a new "hardware accel" framework that can be used to speed up cipher ECB, CBC and CTR mode - calls. Later on dependent code (e.g. OMAC, CCM) will be re-written to use the generic cbc/ctr functions. But now - if you [say] call ctr_encrypt() with a cipher descriptor that has hardware CTR it will automatically - be used (e.g. no code rewrites) - -- Now ships with 20% more love. - -- x86_prof now uses ECB shell code (hint: accelerators) and outputs cycles per BLOCK not byte. This will make it a bit - easier to compare hardware vs. software cipher implementations. It also emits timings for CBC and CTR modes - -- [Peter LaDow] fixed a typo w.r.t. XREALLOC macro (spelling counts kids!) - -- Fixed bug with __x86_64__ where ROL64/ROR64 with LTC_NO_ROLC would be the 32-bit versions instead... - -- Shipping with preliminary GCM code (disabled). It's buggy (stack overflow hidden somewhere). If anyone can spot it let me know. - -- Added Pelican MAC [it's an AES based fast MAC] to the list of supported MACs - -- Added LTC_FAST [and you can disable by defining LTC_NO_FAST] so that CBC and CTR mode XOR whole words [e.g. 32 or 64 bits] at a time - instead of one byte. On my AMD64 this reduced the overhead for AES-128-CBC from 4.56 cycles/byte to around 1 cycle/byte. This requires - that you either allow unaligned read/writes [e.g. x86_32/x86_64] or align all your data. It won't go out of it's way to ensure - aligned access. Only enabled for x86_* platforms by default since they allow unaligned read/writes. - -- Added LTC_FAST support to PMAC (drops the cycle/byte by about 9 cycles on my AMD64) [note: I later rewrote this prior to release] - -- Updated "profiled" target to work with the new directory layout - -- Added [demo only] optimized RC5-CTR code to x86_prof demo to show off how to make an accelerator - [This has been removed prior to release... It may re-appear later] - -- Added CCM acelerator callbacks to the list [now supports ECB, CTR, CBC and now CCM]. - -- Added chapter to manual about accelerators (you know you want it) - -- Added "bswap" optimizations to x86 LOAD/STORE with big endian. Can be disabled by defining LTC_NO_BSWAP - -- LTC_NO_ASM is now the official "disable all non-portable stuff" macro. When defined it will make the code endian-neutral, - disable any form of ASM and disable LTC_FAST load/stores. Essentially build the library with this defined if you're having - trouble building the library (old GCCs for instance dislike the ROLc macro) - -- Added tomcrypt_mac.h and moved MAC/encMAC functions from tomcrypt_hash.h into it - -- Added "done" function to ciphers and the five chaining modes [and things like omac/pmac/etc] - -- Changed install group to "wheel" from "root". - -- Replaced // comments with /**/ so it will build on older UNIX-like platforms - -- x86_prof builds and runs with IntelCC fine now - -- Added "stest" build to intel CC to test static linked from within the dir (so you don't have to install to test) - -- Moved testing/benchmark into testprof directory and build it as part of the build. Now you can link against libtomcrypt_prof.a to get - testing info (hint: hardware developers ;-) ) - -- Added CCM to tv_gen - -- Added demos to MSVC makefile - -- Removed -funroll-all-loops from GCC makefile and replaced with -funroll-loops which is a bit more sane (P4 ain't got much cache for the IDATA) - -- Fixed GCM prior to release and re-enabled it. It has not been optimized but it does conform when compiled with optimizations. - -- I've since optimized GCM and CCM. They're close in speed but GCM is more flexible imho (though EAX is more flexible than both) - -- For kicks I optimized the ECC code to use projective points. Gets between 3.21x (Prescott P4) to 4.53x (AMD64) times faster than before at 160-bit keys and the - speedup grows as the keysize grows. Basically removing most practical reasons to "not use the ECC code". Enjoy. - -- Added LTC_FAST support to OMAC/PMAC and doubled it's speed on my amd64 [faster on the P4 too I guess] - -- Added GCM to tv_gen - -- Removed "makefile.cygwin_dll" as it's not really used by anyone and not worth the effort (hell I hardly maintain the MSVC makefiles ...) - -- Updated a few files in the "misc" directory to have correct @file comments for doxygen - -- Removed "profile" target since it was slower anyways (go figure...) - -December 31st, 2004 -v1.00 - -- Added "r,s == 0" check to dsa_verify_hash() - -- Added "multi block" helpers for hash, hmac, pmac and omac routines so you can process multiple non-adjacent - blocks of data with one call (added demos/multi.c to make sure they work) - -- Note these are not documented but they do have doxygen comments inside them - -- Also I don't use them in other functions (like pkcs_5_2()) because I didn't have the time. Job for the new LTC maintainer ;-) - -- Added tweaked Anubis test vectors and made it default (undefined ANUBIS_TWEAK to get original Anubis) - -- Merged in fix for mp_prime_random_ex() to deal with MSB and LSB "bugs" - -- Removed tim_exptmod() completely, updated several RSA functions (notably v15 and the decrypt/verify) so they - don't require a prng now - -- This release brought to you by the fine tunes of Macy Gray. We miss you. - -December 23rd, 2004 -v1.00rc1 - -- Renamed "mycrypt_*" to "tomcrypt_*" to be more specific and professional - Now just include "tomcrypt.h" instead of "mycrypt.h" to get LTC ;-) - -- Cleaned up makefiles to ensure all headers are correctly installed - -- Added "rotate by constant" macros for portable, x86-32 and x86-64 - You can disable this new code with LTC_NO_ROLC which is useful for older GCCs - -- Cleaned up detection of x86-64 so it works for ROL/ROR macros - -- Fixed rsa_import() so that it would detect multi-prime RSA keys and error appropriately - -- Sorted the source files by category and updated the makefiles appropriately - -- Added LTC_DER define so you can trim out DER code if not required - -- Fixed up RSA's decrypt functions changing "res" to "stat" to be more in sync - with the signature variables nomenclature. (no code change just renamed the arguments) - -- Removed all labels starting with __ and replaced with LBL_ to avoid namespace conflicts (Randy Howard) - -- Merged in LTM fix to mp_prime_random_ex() which zap'ed the most significant byte if the bit size - requested was a multiple of eight. - -- Made RSA_TIMING off by default as it's not terribly useful [and likely to be deprecated] - -- Renamed SMALL_CODE, CLEAN_STACK and NO_FILE to have a LTC_ prefix to avoid namespace collisions - with other programs. e.g. SMALL_CODE => LTC_SMALL_CODE - -- Zed Shaw pointed out that on certain systems installing libs as "root" isn't possible as the super-user - is not root. Now the makefiles allow this to be changed easily. - -- Renamed "struct _*_descriptor" to "struct ltc_*_descriptor" to avoid using a leading _ - Also renamed _ARGCHK to LTC_ARGCHK - -- Zed Shaw pointed out that I still defined the prng structs in tomcrypt_prng.h even if they - weren't defined. This made undef'ing FORTUNA break the build. - -- Added LTC_NO_ASM to disable inline asm macros [ROL/ROR/etc] - -- Changed RSA decrypt functions to change the output length variable name from "keylen" to "outlen" to make - it more consistent. - -- Added the 64-bit Khazad block cipher [NESSIE] - -- Added the 128-bit Anubis block cipher [with key support for 128...320 bit keys] [NESSIE] - -- Changes to several MAC functions to rename input arguments to more sensible names - -- Removed FAST_PK support from dh_sys.c - -- Declared deskey() from des.c as static instead of a global - -- Added pretty much all practical GCC warning tests to the GCC [related] makefiles. These additional - warnings can easily be disabled for those with older copies of GCC [or even non GNU cc's] - -- Added doxygen @ tags to the code... phew that was a hell of a lot of [repetitive] work - -- Also added pre-configured Doxygen script. - -- Cleaned up quite a few functions [ciphers, pk, etc] to make the parameters naming style consistent - E.g. ciphers keys are called "skey" consistently now. The input to PK encryption is called "in", etc. - These changes require no code changes on the behalf of developers fortunately - -- Started a SAFER+ optimizer [does encrypt only] which shaves a good 30 or so cycles/byte on my AMD64 - at an expense of huge code. It's in notes/etc/saferp_optimizer.c - -- DSA sign/verify now uses DER encoded output/inputs and no LTC style headers. - -- Matt Johnston found a missing semi-colon in mp_exptmod(). Fix has been merged in. - -October 29th, 2004 -v0.99 -- Merged in the latest version of LTM which includes all of the recent bug fixes - -- Deprecated LTMSSE and removed it (to be replaced with TFM later on) - -- Stefan Arentz pointed out that mp_s_rmap should be extern - -- Kristian Gj?steen pointed out that there are typos in the - "test" makefile and minor issues in Yarrow and Sober [just cosmetics really] - -- Matthew P. Cashdollar pointed out that "export" is a C++ keyword - so changed the PRNG api to use "pexport" and "pimport" - -- Updated "hashsum" demo so it builds ;-) - -- Added automatic support for x86-64 (will configure for 64-bit little endian automagically) - -- Zhi Chen pointed out a bug in rsa_exptmod which would leak memory on error. - -- Made hash functions "init" return an int. slight change to API ;-( - -- Added "CHC" mode which turns any cipher into a hash the other LTC functions can use - -- Added CHC mode stuff to demos such as tv_gen and hashsum - -- Added "makefile.shared" which builds and installs shared/static object copies - of the library. - -- Added DER for bignum support - -- RSA is now fully joy. rsa_export/rsa_import use PKCS #1 encodings and should be - compatible with other crypto libs that use the format. - -- Added support for x86-64 for the ROL/ROR macros - -- Changed the DLL and SO makefiles to optimize for speed, commented SMALL_CODE in - mycrypt_custom.h and added -DSMALL_CODE to the default makefile - -- Updated primality testing code so it does a minimum of 5 tests [of Miller-Rabin] - (AFAIK not a security fix, just warm fuzzies) - -- Minor updates to the OMAC code (additional __ARGCHK and removed printf from omac_test... oops!) - -- Update build and configuration info which was really really really out of date. (Chapter 14) - ++ Minor update, switch RSA to use the PKCS style CRT - -August 6th, 2004 -v0.98 -- Update to hmac_init to free all allocated memory on error - -- Update to PRNG API to fix import/export functions of Fortuna and Yarrow - -- Added test functions to PRNG api, RC4 now conforms ;-) [was a minor issue] - -- Added the SOBER-128 PRNG based off of code donated by Greg Rose. - -- Added Tech Note #4 [notes/tech0004.txt] - -- Changed RC4 back [due to request]. It will now XOR the output so you can use it like - a stream cipher easily. - -- Update Fortuna's export() to emit a hash of each pool. This means that the accumulated - entropy that was spread over all the pools isn't entirely lost when you export/import. - -- Zhi Chen suggested a comment for rsa_encrypt_key() to let users know [easily] that it was - PKCS #1 v2.0 padding. (updated other rsa_* functions) - -- Cleaned up Noekeon to remove unrolling [wasn't required, was messy and actually slower with GCC/ICC] - -- Updated RC4 so that when you feed it >256 bytes of entropy it quietly ignores additional - bytes. Also removed the % from the key setup to speed it up a bit. - -- Added cipher/hash/prng tests to x86_prof to help catch bugs while testing - -- Made the PRNG "done" return int, fixed sprng_done to not require prng* to be non-null - -- Spruced up mycrypt_custom.h to trap more errors and also help prevent LTMSSE from being defined - on non-i386 platforms by accident. - -- Added RSA/ECC/DH speed tests to x86_prof and cleaned it up to build with zero warnings - -- Changed Fortuna to count only entropy [not the 2 byte header] added to pool[0] into the - reseed mechanism. - -- Added "export_size" member to prng_descriptor tables so you can know in advance the size of - the exported state for any given PRNG. - -- Ported over patch on LTM 0.30 [not ready to release LTM 0.31] that fixes bug in mp_mul()/mp_div() - that used to result in negative zeroes when you multiplied zero by a negative integer. - (patch due to "Wolfgang Ehrhardt" ) - -- Fixed rsa_*decrypt_key() and rsa_*verify_hash() to default to invalid "stat" or "res". This way - if any of the higher level functions fail [before you get to the padding] the result will be in - a known state]. Applied to both v2 and v1.5 padding helpers. - -- Added MACs to x86_prof - -- Fixed up "warnings" in x86_prof and tv_gen - -- Added a "profiled" target back [for GCC 3.4 and ICC v8]. Doesn't seem to help but might be worth - tinkering with. - -- Beefed up load/store test in demos/test - - ++ New note, in order to use the optimized LOAD/STORE macros your platform - must support unaligned 32/64 bit load/stores. The x86s support this - but some [ARM for instance] do not. If your platform cannot perform - unaligned operations you must use the endian neutral code which is safe for - any sort of platform. - July 23rd, 2004 v0.97b -- Added PKCS #1 v1.5 RSA encrypt/sign helpers (like rsa_sign_hash, etc...) -- Added missing prng check to rsa_decrypt_key() [not critical as I don't use @@ -665,7 +62,7 @@ v0.96 -- Removed GF and Keyring code -- Changed PSS/OAEP API slightly to be more consistent with other PK functions (order of arguments) -- rsa_exptmod() now pads with leading zeroes as per I2OSP. -- added error checking to yarrow code - -- pointed out that tommath.h from this distro will overwrite tommath.h + -- Mike Frysinger pointed out that tommath.h from this distro will overwrite tommath.h from libtommath. I changed this to ltc_tommath.h to avoid any such problems. -- Fixed bug in PSS encoder/decoder that didn't handle the MSB properly -- refactored AES, now sports an "encrypt only" descriptor which uses half as much code space. @@ -914,7 +311,7 @@ v0.81 -- Merged in new makefile from Clay Culver and Mike Frysinger as much as possible. This sped the routine up quite a bit. -- Fixed a huge flaw in ecc_verify_hash() where it would return CRYPT_OK on error... Now fixed. -- Fixed up config.pl by fixing an invalid query and the file is saved in non-windows [e.g. not CR/LF] format - (fix due to Mika Bostr?m) + (fix due to Mika Bostrm) -- Merged in LibTomMath for kicks -- Changed the build process so that by default "mycrypt_custom.h" is included and provided The makefile doesn't include any build options anymore @@ -1641,8 +1038,3 @@ v0.02 -- Changed RC5 to only allow 12 to 24 rounds -- Added more to the manual. v0.01 -- We will call this the first version. - -/* $Source: /cvs/libtom/libtomcrypt/changes,v $ */ -/* $Revision: 1.288 $ */ -/* $Date: 2007/05/12 14:37:41 $ */ - diff --git a/cmake-format.py b/cmake-format.py deleted file mode 100644 index 5f281dae..00000000 --- a/cmake-format.py +++ /dev/null @@ -1,241 +0,0 @@ -# ---------------------------------- -# Options affecting listfile parsing -# ---------------------------------- -with section("parse"): - - # Specify structure for custom cmake functions - additional_commands = { 'foo': { 'flags': ['BAR', 'BAZ'], - 'kwargs': {'DEPENDS': '*', 'HEADERS': '*', 'SOURCES': '*'}}} - - # Override configurations per-command where available - override_spec = {} - - # Specify variable tags. - vartags = [] - - # Specify property tags. - proptags = [] - -# ----------------------------- -# Options affecting formatting. -# ----------------------------- -with section("format"): - - # Disable formatting entirely, making cmake-format a no-op - disable = False - - # How wide to allow formatted cmake files - line_width = 100 - - # How many spaces to tab for indent - tab_size = 4 - - # If true, lines are indented using tab characters (utf-8 0x09) instead of - # space characters (utf-8 0x20). In cases where the layout would - # require a fractional tab character, the behavior of the fractional - # indentation is governed by - use_tabchars = False - - # If is True, then the value of this variable indicates how - # fractional indentions are handled during whitespace replacement. If set to - # 'use-space', fractional indentation is left as spaces (utf-8 0x20). If set - # to `round-up` fractional indentation is replaced with a single tab character - # (utf-8 0x09) effectively shifting the column to the next tabstop - fractional_tab_policy = 'use-space' - - # If an argument group contains more than this many sub-groups (parg or kwarg - # groups) then force it to a vertical layout. - max_subgroups_hwrap = 2 - - # If a positional argument group contains more than this many arguments, then - # force it to a vertical layout. - max_pargs_hwrap = 6 - - # If a cmdline positional group consumes more than this many lines without - # nesting, then invalidate the layout (and nest) - max_rows_cmdline = 2 - - # If true, separate flow control names from their parentheses with a space - separate_ctrl_name_with_space = False - - # If true, separate function names from parentheses with a space - separate_fn_name_with_space = False - - # If a statement is wrapped to more than one line, than dangle the closing - # parenthesis on its own line. - dangle_parens = True - - # If the trailing parenthesis must be 'dangled' on its on line, then align it - # to this reference: `prefix`: the start of the statement, `prefix-indent`: - # the start of the statement, plus one indentation level, `child`: align to - # the column of the arguments - dangle_align = 'prefix' - - # If the statement spelling length (including space and parenthesis) is - # smaller than this amount, then force reject nested layouts. - min_prefix_chars = 4 - - # If the statement spelling length (including space and parenthesis) is larger - # than the tab width by more than this amount, then force reject un-nested - # layouts. - max_prefix_chars = 10 - - # If a candidate layout is wrapped horizontally but it exceeds this many - # lines, then reject the layout. - max_lines_hwrap = 2 - - # What style line endings to use in the output. - line_ending = 'unix' - - # Format command names consistently as 'lower' or 'upper' case - command_case = 'lower' - - # Format keywords consistently as 'lower' or 'upper' case - keyword_case = 'upper' - - # A list of command names which should always be wrapped - always_wrap = [] - - # If true, the argument lists which are known to be sortable will be sorted - # lexicographicall - enable_sort = True - - # If true, the parsers may infer whether or not an argument list is sortable - # (without annotation). - autosort = False - - # By default, if cmake-format cannot successfully fit everything into the - # desired linewidth it will apply the last, most agressive attempt that it - # made. If this flag is True, however, cmake-format will print error, exit - # with non-zero status code, and write-out nothing - require_valid_layout = False - - # A dictionary mapping layout nodes to a list of wrap decisions. See the - # documentation for more information. - layout_passes = {} - -# ------------------------------------------------ -# Options affecting comment reflow and formatting. -# ------------------------------------------------ -with section("markup"): - - # What character to use for bulleted lists - bullet_char = '*' - - # What character to use as punctuation after numerals in an enumerated list - enum_char = '.' - - # If comment markup is enabled, don't reflow the first comment block in each - # listfile. Use this to preserve formatting of your copyright/license - # statements. - first_comment_is_literal = False - - # If comment markup is enabled, don't reflow any comment block which matches - # this (regex) pattern. Default is `None` (disabled). - literal_comment_pattern = None - - # Regular expression to match preformat fences in comments default= - # ``r'^\s*([`~]{3}[`~]*)(.*)$'`` - fence_pattern = '^\\s*([`~]{3}[`~]*)(.*)$' - - # Regular expression to match rulers in comments default= - # ``r'^\s*[^\w\s]{3}.*[^\w\s]{3}$'`` - ruler_pattern = '^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$' - - # If a comment line matches starts with this pattern then it is explicitly a - # trailing comment for the preceeding argument. Default is '#<' - explicit_trailing_pattern = '#<' - - # If a comment line starts with at least this many consecutive hash - # characters, then don't lstrip() them off. This allows for lazy hash rulers - # where the first hash char is not separated by space - hashruler_min_length = 10 - - # If true, then insert a space between the first hash char and remaining hash - # chars in a hash ruler, and normalize its length to fill the column - canonicalize_hashrulers = True - - # enable comment markup parsing and reflow - enable_markup = True - -# ---------------------------- -# Options affecting the linter -# ---------------------------- -with section("lint"): - - # a list of lint codes to disable - disabled_codes = [] - - # regular expression pattern describing valid function names - function_pattern = '[0-9a-z_]+' - - # regular expression pattern describing valid macro names - macro_pattern = '[0-9A-Z_]+' - - # regular expression pattern describing valid names for variables with global - # (cache) scope - global_var_pattern = '[A-Z][0-9A-Z_]+' - - # regular expression pattern describing valid names for variables with global - # scope (but internal semantic) - internal_var_pattern = '_[A-Z][0-9A-Z_]+' - - # regular expression pattern describing valid names for variables with local - # scope - local_var_pattern = '[a-z][a-z0-9_]+' - - # regular expression pattern describing valid names for privatedirectory - # variables - private_var_pattern = '_[0-9a-z_]+' - - # regular expression pattern describing valid names for public directory - # variables - public_var_pattern = '[A-Z][0-9A-Z_]+' - - # regular expression pattern describing valid names for function/macro - # arguments and loop variables. - argument_var_pattern = '[a-z][a-z0-9_]+' - - # regular expression pattern describing valid names for keywords used in - # functions or macros - keyword_pattern = '[A-Z][0-9A-Z_]+' - - # In the heuristic for C0201, how many conditionals to match within a loop in - # before considering the loop a parser. - max_conditionals_custom_parser = 2 - - # Require at least this many newlines between statements - min_statement_spacing = 1 - - # Require no more than this many newlines between statements - max_statement_spacing = 2 - max_returns = 6 - max_branches = 12 - max_arguments = 5 - max_localvars = 15 - max_statements = 50 - -# ------------------------------- -# Options affecting file encoding -# ------------------------------- -with section("encode"): - - # If true, emit the unicode byte-order mark (BOM) at the start of the file - emit_byteorder_mark = False - - # Specify the encoding of the input file. Defaults to utf-8 - input_encoding = 'utf-8' - - # Specify the encoding of the output file. Defaults to utf-8. Note that cmake - # only claims to support utf-8 so be careful when using anything else - output_encoding = 'utf-8' - -# ------------------------------------- -# Miscellaneous configurations options. -# ------------------------------------- -with section("misc"): - - # A dictionary containing any per-command configuration overrides. Currently - # only `command_case` is supported. - per_command = {} - diff --git a/contrib/libtomcrypt.cmake b/contrib/libtomcrypt.cmake deleted file mode 100644 index ee90767f..00000000 --- a/contrib/libtomcrypt.cmake +++ /dev/null @@ -1,14 +0,0 @@ -# To find libtomcrypt no matter what the installation look like, start with -# looking for the CMake specific configuration, and failing that, try the -# pkg-config package instead. The resulting target is different in each -# case, but is recorded in the variable ${LIBTOMCRYPT}, so please use that -# for all targets that depend on libtomcrypt. - -find_package(libtomcrypt QUIET) -if (libtomcrypt_FOUND) - set(LIBTOMCRYPT libtomcrypt) -else() - find_package(PkgConfig) - pkg_check_modules(libtomcrypt REQUIRED IMPORTED_TARGET libtomcrypt) - set(LIBTOMCRYPT PkgConfig::libtomcrypt) -endif() diff --git a/contrib/sbom.cdx.json b/contrib/sbom.cdx.json deleted file mode 100644 index 51c69cfe..00000000 --- a/contrib/sbom.cdx.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "bomFormat": "CycloneDX", - "specVersion": "1.6", - "version": 1, - "metadata": { - "authors": [ - { - "name": "@VCS_SBOM_AUTHORS@" - } - ] - }, - "components": [ - { - "type": "library", - "bom-ref": "pkg:github/libtom/libtomcrypt@@VCS_TAG@", - "cpe": "cpe:2.3:a:libtom:libtomcrypt:@VCS_TAG@:*:*:*:*:*:*:*", - "name": "libtomcrypt", - "version": "@VCS_VERSION@", - "description": "Modular and portable cryptographic toolkit", - "authors": [ - { - "name": "libtomcrypt developers" - } - ], - "licenses": [ - { - "license": { - "id": "Unlicense" - } - } - ], - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/libtom/libtomcrypt" - } - ] - } - ] -} diff --git a/coverity.sh b/coverity.sh deleted file mode 100755 index 341c5084..00000000 --- a/coverity.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash - -if [ $# -lt 2 ] -then - echo "usage is: ${0##*/} " - echo "e.g. \"${0##*/} \"/usr/local/bin/coverity\" \"-DLTM_DESC -I/path/to/libtommath/\"\"" - exit -1 -fi - -PATH=$PATH:$1/bin - -make clean -rm -r cov-int/ - -myCflags="" -myCflags="$myCflags -O2 ${2}" -myCflags="$myCflags -pipe -Werror -Wpointer-arith -Winit-self -Wextra -Wall -Wformat -Wformat-security" - -CFLAGS="$myCflags" cov-build --dir cov-int make -f makefile.unix $MAKE_OPTS IGNORE_SPEED=1 1>gcc_1.txt - -if [ $? -ne 0 ] -then - echo "make failed" - exit -1 -fi - -# zipup everything -tar caf libtomcrypt.lzma cov-int - -mytoken=$(cat .coverity_token) -mymail=$(cat .coverity_mail) -myversion=$(git describe --dirty) - -curl -k --form project=libtomcrypt \ - --form token=${mytoken} \ - --form email=${mymail} \ - --form file=@libtomcrypt.lzma \ - --form version=\"${myversion}\" \ - --form description="\"libtomcrypt version ${myversion}\"" \ - https://scan.coverity.com/builds?project=libtom%2Flibtomcrypt - -# EOF diff --git a/crypt b/crypt new file mode 100644 index 00000000..88a14ee0 --- /dev/null +++ b/crypt @@ -0,0 +1,25 @@ +%PDF-1.3 +%쏢 +3 0 obj +<< /Type /Pages /Kids [ +] /Count 0 +>> +endobj +1 0 obj +<> +endobj +2 0 obj +<>endobj +xref +0 4 +0000000000 65535 f +0000000068 00000 n +0000000116 00000 n +0000000015 00000 n +trailer +<< /Size 4 /Root 1 0 R /Info 2 0 R +>> +startxref +166 +%%EOF diff --git a/crypt.c b/crypt.c new file mode 100644 index 00000000..d71066c6 --- /dev/null +++ b/crypt.c @@ -0,0 +1,236 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +const char *crypt_build_settings = + "LibTomCrypt " SCRYPT "\n\n" + "Endianess: " +#if defined(ENDIAN_NEUTRAL) + "neutral\n" +#elif defined(ENDIAN_LITTLE) + "little" + #if defined(ENDIAN_32BITWORD) + " (32-bit words)\n" + #else + " (64-bit words)\n" + #endif +#elif defined(ENDIAN_BIG) + "big" + #if defined(ENDIAN_32BITWORD) + " (32-bit words)\n" + #else + " (64-bit words)\n" + #endif +#endif + "Clean stack: " +#if defined(CLEAN_STACK) + "enabled\n" +#else + "disabled\n" +#endif + "Ciphers built-in:\n" +#if defined(BLOWFISH) + " Blowfish\n" +#endif +#if defined(RC2) + " RC2\n" +#endif +#if defined(RC5) + " RC5\n" +#endif +#if defined(RC6) + " RC6\n" +#endif +#if defined(SAFERP) + " Safer+\n" +#endif +#if defined(SAFER) + " Safer\n" +#endif +#if defined(RIJNDAEL) + " Rijndael\n" +#endif +#if defined(XTEA) + " XTEA\n" +#endif +#if defined(TWOFISH) + " Twofish " + #if defined(TWOFISH_SMALL) && defined(TWOFISH_TABLES) + "(small, tables)\n" + #elif defined(TWOFISH_SMALL) + "(small)\n" + #elif defined(TWOFISH_TABLES) + "(tables)\n" + #else + "\n" + #endif +#endif +#if defined(DES) + " DES\n" +#endif +#if defined(CAST5) + " CAST5\n" +#endif +#if defined(NOEKEON) + " Noekeon\n" +#endif +#if defined(SKIPJACK) + " Skipjack\n" +#endif + + "\nHashes built-in:\n" +#if defined(SHA512) + " SHA-512\n" +#endif +#if defined(SHA384) + " SHA-384\n" +#endif +#if defined(SHA256) + " SHA-256\n" +#endif +#if defined(SHA224) + " SHA-224\n" +#endif +#if defined(TIGER) + " TIGER\n" +#endif +#if defined(SHA1) + " SHA1\n" +#endif +#if defined(MD5) + " MD5\n" +#endif +#if defined(MD4) + " MD4\n" +#endif +#if defined(MD2) + " MD2\n" +#endif +#if defined(RIPEMD128) + " RIPEMD128\n" +#endif +#if defined(RIPEMD160) + " RIPEMD160\n" +#endif +#if defined(WHIRLPOOL) + " WHIRLPOOL\n" +#endif + + "\nBlock Chaining Modes:\n" +#if defined(CFB) + " CFB\n" +#endif +#if defined(OFB) + " OFB\n" +#endif +#if defined(ECB) + " ECB\n" +#endif +#if defined(CBC) + " CBC\n" +#endif +#if defined(CTR) + " CTR\n" +#endif + + "\nPRNG:\n" +#if defined(YARROW) + " Yarrow\n" +#endif +#if defined(SPRNG) + " SPRNG\n" +#endif +#if defined(RC4) + " RC4\n" +#endif + + "\nPK Algs:\n" +#if defined(MRSA) + " RSA" +#if defined(RSA_TIMING) + " + RSA_TIMING " +#endif + "\n" +#endif +#if defined(MDH) + " DH\n" +#endif +#if defined(MECC) + " ECC\n" +#endif +#if defined(MDSA) + " DSA\n" +#endif + + "\nCompiler:\n" +#if defined(WIN32) + " WIN32 platform detected.\n" +#endif +#if defined(__CYGWIN__) + " CYGWIN Detected.\n" +#endif +#if defined(__DJGPP__) + " DJGPP Detected.\n" +#endif +#if defined(_MSC_VER) + " MSVC compiler detected.\n" +#endif +#if defined(__GNUC__) + " GCC compiler detected.\n" +#endif +#if defined(INTEL_CC) + " Intel C Compiler detected.\n" +#endif + + "\nVarious others: " +#if defined(BASE64) + " BASE64 " +#endif +#if defined(MPI) + " MPI " +#endif +#if defined(HMAC) + " HMAC " +#endif +#if defined(OMAC) + " OMAC " +#endif +#if defined(PMAC) + " PMAC " +#endif +#if defined(EAX_MODE) + " EAX_MODE " +#endif +#if defined(OCB_MODE) + " OCB_MODE " +#endif +#if defined(TRY_UNRANDOM_FIRST) + " TRY_UNRANDOM_FIRST " +#endif +#if defined(LTC_TEST) + " LTC_TEST " +#endif +#if defined(PKCS_1) + " PKCS#1 " +#endif +#if defined(PKCS_5) + " PKCS#5 " +#endif +#if defined(SMALL_CODE) + " SMALL_CODE " +#endif +#if defined(NO_FILE) + " NO_FILE " +#endif + "\n" + "\n\n\n" + ; + diff --git a/crypt.tex b/crypt.tex new file mode 100644 index 00000000..4b3d103b --- /dev/null +++ b/crypt.tex @@ -0,0 +1,3142 @@ +\documentclass[a4paper]{book} +\usepackage{hyperref} +\usepackage{makeidx} +\usepackage{amssymb} +\usepackage{color} +\usepackage{alltt} +\usepackage{graphicx} +\usepackage{layout} +\def\union{\cup} +\def\intersect{\cap} +\def\getsrandom{\stackrel{\rm R}{\gets}} +\def\cross{\times} +\def\cat{\hspace{0.5em} \| \hspace{0.5em}} +\def\catn{$\|$} +\def\divides{\hspace{0.3em} | \hspace{0.3em}} +\def\nequiv{\not\equiv} +\def\approx{\raisebox{0.2ex}{\mbox{\small $\sim$}}} +\def\lcm{{\rm lcm}} +\def\gcd{{\rm gcd}} +\def\log{{\rm log}} +\def\ord{{\rm ord}} +\def\abs{{\mathit abs}} +\def\rep{{\mathit rep}} +\def\mod{{\mathit\ mod\ }} +\renewcommand{\pmod}[1]{\ ({\rm mod\ }{#1})} +\newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} +\newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} +\def\Or{{\rm\ or\ }} +\def\And{{\rm\ and\ }} +\def\iff{\hspace{1em}\Longleftrightarrow\hspace{1em}} +\def\implies{\Rightarrow} +\def\undefined{{\rm ``undefined"}} +\def\Proof{\vspace{1ex}\noindent {\bf Proof:}\hspace{1em}} +\let\oldphi\phi +\def\phi{\varphi} +\def\Pr{{\rm Pr}} +\newcommand{\str}[1]{{\mathbf{#1}}} +\def\F{{\mathbb F}} +\def\N{{\mathbb N}} +\def\Z{{\mathbb Z}} +\def\R{{\mathbb R}} +\def\C{{\mathbb C}} +\def\Q{{\mathbb Q}} + +\def\twiddle{\raisebox{0.3ex}{\mbox{\tiny $\sim$}}} + +\def\gap{\vspace{0.5ex}} +\makeindex +\begin{document} +\title{LibTomCrypt \\ Version 0.97b} +\author{Tom St Denis \\ +\\ +tomstdenis@iahu.ca \\ +http://libtomcrypt.org +} +\maketitle +This text and source code library are both hereby placed in the public domain. This book has been +formatted for A4 paper using the \LaTeX{} {\em book} macro package. + +\vspace{10cm} + +\begin{flushright}Open Source. Open Academia. Open Minds. + +\mbox{ } + +Tom St Denis, + +Phone: 1-613-836-3160 + +111 Banning Rd + +Kanata, Ontario + +K2L 1C3 + +Canada +\end{flushright} +\newpage +\tableofcontents +\chapter{Introduction} +\section{What is the LibTomCrypt?} +LibTomCrypt is a portable ANSI C cryptographic library that supports symmetric ciphers, one-way hashes, +pseudo-random number generators, public key cryptography (via RSA,DH or ECC/DH) and a plethora of support +routines. It is designed to compile out of the box with the GNU C Compiler (GCC) version 2.95.3 (and higher) +and with MSVC version 6 in win32. + +The library has been successfully tested on quite a few other platforms ranging from the ARM7TDMI in a +Gameboy Advanced to various PowerPC processors and even the MIPS processor in the PlayStation 2. Suffice it +to say the code is portable. + +The library is designed so new ciphers/hashes/PRNGs can be added at runtime and the existing API (and helper API functions) will +be able to use the new designs automatically. There exist self-check functions for each cipher and hash to ensure that +they compile and execute to the published design specifications. The library also performs extensive parameter error checking +and will give verbose error messages when possible. + +Essentially the library saves the time of having to implement the ciphers, hashes, prngs yourself. Typically implementing +useful cryptography is an error prone business which means anything that can save considerable time and effort is a good +thing. + +\subsection{What the library IS for?} + +The library typically serves as a basis for other protocols and message formats. For example, it should be possible to +take the RSA routines out of this library, apply the appropriate message padding and get PKCS compliant RSA routines. +Similarly SSL protocols could be formed on top of the low-level symmetric cipher functions. The goal of this package is +to provide these low level core functions in a robust and easy to use fashion. + +The library also serves well as a toolkit for applications where they don't need to be OpenPGP, PKCS, etc. compliant. +Included are fully operational public key routines for encryption, decryption, signature generation and verification. +These routines are fully portable but are not conformant to any known set of standards\footnote{With the exception of +the RSA code which is based on the PKCS \#1 standards.}. They are all based on established +number theory and cryptography. + +\subsection{What the library IS NOT for?} + +The library is not designed to be in anyway an implementation of the SSL or OpenPGP standards. The library +is not designed to be compliant with any known form of API or programming hierarchy. It is not a port of any other +library and it is not platform specific (like the MS CSP). So if you're looking to drop in some buzzword +compliant crypto library this is not for you. The library has been written from scratch to provide basic functions as +well as non-standard higher level functions. + +This is not to say that the library is a ``homebrew'' project. All of the symmetric ciphers and one-way hash functions +conform to published test vectors. The public key functions are derived from publicly available material and the majority +of the code has been reviewed by a growing community of developers. + +\subsubsection{Why not?} +You may be asking why I didn't choose to go all out and support standards like P1363, PKCS and the whole lot. The reason +is quite simple too much money gets in the way. When I tried to access the P1363 draft documents and was denied (it +requires a password) I realized that they're just a business anyways. See what happens is a company will sit down and +invent a ``standard''. Then they try to sell it to as many people as they can. All of a sudden this ``standard'' is +everywhere. Then the standard is updated every so often to keep people dependent. Then you become RSA. If people are +supposed to support these standards they had better make them more accessible. + +\section{Why did I write it?} +You may be wondering, ``Tom, why did you write a crypto library. I already have one.''. Well the reason falls into +two categories: +\begin{enumerate} + \item I am too lazy to figure out someone else's API. I'd rather invent my own simpler API and use that. + \item It was (still is) good coding practice. +\end{enumerate} + +The idea is that I am not striving to replace OpenSSL or Crypto++ or Cryptlib or etc. I'm trying to write my +{\bf own} crypto library and hopefully along the way others will appreciate the work. + +With this library all core functions (ciphers, hashes, prngs) have the {\bf exact} same prototype definition. They all load +and store data in a format independent of the platform. This means if you encrypt with Blowfish on a PPC it should decrypt +on an x86 with zero problems. The consistent API also means that if you learn how to use blowfish with my library you +know how to use Safer+ or RC6 or Serpent or ... as well. With all of the core functions there are central descriptor tables +that can be used to make a program automatically pick between ciphers, hashes and PRNGs at runtime. That means your +application can support all ciphers/hashes/prngs without changing the source code. + +\subsection{Modular} +The LibTomCrypt package has also been written to be very modular. The block ciphers, one-way hashes and +pseudo-random number generators (PRNG) are all used within the API through ``descriptor'' tables which +are essentially structures with pointers to functions. While you can still call particular functions +directly (\textit{e.g. sha256\_process()}) this descriptor interface allows the developer to customize their +usage of the library. + +For example, consider a hardware platform with a specialized RNG device. Obviously one would like to tap +that for the PRNG needs within the library (\textit{e.g. making a RSA key}). All the developer has todo +is write a descriptor and the few support routines required for the device. After that the rest of the +API can make use of it without change. Similiarly imagine a few years down the road when AES2 (\textit{or whatever they call it}) is +invented. It can be added to the library and used within applications with zero modifications to the +end applications provided they are written properly. + +This flexibility within the library means it can be used with any combination of primitive algorithms and +unlike libraries like OpenSSL is not tied to direct routines. For instance, in OpenSSL there are CBC block +mode routines for every single cipher. That means every time you add or remove a cipher from the library +you have to update the associated support code as well. In LibTomCrypt the associated code (\textit{chaining modes in this case}) +are not directly tied to the ciphers. That is a new cipher can be added to the library by simply providing +the key setup, ECB decrypt and encrypt and test vector routines. After that all five chaining mode routines +can make use of the cipher right away. + + +\section{License} + +All of the source code except for the following files have been written by the author or donated to the project +under a public domain license: + +\begin{enumerate} + \item rc2.c + \item safer.c +\end{enumerate} + +`mpi.c'' was originally written by Michael Fromberger (sting@linguist.dartmouth.edu) but has since been replaced with my LibTomMath +library. + +``rc2.c'' is based on publicly available code that is not attributed to a person from the given source. ``safer.c'' +was written by Richard De Moliner (demoliner@isi.ee.ethz.ch) and seems to be free for use. + +The project is hereby released as public domain. + +\section{Patent Disclosure} + +The author (Tom St Denis) is not a patent lawyer so this section is not to be treated as legal advice. To the best +of the authors knowledge the only patent related issues within the library are the RC5 and RC6 symmetric block ciphers. +They can be removed from a build by simply commenting out the two appropriate lines in ``mycrypt\_custom.h''. The rest +of the ciphers and hashes are patent free or under patents that have since expired. + +The RC2 and RC4 symmetric ciphers are not under patents but are under trademark regulations. This means you can use +the ciphers you just can't advertise that you are doing so. + +\section{Building the library} + +To build the library on a GCC equipped platform simply type ``make'' at your command prompt. It will build the library +file ``libtomcrypt.a''. + +To install the library copy all of the ``.h'' files into your ``\#include'' path and the single libtomcrypt.a file into +your library path. + +With MSVC you can build the library with ``nmake -f makefile.msvc''. This will produce a ``tomcrypt.lib'' file which +is the core library. Copy the header files into your MSVC include path and the library in the lib path (typically +under where VC98 is installed). + +\section{Building against the library} + +In the recent versions the build steps have changed. The build options are now stored in ``mycrypt\_custom.h'' and +no longer in the makefile. If you change a build option in that file you must re-build the library from clean to +ensure the build is intact. + +\section{Thanks} +I would like to give thanks to the following people (in no particular order) for helping me develop this project from +early on: +\begin{enumerate} + \item Richard van de Laarschot + \item Richard Heathfield + \item Ajay K. Agrawal + \item Brian Gladman + \item Svante Seleborg + \item Clay Culver + \item Jason Klapste + \item Dobes Vandermeer + \item Daniel Richards + \item Wayne Scott + \item Andrew Tyler + \item Sky Schulz + \item Christopher Imes +\end{enumerate} + +There have been quite a few other people as well. Please check the change log to see who else has contributed from +time to time. + + +\chapter{The Application Programming Interface (API)} +\section{Introduction} +\index{CRYPT\_ERROR} \index{CRYPT\_OK} + +In general the API is very simple to memorize and use. Most of the functions return either {\bf void} or {\bf int}. Functions +that return {\bf int} will return {\bf CRYPT\_OK} if the function was successful or one of the many error codes +if it failed. Certain functions that return int will return $-1$ to indicate an error. These functions will be explicitly +commented upon. When a function does return a CRYPT error code it can be translated into a string with + +\index{error\_to\_string()} +\begin{verbatim} +const char *error_to_string(int err); +\end{verbatim} + +An example of handling an error is: +\begin{verbatim} +void somefunc(void) +{ + int err; + + /* call a cryptographic function */ + if ((err = some_crypto_function(...)) != CRYPT_OK) { + printf("A crypto error occured, %s\n", error_to_string(err)); + /* perform error handling */ + } + /* continue on if no error occured */ +} +\end{verbatim} + +There is no initialization routine for the library and for the most part the code is thread safe. The only thread +related issue is if you use the same symmetric cipher, hash or public key state data in multiple threads. Normally +that is not an issue. + +To include the prototypes for ``LibTomCrypt.a'' into your own program simply include ``mycrypt.h'' like so: +\begin{verbatim} +#include +int main(void) { + return 0; +} +\end{verbatim} + +The header file ``mycrypt.h'' also includes ``stdio.h'', ``string.h'', ``stdlib.h'', ``time.h'', ``ctype.h'' and ``mpi.h'' +(the bignum library routines). + +\section{Macros} + +There are a few helper macros to make the coding process a bit easier. The first set are related to loading and storing +32/64-bit words in little/big endian format. The macros are: + +\index{STORE32L} \index{STORE64L} \index{LOAD32L} \index{LOAD64L} +\index{STORE32H} \index{STORE64H} \index{LOAD32H} \index{LOAD64H} \index{BSWAP} +\begin{small} +\begin{center} +\begin{tabular}{|c|c|c|} + \hline STORE32L(x, y) & {\bf unsigned long} x, {\bf unsigned char} *y & $x \to y[0 \ldots 3]$ \\ + \hline STORE64L(x, y) & {\bf unsigned long long} x, {\bf unsigned char} *y & $x \to y[0 \ldots 7]$ \\ + \hline LOAD32L(x, y) & {\bf unsigned long} x, {\bf unsigned char} *y & $y[0 \ldots 3] \to x$ \\ + \hline LOAD64L(x, y) & {\bf unsigned long long} x, {\bf unsigned char} *y & $y[0 \ldots 7] \to x$ \\ + \hline STORE32H(x, y) & {\bf unsigned long} x, {\bf unsigned char} *y & $x \to y[3 \ldots 0]$ \\ + \hline STORE64H(x, y) & {\bf unsigned long long} x, {\bf unsigned char} *y & $x \to y[7 \ldots 0]$ \\ + \hline LOAD32H(x, y) & {\bf unsigned long} x, {\bf unsigned char} *y & $y[3 \ldots 0] \to x$ \\ + \hline LOAD64H(x, y) & {\bf unsigned long long} x, {\bf unsigned char} *y & $y[7 \ldots 0] \to x$ \\ + \hline BSWAP(x) & {\bf unsigned long} x & Swaps the byte order of x. \\ + \hline +\end{tabular} +\end{center} +\end{small} + +There are 32-bit cyclic rotations as well: +\index{ROL} \index{ROR} +\begin{center} +\begin{tabular}{|c|c|c|} + \hline ROL(x, y) & {\bf unsigned long} x, {\bf unsigned long} y & $x << y$ \\ + \hline ROR(x, y) & {\bf unsigned long} x, {\bf unsigned long} y & $x >> y$ \\ + \hline +\end{tabular} +\end{center} + +\section{Functions with Variable Length Output} +Certain functions such as (for example) ``rsa\_export()'' give an output that is variable length. To prevent buffer overflows you +must pass it the length of the buffer\footnote{Extensive error checking is not in place but it will be in future releases so it is a good idea to follow through with these guidelines.} where +the output will be stored. For example: +\begin{small} +\begin{verbatim} +#include +int main(void) { + rsa_key key; + unsigned char buffer[1024]; + unsigned long x; + int err; + + /* ... Make up the RSA key somehow */ + + /* lets export the key, set x to the size of the output buffer */ + x = sizeof(buffer); + if ((err = rsa_export(buffer, &x, PK_PUBLIC, &key)) != CRYPT_OK) { + printf("Export error: %s\n", error_to_string(err)); + return -1; + } + + /* if rsa_export() was successful then x will have the size of the output */ + printf("RSA exported key takes %d bytes\n", x); + + /* ... do something with the buffer */ + + return 0; +} +\end{verbatim} +\end{small} +In the above example if the size of the RSA public key was more than 1024 bytes this function would not store anything in +either ``buffer'' or ``x'' and simply return an error code. If the function suceeds it stores the length of the output +back into ``x'' so that the calling application will know how many bytes used. + +\section{Functions that need a PRNG} +Certain functions such as ``rsa\_make\_key()'' require a PRNG. These functions do not setup the PRNG themselves so it is +the responsibility of the calling function to initialize the PRNG before calling them. + +\section{Functions that use Arrays of Octets} +Most functions require inputs that are arrays of the data type ``unsigned char''. Whether it is a symmetric key, IV +for a chaining mode or public key packet it is assumed that regardless of the actual size of ``unsigned char'' only the +lower eight bits contain data. For example, if you want to pass a 256 bit key to a symmetric ciphers setup routine +you must pass it in (a pointer to) an array of 32 ``unsigned char'' variables. Certain routines +(such as SAFER+) take special care to work properly on platforms where an ``unsigned char'' is not eight bits. + +For the purposes of this library the term ``byte'' will refer to an octet or eight bit word. Typically an array of +type ``byte'' will be synonymous with an array of type ``unsigned char''. + +\chapter{Symmetric Block Ciphers} +\section{Core Functions} + +Libtomcrypt provides several block ciphers all in a plain vanilla ECB block mode. Its important to first note that you +should never use the ECB modes directly to encrypt data. Instead you should use the ECB functions to make a chaining mode +or use one of the provided chaining modes. All of the ciphers are written as ECB interfaces since it allows the rest of +the API to grow in a modular fashion. + +All ciphers store their scheduled keys in a single data type called ``symmetric\_key''. This allows all ciphers to +have the same prototype and store their keys as naturally as possible. All ciphers provide five visible functions which +are (given that XXX is the name of the cipher): +\index{Cipher Setup} +\begin{verbatim} +int XXX_setup(const unsigned char *key, int keylen, int rounds, + symmetric_key *skey); +\end{verbatim} + +The XXX\_setup() routine will setup the cipher to be used with a given number of rounds and a given key length (in bytes). +The number of rounds can be set to zero to use the default, which is generally a good idea. + +If the function returns successfully the variable ``skey'' will have a scheduled key stored in it. Its important to note +that you should only used this scheduled key with the intended cipher. For example, if you call +``blowfish\_setup()'' do not pass the scheduled key onto ``rc5\_ecb\_encrypt()''. All setup functions do not allocate +memory off the heap so when you are done with a key you can simply discard it (e.g. they can be on the stack). + +To encrypt or decrypt a block in ECB mode there are these two functions: +\index{Cipher Encrypt} \index{Cipher Decrypt} +\begin{verbatim} +void XXX_ecb_encrypt(const unsigned char *pt, unsigned char *ct, + symmetric_key *skey); + +void XXX_ecb_decrypt(const unsigned char *ct, unsigned char *pt, + symmetric_key *skey); +\end{verbatim} +These two functions will encrypt or decrypt (respectively) a single block of text\footnote{The size of which depends on +which cipher you are using.} and store the result where you want it. It is possible that the input and output buffer are +the same buffer. For the encrypt function ``pt''\footnote{pt stands for plaintext.} is the input and ``ct'' is the output. +For the decryption function its the opposite. To test a particular cipher against test vectors\footnote{As published in their design papers.} call: \index{Cipher Testing} +\begin{verbatim} +int XXX_test(void); +\end{verbatim} +This function will return {\bf CRYPT\_OK} if the cipher matches the test vectors from the design publication it is +based upon. Finally for each cipher there is a function which will help find a desired key size: +\begin{verbatim} +int XXX_keysize(int *keysize); +\end{verbatim} +Essentially it will round the input keysize in ``keysize'' down to the next appropriate key size. This function +return {\bf CRYPT\_OK} if the key size specified is acceptable. For example: +\begin{small} +\begin{verbatim} +#include +int main(void) +{ + int keysize, err; + + /* now given a 20 byte key what keysize does Twofish want to use? */ + keysize = 20; + if ((err = twofish_keysize(&keysize)) != CRYPT_OK) { + printf("Error getting key size: %s\n", error_to_string(err)); + return -1; + } + printf("Twofish suggested a key size of %d\n", keysize); + return 0; +} +\end{verbatim} +\end{small} +This should indicate a keysize of sixteen bytes is suggested. An example snippet that encodes a block with +Blowfish in ECB mode is below. + +\begin{small} +\begin{verbatim} +#include +int main(void) +{ + unsigned char pt[8], ct[8], key[8]; + symmetric_key skey; + int err; + + /* ... key is loaded appropriately in ``key'' ... */ + /* ... load a block of plaintext in ``pt'' ... */ + + /* schedule the key */ + if ((err = blowfish_setup(key, /* the key we will use */ + 8, /* key is 8 bytes (64-bits) long */ + 0, /* 0 == use default # of rounds */ + &skey) /* where to put the scheduled key */ + ) != CRYPT_OK) { + printf("Setup error: %s\n", error_to_string(err)); + return -1; + } + + /* encrypt the block */ + blowfish_ecb_encrypt(pt, /* encrypt this 8-byte array */ + ct, /* store encrypted data here */ + &skey); /* our previously scheduled key */ + + /* decrypt the block */ + blowfish_ecb_decrypt(ct, /* decrypt this 8-byte array */ + pt, /* store decrypted data here */ + &skey); /* our previously scheduled key */ + + return 0; +} +\end{verbatim} +\end{small} + +\section{Key Sizes and Number of Rounds} +\index{Symmetric Keys} +As a general rule of thumb do not use symmetric keys under 80 bits if you can. Only a few of the ciphers support smaller +keys (mainly for test vectors anyways). Ideally your application should be making at least 256 bit keys. This is not +because you're supposed to be paranoid. Its because if your PRNG has a bias of any sort the more bits the better. For +example, if you have $\mbox{Pr}\left[X = 1\right] = {1 \over 2} \pm \gamma$ where $\vert \gamma \vert > 0$ then the +total amount of entropy in N bits is $N \cdot -log_2\left ({1 \over 2} + \vert \gamma \vert \right)$. So if $\gamma$ +were $0.25$ (a severe bias) a 256-bit string would have about 106 bits of entropy whereas a 128-bit string would have +only 53 bits of entropy. + +The number of rounds of most ciphers is not an option you can change. Only RC5 allows you to change the number of +rounds. By passing zero as the number of rounds all ciphers will use their default number of rounds. Generally the +ciphers are configured such that the default number of rounds provide adequate security for the given block size. + +\section{The Cipher Descriptors} +\index{Cipher Descriptor} +To facilitate automatic routines an array of cipher descriptors is provided in the array ``cipher\_descriptor''. An element +of this array has the following format: + +\begin{verbatim} +struct _cipher_descriptor { + char *name; + unsigned long min_key_length, max_key_length, + block_length, default_rounds; + int (*setup) (const unsigned char *key, int keylength, + int num_rounds, symmetric_key *skey); + void (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, + symmetric_key *key); + void (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, + symmetric_key *key); + int (*test) (void); + int (*keysize) (int *desired_keysize); +}; +\end{verbatim} + +Where ``name'' is the lower case ASCII version of the name. The fields ``min\_key\_length'', ``max\_key\_length'' and +``block\_length'' are all the number of bytes not bits. As a good rule of thumb it is assumed that the cipher supports +the min and max key lengths but not always everything in between. The ``default\_rounds'' field is the default number +of rounds that will be used. + +The remaining fields are all pointers to the core functions for each cipher. The end of the cipher\_descriptor array is +marked when ``name'' equals {\bf NULL}. + +As of this release the current cipher\_descriptors elements are + +\index{Cipher descriptor table} +\begin{small} +\begin{center} +\begin{tabular}{|c|c|c|c|c|c|} + \hline Name & Descriptor Name & Block Size & Key Range & Rounds \\ + \hline Blowfish & blowfish\_desc & 8 & 8 $\ldots$ 56 & 16 \\ + \hline X-Tea & xtea\_desc & 8 & 16 & 32 \\ + \hline RC2 & rc2\_desc & 8 & 8 $\ldots$ 128 & 16 \\ + \hline RC5-32/12/b & rc5\_desc & 8 & 8 $\ldots$ 128 & 12 $\ldots$ 24 \\ + \hline RC6-32/20/b & rc6\_desc & 16 & 8 $\ldots$ 128 & 20 \\ + \hline SAFER+ & saferp\_desc &16 & 16, 24, 32 & 8, 12, 16 \\ + \hline Safer K64 & safer\_k64\_desc & 8 & 8 & 6 $\ldots$ 13 \\ + \hline Safer SK64 & safer\_sk64\_desc & 8 & 8 & 6 $\ldots$ 13 \\ + \hline Safer K128 & safer\_k128\_desc & 8 & 16 & 6 $\ldots$ 13 \\ + \hline Safer SK128 & safer\_sk128\_desc & 8 & 16 & 6 $\ldots$ 13 \\ + \hline AES & aes\_desc & 16 & 16, 24, 32 & 10, 12, 14 \\ + & aes\_enc\_desc & 16 & 16, 24, 32 & 10, 12, 14 \\ + \hline Twofish & twofish\_desc & 16 & 16, 24, 32 & 16 \\ + \hline DES & des\_desc & 8 & 7 & 16 \\ + \hline 3DES (EDE mode) & des3\_desc & 8 & 21 & 16 \\ + \hline CAST5 (CAST-128) & cast5\_desc & 8 & 5 $\ldots$ 16 & 12, 16 \\ + \hline Noekeon & noekeon\_desc & 16 & 16 & 16 \\ + \hline Skipjack & skipjack\_desc & 8 & 10 & 32 \\ + \hline +\end{tabular} +\end{center} +\end{small} + +\subsection{Notes} +\begin{small} +\begin{enumerate} +\item +For AES (also known as Rijndael) there are four descriptors which complicate issues a little. The descriptors +rijndael\_desc and rijndael\_enc\_desc provide the cipher named ``rijndael''. The descriptors aes\_desc and +aes\_enc\_desc provide the cipher name ``aes''. Functionally both ``rijndael'' and ``aes'' are the same cipher. The +only difference is when you call find\_cipher() you have to pass the correct name. The cipher descriptors with ``enc'' +in the middle (e.g. rijndael\_enc\_desc) are related to an implementation of Rijndael with only the encryption routine +and tables. The decryption and self--test function pointers of both ``encrypt only'' descriptors are set to \textbf{NULL} and +should not be called. + +The ``encrypt only'' descriptors are useful for applications that only use the encryption function of the cipher. Algorithms such +as EAX, PMAC and OMAC only require the encryption function. So far this ``encrypt only'' functionality has only been implemented for +Rijndael as it makes the most sense for this cipher. + +\item +For the 64-bit SAFER famliy of ciphers (e.g K64, SK64, K128, SK128) the ecb\_encrypt() and ecb\_decrypt() +functions are the same. So if you want to use those functions directly just call safer\_ecb\_encrypt() +or safer\_ecb\_decrypt() respectively. + +\item +Note that for ``DES'' and ``3DES'' they use 8 and 24 byte keys but only 7 and 21 [respectively] bytes of the keys are in +fact used for the purposes of encryption. My suggestion is just to use random 8/24 byte keys instead of trying to make a 8/24 +byte string from the real 7/21 byte key. + +\item +Note that ``Twofish'' has additional configuration options that take place at build time. These options are found in +the file ``mycrypt\_cfg.h''. The first option is ``TWOFISH\_SMALL'' which when defined will force the Twofish code +to not pre-compute the Twofish ``$g(X)$'' function as a set of four $8 \times 32$ s-boxes. This means that a scheduled +key will require less ram but the resulting cipher will be slower. The second option is ``TWOFISH\_TABLES'' which when +defined will force the Twofish code to use pre-computed tables for the two s-boxes $q_0, q_1$ as well as the multiplication +by the polynomials 5B and EF used in the MDS multiplication. As a result the code is faster and slightly larger. The +speed increase is useful when ``TWOFISH\_SMALL'' is defined since the s-boxes and MDS multiply form the heart of the +Twofish round function. + +\index{Twofish build options} +\begin{small} +\begin{center} +\begin{tabular}{|l|l|l|} +\hline TWOFISH\_SMALL & TWOFISH\_TABLES & Speed and Memory (per key) \\ +\hline undefined & undefined & Very fast, 4.2KB of ram. \\ +\hline undefined & defined & Faster keysetup, larger code. \\ +\hline defined & undefined & Very slow, 0.2KB of ram. \\ +\hline defined & defined & Faster, 0.2KB of ram, larger code. \\ +\hline +\end{tabular} +\end{center} +\end{small} + +\end{enumerate} +\end{small} + +To work with the cipher\_descriptor array there is a function: +\index{find\_cipher()} +\begin{verbatim} +int find_cipher(char *name) +\end{verbatim} +Which will search for a given name in the array. It returns negative one if the cipher is not found, otherwise it returns +the location in the array where the cipher was found. For example, to indirectly setup Blowfish you can also use: +\begin{small} +\begin{verbatim} +#include +int main(void) +{ + unsigned char key[8]; + symmetric_key skey; + int err; + + /* you must register a cipher before you use it */ + if (register_cipher(&blowfish_desc)) == -1) { + printf("Unable to register Blowfish cipher."); + return -1; + } + + /* generic call to function (assuming the key in key[] was already setup) */ + if ((err = cipher_descriptor[find_cipher("blowfish")].setup(key, 8, 0, &skey)) != + CRYPT_OK) { + printf("Error setting up Blowfish: %s\n", error_to_string(err)); + return -1; + } + + /* ... use cipher ... */ +} +\end{verbatim} +\end{small} + +A good safety would be to check the return value of ``find\_cipher()'' before accessing the desired function. In order +to use a cipher with the descriptor table you must register it first using: +\index{register\_cipher()} +\begin{verbatim} +int register_cipher(const struct _cipher_descriptor *cipher); +\end{verbatim} +Which accepts a pointer to a descriptor and returns the index into the global descriptor table. If an error occurs such +as there is no more room (it can have 32 ciphers at most) it will return {\bf{-1}}. If you try to add the same cipher more +than once it will just return the index of the first copy. To remove a cipher call: +\index{unregister\_cipher()} +\begin{verbatim} +int unregister_cipher(const struct _cipher_descriptor *cipher); +\end{verbatim} +Which returns {\bf CRYPT\_OK} if it removes it otherwise it returns {\bf CRYPT\_ERROR}. Consider: +\begin{small} +\begin{verbatim} +#include +int main(void) +{ + int err; + + /* register the cipher */ + if (register_cipher(&rijndael_desc) == -1) { + printf("Error registering Rijndael\n"); + return -1; + } + + /* use Rijndael */ + + /* remove it */ + if ((err = unregister_cipher(&rijndael_desc)) != CRYPT_OK) { + printf("Error removing Rijndael: %s\n", error_to_string(err)); + return -1; + } + + return 0; +} +\end{verbatim} +\end{small} +This snippet is a small program that registers only Rijndael only. + +\section{Symmetric Modes of Operations} +\subsection{Background} +A typical symmetric block cipher can be used in chaining modes to effectively encrypt messages larger than the block +size of the cipher. Given a key $k$, a plaintext $P$ and a cipher $E$ we shall denote the encryption of the block +$P$ under the key $k$ as $E_k(P)$. In some modes there exists an initial vector denoted as $C_{-1}$. + +\subsubsection{ECB Mode} +\index{ECB mode} +ECB or Electronic Codebook Mode is the simplest method to use. It is given as: +\begin{equation} +C_i = E_k(P_i) +\end{equation} +This mode is very weak since it allows people to swap blocks and perform replay attacks if the same key is used more +than once. + +\subsubsection{CBC Mode} +\index{CBC mode} +CBC or Cipher Block Chaining mode is a simple mode designed to prevent trivial forms of replay and swap attacks on ciphers. +It is given as: +\begin{equation} +C_i = E_k(P_i \oplus C_{i - 1}) +\end{equation} +It is important that the initial vector be unique and preferably random for each message encrypted under the same key. + +\subsubsection{CTR Mode} +\index{CTR mode} +CTR or Counter Mode is a mode which only uses the encryption function of the cipher. Given a initial vector which is +treated as a large binary counter the CTR mode is given as: +\begin{eqnarray} +C_{-1} = C_{-1} + 1\mbox{ }(\mbox{mod }2^W) \nonumber \\ +C_i = P_i \oplus E_k(C_{-1}) +\end{eqnarray} +Where $W$ is the size of a block in bits (e.g. 64 for Blowfish). As long as the initial vector is random for each message +encrypted under the same key replay and swap attacks are infeasible. CTR mode may look simple but it is as secure +as the block cipher is under a chosen plaintext attack (provided the initial vector is unique). + +\subsubsection{CFB Mode} +\index{CFB mode} +CFB or Ciphertext Feedback Mode is a mode akin to CBC. It is given as: +\begin{eqnarray} +C_i = P_i \oplus C_{-1} \nonumber \\ +C_{-1} = E_k(C_i) +\end{eqnarray} +Note that in this library the output feedback width is equal to the size of the block cipher. That is this mode is used +to encrypt whole blocks at a time. However, the library will buffer data allowing the user to encrypt or decrypt partial +blocks without a delay. When this mode is first setup it will initially encrypt the initial vector as required. + +\subsubsection{OFB Mode} +\index{OFB mode} +OFB or Output Feedback Mode is a mode akin to CBC as well. It is given as: +\begin{eqnarray} +C_{-1} = E_k(C_{-1}) \nonumber \\ +C_i = P_i \oplus C_{-1} +\end{eqnarray} +Like the CFB mode the output width in CFB mode is the same as the width of the block cipher. OFB mode will also +buffer the output which will allow you to encrypt or decrypt partial blocks without delay. + +\subsection{Choice of Mode} +My personal preference is for the CTR mode since it has several key benefits: +\begin{enumerate} + \item No short cycles which is possible in the OFB and CFB modes. + \item Provably as secure as the block cipher being used under a chosen plaintext attack. + \item Technically does not require the decryption routine of the cipher. + \item Allows random access to the plaintext. + \item Allows the encryption of block sizes that are not equal to the size of the block cipher. +\end{enumerate} +The CTR, CFB and OFB routines provided allow you to encrypt block sizes that differ from the ciphers block size. They +accomplish this by buffering the data required to complete a block. This allows you to encrypt or decrypt any size +block of memory with either of the three modes. + +The ECB and CBC modes process blocks of the same size as the cipher at a time. Therefore they are less flexible than the +other modes. + +\subsection{Implementation} +\index{CBC Mode} \index{CTR Mode} +\index{OFB Mode} \index{CFB Mode} +The library provides simple support routines for handling CBC, CTR, CFB, OFB and ECB encoded messages. Assuming the mode +you want is XXX there is a structure called ``symmetric\_XXX'' that will contain the information required to +use that mode. They have identical setup routines (except ECB mode for obvious reasons): +\index{ecb\_start()} \index{cfb\_start()} \index{cbc\_start()} \index{ofb\_start()} \index{ctr\_start()} +\begin{verbatim} +int XXX_start(int cipher, const unsigned char *IV, + const unsigned char *key, int keylen, + int num_rounds, symmetric_XXX *XXX); + +int ecb_start(int cipher, const unsigned char *key, int keylen, + int num_rounds, symmetric_ECB *ecb); +\end{verbatim} + +In each case ``cipher'' is the index into the cipher\_descriptor array of the cipher you want to use. The ``IV'' value is +the initialization vector to be used with the cipher. You must fill the IV yourself and it is assumed they are the same +length as the block size\footnote{In otherwords the size of a block of plaintext for the cipher, e.g. 8 for DES, 16 for AES, etc.} +of the cipher you choose. It is important that the IV be random for each unique message you want to encrypt. The +parameters ``key'', ``keylen'' and ``num\_rounds'' are the same as in the XXX\_setup() function call. The final parameter +is a pointer to the structure you want to hold the information for the mode of operation. + +Both routines return {\bf CRYPT\_OK} if the cipher initialized correctly, otherwise they return an error code. To +actually encrypt or decrypt the following routines are provided: +\index{ecb\_encrypt()} \index{ecb\_decrypt()} \index{cfb\_encrypt()} \index{cfb\_decrypt()} +\index{cbc\_encrypt()} \index{cbc\_decrypt()} \index{ofb\_encrypt()} \index{ofb\_decrypt()} \index{ctr\_encrypt()} \index{ctr\_decrypt()} +\begin{verbatim} +int XXX_encrypt(const unsigned char *pt, unsigned char *ct, + symmetric_XXX *XXX); +int XXX_decrypt(const unsigned char *ct, unsigned char *pt, + symmetric_XXX *XXX); + +int YYY_encrypt(const unsigned char *pt, unsigned char *ct, + unsigned long len, symmetric_YYY *YYY); +int YYY_decrypt(const unsigned char *ct, unsigned char *pt, + unsigned long len, symmetric_YYY *YYY); +\end{verbatim} +Where ``XXX'' is one of (ecb, cbc) and ``YYY'' is one of (ctr, ofb, cfb). In the CTR, OFB and CFB cases ``len'' is the +size of the buffer (as number of chars) to encrypt or decrypt. The CTR, OFB and CFB modes are order sensitive but not +chunk sensitive. That is you can encrypt ``ABCDEF'' in three calls like ``AB'', ``CD'', ``EF'' or two like ``ABCDE'' and ``F'' +and end up with the same ciphertext. However, encrypting ``ABC'' and ``DABC'' will result in different ciphertexts. All +five of the modes will return {\bf CRYPT\_OK} on success from the encrypt or decrypt functions. + +To decrypt in either mode you simply perform the setup like before (recall you have to fetch the IV value you used) +and use the decrypt routine on all of the blocks. + +To change or read the IV of a previously initialized chaining mode use the following two functions. + +\index{cbc\_setiv()} \index{cbc\_getiv()} \index{ofb\_setiv()} \index{ofb\_getiv()} \index{cfb\_setiv()} \index{cfb\_getiv()} +\index{ctr\_setiv()} \index{ctr\_getiv()} +\begin{verbatim} +int XXX_getiv(unsigned char *IV, unsigned long *len, symmetric_XXX *XXX); +int XXX_setiv(const unsigned char *IV, unsigned long len, symmetric_XXX *XXX); +\end{verbatim} + +The XXX\_getiv function will read the IV out of the chaining mode and store it into ``IV'' along with the length of the IV +stored in ``len''. The XXX\_setiv will initialize the chaining mode state as if the original IV were the new IV specified. The length +of the IV passed in must be the size of the ciphers block size. + +The XXX\_setiv functions are handy if you wish to change the IV without re--keying the cipher. + +\newpage +\begin{small} +\begin{verbatim} +#include +int main(void) +{ + unsigned char key[16], IV[16], buffer[512]; + symmetric_CTR ctr; + int x, err; + + /* register twofish first */ + if (register_cipher(&twofish_desc) == -1) { + printf("Error registering cipher.\n"); + return -1; + } + + /* somehow fill out key and IV */ + + /* start up CTR mode */ + if ((err = ctr_start( + find_cipher("twofish"), /* index of desired cipher */ + IV, /* the initial vector */ + key, /* the secret key */ + 16, /* length of secret key (16 bytes, 128 bits) */ + 0, /* 0 == default # of rounds */ + &ctr) /* where to store initialized CTR state */ + ) != CRYPT_OK) { + printf("ctr_start error: %s\n", error_to_string(err)); + return -1; + } + + /* somehow fill buffer than encrypt it */ + if ((err = ctr_encrypt( buffer, /* plaintext */ + buffer, /* ciphertext */ + sizeof(buffer), /* length of data to encrypt */ + &ctr) /* previously initialized CTR state */ + ) != CRYPT_OK) { + printf("ctr_encrypt error: %s\n", error_to_string(err)); + return -1; + } + + /* make use of ciphertext... */ + + /* now we want to decrypt so let's use ctr_setiv */ + if ((err = ctr_setiv( IV, /* the initial IV we gave to ctr_start */ + 16, /* the IV is 16 bytes long */ + &ctr) /* the ctr state we wish to modify */ + ) != CRYPT_OK) { + printf("ctr_setiv error: %s\n", error_to_string(err)); + return -1; + } + + if ((err = ctr_decrypt( buffer, /* ciphertext */ + buffer, /* plaintext */ + sizeof(buffer), /* length of data to encrypt */ + &ctr) /* previously initialized CTR state */ + ) != CRYPT_OK) { + printf("ctr_decrypt error: %s\n", error_to_string(err)); + return -1; + } + + /* clear up and return */ + zeromem(key, sizeof(key)); + zeromem(&ctr, sizeof(ctr)); + + return 0; +} +\end{verbatim} +\end{small} + +\section{Encrypt and Authenticate Modes} + +\subsection{EAX Mode} +LibTomCrypt provides support for a mode called EAX\footnote{See +M. Bellare, P. Rogaway, D. Wagner, A Conventional Authenticated-Encryption Mode.} in a manner similar to the +way it was intended to be used by the designers. First a short description of what EAX mode is before I explain how to use it. +EAX is a mode that requires a cipher, CTR and OMAC support and provides encryption and authentication\footnote{Note that since EAX only requires OMAC and CTR you may use ``encrypt only'' cipher descriptors with this mode.}. +It is initialized with a random ``nonce'' that can be shared publicly as well as a ``header'' which can be fixed and public as well as a random +secret symmetric key. + +The ``header'' data is meant to be meta-data associated with a stream that isn't private (e.g. protocol messages). It can +be added at anytime during an EAX stream and is part of the authentication tag. That is, changes in the meta-data can +be detected by changes in the output tag. + +The mode can then process plaintext producing ciphertext as well as compute a partial checksum. The actual checksum +called a ``tag'' is only emitted when the message is finished. In the interim though the user can process any arbitrary +sized message block to send to the recipient as ciphertext. This makes the EAX mode especially suited for streaming modes +of operation. + +The mode is initialized with the following function. +\index{eax\_init()} +\begin{verbatim} +int eax_init(eax_state *eax, int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *header, unsigned long headerlen); +\end{verbatim} + +Where ``eax'' is the EAX state. ``cipher'' is the index of the desired cipher in the descriptor table. +``key'' is the shared secret symmetric key of length ``keylen''. ``nonce'' is the random public string of +length ``noncelen''. ``header'' is the random (or fixed or \textbf{NULL}) header for the message of length +``headerlen''. + +When this function completes ``eax'' will be initialized such that you can now either have data decrypted or +encrypted in EAX mode. Note that if ``headerlen'' is zero you may pass ``header'' as \textbf{NULL} to indicate +there is no initial header data. + +To encrypt or decrypt data in a streaming mode use the following. +\index{eax\_encrypt()} \index{eax\_decrypt()} +\begin{verbatim} +int eax_encrypt(eax_state *eax, const unsigned char *pt, + unsigned char *ct, unsigned long length); + +int eax_decrypt(eax_state *eax, const unsigned char *ct, + unsigned char *pt, unsigned long length); +\end{verbatim} +The function ``eax\_encrypt'' will encrypt the bytes in ``pt'' of ``length'' bytes and store the ciphertext in +``ct''. Note that ``ct'' and ``pt'' may be the same region in memory. This function will also send the ciphertext +through the OMAC function. The function ``eax\_decrypt'' decrypts ``ct'' and stores it in ``pt''. This also allows +``pt'' and ``ct'' to be the same region in memory. + +You cannot both encrypt or decrypt with the same ``eax'' context. For bi-directional communication you +will need to initialize two EAX contexts (preferably with different headers and nonces). + +Note that both of these functions allow you to send the data in any granularity but the order is important. While +the eax\_init() function allows you to add initial header data to the stream you can also add header data during the +EAX stream with the following. + +\index{eax\_addheader()} +\begin{verbatim} +int eax_addheader(eax_state *eax, + const unsigned char *header, unsigned long length); +\end{verbatim} + +This will add the ``length'' bytes from ``header'' to the given ``eax'' stream. Once the message is finished the +``tag'' (checksum) may be computed with the following function. + +\index{eax\_done()} +\begin{verbatim} +int eax_done(eax_state *eax, + unsigned char *tag, unsigned long *taglen); +\end{verbatim} +This will terminate the EAX state ``eax'' and store upto ``taglen'' bytes of the message tag in ``tag''. The function +then stores how many bytes of the tag were written out back into ``taglen''. + +The EAX mode code can be tested to ensure it matches the test vectors by calling the following function. +\index{eax\_test()} +\begin{verbatim} +int eax_test(void); +\end{verbatim} +This requires that the AES (or Rijndael) block cipher be registered with the cipher\_descriptor table first. + +\begin{verbatim} +#include +int main(void) +{ + int err; + eax_state eax; + unsigned char pt[64], ct[64], nonce[16], key[16], tag[16]; + unsigned long taglen; + + if (register_cipher(&rijndael_desc) == -1) { + printf("Error registering Rijndael"); + return EXIT_FAILURE; + } + + /* ... make up random nonce and key ... */ + + /* initialize context */ + if ((err = eax_init( &eax, /* the context */ + find_cipher("rijndael"), /* cipher we want to use */ + nonce, /* our state nonce */ + 16, /* none is 16 bytes */ + "TestApp", /* example header, identifies this program */ + 7) /* length of the header */ + ) != CRYPT_OK) { + printf("Error eax_init: %s", error_to_string(err)); + return EXIT_FAILURE; + } + + /* now encrypt data, say in a loop or whatever */ + if ((err = eax_encrypt( &eax, /* eax context */ + pt, /* plaintext (source) */ + ct, /* ciphertext (destination) */ + sizeof(pt) /* size of plaintext */ + ) != CRYPT_OK) { + printf("Error eax_encrypt: %s", error_to_string(err)); + return EXIT_FAILURE; + } + + /* finish message and get authentication tag */ + taglen = sizeof(tag); + if ((err = eax_done( &eax, /* eax context */ + tag, /* where to put tag */ + &taglen /* length of tag space */ + ) != CRYPT_OK) { + printf("Error eax_done: %s", error_to_string(err)); + return EXIT_FAILURE; + } + + /* now we have the authentication tag in "tag" and it's taglen bytes long */ + +} +\end{verbatim} + +You can also perform an entire EAX state on a block of memory in a single function call with the +following functions. + + +\index{eax\_encrypt\_authenticate\_memory} \index{eax\_decrypt\_verify\_memory} +\begin{verbatim} +int eax_encrypt_authenticate_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *header, unsigned long headerlen, + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen); + +int eax_decrypt_verify_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *header, unsigned long headerlen, + const unsigned char *ct, unsigned long ctlen, + unsigned char *pt, + unsigned char *tag, unsigned long taglen, + int *res); +\end{verbatim} + +Both essentially just call eax\_init() followed by eax\_encrypt() (or eax\_decrypt() respectively) and eax\_done(). The parameters +have the same meaning as with those respective functions. + +The only difference is eax\_decrypt\_verify\_memory() does not emit a tag. Instead you pass it a tag as input and it compares it against +the tag it computed while decrypting the message. If the tags match then it stores a $1$ in ``res'', otherwise it stores a $0$. + +\subsection{OCB Mode} +LibTomCrypt provides support for a mode called OCB\footnote{See +P. Rogaway, M. Bellare, J. Black, T. Krovetz, ``OCB: A Block Cipher Mode of Operation for Efficient Authenticated Encryption''.} +. OCB is an encryption protocol that simultaneously provides authentication. It is slightly faster to use than EAX mode +but is less flexible. Let's review how to initialize an OCB context. + +\index{ocb\_init()} +\begin{verbatim} +int ocb_init(ocb_state *ocb, int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce); +\end{verbatim} + +This will initialize the ``ocb'' context using cipher descriptor ``cipher''. It will use a ``key'' of length ``keylen'' +and the random ``nonce''. Note that ``nonce'' must be a random (public) string the same length as the block ciphers +block size (e.g. 16 bytes for AES). + +This mode has no ``Associated Data'' like EAX mode does which means you cannot authenticate metadata along with the stream. +To encrypt or decrypt data use the following. + +\index{ocb\_encrypt()} \index{ocb\_decrypt()} +\begin{verbatim} +int ocb_encrypt(ocb_state *ocb, const unsigned char *pt, unsigned char *ct); +int ocb_decrypt(ocb_state *ocb, const unsigned char *ct, unsigned char *pt); +\end{verbatim} + +This will encrypt (or decrypt for the latter) a fixed length of data from ``pt'' to ``ct'' (vice versa for the latter). +They assume that ``pt'' and ``ct'' are the same size as the block cipher's block size. Note that you cannot call +both functions given a single ``ocb'' state. For bi-directional communication you will have to initialize two ``ocb'' +states (with different nonces). Also ``pt'' and ``ct'' may point to the same location in memory. + +When you are finished encrypting the message you call the following function to compute the tag. + +\index{ocb\_done\_encrypt()} +\begin{verbatim} +int ocb_done_encrypt(ocb_state *ocb, + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen); +\end{verbatim} + +This will terminate an encrypt stream ``ocb''. If you have trailing bytes of plaintext that will not complete a block +you can pass them here. This will also encrypt the ``ptlen'' bytes in ``pt'' and store them in ``ct''. It will also +store upto ``taglen'' bytes of the tag into ``tag''. + +Note that ``ptlen'' must be less than or equal to the block size of block cipher chosen. Also note that if you have +an input message equal to the length of the block size then you pass the data here (not to ocb\_encrypt()) only. + +To terminate a decrypt stream and compared the tag you call the following. + +\index{ocb\_done\_decrypt()} +\begin{verbatim} +int ocb_done_decrypt(ocb_state *ocb, + const unsigned char *ct, unsigned long ctlen, + unsigned char *pt, + const unsigned char *tag, unsigned long taglen, + int *res); +\end{verbatim} + +Similarly to the previous function you can pass trailing message bytes into this function. This will compute the +tag of the message (internally) and then compare it against the ``taglen'' bytes of ``tag'' provided. By default +``res'' is set to zero. If all ``taglen'' bytes of ``tag'' can be verified then ``res'' is set to one (authenticated +message). + +To make life simpler the following two functions are provided for memory bound OCB. + +\index{ocb\_encrypt\_authenticate\_memory()} +\begin{verbatim} +int ocb_encrypt_authenticate_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen); +\end{verbatim} + +This will OCB encrypt the message ``pt'' of length ``ptlen'' and store the ciphertext in ``ct''. The length ``ptlen'' +can be any arbitrary length. + +\index{ocb\_decrypt\_verify\_memory()} +\begin{verbatim} +int ocb_decrypt_verify_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, + const unsigned char *ct, unsigned long ctlen, + unsigned char *pt, + const unsigned char *tag, unsigned long taglen, + int *res); +\end{verbatim} + +Similarly this will OCB decrypt and compare the internally computed tag against the tag provided. ``res'' is set +appropriately. + +\chapter{One-Way Cryptographic Hash Functions} +\section{Core Functions} + +Like the ciphers there are hash core functions and a universal data type to hold the hash state called ``hash\_state''. +To initialize hash XXX (where XXX is the name) call: +\index{Hash Functions} +\begin{verbatim} +void XXX_init(hash_state *md); +\end{verbatim} + +This simply sets up the hash to the default state governed by the specifications of the hash. To add data to the +message being hashed call: +\begin{verbatim} +int XXX_process(hash_state *md, const unsigned char *in, unsigned long len); +\end{verbatim} + +Essentially all hash messages are virtually infinitely\footnote{Most hashes are limited to $2^{64}$ bits or 2,305,843,009,213,693,952 bytes.} long message which +are buffered. The data can be passed in any sized chunks as long as the order of the bytes are the same the message digest +(hash output) will be the same. For example, this means that: +\begin{verbatim} +md5_process(&md, "hello ", 6); +md5_process(&md, "world", 5); +\end{verbatim} +Will produce the same message digest as the single call: +\index{Message Digest} +\begin{verbatim} +md5_process(&md, "hello world", 11); +\end{verbatim} + +To finally get the message digest (the hash) call: +\begin{verbatim} +int XXX_done(hash_state *md, + unsigned char *out); +\end{verbatim} + +This function will finish up the hash and store the result in the ``out'' array. You must ensure that ``out'' is long +enough for the hash in question. Often hashes are used to get keys for symmetric ciphers so the ``XXX\_done()'' functions +will wipe the ``md'' variable before returning automatically. + +To test a hash function call: +\begin{verbatim} +int XXX_test(void); +\end{verbatim} + +This will return {\bf CRYPTO\_OK} if the hash matches the test vectors, otherwise it returns an error code. An +example snippet that hashes a message with md5 is given below. +\begin{small} +\begin{verbatim} +#include +int main(void) +{ + hash_state md; + unsigned char *in = "hello world", out[16]; + + /* setup the hash */ + md5_init(&md); + + /* add the message */ + md5_process(&md, in, strlen(in)); + + /* get the hash in out[0..15] */ + md5_done(&md, out); + + return 0; +} +\end{verbatim} +\end{small} + +\section{Hash Descriptors} +Like the set of ciphers the set of hashes have descriptors too. They are stored in an array called ``hash\_descriptor'' and +are defined by: +\begin{verbatim} +struct _hash_descriptor { + char *name; + unsigned long hashsize; /* digest output size in bytes */ + unsigned long blocksize; /* the block size the hash uses */ + void (*init) (hash_state *); + int (*process)(hash_state *, const unsigned char *, unsigned long); + int (*done) (hash_state *, unsigned char *); + int (*test) (void); +}; +\end{verbatim} + +Similarly ``name'' is the name of the hash function in ASCII (all lowercase). ``hashsize'' is the size of the digest output +in bytes. The remaining fields are pointers to the functions that do the respective tasks. There is a function to +search the array as well called ``int find\_hash(char *name)''. It returns -1 if the hash is not found, otherwise the +position in the descriptor table of the hash. + +You can use the table to indirectly call a hash function that is chosen at runtime. For example: +\begin{small} +\begin{verbatim} +#include +int main(void) +{ + unsigned char buffer[100], hash[MAXBLOCKSIZE]; + int idx, x; + hash_state md; + + /* register hashes .... */ + if (register_hash(&md5_desc) == -1) { + printf("Error registering MD5.\n"); + return -1; + } + + /* register other hashes ... */ + + /* prompt for name and strip newline */ + printf("Enter hash name: \n"); + fgets(buffer, sizeof(buffer), stdin); + buffer[strlen(buffer) - 1] = 0; + + /* get hash index */ + idx = find_hash(buffer); + if (idx == -1) { + printf("Invalid hash name!\n"); + return -1; + } + + /* hash input until blank line */ + hash_descriptor[idx].init(&md); + while (fgets(buffer, sizeof(buffer), stdin) != NULL) + hash_descriptor[idx].process(&md, buffer, strlen(buffer)); + hash_descriptor[idx].done(&md, hash); + + /* dump to screen */ + for (x = 0; x < hash_descriptor[idx].hashsize; x++) + printf("%02x ", hash[x]); + printf("\n"); + return 0; +} +\end{verbatim} +\end{small} + +Note the usage of ``MAXBLOCKSIZE''. In Libtomcrypt no symmetric block, key or hash digest is larger than MAXBLOCKSIZE in +length. This provides a simple size you can set your automatic arrays to that will not get overrun. + +There are three helper functions as well: +\index{hash\_memory()} \index{hash\_file()} +\begin{verbatim} +int hash_memory(int hash, const unsigned char *data, + unsigned long len, unsigned char *dst, + unsigned long *outlen); + +int hash_file(int hash, const char *fname, + unsigned char *dst, + unsigned long *outlen); + +int hash_filehandle(int hash, FILE *in, + unsigned char *dst, unsigned long *outlen); +\end{verbatim} + +The ``hash'' parameter is the location in the descriptor table of the hash (\textit{e.g. the return of find\_hash()}). +The ``*outlen'' variable is used to keep track of the output size. You +must set it to the size of your output buffer before calling the functions. When they complete succesfully they store +the length of the message digest back in it. The functions are otherwise straightforward. The ``hash\_filehandle'' +function assumes that ``in'' is an file handle opened in binary mode. It will hash to the end of file and not reset +the file position when finished. + +To perform the above hash with md5 the following code could be used: +\begin{small} +\begin{verbatim} +#include +int main(void) +{ + int idx, err; + unsigned long len; + unsigned char out[MAXBLOCKSIZE]; + + /* register the hash */ + if (register_hash(&md5_desc) == -1) { + printf("Error registering MD5.\n"); + return -1; + } + + /* get the index of the hash */ + idx = find_hash("md5"); + + /* call the hash */ + len = sizeof(out); + if ((err = hash_memory(idx, "hello world", 11, out, &len)) != CRYPT_OK) { + printf("Error hashing data: %s\n", error_to_string(err)); + return -1; + } + return 0; +} +\end{verbatim} +\end{small} + +The following hashes are provided as of this release: +\index{Hash descriptor table} +\begin{center} +\begin{tabular}{|c|c|c|} + \hline Name & Descriptor Name & Size of Message Digest (bytes) \\ + \hline WHIRLPOOL & whirlpool\_desc & 64 \\ + \hline SHA-512 & sha512\_desc & 64 \\ + \hline SHA-384 & sha384\_desc & 48 \\ + \hline SHA-256 & sha256\_desc & 32 \\ + \hline SHA-224 & sha224\_desc & 28 \\ + \hline TIGER-192 & tiger\_desc & 24 \\ + \hline SHA-1 & sha1\_desc & 20 \\ + \hline RIPEMD-160 & rmd160\_desc & 20 \\ + \hline RIPEMD-128 & rmd128\_desc & 16 \\ + \hline MD5 & md5\_desc & 16 \\ + \hline MD4 & md4\_desc & 16 \\ + \hline MD2 & md2\_desc & 16 \\ + \hline +\end{tabular} +\end{center} + +Similar to the cipher descriptor table you must register your hash algorithms before you can use them. These functions +work exactly like those of the cipher registration code. The functions are: +\index{register\_hash()} \index{unregister\_hash()} +\begin{verbatim} +int register_hash(const struct _hash_descriptor *hash); +int unregister_hash(const struct _hash_descriptor *hash); +\end{verbatim} + +\subsection{Notice} +It is highly recommended that you \textbf{not} use the MD4 or MD5 hashes for the purposes of digital signatures or authentication codes. +These hashes are provided for completeness and they still can be used for the purposes of password hashing or one-way accumulators +(e.g. Yarrow). + +The other hashes such as the SHA-1, SHA-2 (that includes SHA-512, SHA-384 and SHA-256) and TIGER-192 are still considered secure +for all purposes you would normally use a hash for. + +\chapter{Message Authentication Codes} +\section{HMAC Protocol} +Thanks to Dobes Vandermeer the library now includes support for hash based message authenication codes or HMAC for short. An HMAC +of a message is a keyed authenication code that only the owner of a private symmetric key will be able to verify. The purpose is +to allow an owner of a private symmetric key to produce an HMAC on a message then later verify if it is correct. Any impostor or +eavesdropper will not be able to verify the authenticity of a message. + +The HMAC support works much like the normal hash functions except that the initialization routine requires you to pass a key +and its length. The key is much like a key you would pass to a cipher. That is, it is simply an array of octets stored in +chars. The initialization routine is: +\index{hmac\_init()} +\begin{verbatim} +int hmac_init(hmac_state *hmac, int hash, + const unsigned char *key, unsigned long keylen); +\end{verbatim} +The ``hmac'' parameter is the state for the HMAC code. ``hash'' is the index into the descriptor table of the hash you want +to use to authenticate the message. ``key'' is the pointer to the array of chars that make up the key. ``keylen'' is the +length (in octets) of the key you want to use to authenticate the message. To send octets of a message through the HMAC system you must use the following function: +\index{hmac\_process()} +\begin{verbatim} +int hmac_process(hmac_state *hmac, const unsigned char *buf, + unsigned long len); +\end{verbatim} +``hmac'' is the HMAC state you are working with. ``buf'' is the array of octets to send into the HMAC process. ``len'' is the +number of octets to process. Like the hash process routines you can send the data in arbitrarly sized chunks. When you +are finished with the HMAC process you must call the following function to get the HMAC code: +\index{hmac\_done()} +\begin{verbatim} +int hmac_done(hmac_state *hmac, unsigned char *hashOut, + unsigned long *outlen); +\end{verbatim} +``hmac'' is the HMAC state you are working with. ``hashOut'' is the array of octets where the HMAC code should be stored. You must +set ``outlen'' to the size of the destination buffer before calling this function. It is updated with the length of the HMAC code +produced (depending on which hash was picked). If ``outlen'' is less than the size of the message digest (and ultimately +the HMAC code) then the HMAC code is truncated as per FIPS-198 specifications (e.g. take the first ``outlen'' bytes). + +There are two utility functions provided to make using HMACs easier todo. They accept the key and information about the +message (file pointer, address in memory) and produce the HMAC result in one shot. These are useful if you want to avoid +calling the three step process yourself. + +\index{hmac\_memory()} +\begin{verbatim} +int hmac_memory(int hash, const unsigned char *key, unsigned long keylen, + const unsigned char *data, unsigned long len, + unsigned char *dst, unsigned long *dstlen); +\end{verbatim} +This will produce an HMAC code for the array of octets in ``data'' of length ``len''. The index into the hash descriptor +table must be provided in ``hash''. It uses the key from ``key'' with a key length of ``keylen''. +The result is stored in the array of octets ``dst'' and the length in ``dstlen''. The value of ``dstlen'' must be set +to the size of the destination buffer before calling this function. Similarly for files there is the following function: +\index{hmac\_file()} +\begin{verbatim} +int hmac_file(int hash, const char *fname, const unsigned char *key, + unsigned long keylen, + unsigned char *dst, unsigned long *dstlen); +\end{verbatim} +``hash'' is the index into the hash descriptor table of the hash you want to use. ``fname'' is the filename to process. +``key'' is the array of octets to use as the key of length ``keylen''. ``dst'' is the array of octets where the +result should be stored. + +To test if the HMAC code is working there is the following function: +\index{hmac\_test()} +\begin{verbatim} +int hmac_test(void); +\end{verbatim} +Which returns {\bf CRYPT\_OK} if the code passes otherwise it returns an error code. Some example code for using the +HMAC system is given below. + +\begin{small} +\begin{verbatim} +#include +int main(void) +{ + int idx, err; + hmac_state hmac; + unsigned char key[16], dst[MAXBLOCKSIZE]; + unsigned long dstlen; + + /* register SHA-1 */ + if (register_hash(&sha1_desc) == -1) { + printf("Error registering SHA1\n"); + return -1; + } + + /* get index of SHA1 in hash descriptor table */ + idx = find_hash("sha1"); + + /* we would make up our symmetric key in "key[]" here */ + + /* start the HMAC */ + if ((err = hmac_init(&hmac, idx, key, 16)) != CRYPT_OK) { + printf("Error setting up hmac: %s\n", error_to_string(err)); + return -1; + } + + /* process a few octets */ + if((err = hmac_process(&hmac, "hello", 5) != CRYPT_OK) { + printf("Error processing hmac: %s\n", error_to_string(err)); + return -1; + } + + /* get result (presumably to use it somehow...) */ + dstlen = sizeof(dst); + if ((err = hmac_done(&hmac, dst, &dstlen)) != CRYPT_OK) { + printf("Error finishing hmac: %s\n", error_to_string(err)); + return -1; + } + printf("The hmac is %lu bytes long\n", dstlen); + + /* return */ + return 0; +} +\end{verbatim} +\end{small} + +\section{OMAC Support} +OMAC\footnote{\url{http://crypt.cis.ibaraki.ac.jp/omac/omac.html}}, which stands for \textit{One-Key CBC MAC} is an +algorithm which produces a Message Authentication Code (MAC) using only a block cipher such as AES. From an API +standpoint the OMAC routines work much like the HMAC routines do. Instead in this case a cipher is used instead of a hash. + +To start an OMAC state you call +\index{omac\_init()} +\begin{verbatim} +int omac_init(omac_state *omac, int cipher, + const unsigned char *key, unsigned long keylen); +\end{verbatim} +The ``omac'' variable is the state for the OMAC algorithm. ``cipher'' is the index into the cipher\_descriptor table +of the cipher\footnote{The cipher must have a 64 or 128 bit block size. Such as CAST5, Blowfish, DES, AES, Twofish, etc.} you +wish to use. ``key'' and ``keylen'' are the keys used to authenticate the data. + +To send data through the algorithm call +\index{omac\_process()} +\begin{verbatim} +int omac_process(omac_state *state, + const unsigned char *buf, unsigned long len); +\end{verbatim} +This will send ``len'' bytes from ``buf'' through the active OMAC state ``state''. Returns \textbf{CRYPT\_OK} if the +function succeeds. The function is not sensitive to the granularity of the data. For example, + +\begin{verbatim} +omac_process(&mystate, "hello", 5); +omac_process(&mystate, " world", 6); +\end{verbatim} + +Would produce the same result as, + +\begin{verbatim} +omac_process(&mystate, "hello world", 11); +\end{verbatim} + +When you are done processing the message you can call the following to compute the message tag. + +\index{omac\_done()} +\begin{verbatim} +int omac_done(omac_state *state, + unsigned char *out, unsigned long *outlen); +\end{verbatim} +Which will terminate the OMAC and output the \textit{tag} (MAC) to ``out''. Note that unlike the HMAC and other code +``outlen'' can be smaller than the default MAC size (for instance AES would make a 16-byte tag). Part of the OMAC +specification states that the output may be truncated. So if you pass in $outlen = 5$ and use AES as your cipher than +the output MAC code will only be five bytes long. If ``outlen'' is larger than the default size it is set to the default +size to show how many bytes were actually used. + +Similar to the HMAC code the file and memory functions are also provided. To OMAC a buffer of memory in one shot use the +following function. + +\index{omac\_memory()} +\begin{verbatim} +int omac_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *msg, unsigned long msglen, + unsigned char *out, unsigned long *outlen); +\end{verbatim} +This will compute the OMAC of ``msglen'' bytes of ``msg'' using the key ``key'' of length ``keylen'' bytes and the cipher +specified by the ``cipher'''th entry in the cipher\_descriptor table. It will store the MAC in ``out'' with the same +rules as omac\_done. + +To OMAC a file use +\index{omac\_file()} +\begin{verbatim} +int omac_file(int cipher, + const unsigned char *key, unsigned long keylen, + const char *filename, + unsigned char *out, unsigned long *outlen); +\end{verbatim} + +Which will OMAC the entire contents of the file specified by ``filename'' using the key ``key'' of length ``keylen'' bytes +and the cipher specified by the ``cipher'''th entry in the cipher\_descriptor table. It will store the MAC in ``out'' with +the same rules as omac\_done. + +To test if the OMAC code is working there is the following function: +\index{omac\_test()} +\begin{verbatim} +int omac_test(void); +\end{verbatim} +Which returns {\bf CRYPT\_OK} if the code passes otherwise it returns an error code. Some example code for using the +OMAC system is given below. + +\begin{small} +\begin{verbatim} +#include +int main(void) +{ + int idx, err; + omac_state omac; + unsigned char key[16], dst[MAXBLOCKSIZE]; + unsigned long dstlen; + + /* register Rijndael */ + if (register_cipher(&rijndael_desc) == -1) { + printf("Error registering Rijndael\n"); + return -1; + } + + /* get index of Rijndael in cipher descriptor table */ + idx = find_cipher("rijndael"); + + /* we would make up our symmetric key in "key[]" here */ + + /* start the OMAC */ + if ((err = omac_init(&omac, idx, key, 16)) != CRYPT_OK) { + printf("Error setting up omac: %s\n", error_to_string(err)); + return -1; + } + + /* process a few octets */ + if((err = omac_process(&omac, "hello", 5) != CRYPT_OK) { + printf("Error processing omac: %s\n", error_to_string(err)); + return -1; + } + + /* get result (presumably to use it somehow...) */ + dstlen = sizeof(dst); + if ((err = omac_done(&omac, dst, &dstlen)) != CRYPT_OK) { + printf("Error finishing omac: %s\n", error_to_string(err)); + return -1; + } + printf("The omac is %lu bytes long\n", dstlen); + + /* return */ + return 0; +} +\end{verbatim} +\end{small} + +\section{PMAC Support} +The PMAC\footnote{J.Black, P.Rogaway, ``A Block--Cipher Mode of Operation for Parallelizable Message Authentication''} +protocol is another MAC algorithm that relies solely on a symmetric-key block cipher. It uses essentially the same +API as the provided OMAC code. + +A PMAC state is initialized with the following. + +\index{pmac\_init()} +\begin{verbatim} +int pmac_init(pmac_state *pmac, int cipher, + const unsigned char *key, unsigned long keylen); +\end{verbatim} +Which initializes the ``pmac'' state with the given ``cipher'' and ``key'' of length ``keylen'' bytes. The chosen cipher +must have a 64 or 128 bit block size (e.x. AES). + +To MAC data simply send it through the process function. + +\index{pmac\_process()} +\begin{verbatim} +int pmac_process(pmac_state *state, + const unsigned char *buf, unsigned long len); +\end{verbatim} +This will process ``len'' bytes of ``buf'' in the given ``state''. The function is not sensitive to the granularity of the +data. For example, + +\begin{verbatim} +pmac_process(&mystate, "hello", 5); +pmac_process(&mystate, " world", 6); +\end{verbatim} + +Would produce the same result as, + +\begin{verbatim} +pmac_process(&mystate, "hello world", 11); +\end{verbatim} + +When a complete message has been processed the following function can be called to compute the message tag. + +\index{pmac\_done()} +\begin{verbatim} +int pmac_done(pmac_state *state, + unsigned char *out, unsigned long *outlen); +\end{verbatim} +This will store upto ``outlen'' bytes of the tag for the given ``state'' into ``out''. Note that if ``outlen'' is larger +than the size of the tag it is set to the amount of bytes stored in ``out''. + +Similar to the PMAC code the file and memory functions are also provided. To PMAC a buffer of memory in one shot use the +following function. + +\index{pmac\_memory()} +\begin{verbatim} +int pmac_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *msg, unsigned long msglen, + unsigned char *out, unsigned long *outlen); +\end{verbatim} +This will compute the PMAC of ``msglen'' bytes of ``msg'' using the key ``key'' of length ``keylen'' bytes and the cipher +specified by the ``cipher'''th entry in the cipher\_descriptor table. It will store the MAC in ``out'' with the same +rules as omac\_done. + +To PMAC a file use +\index{pmac\_file()} +\begin{verbatim} +int pmac_file(int cipher, + const unsigned char *key, unsigned long keylen, + const char *filename, + unsigned char *out, unsigned long *outlen); +\end{verbatim} + +Which will PMAC the entire contents of the file specified by ``filename'' using the key ``key'' of length ``keylen'' bytes +and the cipher specified by the ``cipher'''th entry in the cipher\_descriptor table. It will store the MAC in ``out'' with +the same rules as omac\_done. + +To test if the PMAC code is working there is the following function: +\begin{verbatim} +int pmac_test(void); +\end{verbatim} +Which returns {\bf CRYPT\_OK} if the code passes otherwise it returns an error code. + + +\chapter{Pseudo-Random Number Generators} +\section{Core Functions} + +The library provides an array of core functions for Pseudo-Random Number Generators (PRNGs) as well. A cryptographic PRNG is +used to expand a shorter bit string into a longer bit string. PRNGs are used wherever random data is required such as Public Key (PK) +key generation. There is a universal structure called ``prng\_state''. To initialize a PRNG call: +\begin{verbatim} +int XXX_start(prng_state *prng); +\end{verbatim} + +This will setup the PRNG for future use and not seed it. In order +for the PRNG to be cryptographically useful you must give it entropy. Ideally you'd have some OS level source to tap +like in UNIX (see section 5.3). To add entropy to the PRNG call: +\begin{verbatim} +int XXX_add_entropy(const unsigned char *in, unsigned long len, + prng_state *prng); +\end{verbatim} + +Which returns {\bf CRYPTO\_OK} if the entropy was accepted. Once you think you have enough entropy you call another +function to put the entropy into action. +\begin{verbatim} +int XXX_ready(prng_state *prng); +\end{verbatim} + +Which returns {\bf CRYPTO\_OK} if it is ready. Finally to actually read bytes call: +\begin{verbatim} +unsigned long XXX_read(unsigned char *out, unsigned long len, + prng_state *prng); +\end{verbatim} + +Which returns the number of bytes read from the PRNG. + +\subsection{Remarks} + +It is possible to be adding entropy and reading from a PRNG at the same time. For example, if you first seed the PRNG +and call ready() you can now read from it. You can also keep adding new entropy to it. The new entropy will not be used +in the PRNG until ready() is called again. This allows the PRNG to be used and re-seeded at the same time. No real error +checking is guaranteed to see if the entropy is sufficient or if the PRNG is even in a ready state before reading. + +\subsection{Example} + +Below is a simple snippet to read 10 bytes from yarrow. Its important to note that this snippet is {\bf NOT} secure since +the entropy added is not random. + +\begin{verbatim} +#include +int main(void) +{ + prng_state prng; + unsigned char buf[10]; + int err; + + /* start it */ + if ((err = yarrow_start(&prng)) != CRYPT_OK) { + printf("Start error: %s\n", error_to_string(err)); + } + /* add entropy */ + if ((err = yarrow_add_entropy("hello world", 11, &prng)) != CRYPT_OK) { + printf("Add_entropy error: %s\n", error_to_string(err)); + } + /* ready and read */ + if ((err = yarrow_ready(&prng)) != CRYPT_OK) { + printf("Ready error: %s\n", error_to_string(err)); + } + printf("Read %lu bytes from yarrow\n", yarrow_read(buf, 10, &prng)); + return 0; +} +\end{verbatim} + +\section{PRNG Descriptors} +\index{PRNG Descriptor} +PRNGs have descriptors too (surprised?). Stored in the structure ``prng\_descriptor''. The format of an element is: +\begin{verbatim} +struct _prng_descriptor { + char *name; + int (*start) (prng_state *); + int (*add_entropy)(const unsigned char *, unsigned long, prng_state *); + int (*ready) (prng_state *); + unsigned long (*read)(unsigned char *, unsigned long len, prng_state *); +}; +\end{verbatim} + +There is a ``int find\_prng(char *name)'' function as well. Returns -1 if the PRNG is not found, otherwise it returns +the position in the prng\_descriptor array. + +Just like the ciphers and hashes you must register your prng before you can use it. The two functions provided work +exactly as those for the cipher registry functions. They are: +\begin{verbatim} +int register_prng(const struct _prng_descriptor *prng); +int unregister_prng(const struct _prng_descriptor *prng); +\end{verbatim} + +\subsubsection{PRNGs Provided} +Currently Yarrow (yarrow\_desc), RC4 (rc4\_desc) and the secure RNG (sprng\_desc) are provided as PRNGs within the +library. + +RC4 is provided with a PRNG interface because it is a stream cipher and not well suited for the symmetric block cipher +interface. You provide the key for RC4 via the rc4\_add\_entropy() function. By calling rc4\_ready() the key will be used +to setup the RC4 state for encryption or decryption. The rc4\_read() function has been modified from RC4 since it will +XOR the output of the RC4 keystream generator against the input buffer you provide. The following snippet will demonstrate +how to encrypt a buffer with RC4: + +\begin{small} +\begin{verbatim} +#include +int main(void) +{ + prng_state prng; + unsigned char buf[32]; + int err; + + if ((err = rc4_start(&prng)) != CRYPT_OK) { + printf("RC4 init error: %s\n", error_to_string(err)); + exit(-1); + } + + /* use ``key'' as the key */ + if ((err = rc4_add_entropy("key", 3, &prng)) != CRYPT_OK) { + printf("RC4 add entropy error: %s\n", error_to_string(err)); + exit(-1); + } + + /* setup RC4 for use */ + if ((err = rc4_ready(&prng)) != CRYPT_OK) { + printf("RC4 ready error: %s\n", error_to_string(err)); + exit(-1); + } + + /* encrypt buffer */ + strcpy(buf,"hello world"); + if (rc4_read(buf, 11, &prng) != 11) { + printf("RC4 read error\n"); + exit(-1); + } + return 0; +} +\end{verbatim} +\end{small} +To decrypt you have to do the exact same steps. + +\section{The Secure RNG} +\index{Secure RNG} +An RNG is related to a PRNG except that it doesn't expand a smaller seed to get the data. They generate their random bits +by performing some computation on fresh input bits. Possibly the hardest thing to get correctly in a cryptosystem is the +PRNG. Computers are deterministic beasts that try hard not to stray from pre-determined paths. That makes gathering +entropy needed to seed the PRNG a hard task. + +There is one small function that may help on certain platforms: +\index{rng\_get\_bytes()} +\begin{verbatim} +unsigned long rng_get_bytes(unsigned char *buf, unsigned long len, + void (*callback)(void)); +\end{verbatim} + +Which will try one of three methods of getting random data. The first is to open the popular ``/dev/random'' device which +on most *NIX platforms provides cryptographic random bits\footnote{This device is available in Windows through the Cygwin compiler suite. It emulates ``/dev/random'' via the Microsoft CSP.}. +The second method is to try the Microsoft Cryptographic Service Provider and read the RNG. The third method is an ANSI C +clock drift method that is also somewhat popular but gives bits of lower entropy. The ``callback'' parameter is a pointer to a function that returns void. Its used when the slower ANSI C RNG must be +used so the calling application can still work. This is useful since the ANSI C RNG has a throughput of three +bytes a second. The callback pointer may be set to {\bf NULL} to avoid using it if you don't want to. The function +returns the number of bytes actually read from any RNG source. There is a function to help setup a PRNG as well: +\index{rng\_make\_prng()} +\begin{verbatim} +int rng_make_prng(int bits, int wprng, prng_state *prng, + void (*callback)(void)); +\end{verbatim} +This will try to setup the prng with a state of at least ``bits'' of entropy. The ``callback'' parameter works much like +the callback in ``rng\_get\_bytes()''. It is highly recommended that you use this function to setup your PRNGs unless you have a +platform where the RNG doesn't work well. Example usage of this function is given below. + +\begin{small} +\begin{verbatim} +#include +int main(void) +{ + ecc_key mykey; + prng_state prng; + int err; + + /* register yarrow */ + if (register_prng(&yarrow_desc) == -1) { + printf("Error registering Yarrow\n"); + return -1; + } + + /* setup the PRNG */ + if ((err = rng_make_prng(128, find_prng("yarrow"), &prng, NULL)) != CRYPT_OK) { + printf("Error setting up PRNG, %s\n", error_to_string(err)); + return -1; + } + + /* make a 192-bit ECC key */ + if ((err = ecc_make_key(&prng, find_prng("yarrow"), 24, &mykey)) != CRYPT_OK) { + printf("Error making key: %s\n", error_to_string(err)); + return -1; + } + return 0; +} +\end{verbatim} +\end{small} + +\subsection{The Secure PRNG Interface} +It is possible to access the secure RNG through the PRNG interface and in turn use it within dependent functions such +as the PK API. This simplifies the cryptosystem on platforms where the secure RNG is fast. The secure PRNG never +requires to be started, that is you need not call the start, add\_entropy or ready functions. For example, consider +the previous example using this PRNG. + +\begin{small} +\begin{verbatim} +#include +int main(void) +{ + ecc_key mykey; + int err; + + /* register SPRNG */ + if (register_prng(&sprng_desc) == -1) { + printf("Error registering SPRNG\n"); + return -1; + } + + /* make a 192-bit ECC key */ + if ((err = ecc_make_key(NULL, find_prng("sprng"), 24, &mykey)) != CRYPT_OK) { + printf("Error making key: %s\n", error_to_string(err)); + return -1; + } + return 0; +} +\end{verbatim} +\end{small} + +\chapter{RSA Public Key Cryptography} + +\section{Introduction} +RSA wrote the PKCS \#1 specifications which detail RSA Public Key Cryptography. In the specifications are +padding algorithms for encryption and signatures. The standard includes ``v1.5'' and ``v2.0'' algorithms. +To simplify matters a little the v2.0 encryption and signature padding algorithms are called OAEP and PSS +respectively. + +\section{PKCS \#1 Encryption} + +PKCS \#1 RSA Encryption amounts to OAEP padding of the input message followed by the modular exponentiation. As far as this portion of +the library is concerned we are only dealing with th OAEP padding of the message. + +\subsection{OAEP Encoding} + +\index{pkcs\_1\_oaep\_encode()} +\begin{alltt} +int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, + const unsigned char *lparam, unsigned long lparamlen, + unsigned long modulus_bitlen, prng_state *prng, + int prng_idx, int hash_idx, + unsigned char *out, unsigned long *outlen); +\end{alltt} + +This accepts ``msg'' as input of length ``msglen'' which will be OAEP padded. The ``lparam'' variable is an additional system specific +tag that can be applied to the encoding. This is useful to identify which system encoded the message. If no variance is desired then +``lparam'' can be set to \textbf{NULL}. + +OAEP encoding requires the length of the modulus in bits in order to calculate the size of the output. This is passed as the parameter +``modulus\_bitlen''. ``hash\_idx'' is the index into the hash descriptor table of the hash desired. PKCS \#1 allows any hash to be +used but both the encoder and decoder must use the same hash in order for this to succeed. The size of hash output affects the maximum + sized input message. ``prng\_idx'' and ``prng'' are the random number generator arguments required to randomize the padding process. +The padded message is stored in ``out'' along with the length in ``outlen''. + +If $h$ is the length of the hash and $m$ the length of the modulus (both in octets) then the maximum payload for ``msg'' is +$m - 2h - 2$. For example, with a $1024$--bit RSA key and SHA--1 as the hash the maximum payload is $86$ bytes. + +Note that when the message is padded it still has not been RSA encrypted. You must pass the output of this function to +rsa\_exptmod() to encrypt it. + +\subsection{OAEP Decoding} + +\index{pkcs\_1\_oaep\_decode()} +\begin{alltt} +int pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, + const unsigned char *lparam, unsigned long lparamlen, + unsigned long modulus_bitlen, int hash_idx, + unsigned char *out, unsigned long *outlen, + int *res); +\end{alltt} + +This function decodes an OAEP encoded message and outputs the original message that was passed to the OAEP encoder. ``msg'' is the +output of pkcs\_1\_oaep\_encode() of length ``msglen''. ``lparam'' is the same system variable passed to the OAEP encoder. If it does not +match what was used during encoding this function will not decode the packet. ``modulus\_bitlen'' is the size of the RSA modulus in bits +and must match what was used during encoding. Similarly the ``hash\_idx'' index into the hash descriptor table must match what was used +during encoding. + +If the function succeeds it decodes the OAEP encoded message into ``out'' of length ``outlen'' and stores a +$1$ in ``res''. If the packet is invalid it stores $0$ in ``res'' and if the function fails for another reason +it returns an error code. + +\subsection{PKCS \#1 v1.5 Encoding} + +\index{pkcs\_1\_v15\_es\_encode()} +\begin{verbatim} +int pkcs_1_v15_es_encode(const unsigned char *msg, unsigned long msglen, + unsigned long modulus_bitlen, + prng_state *prng, int prng_idx, + unsigned char *out, unsigned long *outlen); +\end{verbatim} + +This will PKCS v1.5 encode the data in ``msg'' of length ``msglen''. Pass the length (in bits) of your +RSA modulus in ``modulus\_bitlen''. The encoded data will be stored in ``out'' of length ``outlen''. + +\subsection{PKCS \#1 v1.5 Decoding} +\index{pkcs\_1\_v15\_es\_decode()} +\begin{verbatim} +int pkcs_1_v15_es_decode(const unsigned char *msg, unsigned long msglen, + unsigned long modulus_bitlen, + unsigned char *out, unsigned long outlen, + int *res); +\end{verbatim} + +This will PKCS v1.5 decode the message in ``msg'' of length ``msglen''. It will store the output in ``out''. Note +that the length of the output ``outlen'' is a constant. This decoder cannot determine the original message +length. If the data in ``msg'' is a valid packet then a $1$ is stored in ``res'', otherwise a $0$ is +stored. + +\section{PKCS \#1 Digital Signatures} + +\subsection{PSS Encoding} +PSS encoding is the second half of the PKCS \#1 standard which is padding to be applied to messages that are signed. + +\index{pkcs\_1\_pss\_encode()} +\begin{alltt} +int pkcs_1_pss_encode(const unsigned char *msghash, unsigned long msghashlen, + unsigned long saltlen, prng_state *prng, + int prng_idx, int hash_idx, + unsigned long modulus_bitlen, + unsigned char *out, unsigned long *outlen); +\end{alltt} + +This function assumes the message to be PSS encoded has previously been hashed. The input hash ``msghash'' is of length +``msghashlen''. PSS allows a variable length random salt (it can be zero length) to be introduced in the signature process. +``hash\_idx'' is the index into the hash descriptor table of the hash to use. ``prng\_idx'' and ``prng'' are the random +number generator information required for the salt. + +Similar to OAEP encoding ``modulus\_bitlen'' is the size of the RSA modulus (in bits). It limits the size of the salt. If $m$ is the length +of the modulus $h$ the length of the hash output (in octets) then there can be $m - h - 2$ bytes of salt. + +This function does not actually sign the data it merely pads the hash of a message so that it can be processed by rsa\_exptmod(). + +\subsection{PSS Decoding} + +To decode a PSS encoded signature block you have to use the following. + +\index{pkcs\_1\_pss\_decode()} +\begin{alltt} +int pkcs_1_pss_decode(const unsigned char *msghash, unsigned long msghashlen, + const unsigned char *sig, unsigned long siglen, + unsigned long saltlen, int hash_idx, + unsigned long modulus_bitlen, int *res); +\end{alltt} +This will decode the PSS encoded message in ``sig'' of length ``siglen'' and compare it to values in ``msghash'' of length +``msghashlen''. If the block is a valid PSS block and the decoded hash equals the hash supplied ``res'' is set to non--zero. Otherwise, +it is set to zero. The rest of the parameters are as in the PSS encode call. + +It's important to use the same ``saltlen'' and hash for both encoding and decoding as otherwise the procedure will not work. + +\subsection{PKCS \#1 v1.5 Encoding} + +\index{pkcs\_1\_v15\_sa\_encode()} +\begin{verbatim} +int pkcs_1_v15_sa_encode(const unsigned char *msghash, unsigned long msghashlen, + int hash_idx, unsigned long modulus_bitlen, + unsigned char *out, unsigned long *outlen); +\end{verbatim} + +This will PKCS \#1 v1.5 signature encode the message hash ``msghash'' of length ``msghashlen''. You have +to tell this routine which hash produced the message hash in ``hash\_idx''. The encoded hash is stored +in ``out'' of length ``outlen''. + +\subsection{PKCS \#1 v1.5 Decoding} + +\index{pkcs\_1\_v15\_sa\_decode()} +\begin{verbatim} +int pkcs_1_v15_sa_decode(const unsigned char *msghash, unsigned long msghashlen, + const unsigned char *sig, unsigned long siglen, + int hash_idx, unsigned long modulus_bitlen, + int *res); +\end{verbatim} + +This will PKCS \#1 v1.5 signature decode the data in ``sig'' of length ``siglen'' and compare the extracted +hash against ``msghash'' of length ``msghashlen''. You have to tell this routine which hash produced the +message digest in ``hash\_idx''. If the packet is valid and the hashes match ``res'' is set to $1$. Otherwise, +it is set to $0$. + +\section{RSA Operations} +\subsection{Background} + +RSA is a public key algorithm that is based on the inability to find the ``e-th'' root modulo a composite of unknown +factorization. Normally the difficulty of breaking RSA is associated with the integer factoring problem but they are +not strictly equivalent. + +The system begins with with two primes $p$ and $q$ and their product $N = pq$. The order or ``Euler totient'' of the +multiplicative sub-group formed modulo $N$ is given as $\phi(N) = (p - 1)(q - 1)$ which can be reduced to +$\mbox{lcm}(p - 1, q - 1)$. The public key consists of the composite $N$ and some integer $e$ such that +$\mbox{gcd}(e, \phi(N)) = 1$. The private key consists of the composite $N$ and the inverse of $e$ modulo $\phi(N)$ +often simply denoted as $de \equiv 1\mbox{ }(\mbox{mod }\phi(N))$. + +A person who wants to encrypt with your public key simply forms an integer (the plaintext) $M$ such that +$1 < M < N-2$ and computes the ciphertext $C = M^e\mbox{ }(\mbox{mod }N)$. Since finding the inverse exponent $d$ +given only $N$ and $e$ appears to be intractable only the owner of the private key can decrypt the ciphertext and compute +$C^d \equiv \left (M^e \right)^d \equiv M^1 \equiv M\mbox{ }(\mbox{mod }N)$. Similarly the owner of the private key +can sign a message by ``decrypting'' it. Others can verify it by ``encrypting'' it. + +Currently RSA is a difficult system to cryptanalyze provided that both primes are large and not close to each other. +Ideally $e$ should be larger than $100$ to prevent direct analysis. For example, if $e$ is three and you do not pad +the plaintext to be encrypted than it is possible that $M^3 < N$ in which case finding the cube-root would be trivial. +The most often suggested value for $e$ is $65537$ since it is large enough to make such attacks impossible and also well +designed for fast exponentiation (requires 16 squarings and one multiplication). + +It is important to pad the input to RSA since it has particular mathematical structure. For instance +$M_1^dM_2^d = (M_1M_2)^d$ which can be used to forge a signature. Suppose $M_3 = M_1M_2$ is a message you want +to have a forged signature for. Simply get the signatures for $M_1$ and $M_2$ on their own and multiply the result +together. Similar tricks can be used to deduce plaintexts from ciphertexts. It is important not only to sign +the hash of documents only but also to pad the inputs with data to remove such structure. + +\subsection{RSA Key Generation} + +For RSA routines a single ``rsa\_key'' structure is used. To make a new RSA key call: +\index{rsa\_make\_key()} +\begin{verbatim} +int rsa_make_key(prng_state *prng, + int wprng, int size, + long e, rsa_key *key); +\end{verbatim} + +Where ``wprng'' is the index into the PRNG descriptor array. ``size'' is the size in bytes of the RSA modulus desired. +``e'' is the encryption exponent desired, typical values are 3, 17, 257 and 65537. I suggest you stick with 65537 since its big +enough to prevent trivial math attacks and not super slow. ``key'' is where the key is placed. All keys must be at +least 128 bytes and no more than 512 bytes in size (\textit{that is from 1024 to 4096 bits}). + +Note that the ``rsa\_make\_key()'' function allocates memory at runtime when you make the key. Make sure to call +``rsa\_free()'' (see below) when you are finished with the key. If ``rsa\_make\_key()'' fails it will automatically +free the ram allocated itself. + +There are three types of RSA keys. The types are {\bf PK\_PRIVATE\_OPTIMIZED}, {\bf PK\_PRIVATE} and {\bf PK\_PUBLIC}. The first +two are private keys where the ``optimized'' type uses the Chinese Remainder Theorem to speed up decryption/signatures. By +default all new keys are of the ``optimized'' type. The non-optimized private type is provided for backwards compatibility +as well as to save space since the optimized key requires about four times as much memory. + +\subsection{RSA Exponentiation} + +To do raw work with the RSA function call: +\index{rsa\_exptmod()} +\begin{verbatim} +int rsa_exptmod(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, int which, + prng_state *prng, int prng_idx, + rsa_key *key); +\end{verbatim} +This loads the bignum from ``in'' as a big endian word in the format PKCS specifies, raises it to either ``e'' or ``d'' and stores the result +in ``out'' and the size of the result in ``outlen''. ``which'' is set to {\bf PK\_PUBLIC} to use ``e'' +(i.e. for encryption/verifying) and set to {\bf PK\_PRIVATE} to use ``d'' as the exponent (i.e. for decrypting/signing). + +Note that the output of his function is zero-padded as per PKCS \#1 specifications. This allows this routine to +interoprate with PKCS \#1 padding functions properly. + +\subsection{RSA Key Encryption} +Normally RSA is used to encrypt short symmetric keys which are then used in block ciphers to encrypt a message. +To facilitate encrypting short keys the following functions have been provided. + +\index{rsa\_encrypt\_key()} +\begin{verbatim} +int rsa_encrypt_key(const unsigned char *inkey, unsigned long inlen, + unsigned char *outkey, unsigned long *outlen, + const unsigned char *lparam, unsigned long lparamlen, + prng_state *prng, int prng_idx, int hash_idx, rsa_key *key); +\end{verbatim} +This function will OAEP pad ``inkey'' of length inlen bytes then RSA encrypt it and store the ciphertext +in ``outkey'' of length ``outlen''. The ``lparam'' and ``lparamlen'' are the same parameters you would pass +to pkcs\_1\_oaep\_encode(). + +\index{rsa\_decrypt\_key()} +\begin{verbatim} +int rsa_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *outkey, unsigned long *keylen, + const unsigned char *lparam, unsigned long lparamlen, + prng_state *prng, int prng_idx, + int hash_idx, int *res, + rsa_key *key); +\end{verbatim} +This function will RSA decrypt ``in'' of length ``inlen'' then OAEP depad the resulting data and store it in +``outkey'' of length ``outlen''. The ``lparam'' and ``lparamlen'' are the same parameters you would pass +to pkcs\_1\_oaep\_decode(). + +If the RSA decrypted data isn't a valid OAEP packet then ``res'' is set to $0$. Otherwise, it is set to $1$. + +\subsection{RSA Hash Signatures} +Similar to RSA key encryption RSA is also used to ``digitally sign'' message digests (hashes). To facilitate this +process the following functions have been provided. + +\index{rsa\_sign\_hash()} +\begin{verbatim} +int rsa_sign_hash(const unsigned char *msghash, unsigned long msghashlen, + unsigned char *sig, unsigned long *siglen, + prng_state *prng, int prng_idx, + int hash_idx, unsigned long saltlen, + rsa_key *key); +\end{verbatim} + +This will PSS encode the message hash ``msghash'' of length ``msghashlen''. Next the PSS encoded message is +RSA ``signed'' and the output is stored in ``sig'' of length ``siglen''. + + +\index{rsa\_verify\_hash()} +\begin{verbatim} +int rsa_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *msghash, unsigned long msghashlen, + prng_state *prng, int prng_idx, + int hash_idx, unsigned long saltlen, + int *stat, rsa_key *key); +\end{verbatim} + +This will RSA ``verify'' the signature in ``sig'' of length ``siglen''. Next the RSA decoded data is PSS decoded +and the extracted hash is compared against the message hash ``msghash'' of length ``msghashlen''. + +If the RSA decoded data is not a valid PSS message or if the PSS decoded hash does not match the ``msghash'' +the value ``res'' is set to $0$. Otherwise, if the function succeeds and signature is valid ``res'' is set +to $1$. + +\begin{verbatim} +#include +int main(void) +{ + int err, hash_idx, prng_idx, res; + unsigned long l1, l2; + unsigned char pt[16], pt2[16], out[1024]; + rsa_key key; + + /* register prng/hash */ + if (register_prng(&sprng_desc) == -1) { + printf("Error registering sprng"); + return EXIT_FAILURE; + } + + if (register_hash(&sha1_desc) == -1) { + printf("Error registering sha1"); + return EXIT_FAILURE; + } + hash_idx = find_hash("sha1"); + prng_idx = find_prng("sprng"); + + /* make an RSA-1024 key */ + if ((err = rsa_make_key(NULL, /* PRNG state */ + prng_idx, /* PRNG idx */ + 1024/8, /* 1024-bit key */ + 65537, /* we like e=65537 */ + &key) /* where to store the key */ + ) != CRYPT_OK) { + printf("rsa_make_key %s", error_to_string(err)); + return EXIT_FAILURE; + } + + /* fill in pt[] with a key we want to send ... */ + l1 = sizeof(out); + if ((err = rsa_encrypt_key(pt, /* data we wish to encrypt */ + 16, /* data is 16 bytes long */ + out, /* where to store ciphertext */ + &l1, /* length of ciphertext */ + "TestApp", /* our lparam for this program */ + 7, /* lparam is 7 bytes long */ + NULL, /* PRNG state */ + prng_idx, /* prng idx */ + hash_idx, /* hash idx */ + &key) /* our RSA key */ + ) != CRYPT_OK) { + printf("rsa_encrypt_key %s", error_to_string(err)); + return EXIT_FAILURE; + } + + /* now let's decrypt the encrypted key */ + l2 = sizeof(pt2); + if ((err = rsa_decrypt_key(out, /* encrypted data */ + l1, /* length of ciphertext */ + pt2, /* where to put plaintext */ + &l2, /* plaintext length */ + "TestApp", /* lparam for this program */ + 7, /* lparam is 7 bytes long */ + NULL, /* PRNG state */ + prng_idx, /* prng idx */ + hash_idx, /* hash idx */ + &res, /* validity of data */ + &key) /* our RSA key */ + ) != CRYPT_OK) { + printf("rsa_decrypt_key %s", error_to_string(err)); + return EXIT_FAILURE; + } + /* if all went well pt == pt2, l2 == 16, res == 1 */ +} +\end{verbatim} + +\chapter{Password Based Cryptography} +\section{PKCS \#5} +In order to securely handle user passwords for the purposes of creating session keys and chaining IVs the PKCS \#5 was drafted. PKCS \#5 +is made up of two algorithms, Algorithm One and Algorithm Two. Algorithm One is the older fairly limited algorithm which has been implemented +for completeness. Algorithm Two is a bit more modern and more flexible to work with. + +\section{Algorithm One} +Algorithm One accepts as input a password, an 8--byte salt and an iteration counter. The iteration counter is meant to act as delay for +people trying to brute force guess the password. The higher the iteration counter the longer the delay. This algorithm also requires a hash +algorithm and produces an output no longer than the output of the hash. + +\index{pkcs\_5\_alg1()} +\begin{alltt} +int pkcs_5_alg1(const unsigned char *password, unsigned long password_len, + const unsigned char *salt, + int iteration_count, int hash_idx, + unsigned char *out, unsigned long *outlen) +\end{alltt} +Where ``password'' is the users password. Since the algorithm allows binary passwords you must also specify the length in ``password\_len''. +The ``salt'' is a fixed size 8--byte array which should be random for each user and session. The ``iteration\_count'' is the delay desired +on the password. The ``hash\_idx'' is the index of the hash you wish to use in the descriptor table. + +The output of length upto ``outlen'' is stored in ``out''. If ``outlen'' is initially larger than the size of the hash functions output +it is set to the number of bytes stored. If it is smaller than not all of the hash output is stored in ``out''. + +\section{Algorithm Two} + +Algorithm Two is the recommended algorithm for this task. It allows variable length salts and can produce outputs larger than the +hash functions output. As such it can easily be used to derive session keys for ciphers and MACs as well initial vectors as required +from a single password and invokation of this algorithm. + +\index{pkcs\_5\_alg2()} +\begin{alltt} +int pkcs_5_alg2(const unsigned char *password, unsigned long password_len, + const unsigned char *salt, unsigned long salt_len, + int iteration_count, int hash_idx, + unsigned char *out, unsigned long *outlen) +\end{alltt} +Where ``password'' is the users password. Since the algorithm allows binary passwords you must also specify the length in ``password\_len''. +The ``salt'' is an array of size ``salt\_len''. It should be random for each user and session. The ``iteration\_count'' is the delay desired +on the password. The ``hash\_idx'' is the index of the hash you wish to use in the descriptor table. The output of length upto +``outlen'' is stored in ``out''. + +\begin{alltt} +/* demo to show how to make session state material from a password */ +#include +int main(void) +\{ + unsigned char password[100], salt[100], + cipher_key[16], cipher_iv[16], + mac_key[16], outbuf[48]; + int err, hash_idx; + unsigned long outlen, password_len, salt_len; + + /* register hash and get it's idx .... */ + + /* get users password and make up a salt ... */ + + /* create the material (100 iterations in algorithm) */ + outlen = sizeof(outbuf); + if ((err = pkcs_5_alg2(password, password_len, salt, salt_len, + 100, hash_idx, outbuf, &outlen)) != CRYPT_OK) \{ + /* error handle */ + \} + + /* now extract it */ + memcpy(cipher_key, outbuf, 16); + memcpy(cipher_iv, outbuf+16, 16); + memcpy(mac_key, outbuf+32, 16); + + /* use material (recall to store the salt in the output) */ +\} +\end{alltt} + +\chapter{Diffie-Hellman Key Exchange} + +\section{Background} + +Diffie-Hellman was the original public key system proposed. The system is based upon the group structure +of finite fields. For Diffie-Hellman a prime $p$ is chosen and a ``base'' $b$ such that $b^x\mbox{ }(\mbox{mod }p)$ +generates a large sub-group of prime order (for unique values of $x$). + +A secret key is an exponent $x$ and a public key is the value of $y \equiv g^x\mbox{ }(\mbox{mod }p)$. The term +``discrete logarithm'' denotes the action of finding $x$ given only $y$, $g$ and $p$. The key exchange part of +Diffie-Hellman arises from the fact that two users A and B with keys $(A_x, A_y)$ and $(B_x, B_y)$ can exchange +a shared key $K \equiv B_y^{A_x} \equiv A_y^{B_x} \equiv g^{A_xB_x}\mbox{ }(\mbox{mod }p)$. + +From this public encryption and signatures can be developed. The trivial way to encrypt (for example) using a public key +$y$ is to perform the key exchange offline. The sender invents a key $k$ and its public copy +$k' \equiv g^k\mbox{ }(\mbox{mod }p)$ and uses $K \equiv k'^{A_x}\mbox{ }(\mbox{mod }p)$ as a key to encrypt +the message with. Typically $K$ would be sent to a one-way hash and the message digested used as a key in a +symmetric cipher. + +It is important that the order of the sub-group that $g$ generates not only be large but also prime. There are +discrete logarithm algorithms that take $\sqrt r$ time given the order $r$. The discrete logarithm can be computed +modulo each prime factor of $r$ and the results combined using the Chinese Remainder Theorem. In the cases where +$r$ is ``B-Smooth'' (e.g. all small factors or powers of small prime factors) the solution is trivial to find. + +To thwart such attacks the primes and bases in the library have been designed and fixed. Given a prime $p$ the order of + the sub-group generated is a large prime namely ${p - 1} \over 2$. Such primes are known as ``strong primes'' and the +smaller prime (e.g. the order of the base) are known as Sophie-Germaine primes. + +\section{Core Functions} + +This library also provides core Diffie-Hellman functions so you can negotiate keys over insecure mediums. The routines +provided are relatively easy to use and only take two function calls to negotiate a shared key. There is a structure +called ``dh\_key'' which stores the Diffie-Hellman key in a format these routines can use. The first routine is to +make a Diffie-Hellman private key pair: +\index{dh\_make\_key()} +\begin{verbatim} +int dh_make_key(prng_state *prng, int wprng, + int keysize, dh_key *key); +\end{verbatim} +The ``keysize'' is the size of the modulus you want in bytes. Currently support sizes are 96 to 512 bytes which correspond +to key sizes of 768 to 4096 bits. The smaller the key the faster it is to use however it will be less secure. When +specifying a size not explicitly supported by the library it will round {\em up} to the next key size. If the size is +above 512 it will return an error. So if you pass ``keysize == 32'' it will use a 768 bit key but if you pass +``keysize == 20000'' it will return an error. The primes and generators used are built-into the library and were designed +to meet very specific goals. The primes are strong primes which means that if $p$ is the prime then +$p-1$ is equal to $2r$ where $r$ is a large prime. The bases are chosen to generate a group of order $r$ to prevent +leaking a bit of the key. This means the bases generate a very large prime order group which is good to make cryptanalysis +hard. + +The next two routines are for exporting/importing Diffie-Hellman keys in a binary format. This is useful for transport +over communication mediums. + +\index{dh\_export()} \index{dh\_import()} +\begin{verbatim} +int dh_export(unsigned char *out, unsigned long *outlen, + int type, dh_key *key); + +int dh_import(const unsigned char *in, unsigned long inlen, dh_key *key); +\end{verbatim} + +These two functions work just like the ``rsa\_export()'' and ``rsa\_import()'' functions except these work with +Diffie-Hellman keys. Its important to note you do not have to free the ram for a ``dh\_key'' if an import fails. You can free a +``dh\_key'' using: +\begin{verbatim} +void dh_free(dh_key *key); +\end{verbatim} +After you have exported a copy of your public key (using {\bf PK\_PUBLIC} as ``type'') you can now create a shared secret +with the other user using: +\index{dh\_shared\_secret()} +\begin{verbatim} +int dh_shared_secret(dh_key *private_key, + dh_key *public_key, + unsigned char *out, unsigned long *outlen); +\end{verbatim} + +Where ``private\_key'' is the key you made and ``public\_key'' is the copy of the public key the other user sent you. The result goes +into ``out'' and the length into ``outlen''. If all went correctly the data in ``out'' should be identical for both parties. It is important to +note that the two keys have to be the same size in order for this to work. There is a function to get the size of a +key: +\index{dh\_get\_size()} +\begin{verbatim} +int dh_get_size(dh_key *key); +\end{verbatim} +This returns the size in bytes of the modulus chosen for that key. + +\subsection{Remarks on Usage} +Its important that you hash the shared key before trying to use it as a key for a symmetric cipher or something. An +example program that communicates over sockets, using MD5 and 1024-bit DH keys is\footnote{This function is a small example. It is suggested that proper packaging be used. For example, if the public key sent is truncated these routines will not detect that.}: +\newpage +\begin{small} +\begin{verbatim} +int establish_secure_socket(int sock, int mode, unsigned char *key, + prng_state *prng, int wprng) +{ + unsigned char buf[4096], buf2[4096]; + unsigned long x, len; + int res, err, inlen; + dh_key mykey, theirkey; + + /* make up our private key */ + if ((err = dh_make_key(prng, wprng, 128, &mykey)) != CRYPT_OK) { + return err; + } + + /* export our key as public */ + x = sizeof(buf); + if ((err = dh_export(buf, &x, PK_PUBLIC, &mykey)) != CRYPT_OK) { + res = err; + goto done2; + } + + if (mode == 0) { + /* mode 0 so we send first */ + if (send(sock, buf, x, 0) != x) { + res = CRYPT_ERROR; + goto done2; + } + + /* get their key */ + if ((inlen = recv(sock, buf2, sizeof(buf2), 0)) <= 0) { + res = CRYPT_ERROR; + goto done2; + } + } else { + /* mode >0 so we send second */ + if ((inlen = recv(sock, buf2, sizeof(buf2), 0)) <= 0) { + res = CRYPT_ERROR; + goto done2; + } + + if (send(sock, buf, x, 0) != x) { + res = CRYPT_ERROR; + goto done2; + } + } + + if ((err = dh_import(buf2, inlen, &theirkey)) != CRYPT_OK) { + res = err; + goto done2; + } + + /* make shared secret */ + x = sizeof(buf); + if ((err = dh_shared_secret(&mykey, &theirkey, buf, &x)) != CRYPT_OK) { + res = err; + goto done; + } + + /* hash it */ + len = 16; /* default is MD5 so "key" must be at least 16 bytes long */ + if ((err = hash_memory(find_hash("md5"), buf, x, key, &len)) != CRYPT_OK) { + res = err; + goto done; + } + + /* clean up and return */ + res = CRYPT_OK; +done: + dh_free(&theirkey); +done2: + dh_free(&mykey); + zeromem(buf, sizeof(buf)); + zeromem(buf2, sizeof(buf2)); + return res; +} +\end{verbatim} +\end{small} +\newpage +\subsection{Remarks on The Snippet} +When the above code snippet is done (assuming all went well) their will be a shared 128-bit key in the ``key'' array +passed to ``establish\_secure\_socket()''. + +\section{Other Diffie-Hellman Functions} +In order to test the Diffie-Hellman function internal workings (e.g. the primes and bases) their is a test function made +available: +\index{dh\_test()} +\begin{verbatim} +int dh_test(void); +\end{verbatim} + +This function returns {\bf CRYPT\_OK} if the bases and primes in the library are correct. There is one last helper +function: +\index{dh\_sizes()} +\begin{verbatim} +void dh_sizes(int *low, int *high); +\end{verbatim} +Which stores the smallest and largest key sizes support into the two variables. + +\section{DH Packet} +Similar to the RSA related functions there are functions to encrypt or decrypt symmetric keys using the DH public key +algorithms. +\index{dh\_encrypt\_key()} \index{dh\_decrypt\_key()} +\begin{verbatim} +int dh_encrypt_key(const unsigned char *inkey, unsigned long keylen, + unsigned char *out, unsigned long *len, + prng_state *prng, int wprng, int hash, + dh_key *key); + +int dh_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *outkey, unsigned long *keylen, + dh_key *key); +\end{verbatim} +Where ``inkey'' is an input symmetric key of no more than 32 bytes. Essentially these routines created a random public key +and find the hash of the shared secret. The message digest is than XOR'ed against the symmetric key. All of the +required data is placed in ``out'' by ``dh\_encrypt\_key()''. The hash must produce a message digest at least as large +as the symmetric key you are trying to share. + +Similar to the RSA system you can sign and verify a hash of a message. +\index{dh\_sign\_hash()} \index{dh\_verify\_hash()} +\begin{verbatim} +int dh_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, dh_key *key); + +int dh_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int *stat, dh_key *key); +\end{verbatim} + +The ``dh\_sign\_hash'' function signs the message hash in ``in'' of length ``inlen'' and forms a DH packet in ``out''. +The ``dh\_verify\_hash'' function verifies the DH signature in ``sig'' against the hash in ``hash''. It sets ``stat'' +to non-zero if the signature passes or zero if it fails. + +\chapter{Elliptic Curve Cryptography} + +\section{Background} +The library provides a set of core ECC functions as well that are designed to be the Elliptic Curve analogy of all of the +Diffie-Hellman routines in the previous chapter. Elliptic curves (of certain forms) have the benefit that they are harder +to attack (no sub-exponential attacks exist unlike normal DH crypto) in fact the fastest attack requires the square root +of the order of the base point in time. That means if you use a base point of order $2^{192}$ (which would represent a +192-bit key) then the work factor is $2^{96}$ in order to find the secret key. + +The curves in this library are taken from the following website: +\begin{verbatim} +http://csrc.nist.gov/cryptval/dss.htm +\end{verbatim} + +They are all curves over the integers modulo a prime. The curves have the basic equation that is: +\begin{equation} +y^2 = x^3 - 3x + b\mbox{ }(\mbox{mod }p) +\end{equation} + +The variable $b$ is chosen such that the number of points is nearly maximal. In fact the order of the base points $\beta$ +provided are very close to $p$ that is $\vert \vert \phi(\beta) \vert \vert \approx \vert \vert p \vert \vert$. The curves +range in order from $\approx 2^{192}$ points to $\approx 2^{521}$. According to the source document any key size greater +than or equal to 256-bits is sufficient for long term security. + +\section{Core Functions} + +Like the DH routines there is a key structure ``ecc\_key'' used by the functions. There is a function to make a key: +\index{ecc\_make\_key()} +\begin{verbatim} +int ecc_make_key(prng_state *prng, int wprng, + int keysize, ecc_key *key); +\end{verbatim} + +The ``keysize'' is the size of the modulus in bytes desired. Currently directly supported values are 20, 24, 28, 32, 48 and 65 bytes which +correspond to key sizes of 160, 192, 224, 256, 384 and 521 bits respectively. If you pass a key size that is between any key size +it will round the keysize up to the next available one. The rest of the parameters work like they do in the ``dh\_make\_key()'' function. +To free the ram allocated by a key call: +\index{ecc\_free()} +\begin{verbatim} +void ecc_free(ecc_key *key); +\end{verbatim} + +To import and export a key there are: +\index{ecc\_export()} +\index{ecc\_import()} +\begin{verbatim} +int ecc_export(unsigned char *out, unsigned long *outlen, + int type, ecc_key *key); + +int ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key); +\end{verbatim} +These two work exactly like there DH counterparts. Finally when you share your public key you can make a shared secret +with: +\index{ecc\_shared\_secret()} +\begin{verbatim} +int ecc_shared_secret(ecc_key *private_key, + ecc_key *public_key, + unsigned char *out, unsigned long *outlen); +\end{verbatim} +Which works exactly like the DH counterpart, the ``private\_key'' is your own key and ``public\_key'' is the key the other +user sent you. Note that this function stores both $x$ and $y$ co-ordinates of the shared +elliptic point. You should hash the output to get a shared key in a more compact and useful form (most of the entropy is +in $x$ anyways). Both keys have to be the same size for this to work, to help there is a function to get the size in bytes + of a key. +\index{ecc\_get\_size()} +\begin{verbatim} +int ecc_get_size(ecc_key *key); +\end{verbatim} + +To test the ECC routines and to get the minimum and maximum key sizes there are these two functions: +\index{ecc\_test()} +\begin{verbatim} +int ecc_test(void); +void ecc_sizes(int *low, int *high); +\end{verbatim} +Which both work like their DH counterparts. + +\section{ECC Packet} +Similar to the RSA API there are two functions which encrypt and decrypt symmetric keys using the ECC public key +algorithms. + +\index{ecc\_encrypt\_key()} \index{ecc\_decrypt\_key()} +\begin{verbatim} +int ecc_encrypt_key(const unsigned char *inkey, unsigned long keylen, + unsigned char *out, unsigned long *len, + prng_state *prng, int wprng, int hash, + ecc_key *key); + +int ecc_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *outkey, unsigned long *keylen, + ecc_key *key); +\end{verbatim} + +Where ``inkey'' is an input symmetric key of no more than 32 bytes. Essentially these routines created a random public key +and find the hash of the shared secret. The message digest is than XOR'ed against the symmetric key. All of the required +data is placed in ``out'' by ``ecc\_encrypt\_key()''. The hash chosen must produce a message digest at least as large +as the symmetric key you are trying to share. + +There are also functions to sign and verify the hash of a message. +\index{ecc\_sign\_hash()} \index{ecc\_verify\_hash()} +\begin{verbatim} +int ecc_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, ecc_key *key); + +int ecc_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int *stat, ecc_key *key); +\end{verbatim} + +The ``ecc\_sign\_hash'' function signs the message hash in ``in'' of length ``inlen'' and forms a ECC packet in ``out''. +The ``ecc\_verify\_hash'' function verifies the ECC signature in ``sig'' against the hash in ``hash''. It sets ``stat'' +to non-zero if the signature passes or zero if it fails. + + +\section{ECC Keysizes} +With ECC if you try and sign a hash that is bigger than your ECC key you can run into problems. The math will still work +and in effect the signature will still work. With ECC keys the strength of the signature is limited by the size of +the hash or the size of they key, whichever is smaller. For example, if you sign with SHA256 and a ECC-160 key in effect +you have 160-bits of security (e.g. as if you signed with SHA-1). + +The library will not warn you if you make this mistake so it is important to check yourself before using the +signatures. + +\chapter{Digital Signature Algorithm} +\section{Introduction} +The Digital Signature Algorithm (or DSA) is a variant of the ElGamal Signature scheme which has been modified to +reduce the bandwidth of a signature. For example, to have ``80-bits of security'' with ElGamal you need a group of +order at least 1024-bits. With DSA you need a group of order at least 160-bits. By comparison the ElGamal signature +would require at least 256 bytes where as the DSA signature would require only at least 40 bytes. + +The API for the DSA is essentially the same as the other PK algorithms. Except in the case of DSA no encryption or +decryption routines are provided. + +\section{Key Generation} +To make a DSA key you must call the following function +\begin{verbatim} +int dsa_make_key(prng_state *prng, int wprng, + int group_size, int modulus_size, + dsa_key *key); +\end{verbatim} +The variable ``prng'' is an active PRNG state and ``wprng'' the index to the descriptor. ``group\_size'' and +``modulus\_size'' control the difficulty of forging a signature. Both parameters are in bytes. The larger the +``group\_size'' the more difficult a forgery becomes upto a limit. The value of $group\_size$ is limited by +$15 < group\_size < 1024$ and $modulus\_size - group\_size < 512$. Suggested values for the pairs are as follows. + +\begin{center} +\begin{tabular}{|c|c|c|} +\hline \textbf{Bits of Security} & \textbf{group\_size} & \textbf{modulus\_size} \\ +\hline 80 & 20 & 128 \\ +\hline 120 & 30 & 256 \\ +\hline 140 & 35 & 384 \\ +\hline 160 & 40 & 512 \\ +\hline +\end{tabular} +\end{center} + +When you are finished with a DSA key you can call the following function to free the memory used. +\index{dsa\_free()} +\begin{verbatim} +void dsa_free(dsa_key *key); +\end{verbatim} + +\section{Key Verification} +Each DSA key is composed of the following variables. + +\begin{enumerate} + \item $q$ a small prime of magnitude $256^{group\_size}$. + \item $p = qr + 1$ a large prime of magnitude $256^{modulus\_size}$ where $r$ is a random even integer. + \item $g = h^r \mbox{ (mod }p\mbox{)}$ a generator of order $q$ modulo $p$. $h$ can be any non-trivial random + value. For this library they start at $h = 2$ and step until $g$ is not $1$. + \item $x$ a random secret (the secret key) in the range $1 < x < q$ + \item $y = g^x \mbox{ (mod }p\mbox{)}$ the public key. +\end{enumerate} + +A DSA key is considered valid if it passes all of the following tests. + +\begin{enumerate} + \item $q$ must be prime. + \item $p$ must be prime. + \item $g$ cannot be one of $\lbrace -1, 0, 1 \rbrace$ (modulo $p$). + \item $g$ must be less than $p$. + \item $(p-1) \equiv 0 \mbox{ (mod }q\mbox{)}$. + \item $g^q \equiv 1 \mbox{ (mod }p\mbox{)}$. + \item $1 < y < p - 1$ + \item $y^q \equiv 1 \mbox{ (mod }p\mbox{)}$. +\end{enumerate} + +Tests one and two ensure that the values will at least form a field which is required for the signatures to +function. Tests three and four ensure that the generator $g$ is not set to a trivial value which would make signature +forgery easier. Test five ensures that $q$ divides the order of multiplicative sub-group of $\Z/p\Z$. Test six +ensures that the generator actually generates a prime order group. Tests seven and eight ensure that the public key +is within range and belongs to a group of prime order. Note that test eight does not prove that $g$ generated $y$ only +that $y$ belongs to a multiplicative sub-group of order $q$. + +The following function will perform these tests. + +\index{dsa\_verify\_key()} +\begin{verbatim} +int dsa_verify_key(dsa_key *key, int *stat); +\end{verbatim} + +This will test ``key'' and store the result in ``stat''. If the result is $stat = 0$ the DSA key failed one of the tests +and should not be used at all. If the result is $stat = 1$ the DSA key is valid (as far as valid mathematics are concerned). + + + +\section{Signatures} +To generate a DSA signature call the following function + +\index{dsa\_sign\_hash()} +\begin{verbatim} +int dsa_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, dsa_key *key); +\end{verbatim} + +Which will sign the data in ``in'' of length ``inlen'' bytes. The signature is stored in ``out'' and the size +of the signature in ``outlen''. If the signature is longer than the size you initially specify in ``outlen'' nothing +is stored and the function returns an error code. The DSA ``key'' must be of the \textbf{PK\_PRIVATE} persuasion. + +To verify a hash created with that function use the following function + +\index{dsa\_verify\_hash()} +\begin{verbatim} +int dsa_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long inlen, + int *stat, dsa_key *key); +\end{verbatim} +Which will verify the data in ``hash'' of length ``inlen'' against the signature stored in ``sig'' of length ``siglen''. +It will set ``stat'' to $1$ if the signature is valid, otherwise it sets ``stat'' to $0$. + +\section{Import and Export} + +To export a DSA key so that it can be transported use the following function +\index{dsa\_export()} +\begin{verbatim} +int dsa_export(unsigned char *out, unsigned long *outlen, + int type, + dsa_key *key); +\end{verbatim} +This will export the DSA ``key'' to the buffer ``out'' and set the length in ``outlen'' (which must have been previously +initialized to the maximum buffer size). The ``type`` variable may be either \textbf{PK\_PRIVATE} or \textbf{PK\_PUBLIC} +depending on whether you want to export a private or public copy of the DSA key. + +To import an exported DSA key use the following function + +\index{dsa\_import()} +\begin{verbatim} +int dsa_import(const unsigned char *in, unsigned long inlen, + dsa_key *key); +\end{verbatim} + +This will import the DSA key from the buffer ``in'' of length ``inlen'' to the ``key''. If the process fails the function +will automatically free all of the heap allocated in the process (you don't have to call dsa\_free()). + +\chapter{Miscellaneous} +\section{Base64 Encoding and Decoding} +The library provides functions to encode and decode a RFC1521 base64 coding scheme. This means that it can decode what it +encodes but the format used does not comply to any known standard. The characters used in the mappings are: +\begin{verbatim} +ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ +\end{verbatim} +Those characters should are supported in virtually any 7-bit ASCII system which means they can be used for transport over +common e-mail, usenet and HTTP mediums. The format of an encoded stream is just a literal sequence of ASCII characters +where a group of four represent 24-bits of input. The first four chars of the encoders output is the length of the +original input. After the first four characters is the rest of the message. + +Often it is desirable to line wrap the output to fit nicely in an e-mail or usenet posting. The decoder allows you to +put any character (that is not in the above sequence) in between any character of the encoders output. You may not however, +break up the first four characters. + +To encode a binary string in base64 call: +\index{base64\_encode()} \index{base64\_decode()} +\begin{verbatim} +int base64_encode(const unsigned char *in, unsigned long len, + unsigned char *out, unsigned long *outlen); +\end{verbatim} +Where ``in'' is the binary string and ``out'' is where the ASCII output is placed. You must set the value of ``outlen'' prior +to calling this function and it sets the length of the base64 output in ``outlen'' when it is done. To decode a base64 +string call: +\begin{verbatim} +int base64_decode(const unsigned char *in, unsigned long len, + unsigned char *out, unsigned long *outlen); +\end{verbatim} + +\section{The Multiple Precision Integer Library (MPI)} +The library comes with a copy of LibTomMath which is a multiple precision integer library written by the +author of LibTomCrypt. LibTomMath is a trivial to use ANSI C compatible large integer library which is free +for all uses and is distributed freely. + +At the heart of all the functions is the data type ``mp\_int'' (defined in tommath.h). This data type is what +will hold all large integers. In order to use an mp\_int one must initialize it first, for example: +\begin{verbatim} +#include /* mycrypt.h includes mpi.h automatically */ +int main(void) +{ + mp_int bignum; + + /* initialize it */ + mp_init(&bignum); + + return 0; +} +\end{verbatim} +If you are unfamiliar with the syntax of C the \& symbol is used to pass the address of ``bignum'' to the function. All +LibTomMath functions require the address of the parameters. To free the memory of a mp\_int use (for example): +\begin{verbatim} +mp_clear(&bignum); +\end{verbatim} + +The functions also have the basic form of one of the following: +\begin{verbatim} +mp_XXX(mp_int *a); +mp_XXX(mp_int *a, mp_int *b, mp_int *c); +mp_XXX(mp_int *a, mp_int *b, mp_int *c, mp_int *d); +\end{verbatim} + +Where they perform some operation and store the result in the mp\_int variable passed on the far right. +For example, to compute $c = a + b \mbox{ }(\mbox{mod }m)$ you would call: +\begin{verbatim} +mp_addmod(&a, &b, &m, &c); +\end{verbatim} + +\subsection{Binary Forms of ``mp\_int'' Variables} + +Often it is required to store a ``mp\_int'' in binary form for transport (e.g. exporting a key, packet +encryption, etc.). LibTomMath includes two functions to help when exporting numbers: +\begin{verbatim} +int mp_raw_size(mp_int *num); +mp_toraw(&num, buf); +\end{verbatim} + +The former function gives the size in bytes of the raw format and the latter function actually stores the raw data. All +``mp\_int'' numbers are stored in big endian form (like PKCS demands) with the first byte being the sign of the number. The +``rsa\_exptmod()'' function differs slightly since it will take the input in the form exactly as PKCS demands (without the +leading sign byte). All other functions include the sign byte (since its much simpler just to include it). The sign byte +must be zero for positive numbers and non-zero for negative numbers. For example, +the sequence: +\begin{verbatim} +00 FF 30 04 +\end{verbatim} +Represents the integer $255 \cdot 256^2 + 48 \cdot 256^1 + 4 \cdot 256^0$ or 16,723,972. + +To read a binary string back into a ``mp\_int'' call: +\begin{verbatim} +mp_read_raw(mp_int *num, unsigned char *str, int len); +\end{verbatim} +Where ``num'' is where to store it, ``str'' is the binary string (including the leading sign byte) and ``len'' is the +length of the binary string. + +\subsection{Primality Testing} +\index{Primality Testing} +The library includes primality testing and random prime functions as well. The primality tester will perform the test in +two phases. First it will perform trial division by the first few primes. Second it will perform eight rounds of the +Rabin-Miller primality testing algorithm. If the candidate passes both phases it is declared prime otherwise it is declared +composite. No prime number will fail the two phases but composites can. Each round of the Rabin-Miller algorithm reduces +the probability of a pseudo-prime by $1 \over 4$ therefore after sixteen rounds the probability is no more than +$\left ( { 1 \over 4 } \right )^{8} = 2^{-16}$. In practice the probability of error is in fact much lower than that. + +When making random primes the trial division step is in fact an optimized implementation of ``Implementation of Fast RSA Key Generation on Smart Cards''\footnote{Chenghuai Lu, Andre L. M. dos Santos and Francisco R. Pimentel}. +In essence a table of machine-word sized residues are kept of a candidate modulo a set of primes. When the candiate +is rejected and ultimately incremented to test the next number the residues are updated without using multi-word precision +math operations. As a result the routine can scan ahead to the next number required for testing with very little work +involved. + +In the event that a composite did make it through it would most likely cause the the algorithm trying to use it to fail. For +instance, in RSA two primes $p$ and $q$ are required. The order of the multiplicative sub-group (modulo $pq$) is given +as $\phi(pq)$ or $(p - 1)(q - 1)$. The decryption exponent $d$ is found as $de \equiv 1\mbox{ }(\mbox{mod } \phi(pq))$. If either $p$ or $q$ is composite the value of $d$ will be incorrect and the user +will not be able to sign or decrypt messages at all. Suppose $p$ was prime and $q$ was composite this is just a variation of +the multi-prime RSA. Suppose $q = rs$ for two primes $r$ and $s$ then $\phi(pq) = (p - 1)(r - 1)(s - 1)$ which clearly is +not equal to $(p - 1)(rs - 1)$. + +These are not technically part of the LibTomMath library but this is the best place to document them. +To test if a ``mp\_int'' is prime call: +\begin{verbatim} +int is_prime(mp_int *N, int *result); +\end{verbatim} +This puts a one in ``result'' if the number is probably prime, otherwise it places a zero in it. It is assumed that if +it returns an error that the value in ``result'' is undefined. To make +a random prime call: +\begin{verbatim} +int rand_prime(mp_int *N, unsigned long len, prng_state *prng, int wprng); +\end{verbatim} +Where ``len'' is the size of the prime in bytes ($2 \le len \le 256$). You can set ``len'' to the negative size you want +to get a prime of the form $p \equiv 3\mbox{ }(\mbox{mod } 4)$. So if you want a 1024-bit prime of this sort pass +``len = -128'' to the function. Upon success it will return {\bf CRYPT\_OK} and ``N'' will contain an integer which +is very likely prime. + +\chapter{Programming Guidelines} + +\section{Secure Pseudo Random Number Generators} +Probably the singal most vulnerable point of any cryptosystem is the PRNG. Without one generating and protecting secrets +would be impossible. The requirement that one be setup correctly is vitally important and to address this point the library +does provide two RNG sources that will address the largest amount of end users as possible. The ``sprng'' PRNG provided +provides and easy to access source of entropy for any application on a *NIX or Windows computer. + +However, when the end user is not on one of these platforms the application developer must address the issue of finding +entropy. This manual is not designed to be a text on cryptography. I would just like to highlight that when you design +a cryptosystem make sure the first problem you solve is getting a fresh source of entropy. + +\section{Preventing Trivial Errors} +Two simple ways to prevent trivial errors is to prevent overflows and to check the return values. All of the functions +which output variable length strings will require you to pass the length of the destination. If the size of your output +buffer is smaller than the output it will report an error. Therefore, make sure the size you pass is correct! + +Also virtually all of the functions return an error code or {\bf CRYPT\_OK}. You should detect all errors as simple +typos or such can cause algorithms to fail to work as desired. + +\section{Registering Your Algorithms} +To avoid linking and other runtime errors it is important to register the ciphers, hashes and PRNGs you intend to use +before you try to use them. This includes any function which would use an algorithm indirectly through a descriptor table. + +A neat bonus to the registry system is that you can add external algorithms that are not part of the library without +having to hack the library. For example, suppose you have a hardware specific PRNG on your system. You could easily +write the few functions required plus a descriptor. After registering your PRNG all of the library functions that +need a PRNG can instantly take advantage of it. + +\section{Key Sizes} + +\subsection{Symmetric Ciphers} +For symmetric ciphers use as large as of a key as possible. For the most part ``bits are cheap'' so using a 256-bit key +is not a hard thing todo. + +\subsection{Assymetric Ciphers} +The following chart gives the work factor for solving a DH/RSA public key using the NFS. The work factor for a key of order +$n$ is estimated to be +\begin{equation} +e^{1.923 \cdot ln(n)^{1 \over 3} \cdot ln(ln(n))^{2 \over 3}} +\end{equation} + +Note that $n$ is not the bit-length but the magnitude. For example, for a 1024-bit key $n = 2^{1024}$. The work required +is: +\begin{center} +\begin{tabular}{|c|c|} + \hline RSA/DH Key Size (bits) & Work Factor ($log_2$) \\ + \hline 512 & 63.92 \\ + \hline 768 & 76.50 \\ + \hline 1024 & 86.76 \\ + \hline 1536 & 103.37 \\ + \hline 2048 & 116.88 \\ + \hline 2560 & 128.47 \\ + \hline 3072 & 138.73 \\ + \hline 4096 & 156.49 \\ + \hline +\end{tabular} +\end{center} + +The work factor for ECC keys is much higher since the best attack is still fully exponentional. Given a key of magnitude +$n$ it requires $\sqrt n$ work. The following table sumarizes the work required: +\begin{center} +\begin{tabular}{|c|c|} + \hline ECC Key Size (bits) & Work Factor ($log_2$) \\ + \hline 160 & 80 \\ + \hline 192 & 96 \\ + \hline 224 & 112 \\ + \hline 256 & 128 \\ + \hline 384 & 192 \\ + \hline 521 & 260.5 \\ + \hline +\end{tabular} +\end{center} + +Using the above tables the following suggestions for key sizes seems appropriate: +\begin{center} +\begin{tabular}{|c|c|c|} + \hline Security Goal & RSA/DH Key Size (bits) & ECC Key Size (bits) \\ + \hline Short term (less than a year) & 1024 & 160 \\ + \hline Short term (less than five years) & 1536 & 192 \\ + \hline Long Term (less than ten years) & 2560 & 256 \\ + \hline +\end{tabular} +\end{center} + +\section{Thread Safety} +The library is not thread safe but several simple precautions can be taken to avoid any problems. The registry functions +such as register\_cipher() are not thread safe no matter what you do. Its best to call them from your programs initializtion +code before threads are initiated. + +The rest of the code uses state variables you must pass it such as hash\_state, hmac\_state, etc. This means that if each +thread has its own state variables then they will not affect each other. This is fairly simple with symmetric ciphers +and hashes. However, the keyring and PRNG support is something the threads will want to share. The simplest workaround +is create semaphores or mutexes around calls to those functions. + +Since C does not have standard semaphores this support is not native to Libtomcrypt. Even a C based semaphore is not entire +possible as some compilers may ignore the ``volatile'' keyword or have multiple processors. Provide your host application +is modular enough putting the locks in the right place should not bloat the code significantly and will solve all thread +safety issues within the library. + +\chapter{Configuring the Library} +\section{Introduction} +The library is fairly flexible about how it can be built, used and generally distributed. Additions are being made with +each new release that will make the library even more flexible. Most options are placed in the makefile and others +are in ``mycrypt\_cfg.h''. All are used when the library is built from scratch. + +For GCC platforms the file ``makefile'' is the makefile to be used. On MSVC platforms ``makefile.vc'' and on PS2 platforms +``makefile.ps2''. + +\section{mycrypt\_cfg.h} +The file ``mycrypt\_cfg.h'' is what lets you control what functionality you want to remove from the library. By default, +everything the library has to offer it built. + +\subsubsection{ARGTYPE} +This lets you control how the \_ARGCHK macro will behave. The macro is used to check pointers inside the functions against +NULL. There are three settings for ARGTYPE. When set to 0 it will have the default behaviour of printing a message to +stderr and raising a SIGABRT signal. This is provided so all platforms that use libtomcrypt can have an error that functions +similarly. When set to 1 it will simply pass on to the assert() macro. When set to 2 it will resolve to a empty macro +and no error checking will be performed. + +\subsubsection{Endianess} +There are five macros related to endianess issues. For little endian platforms define, ENDIAN\_LITTLE. For big endian +platforms define ENDIAN\_BIG. Similarly when the default word size of an ``unsigned long'' is 32-bits define ENDIAN\_32BITWORD +or define ENDIAN\_64BITWORD when its 64-bits. If you do not define any of them the library will automatically use ENDIAN\_NEUTRAL +which will work on all platforms. Currently the system will automatically detect GCC or MSVC on a windows platform as well +as GCC on a PS2 platform. + +\section{The Configure Script} +There are also options you can specify from the configure script or ``mycrypt\_config.h''. + +\subsubsection{X memory routines} +The makefiles must define three macros denoted as XMALLOC, XCALLOC and XFREE which resolve to the name of the respective +functions. This lets you substitute in your own memory routines. If you substitute in your own functions they must behave +like the standard C library functions in terms of what they expect as input and output. By default the library uses the +standard C routines. + +\subsubsection{X clock routines} +The rng\_get\_bytes() function can call a function that requires the clock() function. These macros let you override +the default clock() used with a replacement. By default the standard C library clock() function is used. + +\subsubsection{NO\_FILE} +During the build if NO\_FILE is defined then any function in the library that uses file I/O will not call the file I/O +functions and instead simply return CRYPT\_ERROR. This should help resolve any linker errors stemming from a lack of +file I/O on embedded platforms. + +\subsubsection{CLEAN\_STACK} +When this functions is defined the functions that store key material on the stack will clean up afterwards. Assumes that +you have no memory paging with the stack. + +\subsubsection{Symmetric Ciphers, One-way Hashes, PRNGS and Public Key Functions} +There are a plethora of macros for the ciphers, hashes, PRNGs and public key functions which are fairly self-explanatory. +When they are defined the functionality is included otherwise it is not. There are some dependency issues which are +noted in the file. For instance, Yarrow requires CTR chaining mode, a block cipher and a hash function. + +\subsubsection{TWOFISH\_SMALL and TWOFISH\_TABLES} +Twofish is a 128-bit symmetric block cipher that is provided within the library. The cipher itself is flexible enough +to allow some tradeoffs in the implementation. When TWOFISH\_SMALL is defined the scheduled symmetric key for Twofish +requires only 200 bytes of memory. This is achieved by not pre-computing the substitution boxes. Having this +defined will also greatly slow down the cipher. When this macro is not defined Twofish will pre-compute the +tables at a cost of 4KB of memory. The cipher will be much faster as a result. + +When TWOFISH\_TABLES is defined the cipher will use pre-computed (and fixed in code) tables required to work. This is +useful when TWOFISH\_SMALL is defined as the table values are computed on the fly. When this is defined the code size +will increase by approximately 500 bytes. If this is defined but TWOFISH\_SMALL is not the cipher will still work but +it will not speed up the encryption or decryption functions. + +\subsubsection{SMALL\_CODE} +When this is defined some of the code such as the Rijndael and SAFER+ ciphers are replaced with smaller code variants. +These variants are slower but can save quite a bit of code space. + +\input{crypt.ind} + +\end{document} diff --git a/crypt_argchk.c b/crypt_argchk.c new file mode 100644 index 00000000..3bb73a08 --- /dev/null +++ b/crypt_argchk.c @@ -0,0 +1,21 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" +#include + +#if (ARGTYPE == 0) +void crypt_argchk(char *v, char *s, int d) +{ + fprintf(stderr, "_ARGCHK '%s' failure on line %d of file %s\n", + v, d, s); + (void)raise(SIGABRT); +} +#endif diff --git a/crypt_cipher_descriptor.c b/crypt_cipher_descriptor.c new file mode 100644 index 00000000..4a8a9433 --- /dev/null +++ b/crypt_cipher_descriptor.c @@ -0,0 +1,14 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +struct _cipher_descriptor cipher_descriptor[TAB_SIZE]; + diff --git a/crypt_cipher_is_valid.c b/crypt_cipher_is_valid.c new file mode 100644 index 00000000..8b0c448f --- /dev/null +++ b/crypt_cipher_is_valid.c @@ -0,0 +1,19 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int cipher_is_valid(int idx) +{ + if (idx < 0 || idx >= TAB_SIZE || cipher_descriptor[idx].name == NULL) { + return CRYPT_INVALID_CIPHER; + } + return CRYPT_OK; +} diff --git a/crypt_find_cipher.c b/crypt_find_cipher.c new file mode 100644 index 00000000..0aa88c77 --- /dev/null +++ b/crypt_find_cipher.c @@ -0,0 +1,24 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int find_cipher(const char *name) +{ + int x; + _ARGCHK(name != NULL); + for (x = 0; x < TAB_SIZE; x++) { + if (cipher_descriptor[x].name != NULL && !strcmp(cipher_descriptor[x].name, name)) { + return x; + } + } + return -1; +} + diff --git a/crypt_find_cipher_any.c b/crypt_find_cipher_any.c new file mode 100644 index 00000000..81c33be9 --- /dev/null +++ b/crypt_find_cipher_any.c @@ -0,0 +1,32 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +/* idea from Wayne Scott */ +int find_cipher_any(const char *name, int blocklen, int keylen) +{ + int x; + + _ARGCHK(name != NULL); + + x = find_cipher(name); + if (x != -1) return x; + + for (x = 0; x < TAB_SIZE; x++) { + if (cipher_descriptor[x].name == NULL) { + continue; + } + if (blocklen <= (int)cipher_descriptor[x].block_length && keylen <= (int)cipher_descriptor[x].max_key_length) { + return x; + } + } + return -1; +} diff --git a/crypt_find_cipher_id.c b/crypt_find_cipher_id.c new file mode 100644 index 00000000..91b19d56 --- /dev/null +++ b/crypt_find_cipher_id.c @@ -0,0 +1,22 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int find_cipher_id(unsigned char ID) +{ + int x; + for (x = 0; x < TAB_SIZE; x++) { + if (cipher_descriptor[x].ID == ID) { + return (cipher_descriptor[x].name == NULL) ? -1 : x; + } + } + return -1; +} diff --git a/crypt_find_hash.c b/crypt_find_hash.c new file mode 100644 index 00000000..14222336 --- /dev/null +++ b/crypt_find_hash.c @@ -0,0 +1,23 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int find_hash(const char *name) +{ + int x; + _ARGCHK(name != NULL); + for (x = 0; x < TAB_SIZE; x++) { + if (hash_descriptor[x].name != NULL && strcmp(hash_descriptor[x].name, name) == 0) { + return x; + } + } + return -1; +} diff --git a/crypt_find_hash_any.c b/crypt_find_hash_any.c new file mode 100644 index 00000000..5b352523 --- /dev/null +++ b/crypt_find_hash_any.c @@ -0,0 +1,34 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +/* return first hash with at least [amount over] digestlen bytes of output */ +int find_hash_any(const char *name, int digestlen) +{ + int x, y, z; + _ARGCHK(name != NULL); + + x = find_hash(name); + if (x != -1) return x; + + y = MAXBLOCKSIZE+1; + z = -1; + for (x = 0; x < TAB_SIZE; x++) { + if (hash_descriptor[x].name == NULL) { + continue; + } + if ((int)hash_descriptor[x].hashsize >= digestlen && (int)hash_descriptor[x].hashsize < y) { + z = x; + y = hash_descriptor[x].hashsize; + } + } + return z; +} diff --git a/crypt_find_hash_id.c b/crypt_find_hash_id.c new file mode 100644 index 00000000..ff04aeac --- /dev/null +++ b/crypt_find_hash_id.c @@ -0,0 +1,22 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int find_hash_id(unsigned char ID) +{ + int x; + for (x = 0; x < TAB_SIZE; x++) { + if (hash_descriptor[x].ID == ID) { + return (hash_descriptor[x].name == NULL) ? -1 : x; + } + } + return -1; +} diff --git a/crypt_find_prng.c b/crypt_find_prng.c new file mode 100644 index 00000000..7fc4e458 --- /dev/null +++ b/crypt_find_prng.c @@ -0,0 +1,24 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int find_prng(const char *name) +{ + int x; + _ARGCHK(name != NULL); + for (x = 0; x < TAB_SIZE; x++) { + if ((prng_descriptor[x].name != NULL) && strcmp(prng_descriptor[x].name, name) == 0) { + return x; + } + } + return -1; +} + diff --git a/crypt_hash_descriptor.c b/crypt_hash_descriptor.c new file mode 100644 index 00000000..5c022552 --- /dev/null +++ b/crypt_hash_descriptor.c @@ -0,0 +1,14 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +struct _hash_descriptor hash_descriptor[TAB_SIZE]; + diff --git a/crypt_hash_is_valid.c b/crypt_hash_is_valid.c new file mode 100644 index 00000000..b924e594 --- /dev/null +++ b/crypt_hash_is_valid.c @@ -0,0 +1,19 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int hash_is_valid(int idx) +{ + if (idx < 0 || idx >= TAB_SIZE || hash_descriptor[idx].name == NULL) { + return CRYPT_INVALID_HASH; + } + return CRYPT_OK; +} diff --git a/crypt_prng_descriptor.c b/crypt_prng_descriptor.c new file mode 100644 index 00000000..129118f6 --- /dev/null +++ b/crypt_prng_descriptor.c @@ -0,0 +1,13 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +struct _prng_descriptor prng_descriptor[TAB_SIZE]; diff --git a/crypt_prng_is_valid.c b/crypt_prng_is_valid.c new file mode 100644 index 00000000..cc66bc26 --- /dev/null +++ b/crypt_prng_is_valid.c @@ -0,0 +1,19 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int prng_is_valid(int idx) +{ + if (idx < 0 || idx >= TAB_SIZE || prng_descriptor[idx].name == NULL) { + return CRYPT_INVALID_PRNG; + } + return CRYPT_OK; +} diff --git a/crypt_register_cipher.c b/crypt_register_cipher.c new file mode 100644 index 00000000..e8e021e1 --- /dev/null +++ b/crypt_register_cipher.c @@ -0,0 +1,36 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int register_cipher(const struct _cipher_descriptor *cipher) +{ + int x; + + _ARGCHK(cipher != NULL); + + /* is it already registered? */ + for (x = 0; x < TAB_SIZE; x++) { + if (cipher_descriptor[x].name != NULL && cipher_descriptor[x].ID == cipher->ID) { + return x; + } + } + + /* find a blank spot */ + for (x = 0; x < TAB_SIZE; x++) { + if (cipher_descriptor[x].name == NULL) { + XMEMCPY(&cipher_descriptor[x], cipher, sizeof(struct _cipher_descriptor)); + return x; + } + } + + /* no spot */ + return -1; +} diff --git a/crypt_register_hash.c b/crypt_register_hash.c new file mode 100644 index 00000000..c8023a98 --- /dev/null +++ b/crypt_register_hash.c @@ -0,0 +1,36 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int register_hash(const struct _hash_descriptor *hash) +{ + int x; + + _ARGCHK(hash != NULL); + + /* is it already registered? */ + for (x = 0; x < TAB_SIZE; x++) { + if (memcmp(&hash_descriptor[x], hash, sizeof(struct _hash_descriptor)) == 0) { + return x; + } + } + + /* find a blank spot */ + for (x = 0; x < TAB_SIZE; x++) { + if (hash_descriptor[x].name == NULL) { + XMEMCPY(&hash_descriptor[x], hash, sizeof(struct _hash_descriptor)); + return x; + } + } + + /* no spot */ + return -1; +} diff --git a/crypt_register_prng.c b/crypt_register_prng.c new file mode 100644 index 00000000..81763383 --- /dev/null +++ b/crypt_register_prng.c @@ -0,0 +1,36 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int register_prng(const struct _prng_descriptor *prng) +{ + int x; + + _ARGCHK(prng != NULL); + + /* is it already registered? */ + for (x = 0; x < TAB_SIZE; x++) { + if (memcmp(&prng_descriptor[x], prng, sizeof(struct _prng_descriptor)) == 0) { + return x; + } + } + + /* find a blank spot */ + for (x = 0; x < TAB_SIZE; x++) { + if (prng_descriptor[x].name == NULL) { + XMEMCPY(&prng_descriptor[x], prng, sizeof(struct _prng_descriptor)); + return x; + } + } + + /* no spot */ + return -1; +} diff --git a/crypt_unregister_cipher.c b/crypt_unregister_cipher.c new file mode 100644 index 00000000..6321daf4 --- /dev/null +++ b/crypt_unregister_cipher.c @@ -0,0 +1,28 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int unregister_cipher(const struct _cipher_descriptor *cipher) +{ + int x; + + _ARGCHK(cipher != NULL); + + /* is it already registered? */ + for (x = 0; x < TAB_SIZE; x++) { + if (memcmp(&cipher_descriptor[x], cipher, sizeof(struct _cipher_descriptor)) == 0) { + cipher_descriptor[x].name = NULL; + cipher_descriptor[x].ID = 255; + return CRYPT_OK; + } + } + return CRYPT_ERROR; +} diff --git a/crypt_unregister_hash.c b/crypt_unregister_hash.c new file mode 100644 index 00000000..fcdca5fb --- /dev/null +++ b/crypt_unregister_hash.c @@ -0,0 +1,27 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int unregister_hash(const struct _hash_descriptor *hash) +{ + int x; + + _ARGCHK(hash != NULL); + + /* is it already registered? */ + for (x = 0; x < TAB_SIZE; x++) { + if (memcmp(&hash_descriptor[x], hash, sizeof(struct _hash_descriptor)) == 0) { + hash_descriptor[x].name = NULL; + return CRYPT_OK; + } + } + return CRYPT_ERROR; +} diff --git a/crypt_unregister_prng.c b/crypt_unregister_prng.c new file mode 100644 index 00000000..c3153380 --- /dev/null +++ b/crypt_unregister_prng.c @@ -0,0 +1,27 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int unregister_prng(const struct _prng_descriptor *prng) +{ + int x; + + _ARGCHK(prng != NULL); + + /* is it already registered? */ + for (x = 0; x < TAB_SIZE; x++) { + if (memcmp(&prng_descriptor[x], prng, sizeof(struct _prng_descriptor)) != 0) { + prng_descriptor[x].name = NULL; + return CRYPT_OK; + } + } + return CRYPT_ERROR; +} diff --git a/ctr_decrypt.c b/ctr_decrypt.c new file mode 100644 index 00000000..dce3a398 --- /dev/null +++ b/ctr_decrypt.c @@ -0,0 +1,25 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef CTR + +int ctr_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CTR *ctr) +{ + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(ctr != NULL); + + return ctr_encrypt(ct, pt, len, ctr); +} + +#endif + diff --git a/ctr_encrypt.c b/ctr_encrypt.c new file mode 100644 index 00000000..476de384 --- /dev/null +++ b/ctr_encrypt.c @@ -0,0 +1,64 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef CTR + +int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CTR *ctr) +{ + int x, err; + + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(ctr != NULL); + + if ((err = cipher_is_valid(ctr->cipher)) != CRYPT_OK) { + return err; + } + + /* is blocklen/padlen valid? */ + if (ctr->blocklen < 0 || ctr->blocklen > (int)sizeof(ctr->ctr) || + ctr->padlen < 0 || ctr->padlen > (int)sizeof(ctr->pad)) { + return CRYPT_INVALID_ARG; + } + + while (len-- > 0) { + /* is the pad empty? */ + if (ctr->padlen == ctr->blocklen) { + /* increment counter */ + if (ctr->mode == 0) { + /* little-endian */ + for (x = 0; x < ctr->blocklen; x++) { + ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; + if (ctr->ctr[x] != (unsigned char)0) { + break; + } + } + } else { + /* big-endian */ + for (x = ctr->blocklen-1; x >= 0; x--) { + ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; + if (ctr->ctr[x] != (unsigned char)0) { + break; + } + } + } + + /* encrypt it */ + cipher_descriptor[ctr->cipher].ecb_encrypt(ctr->ctr, ctr->pad, &ctr->key); + ctr->padlen = 0; + } + *ct++ = *pt++ ^ ctr->pad[ctr->padlen++]; + } + return CRYPT_OK; +} + +#endif diff --git a/ctr_getiv.c b/ctr_getiv.c new file mode 100644 index 00000000..ab20491d --- /dev/null +++ b/ctr_getiv.c @@ -0,0 +1,30 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef CTR + +int ctr_getiv(unsigned char *IV, unsigned long *len, symmetric_CTR *ctr) +{ + _ARGCHK(IV != NULL); + _ARGCHK(len != NULL); + _ARGCHK(ctr != NULL); + if ((unsigned long)ctr->blocklen > *len) { + return CRYPT_BUFFER_OVERFLOW; + } + XMEMCPY(IV, ctr->ctr, ctr->blocklen); + *len = ctr->blocklen; + + return CRYPT_OK; +} + +#endif diff --git a/ctr_setiv.c b/ctr_setiv.c new file mode 100644 index 00000000..f15ee223 --- /dev/null +++ b/ctr_setiv.c @@ -0,0 +1,43 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef CTR + +int ctr_setiv(const unsigned char *IV, unsigned long len, symmetric_CTR *ctr) +{ + int err; + + _ARGCHK(IV != NULL); + _ARGCHK(ctr != NULL); + + /* bad param? */ + if ((err = cipher_is_valid(ctr->cipher)) != CRYPT_OK) { + return err; + } + + if (len != (unsigned long)ctr->blocklen) { + return CRYPT_INVALID_ARG; + } + + /* set IV */ + XMEMCPY(ctr->ctr, IV, len); + + /* force next block */ + ctr->padlen = 0; + cipher_descriptor[ctr->cipher].ecb_encrypt(IV, ctr->pad, &ctr->key); + + return CRYPT_OK; +} + +#endif + diff --git a/ctr_start.c b/ctr_start.c new file mode 100644 index 00000000..f752b655 --- /dev/null +++ b/ctr_start.c @@ -0,0 +1,46 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef CTR + +int ctr_start(int cipher, const unsigned char *count, const unsigned char *key, int keylen, + int num_rounds, symmetric_CTR *ctr) +{ + int x, err; + + _ARGCHK(count != NULL); + _ARGCHK(key != NULL); + _ARGCHK(ctr != NULL); + + /* bad param? */ + if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { + return err; + } + + /* setup cipher */ + if ((err = cipher_descriptor[cipher].setup(key, keylen, num_rounds, &ctr->key)) != CRYPT_OK) { + return err; + } + + /* copy ctr */ + ctr->blocklen = cipher_descriptor[cipher].block_length; + ctr->cipher = cipher; + ctr->padlen = 0; + ctr->mode = 0; + for (x = 0; x < ctr->blocklen; x++) { + ctr->ctr[x] = count[x]; + } + cipher_descriptor[ctr->cipher].ecb_encrypt(ctr->ctr, ctr->pad, &ctr->key); + return CRYPT_OK; +} + +#endif diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt deleted file mode 100644 index e577bffc..00000000 --- a/demos/CMakeLists.txt +++ /dev/null @@ -1,81 +0,0 @@ -# ----------------------------------------------------------------------------- -# Options -# ----------------------------------------------------------------------------- - -option(INSTALL_DEMOS "Install enabled demos (USEFUL and/or USABLE) and ltc wrapper script" FALSE) - -# ----------------------------------------------------------------------------- -# Useful demos -# -# Demos that are even somehow useful and could be installed as a system-tool -# -# ----------------------------------------------------------------------------- -set(USEFUL_DEMOS hashsum) -list(JOIN USEFUL_DEMOS " " USEFUL_DEMOS_STR) -option(BUILD_USEFUL_DEMOS "Build useful demos (${USEFUL_DEMOS_STR})" FALSE) - -if(BUILD_USEFUL_DEMOS) - list(APPEND USABLE_DEMOS_TARGETS ${USEFUL_DEMOS}) -endif() - -# ----------------------------------------------------------------------------- -# Usable demos -# -# Demos that are usable but only rarely make sense to be installed -# -# ----------------------------------------------------------------------------- -set(USABLE_DEMOS aesgcm constants crypt der_print_flexi latex-tables openssh-privkey openssl-enc sizes timing) -list(JOIN USABLE_DEMOS " " USABLE_DEMOS_STR) -option(BUILD_USABLE_DEMOS "Build usable demos (${USABLE_DEMOS_STR})" FALSE) - -if(BUILD_USABLE_DEMOS) - list(APPEND USABLE_DEMOS_TARGETS ${USABLE_DEMOS}) -endif() - -# ----------------------------------------------------------------------------- -# Test demos -# -# Demos that are used for testing or measuring -# -# ----------------------------------------------------------------------------- -set(TEST_DEMOS small tv_gen) -list(JOIN TEST_DEMOS " " TEST_DEMOS_STR) -option(BUILD_TEST_DEMOS "Build test demos (${TEST_DEMOS_STR})" FALSE) - -if(BUILD_TEST_DEMOS) - list(APPEND ALL_DEMOS_TARGETS ${TEST_DEMOS}) -endif() - -# ----------------------------------------------------------------------------- -# Generate executables -# ----------------------------------------------------------------------------- - -# USABLE_DEMOS can get installed, so they're prefixed with `ltc-` -foreach(target ${USABLE_DEMOS_TARGETS}) - list(APPEND ALL_DEMOS_INSTALL_TARGETS ltc-${target}) - - add_executable(ltc-${target} ${CMAKE_CURRENT_SOURCE_DIR}/${target}.c) - - target_link_libraries(ltc-${target} PRIVATE ${PROJECT_NAME}) -endforeach() - -foreach(target ${ALL_DEMOS_TARGETS}) - add_executable(${target} ${CMAKE_CURRENT_SOURCE_DIR}/${target}.c) - - target_link_libraries(${target} PRIVATE ${PROJECT_NAME}) -endforeach() - -# ----------------------------------------------------------------------------- -# Install targets -# ----------------------------------------------------------------------------- -if(INSTALL_DEMOS) - install( - TARGETS ${ALL_DEMOS_INSTALL_TARGETS} - COMPONENT "runtime" - EXPORT ${TARGETS_EXPORT_NAME} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - ) - - # Also install the `ltc` wrapper script - install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/ltc DESTINATION ${CMAKE_INSTALL_BINDIR}) -endif() diff --git a/demos/aesgcm.c b/demos/aesgcm.c deleted file mode 100644 index 9aa549a3..00000000 --- a/demos/aesgcm.c +++ /dev/null @@ -1,140 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file aesgcm.c - AES128-GCM demo - file en-&decryption, Steffen Jaeckel - Uses the format: |ciphertext|tag-16-bytes| -*/ - -#define _GNU_SOURCE - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef LTC_GCM_MODE -int main(void) -{ - return -1; -} -#else - -#include "gcm-file/gcm_filehandle.c" -#include "gcm-file/gcm_file.c" - - -static off_t fsize(const char *filename) -{ - struct stat st; - - if (stat(filename, &st) == 0) return st.st_size; - - return -1; -} - -#if defined(__linux__) && defined(__GLIBC_PREREQ) -#if __GLIBC_PREREQ(2, 14) -#define HAS_SYNCFS -#endif -#endif - -static int mv(const char *old_name, const char *new_name) -{ - int fd; - if (rename(old_name, new_name) == -1) return -1; - fd = open(new_name, 0); - if (fd == -1) return -1; -#if !defined(_WIN32) - if (fsync(fd) != 0) goto OUT; -#if defined(HAS_SYNCFS) - syncfs(fd); -#else - sync(); -#endif -OUT: -#endif - close(fd); - return 0; -} - -static void LTC_NORETURN die(int ret) -{ - fprintf(stderr, "Usage: aesgcm <-e|-d> <88|96 char hex-string 'IV | key'>\n"); - exit(ret); -} - -int main(int argc, char **argv) -{ - int ret = 0, err, arg, direction, res, tmp; - size_t keylen; - uint8_t keybuf[48] = {0}; - char *out = NULL; - const char *mode, *in_file, *out_file, *key_string; - unsigned long ivlen, key_len; - - if (argc < 5) { - if (argc > 1 && strstr(argv[1], "-h")) - die(0); - else - die(__LINE__); - } - - arg = 1; - mode = argv[arg++]; - in_file = argv[arg++]; - out_file = argv[arg++]; - key_string = argv[arg++]; - - if(strcmp(mode, "-d") == 0) direction = GCM_DECRYPT; - else if(strcmp(mode, "-e") == 0) direction = GCM_ENCRYPT; - else die(__LINE__); - - if (fsize(in_file) <= 0) die(__LINE__); - - keylen = XSTRLEN(key_string); - if (keylen != 88 && keylen != 96) die(__LINE__); - - key_len = sizeof(keybuf); - if ((err = base16_decode(key_string, keylen, keybuf, &key_len)) != CRYPT_OK) { - fprintf(stderr, "boooh %s\n", error_to_string(err)); - die(__LINE__); - } - - register_all_ciphers(); - - if(asprintf(&out, "%s-XXXXXX", out_file) < 0) die(__LINE__); - if((tmp = mkstemp(out)) == -1) { - ret = __LINE__; - goto cleanup; - } - close(tmp); - ivlen = keylen/2 - 32; - if((err = gcm_file(find_cipher("aes"), &keybuf[ivlen], 32, keybuf, ivlen, NULL, 0, in_file, out, 16, direction, &res)) != CRYPT_OK) { - fprintf(stderr, "boooh %s\n", error_to_string(err)); - ret = __LINE__; - goto cleanup; - } - - if(res != 1) { - ret = __LINE__; - } - else - { - if (mv(out, out_file) != 0) ret = __LINE__; - } - -cleanup: - if(ret != 0) unlink(out); - free(out); - - - return ret; -} -#endif diff --git a/demos/constants.c b/demos/constants.c deleted file mode 100644 index 2276742d..00000000 --- a/demos/constants.c +++ /dev/null @@ -1,76 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#define _POSIX_C_SOURCE 200809L /* otherwise PATH_MAX + strdup are not defined for build with -std=c99 */ -#include "tomcrypt.h" - -#include -#define basename(path) ( strrchr((path), '/') ? strrchr((path), '/') + 1 : strrchr((path), '\\') ? strrchr((path), '\\') + 1 : (path) ) - -/** - @file demo_crypt_constants.c - - Demo how to get various constants to dynamic languages - like Python - - Larry Bugbee, February 2013 -*/ - -static void s_print_line(const char* cmd, const char* desc) -{ - printf(" %-16s - %s\n", cmd, desc); -} - -int main(int argc, char **argv) -{ - if (argc == 1) { - /* given a specific constant name, get and print its value */ - char name[] = "CTR_COUNTER_BIG_ENDIAN"; - int value; - char *names_list; - unsigned int names_list_len; - - if (crypt_get_constant(name, &value) != 0) exit(EXIT_FAILURE); - printf("\n %s is %d \n\n", name, value); - - /* get and print the length of the names (and values) list */ - - if (crypt_list_all_constants(NULL, &names_list_len) != 0) exit(EXIT_FAILURE); - printf(" need to allocate %u bytes \n\n", names_list_len); - - /* get and print the names (and values) list */ - if ((names_list = malloc(names_list_len)) == NULL) exit(EXIT_FAILURE); - if (crypt_list_all_constants(names_list, &names_list_len) != 0) exit(EXIT_FAILURE); - printf(" supported constants:\n\n%s\n\n", names_list); - free(names_list); - } else if (argc == 2) { - if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) { - char* base = strdup(basename(argv[0])); - printf("Usage: %s [-a] [-s name]\n\n", base); - s_print_line("", "The old behavior of the demo"); - s_print_line("-a", "Only lists all constants"); - s_print_line("-s name", "List a single constant given as argument"); - s_print_line("-h", "The help you're looking at"); - free(base); - } else if (strcmp(argv[1], "-a") == 0) { - char *names_list; - unsigned int names_list_len; - /* get and print the length of the names (and values) list */ - if (crypt_list_all_constants(NULL, &names_list_len) != 0) exit(EXIT_FAILURE); - /* get and print the names (and values) list */ - if ((names_list = malloc(names_list_len)) == NULL) exit(EXIT_FAILURE); - if (crypt_list_all_constants(names_list, &names_list_len) != 0) exit(EXIT_FAILURE); - printf("%s\n", names_list); - free(names_list); - } - } else if (argc == 3) { - if (strcmp(argv[1], "-s") == 0) { - int value; - if (crypt_get_constant(argv[2], &value) != 0) exit(EXIT_FAILURE); - printf("%s,%u\n", argv[2], value); - } - } - - return 0; -} - diff --git a/demos/demo_dynamic.py b/demos/demo_dynamic.py deleted file mode 100644 index 50301c14..00000000 --- a/demos/demo_dynamic.py +++ /dev/null @@ -1,309 +0,0 @@ - - -""" - demo_dynamic.py v2b - - This program demonstrates Python's use of the dynamic - language support additions to LTC, namely access to LTC - constants, struct and union sizes, and the binding of a - math package to LTC. Also provided are simple code - fragments to illustrate how one might write a Python - wrapper for LTC and how an app might call the wrapper. - This or a similar model should work for Ruby and other - dynamic languages. - - This instance uses Python's ctypes and requires a single - .dylib linking together LTC and a math library. Building - a single .dylib is needed because LTC wants a fairly tight - relationship between itself and the mathlib. (ctypes can - load multiple .dylibs, but it does not support this level - of tight coupling between otherwise independent libraries.) - - My .dylib was created on OSX/macOS with the following: - sudo make -j5 -f makefile.shared \ - CFLAGS="-DUSE_TFM -DTFM_DESC -I/usr/local/include" \ - EXTRALIBS=/usr/local/lib/libtfm.a install - - For python 2.7.12 on Ubuntu Xenial the following worked for - me (without MPI support): - sudo make -f makefile.shared install PREFIX="/usr" - - Reminder: you don't need to bind in a math library unless - you are going to use LTC functions that need a - mathlib. For example, public key crypto requires - a mathlib; hashing and symmetric encryption do not. - - ------ - - This code was originally written for Python 2.7 with the - ctypes standard library. This version is modified to run - under both Python 2.7 and 3.6. - - Arguably the biggest change for Python3 has to do with - strings. Under Python2, native strings are ASCII bytes and - passing them to LTC is natural and requires no conversion. - Under Python3 all native strings are Unicode which requires - they be converted to bytes before use by LTC. - - Note the following for Python3. - - ASCII keys, IVs and other string arguments must be - 'bytes'. Define them with a 'b' prefix or convert - via the 'bytes()' function. - - "strings" returned from LTC are bytes and conversion - to Unicode might be necessary for proper printing. - If so, use .decode('utf-8'). - - The Python2 'print' statement becomes a function in - Python3 which requires parenthesis, eg. 'print()'. - - NB: Unicode is achieved under Python2 by either defining - a Unicode string with a 'u' prefix or passing ASCII - strings thru the 'unicode()' function. - - Larry Bugbee - March 2014 v1 - August 2017 v2b - -""" - - -import sys -from ctypes import * -from ctypes.util import find_library - -# switches to enable/disable selected output -SHOW_ALL_CONSTANTS = True -SHOW_ALL_SIZES = True -SHOW_SELECTED_CONSTANTS = True -SHOW_SELECTED_SIZES = True -SHOW_BUILD_OPTIONS_ALGS = True -SHOW_SHA256_EXAMPLE = True -SHOW_CHACHA_EXAMPLE = True - -print(' ') -print(' demo_dynamic.py') - -def inprint(s, indent=0): - "prints strings indented, including multline strings" - for line in s.split('\n'): - print(' '*indent + line) - -#------------------------------------------------------------------------------- -# load the .dylib - -libname = 'tomcrypt' -libpath = find_library(libname) -print(' ') -print(' path to library %s: %s' % (libname, libpath)) - -LTC = cdll.LoadLibrary(libpath) -print(' loaded: %s' % LTC) -print(' ') - - -#------------------------------------------------------------------------------- -# get list of all supported constants followed by a list of all -# supported sizes. One alternative: these lists may be parsed -# and used as needed. - -if SHOW_ALL_CONSTANTS: - print('-'*60) - print(' all supported constants and their values:') - - # get size to allocate for constants output list - str_len = c_int(0) - ret = LTC.crypt_list_all_constants(None, byref(str_len)) - print(' need to allocate %d bytes to build list \n' % str_len.value) - - # allocate that size and get (name, size) pairs, each pair - # separated by a newline char. - names_sizes = c_buffer(str_len.value) - ret = LTC.crypt_list_all_constants(names_sizes, byref(str_len)) - print(names_sizes.value.decode("utf-8")) - print(' ') - - -if SHOW_ALL_SIZES: - print('-'*60) - print(' all supported sizes:') - - # get size to allocate for sizes output list - str_len = c_int(0) - ret = LTC.crypt_list_all_sizes(None, byref(str_len)) - print(' need to allocate %d bytes to build list \n' % str_len.value) - - # allocate that size and get (name, size) pairs, each pair - # separated by a newline char. - names_sizes = c_buffer(str_len.value) - ret = LTC.crypt_list_all_sizes(names_sizes, byref(str_len)) - print(names_sizes.value.decode("utf-8")) - print(' ') - - -#------------------------------------------------------------------------------- -# get individually named constants and sizes - -if SHOW_SELECTED_CONSTANTS: - print('-'*60) - print('\n selected constants:') - - names = [ - b'ENDIAN_LITTLE', - b'ENDIAN_64BITWORD', - b'PK_PUBLIC', - b'LTC_MILLER_RABIN_REPS', - b'CTR_COUNTER_BIG_ENDIAN', - ] - for name in names: - const_value = c_int(0) - rc = LTC.crypt_get_constant(name, byref(const_value)) - value = const_value.value - print(' %-25s %d' % (name.decode("utf-8"), value)) - print(' ') - -if SHOW_SELECTED_SIZES: - print('-'*60) - print('\n selected sizes:') - - names = [ - b'rijndael_key', - b'rsa_key', - b'symmetric_CTR', - b'twofish_key', - b'ecc_point', - b'gcm_state', - b'sha512_state', - ] - for name in names: - size_value = c_int(0) - rc = LTC.crypt_get_size(name, byref(size_value)) - value = size_value.value - print(' %-25s %d' % (name.decode("utf-8"), value)) - print(' ') - - -#------------------------------------------------------------------------------- -#------------------------------------------------------------------------------- -# LibTomCrypt exposes one interesting string that can be accessed -# via Python's ctypes module, "crypt_build_settings", which -# provides a list of this build's compiler switches and supported -# algorithms. If someday LTC exposes other interesting strings, -# they can be found with: -# nm /usr/local/lib/libtomcrypt.dylib | grep " D " - -def get_named_string(lib, name): - return c_char_p.in_dll(lib, name).value.decode("utf-8") - -if SHOW_BUILD_OPTIONS_ALGS: - print('-'*60) - print('This is a string compiled into LTC showing compile') - print('options and algorithms supported by this build \n') -# print(get_named_string(LTC, 'crypt_build_settings')) - inprint(get_named_string(LTC, 'crypt_build_settings'), 4) - - -#------------------------------------------------------------------------------- -#------------------------------------------------------------------------------- -# here is an example of how Python code can be written to access -# LTC's implementation of SHA256 and ChaCha, - -# - - - - - - - - - - - - - -# definitions - -from binascii import hexlify, unhexlify - -def _err2str(err): - # define return type - errstr = LTC.error_to_string - errstr.restype = c_char_p - # get and return err string - return errstr(err) - -def _get_size(name): - size = c_int(0) - rc = LTC.crypt_get_size(bytes(name), byref(size)) - if rc != 0: - raise Exception('LTC.crypt_get_size(%s) rc = %d' % (name, rc)) - return size.value - -def _get_constant(name): - constant = c_int(0) - rc = LTC.crypt_get_constant(bytes(name), byref(constant)) - if rc != 0: - raise Exception('LTC.crypt_get_constant(%s) rc = %d' % (name, rc)) - return constant.value - -CRYPT_OK = _get_constant(b'CRYPT_OK') - -class SHA256(object): - def __init__(self): - self.state = c_buffer(_get_size(b'sha256_state')) - LTC.sha256_init(byref(self.state)) - def update(self, data): - LTC.sha256_process(byref(self.state), data, len(data)) - def digest(self): - md = c_buffer(32) - LTC.sha256_done(byref(self.state), byref(md)) - return md.raw - -# - - - - - - - - - - - - - -# a SHA256 app fragment - -if SHOW_SHA256_EXAMPLE: - print('-'*60) - data = b'hello world' # we want bytes, not Unicode - - sha256 = SHA256() - sha256.update(data) - md = sha256.digest() - - template = '\n the SHA256 digest for "%s" is %s \n' - print(template % (data, hexlify(md))) - -class ChaCha(object): - def __init__(self, key, rounds): - self.state = c_buffer(_get_size(b'chacha_state')) - self.counter = c_uint(1) - err = LTC.chacha_setup(byref(self.state), key, len(key), rounds) - if err != CRYPT_OK: - raise Exception('LTC.chacha_setup(), err = %d, "%s"' % (err, _err2str(err))) - def set_iv32(self, iv): - err = LTC.chacha_ivctr32(byref(self.state), iv, len(iv), self.counter) - if err != CRYPT_OK: - raise Exception('LTC.chacha_ivctr32(), err = %d, "%s"' % (err, _err2str(err))) - def crypt(self, datain): - dataout = c_buffer(len(datain)) - err = LTC.chacha_crypt(byref(self.state), datain, len(datain), byref(dataout)) - if err != CRYPT_OK: - raise Exception('LTC.chacha_crypt(), err = %d, "%s"' % (err, _err2str(err))) - return dataout.raw - -# - - - - - - - - - - - - - -# a ChaCha app fragment - -if SHOW_CHACHA_EXAMPLE: - print('-'*60) - key = b'hownowbrowncow\x00\x00' # exactly 16 or 32 bytes - rounds = 12 # common values: 8, 12, 20 - iv = b'123456789012' # exactly 12 bytes - plain = b'Kilroy was here, there, and everywhere!' - - cha = ChaCha(key, rounds) - cha.set_iv32(iv) - cipher = cha.crypt(plain) - - template = '\n ChaCha%d ciphertext for "%s" is "%s"' - print(template % (rounds, plain, hexlify(cipher))) - - cha.set_iv32(iv) # reset to decrypt - decrypted = cha.crypt(cipher) - - template = ' ChaCha%d decoded text for "%s" is "%s" \n' - print(template % (rounds, plain, decrypted.decode("utf-8"))) - -# Footnote: Keys should be erased fm memory as soon as possible after use, -# and that includes Python. For a tip on how to do that in Python, see -# http://buggywhip.blogspot.com/2010/12/erase-keys-and-credit-card-numbers-in.html - -#------------------------------------------------------------------------------- -#------------------------------------------------------------------------------- -#------------------------------------------------------------------------------- diff --git a/demos/der_print_flexi.c b/demos/der_print_flexi.c deleted file mode 100644 index 392e98bf..00000000 --- a/demos/der_print_flexi.c +++ /dev/null @@ -1,327 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/* DER flexi-decode a certificate */ -#include "tomcrypt_private.h" -#include - -#define ASN1_FMTSTRING_FMT "line: %d, type=%d, size=%lu, data=%p, self=%p, next=%p, prev=%p, parent=%p, child=%p" -#define ASN1_FMTSTRING_VAL(l) __LINE__, (l)->type, (l)->size, (l)->data, (l), (l)->next, (l)->prev, (l)->parent, (l)->child - -static void* s_xmalloc(int l) -{ - void *r = XCALLOC(1, l); - -#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 3 - fprintf(stderr, "ALLOC %9d to %p\n", l, r); -#endif - if (!r) { - fprintf(stderr, "Could not allocate %d bytes of memory\n", l); - exit(EXIT_FAILURE); - } - return r; -} - -#ifndef S_FREE -static void s_free(void *p) -{ -#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 3 - fprintf(stderr, "FREE %p\n", p); -#endif - XFREE(p); -} -#endif - -static void s_der_print_flexi_i(const ltc_asn1_list* l, unsigned int level) -{ - char *buf = NULL; - const char *name = NULL; - const char *text = NULL; - ltc_asn1_list *ostring = NULL; - unsigned int n; - int slen; - const wchar_t *wtmp; - - switch (l->type) - { - case LTC_ASN1_EOL: - name = "EOL"; - slen = snprintf(NULL, 0, ASN1_FMTSTRING_FMT "\n", ASN1_FMTSTRING_VAL(l)); - buf = s_xmalloc(slen); - snprintf(buf, slen, ASN1_FMTSTRING_FMT "\n", ASN1_FMTSTRING_VAL(l)); - text = buf; - break; - case LTC_ASN1_BOOLEAN: - name = "BOOLEAN"; - { - if (*(int*) l->data) - text = "true"; - else - text = "false"; - } - break; - case LTC_ASN1_INTEGER: - name = "INTEGER"; - buf = s_xmalloc(((ltc_mp_get_digit_count(l->data) + 1) * ltc_mp.bits_per_digit) / 3); - ltc_mp_toradix(l->data, buf, 10); - text = buf; - break; - case LTC_ASN1_SHORT_INTEGER: - name = "SHORT INTEGER"; - break; - case LTC_ASN1_BIT_STRING: - name = "BIT STRING"; - if (l->size <= 16) { - int r; - int sz = l->size + 1; - char *s = buf = s_xmalloc(sz); - for (n = 0; n < l->size; ++n) { - r = snprintf(s, sz, "%c", ((unsigned char*) l->data)[n] ? '1' : '0'); - if (r < 0 || r >= sz) { - fprintf(stderr, "%s boom\n", name); - exit(EXIT_FAILURE); - } - s += r; - sz -= r; - } - } else { - slen = snprintf(NULL, 0, "Length %lu", l->size); - buf = s_xmalloc(slen); - snprintf(buf, slen, "Length %lu", l->size); - } - text = buf; - break; - case LTC_ASN1_OCTET_STRING: - name = "OCTET STRING"; - { - unsigned long ostring_l = l->size; - /* sometimes there's another sequence in an octet string... - * try to decode that... if it fails print out the octet string - */ - if (der_decode_sequence_flexi(l->data, &ostring_l, &ostring) == CRYPT_OK) { - text = ""; - } else { - int r; - int sz = l->size * 2 + 1; - char *s = buf = s_xmalloc(sz); - for (n = 0; n < l->size; ++n) { - r = snprintf(s, sz, "%02X", ((unsigned char*) l->data)[n]); - if (r < 0 || r >= sz) { - fprintf(stderr, "%s boom\n", name); - exit(EXIT_FAILURE); - } - s += r; - sz -= r; - } - text = buf; - } - } - break; - case LTC_ASN1_NULL: - name = "NULL"; - text = ""; - break; - case LTC_ASN1_OBJECT_IDENTIFIER: - name = "OBJECT IDENTIFIER"; - { - unsigned long len = 0; - if (pk_oid_num_to_str(l->data, l->size, buf, &len) != CRYPT_BUFFER_OVERFLOW) { - fprintf(stderr, "%s WTF\n", name); - exit(EXIT_FAILURE); - } - buf = s_xmalloc(len); - if (pk_oid_num_to_str(l->data, l->size, buf, &len) != CRYPT_OK) { - fprintf(stderr, "%s boom\n", name); - exit(EXIT_FAILURE); - } - text = buf; - } - break; - case LTC_ASN1_IA5_STRING: - name = "IA5 STRING"; - text = l->data; - break; - case LTC_ASN1_PRINTABLE_STRING: - name = "PRINTABLE STRING"; - text = l->data; - break; - case LTC_ASN1_UTF8_STRING: - name = "UTF8 STRING"; - wtmp = l->data; - slen = wcsrtombs(NULL, &wtmp, 0, NULL); - if (slen != -1) { - slen++; - buf = s_xmalloc(slen); - if (wcsrtombs(buf, &wtmp, slen, NULL) == (size_t)-1) { - fprintf(stderr, "%s boom\n", name); - exit(EXIT_FAILURE); - } - text = buf; - } - break; - case LTC_ASN1_UTCTIME: - name = "UTCTIME"; - { - ltc_utctime *ut = l->data; - slen = 32; - buf = s_xmalloc(slen); - snprintf(buf, slen, "%02d-%02d-%02d %02d:%02d:%02d %c%02d:%02d", ut->YY, ut->MM, ut->DD, ut->hh, ut->mm, - ut->ss, ut->off_dir ? '-' : '+', ut->off_hh, ut->off_mm); - text = buf; - } - break; - case LTC_ASN1_GENERALIZEDTIME: - name = "GENERALIZED TIME"; - { - ltc_generalizedtime *gt = l->data; - slen = 32; - buf = s_xmalloc(slen); - if (gt->fs) - snprintf(buf, slen, "%04d-%02d-%02d %02d:%02d:%02d.%02dZ", gt->YYYY, gt->MM, gt->DD, gt->hh, gt->mm, - gt->ss, gt->fs); - else - snprintf(buf, slen, "%04d-%02d-%02d %02d:%02d:%02dZ", gt->YYYY, gt->MM, gt->DD, gt->hh, gt->mm, gt->ss); - text = buf; - } - break; - case LTC_ASN1_CHOICE: - name = "CHOICE"; - break; - case LTC_ASN1_SEQUENCE: - name = "SEQUENCE"; - text = ""; - break; - case LTC_ASN1_SET: - name = "SET"; - text = ""; - break; - case LTC_ASN1_SETOF: - name = "SETOF"; - text = ""; - break; - case LTC_ASN1_RAW_BIT_STRING: - name = "RAW BIT STRING"; - break; - case LTC_ASN1_TELETEX_STRING: - name = "TELETEX STRING"; - text = l->data; - break; - case LTC_ASN1_CUSTOM_TYPE: - name = "NON STANDARD"; - { - int r; - int sz = 128; - char *s = buf = s_xmalloc(sz); - - r = snprintf(s, sz, "[%s %s %llu]", der_asn1_class_to_string_map[l->klass], - der_asn1_pc_to_string_map[l->pc], l->tag); - if (r < 0 || r >= sz) { - fprintf(stderr, "%s boom\n", name); - exit(EXIT_FAILURE); - } - - text = buf; - } - break; - } - - for (n = 0; n < level; ++n) { - fprintf(stderr, " "); - } - if (name) { - if (text) - fprintf(stderr, "%s %s\n", name, text); - else - fprintf(stderr, "%s \n", name); - } else - fprintf(stderr, "WTF type=%i\n", l->type); - - if (buf) { - s_free(buf); - buf = NULL; - } - - if (ostring) { - s_der_print_flexi_i(ostring, level + 1); - der_free_sequence_flexi(ostring); - } - - if (l->child) s_der_print_flexi_i(l->child, level + 1); - - if (l->next) s_der_print_flexi_i(l->next, level); -} - -#ifndef LTC_DER_PRINT_FLEXI_NO_MAIN - -static void s_der_print_flexi(const ltc_asn1_list* l) -{ - fprintf(stderr, "\n\n"); - s_der_print_flexi_i(l, 0); - fprintf(stderr, "\n\n"); -} - -#include -#include -#include -#include -#include -#include - -static int fd; -static ltc_asn1_list *l; - -static void print_err(const char *fmt, ...) -{ - va_list args; - - va_start(args, fmt); - vfprintf(stderr, fmt, args); - va_end(args); -} - -static void die_(int err, int line) -{ - print_err("%3d: LTC sez %s\n", line, error_to_string(err)); - der_free_sequence_flexi(l); - close(fd); - exit(EXIT_FAILURE); -} - -#define die(i) do { die_(i, __LINE__); } while(0) -#define DIE(s, ...) do { print_err("%3d: " s "\n", __LINE__, ##__VA_ARGS__); exit(EXIT_FAILURE); } while(0) - -int main(int argc, char **argv) -{ - void *addr; - int err, argn = 1; - struct stat sb; - unsigned long len; - - if ((err = register_all_hashes()) != CRYPT_OK) { - die(err); - } - if ((err = crypt_mp_init("ltm")) != CRYPT_OK) { - die(err); - } - if (argc > argn) fd = open(argv[argn], O_RDONLY); - else fd = STDIN_FILENO; - if (fd == -1) DIE("open sez no"); - if (fstat(fd, &sb) == -1) DIE("fstat"); - - addr = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0); - if (addr == MAP_FAILED) DIE("mmap"); - - len = sb.st_size; - - if ((err = der_decode_sequence_flexi(addr, &len, &l)) != CRYPT_OK) { - die(err); - } - - s_der_print_flexi(l); - - der_free_sequence_flexi(l); - close(fd); - - return 0; -} - -#endif /* LTC_DER_PRINT_FLEXI_NO_MAIN */ diff --git a/demos/crypt.c b/demos/encrypt.c similarity index 56% rename from demos/crypt.c rename to demos/encrypt.c index 598d35f1..5320c215 100644 --- a/demos/crypt.c +++ b/demos/encrypt.c @@ -1,6 +1,3 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - /* encrypt V1.1 Fri Oct 18 04:28:03 NZDT 2002 */ /* File de/encryption, using libtomcrypt */ /* Written by Daniel Richards */ @@ -10,34 +7,86 @@ /* ie: ./encrypt blowfish story.txt story.ct */ /* ./encrypt -d blowfish story.ct story.pt */ -#include +#include -static int LTC_NORETURN die(int status) +int errno; + +int usage(char *name) { - int x, w, tot = 0; - FILE* o = status == EXIT_SUCCESS ? stdout : stderr; - fprintf(o, - "Usage encrypt: crypt \n" - "Usage decrypt: crypt -d \n" - "Usage test: crypt -t \n" - "This help: crypt -h\n\nCiphers:\n\t"); + int x; + + printf("Usage: %s [-d](ecrypt) cipher infile outfile\nCiphers:\n", name); for (x = 0; cipher_descriptor[x].name != NULL; x++) { - w = fprintf(o, "%-14s",cipher_descriptor[x].name); - if (w < 0) { - status = EXIT_FAILURE; - break; - } - tot += w; - if (tot >= 70) { - fprintf(o, "\n\t"); - tot = 0; - } + printf("%s\n",cipher_descriptor[x].name); } - if (tot != 0) fprintf(o, "\n"); - exit(status); + exit(1); } -int main(int argc, char *argv[]) +void register_algs(void) +{ + int x; + +#ifdef RIJNDAEL + register_cipher (&aes_desc); +#endif +#ifdef BLOWFISH + register_cipher (&blowfish_desc); +#endif +#ifdef XTEA + register_cipher (&xtea_desc); +#endif +#ifdef RC5 + register_cipher (&rc5_desc); +#endif +#ifdef RC6 + register_cipher (&rc6_desc); +#endif +#ifdef SAFERP + register_cipher (&saferp_desc); +#endif +#ifdef TWOFISH + register_cipher (&twofish_desc); +#endif +#ifdef SAFER + register_cipher (&safer_k64_desc); + register_cipher (&safer_sk64_desc); + register_cipher (&safer_k128_desc); + register_cipher (&safer_sk128_desc); +#endif +#ifdef RC2 + register_cipher (&rc2_desc); +#endif +#ifdef DES + register_cipher (&des_desc); + register_cipher (&des3_desc); +#endif +#ifdef CAST5 + register_cipher (&cast5_desc); +#endif +#ifdef NOEKEON + register_cipher (&noekeon_desc); +#endif +#ifdef SKIPJACK + register_cipher (&skipjack_desc); +#endif + + if (register_hash(&sha256_desc) == -1) { + printf("Error registering SHA256\n"); + exit(-1); + } + + if (register_prng(&yarrow_desc) == -1) { + printf("Error registering yarrow PRNG\n"); + exit(-1); + } + + if (register_prng(&sprng_desc) == -1) { + printf("Error registering sprng PRNG\n"); + exit(-1); + } +} + +int main(int argc, char *argv[]) { unsigned char plaintext[512],ciphertext[512]; unsigned char tmpkey[512], key[MAXBLOCKSIZE], IV[MAXBLOCKSIZE]; @@ -48,36 +97,12 @@ int main(int argc, char *argv[]) char *infile, *outfile, *cipher; prng_state prng; FILE *fdin, *fdout; - int err; /* register algs, so they can be printed */ - register_all_ciphers(); - register_all_hashes(); - register_all_prngs(); + register_algs(); if (argc < 4) { - if ((argc > 2) && (!strcmp(argv[1], "-t"))) { - cipher = argv[2]; - cipher_idx = find_cipher(cipher); - if (cipher_idx == -1) { - fprintf(stderr, "Invalid cipher %s entered on command line.\n", cipher); - die(EXIT_FAILURE); - } /* if */ - if (cipher_descriptor[cipher_idx].test) { - if (cipher_descriptor[cipher_idx].test() != CRYPT_OK) { - fprintf(stderr, "Error when testing cipher %s.\n", cipher); - die(EXIT_FAILURE); - } - else { - printf("Testing cipher %s succeeded.\n", cipher); - exit(EXIT_SUCCESS); - } - } else { - fprintf(stderr, "Cipher %s has no tests.\n", cipher); - exit(EXIT_SUCCESS); - } - } - return die(argc > 1 && strstr(argv[1], "-h") != NULL ? EXIT_SUCCESS : EXIT_FAILURE); + return usage(argv[0]); } if (!strcmp(argv[1], "-d")) { @@ -90,7 +115,7 @@ int main(int argc, char *argv[]) cipher = argv[1]; infile = argv[2]; outfile = argv[3]; - } + } /* file handles setup */ fdin = fopen(infile,"rb"); @@ -100,11 +125,11 @@ int main(int argc, char *argv[]) } fdout = fopen(outfile,"wb"); - if (fdout == NULL) { + if (fdout == NULL) { perror("Can't open output for writing"); exit(-1); } - + cipher_idx = find_cipher(cipher); if (cipher_idx == -1) { printf("Invalid cipher entered on command line.\n"); @@ -113,35 +138,34 @@ int main(int argc, char *argv[]) hash_idx = find_hash("sha256"); if (hash_idx == -1) { - printf("LTC_SHA256 not found...?\n"); + printf("SHA256 not found...?\n"); exit(-1); } ivsize = cipher_descriptor[cipher_idx].block_length; ks = hash_descriptor[hash_idx].hashsize; - if (cipher_descriptor[cipher_idx].keysize(&ks) != CRYPT_OK) { + if (cipher_descriptor[cipher_idx].keysize(&ks) != CRYPT_OK) { printf("Invalid keysize???\n"); exit(-1); } printf("\nEnter key: "); - if(fgets((char *)tmpkey,sizeof(tmpkey), stdin) == NULL) - exit(-1); + fgets((char *)tmpkey,sizeof(tmpkey), stdin); outlen = sizeof(key); - if ((err = hash_memory(hash_idx,tmpkey,XSTRLEN((char *)tmpkey),key,&outlen)) != CRYPT_OK) { - printf("Error hashing key: %s\n", error_to_string(err)); + if ((errno = hash_memory(hash_idx,tmpkey,strlen((char *)tmpkey),key,&outlen)) != CRYPT_OK) { + printf("Error hashing key: %s\n", error_to_string(errno)); exit(-1); } - + if (decrypt) { /* Need to read in IV */ if (fread(IV,1,ivsize,fdin) != ivsize) { printf("Error reading IV from input.\n"); exit(-1); } - - if ((err = ctr_start(cipher_idx,IV,key,ks,0,CTR_COUNTER_LITTLE_ENDIAN,&ctr)) != CRYPT_OK) { - printf("ctr_start error: %s\n",error_to_string(err)); + + if ((errno = ctr_start(cipher_idx,IV,key,ks,0,&ctr)) != CRYPT_OK) { + printf("ctr_start error: %s\n",error_to_string(errno)); exit(-1); } @@ -149,8 +173,8 @@ int main(int argc, char *argv[]) do { y = fread(inbuf,1,sizeof(inbuf),fdin); - if ((err = ctr_decrypt(inbuf,plaintext,y,&ctr)) != CRYPT_OK) { - printf("ctr_decrypt error: %s\n", error_to_string(err)); + if ((errno = ctr_decrypt(inbuf,plaintext,y,&ctr)) != CRYPT_OK) { + printf("ctr_decrypt error: %s\n", error_to_string(errno)); exit(-1); } @@ -164,10 +188,10 @@ int main(int argc, char *argv[]) } else { /* encrypt */ /* Setup yarrow for random bytes for IV */ - - if ((err = rng_make_prng(128, find_prng("yarrow"), &prng, NULL)) != CRYPT_OK) { - printf("Error setting up PRNG, %s\n", error_to_string(err)); - } + + if ((errno = rng_make_prng(128, find_prng("yarrow"), &prng, NULL)) != CRYPT_OK) { + printf("Error setting up PRNG, %s\n", error_to_string(errno)); + } /* You can use rng_get_bytes on platforms that support it */ /* x = rng_get_bytes(IV,ivsize,NULL);*/ @@ -176,22 +200,22 @@ int main(int argc, char *argv[]) printf("Error reading PRNG for IV required.\n"); exit(-1); } - + if (fwrite(IV,1,ivsize,fdout) != ivsize) { printf("Error writing IV to output.\n"); exit(-1); } - if ((err = ctr_start(cipher_idx,IV,key,ks,0,CTR_COUNTER_LITTLE_ENDIAN,&ctr)) != CRYPT_OK) { - printf("ctr_start error: %s\n",error_to_string(err)); + if ((errno = ctr_start(cipher_idx,IV,key,ks,0,&ctr)) != CRYPT_OK) { + printf("ctr_start error: %s\n",error_to_string(errno)); exit(-1); } do { y = fread(inbuf,1,sizeof(inbuf),fdin); - if ((err = ctr_encrypt(inbuf,ciphertext,y,&ctr)) != CRYPT_OK) { - printf("ctr_encrypt error: %s\n", error_to_string(err)); + if ((errno = ctr_encrypt(inbuf,ciphertext,y,&ctr)) != CRYPT_OK) { + printf("ctr_encrypt error: %s\n", error_to_string(errno)); exit(-1); } @@ -199,7 +223,7 @@ int main(int argc, char *argv[]) printf("Error writing to output.\n"); exit(-1); } - } while (y == sizeof(inbuf)); + } while (y == sizeof(inbuf)); fclose(fdout); fclose(fdin); } diff --git a/demos/gcm-file/gcm_file.c b/demos/gcm-file/gcm_file.c deleted file mode 100644 index 4e81a05f..00000000 --- a/demos/gcm-file/gcm_file.c +++ /dev/null @@ -1,84 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt.h" - -/** - @file gcm_file.c - GCM process a file, Steffen Jaeckel -*/ - -#ifdef LTC_GCM_MODE -#ifndef LTC_NO_FILE - -/** - Process a file. - - c.f. gcm_filehandle() for basic documentation. - - It is possible, that in error-cases the 'out' file - will be created and after the error occurred it will - be removed again. - - @param cipher Index of cipher to use - @param key The secret key - @param keylen The length of the secret key - @param IV The initial vector - @param IVlen The length of the initial vector - @param adata The additional authentication data (header) - @param adatalen The length of the adata - @param in The input file - @param out The output file - @param taglen The MAC tag length - @param direction Encrypt or Decrypt mode (GCM_ENCRYPT or GCM_DECRYPT) - @param res [out] Result of the operation, 1==valid, 0==invalid - @return CRYPT_OK on success - */ -static int gcm_file(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *IV, unsigned long IVlen, - const unsigned char *adata, unsigned long adatalen, - const char *in, - const char *out, - unsigned long taglen, - int direction, - int *res) -{ - int err; - FILE *f_in = NULL, *f_out = NULL; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(res != NULL); - - *res = 0; - - f_in = fopen(in, "rb"); - if (f_in == NULL) { - err = CRYPT_FILE_NOTFOUND; - goto LBL_ERR; - } - f_out = fopen(out, "w+b"); - if (f_out == NULL) { - err = CRYPT_FILE_NOTFOUND; - goto LBL_ERR; - } - - err = gcm_filehandle(cipher, key, keylen, IV, IVlen, adata, adatalen, f_in, f_out, taglen, direction, res); - -LBL_ERR: - if (f_out != NULL && fclose(f_out) != 0) { - err = CRYPT_ERROR; - } - if (*res != 1) { - remove(out); - } - if (f_in != NULL && fclose(f_in) != 0) { - err = CRYPT_ERROR; - } - - return err; -} -#endif -#endif - diff --git a/demos/gcm-file/gcm_filehandle.c b/demos/gcm-file/gcm_filehandle.c deleted file mode 100644 index 7e5731f9..00000000 --- a/demos/gcm-file/gcm_filehandle.c +++ /dev/null @@ -1,194 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt.h" - -/** - @file gcm_filehandle.c - GCM process a filehandle, Steffen Jaeckel -*/ - -#ifdef LTC_GCM_MODE -#ifndef LTC_NO_FILE - -#if defined(_MSC_VER) -#define ftruncate _chsize -#else -#include -#endif - -/** - Process a filehandle. - - This uses the widely established scheme where the tag is appended - to the ciphertext. - - encrypted_file = aesgcm(plain_file) | aesgcm_tag(plain_file) - - Depending on 'direction' this function does: - - Encrypt file 'in' to 'out' and append the tag of length 'taglen' - to 'out'. - - or - - Decrypt file 'in' to 'out' and check the tag of length 'taglen' - and strip the tag from 'in'. - - In error-cases 'out' will be zeroed out first and then truncated to - a length of 0. - - @param cipher Index of cipher to use - @param key The secret key - @param keylen The length of the secret key - @param IV The initial vector - @param IVlen The length of the initial vector - @param adata The additional authentication data (header) - @param adatalen The length of the adata - @param in The input file - @param out The output file - @param taglen The MAC tag length - @param direction Encrypt or Decrypt mode (GCM_ENCRYPT or GCM_DECRYPT) - @param res [out] Result of the operation, 1==valid, 0==invalid - @return CRYPT_OK on success - */ -static int gcm_filehandle(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *IV, unsigned long IVlen, - const unsigned char *adata, unsigned long adatalen, - FILE *in, - FILE *out, - unsigned long taglen, - int direction, - int *res) -{ - void *orig; - gcm_state *gcm; - int err; - unsigned char *buf, tag[16]; - size_t x, tot_data; - unsigned long tag_len; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(res != NULL); - - *res = 0; - - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - -#ifndef LTC_GCM_TABLES_SSE2 - orig = gcm = XMALLOC(sizeof(*gcm)); -#else - orig = gcm = XMALLOC(sizeof(*gcm) + 16); -#endif - if (gcm == NULL) { - return CRYPT_MEM; - } - - if ((buf = XMALLOC(LTC_FILE_READ_BUFSIZE)) == NULL) { - XFREE(gcm); - return CRYPT_MEM; - } - - /* Force GCM to be on a multiple of 16 so we can use 128-bit aligned operations - * note that we only modify gcm and keep orig intact. This code is not portable - * but again it's only for SSE2 anyways, so who cares? - */ -#ifdef LTC_GCM_TABLES_SSE2 - gcm = LTC_ALIGN_BUF(gcm, 16); -#endif - - if ((err = gcm_init(gcm, cipher, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = gcm_add_iv(gcm, IV, IVlen)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = gcm_add_aad(gcm, adata, adatalen)) != CRYPT_OK) { - goto LBL_ERR; - } - - fseek(in, 0, SEEK_END); - tot_data = ftell(in); - if (direction == GCM_DECRYPT) { - tot_data -= taglen; - } - fseek(in, 0, SEEK_SET); - do { - x = MIN(tot_data, LTC_FILE_READ_BUFSIZE); - x = fread(buf, 1, x, in); - tot_data -= x; - if ((err = gcm_process(gcm, buf, (unsigned long)x, buf, direction)) != CRYPT_OK) { - goto LBL_CLEANBUF; - } - if(fwrite(buf, 1, x, out) != x) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; - } - } while (x == LTC_FILE_READ_BUFSIZE); - - tag_len = taglen; - if ((err = gcm_done(gcm, tag, &tag_len)) != CRYPT_OK) { - goto LBL_CLEANBUF; - } - if (tag_len != taglen) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; - } - - if (direction == GCM_DECRYPT) { - if (feof(in) || ferror(in)) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; - } - x = fread(buf, 1, taglen, in); - if (x != taglen) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; - } - - if (XMEM_NEQ(buf, tag, taglen) == 0) { - *res = 1; - } - } else { - if(fwrite(tag, 1, taglen, out) != taglen) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; - } - *res = 1; - } - -LBL_CLEANBUF: - zeromem(buf, LTC_FILE_READ_BUFSIZE); - zeromem(tag, sizeof(tag)); -LBL_ERR: -#ifdef LTC_CLEAN_STACK -#ifndef LTC_GCM_TABLES_SSE2 - zeromem(orig, sizeof(*gcm)); -#else - zeromem(orig, sizeof(*gcm) + 16); -#endif -#endif - if(*res == 0) { - x = ftell(out); - fseek(in, 0, SEEK_SET); - while((size_t)ftell(out) < x) { - fwrite(buf, 1, LTC_FILE_READ_BUFSIZE, out); - } - if(ftruncate(fileno(out), 0)) { - /* well, what shall we do here... */ - } - } - fflush(out); - - XFREE(buf); - XFREE(orig); - - return err; -} -#endif -#endif - diff --git a/demos/hashsum.c b/demos/hashsum.c index 15dc4db8..e0269b33 100644 --- a/demos/hashsum.c +++ b/demos/hashsum.c @@ -1,6 +1,3 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - /* * Written by Daniel Richards 6/7/2002 * hash.c: This app uses libtomcrypt to hash either stdin or a file @@ -10,288 +7,100 @@ * more functions ;) */ -#define _POSIX_C_SOURCE 200809L /* otherwise PATH_MAX + strdup are not defined for build with -std=c99 */ -#include +#include -#include -#define basename(path) ( strrchr((path), '/') ? strrchr((path), '/') + 1 : strrchr((path), '\\') ? strrchr((path), '\\') + 1 : (path) ) +int errno; -#if !defined(PATH_MAX) && defined(_MSC_VER) -#include -#define PATH_MAX MAX_PATH -#endif - -/* thanks http://stackoverflow.com/a/8198009 */ -#define s_base(x) ((x >= '0' && x <= '9') ? '0' : \ - (x >= 'a' && x <= 'f') ? 'a' - 10 : \ - (x >= 'A' && x <= 'F') ? 'A' - 10 : \ - '\255') -#define HEXOF(x) (x - s_base(x)) - -#ifndef LTC_ARRAY_SIZE -#define LTC_ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) -#endif - -static char* hashsum; - -static void cleanup(void) -{ - free(hashsum); -} - -static void die(int status) -{ - unsigned long w, x; - FILE* o = status == EXIT_SUCCESS ? stdout : stderr; - fprintf(o, - "Usage: %s [-a ...] [-c|-h] [...]\n\n" - "\t-c\tCheck the hash(es) of the file(s) written in .\n" - "\t\tNote: -a is not required when checking the hash(es).\n" - "\t-h\tThis help\n\n" - "Examples:\n" - "\t%s -a sha1 file > file.sha1sum\n" - "\t%s -c file.sha1sum\n" - "\t%s -a sha1 -a sha256 -a sha512-256 file > file.hashsum\n" - "\t%s -c file.hashsum\n\n" - "Algorithms:\n\t", hashsum, hashsum, hashsum, hashsum, hashsum); - w = 0; - for (x = 0; hash_descriptor[x].name != NULL; x++) { - w += fprintf(o, "%-14s", hash_descriptor[x].name); - if (w >= 70) { - fprintf(o, "\n\t"); - w = 0; - } - } - if (w != 0) fprintf(o, "\n"); - exit(status); -} - -static void printf_hex(unsigned char* hash_buffer, unsigned long w) -{ - unsigned long x; - for (x = 0; x < w; x++) { - printf("%02x",hash_buffer[x]); - } -} - -static void check_file(int argn, int argc, char **argv) -{ - int err, failed = 0, invalid = 0; - unsigned char is_buffer[MAXBLOCKSIZE], should_buffer[MAXBLOCKSIZE]; - char buf[PATH_MAX + (MAXBLOCKSIZE * 3)]; - /* iterate through all files */ - while(argn < argc) { - char* s; - FILE* f = fopen(argv[argn], "rb"); - if(f == NULL) { - int n = snprintf(buf, sizeof(buf), "%s: %s", hashsum, argv[argn]); - if (n > 0 && n < (int)sizeof(buf)) - perror(buf); - else - perror(argv[argn]); - exit(EXIT_FAILURE); - } - /* read the file line by line */ - while((s = fgets(buf, sizeof(buf), f)) != NULL) - { - int tries, n; - unsigned long hash_len, w, x; - char* space = strstr(s, " "); - - /* skip lines with comments */ - if (buf[0] == '#') continue; - - if (space == NULL) { - fprintf(stderr, "%s: no properly formatted checksum lines found\n", hashsum); - goto ERR; - } - - hash_len = space - s; - hash_len /= 2; - - if (hash_len > sizeof(should_buffer)) { - fprintf(stderr, "%s: hash too long\n", hashsum); - goto ERR; - } - - /* convert the hex-string back to binary */ - for (x = 0; x < hash_len; ++x) { - should_buffer[x] = HEXOF(s[x*2]) << 4 | HEXOF(s[x*2 + 1]); - } - - space++; - if (*space != '*') { - fprintf(stderr, "%s: unsupported input mode '%c'\n", hashsum, *space); - goto ERR; - } - space++; - - for (n = 0; n < (buf + sizeof(buf)) - space; ++n) { - if(iscntrl((int)space[n])) { - space[n] = '\0'; - break; - } - } - - /* try all hash algorithms that have the appropriate hash size */ - tries = 0; - for (x = 0; hash_descriptor[x].name != NULL; ++x) { - if (hash_descriptor[x].hashsize == hash_len) { - tries++; - w = sizeof(is_buffer); - if ((err = hash_file(x, space, is_buffer, &w)) != CRYPT_OK) { - fprintf(stderr, "%s: File hash error: %s: %s\n", hashsum, space, error_to_string(err)); -ERR: - fclose(f); - exit(EXIT_FAILURE); - } - if(XMEMCMP(should_buffer, is_buffer, w) == 0) { - printf("%s: OK\n", space); - break; - } - } - } /* for */ - if (hash_descriptor[x].name == NULL) { - if(tries > 0) { - printf("%s: FAILED\n", space); - failed++; - } - else { - invalid++; - } - } - } /* while */ - fclose(f); - if(invalid) { - fprintf(stderr, "%s: WARNING: %d %s is improperly formatted\n", hashsum, invalid, invalid > 1?"lines":"line"); - } - if(failed) { - fprintf(stderr, "%s: WARNING: %d computed %s did NOT match\n", hashsum, failed, failed > 1?"checksums":"checksum"); - } - argn++; - } - exit(failed == 0 && invalid == 0 ? EXIT_SUCCESS : EXIT_FAILURE); -} +void register_algs(); int main(int argc, char **argv) { - int idxs[TAB_SIZE], idx, check, y, z, err, argn; - unsigned long w, x; + int idx, x, z; + unsigned long w; unsigned char hash_buffer[MAXBLOCKSIZE]; - - hashsum = strdup(basename(argv[0])); - atexit(cleanup); + hash_state md; /* You need to register algorithms before using them */ - register_all_ciphers(); - register_all_hashes(); - if (argc > 1 && strstr(argv[1], "-h")) { - die(EXIT_SUCCESS); - } - if (argc < 3) { - die(EXIT_FAILURE); - } - - for (x = 0; x < LTC_ARRAY_SIZE(idxs); ++x) { - idxs[x] = -2; - } - argn = 1; - check = 0; - idx = 0; - - while(argn < argc){ - if(strcmp("-a", argv[argn]) == 0) { - argn++; - if(argn < argc) { - idxs[idx] = find_hash(argv[argn]); - if (idxs[idx] == -1) { - struct { - const char* is; - const char* should; - } shasum_compat[] = - { -#ifdef LTC_SHA1 - { "1", sha1_desc.name }, -#endif -#ifdef LTC_SHA224 - { "224", sha224_desc.name }, -#endif -#ifdef LTC_SHA256 - { "256", sha256_desc.name }, -#endif -#ifdef LTC_SHA384 - { "384", sha384_desc.name }, -#endif -#ifdef LTC_SHA512 - { "512", sha512_desc.name }, -#endif -#ifdef LTC_SHA512_224 - { "512224", sha512_224_desc.name }, -#endif -#ifdef LTC_SHA512_256 - { "512256", sha512_256_desc.name }, -#endif - { NULL, NULL } - }; - for (x = 0; shasum_compat[x].is != NULL; ++x) { - if(XSTRCMP(shasum_compat[x].is, argv[argn]) == 0) { - idxs[idx] = find_hash(shasum_compat[x].should); - break; - } - } - } - if (idxs[idx] == -1) { - fprintf(stderr, "%s: Unrecognized algorithm\n", hashsum); - die(EXIT_FAILURE); - } - idx++; - if ((size_t)idx >= LTC_ARRAY_SIZE(idxs)) { - fprintf(stderr, "%s: Too many '-a' options chosen\n", hashsum); - die(EXIT_FAILURE); - } - argn++; - continue; - } - else { - die(EXIT_FAILURE); - } + register_algs(); + if (argc < 2) { + printf("usage: ./hash algorithm file [file ...]\n"); + printf("Algorithms:\n"); + for (x = 0; hash_descriptor[x].name != NULL; x++) { + printf(" %s\n", hash_descriptor[x].name); } - if(strcmp("-c", argv[argn]) == 0) { - check = 1; - argn++; - continue; - } - break; + exit(EXIT_SUCCESS); } - if (check == 1) { - check_file(argn, argc, argv); + idx = find_hash(argv[1]); + if (idx == -1) { + fprintf(stderr, "\nInvalid hash specified on command line.\n"); + return -1; } - if (argc == argn) { - w = sizeof(hash_buffer); - if ((err = hash_filehandle(idxs[0], stdin, hash_buffer, &w)) != CRYPT_OK) { - fprintf(stderr, "%s: File hash error: %s\n", hashsum, error_to_string(err)); - return EXIT_FAILURE; - } else { - for (x = 0; x < w; x++) { - printf("%02x",hash_buffer[x]); - } - printf(" *-\n"); + if (argc == 2) { + hash_descriptor[idx].init(&md); + do { + x = fread(hash_buffer, 1, sizeof(hash_buffer), stdin); + hash_descriptor[idx].process(&md, hash_buffer, x); + } while (x == sizeof(hash_buffer)); + hash_descriptor[idx].done(&md, hash_buffer); + for (x = 0; x < (int)hash_descriptor[idx].hashsize; x++) { + printf("%02x",hash_buffer[x]); } + printf(" (stdin)\n"); } else { - for (z = argn; z < argc; z++) { - for (y = 0; y < idx; ++y) { - w = sizeof(hash_buffer); - if ((err = hash_file(idxs[y],argv[z],hash_buffer,&w)) != CRYPT_OK) { - fprintf(stderr, "%s: File hash error: %s\n", hashsum, error_to_string(err)); - return EXIT_FAILURE; - } else { - printf_hex(hash_buffer, w); - printf(" *%s\n", argv[z]); - } + for (z = 2; z < argc; z++) { + w = sizeof(hash_buffer); + if ((errno = hash_file(idx,argv[z],hash_buffer,&w)) != CRYPT_OK) { + printf("File hash error: %s\n", error_to_string(errno)); + } else { + for (x = 0; x < (int)hash_descriptor[idx].hashsize; x++) { + printf("%02x",hash_buffer[x]); + } + printf(" %s\n", argv[z]); } } } return EXIT_SUCCESS; } + +void register_algs(void) +{ +#ifdef TIGER + register_hash (&tiger_desc); +#endif +#ifdef MD2 + register_hash (&md2_desc); +#endif +#ifdef MD4 + register_hash (&md4_desc); +#endif +#ifdef MD5 + register_hash (&md5_desc); +#endif +#ifdef SHA1 + register_hash (&sha1_desc); +#endif +#ifdef SHA224 + register_hash (&sha224_desc); +#endif +#ifdef SHA256 + register_hash (&sha256_desc); +#endif +#ifdef SHA384 + register_hash (&sha384_desc); +#endif +#ifdef SHA512 + register_hash (&sha512_desc); +#endif +#ifdef RIPEMD128 + register_hash (&rmd128_desc); +#endif +#ifdef RIPEMD160 + register_hash (&rmd160_desc); +#endif +#ifdef WHIRLPOOL + register_hash (&whirlpool_desc); +#endif + +} diff --git a/demos/latex-tables.c b/demos/latex-tables.c deleted file mode 100644 index ecb7053d..00000000 --- a/demos/latex-tables.c +++ /dev/null @@ -1,349 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/* print all PEM related infos */ -#include "tomcrypt_private.h" - -#if defined(LTC_PEM_SSH) -static const struct { - const char *is, *should; -} cipher_name_map[] = { - { "", "none" }, - { "aes", "AES" }, - { "aria", "ARIA" }, - { "blowfish", "Blowfish" }, - { "c20p1305", "ChaCha20Poly1305" }, - { "camellia", "Camellia" }, - { "cast5", "CAST5" }, - { "chacha20", "ChaCha20" }, - { "3des", "3DES (EDE)" }, - { "des", "DES" }, - { "desx", "DES-X" }, - { "idea", "IDEA" }, - { "rc5", "RC5" }, - { "rc2", "RC2" }, - { "seed", "SEED" }, - { "serpent", "Serpent" }, - { "twofish", "Twofish" }, -}; - -static const char *s_map_cipher(const char *name) -{ - unsigned long n; - for (n = 0; n < LTC_ARRAY_SIZE(cipher_name_map); ++n) { - if (strcmp(name, cipher_name_map[n].is) == 0) - return cipher_name_map[n].should; - } - fprintf(stderr, "Error: Can't map %s\n", name); - exit(1); -} - -static const struct { - enum cipher_mode mode; - const char *name; -} cipher_mode_map[] = { - { cm_none, "none", }, - { cm_cbc, "CBC", }, - { cm_cfb, "CFB", }, - { cm_cfb1, "CFB1", }, - { cm_cfb8, "CFB8", }, - { cm_ctr, "CTR", }, - { cm_ofb, "OFB", }, - { cm_stream, "STREAM", }, - { cm_gcm, "GCM", }, -}; - -static const char *s_map_mode(enum cipher_mode mode) -{ - size_t n; - mode &= cm_modes | cm_1bit | cm_8bit; - for (n = 0; n < LTC_ARRAY_SIZE(cipher_mode_map); ++n) { - if (cipher_mode_map[n].mode == mode) - return cipher_mode_map[n].name; - } - fprintf(stderr, "Error: Can't map cipher_mode %d\n", mode); - exit(1); -} - -static int print_pem_ciphers(void) -{ - unsigned long n; - printf("\nPEM ciphers:\n\n"); - for (n = 0; n < pem_dek_infos_num; ++n) { - char nbuf[32] = {0}; - size_t nlen = strlen(pem_dek_infos[n].name); - memcpy(nbuf, pem_dek_infos[n].name, nlen); - nbuf[nlen-1] = '}'; - printf("\\hline \\texttt{%-18s & %-15s & %-25ld & %-6s \\\\\n", - nbuf, s_map_cipher(pem_dek_infos[n].algo), - pem_dek_infos[n].keylen * 8, - s_map_mode(pem_dek_infos[n].mode)); - } - return 0; -} - -static int print_ssh_ciphers(void) -{ - unsigned long n; - printf("\nSSH ciphers:\n\n"); - for (n = 0; n < ssh_ciphers_num; ++n) { - char nbuf[32] = {0}; - size_t nlen = strlen(ssh_ciphers[n].name); - memcpy(nbuf, ssh_ciphers[n].name, nlen); - nbuf[nlen] = '}'; - printf("\\hline \\texttt{%-30s & %-16s & %-24ld & %-6s \\\\\n", - nbuf, s_map_cipher(ssh_ciphers[n].algo), - ssh_ciphers[n].keylen * 8, - s_map_mode(ssh_ciphers[n].mode)); - } - return 0; -} - -static int s_to_lower(const char *in, char *out, unsigned long *outlen) -{ - unsigned long n; - for (n = 0; n < *outlen && in[n]; ++n) { - out[n] = tolower(in[n]); - } - if (n == *outlen) - return CRYPT_BUFFER_OVERFLOW; - out[n] = '\0'; - *outlen = n; - return CRYPT_OK; -} - -static int print_ecc_curves(void) -{ - unsigned long n; - printf("\nECC curves:\n\n"); - for (n = 0; ltc_ecc_curves[n].OID != NULL; ++n) { - const char * const *names; - char lower[32] = {0}, buf[64] = {0}; - unsigned long m, bufl = 0, lowerl; - int err = ecc_get_curve_names(ltc_ecc_curves[n].OID, &names); - if (err != CRYPT_OK) { - printf("\\error: OID %s not found (%s)\n", ltc_ecc_curves[n].OID, error_to_string(err)); - return EXIT_FAILURE; - } - for (m = 1; names[m]; ++m) { - const char *name = names[m]; - if (memcmp(name, "P-", 2) == 0 || memcmp(name, "ECC-", 4) == 0) { - /* Use the original name */ - } else { - lowerl = sizeof(lower); - if ((err = s_to_lower(name, lower, &lowerl)) != CRYPT_OK) { - printf("\\error: %s could not be converted to lowercase (%s)\n", name, error_to_string(err)); - return EXIT_FAILURE; - } - name = lower; - } - if (m == 1) { - err = snprintf(buf + bufl, sizeof(buf) - bufl, "%s", name); - } else { - err = snprintf(buf + bufl, sizeof(buf) - bufl, ", %s", name); - } - if (err == -1 || (unsigned)err > sizeof(buf) - bufl) { - printf("\\error: snprintf returned %d at %s\n", err, name); - return EXIT_FAILURE; - } - bufl += err; - } - lower[0] = '{'; - lowerl = sizeof(lower) - 2; - if ((err = s_to_lower(names[0], &lower[1], &lowerl)) != CRYPT_OK) { - printf("\\error: %s could not be converted to lowercase (%s)\n", names[0], error_to_string(err)); - return EXIT_FAILURE; - } - lower[lowerl + 1] = '}'; - lower[lowerl + 2] = '\0'; - printf("\\hline \\texttt%-17s & %-36s & %-21s \\\\\n", lower, buf, ltc_ecc_curves[n].OID); - } - return 0; -} - -static int s_to_upper(const char *in, char *out, unsigned long *outlen) -{ - unsigned long n; - for (n = 0; n < *outlen && in[n]; ++n) { - out[n] = toupper(in[n]); - } - if (n == *outlen) - return CRYPT_BUFFER_OVERFLOW; - out[n] = '\0'; - *outlen = n; - return CRYPT_OK; -} - -static int s_to_desc(const char *in, char *out, unsigned long outlen, int has_desc) -{ - unsigned long n, m; - if (outlen < 6) goto err_exit; - XMEMCPY(out, "\\code{", 6); - m = 6; - for (n = 0; m < outlen - 1 && in[n]; ++n, ++m) { - if (in[n] == '-' || in[n] == '_') { - out[m++] = '\\'; - out[m] = '_'; - } else - out[m] = tolower(in[n]); - } - if (outlen <= m) goto err_exit; - if (!has_desc) { - XMEMCPY(&out[m], "\\_desc", 6); - m += 6; - } - out[m++] = '}'; - out[m] = '\0'; - return CRYPT_OK; -err_exit: - fprintf(stderr, "Error: Can't print descriptor %s\n", in); - exit(1); -} - -struct desc { - void *orig; - char desc[64]; -}; - -static int hash_sorter(const void *a, const void *b) -{ - const struct ltc_hash_descriptor *A, *B; - A = ((const struct desc*)a)->orig; - B = ((const struct desc*)b)->orig; - if (A->hashsize < B->hashsize) return 1; - if (A->hashsize > B->hashsize) return -1; - if (A->ID < B->ID) return -1; - if (A->ID > B->ID) return 1; - return 0; -} - -static void print_hash_line(const char *name, const struct ltc_hash_descriptor *p) -{ - char nbuf[32]; - unsigned long nlen = sizeof(nbuf); - s_to_upper(p->name, nbuf, &nlen); - printf("\\hline %-17s & %-32s & %lu & %2d \\\\\n", nbuf, name, p->hashsize, p->ID); -} - -static int print_hash_descriptors(void) -{ - const struct { - const char *name; - const struct ltc_hash_descriptor * desc; - } special_hash_descriptors[] = { -#define HASH_DESC(name) { #name, &name } - HASH_DESC(sha256_portable_desc), -#ifdef LTC_SHA256_X86 - HASH_DESC(sha256_x86_desc), -#endif - HASH_DESC(sha224_portable_desc), -#ifdef LTC_SHA224_X86 - HASH_DESC(sha224_x86_desc), -#endif - HASH_DESC(sha1_portable_desc), -#ifdef LTC_SHA1_X86 - HASH_DESC(sha1_x86_desc), -#endif - HASH_DESC(sha512_portable_desc), -#ifdef LTC_SHA512_X86 - HASH_DESC(sha512_x86_desc), -#endif - HASH_DESC(sha384_portable_desc), -#ifdef LTC_SHA384_X86 - HASH_DESC(sha384_x86_desc), -#endif - HASH_DESC(sha512_224_portable_desc), -#ifdef LTC_SHA512_224_X86 - HASH_DESC(sha512_224_x86_desc), -#endif - HASH_DESC(sha512_256_portable_desc), -#ifdef LTC_SHA512_256_X86 - HASH_DESC(sha512_256_x86_desc), -#endif - }; - struct desc descs[TAB_SIZE + 1] = {0}; - int ids[TAB_SIZE + 1] = {0}; - unsigned long n; - - printf("\nhash descriptors:\n\n"); - register_all_hashes(); - - for (n = 0; hash_descriptor[n].name != NULL && n < TAB_SIZE; ++n) { - if (hash_descriptor[n].ID > TAB_SIZE) { - printf("Hash descriptor '%s' has invalid ID %d\n", hash_descriptor[n].name, hash_descriptor[n].ID); - return EXIT_FAILURE; - } - if (ids[hash_descriptor[n].ID] != 0) { - printf("Hash descriptor '%s' has duplicate ID %d\n", hash_descriptor[n].name, hash_descriptor[n].ID); - return EXIT_FAILURE; - } - ids[hash_descriptor[n].ID] = 1; - descs[n].orig = &hash_descriptor[n]; - s_to_desc(hash_descriptor[n].name, descs[n].desc, sizeof(descs[n].desc), 0); - } - qsort(descs, n, sizeof(struct desc), &hash_sorter); - for (n = 0; hash_descriptor[n].name != NULL && n < TAB_SIZE; ++n) { - print_hash_line(descs[n].desc, descs[n].orig); - } - - printf("\nspecial hash descriptors:\n\n"); - for (n = 0; n < LTC_ARRAY_SIZE(special_hash_descriptors); ++n) { - char nbuf[64]; - unsigned long nlen = sizeof(nbuf); - s_to_desc(special_hash_descriptors[n].name, nbuf, nlen, 1); - print_hash_line(nbuf, special_hash_descriptors[n].desc); - } - return 0; -} - -static void LTC_NORETURN die(int status) -{ - FILE* o = status == EXIT_SUCCESS ? stdout : stderr; - fprintf(o, - "Usage: latex-tables [<-h|-l|type>]\n\n" - "Generate LaTeX tables from some library internal data.\n\n" - "\ttype\tThe type of table to print.\n" - "\t-l\tList all built-in types that can be printed.\n" - "\t-h\tThe help you're looking at.\n" - ); - exit(status); -} - -int main(int argc, char **argv) -{ - const struct { - const char *name; - int (*printer)(void); - } printers[] = { - #define PRINTER(name) { #name, print_ ## name } - PRINTER(hash_descriptors), - PRINTER(pem_ciphers), - PRINTER(ssh_ciphers), - PRINTER(ecc_curves), - #undef PRINTER - }; - int err; - unsigned long n; - if (argc > 1) { - if (strstr(argv[1], "-h")) - die(0); - if (strstr(argv[1], "-l")) { - for (n = 0; n < LTC_ARRAY_SIZE(printers); ++n) { - printf("%s\n", printers[n].name); - } - return 0; - } - } - printf("libtomcrypt latex tables\n"); - - for (n = 0; n < LTC_ARRAY_SIZE(printers); ++n) { - if (argc > 1 && strstr(printers[n].name, argv[1]) == NULL) - continue; - if ((err = printers[n].printer()) != 0) - return err; - } - - return 0; -} -#else -int main(void) { return EXIT_FAILURE; } -#endif diff --git a/demos/ltc b/demos/ltc deleted file mode 100755 index 1182e3ae..00000000 --- a/demos/ltc +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -RELDIR="/$0" -RELDIR="${RELDIR%/*}" -RELDIR="${RELDIR:-.}" -RELDIR="${RELDIR##/}/" - -BINDIR=`cd "$RELDIR"; pwd` - -err_out() { - err=$1 - shift - echo $* >&2 - exit $err -} - -usage() { - cat >&$(($1 + 1)) << EOF -Available commands are: -`ls -1 $BINDIR/ltc-* | sed "s@$BINDIR/ltc-@ @g"` - help -EOF - exit $1 -} - -[ $# -gt 0 ] || usage 1 - -TOOL="$1" -shift -[ "$TOOL" == "help" ] || [ "$TOOL" == "--help" ] || [ "$TOOL" == "-h" ] && usage 0 - -test -x "$BINDIR/ltc-$TOOL" || err_out 1 "Unknown command: $TOOL" - -[ $# -gt 0 ] && "$BINDIR/ltc-$TOOL" "$@" || "$BINDIR/ltc-$TOOL" diff --git a/demos/openssh-privkey.c b/demos/openssh-privkey.c deleted file mode 100644 index 9a2aca0f..00000000 --- a/demos/openssh-privkey.c +++ /dev/null @@ -1,131 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file openssh-privkey.c - OpenSSH Private Key decryption demo, Steffen Jaeckel -*/ - -#include -#include -#include - -#if defined(LTC_PEM_SSH) -static void print_err(const char *fmt, ...) -{ - va_list args; - - va_start(args, fmt); - vfprintf(stderr, fmt, args); - va_end(args); -} - -static void die_(int err, int line) -{ - print_err("%3d: LTC sez %s\n", line, error_to_string(err)); - exit(EXIT_FAILURE); -} - -#define die(i) do { die_(i, __LINE__); } while(0) -#define DIE(s, ...) do { print_err("%3d: " s "\n", __LINE__, ##__VA_ARGS__); exit(EXIT_FAILURE); } while(0) - -static char* getpassword(const char *prompt, size_t maxlen) -{ - char *wr, *end, *pass = XCALLOC(1, maxlen + 1); - struct termios tio; - tcflag_t c_lflag; - if (pass == NULL) - return NULL; - wr = pass; - end = pass + maxlen; - - tcgetattr(0, &tio); - c_lflag = tio.c_lflag; - tio.c_lflag &= ~ECHO; - tcsetattr(0, TCSANOW, &tio); - - printf("%s", prompt); - fflush(stdout); - while (pass < end) { - int c = getchar(); - if (c == '\r' || c == '\n' || c == -1) - break; - *wr++ = c; - } - tio.c_lflag = c_lflag; - tcsetattr(0, TCSAFLUSH, &tio); - printf("\n"); - return pass; -} - -static int password_get(void **p, unsigned long *l, void *u) -{ - (void)u; - *p = getpassword("Enter passphrase: ", 256); - *l = strlen(*p); - return 0; -} - -static void print(ltc_pka_key *k) -{ - int err = CRYPT_OK; - unsigned char buf[256]; - unsigned long lbuf = sizeof(buf); - char pubkey[256*4/3]; - unsigned long lpubkey = sizeof(pubkey); - void *mpint = NULL; - switch (k->id) { - case LTC_PKA_ED25519: - ltc_mp.init(&mpint); - ltc_mp.unsigned_read(mpint, k->u.ed25519.pub, sizeof(k->u.ed25519.pub)); - if ((err = ssh_encode_sequence_multi(buf, &lbuf, - LTC_SSHDATA_STRING, "ssh-ed25519", strlen("ssh-ed25519"), - LTC_SSHDATA_MPINT, mpint, - 0, NULL)) != CRYPT_OK) - goto errout; - if ((err = base64_encode(buf, lbuf, pubkey, &lpubkey)) != CRYPT_OK) - goto errout; - printf("\rssh-ed25519 %s\n", pubkey); - break; - default: - print_err("Unsupported key type: %d\n", k->id); - break; - } -errout: - if (mpint != NULL) - ltc_mp.deinit(mpint); - if (err != CRYPT_OK) - die(err); -} - -int main(int argc, char **argv) -{ - int err; - - FILE *f = NULL; - ltc_pka_key k; - password_ctx pw_ctx = { .callback = password_get }; - - if ((err = register_all_ciphers()) != CRYPT_OK) { - die(err); - } - if ((err = register_all_hashes()) != CRYPT_OK) { - die(err); - } - if ((err = crypt_mp_init("ltm")) != CRYPT_OK) { - die(err); - } - - if (argc > 1) f = fopen(argv[1], "r"); - else f = stdin; - if (f == NULL) DIE("fopen sez no"); - - if ((err = pem_decode_openssh_filehandle(f, &k, &pw_ctx))) { - die(err); - } - print(&k); - return EXIT_SUCCESS; -} -#else -int main(void) { return EXIT_FAILURE; } -#endif diff --git a/demos/openssl-enc.c b/demos/openssl-enc.c deleted file mode 100644 index 5f22fda0..00000000 --- a/demos/openssl-enc.c +++ /dev/null @@ -1,385 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* - * Demo to do the rough equivalent of: - * - * openssl enc -aes-256-cbc -pass pass:foobar -in infile -out outfile -p - * - * Compilation: - * - * $(CC) -I /path/to/headers -L .../libs \ - * -o openssl-enc \ - * openssl-enc.c -ltomcrypt - * - * Usage: - * - * ./openssl-enc infile outfile "passphrase" [salt] - * - * If provided, the salt must be EXACTLY a 16-char hex string. - * - * Demo is an example of: - * - * - (When decrypting) yanking salt out of the OpenSSL "Salted__..." header - * - OpenSSL-compatible key derivation (in OpenSSL's modified PKCS#5v1 approach) - * - Grabbing an Initialization Vector from the key generator - * - Performing simple block encryption using AES - * - * This program is free for all purposes without any express guarantee it - * works. If you really want to see a license here, assume the WTFPL :-) - * - * BJ Black, bblack@barracuda.com, https://wjblack.com - * - * BUGS: - * Passing a password on a command line is a HORRIBLE idea. Don't use - * this program for serious work! - */ - -#include -#include - -#if !defined(LTC_RIJNDAEL) || !defined(LTC_CBC_MODE) || !defined(LTC_PKCS_5) || !defined(LTC_RNG_GET_BYTES) || !defined(LTC_MD5) -int main(void) -{ - return -1; -} -#else - -/* OpenSSL by default only runs one hash round */ -#define OPENSSL_ITERATIONS 1 -/* Use aes-256-cbc, so 256 bits of key, 128 of IV */ -#define KEY_LENGTH (256>>3) -#define IV_LENGTH (128>>3) -/* PKCS#5v1 requires exactly an 8-byte salt */ -#define SALT_LENGTH 8 -/* The header OpenSSL puts on an encrypted file */ -static char salt_header[] = { 'S', 'a', 'l', 't', 'e', 'd', '_', '_' }; - -#include -#include -#include - -/* A simple way to handle the possibility that a block may increase in size - after padding. */ -union paddable { - unsigned char unpad[1024]; - unsigned char pad[1024+MAXBLOCKSIZE]; -}; - -/* - * Print usage and exit with a bad status (and perror() if any errno). - * - * Input: argv[0] and the error string - * Output: - * Side Effects: print messages and barf (does exit(3)) - */ -static void LTC_NORETURN barf(const char *pname, const char *err) -{ - FILE* o = err == NULL ? stdout : stderr; - fprintf(o, - "Usage: %s infile outfile [passphrase | -] [salt]\n" - "\n" - " The passphrase can either be given at the command line\n" - " or if it's passed as '-' it will be read interactively.\n" - "\n" - " # encrypts infile->outfile, random salt\n" - " %s enc infile outfile pass\n" - "\n" - " # encrypts infile->outfile, salt from cmdline\n" - " %s enc infile outfile pass 0123456789abcdef\n" - "\n" - " # decrypts infile->outfile, pulls salt from infile\n" - " %s dec infile outfile pass\n" - "\n" - " # decrypts infile->outfile, salt specified\n" - " # (don't try to read the salt from infile)\n" - " %s dec infile outfile pass 0123456789abcdef\n" - "\n" - "Application Error: %s\n", pname, pname, pname, pname, pname, err ? err : "None"); - if(errno) - perror( - " System Error"); - exit(err == NULL ? 0 : -1); -} - -/* - * Parse the Salted__[+8 bytes] from an OpenSSL-compatible file header. - * - * Input: file to read from and a to put the salt in (exactly 8 bytes!) - * Output: CRYPT_OK if parsed OK, CRYPT_ERROR if not - * Side Effects: infile's read pointer += 16 - */ -static int parse_openssl_header(FILE *in, unsigned char *out) -{ - unsigned char tmp[SALT_LENGTH]; - if(fread(tmp, 1, sizeof(tmp), in) != sizeof(tmp)) - return CRYPT_ERROR; - if(memcmp(tmp, salt_header, sizeof(tmp))) - return CRYPT_ERROR; - if(fread(tmp, 1, sizeof(tmp), in) != sizeof(tmp)) - return CRYPT_ERROR; - memcpy(out, tmp, sizeof(tmp)); - return CRYPT_OK; -} - -/* - * Dump a hexed stream of bytes (convenience func). - * - * Input: buf to read from, length - * Output: none - * Side Effects: bytes printed as a hex blob, no lf at the end - */ -static void dump_bytes(unsigned char *in, unsigned long len) -{ - unsigned long idx; - for(idx=0; idxpad); - if (padding_pad(buf->pad, nb, &length, LTC_PAD_PKCS7 | block_length) != CRYPT_OK) - return 0; - return length; - } else { - length = nb; - if (padding_depad(buf->pad, &length, LTC_PAD_PKCS7) != CRYPT_OK) - return 0; - return length; - } -} - -/* - * Perform an encrypt/decrypt operation to/from files using AES+CBC+PKCS7 pad. - * Set encrypt to 1 to encrypt, 0 to decrypt. - * - * Input: in/out files, key, iv, and mode - * Output: CRYPT_OK if no error - * Side Effects: bytes slurped from infile, pushed to outfile, fds updated. - */ -static int do_crypt(FILE *infd, FILE *outfd, unsigned char *key, unsigned char *iv, - int encrypt) -{ - union paddable inbuf, outbuf; - int cipher, ret; - symmetric_CBC cbc; - size_t nb; - - /* Register your cipher! */ - cipher = register_cipher(&aes_desc); - if(cipher == -1) - return CRYPT_INVALID_CIPHER; - - /* Start a CBC session with cipher/key/val params */ - ret = cbc_start(cipher, iv, key, KEY_LENGTH, 0, &cbc); - if( ret != CRYPT_OK ) - return -1; - - do { - /* Get bytes from the source */ - nb = fread(inbuf.unpad, 1, sizeof(inbuf.unpad), infd); - if(!nb) - return encrypt ? CRYPT_OK : CRYPT_ERROR; - - /* Barf if we got a read error */ - if(ferror(infd)) - return CRYPT_ERROR; - - if(encrypt) { - /* We're encrypting, so pad first (if at EOF) and then - crypt */ - if(feof(infd)) - nb = s_pkcs7_pad(&inbuf, nb, - aes_desc.block_length, 1); - - ret = cbc_encrypt(inbuf.pad, outbuf.pad, nb, &cbc); - if(ret != CRYPT_OK) - return ret; - - } else { - /* We're decrypting, so decrypt and then unpad if at - EOF */ - ret = cbc_decrypt(inbuf.unpad, outbuf.unpad, nb, &cbc); - if( ret != CRYPT_OK ) - return ret; - - if(feof(infd)) - nb = s_pkcs7_pad(&outbuf, nb, - aes_desc.block_length, 0); - if(nb == 0) - /* The file didn't decrypt correctly */ - return CRYPT_ERROR; - - } - - /* Push bytes to outfile */ - if(fwrite(outbuf.unpad, 1, nb, outfd) != nb) - return CRYPT_ERROR; - - } while(!feof(infd)); - - /* Close up */ - cbc_done(&cbc); - - return CRYPT_OK; -} - - -static char* getpassword(const char *prompt, size_t maxlen) -{ - char *wr, *end, *pass = XCALLOC(1, maxlen + 1); - struct termios tio; - tcflag_t c_lflag; - if (pass == NULL) - return NULL; - wr = pass; - end = pass + maxlen; - - tcgetattr(0, &tio); - c_lflag = tio.c_lflag; - tio.c_lflag &= ~ECHO; - tcsetattr(0, TCSANOW, &tio); - - printf("%s", prompt); - fflush(stdout); - while (pass < end) { - int c = getchar(); - if (c == '\r' || c == '\n' || c == -1) - break; - *wr++ = c; - } - tio.c_lflag = c_lflag; - tcsetattr(0, TCSAFLUSH, &tio); - printf("\n"); - return pass; -} - -/* Convenience macro for the various barfable places below */ -#define BARF(a) { \ - if(password) free(password); \ - if(infd) fclose(infd); \ - if(outfd) { fclose(outfd); remove(argv[3]); } \ - barf(argv[0], a); \ -} -/* - * The main routine. Mostly validate cmdline params, open files, run the KDF, - * and do the crypt. - */ -int main(int argc, char *argv[]) { - unsigned char salt[SALT_LENGTH]; - FILE *infd = NULL, *outfd = NULL; - int encrypt = -1; - int hash = -1; - int ret; - unsigned char keyiv[KEY_LENGTH + IV_LENGTH]; - unsigned long keyivlen = (KEY_LENGTH + IV_LENGTH); - unsigned char *key, *iv; - const void *pass; - char *password = NULL; - unsigned long saltlen = sizeof(salt); - - if (argc > 1 && strstr(argv[1], "-h")) - barf(argv[0], NULL); - - /* Check proper number of cmdline args */ - if(argc < 5 || argc > 6) - BARF("Invalid number of arguments"); - - /* Check proper mode of operation */ - if (!strncmp(argv[1], "enc", 3)) - encrypt = 1; - else if(!strncmp(argv[1], "dec", 3)) - encrypt = 0; - else - BARF("Bad command name"); - - /* Check we can open infile/outfile */ - infd = fopen(argv[2], "rb"); - if(infd == NULL) - BARF("Could not open infile"); - outfd = fopen(argv[3], "wb"); - if(outfd == NULL) - BARF("Could not open outfile"); - - /* Get the salt from wherever */ - if(argc == 6) { - /* User-provided */ - if(base16_decode(argv[5], strlen(argv[5]), salt, &saltlen) != CRYPT_OK) - BARF("Bad user-specified salt"); - } else if(encrypt) { - /* Encrypting; get from RNG */ - if(rng_get_bytes(salt, sizeof(salt), NULL) != sizeof(salt)) - BARF("Not enough random data"); - } else { - /* Parse from infile (decrypt only) */ - if(parse_openssl_header(infd, salt) != CRYPT_OK) - BARF("Invalid OpenSSL header in infile"); - } - - /* Fetch the MD5 hasher for PKCS#5 */ - hash = register_hash(&md5_desc); - if(hash == -1) - BARF("Could not register MD5 hash"); - - /* Set things to a sane initial state */ - zeromem(keyiv, sizeof(keyiv)); - key = keyiv + 0; /* key comes first */ - iv = keyiv + KEY_LENGTH; /* iv comes next */ - - if (argv[4] && strcmp(argv[4], "-")) { - pass = argv[4]; - } else { - password = getpassword("Enter password: ", 256); - if (!password) - BARF("Could not get password"); - pass = password; - } - - /* Run the key derivation from the provided passphrase. This gets us - the key and iv. */ - ret = pkcs_5_alg1_openssl(pass, XSTRLEN(pass), salt, - OPENSSL_ITERATIONS, hash, keyiv, &keyivlen ); - if(ret != CRYPT_OK) - BARF("Could not derive key/iv from passphrase"); - - /* Display the salt/key/iv like OpenSSL cmdline does when -p */ - printf("salt="); dump_bytes(salt, sizeof(salt)); printf("\n"); - printf("key="); dump_bytes(key, KEY_LENGTH); printf("\n"); - printf("iv ="); dump_bytes(iv, IV_LENGTH ); printf("\n"); - - /* If we're encrypting, write the salt header as OpenSSL does */ - if(!strncmp(argv[1], "enc", 3)) { - if(fwrite(salt_header, 1, sizeof(salt_header), outfd) != - sizeof(salt_header) ) - BARF("Error writing salt header to outfile"); - if(fwrite(salt, 1, sizeof(salt), outfd) != sizeof(salt)) - BARF("Error writing salt to outfile"); - } - - /* At this point, the files are open, the salt has been figured out, - and we're ready to pump data through crypt. */ - - /* Do the crypt operation */ - if(do_crypt(infd, outfd, key, iv, encrypt) != CRYPT_OK) - BARF("Error during crypt operation"); - - /* Clean up */ - if(password) free(password); - fclose(infd); fclose(outfd); - return 0; -} -#endif diff --git a/demos/sizes.c b/demos/sizes.c deleted file mode 100644 index 3972691b..00000000 --- a/demos/sizes.c +++ /dev/null @@ -1,70 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#define _POSIX_C_SOURCE 200809L /* otherwise PATH_MAX + strdup are not defined for build with -std=c99 */ -#include "tomcrypt.h" - -#include -#define basename(path) ( strrchr((path), '/') ? strrchr((path), '/') + 1 : strrchr((path), '\\') ? strrchr((path), '\\') + 1 : (path) ) - -/** - @file demo_crypt_sizes.c - - Demo how to get various sizes to dynamic languages - like Python - Larry Bugbee, February 2013 -*/ - -static void s_print_line(const char* cmd, const char* desc) -{ - printf(" %-16s - %s\n", cmd, desc); -} - -int main(int argc, char **argv) -{ - if (argc == 1) { - /* given a specific size name, get and print its size */ - char name[] = "ltc_hash_descriptor"; - unsigned int size; - char *sizes_list; - unsigned int sizes_list_len; - if (crypt_get_size(name, &size) != 0) exit(EXIT_FAILURE); - printf("\n size of '%s' is %u \n\n", name, size); - - /* get and print the length of the names (and sizes) list */ - if (crypt_list_all_sizes(NULL, &sizes_list_len) != 0) exit(EXIT_FAILURE); - printf(" need to allocate %u bytes \n\n", sizes_list_len); - - /* get and print the names (and sizes) list */ - if ((sizes_list = malloc(sizes_list_len)) == NULL) exit(EXIT_FAILURE); - if (crypt_list_all_sizes(sizes_list, &sizes_list_len) != 0) exit(EXIT_FAILURE); - printf(" supported sizes:\n\n%s\n\n", sizes_list); - free(sizes_list); - } else if (argc == 2) { - if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) { - char* base = strdup(basename(argv[0])); - printf("Usage: %s [-a] [-s name]\n\n", base); - s_print_line("", "The old behavior of the demo"); - s_print_line("-a", "Only lists all sizes"); - s_print_line("-s name", "List a single size given as argument"); - s_print_line("-h", "The help you're looking at"); - free(base); - } else if (strcmp(argv[1], "-a") == 0) { - char *sizes_list; - unsigned int sizes_list_len; - /* get and print the length of the names (and sizes) list */ - if (crypt_list_all_sizes(NULL, &sizes_list_len) != 0) exit(EXIT_FAILURE); - /* get and print the names (and sizes) list */ - if ((sizes_list = malloc(sizes_list_len)) == NULL) exit(EXIT_FAILURE); - if (crypt_list_all_sizes(sizes_list, &sizes_list_len) != 0) exit(EXIT_FAILURE); - printf("%s\n", sizes_list); - free(sizes_list); - } - } else if (argc == 3) { - if (strcmp(argv[1], "-s") == 0) { - unsigned int size; - if (crypt_get_size(argv[2], &size) != 0) exit(EXIT_FAILURE); - printf("%s,%u\n", argv[2], size); - } - } - return 0; -} diff --git a/demos/small.c b/demos/small.c index 2531718a..f5a0d433 100644 --- a/demos/small.c +++ b/demos/small.c @@ -1,15 +1,10 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/* small demo app that just includes a cipher/hash/prng */ -#include +// small demo app that just includes a cipher/hash/prng + +#include int main(void) { -#ifdef LTC_RIJNDAEL -#ifdef ENCRYPT_ONLY register_cipher(&rijndael_enc_desc); -#endif -#endif register_prng(&yarrow_desc); register_hash(&sha256_desc); return 0; diff --git a/demos/test/.ccmalloc b/demos/test/.ccmalloc new file mode 100644 index 00000000..1b0aba2e --- /dev/null +++ b/demos/test/.ccmalloc @@ -0,0 +1,356 @@ + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%% generic configuration file for %%%% + %%%% the ccmalloc memory profiler %%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + %-----------------------------------------------------------------% + % COPY THIS FILE TO '.ccmalloc' in your project or home directory % + %-----------------------------------------------------------------% + +############################################################################## +## (C) 1997-2003 Armin Biere, 1998 Johannes Keukelaar +## $Id: ccmalloc.cfg,v 1.6 2003/02/03 08:03:54 biere Exp $ +############################################################################## + +%%% '%' and '#' are comments !!!!!!! + +% This file must be called '.ccmalloc' and is searched for in the +% current directory and in the home directory of the user. If it +% does not exist then the default values mentioned below are used. + +% It is also the only available user manual yet ;-) So here is a reading +% hint. First have a look at the short one line descriptions of each option +% ... + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% with 'file' the executable is specified [a.out] +% ---------------------------------------------------------------------- +% This should not be necessary for Linux and Solaris because the proc +% file system can be used to find argv[0]. +% +% (the rest of this comment only applies to other OS) +% +% For other OS you should use this option unless the executable is +% in the current directory or its name is 'a.out'. +% +% If you do not specify this then ccmalloc tries to find an executable +% in the current directory that matches the running program starting +% with 'a.out'. For this process it must call 'nm' on each executable +% file in the directory which may be time consuming. With this option +% you can speed up this process. +% +% You can also specify absolute or relative path names. This is +% necessary if you do not start your program from the current directory. +% But you can also simply link or name your program to 'a.out'. + +%file FILE + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'log' specify the logfile [stderr] +% ---------------------------------------------------------------------- +% The default is to use stderr. The argument to 'log' is the name of +% the file you want to write to. It can also be 'stdout' or '-' which +% sets stdout as logfile. If the logfile is stdout or stderr and is +% connected to a terminal then the output is slightly different. +% +% For big programs the logfile can be really big. To reduce the size +% you can use a small chain length (see 'chain-length' below). The other +% possibility is to use compressed logfiles. This can be done by +% specifying a logfile name with a '.gz' (or a '.Z') suffix. This means +% that gnuzip (resp. compress) is used to compress the output. + +%log FILE + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'logpid' specify the logfile +% ---------------------------------------------------------------------- +% Can be used alternatively to the 'log' command if you want to use +% ccmalloc for debugging parallel applications where several copies of +% the program you are debugging must be run simoultaneously. In this +% case you can not use 'log' because you do not want to write to the same +% log file. Using 'logpid' uses a file name ending with the of +% the process which means the name is unique even if several copies of +% your program are run simoultaneously. +% +% If you use the compressing suffixes then the is inserted before +% the suffix (e.g. 'logpid ccmalloc.log.gz' uses 'ccmalloc.log..gz' +% as the name for the log file). + +%logpid FILE + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'dont-log-chain' skip info about certain chains [] +% ---------------------------------------------------------------------- +% This command may be repeated any number of times. The argument to this +% command is a comma-separated list of function-or-file-and-line +% specifications. Garbage allocated from a callchain that contains this +% subchain anywhere will _not_ be logged. +% +% The ';'-separated list should not contain any spaces. E.g. not: +% +% main ; foo ; bar +% +% but: +% +% main;foo;bar +% +% A function-or-file-and-line specification is a string followed by an +% optional colon and number, for example: main or main:14 or main.c or +% main.c:15. Note that the string is compared with both the function and the +% file name, if available. If main.c happens to be a function name, that +% will cause a match (for that string at least). Not specifying a line +% number will match any line number. If line number information is not +% available, anything will match! Not specifying a name (e.g. ;;;) will +% match an unknown function name. Not giving any parameters at all, will +% match a chain containing at least one unknown function. +% +% Note that if you say 'dont-log-chain wrapper.c' nothing will be logged. + +%dont-log-chain + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'only-log-chain' skip info about other chains [] +% ---------------------------------------------------------------------- +% The obvious counterpart to dont-log-chain. In this case, only matching +% chains will be reported. Non-matching chains will not be reported. +% Can be repeated any number of times; if the chain matches any of the +% instances, it will be reported. + +%only-log-chain + +######################################################################## +# # +# This is the 'flag' section # +# # +# 'set FLAG' is the same as 'set FLAG 1' # +# # +# The default values are those set below. If 'silent' is disabled # +# then you will find the banner in the log file (or it is listed on # +# stdout or stderr). The banner describes the current settings of all # +# these flags. # +# # +######################################################################## + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% with 'only-count' ccmalloc only counts garbage - no call chains [0] +% ---------------------------------------------------------------------- +% If only-count is set to one then only one additional pointer for +% each allocated data is used and no call chain is generated. This is +% the fasted and most space efficient mode ccmalloc can operate +% in. In this mode you get at least the size of garbage produced. +% +% Note that 'check-free-space' does not work at all with 'only-count' +% set and over writes ('check-overwrites') are only checked when +% calling free. + +%set only-count 0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'load-dynlibs' load dynamic linked libraries into gdb [0] +% ---------------------------------------------------------------------- +% If your program is linked with dynamic libraries, function and file +% name information is not available for addresses in those libraries, +% unless you set 'load-dynlibs' to 1. + +%set load-dynlibs 0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'keep-deallocated-data' does not recycle deallocated data [0] +% ---------------------------------------------------------------------- +% If you enable keep-deallocated-data then all data deallocated with +% 'free' (or 'delete' in C++) is not given back to the free store +% but stays associated with the call chain of its allocation. This is +% very useful if your program does multiple deallocation of the +% same data. + +%set keep-deallocated-data 0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'check-overwrites' detect overwrites [0] +% ---------------------------------------------------------------------- +% If you want to detect 'off by n bytes' errors you should set +% 'checking-overwrites' to n/4 (on 32-Bit machines). +% +% ccmalloc inserts a boundary above allocated data. This boundary +% consists of 'check-overwrites' words. If your program writes to +% this area then ccmalloc can detect this (see also check-start +% and check-interval). 'ccmalloc' also does checking for overwrites +% at non word boundaries (e.g. strcpy(malloc(strlen("hello")),"hello");) + +set check-overwrites 1 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'check-underwrites' detect underwrites [0] +% ---------------------------------------------------------------------- +% same with writes below allocated data. You do not have to set this +% option if you only want detect 'off (below) by one' errors because +% ccmalloc keeps a magic value just before the user data. + +set check-underwrites 1 + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'check-free-space' can be used to find dangling pointers. [0] +% ---------------------------------------------------------------------- +% A very serious type of bug is to write on data that has already been +% freed. If this happens the free space management of malloc is in +% trouble and you will perhaps encounter non deterministic behaviour of +% your program. To test this first enable 'keep-deallocated-data' and +% restart your program. If the problem goes away and ccmalloc does not +% report anything then you should *also* enable 'check-free-space'. Now +% ccmalloc checks already deallocated data for corruption. +% +% Note that to perform this check 'keep-deallocated-data' also must +% be enabled and 'only-count' disabled. + +set check-free-space 1 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'check-interval' can be used to speed up checks [0] +% ---------------------------------------------------------------------- +% If check-overwrite, check-underwrites or check-free-space is set then +% the default is to do 'write checks' when data is deallocated and +% to do 'free space checks' when reporting together with +% 'write checks' for garbage. When you want these checks to be +% performed more often then you should set 'check-interval' to a +% positive number. This number is the interval between the number of +% calls to free or malloc without performing the checks. + +%set check-interval 0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'check-start' can be used to speed up checks [0] +% ---------------------------------------------------------------------- +% The flag 'check-start' delays the start of checks until the given +% number of calls to free and malloc have occured. Together with +% 'check-interval' you can use a binary search to find an aproximation +% when a corruption occured! If you simply set check-interval to 1 and +% check-start to 0 then this will slow done your program too much. + +%set check-start 0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'silent' disables banner [0] +% ---------------------------------------------------------------------- +% If you don't want to see the banner of ccmalloc then set +% 'silent' to 1 (f.e. when logging to stderr) + +%set silent + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'file-info' en/disables file and line number information [1] +% ---------------------------------------------------------------------- +% If your program was compiled with debugging information (-g) then +% ccmalloc can generate line number and file info for call chains opening +% a pipe to gdb. For very big programs this method is slow. In this case +% you can set 'file-info' to zero and you will only get the function +% names. For SunOS 4.3.1 'nm' does not 'demangle' C++ identifiers +% very well. So gdb is called instead but only if 'file-info' is +% not set to 0. + +%set file-info 1 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'continue' if ccmalloc aborts when something weired happened [0] +% ---------------------------------------------------------------------- +% If the free function of ccmalloc is called with an argument that does +% not make sense to ccmalloc or that has already been freed then you +% probably want the program to stop at this point. This is also +% the default behaviour. But you can force ccmalloc also to ignore +% this if you set 'continue' to 1. This flag also controls the behaviour +% of ccmalloc when free space is found to be corrupted or a write +% boundary has been overwritten. + +%set continue 0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'chain-length' is the length of the maximal call chain [0 = infinite] +% ---------------------------------------------------------------------- +% You can restrict the length of call chains by setting 'chain-length' +% to a number greater than zero. If 'chain-length' is zero (the default) +% then chains are as long as possible (on a non x86 system only call +% chains with a finite maximal length can be generated). For big +% programs especially if keep-deallocated-data is enabled this can +% reduce the size of the log file from over 100MB to several MB! + +%set chain-length 0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'print-addresses' of data [0] +% ---------------------------------------------------------------------- +% If you want to see the addresses of the allocated data (and +% deallocated data if keep-deallocated-data is set to 1) set +% 'print-addresses' to 1. + +%set print-addresses 0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'print-on-one-line' shortens log file [0] +% ---------------------------------------------------------------------- +% The default is to print function names and file/line number info +% on separate lines. With 'print-on-one-line' set 1 all are printed +% on one line. + +%set print-on-one-line 0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'additional-line' enlarges readability [1] +% ---------------------------------------------------------------------- +% When printing call chains an empty line is printed between to +% call points. Set 'additional-line' to 0 to disable this feature. + +%set additional-line 1 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% 'statistics' enables more accurate profiling [0] +% ---------------------------------------------------------------------- +% Calculate number of allocations and deallocations and bytes also on +% a per call chain basis. This uses 4 additional pointers for each +% call chain. + +set statistics 1 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% set order for sorting of call chains [1] [1] +% ---------------------------------------------------------------------- +% When printing the report to the log file the call chains are sorted by +% default with respect to the largest accumulated garbage produced by +% that call chain. This can be changed with setting 'sort-by-wasted' +% to 0. In this case they are sorted by the number of allocated bytes. +% If you want the number of allocations (only possible if 'statistics' +% is enabled) as sorting criteria instead then set 'sort-by-size' to 0. + +%set sort-by-wasted 1 +%set sort-by-size 1 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% report library chains [0] +% ---------------------------------------------------------------------- +% Some external libraries (like libg++) have memory leaks. On some +% systems even a call to printf produces a leak. ccmalloc tries to +% detect this (only heuristically!) and with this flag you can control +% if leaks produced by such library calls are reported. +% +% Since version 0.2.1 some similar effect can be achieved by using +% 'dont-log-chain' with no argument. + +%set library-chains 0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% print debugging information [X] (compile time dependend) +% ---------------------------------------------------------------------- + +%set debug X + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% align memory on 8 byte boundary [0] (no effect on SunOS or Solaris) +% ---------------------------------------------------------------------- + +%set align-8-byte 0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% only report allocations which ended up being wasted (i.e don't report +% allocations which were completely freed properly. ) [1] +% ---------------------------------------------------------------------- + +%set only-wasting-alloc 1 diff --git a/demos/test/base64_test.c b/demos/test/base64_test.c new file mode 100644 index 00000000..b02c1a2a --- /dev/null +++ b/demos/test/base64_test.c @@ -0,0 +1,20 @@ +#include "test.h" + +int base64_test(void) +{ + unsigned char in[64], out[256], tmp[64]; + unsigned long x, l1, l2; + + for (x = 0; x < 64; x++) { + yarrow_read(in, x, &test_yarrow); + l1 = sizeof(out); + DO(base64_encode(in, x, out, &l1)); + l2 = sizeof(tmp); + DO(base64_decode(out, l1, tmp, &l2)); + if (l2 != x || memcmp(tmp, in, x)) { + printf("base64 failed %lu %lu %lu", x, l1, l2); + return 1; + } + } + return 0; +} diff --git a/demos/test/cipher_hash_test.c b/demos/test/cipher_hash_test.c new file mode 100644 index 00000000..52e9e657 --- /dev/null +++ b/demos/test/cipher_hash_test.c @@ -0,0 +1,20 @@ +/* test the ciphers and hashes using their built-in self-tests */ + +#include "test.h" + +int cipher_hash_test(void) +{ + int x; + + /* test ciphers */ + for (x = 0; cipher_descriptor[x].name != NULL; x++) { + DO(cipher_descriptor[x].test()); + } + + /* test hashes */ + for (x = 0; hash_descriptor[x].name != NULL; x++) { + DO(hash_descriptor[x].test()); + } + + return 0; +} diff --git a/demos/test/dh_tests.c b/demos/test/dh_tests.c new file mode 100644 index 00000000..785a97bf --- /dev/null +++ b/demos/test/dh_tests.c @@ -0,0 +1,87 @@ +#include "test.h" + +int dh_tests (void) +{ + unsigned char buf[3][4096]; + unsigned long x, y, z; + int stat, stat2; + dh_key usera, userb; + + DO(dh_test()); + + /* make up two keys */ + DO(dh_make_key (&test_yarrow, find_prng ("yarrow"), 512, &usera)); + DO(dh_make_key (&test_yarrow, find_prng ("yarrow"), 512, &userb)); + + /* make the shared secret */ + x = 4096; + DO(dh_shared_secret (&usera, &userb, buf[0], &x)); + + y = 4096; + DO(dh_shared_secret (&userb, &usera, buf[1], &y)); + if (y != x) { + printf ("DH Shared keys are not same size.\n"); + return 1; + } + if (memcmp (buf[0], buf[1], x)) { + printf ("DH Shared keys not same contents.\n"); + return 1; + } + + /* now export userb */ + y = 4096; + DO(dh_export (buf[1], &y, PK_PUBLIC, &userb)); + dh_free (&userb); + + /* import and make the shared secret again */ + DO(dh_import (buf[1], y, &userb)); + z = 4096; + DO(dh_shared_secret (&usera, &userb, buf[2], &z)); + + if (z != x) { + printf ("failed. Size don't match?\n"); + return 1; + } + if (memcmp (buf[0], buf[2], x)) { + printf ("Failed. Content didn't match.\n"); + return 1; + } + dh_free (&usera); + dh_free (&userb); + +/* test encrypt_key */ + dh_make_key (&test_yarrow, find_prng ("yarrow"), 512, &usera); + for (x = 0; x < 16; x++) { + buf[0][x] = x; + } + y = sizeof (buf[1]); + DO(dh_encrypt_key (buf[0], 16, buf[1], &y, &test_yarrow, find_prng ("yarrow"), find_hash ("md5"), &usera)); + zeromem (buf[0], sizeof (buf[0])); + x = sizeof (buf[0]); + DO(dh_decrypt_key (buf[1], y, buf[0], &x, &usera)); + if (x != 16) { + printf ("Failed (length)\n"); + return 1; + } + for (x = 0; x < 16; x++) + if (buf[0][x] != x) { + printf ("Failed (contents)\n"); + return 1; + } + +/* test sign_hash */ + for (x = 0; x < 16; x++) { + buf[0][x] = x; + } + x = sizeof (buf[1]); + DO(dh_sign_hash (buf[0], 16, buf[1], &x, &test_yarrow , find_prng ("yarrow"), &usera)); + DO(dh_verify_hash (buf[1], x, buf[0], 16, &stat, &usera)); + buf[0][0] ^= 1; + DO(dh_verify_hash (buf[1], x, buf[0], 16, &stat2, &usera)); + if (!(stat == 1 && stat2 == 0)) { + printf("dh_sign/verify_hash %d %d", stat, stat2); + return 1; + } + dh_free (&usera); + return 0; +} diff --git a/demos/test/dsa_test.c b/demos/test/dsa_test.c new file mode 100644 index 00000000..2076089e --- /dev/null +++ b/demos/test/dsa_test.c @@ -0,0 +1,51 @@ +#include "test.h" + +int dsa_test(void) +{ + unsigned char msg[16], out[1024], out2[1024]; + unsigned long x, y; + int err, stat1, stat2; + dsa_key key, key2; + + /* make a random key */ + DO(dsa_make_key(&test_yarrow, find_prng("yarrow"), 20, 128, &key)); + + /* verify it */ + DO(dsa_verify_key(&key, &stat1)); + if (stat1 == 0) { printf("dsa_verify_key "); return 1; } + + /* sign the message */ + x = sizeof(out); + DO(dsa_sign_hash(msg, sizeof(msg), out, &x, &test_yarrow, find_prng("yarrow"), &key)); + + /* verify it once */ + DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat1, &key)); + + /* Modify and verify again */ + msg[0] ^= 1; + DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat2, &key)); + msg[0] ^= 1; + if (!(stat1 == 1 && stat2 == 0)) { printf("dsa_verify %d %d", stat1, stat2); return 1; } + + /* test exporting it */ + x = sizeof(out2); + DO(dsa_export(out2, &x, PK_PRIVATE, &key)); + DO(dsa_import(out2, x, &key2)); + + /* verify a signature with it */ + DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat1, &key2)); + if (stat1 == 0) { printf("dsa_verify (import private) %d ", stat1); return 1; } + dsa_free(&key2); + + /* export as public now */ + x = sizeof(out2); + DO(dsa_export(out2, &x, PK_PUBLIC, &key)); + DO(dsa_import(out2, x, &key2)); + /* verify a signature with it */ + DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat1, &key2)); + if (stat1 == 0) { printf("dsa_verify (import public) %d ", stat1); return 1; } + dsa_free(&key2); + dsa_free(&key); + + return 0; +} diff --git a/demos/test/ecc_test.c b/demos/test/ecc_test.c new file mode 100644 index 00000000..b64cbcff --- /dev/null +++ b/demos/test/ecc_test.c @@ -0,0 +1,89 @@ +#include "test.h" + +int ecc_tests (void) +{ + unsigned char buf[4][4096]; + unsigned long x, y, z; + int stat, stat2; + ecc_key usera, userb; + + DO(ecc_test ()); + + /* make up two keys */ + DO(ecc_make_key (&test_yarrow, find_prng ("yarrow"), 65, &usera)); + DO(ecc_make_key (&test_yarrow, find_prng ("yarrow"), 65, &userb)); + + /* make the shared secret */ + x = 4096; + DO(ecc_shared_secret (&usera, &userb, buf[0], &x)); + + y = 4096; + DO(ecc_shared_secret (&userb, &usera, buf[1], &y)); + + if (y != x) { + printf ("ecc Shared keys are not same size."); + return 1; + } + + if (memcmp (buf[0], buf[1], x)) { + printf ("ecc Shared keys not same contents."); + return 1; + } + + /* now export userb */ + y = 4096; + DO(ecc_export (buf[1], &y, PK_PUBLIC, &userb)); + ecc_free (&userb); + + /* import and make the shared secret again */ + DO(ecc_import (buf[1], y, &userb)); + + z = 4096; + DO(ecc_shared_secret (&usera, &userb, buf[2], &z)); + + if (z != x) { + printf ("failed. Size don't match?"); + return 1; + } + if (memcmp (buf[0], buf[2], x)) { + printf ("Failed. Content didn't match."); + return 1; + } + ecc_free (&usera); + ecc_free (&userb); + +/* test encrypt_key */ + ecc_make_key (&test_yarrow, find_prng ("yarrow"), 65, &usera); + for (x = 0; x < 32; x++) { + buf[0][x] = x; + } + y = sizeof (buf[1]); + DO(ecc_encrypt_key (buf[0], 32, buf[1], &y, &test_yarrow, find_prng ("yarrow"), find_hash ("sha256"), &usera)); + zeromem (buf[0], sizeof (buf[0])); + x = sizeof (buf[0]); + DO(ecc_decrypt_key (buf[1], y, buf[0], &x, &usera)); + if (x != 32) { + printf ("Failed (length)"); + return 1; + } + for (x = 0; x < 32; x++) + if (buf[0][x] != x) { + printf ("Failed (contents)"); + return 1; + } +/* test sign_hash */ + for (x = 0; x < 16; x++) { + buf[0][x] = x; + } + x = sizeof (buf[1]); + DO(ecc_sign_hash (buf[0], 16, buf[1], &x, &test_yarrow, find_prng ("yarrow"), &usera)); + DO(ecc_verify_hash (buf[1], x, buf[0], 16, &stat, &usera)); + buf[0][0] ^= 1; + DO(ecc_verify_hash (buf[1], x, buf[0], 16, &stat2, &usera)); + if (!(stat == 1 && stat2 == 0)) { + printf("ecc_verify_hash failed"); + return 1; + } + ecc_free (&usera); + return 0; +} diff --git a/demos/test/mac_test.c b/demos/test/mac_test.c new file mode 100644 index 00000000..52e75d89 --- /dev/null +++ b/demos/test/mac_test.c @@ -0,0 +1,12 @@ +/* test pmac/omac/hmac */ +#include "test.h" + +int mac_test(void) +{ + DO(hmac_test()); + DO(pmac_test()); + DO(omac_test()); + DO(eax_test()); + DO(ocb_test()); + return 0; +} diff --git a/demos/test/makefile b/demos/test/makefile new file mode 100644 index 00000000..5eb06902 --- /dev/null +++ b/demos/test/makefile @@ -0,0 +1,25 @@ +# make test harness, it is good. +CFLAGS += -Wall -W -Os -I../../ -I./ + +# add -g3 for ccmalloc debugging +#CFLAGS += -g3 + +# if you're not debugging +CFLAGS += -fomit-frame-pointer + +default: test + +OBJECTS=test.o cipher_hash_test.o mac_test.o modes_test.o \ +pkcs_1_test.o store_test.o rsa_test.o ecc_test.o dsa_test.c dh_tests.o + +#uncomment this to get heap checking [e.g. memory leaks]. Note +#that you *MUST* build libtomcrypt.a with -g3 enabled [and make install it] +# +# +#CCMALLOC = -lccmalloc -ldl + +test: $(OBJECTS) + $(CC) $(OBJECTS) -ltomcrypt $(CCMALLOC) -o test + +clean: + rm -f test *.o *.obj *.exe *~ diff --git a/demos/test/makefile.icc b/demos/test/makefile.icc new file mode 100644 index 00000000..22c71541 --- /dev/null +++ b/demos/test/makefile.icc @@ -0,0 +1,14 @@ +# make test harness, it is good. +CFLAGS += -O3 -xN -ip -I../../ -I./ +CC=icc + +default: test + +OBJECTS=test.o cipher_hash_test.o mac_test.o modes_test.o \ +pkcs_1_test.o store_test.o rsa_test.o ecc_test.o dsa_test.c dh_tests.o + +test: $(OBJECTS) + $(CC) $(OBJECTS) -ltomcrypt -o test + +clean: + rm -f test *.o *~ diff --git a/demos/test/makefile.msvc b/demos/test/makefile.msvc new file mode 100644 index 00000000..c1ca8e05 --- /dev/null +++ b/demos/test/makefile.msvc @@ -0,0 +1,14 @@ +# make test harness, it is good. +CFLAGS = $(CFLAGS) /W3 /Ox -I../../ -I./ + +default: test.exe + +OBJECTS = test.obj cipher_hash_test.obj mac_test.obj modes_test.obj \ +pkcs_1_test.obj store_test.obj rsa_test.obj ecc_test.obj dsa_test.c dh_tests.obj + + +test.exe: $(OBJECTS) + cl $(OBJECTS) tomcrypt.lib advapi32.lib + +clean: + rm -f test.exe *.obj *~ diff --git a/demos/test/modes_test.c b/demos/test/modes_test.c new file mode 100644 index 00000000..7494b4d3 --- /dev/null +++ b/demos/test/modes_test.c @@ -0,0 +1,112 @@ +/* test CFB/OFB/CBC modes */ +#include "test.h" + +int modes_test(void) +{ + unsigned char pt[64], ct[64], tmp[64], key[16], iv[16], iv2[16]; + int x, cipher_idx; + symmetric_CBC cbc; + symmetric_CFB cfb; + symmetric_OFB ofb; + symmetric_CTR ctr; + unsigned long l; + + /* make a random pt, key and iv */ + yarrow_read(pt, 64, &test_yarrow); + yarrow_read(key, 16, &test_yarrow); + yarrow_read(iv, 16, &test_yarrow); + + /* get idx of AES handy */ + cipher_idx = find_cipher("aes"); + if (cipher_idx == -1) { + printf("test requires AES"); + return 1; + } + + /* test CBC mode */ + /* encode the block */ + DO(cbc_start(cipher_idx, iv, key, 16, 0, &cbc)); + l = sizeof(iv2); + DO(cbc_getiv(iv2, &l, &cbc)); + if (l != 16 || memcmp(iv2, iv, 16)) { + printf("cbc_getiv failed"); + return 1; + } + for (x = 0; x < 4; x++) { + DO(cbc_encrypt(pt+x*16, ct+x*16, &cbc)); + } + + /* decode the block */ + DO(cbc_setiv(iv2, l, &cbc)); + zeromem(tmp, sizeof(tmp)); + for (x = 0; x < 4; x++) { + DO(cbc_decrypt(ct+x*16, tmp+x*16, &cbc)); + } + if (memcmp(tmp, pt, 64) != 0) { + printf("CBC failed"); + return 1; + } + + /* test CFB mode */ + /* encode the block */ + DO(cfb_start(cipher_idx, iv, key, 16, 0, &cfb)); + l = sizeof(iv2); + DO(cfb_getiv(iv2, &l, &cfb)); + /* note we don't memcmp iv2/iv since cfb_start processes the IV for the first block */ + if (l != 16) { + printf("cfb_getiv failed"); + return 1; + } + DO(cfb_encrypt(pt, ct, 64, &cfb)); + + /* decode the block */ + DO(cfb_setiv(iv, l, &cfb)); + zeromem(tmp, sizeof(tmp)); + DO(cfb_decrypt(ct, tmp, 64, &cfb)); + if (memcmp(tmp, pt, 64) != 0) { + printf("CFB failed"); + return 1; + } + + /* test OFB mode */ + /* encode the block */ + DO(ofb_start(cipher_idx, iv, key, 16, 0, &ofb)); + l = sizeof(iv2); + DO(ofb_getiv(iv2, &l, &ofb)); + if (l != 16 || memcmp(iv2, iv, 16)) { + printf("ofb_getiv failed"); + return 1; + } + DO(ofb_encrypt(pt, ct, 64, &ofb)); + + /* decode the block */ + DO(ofb_setiv(iv2, l, &ofb)); + zeromem(tmp, sizeof(tmp)); + DO(ofb_decrypt(ct, tmp, 64, &ofb)); + if (memcmp(tmp, pt, 64) != 0) { + printf("OFB failed"); + return 1; + } + + /* test CTR mode */ + /* encode the block */ + DO(ctr_start(cipher_idx, iv, key, 16, 0, &ctr)); + l = sizeof(iv2); + DO(ctr_getiv(iv2, &l, &ctr)); + if (l != 16 || memcmp(iv2, iv, 16)) { + printf("ctr_getiv failed"); + return 1; + } + DO(ctr_encrypt(pt, ct, 64, &ctr)); + + /* decode the block */ + DO(ctr_setiv(iv2, l, &ctr)); + zeromem(tmp, sizeof(tmp)); + DO(ctr_decrypt(ct, tmp, 64, &ctr)); + if (memcmp(tmp, pt, 64) != 0) { + printf("CTR failed"); + return 1; + } + + return 0; +} diff --git a/demos/test/pkcs_1_test.c b/demos/test/pkcs_1_test.c new file mode 100644 index 00000000..ef7c81de --- /dev/null +++ b/demos/test/pkcs_1_test.c @@ -0,0 +1,103 @@ +#include "test.h" + +int pkcs_1_test(void) +{ + unsigned char buf[3][128]; + int res1, res2, res3, prng_idx, hash_idx; + unsigned long x, y, l1, l2, l3, i1, i2, lparamlen, saltlen, modlen; + static const unsigned char lparam[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 }; + + /* get hash/prng */ + hash_idx = find_hash("sha1"); + prng_idx = find_prng("yarrow"); + + if (hash_idx == -1 || prng_idx == -1) { + printf("pkcs_1 tests require sha1/yarrow"); + return 1; + } + + /* do many tests */ + for (x = 0; x < 100; x++) { + zeromem(buf, sizeof(buf)); + + /* make a dummy message (of random length) */ + l3 = (rand() & 31) + 8; + for (y = 0; y < l3; y++) buf[0][y] = rand() & 255; + + /* random modulus len (v1.5 must be multiple of 8 though arbitrary sizes seem to work) */ + modlen = 800 + 8 * (abs(rand()) % 28); + + /* PKCS v1.5 testing (encryption) */ + l1 = sizeof(buf[1]); + DO(pkcs_1_v15_es_encode(buf[0], l3, modlen, &test_yarrow, prng_idx, buf[1], &l1)); + DO(pkcs_1_v15_es_decode(buf[1], l1, modlen, buf[2], l3, &res1)); + if (res1 != 1 || memcmp(buf[0], buf[2], l3)) { + printf("pkcs v1.5 encrypt failed %d, %lu, %lu ", res1, l1, l3); + return 1; + } + + /* PKCS v1.5 testing (signatures) */ + l1 = sizeof(buf[1]); + DO(pkcs_1_v15_sa_encode(buf[0], l3, hash_idx, modlen, buf[1], &l1)); + DO(pkcs_1_v15_sa_decode(buf[0], l3, buf[1], l1, hash_idx, modlen, &res1)); + buf[0][i1 = abs(rand()) % l3] ^= 1; + DO(pkcs_1_v15_sa_decode(buf[0], l3, buf[1], l1, hash_idx, modlen, &res2)); + buf[0][i1] ^= 1; + buf[1][i2 = abs(rand()) % l1] ^= 1; + DO(pkcs_1_v15_sa_decode(buf[0], l3, buf[1], l1, hash_idx, modlen, &res3)); + + if (!(res1 == 1 && res2 == 0 && res3 == 0)) { + printf("pkcs v1.5 sign failed %d %d %d ", res1, res2, res3); + return 1; + } + + /* pick a random lparam len [0..16] */ + lparamlen = abs(rand()) % 17; + + /* pick a random saltlen 0..16 */ + saltlen = abs(rand()) % 17; + + /* PKCS #1 v2.0 supports modlens not multiple of 8 */ + modlen = 800 + (abs(rand()) % 224); + + /* encode it */ + l1 = sizeof(buf[1]); + DO(pkcs_1_oaep_encode(buf[0], l3, lparam, lparamlen, modlen, &test_yarrow, prng_idx, hash_idx, buf[1], &l1)); + + /* decode it */ + l2 = sizeof(buf[2]); + DO(pkcs_1_oaep_decode(buf[1], l1, lparam, lparamlen, modlen, hash_idx, buf[2], &l2, &res1)); + + if (res1 != 1 || l2 != l3 || memcmp(buf[2], buf[0], l3) != 0) { + printf("Outsize == %lu, should have been %lu, res1 = %d, lparamlen = %lu, msg contents follow.\n", l2, l3, res1, lparamlen); + printf("ORIGINAL:\n"); + for (x = 0; x < l3; x++) { + printf("%02x ", buf[0][x]); + } + printf("\nRESULT:\n"); + for (x = 0; x < l2; x++) { + printf("%02x ", buf[2][x]); + } + printf("\n\n"); + return 1; + } + + /* test PSS */ + l1 = sizeof(buf[1]); + DO(pkcs_1_pss_encode(buf[0], l3, saltlen, &test_yarrow, prng_idx, hash_idx, modlen, buf[1], &l1)); + DO(pkcs_1_pss_decode(buf[0], l3, buf[1], l1, saltlen, hash_idx, modlen, &res1)); + + buf[0][i1 = abs(rand()) % l3] ^= 1; + DO(pkcs_1_pss_decode(buf[0], l3, buf[1], l1, saltlen, hash_idx, modlen, &res2)); + + buf[0][i1] ^= 1; + buf[1][i2 = abs(rand()) % l1] ^= 1; + DO(pkcs_1_pss_decode(buf[0], l3, buf[1], l1, saltlen, hash_idx, modlen, &res3)); + + if (!(res1 == 1 && res2 == 0 && res3 == 0)) { + printf("PSS failed: %d, %d, %d, %lu, %lu\n", res1, res2, res3, l3, saltlen); + return 1; + } + } + return 0; +} diff --git a/demos/test/rsa_test.c b/demos/test/rsa_test.c new file mode 100644 index 00000000..777fc873 --- /dev/null +++ b/demos/test/rsa_test.c @@ -0,0 +1,157 @@ +#include "test.h" + +#define RSA_MSGSIZE 78 + + +int rsa_test(void) +{ + unsigned char in[1024], out[1024], tmp[1024]; + rsa_key key; + int hash_idx, prng_idx, stat, stat2; + unsigned long rsa_msgsize, len, len2; + static unsigned char lparam[] = { 0x01, 0x02, 0x03, 0x04 }; + + hash_idx = find_hash("sha1"); + prng_idx = find_prng("yarrow"); + if (hash_idx == -1 || prng_idx == -1) { + printf("rsa_test requires SHA1 and yarrow"); + return 1; + } + + /* make a random key */ + DO(rsa_make_key(&test_yarrow, prng_idx, 1024/8, 65537, &key)); + + /* test PKCS #1 v1.5 */ + for (rsa_msgsize = 1; rsa_msgsize <= 117; rsa_msgsize++) { + /* make a random key/msg */ + yarrow_read(in, rsa_msgsize, &test_yarrow); + + len = sizeof(out); + len2 = rsa_msgsize; + + /* encrypt */ + DO(rsa_v15_encrypt_key(in, rsa_msgsize, out, &len, &test_yarrow, prng_idx, &key)); + DO(rsa_v15_decrypt_key(out, len, tmp, rsa_msgsize, &test_yarrow, prng_idx, &stat, &key)); + if (stat != 1 || memcmp(tmp, in, rsa_msgsize)) { + printf("PKCS #1 v1.5 encrypt/decrypt failure (rsa_msgsize: %lu, stat: %d)\n", rsa_msgsize, stat); + return 1; + } + } + + /* signature */ + len = sizeof(out); + DO(rsa_v15_sign_hash(in, 20, out, &len, &test_yarrow, prng_idx, hash_idx, &key)); + in[1] ^= 1; + DO(rsa_v15_verify_hash(out, len, in, 20, &test_yarrow, prng_idx, hash_idx, &stat, &key)); + in[1] ^= 1; + DO(rsa_v15_verify_hash(out, len, in, 20, &test_yarrow, prng_idx, hash_idx, &stat2, &key)); + if (!(stat == 0 && stat2 == 1)) { + printf("PKCS #1 v1.5 sign/verify failure (stat %d, stat2 %d)\n", stat, stat2); + return 1; + } + + /* encrypt the key (without lparam) */ + for (rsa_msgsize = 1; rsa_msgsize <= 86; rsa_msgsize++) { + /* make a random key/msg */ + yarrow_read(in, rsa_msgsize, &test_yarrow); + + len = sizeof(out); + len2 = rsa_msgsize; + + DO(rsa_encrypt_key(in, rsa_msgsize, out, &len, NULL, 0, &test_yarrow, prng_idx, hash_idx, &key)); + /* change a byte */ + out[8] ^= 1; + DO(rsa_decrypt_key(out, len, tmp, &len2, NULL, 0, &test_yarrow, prng_idx, hash_idx, &stat2, &key)); + /* change a byte back */ + out[8] ^= 1; + if (len2 != rsa_msgsize) { + printf("\nrsa_decrypt_key mismatch len %lu (first decrypt)", len2); + return 1; + } + + len2 = rsa_msgsize; + DO(rsa_decrypt_key(out, len, tmp, &len2, NULL, 0, &test_yarrow, prng_idx, hash_idx, &stat, &key)); + if (!(stat == 1 && stat2 == 0)) { + printf("rsa_decrypt_key failed"); + return 1; + } + if (len2 != rsa_msgsize || memcmp(tmp, in, rsa_msgsize)) { + unsigned long x; + printf("\nrsa_decrypt_key mismatch, len %lu (second decrypt)\n", len2); + printf("Original contents: \n"); + for (x = 0; x < rsa_msgsize; ) { + printf("%02x ", in[x]); + if (!(++x % 16)) { + printf("\n"); + } + } + printf("\n"); + printf("Output contents: \n"); + for (x = 0; x < rsa_msgsize; ) { + printf("%02x ", out[x]); + if (!(++x % 16)) { + printf("\n"); + } + } + printf("\n"); + return 1; + } + } + + /* encrypt the key (with lparam) */ + for (rsa_msgsize = 1; rsa_msgsize <= 86; rsa_msgsize++) { + len = sizeof(out); + len2 = rsa_msgsize; + DO(rsa_encrypt_key(in, rsa_msgsize, out, &len, lparam, sizeof(lparam), &test_yarrow, prng_idx, hash_idx, &key)); + /* change a byte */ + out[8] ^= 1; + DO(rsa_decrypt_key(out, len, tmp, &len2, lparam, sizeof(lparam), &test_yarrow, prng_idx, hash_idx, &stat2, &key)); + if (len2 != rsa_msgsize) { + printf("\nrsa_decrypt_key mismatch len %lu (first decrypt)", len2); + return 1; + } + /* change a byte back */ + out[8] ^= 1; + + len2 = rsa_msgsize; + DO(rsa_decrypt_key(out, len, tmp, &len2, lparam, sizeof(lparam), &test_yarrow, prng_idx, hash_idx, &stat, &key)); + if (!(stat == 1 && stat2 == 0)) { + printf("rsa_decrypt_key failed"); + return 1; + } + if (len2 != rsa_msgsize || memcmp(tmp, in, rsa_msgsize)) { + printf("rsa_decrypt_key mismatch len %lu", len2); + return 1; + } + } + + /* sign a message (unsalted, lower cholestorol and Atkins approved) now */ + len = sizeof(out); + DO(rsa_sign_hash(in, 20, out, &len, &test_yarrow, prng_idx, hash_idx, 0, &key)); + DO(rsa_verify_hash(out, len, in, 20, &test_yarrow, prng_idx, hash_idx, 0, &stat, &key)); + /* change a byte */ + in[0] ^= 1; + DO(rsa_verify_hash(out, len, in, 20, &test_yarrow, prng_idx, hash_idx, 0, &stat2, &key)); + + if (!(stat == 1 && stat2 == 0)) { + printf("rsa_verify_hash (unsalted) failed, %d, %d", stat, stat2); + return 1; + } + + /* sign a message (salted) now */ + len = sizeof(out); + DO(rsa_sign_hash(in, 20, out, &len, &test_yarrow, prng_idx, hash_idx, 8, &key)); + DO(rsa_verify_hash(out, len, in, 20, &test_yarrow, prng_idx, hash_idx, 8, &stat, &key)); + /* change a byte */ + in[0] ^= 1; + DO(rsa_verify_hash(out, len, in, 20, &test_yarrow, prng_idx, hash_idx, 8, &stat2, &key)); + + if (!(stat == 1 && stat2 == 0)) { + printf("rsa_verify_hash (salted) failed, %d, %d", stat, stat2); + return 1; + } + + /* free the key and return */ + rsa_free(&key); + return 0; +} diff --git a/demos/test/store_test.c b/demos/test/store_test.c new file mode 100644 index 00000000..278d52f2 --- /dev/null +++ b/demos/test/store_test.c @@ -0,0 +1,43 @@ +#include "test.h" + +int store_test(void) +{ + unsigned char buf[8]; + unsigned long L; + ulong64 LL; + + L = 0x12345678UL; + STORE32L (L, &buf[0]); + L = 0; + LOAD32L (L, &buf[0]); + if (L != 0x12345678UL) { + printf ("LOAD/STORE32 Little don't work"); + return 1; + } + LL = CONST64 (0x01020304050607); + STORE64L (LL, &buf[0]); + LL = 0; + LOAD64L (LL, &buf[0]) + if (LL != CONST64 (0x01020304050607)) { + printf ("LOAD/STORE64 Little don't work"); + return 1; + } + + L = 0x12345678UL; + STORE32H (L, &buf[0]); + L = 0; + LOAD32H (L, &buf[0]); + if (L != 0x12345678UL) { + printf ("LOAD/STORE32 High don't work, %08lx", L); + return 1; + } + LL = CONST64 (0x01020304050607); + STORE64H (LL, &buf[0]); + LL = 0; + LOAD64H (LL, &buf[0]) + if (LL != CONST64 (0x01020304050607)) { + printf ("LOAD/STORE64 High don't work"); + return 1; + } + return 0; +} diff --git a/demos/test/test.c b/demos/test/test.c new file mode 100644 index 00000000..2ffac3cb --- /dev/null +++ b/demos/test/test.c @@ -0,0 +1,235 @@ +#include "test.h" + +test_entry tests[26]; + +test_entry test_list[26] = { + +/* test name provides requires entry */ +{"store_test", "a", "", store_test }, +{"cipher_hash_test", "b", "a", cipher_hash_test }, +{"modes_test", "c", "b", modes_test }, +{"mac_test", "d", "c", mac_test }, + +{"pkcs_1_test", "e", "b", pkcs_1_test }, +{"rsa_test", "f", "", rsa_test }, +{"ecc_test", "g", "a", ecc_tests }, +{"dsa_test", "h", "a", dsa_test }, +{"dh_test", "i", "a", dh_tests }, + +{NULL, NULL, NULL, NULL} +}; + +prng_state test_yarrow; +static int current_test; + +void run_cmd(int res, int line, char *file, char *cmd) +{ + if (res != CRYPT_OK) { + fprintf(stderr, "[%s]: %s (%d)\n%s:%d:%s\n", tests[current_test].name, error_to_string(res), res, file, line, cmd); + exit(EXIT_FAILURE); + } +} + +void register_algs(void) +{ +#ifdef RIJNDAEL + register_cipher (&aes_desc); +#endif +#ifdef BLOWFISH + register_cipher (&blowfish_desc); +#endif +#ifdef XTEA + register_cipher (&xtea_desc); +#endif +#ifdef RC5 + register_cipher (&rc5_desc); +#endif +#ifdef RC6 + register_cipher (&rc6_desc); +#endif +#ifdef SAFERP + register_cipher (&saferp_desc); +#endif +#ifdef TWOFISH + register_cipher (&twofish_desc); +#endif +#ifdef SAFER + register_cipher (&safer_k64_desc); + register_cipher (&safer_sk64_desc); + register_cipher (&safer_k128_desc); + register_cipher (&safer_sk128_desc); +#endif +#ifdef RC2 + register_cipher (&rc2_desc); +#endif +#ifdef DES + register_cipher (&des_desc); + register_cipher (&des3_desc); +#endif +#ifdef CAST5 + register_cipher (&cast5_desc); +#endif +#ifdef NOEKEON + register_cipher (&noekeon_desc); +#endif +#ifdef SKIPJACK + register_cipher (&skipjack_desc); +#endif +#ifdef TIGER + register_hash (&tiger_desc); +#endif +#ifdef MD2 + register_hash (&md2_desc); +#endif +#ifdef MD4 + register_hash (&md4_desc); +#endif +#ifdef MD5 + register_hash (&md5_desc); +#endif +#ifdef SHA1 + register_hash (&sha1_desc); +#endif +#ifdef SHA256 + register_hash (&sha256_desc); +#endif +#ifdef SHA224 + register_hash (&sha224_desc); +#endif +#ifdef SHA384 + register_hash (&sha384_desc); +#endif +#ifdef SHA512 + register_hash (&sha512_desc); +#endif +#ifdef RIPEMD128 + register_hash (&rmd128_desc); +#endif +#ifdef RIPEMD160 + register_hash (&rmd160_desc); +#endif +#ifdef WHIRLPOOL + register_hash (&whirlpool_desc); +#endif + + if (register_prng(&yarrow_desc) == -1) { + printf("Error registering yarrow PRNG\n"); + exit(-1); + } + + if (register_prng(&sprng_desc) == -1) { + printf("Error registering sprng PRNG\n"); + exit(-1); + } +} + +/* sort tests based on their requirement/services. Helps make sure dependencies are tested first */ +void sort(void) +{ + unsigned x, y, z, a, pidx[26]; + + /* find out where things are provided */ + zeromem(pidx, sizeof(pidx)); + z = 0; + do { + y = 0; + for (x = 0; test_list[x].name != NULL; x++) { + if (test_list[x].entry == NULL) continue; + if (strlen(test_list[x].prov) == 0) { + y = 1; + tests[z++] = test_list[x]; test_list[x].entry = NULL; + pidx[test_list[x].prov[0]-'a'] = 1; + break; + } else { + for (a = 0; a < strlen(test_list[x].req); a++) { + if (pidx[test_list[x].req[a]-'a'] == 0) break; + } + if (a == strlen(test_list[x].req)) { + y = 1; + tests[z++] = test_list[x]; test_list[x].entry = NULL; + pidx[test_list[x].prov[0]-'a'] = 1; + break; + } + } + } + } while (y == 1); +} + +#define STACKBLOCK 8 +#define STACK_EST_USAGE 32768 + +unsigned char stack_mask[STACKBLOCK]; +unsigned long stack_cur=0; + +void stack_masker(void) +{ +#ifdef STACK_TEST + volatile unsigned char M[STACK_EST_USAGE]; + stack_cur = 0; + for (stack_cur = 0; stack_cur < STACK_EST_USAGE/STACKBLOCK; stack_cur++) { + memcpy(M+(stack_cur*STACKBLOCK), stack_mask, STACKBLOCK); + } +#endif +} + +void stack_check(void) +{ +#ifdef STACK_TEST + unsigned char M[STACK_EST_USAGE]; + stack_cur = 0; +#ifdef STACK_DOWN + while (memcmp(M+(STACK_EST_USAGE-STACKBLOCK-stack_cur), stack_mask, STACKBLOCK) && +#else + while (memcmp(M+stack_cur, stack_mask, STACKBLOCK) && +#endif + stack_cur < (STACK_EST_USAGE - STACKBLOCK)) { + ++stack_cur; + } +#endif +} + +int main(void) +{ + int x; + + /* setup stack checker */ + srand(time(NULL)); + for (x = 0; x < STACKBLOCK; x++) { + stack_mask[x] = rand() & 255; + } + stack_masker(); + + printf("Built with\n%s\n", crypt_build_settings); + + sort(); + register_algs(); + + // start dummy yarrow for internal use + DO(yarrow_start(&test_yarrow)); + DO(yarrow_add_entropy("test", 4, &test_yarrow)); + DO(yarrow_ready(&test_yarrow)); + + // output sizes + printf("Sizes of objects (in bytes)\n"); + printf("\tsymmetric_key\t=\t%5d\n", sizeof(symmetric_key)); + printf("\thash_state\t=\t%5d\n", sizeof(hash_state)); + printf("\thmac_state\t=\t%5d\n", sizeof(hmac_state)); + printf("\tomac_state\t=\t%5d\n", sizeof(omac_state)); + printf("\tpmac_state\t=\t%5d\n", sizeof(pmac_state)); + printf("\tocb_state\t=\t%5d\n", sizeof(ocb_state)); + printf("\teax_state\t=\t%5d\n", sizeof(eax_state)); + printf("\tmp_int\t\t=\t%5d\n", sizeof(mp_int)); + printf("\trsa_key\t\t=\t%5d\n", sizeof(rsa_key)); + printf("\tdsa_key\t\t=\t%5d\n", sizeof(dsa_key)); + printf("\tdh_key\t\t=\t%5d\n", sizeof(dh_key)); + printf("\tecc_key\t\t=\t%5d\n", sizeof(ecc_key)); + + printf("\n\n"); + // do tests + for (current_test = 0; tests[current_test].name != NULL; current_test++) { + printf("[%-20s]: ", tests[current_test].name); fflush(stdout); + printf("\t%s\n", tests[current_test].entry()==0?"passed":"failed"); + } + + return 0; +} diff --git a/demos/test/test.h b/demos/test/test.h new file mode 100644 index 00000000..44cdf923 --- /dev/null +++ b/demos/test/test.h @@ -0,0 +1,39 @@ +#ifndef __TEST_H_ +#define __TEST_H_ + +#include "mycrypt.h" + +/* enable stack testing */ +// #define STACK_TEST + +/* stack testing, define this if stack usage goes downwards [e.g. x86] */ +#define STACK_DOWN + +typedef struct { + char *name, *prov, *req; + int (*entry)(void); +} test_entry; + +extern prng_state test_yarrow; + + +void stack_masker(void); +void stack_check(void); +extern unsigned long stack_cur; +#define stack_chk(x) { stack_check(); if (stack_cur >= 1024) { fprintf(stderr, " Warning: Stack usage of %lu in %s, %s:%d\n", stack_cur, x, __FILE__, __LINE__); } } + +void run_cmd(int res, int line, char *file, char *cmd); +#define DO(x) { stack_masker(); run_cmd((x), __LINE__, __FILE__, #x); stack_chk(#x); } + +/* TESTS */ +int cipher_hash_test(void); +int modes_test(void); +int mac_test(void); +int pkcs_1_test(void); +int store_test(void); +int rsa_test(void); +int ecc_tests(void); +int dsa_test(void); +int dh_tests(void); + +#endif diff --git a/demos/timing.c b/demos/timing.c deleted file mode 100644 index d92cae95..00000000 --- a/demos/timing.c +++ /dev/null @@ -1,1652 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#if defined(_WIN32) - #define PRI64 "I64d" -#else - #define PRI64 "ll" -#endif - -static prng_state timing_prng; -static const char *timing_prng_name; -static int timing_prng_id; - -/* timing */ -#define KTIMES 25 -#define TIMES 100000 - -static const char *filter_arg; - -static LTC_INLINE int should_skip(const char *name) -{ - if (name && filter_arg && strstr(name, filter_arg) == NULL) - return 1; - return 0; -} - -static struct list { - int id; - ulong64 spd1, spd2, avg; -} results[100]; -static int no_results; - -static int sorter(const void *a, const void *b) -{ - const struct list *A, *B; - A = a; - B = b; - if (A->avg < B->avg) return -1; - if (A->avg > B->avg) return 1; - return 0; -} - -static void tally_results(int type) -{ - int x; - - /* qsort the results */ - qsort(results, no_results, sizeof(struct list), &sorter); - - fprintf(stderr, "\n"); - if (type == 0) { - for (x = 0; x < no_results; x++) { - fprintf(stderr, "%-20s: Schedule at %6lu\n", cipher_descriptor[results[x].id].name, (unsigned long)results[x].spd1); - } - } else if (type == 1) { - for (x = 0; x < no_results; x++) { - printf - ("%-20s[%3d]: Encrypt at %5"PRI64"u, Decrypt at %5"PRI64"u\n", cipher_descriptor[results[x].id].name, cipher_descriptor[results[x].id].ID, results[x].spd1, results[x].spd2); - } - } else { - for (x = 0; x < no_results; x++) { - printf - ("%-20s: Process at %5"PRI64"u\n", hash_descriptor[results[x].id].name, results[x].spd1 / 1000); - } - } -} - -/* RDTSC from Scott Duplichan */ -static LTC_INLINE ulong64 rdtsc (void) - { - #if defined __GNUC__ && !defined(LTC_NO_ASM) - #if defined(__i386__) || defined(__x86_64__) - /* version from http://www.mcs.anl.gov/~kazutomo/rdtsc.html - * the old code always got a warning issued by gcc, clang did not complain... - */ - unsigned hi, lo; - __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi)); - return ((ulong64)lo)|( ((ulong64)hi)<<32); - #elif defined(LTC_PPC32) || defined(TFM_PPC32) - unsigned long a, b; - __asm__ __volatile__ ("mftbu %1 \nmftb %0\n":"=r"(a), "=r"(b)); - return (((ulong64)b) << 32ULL) | ((ulong64)a); - #elif defined(__ia64__) /* gcc-IA64 version */ - unsigned long result; - __asm__ __volatile__("mov %0=ar.itc" : "=r"(result) :: "memory"); - while (__builtin_expect ((int) result == -1, 0)) - __asm__ __volatile__("mov %0=ar.itc" : "=r"(result) :: "memory"); - return result; - #elif defined(__sparc__) - #if defined(__arch64__) - ulong64 a; - asm volatile("rd %%tick,%0" : "=r" (a)); - return a; - #else - register unsigned long x, y; - __asm__ __volatile__ ("rd %%tick, %0; clruw %0, %1; srlx %0, 32, %0" : "=r" (x), "=r" (y) : "0" (x), "1" (y)); - return ((unsigned long long) x << 32) | y; - #endif - #elif defined(__aarch64__) - ulong64 CNTVCT_EL0; - __asm__ __volatile__ ("mrs %0, cntvct_el0" : "=r"(CNTVCT_EL0)); - return CNTVCT_EL0; - #else - return XCLOCK(); - #endif - - /* Microsoft and Intel Windows compilers */ - #elif defined _M_IX86 && !defined(LTC_NO_ASM) - __asm rdtsc - #elif defined _M_AMD64 && !defined(LTC_NO_ASM) - return __rdtsc (); - #elif defined _M_IA64 && !defined(LTC_NO_ASM) - #if defined __INTEL_COMPILER - #include - #endif - return __getReg (3116); - #else - return XCLOCK(); - #endif - } - -static ulong64 timer, skew = 0; - -static LTC_INLINE void t_start(void) -{ - timer = rdtsc(); -} - -static LTC_INLINE ulong64 t_read(void) -{ - return rdtsc() - timer; -} - -static void init_timer(void) -{ - ulong64 c1, c2, t1, t2; - unsigned long y1; - - c1 = c2 = (ulong64)-1; - for (y1 = 0; y1 < TIMES*100; y1++) { - t_start(); - t1 = t_read(); - t2 = (t_read() - t1)>>1; - - c1 = (t1 > c1) ? t1 : c1; - c2 = (t2 > c2) ? t2 : c2; - } - skew = c2 - c1; - fprintf(stderr, "Clock Skew: %lu\n", (unsigned long)skew); -} - -static void time_keysched(void) -{ - unsigned long x, y1; - ulong64 t1, c1; - symmetric_key skey; - int kl; - int (*func) (const unsigned char *, int , int , symmetric_key *); - unsigned char key[MAXBLOCKSIZE]; - - fprintf(stderr, "\n\nKey Schedule Time Trials for the Symmetric Ciphers:\n(Times are cycles per key)\n"); - no_results = 0; - for (x = 0; cipher_descriptor[x].name != NULL; x++) { -#define DO1(k) func(k, kl, 0, &skey); - - func = cipher_descriptor[x].setup; - kl = cipher_descriptor[x].min_key_length; - c1 = (ulong64)-1; - for (y1 = 0; y1 < KTIMES; y1++) { - prng_descriptor[timing_prng_id].read(key, kl, &timing_prng); - t_start(); - DO1(key); - t1 = t_read(); - c1 = (t1 > c1) ? c1 : t1; - } - t1 = c1 - skew; - results[no_results].spd1 = results[no_results].avg = t1; - results[no_results++].id = x; - fprintf(stderr, "."); fflush(stdout); - -#undef DO1 - } - tally_results(0); -} - -#ifdef LTC_ECB_MODE -static void time_cipher_ecb(void) -{ - unsigned long x, y1; - ulong64 t1, t2, c1, c2, a1, a2; - symmetric_ECB ecb; - unsigned char key[MAXBLOCKSIZE] = { 0 }, pt[4096] = { 0 }; - int err; - - fprintf(stderr, "\n\nECB Time Trials for the Symmetric Ciphers:\n"); - no_results = 0; - for (x = 0; cipher_descriptor[x].name != NULL; x++) { - if (should_skip(cipher_descriptor[x].name)) - continue; - - ecb_start(x, key, cipher_descriptor[x].min_key_length, 0, &ecb); - - /* sanity check on cipher */ - if ((err = cipher_descriptor[x].test()) != CRYPT_OK) { - fprintf(stderr, "\n\nERROR: Cipher %s failed self-test %s\n", cipher_descriptor[x].name, error_to_string(err)); - exit(EXIT_FAILURE); - } - -#define DO1 ecb_encrypt(pt, pt, sizeof(pt), &ecb); -#define DO2 DO1 DO1 - - c1 = c2 = (ulong64)-1; - for (y1 = 0; y1 < 100; y1++) { - t_start(); - DO1; - t1 = t_read(); - DO2; - t2 = t_read(); - t2 -= t1; - - c1 = (t1 > c1 ? c1 : t1); - c2 = (t2 > c2 ? c2 : t2); - } - a1 = c2 - c1 - skew; - -#undef DO1 -#undef DO2 -#define DO1 ecb_decrypt(pt, pt, sizeof(pt), &ecb); -#define DO2 DO1 DO1 - - c1 = c2 = (ulong64)-1; - for (y1 = 0; y1 < 100; y1++) { - t_start(); - DO1; - t1 = t_read(); - DO2; - t2 = t_read(); - t2 -= t1; - - c1 = (t1 > c1 ? c1 : t1); - c2 = (t2 > c2 ? c2 : t2); - } - a2 = c2 - c1 - skew; - ecb_done(&ecb); - - results[no_results].id = x; - results[no_results].spd1 = a1/(sizeof(pt)/cipher_descriptor[x].block_length); - results[no_results].spd2 = a2/(sizeof(pt)/cipher_descriptor[x].block_length); - results[no_results].avg = (results[no_results].spd1 + results[no_results].spd2+1)/2; - ++no_results; - fprintf(stderr, "."); fflush(stdout); - -#undef DO2 -#undef DO1 - } - tally_results(1); -} -#else -static void time_cipher_ecb(void) { fprintf(stderr, "NO ECB\n"); return 0; } -#endif - -#ifdef LTC_CBC_MODE -static void time_cipher_cbc(void) -{ - unsigned long x, y1; - ulong64 t1, t2, c1, c2, a1, a2; - symmetric_CBC cbc; - unsigned char key[MAXBLOCKSIZE] = { 0 }, pt[4096] = { 0 }; - int err; - - fprintf(stderr, "\n\nCBC Time Trials for the Symmetric Ciphers:\n"); - no_results = 0; - for (x = 0; cipher_descriptor[x].name != NULL; x++) { - if (should_skip(cipher_descriptor[x].name)) - continue; - - cbc_start(x, pt, key, cipher_descriptor[x].min_key_length, 0, &cbc); - - /* sanity check on cipher */ - if ((err = cipher_descriptor[x].test()) != CRYPT_OK) { - fprintf(stderr, "\n\nERROR: Cipher %s failed self-test %s\n", cipher_descriptor[x].name, error_to_string(err)); - exit(EXIT_FAILURE); - } - -#define DO1 cbc_encrypt(pt, pt, sizeof(pt), &cbc); -#define DO2 DO1 DO1 - - c1 = c2 = (ulong64)-1; - for (y1 = 0; y1 < 100; y1++) { - t_start(); - DO1; - t1 = t_read(); - DO2; - t2 = t_read(); - t2 -= t1; - - c1 = (t1 > c1 ? c1 : t1); - c2 = (t2 > c2 ? c2 : t2); - } - a1 = c2 - c1 - skew; - -#undef DO1 -#undef DO2 -#define DO1 cbc_decrypt(pt, pt, sizeof(pt), &cbc); -#define DO2 DO1 DO1 - - c1 = c2 = (ulong64)-1; - for (y1 = 0; y1 < 100; y1++) { - t_start(); - DO1; - t1 = t_read(); - DO2; - t2 = t_read(); - t2 -= t1; - - c1 = (t1 > c1 ? c1 : t1); - c2 = (t2 > c2 ? c2 : t2); - } - a2 = c2 - c1 - skew; - cbc_done(&cbc); - - results[no_results].id = x; - results[no_results].spd1 = a1/(sizeof(pt)/cipher_descriptor[x].block_length); - results[no_results].spd2 = a2/(sizeof(pt)/cipher_descriptor[x].block_length); - results[no_results].avg = (results[no_results].spd1 + results[no_results].spd2+1)/2; - ++no_results; - fprintf(stderr, "."); fflush(stdout); - -#undef DO2 -#undef DO1 - } - tally_results(1); -} -#else -static void time_cipher_cbc(void) { fprintf(stderr, "NO CBC\n"); return 0; } -#endif - -#ifdef LTC_CTR_MODE -static void time_cipher_ctr(void) -{ - unsigned long x, y1; - ulong64 t1, t2, c1, c2, a1, a2; - symmetric_CTR ctr; - unsigned char key[MAXBLOCKSIZE] = { 0 }, pt[4096] = { 0 }; - int err; - - fprintf(stderr, "\n\nCTR Time Trials for the Symmetric Ciphers:\n"); - no_results = 0; - for (x = 0; cipher_descriptor[x].name != NULL; x++) { - if (should_skip(cipher_descriptor[x].name)) - continue; - - ctr_start(x, pt, key, cipher_descriptor[x].min_key_length, 0, CTR_COUNTER_LITTLE_ENDIAN, &ctr); - - /* sanity check on cipher */ - if ((err = cipher_descriptor[x].test()) != CRYPT_OK) { - fprintf(stderr, "\n\nERROR: Cipher %s failed self-test %s\n", cipher_descriptor[x].name, error_to_string(err)); - exit(EXIT_FAILURE); - } - -#define DO1 ctr_encrypt(pt, pt, sizeof(pt), &ctr); -#define DO2 DO1 DO1 - - c1 = c2 = (ulong64)-1; - for (y1 = 0; y1 < 100; y1++) { - t_start(); - DO1; - t1 = t_read(); - DO2; - t2 = t_read(); - t2 -= t1; - - c1 = (t1 > c1 ? c1 : t1); - c2 = (t2 > c2 ? c2 : t2); - } - a1 = c2 - c1 - skew; - -#undef DO1 -#undef DO2 -#define DO1 ctr_decrypt(pt, pt, sizeof(pt), &ctr); -#define DO2 DO1 DO1 - - c1 = c2 = (ulong64)-1; - for (y1 = 0; y1 < 100; y1++) { - t_start(); - DO1; - t1 = t_read(); - DO2; - t2 = t_read(); - t2 -= t1; - - c1 = (t1 > c1 ? c1 : t1); - c2 = (t2 > c2 ? c2 : t2); - } - a2 = c2 - c1 - skew; - ctr_done(&ctr); - - results[no_results].id = x; - results[no_results].spd1 = a1/(sizeof(pt)/cipher_descriptor[x].block_length); - results[no_results].spd2 = a2/(sizeof(pt)/cipher_descriptor[x].block_length); - results[no_results].avg = (results[no_results].spd1 + results[no_results].spd2+1)/2; - ++no_results; - fprintf(stderr, "."); fflush(stdout); - -#undef DO2 -#undef DO1 - } - tally_results(1); -} -#else -static void time_cipher_ctr(void) { fprintf(stderr, "NO CTR\n"); return 0; } -#endif - -#ifdef LTC_LRW_MODE -static void time_cipher_lrw(void) -{ - unsigned long x, y1; - ulong64 t1, t2, c1, c2, a1, a2; - symmetric_LRW lrw; - unsigned char key[MAXBLOCKSIZE] = { 0 }, pt[4096] = { 0 }; - int err; - - fprintf(stderr, "\n\nLRW Time Trials for the Symmetric Ciphers:\n"); - no_results = 0; - for (x = 0; cipher_descriptor[x].name != NULL; x++) { - if (cipher_descriptor[x].block_length != 16) continue; - if (should_skip(cipher_descriptor[x].name)) - continue; - - lrw_start(x, pt, key, cipher_descriptor[x].min_key_length, key, 0, &lrw); - - /* sanity check on cipher */ - if ((err = cipher_descriptor[x].test()) != CRYPT_OK) { - fprintf(stderr, "\n\nERROR: Cipher %s failed self-test %s\n", cipher_descriptor[x].name, error_to_string(err)); - exit(EXIT_FAILURE); - } - -#define DO1 lrw_encrypt(pt, pt, sizeof(pt), &lrw); -#define DO2 DO1 DO1 - - c1 = c2 = (ulong64)-1; - for (y1 = 0; y1 < 100; y1++) { - t_start(); - DO1; - t1 = t_read(); - DO2; - t2 = t_read(); - t2 -= t1; - - c1 = (t1 > c1 ? c1 : t1); - c2 = (t2 > c2 ? c2 : t2); - } - a1 = c2 - c1 - skew; - -#undef DO1 -#undef DO2 -#define DO1 lrw_decrypt(pt, pt, sizeof(pt), &lrw); -#define DO2 DO1 DO1 - - c1 = c2 = (ulong64)-1; - for (y1 = 0; y1 < 100; y1++) { - t_start(); - DO1; - t1 = t_read(); - DO2; - t2 = t_read(); - t2 -= t1; - - c1 = (t1 > c1 ? c1 : t1); - c2 = (t2 > c2 ? c2 : t2); - } - a2 = c2 - c1 - skew; - - lrw_done(&lrw); - - results[no_results].id = x; - results[no_results].spd1 = a1/(sizeof(pt)/cipher_descriptor[x].block_length); - results[no_results].spd2 = a2/(sizeof(pt)/cipher_descriptor[x].block_length); - results[no_results].avg = (results[no_results].spd1 + results[no_results].spd2+1)/2; - ++no_results; - fprintf(stderr, "."); fflush(stdout); - -#undef DO2 -#undef DO1 - } - tally_results(1); -} -#else -static void time_cipher_lrw(void) { fprintf(stderr, "NO LRW\n"); } -#endif - - -static void time_hash(void) -{ - unsigned long x, y1, len = 1024; - ulong64 t1, t2, c1, c2; - hash_state md; - int (*func)(hash_state *, const unsigned char *, unsigned long), err; - unsigned char *pt = XMALLOC(len); - if (pt == NULL) { - fprintf(stderr, "\n\nout of heap yo\n\n"); - exit(EXIT_FAILURE); - } - - fprintf(stderr, "\n\nHASH Time Trials for:\n"); - no_results = 0; - for (x = 0; hash_descriptor[x].name != NULL; x++) { - if (should_skip(hash_descriptor[x].name)) - continue; - - /* sanity check on hash */ - if ((err = hash_descriptor[x].test()) != CRYPT_OK) { - fprintf(stderr, "\n\nERROR: Hash %s failed self-test %s\n", hash_descriptor[x].name, error_to_string(err)); - XFREE(pt); - exit(EXIT_FAILURE); - } - - hash_descriptor[x].init(&md); - -#define DO1 func(&md,pt,len); -#define DO2 DO1 DO1 - - func = hash_descriptor[x].process; - - c1 = c2 = (ulong64)-1; - for (y1 = 0; y1 < TIMES; y1++) { - t_start(); - DO1; - t1 = t_read(); - DO2; - t2 = t_read() - t1; - c1 = (t1 > c1) ? c1 : t1; - c2 = (t2 > c2) ? c2 : t2; - } - t1 = c2 - c1 - skew; - t1 = ((t1 * CONST64(1000))) / ((ulong64)hash_descriptor[x].blocksize); - results[no_results].id = x; - results[no_results].spd1 = results[no_results].avg = t1; - ++no_results; - fprintf(stderr, "."); fflush(stdout); -#undef DO2 -#undef DO1 - } - tally_results(2); - XFREE(pt); -} - -/*#warning you need an mp_rand!!!*/ - -static void time_mult(void) -{ - ulong64 t1, t2; - unsigned long x, y; - void *a, *b, *c; - - if (ltc_mp.name == NULL) return; - - fprintf(stderr, "Timing Multiplying:\n"); - ltc_mp_init_multi(&a,&b,&c,NULL); - for (x = 128/LTC_MP_DIGIT_BIT; x <= (unsigned long)1536/LTC_MP_DIGIT_BIT; x += 128/LTC_MP_DIGIT_BIT) { - ltc_mp_rand(a, x); - ltc_mp_rand(b, x); - -#define DO1 ltc_mp_mul(a, b, c); -#define DO2 DO1; DO1; - - t2 = -1; - for (y = 0; y < TIMES; y++) { - t_start(); - t1 = t_read(); - DO2; - t1 = (t_read() - t1)>>1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "%4lu bits: %9"PRI64"u cycles\n", x*LTC_MP_DIGIT_BIT, t2); - } - ltc_mp_deinit_multi(a,b,c,NULL); - -#undef DO1 -#undef DO2 -} - -static void time_sqr(void) -{ - ulong64 t1, t2; - unsigned long x, y; - void *a, *b; - - if (ltc_mp.name == NULL) return; - - fprintf(stderr, "Timing Squaring:\n"); - ltc_mp_init_multi(&a,&b,NULL); - for (x = 128/LTC_MP_DIGIT_BIT; x <= (unsigned long)1536/LTC_MP_DIGIT_BIT; x += 128/LTC_MP_DIGIT_BIT) { - ltc_mp_rand(a, x); - -#define DO1 ltc_mp_sqr(a, b); -#define DO2 DO1; DO1; - - t2 = -1; - for (y = 0; y < TIMES; y++) { - t_start(); - t1 = t_read(); - DO2; - t1 = (t_read() - t1)>>1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "%4lu bits: %9"PRI64"u cycles\n", x*LTC_MP_DIGIT_BIT, t2); - } - ltc_mp_deinit_multi(a,b,NULL); - -#undef DO1 -#undef DO2 -} - -static void time_prng(void) -{ - ulong64 t1, t2; - unsigned char buf[4096]; - prng_state tprng; - unsigned long x, y; - int err; - - fprintf(stderr, "Timing PRNGs - cycles/byte output, cycles add_entropy (32 bytes) :\n"); - for (x = 0; prng_descriptor[x].name != NULL; x++) { - if (should_skip(prng_descriptor[x].name)) - continue; - - /* sanity check on prng */ - if ((err = prng_descriptor[x].test()) != CRYPT_OK) { - fprintf(stderr, "\n\nERROR: PRNG %s failed self-test %s\n", prng_descriptor[x].name, error_to_string(err)); - exit(EXIT_FAILURE); - } - - prng_descriptor[x].start(&tprng); - zeromem(buf, 256); - prng_descriptor[x].add_entropy(buf, 256, &tprng); - prng_descriptor[x].ready(&tprng); - t2 = -1; - -#define DO1 if (prng_descriptor[x].read(buf, 4096, &tprng) != 4096) { fprintf(stderr, "\n\nERROR READ != 4096\n\n"); exit(EXIT_FAILURE); } -#define DO2 DO1 DO1 - for (y = 0; y < 10000; y++) { - t_start(); - t1 = t_read(); - DO2; - t1 = (t_read() - t1)>>1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "%20s: %5"PRI64"u, ", prng_descriptor[x].name, t2>>12); -#undef DO2 -#undef DO1 - -#define DO1 prng_descriptor[x].start(&tprng); prng_descriptor[x].add_entropy(buf, 32, &tprng); prng_descriptor[x].ready(&tprng); prng_descriptor[x].done(&tprng); -#define DO2 DO1 DO1 - for (y = 0; y < 10000; y++) { - t_start(); - t1 = t_read(); - DO2; - t1 = (t_read() - t1)>>1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "%5"PRI64"u\n", t2); -#undef DO2 -#undef DO1 - - } -} - -#if defined(LTC_MDSA) -/* time various DSA operations */ -static void time_dsa(void) -{ - dsa_key key; - ulong64 t1, t2; - unsigned long x, y; - int err; -static const struct { - int group, modulus; -} groups[] = { -{ 20, 96 }, -{ 20, 128 }, -{ 24, 192 }, -{ 28, 256 }, -#ifndef TFM_DESC -{ 32, 512 }, -#endif -}; - - if (ltc_mp.name == NULL) return; - - for (x = 0; x < LTC_ARRAY_SIZE(groups); x++) { - t2 = 0; - for (y = 0; y < 4; y++) { - t_start(); - t1 = t_read(); - if ((err = dsa_generate_pqg(&timing_prng, timing_prng_id, groups[x].group, groups[x].modulus, &key)) != CRYPT_OK) { - fprintf(stderr, "\n\ndsa_generate_pqg says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); - exit(EXIT_FAILURE); - } - if ((err = dsa_generate_key(&timing_prng, timing_prng_id, &key)) != CRYPT_OK) { - fprintf(stderr, "\n\ndsa_make_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - t2 += t1; - -#ifdef LTC_PROFILE - t2 <<= 2; - break; -#endif - if (y < 3) { - dsa_free(&key); - } - } - t2 >>= 2; - fprintf(stderr, "DSA-(%lu, %lu) make_key took %15"PRI64"u cycles\n", (unsigned long)groups[x].group*8, (unsigned long)groups[x].modulus*8, t2); - dsa_free(&key); - } - fprintf(stderr, "\n\n"); -} -#else -static void time_dsa(void) { fprintf(stderr, "NO DSA\n"); } -#endif - - -#if defined(LTC_MRSA) -/* time various RSA operations */ -static void time_rsa(void) -{ - rsa_key key; - ulong64 t1, t2; - unsigned char buf[2][2048] = { 0 }; - unsigned long x, y, z, zzz; - int err, zz, stat; - ltc_rsa_op_parameters rsa_params = { - .u.crypt.lparam = (const unsigned char *)"testprog", - .u.crypt.lparamlen = 8, - .prng = &timing_prng, - .wprng = timing_prng_id, - .params.hash_idx = find_hash("sha1"), - .params.mgf1_hash_idx = find_hash("sha1"), - .params.saltlen = 8, - }; - - if (ltc_mp.name == NULL) return; - - for (x = 2048; x <= 8192; x <<= 1) { - t2 = 0; - rsa_params.padding = LTC_PKCS_1_OAEP; - for (y = 0; y < 4; y++) { - t_start(); - t1 = t_read(); - if ((err = rsa_make_key(&timing_prng, timing_prng_id, x/8, 65537, &key)) != CRYPT_OK) { - fprintf(stderr, "\n\nrsa_make_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - t2 += t1; - -#ifdef LTC_PROFILE - t2 <<= 2; - break; -#endif - - if (y < 3) { - rsa_free(&key); - } - } - t2 >>= 2; - fprintf(stderr, "RSA-%lu make_key took %15"PRI64"u cycles\n", x, t2); - - t2 = 0; - for (y = 0; y < 16; y++) { - t_start(); - t1 = t_read(); - z = sizeof(buf[1]); - if ((err = rsa_encrypt_key_v2(buf[0], 32, buf[1], &z, &rsa_params, &key)) != CRYPT_OK) { - fprintf(stderr, "\n\nrsa_encrypt_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - t2 += t1; -#ifdef LTC_PROFILE - t2 <<= 4; - break; -#endif - } - t2 >>= 4; - fprintf(stderr, "RSA-%lu encrypt_key took %15"PRI64"u cycles\n", x, t2); - - t2 = 0; - for (y = 0; y < 2048; y++) { - t_start(); - t1 = t_read(); - zzz = sizeof(buf[0]); - if ((err = rsa_decrypt_key_v2(buf[1], z, buf[0], &zzz, &rsa_params, &zz, &key)) != CRYPT_OK) { - fprintf(stderr, "\n\nrsa_decrypt_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - t2 += t1; -#ifdef LTC_PROFILE - t2 <<= 11; - break; -#endif - } - t2 >>= 11; - fprintf(stderr, "RSA-%lu decrypt_key took %15"PRI64"u cycles\n", x, t2); - - t2 = 0; - rsa_params.padding = LTC_PKCS_1_PSS; - for (y = 0; y < 256; y++) { - t_start(); - t1 = t_read(); - z = sizeof(buf[1]); - if ((err = rsa_sign_hash_v2(buf[0], 20, buf[1], &z, &rsa_params, &key)) != CRYPT_OK) { - fprintf(stderr, "\n\nrsa_sign_hash says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - t2 += t1; -#ifdef LTC_PROFILE - t2 <<= 8; - break; -#endif - } - t2 >>= 8; - fprintf(stderr, "RSA-%lu sign_hash took %15"PRI64"u cycles\n", x, t2); - - t2 = 0; - for (y = 0; y < 2048; y++) { - t_start(); - t1 = t_read(); - if ((err = rsa_verify_hash_v2(buf[1], z, buf[0], 20, &rsa_params, &stat, &key)) != CRYPT_OK) { - fprintf(stderr, "\n\nrsa_verify_hash says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); - exit(EXIT_FAILURE); - } - if (stat == 0) { - fprintf(stderr, "\n\nrsa_verify_hash for RSA-%lu failed to verify signature(%lu)\n", x, y); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - t2 += t1; -#ifdef LTC_PROFILE - t2 <<= 11; - break; -#endif - } - t2 >>= 11; - fprintf(stderr, "RSA-%lu verify_hash took %15"PRI64"u cycles\n", x, t2); - fprintf(stderr, "\n\n"); - rsa_free(&key); - } -} -#else -static void time_rsa(void) { fprintf(stderr, "NO RSA\n"); } -#endif - -#if defined(LTC_MDH) -/* time various DH operations */ -static void time_dh(void) -{ - dh_key key; - ulong64 t1, t2; - unsigned long i, x, y; - int err; - static unsigned long sizes[] = {768/8, 1024/8, 1536/8, 2048/8, -#ifndef TFM_DESC - 3072/8, 4096/8, 6144/8, 8192/8, -#endif - 100000 - }; - - if (ltc_mp.name == NULL) return; - - for (x = sizes[i=0]; x < 100000; x = sizes[++i]) { - t2 = 0; - for (y = 0; y < 16; y++) { - if((err = dh_set_pg_groupsize(x, &key)) != CRYPT_OK) { - fprintf(stderr, "\n\ndh_set_pg_groupsize says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); - exit(EXIT_FAILURE); - } - - t_start(); - t1 = t_read(); - if ((err = dh_generate_key(&timing_prng, timing_prng_id, &key)) != CRYPT_OK) { - fprintf(stderr, "\n\ndh_make_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - t2 += t1; - - dh_free(&key); - } - t2 >>= 4; - fprintf(stderr, "DH-%4lu make_key took %15"PRI64"u cycles\n", x*8, t2); - } -} -#else -static void time_dh(void) { fprintf(stderr, "NO DH\n"); } -#endif - -#if defined(LTC_MECC) -/* time various ECC operations */ -static void time_ecc(void) -{ - ecc_key key; - ulong64 t1, t2; - unsigned char buf[2][256] = { 0 }; - unsigned long i, w, x, y, z; - int err, stat, hashidx; - const unsigned long sizes[] = { -#ifdef LTC_ECC_SECP112R1 -112/8, -#endif -#ifdef LTC_ECC_SECP128R1 -128/8, -#endif -#ifdef LTC_ECC_SECP160R1 -160/8, -#endif -#ifdef LTC_ECC_SECP192R1 -192/8, -#endif -#ifdef LTC_ECC_SECP224R1 -224/8, -#endif -#ifdef LTC_ECC_SECP256R1 -256/8, -#endif -#ifdef LTC_ECC_SECP384R1 -384/8, -#endif -#ifdef LTC_ECC_SECP521R1 -521/8, -#endif -100000}; - prng_state ecc_prng; - ltc_ecc_sig_opts sig_opts = { - .type = LTC_ECCSIG_RFC7518, - .prng = &ecc_prng, - .wprng = timing_prng_id - }; - const unsigned char prng_entropy[] = { - 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, - 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, - 0x1f, 0x20, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, - 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, - 0x1d, 0x1e, 0x1f, 0x20 - }; - if ((err = prng_descriptor[timing_prng_id].pimport(prng_entropy, sizeof(prng_entropy), &ecc_prng)) != CRYPT_OK) { - fprintf(stderr, "\n\nprng.import() says %s!\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - if ((err = prng_descriptor[timing_prng_id].ready(&ecc_prng)) != CRYPT_OK) { - fprintf(stderr, "\n\nprng.ready() says %s!\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - - if (ltc_mp.name == NULL) return; - hashidx = find_hash("sha1"); - - for (x = sizes[i=0]; x < 100000; x = sizes[++i]) { - t2 = 0; - for (y = 0; y < 256; y++) { - t_start(); - t1 = t_read(); - if ((err = ecc_make_key(sig_opts.prng, sig_opts.wprng, x, &key)) != CRYPT_OK) { - fprintf(stderr, "\n\necc_make_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - t2 += t1; - -#ifdef LTC_PROFILE - t2 <<= 8; - break; -#endif - - if (y < 255) { - ecc_free(&key); - } - } - t2 >>= 8; - fprintf(stderr, "ECC-%lu make_key took %15"PRI64"u cycles\n", x*8, t2); - - t2 = 0; - for (y = 0; y < 256; y++) { - t_start(); - t1 = t_read(); - z = sizeof(buf[1]); - if ((err = ecc_encrypt_key(buf[0], 20, buf[1], &z, sig_opts.prng, sig_opts.wprng, hashidx, - &key)) != CRYPT_OK) { - fprintf(stderr, "\n\necc_encrypt_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - t2 += t1; -#ifdef LTC_PROFILE - t2 <<= 8; - break; -#endif - } - t2 >>= 8; - fprintf(stderr, "ECC-%lu encrypt_key took %15"PRI64"u cycles\n", x*8, t2); - - - t2 = 0; - for (y = 0; y < 256; y++) { - t_start(); - t1 = t_read(); - w = 20; - if ((err = ecc_decrypt_key(buf[1], z, buf[0], &w, &key)) != CRYPT_OK) { - fprintf(stderr, "\n\necc_decrypt_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - t2 += t1; -#ifdef LTC_PROFILE - t2 <<= 8; - break; -#endif - } - t2 >>= 8; - fprintf(stderr, "ECC-%lu decrypt_key took %15"PRI64"u cycles\n", x*8, t2); - - t2 = 0; - for (y = 0; y < 256; y++) { - t_start(); - t1 = t_read(); - z = sizeof(buf[1]); - if ((err = ecc_sign_hash_v2(buf[0], 20, buf[1], &z, &sig_opts, &key)) != CRYPT_OK) { - fprintf(stderr, "\n\necc_sign_hash says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - t2 += t1; -#ifdef LTC_PROFILE - t2 <<= 8; - break; -#endif - } - t2 >>= 8; - fprintf(stderr, "ECC-%lu sign_hash took %15"PRI64"u cycles\n", x*8, t2); - - t2 = 0; - for (y = 0; y < 256; y++) { - t_start(); - t1 = t_read(); - if ((err = ecc_verify_hash_v2(buf[1], z, buf[0], 20, &sig_opts, &stat, &key)) != CRYPT_OK) { - fprintf(stderr, "\n\necc_verify_hash says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK)); - exit(EXIT_FAILURE); - } - if (stat == 0) { - fprintf(stderr, "\n\necc_verify_hash for ECC-%lu failed to verify signature(%lu)\n", x*8, y); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - t2 += t1; -#ifdef LTC_PROFILE - t2 <<= 8; - break; -#endif - } - t2 >>= 8; - fprintf(stderr, "ECC-%lu verify_hash took %15"PRI64"u cycles\n", x*8, t2); - - fprintf(stderr, "\n\n"); - ecc_free(&key); - } -} -#else -static void time_ecc(void) { fprintf(stderr, "NO ECC\n"); } -#endif - -typedef struct mac_ctx { - unsigned char *buf, key[32], tag[16]; - unsigned long size; - int cipher_idx, hash_idx; -} mac_ctx; - -#ifdef LTC_OMAC -static void time_omac(mac_ctx *ctx) -{ - ulong64 t1, t2; - unsigned long x, z; - int err; - - t2 = -1; - for (x = 0; x < 10000; x++) { - t_start(); - t1 = t_read(); - z = 16; - if ((err = omac_memory(ctx->cipher_idx, ctx->key, 16, ctx->buf, ctx->size, ctx->tag, &z)) != CRYPT_OK) { - fprintf(stderr, "\n\nomac-%s error... %s\n", cipher_descriptor[ctx->cipher_idx].name, error_to_string(err)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "OMAC-%s\t\t%9"PRI64"u\n", cipher_descriptor[ctx->cipher_idx].name, t2/(ulong64)(ctx->size)); -} -#endif - -#ifdef LTC_XCBC -static void time_xcbc(mac_ctx *ctx) -{ - ulong64 t1, t2; - unsigned long x, z; - int err; - - t2 = -1; - for (x = 0; x < 10000; x++) { - t_start(); - t1 = t_read(); - z = 16; - if ((err = xcbc_memory(ctx->cipher_idx, ctx->key, 16, ctx->buf, ctx->size, ctx->tag, &z)) != CRYPT_OK) { - fprintf(stderr, "\n\nxcbc-%s error... %s\n", cipher_descriptor[ctx->cipher_idx].name, error_to_string(err)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "XCBC-%s\t\t%9"PRI64"u\n", cipher_descriptor[ctx->cipher_idx].name, t2/(ulong64)(ctx->size)); -} -#endif - -#ifdef LTC_F9_MODE -static void time_f9(mac_ctx *ctx) -{ - ulong64 t1, t2; - unsigned long x, z; - int err; - - t2 = -1; - for (x = 0; x < 10000; x++) { - t_start(); - t1 = t_read(); - z = 16; - if ((err = f9_memory(ctx->cipher_idx, ctx->key, 16, ctx->buf, ctx->size, ctx->tag, &z)) != CRYPT_OK) { - fprintf(stderr, "\n\nF9-%s error... %s\n", cipher_descriptor[ctx->cipher_idx].name, error_to_string(err)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "F9-%s\t\t\t%9"PRI64"u\n", cipher_descriptor[ctx->cipher_idx].name, t2/(ulong64)(ctx->size)); -} -#endif - -#ifdef LTC_PMAC -static void time_pmac(mac_ctx *ctx) -{ - ulong64 t1, t2; - unsigned long x, z; - int err; - - t2 = -1; - for (x = 0; x < 10000; x++) { - t_start(); - t1 = t_read(); - z = 16; - if ((err = pmac_memory(ctx->cipher_idx, ctx->key, 16, ctx->buf, ctx->size, ctx->tag, &z)) != CRYPT_OK) { - fprintf(stderr, "\n\npmac-%s error... %s\n", cipher_descriptor[ctx->cipher_idx].name, error_to_string(err)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "PMAC-%s\t\t%9"PRI64"u\n", cipher_descriptor[ctx->cipher_idx].name, t2/(ulong64)(ctx->size)); -} -#endif - -#ifdef LTC_PELICAN -static void time_pelican(mac_ctx *ctx) -{ - ulong64 t1, t2; - unsigned long x; - int err; - - t2 = -1; - for (x = 0; x < 10000; x++) { - t_start(); - t1 = t_read(); - if ((err = pelican_memory(ctx->key, 16, ctx->buf, ctx->size, ctx->tag)) != CRYPT_OK) { - fprintf(stderr, "\n\npelican error... %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "PELICAN \t\t%9"PRI64"u\n", t2/(ulong64)(ctx->size)); -} -#endif - -#ifdef LTC_HMAC -static void time_hmac(mac_ctx *ctx) -{ - ulong64 t1, t2; - unsigned long x, z; - int err; - - t2 = -1; - for (x = 0; x < 10000; x++) { - t_start(); - t1 = t_read(); - z = 16; - if ((err = hmac_memory(ctx->hash_idx, ctx->key, 16, ctx->buf, ctx->size, ctx->tag, &z)) != CRYPT_OK) { - fprintf(stderr, "\n\nhmac-%s error... %s\n", hash_descriptor[ctx->hash_idx].name, error_to_string(err)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "HMAC-%s\t\t%9"PRI64"u\n", hash_descriptor[ctx->hash_idx].name, t2/(ulong64)(ctx->size)); -} -#endif - -static void time_macs_(unsigned long MAC_SIZE) -{ -#if defined(LTC_OMAC) || defined(LTC_XCBC) || defined(LTC_F9_MODE) || defined(LTC_PMAC) || defined(LTC_PELICAN) || defined(LTC_HMAC) - mac_ctx ctx; - struct { - const char *name; - void (*time_fun)(mac_ctx*); - } time_funs[] = { -#define TIME_FUN(n) { #n, time_ ## n } -#ifdef LTC_OMAC - TIME_FUN(omac), -#endif -#ifdef LTC_XCBC - TIME_FUN(xcbc), -#endif -#ifdef LTC_F9_MODE - TIME_FUN(f9), -#endif -#ifdef LTC_PMAC - TIME_FUN(pmac), -#endif -#ifdef LTC_PELICAN - TIME_FUN(pelican), -#endif -#ifdef LTC_HMAC - TIME_FUN(hmac), -#endif -#undef TIME_FUN - }; - unsigned long n; - - fprintf(stderr, "\nMAC Timings (cycles/byte on %luKB blocks):\n", MAC_SIZE); - - ctx.size = MAC_SIZE*1024; - ctx.buf = XMALLOC(ctx.size); - if (ctx.buf == NULL) { - fprintf(stderr, "\n\nout of heap yo\n\n"); - exit(EXIT_FAILURE); - } - - ctx.cipher_idx = find_cipher("aes"); - ctx.hash_idx = find_hash("sha1"); - - if (ctx.cipher_idx == -1 || ctx.hash_idx == -1) { - fprintf(stderr, "Warning the MAC tests requires AES and SHA1 to operate... so sorry\n"); - exit(EXIT_FAILURE); - } - - prng_descriptor[timing_prng_id].read(ctx.buf, ctx.size, &timing_prng); - prng_descriptor[timing_prng_id].read(ctx.key, sizeof(ctx.key), &timing_prng); - - for (n = 0; n < LTC_ARRAY_SIZE(time_funs); ++n) { - if (!should_skip(time_funs[n].name)) - time_funs[n].time_fun(&ctx); - } - - XFREE(ctx.buf); -#else - LTC_UNUSED_PARAM(MAC_SIZE); - fprintf(stderr, "NO MACs\n"); -#endif -} - -static void time_macs(void) -{ - time_macs_(1); - time_macs_(4); - time_macs_(32); -} - -typedef struct eac_ctx { - unsigned char *buf, IV[16], key[32], tag[16]; - unsigned long size; - int cipher_idx; -} eac_ctx; - -#ifdef LTC_EAX_MODE -static void time_eax(eac_ctx *ctx) -{ - ulong64 t1, t2; - unsigned long x, z; - int err; - - t2 = -1; - for (x = 0; x < 10000; x++) { - t_start(); - t1 = t_read(); - z = 16; - if ((err = eax_encrypt_authenticate_memory(ctx->cipher_idx, ctx->key, 16, ctx->IV, 16, NULL, 0, ctx->buf, ctx->size, ctx->buf, ctx->tag, &z)) != CRYPT_OK) { - fprintf(stderr, "\nEAX error... %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "EAX \t\t\t%9"PRI64"u\n", t2/(ulong64)(ctx->size)); -} -#endif - -#if defined(LTC_OCB3_MODE) -static void time_ocb3(eac_ctx *ctx) -{ - ulong64 t1, t2; - unsigned long x, z; - int err; - - t2 = -1; - for (x = 0; x < 10000; x++) { - t_start(); - t1 = t_read(); - z = 16; - if ((err = ocb3_encrypt_authenticate_memory(ctx->cipher_idx, ctx->key, 16, ctx->IV, 15, (unsigned char*)"", 0, ctx->buf, ctx->size, ctx->buf, ctx->tag, &z)) != CRYPT_OK) { - fprintf(stderr, "\nOCB3 error... %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "OCB3 \t\t\t%9"PRI64"u\n", t2/(ulong64)(ctx->size)); -} -#endif - -#if defined(LTC_CCM_MODE) -static void time_ccm(eac_ctx *ctx) -{ - ulong64 t1, t2; - unsigned long x, z; - int err; - symmetric_ECB skey; - - t2 = -1; - for (x = 0; x < 10000; x++) { - t_start(); - t1 = t_read(); - z = 16; - if ((err = ccm_memory(ctx->cipher_idx, ctx->key, 16, NULL, ctx->IV, 13, NULL, 0, ctx->buf, ctx->size, ctx->buf, ctx->tag, &z, CCM_ENCRYPT)) != CRYPT_OK) { - fprintf(stderr, "\nCCM error... %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "CCM (no-precomp) \t%9"PRI64"u\n", t2/(ulong64)(ctx->size)); - - ecb_start(ctx->cipher_idx, ctx->key, 16, 0, &skey); - t2 = -1; - for (x = 0; x < 10000; x++) { - t_start(); - t1 = t_read(); - z = 16; - if ((err = ccm_memory(ctx->cipher_idx, ctx->key, 16, &skey, ctx->IV, 13, NULL, 0, ctx->buf, ctx->size, ctx->buf, ctx->tag, &z, CCM_ENCRYPT)) != CRYPT_OK) { - fprintf(stderr, "\nCCM error... %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "CCM (precomp) \t\t%9"PRI64"u\n", t2/(ulong64)(ctx->size)); - ecb_done(&skey); -} -#endif - -#if defined (LTC_GCM_MODE) -static void time_gcm(eac_ctx *ctx) -{ - ulong64 t1, t2; - unsigned long x, z; - int err; - gcm_state gcm -#ifdef LTC_GCM_TABLES_SSE2 -__attribute__ ((aligned (16))) -#endif -; - t2 = -1; - for (x = 0; x < 100; x++) { - t_start(); - t1 = t_read(); - z = 16; - if ((err = gcm_memory(ctx->cipher_idx, ctx->key, 16, ctx->IV, 16, NULL, 0, ctx->buf, ctx->size, ctx->buf, ctx->tag, &z, GCM_ENCRYPT)) != CRYPT_OK) { - fprintf(stderr, "\nGCM error... %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "GCM (no-precomp)\t%9"PRI64"u\n", t2/(ulong64)(ctx->size)); - - if ((err = gcm_init(&gcm, ctx->cipher_idx, ctx->key, 16)) != CRYPT_OK) { fprintf(stderr, "gcm_init: %s\n", error_to_string(err)); exit(EXIT_FAILURE); } - t2 = -1; - for (x = 0; x < 10000; x++) { - t_start(); - t1 = t_read(); - z = 16; - if ((err = gcm_reset(&gcm)) != CRYPT_OK) { - fprintf(stderr, "\nGCM error[%d]... %s\n", __LINE__, error_to_string(err)); - exit(EXIT_FAILURE); - } - if ((err = gcm_add_iv(&gcm, ctx->IV, 16)) != CRYPT_OK) { - fprintf(stderr, "\nGCM error[%d]... %s\n", __LINE__, error_to_string(err)); - exit(EXIT_FAILURE); - } - if ((err = gcm_add_aad(&gcm, NULL, 0)) != CRYPT_OK) { - fprintf(stderr, "\nGCM error[%d]... %s\n", __LINE__, error_to_string(err)); - exit(EXIT_FAILURE); - } - if ((err = gcm_process(&gcm, ctx->buf, ctx->size, ctx->buf, GCM_ENCRYPT)) != CRYPT_OK) { - fprintf(stderr, "\nGCM error[%d]... %s\n", __LINE__, error_to_string(err)); - exit(EXIT_FAILURE); - } - - if ((err = gcm_done(&gcm, ctx->tag, &z)) != CRYPT_OK) { - fprintf(stderr, "\nGCM error[%d]... %s\n", __LINE__, error_to_string(err)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - if (t1 < t2) t2 = t1; - } - fprintf(stderr, "GCM (precomp)\t\t%9"PRI64"u\n", t2/(ulong64)(ctx->size)); -} -#endif - -#if defined(LTC_SIV_MODE) -static void time_siv(eac_ctx *ctx) -{ - ulong64 t1, t2; - unsigned long x, z; - int err; - unsigned char *aad[4]; - unsigned long buflen; - - for(z = 0; z < 4; z++) { - aad[z] = ctx->IV + z * 4; - } - for(z = 0; z < 4; z++) { - t2 = -1; - for (x = 0; x < 10000; x++) { - buflen = ctx->size; - t_start(); - t1 = t_read(); - if ((err = siv_memory(ctx->cipher_idx, LTC_ENCRYPT, - ctx->key, 32, - ctx->buf, ctx->size - 16, - ctx->buf, &buflen, - 4 - z, - aad[0], 16, - aad[1], 12, - aad[2], 8, - aad[3], 4, - NULL)) != CRYPT_OK) { - fprintf(stderr, "\nSIV error... %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - t1 = t_read() - t1; - if (t1 < t2) t2 = t1; - } - aad[3-z] = NULL; - fprintf(stderr, "SIV (%lu x AAD)\t\t%9"PRI64"u\n", 4-z, t2/(ulong64)(ctx->size)); - } -} -#endif - -static void time_eacs_(unsigned long MAC_SIZE) -{ -#if defined(LTC_EAX_MODE) || defined(LTC_OCB3_MODE) || \ - defined(LTC_CCM_MODE) || defined(LTC_GCM_MODE) || defined(LTC_SIV_MODE) - eac_ctx ctx; - struct { - const char *name; - void (*time_fun)(eac_ctx*); - } time_funs[] = { -#define TIME_FUN(n) { #n, time_ ## n } -#ifdef LTC_EAX_MODE - TIME_FUN(eax), -#endif -#ifdef LTC_OCB3_MODE - TIME_FUN(ocb3), -#endif -#ifdef LTC_CCM_MODE - TIME_FUN(ccm), -#endif -#ifdef LTC_GCM_MODE - TIME_FUN(gcm), -#endif -#ifdef LTC_SIV_MODE - TIME_FUN(siv), -#endif -#undef TIME_FUN - }; - unsigned long n; - - fprintf(stderr, "\nENC+MAC Timings (zero byte AAD, 16 byte IV, cycles/byte on %luKB blocks):\n", MAC_SIZE); - - ctx.size = MAC_SIZE*1024; - ctx.buf = XMALLOC(ctx.size); - if (ctx.buf == NULL) { - fprintf(stderr, "\n\nout of heap yo\n\n"); - exit(EXIT_FAILURE); - } - - ctx.cipher_idx = find_cipher("aes"); - - prng_descriptor[timing_prng_id].read(ctx.buf, ctx.size, &timing_prng); - prng_descriptor[timing_prng_id].read(ctx.key, sizeof(ctx.key), &timing_prng); - prng_descriptor[timing_prng_id].read(ctx.IV, sizeof(ctx.IV), &timing_prng); - - for (n = 0; n < LTC_ARRAY_SIZE(time_funs); ++n) { - if (!should_skip(time_funs[n].name)) - time_funs[n].time_fun(&ctx); - } - - XFREE(ctx.buf); -#else - LTC_UNUSED_PARAM(MAC_SIZE); - fprintf(stderr, "NO ENCMACs\n"); -#endif - -} - -static void time_eacs(void) -{ - time_eacs_(1); - time_eacs_(4); - time_eacs_(32); -} - -static void LTC_NORETURN die(int status) -{ - FILE* o = status == EXIT_SUCCESS ? stdout : stderr; - fprintf(o, - "Usage: timing [<-h|-l|alg>] [mpi] [filter]\n\n" - "Run timing tests of all built-in algorithms, or only the one given in .\n\n" - "\talg\tThe algorithms to test. Use the '-l' option to check for valid values.\n" - "\tmpi\tThe MPI provider to use.\n" - "\tfilter\tFilter within the algorithm class (currently only for 'cipher's, 'hash'es, and 'prng's).\n" - "\t-l\tList all built-in algorithms that can be timed.\n" - "\t-h\tThe help you're looking at.\n\n" - "Examples:\n" - "\ttiming hash sha\t\tWill run the timing demo for all hashes containing 'sha' in their name\n" - ); - exit(status); -} - -#define LTC_TEST_FN(f) { time_ ## f, #f } -int main(int argc, char **argv) -{ -int err; - -const struct -{ - void (*fn)(void); - const char* name; -} test_functions[] = { - LTC_TEST_FN(keysched), - LTC_TEST_FN(cipher_ecb), - LTC_TEST_FN(cipher_cbc), - LTC_TEST_FN(cipher_ctr), - LTC_TEST_FN(cipher_lrw), - LTC_TEST_FN(hash), - LTC_TEST_FN(macs), - LTC_TEST_FN(eacs), - LTC_TEST_FN(prng), - LTC_TEST_FN(mult), - LTC_TEST_FN(sqr), - LTC_TEST_FN(rsa), - LTC_TEST_FN(dsa), - LTC_TEST_FN(ecc), - LTC_TEST_FN(dh), -}; -char *single_test = NULL; -unsigned int i; -const char* mpi_provider = NULL; - -if (argc > 1) { - if (strstr(argv[1], "-h")) { - die(EXIT_SUCCESS); - } else if (strstr(argv[1], "-l")) { - for (i = 0; i < LTC_ARRAY_SIZE(test_functions); ++i) { - printf("%s\n", test_functions[i].name); - } - exit(0); - } -} - -init_timer(); -register_all_ciphers(); -register_all_hashes(); -register_all_prngs(); - -#ifdef USE_LTM - mpi_provider = "ltm"; -#elif defined(USE_TFM) - mpi_provider = "tfm"; -#elif defined(USE_GMP) - mpi_provider = "gmp"; -#elif defined(EXT_MATH_LIB) - mpi_provider = "ext"; -#endif - - if (argc > 2) { - mpi_provider = argv[2]; - } - - if (crypt_mp_init(mpi_provider) != CRYPT_OK) { - fprintf(stderr, "Init of MPI provider \"%s\" failed\n", mpi_provider ? mpi_provider : "(null)"); - filter_arg = mpi_provider; - } else if (argc > 3){ - filter_arg = argv[3]; - } -if (find_prng("sober128") != -1) - timing_prng_name = "sober128"; -else - timing_prng_name = "yarrow"; -timing_prng_id = find_prng(timing_prng_name); -if ((err = rng_make_prng(128, timing_prng_id, &timing_prng, NULL)) != CRYPT_OK) { - fprintf(stderr, "rng_make_prng failed: %s\n", error_to_string(err)); - exit(EXIT_FAILURE); -} - -/* single test name from commandline */ -if (argc > 1) single_test = argv[1]; - -for (i = 0; i < LTC_ARRAY_SIZE(test_functions); ++i) { - if (single_test && strstr(test_functions[i].name, single_test) == NULL) { - continue; - } - test_functions[i].fn(); -} - -return EXIT_SUCCESS; - -} diff --git a/demos/tv_gen.c b/demos/tv_gen.c index 5eba374a..17f7ad22 100644 --- a/demos/tv_gen.c +++ b/demos/tv_gen.c @@ -1,27 +1,104 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" +#include -#define OPEN_FILE(f, o) do { \ - o = fopen(f, "w"); \ - if (o == NULL) { \ - perror("can't open " f); \ - return; \ - } \ -} while(0) +void reg_algs(void) +{ +#ifdef RIJNDAEL + register_cipher (&aes_desc); +#endif +#ifdef BLOWFISH + register_cipher (&blowfish_desc); +#endif +#ifdef XTEA + register_cipher (&xtea_desc); +#endif +#ifdef RC5 + register_cipher (&rc5_desc); +#endif +#ifdef RC6 + register_cipher (&rc6_desc); +#endif +#ifdef SAFERP + register_cipher (&saferp_desc); +#endif +#ifdef TWOFISH + register_cipher (&twofish_desc); +#endif +#ifdef SAFER + register_cipher (&safer_k64_desc); + register_cipher (&safer_sk64_desc); + register_cipher (&safer_k128_desc); + register_cipher (&safer_sk128_desc); +#endif +#ifdef RC2 + register_cipher (&rc2_desc); +#endif +#ifdef DES + register_cipher (&des_desc); + register_cipher (&des3_desc); +#endif +#ifdef CAST5 + register_cipher (&cast5_desc); +#endif +#ifdef NOEKEON + register_cipher (&noekeon_desc); +#endif +#ifdef SKIPJACK + register_cipher (&skipjack_desc); +#endif -static void hash_gen(void) +#ifdef TIGER + register_hash (&tiger_desc); +#endif +#ifdef MD2 + register_hash (&md2_desc); +#endif +#ifdef MD4 + register_hash (&md4_desc); +#endif +#ifdef MD5 + register_hash (&md5_desc); +#endif +#ifdef SHA1 + register_hash (&sha1_desc); +#endif +#ifdef SHA224 + register_hash (&sha224_desc); +#endif +#ifdef SHA256 + register_hash (&sha256_desc); +#endif +#ifdef SHA384 + register_hash (&sha384_desc); +#endif +#ifdef SHA512 + register_hash (&sha512_desc); +#endif +#ifdef RIPEMD128 + register_hash (&rmd128_desc); +#endif +#ifdef RIPEMD160 + register_hash (&rmd160_desc); +#endif +#ifdef WHIRLPOOL + register_hash (&whirlpool_desc); +#endif +} + +void hash_gen(void) { unsigned char md[MAXBLOCKSIZE], *buf; unsigned long outlen, x, y, z; FILE *out; int err; - - OPEN_FILE("hash_tv.txt", out); - + + out = fopen("hash_tv.txt", "w"); + if (out == NULL) { + perror("can't open hash_tv"); + } + fprintf(out, "Hash Test Vectors:\n\nThese are the hashes of nn bytes '00 01 02 03 .. (nn-1)'\n\n"); for (x = 0; hash_descriptor[x].name != NULL; x++) { - buf = XMALLOC(2 * hash_descriptor[x].blocksize + 1); + buf = XMALLOC(2 * hash_descriptor[x].blocksize); if (buf == NULL) { perror("can't alloc mem"); exit(EXIT_FAILURE); @@ -48,23 +125,23 @@ static void hash_gen(void) fclose(out); } -static void cipher_gen(void) +void cipher_gen(void) { unsigned char *key, pt[MAXBLOCKSIZE]; unsigned long x, y, z, w; int err, kl, lastkl; FILE *out; symmetric_key skey; - - OPEN_FILE("cipher_tv.txt", out); - - fprintf(out, + + out = fopen("cipher_tv.txt", "w"); + + fprintf(out, "Cipher Test Vectors\n\nThese are test encryptions with key of nn bytes '00 01 02 03 .. (nn-1)' and original PT of the same style.\n" "The output of step N is used as the key and plaintext for step N+1 (key bytes repeated as required to fill the key)\n\n"); - + for (x = 0; cipher_descriptor[x].name != NULL; x++) { fprintf(out, "Cipher: %s\n", cipher_descriptor[x].name); - + /* three modes, smallest, medium, large keys */ lastkl = 10000; for (y = 0; y < 3; y++) { @@ -77,7 +154,7 @@ static void cipher_gen(void) printf("keysize error: %s\n", error_to_string(err)); exit(EXIT_FAILURE); } - if (kl == lastkl) continue; + if (kl == lastkl) break; lastkl = kl; fprintf(out, "Key Size: %d bytes\n", kl); @@ -94,7 +171,7 @@ static void cipher_gen(void) printf("setup error: %s\n", error_to_string(err)); exit(EXIT_FAILURE); } - + for (z = 0; (int)z < cipher_descriptor[x].block_length; z++) { pt[z] = (unsigned char)z; } @@ -121,36 +198,36 @@ static void cipher_gen(void) fprintf(out, "\n"); } fclose(out); -} +} -static void hmac_gen(void) +void hmac_gen(void) { unsigned char key[MAXBLOCKSIZE], output[MAXBLOCKSIZE], *input; - int x, y, z, err; + int x, y, z, kl, err; FILE *out; unsigned long len; + + out = fopen("hmac_tv.txt", "w"); - OPEN_FILE("hmac_tv.txt", out); - - fprintf(out, + fprintf(out, "HMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are HMACed. The initial key is\n" "of the same format (the same length as the HASH output size). The HMAC key in step N+1 is the HMAC output of\n" "step N.\n\n"); for (x = 0; hash_descriptor[x].name != NULL; x++) { fprintf(out, "HMAC-%s\n", hash_descriptor[x].name); - + /* initial key */ for (y = 0; y < (int)hash_descriptor[x].hashsize; y++) { key[y] = (y&255); } - input = XMALLOC(hash_descriptor[x].blocksize * 2 + 1); + input = XMALLOC(hash_descriptor[x].blocksize * 2); if (input == NULL) { perror("Can't malloc memory"); exit(EXIT_FAILURE); } - + for (y = 0; y <= (int)(hash_descriptor[x].blocksize * 2); y++) { for (z = 0; z < y; z++) { input[z] = (unsigned char)(z & 255); @@ -174,18 +251,17 @@ static void hmac_gen(void) } fclose(out); } - -#ifdef LTC_OMAC -static void omac_gen(void) + +void omac_gen(void) { unsigned char key[MAXBLOCKSIZE], output[MAXBLOCKSIZE], input[MAXBLOCKSIZE*2+2]; int err, x, y, z, kl; FILE *out; unsigned long len; + + out = fopen("omac_tv.txt", "w"); - OPEN_FILE("omac_tv.txt", out); - - fprintf(out, + fprintf(out, "OMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are OMAC'ed. The initial key is\n" "of the same format (length specified per cipher). The OMAC key in step N+1 is the OMAC output of\n" "step N (repeated as required to fill the array).\n\n"); @@ -200,23 +276,19 @@ static void omac_gen(void) kl = cipher_descriptor[x].max_key_length; } fprintf(out, "OMAC-%s (%d byte key)\n", cipher_descriptor[x].name, kl); - + /* initial key/block */ for (y = 0; y < kl; y++) { key[y] = (y & 255); } - + for (y = 0; y <= (int)(cipher_descriptor[x].block_length*2); y++) { for (z = 0; z < y; z++) { input[z] = (unsigned char)(z & 255); } len = sizeof(output); if ((err = omac_memory(x, key, kl, input, y, output, &len)) != CRYPT_OK) { - printf("Error OMAC'ing: %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - if (len == 0) { - printf("Error OMAC'ing: zero length\n"); + printf("Error omacing: %s\n", error_to_string(err)); exit(EXIT_FAILURE); } fprintf(out, "%3d: ", y); @@ -234,21 +306,19 @@ static void omac_gen(void) } fclose(out); } -#endif -#ifdef LTC_PMAC -static void pmac_gen(void) +void pmac_gen(void) { unsigned char key[MAXBLOCKSIZE], output[MAXBLOCKSIZE], input[MAXBLOCKSIZE*2+2]; int err, x, y, z, kl; FILE *out; unsigned long len; + + out = fopen("pmac_tv.txt", "w"); - OPEN_FILE("pmac_tv.txt", out); - - fprintf(out, -"PMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are PMAC'ed. The initial key is\n" -"of the same format (length specified per cipher). The PMAC key in step N+1 is the PMAC output of\n" + fprintf(out, +"PMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are OMAC'ed. The initial key is\n" +"of the same format (length specified per cipher). The OMAC key in step N+1 is the OMAC output of\n" "step N (repeated as required to fill the array).\n\n"); for (x = 0; cipher_descriptor[x].name != NULL; x++) { @@ -261,23 +331,19 @@ static void pmac_gen(void) kl = cipher_descriptor[x].max_key_length; } fprintf(out, "PMAC-%s (%d byte key)\n", cipher_descriptor[x].name, kl); - + /* initial key/block */ for (y = 0; y < kl; y++) { key[y] = (y & 255); } - + for (y = 0; y <= (int)(cipher_descriptor[x].block_length*2); y++) { for (z = 0; z < y; z++) { input[z] = (unsigned char)(z & 255); } len = sizeof(output); if ((err = pmac_memory(x, key, kl, input, y, output, &len)) != CRYPT_OK) { - printf("Error PMACing: %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - if (len == 0) { - printf("Error PMAC'ing: zero length\n"); + printf("Error omacing: %s\n", error_to_string(err)); exit(EXIT_FAILURE); } fprintf(out, "%3d: ", y); @@ -295,18 +361,16 @@ static void pmac_gen(void) } fclose(out); } -#endif -#ifdef LTC_EAX_MODE -static void eax_gen(void) +void eax_gen(void) { int err, kl, x, y1, z; FILE *out; - unsigned char key[MAXBLOCKSIZE], nonce[MAXBLOCKSIZE*2], header[MAXBLOCKSIZE*2], + unsigned char key[MAXBLOCKSIZE], nonce[MAXBLOCKSIZE*2], header[MAXBLOCKSIZE*2], plaintext[MAXBLOCKSIZE*2], tag[MAXBLOCKSIZE]; unsigned long len; - OPEN_FILE("eax_tv.txt", out); + out = fopen("eax_tv.txt", "w"); fprintf(out, "EAX Test Vectors. Uses the 00010203...NN-1 pattern for header/nonce/plaintext/key. The outputs\n" "are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous\n" "step repeated sufficiently.\n\n"); @@ -326,7 +390,7 @@ static void eax_gen(void) for (z = 0; z < kl; z++) { key[z] = (z & 255); } - + for (y1 = 0; y1 <= (int)(cipher_descriptor[x].block_length*2); y1++){ for (z = 0; z < y1; z++) { plaintext[z] = (unsigned char)(z & 255); @@ -338,10 +402,6 @@ static void eax_gen(void) printf("Error EAX'ing: %s\n", error_to_string(err)); exit(EXIT_FAILURE); } - if (len == 0) { - printf("Error EAX'ing: zero length\n"); - exit(EXIT_FAILURE); - } fprintf(out, "%3d: ", y1); for (z = 0; z < y1; z++) { fprintf(out, "%02X", plaintext[z]); @@ -361,104 +421,30 @@ static void eax_gen(void) } fclose(out); } -#endif -#ifdef LTC_OCB3_MODE -static void ocb3_gen(void) +void ocb_gen(void) { - int err, kl, x, y1, z, noncelen; + int err, kl, x, y1, z; FILE *out; - unsigned char key[MAXBLOCKSIZE], nonce[MAXBLOCKSIZE*2], + unsigned char key[MAXBLOCKSIZE], nonce[MAXBLOCKSIZE*2], plaintext[MAXBLOCKSIZE*2], tag[MAXBLOCKSIZE]; unsigned long len; - OPEN_FILE("ocb3_tv.txt", out); - fprintf(out, "OCB3 Test Vectors. Uses the 00010203...NN-1 pattern for nonce/plaintext/key. The outputs\n" + out = fopen("ocb_tv.txt", "w"); + fprintf(out, "OCB Test Vectors. Uses the 00010203...NN-1 pattern for nonce/plaintext/key. The outputs\n" "are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous\n" - "step repeated sufficiently. The nonce is fixed throughout. AAD is fixed to 3 bytes (ASCII) 'AAD'.\n\n"); + "step repeated sufficiently. The nonce is fixed throughout.\n\n"); for (x = 0; cipher_descriptor[x].name != NULL; x++) { kl = cipher_descriptor[x].block_length; /* skip ciphers which do not have 64 or 128 bit block sizes */ - if (kl != 16) continue; + if (kl != 8 && kl != 16) continue; if (cipher_descriptor[x].keysize(&kl) != CRYPT_OK) { kl = cipher_descriptor[x].max_key_length; } - fprintf(out, "OCB3-%s (%d byte key)\n", cipher_descriptor[x].name, kl); - - /* the key */ - for (z = 0; z < kl; z++) { - key[z] = (z & 255); - } - - /* fixed nonce */ - noncelen = MIN(15, cipher_descriptor[x].block_length); - for (z = 0; z < noncelen; z++) { - nonce[z] = z; - } - - for (y1 = 0; y1 <= (int)(cipher_descriptor[x].block_length*2); y1++){ - for (z = 0; z < y1; z++) { - plaintext[z] = (unsigned char)(z & 255); - } - len = 16; - if ((err = ocb3_encrypt_authenticate_memory(x, key, kl, nonce, noncelen, (unsigned char*)"AAD", 3, plaintext, y1, plaintext, tag, &len)) != CRYPT_OK) { - printf("Error OCB3'ing: %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - if (len == 0) { - printf("Error OCB3'ing: zero length\n"); - exit(EXIT_FAILURE); - } - fprintf(out, "%3d: ", y1); - for (z = 0; z < y1; z++) { - fprintf(out, "%02X", plaintext[z]); - } - fprintf(out, ", "); - for (z = 0; z <(int)len; z++) { - fprintf(out, "%02X", tag[z]); - } - fprintf(out, "\n"); - - /* forward the key */ - for (z = 0; z < kl; z++) { - key[z] = tag[z % len]; - } - } - fprintf(out, "\n"); - } - fclose(out); -} -#endif - -#ifdef LTC_CCM_MODE -static void ccm_gen(void) -{ - int err, kl, x, y1, z; - unsigned int t; - FILE *out; - unsigned char key[MAXBLOCKSIZE], nonce[MAXBLOCKSIZE*2], - plaintext[MAXBLOCKSIZE*2], tag[16]; - unsigned long len; - const unsigned int taglen[] = {4, 6, 8, 10, 12, 14, 16}; - - OPEN_FILE("ccm_tv.txt", out); - fprintf(out, "CCM Test Vectors. Uses the 00010203...NN-1 pattern for nonce/header/plaintext/key. The outputs\n" - "are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous\n" - "step repeated sufficiently. The nonce is fixed throughout at 13 bytes 000102...\n\n"); - - for (x = 0; cipher_descriptor[x].name != NULL; x++) { - kl = cipher_descriptor[x].block_length; - - /* skip ciphers which do not have 128 bit block sizes */ - if (kl != 16) continue; - - if (cipher_descriptor[x].keysize(&kl) != CRYPT_OK) { - kl = cipher_descriptor[x].max_key_length; - } - fprintf(out, "CCM-%s (%d byte key)\n", cipher_descriptor[x].name, kl); + fprintf(out, "OCB-%s (%d byte key)\n", cipher_descriptor[x].name, kl); /* the key */ for (z = 0; z < kl; z++) { @@ -469,83 +455,14 @@ static void ccm_gen(void) for (z = 0; z < cipher_descriptor[x].block_length; z++) { nonce[z] = z; } - - for (t = 0; t < LTC_ARRAY_SIZE(taglen); ++t) { - for (y1 = 0; y1 <= (int)(cipher_descriptor[x].block_length*2); y1++){ - for (z = 0; z < y1; z++) { - plaintext[z] = (unsigned char)(z & 255); - } - len = taglen[t]; - if ((err = ccm_memory(x, key, kl, NULL, nonce, 13, plaintext, y1, plaintext, y1, plaintext, tag, &len, CCM_ENCRYPT)) != CRYPT_OK) { - printf("Error CCM'ing: %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - if (len == 0) { - printf("Error CCM'ing: zero length\n"); - exit(EXIT_FAILURE); - } - fprintf(out, "%3d: ", y1); - for (z = 0; z < y1; z++) { - fprintf(out, "%02X", plaintext[z]); - } - fprintf(out, ", "); - for (z = 0; z <(int)len; z++) { - fprintf(out, "%02X", tag[z]); - } - fprintf(out, "\n"); - - /* forward the key */ - for (z = 0; z < kl; z++) { - key[z] = tag[z % len]; - } - } - } - fprintf(out, "\n"); - } - fclose(out); -} -#endif - -#ifdef LTC_GCM_MODE -static void gcm_gen(void) -{ - int err, kl, x, y1, z; - FILE *out; - unsigned char key[MAXBLOCKSIZE], plaintext[MAXBLOCKSIZE*2], tag[MAXBLOCKSIZE]; - unsigned long len; - - OPEN_FILE("gcm_tv.txt", out); - fprintf(out, "GCM Test Vectors. Uses the 00010203...NN-1 pattern for nonce/header/plaintext/key. The outputs\n" - "are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous\n" - "step repeated sufficiently. The nonce is fixed throughout at 13 bytes 000102...\n\n"); - - for (x = 0; cipher_descriptor[x].name != NULL; x++) { - kl = cipher_descriptor[x].block_length; - - /* skip ciphers which do not have 128 bit block sizes */ - if (kl != 16) continue; - - if (cipher_descriptor[x].keysize(&kl) != CRYPT_OK) { - kl = cipher_descriptor[x].max_key_length; - } - fprintf(out, "GCM-%s (%d byte key)\n", cipher_descriptor[x].name, kl); - - /* the key */ - for (z = 0; z < kl; z++) { - key[z] = (z & 255); - } - - for (y1 = 1; y1 <= (int)(cipher_descriptor[x].block_length*2); y1++){ + + for (y1 = 0; y1 <= (int)(cipher_descriptor[x].block_length*2); y1++){ for (z = 0; z < y1; z++) { plaintext[z] = (unsigned char)(z & 255); } len = sizeof(tag); - if ((err = gcm_memory(x, key, kl, plaintext, y1, plaintext, y1, plaintext, y1, plaintext, tag, &len, GCM_ENCRYPT)) != CRYPT_OK) { - printf("Error GCM'ing: %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - if (len == 0) { - printf("Error GCM'ing: zero length\n"); + if ((err = ocb_encrypt_authenticate_memory(x, key, kl, nonce, plaintext, y1, plaintext, tag, &len)) != CRYPT_OK) { + printf("Error OCB'ing: %s\n", error_to_string(err)); exit(EXIT_FAILURE); } fprintf(out, "%3d: ", y1); @@ -567,20 +484,18 @@ static void gcm_gen(void) } fclose(out); } -#endif -static void base64_gen(void) +void base64_gen(void) { FILE *out; - unsigned char src[32], ch; - char dst[256]; - unsigned long x, len; - - OPEN_FILE("base64_tv.txt", out); + unsigned char dst[256], src[32]; + unsigned long x, y, len; + + out = fopen("base64_tv.txt", "w"); fprintf(out, "Base64 vectors. These are the base64 encodings of the strings 00,01,02...NN-1\n\n"); for (x = 0; x <= 32; x++) { - for (ch = 0; ch < x; ch++) { - src[ch] = ch; + for (y = 0; y < x; y++) { + src[y] = y; } len = sizeof(dst); base64_encode(src, x, dst, &len); @@ -589,181 +504,24 @@ static void base64_gen(void) fclose(out); } -static void math_gen(void) +int main(void) { -} - -static void ecc_gen(void) -{ - FILE *out; - unsigned char str[512]; - void *k, *order, *modulus, *a; - ecc_point *G, *R; - int x; - - OPEN_FILE("ecc_tv.txt", out); - fprintf(out, "ecc vectors. These are for kG for k=1,3,9,27,...,3**n until k > order of the curve outputs are triplets\n\n"); - G = ltc_ecc_new_point(); - R = ltc_ecc_new_point(); - ltc_mp_init(&k); - ltc_mp_init(&order); - ltc_mp_init(&modulus); - ltc_mp_init(&a); - - for (x = 0; ltc_ecc_curves[x].prime != NULL; x++) { - fprintf(out, "%s\n", ltc_ecc_curves[x].OID); - ltc_mp_set(k, 1); - - ltc_mp_read_radix(order, ltc_ecc_curves[x].order, 16); - ltc_mp_read_radix(modulus, ltc_ecc_curves[x].prime, 16); - ltc_mp_read_radix(a, ltc_ecc_curves[x].A, 16); - ltc_mp_read_radix(G->x, ltc_ecc_curves[x].Gx, 16); - ltc_mp_read_radix(G->y, ltc_ecc_curves[x].Gy, 16); - ltc_mp_set(G->z, 1); - - while (ltc_mp_cmp(k, order) == LTC_MP_LT) { - ltc_mp.ecc_ptmul(k, G, R, a, modulus, 1); - ltc_mp_tohex(k, (char*)str); fprintf(out, "%s, ", (char*)str); - ltc_mp_tohex(R->x, (char*)str); fprintf(out, "%s, ", (char*)str); - ltc_mp_tohex(R->y, (char*)str); fprintf(out, "%s\n", (char*)str); - ltc_mp_mul_d(k, 3, k); - } - } - ltc_mp_deinit_multi(k, order, modulus, a, LTC_NULL); - ltc_ecc_del_point(G); - ltc_ecc_del_point(R); - fclose(out); -} - -#ifdef LTC_LRW_MODE -static void lrw_gen(void) -{ - FILE *out; - unsigned char tweak[16], key[16], iv[16], buf[1024]; - int x, y, err; - symmetric_LRW lrw; - - /* initialize default key and tweak */ - for (x = 0; x < 16; x++) { - tweak[x] = key[x] = iv[x] = x; - } - - OPEN_FILE("lrw_tv.txt", out); - for (x = 16; x < (int)(sizeof(buf)); x += 16) { - if ((err = lrw_start(find_cipher("aes"), iv, key, 16, tweak, 0, &lrw)) != CRYPT_OK) { - fprintf(stderr, "Error starting LRW-AES: %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - - /* encrypt incremental */ - for (y = 0; y < x; y++) { - buf[y] = y & 255; - } - - if ((err = lrw_encrypt(buf, buf, x, &lrw)) != CRYPT_OK) { - fprintf(stderr, "Error encrypting with LRW-AES: %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - - /* display it */ - fprintf(out, "%d:", x); - for (y = 0; y < x; y++) { - fprintf(out, "%02x", buf[y]); - } - fprintf(out, "\n"); - - /* reset IV */ - if ((err = lrw_setiv(iv, 16, &lrw)) != CRYPT_OK) { - fprintf(stderr, "Error setting IV: %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - - /* copy new tweak, iv and key */ - for (y = 0; y < 16; y++) { - key[y] = buf[y]; - iv[y] = buf[(y+16)%x]; - tweak[y] = buf[(y+32)%x]; - } - - if ((err = lrw_decrypt(buf, buf, x, &lrw)) != CRYPT_OK) { - fprintf(stderr, "Error decrypting with LRW-AES: %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - - /* display it */ - fprintf(out, "%d:", x); - for (y = 0; y < x; y++) { - fprintf(out, "%02x", buf[y]); - } - fprintf(out, "\n"); - lrw_done(&lrw); - } - fclose(out); -} -#endif - -static void LTC_NORETURN die(int status) -{ - FILE* o = status == EXIT_SUCCESS ? stdout : stderr; - fprintf(o, - "Usage: tv_gen [<-h>]\n\n" - "Generate the internal test-vectors.\n\n" - "\t-h\tThe help you're looking at.\n" - ); - exit(status); -} - -int main(int argc, char **argv) -{ - if (argc > 1) { - if (strstr(argv[1], "-h")) { - die(EXIT_SUCCESS); - } else { - die(EXIT_FAILURE); - } - } - register_all_ciphers(); - register_all_hashes(); - register_all_prngs(); -#ifdef USE_LTM - ltc_mp = ltm_desc; -#elif defined(USE_TFM) - ltc_mp = tfm_desc; -#elif defined(USE_GMP) - ltc_mp = gmp_desc; -#elif defined(EXT_MATH_LIB) - extern ltc_math_descriptor EXT_MATH_LIB; - ltc_mp = EXT_MATH_LIB; -#endif - - printf("Generating hash vectors..."); fflush(stdout); hash_gen(); printf("done\n"); + reg_algs(); + printf("Generating hash vectors..."); fflush(stdout); hash_gen(); printf("done\n"); printf("Generating cipher vectors..."); fflush(stdout); cipher_gen(); printf("done\n"); - printf("Generating HMAC vectors..."); fflush(stdout); hmac_gen(); printf("done\n"); -#ifdef LTC_OMAC - printf("Generating OMAC vectors..."); fflush(stdout); omac_gen(); printf("done\n"); -#endif -#ifdef LTC_PMAC - printf("Generating PMAC vectors..."); fflush(stdout); pmac_gen(); printf("done\n"); -#endif -#ifdef LTC_EAX_MODE - printf("Generating EAX vectors..."); fflush(stdout); eax_gen(); printf("done\n"); -#endif -#ifdef LTC_OCB3_MODE - printf("Generating OCB3 vectors..."); fflush(stdout); ocb3_gen(); printf("done\n"); -#endif -#ifdef LTC_CCM_MODE - printf("Generating CCM vectors..."); fflush(stdout); ccm_gen(); printf("done\n"); -#endif -#ifdef LTC_GCM_MODE - printf("Generating GCM vectors..."); fflush(stdout); gcm_gen(); printf("done\n"); -#endif + printf("Generating HMAC vectors..."); fflush(stdout); hmac_gen(); printf("done\n"); + printf("Generating OMAC vectors..."); fflush(stdout); omac_gen(); printf("done\n"); + printf("Generating PMAC vectors..."); fflush(stdout); pmac_gen(); printf("done\n"); + printf("Generating EAX vectors..."); fflush(stdout); eax_gen(); printf("done\n"); + printf("Generating OCB vectors..."); fflush(stdout); ocb_gen(); printf("done\n"); printf("Generating BASE64 vectors..."); fflush(stdout); base64_gen(); printf("done\n"); - if (ltc_mp.name != NULL) { - printf("Generating MATH vectors..."); fflush(stdout); math_gen(); printf("done\n"); - printf("Generating ECC vectors..."); fflush(stdout); ecc_gen(); printf("done\n"); - } -#ifdef LTC_LRW_MODE - printf("Generating LRW vectors..."); fflush(stdout); lrw_gen(); printf("done\n"); -#endif return 0; } + + + + + + + + diff --git a/demos/x86_prof.c b/demos/x86_prof.c new file mode 100644 index 00000000..a478614f --- /dev/null +++ b/demos/x86_prof.c @@ -0,0 +1,456 @@ +#include + +#define KTIMES 25 +#define TIMES 100000 + +struct list { + int id; + unsigned long spd1, spd2, avg; +} results[100]; + +int no_results; + +int sorter(const void *a, const void *b) +{ + const struct list *A, *B; + A = a; + B = b; + if (A->avg < B->avg) return -1; + if (A->avg > B->avg) return 1; + return 0; +} + +void tally_results(int type) +{ + int x; + + // qsort the results + qsort(results, no_results, sizeof(struct list), &sorter); + + printf("\n"); + if (type == 0) { + for (x = 0; x < no_results; x++) { + printf("%-20s: Schedule at %6lu\n", cipher_descriptor[results[x].id].name, (unsigned long)results[x].spd1); + } + } else if (type == 1) { + for (x = 0; x < no_results; x++) { + printf + ("%-20s: Encrypt at %5lu, Decrypt at %5lu\n", cipher_descriptor[results[x].id].name, results[x].spd1, results[x].spd2); + } + } else { + for (x = 0; x < no_results; x++) { + printf + ("%-20s: Process at %5lu\n", hash_descriptor[results[x].id].name, results[x].spd1 / 1000); + } + } +} + +/* RDTSC from Scott Duplichan */ +static ulong64 rdtsc (void) + { + #if defined __GNUC__ + #ifdef __i386__ + ulong64 a; + __asm__ __volatile__ ("rdtsc ":"=A" (a)); + return a; + #else /* gcc-IA64 version */ + unsigned long result; + __asm__ __volatile__("mov %0=ar.itc" : "=r"(result) :: "memory"); + while (__builtin_expect ((int) result == -1, 0)) + __asm__ __volatile__("mov %0=ar.itc" : "=r"(result) :: "memory"); + return result; + #endif + + // Microsoft and Intel Windows compilers + #elif defined _M_IX86 + __asm rdtsc + #elif defined _M_AMD64 + return __rdtsc (); + #elif defined _M_IA64 + #if defined __INTEL_COMPILER + #include + #endif + return __getReg (3116); + #else + #error need rdtsc function for this build + #endif + } + +ulong64 timer, skew = 0; +prng_state prng; + +void t_start(void) +{ + timer = rdtsc(); +} + +ulong64 t_read(void) +{ + return rdtsc() - timer; +} + +void init_timer(void) +{ + ulong64 c1, c2, t1, t2, t3; + unsigned long y1; + + c1 = c2 = (ulong64)-1; + for (y1 = 0; y1 < TIMES*100; y1++) { + t_start(); + t1 = t_read(); + t3 = t_read(); + t2 = t_read() - t1; + + c1 = (c1 > t1) ? t1 : c1; + c2 = (c2 > t2) ? t2 : c2; + } + skew = c2 - c1; + printf("Clock Skew: %lu\n", (unsigned long)skew); +} + +void reg_algs(void) +{ +#ifdef RIJNDAEL + register_cipher (&aes_desc); +#endif +#ifdef BLOWFISH + register_cipher (&blowfish_desc); +#endif +#ifdef XTEA + register_cipher (&xtea_desc); +#endif +#ifdef RC5 + register_cipher (&rc5_desc); +#endif +#ifdef RC6 + register_cipher (&rc6_desc); +#endif +#ifdef SAFERP + register_cipher (&saferp_desc); +#endif +#ifdef TWOFISH + register_cipher (&twofish_desc); +#endif +#ifdef SAFER + register_cipher (&safer_k64_desc); + register_cipher (&safer_sk64_desc); + register_cipher (&safer_k128_desc); + register_cipher (&safer_sk128_desc); +#endif +#ifdef RC2 + register_cipher (&rc2_desc); +#endif +#ifdef DES + register_cipher (&des_desc); + register_cipher (&des3_desc); +#endif +#ifdef CAST5 + register_cipher (&cast5_desc); +#endif +#ifdef NOEKEON + register_cipher (&noekeon_desc); +#endif +#ifdef SKIPJACK + register_cipher (&skipjack_desc); +#endif + +#ifdef TIGER + register_hash (&tiger_desc); +#endif +#ifdef MD2 + register_hash (&md2_desc); +#endif +#ifdef MD4 + register_hash (&md4_desc); +#endif +#ifdef MD5 + register_hash (&md5_desc); +#endif +#ifdef SHA1 + register_hash (&sha1_desc); +#endif +#ifdef SHA224 + register_hash (&sha224_desc); +#endif +#ifdef SHA256 + register_hash (&sha256_desc); +#endif +#ifdef SHA384 + register_hash (&sha384_desc); +#endif +#ifdef SHA512 + register_hash (&sha512_desc); +#endif +#ifdef RIPEMD128 + register_hash (&rmd128_desc); +#endif +#ifdef RIPEMD160 + register_hash (&rmd160_desc); +#endif +#ifdef WHIRLPOOL + register_hash (&whirlpool_desc); +#endif + +register_prng(&yarrow_desc); +register_prng(&fortuna_desc); +register_prng(&rc4_desc); + +rng_make_prng(128, find_prng("yarrow"), &prng, NULL); +} + +int time_keysched(void) +{ + unsigned long x, i, y1; + ulong64 t1, c1; + symmetric_key skey; + int kl; + int (*func) (const unsigned char *, int , int , symmetric_key *); + unsigned char key[MAXBLOCKSIZE]; + + printf ("\n\nKey Schedule Time Trials for the Symmetric Ciphers:\n(Times are cycles per key)\n"); + no_results = 0; + for (x = 0; cipher_descriptor[x].name != NULL; x++) { +#define DO1(k) func(k, kl, 0, &skey); + + func = cipher_descriptor[x].setup; + kl = cipher_descriptor[x].min_key_length; + c1 = (ulong64)-1; + for (y1 = 0; y1 < KTIMES; y1++) { + yarrow_read(key, kl, &prng); + t_start(); + DO1(key); + t1 = t_read(); + c1 = (t1 > c1) ? c1 : t1; + } + t1 = c1 - skew; + results[no_results].spd1 = results[no_results].avg = t1; + results[no_results++].id = x; + printf("."); fflush(stdout); + +#undef DO1 + } + tally_results(0); + + return 0; +} + +int time_cipher(void) +{ + unsigned long x, y1; + ulong64 t1, t2, c1, c2, a1, a2; + symmetric_key skey; + void (*func) (const unsigned char *, unsigned char *, symmetric_key *); + unsigned char key[MAXBLOCKSIZE], pt[MAXBLOCKSIZE]; + + + printf ("\n\nECB Time Trials for the Symmetric Ciphers:\n"); + no_results = 0; + for (x = 0; cipher_descriptor[x].name != NULL; x++) { + cipher_descriptor[x].setup (key, cipher_descriptor[x].min_key_length, 0, + &skey); + +#define DO1 func(pt,pt,&skey); +#define DO2 DO1 DO1 + + func = cipher_descriptor[x].ecb_encrypt; + c1 = c2 = (ulong64)-1; + for (y1 = 0; y1 < TIMES; y1++) { + t_start(); + DO1; + t1 = t_read(); + DO2; + t2 = t_read(); + t2 -= t1; + + c1 = (t1 > c1 ? c1 : t1); + c2 = (t2 > c2 ? c2 : t2); + } + a1 = c2 - c1 - skew; + + + func = cipher_descriptor[x].ecb_decrypt; + c1 = c2 = (ulong64)-1; + for (y1 = 0; y1 < TIMES; y1++) { + t_start(); + DO1; + t1 = t_read(); + DO2; + t2 = t_read(); + t2 -= t1; + + c1 = (t1 > c1 ? c1 : t1); + c2 = (t2 > c2 ? c2 : t2); + } + a2 = c2 - c1 - skew; + + results[no_results].id = x; + results[no_results].spd1 = a1/cipher_descriptor[x].block_length; + results[no_results].spd2 = a2/cipher_descriptor[x].block_length;; + results[no_results].avg = (results[no_results].spd1 + results[no_results].spd2+1)/2; + ++no_results; + printf("."); fflush(stdout); + +#undef DO2 +#undef DO1 + } + tally_results(1); + + return 0; +} + +int time_hash(void) +{ + unsigned long x, y1, len; + ulong64 t1, t2, c1, c2; + hash_state md; + int (*func)(hash_state *, const unsigned char *, unsigned long); + unsigned char pt[MAXBLOCKSIZE]; + + + printf ("\n\nHASH Time Trials for:\n"); + no_results = 0; + for (x = 0; hash_descriptor[x].name != NULL; x++) { + hash_descriptor[x].init(&md); + +#define DO1 func(&md,pt,len); +#define DO2 DO1 DO1 + + func = hash_descriptor[x].process; + len = hash_descriptor[x].blocksize; + + c1 = c2 = (ulong64)-1; + for (y1 = 0; y1 < TIMES; y1++) { + t_start(); + DO1; + t1 = t_read(); + DO2; + t2 = t_read() - t1; + c1 = (t1 > c1) ? c1 : t1; + c2 = (t2 > c2) ? c2 : t2; + } + t1 = c2 - c1 - skew; + t1 = ((t1 * CONST64(1000))) / ((ulong64)hash_descriptor[x].blocksize); + results[no_results].id = x; + results[no_results].spd1 = results[no_results].avg = t1; + ++no_results; + printf("."); fflush(stdout); +#undef DO2 +#undef DO1 + } + tally_results(2); + + return 0; +} + +void time_mult(void) +{ + ulong64 t1, t2; + unsigned long x, y; + mp_int a, b, c; + + printf("Timing Multiplying:\n"); + mp_init_multi(&a,&b,&c,NULL); + for (x = 128/DIGIT_BIT; x <= 1024/DIGIT_BIT; x += 128/DIGIT_BIT) { + mp_rand(&a, x); + mp_rand(&b, x); + +#define DO1 mp_mul(&a, &b, &c); +#define DO2 DO1; DO1; + + t2 = -1; + for (y = 0; y < TIMES; y++) { + t_start(); + t1 = t_read(); + DO2; + t1 = (t_read() - t1)>>1; + if (t1 < t2) t2 = t1; + } + printf("%3d digits: %9llu cycles\n", x, t2); + } + mp_clear_multi(&a,&b,&c,NULL); + +#undef DO1 +#undef DO2 +} + +void time_sqr(void) +{ + ulong64 t1, t2; + unsigned long x, y; + mp_int a, b; + + printf("Timing Squaring:\n"); + mp_init_multi(&a,&b,NULL); + for (x = 128/DIGIT_BIT; x <= 1024/DIGIT_BIT; x += 128/DIGIT_BIT) { + mp_rand(&a, x); + +#define DO1 mp_sqr(&a, &b); +#define DO2 DO1; DO1; + + t2 = -1; + for (y = 0; y < TIMES; y++) { + t_start(); + t1 = t_read(); + DO2; + t1 = (t_read() - t1)>>1; + if (t1 < t2) t2 = t1; + } + printf("%3d digits: %9llu cycles\n", x, t2); + } + mp_clear_multi(&a,&b,NULL); + +#undef DO1 +#undef DO2 +} + +void time_prng(void) +{ + ulong64 t1, t2; + unsigned char buf[4096]; + prng_state prng; + unsigned long x, y; + + printf("Timing PRNGs:\n"); + for (x = 0; prng_descriptor[x].name != NULL; x++) { + prng_descriptor[x].start(&prng); + zeromem(buf, 256); + prng_descriptor[x].add_entropy(buf, 256, &prng); + prng_descriptor[x].ready(&prng); + t2 = -1; + +#define DO1 prng_descriptor[x].read(buf, 4096, &prng); +#define DO2 DO1 DO1 + + for (y = 0; y < 10000; y++) { + t_start(); + t1 = t_read(); + DO2; + t1 = (t_read() - t1)>>1; + if (t1 < t2) t2 = t1; + } + printf("%20s: %llu\n", prng_descriptor[x].name, t2>>12); + } +#undef DO2 +#undef DO1 + +} + + + +int main(void) +{ + reg_algs(); + + printf("Timings for ciphers and hashes. Times are listed as cycles per byte processed.\n\n"); + +// init_timer(); + time_mult(); + time_sqr(); + time_prng(); + time_cipher(); + time_keysched(); + time_hash(); + + return EXIT_SUCCESS; +} + diff --git a/src/ciphers/des.c b/des.c similarity index 51% rename from src/ciphers/des.c rename to des.c index bdeca80f..e6090142 100644 --- a/src/ciphers/des.c +++ b/des.c @@ -1,18 +1,22 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* DES code submitted by Dobes Vandermeer */ +#include "mycrypt.h" -/** - @file des.c - DES code submitted by Dobes Vandermeer -*/ +#ifdef DES -#ifdef LTC_DES - -#define EN0 0 +#define EN0 0 #define DE1 1 -const struct ltc_cipher_descriptor des_desc = +const struct _cipher_descriptor des_desc = { "des", 13, @@ -21,42 +25,24 @@ const struct ltc_cipher_descriptor des_desc = &des_ecb_encrypt, &des_ecb_decrypt, &des_test, - &des_done, - &des_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + &des_keysize }; -const struct ltc_cipher_descriptor des3_desc = +const struct _cipher_descriptor des3_desc = { "3des", 14, - 16, 24, 8, 16, + 24, 24, 8, 16, &des3_setup, &des3_ecb_encrypt, &des3_ecb_decrypt, &des3_test, - &des3_done, - &des3_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -const struct ltc_cipher_descriptor desx_desc = -{ - "desx", - 27, - 24, 24, 8, 16, - &desx_setup, - &desx_ecb_encrypt, - &desx_ecb_decrypt, - &desx_test, - &desx_done, - &desx_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + &des3_keysize }; static const ulong32 bytebit[8] = { - 0200, 0100, 040, 020, 010, 04, 02, 01 + 0200, 0100, 040, 020, 010, 04, 02, 01 }; static const ulong32 bigbyte[24] = @@ -66,22 +52,22 @@ static const ulong32 bigbyte[24] = 0x8000UL, 0x4000UL, 0x2000UL, 0x1000UL, 0x800UL, 0x400UL, 0x200UL, 0x100UL, 0x80UL, 0x40UL, 0x20UL, 0x10UL, - 0x8UL, 0x4UL, 0x2UL, 0x1L + 0x8UL, 0x4UL, 0x2UL, 0x1L }; /* Use the key schedule specific in the standard (ANSI X3.92-1981) */ static const unsigned char pc1[56] = { - 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, - 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, + 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, + 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, - 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3 + 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3 }; static const unsigned char totrot[16] = { 1, 2, 4, 6, - 8, 10, 12, 14, - 15, 17, 19, 21, + 8, 10, 12, 14, + 15, 17, 19, 21, 23, 25, 27, 28 }; @@ -253,1063 +239,1063 @@ static const ulong32 SP8[64] = 0x00001040UL, 0x00040040UL, 0x10000000UL, 0x10041000UL }; -#ifndef LTC_SMALL_CODE +#ifndef SMALL_CODE static const ulong64 des_ip[8][256] = { -{ CONST64(0x0000000000000000), CONST64(0x0000001000000000), CONST64(0x0000000000000010), CONST64(0x0000001000000010), - CONST64(0x0000100000000000), CONST64(0x0000101000000000), CONST64(0x0000100000000010), CONST64(0x0000101000000010), - CONST64(0x0000000000001000), CONST64(0x0000001000001000), CONST64(0x0000000000001010), CONST64(0x0000001000001010), - CONST64(0x0000100000001000), CONST64(0x0000101000001000), CONST64(0x0000100000001010), CONST64(0x0000101000001010), - CONST64(0x0010000000000000), CONST64(0x0010001000000000), CONST64(0x0010000000000010), CONST64(0x0010001000000010), - CONST64(0x0010100000000000), CONST64(0x0010101000000000), CONST64(0x0010100000000010), CONST64(0x0010101000000010), - CONST64(0x0010000000001000), CONST64(0x0010001000001000), CONST64(0x0010000000001010), CONST64(0x0010001000001010), - CONST64(0x0010100000001000), CONST64(0x0010101000001000), CONST64(0x0010100000001010), CONST64(0x0010101000001010), - CONST64(0x0000000000100000), CONST64(0x0000001000100000), CONST64(0x0000000000100010), CONST64(0x0000001000100010), - CONST64(0x0000100000100000), CONST64(0x0000101000100000), CONST64(0x0000100000100010), CONST64(0x0000101000100010), - CONST64(0x0000000000101000), CONST64(0x0000001000101000), CONST64(0x0000000000101010), CONST64(0x0000001000101010), - CONST64(0x0000100000101000), CONST64(0x0000101000101000), CONST64(0x0000100000101010), CONST64(0x0000101000101010), - CONST64(0x0010000000100000), CONST64(0x0010001000100000), CONST64(0x0010000000100010), CONST64(0x0010001000100010), - CONST64(0x0010100000100000), CONST64(0x0010101000100000), CONST64(0x0010100000100010), CONST64(0x0010101000100010), - CONST64(0x0010000000101000), CONST64(0x0010001000101000), CONST64(0x0010000000101010), CONST64(0x0010001000101010), - CONST64(0x0010100000101000), CONST64(0x0010101000101000), CONST64(0x0010100000101010), CONST64(0x0010101000101010), - CONST64(0x1000000000000000), CONST64(0x1000001000000000), CONST64(0x1000000000000010), CONST64(0x1000001000000010), - CONST64(0x1000100000000000), CONST64(0x1000101000000000), CONST64(0x1000100000000010), CONST64(0x1000101000000010), - CONST64(0x1000000000001000), CONST64(0x1000001000001000), CONST64(0x1000000000001010), CONST64(0x1000001000001010), - CONST64(0x1000100000001000), CONST64(0x1000101000001000), CONST64(0x1000100000001010), CONST64(0x1000101000001010), - CONST64(0x1010000000000000), CONST64(0x1010001000000000), CONST64(0x1010000000000010), CONST64(0x1010001000000010), - CONST64(0x1010100000000000), CONST64(0x1010101000000000), CONST64(0x1010100000000010), CONST64(0x1010101000000010), - CONST64(0x1010000000001000), CONST64(0x1010001000001000), CONST64(0x1010000000001010), CONST64(0x1010001000001010), - CONST64(0x1010100000001000), CONST64(0x1010101000001000), CONST64(0x1010100000001010), CONST64(0x1010101000001010), - CONST64(0x1000000000100000), CONST64(0x1000001000100000), CONST64(0x1000000000100010), CONST64(0x1000001000100010), - CONST64(0x1000100000100000), CONST64(0x1000101000100000), CONST64(0x1000100000100010), CONST64(0x1000101000100010), - CONST64(0x1000000000101000), CONST64(0x1000001000101000), CONST64(0x1000000000101010), CONST64(0x1000001000101010), - CONST64(0x1000100000101000), CONST64(0x1000101000101000), CONST64(0x1000100000101010), CONST64(0x1000101000101010), - CONST64(0x1010000000100000), CONST64(0x1010001000100000), CONST64(0x1010000000100010), CONST64(0x1010001000100010), - CONST64(0x1010100000100000), CONST64(0x1010101000100000), CONST64(0x1010100000100010), CONST64(0x1010101000100010), - CONST64(0x1010000000101000), CONST64(0x1010001000101000), CONST64(0x1010000000101010), CONST64(0x1010001000101010), - CONST64(0x1010100000101000), CONST64(0x1010101000101000), CONST64(0x1010100000101010), CONST64(0x1010101000101010), - CONST64(0x0000000010000000), CONST64(0x0000001010000000), CONST64(0x0000000010000010), CONST64(0x0000001010000010), - CONST64(0x0000100010000000), CONST64(0x0000101010000000), CONST64(0x0000100010000010), CONST64(0x0000101010000010), - CONST64(0x0000000010001000), CONST64(0x0000001010001000), CONST64(0x0000000010001010), CONST64(0x0000001010001010), - CONST64(0x0000100010001000), CONST64(0x0000101010001000), CONST64(0x0000100010001010), CONST64(0x0000101010001010), - CONST64(0x0010000010000000), CONST64(0x0010001010000000), CONST64(0x0010000010000010), CONST64(0x0010001010000010), - CONST64(0x0010100010000000), CONST64(0x0010101010000000), CONST64(0x0010100010000010), CONST64(0x0010101010000010), - CONST64(0x0010000010001000), CONST64(0x0010001010001000), CONST64(0x0010000010001010), CONST64(0x0010001010001010), - CONST64(0x0010100010001000), CONST64(0x0010101010001000), CONST64(0x0010100010001010), CONST64(0x0010101010001010), - CONST64(0x0000000010100000), CONST64(0x0000001010100000), CONST64(0x0000000010100010), CONST64(0x0000001010100010), - CONST64(0x0000100010100000), CONST64(0x0000101010100000), CONST64(0x0000100010100010), CONST64(0x0000101010100010), - CONST64(0x0000000010101000), CONST64(0x0000001010101000), CONST64(0x0000000010101010), CONST64(0x0000001010101010), - CONST64(0x0000100010101000), CONST64(0x0000101010101000), CONST64(0x0000100010101010), CONST64(0x0000101010101010), - CONST64(0x0010000010100000), CONST64(0x0010001010100000), CONST64(0x0010000010100010), CONST64(0x0010001010100010), - CONST64(0x0010100010100000), CONST64(0x0010101010100000), CONST64(0x0010100010100010), CONST64(0x0010101010100010), - CONST64(0x0010000010101000), CONST64(0x0010001010101000), CONST64(0x0010000010101010), CONST64(0x0010001010101010), - CONST64(0x0010100010101000), CONST64(0x0010101010101000), CONST64(0x0010100010101010), CONST64(0x0010101010101010), - CONST64(0x1000000010000000), CONST64(0x1000001010000000), CONST64(0x1000000010000010), CONST64(0x1000001010000010), - CONST64(0x1000100010000000), CONST64(0x1000101010000000), CONST64(0x1000100010000010), CONST64(0x1000101010000010), - CONST64(0x1000000010001000), CONST64(0x1000001010001000), CONST64(0x1000000010001010), CONST64(0x1000001010001010), - CONST64(0x1000100010001000), CONST64(0x1000101010001000), CONST64(0x1000100010001010), CONST64(0x1000101010001010), - CONST64(0x1010000010000000), CONST64(0x1010001010000000), CONST64(0x1010000010000010), CONST64(0x1010001010000010), - CONST64(0x1010100010000000), CONST64(0x1010101010000000), CONST64(0x1010100010000010), CONST64(0x1010101010000010), - CONST64(0x1010000010001000), CONST64(0x1010001010001000), CONST64(0x1010000010001010), CONST64(0x1010001010001010), - CONST64(0x1010100010001000), CONST64(0x1010101010001000), CONST64(0x1010100010001010), CONST64(0x1010101010001010), - CONST64(0x1000000010100000), CONST64(0x1000001010100000), CONST64(0x1000000010100010), CONST64(0x1000001010100010), - CONST64(0x1000100010100000), CONST64(0x1000101010100000), CONST64(0x1000100010100010), CONST64(0x1000101010100010), - CONST64(0x1000000010101000), CONST64(0x1000001010101000), CONST64(0x1000000010101010), CONST64(0x1000001010101010), - CONST64(0x1000100010101000), CONST64(0x1000101010101000), CONST64(0x1000100010101010), CONST64(0x1000101010101010), - CONST64(0x1010000010100000), CONST64(0x1010001010100000), CONST64(0x1010000010100010), CONST64(0x1010001010100010), - CONST64(0x1010100010100000), CONST64(0x1010101010100000), CONST64(0x1010100010100010), CONST64(0x1010101010100010), - CONST64(0x1010000010101000), CONST64(0x1010001010101000), CONST64(0x1010000010101010), CONST64(0x1010001010101010), +{ CONST64(0x0000000000000000), CONST64(0x0000001000000000), CONST64(0x0000000000000010), CONST64(0x0000001000000010), + CONST64(0x0000100000000000), CONST64(0x0000101000000000), CONST64(0x0000100000000010), CONST64(0x0000101000000010), + CONST64(0x0000000000001000), CONST64(0x0000001000001000), CONST64(0x0000000000001010), CONST64(0x0000001000001010), + CONST64(0x0000100000001000), CONST64(0x0000101000001000), CONST64(0x0000100000001010), CONST64(0x0000101000001010), + CONST64(0x0010000000000000), CONST64(0x0010001000000000), CONST64(0x0010000000000010), CONST64(0x0010001000000010), + CONST64(0x0010100000000000), CONST64(0x0010101000000000), CONST64(0x0010100000000010), CONST64(0x0010101000000010), + CONST64(0x0010000000001000), CONST64(0x0010001000001000), CONST64(0x0010000000001010), CONST64(0x0010001000001010), + CONST64(0x0010100000001000), CONST64(0x0010101000001000), CONST64(0x0010100000001010), CONST64(0x0010101000001010), + CONST64(0x0000000000100000), CONST64(0x0000001000100000), CONST64(0x0000000000100010), CONST64(0x0000001000100010), + CONST64(0x0000100000100000), CONST64(0x0000101000100000), CONST64(0x0000100000100010), CONST64(0x0000101000100010), + CONST64(0x0000000000101000), CONST64(0x0000001000101000), CONST64(0x0000000000101010), CONST64(0x0000001000101010), + CONST64(0x0000100000101000), CONST64(0x0000101000101000), CONST64(0x0000100000101010), CONST64(0x0000101000101010), + CONST64(0x0010000000100000), CONST64(0x0010001000100000), CONST64(0x0010000000100010), CONST64(0x0010001000100010), + CONST64(0x0010100000100000), CONST64(0x0010101000100000), CONST64(0x0010100000100010), CONST64(0x0010101000100010), + CONST64(0x0010000000101000), CONST64(0x0010001000101000), CONST64(0x0010000000101010), CONST64(0x0010001000101010), + CONST64(0x0010100000101000), CONST64(0x0010101000101000), CONST64(0x0010100000101010), CONST64(0x0010101000101010), + CONST64(0x1000000000000000), CONST64(0x1000001000000000), CONST64(0x1000000000000010), CONST64(0x1000001000000010), + CONST64(0x1000100000000000), CONST64(0x1000101000000000), CONST64(0x1000100000000010), CONST64(0x1000101000000010), + CONST64(0x1000000000001000), CONST64(0x1000001000001000), CONST64(0x1000000000001010), CONST64(0x1000001000001010), + CONST64(0x1000100000001000), CONST64(0x1000101000001000), CONST64(0x1000100000001010), CONST64(0x1000101000001010), + CONST64(0x1010000000000000), CONST64(0x1010001000000000), CONST64(0x1010000000000010), CONST64(0x1010001000000010), + CONST64(0x1010100000000000), CONST64(0x1010101000000000), CONST64(0x1010100000000010), CONST64(0x1010101000000010), + CONST64(0x1010000000001000), CONST64(0x1010001000001000), CONST64(0x1010000000001010), CONST64(0x1010001000001010), + CONST64(0x1010100000001000), CONST64(0x1010101000001000), CONST64(0x1010100000001010), CONST64(0x1010101000001010), + CONST64(0x1000000000100000), CONST64(0x1000001000100000), CONST64(0x1000000000100010), CONST64(0x1000001000100010), + CONST64(0x1000100000100000), CONST64(0x1000101000100000), CONST64(0x1000100000100010), CONST64(0x1000101000100010), + CONST64(0x1000000000101000), CONST64(0x1000001000101000), CONST64(0x1000000000101010), CONST64(0x1000001000101010), + CONST64(0x1000100000101000), CONST64(0x1000101000101000), CONST64(0x1000100000101010), CONST64(0x1000101000101010), + CONST64(0x1010000000100000), CONST64(0x1010001000100000), CONST64(0x1010000000100010), CONST64(0x1010001000100010), + CONST64(0x1010100000100000), CONST64(0x1010101000100000), CONST64(0x1010100000100010), CONST64(0x1010101000100010), + CONST64(0x1010000000101000), CONST64(0x1010001000101000), CONST64(0x1010000000101010), CONST64(0x1010001000101010), + CONST64(0x1010100000101000), CONST64(0x1010101000101000), CONST64(0x1010100000101010), CONST64(0x1010101000101010), + CONST64(0x0000000010000000), CONST64(0x0000001010000000), CONST64(0x0000000010000010), CONST64(0x0000001010000010), + CONST64(0x0000100010000000), CONST64(0x0000101010000000), CONST64(0x0000100010000010), CONST64(0x0000101010000010), + CONST64(0x0000000010001000), CONST64(0x0000001010001000), CONST64(0x0000000010001010), CONST64(0x0000001010001010), + CONST64(0x0000100010001000), CONST64(0x0000101010001000), CONST64(0x0000100010001010), CONST64(0x0000101010001010), + CONST64(0x0010000010000000), CONST64(0x0010001010000000), CONST64(0x0010000010000010), CONST64(0x0010001010000010), + CONST64(0x0010100010000000), CONST64(0x0010101010000000), CONST64(0x0010100010000010), CONST64(0x0010101010000010), + CONST64(0x0010000010001000), CONST64(0x0010001010001000), CONST64(0x0010000010001010), CONST64(0x0010001010001010), + CONST64(0x0010100010001000), CONST64(0x0010101010001000), CONST64(0x0010100010001010), CONST64(0x0010101010001010), + CONST64(0x0000000010100000), CONST64(0x0000001010100000), CONST64(0x0000000010100010), CONST64(0x0000001010100010), + CONST64(0x0000100010100000), CONST64(0x0000101010100000), CONST64(0x0000100010100010), CONST64(0x0000101010100010), + CONST64(0x0000000010101000), CONST64(0x0000001010101000), CONST64(0x0000000010101010), CONST64(0x0000001010101010), + CONST64(0x0000100010101000), CONST64(0x0000101010101000), CONST64(0x0000100010101010), CONST64(0x0000101010101010), + CONST64(0x0010000010100000), CONST64(0x0010001010100000), CONST64(0x0010000010100010), CONST64(0x0010001010100010), + CONST64(0x0010100010100000), CONST64(0x0010101010100000), CONST64(0x0010100010100010), CONST64(0x0010101010100010), + CONST64(0x0010000010101000), CONST64(0x0010001010101000), CONST64(0x0010000010101010), CONST64(0x0010001010101010), + CONST64(0x0010100010101000), CONST64(0x0010101010101000), CONST64(0x0010100010101010), CONST64(0x0010101010101010), + CONST64(0x1000000010000000), CONST64(0x1000001010000000), CONST64(0x1000000010000010), CONST64(0x1000001010000010), + CONST64(0x1000100010000000), CONST64(0x1000101010000000), CONST64(0x1000100010000010), CONST64(0x1000101010000010), + CONST64(0x1000000010001000), CONST64(0x1000001010001000), CONST64(0x1000000010001010), CONST64(0x1000001010001010), + CONST64(0x1000100010001000), CONST64(0x1000101010001000), CONST64(0x1000100010001010), CONST64(0x1000101010001010), + CONST64(0x1010000010000000), CONST64(0x1010001010000000), CONST64(0x1010000010000010), CONST64(0x1010001010000010), + CONST64(0x1010100010000000), CONST64(0x1010101010000000), CONST64(0x1010100010000010), CONST64(0x1010101010000010), + CONST64(0x1010000010001000), CONST64(0x1010001010001000), CONST64(0x1010000010001010), CONST64(0x1010001010001010), + CONST64(0x1010100010001000), CONST64(0x1010101010001000), CONST64(0x1010100010001010), CONST64(0x1010101010001010), + CONST64(0x1000000010100000), CONST64(0x1000001010100000), CONST64(0x1000000010100010), CONST64(0x1000001010100010), + CONST64(0x1000100010100000), CONST64(0x1000101010100000), CONST64(0x1000100010100010), CONST64(0x1000101010100010), + CONST64(0x1000000010101000), CONST64(0x1000001010101000), CONST64(0x1000000010101010), CONST64(0x1000001010101010), + CONST64(0x1000100010101000), CONST64(0x1000101010101000), CONST64(0x1000100010101010), CONST64(0x1000101010101010), + CONST64(0x1010000010100000), CONST64(0x1010001010100000), CONST64(0x1010000010100010), CONST64(0x1010001010100010), + CONST64(0x1010100010100000), CONST64(0x1010101010100000), CONST64(0x1010100010100010), CONST64(0x1010101010100010), + CONST64(0x1010000010101000), CONST64(0x1010001010101000), CONST64(0x1010000010101010), CONST64(0x1010001010101010), CONST64(0x1010100010101000), CONST64(0x1010101010101000), CONST64(0x1010100010101010), CONST64(0x1010101010101010) - }, -{ CONST64(0x0000000000000000), CONST64(0x0000000800000000), CONST64(0x0000000000000008), CONST64(0x0000000800000008), - CONST64(0x0000080000000000), CONST64(0x0000080800000000), CONST64(0x0000080000000008), CONST64(0x0000080800000008), - CONST64(0x0000000000000800), CONST64(0x0000000800000800), CONST64(0x0000000000000808), CONST64(0x0000000800000808), - CONST64(0x0000080000000800), CONST64(0x0000080800000800), CONST64(0x0000080000000808), CONST64(0x0000080800000808), - CONST64(0x0008000000000000), CONST64(0x0008000800000000), CONST64(0x0008000000000008), CONST64(0x0008000800000008), - CONST64(0x0008080000000000), CONST64(0x0008080800000000), CONST64(0x0008080000000008), CONST64(0x0008080800000008), - CONST64(0x0008000000000800), CONST64(0x0008000800000800), CONST64(0x0008000000000808), CONST64(0x0008000800000808), - CONST64(0x0008080000000800), CONST64(0x0008080800000800), CONST64(0x0008080000000808), CONST64(0x0008080800000808), - CONST64(0x0000000000080000), CONST64(0x0000000800080000), CONST64(0x0000000000080008), CONST64(0x0000000800080008), - CONST64(0x0000080000080000), CONST64(0x0000080800080000), CONST64(0x0000080000080008), CONST64(0x0000080800080008), - CONST64(0x0000000000080800), CONST64(0x0000000800080800), CONST64(0x0000000000080808), CONST64(0x0000000800080808), - CONST64(0x0000080000080800), CONST64(0x0000080800080800), CONST64(0x0000080000080808), CONST64(0x0000080800080808), - CONST64(0x0008000000080000), CONST64(0x0008000800080000), CONST64(0x0008000000080008), CONST64(0x0008000800080008), - CONST64(0x0008080000080000), CONST64(0x0008080800080000), CONST64(0x0008080000080008), CONST64(0x0008080800080008), - CONST64(0x0008000000080800), CONST64(0x0008000800080800), CONST64(0x0008000000080808), CONST64(0x0008000800080808), - CONST64(0x0008080000080800), CONST64(0x0008080800080800), CONST64(0x0008080000080808), CONST64(0x0008080800080808), - CONST64(0x0800000000000000), CONST64(0x0800000800000000), CONST64(0x0800000000000008), CONST64(0x0800000800000008), - CONST64(0x0800080000000000), CONST64(0x0800080800000000), CONST64(0x0800080000000008), CONST64(0x0800080800000008), - CONST64(0x0800000000000800), CONST64(0x0800000800000800), CONST64(0x0800000000000808), CONST64(0x0800000800000808), - CONST64(0x0800080000000800), CONST64(0x0800080800000800), CONST64(0x0800080000000808), CONST64(0x0800080800000808), - CONST64(0x0808000000000000), CONST64(0x0808000800000000), CONST64(0x0808000000000008), CONST64(0x0808000800000008), - CONST64(0x0808080000000000), CONST64(0x0808080800000000), CONST64(0x0808080000000008), CONST64(0x0808080800000008), - CONST64(0x0808000000000800), CONST64(0x0808000800000800), CONST64(0x0808000000000808), CONST64(0x0808000800000808), - CONST64(0x0808080000000800), CONST64(0x0808080800000800), CONST64(0x0808080000000808), CONST64(0x0808080800000808), - CONST64(0x0800000000080000), CONST64(0x0800000800080000), CONST64(0x0800000000080008), CONST64(0x0800000800080008), - CONST64(0x0800080000080000), CONST64(0x0800080800080000), CONST64(0x0800080000080008), CONST64(0x0800080800080008), - CONST64(0x0800000000080800), CONST64(0x0800000800080800), CONST64(0x0800000000080808), CONST64(0x0800000800080808), - CONST64(0x0800080000080800), CONST64(0x0800080800080800), CONST64(0x0800080000080808), CONST64(0x0800080800080808), - CONST64(0x0808000000080000), CONST64(0x0808000800080000), CONST64(0x0808000000080008), CONST64(0x0808000800080008), - CONST64(0x0808080000080000), CONST64(0x0808080800080000), CONST64(0x0808080000080008), CONST64(0x0808080800080008), - CONST64(0x0808000000080800), CONST64(0x0808000800080800), CONST64(0x0808000000080808), CONST64(0x0808000800080808), - CONST64(0x0808080000080800), CONST64(0x0808080800080800), CONST64(0x0808080000080808), CONST64(0x0808080800080808), - CONST64(0x0000000008000000), CONST64(0x0000000808000000), CONST64(0x0000000008000008), CONST64(0x0000000808000008), - CONST64(0x0000080008000000), CONST64(0x0000080808000000), CONST64(0x0000080008000008), CONST64(0x0000080808000008), - CONST64(0x0000000008000800), CONST64(0x0000000808000800), CONST64(0x0000000008000808), CONST64(0x0000000808000808), - CONST64(0x0000080008000800), CONST64(0x0000080808000800), CONST64(0x0000080008000808), CONST64(0x0000080808000808), - CONST64(0x0008000008000000), CONST64(0x0008000808000000), CONST64(0x0008000008000008), CONST64(0x0008000808000008), - CONST64(0x0008080008000000), CONST64(0x0008080808000000), CONST64(0x0008080008000008), CONST64(0x0008080808000008), - CONST64(0x0008000008000800), CONST64(0x0008000808000800), CONST64(0x0008000008000808), CONST64(0x0008000808000808), - CONST64(0x0008080008000800), CONST64(0x0008080808000800), CONST64(0x0008080008000808), CONST64(0x0008080808000808), - CONST64(0x0000000008080000), CONST64(0x0000000808080000), CONST64(0x0000000008080008), CONST64(0x0000000808080008), - CONST64(0x0000080008080000), CONST64(0x0000080808080000), CONST64(0x0000080008080008), CONST64(0x0000080808080008), - CONST64(0x0000000008080800), CONST64(0x0000000808080800), CONST64(0x0000000008080808), CONST64(0x0000000808080808), - CONST64(0x0000080008080800), CONST64(0x0000080808080800), CONST64(0x0000080008080808), CONST64(0x0000080808080808), - CONST64(0x0008000008080000), CONST64(0x0008000808080000), CONST64(0x0008000008080008), CONST64(0x0008000808080008), - CONST64(0x0008080008080000), CONST64(0x0008080808080000), CONST64(0x0008080008080008), CONST64(0x0008080808080008), - CONST64(0x0008000008080800), CONST64(0x0008000808080800), CONST64(0x0008000008080808), CONST64(0x0008000808080808), - CONST64(0x0008080008080800), CONST64(0x0008080808080800), CONST64(0x0008080008080808), CONST64(0x0008080808080808), - CONST64(0x0800000008000000), CONST64(0x0800000808000000), CONST64(0x0800000008000008), CONST64(0x0800000808000008), - CONST64(0x0800080008000000), CONST64(0x0800080808000000), CONST64(0x0800080008000008), CONST64(0x0800080808000008), - CONST64(0x0800000008000800), CONST64(0x0800000808000800), CONST64(0x0800000008000808), CONST64(0x0800000808000808), - CONST64(0x0800080008000800), CONST64(0x0800080808000800), CONST64(0x0800080008000808), CONST64(0x0800080808000808), - CONST64(0x0808000008000000), CONST64(0x0808000808000000), CONST64(0x0808000008000008), CONST64(0x0808000808000008), - CONST64(0x0808080008000000), CONST64(0x0808080808000000), CONST64(0x0808080008000008), CONST64(0x0808080808000008), - CONST64(0x0808000008000800), CONST64(0x0808000808000800), CONST64(0x0808000008000808), CONST64(0x0808000808000808), - CONST64(0x0808080008000800), CONST64(0x0808080808000800), CONST64(0x0808080008000808), CONST64(0x0808080808000808), - CONST64(0x0800000008080000), CONST64(0x0800000808080000), CONST64(0x0800000008080008), CONST64(0x0800000808080008), - CONST64(0x0800080008080000), CONST64(0x0800080808080000), CONST64(0x0800080008080008), CONST64(0x0800080808080008), - CONST64(0x0800000008080800), CONST64(0x0800000808080800), CONST64(0x0800000008080808), CONST64(0x0800000808080808), - CONST64(0x0800080008080800), CONST64(0x0800080808080800), CONST64(0x0800080008080808), CONST64(0x0800080808080808), - CONST64(0x0808000008080000), CONST64(0x0808000808080000), CONST64(0x0808000008080008), CONST64(0x0808000808080008), - CONST64(0x0808080008080000), CONST64(0x0808080808080000), CONST64(0x0808080008080008), CONST64(0x0808080808080008), - CONST64(0x0808000008080800), CONST64(0x0808000808080800), CONST64(0x0808000008080808), CONST64(0x0808000808080808), + }, +{ CONST64(0x0000000000000000), CONST64(0x0000000800000000), CONST64(0x0000000000000008), CONST64(0x0000000800000008), + CONST64(0x0000080000000000), CONST64(0x0000080800000000), CONST64(0x0000080000000008), CONST64(0x0000080800000008), + CONST64(0x0000000000000800), CONST64(0x0000000800000800), CONST64(0x0000000000000808), CONST64(0x0000000800000808), + CONST64(0x0000080000000800), CONST64(0x0000080800000800), CONST64(0x0000080000000808), CONST64(0x0000080800000808), + CONST64(0x0008000000000000), CONST64(0x0008000800000000), CONST64(0x0008000000000008), CONST64(0x0008000800000008), + CONST64(0x0008080000000000), CONST64(0x0008080800000000), CONST64(0x0008080000000008), CONST64(0x0008080800000008), + CONST64(0x0008000000000800), CONST64(0x0008000800000800), CONST64(0x0008000000000808), CONST64(0x0008000800000808), + CONST64(0x0008080000000800), CONST64(0x0008080800000800), CONST64(0x0008080000000808), CONST64(0x0008080800000808), + CONST64(0x0000000000080000), CONST64(0x0000000800080000), CONST64(0x0000000000080008), CONST64(0x0000000800080008), + CONST64(0x0000080000080000), CONST64(0x0000080800080000), CONST64(0x0000080000080008), CONST64(0x0000080800080008), + CONST64(0x0000000000080800), CONST64(0x0000000800080800), CONST64(0x0000000000080808), CONST64(0x0000000800080808), + CONST64(0x0000080000080800), CONST64(0x0000080800080800), CONST64(0x0000080000080808), CONST64(0x0000080800080808), + CONST64(0x0008000000080000), CONST64(0x0008000800080000), CONST64(0x0008000000080008), CONST64(0x0008000800080008), + CONST64(0x0008080000080000), CONST64(0x0008080800080000), CONST64(0x0008080000080008), CONST64(0x0008080800080008), + CONST64(0x0008000000080800), CONST64(0x0008000800080800), CONST64(0x0008000000080808), CONST64(0x0008000800080808), + CONST64(0x0008080000080800), CONST64(0x0008080800080800), CONST64(0x0008080000080808), CONST64(0x0008080800080808), + CONST64(0x0800000000000000), CONST64(0x0800000800000000), CONST64(0x0800000000000008), CONST64(0x0800000800000008), + CONST64(0x0800080000000000), CONST64(0x0800080800000000), CONST64(0x0800080000000008), CONST64(0x0800080800000008), + CONST64(0x0800000000000800), CONST64(0x0800000800000800), CONST64(0x0800000000000808), CONST64(0x0800000800000808), + CONST64(0x0800080000000800), CONST64(0x0800080800000800), CONST64(0x0800080000000808), CONST64(0x0800080800000808), + CONST64(0x0808000000000000), CONST64(0x0808000800000000), CONST64(0x0808000000000008), CONST64(0x0808000800000008), + CONST64(0x0808080000000000), CONST64(0x0808080800000000), CONST64(0x0808080000000008), CONST64(0x0808080800000008), + CONST64(0x0808000000000800), CONST64(0x0808000800000800), CONST64(0x0808000000000808), CONST64(0x0808000800000808), + CONST64(0x0808080000000800), CONST64(0x0808080800000800), CONST64(0x0808080000000808), CONST64(0x0808080800000808), + CONST64(0x0800000000080000), CONST64(0x0800000800080000), CONST64(0x0800000000080008), CONST64(0x0800000800080008), + CONST64(0x0800080000080000), CONST64(0x0800080800080000), CONST64(0x0800080000080008), CONST64(0x0800080800080008), + CONST64(0x0800000000080800), CONST64(0x0800000800080800), CONST64(0x0800000000080808), CONST64(0x0800000800080808), + CONST64(0x0800080000080800), CONST64(0x0800080800080800), CONST64(0x0800080000080808), CONST64(0x0800080800080808), + CONST64(0x0808000000080000), CONST64(0x0808000800080000), CONST64(0x0808000000080008), CONST64(0x0808000800080008), + CONST64(0x0808080000080000), CONST64(0x0808080800080000), CONST64(0x0808080000080008), CONST64(0x0808080800080008), + CONST64(0x0808000000080800), CONST64(0x0808000800080800), CONST64(0x0808000000080808), CONST64(0x0808000800080808), + CONST64(0x0808080000080800), CONST64(0x0808080800080800), CONST64(0x0808080000080808), CONST64(0x0808080800080808), + CONST64(0x0000000008000000), CONST64(0x0000000808000000), CONST64(0x0000000008000008), CONST64(0x0000000808000008), + CONST64(0x0000080008000000), CONST64(0x0000080808000000), CONST64(0x0000080008000008), CONST64(0x0000080808000008), + CONST64(0x0000000008000800), CONST64(0x0000000808000800), CONST64(0x0000000008000808), CONST64(0x0000000808000808), + CONST64(0x0000080008000800), CONST64(0x0000080808000800), CONST64(0x0000080008000808), CONST64(0x0000080808000808), + CONST64(0x0008000008000000), CONST64(0x0008000808000000), CONST64(0x0008000008000008), CONST64(0x0008000808000008), + CONST64(0x0008080008000000), CONST64(0x0008080808000000), CONST64(0x0008080008000008), CONST64(0x0008080808000008), + CONST64(0x0008000008000800), CONST64(0x0008000808000800), CONST64(0x0008000008000808), CONST64(0x0008000808000808), + CONST64(0x0008080008000800), CONST64(0x0008080808000800), CONST64(0x0008080008000808), CONST64(0x0008080808000808), + CONST64(0x0000000008080000), CONST64(0x0000000808080000), CONST64(0x0000000008080008), CONST64(0x0000000808080008), + CONST64(0x0000080008080000), CONST64(0x0000080808080000), CONST64(0x0000080008080008), CONST64(0x0000080808080008), + CONST64(0x0000000008080800), CONST64(0x0000000808080800), CONST64(0x0000000008080808), CONST64(0x0000000808080808), + CONST64(0x0000080008080800), CONST64(0x0000080808080800), CONST64(0x0000080008080808), CONST64(0x0000080808080808), + CONST64(0x0008000008080000), CONST64(0x0008000808080000), CONST64(0x0008000008080008), CONST64(0x0008000808080008), + CONST64(0x0008080008080000), CONST64(0x0008080808080000), CONST64(0x0008080008080008), CONST64(0x0008080808080008), + CONST64(0x0008000008080800), CONST64(0x0008000808080800), CONST64(0x0008000008080808), CONST64(0x0008000808080808), + CONST64(0x0008080008080800), CONST64(0x0008080808080800), CONST64(0x0008080008080808), CONST64(0x0008080808080808), + CONST64(0x0800000008000000), CONST64(0x0800000808000000), CONST64(0x0800000008000008), CONST64(0x0800000808000008), + CONST64(0x0800080008000000), CONST64(0x0800080808000000), CONST64(0x0800080008000008), CONST64(0x0800080808000008), + CONST64(0x0800000008000800), CONST64(0x0800000808000800), CONST64(0x0800000008000808), CONST64(0x0800000808000808), + CONST64(0x0800080008000800), CONST64(0x0800080808000800), CONST64(0x0800080008000808), CONST64(0x0800080808000808), + CONST64(0x0808000008000000), CONST64(0x0808000808000000), CONST64(0x0808000008000008), CONST64(0x0808000808000008), + CONST64(0x0808080008000000), CONST64(0x0808080808000000), CONST64(0x0808080008000008), CONST64(0x0808080808000008), + CONST64(0x0808000008000800), CONST64(0x0808000808000800), CONST64(0x0808000008000808), CONST64(0x0808000808000808), + CONST64(0x0808080008000800), CONST64(0x0808080808000800), CONST64(0x0808080008000808), CONST64(0x0808080808000808), + CONST64(0x0800000008080000), CONST64(0x0800000808080000), CONST64(0x0800000008080008), CONST64(0x0800000808080008), + CONST64(0x0800080008080000), CONST64(0x0800080808080000), CONST64(0x0800080008080008), CONST64(0x0800080808080008), + CONST64(0x0800000008080800), CONST64(0x0800000808080800), CONST64(0x0800000008080808), CONST64(0x0800000808080808), + CONST64(0x0800080008080800), CONST64(0x0800080808080800), CONST64(0x0800080008080808), CONST64(0x0800080808080808), + CONST64(0x0808000008080000), CONST64(0x0808000808080000), CONST64(0x0808000008080008), CONST64(0x0808000808080008), + CONST64(0x0808080008080000), CONST64(0x0808080808080000), CONST64(0x0808080008080008), CONST64(0x0808080808080008), + CONST64(0x0808000008080800), CONST64(0x0808000808080800), CONST64(0x0808000008080808), CONST64(0x0808000808080808), CONST64(0x0808080008080800), CONST64(0x0808080808080800), CONST64(0x0808080008080808), CONST64(0x0808080808080808) - }, -{ CONST64(0x0000000000000000), CONST64(0x0000000400000000), CONST64(0x0000000000000004), CONST64(0x0000000400000004), - CONST64(0x0000040000000000), CONST64(0x0000040400000000), CONST64(0x0000040000000004), CONST64(0x0000040400000004), - CONST64(0x0000000000000400), CONST64(0x0000000400000400), CONST64(0x0000000000000404), CONST64(0x0000000400000404), - CONST64(0x0000040000000400), CONST64(0x0000040400000400), CONST64(0x0000040000000404), CONST64(0x0000040400000404), - CONST64(0x0004000000000000), CONST64(0x0004000400000000), CONST64(0x0004000000000004), CONST64(0x0004000400000004), - CONST64(0x0004040000000000), CONST64(0x0004040400000000), CONST64(0x0004040000000004), CONST64(0x0004040400000004), - CONST64(0x0004000000000400), CONST64(0x0004000400000400), CONST64(0x0004000000000404), CONST64(0x0004000400000404), - CONST64(0x0004040000000400), CONST64(0x0004040400000400), CONST64(0x0004040000000404), CONST64(0x0004040400000404), - CONST64(0x0000000000040000), CONST64(0x0000000400040000), CONST64(0x0000000000040004), CONST64(0x0000000400040004), - CONST64(0x0000040000040000), CONST64(0x0000040400040000), CONST64(0x0000040000040004), CONST64(0x0000040400040004), - CONST64(0x0000000000040400), CONST64(0x0000000400040400), CONST64(0x0000000000040404), CONST64(0x0000000400040404), - CONST64(0x0000040000040400), CONST64(0x0000040400040400), CONST64(0x0000040000040404), CONST64(0x0000040400040404), - CONST64(0x0004000000040000), CONST64(0x0004000400040000), CONST64(0x0004000000040004), CONST64(0x0004000400040004), - CONST64(0x0004040000040000), CONST64(0x0004040400040000), CONST64(0x0004040000040004), CONST64(0x0004040400040004), - CONST64(0x0004000000040400), CONST64(0x0004000400040400), CONST64(0x0004000000040404), CONST64(0x0004000400040404), - CONST64(0x0004040000040400), CONST64(0x0004040400040400), CONST64(0x0004040000040404), CONST64(0x0004040400040404), - CONST64(0x0400000000000000), CONST64(0x0400000400000000), CONST64(0x0400000000000004), CONST64(0x0400000400000004), - CONST64(0x0400040000000000), CONST64(0x0400040400000000), CONST64(0x0400040000000004), CONST64(0x0400040400000004), - CONST64(0x0400000000000400), CONST64(0x0400000400000400), CONST64(0x0400000000000404), CONST64(0x0400000400000404), - CONST64(0x0400040000000400), CONST64(0x0400040400000400), CONST64(0x0400040000000404), CONST64(0x0400040400000404), - CONST64(0x0404000000000000), CONST64(0x0404000400000000), CONST64(0x0404000000000004), CONST64(0x0404000400000004), - CONST64(0x0404040000000000), CONST64(0x0404040400000000), CONST64(0x0404040000000004), CONST64(0x0404040400000004), - CONST64(0x0404000000000400), CONST64(0x0404000400000400), CONST64(0x0404000000000404), CONST64(0x0404000400000404), - CONST64(0x0404040000000400), CONST64(0x0404040400000400), CONST64(0x0404040000000404), CONST64(0x0404040400000404), - CONST64(0x0400000000040000), CONST64(0x0400000400040000), CONST64(0x0400000000040004), CONST64(0x0400000400040004), - CONST64(0x0400040000040000), CONST64(0x0400040400040000), CONST64(0x0400040000040004), CONST64(0x0400040400040004), - CONST64(0x0400000000040400), CONST64(0x0400000400040400), CONST64(0x0400000000040404), CONST64(0x0400000400040404), - CONST64(0x0400040000040400), CONST64(0x0400040400040400), CONST64(0x0400040000040404), CONST64(0x0400040400040404), - CONST64(0x0404000000040000), CONST64(0x0404000400040000), CONST64(0x0404000000040004), CONST64(0x0404000400040004), - CONST64(0x0404040000040000), CONST64(0x0404040400040000), CONST64(0x0404040000040004), CONST64(0x0404040400040004), - CONST64(0x0404000000040400), CONST64(0x0404000400040400), CONST64(0x0404000000040404), CONST64(0x0404000400040404), - CONST64(0x0404040000040400), CONST64(0x0404040400040400), CONST64(0x0404040000040404), CONST64(0x0404040400040404), - CONST64(0x0000000004000000), CONST64(0x0000000404000000), CONST64(0x0000000004000004), CONST64(0x0000000404000004), - CONST64(0x0000040004000000), CONST64(0x0000040404000000), CONST64(0x0000040004000004), CONST64(0x0000040404000004), - CONST64(0x0000000004000400), CONST64(0x0000000404000400), CONST64(0x0000000004000404), CONST64(0x0000000404000404), - CONST64(0x0000040004000400), CONST64(0x0000040404000400), CONST64(0x0000040004000404), CONST64(0x0000040404000404), - CONST64(0x0004000004000000), CONST64(0x0004000404000000), CONST64(0x0004000004000004), CONST64(0x0004000404000004), - CONST64(0x0004040004000000), CONST64(0x0004040404000000), CONST64(0x0004040004000004), CONST64(0x0004040404000004), - CONST64(0x0004000004000400), CONST64(0x0004000404000400), CONST64(0x0004000004000404), CONST64(0x0004000404000404), - CONST64(0x0004040004000400), CONST64(0x0004040404000400), CONST64(0x0004040004000404), CONST64(0x0004040404000404), - CONST64(0x0000000004040000), CONST64(0x0000000404040000), CONST64(0x0000000004040004), CONST64(0x0000000404040004), - CONST64(0x0000040004040000), CONST64(0x0000040404040000), CONST64(0x0000040004040004), CONST64(0x0000040404040004), - CONST64(0x0000000004040400), CONST64(0x0000000404040400), CONST64(0x0000000004040404), CONST64(0x0000000404040404), - CONST64(0x0000040004040400), CONST64(0x0000040404040400), CONST64(0x0000040004040404), CONST64(0x0000040404040404), - CONST64(0x0004000004040000), CONST64(0x0004000404040000), CONST64(0x0004000004040004), CONST64(0x0004000404040004), - CONST64(0x0004040004040000), CONST64(0x0004040404040000), CONST64(0x0004040004040004), CONST64(0x0004040404040004), - CONST64(0x0004000004040400), CONST64(0x0004000404040400), CONST64(0x0004000004040404), CONST64(0x0004000404040404), - CONST64(0x0004040004040400), CONST64(0x0004040404040400), CONST64(0x0004040004040404), CONST64(0x0004040404040404), - CONST64(0x0400000004000000), CONST64(0x0400000404000000), CONST64(0x0400000004000004), CONST64(0x0400000404000004), - CONST64(0x0400040004000000), CONST64(0x0400040404000000), CONST64(0x0400040004000004), CONST64(0x0400040404000004), - CONST64(0x0400000004000400), CONST64(0x0400000404000400), CONST64(0x0400000004000404), CONST64(0x0400000404000404), - CONST64(0x0400040004000400), CONST64(0x0400040404000400), CONST64(0x0400040004000404), CONST64(0x0400040404000404), - CONST64(0x0404000004000000), CONST64(0x0404000404000000), CONST64(0x0404000004000004), CONST64(0x0404000404000004), - CONST64(0x0404040004000000), CONST64(0x0404040404000000), CONST64(0x0404040004000004), CONST64(0x0404040404000004), - CONST64(0x0404000004000400), CONST64(0x0404000404000400), CONST64(0x0404000004000404), CONST64(0x0404000404000404), - CONST64(0x0404040004000400), CONST64(0x0404040404000400), CONST64(0x0404040004000404), CONST64(0x0404040404000404), - CONST64(0x0400000004040000), CONST64(0x0400000404040000), CONST64(0x0400000004040004), CONST64(0x0400000404040004), - CONST64(0x0400040004040000), CONST64(0x0400040404040000), CONST64(0x0400040004040004), CONST64(0x0400040404040004), - CONST64(0x0400000004040400), CONST64(0x0400000404040400), CONST64(0x0400000004040404), CONST64(0x0400000404040404), - CONST64(0x0400040004040400), CONST64(0x0400040404040400), CONST64(0x0400040004040404), CONST64(0x0400040404040404), - CONST64(0x0404000004040000), CONST64(0x0404000404040000), CONST64(0x0404000004040004), CONST64(0x0404000404040004), - CONST64(0x0404040004040000), CONST64(0x0404040404040000), CONST64(0x0404040004040004), CONST64(0x0404040404040004), - CONST64(0x0404000004040400), CONST64(0x0404000404040400), CONST64(0x0404000004040404), CONST64(0x0404000404040404), + }, +{ CONST64(0x0000000000000000), CONST64(0x0000000400000000), CONST64(0x0000000000000004), CONST64(0x0000000400000004), + CONST64(0x0000040000000000), CONST64(0x0000040400000000), CONST64(0x0000040000000004), CONST64(0x0000040400000004), + CONST64(0x0000000000000400), CONST64(0x0000000400000400), CONST64(0x0000000000000404), CONST64(0x0000000400000404), + CONST64(0x0000040000000400), CONST64(0x0000040400000400), CONST64(0x0000040000000404), CONST64(0x0000040400000404), + CONST64(0x0004000000000000), CONST64(0x0004000400000000), CONST64(0x0004000000000004), CONST64(0x0004000400000004), + CONST64(0x0004040000000000), CONST64(0x0004040400000000), CONST64(0x0004040000000004), CONST64(0x0004040400000004), + CONST64(0x0004000000000400), CONST64(0x0004000400000400), CONST64(0x0004000000000404), CONST64(0x0004000400000404), + CONST64(0x0004040000000400), CONST64(0x0004040400000400), CONST64(0x0004040000000404), CONST64(0x0004040400000404), + CONST64(0x0000000000040000), CONST64(0x0000000400040000), CONST64(0x0000000000040004), CONST64(0x0000000400040004), + CONST64(0x0000040000040000), CONST64(0x0000040400040000), CONST64(0x0000040000040004), CONST64(0x0000040400040004), + CONST64(0x0000000000040400), CONST64(0x0000000400040400), CONST64(0x0000000000040404), CONST64(0x0000000400040404), + CONST64(0x0000040000040400), CONST64(0x0000040400040400), CONST64(0x0000040000040404), CONST64(0x0000040400040404), + CONST64(0x0004000000040000), CONST64(0x0004000400040000), CONST64(0x0004000000040004), CONST64(0x0004000400040004), + CONST64(0x0004040000040000), CONST64(0x0004040400040000), CONST64(0x0004040000040004), CONST64(0x0004040400040004), + CONST64(0x0004000000040400), CONST64(0x0004000400040400), CONST64(0x0004000000040404), CONST64(0x0004000400040404), + CONST64(0x0004040000040400), CONST64(0x0004040400040400), CONST64(0x0004040000040404), CONST64(0x0004040400040404), + CONST64(0x0400000000000000), CONST64(0x0400000400000000), CONST64(0x0400000000000004), CONST64(0x0400000400000004), + CONST64(0x0400040000000000), CONST64(0x0400040400000000), CONST64(0x0400040000000004), CONST64(0x0400040400000004), + CONST64(0x0400000000000400), CONST64(0x0400000400000400), CONST64(0x0400000000000404), CONST64(0x0400000400000404), + CONST64(0x0400040000000400), CONST64(0x0400040400000400), CONST64(0x0400040000000404), CONST64(0x0400040400000404), + CONST64(0x0404000000000000), CONST64(0x0404000400000000), CONST64(0x0404000000000004), CONST64(0x0404000400000004), + CONST64(0x0404040000000000), CONST64(0x0404040400000000), CONST64(0x0404040000000004), CONST64(0x0404040400000004), + CONST64(0x0404000000000400), CONST64(0x0404000400000400), CONST64(0x0404000000000404), CONST64(0x0404000400000404), + CONST64(0x0404040000000400), CONST64(0x0404040400000400), CONST64(0x0404040000000404), CONST64(0x0404040400000404), + CONST64(0x0400000000040000), CONST64(0x0400000400040000), CONST64(0x0400000000040004), CONST64(0x0400000400040004), + CONST64(0x0400040000040000), CONST64(0x0400040400040000), CONST64(0x0400040000040004), CONST64(0x0400040400040004), + CONST64(0x0400000000040400), CONST64(0x0400000400040400), CONST64(0x0400000000040404), CONST64(0x0400000400040404), + CONST64(0x0400040000040400), CONST64(0x0400040400040400), CONST64(0x0400040000040404), CONST64(0x0400040400040404), + CONST64(0x0404000000040000), CONST64(0x0404000400040000), CONST64(0x0404000000040004), CONST64(0x0404000400040004), + CONST64(0x0404040000040000), CONST64(0x0404040400040000), CONST64(0x0404040000040004), CONST64(0x0404040400040004), + CONST64(0x0404000000040400), CONST64(0x0404000400040400), CONST64(0x0404000000040404), CONST64(0x0404000400040404), + CONST64(0x0404040000040400), CONST64(0x0404040400040400), CONST64(0x0404040000040404), CONST64(0x0404040400040404), + CONST64(0x0000000004000000), CONST64(0x0000000404000000), CONST64(0x0000000004000004), CONST64(0x0000000404000004), + CONST64(0x0000040004000000), CONST64(0x0000040404000000), CONST64(0x0000040004000004), CONST64(0x0000040404000004), + CONST64(0x0000000004000400), CONST64(0x0000000404000400), CONST64(0x0000000004000404), CONST64(0x0000000404000404), + CONST64(0x0000040004000400), CONST64(0x0000040404000400), CONST64(0x0000040004000404), CONST64(0x0000040404000404), + CONST64(0x0004000004000000), CONST64(0x0004000404000000), CONST64(0x0004000004000004), CONST64(0x0004000404000004), + CONST64(0x0004040004000000), CONST64(0x0004040404000000), CONST64(0x0004040004000004), CONST64(0x0004040404000004), + CONST64(0x0004000004000400), CONST64(0x0004000404000400), CONST64(0x0004000004000404), CONST64(0x0004000404000404), + CONST64(0x0004040004000400), CONST64(0x0004040404000400), CONST64(0x0004040004000404), CONST64(0x0004040404000404), + CONST64(0x0000000004040000), CONST64(0x0000000404040000), CONST64(0x0000000004040004), CONST64(0x0000000404040004), + CONST64(0x0000040004040000), CONST64(0x0000040404040000), CONST64(0x0000040004040004), CONST64(0x0000040404040004), + CONST64(0x0000000004040400), CONST64(0x0000000404040400), CONST64(0x0000000004040404), CONST64(0x0000000404040404), + CONST64(0x0000040004040400), CONST64(0x0000040404040400), CONST64(0x0000040004040404), CONST64(0x0000040404040404), + CONST64(0x0004000004040000), CONST64(0x0004000404040000), CONST64(0x0004000004040004), CONST64(0x0004000404040004), + CONST64(0x0004040004040000), CONST64(0x0004040404040000), CONST64(0x0004040004040004), CONST64(0x0004040404040004), + CONST64(0x0004000004040400), CONST64(0x0004000404040400), CONST64(0x0004000004040404), CONST64(0x0004000404040404), + CONST64(0x0004040004040400), CONST64(0x0004040404040400), CONST64(0x0004040004040404), CONST64(0x0004040404040404), + CONST64(0x0400000004000000), CONST64(0x0400000404000000), CONST64(0x0400000004000004), CONST64(0x0400000404000004), + CONST64(0x0400040004000000), CONST64(0x0400040404000000), CONST64(0x0400040004000004), CONST64(0x0400040404000004), + CONST64(0x0400000004000400), CONST64(0x0400000404000400), CONST64(0x0400000004000404), CONST64(0x0400000404000404), + CONST64(0x0400040004000400), CONST64(0x0400040404000400), CONST64(0x0400040004000404), CONST64(0x0400040404000404), + CONST64(0x0404000004000000), CONST64(0x0404000404000000), CONST64(0x0404000004000004), CONST64(0x0404000404000004), + CONST64(0x0404040004000000), CONST64(0x0404040404000000), CONST64(0x0404040004000004), CONST64(0x0404040404000004), + CONST64(0x0404000004000400), CONST64(0x0404000404000400), CONST64(0x0404000004000404), CONST64(0x0404000404000404), + CONST64(0x0404040004000400), CONST64(0x0404040404000400), CONST64(0x0404040004000404), CONST64(0x0404040404000404), + CONST64(0x0400000004040000), CONST64(0x0400000404040000), CONST64(0x0400000004040004), CONST64(0x0400000404040004), + CONST64(0x0400040004040000), CONST64(0x0400040404040000), CONST64(0x0400040004040004), CONST64(0x0400040404040004), + CONST64(0x0400000004040400), CONST64(0x0400000404040400), CONST64(0x0400000004040404), CONST64(0x0400000404040404), + CONST64(0x0400040004040400), CONST64(0x0400040404040400), CONST64(0x0400040004040404), CONST64(0x0400040404040404), + CONST64(0x0404000004040000), CONST64(0x0404000404040000), CONST64(0x0404000004040004), CONST64(0x0404000404040004), + CONST64(0x0404040004040000), CONST64(0x0404040404040000), CONST64(0x0404040004040004), CONST64(0x0404040404040004), + CONST64(0x0404000004040400), CONST64(0x0404000404040400), CONST64(0x0404000004040404), CONST64(0x0404000404040404), CONST64(0x0404040004040400), CONST64(0x0404040404040400), CONST64(0x0404040004040404), CONST64(0x0404040404040404) - }, -{ CONST64(0x0000000000000000), CONST64(0x0000000200000000), CONST64(0x0000000000000002), CONST64(0x0000000200000002), - CONST64(0x0000020000000000), CONST64(0x0000020200000000), CONST64(0x0000020000000002), CONST64(0x0000020200000002), - CONST64(0x0000000000000200), CONST64(0x0000000200000200), CONST64(0x0000000000000202), CONST64(0x0000000200000202), - CONST64(0x0000020000000200), CONST64(0x0000020200000200), CONST64(0x0000020000000202), CONST64(0x0000020200000202), - CONST64(0x0002000000000000), CONST64(0x0002000200000000), CONST64(0x0002000000000002), CONST64(0x0002000200000002), - CONST64(0x0002020000000000), CONST64(0x0002020200000000), CONST64(0x0002020000000002), CONST64(0x0002020200000002), - CONST64(0x0002000000000200), CONST64(0x0002000200000200), CONST64(0x0002000000000202), CONST64(0x0002000200000202), - CONST64(0x0002020000000200), CONST64(0x0002020200000200), CONST64(0x0002020000000202), CONST64(0x0002020200000202), - CONST64(0x0000000000020000), CONST64(0x0000000200020000), CONST64(0x0000000000020002), CONST64(0x0000000200020002), - CONST64(0x0000020000020000), CONST64(0x0000020200020000), CONST64(0x0000020000020002), CONST64(0x0000020200020002), - CONST64(0x0000000000020200), CONST64(0x0000000200020200), CONST64(0x0000000000020202), CONST64(0x0000000200020202), - CONST64(0x0000020000020200), CONST64(0x0000020200020200), CONST64(0x0000020000020202), CONST64(0x0000020200020202), - CONST64(0x0002000000020000), CONST64(0x0002000200020000), CONST64(0x0002000000020002), CONST64(0x0002000200020002), - CONST64(0x0002020000020000), CONST64(0x0002020200020000), CONST64(0x0002020000020002), CONST64(0x0002020200020002), - CONST64(0x0002000000020200), CONST64(0x0002000200020200), CONST64(0x0002000000020202), CONST64(0x0002000200020202), - CONST64(0x0002020000020200), CONST64(0x0002020200020200), CONST64(0x0002020000020202), CONST64(0x0002020200020202), - CONST64(0x0200000000000000), CONST64(0x0200000200000000), CONST64(0x0200000000000002), CONST64(0x0200000200000002), - CONST64(0x0200020000000000), CONST64(0x0200020200000000), CONST64(0x0200020000000002), CONST64(0x0200020200000002), - CONST64(0x0200000000000200), CONST64(0x0200000200000200), CONST64(0x0200000000000202), CONST64(0x0200000200000202), - CONST64(0x0200020000000200), CONST64(0x0200020200000200), CONST64(0x0200020000000202), CONST64(0x0200020200000202), - CONST64(0x0202000000000000), CONST64(0x0202000200000000), CONST64(0x0202000000000002), CONST64(0x0202000200000002), - CONST64(0x0202020000000000), CONST64(0x0202020200000000), CONST64(0x0202020000000002), CONST64(0x0202020200000002), - CONST64(0x0202000000000200), CONST64(0x0202000200000200), CONST64(0x0202000000000202), CONST64(0x0202000200000202), - CONST64(0x0202020000000200), CONST64(0x0202020200000200), CONST64(0x0202020000000202), CONST64(0x0202020200000202), - CONST64(0x0200000000020000), CONST64(0x0200000200020000), CONST64(0x0200000000020002), CONST64(0x0200000200020002), - CONST64(0x0200020000020000), CONST64(0x0200020200020000), CONST64(0x0200020000020002), CONST64(0x0200020200020002), - CONST64(0x0200000000020200), CONST64(0x0200000200020200), CONST64(0x0200000000020202), CONST64(0x0200000200020202), - CONST64(0x0200020000020200), CONST64(0x0200020200020200), CONST64(0x0200020000020202), CONST64(0x0200020200020202), - CONST64(0x0202000000020000), CONST64(0x0202000200020000), CONST64(0x0202000000020002), CONST64(0x0202000200020002), - CONST64(0x0202020000020000), CONST64(0x0202020200020000), CONST64(0x0202020000020002), CONST64(0x0202020200020002), - CONST64(0x0202000000020200), CONST64(0x0202000200020200), CONST64(0x0202000000020202), CONST64(0x0202000200020202), - CONST64(0x0202020000020200), CONST64(0x0202020200020200), CONST64(0x0202020000020202), CONST64(0x0202020200020202), - CONST64(0x0000000002000000), CONST64(0x0000000202000000), CONST64(0x0000000002000002), CONST64(0x0000000202000002), - CONST64(0x0000020002000000), CONST64(0x0000020202000000), CONST64(0x0000020002000002), CONST64(0x0000020202000002), - CONST64(0x0000000002000200), CONST64(0x0000000202000200), CONST64(0x0000000002000202), CONST64(0x0000000202000202), - CONST64(0x0000020002000200), CONST64(0x0000020202000200), CONST64(0x0000020002000202), CONST64(0x0000020202000202), - CONST64(0x0002000002000000), CONST64(0x0002000202000000), CONST64(0x0002000002000002), CONST64(0x0002000202000002), - CONST64(0x0002020002000000), CONST64(0x0002020202000000), CONST64(0x0002020002000002), CONST64(0x0002020202000002), - CONST64(0x0002000002000200), CONST64(0x0002000202000200), CONST64(0x0002000002000202), CONST64(0x0002000202000202), - CONST64(0x0002020002000200), CONST64(0x0002020202000200), CONST64(0x0002020002000202), CONST64(0x0002020202000202), - CONST64(0x0000000002020000), CONST64(0x0000000202020000), CONST64(0x0000000002020002), CONST64(0x0000000202020002), - CONST64(0x0000020002020000), CONST64(0x0000020202020000), CONST64(0x0000020002020002), CONST64(0x0000020202020002), - CONST64(0x0000000002020200), CONST64(0x0000000202020200), CONST64(0x0000000002020202), CONST64(0x0000000202020202), - CONST64(0x0000020002020200), CONST64(0x0000020202020200), CONST64(0x0000020002020202), CONST64(0x0000020202020202), - CONST64(0x0002000002020000), CONST64(0x0002000202020000), CONST64(0x0002000002020002), CONST64(0x0002000202020002), - CONST64(0x0002020002020000), CONST64(0x0002020202020000), CONST64(0x0002020002020002), CONST64(0x0002020202020002), - CONST64(0x0002000002020200), CONST64(0x0002000202020200), CONST64(0x0002000002020202), CONST64(0x0002000202020202), - CONST64(0x0002020002020200), CONST64(0x0002020202020200), CONST64(0x0002020002020202), CONST64(0x0002020202020202), - CONST64(0x0200000002000000), CONST64(0x0200000202000000), CONST64(0x0200000002000002), CONST64(0x0200000202000002), - CONST64(0x0200020002000000), CONST64(0x0200020202000000), CONST64(0x0200020002000002), CONST64(0x0200020202000002), - CONST64(0x0200000002000200), CONST64(0x0200000202000200), CONST64(0x0200000002000202), CONST64(0x0200000202000202), - CONST64(0x0200020002000200), CONST64(0x0200020202000200), CONST64(0x0200020002000202), CONST64(0x0200020202000202), - CONST64(0x0202000002000000), CONST64(0x0202000202000000), CONST64(0x0202000002000002), CONST64(0x0202000202000002), - CONST64(0x0202020002000000), CONST64(0x0202020202000000), CONST64(0x0202020002000002), CONST64(0x0202020202000002), - CONST64(0x0202000002000200), CONST64(0x0202000202000200), CONST64(0x0202000002000202), CONST64(0x0202000202000202), - CONST64(0x0202020002000200), CONST64(0x0202020202000200), CONST64(0x0202020002000202), CONST64(0x0202020202000202), - CONST64(0x0200000002020000), CONST64(0x0200000202020000), CONST64(0x0200000002020002), CONST64(0x0200000202020002), - CONST64(0x0200020002020000), CONST64(0x0200020202020000), CONST64(0x0200020002020002), CONST64(0x0200020202020002), - CONST64(0x0200000002020200), CONST64(0x0200000202020200), CONST64(0x0200000002020202), CONST64(0x0200000202020202), - CONST64(0x0200020002020200), CONST64(0x0200020202020200), CONST64(0x0200020002020202), CONST64(0x0200020202020202), - CONST64(0x0202000002020000), CONST64(0x0202000202020000), CONST64(0x0202000002020002), CONST64(0x0202000202020002), - CONST64(0x0202020002020000), CONST64(0x0202020202020000), CONST64(0x0202020002020002), CONST64(0x0202020202020002), - CONST64(0x0202000002020200), CONST64(0x0202000202020200), CONST64(0x0202000002020202), CONST64(0x0202000202020202), + }, +{ CONST64(0x0000000000000000), CONST64(0x0000000200000000), CONST64(0x0000000000000002), CONST64(0x0000000200000002), + CONST64(0x0000020000000000), CONST64(0x0000020200000000), CONST64(0x0000020000000002), CONST64(0x0000020200000002), + CONST64(0x0000000000000200), CONST64(0x0000000200000200), CONST64(0x0000000000000202), CONST64(0x0000000200000202), + CONST64(0x0000020000000200), CONST64(0x0000020200000200), CONST64(0x0000020000000202), CONST64(0x0000020200000202), + CONST64(0x0002000000000000), CONST64(0x0002000200000000), CONST64(0x0002000000000002), CONST64(0x0002000200000002), + CONST64(0x0002020000000000), CONST64(0x0002020200000000), CONST64(0x0002020000000002), CONST64(0x0002020200000002), + CONST64(0x0002000000000200), CONST64(0x0002000200000200), CONST64(0x0002000000000202), CONST64(0x0002000200000202), + CONST64(0x0002020000000200), CONST64(0x0002020200000200), CONST64(0x0002020000000202), CONST64(0x0002020200000202), + CONST64(0x0000000000020000), CONST64(0x0000000200020000), CONST64(0x0000000000020002), CONST64(0x0000000200020002), + CONST64(0x0000020000020000), CONST64(0x0000020200020000), CONST64(0x0000020000020002), CONST64(0x0000020200020002), + CONST64(0x0000000000020200), CONST64(0x0000000200020200), CONST64(0x0000000000020202), CONST64(0x0000000200020202), + CONST64(0x0000020000020200), CONST64(0x0000020200020200), CONST64(0x0000020000020202), CONST64(0x0000020200020202), + CONST64(0x0002000000020000), CONST64(0x0002000200020000), CONST64(0x0002000000020002), CONST64(0x0002000200020002), + CONST64(0x0002020000020000), CONST64(0x0002020200020000), CONST64(0x0002020000020002), CONST64(0x0002020200020002), + CONST64(0x0002000000020200), CONST64(0x0002000200020200), CONST64(0x0002000000020202), CONST64(0x0002000200020202), + CONST64(0x0002020000020200), CONST64(0x0002020200020200), CONST64(0x0002020000020202), CONST64(0x0002020200020202), + CONST64(0x0200000000000000), CONST64(0x0200000200000000), CONST64(0x0200000000000002), CONST64(0x0200000200000002), + CONST64(0x0200020000000000), CONST64(0x0200020200000000), CONST64(0x0200020000000002), CONST64(0x0200020200000002), + CONST64(0x0200000000000200), CONST64(0x0200000200000200), CONST64(0x0200000000000202), CONST64(0x0200000200000202), + CONST64(0x0200020000000200), CONST64(0x0200020200000200), CONST64(0x0200020000000202), CONST64(0x0200020200000202), + CONST64(0x0202000000000000), CONST64(0x0202000200000000), CONST64(0x0202000000000002), CONST64(0x0202000200000002), + CONST64(0x0202020000000000), CONST64(0x0202020200000000), CONST64(0x0202020000000002), CONST64(0x0202020200000002), + CONST64(0x0202000000000200), CONST64(0x0202000200000200), CONST64(0x0202000000000202), CONST64(0x0202000200000202), + CONST64(0x0202020000000200), CONST64(0x0202020200000200), CONST64(0x0202020000000202), CONST64(0x0202020200000202), + CONST64(0x0200000000020000), CONST64(0x0200000200020000), CONST64(0x0200000000020002), CONST64(0x0200000200020002), + CONST64(0x0200020000020000), CONST64(0x0200020200020000), CONST64(0x0200020000020002), CONST64(0x0200020200020002), + CONST64(0x0200000000020200), CONST64(0x0200000200020200), CONST64(0x0200000000020202), CONST64(0x0200000200020202), + CONST64(0x0200020000020200), CONST64(0x0200020200020200), CONST64(0x0200020000020202), CONST64(0x0200020200020202), + CONST64(0x0202000000020000), CONST64(0x0202000200020000), CONST64(0x0202000000020002), CONST64(0x0202000200020002), + CONST64(0x0202020000020000), CONST64(0x0202020200020000), CONST64(0x0202020000020002), CONST64(0x0202020200020002), + CONST64(0x0202000000020200), CONST64(0x0202000200020200), CONST64(0x0202000000020202), CONST64(0x0202000200020202), + CONST64(0x0202020000020200), CONST64(0x0202020200020200), CONST64(0x0202020000020202), CONST64(0x0202020200020202), + CONST64(0x0000000002000000), CONST64(0x0000000202000000), CONST64(0x0000000002000002), CONST64(0x0000000202000002), + CONST64(0x0000020002000000), CONST64(0x0000020202000000), CONST64(0x0000020002000002), CONST64(0x0000020202000002), + CONST64(0x0000000002000200), CONST64(0x0000000202000200), CONST64(0x0000000002000202), CONST64(0x0000000202000202), + CONST64(0x0000020002000200), CONST64(0x0000020202000200), CONST64(0x0000020002000202), CONST64(0x0000020202000202), + CONST64(0x0002000002000000), CONST64(0x0002000202000000), CONST64(0x0002000002000002), CONST64(0x0002000202000002), + CONST64(0x0002020002000000), CONST64(0x0002020202000000), CONST64(0x0002020002000002), CONST64(0x0002020202000002), + CONST64(0x0002000002000200), CONST64(0x0002000202000200), CONST64(0x0002000002000202), CONST64(0x0002000202000202), + CONST64(0x0002020002000200), CONST64(0x0002020202000200), CONST64(0x0002020002000202), CONST64(0x0002020202000202), + CONST64(0x0000000002020000), CONST64(0x0000000202020000), CONST64(0x0000000002020002), CONST64(0x0000000202020002), + CONST64(0x0000020002020000), CONST64(0x0000020202020000), CONST64(0x0000020002020002), CONST64(0x0000020202020002), + CONST64(0x0000000002020200), CONST64(0x0000000202020200), CONST64(0x0000000002020202), CONST64(0x0000000202020202), + CONST64(0x0000020002020200), CONST64(0x0000020202020200), CONST64(0x0000020002020202), CONST64(0x0000020202020202), + CONST64(0x0002000002020000), CONST64(0x0002000202020000), CONST64(0x0002000002020002), CONST64(0x0002000202020002), + CONST64(0x0002020002020000), CONST64(0x0002020202020000), CONST64(0x0002020002020002), CONST64(0x0002020202020002), + CONST64(0x0002000002020200), CONST64(0x0002000202020200), CONST64(0x0002000002020202), CONST64(0x0002000202020202), + CONST64(0x0002020002020200), CONST64(0x0002020202020200), CONST64(0x0002020002020202), CONST64(0x0002020202020202), + CONST64(0x0200000002000000), CONST64(0x0200000202000000), CONST64(0x0200000002000002), CONST64(0x0200000202000002), + CONST64(0x0200020002000000), CONST64(0x0200020202000000), CONST64(0x0200020002000002), CONST64(0x0200020202000002), + CONST64(0x0200000002000200), CONST64(0x0200000202000200), CONST64(0x0200000002000202), CONST64(0x0200000202000202), + CONST64(0x0200020002000200), CONST64(0x0200020202000200), CONST64(0x0200020002000202), CONST64(0x0200020202000202), + CONST64(0x0202000002000000), CONST64(0x0202000202000000), CONST64(0x0202000002000002), CONST64(0x0202000202000002), + CONST64(0x0202020002000000), CONST64(0x0202020202000000), CONST64(0x0202020002000002), CONST64(0x0202020202000002), + CONST64(0x0202000002000200), CONST64(0x0202000202000200), CONST64(0x0202000002000202), CONST64(0x0202000202000202), + CONST64(0x0202020002000200), CONST64(0x0202020202000200), CONST64(0x0202020002000202), CONST64(0x0202020202000202), + CONST64(0x0200000002020000), CONST64(0x0200000202020000), CONST64(0x0200000002020002), CONST64(0x0200000202020002), + CONST64(0x0200020002020000), CONST64(0x0200020202020000), CONST64(0x0200020002020002), CONST64(0x0200020202020002), + CONST64(0x0200000002020200), CONST64(0x0200000202020200), CONST64(0x0200000002020202), CONST64(0x0200000202020202), + CONST64(0x0200020002020200), CONST64(0x0200020202020200), CONST64(0x0200020002020202), CONST64(0x0200020202020202), + CONST64(0x0202000002020000), CONST64(0x0202000202020000), CONST64(0x0202000002020002), CONST64(0x0202000202020002), + CONST64(0x0202020002020000), CONST64(0x0202020202020000), CONST64(0x0202020002020002), CONST64(0x0202020202020002), + CONST64(0x0202000002020200), CONST64(0x0202000202020200), CONST64(0x0202000002020202), CONST64(0x0202000202020202), CONST64(0x0202020002020200), CONST64(0x0202020202020200), CONST64(0x0202020002020202), CONST64(0x0202020202020202) - }, -{ CONST64(0x0000000000000000), CONST64(0x0000010000000000), CONST64(0x0000000000000100), CONST64(0x0000010000000100), - CONST64(0x0001000000000000), CONST64(0x0001010000000000), CONST64(0x0001000000000100), CONST64(0x0001010000000100), - CONST64(0x0000000000010000), CONST64(0x0000010000010000), CONST64(0x0000000000010100), CONST64(0x0000010000010100), - CONST64(0x0001000000010000), CONST64(0x0001010000010000), CONST64(0x0001000000010100), CONST64(0x0001010000010100), - CONST64(0x0100000000000000), CONST64(0x0100010000000000), CONST64(0x0100000000000100), CONST64(0x0100010000000100), - CONST64(0x0101000000000000), CONST64(0x0101010000000000), CONST64(0x0101000000000100), CONST64(0x0101010000000100), - CONST64(0x0100000000010000), CONST64(0x0100010000010000), CONST64(0x0100000000010100), CONST64(0x0100010000010100), - CONST64(0x0101000000010000), CONST64(0x0101010000010000), CONST64(0x0101000000010100), CONST64(0x0101010000010100), - CONST64(0x0000000001000000), CONST64(0x0000010001000000), CONST64(0x0000000001000100), CONST64(0x0000010001000100), - CONST64(0x0001000001000000), CONST64(0x0001010001000000), CONST64(0x0001000001000100), CONST64(0x0001010001000100), - CONST64(0x0000000001010000), CONST64(0x0000010001010000), CONST64(0x0000000001010100), CONST64(0x0000010001010100), - CONST64(0x0001000001010000), CONST64(0x0001010001010000), CONST64(0x0001000001010100), CONST64(0x0001010001010100), - CONST64(0x0100000001000000), CONST64(0x0100010001000000), CONST64(0x0100000001000100), CONST64(0x0100010001000100), - CONST64(0x0101000001000000), CONST64(0x0101010001000000), CONST64(0x0101000001000100), CONST64(0x0101010001000100), - CONST64(0x0100000001010000), CONST64(0x0100010001010000), CONST64(0x0100000001010100), CONST64(0x0100010001010100), - CONST64(0x0101000001010000), CONST64(0x0101010001010000), CONST64(0x0101000001010100), CONST64(0x0101010001010100), - CONST64(0x0000000100000000), CONST64(0x0000010100000000), CONST64(0x0000000100000100), CONST64(0x0000010100000100), - CONST64(0x0001000100000000), CONST64(0x0001010100000000), CONST64(0x0001000100000100), CONST64(0x0001010100000100), - CONST64(0x0000000100010000), CONST64(0x0000010100010000), CONST64(0x0000000100010100), CONST64(0x0000010100010100), - CONST64(0x0001000100010000), CONST64(0x0001010100010000), CONST64(0x0001000100010100), CONST64(0x0001010100010100), - CONST64(0x0100000100000000), CONST64(0x0100010100000000), CONST64(0x0100000100000100), CONST64(0x0100010100000100), - CONST64(0x0101000100000000), CONST64(0x0101010100000000), CONST64(0x0101000100000100), CONST64(0x0101010100000100), - CONST64(0x0100000100010000), CONST64(0x0100010100010000), CONST64(0x0100000100010100), CONST64(0x0100010100010100), - CONST64(0x0101000100010000), CONST64(0x0101010100010000), CONST64(0x0101000100010100), CONST64(0x0101010100010100), - CONST64(0x0000000101000000), CONST64(0x0000010101000000), CONST64(0x0000000101000100), CONST64(0x0000010101000100), - CONST64(0x0001000101000000), CONST64(0x0001010101000000), CONST64(0x0001000101000100), CONST64(0x0001010101000100), - CONST64(0x0000000101010000), CONST64(0x0000010101010000), CONST64(0x0000000101010100), CONST64(0x0000010101010100), - CONST64(0x0001000101010000), CONST64(0x0001010101010000), CONST64(0x0001000101010100), CONST64(0x0001010101010100), - CONST64(0x0100000101000000), CONST64(0x0100010101000000), CONST64(0x0100000101000100), CONST64(0x0100010101000100), - CONST64(0x0101000101000000), CONST64(0x0101010101000000), CONST64(0x0101000101000100), CONST64(0x0101010101000100), - CONST64(0x0100000101010000), CONST64(0x0100010101010000), CONST64(0x0100000101010100), CONST64(0x0100010101010100), - CONST64(0x0101000101010000), CONST64(0x0101010101010000), CONST64(0x0101000101010100), CONST64(0x0101010101010100), - CONST64(0x0000000000000001), CONST64(0x0000010000000001), CONST64(0x0000000000000101), CONST64(0x0000010000000101), - CONST64(0x0001000000000001), CONST64(0x0001010000000001), CONST64(0x0001000000000101), CONST64(0x0001010000000101), - CONST64(0x0000000000010001), CONST64(0x0000010000010001), CONST64(0x0000000000010101), CONST64(0x0000010000010101), - CONST64(0x0001000000010001), CONST64(0x0001010000010001), CONST64(0x0001000000010101), CONST64(0x0001010000010101), - CONST64(0x0100000000000001), CONST64(0x0100010000000001), CONST64(0x0100000000000101), CONST64(0x0100010000000101), - CONST64(0x0101000000000001), CONST64(0x0101010000000001), CONST64(0x0101000000000101), CONST64(0x0101010000000101), - CONST64(0x0100000000010001), CONST64(0x0100010000010001), CONST64(0x0100000000010101), CONST64(0x0100010000010101), - CONST64(0x0101000000010001), CONST64(0x0101010000010001), CONST64(0x0101000000010101), CONST64(0x0101010000010101), - CONST64(0x0000000001000001), CONST64(0x0000010001000001), CONST64(0x0000000001000101), CONST64(0x0000010001000101), - CONST64(0x0001000001000001), CONST64(0x0001010001000001), CONST64(0x0001000001000101), CONST64(0x0001010001000101), - CONST64(0x0000000001010001), CONST64(0x0000010001010001), CONST64(0x0000000001010101), CONST64(0x0000010001010101), - CONST64(0x0001000001010001), CONST64(0x0001010001010001), CONST64(0x0001000001010101), CONST64(0x0001010001010101), - CONST64(0x0100000001000001), CONST64(0x0100010001000001), CONST64(0x0100000001000101), CONST64(0x0100010001000101), - CONST64(0x0101000001000001), CONST64(0x0101010001000001), CONST64(0x0101000001000101), CONST64(0x0101010001000101), - CONST64(0x0100000001010001), CONST64(0x0100010001010001), CONST64(0x0100000001010101), CONST64(0x0100010001010101), - CONST64(0x0101000001010001), CONST64(0x0101010001010001), CONST64(0x0101000001010101), CONST64(0x0101010001010101), - CONST64(0x0000000100000001), CONST64(0x0000010100000001), CONST64(0x0000000100000101), CONST64(0x0000010100000101), - CONST64(0x0001000100000001), CONST64(0x0001010100000001), CONST64(0x0001000100000101), CONST64(0x0001010100000101), - CONST64(0x0000000100010001), CONST64(0x0000010100010001), CONST64(0x0000000100010101), CONST64(0x0000010100010101), - CONST64(0x0001000100010001), CONST64(0x0001010100010001), CONST64(0x0001000100010101), CONST64(0x0001010100010101), - CONST64(0x0100000100000001), CONST64(0x0100010100000001), CONST64(0x0100000100000101), CONST64(0x0100010100000101), - CONST64(0x0101000100000001), CONST64(0x0101010100000001), CONST64(0x0101000100000101), CONST64(0x0101010100000101), - CONST64(0x0100000100010001), CONST64(0x0100010100010001), CONST64(0x0100000100010101), CONST64(0x0100010100010101), - CONST64(0x0101000100010001), CONST64(0x0101010100010001), CONST64(0x0101000100010101), CONST64(0x0101010100010101), - CONST64(0x0000000101000001), CONST64(0x0000010101000001), CONST64(0x0000000101000101), CONST64(0x0000010101000101), - CONST64(0x0001000101000001), CONST64(0x0001010101000001), CONST64(0x0001000101000101), CONST64(0x0001010101000101), - CONST64(0x0000000101010001), CONST64(0x0000010101010001), CONST64(0x0000000101010101), CONST64(0x0000010101010101), - CONST64(0x0001000101010001), CONST64(0x0001010101010001), CONST64(0x0001000101010101), CONST64(0x0001010101010101), - CONST64(0x0100000101000001), CONST64(0x0100010101000001), CONST64(0x0100000101000101), CONST64(0x0100010101000101), - CONST64(0x0101000101000001), CONST64(0x0101010101000001), CONST64(0x0101000101000101), CONST64(0x0101010101000101), - CONST64(0x0100000101010001), CONST64(0x0100010101010001), CONST64(0x0100000101010101), CONST64(0x0100010101010101), + }, +{ CONST64(0x0000000000000000), CONST64(0x0000010000000000), CONST64(0x0000000000000100), CONST64(0x0000010000000100), + CONST64(0x0001000000000000), CONST64(0x0001010000000000), CONST64(0x0001000000000100), CONST64(0x0001010000000100), + CONST64(0x0000000000010000), CONST64(0x0000010000010000), CONST64(0x0000000000010100), CONST64(0x0000010000010100), + CONST64(0x0001000000010000), CONST64(0x0001010000010000), CONST64(0x0001000000010100), CONST64(0x0001010000010100), + CONST64(0x0100000000000000), CONST64(0x0100010000000000), CONST64(0x0100000000000100), CONST64(0x0100010000000100), + CONST64(0x0101000000000000), CONST64(0x0101010000000000), CONST64(0x0101000000000100), CONST64(0x0101010000000100), + CONST64(0x0100000000010000), CONST64(0x0100010000010000), CONST64(0x0100000000010100), CONST64(0x0100010000010100), + CONST64(0x0101000000010000), CONST64(0x0101010000010000), CONST64(0x0101000000010100), CONST64(0x0101010000010100), + CONST64(0x0000000001000000), CONST64(0x0000010001000000), CONST64(0x0000000001000100), CONST64(0x0000010001000100), + CONST64(0x0001000001000000), CONST64(0x0001010001000000), CONST64(0x0001000001000100), CONST64(0x0001010001000100), + CONST64(0x0000000001010000), CONST64(0x0000010001010000), CONST64(0x0000000001010100), CONST64(0x0000010001010100), + CONST64(0x0001000001010000), CONST64(0x0001010001010000), CONST64(0x0001000001010100), CONST64(0x0001010001010100), + CONST64(0x0100000001000000), CONST64(0x0100010001000000), CONST64(0x0100000001000100), CONST64(0x0100010001000100), + CONST64(0x0101000001000000), CONST64(0x0101010001000000), CONST64(0x0101000001000100), CONST64(0x0101010001000100), + CONST64(0x0100000001010000), CONST64(0x0100010001010000), CONST64(0x0100000001010100), CONST64(0x0100010001010100), + CONST64(0x0101000001010000), CONST64(0x0101010001010000), CONST64(0x0101000001010100), CONST64(0x0101010001010100), + CONST64(0x0000000100000000), CONST64(0x0000010100000000), CONST64(0x0000000100000100), CONST64(0x0000010100000100), + CONST64(0x0001000100000000), CONST64(0x0001010100000000), CONST64(0x0001000100000100), CONST64(0x0001010100000100), + CONST64(0x0000000100010000), CONST64(0x0000010100010000), CONST64(0x0000000100010100), CONST64(0x0000010100010100), + CONST64(0x0001000100010000), CONST64(0x0001010100010000), CONST64(0x0001000100010100), CONST64(0x0001010100010100), + CONST64(0x0100000100000000), CONST64(0x0100010100000000), CONST64(0x0100000100000100), CONST64(0x0100010100000100), + CONST64(0x0101000100000000), CONST64(0x0101010100000000), CONST64(0x0101000100000100), CONST64(0x0101010100000100), + CONST64(0x0100000100010000), CONST64(0x0100010100010000), CONST64(0x0100000100010100), CONST64(0x0100010100010100), + CONST64(0x0101000100010000), CONST64(0x0101010100010000), CONST64(0x0101000100010100), CONST64(0x0101010100010100), + CONST64(0x0000000101000000), CONST64(0x0000010101000000), CONST64(0x0000000101000100), CONST64(0x0000010101000100), + CONST64(0x0001000101000000), CONST64(0x0001010101000000), CONST64(0x0001000101000100), CONST64(0x0001010101000100), + CONST64(0x0000000101010000), CONST64(0x0000010101010000), CONST64(0x0000000101010100), CONST64(0x0000010101010100), + CONST64(0x0001000101010000), CONST64(0x0001010101010000), CONST64(0x0001000101010100), CONST64(0x0001010101010100), + CONST64(0x0100000101000000), CONST64(0x0100010101000000), CONST64(0x0100000101000100), CONST64(0x0100010101000100), + CONST64(0x0101000101000000), CONST64(0x0101010101000000), CONST64(0x0101000101000100), CONST64(0x0101010101000100), + CONST64(0x0100000101010000), CONST64(0x0100010101010000), CONST64(0x0100000101010100), CONST64(0x0100010101010100), + CONST64(0x0101000101010000), CONST64(0x0101010101010000), CONST64(0x0101000101010100), CONST64(0x0101010101010100), + CONST64(0x0000000000000001), CONST64(0x0000010000000001), CONST64(0x0000000000000101), CONST64(0x0000010000000101), + CONST64(0x0001000000000001), CONST64(0x0001010000000001), CONST64(0x0001000000000101), CONST64(0x0001010000000101), + CONST64(0x0000000000010001), CONST64(0x0000010000010001), CONST64(0x0000000000010101), CONST64(0x0000010000010101), + CONST64(0x0001000000010001), CONST64(0x0001010000010001), CONST64(0x0001000000010101), CONST64(0x0001010000010101), + CONST64(0x0100000000000001), CONST64(0x0100010000000001), CONST64(0x0100000000000101), CONST64(0x0100010000000101), + CONST64(0x0101000000000001), CONST64(0x0101010000000001), CONST64(0x0101000000000101), CONST64(0x0101010000000101), + CONST64(0x0100000000010001), CONST64(0x0100010000010001), CONST64(0x0100000000010101), CONST64(0x0100010000010101), + CONST64(0x0101000000010001), CONST64(0x0101010000010001), CONST64(0x0101000000010101), CONST64(0x0101010000010101), + CONST64(0x0000000001000001), CONST64(0x0000010001000001), CONST64(0x0000000001000101), CONST64(0x0000010001000101), + CONST64(0x0001000001000001), CONST64(0x0001010001000001), CONST64(0x0001000001000101), CONST64(0x0001010001000101), + CONST64(0x0000000001010001), CONST64(0x0000010001010001), CONST64(0x0000000001010101), CONST64(0x0000010001010101), + CONST64(0x0001000001010001), CONST64(0x0001010001010001), CONST64(0x0001000001010101), CONST64(0x0001010001010101), + CONST64(0x0100000001000001), CONST64(0x0100010001000001), CONST64(0x0100000001000101), CONST64(0x0100010001000101), + CONST64(0x0101000001000001), CONST64(0x0101010001000001), CONST64(0x0101000001000101), CONST64(0x0101010001000101), + CONST64(0x0100000001010001), CONST64(0x0100010001010001), CONST64(0x0100000001010101), CONST64(0x0100010001010101), + CONST64(0x0101000001010001), CONST64(0x0101010001010001), CONST64(0x0101000001010101), CONST64(0x0101010001010101), + CONST64(0x0000000100000001), CONST64(0x0000010100000001), CONST64(0x0000000100000101), CONST64(0x0000010100000101), + CONST64(0x0001000100000001), CONST64(0x0001010100000001), CONST64(0x0001000100000101), CONST64(0x0001010100000101), + CONST64(0x0000000100010001), CONST64(0x0000010100010001), CONST64(0x0000000100010101), CONST64(0x0000010100010101), + CONST64(0x0001000100010001), CONST64(0x0001010100010001), CONST64(0x0001000100010101), CONST64(0x0001010100010101), + CONST64(0x0100000100000001), CONST64(0x0100010100000001), CONST64(0x0100000100000101), CONST64(0x0100010100000101), + CONST64(0x0101000100000001), CONST64(0x0101010100000001), CONST64(0x0101000100000101), CONST64(0x0101010100000101), + CONST64(0x0100000100010001), CONST64(0x0100010100010001), CONST64(0x0100000100010101), CONST64(0x0100010100010101), + CONST64(0x0101000100010001), CONST64(0x0101010100010001), CONST64(0x0101000100010101), CONST64(0x0101010100010101), + CONST64(0x0000000101000001), CONST64(0x0000010101000001), CONST64(0x0000000101000101), CONST64(0x0000010101000101), + CONST64(0x0001000101000001), CONST64(0x0001010101000001), CONST64(0x0001000101000101), CONST64(0x0001010101000101), + CONST64(0x0000000101010001), CONST64(0x0000010101010001), CONST64(0x0000000101010101), CONST64(0x0000010101010101), + CONST64(0x0001000101010001), CONST64(0x0001010101010001), CONST64(0x0001000101010101), CONST64(0x0001010101010101), + CONST64(0x0100000101000001), CONST64(0x0100010101000001), CONST64(0x0100000101000101), CONST64(0x0100010101000101), + CONST64(0x0101000101000001), CONST64(0x0101010101000001), CONST64(0x0101000101000101), CONST64(0x0101010101000101), + CONST64(0x0100000101010001), CONST64(0x0100010101010001), CONST64(0x0100000101010101), CONST64(0x0100010101010101), CONST64(0x0101000101010001), CONST64(0x0101010101010001), CONST64(0x0101000101010101), CONST64(0x0101010101010101) - }, -{ CONST64(0x0000000000000000), CONST64(0x0000008000000000), CONST64(0x0000000000000080), CONST64(0x0000008000000080), - CONST64(0x0000800000000000), CONST64(0x0000808000000000), CONST64(0x0000800000000080), CONST64(0x0000808000000080), - CONST64(0x0000000000008000), CONST64(0x0000008000008000), CONST64(0x0000000000008080), CONST64(0x0000008000008080), - CONST64(0x0000800000008000), CONST64(0x0000808000008000), CONST64(0x0000800000008080), CONST64(0x0000808000008080), - CONST64(0x0080000000000000), CONST64(0x0080008000000000), CONST64(0x0080000000000080), CONST64(0x0080008000000080), - CONST64(0x0080800000000000), CONST64(0x0080808000000000), CONST64(0x0080800000000080), CONST64(0x0080808000000080), - CONST64(0x0080000000008000), CONST64(0x0080008000008000), CONST64(0x0080000000008080), CONST64(0x0080008000008080), - CONST64(0x0080800000008000), CONST64(0x0080808000008000), CONST64(0x0080800000008080), CONST64(0x0080808000008080), - CONST64(0x0000000000800000), CONST64(0x0000008000800000), CONST64(0x0000000000800080), CONST64(0x0000008000800080), - CONST64(0x0000800000800000), CONST64(0x0000808000800000), CONST64(0x0000800000800080), CONST64(0x0000808000800080), - CONST64(0x0000000000808000), CONST64(0x0000008000808000), CONST64(0x0000000000808080), CONST64(0x0000008000808080), - CONST64(0x0000800000808000), CONST64(0x0000808000808000), CONST64(0x0000800000808080), CONST64(0x0000808000808080), - CONST64(0x0080000000800000), CONST64(0x0080008000800000), CONST64(0x0080000000800080), CONST64(0x0080008000800080), - CONST64(0x0080800000800000), CONST64(0x0080808000800000), CONST64(0x0080800000800080), CONST64(0x0080808000800080), - CONST64(0x0080000000808000), CONST64(0x0080008000808000), CONST64(0x0080000000808080), CONST64(0x0080008000808080), - CONST64(0x0080800000808000), CONST64(0x0080808000808000), CONST64(0x0080800000808080), CONST64(0x0080808000808080), - CONST64(0x8000000000000000), CONST64(0x8000008000000000), CONST64(0x8000000000000080), CONST64(0x8000008000000080), - CONST64(0x8000800000000000), CONST64(0x8000808000000000), CONST64(0x8000800000000080), CONST64(0x8000808000000080), - CONST64(0x8000000000008000), CONST64(0x8000008000008000), CONST64(0x8000000000008080), CONST64(0x8000008000008080), - CONST64(0x8000800000008000), CONST64(0x8000808000008000), CONST64(0x8000800000008080), CONST64(0x8000808000008080), - CONST64(0x8080000000000000), CONST64(0x8080008000000000), CONST64(0x8080000000000080), CONST64(0x8080008000000080), - CONST64(0x8080800000000000), CONST64(0x8080808000000000), CONST64(0x8080800000000080), CONST64(0x8080808000000080), - CONST64(0x8080000000008000), CONST64(0x8080008000008000), CONST64(0x8080000000008080), CONST64(0x8080008000008080), - CONST64(0x8080800000008000), CONST64(0x8080808000008000), CONST64(0x8080800000008080), CONST64(0x8080808000008080), - CONST64(0x8000000000800000), CONST64(0x8000008000800000), CONST64(0x8000000000800080), CONST64(0x8000008000800080), - CONST64(0x8000800000800000), CONST64(0x8000808000800000), CONST64(0x8000800000800080), CONST64(0x8000808000800080), - CONST64(0x8000000000808000), CONST64(0x8000008000808000), CONST64(0x8000000000808080), CONST64(0x8000008000808080), - CONST64(0x8000800000808000), CONST64(0x8000808000808000), CONST64(0x8000800000808080), CONST64(0x8000808000808080), - CONST64(0x8080000000800000), CONST64(0x8080008000800000), CONST64(0x8080000000800080), CONST64(0x8080008000800080), - CONST64(0x8080800000800000), CONST64(0x8080808000800000), CONST64(0x8080800000800080), CONST64(0x8080808000800080), - CONST64(0x8080000000808000), CONST64(0x8080008000808000), CONST64(0x8080000000808080), CONST64(0x8080008000808080), - CONST64(0x8080800000808000), CONST64(0x8080808000808000), CONST64(0x8080800000808080), CONST64(0x8080808000808080), - CONST64(0x0000000080000000), CONST64(0x0000008080000000), CONST64(0x0000000080000080), CONST64(0x0000008080000080), - CONST64(0x0000800080000000), CONST64(0x0000808080000000), CONST64(0x0000800080000080), CONST64(0x0000808080000080), - CONST64(0x0000000080008000), CONST64(0x0000008080008000), CONST64(0x0000000080008080), CONST64(0x0000008080008080), - CONST64(0x0000800080008000), CONST64(0x0000808080008000), CONST64(0x0000800080008080), CONST64(0x0000808080008080), - CONST64(0x0080000080000000), CONST64(0x0080008080000000), CONST64(0x0080000080000080), CONST64(0x0080008080000080), - CONST64(0x0080800080000000), CONST64(0x0080808080000000), CONST64(0x0080800080000080), CONST64(0x0080808080000080), - CONST64(0x0080000080008000), CONST64(0x0080008080008000), CONST64(0x0080000080008080), CONST64(0x0080008080008080), - CONST64(0x0080800080008000), CONST64(0x0080808080008000), CONST64(0x0080800080008080), CONST64(0x0080808080008080), - CONST64(0x0000000080800000), CONST64(0x0000008080800000), CONST64(0x0000000080800080), CONST64(0x0000008080800080), - CONST64(0x0000800080800000), CONST64(0x0000808080800000), CONST64(0x0000800080800080), CONST64(0x0000808080800080), - CONST64(0x0000000080808000), CONST64(0x0000008080808000), CONST64(0x0000000080808080), CONST64(0x0000008080808080), - CONST64(0x0000800080808000), CONST64(0x0000808080808000), CONST64(0x0000800080808080), CONST64(0x0000808080808080), - CONST64(0x0080000080800000), CONST64(0x0080008080800000), CONST64(0x0080000080800080), CONST64(0x0080008080800080), - CONST64(0x0080800080800000), CONST64(0x0080808080800000), CONST64(0x0080800080800080), CONST64(0x0080808080800080), - CONST64(0x0080000080808000), CONST64(0x0080008080808000), CONST64(0x0080000080808080), CONST64(0x0080008080808080), - CONST64(0x0080800080808000), CONST64(0x0080808080808000), CONST64(0x0080800080808080), CONST64(0x0080808080808080), - CONST64(0x8000000080000000), CONST64(0x8000008080000000), CONST64(0x8000000080000080), CONST64(0x8000008080000080), - CONST64(0x8000800080000000), CONST64(0x8000808080000000), CONST64(0x8000800080000080), CONST64(0x8000808080000080), - CONST64(0x8000000080008000), CONST64(0x8000008080008000), CONST64(0x8000000080008080), CONST64(0x8000008080008080), - CONST64(0x8000800080008000), CONST64(0x8000808080008000), CONST64(0x8000800080008080), CONST64(0x8000808080008080), - CONST64(0x8080000080000000), CONST64(0x8080008080000000), CONST64(0x8080000080000080), CONST64(0x8080008080000080), - CONST64(0x8080800080000000), CONST64(0x8080808080000000), CONST64(0x8080800080000080), CONST64(0x8080808080000080), - CONST64(0x8080000080008000), CONST64(0x8080008080008000), CONST64(0x8080000080008080), CONST64(0x8080008080008080), - CONST64(0x8080800080008000), CONST64(0x8080808080008000), CONST64(0x8080800080008080), CONST64(0x8080808080008080), - CONST64(0x8000000080800000), CONST64(0x8000008080800000), CONST64(0x8000000080800080), CONST64(0x8000008080800080), - CONST64(0x8000800080800000), CONST64(0x8000808080800000), CONST64(0x8000800080800080), CONST64(0x8000808080800080), - CONST64(0x8000000080808000), CONST64(0x8000008080808000), CONST64(0x8000000080808080), CONST64(0x8000008080808080), - CONST64(0x8000800080808000), CONST64(0x8000808080808000), CONST64(0x8000800080808080), CONST64(0x8000808080808080), - CONST64(0x8080000080800000), CONST64(0x8080008080800000), CONST64(0x8080000080800080), CONST64(0x8080008080800080), - CONST64(0x8080800080800000), CONST64(0x8080808080800000), CONST64(0x8080800080800080), CONST64(0x8080808080800080), - CONST64(0x8080000080808000), CONST64(0x8080008080808000), CONST64(0x8080000080808080), CONST64(0x8080008080808080), + }, +{ CONST64(0x0000000000000000), CONST64(0x0000008000000000), CONST64(0x0000000000000080), CONST64(0x0000008000000080), + CONST64(0x0000800000000000), CONST64(0x0000808000000000), CONST64(0x0000800000000080), CONST64(0x0000808000000080), + CONST64(0x0000000000008000), CONST64(0x0000008000008000), CONST64(0x0000000000008080), CONST64(0x0000008000008080), + CONST64(0x0000800000008000), CONST64(0x0000808000008000), CONST64(0x0000800000008080), CONST64(0x0000808000008080), + CONST64(0x0080000000000000), CONST64(0x0080008000000000), CONST64(0x0080000000000080), CONST64(0x0080008000000080), + CONST64(0x0080800000000000), CONST64(0x0080808000000000), CONST64(0x0080800000000080), CONST64(0x0080808000000080), + CONST64(0x0080000000008000), CONST64(0x0080008000008000), CONST64(0x0080000000008080), CONST64(0x0080008000008080), + CONST64(0x0080800000008000), CONST64(0x0080808000008000), CONST64(0x0080800000008080), CONST64(0x0080808000008080), + CONST64(0x0000000000800000), CONST64(0x0000008000800000), CONST64(0x0000000000800080), CONST64(0x0000008000800080), + CONST64(0x0000800000800000), CONST64(0x0000808000800000), CONST64(0x0000800000800080), CONST64(0x0000808000800080), + CONST64(0x0000000000808000), CONST64(0x0000008000808000), CONST64(0x0000000000808080), CONST64(0x0000008000808080), + CONST64(0x0000800000808000), CONST64(0x0000808000808000), CONST64(0x0000800000808080), CONST64(0x0000808000808080), + CONST64(0x0080000000800000), CONST64(0x0080008000800000), CONST64(0x0080000000800080), CONST64(0x0080008000800080), + CONST64(0x0080800000800000), CONST64(0x0080808000800000), CONST64(0x0080800000800080), CONST64(0x0080808000800080), + CONST64(0x0080000000808000), CONST64(0x0080008000808000), CONST64(0x0080000000808080), CONST64(0x0080008000808080), + CONST64(0x0080800000808000), CONST64(0x0080808000808000), CONST64(0x0080800000808080), CONST64(0x0080808000808080), + CONST64(0x8000000000000000), CONST64(0x8000008000000000), CONST64(0x8000000000000080), CONST64(0x8000008000000080), + CONST64(0x8000800000000000), CONST64(0x8000808000000000), CONST64(0x8000800000000080), CONST64(0x8000808000000080), + CONST64(0x8000000000008000), CONST64(0x8000008000008000), CONST64(0x8000000000008080), CONST64(0x8000008000008080), + CONST64(0x8000800000008000), CONST64(0x8000808000008000), CONST64(0x8000800000008080), CONST64(0x8000808000008080), + CONST64(0x8080000000000000), CONST64(0x8080008000000000), CONST64(0x8080000000000080), CONST64(0x8080008000000080), + CONST64(0x8080800000000000), CONST64(0x8080808000000000), CONST64(0x8080800000000080), CONST64(0x8080808000000080), + CONST64(0x8080000000008000), CONST64(0x8080008000008000), CONST64(0x8080000000008080), CONST64(0x8080008000008080), + CONST64(0x8080800000008000), CONST64(0x8080808000008000), CONST64(0x8080800000008080), CONST64(0x8080808000008080), + CONST64(0x8000000000800000), CONST64(0x8000008000800000), CONST64(0x8000000000800080), CONST64(0x8000008000800080), + CONST64(0x8000800000800000), CONST64(0x8000808000800000), CONST64(0x8000800000800080), CONST64(0x8000808000800080), + CONST64(0x8000000000808000), CONST64(0x8000008000808000), CONST64(0x8000000000808080), CONST64(0x8000008000808080), + CONST64(0x8000800000808000), CONST64(0x8000808000808000), CONST64(0x8000800000808080), CONST64(0x8000808000808080), + CONST64(0x8080000000800000), CONST64(0x8080008000800000), CONST64(0x8080000000800080), CONST64(0x8080008000800080), + CONST64(0x8080800000800000), CONST64(0x8080808000800000), CONST64(0x8080800000800080), CONST64(0x8080808000800080), + CONST64(0x8080000000808000), CONST64(0x8080008000808000), CONST64(0x8080000000808080), CONST64(0x8080008000808080), + CONST64(0x8080800000808000), CONST64(0x8080808000808000), CONST64(0x8080800000808080), CONST64(0x8080808000808080), + CONST64(0x0000000080000000), CONST64(0x0000008080000000), CONST64(0x0000000080000080), CONST64(0x0000008080000080), + CONST64(0x0000800080000000), CONST64(0x0000808080000000), CONST64(0x0000800080000080), CONST64(0x0000808080000080), + CONST64(0x0000000080008000), CONST64(0x0000008080008000), CONST64(0x0000000080008080), CONST64(0x0000008080008080), + CONST64(0x0000800080008000), CONST64(0x0000808080008000), CONST64(0x0000800080008080), CONST64(0x0000808080008080), + CONST64(0x0080000080000000), CONST64(0x0080008080000000), CONST64(0x0080000080000080), CONST64(0x0080008080000080), + CONST64(0x0080800080000000), CONST64(0x0080808080000000), CONST64(0x0080800080000080), CONST64(0x0080808080000080), + CONST64(0x0080000080008000), CONST64(0x0080008080008000), CONST64(0x0080000080008080), CONST64(0x0080008080008080), + CONST64(0x0080800080008000), CONST64(0x0080808080008000), CONST64(0x0080800080008080), CONST64(0x0080808080008080), + CONST64(0x0000000080800000), CONST64(0x0000008080800000), CONST64(0x0000000080800080), CONST64(0x0000008080800080), + CONST64(0x0000800080800000), CONST64(0x0000808080800000), CONST64(0x0000800080800080), CONST64(0x0000808080800080), + CONST64(0x0000000080808000), CONST64(0x0000008080808000), CONST64(0x0000000080808080), CONST64(0x0000008080808080), + CONST64(0x0000800080808000), CONST64(0x0000808080808000), CONST64(0x0000800080808080), CONST64(0x0000808080808080), + CONST64(0x0080000080800000), CONST64(0x0080008080800000), CONST64(0x0080000080800080), CONST64(0x0080008080800080), + CONST64(0x0080800080800000), CONST64(0x0080808080800000), CONST64(0x0080800080800080), CONST64(0x0080808080800080), + CONST64(0x0080000080808000), CONST64(0x0080008080808000), CONST64(0x0080000080808080), CONST64(0x0080008080808080), + CONST64(0x0080800080808000), CONST64(0x0080808080808000), CONST64(0x0080800080808080), CONST64(0x0080808080808080), + CONST64(0x8000000080000000), CONST64(0x8000008080000000), CONST64(0x8000000080000080), CONST64(0x8000008080000080), + CONST64(0x8000800080000000), CONST64(0x8000808080000000), CONST64(0x8000800080000080), CONST64(0x8000808080000080), + CONST64(0x8000000080008000), CONST64(0x8000008080008000), CONST64(0x8000000080008080), CONST64(0x8000008080008080), + CONST64(0x8000800080008000), CONST64(0x8000808080008000), CONST64(0x8000800080008080), CONST64(0x8000808080008080), + CONST64(0x8080000080000000), CONST64(0x8080008080000000), CONST64(0x8080000080000080), CONST64(0x8080008080000080), + CONST64(0x8080800080000000), CONST64(0x8080808080000000), CONST64(0x8080800080000080), CONST64(0x8080808080000080), + CONST64(0x8080000080008000), CONST64(0x8080008080008000), CONST64(0x8080000080008080), CONST64(0x8080008080008080), + CONST64(0x8080800080008000), CONST64(0x8080808080008000), CONST64(0x8080800080008080), CONST64(0x8080808080008080), + CONST64(0x8000000080800000), CONST64(0x8000008080800000), CONST64(0x8000000080800080), CONST64(0x8000008080800080), + CONST64(0x8000800080800000), CONST64(0x8000808080800000), CONST64(0x8000800080800080), CONST64(0x8000808080800080), + CONST64(0x8000000080808000), CONST64(0x8000008080808000), CONST64(0x8000000080808080), CONST64(0x8000008080808080), + CONST64(0x8000800080808000), CONST64(0x8000808080808000), CONST64(0x8000800080808080), CONST64(0x8000808080808080), + CONST64(0x8080000080800000), CONST64(0x8080008080800000), CONST64(0x8080000080800080), CONST64(0x8080008080800080), + CONST64(0x8080800080800000), CONST64(0x8080808080800000), CONST64(0x8080800080800080), CONST64(0x8080808080800080), + CONST64(0x8080000080808000), CONST64(0x8080008080808000), CONST64(0x8080000080808080), CONST64(0x8080008080808080), CONST64(0x8080800080808000), CONST64(0x8080808080808000), CONST64(0x8080800080808080), CONST64(0x8080808080808080) - }, -{ CONST64(0x0000000000000000), CONST64(0x0000004000000000), CONST64(0x0000000000000040), CONST64(0x0000004000000040), - CONST64(0x0000400000000000), CONST64(0x0000404000000000), CONST64(0x0000400000000040), CONST64(0x0000404000000040), - CONST64(0x0000000000004000), CONST64(0x0000004000004000), CONST64(0x0000000000004040), CONST64(0x0000004000004040), - CONST64(0x0000400000004000), CONST64(0x0000404000004000), CONST64(0x0000400000004040), CONST64(0x0000404000004040), - CONST64(0x0040000000000000), CONST64(0x0040004000000000), CONST64(0x0040000000000040), CONST64(0x0040004000000040), - CONST64(0x0040400000000000), CONST64(0x0040404000000000), CONST64(0x0040400000000040), CONST64(0x0040404000000040), - CONST64(0x0040000000004000), CONST64(0x0040004000004000), CONST64(0x0040000000004040), CONST64(0x0040004000004040), - CONST64(0x0040400000004000), CONST64(0x0040404000004000), CONST64(0x0040400000004040), CONST64(0x0040404000004040), - CONST64(0x0000000000400000), CONST64(0x0000004000400000), CONST64(0x0000000000400040), CONST64(0x0000004000400040), - CONST64(0x0000400000400000), CONST64(0x0000404000400000), CONST64(0x0000400000400040), CONST64(0x0000404000400040), - CONST64(0x0000000000404000), CONST64(0x0000004000404000), CONST64(0x0000000000404040), CONST64(0x0000004000404040), - CONST64(0x0000400000404000), CONST64(0x0000404000404000), CONST64(0x0000400000404040), CONST64(0x0000404000404040), - CONST64(0x0040000000400000), CONST64(0x0040004000400000), CONST64(0x0040000000400040), CONST64(0x0040004000400040), - CONST64(0x0040400000400000), CONST64(0x0040404000400000), CONST64(0x0040400000400040), CONST64(0x0040404000400040), - CONST64(0x0040000000404000), CONST64(0x0040004000404000), CONST64(0x0040000000404040), CONST64(0x0040004000404040), - CONST64(0x0040400000404000), CONST64(0x0040404000404000), CONST64(0x0040400000404040), CONST64(0x0040404000404040), - CONST64(0x4000000000000000), CONST64(0x4000004000000000), CONST64(0x4000000000000040), CONST64(0x4000004000000040), - CONST64(0x4000400000000000), CONST64(0x4000404000000000), CONST64(0x4000400000000040), CONST64(0x4000404000000040), - CONST64(0x4000000000004000), CONST64(0x4000004000004000), CONST64(0x4000000000004040), CONST64(0x4000004000004040), - CONST64(0x4000400000004000), CONST64(0x4000404000004000), CONST64(0x4000400000004040), CONST64(0x4000404000004040), - CONST64(0x4040000000000000), CONST64(0x4040004000000000), CONST64(0x4040000000000040), CONST64(0x4040004000000040), - CONST64(0x4040400000000000), CONST64(0x4040404000000000), CONST64(0x4040400000000040), CONST64(0x4040404000000040), - CONST64(0x4040000000004000), CONST64(0x4040004000004000), CONST64(0x4040000000004040), CONST64(0x4040004000004040), - CONST64(0x4040400000004000), CONST64(0x4040404000004000), CONST64(0x4040400000004040), CONST64(0x4040404000004040), - CONST64(0x4000000000400000), CONST64(0x4000004000400000), CONST64(0x4000000000400040), CONST64(0x4000004000400040), - CONST64(0x4000400000400000), CONST64(0x4000404000400000), CONST64(0x4000400000400040), CONST64(0x4000404000400040), - CONST64(0x4000000000404000), CONST64(0x4000004000404000), CONST64(0x4000000000404040), CONST64(0x4000004000404040), - CONST64(0x4000400000404000), CONST64(0x4000404000404000), CONST64(0x4000400000404040), CONST64(0x4000404000404040), - CONST64(0x4040000000400000), CONST64(0x4040004000400000), CONST64(0x4040000000400040), CONST64(0x4040004000400040), - CONST64(0x4040400000400000), CONST64(0x4040404000400000), CONST64(0x4040400000400040), CONST64(0x4040404000400040), - CONST64(0x4040000000404000), CONST64(0x4040004000404000), CONST64(0x4040000000404040), CONST64(0x4040004000404040), - CONST64(0x4040400000404000), CONST64(0x4040404000404000), CONST64(0x4040400000404040), CONST64(0x4040404000404040), - CONST64(0x0000000040000000), CONST64(0x0000004040000000), CONST64(0x0000000040000040), CONST64(0x0000004040000040), - CONST64(0x0000400040000000), CONST64(0x0000404040000000), CONST64(0x0000400040000040), CONST64(0x0000404040000040), - CONST64(0x0000000040004000), CONST64(0x0000004040004000), CONST64(0x0000000040004040), CONST64(0x0000004040004040), - CONST64(0x0000400040004000), CONST64(0x0000404040004000), CONST64(0x0000400040004040), CONST64(0x0000404040004040), - CONST64(0x0040000040000000), CONST64(0x0040004040000000), CONST64(0x0040000040000040), CONST64(0x0040004040000040), - CONST64(0x0040400040000000), CONST64(0x0040404040000000), CONST64(0x0040400040000040), CONST64(0x0040404040000040), - CONST64(0x0040000040004000), CONST64(0x0040004040004000), CONST64(0x0040000040004040), CONST64(0x0040004040004040), - CONST64(0x0040400040004000), CONST64(0x0040404040004000), CONST64(0x0040400040004040), CONST64(0x0040404040004040), - CONST64(0x0000000040400000), CONST64(0x0000004040400000), CONST64(0x0000000040400040), CONST64(0x0000004040400040), - CONST64(0x0000400040400000), CONST64(0x0000404040400000), CONST64(0x0000400040400040), CONST64(0x0000404040400040), - CONST64(0x0000000040404000), CONST64(0x0000004040404000), CONST64(0x0000000040404040), CONST64(0x0000004040404040), - CONST64(0x0000400040404000), CONST64(0x0000404040404000), CONST64(0x0000400040404040), CONST64(0x0000404040404040), - CONST64(0x0040000040400000), CONST64(0x0040004040400000), CONST64(0x0040000040400040), CONST64(0x0040004040400040), - CONST64(0x0040400040400000), CONST64(0x0040404040400000), CONST64(0x0040400040400040), CONST64(0x0040404040400040), - CONST64(0x0040000040404000), CONST64(0x0040004040404000), CONST64(0x0040000040404040), CONST64(0x0040004040404040), - CONST64(0x0040400040404000), CONST64(0x0040404040404000), CONST64(0x0040400040404040), CONST64(0x0040404040404040), - CONST64(0x4000000040000000), CONST64(0x4000004040000000), CONST64(0x4000000040000040), CONST64(0x4000004040000040), - CONST64(0x4000400040000000), CONST64(0x4000404040000000), CONST64(0x4000400040000040), CONST64(0x4000404040000040), - CONST64(0x4000000040004000), CONST64(0x4000004040004000), CONST64(0x4000000040004040), CONST64(0x4000004040004040), - CONST64(0x4000400040004000), CONST64(0x4000404040004000), CONST64(0x4000400040004040), CONST64(0x4000404040004040), - CONST64(0x4040000040000000), CONST64(0x4040004040000000), CONST64(0x4040000040000040), CONST64(0x4040004040000040), - CONST64(0x4040400040000000), CONST64(0x4040404040000000), CONST64(0x4040400040000040), CONST64(0x4040404040000040), - CONST64(0x4040000040004000), CONST64(0x4040004040004000), CONST64(0x4040000040004040), CONST64(0x4040004040004040), - CONST64(0x4040400040004000), CONST64(0x4040404040004000), CONST64(0x4040400040004040), CONST64(0x4040404040004040), - CONST64(0x4000000040400000), CONST64(0x4000004040400000), CONST64(0x4000000040400040), CONST64(0x4000004040400040), - CONST64(0x4000400040400000), CONST64(0x4000404040400000), CONST64(0x4000400040400040), CONST64(0x4000404040400040), - CONST64(0x4000000040404000), CONST64(0x4000004040404000), CONST64(0x4000000040404040), CONST64(0x4000004040404040), - CONST64(0x4000400040404000), CONST64(0x4000404040404000), CONST64(0x4000400040404040), CONST64(0x4000404040404040), - CONST64(0x4040000040400000), CONST64(0x4040004040400000), CONST64(0x4040000040400040), CONST64(0x4040004040400040), - CONST64(0x4040400040400000), CONST64(0x4040404040400000), CONST64(0x4040400040400040), CONST64(0x4040404040400040), - CONST64(0x4040000040404000), CONST64(0x4040004040404000), CONST64(0x4040000040404040), CONST64(0x4040004040404040), + }, +{ CONST64(0x0000000000000000), CONST64(0x0000004000000000), CONST64(0x0000000000000040), CONST64(0x0000004000000040), + CONST64(0x0000400000000000), CONST64(0x0000404000000000), CONST64(0x0000400000000040), CONST64(0x0000404000000040), + CONST64(0x0000000000004000), CONST64(0x0000004000004000), CONST64(0x0000000000004040), CONST64(0x0000004000004040), + CONST64(0x0000400000004000), CONST64(0x0000404000004000), CONST64(0x0000400000004040), CONST64(0x0000404000004040), + CONST64(0x0040000000000000), CONST64(0x0040004000000000), CONST64(0x0040000000000040), CONST64(0x0040004000000040), + CONST64(0x0040400000000000), CONST64(0x0040404000000000), CONST64(0x0040400000000040), CONST64(0x0040404000000040), + CONST64(0x0040000000004000), CONST64(0x0040004000004000), CONST64(0x0040000000004040), CONST64(0x0040004000004040), + CONST64(0x0040400000004000), CONST64(0x0040404000004000), CONST64(0x0040400000004040), CONST64(0x0040404000004040), + CONST64(0x0000000000400000), CONST64(0x0000004000400000), CONST64(0x0000000000400040), CONST64(0x0000004000400040), + CONST64(0x0000400000400000), CONST64(0x0000404000400000), CONST64(0x0000400000400040), CONST64(0x0000404000400040), + CONST64(0x0000000000404000), CONST64(0x0000004000404000), CONST64(0x0000000000404040), CONST64(0x0000004000404040), + CONST64(0x0000400000404000), CONST64(0x0000404000404000), CONST64(0x0000400000404040), CONST64(0x0000404000404040), + CONST64(0x0040000000400000), CONST64(0x0040004000400000), CONST64(0x0040000000400040), CONST64(0x0040004000400040), + CONST64(0x0040400000400000), CONST64(0x0040404000400000), CONST64(0x0040400000400040), CONST64(0x0040404000400040), + CONST64(0x0040000000404000), CONST64(0x0040004000404000), CONST64(0x0040000000404040), CONST64(0x0040004000404040), + CONST64(0x0040400000404000), CONST64(0x0040404000404000), CONST64(0x0040400000404040), CONST64(0x0040404000404040), + CONST64(0x4000000000000000), CONST64(0x4000004000000000), CONST64(0x4000000000000040), CONST64(0x4000004000000040), + CONST64(0x4000400000000000), CONST64(0x4000404000000000), CONST64(0x4000400000000040), CONST64(0x4000404000000040), + CONST64(0x4000000000004000), CONST64(0x4000004000004000), CONST64(0x4000000000004040), CONST64(0x4000004000004040), + CONST64(0x4000400000004000), CONST64(0x4000404000004000), CONST64(0x4000400000004040), CONST64(0x4000404000004040), + CONST64(0x4040000000000000), CONST64(0x4040004000000000), CONST64(0x4040000000000040), CONST64(0x4040004000000040), + CONST64(0x4040400000000000), CONST64(0x4040404000000000), CONST64(0x4040400000000040), CONST64(0x4040404000000040), + CONST64(0x4040000000004000), CONST64(0x4040004000004000), CONST64(0x4040000000004040), CONST64(0x4040004000004040), + CONST64(0x4040400000004000), CONST64(0x4040404000004000), CONST64(0x4040400000004040), CONST64(0x4040404000004040), + CONST64(0x4000000000400000), CONST64(0x4000004000400000), CONST64(0x4000000000400040), CONST64(0x4000004000400040), + CONST64(0x4000400000400000), CONST64(0x4000404000400000), CONST64(0x4000400000400040), CONST64(0x4000404000400040), + CONST64(0x4000000000404000), CONST64(0x4000004000404000), CONST64(0x4000000000404040), CONST64(0x4000004000404040), + CONST64(0x4000400000404000), CONST64(0x4000404000404000), CONST64(0x4000400000404040), CONST64(0x4000404000404040), + CONST64(0x4040000000400000), CONST64(0x4040004000400000), CONST64(0x4040000000400040), CONST64(0x4040004000400040), + CONST64(0x4040400000400000), CONST64(0x4040404000400000), CONST64(0x4040400000400040), CONST64(0x4040404000400040), + CONST64(0x4040000000404000), CONST64(0x4040004000404000), CONST64(0x4040000000404040), CONST64(0x4040004000404040), + CONST64(0x4040400000404000), CONST64(0x4040404000404000), CONST64(0x4040400000404040), CONST64(0x4040404000404040), + CONST64(0x0000000040000000), CONST64(0x0000004040000000), CONST64(0x0000000040000040), CONST64(0x0000004040000040), + CONST64(0x0000400040000000), CONST64(0x0000404040000000), CONST64(0x0000400040000040), CONST64(0x0000404040000040), + CONST64(0x0000000040004000), CONST64(0x0000004040004000), CONST64(0x0000000040004040), CONST64(0x0000004040004040), + CONST64(0x0000400040004000), CONST64(0x0000404040004000), CONST64(0x0000400040004040), CONST64(0x0000404040004040), + CONST64(0x0040000040000000), CONST64(0x0040004040000000), CONST64(0x0040000040000040), CONST64(0x0040004040000040), + CONST64(0x0040400040000000), CONST64(0x0040404040000000), CONST64(0x0040400040000040), CONST64(0x0040404040000040), + CONST64(0x0040000040004000), CONST64(0x0040004040004000), CONST64(0x0040000040004040), CONST64(0x0040004040004040), + CONST64(0x0040400040004000), CONST64(0x0040404040004000), CONST64(0x0040400040004040), CONST64(0x0040404040004040), + CONST64(0x0000000040400000), CONST64(0x0000004040400000), CONST64(0x0000000040400040), CONST64(0x0000004040400040), + CONST64(0x0000400040400000), CONST64(0x0000404040400000), CONST64(0x0000400040400040), CONST64(0x0000404040400040), + CONST64(0x0000000040404000), CONST64(0x0000004040404000), CONST64(0x0000000040404040), CONST64(0x0000004040404040), + CONST64(0x0000400040404000), CONST64(0x0000404040404000), CONST64(0x0000400040404040), CONST64(0x0000404040404040), + CONST64(0x0040000040400000), CONST64(0x0040004040400000), CONST64(0x0040000040400040), CONST64(0x0040004040400040), + CONST64(0x0040400040400000), CONST64(0x0040404040400000), CONST64(0x0040400040400040), CONST64(0x0040404040400040), + CONST64(0x0040000040404000), CONST64(0x0040004040404000), CONST64(0x0040000040404040), CONST64(0x0040004040404040), + CONST64(0x0040400040404000), CONST64(0x0040404040404000), CONST64(0x0040400040404040), CONST64(0x0040404040404040), + CONST64(0x4000000040000000), CONST64(0x4000004040000000), CONST64(0x4000000040000040), CONST64(0x4000004040000040), + CONST64(0x4000400040000000), CONST64(0x4000404040000000), CONST64(0x4000400040000040), CONST64(0x4000404040000040), + CONST64(0x4000000040004000), CONST64(0x4000004040004000), CONST64(0x4000000040004040), CONST64(0x4000004040004040), + CONST64(0x4000400040004000), CONST64(0x4000404040004000), CONST64(0x4000400040004040), CONST64(0x4000404040004040), + CONST64(0x4040000040000000), CONST64(0x4040004040000000), CONST64(0x4040000040000040), CONST64(0x4040004040000040), + CONST64(0x4040400040000000), CONST64(0x4040404040000000), CONST64(0x4040400040000040), CONST64(0x4040404040000040), + CONST64(0x4040000040004000), CONST64(0x4040004040004000), CONST64(0x4040000040004040), CONST64(0x4040004040004040), + CONST64(0x4040400040004000), CONST64(0x4040404040004000), CONST64(0x4040400040004040), CONST64(0x4040404040004040), + CONST64(0x4000000040400000), CONST64(0x4000004040400000), CONST64(0x4000000040400040), CONST64(0x4000004040400040), + CONST64(0x4000400040400000), CONST64(0x4000404040400000), CONST64(0x4000400040400040), CONST64(0x4000404040400040), + CONST64(0x4000000040404000), CONST64(0x4000004040404000), CONST64(0x4000000040404040), CONST64(0x4000004040404040), + CONST64(0x4000400040404000), CONST64(0x4000404040404000), CONST64(0x4000400040404040), CONST64(0x4000404040404040), + CONST64(0x4040000040400000), CONST64(0x4040004040400000), CONST64(0x4040000040400040), CONST64(0x4040004040400040), + CONST64(0x4040400040400000), CONST64(0x4040404040400000), CONST64(0x4040400040400040), CONST64(0x4040404040400040), + CONST64(0x4040000040404000), CONST64(0x4040004040404000), CONST64(0x4040000040404040), CONST64(0x4040004040404040), CONST64(0x4040400040404000), CONST64(0x4040404040404000), CONST64(0x4040400040404040), CONST64(0x4040404040404040) - }, -{ CONST64(0x0000000000000000), CONST64(0x0000002000000000), CONST64(0x0000000000000020), CONST64(0x0000002000000020), - CONST64(0x0000200000000000), CONST64(0x0000202000000000), CONST64(0x0000200000000020), CONST64(0x0000202000000020), - CONST64(0x0000000000002000), CONST64(0x0000002000002000), CONST64(0x0000000000002020), CONST64(0x0000002000002020), - CONST64(0x0000200000002000), CONST64(0x0000202000002000), CONST64(0x0000200000002020), CONST64(0x0000202000002020), - CONST64(0x0020000000000000), CONST64(0x0020002000000000), CONST64(0x0020000000000020), CONST64(0x0020002000000020), - CONST64(0x0020200000000000), CONST64(0x0020202000000000), CONST64(0x0020200000000020), CONST64(0x0020202000000020), - CONST64(0x0020000000002000), CONST64(0x0020002000002000), CONST64(0x0020000000002020), CONST64(0x0020002000002020), - CONST64(0x0020200000002000), CONST64(0x0020202000002000), CONST64(0x0020200000002020), CONST64(0x0020202000002020), - CONST64(0x0000000000200000), CONST64(0x0000002000200000), CONST64(0x0000000000200020), CONST64(0x0000002000200020), - CONST64(0x0000200000200000), CONST64(0x0000202000200000), CONST64(0x0000200000200020), CONST64(0x0000202000200020), - CONST64(0x0000000000202000), CONST64(0x0000002000202000), CONST64(0x0000000000202020), CONST64(0x0000002000202020), - CONST64(0x0000200000202000), CONST64(0x0000202000202000), CONST64(0x0000200000202020), CONST64(0x0000202000202020), - CONST64(0x0020000000200000), CONST64(0x0020002000200000), CONST64(0x0020000000200020), CONST64(0x0020002000200020), - CONST64(0x0020200000200000), CONST64(0x0020202000200000), CONST64(0x0020200000200020), CONST64(0x0020202000200020), - CONST64(0x0020000000202000), CONST64(0x0020002000202000), CONST64(0x0020000000202020), CONST64(0x0020002000202020), - CONST64(0x0020200000202000), CONST64(0x0020202000202000), CONST64(0x0020200000202020), CONST64(0x0020202000202020), - CONST64(0x2000000000000000), CONST64(0x2000002000000000), CONST64(0x2000000000000020), CONST64(0x2000002000000020), - CONST64(0x2000200000000000), CONST64(0x2000202000000000), CONST64(0x2000200000000020), CONST64(0x2000202000000020), - CONST64(0x2000000000002000), CONST64(0x2000002000002000), CONST64(0x2000000000002020), CONST64(0x2000002000002020), - CONST64(0x2000200000002000), CONST64(0x2000202000002000), CONST64(0x2000200000002020), CONST64(0x2000202000002020), - CONST64(0x2020000000000000), CONST64(0x2020002000000000), CONST64(0x2020000000000020), CONST64(0x2020002000000020), - CONST64(0x2020200000000000), CONST64(0x2020202000000000), CONST64(0x2020200000000020), CONST64(0x2020202000000020), - CONST64(0x2020000000002000), CONST64(0x2020002000002000), CONST64(0x2020000000002020), CONST64(0x2020002000002020), - CONST64(0x2020200000002000), CONST64(0x2020202000002000), CONST64(0x2020200000002020), CONST64(0x2020202000002020), - CONST64(0x2000000000200000), CONST64(0x2000002000200000), CONST64(0x2000000000200020), CONST64(0x2000002000200020), - CONST64(0x2000200000200000), CONST64(0x2000202000200000), CONST64(0x2000200000200020), CONST64(0x2000202000200020), - CONST64(0x2000000000202000), CONST64(0x2000002000202000), CONST64(0x2000000000202020), CONST64(0x2000002000202020), - CONST64(0x2000200000202000), CONST64(0x2000202000202000), CONST64(0x2000200000202020), CONST64(0x2000202000202020), - CONST64(0x2020000000200000), CONST64(0x2020002000200000), CONST64(0x2020000000200020), CONST64(0x2020002000200020), - CONST64(0x2020200000200000), CONST64(0x2020202000200000), CONST64(0x2020200000200020), CONST64(0x2020202000200020), - CONST64(0x2020000000202000), CONST64(0x2020002000202000), CONST64(0x2020000000202020), CONST64(0x2020002000202020), - CONST64(0x2020200000202000), CONST64(0x2020202000202000), CONST64(0x2020200000202020), CONST64(0x2020202000202020), - CONST64(0x0000000020000000), CONST64(0x0000002020000000), CONST64(0x0000000020000020), CONST64(0x0000002020000020), - CONST64(0x0000200020000000), CONST64(0x0000202020000000), CONST64(0x0000200020000020), CONST64(0x0000202020000020), - CONST64(0x0000000020002000), CONST64(0x0000002020002000), CONST64(0x0000000020002020), CONST64(0x0000002020002020), - CONST64(0x0000200020002000), CONST64(0x0000202020002000), CONST64(0x0000200020002020), CONST64(0x0000202020002020), - CONST64(0x0020000020000000), CONST64(0x0020002020000000), CONST64(0x0020000020000020), CONST64(0x0020002020000020), - CONST64(0x0020200020000000), CONST64(0x0020202020000000), CONST64(0x0020200020000020), CONST64(0x0020202020000020), - CONST64(0x0020000020002000), CONST64(0x0020002020002000), CONST64(0x0020000020002020), CONST64(0x0020002020002020), - CONST64(0x0020200020002000), CONST64(0x0020202020002000), CONST64(0x0020200020002020), CONST64(0x0020202020002020), - CONST64(0x0000000020200000), CONST64(0x0000002020200000), CONST64(0x0000000020200020), CONST64(0x0000002020200020), - CONST64(0x0000200020200000), CONST64(0x0000202020200000), CONST64(0x0000200020200020), CONST64(0x0000202020200020), - CONST64(0x0000000020202000), CONST64(0x0000002020202000), CONST64(0x0000000020202020), CONST64(0x0000002020202020), - CONST64(0x0000200020202000), CONST64(0x0000202020202000), CONST64(0x0000200020202020), CONST64(0x0000202020202020), - CONST64(0x0020000020200000), CONST64(0x0020002020200000), CONST64(0x0020000020200020), CONST64(0x0020002020200020), - CONST64(0x0020200020200000), CONST64(0x0020202020200000), CONST64(0x0020200020200020), CONST64(0x0020202020200020), - CONST64(0x0020000020202000), CONST64(0x0020002020202000), CONST64(0x0020000020202020), CONST64(0x0020002020202020), - CONST64(0x0020200020202000), CONST64(0x0020202020202000), CONST64(0x0020200020202020), CONST64(0x0020202020202020), - CONST64(0x2000000020000000), CONST64(0x2000002020000000), CONST64(0x2000000020000020), CONST64(0x2000002020000020), - CONST64(0x2000200020000000), CONST64(0x2000202020000000), CONST64(0x2000200020000020), CONST64(0x2000202020000020), - CONST64(0x2000000020002000), CONST64(0x2000002020002000), CONST64(0x2000000020002020), CONST64(0x2000002020002020), - CONST64(0x2000200020002000), CONST64(0x2000202020002000), CONST64(0x2000200020002020), CONST64(0x2000202020002020), - CONST64(0x2020000020000000), CONST64(0x2020002020000000), CONST64(0x2020000020000020), CONST64(0x2020002020000020), - CONST64(0x2020200020000000), CONST64(0x2020202020000000), CONST64(0x2020200020000020), CONST64(0x2020202020000020), - CONST64(0x2020000020002000), CONST64(0x2020002020002000), CONST64(0x2020000020002020), CONST64(0x2020002020002020), - CONST64(0x2020200020002000), CONST64(0x2020202020002000), CONST64(0x2020200020002020), CONST64(0x2020202020002020), - CONST64(0x2000000020200000), CONST64(0x2000002020200000), CONST64(0x2000000020200020), CONST64(0x2000002020200020), - CONST64(0x2000200020200000), CONST64(0x2000202020200000), CONST64(0x2000200020200020), CONST64(0x2000202020200020), - CONST64(0x2000000020202000), CONST64(0x2000002020202000), CONST64(0x2000000020202020), CONST64(0x2000002020202020), - CONST64(0x2000200020202000), CONST64(0x2000202020202000), CONST64(0x2000200020202020), CONST64(0x2000202020202020), - CONST64(0x2020000020200000), CONST64(0x2020002020200000), CONST64(0x2020000020200020), CONST64(0x2020002020200020), - CONST64(0x2020200020200000), CONST64(0x2020202020200000), CONST64(0x2020200020200020), CONST64(0x2020202020200020), - CONST64(0x2020000020202000), CONST64(0x2020002020202000), CONST64(0x2020000020202020), CONST64(0x2020002020202020), + }, +{ CONST64(0x0000000000000000), CONST64(0x0000002000000000), CONST64(0x0000000000000020), CONST64(0x0000002000000020), + CONST64(0x0000200000000000), CONST64(0x0000202000000000), CONST64(0x0000200000000020), CONST64(0x0000202000000020), + CONST64(0x0000000000002000), CONST64(0x0000002000002000), CONST64(0x0000000000002020), CONST64(0x0000002000002020), + CONST64(0x0000200000002000), CONST64(0x0000202000002000), CONST64(0x0000200000002020), CONST64(0x0000202000002020), + CONST64(0x0020000000000000), CONST64(0x0020002000000000), CONST64(0x0020000000000020), CONST64(0x0020002000000020), + CONST64(0x0020200000000000), CONST64(0x0020202000000000), CONST64(0x0020200000000020), CONST64(0x0020202000000020), + CONST64(0x0020000000002000), CONST64(0x0020002000002000), CONST64(0x0020000000002020), CONST64(0x0020002000002020), + CONST64(0x0020200000002000), CONST64(0x0020202000002000), CONST64(0x0020200000002020), CONST64(0x0020202000002020), + CONST64(0x0000000000200000), CONST64(0x0000002000200000), CONST64(0x0000000000200020), CONST64(0x0000002000200020), + CONST64(0x0000200000200000), CONST64(0x0000202000200000), CONST64(0x0000200000200020), CONST64(0x0000202000200020), + CONST64(0x0000000000202000), CONST64(0x0000002000202000), CONST64(0x0000000000202020), CONST64(0x0000002000202020), + CONST64(0x0000200000202000), CONST64(0x0000202000202000), CONST64(0x0000200000202020), CONST64(0x0000202000202020), + CONST64(0x0020000000200000), CONST64(0x0020002000200000), CONST64(0x0020000000200020), CONST64(0x0020002000200020), + CONST64(0x0020200000200000), CONST64(0x0020202000200000), CONST64(0x0020200000200020), CONST64(0x0020202000200020), + CONST64(0x0020000000202000), CONST64(0x0020002000202000), CONST64(0x0020000000202020), CONST64(0x0020002000202020), + CONST64(0x0020200000202000), CONST64(0x0020202000202000), CONST64(0x0020200000202020), CONST64(0x0020202000202020), + CONST64(0x2000000000000000), CONST64(0x2000002000000000), CONST64(0x2000000000000020), CONST64(0x2000002000000020), + CONST64(0x2000200000000000), CONST64(0x2000202000000000), CONST64(0x2000200000000020), CONST64(0x2000202000000020), + CONST64(0x2000000000002000), CONST64(0x2000002000002000), CONST64(0x2000000000002020), CONST64(0x2000002000002020), + CONST64(0x2000200000002000), CONST64(0x2000202000002000), CONST64(0x2000200000002020), CONST64(0x2000202000002020), + CONST64(0x2020000000000000), CONST64(0x2020002000000000), CONST64(0x2020000000000020), CONST64(0x2020002000000020), + CONST64(0x2020200000000000), CONST64(0x2020202000000000), CONST64(0x2020200000000020), CONST64(0x2020202000000020), + CONST64(0x2020000000002000), CONST64(0x2020002000002000), CONST64(0x2020000000002020), CONST64(0x2020002000002020), + CONST64(0x2020200000002000), CONST64(0x2020202000002000), CONST64(0x2020200000002020), CONST64(0x2020202000002020), + CONST64(0x2000000000200000), CONST64(0x2000002000200000), CONST64(0x2000000000200020), CONST64(0x2000002000200020), + CONST64(0x2000200000200000), CONST64(0x2000202000200000), CONST64(0x2000200000200020), CONST64(0x2000202000200020), + CONST64(0x2000000000202000), CONST64(0x2000002000202000), CONST64(0x2000000000202020), CONST64(0x2000002000202020), + CONST64(0x2000200000202000), CONST64(0x2000202000202000), CONST64(0x2000200000202020), CONST64(0x2000202000202020), + CONST64(0x2020000000200000), CONST64(0x2020002000200000), CONST64(0x2020000000200020), CONST64(0x2020002000200020), + CONST64(0x2020200000200000), CONST64(0x2020202000200000), CONST64(0x2020200000200020), CONST64(0x2020202000200020), + CONST64(0x2020000000202000), CONST64(0x2020002000202000), CONST64(0x2020000000202020), CONST64(0x2020002000202020), + CONST64(0x2020200000202000), CONST64(0x2020202000202000), CONST64(0x2020200000202020), CONST64(0x2020202000202020), + CONST64(0x0000000020000000), CONST64(0x0000002020000000), CONST64(0x0000000020000020), CONST64(0x0000002020000020), + CONST64(0x0000200020000000), CONST64(0x0000202020000000), CONST64(0x0000200020000020), CONST64(0x0000202020000020), + CONST64(0x0000000020002000), CONST64(0x0000002020002000), CONST64(0x0000000020002020), CONST64(0x0000002020002020), + CONST64(0x0000200020002000), CONST64(0x0000202020002000), CONST64(0x0000200020002020), CONST64(0x0000202020002020), + CONST64(0x0020000020000000), CONST64(0x0020002020000000), CONST64(0x0020000020000020), CONST64(0x0020002020000020), + CONST64(0x0020200020000000), CONST64(0x0020202020000000), CONST64(0x0020200020000020), CONST64(0x0020202020000020), + CONST64(0x0020000020002000), CONST64(0x0020002020002000), CONST64(0x0020000020002020), CONST64(0x0020002020002020), + CONST64(0x0020200020002000), CONST64(0x0020202020002000), CONST64(0x0020200020002020), CONST64(0x0020202020002020), + CONST64(0x0000000020200000), CONST64(0x0000002020200000), CONST64(0x0000000020200020), CONST64(0x0000002020200020), + CONST64(0x0000200020200000), CONST64(0x0000202020200000), CONST64(0x0000200020200020), CONST64(0x0000202020200020), + CONST64(0x0000000020202000), CONST64(0x0000002020202000), CONST64(0x0000000020202020), CONST64(0x0000002020202020), + CONST64(0x0000200020202000), CONST64(0x0000202020202000), CONST64(0x0000200020202020), CONST64(0x0000202020202020), + CONST64(0x0020000020200000), CONST64(0x0020002020200000), CONST64(0x0020000020200020), CONST64(0x0020002020200020), + CONST64(0x0020200020200000), CONST64(0x0020202020200000), CONST64(0x0020200020200020), CONST64(0x0020202020200020), + CONST64(0x0020000020202000), CONST64(0x0020002020202000), CONST64(0x0020000020202020), CONST64(0x0020002020202020), + CONST64(0x0020200020202000), CONST64(0x0020202020202000), CONST64(0x0020200020202020), CONST64(0x0020202020202020), + CONST64(0x2000000020000000), CONST64(0x2000002020000000), CONST64(0x2000000020000020), CONST64(0x2000002020000020), + CONST64(0x2000200020000000), CONST64(0x2000202020000000), CONST64(0x2000200020000020), CONST64(0x2000202020000020), + CONST64(0x2000000020002000), CONST64(0x2000002020002000), CONST64(0x2000000020002020), CONST64(0x2000002020002020), + CONST64(0x2000200020002000), CONST64(0x2000202020002000), CONST64(0x2000200020002020), CONST64(0x2000202020002020), + CONST64(0x2020000020000000), CONST64(0x2020002020000000), CONST64(0x2020000020000020), CONST64(0x2020002020000020), + CONST64(0x2020200020000000), CONST64(0x2020202020000000), CONST64(0x2020200020000020), CONST64(0x2020202020000020), + CONST64(0x2020000020002000), CONST64(0x2020002020002000), CONST64(0x2020000020002020), CONST64(0x2020002020002020), + CONST64(0x2020200020002000), CONST64(0x2020202020002000), CONST64(0x2020200020002020), CONST64(0x2020202020002020), + CONST64(0x2000000020200000), CONST64(0x2000002020200000), CONST64(0x2000000020200020), CONST64(0x2000002020200020), + CONST64(0x2000200020200000), CONST64(0x2000202020200000), CONST64(0x2000200020200020), CONST64(0x2000202020200020), + CONST64(0x2000000020202000), CONST64(0x2000002020202000), CONST64(0x2000000020202020), CONST64(0x2000002020202020), + CONST64(0x2000200020202000), CONST64(0x2000202020202000), CONST64(0x2000200020202020), CONST64(0x2000202020202020), + CONST64(0x2020000020200000), CONST64(0x2020002020200000), CONST64(0x2020000020200020), CONST64(0x2020002020200020), + CONST64(0x2020200020200000), CONST64(0x2020202020200000), CONST64(0x2020200020200020), CONST64(0x2020202020200020), + CONST64(0x2020000020202000), CONST64(0x2020002020202000), CONST64(0x2020000020202020), CONST64(0x2020002020202020), CONST64(0x2020200020202000), CONST64(0x2020202020202000), CONST64(0x2020200020202020), CONST64(0x2020202020202020) }}; - + static const ulong64 des_fp[8][256] = { -{ CONST64(0x0000000000000000), CONST64(0x0000008000000000), CONST64(0x0000000002000000), CONST64(0x0000008002000000), - CONST64(0x0000000000020000), CONST64(0x0000008000020000), CONST64(0x0000000002020000), CONST64(0x0000008002020000), - CONST64(0x0000000000000200), CONST64(0x0000008000000200), CONST64(0x0000000002000200), CONST64(0x0000008002000200), - CONST64(0x0000000000020200), CONST64(0x0000008000020200), CONST64(0x0000000002020200), CONST64(0x0000008002020200), - CONST64(0x0000000000000002), CONST64(0x0000008000000002), CONST64(0x0000000002000002), CONST64(0x0000008002000002), - CONST64(0x0000000000020002), CONST64(0x0000008000020002), CONST64(0x0000000002020002), CONST64(0x0000008002020002), - CONST64(0x0000000000000202), CONST64(0x0000008000000202), CONST64(0x0000000002000202), CONST64(0x0000008002000202), - CONST64(0x0000000000020202), CONST64(0x0000008000020202), CONST64(0x0000000002020202), CONST64(0x0000008002020202), - CONST64(0x0200000000000000), CONST64(0x0200008000000000), CONST64(0x0200000002000000), CONST64(0x0200008002000000), - CONST64(0x0200000000020000), CONST64(0x0200008000020000), CONST64(0x0200000002020000), CONST64(0x0200008002020000), - CONST64(0x0200000000000200), CONST64(0x0200008000000200), CONST64(0x0200000002000200), CONST64(0x0200008002000200), - CONST64(0x0200000000020200), CONST64(0x0200008000020200), CONST64(0x0200000002020200), CONST64(0x0200008002020200), - CONST64(0x0200000000000002), CONST64(0x0200008000000002), CONST64(0x0200000002000002), CONST64(0x0200008002000002), - CONST64(0x0200000000020002), CONST64(0x0200008000020002), CONST64(0x0200000002020002), CONST64(0x0200008002020002), - CONST64(0x0200000000000202), CONST64(0x0200008000000202), CONST64(0x0200000002000202), CONST64(0x0200008002000202), - CONST64(0x0200000000020202), CONST64(0x0200008000020202), CONST64(0x0200000002020202), CONST64(0x0200008002020202), - CONST64(0x0002000000000000), CONST64(0x0002008000000000), CONST64(0x0002000002000000), CONST64(0x0002008002000000), - CONST64(0x0002000000020000), CONST64(0x0002008000020000), CONST64(0x0002000002020000), CONST64(0x0002008002020000), - CONST64(0x0002000000000200), CONST64(0x0002008000000200), CONST64(0x0002000002000200), CONST64(0x0002008002000200), - CONST64(0x0002000000020200), CONST64(0x0002008000020200), CONST64(0x0002000002020200), CONST64(0x0002008002020200), - CONST64(0x0002000000000002), CONST64(0x0002008000000002), CONST64(0x0002000002000002), CONST64(0x0002008002000002), - CONST64(0x0002000000020002), CONST64(0x0002008000020002), CONST64(0x0002000002020002), CONST64(0x0002008002020002), - CONST64(0x0002000000000202), CONST64(0x0002008000000202), CONST64(0x0002000002000202), CONST64(0x0002008002000202), - CONST64(0x0002000000020202), CONST64(0x0002008000020202), CONST64(0x0002000002020202), CONST64(0x0002008002020202), - CONST64(0x0202000000000000), CONST64(0x0202008000000000), CONST64(0x0202000002000000), CONST64(0x0202008002000000), - CONST64(0x0202000000020000), CONST64(0x0202008000020000), CONST64(0x0202000002020000), CONST64(0x0202008002020000), - CONST64(0x0202000000000200), CONST64(0x0202008000000200), CONST64(0x0202000002000200), CONST64(0x0202008002000200), - CONST64(0x0202000000020200), CONST64(0x0202008000020200), CONST64(0x0202000002020200), CONST64(0x0202008002020200), - CONST64(0x0202000000000002), CONST64(0x0202008000000002), CONST64(0x0202000002000002), CONST64(0x0202008002000002), - CONST64(0x0202000000020002), CONST64(0x0202008000020002), CONST64(0x0202000002020002), CONST64(0x0202008002020002), - CONST64(0x0202000000000202), CONST64(0x0202008000000202), CONST64(0x0202000002000202), CONST64(0x0202008002000202), - CONST64(0x0202000000020202), CONST64(0x0202008000020202), CONST64(0x0202000002020202), CONST64(0x0202008002020202), - CONST64(0x0000020000000000), CONST64(0x0000028000000000), CONST64(0x0000020002000000), CONST64(0x0000028002000000), - CONST64(0x0000020000020000), CONST64(0x0000028000020000), CONST64(0x0000020002020000), CONST64(0x0000028002020000), - CONST64(0x0000020000000200), CONST64(0x0000028000000200), CONST64(0x0000020002000200), CONST64(0x0000028002000200), - CONST64(0x0000020000020200), CONST64(0x0000028000020200), CONST64(0x0000020002020200), CONST64(0x0000028002020200), - CONST64(0x0000020000000002), CONST64(0x0000028000000002), CONST64(0x0000020002000002), CONST64(0x0000028002000002), - CONST64(0x0000020000020002), CONST64(0x0000028000020002), CONST64(0x0000020002020002), CONST64(0x0000028002020002), - CONST64(0x0000020000000202), CONST64(0x0000028000000202), CONST64(0x0000020002000202), CONST64(0x0000028002000202), - CONST64(0x0000020000020202), CONST64(0x0000028000020202), CONST64(0x0000020002020202), CONST64(0x0000028002020202), - CONST64(0x0200020000000000), CONST64(0x0200028000000000), CONST64(0x0200020002000000), CONST64(0x0200028002000000), - CONST64(0x0200020000020000), CONST64(0x0200028000020000), CONST64(0x0200020002020000), CONST64(0x0200028002020000), - CONST64(0x0200020000000200), CONST64(0x0200028000000200), CONST64(0x0200020002000200), CONST64(0x0200028002000200), - CONST64(0x0200020000020200), CONST64(0x0200028000020200), CONST64(0x0200020002020200), CONST64(0x0200028002020200), - CONST64(0x0200020000000002), CONST64(0x0200028000000002), CONST64(0x0200020002000002), CONST64(0x0200028002000002), - CONST64(0x0200020000020002), CONST64(0x0200028000020002), CONST64(0x0200020002020002), CONST64(0x0200028002020002), - CONST64(0x0200020000000202), CONST64(0x0200028000000202), CONST64(0x0200020002000202), CONST64(0x0200028002000202), - CONST64(0x0200020000020202), CONST64(0x0200028000020202), CONST64(0x0200020002020202), CONST64(0x0200028002020202), - CONST64(0x0002020000000000), CONST64(0x0002028000000000), CONST64(0x0002020002000000), CONST64(0x0002028002000000), - CONST64(0x0002020000020000), CONST64(0x0002028000020000), CONST64(0x0002020002020000), CONST64(0x0002028002020000), - CONST64(0x0002020000000200), CONST64(0x0002028000000200), CONST64(0x0002020002000200), CONST64(0x0002028002000200), - CONST64(0x0002020000020200), CONST64(0x0002028000020200), CONST64(0x0002020002020200), CONST64(0x0002028002020200), - CONST64(0x0002020000000002), CONST64(0x0002028000000002), CONST64(0x0002020002000002), CONST64(0x0002028002000002), - CONST64(0x0002020000020002), CONST64(0x0002028000020002), CONST64(0x0002020002020002), CONST64(0x0002028002020002), - CONST64(0x0002020000000202), CONST64(0x0002028000000202), CONST64(0x0002020002000202), CONST64(0x0002028002000202), - CONST64(0x0002020000020202), CONST64(0x0002028000020202), CONST64(0x0002020002020202), CONST64(0x0002028002020202), - CONST64(0x0202020000000000), CONST64(0x0202028000000000), CONST64(0x0202020002000000), CONST64(0x0202028002000000), - CONST64(0x0202020000020000), CONST64(0x0202028000020000), CONST64(0x0202020002020000), CONST64(0x0202028002020000), - CONST64(0x0202020000000200), CONST64(0x0202028000000200), CONST64(0x0202020002000200), CONST64(0x0202028002000200), - CONST64(0x0202020000020200), CONST64(0x0202028000020200), CONST64(0x0202020002020200), CONST64(0x0202028002020200), - CONST64(0x0202020000000002), CONST64(0x0202028000000002), CONST64(0x0202020002000002), CONST64(0x0202028002000002), - CONST64(0x0202020000020002), CONST64(0x0202028000020002), CONST64(0x0202020002020002), CONST64(0x0202028002020002), - CONST64(0x0202020000000202), CONST64(0x0202028000000202), CONST64(0x0202020002000202), CONST64(0x0202028002000202), +{ CONST64(0x0000000000000000), CONST64(0x0000008000000000), CONST64(0x0000000002000000), CONST64(0x0000008002000000), + CONST64(0x0000000000020000), CONST64(0x0000008000020000), CONST64(0x0000000002020000), CONST64(0x0000008002020000), + CONST64(0x0000000000000200), CONST64(0x0000008000000200), CONST64(0x0000000002000200), CONST64(0x0000008002000200), + CONST64(0x0000000000020200), CONST64(0x0000008000020200), CONST64(0x0000000002020200), CONST64(0x0000008002020200), + CONST64(0x0000000000000002), CONST64(0x0000008000000002), CONST64(0x0000000002000002), CONST64(0x0000008002000002), + CONST64(0x0000000000020002), CONST64(0x0000008000020002), CONST64(0x0000000002020002), CONST64(0x0000008002020002), + CONST64(0x0000000000000202), CONST64(0x0000008000000202), CONST64(0x0000000002000202), CONST64(0x0000008002000202), + CONST64(0x0000000000020202), CONST64(0x0000008000020202), CONST64(0x0000000002020202), CONST64(0x0000008002020202), + CONST64(0x0200000000000000), CONST64(0x0200008000000000), CONST64(0x0200000002000000), CONST64(0x0200008002000000), + CONST64(0x0200000000020000), CONST64(0x0200008000020000), CONST64(0x0200000002020000), CONST64(0x0200008002020000), + CONST64(0x0200000000000200), CONST64(0x0200008000000200), CONST64(0x0200000002000200), CONST64(0x0200008002000200), + CONST64(0x0200000000020200), CONST64(0x0200008000020200), CONST64(0x0200000002020200), CONST64(0x0200008002020200), + CONST64(0x0200000000000002), CONST64(0x0200008000000002), CONST64(0x0200000002000002), CONST64(0x0200008002000002), + CONST64(0x0200000000020002), CONST64(0x0200008000020002), CONST64(0x0200000002020002), CONST64(0x0200008002020002), + CONST64(0x0200000000000202), CONST64(0x0200008000000202), CONST64(0x0200000002000202), CONST64(0x0200008002000202), + CONST64(0x0200000000020202), CONST64(0x0200008000020202), CONST64(0x0200000002020202), CONST64(0x0200008002020202), + CONST64(0x0002000000000000), CONST64(0x0002008000000000), CONST64(0x0002000002000000), CONST64(0x0002008002000000), + CONST64(0x0002000000020000), CONST64(0x0002008000020000), CONST64(0x0002000002020000), CONST64(0x0002008002020000), + CONST64(0x0002000000000200), CONST64(0x0002008000000200), CONST64(0x0002000002000200), CONST64(0x0002008002000200), + CONST64(0x0002000000020200), CONST64(0x0002008000020200), CONST64(0x0002000002020200), CONST64(0x0002008002020200), + CONST64(0x0002000000000002), CONST64(0x0002008000000002), CONST64(0x0002000002000002), CONST64(0x0002008002000002), + CONST64(0x0002000000020002), CONST64(0x0002008000020002), CONST64(0x0002000002020002), CONST64(0x0002008002020002), + CONST64(0x0002000000000202), CONST64(0x0002008000000202), CONST64(0x0002000002000202), CONST64(0x0002008002000202), + CONST64(0x0002000000020202), CONST64(0x0002008000020202), CONST64(0x0002000002020202), CONST64(0x0002008002020202), + CONST64(0x0202000000000000), CONST64(0x0202008000000000), CONST64(0x0202000002000000), CONST64(0x0202008002000000), + CONST64(0x0202000000020000), CONST64(0x0202008000020000), CONST64(0x0202000002020000), CONST64(0x0202008002020000), + CONST64(0x0202000000000200), CONST64(0x0202008000000200), CONST64(0x0202000002000200), CONST64(0x0202008002000200), + CONST64(0x0202000000020200), CONST64(0x0202008000020200), CONST64(0x0202000002020200), CONST64(0x0202008002020200), + CONST64(0x0202000000000002), CONST64(0x0202008000000002), CONST64(0x0202000002000002), CONST64(0x0202008002000002), + CONST64(0x0202000000020002), CONST64(0x0202008000020002), CONST64(0x0202000002020002), CONST64(0x0202008002020002), + CONST64(0x0202000000000202), CONST64(0x0202008000000202), CONST64(0x0202000002000202), CONST64(0x0202008002000202), + CONST64(0x0202000000020202), CONST64(0x0202008000020202), CONST64(0x0202000002020202), CONST64(0x0202008002020202), + CONST64(0x0000020000000000), CONST64(0x0000028000000000), CONST64(0x0000020002000000), CONST64(0x0000028002000000), + CONST64(0x0000020000020000), CONST64(0x0000028000020000), CONST64(0x0000020002020000), CONST64(0x0000028002020000), + CONST64(0x0000020000000200), CONST64(0x0000028000000200), CONST64(0x0000020002000200), CONST64(0x0000028002000200), + CONST64(0x0000020000020200), CONST64(0x0000028000020200), CONST64(0x0000020002020200), CONST64(0x0000028002020200), + CONST64(0x0000020000000002), CONST64(0x0000028000000002), CONST64(0x0000020002000002), CONST64(0x0000028002000002), + CONST64(0x0000020000020002), CONST64(0x0000028000020002), CONST64(0x0000020002020002), CONST64(0x0000028002020002), + CONST64(0x0000020000000202), CONST64(0x0000028000000202), CONST64(0x0000020002000202), CONST64(0x0000028002000202), + CONST64(0x0000020000020202), CONST64(0x0000028000020202), CONST64(0x0000020002020202), CONST64(0x0000028002020202), + CONST64(0x0200020000000000), CONST64(0x0200028000000000), CONST64(0x0200020002000000), CONST64(0x0200028002000000), + CONST64(0x0200020000020000), CONST64(0x0200028000020000), CONST64(0x0200020002020000), CONST64(0x0200028002020000), + CONST64(0x0200020000000200), CONST64(0x0200028000000200), CONST64(0x0200020002000200), CONST64(0x0200028002000200), + CONST64(0x0200020000020200), CONST64(0x0200028000020200), CONST64(0x0200020002020200), CONST64(0x0200028002020200), + CONST64(0x0200020000000002), CONST64(0x0200028000000002), CONST64(0x0200020002000002), CONST64(0x0200028002000002), + CONST64(0x0200020000020002), CONST64(0x0200028000020002), CONST64(0x0200020002020002), CONST64(0x0200028002020002), + CONST64(0x0200020000000202), CONST64(0x0200028000000202), CONST64(0x0200020002000202), CONST64(0x0200028002000202), + CONST64(0x0200020000020202), CONST64(0x0200028000020202), CONST64(0x0200020002020202), CONST64(0x0200028002020202), + CONST64(0x0002020000000000), CONST64(0x0002028000000000), CONST64(0x0002020002000000), CONST64(0x0002028002000000), + CONST64(0x0002020000020000), CONST64(0x0002028000020000), CONST64(0x0002020002020000), CONST64(0x0002028002020000), + CONST64(0x0002020000000200), CONST64(0x0002028000000200), CONST64(0x0002020002000200), CONST64(0x0002028002000200), + CONST64(0x0002020000020200), CONST64(0x0002028000020200), CONST64(0x0002020002020200), CONST64(0x0002028002020200), + CONST64(0x0002020000000002), CONST64(0x0002028000000002), CONST64(0x0002020002000002), CONST64(0x0002028002000002), + CONST64(0x0002020000020002), CONST64(0x0002028000020002), CONST64(0x0002020002020002), CONST64(0x0002028002020002), + CONST64(0x0002020000000202), CONST64(0x0002028000000202), CONST64(0x0002020002000202), CONST64(0x0002028002000202), + CONST64(0x0002020000020202), CONST64(0x0002028000020202), CONST64(0x0002020002020202), CONST64(0x0002028002020202), + CONST64(0x0202020000000000), CONST64(0x0202028000000000), CONST64(0x0202020002000000), CONST64(0x0202028002000000), + CONST64(0x0202020000020000), CONST64(0x0202028000020000), CONST64(0x0202020002020000), CONST64(0x0202028002020000), + CONST64(0x0202020000000200), CONST64(0x0202028000000200), CONST64(0x0202020002000200), CONST64(0x0202028002000200), + CONST64(0x0202020000020200), CONST64(0x0202028000020200), CONST64(0x0202020002020200), CONST64(0x0202028002020200), + CONST64(0x0202020000000002), CONST64(0x0202028000000002), CONST64(0x0202020002000002), CONST64(0x0202028002000002), + CONST64(0x0202020000020002), CONST64(0x0202028000020002), CONST64(0x0202020002020002), CONST64(0x0202028002020002), + CONST64(0x0202020000000202), CONST64(0x0202028000000202), CONST64(0x0202020002000202), CONST64(0x0202028002000202), CONST64(0x0202020000020202), CONST64(0x0202028000020202), CONST64(0x0202020002020202), CONST64(0x0202028002020202) - }, -{ CONST64(0x0000000000000000), CONST64(0x0000000200000000), CONST64(0x0000000008000000), CONST64(0x0000000208000000), - CONST64(0x0000000000080000), CONST64(0x0000000200080000), CONST64(0x0000000008080000), CONST64(0x0000000208080000), - CONST64(0x0000000000000800), CONST64(0x0000000200000800), CONST64(0x0000000008000800), CONST64(0x0000000208000800), - CONST64(0x0000000000080800), CONST64(0x0000000200080800), CONST64(0x0000000008080800), CONST64(0x0000000208080800), - CONST64(0x0000000000000008), CONST64(0x0000000200000008), CONST64(0x0000000008000008), CONST64(0x0000000208000008), - CONST64(0x0000000000080008), CONST64(0x0000000200080008), CONST64(0x0000000008080008), CONST64(0x0000000208080008), - CONST64(0x0000000000000808), CONST64(0x0000000200000808), CONST64(0x0000000008000808), CONST64(0x0000000208000808), - CONST64(0x0000000000080808), CONST64(0x0000000200080808), CONST64(0x0000000008080808), CONST64(0x0000000208080808), - CONST64(0x0800000000000000), CONST64(0x0800000200000000), CONST64(0x0800000008000000), CONST64(0x0800000208000000), - CONST64(0x0800000000080000), CONST64(0x0800000200080000), CONST64(0x0800000008080000), CONST64(0x0800000208080000), - CONST64(0x0800000000000800), CONST64(0x0800000200000800), CONST64(0x0800000008000800), CONST64(0x0800000208000800), - CONST64(0x0800000000080800), CONST64(0x0800000200080800), CONST64(0x0800000008080800), CONST64(0x0800000208080800), - CONST64(0x0800000000000008), CONST64(0x0800000200000008), CONST64(0x0800000008000008), CONST64(0x0800000208000008), - CONST64(0x0800000000080008), CONST64(0x0800000200080008), CONST64(0x0800000008080008), CONST64(0x0800000208080008), - CONST64(0x0800000000000808), CONST64(0x0800000200000808), CONST64(0x0800000008000808), CONST64(0x0800000208000808), - CONST64(0x0800000000080808), CONST64(0x0800000200080808), CONST64(0x0800000008080808), CONST64(0x0800000208080808), - CONST64(0x0008000000000000), CONST64(0x0008000200000000), CONST64(0x0008000008000000), CONST64(0x0008000208000000), - CONST64(0x0008000000080000), CONST64(0x0008000200080000), CONST64(0x0008000008080000), CONST64(0x0008000208080000), - CONST64(0x0008000000000800), CONST64(0x0008000200000800), CONST64(0x0008000008000800), CONST64(0x0008000208000800), - CONST64(0x0008000000080800), CONST64(0x0008000200080800), CONST64(0x0008000008080800), CONST64(0x0008000208080800), - CONST64(0x0008000000000008), CONST64(0x0008000200000008), CONST64(0x0008000008000008), CONST64(0x0008000208000008), - CONST64(0x0008000000080008), CONST64(0x0008000200080008), CONST64(0x0008000008080008), CONST64(0x0008000208080008), - CONST64(0x0008000000000808), CONST64(0x0008000200000808), CONST64(0x0008000008000808), CONST64(0x0008000208000808), - CONST64(0x0008000000080808), CONST64(0x0008000200080808), CONST64(0x0008000008080808), CONST64(0x0008000208080808), - CONST64(0x0808000000000000), CONST64(0x0808000200000000), CONST64(0x0808000008000000), CONST64(0x0808000208000000), - CONST64(0x0808000000080000), CONST64(0x0808000200080000), CONST64(0x0808000008080000), CONST64(0x0808000208080000), - CONST64(0x0808000000000800), CONST64(0x0808000200000800), CONST64(0x0808000008000800), CONST64(0x0808000208000800), - CONST64(0x0808000000080800), CONST64(0x0808000200080800), CONST64(0x0808000008080800), CONST64(0x0808000208080800), - CONST64(0x0808000000000008), CONST64(0x0808000200000008), CONST64(0x0808000008000008), CONST64(0x0808000208000008), - CONST64(0x0808000000080008), CONST64(0x0808000200080008), CONST64(0x0808000008080008), CONST64(0x0808000208080008), - CONST64(0x0808000000000808), CONST64(0x0808000200000808), CONST64(0x0808000008000808), CONST64(0x0808000208000808), - CONST64(0x0808000000080808), CONST64(0x0808000200080808), CONST64(0x0808000008080808), CONST64(0x0808000208080808), - CONST64(0x0000080000000000), CONST64(0x0000080200000000), CONST64(0x0000080008000000), CONST64(0x0000080208000000), - CONST64(0x0000080000080000), CONST64(0x0000080200080000), CONST64(0x0000080008080000), CONST64(0x0000080208080000), - CONST64(0x0000080000000800), CONST64(0x0000080200000800), CONST64(0x0000080008000800), CONST64(0x0000080208000800), - CONST64(0x0000080000080800), CONST64(0x0000080200080800), CONST64(0x0000080008080800), CONST64(0x0000080208080800), - CONST64(0x0000080000000008), CONST64(0x0000080200000008), CONST64(0x0000080008000008), CONST64(0x0000080208000008), - CONST64(0x0000080000080008), CONST64(0x0000080200080008), CONST64(0x0000080008080008), CONST64(0x0000080208080008), - CONST64(0x0000080000000808), CONST64(0x0000080200000808), CONST64(0x0000080008000808), CONST64(0x0000080208000808), - CONST64(0x0000080000080808), CONST64(0x0000080200080808), CONST64(0x0000080008080808), CONST64(0x0000080208080808), - CONST64(0x0800080000000000), CONST64(0x0800080200000000), CONST64(0x0800080008000000), CONST64(0x0800080208000000), - CONST64(0x0800080000080000), CONST64(0x0800080200080000), CONST64(0x0800080008080000), CONST64(0x0800080208080000), - CONST64(0x0800080000000800), CONST64(0x0800080200000800), CONST64(0x0800080008000800), CONST64(0x0800080208000800), - CONST64(0x0800080000080800), CONST64(0x0800080200080800), CONST64(0x0800080008080800), CONST64(0x0800080208080800), - CONST64(0x0800080000000008), CONST64(0x0800080200000008), CONST64(0x0800080008000008), CONST64(0x0800080208000008), - CONST64(0x0800080000080008), CONST64(0x0800080200080008), CONST64(0x0800080008080008), CONST64(0x0800080208080008), - CONST64(0x0800080000000808), CONST64(0x0800080200000808), CONST64(0x0800080008000808), CONST64(0x0800080208000808), - CONST64(0x0800080000080808), CONST64(0x0800080200080808), CONST64(0x0800080008080808), CONST64(0x0800080208080808), - CONST64(0x0008080000000000), CONST64(0x0008080200000000), CONST64(0x0008080008000000), CONST64(0x0008080208000000), - CONST64(0x0008080000080000), CONST64(0x0008080200080000), CONST64(0x0008080008080000), CONST64(0x0008080208080000), - CONST64(0x0008080000000800), CONST64(0x0008080200000800), CONST64(0x0008080008000800), CONST64(0x0008080208000800), - CONST64(0x0008080000080800), CONST64(0x0008080200080800), CONST64(0x0008080008080800), CONST64(0x0008080208080800), - CONST64(0x0008080000000008), CONST64(0x0008080200000008), CONST64(0x0008080008000008), CONST64(0x0008080208000008), - CONST64(0x0008080000080008), CONST64(0x0008080200080008), CONST64(0x0008080008080008), CONST64(0x0008080208080008), - CONST64(0x0008080000000808), CONST64(0x0008080200000808), CONST64(0x0008080008000808), CONST64(0x0008080208000808), - CONST64(0x0008080000080808), CONST64(0x0008080200080808), CONST64(0x0008080008080808), CONST64(0x0008080208080808), - CONST64(0x0808080000000000), CONST64(0x0808080200000000), CONST64(0x0808080008000000), CONST64(0x0808080208000000), - CONST64(0x0808080000080000), CONST64(0x0808080200080000), CONST64(0x0808080008080000), CONST64(0x0808080208080000), - CONST64(0x0808080000000800), CONST64(0x0808080200000800), CONST64(0x0808080008000800), CONST64(0x0808080208000800), - CONST64(0x0808080000080800), CONST64(0x0808080200080800), CONST64(0x0808080008080800), CONST64(0x0808080208080800), - CONST64(0x0808080000000008), CONST64(0x0808080200000008), CONST64(0x0808080008000008), CONST64(0x0808080208000008), - CONST64(0x0808080000080008), CONST64(0x0808080200080008), CONST64(0x0808080008080008), CONST64(0x0808080208080008), - CONST64(0x0808080000000808), CONST64(0x0808080200000808), CONST64(0x0808080008000808), CONST64(0x0808080208000808), + }, +{ CONST64(0x0000000000000000), CONST64(0x0000000200000000), CONST64(0x0000000008000000), CONST64(0x0000000208000000), + CONST64(0x0000000000080000), CONST64(0x0000000200080000), CONST64(0x0000000008080000), CONST64(0x0000000208080000), + CONST64(0x0000000000000800), CONST64(0x0000000200000800), CONST64(0x0000000008000800), CONST64(0x0000000208000800), + CONST64(0x0000000000080800), CONST64(0x0000000200080800), CONST64(0x0000000008080800), CONST64(0x0000000208080800), + CONST64(0x0000000000000008), CONST64(0x0000000200000008), CONST64(0x0000000008000008), CONST64(0x0000000208000008), + CONST64(0x0000000000080008), CONST64(0x0000000200080008), CONST64(0x0000000008080008), CONST64(0x0000000208080008), + CONST64(0x0000000000000808), CONST64(0x0000000200000808), CONST64(0x0000000008000808), CONST64(0x0000000208000808), + CONST64(0x0000000000080808), CONST64(0x0000000200080808), CONST64(0x0000000008080808), CONST64(0x0000000208080808), + CONST64(0x0800000000000000), CONST64(0x0800000200000000), CONST64(0x0800000008000000), CONST64(0x0800000208000000), + CONST64(0x0800000000080000), CONST64(0x0800000200080000), CONST64(0x0800000008080000), CONST64(0x0800000208080000), + CONST64(0x0800000000000800), CONST64(0x0800000200000800), CONST64(0x0800000008000800), CONST64(0x0800000208000800), + CONST64(0x0800000000080800), CONST64(0x0800000200080800), CONST64(0x0800000008080800), CONST64(0x0800000208080800), + CONST64(0x0800000000000008), CONST64(0x0800000200000008), CONST64(0x0800000008000008), CONST64(0x0800000208000008), + CONST64(0x0800000000080008), CONST64(0x0800000200080008), CONST64(0x0800000008080008), CONST64(0x0800000208080008), + CONST64(0x0800000000000808), CONST64(0x0800000200000808), CONST64(0x0800000008000808), CONST64(0x0800000208000808), + CONST64(0x0800000000080808), CONST64(0x0800000200080808), CONST64(0x0800000008080808), CONST64(0x0800000208080808), + CONST64(0x0008000000000000), CONST64(0x0008000200000000), CONST64(0x0008000008000000), CONST64(0x0008000208000000), + CONST64(0x0008000000080000), CONST64(0x0008000200080000), CONST64(0x0008000008080000), CONST64(0x0008000208080000), + CONST64(0x0008000000000800), CONST64(0x0008000200000800), CONST64(0x0008000008000800), CONST64(0x0008000208000800), + CONST64(0x0008000000080800), CONST64(0x0008000200080800), CONST64(0x0008000008080800), CONST64(0x0008000208080800), + CONST64(0x0008000000000008), CONST64(0x0008000200000008), CONST64(0x0008000008000008), CONST64(0x0008000208000008), + CONST64(0x0008000000080008), CONST64(0x0008000200080008), CONST64(0x0008000008080008), CONST64(0x0008000208080008), + CONST64(0x0008000000000808), CONST64(0x0008000200000808), CONST64(0x0008000008000808), CONST64(0x0008000208000808), + CONST64(0x0008000000080808), CONST64(0x0008000200080808), CONST64(0x0008000008080808), CONST64(0x0008000208080808), + CONST64(0x0808000000000000), CONST64(0x0808000200000000), CONST64(0x0808000008000000), CONST64(0x0808000208000000), + CONST64(0x0808000000080000), CONST64(0x0808000200080000), CONST64(0x0808000008080000), CONST64(0x0808000208080000), + CONST64(0x0808000000000800), CONST64(0x0808000200000800), CONST64(0x0808000008000800), CONST64(0x0808000208000800), + CONST64(0x0808000000080800), CONST64(0x0808000200080800), CONST64(0x0808000008080800), CONST64(0x0808000208080800), + CONST64(0x0808000000000008), CONST64(0x0808000200000008), CONST64(0x0808000008000008), CONST64(0x0808000208000008), + CONST64(0x0808000000080008), CONST64(0x0808000200080008), CONST64(0x0808000008080008), CONST64(0x0808000208080008), + CONST64(0x0808000000000808), CONST64(0x0808000200000808), CONST64(0x0808000008000808), CONST64(0x0808000208000808), + CONST64(0x0808000000080808), CONST64(0x0808000200080808), CONST64(0x0808000008080808), CONST64(0x0808000208080808), + CONST64(0x0000080000000000), CONST64(0x0000080200000000), CONST64(0x0000080008000000), CONST64(0x0000080208000000), + CONST64(0x0000080000080000), CONST64(0x0000080200080000), CONST64(0x0000080008080000), CONST64(0x0000080208080000), + CONST64(0x0000080000000800), CONST64(0x0000080200000800), CONST64(0x0000080008000800), CONST64(0x0000080208000800), + CONST64(0x0000080000080800), CONST64(0x0000080200080800), CONST64(0x0000080008080800), CONST64(0x0000080208080800), + CONST64(0x0000080000000008), CONST64(0x0000080200000008), CONST64(0x0000080008000008), CONST64(0x0000080208000008), + CONST64(0x0000080000080008), CONST64(0x0000080200080008), CONST64(0x0000080008080008), CONST64(0x0000080208080008), + CONST64(0x0000080000000808), CONST64(0x0000080200000808), CONST64(0x0000080008000808), CONST64(0x0000080208000808), + CONST64(0x0000080000080808), CONST64(0x0000080200080808), CONST64(0x0000080008080808), CONST64(0x0000080208080808), + CONST64(0x0800080000000000), CONST64(0x0800080200000000), CONST64(0x0800080008000000), CONST64(0x0800080208000000), + CONST64(0x0800080000080000), CONST64(0x0800080200080000), CONST64(0x0800080008080000), CONST64(0x0800080208080000), + CONST64(0x0800080000000800), CONST64(0x0800080200000800), CONST64(0x0800080008000800), CONST64(0x0800080208000800), + CONST64(0x0800080000080800), CONST64(0x0800080200080800), CONST64(0x0800080008080800), CONST64(0x0800080208080800), + CONST64(0x0800080000000008), CONST64(0x0800080200000008), CONST64(0x0800080008000008), CONST64(0x0800080208000008), + CONST64(0x0800080000080008), CONST64(0x0800080200080008), CONST64(0x0800080008080008), CONST64(0x0800080208080008), + CONST64(0x0800080000000808), CONST64(0x0800080200000808), CONST64(0x0800080008000808), CONST64(0x0800080208000808), + CONST64(0x0800080000080808), CONST64(0x0800080200080808), CONST64(0x0800080008080808), CONST64(0x0800080208080808), + CONST64(0x0008080000000000), CONST64(0x0008080200000000), CONST64(0x0008080008000000), CONST64(0x0008080208000000), + CONST64(0x0008080000080000), CONST64(0x0008080200080000), CONST64(0x0008080008080000), CONST64(0x0008080208080000), + CONST64(0x0008080000000800), CONST64(0x0008080200000800), CONST64(0x0008080008000800), CONST64(0x0008080208000800), + CONST64(0x0008080000080800), CONST64(0x0008080200080800), CONST64(0x0008080008080800), CONST64(0x0008080208080800), + CONST64(0x0008080000000008), CONST64(0x0008080200000008), CONST64(0x0008080008000008), CONST64(0x0008080208000008), + CONST64(0x0008080000080008), CONST64(0x0008080200080008), CONST64(0x0008080008080008), CONST64(0x0008080208080008), + CONST64(0x0008080000000808), CONST64(0x0008080200000808), CONST64(0x0008080008000808), CONST64(0x0008080208000808), + CONST64(0x0008080000080808), CONST64(0x0008080200080808), CONST64(0x0008080008080808), CONST64(0x0008080208080808), + CONST64(0x0808080000000000), CONST64(0x0808080200000000), CONST64(0x0808080008000000), CONST64(0x0808080208000000), + CONST64(0x0808080000080000), CONST64(0x0808080200080000), CONST64(0x0808080008080000), CONST64(0x0808080208080000), + CONST64(0x0808080000000800), CONST64(0x0808080200000800), CONST64(0x0808080008000800), CONST64(0x0808080208000800), + CONST64(0x0808080000080800), CONST64(0x0808080200080800), CONST64(0x0808080008080800), CONST64(0x0808080208080800), + CONST64(0x0808080000000008), CONST64(0x0808080200000008), CONST64(0x0808080008000008), CONST64(0x0808080208000008), + CONST64(0x0808080000080008), CONST64(0x0808080200080008), CONST64(0x0808080008080008), CONST64(0x0808080208080008), + CONST64(0x0808080000000808), CONST64(0x0808080200000808), CONST64(0x0808080008000808), CONST64(0x0808080208000808), CONST64(0x0808080000080808), CONST64(0x0808080200080808), CONST64(0x0808080008080808), CONST64(0x0808080208080808) - }, -{ CONST64(0x0000000000000000), CONST64(0x0000000800000000), CONST64(0x0000000020000000), CONST64(0x0000000820000000), - CONST64(0x0000000000200000), CONST64(0x0000000800200000), CONST64(0x0000000020200000), CONST64(0x0000000820200000), - CONST64(0x0000000000002000), CONST64(0x0000000800002000), CONST64(0x0000000020002000), CONST64(0x0000000820002000), - CONST64(0x0000000000202000), CONST64(0x0000000800202000), CONST64(0x0000000020202000), CONST64(0x0000000820202000), - CONST64(0x0000000000000020), CONST64(0x0000000800000020), CONST64(0x0000000020000020), CONST64(0x0000000820000020), - CONST64(0x0000000000200020), CONST64(0x0000000800200020), CONST64(0x0000000020200020), CONST64(0x0000000820200020), - CONST64(0x0000000000002020), CONST64(0x0000000800002020), CONST64(0x0000000020002020), CONST64(0x0000000820002020), - CONST64(0x0000000000202020), CONST64(0x0000000800202020), CONST64(0x0000000020202020), CONST64(0x0000000820202020), - CONST64(0x2000000000000000), CONST64(0x2000000800000000), CONST64(0x2000000020000000), CONST64(0x2000000820000000), - CONST64(0x2000000000200000), CONST64(0x2000000800200000), CONST64(0x2000000020200000), CONST64(0x2000000820200000), - CONST64(0x2000000000002000), CONST64(0x2000000800002000), CONST64(0x2000000020002000), CONST64(0x2000000820002000), - CONST64(0x2000000000202000), CONST64(0x2000000800202000), CONST64(0x2000000020202000), CONST64(0x2000000820202000), - CONST64(0x2000000000000020), CONST64(0x2000000800000020), CONST64(0x2000000020000020), CONST64(0x2000000820000020), - CONST64(0x2000000000200020), CONST64(0x2000000800200020), CONST64(0x2000000020200020), CONST64(0x2000000820200020), - CONST64(0x2000000000002020), CONST64(0x2000000800002020), CONST64(0x2000000020002020), CONST64(0x2000000820002020), - CONST64(0x2000000000202020), CONST64(0x2000000800202020), CONST64(0x2000000020202020), CONST64(0x2000000820202020), - CONST64(0x0020000000000000), CONST64(0x0020000800000000), CONST64(0x0020000020000000), CONST64(0x0020000820000000), - CONST64(0x0020000000200000), CONST64(0x0020000800200000), CONST64(0x0020000020200000), CONST64(0x0020000820200000), - CONST64(0x0020000000002000), CONST64(0x0020000800002000), CONST64(0x0020000020002000), CONST64(0x0020000820002000), - CONST64(0x0020000000202000), CONST64(0x0020000800202000), CONST64(0x0020000020202000), CONST64(0x0020000820202000), - CONST64(0x0020000000000020), CONST64(0x0020000800000020), CONST64(0x0020000020000020), CONST64(0x0020000820000020), - CONST64(0x0020000000200020), CONST64(0x0020000800200020), CONST64(0x0020000020200020), CONST64(0x0020000820200020), - CONST64(0x0020000000002020), CONST64(0x0020000800002020), CONST64(0x0020000020002020), CONST64(0x0020000820002020), - CONST64(0x0020000000202020), CONST64(0x0020000800202020), CONST64(0x0020000020202020), CONST64(0x0020000820202020), - CONST64(0x2020000000000000), CONST64(0x2020000800000000), CONST64(0x2020000020000000), CONST64(0x2020000820000000), - CONST64(0x2020000000200000), CONST64(0x2020000800200000), CONST64(0x2020000020200000), CONST64(0x2020000820200000), - CONST64(0x2020000000002000), CONST64(0x2020000800002000), CONST64(0x2020000020002000), CONST64(0x2020000820002000), - CONST64(0x2020000000202000), CONST64(0x2020000800202000), CONST64(0x2020000020202000), CONST64(0x2020000820202000), - CONST64(0x2020000000000020), CONST64(0x2020000800000020), CONST64(0x2020000020000020), CONST64(0x2020000820000020), - CONST64(0x2020000000200020), CONST64(0x2020000800200020), CONST64(0x2020000020200020), CONST64(0x2020000820200020), - CONST64(0x2020000000002020), CONST64(0x2020000800002020), CONST64(0x2020000020002020), CONST64(0x2020000820002020), - CONST64(0x2020000000202020), CONST64(0x2020000800202020), CONST64(0x2020000020202020), CONST64(0x2020000820202020), - CONST64(0x0000200000000000), CONST64(0x0000200800000000), CONST64(0x0000200020000000), CONST64(0x0000200820000000), - CONST64(0x0000200000200000), CONST64(0x0000200800200000), CONST64(0x0000200020200000), CONST64(0x0000200820200000), - CONST64(0x0000200000002000), CONST64(0x0000200800002000), CONST64(0x0000200020002000), CONST64(0x0000200820002000), - CONST64(0x0000200000202000), CONST64(0x0000200800202000), CONST64(0x0000200020202000), CONST64(0x0000200820202000), - CONST64(0x0000200000000020), CONST64(0x0000200800000020), CONST64(0x0000200020000020), CONST64(0x0000200820000020), - CONST64(0x0000200000200020), CONST64(0x0000200800200020), CONST64(0x0000200020200020), CONST64(0x0000200820200020), - CONST64(0x0000200000002020), CONST64(0x0000200800002020), CONST64(0x0000200020002020), CONST64(0x0000200820002020), - CONST64(0x0000200000202020), CONST64(0x0000200800202020), CONST64(0x0000200020202020), CONST64(0x0000200820202020), - CONST64(0x2000200000000000), CONST64(0x2000200800000000), CONST64(0x2000200020000000), CONST64(0x2000200820000000), - CONST64(0x2000200000200000), CONST64(0x2000200800200000), CONST64(0x2000200020200000), CONST64(0x2000200820200000), - CONST64(0x2000200000002000), CONST64(0x2000200800002000), CONST64(0x2000200020002000), CONST64(0x2000200820002000), - CONST64(0x2000200000202000), CONST64(0x2000200800202000), CONST64(0x2000200020202000), CONST64(0x2000200820202000), - CONST64(0x2000200000000020), CONST64(0x2000200800000020), CONST64(0x2000200020000020), CONST64(0x2000200820000020), - CONST64(0x2000200000200020), CONST64(0x2000200800200020), CONST64(0x2000200020200020), CONST64(0x2000200820200020), - CONST64(0x2000200000002020), CONST64(0x2000200800002020), CONST64(0x2000200020002020), CONST64(0x2000200820002020), - CONST64(0x2000200000202020), CONST64(0x2000200800202020), CONST64(0x2000200020202020), CONST64(0x2000200820202020), - CONST64(0x0020200000000000), CONST64(0x0020200800000000), CONST64(0x0020200020000000), CONST64(0x0020200820000000), - CONST64(0x0020200000200000), CONST64(0x0020200800200000), CONST64(0x0020200020200000), CONST64(0x0020200820200000), - CONST64(0x0020200000002000), CONST64(0x0020200800002000), CONST64(0x0020200020002000), CONST64(0x0020200820002000), - CONST64(0x0020200000202000), CONST64(0x0020200800202000), CONST64(0x0020200020202000), CONST64(0x0020200820202000), - CONST64(0x0020200000000020), CONST64(0x0020200800000020), CONST64(0x0020200020000020), CONST64(0x0020200820000020), - CONST64(0x0020200000200020), CONST64(0x0020200800200020), CONST64(0x0020200020200020), CONST64(0x0020200820200020), - CONST64(0x0020200000002020), CONST64(0x0020200800002020), CONST64(0x0020200020002020), CONST64(0x0020200820002020), - CONST64(0x0020200000202020), CONST64(0x0020200800202020), CONST64(0x0020200020202020), CONST64(0x0020200820202020), - CONST64(0x2020200000000000), CONST64(0x2020200800000000), CONST64(0x2020200020000000), CONST64(0x2020200820000000), - CONST64(0x2020200000200000), CONST64(0x2020200800200000), CONST64(0x2020200020200000), CONST64(0x2020200820200000), - CONST64(0x2020200000002000), CONST64(0x2020200800002000), CONST64(0x2020200020002000), CONST64(0x2020200820002000), - CONST64(0x2020200000202000), CONST64(0x2020200800202000), CONST64(0x2020200020202000), CONST64(0x2020200820202000), - CONST64(0x2020200000000020), CONST64(0x2020200800000020), CONST64(0x2020200020000020), CONST64(0x2020200820000020), - CONST64(0x2020200000200020), CONST64(0x2020200800200020), CONST64(0x2020200020200020), CONST64(0x2020200820200020), - CONST64(0x2020200000002020), CONST64(0x2020200800002020), CONST64(0x2020200020002020), CONST64(0x2020200820002020), + }, +{ CONST64(0x0000000000000000), CONST64(0x0000000800000000), CONST64(0x0000000020000000), CONST64(0x0000000820000000), + CONST64(0x0000000000200000), CONST64(0x0000000800200000), CONST64(0x0000000020200000), CONST64(0x0000000820200000), + CONST64(0x0000000000002000), CONST64(0x0000000800002000), CONST64(0x0000000020002000), CONST64(0x0000000820002000), + CONST64(0x0000000000202000), CONST64(0x0000000800202000), CONST64(0x0000000020202000), CONST64(0x0000000820202000), + CONST64(0x0000000000000020), CONST64(0x0000000800000020), CONST64(0x0000000020000020), CONST64(0x0000000820000020), + CONST64(0x0000000000200020), CONST64(0x0000000800200020), CONST64(0x0000000020200020), CONST64(0x0000000820200020), + CONST64(0x0000000000002020), CONST64(0x0000000800002020), CONST64(0x0000000020002020), CONST64(0x0000000820002020), + CONST64(0x0000000000202020), CONST64(0x0000000800202020), CONST64(0x0000000020202020), CONST64(0x0000000820202020), + CONST64(0x2000000000000000), CONST64(0x2000000800000000), CONST64(0x2000000020000000), CONST64(0x2000000820000000), + CONST64(0x2000000000200000), CONST64(0x2000000800200000), CONST64(0x2000000020200000), CONST64(0x2000000820200000), + CONST64(0x2000000000002000), CONST64(0x2000000800002000), CONST64(0x2000000020002000), CONST64(0x2000000820002000), + CONST64(0x2000000000202000), CONST64(0x2000000800202000), CONST64(0x2000000020202000), CONST64(0x2000000820202000), + CONST64(0x2000000000000020), CONST64(0x2000000800000020), CONST64(0x2000000020000020), CONST64(0x2000000820000020), + CONST64(0x2000000000200020), CONST64(0x2000000800200020), CONST64(0x2000000020200020), CONST64(0x2000000820200020), + CONST64(0x2000000000002020), CONST64(0x2000000800002020), CONST64(0x2000000020002020), CONST64(0x2000000820002020), + CONST64(0x2000000000202020), CONST64(0x2000000800202020), CONST64(0x2000000020202020), CONST64(0x2000000820202020), + CONST64(0x0020000000000000), CONST64(0x0020000800000000), CONST64(0x0020000020000000), CONST64(0x0020000820000000), + CONST64(0x0020000000200000), CONST64(0x0020000800200000), CONST64(0x0020000020200000), CONST64(0x0020000820200000), + CONST64(0x0020000000002000), CONST64(0x0020000800002000), CONST64(0x0020000020002000), CONST64(0x0020000820002000), + CONST64(0x0020000000202000), CONST64(0x0020000800202000), CONST64(0x0020000020202000), CONST64(0x0020000820202000), + CONST64(0x0020000000000020), CONST64(0x0020000800000020), CONST64(0x0020000020000020), CONST64(0x0020000820000020), + CONST64(0x0020000000200020), CONST64(0x0020000800200020), CONST64(0x0020000020200020), CONST64(0x0020000820200020), + CONST64(0x0020000000002020), CONST64(0x0020000800002020), CONST64(0x0020000020002020), CONST64(0x0020000820002020), + CONST64(0x0020000000202020), CONST64(0x0020000800202020), CONST64(0x0020000020202020), CONST64(0x0020000820202020), + CONST64(0x2020000000000000), CONST64(0x2020000800000000), CONST64(0x2020000020000000), CONST64(0x2020000820000000), + CONST64(0x2020000000200000), CONST64(0x2020000800200000), CONST64(0x2020000020200000), CONST64(0x2020000820200000), + CONST64(0x2020000000002000), CONST64(0x2020000800002000), CONST64(0x2020000020002000), CONST64(0x2020000820002000), + CONST64(0x2020000000202000), CONST64(0x2020000800202000), CONST64(0x2020000020202000), CONST64(0x2020000820202000), + CONST64(0x2020000000000020), CONST64(0x2020000800000020), CONST64(0x2020000020000020), CONST64(0x2020000820000020), + CONST64(0x2020000000200020), CONST64(0x2020000800200020), CONST64(0x2020000020200020), CONST64(0x2020000820200020), + CONST64(0x2020000000002020), CONST64(0x2020000800002020), CONST64(0x2020000020002020), CONST64(0x2020000820002020), + CONST64(0x2020000000202020), CONST64(0x2020000800202020), CONST64(0x2020000020202020), CONST64(0x2020000820202020), + CONST64(0x0000200000000000), CONST64(0x0000200800000000), CONST64(0x0000200020000000), CONST64(0x0000200820000000), + CONST64(0x0000200000200000), CONST64(0x0000200800200000), CONST64(0x0000200020200000), CONST64(0x0000200820200000), + CONST64(0x0000200000002000), CONST64(0x0000200800002000), CONST64(0x0000200020002000), CONST64(0x0000200820002000), + CONST64(0x0000200000202000), CONST64(0x0000200800202000), CONST64(0x0000200020202000), CONST64(0x0000200820202000), + CONST64(0x0000200000000020), CONST64(0x0000200800000020), CONST64(0x0000200020000020), CONST64(0x0000200820000020), + CONST64(0x0000200000200020), CONST64(0x0000200800200020), CONST64(0x0000200020200020), CONST64(0x0000200820200020), + CONST64(0x0000200000002020), CONST64(0x0000200800002020), CONST64(0x0000200020002020), CONST64(0x0000200820002020), + CONST64(0x0000200000202020), CONST64(0x0000200800202020), CONST64(0x0000200020202020), CONST64(0x0000200820202020), + CONST64(0x2000200000000000), CONST64(0x2000200800000000), CONST64(0x2000200020000000), CONST64(0x2000200820000000), + CONST64(0x2000200000200000), CONST64(0x2000200800200000), CONST64(0x2000200020200000), CONST64(0x2000200820200000), + CONST64(0x2000200000002000), CONST64(0x2000200800002000), CONST64(0x2000200020002000), CONST64(0x2000200820002000), + CONST64(0x2000200000202000), CONST64(0x2000200800202000), CONST64(0x2000200020202000), CONST64(0x2000200820202000), + CONST64(0x2000200000000020), CONST64(0x2000200800000020), CONST64(0x2000200020000020), CONST64(0x2000200820000020), + CONST64(0x2000200000200020), CONST64(0x2000200800200020), CONST64(0x2000200020200020), CONST64(0x2000200820200020), + CONST64(0x2000200000002020), CONST64(0x2000200800002020), CONST64(0x2000200020002020), CONST64(0x2000200820002020), + CONST64(0x2000200000202020), CONST64(0x2000200800202020), CONST64(0x2000200020202020), CONST64(0x2000200820202020), + CONST64(0x0020200000000000), CONST64(0x0020200800000000), CONST64(0x0020200020000000), CONST64(0x0020200820000000), + CONST64(0x0020200000200000), CONST64(0x0020200800200000), CONST64(0x0020200020200000), CONST64(0x0020200820200000), + CONST64(0x0020200000002000), CONST64(0x0020200800002000), CONST64(0x0020200020002000), CONST64(0x0020200820002000), + CONST64(0x0020200000202000), CONST64(0x0020200800202000), CONST64(0x0020200020202000), CONST64(0x0020200820202000), + CONST64(0x0020200000000020), CONST64(0x0020200800000020), CONST64(0x0020200020000020), CONST64(0x0020200820000020), + CONST64(0x0020200000200020), CONST64(0x0020200800200020), CONST64(0x0020200020200020), CONST64(0x0020200820200020), + CONST64(0x0020200000002020), CONST64(0x0020200800002020), CONST64(0x0020200020002020), CONST64(0x0020200820002020), + CONST64(0x0020200000202020), CONST64(0x0020200800202020), CONST64(0x0020200020202020), CONST64(0x0020200820202020), + CONST64(0x2020200000000000), CONST64(0x2020200800000000), CONST64(0x2020200020000000), CONST64(0x2020200820000000), + CONST64(0x2020200000200000), CONST64(0x2020200800200000), CONST64(0x2020200020200000), CONST64(0x2020200820200000), + CONST64(0x2020200000002000), CONST64(0x2020200800002000), CONST64(0x2020200020002000), CONST64(0x2020200820002000), + CONST64(0x2020200000202000), CONST64(0x2020200800202000), CONST64(0x2020200020202000), CONST64(0x2020200820202000), + CONST64(0x2020200000000020), CONST64(0x2020200800000020), CONST64(0x2020200020000020), CONST64(0x2020200820000020), + CONST64(0x2020200000200020), CONST64(0x2020200800200020), CONST64(0x2020200020200020), CONST64(0x2020200820200020), + CONST64(0x2020200000002020), CONST64(0x2020200800002020), CONST64(0x2020200020002020), CONST64(0x2020200820002020), CONST64(0x2020200000202020), CONST64(0x2020200800202020), CONST64(0x2020200020202020), CONST64(0x2020200820202020) - }, -{ CONST64(0x0000000000000000), CONST64(0x0000002000000000), CONST64(0x0000000080000000), CONST64(0x0000002080000000), - CONST64(0x0000000000800000), CONST64(0x0000002000800000), CONST64(0x0000000080800000), CONST64(0x0000002080800000), - CONST64(0x0000000000008000), CONST64(0x0000002000008000), CONST64(0x0000000080008000), CONST64(0x0000002080008000), - CONST64(0x0000000000808000), CONST64(0x0000002000808000), CONST64(0x0000000080808000), CONST64(0x0000002080808000), - CONST64(0x0000000000000080), CONST64(0x0000002000000080), CONST64(0x0000000080000080), CONST64(0x0000002080000080), - CONST64(0x0000000000800080), CONST64(0x0000002000800080), CONST64(0x0000000080800080), CONST64(0x0000002080800080), - CONST64(0x0000000000008080), CONST64(0x0000002000008080), CONST64(0x0000000080008080), CONST64(0x0000002080008080), - CONST64(0x0000000000808080), CONST64(0x0000002000808080), CONST64(0x0000000080808080), CONST64(0x0000002080808080), - CONST64(0x8000000000000000), CONST64(0x8000002000000000), CONST64(0x8000000080000000), CONST64(0x8000002080000000), - CONST64(0x8000000000800000), CONST64(0x8000002000800000), CONST64(0x8000000080800000), CONST64(0x8000002080800000), - CONST64(0x8000000000008000), CONST64(0x8000002000008000), CONST64(0x8000000080008000), CONST64(0x8000002080008000), - CONST64(0x8000000000808000), CONST64(0x8000002000808000), CONST64(0x8000000080808000), CONST64(0x8000002080808000), - CONST64(0x8000000000000080), CONST64(0x8000002000000080), CONST64(0x8000000080000080), CONST64(0x8000002080000080), - CONST64(0x8000000000800080), CONST64(0x8000002000800080), CONST64(0x8000000080800080), CONST64(0x8000002080800080), - CONST64(0x8000000000008080), CONST64(0x8000002000008080), CONST64(0x8000000080008080), CONST64(0x8000002080008080), - CONST64(0x8000000000808080), CONST64(0x8000002000808080), CONST64(0x8000000080808080), CONST64(0x8000002080808080), - CONST64(0x0080000000000000), CONST64(0x0080002000000000), CONST64(0x0080000080000000), CONST64(0x0080002080000000), - CONST64(0x0080000000800000), CONST64(0x0080002000800000), CONST64(0x0080000080800000), CONST64(0x0080002080800000), - CONST64(0x0080000000008000), CONST64(0x0080002000008000), CONST64(0x0080000080008000), CONST64(0x0080002080008000), - CONST64(0x0080000000808000), CONST64(0x0080002000808000), CONST64(0x0080000080808000), CONST64(0x0080002080808000), - CONST64(0x0080000000000080), CONST64(0x0080002000000080), CONST64(0x0080000080000080), CONST64(0x0080002080000080), - CONST64(0x0080000000800080), CONST64(0x0080002000800080), CONST64(0x0080000080800080), CONST64(0x0080002080800080), - CONST64(0x0080000000008080), CONST64(0x0080002000008080), CONST64(0x0080000080008080), CONST64(0x0080002080008080), - CONST64(0x0080000000808080), CONST64(0x0080002000808080), CONST64(0x0080000080808080), CONST64(0x0080002080808080), - CONST64(0x8080000000000000), CONST64(0x8080002000000000), CONST64(0x8080000080000000), CONST64(0x8080002080000000), - CONST64(0x8080000000800000), CONST64(0x8080002000800000), CONST64(0x8080000080800000), CONST64(0x8080002080800000), - CONST64(0x8080000000008000), CONST64(0x8080002000008000), CONST64(0x8080000080008000), CONST64(0x8080002080008000), - CONST64(0x8080000000808000), CONST64(0x8080002000808000), CONST64(0x8080000080808000), CONST64(0x8080002080808000), - CONST64(0x8080000000000080), CONST64(0x8080002000000080), CONST64(0x8080000080000080), CONST64(0x8080002080000080), - CONST64(0x8080000000800080), CONST64(0x8080002000800080), CONST64(0x8080000080800080), CONST64(0x8080002080800080), - CONST64(0x8080000000008080), CONST64(0x8080002000008080), CONST64(0x8080000080008080), CONST64(0x8080002080008080), - CONST64(0x8080000000808080), CONST64(0x8080002000808080), CONST64(0x8080000080808080), CONST64(0x8080002080808080), - CONST64(0x0000800000000000), CONST64(0x0000802000000000), CONST64(0x0000800080000000), CONST64(0x0000802080000000), - CONST64(0x0000800000800000), CONST64(0x0000802000800000), CONST64(0x0000800080800000), CONST64(0x0000802080800000), - CONST64(0x0000800000008000), CONST64(0x0000802000008000), CONST64(0x0000800080008000), CONST64(0x0000802080008000), - CONST64(0x0000800000808000), CONST64(0x0000802000808000), CONST64(0x0000800080808000), CONST64(0x0000802080808000), - CONST64(0x0000800000000080), CONST64(0x0000802000000080), CONST64(0x0000800080000080), CONST64(0x0000802080000080), - CONST64(0x0000800000800080), CONST64(0x0000802000800080), CONST64(0x0000800080800080), CONST64(0x0000802080800080), - CONST64(0x0000800000008080), CONST64(0x0000802000008080), CONST64(0x0000800080008080), CONST64(0x0000802080008080), - CONST64(0x0000800000808080), CONST64(0x0000802000808080), CONST64(0x0000800080808080), CONST64(0x0000802080808080), - CONST64(0x8000800000000000), CONST64(0x8000802000000000), CONST64(0x8000800080000000), CONST64(0x8000802080000000), - CONST64(0x8000800000800000), CONST64(0x8000802000800000), CONST64(0x8000800080800000), CONST64(0x8000802080800000), - CONST64(0x8000800000008000), CONST64(0x8000802000008000), CONST64(0x8000800080008000), CONST64(0x8000802080008000), - CONST64(0x8000800000808000), CONST64(0x8000802000808000), CONST64(0x8000800080808000), CONST64(0x8000802080808000), - CONST64(0x8000800000000080), CONST64(0x8000802000000080), CONST64(0x8000800080000080), CONST64(0x8000802080000080), - CONST64(0x8000800000800080), CONST64(0x8000802000800080), CONST64(0x8000800080800080), CONST64(0x8000802080800080), - CONST64(0x8000800000008080), CONST64(0x8000802000008080), CONST64(0x8000800080008080), CONST64(0x8000802080008080), - CONST64(0x8000800000808080), CONST64(0x8000802000808080), CONST64(0x8000800080808080), CONST64(0x8000802080808080), - CONST64(0x0080800000000000), CONST64(0x0080802000000000), CONST64(0x0080800080000000), CONST64(0x0080802080000000), - CONST64(0x0080800000800000), CONST64(0x0080802000800000), CONST64(0x0080800080800000), CONST64(0x0080802080800000), - CONST64(0x0080800000008000), CONST64(0x0080802000008000), CONST64(0x0080800080008000), CONST64(0x0080802080008000), - CONST64(0x0080800000808000), CONST64(0x0080802000808000), CONST64(0x0080800080808000), CONST64(0x0080802080808000), - CONST64(0x0080800000000080), CONST64(0x0080802000000080), CONST64(0x0080800080000080), CONST64(0x0080802080000080), - CONST64(0x0080800000800080), CONST64(0x0080802000800080), CONST64(0x0080800080800080), CONST64(0x0080802080800080), - CONST64(0x0080800000008080), CONST64(0x0080802000008080), CONST64(0x0080800080008080), CONST64(0x0080802080008080), - CONST64(0x0080800000808080), CONST64(0x0080802000808080), CONST64(0x0080800080808080), CONST64(0x0080802080808080), - CONST64(0x8080800000000000), CONST64(0x8080802000000000), CONST64(0x8080800080000000), CONST64(0x8080802080000000), - CONST64(0x8080800000800000), CONST64(0x8080802000800000), CONST64(0x8080800080800000), CONST64(0x8080802080800000), - CONST64(0x8080800000008000), CONST64(0x8080802000008000), CONST64(0x8080800080008000), CONST64(0x8080802080008000), - CONST64(0x8080800000808000), CONST64(0x8080802000808000), CONST64(0x8080800080808000), CONST64(0x8080802080808000), - CONST64(0x8080800000000080), CONST64(0x8080802000000080), CONST64(0x8080800080000080), CONST64(0x8080802080000080), - CONST64(0x8080800000800080), CONST64(0x8080802000800080), CONST64(0x8080800080800080), CONST64(0x8080802080800080), - CONST64(0x8080800000008080), CONST64(0x8080802000008080), CONST64(0x8080800080008080), CONST64(0x8080802080008080), + }, +{ CONST64(0x0000000000000000), CONST64(0x0000002000000000), CONST64(0x0000000080000000), CONST64(0x0000002080000000), + CONST64(0x0000000000800000), CONST64(0x0000002000800000), CONST64(0x0000000080800000), CONST64(0x0000002080800000), + CONST64(0x0000000000008000), CONST64(0x0000002000008000), CONST64(0x0000000080008000), CONST64(0x0000002080008000), + CONST64(0x0000000000808000), CONST64(0x0000002000808000), CONST64(0x0000000080808000), CONST64(0x0000002080808000), + CONST64(0x0000000000000080), CONST64(0x0000002000000080), CONST64(0x0000000080000080), CONST64(0x0000002080000080), + CONST64(0x0000000000800080), CONST64(0x0000002000800080), CONST64(0x0000000080800080), CONST64(0x0000002080800080), + CONST64(0x0000000000008080), CONST64(0x0000002000008080), CONST64(0x0000000080008080), CONST64(0x0000002080008080), + CONST64(0x0000000000808080), CONST64(0x0000002000808080), CONST64(0x0000000080808080), CONST64(0x0000002080808080), + CONST64(0x8000000000000000), CONST64(0x8000002000000000), CONST64(0x8000000080000000), CONST64(0x8000002080000000), + CONST64(0x8000000000800000), CONST64(0x8000002000800000), CONST64(0x8000000080800000), CONST64(0x8000002080800000), + CONST64(0x8000000000008000), CONST64(0x8000002000008000), CONST64(0x8000000080008000), CONST64(0x8000002080008000), + CONST64(0x8000000000808000), CONST64(0x8000002000808000), CONST64(0x8000000080808000), CONST64(0x8000002080808000), + CONST64(0x8000000000000080), CONST64(0x8000002000000080), CONST64(0x8000000080000080), CONST64(0x8000002080000080), + CONST64(0x8000000000800080), CONST64(0x8000002000800080), CONST64(0x8000000080800080), CONST64(0x8000002080800080), + CONST64(0x8000000000008080), CONST64(0x8000002000008080), CONST64(0x8000000080008080), CONST64(0x8000002080008080), + CONST64(0x8000000000808080), CONST64(0x8000002000808080), CONST64(0x8000000080808080), CONST64(0x8000002080808080), + CONST64(0x0080000000000000), CONST64(0x0080002000000000), CONST64(0x0080000080000000), CONST64(0x0080002080000000), + CONST64(0x0080000000800000), CONST64(0x0080002000800000), CONST64(0x0080000080800000), CONST64(0x0080002080800000), + CONST64(0x0080000000008000), CONST64(0x0080002000008000), CONST64(0x0080000080008000), CONST64(0x0080002080008000), + CONST64(0x0080000000808000), CONST64(0x0080002000808000), CONST64(0x0080000080808000), CONST64(0x0080002080808000), + CONST64(0x0080000000000080), CONST64(0x0080002000000080), CONST64(0x0080000080000080), CONST64(0x0080002080000080), + CONST64(0x0080000000800080), CONST64(0x0080002000800080), CONST64(0x0080000080800080), CONST64(0x0080002080800080), + CONST64(0x0080000000008080), CONST64(0x0080002000008080), CONST64(0x0080000080008080), CONST64(0x0080002080008080), + CONST64(0x0080000000808080), CONST64(0x0080002000808080), CONST64(0x0080000080808080), CONST64(0x0080002080808080), + CONST64(0x8080000000000000), CONST64(0x8080002000000000), CONST64(0x8080000080000000), CONST64(0x8080002080000000), + CONST64(0x8080000000800000), CONST64(0x8080002000800000), CONST64(0x8080000080800000), CONST64(0x8080002080800000), + CONST64(0x8080000000008000), CONST64(0x8080002000008000), CONST64(0x8080000080008000), CONST64(0x8080002080008000), + CONST64(0x8080000000808000), CONST64(0x8080002000808000), CONST64(0x8080000080808000), CONST64(0x8080002080808000), + CONST64(0x8080000000000080), CONST64(0x8080002000000080), CONST64(0x8080000080000080), CONST64(0x8080002080000080), + CONST64(0x8080000000800080), CONST64(0x8080002000800080), CONST64(0x8080000080800080), CONST64(0x8080002080800080), + CONST64(0x8080000000008080), CONST64(0x8080002000008080), CONST64(0x8080000080008080), CONST64(0x8080002080008080), + CONST64(0x8080000000808080), CONST64(0x8080002000808080), CONST64(0x8080000080808080), CONST64(0x8080002080808080), + CONST64(0x0000800000000000), CONST64(0x0000802000000000), CONST64(0x0000800080000000), CONST64(0x0000802080000000), + CONST64(0x0000800000800000), CONST64(0x0000802000800000), CONST64(0x0000800080800000), CONST64(0x0000802080800000), + CONST64(0x0000800000008000), CONST64(0x0000802000008000), CONST64(0x0000800080008000), CONST64(0x0000802080008000), + CONST64(0x0000800000808000), CONST64(0x0000802000808000), CONST64(0x0000800080808000), CONST64(0x0000802080808000), + CONST64(0x0000800000000080), CONST64(0x0000802000000080), CONST64(0x0000800080000080), CONST64(0x0000802080000080), + CONST64(0x0000800000800080), CONST64(0x0000802000800080), CONST64(0x0000800080800080), CONST64(0x0000802080800080), + CONST64(0x0000800000008080), CONST64(0x0000802000008080), CONST64(0x0000800080008080), CONST64(0x0000802080008080), + CONST64(0x0000800000808080), CONST64(0x0000802000808080), CONST64(0x0000800080808080), CONST64(0x0000802080808080), + CONST64(0x8000800000000000), CONST64(0x8000802000000000), CONST64(0x8000800080000000), CONST64(0x8000802080000000), + CONST64(0x8000800000800000), CONST64(0x8000802000800000), CONST64(0x8000800080800000), CONST64(0x8000802080800000), + CONST64(0x8000800000008000), CONST64(0x8000802000008000), CONST64(0x8000800080008000), CONST64(0x8000802080008000), + CONST64(0x8000800000808000), CONST64(0x8000802000808000), CONST64(0x8000800080808000), CONST64(0x8000802080808000), + CONST64(0x8000800000000080), CONST64(0x8000802000000080), CONST64(0x8000800080000080), CONST64(0x8000802080000080), + CONST64(0x8000800000800080), CONST64(0x8000802000800080), CONST64(0x8000800080800080), CONST64(0x8000802080800080), + CONST64(0x8000800000008080), CONST64(0x8000802000008080), CONST64(0x8000800080008080), CONST64(0x8000802080008080), + CONST64(0x8000800000808080), CONST64(0x8000802000808080), CONST64(0x8000800080808080), CONST64(0x8000802080808080), + CONST64(0x0080800000000000), CONST64(0x0080802000000000), CONST64(0x0080800080000000), CONST64(0x0080802080000000), + CONST64(0x0080800000800000), CONST64(0x0080802000800000), CONST64(0x0080800080800000), CONST64(0x0080802080800000), + CONST64(0x0080800000008000), CONST64(0x0080802000008000), CONST64(0x0080800080008000), CONST64(0x0080802080008000), + CONST64(0x0080800000808000), CONST64(0x0080802000808000), CONST64(0x0080800080808000), CONST64(0x0080802080808000), + CONST64(0x0080800000000080), CONST64(0x0080802000000080), CONST64(0x0080800080000080), CONST64(0x0080802080000080), + CONST64(0x0080800000800080), CONST64(0x0080802000800080), CONST64(0x0080800080800080), CONST64(0x0080802080800080), + CONST64(0x0080800000008080), CONST64(0x0080802000008080), CONST64(0x0080800080008080), CONST64(0x0080802080008080), + CONST64(0x0080800000808080), CONST64(0x0080802000808080), CONST64(0x0080800080808080), CONST64(0x0080802080808080), + CONST64(0x8080800000000000), CONST64(0x8080802000000000), CONST64(0x8080800080000000), CONST64(0x8080802080000000), + CONST64(0x8080800000800000), CONST64(0x8080802000800000), CONST64(0x8080800080800000), CONST64(0x8080802080800000), + CONST64(0x8080800000008000), CONST64(0x8080802000008000), CONST64(0x8080800080008000), CONST64(0x8080802080008000), + CONST64(0x8080800000808000), CONST64(0x8080802000808000), CONST64(0x8080800080808000), CONST64(0x8080802080808000), + CONST64(0x8080800000000080), CONST64(0x8080802000000080), CONST64(0x8080800080000080), CONST64(0x8080802080000080), + CONST64(0x8080800000800080), CONST64(0x8080802000800080), CONST64(0x8080800080800080), CONST64(0x8080802080800080), + CONST64(0x8080800000008080), CONST64(0x8080802000008080), CONST64(0x8080800080008080), CONST64(0x8080802080008080), CONST64(0x8080800000808080), CONST64(0x8080802000808080), CONST64(0x8080800080808080), CONST64(0x8080802080808080) - }, -{ CONST64(0x0000000000000000), CONST64(0x0000004000000000), CONST64(0x0000000001000000), CONST64(0x0000004001000000), - CONST64(0x0000000000010000), CONST64(0x0000004000010000), CONST64(0x0000000001010000), CONST64(0x0000004001010000), - CONST64(0x0000000000000100), CONST64(0x0000004000000100), CONST64(0x0000000001000100), CONST64(0x0000004001000100), - CONST64(0x0000000000010100), CONST64(0x0000004000010100), CONST64(0x0000000001010100), CONST64(0x0000004001010100), - CONST64(0x0000000000000001), CONST64(0x0000004000000001), CONST64(0x0000000001000001), CONST64(0x0000004001000001), - CONST64(0x0000000000010001), CONST64(0x0000004000010001), CONST64(0x0000000001010001), CONST64(0x0000004001010001), - CONST64(0x0000000000000101), CONST64(0x0000004000000101), CONST64(0x0000000001000101), CONST64(0x0000004001000101), - CONST64(0x0000000000010101), CONST64(0x0000004000010101), CONST64(0x0000000001010101), CONST64(0x0000004001010101), - CONST64(0x0100000000000000), CONST64(0x0100004000000000), CONST64(0x0100000001000000), CONST64(0x0100004001000000), - CONST64(0x0100000000010000), CONST64(0x0100004000010000), CONST64(0x0100000001010000), CONST64(0x0100004001010000), - CONST64(0x0100000000000100), CONST64(0x0100004000000100), CONST64(0x0100000001000100), CONST64(0x0100004001000100), - CONST64(0x0100000000010100), CONST64(0x0100004000010100), CONST64(0x0100000001010100), CONST64(0x0100004001010100), - CONST64(0x0100000000000001), CONST64(0x0100004000000001), CONST64(0x0100000001000001), CONST64(0x0100004001000001), - CONST64(0x0100000000010001), CONST64(0x0100004000010001), CONST64(0x0100000001010001), CONST64(0x0100004001010001), - CONST64(0x0100000000000101), CONST64(0x0100004000000101), CONST64(0x0100000001000101), CONST64(0x0100004001000101), - CONST64(0x0100000000010101), CONST64(0x0100004000010101), CONST64(0x0100000001010101), CONST64(0x0100004001010101), - CONST64(0x0001000000000000), CONST64(0x0001004000000000), CONST64(0x0001000001000000), CONST64(0x0001004001000000), - CONST64(0x0001000000010000), CONST64(0x0001004000010000), CONST64(0x0001000001010000), CONST64(0x0001004001010000), - CONST64(0x0001000000000100), CONST64(0x0001004000000100), CONST64(0x0001000001000100), CONST64(0x0001004001000100), - CONST64(0x0001000000010100), CONST64(0x0001004000010100), CONST64(0x0001000001010100), CONST64(0x0001004001010100), - CONST64(0x0001000000000001), CONST64(0x0001004000000001), CONST64(0x0001000001000001), CONST64(0x0001004001000001), - CONST64(0x0001000000010001), CONST64(0x0001004000010001), CONST64(0x0001000001010001), CONST64(0x0001004001010001), - CONST64(0x0001000000000101), CONST64(0x0001004000000101), CONST64(0x0001000001000101), CONST64(0x0001004001000101), - CONST64(0x0001000000010101), CONST64(0x0001004000010101), CONST64(0x0001000001010101), CONST64(0x0001004001010101), - CONST64(0x0101000000000000), CONST64(0x0101004000000000), CONST64(0x0101000001000000), CONST64(0x0101004001000000), - CONST64(0x0101000000010000), CONST64(0x0101004000010000), CONST64(0x0101000001010000), CONST64(0x0101004001010000), - CONST64(0x0101000000000100), CONST64(0x0101004000000100), CONST64(0x0101000001000100), CONST64(0x0101004001000100), - CONST64(0x0101000000010100), CONST64(0x0101004000010100), CONST64(0x0101000001010100), CONST64(0x0101004001010100), - CONST64(0x0101000000000001), CONST64(0x0101004000000001), CONST64(0x0101000001000001), CONST64(0x0101004001000001), - CONST64(0x0101000000010001), CONST64(0x0101004000010001), CONST64(0x0101000001010001), CONST64(0x0101004001010001), - CONST64(0x0101000000000101), CONST64(0x0101004000000101), CONST64(0x0101000001000101), CONST64(0x0101004001000101), - CONST64(0x0101000000010101), CONST64(0x0101004000010101), CONST64(0x0101000001010101), CONST64(0x0101004001010101), - CONST64(0x0000010000000000), CONST64(0x0000014000000000), CONST64(0x0000010001000000), CONST64(0x0000014001000000), - CONST64(0x0000010000010000), CONST64(0x0000014000010000), CONST64(0x0000010001010000), CONST64(0x0000014001010000), - CONST64(0x0000010000000100), CONST64(0x0000014000000100), CONST64(0x0000010001000100), CONST64(0x0000014001000100), - CONST64(0x0000010000010100), CONST64(0x0000014000010100), CONST64(0x0000010001010100), CONST64(0x0000014001010100), - CONST64(0x0000010000000001), CONST64(0x0000014000000001), CONST64(0x0000010001000001), CONST64(0x0000014001000001), - CONST64(0x0000010000010001), CONST64(0x0000014000010001), CONST64(0x0000010001010001), CONST64(0x0000014001010001), - CONST64(0x0000010000000101), CONST64(0x0000014000000101), CONST64(0x0000010001000101), CONST64(0x0000014001000101), - CONST64(0x0000010000010101), CONST64(0x0000014000010101), CONST64(0x0000010001010101), CONST64(0x0000014001010101), - CONST64(0x0100010000000000), CONST64(0x0100014000000000), CONST64(0x0100010001000000), CONST64(0x0100014001000000), - CONST64(0x0100010000010000), CONST64(0x0100014000010000), CONST64(0x0100010001010000), CONST64(0x0100014001010000), - CONST64(0x0100010000000100), CONST64(0x0100014000000100), CONST64(0x0100010001000100), CONST64(0x0100014001000100), - CONST64(0x0100010000010100), CONST64(0x0100014000010100), CONST64(0x0100010001010100), CONST64(0x0100014001010100), - CONST64(0x0100010000000001), CONST64(0x0100014000000001), CONST64(0x0100010001000001), CONST64(0x0100014001000001), - CONST64(0x0100010000010001), CONST64(0x0100014000010001), CONST64(0x0100010001010001), CONST64(0x0100014001010001), - CONST64(0x0100010000000101), CONST64(0x0100014000000101), CONST64(0x0100010001000101), CONST64(0x0100014001000101), - CONST64(0x0100010000010101), CONST64(0x0100014000010101), CONST64(0x0100010001010101), CONST64(0x0100014001010101), - CONST64(0x0001010000000000), CONST64(0x0001014000000000), CONST64(0x0001010001000000), CONST64(0x0001014001000000), - CONST64(0x0001010000010000), CONST64(0x0001014000010000), CONST64(0x0001010001010000), CONST64(0x0001014001010000), - CONST64(0x0001010000000100), CONST64(0x0001014000000100), CONST64(0x0001010001000100), CONST64(0x0001014001000100), - CONST64(0x0001010000010100), CONST64(0x0001014000010100), CONST64(0x0001010001010100), CONST64(0x0001014001010100), - CONST64(0x0001010000000001), CONST64(0x0001014000000001), CONST64(0x0001010001000001), CONST64(0x0001014001000001), - CONST64(0x0001010000010001), CONST64(0x0001014000010001), CONST64(0x0001010001010001), CONST64(0x0001014001010001), - CONST64(0x0001010000000101), CONST64(0x0001014000000101), CONST64(0x0001010001000101), CONST64(0x0001014001000101), - CONST64(0x0001010000010101), CONST64(0x0001014000010101), CONST64(0x0001010001010101), CONST64(0x0001014001010101), - CONST64(0x0101010000000000), CONST64(0x0101014000000000), CONST64(0x0101010001000000), CONST64(0x0101014001000000), - CONST64(0x0101010000010000), CONST64(0x0101014000010000), CONST64(0x0101010001010000), CONST64(0x0101014001010000), - CONST64(0x0101010000000100), CONST64(0x0101014000000100), CONST64(0x0101010001000100), CONST64(0x0101014001000100), - CONST64(0x0101010000010100), CONST64(0x0101014000010100), CONST64(0x0101010001010100), CONST64(0x0101014001010100), - CONST64(0x0101010000000001), CONST64(0x0101014000000001), CONST64(0x0101010001000001), CONST64(0x0101014001000001), - CONST64(0x0101010000010001), CONST64(0x0101014000010001), CONST64(0x0101010001010001), CONST64(0x0101014001010001), - CONST64(0x0101010000000101), CONST64(0x0101014000000101), CONST64(0x0101010001000101), CONST64(0x0101014001000101), + }, +{ CONST64(0x0000000000000000), CONST64(0x0000004000000000), CONST64(0x0000000001000000), CONST64(0x0000004001000000), + CONST64(0x0000000000010000), CONST64(0x0000004000010000), CONST64(0x0000000001010000), CONST64(0x0000004001010000), + CONST64(0x0000000000000100), CONST64(0x0000004000000100), CONST64(0x0000000001000100), CONST64(0x0000004001000100), + CONST64(0x0000000000010100), CONST64(0x0000004000010100), CONST64(0x0000000001010100), CONST64(0x0000004001010100), + CONST64(0x0000000000000001), CONST64(0x0000004000000001), CONST64(0x0000000001000001), CONST64(0x0000004001000001), + CONST64(0x0000000000010001), CONST64(0x0000004000010001), CONST64(0x0000000001010001), CONST64(0x0000004001010001), + CONST64(0x0000000000000101), CONST64(0x0000004000000101), CONST64(0x0000000001000101), CONST64(0x0000004001000101), + CONST64(0x0000000000010101), CONST64(0x0000004000010101), CONST64(0x0000000001010101), CONST64(0x0000004001010101), + CONST64(0x0100000000000000), CONST64(0x0100004000000000), CONST64(0x0100000001000000), CONST64(0x0100004001000000), + CONST64(0x0100000000010000), CONST64(0x0100004000010000), CONST64(0x0100000001010000), CONST64(0x0100004001010000), + CONST64(0x0100000000000100), CONST64(0x0100004000000100), CONST64(0x0100000001000100), CONST64(0x0100004001000100), + CONST64(0x0100000000010100), CONST64(0x0100004000010100), CONST64(0x0100000001010100), CONST64(0x0100004001010100), + CONST64(0x0100000000000001), CONST64(0x0100004000000001), CONST64(0x0100000001000001), CONST64(0x0100004001000001), + CONST64(0x0100000000010001), CONST64(0x0100004000010001), CONST64(0x0100000001010001), CONST64(0x0100004001010001), + CONST64(0x0100000000000101), CONST64(0x0100004000000101), CONST64(0x0100000001000101), CONST64(0x0100004001000101), + CONST64(0x0100000000010101), CONST64(0x0100004000010101), CONST64(0x0100000001010101), CONST64(0x0100004001010101), + CONST64(0x0001000000000000), CONST64(0x0001004000000000), CONST64(0x0001000001000000), CONST64(0x0001004001000000), + CONST64(0x0001000000010000), CONST64(0x0001004000010000), CONST64(0x0001000001010000), CONST64(0x0001004001010000), + CONST64(0x0001000000000100), CONST64(0x0001004000000100), CONST64(0x0001000001000100), CONST64(0x0001004001000100), + CONST64(0x0001000000010100), CONST64(0x0001004000010100), CONST64(0x0001000001010100), CONST64(0x0001004001010100), + CONST64(0x0001000000000001), CONST64(0x0001004000000001), CONST64(0x0001000001000001), CONST64(0x0001004001000001), + CONST64(0x0001000000010001), CONST64(0x0001004000010001), CONST64(0x0001000001010001), CONST64(0x0001004001010001), + CONST64(0x0001000000000101), CONST64(0x0001004000000101), CONST64(0x0001000001000101), CONST64(0x0001004001000101), + CONST64(0x0001000000010101), CONST64(0x0001004000010101), CONST64(0x0001000001010101), CONST64(0x0001004001010101), + CONST64(0x0101000000000000), CONST64(0x0101004000000000), CONST64(0x0101000001000000), CONST64(0x0101004001000000), + CONST64(0x0101000000010000), CONST64(0x0101004000010000), CONST64(0x0101000001010000), CONST64(0x0101004001010000), + CONST64(0x0101000000000100), CONST64(0x0101004000000100), CONST64(0x0101000001000100), CONST64(0x0101004001000100), + CONST64(0x0101000000010100), CONST64(0x0101004000010100), CONST64(0x0101000001010100), CONST64(0x0101004001010100), + CONST64(0x0101000000000001), CONST64(0x0101004000000001), CONST64(0x0101000001000001), CONST64(0x0101004001000001), + CONST64(0x0101000000010001), CONST64(0x0101004000010001), CONST64(0x0101000001010001), CONST64(0x0101004001010001), + CONST64(0x0101000000000101), CONST64(0x0101004000000101), CONST64(0x0101000001000101), CONST64(0x0101004001000101), + CONST64(0x0101000000010101), CONST64(0x0101004000010101), CONST64(0x0101000001010101), CONST64(0x0101004001010101), + CONST64(0x0000010000000000), CONST64(0x0000014000000000), CONST64(0x0000010001000000), CONST64(0x0000014001000000), + CONST64(0x0000010000010000), CONST64(0x0000014000010000), CONST64(0x0000010001010000), CONST64(0x0000014001010000), + CONST64(0x0000010000000100), CONST64(0x0000014000000100), CONST64(0x0000010001000100), CONST64(0x0000014001000100), + CONST64(0x0000010000010100), CONST64(0x0000014000010100), CONST64(0x0000010001010100), CONST64(0x0000014001010100), + CONST64(0x0000010000000001), CONST64(0x0000014000000001), CONST64(0x0000010001000001), CONST64(0x0000014001000001), + CONST64(0x0000010000010001), CONST64(0x0000014000010001), CONST64(0x0000010001010001), CONST64(0x0000014001010001), + CONST64(0x0000010000000101), CONST64(0x0000014000000101), CONST64(0x0000010001000101), CONST64(0x0000014001000101), + CONST64(0x0000010000010101), CONST64(0x0000014000010101), CONST64(0x0000010001010101), CONST64(0x0000014001010101), + CONST64(0x0100010000000000), CONST64(0x0100014000000000), CONST64(0x0100010001000000), CONST64(0x0100014001000000), + CONST64(0x0100010000010000), CONST64(0x0100014000010000), CONST64(0x0100010001010000), CONST64(0x0100014001010000), + CONST64(0x0100010000000100), CONST64(0x0100014000000100), CONST64(0x0100010001000100), CONST64(0x0100014001000100), + CONST64(0x0100010000010100), CONST64(0x0100014000010100), CONST64(0x0100010001010100), CONST64(0x0100014001010100), + CONST64(0x0100010000000001), CONST64(0x0100014000000001), CONST64(0x0100010001000001), CONST64(0x0100014001000001), + CONST64(0x0100010000010001), CONST64(0x0100014000010001), CONST64(0x0100010001010001), CONST64(0x0100014001010001), + CONST64(0x0100010000000101), CONST64(0x0100014000000101), CONST64(0x0100010001000101), CONST64(0x0100014001000101), + CONST64(0x0100010000010101), CONST64(0x0100014000010101), CONST64(0x0100010001010101), CONST64(0x0100014001010101), + CONST64(0x0001010000000000), CONST64(0x0001014000000000), CONST64(0x0001010001000000), CONST64(0x0001014001000000), + CONST64(0x0001010000010000), CONST64(0x0001014000010000), CONST64(0x0001010001010000), CONST64(0x0001014001010000), + CONST64(0x0001010000000100), CONST64(0x0001014000000100), CONST64(0x0001010001000100), CONST64(0x0001014001000100), + CONST64(0x0001010000010100), CONST64(0x0001014000010100), CONST64(0x0001010001010100), CONST64(0x0001014001010100), + CONST64(0x0001010000000001), CONST64(0x0001014000000001), CONST64(0x0001010001000001), CONST64(0x0001014001000001), + CONST64(0x0001010000010001), CONST64(0x0001014000010001), CONST64(0x0001010001010001), CONST64(0x0001014001010001), + CONST64(0x0001010000000101), CONST64(0x0001014000000101), CONST64(0x0001010001000101), CONST64(0x0001014001000101), + CONST64(0x0001010000010101), CONST64(0x0001014000010101), CONST64(0x0001010001010101), CONST64(0x0001014001010101), + CONST64(0x0101010000000000), CONST64(0x0101014000000000), CONST64(0x0101010001000000), CONST64(0x0101014001000000), + CONST64(0x0101010000010000), CONST64(0x0101014000010000), CONST64(0x0101010001010000), CONST64(0x0101014001010000), + CONST64(0x0101010000000100), CONST64(0x0101014000000100), CONST64(0x0101010001000100), CONST64(0x0101014001000100), + CONST64(0x0101010000010100), CONST64(0x0101014000010100), CONST64(0x0101010001010100), CONST64(0x0101014001010100), + CONST64(0x0101010000000001), CONST64(0x0101014000000001), CONST64(0x0101010001000001), CONST64(0x0101014001000001), + CONST64(0x0101010000010001), CONST64(0x0101014000010001), CONST64(0x0101010001010001), CONST64(0x0101014001010001), + CONST64(0x0101010000000101), CONST64(0x0101014000000101), CONST64(0x0101010001000101), CONST64(0x0101014001000101), CONST64(0x0101010000010101), CONST64(0x0101014000010101), CONST64(0x0101010001010101), CONST64(0x0101014001010101) - }, -{ CONST64(0x0000000000000000), CONST64(0x0000000100000000), CONST64(0x0000000004000000), CONST64(0x0000000104000000), - CONST64(0x0000000000040000), CONST64(0x0000000100040000), CONST64(0x0000000004040000), CONST64(0x0000000104040000), - CONST64(0x0000000000000400), CONST64(0x0000000100000400), CONST64(0x0000000004000400), CONST64(0x0000000104000400), - CONST64(0x0000000000040400), CONST64(0x0000000100040400), CONST64(0x0000000004040400), CONST64(0x0000000104040400), - CONST64(0x0000000000000004), CONST64(0x0000000100000004), CONST64(0x0000000004000004), CONST64(0x0000000104000004), - CONST64(0x0000000000040004), CONST64(0x0000000100040004), CONST64(0x0000000004040004), CONST64(0x0000000104040004), - CONST64(0x0000000000000404), CONST64(0x0000000100000404), CONST64(0x0000000004000404), CONST64(0x0000000104000404), - CONST64(0x0000000000040404), CONST64(0x0000000100040404), CONST64(0x0000000004040404), CONST64(0x0000000104040404), - CONST64(0x0400000000000000), CONST64(0x0400000100000000), CONST64(0x0400000004000000), CONST64(0x0400000104000000), - CONST64(0x0400000000040000), CONST64(0x0400000100040000), CONST64(0x0400000004040000), CONST64(0x0400000104040000), - CONST64(0x0400000000000400), CONST64(0x0400000100000400), CONST64(0x0400000004000400), CONST64(0x0400000104000400), - CONST64(0x0400000000040400), CONST64(0x0400000100040400), CONST64(0x0400000004040400), CONST64(0x0400000104040400), - CONST64(0x0400000000000004), CONST64(0x0400000100000004), CONST64(0x0400000004000004), CONST64(0x0400000104000004), - CONST64(0x0400000000040004), CONST64(0x0400000100040004), CONST64(0x0400000004040004), CONST64(0x0400000104040004), - CONST64(0x0400000000000404), CONST64(0x0400000100000404), CONST64(0x0400000004000404), CONST64(0x0400000104000404), - CONST64(0x0400000000040404), CONST64(0x0400000100040404), CONST64(0x0400000004040404), CONST64(0x0400000104040404), - CONST64(0x0004000000000000), CONST64(0x0004000100000000), CONST64(0x0004000004000000), CONST64(0x0004000104000000), - CONST64(0x0004000000040000), CONST64(0x0004000100040000), CONST64(0x0004000004040000), CONST64(0x0004000104040000), - CONST64(0x0004000000000400), CONST64(0x0004000100000400), CONST64(0x0004000004000400), CONST64(0x0004000104000400), - CONST64(0x0004000000040400), CONST64(0x0004000100040400), CONST64(0x0004000004040400), CONST64(0x0004000104040400), - CONST64(0x0004000000000004), CONST64(0x0004000100000004), CONST64(0x0004000004000004), CONST64(0x0004000104000004), - CONST64(0x0004000000040004), CONST64(0x0004000100040004), CONST64(0x0004000004040004), CONST64(0x0004000104040004), - CONST64(0x0004000000000404), CONST64(0x0004000100000404), CONST64(0x0004000004000404), CONST64(0x0004000104000404), - CONST64(0x0004000000040404), CONST64(0x0004000100040404), CONST64(0x0004000004040404), CONST64(0x0004000104040404), - CONST64(0x0404000000000000), CONST64(0x0404000100000000), CONST64(0x0404000004000000), CONST64(0x0404000104000000), - CONST64(0x0404000000040000), CONST64(0x0404000100040000), CONST64(0x0404000004040000), CONST64(0x0404000104040000), - CONST64(0x0404000000000400), CONST64(0x0404000100000400), CONST64(0x0404000004000400), CONST64(0x0404000104000400), - CONST64(0x0404000000040400), CONST64(0x0404000100040400), CONST64(0x0404000004040400), CONST64(0x0404000104040400), - CONST64(0x0404000000000004), CONST64(0x0404000100000004), CONST64(0x0404000004000004), CONST64(0x0404000104000004), - CONST64(0x0404000000040004), CONST64(0x0404000100040004), CONST64(0x0404000004040004), CONST64(0x0404000104040004), - CONST64(0x0404000000000404), CONST64(0x0404000100000404), CONST64(0x0404000004000404), CONST64(0x0404000104000404), - CONST64(0x0404000000040404), CONST64(0x0404000100040404), CONST64(0x0404000004040404), CONST64(0x0404000104040404), - CONST64(0x0000040000000000), CONST64(0x0000040100000000), CONST64(0x0000040004000000), CONST64(0x0000040104000000), - CONST64(0x0000040000040000), CONST64(0x0000040100040000), CONST64(0x0000040004040000), CONST64(0x0000040104040000), - CONST64(0x0000040000000400), CONST64(0x0000040100000400), CONST64(0x0000040004000400), CONST64(0x0000040104000400), - CONST64(0x0000040000040400), CONST64(0x0000040100040400), CONST64(0x0000040004040400), CONST64(0x0000040104040400), - CONST64(0x0000040000000004), CONST64(0x0000040100000004), CONST64(0x0000040004000004), CONST64(0x0000040104000004), - CONST64(0x0000040000040004), CONST64(0x0000040100040004), CONST64(0x0000040004040004), CONST64(0x0000040104040004), - CONST64(0x0000040000000404), CONST64(0x0000040100000404), CONST64(0x0000040004000404), CONST64(0x0000040104000404), - CONST64(0x0000040000040404), CONST64(0x0000040100040404), CONST64(0x0000040004040404), CONST64(0x0000040104040404), - CONST64(0x0400040000000000), CONST64(0x0400040100000000), CONST64(0x0400040004000000), CONST64(0x0400040104000000), - CONST64(0x0400040000040000), CONST64(0x0400040100040000), CONST64(0x0400040004040000), CONST64(0x0400040104040000), - CONST64(0x0400040000000400), CONST64(0x0400040100000400), CONST64(0x0400040004000400), CONST64(0x0400040104000400), - CONST64(0x0400040000040400), CONST64(0x0400040100040400), CONST64(0x0400040004040400), CONST64(0x0400040104040400), - CONST64(0x0400040000000004), CONST64(0x0400040100000004), CONST64(0x0400040004000004), CONST64(0x0400040104000004), - CONST64(0x0400040000040004), CONST64(0x0400040100040004), CONST64(0x0400040004040004), CONST64(0x0400040104040004), - CONST64(0x0400040000000404), CONST64(0x0400040100000404), CONST64(0x0400040004000404), CONST64(0x0400040104000404), - CONST64(0x0400040000040404), CONST64(0x0400040100040404), CONST64(0x0400040004040404), CONST64(0x0400040104040404), - CONST64(0x0004040000000000), CONST64(0x0004040100000000), CONST64(0x0004040004000000), CONST64(0x0004040104000000), - CONST64(0x0004040000040000), CONST64(0x0004040100040000), CONST64(0x0004040004040000), CONST64(0x0004040104040000), - CONST64(0x0004040000000400), CONST64(0x0004040100000400), CONST64(0x0004040004000400), CONST64(0x0004040104000400), - CONST64(0x0004040000040400), CONST64(0x0004040100040400), CONST64(0x0004040004040400), CONST64(0x0004040104040400), - CONST64(0x0004040000000004), CONST64(0x0004040100000004), CONST64(0x0004040004000004), CONST64(0x0004040104000004), - CONST64(0x0004040000040004), CONST64(0x0004040100040004), CONST64(0x0004040004040004), CONST64(0x0004040104040004), - CONST64(0x0004040000000404), CONST64(0x0004040100000404), CONST64(0x0004040004000404), CONST64(0x0004040104000404), - CONST64(0x0004040000040404), CONST64(0x0004040100040404), CONST64(0x0004040004040404), CONST64(0x0004040104040404), - CONST64(0x0404040000000000), CONST64(0x0404040100000000), CONST64(0x0404040004000000), CONST64(0x0404040104000000), - CONST64(0x0404040000040000), CONST64(0x0404040100040000), CONST64(0x0404040004040000), CONST64(0x0404040104040000), - CONST64(0x0404040000000400), CONST64(0x0404040100000400), CONST64(0x0404040004000400), CONST64(0x0404040104000400), - CONST64(0x0404040000040400), CONST64(0x0404040100040400), CONST64(0x0404040004040400), CONST64(0x0404040104040400), - CONST64(0x0404040000000004), CONST64(0x0404040100000004), CONST64(0x0404040004000004), CONST64(0x0404040104000004), - CONST64(0x0404040000040004), CONST64(0x0404040100040004), CONST64(0x0404040004040004), CONST64(0x0404040104040004), - CONST64(0x0404040000000404), CONST64(0x0404040100000404), CONST64(0x0404040004000404), CONST64(0x0404040104000404), + }, +{ CONST64(0x0000000000000000), CONST64(0x0000000100000000), CONST64(0x0000000004000000), CONST64(0x0000000104000000), + CONST64(0x0000000000040000), CONST64(0x0000000100040000), CONST64(0x0000000004040000), CONST64(0x0000000104040000), + CONST64(0x0000000000000400), CONST64(0x0000000100000400), CONST64(0x0000000004000400), CONST64(0x0000000104000400), + CONST64(0x0000000000040400), CONST64(0x0000000100040400), CONST64(0x0000000004040400), CONST64(0x0000000104040400), + CONST64(0x0000000000000004), CONST64(0x0000000100000004), CONST64(0x0000000004000004), CONST64(0x0000000104000004), + CONST64(0x0000000000040004), CONST64(0x0000000100040004), CONST64(0x0000000004040004), CONST64(0x0000000104040004), + CONST64(0x0000000000000404), CONST64(0x0000000100000404), CONST64(0x0000000004000404), CONST64(0x0000000104000404), + CONST64(0x0000000000040404), CONST64(0x0000000100040404), CONST64(0x0000000004040404), CONST64(0x0000000104040404), + CONST64(0x0400000000000000), CONST64(0x0400000100000000), CONST64(0x0400000004000000), CONST64(0x0400000104000000), + CONST64(0x0400000000040000), CONST64(0x0400000100040000), CONST64(0x0400000004040000), CONST64(0x0400000104040000), + CONST64(0x0400000000000400), CONST64(0x0400000100000400), CONST64(0x0400000004000400), CONST64(0x0400000104000400), + CONST64(0x0400000000040400), CONST64(0x0400000100040400), CONST64(0x0400000004040400), CONST64(0x0400000104040400), + CONST64(0x0400000000000004), CONST64(0x0400000100000004), CONST64(0x0400000004000004), CONST64(0x0400000104000004), + CONST64(0x0400000000040004), CONST64(0x0400000100040004), CONST64(0x0400000004040004), CONST64(0x0400000104040004), + CONST64(0x0400000000000404), CONST64(0x0400000100000404), CONST64(0x0400000004000404), CONST64(0x0400000104000404), + CONST64(0x0400000000040404), CONST64(0x0400000100040404), CONST64(0x0400000004040404), CONST64(0x0400000104040404), + CONST64(0x0004000000000000), CONST64(0x0004000100000000), CONST64(0x0004000004000000), CONST64(0x0004000104000000), + CONST64(0x0004000000040000), CONST64(0x0004000100040000), CONST64(0x0004000004040000), CONST64(0x0004000104040000), + CONST64(0x0004000000000400), CONST64(0x0004000100000400), CONST64(0x0004000004000400), CONST64(0x0004000104000400), + CONST64(0x0004000000040400), CONST64(0x0004000100040400), CONST64(0x0004000004040400), CONST64(0x0004000104040400), + CONST64(0x0004000000000004), CONST64(0x0004000100000004), CONST64(0x0004000004000004), CONST64(0x0004000104000004), + CONST64(0x0004000000040004), CONST64(0x0004000100040004), CONST64(0x0004000004040004), CONST64(0x0004000104040004), + CONST64(0x0004000000000404), CONST64(0x0004000100000404), CONST64(0x0004000004000404), CONST64(0x0004000104000404), + CONST64(0x0004000000040404), CONST64(0x0004000100040404), CONST64(0x0004000004040404), CONST64(0x0004000104040404), + CONST64(0x0404000000000000), CONST64(0x0404000100000000), CONST64(0x0404000004000000), CONST64(0x0404000104000000), + CONST64(0x0404000000040000), CONST64(0x0404000100040000), CONST64(0x0404000004040000), CONST64(0x0404000104040000), + CONST64(0x0404000000000400), CONST64(0x0404000100000400), CONST64(0x0404000004000400), CONST64(0x0404000104000400), + CONST64(0x0404000000040400), CONST64(0x0404000100040400), CONST64(0x0404000004040400), CONST64(0x0404000104040400), + CONST64(0x0404000000000004), CONST64(0x0404000100000004), CONST64(0x0404000004000004), CONST64(0x0404000104000004), + CONST64(0x0404000000040004), CONST64(0x0404000100040004), CONST64(0x0404000004040004), CONST64(0x0404000104040004), + CONST64(0x0404000000000404), CONST64(0x0404000100000404), CONST64(0x0404000004000404), CONST64(0x0404000104000404), + CONST64(0x0404000000040404), CONST64(0x0404000100040404), CONST64(0x0404000004040404), CONST64(0x0404000104040404), + CONST64(0x0000040000000000), CONST64(0x0000040100000000), CONST64(0x0000040004000000), CONST64(0x0000040104000000), + CONST64(0x0000040000040000), CONST64(0x0000040100040000), CONST64(0x0000040004040000), CONST64(0x0000040104040000), + CONST64(0x0000040000000400), CONST64(0x0000040100000400), CONST64(0x0000040004000400), CONST64(0x0000040104000400), + CONST64(0x0000040000040400), CONST64(0x0000040100040400), CONST64(0x0000040004040400), CONST64(0x0000040104040400), + CONST64(0x0000040000000004), CONST64(0x0000040100000004), CONST64(0x0000040004000004), CONST64(0x0000040104000004), + CONST64(0x0000040000040004), CONST64(0x0000040100040004), CONST64(0x0000040004040004), CONST64(0x0000040104040004), + CONST64(0x0000040000000404), CONST64(0x0000040100000404), CONST64(0x0000040004000404), CONST64(0x0000040104000404), + CONST64(0x0000040000040404), CONST64(0x0000040100040404), CONST64(0x0000040004040404), CONST64(0x0000040104040404), + CONST64(0x0400040000000000), CONST64(0x0400040100000000), CONST64(0x0400040004000000), CONST64(0x0400040104000000), + CONST64(0x0400040000040000), CONST64(0x0400040100040000), CONST64(0x0400040004040000), CONST64(0x0400040104040000), + CONST64(0x0400040000000400), CONST64(0x0400040100000400), CONST64(0x0400040004000400), CONST64(0x0400040104000400), + CONST64(0x0400040000040400), CONST64(0x0400040100040400), CONST64(0x0400040004040400), CONST64(0x0400040104040400), + CONST64(0x0400040000000004), CONST64(0x0400040100000004), CONST64(0x0400040004000004), CONST64(0x0400040104000004), + CONST64(0x0400040000040004), CONST64(0x0400040100040004), CONST64(0x0400040004040004), CONST64(0x0400040104040004), + CONST64(0x0400040000000404), CONST64(0x0400040100000404), CONST64(0x0400040004000404), CONST64(0x0400040104000404), + CONST64(0x0400040000040404), CONST64(0x0400040100040404), CONST64(0x0400040004040404), CONST64(0x0400040104040404), + CONST64(0x0004040000000000), CONST64(0x0004040100000000), CONST64(0x0004040004000000), CONST64(0x0004040104000000), + CONST64(0x0004040000040000), CONST64(0x0004040100040000), CONST64(0x0004040004040000), CONST64(0x0004040104040000), + CONST64(0x0004040000000400), CONST64(0x0004040100000400), CONST64(0x0004040004000400), CONST64(0x0004040104000400), + CONST64(0x0004040000040400), CONST64(0x0004040100040400), CONST64(0x0004040004040400), CONST64(0x0004040104040400), + CONST64(0x0004040000000004), CONST64(0x0004040100000004), CONST64(0x0004040004000004), CONST64(0x0004040104000004), + CONST64(0x0004040000040004), CONST64(0x0004040100040004), CONST64(0x0004040004040004), CONST64(0x0004040104040004), + CONST64(0x0004040000000404), CONST64(0x0004040100000404), CONST64(0x0004040004000404), CONST64(0x0004040104000404), + CONST64(0x0004040000040404), CONST64(0x0004040100040404), CONST64(0x0004040004040404), CONST64(0x0004040104040404), + CONST64(0x0404040000000000), CONST64(0x0404040100000000), CONST64(0x0404040004000000), CONST64(0x0404040104000000), + CONST64(0x0404040000040000), CONST64(0x0404040100040000), CONST64(0x0404040004040000), CONST64(0x0404040104040000), + CONST64(0x0404040000000400), CONST64(0x0404040100000400), CONST64(0x0404040004000400), CONST64(0x0404040104000400), + CONST64(0x0404040000040400), CONST64(0x0404040100040400), CONST64(0x0404040004040400), CONST64(0x0404040104040400), + CONST64(0x0404040000000004), CONST64(0x0404040100000004), CONST64(0x0404040004000004), CONST64(0x0404040104000004), + CONST64(0x0404040000040004), CONST64(0x0404040100040004), CONST64(0x0404040004040004), CONST64(0x0404040104040004), + CONST64(0x0404040000000404), CONST64(0x0404040100000404), CONST64(0x0404040004000404), CONST64(0x0404040104000404), CONST64(0x0404040000040404), CONST64(0x0404040100040404), CONST64(0x0404040004040404), CONST64(0x0404040104040404) - }, -{ CONST64(0x0000000000000000), CONST64(0x0000000400000000), CONST64(0x0000000010000000), CONST64(0x0000000410000000), - CONST64(0x0000000000100000), CONST64(0x0000000400100000), CONST64(0x0000000010100000), CONST64(0x0000000410100000), - CONST64(0x0000000000001000), CONST64(0x0000000400001000), CONST64(0x0000000010001000), CONST64(0x0000000410001000), - CONST64(0x0000000000101000), CONST64(0x0000000400101000), CONST64(0x0000000010101000), CONST64(0x0000000410101000), - CONST64(0x0000000000000010), CONST64(0x0000000400000010), CONST64(0x0000000010000010), CONST64(0x0000000410000010), - CONST64(0x0000000000100010), CONST64(0x0000000400100010), CONST64(0x0000000010100010), CONST64(0x0000000410100010), - CONST64(0x0000000000001010), CONST64(0x0000000400001010), CONST64(0x0000000010001010), CONST64(0x0000000410001010), - CONST64(0x0000000000101010), CONST64(0x0000000400101010), CONST64(0x0000000010101010), CONST64(0x0000000410101010), - CONST64(0x1000000000000000), CONST64(0x1000000400000000), CONST64(0x1000000010000000), CONST64(0x1000000410000000), - CONST64(0x1000000000100000), CONST64(0x1000000400100000), CONST64(0x1000000010100000), CONST64(0x1000000410100000), - CONST64(0x1000000000001000), CONST64(0x1000000400001000), CONST64(0x1000000010001000), CONST64(0x1000000410001000), - CONST64(0x1000000000101000), CONST64(0x1000000400101000), CONST64(0x1000000010101000), CONST64(0x1000000410101000), - CONST64(0x1000000000000010), CONST64(0x1000000400000010), CONST64(0x1000000010000010), CONST64(0x1000000410000010), - CONST64(0x1000000000100010), CONST64(0x1000000400100010), CONST64(0x1000000010100010), CONST64(0x1000000410100010), - CONST64(0x1000000000001010), CONST64(0x1000000400001010), CONST64(0x1000000010001010), CONST64(0x1000000410001010), - CONST64(0x1000000000101010), CONST64(0x1000000400101010), CONST64(0x1000000010101010), CONST64(0x1000000410101010), - CONST64(0x0010000000000000), CONST64(0x0010000400000000), CONST64(0x0010000010000000), CONST64(0x0010000410000000), - CONST64(0x0010000000100000), CONST64(0x0010000400100000), CONST64(0x0010000010100000), CONST64(0x0010000410100000), - CONST64(0x0010000000001000), CONST64(0x0010000400001000), CONST64(0x0010000010001000), CONST64(0x0010000410001000), - CONST64(0x0010000000101000), CONST64(0x0010000400101000), CONST64(0x0010000010101000), CONST64(0x0010000410101000), - CONST64(0x0010000000000010), CONST64(0x0010000400000010), CONST64(0x0010000010000010), CONST64(0x0010000410000010), - CONST64(0x0010000000100010), CONST64(0x0010000400100010), CONST64(0x0010000010100010), CONST64(0x0010000410100010), - CONST64(0x0010000000001010), CONST64(0x0010000400001010), CONST64(0x0010000010001010), CONST64(0x0010000410001010), - CONST64(0x0010000000101010), CONST64(0x0010000400101010), CONST64(0x0010000010101010), CONST64(0x0010000410101010), - CONST64(0x1010000000000000), CONST64(0x1010000400000000), CONST64(0x1010000010000000), CONST64(0x1010000410000000), - CONST64(0x1010000000100000), CONST64(0x1010000400100000), CONST64(0x1010000010100000), CONST64(0x1010000410100000), - CONST64(0x1010000000001000), CONST64(0x1010000400001000), CONST64(0x1010000010001000), CONST64(0x1010000410001000), - CONST64(0x1010000000101000), CONST64(0x1010000400101000), CONST64(0x1010000010101000), CONST64(0x1010000410101000), - CONST64(0x1010000000000010), CONST64(0x1010000400000010), CONST64(0x1010000010000010), CONST64(0x1010000410000010), - CONST64(0x1010000000100010), CONST64(0x1010000400100010), CONST64(0x1010000010100010), CONST64(0x1010000410100010), - CONST64(0x1010000000001010), CONST64(0x1010000400001010), CONST64(0x1010000010001010), CONST64(0x1010000410001010), - CONST64(0x1010000000101010), CONST64(0x1010000400101010), CONST64(0x1010000010101010), CONST64(0x1010000410101010), - CONST64(0x0000100000000000), CONST64(0x0000100400000000), CONST64(0x0000100010000000), CONST64(0x0000100410000000), - CONST64(0x0000100000100000), CONST64(0x0000100400100000), CONST64(0x0000100010100000), CONST64(0x0000100410100000), - CONST64(0x0000100000001000), CONST64(0x0000100400001000), CONST64(0x0000100010001000), CONST64(0x0000100410001000), - CONST64(0x0000100000101000), CONST64(0x0000100400101000), CONST64(0x0000100010101000), CONST64(0x0000100410101000), - CONST64(0x0000100000000010), CONST64(0x0000100400000010), CONST64(0x0000100010000010), CONST64(0x0000100410000010), - CONST64(0x0000100000100010), CONST64(0x0000100400100010), CONST64(0x0000100010100010), CONST64(0x0000100410100010), - CONST64(0x0000100000001010), CONST64(0x0000100400001010), CONST64(0x0000100010001010), CONST64(0x0000100410001010), - CONST64(0x0000100000101010), CONST64(0x0000100400101010), CONST64(0x0000100010101010), CONST64(0x0000100410101010), - CONST64(0x1000100000000000), CONST64(0x1000100400000000), CONST64(0x1000100010000000), CONST64(0x1000100410000000), - CONST64(0x1000100000100000), CONST64(0x1000100400100000), CONST64(0x1000100010100000), CONST64(0x1000100410100000), - CONST64(0x1000100000001000), CONST64(0x1000100400001000), CONST64(0x1000100010001000), CONST64(0x1000100410001000), - CONST64(0x1000100000101000), CONST64(0x1000100400101000), CONST64(0x1000100010101000), CONST64(0x1000100410101000), - CONST64(0x1000100000000010), CONST64(0x1000100400000010), CONST64(0x1000100010000010), CONST64(0x1000100410000010), - CONST64(0x1000100000100010), CONST64(0x1000100400100010), CONST64(0x1000100010100010), CONST64(0x1000100410100010), - CONST64(0x1000100000001010), CONST64(0x1000100400001010), CONST64(0x1000100010001010), CONST64(0x1000100410001010), - CONST64(0x1000100000101010), CONST64(0x1000100400101010), CONST64(0x1000100010101010), CONST64(0x1000100410101010), - CONST64(0x0010100000000000), CONST64(0x0010100400000000), CONST64(0x0010100010000000), CONST64(0x0010100410000000), - CONST64(0x0010100000100000), CONST64(0x0010100400100000), CONST64(0x0010100010100000), CONST64(0x0010100410100000), - CONST64(0x0010100000001000), CONST64(0x0010100400001000), CONST64(0x0010100010001000), CONST64(0x0010100410001000), - CONST64(0x0010100000101000), CONST64(0x0010100400101000), CONST64(0x0010100010101000), CONST64(0x0010100410101000), - CONST64(0x0010100000000010), CONST64(0x0010100400000010), CONST64(0x0010100010000010), CONST64(0x0010100410000010), - CONST64(0x0010100000100010), CONST64(0x0010100400100010), CONST64(0x0010100010100010), CONST64(0x0010100410100010), - CONST64(0x0010100000001010), CONST64(0x0010100400001010), CONST64(0x0010100010001010), CONST64(0x0010100410001010), - CONST64(0x0010100000101010), CONST64(0x0010100400101010), CONST64(0x0010100010101010), CONST64(0x0010100410101010), - CONST64(0x1010100000000000), CONST64(0x1010100400000000), CONST64(0x1010100010000000), CONST64(0x1010100410000000), - CONST64(0x1010100000100000), CONST64(0x1010100400100000), CONST64(0x1010100010100000), CONST64(0x1010100410100000), - CONST64(0x1010100000001000), CONST64(0x1010100400001000), CONST64(0x1010100010001000), CONST64(0x1010100410001000), - CONST64(0x1010100000101000), CONST64(0x1010100400101000), CONST64(0x1010100010101000), CONST64(0x1010100410101000), - CONST64(0x1010100000000010), CONST64(0x1010100400000010), CONST64(0x1010100010000010), CONST64(0x1010100410000010), - CONST64(0x1010100000100010), CONST64(0x1010100400100010), CONST64(0x1010100010100010), CONST64(0x1010100410100010), - CONST64(0x1010100000001010), CONST64(0x1010100400001010), CONST64(0x1010100010001010), CONST64(0x1010100410001010), + }, +{ CONST64(0x0000000000000000), CONST64(0x0000000400000000), CONST64(0x0000000010000000), CONST64(0x0000000410000000), + CONST64(0x0000000000100000), CONST64(0x0000000400100000), CONST64(0x0000000010100000), CONST64(0x0000000410100000), + CONST64(0x0000000000001000), CONST64(0x0000000400001000), CONST64(0x0000000010001000), CONST64(0x0000000410001000), + CONST64(0x0000000000101000), CONST64(0x0000000400101000), CONST64(0x0000000010101000), CONST64(0x0000000410101000), + CONST64(0x0000000000000010), CONST64(0x0000000400000010), CONST64(0x0000000010000010), CONST64(0x0000000410000010), + CONST64(0x0000000000100010), CONST64(0x0000000400100010), CONST64(0x0000000010100010), CONST64(0x0000000410100010), + CONST64(0x0000000000001010), CONST64(0x0000000400001010), CONST64(0x0000000010001010), CONST64(0x0000000410001010), + CONST64(0x0000000000101010), CONST64(0x0000000400101010), CONST64(0x0000000010101010), CONST64(0x0000000410101010), + CONST64(0x1000000000000000), CONST64(0x1000000400000000), CONST64(0x1000000010000000), CONST64(0x1000000410000000), + CONST64(0x1000000000100000), CONST64(0x1000000400100000), CONST64(0x1000000010100000), CONST64(0x1000000410100000), + CONST64(0x1000000000001000), CONST64(0x1000000400001000), CONST64(0x1000000010001000), CONST64(0x1000000410001000), + CONST64(0x1000000000101000), CONST64(0x1000000400101000), CONST64(0x1000000010101000), CONST64(0x1000000410101000), + CONST64(0x1000000000000010), CONST64(0x1000000400000010), CONST64(0x1000000010000010), CONST64(0x1000000410000010), + CONST64(0x1000000000100010), CONST64(0x1000000400100010), CONST64(0x1000000010100010), CONST64(0x1000000410100010), + CONST64(0x1000000000001010), CONST64(0x1000000400001010), CONST64(0x1000000010001010), CONST64(0x1000000410001010), + CONST64(0x1000000000101010), CONST64(0x1000000400101010), CONST64(0x1000000010101010), CONST64(0x1000000410101010), + CONST64(0x0010000000000000), CONST64(0x0010000400000000), CONST64(0x0010000010000000), CONST64(0x0010000410000000), + CONST64(0x0010000000100000), CONST64(0x0010000400100000), CONST64(0x0010000010100000), CONST64(0x0010000410100000), + CONST64(0x0010000000001000), CONST64(0x0010000400001000), CONST64(0x0010000010001000), CONST64(0x0010000410001000), + CONST64(0x0010000000101000), CONST64(0x0010000400101000), CONST64(0x0010000010101000), CONST64(0x0010000410101000), + CONST64(0x0010000000000010), CONST64(0x0010000400000010), CONST64(0x0010000010000010), CONST64(0x0010000410000010), + CONST64(0x0010000000100010), CONST64(0x0010000400100010), CONST64(0x0010000010100010), CONST64(0x0010000410100010), + CONST64(0x0010000000001010), CONST64(0x0010000400001010), CONST64(0x0010000010001010), CONST64(0x0010000410001010), + CONST64(0x0010000000101010), CONST64(0x0010000400101010), CONST64(0x0010000010101010), CONST64(0x0010000410101010), + CONST64(0x1010000000000000), CONST64(0x1010000400000000), CONST64(0x1010000010000000), CONST64(0x1010000410000000), + CONST64(0x1010000000100000), CONST64(0x1010000400100000), CONST64(0x1010000010100000), CONST64(0x1010000410100000), + CONST64(0x1010000000001000), CONST64(0x1010000400001000), CONST64(0x1010000010001000), CONST64(0x1010000410001000), + CONST64(0x1010000000101000), CONST64(0x1010000400101000), CONST64(0x1010000010101000), CONST64(0x1010000410101000), + CONST64(0x1010000000000010), CONST64(0x1010000400000010), CONST64(0x1010000010000010), CONST64(0x1010000410000010), + CONST64(0x1010000000100010), CONST64(0x1010000400100010), CONST64(0x1010000010100010), CONST64(0x1010000410100010), + CONST64(0x1010000000001010), CONST64(0x1010000400001010), CONST64(0x1010000010001010), CONST64(0x1010000410001010), + CONST64(0x1010000000101010), CONST64(0x1010000400101010), CONST64(0x1010000010101010), CONST64(0x1010000410101010), + CONST64(0x0000100000000000), CONST64(0x0000100400000000), CONST64(0x0000100010000000), CONST64(0x0000100410000000), + CONST64(0x0000100000100000), CONST64(0x0000100400100000), CONST64(0x0000100010100000), CONST64(0x0000100410100000), + CONST64(0x0000100000001000), CONST64(0x0000100400001000), CONST64(0x0000100010001000), CONST64(0x0000100410001000), + CONST64(0x0000100000101000), CONST64(0x0000100400101000), CONST64(0x0000100010101000), CONST64(0x0000100410101000), + CONST64(0x0000100000000010), CONST64(0x0000100400000010), CONST64(0x0000100010000010), CONST64(0x0000100410000010), + CONST64(0x0000100000100010), CONST64(0x0000100400100010), CONST64(0x0000100010100010), CONST64(0x0000100410100010), + CONST64(0x0000100000001010), CONST64(0x0000100400001010), CONST64(0x0000100010001010), CONST64(0x0000100410001010), + CONST64(0x0000100000101010), CONST64(0x0000100400101010), CONST64(0x0000100010101010), CONST64(0x0000100410101010), + CONST64(0x1000100000000000), CONST64(0x1000100400000000), CONST64(0x1000100010000000), CONST64(0x1000100410000000), + CONST64(0x1000100000100000), CONST64(0x1000100400100000), CONST64(0x1000100010100000), CONST64(0x1000100410100000), + CONST64(0x1000100000001000), CONST64(0x1000100400001000), CONST64(0x1000100010001000), CONST64(0x1000100410001000), + CONST64(0x1000100000101000), CONST64(0x1000100400101000), CONST64(0x1000100010101000), CONST64(0x1000100410101000), + CONST64(0x1000100000000010), CONST64(0x1000100400000010), CONST64(0x1000100010000010), CONST64(0x1000100410000010), + CONST64(0x1000100000100010), CONST64(0x1000100400100010), CONST64(0x1000100010100010), CONST64(0x1000100410100010), + CONST64(0x1000100000001010), CONST64(0x1000100400001010), CONST64(0x1000100010001010), CONST64(0x1000100410001010), + CONST64(0x1000100000101010), CONST64(0x1000100400101010), CONST64(0x1000100010101010), CONST64(0x1000100410101010), + CONST64(0x0010100000000000), CONST64(0x0010100400000000), CONST64(0x0010100010000000), CONST64(0x0010100410000000), + CONST64(0x0010100000100000), CONST64(0x0010100400100000), CONST64(0x0010100010100000), CONST64(0x0010100410100000), + CONST64(0x0010100000001000), CONST64(0x0010100400001000), CONST64(0x0010100010001000), CONST64(0x0010100410001000), + CONST64(0x0010100000101000), CONST64(0x0010100400101000), CONST64(0x0010100010101000), CONST64(0x0010100410101000), + CONST64(0x0010100000000010), CONST64(0x0010100400000010), CONST64(0x0010100010000010), CONST64(0x0010100410000010), + CONST64(0x0010100000100010), CONST64(0x0010100400100010), CONST64(0x0010100010100010), CONST64(0x0010100410100010), + CONST64(0x0010100000001010), CONST64(0x0010100400001010), CONST64(0x0010100010001010), CONST64(0x0010100410001010), + CONST64(0x0010100000101010), CONST64(0x0010100400101010), CONST64(0x0010100010101010), CONST64(0x0010100410101010), + CONST64(0x1010100000000000), CONST64(0x1010100400000000), CONST64(0x1010100010000000), CONST64(0x1010100410000000), + CONST64(0x1010100000100000), CONST64(0x1010100400100000), CONST64(0x1010100010100000), CONST64(0x1010100410100000), + CONST64(0x1010100000001000), CONST64(0x1010100400001000), CONST64(0x1010100010001000), CONST64(0x1010100410001000), + CONST64(0x1010100000101000), CONST64(0x1010100400101000), CONST64(0x1010100010101000), CONST64(0x1010100410101000), + CONST64(0x1010100000000010), CONST64(0x1010100400000010), CONST64(0x1010100010000010), CONST64(0x1010100410000010), + CONST64(0x1010100000100010), CONST64(0x1010100400100010), CONST64(0x1010100010100010), CONST64(0x1010100410100010), + CONST64(0x1010100000001010), CONST64(0x1010100400001010), CONST64(0x1010100010001010), CONST64(0x1010100410001010), CONST64(0x1010100000101010), CONST64(0x1010100400101010), CONST64(0x1010100010101010), CONST64(0x1010100410101010) - }, -{ CONST64(0x0000000000000000), CONST64(0x0000001000000000), CONST64(0x0000000040000000), CONST64(0x0000001040000000), - CONST64(0x0000000000400000), CONST64(0x0000001000400000), CONST64(0x0000000040400000), CONST64(0x0000001040400000), - CONST64(0x0000000000004000), CONST64(0x0000001000004000), CONST64(0x0000000040004000), CONST64(0x0000001040004000), - CONST64(0x0000000000404000), CONST64(0x0000001000404000), CONST64(0x0000000040404000), CONST64(0x0000001040404000), - CONST64(0x0000000000000040), CONST64(0x0000001000000040), CONST64(0x0000000040000040), CONST64(0x0000001040000040), - CONST64(0x0000000000400040), CONST64(0x0000001000400040), CONST64(0x0000000040400040), CONST64(0x0000001040400040), - CONST64(0x0000000000004040), CONST64(0x0000001000004040), CONST64(0x0000000040004040), CONST64(0x0000001040004040), - CONST64(0x0000000000404040), CONST64(0x0000001000404040), CONST64(0x0000000040404040), CONST64(0x0000001040404040), - CONST64(0x4000000000000000), CONST64(0x4000001000000000), CONST64(0x4000000040000000), CONST64(0x4000001040000000), - CONST64(0x4000000000400000), CONST64(0x4000001000400000), CONST64(0x4000000040400000), CONST64(0x4000001040400000), - CONST64(0x4000000000004000), CONST64(0x4000001000004000), CONST64(0x4000000040004000), CONST64(0x4000001040004000), - CONST64(0x4000000000404000), CONST64(0x4000001000404000), CONST64(0x4000000040404000), CONST64(0x4000001040404000), - CONST64(0x4000000000000040), CONST64(0x4000001000000040), CONST64(0x4000000040000040), CONST64(0x4000001040000040), - CONST64(0x4000000000400040), CONST64(0x4000001000400040), CONST64(0x4000000040400040), CONST64(0x4000001040400040), - CONST64(0x4000000000004040), CONST64(0x4000001000004040), CONST64(0x4000000040004040), CONST64(0x4000001040004040), - CONST64(0x4000000000404040), CONST64(0x4000001000404040), CONST64(0x4000000040404040), CONST64(0x4000001040404040), - CONST64(0x0040000000000000), CONST64(0x0040001000000000), CONST64(0x0040000040000000), CONST64(0x0040001040000000), - CONST64(0x0040000000400000), CONST64(0x0040001000400000), CONST64(0x0040000040400000), CONST64(0x0040001040400000), - CONST64(0x0040000000004000), CONST64(0x0040001000004000), CONST64(0x0040000040004000), CONST64(0x0040001040004000), - CONST64(0x0040000000404000), CONST64(0x0040001000404000), CONST64(0x0040000040404000), CONST64(0x0040001040404000), - CONST64(0x0040000000000040), CONST64(0x0040001000000040), CONST64(0x0040000040000040), CONST64(0x0040001040000040), - CONST64(0x0040000000400040), CONST64(0x0040001000400040), CONST64(0x0040000040400040), CONST64(0x0040001040400040), - CONST64(0x0040000000004040), CONST64(0x0040001000004040), CONST64(0x0040000040004040), CONST64(0x0040001040004040), - CONST64(0x0040000000404040), CONST64(0x0040001000404040), CONST64(0x0040000040404040), CONST64(0x0040001040404040), - CONST64(0x4040000000000000), CONST64(0x4040001000000000), CONST64(0x4040000040000000), CONST64(0x4040001040000000), - CONST64(0x4040000000400000), CONST64(0x4040001000400000), CONST64(0x4040000040400000), CONST64(0x4040001040400000), - CONST64(0x4040000000004000), CONST64(0x4040001000004000), CONST64(0x4040000040004000), CONST64(0x4040001040004000), - CONST64(0x4040000000404000), CONST64(0x4040001000404000), CONST64(0x4040000040404000), CONST64(0x4040001040404000), - CONST64(0x4040000000000040), CONST64(0x4040001000000040), CONST64(0x4040000040000040), CONST64(0x4040001040000040), - CONST64(0x4040000000400040), CONST64(0x4040001000400040), CONST64(0x4040000040400040), CONST64(0x4040001040400040), - CONST64(0x4040000000004040), CONST64(0x4040001000004040), CONST64(0x4040000040004040), CONST64(0x4040001040004040), - CONST64(0x4040000000404040), CONST64(0x4040001000404040), CONST64(0x4040000040404040), CONST64(0x4040001040404040), - CONST64(0x0000400000000000), CONST64(0x0000401000000000), CONST64(0x0000400040000000), CONST64(0x0000401040000000), - CONST64(0x0000400000400000), CONST64(0x0000401000400000), CONST64(0x0000400040400000), CONST64(0x0000401040400000), - CONST64(0x0000400000004000), CONST64(0x0000401000004000), CONST64(0x0000400040004000), CONST64(0x0000401040004000), - CONST64(0x0000400000404000), CONST64(0x0000401000404000), CONST64(0x0000400040404000), CONST64(0x0000401040404000), - CONST64(0x0000400000000040), CONST64(0x0000401000000040), CONST64(0x0000400040000040), CONST64(0x0000401040000040), - CONST64(0x0000400000400040), CONST64(0x0000401000400040), CONST64(0x0000400040400040), CONST64(0x0000401040400040), - CONST64(0x0000400000004040), CONST64(0x0000401000004040), CONST64(0x0000400040004040), CONST64(0x0000401040004040), - CONST64(0x0000400000404040), CONST64(0x0000401000404040), CONST64(0x0000400040404040), CONST64(0x0000401040404040), - CONST64(0x4000400000000000), CONST64(0x4000401000000000), CONST64(0x4000400040000000), CONST64(0x4000401040000000), - CONST64(0x4000400000400000), CONST64(0x4000401000400000), CONST64(0x4000400040400000), CONST64(0x4000401040400000), - CONST64(0x4000400000004000), CONST64(0x4000401000004000), CONST64(0x4000400040004000), CONST64(0x4000401040004000), - CONST64(0x4000400000404000), CONST64(0x4000401000404000), CONST64(0x4000400040404000), CONST64(0x4000401040404000), - CONST64(0x4000400000000040), CONST64(0x4000401000000040), CONST64(0x4000400040000040), CONST64(0x4000401040000040), - CONST64(0x4000400000400040), CONST64(0x4000401000400040), CONST64(0x4000400040400040), CONST64(0x4000401040400040), - CONST64(0x4000400000004040), CONST64(0x4000401000004040), CONST64(0x4000400040004040), CONST64(0x4000401040004040), - CONST64(0x4000400000404040), CONST64(0x4000401000404040), CONST64(0x4000400040404040), CONST64(0x4000401040404040), - CONST64(0x0040400000000000), CONST64(0x0040401000000000), CONST64(0x0040400040000000), CONST64(0x0040401040000000), - CONST64(0x0040400000400000), CONST64(0x0040401000400000), CONST64(0x0040400040400000), CONST64(0x0040401040400000), - CONST64(0x0040400000004000), CONST64(0x0040401000004000), CONST64(0x0040400040004000), CONST64(0x0040401040004000), - CONST64(0x0040400000404000), CONST64(0x0040401000404000), CONST64(0x0040400040404000), CONST64(0x0040401040404000), - CONST64(0x0040400000000040), CONST64(0x0040401000000040), CONST64(0x0040400040000040), CONST64(0x0040401040000040), - CONST64(0x0040400000400040), CONST64(0x0040401000400040), CONST64(0x0040400040400040), CONST64(0x0040401040400040), - CONST64(0x0040400000004040), CONST64(0x0040401000004040), CONST64(0x0040400040004040), CONST64(0x0040401040004040), - CONST64(0x0040400000404040), CONST64(0x0040401000404040), CONST64(0x0040400040404040), CONST64(0x0040401040404040), - CONST64(0x4040400000000000), CONST64(0x4040401000000000), CONST64(0x4040400040000000), CONST64(0x4040401040000000), - CONST64(0x4040400000400000), CONST64(0x4040401000400000), CONST64(0x4040400040400000), CONST64(0x4040401040400000), - CONST64(0x4040400000004000), CONST64(0x4040401000004000), CONST64(0x4040400040004000), CONST64(0x4040401040004000), - CONST64(0x4040400000404000), CONST64(0x4040401000404000), CONST64(0x4040400040404000), CONST64(0x4040401040404000), - CONST64(0x4040400000000040), CONST64(0x4040401000000040), CONST64(0x4040400040000040), CONST64(0x4040401040000040), - CONST64(0x4040400000400040), CONST64(0x4040401000400040), CONST64(0x4040400040400040), CONST64(0x4040401040400040), - CONST64(0x4040400000004040), CONST64(0x4040401000004040), CONST64(0x4040400040004040), CONST64(0x4040401040004040), + }, +{ CONST64(0x0000000000000000), CONST64(0x0000001000000000), CONST64(0x0000000040000000), CONST64(0x0000001040000000), + CONST64(0x0000000000400000), CONST64(0x0000001000400000), CONST64(0x0000000040400000), CONST64(0x0000001040400000), + CONST64(0x0000000000004000), CONST64(0x0000001000004000), CONST64(0x0000000040004000), CONST64(0x0000001040004000), + CONST64(0x0000000000404000), CONST64(0x0000001000404000), CONST64(0x0000000040404000), CONST64(0x0000001040404000), + CONST64(0x0000000000000040), CONST64(0x0000001000000040), CONST64(0x0000000040000040), CONST64(0x0000001040000040), + CONST64(0x0000000000400040), CONST64(0x0000001000400040), CONST64(0x0000000040400040), CONST64(0x0000001040400040), + CONST64(0x0000000000004040), CONST64(0x0000001000004040), CONST64(0x0000000040004040), CONST64(0x0000001040004040), + CONST64(0x0000000000404040), CONST64(0x0000001000404040), CONST64(0x0000000040404040), CONST64(0x0000001040404040), + CONST64(0x4000000000000000), CONST64(0x4000001000000000), CONST64(0x4000000040000000), CONST64(0x4000001040000000), + CONST64(0x4000000000400000), CONST64(0x4000001000400000), CONST64(0x4000000040400000), CONST64(0x4000001040400000), + CONST64(0x4000000000004000), CONST64(0x4000001000004000), CONST64(0x4000000040004000), CONST64(0x4000001040004000), + CONST64(0x4000000000404000), CONST64(0x4000001000404000), CONST64(0x4000000040404000), CONST64(0x4000001040404000), + CONST64(0x4000000000000040), CONST64(0x4000001000000040), CONST64(0x4000000040000040), CONST64(0x4000001040000040), + CONST64(0x4000000000400040), CONST64(0x4000001000400040), CONST64(0x4000000040400040), CONST64(0x4000001040400040), + CONST64(0x4000000000004040), CONST64(0x4000001000004040), CONST64(0x4000000040004040), CONST64(0x4000001040004040), + CONST64(0x4000000000404040), CONST64(0x4000001000404040), CONST64(0x4000000040404040), CONST64(0x4000001040404040), + CONST64(0x0040000000000000), CONST64(0x0040001000000000), CONST64(0x0040000040000000), CONST64(0x0040001040000000), + CONST64(0x0040000000400000), CONST64(0x0040001000400000), CONST64(0x0040000040400000), CONST64(0x0040001040400000), + CONST64(0x0040000000004000), CONST64(0x0040001000004000), CONST64(0x0040000040004000), CONST64(0x0040001040004000), + CONST64(0x0040000000404000), CONST64(0x0040001000404000), CONST64(0x0040000040404000), CONST64(0x0040001040404000), + CONST64(0x0040000000000040), CONST64(0x0040001000000040), CONST64(0x0040000040000040), CONST64(0x0040001040000040), + CONST64(0x0040000000400040), CONST64(0x0040001000400040), CONST64(0x0040000040400040), CONST64(0x0040001040400040), + CONST64(0x0040000000004040), CONST64(0x0040001000004040), CONST64(0x0040000040004040), CONST64(0x0040001040004040), + CONST64(0x0040000000404040), CONST64(0x0040001000404040), CONST64(0x0040000040404040), CONST64(0x0040001040404040), + CONST64(0x4040000000000000), CONST64(0x4040001000000000), CONST64(0x4040000040000000), CONST64(0x4040001040000000), + CONST64(0x4040000000400000), CONST64(0x4040001000400000), CONST64(0x4040000040400000), CONST64(0x4040001040400000), + CONST64(0x4040000000004000), CONST64(0x4040001000004000), CONST64(0x4040000040004000), CONST64(0x4040001040004000), + CONST64(0x4040000000404000), CONST64(0x4040001000404000), CONST64(0x4040000040404000), CONST64(0x4040001040404000), + CONST64(0x4040000000000040), CONST64(0x4040001000000040), CONST64(0x4040000040000040), CONST64(0x4040001040000040), + CONST64(0x4040000000400040), CONST64(0x4040001000400040), CONST64(0x4040000040400040), CONST64(0x4040001040400040), + CONST64(0x4040000000004040), CONST64(0x4040001000004040), CONST64(0x4040000040004040), CONST64(0x4040001040004040), + CONST64(0x4040000000404040), CONST64(0x4040001000404040), CONST64(0x4040000040404040), CONST64(0x4040001040404040), + CONST64(0x0000400000000000), CONST64(0x0000401000000000), CONST64(0x0000400040000000), CONST64(0x0000401040000000), + CONST64(0x0000400000400000), CONST64(0x0000401000400000), CONST64(0x0000400040400000), CONST64(0x0000401040400000), + CONST64(0x0000400000004000), CONST64(0x0000401000004000), CONST64(0x0000400040004000), CONST64(0x0000401040004000), + CONST64(0x0000400000404000), CONST64(0x0000401000404000), CONST64(0x0000400040404000), CONST64(0x0000401040404000), + CONST64(0x0000400000000040), CONST64(0x0000401000000040), CONST64(0x0000400040000040), CONST64(0x0000401040000040), + CONST64(0x0000400000400040), CONST64(0x0000401000400040), CONST64(0x0000400040400040), CONST64(0x0000401040400040), + CONST64(0x0000400000004040), CONST64(0x0000401000004040), CONST64(0x0000400040004040), CONST64(0x0000401040004040), + CONST64(0x0000400000404040), CONST64(0x0000401000404040), CONST64(0x0000400040404040), CONST64(0x0000401040404040), + CONST64(0x4000400000000000), CONST64(0x4000401000000000), CONST64(0x4000400040000000), CONST64(0x4000401040000000), + CONST64(0x4000400000400000), CONST64(0x4000401000400000), CONST64(0x4000400040400000), CONST64(0x4000401040400000), + CONST64(0x4000400000004000), CONST64(0x4000401000004000), CONST64(0x4000400040004000), CONST64(0x4000401040004000), + CONST64(0x4000400000404000), CONST64(0x4000401000404000), CONST64(0x4000400040404000), CONST64(0x4000401040404000), + CONST64(0x4000400000000040), CONST64(0x4000401000000040), CONST64(0x4000400040000040), CONST64(0x4000401040000040), + CONST64(0x4000400000400040), CONST64(0x4000401000400040), CONST64(0x4000400040400040), CONST64(0x4000401040400040), + CONST64(0x4000400000004040), CONST64(0x4000401000004040), CONST64(0x4000400040004040), CONST64(0x4000401040004040), + CONST64(0x4000400000404040), CONST64(0x4000401000404040), CONST64(0x4000400040404040), CONST64(0x4000401040404040), + CONST64(0x0040400000000000), CONST64(0x0040401000000000), CONST64(0x0040400040000000), CONST64(0x0040401040000000), + CONST64(0x0040400000400000), CONST64(0x0040401000400000), CONST64(0x0040400040400000), CONST64(0x0040401040400000), + CONST64(0x0040400000004000), CONST64(0x0040401000004000), CONST64(0x0040400040004000), CONST64(0x0040401040004000), + CONST64(0x0040400000404000), CONST64(0x0040401000404000), CONST64(0x0040400040404000), CONST64(0x0040401040404000), + CONST64(0x0040400000000040), CONST64(0x0040401000000040), CONST64(0x0040400040000040), CONST64(0x0040401040000040), + CONST64(0x0040400000400040), CONST64(0x0040401000400040), CONST64(0x0040400040400040), CONST64(0x0040401040400040), + CONST64(0x0040400000004040), CONST64(0x0040401000004040), CONST64(0x0040400040004040), CONST64(0x0040401040004040), + CONST64(0x0040400000404040), CONST64(0x0040401000404040), CONST64(0x0040400040404040), CONST64(0x0040401040404040), + CONST64(0x4040400000000000), CONST64(0x4040401000000000), CONST64(0x4040400040000000), CONST64(0x4040401040000000), + CONST64(0x4040400000400000), CONST64(0x4040401000400000), CONST64(0x4040400040400000), CONST64(0x4040401040400000), + CONST64(0x4040400000004000), CONST64(0x4040401000004000), CONST64(0x4040400040004000), CONST64(0x4040401040004000), + CONST64(0x4040400000404000), CONST64(0x4040401000404000), CONST64(0x4040400040404000), CONST64(0x4040401040404000), + CONST64(0x4040400000000040), CONST64(0x4040401000000040), CONST64(0x4040400040000040), CONST64(0x4040401040000040), + CONST64(0x4040400000400040), CONST64(0x4040401000400040), CONST64(0x4040400040400040), CONST64(0x4040401040400040), + CONST64(0x4040400000004040), CONST64(0x4040401000004040), CONST64(0x4040400040004040), CONST64(0x4040401040004040), CONST64(0x4040400000404040), CONST64(0x4040401000404040), CONST64(0x4040400040404040), CONST64(0x4040401040404040) }}; - + #endif static void cookey(const ulong32 *raw1, ulong32 *keyout); -#ifdef LTC_CLEAN_STACK -static void s_deskey(const unsigned char *key, short edf, ulong32 *keyout) +#ifdef CLEAN_STACK +void _deskey(const unsigned char *key, short edf, ulong32 *keyout) #else -static void deskey(const unsigned char *key, short edf, ulong32 *keyout) +void deskey(const unsigned char *key, short edf, ulong32 *keyout) #endif { ulong32 i, j, l, m, n, kn[32]; @@ -1358,16 +1344,16 @@ static void deskey(const unsigned char *key, short edf, ulong32 *keyout) cookey(kn, keyout); } -#ifdef LTC_CLEAN_STACK -static void deskey(const unsigned char *key, short edf, ulong32 *keyout) +#ifdef CLEAN_STACK +void deskey(const unsigned char *key, short edf, ulong32 *keyout) { - s_deskey(key, edf, keyout); + _deskey(key, edf, keyout); burn_stack(sizeof(int)*5 + sizeof(ulong32)*32 + sizeof(unsigned char)*112); } #endif -#ifdef LTC_CLEAN_STACK -static void s_cookey(const ulong32 *raw1, ulong32 *keyout) +#ifdef CLEAN_STACK +static void _cookey(const ulong32 *raw1, ulong32 *keyout) #else static void cookey(const ulong32 *raw1, ulong32 *keyout) #endif @@ -1391,21 +1377,21 @@ static void cookey(const ulong32 *raw1, ulong32 *keyout) *cook++ |= (*raw1 & 0x0000003fL); } - XMEMCPY(keyout, dough, sizeof(dough)); + XMEMCPY(keyout, dough, sizeof dough); } -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK static void cookey(const ulong32 *raw1, ulong32 *keyout) { - s_cookey(raw1, keyout); + _cookey(raw1, keyout); burn_stack(sizeof(ulong32 *) * 2 + sizeof(ulong32)*32 + sizeof(int)); } #endif -#ifndef LTC_CLEAN_STACK +#ifndef CLEAN_STACK static void desfunc(ulong32 *block, const ulong32 *keys) #else -static void s_desfunc(ulong32 *block, const ulong32 *keys) +static void _desfunc(ulong32 *block, const ulong32 *keys) #endif { ulong32 work, right, leftt; @@ -1414,7 +1400,7 @@ static void s_desfunc(ulong32 *block, const ulong32 *keys) leftt = block[0]; right = block[1]; -#ifdef LTC_SMALL_CODE +#ifdef SMALL_CODE work = ((leftt >> 4) ^ right) & 0x0f0f0f0fL; right ^= work; leftt ^= (work << 4); @@ -1431,41 +1417,41 @@ static void s_desfunc(ulong32 *block, const ulong32 *keys) leftt ^= work; right ^= (work << 8); - right = ROLc(right, 1); + right = ROL(right, 1); work = (leftt ^ right) & 0xaaaaaaaaL; - + leftt ^= work; right ^= work; - leftt = ROLc(leftt, 1); -#else + leftt = ROL(leftt, 1); +#else { ulong64 tmp; - tmp = des_ip[0][LTC_BYTE(leftt, 0)] ^ - des_ip[1][LTC_BYTE(leftt, 1)] ^ - des_ip[2][LTC_BYTE(leftt, 2)] ^ - des_ip[3][LTC_BYTE(leftt, 3)] ^ - des_ip[4][LTC_BYTE(right, 0)] ^ - des_ip[5][LTC_BYTE(right, 1)] ^ - des_ip[6][LTC_BYTE(right, 2)] ^ - des_ip[7][LTC_BYTE(right, 3)]; + tmp = des_ip[0][byte(leftt, 0)] ^ + des_ip[1][byte(leftt, 1)] ^ + des_ip[2][byte(leftt, 2)] ^ + des_ip[3][byte(leftt, 3)] ^ + des_ip[4][byte(right, 0)] ^ + des_ip[5][byte(right, 1)] ^ + des_ip[6][byte(right, 2)] ^ + des_ip[7][byte(right, 3)]; leftt = (ulong32)(tmp >> 32); right = (ulong32)(tmp & 0xFFFFFFFFUL); } #endif for (cur_round = 0; cur_round < 8; cur_round++) { - work = RORc(right, 4) ^ *keys++; + work = ROR(right, 4) ^ *keys++; leftt ^= SP7[work & 0x3fL] - ^ SP5[(work >> 8) & 0x3fL] - ^ SP3[(work >> 16) & 0x3fL] - ^ SP1[(work >> 24) & 0x3fL]; + ^ SP5[(work >> 8) & 0x3fL] + ^ SP3[(work >> 16) & 0x3fL] + ^ SP1[(work >> 24) & 0x3fL]; work = right ^ *keys++; leftt ^= SP8[ work & 0x3fL] ^ SP6[(work >> 8) & 0x3fL] ^ SP4[(work >> 16) & 0x3fL] ^ SP2[(work >> 24) & 0x3fL]; - work = RORc(leftt, 4) ^ *keys++; + work = ROR(leftt, 4) ^ *keys++; right ^= SP7[ work & 0x3fL] ^ SP5[(work >> 8) & 0x3fL] ^ SP3[(work >> 16) & 0x3fL] @@ -1477,16 +1463,16 @@ static void s_desfunc(ulong32 *block, const ulong32 *keys) ^ SP2[(work >> 24) & 0x3fL]; } -#ifdef LTC_SMALL_CODE - right = RORc(right, 1); +#ifdef SMALL_CODE + right = ROR(right, 1); work = (leftt ^ right) & 0xaaaaaaaaL; leftt ^= work; right ^= work; - leftt = RORc(leftt, 1); + leftt = ROR(leftt, 1); work = ((leftt >> 8) ^ right) & 0x00ff00ffL; right ^= work; leftt ^= (work << 8); - /* -- */ + // -- work = ((leftt >> 2) ^ right) & 0x33333333L; right ^= work; leftt ^= (work << 2); @@ -1496,46 +1482,38 @@ static void s_desfunc(ulong32 *block, const ulong32 *keys) work = ((right >> 4) ^ leftt) & 0x0f0f0f0fL; leftt ^= work; right ^= (work << 4); -#else +#else { ulong64 tmp; - tmp = des_fp[0][LTC_BYTE(leftt, 0)] ^ - des_fp[1][LTC_BYTE(leftt, 1)] ^ - des_fp[2][LTC_BYTE(leftt, 2)] ^ - des_fp[3][LTC_BYTE(leftt, 3)] ^ - des_fp[4][LTC_BYTE(right, 0)] ^ - des_fp[5][LTC_BYTE(right, 1)] ^ - des_fp[6][LTC_BYTE(right, 2)] ^ - des_fp[7][LTC_BYTE(right, 3)]; + tmp = des_fp[0][byte(leftt, 0)] ^ + des_fp[1][byte(leftt, 1)] ^ + des_fp[2][byte(leftt, 2)] ^ + des_fp[3][byte(leftt, 3)] ^ + des_fp[4][byte(right, 0)] ^ + des_fp[5][byte(right, 1)] ^ + des_fp[6][byte(right, 2)] ^ + des_fp[7][byte(right, 3)]; leftt = (ulong32)(tmp >> 32); right = (ulong32)(tmp & 0xFFFFFFFFUL); } #endif - + block[0] = right; block[1] = leftt; } -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK static void desfunc(ulong32 *block, const ulong32 *keys) { - s_desfunc(block, keys); + _desfunc(block, keys); burn_stack(sizeof(ulong32) * 4 + sizeof(int)); } #endif - /** - Initialize the DES block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ int des_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); if (num_rounds != 0 && num_rounds != 16) { return CRYPT_INVALID_ROUNDS; @@ -1551,427 +1529,158 @@ int des_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke return CRYPT_OK; } - /** - Initialize the DES-X block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ -int desx_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - if(num_rounds != 0 && num_rounds != 16) { - return CRYPT_INVALID_ROUNDS; - } - - if (keylen != 24) { - return CRYPT_INVALID_KEYSIZE; - } - - deskey(key, EN0, skey->desx.ek); - deskey(key, DE1, skey->desx.dk); - - LOAD32H(skey->desx.k[0][0], key + 8); - LOAD32H(skey->desx.k[0][1], key + 12); - LOAD32H(skey->desx.k[1][0], key + 16); - LOAD32H(skey->desx.k[1][1], key + 20); - - return CRYPT_OK; -} - - /** - Initialize the 3DES-EDE block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ int des3_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); if(num_rounds != 0 && num_rounds != 16) { return CRYPT_INVALID_ROUNDS; } - if (keylen != 24 && keylen != 16) { + if (keylen != 24) { return CRYPT_INVALID_KEYSIZE; } deskey(key, EN0, skey->des3.ek[0]); deskey(key+8, DE1, skey->des3.ek[1]); - if (keylen == 24) { - deskey(key+16, EN0, skey->des3.ek[2]); - } else { - /* two-key 3DES: K3=K1 */ - deskey(key, EN0, skey->des3.ek[2]); - } + deskey(key+16, EN0, skey->des3.ek[2]); deskey(key, DE1, skey->des3.dk[2]); deskey(key+8, EN0, skey->des3.dk[1]); - if (keylen == 24) { - deskey(key+16, DE1, skey->des3.dk[0]); - } else { - /* two-key 3DES: K3=K1 */ - deskey(key, DE1, skey->des3.dk[0]); - } + deskey(key+16, DE1, skey->des3.dk[0]); return CRYPT_OK; } -/** - Encrypts a block of text with DES - @param pt The input plaintext (8 bytes) - @param ct The output ciphertext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +void des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) { ulong32 work[2]; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(key != NULL); LOAD32H(work[0], pt+0); LOAD32H(work[1], pt+4); - desfunc(work, skey->des.ek); + desfunc(work, key->des.ek); STORE32H(work[0],ct+0); STORE32H(work[1],ct+4); - return CRYPT_OK; } -/** - Decrypts a block of text with DES - @param ct The input ciphertext (8 bytes) - @param pt The output plaintext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +void des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) { ulong32 work[2]; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(key != NULL); LOAD32H(work[0], ct+0); LOAD32H(work[1], ct+4); - desfunc(work, skey->des.dk); + desfunc(work, key->des.dk); STORE32H(work[0],pt+0); STORE32H(work[1],pt+4); - return CRYPT_OK; } -/** - Encrypts a block of text with DES-X - @param pt The input plaintext (8 bytes) - @param ct The output ciphertext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int desx_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +void des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) { ulong32 work[2]; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); + + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(key != NULL); LOAD32H(work[0], pt+0); LOAD32H(work[1], pt+4); - work[0] ^= skey->desx.k[0][0]; - work[1] ^= skey->desx.k[0][1]; - desfunc(work, skey->desx.ek); - work[0] ^= skey->desx.k[1][0]; - work[1] ^= skey->desx.k[1][1]; + desfunc(work, key->des3.ek[0]); + desfunc(work, key->des3.ek[1]); + desfunc(work, key->des3.ek[2]); STORE32H(work[0],ct+0); STORE32H(work[1],ct+4); - return CRYPT_OK; } -/** - Decrypts a block of text with DES-X - @param ct The input ciphertext (8 bytes) - @param pt The output plaintext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int desx_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +void des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) { ulong32 work[2]; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(key != NULL); LOAD32H(work[0], ct+0); LOAD32H(work[1], ct+4); - work[0] ^= skey->desx.k[1][0]; - work[1] ^= skey->desx.k[1][1]; - desfunc(work, skey->des.dk); - work[0] ^= skey->desx.k[0][0]; - work[1] ^= skey->desx.k[0][1]; + desfunc(work, key->des3.dk[0]); + desfunc(work, key->des3.dk[1]); + desfunc(work, key->des3.dk[2]); STORE32H(work[0],pt+0); STORE32H(work[1],pt+4); - return CRYPT_OK; } -/** - Encrypts a block of text with 3DES-EDE - @param pt The input plaintext (8 bytes) - @param ct The output ciphertext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - ulong32 work[2]; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - LOAD32H(work[0], pt+0); - LOAD32H(work[1], pt+4); - desfunc(work, skey->des3.ek[0]); - desfunc(work, skey->des3.ek[1]); - desfunc(work, skey->des3.ek[2]); - STORE32H(work[0],ct+0); - STORE32H(work[1],ct+4); - return CRYPT_OK; -} - -/** - Decrypts a block of text with 3DES-EDE - @param ct The input ciphertext (8 bytes) - @param pt The output plaintext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - ulong32 work[2]; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - LOAD32H(work[0], ct+0); - LOAD32H(work[1], ct+4); - desfunc(work, skey->des3.dk[0]); - desfunc(work, skey->des3.dk[1]); - desfunc(work, skey->des3.dk[2]); - STORE32H(work[0],pt+0); - STORE32H(work[1],pt+4); - return CRYPT_OK; -} - -/** - Performs a self-test of the DES block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ int des_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else + int err; static const struct des_test_case { + int num, mode; // mode 1 = encrypt unsigned char key[8], txt[8], out[8]; } cases[] = { - { { 0x10, 0x31, 0x6E, 0x02, 0x8C, 0x8F, 0x3B, 0x4A }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x82, 0xDC, 0xBA, 0xFB, 0xDE, 0xAB, 0x66, 0x02 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x95, 0xF8, 0xA5, 0xE5, 0xDD, 0x31, 0xD9, 0x00 }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0xDD, 0x7F, 0x12, 0x1C, 0xA5, 0x01, 0x56, 0x19 }, - { 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x2E, 0x86, 0x53, 0x10, 0x4F, 0x38, 0x34, 0xEA }, - { 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x4B, 0xD3, 0x88, 0xFF, 0x6C, 0xD8, 0x1D, 0x4F }, - { 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x20, 0xB9, 0xE7, 0x67, 0xB2, 0xFB, 0x14, 0x56 }, - { 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x55, 0x57, 0x93, 0x80, 0xD7, 0x71, 0x38, 0xEF }, - { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x6C, 0xC5, 0xDE, 0xFA, 0xAF, 0x04, 0x51, 0x2F }, - { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x0D, 0x9F, 0x27, 0x9B, 0xA5, 0xD8, 0x72, 0x60 }, - { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0xD9, 0x03, 0x1B, 0x02, 0x71, 0xBD, 0x5A, 0x0A }, - { 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { 1, 1, { 0x10, 0x31, 0x6E, 0x02, 0x8C, 0x8F, 0x3B, 0x4A }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x82, 0xDC, 0xBA, 0xFB, 0xDE, 0xAB, 0x66, 0x02 } }, + { 2, 1, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x95, 0xF8, 0xA5, 0xE5, 0xDD, 0x31, 0xD9, 0x00 }, + { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { 3, 1, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0xDD, 0x7F, 0x12, 0x1C, 0xA5, 0x01, 0x56, 0x19 }, + { 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { 4, 1, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x2E, 0x86, 0x53, 0x10, 0x4F, 0x38, 0x34, 0xEA }, + { 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { 5, 1, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x4B, 0xD3, 0x88, 0xFF, 0x6C, 0xD8, 0x1D, 0x4F }, + { 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { 6, 1, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x20, 0xB9, 0xE7, 0x67, 0xB2, 0xFB, 0x14, 0x56 }, + { 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { 7, 1, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x55, 0x57, 0x93, 0x80, 0xD7, 0x71, 0x38, 0xEF }, + { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { 8, 1, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x6C, 0xC5, 0xDE, 0xFA, 0xAF, 0x04, 0x51, 0x2F }, + { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { 9, 1, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x0D, 0x9F, 0x27, 0x9B, 0xA5, 0xD8, 0x72, 0x60 }, + { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + {10, 1, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0xD9, 0x03, 0x1B, 0x02, 0x71, 0xBD, 0x5A, 0x0A }, + { 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x95, 0xA8, 0xD7, 0x28, 0x13, 0xDA, 0xA9, 0x4D } }, - { { 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x0E, 0xEC, 0x14, 0x87, 0xDD, 0x8C, 0x26, 0xD5 } }, - { { 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x7A, 0xD1, 0x6F, 0xFB, 0x79, 0xC4, 0x59, 0x26 } }, - { { 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xD3, 0x74, 0x62, 0x94, 0xCA, 0x6A, 0x6C, 0xF3 } }, - { { 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x80, 0x9F, 0x5F, 0x87, 0x3C, 0x1F, 0xD7, 0x61 } }, - { { 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xC0, 0x2F, 0xAF, 0xFE, 0xC9, 0x89, 0xD1, 0xFC } }, - { { 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x46, 0x15, 0xAA, 0x1D, 0x33, 0xE7, 0x2F, 0x10 } }, - { { 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x20, 0x55, 0x12, 0x33, 0x50, 0xC0, 0x08, 0x58 } }, - { { 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xDF, 0x3B, 0x99, 0xD6, 0x57, 0x73, 0x97, 0xC8 } }, - { { 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x31, 0xFE, 0x17, 0x36, 0x9B, 0x52, 0x88, 0xC9 } }, - { { 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xDF, 0xDD, 0x3C, 0xC6, 0x4D, 0xAE, 0x16, 0x42 } }, - { { 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x17, 0x8C, 0x83, 0xCE, 0x2B, 0x39, 0x9D, 0x94 } }, - { { 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x50, 0xF6, 0x36, 0x32, 0x4A, 0x9B, 0x7F, 0x80 } }, - { { 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xA8, 0x46, 0x8E, 0xE3, 0xBC, 0x18, 0xF0, 0x6D } }, - { { 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xA2, 0xDC, 0x9E, 0x92, 0xFD, 0x3C, 0xDE, 0x92 } }, - { { 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xCA, 0xC0, 0x9F, 0x79, 0x7D, 0x03, 0x12, 0x87 } }, - { { 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x90, 0xBA, 0x68, 0x0B, 0x22, 0xAE, 0xB5, 0x25 } }, - { { 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xCE, 0x7A, 0x24, 0xF3, 0x50, 0xE2, 0x80, 0xB6 } }, - { { 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x88, 0x2B, 0xFF, 0x0A, 0xA0, 0x1A, 0x0B, 0x87 } }, - { { 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x25, 0x61, 0x02, 0x88, 0x92, 0x45, 0x11, 0xC2 } }, - { { 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xC7, 0x15, 0x16, 0xC2, 0x9C, 0x75, 0xD1, 0x70 } }, - { { 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x51, 0x99, 0xC2, 0x9A, 0x52, 0xC9, 0xF0, 0x59 } }, - { { 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xC2, 0x2F, 0x0A, 0x29, 0x4A, 0x71, 0xF2, 0x9F } }, - { { 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xEE, 0x37, 0x14, 0x83, 0x71, 0x4C, 0x02, 0xEA } }, - { { 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xA8, 0x1F, 0xBD, 0x44, 0x8F, 0x9E, 0x52, 0x2F } }, - { { 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x4F, 0x64, 0x4C, 0x92, 0xE1, 0x92, 0xDF, 0xED } }, - { { 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x1A, 0xFA, 0x9A, 0x66, 0xA6, 0xDF, 0x92, 0xAE } }, - { { 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xB3, 0xC1, 0xCC, 0x71, 0x5C, 0xB8, 0x79, 0xD8 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x19, 0xD0, 0x32, 0xE6, 0x4A, 0xB0, 0xBD, 0x8B } }, - { { 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x3C, 0xFA, 0xA7, 0xA7, 0xDC, 0x87, 0x20, 0xDC } }, - { { 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xB7, 0x26, 0x5F, 0x7F, 0x44, 0x7A, 0xC6, 0xF3 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x9D, 0xB7, 0x3B, 0x3C, 0x0D, 0x16, 0x3F, 0x54 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x81, 0x81, 0xB6, 0x5B, 0xAB, 0xF4, 0xA9, 0x75 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x93, 0xC9, 0xB6, 0x40, 0x42, 0xEA, 0xA2, 0x40 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x55, 0x70, 0x53, 0x08, 0x29, 0x70, 0x55, 0x92 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x86, 0x38, 0x80, 0x9E, 0x87, 0x87, 0x87, 0xA0 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x41, 0xB9, 0xA7, 0x9A, 0xF7, 0x9A, 0xC2, 0x08 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x7A, 0x9B, 0xE4, 0x2F, 0x20, 0x09, 0xA8, 0x92 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x29, 0x03, 0x8D, 0x56, 0xBA, 0x6D, 0x27, 0x45 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x54, 0x95, 0xC6, 0xAB, 0xF1, 0xE5, 0xDF, 0x51 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xAE, 0x13, 0xDB, 0xD5, 0x61, 0x48, 0x89, 0x33 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x02, 0x4D, 0x1F, 0xFA, 0x89, 0x04, 0xE3, 0x89 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xD1, 0x39, 0x97, 0x12, 0xF9, 0x9B, 0xF0, 0x2E } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x14, 0xC1, 0xD7, 0xC1, 0xCF, 0xFE, 0xC7, 0x9E } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x1D, 0xE5, 0x27, 0x9D, 0xAE, 0x3B, 0xED, 0x6F } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xE9, 0x41, 0xA3, 0x3F, 0x85, 0x50, 0x13, 0x03 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xDA, 0x99, 0xDB, 0xBC, 0x9A, 0x03, 0xF3, 0x79 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xB7, 0xFC, 0x92, 0xF9, 0x1D, 0x8E, 0x92, 0xE9 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xAE, 0x8E, 0x5C, 0xAA, 0x3C, 0xA0, 0x4E, 0x85 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x9C, 0xC6, 0x2D, 0xF4, 0x3B, 0x6E, 0xED, 0x74 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x40 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xD8, 0x63, 0xDB, 0xB5, 0xC5, 0x9A, 0x91, 0xA0 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xA1, 0xAB, 0x21, 0x90, 0x54, 0x5B, 0x91, 0xD7 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x08, 0x75, 0x04, 0x1E, 0x64, 0xC5, 0x70, 0xF7 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x08 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x5A, 0x59, 0x45, 0x28, 0xBE, 0xBE, 0xF1, 0xCC } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xFC, 0xDB, 0x32, 0x91, 0xDE, 0x21, 0xF0, 0xC0 } }, - { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x86, 0x9E, 0xFD, 0x7F, 0x9F, 0x26, 0x5A, 0x09 } }, + { 1, 0, { 0x10, 0x31, 0x6E, 0x02, 0x8C, 0x8F, 0x3B, 0x4A }, + { 0x82, 0xDC, 0xBA, 0xFB, 0xDE, 0xAB, 0x66, 0x02 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, + { 2, 0, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x95, 0xF8, 0xA5, 0xE5, 0xDD, 0x31, 0xD9, 0x00 } }, + { 3, 0, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0xDD, 0x7F, 0x12, 0x1C, 0xA5, 0x01, 0x56, 0x19 } }, + { 4, 0, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x2E, 0x86, 0x53, 0x10, 0x4F, 0x38, 0x34, 0xEA } }, + { 5, 0, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x4B, 0xD3, 0x88, 0xFF, 0x6C, 0xD8, 0x1D, 0x4F } }, + { 6, 0, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x20, 0xB9, 0xE7, 0x67, 0xB2, 0xFB, 0x14, 0x56 } }, + { 7, 0, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x55, 0x57, 0x93, 0x80, 0xD7, 0x71, 0x38, 0xEF } }, + { 8, 0, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x6C, 0xC5, 0xDE, 0xFA, 0xAF, 0x04, 0x51, 0x2F } }, + { 9, 0, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x0D, 0x9F, 0x27, 0x9B, 0xA5, 0xD8, 0x72, 0x60 } }, + {10, 0, { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0xD9, 0x03, 0x1B, 0x02, 0x71, 0xBD, 0x5A, 0x0A } } /*** more test cases you could add if you are not convinced (the above test cases aren't really too good): @@ -2014,232 +1723,91 @@ int des_test(void) http://www.ecs.soton.ac.uk/~prw99r/ez438/vectors.txt ***/ }; - unsigned char key[8], pt[8], ct[8], tmp[8]; - symmetric_key skey; - int i, err; + int i, y; + unsigned char tmp[8]; + symmetric_key des; - for (i = 0; i < (int)LTC_ARRAY_SIZE(cases); i++) + for(i=0; i < (int)(sizeof(cases)/sizeof(cases[0])); i++) { - if ((err = des_setup(cases[i].key, 8, 0, &skey)) != CRYPT_OK) { - return err; + if ((err = des_setup(cases[i].key, 8, 0, &des)) != CRYPT_OK) { + return err; + } + if (cases[i].mode != 0) { + des_ecb_encrypt(cases[i].txt, tmp, &des); + } else { + des_ecb_decrypt(cases[i].txt, tmp, &des); } - des_ecb_encrypt(cases[i].txt, ct, &skey); - - if (ltc_compare_testvector(ct, sizeof(ct), cases[i].out, 8, "DES Encrypt", i) != 0) { - return CRYPT_FAIL_TESTVECTOR; + if (memcmp(cases[i].out, tmp, sizeof(tmp)) != 0) { + return CRYPT_FAIL_TESTVECTOR; } - des_ecb_decrypt(ct, pt, &skey); - - if (ltc_compare_testvector(pt, sizeof(pt), cases[i].txt, 8, "DES Decrypt", i) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - } - - /* See if we can encrypt all zero bytes 1000 times, decrypt and come back to where we started */ - - for (i = 0; i < 8; i++) key[i] = i; - - if ((err = des_setup(key, 8, 0, &skey)) != CRYPT_OK) { - return err; - } - - for (i = 0; i < 8; i++) pt[i] = tmp[i] = 0; - for (i = 0; i < 1000; i++) des_ecb_encrypt(tmp, tmp, &skey); - for (i = 0; i < 1000; i++) des_ecb_decrypt(tmp, tmp, &skey); - - if (ltc_compare_testvector(tmp, 8, pt, 8, "DES", 0) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } + /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ + for (y = 0; y < 8; y++) tmp[y] = 0; + for (y = 0; y < 1000; y++) des_ecb_encrypt(tmp, tmp, &des); + for (y = 0; y < 1000; y++) des_ecb_decrypt(tmp, tmp, &des); + for (y = 0; y < 8; y++) if (tmp[y] != 0) return CRYPT_FAIL_TESTVECTOR; +} return CRYPT_OK; #endif } -int desx_test(void) -{ - #ifndef LTC_TEST - return CRYPT_NOP; - #else - unsigned char key[24], pt[8], tmp[8]; - symmetric_key skey; - int i, err; - - if ((err = des_test()) != CRYPT_OK) { - return err; - } - - /* See if we can encrypt all zero bytes 1000 times, decrypt and come back to where we started */ - - for (i = 0; i < 24; i++) key[i] = i; - - if ((err = desx_setup(key, 24, 0, &skey)) != CRYPT_OK) { - return err; - } - - for (i = 0; i < 8; i++) pt[i] = tmp[i] = 0; - for (i = 0; i < 1000; i++) desx_ecb_encrypt(tmp, tmp, &skey); - for (i = 0; i < 1000; i++) desx_ecb_decrypt(tmp, tmp, &skey); - - if (ltc_compare_testvector(tmp, 8, pt, 8, "DES-X", 0) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; - #endif -} - int des3_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else - static const struct des3_test_case { - unsigned char key[16], txt[8], out[8]; - } cases[] = { - /* - https://www.cosic.esat.kuleuven.be/nessie/testvectors/bc/des/Triple-Des-2-Key-128-64.unverified.test-vectors - */ - { { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xFA, 0xFD, 0x50, 0x84, 0x37, 0x4F, 0xCE, 0x34 } }, - { { 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x60, 0xCC, 0x37, 0xB7, 0xB5, 0x37, 0xA1, 0xDC } }, - { { 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xBE, 0x3E, 0x73, 0x04, 0xFE, 0x92, 0xC2, 0xBC } }, - { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00 }, - { 0xE5, 0xA9, 0xE3, 0x80, 0x03, 0xA5, 0xA0, 0xFD }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, - { { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }, - { 0xE4, 0xFC, 0x19, 0xD6, 0x94, 0x63, 0xB7, 0x83 }, - { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 } }, - }; - unsigned char key[24], pt[8], ct[8], tmp[8]; - symmetric_key skey; - int i, err; + #else + unsigned char key[24], pt[8], ct[8], tmp[8]; + symmetric_key skey; + int x, err; - if ((err = des_test()) != CRYPT_OK) { - return err; - } + if ((err = des_test()) != CRYPT_OK) { + return err; + } - for (i = 0; i < (int)LTC_ARRAY_SIZE(cases); i++) - { - if ((err = des3_setup(cases[i].key, 16, 0, &skey)) != CRYPT_OK) { - return err; - } + for (x = 0; x < 8; x++) { + pt[x] = x; + } + + for (x = 0; x < 24; x++) { + key[x] = x; + } - des3_ecb_encrypt(cases[i].txt, ct, &skey); - - if (ltc_compare_testvector(ct, sizeof(ct), cases[i].out, 8, "3DES Encrypt", i) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - des3_ecb_decrypt(ct, pt, &skey); - - if (ltc_compare_testvector(pt, sizeof(pt), cases[i].txt, 8, "3DES Decrypt", i) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - } - - /* See if we can encrypt all zero bytes 1000 times, decrypt and come back to where we started */ - - for (i = 0; i < 24; i++) key[i] = i; - - if ((err = des3_setup(key, 24, 0, &skey)) != CRYPT_OK) { - return err; - } - - for (i = 0; i < 8; i++) pt[i] = tmp[i] = 0; - for (i = 0; i < 1000; i++) des3_ecb_encrypt(tmp, tmp, &skey); - for (i = 0; i < 1000; i++) des3_ecb_decrypt(tmp, tmp, &skey); - - if (ltc_compare_testvector(tmp, 8, pt, 8, "3DES", 0) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; + if ((err = des3_setup(key, 24, 0, &skey)) != CRYPT_OK) { + return err; + } + + des3_ecb_encrypt(pt, ct, &skey); + des3_ecb_decrypt(ct, tmp, &skey); + + if (memcmp(pt, tmp, 8) != 0) { + return CRYPT_FAIL_TESTVECTOR; + } + + return CRYPT_OK; #endif } -/** Terminate the context - @param skey The scheduled key -*/ -void des_done(symmetric_key *skey) +int des_keysize(int *desired_keysize) { - LTC_UNUSED_PARAM(skey); -} - -/** Terminate the context - @param skey The scheduled key -*/ -void desx_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - -/** Terminate the context - @param skey The scheduled key -*/ -void des3_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int des_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if(*keysize < 8) { + _ARGCHK(desired_keysize != NULL); + if(*desired_keysize < 8) { return CRYPT_INVALID_KEYSIZE; } - *keysize = 8; + *desired_keysize = 8; return CRYPT_OK; } -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int desx_keysize(int *keysize) +int des3_keysize(int *desired_keysize) { - LTC_ARGCHK(keysize != NULL); - if(*keysize < 24) { + _ARGCHK(desired_keysize != NULL); + if(*desired_keysize < 24) { return CRYPT_INVALID_KEYSIZE; } - *keysize = 24; + *desired_keysize = 24; return CRYPT_OK; } -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int des3_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize < 16) { - return CRYPT_INVALID_KEYSIZE; - } - if (*keysize < 24) { - *keysize = 16; - return CRYPT_OK; - } - *keysize = 24; - return CRYPT_OK; -} - -#undef EN0 -#undef DE1 - #endif diff --git a/dh.c b/dh.c new file mode 100644 index 00000000..f2defb0c --- /dev/null +++ b/dh.c @@ -0,0 +1,466 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef MDH + +/* max export size we'll encounter (smaller than this but lets round up a bit */ +#define DH_BUF_SIZE 1200 + +/* This holds the key settings. ***MUST*** be organized by size from smallest to largest. */ +static const struct { + int size; + char *name, *base, *prime; +} sets[] = { +#ifdef DH768 +{ + 96, + "DH-768", + "4", + "F///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "//////m3wvV" +}, +#endif +#ifdef DH1024 +{ + 128, + "DH-1024", + "4", + "F///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////m3C47" +}, +#endif +#ifdef DH1280 +{ + 160, + "DH-1280", + "4", + "F///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "//////////////////////////////m4kSN" +}, +#endif +#ifdef DH1536 +{ + 192, + "DH-1536", + "4", + "F///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////m5uqd" +}, +#endif +#ifdef DH1792 +{ + 224, + "DH-1792", + "4", + "F///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "//////////////////////////////////////////////////////mT/sd" +}, +#endif +#ifdef DH2048 +{ + 256, + "DH-2048", + "4", + "3///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "/////////////////////////////////////////m8MPh" +}, +#endif +#ifdef DH2560 +{ + 320, + "DH-2560", + "4", + "3///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "/////mKFpF" +}, +#endif +#ifdef DH3072 +{ + 384, + "DH-3072", + "4", + "3///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "/////////////////////////////m32nN" +}, +#endif +#ifdef DH4096 +{ + 512, + "DH-4096", + "4", + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "/////////////////////m8pOF" +}, +#endif +{ + 0, + NULL, + NULL, + NULL +} +}; + +static int is_valid_idx(int n) +{ + int x; + + for (x = 0; sets[x].size; x++); + if ((n < 0) || (n >= x)) { + return 0; + } + return 1; +} + +int dh_test(void) +{ + mp_int p, g, tmp; + int x, err, primality; + + if ((err = mp_init_multi(&p, &g, &tmp, NULL)) != MP_OKAY) { goto error; } + + for (x = 0; sets[x].size != 0; x++) { +#if 0 + printf("dh_test():testing size %d-bits\n", sets[x].size * 8); +#endif + if ((err = mp_read_radix(&g,(char *)sets[x].base, 64)) != MP_OKAY) { goto error; } + if ((err = mp_read_radix(&p,(char *)sets[x].prime, 64)) != MP_OKAY) { goto error; } + + /* ensure p is prime */ + if ((err = is_prime(&p, &primality)) != CRYPT_OK) { goto done; } + if (primality == 0) { + err = CRYPT_FAIL_TESTVECTOR; + goto done; + } + + if ((err = mp_sub_d(&p, 1, &tmp)) != MP_OKAY) { goto error; } + if ((err = mp_div_2(&tmp, &tmp)) != MP_OKAY) { goto error; } + + /* ensure (p-1)/2 is prime */ + if ((err = is_prime(&tmp, &primality)) != CRYPT_OK) { goto done; } + if (primality == 0) { + err = CRYPT_FAIL_TESTVECTOR; + goto done; + } + + /* now see if g^((p-1)/2) mod p is in fact 1 */ + if ((err = mp_exptmod(&g, &tmp, &p, &tmp)) != MP_OKAY) { goto error; } + if (mp_cmp_d(&tmp, 1)) { + err = CRYPT_FAIL_TESTVECTOR; + goto done; + } + } + err = CRYPT_OK; + goto done; +error: + err = mpi_to_ltc_error(err); +done: + mp_clear_multi(&tmp, &g, &p, NULL); + return err; +} + +void dh_sizes(int *low, int *high) +{ + int x; + _ARGCHK(low != NULL); + _ARGCHK(high != NULL); + *low = INT_MAX; + *high = 0; + for (x = 0; sets[x].size != 0; x++) { + if (*low > sets[x].size) *low = sets[x].size; + if (*high < sets[x].size) *high = sets[x].size; + } +} + +int dh_get_size(dh_key *key) +{ + _ARGCHK(key != NULL); + if (is_valid_idx(key->idx) == 1) { + return sets[key->idx].size; + } else { + return INT_MAX; /* large value that would cause dh_make_key() to fail */ + } +} + +int dh_make_key(prng_state *prng, int wprng, int keysize, dh_key *key) +{ + unsigned char *buf; + unsigned long x; + mp_int p, g; + int err; + + _ARGCHK(key != NULL); + + /* good prng? */ + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + /* find key size */ + for (x = 0; (keysize > sets[x].size) && (sets[x].size != 0); x++); +#ifdef FAST_PK + keysize = MIN(sets[x].size, 32); +#else + keysize = sets[x].size; +#endif + + if (sets[x].size == 0) { + return CRYPT_INVALID_KEYSIZE; + } + key->idx = x; + + /* allocate buffer */ + buf = XMALLOC(keysize); + if (buf == NULL) { + return CRYPT_MEM; + } + + /* make up random string */ + if (prng_descriptor[wprng].read(buf, keysize, prng) != (unsigned long)keysize) { + err = CRYPT_ERROR_READPRNG; + goto error2; + } + + /* init parameters */ + if ((err = mp_init_multi(&g, &p, &key->x, &key->y, NULL)) != MP_OKAY) { + goto error; + } + if ((err = mp_read_radix(&g, sets[key->idx].base, 64)) != MP_OKAY) { goto error; } + if ((err = mp_read_radix(&p, sets[key->idx].prime, 64)) != MP_OKAY) { goto error; } + + /* load the x value */ + if ((err = mp_read_unsigned_bin(&key->x, buf, keysize)) != MP_OKAY) { goto error; } + if ((err = mp_exptmod(&g, &key->x, &p, &key->y)) != MP_OKAY) { goto error; } + key->type = PK_PRIVATE; + + if ((err = mp_shrink(&key->x)) != MP_OKAY) { goto error; } + if ((err = mp_shrink(&key->y)) != MP_OKAY) { goto error; } + + /* free up ram */ + err = CRYPT_OK; + goto done; +error: + err = mpi_to_ltc_error(err); +error2: + mp_clear_multi(&key->x, &key->y, NULL); +done: +#ifdef CLEAN_STACK + zeromem(buf, keysize); +#endif + mp_clear_multi(&p, &g, NULL); + XFREE(buf); + return err; +} + +void dh_free(dh_key *key) +{ + _ARGCHK(key != NULL); + mp_clear_multi(&key->x, &key->y, NULL); +} + +int dh_export(unsigned char *out, unsigned long *outlen, int type, dh_key *key) +{ + unsigned long y, z; + int err; + + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + _ARGCHK(key != NULL); + + /* can we store the static header? */ + if (*outlen < (PACKET_SIZE + 2)) { + return CRYPT_BUFFER_OVERFLOW; + } + + if (type == PK_PRIVATE && key->type != PK_PRIVATE) { + return CRYPT_PK_NOT_PRIVATE; + } + + /* header */ + y = PACKET_SIZE; + + /* header */ + out[y++] = type; + out[y++] = (unsigned char)(sets[key->idx].size / 8); + + /* export y */ + OUTPUT_BIGNUM(&key->y, out, y, z); + + if (type == PK_PRIVATE) { + /* export x */ + OUTPUT_BIGNUM(&key->x, out, y, z); + } + + /* store header */ + packet_store_header(out, PACKET_SECT_DH, PACKET_SUB_KEY); + + /* store len */ + *outlen = y; + return CRYPT_OK; +} + +int dh_import(const unsigned char *in, unsigned long inlen, dh_key *key) +{ + unsigned long x, y, s; + int err; + + _ARGCHK(in != NULL); + _ARGCHK(key != NULL); + + /* make sure valid length */ + if ((2+PACKET_SIZE) > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* check type byte */ + if ((err = packet_valid_header((unsigned char *)in, PACKET_SECT_DH, PACKET_SUB_KEY)) != CRYPT_OK) { + return err; + } + + /* init */ + if ((err = mp_init_multi(&key->x, &key->y, NULL)) != MP_OKAY) { + return mpi_to_ltc_error(err); + } + + /* advance past packet header */ + y = PACKET_SIZE; + + /* key type, e.g. private, public */ + key->type = (int)in[y++]; + + /* key size in bytes */ + s = (unsigned long)in[y++] * 8; + + for (x = 0; (s > (unsigned long)sets[x].size) && (sets[x].size != 0); x++); + if (sets[x].size == 0) { + err = CRYPT_INVALID_KEYSIZE; + goto error; + } + key->idx = (int)x; + + /* type check both values */ + if ((key->type != PK_PUBLIC) && (key->type != PK_PRIVATE)) { + err = CRYPT_PK_TYPE_MISMATCH; + goto error; + } + + /* is the key idx valid? */ + if (is_valid_idx(key->idx) != 1) { + err = CRYPT_PK_TYPE_MISMATCH; + goto error; + } + + /* load public value g^x mod p*/ + INPUT_BIGNUM(&key->y, in, x, y, inlen); + + if (key->type == PK_PRIVATE) { + INPUT_BIGNUM(&key->x, in, x, y, inlen); + } + + /* eliminate private key if public */ + if (key->type == PK_PUBLIC) { + mp_clear(&key->x); + } + + return CRYPT_OK; +error: + mp_clear_multi(&key->y, &key->x, NULL); + return err; +} + +int dh_shared_secret(dh_key *private_key, dh_key *public_key, + unsigned char *out, unsigned long *outlen) +{ + mp_int tmp, p; + unsigned long x; + int err; + + _ARGCHK(private_key != NULL); + _ARGCHK(public_key != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + + /* types valid? */ + if (private_key->type != PK_PRIVATE) { + return CRYPT_PK_NOT_PRIVATE; + } + + /* same idx? */ + if (private_key->idx != public_key->idx) { + return CRYPT_PK_TYPE_MISMATCH; + } + + /* compute y^x mod p */ + if ((err = mp_init_multi(&tmp, &p, NULL)) != MP_OKAY) { + return mpi_to_ltc_error(err); + } + + if ((err = mp_read_radix(&p, (char *)sets[private_key->idx].prime, 64)) != MP_OKAY) { goto error; } + if ((err = mp_exptmod(&public_key->y, &private_key->x, &p, &tmp)) != MP_OKAY) { goto error; } + + /* enough space for output? */ + x = (unsigned long)mp_unsigned_bin_size(&tmp); + if (*outlen < x) { + err = CRYPT_BUFFER_OVERFLOW; + goto done; + } + if ((err = mp_to_unsigned_bin(&tmp, out)) != MP_OKAY) { goto error; } + *outlen = x; + err = CRYPT_OK; + goto done; +error: + err = mpi_to_ltc_error(err); +done: + mp_clear_multi(&p, &tmp, NULL); + return err; +} + +#include "dh_sys.c" + +#endif + diff --git a/dh_sys.c b/dh_sys.c new file mode 100644 index 00000000..e0439c37 --- /dev/null +++ b/dh_sys.c @@ -0,0 +1,451 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +int dh_encrypt_key(const unsigned char *inkey, unsigned long keylen, + unsigned char *out, unsigned long *len, + prng_state *prng, int wprng, int hash, + dh_key *key) +{ + unsigned char *pub_expt, *dh_shared, *skey; + dh_key pubkey; + unsigned long x, y, z, hashsize, pubkeysize; + int err; + + _ARGCHK(inkey != NULL); + _ARGCHK(out != NULL); + _ARGCHK(len != NULL); + _ARGCHK(key != NULL); + + /* check that wprng/hash are not invalid */ + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + if ((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + + if (keylen > hash_descriptor[hash].hashsize) { + return CRYPT_INVALID_HASH; + } + + /* allocate memory */ + pub_expt = XMALLOC(DH_BUF_SIZE); + dh_shared = XMALLOC(DH_BUF_SIZE); + skey = XMALLOC(MAXBLOCKSIZE); + if (pub_expt == NULL || dh_shared == NULL || skey == NULL) { + if (pub_expt != NULL) { + XFREE(pub_expt); + } + if (dh_shared != NULL) { + XFREE(dh_shared); + } + if (skey != NULL) { + XFREE(skey); + } + return CRYPT_MEM; + } + + /* make a random key and export the public copy */ + if ((err = dh_make_key(prng, wprng, dh_get_size(key), &pubkey)) != CRYPT_OK) { + goto __ERR; + } + + pubkeysize = DH_BUF_SIZE; + if ((err = dh_export(pub_expt, &pubkeysize, PK_PUBLIC, &pubkey)) != CRYPT_OK) { + dh_free(&pubkey); + goto __ERR; + } + + /* now check if the out buffer is big enough */ + if (*len < (1 + 4 + 4 + PACKET_SIZE + pubkeysize + keylen)) { + dh_free(&pubkey); + err = CRYPT_BUFFER_OVERFLOW; + goto __ERR; + } + + /* make random key */ + hashsize = hash_descriptor[hash].hashsize; + + x = DH_BUF_SIZE; + if ((err = dh_shared_secret(&pubkey, key, dh_shared, &x)) != CRYPT_OK) { + dh_free(&pubkey); + goto __ERR; + } + dh_free(&pubkey); + + z = MAXBLOCKSIZE; + if ((err = hash_memory(hash, dh_shared, x, skey, &z)) != CRYPT_OK) { + goto __ERR; + } + + /* store header */ + packet_store_header(out, PACKET_SECT_DH, PACKET_SUB_ENC_KEY); + + /* output header */ + y = PACKET_SIZE; + + /* size of hash name and the name itself */ + out[y++] = hash_descriptor[hash].ID; + + /* length of DH pubkey and the key itself */ + STORE32L(pubkeysize, out+y); + y += 4; + for (x = 0; x < pubkeysize; x++, y++) { + out[y] = pub_expt[x]; + } + + /* Store the encrypted key */ + STORE32L(keylen, out+y); + y += 4; + + for (x = 0; x < keylen; x++, y++) { + out[y] = skey[x] ^ inkey[x]; + } + *len = y; + + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + /* clean up */ + zeromem(pub_expt, DH_BUF_SIZE); + zeromem(dh_shared, DH_BUF_SIZE); + zeromem(skey, MAXBLOCKSIZE); +#endif + XFREE(skey); + XFREE(dh_shared); + XFREE(pub_expt); + + return err; +} + +int dh_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *outkey, unsigned long *keylen, + dh_key *key) +{ + unsigned char *shared_secret, *skey; + unsigned long x, y, z,hashsize, keysize; + int hash, err; + dh_key pubkey; + + _ARGCHK(in != NULL); + _ARGCHK(outkey != NULL); + _ARGCHK(keylen != NULL); + _ARGCHK(key != NULL); + + /* right key type? */ + if (key->type != PK_PRIVATE) { + return CRYPT_PK_NOT_PRIVATE; + } + + /* allocate ram */ + shared_secret = XMALLOC(DH_BUF_SIZE); + skey = XMALLOC(MAXBLOCKSIZE); + if (shared_secret == NULL || skey == NULL) { + if (shared_secret != NULL) { + XFREE(shared_secret); + } + if (skey != NULL) { + XFREE(skey); + } + return CRYPT_MEM; + } + + /* check if initial header should fit */ + if (inlen < PACKET_SIZE+1+4+4) { + err = CRYPT_INVALID_PACKET; + goto __ERR; + } else { + inlen -= PACKET_SIZE+1+4+4; + } + + /* is header correct? */ + if ((err = packet_valid_header((unsigned char *)in, PACKET_SECT_DH, PACKET_SUB_ENC_KEY)) != CRYPT_OK) { + goto __ERR; + } + + /* now lets get the hash name */ + y = PACKET_SIZE; + hash = find_hash_id(in[y++]); + if (hash == -1) { + err = CRYPT_INVALID_HASH; + goto __ERR; + } + + /* common values */ + hashsize = hash_descriptor[hash].hashsize; + + /* get public key */ + LOAD32L(x, in+y); + + /* now check if the imported key will fit */ + if (inlen < x) { + err = CRYPT_INVALID_PACKET; + goto __ERR; + } else { + inlen -= x; + } + + y += 4; + if ((err = dh_import(in+y, x, &pubkey)) != CRYPT_OK) { + goto __ERR; + } + y += x; + + /* make shared key */ + x = DH_BUF_SIZE; + if ((err = dh_shared_secret(key, &pubkey, shared_secret, &x)) != CRYPT_OK) { + dh_free(&pubkey); + goto __ERR; + } + dh_free(&pubkey); + + z = MAXBLOCKSIZE; + if ((err = hash_memory(hash, shared_secret, x, skey, &z)) != CRYPT_OK) { + goto __ERR; + } + + /* load in the encrypted key */ + LOAD32L(keysize, in+y); + + /* will the outkey fit as part of the input */ + if (inlen < keysize) { + err = CRYPT_INVALID_PACKET; + goto __ERR; + } else { + inlen -= keysize; + } + + if (keysize > *keylen) { + err = CRYPT_BUFFER_OVERFLOW; + goto __ERR; + } + y += 4; + + *keylen = keysize; + + for (x = 0; x < keysize; x++, y++) { + outkey[x] = skey[x] ^ in[y]; + } + + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + zeromem(shared_secret, DH_BUF_SIZE); + zeromem(skey, MAXBLOCKSIZE); +#endif + + XFREE(skey); + XFREE(shared_secret); + + return err; +} + +/* perform an ElGamal Signature of a hash + * + * The math works as follows. x is the private key, M is the message to sign + + 1. pick a random k + 2. compute a = g^k mod p + 3. compute b = (M - xa)/k mod p + 4. Send (a,b) + + Now to verify with y=g^x mod p, a and b + + 1. compute y^a * a^b = g^(xa) * g^(k*(M-xa)/k) + = g^(xa + (M - xa)) + = g^M [all mod p] + + 2. Compare against g^M mod p [based on input hash]. + 3. If result of #2 == result of #1 then signature valid +*/ +int dh_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, dh_key *key) +{ + mp_int a, b, k, m, g, p, p1, tmp; + unsigned char *buf; + unsigned long x, y; + int err; + + _ARGCHK(in != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + _ARGCHK(key != NULL); + + /* check parameters */ + if (key->type != PK_PRIVATE) { + return CRYPT_PK_NOT_PRIVATE; + } + + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + /* is the IDX valid ? */ + if (is_valid_idx(key->idx) != 1) { + return CRYPT_PK_INVALID_TYPE; + } + + /* allocate ram for buf */ + buf = XMALLOC(520); + + /* make up a random value k, + * since the order of the group is prime + * we need not check if gcd(k, r) is 1 + */ + if (prng_descriptor[wprng].read(buf, sets[key->idx].size, prng) != + (unsigned long)(sets[key->idx].size)) { + err = CRYPT_ERROR_READPRNG; + goto __ERR; + } + + /* init bignums */ + if ((err = mp_init_multi(&a, &b, &k, &m, &p, &g, &p1, &tmp, NULL)) != MP_OKAY) { + err = mpi_to_ltc_error(err); + goto __ERR; + } + + /* load k and m */ + if ((err = mp_read_unsigned_bin(&m, (unsigned char *)in, inlen)) != MP_OKAY) { goto error; } +#ifdef FAST_PK + if ((err = mp_read_unsigned_bin(&k, buf, MIN(32,sets[key->idx].size))) != MP_OKAY) { goto error; } +#else + if ((err = mp_read_unsigned_bin(&k, buf, sets[key->idx].size)) != MP_OKAY) { goto error; } +#endif + + /* load g, p and p1 */ + if ((err = mp_read_radix(&g, sets[key->idx].base, 64)) != MP_OKAY) { goto error; } + if ((err = mp_read_radix(&p, sets[key->idx].prime, 64)) != MP_OKAY) { goto error; } + if ((err = mp_sub_d(&p, 1, &p1)) != MP_OKAY) { goto error; } + if ((err = mp_div_2(&p1, &p1)) != MP_OKAY) { goto error; } /* p1 = (p-1)/2 */ + + /* now get a = g^k mod p */ + if ((err = mp_exptmod(&g, &k, &p, &a)) != MP_OKAY) { goto error; } + + /* now find M = xa + kb mod p1 or just b = (M - xa)/k mod p1 */ + if ((err = mp_invmod(&k, &p1, &k)) != MP_OKAY) { goto error; } /* k = 1/k mod p1 */ + if ((err = mp_mulmod(&a, &key->x, &p1, &tmp)) != MP_OKAY) { goto error; } /* tmp = xa */ + if ((err = mp_submod(&m, &tmp, &p1, &tmp)) != MP_OKAY) { goto error; } /* tmp = M - xa */ + if ((err = mp_mulmod(&k, &tmp, &p1, &b)) != MP_OKAY) { goto error; } /* b = (M - xa)/k */ + + /* check for overflow */ + if ((unsigned long)(PACKET_SIZE + 4 + 4 + mp_unsigned_bin_size(&a) + mp_unsigned_bin_size(&b)) > *outlen) { + err = CRYPT_BUFFER_OVERFLOW; + goto __ERR; + } + + /* store header */ + y = PACKET_SIZE; + + /* now store them both (a,b) */ + x = (unsigned long)mp_unsigned_bin_size(&a); + STORE32L(x, out+y); y += 4; + if ((err = mp_to_unsigned_bin(&a, out+y)) != MP_OKAY) { goto error; } + y += x; + + x = (unsigned long)mp_unsigned_bin_size(&b); + STORE32L(x, out+y); y += 4; + if ((err = mp_to_unsigned_bin(&b, out+y)) != MP_OKAY) { goto error; } + y += x; + + /* check if size too big */ + if (*outlen < y) { + err = CRYPT_BUFFER_OVERFLOW; + goto __ERR; + } + + /* store header */ + packet_store_header(out, PACKET_SECT_DH, PACKET_SUB_SIGNED); + *outlen = y; + + err = CRYPT_OK; + goto __ERR; +error: + err = mpi_to_ltc_error(err); +__ERR: + mp_clear_multi(&tmp, &p1, &g, &p, &m, &k, &b, &a, NULL); + + XFREE(buf); + + return err; +} + + +/* verify the signature in sig of the given hash */ +int dh_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int *stat, dh_key *key) +{ + mp_int a, b, p, g, m, tmp; + unsigned long x, y; + int err; + + _ARGCHK(sig != NULL); + _ARGCHK(hash != NULL); + _ARGCHK(stat != NULL); + _ARGCHK(key != NULL); + + /* default to invalid */ + *stat = 0; + + /* check initial input length */ + if (siglen < PACKET_SIZE+4+4) { + return CRYPT_INVALID_PACKET; + } + + /* header ok? */ + if ((err = packet_valid_header((unsigned char *)sig, PACKET_SECT_DH, PACKET_SUB_SIGNED)) != CRYPT_OK) { + return err; + } + + /* get hash out of packet */ + y = PACKET_SIZE; + + /* init all bignums */ + if ((err = mp_init_multi(&a, &p, &b, &g, &m, &tmp, NULL)) != MP_OKAY) { + return mpi_to_ltc_error(err); + } + + /* load a and b */ + INPUT_BIGNUM(&a, sig, x, y, siglen); + INPUT_BIGNUM(&b, sig, x, y, siglen); + + /* load p and g */ + if ((err = mp_read_radix(&p, sets[key->idx].prime, 64)) != MP_OKAY) { goto error1; } + if ((err = mp_read_radix(&g, sets[key->idx].base, 64)) != MP_OKAY) { goto error1; } + + /* load m */ + if ((err = mp_read_unsigned_bin(&m, (unsigned char *)hash, hashlen)) != MP_OKAY) { goto error1; } + + /* find g^m mod p */ + if ((err = mp_exptmod(&g, &m, &p, &m)) != MP_OKAY) { goto error1; } /* m = g^m mod p */ + + /* find y^a * a^b */ + if ((err = mp_exptmod(&key->y, &a, &p, &tmp)) != MP_OKAY) { goto error1; } /* tmp = y^a mod p */ + if ((err = mp_exptmod(&a, &b, &p, &a)) != MP_OKAY) { goto error1; } /* a = a^b mod p */ + if ((err = mp_mulmod(&a, &tmp, &p, &a)) != MP_OKAY) { goto error1; } /* a = y^a * a^b mod p */ + + /* y^a * a^b == g^m ??? */ + if (mp_cmp(&a, &m) == 0) { + *stat = 1; + } + + /* clean up */ + err = CRYPT_OK; + goto done; +error1: + err = mpi_to_ltc_error(err); +error: +done: + mp_clear_multi(&tmp, &m, &g, &p, &b, &a, NULL); + return err; +} + diff --git a/doc/Doxyfile b/doc/Doxyfile deleted file mode 100644 index 829961d3..00000000 --- a/doc/Doxyfile +++ /dev/null @@ -1,2429 +0,0 @@ -# Doxyfile 1.8.11 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = LibTomCrypt - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER=1.18.2-develop - -# 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 -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify a logo or an icon that is included -# in the documentation. The maximum height of the logo should not exceed 55 -# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy -# the logo to the output directory. - -PROJECT_LOGO = libtomsm.png - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = doxygen - -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII -# characters to appear in the names of generated files. If set to NO, non-ASCII -# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode -# U+3044. -# The default value is: NO. - -ALLOW_UNICODE_NAMES = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = src - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = ../src/headers - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = YES - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new -# page for each member. If set to NO, the documentation of a member will be part -# of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. -# -# Note: For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by putting a % sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# If one adds a struct or class to a group and this option is enabled, then also -# any nested class or struct is added to the same group. By default this option -# is disabled and one has to add nested compounds explicitly via \ingroup. -# The default value is: NO. - -GROUP_NESTED_COMPOUNDS = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO, -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. If set to YES, local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO, only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = YES - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO, these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES, the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will -# append additional text to a page's title, such as Class Reference. If set to -# YES the compound reference will be hidden. -# The default value is: NO. - -HIDE_COMPOUND_REFERENCE= NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = YES - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo -# list. This list is created by putting \todo commands in the documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test -# list. This list is created by putting \test commands in the documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if ... \endif and \cond -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES, the -# list will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. See also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. -# The default value is: NO. - -WARN_AS_ERROR = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING -# Note: If this tag is empty the current directory is searched. - -INPUT = ../src/ - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# read by doxygen. -# -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl, -# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js. - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# -# -# where is the value of the INPUT_FILTER tag, and is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = YES - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = NO - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. -# Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse-libclang=ON option for CMake. -# The default value is: NO. - -CLANG_ASSISTED_PARSING = NO - -# If clang assisted parsing is enabled you can provide the compiler with command -# line options that you would normally use when invoking the compiler. Note that -# the include paths will already be set by doxygen for the files and directories -# specified with INPUT and INCLUDE_PATH. -# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. - -CLANG_OPTIONS = - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = YES - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefore more robust against future updates. -# Doxygen will copy the style sheet files to the output directory. -# Note: The order of the extra style sheet files is of importance (e.g. the last -# style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler (hhc.exe). If non-empty, -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated -# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it -# enables the Previous and Next buttons. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = YES - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 1 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use + S -# (what the is depends on the OS and browser, but it is typically -# , /

g, 0) == MP_EQ || mp_cmp_d(&key->g, 1) == MP_EQ) { + return CRYPT_OK; + } + if ((err = mp_init_multi(&tmp, &tmp2, NULL)) != MP_OKAY) { goto error; } + if ((err = mp_sub_d(&key->p, 1, &tmp)) != MP_OKAY) { goto error; } + if (mp_cmp(&tmp, &key->g) == MP_EQ || mp_cmp(&key->g, &key->p) != MP_LT) { + err = CRYPT_OK; + goto done; + } + + /* 1 < y < p-1 */ + if (!(mp_cmp_d(&key->y, 1) == MP_GT && mp_cmp(&key->y, &tmp) == MP_LT)) { + err = CRYPT_OK; + goto done; + } + + /* now we have to make sure that g^q = 1, and that p-1/q gives 0 remainder */ + if ((err = mp_div(&tmp, &key->q, &tmp, &tmp2)) != MP_OKAY) { goto error; } + if (mp_iszero(&tmp2) != MP_YES) { + err = CRYPT_OK; + goto done; + } + + if ((err = mp_exptmod(&key->g, &key->q, &key->p, &tmp)) != MP_OKAY) { goto error; } + if (mp_cmp_d(&tmp, 1) != MP_EQ) { + err = CRYPT_OK; + goto done; + } + + /* now we have to make sure that y^q = 1, this makes sure y \in g^x mod p */ + if ((err = mp_exptmod(&key->y, &key->q, &key->p, &tmp)) != MP_OKAY) { goto error; } + if (mp_cmp_d(&tmp, 1) != MP_EQ) { + err = CRYPT_OK; + goto done; + } + + /* at this point we are out of tests ;-( */ + err = CRYPT_OK; + *stat = 1; + goto done; +error: err = mpi_to_ltc_error(err); +done : mp_clear_multi(&tmp, &tmp2, NULL); + return err; +} +#endif diff --git a/eax_addheader.c b/eax_addheader.c new file mode 100644 index 00000000..c7dfdd02 --- /dev/null +++ b/eax_addheader.c @@ -0,0 +1,25 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* EAX Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef EAX_MODE + +/* add header (metadata) to the stream */ +int eax_addheader(eax_state *eax, const unsigned char *header, unsigned long length) +{ + _ARGCHK(eax != NULL); + _ARGCHK(header != NULL); + return omac_process(&eax->headeromac, header, length); +} + +#endif diff --git a/eax_decrypt.c b/eax_decrypt.c new file mode 100644 index 00000000..de7c290e --- /dev/null +++ b/eax_decrypt.c @@ -0,0 +1,34 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* EAX Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef EAX_MODE + +int eax_decrypt(eax_state *eax, const unsigned char *ct, unsigned char *pt, unsigned long length) +{ + int err; + + _ARGCHK(eax != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + + /* omac ciphertext */ + if ((err = omac_process(&eax->ctomac, ct, length)) != CRYPT_OK) { + return err; + } + + /* decrypt */ + return ctr_decrypt(ct, pt, length, &eax->ctr); +} + +#endif diff --git a/eax_decrypt_verify_memory.c b/eax_decrypt_verify_memory.c new file mode 100644 index 00000000..782d4f64 --- /dev/null +++ b/eax_decrypt_verify_memory.c @@ -0,0 +1,80 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* EAX Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef EAX_MODE + +int eax_decrypt_verify_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *header, unsigned long headerlen, + const unsigned char *ct, unsigned long ctlen, + unsigned char *pt, + unsigned char *tag, unsigned long taglen, + int *res) +{ + int err; + eax_state *eax; + unsigned char *buf; + unsigned long buflen; + + _ARGCHK(res != NULL); + + /* default to zero */ + *res = 0; + + /* allocate ram */ + buf = XMALLOC(taglen); + eax = XMALLOC(sizeof(eax_state)); + if (eax == NULL || buf == NULL) { + if (eax != NULL) { + XFREE(eax); + } + if (buf != NULL) { + XFREE(buf); + } + return CRYPT_MEM; + } + + if ((err = eax_init(eax, cipher, key, keylen, nonce, noncelen, header, headerlen)) != CRYPT_OK) { + goto __ERR; + } + + if ((err = eax_decrypt(eax, ct, pt, ctlen)) != CRYPT_OK) { + goto __ERR; + } + + buflen = taglen; + if ((err = eax_done(eax, buf, &buflen)) != CRYPT_OK) { + goto __ERR; + } + + /* compare tags */ + if (buflen >= taglen && memcmp(buf, tag, taglen) == 0) { + *res = 1; + } + + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + zeromem(buf, taglen); + zeromem(eax, sizeof(eax_state)); +#endif + + XFREE(eax); + XFREE(buf); + + return err; +} + +#endif diff --git a/src/encauth/eax/eax_done.c b/eax_done.c similarity index 58% rename from src/encauth/eax/eax_done.c rename to eax_done.c index f2362cf5..037251e7 100644 --- a/src/encauth/eax/eax_done.c +++ b/eax_done.c @@ -1,30 +1,28 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ -/** - @file eax_done.c - EAX implementation, terminate session, by Tom St Denis -*/ -#include "tomcrypt_private.h" +/* EAX Implementation by Tom St Denis */ +#include "mycrypt.h" -#ifdef LTC_EAX_MODE +#ifdef EAX_MODE -/** - Terminate an EAX session and get the tag. - @param eax The EAX state - @param tag [out] The destination of the authentication tag - @param taglen [in/out] The max length and resulting length of the authentication tag - @return CRYPT_OK if successful -*/ int eax_done(eax_state *eax, unsigned char *tag, unsigned long *taglen) { int err; unsigned char *headermac, *ctmac; unsigned long x, len; - LTC_ARGCHK(eax != NULL); - LTC_ARGCHK(tag != NULL); - LTC_ARGCHK(taglen != NULL); + _ARGCHK(eax != NULL); + _ARGCHK(tag != NULL); + _ARGCHK(taglen != NULL); /* allocate ram */ headermac = XMALLOC(MAXBLOCKSIZE); @@ -43,7 +41,7 @@ int eax_done(eax_state *eax, unsigned char *tag, unsigned long *taglen) /* finish ctomac */ len = MAXBLOCKSIZE; if ((err = omac_done(&eax->ctomac, ctmac, &len)) != CRYPT_OK) { - goto LBL_ERR; + goto __ERR; } /* finish headeromac */ @@ -51,12 +49,7 @@ int eax_done(eax_state *eax, unsigned char *tag, unsigned long *taglen) /* note we specifically don't reset len so the two lens are minimal */ if ((err = omac_done(&eax->headeromac, headermac, &len)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* terminate the CTR chain */ - if ((err = ctr_done(&eax->ctr)) != CRYPT_OK) { - goto LBL_ERR; + goto __ERR; } /* compute N xor H xor C */ @@ -66,8 +59,8 @@ int eax_done(eax_state *eax, unsigned char *tag, unsigned long *taglen) *taglen = x; err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK +__ERR: +#ifdef CLEAN_STACK zeromem(ctmac, MAXBLOCKSIZE); zeromem(headermac, MAXBLOCKSIZE); zeromem(eax, sizeof(*eax)); diff --git a/eax_encrypt.c b/eax_encrypt.c new file mode 100644 index 00000000..1b4930e9 --- /dev/null +++ b/eax_encrypt.c @@ -0,0 +1,35 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* EAX Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef EAX_MODE + +int eax_encrypt(eax_state *eax, const unsigned char *pt, unsigned char *ct, unsigned long length) +{ + int err; + + _ARGCHK(eax != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + + /* encrypt */ + if ((err = ctr_encrypt(pt, ct, length, &eax->ctr)) != CRYPT_OK) { + return err; + } + + /* omac ciphertext */ + return omac_process(&eax->ctomac, ct, length); +} + +#endif + diff --git a/eax_encrypt_authenticate_memory.c b/eax_encrypt_authenticate_memory.c new file mode 100644 index 00000000..9e9a4280 --- /dev/null +++ b/eax_encrypt_authenticate_memory.c @@ -0,0 +1,53 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* EAX Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef EAX_MODE + +int eax_encrypt_authenticate_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *header, unsigned long headerlen, + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen) +{ + int err; + eax_state *eax; + + eax = XMALLOC(sizeof(eax_state)); + + if ((err = eax_init(eax, cipher, key, keylen, nonce, noncelen, header, headerlen)) != CRYPT_OK) { + goto __ERR; + } + + if ((err = eax_encrypt(eax, pt, ct, ptlen)) != CRYPT_OK) { + goto __ERR; + } + + if ((err = eax_done(eax, tag, taglen)) != CRYPT_OK) { + goto __ERR; + } + + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + zeromem(eax, sizeof(eax_state)); +#endif + + XFREE(eax); + + return err; +} + +#endif diff --git a/src/encauth/eax/eax_init.c b/eax_init.c similarity index 53% rename from src/encauth/eax/eax_init.c rename to eax_init.c index 153c4273..547c8d67 100644 --- a/src/encauth/eax/eax_init.c +++ b/eax_init.c @@ -1,29 +1,21 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ -/** - @file eax_init.c - EAX implementation, initialized EAX state, by Tom St Denis -*/ -#include "tomcrypt_private.h" +/* EAX Implementation by Tom St Denis */ +#include "mycrypt.h" -#ifdef LTC_EAX_MODE +#ifdef EAX_MODE -/** - Initialized an EAX state - @param eax [out] The EAX state to initialize - @param cipher The index of the desired cipher - @param key The secret key - @param keylen The length of the secret key (octets) - @param nonce The use-once nonce for the session - @param noncelen The length of the nonce (octets) - @param header The header for the EAX state - @param headerlen The header length (octets) - @return CRYPT_OK if successful -*/ -int eax_init(eax_state *eax, int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, +int eax_init(eax_state *eax, int cipher, const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, unsigned long noncelen, const unsigned char *header, unsigned long headerlen) { unsigned char *buf; @@ -32,11 +24,11 @@ int eax_init(eax_state *eax, int cipher, unsigned long len; - LTC_ARGCHK(eax != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(nonce != NULL); + _ARGCHK(eax != NULL); + _ARGCHK(key != NULL); + _ARGCHK(nonce != NULL); if (headerlen > 0) { - LTC_ARGCHK(header != NULL); + _ARGCHK(header != NULL); } if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { @@ -46,7 +38,7 @@ int eax_init(eax_state *eax, int cipher, /* allocate ram */ buf = XMALLOC(MAXBLOCKSIZE); - omac = XMALLOC(sizeof(*omac)); + omac = XMALLOC(sizeof(omac_state)); if (buf == NULL || omac == NULL) { if (buf != NULL) { @@ -58,69 +50,71 @@ int eax_init(eax_state *eax, int cipher, return CRYPT_MEM; } - /* N = LTC_OMAC_0K(nonce) */ + /* N = OMAC_0K(nonce) */ zeromem(buf, MAXBLOCKSIZE); if ((err = omac_init(omac, cipher, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; + goto __ERR; } /* omac the [0]_n */ if ((err = omac_process(omac, buf, blklen)) != CRYPT_OK) { - goto LBL_ERR; + goto __ERR; } /* omac the nonce */ if ((err = omac_process(omac, nonce, noncelen)) != CRYPT_OK) { - goto LBL_ERR; + goto __ERR; } /* store result */ len = sizeof(eax->N); if ((err = omac_done(omac, eax->N, &len)) != CRYPT_OK) { - goto LBL_ERR; + goto __ERR; } - /* H = LTC_OMAC_1K(header) */ + /* H = OMAC_1K(header) */ zeromem(buf, MAXBLOCKSIZE); buf[blklen - 1] = 1; if ((err = omac_init(&eax->headeromac, cipher, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; + goto __ERR; } /* omac the [1]_n */ if ((err = omac_process(&eax->headeromac, buf, blklen)) != CRYPT_OK) { - goto LBL_ERR; + goto __ERR; } /* omac the header */ if (headerlen != 0) { if ((err = omac_process(&eax->headeromac, header, headerlen)) != CRYPT_OK) { - goto LBL_ERR; + goto __ERR; } } /* note we don't finish the headeromac, this allows us to add more header later */ /* setup the CTR mode */ - if ((err = ctr_start(cipher, eax->N, key, keylen, 0, CTR_COUNTER_BIG_ENDIAN, &eax->ctr)) != CRYPT_OK) { - goto LBL_ERR; + if ((err = ctr_start(cipher, eax->N, key, keylen, 0, &eax->ctr)) != CRYPT_OK) { + goto __ERR; } + /* use big-endian counter */ + eax->ctr.mode = 1; - /* setup the LTC_OMAC for the ciphertext */ - if ((err = omac_init(&eax->ctomac, cipher, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; + /* setup the OMAC for the ciphertext */ + if ((err = omac_init(&eax->ctomac, cipher, key, keylen)) != CRYPT_OK) { + goto __ERR; } /* omac [2]_n */ zeromem(buf, MAXBLOCKSIZE); buf[blklen-1] = 2; if ((err = omac_process(&eax->ctomac, buf, blklen)) != CRYPT_OK) { - goto LBL_ERR; + goto __ERR; } err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK +__ERR: +#ifdef CLEAN_STACK zeromem(buf, MAXBLOCKSIZE); - zeromem(omac, sizeof(*omac)); + zeromem(omac, sizeof(omac_state)); #endif XFREE(omac); @@ -129,4 +123,4 @@ LBL_ERR: return err; } -#endif +#endif diff --git a/src/encauth/eax/eax_test.c b/eax_test.c similarity index 74% rename from src/encauth/eax/eax_test.c rename to eax_test.c index 6dbd7af2..93774b07 100644 --- a/src/encauth/eax/eax_test.c +++ b/eax_test.c @@ -1,34 +1,35 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ -/** - @file eax_test.c - EAX implementation, self-test, by Tom St Denis -*/ -#include "tomcrypt_private.h" +/* EAX Implementation by Tom St Denis */ +#include "mycrypt.h" -#ifdef LTC_EAX_MODE +#ifdef EAX_MODE -/** - Test the EAX implementation - @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled -*/ int eax_test(void) { #ifndef LTC_TEST return CRYPT_NOP; #else static const struct { - int keylen, - noncelen, - headerlen, + int keylen, + noncelen, + headerlen, msglen; - unsigned char key[MAXBLOCKSIZE], - nonce[MAXBLOCKSIZE], - header[MAXBLOCKSIZE], + unsigned char key[MAXBLOCKSIZE], + nonce[MAXBLOCKSIZE], + header[MAXBLOCKSIZE], plaintext[MAXBLOCKSIZE], - ciphertext[MAXBLOCKSIZE], + ciphertext[MAXBLOCKSIZE], tag[MAXBLOCKSIZE]; } tests[] = { @@ -99,7 +100,7 @@ int eax_test(void) 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, /* nonce */ { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, /* header */ { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, @@ -126,7 +127,7 @@ int eax_test(void) 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, /* nonce */ { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e }, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e }, /* header */ { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d }, @@ -168,7 +169,7 @@ int eax_test(void) { 16, 16, 8, 2, - /* key */ + /* key */ { 0x91, 0x94, 0x5d, 0x3f, 0x4d, 0xcb, 0xee, 0x0b, 0xf4, 0x5e, 0xf5, 0x22, 0x55, 0xf0, 0x95, 0xa4 }, /* nonce */ @@ -202,29 +203,43 @@ int eax_test(void) /* Tag */ { 0x3a, 0x59, 0xf2, 0x38, 0xa2, 0x3e, 0x39, 0x19, 0x9d, 0xc9, 0x26, 0x66, 0x26, 0xc4, 0x0f, 0x80 } -} +} }; int err, x, idx, res; unsigned long len; unsigned char outct[MAXBLOCKSIZE], outtag[MAXBLOCKSIZE]; - /* AES can be under rijndael or aes... try to find it */ + /* AES can be under rijndael or aes... try to find it */ if ((idx = find_cipher("aes")) == -1) { if ((idx = find_cipher("rijndael")) == -1) { return CRYPT_NOP; } } - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { len = sizeof(outtag); if ((err = eax_encrypt_authenticate_memory(idx, tests[x].key, tests[x].keylen, tests[x].nonce, tests[x].noncelen, tests[x].header, tests[x].headerlen, tests[x].plaintext, tests[x].msglen, outct, outtag, &len)) != CRYPT_OK) { return err; } - if (ltc_compare_testvector(outtag, len, tests[x].tag, len, "EAX Tag", x) || - ltc_compare_testvector(outct, tests[x].msglen, tests[x].ciphertext, tests[x].msglen, "EAX CT", x)) { + if (memcmp(outct, tests[x].ciphertext, tests[x].msglen) || memcmp(outtag, tests[x].tag, len)) { +#if 0 + unsigned long y; + printf("\n\nFailure: \nCT:\n"); + for (y = 0; y < (unsigned long)tests[x].msglen; ) { + printf("0x%02x", outct[y]); + if (y < (unsigned long)(tests[x].msglen-1)) printf(", "); + if (!(++y % 8)) printf("\n"); + } + printf("\nTAG:\n"); + for (y = 0; y < len; ) { + printf("0x%02x", outtag[y]); + if (y < len-1) printf(", "); + if (!(++y % 8)) printf("\n"); + } +#endif return CRYPT_FAIL_TESTVECTOR; } @@ -234,16 +249,23 @@ int eax_test(void) outct, tests[x].msglen, outct, outtag, len, &res)) != CRYPT_OK) { return err; } - if ((res != 1) || ltc_compare_testvector(outct, tests[x].msglen, tests[x].plaintext, tests[x].msglen, "EAX", x)) { -#ifdef LTC_TEST_DBG - printf("\n\nEAX: Failure-decrypt - res = %d\n", res); + if ((res != 1) || memcmp(outct, tests[x].plaintext, tests[x].msglen)) { +#if 0 + unsigned long y; + printf("\n\nFailure (res == %d): \nPT:\n", res); + for (y = 0; y < (unsigned long)tests[x].msglen; ) { + printf("0x%02x", outct[y]); + if (y < (unsigned long)(tests[x].msglen-1)) printf(", "); + if (!(++y % 8)) printf("\n"); + } + printf("\n\n"); #endif return CRYPT_FAIL_TESTVECTOR; } - } - return CRYPT_OK; + } + return CRYPT_OK; #endif /* LTC_TEST */ } -#endif /* LTC_EAX_MODE */ +#endif /* EAX_MODE */ diff --git a/ecb_decrypt.c b/ecb_decrypt.c new file mode 100644 index 00000000..4f231564 --- /dev/null +++ b/ecb_decrypt.c @@ -0,0 +1,34 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef ECB + +int ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_ECB *ecb) +{ + int err; + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(ecb != NULL); + + /* valid cipher? */ + if ((err = cipher_is_valid(ecb->cipher)) != CRYPT_OK) { + return err; + } + _ARGCHK(cipher_descriptor[ecb->cipher].ecb_decrypt != NULL); + + cipher_descriptor[ecb->cipher].ecb_decrypt(ct, pt, &ecb->key); + return CRYPT_OK; +} + +#endif + + diff --git a/ecb_encrypt.c b/ecb_encrypt.c new file mode 100644 index 00000000..51b76468 --- /dev/null +++ b/ecb_encrypt.c @@ -0,0 +1,29 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef ECB + +int ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_ECB *ecb) +{ + int err; + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(ecb != NULL); + + if ((err = cipher_is_valid(ecb->cipher)) != CRYPT_OK) { + return err; + } + cipher_descriptor[ecb->cipher].ecb_encrypt(pt, ct, &ecb->key); + return CRYPT_OK; +} + +#endif diff --git a/ecb_start.c b/ecb_start.c new file mode 100644 index 00000000..073bbe97 --- /dev/null +++ b/ecb_start.c @@ -0,0 +1,29 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef ECB + +int ecb_start(int cipher, const unsigned char *key, int keylen, int num_rounds, symmetric_ECB *ecb) +{ + int err; + _ARGCHK(key != NULL); + _ARGCHK(ecb != NULL); + + if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { + return err; + } + ecb->cipher = cipher; + ecb->blocklen = cipher_descriptor[cipher].block_length; + return cipher_descriptor[cipher].setup(key, keylen, num_rounds, &ecb->key); +} + +#endif diff --git a/ecc.c b/ecc.c new file mode 100644 index 00000000..e5b8e4d8 --- /dev/null +++ b/ecc.c @@ -0,0 +1,954 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + +#include "mycrypt.h" + +#ifdef MECC + +/* size of our temp buffers for exported keys */ +#define ECC_BUF_SIZE 160 + +/* This holds the key settings. ***MUST*** be organized by size from smallest to largest. */ +static const struct { + int size; + char *name, *prime, *B, *order, *Gx, *Gy; +} sets[] = { +#ifdef ECC160 +{ + 20, + "ECC-160", + /* prime */ + "G00000000000000000000000007", + /* B */ + "1oUV2vOaSlWbxr6", + /* order */ + "G0000000000004sCQUtDxaqDUN5", + /* Gx */ + "jpqOf1BHus6Yd/pyhyVpP", + /* Gy */ + "D/wykuuIFfr+vPyx7kQEPu8MixO", +}, +#endif +#ifdef ECC192 +{ + 24, + "ECC-192", + /* prime */ + "/////////////////////l//////////", + + /* B */ + "P2456UMSWESFf+chSYGmIVwutkp1Hhcn", + + /* order */ + "////////////////cTxuDXHhoR6qqYWn", + + /* Gx */ + "68se3h0maFPylo3hGw680FJ/2ls2/n0I", + + /* Gy */ + "1nahbV/8sdXZ417jQoJDrNFvTw4UUKWH" +}, +#endif +#ifdef ECC224 +{ + 28, + "ECC-224", + + /* prime */ + "400000000000000000000000000000000000BV", + + /* B */ + "21HkWGL2CxJIp", + + /* order */ + "4000000000000000000Kxnixk9t8MLzMiV264/", + + /* Gx */ + "jpqOf1BHus6Yd/pyhyVpP", + + /* Gy */ + "3FCtyo2yHA5SFjkCGbYxbOvNeChwS+j6wSIwck", +}, +#endif +#ifdef ECC256 +{ + 32, + "ECC-256", + /* Prime */ + "F////y000010000000000000000////////////////", + + /* B */ + "5h6DTYgEfFdi+kzLNQOXhnb7GQmp5EmzZlEF3udqc1B", + + /* Order */ + "F////y00000//////////+yvlgjfnUUXFEvoiByOoLH", + + /* Gx */ + "6iNqVBXB497+BpcvMEaGF9t0ts1BUipeFIXEKNOcCAM", + + /* Gy */ + "4/ZGkB+6d+RZkVhIdmFdXOhpZDNQp5UpiksG6Wtlr7r" +}, +#endif +#ifdef ECC384 +{ + 48, + "ECC-384", + /* prime */ + "//////////////////////////////////////////x/////00000000003/" + "////", + + /* B */ + "ip4lf+8+v+IOZWLhu/Wj6HWTd6x+WK4I0nG8Zr0JXrh6LZcDYYxHdIg5oEtJ" + "x2hl", + + /* Order */ + "////////////////////////////////nsDDWVGtBTzO6WsoIB2dUkpi6MhC" + "nIbp", + + /* Gx and Gy */ + "geVA8hwB1JUEiSSUyo2jT6uTEsABfvkOMVT1u89KAZXL0l9TlrKfR3fKNZXo" + "TWgt", + + "DXVUIfOcB6zTdfY/afBSAVZq7RqecXHywTen4xNmkC0AOB7E7Nw1dNf37NoG" + "wWvV" +}, +#endif +#ifdef ECC521 +{ + 65, + "ECC-521", + /* prime */ + "V///////////////////////////////////////////////////////////" + "///////////////////////////", + + /* B */ + "56LFhbXZXoQ7vAQ8Q2sXK3kejfoMvcp5VEuj8cHZl49uLOPEL7iVfDx5bB0l" + "JknlmSrSz+8FImqyUz57zHhK3y0", + + /* Order */ + "V//////////////////////////////////////////+b66XuE/BvPhVym1I" + "FS9fT0xjScuYPn7hhjljnwHE6G9", + + /* Gx and Gy */ + "CQ5ZWQt10JfpPu+osOZbRH2d6I1EGK/jI7uAAzWQqqzkg5BNdVlvrae/Xt19" + "wB/gDupIBF1XMf2c/b+VZ72vRrc", + + "HWvAMfucZl015oANxGiVHlPcFL4ILURH6WNhxqN9pvcB9VkSfbUz2P0nL2v0" + "J+j1s4rF726edB2G8Y+b7QVqMPG", +}, +#endif +{ + 0, + NULL, NULL, NULL, NULL, NULL, NULL +} +}; + +#if 0 + +/* you plug in a prime and B value and it finds a pseudo-random base point */ +void ecc_find_base(void) +{ + static char *prime = "26959946667150639794667015087019630673637144422540572481103610249951"; + static char *order = "26959946667150639794667015087019637467111563745054605861463538557247"; + static char *b = "9538957348957353489587"; + mp_int pp, p, r, B, tmp1, tmp2, tx, ty, x, y; + char buf[4096]; + int i; + + mp_init_multi(&tx, &ty, &x, &y, &p, &pp, &r, &B, &tmp1, &tmp2, NULL); + mp_read_radix(&p, prime, 10); + mp_read_radix(&r, order, 10); + mp_read_radix(&B, b, 10); + + /* get (p+1)/4 */ + mp_add_d(&p, 1, &pp); + mp_div_2(&pp, &pp); + mp_div_2(&pp, &pp); + + buf[0] = 0; + do { + printf("."); fflush(stdout); + /* make a random value of x */ + for (i = 0; i < 16; i++) buf[i+1] = rand() & 255; + mp_read_raw(&x, buf, 17); + mp_copy(&x, &tx); + + /* now compute x^3 - 3x + b */ + mp_expt_d(&x, 3, &tmp1); + mp_mul_d(&x, 3, &tmp2); + mp_sub(&tmp1, &tmp2, &tmp1); + mp_add(&tmp1, &B, &tmp1); + mp_mod(&tmp1, &p, &tmp1); + + /* now compute sqrt via x^((p+1)/4) */ + mp_exptmod(&tmp1, &pp, &p, &tmp2); + mp_copy(&tmp2, &ty); + + /* now square it */ + mp_sqrmod(&tmp2, &p, &tmp2); + + /* tmp2 should equal tmp1 */ + } while (mp_cmp(&tmp1, &tmp2)); + + /* now output values in way that libtomcrypt wants */ + mp_todecimal(&p, buf); + printf("\n\np==%s\n", buf); + mp_tohex(&B, buf); + printf("b==%s\n", buf); + mp_todecimal(&r, buf); + printf("r==%s\n", buf); + mp_tohex(&tx, buf); + printf("Gx==%s\n", buf); + mp_tohex(&ty, buf); + printf("Gy==%s\n", buf); + + mp_clear_multi(&tx, &ty, &x, &y, &p, &pp, &r, &B, &tmp1, &tmp2, NULL); +} + +#endif + + + + +static int is_valid_idx(int n) +{ + int x; + + for (x = 0; sets[x].size != 0; x++); + if ((n < 0) || (n >= x)) { + return 0; + } + return 1; +} + +static ecc_point *new_point(void) +{ + ecc_point *p; + p = XMALLOC(sizeof(ecc_point)); + if (p == NULL) { + return NULL; + } + if (mp_init_multi(&p->x, &p->y, NULL) != MP_OKAY) { + XFREE(p); + return NULL; + } + return p; +} + +static void del_point(ecc_point *p) +{ + /* prevents free'ing null arguments */ + if (p != NULL) { + mp_clear_multi(&p->x, &p->y, NULL); + XFREE(p); + } +} + +/* double a point R = 2P, R can be P*/ +static int dbl_point(ecc_point *P, ecc_point *R, mp_int *modulus, mp_int *mu) +{ + mp_int s, tmp, tmpx; + int err; + + if ((err = mp_init_multi(&s, &tmp, &tmpx, NULL)) != MP_OKAY) { + return mpi_to_ltc_error(err); + } + + /* s = (3Xp^2 + a) / (2Yp) */ + if ((err = mp_mul_2(&P->y, &tmp)) != MP_OKAY) { goto error; } /* tmp = 2*y */ + if ((err = mp_invmod(&tmp, modulus, &tmp)) != MP_OKAY) { goto error; } /* tmp = 1/tmp mod modulus */ + if ((err = mp_sqr(&P->x, &s)) != MP_OKAY) { goto error; } /* s = x^2 */ + if ((err = mp_reduce(&s, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_mul_d(&s,(mp_digit)3, &s)) != MP_OKAY) { goto error; } /* s = 3*(x^2) */ + if ((err = mp_sub_d(&s,(mp_digit)3, &s)) != MP_OKAY) { goto error; } /* s = 3*(x^2) - 3 */ + if (mp_cmp_d(&s, 0) == MP_LT) { /* if s < 0 add modulus */ + if ((err = mp_add(&s, modulus, &s)) != MP_OKAY) { goto error; } + } + if ((err = mp_mul(&s, &tmp, &s)) != MP_OKAY) { goto error; } /* s = tmp * s mod modulus */ + if ((err = mp_reduce(&s, modulus, mu)) != MP_OKAY) { goto error; } + + /* Xr = s^2 - 2Xp */ + if ((err = mp_sqr(&s, &tmpx)) != MP_OKAY) { goto error; } /* tmpx = s^2 */ + if ((err = mp_reduce(&tmpx, modulus, mu)) != MP_OKAY) { goto error; } /* tmpx = tmpx mod modulus */ + if ((err = mp_sub(&tmpx, &P->x, &tmpx)) != MP_OKAY) { goto error; } /* tmpx = tmpx - x */ + if ((err = mp_submod(&tmpx, &P->x, modulus, &tmpx)) != MP_OKAY) { goto error; } /* tmpx = tmpx - x mod modulus */ + + /* Yr = -Yp + s(Xp - Xr) */ + if ((err = mp_sub(&P->x, &tmpx, &tmp)) != MP_OKAY) { goto error; } /* tmp = x - tmpx */ + if ((err = mp_mul(&tmp, &s, &tmp)) != MP_OKAY) { goto error; } /* tmp = tmp * s */ + if ((err = mp_submod(&tmp, &P->y, modulus, &R->y)) != MP_OKAY) { goto error; } /* y = tmp - y mod modulus */ + if ((err = mp_copy(&tmpx, &R->x)) != MP_OKAY) { goto error; } /* x = tmpx */ + + err = CRYPT_OK; + goto done; +error: + err = mpi_to_ltc_error(err); +done: + mp_clear_multi(&tmpx, &tmp, &s, NULL); + return err; +} + +/* add two different points over Z/pZ, R = P + Q, note R can equal either P or Q */ +static int add_point(ecc_point *P, ecc_point *Q, ecc_point *R, mp_int *modulus, mp_int *mu) +{ + mp_int s, tmp, tmpx; + int err; + + if ((err = mp_init(&tmp)) != MP_OKAY) { + return mpi_to_ltc_error(err); + } + + /* is P==Q or P==-Q? */ + if (((err = mp_neg(&Q->y, &tmp)) != MP_OKAY) || ((err = mp_mod(&tmp, modulus, &tmp)) != MP_OKAY)) { + mp_clear(&tmp); + return mpi_to_ltc_error(err); + } + + if (mp_cmp(&P->x, &Q->x) == MP_EQ) + if (mp_cmp(&P->y, &Q->y) == MP_EQ || mp_cmp(&P->y, &tmp) == MP_EQ) { + mp_clear(&tmp); + return dbl_point(P, R, modulus, mu); + } + + if ((err = mp_init_multi(&tmpx, &s, NULL)) != MP_OKAY) { + mp_clear(&tmp); + return mpi_to_ltc_error(err); + } + + /* get s = (Yp - Yq)/(Xp-Xq) mod p */ + if ((err = mp_sub(&P->x, &Q->x, &tmp)) != MP_OKAY) { goto error; } /* tmp = Px - Qx mod modulus */ + if (mp_cmp_d(&tmp, 0) == MP_LT) { /* if tmp<0 add modulus */ + if ((err = mp_add(&tmp, modulus, &tmp)) != MP_OKAY) { goto error; } + } + if ((err = mp_invmod(&tmp, modulus, &tmp)) != MP_OKAY) { goto error; } /* tmp = 1/tmp mod modulus */ + if ((err = mp_sub(&P->y, &Q->y, &s)) != MP_OKAY) { goto error; } /* s = Py - Qy mod modulus */ + if (mp_cmp_d(&s, 0) == MP_LT) { /* if s<0 add modulus */ + if ((err = mp_add(&s, modulus, &s)) != MP_OKAY) { goto error; } + } + if ((err = mp_mul(&s, &tmp, &s)) != MP_OKAY) { goto error; } /* s = s * tmp mod modulus */ + if ((err = mp_reduce(&s, modulus, mu)) != MP_OKAY) { goto error; } + + /* Xr = s^2 - Xp - Xq */ + if ((err = mp_sqr(&s, &tmp)) != MP_OKAY) { goto error; } /* tmp = s^2 mod modulus */ + if ((err = mp_reduce(&tmp, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_sub(&tmp, &P->x, &tmp)) != MP_OKAY) { goto error; } /* tmp = tmp - Px */ + if ((err = mp_sub(&tmp, &Q->x, &tmpx)) != MP_OKAY) { goto error; } /* tmpx = tmp - Qx */ + + /* Yr = -Yp + s(Xp - Xr) */ + if ((err = mp_sub(&P->x, &tmpx, &tmp)) != MP_OKAY) { goto error; } /* tmp = Px - tmpx */ + if ((err = mp_mul(&tmp, &s, &tmp)) != MP_OKAY) { goto error; } /* tmp = tmp * s */ + if ((err = mp_submod(&tmp, &P->y, modulus, &R->y)) != MP_OKAY) { goto error; } /* Ry = tmp - Py mod modulus */ + if ((err = mp_mod(&tmpx, modulus, &R->x)) != MP_OKAY) { goto error; } /* Rx = tmpx mod modulus */ + + err = CRYPT_OK; + goto done; +error: + err = mpi_to_ltc_error(err); +done: + mp_clear_multi(&s, &tmpx, &tmp, NULL); + return err; +} + +/* size of sliding window, don't change this! */ +#define WINSIZE 4 + +/* perform R = kG where k == integer and G == ecc_point */ +static int ecc_mulmod(mp_int *k, ecc_point *G, ecc_point *R, mp_int *modulus) +{ + ecc_point *tG, *M[8]; + int i, j, err; + mp_int mu; + mp_digit buf; + int first, bitbuf, bitcpy, bitcnt, mode, digidx; + + /* init barrett reduction */ + if ((err = mp_init(&mu)) != MP_OKAY) { + return mpi_to_ltc_error(err); + } + if ((err = mp_reduce_setup(&mu, modulus)) != MP_OKAY) { + mp_clear(&mu); + return mpi_to_ltc_error(err); + } + + /* alloc ram for window temps */ + for (i = 0; i < 8; i++) { + M[i] = new_point(); + if (M[i] == NULL) { + for (j = 0; j < i; j++) { + del_point(M[j]); + } + mp_clear(&mu); + return CRYPT_MEM; + } + } + + /* make a copy of G incase R==G */ + tG = new_point(); + if (tG == NULL) { err = CRYPT_MEM; goto done; } + + /* tG = G */ + if ((err = mp_copy(&G->x, &tG->x)) != MP_OKAY) { goto error; } + if ((err = mp_copy(&G->y, &tG->y)) != MP_OKAY) { goto error; } + + /* calc the M tab, which holds kG for k==8..15 */ + /* M[0] == 8G */ + if ((err = dbl_point(G, M[0], modulus, &mu)) != CRYPT_OK) { goto done; } + if ((err = dbl_point(M[0], M[0], modulus, &mu)) != CRYPT_OK) { goto done; } + if ((err = dbl_point(M[0], M[0], modulus, &mu)) != CRYPT_OK) { goto done; } + + /* now find (8+k)G for k=1..7 */ + for (j = 9; j < 16; j++) { + if ((err = add_point(M[j-9], G, M[j-8], modulus, &mu)) != CRYPT_OK) { goto done; } + } + + /* setup sliding window */ + mode = 0; + bitcnt = 1; + buf = 0; + digidx = k->used - 1; + bitcpy = bitbuf = 0; + first = 1; + + /* perform ops */ + for (;;) { + /* grab next digit as required */ + if (--bitcnt == 0) { + if (digidx == -1) { + break; + } + buf = k->dp[digidx--]; + bitcnt = (int) DIGIT_BIT; + } + + /* grab the next msb from the multiplicand */ + i = (buf >> (DIGIT_BIT - 1)) & 1; + buf <<= 1; + + /* skip leading zero bits */ + if (mode == 0 && i == 0) { + continue; + } + + /* if the bit is zero and mode == 1 then we double */ + if (mode == 1 && i == 0) { + if ((err = dbl_point(R, R, modulus, &mu)) != CRYPT_OK) { goto done; } + continue; + } + + /* else we add it to the window */ + bitbuf |= (i << (WINSIZE - ++bitcpy)); + mode = 2; + + if (bitcpy == WINSIZE) { + /* if this is the first window we do a simple copy */ + if (first == 1) { + /* R = kG [k = first window] */ + if ((err = mp_copy(&M[bitbuf-8]->x, &R->x)) != MP_OKAY) { goto error; } + if ((err = mp_copy(&M[bitbuf-8]->y, &R->y)) != MP_OKAY) { goto error; } + first = 0; + } else { + /* normal window */ + /* ok window is filled so double as required and add */ + /* double first */ + for (j = 0; j < WINSIZE; j++) { + if ((err = dbl_point(R, R, modulus, &mu)) != CRYPT_OK) { goto done; } + } + + /* then add, bitbuf will be 8..15 [8..2^WINSIZE] guaranteed */ + if ((err = add_point(R, M[bitbuf-8], R, modulus, &mu)) != CRYPT_OK) { goto done; } + } + /* empty window and reset */ + bitcpy = bitbuf = 0; + mode = 1; + } + } + + /* if bits remain then double/add */ + if (mode == 2 && bitcpy > 0) { + /* double then add */ + for (j = 0; j < bitcpy; j++) { + /* only double if we have had at least one add first */ + if (first == 0) { + if ((err = dbl_point(R, R, modulus, &mu)) != CRYPT_OK) { goto done; } + } + + bitbuf <<= 1; + if ((bitbuf & (1 << WINSIZE)) != 0) { + if (first == 1){ + /* first add, so copy */ + if ((err = mp_copy(&tG->x, &R->x)) != MP_OKAY) { goto error; } + if ((err = mp_copy(&tG->y, &R->y)) != MP_OKAY) { goto error; } + first = 0; + } else { + /* then add */ + if ((err = add_point(R, tG, R, modulus, &mu)) != CRYPT_OK) { goto done; } + } + } + } + } + err = CRYPT_OK; + goto done; +error: + err = mpi_to_ltc_error(err); +done: + del_point(tG); + for (i = 0; i < 8; i++) { + del_point(M[i]); + } + mp_clear(&mu); + return err; +} + +#undef WINSIZE + +int ecc_test(void) +{ + mp_int modulus, order; + ecc_point *G, *GG; + int i, err, primality; + + if ((err = mp_init_multi(&modulus, &order, NULL)) != MP_OKAY) { + return mpi_to_ltc_error(err); + } + + G = new_point(); + GG = new_point(); + if (G == NULL || GG == NULL) { + mp_clear_multi(&modulus, &order, NULL); + del_point(G); + del_point(GG); + return CRYPT_MEM; + } + + for (i = 0; sets[i].size; i++) { + #if 0 + printf("Testing %d\n", sets[i].size); + #endif + if ((err = mp_read_radix(&modulus, (char *)sets[i].prime, 64)) != MP_OKAY) { goto error; } + if ((err = mp_read_radix(&order, (char *)sets[i].order, 64)) != MP_OKAY) { goto error; } + + /* is prime actually prime? */ + if ((err = is_prime(&modulus, &primality)) != CRYPT_OK) { goto done; } + if (primality == 0) { + err = CRYPT_FAIL_TESTVECTOR; + goto done; + } + + /* is order prime ? */ + if ((err = is_prime(&order, &primality)) != CRYPT_OK) { goto done; } + if (primality == 0) { + err = CRYPT_FAIL_TESTVECTOR; + goto done; + } + + if ((err = mp_read_radix(&G->x, (char *)sets[i].Gx, 64)) != MP_OKAY) { goto error; } + if ((err = mp_read_radix(&G->y, (char *)sets[i].Gy, 64)) != MP_OKAY) { goto error; } + + /* then we should have G == (order + 1)G */ + if ((err = mp_add_d(&order, 1, &order)) != MP_OKAY) { goto error; } + if ((err = ecc_mulmod(&order, G, GG, &modulus)) != CRYPT_OK) { goto done; } + if (mp_cmp(&G->x, &GG->x) != 0 || mp_cmp(&G->y, &GG->y) != 0) { + err = CRYPT_FAIL_TESTVECTOR; + goto done; + } + } + err = CRYPT_OK; + goto done; +error: + err = mpi_to_ltc_error(err); +done: + del_point(GG); + del_point(G); + mp_clear_multi(&order, &modulus, NULL); + return err; +} + +void ecc_sizes(int *low, int *high) +{ + int i; + _ARGCHK(low != NULL); + _ARGCHK(high != NULL); + + *low = INT_MAX; + *high = 0; + for (i = 0; sets[i].size != 0; i++) { + if (sets[i].size < *low) { + *low = sets[i].size; + } + if (sets[i].size > *high) { + *high = sets[i].size; + } + } +} + +int ecc_make_key(prng_state *prng, int wprng, int keysize, ecc_key *key) +{ + int x, err; + ecc_point *base; + mp_int prime; + unsigned char *buf; + + _ARGCHK(key != NULL); + + /* good prng? */ + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + /* find key size */ + for (x = 0; (keysize > sets[x].size) && (sets[x].size != 0); x++); + keysize = sets[x].size; + + if (sets[x].size == 0) { + return CRYPT_INVALID_KEYSIZE; + } + key->idx = x; + + /* allocate ram */ + base = NULL; + buf = XMALLOC(128); + if (buf == NULL) { + return CRYPT_MEM; + } + + /* make up random string */ + if (prng_descriptor[wprng].read(buf, (unsigned long)keysize, prng) != (unsigned long)keysize) { + err = CRYPT_ERROR_READPRNG; + goto __ERR2; + } + + /* setup the key variables */ + if ((err = mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->k, &prime, NULL)) != MP_OKAY) { + err = mpi_to_ltc_error(err); + goto __ERR; + } + base = new_point(); + if (base == NULL) { + mp_clear_multi(&key->pubkey.x, &key->pubkey.y, &key->k, &prime, NULL); + err = CRYPT_MEM; + goto __ERR; + } + + /* read in the specs for this key */ + if ((err = mp_read_radix(&prime, (char *)sets[key->idx].prime, 64)) != MP_OKAY) { goto error; } + if ((err = mp_read_radix(&base->x, (char *)sets[key->idx].Gx, 64)) != MP_OKAY) { goto error; } + if ((err = mp_read_radix(&base->y, (char *)sets[key->idx].Gy, 64)) != MP_OKAY) { goto error; } + if ((err = mp_read_unsigned_bin(&key->k, (unsigned char *)buf, keysize)) != MP_OKAY) { goto error; } + + /* make the public key */ + if ((err = ecc_mulmod(&key->k, base, &key->pubkey, &prime)) != CRYPT_OK) { goto __ERR; } + key->type = PK_PRIVATE; + + /* shrink key */ + if ((err = mp_shrink(&key->k)) != MP_OKAY) { goto error; } + if ((err = mp_shrink(&key->pubkey.x)) != MP_OKAY) { goto error; } + if ((err = mp_shrink(&key->pubkey.y)) != MP_OKAY) { goto error; } + + /* free up ram */ + err = CRYPT_OK; + goto __ERR; +error: + err = mpi_to_ltc_error(err); +__ERR: + del_point(base); + mp_clear(&prime); +__ERR2: +#ifdef CLEAN_STACK + zeromem(buf, 128); +#endif + + XFREE(buf); + + return err; +} + +void ecc_free(ecc_key *key) +{ + _ARGCHK(key != NULL); + mp_clear_multi(&key->pubkey.x, &key->pubkey.y, &key->k, NULL); +} + +static int compress_y_point(ecc_point *pt, int idx, int *result) +{ + mp_int tmp, tmp2, p; + int err; + + _ARGCHK(pt != NULL); + _ARGCHK(result != NULL); + + if ((err = mp_init_multi(&tmp, &tmp2, &p, NULL)) != MP_OKAY) { + return mpi_to_ltc_error(err); + } + + /* get x^3 - 3x + b */ + if ((err = mp_read_radix(&p, (char *)sets[idx].B, 64)) != MP_OKAY) { goto error; } /* p = B */ + if ((err = mp_expt_d(&pt->x, 3, &tmp)) != MP_OKAY) { goto error; } /* tmp = pX^3 */ + if ((err = mp_mul_d(&pt->x, 3, &tmp2)) != MP_OKAY) { goto error; } /* tmp2 = 3*pX^3 */ + if ((err = mp_sub(&tmp, &tmp2, &tmp)) != MP_OKAY) { goto error; } /* tmp = tmp - tmp2 */ + if ((err = mp_add(&tmp, &p, &tmp)) != MP_OKAY) { goto error; } /* tmp = tmp + p */ + if ((err = mp_read_radix(&p, (char *)sets[idx].prime, 64)) != MP_OKAY) { goto error; } /* p = prime */ + if ((err = mp_mod(&tmp, &p, &tmp)) != MP_OKAY) { goto error; } /* tmp = tmp mod p */ + + /* now find square root */ + if ((err = mp_add_d(&p, 1, &tmp2)) != MP_OKAY) { goto error; } /* tmp2 = p + 1 */ + if ((err = mp_div_2d(&tmp2, 2, &tmp2, NULL)) != MP_OKAY) { goto error; } /* tmp2 = (p+1)/4 */ + if ((err = mp_exptmod(&tmp, &tmp2, &p, &tmp)) != MP_OKAY) { goto error; } /* tmp = (x^3 - 3x + b)^((p+1)/4) mod p */ + + /* if tmp equals the y point give a 0, otherwise 1 */ + if (mp_cmp(&tmp, &pt->y) == 0) { + *result = 0; + } else { + *result = 1; + } + + err = CRYPT_OK; + goto done; +error: + err = mpi_to_ltc_error(err); +done: + mp_clear_multi(&p, &tmp, &tmp2, NULL); + return err; +} + +static int expand_y_point(ecc_point *pt, int idx, int result) +{ + mp_int tmp, tmp2, p; + int err; + + _ARGCHK(pt != NULL); + + if ((err = mp_init_multi(&tmp, &tmp2, &p, NULL)) != MP_OKAY) { + return CRYPT_MEM; + } + + /* get x^3 - 3x + b */ + if ((err = mp_read_radix(&p, (char *)sets[idx].B, 64)) != MP_OKAY) { goto error; } /* p = B */ + if ((err = mp_expt_d(&pt->x, 3, &tmp)) != MP_OKAY) { goto error; } /* tmp = pX^3 */ + if ((err = mp_mul_d(&pt->x, 3, &tmp2)) != MP_OKAY) { goto error; } /* tmp2 = 3*pX^3 */ + if ((err = mp_sub(&tmp, &tmp2, &tmp)) != MP_OKAY) { goto error; } /* tmp = tmp - tmp2 */ + if ((err = mp_add(&tmp, &p, &tmp)) != MP_OKAY) { goto error; } /* tmp = tmp + p */ + if ((err = mp_read_radix(&p, (char *)sets[idx].prime, 64)) != MP_OKAY) { goto error; } /* p = prime */ + if ((err = mp_mod(&tmp, &p, &tmp)) != MP_OKAY) { goto error; } /* tmp = tmp mod p */ + + /* now find square root */ + if ((err = mp_add_d(&p, 1, &tmp2)) != MP_OKAY) { goto error; } /* tmp2 = p + 1 */ + if ((err = mp_div_2d(&tmp2, 2, &tmp2, NULL)) != MP_OKAY) { goto error; } /* tmp2 = (p+1)/4 */ + if ((err = mp_exptmod(&tmp, &tmp2, &p, &tmp)) != MP_OKAY) { goto error; } /* tmp = (x^3 - 3x + b)^((p+1)/4) mod p */ + + /* if result==0, then y==tmp, otherwise y==p-tmp */ + if (result == 0) { + if ((err = mp_copy(&tmp, &pt->y) != MP_OKAY)) { goto error; } + } else { + if ((err = mp_sub(&p, &tmp, &pt->y) != MP_OKAY)) { goto error; } + } + + err = CRYPT_OK; + goto done; +error: + err = mpi_to_ltc_error(err); +done: + mp_clear_multi(&p, &tmp, &tmp2, NULL); + return err; +} + +int ecc_export(unsigned char *out, unsigned long *outlen, int type, ecc_key *key) +{ + unsigned long y, z; + int cp, err; + + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + _ARGCHK(key != NULL); + + /* can we store the static header? */ + if (*outlen < (PACKET_SIZE + 3)) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* type valid? */ + if (key->type != PK_PRIVATE && type == PK_PRIVATE) { + return CRYPT_PK_TYPE_MISMATCH; + } + + /* output type and magic byte */ + y = PACKET_SIZE; + out[y++] = (unsigned char)type; + out[y++] = (unsigned char)sets[key->idx].size; + + /* output x coordinate */ + OUTPUT_BIGNUM(&(key->pubkey.x), out, y, z); + + /* compress y and output it */ + if ((err = compress_y_point(&key->pubkey, key->idx, &cp)) != CRYPT_OK) { + return err; + } + out[y++] = (unsigned char)cp; + + if (type == PK_PRIVATE) { + OUTPUT_BIGNUM(&key->k, out, y, z); + } + + /* store header */ + packet_store_header(out, PACKET_SECT_ECC, PACKET_SUB_KEY); + *outlen = y; + + return CRYPT_OK; +} + +int ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key) +{ + unsigned long x, y, s; + int err; + + _ARGCHK(in != NULL); + _ARGCHK(key != NULL); + + /* check length */ + if ((3+PACKET_SIZE) > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* check type */ + if ((err = packet_valid_header((unsigned char *)in, PACKET_SECT_ECC, PACKET_SUB_KEY)) != CRYPT_OK) { + return err; + } + + /* init key */ + if (mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->k, NULL) != MP_OKAY) { + return CRYPT_MEM; + } + + y = PACKET_SIZE; + key->type = (int)in[y++]; + s = (unsigned long)in[y++]; + + for (x = 0; (s > (unsigned long)sets[x].size) && (sets[x].size != 0); x++); + if (sets[x].size == 0) { + err = CRYPT_INVALID_KEYSIZE; + goto error; + } + key->idx = (int)x; + + /* type check both values */ + if ((key->type != PK_PUBLIC) && (key->type != PK_PRIVATE)) { + err = CRYPT_INVALID_PACKET; + goto error; + } + + /* is the key idx valid? */ + if (is_valid_idx(key->idx) != 1) { + err = CRYPT_INVALID_PACKET; + goto error; + } + + /* load x coordinate */ + INPUT_BIGNUM(&key->pubkey.x, in, x, y, inlen); + + /* load y */ + x = (unsigned long)in[y++]; + if ((err = expand_y_point(&key->pubkey, key->idx, (int)x)) != CRYPT_OK) { + goto error; + } + + if (key->type == PK_PRIVATE) { + /* load private key */ + INPUT_BIGNUM(&key->k, in, x, y, inlen); + } + + /* eliminate private key if public */ + if (key->type == PK_PUBLIC) { + mp_clear(&key->k); + } + + return CRYPT_OK; +error: + mp_clear_multi(&key->pubkey.x, &key->pubkey.y, &key->k, NULL); + return err; +} + +int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key, + unsigned char *out, unsigned long *outlen) +{ + unsigned long x, y; + ecc_point *result; + mp_int prime; + int err; + + _ARGCHK(private_key != NULL); + _ARGCHK(public_key != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + + /* type valid? */ + if (private_key->type != PK_PRIVATE) { + return CRYPT_PK_NOT_PRIVATE; + } + + if (private_key->idx != public_key->idx) { + return CRYPT_PK_TYPE_MISMATCH; + } + + /* make new point */ + result = new_point(); + if (result == NULL) { + return CRYPT_MEM; + } + + if ((err = mp_init(&prime)) != MP_OKAY) { + del_point(result); + return mpi_to_ltc_error(err); + } + + if ((err = mp_read_radix(&prime, (char *)sets[private_key->idx].prime, 64)) != MP_OKAY) { goto error; } + if ((err = ecc_mulmod(&private_key->k, &public_key->pubkey, result, &prime)) != CRYPT_OK) { goto done1; } + + x = (unsigned long)mp_unsigned_bin_size(&result->x); + y = (unsigned long)mp_unsigned_bin_size(&result->y); + + if (*outlen < (x+y)) { + err = CRYPT_BUFFER_OVERFLOW; + goto done1; + } + *outlen = x+y; + if ((err = mp_to_unsigned_bin(&result->x, out)) != MP_OKAY) { goto error; } + if ((err = mp_to_unsigned_bin(&result->y, out+x)) != MP_OKAY) { goto error; } + + err = CRYPT_OK; + goto done1; +error: + err = mpi_to_ltc_error(err); +done1: + mp_clear(&prime); + del_point(result); + return err; +} + +int ecc_get_size(ecc_key *key) +{ + _ARGCHK(key != NULL); + if (is_valid_idx(key->idx)) + return sets[key->idx].size; + else + return INT_MAX; /* large value known to cause it to fail when passed to ecc_make_key() */ +} + +#include "ecc_sys.c" + +#endif + + diff --git a/ecc_sys.c b/ecc_sys.c new file mode 100644 index 00000000..5b0ef822 --- /dev/null +++ b/ecc_sys.c @@ -0,0 +1,495 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +int ecc_encrypt_key(const unsigned char *inkey, unsigned long keylen, + unsigned char *out, unsigned long *len, + prng_state *prng, int wprng, int hash, + ecc_key *key) +{ + unsigned char *pub_expt, *ecc_shared, *skey; + ecc_key pubkey; + unsigned long x, y, z, hashsize, pubkeysize; + int err; + + _ARGCHK(inkey != NULL); + _ARGCHK(out != NULL); + _ARGCHK(len != NULL); + _ARGCHK(key != NULL); + + /* check that wprng/cipher/hash are not invalid */ + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + if ((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + + if (keylen > hash_descriptor[hash].hashsize) { + return CRYPT_INVALID_HASH; + } + + /* make a random key and export the public copy */ + if ((err = ecc_make_key(prng, wprng, ecc_get_size(key), &pubkey)) != CRYPT_OK) { + return err; + } + + pub_expt = XMALLOC(ECC_BUF_SIZE); + ecc_shared = XMALLOC(ECC_BUF_SIZE); + skey = XMALLOC(MAXBLOCKSIZE); + if (pub_expt == NULL || ecc_shared == NULL || skey == NULL) { + if (pub_expt != NULL) { + XFREE(pub_expt); + } + if (ecc_shared != NULL) { + XFREE(ecc_shared); + } + if (skey != NULL) { + XFREE(skey); + } + ecc_free(&pubkey); + return CRYPT_MEM; + } + + pubkeysize = ECC_BUF_SIZE; + if ((err = ecc_export(pub_expt, &pubkeysize, PK_PUBLIC, &pubkey)) != CRYPT_OK) { + ecc_free(&pubkey); + goto __ERR; + } + + /* now check if the out buffer is big enough */ + if (*len < (9 + PACKET_SIZE + pubkeysize + hash_descriptor[hash].hashsize)) { + ecc_free(&pubkey); + err = CRYPT_BUFFER_OVERFLOW; + goto __ERR; + } + + /* make random key */ + hashsize = hash_descriptor[hash].hashsize; + x = ECC_BUF_SIZE; + if ((err = ecc_shared_secret(&pubkey, key, ecc_shared, &x)) != CRYPT_OK) { + ecc_free(&pubkey); + goto __ERR; + } + ecc_free(&pubkey); + z = MAXBLOCKSIZE; + if ((err = hash_memory(hash, ecc_shared, x, skey, &z)) != CRYPT_OK) { + goto __ERR; + } + + /* store header */ + packet_store_header(out, PACKET_SECT_ECC, PACKET_SUB_ENC_KEY); + + /* output header */ + y = PACKET_SIZE; + + /* size of hash name and the name itself */ + out[y++] = hash_descriptor[hash].ID; + + /* length of ECC pubkey and the key itself */ + STORE32L(pubkeysize, out+y); + y += 4; + + for (x = 0; x < pubkeysize; x++, y++) { + out[y] = pub_expt[x]; + } + + STORE32L(keylen, out+y); + y += 4; + + /* Encrypt/Store the encrypted key */ + for (x = 0; x < keylen; x++, y++) { + out[y] = skey[x] ^ inkey[x]; + } + *len = y; + + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + /* clean up */ + zeromem(pub_expt, ECC_BUF_SIZE); + zeromem(ecc_shared, ECC_BUF_SIZE); + zeromem(skey, MAXBLOCKSIZE); +#endif + + XFREE(skey); + XFREE(ecc_shared); + XFREE(pub_expt); + + return err; +} + +int ecc_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *outkey, unsigned long *keylen, + ecc_key *key) +{ + unsigned char *shared_secret, *skey; + unsigned long x, y, z, hashsize, keysize; + int hash, err; + ecc_key pubkey; + + _ARGCHK(in != NULL); + _ARGCHK(outkey != NULL); + _ARGCHK(keylen != NULL); + _ARGCHK(key != NULL); + + /* right key type? */ + if (key->type != PK_PRIVATE) { + return CRYPT_PK_NOT_PRIVATE; + } + + /* correct length ? */ + if (inlen < PACKET_SIZE+1+4+4) { + return CRYPT_INVALID_PACKET; + } else { + inlen -= PACKET_SIZE+1+4+4; + } + + /* is header correct? */ + if ((err = packet_valid_header((unsigned char *)in, PACKET_SECT_ECC, PACKET_SUB_ENC_KEY)) != CRYPT_OK) { + return err; + } + + /* now lets get the hash name */ + y = PACKET_SIZE; + hash = find_hash_id(in[y++]); + if (hash == -1) { + return CRYPT_INVALID_HASH; + } + + /* common values */ + hashsize = hash_descriptor[hash].hashsize; + + /* get public key */ + LOAD32L(x, in+y); + if (inlen < x) { + return CRYPT_INVALID_PACKET; + } else { + inlen -= x; + } + y += 4; + if ((err = ecc_import(in+y, x, &pubkey)) != CRYPT_OK) { + return err; + } + y += x; + + /* allocate memory */ + shared_secret = XMALLOC(ECC_BUF_SIZE); + skey = XMALLOC(MAXBLOCKSIZE); + if (shared_secret == NULL || skey == NULL) { + if (shared_secret != NULL) { + XFREE(shared_secret); + } + if (skey != NULL) { + XFREE(skey); + } + ecc_free(&pubkey); + return CRYPT_MEM; + } + + /* make shared key */ + x = ECC_BUF_SIZE; + if ((err = ecc_shared_secret(key, &pubkey, shared_secret, &x)) != CRYPT_OK) { + ecc_free(&pubkey); + goto __ERR; + } + ecc_free(&pubkey); + + z = MAXBLOCKSIZE; + if ((err = hash_memory(hash, shared_secret, x, skey, &z)) != CRYPT_OK) { + goto __ERR; + } + + LOAD32L(keysize, in+y); + if (inlen < keysize) { + err = CRYPT_INVALID_PACKET; + goto __ERR; + } else { + inlen -= keysize; + } + y += 4; + + if (*keylen < keysize) { + err = CRYPT_BUFFER_OVERFLOW; + goto __ERR; + } + + /* Decrypt the key */ + for (x = 0; x < keysize; x++, y++) { + outkey[x] = skey[x] ^ in[y]; + } + + *keylen = keysize; + + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + zeromem(shared_secret, ECC_BUF_SIZE); + zeromem(skey, MAXBLOCKSIZE); +#endif + + XFREE(skey); + XFREE(shared_secret); + + return err; +} + +int ecc_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, ecc_key *key) +{ + ecc_key pubkey; + mp_int b, p; + unsigned char *epubkey, *er; + unsigned long x, y, pubkeysize, rsize; + int err; + + _ARGCHK(in != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + _ARGCHK(key != NULL); + + /* is this a private key? */ + if (key->type != PK_PRIVATE) { + return CRYPT_PK_NOT_PRIVATE; + } + + /* is the IDX valid ? */ + if (is_valid_idx(key->idx) != 1) { + return CRYPT_PK_INVALID_TYPE; + } + + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + /* make up a key and export the public copy */ + if ((err = ecc_make_key(prng, wprng, ecc_get_size(key), &pubkey)) != CRYPT_OK) { + return err; + } + + /* allocate ram */ + epubkey = XMALLOC(ECC_BUF_SIZE); + er = XMALLOC(ECC_BUF_SIZE); + if (epubkey == NULL || er == NULL) { + if (epubkey != NULL) { + XFREE(epubkey); + } + if (er != NULL) { + XFREE(er); + } + ecc_free(&pubkey); + return CRYPT_MEM; + } + + pubkeysize = ECC_BUF_SIZE; + if ((err = ecc_export(epubkey, &pubkeysize, PK_PUBLIC, &pubkey)) != CRYPT_OK) { + ecc_free(&pubkey); + goto __ERR; + } + + /* get the hash and load it as a bignum into 'b' */ + /* init the bignums */ + if ((err = mp_init_multi(&b, &p, NULL)) != MP_OKAY) { + ecc_free(&pubkey); + err = mpi_to_ltc_error(err); + goto __ERR; + } + if ((err = mp_read_radix(&p, (char *)sets[key->idx].order, 64)) != MP_OKAY) { goto error; } + if ((err = mp_read_unsigned_bin(&b, (unsigned char *)in, (int)inlen)) != MP_OKAY) { goto error; } + + /* find b = (m - x)/k */ + if ((err = mp_invmod(&pubkey.k, &p, &pubkey.k)) != MP_OKAY) { goto error; } /* k = 1/k */ + if ((err = mp_submod(&b, &key->k, &p, &b)) != MP_OKAY) { goto error; } /* b = m - x */ + if ((err = mp_mulmod(&b, &pubkey.k, &p, &b)) != MP_OKAY) { goto error; } /* b = (m - x)/k */ + + /* export it */ + rsize = (unsigned long)mp_unsigned_bin_size(&b); + if (rsize > ECC_BUF_SIZE) { + err = CRYPT_BUFFER_OVERFLOW; + goto error; + } + if ((err = mp_to_unsigned_bin(&b, er)) != MP_OKAY) { goto error; } + + /* now lets check the outlen before we write */ + if (*outlen < (12 + rsize + pubkeysize)) { + err = CRYPT_BUFFER_OVERFLOW; + goto __ERR; + } + + /* lets output */ + y = PACKET_SIZE; + + /* size of public key */ + STORE32L(pubkeysize, out+y); + y += 4; + + /* copy the public key */ + for (x = 0; x < pubkeysize; x++, y++) { + out[y] = epubkey[x]; + } + + /* size of 'r' */ + STORE32L(rsize, out+y); + y += 4; + + /* copy r */ + for (x = 0; x < rsize; x++, y++) { + out[y] = er[x]; + } + + /* store header */ + packet_store_header(out, PACKET_SECT_ECC, PACKET_SUB_SIGNED); + *outlen = y; + + /* all ok */ + err = CRYPT_OK; + goto __ERR; +error: + err = mpi_to_ltc_error(err); +__ERR: + mp_clear_multi(&b, &p, NULL); + ecc_free(&pubkey); +#ifdef CLEAN_STACK + zeromem(er, ECC_BUF_SIZE); + zeromem(epubkey, ECC_BUF_SIZE); +#endif + + XFREE(epubkey); + XFREE(er); + + return err; +} + +/* verify that mG = (bA + Y) + * + * The signatures work by making up a fresh key "a" with a public key "A". Now we want to sign so the + * public key Y = xG can verify it. + * + * b = (m - x)/k, A is the public key embedded and Y is the users public key [who signed it] + * A = kG therefore bA == ((m-x)/k)kG == (m-x)G + * + * Adding Y = xG to the bA gives us (m-x)G + xG == mG + * + * The user given only xG, kG and b cannot determine k or x which means they can't find the private key. + * + */ +int ecc_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long inlen, + int *stat, ecc_key *key) +{ + ecc_point *mG; + ecc_key pubkey; + mp_int b, p, m, mu; + unsigned long x, y; + int err; + + _ARGCHK(sig != NULL); + _ARGCHK(hash != NULL); + _ARGCHK(stat != NULL); + _ARGCHK(key != NULL); + + /* default to invalid signature */ + *stat = 0; + + if (siglen < PACKET_SIZE+4+4) { + return CRYPT_INVALID_PACKET; + } else { + siglen -= PACKET_SIZE+4+4; + } + + /* is the message format correct? */ + if ((err = packet_valid_header((unsigned char *)sig, PACKET_SECT_ECC, PACKET_SUB_SIGNED)) != CRYPT_OK) { + return err; + } + + /* get hash name */ + y = PACKET_SIZE; + + /* get size of public key */ + LOAD32L(x, sig+y); + if (siglen < x) { + return CRYPT_INVALID_PACKET; + } else { + siglen -= x; + } + y += 4; + + /* load the public key */ + if ((err = ecc_import((unsigned char*)sig+y, x, &pubkey)) != CRYPT_OK) { + return err; + } + y += x; + + /* load size of 'b' */ + LOAD32L(x, sig+y); + if (siglen < x) { + return CRYPT_INVALID_PACKET; + } else { + siglen -= x; + } + y += 4; + + /* init values */ + if ((err = mp_init_multi(&b, &m, &p, &mu, NULL)) != MP_OKAY) { + ecc_free(&pubkey); + return mpi_to_ltc_error(err); + } + + mG = new_point(); + if (mG == NULL) { + mp_clear_multi(&b, &m, &p, &mu, NULL); + ecc_free(&pubkey); + return CRYPT_MEM; + } + + /* load b */ + if ((err = mp_read_unsigned_bin(&b, (unsigned char *)sig+y, (int)x)) != MP_OKAY) { goto error; } + y += x; + + /* get m in binary a bignum */ + if ((err = mp_read_unsigned_bin(&m, (unsigned char *)hash, (int)inlen)) != MP_OKAY) { goto error; } + + /* load prime */ + if ((err = mp_read_radix(&p, (char *)sets[key->idx].prime, 64)) != MP_OKAY) { goto error; } + + /* calculate barrett stuff */ + mp_set(&mu, 1); + mp_lshd(&mu, 2 * USED(&p)); + if ((err = mp_div(&mu, &p, &mu, NULL)) != MP_OKAY) { goto error; } + + /* get bA */ + if ((err = ecc_mulmod(&b, &pubkey.pubkey, &pubkey.pubkey, &p)) != CRYPT_OK) { goto done; } + + /* get bA + Y */ + if ((err = add_point(&pubkey.pubkey, &key->pubkey, &pubkey.pubkey, &p, &mu)) != CRYPT_OK) { goto done; } + + /* get mG */ + if ((err = mp_read_radix(&mG->x, (char *)sets[key->idx].Gx, 64)) != MP_OKAY) { goto error; } + if ((err = mp_read_radix(&mG->y, (char *)sets[key->idx].Gy, 64)) != MP_OKAY) { goto error; } + if ((err = ecc_mulmod(&m, mG, mG, &p)) != CRYPT_OK) { goto done; } + + /* compare mG to bA + Y */ + if (mp_cmp(&mG->x, &pubkey.pubkey.x) == MP_EQ && mp_cmp(&mG->y, &pubkey.pubkey.y) == MP_EQ) { + *stat = 1; + } + + /* clear up and return */ + err = CRYPT_OK; + goto done; +error: + err = mpi_to_ltc_error(err); +done: + del_point(mG); + ecc_free(&pubkey); + mp_clear_multi(&p, &m, &b, &mu, NULL); + return err; +} + diff --git a/error_to_string.c b/error_to_string.c new file mode 100644 index 00000000..9c388fac --- /dev/null +++ b/error_to_string.c @@ -0,0 +1,60 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +static const char *err_2_str[] = +{ + "CRYPT_OK", + "CRYPT_ERROR", + "Non-fatal 'no-operation' requested.", + + "Invalid keysize for block cipher.", + "Invalid number of rounds for block cipher.", + "Algorithm failed test vectors.", + + "Buffer overflow.", + "Invalid input packet.", + + "Invalid number of bits for a PRNG.", + "Error reading the PRNG.", + + "Invalid cipher specified.", + "Invalid hash specified.", + "Invalid PRNG specified.", + + "Out of memory.", + + "Invalid PK key or key type specified for function.", + "A private PK key is required.", + + "Invalid argument provided.", + "File Not Found", + + "Invalid PK type.", + "Invalid PK system.", + "Duplicate PK key found on keyring.", + "Key not found in keyring.", + "Invalid sized parameter.", + + "Invalid size for prime.", + +}; + +const char *error_to_string(int err) +{ + if (err < 0 || err >= (int)(sizeof(err_2_str)/sizeof(err_2_str[0]))) { + return "Invalid error code."; + } else { + return err_2_str[err]; + } +} + diff --git a/fortuna.c b/fortuna.c new file mode 100644 index 00000000..32cfa086 --- /dev/null +++ b/fortuna.c @@ -0,0 +1,256 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* Implementation of Fortuna by Tom St Denis + +We deviate slightly here for reasons of simplicity [and to fit in the API]. First all "sources" +in the AddEntropy function are fixed to 0. Second since no reliable timer is provided +we reseed automatically when len(pool0) >= 64 or every FORTUNA_WD calls to the read function */ + +#include "mycrypt.h" + +#ifdef FORTUNA + +const struct _prng_descriptor fortuna_desc = { + "fortuna", + &fortuna_start, + &fortuna_add_entropy, + &fortuna_ready, + &fortuna_read, + &fortuna_done, + &fortuna_export, + &fortuna_import + +}; + +/* update the IV */ +static void fortuna_update_iv(prng_state *prng) +{ + int x; + unsigned char *IV; + /* update IV */ + IV = prng->fortuna.IV; + for (x = 0; x < 16; x++) { + IV[x] = (IV[x] + 1) & 255; + if (IV[x] != 0) break; + } +} + +/* reseed the PRNG */ +static int fortuna_reseed(prng_state *prng) +{ + unsigned char tmp[32]; + hash_state md; + int err, x; + + ++prng->fortuna.reset_cnt; + + /* new K == SHA256(K || s) where s == SHA256(P0) || SHA256(P1) ... */ + sha256_init(&md); + if ((err = sha256_process(&md, prng->fortuna.K, 32)) != CRYPT_OK) { + return err; + } + + for (x = 0; x < 32; x++) { + if (x == 0 || ((prng->fortuna.reset_cnt >> (x-1)) & 1) == 0) { + /* terminate this hash */ + if ((err = sha256_done(&prng->fortuna.pool[x], tmp)) != CRYPT_OK) { + return err; + } + /* add it to the string */ + if ((err = sha256_process(&md, tmp, 32)) != CRYPT_OK) { + return err; + } + /* reset this pool */ + sha256_init(&prng->fortuna.pool[x]); + } else { + break; + } + } + + /* finish key */ + if ((err = sha256_done(&md, prng->fortuna.K)) != CRYPT_OK) { + return err; + } + if ((err = rijndael_setup(prng->fortuna.K, 32, 0, &prng->fortuna.skey)) != CRYPT_OK) { + return err; + } + fortuna_update_iv(prng); + + /* reset pool len */ + prng->fortuna.pool0_len = 0; + prng->fortuna.wd = 0; + + +#ifdef CLEAN_STACK + zeromem(&md, sizeof(md)); + zeromem(tmp, sizeof(tmp)); +#endif + + return CRYPT_OK; +} + +int fortuna_start(prng_state *prng) +{ + int err, x; + + _ARGCHK(prng != NULL); + + /* initialize the pools */ + for (x = 0; x < 32; x++) { + sha256_init(&prng->fortuna.pool[x]); + } + prng->fortuna.pool_idx = prng->fortuna.pool0_len = prng->fortuna.reset_cnt = + prng->fortuna.wd = 0; + + /* reset bufs */ + zeromem(prng->fortuna.K, 32); + if ((err = rijndael_setup(prng->fortuna.K, 32, 0, &prng->fortuna.skey)) != CRYPT_OK) { + return err; + } + zeromem(prng->fortuna.IV, 16); + + return CRYPT_OK; +} + +int fortuna_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng) +{ + unsigned char tmp[2]; + int err; + + _ARGCHK(buf != NULL); + _ARGCHK(prng != NULL); + + /* ensure len <= 32 */ + if (len > 32) { + return CRYPT_INVALID_ARG; + } + + /* add s || length(buf) || buf to pool[pool_idx] */ + tmp[0] = 0; + tmp[1] = len; + if ((err = sha256_process(&prng->fortuna.pool[prng->fortuna.pool_idx], tmp, 2)) != CRYPT_OK) { + return err; + } + if ((err = sha256_process(&prng->fortuna.pool[prng->fortuna.pool_idx], buf, len)) != CRYPT_OK) { + return err; + } + if (prng->fortuna.pool_idx == 0) { + prng->fortuna.pool0_len += len + 2; + } + prng->fortuna.pool_idx = (prng->fortuna.pool_idx + 1) & 31; + + return CRYPT_OK; +} + +int fortuna_ready(prng_state *prng) +{ + return fortuna_reseed(prng); +} + +unsigned long fortuna_read(unsigned char *dst, unsigned long len, prng_state *prng) +{ + unsigned char tmp[16]; + int err; + unsigned long tlen, n; + + _ARGCHK(dst != NULL); + _ARGCHK(prng != NULL); + + /* do we have to reseed? */ + if (++prng->fortuna.wd == FORTUNA_WD || prng->fortuna.pool0_len >= 64) { + if ((err = fortuna_reseed(prng)) != CRYPT_OK) { + return 0; + } + } + + /* now generate the blocks required */ + tlen = len; + while (len > 0) { + if (len >= 16) { + /* encrypt the IV and store it */ + rijndael_ecb_encrypt(prng->fortuna.IV, dst, &prng->fortuna.skey); + dst += 16; + len -= 16; + } else { + rijndael_ecb_encrypt(prng->fortuna.IV, tmp, &prng->fortuna.skey); + XMEMCPY(dst, tmp, len); + len = 0; + } + fortuna_update_iv(prng); + } + + /* generate new key */ + rijndael_ecb_encrypt(prng->fortuna.IV, prng->fortuna.K , &prng->fortuna.skey); fortuna_update_iv(prng); + rijndael_ecb_encrypt(prng->fortuna.IV, prng->fortuna.K+16, &prng->fortuna.skey); fortuna_update_iv(prng); + if ((err = rijndael_setup(prng->fortuna.K, 32, 0, &prng->fortuna.skey)) != CRYPT_OK) { + return 0; + } + +#ifdef CLEAN_STACK + zeromem(tmp, sizeof(tmp)); +#endif + return tlen; +} + +void fortuna_done(prng_state *prng) +{ + _ARGCHK(prng != NULL); + /* call cipher done when we invent one ;-) */ +} + +int fortuna_export(unsigned char *out, unsigned long *outlen, prng_state *prng) +{ + int x; + + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + _ARGCHK(prng != NULL); + + /* we'll write 2048 bytes for s&g's */ + if (*outlen < 2048) { + return CRYPT_BUFFER_OVERFLOW; + } + + for (x = 0; x < 32; x++) { + if (fortuna_read(out+x*64, 64, prng) != 64) { + return CRYPT_ERROR_READPRNG; + } + } + *outlen = 2048; + + return CRYPT_OK; +} + +int fortuna_import(const unsigned char *in, unsigned long inlen, prng_state *prng) +{ + int err, x; + + _ARGCHK(in != NULL); + _ARGCHK(prng != NULL); + + if (inlen != 2048) { + return CRYPT_INVALID_ARG; + } + + if ((err = fortuna_start(prng)) != CRYPT_OK) { + return err; + } + for (x = 0; x < 32; x++) { + if ((err = fortuna_add_entropy(in+x*64, 64, &prng)) != CRYPT_OK) { + return err; + } + } + return fortuna_ready(&prng); +} + +#endif + diff --git a/hash_file.c b/hash_file.c new file mode 100644 index 00000000..0511f2c7 --- /dev/null +++ b/hash_file.c @@ -0,0 +1,41 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int hash_file(int hash, const char *fname, unsigned char *dst, unsigned long *outlen) +{ +#ifdef NO_FILE + return CRYPT_NOP; +#else + FILE *in; + int err; + _ARGCHK(fname != NULL); + _ARGCHK(dst != NULL); + _ARGCHK(outlen != NULL); + + if ((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + + in = fopen(fname, "rb"); + if (in == NULL) { + return CRYPT_FILE_NOTFOUND; + } + + err = hash_filehandle(hash, in, dst, outlen); + if (fclose(in) != 0) { + return CRYPT_ERROR; + } + + return err; +#endif +} + diff --git a/hash_filehandle.c b/hash_filehandle.c new file mode 100644 index 00000000..777588a1 --- /dev/null +++ b/hash_filehandle.c @@ -0,0 +1,51 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int hash_filehandle(int hash, FILE *in, unsigned char *dst, unsigned long *outlen) +{ +#ifdef NO_FILE + return CRYPT_NOP; +#else + hash_state md; + unsigned char buf[512]; + size_t x; + int err; + + _ARGCHK(dst != NULL); + _ARGCHK(outlen != NULL); + _ARGCHK(in != NULL); + + if ((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + + if (*outlen < hash_descriptor[hash].hashsize) { + return CRYPT_BUFFER_OVERFLOW; + } + *outlen = hash_descriptor[hash].hashsize; + + hash_descriptor[hash].init(&md); + do { + x = fread(buf, 1, sizeof(buf), in); + if ((err = hash_descriptor[hash].process(&md, buf, x)) != CRYPT_OK) { + return err; + } + } while (x == sizeof(buf)); + err = hash_descriptor[hash].done(&md, dst); + +#ifdef CLEAN_STACK + zeromem(buf, sizeof(buf)); +#endif + return err; +#endif +} + diff --git a/hash_memory.c b/hash_memory.c new file mode 100644 index 00000000..89abb856 --- /dev/null +++ b/hash_memory.c @@ -0,0 +1,48 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +int hash_memory(int hash, const unsigned char *data, unsigned long len, unsigned char *dst, unsigned long *outlen) +{ + hash_state *md; + int err; + + _ARGCHK(data != NULL); + _ARGCHK(dst != NULL); + _ARGCHK(outlen != NULL); + + if ((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + + if (*outlen < hash_descriptor[hash].hashsize) { + return CRYPT_BUFFER_OVERFLOW; + } + + md = XMALLOC(sizeof(hash_state)); + if (md == NULL) { + return CRYPT_MEM; + } + + hash_descriptor[hash].init(md); + if ((err = hash_descriptor[hash].process(md, data, len)) != CRYPT_OK) { + goto __ERR; + } + err = hash_descriptor[hash].done(md, dst); + *outlen = hash_descriptor[hash].hashsize; +__ERR: +#ifdef CLEAN_STACK + zeromem(md, sizeof(hash_state)); +#endif + XFREE(md); + + return err; +} diff --git a/helper.pl b/helper.pl deleted file mode 100755 index 3dcafcaf..00000000 --- a/helper.pl +++ /dev/null @@ -1,409 +0,0 @@ -#!/usr/bin/env perl - -use strict; -use warnings; - -use Getopt::Long; -use File::Find 'find'; -use File::Basename 'basename'; -use File::Glob 'bsd_glob'; - -sub read_file { - my $f = shift; - open my $fh, "<", $f or die "FATAL: read_rawfile() cannot open file '$f': $!"; - binmode $fh; - return do { local $/; <$fh> }; -} - -sub write_file { - my ($f, $data) = @_; - die "FATAL: write_file() no data" unless defined $data; - open my $fh, ">", $f or die "FATAL: write_file() cannot open file '$f': $!"; - binmode $fh; - print $fh $data or die "FATAL: write_file() cannot write to '$f': $!"; - close $fh or die "FATAL: write_file() cannot close '$f': $!"; - return; -} - -sub check_source { - my @all_files = (bsd_glob("makefile*"), bsd_glob("*.sh"), bsd_glob("*.pl")); - find({ wanted=>sub { push @all_files, $_ if -f $_ }, no_chdir=>1 }, qw/src tests demos/); - - my $fails = 0; - for my $file (sort @all_files) { - next unless $file =~ /\.(c|h|pl|py|sh)$/ || basename($file) =~ /^makefile/i; - my $troubles = {}; - my $lineno = 1; - my $content = read_file($file); - push @{$troubles->{crlf_line_end}}, '?' if $content =~ /\r/; - for my $l (split /\n/, $content) { - push @{$troubles->{merge_conflict}}, $lineno if $l =~ /^(<<<<<<<|=======|>>>>>>>)([^<=>]|$)/; - push @{$troubles->{trailing_space}}, $lineno if $l =~ / $/; - push @{$troubles->{tab}}, $lineno if $l =~ /\t/ && basename($file) !~ /^makefile/i; - push @{$troubles->{non_ascii_char}}, $lineno if $l =~ /[^[:ascii:]]/; - push @{$troubles->{cpp_comment}}, $lineno if $file =~ /\.(c|h)$/ && ($l =~ /\s\/\// || $l =~ /\/\/\s/); - # in ./src we prefer using XMEMCPY, XMALLOC, XFREE ... - push @{$troubles->{unwanted_memcpy}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bmemcpy\s*\(/; - push @{$troubles->{unwanted_malloc}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bmalloc\s*\(/; - push @{$troubles->{unwanted_realloc}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\brealloc\s*\(/; - push @{$troubles->{unwanted_calloc}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bcalloc\s*\(/; - push @{$troubles->{unwanted_free}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /[^>.]\bfree\s*\(/; - push @{$troubles->{unwanted_memset}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bmemset\s*\(/; - push @{$troubles->{unwanted_memcpy}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bmemcpy\s*\(/; - push @{$troubles->{unwanted_memmove}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bmemmove\s*\(/; - push @{$troubles->{unwanted_memcmp}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bmemcmp\s*\(/; - push @{$troubles->{unwanted_strcmp}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bstrcmp\s*\(/; - push @{$troubles->{unwanted_strcpy}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bstrcpy\s*\(/; - push @{$troubles->{unwanted_strlen}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bstrlen\s*\(/; - push @{$troubles->{unwanted_strncpy}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bstrncpy\s*\(/; - push @{$troubles->{unwanted_clock}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bclock\s*\(/; - push @{$troubles->{unwanted_qsort}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bqsort\s*\(/; - push @{$troubles->{sizeof_no_brackets}}, $lineno if $file =~ /^src\/.*\.c$/ && $l =~ /\bsizeof\s*[^\(]/; - if ($file =~ m|src/.*\.c$| && - $file !~ m|src/ciphers/.*\.c$| && - $file !~ m|src/math/.+_desc.c$| && - $file !~ m|src/pk/ec25519/tweetnacl.c$| && - $file !~ m|src/stream/sober128/sober128_stream.c$| && - $l =~ /^static(\s+[a-zA-Z0-9_]+)+\s++([^s][a-zA-Z0-9_]+)\s*\(/) { - push @{$troubles->{staticfunc_name}}, "$2"; - } - if ($file =~ m|src/.*\.[ch]$| && $l =~ /^\s*#\s*define\s+(_[A-Z_][a-zA-Z0-9_]*)\b/) { - my $n = $1; - push @{$troubles->{invalid_macro_name}}, "$lineno($n)" - unless ($file eq 'src/headers/tomcrypt_cfg.h' && $n eq '__has_builtin') || - ($file eq 'src/headers/tomcrypt_cfg.h' && $n eq '__has_attribute') || - ($file eq 'src/headers/tomcrypt_cfg.h' && $n eq '_WIN32_WINNT') || - ($file eq 'src/prngs/rng_get_bytes.c' && $n eq '_WIN32_WINNT'); - } - $lineno++; - } - for my $k (sort keys %$troubles) { - warn "[$k] $file line:" . join(",", @{$troubles->{$k}}) . "\n"; - $fails++; - } - } - - warn( $fails > 0 ? "check-source: FAIL $fails\n" : "check-source: PASS\n" ); - return $fails; -} - -sub check_defines { - my $fails = 0; - my $cust_h = read_file("src/headers/tomcrypt_custom.h"); - my $cryp_c = read_file("src/misc/crypt/crypt.c"); - $cust_h =~ s|/\*.*?\*/||sg; # remove comments - $cryp_c =~ s|/\*.*?\*/||sg; # remove comments - my %def = map { $_ => 1 } map { my $x = $_; $x =~ s/^\s*#define\s+(LTC_\S+).*$/$1/; $x } grep { /^\s*#define\s+LTC_\S+/ } split /\n/, $cust_h; - for my $d (sort keys %def) { - next if $d =~ /^LTC_(DH\d+|ECC\d+|ECC_\S+|MPI|MUTEX_\S+\(x\)|NO_\S+)$/; - warn "$d missing in src/misc/crypt/crypt.c\n" and $fails++ if $cryp_c !~ /\Q$d\E/; - } - warn( $fails > 0 ? "check-defines: FAIL $fails\n" : "check-defines: PASS\n" ); - return $fails; -} - -sub check_descriptor { - my $which = shift; - my $what = shift; - my @src; - my @descriptors; - find({ wanted => sub { push @src, $_ if $_ =~ /\.c$/ }, no_chdir=>1 }, "./src/${which}/"); - for my $f (@src) { - my @n = map { my $x = $_; $x =~ s/^.*?ltc_${what}_descriptor\s+(\S+).*$/$1/; $x } grep { $_ =~ /^[^()]*ltc_${what}_descriptor/ } split /\n/, read_file($f); - push @descriptors, @n if @n; - } - my $fails = 0; - for my $d (@descriptors) { - for my $f ("./src/misc/crypt/crypt_register_all_${which}.c") { - my $txt = read_file($f); - warn "$d missing in $f\n" and $fails++ if $txt !~ /\Q$d\E/; - } - } - for my $d (@descriptors) { - for my $f ("./tests/test.c") { - my $txt = read_file($f); - warn "$d missing in $f\n" and $fails++ if $txt !~ /\Q$d\E/; - } - } - my $name = sprintf("%-17s", "check-${which}:"); - warn( $fails > 0 ? "${name}FAIL $fails\n" : "${name}PASS\n" ); - return $fails; -} - -sub check_descriptors { - my $fails = 0; - $fails = $fails + check_descriptor("ciphers", "cipher"); - $fails = $fails + check_descriptor("hashes", "hash"); - $fails = $fails + check_descriptor("prngs", "prng"); - return $fails; -} - -sub check_comments { - my $fails = 0; - my $first_comment = <<'MARKER'; -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -MARKER - my @all_files; - find({ wanted=> sub { push @all_files, $_ if $_ =~ /\.(c|h)$/ }, no_chdir=>1 }, 'demos', 'src', 'tests'); - for my $f (@all_files) { - my $txt = read_file($f); - if ($txt !~ /^\Q$first_comment\E/s) { - warn "[first_comment] $f\n"; - $fails++; - } - } - warn( $fails > 0 ? "check-comments: FAIL $fails\n" : "check-comments: PASS\n" ); - return $fails; -} - -sub prepare_variable { - my ($varname, @list) = @_; - my $output = "$varname="; - my $len = length($output); - foreach my $obj (sort @list) { - $len = $len + length $obj; - $obj =~ s/\*/\$/; - if ($len > 100) { - $output .= "\\\n"; - $len = length $obj; - } - $output .= $obj . ' '; - } - $output =~ s/ $//; - return $output; -} - -sub prepare_msvc_files_xml { - my ($all, $exclude_re, $targets) = @_; - my $last = []; - my $depth = 2; - - # sort files in the same order as visual studio (ugly, I know) - my @parts = (); - for my $orig (@$all) { - my $p = $orig; - $p =~ s|/|/~|g; - $p =~ s|/~([^/]+)$|/$1|g; - # now we have: 'src/pk/rsa/rsa_verify_hash.c' > 'src/~pk/~rsa/rsa_verify_hash.c' - my @l = map { sprintf "% -99s", $_ } split /\//, $p; - push @parts, [ $orig, join(':', @l) ]; - } - my @sorted = map { $_->[0] } sort { $a->[1] cmp $b->[1] } @parts; - - my $files = "\r\n"; - for my $full (@sorted) { - my @items = split /\//, $full; # split by '/' - $full =~ s|/|\\|g; # replace '/' bt '\' - shift @items; # drop first one (src) - pop @items; # drop last one (filename.ext) - my $current = \@items; - if (join(':', @$current) ne join(':', @$last)) { - my $common = 0; - $common++ while ($last->[$common] && $current->[$common] && $last->[$common] eq $current->[$common]); - my $back = @$last - $common; - if ($back > 0) { - $files .= ("\t" x --$depth) . "\r\n" for (1..$back); - } - my $fwd = [ @$current ]; splice(@$fwd, 0, $common); - for my $i (0..scalar(@$fwd) - 1) { - $files .= ("\t" x $depth) . "[$i]\"\r\n"; - $files .= ("\t" x $depth) . "\t>\r\n"; - $depth++; - } - $last = $current; - } - $files .= ("\t" x $depth) . "\r\n"; - if ($full =~ $exclude_re) { - for (@$targets) { - $files .= ("\t" x $depth) . "\t\r\n"; - $files .= ("\t" x $depth) . "\t\t\r\n"; - $files .= ("\t" x $depth) . "\t\r\n"; - } - } -########### aes_enc "hack" disabled - discussion: https://github.com/libtom/libtomcrypt/pull/158 -# if ($full eq 'src\ciphers\aes\aes.c') { #hack -# my %cmd = ( -# 'Debug|Win32' => [ 'Debug/aes.obj;Debug/aes_enc.obj', 'cl /nologo /MLd /W3 /Gm /GX /ZI /Od /I "src\headers" /I "..\libtommath" /D "_DEBUG" /D "LTM_DESC" /D "WIN32" /D "_MBCS" /D "_LIB" /D /D "USE_LTM" /Fp"Debug/libtomcrypt.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c $(InputPath) cl /nologo /DENCRYPT_ONLY /MLd /W3 /Gm /GX /ZI /Od /I "src\headers" /I "..\libtommath" /D "_DEBUG" /D "LTM_DESC" /D "WIN32" /D "_MBCS" /D "_LIB" /D /D "USE_LTM" /Fp"Debug/libtomcrypt.pch" /YX /Fo"Debug/aes_enc.obj" /Fd"Debug/" /FD /GZ /c $(InputPath) ' ], -# 'Release|Win32' => [ 'Release/aes.obj;Release/aes_enc.obj', 'cl /nologo /MLd /W3 /Gm /GX /ZI /Od /I "src\headers" /I "..\libtommath" /D "_DEBUG" /D "LTM_DESC" /D "WIN32" /D "_MBCS" /D "_LIB" /D /D "USE_LTM" /Fp"Release/libtomcrypt.pch" /YX /Fo"Release/" /Fd"Release/" /FD /GZ /c $(InputPath) cl /nologo /DENCRYPT_ONLY /MLd /W3 /Gm /GX /ZI /Od /I "src\headers" /I "..\libtommath" /D "_DEBUG" /D "LTM_DESC" /D "WIN32" /D "_MBCS" /D "_LIB" /D /D "USE_LTM" /Fp"Release/libtomcrypt.pch" /YX /Fo"Release/aes_enc.obj" /Fd"Release/" /FD /GZ /c $(InputPath) ' ], -# ); -# for (@$targets) { -# next unless $cmd{$_}; -# $files .= ("\t" x $depth) . "\t\r\n"; -# $files .= ("\t" x $depth) . "\t\t\r\n"; -# $files .= ("\t" x $depth) . "\t\r\n"; -# } -# } - $files .= ("\t" x $depth) . "\r\n"; - } - $files .= ("\t" x --$depth) . "\r\n" for (@$last); - $files .= "\t"; - return $files; -} - -sub patch_file { - my ($content, @variables) = @_; - for my $v (@variables) { - if ($v =~ /^([A-Z0-9_]+)\s*=.*$/si) { - my $name = $1; - $content =~ s/\n\Q$name\E\b.*?[^\\]\n/\n$v\n/s; - } - else { - die "patch_file failed: " . substr($v, 0, 30) . ".."; - } - } - return $content; -} - -sub version_from_tomcrypt_h { - my $h = read_file(shift); - if ($h =~ /\n#define\s*SCRYPT\s*"([0-9]+)\.([0-9]+)\.([0-9]+)(\S*)"/s) { - return "VERSION_PC=$1.$2.$3", "VERSION_MAJOR=1", "VERSION_MINOR=0", "VERSION_PATCH=1", "VERSION=$1.$2.$3$4", "PROJECT_NUMBER=$1.$2.$3$4"; - } - else { - die "#define SCRYPT not found in tomcrypt.h"; - } -} - -sub make_sources_cmake { - my ($list, $pub_headers) = @_; - my $output = "set(SOURCES\n"; - - foreach my $obj (sort @$list) { - $output .= $obj . "\n"; - } - $output .= ")\n\n"; - - if ($pub_headers eq "") { - return $output; - } - - $output .= "set(PUBLIC_HEADERS\n"; - - foreach my $obj (sort @$pub_headers) { - $output .= $obj . "\n"; - } - - $output .= ")\n\nset(PRIVATE_HEADERS src/headers/tomcrypt_private.h)\n"; - $output .= "set_property(GLOBAL PROPERTY PUBLIC_HEADERS \$\{PUBLIC_HEADERS\}\)\n\n"; - - return $output; -} - -sub process_makefiles { - my $write = shift; - my $changed_count = 0; - my @c = (); - find({ no_chdir => 1, wanted => sub { push @c, $_ if -f $_ && $_ =~ /\.c$/ && $_ !~ /tab.c$/ } }, 'src'); - my @h = (); - find({ no_chdir => 1, wanted => sub { push @h, $_ if -f $_ && $_ =~ /\.h$/ && $_ !~ /dh_static.h$/ && $_ !~ /tomcrypt_private.h$/ } }, 'src'); - my @all = (); - find({ no_chdir => 1, wanted => sub { push @all, $_ if -f $_ && $_ =~ /\.(c|h)$/ } }, 'src'); - my @t = qw(); - find({ no_chdir => 1, wanted => sub { push @t, $_ if $_ =~ /(common|no_prng|_tests?|test).c$/ } }, 'tests'); - - my @o = sort ('src/ciphers/aes/aes_enc.o', 'src/ciphers/aes/aes_enc_desc.o', map { my $x = $_; $x =~ s/\.c$/.o/; $x } @c); - my $var_o = prepare_variable("OBJECTS", @o); - my $var_h = prepare_variable("HEADERS_PUB", (sort @h)); - (my $var_obj = $var_o) =~ s/\.o\b/.obj/sg; - - my @t_srcs = sort (map { my $x = $_; $x =~ s/^tests\///; $x } @t); - my $var_to = prepare_variable("TOBJECTS", sort map { my $x = $_; $x =~ s/\.c$/.o/; $x } @t); - (my $var_tobj = $var_to) =~ s/\.o\b/.obj/sg; - - my @ver_version = version_from_tomcrypt_h("src/headers/tomcrypt.h"); - - # update MSVC project files - my $msvc_files = prepare_msvc_files_xml(\@all, qr/tab\.c$/, ['Debug|Win32', 'Release|Win32', 'Debug|x64', 'Release|x64']); - for my $m (qw/libtomcrypt_VS2008.vcproj/) { - my $old = read_file($m); - my $new = $old; - $new =~ s|.*|$msvc_files|s; - if ($old ne $new) { - write_file($m, $new) if $write; - warn "changed: $m\n"; - $changed_count++; - } - } - - # update OBJECTS + HEADERS in makefile* - for my $m (qw/ makefile makefile.shared makefile.unix makefile.mingw makefile.msvc makefile_include.mk doc\/Doxyfile sources.cmake tests\/sources.cmake /) { - my $old = read_file($m); - my $new = $m eq 'makefile.msvc' ? patch_file($old, $var_obj, $var_h, $var_tobj, @ver_version) - : $m eq 'sources.cmake' ? make_sources_cmake(\@all, \@h) - : $m eq 'tests/sources.cmake' ? make_sources_cmake(\@t_srcs, "") - : patch_file($old, $var_o, $var_h, $var_to, @ver_version); - - if ($old ne $new) { - write_file($m, $new) if $write; - warn "changed: $m\n"; - $changed_count++; - } - } - - if ($write) { - return 0; # no failures - } - else { - warn( $changed_count > 0 ? "check-makefiles: FAIL $changed_count\n" : "check-makefiles: PASS\n" ); - return $changed_count; - } -} - -sub die_usage { - die <<"MARKER"; -usage: $0 -s OR $0 --check-source - $0 -c OR $0 --check-descriptors - $0 -d OR $0 --check-defines - $0 -o OR $0 --check-comments - $0 -m OR $0 --check-makefiles - $0 -a OR $0 --check-all - $0 -u OR $0 --update-makefiles - $0 --fixupind crypt.ind -MARKER -} - -GetOptions( "s|check-source" => \my $check_source, - "c|check-descriptors" => \my $check_descriptors, - "d|check-defines" => \my $check_defines, - "o|check-comments" => \my $check_comments, - "m|check-makefiles" => \my $check_makefiles, - "a|check-all" => \my $check_all, - "u|update-makefiles" => \my $update_makefiles, - "f|fixupind=s" => \my $fixupind, - "h|help" => \my $help - ) or die_usage; - -if ($fixupind) { - my $txt = read_file($fixupind); - $txt =~ s/^([^\n]*\n)/$1\n\\addcontentsline{toc}{chapter}{Index}\n/s; - write_file($fixupind, $txt); - exit 0; -} - -my $failure; -$failure ||= check_source() if $check_all || $check_source; -$failure ||= check_defines() if $check_all || $check_defines; -$failure ||= check_descriptors() if $check_all || $check_descriptors; -$failure ||= check_comments() if $check_all || $check_comments; -$failure ||= process_makefiles(0) if $check_all || $check_makefiles; -$failure ||= process_makefiles(1) if $update_makefiles; - -die_usage unless defined $failure; -exit $failure ? 1 : 0; diff --git a/hmac_done.c b/hmac_done.c new file mode 100644 index 00000000..7ded6a1d --- /dev/null +++ b/hmac_done.c @@ -0,0 +1,110 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* Submited by Dobes Vandermeer (dobes@smartt.com) */ + +#include "mycrypt.h" + +/* + (1) append zeros to the end of K to create a B byte string + (e.g., if K is of length 20 bytes and B=64, then K will be + appended with 44 zero bytes 0x00) + (2) XOR (bitwise exclusive-OR) the B byte string computed in step + (1) with ipad (ipad = the byte 0x36 repeated B times) + (3) append the stream of data 'text' to the B byte string resulting + from step (2) + (4) apply H to the stream generated in step (3) + (5) XOR (bitwise exclusive-OR) the B byte string computed in + step (1) with opad (opad = the byte 0x5C repeated B times.) + (6) append the H result from step (4) to the B byte string + resulting from step (5) + (7) apply H to the stream generated in step (6) and output + the result +*/ + +#ifdef HMAC + +#define HMAC_BLOCKSIZE hash_descriptor[hash].blocksize + +int hmac_done(hmac_state *hmac, unsigned char *hashOut, unsigned long *outlen) +{ + unsigned char *buf, *isha; + unsigned long hashsize, i; + int hash, err; + + _ARGCHK(hmac != NULL); + _ARGCHK(hashOut != NULL); + + /* test hash */ + hash = hmac->hash; + if((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + + /* get the hash message digest size */ + hashsize = hash_descriptor[hash].hashsize; + + /* allocate buffers */ + buf = XMALLOC(HMAC_BLOCKSIZE); + isha = XMALLOC(hashsize); + if (buf == NULL || isha == NULL) { + if (buf != NULL) { + XFREE(buf); + } + if (isha != NULL) { + XFREE(isha); + } + return CRYPT_MEM; + } + + // Get the hash of the first HMAC vector plus the data + if ((err = hash_descriptor[hash].done(&hmac->md, isha)) != CRYPT_OK) { + goto __ERR; + } + + // Create the second HMAC vector vector for step (3) + for(i=0; i < HMAC_BLOCKSIZE; i++) { + buf[i] = hmac->key[i] ^ 0x5C; + } + + // Now calculate the "outer" hash for step (5), (6), and (7) + hash_descriptor[hash].init(&hmac->md); + if ((err = hash_descriptor[hash].process(&hmac->md, buf, HMAC_BLOCKSIZE)) != CRYPT_OK) { + goto __ERR; + } + if ((err = hash_descriptor[hash].process(&hmac->md, isha, hashsize)) != CRYPT_OK) { + goto __ERR; + } + if ((err = hash_descriptor[hash].done(&hmac->md, buf)) != CRYPT_OK) { + goto __ERR; + } + + // copy to output + for (i = 0; i < hashsize && i < *outlen; i++) { + hashOut[i] = buf[i]; + } + *outlen = i; + + err = CRYPT_OK; +__ERR: + XFREE(hmac->key); +#ifdef CLEAN_STACK + zeromem(isha, hashsize); + zeromem(buf, hashsize); + zeromem(hmac, sizeof(*hmac)); +#endif + + XFREE(isha); + XFREE(buf); + + return err; +} + +#endif diff --git a/hmac_file.c b/hmac_file.c new file mode 100644 index 00000000..e88b62f1 --- /dev/null +++ b/hmac_file.c @@ -0,0 +1,77 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* Submited by Dobes Vandermeer (dobes@smartt.com) */ + +#include "mycrypt.h" + +#ifdef HMAC + +/* hmac_file added by Tom St Denis */ +int hmac_file(int hash, const char *fname, + const unsigned char *key, unsigned long keylen, + unsigned char *dst, unsigned long *dstlen) +{ +#ifdef NO_FILE + return CRYPT_NOP; +#else + hmac_state hmac; + FILE *in; + unsigned char buf[512]; + size_t x; + int err; + + _ARGCHK(fname != NULL); + _ARGCHK(key != NULL); + _ARGCHK(dst != NULL); + _ARGCHK(dstlen != NULL); + + if((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + + if ((err = hmac_init(&hmac, hash, key, keylen)) != CRYPT_OK) { + return err; + } + + in = fopen(fname, "rb"); + if (in == NULL) { + return CRYPT_FILE_NOTFOUND; + } + + /* process the file contents */ + do { + x = fread(buf, 1, sizeof(buf), in); + if ((err = hmac_process(&hmac, buf, (unsigned long)x)) != CRYPT_OK) { + /* we don't trap this error since we're already returning an error! */ + fclose(in); + return err; + } + } while (x == sizeof(buf)); + + if (fclose(in) != 0) { + return CRYPT_ERROR; + } + + /* get final hmac */ + if ((err = hmac_done(&hmac, dst, dstlen)) != CRYPT_OK) { + return err; + } + +#ifdef CLEAN_STACK + /* clear memory */ + zeromem(buf, sizeof(buf)); +#endif + return CRYPT_OK; +#endif +} + +#endif + diff --git a/hmac_init.c b/hmac_init.c new file mode 100644 index 00000000..2cbf0012 --- /dev/null +++ b/hmac_init.c @@ -0,0 +1,105 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* Submited by Dobes Vandermeer (dobes@smartt.com) */ + +#include "mycrypt.h" + +/* + (1) append zeros to the end of K to create a B byte string + (e.g., if K is of length 20 bytes and B=64, then K will be + appended with 44 zero bytes 0x00) + (2) XOR (bitwise exclusive-OR) the B byte string computed in step + (1) with ipad (ipad = the byte 0x36 repeated B times) + (3) append the stream of data 'text' to the B byte string resulting + from step (2) + (4) apply H to the stream generated in step (3) + (5) XOR (bitwise exclusive-OR) the B byte string computed in + step (1) with opad (opad = the byte 0x5C repeated B times.) + (6) append the H result from step (4) to the B byte string + resulting from step (5) + (7) apply H to the stream generated in step (6) and output + the result +*/ + +#ifdef HMAC + +#define HMAC_BLOCKSIZE hash_descriptor[hash].blocksize + +int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned long keylen) +{ + unsigned char *buf; + unsigned long hashsize; + unsigned long i, z; + int err; + + _ARGCHK(hmac != NULL); + _ARGCHK(key != NULL); + + /* valid hash? */ + if ((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + hmac->hash = hash; + hashsize = hash_descriptor[hash].hashsize; + + /* valid key length? */ + if (keylen == 0) { + return CRYPT_INVALID_KEYSIZE; + } + + /* allocate ram for buf */ + buf = XMALLOC(HMAC_BLOCKSIZE); + if (buf == NULL) { + return CRYPT_MEM; + } + + /* allocate memory for key */ + hmac->key = XMALLOC(HMAC_BLOCKSIZE); + if (hmac->key == NULL) { + XFREE(buf); + return CRYPT_MEM; + } + + // (1) make sure we have a large enough key + if(keylen > HMAC_BLOCKSIZE) { + z = (unsigned long)HMAC_BLOCKSIZE; + if ((err = hash_memory(hash, key, keylen, hmac->key, &z)) != CRYPT_OK) { + goto __ERR; + } + if(hashsize < HMAC_BLOCKSIZE) { + zeromem((hmac->key) + hashsize, (size_t)(HMAC_BLOCKSIZE - hashsize)); + } + keylen = hashsize; + } else { + XMEMCPY(hmac->key, key, (size_t)keylen); + if(keylen < HMAC_BLOCKSIZE) { + zeromem((hmac->key) + keylen, (size_t)(HMAC_BLOCKSIZE - keylen)); + } + } + + // Create the initial vector for step (3) + for(i=0; i < HMAC_BLOCKSIZE; i++) { + buf[i] = hmac->key[i] ^ 0x36; + } + + // Pre-pend that to the hash data + hash_descriptor[hash].init(&hmac->md); + err = hash_descriptor[hash].process(&hmac->md, buf, HMAC_BLOCKSIZE); +__ERR: +#ifdef CLEAN_STACK + zeromem(buf, HMAC_BLOCKSIZE); +#endif + + XFREE(buf); + return err; +} + +#endif diff --git a/hmac_memory.c b/hmac_memory.c new file mode 100644 index 00000000..d6d33640 --- /dev/null +++ b/hmac_memory.c @@ -0,0 +1,58 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* Submited by Dobes Vandermeer (dobes@smartt.com) */ + +#include "mycrypt.h" + +#ifdef HMAC + +int hmac_memory(int hash, const unsigned char *key, unsigned long keylen, + const unsigned char *data, unsigned long len, + unsigned char *dst, unsigned long *dstlen) +{ + hmac_state *hmac; + int err; + + _ARGCHK(key != NULL); + _ARGCHK(data != NULL); + _ARGCHK(dst != NULL); + _ARGCHK(dstlen != NULL); + + /* allocate ram for hmac state */ + hmac = XMALLOC(sizeof(hmac_state)); + if (hmac == NULL) { + return CRYPT_MEM; + } + + if ((err = hmac_init(hmac, hash, key, keylen)) != CRYPT_OK) { + goto __ERR; + } + + if ((err = hmac_process(hmac, data, len)) != CRYPT_OK) { + goto __ERR; + } + + if ((err = hmac_done(hmac, dst, dstlen)) != CRYPT_OK) { + goto __ERR; + } + + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + zeromem(hmac, sizeof(hmac_state)); +#endif + + XFREE(hmac); + return err; +} + +#endif + diff --git a/hmac_process.c b/hmac_process.c new file mode 100644 index 00000000..ebc6f4cf --- /dev/null +++ b/hmac_process.c @@ -0,0 +1,29 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* Submited by Dobes Vandermeer (dobes@smartt.com) */ + +#include "mycrypt.h" + +#ifdef HMAC + +int hmac_process(hmac_state *hmac, const unsigned char *buf, unsigned long len) +{ + int err; + _ARGCHK(hmac != NULL); + _ARGCHK(buf != NULL); + if ((err = hash_is_valid(hmac->hash)) != CRYPT_OK) { + return err; + } + return hash_descriptor[hmac->hash].process(&hmac->md, buf, len); +} + +#endif + diff --git a/hmac_test.c b/hmac_test.c new file mode 100644 index 00000000..c0f21856 --- /dev/null +++ b/hmac_test.c @@ -0,0 +1,325 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* Submited by Dobes Vandermeer (dobes@smartt.com) */ + +#include "mycrypt.h" + +/* + (1) append zeros to the end of K to create a B byte string + (e.g., if K is of length 20 bytes and B=64, then K will be + appended with 44 zero bytes 0x00) + (2) XOR (bitwise exclusive-OR) the B byte string computed in step + (1) with ipad (ipad = the byte 0x36 repeated B times) + (3) append the stream of data 'text' to the B byte string resulting + from step (2) + (4) apply H to the stream generated in step (3) + (5) XOR (bitwise exclusive-OR) the B byte string computed in + step (1) with opad (opad = the byte 0x5C repeated B times.) + (6) append the H result from step (4) to the B byte string + resulting from step (5) + (7) apply H to the stream generated in step (6) and output + the result +*/ + +#ifdef HMAC + +#define HMAC_BLOCKSIZE hash_descriptor[hash].blocksize + +/* + + TEST CASES SOURCE: + +Network Working Group P. Cheng +Request for Comments: 2202 IBM +Category: Informational R. Glenn + NIST + September 1997 + + Test Cases for HMAC-MD5 and HMAC-SHA-1 +*/ + + +int hmac_test(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + unsigned char digest[MAXBLOCKSIZE]; + int i; + + static const struct hmac_test_case { + int num; + char *algo; + unsigned char key[128]; + unsigned long keylen; + unsigned char data[128]; + unsigned long datalen; + unsigned char digest[MAXBLOCKSIZE]; + } cases[] = { + /* + 3. Test Cases for HMAC-SHA-1 + + test_case = 1 + key = 0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b + key_len = 20 + data = "Hi Ther 20 + digest = 0x4c1a03424b55e07fe7f27be1d58bb9324a9a5a04 + digest-96 = 0x4c1a03424b55e07fe7f27be1 + */ + { 5, "sha1", + {0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c}, 20, + "Test With Truncation", 20, + {0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f, 0xe7, 0xf2, + 0x7b, 0xe1, 0xd5, 0x8b, 0xb9, 0x32, 0x4a, 0x9a, 0x5a, 0x04} }, + + /* + test_case = 6 + key = 0xaa repeated 80 times + key_len = 80 + data = "Test Using Larger Than Block-Size Key - Hash Key First" + data_len = 54 + digest = 0xaa4ae5e15272d00e95705637ce8a3b55ed402112 + */ + { 6, "sha1", + {0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa}, 80, + "Test Using Larger Than Block-Size Key - Hash Key First", 54, + {0xaa, 0x4a, 0xe5, 0xe1, 0x52, 0x72, 0xd0, 0x0e, + 0x95, 0x70, 0x56, 0x37, 0xce, 0x8a, 0x3b, 0x55, + 0xed, 0x40, 0x21, 0x12} }, + + /* + test_case = 7 + key = 0xaa repeated 80 times + key_len = 80 + data = "Test Using Larger Than Block-Size Key and Larger + Than One Block-Size Data" + data_len = 73 + digest = 0xe8e99d0f45237d786d6bbaa7965c7808bbff1a91 + */ + { 7, "sha1", + {0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa}, 80, + "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", 73, + {0xe8, 0xe9, 0x9d, 0x0f, 0x45, 0x23, 0x7d, 0x78, 0x6d, + 0x6b, 0xba, 0xa7, 0x96, 0x5c, 0x78, 0x08, 0xbb, 0xff, 0x1a, 0x91} }, + + /* + 2. Test Cases for HMAC-MD5 + + test_case = 1 + key = 0x0b 0b 0b 0b + 0b 0b 0b 0b + 0b 0b 0b 0b + 0b 0b 0b 0b + key_len = 16 + data = "Hi There" + data_len = 8 + digest = 0x92 94 72 7a + 36 38 bb 1c + 13 f4 8e f8 + 15 8b fc 9d + */ + { 1, "md5", + {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 16, + "Hi There", 8, + {0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c, + 0x13, 0xf4, 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d} }, + /* + test_case = 2 + key = "Jefe" + key_len = 4 + data = "what do ya want for nothing?" + data_len = 28 + digest = 0x750c783e6ab0b503eaa86e310a5db738 + */ + { 2, "md5", + "Jefe", 4, + "what do ya want for nothing?", 28, + {0x75, 0x0c, 0x78, 0x3e, 0x6a, 0xb0, 0xb5, 0x03, + 0xea, 0xa8, 0x6e, 0x31, 0x0a, 0x5d, 0xb7, 0x38} }, + + /* + test_case = 3 + key = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + key_len 16 + data = 0xdd repeated 50 times + data_len = 50 + digest = 0x56be34521d144c88dbb8c733f0e8b3f6 + */ + { 3, "md5", + {0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa}, 16, + {0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd}, 50, + {0x56, 0xbe, 0x34, 0x52, 0x1d, 0x14, 0x4c, 0x88, + 0xdb, 0xb8, 0xc7, 0x33, 0xf0, 0xe8, 0xb3, 0xf6} }, + /* + + test_case = 4 + key = 0x0102030405060708090a0b0c0d0e0f10111213141516171819 + key_len 25 + data = 0xcd repeated 50 times + data_len = 50 + digest = 0x697eaf0aca3a3aea3a75164746ffaa79 + */ + { 4, "md5", + {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, + 0x15, 0x16, 0x17, 0x18, 0x19}, 25, + {0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd}, 50, + {0x69, 0x7e, 0xaf, 0x0a, 0xca, 0x3a, 0x3a, 0xea, + 0x3a, 0x75, 0x16, 0x47, 0x46, 0xff, 0xaa, 0x79} }, + + + /* + + test_case = 5 + key = 0x0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c + key_len = 16 + data = "Test With Truncation" + data_len = 20 + digest = 0x56461ef2342edc00f9bab995690efd4c + digest-96 0x56461ef2342edc00f9bab995 + */ + { 5, "md5", + {0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c}, 16, + "Test With Truncation", 20, + {0x56, 0x46, 0x1e, 0xf2, 0x34, 0x2e, 0xdc, 0x00, + 0xf9, 0xba, 0xb9, 0x95, 0x69, 0x0e, 0xfd, 0x4c} }, + + /* + + test_case = 6 + key = 0xaa repeated 80 times + key_len = 80 + data = "Test Using Larger Than Block-Size Key - Hash +Key First" + data_len = 54 + digest = 0x6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd + */ + { 6, "md5", + {0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa}, 80, + "Test Using Larger Than Block-Size Key - Hash Key First", 54, + {0x6b, 0x1a, 0xb7, 0xfe, 0x4b, 0xd7, 0xbf, 0x8f, + 0x0b, 0x62, 0xe6, 0xce, 0x61, 0xb9, 0xd0, 0xcd} }, + + /* + + test_case = 7 + key = 0xaa repeated 80 times + key_len = 80 + data = "Test Using Larger Than Block-Size Key and Larger + Than One Block-Size Data" + data_len = 73 + digest = 0x6f630fad67cda0ee1fb1f562db3aa53e + */ + { 7, "md5", + {0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa}, 80, + "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", 73, + {0x6f, 0x63, 0x0f, 0xad, 0x67, 0xcd, 0xa0, 0xee, + 0x1f, 0xb1, 0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e} } + }; + + unsigned long outlen; + int err; + int tested=0,failed=0; + for(i=0; i < (int)(sizeof(cases) / sizeof(cases[0])); i++) { + int hash = find_hash(cases[i].algo); + if (hash == -1) continue; + ++tested; + outlen = sizeof(digest); + if((err = hmac_memory(hash, cases[i].key, cases[i].keylen, cases[i].data, cases[i].datalen, digest, &outlen)) != CRYPT_OK) { +#if 0 + printf("HMAC-%s test #%d, %s\n", cases[i].algo, cases[i].num, error_to_string(err)); +#endif + return err; + } + + if(memcmp(digest, cases[i].digest, (size_t)hash_descriptor[hash].hashsize) != 0) { +#if 0 + unsigned int j; + printf("\nHMAC-%s test #%d:\n", cases[i].algo, cases[i].num); + printf( "Result: 0x"); + for(j=0; j < hash_descriptor[hash].hashsize; j++) { + printf("%2x ", digest[j]); + } + printf("\nCorrect: 0x"); + for(j=0; j < hash_descriptor[hash].hashsize; j++) { + printf("%2x ", cases[i].digest[j]); + } + printf("\n"); +#endif + failed++; + //return CRYPT_ERROR; + } else { + /* printf("HMAC-%s test #%d: Passed\n", cases[i].algo, cases[i].num); */ + } + } + + if (failed != 0) { + return CRYPT_FAIL_TESTVECTOR; + } else if (tested == 0) { + return CRYPT_NOP; + } else { + return CRYPT_OK; + } + #endif +} + +#endif + diff --git a/hooks/pre-commit b/hooks/pre-commit deleted file mode 100755 index 8a82f12d..00000000 --- a/hooks/pre-commit +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/sh -# -# An example hook script to verify what is about to be committed. -# Called by "git commit" with no arguments. The hook should -# exit with non-zero status after issuing an appropriate message if -# it wants to stop the commit. -# -# To enable this hook, rename this file to "pre-commit". - -if git rev-parse --verify HEAD >/dev/null 2>&1 -then - against=HEAD -else - # Initial commit: diff against an empty tree object - against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 -fi - -# If you want to allow non-ascii filenames set this variable to true. -allownonascii=$(git config hooks.allownonascii) - -# Redirect output to stderr. -exec 1>&2 - -# Cross platform projects tend to avoid non-ascii filenames; prevent -# them from being added to the repository. We exploit the fact that the -# printable range starts at the space character and ends with tilde. -if [ "$allownonascii" != "true" ] && - # Note that the use of brackets around a tr range is ok here, (it's - # even required, for portability to Solaris 10's /usr/bin/tr), since - # the square bracket bytes happen to fall in the designated range. - test $(git diff --cached --name-only --diff-filter=A -z $against | - LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 -then - echo "Error: Attempt to add a non-ascii file name." - echo - echo "This can cause problems if you want to work" - echo "with people on other platforms." - echo - echo "To be portable it is advisable to rename the file ..." - echo - echo "If you know what you are doing you can disable this" - echo "check using:" - echo - echo " git config hooks.allownonascii true" - echo - exit 1 -fi - -exec perl helper.pl --check-all diff --git a/is_prime.c b/is_prime.c new file mode 100644 index 00000000..d6fc84ea --- /dev/null +++ b/is_prime.c @@ -0,0 +1,27 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef MPI + +/* figures out if a number is prime (MR test) */ +int is_prime(mp_int *N, int *result) +{ + int err; + _ARGCHK(N != NULL); + _ARGCHK(result != NULL); + if ((err = mp_prime_is_prime(N, mp_prime_rabin_miller_trials(mp_count_bits(N)), result)) != MP_OKAY) { + return mpi_to_ltc_error(err); + } + return CRYPT_OK; +} + +#endif diff --git a/libtomcrypt.pc.in b/libtomcrypt.pc.in deleted file mode 100644 index 4ca6bbea..00000000 --- a/libtomcrypt.pc.in +++ /dev/null @@ -1,9 +0,0 @@ -prefix=@CMAKE_INSTALL_PREFIX@ -libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ -includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@/@PROJECT_NAME@ - -Name: LibTomCrypt -Description: public domain open source cryptographic toolkit -Version: @PROJECT_VERSION@ -Libs: -L${libdir} -ltomcrypt @PKG_CONFIG_LIBS@ -Cflags: -I${includedir} @PKG_CONFIG_CFLAGS@ diff --git a/libtomcrypt_VS2008.sln b/libtomcrypt_VS2008.sln deleted file mode 100644 index 1508689e..00000000 --- a/libtomcrypt_VS2008.sln +++ /dev/null @@ -1,26 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtomcrypt", "libtomcrypt_VS2008.vcproj", "{E3802982-DCB6-4D85-A2BD-6B08F0657E79}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E3802982-DCB6-4D85-A2BD-6B08F0657E79}.Debug|Win32.ActiveCfg = Debug|Win32 - {E3802982-DCB6-4D85-A2BD-6B08F0657E79}.Debug|Win32.Build.0 = Debug|Win32 - {E3802982-DCB6-4D85-A2BD-6B08F0657E79}.Debug|x64.ActiveCfg = Debug|x64 - {E3802982-DCB6-4D85-A2BD-6B08F0657E79}.Debug|x64.Build.0 = Debug|x64 - {E3802982-DCB6-4D85-A2BD-6B08F0657E79}.Release|Win32.ActiveCfg = Release|Win32 - {E3802982-DCB6-4D85-A2BD-6B08F0657E79}.Release|Win32.Build.0 = Release|Win32 - {E3802982-DCB6-4D85-A2BD-6B08F0657E79}.Release|x64.ActiveCfg = Release|x64 - {E3802982-DCB6-4D85-A2BD-6B08F0657E79}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/libtomcrypt_VS2008.vcproj b/libtomcrypt_VS2008.vcproj deleted file mode 100644 index df8136fd..00000000 --- a/libtomcrypt_VS2008.vcproj +++ /dev/null @@ -1,3202 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ltc_tommath.h b/ltc_tommath.h new file mode 100644 index 00000000..32761411 --- /dev/null +++ b/ltc_tommath.h @@ -0,0 +1,563 @@ + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#ifndef BN_H_ +#define BN_H_ + +#include +#include +#include +#include +#include +#include + +#undef MIN +#define MIN(x,y) ((x)<(y)?(x):(y)) +#undef MAX +#define MAX(x,y) ((x)>(y)?(x):(y)) + +#ifdef __cplusplus +extern "C" { + +/* C++ compilers don't like assigning void * to mp_digit * */ +#define OPT_CAST(x) (x *) + +#else + +/* C on the other hand doesn't care */ +#define OPT_CAST(x) + +#endif + +/* some default configurations. + * + * A "mp_digit" must be able to hold DIGIT_BIT + 1 bits + * A "mp_word" must be able to hold 2*DIGIT_BIT + 1 bits + * + * At the very least a mp_digit must be able to hold 7 bits + * [any size beyond that is ok provided it doesn't overflow the data type] + */ +#ifdef MP_8BIT + typedef unsigned char mp_digit; + typedef unsigned short mp_word; +#elif defined(MP_16BIT) + typedef unsigned short mp_digit; + typedef unsigned long mp_word; +#elif defined(MP_64BIT) + /* for GCC only on supported platforms */ +#ifndef CRYPT + typedef unsigned long long ulong64; + typedef signed long long long64; +#endif + + typedef ulong64 mp_digit; + typedef unsigned long mp_word __attribute__ ((mode(TI))); + + #define DIGIT_BIT 60 +#else + /* this is the default case, 28-bit digits */ + + /* this is to make porting into LibTomCrypt easier :-) */ +#ifndef CRYPT + #if defined(_MSC_VER) || defined(__BORLANDC__) + typedef unsigned __int64 ulong64; + typedef signed __int64 long64; + #else + typedef unsigned long long ulong64; + typedef signed long long long64; + #endif +#endif + + typedef unsigned long mp_digit; + typedef ulong64 mp_word; + +#ifdef MP_31BIT + /* this is an extension that uses 31-bit digits */ + #define DIGIT_BIT 31 +#else + /* default case is 28-bit digits, defines MP_28BIT as a handy macro to test */ + #define DIGIT_BIT 28 + #define MP_28BIT +#endif +#endif + +/* define heap macros */ +#ifndef CRYPT + /* default to libc stuff */ + #ifndef XMALLOC + #define XMALLOC malloc + #define XFREE free + #define XREALLOC realloc + #define XCALLOC calloc + #define XMEMSET memset + #define XMEMCPY memcpy + #else + /* prototypes for our heap functions */ + void *XMALLOC(size_t n); + void *REALLOC(void *p, size_t n); + void *XCALLOC(size_t n, size_t s); + void XFREE(void *p); + void *XMEMCPY(void *dest, const void *src, size_t n); + int XMEMCMP(const void *s1, const void *s2, size_t n); + #endif +#endif + + +/* otherwise the bits per digit is calculated automatically from the size of a mp_digit */ +#ifndef DIGIT_BIT + #define DIGIT_BIT ((int)((CHAR_BIT * sizeof(mp_digit) - 1))) /* bits per digit */ +#endif + +#define MP_DIGIT_BIT DIGIT_BIT +#define MP_MASK ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1)) +#define MP_DIGIT_MAX MP_MASK + +/* equalities */ +#define MP_LT -1 /* less than */ +#define MP_EQ 0 /* equal to */ +#define MP_GT 1 /* greater than */ + +#define MP_ZPOS 0 /* positive integer */ +#define MP_NEG 1 /* negative */ + +#define MP_OKAY 0 /* ok result */ +#define MP_MEM -2 /* out of mem */ +#define MP_VAL -3 /* invalid input */ +#define MP_RANGE MP_VAL + +#define MP_YES 1 /* yes response */ +#define MP_NO 0 /* no response */ + +/* Primality generation flags */ +#define LTM_PRIME_BBS 0x0001 /* BBS style prime */ +#define LTM_PRIME_SAFE 0x0002 /* Safe prime (p-1)/2 == prime */ +#define LTM_PRIME_2MSB_OFF 0x0004 /* force 2nd MSB to 0 */ +#define LTM_PRIME_2MSB_ON 0x0008 /* force 2nd MSB to 1 */ + +typedef int mp_err; + +/* you'll have to tune these... */ +extern int KARATSUBA_MUL_CUTOFF, + KARATSUBA_SQR_CUTOFF, + TOOM_MUL_CUTOFF, + TOOM_SQR_CUTOFF; + +/* define this to use lower memory usage routines (exptmods mostly) */ +/* #define MP_LOW_MEM */ + +/* default precision */ +#ifndef MP_PREC + #ifdef MP_LOW_MEM + #define MP_PREC 64 /* default digits of precision */ + #else + #define MP_PREC 8 /* default digits of precision */ + #endif +#endif + +/* size of comba arrays, should be at least 2 * 2**(BITS_PER_WORD - BITS_PER_DIGIT*2) */ +#define MP_WARRAY (1 << (sizeof(mp_word) * CHAR_BIT - 2 * DIGIT_BIT + 1)) + +/* the infamous mp_int structure */ +typedef struct { + int used, alloc, sign; + mp_digit *dp; +} mp_int; + +/* callback for mp_prime_random, should fill dst with random bytes and return how many read [upto len] */ +typedef int ltm_prime_callback(unsigned char *dst, int len, void *dat); + + +#define USED(m) ((m)->used) +#define DIGIT(m,k) ((m)->dp[(k)]) +#define SIGN(m) ((m)->sign) + +/* error code to char* string */ +char *mp_error_to_string(int code); + +/* ---> init and deinit bignum functions <--- */ +/* init a bignum */ +int mp_init(mp_int *a); + +/* free a bignum */ +void mp_clear(mp_int *a); + +/* init a null terminated series of arguments */ +int mp_init_multi(mp_int *mp, ...); + +/* clear a null terminated series of arguments */ +void mp_clear_multi(mp_int *mp, ...); + +/* exchange two ints */ +void mp_exch(mp_int *a, mp_int *b); + +/* shrink ram required for a bignum */ +int mp_shrink(mp_int *a); + +/* grow an int to a given size */ +int mp_grow(mp_int *a, int size); + +/* init to a given number of digits */ +int mp_init_size(mp_int *a, int size); + +/* ---> Basic Manipulations <--- */ +#define mp_iszero(a) (((a)->used == 0) ? MP_YES : MP_NO) +#define mp_iseven(a) (((a)->used > 0 && (((a)->dp[0] & 1) == 0)) ? MP_YES : MP_NO) +#define mp_isodd(a) (((a)->used > 0 && (((a)->dp[0] & 1) == 1)) ? MP_YES : MP_NO) + +/* set to zero */ +void mp_zero(mp_int *a); + +/* set to a digit */ +void mp_set(mp_int *a, mp_digit b); + +/* set a 32-bit const */ +int mp_set_int(mp_int *a, unsigned long b); + +/* get a 32-bit value */ +unsigned long mp_get_int(mp_int * a); + +/* initialize and set a digit */ +int mp_init_set (mp_int * a, mp_digit b); + +/* initialize and set 32-bit value */ +int mp_init_set_int (mp_int * a, unsigned long b); + +/* copy, b = a */ +int mp_copy(mp_int *a, mp_int *b); + +/* inits and copies, a = b */ +int mp_init_copy(mp_int *a, mp_int *b); + +/* trim unused digits */ +void mp_clamp(mp_int *a); + +/* ---> digit manipulation <--- */ + +/* right shift by "b" digits */ +void mp_rshd(mp_int *a, int b); + +/* left shift by "b" digits */ +int mp_lshd(mp_int *a, int b); + +/* c = a / 2**b */ +int mp_div_2d(mp_int *a, int b, mp_int *c, mp_int *d); + +/* b = a/2 */ +int mp_div_2(mp_int *a, mp_int *b); + +/* c = a * 2**b */ +int mp_mul_2d(mp_int *a, int b, mp_int *c); + +/* b = a*2 */ +int mp_mul_2(mp_int *a, mp_int *b); + +/* c = a mod 2**d */ +int mp_mod_2d(mp_int *a, int b, mp_int *c); + +/* computes a = 2**b */ +int mp_2expt(mp_int *a, int b); + +/* Counts the number of lsbs which are zero before the first zero bit */ +int mp_cnt_lsb(mp_int *a); + +/* I Love Earth! */ + +/* makes a pseudo-random int of a given size */ +int mp_rand(mp_int *a, int digits); + +/* ---> binary operations <--- */ +/* c = a XOR b */ +int mp_xor(mp_int *a, mp_int *b, mp_int *c); + +/* c = a OR b */ +int mp_or(mp_int *a, mp_int *b, mp_int *c); + +/* c = a AND b */ +int mp_and(mp_int *a, mp_int *b, mp_int *c); + +/* ---> Basic arithmetic <--- */ + +/* b = -a */ +int mp_neg(mp_int *a, mp_int *b); + +/* b = |a| */ +int mp_abs(mp_int *a, mp_int *b); + +/* compare a to b */ +int mp_cmp(mp_int *a, mp_int *b); + +/* compare |a| to |b| */ +int mp_cmp_mag(mp_int *a, mp_int *b); + +/* c = a + b */ +int mp_add(mp_int *a, mp_int *b, mp_int *c); + +/* c = a - b */ +int mp_sub(mp_int *a, mp_int *b, mp_int *c); + +/* c = a * b */ +int mp_mul(mp_int *a, mp_int *b, mp_int *c); + +/* b = a*a */ +int mp_sqr(mp_int *a, mp_int *b); + +/* a/b => cb + d == a */ +int mp_div(mp_int *a, mp_int *b, mp_int *c, mp_int *d); + +/* c = a mod b, 0 <= c < b */ +int mp_mod(mp_int *a, mp_int *b, mp_int *c); + +/* ---> single digit functions <--- */ + +/* compare against a single digit */ +int mp_cmp_d(mp_int *a, mp_digit b); + +/* c = a + b */ +int mp_add_d(mp_int *a, mp_digit b, mp_int *c); + +/* c = a - b */ +int mp_sub_d(mp_int *a, mp_digit b, mp_int *c); + +/* c = a * b */ +int mp_mul_d(mp_int *a, mp_digit b, mp_int *c); + +/* a/b => cb + d == a */ +int mp_div_d(mp_int *a, mp_digit b, mp_int *c, mp_digit *d); + +/* a/3 => 3c + d == a */ +int mp_div_3(mp_int *a, mp_int *c, mp_digit *d); + +/* c = a**b */ +int mp_expt_d(mp_int *a, mp_digit b, mp_int *c); + +/* c = a mod b, 0 <= c < b */ +int mp_mod_d(mp_int *a, mp_digit b, mp_digit *c); + +/* ---> number theory <--- */ + +/* d = a + b (mod c) */ +int mp_addmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d); + +/* d = a - b (mod c) */ +int mp_submod(mp_int *a, mp_int *b, mp_int *c, mp_int *d); + +/* d = a * b (mod c) */ +int mp_mulmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d); + +/* c = a * a (mod b) */ +int mp_sqrmod(mp_int *a, mp_int *b, mp_int *c); + +/* c = 1/a (mod b) */ +int mp_invmod(mp_int *a, mp_int *b, mp_int *c); + +/* c = (a, b) */ +int mp_gcd(mp_int *a, mp_int *b, mp_int *c); + +/* produces value such that U1*a + U2*b = U3 */ +int mp_exteuclid(mp_int *a, mp_int *b, mp_int *U1, mp_int *U2, mp_int *U3); + +/* c = [a, b] or (a*b)/(a, b) */ +int mp_lcm(mp_int *a, mp_int *b, mp_int *c); + +/* finds one of the b'th root of a, such that |c|**b <= |a| + * + * returns error if a < 0 and b is even + */ +int mp_n_root(mp_int *a, mp_digit b, mp_int *c); + +/* special sqrt algo */ +int mp_sqrt(mp_int *arg, mp_int *ret); + +/* is number a square? */ +int mp_is_square(mp_int *arg, int *ret); + +/* computes the jacobi c = (a | n) (or Legendre if b is prime) */ +int mp_jacobi(mp_int *a, mp_int *n, int *c); + +/* used to setup the Barrett reduction for a given modulus b */ +int mp_reduce_setup(mp_int *a, mp_int *b); + +/* Barrett Reduction, computes a (mod b) with a precomputed value c + * + * Assumes that 0 < a <= b*b, note if 0 > a > -(b*b) then you can merely + * compute the reduction as -1 * mp_reduce(mp_abs(a)) [pseudo code]. + */ +int mp_reduce(mp_int *a, mp_int *b, mp_int *c); + +/* setups the montgomery reduction */ +int mp_montgomery_setup(mp_int *a, mp_digit *mp); + +/* computes a = B**n mod b without division or multiplication useful for + * normalizing numbers in a Montgomery system. + */ +int mp_montgomery_calc_normalization(mp_int *a, mp_int *b); + +/* computes x/R == x (mod N) via Montgomery Reduction */ +int mp_montgomery_reduce(mp_int *a, mp_int *m, mp_digit mp); + +/* returns 1 if a is a valid DR modulus */ +int mp_dr_is_modulus(mp_int *a); + +/* sets the value of "d" required for mp_dr_reduce */ +void mp_dr_setup(mp_int *a, mp_digit *d); + +/* reduces a modulo b using the Diminished Radix method */ +int mp_dr_reduce(mp_int *a, mp_int *b, mp_digit mp); + +/* returns true if a can be reduced with mp_reduce_2k */ +int mp_reduce_is_2k(mp_int *a); + +/* determines k value for 2k reduction */ +int mp_reduce_2k_setup(mp_int *a, mp_digit *d); + +/* reduces a modulo b where b is of the form 2**p - k [0 <= a] */ +int mp_reduce_2k(mp_int *a, mp_int *n, mp_digit d); + +/* d = a**b (mod c) */ +int mp_exptmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d); + +/* ---> Primes <--- */ + +/* number of primes */ +#ifdef MP_8BIT + #define PRIME_SIZE 31 +#else + #define PRIME_SIZE 256 +#endif + +/* table of first PRIME_SIZE primes */ +extern const mp_digit __prime_tab[]; + +/* result=1 if a is divisible by one of the first PRIME_SIZE primes */ +int mp_prime_is_divisible(mp_int *a, int *result); + +/* performs one Fermat test of "a" using base "b". + * Sets result to 0 if composite or 1 if probable prime + */ +int mp_prime_fermat(mp_int *a, mp_int *b, int *result); + +/* performs one Miller-Rabin test of "a" using base "b". + * Sets result to 0 if composite or 1 if probable prime + */ +int mp_prime_miller_rabin(mp_int *a, mp_int *b, int *result); + +/* This gives [for a given bit size] the number of trials required + * such that Miller-Rabin gives a prob of failure lower than 2^-96 + */ +int mp_prime_rabin_miller_trials(int size); + +/* performs t rounds of Miller-Rabin on "a" using the first + * t prime bases. Also performs an initial sieve of trial + * division. Determines if "a" is prime with probability + * of error no more than (1/4)**t. + * + * Sets result to 1 if probably prime, 0 otherwise + */ +int mp_prime_is_prime(mp_int *a, int t, int *result); + +/* finds the next prime after the number "a" using "t" trials + * of Miller-Rabin. + * + * bbs_style = 1 means the prime must be congruent to 3 mod 4 + */ +int mp_prime_next_prime(mp_int *a, int t, int bbs_style); + +/* makes a truly random prime of a given size (bytes), + * call with bbs = 1 if you want it to be congruent to 3 mod 4 + * + * You have to supply a callback which fills in a buffer with random bytes. "dat" is a parameter you can + * have passed to the callback (e.g. a state or something). This function doesn't use "dat" itself + * so it can be NULL + * + * The prime generated will be larger than 2^(8*size). + */ +#define mp_prime_random(a, t, size, bbs, cb, dat) mp_prime_random_ex(a, t, ((size) * 8) + 1, (bbs==1)?LTM_PRIME_BBS:0, cb, dat) + +/* makes a truly random prime of a given size (bits), + * + * Flags are as follows: + * + * LTM_PRIME_BBS - make prime congruent to 3 mod 4 + * LTM_PRIME_SAFE - make sure (p-1)/2 is prime as well (implies LTM_PRIME_BBS) + * LTM_PRIME_2MSB_OFF - make the 2nd highest bit zero + * LTM_PRIME_2MSB_ON - make the 2nd highest bit one + * + * You have to supply a callback which fills in a buffer with random bytes. "dat" is a parameter you can + * have passed to the callback (e.g. a state or something). This function doesn't use "dat" itself + * so it can be NULL + * + */ +int mp_prime_random_ex(mp_int *a, int t, int size, int flags, ltm_prime_callback cb, void *dat); + +/* ---> radix conversion <--- */ +int mp_count_bits(mp_int *a); + +int mp_unsigned_bin_size(mp_int *a); +int mp_read_unsigned_bin(mp_int *a, unsigned char *b, int c); +int mp_to_unsigned_bin(mp_int *a, unsigned char *b); + +int mp_signed_bin_size(mp_int *a); +int mp_read_signed_bin(mp_int *a, unsigned char *b, int c); +int mp_to_signed_bin(mp_int *a, unsigned char *b); + +int mp_read_radix(mp_int *a, char *str, int radix); +int mp_toradix(mp_int *a, char *str, int radix); +int mp_toradix_n(mp_int * a, char *str, int radix, int maxlen); +int mp_radix_size(mp_int *a, int radix, int *size); + +int mp_fread(mp_int *a, int radix, FILE *stream); +int mp_fwrite(mp_int *a, int radix, FILE *stream); + +#define mp_read_raw(mp, str, len) mp_read_signed_bin((mp), (str), (len)) +#define mp_raw_size(mp) mp_signed_bin_size(mp) +#define mp_toraw(mp, str) mp_to_signed_bin((mp), (str)) +#define mp_read_mag(mp, str, len) mp_read_unsigned_bin((mp), (str), (len)) +#define mp_mag_size(mp) mp_unsigned_bin_size(mp) +#define mp_tomag(mp, str) mp_to_unsigned_bin((mp), (str)) + +#define mp_tobinary(M, S) mp_toradix((M), (S), 2) +#define mp_tooctal(M, S) mp_toradix((M), (S), 8) +#define mp_todecimal(M, S) mp_toradix((M), (S), 10) +#define mp_tohex(M, S) mp_toradix((M), (S), 16) + +/* lowlevel functions, do not call! */ +int s_mp_add(mp_int *a, mp_int *b, mp_int *c); +int s_mp_sub(mp_int *a, mp_int *b, mp_int *c); +#define s_mp_mul(a, b, c) s_mp_mul_digs(a, b, c, (a)->used + (b)->used + 1) +int fast_s_mp_mul_digs(mp_int *a, mp_int *b, mp_int *c, int digs); +int s_mp_mul_digs(mp_int *a, mp_int *b, mp_int *c, int digs); +int fast_s_mp_mul_high_digs(mp_int *a, mp_int *b, mp_int *c, int digs); +int s_mp_mul_high_digs(mp_int *a, mp_int *b, mp_int *c, int digs); +int fast_s_mp_sqr(mp_int *a, mp_int *b); +int s_mp_sqr(mp_int *a, mp_int *b); +int mp_karatsuba_mul(mp_int *a, mp_int *b, mp_int *c); +int mp_toom_mul(mp_int *a, mp_int *b, mp_int *c); +int mp_karatsuba_sqr(mp_int *a, mp_int *b); +int mp_toom_sqr(mp_int *a, mp_int *b); +int fast_mp_invmod(mp_int *a, mp_int *b, mp_int *c); +int fast_mp_montgomery_reduce(mp_int *a, mp_int *m, mp_digit mp); +int mp_exptmod_fast(mp_int *G, mp_int *X, mp_int *P, mp_int *Y, int mode); +int s_mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y); +void bn_reverse(unsigned char *s, int len); + + const char *mp_s_rmap; + + +#ifdef __cplusplus + } +#endif + +#endif + diff --git a/makefile b/makefile index d62bc62d..b9e810fd 100644 --- a/makefile +++ b/makefile @@ -2,167 +2,235 @@ # # Tom St Denis # Modified by Clay Culver -# -# (GNU make only) -ifeq ($V,0) -silent_echo= > /dev/null -else -silent_echo= -endif -ifeq ($V,1) -silent= -silent_stdout= -silent_stderr= -else -silent=@ -silent_stdout= > /dev/null -silent_stderr= 2> /dev/null -endif +# The version +VERSION=0.97b -PLATFORM := $(shell uname | sed -e 's/_.*//') +# Compiler and Linker Names +#CC=gcc +#LD=ld -# ranlib tools -ifndef RANLIB -RANLIB:=$(CROSS_COMPILE)ranlib -endif -INSTALL_CMD = install -UNINSTALL_CMD = rm +# Archiver [makes .a files] +#AR=ar +#ARFLAGS=r + +# Compilation flags. Note the += does not write over the user's CFLAGS! +CFLAGS += -c -I./ -Wall -Wsign-compare -W -Wshadow +# -Werror + +# optimize for SPEED +#CFLAGS += -O3 -funroll-loops + +#add -fomit-frame-pointer. hinders debugging! +CFLAGS += -fomit-frame-pointer + +# optimize for SIZE +CFLAGS += -Os + +# compile for DEBUGING (required for ccmalloc checking!!!) +#CFLAGS += -g3 + +#These flags control how the library gets built. #Output filenames for various targets. -ifndef LIBNAME - LIBNAME=libtomcrypt.a -endif +LIBNAME=libtomcrypt.a +HASH=hashsum +CRYPT=encrypt +SMALL=small +PROF=x86_prof +TV=tv_gen +#LIBPATH-The directory for libtomcrypt to be installed to. +#INCPATH-The directory to install the header files for libtomcrypt. +#DATAPATH-The directory to install the pdf docs. +DESTDIR= +LIBPATH=/usr/lib +INCPATH=/usr/include +DATAPATH=/usr/share/doc/libtomcrypt/pdf -include makefile_include.mk +#List of objects to compile. -ifeq ($(COVERAGE),1) -all_test: LIB_PRE = -Wl,--whole-archive -all_test: LIB_POST = -Wl,--no-whole-archive -LTC_CFLAGS += -fprofile-arcs -ftest-coverage -LTC_EXTRALIBS += -lgcov -endif +#Leave MPI built-in or force developer to link against libtommath? +MPIOBJECT=mpi.o -LTC_EXTRALIBS += $(EXTRALIBS) +OBJECTS=error_to_string.o mpi_to_ltc_error.o base64_encode.o base64_decode.o \ +\ +crypt.o crypt_find_cipher.o crypt_find_hash_any.o \ +crypt_hash_is_valid.o crypt_register_hash.o crypt_unregister_prng.o \ +crypt_argchk.o crypt_find_cipher_any.o crypt_find_hash_id.o \ +crypt_prng_descriptor.o crypt_register_prng.o crypt_cipher_descriptor.o \ +crypt_find_cipher_id.o crypt_find_prng.o crypt_prng_is_valid.o \ +crypt_unregister_cipher.o crypt_cipher_is_valid.o crypt_find_hash.o \ +crypt_hash_descriptor.o crypt_register_cipher.o crypt_unregister_hash.o \ +\ +fortuna.o sprng.o yarrow.o rc4.o rng_get_bytes.o rng_make_prng.o \ +\ +rand_prime.o is_prime.o \ +\ +ecc.o dh.o \ +\ +rsa_decrypt_key.o rsa_encrypt_key.o rsa_exptmod.o rsa_free.o rsa_make_key.o \ +rsa_sign_hash.o rsa_verify_hash.o rsa_export.o rsa_import.o tim_exptmod.o \ +rsa_v15_encrypt_key.o rsa_v15_decrypt_key.o rsa_v15_sign_hash.o rsa_v15_verify_hash.o \ +\ +dsa_export.o dsa_free.o dsa_import.o dsa_make_key.o dsa_sign_hash.o \ +dsa_verify_hash.o dsa_verify_key.o \ +\ +aes.o aes_enc.o \ +\ +blowfish.o des.o safer_tab.o safer.o saferp.o rc2.o xtea.o \ +rc6.o rc5.o cast5.o noekeon.o twofish.o skipjack.o \ +\ +md2.o md4.o md5.o sha1.o sha256.o sha512.o tiger.o whirl.o \ +rmd128.o rmd160.o \ +\ +packet_store_header.o packet_valid_header.o \ +\ +eax_addheader.o eax_decrypt.o eax_decrypt_verify_memory.o eax_done.o eax_encrypt.o \ +eax_encrypt_authenticate_memory.o eax_init.o eax_test.o \ +\ +ocb_decrypt.o ocb_decrypt_verify_memory.o ocb_done_decrypt.o ocb_done_encrypt.o \ +ocb_encrypt.o ocb_encrypt_authenticate_memory.o ocb_init.o ocb_ntz.o \ +ocb_shift_xor.o ocb_test.o s_ocb_done.o \ +\ +omac_done.o omac_file.o omac_init.o omac_memory.o omac_process.o omac_test.o \ +\ +pmac_done.o pmac_file.o pmac_init.o pmac_memory.o pmac_ntz.o pmac_process.o \ +pmac_shift_xor.o pmac_test.o \ +\ +cbc_start.o cbc_encrypt.o cbc_decrypt.o cbc_getiv.o cbc_setiv.o \ +cfb_start.o cfb_encrypt.o cfb_decrypt.o cfb_getiv.o cfb_setiv.o \ +ofb_start.o ofb_encrypt.o ofb_decrypt.o ofb_getiv.o ofb_setiv.o \ +ctr_start.o ctr_encrypt.o ctr_decrypt.o ctr_getiv.o ctr_setiv.o \ +ecb_start.o ecb_encrypt.o ecb_decrypt.o \ +\ +hash_file.o hash_filehandle.o hash_memory.o \ +\ +hmac_done.o hmac_file.o hmac_init.o hmac_memory.o hmac_process.o hmac_test.o \ +\ +pkcs_1_mgf1.o pkcs_1_oaep_encode.o pkcs_1_oaep_decode.o \ +pkcs_1_pss_encode.o pkcs_1_pss_decode.o pkcs_1_i2osp.o pkcs_1_os2ip.o \ +pkcs_1_v15_es_encode.o pkcs_1_v15_es_decode.o pkcs_1_v15_sa_encode.o pkcs_1_v15_sa_decode.o \ +\ +pkcs_5_1.o pkcs_5_2.o \ +\ +burn_stack.o zeromem.o \ +$(MPIOBJECT) -#AES comes in two flavours... enc+dec and enc -src/ciphers/aes/aes_enc.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c -ifneq ($V,1) - @echo " * ${CC} $@" ${silent_echo} -endif - ${silent} ${CC} ${LTC_CFLAGS} -DENCRYPT_ONLY -c $< -o $@ -src/ciphers/aes/aes_enc_desc.o: src/ciphers/aes/aes_desc.c -ifneq ($V,1) - @echo " * ${CC} $@" ${silent_echo} -endif - ${silent} ${CC} ${LTC_CFLAGS} -DENCRYPT_ONLY -c $< -o $@ +TESTOBJECTS=demos/test.o +HASHOBJECTS=demos/hashsum.o +CRYPTOBJECTS=demos/encrypt.o +SMALLOBJECTS=demos/small.o +PROFS=demos/x86_prof.o +TVS=demos/tv_gen.o -.c.o: -ifneq ($V,1) - @echo " * ${CC} $@" ${silent_echo} -endif - ${silent} ${CC} ${LTC_CFLAGS} -c $< -o $@ +#Files left over from making the crypt.pdf. +LEFTOVERS=*.dvi *.log *.aux *.toc *.idx *.ilg *.ind *.out + +#Compressed filenames +COMPRESSED=crypt-$(VERSION).tar.bz2 crypt-$(VERSION).zip + +#Header files used by libtomcrypt. +HEADERS=ltc_tommath.h mycrypt_cfg.h \ +mycrypt_misc.h mycrypt_prng.h mycrypt_cipher.h mycrypt_hash.h \ +mycrypt_macros.h mycrypt_pk.h mycrypt.h mycrypt_argchk.h \ +mycrypt_custom.h mycrypt_pkcs.h + +#The default rule for make builds the libtomcrypt library. +default:library + +#ciphers come in two flavours... enc+dec and enc +aes_enc.o: aes.c aes_tab.c + $(CC) $(CFLAGS) -DENCRYPT_ONLY -c aes.c -o aes_enc.o + +#These are the rules to make certain object files. +aes.o: aes.c aes_tab.c +twofish.o: twofish.c twofish_tab.c +whirl.o: whirl.c whirltab.c +ecc.o: ecc.c ecc_sys.c +dh.o: dh.c dh_sys.c +sha512.o: sha512.c sha384.c +sha256.o: sha256.c sha224.c + +#This rule makes the libtomcrypt library. +library: $(LIBNAME) $(LIBNAME): $(OBJECTS) -ifneq ($V,1) - @echo " * ${AR} $@" ${silent_echo} -endif - ${silent} $(AR) $(ARFLAGS) $@ $(OBJECTS) -ifneq ($V,1) - @echo " * ${RANLIB} $@" ${silent_echo} -endif - ${silent} $(RANLIB) $@ + $(AR) $(ARFLAGS) $@ $(OBJECTS) -test: $(call print-help,test,Builds the library and the 'test' application to run all self-tests) $(LIBNAME) $(TOBJECTS) -ifneq ($V,1) - @echo " * ${CC} $@" ${silent_echo} -endif - ${silent} $(CC) $(LTC_LDFLAGS) $(TOBJECTS) $(LIB_PRE) $(LIBNAME) $(LIB_POST) $(LTC_EXTRALIBS) -o $(TEST) +#This rule makes the hash program included with libtomcrypt +hashsum: library $(HASHOBJECTS) + $(CC) $(HASHOBJECTS) $(LIBNAME) -o $(HASH) $(WARN) -# build the demos from a template -define DEMO_template -$(1): $(call print-help,$(1),Builds the library and the '$(1)' demo) demos/$(1).o $$(LIBNAME) -ifneq ($V,1) - @echo " * $${CC} $$@" ${silent_echo} -endif - $${silent} $$(CC) $$(LTC_LDFLAGS) $$< $$(LIB_PRE) $$(LIBNAME) $$(LIB_POST) $$(LTC_EXTRALIBS) -o $$@ -endef +#makes the crypt program +crypt: library $(CRYPTOBJECTS) + $(CC) $(CRYPTOBJECTS) $(LIBNAME) -o $(CRYPT) $(WARN) -$(foreach demo, $(strip $(DEMOS)), $(eval $(call DEMO_template,$(demo)))) +#makes the small program +small: library $(SMALLOBJECTS) + $(CC) $(SMALLOBJECTS) $(LIBNAME) -o $(SMALL) $(WARN) + +x86_prof: library $(PROFS) + $(CC) $(PROFS) $(LIBNAME) -o $(PROF) +tv_gen: library $(TVS) + $(CC) $(TVS) $(LIBNAME) -o $(TV) #This rule installs the library and the header files. This must be run #as root in order to have a high enough permission to write to the correct #directories and to set the owner and group to root. -install: $(call print-help,install,Installs the library and headers) .common_install +install: library docs + install -d -g root -o root $(DESTDIR)$(LIBPATH) + install -d -g root -o root $(DESTDIR)$(INCPATH) + install -d -g root -o root $(DESTDIR)$(DATAPATH) + install -g root -o root $(LIBNAME) $(DESTDIR)$(LIBPATH) + install -g root -o root $(HEADERS) $(DESTDIR)$(INCPATH) + install -g root -o root doc/crypt.pdf $(DESTDIR)$(DATAPATH) -install_bins: $(call print-help,install_bins,Installs the useful demos ($(USEFUL_DEMOS))) .common_install_bins +#This rule cleans the source tree of all compiled code, not including the pdf +#documentation. +clean: + rm -f $(OBJECTS) $(TESTOBJECTS) $(HASHOBJECTS) $(CRYPTOBJECTS) $(SMALLOBJECTS) $(LEFTOVERS) $(LIBNAME) + rm -f $(TEST) $(HASH) $(COMPRESSED) $(PROFS) $(PROF) $(TVS) $(TV) + rm -f *.a *.dll *stackdump *.lib *.exe *.obj demos/*.obj demos/*.o *.bat *.txt *.il *.da demos/*.il demos/*.da *.dyn *.dpi \ + *.gcda *.gcno demos/*.gcno demos/*.gcda *~ doc/* + cd demos/test ; make clean -uninstall: $(call print-help,uninstall,Uninstalls the library and headers) .common_uninstall +#This builds the crypt.pdf file. Note that the rm -f *.pdf has been removed +#from the clean command! This is because most people would like to keep the +#nice pre-compiled crypt.pdf that comes with libtomcrypt! We only need to +#delete it if we are rebuilding it. +docs: crypt.tex + rm -f doc/crypt.pdf $(LEFTOVERS) + echo "hello" > crypt.ind + latex crypt > /dev/null + latex crypt > /dev/null + makeindex crypt.idx > /dev/null + latex crypt > /dev/null + dvipdf crypt + mv -ivf crypt.pdf doc/crypt.pdf + rm -f $(LEFTOVERS) -profile: - LTC_CFLAGS="$(LTC_CFLAGS) -fprofile-generate" $(MAKE) timing EXTRALIBS="$(LTC_EXTRALIBS) -lgcov" - ./timing - rm -f timing `find . -type f | grep [.][ao] | xargs` - LTC_CFLAGS="$(LTC_CFLAGS) -fprofile-use" $(MAKE) timing EXTRALIBS="$(LTC_EXTRALIBS) -lgcov" +docdvi: crypt.tex + echo hello > crypt.ind + latex crypt > /dev/null + latex crypt > /dev/null + makeindex.idx crypt + latex crypt > /dev/null -# target that pre-processes all coverage data -lcov-single-create: - lcov --capture --no-external --directory src -q --output-file coverage_std.info +#pretty build +pretty: + perl pretty.build -# target that removes all coverage output -cleancov-clean: - rm -f `find . -type f -name "*.info" | xargs` - rm -rf coverage/ - -# merges all coverage_*.info files into coverage.info -coverage.info: - lcov `find -name 'coverage_*.info' -exec echo -n " -a {}" \;` -o coverage.info - -# generates html output from all coverage_*.info files -lcov-html: coverage.info - genhtml coverage.info --output-directory coverage -q - -# combines all necessary steps to create the coverage from a single testrun with e.g. -# CFLAGS="-DUSE_LTM -DLTM_DESC -I../libtommath" EXTRALIBS="../libtommath/libtommath.a" make coverage -j9 -lcov-single: - $(MAKE) cleancov-clean - $(MAKE) lcov-single-create - $(MAKE) coverage.info - - -#make the code coverage of the library -coverage: LTC_CFLAGS += -fprofile-arcs -ftest-coverage -coverage: LTC_EXTRALIBS += -lgcov -coverage: LIB_PRE = -Wl,--whole-archive -coverage: LIB_POST = -Wl,--no-whole-archive - -coverage: $(call print-help,coverage,Create code-coverage of the library - but better use coverage.sh) test - ./test - -# cleans everything - coverage output and standard 'clean' -cleancov: cleancov-clean clean -ifndef AMALGAM -AMALGAM_FILTER_OUT = src/ciphers/aes/aes_enc.c src/ciphers/aes/aes_enc_desc.c -TAB_SOURCES = src/ciphers/aes/aes_tab.c src/ciphers/safer/safer_tab.c src/hashes/whirl/whirltab.c src/stream/sober128/sober128tab.c -SOURCES = $(filter-out $(AMALGAM_FILTER_OUT),$(OBJECTS:.o=.c)) -pre_gen/tomcrypt_amalgam.c: $(TAB_SOURCES) $(SOURCES) - mkdir -p pre_gen - printf "/*\n * This file has been auto-generated, do not edit!\n */\n\n" > $@ - printf "#define LTC_AES_TAB_C\n" >> $@ - printf "#define LTC_SAFER_TAB_C\n" >> $@ - printf "#define LTC_SOBER128TAB_C\n" >> $@ - printf "#define LTC_WHIRLTAB_C\n\n" >> $@ - printf "#include \"tomcrypt_private.h\"\n\n" >> $@ - cat $^ >> $@ - printf "#define ENCRYPT_ONLY\n\n" >> $@ - cat src/ciphers/aes/aes.c >> $@ - cat src/ciphers/aes/aes_desc.c >> $@ - printf "#undef ENCRYPT_ONLY\n\n" >> $@ - -pre_gen: pre_gen/tomcrypt_amalgam.c - -.PHONY: pre_gen/tomcrypt_amalgam.c -endif +#beta +beta: clean + cd .. ; rm -rf crypt* libtomcrypt-$(VERSION)-beta ; mkdir libtomcrypt-$(VERSION)-beta ; \ + cp -R ./libtomcrypt/* ./libtomcrypt-$(VERSION)-beta/ ; tar -c libtomcrypt-$(VERSION)-beta/* > crypt-$(VERSION)-beta.tar ; \ + bzip2 -9vv crypt-$(VERSION)-beta.tar ; zip -9 -r crypt-$(VERSION)-beta.zip libtomcrypt-$(VERSION)-beta/* +#zipup the project (take that!) +zipup: clean docs + cd .. ; rm -rf crypt* libtomcrypt-$(VERSION) ; mkdir libtomcrypt-$(VERSION) ; \ + cp -R ./libtomcrypt/* ./libtomcrypt-$(VERSION)/ ; tar -c libtomcrypt-$(VERSION)/* > crypt-$(VERSION).tar ; \ + bzip2 -9vv crypt-$(VERSION).tar ; zip -9 -r crypt-$(VERSION).zip libtomcrypt-$(VERSION)/* ; \ + gpg -b -a crypt-$(VERSION).tar.bz2 ; gpg -b -a crypt-$(VERSION).zip diff --git a/makefile.cygwin_dll b/makefile.cygwin_dll new file mode 100644 index 00000000..0dece2f6 --- /dev/null +++ b/makefile.cygwin_dll @@ -0,0 +1,91 @@ +#makefile for Cygwin [makes a .dll] + +default: ltc_dll + + +# Compilation flags. Note the += does not write over the user's CFLAGS! +CFLAGS += -I./ -Wall -Wsign-compare -W -Wno-unused -Wshadow -mno-cygwin -DWIN32 + +# optimize for SPEED +#CFLAGS += -O3 -funroll-loops + +#add -fomit-frame-pointer. v3.2 is buggy for certain platforms! +#CFLAGS += -fomit-frame-pointer + +# optimize for SIZE +CFLAGS += -Os + +#Leave MPI built-in or force developer to link against libtommath? +MPIOBJECT=mpi.o + +OBJECTS=error_to_string.o mpi_to_ltc_error.o base64_encode.o base64_decode.o \ +\ +crypt.o crypt_find_cipher.o crypt_find_hash_any.o \ +crypt_hash_is_valid.o crypt_register_hash.o crypt_unregister_prng.o \ +crypt_argchk.o crypt_find_cipher_any.o crypt_find_hash_id.o \ +crypt_prng_descriptor.o crypt_register_prng.o crypt_cipher_descriptor.o \ +crypt_find_cipher_id.o crypt_find_prng.o crypt_prng_is_valid.o \ +crypt_unregister_cipher.o crypt_cipher_is_valid.o crypt_find_hash.o \ +crypt_hash_descriptor.o crypt_register_cipher.o crypt_unregister_hash.o \ +\ +sprng.o fortuna.o yarrow.o rc4.o rng_get_bytes.o rng_make_prng.o \ +\ +rand_prime.o is_prime.o \ +\ +ecc.o dh.o \ +\ +rsa_decrypt_key.o rsa_encrypt_key.o rsa_exptmod.o rsa_free.o rsa_make_key.o \ +rsa_sign_hash.o rsa_verify_hash.o rsa_export.o rsa_import.o tim_exptmod.o \ +rsa_v15_encrypt_key.o rsa_v15_decrypt_key.o rsa_v15_sign_hash.o rsa_v15_verify_hash.o \ +\ +dsa_export.o dsa_free.o dsa_import.o dsa_make_key.o dsa_sign_hash.o \ +dsa_verify_hash.o dsa_verify_key.o \ +\ +aes.o aes_enc.o \ +\ +blowfish.o des.o safer_tab.o safer.o saferp.o rc2.o xtea.o \ +rc6.o rc5.o cast5.o noekeon.o twofish.o skipjack.o \ +\ +md2.o md4.o md5.o sha1.o sha256.o sha512.o tiger.o whirl.o \ +rmd128.o rmd160.o \ +\ +packet_store_header.o packet_valid_header.o \ +\ +eax_addheader.o eax_decrypt.o eax_decrypt_verify_memory.o eax_done.o eax_encrypt.o \ +eax_encrypt_authenticate_memory.o eax_init.o eax_test.o \ +\ +ocb_decrypt.o ocb_decrypt_verify_memory.o ocb_done_decrypt.o ocb_done_encrypt.o \ +ocb_encrypt.o ocb_encrypt_authenticate_memory.o ocb_init.o ocb_ntz.o \ +ocb_shift_xor.o ocb_test.o s_ocb_done.o \ +\ +omac_done.o omac_file.o omac_init.o omac_memory.o omac_process.o omac_test.o \ +\ +pmac_done.o pmac_file.o pmac_init.o pmac_memory.o pmac_ntz.o pmac_process.o \ +pmac_shift_xor.o pmac_test.o \ +\ +cbc_start.o cbc_encrypt.o cbc_decrypt.o cbc_getiv.o cbc_setiv.o \ +cfb_start.o cfb_encrypt.o cfb_decrypt.o cfb_getiv.o cfb_setiv.o \ +ofb_start.o ofb_encrypt.o ofb_decrypt.o ofb_getiv.o ofb_setiv.o \ +ctr_start.o ctr_encrypt.o ctr_decrypt.o ctr_getiv.o ctr_setiv.o \ +ecb_start.o ecb_encrypt.o ecb_decrypt.o \ +\ +hash_file.o hash_filehandle.o hash_memory.o \ +\ +hmac_done.o hmac_file.o hmac_init.o hmac_memory.o hmac_process.o hmac_test.o \ +\ +pkcs_1_mgf1.o pkcs_1_oaep_encode.o pkcs_1_oaep_decode.o \ +pkcs_1_pss_encode.o pkcs_1_pss_decode.o pkcs_1_i2osp.o pkcs_1_os2ip.o \ +pkcs_1_v15_es_encode.o pkcs_1_v15_es_decode.o pkcs_1_v15_sa_encode.o pkcs_1_v15_sa_decode.o \ +\ +pkcs_5_1.o pkcs_5_2.o \ +\ +burn_stack.o zeromem.o \ +$(MPIOBJECT) + +#ciphers come in two flavours... enc+dec and enc +aes_enc.o: aes.c aes_tab.c + $(CC) $(CFLAGS) -DENCRYPT_ONLY -c aes.c -o aes_enc.o + +ltc_dll: $(OBJECTS) $(MPIOBJECT) + gcc -mno-cygwin -mdll -o libtomcrypt.dll -Wl,--out-implib=libtomcrypt.dll.a -Wl,--export-all-symbols *.o -ladvapi32 + ranlib libtomcrypt.dll.a diff --git a/makefile.icc b/makefile.icc new file mode 100644 index 00000000..4019e2fd --- /dev/null +++ b/makefile.icc @@ -0,0 +1,206 @@ +# MAKEFILE for linux ICC (Intel C compiler) +# +# Tested with ICC v8.... +# +# Be aware that ICC isn't quite as stable as GCC and several optimization switches +# seem to break the code (that GCC and MSVC compile just fine). In particular +# "-ip" and "-x*" seem to break the code (ROL/ROR macro problems). As the makefile +# is shipped the code will build and execute properly. +# +# Also note that ICC often makes code that is slower than GCC. This is probably due to +# a mix of not being able to use "-ip" and just having fewer optimization algos than GCC. +# +# Tom St Denis + +#ch1-01-1 +# Compiler and Linker Names +CC=icc +#LD=ld + +# Archiver [makes .a files] +#AR=ar +#ARFLAGS=r + +# Compilation flags. Note the += does not write over the user's CFLAGS! +CFLAGS += -c -I./ -DINTEL_CC + +#The default rule for make builds the libtomcrypt library. +default:library + +# optimize for SPEED +# +# -mcpu= can be pentium, pentiumpro (covers PII through PIII) or pentium4 +# -ax? specifies make code specifically for ? but compatible with IA-32 +# -x? specifies compile solely for ? [not specifically IA-32 compatible] +# +# where ? is +# K - PIII +# W - first P4 [Williamette] +# N - P4 Northwood +# P - P4 Prescott +# B - Blend of P4 and PM [mobile] +# +# Default to just generic max opts +CFLAGS += -O3 -xN -ip + +# want to see stuff? +#CFLAGS += -opt_report + +#These flags control how the library gets built. + +#Output filenames for various targets. +LIBNAME=libtomcrypt.a +HASH=hashsum +CRYPT=encrypt +SMALL=small +PROF=x86_prof +TV=tv_gen + +#LIBPATH-The directory for libtomcrypt to be installed to. +#INCPATH-The directory to install the header files for libtomcrypt. +#DATAPATH-The directory to install the pdf docs. +DESTDIR= +LIBPATH=/usr/lib +INCPATH=/usr/include +DATAPATH=/usr/share/doc/libtomcrypt/pdf + +#List of objects to compile. + +#Leave MPI built-in or force developer to link against libtommath? +MPIOBJECT=mpi.o + +OBJECTS=error_to_string.o mpi_to_ltc_error.o base64_encode.o base64_decode.o \ +\ +crypt.o crypt_find_cipher.o crypt_find_hash_any.o \ +crypt_hash_is_valid.o crypt_register_hash.o crypt_unregister_prng.o \ +crypt_argchk.o crypt_find_cipher_any.o crypt_find_hash_id.o \ +crypt_prng_descriptor.o crypt_register_prng.o crypt_cipher_descriptor.o \ +crypt_find_cipher_id.o crypt_find_prng.o crypt_prng_is_valid.o \ +crypt_unregister_cipher.o crypt_cipher_is_valid.o crypt_find_hash.o \ +crypt_hash_descriptor.o crypt_register_cipher.o crypt_unregister_hash.o \ +\ +sprng.o fortuna.o yarrow.o rc4.o rng_get_bytes.o rng_make_prng.o \ +\ +rand_prime.o is_prime.o \ +\ +ecc.o dh.o \ +\ +rsa_decrypt_key.o rsa_encrypt_key.o rsa_exptmod.o rsa_free.o rsa_make_key.o \ +rsa_sign_hash.o rsa_verify_hash.o rsa_export.o rsa_import.o tim_exptmod.o \ +rsa_v15_encrypt_key.o rsa_v15_decrypt_key.o rsa_v15_sign_hash.o rsa_v15_verify_hash.o \ +\ +dsa_export.o dsa_free.o dsa_import.o dsa_make_key.o dsa_sign_hash.o \ +dsa_verify_hash.o dsa_verify_key.o \ +\ +aes.o aes_enc.o \ +\ +blowfish.o des.o safer_tab.o safer.o saferp.o rc2.o xtea.o \ +rc6.o rc5.o cast5.o noekeon.o twofish.o skipjack.o \ +\ +md2.o md4.o md5.o sha1.o sha256.o sha512.o tiger.o whirl.o \ +rmd128.o rmd160.o \ +\ +packet_store_header.o packet_valid_header.o \ +\ +eax_addheader.o eax_decrypt.o eax_decrypt_verify_memory.o eax_done.o eax_encrypt.o \ +eax_encrypt_authenticate_memory.o eax_init.o eax_test.o \ +\ +ocb_decrypt.o ocb_decrypt_verify_memory.o ocb_done_decrypt.o ocb_done_encrypt.o \ +ocb_encrypt.o ocb_encrypt_authenticate_memory.o ocb_init.o ocb_ntz.o \ +ocb_shift_xor.o ocb_test.o s_ocb_done.o \ +\ +omac_done.o omac_file.o omac_init.o omac_memory.o omac_process.o omac_test.o \ +\ +pmac_done.o pmac_file.o pmac_init.o pmac_memory.o pmac_ntz.o pmac_process.o \ +pmac_shift_xor.o pmac_test.o \ +\ +cbc_start.o cbc_encrypt.o cbc_decrypt.o cbc_getiv.o cbc_setiv.o \ +cfb_start.o cfb_encrypt.o cfb_decrypt.o cfb_getiv.o cfb_setiv.o \ +ofb_start.o ofb_encrypt.o ofb_decrypt.o ofb_getiv.o ofb_setiv.o \ +ctr_start.o ctr_encrypt.o ctr_decrypt.o ctr_getiv.o ctr_setiv.o \ +ecb_start.o ecb_encrypt.o ecb_decrypt.o \ +\ +hash_file.o hash_filehandle.o hash_memory.o \ +\ +hmac_done.o hmac_file.o hmac_init.o hmac_memory.o hmac_process.o hmac_test.o \ +\ +pkcs_1_mgf1.o pkcs_1_oaep_encode.o pkcs_1_oaep_decode.o \ +pkcs_1_pss_encode.o pkcs_1_pss_decode.o pkcs_1_i2osp.o pkcs_1_os2ip.o \ +pkcs_1_v15_es_encode.o pkcs_1_v15_es_decode.o pkcs_1_v15_sa_encode.o pkcs_1_v15_sa_decode.o \ +\ +pkcs_5_1.o pkcs_5_2.o \ +\ +burn_stack.o zeromem.o \ +$(MPIOBJECT) + + +#ciphers come in two flavours... enc+dec and enc +aes_enc.o: aes.c aes_tab.c + $(CC) $(CFLAGS) -DENCRYPT_ONLY -c aes.c -o aes_enc.o + +HASHOBJECTS=demos/hashsum.o +CRYPTOBJECTS=demos/encrypt.o +SMALLOBJECTS=demos/small.o +PROFS=demos/x86_prof.o +TVS=demos/tv_gen.o + +#Files left over from making the crypt.pdf. +LEFTOVERS=*.dvi *.log *.aux *.toc *.idx *.ilg *.ind + +#Compressed filenames +COMPRESSED=crypt.tar.bz2 crypt.zip crypt.tar.gz + +#Header files used by libtomcrypt. +HEADERS=ltc_tommath.h mycrypt_cfg.h \ +mycrypt_misc.h mycrypt_prng.h mycrypt_cipher.h mycrypt_hash.h \ +mycrypt_macros.h mycrypt_pk.h mycrypt.h mycrypt_argchk.h mycrypt_custom.h + +#These are the rules to make certain object files. +rsa.o: rsa.c rsa_sys.c +ecc.o: ecc.c ecc_sys.c +dh.o: dh.c dh_sys.c +aes.o: aes.c aes_tab.c +twofish.o: twofish.c twofish_tab.c +sha512.o: sha512.c sha384.c +sha256.o: sha256.c sha224.c + +#This rule makes the libtomcrypt library. +library: $(LIBNAME) + +$(LIBNAME): $(OBJECTS) + $(AR) $(ARFLAGS) $@ $(OBJECTS) + +#This rule makes the hash program included with libtomcrypt +hashsum: library $(HASHOBJECTS) + $(CC) $(HASHOBJECTS) $(LIBNAME) -o $(HASH) $(WARN) + +#makes the crypt program +crypt: library $(CRYPTOBJECTS) + $(CC) $(CRYPTOBJECTS) $(LIBNAME) -o $(CRYPT) $(WARN) + +#makes the small program +small: library $(SMALLOBJECTS) + $(CC) $(SMALLOBJECTS) $(LIBNAME) -o $(SMALL) $(WARN) + +x86_prof: library $(PROFS) + $(CC) $(PROFS) $(LIBNAME) -o $(PROF) + +tv_gen: library $(TVS) + $(CC) $(TVS) $(LIBNAME) -o $(TV) + + +#This rule installs the library and the header files. This must be run +#as root in order to have a high enough permission to write to the correct +#directories and to set the owner and group to root. +install: library + install -d -g root -o root $(DESTDIR)$(LIBPATH) + install -d -g root -o root $(DESTDIR)$(INCPATH) + install -g root -o root $(LIBNAME) $(DESTDIR)$(LIBPATH) + install -g root -o root $(HEADERS) $(DESTDIR)$(INCPATH) + +#This rule cleans the source tree of all compiled code, not including the pdf +#documentation. +clean: + rm -f $(OBJECTS) $(TESTOBJECTS) $(HASHOBJECTS) $(CRYPTOBJECTS) $(SMALLOBJECTS) $(LEFTOVERS) $(LIBNAME) + rm -f $(TEST) $(HASH) $(COMPRESSED) $(PROFS) $(PROF) $(TVS) $(TV) + rm -f *.a *.dll *stackdump *.lib *.exe *.obj demos/*.obj demos/*.o *.bat *.txt *.il *.da demos/*.il demos/*.da *.dyn diff --git a/makefile.mingw b/makefile.mingw deleted file mode 100644 index ed1af18b..00000000 --- a/makefile.mingw +++ /dev/null @@ -1,353 +0,0 @@ -# MAKEFILE for MS Windows (mingw + gcc + gmake) -# -# BEWARE: variables OBJECTS, TOBJECTS, HEADERS, VERSION are updated via ./updatemakes.sh - -### USAGE: -# Open a command prompt with gcc + gmake in PATH and start: -# -# gmake -f makefile.mingw all -# test.exe -# gmake -f makefile.mingw PREFIX=c:\devel\libtom install -# -#Or: -# -# gmake -f makefile.mingw CFLAGS="-O3 -DUSE_LTM -DLTM_DESC -Ic:/path/to/libtommath" EXTRALIBS="-Lc:/path/to/libtommath -ltommath" all -# - -#The following can be overridden from command line e.g. make -f makefile.mingw CC=gcc ARFLAGS=rcs -PREFIX = c:\mingw -CC = gcc -AR = ar -ARFLAGS = r -RANLIB = ranlib -STRIP = strip -CFLAGS = -O2 -DUSE_LTM -DLTM_DESC -I../libtommath -EXTRALIBS = -L../libtommath -ltommath - -#Compilation flags -LTC_CFLAGS = -Isrc/headers -Itests $(CFLAGS) -LTC_LDFLAGS = $(LDFLAGS) $(EXTRALIBS) -VERSION=1.18.2-develop - -#Libraries to be created -LIBMAIN_S =libtomcrypt.a -LIBMAIN_I =libtomcrypt.dll.a -LIBMAIN_D =libtomcrypt.dll - -#List of objects to compile (all goes to libtomcrypt.a) -OBJECTS=src/ciphers/aes/aes.o src/ciphers/aes/aes_desc.o src/ciphers/aes/aes_enc.o \ -src/ciphers/aes/aes_enc_desc.o src/ciphers/aes/aesni.o src/ciphers/anubis.o src/ciphers/aria.o \ -src/ciphers/blowfish.o src/ciphers/camellia.o src/ciphers/cast5.o src/ciphers/des.o src/ciphers/idea.o \ -src/ciphers/kasumi.o src/ciphers/khazad.o src/ciphers/kseed.o src/ciphers/multi2.o src/ciphers/noekeon.o \ -src/ciphers/rc2.o src/ciphers/rc5.o src/ciphers/rc6.o src/ciphers/safer/safer.o \ -src/ciphers/safer/saferp.o src/ciphers/serpent.o src/ciphers/skipjack.o src/ciphers/sm4.o \ -src/ciphers/tea.o src/ciphers/twofish/twofish.o src/ciphers/xtea.o src/encauth/ccm/ccm_add_aad.o \ -src/encauth/ccm/ccm_add_nonce.o src/encauth/ccm/ccm_done.o src/encauth/ccm/ccm_init.o \ -src/encauth/ccm/ccm_memory.o src/encauth/ccm/ccm_process.o src/encauth/ccm/ccm_reset.o \ -src/encauth/ccm/ccm_test.o src/encauth/chachapoly/chacha20poly1305_add_aad.o \ -src/encauth/chachapoly/chacha20poly1305_decrypt.o src/encauth/chachapoly/chacha20poly1305_done.o \ -src/encauth/chachapoly/chacha20poly1305_encrypt.o src/encauth/chachapoly/chacha20poly1305_init.o \ -src/encauth/chachapoly/chacha20poly1305_memory.o src/encauth/chachapoly/chacha20poly1305_setiv.o \ -src/encauth/chachapoly/chacha20poly1305_setiv_rfc7905.o \ -src/encauth/chachapoly/chacha20poly1305_test.o src/encauth/eax/eax_addheader.o \ -src/encauth/eax/eax_decrypt.o src/encauth/eax/eax_decrypt_verify_memory.o src/encauth/eax/eax_done.o \ -src/encauth/eax/eax_encrypt.o src/encauth/eax/eax_encrypt_authenticate_memory.o \ -src/encauth/eax/eax_init.o src/encauth/eax/eax_test.o src/encauth/gcm/gcm_add_aad.o \ -src/encauth/gcm/gcm_add_iv.o src/encauth/gcm/gcm_done.o src/encauth/gcm/gcm_gf_mult.o \ -src/encauth/gcm/gcm_init.o src/encauth/gcm/gcm_memory.o src/encauth/gcm/gcm_mult_h.o \ -src/encauth/gcm/gcm_process.o src/encauth/gcm/gcm_reset.o src/encauth/gcm/gcm_test.o \ -src/encauth/gcm_siv/gcm_siv.o src/encauth/gcm_siv/gcm_siv_test.o src/encauth/ocb3/ocb3_add_aad.o \ -src/encauth/ocb3/ocb3_decrypt.o src/encauth/ocb3/ocb3_decrypt_last.o \ -src/encauth/ocb3/ocb3_decrypt_verify_memory.o src/encauth/ocb3/ocb3_done.o \ -src/encauth/ocb3/ocb3_encrypt.o src/encauth/ocb3/ocb3_encrypt_authenticate_memory.o \ -src/encauth/ocb3/ocb3_encrypt_last.o src/encauth/ocb3/ocb3_init.o src/encauth/ocb3/ocb3_int_ntz.o \ -src/encauth/ocb3/ocb3_int_xor_blocks.o src/encauth/ocb3/ocb3_test.o src/encauth/siv/siv.o \ -src/hashes/blake2b.o src/hashes/blake2s.o src/hashes/blake3.o src/hashes/chc/chc.o \ -src/hashes/helper/hash_file.o src/hashes/helper/hash_filehandle.o src/hashes/helper/hash_memory.o \ -src/hashes/helper/hash_memory_multi.o src/hashes/md2.o src/hashes/md4.o src/hashes/md5.o \ -src/hashes/rmd128.o src/hashes/rmd160.o src/hashes/rmd256.o src/hashes/rmd320.o src/hashes/sha1.o \ -src/hashes/sha1_desc.o src/hashes/sha1_x86.o src/hashes/sha2/sha224.o src/hashes/sha2/sha224_desc.o \ -src/hashes/sha2/sha224_x86.o src/hashes/sha2/sha256.o src/hashes/sha2/sha256_desc.o \ -src/hashes/sha2/sha256_x86.o src/hashes/sha2/sha384.o src/hashes/sha2/sha384_desc.o \ -src/hashes/sha2/sha384_x86.o src/hashes/sha2/sha512.o src/hashes/sha2/sha512_224.o \ -src/hashes/sha2/sha512_224_desc.o src/hashes/sha2/sha512_224_x86.o src/hashes/sha2/sha512_256.o \ -src/hashes/sha2/sha512_256_desc.o src/hashes/sha2/sha512_256_x86.o src/hashes/sha2/sha512_desc.o \ -src/hashes/sha2/sha512_x86.o src/hashes/sha3.o src/hashes/sha3_test.o src/hashes/sm3.o \ -src/hashes/tiger.o src/hashes/whirl/whirl.o src/mac/blake2/blake2bmac.o \ -src/mac/blake2/blake2bmac_file.o src/mac/blake2/blake2bmac_memory.o \ -src/mac/blake2/blake2bmac_memory_multi.o src/mac/blake2/blake2bmac_test.o src/mac/blake2/blake2smac.o \ -src/mac/blake2/blake2smac_file.o src/mac/blake2/blake2smac_memory.o \ -src/mac/blake2/blake2smac_memory_multi.o src/mac/blake2/blake2smac_test.o src/mac/f9/f9_done.o \ -src/mac/f9/f9_file.o src/mac/f9/f9_init.o src/mac/f9/f9_memory.o src/mac/f9/f9_memory_multi.o \ -src/mac/f9/f9_process.o src/mac/f9/f9_test.o src/mac/hmac/hmac_done.o src/mac/hmac/hmac_file.o \ -src/mac/hmac/hmac_init.o src/mac/hmac/hmac_memory.o src/mac/hmac/hmac_memory_multi.o \ -src/mac/hmac/hmac_process.o src/mac/hmac/hmac_test.o src/mac/kmac/kmac.o src/mac/kmac/kmac_file.o \ -src/mac/kmac/kmac_memory.o src/mac/kmac/kmac_memory_multi.o src/mac/kmac/kmac_test.o \ -src/mac/omac/omac_done.o src/mac/omac/omac_file.o src/mac/omac/omac_init.o src/mac/omac/omac_memory.o \ -src/mac/omac/omac_memory_multi.o src/mac/omac/omac_process.o src/mac/omac/omac_test.o \ -src/mac/pelican/pelican.o src/mac/pelican/pelican_memory.o src/mac/pelican/pelican_test.o \ -src/mac/pmac/pmac_done.o src/mac/pmac/pmac_file.o src/mac/pmac/pmac_init.o src/mac/pmac/pmac_memory.o \ -src/mac/pmac/pmac_memory_multi.o src/mac/pmac/pmac_ntz.o src/mac/pmac/pmac_process.o \ -src/mac/pmac/pmac_shift_xor.o src/mac/pmac/pmac_test.o src/mac/poly1305/poly1305.o \ -src/mac/poly1305/poly1305_file.o src/mac/poly1305/poly1305_memory.o \ -src/mac/poly1305/poly1305_memory_multi.o src/mac/poly1305/poly1305_test.o src/mac/xcbc/xcbc_done.o \ -src/mac/xcbc/xcbc_file.o src/mac/xcbc/xcbc_init.o src/mac/xcbc/xcbc_memory.o \ -src/mac/xcbc/xcbc_memory_multi.o src/mac/xcbc/xcbc_process.o src/mac/xcbc/xcbc_test.o \ -src/math/fp/ltc_ecc_fp_mulmod.o src/math/gmp_desc.o src/math/ltm_desc.o src/math/multi.o \ -src/math/radix_to_bin.o src/math/rand_bn.o src/math/rand_prime.o src/math/tfm_desc.o src/misc/adler32.o \ -src/misc/algname_match.o src/misc/argon2/argon2.o src/misc/base16/base16_decode.o \ -src/misc/base16/base16_encode.o src/misc/base32/base32_decode.o src/misc/base32/base32_encode.o \ -src/misc/base64/base64_decode.o src/misc/base64/base64_encode.o src/misc/bcrypt/bcrypt.o \ -src/misc/burn_stack.o src/misc/compare_testvector.o src/misc/copy_or_zeromem.o src/misc/crc32.o \ -src/misc/crypt/crypt.o src/misc/crypt/crypt_argchk.o src/misc/crypt/crypt_cipher_descriptor.o \ -src/misc/crypt/crypt_cipher_is_valid.o src/misc/crypt/crypt_constants.o \ -src/misc/crypt/crypt_find_cipher.o src/misc/crypt/crypt_find_cipher_any.o \ -src/misc/crypt/crypt_find_cipher_id.o src/misc/crypt/crypt_find_hash.o \ -src/misc/crypt/crypt_find_hash_any.o src/misc/crypt/crypt_find_hash_id.o \ -src/misc/crypt/crypt_find_hash_oid.o src/misc/crypt/crypt_find_prng.o src/misc/crypt/crypt_fsa.o \ -src/misc/crypt/crypt_hash_descriptor.o src/misc/crypt/crypt_hash_is_valid.o \ -src/misc/crypt/crypt_inits.o src/misc/crypt/crypt_ltc_mp_descriptor.o \ -src/misc/crypt/crypt_prng_descriptor.o src/misc/crypt/crypt_prng_is_valid.o \ -src/misc/crypt/crypt_prng_rng_descriptor.o src/misc/crypt/crypt_register_all_ciphers.o \ -src/misc/crypt/crypt_register_all_hashes.o src/misc/crypt/crypt_register_all_prngs.o \ -src/misc/crypt/crypt_register_cipher.o src/misc/crypt/crypt_register_hash.o \ -src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_sizes.o \ -src/misc/crypt/crypt_unregister_cipher.o src/misc/crypt/crypt_unregister_hash.o \ -src/misc/crypt/crypt_unregister_prng.o src/misc/deprecated.o src/misc/error_to_string.o \ -src/misc/hkdf/hkdf.o src/misc/hkdf/hkdf_test.o src/misc/mem_neq.o src/misc/padding/padding_depad.o \ -src/misc/padding/padding_pad.o src/misc/password_free.o src/misc/pbes/pbes.o src/misc/pbes/pbes1.o \ -src/misc/pbes/pbes2.o src/misc/pem/pem.o src/misc/pem/pem_pkcs.o src/misc/pem/pem_read.o \ -src/misc/pem/pem_ssh.o src/misc/pkcs12/pkcs12_kdf.o src/misc/pkcs12/pkcs12_utf8_to_utf16.o \ -src/misc/pkcs5/pkcs_5_1.o src/misc/pkcs5/pkcs_5_2.o src/misc/pkcs5/pkcs_5_test.o \ -src/misc/scrypt/scrypt.o src/misc/ssh/ssh_decode_sequence_multi.o \ -src/misc/ssh/ssh_encode_sequence_multi.o src/misc/zeromem.o src/modes/cbc/cbc_decrypt.o \ -src/modes/cbc/cbc_done.o src/modes/cbc/cbc_encrypt.o src/modes/cbc/cbc_getiv.o \ -src/modes/cbc/cbc_setiv.o src/modes/cbc/cbc_start.o src/modes/cfb/cfb_decrypt.o \ -src/modes/cfb/cfb_done.o src/modes/cfb/cfb_encrypt.o src/modes/cfb/cfb_getiv.o \ -src/modes/cfb/cfb_setiv.o src/modes/cfb/cfb_start.o src/modes/ctr/ctr_decrypt.o \ -src/modes/ctr/ctr_done.o src/modes/ctr/ctr_encrypt.o src/modes/ctr/ctr_getiv.o \ -src/modes/ctr/ctr_setiv.o src/modes/ctr/ctr_start.o src/modes/ctr/ctr_test.o \ -src/modes/ecb/ecb_decrypt.o src/modes/ecb/ecb_done.o src/modes/ecb/ecb_encrypt.o \ -src/modes/ecb/ecb_start.o src/modes/f8/f8_decrypt.o src/modes/f8/f8_done.o src/modes/f8/f8_encrypt.o \ -src/modes/f8/f8_getiv.o src/modes/f8/f8_setiv.o src/modes/f8/f8_start.o src/modes/f8/f8_test_mode.o \ -src/modes/lrw/lrw_decrypt.o src/modes/lrw/lrw_done.o src/modes/lrw/lrw_encrypt.o \ -src/modes/lrw/lrw_getiv.o src/modes/lrw/lrw_process.o src/modes/lrw/lrw_setiv.o \ -src/modes/lrw/lrw_start.o src/modes/lrw/lrw_test.o src/modes/ofb/ofb_decrypt.o src/modes/ofb/ofb_done.o \ -src/modes/ofb/ofb_encrypt.o src/modes/ofb/ofb_getiv.o src/modes/ofb/ofb_setiv.o \ -src/modes/ofb/ofb_start.o src/modes/xts/xts_decrypt.o src/modes/xts/xts_done.o \ -src/modes/xts/xts_encrypt.o src/modes/xts/xts_init.o src/modes/xts/xts_mult_x.o \ -src/modes/xts/xts_test.o src/pk/asn1/der/bit/der_decode_bit_string.o \ -src/pk/asn1/der/bit/der_decode_raw_bit_string.o src/pk/asn1/der/bit/der_encode_bit_string.o \ -src/pk/asn1/der/bit/der_encode_raw_bit_string.o src/pk/asn1/der/bit/der_length_bit_string.o \ -src/pk/asn1/der/boolean/der_decode_boolean.o src/pk/asn1/der/boolean/der_encode_boolean.o \ -src/pk/asn1/der/boolean/der_length_boolean.o src/pk/asn1/der/choice/der_decode_choice.o \ -src/pk/asn1/der/custom_type/der_decode_custom_type.o \ -src/pk/asn1/der/custom_type/der_encode_custom_type.o \ -src/pk/asn1/der/custom_type/der_length_custom_type.o src/pk/asn1/der/general/der_asn1_maps.o \ -src/pk/asn1/der/general/der_decode_asn1_identifier.o src/pk/asn1/der/general/der_decode_asn1_length.o \ -src/pk/asn1/der/general/der_encode_asn1_identifier.o src/pk/asn1/der/general/der_encode_asn1_length.o \ -src/pk/asn1/der/general/der_length_asn1_identifier.o src/pk/asn1/der/general/der_length_asn1_length.o \ -src/pk/asn1/der/generalizedtime/der_decode_generalizedtime.o \ -src/pk/asn1/der/generalizedtime/der_encode_generalizedtime.o \ -src/pk/asn1/der/generalizedtime/der_length_generalizedtime.o \ -src/pk/asn1/der/ia5/der_decode_ia5_string.o src/pk/asn1/der/ia5/der_encode_ia5_string.o \ -src/pk/asn1/der/ia5/der_length_ia5_string.o src/pk/asn1/der/integer/der_decode_integer.o \ -src/pk/asn1/der/integer/der_encode_integer.o src/pk/asn1/der/integer/der_length_integer.o \ -src/pk/asn1/der/object_identifier/der_decode_object_identifier.o \ -src/pk/asn1/der/object_identifier/der_encode_object_identifier.o \ -src/pk/asn1/der/object_identifier/der_length_object_identifier.o \ -src/pk/asn1/der/octet/der_decode_octet_string.o src/pk/asn1/der/octet/der_encode_octet_string.o \ -src/pk/asn1/der/octet/der_length_octet_string.o \ -src/pk/asn1/der/printable_string/der_decode_printable_string.o \ -src/pk/asn1/der/printable_string/der_encode_printable_string.o \ -src/pk/asn1/der/printable_string/der_length_printable_string.o \ -src/pk/asn1/der/sequence/der_decode_sequence_ex.o \ -src/pk/asn1/der/sequence/der_decode_sequence_flexi.o \ -src/pk/asn1/der/sequence/der_decode_sequence_multi.o \ -src/pk/asn1/der/sequence/der_encode_sequence_ex.o \ -src/pk/asn1/der/sequence/der_encode_sequence_multi.o \ -src/pk/asn1/der/sequence/der_flexi_sequence_cmp.o src/pk/asn1/der/sequence/der_length_sequence.o \ -src/pk/asn1/der/sequence/der_sequence_free.o src/pk/asn1/der/sequence/der_sequence_shrink.o \ -src/pk/asn1/der/set/der_encode_set.o src/pk/asn1/der/set/der_encode_setof.o \ -src/pk/asn1/der/short_integer/der_decode_short_integer.o \ -src/pk/asn1/der/short_integer/der_encode_short_integer.o \ -src/pk/asn1/der/short_integer/der_length_short_integer.o \ -src/pk/asn1/der/teletex_string/der_decode_teletex_string.o \ -src/pk/asn1/der/teletex_string/der_length_teletex_string.o \ -src/pk/asn1/der/utctime/der_decode_utctime.o src/pk/asn1/der/utctime/der_encode_utctime.o \ -src/pk/asn1/der/utctime/der_length_utctime.o src/pk/asn1/der/utf8/der_decode_utf8_string.o \ -src/pk/asn1/der/utf8/der_encode_utf8_string.o src/pk/asn1/der/utf8/der_length_utf8_string.o \ -src/pk/asn1/oid/pk_get.o src/pk/asn1/oid/pk_oid_cmp.o src/pk/asn1/oid/pk_oid_str.o \ -src/pk/asn1/pkcs8/pkcs8_decode_flexi.o src/pk/asn1/pkcs8/pkcs8_get.o \ -src/pk/asn1/x509/x509_decode_public_key_from_certificate.o src/pk/asn1/x509/x509_decode_spki.o \ -src/pk/asn1/x509/x509_decode_subject_public_key_info.o \ -src/pk/asn1/x509/x509_encode_subject_public_key_info.o src/pk/asn1/x509/x509_get_pka.o \ -src/pk/asn1/x509/x509_import_spki.o src/pk/dh/dh.o src/pk/dh/dh_check_pubkey.o src/pk/dh/dh_export.o \ -src/pk/dh/dh_export_key.o src/pk/dh/dh_free.o src/pk/dh/dh_generate_key.o src/pk/dh/dh_import.o \ -src/pk/dh/dh_import_pkcs8.o src/pk/dh/dh_set.o src/pk/dh/dh_set_pg_dhparam.o \ -src/pk/dh/dh_shared_secret.o src/pk/dsa/dsa_decrypt_key.o src/pk/dsa/dsa_encrypt_key.o \ -src/pk/dsa/dsa_export.o src/pk/dsa/dsa_free.o src/pk/dsa/dsa_generate_key.o \ -src/pk/dsa/dsa_generate_pqg.o src/pk/dsa/dsa_import.o src/pk/dsa/dsa_import_pkcs8.o \ -src/pk/dsa/dsa_init.o src/pk/dsa/dsa_make_key.o src/pk/dsa/dsa_set.o src/pk/dsa/dsa_set_pqg_dsaparam.o \ -src/pk/dsa/dsa_shared_secret.o src/pk/dsa/dsa_sign_hash.o src/pk/dsa/dsa_verify_hash.o \ -src/pk/dsa/dsa_verify_key.o src/pk/ec25519/ec25519_crypto_ctx.o src/pk/ec25519/ec25519_export.o \ -src/pk/ec25519/ec25519_import_pkcs8.o src/pk/ec25519/tweetnacl.o src/pk/ec448/ec448_common.o \ -src/pk/ec448/ec448_crypto_ctx.o src/pk/ec448/ec448_export.o src/pk/ec448/ec448_import_pkcs8.o \ -src/pk/ecc/ecc.o src/pk/ecc/ecc_ansi_x963_export.o src/pk/ecc/ecc_ansi_x963_import.o \ -src/pk/ecc/ecc_decrypt_key.o src/pk/ecc/ecc_encrypt_key.o src/pk/ecc/ecc_export.o \ -src/pk/ecc/ecc_export_openssl.o src/pk/ecc/ecc_find_curve.o src/pk/ecc/ecc_free.o \ -src/pk/ecc/ecc_get_key.o src/pk/ecc/ecc_get_oid_str.o src/pk/ecc/ecc_get_size.o src/pk/ecc/ecc_import.o \ -src/pk/ecc/ecc_import_openssl.o src/pk/ecc/ecc_import_pkcs8.o src/pk/ecc/ecc_import_x509.o \ -src/pk/ecc/ecc_make_key.o src/pk/ecc/ecc_recover_key.o src/pk/ecc/ecc_rfc6979_key.o \ -src/pk/ecc/ecc_set_curve.o src/pk/ecc/ecc_set_curve_internal.o src/pk/ecc/ecc_set_key.o \ -src/pk/ecc/ecc_shared_secret.o src/pk/ecc/ecc_sign_hash.o src/pk/ecc/ecc_sign_hash_eth27.o \ -src/pk/ecc/ecc_sign_hash_internal.o src/pk/ecc/ecc_sign_hash_rfc5656.o \ -src/pk/ecc/ecc_sign_hash_rfc7518.o src/pk/ecc/ecc_sign_hash_x962.o src/pk/ecc/ecc_sizes.o \ -src/pk/ecc/ecc_ssh_ecdsa_encode_name.o src/pk/ecc/ecc_verify_hash.o src/pk/ecc/ecc_verify_hash_eth27.o \ -src/pk/ecc/ecc_verify_hash_internal.o src/pk/ecc/ecc_verify_hash_rfc5656.o \ -src/pk/ecc/ecc_verify_hash_rfc7518.o src/pk/ecc/ecc_verify_hash_x962.o \ -src/pk/ecc/ltc_ecc_export_point.o src/pk/ecc/ltc_ecc_import_point.o src/pk/ecc/ltc_ecc_is_point.o \ -src/pk/ecc/ltc_ecc_is_point_at_infinity.o src/pk/ecc/ltc_ecc_map.o src/pk/ecc/ltc_ecc_mul2add.o \ -src/pk/ecc/ltc_ecc_mulmod.o src/pk/ecc/ltc_ecc_mulmod_timing.o src/pk/ecc/ltc_ecc_points.o \ -src/pk/ecc/ltc_ecc_projective_add_point.o src/pk/ecc/ltc_ecc_projective_dbl_point.o \ -src/pk/ecc/ltc_ecc_verify_key.o src/pk/ed25519/ed25519_export.o src/pk/ed25519/ed25519_import.o \ -src/pk/ed25519/ed25519_import_pkcs8.o src/pk/ed25519/ed25519_import_raw.o \ -src/pk/ed25519/ed25519_import_x509.o src/pk/ed25519/ed25519_make_key.o src/pk/ed25519/ed25519_sign.o \ -src/pk/ed25519/ed25519_verify.o src/pk/ed448/ed448_export.o src/pk/ed448/ed448_import.o \ -src/pk/ed448/ed448_import_pkcs8.o src/pk/ed448/ed448_import_raw.o src/pk/ed448/ed448_import_x509.o \ -src/pk/ed448/ed448_make_key.o src/pk/ed448/ed448_sign.o src/pk/ed448/ed448_verify.o src/pk/pka_key.o \ -src/pk/pkcs1/pkcs_1_i2osp.o src/pk/pkcs1/pkcs_1_mgf1.o src/pk/pkcs1/pkcs_1_oaep_decode.o \ -src/pk/pkcs1/pkcs_1_oaep_encode.o src/pk/pkcs1/pkcs_1_os2ip.o src/pk/pkcs1/pkcs_1_pss_decode.o \ -src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/pkcs1/pkcs_1_v1_5_decode.o src/pk/pkcs1/pkcs_1_v1_5_encode.o \ -src/pk/rsa/rsa_decrypt_key.o src/pk/rsa/rsa_encrypt_key.o src/pk/rsa/rsa_export.o \ -src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_get_size.o src/pk/rsa/rsa_import.o \ -src/pk/rsa/rsa_import_pkcs8.o src/pk/rsa/rsa_import_x509.o src/pk/rsa/rsa_key.o \ -src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_set.o src/pk/rsa/rsa_sign_hash.o \ -src/pk/rsa/rsa_sign_saltlen_get.o src/pk/rsa/rsa_verify_hash.o src/pk/x25519/x25519_export.o \ -src/pk/x25519/x25519_import.o src/pk/x25519/x25519_import_pkcs8.o src/pk/x25519/x25519_import_raw.o \ -src/pk/x25519/x25519_import_x509.o src/pk/x25519/x25519_make_key.o \ -src/pk/x25519/x25519_shared_secret.o src/pk/x448/x448_export.o src/pk/x448/x448_import.o \ -src/pk/x448/x448_import_pkcs8.o src/pk/x448/x448_import_raw.o src/pk/x448/x448_import_x509.o \ -src/pk/x448/x448_make_key.o src/pk/x448/x448_shared_secret.o src/prngs/chacha20.o src/prngs/fortuna.o \ -src/prngs/rc4.o src/prngs/rng_get_bytes.o src/prngs/rng_make_prng.o src/prngs/sober128.o \ -src/prngs/sprng.o src/prngs/yarrow.o src/stream/chacha/chacha_crypt.o src/stream/chacha/chacha_done.o \ -src/stream/chacha/chacha_ivctr32.o src/stream/chacha/chacha_ivctr64.o \ -src/stream/chacha/chacha_keystream.o src/stream/chacha/chacha_memory.o \ -src/stream/chacha/chacha_setup.o src/stream/chacha/chacha_test.o src/stream/chacha/xchacha20_memory.o \ -src/stream/chacha/xchacha20_setup.o src/stream/chacha/xchacha20_test.o src/stream/rabbit/rabbit.o \ -src/stream/rabbit/rabbit_memory.o src/stream/rc4/rc4_stream.o src/stream/rc4/rc4_stream_memory.o \ -src/stream/rc4/rc4_test.o src/stream/salsa20/salsa20_crypt.o src/stream/salsa20/salsa20_done.o \ -src/stream/salsa20/salsa20_ivctr64.o src/stream/salsa20/salsa20_keystream.o \ -src/stream/salsa20/salsa20_memory.o src/stream/salsa20/salsa20_setup.o \ -src/stream/salsa20/salsa20_test.o src/stream/salsa20/xsalsa20_memory.o \ -src/stream/salsa20/xsalsa20_setup.o src/stream/salsa20/xsalsa20_test.o \ -src/stream/sober128/sober128_stream.o src/stream/sober128/sober128_stream_memory.o \ -src/stream/sober128/sober128_test.o src/stream/sosemanuk/sosemanuk.o \ -src/stream/sosemanuk/sosemanuk_memory.o src/stream/sosemanuk/sosemanuk_test.o - -#List of test objects to compile -TOBJECTS=tests/argon2_test.o tests/base16_test.o tests/base32_test.o tests/base64_test.o \ -tests/bcrypt_test.o tests/cipher_hash_test.o tests/common.o tests/deprecated_test.o tests/der_test.o \ -tests/dh_test.o tests/dsa_test.o tests/ecc_test.o tests/ed25519_test.o tests/ed448_test.o \ -tests/file_test.o tests/mac_test.o tests/misc_test.o tests/modes_test.o tests/mpi_test.o \ -tests/multi_test.o tests/no_null_termination_check_test.o tests/no_prng.o tests/padding_test.o \ -tests/pem_test.o tests/pk_oid_test.o tests/pkcs_1_eme_test.o tests/pkcs_1_emsa_test.o \ -tests/pkcs_1_oaep_test.o tests/pkcs_1_pss_test.o tests/pkcs_1_test.o tests/prng_test.o \ -tests/rotate_test.o tests/rsa_test.o tests/scrypt_test.o tests/siv_wycheproof_test.o tests/ssh_test.o \ -tests/store_test.o tests/test.o tests/x25519_test.o tests/x448_test.o - -#The following headers will be installed by "make install" -HEADERS_PUB=src/headers/tomcrypt.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cfg.h \ -src/headers/tomcrypt_cipher.h src/headers/tomcrypt_custom.h src/headers/tomcrypt_hash.h \ -src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h src/headers/tomcrypt_math.h \ -src/headers/tomcrypt_misc.h src/headers/tomcrypt_pk.h src/headers/tomcrypt_pkcs.h \ -src/headers/tomcrypt_prng.h - -HEADERS=$(HEADERS_PUB) src/headers/tomcrypt_private.h - -#The default rule for make builds the libtomcrypt.a library (static) -default: $(LIBMAIN_S) - -#SPECIAL: AES comes in two flavours - enc+dec and enc-only -src/ciphers/aes/aes_enc.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c - $(CC) $(LTC_CFLAGS) -DENCRYPT_ONLY -c src/ciphers/aes/aes.c -o src/ciphers/aes/aes_enc.o -src/ciphers/aes/aes_enc_desc.o: src/ciphers/aes/aes.c - $(CC) $(LTC_CFLAGS) -DENCRYPT_ONLY -c src/ciphers/aes/aes_desc.c -o src/ciphers/aes/aes_enc_desc.o - -#SPECIAL: these are the rules to make certain object files -src/ciphers/aes/aes.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c -src/ciphers/twofish/twofish.o: src/ciphers/twofish/twofish.c src/ciphers/twofish/twofish_tab.c -src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c -src/hashes/sha2/sha384.o: src/hashes/sha2/sha384.c src/hashes/sha2/sha512.c -src/hashes/sha2/sha512.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c -src/hashes/sha2/sha512_224.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha512_224.c -src/hashes/sha2/sha512_256.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha512_256.c -src/hashes/whirl/whirl.o: src/hashes/whirl/whirl.c src/hashes/whirl/whirltab.c - -#Dependencies on *.h -$(OBJECTS): $(HEADERS) -$(TOBJECTS): $(HEADERS) tests/tomcrypt_test.h - -.c.o: - $(CC) $(LTC_CFLAGS) -c $< -o $@ - -#Create libtomcrypt.a -$(LIBMAIN_S): $(OBJECTS) - $(AR) $(ARFLAGS) $@ $(OBJECTS) - $(RANLIB) $@ - -#Create DLL + import library libtomcrypt.dll.a -$(LIBMAIN_D) $(LIBMAIN_I): $(OBJECTS) - $(CC) -s -shared -o $(LIBMAIN_D) $^ -Wl,--enable-auto-import,--export-all -Wl,--out-implib=$(LIBMAIN_I) $(LTC_LDFLAGS) - $(STRIP) -S $(LIBMAIN_D) - -#Demo tools/utilities -hashsum.exe: demos/hashsum.o $(LIBMAIN_S) - $(CC) demos/hashsum.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -crypt.exe: demos/crypt.o $(LIBMAIN_S) - $(CC) demos/crypt.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -small.exe: demos/small.o $(LIBMAIN_S) - $(CC) demos/small.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -tv_gen.exe: demos/tv_gen.o $(LIBMAIN_S) - $(CC) demos/tv_gen.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -sizes.exe: demos/sizes.o $(LIBMAIN_S) - $(CC) demos/sizes.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -constants.exe: demos/constants.o $(LIBMAIN_S) - $(CC) demos/constants.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -timing.exe: demos/timing.o $(LIBMAIN_S) - $(CC) demos/timing.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -der_print_flexi.exe: demos/der_print_flexi.o $(LIBMAIN_S) - $(CC) demos/der_print_flexi.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ - -#Tests -test.exe: $(TOBJECTS) $(LIBMAIN_S) - $(CC) $(TOBJECTS) $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ - @echo NOTICE: start the tests by launching test.exe - -all: $(LIBMAIN_S) $(LIBMAIN_I) $(LIBMAIN_D) hashsum.exe crypt.exe small.exe tv_gen.exe sizes.exe constants.exe timing.exe test.exe - -test: test.exe - -clean: - @-cmd /c del /Q *_tv.txt 2>nul - @-cmd /c del /Q /S *.o *.a *.exe *.dll 2>nul - -#Install the library + headers -install: $(LIBMAIN_S) $(LIBMAIN_I) $(LIBMAIN_D) - cmd /c if not exist "$(PREFIX)\bin" mkdir "$(PREFIX)\bin" - cmd /c if not exist "$(PREFIX)\lib" mkdir "$(PREFIX)\lib" - cmd /c if not exist "$(PREFIX)\include" mkdir "$(PREFIX)\include" - copy /Y $(LIBMAIN_S) "$(PREFIX)\lib" - copy /Y $(LIBMAIN_I) "$(PREFIX)\lib" - copy /Y $(LIBMAIN_D) "$(PREFIX)\bin" - copy /Y src\headers\tomcrypt*.h "$(PREFIX)\include" - -#Install useful tools -install_bins: hashsum.exe - cmd /c if not exist "$(PREFIX)\bin" mkdir "$(PREFIX)\bin" - copy /Y hashsum.exe "$(PREFIX)\bin\ltc-hashsum.exe" - -#Install documentation -install_docs: doc/crypt.pdf - cmd /c if not exist "$(PREFIX)\doc" mkdir "$(PREFIX)\doc" - copy /Y doc\crypt.pdf "$(PREFIX)\doc" diff --git a/makefile.msvc b/makefile.msvc index c1bff4e9..6fd60efa 100644 --- a/makefile.msvc +++ b/makefile.msvc @@ -1,340 +1,89 @@ -# MAKEFILE for MS Windows (nmake + Windows SDK) +#MSVC Makefile [tested with MSVC 6.00 with SP5] # -# BEWARE: variables OBJECTS, TOBJECTS, HEADERS, VERSION are updated via ./updatemakes.sh +#Tom St Denis +CFLAGS = /I. /Ox /DWIN32 /W3 -### USAGE: -# Open a command prompt with WinSDK variables set and start: -# -# nmake -f makefile.msvc all -# test.exe -# nmake -f makefile.msvc PREFIX=c:\devel\libtom install -# -#Or: -# -# nmake -f makefile.msvc CFLAGS="/DUSE_LTM /DLTM_DESC /Ic:\path\to\libtommath" EXTRALIBS=c:\path\to\libtommath\tommath.lib all -# +default: library -#The following can be overridden from command line e.g. make -f makefile.msvc CC=gcc ARFLAGS=rcs -PREFIX = c:\devel -CFLAGS = /Ox /DUSE_LTM /DLTM_DESC /I../libtommath -EXTRALIBS = ../libtommath/tommath.lib +# leave this blank and link against libtommath if you want better link resolution +MPIOBJECT=mpi.obj -#Compilation flags -LTC_CFLAGS = /nologo /Isrc/headers/ /Itests/ /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_DEPRECATE /W3 $(CFLAGS) -LTC_LDFLAGS = advapi32.lib $(EXTRALIBS) -VERSION=1.18.2-develop +OBJECTS=error_to_string.obj mpi_to_ltc_error.obj base64_encode.obj base64_decode.obj \ +\ +crypt.obj crypt_find_cipher.obj crypt_find_hash_any.obj \ +crypt_hash_is_valid.obj crypt_register_hash.obj crypt_unregister_prng.obj \ +crypt_argchk.obj crypt_find_cipher_any.obj crypt_find_hash_id.obj \ +crypt_prng_descriptor.obj crypt_register_prng.obj crypt_cipher_descriptor.obj \ +crypt_find_cipher_id.obj crypt_find_prng.obj crypt_prng_is_valid.obj \ +crypt_unregister_cipher.obj crypt_cipher_is_valid.obj crypt_find_hash.obj \ +crypt_hash_descriptor.obj crypt_register_cipher.obj crypt_unregister_hash.obj \ +\ +sprng.obj fortuna.obj yarrow.obj rc4.obj rng_get_bytes.obj rng_make_prng.obj \ +\ +rand_prime.obj is_prime.obj \ +\ +ecc.obj dh.obj \ +\ +rsa_decrypt_key.obj rsa_encrypt_key.obj rsa_exptmod.obj rsa_free.obj rsa_make_key.obj \ +rsa_sign_hash.obj rsa_verify_hash.obj rsa_export.obj rsa_import.obj tim_exptmod.obj \ +rsa_v15_encrypt_key.obj rsa_v15_decrypt_key.obj rsa_v15_sign_hash.obj rsa_v15_verify_hash.obj \ +\ +dsa_export.obj dsa_free.obj dsa_import.obj dsa_make_key.obj dsa_sign_hash.obj \ +dsa_verify_hash.obj dsa_verify_key.obj \ +\ +aes.obj aes_enc.obj \ +\ +blowfish.obj des.obj safer_tab.obj safer.obj saferp.obj rc2.obj xtea.obj \ +rc6.obj rc5.obj cast5.obj noekeon.obj twofish.obj skipjack.obj \ +\ +md2.obj md4.obj md5.obj sha1.obj sha256.obj sha512.obj tiger.obj whirl.obj \ +rmd128.obj rmd160.obj \ +\ +packet_store_header.obj packet_valid_header.obj \ +\ +eax_addheader.obj eax_decrypt.obj eax_decrypt_verify_memory.obj eax_done.obj eax_encrypt.obj \ +eax_encrypt_authenticate_memory.obj eax_init.obj eax_test.obj \ +\ +ocb_decrypt.obj ocb_decrypt_verify_memory.obj ocb_done_decrypt.obj ocb_done_encrypt.obj \ +ocb_encrypt.obj ocb_encrypt_authenticate_memory.obj ocb_init.obj ocb_ntz.obj \ +ocb_shift_xor.obj ocb_test.obj s_ocb_done.obj \ +\ +omac_done.obj omac_file.obj omac_init.obj omac_memory.obj omac_process.obj omac_test.obj \ +\ +pmac_done.obj pmac_file.obj pmac_init.obj pmac_memory.obj pmac_ntz.obj pmac_process.obj \ +pmac_shift_xor.obj pmac_test.obj \ +\ +cbc_start.obj cbc_encrypt.obj cbc_decrypt.obj cbc_getiv.obj cbc_setiv.obj \ +cfb_start.obj cfb_encrypt.obj cfb_decrypt.obj cfb_getiv.obj cfb_setiv.obj \ +ofb_start.obj ofb_encrypt.obj ofb_decrypt.obj ofb_getiv.obj ofb_setiv.obj \ +ctr_start.obj ctr_encrypt.obj ctr_decrypt.obj ctr_getiv.obj ctr_setiv.obj \ +ecb_start.obj ecb_encrypt.obj ecb_decrypt.obj \ +\ +hash_file.obj hash_filehandle.obj hash_memory.obj \ +\ +hmac_done.obj hmac_file.obj hmac_init.obj hmac_memory.obj hmac_process.obj hmac_test.obj \ +\ +pkcs_1_mgf1.obj pkcs_1_oaep_encode.obj pkcs_1_oaep_decode.obj \ +pkcs_1_pss_encode.obj pkcs_1_pss_decode.obj pkcs_1_i2osp.obj pkcs_1_os2ip.obj \ +pkcs_1_v15_es_encode.obj pkcs_1_v15_es_decode.obj pkcs_1_v15_sa_encode.obj pkcs_1_v15_sa_decode.obj \ +\ +pkcs_5_1.obj pkcs_5_2.obj \ +\ +burn_stack.obj zeromem.obj \ +$(MPIOBJECT) -#Libraries to be created (this makefile builds only static libraries) -LIBMAIN_S =tomcrypt.lib +#ciphers come in two flavours... enc+dec and enc +aes_enc.obj: aes.c aes_tab.c + $(CC) $(CFLAGS) /DENCRYPT_ONLY /c aes.c /Foaes_enc.obj -#List of objects to compile (all goes to tomcrypt.lib) -OBJECTS=src/ciphers/aes/aes.obj src/ciphers/aes/aes_desc.obj src/ciphers/aes/aes_enc.obj \ -src/ciphers/aes/aes_enc_desc.obj src/ciphers/aes/aesni.obj src/ciphers/anubis.obj src/ciphers/aria.obj \ -src/ciphers/blowfish.obj src/ciphers/camellia.obj src/ciphers/cast5.obj src/ciphers/des.obj src/ciphers/idea.obj \ -src/ciphers/kasumi.obj src/ciphers/khazad.obj src/ciphers/kseed.obj src/ciphers/multi2.obj src/ciphers/noekeon.obj \ -src/ciphers/rc2.obj src/ciphers/rc5.obj src/ciphers/rc6.obj src/ciphers/safer/safer.obj \ -src/ciphers/safer/saferp.obj src/ciphers/serpent.obj src/ciphers/skipjack.obj src/ciphers/sm4.obj \ -src/ciphers/tea.obj src/ciphers/twofish/twofish.obj src/ciphers/xtea.obj src/encauth/ccm/ccm_add_aad.obj \ -src/encauth/ccm/ccm_add_nonce.obj src/encauth/ccm/ccm_done.obj src/encauth/ccm/ccm_init.obj \ -src/encauth/ccm/ccm_memory.obj src/encauth/ccm/ccm_process.obj src/encauth/ccm/ccm_reset.obj \ -src/encauth/ccm/ccm_test.obj src/encauth/chachapoly/chacha20poly1305_add_aad.obj \ -src/encauth/chachapoly/chacha20poly1305_decrypt.obj src/encauth/chachapoly/chacha20poly1305_done.obj \ -src/encauth/chachapoly/chacha20poly1305_encrypt.obj src/encauth/chachapoly/chacha20poly1305_init.obj \ -src/encauth/chachapoly/chacha20poly1305_memory.obj src/encauth/chachapoly/chacha20poly1305_setiv.obj \ -src/encauth/chachapoly/chacha20poly1305_setiv_rfc7905.obj \ -src/encauth/chachapoly/chacha20poly1305_test.obj src/encauth/eax/eax_addheader.obj \ -src/encauth/eax/eax_decrypt.obj src/encauth/eax/eax_decrypt_verify_memory.obj src/encauth/eax/eax_done.obj \ -src/encauth/eax/eax_encrypt.obj src/encauth/eax/eax_encrypt_authenticate_memory.obj \ -src/encauth/eax/eax_init.obj src/encauth/eax/eax_test.obj src/encauth/gcm/gcm_add_aad.obj \ -src/encauth/gcm/gcm_add_iv.obj src/encauth/gcm/gcm_done.obj src/encauth/gcm/gcm_gf_mult.obj \ -src/encauth/gcm/gcm_init.obj src/encauth/gcm/gcm_memory.obj src/encauth/gcm/gcm_mult_h.obj \ -src/encauth/gcm/gcm_process.obj src/encauth/gcm/gcm_reset.obj src/encauth/gcm/gcm_test.obj \ -src/encauth/gcm_siv/gcm_siv.obj src/encauth/gcm_siv/gcm_siv_test.obj src/encauth/ocb3/ocb3_add_aad.obj \ -src/encauth/ocb3/ocb3_decrypt.obj src/encauth/ocb3/ocb3_decrypt_last.obj \ -src/encauth/ocb3/ocb3_decrypt_verify_memory.obj src/encauth/ocb3/ocb3_done.obj \ -src/encauth/ocb3/ocb3_encrypt.obj src/encauth/ocb3/ocb3_encrypt_authenticate_memory.obj \ -src/encauth/ocb3/ocb3_encrypt_last.obj src/encauth/ocb3/ocb3_init.obj src/encauth/ocb3/ocb3_int_ntz.obj \ -src/encauth/ocb3/ocb3_int_xor_blocks.obj src/encauth/ocb3/ocb3_test.obj src/encauth/siv/siv.obj \ -src/hashes/blake2b.obj src/hashes/blake2s.obj src/hashes/blake3.obj src/hashes/chc/chc.obj \ -src/hashes/helper/hash_file.obj src/hashes/helper/hash_filehandle.obj src/hashes/helper/hash_memory.obj \ -src/hashes/helper/hash_memory_multi.obj src/hashes/md2.obj src/hashes/md4.obj src/hashes/md5.obj \ -src/hashes/rmd128.obj src/hashes/rmd160.obj src/hashes/rmd256.obj src/hashes/rmd320.obj src/hashes/sha1.obj \ -src/hashes/sha1_desc.obj src/hashes/sha1_x86.obj src/hashes/sha2/sha224.obj src/hashes/sha2/sha224_desc.obj \ -src/hashes/sha2/sha224_x86.obj src/hashes/sha2/sha256.obj src/hashes/sha2/sha256_desc.obj \ -src/hashes/sha2/sha256_x86.obj src/hashes/sha2/sha384.obj src/hashes/sha2/sha384_desc.obj \ -src/hashes/sha2/sha384_x86.obj src/hashes/sha2/sha512.obj src/hashes/sha2/sha512_224.obj \ -src/hashes/sha2/sha512_224_desc.obj src/hashes/sha2/sha512_224_x86.obj src/hashes/sha2/sha512_256.obj \ -src/hashes/sha2/sha512_256_desc.obj src/hashes/sha2/sha512_256_x86.obj src/hashes/sha2/sha512_desc.obj \ -src/hashes/sha2/sha512_x86.obj src/hashes/sha3.obj src/hashes/sha3_test.obj src/hashes/sm3.obj \ -src/hashes/tiger.obj src/hashes/whirl/whirl.obj src/mac/blake2/blake2bmac.obj \ -src/mac/blake2/blake2bmac_file.obj src/mac/blake2/blake2bmac_memory.obj \ -src/mac/blake2/blake2bmac_memory_multi.obj src/mac/blake2/blake2bmac_test.obj src/mac/blake2/blake2smac.obj \ -src/mac/blake2/blake2smac_file.obj src/mac/blake2/blake2smac_memory.obj \ -src/mac/blake2/blake2smac_memory_multi.obj src/mac/blake2/blake2smac_test.obj src/mac/f9/f9_done.obj \ -src/mac/f9/f9_file.obj src/mac/f9/f9_init.obj src/mac/f9/f9_memory.obj src/mac/f9/f9_memory_multi.obj \ -src/mac/f9/f9_process.obj src/mac/f9/f9_test.obj src/mac/hmac/hmac_done.obj src/mac/hmac/hmac_file.obj \ -src/mac/hmac/hmac_init.obj src/mac/hmac/hmac_memory.obj src/mac/hmac/hmac_memory_multi.obj \ -src/mac/hmac/hmac_process.obj src/mac/hmac/hmac_test.obj src/mac/kmac/kmac.obj src/mac/kmac/kmac_file.obj \ -src/mac/kmac/kmac_memory.obj src/mac/kmac/kmac_memory_multi.obj src/mac/kmac/kmac_test.obj \ -src/mac/omac/omac_done.obj src/mac/omac/omac_file.obj src/mac/omac/omac_init.obj src/mac/omac/omac_memory.obj \ -src/mac/omac/omac_memory_multi.obj src/mac/omac/omac_process.obj src/mac/omac/omac_test.obj \ -src/mac/pelican/pelican.obj src/mac/pelican/pelican_memory.obj src/mac/pelican/pelican_test.obj \ -src/mac/pmac/pmac_done.obj src/mac/pmac/pmac_file.obj src/mac/pmac/pmac_init.obj src/mac/pmac/pmac_memory.obj \ -src/mac/pmac/pmac_memory_multi.obj src/mac/pmac/pmac_ntz.obj src/mac/pmac/pmac_process.obj \ -src/mac/pmac/pmac_shift_xor.obj src/mac/pmac/pmac_test.obj src/mac/poly1305/poly1305.obj \ -src/mac/poly1305/poly1305_file.obj src/mac/poly1305/poly1305_memory.obj \ -src/mac/poly1305/poly1305_memory_multi.obj src/mac/poly1305/poly1305_test.obj src/mac/xcbc/xcbc_done.obj \ -src/mac/xcbc/xcbc_file.obj src/mac/xcbc/xcbc_init.obj src/mac/xcbc/xcbc_memory.obj \ -src/mac/xcbc/xcbc_memory_multi.obj src/mac/xcbc/xcbc_process.obj src/mac/xcbc/xcbc_test.obj \ -src/math/fp/ltc_ecc_fp_mulmod.obj src/math/gmp_desc.obj src/math/ltm_desc.obj src/math/multi.obj \ -src/math/radix_to_bin.obj src/math/rand_bn.obj src/math/rand_prime.obj src/math/tfm_desc.obj src/misc/adler32.obj \ -src/misc/algname_match.obj src/misc/argon2/argon2.obj src/misc/base16/base16_decode.obj \ -src/misc/base16/base16_encode.obj src/misc/base32/base32_decode.obj src/misc/base32/base32_encode.obj \ -src/misc/base64/base64_decode.obj src/misc/base64/base64_encode.obj src/misc/bcrypt/bcrypt.obj \ -src/misc/burn_stack.obj src/misc/compare_testvector.obj src/misc/copy_or_zeromem.obj src/misc/crc32.obj \ -src/misc/crypt/crypt.obj src/misc/crypt/crypt_argchk.obj src/misc/crypt/crypt_cipher_descriptor.obj \ -src/misc/crypt/crypt_cipher_is_valid.obj src/misc/crypt/crypt_constants.obj \ -src/misc/crypt/crypt_find_cipher.obj src/misc/crypt/crypt_find_cipher_any.obj \ -src/misc/crypt/crypt_find_cipher_id.obj src/misc/crypt/crypt_find_hash.obj \ -src/misc/crypt/crypt_find_hash_any.obj src/misc/crypt/crypt_find_hash_id.obj \ -src/misc/crypt/crypt_find_hash_oid.obj src/misc/crypt/crypt_find_prng.obj src/misc/crypt/crypt_fsa.obj \ -src/misc/crypt/crypt_hash_descriptor.obj src/misc/crypt/crypt_hash_is_valid.obj \ -src/misc/crypt/crypt_inits.obj src/misc/crypt/crypt_ltc_mp_descriptor.obj \ -src/misc/crypt/crypt_prng_descriptor.obj src/misc/crypt/crypt_prng_is_valid.obj \ -src/misc/crypt/crypt_prng_rng_descriptor.obj src/misc/crypt/crypt_register_all_ciphers.obj \ -src/misc/crypt/crypt_register_all_hashes.obj src/misc/crypt/crypt_register_all_prngs.obj \ -src/misc/crypt/crypt_register_cipher.obj src/misc/crypt/crypt_register_hash.obj \ -src/misc/crypt/crypt_register_prng.obj src/misc/crypt/crypt_sizes.obj \ -src/misc/crypt/crypt_unregister_cipher.obj src/misc/crypt/crypt_unregister_hash.obj \ -src/misc/crypt/crypt_unregister_prng.obj src/misc/deprecated.obj src/misc/error_to_string.obj \ -src/misc/hkdf/hkdf.obj src/misc/hkdf/hkdf_test.obj src/misc/mem_neq.obj src/misc/padding/padding_depad.obj \ -src/misc/padding/padding_pad.obj src/misc/password_free.obj src/misc/pbes/pbes.obj src/misc/pbes/pbes1.obj \ -src/misc/pbes/pbes2.obj src/misc/pem/pem.obj src/misc/pem/pem_pkcs.obj src/misc/pem/pem_read.obj \ -src/misc/pem/pem_ssh.obj src/misc/pkcs12/pkcs12_kdf.obj src/misc/pkcs12/pkcs12_utf8_to_utf16.obj \ -src/misc/pkcs5/pkcs_5_1.obj src/misc/pkcs5/pkcs_5_2.obj src/misc/pkcs5/pkcs_5_test.obj \ -src/misc/scrypt/scrypt.obj src/misc/ssh/ssh_decode_sequence_multi.obj \ -src/misc/ssh/ssh_encode_sequence_multi.obj src/misc/zeromem.obj src/modes/cbc/cbc_decrypt.obj \ -src/modes/cbc/cbc_done.obj src/modes/cbc/cbc_encrypt.obj src/modes/cbc/cbc_getiv.obj \ -src/modes/cbc/cbc_setiv.obj src/modes/cbc/cbc_start.obj src/modes/cfb/cfb_decrypt.obj \ -src/modes/cfb/cfb_done.obj src/modes/cfb/cfb_encrypt.obj src/modes/cfb/cfb_getiv.obj \ -src/modes/cfb/cfb_setiv.obj src/modes/cfb/cfb_start.obj src/modes/ctr/ctr_decrypt.obj \ -src/modes/ctr/ctr_done.obj src/modes/ctr/ctr_encrypt.obj src/modes/ctr/ctr_getiv.obj \ -src/modes/ctr/ctr_setiv.obj src/modes/ctr/ctr_start.obj src/modes/ctr/ctr_test.obj \ -src/modes/ecb/ecb_decrypt.obj src/modes/ecb/ecb_done.obj src/modes/ecb/ecb_encrypt.obj \ -src/modes/ecb/ecb_start.obj src/modes/f8/f8_decrypt.obj src/modes/f8/f8_done.obj src/modes/f8/f8_encrypt.obj \ -src/modes/f8/f8_getiv.obj src/modes/f8/f8_setiv.obj src/modes/f8/f8_start.obj src/modes/f8/f8_test_mode.obj \ -src/modes/lrw/lrw_decrypt.obj src/modes/lrw/lrw_done.obj src/modes/lrw/lrw_encrypt.obj \ -src/modes/lrw/lrw_getiv.obj src/modes/lrw/lrw_process.obj src/modes/lrw/lrw_setiv.obj \ -src/modes/lrw/lrw_start.obj src/modes/lrw/lrw_test.obj src/modes/ofb/ofb_decrypt.obj src/modes/ofb/ofb_done.obj \ -src/modes/ofb/ofb_encrypt.obj src/modes/ofb/ofb_getiv.obj src/modes/ofb/ofb_setiv.obj \ -src/modes/ofb/ofb_start.obj src/modes/xts/xts_decrypt.obj src/modes/xts/xts_done.obj \ -src/modes/xts/xts_encrypt.obj src/modes/xts/xts_init.obj src/modes/xts/xts_mult_x.obj \ -src/modes/xts/xts_test.obj src/pk/asn1/der/bit/der_decode_bit_string.obj \ -src/pk/asn1/der/bit/der_decode_raw_bit_string.obj src/pk/asn1/der/bit/der_encode_bit_string.obj \ -src/pk/asn1/der/bit/der_encode_raw_bit_string.obj src/pk/asn1/der/bit/der_length_bit_string.obj \ -src/pk/asn1/der/boolean/der_decode_boolean.obj src/pk/asn1/der/boolean/der_encode_boolean.obj \ -src/pk/asn1/der/boolean/der_length_boolean.obj src/pk/asn1/der/choice/der_decode_choice.obj \ -src/pk/asn1/der/custom_type/der_decode_custom_type.obj \ -src/pk/asn1/der/custom_type/der_encode_custom_type.obj \ -src/pk/asn1/der/custom_type/der_length_custom_type.obj src/pk/asn1/der/general/der_asn1_maps.obj \ -src/pk/asn1/der/general/der_decode_asn1_identifier.obj src/pk/asn1/der/general/der_decode_asn1_length.obj \ -src/pk/asn1/der/general/der_encode_asn1_identifier.obj src/pk/asn1/der/general/der_encode_asn1_length.obj \ -src/pk/asn1/der/general/der_length_asn1_identifier.obj src/pk/asn1/der/general/der_length_asn1_length.obj \ -src/pk/asn1/der/generalizedtime/der_decode_generalizedtime.obj \ -src/pk/asn1/der/generalizedtime/der_encode_generalizedtime.obj \ -src/pk/asn1/der/generalizedtime/der_length_generalizedtime.obj \ -src/pk/asn1/der/ia5/der_decode_ia5_string.obj src/pk/asn1/der/ia5/der_encode_ia5_string.obj \ -src/pk/asn1/der/ia5/der_length_ia5_string.obj src/pk/asn1/der/integer/der_decode_integer.obj \ -src/pk/asn1/der/integer/der_encode_integer.obj src/pk/asn1/der/integer/der_length_integer.obj \ -src/pk/asn1/der/object_identifier/der_decode_object_identifier.obj \ -src/pk/asn1/der/object_identifier/der_encode_object_identifier.obj \ -src/pk/asn1/der/object_identifier/der_length_object_identifier.obj \ -src/pk/asn1/der/octet/der_decode_octet_string.obj src/pk/asn1/der/octet/der_encode_octet_string.obj \ -src/pk/asn1/der/octet/der_length_octet_string.obj \ -src/pk/asn1/der/printable_string/der_decode_printable_string.obj \ -src/pk/asn1/der/printable_string/der_encode_printable_string.obj \ -src/pk/asn1/der/printable_string/der_length_printable_string.obj \ -src/pk/asn1/der/sequence/der_decode_sequence_ex.obj \ -src/pk/asn1/der/sequence/der_decode_sequence_flexi.obj \ -src/pk/asn1/der/sequence/der_decode_sequence_multi.obj \ -src/pk/asn1/der/sequence/der_encode_sequence_ex.obj \ -src/pk/asn1/der/sequence/der_encode_sequence_multi.obj \ -src/pk/asn1/der/sequence/der_flexi_sequence_cmp.obj src/pk/asn1/der/sequence/der_length_sequence.obj \ -src/pk/asn1/der/sequence/der_sequence_free.obj src/pk/asn1/der/sequence/der_sequence_shrink.obj \ -src/pk/asn1/der/set/der_encode_set.obj src/pk/asn1/der/set/der_encode_setof.obj \ -src/pk/asn1/der/short_integer/der_decode_short_integer.obj \ -src/pk/asn1/der/short_integer/der_encode_short_integer.obj \ -src/pk/asn1/der/short_integer/der_length_short_integer.obj \ -src/pk/asn1/der/teletex_string/der_decode_teletex_string.obj \ -src/pk/asn1/der/teletex_string/der_length_teletex_string.obj \ -src/pk/asn1/der/utctime/der_decode_utctime.obj src/pk/asn1/der/utctime/der_encode_utctime.obj \ -src/pk/asn1/der/utctime/der_length_utctime.obj src/pk/asn1/der/utf8/der_decode_utf8_string.obj \ -src/pk/asn1/der/utf8/der_encode_utf8_string.obj src/pk/asn1/der/utf8/der_length_utf8_string.obj \ -src/pk/asn1/oid/pk_get.obj src/pk/asn1/oid/pk_oid_cmp.obj src/pk/asn1/oid/pk_oid_str.obj \ -src/pk/asn1/pkcs8/pkcs8_decode_flexi.obj src/pk/asn1/pkcs8/pkcs8_get.obj \ -src/pk/asn1/x509/x509_decode_public_key_from_certificate.obj src/pk/asn1/x509/x509_decode_spki.obj \ -src/pk/asn1/x509/x509_decode_subject_public_key_info.obj \ -src/pk/asn1/x509/x509_encode_subject_public_key_info.obj src/pk/asn1/x509/x509_get_pka.obj \ -src/pk/asn1/x509/x509_import_spki.obj src/pk/dh/dh.obj src/pk/dh/dh_check_pubkey.obj src/pk/dh/dh_export.obj \ -src/pk/dh/dh_export_key.obj src/pk/dh/dh_free.obj src/pk/dh/dh_generate_key.obj src/pk/dh/dh_import.obj \ -src/pk/dh/dh_import_pkcs8.obj src/pk/dh/dh_set.obj src/pk/dh/dh_set_pg_dhparam.obj \ -src/pk/dh/dh_shared_secret.obj src/pk/dsa/dsa_decrypt_key.obj src/pk/dsa/dsa_encrypt_key.obj \ -src/pk/dsa/dsa_export.obj src/pk/dsa/dsa_free.obj src/pk/dsa/dsa_generate_key.obj \ -src/pk/dsa/dsa_generate_pqg.obj src/pk/dsa/dsa_import.obj src/pk/dsa/dsa_import_pkcs8.obj \ -src/pk/dsa/dsa_init.obj src/pk/dsa/dsa_make_key.obj src/pk/dsa/dsa_set.obj src/pk/dsa/dsa_set_pqg_dsaparam.obj \ -src/pk/dsa/dsa_shared_secret.obj src/pk/dsa/dsa_sign_hash.obj src/pk/dsa/dsa_verify_hash.obj \ -src/pk/dsa/dsa_verify_key.obj src/pk/ec25519/ec25519_crypto_ctx.obj src/pk/ec25519/ec25519_export.obj \ -src/pk/ec25519/ec25519_import_pkcs8.obj src/pk/ec25519/tweetnacl.obj src/pk/ec448/ec448_common.obj \ -src/pk/ec448/ec448_crypto_ctx.obj src/pk/ec448/ec448_export.obj src/pk/ec448/ec448_import_pkcs8.obj \ -src/pk/ecc/ecc.obj src/pk/ecc/ecc_ansi_x963_export.obj src/pk/ecc/ecc_ansi_x963_import.obj \ -src/pk/ecc/ecc_decrypt_key.obj src/pk/ecc/ecc_encrypt_key.obj src/pk/ecc/ecc_export.obj \ -src/pk/ecc/ecc_export_openssl.obj src/pk/ecc/ecc_find_curve.obj src/pk/ecc/ecc_free.obj \ -src/pk/ecc/ecc_get_key.obj src/pk/ecc/ecc_get_oid_str.obj src/pk/ecc/ecc_get_size.obj src/pk/ecc/ecc_import.obj \ -src/pk/ecc/ecc_import_openssl.obj src/pk/ecc/ecc_import_pkcs8.obj src/pk/ecc/ecc_import_x509.obj \ -src/pk/ecc/ecc_make_key.obj src/pk/ecc/ecc_recover_key.obj src/pk/ecc/ecc_rfc6979_key.obj \ -src/pk/ecc/ecc_set_curve.obj src/pk/ecc/ecc_set_curve_internal.obj src/pk/ecc/ecc_set_key.obj \ -src/pk/ecc/ecc_shared_secret.obj src/pk/ecc/ecc_sign_hash.obj src/pk/ecc/ecc_sign_hash_eth27.obj \ -src/pk/ecc/ecc_sign_hash_internal.obj src/pk/ecc/ecc_sign_hash_rfc5656.obj \ -src/pk/ecc/ecc_sign_hash_rfc7518.obj src/pk/ecc/ecc_sign_hash_x962.obj src/pk/ecc/ecc_sizes.obj \ -src/pk/ecc/ecc_ssh_ecdsa_encode_name.obj src/pk/ecc/ecc_verify_hash.obj src/pk/ecc/ecc_verify_hash_eth27.obj \ -src/pk/ecc/ecc_verify_hash_internal.obj src/pk/ecc/ecc_verify_hash_rfc5656.obj \ -src/pk/ecc/ecc_verify_hash_rfc7518.obj src/pk/ecc/ecc_verify_hash_x962.obj \ -src/pk/ecc/ltc_ecc_export_point.obj src/pk/ecc/ltc_ecc_import_point.obj src/pk/ecc/ltc_ecc_is_point.obj \ -src/pk/ecc/ltc_ecc_is_point_at_infinity.obj src/pk/ecc/ltc_ecc_map.obj src/pk/ecc/ltc_ecc_mul2add.obj \ -src/pk/ecc/ltc_ecc_mulmod.obj src/pk/ecc/ltc_ecc_mulmod_timing.obj src/pk/ecc/ltc_ecc_points.obj \ -src/pk/ecc/ltc_ecc_projective_add_point.obj src/pk/ecc/ltc_ecc_projective_dbl_point.obj \ -src/pk/ecc/ltc_ecc_verify_key.obj src/pk/ed25519/ed25519_export.obj src/pk/ed25519/ed25519_import.obj \ -src/pk/ed25519/ed25519_import_pkcs8.obj src/pk/ed25519/ed25519_import_raw.obj \ -src/pk/ed25519/ed25519_import_x509.obj src/pk/ed25519/ed25519_make_key.obj src/pk/ed25519/ed25519_sign.obj \ -src/pk/ed25519/ed25519_verify.obj src/pk/ed448/ed448_export.obj src/pk/ed448/ed448_import.obj \ -src/pk/ed448/ed448_import_pkcs8.obj src/pk/ed448/ed448_import_raw.obj src/pk/ed448/ed448_import_x509.obj \ -src/pk/ed448/ed448_make_key.obj src/pk/ed448/ed448_sign.obj src/pk/ed448/ed448_verify.obj src/pk/pka_key.obj \ -src/pk/pkcs1/pkcs_1_i2osp.obj src/pk/pkcs1/pkcs_1_mgf1.obj src/pk/pkcs1/pkcs_1_oaep_decode.obj \ -src/pk/pkcs1/pkcs_1_oaep_encode.obj src/pk/pkcs1/pkcs_1_os2ip.obj src/pk/pkcs1/pkcs_1_pss_decode.obj \ -src/pk/pkcs1/pkcs_1_pss_encode.obj src/pk/pkcs1/pkcs_1_v1_5_decode.obj src/pk/pkcs1/pkcs_1_v1_5_encode.obj \ -src/pk/rsa/rsa_decrypt_key.obj src/pk/rsa/rsa_encrypt_key.obj src/pk/rsa/rsa_export.obj \ -src/pk/rsa/rsa_exptmod.obj src/pk/rsa/rsa_get_size.obj src/pk/rsa/rsa_import.obj \ -src/pk/rsa/rsa_import_pkcs8.obj src/pk/rsa/rsa_import_x509.obj src/pk/rsa/rsa_key.obj \ -src/pk/rsa/rsa_make_key.obj src/pk/rsa/rsa_set.obj src/pk/rsa/rsa_sign_hash.obj \ -src/pk/rsa/rsa_sign_saltlen_get.obj src/pk/rsa/rsa_verify_hash.obj src/pk/x25519/x25519_export.obj \ -src/pk/x25519/x25519_import.obj src/pk/x25519/x25519_import_pkcs8.obj src/pk/x25519/x25519_import_raw.obj \ -src/pk/x25519/x25519_import_x509.obj src/pk/x25519/x25519_make_key.obj \ -src/pk/x25519/x25519_shared_secret.obj src/pk/x448/x448_export.obj src/pk/x448/x448_import.obj \ -src/pk/x448/x448_import_pkcs8.obj src/pk/x448/x448_import_raw.obj src/pk/x448/x448_import_x509.obj \ -src/pk/x448/x448_make_key.obj src/pk/x448/x448_shared_secret.obj src/prngs/chacha20.obj src/prngs/fortuna.obj \ -src/prngs/rc4.obj src/prngs/rng_get_bytes.obj src/prngs/rng_make_prng.obj src/prngs/sober128.obj \ -src/prngs/sprng.obj src/prngs/yarrow.obj src/stream/chacha/chacha_crypt.obj src/stream/chacha/chacha_done.obj \ -src/stream/chacha/chacha_ivctr32.obj src/stream/chacha/chacha_ivctr64.obj \ -src/stream/chacha/chacha_keystream.obj src/stream/chacha/chacha_memory.obj \ -src/stream/chacha/chacha_setup.obj src/stream/chacha/chacha_test.obj src/stream/chacha/xchacha20_memory.obj \ -src/stream/chacha/xchacha20_setup.obj src/stream/chacha/xchacha20_test.obj src/stream/rabbit/rabbit.obj \ -src/stream/rabbit/rabbit_memory.obj src/stream/rc4/rc4_stream.obj src/stream/rc4/rc4_stream_memory.obj \ -src/stream/rc4/rc4_test.obj src/stream/salsa20/salsa20_crypt.obj src/stream/salsa20/salsa20_done.obj \ -src/stream/salsa20/salsa20_ivctr64.obj src/stream/salsa20/salsa20_keystream.obj \ -src/stream/salsa20/salsa20_memory.obj src/stream/salsa20/salsa20_setup.obj \ -src/stream/salsa20/salsa20_test.obj src/stream/salsa20/xsalsa20_memory.obj \ -src/stream/salsa20/xsalsa20_setup.obj src/stream/salsa20/xsalsa20_test.obj \ -src/stream/sober128/sober128_stream.obj src/stream/sober128/sober128_stream_memory.obj \ -src/stream/sober128/sober128_test.obj src/stream/sosemanuk/sosemanuk.obj \ -src/stream/sosemanuk/sosemanuk_memory.obj src/stream/sosemanuk/sosemanuk_test.obj +library: $(OBJECTS) + lib /out:tomcrypt.lib $(OBJECTS) + +x86_prof: demos/x86_prof.c library + cl $(CFLAGS) demos/x86_prof.c tomcrypt.lib advapi32.lib -#List of test objects to compile -TOBJECTS=tests/argon2_test.obj tests/base16_test.obj tests/base32_test.obj tests/base64_test.obj \ -tests/bcrypt_test.obj tests/cipher_hash_test.obj tests/common.obj tests/deprecated_test.obj tests/der_test.obj \ -tests/dh_test.obj tests/dsa_test.obj tests/ecc_test.obj tests/ed25519_test.obj tests/ed448_test.obj \ -tests/file_test.obj tests/mac_test.obj tests/misc_test.obj tests/modes_test.obj tests/mpi_test.obj \ -tests/multi_test.obj tests/no_null_termination_check_test.obj tests/no_prng.obj tests/padding_test.obj \ -tests/pem_test.obj tests/pk_oid_test.obj tests/pkcs_1_eme_test.obj tests/pkcs_1_emsa_test.obj \ -tests/pkcs_1_oaep_test.obj tests/pkcs_1_pss_test.obj tests/pkcs_1_test.obj tests/prng_test.obj \ -tests/rotate_test.obj tests/rsa_test.obj tests/scrypt_test.obj tests/siv_wycheproof_test.obj tests/ssh_test.obj \ -tests/store_test.obj tests/test.obj tests/x25519_test.obj tests/x448_test.obj +tv_gen: demos/tv_gen.c library + cl $(CFLAGS) demos/tv_gen.c tomcrypt.lib advapi32.lib -#The following headers will be installed by "make install" -HEADERS_PUB=src/headers/tomcrypt.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cfg.h \ -src/headers/tomcrypt_cipher.h src/headers/tomcrypt_custom.h src/headers/tomcrypt_hash.h \ -src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h src/headers/tomcrypt_math.h \ -src/headers/tomcrypt_misc.h src/headers/tomcrypt_pk.h src/headers/tomcrypt_pkcs.h \ -src/headers/tomcrypt_prng.h - -HEADERS=$(HEADERS_PUB) src/headers/tomcrypt_private.h - -#The default rule for make builds the tomcrypt.lib library (static) -default: $(LIBMAIN_S) - -#SPECIAL: AES comes in two flavours - enc+dec and enc-only -src/ciphers/aes/aes_enc.obj: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c - $(CC) $(LTC_CFLAGS) /DENCRYPT_ONLY /c src/ciphers/aes/aes.c /Fosrc/ciphers/aes/aes_enc.obj -src/ciphers/aes/aes_enc_desc.obj: src/ciphers/aes/aes_desc.c - $(CC) $(LTC_CFLAGS) /DENCRYPT_ONLY /c src/ciphers/aes/aes_desc.c /Fosrc/ciphers/aes/aes_enc_desc.obj - -#SPECIAL: these are the rules to make certain object files -src/ciphers/aes/aes.obj: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c -src/ciphers/twofish/twofish.obj: src/ciphers/twofish/twofish.c src/ciphers/twofish/twofish_tab.c -src/hashes/sha2/sha256.obj: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c -src/hashes/sha2/sha384.obj: src/hashes/sha2/sha384.c src/hashes/sha2/sha512.c -src/hashes/sha2/sha512.obj: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c -src/hashes/sha2/sha512_224.obj: src/hashes/sha2/sha512.c src/hashes/sha2/sha512_224.c -src/hashes/sha2/sha512_256.obj: src/hashes/sha2/sha512.c src/hashes/sha2/sha512_256.c -src/hashes/whirl/whirl.obj: src/hashes/whirl/whirl.c src/hashes/whirl/whirltab.c - -#Dependencies on *.h -$(OBJECTS): $(HEADERS) -$(TOBJECTS): $(HEADERS) tests/tomcrypt_test.h - -.c.obj: - $(CC) $(LTC_CFLAGS) /c $< /Fo$@ - -#Create tomcrypt.lib -$(LIBMAIN_S): $(OBJECTS) - lib /out:$(LIBMAIN_S) $(OBJECTS) - -#Demo tools/utilities -hashsum.exe: demos/hashsum.c tests/common.c $(LIBMAIN_S) - $(CC) $(LTC_CFLAGS) demos/hashsum.c tests/common.c $(LIBMAIN_S) $(LTC_LDFLAGS) /Fe$@ -crypt.exe: demos/crypt.c $(LIBMAIN_S) - $(CC) $(LTC_CFLAGS) demos/crypt.c tests/common.c $(LIBMAIN_S) $(LTC_LDFLAGS) /Fe$@ -small.exe: demos/small.c $(LIBMAIN_S) - $(CC) $(LTC_CFLAGS) demos/small.c tests/common.c $(LIBMAIN_S) $(LTC_LDFLAGS) /Fe$@ -tv_gen.exe: demos/tv_gen.c $(LIBMAIN_S) - $(CC) $(LTC_CFLAGS) demos/tv_gen.c tests/common.c $(LIBMAIN_S) $(LTC_LDFLAGS) /Fe$@ -sizes.exe: demos/sizes.c $(LIBMAIN_S) - $(CC) $(LTC_CFLAGS) demos/sizes.c tests/common.c $(LIBMAIN_S) $(LTC_LDFLAGS) /Fe$@ -constants.exe: demos/constants.c $(LIBMAIN_S) - $(CC) $(LTC_CFLAGS) demos/constants.c tests/common.c $(LIBMAIN_S) $(LTC_LDFLAGS) /Fe$@ -timing.exe: demos/timing.c $(LIBMAIN_S) - $(CC) $(LTC_CFLAGS) demos/timing.c tests/common.c $(LIBMAIN_S) $(LTC_LDFLAGS) /Fe$@ -der_print_flexi.exe: demos/der_print_flexi.c $(LIBMAIN_S) - $(CC) $(LTC_CFLAGS) demos/der_print_flexi.c tests/common.c $(LIBMAIN_S) $(LTC_LDFLAGS) /Fe$@ - -#Tests -test.exe: $(LIBMAIN_S) $(TOBJECTS) - $(CC) $(LTC_CFLAGS) $(TOBJECTS) $(LIBMAIN_S) $(LTC_LDFLAGS) /Fe$@ - @echo NOTICE: start the tests by launching test.exe - -ALL_TEST=hashsum.exe crypt.exe small.exe tv_gen.exe sizes.exe constants.exe timing.exe test.exe - -all: $(LIBMAIN_S) $(ALL_TEST) - -test: test.exe - -clean: - @-cmd /c del /Q *_tv.txt 2>nul - @-cmd /c del /Q /S *.OBJ *.LIB $(ALL_TEST) *.DLL 2>nul - -#Install the library + headers -install: $(LIBMAIN_S) - cmd /c if not exist "$(PREFIX)\bin" mkdir "$(PREFIX)\bin" - cmd /c if not exist "$(PREFIX)\lib" mkdir "$(PREFIX)\lib" - cmd /c if not exist "$(PREFIX)\include" mkdir "$(PREFIX)\include" - copy /Y $(LIBMAIN_S) "$(PREFIX)\lib" - copy /Y src\headers\tomcrypt*.h "$(PREFIX)\include" - -#Install useful tools -install_bins: hashsum.exe - cmd /c if not exist "$(PREFIX)\bin" mkdir "$(PREFIX)\bin" - copy /Y hashsum.exe "$(PREFIX)\bin\ltc-hashsum.exe" - -#Install documentation -install_docs: doc/crypt.pdf - cmd /c if not exist "$(PREFIX)\doc" mkdir "$(PREFIX)\doc" - copy /Y doc\crypt.pdf "$(PREFIX)\doc" +hashsum: demos/hashsum.c library + cl $(CFLAGS) demos/hashsum.c tomcrypt.lib advapi32.lib diff --git a/makefile.shared b/makefile.shared deleted file mode 100644 index d40e7c5a..00000000 --- a/makefile.shared +++ /dev/null @@ -1,131 +0,0 @@ -# MAKEFILE for linux GCC -# -# This makefile produces a shared object. -# -# Thanks to Zed Shaw for helping debug this on BSD/OSX. -# Tom St Denis -# -# (GNU make only) - -### USAGE: -# -# CFLAGS="-DUSE_LTM -DLTM_DESC -I/path/to/libtommath" make -f makefile.shared all EXTRALIBS=/path/to/libtommath/libtommath.a -# ./test -# make -f makefile.shared PREFIX=/opt/libtom install -# - -PLATFORM := $(shell uname | sed -e 's/_.*//') -### Observed uname outputs: -# MINGW32_NT-6.2 (on MSYS/MINGW old) -# MINGW64_NT-10.0-14393 (on MSYS new) -# MSYS_NT-10.0-19042 (on MSYS2) -# CYGWIN_NT-10.0 (on Cygwin 64bit) -# CYGWIN_NT-6.2-WOW64 (on Cygwin 32bit) -# Linux (on all Linux distros) -# Darwin (on macOS, OS X) - -INSTALL_CMD := install -UNINSTALL_CMD := rm -f - -NAME := libtomcrypt -PIC := -fPIC -SHARED := $(PIC) - -ifeq ($(UNAME), Darwin) - NO_UNDEFINED := -Wl,-undefined,error - SHARED += -dynamiclib -else - NO_UNDEFIED := -Wl,--no-undefined - SHARED += -shared -endif - -ifeq ($(PLATFORM), Darwin) - TARGET := $(NAME).dylib -else ifeq ($(OS), Windows_NT) - TARGET := $(NAME).dll -else - TARGET := $(NAME).so -endif - -#Output filenames for various targets. -ifndef LIBNAME - LIBNAME = $(TARGET).$(VERSION_LT) -endif - -include makefile_include.mk - -ifneq ($(findstring -DLTM_DESC,$(LTC_CFLAGS)),) -LTC_PKG_CONFIG_CFLAGS += -DLTM_DESC -LTC_PKG_CONFIG_LIBS += -ltommath -endif -ifneq ($(findstring -DTFM_DESC,$(LTC_CFLAGS)),) -LTC_PKG_CONFIG_CFLAGS += -DTFM_DESC -LTC_PKG_CONFIG_LIBS += -ltfm -endif -ifneq ($(findstring -DGMP_DESC,$(LTC_CFLAGS)),) -LTC_PKG_CONFIG_CFLAGS += -DGMP_DESC -LTC_PKG_CONFIG_LIBS += -lgmp -endif -ifneq ($(findstring -DLTC_PTHREAD,$(LTC_CFLAGS)),) -LTC_PKG_CONFIG_CFLAGS += -DLTC_PTHREAD -endif - -# set PKG_CONFIG_CFLAGS and PKG_CONFIG_LIBS to what your environment requires -LTC_PKG_CONFIG_CFLAGS += $(PKG_CONFIG_CFLAGS) -LTC_PKG_CONFIG_LIBS += $(PKG_CONFIG_LIBS) - -.PHONY: check install install_bins uninstall - -.bin/.tag: bin.in - mkdir -p .bin - touch $@ - -#ciphers come in two flavours... enc+dec and enc -src/ciphers/aes/aes_enc.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c - $(CC) $(LTC_CFLAGS) $(PIC) $(CPPFLAGS) -DENCRYPT_ONLY -c src/ciphers/aes/aes.c -o src/ciphers/aes/aes_enc.o -src/ciphers/aes/aes_enc_desc.o: src/ciphers/aes/aes_desc.c - $(CC) $(LTC_CFLAGS) $(PIC) $(CPPFLAGS) -DENCRYPT_ONLY -c src/ciphers/aes/aes_desc.c -o src/ciphers/aes/aes_enc_desc.o - -.c.o: - $(CC) $(LTC_CFLAGS) $(PIC) $(CPPFLAGS) -o $@ -c $< - -$(LIBNAME): $(OBJECTS) - $(CC) $(LTC_LDFLAGS) $(OBJECTS) $(EXTRALIBS) $(SHARED) -Wl,-soname,$(TARGET).$(VERSION_MAJOR) $(NO_UNDEFINED) -o $@ - -$(TARGET).$(VERSION_MAJOR) $(TARGET): $(LIBNAME) - ln -sf $< $@ - -.bin/$(TEST): $(TARGET).$(VERSION_MAJOR) $(TARGET) $(TOBJECTS) .bin/.tag - $(CC) $(LTC_LDFLAGS) $(TOBJECTS) -L. -ltomcrypt $(EXTRALIBS) $(NO_UNDEFINED) -o $@ - -test: $(call print-help,test,Builds the library and the 'test' application to run all self-tests) .bin/$(TEST) - $(INSTALL_CMD) -m 755 bin.in $@ - -# build the demos from a template -define DEMO_template -.bin/$(1): demos/$(1).o $$(TARGET).$$(VERSION_MAJOR) $$(TARGET) .bin/.tag - $$(CC) $$(LTC_LDFLAGS) $$< -L. -ltomcrypt $$(EXTRALIBS) $(NO_UNDEFINED) -o $$@ - -$(1): $(call print-help,$(1),Builds the library and the '$(1)' demo) .bin/$(1) - $$(INSTALL_CMD) -m 755 bin.in $(1) -endef - -$(foreach demo, $(strip $(DEMOS)), $(eval $(call DEMO_template,$(demo)))) - -install: $(call print-help,install,Installs the library + headers + pkg-config file) .common_install - ln -sf $(LIBNAME) $(DESTDIR)/$(LIBPATH)/$(TARGET).$(VERSION_MAJOR) - ln -sf $(LIBNAME) $(DESTDIR)/$(LIBPATH)/$(TARGET) - sed -e 's,^prefix=.*,prefix=$(PREFIX),' -e 's,^Version:.*,Version: $(VERSION_PC),' -e 's,^libdir=.*,libdir=$(LIBPATH),' \ - -e 's,^includedir=.*,includedir=$(INCPATH),' \ - -e 's,@PKG_CONFIG_LIBS@,$(LTC_PKG_CONFIG_LIBS),' \ - -e 's,@PKG_CONFIG_CFLAGS@,$(LTC_PKG_CONFIG_CFLAGS),' libtomcrypt.pc.in > libtomcrypt.pc - $(INSTALL_CMD) -p -d $(DESTDIR)$(LIBPATH)/pkgconfig - $(INSTALL_CMD) -p -m 644 libtomcrypt.pc $(DESTDIR)$(LIBPATH)/pkgconfig/ - -install_bins: $(call print-help,install_bins,Installs the useful demos ($(USEFUL_DEMOS))) $(USEFUL_DEMOS) $(DESTDIR)$(BINPATH) - $(INSTALL_CMD) -p -m 775 $(foreach demo, $(strip $(USEFUL_DEMOS)),.bin/$(demo)) $(DESTDIR)$(BINPATH) - -uninstall: $(call print-help,uninstall,Uninstalls the library + headers + pkg-config file) .common_uninstall - $(UNINSTALL_CMD) $(DESTDIR)/$(LIBPATH)/$(TARGET).$(VERSION_MAJOR) - $(UNINSTALL_CMD) $(DESTDIR)/$(LIBPATH)/$(TARGET) - $(UNINSTALL_CMD) $(DESTDIR)$(LIBPATH)/pkgconfig/libtomcrypt.pc diff --git a/makefile.unix b/makefile.unix deleted file mode 100644 index aa1035ef..00000000 --- a/makefile.unix +++ /dev/null @@ -1,367 +0,0 @@ -# MAKEFILE that is intended to be compatible with any kind of make (GNU make, BSD make, ...) -# works on: Linux, *BSD, Cygwin, AIX, HP-UX and hopefully other UNIX systems -# -# Please do not use here neither any special make syntax nor any unusual tools/utilities! -# -# BEWARE: variables OBJECTS, TOBJECTS, HEADERS, VERSION are updated via ./updatemakes.sh - -### USAGE: -# -# make -f makefile.unix all -# ./test -# make -f makefile.unix install -# -#Or: -# -# make -f makefile.unix CFLAGS="-O3 -DUSE_LTM -DLTM_DESC -I/path/to/libtommath" EXTRALIBS=/path/to/libtommath/libtommath.a all -# ./test -# make -f makefile.unix PREFIX=/opt/libtom install -# -#Or if you are using Intel C compiler you might need something like: -# -# make -f makefile.unix CC=icc AR=xiar CFLAGS="-fast -DUSE_LTM -DLTM_DESC -I/path/to/libtommath" EXTRALIBS=/path/to/libtommath/libtommath.a all -# - -#The following can be overridden from command line e.g. "make -f makefile.unix CC=gcc ARFLAGS=rcs" -DESTDIR = -PREFIX = /usr/local -LIBPATH = $(PREFIX)/lib -INCPATH = $(PREFIX)/include -DATAPATH = $(PREFIX)/share/doc/libtomcrypt/pdf -BINPATH = $(PREFIX)/bin -CC = cc -AR = ar -ARFLAGS = r -RANLIB = ranlib -CFLAGS = -O2 -DUSE_LTM -DLTM_DESC -I../libtommath -EXTRALIBS = ../libtommath/libtommath.a -# pkg-config flags, added to libtomcrypt.pc on install time -PC_CFLAGS = -DLTM_DESC -PC_LIBS = -ltommath - -#Compilation flags -LTC_CFLAGS = -Isrc/headers -Itests $(CFLAGS) -LTC_LDFLAGS = $(LDFLAGS) $(EXTRALIBS) -VERSION=1.18.2-develop -VERSION_PC=1.18.2 - -#Libraries to be created (this makefile builds only static libraries) -LIBMAIN_S =libtomcrypt.a - -#List of objects to compile (all goes to libtomcrypt.a) -OBJECTS=src/ciphers/aes/aes.o src/ciphers/aes/aes_desc.o src/ciphers/aes/aes_enc.o \ -src/ciphers/aes/aes_enc_desc.o src/ciphers/aes/aesni.o src/ciphers/anubis.o src/ciphers/aria.o \ -src/ciphers/blowfish.o src/ciphers/camellia.o src/ciphers/cast5.o src/ciphers/des.o src/ciphers/idea.o \ -src/ciphers/kasumi.o src/ciphers/khazad.o src/ciphers/kseed.o src/ciphers/multi2.o src/ciphers/noekeon.o \ -src/ciphers/rc2.o src/ciphers/rc5.o src/ciphers/rc6.o src/ciphers/safer/safer.o \ -src/ciphers/safer/saferp.o src/ciphers/serpent.o src/ciphers/skipjack.o src/ciphers/sm4.o \ -src/ciphers/tea.o src/ciphers/twofish/twofish.o src/ciphers/xtea.o src/encauth/ccm/ccm_add_aad.o \ -src/encauth/ccm/ccm_add_nonce.o src/encauth/ccm/ccm_done.o src/encauth/ccm/ccm_init.o \ -src/encauth/ccm/ccm_memory.o src/encauth/ccm/ccm_process.o src/encauth/ccm/ccm_reset.o \ -src/encauth/ccm/ccm_test.o src/encauth/chachapoly/chacha20poly1305_add_aad.o \ -src/encauth/chachapoly/chacha20poly1305_decrypt.o src/encauth/chachapoly/chacha20poly1305_done.o \ -src/encauth/chachapoly/chacha20poly1305_encrypt.o src/encauth/chachapoly/chacha20poly1305_init.o \ -src/encauth/chachapoly/chacha20poly1305_memory.o src/encauth/chachapoly/chacha20poly1305_setiv.o \ -src/encauth/chachapoly/chacha20poly1305_setiv_rfc7905.o \ -src/encauth/chachapoly/chacha20poly1305_test.o src/encauth/eax/eax_addheader.o \ -src/encauth/eax/eax_decrypt.o src/encauth/eax/eax_decrypt_verify_memory.o src/encauth/eax/eax_done.o \ -src/encauth/eax/eax_encrypt.o src/encauth/eax/eax_encrypt_authenticate_memory.o \ -src/encauth/eax/eax_init.o src/encauth/eax/eax_test.o src/encauth/gcm/gcm_add_aad.o \ -src/encauth/gcm/gcm_add_iv.o src/encauth/gcm/gcm_done.o src/encauth/gcm/gcm_gf_mult.o \ -src/encauth/gcm/gcm_init.o src/encauth/gcm/gcm_memory.o src/encauth/gcm/gcm_mult_h.o \ -src/encauth/gcm/gcm_process.o src/encauth/gcm/gcm_reset.o src/encauth/gcm/gcm_test.o \ -src/encauth/gcm_siv/gcm_siv.o src/encauth/gcm_siv/gcm_siv_test.o src/encauth/ocb3/ocb3_add_aad.o \ -src/encauth/ocb3/ocb3_decrypt.o src/encauth/ocb3/ocb3_decrypt_last.o \ -src/encauth/ocb3/ocb3_decrypt_verify_memory.o src/encauth/ocb3/ocb3_done.o \ -src/encauth/ocb3/ocb3_encrypt.o src/encauth/ocb3/ocb3_encrypt_authenticate_memory.o \ -src/encauth/ocb3/ocb3_encrypt_last.o src/encauth/ocb3/ocb3_init.o src/encauth/ocb3/ocb3_int_ntz.o \ -src/encauth/ocb3/ocb3_int_xor_blocks.o src/encauth/ocb3/ocb3_test.o src/encauth/siv/siv.o \ -src/hashes/blake2b.o src/hashes/blake2s.o src/hashes/blake3.o src/hashes/chc/chc.o \ -src/hashes/helper/hash_file.o src/hashes/helper/hash_filehandle.o src/hashes/helper/hash_memory.o \ -src/hashes/helper/hash_memory_multi.o src/hashes/md2.o src/hashes/md4.o src/hashes/md5.o \ -src/hashes/rmd128.o src/hashes/rmd160.o src/hashes/rmd256.o src/hashes/rmd320.o src/hashes/sha1.o \ -src/hashes/sha1_desc.o src/hashes/sha1_x86.o src/hashes/sha2/sha224.o src/hashes/sha2/sha224_desc.o \ -src/hashes/sha2/sha224_x86.o src/hashes/sha2/sha256.o src/hashes/sha2/sha256_desc.o \ -src/hashes/sha2/sha256_x86.o src/hashes/sha2/sha384.o src/hashes/sha2/sha384_desc.o \ -src/hashes/sha2/sha384_x86.o src/hashes/sha2/sha512.o src/hashes/sha2/sha512_224.o \ -src/hashes/sha2/sha512_224_desc.o src/hashes/sha2/sha512_224_x86.o src/hashes/sha2/sha512_256.o \ -src/hashes/sha2/sha512_256_desc.o src/hashes/sha2/sha512_256_x86.o src/hashes/sha2/sha512_desc.o \ -src/hashes/sha2/sha512_x86.o src/hashes/sha3.o src/hashes/sha3_test.o src/hashes/sm3.o \ -src/hashes/tiger.o src/hashes/whirl/whirl.o src/mac/blake2/blake2bmac.o \ -src/mac/blake2/blake2bmac_file.o src/mac/blake2/blake2bmac_memory.o \ -src/mac/blake2/blake2bmac_memory_multi.o src/mac/blake2/blake2bmac_test.o src/mac/blake2/blake2smac.o \ -src/mac/blake2/blake2smac_file.o src/mac/blake2/blake2smac_memory.o \ -src/mac/blake2/blake2smac_memory_multi.o src/mac/blake2/blake2smac_test.o src/mac/f9/f9_done.o \ -src/mac/f9/f9_file.o src/mac/f9/f9_init.o src/mac/f9/f9_memory.o src/mac/f9/f9_memory_multi.o \ -src/mac/f9/f9_process.o src/mac/f9/f9_test.o src/mac/hmac/hmac_done.o src/mac/hmac/hmac_file.o \ -src/mac/hmac/hmac_init.o src/mac/hmac/hmac_memory.o src/mac/hmac/hmac_memory_multi.o \ -src/mac/hmac/hmac_process.o src/mac/hmac/hmac_test.o src/mac/kmac/kmac.o src/mac/kmac/kmac_file.o \ -src/mac/kmac/kmac_memory.o src/mac/kmac/kmac_memory_multi.o src/mac/kmac/kmac_test.o \ -src/mac/omac/omac_done.o src/mac/omac/omac_file.o src/mac/omac/omac_init.o src/mac/omac/omac_memory.o \ -src/mac/omac/omac_memory_multi.o src/mac/omac/omac_process.o src/mac/omac/omac_test.o \ -src/mac/pelican/pelican.o src/mac/pelican/pelican_memory.o src/mac/pelican/pelican_test.o \ -src/mac/pmac/pmac_done.o src/mac/pmac/pmac_file.o src/mac/pmac/pmac_init.o src/mac/pmac/pmac_memory.o \ -src/mac/pmac/pmac_memory_multi.o src/mac/pmac/pmac_ntz.o src/mac/pmac/pmac_process.o \ -src/mac/pmac/pmac_shift_xor.o src/mac/pmac/pmac_test.o src/mac/poly1305/poly1305.o \ -src/mac/poly1305/poly1305_file.o src/mac/poly1305/poly1305_memory.o \ -src/mac/poly1305/poly1305_memory_multi.o src/mac/poly1305/poly1305_test.o src/mac/xcbc/xcbc_done.o \ -src/mac/xcbc/xcbc_file.o src/mac/xcbc/xcbc_init.o src/mac/xcbc/xcbc_memory.o \ -src/mac/xcbc/xcbc_memory_multi.o src/mac/xcbc/xcbc_process.o src/mac/xcbc/xcbc_test.o \ -src/math/fp/ltc_ecc_fp_mulmod.o src/math/gmp_desc.o src/math/ltm_desc.o src/math/multi.o \ -src/math/radix_to_bin.o src/math/rand_bn.o src/math/rand_prime.o src/math/tfm_desc.o src/misc/adler32.o \ -src/misc/algname_match.o src/misc/argon2/argon2.o src/misc/base16/base16_decode.o \ -src/misc/base16/base16_encode.o src/misc/base32/base32_decode.o src/misc/base32/base32_encode.o \ -src/misc/base64/base64_decode.o src/misc/base64/base64_encode.o src/misc/bcrypt/bcrypt.o \ -src/misc/burn_stack.o src/misc/compare_testvector.o src/misc/copy_or_zeromem.o src/misc/crc32.o \ -src/misc/crypt/crypt.o src/misc/crypt/crypt_argchk.o src/misc/crypt/crypt_cipher_descriptor.o \ -src/misc/crypt/crypt_cipher_is_valid.o src/misc/crypt/crypt_constants.o \ -src/misc/crypt/crypt_find_cipher.o src/misc/crypt/crypt_find_cipher_any.o \ -src/misc/crypt/crypt_find_cipher_id.o src/misc/crypt/crypt_find_hash.o \ -src/misc/crypt/crypt_find_hash_any.o src/misc/crypt/crypt_find_hash_id.o \ -src/misc/crypt/crypt_find_hash_oid.o src/misc/crypt/crypt_find_prng.o src/misc/crypt/crypt_fsa.o \ -src/misc/crypt/crypt_hash_descriptor.o src/misc/crypt/crypt_hash_is_valid.o \ -src/misc/crypt/crypt_inits.o src/misc/crypt/crypt_ltc_mp_descriptor.o \ -src/misc/crypt/crypt_prng_descriptor.o src/misc/crypt/crypt_prng_is_valid.o \ -src/misc/crypt/crypt_prng_rng_descriptor.o src/misc/crypt/crypt_register_all_ciphers.o \ -src/misc/crypt/crypt_register_all_hashes.o src/misc/crypt/crypt_register_all_prngs.o \ -src/misc/crypt/crypt_register_cipher.o src/misc/crypt/crypt_register_hash.o \ -src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_sizes.o \ -src/misc/crypt/crypt_unregister_cipher.o src/misc/crypt/crypt_unregister_hash.o \ -src/misc/crypt/crypt_unregister_prng.o src/misc/deprecated.o src/misc/error_to_string.o \ -src/misc/hkdf/hkdf.o src/misc/hkdf/hkdf_test.o src/misc/mem_neq.o src/misc/padding/padding_depad.o \ -src/misc/padding/padding_pad.o src/misc/password_free.o src/misc/pbes/pbes.o src/misc/pbes/pbes1.o \ -src/misc/pbes/pbes2.o src/misc/pem/pem.o src/misc/pem/pem_pkcs.o src/misc/pem/pem_read.o \ -src/misc/pem/pem_ssh.o src/misc/pkcs12/pkcs12_kdf.o src/misc/pkcs12/pkcs12_utf8_to_utf16.o \ -src/misc/pkcs5/pkcs_5_1.o src/misc/pkcs5/pkcs_5_2.o src/misc/pkcs5/pkcs_5_test.o \ -src/misc/scrypt/scrypt.o src/misc/ssh/ssh_decode_sequence_multi.o \ -src/misc/ssh/ssh_encode_sequence_multi.o src/misc/zeromem.o src/modes/cbc/cbc_decrypt.o \ -src/modes/cbc/cbc_done.o src/modes/cbc/cbc_encrypt.o src/modes/cbc/cbc_getiv.o \ -src/modes/cbc/cbc_setiv.o src/modes/cbc/cbc_start.o src/modes/cfb/cfb_decrypt.o \ -src/modes/cfb/cfb_done.o src/modes/cfb/cfb_encrypt.o src/modes/cfb/cfb_getiv.o \ -src/modes/cfb/cfb_setiv.o src/modes/cfb/cfb_start.o src/modes/ctr/ctr_decrypt.o \ -src/modes/ctr/ctr_done.o src/modes/ctr/ctr_encrypt.o src/modes/ctr/ctr_getiv.o \ -src/modes/ctr/ctr_setiv.o src/modes/ctr/ctr_start.o src/modes/ctr/ctr_test.o \ -src/modes/ecb/ecb_decrypt.o src/modes/ecb/ecb_done.o src/modes/ecb/ecb_encrypt.o \ -src/modes/ecb/ecb_start.o src/modes/f8/f8_decrypt.o src/modes/f8/f8_done.o src/modes/f8/f8_encrypt.o \ -src/modes/f8/f8_getiv.o src/modes/f8/f8_setiv.o src/modes/f8/f8_start.o src/modes/f8/f8_test_mode.o \ -src/modes/lrw/lrw_decrypt.o src/modes/lrw/lrw_done.o src/modes/lrw/lrw_encrypt.o \ -src/modes/lrw/lrw_getiv.o src/modes/lrw/lrw_process.o src/modes/lrw/lrw_setiv.o \ -src/modes/lrw/lrw_start.o src/modes/lrw/lrw_test.o src/modes/ofb/ofb_decrypt.o src/modes/ofb/ofb_done.o \ -src/modes/ofb/ofb_encrypt.o src/modes/ofb/ofb_getiv.o src/modes/ofb/ofb_setiv.o \ -src/modes/ofb/ofb_start.o src/modes/xts/xts_decrypt.o src/modes/xts/xts_done.o \ -src/modes/xts/xts_encrypt.o src/modes/xts/xts_init.o src/modes/xts/xts_mult_x.o \ -src/modes/xts/xts_test.o src/pk/asn1/der/bit/der_decode_bit_string.o \ -src/pk/asn1/der/bit/der_decode_raw_bit_string.o src/pk/asn1/der/bit/der_encode_bit_string.o \ -src/pk/asn1/der/bit/der_encode_raw_bit_string.o src/pk/asn1/der/bit/der_length_bit_string.o \ -src/pk/asn1/der/boolean/der_decode_boolean.o src/pk/asn1/der/boolean/der_encode_boolean.o \ -src/pk/asn1/der/boolean/der_length_boolean.o src/pk/asn1/der/choice/der_decode_choice.o \ -src/pk/asn1/der/custom_type/der_decode_custom_type.o \ -src/pk/asn1/der/custom_type/der_encode_custom_type.o \ -src/pk/asn1/der/custom_type/der_length_custom_type.o src/pk/asn1/der/general/der_asn1_maps.o \ -src/pk/asn1/der/general/der_decode_asn1_identifier.o src/pk/asn1/der/general/der_decode_asn1_length.o \ -src/pk/asn1/der/general/der_encode_asn1_identifier.o src/pk/asn1/der/general/der_encode_asn1_length.o \ -src/pk/asn1/der/general/der_length_asn1_identifier.o src/pk/asn1/der/general/der_length_asn1_length.o \ -src/pk/asn1/der/generalizedtime/der_decode_generalizedtime.o \ -src/pk/asn1/der/generalizedtime/der_encode_generalizedtime.o \ -src/pk/asn1/der/generalizedtime/der_length_generalizedtime.o \ -src/pk/asn1/der/ia5/der_decode_ia5_string.o src/pk/asn1/der/ia5/der_encode_ia5_string.o \ -src/pk/asn1/der/ia5/der_length_ia5_string.o src/pk/asn1/der/integer/der_decode_integer.o \ -src/pk/asn1/der/integer/der_encode_integer.o src/pk/asn1/der/integer/der_length_integer.o \ -src/pk/asn1/der/object_identifier/der_decode_object_identifier.o \ -src/pk/asn1/der/object_identifier/der_encode_object_identifier.o \ -src/pk/asn1/der/object_identifier/der_length_object_identifier.o \ -src/pk/asn1/der/octet/der_decode_octet_string.o src/pk/asn1/der/octet/der_encode_octet_string.o \ -src/pk/asn1/der/octet/der_length_octet_string.o \ -src/pk/asn1/der/printable_string/der_decode_printable_string.o \ -src/pk/asn1/der/printable_string/der_encode_printable_string.o \ -src/pk/asn1/der/printable_string/der_length_printable_string.o \ -src/pk/asn1/der/sequence/der_decode_sequence_ex.o \ -src/pk/asn1/der/sequence/der_decode_sequence_flexi.o \ -src/pk/asn1/der/sequence/der_decode_sequence_multi.o \ -src/pk/asn1/der/sequence/der_encode_sequence_ex.o \ -src/pk/asn1/der/sequence/der_encode_sequence_multi.o \ -src/pk/asn1/der/sequence/der_flexi_sequence_cmp.o src/pk/asn1/der/sequence/der_length_sequence.o \ -src/pk/asn1/der/sequence/der_sequence_free.o src/pk/asn1/der/sequence/der_sequence_shrink.o \ -src/pk/asn1/der/set/der_encode_set.o src/pk/asn1/der/set/der_encode_setof.o \ -src/pk/asn1/der/short_integer/der_decode_short_integer.o \ -src/pk/asn1/der/short_integer/der_encode_short_integer.o \ -src/pk/asn1/der/short_integer/der_length_short_integer.o \ -src/pk/asn1/der/teletex_string/der_decode_teletex_string.o \ -src/pk/asn1/der/teletex_string/der_length_teletex_string.o \ -src/pk/asn1/der/utctime/der_decode_utctime.o src/pk/asn1/der/utctime/der_encode_utctime.o \ -src/pk/asn1/der/utctime/der_length_utctime.o src/pk/asn1/der/utf8/der_decode_utf8_string.o \ -src/pk/asn1/der/utf8/der_encode_utf8_string.o src/pk/asn1/der/utf8/der_length_utf8_string.o \ -src/pk/asn1/oid/pk_get.o src/pk/asn1/oid/pk_oid_cmp.o src/pk/asn1/oid/pk_oid_str.o \ -src/pk/asn1/pkcs8/pkcs8_decode_flexi.o src/pk/asn1/pkcs8/pkcs8_get.o \ -src/pk/asn1/x509/x509_decode_public_key_from_certificate.o src/pk/asn1/x509/x509_decode_spki.o \ -src/pk/asn1/x509/x509_decode_subject_public_key_info.o \ -src/pk/asn1/x509/x509_encode_subject_public_key_info.o src/pk/asn1/x509/x509_get_pka.o \ -src/pk/asn1/x509/x509_import_spki.o src/pk/dh/dh.o src/pk/dh/dh_check_pubkey.o src/pk/dh/dh_export.o \ -src/pk/dh/dh_export_key.o src/pk/dh/dh_free.o src/pk/dh/dh_generate_key.o src/pk/dh/dh_import.o \ -src/pk/dh/dh_import_pkcs8.o src/pk/dh/dh_set.o src/pk/dh/dh_set_pg_dhparam.o \ -src/pk/dh/dh_shared_secret.o src/pk/dsa/dsa_decrypt_key.o src/pk/dsa/dsa_encrypt_key.o \ -src/pk/dsa/dsa_export.o src/pk/dsa/dsa_free.o src/pk/dsa/dsa_generate_key.o \ -src/pk/dsa/dsa_generate_pqg.o src/pk/dsa/dsa_import.o src/pk/dsa/dsa_import_pkcs8.o \ -src/pk/dsa/dsa_init.o src/pk/dsa/dsa_make_key.o src/pk/dsa/dsa_set.o src/pk/dsa/dsa_set_pqg_dsaparam.o \ -src/pk/dsa/dsa_shared_secret.o src/pk/dsa/dsa_sign_hash.o src/pk/dsa/dsa_verify_hash.o \ -src/pk/dsa/dsa_verify_key.o src/pk/ec25519/ec25519_crypto_ctx.o src/pk/ec25519/ec25519_export.o \ -src/pk/ec25519/ec25519_import_pkcs8.o src/pk/ec25519/tweetnacl.o src/pk/ec448/ec448_common.o \ -src/pk/ec448/ec448_crypto_ctx.o src/pk/ec448/ec448_export.o src/pk/ec448/ec448_import_pkcs8.o \ -src/pk/ecc/ecc.o src/pk/ecc/ecc_ansi_x963_export.o src/pk/ecc/ecc_ansi_x963_import.o \ -src/pk/ecc/ecc_decrypt_key.o src/pk/ecc/ecc_encrypt_key.o src/pk/ecc/ecc_export.o \ -src/pk/ecc/ecc_export_openssl.o src/pk/ecc/ecc_find_curve.o src/pk/ecc/ecc_free.o \ -src/pk/ecc/ecc_get_key.o src/pk/ecc/ecc_get_oid_str.o src/pk/ecc/ecc_get_size.o src/pk/ecc/ecc_import.o \ -src/pk/ecc/ecc_import_openssl.o src/pk/ecc/ecc_import_pkcs8.o src/pk/ecc/ecc_import_x509.o \ -src/pk/ecc/ecc_make_key.o src/pk/ecc/ecc_recover_key.o src/pk/ecc/ecc_rfc6979_key.o \ -src/pk/ecc/ecc_set_curve.o src/pk/ecc/ecc_set_curve_internal.o src/pk/ecc/ecc_set_key.o \ -src/pk/ecc/ecc_shared_secret.o src/pk/ecc/ecc_sign_hash.o src/pk/ecc/ecc_sign_hash_eth27.o \ -src/pk/ecc/ecc_sign_hash_internal.o src/pk/ecc/ecc_sign_hash_rfc5656.o \ -src/pk/ecc/ecc_sign_hash_rfc7518.o src/pk/ecc/ecc_sign_hash_x962.o src/pk/ecc/ecc_sizes.o \ -src/pk/ecc/ecc_ssh_ecdsa_encode_name.o src/pk/ecc/ecc_verify_hash.o src/pk/ecc/ecc_verify_hash_eth27.o \ -src/pk/ecc/ecc_verify_hash_internal.o src/pk/ecc/ecc_verify_hash_rfc5656.o \ -src/pk/ecc/ecc_verify_hash_rfc7518.o src/pk/ecc/ecc_verify_hash_x962.o \ -src/pk/ecc/ltc_ecc_export_point.o src/pk/ecc/ltc_ecc_import_point.o src/pk/ecc/ltc_ecc_is_point.o \ -src/pk/ecc/ltc_ecc_is_point_at_infinity.o src/pk/ecc/ltc_ecc_map.o src/pk/ecc/ltc_ecc_mul2add.o \ -src/pk/ecc/ltc_ecc_mulmod.o src/pk/ecc/ltc_ecc_mulmod_timing.o src/pk/ecc/ltc_ecc_points.o \ -src/pk/ecc/ltc_ecc_projective_add_point.o src/pk/ecc/ltc_ecc_projective_dbl_point.o \ -src/pk/ecc/ltc_ecc_verify_key.o src/pk/ed25519/ed25519_export.o src/pk/ed25519/ed25519_import.o \ -src/pk/ed25519/ed25519_import_pkcs8.o src/pk/ed25519/ed25519_import_raw.o \ -src/pk/ed25519/ed25519_import_x509.o src/pk/ed25519/ed25519_make_key.o src/pk/ed25519/ed25519_sign.o \ -src/pk/ed25519/ed25519_verify.o src/pk/ed448/ed448_export.o src/pk/ed448/ed448_import.o \ -src/pk/ed448/ed448_import_pkcs8.o src/pk/ed448/ed448_import_raw.o src/pk/ed448/ed448_import_x509.o \ -src/pk/ed448/ed448_make_key.o src/pk/ed448/ed448_sign.o src/pk/ed448/ed448_verify.o src/pk/pka_key.o \ -src/pk/pkcs1/pkcs_1_i2osp.o src/pk/pkcs1/pkcs_1_mgf1.o src/pk/pkcs1/pkcs_1_oaep_decode.o \ -src/pk/pkcs1/pkcs_1_oaep_encode.o src/pk/pkcs1/pkcs_1_os2ip.o src/pk/pkcs1/pkcs_1_pss_decode.o \ -src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/pkcs1/pkcs_1_v1_5_decode.o src/pk/pkcs1/pkcs_1_v1_5_encode.o \ -src/pk/rsa/rsa_decrypt_key.o src/pk/rsa/rsa_encrypt_key.o src/pk/rsa/rsa_export.o \ -src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_get_size.o src/pk/rsa/rsa_import.o \ -src/pk/rsa/rsa_import_pkcs8.o src/pk/rsa/rsa_import_x509.o src/pk/rsa/rsa_key.o \ -src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_set.o src/pk/rsa/rsa_sign_hash.o \ -src/pk/rsa/rsa_sign_saltlen_get.o src/pk/rsa/rsa_verify_hash.o src/pk/x25519/x25519_export.o \ -src/pk/x25519/x25519_import.o src/pk/x25519/x25519_import_pkcs8.o src/pk/x25519/x25519_import_raw.o \ -src/pk/x25519/x25519_import_x509.o src/pk/x25519/x25519_make_key.o \ -src/pk/x25519/x25519_shared_secret.o src/pk/x448/x448_export.o src/pk/x448/x448_import.o \ -src/pk/x448/x448_import_pkcs8.o src/pk/x448/x448_import_raw.o src/pk/x448/x448_import_x509.o \ -src/pk/x448/x448_make_key.o src/pk/x448/x448_shared_secret.o src/prngs/chacha20.o src/prngs/fortuna.o \ -src/prngs/rc4.o src/prngs/rng_get_bytes.o src/prngs/rng_make_prng.o src/prngs/sober128.o \ -src/prngs/sprng.o src/prngs/yarrow.o src/stream/chacha/chacha_crypt.o src/stream/chacha/chacha_done.o \ -src/stream/chacha/chacha_ivctr32.o src/stream/chacha/chacha_ivctr64.o \ -src/stream/chacha/chacha_keystream.o src/stream/chacha/chacha_memory.o \ -src/stream/chacha/chacha_setup.o src/stream/chacha/chacha_test.o src/stream/chacha/xchacha20_memory.o \ -src/stream/chacha/xchacha20_setup.o src/stream/chacha/xchacha20_test.o src/stream/rabbit/rabbit.o \ -src/stream/rabbit/rabbit_memory.o src/stream/rc4/rc4_stream.o src/stream/rc4/rc4_stream_memory.o \ -src/stream/rc4/rc4_test.o src/stream/salsa20/salsa20_crypt.o src/stream/salsa20/salsa20_done.o \ -src/stream/salsa20/salsa20_ivctr64.o src/stream/salsa20/salsa20_keystream.o \ -src/stream/salsa20/salsa20_memory.o src/stream/salsa20/salsa20_setup.o \ -src/stream/salsa20/salsa20_test.o src/stream/salsa20/xsalsa20_memory.o \ -src/stream/salsa20/xsalsa20_setup.o src/stream/salsa20/xsalsa20_test.o \ -src/stream/sober128/sober128_stream.o src/stream/sober128/sober128_stream_memory.o \ -src/stream/sober128/sober128_test.o src/stream/sosemanuk/sosemanuk.o \ -src/stream/sosemanuk/sosemanuk_memory.o src/stream/sosemanuk/sosemanuk_test.o - -#List of test objects to compile (all goes to libtomcrypt_prof.a) -TOBJECTS=tests/argon2_test.o tests/base16_test.o tests/base32_test.o tests/base64_test.o \ -tests/bcrypt_test.o tests/cipher_hash_test.o tests/common.o tests/deprecated_test.o tests/der_test.o \ -tests/dh_test.o tests/dsa_test.o tests/ecc_test.o tests/ed25519_test.o tests/ed448_test.o \ -tests/file_test.o tests/mac_test.o tests/misc_test.o tests/modes_test.o tests/mpi_test.o \ -tests/multi_test.o tests/no_null_termination_check_test.o tests/no_prng.o tests/padding_test.o \ -tests/pem_test.o tests/pk_oid_test.o tests/pkcs_1_eme_test.o tests/pkcs_1_emsa_test.o \ -tests/pkcs_1_oaep_test.o tests/pkcs_1_pss_test.o tests/pkcs_1_test.o tests/prng_test.o \ -tests/rotate_test.o tests/rsa_test.o tests/scrypt_test.o tests/siv_wycheproof_test.o tests/ssh_test.o \ -tests/store_test.o tests/test.o tests/x25519_test.o tests/x448_test.o - -#The following headers will be installed by "make install" -HEADERS_PUB=src/headers/tomcrypt.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cfg.h \ -src/headers/tomcrypt_cipher.h src/headers/tomcrypt_custom.h src/headers/tomcrypt_hash.h \ -src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h src/headers/tomcrypt_math.h \ -src/headers/tomcrypt_misc.h src/headers/tomcrypt_pk.h src/headers/tomcrypt_pkcs.h \ -src/headers/tomcrypt_prng.h - -HEADERS=$(HEADERS_PUB) src/headers/tomcrypt_private.h - -#The default rule for make builds the libtomcrypt.a library (static) -default: $(LIBMAIN_S) - -#SPECIAL: AES comes in two flavours - enc+dec and enc-only -src/ciphers/aes/aes_enc.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c - $(CC) $(LTC_CFLAGS) -DENCRYPT_ONLY -c src/ciphers/aes/aes.c -o src/ciphers/aes/aes_enc.o -src/ciphers/aes/aes_enc_desc.o: src/ciphers/aes/aes_desc.c - $(CC) $(LTC_CFLAGS) -DENCRYPT_ONLY -c src/ciphers/aes/aes_desc.c -o src/ciphers/aes/aes_enc_desc.o - -#SPECIAL: these are the rules to make certain object files -src/ciphers/aes/aes.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c -src/ciphers/twofish/twofish.o: src/ciphers/twofish/twofish.c src/ciphers/twofish/twofish_tab.c -src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c -src/hashes/sha2/sha384.o: src/hashes/sha2/sha384.c src/hashes/sha2/sha512.c -src/hashes/sha2/sha512.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c -src/hashes/sha2/sha512_224.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha512_224.c -src/hashes/sha2/sha512_256.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha512_256.c -src/hashes/whirl/whirl.o: src/hashes/whirl/whirl.c src/hashes/whirl/whirltab.c - -#Dependencies on *.h -$(OBJECTS): $(HEADERS) -$(TOBJECTS): $(HEADERS) tests/tomcrypt_test.h - -#This is necessary for compatibility with BSD make (namely on OpenBSD) -.SUFFIXES: .o .c -.c.o: - $(CC) $(LTC_CFLAGS) -c $< -o $@ - -#Create libtomcrypt.a -$(LIBMAIN_S): $(OBJECTS) - $(AR) $(ARFLAGS) $@ $(OBJECTS) - $(RANLIB) $@ - -#Demo tools/utilities -hashsum: demos/hashsum.o $(LIBMAIN_S) - $(CC) demos/hashsum.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -crypt: demos/crypt.o $(LIBMAIN_S) - $(CC) demos/crypt.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -small: demos/small.o $(LIBMAIN_S) - $(CC) demos/small.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -tv_gen: demos/tv_gen.o $(LIBMAIN_S) - $(CC) demos/tv_gen.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -sizes: demos/sizes.o $(LIBMAIN_S) - $(CC) demos/sizes.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -constants: demos/constants.o $(LIBMAIN_S) - $(CC) demos/constants.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -timing: demos/timing.o $(LIBMAIN_S) - $(CC) demos/timing.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ -der_print_flexi: demos/der_print_flexi.o $(LIBMAIN_S) - $(CC) demos/der_print_flexi.o $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ - -#Tests -test: $(TOBJECTS) $(LIBMAIN_S) - $(CC) $(TOBJECTS) $(LIBMAIN_S) $(LTC_LDFLAGS) -o $@ - @echo "NOTICE: start the tests by: ./test" - -all: $(LIBMAIN_S) hashsum crypt small tv_gen sizes constants timing test - -#NOTE: this makefile works also on cygwin, thus we need to delete *.exe -clean: - -@rm -f $(OBJECTS) $(TOBJECTS) - -@rm -f $(LIBMAIN_S) - -@rm -f demos/*.o *_tv.txt - -@rm -f test constants sizes tv_gen hashsum crypt small timing - -@rm -f test.exe constants.exe sizes.exe tv_gen.exe hashsum.exe crypt.exe small.exe timing.exe - -#Install the library + headers -install: $(LIBMAIN_S) - @mkdir -p $(DESTDIR)$(INCPATH) $(DESTDIR)$(LIBPATH)/pkgconfig - @cp $(LIBMAIN_S) $(DESTDIR)$(LIBPATH)/ - @cp $(HEADERS_PUB) $(DESTDIR)$(INCPATH)/ - @sed -e 's,^prefix=.*,prefix=$(PREFIX),' -e 's,^Version:.*,Version: $(VERSION_PC),' -e 's,^libdir=.*,libdir=$(LIBPATH),' \ - -e 's,^includedir=.*,includedir=$(INCPATH),' \ - -e 's,@MPI_PROVIDERS_LIBS@,$(PC_LIBS),' \ - -e 's,@MPI_PROVIDERS_CFLAGS@,$(PC_CFLAGS),' libtomcrypt.pc.in > $(DESTDIR)$(LIBPATH)/pkgconfig/libtomcrypt.pc - -#Install useful tools -install_bins: hashsum - @mkdir -p $(DESTDIR)$(BINPATH) - @cp hashsum $(DESTDIR)$(BINPATH)/ltc-hashsum - @cp demos/ltc $(DESTDIR)$(BINPATH)/ltc - -#Install documentation -install_docs: doc/crypt.pdf - @mkdir -p $(DESTDIR)$(DATAPATH) - @cp doc/crypt.pdf $(DESTDIR)$(DATAPATH)/ diff --git a/makefile_include.mk b/makefile_include.mk deleted file mode 100644 index dc95d982..00000000 --- a/makefile_include.mk +++ /dev/null @@ -1,591 +0,0 @@ -# -# Include makefile used by makefile + makefile.shared -# (GNU make only) - -# The version - BEWARE: VERSION, VERSION_PC and VERSION_LT are updated via ./updatemakes.sh -VERSION=1.18.2-develop -VERSION_PC=1.18.2 -# https://semver.org/ -VERSION_MAJOR=1 -VERSION_MINOR=0 -VERSION_PATCH=1 -VERSION_LT=$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH) - -# Compiler and Linker Names -ifndef CROSS_COMPILE - CROSS_COMPILE:= -endif - -H := \# -ifeq (CLANG,$(shell printf "$(H)ifdef __clang__\nCLANG\n$(H)endif\n" | $(CC) -E - | grep CLANG)) - CC_IS_CLANG := 1 -else - CC_IS_CLANG := 0 -endif # Clang - -ifneq (,$(CROSS_COMPILE)) -ifeq ($(origin CC),default) -ifeq ($(CC_IS_CLANG), 1) - CC := $(CROSS_COMPILE)clang -else - CC := $(CROSS_COMPILE)gcc -endif # Clang -endif # cc is Make's default -endif # CROSS_COMPILE non-empty - -LD:=$(CROSS_COMPILE)ld -AR:=$(CROSS_COMPILE)ar - -# Archiver [makes .a files] -#AR=ar -ARFLAGS:=r - -ifndef MAKE -# BSDs refer to GNU Make as gmake -ifneq (,$(findstring $(PLATFORM),FreeBSD OpenBSD DragonFly NetBSD)) - MAKE=gmake -else - MAKE=make -endif -endif - -ifndef INSTALL_CMD -$(error your makefile must define INSTALL_CMD) -endif -ifndef UNINSTALL_CMD -$(error your makefile must define UNINSTALL_CMD) -endif - -ifndef EXTRALIBS -ifneq ($(shell echo $(CFLAGS) | grep USE_LTM),) -EXTRALIBS=$(shell PKG_CONFIG_PATH=$(LIBPATH)/pkgconfig pkg-config --libs libtommath ${silent_stderr} || true) -else ifneq ($(shell echo $(CFLAGS) | grep USE_TFM),) -EXTRALIBS=$(shell PKG_CONFIG_PATH=$(LIBPATH)/pkgconfig pkg-config --libs tomsfastmath ${silent_stderr} || true) -else ifneq ($(shell echo $(CFLAGS) | grep USE_GMP),) -EXTRALIBS=$(shell PKG_CONFIG_PATH=$(LIBPATH)/pkgconfig pkg-config --libs gmp ${silent_stderr} || true) -endif -endif # EXTRALIBS - -need-help := $(filter help,$(MAKECMDGOALS)) -define print-help -$(if $(need-help),$(info $1 -- $2)) -endef - -# -# Compilation flags. Note the += does not write over the user's CFLAGS! -# -# Also note that we're extending the environments' CFLAGS. -# If you think that our CFLAGS are not nice you can easily override them -# by giving them as a parameter to make: -# make CFLAGS="-I./src/headers/ ..." ... -# -ifneq ($(shell echo $(CFLAGS) | grep LTM_DESC),) -LTC_CFLAGS+=$(shell PKG_CONFIG_PATH=$(LIBPATH)/pkgconfig pkg-config --cflags-only-I libtommath ${silent_stderr} || true) -endif -ifneq ($(shell echo $(CFLAGS) | grep TFM_DESC),) -LTC_CFLAGS+=$(shell PKG_CONFIG_PATH=$(LIBPATH)/pkgconfig pkg-config --cflags-only-I tomsfastmath ${silent_stderr} || true) -endif -ifneq ($(shell echo $(CFLAGS) | grep GMP_DESC),) -LTC_CFLAGS+=$(shell PKG_CONFIG_PATH=$(LIBPATH)/pkgconfig pkg-config --cflags-only-I gmp ${silent_stderr} || true) -endif -LTC_CFLAGS += -I./src/headers/ -Wall -Wsign-compare -Wshadow - -ifdef OLD_GCC -LTC_CFLAGS += -W -# older GCCs can't handle the "rotate with immediate" ROLc/RORc/etc macros -# define this to help -LTC_CFLAGS += -DLTC_NO_ROLC -else -LTC_CFLAGS += -Wextra -# additional warnings -LTC_CFLAGS += -Wsystem-headers -Wbad-function-cast -Wcast-align -LTC_CFLAGS += -Wstrict-prototypes -Wpointer-arith -LTC_CFLAGS += -Wdeclaration-after-statement -LTC_CFLAGS += -Wwrite-strings -endif - -ifdef LTC_DEBUG -$(info Debug build) -# compile for DEBUGGING (required for ccmalloc checking!!!) -LTC_CFLAGS += -g3 -DLTC_NO_ASM - -ifneq (,$(strip $(LTC_DEBUG))) -LTC_CFLAGS += -DLTC_TEST_DBG=$(LTC_DEBUG) -else -LTC_CFLAGS += -DLTC_TEST_DBG -endif -endif # LTC_DEBUG - -ifndef IGNORE_SPEED -# optimize for SPEED -LTC_CFLAGS += -O3 -funroll-loops - -# add -fomit-frame-pointer. hinders debugging! -LTC_CFLAGS += -fomit-frame-pointer -endif # IGNORE_SPEED - -ifdef LTC_SMALL -# optimize for SIZE -LTC_CFLAGS += -Os -DLTC_SMALL_CODE -endif # LTC_SMALL - - -ifeq ($(CC_IS_CLANG), 1) -LTC_CFLAGS += -Wno-typedef-redefinition -Wno-tautological-compare -Wno-builtin-requires-header -LTC_CFLAGS += -Wno-missing-field-initializers -Wno-missing-braces -Wno-incomplete-setjmp-declaration -Wno-cast-align -LTC_CFLAGS += -Wno-declaration-after-statement -endif -ifneq ($(findstring mingw,$(CC)),) -LTC_CFLAGS += -Wno-shadow -Wno-attributes -endif -ifeq ($(PLATFORM), Darwin) -LTC_CFLAGS += -Wno-nullability-completeness -endif - - -GIT_VERSION := $(shell { [ -e .git ] && which git 2>/dev/null 1>&2 ; } && { printf git- ; git describe --tags --always --dirty ; } || echo $(VERSION)) -ifneq ($(GIT_VERSION),) -LTC_CFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\" -endif - -ifndef LTC_DEBUG -ifeq ($(findstring -DARGTYPE,$(CFLAGS)),) -LTC_CFLAGS += -DARGTYPE=4 -endif -endif - -LTC_CFLAGS := $(LTC_CFLAGS) $(CFLAGS) - -ifneq ($(findstring -DLTC_PTHREAD,$(LTC_CFLAGS)),) -LTC_LDFLAGS += -pthread -endif - -LTC_LDFLAGS := $(LTC_LDFLAGS) $(LDFLAGS) - -ifeq ($(V)$(filter clean,$(MAKECMDGOALS)),0) -$(warning CFLAGS=$(LTC_CFLAGS)) -$(warning LDFLAGS=$(LTC_LDFLAGS)) -endif - -#List of demo objects -DSOURCES = $(wildcard demos/*.c) -DOBJECTS = $(DSOURCES:.c=.o) - -#List of tests headers -THEADERS = $(wildcard tests/*.h) - -TEST=test - -# Demos that are even somehow useful and could be installed as a system-tool -USEFUL_DEMOS = hashsum - -# Demos that are usable but only rarely make sense to be installed -USEABLE_DEMOS = aesgcm constants crypt der_print_flexi latex-tables openssh-privkey openssl-enc sizes timing - -# Demos that are used for testing or measuring -TEST_DEMOS = small tv_gen - -# Combine demos in groups -UNBROKEN_DEMOS = $(TEST_DEMOS) $(USEABLE_DEMOS) $(USEFUL_DEMOS) -DEMOS = $(UNBROKEN_DEMOS) $(BROKEN_DEMOS) - -#LIBPATH The directory for libtomcrypt to be installed to. -#INCPATH The directory to install the header files for libtomcrypt. -#DATAPATH The directory to install the pdf docs. -#BINPATH The directory to install the binaries provided. -DESTDIR ?= -PREFIX ?= /usr/local -LIBPATH ?= $(PREFIX)/lib -INCPATH ?= $(PREFIX)/include/libtomcrypt -DATAPATH ?= $(PREFIX)/share/doc/libtomcrypt/pdf -BINPATH ?= $(PREFIX)/bin - -#Who do we install as? -ifdef INSTALL_USER -USER=$(INSTALL_USER) -else -USER=root -endif - -ifdef INSTALL_GROUP -GROUP=$(INSTALL_GROUP) -else -GROUP=wheel -endif - - -#The first rule is also the default rule and builds the libtomcrypt library. -library: $(call print-help,library,Builds the library) $(LIBNAME) - - -# List of objects to compile (all goes to libtomcrypt.a) -ifndef AMALGAM -OBJECTS=src/ciphers/aes/aes.o src/ciphers/aes/aes_desc.o src/ciphers/aes/aes_enc.o \ -src/ciphers/aes/aes_enc_desc.o src/ciphers/aes/aesni.o src/ciphers/anubis.o src/ciphers/aria.o \ -src/ciphers/blowfish.o src/ciphers/camellia.o src/ciphers/cast5.o src/ciphers/des.o src/ciphers/idea.o \ -src/ciphers/kasumi.o src/ciphers/khazad.o src/ciphers/kseed.o src/ciphers/multi2.o src/ciphers/noekeon.o \ -src/ciphers/rc2.o src/ciphers/rc5.o src/ciphers/rc6.o src/ciphers/safer/safer.o \ -src/ciphers/safer/saferp.o src/ciphers/serpent.o src/ciphers/skipjack.o src/ciphers/sm4.o \ -src/ciphers/tea.o src/ciphers/twofish/twofish.o src/ciphers/xtea.o src/encauth/ccm/ccm_add_aad.o \ -src/encauth/ccm/ccm_add_nonce.o src/encauth/ccm/ccm_done.o src/encauth/ccm/ccm_init.o \ -src/encauth/ccm/ccm_memory.o src/encauth/ccm/ccm_process.o src/encauth/ccm/ccm_reset.o \ -src/encauth/ccm/ccm_test.o src/encauth/chachapoly/chacha20poly1305_add_aad.o \ -src/encauth/chachapoly/chacha20poly1305_decrypt.o src/encauth/chachapoly/chacha20poly1305_done.o \ -src/encauth/chachapoly/chacha20poly1305_encrypt.o src/encauth/chachapoly/chacha20poly1305_init.o \ -src/encauth/chachapoly/chacha20poly1305_memory.o src/encauth/chachapoly/chacha20poly1305_setiv.o \ -src/encauth/chachapoly/chacha20poly1305_setiv_rfc7905.o \ -src/encauth/chachapoly/chacha20poly1305_test.o src/encauth/eax/eax_addheader.o \ -src/encauth/eax/eax_decrypt.o src/encauth/eax/eax_decrypt_verify_memory.o src/encauth/eax/eax_done.o \ -src/encauth/eax/eax_encrypt.o src/encauth/eax/eax_encrypt_authenticate_memory.o \ -src/encauth/eax/eax_init.o src/encauth/eax/eax_test.o src/encauth/gcm/gcm_add_aad.o \ -src/encauth/gcm/gcm_add_iv.o src/encauth/gcm/gcm_done.o src/encauth/gcm/gcm_gf_mult.o \ -src/encauth/gcm/gcm_init.o src/encauth/gcm/gcm_memory.o src/encauth/gcm/gcm_mult_h.o \ -src/encauth/gcm/gcm_process.o src/encauth/gcm/gcm_reset.o src/encauth/gcm/gcm_test.o \ -src/encauth/gcm_siv/gcm_siv.o src/encauth/gcm_siv/gcm_siv_test.o src/encauth/ocb3/ocb3_add_aad.o \ -src/encauth/ocb3/ocb3_decrypt.o src/encauth/ocb3/ocb3_decrypt_last.o \ -src/encauth/ocb3/ocb3_decrypt_verify_memory.o src/encauth/ocb3/ocb3_done.o \ -src/encauth/ocb3/ocb3_encrypt.o src/encauth/ocb3/ocb3_encrypt_authenticate_memory.o \ -src/encauth/ocb3/ocb3_encrypt_last.o src/encauth/ocb3/ocb3_init.o src/encauth/ocb3/ocb3_int_ntz.o \ -src/encauth/ocb3/ocb3_int_xor_blocks.o src/encauth/ocb3/ocb3_test.o src/encauth/siv/siv.o \ -src/hashes/blake2b.o src/hashes/blake2s.o src/hashes/blake3.o src/hashes/chc/chc.o \ -src/hashes/helper/hash_file.o src/hashes/helper/hash_filehandle.o src/hashes/helper/hash_memory.o \ -src/hashes/helper/hash_memory_multi.o src/hashes/md2.o src/hashes/md4.o src/hashes/md5.o \ -src/hashes/rmd128.o src/hashes/rmd160.o src/hashes/rmd256.o src/hashes/rmd320.o src/hashes/sha1.o \ -src/hashes/sha1_desc.o src/hashes/sha1_x86.o src/hashes/sha2/sha224.o src/hashes/sha2/sha224_desc.o \ -src/hashes/sha2/sha224_x86.o src/hashes/sha2/sha256.o src/hashes/sha2/sha256_desc.o \ -src/hashes/sha2/sha256_x86.o src/hashes/sha2/sha384.o src/hashes/sha2/sha384_desc.o \ -src/hashes/sha2/sha384_x86.o src/hashes/sha2/sha512.o src/hashes/sha2/sha512_224.o \ -src/hashes/sha2/sha512_224_desc.o src/hashes/sha2/sha512_224_x86.o src/hashes/sha2/sha512_256.o \ -src/hashes/sha2/sha512_256_desc.o src/hashes/sha2/sha512_256_x86.o src/hashes/sha2/sha512_desc.o \ -src/hashes/sha2/sha512_x86.o src/hashes/sha3.o src/hashes/sha3_test.o src/hashes/sm3.o \ -src/hashes/tiger.o src/hashes/whirl/whirl.o src/mac/blake2/blake2bmac.o \ -src/mac/blake2/blake2bmac_file.o src/mac/blake2/blake2bmac_memory.o \ -src/mac/blake2/blake2bmac_memory_multi.o src/mac/blake2/blake2bmac_test.o src/mac/blake2/blake2smac.o \ -src/mac/blake2/blake2smac_file.o src/mac/blake2/blake2smac_memory.o \ -src/mac/blake2/blake2smac_memory_multi.o src/mac/blake2/blake2smac_test.o src/mac/f9/f9_done.o \ -src/mac/f9/f9_file.o src/mac/f9/f9_init.o src/mac/f9/f9_memory.o src/mac/f9/f9_memory_multi.o \ -src/mac/f9/f9_process.o src/mac/f9/f9_test.o src/mac/hmac/hmac_done.o src/mac/hmac/hmac_file.o \ -src/mac/hmac/hmac_init.o src/mac/hmac/hmac_memory.o src/mac/hmac/hmac_memory_multi.o \ -src/mac/hmac/hmac_process.o src/mac/hmac/hmac_test.o src/mac/kmac/kmac.o src/mac/kmac/kmac_file.o \ -src/mac/kmac/kmac_memory.o src/mac/kmac/kmac_memory_multi.o src/mac/kmac/kmac_test.o \ -src/mac/omac/omac_done.o src/mac/omac/omac_file.o src/mac/omac/omac_init.o src/mac/omac/omac_memory.o \ -src/mac/omac/omac_memory_multi.o src/mac/omac/omac_process.o src/mac/omac/omac_test.o \ -src/mac/pelican/pelican.o src/mac/pelican/pelican_memory.o src/mac/pelican/pelican_test.o \ -src/mac/pmac/pmac_done.o src/mac/pmac/pmac_file.o src/mac/pmac/pmac_init.o src/mac/pmac/pmac_memory.o \ -src/mac/pmac/pmac_memory_multi.o src/mac/pmac/pmac_ntz.o src/mac/pmac/pmac_process.o \ -src/mac/pmac/pmac_shift_xor.o src/mac/pmac/pmac_test.o src/mac/poly1305/poly1305.o \ -src/mac/poly1305/poly1305_file.o src/mac/poly1305/poly1305_memory.o \ -src/mac/poly1305/poly1305_memory_multi.o src/mac/poly1305/poly1305_test.o src/mac/xcbc/xcbc_done.o \ -src/mac/xcbc/xcbc_file.o src/mac/xcbc/xcbc_init.o src/mac/xcbc/xcbc_memory.o \ -src/mac/xcbc/xcbc_memory_multi.o src/mac/xcbc/xcbc_process.o src/mac/xcbc/xcbc_test.o \ -src/math/fp/ltc_ecc_fp_mulmod.o src/math/gmp_desc.o src/math/ltm_desc.o src/math/multi.o \ -src/math/radix_to_bin.o src/math/rand_bn.o src/math/rand_prime.o src/math/tfm_desc.o src/misc/adler32.o \ -src/misc/algname_match.o src/misc/argon2/argon2.o src/misc/base16/base16_decode.o \ -src/misc/base16/base16_encode.o src/misc/base32/base32_decode.o src/misc/base32/base32_encode.o \ -src/misc/base64/base64_decode.o src/misc/base64/base64_encode.o src/misc/bcrypt/bcrypt.o \ -src/misc/burn_stack.o src/misc/compare_testvector.o src/misc/copy_or_zeromem.o src/misc/crc32.o \ -src/misc/crypt/crypt.o src/misc/crypt/crypt_argchk.o src/misc/crypt/crypt_cipher_descriptor.o \ -src/misc/crypt/crypt_cipher_is_valid.o src/misc/crypt/crypt_constants.o \ -src/misc/crypt/crypt_find_cipher.o src/misc/crypt/crypt_find_cipher_any.o \ -src/misc/crypt/crypt_find_cipher_id.o src/misc/crypt/crypt_find_hash.o \ -src/misc/crypt/crypt_find_hash_any.o src/misc/crypt/crypt_find_hash_id.o \ -src/misc/crypt/crypt_find_hash_oid.o src/misc/crypt/crypt_find_prng.o src/misc/crypt/crypt_fsa.o \ -src/misc/crypt/crypt_hash_descriptor.o src/misc/crypt/crypt_hash_is_valid.o \ -src/misc/crypt/crypt_inits.o src/misc/crypt/crypt_ltc_mp_descriptor.o \ -src/misc/crypt/crypt_prng_descriptor.o src/misc/crypt/crypt_prng_is_valid.o \ -src/misc/crypt/crypt_prng_rng_descriptor.o src/misc/crypt/crypt_register_all_ciphers.o \ -src/misc/crypt/crypt_register_all_hashes.o src/misc/crypt/crypt_register_all_prngs.o \ -src/misc/crypt/crypt_register_cipher.o src/misc/crypt/crypt_register_hash.o \ -src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_sizes.o \ -src/misc/crypt/crypt_unregister_cipher.o src/misc/crypt/crypt_unregister_hash.o \ -src/misc/crypt/crypt_unregister_prng.o src/misc/deprecated.o src/misc/error_to_string.o \ -src/misc/hkdf/hkdf.o src/misc/hkdf/hkdf_test.o src/misc/mem_neq.o src/misc/padding/padding_depad.o \ -src/misc/padding/padding_pad.o src/misc/password_free.o src/misc/pbes/pbes.o src/misc/pbes/pbes1.o \ -src/misc/pbes/pbes2.o src/misc/pem/pem.o src/misc/pem/pem_pkcs.o src/misc/pem/pem_read.o \ -src/misc/pem/pem_ssh.o src/misc/pkcs12/pkcs12_kdf.o src/misc/pkcs12/pkcs12_utf8_to_utf16.o \ -src/misc/pkcs5/pkcs_5_1.o src/misc/pkcs5/pkcs_5_2.o src/misc/pkcs5/pkcs_5_test.o \ -src/misc/scrypt/scrypt.o src/misc/ssh/ssh_decode_sequence_multi.o \ -src/misc/ssh/ssh_encode_sequence_multi.o src/misc/zeromem.o src/modes/cbc/cbc_decrypt.o \ -src/modes/cbc/cbc_done.o src/modes/cbc/cbc_encrypt.o src/modes/cbc/cbc_getiv.o \ -src/modes/cbc/cbc_setiv.o src/modes/cbc/cbc_start.o src/modes/cfb/cfb_decrypt.o \ -src/modes/cfb/cfb_done.o src/modes/cfb/cfb_encrypt.o src/modes/cfb/cfb_getiv.o \ -src/modes/cfb/cfb_setiv.o src/modes/cfb/cfb_start.o src/modes/ctr/ctr_decrypt.o \ -src/modes/ctr/ctr_done.o src/modes/ctr/ctr_encrypt.o src/modes/ctr/ctr_getiv.o \ -src/modes/ctr/ctr_setiv.o src/modes/ctr/ctr_start.o src/modes/ctr/ctr_test.o \ -src/modes/ecb/ecb_decrypt.o src/modes/ecb/ecb_done.o src/modes/ecb/ecb_encrypt.o \ -src/modes/ecb/ecb_start.o src/modes/f8/f8_decrypt.o src/modes/f8/f8_done.o src/modes/f8/f8_encrypt.o \ -src/modes/f8/f8_getiv.o src/modes/f8/f8_setiv.o src/modes/f8/f8_start.o src/modes/f8/f8_test_mode.o \ -src/modes/lrw/lrw_decrypt.o src/modes/lrw/lrw_done.o src/modes/lrw/lrw_encrypt.o \ -src/modes/lrw/lrw_getiv.o src/modes/lrw/lrw_process.o src/modes/lrw/lrw_setiv.o \ -src/modes/lrw/lrw_start.o src/modes/lrw/lrw_test.o src/modes/ofb/ofb_decrypt.o src/modes/ofb/ofb_done.o \ -src/modes/ofb/ofb_encrypt.o src/modes/ofb/ofb_getiv.o src/modes/ofb/ofb_setiv.o \ -src/modes/ofb/ofb_start.o src/modes/xts/xts_decrypt.o src/modes/xts/xts_done.o \ -src/modes/xts/xts_encrypt.o src/modes/xts/xts_init.o src/modes/xts/xts_mult_x.o \ -src/modes/xts/xts_test.o src/pk/asn1/der/bit/der_decode_bit_string.o \ -src/pk/asn1/der/bit/der_decode_raw_bit_string.o src/pk/asn1/der/bit/der_encode_bit_string.o \ -src/pk/asn1/der/bit/der_encode_raw_bit_string.o src/pk/asn1/der/bit/der_length_bit_string.o \ -src/pk/asn1/der/boolean/der_decode_boolean.o src/pk/asn1/der/boolean/der_encode_boolean.o \ -src/pk/asn1/der/boolean/der_length_boolean.o src/pk/asn1/der/choice/der_decode_choice.o \ -src/pk/asn1/der/custom_type/der_decode_custom_type.o \ -src/pk/asn1/der/custom_type/der_encode_custom_type.o \ -src/pk/asn1/der/custom_type/der_length_custom_type.o src/pk/asn1/der/general/der_asn1_maps.o \ -src/pk/asn1/der/general/der_decode_asn1_identifier.o src/pk/asn1/der/general/der_decode_asn1_length.o \ -src/pk/asn1/der/general/der_encode_asn1_identifier.o src/pk/asn1/der/general/der_encode_asn1_length.o \ -src/pk/asn1/der/general/der_length_asn1_identifier.o src/pk/asn1/der/general/der_length_asn1_length.o \ -src/pk/asn1/der/generalizedtime/der_decode_generalizedtime.o \ -src/pk/asn1/der/generalizedtime/der_encode_generalizedtime.o \ -src/pk/asn1/der/generalizedtime/der_length_generalizedtime.o \ -src/pk/asn1/der/ia5/der_decode_ia5_string.o src/pk/asn1/der/ia5/der_encode_ia5_string.o \ -src/pk/asn1/der/ia5/der_length_ia5_string.o src/pk/asn1/der/integer/der_decode_integer.o \ -src/pk/asn1/der/integer/der_encode_integer.o src/pk/asn1/der/integer/der_length_integer.o \ -src/pk/asn1/der/object_identifier/der_decode_object_identifier.o \ -src/pk/asn1/der/object_identifier/der_encode_object_identifier.o \ -src/pk/asn1/der/object_identifier/der_length_object_identifier.o \ -src/pk/asn1/der/octet/der_decode_octet_string.o src/pk/asn1/der/octet/der_encode_octet_string.o \ -src/pk/asn1/der/octet/der_length_octet_string.o \ -src/pk/asn1/der/printable_string/der_decode_printable_string.o \ -src/pk/asn1/der/printable_string/der_encode_printable_string.o \ -src/pk/asn1/der/printable_string/der_length_printable_string.o \ -src/pk/asn1/der/sequence/der_decode_sequence_ex.o \ -src/pk/asn1/der/sequence/der_decode_sequence_flexi.o \ -src/pk/asn1/der/sequence/der_decode_sequence_multi.o \ -src/pk/asn1/der/sequence/der_encode_sequence_ex.o \ -src/pk/asn1/der/sequence/der_encode_sequence_multi.o \ -src/pk/asn1/der/sequence/der_flexi_sequence_cmp.o src/pk/asn1/der/sequence/der_length_sequence.o \ -src/pk/asn1/der/sequence/der_sequence_free.o src/pk/asn1/der/sequence/der_sequence_shrink.o \ -src/pk/asn1/der/set/der_encode_set.o src/pk/asn1/der/set/der_encode_setof.o \ -src/pk/asn1/der/short_integer/der_decode_short_integer.o \ -src/pk/asn1/der/short_integer/der_encode_short_integer.o \ -src/pk/asn1/der/short_integer/der_length_short_integer.o \ -src/pk/asn1/der/teletex_string/der_decode_teletex_string.o \ -src/pk/asn1/der/teletex_string/der_length_teletex_string.o \ -src/pk/asn1/der/utctime/der_decode_utctime.o src/pk/asn1/der/utctime/der_encode_utctime.o \ -src/pk/asn1/der/utctime/der_length_utctime.o src/pk/asn1/der/utf8/der_decode_utf8_string.o \ -src/pk/asn1/der/utf8/der_encode_utf8_string.o src/pk/asn1/der/utf8/der_length_utf8_string.o \ -src/pk/asn1/oid/pk_get.o src/pk/asn1/oid/pk_oid_cmp.o src/pk/asn1/oid/pk_oid_str.o \ -src/pk/asn1/pkcs8/pkcs8_decode_flexi.o src/pk/asn1/pkcs8/pkcs8_get.o \ -src/pk/asn1/x509/x509_decode_public_key_from_certificate.o src/pk/asn1/x509/x509_decode_spki.o \ -src/pk/asn1/x509/x509_decode_subject_public_key_info.o \ -src/pk/asn1/x509/x509_encode_subject_public_key_info.o src/pk/asn1/x509/x509_get_pka.o \ -src/pk/asn1/x509/x509_import_spki.o src/pk/dh/dh.o src/pk/dh/dh_check_pubkey.o src/pk/dh/dh_export.o \ -src/pk/dh/dh_export_key.o src/pk/dh/dh_free.o src/pk/dh/dh_generate_key.o src/pk/dh/dh_import.o \ -src/pk/dh/dh_import_pkcs8.o src/pk/dh/dh_set.o src/pk/dh/dh_set_pg_dhparam.o \ -src/pk/dh/dh_shared_secret.o src/pk/dsa/dsa_decrypt_key.o src/pk/dsa/dsa_encrypt_key.o \ -src/pk/dsa/dsa_export.o src/pk/dsa/dsa_free.o src/pk/dsa/dsa_generate_key.o \ -src/pk/dsa/dsa_generate_pqg.o src/pk/dsa/dsa_import.o src/pk/dsa/dsa_import_pkcs8.o \ -src/pk/dsa/dsa_init.o src/pk/dsa/dsa_make_key.o src/pk/dsa/dsa_set.o src/pk/dsa/dsa_set_pqg_dsaparam.o \ -src/pk/dsa/dsa_shared_secret.o src/pk/dsa/dsa_sign_hash.o src/pk/dsa/dsa_verify_hash.o \ -src/pk/dsa/dsa_verify_key.o src/pk/ec25519/ec25519_crypto_ctx.o src/pk/ec25519/ec25519_export.o \ -src/pk/ec25519/ec25519_import_pkcs8.o src/pk/ec25519/tweetnacl.o src/pk/ec448/ec448_common.o \ -src/pk/ec448/ec448_crypto_ctx.o src/pk/ec448/ec448_export.o src/pk/ec448/ec448_import_pkcs8.o \ -src/pk/ecc/ecc.o src/pk/ecc/ecc_ansi_x963_export.o src/pk/ecc/ecc_ansi_x963_import.o \ -src/pk/ecc/ecc_decrypt_key.o src/pk/ecc/ecc_encrypt_key.o src/pk/ecc/ecc_export.o \ -src/pk/ecc/ecc_export_openssl.o src/pk/ecc/ecc_find_curve.o src/pk/ecc/ecc_free.o \ -src/pk/ecc/ecc_get_key.o src/pk/ecc/ecc_get_oid_str.o src/pk/ecc/ecc_get_size.o src/pk/ecc/ecc_import.o \ -src/pk/ecc/ecc_import_openssl.o src/pk/ecc/ecc_import_pkcs8.o src/pk/ecc/ecc_import_x509.o \ -src/pk/ecc/ecc_make_key.o src/pk/ecc/ecc_recover_key.o src/pk/ecc/ecc_rfc6979_key.o \ -src/pk/ecc/ecc_set_curve.o src/pk/ecc/ecc_set_curve_internal.o src/pk/ecc/ecc_set_key.o \ -src/pk/ecc/ecc_shared_secret.o src/pk/ecc/ecc_sign_hash.o src/pk/ecc/ecc_sign_hash_eth27.o \ -src/pk/ecc/ecc_sign_hash_internal.o src/pk/ecc/ecc_sign_hash_rfc5656.o \ -src/pk/ecc/ecc_sign_hash_rfc7518.o src/pk/ecc/ecc_sign_hash_x962.o src/pk/ecc/ecc_sizes.o \ -src/pk/ecc/ecc_ssh_ecdsa_encode_name.o src/pk/ecc/ecc_verify_hash.o src/pk/ecc/ecc_verify_hash_eth27.o \ -src/pk/ecc/ecc_verify_hash_internal.o src/pk/ecc/ecc_verify_hash_rfc5656.o \ -src/pk/ecc/ecc_verify_hash_rfc7518.o src/pk/ecc/ecc_verify_hash_x962.o \ -src/pk/ecc/ltc_ecc_export_point.o src/pk/ecc/ltc_ecc_import_point.o src/pk/ecc/ltc_ecc_is_point.o \ -src/pk/ecc/ltc_ecc_is_point_at_infinity.o src/pk/ecc/ltc_ecc_map.o src/pk/ecc/ltc_ecc_mul2add.o \ -src/pk/ecc/ltc_ecc_mulmod.o src/pk/ecc/ltc_ecc_mulmod_timing.o src/pk/ecc/ltc_ecc_points.o \ -src/pk/ecc/ltc_ecc_projective_add_point.o src/pk/ecc/ltc_ecc_projective_dbl_point.o \ -src/pk/ecc/ltc_ecc_verify_key.o src/pk/ed25519/ed25519_export.o src/pk/ed25519/ed25519_import.o \ -src/pk/ed25519/ed25519_import_pkcs8.o src/pk/ed25519/ed25519_import_raw.o \ -src/pk/ed25519/ed25519_import_x509.o src/pk/ed25519/ed25519_make_key.o src/pk/ed25519/ed25519_sign.o \ -src/pk/ed25519/ed25519_verify.o src/pk/ed448/ed448_export.o src/pk/ed448/ed448_import.o \ -src/pk/ed448/ed448_import_pkcs8.o src/pk/ed448/ed448_import_raw.o src/pk/ed448/ed448_import_x509.o \ -src/pk/ed448/ed448_make_key.o src/pk/ed448/ed448_sign.o src/pk/ed448/ed448_verify.o src/pk/pka_key.o \ -src/pk/pkcs1/pkcs_1_i2osp.o src/pk/pkcs1/pkcs_1_mgf1.o src/pk/pkcs1/pkcs_1_oaep_decode.o \ -src/pk/pkcs1/pkcs_1_oaep_encode.o src/pk/pkcs1/pkcs_1_os2ip.o src/pk/pkcs1/pkcs_1_pss_decode.o \ -src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/pkcs1/pkcs_1_v1_5_decode.o src/pk/pkcs1/pkcs_1_v1_5_encode.o \ -src/pk/rsa/rsa_decrypt_key.o src/pk/rsa/rsa_encrypt_key.o src/pk/rsa/rsa_export.o \ -src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_get_size.o src/pk/rsa/rsa_import.o \ -src/pk/rsa/rsa_import_pkcs8.o src/pk/rsa/rsa_import_x509.o src/pk/rsa/rsa_key.o \ -src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_set.o src/pk/rsa/rsa_sign_hash.o \ -src/pk/rsa/rsa_sign_saltlen_get.o src/pk/rsa/rsa_verify_hash.o src/pk/x25519/x25519_export.o \ -src/pk/x25519/x25519_import.o src/pk/x25519/x25519_import_pkcs8.o src/pk/x25519/x25519_import_raw.o \ -src/pk/x25519/x25519_import_x509.o src/pk/x25519/x25519_make_key.o \ -src/pk/x25519/x25519_shared_secret.o src/pk/x448/x448_export.o src/pk/x448/x448_import.o \ -src/pk/x448/x448_import_pkcs8.o src/pk/x448/x448_import_raw.o src/pk/x448/x448_import_x509.o \ -src/pk/x448/x448_make_key.o src/pk/x448/x448_shared_secret.o src/prngs/chacha20.o src/prngs/fortuna.o \ -src/prngs/rc4.o src/prngs/rng_get_bytes.o src/prngs/rng_make_prng.o src/prngs/sober128.o \ -src/prngs/sprng.o src/prngs/yarrow.o src/stream/chacha/chacha_crypt.o src/stream/chacha/chacha_done.o \ -src/stream/chacha/chacha_ivctr32.o src/stream/chacha/chacha_ivctr64.o \ -src/stream/chacha/chacha_keystream.o src/stream/chacha/chacha_memory.o \ -src/stream/chacha/chacha_setup.o src/stream/chacha/chacha_test.o src/stream/chacha/xchacha20_memory.o \ -src/stream/chacha/xchacha20_setup.o src/stream/chacha/xchacha20_test.o src/stream/rabbit/rabbit.o \ -src/stream/rabbit/rabbit_memory.o src/stream/rc4/rc4_stream.o src/stream/rc4/rc4_stream_memory.o \ -src/stream/rc4/rc4_test.o src/stream/salsa20/salsa20_crypt.o src/stream/salsa20/salsa20_done.o \ -src/stream/salsa20/salsa20_ivctr64.o src/stream/salsa20/salsa20_keystream.o \ -src/stream/salsa20/salsa20_memory.o src/stream/salsa20/salsa20_setup.o \ -src/stream/salsa20/salsa20_test.o src/stream/salsa20/xsalsa20_memory.o \ -src/stream/salsa20/xsalsa20_setup.o src/stream/salsa20/xsalsa20_test.o \ -src/stream/sober128/sober128_stream.o src/stream/sober128/sober128_stream_memory.o \ -src/stream/sober128/sober128_test.o src/stream/sosemanuk/sosemanuk.o \ -src/stream/sosemanuk/sosemanuk_memory.o src/stream/sosemanuk/sosemanuk_test.o -else -OBJECTS=pre_gen/tomcrypt_amalgam.o - -LTC_CFLAGS := $(LTC_CFLAGS) -Wno-shadow -Isrc/ciphers/aes -Isrc/ciphers/safer -Isrc/ciphers/twofish -Isrc/hashes/whirl -Isrc/stream/sober128 -endif - -# List of test objects to compile (all goes to libtomcrypt_prof.a) -TOBJECTS=tests/argon2_test.o tests/base16_test.o tests/base32_test.o tests/base64_test.o \ -tests/bcrypt_test.o tests/cipher_hash_test.o tests/common.o tests/deprecated_test.o tests/der_test.o \ -tests/dh_test.o tests/dsa_test.o tests/ecc_test.o tests/ed25519_test.o tests/ed448_test.o \ -tests/file_test.o tests/mac_test.o tests/misc_test.o tests/modes_test.o tests/mpi_test.o \ -tests/multi_test.o tests/no_null_termination_check_test.o tests/no_prng.o tests/padding_test.o \ -tests/pem_test.o tests/pk_oid_test.o tests/pkcs_1_eme_test.o tests/pkcs_1_emsa_test.o \ -tests/pkcs_1_oaep_test.o tests/pkcs_1_pss_test.o tests/pkcs_1_test.o tests/prng_test.o \ -tests/rotate_test.o tests/rsa_test.o tests/scrypt_test.o tests/siv_wycheproof_test.o tests/ssh_test.o \ -tests/store_test.o tests/test.o tests/x25519_test.o tests/x448_test.o - -# The following headers will be installed by "make install" -HEADERS_PUB=src/headers/tomcrypt.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cfg.h \ -src/headers/tomcrypt_cipher.h src/headers/tomcrypt_custom.h src/headers/tomcrypt_hash.h \ -src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h src/headers/tomcrypt_math.h \ -src/headers/tomcrypt_misc.h src/headers/tomcrypt_pk.h src/headers/tomcrypt_pkcs.h \ -src/headers/tomcrypt_prng.h - -HEADERS=$(HEADERS_PUB) src/headers/tomcrypt_private.h - -#These are the rules to make certain object files. -src/ciphers/aes/aes.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c -src/ciphers/twofish/twofish.o: src/ciphers/twofish/twofish.c src/ciphers/twofish/twofish_tab.c -src/hashes/sha2/sha224.o: src/hashes/sha2/sha224.c src/hashes/sha2/sha256.c -src/hashes/sha2/sha384.o: src/hashes/sha2/sha384.c src/hashes/sha2/sha512.c -src/hashes/sha2/sha512_224.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha512_224.c -src/hashes/sha2/sha512_256.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha512_256.c -src/hashes/whirl/whirl.o: src/hashes/whirl/whirl.c src/hashes/whirl/whirltab.c - - -$(DOBJECTS): LTC_CFLAGS := -Itests $(LTC_CFLAGS) -$(TOBJECTS): LTC_CFLAGS := -Itests $(LTC_CFLAGS) - -#Dependencies on *.h -$(OBJECTS): $(HEADERS) -$(DOBJECTS): $(HEADERS) $(THEADERS) -$(TOBJECTS): $(HEADERS) $(THEADERS) - -all: $(call print-help,all,Builds the library and all demos and test utils (test $(UNBROKEN_DEMOS) $(BROKEN_DEMOS))) all_test $(BROKEN_DEMOS) - -all_test: $(call print-help,all_test,Builds the library and all unbroken demos and test utils (test $(UNBROKEN_DEMOS))) test $(UNBROKEN_DEMOS) - -bins: $(call print-help,bins,Builds the library and all useful demos) $(USEFUL_DEMOS) - -check: test - ./test - -tvs: hashsum sizes constants tv_gen - ./tv_gen - ./.ci/coverage_more.sh - mv *_tv.txt notes/ - -pr-check: tvs - ./helper.pl -a -u - -#build the doxy files (requires Doxygen, tetex and patience) -doxygen: $(call print-help,doxygen,Builds the doxygen html documentation) - $(MAKE) -C doc/ $@ V=$(V) -doxy: $(call print-help,doxy,Builds the complete doxygen documentation including refman.pdf (takes long to generate)) - $(MAKE) -C doc/ $@ V=$(V) -docs: $(call print-help,docs,Builds the Developer Manual) - $(MAKE) -C doc/ $@ V=$(V) - -doc/crypt.pdf: $(call print-help,doc/crypt.pdf,Builds the Developer Manual) - $(MAKE) -C doc/ crypt.pdf V=$(V) - - -install_all: $(call print-help,install_all,Install everything - library bins docs tests) install install_bins install_docs - -INSTALL_OPTS ?= -m 644 - -.common_install: $(LIBNAME) - install -p -d $(DESTDIR)$(INCPATH) - install -p -d $(DESTDIR)$(LIBPATH) - $(INSTALL_CMD) -p $(INSTALL_OPTS) $(LIBNAME) $(DESTDIR)$(LIBPATH)/$(LIBNAME) - install -p -m 644 $(HEADERS_PUB) $(DESTDIR)$(INCPATH) - -$(DESTDIR)$(BINPATH): - install -p -d $(DESTDIR)$(BINPATH) - -.common_install_bins: $(USEFUL_DEMOS) $(DESTDIR)$(BINPATH) - for d in $(USEFUL_DEMOS); do $(INSTALL_CMD) -p -m 775 $$d $(DESTDIR)$(BINPATH)/ltc-$$d; done - $(INSTALL_CMD) -p -m 775 demos/ltc $(DESTDIR)$(BINPATH) - -install_docs: $(call print-help,install_docs,Installs the Developer Manual) doc/crypt.pdf - install -p -d $(DESTDIR)$(DATAPATH) - install -p -m 644 doc/crypt.pdf $(DESTDIR)$(DATAPATH) - -install_test: $(call print-help,install_test,Installs the self-test binary) test $(DESTDIR)$(BINPATH) - $(INSTALL_CMD) -p -m 775 $< $(DESTDIR)$(BINPATH)/ltc-$< - -install_hooks: $(call print-help,install_hooks,Installs the git hooks) - for s in `ls hooks/`; do ln -s ../../hooks/$$s .git/hooks/$$s; done - -uninstall_hooks: $(call print-help,uninstall_hooks,Uninstalls the git hooks) - for s in `ls hooks/`; do rm .git/hooks/$$s; done - -HEADER_FILES=$(notdir $(HEADERS_PUB)) -.common_uninstall: - $(UNINSTALL_CMD) $(DESTDIR)$(LIBPATH)/$(LIBNAME) - for d in $(USEFUL_DEMOS) test; do rm -f $(DESTDIR)$(BINPATH)/ltc-$$d; done - $(UNINSTALL_CMD) $(HEADER_FILES:%=$(DESTDIR)$(INCPATH)/%) - -#This rule cleans the source tree of all compiled code, not including the pdf -#documentation. -clean: $(call print-help,clean,Clean everything besides the pdf documentation) - ${silent} find . -type f \ - -name "*.o" \ - -o -name "*.a" \ - -o -name "*.obj" \ - -o -name "*.lib" \ - -o -name "*.exe" \ - -o -name "*.dll*" \ - -o -name "*.dylib*"\ - -o -name "*.so*" \ - -o -name "*.out" \ - -o -name "*.gcov" \ - -o -name "*.gcda" \ - -o -name "*.gcno" \ - -o -name "*.il" \ - -o -name "*.dyn" \ - -o -name "*.dpi" | xargs rm -f - ${silent} rm -f $(TIMING) $(TEST) $(DEMOS) - ${silent} rm -f *_tv.txt - ${silent} rm -f *.pc - ${silent} rm -rf `find . -type d -name "*.bin" | xargs` - ${silent} $(MAKE) -C doc/ clean V=${V} - -zipup: $(call print-help,zipup,Prepare the archives for a release) doc/crypt.pdf - @# Update the index, so diff-index won't fail in case the pdf has been created. - @# As the pdf creation modifies crypt.tex, git sometimes detects the - @# modified file, but misses that it's put back to its original version. - @git update-index --refresh - @git diff-index --quiet HEAD -- || ( echo "FAILURE: uncommited changes or not a git" && exit 1 ) - @perl helper.pl --check-all || ( echo "FAILURE: helper.pl --check-all errors" && exit 1 ) - rm -rf libtomcrypt-$(VERSION) crypt-$(VERSION).* - @# files/dirs excluded from "git archive" are defined in .gitattributes - git archive --format=tar --prefix=libtomcrypt-$(VERSION)/ HEAD | tar x - @echo 'fixme check' - -@(find libtomcrypt-$(VERSION)/ -type f | xargs grep 'FIXM[E]') && echo '############## BEWARE: the "fixme" marker was found !!! ##############' || true - mkdir -p libtomcrypt-$(VERSION)/doc - cp doc/crypt.pdf libtomcrypt-$(VERSION)/doc/crypt.pdf - $(MAKE) -C libtomcrypt-$(VERSION)/ pre_gen - tar -c libtomcrypt-$(VERSION)/ | xz -6e -c - > crypt-$(VERSION).tar.xz - zip -9rq crypt-$(VERSION).zip libtomcrypt-$(VERSION) - rm -rf libtomcrypt-$(VERSION) - gpg -b -a crypt-$(VERSION).tar.xz - gpg -b -a crypt-$(VERSION).zip - -codecheck: $(call print-help,codecheck,Check the code of the library) - perl helper.pl -a - perlcritic *.pl - -help: $(call print-help,help,That's what you're currently looking at) diff --git a/src/hashes/md2.c b/md2.c similarity index 65% rename from src/hashes/md2.c rename to md2.c index 4207504d..30ac4ecd 100644 --- a/src/hashes/md2.c +++ b/md2.c @@ -1,30 +1,35 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* MD2 (RFC 1319) hash function implementation by Tom St Denis */ +#include "mycrypt.h" -/** - @param md2.c - LTC_MD2 (RFC 1319) hash function implementation by Tom St Denis -*/ +#ifdef MD2 -#ifdef LTC_MD2 - -const struct ltc_hash_descriptor md2_desc = +const struct _hash_descriptor md2_desc = { "md2", 7, 16, 16, - /* OID */ - { 1, 2, 840, 113549, 2, 2, }, - 6, + /* DER encoding */ + { 0x30, 0x20, 0x30, 0x0C, 0x06, 0x08, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x02, 0x02, 0x05, 0x00, + 0x04, 0x10 }, + 18, &md2_init, &md2_process, &md2_done, - &md2_test, - NULL + &md2_test }; static const unsigned char PI_SUBST[256] = { @@ -49,25 +54,25 @@ static const unsigned char PI_SUBST[256] = { }; /* adds 16 bytes to the checksum */ -static void s_md2_update_chksum(hash_state *md) +static void md2_update_chksum(hash_state *md) { int j; unsigned char L; L = md->md2.chksum[15]; for (j = 0; j < 16; j++) { -/* caution, the RFC says its "C[j] = S[M[i*16+j] xor L]" but the reference source code [and test vectors] say +/* caution, the RFC says its "C[j] = S[M[i*16+j] xor L]" but the reference source code [and test vectors] say otherwise. */ L = (md->md2.chksum[j] ^= PI_SUBST[(int)(md->md2.buf[j] ^ L)] & 255); } } -static void s_md2_compress(hash_state *md) +static void md2_compress(hash_state *md) { int j, k; unsigned char t; - + /* copy block */ for (j = 0; j < 16; j++) { md->md2.X[16+j] = md->md2.buf[j]; @@ -85,67 +90,48 @@ static void s_md2_compress(hash_state *md) } } -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int md2_init(hash_state *md) +void md2_init(hash_state *md) { - LTC_ARGCHK(md != NULL); + _ARGCHK(md != NULL); - /* LTC_MD2 uses a zero'ed state... */ + /* MD2 uses a zero'ed state... */ zeromem(md->md2.X, sizeof(md->md2.X)); zeromem(md->md2.chksum, sizeof(md->md2.chksum)); zeromem(md->md2.buf, sizeof(md->md2.buf)); md->md2.curlen = 0; - return CRYPT_OK; } -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -int md2_process(hash_state *md, const unsigned char *in, unsigned long inlen) +int md2_process(hash_state *md, const unsigned char *buf, unsigned long len) { unsigned long n; - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(in != NULL); - if (md-> md2 .curlen > sizeof(md-> md2 .buf)) { - return CRYPT_INVALID_ARG; - } - while (inlen > 0) { - n = MIN(inlen, (16 - md->md2.curlen)); - XMEMCPY(md->md2.buf + md->md2.curlen, in, (size_t)n); + _ARGCHK(md != NULL); + _ARGCHK(buf != NULL); + if (md-> md2 .curlen > sizeof(md-> md2 .buf)) { + return CRYPT_INVALID_ARG; + } + while (len > 0) { + n = MIN(len, (16 - md->md2.curlen)); + XMEMCPY(md->md2.buf + md->md2.curlen, buf, (size_t)n); md->md2.curlen += n; - in += n; - inlen -= n; + buf += n; + len -= n; /* is 16 bytes full? */ if (md->md2.curlen == 16) { - s_md2_compress(md); - s_md2_update_chksum(md); + md2_compress(md); + md2_update_chksum(md); md->md2.curlen = 0; } } return CRYPT_OK; } -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (16 bytes) - @return CRYPT_OK if successful -*/ -int md2_done(hash_state * md, unsigned char *out) +int md2_done(hash_state * md, unsigned char *hash) { unsigned long i, k; - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); + _ARGCHK(md != NULL); + _ARGCHK(hash != NULL); if (md->md2.curlen >= sizeof(md->md2.buf)) { return CRYPT_INVALID_ARG; @@ -159,34 +145,30 @@ int md2_done(hash_state * md, unsigned char *out) } /* hash and update */ - s_md2_compress(md); - s_md2_update_chksum(md); + md2_compress(md); + md2_update_chksum(md); /* hash checksum */ XMEMCPY(md->md2.buf, md->md2.chksum, 16); - s_md2_compress(md); + md2_compress(md); /* output is lower 16 bytes of X */ - XMEMCPY(out, md->md2.X, 16); + XMEMCPY(hash, md->md2.X, 16); -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK zeromem(md, sizeof(hash_state)); #endif return CRYPT_OK; } -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ int md2_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else static const struct { - const char *msg; - unsigned char hash[16]; + char *msg; + unsigned char md[16]; } tests[] = { { "", {0x83,0x50,0xe5,0xa3,0xe2,0x4c,0x15,0x3d, @@ -219,20 +201,19 @@ int md2_test(void) } } }; - int i; - unsigned char tmp[16]; hash_state md; + unsigned char buf[16]; for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { md2_init(&md); - md2_process(&md, (unsigned char*)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - md2_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "MD2", i)) { + md2_process(&md, (unsigned char*)tests[i].msg, (unsigned long)strlen(tests[i].msg)); + md2_done(&md, buf); + if (memcmp(buf, tests[i].md, 16) != 0) { return CRYPT_FAIL_TESTVECTOR; } } - return CRYPT_OK; + return CRYPT_OK; #endif } diff --git a/md4.c b/md4.c new file mode 100644 index 00000000..5c2ea111 --- /dev/null +++ b/md4.c @@ -0,0 +1,271 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* Submitted by Dobes Vandermeer (dobes@smartt.com) */ +#include "mycrypt.h" + +#ifdef MD4 + +const struct _hash_descriptor md4_desc = +{ + "md4", + 6, + 16, + 64, + + /* DER encoding (not yet supported) */ + { 0x00 }, + 0, + + &md4_init, + &md4_process, + &md4_done, + &md4_test +}; + +#define S11 3 +#define S12 7 +#define S13 11 +#define S14 19 +#define S21 3 +#define S22 5 +#define S23 9 +#define S24 13 +#define S31 3 +#define S32 9 +#define S33 11 +#define S34 15 + +/* F, G and H are basic MD4 functions. */ +#define F(x, y, z) (z ^ (x & (y ^ z))) +#define G(x, y, z) ((x & y) | (z & (x | y))) +#define H(x, y, z) ((x) ^ (y) ^ (z)) + +/* ROTATE_LEFT rotates x left n bits. */ +#define ROTATE_LEFT(x, n) ROL(x, n) + +/* FF, GG and HH are transformations for rounds 1, 2 and 3 */ +/* Rotation is separate from addition to prevent recomputation */ + +#define FF(a, b, c, d, x, s) { \ + (a) += F ((b), (c), (d)) + (x); \ + (a) = ROTATE_LEFT ((a), (s)); \ + } +#define GG(a, b, c, d, x, s) { \ + (a) += G ((b), (c), (d)) + (x) + 0x5a827999UL; \ + (a) = ROTATE_LEFT ((a), (s)); \ + } +#define HH(a, b, c, d, x, s) { \ + (a) += H ((b), (c), (d)) + (x) + 0x6ed9eba1UL; \ + (a) = ROTATE_LEFT ((a), (s)); \ + } + +#ifdef CLEAN_STACK +static void _md4_compress(hash_state *md, unsigned char *buf) +#else +static void md4_compress(hash_state *md, unsigned char *buf) +#endif +{ + ulong32 x[16], a, b, c, d; + int i; + + /* copy state */ + a = md->md4.state[0]; + b = md->md4.state[1]; + c = md->md4.state[2]; + d = md->md4.state[3]; + + /* copy the state into 512-bits into W[0..15] */ + for (i = 0; i < 16; i++) { + LOAD32L(x[i], buf + (4*i)); + } + + /* Round 1 */ + FF (a, b, c, d, x[ 0], S11); /* 1 */ + FF (d, a, b, c, x[ 1], S12); /* 2 */ + FF (c, d, a, b, x[ 2], S13); /* 3 */ + FF (b, c, d, a, x[ 3], S14); /* 4 */ + FF (a, b, c, d, x[ 4], S11); /* 5 */ + FF (d, a, b, c, x[ 5], S12); /* 6 */ + FF (c, d, a, b, x[ 6], S13); /* 7 */ + FF (b, c, d, a, x[ 7], S14); /* 8 */ + FF (a, b, c, d, x[ 8], S11); /* 9 */ + FF (d, a, b, c, x[ 9], S12); /* 10 */ + FF (c, d, a, b, x[10], S13); /* 11 */ + FF (b, c, d, a, x[11], S14); /* 12 */ + FF (a, b, c, d, x[12], S11); /* 13 */ + FF (d, a, b, c, x[13], S12); /* 14 */ + FF (c, d, a, b, x[14], S13); /* 15 */ + FF (b, c, d, a, x[15], S14); /* 16 */ + + /* Round 2 */ + GG (a, b, c, d, x[ 0], S21); /* 17 */ + GG (d, a, b, c, x[ 4], S22); /* 18 */ + GG (c, d, a, b, x[ 8], S23); /* 19 */ + GG (b, c, d, a, x[12], S24); /* 20 */ + GG (a, b, c, d, x[ 1], S21); /* 21 */ + GG (d, a, b, c, x[ 5], S22); /* 22 */ + GG (c, d, a, b, x[ 9], S23); /* 23 */ + GG (b, c, d, a, x[13], S24); /* 24 */ + GG (a, b, c, d, x[ 2], S21); /* 25 */ + GG (d, a, b, c, x[ 6], S22); /* 26 */ + GG (c, d, a, b, x[10], S23); /* 27 */ + GG (b, c, d, a, x[14], S24); /* 28 */ + GG (a, b, c, d, x[ 3], S21); /* 29 */ + GG (d, a, b, c, x[ 7], S22); /* 30 */ + GG (c, d, a, b, x[11], S23); /* 31 */ + GG (b, c, d, a, x[15], S24); /* 32 */ + + /* Round 3 */ + HH (a, b, c, d, x[ 0], S31); /* 33 */ + HH (d, a, b, c, x[ 8], S32); /* 34 */ + HH (c, d, a, b, x[ 4], S33); /* 35 */ + HH (b, c, d, a, x[12], S34); /* 36 */ + HH (a, b, c, d, x[ 2], S31); /* 37 */ + HH (d, a, b, c, x[10], S32); /* 38 */ + HH (c, d, a, b, x[ 6], S33); /* 39 */ + HH (b, c, d, a, x[14], S34); /* 40 */ + HH (a, b, c, d, x[ 1], S31); /* 41 */ + HH (d, a, b, c, x[ 9], S32); /* 42 */ + HH (c, d, a, b, x[ 5], S33); /* 43 */ + HH (b, c, d, a, x[13], S34); /* 44 */ + HH (a, b, c, d, x[ 3], S31); /* 45 */ + HH (d, a, b, c, x[11], S32); /* 46 */ + HH (c, d, a, b, x[ 7], S33); /* 47 */ + HH (b, c, d, a, x[15], S34); /* 48 */ + + + /* Update our state */ + md->md4.state[0] = md->md4.state[0] + a; + md->md4.state[1] = md->md4.state[1] + b; + md->md4.state[2] = md->md4.state[2] + c; + md->md4.state[3] = md->md4.state[3] + d; +} + +#ifdef CLEAN_STACK +static void md4_compress(hash_state *md, unsigned char *buf) +{ + _md4_compress(md, buf); + burn_stack(sizeof(ulong32) * 20 + sizeof(int)); +} +#endif + +void md4_init(hash_state * md) +{ + _ARGCHK(md != NULL); + md->md4.state[0] = 0x67452301UL; + md->md4.state[1] = 0xefcdab89UL; + md->md4.state[2] = 0x98badcfeUL; + md->md4.state[3] = 0x10325476UL; + md->md4.length = 0; + md->md4.curlen = 0; +} + +HASH_PROCESS(md4_process, md4_compress, md4, 64) + +int md4_done(hash_state * md, unsigned char *hash) +{ + int i; + + _ARGCHK(md != NULL); + _ARGCHK(hash != NULL); + + if (md->md4.curlen >= sizeof(md->md4.buf)) { + return CRYPT_INVALID_ARG; + } + + /* increase the length of the message */ + md->md4.length += md->md4.curlen * 8; + + /* append the '1' bit */ + md->md4.buf[md->md4.curlen++] = (unsigned char)0x80; + + /* if the length is currently above 56 bytes we append zeros + * then compress. Then we can fall back to padding zeros and length + * encoding like normal. + */ + if (md->md4.curlen > 56) { + while (md->md4.curlen < 64) { + md->md4.buf[md->md4.curlen++] = (unsigned char)0; + } + md4_compress(md, md->md4.buf); + md->md4.curlen = 0; + } + + /* pad upto 56 bytes of zeroes */ + while (md->md4.curlen < 56) { + md->md4.buf[md->md4.curlen++] = (unsigned char)0; + } + + /* store length */ + STORE64L(md->md4.length, md->md4.buf+56); + md4_compress(md, md->md4.buf); + + /* copy output */ + for (i = 0; i < 4; i++) { + STORE32L(md->md4.state[i], hash+(4*i)); + } +#ifdef CLEAN_STACK + zeromem(md, sizeof(hash_state)); +#endif + return CRYPT_OK; +} + +int md4_test(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + static const struct md4_test_case { + char *input; + unsigned char digest[16]; + } cases[] = { + { "", + {0x31, 0xd6, 0xcf, 0xe0, 0xd1, 0x6a, 0xe9, 0x31, + 0xb7, 0x3c, 0x59, 0xd7, 0xe0, 0xc0, 0x89, 0xc0} }, + { "a", + {0xbd, 0xe5, 0x2c, 0xb3, 0x1d, 0xe3, 0x3e, 0x46, + 0x24, 0x5e, 0x05, 0xfb, 0xdb, 0xd6, 0xfb, 0x24} }, + { "abc", + {0xa4, 0x48, 0x01, 0x7a, 0xaf, 0x21, 0xd8, 0x52, + 0x5f, 0xc1, 0x0a, 0xe8, 0x7a, 0xa6, 0x72, 0x9d} }, + { "message digest", + {0xd9, 0x13, 0x0a, 0x81, 0x64, 0x54, 0x9f, 0xe8, + 0x18, 0x87, 0x48, 0x06, 0xe1, 0xc7, 0x01, 0x4b} }, + { "abcdefghijklmnopqrstuvwxyz", + {0xd7, 0x9e, 0x1c, 0x30, 0x8a, 0xa5, 0xbb, 0xcd, + 0xee, 0xa8, 0xed, 0x63, 0xdf, 0x41, 0x2d, 0xa9} }, + { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", + {0x04, 0x3f, 0x85, 0x82, 0xf2, 0x41, 0xdb, 0x35, + 0x1c, 0xe6, 0x27, 0xe1, 0x53, 0xe7, 0xf0, 0xe4} }, + { "12345678901234567890123456789012345678901234567890123456789012345678901234567890", + {0xe3, 0x3b, 0x4d, 0xdc, 0x9c, 0x38, 0xf2, 0x19, + 0x9c, 0x3e, 0x7b, 0x16, 0x4f, 0xcc, 0x05, 0x36} }, + }; + int i; + hash_state md; + unsigned char digest[16]; + + for(i = 0; i < (int)(sizeof(cases) / sizeof(cases[0])); i++) { + md4_init(&md); + md4_process(&md, (unsigned char *)cases[i].input, (unsigned long)strlen(cases[i].input)); + md4_done(&md, digest); + if (memcmp(digest, cases[i].digest, 16) != 0) { + return CRYPT_FAIL_TESTVECTOR; + } + + } + return CRYPT_OK; + #endif +} + +#endif + + diff --git a/src/hashes/md5.c b/md5.c similarity index 72% rename from src/hashes/md5.c rename to md5.c index 5c2f15c1..8f6e1eac 100644 --- a/src/hashes/md5.c +++ b/md5.c @@ -1,31 +1,37 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* MD5 hash function by Tom St Denis */ -/** - @file md5.c - LTC_MD5 hash function by Tom St Denis -*/ +#include "mycrypt.h" -#ifdef LTC_MD5 +#ifdef MD5 -const struct ltc_hash_descriptor md5_desc = +const struct _hash_descriptor md5_desc = { "md5", 3, 16, 64, - /* OID */ - { 1, 2, 840, 113549, 2, 5, }, - 6, + /* DER identifier */ + { 0x30, 0x20, 0x30, 0x0C, 0x06, 0x08, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x02, 0x05, 0x05, 0x00, + 0x04, 0x10 }, + 18, &md5_init, &md5_process, &md5_done, - &md5_test, - NULL + &md5_test }; #define F(x,y,z) (z ^ (x & (y ^ z))) @@ -33,8 +39,6 @@ const struct ltc_hash_descriptor md5_desc = #define H(x,y,z) (x^y^z) #define I(x,y,z) (y^(x|(~z))) -#ifdef LTC_SMALL_CODE - #define FF(a,b,c,d,M,s,t) \ a = (a + F(b,c,d) + M + t); a = ROL(a, s) + b; @@ -47,6 +51,8 @@ const struct ltc_hash_descriptor md5_desc = #define II(a,b,c,d,M,s,t) \ a = (a + I(b,c,d) + M + t); a = ROL(a, s) + b; +#ifdef SMALL_CODE + static const unsigned char Worder[64] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 1,6,11,0,5,10,15,4,9,14,3,8,13,2,7,12, @@ -72,31 +78,16 @@ static const ulong32 Korder[64] = { 0x6fa87e4fUL, 0xfe2ce6e0UL, 0xa3014314UL, 0x4e0811a1UL, 0xf7537e82UL, 0xbd3af235UL, 0x2ad7d2bbUL, 0xeb86d391UL }; +#endif + +#ifdef CLEAN_STACK +static void _md5_compress(hash_state *md, unsigned char *buf) #else - -#define FF(a,b,c,d,M,s,t) \ - a = (a + F(b,c,d) + M + t); a = ROLc(a, s) + b; - -#define GG(a,b,c,d,M,s,t) \ - a = (a + G(b,c,d) + M + t); a = ROLc(a, s) + b; - -#define HH(a,b,c,d,M,s,t) \ - a = (a + H(b,c,d) + M + t); a = ROLc(a, s) + b; - -#define II(a,b,c,d,M,s,t) \ - a = (a + I(b,c,d) + M + t); a = ROLc(a, s) + b; - - -#endif - -#ifdef LTC_CLEAN_STACK -static int ss_md5_compress(hash_state *md, const unsigned char *buf) -#else -static int s_md5_compress(hash_state *md, const unsigned char *buf) +static void md5_compress(hash_state *md, unsigned char *buf) #endif { ulong32 i, W[16], a, b, c, d; -#ifdef LTC_SMALL_CODE +#ifdef SMALL_CODE ulong32 t; #endif @@ -104,14 +95,14 @@ static int s_md5_compress(hash_state *md, const unsigned char *buf) for (i = 0; i < 16; i++) { LOAD32L(W[i], buf + (4*i)); } - + /* copy state */ a = md->md5.state[0]; b = md->md5.state[1]; c = md->md5.state[2]; d = md->md5.state[3]; -#ifdef LTC_SMALL_CODE +#ifdef SMALL_CODE for (i = 0; i < 16; ++i) { FF(a,b,c,d,W[Worder[i]],Rorder[i],Korder[i]); t = d; d = c; c = b; b = a; a = t; @@ -203,58 +194,35 @@ static int s_md5_compress(hash_state *md, const unsigned char *buf) md->md5.state[1] = md->md5.state[1] + b; md->md5.state[2] = md->md5.state[2] + c; md->md5.state[3] = md->md5.state[3] + d; - - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -static int s_md5_compress(hash_state *md, const unsigned char *buf) +#ifdef CLEAN_STACK +static void md5_compress(hash_state *md, unsigned char *buf) { - int err; - err = ss_md5_compress(md, buf); + _md5_compress(md, buf); burn_stack(sizeof(ulong32) * 21); - return err; } #endif -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int md5_init(hash_state * md) +void md5_init(hash_state * md) { - LTC_ARGCHK(md != NULL); + _ARGCHK(md != NULL); md->md5.state[0] = 0x67452301UL; md->md5.state[1] = 0xefcdab89UL; md->md5.state[2] = 0x98badcfeUL; md->md5.state[3] = 0x10325476UL; md->md5.curlen = 0; md->md5.length = 0; - return CRYPT_OK; } -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(md5_process, s_md5_compress, md5, 64) +HASH_PROCESS(md5_process, md5_compress, md5, 64) -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (16 bytes) - @return CRYPT_OK if successful -*/ -int md5_done(hash_state * md, unsigned char *out) +int md5_done(hash_state * md, unsigned char *hash) { int i; - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); + _ARGCHK(md != NULL); + _ARGCHK(hash != NULL); if (md->md5.curlen >= sizeof(md->md5.buf)) { return CRYPT_INVALID_ARG; @@ -275,7 +243,7 @@ int md5_done(hash_state * md, unsigned char *out) while (md->md5.curlen < 64) { md->md5.buf[md->md5.curlen++] = (unsigned char)0; } - s_md5_compress(md, md->md5.buf); + md5_compress(md, md->md5.buf); md->md5.curlen = 0; } @@ -286,52 +254,48 @@ int md5_done(hash_state * md, unsigned char *out) /* store length */ STORE64L(md->md5.length, md->md5.buf+56); - s_md5_compress(md, md->md5.buf); + md5_compress(md, md->md5.buf); /* copy output */ for (i = 0; i < 4; i++) { - STORE32L(md->md5.state[i], out+(4*i)); + STORE32L(md->md5.state[i], hash+(4*i)); } -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK zeromem(md, sizeof(hash_state)); #endif return CRYPT_OK; } -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ int md5_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else static const struct { - const char *msg; + char *msg; unsigned char hash[16]; } tests[] = { { "", - { 0xd4, 0x1d, 0x8c, 0xd9, 0x8f, 0x00, 0xb2, 0x04, + { 0xd4, 0x1d, 0x8c, 0xd9, 0x8f, 0x00, 0xb2, 0x04, 0xe9, 0x80, 0x09, 0x98, 0xec, 0xf8, 0x42, 0x7e } }, { "a", - {0x0c, 0xc1, 0x75, 0xb9, 0xc0, 0xf1, 0xb6, 0xa8, + {0x0c, 0xc1, 0x75, 0xb9, 0xc0, 0xf1, 0xb6, 0xa8, 0x31, 0xc3, 0x99, 0xe2, 0x69, 0x77, 0x26, 0x61 } }, { "abc", - { 0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0, + { 0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0, 0xd6, 0x96, 0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72 } }, - { "message digest", - { 0xf9, 0x6b, 0x69, 0x7d, 0x7c, 0xb7, 0x93, 0x8d, - 0x52, 0x5a, 0x2f, 0x31, 0xaa, 0xf1, 0x61, 0xd0 } }, + { "message digest", + { 0xf9, 0x6b, 0x69, 0x7d, 0x7c, 0xb7, 0x93, 0x8d, + 0x52, 0x5a, 0x2f, 0x31, 0xaa, 0xf1, 0x61, 0xd0 } }, { "abcdefghijklmnopqrstuvwxyz", - { 0xc3, 0xfc, 0xd3, 0xd7, 0x61, 0x92, 0xe4, 0x00, + { 0xc3, 0xfc, 0xd3, 0xd7, 0x61, 0x92, 0xe4, 0x00, 0x7d, 0xfb, 0x49, 0x6c, 0xca, 0x67, 0xe1, 0x3b } }, { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", - { 0xd1, 0x74, 0xab, 0x98, 0xd2, 0x77, 0xd9, 0xf5, + { 0xd1, 0x74, 0xab, 0x98, 0xd2, 0x77, 0xd9, 0xf5, 0xa5, 0x61, 0x1c, 0x2c, 0x9f, 0x41, 0x9d, 0x9f } }, { "12345678901234567890123456789012345678901234567890123456789012345678901234567890", - { 0x57, 0xed, 0xf4, 0xa2, 0x2b, 0xe3, 0xc9, 0x55, - 0xac, 0x49, 0xda, 0x2e, 0x21, 0x07, 0xb6, 0x7a } }, + { 0x57, 0xed, 0xf4, 0xa2, 0x2b, 0xe3, 0xc9, 0x55, + 0xac, 0x49, 0xda, 0x2e, 0x21, 0x07, 0xb6, 0x7a } }, { NULL, { 0 } } }; @@ -341,9 +305,9 @@ int md5_test(void) for (i = 0; tests[i].msg != NULL; i++) { md5_init(&md); - md5_process(&md, (unsigned char *)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); + md5_process(&md, (unsigned char *)tests[i].msg, (unsigned long)strlen(tests[i].msg)); md5_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "MD5", i)) { + if (memcmp(tmp, tests[i].hash, 16) != 0) { return CRYPT_FAIL_TESTVECTOR; } } @@ -351,13 +315,6 @@ int md5_test(void) #endif } -#undef F -#undef G -#undef H -#undef I -#undef FF -#undef GG -#undef HH -#undef II - #endif + + diff --git a/mpi.c b/mpi.c new file mode 100644 index 00000000..ae120d87 --- /dev/null +++ b/mpi.c @@ -0,0 +1,8636 @@ +/* Start: bn_error.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +static const struct { + int code; + char *msg; +} msgs[] = { + { MP_OKAY, "Successful" }, + { MP_MEM, "Out of heap" }, + { MP_VAL, "Value out of range" } +}; + +/* return a char * string for a given code */ +char *mp_error_to_string(int code) +{ + int x; + + /* scan the lookup table for the given message */ + for (x = 0; x < (int)(sizeof(msgs) / sizeof(msgs[0])); x++) { + if (msgs[x].code == code) { + return msgs[x].msg; + } + } + + /* generic reply for invalid code */ + return "Invalid error code"; +} + + +/* End: bn_error.c */ + +/* Start: bn_fast_mp_invmod.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* computes the modular inverse via binary extended euclidean algorithm, + * that is c = 1/a mod b + * + * Based on mp_invmod except this is optimized for the case where b is + * odd as per HAC Note 14.64 on pp. 610 + */ +int +fast_mp_invmod (mp_int * a, mp_int * b, mp_int * c) +{ + mp_int x, y, u, v, B, D; + int res, neg; + + /* 2. [modified] b must be odd */ + if (mp_iseven (b) == 1) { + return MP_VAL; + } + + /* init all our temps */ + if ((res = mp_init_multi(&x, &y, &u, &v, &B, &D, NULL)) != MP_OKAY) { + return res; + } + + /* x == modulus, y == value to invert */ + if ((res = mp_copy (b, &x)) != MP_OKAY) { + goto __ERR; + } + + /* we need y = |a| */ + if ((res = mp_abs (a, &y)) != MP_OKAY) { + goto __ERR; + } + + /* 3. u=x, v=y, A=1, B=0, C=0,D=1 */ + if ((res = mp_copy (&x, &u)) != MP_OKAY) { + goto __ERR; + } + if ((res = mp_copy (&y, &v)) != MP_OKAY) { + goto __ERR; + } + mp_set (&D, 1); + +top: + /* 4. while u is even do */ + while (mp_iseven (&u) == 1) { + /* 4.1 u = u/2 */ + if ((res = mp_div_2 (&u, &u)) != MP_OKAY) { + goto __ERR; + } + /* 4.2 if B is odd then */ + if (mp_isodd (&B) == 1) { + if ((res = mp_sub (&B, &x, &B)) != MP_OKAY) { + goto __ERR; + } + } + /* B = B/2 */ + if ((res = mp_div_2 (&B, &B)) != MP_OKAY) { + goto __ERR; + } + } + + /* 5. while v is even do */ + while (mp_iseven (&v) == 1) { + /* 5.1 v = v/2 */ + if ((res = mp_div_2 (&v, &v)) != MP_OKAY) { + goto __ERR; + } + /* 5.2 if D is odd then */ + if (mp_isodd (&D) == 1) { + /* D = (D-x)/2 */ + if ((res = mp_sub (&D, &x, &D)) != MP_OKAY) { + goto __ERR; + } + } + /* D = D/2 */ + if ((res = mp_div_2 (&D, &D)) != MP_OKAY) { + goto __ERR; + } + } + + /* 6. if u >= v then */ + if (mp_cmp (&u, &v) != MP_LT) { + /* u = u - v, B = B - D */ + if ((res = mp_sub (&u, &v, &u)) != MP_OKAY) { + goto __ERR; + } + + if ((res = mp_sub (&B, &D, &B)) != MP_OKAY) { + goto __ERR; + } + } else { + /* v - v - u, D = D - B */ + if ((res = mp_sub (&v, &u, &v)) != MP_OKAY) { + goto __ERR; + } + + if ((res = mp_sub (&D, &B, &D)) != MP_OKAY) { + goto __ERR; + } + } + + /* if not zero goto step 4 */ + if (mp_iszero (&u) == 0) { + goto top; + } + + /* now a = C, b = D, gcd == g*v */ + + /* if v != 1 then there is no inverse */ + if (mp_cmp_d (&v, 1) != MP_EQ) { + res = MP_VAL; + goto __ERR; + } + + /* b is now the inverse */ + neg = a->sign; + while (D.sign == MP_NEG) { + if ((res = mp_add (&D, b, &D)) != MP_OKAY) { + goto __ERR; + } + } + mp_exch (&D, c); + c->sign = neg; + res = MP_OKAY; + +__ERR:mp_clear_multi (&x, &y, &u, &v, &B, &D, NULL); + return res; +} + +/* End: bn_fast_mp_invmod.c */ + +/* Start: bn_fast_mp_montgomery_reduce.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* computes xR**-1 == x (mod N) via Montgomery Reduction + * + * This is an optimized implementation of mp_montgomery_reduce + * which uses the comba method to quickly calculate the columns of the + * reduction. + * + * Based on Algorithm 14.32 on pp.601 of HAC. +*/ +int +fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) +{ + int ix, res, olduse; + mp_word W[MP_WARRAY]; + + /* get old used count */ + olduse = x->used; + + /* grow a as required */ + if (x->alloc < n->used + 1) { + if ((res = mp_grow (x, n->used + 1)) != MP_OKAY) { + return res; + } + } + + /* first we have to get the digits of the input into + * an array of double precision words W[...] + */ + { + register mp_word *_W; + register mp_digit *tmpx; + + /* alias for the W[] array */ + _W = W; + + /* alias for the digits of x*/ + tmpx = x->dp; + + /* copy the digits of a into W[0..a->used-1] */ + for (ix = 0; ix < x->used; ix++) { + *_W++ = *tmpx++; + } + + /* zero the high words of W[a->used..m->used*2] */ + for (; ix < n->used * 2 + 1; ix++) { + *_W++ = 0; + } + } + + /* now we proceed to zero successive digits + * from the least significant upwards + */ +#ifdef LTMSSE + // compute globals we'd like to have in MMX registers + asm ("movl $268435455,%%eax \n\t" //mm2 == MP_MASK + "movd %%eax,%%mm2 \n\t" + "movd %0,%%mm3 \n\t" //mm3 = rho + "movq (%1),%%mm0 \n\t" // W[ix] for ix=0 + ::"r"(rho),"r"(W):"%eax"); +#endif + + for (ix = 0; ix < n->used; ix++) { + /* mu = ai * m' mod b + * + * We avoid a double precision multiplication (which isn't required) + * by casting the value down to a mp_digit. Note this requires + * that W[ix-1] have the carry cleared (see after the inner loop) + */ +#ifndef LTMSSE + register mp_digit mu; + mu = (mp_digit) (((W[ix] & MP_MASK) * rho) & MP_MASK); +#else + asm("pmuludq %mm3,%mm0 \n\t" // multiply against rho + "pand %mm2,%mm0 \n\t"); // mu == mm0 +#endif + /* a = a + mu * m * b**i + * + * This is computed in place and on the fly. The multiplication + * by b**i is handled by offseting which columns the results + * are added to. + * + * Note the comba method normally doesn't handle carries in the + * inner loop In this case we fix the carry from the previous + * column since the Montgomery reduction requires digits of the + * result (so far) [see above] to work. This is + * handled by fixing up one carry after the inner loop. The + * carry fixups are done in order so after these loops the + * first m->used words of W[] have the carries fixed + */ + { + register int iy; + register mp_digit *tmpn; + register mp_word *_W; + + /* alias for the digits of the modulus */ + tmpn = n->dp; + + /* Alias for the columns set by an offset of ix */ + _W = W + ix; + + /* inner loop */ + for (iy = 0; iy < n->used; iy++) { +#ifndef LTMSSE + *_W++ += ((mp_word)mu) * ((mp_word)*tmpn++); +#else +// SSE version + asm ("movd (%0), %%mm1 \n\t" // load right side + "pmuludq %%mm0,%%mm1 \n\t" // multiply into left side + "paddq (%1),%%mm1 \n\t" // add 64-bit result out + "movq %%mm1,(%1)" // store result + :: "r"(tmpn), "r"(_W)); + // update pointers + ++tmpn; + ++_W; +#endif + } + } + + /* now fix carry for next digit, W[ix+1] */ +#ifndef LTMSSE + W[ix + 1] += W[ix] >> ((mp_word) DIGIT_BIT); +#else + asm("movq (%0),%%mm0 \n\t" // W[ix] + "psrlq $28,%%mm0 \n\t" // W[ix]>>28 + "paddq 8(%0),%%mm0 \n\t" // W[ix+1] + W[ix]>>28 + "movq %%mm0,8(%0) " // store + ::"r"(&W[ix])); +#endif +} + + /* now we have to propagate the carries and + * shift the words downward [all those least + * significant digits we zeroed]. + */ + { + register mp_digit *tmpx; + register mp_word *_W, *_W1; + + /* nox fix rest of carries */ + + /* alias for current word */ + _W1 = W + ix; + + /* alias for next word, where the carry goes */ + _W = W + ++ix; + + /* alias for destination word */ + tmpx = x->dp; + + for (; ix <= n->used * 2 + 1; ix++) { +#ifndef LTMSSE + *tmpx++ = (mp_digit)(*_W1 & ((mp_word) MP_MASK)); + *_W++ += *_W1++ >> ((mp_word) DIGIT_BIT); +#else + asm("movq %%mm0,%%mm1 \n\t" // copy of W[ix] + "psrlq $28,%%mm0 \n\t" // >>28 + "pand %%mm2,%%mm1 \n\t" // & with MP_MASK + "paddq (%0),%%mm0 \n\t" // += _W + "movd %%mm1,(%1) \n\t" // store it + ::"r"(_W),"r"(tmpx)); + ++_W; ++tmpx; +#endif + } + + /* zero oldused digits, if the input a was larger than + * m->used+1 we'll have to clear the digits + */ + for (ix = n->used + 1; ix < olduse; ix++) { + *tmpx++ = 0; + } + } + +#ifdef LTMSSE + asm("emms"); +#endif + + /* set the max used and clamp */ + x->used = n->used + 1; + mp_clamp (x); + + /* if A >= m then A = A - m */ + if (mp_cmp_mag (x, n) != MP_LT) { + return s_mp_sub (x, n, x); + } + return MP_OKAY; +} + +/* End: bn_fast_mp_montgomery_reduce.c */ + +/* Start: bn_fast_s_mp_mul_digs.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* Fast (comba) multiplier + * + * This is the fast column-array [comba] multiplier. It is + * designed to compute the columns of the product first + * then handle the carries afterwards. This has the effect + * of making the nested loops that compute the columns very + * simple and schedulable on super-scalar processors. + * + * This has been modified to produce a variable number of + * digits of output so if say only a half-product is required + * you don't have to compute the upper half (a feature + * required for fast Barrett reduction). + * + * Based on Algorithm 14.12 on pp.595 of HAC. + * + */ +int +fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) +{ + int olduse, res, pa, ix; + mp_word W[MP_WARRAY]; + + /* grow the destination as required */ + if (c->alloc < digs) { + if ((res = mp_grow (c, digs)) != MP_OKAY) { + return res; + } + } + + /* clear temp buf (the columns) */ + memset (W, 0, sizeof (mp_word) * digs); + + /* calculate the columns */ + pa = a->used; + for (ix = 0; ix < pa; ix++) { + /* this multiplier has been modified to allow you to + * control how many digits of output are produced. + * So at most we want to make upto "digs" digits of output. + * + * this adds products to distinct columns (at ix+iy) of W + * note that each step through the loop is not dependent on + * the previous which means the compiler can easily unroll + * the loop without scheduling problems + */ + { +#ifndef LTMSSE + register mp_digit tmpx; +#endif + + register mp_digit *tmpy; + register mp_word *_W; + register int iy, pb; + + /* alias for the the word on the left e.g. A[ix] * A[iy] */ +#ifndef LTMSSE + tmpx = a->dp[ix]; +#else +// SSE: now we load the left side in mm0 + asm (" movd %0, %%mm0 " :: "r"(a->dp[ix])); +#endif + /* alias for the right side */ + tmpy = b->dp; + + /* alias for the columns, each step through the loop adds a new + term to each column + */ + _W = W + ix; + + /* the number of digits is limited by their placement. E.g. + we avoid multiplying digits that will end up above the # of + digits of precision requested + */ + pb = MIN (b->used, digs - ix); + + for (iy = 0; iy < pb; iy++) { +#ifndef LTMSSE + *_W++ += ((mp_word)tmpx) * ((mp_word)*tmpy++); +#else +// SSE version + asm ("movd (%0), %%mm1 \n\t" // load right side + "pmuludq %%mm0,%%mm1 \n\t" // multiply into left side + "paddq (%1), %%mm1 \n\t" // add 64-bit result out + "movq %%mm1,(%1)" // store result + :: "r"(tmpy), "r"(_W)); + // update pointers + ++tmpy; + ++_W; +#endif + } + } + + } + + /* setup dest */ + olduse = c->used; + c->used = digs; + + { + register mp_digit *tmpc; + + /* At this point W[] contains the sums of each column. To get the + * correct result we must take the extra bits from each column and + * carry them down + * + * Note that while this adds extra code to the multiplier it + * saves time since the carry propagation is removed from the + * above nested loop.This has the effect of reducing the work + * from N*(N+N*c)==N**2 + c*N**2 to N**2 + N*c where c is the + * cost of the shifting. On very small numbers this is slower + * but on most cryptographic size numbers it is faster. + * + * In this particular implementation we feed the carries from + * behind which means when the loop terminates we still have one + * last digit to copy + */ + tmpc = c->dp; + +#ifdef LTMSSE + // mm2 has W[ix-1] + asm("movq (%0),%%mm2"::"r"(W)); +#endif + + for (ix = 1; ix < digs; ix++) { +#ifndef LTMSSE + /* forward the carry from the previous temp */ + W[ix] += (W[ix - 1] >> ((mp_word) DIGIT_BIT)); + + /* now extract the previous digit [below the carry] */ + *tmpc++ = (mp_digit) (W[ix - 1] & ((mp_word) MP_MASK)); + +#else + asm( + "movq (%0),%%mm1 \n\t" // W[ix] + "movd %%mm2,%%eax \n\t" // get 32-bit version of it W[ix-1] + "psrlq $28,%%mm2 \n\t" // W[ix-1] >> DIGIT_BIT ... must be 28 + "andl $268435455,%%eax \n\t" // & with MP_MASK against W[ix-1] + "paddq %%mm1,%%mm2 \n\t" // add them + "movl %%eax,(%1) \n\t" // store it + :: "r"(&W[ix]), "r"(tmpc) : "%eax"); + ++tmpc; +#endif + + } + +#ifndef LTMSSE + /* fetch the last digit */ + *tmpc++ = (mp_digit) (W[digs - 1] & ((mp_word) MP_MASK)); +#else + // get last since we don't store into W[ix] anymore ;-) + asm("movd %%mm2,%%eax \n\t" + "andl $268435455,%%eax \n\t" // & with MP_MASK against W[ix-1] + "movl %%eax,(%0)" // store it + ::"r"(tmpc):"%eax"); + ++tmpc; +#endif + + /* clear unused digits [that existed in the old copy of c] */ + for (; ix < olduse; ix++) { + *tmpc++ = 0; + } + } + +#ifdef LTMSSE + asm("emms"); +#endif + + mp_clamp (c); + return MP_OKAY; +} + +/* End: bn_fast_s_mp_mul_digs.c */ + +/* Start: bn_fast_s_mp_mul_high_digs.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ + #include + +/* this is a modified version of fast_s_mp_mul_digs that only produces + * output digits *above* digs. See the comments for fast_s_mp_mul_digs + * to see how it works. + * + * This is used in the Barrett reduction since for one of the multiplications + * only the higher digits were needed. This essentially halves the work. + * + * Based on Algorithm 14.12 on pp.595 of HAC. + */ +int +fast_s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) +{ + int oldused, newused, res, pa, pb, ix; + mp_word W[MP_WARRAY]; + + /* calculate size of product and allocate more space if required */ + newused = a->used + b->used + 1; + if (c->alloc < newused) { + if ((res = mp_grow (c, newused)) != MP_OKAY) { + return res; + } + } + + /* like the other comba method we compute the columns first */ + pa = a->used; + pb = b->used; + memset (W + digs, 0, (pa + pb + 1 - digs) * sizeof (mp_word)); + for (ix = 0; ix < pa; ix++) { + { +#ifndef LTMSSE + register mp_digit tmpx; +#endif + + register mp_digit *tmpy; + register int iy; + register mp_word *_W; + + /* work todo, that is we only calculate digits that are at "digs" or above */ + iy = digs - ix; + + /* copy of word on the left of A[ix] * B[iy] */ +#ifndef LTMSSE + tmpx = a->dp[ix]; +#else +//SSE we load tmpx into mm0 + asm (" movd %0, %%mm0 " :: "r"(a->dp[ix])); +#endif + + /* alias for right side */ + tmpy = b->dp + iy; + + /* alias for the columns of output. Offset to be equal to or above the + * smallest digit place requested + */ + _W = W + digs; + + /* skip cases below zero where ix > digs */ + if (iy < 0) { + iy = abs(iy); + tmpy += iy; + _W += iy; + iy = 0; + } + + /* compute column products for digits above the minimum */ + for (; iy < pb; iy++) { +#ifndef LTMSSE + *_W++ += ((mp_word) tmpx) * ((mp_word)*tmpy++); +#else +// SSE version + asm ("movd (%0), %%mm1 \n\t" // load right side + "pmuludq %%mm0,%%mm1 \n\t" // multiply into left side + "paddq (%1),%%mm1 \n\t" // add 64-bit result out + "movq %%mm1,(%1)" // store result + :: "r"(tmpy), "r"(_W)); + // update pointers + ++tmpy; + ++_W; +#endif + } + + } + } + + /* setup dest */ + oldused = c->used; + c->used = newused; + + /* now convert the array W downto what we need + * + * See comments in bn_fast_s_mp_mul_digs.c + */ +#ifdef LTMSSE + // mm2 has W[ix-1] + asm("movq (%0),%%mm2"::"r"(W + digs)); +#endif + + for (ix = digs + 1; ix < newused; ix++) { + /* forward the carry from the previous temp */ +#ifndef LTMSSE + W[ix] += (W[ix - 1] >> ((mp_word) DIGIT_BIT)); + c->dp[ix - 1] = (mp_digit) (W[ix - 1] & ((mp_word) MP_MASK)); +#else + asm( + "movd %%mm2,%%eax \n\t" // get 32-bit version of it W[ix-1] + "psrlq $28,%%mm2 \n\t" // W[ix-1] >> DIGIT_BIT ... must be 28 + "andl $268435455,%%eax \n\t" // & with MP_MASK against W[ix-1] + "paddq (%0),%%mm2 \n\t" // add them + "movl %%eax,(%1) \n\t" // store it + :: "r"(&W[ix]), "r"(&c->dp[ix-1]) : "%eax"); +#endif + + } + +#ifndef LTMSSE + c->dp[newused - 1] = (mp_digit) (W[newused - 1] & ((mp_word) MP_MASK)); +#else + // get last since we don't store into W[ix] anymore ;-) + asm("movd %%mm2,%%eax\n\t" + "andl $268435455,%%eax \n\t" // & with MP_MASK against W[ix-1] + "movl %%eax,(%0)" // store it + ::"r"(&(c->dp[newused-1])):"%eax"); +#endif + + for (; ix < oldused; ix++) { + c->dp[ix] = 0; + } + +#ifdef LTMSSE + asm("emms"); +#endif + + mp_clamp (c); + return MP_OKAY; +} + +/* End: bn_fast_s_mp_mul_high_digs.c */ + +/* Start: bn_fast_s_mp_sqr.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* fast squaring + * + * This is the comba method where the columns of the product + * are computed first then the carries are computed. This + * has the effect of making a very simple inner loop that + * is executed the most + * + * W2 represents the outer products and W the inner. + * + * A further optimizations is made because the inner + * products are of the form "A * B * 2". The *2 part does + * not need to be computed until the end which is good + * because 64-bit shifts are slow! + * + * Based on Algorithm 14.16 on pp.597 of HAC. + * + */ +int fast_s_mp_sqr (mp_int * a, mp_int * b) +{ + int olduse, newused, res, ix, pa; + mp_word W2[MP_WARRAY], W[MP_WARRAY]; + + /* calculate size of product and allocate as required */ + pa = a->used; + newused = pa + pa; + if (b->alloc < newused) { + if ((res = mp_grow (b, newused)) != MP_OKAY) { + return res; + } + } + + /* zero temp buffer (columns) + * Note that there are two buffers. Since squaring requires + * a outer and inner product and the inner product requires + * computing a product and doubling it (a relatively expensive + * op to perform n**2 times if you don't have to) the inner and + * outer products are computed in different buffers. This way + * the inner product can be doubled using n doublings instead of + * n**2 + */ + memset (W, 0, newused * sizeof (mp_word)); +#ifndef LTMSSE + memset (W2, 0, newused * sizeof (mp_word)); +#endif + + /* This computes the inner product. To simplify the inner N**2 loop + * the multiplication by two is done afterwards in the N loop. + */ + + for (ix = 0; ix < pa; ix++) { + /* compute the outer product + * + * Note that every outer product is computed + * for a particular column only once which means that + * there is no need todo a double precision addition + * into the W2[] array. + */ +#ifndef LTMSSE + W2[ix + ix] = ((mp_word)a->dp[ix]) * ((mp_word)a->dp[ix]); +#else + asm("movd %0,%%xmm0 \n\t" // load a->dp[ix] + "movdq2q %%xmm0,%%mm0 \n\t" // get 64-bit version + "pmuludq %%xmm0,%%xmm0 \n\t" // square it + "movdqu %%xmm0,(%1) \n\t" // store it (8-byte result, 8-byte zero) + ::"r"(a->dp[ix]), "r"(&(W2[ix+ix]))); +#endif + + { +#ifndef LTMSSE + register mp_digit tmpx; +#endif + register mp_digit *tmpy; + register mp_word *_W; + register int iy; + + /* copy of left side */ +#ifndef LTMSSE + tmpx = a->dp[ix]; +#else +//SSE we load tmpx into mm0 [note: loaded above] +// asm (" movd %0, %%mm0 " :: "r"(a->dp[ix])); +#endif + + /* alias for right side */ + tmpy = a->dp + (ix + 1); + + /* the column to store the result in */ + _W = W + (ix + ix + 1); + + /* inner products */ + for (iy = ix + 1; iy < pa; iy++) { +#ifndef LTMSSE + *_W++ += ((mp_word)tmpx) * ((mp_word)*tmpy++); +#else +// SSE version + asm ("movd (%0), %%mm1 \n\t" // load right side + "pmuludq %%mm0,%%mm1 \n\t" // multiply into left side + "paddq (%1),%%mm1 \n\t" // add 64-bit result out + "movq %%mm1,(%1)" // store result + :: "r"(tmpy), "r"(_W)); + // update pointers + ++tmpy; + ++_W; +#endif + } + } + } + + /* setup dest */ + olduse = b->used; + b->used = newused; + + /* now compute digits + * + * We have to double the inner product sums, add in the + * outer product sums, propagate carries and convert + * to single precision. + */ + { + register mp_digit *tmpb; + + /* double first value, since the inner products are + * half of what they should be + */ + tmpb = b->dp; +#ifndef LTMSSE + W[0] += W[0] + W2[0]; +#else + // mm2 has W[ix-1] + asm("movq (%0),%%mm2 \n\t" // load W[0] + "paddq %%mm2,%%mm2 \n\t" // W[0] + W[0] + "paddq (%1),%%mm2 \n\t" // W[0] + W[0] + W2[0] + ::"r"(W),"r"(W2)); +#endif + + for (ix = 1; ix < newused; ix++) { +#ifndef LTMSSE + /* double/add next digit */ + W[ix] += W[ix] + W2[ix]; + + /* propagate carry forwards [from the previous digit] */ + W[ix] = W[ix] + (W[ix - 1] >> ((mp_word) DIGIT_BIT)); + + /* store the current digit now that the carry isn't + * needed + */ + *tmpb++ = (mp_digit) (W[ix - 1] & ((mp_word) MP_MASK)); +#else + asm( "movq (%0),%%mm0 \n\t" // load W[ix] + "movd %%mm2,%%eax \n\t" // 32-bit version of W[ix-1] + "paddq %%mm0,%%mm0 \n\t" // W[ix] + W[ix] + "psrlq $28,%%mm2 \n\t" // W[ix-1] >> DIGIT_BIT ... must be 28 + "paddq (%1),%%mm0 \n\t" // W[ix] + W[ix] + W2[ix] + "andl $268435455,%%eax \n\t" // & with MP_MASK against W[ix-1] + "paddq %%mm0,%%mm2 \n\t" // W[ix] + W[ix] + W2[ix] + W[ix-1]>>DIGIT_BIT + "movl %%eax,(%2) " // store it + :: "r"(&W[ix]), "r"(&W2[ix]), "r"(tmpb):"%eax"); + ++tmpb; +#endif + } + +#ifndef LTMSSE + /* set the last value. Note even if the carry is zero + * this is required since the next step will not zero + * it if b originally had a value at b->dp[2*a.used] + */ + *tmpb++ = (mp_digit) (W[(newused) - 1] & ((mp_word) MP_MASK)); +#else + // get last since we don't store into W[ix] anymore ;-) + asm("movd %%mm2,%%eax \n\t" + "andl $268435455,%%eax \n\t" // & with MP_MASK against W[ix-1] + "movl %%eax,(%0) " // store it + ::"r"(tmpb):"%eax"); + ++tmpb; +#endif + + /* clear high digits of b if there were any originally */ + for (; ix < olduse; ix++) { + *tmpb++ = 0; + } + } + +#ifdef LTMSSE + asm("emms"); +#endif + + mp_clamp (b); + return MP_OKAY; +} + +/* End: bn_fast_s_mp_sqr.c */ + +/* Start: bn_mp_2expt.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* computes a = 2**b + * + * Simple algorithm which zeroes the int, grows it then just sets one bit + * as required. + */ +int +mp_2expt (mp_int * a, int b) +{ + int res; + + /* zero a as per default */ + mp_zero (a); + + /* grow a to accomodate the single bit */ + if ((res = mp_grow (a, b / DIGIT_BIT + 1)) != MP_OKAY) { + return res; + } + + /* set the used count of where the bit will go */ + a->used = b / DIGIT_BIT + 1; + + /* put the single bit in its place */ + a->dp[b / DIGIT_BIT] = 1 << (b % DIGIT_BIT); + + return MP_OKAY; +} + +/* End: bn_mp_2expt.c */ + +/* Start: bn_mp_abs.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* b = |a| + * + * Simple function copies the input and fixes the sign to positive + */ +int +mp_abs (mp_int * a, mp_int * b) +{ + int res; + + /* copy a to b */ + if (a != b) { + if ((res = mp_copy (a, b)) != MP_OKAY) { + return res; + } + } + + /* force the sign of b to positive */ + b->sign = MP_ZPOS; + + return MP_OKAY; +} + +/* End: bn_mp_abs.c */ + +/* Start: bn_mp_add.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* high level addition (handles signs) */ +int mp_add (mp_int * a, mp_int * b, mp_int * c) +{ + int sa, sb, res; + + /* get sign of both inputs */ + sa = a->sign; + sb = b->sign; + + /* handle two cases, not four */ + if (sa == sb) { + /* both positive or both negative */ + /* add their magnitudes, copy the sign */ + c->sign = sa; + res = s_mp_add (a, b, c); + } else { + /* one positive, the other negative */ + /* subtract the one with the greater magnitude from */ + /* the one of the lesser magnitude. The result gets */ + /* the sign of the one with the greater magnitude. */ + if (mp_cmp_mag (a, b) == MP_LT) { + c->sign = sb; + res = s_mp_sub (b, a, c); + } else { + c->sign = sa; + res = s_mp_sub (a, b, c); + } + } + return res; +} + + +/* End: bn_mp_add.c */ + +/* Start: bn_mp_add_d.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* single digit addition */ +int +mp_add_d (mp_int * a, mp_digit b, mp_int * c) +{ + int res, ix, oldused; + mp_digit *tmpa, *tmpc, mu; + + /* grow c as required */ + if (c->alloc < a->used + 1) { + if ((res = mp_grow(c, a->used + 1)) != MP_OKAY) { + return res; + } + } + + /* if a is negative and |a| >= b, call c = |a| - b */ + if (a->sign == MP_NEG && (a->used > 1 || a->dp[0] >= b)) { + /* temporarily fix sign of a */ + a->sign = MP_ZPOS; + + /* c = |a| - b */ + res = mp_sub_d(a, b, c); + + /* fix sign */ + a->sign = c->sign = MP_NEG; + + return res; + } + + /* old number of used digits in c */ + oldused = c->used; + + /* sign always positive */ + c->sign = MP_ZPOS; + + /* source alias */ + tmpa = a->dp; + + /* destination alias */ + tmpc = c->dp; + + /* if a is positive */ + if (a->sign == MP_ZPOS) { + /* add digit, after this we're propagating + * the carry. + */ + *tmpc = *tmpa++ + b; + mu = *tmpc >> DIGIT_BIT; + *tmpc++ &= MP_MASK; + + /* now handle rest of the digits */ + for (ix = 1; ix < a->used; ix++) { + *tmpc = *tmpa++ + mu; + mu = *tmpc >> DIGIT_BIT; + *tmpc++ &= MP_MASK; + } + /* set final carry */ + ix++; + *tmpc++ = mu; + + /* setup size */ + c->used = a->used + 1; + } else { + /* a was negative and |a| < b */ + c->used = 1; + + /* the result is a single digit */ + if (a->used == 1) { + *tmpc++ = b - a->dp[0]; + } else { + *tmpc++ = b; + } + + /* setup count so the clearing of oldused + * can fall through correctly + */ + ix = 1; + } + + /* now zero to oldused */ + while (ix++ < oldused) { + *tmpc++ = 0; + } + mp_clamp(c); + + return MP_OKAY; +} + + +/* End: bn_mp_add_d.c */ + +/* Start: bn_mp_addmod.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* d = a + b (mod c) */ +int +mp_addmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d) +{ + int res; + mp_int t; + + if ((res = mp_init (&t)) != MP_OKAY) { + return res; + } + + if ((res = mp_add (a, b, &t)) != MP_OKAY) { + mp_clear (&t); + return res; + } + res = mp_mod (&t, c, d); + mp_clear (&t); + return res; +} + +/* End: bn_mp_addmod.c */ + +/* Start: bn_mp_and.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* AND two ints together */ +int +mp_and (mp_int * a, mp_int * b, mp_int * c) +{ + int res, ix, px; + mp_int t, *x; + + if (a->used > b->used) { + if ((res = mp_init_copy (&t, a)) != MP_OKAY) { + return res; + } + px = b->used; + x = b; + } else { + if ((res = mp_init_copy (&t, b)) != MP_OKAY) { + return res; + } + px = a->used; + x = a; + } + + for (ix = 0; ix < px; ix++) { + t.dp[ix] &= x->dp[ix]; + } + + /* zero digits above the last from the smallest mp_int */ + for (; ix < t.used; ix++) { + t.dp[ix] = 0; + } + + mp_clamp (&t); + mp_exch (c, &t); + mp_clear (&t); + return MP_OKAY; +} + +/* End: bn_mp_and.c */ + +/* Start: bn_mp_clamp.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* trim unused digits + * + * This is used to ensure that leading zero digits are + * trimed and the leading "used" digit will be non-zero + * Typically very fast. Also fixes the sign if there + * are no more leading digits + */ +void +mp_clamp (mp_int * a) +{ + /* decrease used while the most significant digit is + * zero. + */ + while (a->used > 0 && a->dp[a->used - 1] == 0) { + --(a->used); + } + + /* reset the sign flag if used == 0 */ + if (a->used == 0) { + a->sign = MP_ZPOS; + } +} + +/* End: bn_mp_clamp.c */ + +/* Start: bn_mp_clear.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* clear one (frees) */ +void +mp_clear (mp_int * a) +{ + int i; + + /* only do anything if a hasn't been freed previously */ + if (a->dp != NULL) { + /* first zero the digits */ + for (i = 0; i < a->used; i++) { + a->dp[i] = 0; + } + + /* free ram */ + XFREE(a->dp); + + /* reset members to make debugging easier */ + a->dp = NULL; + a->alloc = a->used = 0; + a->sign = MP_ZPOS; + } +} + +/* End: bn_mp_clear.c */ + +/* Start: bn_mp_clear_multi.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include +#include + +void mp_clear_multi(mp_int *mp, ...) +{ + mp_int* next_mp = mp; + va_list args; + va_start(args, mp); + while (next_mp != NULL) { + mp_clear(next_mp); + next_mp = va_arg(args, mp_int*); + } + va_end(args); +} + +/* End: bn_mp_clear_multi.c */ + +/* Start: bn_mp_cmp.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* compare two ints (signed)*/ +int +mp_cmp (mp_int * a, mp_int * b) +{ + /* compare based on sign */ + if (a->sign != b->sign) { + if (a->sign == MP_NEG) { + return MP_LT; + } else { + return MP_GT; + } + } + + /* compare digits */ + if (a->sign == MP_NEG) { + /* if negative compare opposite direction */ + return mp_cmp_mag(b, a); + } else { + return mp_cmp_mag(a, b); + } +} + +/* End: bn_mp_cmp.c */ + +/* Start: bn_mp_cmp_d.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* compare a digit */ +int mp_cmp_d(mp_int * a, mp_digit b) +{ + /* compare based on sign */ + if (a->sign == MP_NEG) { + return MP_LT; + } + + /* compare based on magnitude */ + if (a->used > 1) { + return MP_GT; + } + + /* compare the only digit of a to b */ + if (a->dp[0] > b) { + return MP_GT; + } else if (a->dp[0] < b) { + return MP_LT; + } else { + return MP_EQ; + } +} + +/* End: bn_mp_cmp_d.c */ + +/* Start: bn_mp_cmp_mag.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* compare maginitude of two ints (unsigned) */ +int mp_cmp_mag (mp_int * a, mp_int * b) +{ + int n; + mp_digit *tmpa, *tmpb; + + /* compare based on # of non-zero digits */ + if (a->used > b->used) { + return MP_GT; + } + + if (a->used < b->used) { + return MP_LT; + } + + /* alias for a */ + tmpa = a->dp + (a->used - 1); + + /* alias for b */ + tmpb = b->dp + (a->used - 1); + + /* compare based on digits */ + for (n = 0; n < a->used; ++n, --tmpa, --tmpb) { + if (*tmpa > *tmpb) { + return MP_GT; + } + + if (*tmpa < *tmpb) { + return MP_LT; + } + } + return MP_EQ; +} + +/* End: bn_mp_cmp_mag.c */ + +/* Start: bn_mp_cnt_lsb.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +static const int lnz[16] = { + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 +}; + +/* Counts the number of lsbs which are zero before the first zero bit */ +int mp_cnt_lsb(mp_int *a) +{ + int x; + mp_digit q, qq; + + /* easy out */ + if (mp_iszero(a) == 1) { + return 0; + } + + /* scan lower digits until non-zero */ + for (x = 0; x < a->used && a->dp[x] == 0; x++); + q = a->dp[x]; + x *= DIGIT_BIT; + + /* now scan this digit until a 1 is found */ + if ((q & 1) == 0) { + do { + qq = q & 15; + x += lnz[qq]; + q >>= 4; + } while (qq == 0); + } + return x; +} + + +/* End: bn_mp_cnt_lsb.c */ + +/* Start: bn_mp_copy.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* copy, b = a */ +int +mp_copy (mp_int * a, mp_int * b) +{ + int res, n; + + /* if dst == src do nothing */ + if (a == b) { + return MP_OKAY; + } + + /* grow dest */ + if (b->alloc < a->used) { + if ((res = mp_grow (b, a->used)) != MP_OKAY) { + return res; + } + } + + /* zero b and copy the parameters over */ + { + register mp_digit *tmpa, *tmpb; + + /* pointer aliases */ + + /* source */ + tmpa = a->dp; + + /* destination */ + tmpb = b->dp; + + /* copy all the digits */ + for (n = 0; n < a->used; n++) { + *tmpb++ = *tmpa++; + } + + /* clear high digits */ + for (; n < b->used; n++) { + *tmpb++ = 0; + } + } + + /* copy used count and sign */ + b->used = a->used; + b->sign = a->sign; + return MP_OKAY; +} + +/* End: bn_mp_copy.c */ + +/* Start: bn_mp_count_bits.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* returns the number of bits in an int */ +int +mp_count_bits (mp_int * a) +{ + int r; + mp_digit q; + + /* shortcut */ + if (a->used == 0) { + return 0; + } + + /* get number of digits and add that */ + r = (a->used - 1) * DIGIT_BIT; + + /* take the last digit and count the bits in it */ + q = a->dp[a->used - 1]; + while (q > ((mp_digit) 0)) { + ++r; + q >>= ((mp_digit) 1); + } + return r; +} + +/* End: bn_mp_count_bits.c */ + +/* Start: bn_mp_div.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* integer signed division. + * c*b + d == a [e.g. a/b, c=quotient, d=remainder] + * HAC pp.598 Algorithm 14.20 + * + * Note that the description in HAC is horribly + * incomplete. For example, it doesn't consider + * the case where digits are removed from 'x' in + * the inner loop. It also doesn't consider the + * case that y has fewer than three digits, etc.. + * + * The overall algorithm is as described as + * 14.20 from HAC but fixed to treat these cases. +*/ +int mp_div (mp_int * a, mp_int * b, mp_int * c, mp_int * d) +{ + mp_int q, x, y, t1, t2; + int res, n, t, i, norm, neg; + + /* is divisor zero ? */ + if (mp_iszero (b) == 1) { + return MP_VAL; + } + + /* if a < b then q=0, r = a */ + if (mp_cmp_mag (a, b) == MP_LT) { + if (d != NULL) { + res = mp_copy (a, d); + } else { + res = MP_OKAY; + } + if (c != NULL) { + mp_zero (c); + } + return res; + } + + if ((res = mp_init_size (&q, a->used + 2)) != MP_OKAY) { + return res; + } + q.used = a->used + 2; + + if ((res = mp_init (&t1)) != MP_OKAY) { + goto __Q; + } + + if ((res = mp_init (&t2)) != MP_OKAY) { + goto __T1; + } + + if ((res = mp_init_copy (&x, a)) != MP_OKAY) { + goto __T2; + } + + if ((res = mp_init_copy (&y, b)) != MP_OKAY) { + goto __X; + } + + /* fix the sign */ + neg = (a->sign == b->sign) ? MP_ZPOS : MP_NEG; + x.sign = y.sign = MP_ZPOS; + + /* normalize both x and y, ensure that y >= b/2, [b == 2**DIGIT_BIT] */ + norm = mp_count_bits(&y) % DIGIT_BIT; + if (norm < (int)(DIGIT_BIT-1)) { + norm = (DIGIT_BIT-1) - norm; + if ((res = mp_mul_2d (&x, norm, &x)) != MP_OKAY) { + goto __Y; + } + if ((res = mp_mul_2d (&y, norm, &y)) != MP_OKAY) { + goto __Y; + } + } else { + norm = 0; + } + + /* note hac does 0 based, so if used==5 then its 0,1,2,3,4, e.g. use 4 */ + n = x.used - 1; + t = y.used - 1; + + /* while (x >= y*b**n-t) do { q[n-t] += 1; x -= y*b**{n-t} } */ + if ((res = mp_lshd (&y, n - t)) != MP_OKAY) { /* y = y*b**{n-t} */ + goto __Y; + } + + while (mp_cmp (&x, &y) != MP_LT) { + ++(q.dp[n - t]); + if ((res = mp_sub (&x, &y, &x)) != MP_OKAY) { + goto __Y; + } + } + + /* reset y by shifting it back down */ + mp_rshd (&y, n - t); + + /* step 3. for i from n down to (t + 1) */ + for (i = n; i >= (t + 1); i--) { + if (i > x.used) { + continue; + } + + /* step 3.1 if xi == yt then set q{i-t-1} to b-1, + * otherwise set q{i-t-1} to (xi*b + x{i-1})/yt */ + if (x.dp[i] == y.dp[t]) { + q.dp[i - t - 1] = ((((mp_digit)1) << DIGIT_BIT) - 1); + } else { + mp_word tmp; + tmp = ((mp_word) x.dp[i]) << ((mp_word) DIGIT_BIT); + tmp |= ((mp_word) x.dp[i - 1]); + tmp /= ((mp_word) y.dp[t]); + if (tmp > (mp_word) MP_MASK) + tmp = MP_MASK; + q.dp[i - t - 1] = (mp_digit) (tmp & (mp_word) (MP_MASK)); + } + + /* while (q{i-t-1} * (yt * b + y{t-1})) > + xi * b**2 + xi-1 * b + xi-2 + + do q{i-t-1} -= 1; + */ + q.dp[i - t - 1] = (q.dp[i - t - 1] + 1) & MP_MASK; + do { + q.dp[i - t - 1] = (q.dp[i - t - 1] - 1) & MP_MASK; + + /* find left hand */ + mp_zero (&t1); + t1.dp[0] = (t - 1 < 0) ? 0 : y.dp[t - 1]; + t1.dp[1] = y.dp[t]; + t1.used = 2; + if ((res = mp_mul_d (&t1, q.dp[i - t - 1], &t1)) != MP_OKAY) { + goto __Y; + } + + /* find right hand */ + t2.dp[0] = (i - 2 < 0) ? 0 : x.dp[i - 2]; + t2.dp[1] = (i - 1 < 0) ? 0 : x.dp[i - 1]; + t2.dp[2] = x.dp[i]; + t2.used = 3; + } while (mp_cmp_mag(&t1, &t2) == MP_GT); + + /* step 3.3 x = x - q{i-t-1} * y * b**{i-t-1} */ + if ((res = mp_mul_d (&y, q.dp[i - t - 1], &t1)) != MP_OKAY) { + goto __Y; + } + + if ((res = mp_lshd (&t1, i - t - 1)) != MP_OKAY) { + goto __Y; + } + + if ((res = mp_sub (&x, &t1, &x)) != MP_OKAY) { + goto __Y; + } + + /* if x < 0 then { x = x + y*b**{i-t-1}; q{i-t-1} -= 1; } */ + if (x.sign == MP_NEG) { + if ((res = mp_copy (&y, &t1)) != MP_OKAY) { + goto __Y; + } + if ((res = mp_lshd (&t1, i - t - 1)) != MP_OKAY) { + goto __Y; + } + if ((res = mp_add (&x, &t1, &x)) != MP_OKAY) { + goto __Y; + } + + q.dp[i - t - 1] = (q.dp[i - t - 1] - 1UL) & MP_MASK; + } + } + + /* now q is the quotient and x is the remainder + * [which we have to normalize] + */ + + /* get sign before writing to c */ + x.sign = a->sign; + + if (c != NULL) { + mp_clamp (&q); + mp_exch (&q, c); + c->sign = neg; + } + + if (d != NULL) { + mp_div_2d (&x, norm, &x, NULL); + mp_exch (&x, d); + } + + res = MP_OKAY; + +__Y:mp_clear (&y); +__X:mp_clear (&x); +__T2:mp_clear (&t2); +__T1:mp_clear (&t1); +__Q:mp_clear (&q); + return res; +} + +/* End: bn_mp_div.c */ + +/* Start: bn_mp_div_2.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* b = a/2 */ +int mp_div_2(mp_int * a, mp_int * b) +{ + int x, res, oldused; + + /* copy */ + if (b->alloc < a->used) { + if ((res = mp_grow (b, a->used)) != MP_OKAY) { + return res; + } + } + + oldused = b->used; + b->used = a->used; + { + register mp_digit r, rr, *tmpa, *tmpb; + + /* source alias */ + tmpa = a->dp + b->used - 1; + + /* dest alias */ + tmpb = b->dp + b->used - 1; + + /* carry */ + r = 0; + for (x = b->used - 1; x >= 0; x--) { + /* get the carry for the next iteration */ + rr = *tmpa & 1; + + /* shift the current digit, add in carry and store */ + *tmpb-- = (*tmpa-- >> 1) | (r << (DIGIT_BIT - 1)); + + /* forward carry to next iteration */ + r = rr; + } + + /* zero excess digits */ + tmpb = b->dp + b->used; + for (x = b->used; x < oldused; x++) { + *tmpb++ = 0; + } + } + b->sign = a->sign; + mp_clamp (b); + return MP_OKAY; +} + +/* End: bn_mp_div_2.c */ + +/* Start: bn_mp_div_2d.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* shift right by a certain bit count (store quotient in c, optional remainder in d) */ +int mp_div_2d (mp_int * a, int b, mp_int * c, mp_int * d) +{ + mp_digit D, r, rr; + int x, res; + mp_int t; + + + /* if the shift count is <= 0 then we do no work */ + if (b <= 0) { + res = mp_copy (a, c); + if (d != NULL) { + mp_zero (d); + } + return res; + } + + if ((res = mp_init (&t)) != MP_OKAY) { + return res; + } + + /* get the remainder */ + if (d != NULL) { + if ((res = mp_mod_2d (a, b, &t)) != MP_OKAY) { + mp_clear (&t); + return res; + } + } + + /* copy */ + if ((res = mp_copy (a, c)) != MP_OKAY) { + mp_clear (&t); + return res; + } + + /* shift by as many digits in the bit count */ + if (b >= (int)DIGIT_BIT) { + mp_rshd (c, b / DIGIT_BIT); + } + + /* shift any bit count < DIGIT_BIT */ + D = (mp_digit) (b % DIGIT_BIT); + if (D != 0) { + register mp_digit *tmpc, mask, shift; + + /* mask */ + mask = (((mp_digit)1) << D) - 1; + + /* shift for lsb */ + shift = DIGIT_BIT - D; + + /* alias */ + tmpc = c->dp + (c->used - 1); + + /* carry */ + r = 0; + for (x = c->used - 1; x >= 0; x--) { + /* get the lower bits of this word in a temp */ + rr = *tmpc & mask; + + /* shift the current word and mix in the carry bits from the previous word */ + *tmpc = (*tmpc >> D) | (r << shift); + --tmpc; + + /* set the carry to the carry bits of the current word found above */ + r = rr; + } + } + mp_clamp (c); + if (d != NULL) { + mp_exch (&t, d); + } + mp_clear (&t); + return MP_OKAY; +} + +/* End: bn_mp_div_2d.c */ + +/* Start: bn_mp_div_3.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* divide by three (based on routine from MPI and the GMP manual) */ +int +mp_div_3 (mp_int * a, mp_int *c, mp_digit * d) +{ + mp_int q; + mp_word w, t; + mp_digit b; + int res, ix; + + /* b = 2**DIGIT_BIT / 3 */ + b = (((mp_word)1) << ((mp_word)DIGIT_BIT)) / ((mp_word)3); + + if ((res = mp_init_size(&q, a->used)) != MP_OKAY) { + return res; + } + + q.used = a->used; + q.sign = a->sign; + w = 0; + for (ix = a->used - 1; ix >= 0; ix--) { + w = (w << ((mp_word)DIGIT_BIT)) | ((mp_word)a->dp[ix]); + + if (w >= 3) { + /* multiply w by [1/3] */ + t = (w * ((mp_word)b)) >> ((mp_word)DIGIT_BIT); + + /* now subtract 3 * [w/3] from w, to get the remainder */ + w -= t+t+t; + + /* fixup the remainder as required since + * the optimization is not exact. + */ + while (w >= 3) { + t += 1; + w -= 3; + } + } else { + t = 0; + } + q.dp[ix] = (mp_digit)t; + } + + /* [optional] store the remainder */ + if (d != NULL) { + *d = (mp_digit)w; + } + + /* [optional] store the quotient */ + if (c != NULL) { + mp_clamp(&q); + mp_exch(&q, c); + } + mp_clear(&q); + + return res; +} + + +/* End: bn_mp_div_3.c */ + +/* Start: bn_mp_div_d.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +static int s_is_power_of_two(mp_digit b, int *p) +{ + int x; + + for (x = 1; x < DIGIT_BIT; x++) { + if (b == (((mp_digit)1)<dp[0] & ((1<used)) != MP_OKAY) { + return res; + } + + q.used = a->used; + q.sign = a->sign; + w = 0; + for (ix = a->used - 1; ix >= 0; ix--) { + w = (w << ((mp_word)DIGIT_BIT)) | ((mp_word)a->dp[ix]); + + if (w >= b) { + t = (mp_digit)(w / b); + w -= ((mp_word)t) * ((mp_word)b); + } else { + t = 0; + } + q.dp[ix] = (mp_digit)t; + } + + if (d != NULL) { + *d = (mp_digit)w; + } + + if (c != NULL) { + mp_clamp(&q); + mp_exch(&q, c); + } + mp_clear(&q); + + return res; +} + + +/* End: bn_mp_div_d.c */ + +/* Start: bn_mp_dr_is_modulus.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* determines if a number is a valid DR modulus */ +int mp_dr_is_modulus(mp_int *a) +{ + int ix; + + /* must be at least two digits */ + if (a->used < 2) { + return 0; + } + + /* must be of the form b**k - a [a <= b] so all + * but the first digit must be equal to -1 (mod b). + */ + for (ix = 1; ix < a->used; ix++) { + if (a->dp[ix] != MP_MASK) { + return 0; + } + } + return 1; +} + + +/* End: bn_mp_dr_is_modulus.c */ + +/* Start: bn_mp_dr_reduce.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* reduce "x" in place modulo "n" using the Diminished Radix algorithm. + * + * Based on algorithm from the paper + * + * "Generating Efficient Primes for Discrete Log Cryptosystems" + * Chae Hoon Lim, Pil Loong Lee, + * POSTECH Information Research Laboratories + * + * The modulus must be of a special format [see manual] + * + * Has been modified to use algorithm 7.10 from the LTM book instead + * + * Input x must be in the range 0 <= x <= (n-1)**2 + */ +int +mp_dr_reduce (mp_int * x, mp_int * n, mp_digit k) +{ + int err, i, m; + mp_word r; + mp_digit mu, *tmpx1, *tmpx2; + + /* m = digits in modulus */ + m = n->used; + + /* ensure that "x" has at least 2m digits */ + if (x->alloc < m + m) { + if ((err = mp_grow (x, m + m)) != MP_OKAY) { + return err; + } + } + +/* top of loop, this is where the code resumes if + * another reduction pass is required. + */ +top: + /* aliases for digits */ + /* alias for lower half of x */ + tmpx1 = x->dp; + + /* alias for upper half of x, or x/B**m */ + tmpx2 = x->dp + m; + + /* set carry to zero */ + mu = 0; + + /* compute (x mod B**m) + k * [x/B**m] inline and inplace */ + for (i = 0; i < m; i++) { + r = ((mp_word)*tmpx2++) * ((mp_word)k) + *tmpx1 + mu; + *tmpx1++ = (mp_digit)(r & MP_MASK); + mu = (mp_digit)(r >> ((mp_word)DIGIT_BIT)); + } + + /* set final carry */ + *tmpx1++ = mu; + + /* zero words above m */ + for (i = m + 1; i < x->used; i++) { + *tmpx1++ = 0; + } + + /* clamp, sub and return */ + mp_clamp (x); + + /* if x >= n then subtract and reduce again + * Each successive "recursion" makes the input smaller and smaller. + */ + if (mp_cmp_mag (x, n) != MP_LT) { + s_mp_sub(x, n, x); + goto top; + } + return MP_OKAY; +} + +/* End: bn_mp_dr_reduce.c */ + +/* Start: bn_mp_dr_setup.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* determines the setup value */ +void mp_dr_setup(mp_int *a, mp_digit *d) +{ + /* the casts are required if DIGIT_BIT is one less than + * the number of bits in a mp_digit [e.g. DIGIT_BIT==31] + */ + *d = (mp_digit)((((mp_word)1) << ((mp_word)DIGIT_BIT)) - + ((mp_word)a->dp[0])); +} + + +/* End: bn_mp_dr_setup.c */ + +/* Start: bn_mp_exch.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* swap the elements of two integers, for cases where you can't simply swap the + * mp_int pointers around + */ +void +mp_exch (mp_int * a, mp_int * b) +{ + mp_int t; + + t = *a; + *a = *b; + *b = t; +} + +/* End: bn_mp_exch.c */ + +/* Start: bn_mp_expt_d.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* calculate c = a**b using a square-multiply algorithm */ +int mp_expt_d (mp_int * a, mp_digit b, mp_int * c) +{ + int res, x; + mp_int g; + + if ((res = mp_init_copy (&g, a)) != MP_OKAY) { + return res; + } + + /* set initial result */ + mp_set (c, 1); + + for (x = 0; x < (int) DIGIT_BIT; x++) { + /* square */ + if ((res = mp_sqr (c, c)) != MP_OKAY) { + mp_clear (&g); + return res; + } + + /* if the bit is set multiply */ + if ((b & (mp_digit) (((mp_digit)1) << (DIGIT_BIT - 1))) != 0) { + if ((res = mp_mul (c, &g, c)) != MP_OKAY) { + mp_clear (&g); + return res; + } + } + + /* shift to next bit */ + b <<= 1; + } + + mp_clear (&g); + return MP_OKAY; +} + +/* End: bn_mp_expt_d.c */ + +/* Start: bn_mp_exptmod.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + + +/* this is a shell function that calls either the normal or Montgomery + * exptmod functions. Originally the call to the montgomery code was + * embedded in the normal function but that wasted alot of stack space + * for nothing (since 99% of the time the Montgomery code would be called) + */ +int mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) +{ + int dr; + + /* modulus P must be positive */ + if (P->sign == MP_NEG) { + return MP_VAL; + } + + /* if exponent X is negative we have to recurse */ + if (X->sign == MP_NEG) { + mp_int tmpG, tmpX; + int err; + + /* first compute 1/G mod P */ + if ((err = mp_init(&tmpG)) != MP_OKAY) { + return err; + } + if ((err = mp_invmod(G, P, &tmpG)) != MP_OKAY) { + mp_clear(&tmpG); + return err; + } + + /* now get |X| */ + if ((err = mp_init(&tmpX)) != MP_OKAY) { + mp_clear(&tmpG); + return err; + } + if ((err = mp_abs(X, &tmpX)) != MP_OKAY) { + mp_clear_multi(&tmpG, &tmpX, NULL); + return err; + } + + /* and now compute (1/G)**|X| instead of G**X [X < 0] */ + err = mp_exptmod(&tmpG, &tmpX, P, Y); + mp_clear_multi(&tmpG, &tmpX, NULL); + return err; + } + + /* is it a DR modulus? */ + dr = mp_dr_is_modulus(P); + + /* if not, is it a uDR modulus? */ + if (dr == 0) { + dr = mp_reduce_is_2k(P) << 1; + } + + /* if the modulus is odd or dr != 0 use the fast method */ + if (mp_isodd (P) == 1 || dr != 0) { + return mp_exptmod_fast (G, X, P, Y, dr); + } else { + /* otherwise use the generic Barrett reduction technique */ + return s_mp_exptmod (G, X, P, Y); + } +} + + +/* End: bn_mp_exptmod.c */ + +/* Start: bn_mp_exptmod_fast.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* computes Y == G**X mod P, HAC pp.616, Algorithm 14.85 + * + * Uses a left-to-right k-ary sliding window to compute the modular exponentiation. + * The value of k changes based on the size of the exponent. + * + * Uses Montgomery or Diminished Radix reduction [whichever appropriate] + */ + +#ifdef MP_LOW_MEM + #define TAB_SIZE 32 +#else + #define TAB_SIZE 256 +#endif + +int +mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode) +{ + mp_int M[TAB_SIZE], res; + mp_digit buf, mp; + int err, bitbuf, bitcpy, bitcnt, mode, digidx, x, y, winsize; + + /* use a pointer to the reduction algorithm. This allows us to use + * one of many reduction algorithms without modding the guts of + * the code with if statements everywhere. + */ + int (*redux)(mp_int*,mp_int*,mp_digit); + + /* find window size */ + x = mp_count_bits (X); + if (x <= 7) { + winsize = 2; + } else if (x <= 36) { + winsize = 3; + } else if (x <= 140) { + winsize = 4; + } else if (x <= 450) { + winsize = 5; + } else if (x <= 1303) { + winsize = 6; + } else if (x <= 3529) { + winsize = 7; + } else { + winsize = 8; + } + +#ifdef MP_LOW_MEM + if (winsize > 5) { + winsize = 5; + } +#endif + + /* init M array */ + /* init first cell */ + if ((err = mp_init(&M[1])) != MP_OKAY) { + return err; + } + + /* now init the second half of the array */ + for (x = 1<<(winsize-1); x < (1 << winsize); x++) { + if ((err = mp_init(&M[x])) != MP_OKAY) { + for (y = 1<<(winsize-1); y < x; y++) { + mp_clear (&M[y]); + } + mp_clear(&M[1]); + return err; + } + } + + /* determine and setup reduction code */ + if (redmode == 0) { + /* now setup montgomery */ + if ((err = mp_montgomery_setup (P, &mp)) != MP_OKAY) { + goto __M; + } + + /* automatically pick the comba one if available (saves quite a few calls/ifs) */ + if (((P->used * 2 + 1) < MP_WARRAY) && + P->used < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { + redux = fast_mp_montgomery_reduce; + } else { + /* use slower baseline Montgomery method */ + redux = mp_montgomery_reduce; + } + } else if (redmode == 1) { + /* setup DR reduction for moduli of the form B**k - b */ + mp_dr_setup(P, &mp); + redux = mp_dr_reduce; + } else { + /* setup DR reduction for moduli of the form 2**k - b */ + if ((err = mp_reduce_2k_setup(P, &mp)) != MP_OKAY) { + goto __M; + } + redux = mp_reduce_2k; + } + + /* setup result */ + if ((err = mp_init (&res)) != MP_OKAY) { + goto __M; + } + + /* create M table + * + * The M table contains powers of the input base, e.g. M[x] = G^x mod P + * + * The first half of the table is not computed though accept for M[0] and M[1] + */ + + if (redmode == 0) { + /* now we need R mod m */ + if ((err = mp_montgomery_calc_normalization (&res, P)) != MP_OKAY) { + goto __RES; + } + + /* now set M[1] to G * R mod m */ + if ((err = mp_mulmod (G, &res, P, &M[1])) != MP_OKAY) { + goto __RES; + } + } else { + mp_set(&res, 1); + if ((err = mp_mod(G, P, &M[1])) != MP_OKAY) { + goto __RES; + } + } + + /* compute the value at M[1<<(winsize-1)] by squaring M[1] (winsize-1) times */ + if ((err = mp_copy (&M[1], &M[1 << (winsize - 1)])) != MP_OKAY) { + goto __RES; + } + + for (x = 0; x < (winsize - 1); x++) { + if ((err = mp_sqr (&M[1 << (winsize - 1)], &M[1 << (winsize - 1)])) != MP_OKAY) { + goto __RES; + } + if ((err = redux (&M[1 << (winsize - 1)], P, mp)) != MP_OKAY) { + goto __RES; + } + } + + /* create upper table */ + for (x = (1 << (winsize - 1)) + 1; x < (1 << winsize); x++) { + if ((err = mp_mul (&M[x - 1], &M[1], &M[x])) != MP_OKAY) { + goto __RES; + } + if ((err = redux (&M[x], P, mp)) != MP_OKAY) { + goto __RES; + } + } + + /* set initial mode and bit cnt */ + mode = 0; + bitcnt = 1; + buf = 0; + digidx = X->used - 1; + bitcpy = 0; + bitbuf = 0; + + for (;;) { + /* grab next digit as required */ + if (--bitcnt == 0) { + /* if digidx == -1 we are out of digits so break */ + if (digidx == -1) { + break; + } + /* read next digit and reset bitcnt */ + buf = X->dp[digidx--]; + bitcnt = (int)DIGIT_BIT; + } + + /* grab the next msb from the exponent */ + y = (mp_digit)(buf >> (DIGIT_BIT - 1)) & 1; + buf <<= (mp_digit)1; + + /* if the bit is zero and mode == 0 then we ignore it + * These represent the leading zero bits before the first 1 bit + * in the exponent. Technically this opt is not required but it + * does lower the # of trivial squaring/reductions used + */ + if (mode == 0 && y == 0) { + continue; + } + + /* if the bit is zero and mode == 1 then we square */ + if (mode == 1 && y == 0) { + if ((err = mp_sqr (&res, &res)) != MP_OKAY) { + goto __RES; + } + if ((err = redux (&res, P, mp)) != MP_OKAY) { + goto __RES; + } + continue; + } + + /* else we add it to the window */ + bitbuf |= (y << (winsize - ++bitcpy)); + mode = 2; + + if (bitcpy == winsize) { + /* ok window is filled so square as required and multiply */ + /* square first */ + for (x = 0; x < winsize; x++) { + if ((err = mp_sqr (&res, &res)) != MP_OKAY) { + goto __RES; + } + if ((err = redux (&res, P, mp)) != MP_OKAY) { + goto __RES; + } + } + + /* then multiply */ + if ((err = mp_mul (&res, &M[bitbuf], &res)) != MP_OKAY) { + goto __RES; + } + if ((err = redux (&res, P, mp)) != MP_OKAY) { + goto __RES; + } + + /* empty window and reset */ + bitcpy = 0; + bitbuf = 0; + mode = 1; + } + } + + /* if bits remain then square/multiply */ + if (mode == 2 && bitcpy > 0) { + /* square then multiply if the bit is set */ + for (x = 0; x < bitcpy; x++) { + if ((err = mp_sqr (&res, &res)) != MP_OKAY) { + goto __RES; + } + if ((err = redux (&res, P, mp)) != MP_OKAY) { + goto __RES; + } + + /* get next bit of the window */ + bitbuf <<= 1; + if ((bitbuf & (1 << winsize)) != 0) { + /* then multiply */ + if ((err = mp_mul (&res, &M[1], &res)) != MP_OKAY) { + goto __RES; + } + if ((err = redux (&res, P, mp)) != MP_OKAY) { + goto __RES; + } + } + } + } + + if (redmode == 0) { + /* fixup result if Montgomery reduction is used + * recall that any value in a Montgomery system is + * actually multiplied by R mod n. So we have + * to reduce one more time to cancel out the factor + * of R. + */ + if ((err = mp_montgomery_reduce (&res, P, mp)) != MP_OKAY) { + goto __RES; + } + } + + /* swap res with Y */ + mp_exch (&res, Y); + err = MP_OKAY; +__RES:mp_clear (&res); +__M: + mp_clear(&M[1]); + for (x = 1<<(winsize-1); x < (1 << winsize); x++) { + mp_clear (&M[x]); + } + return err; +} + +/* End: bn_mp_exptmod_fast.c */ + +/* Start: bn_mp_exteuclid.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* Extended euclidean algorithm of (a, b) produces + a*u1 + b*u2 = u3 + */ +int mp_exteuclid(mp_int *a, mp_int *b, mp_int *U1, mp_int *U2, mp_int *U3) +{ + mp_int u1,u2,u3,v1,v2,v3,t1,t2,t3,q,tmp; + int err; + + if ((err = mp_init_multi(&u1, &u2, &u3, &v1, &v2, &v3, &t1, &t2, &t3, &q, &tmp, NULL)) != MP_OKAY) { + return err; + } + + /* initialize, (u1,u2,u3) = (1,0,a) */ + mp_set(&u1, 1); + if ((err = mp_copy(a, &u3)) != MP_OKAY) { goto _ERR; } + + /* initialize, (v1,v2,v3) = (0,1,b) */ + mp_set(&v2, 1); + if ((err = mp_copy(b, &v3)) != MP_OKAY) { goto _ERR; } + + /* loop while v3 != 0 */ + while (mp_iszero(&v3) == MP_NO) { + /* q = u3/v3 */ + if ((err = mp_div(&u3, &v3, &q, NULL)) != MP_OKAY) { goto _ERR; } + + /* (t1,t2,t3) = (u1,u2,u3) - (v1,v2,v3)q */ + if ((err = mp_mul(&v1, &q, &tmp)) != MP_OKAY) { goto _ERR; } + if ((err = mp_sub(&u1, &tmp, &t1)) != MP_OKAY) { goto _ERR; } + if ((err = mp_mul(&v2, &q, &tmp)) != MP_OKAY) { goto _ERR; } + if ((err = mp_sub(&u2, &tmp, &t2)) != MP_OKAY) { goto _ERR; } + if ((err = mp_mul(&v3, &q, &tmp)) != MP_OKAY) { goto _ERR; } + if ((err = mp_sub(&u3, &tmp, &t3)) != MP_OKAY) { goto _ERR; } + + /* (u1,u2,u3) = (v1,v2,v3) */ + if ((err = mp_copy(&v1, &u1)) != MP_OKAY) { goto _ERR; } + if ((err = mp_copy(&v2, &u2)) != MP_OKAY) { goto _ERR; } + if ((err = mp_copy(&v3, &u3)) != MP_OKAY) { goto _ERR; } + + /* (v1,v2,v3) = (t1,t2,t3) */ + if ((err = mp_copy(&t1, &v1)) != MP_OKAY) { goto _ERR; } + if ((err = mp_copy(&t2, &v2)) != MP_OKAY) { goto _ERR; } + if ((err = mp_copy(&t3, &v3)) != MP_OKAY) { goto _ERR; } + } + + /* copy result out */ + if (U1 != NULL) { mp_exch(U1, &u1); } + if (U2 != NULL) { mp_exch(U2, &u2); } + if (U3 != NULL) { mp_exch(U3, &u3); } + + err = MP_OKAY; +_ERR: mp_clear_multi(&u1, &u2, &u3, &v1, &v2, &v3, &t1, &t2, &t3, &q, &tmp, NULL); + return err; +} + +/* End: bn_mp_exteuclid.c */ + +/* Start: bn_mp_fread.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* read a bigint from a file stream in ASCII */ +int mp_fread(mp_int *a, int radix, FILE *stream) +{ + int err, ch, neg, y; + + /* clear a */ + mp_zero(a); + + /* if first digit is - then set negative */ + ch = fgetc(stream); + if (ch == '-') { + neg = MP_NEG; + ch = fgetc(stream); + } else { + neg = MP_ZPOS; + } + + for (;;) { + /* find y in the radix map */ + for (y = 0; y < radix; y++) { + if (mp_s_rmap[y] == ch) { + break; + } + } + if (y == radix) { + break; + } + + /* shift up and add */ + if ((err = mp_mul_d(a, radix, a)) != MP_OKAY) { + return err; + } + if ((err = mp_add_d(a, y, a)) != MP_OKAY) { + return err; + } + + ch = fgetc(stream); + } + if (mp_cmp_d(a, 0) != MP_EQ) { + a->sign = neg; + } + + return MP_OKAY; +} + + +/* End: bn_mp_fread.c */ + +/* Start: bn_mp_fwrite.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +int mp_fwrite(mp_int *a, int radix, FILE *stream) +{ + char *buf; + int err, len, x; + + if ((err = mp_radix_size(a, radix, &len)) != MP_OKAY) { + return err; + } + + buf = OPT_CAST(char) XMALLOC (len); + if (buf == NULL) { + return MP_MEM; + } + + if ((err = mp_toradix(a, buf, radix)) != MP_OKAY) { + XFREE (buf); + return err; + } + + for (x = 0; x < len; x++) { + if (fputc(buf[x], stream) == EOF) { + XFREE (buf); + return MP_VAL; + } + } + + XFREE (buf); + return MP_OKAY; +} + + +/* End: bn_mp_fwrite.c */ + +/* Start: bn_mp_gcd.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* Greatest Common Divisor using the binary method */ +int mp_gcd (mp_int * a, mp_int * b, mp_int * c) +{ + mp_int u, v; + int k, u_lsb, v_lsb, res; + + /* either zero than gcd is the largest */ + if (mp_iszero (a) == 1 && mp_iszero (b) == 0) { + return mp_abs (b, c); + } + if (mp_iszero (a) == 0 && mp_iszero (b) == 1) { + return mp_abs (a, c); + } + + /* optimized. At this point if a == 0 then + * b must equal zero too + */ + if (mp_iszero (a) == 1) { + mp_zero(c); + return MP_OKAY; + } + + /* get copies of a and b we can modify */ + if ((res = mp_init_copy (&u, a)) != MP_OKAY) { + return res; + } + + if ((res = mp_init_copy (&v, b)) != MP_OKAY) { + goto __U; + } + + /* must be positive for the remainder of the algorithm */ + u.sign = v.sign = MP_ZPOS; + + /* B1. Find the common power of two for u and v */ + u_lsb = mp_cnt_lsb(&u); + v_lsb = mp_cnt_lsb(&v); + k = MIN(u_lsb, v_lsb); + + if (k > 0) { + /* divide the power of two out */ + if ((res = mp_div_2d(&u, k, &u, NULL)) != MP_OKAY) { + goto __V; + } + + if ((res = mp_div_2d(&v, k, &v, NULL)) != MP_OKAY) { + goto __V; + } + } + + /* divide any remaining factors of two out */ + if (u_lsb != k) { + if ((res = mp_div_2d(&u, u_lsb - k, &u, NULL)) != MP_OKAY) { + goto __V; + } + } + + if (v_lsb != k) { + if ((res = mp_div_2d(&v, v_lsb - k, &v, NULL)) != MP_OKAY) { + goto __V; + } + } + + while (mp_iszero(&v) == 0) { + /* make sure v is the largest */ + if (mp_cmp_mag(&u, &v) == MP_GT) { + /* swap u and v to make sure v is >= u */ + mp_exch(&u, &v); + } + + /* subtract smallest from largest */ + if ((res = s_mp_sub(&v, &u, &v)) != MP_OKAY) { + goto __V; + } + + /* Divide out all factors of two */ + if ((res = mp_div_2d(&v, mp_cnt_lsb(&v), &v, NULL)) != MP_OKAY) { + goto __V; + } + } + + /* multiply by 2**k which we divided out at the beginning */ + if ((res = mp_mul_2d (&u, k, c)) != MP_OKAY) { + goto __V; + } + c->sign = MP_ZPOS; + res = MP_OKAY; +__V:mp_clear (&u); +__U:mp_clear (&v); + return res; +} + +/* End: bn_mp_gcd.c */ + +/* Start: bn_mp_get_int.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* get the lower 32-bits of an mp_int */ +unsigned long mp_get_int(mp_int * a) +{ + int i; + unsigned long res; + + if (a->used == 0) { + return 0; + } + + /* get number of digits of the lsb we have to read */ + i = MIN(a->used,(int)((sizeof(unsigned long)*CHAR_BIT+DIGIT_BIT-1)/DIGIT_BIT))-1; + + /* get most significant digit of result */ + res = DIGIT(a,i); + + while (--i >= 0) { + res = (res << DIGIT_BIT) | DIGIT(a,i); + } + + /* force result to 32-bits always so it is consistent on non 32-bit platforms */ + return res & 0xFFFFFFFFUL; +} + +/* End: bn_mp_get_int.c */ + +/* Start: bn_mp_grow.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* grow as required */ +int mp_grow (mp_int * a, int size) +{ + int i; + mp_digit *tmp; + + /* if the alloc size is smaller alloc more ram */ + if (a->alloc < size) { + /* ensure there are always at least MP_PREC digits extra on top */ + size += (MP_PREC * 2) - (size % MP_PREC); + + /* reallocate the array a->dp + * + * We store the return in a temporary variable + * in case the operation failed we don't want + * to overwrite the dp member of a. + */ + tmp = OPT_CAST(mp_digit) XREALLOC (a->dp, sizeof (mp_digit) * size); + if (tmp == NULL) { + /* reallocation failed but "a" is still valid [can be freed] */ + return MP_MEM; + } + + /* reallocation succeeded so set a->dp */ + a->dp = tmp; + + /* zero excess digits */ + i = a->alloc; + a->alloc = size; + for (; i < a->alloc; i++) { + a->dp[i] = 0; + } + } + return MP_OKAY; +} + +/* End: bn_mp_grow.c */ + +/* Start: bn_mp_init.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* init a new mp_int */ +int mp_init (mp_int * a) +{ + int i; + + /* allocate memory required and clear it */ + a->dp = OPT_CAST(mp_digit) XMALLOC (sizeof (mp_digit) * MP_PREC); + if (a->dp == NULL) { + return MP_MEM; + } + + /* set the digits to zero */ + for (i = 0; i < MP_PREC; i++) { + a->dp[i] = 0; + } + + /* set the used to zero, allocated digits to the default precision + * and sign to positive */ + a->used = 0; + a->alloc = MP_PREC; + a->sign = MP_ZPOS; + + return MP_OKAY; +} + +/* End: bn_mp_init.c */ + +/* Start: bn_mp_init_copy.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* creates "a" then copies b into it */ +int mp_init_copy (mp_int * a, mp_int * b) +{ + int res; + + if ((res = mp_init (a)) != MP_OKAY) { + return res; + } + return mp_copy (b, a); +} + +/* End: bn_mp_init_copy.c */ + +/* Start: bn_mp_init_multi.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include +#include + +int mp_init_multi(mp_int *mp, ...) +{ + mp_err res = MP_OKAY; /* Assume ok until proven otherwise */ + int n = 0; /* Number of ok inits */ + mp_int* cur_arg = mp; + va_list args; + + va_start(args, mp); /* init args to next argument from caller */ + while (cur_arg != NULL) { + if (mp_init(cur_arg) != MP_OKAY) { + /* Oops - error! Back-track and mp_clear what we already + succeeded in init-ing, then return error. + */ + va_list clean_args; + + /* end the current list */ + va_end(args); + + /* now start cleaning up */ + cur_arg = mp; + va_start(clean_args, mp); + while (n--) { + mp_clear(cur_arg); + cur_arg = va_arg(clean_args, mp_int*); + } + va_end(clean_args); + res = MP_MEM; + break; + } + n++; + cur_arg = va_arg(args, mp_int*); + } + va_end(args); + return res; /* Assumed ok, if error flagged above. */ +} + + +/* End: bn_mp_init_multi.c */ + +/* Start: bn_mp_init_set.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* initialize and set a digit */ +int mp_init_set (mp_int * a, mp_digit b) +{ + int err; + if ((err = mp_init(a)) != MP_OKAY) { + return err; + } + mp_set(a, b); + return err; +} + +/* End: bn_mp_init_set.c */ + +/* Start: bn_mp_init_set_int.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* initialize and set a digit */ +int mp_init_set_int (mp_int * a, unsigned long b) +{ + int err; + if ((err = mp_init(a)) != MP_OKAY) { + return err; + } + return mp_set_int(a, b); +} + +/* End: bn_mp_init_set_int.c */ + +/* Start: bn_mp_init_size.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* init an mp_init for a given size */ +int mp_init_size (mp_int * a, int size) +{ + /* pad size so there are always extra digits */ + size += (MP_PREC * 2) - (size % MP_PREC); + + /* alloc mem */ + a->dp = OPT_CAST(mp_digit) XCALLOC (sizeof (mp_digit), size); + if (a->dp == NULL) { + return MP_MEM; + } + a->used = 0; + a->alloc = size; + a->sign = MP_ZPOS; + + return MP_OKAY; +} + +/* End: bn_mp_init_size.c */ + +/* Start: bn_mp_invmod.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* hac 14.61, pp608 */ +int mp_invmod (mp_int * a, mp_int * b, mp_int * c) +{ + mp_int x, y, u, v, A, B, C, D; + int res; + + /* b cannot be negative */ + if (b->sign == MP_NEG || mp_iszero(b) == 1) { + return MP_VAL; + } + + /* if the modulus is odd we can use a faster routine instead */ + if (mp_isodd (b) == 1) { + return fast_mp_invmod (a, b, c); + } + + /* init temps */ + if ((res = mp_init_multi(&x, &y, &u, &v, + &A, &B, &C, &D, NULL)) != MP_OKAY) { + return res; + } + + /* x = a, y = b */ + if ((res = mp_copy (a, &x)) != MP_OKAY) { + goto __ERR; + } + if ((res = mp_copy (b, &y)) != MP_OKAY) { + goto __ERR; + } + + /* 2. [modified] if x,y are both even then return an error! */ + if (mp_iseven (&x) == 1 && mp_iseven (&y) == 1) { + res = MP_VAL; + goto __ERR; + } + + /* 3. u=x, v=y, A=1, B=0, C=0,D=1 */ + if ((res = mp_copy (&x, &u)) != MP_OKAY) { + goto __ERR; + } + if ((res = mp_copy (&y, &v)) != MP_OKAY) { + goto __ERR; + } + mp_set (&A, 1); + mp_set (&D, 1); + +top: + /* 4. while u is even do */ + while (mp_iseven (&u) == 1) { + /* 4.1 u = u/2 */ + if ((res = mp_div_2 (&u, &u)) != MP_OKAY) { + goto __ERR; + } + /* 4.2 if A or B is odd then */ + if (mp_isodd (&A) == 1 || mp_isodd (&B) == 1) { + /* A = (A+y)/2, B = (B-x)/2 */ + if ((res = mp_add (&A, &y, &A)) != MP_OKAY) { + goto __ERR; + } + if ((res = mp_sub (&B, &x, &B)) != MP_OKAY) { + goto __ERR; + } + } + /* A = A/2, B = B/2 */ + if ((res = mp_div_2 (&A, &A)) != MP_OKAY) { + goto __ERR; + } + if ((res = mp_div_2 (&B, &B)) != MP_OKAY) { + goto __ERR; + } + } + + /* 5. while v is even do */ + while (mp_iseven (&v) == 1) { + /* 5.1 v = v/2 */ + if ((res = mp_div_2 (&v, &v)) != MP_OKAY) { + goto __ERR; + } + /* 5.2 if C or D is odd then */ + if (mp_isodd (&C) == 1 || mp_isodd (&D) == 1) { + /* C = (C+y)/2, D = (D-x)/2 */ + if ((res = mp_add (&C, &y, &C)) != MP_OKAY) { + goto __ERR; + } + if ((res = mp_sub (&D, &x, &D)) != MP_OKAY) { + goto __ERR; + } + } + /* C = C/2, D = D/2 */ + if ((res = mp_div_2 (&C, &C)) != MP_OKAY) { + goto __ERR; + } + if ((res = mp_div_2 (&D, &D)) != MP_OKAY) { + goto __ERR; + } + } + + /* 6. if u >= v then */ + if (mp_cmp (&u, &v) != MP_LT) { + /* u = u - v, A = A - C, B = B - D */ + if ((res = mp_sub (&u, &v, &u)) != MP_OKAY) { + goto __ERR; + } + + if ((res = mp_sub (&A, &C, &A)) != MP_OKAY) { + goto __ERR; + } + + if ((res = mp_sub (&B, &D, &B)) != MP_OKAY) { + goto __ERR; + } + } else { + /* v - v - u, C = C - A, D = D - B */ + if ((res = mp_sub (&v, &u, &v)) != MP_OKAY) { + goto __ERR; + } + + if ((res = mp_sub (&C, &A, &C)) != MP_OKAY) { + goto __ERR; + } + + if ((res = mp_sub (&D, &B, &D)) != MP_OKAY) { + goto __ERR; + } + } + + /* if not zero goto step 4 */ + if (mp_iszero (&u) == 0) + goto top; + + /* now a = C, b = D, gcd == g*v */ + + /* if v != 1 then there is no inverse */ + if (mp_cmp_d (&v, 1) != MP_EQ) { + res = MP_VAL; + goto __ERR; + } + + /* if its too low */ + while (mp_cmp_d(&C, 0) == MP_LT) { + if ((res = mp_add(&C, b, &C)) != MP_OKAY) { + goto __ERR; + } + } + + /* too big */ + while (mp_cmp_mag(&C, b) != MP_LT) { + if ((res = mp_sub(&C, b, &C)) != MP_OKAY) { + goto __ERR; + } + } + + /* C is now the inverse */ + mp_exch (&C, c); + res = MP_OKAY; +__ERR:mp_clear_multi (&x, &y, &u, &v, &A, &B, &C, &D, NULL); + return res; +} + +/* End: bn_mp_invmod.c */ + +/* Start: bn_mp_is_square.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* Check if remainders are possible squares - fast exclude non-squares */ +static const char rem_128[128] = { + 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 +}; + +static const char rem_105[105] = { + 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, + 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1 +}; + +/* Store non-zero to ret if arg is square, and zero if not */ +int mp_is_square(mp_int *arg,int *ret) +{ + int res; + mp_digit c; + mp_int t; + unsigned long r; + + /* Default to Non-square :) */ + *ret = MP_NO; + + if (arg->sign == MP_NEG) { + return MP_VAL; + } + + /* digits used? (TSD) */ + if (arg->used == 0) { + return MP_OKAY; + } + + /* First check mod 128 (suppose that DIGIT_BIT is at least 7) */ + if (rem_128[127 & DIGIT(arg,0)] == 1) { + return MP_OKAY; + } + + /* Next check mod 105 (3*5*7) */ + if ((res = mp_mod_d(arg,105,&c)) != MP_OKAY) { + return res; + } + if (rem_105[c] == 1) { + return MP_OKAY; + } + + /* product of primes less than 2^31 */ + if ((res = mp_init_set_int(&t,11L*13L*17L*19L*23L*29L*31L)) != MP_OKAY) { + return res; + } + if ((res = mp_mod(arg,&t,&t)) != MP_OKAY) { + goto ERR; + } + r = mp_get_int(&t); + /* Check for other prime modules, note it's not an ERROR but we must + * free "t" so the easiest way is to goto ERR. We know that res + * is already equal to MP_OKAY from the mp_mod call + */ + if ( (1L<<(r%11)) & 0x5C4L ) goto ERR; + if ( (1L<<(r%13)) & 0x9E4L ) goto ERR; + if ( (1L<<(r%17)) & 0x5CE8L ) goto ERR; + if ( (1L<<(r%19)) & 0x4F50CL ) goto ERR; + if ( (1L<<(r%23)) & 0x7ACCA0L ) goto ERR; + if ( (1L<<(r%29)) & 0xC2EDD0CL ) goto ERR; + if ( (1L<<(r%31)) & 0x6DE2B848L ) goto ERR; + + /* Final check - is sqr(sqrt(arg)) == arg ? */ + if ((res = mp_sqrt(arg,&t)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sqr(&t,&t)) != MP_OKAY) { + goto ERR; + } + + *ret = (mp_cmp_mag(&t,arg) == MP_EQ) ? MP_YES : MP_NO; +ERR:mp_clear(&t); + return res; +} + +/* End: bn_mp_is_square.c */ + +/* Start: bn_mp_jacobi.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* computes the jacobi c = (a | n) (or Legendre if n is prime) + * HAC pp. 73 Algorithm 2.149 + */ +int mp_jacobi (mp_int * a, mp_int * p, int *c) +{ + mp_int a1, p1; + int k, s, r, res; + mp_digit residue; + + /* if p <= 0 return MP_VAL */ + if (mp_cmp_d(p, 0) != MP_GT) { + return MP_VAL; + } + + /* step 1. if a == 0, return 0 */ + if (mp_iszero (a) == 1) { + *c = 0; + return MP_OKAY; + } + + /* step 2. if a == 1, return 1 */ + if (mp_cmp_d (a, 1) == MP_EQ) { + *c = 1; + return MP_OKAY; + } + + /* default */ + s = 0; + + /* step 3. write a = a1 * 2**k */ + if ((res = mp_init_copy (&a1, a)) != MP_OKAY) { + return res; + } + + if ((res = mp_init (&p1)) != MP_OKAY) { + goto __A1; + } + + /* divide out larger power of two */ + k = mp_cnt_lsb(&a1); + if ((res = mp_div_2d(&a1, k, &a1, NULL)) != MP_OKAY) { + goto __P1; + } + + /* step 4. if e is even set s=1 */ + if ((k & 1) == 0) { + s = 1; + } else { + /* else set s=1 if p = 1/7 (mod 8) or s=-1 if p = 3/5 (mod 8) */ + residue = p->dp[0] & 7; + + if (residue == 1 || residue == 7) { + s = 1; + } else if (residue == 3 || residue == 5) { + s = -1; + } + } + + /* step 5. if p == 3 (mod 4) *and* a1 == 3 (mod 4) then s = -s */ + if ( ((p->dp[0] & 3) == 3) && ((a1.dp[0] & 3) == 3)) { + s = -s; + } + + /* if a1 == 1 we're done */ + if (mp_cmp_d (&a1, 1) == MP_EQ) { + *c = s; + } else { + /* n1 = n mod a1 */ + if ((res = mp_mod (p, &a1, &p1)) != MP_OKAY) { + goto __P1; + } + if ((res = mp_jacobi (&p1, &a1, &r)) != MP_OKAY) { + goto __P1; + } + *c = s * r; + } + + /* done */ + res = MP_OKAY; +__P1:mp_clear (&p1); +__A1:mp_clear (&a1); + return res; +} + +/* End: bn_mp_jacobi.c */ + +/* Start: bn_mp_karatsuba_mul.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* c = |a| * |b| using Karatsuba Multiplication using + * three half size multiplications + * + * Let B represent the radix [e.g. 2**DIGIT_BIT] and + * let n represent half of the number of digits in + * the min(a,b) + * + * a = a1 * B**n + a0 + * b = b1 * B**n + b0 + * + * Then, a * b => + a1b1 * B**2n + ((a1 - a0)(b1 - b0) + a0b0 + a1b1) * B + a0b0 + * + * Note that a1b1 and a0b0 are used twice and only need to be + * computed once. So in total three half size (half # of + * digit) multiplications are performed, a0b0, a1b1 and + * (a1-b1)(a0-b0) + * + * Note that a multiplication of half the digits requires + * 1/4th the number of single precision multiplications so in + * total after one call 25% of the single precision multiplications + * are saved. Note also that the call to mp_mul can end up back + * in this function if the a0, a1, b0, or b1 are above the threshold. + * This is known as divide-and-conquer and leads to the famous + * O(N**lg(3)) or O(N**1.584) work which is asymptopically lower than + * the standard O(N**2) that the baseline/comba methods use. + * Generally though the overhead of this method doesn't pay off + * until a certain size (N ~ 80) is reached. + */ +int mp_karatsuba_mul (mp_int * a, mp_int * b, mp_int * c) +{ + mp_int x0, x1, y0, y1, t1, x0y0, x1y1; + int B, err; + + /* default the return code to an error */ + err = MP_MEM; + + /* min # of digits */ + B = MIN (a->used, b->used); + + /* now divide in two */ + B = B >> 1; + + /* init copy all the temps */ + if (mp_init_size (&x0, B) != MP_OKAY) + goto ERR; + if (mp_init_size (&x1, a->used - B) != MP_OKAY) + goto X0; + if (mp_init_size (&y0, B) != MP_OKAY) + goto X1; + if (mp_init_size (&y1, b->used - B) != MP_OKAY) + goto Y0; + + /* init temps */ + if (mp_init_size (&t1, B * 2) != MP_OKAY) + goto Y1; + if (mp_init_size (&x0y0, B * 2) != MP_OKAY) + goto T1; + if (mp_init_size (&x1y1, B * 2) != MP_OKAY) + goto X0Y0; + + /* now shift the digits */ + x0.sign = x1.sign = a->sign; + y0.sign = y1.sign = b->sign; + + x0.used = y0.used = B; + x1.used = a->used - B; + y1.used = b->used - B; + + { + register int x; + register mp_digit *tmpa, *tmpb, *tmpx, *tmpy; + + /* we copy the digits directly instead of using higher level functions + * since we also need to shift the digits + */ + tmpa = a->dp; + tmpb = b->dp; + + tmpx = x0.dp; + tmpy = y0.dp; + for (x = 0; x < B; x++) { + *tmpx++ = *tmpa++; + *tmpy++ = *tmpb++; + } + + tmpx = x1.dp; + for (x = B; x < a->used; x++) { + *tmpx++ = *tmpa++; + } + + tmpy = y1.dp; + for (x = B; x < b->used; x++) { + *tmpy++ = *tmpb++; + } + } + + /* only need to clamp the lower words since by definition the + * upper words x1/y1 must have a known number of digits + */ + mp_clamp (&x0); + mp_clamp (&y0); + + /* now calc the products x0y0 and x1y1 */ + /* after this x0 is no longer required, free temp [x0==t2]! */ + if (mp_mul (&x0, &y0, &x0y0) != MP_OKAY) + goto X1Y1; /* x0y0 = x0*y0 */ + if (mp_mul (&x1, &y1, &x1y1) != MP_OKAY) + goto X1Y1; /* x1y1 = x1*y1 */ + + /* now calc x1-x0 and y1-y0 */ + if (mp_sub (&x1, &x0, &t1) != MP_OKAY) + goto X1Y1; /* t1 = x1 - x0 */ + if (mp_sub (&y1, &y0, &x0) != MP_OKAY) + goto X1Y1; /* t2 = y1 - y0 */ + if (mp_mul (&t1, &x0, &t1) != MP_OKAY) + goto X1Y1; /* t1 = (x1 - x0) * (y1 - y0) */ + + /* add x0y0 */ + if (mp_add (&x0y0, &x1y1, &x0) != MP_OKAY) + goto X1Y1; /* t2 = x0y0 + x1y1 */ + if (mp_sub (&x0, &t1, &t1) != MP_OKAY) + goto X1Y1; /* t1 = x0y0 + x1y1 - (x1-x0)*(y1-y0) */ + + /* shift by B */ + if (mp_lshd (&t1, B) != MP_OKAY) + goto X1Y1; /* t1 = (x0y0 + x1y1 - (x1-x0)*(y1-y0))< + +/* Karatsuba squaring, computes b = a*a using three + * half size squarings + * + * See comments of mp_karatsuba_mul for details. It + * is essentially the same algorithm but merely + * tuned to perform recursive squarings. + */ +int mp_karatsuba_sqr (mp_int * a, mp_int * b) +{ + mp_int x0, x1, t1, t2, x0x0, x1x1; + int B, err; + + err = MP_MEM; + + /* min # of digits */ + B = a->used; + + /* now divide in two */ + B = B >> 1; + + /* init copy all the temps */ + if (mp_init_size (&x0, B) != MP_OKAY) + goto ERR; + if (mp_init_size (&x1, a->used - B) != MP_OKAY) + goto X0; + + /* init temps */ + if (mp_init_size (&t1, a->used * 2) != MP_OKAY) + goto X1; + if (mp_init_size (&t2, a->used * 2) != MP_OKAY) + goto T1; + if (mp_init_size (&x0x0, B * 2) != MP_OKAY) + goto T2; + if (mp_init_size (&x1x1, (a->used - B) * 2) != MP_OKAY) + goto X0X0; + + { + register int x; + register mp_digit *dst, *src; + + src = a->dp; + + /* now shift the digits */ + dst = x0.dp; + for (x = 0; x < B; x++) { + *dst++ = *src++; + } + + dst = x1.dp; + for (x = B; x < a->used; x++) { + *dst++ = *src++; + } + } + + x0.used = B; + x1.used = a->used - B; + + mp_clamp (&x0); + + /* now calc the products x0*x0 and x1*x1 */ + if (mp_sqr (&x0, &x0x0) != MP_OKAY) + goto X1X1; /* x0x0 = x0*x0 */ + if (mp_sqr (&x1, &x1x1) != MP_OKAY) + goto X1X1; /* x1x1 = x1*x1 */ + + /* now calc (x1-x0)**2 */ + if (mp_sub (&x1, &x0, &t1) != MP_OKAY) + goto X1X1; /* t1 = x1 - x0 */ + if (mp_sqr (&t1, &t1) != MP_OKAY) + goto X1X1; /* t1 = (x1 - x0) * (x1 - x0) */ + + /* add x0y0 */ + if (s_mp_add (&x0x0, &x1x1, &t2) != MP_OKAY) + goto X1X1; /* t2 = x0x0 + x1x1 */ + if (mp_sub (&t2, &t1, &t1) != MP_OKAY) + goto X1X1; /* t1 = x0x0 + x1x1 - (x1-x0)*(x1-x0) */ + + /* shift by B */ + if (mp_lshd (&t1, B) != MP_OKAY) + goto X1X1; /* t1 = (x0x0 + x1x1 - (x1-x0)*(x1-x0))< + +/* computes least common multiple as |a*b|/(a, b) */ +int mp_lcm (mp_int * a, mp_int * b, mp_int * c) +{ + int res; + mp_int t1, t2; + + + if ((res = mp_init_multi (&t1, &t2, NULL)) != MP_OKAY) { + return res; + } + + /* t1 = get the GCD of the two inputs */ + if ((res = mp_gcd (a, b, &t1)) != MP_OKAY) { + goto __T; + } + + /* divide the smallest by the GCD */ + if (mp_cmp_mag(a, b) == MP_LT) { + /* store quotient in t2 such that t2 * b is the LCM */ + if ((res = mp_div(a, &t1, &t2, NULL)) != MP_OKAY) { + goto __T; + } + res = mp_mul(b, &t2, c); + } else { + /* store quotient in t2 such that t2 * a is the LCM */ + if ((res = mp_div(b, &t1, &t2, NULL)) != MP_OKAY) { + goto __T; + } + res = mp_mul(a, &t2, c); + } + + /* fix the sign to positive */ + c->sign = MP_ZPOS; + +__T: + mp_clear_multi (&t1, &t2, NULL); + return res; +} + +/* End: bn_mp_lcm.c */ + +/* Start: bn_mp_lshd.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* shift left a certain amount of digits */ +int mp_lshd (mp_int * a, int b) +{ + int x, res; + + /* if its less than zero return */ + if (b <= 0) { + return MP_OKAY; + } + + /* grow to fit the new digits */ + if (a->alloc < a->used + b) { + if ((res = mp_grow (a, a->used + b)) != MP_OKAY) { + return res; + } + } + + { + register mp_digit *top, *bottom; + + /* increment the used by the shift amount then copy upwards */ + a->used += b; + + /* top */ + top = a->dp + a->used - 1; + + /* base */ + bottom = a->dp + a->used - 1 - b; + + /* much like mp_rshd this is implemented using a sliding window + * except the window goes the otherway around. Copying from + * the bottom to the top. see bn_mp_rshd.c for more info. + */ + for (x = a->used - 1; x >= b; x--) { + *top-- = *bottom--; + } + + /* zero the lower digits */ + top = a->dp; + for (x = 0; x < b; x++) { + *top++ = 0; + } + } + return MP_OKAY; +} + +/* End: bn_mp_lshd.c */ + +/* Start: bn_mp_mod.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* c = a mod b, 0 <= c < b */ +int +mp_mod (mp_int * a, mp_int * b, mp_int * c) +{ + mp_int t; + int res; + + if ((res = mp_init (&t)) != MP_OKAY) { + return res; + } + + if ((res = mp_div (a, b, NULL, &t)) != MP_OKAY) { + mp_clear (&t); + return res; + } + + if (t.sign != b->sign) { + res = mp_add (b, &t, c); + } else { + res = MP_OKAY; + mp_exch (&t, c); + } + + mp_clear (&t); + return res; +} + +/* End: bn_mp_mod.c */ + +/* Start: bn_mp_mod_2d.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* calc a value mod 2**b */ +int +mp_mod_2d (mp_int * a, int b, mp_int * c) +{ + int x, res; + + /* if b is <= 0 then zero the int */ + if (b <= 0) { + mp_zero (c); + return MP_OKAY; + } + + /* if the modulus is larger than the value than return */ + if (b > (int) (a->used * DIGIT_BIT)) { + res = mp_copy (a, c); + return res; + } + + /* copy */ + if ((res = mp_copy (a, c)) != MP_OKAY) { + return res; + } + + /* zero digits above the last digit of the modulus */ + for (x = (b / DIGIT_BIT) + ((b % DIGIT_BIT) == 0 ? 0 : 1); x < c->used; x++) { + c->dp[x] = 0; + } + /* clear the digit that is not completely outside/inside the modulus */ + c->dp[b / DIGIT_BIT] &= + (mp_digit) ((((mp_digit) 1) << (((mp_digit) b) % DIGIT_BIT)) - ((mp_digit) 1)); + mp_clamp (c); + return MP_OKAY; +} + +/* End: bn_mp_mod_2d.c */ + +/* Start: bn_mp_mod_d.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +int +mp_mod_d (mp_int * a, mp_digit b, mp_digit * c) +{ + return mp_div_d(a, b, NULL, c); +} + +/* End: bn_mp_mod_d.c */ + +/* Start: bn_mp_montgomery_calc_normalization.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* calculates a = B^n mod b for Montgomery reduction + * Where B is the base [e.g. 2^DIGIT_BIT]. + * B^n mod b is computed by first computing + * A = B^(n-1) which doesn't require a reduction but a simple OR. + * then C = A * B = B^n is computed by performing upto DIGIT_BIT + * shifts with subtractions when the result is greater than b. + * + * The method is slightly modified to shift B unconditionally upto just under + * the leading bit of b. This saves alot of multiple precision shifting. + */ +int +mp_montgomery_calc_normalization (mp_int * a, mp_int * b) +{ + int x, bits, res; + + /* how many bits of last digit does b use */ + bits = mp_count_bits (b) % DIGIT_BIT; + + /* compute A = B^(n-1) * 2^(bits-1) */ + if ((res = mp_2expt (a, (b->used - 1) * DIGIT_BIT + bits - 1)) != MP_OKAY) { + return res; + } + + /* now compute C = A * B mod b */ + for (x = bits - 1; x < (int)DIGIT_BIT; x++) { + if ((res = mp_mul_2 (a, a)) != MP_OKAY) { + return res; + } + if (mp_cmp_mag (a, b) != MP_LT) { + if ((res = s_mp_sub (a, b, a)) != MP_OKAY) { + return res; + } + } + } + + return MP_OKAY; +} + +/* End: bn_mp_montgomery_calc_normalization.c */ + +/* Start: bn_mp_montgomery_reduce.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* computes xR**-1 == x (mod N) via Montgomery Reduction */ +int +mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) +{ + int ix, res, digs; + mp_digit mu; + + /* can the fast reduction [comba] method be used? + * + * Note that unlike in mp_mul you're safely allowed *less* + * than the available columns [255 per default] since carries + * are fixed up in the inner loop. + */ + digs = n->used * 2 + 1; + if ((digs < MP_WARRAY) && + n->used < + (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { + return fast_mp_montgomery_reduce (x, n, rho); + } + + /* grow the input as required */ + if (x->alloc < digs) { + if ((res = mp_grow (x, digs)) != MP_OKAY) { + return res; + } + } + x->used = digs; + + for (ix = 0; ix < n->used; ix++) { + /* mu = ai * rho mod b + * + * The value of rho must be precalculated via + * bn_mp_montgomery_setup() such that + * it equals -1/n0 mod b this allows the + * following inner loop to reduce the + * input one digit at a time + */ + mu = (mp_digit) (((mp_word)x->dp[ix]) * ((mp_word)rho) & MP_MASK); + + /* a = a + mu * m * b**i */ + { + register int iy; + register mp_digit *tmpn, *tmpx, u; + register mp_word r; + + /* alias for digits of the modulus */ + tmpn = n->dp; + + /* alias for the digits of x [the input] */ + tmpx = x->dp + ix; + + /* set the carry to zero */ + u = 0; + + /* Multiply and add in place */ + for (iy = 0; iy < n->used; iy++) { + /* compute product and sum */ + r = ((mp_word)mu) * ((mp_word)*tmpn++) + + ((mp_word) u) + ((mp_word) * tmpx); + + /* get carry */ + u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); + + /* fix digit */ + *tmpx++ = (mp_digit)(r & ((mp_word) MP_MASK)); + } + /* At this point the ix'th digit of x should be zero */ + + + /* propagate carries upwards as required*/ + while (u) { + *tmpx += u; + u = *tmpx >> DIGIT_BIT; + *tmpx++ &= MP_MASK; + } + } + } + + /* at this point the n.used'th least + * significant digits of x are all zero + * which means we can shift x to the + * right by n.used digits and the + * residue is unchanged. + */ + + /* x = x/b**n.used */ + mp_clamp(x); + mp_rshd (x, n->used); + + /* if x >= n then x = x - n */ + if (mp_cmp_mag (x, n) != MP_LT) { + return s_mp_sub (x, n, x); + } + + return MP_OKAY; +} + +/* End: bn_mp_montgomery_reduce.c */ + +/* Start: bn_mp_montgomery_setup.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* setups the montgomery reduction stuff */ +int +mp_montgomery_setup (mp_int * n, mp_digit * rho) +{ + mp_digit x, b; + +/* fast inversion mod 2**k + * + * Based on the fact that + * + * XA = 1 (mod 2**n) => (X(2-XA)) A = 1 (mod 2**2n) + * => 2*X*A - X*X*A*A = 1 + * => 2*(1) - (1) = 1 + */ + b = n->dp[0]; + + if ((b & 1) == 0) { + return MP_VAL; + } + + x = (((b + 2) & 4) << 1) + b; /* here x*a==1 mod 2**4 */ + x *= 2 - b * x; /* here x*a==1 mod 2**8 */ +#if !defined(MP_8BIT) + x *= 2 - b * x; /* here x*a==1 mod 2**16 */ +#endif +#if defined(MP_64BIT) || !(defined(MP_8BIT) || defined(MP_16BIT)) + x *= 2 - b * x; /* here x*a==1 mod 2**32 */ +#endif +#ifdef MP_64BIT + x *= 2 - b * x; /* here x*a==1 mod 2**64 */ +#endif + + /* rho = -1/m mod b */ + *rho = (((mp_digit) 1 << ((mp_digit) DIGIT_BIT)) - x) & MP_MASK; + + return MP_OKAY; +} + +/* End: bn_mp_montgomery_setup.c */ + +/* Start: bn_mp_mul.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* high level multiplication (handles sign) */ +int mp_mul (mp_int * a, mp_int * b, mp_int * c) +{ + int res, neg; + neg = (a->sign == b->sign) ? MP_ZPOS : MP_NEG; + + /* use Toom-Cook? */ + if (MIN (a->used, b->used) >= TOOM_MUL_CUTOFF) { + res = mp_toom_mul(a, b, c); + /* use Karatsuba? */ + } else if (MIN (a->used, b->used) >= KARATSUBA_MUL_CUTOFF) { + res = mp_karatsuba_mul (a, b, c); + } else { + /* can we use the fast multiplier? + * + * The fast multiplier can be used if the output will + * have less than MP_WARRAY digits and the number of + * digits won't affect carry propagation + */ + int digs = a->used + b->used + 1; + + if ((digs < MP_WARRAY) && + MIN(a->used, b->used) <= + (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { + res = fast_s_mp_mul_digs (a, b, c, digs); + } else { + res = s_mp_mul (a, b, c); + } + } + c->sign = neg; + return res; +} + +/* End: bn_mp_mul.c */ + +/* Start: bn_mp_mul_2.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* b = a*2 */ +int mp_mul_2(mp_int * a, mp_int * b) +{ + int x, res, oldused; + + /* grow to accomodate result */ + if (b->alloc < a->used + 1) { + if ((res = mp_grow (b, a->used + 1)) != MP_OKAY) { + return res; + } + } + + oldused = b->used; + b->used = a->used; + + { + register mp_digit r, rr, *tmpa, *tmpb; + + /* alias for source */ + tmpa = a->dp; + + /* alias for dest */ + tmpb = b->dp; + + /* carry */ + r = 0; + for (x = 0; x < a->used; x++) { + + /* get what will be the *next* carry bit from the + * MSB of the current digit + */ + rr = *tmpa >> ((mp_digit)(DIGIT_BIT - 1)); + + /* now shift up this digit, add in the carry [from the previous] */ + *tmpb++ = ((*tmpa++ << ((mp_digit)1)) | r) & MP_MASK; + + /* copy the carry that would be from the source + * digit into the next iteration + */ + r = rr; + } + + /* new leading digit? */ + if (r != 0) { + /* add a MSB which is always 1 at this point */ + *tmpb = 1; + ++(b->used); + } + + /* now zero any excess digits on the destination + * that we didn't write to + */ + tmpb = b->dp + b->used; + for (x = b->used; x < oldused; x++) { + *tmpb++ = 0; + } + } + b->sign = a->sign; + return MP_OKAY; +} + +/* End: bn_mp_mul_2.c */ + +/* Start: bn_mp_mul_2d.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* shift left by a certain bit count */ +int mp_mul_2d (mp_int * a, int b, mp_int * c) +{ + mp_digit d; + int res; + + /* copy */ + if (a != c) { + if ((res = mp_copy (a, c)) != MP_OKAY) { + return res; + } + } + + if (c->alloc < (int)(c->used + b/DIGIT_BIT + 1)) { + if ((res = mp_grow (c, c->used + b / DIGIT_BIT + 1)) != MP_OKAY) { + return res; + } + } + + /* shift by as many digits in the bit count */ + if (b >= (int)DIGIT_BIT) { + if ((res = mp_lshd (c, b / DIGIT_BIT)) != MP_OKAY) { + return res; + } + } + + /* shift any bit count < DIGIT_BIT */ + d = (mp_digit) (b % DIGIT_BIT); + if (d != 0) { + register mp_digit *tmpc, shift, mask, r, rr; + register int x; + + /* bitmask for carries */ + mask = (((mp_digit)1) << d) - 1; + + /* shift for msbs */ + shift = DIGIT_BIT - d; + + /* alias */ + tmpc = c->dp; + + /* carry */ + r = 0; + for (x = 0; x < c->used; x++) { + /* get the higher bits of the current word */ + rr = (*tmpc >> shift) & mask; + + /* shift the current word and OR in the carry */ + *tmpc = ((*tmpc << d) | r) & MP_MASK; + ++tmpc; + + /* set the carry to the carry bits of the current word */ + r = rr; + } + + /* set final carry */ + if (r != 0) { + c->dp[(c->used)++] = r; + } + } + mp_clamp (c); + return MP_OKAY; +} + +/* End: bn_mp_mul_2d.c */ + +/* Start: bn_mp_mul_d.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* multiply by a digit */ +int +mp_mul_d (mp_int * a, mp_digit b, mp_int * c) +{ + mp_digit u, *tmpa, *tmpc; + mp_word r; + int ix, res, olduse; + + /* make sure c is big enough to hold a*b */ + if (c->alloc < a->used + 1) { + if ((res = mp_grow (c, a->used + 1)) != MP_OKAY) { + return res; + } + } + + /* get the original destinations used count */ + olduse = c->used; + + /* set the sign */ + c->sign = a->sign; + + /* alias for a->dp [source] */ + tmpa = a->dp; + + /* alias for c->dp [dest] */ + tmpc = c->dp; + + /* zero carry */ + u = 0; + + /* compute columns */ + for (ix = 0; ix < a->used; ix++) { + /* compute product and carry sum for this term */ + r = ((mp_word) u) + ((mp_word)*tmpa++) * ((mp_word)b); + + /* mask off higher bits to get a single digit */ + *tmpc++ = (mp_digit) (r & ((mp_word) MP_MASK)); + + /* send carry into next iteration */ + u = (mp_digit) (r >> ((mp_word) DIGIT_BIT)); + } + + /* store final carry [if any] */ + *tmpc++ = u; + + /* now zero digits above the top */ + while (ix++ < olduse) { + *tmpc++ = 0; + } + + /* set used count */ + c->used = a->used + 1; + mp_clamp(c); + + return MP_OKAY; +} + +/* End: bn_mp_mul_d.c */ + +/* Start: bn_mp_mulmod.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* d = a * b (mod c) */ +int +mp_mulmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d) +{ + int res; + mp_int t; + + if ((res = mp_init (&t)) != MP_OKAY) { + return res; + } + + if ((res = mp_mul (a, b, &t)) != MP_OKAY) { + mp_clear (&t); + return res; + } + res = mp_mod (&t, c, d); + mp_clear (&t); + return res; +} + +/* End: bn_mp_mulmod.c */ + +/* Start: bn_mp_n_root.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* find the n'th root of an integer + * + * Result found such that (c)**b <= a and (c+1)**b > a + * + * This algorithm uses Newton's approximation + * x[i+1] = x[i] - f(x[i])/f'(x[i]) + * which will find the root in log(N) time where + * each step involves a fair bit. This is not meant to + * find huge roots [square and cube, etc]. + */ +int mp_n_root (mp_int * a, mp_digit b, mp_int * c) +{ + mp_int t1, t2, t3; + int res, neg; + + /* input must be positive if b is even */ + if ((b & 1) == 0 && a->sign == MP_NEG) { + return MP_VAL; + } + + if ((res = mp_init (&t1)) != MP_OKAY) { + return res; + } + + if ((res = mp_init (&t2)) != MP_OKAY) { + goto __T1; + } + + if ((res = mp_init (&t3)) != MP_OKAY) { + goto __T2; + } + + /* if a is negative fudge the sign but keep track */ + neg = a->sign; + a->sign = MP_ZPOS; + + /* t2 = 2 */ + mp_set (&t2, 2); + + do { + /* t1 = t2 */ + if ((res = mp_copy (&t2, &t1)) != MP_OKAY) { + goto __T3; + } + + /* t2 = t1 - ((t1**b - a) / (b * t1**(b-1))) */ + + /* t3 = t1**(b-1) */ + if ((res = mp_expt_d (&t1, b - 1, &t3)) != MP_OKAY) { + goto __T3; + } + + /* numerator */ + /* t2 = t1**b */ + if ((res = mp_mul (&t3, &t1, &t2)) != MP_OKAY) { + goto __T3; + } + + /* t2 = t1**b - a */ + if ((res = mp_sub (&t2, a, &t2)) != MP_OKAY) { + goto __T3; + } + + /* denominator */ + /* t3 = t1**(b-1) * b */ + if ((res = mp_mul_d (&t3, b, &t3)) != MP_OKAY) { + goto __T3; + } + + /* t3 = (t1**b - a)/(b * t1**(b-1)) */ + if ((res = mp_div (&t2, &t3, &t3, NULL)) != MP_OKAY) { + goto __T3; + } + + if ((res = mp_sub (&t1, &t3, &t2)) != MP_OKAY) { + goto __T3; + } + } while (mp_cmp (&t1, &t2) != MP_EQ); + + /* result can be off by a few so check */ + for (;;) { + if ((res = mp_expt_d (&t1, b, &t2)) != MP_OKAY) { + goto __T3; + } + + if (mp_cmp (&t2, a) == MP_GT) { + if ((res = mp_sub_d (&t1, 1, &t1)) != MP_OKAY) { + goto __T3; + } + } else { + break; + } + } + + /* reset the sign of a first */ + a->sign = neg; + + /* set the result */ + mp_exch (&t1, c); + + /* set the sign of the result */ + c->sign = neg; + + res = MP_OKAY; + +__T3:mp_clear (&t3); +__T2:mp_clear (&t2); +__T1:mp_clear (&t1); + return res; +} + +/* End: bn_mp_n_root.c */ + +/* Start: bn_mp_neg.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* b = -a */ +int mp_neg (mp_int * a, mp_int * b) +{ + int res; + if ((res = mp_copy (a, b)) != MP_OKAY) { + return res; + } + if (mp_iszero(b) != MP_YES) { + b->sign = (a->sign == MP_ZPOS) ? MP_NEG : MP_ZPOS; + } + return MP_OKAY; +} + +/* End: bn_mp_neg.c */ + +/* Start: bn_mp_or.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* OR two ints together */ +int mp_or (mp_int * a, mp_int * b, mp_int * c) +{ + int res, ix, px; + mp_int t, *x; + + if (a->used > b->used) { + if ((res = mp_init_copy (&t, a)) != MP_OKAY) { + return res; + } + px = b->used; + x = b; + } else { + if ((res = mp_init_copy (&t, b)) != MP_OKAY) { + return res; + } + px = a->used; + x = a; + } + + for (ix = 0; ix < px; ix++) { + t.dp[ix] |= x->dp[ix]; + } + mp_clamp (&t); + mp_exch (c, &t); + mp_clear (&t); + return MP_OKAY; +} + +/* End: bn_mp_or.c */ + +/* Start: bn_mp_prime_fermat.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* performs one Fermat test. + * + * If "a" were prime then b**a == b (mod a) since the order of + * the multiplicative sub-group would be phi(a) = a-1. That means + * it would be the same as b**(a mod (a-1)) == b**1 == b (mod a). + * + * Sets result to 1 if the congruence holds, or zero otherwise. + */ +int mp_prime_fermat (mp_int * a, mp_int * b, int *result) +{ + mp_int t; + int err; + + /* default to composite */ + *result = MP_NO; + + /* ensure b > 1 */ + if (mp_cmp_d(b, 1) != MP_GT) { + return MP_VAL; + } + + /* init t */ + if ((err = mp_init (&t)) != MP_OKAY) { + return err; + } + + /* compute t = b**a mod a */ + if ((err = mp_exptmod (b, a, a, &t)) != MP_OKAY) { + goto __T; + } + + /* is it equal to b? */ + if (mp_cmp (&t, b) == MP_EQ) { + *result = MP_YES; + } + + err = MP_OKAY; +__T:mp_clear (&t); + return err; +} + +/* End: bn_mp_prime_fermat.c */ + +/* Start: bn_mp_prime_is_divisible.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* determines if an integers is divisible by one + * of the first PRIME_SIZE primes or not + * + * sets result to 0 if not, 1 if yes + */ +int mp_prime_is_divisible (mp_int * a, int *result) +{ + int err, ix; + mp_digit res; + + /* default to not */ + *result = MP_NO; + + for (ix = 0; ix < PRIME_SIZE; ix++) { + /* what is a mod __prime_tab[ix] */ + if ((err = mp_mod_d (a, __prime_tab[ix], &res)) != MP_OKAY) { + return err; + } + + /* is the residue zero? */ + if (res == 0) { + *result = MP_YES; + return MP_OKAY; + } + } + + return MP_OKAY; +} + +/* End: bn_mp_prime_is_divisible.c */ + +/* Start: bn_mp_prime_is_prime.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* performs a variable number of rounds of Miller-Rabin + * + * Probability of error after t rounds is no more than + * (1/4)^t when 1 <= t <= PRIME_SIZE + * + * Sets result to 1 if probably prime, 0 otherwise + */ +int mp_prime_is_prime (mp_int * a, int t, int *result) +{ + mp_int b; + int ix, err, res; + + /* default to no */ + *result = MP_NO; + + /* valid value of t? */ + if (t <= 0 || t > PRIME_SIZE) { + return MP_VAL; + } + + /* is the input equal to one of the primes in the table? */ + for (ix = 0; ix < PRIME_SIZE; ix++) { + if (mp_cmp_d(a, __prime_tab[ix]) == MP_EQ) { + *result = 1; + return MP_OKAY; + } + } + + /* first perform trial division */ + if ((err = mp_prime_is_divisible (a, &res)) != MP_OKAY) { + return err; + } + + /* return if it was trivially divisible */ + if (res == MP_YES) { + return MP_OKAY; + } + + /* now perform the miller-rabin rounds */ + if ((err = mp_init (&b)) != MP_OKAY) { + return err; + } + + for (ix = 0; ix < t; ix++) { + /* set the prime */ + mp_set (&b, __prime_tab[ix]); + + if ((err = mp_prime_miller_rabin (a, &b, &res)) != MP_OKAY) { + goto __B; + } + + if (res == MP_NO) { + goto __B; + } + } + + /* passed the test */ + *result = MP_YES; +__B:mp_clear (&b); + return err; +} + +/* End: bn_mp_prime_is_prime.c */ + +/* Start: bn_mp_prime_miller_rabin.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* Miller-Rabin test of "a" to the base of "b" as described in + * HAC pp. 139 Algorithm 4.24 + * + * Sets result to 0 if definitely composite or 1 if probably prime. + * Randomly the chance of error is no more than 1/4 and often + * very much lower. + */ +int mp_prime_miller_rabin (mp_int * a, mp_int * b, int *result) +{ + mp_int n1, y, r; + int s, j, err; + + /* default */ + *result = MP_NO; + + /* ensure b > 1 */ + if (mp_cmp_d(b, 1) != MP_GT) { + return MP_VAL; + } + + /* get n1 = a - 1 */ + if ((err = mp_init_copy (&n1, a)) != MP_OKAY) { + return err; + } + if ((err = mp_sub_d (&n1, 1, &n1)) != MP_OKAY) { + goto __N1; + } + + /* set 2**s * r = n1 */ + if ((err = mp_init_copy (&r, &n1)) != MP_OKAY) { + goto __N1; + } + + /* count the number of least significant bits + * which are zero + */ + s = mp_cnt_lsb(&r); + + /* now divide n - 1 by 2**s */ + if ((err = mp_div_2d (&r, s, &r, NULL)) != MP_OKAY) { + goto __R; + } + + /* compute y = b**r mod a */ + if ((err = mp_init (&y)) != MP_OKAY) { + goto __R; + } + if ((err = mp_exptmod (b, &r, a, &y)) != MP_OKAY) { + goto __Y; + } + + /* if y != 1 and y != n1 do */ + if (mp_cmp_d (&y, 1) != MP_EQ && mp_cmp (&y, &n1) != MP_EQ) { + j = 1; + /* while j <= s-1 and y != n1 */ + while ((j <= (s - 1)) && mp_cmp (&y, &n1) != MP_EQ) { + if ((err = mp_sqrmod (&y, a, &y)) != MP_OKAY) { + goto __Y; + } + + /* if y == 1 then composite */ + if (mp_cmp_d (&y, 1) == MP_EQ) { + goto __Y; + } + + ++j; + } + + /* if y != n1 then composite */ + if (mp_cmp (&y, &n1) != MP_EQ) { + goto __Y; + } + } + + /* probably prime now */ + *result = MP_YES; +__Y:mp_clear (&y); +__R:mp_clear (&r); +__N1:mp_clear (&n1); + return err; +} + +/* End: bn_mp_prime_miller_rabin.c */ + +/* Start: bn_mp_prime_next_prime.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* finds the next prime after the number "a" using "t" trials + * of Miller-Rabin. + * + * bbs_style = 1 means the prime must be congruent to 3 mod 4 + */ +int mp_prime_next_prime(mp_int *a, int t, int bbs_style) +{ + int err, res, x, y; + mp_digit res_tab[PRIME_SIZE], step, kstep; + mp_int b; + + /* ensure t is valid */ + if (t <= 0 || t > PRIME_SIZE) { + return MP_VAL; + } + + /* force positive */ + a->sign = MP_ZPOS; + + /* simple algo if a is less than the largest prime in the table */ + if (mp_cmp_d(a, __prime_tab[PRIME_SIZE-1]) == MP_LT) { + /* find which prime it is bigger than */ + for (x = PRIME_SIZE - 2; x >= 0; x--) { + if (mp_cmp_d(a, __prime_tab[x]) != MP_LT) { + if (bbs_style == 1) { + /* ok we found a prime smaller or + * equal [so the next is larger] + * + * however, the prime must be + * congruent to 3 mod 4 + */ + if ((__prime_tab[x + 1] & 3) != 3) { + /* scan upwards for a prime congruent to 3 mod 4 */ + for (y = x + 1; y < PRIME_SIZE; y++) { + if ((__prime_tab[y] & 3) == 3) { + mp_set(a, __prime_tab[y]); + return MP_OKAY; + } + } + } + } else { + mp_set(a, __prime_tab[x + 1]); + return MP_OKAY; + } + } + } + /* at this point a maybe 1 */ + if (mp_cmp_d(a, 1) == MP_EQ) { + mp_set(a, 2); + return MP_OKAY; + } + /* fall through to the sieve */ + } + + /* generate a prime congruent to 3 mod 4 or 1/3 mod 4? */ + if (bbs_style == 1) { + kstep = 4; + } else { + kstep = 2; + } + + /* at this point we will use a combination of a sieve and Miller-Rabin */ + + if (bbs_style == 1) { + /* if a mod 4 != 3 subtract the correct value to make it so */ + if ((a->dp[0] & 3) != 3) { + if ((err = mp_sub_d(a, (a->dp[0] & 3) + 1, a)) != MP_OKAY) { return err; }; + } + } else { + if (mp_iseven(a) == 1) { + /* force odd */ + if ((err = mp_sub_d(a, 1, a)) != MP_OKAY) { + return err; + } + } + } + + /* generate the restable */ + for (x = 1; x < PRIME_SIZE; x++) { + if ((err = mp_mod_d(a, __prime_tab[x], res_tab + x)) != MP_OKAY) { + return err; + } + } + + /* init temp used for Miller-Rabin Testing */ + if ((err = mp_init(&b)) != MP_OKAY) { + return err; + } + + for (;;) { + /* skip to the next non-trivially divisible candidate */ + step = 0; + do { + /* y == 1 if any residue was zero [e.g. cannot be prime] */ + y = 0; + + /* increase step to next candidate */ + step += kstep; + + /* compute the new residue without using division */ + for (x = 1; x < PRIME_SIZE; x++) { + /* add the step to each residue */ + res_tab[x] += kstep; + + /* subtract the modulus [instead of using division] */ + if (res_tab[x] >= __prime_tab[x]) { + res_tab[x] -= __prime_tab[x]; + } + + /* set flag if zero */ + if (res_tab[x] == 0) { + y = 1; + } + } + } while (y == 1 && step < ((((mp_digit)1)<= ((((mp_digit)1)< + +/* makes a truly random prime of a given size (bits), + * + * Flags are as follows: + * + * LTM_PRIME_BBS - make prime congruent to 3 mod 4 + * LTM_PRIME_SAFE - make sure (p-1)/2 is prime as well (implies LTM_PRIME_BBS) + * LTM_PRIME_2MSB_OFF - make the 2nd highest bit zero + * LTM_PRIME_2MSB_ON - make the 2nd highest bit one + * + * You have to supply a callback which fills in a buffer with random bytes. "dat" is a parameter you can + * have passed to the callback (e.g. a state or something). This function doesn't use "dat" itself + * so it can be NULL + * + */ + +/* This is possibly the mother of all prime generation functions, muahahahahaha! */ +int mp_prime_random_ex(mp_int *a, int t, int size, int flags, ltm_prime_callback cb, void *dat) +{ + unsigned char *tmp, maskAND, maskOR_msb, maskOR_lsb; + int res, err, bsize, maskOR_msb_offset; + + /* sanity check the input */ + if (size <= 1 || t <= 0) { + return MP_VAL; + } + + /* LTM_PRIME_SAFE implies LTM_PRIME_BBS */ + if (flags & LTM_PRIME_SAFE) { + flags |= LTM_PRIME_BBS; + } + + /* calc the byte size */ + bsize = (size>>3)+(size&7?1:0); + + /* we need a buffer of bsize bytes */ + tmp = OPT_CAST(unsigned char) XMALLOC(bsize); + if (tmp == NULL) { + return MP_MEM; + } + + /* calc the maskAND value for the MSbyte*/ + maskAND = 0xFF >> (8 - (size & 7)); + + /* calc the maskOR_msb */ + maskOR_msb = 0; + maskOR_msb_offset = (size - 2) >> 3; + if (flags & LTM_PRIME_2MSB_ON) { + maskOR_msb |= 1 << ((size - 2) & 7); + } else if (flags & LTM_PRIME_2MSB_OFF) { + maskAND &= ~(1 << ((size - 2) & 7)); + } + + /* get the maskOR_lsb */ + maskOR_lsb = 0; + if (flags & LTM_PRIME_BBS) { + maskOR_lsb |= 3; + } + + do { + /* read the bytes */ + if (cb(tmp, bsize, dat) != bsize) { + err = MP_VAL; + goto error; + } + + /* work over the MSbyte */ + tmp[0] &= maskAND; + tmp[0] |= 1 << ((size - 1) & 7); + + /* mix in the maskORs */ + tmp[maskOR_msb_offset] |= maskOR_msb; + tmp[bsize-1] |= maskOR_lsb; + + /* read it in */ + if ((err = mp_read_unsigned_bin(a, tmp, bsize)) != MP_OKAY) { goto error; } + + /* is it prime? */ + if ((err = mp_prime_is_prime(a, t, &res)) != MP_OKAY) { goto error; } + + if (flags & LTM_PRIME_SAFE) { + /* see if (a-1)/2 is prime */ + if ((err = mp_sub_d(a, 1, a)) != MP_OKAY) { goto error; } + if ((err = mp_div_2(a, a)) != MP_OKAY) { goto error; } + + /* is it prime? */ + if ((err = mp_prime_is_prime(a, t, &res)) != MP_OKAY) { goto error; } + } + } while (res == MP_NO); + + if (flags & LTM_PRIME_SAFE) { + /* restore a to the original value */ + if ((err = mp_mul_2(a, a)) != MP_OKAY) { goto error; } + if ((err = mp_add_d(a, 1, a)) != MP_OKAY) { goto error; } + } + + err = MP_OKAY; +error: + XFREE(tmp); + return err; +} + + + +/* End: bn_mp_prime_random_ex.c */ + +/* Start: bn_mp_radix_size.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* returns size of ASCII reprensentation */ +int mp_radix_size (mp_int * a, int radix, int *size) +{ + int res, digs; + mp_int t; + mp_digit d; + + *size = 0; + + /* special case for binary */ + if (radix == 2) { + *size = mp_count_bits (a) + (a->sign == MP_NEG ? 1 : 0) + 1; + return MP_OKAY; + } + + /* make sure the radix is in range */ + if (radix < 2 || radix > 64) { + return MP_VAL; + } + + /* init a copy of the input */ + if ((res = mp_init_copy (&t, a)) != MP_OKAY) { + return res; + } + + /* digs is the digit count */ + digs = 0; + + /* if it's negative add one for the sign */ + if (t.sign == MP_NEG) { + ++digs; + t.sign = MP_ZPOS; + } + + /* fetch out all of the digits */ + while (mp_iszero (&t) == 0) { + if ((res = mp_div_d (&t, (mp_digit) radix, &t, &d)) != MP_OKAY) { + mp_clear (&t); + return res; + } + ++digs; + } + mp_clear (&t); + + /* return digs + 1, the 1 is for the NULL byte that would be required. */ + *size = digs + 1; + return MP_OKAY; +} + + +/* End: bn_mp_radix_size.c */ + +/* Start: bn_mp_radix_smap.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* chars used in radix conversions */ +const char *mp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/"; + +/* End: bn_mp_radix_smap.c */ + +/* Start: bn_mp_rand.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* makes a pseudo-random int of a given size */ +int +mp_rand (mp_int * a, int digits) +{ + int res; + mp_digit d; + + mp_zero (a); + if (digits <= 0) { + return MP_OKAY; + } + + /* first place a random non-zero digit */ + do { + d = ((mp_digit) abs (rand ())); + } while (d == 0); + + if ((res = mp_add_d (a, d, a)) != MP_OKAY) { + return res; + } + + while (digits-- > 0) { + if ((res = mp_lshd (a, 1)) != MP_OKAY) { + return res; + } + + if ((res = mp_add_d (a, ((mp_digit) abs (rand ())), a)) != MP_OKAY) { + return res; + } + } + + return MP_OKAY; +} + +/* End: bn_mp_rand.c */ + +/* Start: bn_mp_read_radix.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* read a string [ASCII] in a given radix */ +int mp_read_radix (mp_int * a, char *str, int radix) +{ + int y, res, neg; + char ch; + + /* make sure the radix is ok */ + if (radix < 2 || radix > 64) { + return MP_VAL; + } + + /* if the leading digit is a + * minus set the sign to negative. + */ + if (*str == '-') { + ++str; + neg = MP_NEG; + } else { + neg = MP_ZPOS; + } + + /* set the integer to the default of zero */ + mp_zero (a); + + /* process each digit of the string */ + while (*str) { + /* if the radix < 36 the conversion is case insensitive + * this allows numbers like 1AB and 1ab to represent the same value + * [e.g. in hex] + */ + ch = (char) ((radix < 36) ? toupper (*str) : *str); + for (y = 0; y < 64; y++) { + if (ch == mp_s_rmap[y]) { + break; + } + } + + /* if the char was found in the map + * and is less than the given radix add it + * to the number, otherwise exit the loop. + */ + if (y < radix) { + if ((res = mp_mul_d (a, (mp_digit) radix, a)) != MP_OKAY) { + return res; + } + if ((res = mp_add_d (a, (mp_digit) y, a)) != MP_OKAY) { + return res; + } + } else { + break; + } + ++str; + } + + /* set the sign only if a != 0 */ + if (mp_iszero(a) != 1) { + a->sign = neg; + } + return MP_OKAY; +} + +/* End: bn_mp_read_radix.c */ + +/* Start: bn_mp_read_signed_bin.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* read signed bin, big endian, first byte is 0==positive or 1==negative */ +int +mp_read_signed_bin (mp_int * a, unsigned char *b, int c) +{ + int res; + + /* read magnitude */ + if ((res = mp_read_unsigned_bin (a, b + 1, c - 1)) != MP_OKAY) { + return res; + } + + /* first byte is 0 for positive, non-zero for negative */ + if (b[0] == 0) { + a->sign = MP_ZPOS; + } else { + a->sign = MP_NEG; + } + + return MP_OKAY; +} + +/* End: bn_mp_read_signed_bin.c */ + +/* Start: bn_mp_read_unsigned_bin.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* reads a unsigned char array, assumes the msb is stored first [big endian] */ +int +mp_read_unsigned_bin (mp_int * a, unsigned char *b, int c) +{ + int res; + + /* make sure there are at least two digits */ + if (a->alloc < 2) { + if ((res = mp_grow(a, 2)) != MP_OKAY) { + return res; + } + } + + /* zero the int */ + mp_zero (a); + + /* read the bytes in */ + while (c-- > 0) { + if ((res = mp_mul_2d (a, 8, a)) != MP_OKAY) { + return res; + } + +#ifndef MP_8BIT + a->dp[0] |= *b++; + a->used += 1; +#else + a->dp[0] = (*b & MP_MASK); + a->dp[1] |= ((*b++ >> 7U) & 1); + a->used += 2; +#endif + } + mp_clamp (a); + return MP_OKAY; +} + +/* End: bn_mp_read_unsigned_bin.c */ + +/* Start: bn_mp_reduce.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* reduces x mod m, assumes 0 < x < m**2, mu is + * precomputed via mp_reduce_setup. + * From HAC pp.604 Algorithm 14.42 + */ +int +mp_reduce (mp_int * x, mp_int * m, mp_int * mu) +{ + mp_int q; + int res, um = m->used; + + /* q = x */ + if ((res = mp_init_copy (&q, x)) != MP_OKAY) { + return res; + } + + /* q1 = x / b**(k-1) */ + mp_rshd (&q, um - 1); + + /* according to HAC this optimization is ok */ + if (((unsigned long) um) > (((mp_digit)1) << (DIGIT_BIT - 1))) { + if ((res = mp_mul (&q, mu, &q)) != MP_OKAY) { + goto CLEANUP; + } + } else { + if ((res = s_mp_mul_high_digs (&q, mu, &q, um - 1)) != MP_OKAY) { + goto CLEANUP; + } + } + + /* q3 = q2 / b**(k+1) */ + mp_rshd (&q, um + 1); + + /* x = x mod b**(k+1), quick (no division) */ + if ((res = mp_mod_2d (x, DIGIT_BIT * (um + 1), x)) != MP_OKAY) { + goto CLEANUP; + } + + /* q = q * m mod b**(k+1), quick (no division) */ + if ((res = s_mp_mul_digs (&q, m, &q, um + 1)) != MP_OKAY) { + goto CLEANUP; + } + + /* x = x - q */ + if ((res = mp_sub (x, &q, x)) != MP_OKAY) { + goto CLEANUP; + } + + /* If x < 0, add b**(k+1) to it */ + if (mp_cmp_d (x, 0) == MP_LT) { + mp_set (&q, 1); + if ((res = mp_lshd (&q, um + 1)) != MP_OKAY) + goto CLEANUP; + if ((res = mp_add (x, &q, x)) != MP_OKAY) + goto CLEANUP; + } + + /* Back off if it's too big */ + while (mp_cmp (x, m) != MP_LT) { + if ((res = s_mp_sub (x, m, x)) != MP_OKAY) { + goto CLEANUP; + } + } + +CLEANUP: + mp_clear (&q); + + return res; +} + +/* End: bn_mp_reduce.c */ + +/* Start: bn_mp_reduce_2k.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* reduces a modulo n where n is of the form 2**p - d */ +int +mp_reduce_2k(mp_int *a, mp_int *n, mp_digit d) +{ + mp_int q; + int p, res; + + if ((res = mp_init(&q)) != MP_OKAY) { + return res; + } + + p = mp_count_bits(n); +top: + /* q = a/2**p, a = a mod 2**p */ + if ((res = mp_div_2d(a, p, &q, a)) != MP_OKAY) { + goto ERR; + } + + if (d != 1) { + /* q = q * d */ + if ((res = mp_mul_d(&q, d, &q)) != MP_OKAY) { + goto ERR; + } + } + + /* a = a + q */ + if ((res = s_mp_add(a, &q, a)) != MP_OKAY) { + goto ERR; + } + + if (mp_cmp_mag(a, n) != MP_LT) { + s_mp_sub(a, n, a); + goto top; + } + +ERR: + mp_clear(&q); + return res; +} + + +/* End: bn_mp_reduce_2k.c */ + +/* Start: bn_mp_reduce_2k_setup.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* determines the setup value */ +int +mp_reduce_2k_setup(mp_int *a, mp_digit *d) +{ + int res, p; + mp_int tmp; + + if ((res = mp_init(&tmp)) != MP_OKAY) { + return res; + } + + p = mp_count_bits(a); + if ((res = mp_2expt(&tmp, p)) != MP_OKAY) { + mp_clear(&tmp); + return res; + } + + if ((res = s_mp_sub(&tmp, a, &tmp)) != MP_OKAY) { + mp_clear(&tmp); + return res; + } + + *d = tmp.dp[0]; + mp_clear(&tmp); + return MP_OKAY; +} + +/* End: bn_mp_reduce_2k_setup.c */ + +/* Start: bn_mp_reduce_is_2k.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* determines if mp_reduce_2k can be used */ +int mp_reduce_is_2k(mp_int *a) +{ + int ix, iy, iz, iw; + + if (a->used == 0) { + return 0; + } else if (a->used == 1) { + return 1; + } else if (a->used > 1) { + iy = mp_count_bits(a); + iz = 1; + iw = 1; + + /* Test every bit from the second digit up, must be 1 */ + for (ix = DIGIT_BIT; ix < iy; ix++) { + if ((a->dp[iw] & iz) == 0) { + return 0; + } + iz <<= 1; + if (iz > (int)MP_MASK) { + ++iw; + iz = 1; + } + } + } + return 1; +} + + +/* End: bn_mp_reduce_is_2k.c */ + +/* Start: bn_mp_reduce_setup.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* pre-calculate the value required for Barrett reduction + * For a given modulus "b" it calulates the value required in "a" + */ +int +mp_reduce_setup (mp_int * a, mp_int * b) +{ + int res; + + if ((res = mp_2expt (a, b->used * 2 * DIGIT_BIT)) != MP_OKAY) { + return res; + } + return mp_div (a, b, a, NULL); +} + +/* End: bn_mp_reduce_setup.c */ + +/* Start: bn_mp_rshd.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* shift right a certain amount of digits */ +void mp_rshd (mp_int * a, int b) +{ + int x; + + /* if b <= 0 then ignore it */ + if (b <= 0) { + return; + } + + /* if b > used then simply zero it and return */ + if (a->used <= b) { + mp_zero (a); + return; + } + + { + register mp_digit *bottom, *top; + + /* shift the digits down */ + + /* bottom */ + bottom = a->dp; + + /* top [offset into digits] */ + top = a->dp + b; + + /* this is implemented as a sliding window where + * the window is b-digits long and digits from + * the top of the window are copied to the bottom + * + * e.g. + + b-2 | b-1 | b0 | b1 | b2 | ... | bb | ----> + /\ | ----> + \-------------------/ ----> + */ + for (x = 0; x < (a->used - b); x++) { + *bottom++ = *top++; + } + + /* zero the top digits */ + for (; x < a->used; x++) { + *bottom++ = 0; + } + } + + /* remove excess digits */ + a->used -= b; +} + +/* End: bn_mp_rshd.c */ + +/* Start: bn_mp_set.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* set to a digit */ +void mp_set (mp_int * a, mp_digit b) +{ + mp_zero (a); + a->dp[0] = b & MP_MASK; + a->used = (a->dp[0] != 0) ? 1 : 0; +} + +/* End: bn_mp_set.c */ + +/* Start: bn_mp_set_int.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* set a 32-bit const */ +int mp_set_int (mp_int * a, unsigned long b) +{ + int x, res; + + mp_zero (a); + + /* set four bits at a time */ + for (x = 0; x < 8; x++) { + /* shift the number up four bits */ + if ((res = mp_mul_2d (a, 4, a)) != MP_OKAY) { + return res; + } + + /* OR in the top four bits of the source */ + a->dp[0] |= (b >> 28) & 15; + + /* shift the source up to the next four bits */ + b <<= 4; + + /* ensure that digits are not clamped off */ + a->used += 1; + } + mp_clamp (a); + return MP_OKAY; +} + +/* End: bn_mp_set_int.c */ + +/* Start: bn_mp_shrink.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* shrink a bignum */ +int mp_shrink (mp_int * a) +{ + mp_digit *tmp; + if (a->alloc != a->used && a->used > 0) { + if ((tmp = OPT_CAST(mp_digit) XREALLOC (a->dp, sizeof (mp_digit) * a->used)) == NULL) { + return MP_MEM; + } + a->dp = tmp; + a->alloc = a->used; + } + return MP_OKAY; +} + +/* End: bn_mp_shrink.c */ + +/* Start: bn_mp_signed_bin_size.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* get the size for an signed equivalent */ +int mp_signed_bin_size (mp_int * a) +{ + return 1 + mp_unsigned_bin_size (a); +} + +/* End: bn_mp_signed_bin_size.c */ + +/* Start: bn_mp_sqr.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* computes b = a*a */ +int +mp_sqr (mp_int * a, mp_int * b) +{ + int res; + + /* use Toom-Cook? */ + if (a->used >= TOOM_SQR_CUTOFF) { + res = mp_toom_sqr(a, b); + /* Karatsuba? */ + } else if (a->used >= KARATSUBA_SQR_CUTOFF) { + res = mp_karatsuba_sqr (a, b); + } else { + /* can we use the fast comba multiplier? */ + if ((a->used * 2 + 1) < MP_WARRAY && + a->used < + (1 << (sizeof(mp_word) * CHAR_BIT - 2*DIGIT_BIT - 1))) { + res = fast_s_mp_sqr (a, b); + } else { + res = s_mp_sqr (a, b); + } + } + b->sign = MP_ZPOS; + return res; +} + +/* End: bn_mp_sqr.c */ + +/* Start: bn_mp_sqrmod.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* c = a * a (mod b) */ +int +mp_sqrmod (mp_int * a, mp_int * b, mp_int * c) +{ + int res; + mp_int t; + + if ((res = mp_init (&t)) != MP_OKAY) { + return res; + } + + if ((res = mp_sqr (a, &t)) != MP_OKAY) { + mp_clear (&t); + return res; + } + res = mp_mod (&t, b, c); + mp_clear (&t); + return res; +} + +/* End: bn_mp_sqrmod.c */ + +/* Start: bn_mp_sqrt.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* this function is less generic than mp_n_root, simpler and faster */ +int mp_sqrt(mp_int *arg, mp_int *ret) +{ + int res; + mp_int t1,t2; + + /* must be positive */ + if (arg->sign == MP_NEG) { + return MP_VAL; + } + + /* easy out */ + if (mp_iszero(arg) == MP_YES) { + mp_zero(ret); + return MP_OKAY; + } + + if ((res = mp_init_copy(&t1, arg)) != MP_OKAY) { + return res; + } + + if ((res = mp_init(&t2)) != MP_OKAY) { + goto E2; + } + + /* First approx. (not very bad for large arg) */ + mp_rshd (&t1,t1.used/2); + + /* t1 > 0 */ + if ((res = mp_div(arg,&t1,&t2,NULL)) != MP_OKAY) { + goto E1; + } + if ((res = mp_add(&t1,&t2,&t1)) != MP_OKAY) { + goto E1; + } + if ((res = mp_div_2(&t1,&t1)) != MP_OKAY) { + goto E1; + } + /* And now t1 > sqrt(arg) */ + do { + if ((res = mp_div(arg,&t1,&t2,NULL)) != MP_OKAY) { + goto E1; + } + if ((res = mp_add(&t1,&t2,&t1)) != MP_OKAY) { + goto E1; + } + if ((res = mp_div_2(&t1,&t1)) != MP_OKAY) { + goto E1; + } + /* t1 >= sqrt(arg) >= t2 at this point */ + } while (mp_cmp_mag(&t1,&t2) == MP_GT); + + mp_exch(&t1,ret); + +E1: mp_clear(&t2); +E2: mp_clear(&t1); + return res; +} + + +/* End: bn_mp_sqrt.c */ + +/* Start: bn_mp_sub.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* high level subtraction (handles signs) */ +int +mp_sub (mp_int * a, mp_int * b, mp_int * c) +{ + int sa, sb, res; + + sa = a->sign; + sb = b->sign; + + if (sa != sb) { + /* subtract a negative from a positive, OR */ + /* subtract a positive from a negative. */ + /* In either case, ADD their magnitudes, */ + /* and use the sign of the first number. */ + c->sign = sa; + res = s_mp_add (a, b, c); + } else { + /* subtract a positive from a positive, OR */ + /* subtract a negative from a negative. */ + /* First, take the difference between their */ + /* magnitudes, then... */ + if (mp_cmp_mag (a, b) != MP_LT) { + /* Copy the sign from the first */ + c->sign = sa; + /* The first has a larger or equal magnitude */ + res = s_mp_sub (a, b, c); + } else { + /* The result has the *opposite* sign from */ + /* the first number. */ + c->sign = (sa == MP_ZPOS) ? MP_NEG : MP_ZPOS; + /* The second has a larger magnitude */ + res = s_mp_sub (b, a, c); + } + } + return res; +} + + +/* End: bn_mp_sub.c */ + +/* Start: bn_mp_sub_d.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* single digit subtraction */ +int +mp_sub_d (mp_int * a, mp_digit b, mp_int * c) +{ + mp_digit *tmpa, *tmpc, mu; + int res, ix, oldused; + + /* grow c as required */ + if (c->alloc < a->used + 1) { + if ((res = mp_grow(c, a->used + 1)) != MP_OKAY) { + return res; + } + } + + /* if a is negative just do an unsigned + * addition [with fudged signs] + */ + if (a->sign == MP_NEG) { + a->sign = MP_ZPOS; + res = mp_add_d(a, b, c); + a->sign = c->sign = MP_NEG; + return res; + } + + /* setup regs */ + oldused = c->used; + tmpa = a->dp; + tmpc = c->dp; + + /* if a <= b simply fix the single digit */ + if ((a->used == 1 && a->dp[0] <= b) || a->used == 0) { + if (a->used == 1) { + *tmpc++ = b - *tmpa; + } else { + *tmpc++ = b; + } + ix = 1; + + /* negative/1digit */ + c->sign = MP_NEG; + c->used = 1; + } else { + /* positive/size */ + c->sign = MP_ZPOS; + c->used = a->used; + + /* subtract first digit */ + *tmpc = *tmpa++ - b; + mu = *tmpc >> (sizeof(mp_digit) * CHAR_BIT - 1); + *tmpc++ &= MP_MASK; + + /* handle rest of the digits */ + for (ix = 1; ix < a->used; ix++) { + *tmpc = *tmpa++ - mu; + mu = *tmpc >> (sizeof(mp_digit) * CHAR_BIT - 1); + *tmpc++ &= MP_MASK; + } + } + + /* zero excess digits */ + while (ix++ < oldused) { + *tmpc++ = 0; + } + mp_clamp(c); + return MP_OKAY; +} + + +/* End: bn_mp_sub_d.c */ + +/* Start: bn_mp_submod.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* d = a - b (mod c) */ +int +mp_submod (mp_int * a, mp_int * b, mp_int * c, mp_int * d) +{ + int res; + mp_int t; + + + if ((res = mp_init (&t)) != MP_OKAY) { + return res; + } + + if ((res = mp_sub (a, b, &t)) != MP_OKAY) { + mp_clear (&t); + return res; + } + res = mp_mod (&t, c, d); + mp_clear (&t); + return res; +} + +/* End: bn_mp_submod.c */ + +/* Start: bn_mp_to_signed_bin.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* store in signed [big endian] format */ +int +mp_to_signed_bin (mp_int * a, unsigned char *b) +{ + int res; + + if ((res = mp_to_unsigned_bin (a, b + 1)) != MP_OKAY) { + return res; + } + b[0] = (unsigned char) ((a->sign == MP_ZPOS) ? 0 : 1); + return MP_OKAY; +} + +/* End: bn_mp_to_signed_bin.c */ + +/* Start: bn_mp_to_unsigned_bin.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* store in unsigned [big endian] format */ +int +mp_to_unsigned_bin (mp_int * a, unsigned char *b) +{ + int x, res; + mp_int t; + + if ((res = mp_init_copy (&t, a)) != MP_OKAY) { + return res; + } + + x = 0; + while (mp_iszero (&t) == 0) { +#ifndef MP_8BIT + b[x++] = (unsigned char) (t.dp[0] & 255); +#else + b[x++] = (unsigned char) (t.dp[0] | ((t.dp[1] & 0x01) << 7)); +#endif + if ((res = mp_div_2d (&t, 8, &t, NULL)) != MP_OKAY) { + mp_clear (&t); + return res; + } + } + bn_reverse (b, x); + mp_clear (&t); + return MP_OKAY; +} + +/* End: bn_mp_to_unsigned_bin.c */ + +/* Start: bn_mp_toom_mul.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* multiplication using the Toom-Cook 3-way algorithm */ +int mp_toom_mul(mp_int *a, mp_int *b, mp_int *c) +{ + mp_int w0, w1, w2, w3, w4, tmp1, tmp2, a0, a1, a2, b0, b1, b2; + int res, B; + + /* init temps */ + if ((res = mp_init_multi(&w0, &w1, &w2, &w3, &w4, + &a0, &a1, &a2, &b0, &b1, + &b2, &tmp1, &tmp2, NULL)) != MP_OKAY) { + return res; + } + + /* B */ + B = MIN(a->used, b->used) / 3; + + /* a = a2 * B**2 + a1 * B + a0 */ + if ((res = mp_mod_2d(a, DIGIT_BIT * B, &a0)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_copy(a, &a1)) != MP_OKAY) { + goto ERR; + } + mp_rshd(&a1, B); + mp_mod_2d(&a1, DIGIT_BIT * B, &a1); + + if ((res = mp_copy(a, &a2)) != MP_OKAY) { + goto ERR; + } + mp_rshd(&a2, B*2); + + /* b = b2 * B**2 + b1 * B + b0 */ + if ((res = mp_mod_2d(b, DIGIT_BIT * B, &b0)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_copy(b, &b1)) != MP_OKAY) { + goto ERR; + } + mp_rshd(&b1, B); + mp_mod_2d(&b1, DIGIT_BIT * B, &b1); + + if ((res = mp_copy(b, &b2)) != MP_OKAY) { + goto ERR; + } + mp_rshd(&b2, B*2); + + /* w0 = a0*b0 */ + if ((res = mp_mul(&a0, &b0, &w0)) != MP_OKAY) { + goto ERR; + } + + /* w4 = a2 * b2 */ + if ((res = mp_mul(&a2, &b2, &w4)) != MP_OKAY) { + goto ERR; + } + + /* w1 = (a2 + 2(a1 + 2a0))(b2 + 2(b1 + 2b0)) */ + if ((res = mp_mul_2(&a0, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_mul_2(&tmp1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a2, &tmp1)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_mul_2(&b0, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp2, &b1, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_mul_2(&tmp2, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp2, &b2, &tmp2)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_mul(&tmp1, &tmp2, &w1)) != MP_OKAY) { + goto ERR; + } + + /* w3 = (a0 + 2(a1 + 2a2))(b0 + 2(b1 + 2b2)) */ + if ((res = mp_mul_2(&a2, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_mul_2(&tmp1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a0, &tmp1)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_mul_2(&b2, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp2, &b1, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_mul_2(&tmp2, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp2, &b0, &tmp2)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_mul(&tmp1, &tmp2, &w3)) != MP_OKAY) { + goto ERR; + } + + + /* w2 = (a2 + a1 + a0)(b2 + b1 + b0) */ + if ((res = mp_add(&a2, &a1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a0, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&b2, &b1, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp2, &b0, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_mul(&tmp1, &tmp2, &w2)) != MP_OKAY) { + goto ERR; + } + + /* now solve the matrix + + 0 0 0 0 1 + 1 2 4 8 16 + 1 1 1 1 1 + 16 8 4 2 1 + 1 0 0 0 0 + + using 12 subtractions, 4 shifts, + 2 small divisions and 1 small multiplication + */ + + /* r1 - r4 */ + if ((res = mp_sub(&w1, &w4, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - r0 */ + if ((res = mp_sub(&w3, &w0, &w3)) != MP_OKAY) { + goto ERR; + } + /* r1/2 */ + if ((res = mp_div_2(&w1, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3/2 */ + if ((res = mp_div_2(&w3, &w3)) != MP_OKAY) { + goto ERR; + } + /* r2 - r0 - r4 */ + if ((res = mp_sub(&w2, &w0, &w2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w2, &w4, &w2)) != MP_OKAY) { + goto ERR; + } + /* r1 - r2 */ + if ((res = mp_sub(&w1, &w2, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - r2 */ + if ((res = mp_sub(&w3, &w2, &w3)) != MP_OKAY) { + goto ERR; + } + /* r1 - 8r0 */ + if ((res = mp_mul_2d(&w0, 3, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w1, &tmp1, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - 8r4 */ + if ((res = mp_mul_2d(&w4, 3, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w3, &tmp1, &w3)) != MP_OKAY) { + goto ERR; + } + /* 3r2 - r1 - r3 */ + if ((res = mp_mul_d(&w2, 3, &w2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w2, &w1, &w2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w2, &w3, &w2)) != MP_OKAY) { + goto ERR; + } + /* r1 - r2 */ + if ((res = mp_sub(&w1, &w2, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - r2 */ + if ((res = mp_sub(&w3, &w2, &w3)) != MP_OKAY) { + goto ERR; + } + /* r1/3 */ + if ((res = mp_div_3(&w1, &w1, NULL)) != MP_OKAY) { + goto ERR; + } + /* r3/3 */ + if ((res = mp_div_3(&w3, &w3, NULL)) != MP_OKAY) { + goto ERR; + } + + /* at this point shift W[n] by B*n */ + if ((res = mp_lshd(&w1, 1*B)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_lshd(&w2, 2*B)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_lshd(&w3, 3*B)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_lshd(&w4, 4*B)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_add(&w0, &w1, c)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&w2, &w3, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&w4, &tmp1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, c, c)) != MP_OKAY) { + goto ERR; + } + +ERR: + mp_clear_multi(&w0, &w1, &w2, &w3, &w4, + &a0, &a1, &a2, &b0, &b1, + &b2, &tmp1, &tmp2, NULL); + return res; +} + + +/* End: bn_mp_toom_mul.c */ + +/* Start: bn_mp_toom_sqr.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* squaring using Toom-Cook 3-way algorithm */ +int +mp_toom_sqr(mp_int *a, mp_int *b) +{ + mp_int w0, w1, w2, w3, w4, tmp1, a0, a1, a2; + int res, B; + + /* init temps */ + if ((res = mp_init_multi(&w0, &w1, &w2, &w3, &w4, &a0, &a1, &a2, &tmp1, NULL)) != MP_OKAY) { + return res; + } + + /* B */ + B = a->used / 3; + + /* a = a2 * B**2 + a1 * B + a0 */ + if ((res = mp_mod_2d(a, DIGIT_BIT * B, &a0)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_copy(a, &a1)) != MP_OKAY) { + goto ERR; + } + mp_rshd(&a1, B); + mp_mod_2d(&a1, DIGIT_BIT * B, &a1); + + if ((res = mp_copy(a, &a2)) != MP_OKAY) { + goto ERR; + } + mp_rshd(&a2, B*2); + + /* w0 = a0*a0 */ + if ((res = mp_sqr(&a0, &w0)) != MP_OKAY) { + goto ERR; + } + + /* w4 = a2 * a2 */ + if ((res = mp_sqr(&a2, &w4)) != MP_OKAY) { + goto ERR; + } + + /* w1 = (a2 + 2(a1 + 2a0))**2 */ + if ((res = mp_mul_2(&a0, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_mul_2(&tmp1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a2, &tmp1)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_sqr(&tmp1, &w1)) != MP_OKAY) { + goto ERR; + } + + /* w3 = (a0 + 2(a1 + 2a2))**2 */ + if ((res = mp_mul_2(&a2, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_mul_2(&tmp1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a0, &tmp1)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_sqr(&tmp1, &w3)) != MP_OKAY) { + goto ERR; + } + + + /* w2 = (a2 + a1 + a0)**2 */ + if ((res = mp_add(&a2, &a1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a0, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sqr(&tmp1, &w2)) != MP_OKAY) { + goto ERR; + } + + /* now solve the matrix + + 0 0 0 0 1 + 1 2 4 8 16 + 1 1 1 1 1 + 16 8 4 2 1 + 1 0 0 0 0 + + using 12 subtractions, 4 shifts, 2 small divisions and 1 small multiplication. + */ + + /* r1 - r4 */ + if ((res = mp_sub(&w1, &w4, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - r0 */ + if ((res = mp_sub(&w3, &w0, &w3)) != MP_OKAY) { + goto ERR; + } + /* r1/2 */ + if ((res = mp_div_2(&w1, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3/2 */ + if ((res = mp_div_2(&w3, &w3)) != MP_OKAY) { + goto ERR; + } + /* r2 - r0 - r4 */ + if ((res = mp_sub(&w2, &w0, &w2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w2, &w4, &w2)) != MP_OKAY) { + goto ERR; + } + /* r1 - r2 */ + if ((res = mp_sub(&w1, &w2, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - r2 */ + if ((res = mp_sub(&w3, &w2, &w3)) != MP_OKAY) { + goto ERR; + } + /* r1 - 8r0 */ + if ((res = mp_mul_2d(&w0, 3, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w1, &tmp1, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - 8r4 */ + if ((res = mp_mul_2d(&w4, 3, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w3, &tmp1, &w3)) != MP_OKAY) { + goto ERR; + } + /* 3r2 - r1 - r3 */ + if ((res = mp_mul_d(&w2, 3, &w2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w2, &w1, &w2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w2, &w3, &w2)) != MP_OKAY) { + goto ERR; + } + /* r1 - r2 */ + if ((res = mp_sub(&w1, &w2, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - r2 */ + if ((res = mp_sub(&w3, &w2, &w3)) != MP_OKAY) { + goto ERR; + } + /* r1/3 */ + if ((res = mp_div_3(&w1, &w1, NULL)) != MP_OKAY) { + goto ERR; + } + /* r3/3 */ + if ((res = mp_div_3(&w3, &w3, NULL)) != MP_OKAY) { + goto ERR; + } + + /* at this point shift W[n] by B*n */ + if ((res = mp_lshd(&w1, 1*B)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_lshd(&w2, 2*B)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_lshd(&w3, 3*B)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_lshd(&w4, 4*B)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_add(&w0, &w1, b)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&w2, &w3, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&w4, &tmp1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, b, b)) != MP_OKAY) { + goto ERR; + } + +ERR: + mp_clear_multi(&w0, &w1, &w2, &w3, &w4, &a0, &a1, &a2, &tmp1, NULL); + return res; +} + + +/* End: bn_mp_toom_sqr.c */ + +/* Start: bn_mp_toradix.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* stores a bignum as a ASCII string in a given radix (2..64) */ +int mp_toradix (mp_int * a, char *str, int radix) +{ + int res, digs; + mp_int t; + mp_digit d; + char *_s = str; + + /* check range of the radix */ + if (radix < 2 || radix > 64) { + return MP_VAL; + } + + /* quick out if its zero */ + if (mp_iszero(a) == 1) { + *str++ = '0'; + *str = '\0'; + return MP_OKAY; + } + + if ((res = mp_init_copy (&t, a)) != MP_OKAY) { + return res; + } + + /* if it is negative output a - */ + if (t.sign == MP_NEG) { + ++_s; + *str++ = '-'; + t.sign = MP_ZPOS; + } + + digs = 0; + while (mp_iszero (&t) == 0) { + if ((res = mp_div_d (&t, (mp_digit) radix, &t, &d)) != MP_OKAY) { + mp_clear (&t); + return res; + } + *str++ = mp_s_rmap[d]; + ++digs; + } + + /* reverse the digits of the string. In this case _s points + * to the first digit [exluding the sign] of the number] + */ + bn_reverse ((unsigned char *)_s, digs); + + /* append a NULL so the string is properly terminated */ + *str = '\0'; + + mp_clear (&t); + return MP_OKAY; +} + + +/* End: bn_mp_toradix.c */ + +/* Start: bn_mp_toradix_n.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* stores a bignum as a ASCII string in a given radix (2..64) + * + * Stores upto maxlen-1 chars and always a NULL byte + */ +int mp_toradix_n(mp_int * a, char *str, int radix, int maxlen) +{ + int res, digs; + mp_int t; + mp_digit d; + char *_s = str; + + /* check range of the maxlen, radix */ + if (maxlen < 3 || radix < 2 || radix > 64) { + return MP_VAL; + } + + /* quick out if its zero */ + if (mp_iszero(a) == 1) { + *str++ = '0'; + *str = '\0'; + return MP_OKAY; + } + + if ((res = mp_init_copy (&t, a)) != MP_OKAY) { + return res; + } + + /* if it is negative output a - */ + if (t.sign == MP_NEG) { + /* we have to reverse our digits later... but not the - sign!! */ + ++_s; + + /* store the flag and mark the number as positive */ + *str++ = '-'; + t.sign = MP_ZPOS; + + /* subtract a char */ + --maxlen; + } + + digs = 0; + while (mp_iszero (&t) == 0) { + if ((res = mp_div_d (&t, (mp_digit) radix, &t, &d)) != MP_OKAY) { + mp_clear (&t); + return res; + } + *str++ = mp_s_rmap[d]; + ++digs; + + if (--maxlen == 1) { + /* no more room */ + break; + } + } + + /* reverse the digits of the string. In this case _s points + * to the first digit [exluding the sign] of the number] + */ + bn_reverse ((unsigned char *)_s, digs); + + /* append a NULL so the string is properly terminated */ + *str = '\0'; + + mp_clear (&t); + return MP_OKAY; +} + + +/* End: bn_mp_toradix_n.c */ + +/* Start: bn_mp_unsigned_bin_size.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* get the size for an unsigned equivalent */ +int +mp_unsigned_bin_size (mp_int * a) +{ + int size = mp_count_bits (a); + return (size / 8 + ((size & 7) != 0 ? 1 : 0)); +} + +/* End: bn_mp_unsigned_bin_size.c */ + +/* Start: bn_mp_xor.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* XOR two ints together */ +int +mp_xor (mp_int * a, mp_int * b, mp_int * c) +{ + int res, ix, px; + mp_int t, *x; + + if (a->used > b->used) { + if ((res = mp_init_copy (&t, a)) != MP_OKAY) { + return res; + } + px = b->used; + x = b; + } else { + if ((res = mp_init_copy (&t, b)) != MP_OKAY) { + return res; + } + px = a->used; + x = a; + } + + for (ix = 0; ix < px; ix++) { + t.dp[ix] ^= x->dp[ix]; + } + mp_clamp (&t); + mp_exch (c, &t); + mp_clear (&t); + return MP_OKAY; +} + +/* End: bn_mp_xor.c */ + +/* Start: bn_mp_zero.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* set to zero */ +void +mp_zero (mp_int * a) +{ + a->sign = MP_ZPOS; + a->used = 0; + memset (a->dp, 0, sizeof (mp_digit) * a->alloc); +} + +/* End: bn_mp_zero.c */ + +/* Start: bn_prime_sizes_tab.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* this table gives the # of rabin miller trials for a prob of failure lower than 2^-96 */ +static const struct { + int k, t; +} sizes[] = { +{ 128, 28 }, +{ 256, 16 }, +{ 384, 10 }, +{ 512, 7 }, +{ 640, 6 }, +{ 768, 5 }, +{ 896, 4 }, +{ 1024, 4 }, +{ 1152, 3 }, +{ 1280, 3 }, +{ 1408, 3 }, +{ 1536, 3 }, +{ 1664, 3 }, +{ 1792, 2 } }; + +/* returns # of RM trials required for a given bit size */ +int mp_prime_rabin_miller_trials(int size) +{ + int x; + + for (x = 0; x < (int)(sizeof(sizes)/(sizeof(sizes[0]))); x++) { + if (sizes[x].k == size) { + return sizes[x].t; + } else if (sizes[x].k > size) { + return (x == 0) ? sizes[0].t : sizes[x - 1].t; + } + } + return 1; +} + + + +/* End: bn_prime_sizes_tab.c */ + +/* Start: bn_prime_tab.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include +const mp_digit __prime_tab[] = { + 0x0002, 0x0003, 0x0005, 0x0007, 0x000B, 0x000D, 0x0011, 0x0013, + 0x0017, 0x001D, 0x001F, 0x0025, 0x0029, 0x002B, 0x002F, 0x0035, + 0x003B, 0x003D, 0x0043, 0x0047, 0x0049, 0x004F, 0x0053, 0x0059, + 0x0061, 0x0065, 0x0067, 0x006B, 0x006D, 0x0071, 0x007F, +#ifndef MP_8BIT + 0x0083, + 0x0089, 0x008B, 0x0095, 0x0097, 0x009D, 0x00A3, 0x00A7, 0x00AD, + 0x00B3, 0x00B5, 0x00BF, 0x00C1, 0x00C5, 0x00C7, 0x00D3, 0x00DF, + 0x00E3, 0x00E5, 0x00E9, 0x00EF, 0x00F1, 0x00FB, 0x0101, 0x0107, + 0x010D, 0x010F, 0x0115, 0x0119, 0x011B, 0x0125, 0x0133, 0x0137, + + 0x0139, 0x013D, 0x014B, 0x0151, 0x015B, 0x015D, 0x0161, 0x0167, + 0x016F, 0x0175, 0x017B, 0x017F, 0x0185, 0x018D, 0x0191, 0x0199, + 0x01A3, 0x01A5, 0x01AF, 0x01B1, 0x01B7, 0x01BB, 0x01C1, 0x01C9, + 0x01CD, 0x01CF, 0x01D3, 0x01DF, 0x01E7, 0x01EB, 0x01F3, 0x01F7, + 0x01FD, 0x0209, 0x020B, 0x021D, 0x0223, 0x022D, 0x0233, 0x0239, + 0x023B, 0x0241, 0x024B, 0x0251, 0x0257, 0x0259, 0x025F, 0x0265, + 0x0269, 0x026B, 0x0277, 0x0281, 0x0283, 0x0287, 0x028D, 0x0293, + 0x0295, 0x02A1, 0x02A5, 0x02AB, 0x02B3, 0x02BD, 0x02C5, 0x02CF, + + 0x02D7, 0x02DD, 0x02E3, 0x02E7, 0x02EF, 0x02F5, 0x02F9, 0x0301, + 0x0305, 0x0313, 0x031D, 0x0329, 0x032B, 0x0335, 0x0337, 0x033B, + 0x033D, 0x0347, 0x0355, 0x0359, 0x035B, 0x035F, 0x036D, 0x0371, + 0x0373, 0x0377, 0x038B, 0x038F, 0x0397, 0x03A1, 0x03A9, 0x03AD, + 0x03B3, 0x03B9, 0x03C7, 0x03CB, 0x03D1, 0x03D7, 0x03DF, 0x03E5, + 0x03F1, 0x03F5, 0x03FB, 0x03FD, 0x0407, 0x0409, 0x040F, 0x0419, + 0x041B, 0x0425, 0x0427, 0x042D, 0x043F, 0x0443, 0x0445, 0x0449, + 0x044F, 0x0455, 0x045D, 0x0463, 0x0469, 0x047F, 0x0481, 0x048B, + + 0x0493, 0x049D, 0x04A3, 0x04A9, 0x04B1, 0x04BD, 0x04C1, 0x04C7, + 0x04CD, 0x04CF, 0x04D5, 0x04E1, 0x04EB, 0x04FD, 0x04FF, 0x0503, + 0x0509, 0x050B, 0x0511, 0x0515, 0x0517, 0x051B, 0x0527, 0x0529, + 0x052F, 0x0551, 0x0557, 0x055D, 0x0565, 0x0577, 0x0581, 0x058F, + 0x0593, 0x0595, 0x0599, 0x059F, 0x05A7, 0x05AB, 0x05AD, 0x05B3, + 0x05BF, 0x05C9, 0x05CB, 0x05CF, 0x05D1, 0x05D5, 0x05DB, 0x05E7, + 0x05F3, 0x05FB, 0x0607, 0x060D, 0x0611, 0x0617, 0x061F, 0x0623, + 0x062B, 0x062F, 0x063D, 0x0641, 0x0647, 0x0649, 0x064D, 0x0653 +#endif +}; + +/* End: bn_prime_tab.c */ + +/* Start: bn_reverse.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* reverse an array, used for radix code */ +void +bn_reverse (unsigned char *s, int len) +{ + int ix, iy; + unsigned char t; + + ix = 0; + iy = len - 1; + while (ix < iy) { + t = s[ix]; + s[ix] = s[iy]; + s[iy] = t; + ++ix; + --iy; + } +} + +/* End: bn_reverse.c */ + +/* Start: bn_s_mp_add.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* low level addition, based on HAC pp.594, Algorithm 14.7 */ +int +s_mp_add (mp_int * a, mp_int * b, mp_int * c) +{ + mp_int *x; + int olduse, res, min, max; + + /* find sizes, we let |a| <= |b| which means we have to sort + * them. "x" will point to the input with the most digits + */ + if (a->used > b->used) { + min = b->used; + max = a->used; + x = a; + } else { + min = a->used; + max = b->used; + x = b; + } + + /* init result */ + if (c->alloc < max + 1) { + if ((res = mp_grow (c, max + 1)) != MP_OKAY) { + return res; + } + } + + /* get old used digit count and set new one */ + olduse = c->used; + c->used = max + 1; + + { + register mp_digit u, *tmpa, *tmpb, *tmpc; + register int i; + + /* alias for digit pointers */ + + /* first input */ + tmpa = a->dp; + + /* second input */ + tmpb = b->dp; + + /* destination */ + tmpc = c->dp; + + /* zero the carry */ + u = 0; + for (i = 0; i < min; i++) { + /* Compute the sum at one digit, T[i] = A[i] + B[i] + U */ + *tmpc = *tmpa++ + *tmpb++ + u; + + /* U = carry bit of T[i] */ + u = *tmpc >> ((mp_digit)DIGIT_BIT); + + /* take away carry bit from T[i] */ + *tmpc++ &= MP_MASK; + } + + /* now copy higher words if any, that is in A+B + * if A or B has more digits add those in + */ + if (min != max) { + for (; i < max; i++) { + /* T[i] = X[i] + U */ + *tmpc = x->dp[i] + u; + + /* U = carry bit of T[i] */ + u = *tmpc >> ((mp_digit)DIGIT_BIT); + + /* take away carry bit from T[i] */ + *tmpc++ &= MP_MASK; + } + } + + /* add carry */ + *tmpc++ = u; + + /* clear digits above oldused */ + for (i = c->used; i < olduse; i++) { + *tmpc++ = 0; + } + } + + mp_clamp (c); + return MP_OKAY; +} + +/* End: bn_s_mp_add.c */ + +/* Start: bn_s_mp_exptmod.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +#ifdef MP_LOW_MEM + #define TAB_SIZE 32 +#else + #define TAB_SIZE 256 +#endif + +int s_mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) +{ + mp_int M[TAB_SIZE], res, mu; + mp_digit buf; + int err, bitbuf, bitcpy, bitcnt, mode, digidx, x, y, winsize; + + /* find window size */ + x = mp_count_bits (X); + if (x <= 7) { + winsize = 2; + } else if (x <= 36) { + winsize = 3; + } else if (x <= 140) { + winsize = 4; + } else if (x <= 450) { + winsize = 5; + } else if (x <= 1303) { + winsize = 6; + } else if (x <= 3529) { + winsize = 7; + } else { + winsize = 8; + } + +#ifdef MP_LOW_MEM + if (winsize > 5) { + winsize = 5; + } +#endif + + /* init M array */ + /* init first cell */ + if ((err = mp_init(&M[1])) != MP_OKAY) { + return err; + } + + /* now init the second half of the array */ + for (x = 1<<(winsize-1); x < (1 << winsize); x++) { + if ((err = mp_init(&M[x])) != MP_OKAY) { + for (y = 1<<(winsize-1); y < x; y++) { + mp_clear (&M[y]); + } + mp_clear(&M[1]); + return err; + } + } + + /* create mu, used for Barrett reduction */ + if ((err = mp_init (&mu)) != MP_OKAY) { + goto __M; + } + if ((err = mp_reduce_setup (&mu, P)) != MP_OKAY) { + goto __MU; + } + + /* create M table + * + * The M table contains powers of the base, + * e.g. M[x] = G**x mod P + * + * The first half of the table is not + * computed though accept for M[0] and M[1] + */ + if ((err = mp_mod (G, P, &M[1])) != MP_OKAY) { + goto __MU; + } + + /* compute the value at M[1<<(winsize-1)] by squaring + * M[1] (winsize-1) times + */ + if ((err = mp_copy (&M[1], &M[1 << (winsize - 1)])) != MP_OKAY) { + goto __MU; + } + + for (x = 0; x < (winsize - 1); x++) { + if ((err = mp_sqr (&M[1 << (winsize - 1)], + &M[1 << (winsize - 1)])) != MP_OKAY) { + goto __MU; + } + if ((err = mp_reduce (&M[1 << (winsize - 1)], P, &mu)) != MP_OKAY) { + goto __MU; + } + } + + /* create upper table, that is M[x] = M[x-1] * M[1] (mod P) + * for x = (2**(winsize - 1) + 1) to (2**winsize - 1) + */ + for (x = (1 << (winsize - 1)) + 1; x < (1 << winsize); x++) { + if ((err = mp_mul (&M[x - 1], &M[1], &M[x])) != MP_OKAY) { + goto __MU; + } + if ((err = mp_reduce (&M[x], P, &mu)) != MP_OKAY) { + goto __MU; + } + } + + /* setup result */ + if ((err = mp_init (&res)) != MP_OKAY) { + goto __MU; + } + mp_set (&res, 1); + + /* set initial mode and bit cnt */ + mode = 0; + bitcnt = 1; + buf = 0; + digidx = X->used - 1; + bitcpy = 0; + bitbuf = 0; + + for (;;) { + /* grab next digit as required */ + if (--bitcnt == 0) { + /* if digidx == -1 we are out of digits */ + if (digidx == -1) { + break; + } + /* read next digit and reset the bitcnt */ + buf = X->dp[digidx--]; + bitcnt = (int) DIGIT_BIT; + } + + /* grab the next msb from the exponent */ + y = (buf >> (mp_digit)(DIGIT_BIT - 1)) & 1; + buf <<= (mp_digit)1; + + /* if the bit is zero and mode == 0 then we ignore it + * These represent the leading zero bits before the first 1 bit + * in the exponent. Technically this opt is not required but it + * does lower the # of trivial squaring/reductions used + */ + if (mode == 0 && y == 0) { + continue; + } + + /* if the bit is zero and mode == 1 then we square */ + if (mode == 1 && y == 0) { + if ((err = mp_sqr (&res, &res)) != MP_OKAY) { + goto __RES; + } + if ((err = mp_reduce (&res, P, &mu)) != MP_OKAY) { + goto __RES; + } + continue; + } + + /* else we add it to the window */ + bitbuf |= (y << (winsize - ++bitcpy)); + mode = 2; + + if (bitcpy == winsize) { + /* ok window is filled so square as required and multiply */ + /* square first */ + for (x = 0; x < winsize; x++) { + if ((err = mp_sqr (&res, &res)) != MP_OKAY) { + goto __RES; + } + if ((err = mp_reduce (&res, P, &mu)) != MP_OKAY) { + goto __RES; + } + } + + /* then multiply */ + if ((err = mp_mul (&res, &M[bitbuf], &res)) != MP_OKAY) { + goto __RES; + } + if ((err = mp_reduce (&res, P, &mu)) != MP_OKAY) { + goto __RES; + } + + /* empty window and reset */ + bitcpy = 0; + bitbuf = 0; + mode = 1; + } + } + + /* if bits remain then square/multiply */ + if (mode == 2 && bitcpy > 0) { + /* square then multiply if the bit is set */ + for (x = 0; x < bitcpy; x++) { + if ((err = mp_sqr (&res, &res)) != MP_OKAY) { + goto __RES; + } + if ((err = mp_reduce (&res, P, &mu)) != MP_OKAY) { + goto __RES; + } + + bitbuf <<= 1; + if ((bitbuf & (1 << winsize)) != 0) { + /* then multiply */ + if ((err = mp_mul (&res, &M[1], &res)) != MP_OKAY) { + goto __RES; + } + if ((err = mp_reduce (&res, P, &mu)) != MP_OKAY) { + goto __RES; + } + } + } + } + + mp_exch (&res, Y); + err = MP_OKAY; +__RES:mp_clear (&res); +__MU:mp_clear (&mu); +__M: + mp_clear(&M[1]); + for (x = 1<<(winsize-1); x < (1 << winsize); x++) { + mp_clear (&M[x]); + } + return err; +} + +/* End: bn_s_mp_exptmod.c */ + +/* Start: bn_s_mp_mul_digs.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* multiplies |a| * |b| and only computes upto digs digits of result + * HAC pp. 595, Algorithm 14.12 Modified so you can control how + * many digits of output are created. + */ +int +s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) +{ + mp_int t; + int res, pa, pb, ix, iy; + mp_digit u; + mp_word r; + mp_digit tmpx, *tmpt, *tmpy; + + /* can we use the fast multiplier? */ + if (((digs) < MP_WARRAY) && + MIN (a->used, b->used) < + (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { + return fast_s_mp_mul_digs (a, b, c, digs); + } + + if ((res = mp_init_size (&t, digs)) != MP_OKAY) { + return res; + } + t.used = digs; + + /* compute the digits of the product directly */ + pa = a->used; + for (ix = 0; ix < pa; ix++) { + /* set the carry to zero */ + u = 0; + + /* limit ourselves to making digs digits of output */ + pb = MIN (b->used, digs - ix); + + /* setup some aliases */ + /* copy of the digit from a used within the nested loop */ + tmpx = a->dp[ix]; + + /* an alias for the destination shifted ix places */ + tmpt = t.dp + ix; + + /* an alias for the digits of b */ + tmpy = b->dp; + + /* compute the columns of the output and propagate the carry */ + for (iy = 0; iy < pb; iy++) { + /* compute the column as a mp_word */ + r = ((mp_word)*tmpt) + + ((mp_word)tmpx) * ((mp_word)*tmpy++) + + ((mp_word) u); + + /* the new column is the lower part of the result */ + *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); + + /* get the carry word from the result */ + u = (mp_digit) (r >> ((mp_word) DIGIT_BIT)); + } + /* set carry if it is placed below digs */ + if (ix + iy < digs) { + *tmpt = u; + } + } + + mp_clamp (&t); + mp_exch (&t, c); + + mp_clear (&t); + return MP_OKAY; +} + +/* End: bn_s_mp_mul_digs.c */ + +/* Start: bn_s_mp_mul_high_digs.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* multiplies |a| * |b| and does not compute the lower digs digits + * [meant to get the higher part of the product] + */ +int +s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) +{ + mp_int t; + int res, pa, pb, ix, iy; + mp_digit u; + mp_word r; + mp_digit tmpx, *tmpt, *tmpy; + + /* can we use the fast multiplier? */ + if (((a->used + b->used + 1) < MP_WARRAY) + && MIN (a->used, b->used) < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { + return fast_s_mp_mul_high_digs (a, b, c, digs); + } + + if ((res = mp_init_size (&t, a->used + b->used + 1)) != MP_OKAY) { + return res; + } + t.used = a->used + b->used + 1; + + pa = a->used; + pb = b->used; + for (ix = 0; ix < pa; ix++) { + /* clear the carry */ + u = 0; + + /* left hand side of A[ix] * B[iy] */ + tmpx = a->dp[ix]; + + /* alias to the address of where the digits will be stored */ + tmpt = &(t.dp[digs]); + + /* alias for where to read the right hand side from */ + tmpy = b->dp + (digs - ix); + + for (iy = digs - ix; iy < pb; iy++) { + /* calculate the double precision result */ + r = ((mp_word)*tmpt) + + ((mp_word)tmpx) * ((mp_word)*tmpy++) + + ((mp_word) u); + + /* get the lower part */ + *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); + + /* carry the carry */ + u = (mp_digit) (r >> ((mp_word) DIGIT_BIT)); + } + *tmpt = u; + } + mp_clamp (&t); + mp_exch (&t, c); + mp_clear (&t); + return MP_OKAY; +} + +/* End: bn_s_mp_mul_high_digs.c */ + +/* Start: bn_s_mp_sqr.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* low level squaring, b = a*a, HAC pp.596-597, Algorithm 14.16 */ +int +s_mp_sqr (mp_int * a, mp_int * b) +{ + mp_int t; + int res, ix, iy, pa; + mp_word r; + mp_digit u, tmpx, *tmpt; + + pa = a->used; + if ((res = mp_init_size (&t, 2*pa + 1)) != MP_OKAY) { + return res; + } + + /* default used is maximum possible size */ + t.used = 2*pa + 1; + + for (ix = 0; ix < pa; ix++) { + /* first calculate the digit at 2*ix */ + /* calculate double precision result */ + r = ((mp_word) t.dp[2*ix]) + + ((mp_word)a->dp[ix])*((mp_word)a->dp[ix]); + + /* store lower part in result */ + t.dp[ix+ix] = (mp_digit) (r & ((mp_word) MP_MASK)); + + /* get the carry */ + u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); + + /* left hand side of A[ix] * A[iy] */ + tmpx = a->dp[ix]; + + /* alias for where to store the results */ + tmpt = t.dp + (2*ix + 1); + + for (iy = ix + 1; iy < pa; iy++) { + /* first calculate the product */ + r = ((mp_word)tmpx) * ((mp_word)a->dp[iy]); + + /* now calculate the double precision result, note we use + * addition instead of *2 since it's easier to optimize + */ + r = ((mp_word) *tmpt) + r + r + ((mp_word) u); + + /* store lower part */ + *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); + + /* get carry */ + u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); + } + /* propagate upwards */ + while (u != ((mp_digit) 0)) { + r = ((mp_word) *tmpt) + ((mp_word) u); + *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); + u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); + } + } + + mp_clamp (&t); + mp_exch (&t, b); + mp_clear (&t); + return MP_OKAY; +} + +/* End: bn_s_mp_sqr.c */ + +/* Start: bn_s_mp_sub.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* low level subtraction (assumes |a| > |b|), HAC pp.595 Algorithm 14.9 */ +int +s_mp_sub (mp_int * a, mp_int * b, mp_int * c) +{ + int olduse, res, min, max; + + /* find sizes */ + min = b->used; + max = a->used; + + /* init result */ + if (c->alloc < max) { + if ((res = mp_grow (c, max)) != MP_OKAY) { + return res; + } + } + olduse = c->used; + c->used = max; + + { + register mp_digit u, *tmpa, *tmpb, *tmpc; + register int i; + + /* alias for digit pointers */ + tmpa = a->dp; + tmpb = b->dp; + tmpc = c->dp; + + /* set carry to zero */ + u = 0; + for (i = 0; i < min; i++) { + /* T[i] = A[i] - B[i] - U */ + *tmpc = *tmpa++ - *tmpb++ - u; + + /* U = carry bit of T[i] + * Note this saves performing an AND operation since + * if a carry does occur it will propagate all the way to the + * MSB. As a result a single shift is enough to get the carry + */ + u = *tmpc >> ((mp_digit)(CHAR_BIT * sizeof (mp_digit) - 1)); + + /* Clear carry from T[i] */ + *tmpc++ &= MP_MASK; + } + + /* now copy higher words if any, e.g. if A has more digits than B */ + for (; i < max; i++) { + /* T[i] = A[i] - U */ + *tmpc = *tmpa++ - u; + + /* U = carry bit of T[i] */ + u = *tmpc >> ((mp_digit)(CHAR_BIT * sizeof (mp_digit) - 1)); + + /* Clear carry from T[i] */ + *tmpc++ &= MP_MASK; + } + + /* clear digits above used (since we may not have grown result above) */ + for (i = c->used; i < olduse; i++) { + *tmpc++ = 0; + } + } + + mp_clamp (c); + return MP_OKAY; +} + + +/* End: bn_s_mp_sub.c */ + +/* Start: bncore.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* Known optimal configurations + + CPU /Compiler /MUL CUTOFF/SQR CUTOFF +------------------------------------------------------------- + Intel P4 Northwood /GCC v3.3.3 / 121/ 128/SSE patches ;-) + Intel P4 Northwood /GCC v3.3.3 / 59/ 81/profiled build + Intel P4 Northwood /GCC v3.3.3 / 59/ 80/profiled_single build + Intel P4 Northwood /ICC v8.0 / 57/ 70/profiled build + Intel P4 Northwood /ICC v8.0 / 54/ 76/profiled_single build + AMD Athlon XP /GCC v3.2 / 109/ 127/ + +*/ + +int KARATSUBA_MUL_CUTOFF = 121, /* Min. number of digits before Karatsuba multiplication is used. */ + KARATSUBA_SQR_CUTOFF = 128, /* Min. number of digits before Karatsuba squaring is used. */ + + TOOM_MUL_CUTOFF = 350, /* no optimal values of these are known yet so set em high */ + TOOM_SQR_CUTOFF = 400; + +/* End: bncore.c */ + + +/* EOF */ diff --git a/mpi_to_ltc_error.c b/mpi_to_ltc_error.c new file mode 100644 index 00000000..015b1b20 --- /dev/null +++ b/mpi_to_ltc_error.c @@ -0,0 +1,36 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef MPI +static const struct { + int mpi_code, ltc_code; +} mpi_to_ltc_codes[] = { + { MP_OKAY , CRYPT_OK}, + { MP_MEM , CRYPT_MEM}, + { MP_VAL , CRYPT_INVALID_ARG}, +}; + +/* convert a MPI error to a LTC error (Possibly the most powerful function ever! Oh wait... no) */ +int mpi_to_ltc_error(int err) +{ + int x; + + for (x = 0; x < (int)(sizeof(mpi_to_ltc_codes)/sizeof(mpi_to_ltc_codes[0])); x++) { + if (err == mpi_to_ltc_codes[x].mpi_code) { + return mpi_to_ltc_codes[x].ltc_code; + } + } + return CRYPT_ERROR; +} +#endif + diff --git a/src/headers/tomcrypt.h b/mycrypt.h similarity index 53% rename from src/headers/tomcrypt.h rename to mycrypt.h index 35d08d48..43a93e96 100644 --- a/src/headers/tomcrypt.h +++ b/mycrypt.h @@ -1,35 +1,29 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#ifndef TOMCRYPT_H_ -#define TOMCRYPT_H_ +#ifndef CRYPT_H_ +#define CRYPT_H_ #include #include #include #include -#include #include #include #include -/* use configuration data */ -#include "tomcrypt_custom.h" +/* if there is a custom definition header file use it */ +#include #ifdef __cplusplus extern "C" { #endif /* version */ -#define CRYPT 0x0118 -#define SCRYPT "1.18.2-develop" +#define CRYPT 0x0098 +#define SCRYPT "0.98" /* max size of either a cipher/hash block or symmetric key [largest of the two] */ -#define MAXBLOCKSIZE 168 +#define MAXBLOCKSIZE 64 -#ifndef TAB_SIZE /* descriptor table size */ -#define TAB_SIZE 48 -#endif +#define TAB_SIZE 32 /* error codes [will be expanded in future releases] */ enum { @@ -60,42 +54,27 @@ enum { CRYPT_FILE_NOTFOUND, /* File Not Found */ CRYPT_PK_INVALID_TYPE, /* Invalid type of PK key */ - - CRYPT_OVERFLOW, /* An overflow of a value was detected/prevented */ - - CRYPT_PK_ASN1_ERROR, /* An error occurred while en- or decoding ASN.1 data */ - - CRYPT_INPUT_TOO_LONG, /* The input was longer than expected. */ - + CRYPT_PK_INVALID_SYSTEM,/* Invalid PK system specified */ + CRYPT_PK_DUP, /* Duplicate key already in key ring */ + CRYPT_PK_NOT_FOUND, /* Key not found in keyring */ CRYPT_PK_INVALID_SIZE, /* Invalid size input for PK parameters */ - CRYPT_INVALID_PRIME_SIZE, /* Invalid size of prime requested */ - CRYPT_PK_INVALID_PADDING, /* Invalid padding on input */ - - CRYPT_HASH_OVERFLOW, /* Hash applied to too many bits */ - CRYPT_PW_CTX_MISSING, /* Password context to decrypt key file is missing */ - CRYPT_UNKNOWN_PEM, /* The PEM header was not recognized */ - - /* Here only follows the number of error codes. - * This will never be returned and shall always be at the end of the enum. */ - CRYPT_ERR_NUM + CRYPT_INVALID_PRIME_SIZE/* Invalid size of prime requested */ }; -#include "tomcrypt_cfg.h" -#include "tomcrypt_macros.h" -#include "tomcrypt_cipher.h" -#include "tomcrypt_hash.h" -#include "tomcrypt_mac.h" -#include "tomcrypt_prng.h" -#include "tomcrypt_pk.h" -#include "tomcrypt_math.h" -#include "tomcrypt_misc.h" -#include "tomcrypt_argchk.h" -#include "tomcrypt_pkcs.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include #ifdef __cplusplus } #endif -#endif /* TOMCRYPT_H_ */ +#endif /* CRYPT_H_ */ diff --git a/mycrypt_argchk.h b/mycrypt_argchk.h new file mode 100644 index 00000000..46b0e30f --- /dev/null +++ b/mycrypt_argchk.h @@ -0,0 +1,24 @@ +/* Defines the _ARGCHK macro used within the library */ + +/* ch1-01-1 */ +/* ARGTYPE is defined in mycrypt_cfg.h */ +#if ARGTYPE == 0 + +#include + +/* this is the default LibTomCrypt macro */ + void crypt_argchk(char *v, char *s, int d); +#define _ARGCHK(x) if (!(x)) { crypt_argchk(#x, __FILE__, __LINE__); } + +#elif ARGTYPE == 1 + +/* fatal type of error */ +#define _ARGCHK(x) assert((x)) + +#elif ARGTYPE == 2 + +#define _ARGCHK(x) + +#endif +/* ch1-01-1 */ + diff --git a/mycrypt_cfg.h b/mycrypt_cfg.h new file mode 100644 index 00000000..d24824e9 --- /dev/null +++ b/mycrypt_cfg.h @@ -0,0 +1,82 @@ +/* This is the build config file. + * + * With this you can setup what to inlcude/exclude automatically during any build. Just comment + * out the line that #define's the word for the thing you want to remove. phew! + */ + +#ifndef MYCRYPT_CFG_H +#define MYCRYPT_CFG_H + +/* you can change how memory allocation works ... */ +void *XMALLOC(size_t n); +void *REALLOC(void *p, size_t n); +void *XCALLOC(size_t n, size_t s); +void XFREE(void *p); + +/* change the clock function too */ + clock_t XCLOCK(void); + +/* various other functions */ +void *XMEMCPY(void *dest, const void *src, size_t n); +int XMEMCMP(const void *s1, const void *s2, size_t n); + +/* ch1-01-1 */ +/* type of argument checking, 0=default, 1=fatal and 2=none */ +#define ARGTYPE 0 +/* ch1-01-1 */ + +/* Controls endianess and size of registers. Leave uncommented to get platform neutral [slower] code */ +/* detect x86-32 machines somewhat */ +#if defined(INTEL_CC) || (defined(_MSC_VER) && defined(WIN32)) || (defined(__GNUC__) && (defined(__DJGPP__) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__i386__))) + #define ENDIAN_LITTLE + #define ENDIAN_32BITWORD +#endif + +/* detects MIPS R5900 processors (PS2) */ +#if (defined(__R5900) || defined(R5900) || defined(__R5900__)) && (defined(_mips) || defined(__mips__) || defined(mips)) + #define ENDIAN_LITTLE + #define ENDIAN_64BITWORD +#endif + +/* #define ENDIAN_LITTLE */ +/* #define ENDIAN_BIG */ + +/* #define ENDIAN_32BITWORD */ +/* #define ENDIAN_64BITWORD */ + +#if (defined(ENDIAN_BIG) || defined(ENDIAN_LITTLE)) && !(defined(ENDIAN_32BITWORD) || defined(ENDIAN_64BITWORD)) + #error You must specify a word size as well as endianess in mycrypt_cfg.h +#endif + +#if !(defined(ENDIAN_BIG) || defined(ENDIAN_LITTLE)) + #define ENDIAN_NEUTRAL +#endif + +#ifdef YARROW + #ifndef CTR + #error YARROW requires CTR chaining mode to be defined! + #endif +#endif + +/* packet code */ +#if defined(MRSA) || defined(MDH) || defined(MECC) + #define PACKET + + /* size of a packet header in bytes */ + #define PACKET_SIZE 4 + + /* Section tags */ + #define PACKET_SECT_RSA 0 + #define PACKET_SECT_DH 1 + #define PACKET_SECT_ECC 2 + #define PACKET_SECT_DSA 3 + + /* Subsection Tags for the first three sections */ + #define PACKET_SUB_KEY 0 + #define PACKET_SUB_ENCRYPTED 1 + #define PACKET_SUB_SIGNED 2 + #define PACKET_SUB_ENC_KEY 3 +#endif + +#endif /* MYCRYPT_CFG_H */ + diff --git a/mycrypt_cipher.h b/mycrypt_cipher.h new file mode 100644 index 00000000..65749db3 --- /dev/null +++ b/mycrypt_cipher.h @@ -0,0 +1,396 @@ +/* ---- SYMMETRIC KEY STUFF ----- + * + * We put each of the ciphers scheduled keys in their own structs then we put all of + * the key formats in one union. This makes the function prototypes easier to use. + */ +#ifdef BLOWFISH +struct blowfish_key { + ulong32 S[4][256]; + ulong32 K[18]; +}; +#endif + +#ifdef RC5 +struct rc5_key { + int rounds; + ulong32 K[50]; +}; +#endif + +#ifdef RC6 +struct rc6_key { + ulong32 K[44]; +}; +#endif + +#ifdef SAFERP +struct saferp_key { + unsigned char K[33][16]; + long rounds; +}; +#endif + +#ifdef RIJNDAEL +struct rijndael_key { + ulong32 eK[64], dK[64]; + int Nr; +}; +#endif + +#ifdef XTEA +struct xtea_key { + unsigned long A[32], B[32]; +}; +#endif + +#ifdef TWOFISH +#ifndef TWOFISH_SMALL + struct twofish_key { + ulong32 S[4][256], K[40]; + }; +#else + struct twofish_key { + ulong32 K[40]; + unsigned char S[32], start; + }; +#endif +#endif + +#ifdef SAFER +#define SAFER_K64_DEFAULT_NOF_ROUNDS 6 +#define SAFER_K128_DEFAULT_NOF_ROUNDS 10 +#define SAFER_SK64_DEFAULT_NOF_ROUNDS 8 +#define SAFER_SK128_DEFAULT_NOF_ROUNDS 10 +#define SAFER_MAX_NOF_ROUNDS 13 +#define SAFER_BLOCK_LEN 8 +#define SAFER_KEY_LEN (1 + SAFER_BLOCK_LEN * (1 + 2 * SAFER_MAX_NOF_ROUNDS)) +typedef unsigned char safer_block_t[SAFER_BLOCK_LEN]; +typedef unsigned char safer_key_t[SAFER_KEY_LEN]; +struct safer_key { safer_key_t key; }; +#endif + +#ifdef RC2 +struct rc2_key { unsigned xkey[64]; }; +#endif + +#ifdef DES +struct des_key { + ulong32 ek[32], dk[32]; +}; + +struct des3_key { + ulong32 ek[3][32], dk[3][32]; +}; +#endif + +#ifdef CAST5 +struct cast5_key { + ulong32 K[32], keylen; +}; +#endif + +#ifdef NOEKEON +struct noekeon_key { + ulong32 K[4], dK[4]; +}; +#endif + +#ifdef SKIPJACK +struct skipjack_key { + unsigned char key[10]; +}; +#endif + +typedef union Symmetric_key { +#ifdef DES + struct des_key des; + struct des3_key des3; +#endif +#ifdef RC2 + struct rc2_key rc2; +#endif +#ifdef SAFER + struct safer_key safer; +#endif +#ifdef TWOFISH + struct twofish_key twofish; +#endif +#ifdef BLOWFISH + struct blowfish_key blowfish; +#endif +#ifdef RC5 + struct rc5_key rc5; +#endif +#ifdef RC6 + struct rc6_key rc6; +#endif +#ifdef SAFERP + struct saferp_key saferp; +#endif +#ifdef RIJNDAEL + struct rijndael_key rijndael; +#endif +#ifdef XTEA + struct xtea_key xtea; +#endif +#ifdef CAST5 + struct cast5_key cast5; +#endif +#ifdef NOEKEON + struct noekeon_key noekeon; +#endif +#ifdef SKIPJACK + struct skipjack_key skipjack; +#endif +} symmetric_key; + +/* A block cipher ECB structure */ +typedef struct { + int cipher, blocklen; + symmetric_key key; +} symmetric_ECB; + +/* A block cipher CFB structure */ +typedef struct { + int cipher, blocklen, padlen; + unsigned char IV[MAXBLOCKSIZE], pad[MAXBLOCKSIZE]; + symmetric_key key; +} symmetric_CFB; + +/* A block cipher OFB structure */ +typedef struct { + int cipher, blocklen, padlen; + unsigned char IV[MAXBLOCKSIZE]; + symmetric_key key; +} symmetric_OFB; + +/* A block cipher CBC structure */ +typedef struct Symmetric_CBC { + int cipher, blocklen; + unsigned char IV[MAXBLOCKSIZE]; + symmetric_key key; +} symmetric_CBC; + +/* A block cipher CTR structure */ +typedef struct Symmetric_CTR { + int cipher, blocklen, padlen, mode; + unsigned char ctr[MAXBLOCKSIZE], pad[MAXBLOCKSIZE]; + symmetric_key key; +} symmetric_CTR; + +/* cipher descriptor table, last entry has "name == NULL" to mark the end of table */ +extern struct _cipher_descriptor { + char *name; + unsigned char ID; + int min_key_length, max_key_length, block_length, default_rounds; + int (*setup)(const unsigned char *key, int keylength, int num_rounds, symmetric_key *skey); + void (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + int (*test)(void); + int (*keysize)(int *desired_keysize); +} cipher_descriptor[]; + +#ifdef BLOWFISH + int blowfish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + int blowfish_test(void); + int blowfish_keysize(int *desired_keysize); + extern const struct _cipher_descriptor blowfish_desc; +#endif + +#ifdef RC5 + int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + int rc5_test(void); + int rc5_keysize(int *desired_keysize); + extern const struct _cipher_descriptor rc5_desc; +#endif + +#ifdef RC6 + int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + int rc6_test(void); + int rc6_keysize(int *desired_keysize); + extern const struct _cipher_descriptor rc6_desc; +#endif + +#ifdef RC2 + int rc2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void rc2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void rc2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + int rc2_test(void); + int rc2_keysize(int *desired_keysize); + extern const struct _cipher_descriptor rc2_desc; +#endif + +#ifdef SAFERP + int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + int saferp_test(void); + int saferp_keysize(int *desired_keysize); + extern const struct _cipher_descriptor saferp_desc; +#endif + +#ifdef SAFER + int safer_k64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + int safer_sk64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + int safer_k128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + int safer_sk128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void safer_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void safer_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + + int safer_k64_test(void); + int safer_sk64_test(void); + int safer_sk128_test(void); + + int safer_64_keysize(int *desired_keysize); + int safer_128_keysize(int *desired_keysize); + extern const struct _cipher_descriptor safer_k64_desc, safer_k128_desc, safer_sk64_desc, safer_sk128_desc; +#endif + +#ifdef RIJNDAEL + +/* make aes an alias */ +#define aes_setup rijndael_setup +#define aes_ecb_encrypt rijndael_ecb_encrypt +#define aes_ecb_decrypt rijndael_ecb_decrypt +#define aes_test rijndael_test +#define aes_keysize rijndael_keysize + +#define aes_enc_setup rijndael_enc_setup +#define aes_enc_ecb_encrypt rijndael_enc_ecb_encrypt +#define aes_enc_keysize rijndael_enc_keysize + + int rijndael_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + int rijndael_test(void); + int rijndael_keysize(int *desired_keysize); + + int rijndael_enc_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void rijndael_enc_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + int rijndael_enc_keysize(int *desired_keysize); + + extern const struct _cipher_descriptor rijndael_desc, aes_desc; + extern const struct _cipher_descriptor rijndael_enc_desc, aes_enc_desc; +#endif + +#ifdef XTEA + int xtea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + int xtea_test(void); + int xtea_keysize(int *desired_keysize); + extern const struct _cipher_descriptor xtea_desc; +#endif + +#ifdef TWOFISH + int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + int twofish_test(void); + int twofish_keysize(int *desired_keysize); + extern const struct _cipher_descriptor twofish_desc; +#endif + +#ifdef DES + int des_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + int des_test(void); + int des_keysize(int *desired_keysize); + + int des3_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + int des3_test(void); + int des3_keysize(int *desired_keysize); + + extern const struct _cipher_descriptor des_desc, des3_desc; +#endif + +#ifdef CAST5 + int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + int cast5_test(void); + int cast5_keysize(int *desired_keysize); + extern const struct _cipher_descriptor cast5_desc; +#endif + +#ifdef NOEKEON + int noekeon_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + int noekeon_test(void); + int noekeon_keysize(int *desired_keysize); + extern const struct _cipher_descriptor noekeon_desc; +#endif + +#ifdef SKIPJACK + int skipjack_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + void skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); + void skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); + int skipjack_test(void); + int skipjack_keysize(int *desired_keysize); + extern const struct _cipher_descriptor skipjack_desc; +#endif + +#ifdef ECB + int ecb_start(int cipher, const unsigned char *key, + int keylen, int num_rounds, symmetric_ECB *ecb); + int ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_ECB *ecb); + int ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_ECB *ecb); +#endif + +#ifdef CFB + int cfb_start(int cipher, const unsigned char *IV, const unsigned char *key, + int keylen, int num_rounds, symmetric_CFB *cfb); + int cfb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CFB *cfb); + int cfb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CFB *cfb); + int cfb_getiv(unsigned char *IV, unsigned long *len, symmetric_CFB *cfb); + int cfb_setiv(const unsigned char *IV, unsigned long len, symmetric_CFB *cfb); +#endif + +#ifdef OFB + int ofb_start(int cipher, const unsigned char *IV, const unsigned char *key, + int keylen, int num_rounds, symmetric_OFB *ofb); + int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_OFB *ofb); + int ofb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_OFB *ofb); + int ofb_getiv(unsigned char *IV, unsigned long *len, symmetric_OFB *ofb); + int ofb_setiv(const unsigned char *IV, unsigned long len, symmetric_OFB *ofb); +#endif + +#ifdef CBC + int cbc_start(int cipher, const unsigned char *IV, const unsigned char *key, + int keylen, int num_rounds, symmetric_CBC *cbc); + int cbc_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_CBC *cbc); + int cbc_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_CBC *cbc); + int cbc_getiv(unsigned char *IV, unsigned long *len, symmetric_CBC *cbc); + int cbc_setiv(const unsigned char *IV, unsigned long len, symmetric_CBC *cbc); +#endif + +#ifdef CTR + int ctr_start(int cipher, const unsigned char *IV, const unsigned char *key, + int keylen, int num_rounds, symmetric_CTR *ctr); + int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CTR *ctr); + int ctr_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CTR *ctr); + int ctr_getiv(unsigned char *IV, unsigned long *len, symmetric_CTR *ctr); + int ctr_setiv(const unsigned char *IV, unsigned long len, symmetric_CTR *ctr); +#endif + + + + int find_cipher(const char *name); + int find_cipher_any(const char *name, int blocklen, int keylen); + int find_cipher_id(unsigned char ID); + + int register_cipher(const struct _cipher_descriptor *cipher); + int unregister_cipher(const struct _cipher_descriptor *cipher); + + int cipher_is_valid(int idx); + diff --git a/mycrypt_custom.h b/mycrypt_custom.h new file mode 100644 index 00000000..1e008300 --- /dev/null +++ b/mycrypt_custom.h @@ -0,0 +1,147 @@ +/* This header is meant to be included before mycrypt.h in projects where + * you don't want to throw all the defines in a makefile. + */ + +#ifndef MYCRYPT_CUSTOM_H_ +#define MYCRYPT_CUSTOM_H_ + +/* macros for various libc functions you can change for embedded targets */ +#define XMALLOC malloc +#define XREALLOC realloc +#define XCALLOC calloc +#define XFREE free + +#define XMEMSET memset +#define XMEMCPY memcpy + +#define XCLOCK clock +#define XCLOCKS_PER_SEC CLOCKS_PER_SEC + +/* Use small code where possible */ +#define SMALL_CODE + +/* Enable self-test test vector checking */ +#define LTC_TEST + +/* clean the stack of functions which put private information on stack */ +// #define CLEAN_STACK + +/* disable all file related functions */ +//#define NO_FILE + +/* various ciphers */ +#define BLOWFISH +#define RC2 +#define RC5 +#define RC6 +#define SAFERP +#define RIJNDAEL +#define XTEA +#define TWOFISH +#define TWOFISH_TABLES +// #define TWOFISH_ALL_TABLES +// #define TWOFISH_SMALL +#define DES +#define CAST5 +#define NOEKEON +#define SKIPJACK +/* SAFER code isn't public domain. It appears to be free to use + * but has been disabled by default to avoid any such problems + */ +//#define SAFER + +/* modes of operation */ +#define CFB +#define OFB +#define ECB +#define CBC +#define CTR + +/* hash functions */ +#define WHIRLPOOL +#define SHA512 +#define SHA384 +#define SHA256 +#define SHA224 +#define TIGER +#define SHA1 +#define MD5 +#define MD4 +#define MD2 +#define RIPEMD128 +#define RIPEMD160 + +/* MAC functions */ +#define HMAC +#define OMAC +#define PMAC + +/* Encrypt + Authenticate Modes */ +#define EAX_MODE +#define OCB_MODE + +/* Various tidbits of modern neatoness */ +#define BASE64 +#define YARROW +// which descriptor of AES to use? +// 0 = rijndael_enc 1 = aes_enc, 2 = rijndael [full], 3 = aes [full] +#define YARROW_AES 0 +#define SPRNG +#define RC4 + +/* Fortuna */ +#define FORTUNA +/* reseed every N calls to the read function */ +#define FORTUNA_WD 1024 + + +#define DEVRANDOM +#define TRY_URANDOM_FIRST + +/* Public Key Neatoness */ +#define MRSA +/* enable RSA side channel timing prevention */ +#define RSA_TIMING + +/* Digital Signature Algorithm */ +#define MDSA +/* Max diff between group and modulus size in bytes */ +#define MDSA_DELTA 512 +/* Max DSA group size in bytes (default allows 4k-bit groups) */ +#define MDSA_MAX_GROUP 512 + +/* Diffie-Hellman */ +#define MDH +/* Supported Key Sizes */ +#define DH768 +#define DH1024 +#define DH1280 +#define DH1536 +#define DH1792 +#define DH2048 +#define DH2560 +#define DH3072 +#define DH4096 + +/* ECC */ +#define MECC +/* Supported Key Sizes */ +#define ECC160 +#define ECC192 +#define ECC224 +#define ECC256 +#define ECC384 +#define ECC521 + +/* Include the MPI functionality? (required by the PK algorithms) */ +#define MPI + +/* Use SSE2 optimizations in LTM? Requires GCC or ICC and a P4 or K8 processor */ +// #define LTMSSE + +/* PKCS #1 and #5 stuff */ +#define PKCS_1 +#define PKCS_5 + +#endif + diff --git a/mycrypt_hash.h b/mycrypt_hash.h new file mode 100644 index 00000000..b661d127 --- /dev/null +++ b/mycrypt_hash.h @@ -0,0 +1,449 @@ +/* ---- HASH FUNCTIONS ---- */ +#ifdef SHA512 +struct sha512_state { + ulong64 length, state[8]; + unsigned long curlen; + unsigned char buf[128]; +}; +#endif + +#ifdef SHA256 +struct sha256_state { + ulong64 length; + ulong32 state[8], curlen; + unsigned char buf[64]; +}; +#endif + +#ifdef SHA1 +struct sha1_state { + ulong64 length; + ulong32 state[5], curlen; + unsigned char buf[64]; +}; +#endif + +#ifdef MD5 +struct md5_state { + ulong64 length; + ulong32 state[4], curlen; + unsigned char buf[64]; +}; +#endif + +#ifdef MD4 +struct md4_state { + ulong64 length; + ulong32 state[4], curlen; + unsigned char buf[64]; +}; +#endif + +#ifdef TIGER +struct tiger_state { + ulong64 state[3], length; + unsigned long curlen; + unsigned char buf[64]; +}; +#endif + +#ifdef MD2 +struct md2_state { + unsigned char chksum[16], X[48], buf[16]; + unsigned long curlen; +}; +#endif + +#ifdef RIPEMD128 +struct rmd128_state { + ulong64 length; + unsigned char buf[64]; + ulong32 curlen, state[4]; +}; +#endif + +#ifdef RIPEMD160 +struct rmd160_state { + ulong64 length; + unsigned char buf[64]; + ulong32 curlen, state[5]; +}; +#endif + +#ifdef WHIRLPOOL +struct whirlpool_state { + ulong64 length, state[8]; + unsigned char buf[64]; + ulong32 curlen; +}; +#endif + +typedef union Hash_state { +#ifdef WHIRLPOOL + struct whirlpool_state whirlpool; +#endif +#ifdef SHA512 + struct sha512_state sha512; +#endif +#ifdef SHA256 + struct sha256_state sha256; +#endif +#ifdef SHA1 + struct sha1_state sha1; +#endif +#ifdef MD5 + struct md5_state md5; +#endif +#ifdef MD4 + struct md4_state md4; +#endif +#ifdef MD2 + struct md2_state md2; +#endif +#ifdef TIGER + struct tiger_state tiger; +#endif +#ifdef RIPEMD128 + struct rmd128_state rmd128; +#endif +#ifdef RIPEMD160 + struct rmd160_state rmd160; +#endif +} hash_state; + +extern struct _hash_descriptor { + char *name; + unsigned char ID; + unsigned long hashsize; /* digest output size in bytes */ + unsigned long blocksize; /* the block size the hash uses */ + unsigned char DER[64]; /* DER encoded identifier */ + unsigned long DERlen; /* length of DER encoding */ + void (*init)(hash_state *); + int (*process)(hash_state *, const unsigned char *, unsigned long); + int (*done)(hash_state *, unsigned char *); + int (*test)(void); +} hash_descriptor[]; + + +#ifdef WHIRLPOOL + void whirlpool_init(hash_state * md); + int whirlpool_process(hash_state * md, const unsigned char *buf, unsigned long len); + int whirlpool_done(hash_state * md, unsigned char *hash); + int whirlpool_test(void); + extern const struct _hash_descriptor whirlpool_desc; +#endif + +#ifdef SHA512 + void sha512_init(hash_state * md); + int sha512_process(hash_state * md, const unsigned char *buf, unsigned long len); + int sha512_done(hash_state * md, unsigned char *hash); + int sha512_test(void); + extern const struct _hash_descriptor sha512_desc; +#endif + +#ifdef SHA384 +#ifndef SHA512 + #error SHA512 is required for SHA384 +#endif + void sha384_init(hash_state * md); +#define sha384_process sha512_process + int sha384_done(hash_state * md, unsigned char *hash); + int sha384_test(void); + extern const struct _hash_descriptor sha384_desc; +#endif + +#ifdef SHA256 + void sha256_init(hash_state * md); + int sha256_process(hash_state * md, const unsigned char *buf, unsigned long len); + int sha256_done(hash_state * md, unsigned char *hash); + int sha256_test(void); + extern const struct _hash_descriptor sha256_desc; + +#ifdef SHA224 +#ifndef SHA256 + #error SHA256 is required for SHA224 +#endif + void sha224_init(hash_state * md); +#define sha224_process sha256_process + int sha224_done(hash_state * md, unsigned char *hash); + int sha224_test(void); + extern const struct _hash_descriptor sha224_desc; +#endif +#endif + +#ifdef SHA1 + void sha1_init(hash_state * md); + int sha1_process(hash_state * md, const unsigned char *buf, unsigned long len); + int sha1_done(hash_state * md, unsigned char *hash); + int sha1_test(void); + extern const struct _hash_descriptor sha1_desc; +#endif + +#ifdef MD5 + void md5_init(hash_state * md); + int md5_process(hash_state * md, const unsigned char *buf, unsigned long len); + int md5_done(hash_state * md, unsigned char *hash); + int md5_test(void); + extern const struct _hash_descriptor md5_desc; +#endif + +#ifdef MD4 + void md4_init(hash_state * md); + int md4_process(hash_state * md, const unsigned char *buf, unsigned long len); + int md4_done(hash_state * md, unsigned char *hash); + int md4_test(void); + extern const struct _hash_descriptor md4_desc; +#endif + +#ifdef MD2 + void md2_init(hash_state * md); + int md2_process(hash_state * md, const unsigned char *buf, unsigned long len); + int md2_done(hash_state * md, unsigned char *hash); + int md2_test(void); + extern const struct _hash_descriptor md2_desc; +#endif + +#ifdef TIGER + void tiger_init(hash_state * md); + int tiger_process(hash_state * md, const unsigned char *buf, unsigned long len); + int tiger_done(hash_state * md, unsigned char *hash); + int tiger_test(void); + extern const struct _hash_descriptor tiger_desc; +#endif + +#ifdef RIPEMD128 + void rmd128_init(hash_state * md); + int rmd128_process(hash_state * md, const unsigned char *buf, unsigned long len); + int rmd128_done(hash_state * md, unsigned char *hash); + int rmd128_test(void); + extern const struct _hash_descriptor rmd128_desc; +#endif + +#ifdef RIPEMD160 + void rmd160_init(hash_state * md); + int rmd160_process(hash_state * md, const unsigned char *buf, unsigned long len); + int rmd160_done(hash_state * md, unsigned char *hash); + int rmd160_test(void); + extern const struct _hash_descriptor rmd160_desc; +#endif + + + int find_hash(const char *name); + int find_hash_id(unsigned char ID); + int find_hash_any(const char *name, int digestlen); + int register_hash(const struct _hash_descriptor *hash); + int unregister_hash(const struct _hash_descriptor *hash); + int hash_is_valid(int idx); + + int hash_memory(int hash, const unsigned char *data, unsigned long len, unsigned char *dst, unsigned long *outlen); + int hash_filehandle(int hash, FILE *in, unsigned char *dst, unsigned long *outlen); + int hash_file(int hash, const char *fname, unsigned char *dst, unsigned long *outlen); + +/* a simple macro for making hash "process" functions */ +#define HASH_PROCESS(func_name, compress_name, state_var, block_size) \ +int func_name (hash_state * md, const unsigned char *buf, unsigned long len) \ +{ \ + unsigned long n; \ + _ARGCHK(md != NULL); \ + _ARGCHK(buf != NULL); \ + if (md-> state_var .curlen > sizeof(md-> state_var .buf)) { \ + return CRYPT_INVALID_ARG; \ + } \ + while (len > 0) { \ + if (md-> state_var .curlen == 0 && len >= block_size) { \ + compress_name (md, (unsigned char *)buf); \ + md-> state_var .length += block_size * 8; \ + buf += block_size; \ + len -= block_size; \ + } else { \ + n = MIN(len, (block_size - md-> state_var .curlen)); \ + memcpy(md-> state_var .buf + md-> state_var.curlen, buf, (size_t)n); \ + md-> state_var .curlen += n; \ + buf += n; \ + len -= n; \ + if (md-> state_var .curlen == block_size) { \ + compress_name (md, md-> state_var .buf); \ + md-> state_var .length += 8*block_size; \ + md-> state_var .curlen = 0; \ + } \ + } \ + } \ + return CRYPT_OK; \ +} + +#ifdef HMAC +typedef struct Hmac_state { + hash_state md; + int hash; + hash_state hashstate; + unsigned char *key; +} hmac_state; + + int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned long keylen); + int hmac_process(hmac_state *hmac, const unsigned char *buf, unsigned long len); + int hmac_done(hmac_state *hmac, unsigned char *hashOut, unsigned long *outlen); + int hmac_test(void); + int hmac_memory(int hash, const unsigned char *key, unsigned long keylen, + const unsigned char *data, unsigned long len, + unsigned char *dst, unsigned long *dstlen); + int hmac_file(int hash, const char *fname, const unsigned char *key, + unsigned long keylen, + unsigned char *dst, unsigned long *dstlen); +#endif + +#ifdef OMAC + +typedef struct { + int cipher_idx, + buflen, + blklen; + unsigned char block[MAXBLOCKSIZE], + prev[MAXBLOCKSIZE], + Lu[2][MAXBLOCKSIZE]; + symmetric_key key; +} omac_state; + + int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned long keylen); + int omac_process(omac_state *state, const unsigned char *buf, unsigned long len); + int omac_done(omac_state *state, unsigned char *out, unsigned long *outlen); + int omac_memory(int cipher, const unsigned char *key, unsigned long keylen, + const unsigned char *msg, unsigned long msglen, + unsigned char *out, unsigned long *outlen); + int omac_file(int cipher, const unsigned char *key, unsigned long keylen, + const char *filename, unsigned char *out, unsigned long *outlen); + int omac_test(void); +#endif /* OMAC */ + +#ifdef PMAC + +typedef struct { + unsigned char Ls[32][MAXBLOCKSIZE], /* L shifted by i bits to the left */ + Li[MAXBLOCKSIZE], /* value of Li [current value, we calc from previous recall] */ + Lr[MAXBLOCKSIZE], /* L * x^-1 */ + block[MAXBLOCKSIZE], /* currently accumulated block */ + checksum[MAXBLOCKSIZE]; /* current checksum */ + + symmetric_key key; /* scheduled key for cipher */ + unsigned long block_index; /* index # for current block */ + int cipher_idx, /* cipher idx */ + block_len, /* length of block */ + buflen; /* number of bytes in the buffer */ +} pmac_state; + + int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned long keylen); + int pmac_process(pmac_state *state, const unsigned char *buf, unsigned long len); + int pmac_done(pmac_state *state, unsigned char *out, unsigned long *outlen); + + int pmac_memory(int cipher, const unsigned char *key, unsigned long keylen, + const unsigned char *msg, unsigned long msglen, + unsigned char *out, unsigned long *outlen); + + int pmac_file(int cipher, const unsigned char *key, unsigned long keylen, + const char *filename, unsigned char *out, unsigned long *outlen); + + int pmac_test(void); + +/* internal functions */ + int pmac_ntz(unsigned long x); + void pmac_shift_xor(pmac_state *pmac); + +#endif /* PMAC */ + +#ifdef EAX_MODE + +#if !(defined(OMAC) && defined(CTR)) + #error EAX_MODE requires OMAC and CTR +#endif + +typedef struct { + unsigned char N[MAXBLOCKSIZE]; + symmetric_CTR ctr; + omac_state headeromac, ctomac; +} eax_state; + + int eax_init(eax_state *eax, int cipher, const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *header, unsigned long headerlen); + + int eax_encrypt(eax_state *eax, const unsigned char *pt, unsigned char *ct, unsigned long length); + int eax_decrypt(eax_state *eax, const unsigned char *ct, unsigned char *pt, unsigned long length); + int eax_addheader(eax_state *eax, const unsigned char *header, unsigned long length); + int eax_done(eax_state *eax, unsigned char *tag, unsigned long *taglen); + + int eax_encrypt_authenticate_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *header, unsigned long headerlen, + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen); + + int eax_decrypt_verify_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *header, unsigned long headerlen, + const unsigned char *ct, unsigned long ctlen, + unsigned char *pt, + unsigned char *tag, unsigned long taglen, + int *res); + + int eax_test(void); +#endif /* EAX MODE */ + +#ifdef OCB_MODE +typedef struct { + unsigned char L[MAXBLOCKSIZE], /* L value */ + Ls[32][MAXBLOCKSIZE], /* L shifted by i bits to the left */ + Li[MAXBLOCKSIZE], /* value of Li [current value, we calc from previous recall] */ + Lr[MAXBLOCKSIZE], /* L * x^-1 */ + R[MAXBLOCKSIZE], /* R value */ + checksum[MAXBLOCKSIZE]; /* current checksum */ + + symmetric_key key; /* scheduled key for cipher */ + unsigned long block_index; /* index # for current block */ + int cipher, /* cipher idx */ + block_len; /* length of block */ +} ocb_state; + + int ocb_init(ocb_state *ocb, int cipher, + const unsigned char *key, unsigned long keylen, const unsigned char *nonce); + + int ocb_encrypt(ocb_state *ocb, const unsigned char *pt, unsigned char *ct); + int ocb_decrypt(ocb_state *ocb, const unsigned char *ct, unsigned char *pt); + + int ocb_done_encrypt(ocb_state *ocb, + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen); + + int ocb_done_decrypt(ocb_state *ocb, + const unsigned char *ct, unsigned long ctlen, + unsigned char *pt, + const unsigned char *tag, unsigned long taglen, int *res); + + int ocb_encrypt_authenticate_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen); + + int ocb_decrypt_verify_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, + const unsigned char *ct, unsigned long ctlen, + unsigned char *pt, + const unsigned char *tag, unsigned long taglen, + int *res); + + int ocb_test(void); + +/* internal functions */ + void ocb_shift_xor(ocb_state *ocb, unsigned char *Z); + int ocb_ntz(unsigned long x); + int __ocb_done(ocb_state *ocb, const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, unsigned char *tag, unsigned long *taglen, int mode); + +#endif /* OCB_MODE */ + + diff --git a/mycrypt_macros.h b/mycrypt_macros.h new file mode 100644 index 00000000..cd69cd39 --- /dev/null +++ b/mycrypt_macros.h @@ -0,0 +1,241 @@ +/* fix for MSVC ...evil! */ +#ifdef _MSC_VER + #define CONST64(n) n ## ui64 + typedef unsigned __int64 ulong64; +#else + #define CONST64(n) n ## ULL + typedef unsigned long long ulong64; +#endif + +/* this is the "32-bit at least" data type + * Re-define it to suit your platform but it must be at least 32-bits + */ +typedef unsigned long ulong32; + +/* ---- HELPER MACROS ---- */ +#ifdef ENDIAN_NEUTRAL + +#define STORE32L(x, y) \ + { (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ + (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } + +#define LOAD32L(x, y) \ + { x = ((unsigned long)((y)[3] & 255)<<24) | \ + ((unsigned long)((y)[2] & 255)<<16) | \ + ((unsigned long)((y)[1] & 255)<<8) | \ + ((unsigned long)((y)[0] & 255)); } + +#define STORE64L(x, y) \ + { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \ + (y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \ + (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ + (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } + +#define LOAD64L(x, y) \ + { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48)| \ + (((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32)| \ + (((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16)| \ + (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } + +#define STORE32H(x, y) \ + { (y)[0] = (unsigned char)(((x)>>24)&255); (y)[1] = (unsigned char)(((x)>>16)&255); \ + (y)[2] = (unsigned char)(((x)>>8)&255); (y)[3] = (unsigned char)((x)&255); } + +#define LOAD32H(x, y) \ + { x = ((unsigned long)((y)[0] & 255)<<24) | \ + ((unsigned long)((y)[1] & 255)<<16) | \ + ((unsigned long)((y)[2] & 255)<<8) | \ + ((unsigned long)((y)[3] & 255)); } + +#define STORE64H(x, y) \ + { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \ + (y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \ + (y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \ + (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } + +#define LOAD64H(x, y) \ + { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48) | \ + (((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32) | \ + (((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16) | \ + (((ulong64)((y)[6] & 255))<<8)|(((ulong64)((y)[7] & 255))); } + +#endif /* ENDIAN_NEUTRAL */ + +#ifdef ENDIAN_LITTLE + +#define STORE32H(x, y) \ + { (y)[0] = (unsigned char)(((x)>>24)&255); (y)[1] = (unsigned char)(((x)>>16)&255); \ + (y)[2] = (unsigned char)(((x)>>8)&255); (y)[3] = (unsigned char)((x)&255); } + +#define LOAD32H(x, y) \ + { x = ((unsigned long)((y)[0] & 255)<<24) | \ + ((unsigned long)((y)[1] & 255)<<16) | \ + ((unsigned long)((y)[2] & 255)<<8) | \ + ((unsigned long)((y)[3] & 255)); } + +#define STORE64H(x, y) \ + { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \ + (y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \ + (y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \ + (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } + +#define LOAD64H(x, y) \ + { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48) | \ + (((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32) | \ + (((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16) | \ + (((ulong64)((y)[6] & 255))<<8)|(((ulong64)((y)[7] & 255))); } + +#ifdef ENDIAN_32BITWORD + +#define STORE32L(x, y) \ + { unsigned long __t = (x); memcpy(y, &__t, 4); } + +#define LOAD32L(x, y) \ + memcpy(&(x), y, 4); + +#define STORE64L(x, y) \ + { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \ + (y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \ + (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ + (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } + +#define LOAD64L(x, y) \ + { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48)| \ + (((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32)| \ + (((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16)| \ + (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } + +#else /* 64-bit words then */ + +#define STORE32L(x, y) \ + { unsigned long __t = (x); memcpy(y, &__t, 4); } + +#define LOAD32L(x, y) \ + { memcpy(&(x), y, 4); x &= 0xFFFFFFFF; } + +#define STORE64L(x, y) \ + { ulong64 __t = (x); memcpy(y, &__t, 8); } + +#define LOAD64L(x, y) \ + { memcpy(&(x), y, 8); } + +#endif /* ENDIAN_64BITWORD */ + +#endif /* ENDIAN_LITTLE */ + +#ifdef ENDIAN_BIG +#define STORE32L(x, y) \ + { (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ + (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } + +#define LOAD32L(x, y) \ + { x = ((unsigned long)((y)[3] & 255)<<24) | \ + ((unsigned long)((y)[2] & 255)<<16) | \ + ((unsigned long)((y)[1] & 255)<<8) | \ + ((unsigned long)((y)[0] & 255)); } + +#define STORE64L(x, y) \ + { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \ + (y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \ + (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ + (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } + +#define LOAD64L(x, y) \ + { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48) | \ + (((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32) | \ + (((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16) | \ + (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } + +#ifdef ENDIAN_32BITWORD + +#define STORE32H(x, y) \ + { unsigned long __t = (x); memcpy(y, &__t, 4); } + +#define LOAD32H(x, y) \ + memcpy(&(x), y, 4); + +#define STORE64H(x, y) \ + { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \ + (y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \ + (y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \ + (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } + +#define LOAD64H(x, y) \ + { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48)| \ + (((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32)| \ + (((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16)| \ + (((ulong64)((y)[6] & 255))<<8)| (((ulong64)((y)[7] & 255))); } + +#else /* 64-bit words then */ + +#define STORE32H(x, y) \ + { unsigned long __t = (x); memcpy(y, &__t, 4); } + +#define LOAD32H(x, y) \ + { memcpy(&(x), y, 4); x &= 0xFFFFFFFF; } + +#define STORE64H(x, y) \ + { ulong64 __t = (x); memcpy(y, &__t, 8); } + +#define LOAD64H(x, y) \ + { memcpy(&(x), y, 8); } + +#endif /* ENDIAN_64BITWORD */ +#endif /* ENDIAN_BIG */ + +#define BSWAP(x) ( ((x>>24)&0x000000FFUL) | ((x<<24)&0xFF000000UL) | \ + ((x>>8)&0x0000FF00UL) | ((x<<8)&0x00FF0000UL) ) + +#ifdef _MSC_VER + +/* instrinsic rotate */ +#include +#pragma intrinsic(_lrotr,_lrotl) +#define ROR(x,n) _lrotr(x,n) +#define ROL(x,n) _lrotl(x,n) + +#elif defined(__GNUC__) && defined(__i386__) && !defined(INTEL_CC) + +static inline unsigned long ROL(unsigned long word, int i) +{ + __asm__("roll %%cl,%0" + :"=r" (word) + :"0" (word),"c" (i)); + return word; +} + +static inline unsigned long ROR(unsigned long word, int i) +{ + __asm__("rorl %%cl,%0" + :"=r" (word) + :"0" (word),"c" (i)); + return word; +} + +#else + +/* rotates the hard way */ +#define ROL(x, y) ( (((unsigned long)(x)<<(unsigned long)((y)&31)) | (((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL) +#define ROR(x, y) ( ((((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)((y)&31)) | ((unsigned long)(x)<<(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL) + +#endif + +#define ROL64(x, y) \ + ( (((x)<<((ulong64)(y)&63)) | \ + (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)64-((y)&63)))) & CONST64(0xFFFFFFFFFFFFFFFF)) + +#define ROR64(x, y) \ + ( ((((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)(y)&CONST64(63))) | \ + ((x)<<((ulong64)(64-((y)&CONST64(63)))))) & CONST64(0xFFFFFFFFFFFFFFFF)) + +#undef MAX +#undef MIN +#define MAX(x, y) ( ((x)>(y))?(x):(y) ) +#define MIN(x, y) ( ((x)<(y))?(x):(y) ) + +/* extract a byte portably */ +#ifdef _MSC_VER + #define byte(x, n) ((unsigned char)((x) >> (8 * (n)))) +#else + #define byte(x, n) (((x) >> (8 * (n))) & 255) +#endif diff --git a/mycrypt_misc.h b/mycrypt_misc.h new file mode 100644 index 00000000..b9f9dbd8 --- /dev/null +++ b/mycrypt_misc.h @@ -0,0 +1,17 @@ +/* ---- BASE64 Routines ---- */ +#ifdef BASE64 + int base64_encode(const unsigned char *in, unsigned long len, + unsigned char *out, unsigned long *outlen); + + int base64_decode(const unsigned char *in, unsigned long len, + unsigned char *out, unsigned long *outlen); +#endif + +/* ---- MEM routines ---- */ + void zeromem(void *dst, size_t len); + void burn_stack(unsigned long len); + + const char *error_to_string(int err); + int mpi_to_ltc_error(int err); + + extern const char *crypt_build_settings; diff --git a/mycrypt_pk.h b/mycrypt_pk.h new file mode 100644 index 00000000..9afacda1 --- /dev/null +++ b/mycrypt_pk.h @@ -0,0 +1,278 @@ +/* ---- NUMBER THEORY ---- */ +#ifdef MPI + +#include "ltc_tommath.h" + +/* in/out macros */ +#define OUTPUT_BIGNUM(num, out, y, z) \ +{ \ + if ((y + 4) > *outlen) { return CRYPT_BUFFER_OVERFLOW; } \ + z = (unsigned long)mp_unsigned_bin_size(num); \ + STORE32L(z, out+y); \ + y += 4; \ + if ((y + z) > *outlen) { return CRYPT_BUFFER_OVERFLOW; } \ + if ((err = mp_to_unsigned_bin(num, out+y)) != MP_OKAY) { return mpi_to_ltc_error(err); } \ + y += z; \ +} + + +#define INPUT_BIGNUM(num, in, x, y, inlen) \ +{ \ + /* load value */ \ + if ((y + 4) > inlen) { \ + err = CRYPT_INVALID_PACKET; \ + goto error; \ + } \ + LOAD32L(x, in+y); \ + y += 4; \ + \ + /* sanity check... */ \ + if ((x+y) > inlen) { \ + err = CRYPT_INVALID_PACKET; \ + goto error; \ + } \ + \ + /* load it */ \ + if ((err = mp_read_unsigned_bin(num, (unsigned char *)in+y, (int)x)) != MP_OKAY) {\ + err = mpi_to_ltc_error(err); \ + goto error; \ + } \ + y += x; \ + if ((err = mp_shrink(num)) != MP_OKAY) { \ + err = mpi_to_ltc_error(err); \ + goto error; \ + } \ +} + + int is_prime(mp_int *, int *); + int rand_prime(mp_int *N, long len, prng_state *prng, int wprng); + +#else + #ifdef MRSA + #error RSA requires the big int library + #endif + #ifdef MECC + #error ECC requires the big int library + #endif + #ifdef MDH + #error DH requires the big int library + #endif + #ifdef MDSA + #error DSA requires the big int library + #endif +#endif /* MPI */ + + +/* ---- PUBLIC KEY CRYPTO ---- */ + +#define PK_PRIVATE 0 /* PK private keys */ +#define PK_PUBLIC 1 /* PK public keys */ +#define PK_PRIVATE_OPTIMIZED 2 /* PK private key [rsa optimized] */ + +/* ---- PACKET ---- */ +#ifdef PACKET + + void packet_store_header(unsigned char *dst, int section, int subsection); + int packet_valid_header(unsigned char *src, int section, int subsection); + +#endif + + +/* ---- RSA ---- */ +#ifdef MRSA + +/* Min and Max RSA key sizes (in bits) */ +#define MIN_RSA_SIZE 1024 +#define MAX_RSA_SIZE 4096 + +/* Stack required for temps (plus padding) */ +// #define RSA_STACK (8 + (MAX_RSA_SIZE/8)) + +typedef struct Rsa_key { + int type; + mp_int e, d, N, qP, pQ, dP, dQ, p, q; +} rsa_key; + + int rsa_make_key(prng_state *prng, int wprng, int size, long e, rsa_key *key); + + int rsa_exptmod(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, int which, + prng_state *prng, int prng_idx, + rsa_key *key); + +#ifdef RSA_TIMING + + int tim_exptmod(prng_state *prng, int prng_idx, + mp_int *c, mp_int *e, mp_int *d, mp_int *n, mp_int *m); + +#else + +#define tim_exptmod(prng, prng_idx, c, e, d, n, m) mpi_to_ltc_error(mp_exptmod(c, d, n, m)) + +#endif + + void rsa_free(rsa_key *key); + +/* These use PKCS #1 v2.0 padding */ +int rsa_encrypt_key(const unsigned char *inkey, unsigned long inlen, + unsigned char *outkey, unsigned long *outlen, + const unsigned char *lparam, unsigned long lparamlen, + prng_state *prng, int prng_idx, int hash_idx, rsa_key *key); + +int rsa_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *outkey, unsigned long *keylen, + const unsigned char *lparam, unsigned long lparamlen, + prng_state *prng, int prng_idx, + int hash_idx, int *res, + rsa_key *key); + +int rsa_sign_hash(const unsigned char *msghash, unsigned long msghashlen, + unsigned char *sig, unsigned long *siglen, + prng_state *prng, int prng_idx, + int hash_idx, unsigned long saltlen, + rsa_key *key); + +int rsa_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *msghash, unsigned long msghashlen, + prng_state *prng, int prng_idx, + int hash_idx, unsigned long saltlen, + int *stat, rsa_key *key); + +/* these use PKCS #1 v1.5 padding */ +int rsa_v15_encrypt_key(const unsigned char *inkey, unsigned long inlen, + unsigned char *outkey, unsigned long *outlen, + prng_state *prng, int prng_idx, + rsa_key *key); + +int rsa_v15_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *outkey, unsigned long keylen, + prng_state *prng, int prng_idx, + int *res, rsa_key *key); + +int rsa_v15_sign_hash(const unsigned char *msghash, unsigned long msghashlen, + unsigned char *sig, unsigned long *siglen, + prng_state *prng, int prng_idx, + int hash_idx, rsa_key *key); + +int rsa_v15_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *msghash, unsigned long msghashlen, + prng_state *prng, int prng_idx, + int hash_idx, int *stat, + rsa_key *key); + + +/* PKCS #1 import/export */ +int rsa_export(unsigned char *out, unsigned long *outlen, int type, rsa_key *key); +int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key); + +#endif + +/* ---- DH Routines ---- */ +#ifdef MDH + +typedef struct Dh_key { + int idx, type; + mp_int x, y; +} dh_key; + + int dh_test(void); + void dh_sizes(int *low, int *high); + int dh_get_size(dh_key *key); + + int dh_make_key(prng_state *prng, int wprng, int keysize, dh_key *key); + void dh_free(dh_key *key); + + int dh_export(unsigned char *out, unsigned long *outlen, int type, dh_key *key); + int dh_import(const unsigned char *in, unsigned long inlen, dh_key *key); + + int dh_shared_secret(dh_key *private_key, dh_key *public_key, + unsigned char *out, unsigned long *outlen); + + int dh_encrypt_key(const unsigned char *inkey, unsigned long keylen, + unsigned char *out, unsigned long *len, + prng_state *prng, int wprng, int hash, + dh_key *key); + + int dh_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *outkey, unsigned long *keylen, + dh_key *key); + + int dh_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, dh_key *key); + + int dh_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int *stat, dh_key *key); + + +#endif + +/* ---- ECC Routines ---- */ +#ifdef MECC +typedef struct { + mp_int x, y; +} ecc_point; + +typedef struct { + int type, idx; + ecc_point pubkey; + mp_int k; +} ecc_key; + + int ecc_test(void); + void ecc_sizes(int *low, int *high); + int ecc_get_size(ecc_key *key); + + int ecc_make_key(prng_state *prng, int wprng, int keysize, ecc_key *key); + void ecc_free(ecc_key *key); + + int ecc_export(unsigned char *out, unsigned long *outlen, int type, ecc_key *key); + int ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key); + + int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key, + unsigned char *out, unsigned long *outlen); + + int ecc_encrypt_key(const unsigned char *inkey, unsigned long keylen, + unsigned char *out, unsigned long *len, + prng_state *prng, int wprng, int hash, + ecc_key *key); + + int ecc_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *outkey, unsigned long *keylen, + ecc_key *key); + + int ecc_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, ecc_key *key); + + int ecc_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int *stat, ecc_key *key); +#endif + +#ifdef MDSA + +typedef struct { + int type, qord; + mp_int g, q, p, x, y; +} dsa_key; + + int dsa_make_key(prng_state *prng, int wprng, int group_size, int modulus_size, dsa_key *key); + void dsa_free(dsa_key *key); + + int dsa_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, dsa_key *key); + + int dsa_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long inlen, + int *stat, dsa_key *key); + + int dsa_import(const unsigned char *in, unsigned long inlen, dsa_key *key); + + int dsa_export(unsigned char *out, unsigned long *outlen, int type, dsa_key *key); + + int dsa_verify_key(dsa_key *key, int *stat); + +#endif diff --git a/mycrypt_pkcs.h b/mycrypt_pkcs.h new file mode 100644 index 00000000..9fd0581a --- /dev/null +++ b/mycrypt_pkcs.h @@ -0,0 +1,80 @@ +/* PKCS Header Info */ + +/* ===> PKCS #1 -- RSA Cryptography <=== */ +#ifdef PKCS_1 + +int pkcs_1_mgf1(const unsigned char *seed, unsigned long seedlen, + int hash_idx, + unsigned char *mask, unsigned long masklen); + +int pkcs_1_i2osp(mp_int *n, unsigned long modulus_len, unsigned char *out); +int pkcs_1_os2ip(mp_int *n, unsigned char *in, unsigned long inlen); + +/* *** v2.0 padding */ +int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, + const unsigned char *lparam, unsigned long lparamlen, + unsigned long modulus_bitlen, prng_state *prng, + int prng_idx, int hash_idx, + unsigned char *out, unsigned long *outlen); + +int pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, + const unsigned char *lparam, unsigned long lparamlen, + unsigned long modulus_bitlen, int hash_idx, + unsigned char *out, unsigned long *outlen, + int *res); + +int pkcs_1_pss_encode(const unsigned char *msghash, unsigned long msghashlen, + unsigned long saltlen, prng_state *prng, + int prng_idx, int hash_idx, + unsigned long modulus_bitlen, + unsigned char *out, unsigned long *outlen); + +int pkcs_1_pss_decode(const unsigned char *msghash, unsigned long msghashlen, + const unsigned char *sig, unsigned long siglen, + unsigned long saltlen, int hash_idx, + unsigned long modulus_bitlen, int *res); + +/* *** v1.5 padding */ +/* encryption padding */ +int pkcs_1_v15_es_encode(const unsigned char *msg, unsigned long msglen, + unsigned long modulus_bitlen, + prng_state *prng, int prng_idx, + unsigned char *out, unsigned long *outlen); + +/* note "outlen" is fixed, you have to tell this decoder how big + * the original message was. Unlike the OAEP decoder it cannot auto-detect it. + */ +int pkcs_1_v15_es_decode(const unsigned char *msg, unsigned long msglen, + unsigned long modulus_bitlen, + unsigned char *out, unsigned long outlen, + int *res); + +/* signature padding */ +int pkcs_1_v15_sa_encode(const unsigned char *msghash, unsigned long msghashlen, + int hash_idx, unsigned long modulus_bitlen, + unsigned char *out, unsigned long *outlen); + +int pkcs_1_v15_sa_decode(const unsigned char *msghash, unsigned long msghashlen, + const unsigned char *sig, unsigned long siglen, + int hash_idx, unsigned long modulus_bitlen, + int *res); + + +#endif /* PKCS_1 */ + +/* ===> PKCS #5 -- Password Based Cryptography <=== */ +#ifdef PKCS_5 + +/* Algorithm #1 (old) */ +int pkcs_5_alg1(const unsigned char *password, unsigned long password_len, + const unsigned char *salt, + int iteration_count, int hash_idx, + unsigned char *out, unsigned long *outlen); + +/* Algorithm #2 (new) */ +int pkcs_5_alg2(const unsigned char *password, unsigned long password_len, + const unsigned char *salt, unsigned long salt_len, + int iteration_count, int hash_idx, + unsigned char *out, unsigned long *outlen); + +#endif /* PKCS_5 */ diff --git a/mycrypt_prng.h b/mycrypt_prng.h new file mode 100644 index 00000000..3ded2ccc --- /dev/null +++ b/mycrypt_prng.h @@ -0,0 +1,105 @@ +/* ---- PRNG Stuff ---- */ +struct yarrow_prng { + int cipher, hash; + unsigned char pool[MAXBLOCKSIZE]; + symmetric_CTR ctr; +}; + +struct rc4_prng { + int x, y; + unsigned char buf[256]; +}; + +struct fortuna_prng { + hash_state pool[32]; /* the 32 pools */ + + symmetric_key skey; + + unsigned char K[32], /* the current key */ + IV[16]; /* IV for CTR mode */ + + unsigned long pool_idx, /* current pool we will add to */ + pool0_len, /* length of 0'th pool */ + wd; + + ulong64 reset_cnt; /* number of times we have reset */ +}; + +typedef union Prng_state { + struct yarrow_prng yarrow; + struct rc4_prng rc4; + struct fortuna_prng fortuna; +} prng_state; + +extern struct _prng_descriptor { + char *name; + int (*start)(prng_state *); + int (*add_entropy)(const unsigned char *, unsigned long, prng_state *); + int (*ready)(prng_state *); + unsigned long (*read)(unsigned char *, unsigned long, prng_state *); + void (*done)(prng_state *); + int (*export)(unsigned char *, unsigned long *, prng_state *); + int (*import)(const unsigned char *, unsigned long, prng_state *); +} prng_descriptor[]; + +#ifdef YARROW + int yarrow_start(prng_state *prng); + int yarrow_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng); + int yarrow_ready(prng_state *prng); + unsigned long yarrow_read(unsigned char *buf, unsigned long len, prng_state *prng); + void yarrow_done(prng_state *prng); + int yarrow_export(unsigned char *out, unsigned long *outlen, prng_state *prng); + int yarrow_import(const unsigned char *in, unsigned long inlen, prng_state *prng); + extern const struct _prng_descriptor yarrow_desc; +#endif + +#ifdef FORTUNA + int fortuna_start(prng_state *prng); + int fortuna_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng); + int fortuna_ready(prng_state *prng); + unsigned long fortuna_read(unsigned char *buf, unsigned long len, prng_state *prng); + void fortuna_done(prng_state *prng); + int fortuna_export(unsigned char *out, unsigned long *outlen, prng_state *prng); + int fortuna_import(const unsigned char *in, unsigned long inlen, prng_state *prng); + extern const struct _prng_descriptor fortuna_desc; +#endif + +#ifdef RC4 + int rc4_start(prng_state *prng); + int rc4_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng); + int rc4_ready(prng_state *prng); + unsigned long rc4_read(unsigned char *buf, unsigned long len, prng_state *prng); + void rc4_done(prng_state *prng); + int rc4_export(unsigned char *out, unsigned long *outlen, prng_state *prng); + int rc4_import(const unsigned char *in, unsigned long inlen, prng_state *prng); + extern const struct _prng_descriptor rc4_desc; +#endif + +#ifdef SPRNG + int sprng_start(prng_state *prng); + int sprng_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng); + int sprng_ready(prng_state *prng); + unsigned long sprng_read(unsigned char *buf, unsigned long len, prng_state *prng); + void sprng_done(prng_state *prng); + int sprng_export(unsigned char *out, unsigned long *outlen, prng_state *prng); + int sprng_import(const unsigned char *in, unsigned long inlen, prng_state *prng); + extern const struct _prng_descriptor sprng_desc; +#endif + + int find_prng(const char *name); + int register_prng(const struct _prng_descriptor *prng); + int unregister_prng(const struct _prng_descriptor *prng); + int prng_is_valid(int idx); + + +/* Slow RNG you **might** be able to use to seed a PRNG with. Be careful as this + * might not work on all platforms as planned + */ +/* ch2-02-1 */ + unsigned long rng_get_bytes(unsigned char *buf, + unsigned long len, + void (*callback)(void)); +/* ch2-02-1 */ + + int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void)); + diff --git a/noekeon.c b/noekeon.c new file mode 100644 index 00000000..7c6e87fd --- /dev/null +++ b/noekeon.c @@ -0,0 +1,270 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* Implementation of the Noekeon block cipher by Tom St Denis */ +#include "mycrypt.h" + +#ifdef NOEKEON + +const struct _cipher_descriptor noekeon_desc = +{ + "noekeon", + 16, + 16, 16, 16, 16, + &noekeon_setup, + &noekeon_ecb_encrypt, + &noekeon_ecb_decrypt, + &noekeon_test, + &noekeon_keysize +}; + +static const ulong32 RC[] = { + 0x00000080UL, 0x0000001bUL, 0x00000036UL, 0x0000006cUL, + 0x000000d8UL, 0x000000abUL, 0x0000004dUL, 0x0000009aUL, + 0x0000002fUL, 0x0000005eUL, 0x000000bcUL, 0x00000063UL, + 0x000000c6UL, 0x00000097UL, 0x00000035UL, 0x0000006aUL, + 0x000000d4UL +}; + + +#define kTHETA(a, b, c, d) \ + temp = a^c; temp = temp ^ ROL(temp, 8) ^ ROR(temp, 8); \ + b ^= temp; d ^= temp; \ + temp = b^d; temp = temp ^ ROL(temp, 8) ^ ROR(temp, 8); \ + a ^= temp; c ^= temp; + +#define THETA(k, a, b, c, d) \ + temp = a^c; temp = temp ^ ROL(temp, 8) ^ ROR(temp, 8); \ + b ^= temp ^ k[1]; d ^= temp ^ k[3]; \ + temp = b^d; temp = temp ^ ROL(temp, 8) ^ ROR(temp, 8); \ + a ^= temp ^ k[0]; c ^= temp ^ k[2]; + +#define GAMMA(a, b, c, d) \ + b ^= ~(d|c); \ + a ^= c&b; \ + temp = d; d = a; a = temp;\ + c ^= a ^ b ^ d; \ + b ^= ~(d|c); \ + a ^= c&b; + +#define PI1(a, b, c, d) \ + a = ROL(a, 1); c = ROL(c, 5); d = ROL(d, 2); + +#define PI2(a, b, c, d) \ + a = ROR(a, 1); c = ROR(c, 5); d = ROR(d, 2); + +int noekeon_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) +{ + ulong32 temp; + + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); + + if (keylen != 16) { + return CRYPT_INVALID_KEYSIZE; + } + + if (num_rounds != 16 && num_rounds != 0) { + return CRYPT_INVALID_ROUNDS; + } + + LOAD32H(skey->noekeon.K[0],&key[0]); + LOAD32H(skey->noekeon.K[1],&key[4]); + LOAD32H(skey->noekeon.K[2],&key[8]); + LOAD32H(skey->noekeon.K[3],&key[12]); + + LOAD32H(skey->noekeon.dK[0],&key[0]); + LOAD32H(skey->noekeon.dK[1],&key[4]); + LOAD32H(skey->noekeon.dK[2],&key[8]); + LOAD32H(skey->noekeon.dK[3],&key[12]); + + kTHETA(skey->noekeon.dK[0], skey->noekeon.dK[1], skey->noekeon.dK[2], skey->noekeon.dK[3]); + + return CRYPT_OK; +} + +#ifdef CLEAN_STACK +static void _noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) +#else +void noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) +#endif +{ + ulong32 a,b,c,d,temp; +#ifdef SMALL_CODE + int r; +#endif + + _ARGCHK(key != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + + LOAD32H(a,&pt[0]); LOAD32H(b,&pt[4]); + LOAD32H(c,&pt[8]); LOAD32H(d,&pt[12]); + +#define ROUND(i) \ + a ^= RC[i]; \ + THETA(key->noekeon.K, a,b,c,d); \ + PI1(a,b,c,d); \ + GAMMA(a,b,c,d); \ + PI2(a,b,c,d); + +#ifdef SMALL_CODE + for (r = 0; r < 16; ++r) { + ROUND(r); + } +#else + ROUND( 0); ROUND( 1); ROUND( 2); ROUND( 3); + ROUND( 4); ROUND( 5); ROUND( 6); ROUND( 7); + ROUND( 8); ROUND( 9); ROUND(10); ROUND(11); + ROUND(12); ROUND(13); ROUND(14); ROUND(15); +#endif + +#undef ROUND + + a ^= RC[16]; + THETA(key->noekeon.K, a, b, c, d); + + STORE32H(a,&ct[0]); STORE32H(b,&ct[4]); + STORE32H(c,&ct[8]); STORE32H(d,&ct[12]); +} + +#ifdef CLEAN_STACK +void noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) +{ + _noekeon_ecb_encrypt(pt, ct, key); + burn_stack(sizeof(ulong32) * 5 + sizeof(int)); +} +#endif + +#ifdef CLEAN_STACK +static void _noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) +#else +void noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) +#endif +{ + ulong32 a,b,c,d, temp; +#ifdef SMALL_CODE + int r; +#endif + + _ARGCHK(key != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + + LOAD32H(a,&ct[0]); LOAD32H(b,&ct[4]); + LOAD32H(c,&ct[8]); LOAD32H(d,&ct[12]); + + +#define ROUND(i) \ + THETA(key->noekeon.dK, a,b,c,d); \ + a ^= RC[i]; \ + PI1(a,b,c,d); \ + GAMMA(a,b,c,d); \ + PI2(a,b,c,d); + +#ifdef SMALL_CODE + for (r = 16; r > 0; --r) { + ROUND(r); + } +#else + ROUND(16); ROUND(15); ROUND(14); ROUND(13); + ROUND(12); ROUND(11); ROUND(10); ROUND( 9); + ROUND( 8); ROUND( 7); ROUND( 6); ROUND( 5); + ROUND( 4); ROUND( 3); ROUND( 2); ROUND( 1); +#endif + +#undef ROUND + + THETA(key->noekeon.dK, a,b,c,d); + a ^= RC[0]; + STORE32H(a,&pt[0]); STORE32H(b, &pt[4]); + STORE32H(c,&pt[8]); STORE32H(d, &pt[12]); +} + +#ifdef CLEAN_STACK +void noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) +{ + _noekeon_ecb_decrypt(ct, pt, key); + burn_stack(sizeof(ulong32) * 5 + sizeof(int)); +} +#endif + +int noekeon_test(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + static const struct { + int keylen; + unsigned char key[16], pt[16], ct[16]; + } tests[] = { + { + 16, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, + { 0x18, 0xa6, 0xec, 0xe5, 0x28, 0xaa, 0x79, 0x73, + 0x28, 0xb2, 0xc0, 0x91, 0xa0, 0x2f, 0x54, 0xc5} + } + }; + symmetric_key key; + unsigned char tmp[2][16]; + int err, i, y; + + for (i = 0; i < (int)(sizeof(tests)/sizeof(tests[0])); i++) { + zeromem(&key, sizeof(key)); + if ((err = noekeon_setup(tests[i].key, tests[i].keylen, 0, &key)) != CRYPT_OK) { + return err; + } + + noekeon_ecb_encrypt(tests[i].pt, tmp[0], &key); + noekeon_ecb_decrypt(tmp[0], tmp[1], &key); + if (memcmp(tmp[0], tests[i].ct, 16) || memcmp(tmp[1], tests[i].pt, 16)) { +#if 0 + printf("\n\nTest %d failed\n", i); + if (memcmp(tmp[0], tests[i].ct, 16)) { + printf("CT: "); + for (i = 0; i < 16; i++) { + printf("%02x ", tmp[0][i]); + } + printf("\n"); + } else { + printf("PT: "); + for (i = 0; i < 16; i++) { + printf("%02x ", tmp[1][i]); + } + printf("\n"); + } +#endif + return CRYPT_FAIL_TESTVECTOR; + } + + /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ + for (y = 0; y < 16; y++) tmp[0][y] = 0; + for (y = 0; y < 1000; y++) noekeon_ecb_encrypt(tmp[0], tmp[0], &key); + for (y = 0; y < 1000; y++) noekeon_ecb_decrypt(tmp[0], tmp[0], &key); + for (y = 0; y < 16; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; + } + return CRYPT_OK; + #endif +} + +int noekeon_keysize(int *desired_keysize) +{ + _ARGCHK(desired_keysize != NULL); + if (*desired_keysize < 16) { + return CRYPT_INVALID_KEYSIZE; + } else { + *desired_keysize = 16; + return CRYPT_OK; + } +} + +#endif + diff --git a/notes/ccm_tv.txt b/notes/ccm_tv.txt deleted file mode 100644 index ba799b6d..00000000 --- a/notes/ccm_tv.txt +++ /dev/null @@ -1,2567 +0,0 @@ -CCM Test Vectors. Uses the 00010203...NN-1 pattern for nonce/header/plaintext/key. The outputs -are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous -step repeated sufficiently. The nonce is fixed throughout at 13 bytes 000102... - -CCM-aes (16 byte key) - 0: , 67793B6C - 1: 8D, 9FEDFEA8 - 2: 6880, 8747F545 - 3: 6F9E65, 76C5E311 - 4: EE6651E9, 2A1694FA - 5: 9FE10F9E6D, EA9C41C7 - 6: 800ED09A8F0D, 8F19E1D4 - 7: 60B91320B18275, 6B132AD6 - 8: D94FB58DA099CA87, 695DE67E - 9: 12DDB140869923D7E3, FCC51E9D - 10: 9923A8F6BC65873AF416, 7D634F5F - 11: 8539AC9523CDB7FB0D9E24, 7CD0FFC9 - 12: 51D0B99EBE91B0C366387DBE, A7B35289 - 13: 5881C18961B16CD25477E64122, DEE00B65 - 14: 9E55DDBAF1271D9947F388E81532, C5313BF3 - 15: A4A456442049C5E02F83DED5DE03D9, DC65EF04 - 16: 9AC6520365FE7D687D59DA23F1606456, 93DEC35F - 17: 8567B2F05FF995E3FE1B88F9A539D4978D, 74193CE9 - 18: 1D6F63DB2FAF08FF645FD453DAFBA239AAAD, 79A071B2 - 19: EF1F242208E1C6BD0439436784677827730865, A107F15F - 20: A592593DA79600BA528120E31C71A1543186672E, C15D7DD9 - 21: 4B8AE1B19348E87F0086081D9AACA41EA3CE0BFE91, E78E51C5 - 22: AA4E7A7EACD50D3C466C4E12057D333B5F03AE35EA62, 69DF1B71 - 23: FBB00573E69371B55C4CAA0FFBBC6F44D5A326229E19E1, BDEE7817 - 24: 9E8F4C6CAC285D5E6565490E3AC75582BAA258DBAA05BE8F, 14D1472A - 25: 2A825C2584C5B1F59361213D976DB54BC71C8520A487BC2917, 0AF4818E - 26: EC27DAA942819186524C59A839B723C2280269B2630DA3A22735, 5223FAD2 - 27: E3B76C6E9DFB954EA7750658BED5885C384B507245289F3A745A52, 2954B83D - 28: F24F1199A3A7C4A3E37506A2654939553509C5227453BE3029ABFBFE, 5CE21161 - 29: BE102DB643EA12A2E5E8B0D6B387C6D8C97CA601E569E344371379229E, 066EFD1C - 30: BBCB567960AF5D5FC6844CEB1099C7466A2348C3D39CCDD7B24BC252A6E0, 741C6439 - 31: 69F8675B3EAE6B9A07D528EA17B0D6EE39E72CE8CDF5E5ACECA5518CAC776E, CBB0A629 - 32: 1D9AECE69633357109F340B4B9ACB8B13D839938F29C7861BF6C23878331DA72, 9429CE51 - 0: , AA3B192C0052 - 1: 8A, AAE3BFB1092A - 2: AC5D, C79E8FF01BE5 - 3: 5F420C, 109E96994A91 - 4: 1A07765B, B44260A4407A - 5: F418A9C12B, C5BC4B4027D8 - 6: 16EDC4037BDA, B8EBB83C4B2B - 7: 70960E23F5FCC4, D7914D683053 - 8: 5C1808BCAF0E1F20, 03BDFBDD2E61 - 9: 959F7F80D0D21CF264, 972EC4C8A169 - 10: 43A7E93E7D90C244141A, 50EF7336DA8C - 11: BF14C64E1F1C02174105A5, A79AD808D681 - 12: 998DEEB46847323800288DC7, 19F253A58D2E - 13: CE7C24B9EEB3262ECE6DA2502E, C7878C9DBBB3 - 14: B2637FC5A71D9B359E6438AFC393, 42529173EA46 - 15: 1CC6F89E8F73BC9A5812C056707D36, 843871426F35 - 16: 1BE74CBF289A3FA20F820C0C02B0A9AD, 11D403A446A1 - 17: 056C7B49E6020CDCA9CF75C2FF85DC2A76, FA5E137274CB - 18: 21DD219E7D792120E8B7599840BB2B991C9F, 5A5EE1E3C261 - 19: 2E444B9A6D49683BC45CDC54BA6343F038A9E7, 68FB84C04102 - 20: D93EF45A7FFDF57C9243F047FEB237F9767437E2, 871B21B11AA7 - 21: 39C49AB68E6BE988DFDF0E501830E9C1A486A342E7, 13A36AD2D77F - 22: 4B14CDB09339855A52EEB071354098B0DCB993078004, 2E7014966FB1 - 23: AD5BC31F59B3F5417803FA6467370DF79D15AE248621F3, 75ADE7A15230 - 24: 1B45FB096F275C940B9055C6BCF1168A0B069D916DAA8645, 6FF80E391194 - 25: 7DCC95E1DFC0EBD513E9706A4696218F0DE18F06BFB45AB691, 19DEE69DFB46 - 26: DB1FDF0F46B91772CCA275FB1497885690B26FE67440C2983C31, F8CC2740202A - 27: 4B5541F5CE4D90493448083ED1EF6A3A8871A60AF3AB81A41D70A6, AE5BAB03F170 - 28: 828341A99E6344FDA71E1E4988FA650D40548A627E6E2CA7D165C5F9, E70D31BEE86E - 29: 3A971152DF0F0826D965B8831B99470ADAF8BC2FC7E9CB6C6E8AA21678, F964D1422115 - 30: 32A9372E048B508AF6E9387DDEAE6627E69C01496E756EA7F57EE4BAFBE0, 3675CB456E0E - 31: E8C94A6841AEAB33AED42A508049596723CED91BF3296A61A4BFC90FAA6738, 30687AAA79F6 - 32: 88F099DED8BA176B39F91D37FB5467E07E68C8FEFB212B0DD5B2A8849B20B216, EDDF0BFF7021 - 0: , 1C3918F1E7CE9C9F - 1: DE, 9F136E339704C553 - 2: FF81, C13E2C5B5B173470 - 3: F5DA16, 54310D258A18801D - 4: 575FD96A, 8C0E65CCE664BB6B - 5: 5D9DE0AE56, FC817D14BF4E21A2 - 6: 2FE73524FC7E, FF683360A26FF238 - 7: 3DFBBDB5A4D3E7, F18BAC5C2C8E8ED4 - 8: 09F93EE3AE366FC5, E0BAE862D5B73D95 - 9: 264E333FC6AD1EF054, 49D12C8B438846CE - 10: 03359980F91345052AEE, A15FFB9FD1216791 - 11: B0FF7C91C069F67D103F33, 4D9D733177AEEFF0 - 12: 5C2923E0FB381CCD0BA93F01, EABEDF1BD08E68FD - 13: 1656D3868FD87AE4E019E62CF9, E62DD744B0385911 - 14: 602DA8D8626673F56EC688114915, 3315AEB5C3787915 - 15: C4286B93C24A64DB431207B4D5DBAD, 73045C908EF39877 - 16: AA476AD9ECEF4836B369E7F4EDCF1D7C, 6E5467117005BD62 - 17: C1881F3D66DEF0CFEAC9BE30E1FE31A25D, 55FD8B6493E64DEA - 18: 7A9FCB88E2F2E9D3D668CBBA2E37C693CCF2, 29395ED943901E1A - 19: D1F5F7538ADE63F706A7C1A96DAD84124101B3, 50468F25A619A3EC - 20: 26268D49BEA06E8C750F6D13A106844BCB35AB64, EC8A7B0B3D21094C - 21: E904B72DE183C2F5B6B972497B72EB8E060A7F0CB2, 9C6507762693C7B3 - 22: D61A37899049D67EEE31CA14C202B0BAB11886BF8648, 2D4D2E23CD0AADCB - 23: 4080A705B49C2CE347F1603223E81D1B108FBE0C8E01CC, 5C2B2EE7C9A54123 - 24: 6746D61C01845E59033739FA5E349D71EFE886E05CD0400F, F34F7C23EAA94BEA - 25: A8D4D69AF6AC3CFCB5CB96A27228B5923BB701D332A80A0F6C, 69B27C8744FFD1C2 - 26: D563BDDC4DB4E82B4600DE4809084D28937C9D37AE0DFB21AEC8, 5DBE429E55A5273A - 27: D20F8C5A90E079846D73D97242393C13976B95AC4022DCED607E3A, 6A9EF6BB609E3991 - 28: D0BDBDB08C9329DA2151BC2FEC9AFE705695F910BFBC87D6B2B0F703, D3C0590B091784F7 - 29: 0D72FD9298A50263B660A80DE88AAA2D61B44FD70CB6BB6F15C3FF9129, 6A77E06C3FD71D4F - 30: AA1A87E913421B03C166326BFBA3FE3F9DF7AA4F3DA563E1E5DFC497A32E, BCB89192771CDCCF - 31: 0B4D96E644B3CF64584EA37595F2C4251FEDE57443224A4764915C0E01AB5D, D0606DB99710E587 - 32: 716046DE9809E082F0EDC3D0DB89ECF1CAD89493F8433917DA47CD08FFBA5CFC, D740A172676D929E - 0: , EAD32F8F4CBA4967BC8E - 1: EC, 3C43296A6F8ACF24D58D - 2: DC57, 075AF6F6BC6421533898 - 3: 55063D, A4F4D481ADD9F31478A1 - 4: EBC03130, 19EDDFD17C110F91040E - 5: 868A93F325, 492048BB0B77EC811368 - 6: 94BEDBF6F5D6, CAE6E658D4F0A5A97F3C - 7: A812686985912D, D3CD03538185D39C95F4 - 8: 110BA452A7AE2D6C, 5D7F2A32AF15A9444DBF - 9: 4DECFBEE1BF1C43E02, EB966E0502EABF081752 - 10: 360A8E4A9174BA35C6AB, F149ACEFC0C4B630CBC1 - 11: 79ADE0A11896050F254D28, A735E453D1C08D765385 - 12: EB2EA9C306F94E9DE2E72CB6, 9795CB6C92D24D10F393 - 13: D251C237FBDCE53609E875448E, 4109F7EF09F2F7AAD040 - 14: 5ACF954D5EB87F328B40B5B2DEAD, 1232FF6451148FBE2FAF - 15: A6E23EF3AB856DC510AE34BCC508F8, 78E640F349A09DDC16F8 - 16: A40955483AB28A53CDEAD6BA9C69FD3D, D49635F45DEA6D7D1EA4 - 17: BD99CDD113643AA7AF70770FE997EE333B, 3A40F47AB078DD99026F - 18: BDA500A65DC9C67B0FE78E5C53E1AE9016B3, A973267795A9258801C6 - 19: AE57BE7E3BBEA9E169D7192CDCE056D1F39E37, 7319DDAE58123D9A4950 - 20: 01C49ED3836F74B56ACF78FE41AE5C4A8817DA7B, B4E76D7CEBE7E9107D9F - 21: 1091D4E732AA91383CAFBF6D967AA69BDFCCDCAF88, 8DCDF8DC68EBE9069194 - 22: 585A2C1BD7E7F50C0C4FC6A4C7255678F40F08ECC2F5, 03B0C88E406C9C34596F - 23: 2F0FBD383EE5B26BF86F9A3308605C54ED4C66D1508588, 7CB5C10D865A1D7DF437 - 24: 65A51B2A1A59D1E4D8DACD1692E9DF3DE9D8D1ADBE6B9724, 81C7A543C405141D9537 - 25: 7438FBF4CEE97C7876AF0621D4347BAC8EA9406CFDDE3E255A, CB42321A565D7018165B - 26: 9B3716303B3F63F77D0B4679E0B159902F5AAE40F27EBF6D8634, 462D5F7085B865D05F89 - 27: 8AD7EEE9348B6F88EC1D6A1D91C9EAAEA4B4DC99B6C9EC2CC6372E, 0B45E11D5284189F6831 - 28: 3F9E4615AFD10BF981415E680875C953711D81471B9EAEED8D5F505B, 95C300BA2D7038BD6F25 - 29: A98FF19FF1BEAD9E147F8B48146ADC1983930EBFD45E7D57AA415A49E5, 19F3EE8612EEA4BC88EB - 30: B04304DFB2DA89C748A257843E1AE74C98AA41601D25250B7313DFD06F7F, 7ADB2DAB0D62979C5503 - 31: 289320C9E055A89A1C4079EE7DD1E102926ADEF3AFA3F91F1AEB7A2AE386A7, EBFDEB728CF50E9E9C2B - 32: D5B6B9C0BA2F3412F8EFF14B21ED3E2D51043C21367FEDC81706BD3BB7662953, 00D557B173D557125FB9 - 0: , D0F2F2BC073FCC725958BE0E - 1: DA, 81B9EA800093C60E47AEC9E6 - 2: B41D, BF4560430A065FCFBAC007EE - 3: 83BA57, CAB83116902A650EAACB4C3F - 4: 2B936C2A, F49CF26424032F0BAF05C360 - 5: 57EFAC9554, 5E824877F537CCB3A364B3D0 - 6: 73126A5595FE, DB36D113C79E5664E452B111 - 7: C9F4EF5DAADE76, 3AEFDF3E71CE22B6050C4FDB - 8: 78BEFBFFA3CA0C8C, F12073DA18C17E46669CD892 - 9: 0E52FE6F6C7E11B1F5, E78513345EF5B86FDCBA5A28 - 10: 3D0FE0B6A04D4B8C9844, 7CF0BE81A36982AA9C390972 - 11: B0E019A0B461A31A650071, 0D1159D5D9BE733509DB001E - 12: 00E5FFD64C759D317EB1B183, CB586B5C1B77DB3AD0E5DCF0 - 13: D0FE4C217C4A2AACE19B1C6BD2, 37ECFF2C85BA65B02B009CAA - 14: 656D17E1C3406B17C4832AC1CAEC, F387DFFEBE0FD141E38633BB - 15: 906881590E36108AF84E1436E45357, ED26B82C05FA241A77C5F900 - 16: 8D8C8A319085F97C4427F7E58C30E8FB, BDA6B029B6620AD8554EF9C6 - 17: 91A592DB97A71F034F6A9AB52FD9190847, 7717B205CACDC4F74B6AF582 - 18: 5415E16E70E261F2C9CAEBE5600830279E8F, 76BCE0EE3C0BEFA8F271D677 - 19: 741A64A881566B4A472A4B91D6783AD053CF66, AB3781F9BB91FE1929DB46F6 - 20: 3C843C0D6D09048A2239C29509125A1F128CA28D, 66250B10FA6C2933051502F3 - 21: 48BD6D55DD5AA7C5A1B93950338F9CBE6C4DF3CC5F, 9719D68228052FC001B8153D - 22: F2541B39723689A1E24FA5B006026CF2804D91C90B7F, 3F3FEBB1B0CC36412F4A1697 - 23: 8A7FB3450B9548805D97651C0FA42028F392DC025209FF, F76678357F67DD833B89A5A8 - 24: 3AA2D06856EDA6A41D7A46821167C4958CC9C57F7D696840, DA8180FEF3C1ACD46AE74507 - 25: E7F1AAEA558747D320D692BBF7AEBAA05220C27D0E18CA986F, 753DF5A8147962E37C33C4BA - 26: 461E21F7961C6D8827C60A11496A16BACAC277339729D4A16690, F1922C5FC8E11635511C6FCD - 27: DA6C2B8A91FC526591AEBF1526865F4FCB4459CE306A10C4E393FA, 8CE4E5AB15046D5C2C13F8EE - 28: 8BBD88989E7BF74B9A7AC48B28EBF0B5E122195B9C5633F434DDF319, 2812C519C9553AAEE1F47E8C - 29: A3307005CEE1F08DEC525F2A87456CCFAB96A0CC63EC186D20D96E4085, 903338C4C184C25BECBE9D84 - 30: 2B97E36A9F3F1B46C37BA26395B291F1B6B74225D3117B5F51FCF4932DDD, 34C50E615F75D5DA69E261A4 - 31: E3EE9A1C045C6D938D3C6C9214927B5D2D79B7C11097F4302CCE77C1B6B591, 70E29154C3F9D4CD7BD7E6E2 - 32: EF3E97FD72E11EC0A31250BD0084C036D9E50753F7EE30A3115263880692F0A6, C8389A297EA8D391962BDF94 - 0: , 5B5D57DC41BCE103CA762F851B56 - 1: C1, E67F5AE4118A7DDF1E1506FED4FB - 2: 5809, BE34DEDB5D8B1BE92350FA65B2EB - 3: 3ED7E6, 0429285CFBDBDF327FF0315FD506 - 4: BA361559, 4C9F4E985DDFC76F03DC81A2331D - 5: CF3B2A3CE1, 6D41AF1F0E1E9534B76D05191DFA - 6: 48CD6BC6381E, 87C79C99EC061B559755490E3D32 - 7: B37FEBEA8463FE, A6CEA3969BA37E4AD50C0E28C0A7 - 8: 1454885A49DCB5C7, 0DA7BB07F9C5A374659AF845211B - 9: 819F2D83BD17B16F36, 22FE52ACE664CAE3A784D6595A1E - 10: A3DC24359E24E50852D8, F8282E3FAA5CCE1639C7A14FE3B6 - 11: 61A117E5A581408F9DE39F, EAAF2DF0A86384C98463B188505A - 12: 13A8A2F9C4F1E096C3A13FC3, B7245C5645BC8F395D3C93535135 - 13: C7547E3AE6642DA35AB5875CA2, 458AACE413E49E70B311D8E1152D - 14: C458AC23C63A719DE99573F7F59C, 865A888C5427D9403D72C281DBF4 - 15: B2926DF5D57ADBD7A03B87E13C8C6D, E240F1738E9897478F340EA46FDE - 16: E756C03AC1FE168C70550F360CD97274, 37D2AEEF79FAA273F2CC7BBADDE0 - 17: 69C656D70A3D17551125203C11F45C101F, 0BA060F804895FAC8F989F4409D1 - 18: 855A790B65800CDDF3BF414DA05141945ADE, EEE3432C6A2A64FA40659BC4EB42 - 19: B671760A0E540D889E63189D43F7B72E84276A, 9036DAAE50961631DF433784CEC5 - 20: 62BC88ADBE73D61284E475DE07689E8EC9BA26E6, 3E9060225E71162D4D0AF6457E61 - 21: AAA9F68B8B536DB2B3739DF6F798CA00A82AED7ECC, 9FEDD29513FB5138E7B61CBDCB79 - 22: 4EFA272A231C62B498E364079ECD1A0DBB26CFBC0E4E, 1366BA10E15B173500ACD420343B - 23: A9ED5F071CC28E83A4929C1D34AB715E3649CFA27B6095, 2570B705BBF55C2A8F41545DA74F - 24: C562779CE046F4AF1CAF6C84554724D60CE161A099E73F9B, 47042018DAE83AEE1FE359BB4440 - 25: 035FB86B9DDD83A1A3A3383ECF8D51002718CD5FA38651F888, EAE82A37571419FAAD59F45422CB - 26: 490CFB63D9BDD8CE9CE4F7C0C7C4E5A02C48E43C0B4CFE163304, D865FB6EC018B0036C79436C58C9 - 27: 5A61A7F1EA1511B521FD3780F7C57112C75190583D38FF7AC20F29, 5EF8AC99E376B0225F8D0F6076E2 - 28: B83B12C6FBFD8B88F7117B43259E7281D0A991D4E038DC8F221ECD93, 3E2E75182F758E3FD7AC3A8F94E4 - 29: EFEDBC7616EFAE0C944697794F94B3E48E4BB7520DE861D0F6F00230D5, F293638E1DA384B665FE1F4AC3D6 - 30: C02ED0EC63626CABA1E7609045630F845B687FABC7D3201879CAE7BAFDBD, 53F810DD4BCE206169ABC38295C4 - 31: 8112A542C6A47794EBA84EDA6F44818B4A92A071232B98EA0DD0290E47695B, 7BA9FB110C20CC8B70956E8A600E - 32: 063BBB055172A30765670C4F38DBCE6B84626B0FCCDD2797EF4C59B315BD94CA, F219A53CFD4007CE2CB9F62B9AC4 - 0: , 5412AA86D981937695C6766986FD122E - 1: C1, 86B03C08E46063AB4307B4086AB22A2B - 2: F6F5, C999C720F98DC2AC43F0D3C2BAA4E195 - 3: 451EAB, EC9271D22A466FD5ED4096FD6BC2D913 - 4: 5D99F1A1, C38801BFF6549AF85A99928713763CFC - 5: B2CAD49972, FAA5A55FFC130523B1880114AB661CB4 - 6: 3670E006526D, CB340EF229BFF51141A86F6D79C52F3B - 7: F3E6E0D82000F8, 34910B802C23353F5AB04506770CB4A3 - 8: 6ADB7848C495B851, C8091BA072F2E3BA6A029A108FDDCE0B - 9: 10FABF1EF458488EC6, A5B01CBFFAEBEFFB2E7C3BF98BC2DAC0 - 10: CB380EB291EE9E4370AA, 248487862542096F2A98DBF7FB750A19 - 11: B3CD421FEBCD6DA134E2D1, EDAD0965064A5E142D0E7645C15031E7 - 12: 41B311574779534A2494D9A1, 3362D564A44B1B6C25B3F67AC943A27B - 13: 16948860E0B85B369924B1256A, BFD3BD2AEDCCD1B6CD68D87AF0216148 - 14: C3B7CF45B841DCE156B042171F2D, E2C9484E0F413611084A8ABF34797285 - 15: 59650C4A5CA34DFB7BC2D8A925C69A, 942AD107B993675C69E023D1B84F0B7F - 16: C0D18DFCE934448776B619A6FC8335BE, 23A02E065C5C86296FB479A8EF25D047 - 17: 5AF8CE374F869188653F9BBE99C21B0E15, D6F42172B8BE10DB29DBDC65690611D2 - 18: 363A7D74C351BF9EC35884A779EF2B5FB06B, 1C927B538F95C456F107BF8FEDFF4198 - 19: 0F816CB2E885B530474F5A02B1506A0C274A20, 9BECF35602781592FCCBBBFAA7CE8C44 - 20: 386D5348F80D0C96C2ADD059664A4FC338A1BC65, D8D0447AA6D03A99BFF57230F73FB543 - 21: B85FE3C440EBB242B75DD93F4AE560D97AC7C0EA4E, EB45D5226A75F609818E2303D3746435 - 22: E3DF3F3C8DC4516876C2B42880BCDE0D14E21E13A295, F31244A4254D8620D6C569EF1E5B01FA - 23: DD29198D03A4918F23EECF2F203B6DD51C47E4433C2644, 91FBDDD4D42A095BB4A421A091962FC1 - 24: C58FCE5E489B5F4872CBE0ED3D210B3661F0ED68856E77F8, 21A825790DD5784E8F53FD1AA73B9C20 - 25: 8AD7DEAA88B7647595835194B2268210F074C3415D93695C20, 893A66D2369DB6D392421963B12DDA70 - 26: D558DABB001ED12A109349A6F8128A040103A529336F711ED445, 48EAE16B3E49BCA92D021FC637CBE581 - 27: 22D23A83C8B58CB53AC7C4656126F3A44AC64CFDC773E24F6BB8CB, 795010BA51DB70C7FA2A0B6B7AF8A6D1 - 28: E89A342256564085FAC6BC01FEE91288772A9FC2D6C8556174290DE2, AC7CBD1314D4ABDA1406226EEBA8E3F1 - 29: 093E582359E0DD8AC4483FA38D446F5B71BE737F3C392359D65EBA82F9, DD9D164B11EBF9A241EBE5BC15AAB4C0 - 30: 55E9E83AB198332BF025F100959666FDF335903B70CAB37DB319F1E2CA7A, 3F3D68D3015BF842EECB30A62B49A8CB - 31: 0F025378AAE106BE77A4DF7ECD0B7CAF0706F7B8F2E2FE4583C8801E7BBF1D, 07F39C1C4E8890CBE0BC9E26C91517F8 - 32: 4F5D08587AD49FC384E73174B8F3944B1EA6D1E02EEFE5BAC9F555A694AD552B, 0B611CCAA8560175B1C76CA851658193 - -CCM-rc6 (16 byte key) - 0: , 2AC15B07 - 1: 9A, 117D6F51 - 2: FCC5, 528F6ACC - 3: 39D986, 1ECCFF51 - 4: 5902E3A8, 872FF339 - 5: B75B2172A7, 2ACCE66F - 6: 048ACB323572, 43197E70 - 7: 05F53E9DA890CF, 946E1C8B - 8: 85B599B8DDAD1915, 336D2C36 - 9: D9B1119B37F557ABAC, 09F569AE - 10: E7797C8F56316429055B, 6ED0160A - 11: A6E98C31E1B493F8A10FB4, AD0F2E22 - 12: 3B7D04BD3644FE392FC04774, 709DDFC5 - 13: 280504103A0A7813B4905D2F9D, D7EEC494 - 14: BA39E2607612773F395EDE645163, DFDBE22B - 15: B282745E18BBE20BA1F54534B85F10, C6DD717A - 16: 0277908E7D7ECDEA4055200E14D8EF6E, C0768064 - 17: 758ED2F0F6FA6B8D7ADDB86947DA82DD46, 2E4D41AA - 18: D2C03A45E3E5E5BF9AC0A753D5370ED96A07, 89CA1D11 - 19: 462139B67A7ABC7C4E92D5FE5E342328CDE18E, 932A7109 - 20: 9CECCF4965CD742599CD09B1CC8079AEDB8DBA38, 34CDB56E - 21: 01C69E4EEF515A3F23A13E3142FD859280250EF10D, 3A426800 - 22: C0C388089A5FD536C6540BA5A7C1C57757C7E39C1331, 7BC8FEEC - 23: 2F52669097592B754699DE61EF33BFE0EF2C13294B9357, 205B0ABF - 24: 0141B0FB9A477E45DEA773538C2295144F4246C015C5418F, 2F01E406 - 25: B4085961D577DF3ED61AF1822324C3ECCACDC38000BC825BD1, BAB48898 - 26: CC08119C18D29699FCF966C4BE1E4ACC596273145FA07E84E7BE, 96BA1F61 - 27: B837CA6FF2DB9AF940DA0BA22A47B83B7FD1606BC2EFDC146D578B, 3AA9AF23 - 28: E52C03F64553657BAF481EE52B4C3D1586A3FB4B904D212334D0C0D0, 69BF644C - 29: 698F9CBC25A6D0CD2D6E31A09AF546B8B090EA04AF329E71FBF5E1DA11, 21AD3584 - 30: 49066BBB33E74F8D6E465BC61A3B9B64C56F8FA246EE0290F0D0FBAEDCBC, E7561988 - 31: 2177F24C7045B83CA0D35607FD6C732EC6616855AC19E2AACD74824A28234C, C93D04F6 - 32: 2B6DE3B94B865A16F6CD7467C0516979A52968427AE2C48FBB1F1FBE7BD61B36, F3C45753 - 0: , CE4D7AFE3EFE - 1: 02, F1F105283E1D - 2: 6167, 546F24FA2BB3 - 3: DAD2CF, 1130308024D8 - 4: 0F2A0A0D, 1BB12C86877C - 5: 8763C47502, A67F7477896C - 6: 70F569275D77, 842F6068575E - 7: 505775979EF3C3, 03769CF9B60D - 8: 5D6012BE7EDE36BF, 6AC9B259A389 - 9: C9EFFD760A86B25EC4, 17789549E659 - 10: 90CF911AF560B8031BDA, F617DEB6702C - 11: 9C44CCDCDFF6335D281CBD, C4C716E2F450 - 12: ED36D9AD86741340B102F824, DFA8DF5BE3C0 - 13: 4800E712F3E88A2B2936F85AC7, 9E06C3F393EF - 14: D5526C2199A7E6299004E00B2ED0, 20A3B4A6E4B0 - 15: D8F38F902B0552CE29D9B67D52BDEA, 4462B2C48CF8 - 16: A7689BF8F81B5801B2EACEE513A99CDC, 5B5CABBAE50B - 17: DAEFB39EE856B41F8EAD796AC7F2FF74E1, 9A984F5F08DE - 18: 1E4AA89D8A462064ABA35DB5060239B40E25, 781423607438 - 19: 920A28FC615F54AEC881DCD4B61E650915229B, 96AD08358509 - 20: D56D2D03A3E25794ABEF3B5611A48621EF6BEE25, 117BD847D969 - 21: A1601B3896E05049BBD3A05BFFACF5AC255E7791E0, BBBD64A4C5C4 - 22: 8055E029EC845D262957407E2AE6EB3276A56359708B, 9D4CFBA49AD8 - 23: B90D39D0843B0E2A4CADDE13BE4D88D50CDA8F65B2B1BF, 2011F57B9150 - 24: B68C53CED1481051A9C7BD9F09CF8FD25BE1056FDBF859FE, 68FE4ECFAD9E - 25: 27A4AC0FD648742A9B6991B210667B1D3611DF6D3C363F29F2, AA78F2A88E42 - 26: 2ADD38EAC919BAC0E60C997C05875409B08A39649DDD49051F1B, 095682103565 - 27: 04242036AA1C6A3ED63F8D79D770603A5C9EA8DC9941273AF06A29, 4D458819905C - 28: 288859F18EA23DE1DC1AB1BE4799F113656A54076F7F963946FA83EF, AF2155AEE82C - 29: 3BA273DF24C1F6D2E702D7176ABA0397172EEEC4CCD78FC87E54CC046D, 3C6D3A5AA5AF - 30: 3BC45ACFD333F9D7C353CAF3CC7B870FDD992C0910E953C1F872FA11F24E, DC050410A73D - 31: 33F233B1D92E9490CB0B21D13D1F75D76840172F23EED9FAE63381BE7544F8, D28A73A54720 - 32: 5A58EFCF8D1BD7AD553E6A4A01A67AF31E3F87DF0EEEFF4896AFA575A1D98D26, 4AFD7541D717 - 0: , 8FA763DAC25B3B06 - 1: 53, AAEF02B3D4C6DDAB - 2: EE75, 5E74386665BDDA67 - 3: C04D59, 037E53F132AA034D - 4: F1590D8D, 5AB26B74BFE7D2E0 - 5: CD281540A6, 7AFC804EE69BCA76 - 6: 65C8ED086605, DA8204504D052D28 - 7: 591A1E80791D64, 82CDFB4FB39A0956 - 8: CA1DCE2B3FBDD97A, 7557EFF63A931D27 - 9: 0352179240E83AD28A, 1B067DA0F524F0A5 - 10: A1050994F4A13CC30866, BF401CC7056B59C7 - 11: C92A7FFF4F33DDEE0416F3, E704A373F68760DF - 12: 37E34B072437097FC50C0F8D, 018F3FAB489E57A9 - 13: C033E06186484D8A02CC88F087, EE545AD30BDBF6ED - 14: B53C492339CE3F4BE9CB803D386D, 75845E3694AD2682 - 15: 90D2088932C89D88A2598F17E71C8E, FAEC2E21734587AD - 16: EE953A0E28D3D12CE2AFE449B444BF6F, 209BF94503087088 - 17: 950C44CBE476C256158F4803D55E58DA7B, D645441922F48DED - 18: 7192725798796AEAC878ECC26284D83EC447, DDE8EB0BE3019B6C - 19: 0B34ECEFFA86FABF9AF30F39B0FC252BEFB9C8, 75B5BDC752ADBE33 - 20: 20A4EA9B155434D046EBB6DDA8277B6C78F88D08, 17CBD447A37F8C28 - 21: 43AA444A6BC41B6DF7C72D71568A273FC08AB7133A, 5DB2D4390A0D1FA0 - 22: 4DD847C2938B7C360E74FCD93F9551BBA831430F7DDE, 242E316F84FC8521 - 23: DCCA96D3DF29B5E2BA2D92EA12B70215C420C793A792FF, 033A343427DB1B7B - 24: A24F161C9A67B14638406427719A26576CA16416FEB78D3D, BF631572B3DB3D28 - 25: B0F88DE2111BF43C2F3617A1499B1BCBDBF9DCAC97574AF3FF, AD0F500C774A2700 - 26: FA9654C9F912B5C5AD8E038431B99D4F9ADF575E54A3CFBE8979, C4F630EAAFE65C71 - 27: EE5C33725CC9E6472D64522468EAE05F01400E605738E064E3EF41, 31D6E2EA9EC9D754 - 28: 45F0DD98A531BBA5706CB6A479EF93F35C04A79D115BEBCE5B8A65EB, DD0A88A3C09C9717 - 29: 81A4CA4266067E6C631B806913C357F937A5F5371D96094A60C4EA24A6, 10FA24FCD616B536 - 30: 8E19CB39E4CF0D33549D32DFE876975DC585C76AB8D9CA1E92C8DD75DAFA, D7C04F38F2E03475 - 31: 17BCF5573D41F8F9994CC07FFE97837DD4454AD0E6B9011109B650A7D971C7, A855EE2887496C0B - 32: F79AF29A2EC6B30F42B0BCE624620496FC93A7FBBBBD8AE129BF9BC38257CE80, 19237B1A113A73AA - 0: , 0715E785C8D6BC3806A2 - 1: 72, 4227E9259270C00CB506 - 2: F862, 8549B7CF576EEACA2570 - 3: 482DB0, A10EAFB19F861E52439B - 4: 9AB0A0E7, 70E7646C908DC585C804 - 5: 7B3F8C512E, DDAE04DFAE150412F4FB - 6: 488464064CE2, D94E445F3D74B598679E - 7: 5EAA6EDE1B3BF3, 5F974586F35C4BBC07AB - 8: BC6C81B8B12CE952, 1FCB689FA9412C0F800F - 9: 239B2C5BA1476F45B4, A9FD4009E96A6320708B - 10: 37104BC5BDCF76064AED, 2B42C1124923E0D290DC - 11: BFC3AFC6CD543A8CE91AF7, 99D287CD686A51192E04 - 12: A112CF48507E1BC7700ED380, 3DE933A4A008153B5C58 - 13: 7BD08CE76C83312764749F3285, 042D515059A592AFF02A - 14: 03F75524A28D8F8999D17CD18563, D6D1C8BA55D5475F9BA9 - 15: 645476C05E704E7BE6C03FFEDE4798, 980944B13F006E1E2E18 - 16: 43B1EB124122EF852924FC571E7D6545, 85572447AAEFC3A95018 - 17: BB1E0F2CB9A3590533136FD9940241C618, 204E1F4C4E0C3E7AFF90 - 18: 5B6D88051273E022BEBDAE0B678088BA310D, 6E66A551A55300B5DB66 - 19: DFFD46551E451EB4C938CC69B9336DCE87395B, 55DA2F6E354594205162 - 20: 7B3D693F6D75C132E40C6D62E20DA12833164E9B, B7ACD3643CD0E07D6B19 - 21: 9A9674A8FAFE44FAC1502E9B4EF222C8C77C403D0D, 9FDDBC0194D7411E2911 - 22: 408E64B091B09D4BD135E42E17B4173965F3A630D601, 1E24ED47B69B9957274F - 23: 8A071BA246B5E1D375F2CDA3D4B8111E995A8D810AF4B3, 3A67720816FD31DFEBC3 - 24: CDBBB99E7E9089A0BB55799C65C304064CF227D0BE60FE6F, 6D0FAEE739B7BB425387 - 25: DAC855B92C15605F066CA439A2BE4E60B7132645DBE288116F, 15742E742F417A2B914C - 26: D1D587683D2F32BF228BE78777596D9B6F9640464A3DF2DA02C7, FB10AD32707B042157C4 - 27: D7F988B56A28F3C43D1852409DC76663AEF07362C506D7EE191276, ED4DB7A72802132FA912 - 28: D4E326A840AF64FFF2913CFDDDCE528BA17A83995889DD4693723EF4, 6629ECFEFEDBBA74BA33 - 29: 6924FB628B09F5DFDB11392E86E7DA90AE87108EB845DFEF60452DDF92, 3A88B5A291AFE0B8C84F - 30: 81D2E156198F75B6772E6BE8A39372611ADFDDFC0B329C6F941D81664F95, 94B926E032D438E5CE84 - 31: B825685931992E1F328925F46B3101F997D8EAB2A066E15E612182CC866B48, 99F2BD6CC0F1977F29C6 - 32: 499173BA9103D4F297EA67C8F793394CBF83C6DEBF082BF1F85779A4D937D7B3, 1B47ED9C6E9820D1BE7A - 0: , 12F6B96EC52996AAC32EB6D2 - 1: 94, 071704020D6D6C7528E0D8A8 - 2: 57EC, 9AF14A5A18FE236BCB4FDFC0 - 3: 0CE930, 099FE22F84E9BBFD1EBA951D - 4: D9E36D00, BFA67AD6AF4554A44D5ABA2E - 5: 860B484E15, 572E7173A88EF0D34F9E2227 - 6: A14D294C0139, A484BEC553D49CE88F8308D4 - 7: B2AA317B4E24F1, 8311DEE5E626747E786C1810 - 8: A151EE1930E02D3F, 4EC32B00DFC892841663A818 - 9: DF88547755849E5996, DC74C701F77713D6C0F1D92E - 10: 54810886C067E4B8E881, 966253C8D0C816FA8AE8B60B - 11: 58DD6C9B89C33235EF4494, DA8366F6667C3E40270787BB - 12: BA0C2976FB909B5707C94224, 83C4C1302714F57E188A8BC0 - 13: 9FDCF011C9FDB4ABDC24E8493A, B1CFC21585E818982B85B556 - 14: A7E9A39C88156773487BDF944225, 4D2FFF7FE566B3EEF62B0D80 - 15: 62F7A29B9EFA30FB2832ED8788FF45, CB21E31C1D8A9EDE227C63C1 - 16: 4876988B239D2736615C56A912D21BAA, 13F27C2B9C9C2B3D8BEE3C71 - 17: 205CDDFF23A636E2E5F7A42353D50A26F4, CAFB46C7B645483BDCB280FB - 18: 5946C09825BBB8997DDD7EFC20026BBB8956, 35F090D0BEB24E75A93E67DB - 19: D7C73EFB84883DF921F79AC5F47BE924F2D10A, 3C2DC108808B1B46BD2F831E - 20: A1C54D12645622B203E5709B0F125BFE2A26A52D, 3F24AB35EDFE03FB5C8D9E7A - 21: F1AE6FE3EDF90DB6AB775D031A98AC11F02C357FE1, D4901168387BE1A7B0500BAC - 22: C5CF34698F35F1A45BED3F7038A2262099C1155B0D35, 1C3D501075F89B9BE2BC7F26 - 23: 1DFD8A461969763A3D26DEE7B617553F732F8A92426E1E, 4B160FFD2114E8E225F586C7 - 24: 6F3F3802576F4928EF6FAA7166358938FA0AC72F0F9804B8, 35F42CC28567A336E630966A - 25: D13AEEAB3BE84EDF573621E4A869B6178BDE265B395D1056B7, 6DB4C43788952878F64731DE - 26: CF37A2F7A2DFF2E65E92B46D1BCB461596A640977C45F7C68C0C, 95CAC746724522C9B8A6D137 - 27: AEB57DDCF6C25C8F0FD6EA4865637329A1E8A6807BF49E1B956AE4, 0E006CFD9565CC8E54AA36EF - 28: C270E0DCDB9A9659606F6ABC659D0A3783F16989F6AF64C4386C10E8, 3746777E53610DDCB5D5C5A8 - 29: 1FD59916A39F52CAFBE94239221AAD119A43245774AE1C975248012A5C, 8E47C840EEB1BB06C8DFCB69 - 30: E9D3B5128D1D812A79677FBCCA2DF24740C67B9B878229F5DE1998F84593, 585D24970E294EBBBACC9838 - 31: B39364EEB652A4AF3DBE2E0A6A63C1C80E13BAE8500ACF18F7E12E739D3C57, F65B00661234A406F253ECF7 - 32: 1F4AC304A7ABCE08551D303661172C5D010A81F3862FA3313C9BBCD39A60C790, D3AB903B9C89F1872F4E867D - 0: , 2CE2656CCE279F8E7E9CFE33D282 - 1: 54, 82A520C2688B4F12C618F2794128 - 2: 2BEF, 3C64AC3CAA05FBD2BDD333DA873D - 3: 9CBDD6, AB2A2A910F471FB866FF0DC6D8EA - 4: 68D5F97B, 11EB8341D3376B1E737F1CC1BF34 - 5: 0C1751580C, 1B58E8B0B33A1784A8165EA01719 - 6: 408DD590D479, C202C3B59837861EB381920890C2 - 7: 5C8A3BC4869258, F623D713972A049F3FE1C9D482CF - 8: BD897313BDE7F75A, 5BDA1422E7A1CB53727F100D6715 - 9: 7108BFDF9B536DB33C, B94502DE874B73ABEFB6CA395F90 - 10: 72B07BCED832D73B5EED, F42FA7E24262CE0C9E28AE3CF052 - 11: E7056BB7D2732099B804B5, 75F7E8407E2EBAFA95402F5760F4 - 12: 20798710BC3A70265AC1C903, E8150F77B0E12063734C1DEF557B - 13: 6279511A659F6654FD4AA920EF, B24041DDAA03047F45669544CAB0 - 14: C118810B9530AECF24A9D1CE3756, A0D37D4B827B541B121059B11D35 - 15: 66D39C0EE32549EADFE335BB85A827, 3C277343D44C3D94D5D846C70086 - 16: 869595EB854FE5F9BF31F1906FADCE5C, C05448F0A0607A4C1A351E26E7AC - 17: 358CC58D6F0B28197E527C691FE9C54D8C, 39D3EE85AACC9EB06535B2763873 - 18: 60DAB666E3FB15D2898A55C9E3DCAFBCD35F, 3A6D538C3FB4A929018DE6AA8C05 - 19: 36B28E4D31AB83C77A0A07699392B4D24C88BC, D3D936B041D5E96CF6650C049A78 - 20: 2412953F146E5DD317D261BD0DCC8A5E2509BEA3, D34A60956ABA9C545B2CB059A315 - 21: 74A6412F88133B78D291894A1AF9EB9D7E0B3F429C, 9CFF7E85636863B2A6737296F100 - 22: BD64D55A8182A95479B9B4CFB8DC8A8DB3088595DEA8, 4608FCCA1ACD8C98C651D7A5AA2F - 23: E679FAEFA18068DCF3F898B6B063ADF49AC96DAE12754F, BD7043E630A8BE3436DEE53DF6CC - 24: 80020B1983332C74CC5DCD02260E0DDFA30F52B1DE1173D8, 0D785613C5E864DCF746F652CAB1 - 25: 008B624FD286E84CC6D1BC9284E56DA7A87D64E58325AB1185, 808E06376F88841D758AA8595E1B - 26: BB004B3963E964C087B114EF2C07382AB5DDC5A316570DFFB4A2, 61B189CB91F58FDC705191A08B19 - 27: 375850D29B8EE4CD88C9C8EC02A6F1A01E1990FA2DB414826DD175, 6FFEEC57C6B76C3AE9CB1D81F001 - 28: 07803F11E53F392182D169A2B96A082330B95F106FC2A408D4A900C3, 77A88A220F821362A24BD2B5B799 - 29: 1F5EE6524B08FAF63F4D042CE57492C7BA8AA428D6F06C948203737629, 5AB011D2F7FDE30CF51DF2B3F6FB - 30: 5E20938616A6353AB70EF80BEABB90C669ACB087043A459344634B28ABEE, 77317E5E3922845C36842DCEB812 - 31: 8E296FA52B21D2B1B49DAF4119AA49B648D87B98D3DB00562622D20D1DA0A1, 833102BDE1603134777D5148B855 - 32: 99562873CACB1F2157902B90A47121CC1F42DD677C9EDD3722862C31D7FC855A, 5DA68FF9DA1FBF3061304C2D6D83 - 0: , 3CEAA2F5E33CB7603FA75DECF8276C19 - 1: FC, 98D0984589D5A77CA29060B9E25607F5 - 2: D98B, 954914991DECF3D6A0C53BBF35431533 - 3: 820D44, 0A7B58B7242B1EA2BE6D43BDCE1C491F - 4: 73E7A047, 8A5E7DE8A01C2C27542F3B48027106A8 - 5: 57DD8E1929, 6DC846FD1F8F66B990689C0FF64544E2 - 6: DE039DFF77AF, 112BB292B86A6673F9B64F32CD64812A - 7: 2C7E805F05C5D4, D3EB83BB0E05BE18FECB64E914A08770 - 8: D7381DB6AA795743, 74774A98DED74F6EB4FBBF5E8B73A903 - 9: 3710BE328C40852062, BA8B2579AEC699463FB4FD752724AE12 - 10: 487FCFDE55F007AEA5D5, C53CAE529AD12190DFE39EEC108C9B50 - 11: 5C486D6E6A396845E2B19B, 87177290E60FDA03DBBEB6540A07FD48 - 12: 7EF37C0CBE831050D61E5AFA, 97F4DFADBE66BA3E0E5FAE1B8AD79D1B - 13: 76638A585AB50073C594BA95DD, CF7E7532D7B58844844F939B702FB3BF - 14: CEEB0DE29A38ACB5F64C1F08AB7B, 57ECF747C4E782644EAF85DF0FB15103 - 15: D236DF4143D14980108F77CE211577, 42C9C39B65B6617F9E3CCF85962E917E - 16: 9B6CF84BC0F3D7B9F76DEE377A97687E, F1CCF9F5CABC56E3F4FE0B4B9C2897A4 - 17: AD415301705F0AB79BAC596F03E0ACE2F6, E1C0AC0B4C5C38720C7FE877872AB706 - 18: 7C247E5D1CAB59E0770670EC8E28AE535BDA, C722E1A1FF73367DB8C5E134FB712803 - 19: 163920A15C41B2E6EFA567A65F557AB8219558, 485F428EDDEC91A1CFDC3A7A58F53F54 - 20: 7BF2F74C0C47BBF1F34DB5B67F502E06CBE3E117, 5A77BB8FE55568E768CD6CFE77BF18A1 - 21: E6DC4539A91E3741700DF2D26A5AD97F4716D084FF, 7211E786260969C84A5F6F24EA9B8D88 - 22: DD3CD2F2D4D4E3CCDA6F51B25D89F842D2A3385B387A, ED6527E0C33DA6CFCA44CADE00577A6A - 23: 450C393355341A4368912DA90275744C65DCFD4492BDF7, 7132386DCFADE5B2D9E188B125537F90 - 24: 3F1347CF92702DD37BE5ADB983B2B955A858761838407B09, 4ED7661A7A9431761D389E869E990EE4 - 25: 76D431BECAA61217EE9563E0B8D389CC92779B87736C9C64E9, 5740E559E3AA039EBBD9FC8E84D2AAF2 - 26: 6771A9D37EC54F160314AFACF9AA7CE8721812F680A1876CCF02, 237570DCF3CCB89C204C77DE62F43375 - 27: A76D5DC59890A7EA00BB17258EDEB7A1BCF2D3B4F1E7568AD5BED2, 6C828F886C8FC5D8809459B8287C26FA - 28: D67F293A90D852D5B0634A5CB696DAF63D8B11C293FC3FBB24DA61E3, 3BD68D9977005523624A6D91BB1E0CE8 - 29: D590E811A7C38323BA5FC4B385BEA76A372237B903E43D9CC790A6867D, B6A6CD3A09C5137E08EE40DDEE8EA889 - 30: 6308B8AD3E7A6388F30A3A923C249CE01E92F998E42E7AC518D786FD25EB, 898E44ABCC899A7127479FE3C5D83CA2 - 31: C3399FC30B84B6EDEEBDDC025BDB1FC9C44D2A5876C4F2A22E5A4DD7755563, 5DD009117463690A6181BFE67EA4EA7E - 32: 096174D70489920C4C02B173602219494B24D78D7E76B506A7EDDCEE381F20B7, DD69A234A427E5F7BFDEAB0F3ABC8EE0 - -CCM-safer+ (16 byte key) - 0: , 96FA877F - 1: 67, ADBF9009 - 2: BB16, 659E4D5D - 3: FF9A9F, 9D990202 - 4: 8FE9D3D9, 14132901 - 5: 3892CD0350, 6956A5F0 - 6: 7F8AE3E048A7, 4AEDC2DB - 7: F419D29E948054, 8D0E500F - 8: F04413E63FF1D551, D56996E6 - 9: 8D5921C6FCDC5AECA7, 0F7CD483 - 10: 5D9704C911EC619DA432, 7EF3A054 - 11: CABDE9C2C89F4D5EE22EBA, FB1A17D5 - 12: FEBDCD2004ADA91F7A84AB27, 2338498D - 13: 9B7DAD32541C1875AF54E90B3C, F2C1A5A2 - 14: E132A50BA83C8F890A87BE6F0546, C9B53A01 - 15: 9F428D036BE200E5DD31753E655B20, DBB53394 - 16: FE428E7F14099AD2153CDEE8B7839335, F5C54AB5 - 17: 6EA359508314D08992547178DB3B93DEE2, 30899DE7 - 18: C32818C43038CF9B9A0CFDE22E9E7379D4FA, D3506BC8 - 19: 339BF31868B82F9209082ADB33AC8153DADC9E, 00C396C2 - 20: 2468313D52B04C11EB97E92051A3FF9795D834D9, 3CEA5D5A - 21: FDE45C82B7D1514783E2DE0B46875B152E44F86450, 379941B6 - 22: 6BB64721F4085855F784D91E1D22503B7E10C41AC1EF, AA314840 - 23: ABB911EF958B711C002F813505E737E39B82F099571994, 29D12602 - 24: 5B5509733191A553CBCA98F5EF5C2FA31C365E67A16C38EC, 482E1F00 - 25: D6F2DB7C087A970C20E4ACE34A6E24C5BB811B5EF36E6647E0, 0538AB45 - 26: A56E117CE1ACD778413B90F0CD4A9734E54138089FE85CBA0916, 757C2ABE - 27: CFAE6D03AB8FDFA8E511125A3A5574426213FFB67A5DF969266DCC, 53E03166 - 28: A2948AEF7C7F40963753F479A4E6768AF481E818AAD103B554EA11CE, 8FBC556E - 29: 94F05E6DC8C7DD830489C99D936722C7E8B5D25F83667EFB2751D0F89F, 439AA976 - 30: 12A4945B7F00E43C4BD50945249F56DBDFB758F22AB5821D767DFCDA9507, 3CB1E657 - 31: B0BB410BD9C82FB68A5625EB491373CFA1FE627E57DB7E01311576BA8A4888, 5FB89E8E - 32: 830D0299C4CE3E224A9C25AC9006311454B1FA315115DD8DA19772B679BFC072, 283C1935 - 0: , 6751332CD8DD - 1: CD, 4497DA14198B - 2: 09CC, AE5DF14B8AD7 - 3: 32F004, 34249D793E68 - 4: 935704A0, 93BC2A54ECE6 - 5: 19EAF050A0, 35D931BE909F - 6: 87B9FA43046E, 146619D8FDC4 - 7: A86CB9DB785D83, 6AD1D478454E - 8: 86A4D43C0E04A0D2, D46815A202EA - 9: DD4786015BBCE0701C, CD36A8334BB8 - 10: E4334EDFBD0A9D26AF46, 90122B9DFED5 - 11: 826145780519A0C295CD4D, 3567E4E54C56 - 12: 74D6FAFC6C4A62B9CCCDC945, 6FEF66EDD93B - 13: 677289ED132BAF1FB3595CCDB4, 92B7B93C3749 - 14: 7CB7C999FE2A44AFF6D78205FBD4, 8CEC8BC5FEF6 - 15: 0DDB56B4D872CB0087DEA23F009507, 86A1ABD7A27D - 16: B7652A827841BE0B76AC703E467F9E28, 401B279D5E93 - 17: 3FEDAF5745837C2EBD0ECE283FEA7285EF, 78FFC47B6EFE - 18: EE4445D7ADED49A5C916932C6CACD2AF985F, 24E1586AA913 - 19: DF2371F032A3CD23078FBC978DAFD6D245C485, B82A795B063A - 20: 265E8564A8F4D69ACF26161644BF0AED9759DE28, 437DA1DADBBA - 21: 08D66813A5F2AA02530F58E38E99C04CCE29772743, D841C6F6D0AE - 22: 9E5078BE17AD7DBFB7F5424BE6859B670AF2DB2C94A3, 46B9DADB3790 - 23: E54C2FD2A1E82749A0DCE96DE1B324E5028A0A3970A9BF, 0D82A52DEABC - 24: F8FBE997C5AA8452D4627C2E4FACD69FC45C10704BFFECD8, D3C2D882B575 - 25: 4879BAEFBDDC43F7DB9C254CB3237D86EC4DA4B24E2FA4660F, EFA682B5DE4A - 26: 2AAA9CA810AA75449CE8459FF8DE2F56152823D38C727D7D7EE8, 4B99CF334994 - 27: 3228DBB1680EBBABAEFEC1D6A79E91F124F8F3F1E5D61E44A24A1C, 0F5649061F62 - 28: 86F8B1F5E495F17FF1FA607D475840F8F1AB460EA585F692736E5A6D, 93FC3B61A3E6 - 29: 20286D8FF889A11018B8D5DF1E8719B55E11BF2C90E29241BB651C7194, 2CBAB199C1F1 - 30: 6CBC4D2AC7B5316AEC2A5665C21BA63778F7B6BB66B4E8EA6B984A8F2773, FE7BE3C8C75B - 31: 3EBCBA9E922E324CED247F0E0C109004D79B5CB5FD6BCFC4814DA5A6C973AD, 091EE3E432F5 - 32: 4EAECAF9E95958772496C2583E4F8475450212143ADB647E62C2126815BB586E, F8673CD34174 - 0: , A0248CB44151F5FA - 1: 38, 4F7D747B7DD02509 - 2: BF13, F6515767CE0E84CB - 3: F2F825, 3C9EAB372C5809D9 - 4: F630F0A5, 557F5FAE5DCE811F - 5: 2275405DC4, B8D7C5492E188734 - 6: 5A7CBCE91FAB, 7EB6DEBEB434A04B - 7: 9EAAE7F49E2BC8, BB9A750C9939C62A - 8: CF3F7A424E884379, 398BF60EBEB7F8AE - 9: E7D4DB0B393F4D5518, 1ABAADEA9F04B4EE - 10: 3457ABDEDF190D26176D, 3029D54A91D85AD6 - 11: E2E386C0A8935ED34D1573, 1CB4886F10CFBF86 - 12: 125D9DF5B2628266BBA87435, BE66B2C28F3208D7 - 13: 90DA83CE068C35594A833F011B, BBC75D66DD078355 - 14: CC1559E317AAC125BD196DA03FCA, 47981099FE1255E4 - 15: FBB935977D02E769A6831B55B7FA7C, 4267CF244943F1A0 - 16: E1D2D63D8E6DA1F266A3E8F2D087522C, 43EE34D091AB87F5 - 17: 92BB08CE28C3355C102154D1D8B8315174, 5A4DA98C39C12207 - 18: 3CBF00FE93B1872379709A2F9F1414DA29D7, 768BC40FDCF35DB8 - 19: 46F14D63FB5AD12AEAB83C19666BD66B0050FB, 0A13B7B6372E8022 - 20: 9652045A343257CB078C856A36B4FAC6266047E9, 8BB920618B46647B - 21: 24449A02D5519DFE65CF5300299E0241E402D570D8, 2AF26FEE1316B5E1 - 22: 4CC1018357F8F2A63A0462042481AACDB35751D5F2B7, 4698ECBC022BA500 - 23: 788F744C0F84173ED5726FE4EEA02C7180882FC9E63F20, 12D92713CC9BFF80 - 24: 9B790E2B22FA923096A9167F4A4A7C90172590755AD6C7D8, FBABA153F5F1B4EE - 25: 14FEA6BCA0BEEE2177FF0C98936122AAE55F8B9795196EA298, E1D216626A31D873 - 26: 010FF04DB81B0A396E342967EFB713E3DB79464FEA47BDF1AA97, 19069FB92949AD9F - 27: 4AEF7211194C3BC32F05B16D75B767F9C3D1904A23D4CB2CD6AF4F, 8B9654643B5662ED - 28: 63C3506269F451FF80E4F67655520E9CA78A5F7E93C750C36F82EB79, 662471AA96C56BAF - 29: 1E19233D8CF7A8E04AC5E471200D565C32B5A38167CA692AD37A6AA4C4, 7D04A9A29B3632D7 - 30: D185C379666A4E5785AA23957092025ED9015DCC2BF4CFFF93CEC35C83B6, 8925DEE5245A0FA3 - 31: 11EB86D524BFBFDFE0796E7B1E570C9432D0BE52B22903B91333EBE2BCAA47, D1F57D708269F00B - 32: 23C821153C97873CF180FDD7BCDEEF4378E2D7D485CEEF0DBCED4865CB106A62, B9427C779872EDB1 - 0: , B800E98AAA0047425274 - 1: 2D, 9AFC5C238B425FDEFC5A - 2: FBA6, 73173ABBC572D112263D - 3: 2FED3F, 34009E1F171293EB9693 - 4: 881732C8, D03675EDEFE13D45BB76 - 5: A6892A9BB1, 4A24D3326BF287303BBA - 6: 6A1D377D419E, AE76F04B96D8632FDC9F - 7: AC145189CF6891, C2E1BEF82007EC5C4394 - 8: 82B06AFD0D91F763, F0DD77172B352C5DF7EF - 9: 0922574B3FFFE240AD, ACD97C4B0B9B78E558C0 - 10: 9FEA300483E1C20FC0B5, 588122F67A28D061A5A8 - 11: 03B99BE5D28EEDDAD11CB5, D04D1992ABCE2CF81DA3 - 12: EBAC6615935FACD08573FDF8, BF930FEEED31937486A1 - 13: 102B71BD3177F08E08E80D6E9C, 8B5B68433BF5D0F11442 - 14: 35E70D1ADB1973F77A93DFFDA13C, FD47ABC782F0EE6CA7B4 - 15: 1CB2084E18FB3F43FBACEFB87CED6C, 6621C82DE04ECD19DA9C - 16: F5B94EB7BE522D34C3DF5FBB52069A68, 944CA045A62CF0C32625 - 17: FC5D22CBFCC4330F057CDC87ADE3F90FEB, 4E3699137EB1FAACA2CE - 18: 54CEDC7589BDB83C0806890B0D45F22E7305, 1A21F1BF6A7987414F17 - 19: AF49881D5A8EBA4D8A734F9EB7EC5256D127AD, 153C685D1029DFFEA31A - 20: F0056BEEDFE169EE8FA7BCA91EFFB488BCF38651, 0A98188824962BB1AEDB - 21: D0084CB3C8CE4CB29F958C7ACFF647CDBF0EC7C73C, BE389FB143079F568256 - 22: A66A3CF99D8A6A93DE0464756FB59E0C8FD2DF7C1C79, BED2737A3DECAC564619 - 23: 093A25FA1DDC6C3831DDA31FA4D7F139912283C76BE203, 763BB3A289CBF5EB04FC - 24: E3F9AEFB4E58AB9A9D548B10A07044CCE90D7B03C0233F93, 4EF15088F176D6574FDB - 25: C335F872A71F83E1F3F6CC56D9D295AA4F5AEA2BFDEC211574, 19BCA3C2465BE4362ADE - 26: 2A3A74FBAD6B28797D23EEA342EF116FA7D31F5FDE12DDBB7ABC, E9DE8518F8C9BDD4B849 - 27: A59A23260D30A0D6C81E9A9BD8181F238DBD87C0A3BBA16CDF718A, C471D71B775A65971F97 - 28: E5AF207A2CCC073C5F509A2DAFF559912F1321403C1CF7EF575FAEBB, 00837E48987F674391EE - 29: 029F7EEC29996296461F3948850FD7FFF9BCCF7D15F22C812CF15A5812, EAED67F7C0842BF883C0 - 30: FA803BDEE8156CD47D3492DE101E4A4EB1111AF752F2BAF1B30E5B4CD22B, C0F70744CB09D23E5A6E - 31: 209EC7E34F5D8572403AED0CC7B063E049D12414026F8C236D04F07518518D, 145468D980E6B5BC269B - 32: 9ACCD472787C77001A079B368C4729B41DE32A70D65DAA2756B7A72A75AF009F, 12028E4C808F23135E06 - 0: , 6962EE83BC39E731ACBD37A9 - 1: 5F, ABA72AE99233FA236D63D728 - 2: E0F4, 5F7AD55B9558CBD810370B1F - 3: 639EC7, 99C06CBACD918F849D2C6476 - 4: 086AD5B7, 163FC49C910563FD588EC34E - 5: 7D3FB40B46, FE4587CF0351C16DF8185C8E - 6: 058ADE01EAF2, 4E1EAD43C81EA61EDB06B3A0 - 7: D2399A86C3EC20, E54333CF59562D611F44DFB7 - 8: 97F42B1E19932026, 9C377C6179B47EA36E9352F7 - 9: 4D446F57F53BFE7C19, EBC0BA462B27D86F566383C1 - 10: B7AAEA73910779BB9959, 4C91054B144B44148E62EA78 - 11: 50520A2E37D6011507B35C, 01AA555DC25999BF01DADD3E - 12: 1678645E9345DBB0CFA65514, 54FB91EA0590D05E78B5C3AB - 13: 77E4A3E4FF3B12BBE05B802F57, 938C8B71D4EECECE321A1858 - 14: 851A6600535B8FCA803EE9EF2D02, 4A38A40DFC1DEA5CFA5CDB27 - 15: 7420C28F3BBBF8D80D67BED875B1D9, B916D716122963E7A3524434 - 16: 96F1E5B3914760BA1B16DFDBBF134657, 8B77C6E772935AF05E7036B0 - 17: D94AC473EB27324DDD7E0038844EF26B78, 4646195843DEC08F1148E5E3 - 18: ED898DB39C46539DA97A53CF163C195C089C, A9B58674F75A02267314F296 - 19: AF469107145A4665F4ADA2320B33CEE6AA3A0F, BFE84445B1721DB6AAE2AC90 - 20: 73AC99B3E676D4EE88360A8DE7D5F29BB2143D49, A2022DC6BEEF81FC662129A9 - 21: 78CA987E96A1131077435FF8778E865995ADE44509, 067FC9A0D898A1A37901B207 - 22: DA0681E65C63ACACEBCBEC127F987A714113E9553744, 4A4BF30ED00237E136AE4858 - 23: 1C195F7B2F967916A6D7389F11203537D16492D7309823, 1F763F686EC087D28514FB69 - 24: 61D7CA23E413FC936A9B287DF0145491A20155FC6E02B3CE, AECC76E8870700C1AC1288B8 - 25: F4C33C2C68E4A505E8D58AFAE45D127896819558E7215182AE, FC2570ADE833CABB9F3DD304 - 26: 4B92C067137CD12801C3A46DA13DC8C36C797864710D02F31FB7, 414A80D99497E17298CF1D06 - 27: BF41710D230739CC57AE0BB6B9C1DCB029FFADE59E7B942878F393, 31A108BF3E7D00075581CDE7 - 28: 8C8AD12D7848286DC682ADA038D56760AFD45A3510788BF97473F37C, C83B5405A00972AE226201F1 - 29: 093A785F568CBAA857816E7E91665A9D4EDD37E9BF28659BC1277C9094, 84F1528CAFBFB1F6C17175E8 - 30: 4F689A7B17365D19D53BDA5A75E429448B12F4A75E091DACAA01EFCBCBA8, 6E90877F5992EBA1E682170E - 31: 2C2132E5E542F7F4C3F584C5CBC0F0C5EE95FB42E255F8B6A1B01E8832D60C, 912FB40BE9E25A4E888A7C6E - 32: A8D5BCEB28700945798C3081D5AB6D706E3EFFF622393001D7C31B5E6B7BFE3B, 12BF4453A919B42BCE22D0B9 - 0: , 386459350CA8C0D9A0C9FCB4BD67 - 1: 66, 5F729C213E13423F02EA0C9ED80E - 2: DFA7, 3E23D9FFF2601FEFCE5CA4534C40 - 3: EC6659, EFD763B2931364CFC34AE1A70ADA - 4: ACA884D7, 8E0D99987D8F7A27C7B68C409A8E - 5: A0F4714E3F, 9EC60F52640585E9BC6826E477F9 - 6: 264EF8D02FB3, 700E6C9CEBBF9047EC25424068C5 - 7: 124AE33A6E364D, 2618978B39DA0002C08E840731C2 - 8: 99ECB762AC0BC4E0, 733B2437D4F5344A910936384F6A - 9: EF96C113348DFFAA38, 451946919F080AE140370920B182 - 10: 4E9A1CE334667770C8BB, 922FB70960CD1F14AC8B45E6C54C - 11: A6E94674631A00A821C10C, 3250251FFCA44DD748300C8B26EE - 12: 07D0D58123116C19ACF91857, A1F67E634377C9806ACA9FFBB579 - 13: 33B2DBE388B2D564A5D19470EC, 9F7D6F25C5519A559BD467A16439 - 14: F18FB21BD8D14C8EF8643D32932D, 9F8FF90A898D1BAC51274D0AAC1C - 15: A7285C40C7198332DF7A9EA1482977, 17C2B8C60E362B81D106335DB431 - 16: 30EB4B456C21E40A36FD1C941626BDA8, 17E5D79C3451B32417E925441E14 - 17: FDC1FCD70A2309CB080B181A5893DB3C07, 1DBBB94F043B81619610D039856D - 18: 8A2414EE72C5B3FBDE7FF7560CD09A2A170C, A0772B83E152DC42E96A90D0573B - 19: 436B95BD3A11B8FD9F161007FF7EAD28C96678, E99FA956E4D8736CAE379BB11756 - 20: 05A41E8666240B93207583E171374A0B7ECCA146, BBE52E66804FB95AD2F5E7267EA7 - 21: 8829BDAB6CAD91C4CB6A166BC6EE69A22D80818F37, A3F0D10291B929EA3B0A3D103E60 - 22: F4314E7567A015794997A8227DE256BD8F5FD76793B0, 476C287BE33EF51F99C8E75D2B4B - 23: BCBF222A8AD8D15944CE413E5FA366C4D9BC2DE7E915D3, FE0D9C6FE4FF57D1C14DAB585AA7 - 24: 35FACA4EF501D739F40C7530CE27D2ECFBD12B9CCB88CFDA, 854611C3DCFF2E8595C71D50191D - 25: 213026817BBE8CB3A49E026E4420CF3FA9FE556E75527723F4, AB9C9D78B6C2D7DF5CC87B81CF87 - 26: 859516DE24E6D92F683363CD30A72181E75D6516EC288D8EC3A9, 552F6CF1B01511BB8A78EFDD1398 - 27: 32831FB791309F58E5DDA0510C091956A73F6F82F5A4E14E8DC82B, 9A0B9E06DAE856ADDC535348E27E - 28: ECF4C1A01F0D46F6FE5EDE6658E2BE01D52E2CF350ABF31CDB75CB61, E18B641BC056ACC3FCC416DFB93A - 29: 79E1F4A133DB79A294D47F47E88CD51F52381B91602731187288F332EE, ACA2B12711438BF792941A0A1070 - 30: 340294BDCDAB7B995E41FD07332A0898CB831FDC812E2EE8C37306F8F912, 8B0E17647F454A22E5199CDD0504 - 31: A2DEABA03CE50A4C3DDFB351511E74B7D1C772A0572D31796588412F9C6BC8, 921271BF13CB920F688AEEDCB916 - 32: 045F90A351B02A806152B1579D955041F9316EEF6E62ECED91D98B8542B4FBD6, E42108986E8AA8409796A6FF3B99 - 0: , 8D8F9E4BD72223ADCA0DA6B184CB2E84 - 1: 82, 0B19A21FD563074B4CDEB5B4A278C3C4 - 2: 1A93, 5677110242612E6B908A44CA47467B55 - 3: B198D2, AD7EE6F0527F2FA1DBF36DEAF2E34FF8 - 4: CA55F29D, C8FD775CFF1BB6E610E246E71A9740A5 - 5: FD90F75FC6, 276EC4A9A1B3487C36A432F49298ACB1 - 6: 110B2D495BA0, 55544C1B0379B17CD3C5493E54D73D63 - 7: 06A1450D884603, E237E9AF07CCC99597C5BC370BA10042 - 8: 5784174F0142BE32, DCA8542D5E9BC38F3FA9396C0B602F1E - 9: 754677AB7ED73E34B3, 8A4C46DF07313DD0E484D0C71AC4C00D - 10: DAD597DE976F5ABAA34F, 38D07887DD25B726052FEC3F876D7152 - 11: 8DDF272ABFAD08038401B4, ACC6014F2C0D08DC76E0301425571E17 - 12: 0A3210621516031C30EF46C9, 8D1A3E1E6C3F6725E7A24EFBBC55C3AD - 13: 00C1729C717EB0818E53F888DE, BC15B26E899E032DC29121FA53E65906 - 14: 47ED7828552417DFFDA8A993BE07, 3833697C309EF8FCECB0ACCC29BC0F53 - 15: D439475EF8C99FA95C86929DB31AE3, 1F636EC4C0C248BE44042F28176F1CC2 - 16: 88B7AC115484B3EB07E647E96C2B1B39, 9FFDE4BE3191BF5DB11711C4A42F3600 - 17: BEA44BAE58A93BEBB2D6D67A5653638E1A, 95D7C3A95CCC38E050B19FEC301BE6AC - 18: 73B2CE7827D9B51E23FF8E15AB023436FD7D, DFBE905C4FF81E3AC154EA1549CCD7B6 - 19: D96C4F8E991C4AD26CCB14B4A0BAC3A0F25E0C, 37AF03C6972E9F08F55A92C2E6A822A9 - 20: 935DCD5CE2D343C159299404789AB14ADA0FAF86, D220D180349BABDF52F98590F08CC63F - 21: 339DD22809018A8B211D0C5B74CEEB2CB25A0BCA3B, 61D34E1AFD553C73265235B766BC560C - 22: D6B0B1C622F132EEA467DE22785AD8FFB4B41AF43626, 9D1EF585C7EDA2FC1FEA62E40E60DC0A - 23: 56025C355339F0E5A9215E5F1D46E6DE5702A2F54A660B, 3BCC0A4A4A7B782CF57690C6325A4927 - 24: ED0369BD8BAD897B01209DC2FCC264139E21ECC142594445, B614523CFD0595FAEACBC819D1929D7F - 25: B714DCACF97C6163F0C6263CA07C21B18C940A243450B7DB40, C82B1850F7ACA30336E6B5721FEE9138 - 26: 3A211B395F37F4A4BCD199E3107875A4E0FB7CDDB5619F04E115, CAD83C6EF977FD0030F4D3F77F5C2557 - 27: 6984B5F5E0E4EB5F1E27BDD373154DB9149C8BB561B43A6BA58E9A, 0F6A4EAA37D9BD932A2C15C8B8F9204B - 28: 4AB3A580F12F06C8B8E76DC7EF09713A9EDB23506F16F695D6AAADAF, 2D137853B9FD49E6435673036A22C8A3 - 29: 4EC9A042FF4441487878A7EA85E9571EB2E8248E9F9DA3B8805477036B, 93B5D1EEE04BD9356196508CCCA2FC03 - 30: CB8455A25209A7116DF56E5D418854B1556B64A0123D4F8884E833A31255, 33E020FBA62A9B48F0ADDD9C5DB18211 - 31: F2EB4E013BB9F6EBD8E9C3279E2E29E894081F111058686FF859E5ACA92968, 6867CA959C4F31C7A3098066C7E8A90E - 32: 467619167DB0AB8A5A188A1CF1DECE233F4F96F023902DEE584659EB1BF286E7, 61FA215297DA386776F18F223B576A2C - -CCM-twofish (16 byte key) - 0: , 6504CA2E - 1: EA, 6896FC85 - 2: BBC9, 9EED60D9 - 3: 050C99, 259A26ED - 4: ACB3C6BC, 868FD714 - 5: 00855FDCDD, A2D262EB - 6: 5E871A2FAB04, 0F46E2F0 - 7: 809F445AA5C650, 5DC67C2A - 8: E4B4C04061504318, 52B0EE37 - 9: 9C8A6D776C6DE5AA5A, 438469F4 - 10: 6C400859F52405A09281, 9420158B - 11: 8D5768D639CE412509320C, C2819BBC - 12: F40579B91EB8B0F71888F6DC, 02A79DA6 - 13: 27C3F2A52BA89C94076CA6B905, 20FCFEF9 - 14: C30735FB3C64A60D2E7D8DDCF851, ABB7D86E - 15: C4955BEA3AAD73E2CB325013BC7A82, 0AAEAA69 - 16: 1264916770636673EB62116396B2FA19, D17BC0D7 - 17: 5D6A0E15908DD60C35C3445ACEAD1A1360, EBE770B0 - 18: EBC25205671239B998FA21B715462B8C1989, 1D1DDD1F - 19: 828390D436646D26D90131167B0D8E3AB3ADF5, A1AE6F85 - 20: 8C032B8A070081269296244BC206A1A943687773, 5C71D6F9 - 21: EB86C81EB52B411E1645FFA60883E45F0527548FDB, 9BC8C5DC - 22: 5938B5D7309F31B02C4489A13A91A673F95E998172E9, 328115FD - 23: A88CB73ADC5D90AB9F682DDE64B62C9AC0CEAFBADFEB07, E99293BC - 24: 23B861918A49AA6B0CDE2A30B3BE35EF559BB406332E54FF, 973C30A3 - 25: A8960C7324891CB827C2DF8E2A8AD38B27FABA8EAF5B86316F, B2876232 - 26: D480AC2349506B20E5BF07F610812568A409FAE71081AD3894A6, 240F8595 - 27: F8335B0CE0B18BE136ACB00472D9A412DBB7131E5AEA2F40BDA64A, 7CF90DCE - 28: EEC18FC1F8A53AAFF451917681A7B957A22898E5E1AFB42F5C9AA363, 2A8CE6DC - 29: 5D89E93912005E5AD19C2AD5FDD0E0BDAC795E375D836AAEDF8B548AF0, E18C427C - 30: 0FBC6FD091B7D9A6107CC0EF96AA38F6E99F972DA6D7500DE538B301D1F3, 6A95E31F - 31: B7B03D3B9BAC30C27249FA76125F40C6A7B91A300AC7E4F1D6AD2862372706, F8B5E69E - 32: E7283F3AECDD184EF5AE74B19A5A61F7398142F0AAA3200C9B440ED22C41C3EF, 46B9C3AC - 0: , 516AF79F7449 - 1: A1, 5BC181548A90 - 2: 5040, 8AAFB1FE8BEF - 3: 4B741D, 78A6F18B7F3A - 4: 630799C4, 9019ABAE3B05 - 5: AD4E35709B, 584FE33E630C - 6: A734FE00EC6D, 0A958F0A059E - 7: 37F3987E0F8A34, 7FDBB9675FF5 - 8: 123D436C787D0FD4, C81BCCB6F59C - 9: 15465AF0831DD37B4A, 6264E307EAEB - 10: 06838BD5A9E196B08604, D5F9AA6535F6 - 11: 3516D8E831A745BE9F792F, 7C0F6601ACC4 - 12: 274E4CF542A48E9484371727, CE2B36A71BF6 - 13: 309D30532ACBD3A5FB070CD7E3, 9C6181206C25 - 14: 0D5022102EF91A7A8364348275FA, 55F1AE797984 - 15: 44D8376B8244978B82EB1ED46DEC4C, 3F59BE0330F8 - 16: 90B7ADE8CEBEA08534004AAFE1329B06, F26BFB0CDF8C - 17: B3EE7A0F2EFDD566EED1000F829AE22DB0, 18A2538145AA - 18: BE1D5E5FD29E70C88E4EE503611BC28EF4AA, 487D23A9AE44 - 19: 606F4AC2D45C389AD0DFEE036B7322CC05E046, 536CBD89FDD7 - 20: 247E1F1DAFAE3387FA9E62B6AC9A9B62F4A2B8C9, A004961FF236 - 21: DD9373EF66D834BA55010604FFC3D39D81C1A7E864, 4427621CAFA9 - 22: BF83A4E981E83BF0432AFE1B02FA48983389964A3E27, D1A77EEC6853 - 23: 2FF06727E119CEA879D9526B686744AF9EE9138A1BB094, 879CEF9A3073 - 24: 5B2CD73E7275AB5508F77ED6DF56DE6B4472597177C2C3B6, D0DFE548D093 - 25: 32F6EBB5EADEB8ECE3C93222CAFB44FA8CC81536F885A19C7B, 81F6F954F17F - 26: 24D252AB4927A1996F9667BD8E1BB35C29BD05555CB860E96D74, 471253D11407 - 27: 81A964F9657E8A3448F51181AABC343C1187A40715D3E1EE07AE60, D1ACA918F7B5 - 28: 4336C6FA8005BEBE4DE0D726935B74FC4AD8C81BE01C441AB1DEF839, 535A6ADA33D2 - 29: 2B48420259365D355BA242D61F162EFDE3123327CB9F869E2415F09181, 7B84E2A62462 - 30: C45495025F5469688113C15E3635CF4C11DE25C55BC0414A54BDB2D651D7, 1D0B3892C597 - 31: 233B3C59C824B80DAF8DD410D5ADB18215B2283A65381C955118E0F38C7328, 089A3571B57D - 32: 37FE46F427F99272B625D5E0BC2EA39D706C7E3688624104625F22933149BA4A, A5461D669261 - 0: , CEE1F35E6A3884DA - 1: 46, 7F846DFEB96D723F - 2: 2054, 907CFA760C4336B6 - 3: C32BFE, 6576D468322C3B62 - 4: 197A52FA, A4BF0E6151BF3A00 - 5: 6753943921, BA6CDB5984A89F0A - 6: 83F9BD96BD6B, DE5053514387C6BB - 7: B5BD3E034ABD64, BF878417E10A6CAD - 8: 0638BD746334B9E9, 4AE8535DA0B5A322 - 9: BF883EECD755A60E31, 281F0E08E8A33C5D - 10: A5F5EFDDAB1AF0DEA935, 2D600A7DFF1AF2A8 - 11: B4FDBB57CB8971A2DB5028, 779136C26E0B19EC - 12: 643E073E67F3413BB72B4D25, 944205371D6BB6C9 - 13: FA377F672D1FB2A34C46A95A1C, 6E0CB1D1ECEF7255 - 14: 67FB723F1D95279EF9B584234B69, F1078F138DB20A1B - 15: C4D5FCEB1528D04D8C5953DA4EA731, BAB53CE33052B6D8 - 16: 13326CB67374D5C3B38D5A4B89192772, CD3D36DDBB3510FF - 17: B41E6F512056BB780300B6997C7B28A664, 6564331B88756D10 - 18: 01E453B7D35C9C29ECB4D3ADF5B932E34873, 393A5329D006B840 - 19: 009D2B2D91BF6F8F844DD5CBF14AF7E67A38CC, 7A8AEB2C63285592 - 20: 9B60FD0FD3CBFDB5EEABB658E8643CDAE4927F30, BC53F5EB0DD326B5 - 21: DC5995B04B5B97B50A3508F3804BE971436ED1F79A, 6CCA9D2E32AFBE59 - 22: B333A2A4D81DD5947D3905C796042A44FC1CC02F4487, 089EFC35EA44C46D - 23: A6E4761AD0480AA56791881E5D859EADADD326E4A6DFAA, A86C89C1A232147C - 24: D12D336A2C843D4837B983AB1B49A6A098A0AA2808CB25CB, E88F3F62A018CF64 - 25: C5082CD8746B824881B79C8D7CB7C741A6C478F36DC59319E0, 498E57E4DED21BCA - 26: 093AB74C6B69D5D8A47EB135A2E76576FEFF6A6556E3775F11DF, 02BA5AC64B13E677 - 27: 2CE38F98B91907A0F108D62A08171F91A7FF7B995732C719A84542, 98964F8D19E5650F - 28: 33E4C322CB99D74654B66F133AB1079677901400EC62C2954A043B96, 4450B558BDB319B7 - 29: 08142461522D0C47691CC6011F533209D1F5200B702A4DBE2EECBCFD4C, 13E24F60806E58FE - 30: 42D646168FEFAF0F70CE0BEBB860468938EF527B0271CA3457071802C690, 1AEA9C93D9E4D60C - 31: 87E7E3A25A503A3699D49484247828DFABF4456CF5AE16BBD6C1A57189DA64, F644F0273DBE3F7A - 32: 0676705BC12E4723D3BD6A45E1E54BEE35D216F6345637306C89B06C9DC33C39, B751593F9708D652 - 0: , 2BC631E15EA2A18F8CC5 - 1: B8, 6CA7F8847B5A207463D2 - 2: 5A50, A405C75F4C688F4095E0 - 3: 6CF4FD, 237D3376F04AA4FA21F2 - 4: 83CDAF96, FB851149325E526340EC - 5: 173EADD2FF, 86EEA2323BE477BC3282 - 6: 1C73943096B6, BBDAB38F46CB721FDB4E - 7: 6C9E242CA03007, A5B77953E724D0543E4B - 8: 39F27339FE9FE436, E9373B60F1C361D3198F - 9: 50CC93DFD88624371A, CF73BE9BD4FEC955648B - 10: AC5408BAE8804D23BBDA, B4808010CA868B4F6FE3 - 11: 7559B81289AAA4F298EEA9, EE7FCBA7E577FAB9E50A - 12: 580487E3CB2491232F0CF0C0, E1D30889D8AE1BE85ECC - 13: A67BEB64F9363586BAC0DFB65E, 1EC563022128CC29EA3E - 14: BAA4E6C297AF98AF40F3F79C17EF, 49BBF5CF00782E7B58BD - 15: AEBF987E1B0AFC726B98AAD2B35B42, 0811F86306CB0AB8BBA4 - 16: D6BB4D46E5FFC8A7E80BBF4E80953011, 3A9EB97E540953DD675B - 17: DA5EC0F24A2CE18B061C5A56D14A11F362, 1B07497C8603442C8B6F - 18: F4EC5CBF75C33C5CE5054F345F35A91D2663, 7121201E768048D4F089 - 19: BA912826F74DC74FA642C99F2CCC017CD6D1DB, CB1C2183DC72177F1932 - 20: 9EA80F577BDA5E10485FD5F2FF7768BA4A95E327, 0B4331C4ADED2B59BBA7 - 21: 9F222C5558F98E6156F1EF93F34CF6677A6C2C271D, 228967CDED3F815C82FE - 22: AA2AFB4DF903499364DF18E5A2D772E3E3EF603ACC3E, C09E5A535160E4C2D22F - 23: FA90C6E651B278FC697199707A25187879276268C88FB3, 76846230B5AFF9431B05 - 24: A8FADDDA13B8E488F9A738B957CD9D2F183D7C4A462F5B1B, 5BCF0DA67C2292CB4A6A - 25: D8CE7B41FB4BED596A4C0D8AEF5543C67E8A48FDE72BE8170A, E9E10D32CD5F67A02266 - 26: D5BC5428792CE52D6D2C8C345958FEF5C86EC596DF6B754F8919, 78E930929FB81F838B0E - 27: 6740D80785DCA70C92F3DBDFC5F02185D595B1B9C8F1101F3FC193, F7AA4F812B9DFEA100F7 - 28: 356234AD1735B2C522159558B4D065C5DCA189B448197B718EF837EA, 7AE9F14DFFE90D873BB4 - 29: D1953EB73B72CE8FA2AFF7CF21B9A1985711C2FE5E5B6662B4B5F7946B, E21CBC9746A19B846A0E - 30: ACFE457C826C4336749189A62A0C7598ECF59C37B7CDFAB03E9CD61AF628, F0B440859174EAE100CC - 31: CF27CEFB77B9A83D425957203772A6127EB54E18769B0A02E3554012D597A9, E11894E99C2C9117988E - 32: 47C206B6DE9E66FEC91C4CC38157EF36FE456170D91E8B78882505802A68FF8A, 83304277F6863F5F2463 - 0: , F42F67CE475B90DF5D13FF87 - 1: 80, 341CD0656EF620077476790F - 2: 2A4C, A9B8E97105F9A40D37FF8D99 - 3: 3A28B0, 6F6B7E282F4AFE75C07C8158 - 4: 35CF848A, 9D2EE05445A9BFFAE51F8F03 - 5: 0DA6E368C6, B009307E7A8D76D14FCB696B - 6: AA87DAA37E2E, 93BD730C9E145BC7B7E8DE59 - 7: CF0BF18017C4FF, E7B9A69077613953090C5D39 - 8: 3609CE340130CE46, 0A50D219C64C3498D43CDAF4 - 9: 398C74DE2C23788528, 3C8F6DE1FCA03554B56DB35B - 10: 1478DB9E3B7985D435A7, 15B6FCA07464D1EC11121414 - 11: 16B6DE5D01CCAF649A3B86, 2C147BB391B05C55BB0D6F92 - 12: DFEE22F946E8FE9225379390, 6223DAD73E02D913536783A9 - 13: 4BA46FCA76DA307B2B7835FF2D, 97B0160962AD0B68BCD7F808 - 14: 0E6811A602855746676584FF3BD9, 6C7A57CD9EE81905A52E4C5B - 15: 6F74D92E1E8AC1B216831E16387CEF, C582F43CCBFDCCB51F8ED10D - 16: AB48EB821C59A95BEA46F618C0F039F3, EAA878974897EC36CF9A8495 - 17: 1A3E594D1EE8F6B259318DB26E08EBDE71, E81D1EA53521EB606B63A2FB - 18: 42E9A13B6016544B69E1F0DADC8077F704E0, 69D5878AF70D4C06E254A03B - 19: 2C535AB0AF6148FACF5A899BD6920567772A27, 78846AC66FCF992B871CDA49 - 20: D813421A22E118B5729AAC29A79E84F495045DDA, 094E8A118C404A16C1EBCCF9 - 21: 84D81A84A44799330A83E2756A1FFEE8FDD3A28682, 88B88FE4A1EF5FCCD5C883D8 - 22: 89433DFCF9EEDD969C07A6529CA2339C82D565EAB234, F4C131740D9DC11EBFDA409D - 23: 3774BCF446C40FB317527F12AD9303B5D56EDD53956A95, 60CBE5B6A41FE00BB6397BFC - 24: 780B4ECCE4D75499057C8D4C1988D914A655E6589A1DCFE5, 5F85B0FDF9CF22105743C725 - 25: 814934D0960881B2FA10BB0C10673824DA2220285A747C57A6, FCCEBAB7FFE24DF7C6A67DA3 - 26: 7139A968433F655A4C9447088F8D38A678DEC9D9B178066F412D, 8AFCDFFAEECC5560A7D7F6F1 - 27: 5C5DD47CF2DD4996AD6D8B0BFEF6BED643DFA0BEA71E5856C68B8B, D9026B3543B54D666421CB20 - 28: A423954E5AF111097E4AE54F379C8386706F2F9EC67F23B2DBE0D2E4, 2C1459C5A71F10F685289296 - 29: 5650064792DE43D7F77DC07949FE688387BBE8A17959C284636E6F8DD3, 263F68EB7A9D9833AE30A831 - 30: C24E2B563E0A473AAD8BC6BCB1ECF969C1B2EEE78D99EB6EA3B73B8410DD, 83CB5839B13D6840473E58F6 - 31: 50CEF0BBA877B68EA4FA8F6C119699FFC09E1AA15BDB495AD93A0B666B6E5D, E71ED0045193E3743E1650FA - 32: DE19F38E699E683DDB116F34192393472B4F85B2EEC92F0A026C5BA6C6F53B77, C1E0CF388041FD6C9F33D605 - 0: , D81BCD5C8ABF0E7203F2168F7FE1 - 1: CF, CFA415480316F9D26AFD22505E49 - 2: FC2C, 7FAB58DC167AE553071DB88181EB - 3: 0F8CAB, 713B257B5A9AACE04A09E9219802 - 4: 76671D35, 9D39FDE5B775F79D1C249F3BD6E3 - 5: B3108CB51D, 607E6FA8ED7E01EA5C293A3FCCD9 - 6: 1C2D22FF1B5F, CE94231E3E5F8E4879A265155C11 - 7: A5E1C13362A072, 936560D2B9ABC1B8CDA9999A2E3A - 8: B2C7266345121357, 3711CAB7875A4644403CAE1AF385 - 9: 08A635FDFD43F4EE1C, 5EC32E641346D2F6FB46DB72CF0F - 10: 6B6E52EB79C7D2485897, 281846C4B65B70723CC1B9530BC8 - 11: 88B93C7D289A1E0894DA9D, 8E09E0FAB5E6C642B955E2021CB5 - 12: 9BB4EF2B549D6CDE048A2425, 12067724C7B66F4C8D7748484EE7 - 13: 5EB3E14046A7191C4F32694954, BFC7FEFF709DF75A2AFD62D7A846 - 14: FEA07045AA479D7AF4E9BA70B4B1, A4037A42D524B4962FF82A63004D - 15: 59022C3DD4C9DD6523500670E9509B, 07B1814FB1DF8FACE5C3E08979CF - 16: F0B30240EA3100B8686DE129E7511124, 71AEBAC9A18AEAD854BFA8B009D5 - 17: 5BAB995B9D70ED30FC9ADEE92EDAD5E3D7, 9CB53EDFBEBCE4A036667536AB97 - 18: 8536E6EBBAB3E12DCCEB814CA2B8C92DD571, FE4E9011F98CA5ABD7C965EE1C8D - 19: D8B811C5DC736F1E2B0134DD0D275D9233EC78, 2E01544FF68A9DFBA92AF18BEB07 - 20: A0795F82D4C4D8F332212B45310BEA963ABD1DDE, DE3EE6F8FA2BFDAC1CCFB7F6C12E - 21: FDED1BDC8DBD92649BBC0295533B95CEEC2527439D, B7ACB0A30E0AA11EE8996DB5316D - 22: AC7A15ACE32E135D6A34345A5541E6EA1532E922E016, 18A1323E7B323C40CF8A6ED9BA2A - 23: 2EC0EE01712FDCD3C55DF8CD528FCBDE7A91E53C59B3AA, C01E0E0BD0069128B1D5EE83B221 - 24: 5DF15C65DFB452267E1F747603F64D56D95B45938E71C094, 27C5799A23FC777CC43AF1249A62 - 25: A08EF2A2E50DAB70B4D4DAB6D09292BABAD423A9A4CFE4E4B1, FB5FA24400AD4D44226074C02D6B - 26: 73E899B5B2D84B6B40D43C706A845710242A2C4C7FB01BA02B77, 1C029419A7F2D9FD5D39C9638DFA - 27: 813E11CAEA799294483EE55269CE86308A549BFC25A27951434DE1, 081A370B33F0300FA0D76AED25D3 - 28: 11CE14CE74DB3DD2349EBE6F894641D6974F648E07935D582B3CF9EF, F3521CFBCF3E58C9655D81F424CA - 29: 4B3EC5AD8F70BF64FB072408F2E8FEE16340391977CFD162715B7AABDE, 16843B37C02FC443C1FE24F66B49 - 30: 9B890FFB16DB373165C6190B548AE8D8853F7CD72ADA2A00129CB01371FC, 1CEC1D23A3DBB05C5F1D9043AF9A - 31: B4BE6D4748B53BFA2437630E8652E37FD07197BC8403FF17685C016BCA8A63, 6A99FE9E4D1F7E5D4DBCDBFD2B36 - 32: B52F2461F927D4D654FD544BB0355440495294197908BCA99E0704DF869444AC, C533A9896D17E450E39CBB9F0AA7 - 0: , A377BB596A83343E851A03E74DAC889A - 1: E7, 31F94004035A6335C7F99CDDE07F243A - 2: 32D5, C58E87EE2765F0546374C5CEDACCF7F3 - 3: AD7427, F0FB6F82102BEEF15A52B88BE4BA1A4F - 4: C1DC14AE, 6E4FACA0C9ECE15C2FA0090B209545B5 - 5: 87F998FB21, DFD4933BF13232918AD2A6BD15B0BEDC - 6: 5522B34170C8, 0C834EC188A12ADA19BEC1E32874F395 - 7: F3762D7BAAB686, 91618F1D8771941B95C9F75277AECC31 - 8: 553BC380476CD37C, F3C95B88B080D2AEC4A3175E1E1979A5 - 9: AB5E656A77A8D61F1E, 80F6B58A5A33134FE9A0A652A3E12F28 - 10: D2D1DC9F964B647EECCB, 85D9B79C08637C4381BF9F838FCE751A - 11: 5895346E1577E1F3E16A32, FDFED590BFB9D97F1819F0E237BBEE89 - 12: 2506229B37500C0B53695CFC, D8508A4F6FDE63D9AA4A2DD1A13337E6 - 13: 7F5C25A4A425B3E9519C200FAA, 7A7E1E49217C37D123FCCC0BEA592570 - 14: DAC40DC1297CC201DB1C33AEF35B, 9DE10EAA9E3E848FAA5703146DA3F36C - 15: 544ED84B681248C99CA5AE413FEDFB, 2140A84903568CD468F7E1F696C75ED7 - 16: 057FF6C8775FC4ADC149846A6C9F572A, 4E0D6E886DA255B58716E778A80A32A0 - 17: DC512A7C02B29A333963DA6E8045D8E4E4, 0BA10D96127AFAAFFE808275FC85B301 - 18: 91770BEE315B0808C36997420D04610DD90B, DBA35D76DCA6A1AAA26074B7ECFAF442 - 19: 71C90AFDA851168C1F61B946FB4E693BA89506, 4F804FE1B2712847E0E8D5F398A4E7FC - 20: 81EA760129BE5D8BDFFDA69D7AE7C61EEC2A2BB4, 5920BCC8FC50AEC5BD377AAA52450C96 - 21: 93876EFBED4875F4E734F1800BBE09B346AF007E9D, BBD11AB8531F4ACA6C04219DF676BCD2 - 22: 9FBE61B5BC7970781756B964591460967F5848AC543F, D91303CA6600A5D464641F45489BB305 - 23: CDBAA00BC273E645C9554196D957172D6AA02F10FF3EC7, 55A69185072FCCE87E3D5E18829896A7 - 24: F9DCCC847AE541EA2620158BC7D7C913DD34AA0189A10682, DE224DC08FB8C8476AC08A551E533810 - 25: 974C3C1C41B1A9AAB840CDAC9BE57F175306A8701225AAEA6C, C2033B5422BE9D2547230BAB96029644 - 26: 27CB190B612F502B90611B1BB53E8D6A5EBE3C9269940219EB99, 74FADCA2DCC3FDFF541D61FF5060F584 - 27: 807454AA35BE5CCC948B2683E78963C4D8ECC7338ACAFAF664BD4F, E1406CC4353E7C97A78EB062E8571F69 - 28: A6A9F85EED2A949F135B9FB297172B0EA19C5C413B89DDE1798605B7, 2C8604079CCDEB024093CD2B1740CFDB - 29: 43E5159F24F480DDE696EBE86A14CB269C3659A71116ABD5B82FC0852C, 2935FF9E68FE183695A36F75E6CB33F2 - 30: 269ED155F29B4E255B8F48655067B9DF5D08A0028180A5FF5F9086441916, BE86D89D5F1029C494BBAEF5F0A6D6EF - 31: 8D9551BAE42EA3A9CB4B8DEF9EC6A2AEA276440F09B4C543391B4DDA8997E9, 16098A7768FE2FDDFDF01544D099067E - 32: 4D6E76A82DF819DF2DF4456FDCDA14984545794FCBF06EFA88600106604FF08E, F97EA56E5B15216DFF482CE10586C5AB - -CCM-sm4 (16 byte key) - 0: , 9DE0073E - 1: B8, 26AE5CCB - 2: 8C55, CF16B2F9 - 3: 1FED2A, E20E80C9 - 4: 9CF59EB3, 4AAE5880 - 5: 59A80116CC, 38791290 - 6: 8B89FF192419, 1C22C22C - 7: D0F160F1C454C2, 35F043F7 - 8: 80878955618023DF, 3A551A6C - 9: 397F5AE0B4D2E01610, B35ED606 - 10: 3D850083F79CB67A2018, AD88B5C7 - 11: E484C523B184F66B0B8DF8, 554D7316 - 12: 6E69B9FD418730645CA04E4D, 3B092AD2 - 13: A27450AD338C433891D5A8C6C4, 939D72EC - 14: 6B8178513B2D99B1FF1CC627A2EB, 229C80E3 - 15: C3AC2E2D6D690D8767605340282E9C, C835D4A0 - 16: 93BBF3BC6806FF2CDD7D4E68F0D8FDBD, BD3D142F - 17: E5372D579254497DA22EFD3E7F4CEC8ABF, 2E3B6638 - 18: 2579A8482271968B03FEA9DE18B65B8237CE, 87C8545F - 19: 9C7390BFDCB1B835E96210C7FDFB81CFC1887D, 58EE4A58 - 20: BB1F3D8E62B12EB2DE9890364A09FA92DCC1A64E, CFB0B151 - 21: A6030E17DB36B913FE4B7136DDCFCBCEBDA100B3C8, 27CDDA62 - 22: 20369D0B93F987EDAF09A46BD3AF6265AAB6E9B4BD80, 23FD7F6B - 23: 50CB9D31B5B71A09B564C5772CAF59AB52C0D84A781A08, 800DCDAB - 24: E3C2EFCF4B006F590E76CD77363936494824B2806FC3EF70, 87C33C4A - 25: 4630B52ABBA519365687FF7C5252CCF5C6EF18E5AA61BB822D, CC4759B3 - 26: E05EF860AD2BE26D87A93FCD85B5334C4321E1ECED6C71A33D37, E8AB5D70 - 27: 47779C08DC8FA0D201C071A485EE44455B8DF73F1132ED6A206DCA, 20263898 - 28: EA7FCAD1B339C7135CB58362C6EEEF000AA7B5BA2762F6EE813F72DD, 9C9AED3C - 29: 063FED97EB431D7C19D7F339FAE7267C27E3F55DECE3EB5AD7A981410D, B5212375 - 30: 48E554D486A1B361172A64ECD6EA5696324C1882D7316D94566CA5A1A399, D922A8FC - 31: 06578AABC9632CAFB841008DC77612EBA75A243C2503216BCCE92DE1C13919, D88181A5 - 32: 02B1CAA088824295D01E5216E2FE971ED29B84641D4C16C74F1527B33D0C8D52, A77CD6A3 - 0: , ACDEB856A6FD - 1: 73, 17E13EBCE582 - 2: 2F17, 006590D026A8 - 3: 1313B1, 1160E91A3E1D - 4: 7B7AC513, BD3EF1E2BF17 - 5: 6F6087C433, C4140A7D3CC6 - 6: 0A1DF4EBFDB7, 6B61DD16A1C6 - 7: D9A2356F720A6A, 74A94A601026 - 8: 134A88A0B9299FC9, 5B2658D55ABA - 9: BA794509B25656C8D8, 481E5C1B566E - 10: 0833914DE8384D84CAFF, 03C3A0414406 - 11: 6992EBB19599CCB63D7771, 0CA98975D74F - 12: 4AE8E307DBFBB54769C168CB, 667C0AEDA4D7 - 13: C59738801EAF354F265FBE8DB3, 3F0EBD22328B - 14: 747A836D146C0E9F562A905B4275, 8F44258FA17E - 15: 2BFC297DF959F9FA1E315D2EB9303F, 77484AD59BD4 - 16: 666E880AE4745F6A7E09952E1A844646, D59CF07C04C6 - 17: D75DEFBD766597C0B22769030ACA20BFB8, 19F0082D1B8E - 18: 5EAD7FE1BF8513A6B76A213B4C68F8B7CCF1, FF8AC185008B - 19: 0BFFCC92DF19EA96814DAF62CA173F9CB34920, 7B74C69B11A7 - 20: 31D7F5D10D1240813591EC0A71E8C5EC1D80C862, F70D5B53E0A8 - 21: 1B39C0D592786AF65A29C8C28ABB6CCE26DF3E1136, A5B1CF84FAD9 - 22: CBC4D4099BAA07EBF0464E39BDC5F33B833C5B6687EC, A92F17822284 - 23: 6E0D9CF0B092DD98213E1373DEB01152D2E39A9E442D32, 55CE8103178D - 24: C8E3757F3443D51D237506576B900DEC3F1C9DF4F6F2BFCD, 6E632E464634 - 25: 7324756247E38DBF2C503DB5346D1D171B5ED1201A75703E5B, DF680399AD08 - 26: B5DD81796BDB3A6F9FA453D74572D998370EE4965AE59EE33429, 8AB45E71A43A - 27: 69328028EBCB8DD3CACB57893CC9920E0F35585E702AD14D583F78, 355081C62A6D - 28: DE4C771DB9E43A1C2AF9DC07D1788A140439EC5872FF105C342D8012, 539B190D84A7 - 29: EF9B50471FF34CEBF83E93E3E5C0991E40C1785CA95401A6D792BA6B7B, 666CE3AA7FCD - 30: DCB27EDCFDD8667F55EF139F6CFFC5774A3CA75C6311225AF9F370E00822, 4D81D680C170 - 31: 1C299CAC6B0D751BEE11EC4A186119BEABBB795CA84ED8B13253B3900853E4, 0D47DB1BEBE6 - 32: 909D843A79DBA34D8F635139E4B9E5ECAE0F495EB25CBD66047A012E80A65587, 8C32551FD9D6 - 0: , BEE3EEE22EE2A55E - 1: 12, 44557C1AF1A758B1 - 2: 3CE2, A99B5A1D657033F8 - 3: 7B7001, 3DC00127349A98A8 - 4: 96165A62, 2B02ADF4CA7AB517 - 5: 3A324BD309, 2E2AE02C292614F5 - 6: 4ED0038C172E, B5B0FCB0CA89A35D - 7: 84C71158F3542B, 8BA5DB23A5B0FC72 - 8: C274F79526C5FF3E, ACA0573547F1710A - 9: 47EC55A42C1DE04026, A487BD1A941A6BF8 - 10: 79DDC67F4A5220F4CFFC, 224481A7C09E33DD - 11: 344908D7E55955774948AD, 4C74FE86F590BFCB - 12: 4604D7EE2FAD87CAF475D69A, 4FC362BB71E181F8 - 13: 61AE670F2A821F5112D21CE19E, C689AEF825CAE8A1 - 14: 9BD8ABE63A36939A1129B24B0D98, 242A8452BEBF70A5 - 15: C1D4E4A7807A9C3465B4ACA6A7828A, 9784F18AD5B142A6 - 16: 46B362B021621D28878023F1954D61F4, DDD1E12CB161F895 - 17: 07845C27395A4E39AE4046D7F32CAFAB5B, 515940B36269025A - 18: 85721C20C286E5119BBE05E6D7A8773BF85D, 74C8750DCD3DBBA6 - 19: BCAAB338910D75938D73C5BFAEDA318B444A0C, 2F625A963F1C78DC - 20: 94C7F915BC71605032071B51B0B5D107EF0694A1, 11CC5372D55C3E1C - 21: 806B3241C41542015C717EFC4304AA3E9A31D22D70, 6E6B375960B7645F - 22: 4A844251A1EB8F4A88421F7B08A7B9C8A5877DA4E2B5, AA876E54B8D7DD2A - 23: 9BBC9937F5719D3F8AD064E52C4F99E8B94EB6B8062DA8, 41957205E61ED9C1 - 24: 1E610E7A49CF2097D4E4C52FF590C6F8FFF040E511CF69C8, C64ED3D01CDDE865 - 25: B69C3F8E6F37B429E6952D00B43C5C7EBAC4577E5EC964A748, DFE2FDE592BBE35D - 26: 01961B6BCFF2B36562D2840674F66D4F54AFB124AA44AA4B19CC, B16D03C5BAEBE7C1 - 27: 8CE8AF13CB3F91BF6F6818212A4AC6D1FA58180EABE9ABC7065F2A, ECA14DF0C15D4319 - 28: 35D13257040C47EC49C7BF107F12590E058A3E16A6E177D72B27ABD0, 3EE3D2655BBC7447 - 29: CD2B5DDF69230B00BBD6936980BA840FA9DC8ADB02DEDD25964EF9ED81, E9651B13894480FB - 30: CA0628E27ED6F6329ADD496B3D7B3A3BCA821104AAA3517C8640A48AC637, BA31774B56A4D8E7 - 31: 2B14F14B3465A2637914B9595F4C30800CF731DBBB49E489F180C7994792B1, 9E030D5C37F5EF72 - 32: CC28680779E04FA635C85A9701479869D15BB0D7C22FF59DB16CC6BD3849D0BE, 4D530BDAD9FD7828 - 0: , 87C915256D009358DA0A - 1: D8, 9D4BC0A5B4DAF2397D95 - 2: 0681, B4A045ACCD28732C7DD1 - 3: DB43E7, 925A0887972BEF435D72 - 4: 242CE90B, E6C965DE0E67CA11F2DD - 5: 3B7207AB15, 9ED9E7F329504EA4201E - 6: 36F791EC76E3, 4F922572513A1B532C43 - 7: 8E2E5E5082C552, E77900DBBEBAA2D58982 - 8: BFA9B851CECC9B33, D83AEB7906EA956E0965 - 9: F726F0C80040C75231, F4BC200E2176707DA369 - 10: 58F8567C189506BED75D, A914BB656B23ADFAE716 - 11: 9A02A02C0ABD36732C7F07, 47AA449F45C49A0AE7CB - 12: F406B33115B7AA96CF3E563E, 578F96884B963930FA36 - 13: 5FE47D69B6040C72560D9183AB, 79BE6DF768901F2BA925 - 14: 60B5C1D99425A42E5949CEF0814A, FDE07202E1615E22942D - 15: 5324B9C4DD22826616D7328D9233FA, 1D204A8B90295811E1CA - 16: 51184989D72F1302C1FB991EE6887817, 3305CE14FA023AD15F0B - 17: 4B9ABA7891B67C60970DAFB965F82FD7F9, 375F0F2A373857DA8784 - 18: 2D0E7790E2928423676FE339640EC6F1645C, 52F38C4BA18B33CFA417 - 19: 960979B677EFA83DC37462A99568568C6D0EA8, D8F5C1E46FA747D3F0A9 - 20: 162BAB7007593791A61E984DCA8E834172A3AFE0, 948B9100707451A24435 - 21: 1EDA21A2F5CCD0A28556FD2CD59512D4585400B213, C6A326BCCE20BD96D1F8 - 22: 150CE606AD0A0B279436938C67F09793446CFE973879, 1A2E3CA922D6A124F148 - 23: 6BC1CCE08F9C09928322F812F41158BA4E48B7AC527E71, D01CEEE7D731BB7F8CB9 - 24: 3D39F0B881AFC34914F62A1CB9EF9272071D7431C2D81E9B, 184FCB41E469269AB3B4 - 25: 288679F9722495F7C694BBBC9837842D24656485529609D4BE, 891AC9B5415BF8775306 - 26: D730CAA7687F30236E1B348D81A5BF6EB6A1285A63BDD0F1DEB4, 4E97DDDD7320DACA3C03 - 27: 24E7D22AD0F632A3C1353432B8B57E98C088E5B889295F08C53EAA, 4331A522634F068A4564 - 28: E0E58358FA24EF2771C06A35DE473D5F79C9DF5D0AB499054F1B4790, E33E5F11B23EE775CFDA - 29: B54EA1A35A42BD5909B2FAE801D8DCD85563AA390B383AD0E645338C23, 2223C284FBF7A6B5A7DF - 30: 81A164632FC1EDF2A7A8C512519866924FAD66711D6A1C925FB93F5B5B60, 396C53043B935D44C352 - 31: 458E489C98B5CECF75E3DE4DD33CE9AFBF681F62053B4023EAD8CFC90A6018, 73AB8757298589A6AD67 - 32: CD0BD066423441F124139E32AA52A50F3B15088CB9005312B60B5F47EB63F5DD, 62079ED0C9E0BA36D92B - 0: , CF62DE403E79B5AB43FAC7F6 - 1: 3B, 3F9AED80CF5D1071AB4D9C5E - 2: 9272, EE73A9A91942717B32759114 - 3: 9A1FE8, 2596D176EAE1D6BA887A22E8 - 4: B772A5EE, 7F1D066F9A01906845E9209D - 5: 7781B0038A, 2BCE3F46C9574D197C38BE12 - 6: 5FFD92A0FE9A, F8F05573CB15CC2E1CF0D87D - 7: 573182E5D2927E, 81E0F13418DA7856D6678EE7 - 8: FC41211CF3154991, 4BC3EE8D1C263A879AB5E659 - 9: 8F0355557F9F80165F, 00A4C5A76047D493455341A5 - 10: 385645C4A5CC20247D5B, 400F7087730FC5C33419901E - 11: B81E867B737F63FDC27777, C27179A0B02F9B1FD807DF84 - 12: 031545C1EA3A5AEB901BBEFA, 15DAD4065AB33691896A2B4F - 13: 419F4D096BB47707F07556D2E4, F707A6BC800FDFCFEE8C32A6 - 14: AD494900556254DA08B582C04996, 846708CE1ABF7C80A886C9B4 - 15: C95FBCBECA2118C433983BEA1E83FA, 9EC202665FF3C2B179C68EE4 - 16: BCFDDFF1EE978C7B9F9FD1D6EB297AC5, 2CFBABD0F96E9A9BDBAB1D6C - 17: CF10E304AEF362B82C388B75411A6E361D, BB956F1B446A383344C31B3A - 18: A8C1F766C4C06E28B30AF1554D8E9BA21537, 0D5CCCCC1221ABA77F43A30F - 19: F3011F265C3CA57ABB67DD94E771C2790DD1EA, 36E56D33B5701D96DF46AA29 - 20: 388486FF5B2564B1BE195BB91136388A84C7BE48, 196A661BB11D6D87E0377579 - 21: 7127EC3B0D472460AF53D99E74C779C67E1770E69F, 38D31353A1C1BC3C04CD78F7 - 22: EDB78B1E7F0B71DE82DE74E0ECB76FE8EF178E45862A, 3D4640CE45D1C1C6924BC609 - 23: 709D4A6DFCB45366A4C503B16455E781D6F7167A44F9E9, 932844F41765DFA3EDDF8690 - 24: 47FBA51D0941BE170D819B5569E2B49C6A1C6A5559E73080, D24EAE2FC037E19729EA7E1C - 25: 1736FA5524866BB54CC1DE0C41089BE0DF3779228BE74B3A7D, C718E4597AD9FBF2817EF301 - 26: 1553C4DC88CF2C3D3EC1FDA42EDDB6DFA75A416B7B44B54BB933, A7ED3B1B5B6FB1D2758B2B3C - 27: C26D2A8A1BCD139A0569DAFB3045ECFC2E9B6585737A0DE1087FC6, 3A25E2A19168749453CB4B98 - 28: 4AF40789632C758ABBA8FBA77C9AE2C78D56604909C1FE09E6FCD577, D272480526D82F63B82994E0 - 29: 4B0C45CEB96F62E59B9CB3C23CF69D4AFE0AB3D7C900C1B81E4D6FE9DA, 4802C98DFB029B02CEECF731 - 30: BD184296B38AAFB94B804CF3EBF350ADF7B5834B84BA5088241E73B69AFB, 65F56C1CF714ACF98C7B462C - 31: 042D5B4B4E1CA64076E6799E20D8C46C0E9FAFCCDAB60945A6772E1434D049, 2A48F71F00241662E87B8630 - 32: A988536CABD504F0E03B2213AAF5888D5A00F1496EB37554C9CE47FBE4ACFC46, 8CE02A013587AE392DA4FB7A - 0: , 58F3B5346B3E6068A50DB36F837A - 1: 6C, A8668D8AF4F3BBEC5EDD233A1569 - 2: 6CF8, 733D8FC62F38C28C2EA2A131DEF0 - 3: 937CB9, B160441DC5C918C5E3F63997D6DE - 4: E438823B, 89B59F1C427F5305C8334EA1A03D - 5: 9CA0F63874, DB22616963019352286D277ABBF9 - 6: 963FDA7E1A13, 7F549A59DDD6CC5FDA410F6BED9E - 7: 50344F2705F32F, EB5356A08E13924B5FBB65BD7925 - 8: D54BC508FC984EEC, 2008F3C7E02DF9E74BA228D9D721 - 9: E1A5E6600637B980AE, CEE8F6FBBE4B188F2AB1736F27CF - 10: D652A99F07A5C8ACA8A2, F80E9DB8B9347A13433520349B52 - 11: 02A75BF0FC871885301C5D, 105539E6557337A79AC48D26ECEC - 12: 459FD0B4CAA48D4A528134F0, 46AEE4AFF16BC84B61A44BA89324 - 13: 1C87BF3F3A90B2607BDB21570C, 0C8615AA3A6399860492A0F96783 - 14: 2FC41996D186B82FEA1CB22B3DCF, 4B4C5F2A43F08E002070B67A8B68 - 15: A7EF466976FF3652AC47B77396E6F7, 5DA6C7969D0BDC85EF7F2DCC0265 - 16: 23537BD187392038501282749E76B4F4, 6E4C8A9858C819C50CC5ED640D8E - 17: 4C6FB5685F9E7DD67777B72249C57108AE, 14FBB70EE65187C5C7700FB07513 - 18: 36FFA05A049F063FD621FD6CEDA3D699DDC0, 9ED06859B2C8F0464D994D114414 - 19: EA09FB9D6D7D54CE463878F32E58720E7BF372, F6707A9E51842BB9FBC16E00F79B - 20: 38C7EF1C536475500E68C1C15D0F4C3CAB3B9DA1, BA4262E05148A36C94ECD6F3EE63 - 21: 790EC38F53185EC7218869B4E3548478C43783F677, 7929FC58F07D543E5F2AABFAFC13 - 22: AB34561C134A21A2E95309D2B1073A0002F7B6AB9959, D05245562F35019CFF78901BCB56 - 23: 1D0BDB251089665A618CF8C1CD1FF316B3CAF88EA82140, F08C427F5E1EB7B22EA903C50AE5 - 24: D009C870EB96966DFEA6C8A6F0E967A67E6DD6DDFC234EB1, F731E3CC444ABAA64E4656BE6EB5 - 25: AA094590980BDAD62D922C1B43877C0D3E84B069A9DADB7143, 9F439F4A61855D597B499FEE936E - 26: 8844BBA2622598E3D28CA1C0895B00100342C2C205EF7BF48CF4, 9B9060B7CAE58663102F92D3F0CA - 27: 2AB9997E52237A818543600E8D28981EDCA301F7B263D89B2340C5, 8D22429BAF36C953B22FFB1D8CBB - 28: 30938BFA06A873EA493019AF0580A0D1F6D4F98312E8244FCFB88257, 687C12D7F8A9D9EE1410DDBEA412 - 29: FAA295E33F11BEEBB803C1162748A25EE853E43D522CBECE89F0A9047C, FB99DD821D834B97103BD47A8DAE - 30: 31D93C1B2CB7AE8435004F3014B74B9E2E4FF88F96FDDD57830938F343F9, 72E080592A91FBF2EF7A12B736A9 - 31: 94546FC14CD055CF10227C80AAAE6CD9138DC9C11720018915CA3E9E3616BC, 19630100135CBD2B41BC291684ED - 32: B8750749821BD2363917D1B9E3511BEFDC2A5E39C7F546698BF181EF439E9831, 618453F748AC9DA6F82753C2DD6F - 0: , 8CA58750FDD25071B46924C71059DCB9 - 1: C1, 181BCCC4799A6AB959E819916A6363CA - 2: BE59, 64987A1A5F6E6D83F1D0259518898A93 - 3: 45E54B, A4AB464E7E0FE2E19602DE9AFB6C0AB6 - 4: 24437595, E303EB65856926571257D741354397A2 - 5: EE61D1A46B, 3B36A5A81B91099A68A8C46236206288 - 6: 6CF23F79CCCE, 41B92B476E7A456B940975D29A097AE8 - 7: FEAC00A6114717, D155DACFD093BD52C94A946EFE896BA9 - 8: A350E85BC70A816D, D0E027B25E460C52C2D635FAF5AA5FC5 - 9: 56C0665D2925CE9F60, 597EFD6721F3825DC6B19F94B29DE914 - 10: BBBA873737D2CAE039B2, 78B43F96FE5111EF177DDBA1E84A3D79 - 11: 1F2932542214C30EDA6844, 59220481B8B1227E7CD230BF64C3C648 - 12: 7329C72BB418174E3918CFF2, F115702A552639A2FEA689D739ECB3B9 - 13: 94912D3DF1A76C7BE75DBA863A, 96EB73928DF46058B814A9BBFD61B148 - 14: C75C4E841A4A6D5B44E99597C480, 0BB54B8712F123E0D70A4E0C253A3264 - 15: 9FF78207B8909102D43EC2B1C5993B, 8C6A5A78E40AB8E3006E13AF8E5A3BB3 - 16: E86FB463F0DB162ED88719AEA7D33FF3, A1F1FF57A7B4288CEE76918A7E731022 - 17: 0E61E39BDBC12869402512C22BF760B3C4, A5C2B3CE910ACF3826ED509C29AFC906 - 18: 6BFBEE8C30DCF9FC22AFD78F91A1A218F222, 8DE1CCEF80E96CF1C173352C4375E3F2 - 19: CBFD8B945CCF2375C3D01127B7E1369FD9E200, 7B2F8FD9D3EC65479EBC480ABF8FC964 - 20: AC64C5281038E9DF5F5290FB7EBFED8E293A5198, 94A5631658378A77B371AB06BF7F5337 - 21: F84059C2EFDCBCA6285466EF46F546E7015CBD1694, 9B7C50BD8778F473320975EC1E9E2263 - 22: 5F63187580F0768FA35C7F322263B3995AB8B8D485D9, 0723E2F953395E3E8A9D9A89B8B6C5D7 - 23: 0F9A6BB13A8FC04BC3BBAFC9CBDB04F31449585ADFF3A5, 83AABB2F5A1C1ABD773786916442907B - 24: BBF7EAD3FC21703A0B3BCDB32F6B1967410F8B2532B10814, 23FA924B90BC5B78997BA13BA39E563B - 25: 2A9AD9B9CFD89490E7CD19E1E560CC9DF41679BC20023BB48E, A3894A21C77F4E3C70B55A47A0298674 - 26: 4874868B08D7F1C222A972CF5450BAF885ACC0077DB709C5D2C2, EE1FB7C8894B8ED063C7C4122D3798B2 - 27: 038488350F72615EC351C31E31AE037E1873022BE54FCA4E9E2F96, 00B24A6A1F2D3AF85A27678C6CCA554E - 28: 3D8D75C9257956A333F0D4F11F6A9DCB5EBDBD5070C0C65741116011, 6CF3234E89802C68B991BB1E50F81101 - 29: 04C3AA265DC2B803D1D4881C50720C0BC016EA8E562C5AEB868B90DF14, EC5BF0A1415944A95C601497D4D50E1B - 30: 12AD8315A168D9BF80CD2F638E89AF90BDBB501C9ADFABEDE91A631CED87, 8294E2134FF6CD07027A22D7C12BE98A - 31: D57F978D50F158BEDACC97CD2F44B0C55E942AA12CDAA26AB0AEDB073BD8FF, 1EAE230E3A3E612ED6DC2066AD267CCD - 32: DFE759429208E69F0FC900276599E8E0F5E6D7DE90A18F567578056A93B835EA, EFD4105743BD5F5DC5DB5B66B05C66D8 - -CCM-noekeon (16 byte key) - 0: , 35B7EA4F - 1: 00, A39582A6 - 2: 82C5, ED6A040D - 3: 5BF43B, 4931C636 - 4: DDF9009F, 5565B7E7 - 5: 6D0B2A7229, E76F3347 - 6: BE1C200F5061, D1819D14 - 7: 6CD91C93AA8B91, 2109EABD - 8: 2752C1CF1C244D6B, 728C9ECF - 9: 024B3C5AEAF633F313, 88D6C14C - 10: 45E4E4FE5BA03C182776, EAAB64D5 - 11: 9FE65F948A6C893EC95A82, 482F8E70 - 12: 42D1408EECDCB16F330FE168, 9DC78B9E - 13: 2BD483E21972598ACDEFB65098, 761E3D00 - 14: 65B6C433BD09AB0FD2CD74478BA3, BC3A7207 - 15: 35E51F81654673905E898541190B28, 3E0FD5C7 - 16: 08926D7CFDC37D2AC51269E4F0DB8EF5, 1FED1ED8 - 17: 919F4DC03276A17D3BFC4171F511B32A72, 8694ABB7 - 18: 3DBCC2DCFB877911E77909FAD6DD6335C51D, 7C9AED65 - 19: A3117B7930FF91B66249C6A7EEFE5B304176BC, C98BE236 - 20: 8CCD40B837E0AC964A745778621B4FB35C7DDA04, 2DF019FB - 21: CB6B2757C4EE1B8BDA807CAD36D8C9A3F21D2007ED, 3976616D - 22: 3C21E9B9A307313E9F07075C97DC5845C08EAA45E846, 6FAD521E - 23: E9DB6E8A82A0B359371A8423E7BB5A2059F0BC9412D6EA, BA9D308D - 24: 581FA5964F3ED0BC41C0D9873D4599CB85685F1319B16ABB, 06658B81 - 25: A27620BCDCABAAF53A42C6DBFD847004107F565352AF1FEA4D, 866E6854 - 26: E203E3628923AA95840CE4048FE2185C77D61F4AB62AB07793A2, 62720D0A - 27: BBFFCB537743DC9F1F4018B723F9ABCDA55C400414AB326332910E, 42FAC6B9 - 28: A1ECB4782DE00A3D929675AC31F1657BD88B7B0814612E47C5255A85, 0AADCE56 - 29: 4C262A5CE02878D5BE209C954E986C12E79696FAC01678F4B490DC3C2B, 0BF11495 - 30: 275C1F0A67B71293C4037A02F930981FDEAB14ACE8662216FAC727056033, 5A95EC09 - 31: 2578F7E059EFD875DC0FEEB0FDDF98B837A096509D4020D29B52C951B20ED6, 41B59807 - 32: A8F5D34DB53C9D5FDAC408AA47CFFC40A14A9D8A700B235F0945025D2CE1C084, 6F6575E0 - 0: , B4D4BF129355 - 1: FF, 10EB6205C062 - 2: 1214, 23840693CED6 - 3: 4BB5AD, 9C8CFA59D221 - 4: F7893B47, 43CDF5D99E04 - 5: 0754A3EBE8, 2D625A6D4293 - 6: 8CDB9A4C86D4, 4D2E7C733FFD - 7: 4BC1CA4E164DBD, 275E45994038 - 8: E9DA1BB4D28AF124, 78884C50A8F7 - 9: C56CA7BC028AFF029A, B87DDBFF5101 - 10: 0DE39C77520A78AEAB51, 0892FF0CEB1C - 11: 74F10890B4DC3CF4BEDAFB, F033471CDB94 - 12: C0E24C21020A13C98C9AB817, B393359E7C98 - 13: A5F209898D74E886B0A636D849, 6CDFC00843C6 - 14: 28188F6BEC9707DB8F866A66BB67, 32097E5F3D95 - 15: 70A3B19FE8FEF1D3269583895DB816, D6E34D02AD42 - 16: C7E16B4BC8A30EFA1CEF4BE80DC05680, 5BA0555C8210 - 17: 64CE90E25D956FF026FDB5A13663BD9CA3, 2BF0D82EB4CA - 18: EF62FD778949D0E236F958D0A9EF814127B5, 11238D0A23B6 - 19: 269EA070EC9C8CA7A303298C5CB31840BFEB76, 2DC34E2DF972 - 20: 68398FED5B1A2C6A4AD92FA7805EA493C9E2ED66, 19C671E6BCD8 - 21: 29A5A9C1CFF83DBC3AF163D24BE61CD246AC45725C, CBA48F1DD71D - 22: 19F6760BE6DEF30C5608F0E1271F2538E5A263DF6C71, 1E8B8E1427D0 - 23: 225C8D4FCE2415D5156B99E7CEA017D71BA83EA7946B86, E4EF23A97D85 - 24: 1B78C59E98BF7A295DE97C19B34A527490639C41C37EF53F, 69F5D30B7A75 - 25: BB55D6EA66F23579A23D79BA552D1B8777A507D6312E2DB633, ADC9B5CFB8B7 - 26: D588E202A86B638A05971DCAA4A5C083C36526D4CCBE500A3E7E, F5A303748D65 - 27: 96322118040856B97F90685248BF805B75E3F5F0B3D8C71A2CD86E, BECDB7FEA5A3 - 28: E3792A62EA8DE67469C61F50CBC1F55F81CDDC243A9A4666DBA52978, 576CE58370DC - 29: 58C44C164EAA3A13821F9F9D8EDFD2C8FB0F89F9DF664CD6FF9FDC8DFB, E2EA3D3F8EB2 - 30: 4F52037A4647878FCE3E03428545229AEF7BD3622E8D246E80FFDEC7FB3B, 844722567F6F - 31: 31B0CAED1DEE49F7700852B30F176C68ACAE6CC2106DC8F01FB7233E3661B7, DB57981C9C2F - 32: A501CFBAF8DD3AEC3C8D5CFA62ABE4F19207A2122008B1EE6EF7A058D37595D7, 3A50394F34C9 - 0: , 487A5B182FDA5119 - 1: 38, 0D3D9AEC6AFAEFFD - 2: 7DBF, BC58BE0E10B36489 - 3: 054065, 2ACD3B49E423C466 - 4: 3B67FEBA, 396B88C53B76E87E - 5: 81CB6346A7, E185BA4FB3D0C71F - 6: 9E991B02DDFF, 052BA6AA8B464A8F - 7: 0BBD74D8E82FF5, 1307852E3BA07161 - 8: 1A24EA084F47876B, 2AA1EA8D2BAEE0E9 - 9: E7C39C21468F96B9FB, 6A45FD07CA99E126 - 10: 638A5ED11AF8B4AE484B, 01DD0A5455782B3D - 11: 37E5CF54E95BFFBDEF8DA7, 735FA92B1446D368 - 12: 90062DED159156474DBFD935, B0A0ADCCA901F8CF - 13: EB77C20351D1DD5C342105CAD8, B1BC6B38828E973F - 14: 6C85D1ECCDFC9D54180C9A8859EB, D5C25B29F67871A4 - 15: 19D510927D9424BA697A3D7E167439, 38DEBE08E9A3CEF0 - 16: D3E355515F5519C9D298475AB80AE17E, 0632E69CDAEEBE62 - 17: D3E3B1BEFBD13BBE6D282C4130E74B25C8, 4F44C30FD0B542ED - 18: 9C3E5A15C829F887EA73AF8055BC1F12B6ED, F10570CDCF4B8CAD - 19: 44A6744B7E70A017906719E40B75BC1175C1BA, 05C6582B955CAAF5 - 20: 7072C548E11DB6D2F98F0ED2492331476D9C3427, 52AC89629256F035 - 21: 814F56061FD13CE32126DC70833AE203EE9B092B40, 5F7C254023951506 - 22: 8F405BBB1AE995381F3183B4B40A27FE0AA1D660B084, 994DC776CBBA9EB2 - 23: CFE5587B38D1B655C6D952A74CD795E3C6220E32828E17, BF0C4FBF85CFF9E4 - 24: 49A21347C48C85F024162683FB242D488D9B80233B7FB47E, 09AD2043F690F40B - 25: AA89C54A47FBEBFFFB406C541A8DD62569DA6B66395E278522, 2DA4F293E0020D9E - 26: 82F3EC8CB199765BC953690C9768CD5A0D9E9CF801B367653D0D, 3838DB82060097AA - 27: 3B7BDE2AAA1046F1CFBB0F273F5C5B1E0279BA7FF2F103CC16561C, 0A7F1C54BC801CEA - 28: 7A5DC7F0651C778C5089759FB8D52AF64F146D4FCDEDA490A75EE93C, 1193B61A2AFF15F2 - 29: E6D9ED0CF19981960CC693AC2F9C41559C42B4ECFA9F6F69D326BA1BEC, EF2674222DEEB53C - 30: 64837403212AA264D7EC5796ED8F28E21D4B532D84A0F61D08890703CFAC, B5EA1E83906E0E86 - 31: EC41FE7B68639B68E70186DC2C80D2E58954CD11095385A3AA922C46B70854, 4F60603AD650A05D - 32: 2B2EE601FE378CA7C869EF31A10A122CC390A95CE61ABA7A7BD37C7F8D2C8BB0, 2DDC436D11F5BB08 - 0: , 688E4226867DA6007444 - 1: 7D, 4AA3F618F1FA443EA6DA - 2: B946, 50354F5D5199E28290A2 - 3: 418F18, 23C5A97420AA6E0306F1 - 4: 1F6A2E58, 9DBADAD3D81192B0D5C9 - 5: 4BF4A1256A, E6EFE325194EF6982B9B - 6: 2DD8B6A376CD, 058155698EC16576A482 - 7: 8EBD0C4D96CF64, 668941DFBB3AC9AF0C49 - 8: B5A8498E6717655C, ED4F7823D85276ECDF79 - 9: EECAD2624B60A42431, CFB5F027D2D902FA018C - 10: AAF850034B3C784973CF, F24C4094D34CEC0DB485 - 11: 013143F65BA0FE5D244D96, 94E327437118417FCD0E - 12: ED0DD239234D417126103753, FF372C6AFFB7AF19D46A - 13: 3F5C037BBC730E0B832A43D539, 5CEA0D8015DFBB268168 - 14: EE3496BE41D310155D40A9C1520F, 20DE0205EDD57F62EC91 - 15: ABBE5FA40B5532511AA07EAC75CA3E, DBE1689089D6E7573B27 - 16: BCB88C76058B80B0377B9303ED035F2D, 5501F083A8759BD31E21 - 17: C0CD68CA99CE506CE49F30D3CE744A64DA, DC4783676CFCF6D86930 - 18: 52065E0BCFCBFD6033B4D86563122521FAF3, 815693F0D68F93A7A344 - 19: F21892A2AE9CD0F8B1539FF993865D4969523F, DF387812151E9B153FE2 - 20: 650370BC603B93E57ADEB7857F379B5614E89E4A, 8238C3A8576AD738EEAC - 21: 684693DBB1661CD1E214CA13E7A2A6244B725F4F74, D35CD399C59700DC9F81 - 22: 758437094BF46983AB845FBD2189A432C59A17D33FA7, D46D66FE088950FCAE21 - 23: 42A144635F678DDA9D1C3D366CEF596FC314D8EDA1A470, CA131646B9715BD5D499 - 24: 133360EEEFF738A1B491296E63E4808E438158814DF834ED, 2B7295016881E015EE48 - 25: 60411B4DCC4465CD6634DB824EE1EC76F6CD4899EA26B8BBB0, D134F111EAD0B0212E27 - 26: 5E3D8B4339D7E70ED98CCC7661469D11BD58593F50D1D86DE048, CAD117EB84747891C98B - 27: 956C953F78304050DFDDE521D249D97BC140623BB266C900463C8B, FF5AB1BDC213712582A0 - 28: 72C6C612276FCF7BD584C1D171A9166D66B2807486B449ED8E6CBE38, 1745A9A91C959779087C - 29: 09958F3959A827F9588F07C683496ED0935A292CCFFE1BEC677B16C62C, D94CDE9F801971D76AE6 - 30: 9710315A9A609247B58A057A8EC42C338465AF1DA9D713764F5C300A8988, CE8F826AB035F9643C7A - 31: 858C6CF0438BD7B8F51FD0DA71E7DB2FBEB3C30B966C3773CC20FEA9E9CBD1, BB634C13AD3A646E1418 - 32: 3E3C0266009A84DB3FF2F7ED4F3ECF026D48DC81B35EFA77886997F06BEFCC44, 013AECF4FDF18660516D - 0: , EC1E1347963F2142A3E97720 - 1: 80, 9D59392B79AE8F2A5F2144FE - 2: 73AA, EC53107FB694D19262B39280 - 3: 422ED0, 579AC0733D35E87F5D94509F - 4: 748D2548, 469C148BD567F0F2CC93D15E - 5: 947D1C820B, F99CB85D02B408E7AAF066A9 - 6: 29C0931259F4, 8C7F00361A79E0F38414493D - 7: 186065EE00BDED, B651D04868517CF1ACDD6B6A - 8: 600F644F17FB16AA, 569059702FC103C38EBC4342 - 9: E8F25CEFD4C930FB00, 68BCC443604C7B371606FB27 - 10: 6D5490C0C3BA01DA0727, C90BC10FFAF6637CB5882784 - 11: DF39DB6FBA301FC7551A14, E5672EF0AF8EEDF350E8D37F - 12: ED3B504746AD61DCEED75FD3, D608E822A4052A3BBFD70C67 - 13: 9968B880BFEE7E5947FEA92A5C, 6E8D0A9D76EAB37793388832 - 14: FC02CEE739DB013C66FDEE214511, 7B4405D19CB929761555D2A9 - 15: 659E312EE900D46479A1608962E4CB, F6C445D22F0852FAB4CB2614 - 16: F5AAD79645A1C35296CD9A7B9B989124, FD2F62F036F00F116F232247 - 17: D9B11A2D20102EE444BD3528FFACAB6F06, 87537D7DCAA8D4DA385D30A9 - 18: F76B619EC05C6AE07BE2EA0B725A5ED661F7, 74461603C881D31A2117D637 - 19: 0A206F1691CEB4C0F9058A177B11E931132D3E, 7D08A98BC20EE30417095425 - 20: C5689E964A5E8D324F3264CC5B6FD0CF612B8A50, 2F59F1C36D083E24C8E8804D - 21: 953D5CE7542ED1DD1A2F5D059718FED89353133543, D6FCE6041707FD0A8032D4B9 - 22: 3890A29BA9EC6BE79368623945A8B2D4C87E0F36D85A, D7A6BE03291FFB2D9D8163A4 - 23: 811BD24CC17D11DEE2DDEEE97CF11D168593C2AA4B5071, 1B92B356EA9EB889C0212B88 - 24: E889B315072A5434E6E36A992D52A0113DC63A2700BDCE4F, 6CA8C5269C5233FB5C31032A - 25: AE37118690033E43ADC73F1A5E8B48D06814223A7AB2DB537C, FAE9A9A2E44B92C8A4279E63 - 26: 5BBE8E86E50B9DB37A5F052AF68B89E413A6AD726CBE2F530762, 30A7CD6E17A8289F586A7F42 - 27: CEB2A0799AA3E09B4097555D63488DBC8E95AB9BDEF38EE2C404A2, 66762C4ACE62ECBDACA653A8 - 28: 2215B484F6A7634E6C11B6E9EE97305C8B418EC5F9ECC0A0556F9539, 60D60520D7111368B75C6B76 - 29: E7506C6841724B9B8C6F737972872EAAAABE3C703A4602721A486A7B3E, 937E6B0647D018DF4BA4465B - 30: 0B5F6571E17EA3C85F75BBB8EF47ABEE2A5219E489AC91ED587E1677ABA3, 7567D3A42878F9E5CE6064E3 - 31: 5F241CEF337375A15CA59ECA776778186F0E093442D43123A7A43F0AC58047, EECC33C6AB0E00E50E538587 - 32: 4C99760B2AE4FE9D2A354E9013A3C8319C0AE6E30BE2BD915AC4A15C47B94024, 4B8773D2EF167AC66E8E8BB6 - 0: , 27C8C4599B7CE126302E7DFDCD03 - 1: 35, 46E18AD01ABE19B969C067A4F060 - 2: 50EE, 95E9E5C21E687E28833FE0FDA4F2 - 3: 6D9689, 721288B318116C2B5CC939260ADB - 4: C1F653AB, DCAF64978C7AACD832CC377EB431 - 5: A11514DC26, EBFCD4392F4C2ABADEC8BB7131FE - 6: 05EB25AFDABE, B3BFBFE84DCEB10611B02911516B - 7: 1FE235303B41C7, 6E7D1D646AD26307326303ED4A3D - 8: C7AAC7568DD46D58, EC28A3B48EE6F7D182E68E58FB3C - 9: 37CB0A70EA06701E56, 5DE3FE1B3A2FE2A0E6F540CD7CE2 - 10: 68C3278A4A0869A3C261, 2F92B8CC475D978E1E6EEB2ECAB5 - 11: DDE0FF0B38653A0114AD00, 929D61D258882E1AB5DD19271E92 - 12: 1BBA1433A9C78F1B70573755, 93D535FAE2ACC2D5264C363C7897 - 13: CB9BC8BC2C978A9581477800F2, 882B2799AF8F79C9009CB4425016 - 14: 1C7BE97BBEABEFF70B87AF21EB34, 6DFDA706A9A38ECF0FB8E49AD30F - 15: 5A13114BAD0C76C71E9408C00DB1E6, D40B277F69D0F162843A42B5AC8E - 16: AF12A453AE15145E8C35CC7B87D4B78A, 2C89591A0ACC6DB72761E7A0D088 - 17: 5ADFA4DE2993D21F694334F407F96D7CB9, E0D899E88D2B95ED8573FE79F5BE - 18: 4B5830080EC8EDD996C6B4D8FC98DBED0FBB, 5F69DE8B36CFA63E8155FACDFA71 - 19: B85D5FDF13AABF7852B92955EA8BCA83EA09C9, BC2C7315B5606AE12E5DF39E64C3 - 20: 1B90F0B1D19EB316D5B2839A96FA02FA3AEBD100, 39E90E603690275C337AE4EF33C8 - 21: D7BCABF16742C1F49C1096FD4970FB59BE7ADEB21B, 6673EA3B32BCD910175E52F1B7D0 - 22: BD42E814B93E612465652B129A7B87F0426062EF3212, 9B8387D1FF86CF64AEE562BC8A30 - 23: 200C1474C46BFCE02B1FF5AFAC6D432CFF6D0C832D59AD, 170B274B24F0BDE9977B0B7991DF - 24: 2862CAF6C93656613345C7A837FF6E62072177D47070D687, 1C27968A119790E7135A92F4AD6B - 25: 6F50869D10BCACD8BD04C3A026CD6A05824FD645F3B7A0A87C, 52DD531F11EB98B235F5EA317C8A - 26: C3C7009957EF5EBD0E32A5364E34BA38758E6181F40B56E99E5C, B31D0FF578399671DD6E5DEEF6A4 - 27: ED15FAED51BFCB11A289529D776697068E01EC77B499ABDBBE7852, CECC715DAD1E99DB8FDA1735446D - 28: 750DB02E87A10BF356C5E96119C4E2642CE173D7402A7A805F2BEFB1, 9D275FD8242267189C34F7DD7BF9 - 29: 3F38954CFE2BF9C51925EB0C87183C476BC9B0D19E16002A91F7851DC8, A35B3F0D2962127F9F0CA142ED8D - 30: 24C46F61E2DBEC500FF02648FC2B47E011C2BCEA2B05E1527947B6C4C55F, 012DE94FD8CC872DFFF50D97C3AE - 31: 3374379F35165FB4C839C32D413F5594225D673264D63293C05F5BA21A7D07, CA94D89306DB14A26D8EC10927EA - 32: ADE9088AC061B9AD365839F3CD15716D8BEC696FB0D22E7C51265C14E375769F, 6A0AD8218906CA28A335CCB0FC0B - 0: , D89D0B0186AC8927C19CAF48A5D5EC22 - 1: CC, 24B82E51BD5A2907ADC35BFEF1A35D3B - 2: 0D35, 25337F3F983D490739079F2157C07C9C - 3: 127B6E, 0433E047C0C190E98CF21BA9122533DA - 4: 1E4B3148, 15A5C8B3B1536EF7FFCD97A93268623B - 5: A3E0E6E1FE, 383218B81B5711761F04B519E97ECCF9 - 6: 52A626AE8A28, CBC0594326DC283373054C6E45DB446C - 7: 466DBD90E35834, 797D66510848AA4E458E447683A2668F - 8: 6F3107D187B9CD54, D847E8876A495DDDF600F7490CBC563C - 9: 5E4C6D8ECEE575181E, 1C68D893941FF3419283567643107A60 - 10: 535A1CAFAB385FAF9313, A5DE662FD310F54A7592B9BB88AE90DB - 11: EDC570C9511BB378693D64, AB9BD942A2625F81AD6FAF64044D095C - 12: 6CD800144844FED8C88538B8, 295E586901B6D87A366BBC82C251CE18 - 13: C4FC0AEBF156F3D33252E179CC, 72D699E1BB4945469BBC5828768FBC6E - 14: 8261BA0674CF82E2424CF5CE85C8, 327576C78371FC14668855C8BCFC68B6 - 15: CCFEA8B4E5DEBCECD45F0C48670A6E, 8BBB329096BEA2313AC76D996A59511A - 16: 657AF77EB58C7A5894D318AF8A3C7D11, EB113B1BFA43DD3D0AFF9E714403D387 - 17: B3849B330B6FD4D7F23BB12ECC36098CCA, FD9D371F4DB9C04CCE504162605F5597 - 18: 95BA47180BA506492BBAC51CD68D1F9BB07C, 8FF00CEB1494BECB534E01AF78CCDF17 - 19: 22260C0CBE823E2D689C8BF73BFD6D74CDC965, 52BA57757100571DB476A647E142837E - 20: 5F86D64734B9201767454044B516A1A6C9CF0102, 92227D23C4B307B368B7811BB950EA87 - 21: EAFD0F13B2ED5CACF0AA3C41DE175DE9D358502DF3, 3AFBFA85D2CE8D98531EEA8F49E78E6B - 22: 1DBB66C94B8F96168A553DB00455ACAD8AD0B91452F8, 3E4A5DF63967CAA50F8238FDB5BD2207 - 23: 6C0E60F7A5439E1B4932D0EF249A2930D4A15ECF94B003, 6EC5BB34BA2BC73CA38760550DED24B7 - 24: 755F187A21DF1CCAFBA63E2F7469712B0D8B349AF534BC26, 92EF4FA1D7A65DE1440B3CE0E4EEC490 - 25: 5DF1B52F25DDB798F23AFDA2C32C2A91D96F9FC339925BAEEA, 4939B358FDCC3C028A6056EA90654120 - 26: C7824F1F59F7B5A208554210BD74CD4B5EE51E6B0649086D43DF, C2FD9C7AAEB3F4F2279FE36FF0C3A6FC - 27: D2BB449C91EF4777FCD50B869578E37D2CCDF4E208FA847AC87E91, A832DCFE0DCC320C41ACE1BE52FF78B4 - 28: B656CDBEC80D488BE44A4DA93BB2780CC34F3E32B55F630F30C0A180, 72F689379E114552D4F22E3F082E5D21 - 29: C1DF6A0226461438F3E8A869E0619521C5816CD4F06920CE875B25303B, 657569DBFB435F854151E5284612ACFE - 30: 02D6C366FD5ADF9383CA1BBCA1BB3020DABE3707CFF5469695E38625BBE4, BC9DC4B629D150A9ECE8742972B255DF - 31: 5D3B04E75F2B917375AA62D8745E6B6A3002917E44AC04FDB3033E426B2AA1, 7452B32ECFA94FDB98DEA6B4E1A2A490 - 32: B80E143735A497C1453DA32CBAAD5EF9C1EDD2224A511359B46F5D584066F421, A3524C6A51A8205DFF35182D2E68A478 - -CCM-anubis (16 byte key) - 0: , AB71B28C - 1: 87, F6AEADBF - 2: 3FE9, F6F3465B - 3: CA39BC, D33D5A2B - 4: FE9980A5, 1A18A5BA - 5: 00CB97B767, BE5D6DD5 - 6: FE245152DBF3, C1A1C021 - 7: 593BAFB679A892, 19299527 - 8: E318AA6C66BEE542, D3356474 - 9: A32C1DD96DD36F4DE2, AB42E7B0 - 10: BDDC325524A06CCEA4CA, 78F206B6 - 11: 4E0E5BC72DC7DD4FFA2D1A, F9CD0521 - 12: F8B067CF30BEF6A015AD2000, 29DE07D8 - 13: E83BD79B49106FA8AD07335691, 15E1682A - 14: C061D0F9D934C3C72559B70FA4D6, 7B81683D - 15: C0DF2EFBCCC406FAF487F105A2D7D6, 3F8A3F26 - 16: 5169A5A3A3383F9189AC9C9A4946609C, C3651BF4 - 17: 56F7B4AE48CBA165D49A8A5B5297CA3280, AB649A2A - 18: 6F570A2E68EDFDF47DABB3F8558ED5A36E2D, 811232A7 - 19: C38FE782567F3721A2542818EE62AFB772F487, 19711B74 - 20: E7E465B1508A4CD21C1F00EF61E62885152F1D7A, 54A5FE6E - 21: 9DD396A27033DF1F3A52CB73FDC81996BB0007150E, 4AC3B928 - 22: 893F9F04D64CF18A74CCE1AF377F85C855BFF0825CBF, 1E7F7A6E - 23: DA015B9964FDAA8A32C3D4F3EBF03811D9910E9DB36DF2, EA035106 - 24: 12833DDA8F4D9538C2686341DC7D598005D8950A4FFD0933, A46D9744 - 25: 424301970C3B3F22936329FF78891E4EE5E9ED23BAC7F9B896, 036A965E - 26: 3FCE68C1FAE4BB120CA593FF36EAE69FFD3F50D5A47D00F0C6C1, 784F9BB1 - 27: CB19CE330DE8D666DCEA34B675A7CFE933F1B86E3E1A764D121051, EF172A73 - 28: B701838125A42FB8C359FBE566B6D7645DC4D88D42C26C27188CF213, 24B7B8CB - 29: 09A7C618F5C6364F10DCFAEB52952F05F02026D5ABEF3EDB17F5870C09, 95E0ED25 - 30: 966FD031EFFF2F4CD3B94ADB9397CB21A63A0EA650486584F2BCC2FC40EC, 90B00D44 - 31: D3AAB989859E768220B6EB48EA77B9D6EDC80B6DB29FD5AC3AB3759CA062DA, E5352B8E - 32: 9153C0F36AED8F4068C70E533B890A40982C24F3C4D56FA45D4C4FFD9AF13016, 5D1C6A90 - 0: , 4E9CA549B90A - 1: C1, 958B2B2F1A56 - 2: 492B, 00CCFE22B690 - 3: 93D4F1, F19AD8E4BCB4 - 4: 3BF4968D, 815ACA609FD4 - 5: 84CBC00D98, 576F8497D07D - 6: E0565A8C6A37, 64EF821005D3 - 7: 83A244BFD63D92, FEB30E5AA875 - 8: D19CC9CF4CA20E2C, 3F5B44F7BF58 - 9: 203D1B3A2D30706634, 7942EF75E490 - 10: 182A0E3FAF35B1BA8F08, 6E2E3AB3F97D - 11: 742A50B0E62B7214F5B3F6, D960363DA479 - 12: 307EDBB455C8092AB59CE62C, 0445B8CDA879 - 13: 17EF00195809B1EA020A05E564, B607F3CF7F68 - 14: DA3B142C0F74330381B06253035C, 074FF4F9A1D2 - 15: A59D8DB2D4E90C99715EBE5342F100, 04422EF83B59 - 16: 5D9CF01CBD28D4AC0A66261F4D923EC2, 7DB409D11487 - 17: 351F8A0FD746E3A39457CCF629BFC1E138, 03168446C0AD - 18: 06F8CCE18CDB6246E514816BD64CE4481C25, E1BE70349501 - 19: 4FFE0E45051185B8674C2EC67459AD15B8F553, AF510A6EC490 - 20: ADBC0FE9085A325AB5E5C78461AC0F8BDCAC3450, EF1F36B065FF - 21: 13BE251CA067DE50E687E85871FB9463566FD9BE61, 2FF112B6C004 - 22: B6EA35464D14B352039C462B4B1F873C8BEC8E46A907, 2B444F48ACAC - 23: 7F8ABD32AAABA04C4E13DF9AEF07CCB005496F72BD08BF, 1BCFDABD9209 - 24: 6E71737524EEAD07F422F47AFBB899680B4306421ED61190, 1436D07C0F75 - 25: 6FF74E6C9B28BBCE8E83CB6B1CA4D4CD209D459ED8ED9C8495, 102D4831FFD1 - 26: 3ACA9C97D976EEE28B3C21807BE9EA942AE0C358EF2F7675054D, FE48A57434AF - 27: 8AB16E1EAB05A30AE22DD3D3F1DF759E4365BF27806155DE0D91CF, DDE79234AA70 - 28: C9D3E92EC199AED54FA093B48367911490F2D5BFAC231F1D46DC2C94, 4F3C59F67636 - 29: 1822212843F3F92356D4CE428659537B673512BA562F49B6F359C97BB6, F798650585F6 - 30: B89624046F11922CCC2D3A7136A9AB7E729A320C58198A0A482EE5D491DC, 5320572EC92E - 31: 0C2A5F28E82A49E67D2B154573870B167CF2360D0CD12C29685FDB30B9155E, AE4B2D35A5DA - 32: EB5AE9AC897938F8C2CCD9D82BAE174E789C121354654C56A90B6F703B92066C, C6828D6D64CF - 0: , 2DF8D28A86675863 - 1: 66, EDC3A0DF4C36D2B2 - 2: EDFD, 44ACD3D29E65FCDF - 3: 63F0A4, BC492EE56338B691 - 4: 252CA479, 12E631D172AB3A96 - 5: 6FC4F08908, 94BFD1E606F711AF - 6: CD007835A4EB, 58C199724A97FC11 - 7: 668D574CDFC64F, 84BC151A0DAA0F90 - 8: 632B1D9AE6099F4F, A0AC55D873BC82C3 - 9: 637EDABAAEE0EC0B65, BD045E6BDA8BDE09 - 10: 4CDD9831DA17E7991B41, 44BD1827844291A6 - 11: 6CA6C0292BCA4A9CA12DE9, F4A5D65881DF5153 - 12: EE185AD7AE18AD9C8E847570, 07F493CF8799A3AE - 13: F611706570CBC5B8458AFAF7AB, 3D3B9B76AD689E56 - 14: 3126664FE06F0CBDA661EB9B3ACD, 9098E8DB93370F50 - 15: FAA7BC4E1687542C0079D5EE2F4416, 003013BAA34A5981 - 16: 72B567469EC1B6EA36C71A78551E4A25, F509F4F644DF5E4A - 17: 64BDC5119C3D4C6435148C394F52ACEF72, 45A0F7A922833C80 - 18: DED7EDC7707A806E81ED58F49C0B3E67F79A, DB61431CC747E360 - 19: 645CE24EBE1C86899DD52723D47BD12536746F, A320614D6FB1CB17 - 20: 8BA3F8DE32945566F907BA51144D762D492571D6, 3267C376BA83FC08 - 21: C09ED2CB39741199DB343ECDB617CDB344EFA4EA65, 7F1C605FD8906024 - 22: ADA35F762CDC5B93DAC22BD1AA375668B12DD818D014, 941CFB6B41C70526 - 23: EA8DAA5F6B54D78106B551B3627E005704EC7922147FB1, EF2A837967C19A32 - 24: DBB82D420431A316458ABE2688DCB0F41A9CA60911B0E4CC, F7B77AC3F488901B - 25: 639CB89089DF0E120EC331A48C4B76D7EBFCAE2C3079223D6B, 88582696826D2993 - 26: CAB25E73927390387B6EE350F012A8DAD67846A0DA5E343A4A1B, E3C330DFF82EC5FA - 27: BAE5EE2A382AECE799C257631DB4499EED7B4D2FE6F3EC7949D0B3, 56A23041CEF10600 - 28: 5610D1620BF2035D45AB4B8C80181446EAAEC17DE58079F0E074C9D5, 65E52C64CDA03950 - 29: 63C914F56E006CA64537A0168361D57B7FE23CF37ED4443C299D9B95AE, 2FF9770D546A938B - 30: 5437A2CBC1D0047D82B1022A24CAC26CA9DFEDC2AC869ACDA402ABD9A75C, 3A984CBF5078664F - 31: C0323E947362BF2F907615118CBF53AC8A9B54B46BA0CF118719D936810A08, 7462EB9FF59F9150 - 32: 66B30EBE98DBB0DD6FCDB652DABD9712CDA378C4660AC1098B41350DD1B95517, 0227D3FAB439D43D - 0: , 0BD368A074BF3319A70C - 1: 4C, A2A14D32455BEF9273EA - 2: 6B2F, E7742BE99B45680D9D52 - 3: 341401, 9598CCA07C77D8ACC839 - 4: 3B07038F, 54B2FA7EAF96815A0170 - 5: 25B671CEFB, D4A37A217E71D40ECDBE - 6: 104A6E20DD79, DE7DBEC319C60C9018E7 - 7: A54FDDF7A00FCA, 2670A02DC62B4BD75A6B - 8: C7C50EEE7789A340, 90E6028B0E14BC0AF5DA - 9: D671D471E7489D2DEF, 2DAF03C1259D6BC487E9 - 10: 586C6CB54B3F0F78B1DC, EAD457960C49E515B8F1 - 11: 5FE9CF6D2EC5C4CDCD0A20, E1BB0C8DED4C817EB519 - 12: F839616304E95FC2806C22F7, 8A934C38536203B9A837 - 13: DE0EAA5B092C82F475C94940DD, 42CD0CA364F9FD637CF1 - 14: 38F2337A69B06C0A336D8FBC9A85, 17DB4C30CFD6A129D53B - 15: 1393501A3C7449C65B484456BB621A, A49EF694568AAC2E5BDA - 16: A565C592E9D12C23786D86E7296A2730, 3456C3EBF81EDFBA7F11 - 17: 2AFF3F5219DA9B0D04B723B1771E76E1C6, 5357A06445519C40E0B5 - 18: 7D77AC4C14DED2462859E31707B486E662E6, 5AED2B1ABE6EEC156081 - 19: A215DF4793FA4A6655A30C1779570CE38D90DD, 3F727EE1513053EB6BDA - 20: 29BAA4E8A21E67BBC103E9AF735A79AE8F8086BA, 7AB416B9C488D58BCC50 - 21: 605B0FFFD4E1326BD3E2F90417B25F315105460AC4, B0FB900FCB09101775EB - 22: B3F10445F2D69B80D228FE4DC30786D26E2F2A0ADDF8, 7E94670EB4EB9255FB9E - 23: 427259C794333B435BE7C2D12218DAA94F36DF5D67DE86, BB262C6CAAD9F2795DC7 - 24: 8D17C13118A68AA1DC80B349B736936BD3252308C79E50C7, BBF31F916874C3A053BC - 25: AEFA086F978C06C336D28EDA79E3606AD80A6739AB41AF0787, 8B35B3264802C79B1D05 - 26: 747754E859048DF11829C72E4E8867AB113D78035BD65D5BECF2, 9928842B7DEE4EB519FB - 27: CC2520F6D258309A3BD56C32BADE126826CE4CEBE3AE32707BD826, BFED44D2F5629E57B1C6 - 28: 81660D714F0A3F699DD993316DB175497F5D9FF05D298A204E51AF35, 65DF3B1C561523E141A7 - 29: A6B6D58D630DC9AE228E05F1A57D364A067CDF588087C2D4AA14F48E66, 5AFCA2A11DA69AF59271 - 30: 3F22F9548B7FF10C413A827402E1C43E65699E2C3E58621C81F05E5F65A9, 521867C364616195DD08 - 31: 11EBB344C47D827451CE03A1F5EFEA48EA23B97648947A6B790C28D5F07764, C8E64771206E7DEC1E80 - 32: 3098A9599FC1A3463DCC49B9FC24F7130E572D272DC3B3191E27D5D689BB64DC, 797A8AC942504A112A40 - 0: , AA33CA8A59F64C63081F58D6 - 1: 1C, 91E30DBB2F60838986257E2F - 2: 65C0, 4E4421AFB2AC981AFA23D9EC - 3: CC4A78, E54332F163E912D63AD37DF5 - 4: 8DA44A70, 86430D2A7CB614EDCF873DEC - 5: D39284520C, 005B4E0AA414A0E799DEEB9E - 6: B6ED3196070B, 7ECB834826D1805265DC6A8E - 7: 41484A9CFCAA9A, E6DECABA65D7A89E70F99E70 - 8: 8784FDAE36C82D17, EFB0115A1AAFCCA5A2382852 - 9: 80B66E076927A77F4B, E5C5D52128CC0F6E7DD28D3A - 10: 7D1BFE89B3F4F6F8D697, E714BA51374AE87CD75B52CC - 11: 83CE810237616C1B71A491, F90CA8A6BDA2EB1EC8E21688 - 12: 7F725B759C02C52B369AD9F4, 4EA92E142855B1993AA8F2E5 - 13: 212A63E3502CE660C81176E2F6, 8C9BE043465D736DDAF73932 - 14: 03C549FFFADF7AC15A08E4F3FE47, 8886BD71E2BA3CCF88DE35C4 - 15: 374BCEA76296DF9DDE2B451E01083F, 0AF4C8E2AF00AE0F513DD264 - 16: 0293F4B398FE3E90EE28130DEB507928, E71920E937B4B730097774E3 - 17: 926D4166620E6B7A68239F063024D41A7B, 7360BCEC03446559B32BA6E9 - 18: 4536351E0B95F49F09CE5CCD8A44D7FD926D, 38717932D62F5FB42228A69E - 19: 84BC42FC41DD6218EB8B0E96998E5DA6CFBDF2, 6784E75857160B896F4317FD - 20: 89F585C8655B9A2541CF7FAC9868CEDD2A216CDE, 82C8B2E56BD8254A7F318317 - 21: 898330B235C07662CBDFCB8413DAD1C8151C91AD71, 3270A3708E2F1A595737A2AE - 22: B123E99E796E7F48ADF62D4C9E4300B6AEDC9BE1EF6D, 45E5F9CEF50BD0A7EB34C6E4 - 23: 1C3228DB2915B51FCF25857EE8AAF25BFC66496FC329AB, A05359B23A35E3663B186215 - 24: E7E68E9AD9F55DBCE85B0C0C363BBA901382EC751529BAB1, 1A3F31790CEEF3B5FD2C0EC6 - 25: 33706F7B02199FC03E2707EB8840F087831F3AE75EADA9AC32, D4460ECBA48871B84C20B9C8 - 26: 05E1254B97090376C05A48470CE54DDD3C88E04469DF998B3B02, E01D184EE299589EE814A97F - 27: 5FFE6B5DC4148A218CAB3CA7FDADA88AB69CBED340697D59ED95D6, 11D2188149842310AC0406D9 - 28: BEFC3F9634FF6E0C998F85281903BB608E3EC96D3A37AABCCB1BA977, 9C43962BD2A306F88BEEE307 - 29: 6483CD3905809DA99858DF439F4CF3DF31C522FD8A59C9C6B187B04818, FA5EE0A571ABEC60583EF4A4 - 30: 7726E174F7E2912815EAAD65C6A480DA36A5E6B698B35E5B47EE51820F40, 5585D6131EEF72035626A97D - 31: 8C91D136CEC77A9C3E5405FA9E8B3B46D5D85E3B6027CFDBB1EEDC7B67008C, 333D7355643B4BF54328DA05 - 32: 369015A4655E75B43D6FEE1EC1BE2265D7AE0241D80871AD8AB3A544145DAC8E, AE4C6AC73AB6AE2AAF0F9E1B - 0: , BF5AC4CDE625E058E8EDBB034B97 - 1: CA, 55A95DF592060AA1CEA97CCCB5E1 - 2: F9C9, 16039C6EB96D48986D31A80B9435 - 3: 7AC40F, DB966EAAA18A8B957FDC91FF5F31 - 4: 359C5C20, 31A8DC3BD5B2027F85CF4E6EF212 - 5: 0746EADFAC, B3FA76BE4D1BA4D2E4F86A74A447 - 6: ABE0641BD116, DBA74A56FB08E6D044620F422966 - 7: FCAE9FC1330987, 8433B6DF401480531242956C930A - 8: ECE8967732048EB5, 1B416226CC9304C5B8E4681CCC73 - 9: 352639B4A853067752, 6A8438878AC5FDCC8A639EB6CF7B - 10: BAF635C5B491736998AB, CF402168D68424FFB5D7C58D9E09 - 11: 3B563B57C4F47652F3AAD5, 5387DA8984B018C0704F230D3A06 - 12: 4E112E6F625140C02293F48B, 778B7F2F7EA7033F81B7F8E698E0 - 13: D1BC6F40C2413D183FB61C3BDA, 6E4D01262F06CE629524225D2A90 - 14: 639FCDA88ABC4FB721C6C5D41267, 1D0A6F12BCE5CDFDD8EC91CC04C2 - 15: C2A2A38C3A178859ABB008E27CD2BC, B66E5CA0412D371AD4785B5C5568 - 16: A3529A141AA2703E4C7C87A9BC3C41F4, 0BA07C5EB1C29D072B7AB29EC939 - 17: 04F6261F99286A65732A4C2B809C3D8898, 8E1479E6610656965E8EBFBEE3F1 - 18: 44BDE29A6336F21132C6CB1977E2939194FF, 31CB9FBBB144C8048ECAD588BAF1 - 19: 0E9D6C92CCE47BB7EDAACFDC39470A4E429F09, CC53221CC80B34AB18C70242C615 - 20: 45DFB47DD8B5218EFD260F20B03701317AF45C88, 605D31B956E93C4FE24E8C4893D3 - 21: 4BEBAEEEEF3B395D38854A32DA79A6E9A3984A7BF9, 1037058FBF3375964EA79D743F20 - 22: CF54BD949770E009253F32EE02545AE1E0B7FFE5A3C0, 1573EC4A7E0783B91C51FA957C35 - 23: AE7FBC0ED0F755E9BE1B88D954374ACB1FF223CF3B8E4E, 15E4E6FAB8BB31E83FB1225761BA - 24: 6CE8F93A1694A9DD55C1C7198B7D3669CDC3FA974E498E01, 3A5615A3E3EE7BF5EBE2906DEF56 - 25: AC82E28C5FAC7E4469AF2F6B69E12BAD3770FBD91AE39069E0, 1EC25C34DA00EF9F116E01929FAC - 26: 19A2E0801546C7F745B5C38AED82D01449BBCF92FC0268E235BB, 79A7F69C998984662F4BDF87C9FC - 27: 491E7AFC58861A48CD6046D527372146B68EA32A6977F458C01D8C, B495BCAEC5481BE4EAB8D873BFCD - 28: 46E3313090E578715C24B4198070226018FDA3F6978277A126D2C485, 2D7049BD49F081F2FBC6B4A304B8 - 29: 6451739D241307B99D24DCF2251288553F02D439B85897132CD54AEFE4, 78E34000020ECF7B852BDE6BFF1C - 30: A195DDDD1AE89B468AE258F36ACCE060F3BB1C2169A7CCC761921A48E7E0, 7739F2600B577C10B450A9C09CA6 - 31: 3A7D1C01093A42BE8C5BFE49EB5A7EAB4B794FEF0B9FF8442CDCE1C221178A, B2797FECD0D3294B48229BCD881A - 32: 987382F179EA41D6B9133F75A2DA4E782F206193D985587990C0756CCC31EB3F, 0007F41036F8C346979461D21ABA - 0: , 1C1E94A7743365D9C3FF56931C4619F4 - 1: 2F, 731DD1C55D332B33A1BD4E3FD01871B1 - 2: 3140, 69A336FBFCFCA8ED06B90747254E21CA - 3: 107B41, EEC3723B766AEB7CBBA5B8C85DCC8729 - 4: 1214C593, 80082843B913DD73DF4D6B0075FC254C - 5: 847EEF43B0, 829BE3EB8D601E9B9A84DF92FD44D0D2 - 6: A5A3FB6D4445, AE03BC4AACC5DC40BC5C2612EDF9E28D - 7: 81BABEA676244F, 75ABB4DE4C6B365DD97DE1C71485F05E - 8: B7FCEE1456F13B95, 8D6D6A7988A21A4670199E65D8646B7C - 9: 5AAF3CCD66665E6725, 32701FB19AC9557DE176AAF2C3C4F799 - 10: ECF4014CB0BDDD60471E, D29C687AC42B05F262815809EFD7DFE2 - 11: A16F7C25067CBEE242172F, 7DF9FF049CE5A2C6AFC2325BF09CDA48 - 12: 6D4BC17CA7446E2797C349BB, 73C54AE204CC86061CB7E1D39BDDC944 - 13: E7B2D2A7A2CDFD5FDC7FC6EC0B, 985BE4433617A60A58C12DD3EEA4D9CF - 14: 34A0B4B1971762DB723AF72581C8, 5D6282048A3CB110AFA011E6C608290B - 15: 9F7E7823C53BCDEAE6CF1FBC6F28D7, F53DFAA798882EAFDDC5436005E4AF1F - 16: A5D415F71A35353D4899A7529CD6EF14, 6A124F9AFC3A6147B0EA9D331104679A - 17: E6FF23C216FDC73C3E57E2BC0F6E001B50, 317C5C2737CED8A2E1CFA953CBC81865 - 18: 599A38FCEA92842739AD28C17012D7FDDC62, D656AC4B5C45B512964ED062C350CE05 - 19: 87380118D251D9B8FEA04A386BA83833A4382C, 55F7BE81356A1A161F2D6CBA796E70C8 - 20: 9D95184F27ED820AC7551F1911C97D45B2A87EAB, DE19F5388AE25646EB7FFF997EE99905 - 21: 0E84BDB52349584C2E6103F4D308C3BDAEB64C10DD, A7C99FF565ADE8BFE83589FD2A6DC9CB - 22: 480750BED0F02BA32C76C67F9303241359FC7A5D7CF7, 92AA4D91946F243FB1FD960927853A06 - 23: 0A691B1554588BF21A08644DB30C71FA782B91FB1F017B, 8662CC3F0ECB4F76372AC3D4C8081E3B - 24: E34673E6C245AED0A67C2C716A3EF9841BE2CEBCB5A5F085, 4A80085F12C5350442D899AE831550FA - 25: 26978922163F887FEC3771716392DBE3CDFF3DDD22EB526AF4, AA550108CC7693F8648E8699CACDB3D3 - 26: A8F57795A507AC7D0999B6B3409DAF174AFEFD8E8E2C011C5EB8, 12D51825D168F7392367BFA45604E691 - 27: 1383C840030BC3D62DAE34F8F60A8948A3073696B5784DDB626027, 5B81F4AFAA09828DF3AE9004AB772D88 - 28: C971718AEBA730942947C19891965F508BD34C1C8937C9648F595C69, AD18433692290F9492BC3407F07B81CD - 29: 0597D8E4F845C3E894CE23A900EEBD9957AE4B73784FF9B1F9AD41DC33, 55A7C454DE4FB8D051835CA3FEFCDBE5 - 30: D21332F6F79C31E57B70DF44BF8A780911FE21E26CC8F39B25E5DA5B84AA, 463FA66DA5BD5494AAE3164A6CBC614C - 31: E54D735AE4042F95BD0E01DA844C131FF429E482803BF061963FA0D87806E4, 42EE9329563F28DF889F369947291266 - 32: 01D8813E67AD0C00118ED947AD18C50F8C4B7A3676C9293DB580F887B41685F0, D47B8566383CC818C450B13966535B47 - -CCM-seed (16 byte key) - 0: , 2AFCC2E1 - 1: 09, 3EF60F9A - 2: 44B8, 5D371BEB - 3: 89D011, A04229DB - 4: AC93A05D, F4CAA91B - 5: 689FE6546C, D03D44A8 - 6: C2C46AC6893A, 54D65AE5 - 7: 8754D7A5142274, 955CF379 - 8: 69CF9840719770AD, 2A007429 - 9: 7B407DC8062A4240AF, 14CC7E1F - 10: 8C2325415BD1AD5BEEED, D1D54EC5 - 11: 7713A042A05F857682E444, 6EEE482A - 12: 461EDE1898AFE0662BB45C48, C751BC22 - 13: EC8B527CBE25308C57A3E469CA, 2BE8E0A2 - 14: 82681ABEDDAC0A4EDB6E4F06F1F3, 5A95EBF8 - 15: C0F09C287392F2BC8FBC79A3FBCD56, 682EB9CC - 16: 3561A3AACBF72271710D394D3B7D2A0D, 40A46241 - 17: D4DADB962F1D31F4B402DF2BD8F8AE0642, E90CBDF9 - 18: D312179A4D62245D4F543442E30B9FC39B1E, 8383B4AB - 19: 2CADF48B2AE77BA0902A5F782987EC51BF1548, 26FDEE1A - 20: 43555C80C06BDE43B6A8D513A6BCABE97E61CE33, 3B08EDC2 - 21: 9EC1C33D52C0B130B8E244DB55FE2541D5BB72A79F, 179CCF41 - 22: FBC54004D3A1961DA2A13AFFC19880F222C4EEFAAE1D, 549DE705 - 23: 07EFBAFA3F6005E40CA3380C9388A1A88D4830F3F49492, D2BEEFE4 - 24: 0B8B65D99121BE040C2C7EEBA3435F9999FC4725AE519EAC, 82F455D1 - 25: B3440B1B57AC6C93CF95B029D6648D777A4799869BF238E3B4, 00F6B632 - 26: E460FDDD169CDF73F87F919F21199BA7A3744367D15FC42D24A5, 7DEC02B0 - 27: 53F51FF7778144DD65C25BB573AE4D7F9B6065A47BE854A51D5AE1, 7166451C - 28: CC84BEA11A4099F83E32A3D9EBF23EFC6851915BA3B760EAA1BA8BFC, 45ABBFAE - 29: 72F1A427F6D56F1C1F950B80B9B67EF45F4DCB3653FFF2D3C799404A80, 284B5344 - 30: E14996B7294DBF91C3E009B8D3058EB091C8ABE78EBD80847B1FCB474B07, E22363E9 - 31: 177F877F91F65630A7F4767C7D9D40A5882E10E10A415C9A840D01CC8A4190, C89A6C07 - 32: 82B5BE4F2803BEEAF2EE576C09D5FA7A36FA96F6D4E3ACBB41F685CF8981758D, 8318D4B3 - 0: , DE17B8429D4A - 1: 76, 6424B895C4EA - 2: 0D7E, 223AF71B120D - 3: 216292, 8FE62DF2C9AC - 4: 4084C83C, CB8B06B30D43 - 5: 5951282680, 46ECCF874E03 - 6: C9EE51CF93D7, A184BBDCB953 - 7: 389169C4B90DAA, 1B6C2A9162C2 - 8: 5C30E295DE1FD57C, DF22B44D81E3 - 9: 074493002DDCEE7A17, C47A975D9241 - 10: 8B228335BC01699FAEAA, B7F132AD3D4C - 11: FB0C2ACF79770C589449B7, 4FA3BCFB604A - 12: 83C0D4FECE57679E9BEA923E, 4BD2068CCDD7 - 13: A95B8425F7CC668D84DE85CB55, 01EF5B0060EF - 14: 712F2ECB760303AB086004F88BCF, 2F126500823E - 15: E6C2450CE041457433E16FFD1C2477, 90C81A6D701F - 16: A8D4810967EDB33DC5CA97368EDB0933, 5E8E70864717 - 17: BBCA9CF89A2F0DA4ED7E478147B0C473D1, B3E78B394F8B - 18: 9C417A211BCFC3210F602927C3C99642A139, 04EB482D5D2B - 19: C5C97F35B540B7489CF7C098669FE7DD6F56FB, C4F67064D598 - 20: 0CFEBAE7585BA825B11BD7EB0539B706DBD3F7C9, 65C6E7754158 - 21: 4E3B487899944B8E39DDE863557DC38F47CA39BF34, B011BAE75947 - 22: D876CCA7EF9F2EFCA744FD9665C3016C6737FBB7648D, 320B063AF862 - 23: A2281FA34B4A9035ADD2D6B913D66BA011A3E0BACC6091, 7A815B613C1E - 24: 41E5685B5EBB7C9DEC73B9B950B8F86675F1F6F15FDF5469, 7CB9A5D72226 - 25: EC11762EC4A926C2C4D2C64A13FFA00D7250E5F3DDDD4FBB5B, DC164C3B8B48 - 26: FB04F6346F47E2B370D65A3FCCF59E04EFE6F32AEF587D6C0D7A, 6C6046D6402F - 27: 9589A844EDA4D75265E507BD4299ADDF9C4AF18381FB69057B9ACE, 87E76E35FF20 - 28: 56B1575CDF55D80C3B1E6CC6AC22EA5DF0649ABE93AF62B65282991C, 167EB1AD6C21 - 29: 5F1FC6E83E3F4D96FEE62FDCF202F59D71B2250C27B209901C2A2801AB, 314534A13E2D - 30: E4066739771B30B16ABB6B2708786648F7AED8C8E59489B91C6CD6077986, BF0293726874 - 31: 64460343E0BB706A9AD8C5623C70B1EF30E421135AD40D4676A7F05D51A87B, 42D43BA30011 - 32: 20A84295DDEAF1D0A1D3F6B81B4679247B6F308F335D23C835641A2024F5F488, A29535DDA7D7 - 0: , BF0D17F8281BFB75 - 1: 9C, 38501DC5C805B7DB - 2: E295, 3506E32FADD9838C - 3: E96334, FEDF951B5CD3EE87 - 4: CEFDF838, DE6470A6163935D7 - 5: 2CD9FAF005, 8D70D3BC485B1AFE - 6: 983441289650, 8B4F4553A51B2E98 - 7: 3BBC75D0E860B4, 1EFF2A1E46540DBE - 8: F5F758641564931C, F58D657FCF761400 - 9: D200E76A55989AE3FB, FF086F5D5B0F6856 - 10: 3E5569C20CFCF41F53EE, AC3D9EF84F059DF6 - 11: EB364AB71C5C0C56FA8ED8, A1DC0B8C7EF1B1EC - 12: 41CEAEA8C2C0496F37AE5D16, 25267DF790E5681A - 13: E99CCB5E8684B550967B4FC8C7, 120F341973092790 - 14: A79EB54B41187ECA1D428706A75A, DA367266BC41A68E - 15: A90237C084FA487EB4539DA7451FB8, 71D09434DB2C290D - 16: 819FC53C936104BBF8EB439A87E525E6, D1A103FB5FCBB7BA - 17: 0A4D5A9FC0B7849FB084B6F0C46EB118C2, 1A1331363610B7D5 - 18: E7EBCA906778A63221D71C04F7993225FC6B, F0E0FD2BBEB85D28 - 19: 6AC7535DE0C839C1956A7A701570BF8C471F4C, B99E535D3392F7A1 - 20: 0F928BD3E9A1B6307D993B3F71E1DF75FF3F0D17, 6ED36BDA584ABBE7 - 21: 572C7717CB7BE9066F6F841706107F7124E37E37DF, 1A8F955760504264 - 22: 16BB7DBABB143D6F53A51F1B17015649BD32D3E5D89E, 7C20CA8B181C6AE4 - 23: 161A53D32EB74A801526A37238BE5A0EFD268CA21A0BC6, 8D099788646B96DB - 24: 9AE39882E6878100C96DA8DD8C8699D8EBDFF588C1830072, A5F8009E4D311F05 - 25: ABD329BA24F11E695FA89F2B6796914569EFB3BB21F992210D, BDB3C6E8BE2146F0 - 26: 5D35172DD5B3BED77EF29B0C336DB1BC9E9533BCDBF49D4D164B, E4F82FD58A043C95 - 27: F46CE49DBAA2B8C5F735092918C3C3B6A12192F549EB29C76BBD7F, 23BF6B82E8701124 - 28: 6467C97A46A658A7FBC92E073D8782B967BBF83EDCAEDDCFA522DA01, 2FAD25AF04584936 - 29: 842C22BF08ADA5BF125A27DF44700F3249C2F9DBD29CA66A50E98CBCC1, 535AED1906674969 - 30: 80408975B7407FCF6E6858915DC4871F9CC2C343F4E4ECAAC69656F7A438, 3816D9015E27ADA5 - 31: 6CD8B193F2AE56C84576986E02F6F99B6DA0CE6BC6D8171E1345775918A6A7, 9A1C5C34C3D55912 - 32: EFBB7BC1F8A791A6EEE31E58BDBDD927C40E8F3E35A55356B0E91E27540119DB, 77879CF90C878E7D - 0: , DEF56192714C7DACF3A8 - 1: C8, 98243616296F4F169A91 - 2: 56E1, 7D828CA2B366935EFD67 - 3: EA6680, 8313FE8998A440F74A85 - 4: 5505C334, 1BF488850C781A3CD7BD - 5: 820F67C332, F30FBAE4CDFAA75F1A8F - 6: 1B60CAE11EBE, 1F9F93BBE2BE0D206AEC - 7: 1EEDDD1913C8D2, D13A3539FF91213A70E5 - 8: 32D67E4A3DA5CAC5, 01D7C34CD986D07C9D58 - 9: A27A0DBAF15AF6F0D6, 9E186C8C8F998D398F15 - 10: 6F1D01C5AEB560F06D0D, E7E910C8CEE9153A7894 - 11: ED3ACD1BA1BC6DB8E1EA1B, 6461352DBFC2CF66F9F5 - 12: BC48C056A564F8F883353AB2, C67D128E0C9D31BFA7FC - 13: 8EE87B6EB441C93CD714207D50, 7235A3A863205F1CDD81 - 14: 32A46FBFDB9B0FDAE1D80E1BAF26, 3CF3E566711D36170339 - 15: C4392DE8A412F3C0F418F92539F422, 9680900802F605AA3A10 - 16: A84B6B8B25D3E444EE656CE7DD105FDA, 6E7F616C0F1379E212BE - 17: 7F59CB354A662181E35FBBAEF39ED4B8A0, 6BA90D1480E51A91C47C - 18: 6141B4D76F63CD2C92F0B046C0CBEDC5F562, EB4C39F7DD6E358F2BE8 - 19: 6FF82B0084FAB154F46704F53F89C5D29293C3, 15059D73871661C0CE07 - 20: A21688FE147B43024C4A1AD75CDF10EF972D6A07, 767D55FFA6C28F0B427B - 21: 949217BC448F93923C6B5A3B6C22D6E00F2747A029, 96086B819EF6E2FBE4FF - 22: 8C97DB839C6E2E8818DE00B8DBCF8D45FA8E1432E40E, F5C8F1B8C0E421CA5022 - 23: 1BBA078D4F41CF11811FAE88A5911FA668B60B7B65A8FD, 7D9AD6FA2537A294161B - 24: 5C72E9EB9C9EA6B01047BDA5CA11AC617393423A047E14F7, 1575D1B9B29683364977 - 25: 808BE332B5A247112FBE3E69DFE78BFBA42B626E9AD0CFBE11, C32B2A42F4823627A312 - 26: E66744C0CABEA91F58D6BC7319B3C9BDE81651D95D9EA0DAEA56, 4AD26A83F6160F370FE7 - 27: 547C1C1B0F40614388398D426BB1D62FC654D3D1C35F65BD71D56D, E8F2F9918BF6A2C48164 - 28: D3748C1ABFD13AAB50DB56BC285B3E0F87F62B7D83C367A5F588F7BD, 7621688BA186937D5108 - 29: 9D0C8ED8ACE43AD1744905F27DC463C487082E3F34AECA4B65576A1249, 9409D4BF1A238FE3230D - 30: 2B9045154FCEF28A66051CCFF8AABCBB6EF7A84866FA25D22FB7BBBF8193, 79BC619C2548D7C6D958 - 31: AA5F7B6930E39DEDD73F80DAD3193784E8EEDBBA80B1FA0931CA6F4EB6037B, 821341EFCC130D5B87E9 - 32: A37370A51A764FCF528EF8F6E3805B29639555D73B702158A8E71A20C7E33DD0, 62847028B5852F654783 - 0: , C50B14E87CC327220FB656EE - 1: 28, 23F37C53A25A6CA89643F1FA - 2: 64A8, A094FA7FC1C2A99983B3A1A4 - 3: EF8F34, 4B3FF5A67C54D7733371CD3A - 4: 4C62CA53, C34938ED9734EDB96A4F6E4D - 5: 516EC93249, 1C0B8F64298D50CD9AFCC316 - 6: 8B4A65883DAA, 922962A0E3A01002087FEACD - 7: E879B4B474DB01, B65C560A2002A13B74840F75 - 8: 9DAC32F3AF090E4D, FAF30647C809896BF0B14C9C - 9: EC91F1CAC183F83A0F, 7EA2A1B674951DA7F4F8BD7E - 10: FDCD55B3B9ECBAEAF9BF, A6118104762708980913F2B3 - 11: 0B2E40D508AC6FDD1D6DA5, CB072887B14EC0C4833E8304 - 12: 2FDE9296886E2DE590DF8EC0, 2C13C41B5DE0B7547A1D603B - 13: E6C9BD4F67239F4AE67A872A4C, 669C7C5FA0863E428D92E150 - 14: 963BE265F43DDC878D0BC8FF300F, 1203F00A2667DCBC84314084 - 15: 6E2A9508056F4954D2E49FBF8D8B7A, FC05E4F35041599E673074ED - 16: C36069C65E908FF1D20BEB48F0852CF8, CDD25315F3C5D62291CB0159 - 17: 06D72DC7415621B462E7D94C43A0B98986, 4F302F63A8E446F6A718CE97 - 18: 056C8A2C1DDC9C1B408BCA159F1B9FE034A9, F854E71BE4CD9E5D1757FBE7 - 19: 73E5A1C119E542334DC71AEE314D9F3C823478, 6874E52E48FCF12FCDAD29F1 - 20: AF0F968BA276E9F219C155D4C039B5601448FC92, 2706A7A5AF83AA2C7CBB58C8 - 21: 3FBDE0DFD651025AABDBBBF22FD4D4F2498E5E1477, 714C96B971E0838271A4A650 - 22: 30A4C0883B583D6E2961334EECE890949D7FE3DC143C, C89810D3FF95B5EB40F6FD16 - 23: A1E22CD76EE3868C0C85F2513631032D6D1E0EFFB7F2C0, A265F2CC80051334A4EBC786 - 24: 16729F07A582FD610C10032C35398B3DAA8324D162E4CEE4, B064531DCB50967E564504BD - 25: 95673674A54642FAE3B9A06333139309DEC0628ECC6880E341, 9F941E49D3755EFE79D4D081 - 26: B00C239789DA6160780CD3E096B35BAFD436FDEA06C6D399CC7D, 6FB0489D3BADE9A3CB38F87D - 27: CE4506F3F73ED4F6247EB6D56852B9C2BDF3E38701D7F5D9278F5A, 1E2797EEE624FAAFB24472CE - 28: C381BBDE5BB27F282CF93D4C486F073E18C90031C9D5A3F1F0088A42, FDEA265C92FF6DA1321000D8 - 29: 8146D8BEFFB3955D9955F839EFAD2452EEDD03D0888EC0FC379CD0BC01, 4672226599EC5727469FD0FF - 30: D3D179E470998DCCCCED0C02997076BD601E8ACA87E3A78705D35955E856, E60A2B213CE266F1B7320B22 - 31: 08DB1B9A0CCD9217FF18046E5C7D952A7EC3BD1769D2150C12FC36B01E3D59, 0522F5A05605E74401DF360B - 32: 434ED6CEACE9C912C93CF485162ECCB05DD7719E725BA179A061EDA72222226B, 4EB1909DF979121ABE72280E - 0: , B5A3AA4E6A4E5107B75DA97339D0 - 1: 82, 0A3B61C8B9CA4365FE40261164B5 - 2: BB23, A7D88D2F1B304F8B3145425EEE0D - 3: B556B3, BE5AE7838012BBE2FA9728D43204 - 4: 623DF371, 609C187B4344785EE8D7AD8C0B92 - 5: DF6AF4182D, 5D56707EB42AFD926F2ECA8D7366 - 6: 66BB5CC3863B, 4C924F7A008D0A99874E6C2B8A0F - 7: B8C6643A438A74, 186ED7BA349D0CFB223E2CA88F9B - 8: E0D7D00B2121609A, 7FED03EE7B0891472C1C6112BB33 - 9: 42A7561B695DD7793E, 149EE4B6A349FF5DB2EBC3D7CA4C - 10: 45FB1C396BE631EB07B4, 6C5BE83AF3841F62ADCA476FFAD5 - 11: 398624CB9AA95252C551FA, 8E990498CB5C7D78D2EDBCEB8C52 - 12: A43C28E4EC627824B1B2C39D, 92DE639B8C0CEC44B962EAB6803F - 13: 36E12AC64C25B55333F88509B2, 2DC45AECECFB629F319F9584E745 - 14: 21EFB37783F5BAB0A83DC6BD92EC, 6EC26CAE5C2B84B3F76454E058A0 - 15: 6685A9036805D618DE85FBCD126FA3, D6DF94C44CAFEF973622FA549666 - 16: 57337DCAB2A2631D1F727F3B16AE2222, 1F71E9AC7CCC5BA761B427E5C827 - 17: D4E1311C0AD86B18E58B8C45B50521BDDF, 11A2539B33E5167E070DD70EA4DE - 18: 15B9A9338F53CC08AA269E9A94E0B17BDD54, 9919B660717EDAAD514B413CEE0C - 19: 06AAD7261EC614E4537353C06A317C1C2B280B, 1022140D9F3B016E1ADFD82203B8 - 20: 3B1433D96F3C35C4B42B119EAA6BC1591BB0FE36, 3C1B4D49D0A981FFA52AC6ABBB9F - 21: 9BD27E862B266ECB62A645A522710D71F0003AE0FC, 5D29620222B10E8DA3AD0547CD2B - 22: 6FAFE947061A0605B7D694858D775430B9B4188B334F, 2FE7FB9ACC02437D98D348DDEA09 - 23: 06AF33A04C12D79D1C2FC891C46CD621F75D09059AAD41, 96C98B68F667F6A71EA7381FE6F0 - 24: F8EA39ADAB977DE837CE66389C4CCE4A4B8BFAC9235DAE57, 5B4B4A50A7575EBC32AA7DAA880E - 25: 37B65A453D374B59D41EB9A4C6F43CD3298D9451D03D1152B0, 22700C28143DABE8C758A6FB390C - 26: E6BCE433C99C18ABDC8505CBB742CB752D385B4ED9FF93FD5231, B3CE97E42793ED69ADD1698F0A50 - 27: CE133754A11601A096AEBDF86A79DCA8850C7C36BBA77AA54AD924, 881A45EADC57B64EFBB4D7B31AA4 - 28: 4E22BD3B81AC381CB5CB0994DA48B6FFCAAEC8B1C7719620C4F2E207, D2DD40B6FE0D4A465BD20448241F - 29: 99CEBD9C32D527BA59C9CFDF2AEBE0FE69B46AE3A66818FB60969ED149, B2649A0FECDAEE9A1090F18AAE56 - 30: 1D31846387CCA9FB1C507F125883C5501805E19452AAA194D423D11E7D93, FAD9E7AA865AFACCEC271DC9C8A7 - 31: EC3ACBDC93630EC6A6AB42D90709953120DAF24199A3E9742A6584D7E723D3, 2650D9EC1DF90108EF99D59A7CA8 - 32: 1B60275E8116F4408A2289052021DF06B3FCBA352F0E7D110DB61A22B1EDC1E7, 09763DDDB2A886573ED05B352226 - 0: , B166C53BAF39DCEC27CFF1E4383343DC - 1: 66, 209B88C1DCFBCEDC1610FC02D711DBAB - 2: 4455, 800F6D996F79CB1D7FB6557F8452BD40 - 3: 05B4A6, A97BFC70A7403A28C0C6C26DB46723D2 - 4: CA1C1CB7, F3C4580878968E2F035132CDC910E20A - 5: EDA704C4E9, 74B96A407603A0153B96F6F97DBFD1AA - 6: 02FDFCF69162, A2E3AF61282EDA6CCAFCF19E21754AF5 - 7: 65842F29F72E05, 1914F145BD1CB6434D4D5E8BC34AA407 - 8: D6BCA9C1FA05984A, EA61F26A9C60E38569D0CD24C0D5D447 - 9: 42D9B4B163942A6DDF, C7B8EB00A0130CC073801063929232C1 - 10: 049B3E2EFA2A9F83C7B4, 716367E1D7831BA1168FC9D40BB18D34 - 11: 2F077EDA9568FD499CE4DA, 1B8DAAD0A748F9FFD97F528DE6AD977C - 12: 3ED806390537697A744A8E3C, D723CD35B570B0017A130577FC254EB4 - 13: 1D6917AF56F24B519AE212DD41, 62FDC2B959D49F2C9E5710BC815286BF - 14: F50A35634AF5E2C0DCDB3C5E8F9A, EF725D3C00ECFE1BC40C63893DE7091F - 15: DC9FB838D1708335A553064EE293E3, 05AB998FA94B9A3EE56220A3BE924A3E - 16: D361435D348136AEAF6473F3B1560729, A128D8624D49E2995FB72FABA89A1A99 - 17: 59F817563E417D3B3085A696CB2B9440D5, 4F03E83326E3ABAF94D5BA4B456B735A - 18: C2F6060AD5D37C9B8FA29684F860B3C0BC49, C5471729FDC94A10675038F5355EFAFF - 19: AA26C1093019C78132FEC29674C7EA9C882E0F, 6980A3EC62B42C456D219ECAFBBD2775 - 20: 05D478AD85CFE512D78B04DA3C14E67D381D1B41, 446C472C5F6669721A6DEBEF32EE0AC2 - 21: A746C4A3FE229E567C8DC77A95D6CC6E4F31848BAC, 2563D3376535DD74364F6B7906611FF8 - 22: 679C26A66B4516189440111447449E46881CDFE5BFD3, 7D364E496529C896F565087B6E064185 - 23: 5FC3A0462E0F2B3929E16306893D36B910959E29EE7A36, 4282D7FFF6A5C6BD73FC101442F96FA1 - 24: D94C28A37DC9E7D1AAA00E82C740B162B576ECB23FD7F3EE, 3A90C7A8136634CBE936C92FA37FC2B4 - 25: 0E34A2E0748B6512B2134B8F11BDD41FA0360E4035B4C4157D, BD002D16443EB93AB072861A5896CF0E - 26: E5A5BB9C84FA5E498FCE4611B9E82215CAF3BFD8AB17D87D9AF8, B2A8FB3D4D355CFBA8A3A70068D4F608 - 27: ED8CBD5810B0E16018675B0A0C88CC1EF0BDB7BD2C9DFAABB1F668, A64195A2EB11A86608F2BB8C0626BFAA - 28: A6AB2259DC55243C46076FA29AD8ADA08F0BBCE84A4E59B7F2E852B3, ADA6CEFCAE0C956F57B16448EF5FE3A8 - 29: CC86CE3CAE147BAEF76A273317B9A238C68AC014236775CA508F25FCFA, 4B301900E97EDAC0E0B1F9A99B3245BE - 30: F91087FC39C1A9A53DD123295925C5AC4558E1D370396F5EA200C44E411B, 4C8CB4B95C4B881B98666BA77AA3FE1D - 31: 8AF7BED13C7D97427CD2671B47419260999C3D294579E08076F1E8834FE21E, 71E627039C9496F009384EEB7DD131D6 - 32: 8828D24E62353B25EC56F368139B2732CA91BFC01DDA2211F07D77AE4DB1A2F4, B2782E4647028B3CB064202A4743B4D8 - -CCM-camellia (16 byte key) - 0: , 9F35474E - 1: 06, A1590304 - 2: 9B44, 07898199 - 3: B4A4EE, 67450BF8 - 4: 6D65C48C, A0F2DEEC - 5: 26BB502155, BDFE96D5 - 6: E8D40344FE9E, 924914C5 - 7: 4400F34F53BE78, 03DCC77F - 8: 5F70A8B247DD27E2, AB457616 - 9: F7B1393FE31A0D32F5, EDA145CE - 10: 67A32908A5F322E51EDF, E76E61EA - 11: 1A3F72FCCE8F0C5EA19DDE, 5EE2812C - 12: 0F9CCE26E235296952E2723E, EDC11F84 - 13: D4017ACBC4ED2FA43A48E703AA, 6DDD800E - 14: 5CC484E1E74D0740F25AF0ED23C1, A1D2B132 - 15: 744C674349AF4EC528A62F3516B2C6, B2FC05B6 - 16: 18D72501946F01923174DD321BBFA13E, DB7A26C9 - 17: 990CA092F8C54569EA8FA853B593CE3D14, 2F2A5D5E - 18: 73740B4A3884D5345B17412B8853004FCA1D, 689CEFF8 - 19: FC064A99822165A8B92361A96CFF61355D8BF4, 90D6D350 - 20: 3F50FD24600EAD4491DB437B8808C89155AC433F, 7DEFCDE4 - 21: 14A09259E33383824E6B6A859A2D5C88DDFC6A1244, 42F18041 - 22: 961D7A1E581D2633F9BA5EDDF07C76A4397A64F0EF67, 43D43620 - 23: C1ECE3684E87E5F2ED5882086D1FB65DAC73EAC20F76A8, 12FFF12C - 24: 54AB24D639A53BEF5F973E23EEB252DFBC81FEACB383AF1B, C3469AE9 - 25: 3A91FC0C0DDC47C7219F6BA7280B286834677FF8A4595C8796, 64F480B2 - 26: 1EE58328C4A29F6D34A9014CBCA86E523266E3F714C18AF399F1, 09157F12 - 27: 878959491858766ABFCEFA799AAAAF0C3EA83D3E79A567E6D29AF2, 45FCC43B - 28: 172FFC11BB0ED178233C21C4CC894315A58827FCBC98267863B51DBA, 9DA35440 - 29: 5AF565752076F8006E2B54B389450C0A93033DDBFAF083212577D15AB6, 9E304C90 - 30: 376E1453BA28A1178D6DD7C7952A5A5653B457AC800C8778E40A15F0E2F6, 632139F5 - 31: 6A1DEE1E91705ADE6041B907A5E6013F356FAD982282E449237E3DB94705A7, D19D8ABC - 32: 2117739B3B91162436AA37548937626966DE0760C94A5EBD7AAAAD19CFD34EA6, 6A54972E - 0: , A68BED4AD5FB - 1: AF, 1BF849416371 - 2: FF8F, 3944BB42DDF9 - 3: 80927B, F05F98A7268B - 4: 4B786AA5, BD396C00084B - 5: 445946A8E4, 6DAD013DB717 - 6: E79192D27F6F, A4E67944354B - 7: 1D35B0C1F19A66, AA4E86DF5AFB - 8: 857DD43C2DFB61D3, BE83CA840F60 - 9: 9609F4C05D16EF5F6F, 3D8EE6295380 - 10: BFC3BBB659F04DF6459A, E64C204F1F94 - 11: C63E53E9071D778F91A264, C110FA7ABB8C - 12: BDD6AA8F171FA4168426ED95, 7B1D3A826360 - 13: 3BAFB0C77AF2F0F23E1A61C91D, 8B59036A25B8 - 14: 00DD8906CDED9E93FD2320C1B932, E59A604B9848 - 15: D8418B4502A372A86D6AE2F19913BA, A1D54834086E - 16: C61CDC62175605251847B37A5ACC044E, EE5BC1E26416 - 17: A17451EC2A62C5AFDD07EA7FE72A99E18C, 9959D9AA39A0 - 18: D707B568A0EA563696797F66C537BF359472, 0DF311C42EEA - 19: 2D37235C3BEBCB7DB3BB7405C1DBDEE18DA690, 520D5CBF4F74 - 20: AC8179F3837DFDD63DB52E0D845F188E9D357C6D, AE797DE6AB58 - 21: 0427175AEF11C34B47D2D013403DFA97257F6552DF, ECF1827E9B06 - 22: 8F45F55721005588991857BB6795CAF861B450D4CF95, 76AAAAF740F3 - 23: E79D87F402D26C1EB3F6F8FF2A7644F7BA48CD2756A4F0, 974178AA9DF3 - 24: 1713CAEF9E9DCA0E96D059D931D77D00A1E3B49A9A6D265C, 5861C8D23715 - 25: 3399730FFEF2EFD032FEE5F593147989B73EBDD1B132FF3128, 61643E6942CE - 26: 829E8CBE037CC8D5D92C820110166D907C6252A83D8B7DC33245, 10F707BE9B20 - 27: 97039B291782BF86B7268545DDBCDEFA4756543FDBB5A5FAAE0E6E, D9B1B3CE6BEE - 28: 729CC91E38652E216B6BAD41767602B427D5C6124BA5338FD9E191BD, 99DAC900FA2D - 29: 14DE87C28CDE7C93700A85EB9585A2EF93F0BE2E99C89BF99B076598D9, 0B11A192D313 - 30: 8CAF7158E44C58B4F9645B88668301C4E87B6211275D711278585E995C57, 6830032323C6 - 31: 890633F2298A90BE4F058BB78B3F72C85AA6050462608B64B1A2200E0F4A01, 33CBAEE9EBE5 - 32: C87AAEDE263A61680E17FC2AAC119312FD8957B42849F63D242CBEAED56BC44F, 55456EB6EAAE - 0: , 8CB32310D2078455 - 1: 06, 3B979FA33BEDC75A - 2: 19D6, A0BCC79750D95E61 - 3: 016205, 4441EEED3813C0E6 - 4: B0092F9C, 0FC85CE3F7CD99DF - 5: E03C72FC8F, DCE5E234B1631001 - 6: BC060E5EAFDC, 1AB017D8152F1BFD - 7: 0A045B380DF779, 8B458CCB3773A0D1 - 8: F034DFDF7F257469, 177CBFB29CBBE9DC - 9: C3EC9D207316747A2C, DCFBA160CB3AA8A0 - 10: 4052BE174ABE833BD565, ED65271803837748 - 11: BA0ABD7C328C8331B49729, D2C9C55139953C01 - 12: 1C2830A718E0BE399CABC4A5, 70FD41B7597D3942 - 13: 8D6B41A5820EBE9F671B03C8E0, E93304D47FE0971C - 14: B1508AEC8EDB82795E1244BCCB5A, 802A8E17F22CAE96 - 15: 6955953398D2E9D9BCA4680FDE1877, EAD66DF23AA725BC - 16: 9DEDE7B7398E46CC00B9D05E8FA30124, FBCD214068BDBAB4 - 17: 089F2F772CD7927DDD8F2A4D0DD401DBB9, 44852F344D620671 - 18: CB213243401529E102CA4C43A1FD4BC68C62, FDFAE2C2DB6E46A6 - 19: 165E9B9BEBFB0CD3BB97D65E5C0AD23FFCFD3B, 1566FB79C149D48F - 20: 1A67314950AD4F6E5D67D1C3E22429A3B724DB0D, 06CBDAAB6B86ED71 - 21: 00535F136D942627E6F5B6F8E2D388596A3D0FE8C2, 20626010568EE8BF - 22: E44F66E2083FDF871BF530927D99BE9F366E460026EB, 890994895A997564 - 23: 2C17C1F44A87ED6DAE20CCA79E0B91D874586F71AA2F1A, 0289BF7ECA9C7000 - 24: 93BFDE28498C5560E0CFD75369F0AAB7DA3400E0BAD8D5CB, AA590FA1D9B349AB - 25: CC1C03C75F6A94A395C395F2E10BC583D41C4EBB0ED813ACC1, A383CF56D6645FB5 - 26: C444EEBB268359E58BC314DCEDED9D3D754AC680132B74C9BE90, C3CA96641F2DBD4E - 27: 249034AB6BCF05DBEEF8A7C6898C04835309412CBD1C3071AD1F34, C77820650B325201 - 28: C2E6B89C5BA42380CB3DF695011A1C13C2B11E0D8F196E1C00D742AA, 00904E6661C91F08 - 29: B6CF60DD15AE6AF2E412DC5BBE33263B02E2AE55060DE7F0D3D7F53478, 3F49A88E48B4FBB7 - 30: 260F5C6DEEAE2E2E37FD4EFF5B8811C4D824673AD7A65FD849966CFF84B5, EF8BCF3A50B1C017 - 31: 7E46C640740B5F4F93D185BDA370FB71DE7DD673F0282B9335A9E6AB6DFE2F, A3D8207ACB391BD8 - 32: 6C26D859D8AEAA8A9EDF932C2CEF5D93B021505C940E6A62FA668DE7F0BF1E8F, C81CBDB66E443254 - 0: , 20E2F4EFC5CF9E6979E7 - 1: FB, 7997755312F6F054EB36 - 2: 7984, 9EB0B4FBF2CD9637AC09 - 3: D5F9F0, FBD3FDB921FF827D75F0 - 4: 06BD33B0, 7DE86004BBC52F52CD94 - 5: 6B3B0FC45E, 87C700BEA7FA9D634E6B - 6: 396CA6019374, 79442E80222F32D14CB2 - 7: CCE744188F838C, 997CCCA702E15763C17B - 8: 961E86FBCF7D3CDF, 1EFD79E58087C7CF7161 - 9: 7D158AFD596082C18C, 5E1CDA926AA52F3E57A5 - 10: 74DA8DE5EDAA9942FD88, 60B80E7F1D93299C6D7E - 11: 356AF1F6BE5440C06D3849, 2042FEAD786AEF73CD00 - 12: 6F1AEE2F94E262BC6602AEB3, 806BB8288243D0571DE7 - 13: 56FAA46E6B379C9916B28F826E, E1B44C1CE096397D0050 - 14: A4C32ABBD586B7A9CD26E826C994, 235753E4EBE903283E01 - 15: CF8543A41A8A2EA015B18A8AB25B7D, CD49D6080691A623C73E - 16: 9711B032BC5E74ED388D569417677B97, D52694643C1275FB46F3 - 17: 9B4864774AC08946C2C9571A388674D727, 2B11A586E43A7635F22C - 18: E74E306058C17E927F29FCFBBEB973E25A78, 838D75DD01EBB14B07C7 - 19: 3C31760F3A6A9BDBDE6A746BD87113A78EFA95, 30A2C4B542955FF21029 - 20: 853AE25C5C6AD5F58353E69CFC5F1F091669EBBE, 303C6993D90B1FF830AD - 21: B2DFF0CDDCD11D56907766D4B26EADEE8A6CAF9643, 66B265DDED3132B949F1 - 22: C5ECDED4DBD505983764D906EE0C5F831DAC0DC9E09F, A2A7E297EDE8C40519E4 - 23: 1EBDF7E0D484DE1D52AA17F2932A71A6B773BA33D5967F, 45D0EC17C7F6775BB4FB - 24: 8E48EEC9C148B84F7ABEA42DD60626C1A206C0C7FA1F8CB5, 1CBECE48B87EA4A343C7 - 25: 537C2776CA1DC6D3D95889AC6A15F13C72C2F56339E3BD20C0, 6454C7D90A21040ECF42 - 26: 4F71E9F84861CAEE203B8D35E325A1D7CEBEA76CACBEE57F15CA, 2A61CE5A92EA22E2BA94 - 27: E2EE7719DC72D0C45E08BC13EA25FE0DD94912A59B64D2E3BB5E54, 3466488A0E694C08392C - 28: C58917FF4D3BDDD4CF20EA76289E80280593E567173BCDCAB2F88AB9, A56D57C91EFD1F5AE905 - 29: 9341A0C6325680D658D700561232684877A8D333DC8735040DEB1BF725, A20F69119028B97647FE - 30: 541E9D11C1496433008AF7FA23E2333653CFCDB9912C58DB776C8AC4CB2E, 9A6712E6A8071104B83D - 31: 93927DE6B0ECA7426928264144CA00FE28D4F799C771B8BCA1CD78036A5938, 949226608C01459C5A12 - 32: 11A1C4B64E8B33F0C6B840C1E5A29E3A97CC13B25D2959A17297DB5C03BE22BD, FFCCF3451D7B8270437E - 0: , FFF9298C31FEF08F24E57314 - 1: 98, B09624A3D2A0F37B8B254DC9 - 2: F389, 3FE1EE8A2CE32B7CB1B7D879 - 3: 1A2E93, 3DD8C05AA6954A2220E49A6E - 4: 5482FDC6, FB6ADFCFCA47BE5B438A3546 - 5: 6FC1279F3B, DB8087589F26B87B556708B3 - 6: 1ECFC68846B3, DE95A29393F21A7C08F575E9 - 7: 905D46CB797474, 3BA9D700E373DC74C7F015FC - 8: 07D5D8855A50ED19, E2988253D7E72C202FF8DD15 - 9: E79FD739DDEDD2E1D9, D59554FD1CC82E7B42A006CF - 10: 860D5D7CB775B672F35E, 430041DBEFC70BED7122212F - 11: C963DFAE01BC0AFD2CF23B, 04791E958B6D6F70B12A8F9A - 12: E6680E6610A326C5A611D6B1, 1DACDD533A442280CE324395 - 13: C21727B9359155931655DDBEDD, 68A68911850E63C00D2490AD - 14: D33D0DFED9124D2BE058CB90E3FF, 542D452A71BDB22C07ABFE96 - 15: 973283D21DEDC298BDBE0F2ACF3661, 68568B2DD5E4345B82E6B23A - 16: D47108DB36E4024550971DC09226450A, 0E4F9904007AA9F91D81F418 - 17: D1C393FCFBC17B3173A36D6C83E6B36D66, C9CAF37D11A6AA8805F62D26 - 18: EBBDE76B15C17B4C66CF25D9B87E098119EB, 0C0BF366FF8F67045B1328D2 - 19: D33CB39D4A9553E76C371F7D0D6691F42059D2, E7E0929B12F5DA56FFF285C1 - 20: CAF5C458EE1D8C28C3AB7D78BC47383773B60CB8, 8971AA0B6B99AADF9B4CD6A4 - 21: 9EC9662342CE31FF56BBAD8A39D9D787407467C031, 76AB41C9C7BE118A79F1F0AD - 22: 739B5F0E68C11883D9E95B05EB9441FD26213DECD27D, E4BB902B140DC81BAD9F224C - 23: E3D982090A5D956A2C3BBC1EF5EEF6BD1EE6429B6BC208, 557C60E0F5D9EF175665CCE5 - 24: 8C6EFC3C7887AC488AEC7943A0C5F15DCA22B22F0C853B30, A7224D35BFB61ECFDDB61194 - 25: CA3B86A34AA717C8264B652D9F24E0D023CEEE53892CDCC7B7, 84C2B2E574B2424094BBE03B - 26: 0317DFC2F5FE107337A1596365C9010DCD18E43B8114038777E7, 2764A25DCDA95B5183010812 - 27: 07D8E5BE4675CECBA03A6E697E0205752E83315C7A124DD0D7A9BE, 3A7371833E8F1D7DA0CBCD8D - 28: 2174B6B7104225AC0A68654BE41DDB6D9FADA6FCB30E8BEE884306EE, 6C878E3B74F74139FAA678D0 - 29: 8371388DA41ED8D13F6E5DCBF6AD9BF8902EB82BC38F39465371587021, ABEA52E1AFBB568E6A4562A0 - 30: D60026E80DB5E545CC7C529505195A4F841C0EB3036AD1C6DE83DFC9CD6E, 1710A8C9FFC5D44BE6496912 - 31: 3478DE499C21C2784874D8D47B6525C0EAB18C9BE967E0A306CBD3B91CEACB, F81829DAF18DB6D080A25727 - 32: DF2A935DF0EBCABDAB9CDE934F82130B3BB9D2D56FDF6DDA41766F3E0BCEB4CC, 5E13A34B14AAF25EBFD4FCD8 - 0: , 5E46D33C9FF92D292A3AA14B568B - 1: CA, A984DA13267822456D323750D21E - 2: D305, 6D6D6602FFDDA2F9AE5FDBAABE54 - 3: 77FAD2, 93C9D3DA6931CD14B735D698A8D4 - 4: F4D61824, D80643D1734E02108812A541C9FC - 5: 556E595272, D70F173F76F47735E53822A7ACA6 - 6: 16AD16685633, 44C01AA1FD09DBCA6CD893348346 - 7: 44DDCE83A55AA5, 31C61617AD712A26AF6148D1C71E - 8: 17C383C31C762D9C, 1E7FCBE1B38DE4CA86B002560ACD - 9: D02DE0ACE62AC9446B, 9B13B48233A0B9B991C79E597D70 - 10: 96BBD0332CA544D44808, 4FAEF27DD7CBDEE6AEADB1DF0A3C - 11: 4296C7F91D57CAC4569E06, 1B3F54C39798251349A9AE7C25D4 - 12: 257E8E1CF3AFD1928098E4C1, 4F391F09CDC97F055385B258E0C9 - 13: FB935167CD850165D83330EA09, 990C7E532CA937CC18C26E379793 - 14: 10ED0236A2416F2869535AD35C4E, 938D78B32B214227EF1BB745886C - 15: 1D4522B0DF923BBFAD49207232BEDE, D56E90DE1D160A5E6C88B0199C19 - 16: 512D2C209FA415794DD66B3F6344760A, 5AC7A85694E6716953B393F33ED4 - 17: C22EA403D4D0FA52518145E9559D668870, 493AC99AB754305767D9026295C4 - 18: 933D14A49420789DF1729D04F3913D222095, E9C3BFB3FB7F58AEB3723961E476 - 19: A1431F526E48302C2F35522C1F6D655603FDFC, D2F4660D4B0658BCD6858FC5A682 - 20: CE96F6130BCFA328CED79B90CDB44F48A5324246, 2D26E5E53412CBF87BBFFF923481 - 21: 50BBE1DACA0AC4529C4C701AC45D1DABBCF676B482, 2DA7124A75B49E26D06C2D031D97 - 22: B151C0F15A8E3021E0B3AE86D993ACCF25D0EE0B11B6, A00183FAFFA83605CD34A05F797E - 23: 8F340F02E736179873CAB59AF8BBD977A1F492322B82DE, CBA56BD4FE0226DD12EC21AFC49A - 24: 7F6A47B2E196E5594EB72B99745B52B960BE73144D687EA1, E323E1C18CC7C2A0BCB1963B2A85 - 25: 431EC36C9EAFF9C93129464D2E50975A95C73E2C22925A0C5F, 31946E604829DED3BDFEC24555C9 - 26: 3F745D41F4E20BA025354C63859487531625B6E6F26525B9F39F, C98CD894D89B63C2438814936C93 - 27: 3A6F89B979B512687E3D51CD2DFD75375CADDB983D313784DD8906, 89A9518BF6163F6BD4ABC169AD26 - 28: 820B39247F1D6112EFF732E166DE79E8D8FB7BB9CC8ADCB6329CBFC2, ABCD35C002CD184B55C7C76B9835 - 29: ECF90501AF19570F2B18588CCC16A4BF0774DFC95356050A4F6322BD12, 36D04CFE429F54AADB4B8EBFA5A6 - 30: 67D56A139B2014F6FA13C68C47B8C11CEAE81AF1123935EDABE8DDA2B6D5, 1D46217103DB45B4D46C8E34D312 - 31: 8567EAE09ABC43125DC20D5B637A640CE3E75C2B4CF6CFBBD7ABABA27B698E, AEF5977B03751490195B03F8CCF4 - 32: A506E8A74F9F096C8FD5715D992E0BE9113C91E344E9B6021917CA2692828CA8, 3C1186265D48674E05A1E24D70AB - 0: , 110357763BB1399700AF1C5B4505BF66 - 1: 34, C655CBC55D4CDE3C96EDFF0C9DA431CF - 2: 319C, 8F5E18D5730CE482339D1AE99A8B8EB3 - 3: 4869E7, CF9056F00A00248148BE3403A0D14173 - 4: 2414E009, D5D277C6D3C5BFCBDC098A3F4AC3B6CD - 5: 2FB1E0E0AA, E42F2F16A69529241B6A1B9A482AB316 - 6: 663A38688B75, D9EDB25F73D8A555C86561436415E603 - 7: 5C3F4A45CAF183, F1ECA0E685604D4AD97DDA4710E3C638 - 8: 18734AA6174FCB96, F5D24E68AF5D35B2CF756F6652E3CE8D - 9: EC7296449E3F4943FF, E19D878FA216C3B1AC1630FA1FFB5E8E - 10: 9921221E1685BAE6D90B, 8377076D6EA3C890B8FB22B6E446207D - 11: FE63026D884A0D8BEF95C3, B583B00407684AD840ADCB18B65EB3B7 - 12: 2865C40D5581A217338420F8, 8172D431073934B62EA0D4FAF17DA9AB - 13: 3059A2A931DE3D0F5D06115B5C, 94027CFB600F1E5A9486CFB814F61025 - 14: B4B45AE470B12821C9A7E7EEBF00, 230288C17010A33EE99DAA3502D55F14 - 15: EA1D00A82A8BABD8CB0DC1995B10EA, 52DD5F9D0A68653F1A4CF260C97D8B53 - 16: BCBD1A178E6E7C7AAED85C61618CC9FF, 0CF29DA76C1BA8527C019DF2127FD44D - 17: 0058E6C30D6C1BA8C1307A0B6CC9A7E209, 655D55B9C17FCF6642083743402BED98 - 18: 4C938A81DC5B158B6BCF8F8E5045B7B4AF83, 585C466692EFF46A5C463B6149E63E81 - 19: F19EC514B5DD0223C65EA5AF3A0DF5B98CE3F8, ABE0B4A70FC43598CFCF209AD0F8C861 - 20: 909698BE5B2562E04D653D7D1F68BF7D93CE3CB6, 5A43B613DE688DACFF44C38942B4FB02 - 21: 35CC76AA1A156429AE9E1B7823AB3B1B2D0944D5ED, 8BB1A070CDB63EBA4F6CDE6A8F286040 - 22: 8EB194DFE6B947AC31D839904B876F31A44CACDC3A84, BAACE0C7EE34569D2DF51933D68B6119 - 23: 50621DBE91282E9521BBA8AAD2803732B134EDD5D2D978, F8D77EEDAA88CEFFB7DBDF2F1D4541E3 - 24: 94ABF3E089150E25F65D692B7D8BF3C70008B139190EF04B, DBBE83204A99EC57E2EDC49C69F4F507 - 25: 9FB717D74518AD6A3C174709927E9AC4FE7F120B55F06E4D58, FC2887E5CD01022F5F71554EBFA8F150 - 26: 353683D83C177F54F3F9F0F71B969D0B2EAE7F4BDA8050358ABE, A5C6FD453FF6238B51202DB11534649E - 27: 0D4FA6F2116B78BA319BBE055E988DF2888C5A9AE0B96CA884AF7A, E7FD7DE0780336EB75ED4C39BDD2D2C7 - 28: 28C1B6B993A0EA4981DA0BC6E63A643368E2C48591072BBD839729EA, 2D44819AE01882B4EDE093CA4517BC3E - 29: 6F9150A6A11DA51976C696DADF0F809FF870CB355477D7518C01DB7759, 4BC4B46CC9B607D98B33EF6C568D0FB2 - 30: 32AF8C54A01D651C84C1465CF0D4425B3C407D1773AC466D3FA1369F9649, 3DC977514F55FEA89423CF8E2F6E6623 - 31: 6C90EEDBEF5B9EDFDD66EDE90B3122D598215B2FC3248A35E73B22978889D5, EAF636B7B8C72FCD1F57C1E4786B86C5 - 32: 60E45AC1049D7ACF08BDBDA5D345C86885A9A225768707352F70A369624A79A8, 4C82882704C13DA0F3A2C88FB413603D - -CCM-serpent (16 byte key) - 0: , D846EFBE - 1: 8D, F98DA751 - 2: 471B, 862C4162 - 3: FB8263, 5BABF5E4 - 4: 1E4C3A45, 227435ED - 5: CB9C99DFDD, 3B5B2A42 - 6: 56CDF500B213, 052A4C83 - 7: F461A4131CB9DD, A9A78340 - 8: E7584AEFF50A36E8, A7D5FA84 - 9: D0D084C7B393EC8CE8, C95D23EC - 10: 9BBA5D66357001553394, 5AF814DE - 11: 3435C9A1962364FD4119A0, 72F0F143 - 12: A9208C50D7806C70511BEE48, 06FF2E04 - 13: 75AA0A57B8AD042F767D410D4B, EDE681F8 - 14: 0F1C0F4C32E327DCD3A6CB5E560A, 4A4554C5 - 15: 263D0BC22F374682FE8F9F56B0FB75, 56B16619 - 16: 230E1A4880843D0C42353B441D2F7B5C, 60473A45 - 17: A0485F7E2668EC4C7097AB8A6930C3845C, 9A74E8A5 - 18: F8ADE940C292573D4237649B8D37EE10BD62, A8CB72F3 - 19: 2E8C07024B8911347F007631CAC6E332186F16, 028077AB - 20: E797C957C70C616693FC61A51531A32A1E9715C4, 1E2740B6 - 21: 880B6948F77F37127BC73F3F1BC84CAB02EEADD4DF, 8ACDB091 - 22: 23A000CFACF1C8AAA97B877065C9B005CAB875DE4936, 71C212B5 - 23: 2A13D62A1286F2C3657DB10D55BB6E804363DA19339F7F, EB7525B7 - 24: 07DEF1D7D972060C40270082CD57D3B81547CD9146AA63BC, 7C85CB67 - 25: 87ED6E3E0945E04355312712B6F0492AF6A109C80009585384, 9C8024E4 - 26: 4612C3D5202C3C8B1BCCDC7CE474B2DC4F292AC58BCC7153942F, 32596D79 - 27: B46E5E6939B8F8F431C12C5A745C59E8D1EFBE2E82685218EA3196, C0B5344C - 28: D3D78A12858EB4F02F07223172BA7B3BE4FF2AFA34A917AAFA9CFC84, C6F13718 - 29: 616C43CB8560FA8542BC5D934D5A452CC760C4319471D69B4881E25E91, B61BD4CD - 30: 9CBF2F94C470C2F7439ADE7FC44CCEB2C47FDDF7B66135F052DB033A7CF4, 9301D390 - 31: 24AC225339EF54EED9C3ADF02FF11BC5E16FBFA9D9E23080A412B316B12542, 29EBEAC8 - 32: 4C18A1A109A21E8B478FAEC8F60BC99788BB250A2065718BCA6A00A90EC9452F, 96A1B38D - 0: , 1FBF61B853C6 - 1: 05, 24BCDB04F58C - 2: 3CFF, FF70D9CECFEF - 3: A8A8A7, F1BB85231935 - 4: EEFF2633, 6B2CC98C7B90 - 5: E9D67C270D, 9E41A182A892 - 6: 127DA2C1679E, FC1B897B6FD8 - 7: BDF5DDEF9B4CCF, 6F1990A6BD8A - 8: 7EE24116AA1C2D8F, 43E5D9FB99A8 - 9: CE109BDEDA6550EADF, 5F8C92103FDF - 10: 3C1AA6D79B4A42930BBB, 756D9B1CC491 - 11: 2FD2B0AFDDE27BE505465F, 745089BAE918 - 12: 55046791EC21F540E5DCA896, A199654CAE90 - 13: D4CEB67B573AD2EA72667AA8EF, CDD536574ACD - 14: DE0950B1F5CE1DEF98E7F037068E, 983EA5062672 - 15: AF9EEE5B26B56EC390430FD7A5D03F, 06E977346352 - 16: EAC503B295A381725D0484D4DB1F4A35, 1C405A6A3ECD - 17: 1E3AB9D6B52B5CFC3A7C07D358AA1C346C, 3E285686F988 - 18: 56F26ADF4472D25BDBA6687C23F1886EAA97, 99B866D251A7 - 19: B90A6B134D2B14B1CA8E4ABAA18CB7EA5F537D, 6E385095C488 - 20: AAFE4FD3C4F636962A3B70A109C32CFE72E4DF71, EC7B9706FD6E - 21: 0EE2A47CAD0296BFBBF043BCB88174A47AA4167A30, F86960FC1455 - 22: 33535209A8BF046F4BB64BACF779E1C4B9AC4DF07A2B, D7CE936CF31E - 23: 97DC0D8F2131DB956584083602F7E9B8382FC7E65D1BA8, 0BF4FD37A524 - 24: 6BD56142E8744AFC5E73959689F750B4557C5B25648DCBDF, 4DE996335C6B - 25: 2139B69AEB6BF7AF4EAC5D425C2FD120C92676F7D5D8F8EEB4, 30D7EE3485E5 - 26: AB1B0862FD62681C1830C221EC71587AEE41BB286481A7A3D999, D78C61340FCB - 27: 958168F42CD3E98415BDA28E5624684BFF9804007E9A4055BDF035, CC71BA7F5E4D - 28: A3436149B707EE039AC24B4EFBB2A10C8082543AD3B9E7B5CAA8B839, 2AF6C97EFBAA - 29: 6654AFB7039254AF8F67D80592AF2D582FBAFDB6FC67D4ADF6F52B563F, 66BCF7C310BD - 30: 7797B13DB159DD5BBF53AD35DBC4C3EB388FD76A7B15EA47045DA98376F1, BB10BD121B5A - 31: 343A8FCFCEF7E7B0F974B2CAAA7920C803094A8ABE1A12FF31D68006043C4E, 89906F2E9CF1 - 32: D23BAF6F4264825E1A28EA86BEF50D06D1A8213CD02F807B63F11D7090BECE9A, 2A9E7CF475B6 - 0: , 87F698A6D1605AAF - 1: DE, 7C7AA6546A5C8BB4 - 2: 4CDD, DB1AA7DAC50FCEA9 - 3: 193560, 7315F869124C4B36 - 4: 11ABD899, 8D90CFF3A2203D95 - 5: 7AD3692037, 950B0D2F47331413 - 6: E74E7CD15CFD, D270FED7A74B7CBC - 7: 0F312B1840F66E, D06B7C68C88318E2 - 8: 9F21280E6CC66799, A3BDF492E563BBAD - 9: 7ABBD66F2EBD6A383A, 4AC09A8C2E4BE591 - 10: C5DDDE2BCF017AB06CD9, BCFE1D51F6FCB6DC - 11: 09EFAA37263F4705425F95, 712572C8350BBEA7 - 12: BF5E82C1B63C79B198704DB0, 29E666AB607F8562 - 13: 0FEF8ECADD4C7505026CD6C62F, 37CA6E6307A695DE - 14: D2C8107DF5B6EA976E29E7222059, 6010541E3ECE4CDE - 15: 9FB333E949B965EB4DDBAC88FF7066, D96CC8841F77DA01 - 16: A30B711C9CA31503344BDD7A1D464B20, 18B67378F22DEAA1 - 17: DB90221DE93572450305E1DC77A7D0BD96, E6F15953B43784B3 - 18: DC29D9CD6178950124C7F2A911931CD6BEA0, 3DAE0F76851898F4 - 19: 349156B772004428E5DF09FFEEE64A620D1144, EFCB6644AF2FFDFE - 20: A8808843694A14E597BF515A538DC423F32E4DC6, 89B5636C2159E79A - 21: 0261EA4495CA4AA4107B90A842C662CD406CFD73DF, 726F8028DD3606BA - 22: D225D744145B8204ABEA1745C3339AF32C71DABE1381, 9DB5962A0E7281EC - 23: 836E2C0E4151B8B161B0DEB4A3CAC296F3D16755ED8903, 8581A1FB13222505 - 24: 49F2575CF126AFC69FF709A8870A2B368CBA0374C06A6D22, 6B6C7641D90C8F45 - 25: 9348FE47816D7672E4FC0AE3AB527A595E5A05A90B74FC9B02, 0AFB5BE708C9617E - 26: 35DBDB81E50E115886273B95C2B3F358EBFC5187738D9A8B27DC, B535A1C7209399FE - 27: 6E2221919CAB3C751FCEFF399D2E287E952B50B5C626430C64BB8E, 0979CEC93F67B7CB - 28: 24F829F2518813ABA3DDF87470EE2C486A554471A492923098D37ACB, 0C3547DEE9044948 - 29: 52B5A0AAF3282BCDCA1E67D63EF578555F19CDF672625E773AB90CD36D, 4422749B2A336868 - 30: 4F55F518407F1A7D0C734A0F25C5BB82B6157B3E2E44E550A991EBDFD626, 04DDFB43BA13E823 - 31: 258297C64899E073247CC7A08E09ED78DDAD3C54FEF391CD6CF56C8E02DDD2, AAD42774EAD9E60C - 32: EDA50B18C6E1AA0D44100B180D0D796DF587E96893B759507B7B81903C931EEC, 132C14CC8AD3034E - 0: , FFEB48F3868E1B8C2A54 - 1: EB, 8A48595526C380302543 - 2: 1922, 08A3F3F45E43E4D339A9 - 3: 14782C, 119DDE8E9C27C64D62EA - 4: 652FFAFF, 4826E2466E5C290B5317 - 5: C057F77B3D, 782348D0776D5F0424F3 - 6: 737523994076, ED64EA112F502D403C6C - 7: B35CBF4B683396, 96C944F8A1000395B29F - 8: 90C0D4DF9DA9CE29, A8AEC64AD1C6614553EF - 9: D3C5968F162619E5C5, 851F5D8EB0B96687A16C - 10: AB2F8E050E8D37138085, 7627FC51FC0196C9A8AF - 11: 4CB9BCD0BC1E2870E1F708, B859841FD9C4A4D5790D - 12: 39AB40AC10F575D283681A4B, B155CB15A1AF28689A2D - 13: 66E433053301D193984986668A, 3538C1B504ACCA083DF8 - 14: 7A7C19FE1E3DDE58157018C78DD7, 43AB75961C0351FEA7FA - 15: 0C8DD1F5D7516CB5CFED8D768AE4D5, 8EF8ED17976BF396BAE6 - 16: 0B5EDF06A10F24F7F6F680260703659F, 9D05FAF83F61E7552358 - 17: 16165F50DCA6602AEEDB8A8C24D6A2D4DE, FA9B1B3EF78139A19CEE - 18: DD80131749374A833FF9774CEFE37CD4C663, C0637AEA47E5166277A8 - 19: 993B57E880AAB59A0FD659F166BDC40D1F132B, 830B60AAEE05502EAF62 - 20: 9C7D3E5DE25E866E197DED9ADB633F2CA05E02AD, CF22837F45D6589E7CC8 - 21: 3F535EEA3AD1D68CA6F4A319E6F158B4DECAB387C0, 8D117DA4C2DD8E831D5B - 22: 3A06A642DB327778C4D97048B834232025A178A3DC1A, 73040C4367874DB7DC8A - 23: 28BB16062BE365DC47357E72B19EA1B2C4B99C4C539F94, 61C8D6577A1CF16F6946 - 24: BB7C21EECA8297F48A79202E544C4AAC1014DDE8DC0C4942, 0DF6F656D09FBE802D75 - 25: 55D752E7C0E9FDC195BA9A94A9E32598C9E78AEC6724F05E8A, BB5D876BFA3FD8520B33 - 26: B6A2BFB7FF55FB25EF635271B353F9CE354C2208146D04C02A1E, 6F57EF4628E263C7A59F - 27: 3C826776F89421A92E74DA71F0AC29E142EB50A21D9A291B866E07, E6C3C0CC19AE5B103698 - 28: 5B482B16005B01372050854A7CC56591659E872F48A18A5F4C900F31, 51D77067D5121F3ED2D3 - 29: 4E53A718FD911C5479174DC64383A22911E3D24E411D48C8FA62F2970E, 1DD92DB9E51FA2C6CC19 - 30: C0A42C1EF5E2796C0F3BFE400279B1273164CF1E8C5952CB684D3DBCA4FF, 46AA1320964B29E50B2F - 31: 24EB7B86DBFF795A0B5B1FFE6ACC8B3E131D1A219C209DB8F37C0CFDC77EFE, E468D43D8860FCB9EAB5 - 32: EDED0C9941783ABA9D213A210A65B90E0D26E3ABB2AD6290C3C93D3CB205EC87, CFBCA3926C96A6F7779E - 0: , 39CB1FF2BAA5B4E5514B65D1 - 1: 68, 03F522FAD36128E796B74444 - 2: 9D1B, 5D52CA36DABBB5BAEFC2A2E3 - 3: 5E2850, 9942FC1350AAA6B6F3A1EE28 - 4: 09FD7515, 1F6BA94A97AE04E101F979D2 - 5: CE8A11AC82, 0C72EF7DFB70A21F7EB65097 - 6: 621C1CC5B9F2, CAE8A3A32807B8FBF8814DF4 - 7: 54C1831D931A52, D11873C2FD12BB2EC8FDA190 - 8: 77AC1C418A675159, A91C82037FA72FDDDBEAB3DB - 9: 22096284F0C4BB7711, 022FED639FD81CCDDDF27B1F - 10: 725149CCEEEA0459BA39, DEDB3CE8B34AE5B4371D3453 - 11: B89E9639A9F1C7F77B4C79, FBFBC03E2A26ED497B7FCA88 - 12: 5743AFC7FB51AFDBE73D8493, 3C44B8607D312F19E1313473 - 13: 4E07309DC6B3587DAD5036E5ED, DDE4BE5395597AE5E136FA81 - 14: 58D59B2ACCB5ED1AF9EC7DBB916F, 38A119319CB6838C86D9C4D2 - 15: 4F3C193F85EE6742DE2625F177950F, 2B807B4D06F861C8A808C004 - 16: 70311835E1793F8408104EBAACA9A5E0, 0165DEC7623E9B0B922F7449 - 17: 2FCACAD0422B7A171CEB910F495B09AB63, 456E1DC7203D7256ABA45E26 - 18: C4C8B27AD2A669C8861F45C67A0F5F59941D, 303B87B397AFE9DE207F3E48 - 19: D95E9814480CF6BA602789D447042403C00DFC, B34C88343F115832999AA5C6 - 20: 2050BC44C8836341E329494061BA13E5F07543C3, 1019FE42D63CB6AB43612B0E - 21: 3FAC9396360022A4F06A5C61857C9C7541464A03F7, B32E535798602DFB5B42B4B7 - 22: E651D7BED7CC9030B6C2AFBF6270AA72FC0A92F92E1F, 64CDFE757DDB35D517CC262F - 23: 3FF13A29186B914573D793F762640E21DDCA5C5A8904A4, 1C93D003A49F3E8C5DA16F23 - 24: A0598F6370AFB4A00400ECF28FEFB996BA576D5145CCA25B, 9C4E8039B222E961F294179F - 25: 9536FEE19D64F51FE51C9A01E2C7707A1B25B33D39F96BB508, D074CAC7B8C2C6A0F6FFBA2B - 26: F7551DE2DC5657F9DEB35DC57DEBC25F5DC0D4BC87E32E00B8A7, 5AEE5C90E4CA72709F3D402B - 27: 2CABFF27F727801AFFDD147F06A0A2BAC4D77843095DB7A2350934, E06BF82554F76471C932A59E - 28: 1B7FBBC9F65907AC41265DDDE3625CB11CC6D236FC2DD2685726EDE5, AE437E0EF6E442620A3F4E82 - 29: AE94E8DE753AC2E9805DD276CC140C78735AB2C165237AF7ADC56C9B15, 4B48E01AA976DF98D68B5948 - 30: 553663B84140C71AFD0FAF983178F56C0DFEF343577679F95C1AFA8966A7, CA28F5B18044A2EB87B282C6 - 31: 1E3D737F659A8B760FC22CAB7A9D1313AD3D49CF1A1B27610C5A839A44D6D0, DA8203C306880FE952F7B8CB - 32: 80B143A44C366317C1F5B1059CF110508EE896D7235C469F6A9094F80A5F06E6, EC5269F5E8F6B61EA212C8A0 - 0: , A39BFC888E896C6E4DECE99B36CB - 1: C9, 0B3735B3D251D8BC427FAD119423 - 2: 2BA4, A8FFD726DADDF17712AB2DFB07BD - 3: B9270C, E2FC2E5CD8E300246267794381E4 - 4: F1D2D590, 75B2D39AA899611BA829C46769B8 - 5: 43909B7954, 7D4FE875FC63913984606C044C75 - 6: B17ED1BD7AE3, 3ED0C72D07D9A38B1AB106297109 - 7: F09D67C6498CB3, 9A5B6897EA0E70449A88D2AD0D09 - 8: 1406583EC4C0BF9A, 05FFD93FA9473497C3E4FFBAE030 - 9: 334A4532361CCBDED2, AD4BB16F95D9C0E2DE8E291940ED - 10: F8C8B27AAC682ADC630A, 07D848C0BCCB6D1257DC7231E9CB - 11: A46C8FB44786288587FF0A, D83A90A4309DD16208B6A7D0B7A5 - 12: 3157F6781AC0ADA7169A678C, E84D1ACB3CD4BB451FF0EBB2A6DB - 13: 429A906E5359983A11F397F992, 44A80B53684446A31863D272E42D - 14: C9ECE83F5684F0C9D3AF11A28160, F0DC79936CD37F92799674C14B68 - 15: 81F2734D2EBECDBA6FC5C8C1EA4A4D, CB8033E44139C14D43B476654253 - 16: 9F7EF911EE4CD61FC8D04A4301FDE3E4, F6BE8A210CD2EEE0B3A7C6ACEA91 - 17: D9A6DF812351924F6099F6EC933FFEB4F9, 9C25793ABE406B28265ED7724D0E - 18: F16472CBAAED6D49C43EDB116D340EFD2B53, 05643AF16932A10EA09E54D9A7DF - 19: 5974F93BF18F8ED7724314E1527F20EF1B380D, 69556659217CB168BB6A5915E07E - 20: B6E04846D1110D13EEC0F2DEAE0D09B8CF09ED62, 8A082A0EA21EA4F3B3BFA4258D4D - 21: FE1210D86E99A3A6C733F19B1FB7B31D57B7D5D276, E63FE68DE7EAD8A7AE9CB6191F3C - 22: CE78445B4210DBF6D73B760F2B99F5235B023DD7D18D, 7821F7BE194BBA4A9EF8D576BF5F - 23: F1B0D0616694A899FA3396F795B4FADB175FABD8F32A73, 9CC94EB810D040717BB9FBAC30CB - 24: A569BC6A99E81F67CFC28225827E209500040C1AD60916B6, 304C13555E1EB375123F3EDD790D - 25: DB87F0012AF45BE258EA4CDDF16F8C04DFCB5BBF5EC99159A7, 11297C6612D8E184F0F4AC4D7E60 - 26: 25EAC666D1B7BB86970BCA4A712359B3116C80D7BEEFD8D2E03F, 59ACD26EBADFD52A896A7040AA0C - 27: C4CB839A6DDCA42E1CE0DE80376A44BA154BF934480BE3986FA453, 6AC4AB7987B4F06872F8DFE7C13B - 28: B082C22B409BC397014C93E641408C845A6261C36FB55E762521F0F6, 2762F7727857831BD2F0FFBDC1AF - 29: 317D7A8E1EEA7EABE55FBC387E05827B8F13A2E8C3BEF77D868ED115E6, 3C0D107BEC290C83825DDE4DBCF5 - 30: 3C19C1DB0FE2BBDBEB2E4ACF167139EEDC6BE9AC257E522AC50CB3A6C9B6, 37E44FA8F7F39569D85CF4CB2F13 - 31: C4913D69224FC33B62417308535AFA1C25953982A476F92AB446D4C10AC273, 1758BEB518737DCADC96C24461A8 - 32: 93574A0898E58753DC89B9D9CDAA47B8E4E154238A00229B88B65C921A5DA544, 3EFC6DF1D04F5991A214B2C37363 - 0: , C2E9C4C07C052DFD6949C35F6C00BE86 - 1: 1F, 73677AB1B8278DB1C896EEEC5F7394EA - 2: 1754, 1210560493BA1AB9D5DCA306CAC3C5D4 - 3: 22F43B, 209AB033A7C499A5DA0FB084C4F8EF1C - 4: 4E6EE022, 0A0691566C89B184F4709C634803260D - 5: 7999A14B17, 338CF89A07841DDB7C2311408485588E - 6: 33B53A17EF2D, 97154999A30388D3E136BDCF5815A3C9 - 7: 472E3DC89116C3, 92ECDCD7183C6F99337094FE5AD8BBDA - 8: 1E37AD3E09236DF6, 2103A5B67883F0A4735818DBD58206FA - 9: 91A9F81214FF0D3D0D, 3BD3B7347E3DB19783EEF9BE9B4C7D8C - 10: 117DEE0B716E1B97D084, BAA3DEBD9885453A7A619C4F1D24CD05 - 11: 8D60CE53D233A0F23B008D, 7FCAB97A359C570EA3B63C3627C30CEE - 12: 9B7540759ACAC38EF117DF9F, 85EE3B55DD8A59E3DE062FB68B1A11D2 - 13: BF11353B7E330030C1DCC3E92D, AC40894E1FAADFB8BDEB16C3C12354AB - 14: E542175B84F742D3333B721077C5, D99D53797E24BF58912EB3FB0AD677A8 - 15: 40677FDED82C34B48322B551BD1B45, 64F97163219EF15AA7BB353D4262B999 - 16: A05585E2CA0BD09148EF5991A1A741DF, 7BDBC0E03104EF532847C5DC0BA8449E - 17: C2BB53FCF4E6EFA50B3C780F56176BCC38, F4B30FCD589CEECDB91E147D832EBA54 - 18: 9DF6A8256896E760B2C985B5BD8AED086E6F, 6D7E5E40D5D5E6F3A581EF74C5DBCE3E - 19: B2F50FEF51015116571F810399CD2AC2346AF4, 263896B390FFF6EBFA8FA8D3D8FAAC96 - 20: 86B45BF8983C72B42E7695AF4F2D7E8C7551D01D, AC4BCBA43FFB7154C7F1F5D27749B518 - 21: 9A6E05C094393A02C6DDA67294373EB9B3ADCA9FD9, 2D89CADB1FE13904DADFB4D70DD8E4B9 - 22: CE7A30A9E4325846540EEB1556CCF76BC3E34D64D5B6, 361AFF674F92705DA2DED40CCA8DE35C - 23: 093DB7C3EF10A22564F485F97AE2879BF4D0AFAEB4AD1A, D801C1FF2A710943C32CAD5AC2898A57 - 24: 437058B627B728B9EDF186A62FFF4AD9894D67D141C4CF55, 0A2EB7C7CCF59F804E8B48089C019F2D - 25: BF80DA7D4641BF89FCC9F6C7118A3CD9A544A1067900480ED6, B8871E4910B58FC4E14189E25C84B3D4 - 26: 35EC006D5A8FF9028D490D0DB9A9700E7830FCFE613443D4FA4A, F0C15FEB6B6424DC015219328B2A8451 - 27: 30880A3C7DE1193DD21ECCE0D73994E28F7EA973DC2186B8998CE7, 8B498A3B3AC412D285E2BEDC140E1070 - 28: 7C7D08520EA2DD910262B3E1C85E214520232F1C48F8419E8BD65A92, 5863FF8C1F3609FAD2E0B0648D7EDE5F - 29: 070617D4F2FF2CF7F50C3646CEB20BB6AD7F2966E1AC6825013017B5DD, 87B4A013E986DD83E37E2EC96703664C - 30: B12258B70B49BBCDE72CA797E7A5A3EE0F64F8B246D30FDA925470320883, CC7B01A84A0C8AF019D972F1D7C9C7DF - 31: A0FF4E0C8B0CF76BC483E6AF028351607199C281C8626FCB4ADD8C1FF1893C, AF6E3C6B6A0F7E8DD3FA069743FD40FF - 32: D5A08E21B3B6D356F09A14334D1801959ED2C9255D39061F15055B21F0E0053A, CB53C5AE58A041582C8865E88F258533 - -CCM-aria (16 byte key) - 0: , 353C952B - 1: 40, 04D0FEA7 - 2: 56CF, AB9316BD - 3: 6B7EBC, 9008DEAB - 4: 39910BB2, EDEAFA95 - 5: E55EF42FCF, F188B727 - 6: 609D847D15F6, EC7F1C69 - 7: EF321AA69F17C8, 6F40DE4D - 8: FD38158366734BC2, 8ED57084 - 9: FCE911C5AFB4AEAA61, 3F75E2D1 - 10: 0A718789789755D732BC, 0A6FD330 - 11: 81031C57EB378A6DC3B30E, 84D1961F - 12: AC50246D94A46A89009986B2, D8019108 - 13: 6FAD16EC8210F4342A99721841, 8C29D76F - 14: 3B9626B03360ADD6C74EF779C5D8, 6050E9B8 - 15: 67EF70669FBACB50CC51347E507DBC, 3AE3BEAD - 16: D87BF263D3DAE59B7BA40A1B4C6C07AF, 95DD1D80 - 17: BF10E4F29481E923A263F825E1D08BA8C9, BF260C90 - 18: 66D492C7CEAE885C9BDB70671B2C8F947E2A, 4A966B0C - 19: 827A4652E99B9026CC3360F9D3715126C2F53D, F110481E - 20: 818AFC972396ACECEF896D08270D90998F5533AF, 54A8F480 - 21: AA77E19EBF9BC8102432F5170E2410EE0B05EC9D85, 3BEE78D6 - 22: 64B1C81B530DF1873732E0233919858FF32F4D6D3F48, DD5AF66A - 23: 6BF23BC21B55621E986788EACD17C56035E8BA5B7901E5, 494A12F7 - 24: CD2C647D7F03EC0A6A2DB3EB30230D5678FB455E5948575C, FD1CC86F - 25: 4DAE6AFD6AFCC7DF803161690128138EECC4761DA47E1FCA10, FB920F20 - 26: 14916B572C926E2E4A91B6705128CF8C1F037168CE88E36FABB4, 4CBACB0F - 27: ACC579D1209FEDDA483166641E708BFA1E5D76B85F76EFF004A323, 2219CC8B - 28: 8EB53C1FB10A7049A19DD369A021571892A6F178C8E6169BD9B5073C, 6E5015E5 - 29: 1F36580064A6AC07DB82D1432F9896F4B068C886534953EBB98DB17DA2, D3EF1E2E - 30: FC1A05DB901EE1AFE8E52ED73B63B1A6EAD6C8CD9026D4EAF551F2BB032C, 959862ED - 31: F347EDC6A3DE4BAD6E3C544515D94610E9F0F3AE4A257B7A7736DFAD9F2879, 116BB7FB - 32: 99221E065B0E6C6302EE652EF9A2460CE4C9A1962391659915534E55B221CB66, B8C37EAA - 0: , 787B3C5B0605 - 1: 42, FF94D063BA66 - 2: E9D9, ED9326709397 - 3: 1686E8, 56804236EB4F - 4: 535CF7A5, 52476588422E - 5: 800437AD19, 185A5EFC5670 - 6: A779D2341A41, E429781CF5B0 - 7: D7A75656FFEB8E, B208A292F706 - 8: 6EABB52BA84F3C1C, 3AB8F83FE12D - 9: 7A95E0BB3D5A230B15, 861786737080 - 10: 0F92E8E2F46CD4301D9E, C452E77C8756 - 11: 9ACA3A17B2B2258289A485, 762EF170D46C - 12: ADEC64EBF983191045FAD44C, 6221A80B623E - 13: A2F14832FB52077AF0562BEA31, 0F60836B7AE1 - 14: F587EEC6BDBB365B2A6FE71F92EA, 803DD20D27B4 - 15: 07F17D64A06B0C8510DA0645AAF5D1, D1F81F5DFECF - 16: 82B2336763C2FE0536F73F64A7B627E3, 69B7704BB009 - 17: CF15D6DE00C5C7D168CA1B8B7EA31A5EF6, A43C0D064397 - 18: DE9736D8713E87F5CE36A79A7F42FE439B68, 697D7648CA4C - 19: CADCC5991CDF7E3D7ADA08F75CC578706BCD41, DC343B44B408 - 20: DC8665635B1EF4AA5E8DF27792FB1DC0582A4D08, A3C4EE81CEE4 - 21: 908E1344128918AA8292A7E01D26E2FDA6E9C519FC, AD601220E609 - 22: 08281EBD483D4DE8CA9A28F29D070EFC742E63EA2383, AA6E66C930A3 - 23: F647F4727C54FD0B212B551A44B81806FC141E1667C64D, 9797EB3D7F76 - 24: 3BCFEB85F99DBECD1EC3381B4C4C7881E6C83AFEF853A740, DCD9C8A5BE65 - 25: DB692D5FE5DB194638BBDB38697A3C60D8762B752A1AEF8E05, C6807B2D178A - 26: 4DEA6DC0FBADA4C41D68E67BAA5FA2A521BAB0244E0F345F5116, 521390B92C76 - 27: 170ED5EAD2AA883AE61A12E9EDB11BA23F2FCD7FE04F8F1F586D0F, 57EA184E72E4 - 28: B29DA9DBA61A9C8DA3E26397E5562541EF6F8DEFDB0F65A81A7DBDD9, 54122D3FE0BD - 29: 945F270728667C8C9C3F618D5771EBD1B701B5CB007066D4DB7419BF4B, EE94451B862F - 30: 8B63E2F69FD67251AEC1A505C9254C8AB712F9A6C333E148744659F3020C, 78F40E1C5B67 - 31: 2B19E3EDF4D293DF4C0B1FE5B2F045B3E73A4888B7E1F9A9CBB574CD1273DD, 90781206FF9A - 32: 1B08284E4EF92CB6C424F0B38459683F3F67D975F971AF5795EEC42B67DABF6E, 9D6B526CAD5C - 0: , 30E15EF65DB4DDAE - 1: 00, 08E8C717F6AC5B67 - 2: A03B, 946C5F74501BF2C2 - 3: D56630, 42B1EEA73BEAEFC1 - 4: 08CE439B, 8DA272BDCF72BD7A - 5: 327A58A977, BE29F2ABFBA678D8 - 6: 223C5D6B2C02, 08953C0FA1C7D44B - 7: 30A9A5E98C942C, 80ECE405A106DC8D - 8: 1BD70DED77CDEFD7, 7B3FDD5376D7AC59 - 9: C3D68E65373B7DCFC6, B508230790273CF1 - 10: 13ED03E0C6163E2171B2, 1BCF43550CFF1711 - 11: 586D5A2B545BD9EAFBE53C, FCCAB1D344D29C57 - 12: 3669D7E84F4B7F93FBB55F38, 10D01842D6052FA0 - 13: D39DD4F87DD52AA5C9D3613169, A45310DE5457810C - 14: 356A132190D208F46E961E3E91C1, 94AD47938D0A0DF3 - 15: 83A55AAC7F7DB8AF0FDEACDB3A7DD6, 93126DDE11D3C00D - 16: 55399C0176C6CB19D952886701156A2A, ED1FBB7BC514B6BD - 17: B36E00B528B85F8968FEBA512F4DCB51F4, 3BF851562A0CB4F3 - 18: A77687DB5FE6C3997B60A45A3F8FDA57373B, 1BE333C502610568 - 19: AC175F8E8D52EC541E07C1A9988B0CF605BBD6, 692BD414DE5D8CC3 - 20: E413D1B81F34E25C00534DC7978E59D52D51575E, 9411A536CF4D2573 - 21: 6FBDAF7916EE61086AC72C49F413EC18ADBCA53F9D, 160F6E12CC3FBF39 - 22: FA7EB52D22FD52C8571141F4798FA8A9E0EB270F4E91, 51C39B267B58399E - 23: A6F2E3A593A48E9F1B3FD8F40DC9EC4D47500DC54434E9, F9413DAFC65C68F1 - 24: 3856DCB73702A9D7E550EA6D7E5233EC91F4326A40AEFD5C, 8F6A00E327E33047 - 25: 420E51D174F2EF84C121B423A3640C4F7A8083F2C63C527B8B, 76D8597F67B23793 - 26: 25A3C0E0A1CEE9A189E839D15679676923C6000F81405EE3B511, 71D76589AFBFB49E - 27: AC418B46CF47064C4918E7421F9C8CFDE4BA3AEFBA03A323860034, 0471F6A32F11FDA1 - 28: A77C98CE3621CD622158474FFE47CC12E2F02CB7A160BE39FE50030B, CD0FF7998005DA63 - 29: 643AAC1CCA54AEC8EFB771D5090AAF88B545A3521579DFAC5EF3D439FB, C615FE523826C242 - 30: CC7B70B9C58EA2237BC6DFCACDA7079720E917365BF79BD6E2A847E4E13D, DA0468908B714843 - 31: 27C25C174ED7AE5E66E4DAEFBD9B0744F3D8B6A41B38C5B02F186D23431BA9, 3241E962227F9F72 - 32: 292ED972430B2D2982052E9301F41B50F9848C02E9BC0E809DA08AF0D347A809, 7D6E4F092C826D75 - 0: , C1BE20B391DFF3FC20AE - 1: A8, 4FAB63237553937B38E7 - 2: 25F4, CF35CF7B6B96290FB4DF - 3: 3BAF27, 83B6D85A91F5AFEDF5AC - 4: 94E818AF, B5A3C04ECB873B52F0F8 - 5: CE0C2D087F, 2766496C9567267072CE - 6: 502CB4A4B2A7, 64907CCB60471F2924C9 - 7: ADF8D19B1834C7, F237E92D9FF5500C0E44 - 8: CA86744F3250DD38, 6D7E2AEBD4716D130131 - 9: ECDC361CD582DE94D5, BC6016F46F7FAF7135E1 - 10: 692CAFFE4C08AD375752, 74E2BF73B546577B37EC - 11: CFB8A68EAD2B88B13550B0, 237953A1D3CFF52C9558 - 12: E2026F396401D2B1F15D63F9, 36CE964CFEB110F3D84A - 13: C22EF3D87561AFFA3E7F3D0F91, 13EA056FB5284D5A75BC - 14: 5212A750AB866CE4A153A8DB2AFA, BCD125B9B76818E81B9B - 15: 44E9D1ED149CA180351E278F416556, F9538B3C4899EA89FECA - 16: 65A147FBBD36CA41568AF5F96A5A3ECE, 54FD1275750BCB2DD5AC - 17: C2FEE32F01CF7286A842640EA567E72C6D, 1C75B72DAB121DFA92E0 - 18: EFA5D06D7893FB8838B11F6EE745EFC7B4C9, C35686D9614C5CFF5042 - 19: 2952B4C053863843DF919DE42C16313F004C20, 16E732518DAF4D53EE91 - 20: E3B955878D155BD6EF5C7004B7C1C0070FE58837, F7AC8CAB935E25D3B60B - 21: 814E249428BBDA22153E7F9890C2ED13A12E7FF796, 90DB2820D9ED24F495B0 - 22: 423B09B9B924F3DF2AB79B023315ED129AD35DB6C355, 903077D977DE16023EB4 - 23: BBA3C10B516BBA84C4AE30CA1D30BB6CFA01A62D2DA51D, 8FAF683CA483C08D19F0 - 24: EBE33C6909AB4F9130AAEC030433F0B6082FE48280299349, 06ED9D0C70E1708C1CDA - 25: 0731BFCFD73274E1233576E46359953B852E4CDC6F5D940DC2, C3E13A2F715964CD50B1 - 26: 7BD05518DDA1362075328AB5D6792B32DF002201CDDF0C4163B3, 5CE5C0EA28530ABECF16 - 27: 2347262087C438900B3F062DE1CB218F3294A2DC6FC89D6E156CB2, 44711524DBC951D47013 - 28: 072794D15FB5606DB1B3F5674AA7A0D5F5F084AEA821D1BBDB2DA0AC, 2D145B62AE69FE18FDDC - 29: 1AA2C2A99FB394E2E196A15C4FA6A4F9970E23CC77E81A60457F887CEE, 9FD6B58E58338112EC8F - 30: 4CE0A9C194B734FB8B8308D143B22E72A7944618C116C5E654FF920F8806, 763C4501E43F8C46EE55 - 31: 605C37F65FD61722BAC0EDD3B62F4BA914D845C274A787A799CDDF1AEEC593, 699B0E4E6543CB996790 - 32: B86FD2A93AD6BEA3CE66E2197EDA1472A88CB6387B52BD3787B7EAC902D0E6AE, A50D2586D56EA6A4037A - 0: , CF446313FD8A645C60A1F40B - 1: BA, E6710B7C2A78D47A71B26ED0 - 2: D960, 5AE6DD284A9BCAEB629B8B9C - 3: 1EA3B6, 58C0191319B3B175DFB6820E - 4: 16D9A97D, 23B0E4303897871DC9734F76 - 5: D4FE36CEDD, 2D72E02D57DAC751AB0CEE8F - 6: 82AAFCFCA3EE, D63ECFBDFBBAFBEE8C00CF61 - 7: 55C7E7A8779CBB, FEE082A28CBBB2B5504B3414 - 8: 076486EFF93766AC, ABA77A4DF2FD27B5A0507CAB - 9: 7B0E5373DA867FA7DB, 2FB53922B11BB3D8C15144ED - 10: DD5B91E115AD19D174D4, 18383C7F44B6F5DCF65E95A3 - 11: 84C0104573997F38F4FC51, 2711D58E7F24DF402548A10D - 12: 9859F1D7D63959863FC93B56, 592C77331635E7B7D265AE25 - 13: 967BCA6CD52FD98FBE37199954, D43E22B6810495F5B494450D - 14: 335A8C490422FD163288FE4A28EF, 3406F283825DA98DD9DE8B68 - 15: D4ADBDD5735D58123BE9F36413CDE4, 330CCF19D96073732F70D752 - 16: 896BBCD89FB64E867A1F73D5EA55F2B5, F5A883514833FD74EC516780 - 17: 0DF532EF82C39EF0CFB18785A6DD2E7573, C79B51B38414CC2FCA5D0D4F - 18: 70B2DB970495C94E83B711B1E97CBA10C102, 967308F53B7AA9028B0B7462 - 19: 91864A1546761A3835B05F85916BA78D9DD4F1, 89CBDE61C0E2AE5FBAF64DCA - 20: AF713FBE34DFB615BEB6BD2CFF119011FA7D1D51, 5DDFF3F71B8B9CB7354A74F4 - 21: 7549D1DF379C06A8C6BB1D285BD72513D3E846DF92, 5A4E0B4680BEF36609CCB39F - 22: DAF7F1B830B44D3DF0C9EBFEAADEA5C7B05C95FDAF99, E07473B038982705DCC379F8 - 23: 04B5B1FA59C850080C443021D56D05E38F3F0E8EDAA431, FED7EF959CAFA4C46F287642 - 24: 2195B5AC30D18BB4B4E2CF4ECA676AC969D4DE1F75431CB5, 73CBF496CE3865689FF6940E - 25: CABB3B3E015FC40A552997218C19EA9CA46AF3B8C112D2C851, 5E7D1CFFE431D6A789A0B7E1 - 26: 5D7AC58EAC3F9733B7DACD3BF010A2F3DE58EEDFBD08C90012B5, C39BE513008766FF434FAB59 - 27: 9EBDD6B64335CDF1769427E593FCD2252672E5BB26C6058FACBAA6, D67D59CE706192BC7A86FE03 - 28: 12A6AFDEC392297EA69122BFF101E854AA2443DCEFB1AFDDC68004E6, 1E39B518AEB583A8B9A5C0D6 - 29: C120BA1C6F4FB5A861EFE07DE75568383AE5DDDB96A112D9D7CD9DBB62, 992705B0D8F95C60D5CB6C3D - 30: BCADA89F88D120CD55BA00E9BA4D4B670B276D44B31903F5127957D20818, C512451CCC3A0ABD6278DFC8 - 31: AEEB302F3F3A97A84FA98B2B01189CBB928A493D799A0317DC8A007B65B1D1, F6856D4470B16F3B8602E75C - 32: 5AAD53E89DC06F1E84A2FD8CCDD36BA6F47D14D01F04D48EDCC27E948BFF683B, 38C20D94346AD5403738686D - 0: , 2563E2D182ABFF2B2EEF6852B554 - 1: 33, E277D16A8F3ED557E38BC608AF5B - 2: E20E, 2784623E05CEB3B2E31FAEA73525 - 3: 42F4BF, FE14A557F49C02F3966DA8DE2668 - 4: CEB2B732, 348845C86E91F3E1A4C46FD72E65 - 5: 264764008F, 857EB830B15A7EBA1B3F5CEF215E - 6: 518CB1ACCE9F, B005EA47FA5E72068A61C33520F5 - 7: 4AC3EC55EE4A95, EC9F7A18965C68963AFDAD26CA19 - 8: 2A3C1EAD95B0D45D, 3D8ABFE65BAB65ABA4C3194FE54B - 9: E6D901C91EF5EEB339, E4CEEC4B44C0B1CAA30FE6D33B19 - 10: 62B15A5948F36EE3CDDA, A56DD8F04357FE86B023932CE8C9 - 11: 2B27AD3AEB7CB2A587582E, 42A9242F68486EAC8B1FE18F9AE5 - 12: 21D108C92B48F6263277544C, CDF154F44F007FA95CA5AD5CA323 - 13: 4590D69EE9952C64CCF310AEA6, 9ECCBB7E655041AB6CEC41668EA2 - 14: 60B1A210E4607F937A9FAB8E079A, C837E2A448ABDD83DC197C9D893C - 15: C8C4124CE976A68A1052DB25F51BEF, DB07500D19EA150F14085DCBE400 - 16: 71A756AD320BEE7C513F3210C088CB41, 900127FE0997B3E79A8880D62D47 - 17: 133BBC8ED72F269A5593A10E537AC801C4, B5AB6682BFB669C82BEE38242DEA - 18: 3AA44688160403908A1C2FFAA9F8D0B294B2, BCFC5616590F8B53B97CBBE9F5DB - 19: ACF6E799FA4C0B86C8264533A97B23080E3C1D, 80CACEF28CCCAC0DD0EF90B34917 - 20: BC292FAB803E3901330ECC533A38E50444C5BC19, 2EA5F7D65B108F2C5AB25BCA8EFF - 21: 0A38406D1C466372639547568C9C717B8A1A075671, AB960902BFB1894C3BA2B3EF945E - 22: 546BA94CC4820534F3BD3C8D8A6AD3C6F0BA38E027CD, 03EE97F7054AEADD82469E31F61D - 23: D6112621EA3DDA4F274EC177E18D834EA3BA6F74F78ED9, 886B16339C87449FA065E5605A0E - 24: B841A97227036C16488E6F4B0A15CCF986838BFED41FED36, E1F8443E0E9048CECBD24F323A5F - 25: 714AB86C76F68F9AA867D19BEE0DF20CB32703ACB53E53CA0E, 17888526D8B19FA8801281CE9D72 - 26: D89664AB9A0F888A68ABBD63A1658147CFE15C36BE8CDF0F7DDE, 83F081F0CE749542FD39640444D2 - 27: 1F4A486CF0CE22B1692B473086D9757A4A3F32DEBD003EA8C2D414, B2A1A82D8578D4B32848A5EDEE18 - 28: 090BCA569B1E36CCDD12EFD7E560D2CF4CAD081CAD475D62D119C8B0, E5F18E4189A3F3AD2EF04A3341E3 - 29: 1DBF0670C27821B66210D218C5CD528DD1F2D1BAC8CBA9CC1B3A87CA04, 2635F425B1FC7AAA8A082C0FFBF8 - 30: 5923092213EC6CA393B8EFE77F93371990CA775CD592E346A17C4E460DD4, 56F733DE7E0782550C5D70CF6021 - 31: E94FBA8D5E23F50247E4A76C765F8B7B1282085D9E0560BE2B9B0DE38F7C7A, F40237AD42C339343748A2AECBB4 - 32: FCF4B1DC6A66A089AE1C490719F237F3C5D54815AB15002552E40E6DED4F7116, AE0190342133297978F22E2BA7CC - 0: , 90AA97B50C07B986CB22CE872262E5C8 - 1: 24, A17C03DE0302D7075560152B9B571296 - 2: E71D, EB34CB795E72DFE8E23DA2497A7CCEE7 - 3: DB282E, 22FA05C05D5E39954CA3A0721AD895D9 - 4: 4A8CD9F1, 92AA478A5481E46D75C78E9ADE315EDF - 5: 292113BF17, 9D9928E79D69A5529228A768DFDF9EEC - 6: CDA03305EBEC, 494D04B066BADE132A572FF91E9ADEB2 - 7: 8405AFEA0C0D0F, A19976B5AA565B22AA94CD53666311CB - 8: 07F1CF1261CB2EB1, 642D12B2CEB9EA5E51A4BBADC899B62A - 9: D40F09F568AA18A5D5, 51106D7E38E82E4224936E6BE87BD6FE - 10: B9FD96EEB4C083AB8F24, 3EDD1218E5D0E7FDE7382256896E9D50 - 11: 7A92B4B1D48FABF1E3C4BC, 85008D81EEE47EF5EF9CF1ABA5FA3192 - 12: 9A57AA2A53A20903D012F2FF, 42176606CD9761644A50734143F1BEF4 - 13: E02FC265EEDF4E054EEA9B67D5, 7E8C4D257585825193841E98D7817167 - 14: 8A4151DEA78733E9B0BF30999911, 532BC2053D878AB7B5735E5E76416949 - 15: 2B731483944FE17BDED1C4D82E445E, E9987032CF901151B2BC633C0E955A24 - 16: 3FE0EC707A6E3C6139A598AD4E33E691, 6D720C056BD515C47C7020740E4D9A08 - 17: BAD9E039C3484A82C34DE809C0192D8C44, 06FF6E8854A56C5A087FBB5430C7725A - 18: 44B84F959B9F49792AC21434934F4ABF1AC3, A009DE1545E568F01E07F260AC40A7FA - 19: 583997186D8178E21AD153F092CC74066FC31F, F7965FEE8032320F8CCE9B071ECD62AB - 20: 7D92C03380F205831C12375ACC8B3D3A60A603D0, 2BC6032B17B8E461FBDE288BC0B86F24 - 21: AFE60F59BF76FD749F376C07CBAE1A5AAB3FDC47DA, F06CDFE41A4A7A257BDAEE38A1A6C51F - 22: 777B7AE4D0CCE4A85EEA7C6AFDD873B4A24811E6858A, 0CDCA826713FABED9A9A5233592998DB - 23: 7A7A7D5A0E62DE9BD11BF575500EE1BBDC92118503C047, 7891D8A92A433DF21E23AF5678DCA245 - 24: D24E417D3CAB127A903DF61787C4267A654D54ABAC40B881, 02B4A82A1D8EEAE25206E09484E8F21B - 25: 3AE54F568B547BE4FB08DF08E66B857A871C1ED089180AF2D4, 64380971D369C2B3B3C406BC496917D4 - 26: AE93815622C1A312F649EE0C43E2051E3CB6FE89FA2421CFE971, ED0B5E2BD855ABFE30CB4A1A456B839A - 27: 1501CF3202EBDE271A744258A8B05E84DD004B7AB5212264EB1AC1, EF09930B4430025D38B3B1C1B74B37C2 - 28: 9B144CDF671DAD15F1C6F831A784D71C72F5A32F3C7EA3B9C6718D5A, C79C989950E567CB39B4E973CB016676 - 29: 740E8222265774D1D1F284AA87049023C665F98F27D0C38966E3D61038, F790E6A40C16F92EC7694C5C035A9934 - 30: CF9DF272EFE7FA591E354CEC9EB137326A271388D709168CD54FF6C60993, 7C1D7575DE7AC6300CB4D1D18661B4A7 - 31: D9060D154C44B69D9A78D6120CEB0ABDA7C1F994639CB6D2343B5BA3FE5645, FD9F4A81F1C4618A68A32C79C53BA8AE - 32: 39210B2EE8FBFB0980B0923AFF21098E8A0433B3DE9267FE5327C25DA98243F3, AA120B8DCD6AED7F118E313492799988 - diff --git a/notes/cipher_tv.txt b/notes/cipher_tv.txt index deb7b941..f144faea 100644 --- a/notes/cipher_tv.txt +++ b/notes/cipher_tv.txt @@ -214,163 +214,163 @@ Key Size: 8 bytes 48: 24DA24DFE96AD818 49: 226C43435FBDA34A -Key Size: 40 bytes - 0: 499CA6E04E447261 - 1: 728882B8835E47C1 - 2: ECEF0688A651A617 - 3: F008B13D01734B28 - 4: 4DD2934EAB4FB4D1 - 5: 2610DC4D4F261556 - 6: 58797B0A1BB0131D - 7: D16E3E20C362E473 - 8: F06652826F5C5B57 - 9: F11F3E9C4686182F -10: 28C7C8BB460BEDEE -11: AEFB7D2FD8ABC2D8 -12: C146E26643553835 -13: 232FC2BF8A54219A -14: 55703720CAF243FD -15: 7F2EAF0D1D20978A -16: 213C6A158947CB1B -17: FF9495B73253E80F -18: 47D1BD02FB3EC859 -19: 51E21481E4B6A7B6 -20: A0D0EDDA03CE852C -21: A162AE2A969387DE -22: 0A5ECE5DF19B2AF5 -23: 41F16D234B6EAAAB -24: EC8FFC42CAAAF006 -25: EFFD6F1E48FCDAFB -26: C091EDD3A4937757 -27: 5C9B2F970D0C115A -28: 27F3768CCAD92583 -29: D3FCCF9BFBF47996 -30: 8D7854949C015FA2 -31: 9648DFC6ACA2C806 -32: A8D4F0B7CCCF9B38 -33: 3A0812F891E84837 -34: 021E33D097ED37ED -35: F4B31EF29788D5D2 -36: DE46AE6BFC93EA13 -37: 1E4A27A26F8AAFC1 -38: 945FBB73407F73DA -39: CCEB336C66167016 -40: 3FC46259D0C5FBE7 -41: 42E982B0B4778F78 -42: F04AAA8A3F7F06D3 -43: 325FE8B823755009 -44: E30D2BA24EDBC63A -45: 642CC42E7D56A67F -46: 9DE0BFDB6175B0AC -47: C472D350DAFC74BE -48: 2B393770C304450A -49: DD0520D329153A2B +Key Size: 32 bytes + 0: 46CDCC4D4D14BA2E + 1: C079641BD6584E5A + 2: 38828DF8B4C4920C + 3: B4ABCF6B78A721F3 + 4: 8E7E2914CBBA708C + 5: C0EBE7002C888495 + 6: C60F404DE7CF9B78 + 7: B29E843E1771EF26 + 8: 983033386CA6A09B + 9: 76F1F89AFDCF7130 +10: BED4E2114F4376FA +11: 879A2B9D19AFAB87 +12: 366201BC87532AE5 +13: 6F409580FA907A64 +14: F7A202F00A38863E +15: 98B0A9C79FFC27B1 +16: 1CB68D9BBF8A1A8A +17: C21A2C54E5471D23 +18: 76A81C3DFC149934 +19: C7A0627412FC323A +20: A034684D7058E7A6 +21: AC87722F27029BC2 +22: 36A6C2AF10245E3E +23: 1F85B90D11217EBE +24: 9C2A0C383A4AB7D5 +25: 11D5C689039CA179 +26: B0B38C7077E1450B +27: C59C7DCCC3B8A1BB +28: 9BC539F29208AC24 +29: 8546F17C77C60C05 +30: B189C3E92AF53844 +31: 3C7689163B8D2776 +32: 6AFEB9A0671156A8 +33: 05514E39F2990008 +34: C941E31A2A1F42BF +35: 87C3777C74A730A0 +36: 2861667755C8B727 +37: AF75A0312433B151 +38: F76939331E9C9792 +39: 819FF8C81FC7C8DC +40: 31E7B07EB03D170D +41: 696E5EC1A741170E +42: 6C5BF0E0BA48FEC3 +43: 6D751BCCDC475797 +44: BB5A91D0CA7E60F4 +45: 7F7EC0531C88B14C +46: 9F302392529B70E8 +47: CAC9A1A88F09AC1D +48: 39D56A652E02D5B0 +49: 13641D42BC126517 -Key Size: 72 bytes - 0: C8F5C1689AAF6034 - 1: BF658D1CEFF752E8 - 2: 5EE91DFF2566390E - 3: FF7BECB092A623C6 - 4: C859539E96858608 - 5: 3DD851E952DCE432 - 6: 2DEBF6749EC8E410 - 7: 88B77C535B5E2579 - 8: A67384DCDCCC3C8E - 9: 1F974C7714F97B4E -10: 4B9D2C2F3ED46CAA -11: 12A9D60543AFEFD3 -12: 941ECA1A09703CD8 -13: 0464288B28188B93 -14: FFCDE810BDFBD767 -15: 50CF8A479D54B460 -16: E7C44BE3BC654AF4 -17: 08F2E8DAE7EAEFDD -18: 2470C7547814D06F -19: 5799821CFA47439C -20: 7164459D5E911B19 -21: 3B806337776D07D9 -22: FEE121F2A2C557D9 -23: 4F0A0398BCBD3EAC -24: ECA873E2BC43B2BA -25: B2F25596E6A46A9B -26: EA1EC81B4671CA39 -27: 1DFF55EE370C5343 -28: 9FAD2354251FB216 -29: B21B342FAEA8B64F -30: E5A1C35072011C6E -31: 5317FC0F857832D5 -32: 0E9B60ADD0A47426 -33: 0A014F6356BA971E -34: 331F416B4CA6B922 -35: 7F9536CF96852A1F -36: F9D80E7CEA338F6C -37: 13B67FC20B26C44E -38: BDB946F241293716 -39: 02EFA671E6A236B0 -40: F2A34AF9EFD0DC25 -41: AC6721A0C4AF4EFA -42: C1CF63C113586423 -43: 23CA7D016FBC6973 -44: 924693EA6440AA19 -45: 7B8B278C28FA5FFA -46: 2EABC1470FB3A0FC -47: 99A4CD16C7156F4B -48: 1338F4738C6A5EAA -49: 036C4748A4AAE029 +Key Size: 56 bytes + 0: 373C66BBA50EB9CC + 1: A4E8C602AE3A2CEB + 2: A59F08BA78502F32 + 3: D0D4968015F4E4FF + 4: 0D3C2F291E6C2EE0 + 5: 3F99F5DADAD5FD2C + 6: 5BA41EC1A506396D + 7: 0BDE3B5B50591D35 + 8: 5C4A6AEFA69A115D + 9: ADABFE96D6D159E8 +10: F97F0B9C88ACD5C0 +11: 8882A163F0F02BB2 +12: F00556C9F5A56A32 +13: 257615BEC96CC228 +14: D58DAEC547DD8B89 +15: E677F4953EC44097 +16: 20156D066DC37000 +17: 6F18E01C6FDF947E +18: C8DFF24F12621237 +19: 032F91C5119AE308 +20: 394194AD8BC1E5CF +21: 6F24E937F3925581 +22: 086A4510D95759F3 +23: 073204BADF0EE942 +24: 5BC8B8E402D90F43 +25: A10B7E9D01DD3809 +26: 22C0B183AFFDA506 +27: 216306AE6DDBAF3F +28: E275E1F52430A1FD +29: C3BDB49D588D31BB +30: B860818C5923B688 +31: BE1BC7A444B0E141 +32: E4C4B67900DBC8DB +33: 36D7B7ECB6679A9C +34: C1EAD201EE34BEF7 +35: 9ABBC877CE825B14 +36: 3B211121C0C3C09A +37: BE3B34FF2E83F5A7 +38: 46C2B3E628A53EAD +39: B7E7DDE16C7DFF62 +40: 3C9A14C4226EBCC5 +41: C5FD46242DB29704 +42: D45A96723FF62201 +43: BB015D10878CF70D +44: 71DB021BE398D41A +45: 06F52D237F06C260 +46: 3552F47E8CCFC73F +47: 769E33828AD5D88E +48: 659861DDF080AA67 +49: CF7A13782F317342 Cipher: xtea Key Size: 16 bytes - 0: FFC52D10A010010B - 1: 9CFB2B659387BC37 - 2: 7067D153B259E0D6 - 3: 0A1769C085DD67A9 - 4: A9D781A1A7B4B292 - 5: 6FEF8300DF395062 - 6: A67B66CA99B9121C - 7: 006E657E1DAD46D3 - 8: 2D63322467438A5B - 9: 4F67A826126BE01D -10: 852C6FD597EBAB00 -11: F8DD14F59FF44A20 -12: CD4DC4E92B5CD40B -13: 802B89A3EFB75810 -14: CCA7D920F69A5491 -15: 0DFF98CA4F71CA0E -16: 80118F2AE4E83DE8 -17: CD6935285D45D83C -18: 47B4613483889187 -19: 87F3F1975B8618E3 -20: 49BF15EF40C72DBA -21: F850822AD58AD1CC -22: 9701AD2EF51FD705 -23: 705AE7F6FD60420B -24: E885CC84A9866B28 -25: 93E0D712D27E4E22 -26: 8C9CE43E517D3324 -27: 31004841AF51FB0E -28: B250BEBF0E58457C -29: 78290B6D83D442E9 -30: 3EC72388709CC6E2 -31: 099FB875AB5CA6EA -32: B15E20B58F5E8DD0 -33: A41511E198E0B1E7 -34: B8B5CDD9607B6B40 -35: BEF9624E922DB8AC -36: AF198FCD314D8DD4 -37: 1A37E433C261EF9D -38: AB7895A2E9D41EE4 -39: 4C95BE8D34A7D75B -40: 0D90A8EB03F2852E -41: 9AAD1D630D835C67 -42: 6AD88003661B2C5E -43: 4FA7E2CC53EBA728 -44: 862245D794441522 -45: FAB262C13D245B3E -46: C0A29AA315A5721E -47: F98617BBEFA6AD6A -48: 6F84EAB462F10F36 -49: 30850051303CDB96 + 0: 256004E1F55BC0C7 + 1: 2D385C151A691C42 + 2: F93BFEA758A7DDB4 + 3: 2A905D97C0CA3E48 + 4: 12C7C2787B913AE6 + 5: FB24B1F32549EF59 + 6: 2A8BFF867FB4FF73 + 7: 5692243526C6BA77 + 8: 4CD423ADFCDD1B6C + 9: 9B99AFC35EB2FED0 +10: 416B4AA4E07DA7F4 +11: 4DBC9052ABFF9510 +12: 8AF9457F8E599216 +13: BC3CA2B1C7267395 +14: E4BE31DF42282F7A +15: B344CA8AA57E9E40 +16: 57A1F94CD2F4576D +17: 96177FCD28BFF1BB +18: 78A1F63A0EBAAC33 +19: 5F3FCBCD7442B617 +20: D6F7CD5ECA688967 +21: D92EDF70CBDE703F +22: E2E2C2EE5D18E58E +23: 4BF00478CB7833C3 +24: F9936D550815FE8F +25: 19A3B07B3E47D7D8 +26: ACA441F099A7E30C +27: F70183F199988E3F +28: 0A41FC22F369310A +29: ABFAF40853A4A38C +30: 6B5D29DB1155D96B +31: 0DD0C08A27561D66 +32: 4C56E22292F17AA3 +33: 3F925ED65613DF4A +34: 521B4C97081DC901 +35: 2B1EC3E1C8CF84EC +36: 2A412556F42A48F6 +37: 0A57B8A527DFE507 +38: EB55C9C157E3C922 +39: 6E6D6E9AB925ED92 +40: A4C5C90A0D4A8F16 +41: 7F9F9F658C427D55 +42: 9A5139994FF04C3F +43: 9054771F027E29BC +44: 90543E7BAED313BD +45: 5DEC1EBE6A617D36 +46: 19AB6A708CDB9B2D +47: BABB97BB5CF9D4E4 +48: 2C2ADC05AF255861 +49: 52266710153E3F7E Cipher: rc5 @@ -1005,222 +1005,6 @@ Key Size: 32 bytes 49: F8B974A4BC134F39BE9B27BD8B2F1129 -Cipher: safer-k64 -Key Size: 8 bytes - 0: 533F0CD7CCC6DDF6 - 1: C3CD66BB1E5E5C17 - 2: 079DFD68F6AF9A79 - 3: 84EB4922264A1204 - 4: 31F3A7D739C7E42C - 5: 381F88FB46E1DCA2 - 6: CAF4AC443E50EF47 - 7: 2914E255DA9BDDBB - 8: A160A24120E4FECC - 9: F748C6009FFBC465 -10: 8B3CB5784846D2B0 -11: 4F98C1621473399B -12: B486B0BC365ABEE9 -13: 314EAB2B4E9F7840 -14: 613FE3637968A8FE -15: 28935352361E1239 -16: 0DCB090233B8EB3C -17: CF0BC7F307586C8B -18: 64DF354F96CB0781 -19: D2B73C6BAACA7FB1 -20: 638FCEEF49A29743 -21: 204C4E0E0C0A8B63 -22: F041EF6BE046D8AA -23: 76954D822F5E2C32 -24: 6700C60971A73C9E -25: 80019293AA929DF2 -26: 8EF4DE13F054ED98 -27: 41DDF9845ABA2B7A -28: B91834079643850C -29: 8F44EC823D5D70DC -30: EC2FF8DE726C84CE -31: 25DF59DC2EA22CB5 -32: FC1130B511794ABB -33: ED3259359D2E68D4 -34: D7773C04804033F6 -35: C1A32C114589251C -36: 51647E61EE32542E -37: B95A8037457C8425 -38: 4F84B3D483F239EE -39: 458401C3787BCA5E -40: F59B5A93FD066F8A -41: 1450E10189CC4000 -42: 0F758B71804B3AB3 -43: 51B744B271554626 -44: B55ADA1ED1B29F0D -45: 585DF794461FEBDA -46: 3790CC4DCA437505 -47: 7F7D46616FF05DFA -48: 6AE981921DFCFB13 -49: FE89299D55465BC6 - - -Cipher: safer-sk64 -Key Size: 8 bytes - 0: 14A391FCE1DECD95 - 1: 16A5418C990D77F4 - 2: EE33161465F7E2DD - 3: AB85A34464D58EC4 - 4: 3D247C84C1B98737 - 5: D88D275545132F17 - 6: 00B45A81780E3441 - 7: 6830FAE6C4A6D0D3 - 8: 93DF6918E1975723 - 9: 15AB9036D02AA290 -10: 0933666F0BA4486E -11: 93F42DEE726D949C -12: 756E7BA3A6D4DE2E -13: 4922DCE8EED38CFD -14: 8EC07AFBD42DF21C -15: E82BEBCFB1D7C6B4 -16: B3EDB4CB62B8A9BA -17: 5521307CA52DD2F3 -18: 54B5D75512E1F8F3 -19: 1A736293F2D460A8 -20: 778C71384545F710 -21: CBC041D3BF742253 -22: 9C47FC0FDA1FE8D9 -23: B84E290D4BF6EE66 -24: FC3E514CE66BB9E3 -25: E8742C92E3640AA8 -26: 4DA275A571BDE1F0 -27: C5698E3F6AC5ED9D -28: AC3E758DBC7425EA -29: B1D316FC0C5A59FD -30: 2861C78CA59069B9 -31: E742B9B6525201CF -32: 2072746EDF9B32A6 -33: 41EF55A26D66FEBC -34: EC57905E4EED5AC9 -35: 5854E6D1C2FB2B88 -36: 492D7E4A699EA6D6 -37: D3E6B9298813982C -38: 65071A860261288B -39: 401EEF4839AC3C2E -40: 1025CA9BD9109F1D -41: 0C28B570A1AE84EA -42: BFBE239720E4B3C5 -43: 09FB0339ACCEC228 -44: DFF2E0E2631B556D -45: ECE375020575B084 -46: 1C4C14890D44EB42 -47: EA9062A14D4E1F7F -48: 82773D9EEFCAB1AB -49: 516C78FF770B6A2F - - -Cipher: safer-k128 -Key Size: 16 bytes - 0: 4D791DB28D724E55 - 1: 53788205114E1200 - 2: 4472BCCAF3DDEF59 - 3: FE9B3640ED11589C - 4: 4DDD7859819857D7 - 5: 6BF901C4B46CC9DB - 6: 930DBFC0DE0F5007 - 7: E89F702158A00D82 - 8: BEB661953BF46D50 - 9: 6F0DA64C0FD101F9 -10: 4EBBCE4E5A37BED8 -11: 996EAA0AF92A09AC -12: AED6BB9522E0B00F -13: DF9C643624A271B4 -14: 2E5C789DD44EF0CF -15: 86A5BA1060177330 -16: 2385DBA4DEBEB4A3 -17: 82E2FC765722094D -18: B3CA2161757695EF -19: F8A4C6081F3ABC06 -20: 6422316E1BEFFAC8 -21: C178511BFBFF380E -22: 049B8CBEDE5942A9 -23: 0E181292C1B1DEFC -24: C347BA0632A49E55 -25: 32FDA46669714F99 -26: 0523743E30C16788 -27: 782BE96A93769ED0 -28: 9F99C9E8BD4A69D8 -29: 104C094F120C926D -30: 1F7EA3C4654D59E6 -31: 90C263629BC81D53 -32: 1803469BE59FED9E -33: 1478C7C176B86336 -34: 362FE111601411FF -35: 6428417432ECC3C8 -36: D74C42FCC6946FC5 -37: 1A8F3A82C78C2BE6 -38: EE22C641DC096375 -39: 59D34A0187C5C021 -40: F68CC96F09686A30 -41: CF8C608BDCC4A7FC -42: D2896AB16C284A85 -43: 8375C5B139D93189 -44: 0F0462F9D8EBAED0 -45: C3359B7CF78B3963 -46: E4F7233D6F05DCC9 -47: 8533D1062397119B -48: 4B300915F320DFCE -49: A050956A4F705DB9 - - -Cipher: safer-sk128 -Key Size: 16 bytes - 0: 511E4D5D8D70B37E - 1: 3C688F629490B796 - 2: 41CB15571FE700C6 - 3: F1CBFE79F0AD23C8 - 4: 0A0DC4AA14C2E8AA - 5: 05740CF7CD1CA039 - 6: 24E886AD6E0C0A67 - 7: EEF14D7B967066BC - 8: 6ABDF6D8AF85EAA0 - 9: 0EB947521357ED27 -10: BDD2C15957F9EC95 -11: 0989B87A74A2D454 -12: 04C793BA2FAB7462 -13: 3DAD2FACDDFA3C45 -14: D1194935CC4E1BD7 -15: BAC0A2C8248FF782 -16: 7DD5894A82298C64 -17: A59F552A4377C08B -18: 8DDDE41AB4586151 -19: 7CC4261B38FFA833 -20: E99204D6584158EC -21: AACC8ED0803CB5C4 -22: C105CA72A7688E79 -23: 3D662FDC35B88C09 -24: A4BCEDC0AE99E30E -25: EAECF9B6024D353C -26: 214651A3D34AFF40 -27: 807099325F9D73C2 -28: 45EC21AEB6B90A24 -29: DCED39526687F219 -30: 2CC248E301D3101D -31: C7F37AB8570BA13C -32: BB9B31A34A39641B -33: 5314570844948CAC -34: 4581F837C02CD4F4 -35: 4E036B1B62303BF3 -36: 7B3B88DE1F5492A4 -37: CEF2865C14875035 -38: 14DE8BEE09A155DE -39: 3AA284C74867161B -40: 3616B4607369D597 -41: 07512F57E75EDEF7 -42: 710D1641FCE64DC2 -43: DB2A089E87C867A2 -44: A192D7B392AA2E2F -45: 8D797A62FBFE6C81 -46: E52CE898E19BF110 -47: 72695C25158CB870 -48: 29F945B733FB498F -49: 27057037E976F3FB - - Cipher: rc2 Key Size: 8 bytes 0: 83B189DE87161805 @@ -1433,113 +1217,7 @@ Key Size: 8 bytes 49: 6B901B2B79B6950C -Cipher: desx -Key Size: 24 bytes - 0: F490BAC08301C6C9 - 1: 5668E3676102907F - 2: 5BA2BFCC35AED470 - 3: B2CC7DBA467E62C6 - 4: B4BF359A876FAC3E - 5: 2EF94EA88C1ACE79 - 6: 9C175106D3484502 - 7: 38F466A89DFA587F - 8: 745F3EB5BEDE929C - 9: 9EBA1D104A86E113 -10: 561DC144F7A2CB5F -11: E1EBF96BD996F292 -12: 4D96B8CD7D26DA9C -13: DA59711131B18AF3 -14: F5EEC897F79D3597 -15: 3A39A7F0060373CB -16: DA95839AA553147F -17: 8A0BBA6804BDFFF2 -18: B0A0881F389062B5 -19: C6878531FF4888EC -20: 9C73653BDB9EBFFD -21: EF81557E5B539A4C -22: 959ADE9663CC395D -23: D22C6460C0580E1B -24: E3B7EFC7DC2EEB28 -25: ACF66715DFE81D84 -26: CD2FC182D9A0F565 -27: 34F6DED980E437FA -28: 313DE7369F9D1BB9 -29: 554A743622A42A3D -30: 6F460E480078F091 -31: E752181D34A8FED2 -32: E0C7F0F53F84830B -33: 1159C652EB6460E1 -34: 2A68847D986CBF7D -35: B3CB050C29C86EFC -36: 2C0EB50DBCA918EA -37: CA1D0D17D185D9BE -38: 3CB9EB47E1E05CC1 -39: 2AA3DE0A38F3A0F5 -40: EA43C7125932D2A7 -41: 79A23C0EA9E6C11E -42: B711BFC1DE05D9B0 -43: BCF5ADD7751EED39 -44: 7A41A2FE64720CA2 -45: DC43A35EB0489FE9 -46: 9353A9FBD060B991 -47: 19DD74A5D948AC15 -48: F0E3B7B2D6E328F5 -49: 77C25E387D80E071 - - Cipher: 3des -Key Size: 16 bytes - 0: DF0B6C9C31CD0CE4 - 1: 9B3503FDF249920B - 2: 653924639C39E7FF - 3: 6A29E0A7F42025BB - 4: 1628B719BC875D20 - 5: 7D77004A18D0C0B2 - 6: 4D21684EFE962DC1 - 7: B6BD7F82B648A364 - 8: 1F87ABAD83D19E96 - 9: 3DF3533220C3CDED -10: D0E7D0ABFBA68747 -11: 109FE5B38D74E6C9 -12: AE12C4B4D523784F -13: 953CD7F264166764 -14: 70B3A87D72FA0A22 -15: 9C9D09AC66AB8F6D -16: 4A15AEACB35B76F0 -17: EFA32F95623BCF1A -18: 679901F7737E195C -19: 221BB06209DDFCF4 -20: 0889A953C60BB1BF -21: 88F2249380E2D5D9 -22: 5AB26168B7FA24D5 -23: 934229150997D390 -24: 535E4F4C4DA97062 -25: 03E8D711AC2B8154 -26: CB5EF6E72EA3EC49 -27: 9278A864F488C94A -28: CB91B77401DAF004 -29: 4D0BA1C9794E0099 -30: 9CFA24A21F48043F -31: BB6B3A33AEEC01F4 -32: F2A8566E0FF6033D -33: E6AC213000E955E6 -34: 91F5FF42BBE0B81B -35: 6506D72ADEA70E12 -36: F9BD8C0506C7CC4E -37: 89CD85D1C98439ED -38: 409410E3E7D66B10 -39: 4CA64F96F4F3D216 -40: 383D18FBF8C006BC -41: 3806A8CB006EC243 -42: EE73C06D903D2FCF -43: 624BFD3FAD7ED9EB -44: 1B5457F2731FB5D1 -45: 4EC4632DFAC9D5D6 -46: 8F0B3100FAD612C5 -47: F955FCAD55AC6C90 -48: BEB5F023BD413960 -49: BDC369F3288ED754 - Key Size: 24 bytes 0: 58ED248F77F6B19E 1: DA5C39983FD34F30 @@ -1593,60 +1271,6 @@ Key Size: 24 bytes 49: B8AC2CDFF7AC22C1 -Cipher: sm4 -Key Size: 16 bytes - 0: 8F78763EE06013E0B7622C428FD0528D - 1: 5E0842E918473FE01EF6CB46F3D9A898 - 2: A5A8568531E5BB075EEF3A2BAC3D2280 - 3: 3C6C1F35C42230AE7ACB4503261A3FCC - 4: 714B6E7A1DBAFADF65AB68AD6ACB14D8 - 5: C26139494681B05164A69A9A4AB0006D - 6: 4526798759C412D836DD99FCCC98B8E4 - 7: 84D4EE025FEE4943B29B28D3A387E0FB - 8: 7709BE3897FAB7925C1BC3B43D700D7B - 9: 84DF23C156674EE9673F8F2A7BBAFF30 -10: 4E301AFE87590D01996CEE78BA72C34D -11: BEA5DE3EFDE04FF8AEC7CFEFCBB6CF0F -12: 3778443468868DF0459A00101B05D2D2 -13: 3C6A235913B3A2DDB1E168664620F21A -14: 325A985761CD7B0B1CEEE21911536959 -15: 0B5B467CA3EEE26247942C1FDE22FBBE -16: F8A8E7DC773E1FF0405195D76E4439F2 -17: 827A2BFFAF23FBEDE87A85C859147520 -18: F9D07586783913EE3D9E51C01E811E57 -19: BBD82643D3D72FB4F386456421AB752B -20: 12334FE869D290A540F3E53D02B540AA -21: A518C3E509EA25E7AD1880158859298D -22: D32C013B04A2CCDD70DAA58224702753 -23: C6DC68393042703BA07A1DEBF6EDCE2F -24: DA3B6853232452691596B8A3763EAAA6 -25: DD7AA423F5A5B712A727F33880139E52 -26: 84A3AF0CA812C8DECED5823BA7F0F1B0 -27: 61A552BCDB0CB7E950340A1691202A41 -28: 3DD9F13B5863086666A8F9B7F1E4C103 -29: B1D1FE27DF20443711C54088E8FFC29C -30: 8CC70503998EC42AA4CE5B7D9194B8B8 -31: 18E85C128D2D4A5CA90E9D3A590D0789 -32: C4206BCBD76E67C6DA73C3C603138FB4 -33: 350BB41380979C56152D05586FE9BDF5 -34: 980B929CB48C93BEF12E1A1252131A05 -35: 5FD08A04C4568BBA0FCFD688F577CC85 -36: DFA0325BA89F1FB02670BDB24C79A4A9 -37: FE7D8D6F3D042A372CDF6B31F6287A72 -38: 2283F56384E490B4682A8FCD8F32BC11 -39: E9F99BD39F851FBDD95C9880466CFA4F -40: 2C909B8E58BB81DDA517F6661DF7AE32 -41: FC788CBDBF46C3615C3DC8103B1B4090 -42: 3B6FBD288158B7D7D554AFE2B02F3F07 -43: C713EFFE8246F812DCAFFA725A73C8E1 -44: 9B8327F08E2FF85E97523D2FB0D3C326 -45: 052717D2EC347D5B55BE1655D480ADC9 -46: E7A9B7F3DE3E4F2F0F0529B050B43F4F -47: C287E5BD8F046696B61FAF7E930D3965 -48: 511ADA8934C2609AA5EFA93C57405D2C -49: 7D6AD2BA497AB34E41643F5094C3713C - - Cipher: cast5 Key Size: 5 bytes 0: 9B32EF7653DAB4E6 @@ -1807,56 +1431,56 @@ Key Size: 16 bytes Cipher: noekeon Key Size: 16 bytes - 0: 22C082F55D7F6D861B11C36911BE694F - 1: 0485388F24B147918116347E942BCF4A - 2: 47388A4B060617B21134D3B4EB1CABCA - 3: AA8866CFB9D7507CC67A7F271AEF11E0 - 4: F6A078AEF1BDF8B621A76CB732804FF3 - 5: 8301F76E39A4E8C8AC38A7751B26DD31 - 6: 5BE06821E7B23277B808143F36BABDE0 - 7: E326A3A32F4F0D8A4FA94877997DA11B - 8: 2BA7773B55F90B5399C11EA80D6CADEF - 9: E64776D92B81770E51E4E2F44688A59D -10: E987ED52D4C33B2668BB9DCF0889D5AB -11: 351F5BC075D06BC6977D31A442CCC2B6 -12: 645468E2497FA5EB913C04032457C1DF -13: 10CFDBEC689B01FB969AA2C760F76CCB -14: 0BC5B171A3B727B9594238EC522F72F0 -15: 887D105D54D8EAABABC892F04F3455C0 -16: 53CC30B5F16713AC77205B0F194FED59 -17: CD63AD99CC0D5F34D67C363F99F7CF1E -18: 59BE7B22114383FE8491304FB291D2BC -19: 4B107C8D37CD46EF1DB68ECF4588FEF3 -20: 46034C755D278E368305D1133BA6B4FA -21: E2472AC6D4048AB59E126930F6476D06 -22: 821014CDA5084A85058F1D556854D33D -23: F67C3FB5CB1271B454810FEE632F7EE8 -24: 57705CB352AF1A8B342E1E555C9DAEAA -25: 72AB36C1A8D3C2111330D0EF78726227 -26: 1931783D7E3DD6A33962BAD6962D8A33 -27: 06029A07CA801027D97BFAFF4719FB89 -28: D78B7E4E3083A60610C42BFC03810590 -29: 3CA3B14C5741A43F1FF5AF2179684DBA -30: D1BCC52AE476999E25391E7FFDC59C81 -31: 1E102DBAA4224ED5E32515A59A07EDAA -32: 81BE227D2663DBB733F9CB5018AED67C -33: 92C5A77D5D62A16C031DA0BD968FBAC0 -34: 9EC8E61B543BE73AAD711A9F58C86790 -35: B6A1FD059A7D8D73C143C17D97E4C177 -36: 0316ED78EA520EE98BB568413A390E44 -37: BEFEE68550E2FAFC4AECBE309031BEFD -38: D394CBCC38A47482B2B6900BD68D6540 -39: C58F2EE6C493BD1EB41DEB88A169D240 -40: 0A45FFA6D6E888B1F6E95E388818C6AE -41: 8A9CAD2C511F284CE1D77167E5D23456 -42: 577CB9155A69CA34213FFD15E03D54F4 -43: 2AB7DD760EB7DDDD3883A6966B9D44D2 -44: 4564DC5318B0A940CBBC3C1607804B70 -45: 0E9F42D9C2AC03694CC2E82BA3C4BBBF -46: A49089D9FD9E13DF35B0490E59A9B7C9 -47: D58B3008003D6C8D556D7D76180691FF -48: 1FBC6D5F3F1B0E599DED48FF7A63CB76 -49: 077533478FABE8AD5DC2B9E96E7CC6CB + 0: 18A6ECE528AA797328B2C091A02F54C5 + 1: 2A570E89CD8B7EEEE2C0249C8B68682E + 2: 828F4F6E3F3CB82EEEF26F37B26AEA78 + 3: A3CA71833499F244BF26F487620266A4 + 4: 333ACCE84B0A9DE91A22D1407F9DA83C + 5: 224285F3DB3D0D184D53F8FFDC8008D0 + 6: DE39E2973025FE9EC1ACDE8F06985F91 + 7: 2F00F45A01B1B0AA979E164DC5CCFE10 + 8: 43775F3CBEE629EF6A9BA77CA36171D9 + 9: 1E6A67ABF1B6ACF59FB484866AC15A86 +10: 70490989E2CD2145730921CCC37F0A17 +11: 67B0DD0EA903486B1CB56591FCF42678 +12: 774AAB71FF28E49A30E1E718D98114E8 +13: DF4797990E1C65C9F6735BD967164D45 +14: DE2779DF26FC1B99F576ED4CFBAE76CB +15: A13AD17440641B3460A01175E3274AB9 +16: 1166499165F2A1196CA2DB831F264E77 +17: 35D24A385416CF2A44AB97A4AEC45E14 +18: D3D0E0DC962B1AD1AED92F57129088B2 +19: 00EF3E246B32634ABAF8BEE31D5C592A +20: 79BBF3F807675B9F264BABC67DF4C2AB +21: F391F2D58F0998F24BC9E5FA75DB9E99 +22: 066EF13C2617E97E6015B86BA1E059B2 +23: 5B0E2D7AE1E2734B9D5734C87F7BE272 +24: CDF7020212B7CF21F4817829386A6F8E +25: 24873E1A0EF4908DF85114ED9BDB0168 +26: 99904360C843472F71AB86B26DC78A00 +27: BEE70B3735A67268578FF107C328940B +28: 97DBB283536BC8AE8DBF56F3474C7740 +29: 2F4C903975EF709E004D24DC132A8A51 +30: 3EF0859A281782F905198C607FBE5C43 +31: 2D9CD48BC6A99E86468CBDD2A55C7D5F +32: 5518D3ED18D5E5A62752CDF0846D0C77 +33: F751E9CAF107BAD8A1F1F9C374277A6A +34: C5BA4DE907C41221FBABC5EC43710D0C +35: 5CA48836330870365A10E7B676695C9D +36: 937A964E0EA4D246E97293375B167EFD +37: C0A876CB6957717541A90CCCB034BFB8 +38: A57C93A09F9160A28D3D4DEDC987746C +39: 1FFA1E0B5EE0F0A18425F62717254419 +40: 8411C87262AE482CFC43C3092BEAFD90 +41: 0B9BB379FB3587A9ACEEED4771D8DC20 +42: 3B32EDBF9557E1DFBCEEC269B51FA494 +43: D1104E2888679A9EF6A13AE00ED7E1FB +44: 0EC9849BAD58A279B42B5BA629B0045B +45: CF206E8D3399918E75DE4765DD743060 +46: 55CCEB28E27D4DC7CE2546454FFD2C33 +47: 6E2339281583420B76E1750D35296C12 +48: 7800EC3D8C344BE7F2D2812F5AFF3DA4 +49: B80F4B0BDAA54A04D5A26BCA185F4EA2 Cipher: skipjack @@ -1913,959 +1537,3 @@ Key Size: 10 bytes 49: 0AAB29DF65861F4C -Cipher: anubis -Key Size: 16 bytes - 0: 30FF064629BF7EF5B010830BF3D4E1E9 - 1: DD7A8E87CFD352AF9F63EA24ADA7E353 - 2: 0D0BE8F05510EBD6A3EC842E5BD9FC2A - 3: 330F09581FDC897B3FE6EC1A5056A410 - 4: 30349D965F43C295B9484C389C4D942C - 5: 9225343F0056BC355060C0282C638D02 - 6: E3A85D41B5337533C4D87730948A9D4E - 7: 09DA0DDB65FF431081CAB08A28010B76 - 8: 6C0D0BD6CEAFB9783B31023FD455DAC6 - 9: FBE6F26B7CA322A45312856D586DE2EE -10: 1F269EC072D0FBA72E87CA77F8B983FB -11: CFFAE9ADE3006BD511ED172D42F16D05 -12: 73F0E9DE89F4C7541506F052D181BAC2 -13: FCFA3E2E89FF769834295C77431EF7CE -14: 0452360383D56F827C81263F6B0855BC -15: 40744E07299D6A2A210BE5598835221B -16: 2F0FC61148C36F4C7B42DF274AD0DDE0 -17: 2EA0E9BE9E4E4DF85488FE6E7CFCD6E3 -18: 0AD1254FA64C3996BBD485D41A3687A0 -19: 5B55988652DF200348A114F802FD3C03 -20: C32906AF76934C1436CA60BAD58A0C66 -21: 59D87987DE9DD485C4537F3A95A164A0 -22: 0A706ADF488D84632C96F4BEC43D9FA8 -23: 0B74E0CDD14D984B37491E2D9FA63CAE -24: 47CB1827D151A60473E67BD5D233102F -25: F455B4B665D3D0AFB25FDE4A3312AFF6 -26: F9A0649421D45DF604206854F681DBDB -27: 21477F5546339E4B6D8215368EE9F884 -28: 577640F23CA73345701B0906DFABA4B7 -29: 89F8D08A6E173759020DD7301E0FE361 -30: 44EF7AF7043FD4B8112345CEE42BC969 -31: D7CF0CE04A57253F4C63CABC4A5CB034 -32: AF73D3F4CED32593B315E27079131D22 -33: F6E603E3455359FE43A3B83AAF3AF0C5 -34: DCC3FB557F2C301B631DEF499097E4FD -35: 8285A25CF6F7E701644708E12081C62C -36: EC702DD0293F4C646B1C9C2606762816 -37: 289491E5A65DCA605B78E88DA8A9F8AB -38: D82FBC14452BE34C5840DAD81FC2A65E -39: B88A340EB1BF8D5ADE6A4E6C16104FC8 -40: C9FC3D70D2BA26C4059BD3D34134264C -41: 18CE3D2920E3BDEFA91C369E9DE57BF4 -42: 50917AE58278E15A18A47B284D8027A3 -43: BDA6F9DE33704302CE056412143B4F82 -44: C287898C1451774675EB7A964C004E0D -45: 3BDE73E0D357319AB06D3675F1D3E28D -46: 30FF4326C89C0FFE4D31D2E92CC0BF9B -47: F69816F304ED892232F220F290320A8D -48: 1368153F1A54EFF8D61F93A2D6AF21E3 -49: 06DD274894B6EDF3159A1403F47F09C7 - -Key Size: 28 bytes - 0: 7828B1997D3D050201DC6EE45C8521B5 - 1: 0D77F896F9CEF16DAAFCF962C2257AAE - 2: 89C27B0623F5EECCA38BAE1AD86AE156 - 3: 44EC09834052009CC3CD66E1BA11AF01 - 4: F922BFDB03FB186A069C1E7B48222E3D - 5: 277F7971955D8984AAECF287C32B8211 - 6: E77ED0144A3ED827B71453B91562FE25 - 7: 1760EFD04477AE527BC37F72C8BBBCAE - 8: 26259425ACD58207AE328B3F1A217AC1 - 9: 0876C4DC51D22657C4121E9067C2C3BA -10: 0214981592C9CEDD4D654F84AF1793A5 -11: 3E11FA027BC4F15048D27B187062259A -12: 24E7D61BB21EA90B5282B43AAFB0DBDC -13: 688F56ECB45B7C242000653460F04A23 -14: DFA587501A875ACDE8687A04AE404861 -15: 4C21CC3FBB768CC9AF2242FA206FE406 -16: 5CA0B03FA7751DEBBE70CB21AA61765A -17: 4879B3AC26270C422645B9CA29CAD8BB -18: 24F941E1B9AF84C18D03885EAACE16E3 -19: 05E163A0150123C2664131A81B20AFC1 -20: D606CAA85362E23598E5B8BD60C60506 -21: 33BD0AE751019BB751C151AE47BD5811 -22: 75DA523F5F793F90034144A3599DC5E6 -23: CD4709B56521EA306F5AD95CCA878183 -24: 6A4EC2EDDEBBBFEB62C1F13F7A59BF20 -25: 2A36272DC4EFDFC03F4DCF049ED2ADFF -26: FD4F3904E8E37E7C31508E5829482965 -27: BA64BAE1C2ABB8599A31B245DBAD1153 -28: 757E0151783A50FC92AE55861DCD797D -29: 5E63BDA3217ECB544972CA14A9074DA5 -30: E52F1195921767FA2410BA095EA5C328 -31: 6D7E42D67E329D669299B5A590017E8D -32: 0516F6F7D99ADE5DC42E635BB5832E80 -33: 57FB4E6B82ED2A3091248DCEF9C27F14 -34: 25231D0E9B96534977D2F2AF93DD10AB -35: 847C4C524A586568D19EFA3ECA343F1C -36: 52448814064E0F33A4EA89368C2E1ACC -37: 461275466FAA7BC16ABAD9EC459BD67A -38: 16C8324A383A00DA06DBEC419B69C551 -39: 5F26F7CF715FF2649DCC3C71EB6B92DF -40: 575363411FB07C067CD4357A1CD1D695 -41: AB70F08BAB51C5F57139A107EE858A12 -42: 887F62AE3D700EC5323EDA231C6B4C48 -43: 7B9851B01DC9083293F3B226690A54F4 -44: 36E03DF51C574E35EF2077DB7A49548E -45: E238A564246B163F97EDD733A235EDEB -46: 30679CE080915DC3BFA91D0DAFF5E82E -47: 7C2E8145D803D4FE18EE32995AAC16B0 -48: 24D6F61ECC87206804885D33BFA7B2CA -49: 1F4F81751CB3FAFDC9F9C27E639F370B - -Key Size: 40 bytes - 0: 31C3221C218E4CA1762B0DE77B964528 - 1: 0B6E4BD937773597647FFE0A3859BB12 - 2: 67A116E5F762619DE72F99AD1562A943 - 3: B6A841663FB466ACAF89C8DA5BA080F0 - 4: 0442708BF804642B9B1C69F5D905817E - 5: BC77391EAB530B96CA35319E510DB306 - 6: AED37991A50AECB70C1B99137D5B38F2 - 7: 8735F7AF0BF6C5C7E3C98021E83A31EE - 8: A614243B1B871D80BDCE4A23AD00F9FA - 9: 16AC67B139A92AD777871C990D3DA571 -10: B1774A2A12A8CAB25D28A575B67CEF5D -11: 4C9B1A120BC6A33C62AF903FEEC3AF5F -12: 7B128F00480E497C5754EE333457EE5E -13: AB56D578229492B95ED309C0EC566658 -14: 42FAF577855FEDB3446D40B4B6677445 -15: 84E0C19B4A4512001F663E22D3184F0A -16: 8B01680D049F5A9421BA9BED100CC272 -17: 2B1D70B92A5DF12CE0FA6A7AA43E4CEE -18: C7F61340D1B2321A1884E54D74576657 -19: 153C07C56B32530866722C4DEAC86A50 -20: 2EACBEFC4A29D1250EEAFD12A1D4AE77 -21: FCCB40B0997E47512295066F1A0344DD -22: C149A543345E2A1B8249F71CB9F903A4 -23: 3FD0688A8D0BE5F06F157C234C29BF9A -24: 6A3F813F396D77C7F4641ECC3E0BF3AA -25: E2888B9D2A6D819367F61C5792866A8F -26: 1A8A000F91AF4E600DDD88E098BD938B -27: 2283E758C04548EF8C37FA9F5700A7AD -28: 4FD6D8E1678D2B85520B96C038C582BF -29: D13C0B228F792EF88F09ED192C571029 -30: 1A2A06B1987BE0DADA4B558AE5E6A128 -31: 097B0460C47F1801986F5706A69EB01C -32: DD17BAC0737515C6386ECA6A6D6C02B6 -33: 5989BD1D46FD6EC14D4C55D5D6D17F99 -34: 431002E0224BD34B0B93988356C19E7C -35: 37DB7570296DCCE45ABDDE36EBE4731D -36: 4731DE78EEBAA1D02568EEEA2E04A2F5 -37: 1F879753A7964AF44C84FD5765D8E080 -38: 54F120726F68EA4B0501365CD2A84759 -39: 366E43BB744C615999E896D01A0D1D0E -40: 18747BD79F1D0529D09CAC70F4D08948 -41: 4F9854BAE0834A0C5FD12381225958F2 -42: 7C14ADF94A0B61828996D902E4CCFF3E -43: 242F0E9CE96E4E208A9E0C5D76F8E698 -44: 27EE179E2A9301B521B2C94ED3D36A77 -45: 892C84A5E77E88A67F5F00F3597F4C04 -46: FC7880D7860E90DE17E935700FC8C030 -47: BC49373F775BF9CD6BDC22C87F71E192 -48: 365646D0DE092AF42EC8F12A19840342 -49: 62D0E9C210A20ECD2FF191AD3495DE6F - - -Cipher: khazad -Key Size: 16 bytes - 0: 9C4C292A989175FC - 1: F49E366AF89BD6B7 - 2: 9E859C8F323666F9 - 3: 349EC57A02451059 - 4: 59E34CF03134A662 - 5: 436C16BAB80E3E2D - 6: 81C35012B08A194C - 7: 056CCC9991C1F087 - 8: 0A59F24C4715B303 - 9: 3C2CFF98AE8500FD -10: 9136C3FCC332D974 -11: FA3FA726E6BEBA65 -12: DD84E4F9F39FB7EE -13: A3F397CC9FB771F5 -14: E2D6ECC1F40A51C7 -15: 6704A1A705163A02 -16: BD820F5AF7DEEB04 -17: E21E37CC122027FF -18: E319085D8E2C1F4F -19: 0DDFE55B199A49A9 -20: B70F39CCCB2BA9A6 -21: 3F2F25723AED2E29 -22: 751FACD5F517AB2F -23: D32CE55FBF217CE9 -24: 91393018EA847012 -25: D50F1C54BABE7081 -26: C73350FBC5B3A82B -27: E9A054F709FD5C57 -28: 94BD5121B25746D4 -29: EE19F88B28BEB4B7 -30: CE6845FD13A3B78A -31: 566729D0183496BC -32: DC0E1D38CB5E03A8 -33: 251AD2B2842C75E3 -34: D344AC41190F3594 -35: 579B956A36ADA3A8 -36: 5F83D3AFEE9A6F25 -37: 2D3FF8708A03C600 -38: 32A732C7BEEBB693 -39: F437276FAA05BB39 -40: 58DDD4CD0281C5FD -41: ECC2C84BD8C0A4DC -42: BAB24C2CEFE23531 -43: 5244BFA3E2821E7D -44: A4B273E960946B2C -45: 039376D02A8D6788 -46: D3EB7074E3B05206 -47: 89C18FFA26ED0836 -48: 1F05A2D2D78927D9 -49: 0133E1745856C44C - - -Cipher: seed -Key Size: 16 bytes - 0: A6E8D7325BBE0998CF235C1B57E64360 - 1: 83A2EB0094D1CF95E683DE8BA93DE478 - 2: 3DF178E121DA1CDB77ACFB37F9499A3B - 3: 785A1D88210885D6D2D84C2CB4461D57 - 4: 4F177E4C76F6CA9C989E724A0EC275F4 - 5: 3AC502689139EC1AFA7EDCDB622A6061 - 6: E1B9675AEFFE45A249644E7E0863110D - 7: C8A4294FF821E88EC5D181E54BBD3919 - 8: 7598C35780522C63B531758F53B7CCCE - 9: 3E59799FC5A5F99100A3791F6AA284EA -10: A8572971F5FC281E7617BCB8D616FAD3 -11: 3C5DCA82BA53DAC088D34E6C4D069E22 -12: 0886C2F45E358409230F6FA0F4ADB7BF -13: F4BF0388027AFBADEB6AD1AD0AC9339E -14: 587F60852DA55F76C486D9A6BA884F8A -15: A6F2518AD3B9A68C3FB8847E28B15212 -16: 6B6DB6C7085FEF6FD2BF32CAA2FEC2E2 -17: 40FF5FC134BC3911614A4E021254EFDF -18: 9B1016CD948F70B8A04D2604D4FF08AD -19: FBB86D1B49204838C7D544C8BAAE61F9 -20: 02EDFBE9A9A4CA2206CF9047FF146949 -21: 6B9FF89C1E607E494204B28D4391ED35 -22: BB85B8BAA9A4B74ED66C7485415834A0 -23: A6F72520E6F0248D88AFDBDA7CBDD6FE -24: 4BC1D4E990FC80E9ABF9E0FBC745E2D4 -25: 0358D44D7A59743AAF6D25CA179FB6FE -26: 320924C80B53E406DE45D31AB0E265F3 -27: B727A4AB9E8455EF11B18F300E22ADED -28: DCB6BEF8F35FFA2F2CDADAE161E56D48 -29: 847A39F0670E930BF7899656908C2B92 -30: B5223282B9328ACC4C6BF06F15C920EB -31: C265081FC225CA4ED28FABBF0BBB0298 -32: 35F6113CEA7C15DB21223D5AB0E9E558 -33: 3437EECD2984AADC9F07286CC23FB940 -34: D0C878AC8C01BB9868B499691373988A -35: 684381B5D98E9D1290AF5D633A903F68 -36: 69652249BD52F49ED11219881059ED38 -37: 08DD215881D98B1D8234FA1806E634FF -38: BFA836EB71C35B3E3CC9BFE9168D1B5F -39: 238BDB3340961C47A13F011AAB45FC5A -40: F55C630CE6008E7F15EA1686D887DEA4 -41: B78DED6C49E3167CD7ACF2CCB4E365DC -42: 79990527F22373B043039F18E343A8B7 -43: ACD08505E2759003C016F6E820DDC562 -44: 8DB7189177EF39A7A969F28B882CFF05 -45: EC0BEA22AE28469B91AAD4654858367E -46: 19A7F32CBCB4CE89163EC6F98FACFF36 -47: 3747F9C67FA044D52C3893D170DEC4A9 -48: DE799E6986BB77CA5C24F9A956BC28E4 -49: AD4CEBB75177F1CBD6FCEBF8457F85D2 - - -Cipher: kasumi -Key Size: 16 bytes - 0: BB6B2E0C88AD7C37 - 1: 5AFA50CBEF3FD5A4 - 2: 1914DFD8DD86C361 - 3: 0976E7F6AEBFFEDF - 4: DE0EF590AEC61F17 - 5: 089FA192859E6124 - 6: 72E283C82D366B51 - 7: 61DA033662AF0B74 - 8: C4CFA2C3ECA84CEA - 9: 15757205BAAC8639 -10: 4349914688A6A850 -11: 4B1F5E0D5B7ABBDF -12: 5482444DC8815041 -13: A8C198FB1D865A93 -14: C2641B2501AB6525 -15: FE492BE02E717496 -16: 03B3034E3A26006D -17: 0CB4B7FBA4582D1B -18: A61C750E5DFF1791 -19: AD5374F2B0860365 -20: CBC588879F98A820 -21: 04CA5EABB466C1C1 -22: F4DF5CEDAE6C0E17 -23: 6133AAD21D875DBB -24: D386BCFA19FAA860 -25: 68C9ED9206F07F47 -26: 00A49444A0C176CC -27: 4BEA00D55452196A -28: A9A3FAC7A2D553A3 -29: BE61DDF4CFA8EC8E -30: B1547D01A23C2632 -31: 400604E71F3F85AC -32: 8F431BCB447A132D -33: 0ED503EBD61D4286 -34: DF7B087B7D315E2C -35: 247A7872587F0507 -36: 7814D6B13A08CA60 -37: ADE44D69362B8199 -38: 49FF8C275D50A175 -39: 5DAC0F53391421C5 -40: B1C316E682E4F314 -41: 72FFFEA2DFD85E08 -42: 0418F02B7A89FC43 -43: 12826A96C5633C97 -44: A4726DA149DBFED1 -45: 5B276374E1EFC6CF -46: A91C4E4804D9A103 -47: 7A2894030C9FE01E -48: 0C59C6FA87DF2DCD -49: A86C6D3C7EAE644D - - -Cipher: multi2 -Key Size: 40 bytes - 0: A69A64BE9EAF56FC - 1: A8AB26A19D7804C6 - 2: D5468EF0C9CDF530 - 3: 2D08D23459949175 - 4: EE66EB212BEC593C - 5: A2D088F95C855F60 - 6: C206004787FEECEE - 7: E4875B7BE2C819B2 - 8: FBC692536393F8C5 - 9: 886DB391EE3BA443 -10: F45359B08EFC56FF -11: 1113E4F4A177E1DC -12: 8A02560CAD0CCF87 -13: CF57FF05E6BB7A67 -14: 21F4EDCF8E8A3D9D -15: 26A26EEFDF51B7F6 -16: E9AF9D2EF2A9EE4A -17: 6866182BC49D09D7 -18: 657E0D732BD7B5CF -19: EFCC33778BC265AE -20: 3556CD607D59C32B -21: A7477466892D114F -22: E210A7B32E9A2E08 -23: 9EBC0B60EB1FEA70 -24: C1E8C3A38E0063B9 -25: 3C9FC4089F87B0D6 -26: 100EA58D00F38495 -27: 3BB3D47D52A81774 -28: F1FA3DE89274A681 -29: 18DF1E38CC0C5230 -30: C3FDCDD9159B0258 -31: EA6ADFAF7D8D3C87 -32: FC4C369E7835461A -33: 791D1D34EBEF801B -34: 3B5A5B64C72B2F77 -35: 55ECED8C5D0F69FC -36: A6DE960F4B81C114 -37: 3C4EDB0671BFFC57 -38: C493186F4BF52F5D -39: 01B2C607B2329E87 -40: 109035510A1AEB20 -41: 0EA4699CA4A161FC -42: 182665FBB15EBD34 -43: 04458216DCB8F55F -44: 850BD374C892FC07 -45: 4C428488381D6FD0 -46: 56FF4CE0AA4132D9 -47: 9F95F0A47D70A317 -48: E12CC913356EFF86 -49: 7E614927A295C45B - - -Cipher: camellia -Key Size: 16 bytes - 0: ED18D83F3153160C5A6D01AC3717515C - 1: 1012886CCDF3FFD25E588BA10D6CE363 - 2: D25562F6943EBE3A7E0EF28D33CF091E - 3: C26FDC4539DD1E6D0330B5836AB24420 - 4: E14A50CE727B74B8CEBEB284FEF3C810 - 5: AABFD72D334F594344C617EF8E8F5741 - 6: E8D941419ABE88060835E9BD375455BB - 7: ED863784E1590139A2CA50D77450300A - 8: 545FCF42030BD764724C3EF5C139B038 - 9: 08C194E007FAA99997D855A759D10743 -10: 3899D3731500C79D2945AFC2980B4C17 -11: 2720FA4B402AB7F1B019AF6248702369 -12: 3FF6C3C90AB4141DEE5FF30EA2047F73 -13: BB5BAF7545AA774C7AA5A58568F96832 -14: 66349C52709EDE0EE34AB6501B420C7C -15: E1E93D923504A5421BAEA5F1D61D4C9A -16: 3C07DFD64B2407BB7575A905F3F31E83 -17: 0FC569AC89ED790F69BBD1E998700C97 -18: 6B6F390AFA1052BD2E8DB0DC261E4D26 -19: CBEA83ED55DA9DED95B87F2BBBEAC37D -20: CE005DECECB98F5937D5ED26FD83154E -21: 738301D76316EC4173F124A9C9D6577A -22: D00A1E40CFB5F2B8FD2C0714580FAD50 -23: 7EBF497C78B72E646EB72A326F1D5C4B -24: 7E0023900F6000D00737242DA8F2E1B1 -25: 0F7737E715BEF0DEA503E355394540A9 -26: 15452DD70DEBF45BEF39782CDB8BB086 -27: E7464917B3AF060BC763D8959DDF90C1 -28: CBE4B90FF8C66672122D53585198773B -29: B7262E6CAA2C14B18EE374DF922CDB98 -30: 01E695E3CD87A2FD4B9C49D08D032DAD -31: AA1686BA0B5C5688D0F370C6E2BFA43C -32: 9448BA348E8E904992C3F4233C226B22 -33: A1DCD1CB810DFB46BDCE6FBE3A192560 -34: 4345D200A309FA8C5A0CE9EC60EE506C -35: 54C7F64D9B411BF90B283ED62686D28F -36: E347E882EC2635081547612B1D9589D1 -37: 36D44CC101B37BB6F6AF68C3FEA3A7B7 -38: F38C2D5B921965D2AFFDBF4EC5BCEC19 -39: F7ED6BF85782F0526301BD1CD1624E67 -40: 7959C134BFC85CA176550EA689F81054 -41: A8FC96504C437F0EFD0BDF6CCEF516D2 -42: 6B88D1A06D7C8C74379FEFE2D6A7C895 -43: 39C21AA165F4A71A161971D89CA5DC32 -44: CC123C40071BF02D282DC83D2AC18226 -45: 0780A63741AE47CD03FA99A74C320E33 -46: DFB0831BA27AA0750701439603B8A805 -47: 0C783CBA4ECD9EEE1F91838259831187 -48: 1456624438B22555B08D59CA50D6E95D -49: D5F463D983A9A6FE9A0B47C245596D40 - -Key Size: 24 bytes - 0: 1D1DAF85EA5CAE19F5F5EA1DC61E5B83 - 1: DDAC7FCF2C2F275C7041E7821AAC84A3 - 2: 591091C3755816AAEB9170D5DF77A0B3 - 3: C4BC965CDC20E6FC039F07DA2CD10BE3 - 4: CD8DA54FC48524EDCFEF985C0C39C961 - 5: 14FA12F39AC3D701A958765B4499FFAC - 6: 2BBEA5F3AA140CFFED9F1EB2BC969D56 - 7: 5F73CA8BF641770D6833A43947D9A5C3 - 8: 3E872D303B882284AB02393D43137450 - 9: 01EF55D4CE182FA03216A83A5128F761 -10: 915C2F5793692A6D118D865783317C58 -11: 4368A442B61D6F12D5447F1CB8854714 -12: 3477ECB27ECFF2D7108ED1297DE80F86 -13: 89C875CB55C1CE80FF2D430921FADB05 -14: C5AAFE7A4588D4D9039E4552B3FC9B02 -15: BF1E7509405AB219B540BDD0D3DE7528 -16: 7E5CC85B6563099B902638B7E0D09728 -17: FF04D2350647F117F81DA037A9E11946 -18: EA294A53395A20B391B11AB9F97262F3 -19: 448C801307E9405F740623BA55A45639 -20: 62032AE6EB01322233FB321B2D6A8C38 -21: 79A54FFB9CA25AE315BA0E7B6E59EA99 -22: EDE7E634C396926876A49DB3C0E261E1 -23: E9DA5106B8BD33391C28407E9B3758BD -24: D8EAF9F744E060695AD1F55F85AF3D76 -25: F1E61F0F467C0785B6053332129114EA -26: 3119CACB24B012F3B96EFAD3FB856AFB -27: 97753ACDAFD6224E5D289BF76673A73A -28: 8D5912FFFD628736C64B3DE01DF1E674 -29: 8951CEDB758DF5EA5D2A78B2A08480EE -30: 3C0FC9DFD8CF79A5F9F75CC43B1A9247 -31: 4C7047481FE0849EA0416BDC00A52321 -32: 97034388AE8553570366EDFB9F6D618F -33: F16BCC0FB2B77CCBDC5EF7AB2233599D -34: 6D94D041196F43F0224B1DAC84165E7C -35: 313C6BA0AD767259860DCF8003F2F5A2 -36: C5F835DCF63D1C40E56DBAC7ADCE7F3C -37: DAFAFF6BB46EA9280562E5DDFA793BA8 -38: 5C8C0570B06C595E296DD4A9FB864FCE -39: 72B433F78D7CA638C2ADA09D99CFB769 -40: B6D7A6C47339743E9739D35D0F08A25D -41: 6CFD73F9E9781FFCE53C69AD2EF11E03 -42: B7F0BA994EF90642B80FDD798666D752 -43: DD49766125316ED4F546B246A2CFA23A -44: 8ED53D6CEF3CFB9DB0147F02656EDA35 -45: 95690401D61C84A013EC6D25CCAC5CD1 -46: 7693648B4A6CA804B6F01AE67816746C -47: F08C5898CE7970C41A5F8C05882CAB8B -48: 91EC0EC1CF839B58009E6CAAB3FD67A0 -49: 853DFA14A029EB8FB8D693B0A65306A1 - -Key Size: 32 bytes - 0: 5F77DC44E5E6701E8755C1FA176E2434 - 1: 5C1F70FC144C66D82D8F21DD2A0BA54E - 2: A98317BC656475F83E83062A69A17EF6 - 3: D5B8C0DB1095E65D49CEC82D78FD4C7E - 4: 37A537292409ABE5B922DD97EC0F6CA4 - 5: C7FD40883DE6BBC6059327DA586AD96E - 6: F4D19C443A2195B66085DACA7EFFDADF - 7: 6F12FD74B4D25C9F2856CAA1BA32461E - 8: DFC00046F41BC27684321B980BF68F6E - 9: 4A8BECB6A8D57002FCC6FE08B6D31118 -10: 859562FB3727E535BD4A914907822545 -11: EBA65EA3BD622DC044CA5384E568C65F -12: 79C16A751FBE22340F30462600724324 -13: 8F4FB71B5B3E0C1DB870B4BC81E995D0 -14: 4B82E7E8D64D8EF9D78DA944B292CED9 -15: D873F8D7125A63EBB04473F7331B1975 -16: 2FA25AF9E8D5A4DC82CAD98505E5DA60 -17: C80C24625096E6E9852A6F9EE12735BB -18: 10D4434CB795DC06E926CFA3B43D2368 -19: 070795AEA2765A443213F9CA909DF6C4 -20: 7184D2F5644306FB6DD55F1C90C111CA -21: F4FAEDF12FB40DE7CE7B08121A340557 -22: 86CE014AA863FD3030A26E6F8C178673 -23: 5A46BF2B3F14D5FEA884C3361EA87ED3 -24: 456584515D983D17ED4F3AE944BFB2C4 -25: E1E8F394691C2A9123023A8EE3FCBBEF -26: AC73E8BD1758850DEDAA3817B01E6353 -27: 15AE5395CBC3371F81A6F5B05C52671F -28: F15AA72D34C4E0EEF8DDDDA90D9A9539 -29: 3325E709043735898EA242E94D169112 -30: 044AB447754DADD4E2709FEE08D5CEA2 -31: E02DD5E86D32B3A6CC7F0016375AEC5F -32: 790278BD19E2860618E24DC69993F92B -33: F776D24FD90A43A78D000CFC1189E56A -34: A3EE4A3D121280750F7C70E55DD40FF4 -35: 32928BBBF98DF4B9E107599DFB30364F -36: B3E9296B529118B656D27AFF0F4D1A55 -37: 4668FD77100255C3406281EC813719AE -38: 16F9FF27B26F13300DB8DEE2EDD023AA -39: 9295F8435D688D12BE631A31B2531482 -40: D86917DF41ED4342C0ABF10628DBD1B4 -41: 1F5215B987C3F079769292E65D04B823 -42: F68B98BD2F12AACEBE78666AA83CA7D0 -43: 09BB635B67279F5A6B1D5C5D880A1357 -44: AE4ABBCC1D35CD8C4C254111D5F27158 -45: 5552B3E39DE67F759799A686222EE4EC -46: 1CA439434B9FD2F24561A32A0A2A79C5 -47: 0E33BE7CE3B9A5CFF00A73BD27DFE9EF -48: 6B7056FDC97983173D6B3D5BFC9B09B8 -49: DA293A4CB96FE3608CFFD89B927C9ED6 - - -Cipher: idea -Key Size: 16 bytes - 0: 864C9D7D208A0E65 - 1: CDAFE32D1A8EBA33 - 2: 3989CB9583F08C88 - 3: 70973E563F1E2E07 - 4: DA726569D30529F5 - 5: 43D6D99BC0C233B5 - 6: 088FFC262410DBBB - 7: 9CBC35AFFCB511C2 - 8: 438C85399278C1CE - 9: 500DA9D21AE98636 -10: 150939AD3D9903D8 -11: 8A6875B4927E6C6E -12: DAEAF890BBE85A9D -13: 139E61F0275E7891 -14: 5E30A76838137E01 -15: 7F6332498B5F51CC -16: AD445C6A3EBD574C -17: 89E6E33284E53F09 -18: 521F71E00A913E99 -19: 667A20538C318C02 -20: BBA379F0086F0A4E -21: 2EC884D978B4C24D -22: 32C1107E18D55BB0 -23: BDF96F21BF9141F3 -24: 1A1F6D475CD51FC3 -25: 3EA0742C99C4D52E -26: E56BBB14C208A256 -27: C71251372B8F60DC -28: 4025E8BC529D0104 -29: DB36989E3F1B1D47 -30: 8052C8D71F181567 -31: E23C2EE53AC2E561 -32: CDE53F91E1BC6CC9 -33: A0729FCA7E8DA776 -34: 058B0E2DF2589B35 -35: 9E763832EE07F897 -36: CBDE6CBD2B8CBA67 -37: BEA90B26D75D96CC -38: C7BCE6979C47764E -39: 669C80474504B5F2 -40: 9A00E0D5C9CCC929 -41: 1B2EE3D38B8C2002 -42: 61909D16FE53D15A -43: E7924A4A1CD58DC1 -44: 9310B2DE922C9C30 -45: 98B9D6043CAB599E -46: 63AC5444D191BF98 -47: 5D62FF2B2220ADAA -48: F72EEEC71279A541 -49: 132613157CA97A35 - - -Cipher: serpent -Key Size: 16 bytes - 0: 4C7D8A328072A22C823E4A1F3ACDA16D - 1: F3436B52DFE96FDF63C1022C12605E01 - 2: D09DDC0E2D4EAA12614A60E69E7FDEDE - 3: 2D59407400422FB0261995D4E605F7DE - 4: 742E889747CCFFE18751B8DCDB1D8392 - 5: 08C18E529FF09A6A62A06DC0A95CB18C - 6: DDB44E9668F5C1D1022E7F3362A7FD72 - 7: 8CB1EB9DBA6AA24FA9EFE299719ADE70 - 8: 5ABBCDB55E2F63542F4A3A7F78E03D8F - 9: C3148BF3FC1ED6E58827DA0243DB026A -10: 2C63349B3E87437E88C1E8C24A42CBFF -11: 0D81637AD817D7BB6057E05B33BDE89C -12: 63A6338C4413DE93232D1137D3B4B5F3 -13: 4979CADD7DC0A8A7864547400784CCAA -14: A0F7717D9F30AF023B68715FD0F586E5 -15: 6A82314506773190EFDB99BC82796EC3 -16: 6E24C30869393EC6D591901984CD3375 -17: C1DD310FE278FAAD2F8DF4F98088C5D6 -18: C806DD34A64A9C919A832E53DC7AC9DD -19: 6E0C31BA89B92F9A117D234E9AEFDC87 -20: 76BB6900B0356047989803FD6DFD921A -21: 69656813894044B243565C8646729D83 -22: C5B5CCA56367361718AC83438B777F50 -23: 50164105407E66060A20B06C712F39AF -24: EB185AE6E8F691918AC6CAACB0BBEDDC -25: E06EABCC4907CBEE474925BE276352D9 -26: A1017D3D0DF0F34BE288ABE6121FF5D7 -27: E5D7AFB5E0A177332DE1849709BFA137 -28: CE707C175ABBA720E7569722C394B771 -29: D0AFDD3954703AA68FC48C906148FB07 -30: 1144EB2FB275FD030BFCA0E2757F412A -31: E7BFC2E528A99A6AC48F133DC1D8A2A8 -32: A27E54A237A91E3D8F845F3D8A4B0771 -33: E95277B8353F4D194B3DF8C1E31CAFCD -34: 7A643CF73F018D8BAE449C60C5AA34D2 -35: 350E523CC35DB3F0CCF712B423D944FC -36: F4E1CBD38F379AEB37BCEC7489282926 -37: ADF64B0CE1CF4461C4CA2AF5DEFD2A51 -38: AE6219617D186AC6C324832383A0EE53 -39: 533094603845C674AB4F915E660DEBB5 -40: 97C2B4B94F3057613692B452606E2BDD -41: 37E6FEF71C55A58DCE8B641EB1AADAFF -42: F0236BE046EF46B78256AA3C6EA2731D -43: FC354DC818B2406E17AB5A194B5A8AF6 -44: CFAAD2165A59BEA3283FDB057948AFFC -45: 0AB2F01A911996BF98035292AE2C6F24 -46: 5E45901119391E81EE392B2E78897038 -47: 3619AF47AB128405544DDF377ADDB80A -48: 635CA8B8968DF2EA5D377C61156044FA -49: B02D925EE0A47E45C32FC261813CC257 - -Key Size: 24 bytes - 0: 753D5B42D86672FB29070C4FE4EAAF4C - 1: 04D794B6EBB934D244813C0D8664124B - 2: 7DF123A5CCCFF43D8A7EFC8200E40DAC - 3: CDE0B4E9C2F9A0596B72D0C294763CCA - 4: 95B341AF73152EB44850E65BA41F835E - 5: CECD25A9CA5A6F7FFD0DCFE125857C83 - 6: DEE7E320983F0841CF2D4F9361D1F86C - 7: FD6689BCDB3979289701134E36461513 - 8: DF1EB30E9EC17F28AB2390DF5149C95F - 9: C1167910D14F2335BB3D51E84BF9C00D -10: FA7CB639BBDAB4A95C6170E97B778429 -11: 34D95FCA8C309190960FA2A585CFCD14 -12: 229BADE5090D5A8E0FBE14D691FABE26 -13: D634EB7B7C8250E31B5E5282F1A5BCDA -14: 1C74AC94B2996B56C468ECC3279CC90B -15: A8E203CDE49DD7B75947CDD4BF602CC3 -16: 5FEDE885F086CC4DB9CD4B88A671C635 -17: BF0468962FD3CF7FB3C56A0D4E495279 -18: FA545A5E62D495A78ABB5DB22CB32979 -19: C46651AD99291B20CF9AEC33BAB150B6 -20: 00B912000F583BCC777EF4BDDCC41CA5 -21: 8010FA2E1D05677221904EAC7B717449 -22: 0432C8A62427586C03E9B6D6B58730BC -23: 4CC70D235863006EEB38A8FF77D2D26E -24: AC0C2878D7B24E07FF8F082937A0ECB3 -25: B3220213E730B965704BB421F20FB271 -26: 4099A7F5654A20E69437069DBD5C4033 -27: 86C0FF7196543B12D37694B1B6D5C15D -28: F8E7D2F8DF2BFFD038D53CE1DCCE56C0 -29: 0FDF7635291A88BAB065BF3C1465DB83 -30: DCC2915BAE71AE13625AAD09CF20E939 -31: 233D73653107EE12441E2D3B1F4D15B0 -32: 93010FBC36A59338C12B8E4CEE962758 -33: A28C25E43B8A5DF411A628F1E706F95D -34: 0888FAF1CA0FA63932AADC35D7800CF5 -35: 8800A7DAD2A72CA213886F6B40A2A171 -36: 780EAD41E4B9138C505DFD17259F60A7 -37: D29AEE369B6369873A280BF82E558B39 -38: F08B02049678A56B834CEE410D0F89FA -39: 06766638EA1C9F87AC50ECB833F2DDD8 -40: AB4AAE5039497996403EE050EBEED49F -41: A3C421A8904815E29FF8EA7F8F73BDFE -42: C8F6A6EFFCAB57288B449DC21B305B9F -43: AD74935E4516B4898136C8081BC0F501 -44: 38652264470798FD14C447309B636999 -45: 81570450125A44D18FA95D66D849C4B9 -46: A54560FFEC85BCA455F1B9110B85AA6E -47: 1EE7838B7167B1023A1D216C64A4D016 -48: 8D4027CBF78A3C40DD988571625C7AF4 -49: F018A1F3A5ECA0F552FE2A91B084294D - -Key Size: 32 bytes - 0: DE269FF833E432B85B2E88D2701CE75C - 1: 9F8A7BD8355A5DA8F962F60B937642E3 - 2: 364FADEF177F89C7F76D5242AC4C9AED - 3: C8467544AA4024525CE7CDE4536424D5 - 4: B624A3E479FF2CB40DEB2DD492C0FA7B - 5: 169C3DD5F2E8DAE95AD2C311BE3D22D3 - 6: D607FBC8986E0613A5D3E6705B824276 - 7: 555BFE5CD108FD6C7CD60D41E1EBF427 - 8: 3992E8417207969B17E77D7F2782352F - 9: 30BB268730B585215A809064CB6BB02F -10: 4B04596B53036803CEAC49941FED8C9F -11: FA40AC41AF79BC7FFABE61F4AC970FDF -12: 7AE0FF90DE1D3CE31B72CB6808C99324 -13: BC3C6ED7EDDF820A266C584E83DB9A8D -14: 578D9AA20A86C239CA3A37B359170B97 -15: AA20FF60C011A93A40A603F34389DC54 -16: 55F27D4338056970D3386570F2C4B687 -17: 00AAB0B8AA64D8FCF962BFAE3ED6ADA3 -18: 81B305AF82100BE96B58B61263C455AF -19: 305F4DA751C7E1278C3640A62B685C8B -20: 9BA6BDF257560FBE2E7EEA68F9F56A6D -21: 63C3EEA7C1F7F792455F94DE12453A22 -22: D006597A75C55AFD697D2C3B682ED7CC -23: 5D73056F39CD3202A415F7A79CC06D68 -24: FD5275B3312208D3FE7800E924118F80 -25: AEB0FBEF9B702C040CF7CC69852213C7 -26: 30743D504858C8AF88EAF67EC36210E6 -27: 24BEE43160AAC086893904F4E0E4DD4C -28: 2DE746D379907BC0283A9E740BD2FF8C -29: 6C9AED135243A1D74AD499EA4F715C59 -30: C3F270819104BC72A37075EB17597B08 -31: E2D8E0AB533C5E6F01BA20B521F93B5C -32: 1D28B307F349CEAD34482C8AC0CFF029 -33: 4BC2D07A4E4186F4925D6653FA968270 -34: C650ACAC93555956FC26CA6437C5C961 -35: 70D56EF90E4703B7A84096D6325013A2 -36: 69714F2AABE76A078AB39917D0B7DD82 -37: C2AE9D7016AF9FCCA3CCFF54A1140B4B -38: 4A7F1F21A402EA5ABF62EBA30D227086 -39: 7C40B445D30258EF5F1BCBCD9FD556B7 -40: 434DFEE99021592E6A8D9C3C6FCB50E2 -41: FF4DF73D4A4C63432F874438B196DE64 -42: 05A0B7E9412A7D12931DBDEA87B0A9DA -43: 9EEB9F8B646BF296E08335E839DAC581 -44: 0EDB3008C41E0F88124D6CBFF73C816D -45: 4157908C9C90B568DAA611B759C26D39 -46: B7C1CC378876668DC8F08EBE4F86589C -47: 8836CB48E3E257AE4DD3995034C1D6DA -48: A8E6EB5A6C65673D6E72A6159FBD3CCB -49: 80DEC7F355AEA1BCCD1F8209C3FE9E16 - - -Cipher: tea -Key Size: 16 bytes - 0: 54D51B2BF3E47E12 - 1: B4617BE1F7508D97 - 2: 531211EE95A0A058 - 3: 6EACE196DA17DAC2 - 4: 2FB9DD2655A0B649 - 5: 7E302A63839BD8BC - 6: 47ABFE28EF03769C - 7: 432ED9D44C864CAA - 8: CB3FD723CAFAFCF6 - 9: 98F4CACFE992187B -10: 50B3D02E6DB6A236 -11: DC4773A3A67E65EE -12: D6F9E20F957D59BD -13: 7AE277DCB8E7DAC6 -14: B06985B8C6553AEF -15: FE4C06F6568E3868 -16: B902EBBCE7D8D89E -17: 5316796AC30920E8 -18: 7FC75B3B56EA64C4 -19: 55E791AC45D2F835 -20: F3B73331E3FA5921 -21: 63B0AED6F4119E35 -22: CB8FBD17723831F0 -23: 8D6DE59C74F50676 -24: 336B129371084BE4 -25: 3D97B6861E5147EF -26: 5904D18FAF54059C -27: 49242681158D88A2 -28: D588A9BAF9E67F22 -29: F4A22FC0BF0FA678 -30: 793DEF3385243659 -31: 66672F79B7CE8959 -32: 64E1175A4AF8FEA3 -33: E41B29C5BA3AD7C6 -34: 842FC234DFC0C5F6 -35: 9DB2EFDDA9D5A342 -36: 16E50CA57D441821 -37: 17B3625349C40147 -38: D89922F622CD73A9 -39: 5377B8E7F01EB9FF -40: C46A179121AB9A07 -41: F42F48E4B6E30D0E -42: 779695B31899ECE8 -43: C8F8B66D400A7B6C -44: B3FAC446C50F8775 -45: FB910623C88560B6 -46: 622DFA98884810CB -47: 29E007FCCA3EA93A -48: 4020E134D1154AA9 -49: 5B63CCF731964AE0 - - -Cipher: aria -Key Size: 16 bytes - 0: 3695A47E0769B8BC008F08A86CC4FFF8 - 1: 55E66FAD984182821B6AD5D04910E46B - 2: 3AE9467D43627664AE5A8105A9A92F76 - 3: 9AE2A40603AC6CE3A83358214C2C4F2C - 4: AA3AB3178CE134B1B98D810F5F0ADDD5 - 5: 379606E74A852BFFF0BD46D566D5A5B4 - 6: D88024B37E50CB5F6C68B1625F430DB6 - 7: F3A98DA54E2510B251D85367F6326DE9 - 8: 26B9CB286EF66D579DD6B844508CC25E - 9: BAFC25D2C3D908FFE726E4A9727BF495 -10: 355753896F22BB2AFB356F18973939A1 -11: CF501B48BB560B6B41648A84D97A6734 -12: E7BCE3D6E563A0B59D3EA246DAE280A4 -13: 45430823942F0F9DF101BCE822821F68 -14: E567EA19718B1E2D3DA1B0961D263223 -15: 6185A0169F25832D9BD96113EBF9AF98 -16: F67DC68A640F7E963F7E2E7081C746D1 -17: BE282B5B8F1F3B21E3446015819C7D28 -18: 6DD329D41BDEA735C42682B86620543A -19: 478C6FBF37920760C3D1E6231154BFA8 -20: E779DA9F7212FDAFD4EDDC1D36CC4B58 -21: 3B907C49703FE80B3021C74902955059 -22: AF5FB955DA202FDDB0D798DD80E8B2AB -23: 394CC417848EE5E97D390EF835F5410C -24: A085C4F75C52F4DF1287A0C0A31443EF -25: 7086F322EBE1C7F0C47874A234ACA6CD -26: D45ACA191DD34634CF1397DAEF05F5C4 -27: 8763982FEB2950CA361C52CFA988D249 -28: 2526AC457E3273F36CD5D64B357CC1E1 -29: 9D66F9FEFFE623BFC8813D198280957D -30: 1E62E9A48770DCF368300C7D94862166 -31: D08DC945AA802521DAF5B1366312E565 -32: E281AAA3EFADB713A1CAFEC7D9869B8F -33: 7DBB3C8A50DA05DCB77F9534378FFF04 -34: 6C51128A9C52F900A6CA27D4D9F3D8EC -35: 66774F28347AC500B96C15B7950CA921 -36: C3BC7CF80C6690370DE03564280C6296 -37: F14FFD45E1843FAF42D377FC5519B224 -38: 388BA2674166A18EF8A8B9E8CCF19A37 -39: 6221BE1657C3C23033E7C544F2ACA6B1 -40: 3B812BF3986E2CBF2944463C11920DFC -41: EAFC40F1CE618EE64E77526BB98D2819 -42: 8CB89CAE684318CDBF67357EC919DEE8 -43: C0BBA8DBD8ECBB8F05B540990D969D04 -44: F847097D4A7612BDFEBC46A66F93B9E7 -45: 82CEC54B264E47BDE31B8B86442F9421 -46: C820EB3A1BF677241CA55558956AEA92 -47: A50FA76E1F393450BA957B3BEBFE5645 -48: 3F98041E073246C6686888FB0B66DF9E -49: E776B3CCDDDD8B4B5B9E76B2C5B5FEE4 - -Key Size: 24 bytes - 0: F8EA29AD7147AEA21BAE5E6FBC072043 - 1: D8C9D25F9F17C017F7CA3315566A99AD - 2: ACD004A86CCA4C5A2FEF97E67F6A5D42 - 3: FBF99B1D7551207B6F3FCD2A5C7F332A - 4: C81E841C0B226072AAAB5F3C8A2C0DBB - 5: 264C640CDFAA39AAEF93FDE8B2617197 - 6: 5F81807DAB5FB538287288EA67FED679 - 7: 08E50137C580DDF0D97DFA3D13EEEE0B - 8: E9C4F0C07D3C13AEC0F32A35C526F7E3 - 9: F769DEF392BB4D8549918603A43866F8 -10: F03B155CFF8338D7D6EEADCDD237B4BC -11: AC785DC1D7D9B66B1AB4477CEC915FDC -12: C531AA347A3438995CCA45A5BD852FFA -13: A2FD071FAFAF2172CB818CCEF5209C3E -14: 335213D8AE4D5C05146E52166F90A565 -15: C1508EC236C02EF9C4DDBB7D29246F63 -16: F49D498176557784545F015A7E3EBEA6 -17: 2BE9CC25FB15FFC39DB77E8636FEF2D3 -18: DC579EFB38827165FB4FC991234B01AF -19: 2BDE9D960FB95E81645CF2E8D7CC485B -20: EEFD756254227B095E103E0D2DE1B681 -21: 031B3FF77B524E9E74AC644A73ED8F09 -22: B999A6342B941BCE258BDC7F37D8887D -23: A934B1ADDE23E1BC6C5DC64EB4A733FA -24: 8ADDB0EC58E24B3426030D49A3D90E01 -25: 98711688EF7599B5360951C2FCED1120 -26: 0BDE2ACC4EE241B4359634149344FC09 -27: E37AAD591BFC42C4F2D09B27458FC6F1 -28: 17310092AFE8144E6366EAFD4C07B44C -29: 02E7B2B49A7A1C0A96B74076ACE41754 -30: BCCA7FE26C4C05BD5D2533E2019D21BB -31: 4A640FACF036C738DCBF2EE58D9C1E97 -32: EDFE6F4C79D2F68B11B23CFB4A89E2E7 -33: 69CAE5D89958BCF7A0FD78EF28ECA55D -34: BAD69A5DAFA57262055ADE11A81D55AE -35: 5132BA5DCF0998D9861CA7C18ECBC4DE -36: FCD6EBF03877BD3662EF785BF2BAE964 -37: 51E2BFAF6E9A3E2E5B0206F0F60DF493 -38: DE6DD7322837EB4FE1BA974B7AE4D472 -39: B9ABA31132DBB35D61F9CBC4437EB722 -40: A341DEEF979581A5832633C88FD0042F -41: C1F78528B8AA0B83E7FA8D8EF8EA69F8 -42: 99B12F98E888A0EEA34938A6542C879C -43: AF0DC93FC94F9CFE2973129D17F18BBF -44: 0220334326752A04DED075B6BA229D5F -45: 37A150872EE52C2E543F8619D47FDEF3 -46: 8CEF792935CB636FDA26A8AF30E8528A -47: 36B8D87CCCA06E8B9DB2F29F3E858A73 -48: 042734CDB7613040E45108378B6951DC -49: 0B39A290BA404D25D7185796402AD202 - -Key Size: 32 bytes - 0: 7A859561FF6F42DF04A242BFEA4FE9DC - 1: 20540CDDDFD2160AF4A55D21B9A913D2 - 2: FD3E564A447B29CA6208B55B16006BEE - 3: 07CB348B6E05F3245A8981E76C6DE1DD - 4: DFF7C4DF0632B2606361CEA72114D525 - 5: 2197CCAE47D3844E853DC3C8602306A9 - 6: 35DA6E1A1AD475B95D184F6AFB64A65D - 7: FD151D1B78346527C6543625BE9F720E - 8: C67F97EC96BACF270F246EC064C6CB21 - 9: DF35B84B7A0CF56325C4E3074F1474E6 -10: D5C7783410013D10A92EED5D4E479D28 -11: E674734662089B404A5EC46872F9CDA2 -12: 19AAAA10A0AAD38215614E2235967F48 -13: 2E6B255992B4FB5E6CC80DB1D10D9A15 -14: 88D51AA86D66783281BF217273EB7DC4 -15: AD4B57CC3DCD1378092015F1208CA988 -16: 01889F84CD5257EE14D0A3D75E79C6A0 -17: 5B009E244DDE80589443B726F81A873E -18: FF765A4C965D326B5F354BEC2A20FC44 -19: 6A2E424C6C29C1994932148AAE26989E -20: E4EA98370C90BCD08268502422F7D679 -21: 3DE45B7FC95FB13741E1E917FBA0EE6A -22: A078640BCFC1C892028B72321316CBD7 -23: 7989791F3005CC14FCB8D65A5766A935 -24: 819133854C6B0A03D641F9ED5B4F81C7 -25: 27B2D93F3FFBAE16A85C4F7822B06BD5 -26: FED3206F3B3AA98ACA902535C1745D83 -27: 2AADFCDC9884FB73305BCC847FC0482F -28: D157178EC248E3A17DE0C365BA370299 -29: 54BE4FE4EC6C0A7E1A7BADEFFAE6543C -30: 4A99D84F1D6BC17B7D1A51875478B169 -31: 86D354A1F80852974C215A0D3340B122 -32: B42D7284A4D393FF3B9A651C043CAB76 -33: D2193CF1BB4DCCD3BCFD615D12FB8ACA -34: 7097ED7BB156221EC99FF0782EC4FB03 -35: BD4293B0F1CCA48367E672C976FBEE64 -36: C9272C36FC3CFF79BA725E3388386A78 -37: C26DF02CD377ABADCF7C792AAA28F22E -38: 75D0669296A1423D6E59E3A11A94080B -39: 5EAA7227B51A993B396B5306388D4B7B -40: DB92537C3EDFB4A97C5FC12B1B2A41A5 -41: 973D6A28FC0FF2B56B9D76B16FCC19AF -42: 8E104E5678718A7356A28F162F294D1F -43: FD92D131A1BC8C49659FF11ADF49BE76 -44: 234CDF3DEF8151B919B56BDDDFA0E5D8 -45: 3416E08B8DB741DE80FE22D7F90F3088 -46: F25E353111BCD3E16E85E912082AD9C7 -47: 3FF977A7D4EE198ACDD08A6C98EBA72B -48: AC240B97F21B0536CA23E716C333C9E6 -49: 42CD43E39EA52D7C5904C4B24157996B - - diff --git a/notes/eax_tv.txt b/notes/eax_tv.txt index f13e18d5..bf4a52a1 100644 --- a/notes/eax_tv.txt +++ b/notes/eax_tv.txt @@ -57,23 +57,23 @@ EAX-blowfish (8 byte key) 16: 60A315193F58144F5701D547C79FEEED, 912FDBDB05467DF5 EAX-xtea (16 byte key) - 0: , A04FAC8D0416F081 - 1: 5E, F95DAA99F8FE28E9 - 2: B6A7, E2A05E1F1E6D17B5 - 3: 27D698, CCC0CC54F40DA243 - 4: C2E81CCC, 283AB8F109D287ED - 5: 51B99DF694, A9637DB356B4BC0C - 6: C2ED3E79A4F2, 413D3A65FFE803BA - 7: 40E35BE6CA019C, 1B68833B90E4E026 - 8: C246C2B5ACEBEB08, 50CFEB01DEC3BB1F - 9: 35E2F7AAB57842D50F, 617804483BFFCA9D - 10: 2F855AB7A4664958300D, 6F054767FE484664 - 11: 2824A5486D1B621D0F992A, 238566B9F56ECAB1 - 12: BF5C121A6144AA0CC05A380E, 63F4DA4B898FB2A8 - 13: 2EB53E8A4698EDEBB990FC65E6, 7DFFE0E43187D10C - 14: 85F77FD150C6649F5826AD45D50D, AA660F37975768FC - 15: 8B4EB3750814EE7E8FC6B97B3ED1ED, F79545FB1F1C389B - 16: 980EB7FCEEE37558BEDA0E938325F608, 2FAA9235BFA3EA30 + 0: , 86881D824E3BC561 + 1: EE, 4C3505F04611D9C2 + 2: 80C8, 6A3428BEEAD60738 + 3: BF88E7, 04F1E99E9F5906C2 + 4: E06574B7, 33B0153AAEF9776F + 5: 42D950AF63, 4A0F415640322FDF + 6: C30F6AD46EC9, 9646FE909D2B95CB + 7: A0049FCA856A14, A0257289C6BBF278 + 8: 2814B0C1358440E0, C4B0A2354925E887 + 9: BF4F062B52C1E489CF, B56442A3CA57A041 + 10: 63DF433956831B8780FC, ADF9ED0B46DCA19E + 11: C317FD079817F50E0E8A16, 2EA0EC993FC603AE + 12: 2BD12FDDD81EB11660346D2A, FBC6F69125BBA88D + 13: 85D356536FE2843C6BBE60EDBC, BB2FEFD04F230E79 + 14: 22493009DB01B4746F4927A8C4FB, 64CC08471D93C9AC + 15: C0F3C0DB08DC93FBA725D1E02DE084, 77B762213DDCCFFE + 16: 568B66D3112556BD98FF9339E9C002E5, C8355F508219FE0C EAX-rc5 (8 byte key) 0: , 169C7954341EF44D @@ -199,82 +199,6 @@ EAX-twofish (16 byte key) 31: 2DC26D449379997D110309B2A0DC2760FCE8CADB4B14ED580F86C70F69C9BA, EFCB60EB2B25737E256BC76700B198EF 32: 2B1890EB9FC0B8293E45D42D2126F4072754AA54E220C853C5F20FBA86BE0795, 1A1B15BBC287372FB9AF035FB124B6A1 -EAX-safer-k64 (8 byte key) - 0: , 9065118C8F6F7842 - 1: A1, 1926B3F5112C33BA - 2: 2E9A, 5FA6078A0AA7B7C8 - 3: 56FCE2, 984E385F9441FEC8 - 4: C33ACE8A, 24AC1CBBCCD0D00A - 5: 24307E196B, DD2D52EFCA571B68 - 6: 31471EAA5155, EB41C2B36FAAA774 - 7: 03D397F6CFFF62, 7DFBC8485C8B169B - 8: 8FA39E282C21B5B2, 2C7EC769966B36D7 - 9: FEA5402D9A8BE34946, A058E165B5FFB556 - 10: 6CDEF76554CA845193F0, FED516001FFE039A - 11: DC50D19E98463543D94820, 8F9CCF32394498A1 - 12: 42D8DC34F1974FB4EB2535D7, 77F648526BCBB5AF - 13: B75F1299EF6211A6318F6A8EAA, C5086AEA1BE7640B - 14: 1E28D68373330829DD1FFC5D083E, 33EDA06A7B5929A2 - 15: 85529CF87C4706751B0D47CC89CEA6, D031905D6141CBED - 16: FE5CB61BAF93B30ED3C296EE85F51864, CC484888F0ABD922 - -EAX-safer-sk64 (8 byte key) - 0: , 5254AB3079CDCB78 - 1: 75, 798DCF14FEF8F4D1 - 2: 0300, D5FCA75DAC97849C - 3: 520F98, 10E357957CE20898 - 4: 80E2764D, 5C7F46656C6A46EA - 5: C48960CDAA, 3CCF44BD41F01CA8 - 6: E0E60BD9AA2C, EBB493983FCEE79D - 7: D13D8804906A1B, 6EDDCA919978F0B6 - 8: B7AE14C37A343BFB, 2369E38A9B686747 - 9: 5DE326BBCC7D0D35E9, 041E5EE8568E941C - 10: 13494F5B0635BA3D6E53, EAEEA8AFA55141DD - 11: A9BB35B14C831FDA0D83F7, 4002A696F1363987 - 12: E242043A1C355409819FABFC, 63A085B8886C5FDC - 13: 204598B889272C6FE694BDBB4D, 194A1530138EFECE - 14: EE3F39E0823A82615679C664DEBF, 1EFF8134C8BEFB3A - 15: 8579D87FD3B5E2780BC229665F1D1B, A832CD3E1C1C2289 - 16: 74D7290D72DA67C4A9EAD434AE3A0A85, 96BAA615A5253CB5 - -EAX-safer-k128 (16 byte key) - 0: , 7E32E3F943777EE7 - 1: D1, BA00336F561731A7 - 2: F6D7, 8E3862846CD1F482 - 3: 5323B5, BD1B8C27B061969B - 4: A3EC3416, 170BBB9CE17D1D62 - 5: 0C74D66716, 7BD024B890C5CE01 - 6: 6158A630EB37, B5C5BD0652ACB712 - 7: 17F2D0E019947D, F9FF81E2638EC21C - 8: 68E135CC154509C8, AA9EAEF8426886AA - 9: EDB1ABE0B486749C21, 355C99E4651C0400 - 10: DB0C30E9367A72E8F5B2, 631B5671B8A1DB9A - 11: D4E5453D9A4C9DB5170FCE, 75A2DF0042E14D82 - 12: 3F429CC9A550CBDA44107AA7, 2C2977EA13FEBD45 - 13: A7CA22A97C2361171B415E7083, BFE81185F31727A8 - 14: 170F79D8B0E3F77299C44208C5B1, D5ED9F9459DF9C22 - 15: 2E24312D2AE5D5F09D5410900A4BBA, 2FC865CA96EA5A7E - 16: 8F3C49A316BA27067FF2C6D99EC8C846, 9D840F40CDB62E4B - -EAX-safer-sk128 (16 byte key) - 0: , 22D90A75BBA5F298 - 1: 3F, 98C31AB2DE61DE82 - 2: 584D, F4701D4A1A09928C - 3: B9DEAD, 6E221A98505153DA - 4: 06D4A6EB, 0E57C51B96BA13B6 - 5: 7B58B441CA, E28CCF271F5D0A29 - 6: 7950E0D1EC24, 2ACDDE6E38180C07 - 7: 65A4F4E098D7C6, 7DC1C9E9602BACF2 - 8: FEBE4E72BAA0848F, C4607EA3F138BAD9 - 9: 9B7BD6D6D655985AA3, 8B2C58A9530EA6AC - 10: 60C92F925D1478470203, 51E6F5F6DC996F84 - 11: 7B40769370E651F64AA654, 74F1F8A8D3F4B9AF - 12: 7215832C2FB9C54DF7A9C686, 9BF9AEF14F9151D1 - 13: AD0F9C79008572AB8AE2466EFF, F375D0583D921B69 - 14: C05076E2C330A0D25D7CEC80597F, 843C12F84B00A8E0 - 15: D18F0563AB0278140B0CD9A9B07B34, 262B1688E16A171E - 16: 650747091F5C532EE37D2D78EE1EC605, 1BAC36144F9A0E8D - EAX-rc2 (8 byte key) 0: , D6CC8632EEE0F46B 1: 4C, EA19572CB8970CB4 @@ -313,25 +237,6 @@ EAX-des (8 byte key) 15: 8D1A1E888BBB8648E638C4E74E11B8, 685E006C441448B8 16: 93AE906B8BE4EAC8ED6D8F48F04A7AFF, 71DD7AF752FE28FB -EAX-desx (24 byte key) - 0: , FA66F07E473109A2 - 1: 4B, 576970495248BB09 - 2: D81C, 3AE9E470ABFBEEB1 - 3: 5B2442, F6B3BDC55CBD01A2 - 4: B1A495A8, AAD2D78BC0525DA2 - 5: 7723413A8D, 51D3134CBC32AD9B - 6: 6F9D40815E10, 552C146A7A769E9E - 7: B3292E406C9B92, D3ACE79B2D69877B - 8: EF7513D71D52C33A, 64935E1AE8C416B1 - 9: 068AEDE3E0E1B0DC11, 2C5698925FFC70BF - 10: 76A5664A3D5DF553BAC4, 52B9D560C0D9BB0D - 11: CC6128B6BD0035354CF3A3, A8BA535862B221BD - 12: CB499A58CF55D016B79192EF, 76842391A45C6674 - 13: 4903FBC696A256D4AC16A3EFD2, 39978842103FE097 - 14: 9CD5671BEDF4EB8D519A72310A37, F00809AA017E81C5 - 15: 9F62AB705A285EBF998FCF401166BA, 506244F55C4EAD84 - 16: 110161EEF9B3CE543DB12EA8682866D4, 7A12BE4371963521 - EAX-3des (24 byte key) 0: , 8914311BB990B725 1: D8, 2094EDC5D03E54B1 @@ -351,41 +256,6 @@ EAX-3des (24 byte key) 15: 9E8C73EADA105749B5D8D97392EDC3, 2E749EE66C1E6A16 16: 600FA4149AF252C87B828C780AEFF8BC, 33D7D11DCDC19936 -EAX-sm4 (16 byte key) - 0: , 650501697FAF3887F97E691AD57FD916 - 1: 56, 34D9D25271FA43908A88585CCA65BB56 - 2: 0F1A, F5E3D4115EB84F74A2AB8289E696F366 - 3: A06D88, 4425EAA479E448A034B7B997A6BE84C2 - 4: BC33483A, 51188AB6D581A1335CD5C2E554B7C68F - 5: 353583E113, 45071CBF115D70CF0E7852B87E836B65 - 6: 3093D4065F4B, 73E28033374C6512E6A135ABA04A6870 - 7: 349796DFD3F24C, 1A3E0016A50C0018BAA966F99A320A7E - 8: 9D7797A751E31590, 30FD2B87E834DF19FED8357CD26BC88B - 9: 2ABCB97055D2BE28D0, D69EF4E92C0C50A52E053DE99CA94501 - 10: BA7B8CA8FB59F7A0263B, F9DC5935366E22AE8B455461E949ED4F - 11: D4ADCF3E64D0B2F251479B, 34CFFFC5A89D7CF8BD836421038C7A42 - 12: 924FC873A8F53C16F37D54A1, 8FA7A0073CC0BED6D34709FE9A7EC600 - 13: 99AEE0A92D0D6D783FEEE6ABA2, 24F753FFB17EF010E0AA0947FC52BAA4 - 14: 00BFC12E5B7E14F0EDDFC42A1816, BAAD3E2BED1F6ECFF81D2184C69B3484 - 15: 4E85F4056D13919731FDAD6E8E974F, F24C6A5E6EB02D4DDF27CB757D1A2423 - 16: C0F667A42E6B5598398B431814A18273, EC9E34B8E933583E16510ACE9B4DF06B - 17: 0F7B8922D29E828148A46FEAC29729032C, 4934C5F94389495195984CFF758E87AB - 18: 4C67F1ECF5BE22F16F20A25C79ADBD01ABEB, B6DAE0A254994AE40DF0F29DFAF50364 - 19: 084D26AD7889C945C2AF7E633D870CE79B4729, 402DEAFE37357D5D9DBAF56D3C5F5800 - 20: 621482F573F2BF7D3C4E1294D22CA36AD5B8BA56, C42036C948E4158127F7921B0548EB38 - 21: 807E26EC65A32C6431E16D02F1013F60DA8D6F8FEB, A9451DB25AA897C6E74A7AB0D0CF5E89 - 22: ECDF3996A964655239C7B1FF36B27AB40233CE920F9F, 7B6E0355E5AC027E52D046A5A21CDE2D - 23: 89D9DFA557700E6CCA7825B7055C3A84F50FC1DB2C2140, 850F5596560D461751382E1A2FAAE21F - 24: 4B4F825B41D728CFD1E3AEC60ED227A858A2C020EB0D785C, 63B44E988DF17AF1A5999A6CFE4068EA - 25: 7D885DEFFC7CFA06C7FC710C6ED78976A40C6D7EA82AA0F7FB, 88B2E50E500C0883141712B2BABEF5A9 - 26: 65CFF84444B5CCF480E5D3062BDCB4662C5C2B9933841D6F04E5, DAD13A3AD0D51F98356B6FC69C934BB0 - 27: 95C852409422E090E049218F228DB32CC302BAB911E2C871A21BF4, CF4D1EAF2886CF74479E239AC6CD585D - 28: CBAA0B7052DEC9C8DA334EF910FAE656EAAAEFBA5D6C1D5687D78536, 13E40EFAE3336AC5B51415504A9640B5 - 29: DD0D60752F4EBD70509B1DAC9868A73151FE6950083E3976DC264A7399, C9AE7328F68C537E6C0C6D7A8A3E0D9C - 30: 8FF315081B4E87A2753038905A3EC46879E28C6458809E97EEEC7D77EB22, 3C3E1B732EB711E51D4F1F80B38B9741 - 31: 41CAD696C51CA2F938C3BA517177A22AD17211D4A38F43A81436308E08CC41, 5DAEBD5D3C58CF6CEE1D1EF9FC171DAD - 32: BDF417BCDF679E2C981023BBB53D408929A4052F1F04BD59DE618C588786EA90, 1DBC8FA9D1F645E424FC74147ABA4C2C - EAX-cast5 (8 byte key) 0: , 382FB8F7E9F69FDC 1: 99, 20DA959849B3F7AB @@ -406,39 +276,39 @@ EAX-cast5 (8 byte key) 16: 70CABBA983179106AE7FCD5F1F31D5C3, BF7F9168F4F82F56 EAX-noekeon (16 byte key) - 0: , 5CB584CC68025F830B42371B9CCE99EB - 1: 65, 69D866C00E11E4311ADCD50AE2F91D03 - 2: 80D2, DA0499598F478A7FF53324908EB4DC74 - 3: 86EFB4, 7DC1556C65F9E7CF2E3A357B38E326D1 - 4: 87387A77, 7B58F421766918A179A999520A6E3781 - 5: D18B9788C6, 924A2FF178FD06BF292A605FCB27BDD9 - 6: 0075EC03ECD1, 78F553564A25A574E6A4857778A2DB43 - 7: 5BF96EC79C2E88, C49CBD1C4F631B35D5A3B764251870D2 - 8: 70DF3B35F6D9B822, 42351BF5C947AF7A0E1F852199B5840C - 9: 2E53748525AF367861, 4986BC390AA0DA1E4E78CB2148A2C513 - 10: 05DE8BAD8C975ACECF87, 1C0F1C18FB8682D76AF9E48D3547D88E - 11: 8B2B1D70F6A74059503F42, 839EE120ADC8BF08CD9A7DF6393D1E51 - 12: 9D7F92F08953B5B300A7410E, 603A43432DAB26882797BB5AA7A75D28 - 13: 4CA551DDB4BBCFA45BF71C49DA, D2743508826E3E39151F21C0AD81C8DC - 14: BAE72091E78013369AF5D0294AC6, 3F0D391BF01C3BA116A9CAF50DC28307 - 15: B037AFB65588B95BC86E1430E0746A, 2399A4C31F55310AE2C4A2FE3379C74F - 16: 842F0B29888C43999545D29CFEFA58DD, 9B6E4FED2A6BE59DC2DFAB407D2FD124 - 17: 86F7DA57E5C9DE9C88EFC1ED0CA61F76A4, E7278F365289FD0C484A166FA9EDB801 - 18: CB94AD60C1FBDC9868DDE0D4674251A644B5, D857CE47FB963DFBE7983D183695803B - 19: 5A0B24FF167EB133808A3FBF89D9895F30BE1C, 488362E61725BE723CE892F550AF028A - 20: 60D43A8C29F1714588672847FA00DE771F2C3D36, 25D7CEF55A2A33953D9B7739F9C98C12 - 21: CC47C891FAB841800F0AC0F746A257062BE9AF49F3, 220A3EE618FB735B9E801F9B3708D4FE - 22: C8E0F9AF7A7C62B6C297B16025DA55BAF5BA13F6ABA7, FA16192047892BC2472AF1DBD95E0D6F - 23: 731BDA5BEFCBA427E715839C21E4A176D0E28F042C3089, 4CBE4BB916EEE773B9299FE2FF0BBD81 - 24: 62C5CD4F7EF81EA4E58847F3F715FA9E9EFB32059D70BA88, 090E92CEED8FB5D472CCDA11363FC904 - 25: F7FD159377B130633F93B4D18BE68B0872905BDB205025E4FB, 6F335AB81AC8507D5F4018F86FB0230E - 26: DC374E5B40E8F4614C2BE685539C97825C7A972CA2BEFF338208, 719F6C042DB09A08C36D92810FCC29FD - 27: 1050C71D491237EF77F4F043D7EDCBD41DA0BC155F1CB65EAA1D5E, 44E7CD8CEB27584340270F3CADE1A083 - 28: 8AE94A4FF500DC889436866D90B8E150B63EDE74074912029FF9C3A0, 3C96328BE53423BEB32FFE0D05F9B71A - 29: A801D1571411396C0727B132AEFE114D7BD486DA74C549E7661F2D8B87, DD6A443497AFC9EB14FE6EE9069AD580 - 30: C79DFE19B0199768EFDD29026863C644A0ADBD14A3F3866DE74EE7AA2E0C, CCB313FE30CD4F04BB3548808FEBAE6E - 31: F658ECDD95F960D7C68D03F9BBADF066F8B9CE8108867C7DEA305FF4124AF2, 8AE64618E77A2806B53E239927787ACB - 32: C92EF301771E89D5BD3B901B380EBE18BD2A193B5989092006E7AC15345AFD34, B450AC584DF13D9C8BDD32DA686A1AF9 + 0: , 556805EEA595CFB9A30FAD196103D7FD + 1: F5, 0A7DAEDFB656526CEF4DDBA8087A227A + 2: 7B8C, 249895D79962D5B4D18FE07366281B72 + 3: ACFF15, DCC489D24832EB106F576AE6B6EB957A + 4: 08ADE7DB, 0D3215999E9960EDAB29B78744C7F139 + 5: 66139213F6, 505E1E7141D043E903C26EE0959EEECD + 6: 078B79F880A8, 35B7EB326A55E50332866EEDB682EC20 + 7: 2809E34D9667D4, FFDEC555F68524A09A6ABACA372077D9 + 8: 93D267DE1EC635D3, 4FF3561990A56E4B374618722EF850FF + 9: F377A4D93FF32F4A51, 91D4070423A90FC54D305169C03F49ED + 10: 6244B717E082993EB7A1, 2E3A8A354AFA9473667ED7FDD46BE9FC + 11: E917559625D25E6E5F2EDA, 19295C37A70314CC9A1D11FDE8D23C92 + 12: 1E6DF2EE112A893AB14DFA92, 12C4A89D4CD65F8116A03A135AFD3701 + 13: 47B18CD762E011770E203CF605, 434909A97E118B20D3AEDC79AFE33A9E + 14: 72D9A1A7DA6F33D5E0B927F9F32C, 779C23714FCAA2B2321EC7FB5B03E222 + 15: DA8B830FFCB3DB274807F780D33240, EDC2F1C8A401F328A53392597730B007 + 16: B53DD2BB840AD933D36A7B5FFDCCFBBB, 4EC0E6D1F916BF633869239B672B37A1 + 17: 42936BB9A936C30408660855F4F47F3314, F0DAA6DDA15585E1697ABBB4790B15B5 + 18: 00372E47F5BA016F1B2A1E680B76AB02052A, CDBF3D241BF7FF96D3DFBEDDB872E901 + 19: 8AA236B0C8BEF6F67A97C2DF90628F6E5838FF, 731DCD61F7F26004C03519F9500EA824 + 20: 55338647812FC9D86CBDDCED7120268A4D43F8BA, 0E61B3C835CAD95FD49FEF002C014E72 + 21: 435820B28E52154B47A04D5E635D8FE37FA47FC985, F6A96DCE4917E8D7C610923627E80970 + 22: 0D30C15B6FEB4A48B14DD15D41A4B25D442AA677B25C, 28E15CCB74AE992C68BDDC8D87802050 + 23: D9D701F9AD6B0E13D2CDDA15A5194E7CE8BD2C02137391, 2DB9A15884E9C996C3D6B5BDA44B9598 + 24: E2390AC5CE10CCFBC72106A52C7F180CB477E3C193CBACA8, 22D3F7DCD6947EA4E78DF57A8E1A9A59 + 25: ADEFB7D9500658D34996AF6BE6336CD78891064EA1DB8E9785, F239D67D039A15C620A7CD4BE4796B3F + 26: 89964C90ABF54A6DF9F13C3681E70C702D80A17BE79F8160F30E, 6336F729ECE1ED7368669D75B7E2DCBA + 27: 576B2813CECDA4F905BD5D58349EF070FF41B7EB6BB2B01B061B0B, 125324CBF2ACF1011A44A99A11EC8AFC + 28: 430B957481748519A60494F0B5F698F34B1A8235B00AC0D1F0A4442E, 1E80A7FCEBBB8E1E12D6831906154485 + 29: E781BFE5FCDE0BFC056CC86C4A0B9DD3B815BE8CA678204CF47289B5B5, 190D5AAA9EC1CB4CC86FACE53BF1201B + 30: 78BFAC07A9B7B2AE9329BF9F9BF18A1A49DD9587001EFCA00E9AD9752764, 4FB5ECBEEB0995C150EBC66508FA19C1 + 31: 7D6C20694109DE21F7955855A8FF832347518DD496C2A114DF142C68ACDEAA, B25D4BB34056DC091A7A3950D46C32EC + 32: 3E1E4395DEC1AFEA9212B95F37E679B6E2D14DF23C5DE49018C2C8038CC4AD45, 9A6DE7BD41A21918AD504490EF4E581D EAX-skipjack (10 byte key) 0: , 85F74B6AFFB10ACD @@ -459,273 +329,3 @@ EAX-skipjack (10 byte key) 15: 07AF486D1C458AAB2DBF13C3243FAD, 87288E41A9E64089 16: 84059283DF9A2A8563E7AF69235F26DF, 351652A0DBCE9D6E -EAX-anubis (16 byte key) - 0: , 8E20F19D9BA22ABA09FB86FDE6B9EF38 - 1: 3B, F4201E546A9160F989191942EC8FD1D3 - 2: 9F38, 4E3CEAE3E1CB954E021A10E814B71732 - 3: 4F4769, 3E8F35A6A5B11200E9F1AA38590066CD - 4: AB41F5FC, EC4C97A8892AAF5433106D4AC8A49843 - 5: 414F95D61B, BF831E34D1E3FECB973A8C730ECA2E6D - 6: 4798322F06D1, 005BBC30BFEDBE6463536C4F80D1A071 - 7: F256B6CD1BF4F5, 468A28F0661884B846B191B530C8D064 - 8: 90906F27A633ADDE, 6D9200A37A7F6A456CB103673184C2E5 - 9: 16CD3C17C9B4EAB135, 6D716E23D7B35109F55B036EDFA7742E - 10: 7AD1C22F1F06298DFB25, B076990F8193543C8F3185D3792BCE56 - 11: 0476F2ABCD057FE6FEE39D, BB2876DB18C00038FADBBD9B264ACC3C - 12: B69EDE336407DBC2EE735857, AB63E5906116A8BE22C52B5DA31B1839 - 13: C3864C1354065A56470669E602, C72BFD3A0BC73BFF051C9AB2F0DFED93 - 14: 296D8F183A59020D33890420DD7B, C9D90B9EB42C32EDCF6223587D1598A6 - 15: 256ED8E9D982616680559979BDF2E9, 179FE4E7BA7E966050D35900317E9916 - 16: D4ED8F30FF9C0470D75B3B16750A3AE4, 5D50F05BB270A292DFF9F67A3BA84675 - 17: 40CDEB6388274143CA3C4F6020BD9A4875, B27C7DFB1BFBB3FCCEE0171852C7924E - 18: 54EF262EC1801D505C7629D038654EBA0594, 9D2060FCD0A2C577511C7752ADE60BBE - 19: F39EE54A37F16DD38B624D7AB8F0D9CBD4B981, BC056C7D2C09D813703CDD63C1C69F44 - 20: F4E7AD474FCA153ABD670E43081ED09EB2C4CC1A, F244BD4D630272F0D98FCA04226C04F1 - 21: 039ECC36A0A16273E7246CA1FF19D213AC87B53F29, 3056DB6916C925DF220B6C9980EE141A - 22: 7DE1DCDEF01447CA2FE83375A48DD84E4A7CB7C01992, 79AFEA4816EAF8DAC8A5E93960F1594F - 23: A886C4B914BF0983003272F226F9B2197EF2DC05ACDDE0, B59D85A0FDA5FA4422F7203C055B97A9 - 24: 00B3E1E91448E250AAFB695C0643A6577AB453EFECFABF53, 4A7EFF1CBC1AB535122A017203616D85 - 25: 85E972E774D66D0531E40B8FE9E264A77B50FA883AB0943080, B18E164BF89B7E7AB0DC256DFEC7C72F - 26: 004849E39334969B392CB0CF3FDEFB3D792DCBBC15F8328C7EDC, 3C51295711F5F878DE8F0B2B5A26A227 - 27: A0BAD6C2264AB1578993BA49E59D4598822FFED20A57D88F756FF1, 2EB9D525697A419A10DB2A84AEEA5FBC - 28: C34DD806EAB5AD823D78BCA78A7709A705FC94ECC521A367D76C9588, 3C57580C7903039D645C06DBAF07B477 - 29: C447EC77512938CF7862388C32AF22ACE6B5E4CBAA998BE4F5CBC4D215, 43425D09B7ACFD90371C08953946A955 - 30: 2C16993AAE624CBA4CDAF34FE3D368559E6BE548292B281439866375013B, 3B7360C3FA8FB1C15D19F567153CB46C - 31: 538E5DFAF14854A786851E4165F2E01CDDA963E318FCE4FB58E31A6B5CFC33, 2F8EA13B7A6873FE556CA535ABA0968B - 32: 5E29CDB7D9695A110043E9C260104BDF020A3A2A139D4112E918AB584BDD7EDA, 9133213AA7BCF062D2BD37F866683D3F - -EAX-khazad (16 byte key) - 0: , 75968E54452F6781 - 1: 95, ADAF5949F09B5A22 - 2: 6B8F, A06B201947424A11 - 3: 5BE668, 3251416625DF347A - 4: 5A92E82B, 33E25772427D9786 - 5: 62F9F2ABCC, DE714F5F5D17D6D0 - 6: 0E3CD825BD8D, A7991C8CB8975ED9 - 7: 4AD0D999503AAD, 53A827D7886F7227 - 8: BB08E6FAED1DAEE8, 91A118749B7AB9F3 - 9: 16E30CB12E20D18495, F8F8B8C1280158F9 - 10: 616DBCC6346959D89E4A, 506BF35A70297D53 - 11: F86B022D4B28FDB1F0B7D3, EA42220C805FD759 - 12: 9B8A3D9CDBADD9BBCCCD2B28, BB478D3CE9A229C9 - 13: CDC4AB4EF2D5B46E87827241F0, 658EDB9497A91823 - 14: 1A113D96B21B4AEBDB13E34C381A, 63AD0C4084AC84B0 - 15: 14DA751E5AF7E01F35B3CE74EE1ACF, 3C76AB64E1724DCE - 16: A13BBC7E408D2C550634CBC64690B8FE, 3D4BBC0C76536730 - -EAX-seed (16 byte key) - 0: , 3D0715108CEA3BE144350082B1BC4F25 - 1: EF, E56898AEDB0F461980587FFBDB83EE59 - 2: 9552, 9647B7FCEDBB9EF4EDEBCD98831E5BDE - 3: 25DCD8, 3647D80EF3529C72F16D223D04D7ACAA - 4: 3D169011, 7A741FA2536E5905FD4ABAB104062D3B - 5: A92411F6BC, 18A306E5DBF4DBDCE21505F16DA85482 - 6: 9D4661D2859F, 7B2FC34AB3DE45DB4AE8C97BF3B32BA9 - 7: 0E8C26E24B0961, DFF098B44E7D57A71F68FD0D2D2416C7 - 8: 485EE54D5D2684DF, C8FCF501065D23F936A4A530BB028EA0 - 9: 768888B50865A635A2, 8121463B762AC12D19EE21C58A8A1B7B - 10: 647FF44F0B350385BF27, 883241565540347D491C0E397FF5D663 - 11: FD868A569E2E597EB3B5AC, 4DE96B6810A1FC5F19A085B4F4C8B687 - 12: 342D72063420F3FCFC1EF71F, 88B94C3FFD74F052CC44722B87E1A45D - 13: C768F88646D47D5201FDF47A1E, A01EB1FBB3AB135F258B87C30A8E1A13 - 14: 44BF87EC9A5F5E20E5D972ECAE4C, 6F1C44EDB3533EFF973B53EAAF84D601 - 15: FDE60E4F25C4B9388BD3D348912B7F, 863871D706A32F92DAD13803CF2008E1 - 16: 69881E58AF690C5EEBC00DABDAAFBCA9, BD3911C5E41B327A10DC7D03435FB8AC - 17: 41AC0D70E8ECB01CFFFC9352E3800F568E, CCD63A0D20D0FD385EB720B2D60D20EF - 18: 88301B40FA8B84ECEE7238F17B08EC2A2DA3, AD10D120ABCCB67FD3F12C8D8BD216F7 - 19: CCD0F8187B7455274D80A2387599617582B7C5, 3DAA6952A9AA160863E4F489AF04C6A5 - 20: CB955D3B6044F1712DEDC65451E46B8D9FBE5067, D46FEEFA0A0069115F262877050265E9 - 21: 373B8AD20672BEADE5B742C72306455549B26DB631, 16DC5FE5C7C0D5478FF67AD00463AEF1 - 22: CAB49183077EB4DF3BFBF7FE026BCA8311A6BC067EDB, 8F4497F253167AB81A70A05218734C1F - 23: C2F860DA7EC7801FE30FF8C362EFA11E9392E029E24407, 1612D514BF9F365EB0E5CA13E974670D - 24: F0084F22D7AE598FF5DFEF76CCC0728325BB5D3DF5467B2F, 1DE5CD767D2B731DE4C9B4E303A7E771 - 25: F5E907AC398B2C7BE124ACCAD1FEB001BC3EC7C77C21E94110, D8C7D50EFB0CCE2926DA9E796EA46E17 - 26: D65A41B86D24C573D21EE416F2F853E8FF7A0788120102E8BABB, 3EEDB65BCF0E32C24B797D972913F943 - 27: 3B39B9994248DD1FB3EFD68820D19E8436F66FF0E6D82F40E50AFF, 7892720F9AA0ABC34E05FD982396C13A - 28: 9B924A2F620E5160B8F6C8DD313F39D6DC22B7E0596C8D0BFCA14907, E417D1FE5569975E8698C4D80684A613 - 29: 01068AA5F6FBFFDE1A8290CB315426F8CFD2438C09FD5982BE45EB21CC, A7DB568F037E8A4DB2D73CB2DF2BABA4 - 30: D39210874C4B7BEB63966BDC89AC7279B67C118618E9C44C1C563A10F74B, FB64939029B8E5DC1318EBE3FDAFC9F6 - 31: 8338B7BCA36C104C4B7EEBFF582FEAF879894FD6F00434859AD94E644BEC60, 93DECCE7AD61E69A2BD6621FEE2953D9 - 32: 21DC38BE252ECCA74963965660C98B5D9B5C2411945D8AAF9EF93732748A6162, 2BBE555F1D3C94BC6F1665A6DEDB536C - -EAX-kasumi (16 byte key) - 0: , 9E0C41B26B960E81 - 1: 03, 26B904336B9E0BDA - 2: 9EB8, 18E90B52DB587A8B - 3: F8E4F4, 9842D0A42ACC7717 - 4: B5688382, 2134820AF25CFFF5 - 5: 582E9402B2, 9C0F60D5B2D4BEA8 - 6: 836A3CEA4965, 6EB7565E0FF7FFCA - 7: 00DD66F0AB54AE, 0CAFA81DFB52F835 - 8: F5824156469E77DA, 44AEED7DA55C7C2F - 9: FCED54C15FAE6EB601, 95D7A3592D5F3B0E - 10: 0630750CAF71D334562C, D8F7432F9AAEC624 - 11: 25E3C5FAFE86F59D30BEDE, 42E3F6C3B8F73F64 - 12: B98480D54E604E4CFB988EFB, 2BCA65A62CE3E363 - 13: F07F1F98A2411749EA11FD87F2, EC7C07D37B7CC07C - 14: 19A6D648AD698ADED0AF37001479, F88417372E600717 - 15: 17CE88FC64ED98233BBAB20AA4DA45, 4959410987AE317B - 16: 61EE83703D8CA5D652F8E1E83C86D58F, 57EC73A828C20B68 - -EAX-multi2 (40 byte key) - 0: , E3EB492A2A560816 - 1: C6, E0A176A66E269255 - 2: 1D00, 472E25EF8B4ED450 - 3: 1DFE5A, BEDB3404162C7122 - 4: 915B77D4, BABBB74A3EE61755 - 5: 3C966136E8, 603664C04EF42178 - 6: E4A4925C9F75, 41B77B32F28613DB - 7: 365BC4FEF0B1B0, BB09E42F396F3832 - 8: FFCE6DA57D7FE9D1, C11BA7A7B580032C - 9: 0413506EE42819574C, 9B5C6A8111BE7B29 - 10: 531319C06A4B68AE226C, 77BC1DF09414D212 - 11: 85C0454EB3B9CDEDD32EF9, 39576F2268A59EF6 - 12: 8FB1732015FD006D2FFA8D9C, F8F51511ECA4E0A7 - 13: 1654F11C940FCBA529D2384A0D, 871B4541612C7CCE - 14: F119DC9F998D92B4C45185CFA2D1, B50D3A61F3CE76B0 - 15: 05B051F7DA81609FAC41BF0A19C45A, DF1265F3F69625F5 - 16: A313136E4E7F1314E7ED504B48324047, A9D1C5527D6EF7D7 - -EAX-camellia (16 byte key) - 0: , 9E8CDB7237166EF9FD0605A0AD3E4070 - 1: 8A, 23F462AC7E22EB9078DAC34CB1CFFB08 - 2: EC9D, EBA9E2E3112C18CC2991FFF97EF77E6F - 3: D2A9CF, 913472F45F6D6B087D8AEB34B0FF9494 - 4: 360A7ECC, 6382103D53AB8C9263977AFB1A96AAC4 - 5: 80B52AAFE6, F855787CD6CCA56CD656A0DBC663CAD1 - 6: 0915D546F5F0, EBE17981CAB5D59E6376CFE30DE66936 - 7: 086B525B082B71, 182D76F2DE42F5D0AC252F25E7BC34CA - 8: 438DA1E9E78B9D2E, 36BA12456C3AC5ED3A0BDF851A651E82 - 9: 0F9C9890152D6AD5EC, 06F3A96F40D794552CA799006E76AE7A - 10: 7754241DCD040CC449EB, B576881B5E542A73717A6AC24E516079 - 11: BB536F70C1111BFAC4D149, DDC6043F2B5DF96418799DD13BD04726 - 12: 4B530B4F67376C4B7EC1CB29, 43A36C14092F19F168ADF0FD9F557424 - 13: 55D5D285DC88451148C7B2B143, 7C2CB43BD19808EB90F045E6D6EB70D0 - 14: B321948117659CB06E6B364D00A7, 1B30A37234E3A13A335EFE6A07B070DC - 15: BDCCAC5E956953E6D5C43D9436D453, 98F924C659F4112B1D9DAFFF711FB2F6 - 16: E0A2F28186D79A9494700E5A30351542, C604F7F47C3F18F236DDB289D287BE91 - 17: 750D6EF87E1C9E1023920D3F355B2BEED8, 96FEEAC4DA36FD36129F67C3EADA75EF - 18: E7F91687119D70793B9BB0114C7B588D32F0, A75052978F26EE6FE5D802BD4C06004D - 19: 56D7420981DC556AE0137DB0F1BD1CEC0BC945, CC024D30F19EAA3CDF66E51246FC3225 - 20: F2D61A0E214472663F5F41C9D66EDEEC2F7C824A, 9706F273AF680AE2537D02BE41A2C980 - 21: 30F76A83CF8010DF0F49F73C06435E0C5D85EDC6E3, 1F18354A73BF506D229369836855EFD5 - 22: DB9688FB58EB83AF06A579CE56FBC75D93412790924C, C9DD5350751CFF0AB1A8910AC1898E08 - 23: CBD64BAB16852F40FB00D9FEEF5365C773CA14B77EF5E2, D6A02105B1BD018A5BCF47A69803248D - 24: BDCE2AA8092D4790041750DC922F2D6AA12DB3F41A547C7E, 3DF09D758306DAE21C3AAAB3FC51623E - 25: FDFF0AFA4D94CB3019AB27234259ED225B1B3B0F2BDC32CDD0, D64E69725D638D9F0F90C44C6BF51722 - 26: A9D2CC4F7FB98D54A78293C64C2A41CA19CC1F7B9970F3437AE9, BDFC6B10DD012BA057CCCD40AE14569B - 27: 81FE813C4A6A47D34F146DD943092940ECEA77F85339A219B6134D, 5F44590AE8CDF89E13AE2BE4D32AB7DB - 28: F618779FC6E6F5B7EE3FB4E937097E6A122B979E3DF837F72A8FA3B9, 00F0A3B4C67F68590AAA0BEF2D399D1F - 29: 0A8AB66D218268C9181DB8C6EF542AA4B42E53E4623E3385723024CC3A, F28D7D86317D2F509561DD3392F3EF3C - 30: 9CD50C94ED5391BED5C8CE2A07F8955744B275B6C5E5B6F453A5E6185C03, 048E889FF70729C55582003ED6169E0C - 31: 1CFD6D8EF6F44265703544AFEB2BBA2A067BE8DAB412E071B66B70E357238A, 0A5BB055E00D42F4291CAB3813FC2946 - 32: 8E6E6433E4FF879155E0612F17EFC00AA8D5236EFAB5D9D6A912898F3124B588, EDF81BB73FF9288F315B988413432823 - -EAX-idea (16 byte key) - 0: , 1EA089EEF0584537 - 1: 64, E2DAD93E481FF4CA - 2: AF89, 1C59390B95864F2B - 3: 967B36, 9B17DDF2DDE56ACF - 4: 1466E27D, 3F4682ED320CCB0A - 5: 2D36047872, 6A654C4B4D125951 - 6: C765097A4A83, 56C1A3EA50AD6EBF - 7: 0D1D54E316B557, D400C71220491CD6 - 8: C0749FCDC4777FDB, 5A528132145ECBB4 - 9: 77FAF1DCA9F9D9743E, 9751D64F46B0E936 - 10: B1620900348AF0A28327, 23965D98E04157A0 - 11: 95DADF663B30F50719C15B, CD063ACF7A4E5AA0 - 12: D9E5D2558521BA6482D3A1DC, D823D92F16306198 - 13: 50AC1D9A7BB5C01F5795B569EB, 8EBE9364D8BA009F - 14: C86F400959559607A228D47F2312, A89392C46483F839 - 15: 7F2F87C5A4DD93A73A1F83FE0D3066, 3B9CFCB7B4C90CAB - 16: 22A2BC3531E9FBCAAEB678B419227CE4, A38C34F31BAFA2EA - -EAX-serpent (16 byte key) - 0: , 97A6952931A6CDA57BCC4716D30F82A1 - 1: 96, 7C2A3B5E78FD8E51D8EFA5B18704EABF - 2: DA43, FC534F23581A3A767EA2EDF709B5AF64 - 3: 6712DB, 7DBB01EBC12F5DDEF4EA73AFB9333F87 - 4: 26AA0D44, 0811A8CBB5C44104BD9EFF485A847DB5 - 5: 3536F9E911, 1A28F0F4140C1EA11433897919C6865C - 6: 6FE844A82588, 2AEB14AAEC834F069E4FF8EB58C84D53 - 7: 9845B4C2DE5C80, ADE2938A7195AA6F3D5311436DDA7AF9 - 8: BFCFFDBADE812BB1, 86379A0BD9D056C7B8DD13A7A344E0D2 - 9: AE58D2CEF3546BE633, 7D9AF596AAEB3E64B4DD6548C1EF7C5A - 10: BE55A4240519306EC22E, 9D8932C3DAD8F64366F7280D1FF15B57 - 11: 7D22DF89DE40EDBB5A2CD0, 8D1A5E14933F430D171473E79AFAC748 - 12: 723E2E279953930DDBF6FB7E, 64F83827882916B8CAEDE297B7CE5E5B - 13: 978AEFC3F017FBAEAA71F66E95, 14B825061B7268BD58D0386212CCB2B6 - 14: E81D5B4A5D124329B35E3542E637, F689AF556D208DBB524025A2AEBA3B54 - 15: 1DF96C551C75E13FCF077D25314779, 733E93DDC99CE73220336C75E0B0FF13 - 16: 631EC21D6892E8CD3BA4894AF357602E, 294DCD6EBC59FE575AFD89356E792C92 - 17: B5EBF5378580BE3BBC1507B2667189BE61, 84AF67D9154C9938660BF8B797878A05 - 18: B4FD794C8616540EC9BA129AF21A9F0BA768, D6C65005C772005488CAE0EBB75D6A43 - 19: E607A3F3612D084E187F4E5A1506CB85E5F456, B9AB2A96B877A5DB507F676A3E5820BC - 20: 545E4AC37DFC52F7BD113DC2150BA08E3C865039, B1F3E0969DC54CB2A1BAACA190365FCF - 21: 65A85C4ED7495E93FCF8EB77C71E6DB3AEB97849B1, 279646B82D6B10944A7FAFFBF62B726D - 22: 13650C731A41A257274DA26139C6E1C0D4E0A9302A7F, 4F29AACBACB496E5C30715E4FD6700F4 - 23: ED9DBDF146A4C2F0FBB0ED17EE8D5155EA2D208A8E8CFA, 20F1E5754C15CA7EBAACBD8673C8BC09 - 24: 5BA09045237D8DD1D71C8E88611A61D24F16F5813D42ADCF, C5DFF900DC89989E30EC3466B1E807C9 - 25: 86BB29486407CA1E3D060D67136394FB7A1161F85028FDC632, F2376DA28876CC987434CE7311992FB4 - 26: 3BD15D58DBC6B050B4ACCC6278F912ECA2E4E3BD86B20041B62E, 6A4786A05D146DFAF8868C511CD63C6C - 27: 6A4A427F65A0B6C95E6192FF8F53A4F2810D83015298AD6EBE9A8F, 97DA45CC64772B2041649AFB529C0469 - 28: 0167FC2B17965AB0D38592796D5CD41D3AC6C7D36EC97A92D4CD38E6, 297C86CCBDE5E7692AB5E4CBA9C7068D - 29: 8FFA2B377A264C13DF09C80755543D0BEE76048DD10C405BFCF4318AD6, F64D9A18F677C48A2FE312D7D798C3AD - 30: 2BEF6C54A7D57D5DEA5A7A39CD2B201D18F1CA1941F8F9AE9A78F28CE533, 7F64BF8DD0962AC93642564249698777 - 31: EFD3F06A589F09A08D00A70F2235D64E54ED7E213F4D39191586087AC20833, 9035327451DBC7F9E9A49FF83B704C97 - 32: 1DFDE8719F4FC7C235A1BB9862E1E6E132EC0C77EFEC71FD7E48C6B000C14291, 0CD8517E1B79FCA166F9D7CA1FB6336F - -EAX-tea (16 byte key) - 0: , F31507FD2F9DE170 - 1: 5E, 883F01F57C0A3752 - 2: 4656, DC2F8425AA00F7D4 - 3: 86DA0A, CC9CDE3472FA2840 - 4: 73375083, 276F06F48DA9CFD2 - 5: FCF867064C, 7DB9052193E77F3F - 6: D2F367F6EFEB, AB05FE3267FF2C0F - 7: DE33A9E128D6DE, 648884C97F036DB6 - 8: C5DEC03A2D1C32AB, 1835E8C6266BFA24 - 9: A09153B81B609A7FE2, EA1DAA9BE8F39403 - 10: AAA1741EE38A70A37B8B, 63B53E90B1D1B390 - 11: 829932D95C1E7F343703FF, 6CAFE57B55A67598 - 12: A04008ECEF2762153B06DE85, 5B4FADA65B67BE59 - 13: A0881EA826A8072E45ABB7AE4C, 426BC1450AAFEF4F - 14: A25B5A049A3DE803C09C6208DB91, 1C12BE6131CDFFA5 - 15: 457B9E88FD12B1D508D545A5EF74C2, 7A03467F15043DBF - 16: BFF0EF485331FAC285BE3B9DFEA372CE, FE06E955E5EE5930 - -EAX-aria (16 byte key) - 0: , F185A77011AE5FF024BE604518A1EAFF - 1: 4F, 5A4D972501DB2B9D9A2AA17FFA517B36 - 2: 1449, 2DDBD36696DDACD6799F3E1BECCD48EB - 3: B649C4, FA5D60EEE2F5C0AD5179523742E87B1C - 4: 91C1FDCD, D283F0C8DFE4A97A52914A02F7E35B33 - 5: 0D15000B03, 4268C8904D50BF94BBEAC6BDA6EC1CCE - 6: 900A3FD2538D, FE52AA79D98E9A43F9D1F9E29A331809 - 7: 839ECAD087A1B6, 742062F8759A6DC74D58C8C61F862B56 - 8: FB302E87C1B96FCB, 5B79570CD6AC1A1EBFA376C4798095AD - 9: 5FF3A012C633B4CC6A, 7C054B1C6EE751885630B2A92FAF6BE9 - 10: 87A3A7283E9B40C141CD, 00912C6719BA32CE8269C1008144DF31 - 11: AB9CB957617E783B2B02F6, 07B4C5BB517551897F32FF55ACA053CD - 12: 2957DECEE9C214F6DE046479, 19451013D0C44F97EE1078E83B8D611B - 13: 322D7DCAF0E8F41065EA9FD797, B715D9BC1BFEFFAAC7C2891A25047668 - 14: 318FD07CAEC7D0D1223EA2ECF242, 4E94AB2B44E9B63C6AF0ACC68676A110 - 15: 8C9E0AF8A5120D8A86775D50CE06A4, 3C5C9579C468CA971835F7CD580EC9E8 - 16: ED1C246F9C3FBA08830A87E757F908EA, 3EA59A00880A61FB18971E3D78A4F426 - 17: 97F0DDAA0CFF8F1361823CAFC1D0CC0063, 9C11F8332CCF5D317341E052B628B6B5 - 18: 96CD5793C6A3816A7986316F1642E0748FD1, 4F4D3581476BE7D5316D6DAB4A7C7B0B - 19: 586564B8AAF406D003223E93935F8D0011D27B, 25684388BBD30917774669B445428102 - 20: 638EB00875761A0F4CF276D200D8F2F2BCB75AEC, B8061E7B837698EF855528AE6D899103 - 21: C9E438B63857D7FDFA858889FE4A755BB000348159, 482A9551C6A40BC4F88A9689BFDAE457 - 22: A905C47F063FA0BFE5794F56C71D4E1A34B9006F9C39, 446FE158D13D9866EDFBE051BEF2F994 - 23: DB118B2A3C8BF87085269CC3F0874C20F075B1D7E49BB9, D0A5126BD8BB4B1EEAA4EA250FA2D1B4 - 24: 6E3969111903437FD3A666B30F24782C21340180331441AE, 754A5F33307702AC9BA5455864130FA8 - 25: D625A2045CA6557ACAF4D68A8D77E09458263D7EF053AA85F2, AB2512561CE643A27CB8783E845A48AD - 26: 56AAF078D444A78566B5032D725D252BD62499DE196BEAB9CBEB, E5DC34D84457B1E6ED6C94D5B317C280 - 27: C45902F58AAE867AEA2A04AA440AFA61803D08D59FFA15640EEB41, B1D00ED9B3F2471FC643E74FCEC1CF31 - 28: 64F13A8599F9297BC84686FA0033F20827AF27C55186495F66BFE25D, 6A3BB6A711CBBF0BA8AFA355A53A355F - 29: 376A701BF469B9CF2C52BCAF9FEDD93C4258EBC4368926D2462F177160, F2246D580085A981373B9C07A57CBD6E - 30: 2A90205AA92CDC87893A31A2DE1B4A334C62A3646CB218137F970AC602BA, C50403F076F38EFAF68BB2D4872035A3 - 31: 9989A35D07A20179A5BDCA2ECBC09F16593B1CB0B6BC66CD10755B44EEF3CF, F59F46552C0350941809788D067F1B5C - 32: 0564682D16FE78CC5A93438E1662B2852A530F86B3DEF1D424B6A44FE04E4D67, DE7265B9740611937190B77EFCA574F7 - diff --git a/notes/ecc_tv.txt b/notes/ecc_tv.txt deleted file mode 100644 index da83e0ee..00000000 --- a/notes/ecc_tv.txt +++ /dev/null @@ -1,5511 +0,0 @@ -ecc vectors. These are for kG for k=1,3,9,27,...,3**n until k > order of the curve outputs are triplets - -1.3.132.0.6 -1, 9487239995A5EE76B55F9C2F098, A89CE5AF8724C0A23E0E0FF77500 -3, CFC1E3447FC33E5C2A7D2BF71298, 5BD6AC32F0A9E7AAB6AF722C3CB7 -9, 3F37CF870B918CD41EE58F58DF14, CEC3FA5A53FF5A372B583CE40F20 -1B, D5E45D28A47A0819F3AA3018E58, B05DB66559FB78876CF830A6ADB4 -51, 869FEFA6DE5F619CA54CA719554B, BB93E27BBC3FAD016BC369766F4A -F3, BF1784B857F668E9459714D80D75, BEE55B564CB923C7018E855A2E05 -2D9, 27067CAB2BC8C9201B1E8F1D54FE, 4A9BCE40D87B0C82EA66D645C931 -88B, 4E9974D7B890442760FE4D05FB8E, 96BF4DDF0043AB6AB78E373DF010 -19A1, 6CCE9122C482A8EDC2DE37142043, BC64E1D358F7293FC9B0C2B81D3A -4CE3, 48268EA8193D8BD0308108411368, 127A6D8E01399DD3F654F713B5AB -E6A9, 46154FB1028BFD86CB29749C1E4C, C4FAD064CA84566739451DC6DEF -2B3FB, 11F16DF4A122B5C99B897921688D, C2CE146C26BB79F7CEA74A40665A -81BF1, 86023D4E9A40252B9943323AC6C2, 98BC7CFD540529771336414B0240 -1853D3, 9FFAADE7C13872809428B28FFEF1, A3383F446BEBF57C93213A70B155 -48FB79, B16EE42EDA484E3E32BFCD300A56, 8D0FEEE47DAAACAA9D8BCF69D2FF -DAF26B, A5B330E8EA36077522FE1C6FB7C3, 88A84BB806A6F5A4BFF3E551AF00 -290D741, 3C586EF3F731E651CA6002C7332F, D059BC68D7BDBD36CFC989CF7BF0 -7B285C3, C2C91FA9E776ED3BA285AB5E107A, C93F41A8A39B2BACBE05E1F93428 -17179149, 354AA3FE191A506359EFE3B9EBC0, 7BEDBBEDEC768086086C474FE9DC -4546B3DB, B0C34C7B4EC509BA7D128D7B880F, D176BF07B375EBE808FB57863382 -CFD41B91, 6752AE66F3D3302EDE020EF64CF5, 7ABCCC45227CE3FBA57F036E5180 -26F7C52B3, C292C0F2205C7DD85C160500C39F, 44704F5CE0FA803B44BA85BD4D26 -74E74F819, 560A5FD4CBEB26EF2C4A81C3AB99, 9A685B6C7F8BD203764B64980068 -15EB5EE84B, BFEC2498A5C662D7CE0EC0795D86, 81EFC44FFFBA1FE5C10EA50E805B -41C21CB8E1, 3EA8636EF746B6A7D42DA2E631DD, D23DB097D9F656B902E5BCAE5923 -C546562AA3, 1189BF2ED2A10F7312F0DC6AC131, 67ACBE20F636DD4B5B342A3C76B9 -24FD3027FE9, 288B4BBDC29EA71196301B8AFE99, 873196BCFCCAED2E2233525917E0 -6EF79077FBB, C89009F3E7A92102202082A4BE35, 84DA334BD6DF4847B23A2204BA5E -14CE6B167F31, 1C3C9F6D15A9B366431579FB48CF, 9AFB81BE81FA8D1A6D067D7CC28 -3E6B41437D93, D96F30DEFAE1F3445067E1BC5126, 5F94C2A388F7F4E7EC9B783DB0CC -BB41C3CA78B9, 5E85D2777031FE74B02214A898E9, 56BDEB0542BC36CC3F6A269667EC -231C54B5F6A2B, 150A2E2416E3AC315569A3820D92, 4DF8FC1F8ACD06B742E611626199 -6954FE21E3E81, 541D5FCCFC84A2C05E8A0145BFC2, 28BFDB73DCF4206857D022AF52FC -13BFEFA65ABB83, A990A2BC3B113A648B9E00D8E750, 3DEB9F5B4AA6913CAB843B8F2BB2 -3B3FCEF3103289, 9A0FC99B826CC66625274DF01B38, A0570619D2047C864B90C0513575 -B1BF6CD930979B, 3BABB8E3761B38E004DB334E568D, 169B474A41D6D0605A39D45C0CE7 -2153E468B91C6D1, B12E873F58C89718B6DD46DA6C05, BDC3684AD8177FFF90861DEF3497 -63FBAD3A2B55473, 6B9B195EA91798FDFEABACC415B7, 40A0693CFF52DE53819A9704DCA8 -12BF307AE81FFD59, 8A0AB24E8E9795B8482FA478A71E, BCC991821FFB5738E066733633F3 -383D9170B85FF80B, 730E403E64D699C16FACD6738B21, 919761D719C12BD2BF229193746A -A8B8B452291FE821, 3333B47B85D23C6D8300F5229461, 48D6FECEA3083B9D31EC469C6B43 -1FA2A1CF67B5FB863, C3F5AE461252F5B26EBC9DF1B5FA, 16DA58A6C565708C13823D1B2E58 -5EE7E56E3721F2929, 6BAEED3E90E849B001207107F7B8, 5E1C7B8EB4B3E367A4CEAF4B73C6 -11CB7B04AA565D7B7B, 3385AC6BBD490AFF201532286DBF, 7B027BFF07B56FDE6F0BCB37752A -3562710DFF03187271, 8146FD74592B1145492D39680AD8, 508AA9E106E7958CF011D8AA71E9 -A0275329FD09495753, B0FE244CAEED9FAEC678BD22CCD2, C97B3257468A23C4F6E883737FBB -1E075F97DF71BDC05F9, 605DCAFF23DDF804CB1CE4FD847D, 68684076591F042B98CDF14148F0 -5A161EC79E5539411EB, B65AA0ACF8A9C8E99A3F64930DF1, 34613D915630023826CAE908918C -10E425C56DAFFABC35C1, 16CFD49EE4D4850F1689FAB0041C, B50DD3663AFA67A306702BB0582E -32AC7150490FF034A143, 4E0EBC80756B99D91663DB7EE498, 6A22D944B1BAECE8B2EAD6AF3F3E -980553F0DB2FD09DE3C9, 603221615965C9EC9E587C34303D, DCB1EE7A0C41E65C08CA8D78983 -1C80FFBD2918F71D9AB5B, AB82F4270F8C35C774344595F48B, 3B4007030E1D65C6F8544508F5F8 -5582FF377B4AE558D0211, BAADF5F7E998465DBFEC5A7A4847, 1282C981EA4D0B8E7C77DE905D5B -10088FDA671E0B00A70633, 6D60A5CD3CA86F79C566F81AE66C, 22587D260CD8D45DAD2E5CE9C2EB -3019AF8F355A2101F51299, 6805F4FC0B350109728B3F56BC41, 63A9870300ED7D0852DA7163A9CC -904D0EADA00E6305DF37CB, 183156FCD56D11B82CE4B689323E, AB6145C5F793442B022B76251767 -1B0E72C08E02B29119DA761, CD59AC87B06C5D8B1EEB8C59B29A, C956728D4A8CF105F2F15B7F128A -512B5841AA0817B34D8F623, 90AA398DA812A180FE8F6C8CCC41, 9EB2C705EC011EC23345E6148DF3 -F38208C4FE184719E8AE269, 2198735C806266C1C47C8AC08161, 5FD1A06C68BE0F8D08A8EE9A2C4E -2DA861A4EFA48D54DBA0A73B, 2F7E0DFD695A6FB3085C4F3E8C91, A51B8EC5C0C1989073E756666E03 -88F924EECEEDA7FE92E1F5B1, 782D992A0601EF4DAFF89C133151, D52680F34F0E03B54F76E4F49F52 -19AEB6ECC6CC8F7FBB8A5E113, BB4C8DC0FE6FD008C8177F0D0C01, 57574AAB071C6338598333210100 -4D0C24C65465AE7F329F1A339, A12F5BBFD3757AD57EBF19FA89AC, B5F12289CFBED9161324EA137009 -E7246E52FD310B7D97DD4E9AB, 6FB82F9A01630129D70A2855DFFB, 32E0E55F5B39C0FD6042126860EA -2B56D4AF8F7932278C797EBD01, 37F034607B71FD0BE1F85ACB818E, 34CC63FF7DC6E54494BE65F82BD8 -82047E0EAE6B9676A56C7C3703, 920ADE8D3AAF24783082AF163FA1, 13A02EC88C9AF237467FAECF980D -1860D7A2C0B42C363F04574A509, D2790CFD605F2D322D213092A58A, 1BD7AF8E6F3710909B7D400F3B51 -492286E8421C84A2BD0D05DEF1B, 7F5E570FE30F7211AF05E245C3FC, 7EED46F891C350470AB27A1CD0F9 -DB6794B8C6558DE83727119CD51, 7541506150DBB1D4C44CBBD8E025, C83F59D03595F97F6FAD1EF00D77 -29236BE2A5300A9B8A57534D67F3, CA36DD2689FC281999437CC412E2, 577E04E806003AAC5A4E27D496B5 -7B6A43A7EF901FD29F05F9E837D9, BA57BDF8F748B946F34F0CE6BA64, 6B9B5A5A98D4D1F0BBA56489B259 -1.3.132.0.7 -1, 4BA30AB5E892B4E1649DD0928643, ADCD46F5882E3747DEF36E956E97 -3, 2460E4660D50E2991A2EB14B651, 7B40184A9E57AA0B667E2EDB937C -9, C757CA0E0B97AC1AC3767D626A41, 8E4FC7670105AF602971706064A -1B, 23DFB7F18DBE0608DB17D030BDB1, 9A25F67AB3AB3639C076E8D30D50 -51, FDFCF33E6BC11D97ADE54F1F8C, 3A37AC069618758FD5575DAB52EF -F3, 3254CAD88A7C802398A54B1B3206, 4CA71EB30B530A8E59A80F9D08E1 -2D9, 8CB6EDDD24FA31FD753E7B34CC92, C3158F9BA92438FC6FDC6662CE8A -88B, 35F47BD8BD1A121F325189F3AAF2, 7CDD5010F79B83424128746E29CE -19A1, C0965DD5EA7BCE0A7376004D1D54, 7CD4341B01BF825DC2BEDA0F82BD -4CE3, BA3F2CC26665AD335EA2D955E6AC, 6DB89C523E0732201EE3C088B98A -E6A9, 9C70FECBA6F4211234D30C42A2DF, 88279A96C31A7296E75B781E1079 -2B3FB, C6FA76D5D61260CE22D35BE8C09C, 6E1788E96739A7A9181CEA5D160A -81BF1, 2AB1FE15E611C80C2AB53EB3A0BF, 1A88422244C1C9AE9334EEC07C28 -1853D3, 91A7502C6B46BDB4F73A61F46318, A6F2FC0781A644894C7ACF1CCADA -48FB79, 92DC94CBE6B82F2135219C646A8D, 54B5618C9D7CB8A930E3D26DC3CE -DAF26B, 1ABE512B3E5BC91EA4874778491, 291813757A1C4E8DDB0F297F0716 -290D741, 9E5A612D9A1D2D2C7C79BC671925, 4BEC20AA0A52F6DDC38A56A6CDB4 -7B285C3, 6E05210074480237F2365347056A, 69536229394470F1B9F3A61A6CE1 -17179149, AC202FBB4BC57FE132B012FC1DC0, 3A2225F434A52ACC7F237D25DC04 -4546B3DB, 75B076A7D684C728F2D5D217A2A6, 51951B6C56D8332ED0894C6C63A2 -CFD41B91, 7670AC37AA58AE5E65917F1A27D3, C92E8E6477B1BF4C2842C573570F -26F7C52B3, 4BA093DAACC0759E52C357FB2C33, 853BC25C76808FD211CD76056A8 -74E74F819, 5CE5000D83D4AC37C44018153ABB, 243F470F990874FD4E7387BB47ED -15EB5EE84B, 6EA7B2221B02523DF354EF1092F8, 50891935A326E6D5336E8AD96914 -41C21CB8E1, 54A5860805DEEF05B5CABDB14321, 1BA6D2EB742EBF24E79E7E3655AB -C546562AA3, 10DB27222729F6E8CEC71EF99201, 4E65F5CACD48D81E487C65FA0365 -24FD3027FE9, B4FB19346FEC5580C387CFBFB50F, B956A3C42E6BAEBFD0D39F5AD18A -6EF79077FBB, CD9CFDFE316896B2CA52A08D754F, 4635E87E6F9241286F7D5F17FAD2 -14CE6B167F31, B2992BD8861C073C4F917EC7C337, 715BC483E2C1D9454DEA0E4D860B -3E6B41437D93, BE92B113A8918C69618FFA0565CE, 70EFE72312CFA68ADF5E914C1A5C -BB41C3CA78B9, AF46F30DB7969EE65B460E596897, 32D0F80F32E7C11A42C9C485A4F6 -231C54B5F6A2B, 7B73CE5B930BA725607798E0744D, 16A95CFCD69067184F486B2510F0 -6954FE21E3E81, 92E4B00F6CBC5853334511EF4A61, 9C698DA9B598E6284FA6A3D11A62 -13BFEFA65ABB83, 831749B85F732B48DF557C9BE461, 1332B9500E382F9D61E26704B474 -3B3FCEF3103289, A86E16CB33C499C7F4C1F56EEA7E, 1E7089164528169DB6BEE36EAEA0 -B1BF6CD930979B, 81F05B177E59BC532C76323797B1, 84479AD7CF25F5032F0ECE6309 -2153E468B91C6D1, CBDE2FFFFA4F931B09C9842EBE47, 2D0D86769BEBFA57FEBBEF536012 -63FBAD3A2B55473, D41A91A1E2190E75B8AC3BB7E3F, 655919928A6C94FDD20E482450B8 -12BF307AE81FFD59, 2A63AC25CA707CCEE9840B69788, 90B15B4B3A1445479EDC119C3F2B -383D9170B85FF80B, 70DF0C2D8991534685DE563B4295, 221D026CB3FF8C8EB456484F8CD6 -A8B8B452291FE821, FCA980B613D55BE705823F4B1A, 6BCEA67A519A7174980FB2A07629 -1FA2A1CF67B5FB863, 9F6B0554DBEC91073D2A79564D08, 8B14BBD7B716A4D5CF05C4C8ABBA -5EE7E56E3721F2929, BE505ED847040875AAF73A8670D7, 6FD4C4B538C6D942C9743C763932 -11CB7B04AA565D7B7B, D1953D214E93682F706B5B84773, BD88D61E1440265BF173AD2E8569 -3562710DFF03187271, 687D19E2F7AD7227E7DFC8A6BDE3, 492406B8679BA66E6D21AF633CBA -A0275329FD09495753, 9EDB14A3D79EBC4B9957F15C020, 75E865ABDADBF4F2953A00EFD4CD -1E075F97DF71BDC05F9, 5D393B1BC713EF9568E8666A021D, 408BD844B66F53DEED2B8726739F -5A161EC79E5539411EB, 315CD2D819EA32C8561E3CD7BCF1, 4D683FCD622D33A78103CDE80BBB -10E425C56DAFFABC35C1, 4E28D9FE8EDD24B43ED9AA6B7CEE, A8D87B0A38F87D59BE530187D601 -32AC7150490FF034A143, 299158EF18C0C041EEFDBB9E4494, CBA501ED0DDD3F9FFF8EC74C8950 -980553F0DB2FD09DE3C9, 309578096C757AFFE2BBB412EC5D, 4993090F4742235DBA2120956C1D -1C80FFBD2918F71D9AB5B, 7897793758EEB5468B762CA199AA, 7FD9E378BFC57E935326F5E26380 -5582FF377B4AE558D0211, 25D254F2D8A148A655936EB8C665, BB358454A0FC5764F5715DF52524 -10088FDA671E0B00A70633, 31F9FCAE03963D7C78FC1DE8D832, 99B292CCB05003C1BBE5C6D1EB89 -3019AF8F355A2101F51299, 3355364A7A04D4E7F1B29790C062, 79A7DA31AD6E5E852DA5F512F6DE -904D0EADA00E6305DF37CB, AC5FE3E3C6BF6F2828D80C4602A4, 35B8974B9F164EDACA0D3A41E9C3 -1B0E72C08E02B29119DA761, 8E290DEAB3B4BA792D256C40768F, 41A214C760766A8F8B9558466BBA -512B5841AA0817B34D8F623, 3C6A5680CCEF735A09EF86A4BED8, 91C6FD100A23E39C940665405B1E -F38208C4FE184719E8AE269, 944C73A570DAAE091B5068D1E7D3, 22718CC3A221FFCFF04DA4AB7069 -2DA861A4EFA48D54DBA0A73B, 9634C9B0E336CCE8E4B0080E0AE2, AC82B14D964173F738E61CE10969 -88F924EECEEDA7FE92E1F5B1, 7B33211FD0B839C91FE3DF87C2F6, 92213D05E10CF5D14A857E9885EC -19AEB6ECC6CC8F7FBB8A5E113, C3CB8F04AD9A20A5698F2AA89AEF, 66A156EB20B36F90D96C758C1C11 -4D0C24C65465AE7F329F1A339, 3B12B7F7FA68EA14F404E9653287, 13C0229BA76559F18519A132119F -E7246E52FD310B7D97DD4E9AB, D09BA6F1C21D1E66861E02279648, D802DB81270FD587BE5F5ABEE170 -2B56D4AF8F7932278C797EBD01, AEB2FB5BB7FD190CAB0D415AE84C, 9CB9371F146F612F971BC9FF0520 -82047E0EAE6B9676A56C7C3703, 1CA8F0CFD6262A6898FBB63B5318, 38D1CE4A5BE1953DE09C6135FB84 -1860D7A2C0B42C363F04574A509, 76D056A0774DCCB434B18C67BB87, 7506033BA038A5C9ABF627BA3112 -492286E8421C84A2BD0D05DEF1B, B7DE99C602ADDCFB11BA0712CB7E, 9BEAEB84BD618BADCF6147582A26 -DB6794B8C6558DE83727119CD51, 5EBAA803ED31429AFF1EEE08FE2B, 2E229189386B53839FF70FA49BCB -29236BE2A5300A9B8A57534D67F3, 261CA4C5ADB2A21EEC0E35E3E451, 521565A441082FAD05C4EF7A35AE -1.3.132.0.28 -1, 161FF7528B899B2D0C28607CA52C5B86, CF5AC8395BAFEB13C02DA292DDED7A83 -3, AD632F542942F23AA423B628A304B3B, 7AA67EE421C4E78851E4B4679BCDC41F -9, C732AE957882F6ADEEF94EF4FDFDB5A, 5F832D3A461B9BE0DAB9B6EFBDAAC16A -1B, C3E7FAA2B004CC66DD779D4D4CCC92A3, 898A5F77130726447D7C6A9FF7BB55CA -51, 882E79BE6E2A92F17FCC14EA8F4A004E, 81EFEB830764DE30840441087E0269A7 -F3, FC8786E47911BEB448FC8614FF44F929, 5FE26C7837CAC0E72CC392ABC915BBE9 -2D9, EB3002AF9DE4BCAB7F00CE22E61E638B, BA9555616D61C3DF55F940D9BB9407E6 -88B, AA37332C95651AA27D6C14B1BDC4B9, E062A0B2F0CF02FD0859E2AD452E12CA -19A1, C5364D02273F5AE032FFE5C95BA33FB, 21359BF3D455E8E4FA1B6498CF03C667 -4CE3, 565406637B339CD9E514048D0C1B6669, 33657B7FAE1D43ACB8A52F5D7F0D46F5 -E6A9, F686D8593E675C596913DC20C39196AB, EC3DA164F561288B3BE727ABA99A5BA8 -2B3FB, CBB20B834591ED538A32B71DE5AA1694, 84CC322D35B760E1422B85AB39500CC6 -81BF1, 5768402750F948709BF083D3B43D7062, 7FCB8577F1466DD3B4ADDA5431E601C9 -1853D3, C63158FF3359CE48ABFCC553F4D372B9, B6F020B6798EFB8AAF545D1B9CA83214 -48FB79, C8B1549674C6B1BEEB462953869C1B89, 61EA95C1FBF57EED2FD7443E667D5EF8 -DAF26B, 93D97715A671D51D5901C41772EC79DE, CBC8994EAF9C478A08B6D2E6F95CA1E9 -290D741, 54C38EA59EDE54565FF3B44D0B805C51, 4DF1848B089AB3E49808DC6CFD682BC2 -7B285C3, C51B5FB02D8FF4095E1AFB276A4B7636, E4403921DF02292B81A41CAAD9E2A686 -17179149, 39AF1443D88EBAAFF645D16F7281728B, 79992D9CABB675B1A3067D7CB4C7D2 -4546B3DB, 4B549361136416D85AEB0ED0FCEB3288, 7F1DAD94D1A72737286A3032B6D15639 -CFD41B91, EC268299DEFC5CC003B593F8E9D9D496, F3744002B83FFFC6A545A7EAF0FEFF6A -26F7C52B3, 6710D002065B89EF2277E6CECA7DA7E6, AA5A24DCA5010A0A026F905D357CD35F -74E74F819, 909E50A61A9634AC70A1F36B5EEA62D6, 1EFA89A81D83CC9911CD5E9978878EED -15EB5EE84B, 76AD0DCDA97CE86AFA5578E05BE3EFC4, 7DAAD7E724AE5EB4B3C9D4D0FEB2D30E -41C21CB8E1, 58DB151CE74B0E1242065F332EBC50A2, 8E65CA6336413235C7C1AC14AE2A90C6 -C546562AA3, 8440EBD3BCB98DBD710835CDA523B048, 3B0DA47B14728C63811054EC0F81E8F2 -24FD3027FE9, CDD14651443254E413C608F12C61A7CC, 550272BFD6373BC4FC1831B37BD5ABE0 -6EF79077FBB, 4C192607510F362548461733029B3ED5, B7979006BE6A92F246D7A099F769D35F -14CE6B167F31, DEAB8C0525BF41F5C7B0CBD67C2AAB50, AEBC99F2E54D009E5E2C320F60CAEB7 -3E6B41437D93, 2FD0BB2280BC6C722FE5E80D12D195F, FCA37EAB062A9462C03CA98821509D09 -BB41C3CA78B9, 8A3D3FCCFD5BBFC94D16B9829527ECC8, 7B9FD0406FD2080B8AD0CD3E1783991F -231C54B5F6A2B, 3810114B6C1FE3C3ACD5522AC46AAF97, EC32DBEE521BAA4F82EF77E0619F5C18 -6954FE21E3E81, 405F7016C928A10BF66DA9B03044BB9F, D4698929696E3C37AC7AC9FBBFFA4472 -13BFEFA65ABB83, D67FE4FDD2ECDC8BABAF926A6781F95B, D1D6DC7CCD9136ED7F1A317C32CB21FE -3B3FCEF3103289, 19891D1CCCB0D82DC07E55D8AFD84043, F94A2B60F3612F2F93F089F4C7A7D651 -B1BF6CD930979B, 420D29204148F5C5AE3E01F851DA4999, CED9F97FFBBFD48DC47A73029CCDD177 -2153E468B91C6D1, DAACDE05B55CBF0390619094A2008488, 56EA7F89E84711803150BDB0421763E7 -63FBAD3A2B55473, 6E5E8684280C87E1C00AD9E3D61CDF6, 52874C99CB842257C0B0F379B8BAEC93 -12BF307AE81FFD59, 202E8278E8C3F2C1AF84F5A0F76F2385, 6844CC669644B1AB8EE0FDFD9EB957FB -383D9170B85FF80B, 1076688ADD5CAA1B9DF02110172F23A3, E42D03AE9241C34F9835B58086176E24 -A8B8B452291FE821, 44D019D2CCEAC749E03FED3C21604CFB, FCE1C2B98417DCA06124B3AE6BB791C0 -1FA2A1CF67B5FB863, 127A50F7AB7BEB412F93D71A5CF60EE3, B48160DDAD09C097CB759E77DA097FEC -5EE7E56E3721F2929, B039E3D5C41FCCF03D679CA633E467BB, FD56EF249B88F9F8E94B55531DD41DBA -11CB7B04AA565D7B7B, 604E6D877AEE8F5F9269C930C127D7D8, BE50FC8BE50F050B06110DF717825357 -3562710DFF03187271, E226E23826D762D6F35BC3B3BD3DB950, CFB94DB91B375BF813D12D85245388F7 -A0275329FD09495753, 83501B5274973F7AAC7E3F79952B13EE, C990598F4525E33B280624A451CCAEA4 -1E075F97DF71BDC05F9, DC941F53E570141D154C8A8F6BE9696D, 69E268FD63702FA8EEB92245A64173FD -5A161EC79E5539411EB, 95582E3BA2B92671D1C55968FBFFDADD, B2D2867D6E68519E4972E107222CC2 -10E425C56DAFFABC35C1, 9E55507068B0AA334B61061B55A3FA4C, 76326CA07A608EAF2E44B2850BEEE7D -32AC7150490FF034A143, 645C473D1D29E12DEB103E33788AFC31, 6DBC857B8511CBEE87DBCEE51F1BAFFC -980553F0DB2FD09DE3C9, 972FD74F9090821E1BD8282DAA179367, 31594172934FC8099FE3243C7093A6E7 -1C80FFBD2918F71D9AB5B, 72508D40467FA52802A5E3EAE46A17CB, 6CDBB3294FCC463054987835AA2CF69F -5582FF377B4AE558D0211, F44B0CE30AE8581BF0276E6154BAACF0, 9DEEF0EF522DEB481A57AA528A9EF389 -10088FDA671E0B00A70633, 7CAD62F23B498A629F61C277B78F53DA, 8F848CA28D10758AF2620948FE7FB18D -3019AF8F355A2101F51299, 674D4F80D1E6E600660FE8C745C35137, 8113E9FEFEE67BFA1C5F84DA37B85AC4 -904D0EADA00E6305DF37CB, A2E3298F5B8D5BA408FBD59A0BCF21E7, E19DEA06A7CB2513672EEC09747311A0 -1B0E72C08E02B29119DA761, 82D4054101D260AF59BC6B34D9F7EF0, 44B2678278DB6E19D6D7F679C64E2A83 -512B5841AA0817B34D8F623, 7FF216DEBB005D7D53E8FD83CC0B7399, E326E0E156FF26FE96EB3D139849C187 -F38208C4FE184719E8AE269, 98A614DBD92CAD5D17A0A51BBA6651C, 6168C46592C07BAF794C2018483DF4E0 -2DA861A4EFA48D54DBA0A73B, E15AE151CFFFF7C9BAB06C0C4E02189A, 4FD57A693728B5851B96176BE8A020CA -88F924EECEEDA7FE92E1F5B1, 626AD277498319CEAB580C3DAD611364, D635A54D313CA01AE564D15090E8DDEB -19AEB6ECC6CC8F7FBB8A5E113, FBB841D08716F39105F0C6A0E6B44D34, B23848958CE5573D5E61D77AE65AFBA5 -4D0C24C65465AE7F329F1A339, ED6A4EC608872EDDF0DCCFAB98CAEED0, 380D8EB7DFD27459673189FD0985857C -E7246E52FD310B7D97DD4E9AB, CD713A6FA65C4DECB2E919D81FA26EE3, 7C76DE743916BFD44823F21C97FE6F17 -2B56D4AF8F7932278C797EBD01, 129F5F40B7015CA3182E56DB5BB94527, B547386942DC53B940ABB4D710C573B -82047E0EAE6B9676A56C7C3703, D61FE443E8768B4A7C75C51DFC79B3C1, 3D4EB1AA062D55772A54FA4082629402 -1860D7A2C0B42C363F04574A509, B65B5424B49167FAF49F45D0F95E6BF5, F5B3477C391B4A0DF92B5F54A633225 -492286E8421C84A2BD0D05DEF1B, 9DA44051B7F939BBD5A4D0156AB26975, 9E9A77EA27C4B6281A04C2E8B20C2440 -DB6794B8C6558DE83727119CD51, 4C6F67B418FB5E4E354DCB622F55893, 9CE7E4249148A54EF9F75A23BFF7E163 -29236BE2A5300A9B8A57534D67F3, 84FBDE461ABFB4C47D9F9EF607390113, 2DB9ED91647C0BB98985BFF0BC652C94 -7B6A43A7EF901FD29F05F9E837D9, 111A425699A95CD6E6CFC8B2DE7982A8, DE3C25EB858FF46CFCD755C465EE0EA7 -1723ECAF7CEB05F77DD11EDB8A78B, 418DDDF6455242DC8E3CF706F7357A31, 9874EFD9B781E72D6DEA50907E09F9F5 -456BC60E76C111E679735C929F6A1, 24B1B158EB838752EB7EE82661942D6B, D630B06558D5C804203229D23CB97B1B -D043522B644335B36C5A15B7DE3E3, AA62C51A16D74D572E05D72465A9EAE8, BA546EF43C8432DD112F6F3F33484FA6 -270C9F6822CC9A11A450E41279ABA9, B17D5A63D3E50E0759FACE17139F4C9B, 59F0D096D23A72BCF3990DDDF9B135F -7525DE386865CE34ECF2AC376D02FB, C394A85DDDF3E8DF5A784CC2D94B87B7, 4B812AEC48DCD1A8856522862CE11FED -15F719AA939316A9EC6D804A64708F1, DA54D51C35FBF5D55CE16C5D3551A64F, B5B46E38541FA7D4E8B300F3ECF46299 -41E54CFFBAB943FDC54880DF2D51AD3, D52F7E4371E70669479959E67426F091, AA001B1E7714D0E2B6DE83A839CF3083 -C5AFE6FF302BCBF94FD9829D87F5079, 81C87D44A112676C129F7F0A8AB2FC2E, 734E4D8902E68F34655AD425DE9C4D8F -2510FB4FD908363EBEF8C87D897DF16B, 56CD2AEED77F0DB901402C32DFF4C325, 4AC2237E19DA29D0F281B2B4F18953A0 -6F32F1EF8B18A2BC3CEA59789C79D441, 356212C5077F17620E6A781AF20CD65, D45C73449F6B5F7F271DBDCB09AE90C0 -1.3.132.0.29 -1, 7B6AA5D85E572983E6FB32A7CDEBC140, 27B6916A894D3AEE7106FE805FC34B44 -3, 47B16F39D7B0DE241E91F44619C35A83, 9F6E63D5E1D65AC5600D3B164C1F83B6 -9, 7241CA2907EA08A206160B733DA8EDC9, B5A633B1E336A9B07072BF2F6CCD6DE2 -1B, 69887B7F8E59A5558BDF8237A56C2DC7, 9CF9962C2B540A0A9E3D7BD892257DF -51, 3950D1523BBFA521422B238A601CA0C9, 6C1D67DF6C0530DA37DD60A699C95646 -F3, CEF6B778B6AA3D4D364994174208C9, 9A73FEDE366DFAB8BCABE08A4FF21332 -2D9, E670AF4B141D8E9A414A39ECB57BDCEF, 5397B69EA267CD1F80C75DC81B894DC1 -88B, F813688EB93B83EC00545332EF06F1E6, 7FC4781297F740F86A1FE30B26063AFB -19A1, DCD9B8CE65F4390DC2C4D81A76B3D636, BBB82F8784812FEC9BAA00021B27EDA8 -4CE3, 10E0E734B06ED181BED927F345638A0A, 3C6E61C4FDC60C5278AE87FE557C670C -E6A9, D7C1FB42044B449C73CDF510FE4D4A8E, 390ED1F1EE5DCD69E3976E9A4CF19169 -2B3FB, 428E64B37D2C85C5619131EFEE69722, 6EF393385C383A4EC41BF9F9E34C3EA6 -81BF1, 724934F8D525DCA0688F616F14E1441C, 751E723515F5B2CFC60C1B18FCA520C1 -1853D3, C51E1546BCF9899A1468FAFCA4C6FA3D, F34BEA62E4AD2D1375BD92CFF77CF12C -48FB79, 5E377653082C27E7B7AC98F3234C0F11, CFA16C3F0613105EA30369CD6366C252 -DAF26B, 780D70117289F413D4C34C6A279035F6, 17986DDBC55610B60D30F6F940986F78 -290D741, 5C9B8242AF080F08F5270DA2C18773B6, 8A0166A0DC6F3B9973C8BFB3AB320072 -7B285C3, EF89CB04C34A716A6F4A438F345008B0, 32B3CB6C7CAFECDC7C7F63CE54E53F5C -17179149, 371A02C64BC2AF7E58CA91BB30BF5338, E1E5AEE3DC1B035706F280B1A0A6872C -4546B3DB, 12F8F92B0E9C20957E772BA0FB2AFA0C, 8F63BE89E12D2ED3085E60639372C85A -CFD41B91, 47B3D388DCFBF7A2D1CFDFA4ABDCF146, B877E644DB2B4CC00561FEBEE2284C01 -26F7C52B3, 6019EA4858DF592A47A4DB52557B4EE7, 377D408193698CFB797100A7BB807AD9 -74E74F819, 90B7B44057BE5F4AD8C9FF0CD16112D, 997D0ACB9CA106657F22EF6E7BBF541E -15EB5EE84B, 65A7B3F7FD77D559ACB70B5F9CF934A2, 95E97592DEF236692550DF653650F8D8 -41C21CB8E1, 27ECCC7D3C5876E629B720FD73DEBDC5, DCB2D60A6532CC123291B033C2FB1D1C -C546562AA3, F24041DBC0B727927962AD727E128C63, DEEA0B0A9E57A982543E51B9CA02AF8A -24FD3027FE9, 5B7ED8827EE6AE649F7AB5F455BC0165, 2178B3827BB4B957D7E1F6A4E0D5386 -6EF79077FBB, F647589245F670BB14DFD65C5D3A9475, 417504CF7EA904D07822CEECEBCFB1D2 -14CE6B167F31, F822591F8BA7A8B0D66894C9B7F292A, 6A2C304975B05F468BDF31E9F58B1C69 -3E6B41437D93, 813BD31795E094B3EFB10EFE0475E069, 9C945E3858B25C4DA454BF98A07FA682 -BB41C3CA78B9, 6B2989248D96B2950675225C7957082B, BCCD7128807AFA43BC025112CDB3C9C3 -231C54B5F6A2B, 8BC35FA6DAED0287E1B9D72D7795F60E, 5B211346063C559DB25349A678E9E6E3 -6954FE21E3E81, EE00CAB6ED53DE537E1BDF3CBA9719D6, 8D0EF66BAC910A70F282B9F4B218BCEB -13BFEFA65ABB83, C2966B805A9F9D698D8740DF174A95DB, 6332C7B857C73FD72356233386646FA8 -3B3FCEF3103289, 55A4826EB1C0EB5FF0F9847B4FC3CD35, EED33E209A72206EA2A05E4B8DAF1B77 -B1BF6CD930979B, 513C3F855299F336C1C0A93F4ABFBF23, 8E5B7A15C55A1B30F2B0317119247AEE -2153E468B91C6D1, 9EF1B0038C61D50A3013E7EE2AF536BE, 5041A10BB90A1E53C5D1C9C2D3AC9896 -63FBAD3A2B55473, A5B45504EDE46DBB209E17113C9CC832, A52DB69C46347F66AAE889DFA3892F85 -12BF307AE81FFD59, 2C8EE980D8E93201FBC9015B3EDFAAF8, 2CBE040263BAEA61FC5C436EA2579D4E -383D9170B85FF80B, CB4A2547E15DD5ADAB81036969032646, 5D37359A21958F5E95CAF8F048F703C6 -A8B8B452291FE821, 388E10BF51F3F5F1AC21BAC0401AD8F9, 741B1208A65BE972286B87EAB58A2597 -1FA2A1CF67B5FB863, 4EF86EED7F5815E734991919EABB0B67, 9AD3B9735443AEB66A1969207397F784 -5EE7E56E3721F2929, 6EFCD8CB03CAA1D071A6C0D88EA84EB0, 5F07E54612DD9C32155A95698E8AF08A -11CB7B04AA565D7B7B, 99BF8900B81670076FB0883CC3BCABB, 8557F1134ABA384274C101289A4FEF61 -3562710DFF03187271, EA57600C3CB711345943E0A53D4D77A9, 110401AEA8176E4DCE90AC45CA1207A8 -A0275329FD09495753, E1AB0CAFFB942355006518AA7AF16097, 38A10FB30E34F4F5789D9B6536F40FD1 -1E075F97DF71BDC05F9, D4F81451E5A58FA7C940C98AC28AD0F, 82EC9A7F81DA8913CB85A6D3C283DE4C -5A161EC79E5539411EB, E5E0D126BAFD2EC73445DF39FC2D90EF, F274921E361BA15471BDDA78176BECA -10E425C56DAFFABC35C1, 7B32B9C168ED1CA25DAAE028906F9158, 144CCC13625FD94B87D97FA1B1CAC807 -32AC7150490FF034A143, 8FB0161435220175126667A2FD29B3A5, EEBFB0DA8445FEE38BE5EF46B59C5B0 -980553F0DB2FD09DE3C9, B83CD1BAE240B126E151E6778CBF46CF, B444BF29FD7D7E794EB03F9A1804C74E -1C80FFBD2918F71D9AB5B, ACE152CED156A07CC466558148C033D0, 7309C5A0E1ECB03EEE4303275651D999 -5582FF377B4AE558D0211, F87F2F2578C5D302767949C1D765AB98, 64AC3D93BF69ED0FC7C7B7EDA15FEB86 -10088FDA671E0B00A70633, 2A00451CCD4D74FFD452E73C5C0F31CC, 6ECE138533E121ADD0D743EB30C71227 -3019AF8F355A2101F51299, D5400C81DBA4AE65FACC0E09F59B833D, 540CC716470B64EE77E08FFEE17BCE8 -904D0EADA00E6305DF37CB, E025D5E755DCA07EA09D715E766F9C2C, 6A36E79F669873132953C3BCF08D6DE -1B0E72C08E02B29119DA761, BB55ADC5F50E0A9FBEBE9E2321EE70B2, 54BDF0FE76728B8D75B6536F027F2995 -512B5841AA0817B34D8F623, CDEB19ABAB19EBE6C60C07BF2AA6AAD1, F4ED2877F3EEE1E6DFD01952ED9E51A3 -F38208C4FE184719E8AE269, E75CED09C24312C597F50DD59CD912CA, 5B0166715D70D7E1F34A2C6B78B7470 -2DA861A4EFA48D54DBA0A73B, 4EF6F25AAFD49E0C05F068DBB0593BB, 2A24CB4FF919FE84B574234A00478812 -88F924EECEEDA7FE92E1F5B1, 1E292B443F8D1AD2CCD014DA122E4D15, BE6CE4F9AC11519256C0ABC817AC0ACF -19AEB6ECC6CC8F7FBB8A5E113, 1F191AF1A8A1A8B28D5C2FF9F53B073, C810DDB3CAE65CC3CE6E867CE786F772 -4D0C24C65465AE7F329F1A339, B611A43795DBC18E137ABE52336CF02A, CE1E15FA25442C12F9EB5EA9B26E6A37 -E7246E52FD310B7D97DD4E9AB, 50E80D2F091F307E1516D4390D3246E5, 2C571DE147AA2F71E309D47967341580 -2B56D4AF8F7932278C797EBD01, CDAAE886E118D317BD96C2DC0161E376, 2A187655E8D77A0617A9B7F0A8235EE8 -82047E0EAE6B9676A56C7C3703, 1667F876B22D2ACE67004D71E878F586, FE947FCBE0445F610CC4C4F2606FBEEE -1860D7A2C0B42C363F04574A509, CA37EDE675209416CD51951ACCC210E3, 78E9679577F1485D76636764BEB20DF4 -492286E8421C84A2BD0D05DEF1B, 360CA37CD6347F378CA014FFD52D6218, 5A810FFFAD5B5B27AF3E92AFB53FE71F -DB6794B8C6558DE83727119CD51, BCCF2F21D6C7FBF199F4CD65D3C5231B, 2595F31AC62D3B9939D12C06B0CA8318 -29236BE2A5300A9B8A57534D67F3, B8E8C15952DBAA0B180B30E7B864AD00, D49967B5DF715B66E141B7BFA229B15B -7B6A43A7EF901FD29F05F9E837D9, 9FBE7709875F9A94C8A1A33974A45D9F, 27844701BE34C6A11DE9BC45F9C7E389 -1723ECAF7CEB05F77DD11EDB8A78B, BFD9BB2ACF14177C8C7B756999CCEB6D, D3010831D97F65EEA9C103D28152ED2A -456BC60E76C111E679735C929F6A1, E4BAFC5C83CD64CB3EDB5640B70FCD55, 7028E6818E6E53AE6664E4FBB9AC47FD -D043522B644335B36C5A15B7DE3E3, A3C1180293F4059EDEF304284853FEF1, 8E43271308411CF9CAF8B0E3F05DA5D8 -270C9F6822CC9A11A450E41279ABA9, ED0ED86F903C37E6250A72810883C835, 3D74E0380B925E7C08D8B788B2966D43 -7525DE386865CE34ECF2AC376D02FB, 441AF08E1396349A2F2680A9B9594ABD, 60BE7B43C2A5399D5EB1E28028E70367 -15F719AA939316A9EC6D804A64708F1, BC05E6175EC85FCE85C3EB563E0A7594, D575E3E04F89584D9B588A509C8164B9 -41E54CFFBAB943FDC54880DF2D51AD3, 81DED01B6FB2666BCC6E9A32D973F12C, 6E8D9D995ED6D9EABA0566CC5839DD -C5AFE6FF302BCBF94FD9829D87F5079, CDD1C46706566FA239CB891B094D2098, A9942B692AA93B9B82FED10A49C77B07 -2510FB4FD908363EBEF8C87D897DF16B, 9B8D27B6D1170F118ECD789D5301F9E4, 20E1048DE95739DC72F853A161DAED3B -1.3.132.0.8 -1, 4A96B5688EF573284664698968C38BB913CBFC82, 23A628553168947D59DCC912042351377AC5FB32 -3, 7B76FF541EF363F2DF13DE1650BD48DAA958BC59, C915CA790D8C8877B55BE0079D12854FFE9F6F5A -9, 25393E48E2B7B5DF8142CF731E3F00664D93BBB, E75DE5DF76185C0D233F23A2E7B973A954694156 -1B, A3E33AEB16B8B30F28BE00A54ED1D1278EF7E4C3, EA331BABC1F9C850CB6FE00C6E8D595A2F0A526A -51, 734F0EC134FA53E573BE31828ECDCFE969230F18, B39736E2FE9A766947CC8F236627E6551C74F1A3 -F3, B5C70987F380C3A1482499B7E38DE108E49B1B7, DA72E3B069331A4CCCA6C6770C1B0E95BED8F3BB -2D9, A2DCEB63F2DA16B8ACD68B6EFFCC730BC767D400, 23D6DEFF4A0C085D623627D28E991EE25D5AE745 -88B, A33D980E4D1E6EBDE888380645B1F81C28340F61, 47D8D18D8D640105CE735D0570D16B578F7552C4 -19A1, BD52E5C229FA5763E2F048582672D779960952D4, 8EF1779DA5A8AEF223E0AEEC19DC315E19A3402C -4CE3, E7D4964676C3994C0619030152DD1E739166F2E7, 20E6BC678D4C3C0B05147A2DEB123CD659025CC7 -E6A9, 5D0C33FE66FD1DA56FA31E0C1570286875C7A5C3, 917773615CA2E1DE0B6A7E14BC5EFA8AB86947FA -2B3FB, DC7520AE8A604FB5BAFCB40BAB185803F5012D89, 3ACB6E6F454DEEE809D36113FB941A319C004595 -81BF1, 968191992AEA557635F337FA23CD88DA24DEBF4A, E3035E5E5AFFA7019DB899FAF65FAECD2757EA60 -1853D3, 6D278B8467DA43BF84B72675DEC87ED91A6D4893, 2EB55C1C3AD1C98C553CC6B2CB98E6CEFC73C8B5 -48FB79, 31E014D27430CE99E8F8932F36D9FE1321C9AC9, 4EC4FE2EF24BD4244F872AA286ED3BDC182EA410 -DAF26B, 26919D4E3DE999CA8BFA6D00FA8E97C42FAEA85, 2DB843F7603367F4B1F07F6B45403A8F88324BC7 -290D741, 4B7D7FE3FBF73AF19CA0EC13A7F22B8EA31CE7DB, F82DC14B5E53CC35E4275BF639DC21B49F24EBBA -7B285C3, F445903F825EEB5A3BAAD6DD5E7B319B0E9ABC2B, C5BAECCFDEA34B7032BDA2932DF4C9AC10CCB4B4 -17179149, 4183B5F938FBF5F0DC8A95704096DB5931A5D627, 2D7E42949C7703BB0149FF95815F2DFAABB6A73E -4546B3DB, 67EECA2A2448A42FB50F6321F3AB4C06E3D10DA, D2DE1EFE80A29F460F7F7B2DFBDD93A3B87BC1FA -CFD41B91, 306D5FF90BC57AE7B347E8938FBACD5E8C3CB4ED, 3877474EABC5B88D529EA9550A3EB445A4FE01F8 -26F7C52B3, 30DE6E2A4370693BD9FA7D8A600EA5E6D75943C1, C288A48857FA2E8F677DEED44A1DC5B167708287 -74E74F819, 71E796FF669023C714A0A5215D7DE249B96E4CBA, 1D5AE16000FFA8FC848552E930E9D00E2DCFC4CC -15EB5EE84B, F8A8781D8F0844BA0F689184FF56AFD53D876557, 840E775C494738E49D3AE5D0AB7BF6F25F50F385 -41C21CB8E1, 48B5F313F23E31A72D61337E56203892FBD4AE68, BAC7A49986E06088A62FE1AC07CA2B67CBAFBEC7 -C546562AA3, 73CB8D5A5C2941C636B5D7E9EC69C1015982154A, BCB81976F0CF4F9E55887EE4AE7CB5274944F28E -24FD3027FE9, BF90E02AFDA1EBCC34B02D695CB360B150EDE3E9, 7361D6BD46767F2605995A7448154541ABF3A996 -6EF79077FBB, 93F4B601D818A4C11025779BAC80913BA0858801, C31A64DF2E600901674AA123A792168E17AFE90 -14CE6B167F31, D7D857B44C53BBCB5C3C888E15FA2FB31451E28F, 2E0F00931FC5DCB0049FCC78BD2F4B2593FA8F6B -3E6B41437D93, A29B3FFB401FD76A45DCD8F5E87C2133C36FD1ED, 1883EE891DC09A914AB0B456D78876B89F455266 -BB41C3CA78B9, 9FC8C86A7E9F2958C8CD957C89B414A759586954, A76C1576AED305C9491B7EC075D3C7767777C37A -231C54B5F6A2B, 6D348E7C4A319BB00DAA66615C113976AFDBF66, BC6DA4F9545617DD2F800E74B22142EBD2DA2FDA -6954FE21E3E81, DDC68F983A0D9EDA70E0B9E619D71A8F437B6276, 726642668979300161F48BA9696ABC855BB4B795 -13BFEFA65ABB83, F638399A8904AF059B46A6B8B8B8CBDAF598D9C7, 6F267B6C287DF615F54915DC922EE4AE41126D93 -3B3FCEF3103289, FD136674C5A9E5909FF90397A160EB2232983B44, 5143E198C0B9E3F70215E0AF841BC841F7F7F6B3 -B1BF6CD930979B, 483832C21A3569E8F58AD8FCAEA84F7FC4559663, 5CDAA7FC128E85AC5BEFBD9D94AEAAC681F7AC2A -2153E468B91C6D1, 9918DECF01630EEAA5B226AB6AD577A4D9044F8D, F57AD0162569CB722C85DE7CF98466FF4AB0E09F -63FBAD3A2B55473, 56AEDFC9DE5293FA3FA625D6D8F5B54F95754160, 26D366028621815862EC3CDEDCA7BD09654605E2 -12BF307AE81FFD59, D70777E9F2381429250279FFA09A27A1AA7EE866, FDF2FF1D369ED1003C1BB3AEE3F5F6DEAABC0E57 -383D9170B85FF80B, BD3A19DDF16D9281B8F5A35E0458229481ABC2A, B35E3DE71303702A1AA8F9B4845E3B660EF3F4F7 -A8B8B452291FE821, 9D7659C6B17D17DF5104DB2022BC059D85170F82, DEB9A9B784E14ECEA14116443C2FC6D46F723D -1FA2A1CF67B5FB863, C122BBC2034E30588D106375C098006F80DBAAFC, C31567A287D0CF0DF1904CDA7B239EDF4DEF83FD -5EE7E56E3721F2929, 1A1181829744B2D0DBAA23570C1450BDAE6A9388, 23E295A382E8CB2CF6822B7840734712427FBD60 -11CB7B04AA565D7B7B, CCAC921924E4E2CE73B1328BB65D1BEB111D05F9, B6DCF138575699B24E65F8E4509DE3656AB670D -3562710DFF03187271, 46CAE3F8641148620DAC97B2269086E1034508CD, C466FB97D2B63A866079C4EBE5FB6147C4D41C84 -A0275329FD09495753, C3D05A02C096E19F6B823D399F177F33B6661404, 19EB1CE2B123F8AF342A70DBA6BF1B0904DFA277 -1E075F97DF71BDC05F9, 355F10F526DE3DB79A28C4AE4AB83C91F16DE2DA, D93A8F2292847BA20C54E9D4FE376BEC9BDBAED6 -5A161EC79E5539411EB, 69E617B5E403AB15B10932003AA4C754FD585888, 6199B97EB0B634DF4B51987DE8730F7E364CC46B -10E425C56DAFFABC35C1, F230C76976E57CF10DCE884D10713CAF8B46955C, 80C1A15211B1F06919D56CC86360AFF3522AEBFF -32AC7150490FF034A143, 517ABE22245548B18CB7CA541852FB4682C92B54, 7AD5AD7E91F8A28D842F38C1277553D14C1D8EC4 -980553F0DB2FD09DE3C9, 4AD778F7AF703238A93EAA761B305AC36008AAB9, 296C7D40D07C37D5190B9FDB55ABEB8363D598DE -1C80FFBD2918F71D9AB5B, 34589A4F974E2772B581F8B1F9292B4A3221A392, 95F634C03F3461C88C258B6C3496CDF57CA94855 -5582FF377B4AE558D0211, BA1FC48E95584F0881F117C52E9B84D70ADB8CB2, E34B05161D00DE1B9235538B4E6402F8D62DD13E -10088FDA671E0B00A70633, 9EE3D749EA08A4DCF3A7AB51C15A8ECF8F41B016, 3A21E95620AAB5F8B829C494810E9226AA78060F -3019AF8F355A2101F51299, 86135777B50119CEA4C54A768B4D55C14B6EEAFE, E848B2F0072DB1E57BB2BB41FDBEEF6134101918 -904D0EADA00E6305DF37CB, B3EF2035AF9A8FF6A1D541D0F1C6D56F25051C35, 72DF35F50E4540C80E07AD5D49E9F182CEF78AF5 -1B0E72C08E02B29119DA761, 6F8E9E9456805DB0C58ECC6D596766A1A244F60B, 3EDCDBCFACA7A9D5A1319E8AD429A320DF4354C -512B5841AA0817B34D8F623, 93FC2F22165E8A22439C9AC49D0BECE1E2BB8716, 751314404EE1091A09864791FCC91780F94057EF -F38208C4FE184719E8AE269, D341F5018D6AA45C31DEE5341D09E3E04814B56A, 7A3FD8CED82C7DCBD444C2E07691B1711C96C56E -2DA861A4EFA48D54DBA0A73B, 8960BD4CDA88561DA4155542FCE995FBDEEDDF23, 797312B7B2B5E29279A3273192E0A0E148BBCB8E -88F924EECEEDA7FE92E1F5B1, 59396BDCDA965D15F1FC0BF0222F0FC86B2C300D, D4283D03C78C717445AC36328C1A64693FC7BDB4 -19AEB6ECC6CC8F7FBB8A5E113, 40A00776282D3C393BBC1DE7C9D1C1FBBDECF448, 512DF328AAFEE099E889CFB2C6FE9927005FD4EB -4D0C24C65465AE7F329F1A339, DE65CA9A566D89C6788655F1E450324D554B84DF, BF508E8B4FEA2B015E96C03FBE31268A6ED591AF -E7246E52FD310B7D97DD4E9AB, 1F680491EF657A5FC246FBB202A0002923325733, 5553CC698246C9B786179BC5037C9FB01713814F -2B56D4AF8F7932278C797EBD01, F333344C9F419569DEA6CB228D8938CC69FB81E6, 5D193CC5C5A830A12AC4F6C91FA6253E91267B15 -82047E0EAE6B9676A56C7C3703, FD6623768A2373B6BCC6D84569818D332E27B1EC, 72C39291859E0AD1217D23A34B662C4642113024 -1860D7A2C0B42C363F04574A509, 95761AD2BD51DC587A418ACDA16076A4DC844E22, EE5D215DDF7FE9F6EA2774845041EDB2D61C6E85 -492286E8421C84A2BD0D05DEF1B, 4A3C6077D76D09148B0611C8746EC56D0DEDC031, BCA3BC2177F774CF3B15B6E2128986FEB789322C -DB6794B8C6558DE83727119CD51, 2A3C6AD8102997ABB372D9D9C97C4E4EC8BAFF96, E152C4D5C594088B278E2A935EFCABE1E7B1FD6C -29236BE2A5300A9B8A57534D67F3, AB097E5ACB02E4459030895C6E354484EDF251F1, E6FE3BC507244169DC7CAB7DE32B6AE92AA1A6BB -7B6A43A7EF901FD29F05F9E837D9, 129D7BE9C4EC8914B41A2C766D476879D6F76BE4, 587962443B8E295B1CB893E4ED281558A8C8EFBC -1723ECAF7CEB05F77DD11EDB8A78B, 1C96D21218F2851F453D52871557B037B3512E0A, F6B977791E1C83A34B3EDE67CAD7B751CD0C0E92 -456BC60E76C111E679735C929F6A1, EFBF075A3FDCF11C6FC8C3EDAEAB2768A6D30731, 6B729DFA5729476544770F50F915D458B678341C -D043522B644335B36C5A15B7DE3E3, 36BDD9FC45AB77B06CE2173B8B793427D108EF81, B96612AACFB4C44DF74B6E26B12038BFDB7AD69F -270C9F6822CC9A11A450E41279ABA9, FC4D15FEEC11A0EF59622B7D2895970552345A56, 1AB20573F123C149D487E3B1336993D3EF5AD1CC -7525DE386865CE34ECF2AC376D02FB, C4430A83572A1BDC98CB1E457781A43C35050B2A, C3DE096745E831E6CFC7EBB98B747602C96096CB -15F719AA939316A9EC6D804A64708F1, AD78F890515B436B7BAE6A083B2DD5E1C1F7B70E, 4E849C221A61E5D46DA23E3B2F74B8B8EE14E075 -41E54CFFBAB943FDC54880DF2D51AD3, A53BB39DBE63EA5BB49D5D85991666C3490CAD02, 88479ED000F61E28450E1AF1E0F62F5AD1E3F905 -C5AFE6FF302BCBF94FD9829D87F5079, A653F42589F8B26F03067FBA1D3F20082632CF0, 8625B86D912D177E139E4A0FEABB68DB28E8D84A -2510FB4FD908363EBEF8C87D897DF16B, 6A5F2C81A3BA8543858ECC97FBD98BB0990B851B, 20F3777694592F1FFFFC055B716919C1EA625385 -6F32F1EF8B18A2BC3CEA59789C79D441, 1D7A2FAB41A5CF1DB3A235E261C5E3D2B4F92EF4, A1BBC0E673FEBD4D5F409907FBE404B41435395E -14D98D5CEA149E834B6BF0C69D56D7CC3, 2F885A7A345B99E03192A6EED5F969347DA805EC, 623B9D1A9A9012DCDB9BA68958A47ECF4C3CD0AA -3E8CA816BE3DDB89E243D253D80487649, ACA5A382C70ACF6199716A36FB9666F71F8DFF57, 62BA96DCDC4809E71C659228E6CA1FE80597B8AF -BBA5F8443AB9929DA6CB76FB880D962DB, 6ECFE7E695F17D048C516C35458CA3967541651C, 1036FD8DB26A743B7DB499F42C4301F079E5D567 -232F1E8CCB02CB7D8F46264F29828C2891, 44E0AF7A04FE3957C608146CF14B4275C3D7B666, 38A0714252B9B7D3A44EEAE50086DA06A9388999 -698D5BA661086278ADD272ED7C87A479B3, 7088D973680A53E9479DBFFA467A2111BCD3BE0F, 7D5D05994DA529E8E004D671E788FF3BF888CD7C -13CA812F32319276A097758C87596ED6D19, E4A9C3225C1C2EB76CC58CDC6E894973D58D70DD, A7B92C8791C5E5BABAA17466564A7281F9222F36 -3B5F838D9694B763E1C660A5960C4C8474B, 5739713DBD47167D3E32CD79B47A4A6E275AF078, 5DB73EE6DA8D4979FD94A281D633B43AECA6E9D -B21E8AA8C3BE262BA55321F0C224E58D5E1, CF96DC40E4B69CD8C790FBEDC0BB25952C9DE5EC, 366881EDE370510AE1E82532147CD8E01752E8C5 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, CCB043B608DBC63760B564CA50654FB86817EFC5, A0CD38CE52DE2F283CD2A7CA558ED9BA01CB56F3 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 9FA21A21FAEFBFB6E12775F9949ABE24429110FA, EFAE412FD472D2A05ED3F46933B3EDCFB203E723 -12C9389FCCA50E069A6FC4946479E435E8EBB, 5D876339E7170085A3A74848EA70B60B6588BD71, 65A7DA5C09F645BFE10CE52CD00F63B00350388D -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, C7EF4CF57F0BE40146B2D5F6B14443B6D96171E5, C7B0BF0558433FBE1018FA28A80B384596A6B9BE -A912FD9E31CD7E3B6DEDE937884905E530493, 57863906F760EB7472FDBBAA7AB922EDE99A30CD, 470EEE35775797FD7D756306011784D4D1A94B3F -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 4EE1981D55A77FFFC3844C7DFB87FFEB33D2287F, 411D7A29479A565BEFC56F5FD2952DADBFE3B736 -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, DA706E4409447F41D36634A89DEADD450031EB07, 25E66A476688C499CE354500B69ABF7E54C83CAA -11D500BFAF40AC5044981798DB5FB39F2C17B81, 3B492E0378D8BAC27FCDAFEB53B6DB8E88A678EC, BA3A45947418E51A09B5FB16C808B4A256112E51 -357F023F0DC204F0CDC846CA921F1ADD8447283, 201D6DB45EA1F22E7AFD6D1E226F028123EE9EC9, E69423D5D87FFBF101BA7C85CC3D2F63CD013BB1 -A07D06BD29460ED26958D45FB65D50988CD5789, B23E082FEF3C87F6C431FA42CAB2E70E6B22165A, AAF1370FCD36AFC7EBB188EA3CAC36B6143C4324 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 2A808829F1789876B2FDE344382EE0B8690C2B00, 3273FA8D18A239DC81FE8294352CD40A408FECA1 -5A4653CA673768565B41F775D6947D55CF3813D1, DFA008B9187788078297F4A9FA02192C4FC0DAE2, ED0614DACFCF34F0125FDA6F9E7AFF7C5DCACCB6 -1.3.132.0.30 -1, 52DCB034293A117E1F4FF11B30F7199D3144CE6D, FEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E -3, E84FF970605DABE350FD9BF375FC37522C5888A5, 78DE7599C4A72CEA3EF4BC3A29982ADC894EC182 -9, 20E3F772D5FC9E8BFD8D67DCD8B45399D630D37A, 1FF9A1E91849DB0DAE8C6509BD1C609F51466D17 -1B, BB39FCC5B071E2173428BEAB705DB9FCEBAB502F, 83E5B88D0E794A8AE7997380479C9748DE067AE -51, 917A736FD7D951F7A806F7BA04693BADEB624C06, 855174C9F3774E40C641035696036739029366EC -F3, 2BE453ECE6414AB5F13FB81D3DEA91B9598C6710, 29453EA0F29F27B84119B89A5E3081BD9DE77742 -2D9, A75E520D70CC4306CFBDFCCBE28E97FB0627682D, C883B2E1C91F12CFCA75CBDED17295C11E8574F2 -88B, 6EEB86F7B2B9FF907702A392577E1310F56DB78F, 7C261E33D409858A2AEA9D4A3FE8C832479F667F -19A1, 7E757759E045E8D016A66FDA20E4897A8A2AFDF6, D039279DC825B921B9D9711473F89221756A2E99 -4CE3, D35BEC3555B1F35EB22A4FCF4FBCC5CE3B764A22, 4446AD8C03A5D35A7B01A5B36EDC892B49454F8A -E6A9, 23B9D7BA0797F73831ACC2F9CAA1DF64CDE7F559, 66540959AEAA3E5B70D9D641ABF81BA14A1DF162 -2B3FB, E6CA92E5AE9BDF85E33F52E9E1F2F050299DD389, 387FD8272E4080A49BD791F93BD8619AF3CC63B7 -81BF1, DE16D96A9125B2528591AFE488D90FC01E22E69, 1C696095DD5ACFD89522A98539761FB5A7647E73 -1853D3, 804557D9B717F4C2259E72F84F13F35C013A82C2, FFE7EF93097442206704CEDCA0F75B6BA5D5C826 -48FB79, 9E240F06223ADA3CCFD1EF7A3CB305BF5B4B9FAC, FB3DA0F771E9C6B648C375A0EA823A1B87614F99 -DAF26B, B4629AF4194C351FF304F96B26B51132BC957B41, D3483CD817E9CA55EF5A2C722CA623C31D3DD448 -290D741, B8D59B7F10D7EF72131597752E632648123931EC, 230842335D0F6B1C0E76C3EF50BA422D6FB51FCA -7B285C3, 81A69485E9810488F7232F759DDAB105DCEA7CA1, E8D8FBD364E95EEA8B048E0A06E45E747AEFD029 -17179149, 6B366B527EB44994727694CEFEBCF25563502769, 1DD47DEE7D27319ED4D39324998B664D814BB3DD -4546B3DB, 2B3BB11C9F43C3EC8B8E80179B8DA43F1465A881, DEB646C27B429B7B71F71637B851AB3E5B3655AC -CFD41B91, 3B4A775E4DDED67DCED52178CB3752C6EB5D8FB9, 90B2AB13FE577A8AF0D1BCA5A03CA86AE1D91121 -26F7C52B3, DD414154FB0F89BCC29962419D1FE1B3F08CF252, 95D9ECCBDE6C3021766A4A40EAAB6CC84377F0D1 -74E74F819, 90413999E53D6ADACA31CEBD6A7038D52B0AA211, DA7203B06DE40019D2922E7E4A6AF824FCE1ABA8 -15EB5EE84B, ACC03E8896D725188FC18E13168C1AFE93D2034B, BF4D2E3EE06E2F96C36D4B81C9CAC3E087B72849 -41C21CB8E1, 8095AFF53E7E35BA5802AB833D74E7FA2EA2F3B8, 85135D38EB7B3BEE3A6D6422E065490D6847FA0A -C546562AA3, E8E61E9C810B819D549B12F41A0F7F8684DD0893, 141F4D38A3A7985F70549132AE3CA086A8CBDC5F -24FD3027FE9, A981B18FF6982534CBAFD0703EB75C96AA4249BD, 30615DA08DE405E46F4313D5418C3703F551215 -6EF79077FBB, C7B376EDBB469F829EBA9CDF71FF741819DC8673, 38A6649749A7A95B1DF9A7B990FB931099E07AA5 -14CE6B167F31, 6C7F85752C6D533BE59285617F79FA08D42DF128, CA5D147409A284BE32FBD9189655047850C3F053 -3E6B41437D93, A656B1EED7480FCB748A0EA8D765BBE0DC539DAF, 1739BB1F3A7A5DB88C8955B48CB9DECF403B46E -BB41C3CA78B9, 4D55AF39E9FEC87363DF83461742646AF102346C, 93B1B7040655EDADC7C1AB702D34228B46AB8330 -231C54B5F6A2B, C0F8BD2D64E1E2544D0ABF00E68C13BAC8C22DE1, 85DE486627FD5A72978FB8B63BE642D5DF94ED59 -6954FE21E3E81, B0F5612719F7DAF707D473E8B8B3922BB275E67F, EAE72CAA1E28AF26A73F9CA713EEE0565FC62F74 -13BFEFA65ABB83, 130DE13E51152B3D00B2CDF2430295E63E20BFC2, 496C525C46D892082233F7299CEA733A151E9217 -3B3FCEF3103289, 817AAE63E84C7AD209713EE959DB27A859744765, 21416BB63BAEF58D55E610F3F0C524C0E07E3B10 -B1BF6CD930979B, 3D95A6FA5F03E37D2ED218102EA7C08D27DC30A1, C15BCE32093F86FC4E05CC1FA8745DA081B6E9C5 -2153E468B91C6D1, B47D1D8A7B327CE49F1EFA90F5163E698B4707EA, A90022E3B8ACDD0CAD379BBA71CEFD62FF654098 -63FBAD3A2B55473, 3675906FC4E64690ECBFD997228E219DE0B8E44F, 7D093815DBE35ADE59FE73CF8D0628C6D9978E55 -12BF307AE81FFD59, 4C5B905F550C9ED37170289DCA7D8AD52270F71A, 449E64735D71A9C9FDA06E48B0185DD641816662 -383D9170B85FF80B, 60F691ACBB04331A4AE861A0C47644852B2DCCFD, BE9450E2CA651D502BF8D7205B635026F5EEA40B -A8B8B452291FE821, C1EB9E6FCE7A047122418064C9C73DCFA02BE92, C23B9533B1C79DF0D0B1C825CF0B23516866BB02 -1FA2A1CF67B5FB863, 57C5E838DF00A198B0976A00420B899A39A2F96D, CB3B3FDC297B86E331B61343574C5F434D88B1A8 -5EE7E56E3721F2929, 2E5334FF4B159EE146ED5212A90EAC98F5A90D62, 15A2B2961B0009B052DF67AF265919340938C931 -11CB7B04AA565D7B7B, 247BAF4436840B3BCEEE392B312E8C8C0D8BDE6, D68BA96FEF63AC69E664A80CC351A5D165D1E1BD -3562710DFF03187271, B7FF541AFFCE28023468B127D25D4C73B94BE9BE, B54FFC36F25338EB5FCB5A8C69EB5F40D96143A6 -A0275329FD09495753, 9F15ABFEF7521FA5B7437926376935AE0CEEDEB2, CBB16E599C427AFC36E322838FD27133EBF30A97 -1E075F97DF71BDC05F9, 17CC0FE99717634F61ED25D287581289030E0965, CDE6E612910407B9FF6CD587204CA4C2C8AAD103 -5A161EC79E5539411EB, 5537052945F73EBA930CFA9E2C046B12B2B6DDA0, A63C9D267C733381A29ACCEEE0B481AFE8586B07 -10E425C56DAFFABC35C1, 81577B6C0549893E0391D8B5A637AF14902ABAE3, A8DAF07FF9D1823D77CCCC341AB5DC924D6707EB -32AC7150490FF034A143, 11C487704058014F3960FA042F6BCF0208D72226, 6A9255CA8DC3D75F40FF6B99B6E5E0BE05090FD5 -980553F0DB2FD09DE3C9, 5DCC5E1D7E3841FDC3CB3111C2FD418E63E2959F, 8421EDB843357C04C99416E054B82215A941ED9E -1C80FFBD2918F71D9AB5B, 190DD0670D24E239AB389D7BDAAC6F9EDADA25EF, 4E3AD98CE374531D7B197F05DAA707DF652277C3 -5582FF377B4AE558D0211, DE90F21207488891F647294BDB1740430103AF6A, E56282E84E7B5487AB6FC3950321C4ED8BF055D8 -10088FDA671E0B00A70633, 251DE0F749F7BC6D6F9B8C57AB8B99D471B427F, 5DC534DACED7B253EC8586F687B6F45A69529E85 -3019AF8F355A2101F51299, FBA8EF5AB98667CDE6542F0B018A201E38D07662, CD17A3E5A978C4DDCCF0482BDAA673DBA69D67F -904D0EADA00E6305DF37CB, 374CBE0A3F1BE0A59F149EC52626CAB72EE3EA37, CAB9B36E001B245B37DA0DE643F1D38A9D52E02E -1B0E72C08E02B29119DA761, 10FB79BC106B7AE1CFD1DFCC2EDA7D104E308277, F2FB27D892B77AD1F3C3D42FB0E41DB41261C5F0 -512B5841AA0817B34D8F623, 6F9A5666ABCA8CE9DDD5BBF68740EE9BBB942135, 7E1D68B011DFC4970C7180C91C60E44D48C9D13D -F38208C4FE184719E8AE269, 5C099D70A3DD254FC6DAB7A35A83A129ADDEFC95, 41B7F280916ED5232720203176BF876DBABEAC0 -2DA861A4EFA48D54DBA0A73B, E04963ED17206CD3567A3659257047F611073802, 531A901A1143CA3F76928D3CE1CBBA576F52FE18 -88F924EECEEDA7FE92E1F5B1, A050AE836C13B0409D21FAFF6D7DAA4AF383A60E, BB2D129768BBD341AB42CA4E5FD2F9CA280AC5DE -19AEB6ECC6CC8F7FBB8A5E113, 1BBF025BFA62E63BCFBAE987F7AF6FCE52F3796F, 44193275DB1ADAB128EEEFF1A4EAE52D65286DD -4D0C24C65465AE7F329F1A339, DB74D61FD6E50092CDAC6603DCE8AD4AA5303580, B01E097F49B81070822E3B0FC686F114CEA950F8 -E7246E52FD310B7D97DD4E9AB, F6348F99B25AEF9C685CC1CC1B09A6FFC1AD268A, 27970CE8F8C1EADF9B8471E0ADF0E99B2E448AC6 -2B56D4AF8F7932278C797EBD01, C6FFBFDF3A0A18215BE1E8A9E390990B4F86BEF0, 55A890E56C9A0864B67ADDB6F3F23849B727E7E6 -82047E0EAE6B9676A56C7C3703, F84CEAB8518BF2BD74EB9D1B566394C70A598CF2, 84E62CB2D9B70C24701E26B493BC18E65EEE9DFE -1860D7A2C0B42C363F04574A509, C29A30F6E9D37A677AEE66B68A6BCBD9FF7E9254, 67AE3F98D51CF99250A94459FA4D6BA1371AF275 -492286E8421C84A2BD0D05DEF1B, 27B7E2B467512B4CB4088EAF7DD756B061334BA5, C0F57BC2211B8FEE5B1FC3F22AA1A8A538390D4D -DB6794B8C6558DE83727119CD51, C94ECB5310E4FE47ACBFFC26C120E79D616DB894, A62FCEDD6EA62887C7426AC1CF4E42A35B0FD8CE -29236BE2A5300A9B8A57534D67F3, 3C8D58D6CA4F92AB5D621822EFE2D5CF6980752D, 7442A25CFB459399F85D98283FAF70A88AEFCFCD -7B6A43A7EF901FD29F05F9E837D9, B8BD1F42D9B66F5882D37AF44393147C942C67E9, D0B5EA56047F4ED6A52EF104EB680661E73719B9 -1723ECAF7CEB05F77DD11EDB8A78B, B33CAFD14F7E7E56852952882635CA6E7EF378C, CCE4F3BFACFB5E928C2F48FD1CB248AD43880AAF -456BC60E76C111E679735C929F6A1, EDC843BADFC6EFC2798CA374483FD7FC44648760, B88E8BBE05DFFB90B8CFB0E154F0B178265ED2B1 -D043522B644335B36C5A15B7DE3E3, C70FF80788CDB11C3B9ED08BA81CBA626E7D89EA, A8266F3B7DD911355686EF37916FD856C6C1B2BC -270C9F6822CC9A11A450E41279ABA9, 35736208A8A98368BB7A367CBFEBEB34B1A4C850, 7F5BDA78ED9702E30EEE1A0999D3D06F0C0D3D22 -7525DE386865CE34ECF2AC376D02FB, 802DDECDDB38E7255BEC5DF4FCF63348444BC2F3, 7D7B07B4B6E58AB2982FBC3BEC0ADB556AD7AA95 -15F719AA939316A9EC6D804A64708F1, FB07B2EF10F9E65DA63175445294E378E212D0B3, 5A5B10C8453F0D9E6FB69A3B9911987D8953443F -41E54CFFBAB943FDC54880DF2D51AD3, 3BE5FD59997ED3D8E766807F86E65485C4AC8494, FBCB717ABD9B29E967DFECC5285A61A4A4949011 -C5AFE6FF302BCBF94FD9829D87F5079, A559284B36DBEE1C8A62A720B050CAC6C2FB860A, B9DAA637215A032084C10BB1AC25876CA8B118DA -2510FB4FD908363EBEF8C87D897DF16B, 72FC8462EE8B7A12491558AB6C02586293146AB5, 4B32DB3A55DF7439A48BF7786A70D0FB429E72F -6F32F1EF8B18A2BC3CEA59789C79D441, 5CFB5D7131BB331B46D805D1F78506AC8B01BC57, 930E9016FF39F1E2261151C562A1F0CEE91BC56D -14D98D5CEA149E834B6BF0C69D56D7CC3, ED4AC5476DBB38B5DB6DFFC539ACE478E191CE20, 4A5E96850FDB618ECBBA8F195EEB154E45DEEE70 -3E8CA816BE3DDB89E243D253D80487649, D53CCF1CF5091F1A374682DFF5305AE6520C26FC, A02DD14110BEE32EF6FD2EA81073BFCEFCCA0738 -BBA5F8443AB9929DA6CB76FB880D962DB, 657F9586DF16DC4323F154981DD5BD6F9528B152, 7328EE73D5E2FA9C3AFB66370275FAFB3BC0F2D0 -232F1E8CCB02CB7D8F46264F29828C2891, 8D22239C77FD8956657E942F81F4E31935C4765A, 16C3E4F4469EF19691E108566F21CC6A81B79F89 -698D5BA661086278ADD272ED7C87A479B3, A971A3817B7E02E3CA4846799742900B6826C063, 90BE06980D7276DDC32C86428DD05982CE87C23 -13CA812F32319276A097758C87596ED6D19, 3E9F78D2901C8F612B8ED52C5BCB199EE7386210, B7C4518B748202BB190871E26B1182C34E317D92 -3B5F838D9694B763E1C660A5960C4C8474B, 3C67FAA945184A9F37345471380799C1910F4D5B, 203DEF94CDE6AB39857BDF3193758D1F207CD0F6 -B21E8AA8C3BE262BA55321F0C224E58D5E1, 8F02FAD78E87AFBA0B1912FC7F0F71156B98C4D, 1B13737859F356DB624766D98C815EA2AA8B7A7A -2165B9FFA4B3A7282EFF965D2466EB0A81A3, F7CD252E843EDBAA6CE122A6E9D3C33C6E90D9A0, 8F8B875766E844764CCCC5D92E1DAD0329D29071 -64312DFEEE1AF5788CFEC3176D34C11F84E9, D14D4C47296849BD8428DCD8599A9D96FA1BA830, F74CACE0492ED70C30ADC10AE432E05708A9FE25 -12C9389FCCA50E069A6FC4946479E435E8EBB, FF36A94C74B0B98A4707FF9AA56E739CA8DBD5A8, BE559D0589E929D4FB577F0F99ED7CBFFF305FEB -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 9E69A22C84F1C14D995F1965A4348E9142D4B152, EBE93772CB5C99B4EFC366C127BFE372FB374D9D -A912FD9E31CD7E3B6DEDE937884905E530493, 159C51CAE128D5387111E2E0C564FF5D9FF31FD5, 664C32CC0A517E9A59275D96A986432A9CC7985D -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, E2840BAD56E05C1DDA5E25A52848BA282ADD76BA, 18CD5FFF525C92FBE1F8E6F8E7C6CCE93E835619 -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 21EACBA9F6A4614D3FA6D7D8D77B778F1A703358, AC5C0D86635F1C655B535B51DCDC6FFAA6E8B10D -11D500BFAF40AC5044981798DB5FB39F2C17B81, C4AA13E2B2363E4A7EAE4AFE80006CE4F223C6E6, C3C93DCBF4872D68E2103800B1A8DEA46CE94D9C -357F023F0DC204F0CDC846CA921F1ADD8447283, AE346CADE8E0E61BF7EBD87BC63F35691E7D21A9, E07CDB475E481DA93AFBF4EB1FF21A0413DE6366 -A07D06BD29460ED26958D45FB65D50988CD5789, 49A5142EB939EC1A49876BB725594B8AB4F04EB3, E03E86A5298E2B61179F919AF6DD88D2A588163 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 5B56687A46076CCC824B82BC7C0B44D2C31DB4C8, 280021AD0B0FD54ACC6BA1811A67205783088089 -5A4653CA673768565B41F775D6947D55CF3813D1, 889CE464400776C228A8658418218094A814F4DD, 45EADF4596AB04874C709680711E79331FA84F0D -1.3.132.0.9 -1, 3B4C382CE37AA192A4019E763036F4F5DD4D7EBB, 938CF935318FDCED6BC28286531733C3F03C4FEE -3, 76BFB34670AF0E3305C57012E49D9AEA3DAE0D5D, F153607068DCB611D14C6D9A1849DB711F6BC52F -9, C1C4F16E4F7EE19B36A86AF5EED8085D7BE07793, 5C8B0A739ABDAFE3FC07F9C55BBA92D3FC74A233 -1B, C702F0AC309B2FEA90BD71F0335B2F31D1E1E1B4, EABB018739DD8488F3B70FF0D97BF4EE73DE1077 -51, 14666658B3C4BA0150161097C9D019DA2A7FFA1C, 1F241171E25C85B02217017B961851F0A83E526 -F3, 413E6662045AEE7D2D7A8FD851C956C54891A2A3, 4140DD8652C88B5DD14A36479137DDA4400C4777 -2D9, 12966924224A9CF1FBC41E6013D234A38363CD14, 7B17EBA0CAB61517B046FFA30753AFC737FFBFB3 -88B, 7C35C56DF7F85396E0B086B21C86C1C2E61F7171, 41E8E0C55E0595DCFB330DA51148962B6C629DFB -19A1, 43254FCCA036AB68AB15BFA206C7C2BBCBD94036, A5DA83F4CD50B7E5BFEC985FC8545ECE68252021 -4CE3, 6EFDDDC5BC2D07EE3BB244E7B926AF3E11F765F2, 387D97356553CFCACA1832205A075F797E654E57 -E6A9, 98CE92B26DC42844FBB754B26347A898C7079C3B, 65694EC75AA857827CD023C5C417870D9FBE49D1 -2B3FB, 7B914CAD1F831654B3264542A5B4F5E1DFB89EAC, 23447155757E274289DE3DD6E30F32F47A10903C -81BF1, A89536525CCAA97E6FB3780B2FEEBBE0F3B19682, F91D2095C345BC1D3252328D9B2636545C921D37 -1853D3, 843510859EADD253A73D41D1B9C5F9809A25A943, E6F95B7C729EA35D66187126C65BBF132CFA8B91 -48FB79, 374B8BB4EB3FFE2026509E2B9227AC3F6C53219F, 8628066B76D88AE611FB425D3BFD874366A93D7C -DAF26B, BF6CAFBCB474012F40E46AB340757A5D172D278C, 72FCA5A48383279DC850308340A0712526E87BBF -290D741, B223C0B6403E0486F3FE8B218B83825D6CCFC4E1, 788039AAC6350FB6C37DA66CAF122DFA94456ABA -7B285C3, 4F4C4782428744D86A2A3E8BB5B7D226F3BDB4D3, AEE356FA4F429E7B6016EB5271CE3F48F4CB8BCE -17179149, 3E293F69FA42E1C647B9B394F496E50F01396DEE, CDC675A8141ACE35F6F6B5120DFE0F1F02C5D1C9 -4546B3DB, D62CC754E44166FC92BF8CFCD264274DB88FBD2, FCA99ECB7D2CDCECDC7AFE90F52F87208F734EEE -CFD41B91, 8AF061ECB086ECEEFB04059CDC9504DBEBA02387, 20E4E928AF344CB027C1483B7CA6898215C36046 -26F7C52B3, 7E125B8B3921EF2CF98A2C0653095162A89E1B4B, 60379A55F7796DBE2AF9960F9D688D5C38D09C89 -74E74F819, D438C976CCFB8014D74C489AAEB4D6DF2D28C19C, 63EB1A891FA4A136ED0D4E17B37585E07AA9DE76 -15EB5EE84B, E953E2D8ACCBD2147E04DFA5F91CA13E3EF45467, 991153A58F18015067DE56DB100AF5441BB823C1 -41C21CB8E1, 22E4A7D616186C0F2CAB4397C9B6F37005D62C8A, A589708D305D190D6819230E9E636CB1E724AAD4 -C546562AA3, FC9830B74C7C76F9C296FE04EF0B58F223F4B254, 85D53D0716349602ABC673EA9C2C86AE27ED33F7 -24FD3027FE9, B65FFFE50C4DD3FD7C2136CBD9DACEFB35D95E1D, 8727F36E898C5926BD5223AFBEF8833D54E55C6E -6EF79077FBB, 74736BEFE3EAE4D25E18AC9826BAD4EE0A19158, ADAF640F05780D87DECE7CBE85C5578CBBBEF4E7 -14CE6B167F31, 7513955E367B6E13BEA800023556AA265A06B697, ACB82877FDBA192FCBBCA32C907A7C7AADA1D00D -3E6B41437D93, 93F4DBF59B1C97C9181CA53C49DAA4A9B4BCBEA0, 979DAC9C319EF24DE692D693119CDF9C641803F3 -BB41C3CA78B9, E1E9B0159F953E0801461E54970C3E6633D3842E, 29C07847B5DCBCEB7390EA0D05F06B9BB8A1B330 -231C54B5F6A2B, 917F914B5E038280B3148D7F278C8E6DC2ACDC70, D91584C1B8677780213615DC733FE80BD6354788 -6954FE21E3E81, 47CF089AA012071EBC04B67354E5E7D7A91BF955, F638F8727CA45EE34E3196DB47735509B1070CA5 -13BFEFA65ABB83, 1600A9A516FBDFC5B0A3CB1F80640A665E07A941, A16B53AD774D56E3B126CBB93954560E3EC1DE24 -3B3FCEF3103289, 340895C5317ACDBE25C749515B191BA2E1F75BAF, A3F8C4F43B439F3116C1E9DC15B4D27B76C0CF31 -B1BF6CD930979B, 345607DEB8E7A845A4D3EC42840DB4FEB936982E, 1041EECCCF5D8ECE53EF4544DB8D31119D18222D -2153E468B91C6D1, CE74C5249E2FAE85AAB4538C3542E39AAFDDF83A, D0A4D2089153577C89071ACEB8413870309BF18F -63FBAD3A2B55473, 4A036BEF649D08F29C4F1AEB208FF5C51110A30E, A0AC63C1E5D745448706E41D42ABF7FC621D5E14 -12BF307AE81FFD59, 85EEB2F5C740A245A415130FB8382F0E5BBF5394, DFDECE2994520892EA6EE91DB7B8B0D7DE98B656 -383D9170B85FF80B, 845D0391AD48F56F935398301552F561190C9B38, 6DC10613EE54E5605068976AE6EC786110888AB3 -A8B8B452291FE821, 41671FE9CA17EFBA8AC9CD13ADF7F67E463C967C, 84E2670FE293C305BF7BB4C13965A32CBFF08201 -1FA2A1CF67B5FB863, F877C6CB828F3A4AB7E467CF93017AADE93F75B4, 7946BB16D19BEB2A5F4642370184CAA70F2167D5 -5EE7E56E3721F2929, C4E05B2666827D8DE93DACEBB89A225190068557, 819E11B6AC65724567D59A6F6E42784CBDE5A0EE -11CB7B04AA565D7B7B, 7EAB24A9A29898E2E29E4F4D8957AF6F8243B7C9, 77F0E73CF0EBF971042EE33E140C4448B11B581B -3562710DFF03187271, 6E78C9F4E05524EFFEF657122377461132924DFD, C7A749006EBD2699456F145A99F9233D3E536836 -A0275329FD09495753, 190DC38C2866B64320F6526769AD311B0E3C107D, 67357A454039D0B001D59EA7838D80668EA34A19 -1E075F97DF71BDC05F9, DD3C4DC30CEF8E3AC60BF1B0666FC2B30DAD4486, A248293510A411E01CDF8D96937E035633A0C3AE -5A161EC79E5539411EB, E39FCD5E9ED53C7194103ABE8BA922995C4FDD92, 1EBA224272077703C91017F0CFAF84ACAB9EE11D -10E425C56DAFFABC35C1, 4D830C8DD396C29C3488227BC33DEBBF496BE7D, 95722F583B835A8AD4487F3B2F7C565545154BFB -32AC7150490FF034A143, BBCD4A434B0D1672719E10BC4F77A6798A9896EE, AED7F48D99324C5C273F9B5AF0A494B735FB4F07 -980553F0DB2FD09DE3C9, B49332292B50A5DFA112DF1331B4C55E9F248445, C6F9DF7B7451416B6B5A44ED4C8EADAC90DA9E34 -1C80FFBD2918F71D9AB5B, EDE2C7DE901C83E7430054ED76FCD87B90DE8328, E5E773BB44BC6ADF51A51F9C45175C3ECEE13553 -5582FF377B4AE558D0211, 41C1F5E2D4E0FEDA3402F069DFD0783E035D344E, 2A4DB84936ACBB5404A2D160D62E3FF88A45F0C9 -10088FDA671E0B00A70633, B7727122B55C468312EC705000A83EF5FCAA4D52, C1C4A1483544FC75CFA5F937F9375A7D9DB2393C -3019AF8F355A2101F51299, C922618002EFEBD7C2BF3196F3AAB314F12F0890, 9C8391B5EC28A43A336FE9A7A2B3D9BF31562297 -904D0EADA00E6305DF37CB, 490AD5C9917A7838508E72C9EB59FB42F7D9FA43, 974224B1FF3846614B366BF368893309558B66FC -1B0E72C08E02B29119DA761, F0B69D1A78C33CD5DC57516003F516C9F7699329, A20F5D6BCCE35937D50BF7A769476F8D4935CBD8 -512B5841AA0817B34D8F623, 23E5062CF32A5B83949023E0B157CB6F68A2D162, F3000010259FB5CF53D197A18C15B2B1C5E1A679 -F38208C4FE184719E8AE269, 32A55C024E3097E596F15BB1D6594733CE9F304E, A179E31219F4059347C17F7320871BD8B3ECFF0A -2DA861A4EFA48D54DBA0A73B, 5AEFF683B4E398033A9A7B2EE0FA38759E3040C3, A8EA0B4DF43D747E2FB5102C886E14F966F4BEED -88F924EECEEDA7FE92E1F5B1, 1088A079584CEA5D81EB66C5109A406E25EAE964, 8299F5F75FDBA5C2517E031C96BD859E68A1D92C -19AEB6ECC6CC8F7FBB8A5E113, 6D8499CB05669C9327D7EE97F768F99818671D7F, 728093369F7903B48AF293C983B5FC84552566E9 -4D0C24C65465AE7F329F1A339, C55B018849E9BAC2D62ABDB211DD030D3FB5E8DC, DC1FC7CD12D540F44FFC07CA2F2673982B9CE53B -E7246E52FD310B7D97DD4E9AB, 34413A99285D991CA6C97FC0AA5DFBA20BB33A4D, 8F3F8AB66BB7F1297DD4E2555738EDB2D30F72D3 -2B56D4AF8F7932278C797EBD01, 4097BEAC8F256AFC2AA19445113C7BEAE9AC1D03, A17E97A27EA1EABB209C29A8BCD78350E2DF2B77 -82047E0EAE6B9676A56C7C3703, 874EFC63F7AD910CC19D8DA3CB8552FCF03355CA, 7F4F247640E549B134BBC2F5EC81AA2ED22C0AFD -1860D7A2C0B42C363F04574A509, 4A0A02B18C76AD25D94E381CDBFA1AED1BCACE6F, 71B5254CF2F453ABB22CF396A3EE1435AC5A2D01 -492286E8421C84A2BD0D05DEF1B, B2CC7F9D7D9D0FA635A1C575E678E85A0BBC7003, 8DBF749077867D6338C546DFACC0716A99AE8833 -DB6794B8C6558DE83727119CD51, 16E4030F2C28A08707D316BF28DA74E7C3C5F1D9, 687BB72CE41656230D3C0DF71D57D90615E149DA -29236BE2A5300A9B8A57534D67F3, 9D8204ED1000416198D2E85625FAA02A7FBD5EA7, BDADF37D6123A87928DD0F737CF70BA50D4A442B -7B6A43A7EF901FD29F05F9E837D9, 8A7C7F4F5349DEF31B141AFA0AC662E541302097, 641A4780211A34B3FACB36A1C11836D2A7D2F46 -1723ECAF7CEB05F77DD11EDB8A78B, F0B2E3FE8B124CAF0D1F610E140B612E5EB7C176, 41495D36DB585A50630C9DB65B6A34F05333C4A7 -456BC60E76C111E679735C929F6A1, D277687929B4C0B4FED52FDD568B40EC821DDCC8, 3DD837BD67B23FDE039412E111AB34E8D8AEF95F -D043522B644335B36C5A15B7DE3E3, AA0D15DC6B02686787B1923076721C4B5F3B9355, E46AA9E9C87DBB02FD1F5E42B2B1BFF440B50F2F -270C9F6822CC9A11A450E41279ABA9, EDE10F624926A81503C07B5C695CD313A4C405E0, 67A61D955B2F6E626300AC3005E732420C4483CB -7525DE386865CE34ECF2AC376D02FB, 29E33075630AF65B2C90E9F4165187C33E89D935, DE17F57A5FD0225FD67DD7F97E7247782CF74A20 -15F719AA939316A9EC6D804A64708F1, D88E13C516994859B07BF817AE3ABA70D5D32EE0, 24CE286A4A91D9980927FC0E913B450DF168CF80 -41E54CFFBAB943FDC54880DF2D51AD3, AF2EBBC66CF5BAA3DBCD7C3152D811A48710CCC7, 2C5A9297F0334FCBBA005DFE4286AF2DD7199AFC -C5AFE6FF302BCBF94FD9829D87F5079, 234B2A435D26C6D7C90963265D9CD9B16CAA12B8, 3C40A06E21A73E710B82D6A43F057D2DFB2EA286 -2510FB4FD908363EBEF8C87D897DF16B, 6446D4CDA9752FBDFC5DECB697791FCE3D37F185, 728CF7290EDC30A475184A5318819129DA6CEF68 -6F32F1EF8B18A2BC3CEA59789C79D441, 348CE121FDA4C145D2237561CAC3FA79A816B4F6, BAE45CBE8DADD639034EF6E3E10CF3F2C566C943 -14D98D5CEA149E834B6BF0C69D56D7CC3, 7EF618E47F44055F80A9FD03C499836832073DD9, 473A039D67C4CE782749494685C102AA73B48833 -3E8CA816BE3DDB89E243D253D80487649, 7D1F9F0AA4E2275E0573E9C3B3BEF4C87460345A, B17921981BADBD0C1685763C39665F3C6AF206F8 -BBA5F8443AB9929DA6CB76FB880D962DB, 197A811D77828E3365F48DB06DE85AAEDA0E3A4D, 5472AEE84071725618512EE7A37195C9C1B496C7 -232F1E8CCB02CB7D8F46264F29828C2891, 6F9D7AF9B643B0F768B77B3C883453A85D4B27AC, 45C60A75897CF854913135C7041EBAB75F18461A -698D5BA661086278ADD272ED7C87A479B3, C4EAD65E141A0101B7CDCAEAF7E7F161B96027D4, 5FB9BF2F287B45DF2D5170CE78F23D5152C5FF5A -13CA812F32319276A097758C87596ED6D19, 6E450757D6A4507D354639496259D77C8FDD4D8C, B16B66AE6E15D4B62CF8AA3DFDFFBC1C4F91AC7F -3B5F838D9694B763E1C660A5960C4C8474B, 5205998B52917323ADD21B184D47BAF080276158, 9C7E20BDAA0B865E593922624AF721F049BD2CBD -B21E8AA8C3BE262BA55321F0C224E58D5E1, 912F2886B76E872639FDCA77C669432C8899F97A, B6619F9D9A56D9FA467A1992787AF7181AC8672D -2165B9FFA4B3A7282EFF965D2466EB0A81A3, CA5DF9806EE86C6BCE00FA242904E709BBFD7C74, 4ADFF2811BC0DACE5941F17EE6511EDBB8DCD6B5 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 12943A917767DA59C26C27D397D86018466B5E35, 3B6A9DE6A807028AF5E62226398784CD7C8F82C0 -12C9389FCCA50E069A6FC4946479E435E8EBB, 8C0AADAC557629DC863AB40B1C8E4F8E73ED9C87, A39092A469DBA0387F4C72304B1412BEE7230D9D -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, A88C0DAA295628CAB7FACDF00C4C9100626C923F, 9C1602BD37929EA7C9A4D70D91897C9CF1E59C41 -A912FD9E31CD7E3B6DEDE937884905E530493, 23F53DD757AA273E32BF426C3831FED8721E256C, 1D882A65F7704699AD0AEA17DDE3DFA1FE144BAB -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 88EAE1B15DB7727C701C703C430DE29F9B4F61AA, 9151AD3512674F2781FDE98FD10881B7E84C2272 -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 13A90D7E150C3AA9A8B7A394BECA6141C3706FCC, 58F2755FFD60AEFC3AC9740CB8BC5CFAD6406EFB -11D500BFAF40AC5044981798DB5FB39F2C17B81, 935BD603863DAAA0C6D6558F54F55FB3467C8F65, 9AF20C308B767DC004CFD37F520F97669AD9F42 -357F023F0DC204F0CDC846CA921F1ADD8447283, 1CC32139359A69179AAD1624D9DBEE01CABDA4D1, 37FC97C9E3E0C627D9608C169E340E66DDBBAD86 -A07D06BD29460ED26958D45FB65D50988CD5789, 799EE7932AD81438CBA7EBE65D59F9D1E9E78636, C6160671186C1F1DC0BCC04134AF45138A80468D -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 5DFD803879E7FA74429BE2D7DC1771F83432B871, 14C916DDCAFDCA9EC565143CADC7FAD2DF89A861 -5A4653CA673768565B41F775D6947D55CF3813D1, A0C104E2A1F5453251523D5A695F35D339C80ABD, F4BF8ADB26ED63A00D41CD58E277959B8DAE4552 -1.2.840.10045.3.1.1 -1, 188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012, 7192B95FFC8DA78631011ED6B24CDD573F977A11E794811 -3, 76E32A2557599E6EDCD283201FB2B9AADFD0D359CBB263DA, 782C37E372BA4520AA62E0FED121D49EF3B543660CFD05FD -9, 818A4D308B1CABB74E9E8F2BA8D27C9E1D9D375AB980388F, 1D1AA5E208D87CD7C292F7CBB457CDF30EA542176C8E739 -1B, 1C0A558549162FE7C5D7274A730E9F58CE960BC9958D3288, 618AEECD7C6D796F0FA9BA3312490CDBFA0F3488F2FCD59A -51, 46AFF85827C9065133AD79BCF0372820C81880C645F2D928, 1B8911D44F06CFF14B4222E19BCBDA59194F970F34A103E2 -F3, 1C142C97C6CDD5A87475E04FAE2E86708EDCAAA2F33D97D0, 67793727B60FBB2E8D4163C131D2D72F6774827109C02B69 -2D9, 6157465770D08B8E53FB60AC57DD68F88160FD474B9B02B2, BCF67CF4003CDE95B507EAF4E07CD713C2F7A9FB3202B49C -88B, 767B00C09E0D583CEF4F301B727777673EAD242F2593697D, 7CF2510D4FF604A749FA3918DCB4840455CF7E68AB245A0E -19A1, 5A15B62CC74FBDEB931F1271CD38CF9F1D86131213248677, B69BCF78F9BA76C45601EF2486C166D04F34417804E913EC -4CE3, A51BC29BDFB0993FEDE91916D06D609FC744A813033B2F26, 6B0D669EAD4945315E92989358ABE363ACCA90FF09C25120 -E6A9, FF714040AADDF96A94380ED63FDB4D4207E9C94664724C57, A8B1A8B19F339AC663919850BDDB8A43DEAA04C861735987 -2B3FB, 35F80DA2E24E3523F1CF19B44A5C3B3A58C96AE146464293, 7E7B7C4AFFCDD781F641F9C2376E5E24121CCB2B9957901 -81BF1, F29F6F84ACBF1EEE1A4C3CD4D6006E0EEB0AE0A9EE08EE2A, 43CB330E3143943CBFF1F0EB889258E12353A2777F61FD4B -1853D3, 2AADE7388043FFDD4D4ECE26ADF6C85E564AE7119AD601D, B0136CD55AF4DD76C090358324B2D4044FE78519AFD2627F -48FB79, ABFFB427AF19C1618934C4ACF80A73D30CDCB3F5647361B, 577058997D7AF23F88D039AE8D195E1CF20E94A9E55CFEBA -DAF26B, E44F89F1FB04FDBC19DAD570D1EF3588EB47F799F3B31F40, 47509D6BF8F7A072255D4856B021543AB17DDE0F0EEA046B -290D741, 85E180BCF6BE779694A2C71D393AF8043A7A74F076778283, B0D254C1E67B7ED57C4847AEDE7F110FBEB337106517353F -7B285C3, F15B9270198F4ADBCFF3E3719F20F44E9C0786EBF5116BCF, EF12D95EFFE8FA9E4574B948CCB009C59B837B2065D4E754 -17179149, 76D8028D35E2B6760E4270781E2CAF51310433B0A7A525C4, FC2969795EB4BBC23B402842C4BA723D361AC065966C4927 -4546B3DB, 115569333F111A12BE5556453644F009567F4C7B40C5712A, 95776EFF47496BCE215E608F57E2731FAC2445666855BCED -CFD41B91, 181B8097BA5677CB3A3C3BC977AEDB8E861DC7374D5C9D82, F95ECBD7B0952380C21A214F75A69DFC486F2316A7A2BACA -26F7C52B3, B43A147C979080FDC8360039F4985EA31F7CE7D049478450, FB4687DD7D77359C497216FAE50F953C38288FAF271BDA68 -74E74F819, F16191FD000EDFC6F3D0E9C75DDC56ECC0255BD0874B8B40, E6FF81A430405BF3111AE21B28679D3FE6BCE570EBB3ED6F -15EB5EE84B, D88192214F0A25FABAD10EC7A4F7FE0EA6CD328D0E81784F, E8D10332314077FF28378C0D404FDAEB3508BF11C025DB9C -41C21CB8E1, D797A077FC44D1A5398FBCF648FE3CF921EDC23A59C6AA57, 197EBA01F6EBF058D4E19BBCF358EBA512DD4C403095F96A -C546562AA3, 1EA9FE83CD362F5A675DAE672D1229D37FBD501C0DEA7021, 5EB6874C8853B0FD10662F3B25FA9A21F4A66315E790FB8 -24FD3027FE9, 1E3628D25F1AF3C515C0758723BBE2D111AF7E4779DF425F, F991DAA7AC2BEAA1515D823283B67D9FB1B91C1E043B27EF -6EF79077FBB, 6C3F8E8C135BC46234D8B85AB9BA94A9ED2E7FF9B8D9D84D, 1710D8B22CA3F572CCC4F3F7D29B4508FD0EB49737ECFB01 -14CE6B167F31, A1DD7DC14AD895FC0E6DE95019379A4FCA488996903320CA, 34CB85A2D98AAA0FEC199A6DC1F5BD239F9E3AD45D5F9C63 -3E6B41437D93, 8A29236CFDDED1F057141CDB01E2042A36C8584BD1F7EBB1, 41DFA388743EB780842CFA8E90360E21BC957EF0B0943AD5 -BB41C3CA78B9, F0D31E7BA6299CF97D49459746F376976F3F69A254FA430B, 816B3BE3CDA212DCA47942E839460AF55BB368CF82443FD4 -231C54B5F6A2B, B61E3CE7469FB46A5A75E6F369319E86B3EDFDC15FD71139, 6E4A91ACFD67BEC34120A13329B9B94E9334B440F5BF929B -6954FE21E3E81, 1075CC5D277AED7E0603C852EEEEFE98B0111577047C239D, 82FD41C0DBB75F8698F96262EB53EF6C6D166AF078519E12 -13BFEFA65ABB83, C5DCEF887D8AB1FEF1DDB523F4F13B3B9C6692FC8FD8FCA8, 108EBDDDC411685D240CCB72D9046F60388C45D4B380ED7D -3B3FCEF3103289, 1214A2F9361F8F7E450D576A8C2316431EDCE1E0B40A180B, C47699ACD4F1B58348F5AC484B98A91ACD3097E1DD88C01B -B1BF6CD930979B, D590D2A3B6DC021E4E32CDC319EA48CB68FA7E953409C71, C06ECB0FD72F556006DD810E84E0DD1B1209198F013A86D5 -2153E468B91C6D1, 7DF6201144ACD2F93FB748724CD4E4E6F35FDC8C94CB203B, E9A12B853E94CB76FC0BEBA53461441B71C53B5C1061CC07 -63FBAD3A2B55473, 760FCF9057B0FEA16B60C8D3F754D9E2C18B973ABC701BC1, 92BFBA6E586583F61FCFF086CBB54AA070C273D847576A81 -12BF307AE81FFD59, E462BAC637E80D709FC2026CA864349722CFFEB2A8C14034, D6FC9AD4D0D9E3A80900DA823A02D01C20C05CD208217CB3 -383D9170B85FF80B, 2A20664813D23476502D4C405D7E073570F631E4E2527E87, 97F0E060BAAB21323695BEE672AE1A15D7B496176B1F7C25 -A8B8B452291FE821, 8A9FE5C70C8E1B73C0E2A3E5ACE91741F248E36F5E9809ED, 70051C26F338D61010A95921117E6F0B6E9BF0F9CED42EC5 -1FA2A1CF67B5FB863, 22834749F02FBB2D964358D12A7133DBDA532549F1745F35, 673546F13C6994B970C0376F96BD0051D19EB0D7A0CF09D6 -5EE7E56E3721F2929, 4A31DBA1B4EA6F5F5A166B73CF7E83BFBECBCD2CB22D0A65, 89E8AA2325C986557C262BDB2BE805222875242E276D7E6B -11CB7B04AA565D7B7B, 4FE579CA87A004AD36CEA14292F91BB85A6F5964760433EF, D381D212DAED188E721AFB8354CE0D1B7015BA8D8E8244E2 -3562710DFF03187271, B804A5F404DC163EED2D2E571F5FB77F35AA8B078586AE73, A6071F8E16F8C2FC4EC87B3FB20442F4E1A3738E91304568 -A0275329FD09495753, C7F9292AD9FA97DA3AFAACDA2B6D0B9D83E7116F0B2A2B76, C2499ED4938444F34F1D89136C7153A683A84F048A6DB9DC -1E075F97DF71BDC05F9, A5F5374B2F7E07EB06562A1BD3F8F53140F3D43472D1DE8, 5E94BDDB00BE4723D64F58D1C76A5916EE79B9BC08E65754 -5A161EC79E5539411EB, 54665882C939F6938E006794AB3F2EA50148C77F2F3E09A6, DC19F80B200FB36AA3933E7DD2B8BDCD9DEFBFA094C068AE -10E425C56DAFFABC35C1, 6D32C477B9B88E4A2984996C8F586E4CE670ABA7F9317BB7, 47B1FAE5A733CC165666A8E1B1B3C9D36520CA82978B3C4A -32AC7150490FF034A143, 704962F0155A1907D04C921D773827724C1550C9B321E07F, D65D2FDD10F3569EBE0F71CADCED6A08C30C79EC221FE703 -980553F0DB2FD09DE3C9, DD2B09ABEC03C2B6B79C59527BC2506AE8ACE5F5BDF8C9C4, A0F0FA28A86BF4A8EEDC13A4071CA4799E3ED3B7A551FAE4 -1C80FFBD2918F71D9AB5B, DD8D44CE64115353C51BBFE970E1B7F8BEC0A56815641AD9, A1678B2557AF4039AD5FF55592F1B62D16C493144650588C -5582FF377B4AE558D0211, 9F49FC1430F451B4239C265C6FDED93866D82DF30233296A, C5B07F840EB2F171CF4A6786473096BD94070F3D8F9FD80B -10088FDA671E0B00A70633, C3F8B7CF57A281463239C03C51AEC841435FE7D43F1E241A, D9474297A32209AC6577ACDBE59482971D25C811A83524A5 -3019AF8F355A2101F51299, 2F89FF42A3477AF0099EB8D20BFBF246A42BCE28C041BA10, A3958623E8ACDB16662C3F5EAFB757CB912F0E55AF480A6E -904D0EADA00E6305DF37CB, DE9877B73B97DAC40E06560B53557C093F46E2A9FAA70020, B7868444CE638BEEA8C062AF8FDC3D42BA3ED8D384368196 -1B0E72C08E02B29119DA761, 87411F357505BE61E8A2EC83A1C73D414893421E7942A63C, A2F641BA92F59BC2FD0051EC789DC6A22D1B790431CD53A1 -512B5841AA0817B34D8F623, 33EA40EBD183D3CA2E967763711F5EAAC247A83D10F4D8CD, B501868B4942D1DEB3F4DBB18C938BAAEA097B5DC8DCAF06 -F38208C4FE184719E8AE269, 9758347531DE82D0487EA03FE4245747640FA7CC1089C27C, 5F37E601C56ED8B600CC9D1B57B909D21A12EADEB917636A -2DA861A4EFA48D54DBA0A73B, 63D7007A3B25A362767A40411B2A0394AACDBF13A7EEDF3D, A721D1395745E4031DF177B535C09FC94756C0FDA0AE6631 -88F924EECEEDA7FE92E1F5B1, 6C8A8C2394FF380A228917B08B111D76A2A4E9EFD7E4E66E, 2EA61738C24D33C2789A186A5CC15245798CBC62F5A74766 -19AEB6ECC6CC8F7FBB8A5E113, 8DF315820BD24BD6F20122ECCA03EC60783576FF1931D06B, FFA2AC7836B24C3C2EEBB76F24B5A78CE8BDC8144545EB9C -4D0C24C65465AE7F329F1A339, 3CBCE069C8034D233B9C2ADE3C8F3F26D6004D6851BE36EE, F1CCE453C42F608ED79ECBE9DFF05E12D7843DAC2AF0165E -E7246E52FD310B7D97DD4E9AB, BC6196B8E020F764A84E9A7032B2AC38460015DFC3EAC411, 924EB9460BD723CB9ED2DD3E894CB24CC412B0CAE2AF8886 -2B56D4AF8F7932278C797EBD01, 1F9E734CD4742FA8537DB9BBD53A9EEA94D4CD47BCE92196, 2F2FAE55F79ACBE6223AACB30255161AC9B99F3A77087416 -82047E0EAE6B9676A56C7C3703, 6A00F547D2CA07929AD0382EC1CF2DE4240CF04E2ADB958, 9F6A1D2003032B61F65ABA33469464AEE22FFE40BD214EBE -1860D7A2C0B42C363F04574A509, 8607DE682EF40AB177F96540C70830855C1D8A3BB3340364, BC5B59F9E8C983ED333DC75231223668C20CD7D818FE09B1 -492286E8421C84A2BD0D05DEF1B, E40E7B5E5CB42241CC23170739DE4978F0C1FAA44C3B0A66, CAEEAA3DE08BDF32427CDDF8FEBFC42C2555FE38702227A7 -DB6794B8C6558DE83727119CD51, B72BF024B3D76D808D554D4A65334D4FCE8D5010D822C0EA, 3504AC222FE822E481A27F9C16EB584FCB390CAD0FEBB46B -29236BE2A5300A9B8A57534D67F3, 886AEF669BC564617B66F6057D040E60A3AAC8ADFBC5883, 765D1317E730E046228634241626AD17A004D0DEB3E6B8E9 -7B6A43A7EF901FD29F05F9E837D9, 919F5CCE4A889BAA1DEB916BBAB5C95163935DC7D78B35B7, 2AE6C9F8C027135C88DFB1223CF7B9E198D635D7BC8FCA2B -1723ECAF7CEB05F77DD11EDB8A78B, 97564D4FAC349DEAEB4AD24D9C2565CACA598BAD07981E2B, 17621261F147574DC2D663D58A81011CB42C5787424FA570 -456BC60E76C111E679735C929F6A1, 40677079B500B3DDEAA6B0D519C51CC99954B80DEFB416F4, 7A80B080F44C4F71A01CFFC33622E3DFC98656B3A5CF701F -D043522B644335B36C5A15B7DE3E3, 78EA536B23938AF681E0DA7B216815C3A9D62AF7CA76CB8E, 4A44318E21F72E0CF092DDB80A9A145D423505C775330BF2 -270C9F6822CC9A11A450E41279ABA9, 1E4296F8BBBF2BA1416B131712D0D0323CD566D288617A38, C4E33977F7CE998528ABE9899BEA3312FAD976A9D07FDBC1 -7525DE386865CE34ECF2AC376D02FB, 5D37F277984FA15FB5E47EF1B4AB48DA0025E01C70BCF192, 53758437DD9F6CE7214ED99806350E5822C1C022371C986 -15F719AA939316A9EC6D804A64708F1, 45F0D931BE0BECFA19EE77C69F2D6EE2BFD46A3ABA9E7860, 2DD205C736CF8D474508D1D9FEDBAA9B398124C8963AC9AF -41E54CFFBAB943FDC54880DF2D51AD3, C4148ED33A11E3B919F678D0F6DF2E5F19E888252337502, 6BBB5EF5AF0688950B4E9A05B69F3AB4449724CFF38B6D17 -C5AFE6FF302BCBF94FD9829D87F5079, 1F5855C573EA7C76D6E6B34539885B1CADF69A26C4F4D42, 25EC84477867183873938999C5445871630DC9EAC9331B7C -2510FB4FD908363EBEF8C87D897DF16B, 2275194E1FF9F071D0B9D4DAA0C859E9EFAB5DD0131B86EF, CEBA1E77F349F3A9E4E9CD42689FB29E0633174627A9892E -6F32F1EF8B18A2BC3CEA59789C79D441, A2CE1B722AEDD1C545E1FB6E6A3018C2EDCAA5DB7D4B523C, 759070FC0CF663F1D84E885952FD9681898ADCDA47D3DA88 -14D98D5CEA149E834B6BF0C69D56D7CC3, A7BF44284B9EF496941F31B6442EF663627427C9DE50AA10, 993CA2E4B263BAABDBB58D27F3E3C72BC71647D9EC3D0ABE -3E8CA816BE3DDB89E243D253D80487649, 3DB825FC33496FEBCA37FFAF958DBEB50EB870F7193D2BB, D59884A0FA78538B678628374DDA23ED6EEF75A863E3F53A -BBA5F8443AB9929DA6CB76FB880D962DB, 8D6011151337C570552757A22E3A302FCB7BC3D61DF6061E, C455C35E4A071CA2715C80121BE43DAEF519B5D1B768B849 -232F1E8CCB02CB7D8F46264F29828C2891, 1371514D33D4256E50425500708416E4F8706EE52F803A90, 892FC707DCE3352CE8ED23ECE989825FDEB32E79C049C2D3 -698D5BA661086278ADD272ED7C87A479B3, B940EA3133CBF5A3E287F71ED5DEF98FB931BC0965BB6B36, D272093C69411C10DA893316831A3DD11D76C441AE0E38D9 -13CA812F32319276A097758C87596ED6D19, C1BF61C85F79B24A7B30240D42A70BE0BE5E7DE6A0563471, DB49E02EC0BB0401BD566B072013552266F518DF05987BE5 -3B5F838D9694B763E1C660A5960C4C8474B, C0ED93B53A193A35D1794337F74C4DD58D8BA88678929E68, 7DE86FD1C4693DC901A7890DECB307F00EF432CD17A9669B -B21E8AA8C3BE262BA55321F0C224E58D5E1, 71E6E0470A2A76566ACFD8C69786213DFC50FF8449FA9D00, 6FF8607F003A90FB76840D8CA367B4612F8A555BA2C7D07B -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 162376F28E53249611556C1ADD58DD15AA66451D49BDB18C, 9A246765E6CA5B19BF853332B39FEC421739DB52703B6513 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 7F3355A10C96EE64DE95CB40F2C16C6A8BD9AB19F243EFAC, E25ED7D4BF395ACE15CA7AD9CCEF8F82C3B8680B40C5AD8B -12C9389FCCA50E069A6FC4946479E435E8EBB, 65801BF19C26F27BE259A68033096C0F21CB908C2BE431F7, 1CBF7FD180A1FA7673BB20DDD3DEAFDD224992B000DAE969 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 2434447503C73CBE250329A649A71BF7FB9235B4D7DB5AAE, 4F1E6B3691512BDFD642B837035EC68B3DDAD08306D0E7BC -A912FD9E31CD7E3B6DEDE937884905E530493, ABE1D7C9D4446CAD96B696E129225ABAE79BFF43CBFF4EAF, A07CD0DA6177938D334381A6CAD4FE2A54189E157DBFB657 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 45B3A8DF8C53006D2181D52E578502906DCF166E53B2E490, A4C15F301AD5F5B61F603F93230CC3A817C6DC86AB842DBD -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, CA66D4AE5E37980E54A32EC981AD6FB8F130A811DFA9F283, 2E516FD1176602D650B7687449E87127583E18F8E8AD6B67 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 673AE0961D0B12B6526E82EBF3244BD9C392B92D52ADD0B8, 56F605CEAE8E71F28DFDD4CBAC06CAEDC3EFD0F4FF0C7D7B -357F023F0DC204F0CDC846CA921F1ADD8447283, 2BB6D5B9E52B42C17E34205A523FB4596E83B34E653A1B20, A1F89B4682D8A6F1D07F8CA40A456962BFFE0D0322EA5BA1 -A07D06BD29460ED26958D45FB65D50988CD5789, 5C16C7F871FAA2972D6C00EECCE62B9951CCA91CDD44C978, 53379BC875B840940BE2F0BD83C3BE3A4F73898B2D243D72 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 985E2871102C0F5BFA09E1D16F677E1076123BEA019DFF0F, 3B0EE452994A31EE10E8B76D4F1E5AFBFEBADDA52BFE5238 -5A4653CA673768565B41F775D6947D55CF3813D1, 85A95B40A2408C88065A6B06A2C70C0F3B1016B850B03FA4, E123762ED9FAADDBD571D4D9D55BAC21635B8F23432CCDF7 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, EE9BCE88E1300A048C6EE04BC7C4D6B14F9C46C4E5E0DC5C, 426DD5BCBADB2B5831B05AE0EE36A4357A9CCB975BE6D97F -32C78F21DA0F2AB093551B3248B38680448F8B259, C8F67DBFA81A917ADE5BC7C680466B6C59A0614CE37CC492, BCBC3245DE309B260381C29A51A08FD7AA7A897A57F60C43 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 102F282C7749464D0B5BAFE7862ADB176CF528959E6FF16, 4471B34D0C427D1B2E6BB4D1D1E7019B19FB29AD3508FD55 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, A9D88CECC8F30E7367B1826614750C5E62DAC63B4EC69F65, 1DD5CE403B28F8E828AD61FBDE8DDB29AB799E322EE5B12C -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, BBD9BD8DB52BC779DED4D10D87F9A51D6F688EF2AB24DA9D, 3B81E803B4947D886C31DE671C257B8D4AAB9703B1425FA7 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 4D17C614554EF49C3ECA4174BA73E5118E5E60AA0A77C63, 7B6297E167ECBFA4B7BD7FEA88BCED0D846FEE03DD3DCE7B -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 14D38246CEFA8D9795894008CA0C0D126F83C78C83DC92BE, 36411B77CECDAE847590B5677F59939973BE6FF2F64A9042 -909A469765F53090D38D5A7231073A03433CC33DF71, BF7AC1EB3E7190BDE4D71ED57DBD52DE03050EFB40CB5EAA, 8FCAFA78361658F188F43142956A156857563AFE6C1EC45 -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, F8D28C0DCAE91C461C70A234D69A2538F29308A11DEC6B7E, 81F11659C6F8F433DAF384B0677656D43AA1043655DD8E5D -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, F730589659E8FEE715F0A3398A547498C858172E776C9E33, 7725C13706670A811F93D5FB0FC7BEDF0D439335D2FBA1B6 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 3B666DA46C5BB9CF8D8444366602DC2C793281C9FFA16E2A, 933B3919778A797358D4F485D911ED7B8C8C3A3C9B782CB9 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 251F31E3F7B52DD8BD58E5D15E5AE490923752672A578D78, B5D6D075DCD78583BE68D8F37C3A4E6BA38C478BEE16E90D -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, EE4089782BEEEA54B8CE2A2165A343D8D1D111F8BEEA6F7A, 29E6B9FE3066CF09CF8227D8E559A072F36B2382FD3BFCA -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 87E107AD5A9D73AD3575BB56785B149C7C548689290DE1C7, A57878A169EED1B6D2AB99F88716ED86D5FF090D3C72BB96 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, F0209D045652BEC6993A3B280AB6584EE0FA4CDA8451CF67, FB02EC759B638B43CC694F1FFBFE8DA49EA76C2D17A3793C -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, FD1E7CF082B2DC167E1428F12735BE092F295A4A8E1E760D, 3544868B55914D92838E1203C31317C641815972FA81212F -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, F0DD616A23DA61FFCE001E709706367C9B3E362E741B638F, 23DCED8532944C2CD408745053B4D8566A1222B4FDCF779 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, F7477B1F68BC6780620B206B46251DB5BDB3C3DF7E1E27FA, 31BA57AD0B0BF24867480A9F85FBFB9930274616EA260236 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 96AE79EB0A648DAA2EF738CA6A4FD4DD171A20DD0A36E7F5, 1DA556917FD6DDCFC2ACF833D2DD9D5B8071C305EA1FC052 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 94A09B7C63E9B75B117E09E1784125C65B2B67F98D3F46B3, 922B5F92BA51AA72C51FCE3B6FF14ADCE1248EC839984332 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 59777F6D3BB4D0FBB4030BFB59261F24B9057A9DD29BC2C1, 1C450FC266C1A45AE52864DEB7390A2947BF0C5365092D38 -1.2.840.10045.3.1.2 -1, EEA2BAE7E1497842F2DE7769CFE9C989C072AD696F48034A, 6574D11D69B6EC7A672BB82A083DF2F2B0847DE970B2DE15 -3, 4AAC8EC6E4AE0FF1763BA50AE85927FFDDD89AD43397C057, BF2CABE23018A134064B62562067642B40C42634041F70F7 -9, AE037C3EB01A5B98C2E63CF73B95123C3BFEA6BF43C1D21F, 6310603E9014953E59395EA3CA133EF772ED7EE79CAE94EE -1B, 7843092B6A40D9EB958AA9A1060C41D15A55933A03D5C897, 52D1284B3BD13E9DB669090001854545DA37C37655B644E2 -51, 9D0D4221B5503E6338AB8C7328232DD0C033EDDB39874E8D, A496BED1DDA7D2073AEAC3379D42A009BA776E68F6E55EE9 -F3, 257EFDB2C0341EB500E1A8E00D8346716B8F027957BCA5A8, 76FD49B6DD9139AABBEEAF1194CDB3BDCAE51CA833420714 -2D9, 87C9B82FDFEB65795C94EA452FE82BABEF77CB426E9D766E, 329E709561EB464204AE0F4A76C51EA9970219D6D20AD003 -88B, 942EC82623703AC16AAC9A66FDE0C3FE8437629575CCE8BA, D3FB35A4A0E218B93610675F357B733C0E18F7F9BEF33F17 -19A1, CAD57B8F51CEDAE9D0F4B8A5F483B88ACAF190D8A07A4E72, E9ACEF1BED7BE71FBD084429B17B498548D52F1A765F92F2 -4CE3, 7761C38A07C9927995FED938C1B3B5F12C2C439C1AE74660, 69417B8E76788F0179FAE684DABAD5DEB2BF9F9519D2B62 -E6A9, 85B447790AA01FEBAE1646BB5B5977B8A21073CBE829F7B6, BD1EF37597B8CC07387802C22E375D8AD2B49CDFEF783814 -2B3FB, EF05C744C40CB7D5211233F53B74B5F208520E7CA932E546, B51B321A5564A02E291F4F83E6EB11AB38DFF50AF4322F83 -81BF1, 64EA0CFA0D07D52BB4999B5BF543DFB62439BFD4B8CBCEBD, 2585ECF2EF52B656E09DAE082BEC73C03E09E442D7FD6A73 -1853D3, C10AB6B1D2F7C083DDB5A5F6972B830C07AAF7BC8FDB4FF0, D5319FCF3A5CA26F5B4BD6A4B6EC1D45D6E2473CC7CE5C4A -48FB79, D62CBD38002177BE9CB9C63A99AFD14D08ADADE24BEC531, 28936CF03E2017996F196F2193B21994E3DF10DF1599A4F8 -DAF26B, B31010A42D91C2252EC78C5D60C5723766FD1BEA2221DDC5, 9429691F4AD9A238211E67E618A549942D4DEECF2F32498C -290D741, F72D96E577283AFDF0F1AF3D22624DAC35CC3087B94821B2, DB9269DC43D2F8DB901CBA1614A6C40A7FC0DED6E1772AE0 -7B285C3, 30E0E22CDBAA9AF3F4230FA27A3E674EAA534680B9211C29, 7D52F9B0B2D1AE286EDB277C92AF9103032930F2B05721D5 -17179149, 3C86C299017693476E1BC7589E58A606D0DFC970D56D657E, 1E79A850CC3D0AE7072EF3D6BEAD66FBBB75E32B215F0618 -4546B3DB, AB7FEEF89758FAC6D3B3CEB1F86DA5D96E17604B684210FF, 490DFF4A244A6BAD1FBB859DEEBE3729E9A425A8741C3A0C -CFD41B91, E1CE6E5DCCFA06BF45FAECFDDD75D8F5FBC038D760DF6F21, D89578B563BEB700CE22BEF846544576D7998698FA5F7E3 -26F7C52B3, C96773508E0E1E8FB8857EA3C3477EE9953CD7258C64D960, B6EC117AC9356283227C1BBF35E06716E746B1A0AF532555 -74E74F819, 24F8D9A434F1B415B9933373C79E0C76681C2BECF866484F, FA9F84B5CEB3801F4D9284BBE8EE75E0B85949F99BF3442C -15EB5EE84B, F04C128742240EED9989D38FA9E7107D0B98F3CEDD4A3E91, EB53C00A9C9B4AD223F424464A09F6C9B65392C3F18289EB -41C21CB8E1, 30A0C2B8DA5C088799BE3482D20F4F58A0E198C654B5BD6F, 843A72E4808C447CBDBFE2AFF917FE67705ACB845AA1D23A -C546562AA3, 74FF63DF410F25F1F7A16046C0B3CE6DE5280CD5ACB9A2BE, 339983C021F61D36252109DF886F366EB7AA67B215A41684 -24FD3027FE9, A82E2ABE9D1D7C44DEA4A87EF274AED1252B0165BC99DF6E, 84E3A7FDCFAF7979F631DD003EAB48A4747B9AA1A6476DF1 -6EF79077FBB, 3F11F405FDE1BC530AE80475CA6664C627A8F953CA24D078, 54EA4705AF624EF438D1D188AB3FF53A79DE006B758682C2 -14CE6B167F31, 6EB342A61909A034AB7B5672A51FFD0FCCB515A012B3FE9D, 61370933ED403287A2FB17B1B22F5695AFB682E8E0883499 -3E6B41437D93, C42A74205DB5D871EEAFACC79FC1F20A9424B79DB9BF0C8E, B8435A9DE970AC0E96FBF1A323DD93C918999043E0678FAD -BB41C3CA78B9, EE5E0817906FE06C6E304BA62DF4F23D6BF8C4A5DF7AF16F, 5A339FA5B7DF7058B6B0F799226C9A5C9EFF003474335E92 -231C54B5F6A2B, ADB611C645A2DD419BB493CB416EEBA59D208803310A02BB, 7F954FB37BE503A9E3AA194DE835815E3637EB0D3BAAF5F7 -6954FE21E3E81, B46A75C0E5B4F6FB0928648756950361727B6270177EFF6C, 9DDA574DC98D64C07D9A7014AC9DBC82D7ED3EAA0EE28573 -13BFEFA65ABB83, 88ABE757E77E5CA2139C7E09DADD9B0967DD5429DDFD63A9, 25EB95BED593FFAE483FDF3A223BEAF387676F61871D072B -3B3FCEF3103289, FEF691EF621EA44F60DA422362F7440D24E4F6DBC3128B1, D74D6F9B53DE95280E9BA8BA5F79C6A48303B340F4A559B7 -B1BF6CD930979B, 1C517168AC9BC7AEEA1616AA6745ED6CA8C27F5447BDC764, 3380157C78416A5B20783AB6826A0666BA51D3D79DE0F758 -2153E468B91C6D1, FC2E8ADB041E363BF050AA6734DF8FD4B441A19CDA60D9AE, EBB7D1AD7426036814D74E62B72ED6375C716559745D85A3 -63FBAD3A2B55473, 4103A07F0427DFFC544FB025147F87F9EF503FD51B7A625C, 92A6BFB52379F1A8AFBDC91A9F87D783A1D4C141371C3AA2 -12BF307AE81FFD59, 14094917519AC578C503C5CEA741A696C14B2838F46DFACA, C03BAEE913BE6CCD553A171444EF3F6EFE8EF935FCA0A14D -383D9170B85FF80B, B5575CD47AE56EA36807FB79C5B7823BD6B14E05417D9FB5, DCDB14F247C7B4DFE5FEC4BDF5A46AA46D98C812EA4FE37C -A8B8B452291FE821, EE9774DEDD8EE509059EF05D3B1F3EF55D5D4B3BE896C7A4, 50A6E15A390B2B4093352DD0C35672FE2D9CE0C2B4020B7A -1FA2A1CF67B5FB863, DB4A020A65CC1357E6ABD4BEDA202E4E044F7330C2F17A9E, 4CC5C7C8744218B43B731EE39BFE6AFDD3A51436EEAD9C58 -5EE7E56E3721F2929, E73835D0847E3BE79D3E6F062F4B4DAF599B3E546BFB03B1, F1C2258B68B6703899E900A8EEACFCA86FECE7AD73D982FB -11CB7B04AA565D7B7B, C077F2076DE4F401AB93239395D15EE120342D41E63300F, 7C5CE5BDCAEC879ED91D2F940E2197FFB96C13C8BE386EB2 -3562710DFF03187271, 60DF3821F8171E9D325EA5E63C89B990C4305F86B4D92E83, 66A46B91800BD52002DE6609F75B5240BAA56A7FB1D6EE76 -A0275329FD09495753, 25B568B0550ACA844D0D9A8DA2F251C28CE6DB7D98F34AFC, D031B060AB0630C3531B9F7A96276A91C95A82FDB0ADF798 -1E075F97DF71BDC05F9, 7F0BBC6C7B77B089B66393F0066F98B666B2A7BE428CF5D2, 310C384821D01DD3266D9388DFC1F05551812432EC9E9076 -5A161EC79E5539411EB, 2923D6E475EF8BC91F45202DCADE1CD5D4269DB9E53391F5, E8D777BF6918480CF4960A4BFB2C57DF15BDD6F4866D377C -10E425C56DAFFABC35C1, B68F430F6475DBD75417F814FC374BC3106FF99FFD0AFA8, 965B467855EDDC41F5649EB5144DFEB98E3A999884930E14 -32AC7150490FF034A143, F5E6E7AC94A82CF6B27F9E342C8857AD194FB64DDBE4266D, CDC6F696024D26231E8BC40C92B87805BC3988CCBBA27D4E -980553F0DB2FD09DE3C9, BCA068BCD3111C24FE9FDD27D015A54206D517BB7A5187D5, C112FA2BBC39D98C79A5894C96454A06C5C34EA1C792864F -1C80FFBD2918F71D9AB5B, 9E750C334DED6FFAAC74D1185D322DFB6F5594BCB5E2AF5B, BC61C2455D19888083341181579BABDAC79AAF412D0F15BE -5582FF377B4AE558D0211, 492C42064DF05A651DEFC94A091B00ABCF2E1533E6457DEC, DED03FAABB93079D3C07ED4CB28E90221DAFD6010CA1734C -10088FDA671E0B00A70633, 2CEE588B5B2706147228CB556F79712154F4FA207809F521, 430B869AC2DA27B9B1FAFB07CC8A8E579370A7A0E097143A -3019AF8F355A2101F51299, E9D5C9E2E355F9DAFD4B0DDCA5CB41C053B00C10AEDD26D5, A07616A2C2B1E02F72AC4FB4E12890F13887E0ECE23EE986 -904D0EADA00E6305DF37CB, 358937F4832832E0978E0BE0C9518111CBDF47047A4BF077, B571EDAF6EE9B3B0BE74B967383020765A0495B5EDD68A68 -1B0E72C08E02B29119DA761, 74202DAAA272F126D00D86074396D5FE1745EC28A7AAA968, 99B3EBDCE87A1E9C081A21861253DCCD51D5F5173CF4FE48 -512B5841AA0817B34D8F623, C96362B1AED8A70F5ABD1F154AE439F1B165088D5BF0B7AA, 2363439D39037C87C1C3E737B1FA0FE9E84D41BD8AC30E43 -F38208C4FE184719E8AE269, 2695CFAF4C5573DB85110E6DC65ACB53ACBC21D4E520E68F, AB2C22849B5064984813AF2C471BEBE9447B6A319D732A52 -2DA861A4EFA48D54DBA0A73B, D73BBD2BF48AC47C5455EEA3046F27371635BB8264DFDD22, 5C023C0EF11A49241E27AAA079FC647B623111FB61918396 -88F924EECEEDA7FE92E1F5B1, AFB562BDE1BE4E287770170718E06B857E7B9FF62879DF48, 2F2E2EA0D63D743906881655F1F7469B2A81CDDBD43FEA31 -19AEB6ECC6CC8F7FBB8A5E113, 231375F22AD94EB6EF0993155FC0A01E8E30CFDB62D4F56C, 1EDE5A40A5C5FF1776B258B03E7B3DD38810046A57AE4076 -4D0C24C65465AE7F329F1A339, 1708AAFD20DA03244B00A6267010C77FAD15234F5A43CB9D, 2B69D93C9817C7E12FF9F10856354F9C9E7956B8805B031F -E7246E52FD310B7D97DD4E9AB, 6D032ECC7DE6355B2C4277968F4F64FFB77A6585D5B8C08A, 90304AD880549852E86B134375B63F307DCE1D7C120EB901 -2B56D4AF8F7932278C797EBD01, 70041F2FA7E71EE9ABAAD729DEE8001DBA4274B6E8A24EA6, A252A69E8E45B7EF4C44C3DC7FAC532B8439099134DD777C -82047E0EAE6B9676A56C7C3703, E7C5460F58DC5D114E12583D6B87A40900646A1B35BE4271, 560366C270CAB69BEFCECF67E9376B4E6300745E28E1ACB8 -1860D7A2C0B42C363F04574A509, 80F589E71E2511FBAE51EE0FA40B56A4CD0339D4DB9346CF, 968463637B2D56BC0A1F5F0CD00530F51BF344AE2F7BD9BB -492286E8421C84A2BD0D05DEF1B, 49AC2CF9DAEB3DF41F032C6962E0634D91BD1E41705EEB, E7C3299D2565DB41FB1886B48551A93950D807B7FDE46EC3 -DB6794B8C6558DE83727119CD51, F783C5ABC9484CDF0CAC3B9C4130C5D3062D3DEE7C0B39EB, BBE01ADC101BE479A5C90893BF161FAF8D2439DBA08E82B0 -29236BE2A5300A9B8A57534D67F3, 5C399C782D748DDD7E9B274C1DEC3C06BB93110B6EDB4FD, FBE4F2D5F865CF09A1015D5E71859660DCB09327DA4F4B3A -7B6A43A7EF901FD29F05F9E837D9, BBE49D0B9895CF719498E41D1CD23727731CC2A1F1BDB0C9, B752ADD15DC281BE292655986FFF94BCAD55932871A701DE -1723ECAF7CEB05F77DD11EDB8A78B, B66B08E7FE54F21665F1C31DBF527F0CF48131A6D89D7EE1, 844685B2E21FC70A2D6BF028E0B7F6BA25F5E9BE5683647E -456BC60E76C111E679735C929F6A1, 387F1AE3040AADA6DBC37103451933A6D73D9DCA12535C30, FD0EF969D01634641C5F8FAFF487D1E65DE95CAA597F2B92 -D043522B644335B36C5A15B7DE3E3, 5678E92BFC22B762845C54B3E3155DCBC026E0EAF63CACC2, A3C75ECCEAF0B49710BD9025C187C7DCBB3F3732E2C38AB -270C9F6822CC9A11A450E41279ABA9, 3672CD5F8FF10276A373EC67DE0349E51060C44DFEB63248, 4C78B480F9BA40D9B9B1503842FF3291673A7880C0AD12D3 -7525DE386865CE34ECF2AC376D02FB, 35548EBCBBC608CA694A6F9D77D38666E900D43E024FEF8B, EC3DF7A06FBF3D95925793E3C0A36777CE90FA34BCC979C9 -15F719AA939316A9EC6D804A64708F1, D5350337EA155062FDBB4A09BAD22AE1D30D33F876862640, 8A9F43D78B49E827031FFB8159DCD1D168CA4B865D351E25 -41E54CFFBAB943FDC54880DF2D51AD3, 52891D9C22D3F199D9E050C8E55A028465EE6CA73B4727D5, C02B9CB915E6FC4225E2097E98A6805E9DE9CEB58F0789D9 -C5AFE6FF302BCBF94FD9829D87F5079, 65B821CE9EDA7B6A7DACAE7D90AFD5DAB636FBA9C71813FD, 9678008011B5A15B3742B487B2309A753B077E550C0D8F96 -2510FB4FD908363EBEF8C87D897DF16B, FF27A63200DF1911A3E877417EE4EE71B1817E5558EC58A7, C5C724C6FCC039318D1119473408B1304590558F5E120D26 -6F32F1EF8B18A2BC3CEA59789C79D441, ACE54370BEE8051465A3D920CED12FDB0C86E41603EFECEF, 153FA8B576F05C608A501D7F525AEF0A51596395B27DAD97 -14D98D5CEA149E834B6BF0C69D56D7CC3, 836DF3F54161ED7D9E81CCB1FFC2136456628EE372D66BC2, 3A26AD49F526F24D27CA705570B5D0EF02776D2B8DF0C009 -3E8CA816BE3DDB89E243D253D80487649, F1F6FA96B448D71EB3620CC54C8F7DA7495C588B0B047F22, 74E7636458522471FE144803F751B7EF86F336AD5E7F615E -BBA5F8443AB9929DA6CB76FB880D962DB, 47B1027C5632F9CAB63D60967482D63F5C1A692E87045D45, AEB954588CFB30BC61BE7D07718F2738CFE8389CC8CF95FD -232F1E8CCB02CB7D8F46264F29828C2891, E4EF44EDF40C7E6F82EFFE582ADA62A2C8A9882C93D0FDB5, A2667E44F4CED229FB0ED288EF6B4D8C1519C9E7CF5979F2 -698D5BA661086278ADD272ED7C87A479B3, D4DD6A1BAA0FD6D8C1824E6831770CB6ECCADD4DCB768262, D606087055140E3E6D4B4F66FE4FAFDF1ECB4C92F2DB8895 -13CA812F32319276A097758C87596ED6D19, 49687CDF22FB313E76334C926177FCDA997E64BE3F300EEE, 4E540F402040FBA22DAD815000841CAE59B26B88B082B9DD -3B5F838D9694B763E1C660A5960C4C8474B, 7176DCE2D6732DF549D2D54BE141977BC51594014A34E4AF, 1C31EB0BD5627F240CD59CED1CF94F20955A3BEC853F9B8 -B21E8AA8C3BE262BA55321F0C224E58D5E1, F3F9A0AC0A8B1896EEEEFB6126905BB7A69268CDA5ACCDFF, B2397C570E43ADA0432709C45BD5C109AADF1239D3518DE5 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 6EBD9D20C8AF039BD6A8CA2C2068D6ABF969EB3AF2756266, AC407B1923278F3B015730555549E6F64F3FBC0F5440A75 -64312DFEEE1AF5788CFEC3176D34C11F84E9, E5DBE83D7FD01A9ACC7553725ECFFA55533926FB4DCDCDF1, AF7DF91B7A520D5561BDCF595C42390CD94FA48B4D8351DA -12C9389FCCA50E069A6FC4946479E435E8EBB, 353D6C56E5ECF69F16AF53AF60954F5F7E6B1598AAC18BEA, 4731B702C12D4AA6F07E8A568084FCDBC1C410D2040920D7 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, A523225FF80140ECB9296C467CE66ED73047EE7DD9F27371, 540B67B4A06463628536F00BE0D0B2642DCC8A85EE3EAB30 -A912FD9E31CD7E3B6DEDE937884905E530493, 5A0A85A3228E96B67B936D8E3C08B98474DCCCFA779E9344, 59C532364C0C7AA8FBC675C9E5D8DAE6458A79D91CC12CF5 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, F599FA12191DC4D55BA723F3C5B7E0B122681D709E0A8C18, 2C479F11AFE2AA689293831A424624D64FCC16E05163F7BA -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, B9111132FB56D96A6BD6F717E5DE72C8B6A0226734F5D7C4, C66962871D610BDB09648540C36D5318766D919C3EE03BF9 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 39F2BA5BF229D8969C4B4B61D30E6CF4067D78CEE14DBC48, E2C6D16BCCB0B2F8D3B4F087A095316F0B29708C8C8035BA -357F023F0DC204F0CDC846CA921F1ADD8447283, 95D45E4F22AC8C413CA614563E9F0CDFA36110067842633D, CF11D4E28A1239E4F2F37FE999E67BA803D115F2AEBFFA9F -A07D06BD29460ED26958D45FB65D50988CD5789, AFD576CEB9FFFC77119BAB05DEAE60951D766EE9607C577D, A4AD53BB119850C123FCAA8F466D77E3F1F4794BDBD3DBEA -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 8A88F950BB15D51AE325B68464786CF94E0CA2656E6668C4, 5DE42B1C0ED6BFDB763E716AED6A0589120241C53AE79091 -5A4653CA673768565B41F775D6947D55CF3813D1, 81B84E7D179318CB07371CC114EF54888BF91ED7B62B6FB3, 1A8822C050E5EC5A1A2D6C8BC16BE7CC6632743E1C87C582 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 7EDBDE10D7742F241B407DA7A0FD6F66560C3CB047EA1AEB, B2B03A25D75DF8FB9FC35571EDE39E72B132B1CD46E74045 -32C78F21DA0F2AB093551B3248B38680448F8B259, C3DA171CACEDD73390CF73C58EC8A5BEBBC32CA23E14504, 5B8BDCFAAC9B31D7DC496B3FDD3E09D945CE52EC1290D1B1 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 26D93341ABDF0C2D01A691DCEB603675A8890A657F2F14CB, 9CCCF08924407E459FBDD64E53C8821C62E1D4CF2D7656F7 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, F40C7F5A83EACBD5803FE087B669672B1362C144F3CA1DC, DD7907F2FC556702D145A3F06C513A689751A35D0427B576 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, CD8615CCC6940B77A105BAC9345B8E6E08630BF9E6B824ED, A5F4124D72A33BDC44300B0DF60D88144D3A34AF7BDFE9 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 6BAFE5DE3EF007B49886B44956C8F10740A61024F9AD0BB2, 59513E67DED41E663C0F7949B1BAB1E9DB549E3B25134B26 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 2FD720275B457FAC36B16DEE98806A8C6161581872612E2A, B5178992E46E2FC3B6564E9F791D8B97EDF1247416C9A853 -909A469765F53090D38D5A7231073A03433CC33DF71, 6DE4503052B93A7BA7B83871D5D61EDA0C8940B4034E73B3, F04947E3B07CDAC834662CFC8BB15408737F0EE46130FA9D -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, D8B8A25E481359B1EC18B6A8324E089D78086113E46306CC, 5AB6798668BCFE5E5A723FE4B88460830901A4F53761E794 -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, A4008EF45D6B9090D00DC45954436D49CDFE0CF9EA7E69BC, E26F44D0727E656F9FF64E5467BAB53C8D1A859C03CF240A -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 826865A1F201476C4DB42269F60A4D88380DE53C162BAD, 888ACA27423898533BCF73F4CB770AF94F98C2C97CAEC00E -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, DF47F6B37A3DEA65F17F83972168A677E8D19BD453994902, 653DE5B921EFA49D052292599006BC01DCDA08AC67903B54 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 12F46CEDEEB5B20A40B9F0B27B24F64F7B0A357B47A5168D, CCED70021BE4DA1644CE3C2C35A28A8FABC9B423E154B4FA -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, FB88F2CE638B0321E4B5EF6EA75A3DCBD80C9EA72C6DF885, 4FBABCACCD52F4B5F95B37C956DBE8C35D2B66A57BA3318 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 2C504D902B3F3AB531C7CA35B5843B47B3F24F0C182D8E71, 39E1730BA7E40E62C7049CB3415A0C41D473D68CA10DA9F1 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 662C27534B36F34777ADCA9A149B55ADC7CD87E80695AAFB, FBCC89CC41777153AA3B74742BE0070A1F0AE078C98A73A0 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 94B47EAC6E59BAB57174EA87061D56AE9FC92E6B4B90B585, ED485ACF0354F2DC401EDF3AFD9D6EF10AC1795A59C58CE3 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 482F3E02BFFB89DF753B2DDBC32A1E97BB92C8BD8EB69618, 6C41A8AFADB64AD5567F2C8D24496CFF97AB15B6C2689CED -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 53B2AE0D5C2B58E67990EAF08CE5CCFDB5AAF53AD696DCFE, FD4E024F763AB161247D6EE105DF83013D09124C821EA86F -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 30F7AF97C4F7EAAC1E9C640CAFEA498C0D80D86B8625FEB7, C80EEFD9016B87C27322112D9CDC8658F8814B45797C61DD -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, F3E395F9E65FC8F2A72BAB7CF62BCE3614A6C036A1D51F53, 877720944B15F944E450AEC8FBDAF0FAEE4194D7DF755A23 -1.2.840.10045.3.1.3 -1, 7D29778100C65A1DA1783716588DCE2B8B4AEE8E228F1896, 38A90F22637337334B49DCB66A6DC8F9978ACA7648A943B0 -3, 1E23FA48E7E0191DB4AA4652D6D8B6FBFA4FBE1DBC03E7B2, B1CAF485DD72A51660AA6BEF908A5F4AA67B4F815E8DD38E -9, 652A812D4993781BFC7896EA385F19F1230E5C884E3668FD, 8D497250BAFE5F999B51439C87036E6E2369F6E7EE1650E4 -1B, 71677FF4A956D6C00710815F0E2F2EBFCF58D0791C11FA7E, D2C39D5BDC9244696F0FC8ABD20E269ADE1FA01AF52BFAE1 -51, 1258413BC02CE54342D6F475D033C495F689E97631952BEF, F3A5B133F5E144D0279BED33C5C41CFA645E9338B0EABE4B -F3, 90B2EA73BD6BC94162C507CFF47D621F3296DCD919E2AEEB, 955468AA0ADF61EF65DCF66821BC8CB7DE2FF494D9FF7BAF -2D9, 1DC488A1C10D7C0D329DA05EFD43CCE1D0AB784FF66B6842, BD067B0DB37F2BE7B422A0FE8C296533925967521DF158AA -88B, BD506B6E398F3815A0935D6D5AAD729850E0E4245EC66BE0, 6F080FDD26E2D6C044C4641342235CBE26EA00DB84A8111C -19A1, 6B755F7DCF2E467877D9BB07F452CFD06ACA7FD052426D42, 36B63919E3A90C565BD21FA2ACA76D9705ABE19A9CBA677C -4CE3, 9F58DB7E9C0266A75AACFBC5E2F965A60E9B738F41253053, F7BB7C4B24AA17A5FEEF8710F9C7D8F06A34C28898B5DCE1 -E6A9, CC4CA21AB54C882929C502247C1FE3AC6FE40E56469AAFAF, 6E7AB871AD29FC0D43CE70013594477003ECEC167A01F573 -2B3FB, 4669C4AFB377F9134B0CD92CA31119A9FE504795D07AD02C, 709F449E2024E3A3687B9AF11DE134AF0F82DDC95FB68626 -81BF1, BF4C06ED0052836D31BEB0F6E16193E18F86A690D1702352, D1BA0AF734B7489321A8CC0A06DBF40EC995CC9679E5F4BE -1853D3, 4C9553DE4E045553F6DCBA0E1BE19659EAD8567E4967745A, 7D181BDAF4642DAB130845FC201394247C7460B72402A70D -48FB79, 8F0DE746542BEBBAEC6EF314233813F6FA0CA6DA42A04865, E5A4DB0F06A1113DA8BFC45EDA1647DCA4AC0B01E321FF6E -DAF26B, 11D80C1F0120E4D530F35D01F8C102E2B643AB8EB3C3A48C, 33FA798C73B2C7EF498B55CDB81FFA0404215FE9AFDF6398 -290D741, CFACC6BD9513674E1E6693C65AD7E7C4B819C108379309C2, 92E963CAF24941896F5CBC300AFA8C0DBCEDB742C0BD5DD9 -7B285C3, 1CE5BCDA8312DE74FF27A4AD00F0E378AF7FDB543A1A38AC, 77F1EC3DBEC6C50C0C47250E48D124324617666148578CFE -17179149, 48D4DDAFE7B4414E03BDA5C2C25EB0461BCC8C6411EE544C, 21ECC929EC1AA0FBCF0AB4FE7CF5EB9FFE5B518868886365 -4546B3DB, 8CD1608837504EE4DA7259D9DA40050B198C9611509AC0F5, 7E87337668DF33E24DF1B7EBC6882928D26ADB416AA0E51F -CFD41B91, 80E41EFEDAF86A63C565AC7773300149839C703EEE69BFD3, 27F26B494CDE5804EE960637B5F1CAE93AC23374433DEBEC -26F7C52B3, F95A3D4E059E4B901EAC456B2F46258F5E9AA70ED6B4EEB4, 35303C1063282273C4C0FB95D292E93E502B3C3624CAE722 -74E74F819, 6C3E283532FA68CAD4EA82563EEBC0BD676B24E09C491C5, E1065ACA3D35BCE93B297B3433F2AD663A52D9BF99BCAB46 -15EB5EE84B, ECCF95CE6E1E282D555174E7F337DAD05C57B46B301ED744, D1CEC31B7745E2CE5FCF57FFDC20F187519CC7881D27C23C -41C21CB8E1, 2C533F144D84A3DF9260640736FFE6AC4E876FD3ED35CF90, 51059807E63F9A16BEF8757CC5685225F7C136C990EBBF2D -C546562AA3, 622C8F26952A98BCBEF0DC99A7773DFFC9D61D8D89942110, 677AB84D8B1ECE63CE59CB9ABA986DB0BBF1AB0DEE604926 -24FD3027FE9, B3DBE1C87F94604671FCAE260910D07CE901BAE01C7A1479, AE727F5540FD632BE144202A790DE27BED2153B33F531226 -6EF79077FBB, 429F41427C3332CD8E4F98B2CC452DD8F653D6F38E251586, 6DDAF594E56FBBDFA258314C526308B4B97D49BEE8D47A45 -14CE6B167F31, B2F526B4E678352172145A773D44FD7251B99E6BA0D8B847, BA6ED30053249C8F2BA21B7C84CD1F1C9D8CED8A662B453D -3E6B41437D93, 46234C3E159DDF5DE95599AFA134D65CB8DB39ABC61E0971, E8DFD69CCCD0EE922A8CC5610A4AA122773D3D6C744438F1 -BB41C3CA78B9, 1202926314F212E07D2504BDDD9ECC82F6E6A77C0051656C, 927A83F5FEE1E527448B98DE88D24C9D31CA12C9EDD427E3 -231C54B5F6A2B, 524BF29015705CAC2E1F9D4A94D82FCEC02C1F78FC10B32, 351875CB9A4D753B2A1BC7CD9DD4660276E1C39807F3425F -6954FE21E3E81, 6C0690EC441FFD97AC447E273971A2DDB548DF7B9549C13E, 60CCC30859E96CC4E4CA83830F6F39F5F0192E34C6EF612C -13BFEFA65ABB83, 2919D3D5F7DADE62A5C4855BA73F2F7129D58426B15ED47D, 80151B82F484544B0F6914C80FE14FCFB8CC7DADD1F36260 -3B3FCEF3103289, 328B2974D0059F34FF83A19463F2DC9CD9C2BD6AFD47E69E, D93DEE44221ED002ACC7E169A4EB803276487380345E6903 -B1BF6CD930979B, D73B313E64627F77C126A3C4A4DBEB338B756197E1546F91, D82D8EDB842387DC376C2AC1798F060973F65DEB1A1B4B39 -2153E468B91C6D1, BF4D518503AB8301F7C3E65B3CBFD65ED3B55A238953E921, FC0A61C4508643C3E1F08FF4C2A94E6A3329EF3FB2462B6C -63FBAD3A2B55473, AAAE6C6BF44EB8394E21E77354E47B6D466963EAD0105EA1, 987D595953A80FF22EF76BED3EC65AEF164B5C552534C27F -12BF307AE81FFD59, 3A0ED1693A7EC69D02A97534CCF5A92FC59CC49FF0209BD1, 47EBDF612029FD882F75D56C3CEF23E1EC88372B73BA9EC8 -383D9170B85FF80B, D1FDDD11055EF19665A9327EF77DAF08A5C708D2C7D691A9, FF6F78984BD0E2E7C155E883BF536EFED22A4DD8DBAC6717 -A8B8B452291FE821, 5EE4A854001FA8442617FE3D63E6DEFA7F625EBD1F2F80E7, 1AE5E1CBF08AE20D9E2AE1AF3502CEBDED8D85A3BC4CBD33 -1FA2A1CF67B5FB863, EA05EE691A3A8B9386972FECB9C88A873827AF073A55E9E9, BA1646EFB40821A1209F09FCEA085B5EE7D4C028DA54BC24 -5EE7E56E3721F2929, 5388157C9552B79BAEFA1B03403ED4957CD237A4749FD7C3, 3243F24B40FBD488033A92F9D61747AF5E3C6E59906E6D97 -11CB7B04AA565D7B7B, BA2BE0EF3A3867E78A1DC5F7A46040D11D09C27073F963DE, 7301AF1459A733CBA37D531B08B6D30030ADEDE5A9B616C8 -3562710DFF03187271, 9423836474F29A990EB83EE6EBE120F4CEFFC6CDF8C97D2B, D927F268B97D8D4129D9445161DAB74018EC7FE09DAE4734 -A0275329FD09495753, 3A97DE128AEF4424D5D7FF8A613260F523202DEBCA7E6C3F, 170798D1D5CFAFC833C97AB5C27F03566294F840ACC16EE4 -1E075F97DF71BDC05F9, F62740D2A134F5928EA09AEE9AE5199964C07FBEC2C69F2E, 5C1CE5CD0AB9C657605D583CC63644E3F80DF64A2D63744D -5A161EC79E5539411EB, BE92F2EB66F6EBA43AAC24EFEAF1921C5ADCFBE370B43433, F58252E97D6F81EDA139F6F6CF49B088F3CEC910219989E -10E425C56DAFFABC35C1, 9BDDEFC148391B46A89FAE5A86BA44B91406247EE59DC92F, 8918F3FFF5515C605707736C79687E2262FF0C6F00499D56 -32AC7150490FF034A143, 756E56B976407ADA0A09B17BE643CEF72165DDEAD981A11A, 1F86BDA0747F081EA6A6CCE4205012636AEDF472DFA5A928 -980553F0DB2FD09DE3C9, 1DA59419B2E0A4778922786B804EAC8235CBC08DDB52D9B5, 1DEE3E6784E34539013ADD569096CB65196ECBF1EAD55933 -1C80FFBD2918F71D9AB5B, 659CE4D8D65FE7FC23DCB10B1613B60C95834659DE874549, B7D96E178B596DB302C5CEA0E05033228638DD51E4FDD2A3 -5582FF377B4AE558D0211, 684489F5C933B6D3F2AE3106B7C9186D5D87E4F15AF34EC6, 3F564D463F777EAEB8ECFC2E8D1C7E43C442505AD2433482 -10088FDA671E0B00A70633, 50AC43C131D8027EBE454B2BE9D5BD3D710523A2C6433058, D7D6C95D21AB54C5CF3DE93C116581179A4257632D09CC03 -3019AF8F355A2101F51299, 5361D732347468DE80C46F1B5ABE27DF8238ACE27FDA1DDA, A577D16671219BF24003CC07E5EA0F07F249CE663F3BD0E7 -904D0EADA00E6305DF37CB, 74FB9ADBBCDDFB0D8E15F12757BBB8521F5153CCD5846D3F, 91431A9053A00C711483364C2A16C07FF42DDD54A9D3C858 -1B0E72C08E02B29119DA761, A0072F12118C8F06C5DF64215746D8E56C00FC848A4D24E3, CE6E2B2FE5EBE006130137817CF75A214577CD1FA7F33E50 -512B5841AA0817B34D8F623, A522815C2080C56DFA92C87545F0A3B10A84392CD06AFD28, EC285F2F8B6B617952183A9D65508653A0FA197EBEF82AA6 -F38208C4FE184719E8AE269, D2D1DD94C11844D568FCCE5E0C8E453CBAF3BA090559480, ABBFD4A449E20D71D348AED2E4AD1FA718DFED7F8FB32496 -2DA861A4EFA48D54DBA0A73B, EE8AC03C3A18B0966764041E98FC17699FF013CE9861D044, FF05C4E6DBF9DD3D9796399889E9F2D2A85D741425092A7B -88F924EECEEDA7FE92E1F5B1, D7471ABFC29509CD42D59EB8544E051412521026B3291EA8, 683C45AA6D0CC04B8DC4B88595985D54AA8D3B0BB99C902F -19AEB6ECC6CC8F7FBB8A5E113, B26EB1F38B2A765FC33CAB459ACF919A448A42B32D2948CF, 8096E4992C67563193A4932EC1923A15CB47B0E11004AB68 -4D0C24C65465AE7F329F1A339, AF967D6F4B6A5C7ED62DDA3398FC30E012103660C6AC8D25, FF87A2FA270561EEECB33B3BE9FDD0B2F39BBEE27E7C0687 -E7246E52FD310B7D97DD4E9AB, 1432FE27AC8E009B30C0ACA2BB5E5E2F064E46A3E0429480, AA8D5C627DC365069AE6F6A907724FC89C7C5D023215F843 -2B56D4AF8F7932278C797EBD01, DE0596576700F9A36F83D2E34CAE96706319500C0BD377E4, B388D9BB9052CB3703E61CF665D366A26AE2A3CE653BB75E -82047E0EAE6B9676A56C7C3703, 939E171B43E160A830943AD9DB3BE490332940DECAEF4112, 221285987780E76424A2622DA901ABCAFF41A0A63AA22BC8 -1860D7A2C0B42C363F04574A509, 6E0D64C6EDA8DD315D01570E8088637A3C213D7162F7353C, 81155652C157DE49E0E28462CDBCDB55C931D2AB41ED247F -492286E8421C84A2BD0D05DEF1B, 37ABFB2A28DB98702D435863FC63C0F3581541A0F4BF06DF, BED5755E192F44B57BEB8C9B94D48329183587AA06A246C1 -DB6794B8C6558DE83727119CD51, 49EFC64C31D9DA8DB212C58435EC164EAF9D35B1701E7C43, 4CDBD7D4FB9FCEB4A8EAEE4093C5A69F96529D5A46CB0FE1 -29236BE2A5300A9B8A57534D67F3, BF1D97A706326099645508C3FB8A3DAB6FFF6514E157E9DC, 7ED958958503820592183F53A32F618C2ECEE4DF6BED769D -7B6A43A7EF901FD29F05F9E837D9, DA86991024EBD31D184929D2316357A67791F2E06F9732C5, 5FEE6FE207E607D5878CE06174719613CDA7C2259E5F1139 -1723ECAF7CEB05F77DD11EDB8A78B, 92B9DE2B33C697F5553FD26E16B78F5D6F1004BBE83E1A3A, 957A0FA62962F8DEAA081EAF2E28EF7097D57DADF67BCBBD -456BC60E76C111E679735C929F6A1, C5B390192164CEE3515964ED8956620DEA372140401D35DC, A7531BA4E0C8277A9D2D0BA6348B2D7FD23C3DF16C956332 -D043522B644335B36C5A15B7DE3E3, FC3A49F0BA1BF90A2D4FA89FBDC45E57DED73C4366DA0953, 5D7646FAD707FD8FFE0D5C90359F798EE3D87128AA5AD22C -270C9F6822CC9A11A450E41279ABA9, D97737C4B84A2AE1A50C7471C35008CBBB02785697F8418F, F50509B1AE068C2625C08D40AC2B3CBD21CC2C815D1367AC -7525DE386865CE34ECF2AC376D02FB, 75B26D7065CBE96C3FCF9BCC33C76E755AA1F57B0B5F2ACB, 865C530313323BA4F0377D4A8B4A8E4061DD50333D2A7AAB -15F719AA939316A9EC6D804A64708F1, B10FDFB8F7DB064D1B3D07254763FD039234AC2C12F7D1D, 5C1E37118775CB54D918EEB1C5DD460D2EBA7019DEB6200C -41E54CFFBAB943FDC54880DF2D51AD3, AF079BCB1BE1F29DB96D0B00A39C258261180DC38D4F548A, 4DB6C29015A95D6A25689C0D2653F00D13F55C23EB5503D0 -C5AFE6FF302BCBF94FD9829D87F5079, D87515ED64191CD3EAE98A3F5E79C32C03C262DBB7E20432, 75F3D0AF2EF6196F939C3DEB47F12C3FD169B74B66793C78 -2510FB4FD908363EBEF8C87D897DF16B, C00B691E74535264B13C0AE5838B4F842686E1E7CE8B7BA6, 91FB68C3602157668378EDE588A1F9F6A3AE23F034676DD8 -6F32F1EF8B18A2BC3CEA59789C79D441, 81EB83ABC3BBC1D31BE19FFC6EA03BC6CDE4592FF94837BF, 397DB8B4C5DB1040524C86A94A0A0C9CB062CB38B2565463 -14D98D5CEA149E834B6BF0C69D56D7CC3, 46C199E2E0ECDCDAFD79748FCD519E124354A238C561B3DD, 9B74A34403EE967BDCE4B044E0BF56901EF9137169A2DEFD -3E8CA816BE3DDB89E243D253D80487649, CB6AD12E7E3B6D83727A41B6A6EA96F049049725D6C78A7A, 14114E9D6F2E48B9B96A4225FA9F436EBA9F40B4ADAFBD26 -BBA5F8443AB9929DA6CB76FB880D962DB, AD9F3F2A9FB02AFC6B4AB1292F72D9A76F45848D80BCE1AE, 450DB96B08194F29342607FD104616989FC0BD3E951615D2 -232F1E8CCB02CB7D8F46264F29828C2891, 276C46BB5ADED6589D2AA35A436F3A86581C98940D3F8C2A, B3F84CA8BCB50FA6E738353137FDE18104CF8FF7FFE3816D -698D5BA661086278ADD272ED7C87A479B3, E068EB3C17DBC667F7C046ED6849C6821CB0C8655831607A, 4D9D3470C8D02840BEAB1AF20DC8CD030B635D473556E097 -13CA812F32319276A097758C87596ED6D19, C52854ED05E859E27752EC0E1705F1B9AD73763A19578E19, F4637774A0A2DE2A8161F65972562F587130C00ADDCBEAD1 -3B5F838D9694B763E1C660A5960C4C8474B, A4841EB7D0827A01987FCCD69C8DA499571C2A392E7011A3, 84D12F5A14096D734563950AF99BFA947D924035B9DCDB98 -B21E8AA8C3BE262BA55321F0C224E58D5E1, 8533D1A0F5B052C5EFE988E8F6865339289A3498CCD78FE1, 5ABFE4807D12CDADC5626E9AB0386A10CF1CAEB969D88D35 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, CD1B051CE241EA83CDE437CF480D63513D8F4BB6A23C1325, 29DDC5C56BC407F4F657C3EA2282CA01948A37A0EC5DFDA0 -64312DFEEE1AF5788CFEC3176D34C11F84E9, E9231235CF94B061072915D082188525F7E2433A73F93A9C, 888666F6E18B5ED564E2115C852D283C09C31F4150B50704 -12C9389FCCA50E069A6FC4946479E435E8EBB, 7B95319DA9D477C9B86F05EFF49324CC23F69967D854D7B7, 557FBE072FCE07F8BDE558547904AFE7385FB82B744E5F5F -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 74CCAF4A84763ACD606376F56AAA69AC648312B9EB4FC8EC, 53B535FA530624C3A1F3134AD4A8BDE5F76390CD4A4B5F88 -A912FD9E31CD7E3B6DEDE937884905E530493, FAD8766E2C67E34C9510BCE4A86E4D0D7669E073207FABF, 6F98CD0DC2DDD2344DBACDAC7C95EE7D95ED40C450A0C831 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 9247B987651C0769A96AAD8CE5C012DD88D1420289F3D217, AC376217389E17E6A5353971535CD0F58FA8D139C03E37D3 -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 8D016406CA1B7EE324D60846687FADAF0F93237149C3D88A, 94498E736FF03BB7B0B562E77574BB09588FCFCBD04E8B14 -11D500BFAF40AC5044981798DB5FB39F2C17B81, C8E60ADECDE3952FF7B3C2DC5857138BF92932953B9DF1FE, 5FEEA0BD075BACA8494E37444105611D0E63D3D4D8CDFAA2 -357F023F0DC204F0CDC846CA921F1ADD8447283, 41FF7785E89323CE7A383C8805D67CF363BA702676F65408, C66A133D73EE2795DD27FDA8CCCA983152F70588103A53C0 -A07D06BD29460ED26958D45FB65D50988CD5789, 765D731D6B618A825FAC1C2AAA028F36C49CFCD7146B8056, B8ACE9E0163333C953D1B5E761092175DAAB393A94980E56 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 304FE9BE91BCCD7BB043F87FA3318D757986436CADA2014D, 1AD390130FC416F8B3FBB6011419838BFA9AB8A116A1E572 -5A4653CA673768565B41F775D6947D55CF3813D1, AF1D66EE446F8FBAD5D6FCED7E707E2B1B9FDB78EEA8F8CE, B044FD5C48767A8B94B9D515540CAF3BE51F1F96E16AE388 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 4A099360451BECE7699C8C4D5C2418DCC356AB3F57778D37, D5AA51CB4BA70ACAB4B50C2A7E7B012C241F0240BAB8AAA1 -32C78F21DA0F2AB093551B3248B38680448F8B259, 56275B6F17AE3E394724F506CB440D1F3BB6AD4D72655B0, 33C58D24BB5684D8A2F1312418416CC6A1BA21C8D1F1FFE8 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 6A6C6BD800052D7988C78D793D342753661E736BF1E9B925, 340CA5BEBF2885AF281548E7ADB30201D3843FD926DFAE4B -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 3CFA2153BB0A626A1650159CBB6C0242BE7FF5CE51D908FC, 4F7215B1CD6E991750763D8381CD4CFC9CFC47812F350EA3 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, E8B912C05E5BAF63FF84D48026707FD592A435B869D3FF0E, F4B4FD00A79ADCB3C36442FA23D6B9D7EE84E334C453AF26 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 7A851F390BC654E43A1F226680F0096CAA3577096B67F3E3, 7E27DF61B6235F9995F46986F61924B91D7B9D25E5A4DF83 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 694E6FA895DE39D60438DBAF2251BA2C07C344CD7F45B7E7, 3DCE28CDBD4398395AE30C672CED84B4A906B1E48F0717F9 -909A469765F53090D38D5A7231073A03433CC33DF71, AEFC1E27B7467501F0B99BC3A9011208245A7FFD75481E62, 326AE7AE1C8A6E91234754939C924A7454A9B3E7CE625230 -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 995068D95E4C1B33A36476D33A3A22CF124335B42B6A6A2C, 7FD98C2E4BF01F4C7264993B1955D76654715DE31DF90DB0 -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 443AB52ECFC216C1B35083EC52594F845A71DEBD2FAEEC79, D0FF29656327D4B18A7BA216A5CFC50D18D419F27A269C26 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 6223C45B9ED63B0B3F6BC9C6B6B49ED508FDCA2A1E674CA9, A6A02C36C4344E6F767C389E0D936F251687DAEC113D6AD -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 1FEA7E681A6B284360711F23019E64761FB8D336487C6A3B, DC3CF94E4DE6424E27D07F4278B125BD1DEF984BCCB5E2F5 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 8224FC5CF45639291D6AD0896DAB88754554728C03BE35C4, 6B8C370DB8B1ADC7824F62F32A8EFA1B20D37D816F245013 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, D4443A6F76D9B0E7E8C7D7C0A3FFFABEB5A075C1F7A65911, F4F88E8C65A975FD3731607390665FED1235A46E49AD7C1D -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, ABB8D834D05972197BAA6F279B183D653176CECF0169320B, 7DEFCDD7B60D82E7C3D04D0F1F55400DA53F5EA6C428C50E -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 33122019C1D101DF7A7DC9AC65C763636DA2F61A014393A, D2B4919DFC0CFED2F9E1DCFBE6EECF848DB66E93D31BEE42 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, DF99EBA3EEFCF77B10A6608DF69BC431FA2FD691DA968D56, 563F07673BC98FA54CDA6E049BA127646903AE40CC1BF18D -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 3291B8BB3236A32DE62F32F4F2A9551B1F91848C8DDAAA6B, 3720430E6B8D05EB1B36EE0620CF47FCE33A3CB139C77988 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, F5E6A8CD93AC0232D81493AE46017FFE18260E322EB3B61C, DBE0383384F4F6336702A8E0A2A90DA729828182E66B4F4C -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 9686A12B7818B4BCB5FC5F09A27CAFF5B5EAFB4AAA5CEBDD, 7E8A7A5881DAB56CA4A61623F72945802FD1C855742CC100 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 4B01554A4BDC32AB80E2E7C05F90930AE29997FD4025D025, EEC745A082CE0754FECA16E46DDB684D2A5C31F47A87334C -1.3.132.0.31 -1, DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D, 9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D -3, 6E43B7DCAE2FD5E0BF2A1BA7615CA3B9065487C9A67B4583, C48DCEA47AE08E84D5FEDC3D09E4C19606A290F7A19A6A58 -9, EFD9DA261826E62D1E9D4E9FA35E2575CF03A65D3BEBA73A, A905D8EF35066FDC102BA8E8033B6B232FDCD0813A66E7F4 -1B, C43153C0727332D6D4E0BB2F6AD57DB9E96340561EE3DF2E, 6B63A459C35EECB52A88837389E4F6068CDFCD685C375554 -51, F5C2154D20B859D0F6E1D8FC73D288A0AFE8C614A5DCA1B7, 5903C11FCF0B444DD3F1F33E083E736EDEE94FEA6EFC8E99 -F3, 86F9578E3E304A9ABD8F3A4D025ABECD0FE530B72CC44C7F, DCEC3744A792546F21F6B70730B755E39B3B0C7B7969192 -2D9, CFDA6DDCF16AB607D20D1F3AFC12936D85E4E75E1FCD9A5D, B89C3407150B9B9FE91B33CC066FA3FE0F8EA150538F43FE -88B, 5B1FDE3B49F008CE5210D669FCFB99668CC63C33EF68522F, 5B5F2ABDAE0D05BEB00D8681C71B45934968163303C07C2E -19A1, 6D6667B0228CA51466BD4A8CBAEFA668A8EE48A7A4AB54D5, DAA4761A13C79BACF13C320E68E78BE2690D7F15A04C5373 -4CE3, 30C6646A440C9F278EC970285573F50AFE31A2679659F48C, A24331F6C131FC4C2B4268977F51FAB478B83EA3268C733D -E6A9, 346D1E13AD933E3FA0EB648FEEDD49115C2A064BB7916470, AC0063A03BB63F5CDDFD07F2285E87D97B90564F194CF66E -2B3FB, 1877400541983385C0AA60D7FE1EB8681E3471516F53822C, 832B7F789A150F7162786C05F61B3FCA47D2431D9F03EF74 -81BF1, 63068DF74B4774E8C8C1C03BD14BFB085AFB7A768A70B96E, D2D1B3971D24A7652C6BD5955500FD1C0B2B5149A67BB923 -1853D3, DC301D630FF913C4753A1D31297ACBAD3E0154674B7644DD, C5DEC487211B5FB007A094735B0C52BAB9340EA2B6B3B0D4 -48FB79, D93618C0890D42D475C0143DA46B61DCF95CDD3567056BAA, AF0938EA82338B130C95B2E3E7F0CC33C1A2A4CB409381FB -DAF26B, 55099B878692DFF2D25003E004A95E7136F73BBCA7271931, 4DD209BD6F047DE63FCA8B2C7961BE1F16BDB49424EB5D29 -290D741, D19DC848A352281668F48BB256659213EADCEB612A5E076C, 29ACAB9734A72738F35B8C450AC4108175D35E20D84F0F49 -7B285C3, 6EE742624DBB2BAB365F7C08E176299407648A334BE62056, 752843823F1C1890EAEE031D40380F095B08FA947FEFA070 -17179149, D9741A7940B04183115C0F63D830243AC14F9DEB9D252E16, 5E2B642E3AB5C64F48C37B77C4E68F64E650F0F6C32C9DB0 -4546B3DB, 964C4B9AABBC473F90C6AB78000F20BA2AF46D4C28713417, C83DD6D8F2FEAB7F520270EB0DFA72ADC898C0C69028C89B -CFD41B91, 298B639D09EE96F1F336EC5618218FB31934B3AC4F3A5B14, 269929645508A9503A1AD0E38BD5F48C4C6A6CF454286C8A -26F7C52B3, 4B4C0B2DACCE768714E43C7B051AAE100D46B695768211CE, 2EEA9F3F1858E04F22035438B9747D24C18FF3C2E5BD281A -74E74F819, F1303DF5DBAD93D0C4C8B8D073AF65B82B96A9CA72A63143, 6E739BDAD66C881F5E3B1A46DCAF16C01732783139C424FC -15EB5EE84B, D31395A970BDEA634B072DF408FC106BB24860E4F2E5D27C, 5EBFF4EC62B2A455DF5FCDB060A34ED31B5A11F30B3B4076 -41C21CB8E1, F3175CF7E473A07F54D118C52A76CA608F81DFDEDFD6F79A, 375B21BBEA521B01D45D0CA267F5566EBEAA00C383EC1D05 -C546562AA3, 874E93E3B0D8727A5BEB275F267DE24E8A97E49DC301FDED, B20E688317310FE15E691E1365B9DD69D4D042CA3E7701D8 -24FD3027FE9, C0DA6A8950FA34A06A69A081F22EC0C76532B87237B9D76B, FC912D72209A1B5AAAAC4F16C053EBA517E659904AF6C7EC -6EF79077FBB, 5C3E57C9F4EF59898A8F753D87F5C1167D75ADF022CD3D47, 94E0AC1D266CB0663832C65A1C0F468E8B2EDB11C69562FE -14CE6B167F31, 4CB9B7A07D189192A6AD5ABD897755EDAD80E282D2617406, 87E05B68268EB4272A670EA4E899742ACD85FC2D7B81FAF7 -3E6B41437D93, 776F91EE0FAE7F74930A55FE024DB42AD0FEFD6A9B2382A8, 8966886F1246FD686BECA845A95002862D0475E136D15CDC -BB41C3CA78B9, F4759F7973A32EF343EBB084AF4B09F2BA4D0B4B8C285BFF, 81BEFBB31661BC551DD6F789B47A91CFEEE7B6329BB01992 -231C54B5F6A2B, BE457C32F13B2DE8399E3BB7DF02703D308C2E2C663DEC30, BCEF85F70D01B723932063B501173B756E7CF48CE096CD48 -6954FE21E3E81, 23563CDFF1F135177E0859993BA08B5AF302F218FDA3B099, C61FE6C3ABC332190D45B81DE30443513F1A1B7EAC08F8C5 -13BFEFA65ABB83, 9DE7CDA9D238375477D46D09F2BE196AA46F1F384FBFCE15, B730806A74576AAF57D8C9458D94737C2010AE5A2DD468A7 -3B3FCEF3103289, E7F406C826E0CFFC7188AC849E5E486352AB744ED584B7D0, A8DCF81FA6199C1114C065807EF6807A877679CE0A510B2 -B1BF6CD930979B, 21C34EBAC021FFD9BA89DC57414C62A66DC57753C22F5B60, 3D2D31571208C57351491BD91724D5D3ADB368C4E7C5A40C -2153E468B91C6D1, 625C621767BA994D4DAFE3E45E995F1C5AF518F691C6EDAA, 3793FA6ABC180C88647F80A461D44E2600695A2924DB7F84 -63FBAD3A2B55473, 9F3FFDC4D3348BDC6131EAA2C7873FA15E2001DBEF92F1DC, 61A3023A5F351C1C2DD210A84905D8101A6E599587FA333A -12BF307AE81FFD59, AC0E1CA19A539E154E9E0522CB8AF1A749917C4772FA3E8, 633B312EBB9FD9DF3DBFDEBF7D32CBFEA7AFD5FF7CB550B1 -383D9170B85FF80B, 715A31B181D923791555CB129686A959F8D833F14343702A, DBFD1566A44512855905CB69FDBC47EE09E3FDE2C8DFA7D0 -A8B8B452291FE821, D1F7ECE68EB89162204329ADBF3DC389882CF69051DE5B0E, 135992D45EBA5A789A1DA61740BA48FE7E3CA694DC95F186 -1FA2A1CF67B5FB863, E68CC2151E7D99462EC2AED1D6BE5E6B2596004C187C3405, DDA39B65B5A0CF1DDC6A585892112DC1B067246AA5F2C5E1 -5EE7E56E3721F2929, 382718B9F62A2B0EE97381BBF84F66E9C09B271B3D6B6CBC, FF13480361FEE388295778A943AB669D71A857E167980C4A -11CB7B04AA565D7B7B, AD7939B78B5CBB3F9658835033C16ED7319A9E9A1BD7D45E, 3C12776204D3A575B55AA9671CB8517A7C215A6DF40DEB16 -3562710DFF03187271, 73770798DE378B361060C4B35342221AEC1C1AFF4DCE5CF0, B936CA8424704B9EC354BB63974881ABB6AE821718BA1530 -A0275329FD09495753, 77E85A24D616B401D36AAF297BD0ADF339C805D1235A2DBD, 7FDC5AFCD79C64614AD22A89F3655D45ED0A47055FA85C69 -1E075F97DF71BDC05F9, F6DEB54E37F1CCDB8D0FD0DE98A86E7BD15E55795CF0B222, BDD7866D308E1ADD01C783179745B167415D15F71A0AA111 -5A161EC79E5539411EB, A56CEEB0E47115FA16C180C028FAF557E2EFF890F32CF5CD, A6B2BD62A6974BBF32EE11AB98D214F8C10DCBEAAA5ABF14 -10E425C56DAFFABC35C1, 84336AA53F21AF9B18278CD8EE72F82888C5F23EB64BACA6, 948A5332AC493D980E6C5F996094D29A13A1351ED4F7810E -32AC7150490FF034A143, 7B56BB52A92E18858BB5D24E2639FF5A3EEDD4DCD31B6C86, 1B23E6F0EC22260A4BEF61BCD9EFC5B876E16D9779188E79 -980553F0DB2FD09DE3C9, CCC21ADAA76263107DDEED5B8B97A0EADCC45350761BB7E7, FF173A420064625D5FDE9CF714A06226CFB008C1913DB7F5 -1C80FFBD2918F71D9AB5B, 1816E3AF950638D34ED8BE632510F3CCA95DE58E128795CC, D9896E96B8CF93051AD003A5BA262CAAEEE24026A2883B2E -5582FF377B4AE558D0211, 3588C591DD864D6308CF7D2964407F41938587EEA2BC6133, 6CFD24E232A29623A6BB085AA16D4315BEBA33643BB86B58 -10088FDA671E0B00A70633, 41F4DFDEE714C958D81AEDF5CF7D7D26420945D3C90D398C, 80409305C05E464D7336D6273264C63166CA6DDC73E1D930 -3019AF8F355A2101F51299, 24C0E00530FC7105DD0F1A16768870990E4EE528F5414293, 18A094C8630193BE6ED3E5C41027F790745AE9867AAFB40B -904D0EADA00E6305DF37CB, FB06B9BB846765F41A96D33DC10689F88E852261ADE7B77, CC6BCDC7668E4E4E153E68DF516A9E46B31876285873C7C -1B0E72C08E02B29119DA761, 1215B87298D4E6798B378C6C189122964115D4CEE5C403DF, 600134F69408188A14C850FE94D2E24FD196EAC81B1B67DF -512B5841AA0817B34D8F623, 19D02C90BD4DA30CC19EDD18A29F51764CE23FA6089E036, EA5D532EA9C275A51C96CF8C76CB366C5C38D37B7BE64F41 -F38208C4FE184719E8AE269, B302705680863ECA0EDF343C835A29FF5CE21E0867FEFDB0, A4FD6781801393F8766CECCC52FC6428ADBF8426C6D6961B -2DA861A4EFA48D54DBA0A73B, 14D814AF750996A1A9026A5B4B12E2697CE7C68B38D727E4, C89D642D2C983425DE607FF0926E9FAE73EF14741FA17592 -88F924EECEEDA7FE92E1F5B1, B3BB114E1AA36D18EAAD93165458B4EC61BF83EE919EBB81, 1A2D992AE62F96258384AF45581CEF9337083B7A6B94FAD9 -19AEB6ECC6CC8F7FBB8A5E113, 90D155113802CC481884B3F7712CF8DD08667815A2090C7F, A0FC75710670CFB21FE59D60E351FCDB83CB30AD2189EA2F -4D0C24C65465AE7F329F1A339, 8429BAA708A6F171099F235F30B5525F39E3838390EBCEA9, 9E10BF5CA04D93E8461EA2413F38FE65DF09CE4759C8891C -E7246E52FD310B7D97DD4E9AB, 41445C1C651F8AB8ACC4C6766B7833DDEBCFFBBD89406E7A, 678421BFF190D7D64B3F3C1A3F74E1B1E05208A1D5FCDF5B -2B56D4AF8F7932278C797EBD01, 534FDDB9B299952C9A5009ABA0C83F8E524ACF4717B0515A, CD9B644C0FEF94E56D42CC6456E95E1217CB5E2D9BDB4F18 -82047E0EAE6B9676A56C7C3703, F77D8D90346CF1AADD8385B1CF0B2CF216F40439E80AD5A2, 210540B225EF87C8799CF7C1B3ECA12DE7123C1314CB1881 -1860D7A2C0B42C363F04574A509, 25CD06A397AC0CBA041107AB5EE9D9E190A96800DD8E73E3, B34B462ED6AD66F005D1DBEECE653921CDCEC5FB9808AD6F -492286E8421C84A2BD0D05DEF1B, E4C7A542D5B8BECD3069E0B03DA41EF2D5DA4BC97EDFC5CD, B29C26A2A17C61086E3EEA503DDAB68F09495CCB58AD4046 -DB6794B8C6558DE83727119CD51, 851BB241DBA46E17FDA117BAABC729607299600464CC9860, 29B45E3CDE8A8072901245100DEF945A8F0A3B1FB2084047 -29236BE2A5300A9B8A57534D67F3, 368603D16FEF69C3D7A7FBF2E6C3F9768018FBA97B90B68F, F456A23FC42F5CDDF9962B7432E6E1A2B55ADF9C5BDE6EAA -7B6A43A7EF901FD29F05F9E837D9, C03E263FF0711F42884AB1B6180D8ADB409D16CB4833DF3A, 56224550B464342E21B7B8A78CC28033BF9A7738630A12CF -1723ECAF7CEB05F77DD11EDB8A78B, C5E63375552FD6F0FA288EF6B26CF83402BD0026B29D923A, 46CF598CA12466ECB2AA9E3DDAA167FBA38BA4C8F1E55D63 -456BC60E76C111E679735C929F6A1, C697EDA890BB786598657A406F4DB37180C32F6AF56E60B7, 13DDC9313691132C08916AEC87BD507A2A33998397CCBED9 -D043522B644335B36C5A15B7DE3E3, 41780B2BCCCA7FB2E1D12D4A0765C061EBA08BEEE0EAD287, 8E9DCBE50BCCC1FF264085476DA328C0186E40B25B2837D6 -270C9F6822CC9A11A450E41279ABA9, 9242ADCCDE67779A7F34DC68B433F019E64A685057ABCB7E, 6C2F5C85AD92D0522768FEBFC8D8845C0BA0CE1E62F3AB6C -7525DE386865CE34ECF2AC376D02FB, 8A5AF11F7C9F67FEE6C43D48411F890B6B59CEC296AF5A59, 4232EEC0652C314821E44104E8C4E9357FAE8B69C2C3784E -15F719AA939316A9EC6D804A64708F1, 613A6AD0A7AB728496D15FA3681D7E52ADA48B65C5A91C3D, 53BCFB16BA13CDCFC70C03041D623450EF115B10D0A9DCDE -41E54CFFBAB943FDC54880DF2D51AD3, EDA34E55FB33190C07ACFC001AECBDBB7459A4A8635322F0, E8F5AF65D167FD8DD38BB974622E84ECBB3258D6D657E63E -C5AFE6FF302BCBF94FD9829D87F5079, 6B5882BCEFDA74DD7832748FA319136AB135EDFEE25B5AC8, 5642AB91486AE3510AA779712AC83DA823338BD0EAC9DF89 -2510FB4FD908363EBEF8C87D897DF16B, 4761FC714C7C8BA36231883452894E2B824F68FBB119F6F7, 2E0F1714C021D674918CF7306811F7598818353CF52E2C08 -6F32F1EF8B18A2BC3CEA59789C79D441, 47907B8871945F16FF1D877B6D274CC51C26E8C0B5812449, BB3EF7F2370E9239B60D440840996F536C106588CD376803 -14D98D5CEA149E834B6BF0C69D56D7CC3, BB35501BA316192DC2523DDD92D4E8DE5ADF1A1CEFC9B842, 5BFE77034CBB0AAC5C68242C8CF668B101E5EB88E9D60707 -3E8CA816BE3DDB89E243D253D80487649, 632F233F75E8C41CA41504020F513B9619F8EF62F9F8E8CA, DCA5D318142558FF7380A931A9F380F4158B409771829567 -BBA5F8443AB9929DA6CB76FB880D962DB, 812023E5F8FFF9AE4F270DED0A93212DAF746D04A068C672, AE633540CC3473E55AF59F29468B930AD80698C020DD8077 -232F1E8CCB02CB7D8F46264F29828C2891, 2D40C12BE5A4BDD4864432491F469EE0515A365ADDA20E98, 7693DE263189E0A6C058085B346E2B28FEAE8CFA53A08653 -698D5BA661086278ADD272ED7C87A479B3, BC17FA97E500E11DE2040841156C236C5B50B083F6743CCC, 854DA2E4B4BC0E005588251FF56EFD943E3F6CDA63404E63 -13CA812F32319276A097758C87596ED6D19, FDF431572F8F6C70E26F4E1667791CB7C788A3AF2077F486, 3FC5F279490E79631E5C464EC87BA348B2F3DFBFE5C53275 -3B5F838D9694B763E1C660A5960C4C8474B, CF9FD6FCC4D63A8988234CB1DB349809D108D6EA72B8D068, 4C8061C1538BB7E4E018B223758863C43002D9FBB777646A -B21E8AA8C3BE262BA55321F0C224E58D5E1, B1FF38415EEA69E844DBAF5274DAA77523B6563ABFA9C9F, 66AEC8BE518D9E8C036EAF0FAE2990545F1ECA08DFE9A0BA -2165B9FFA4B3A7282EFF965D2466EB0A81A3, A21086BAB9D1DF2A0259255AAD4D49AD5A4E514986BD10B7, 549C1084F054B28BFE07A44FD38C3621836B96AA6C59AA57 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 950C43DC2015956021E1E38DF22C94C9944B73250878B380, 81D93233D920B8CBB22F5B53EC645942244457967623669E -12C9389FCCA50E069A6FC4946479E435E8EBB, 4CAF78B49108703CFD96FF87E1E6DFAA8A40033D523138A1, F791209E255634FF172FB280AD3537A5E10D02D5F85F5554 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 4B490183B3C518B670760DDDF867137D768E4824D913C23B, B401301883DB08F6FF36B7582708DA2C89DFD5283042DBEF -A912FD9E31CD7E3B6DEDE937884905E530493, 592CBD1F1ABA4284205098B1C421DF643422DEE2F89F30CA, E62ED35141F00E0C5E60445AB1A76E095C266F19A9F62A28 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 9352D3E863A556BA64067E208A7D4FDF2F75C28D2D93957, 999C48B96190458BDA02892DBBEABCE8FE3131E4E8D6CB6F -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, FC98836DD2E44A2F03CD685CD090A4F8E2721C2951EF3CB8, A8FE4873927132C8127B43FA7F8CD65B6C97201BD66C5E76 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 576A2D5AF63344BA2F54489BD96E2A224D7584F9ACE64F31, 100E6F6C19D8C6EE1DA3671A322129D4B84502C2A34BA1D4 -357F023F0DC204F0CDC846CA921F1ADD8447283, 93A70CDFB2A21CD347F60FCA1A32D1AD8A21E7FA896C58DC, CFDB6888894F01998627BD1A73E1777E464AD0E70D0F3E10 -A07D06BD29460ED26958D45FB65D50988CD5789, 6AB7B1F4AABCC1A6E9455EBECC6CB79CFA79468D1426F89D, C7AE82081DED3F49CBDEA084A216A680357A7E37E08D0609 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, B493C566DE0C039C30C0F83807B774C0EDDA0CBE62F4D00F, ECDC1EC47ABA5683353DC5912D3671EA709A03B42786E2E5 -5A4653CA673768565B41F775D6947D55CF3813D1, 483819D8F9F22BADC24232BF071255CA8225EFBF17045921, AD9689A4C5F350CD21CA7A4D25104D2CAEBFBA8A012EABC6 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, AD5793EE0DB41896FBCE7297F32FBBE5281E88A52124FFDF, CE55F4FD1B712D8B95F44FB57B53EB2ADE6B174697ADEC06 -32C78F21DA0F2AB093551B3248B38680448F8B259, 790F304D1652F1ABE92225FCB0CA77A7A6B5B5DBB09D73E8, 770F7FFCDB56ED3309F2A88E71DBAD1F1792692138CADB3A -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 6564232BB8DF6D97857572DD12B7F8AE5C7B9E82A304AC85, C1055BF00A7A2BC400A1E66F581D1EE180F265E554F04525 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 39725145228014EA78D0D10BD73470798D0E67FB8890864, DAF9EB4C498033EEC08D2724C8A0B96D47B02808A3D431D6 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, F725C8F6DEBFDC6A0C5683DAD21C44D28F035661C53ACE4E, 6733A50B629A3098D17CC905BAA9D880A69A132F8FF4BE1F -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, B02E6EE478565C47217C3E640F94031F232E4B70180B570E, 3CF7F6A300D1595A128184D6B13F282CA3A2671044B790E -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 5438ED4C298D50ECA4B8DF059B30E72BEF6DAB960C7CEEE5, DA8C65910B867793E8F69B88D4C82C75E9B422DC08A83828 -909A469765F53090D38D5A7231073A03433CC33DF71, EC4A06A76923441A7ABC149D52762D10147A1233AB90C91D, F7416D0F40FC842A3EF07A9910ECB947DF41F6E786630DE8 -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, F59906EC65171F972832205F4DAD4469FC2BFE582B62AD7E, 7232192FA7228E0CD131ABB8A5E19E1C4D8D0BA6871252DA -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, AB50A3658377F1AC2F4189436A176524B442CEE9E5023170, 70DAA2263BDB34620AB81F816304E64E0FE87BDA47EC0CB4 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 9F5EE8C6D8CDB797126D6D427DC8B01048A40A6ADE1EC474, 4C240852E4430A39767C4B8DE026F107878201EEE3183265 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, C79524F8DBF08C47BB5B4728AB3DBE229A66F1C1E4469A02, 8AF998F1D818D9EDC67083E7256E6E5D08CBB96EF9D4157D -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, ECC4947EFF037C4DB083D3B553B14FFA0A17CAC82EF25ED3, 65896478E105976FC75DEA882885BC72AB3E87B2F7D06B0E -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 7A881AB8F562E2879923BCDBB6EB2FF76C083AFCBA0B5455, 276841B6E735D315EA7D9A608716535385C27E4388363577 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 7D59F453AA6810BE44994732D3F84DA1BDEB39346F27B722, 85D1559E349DE2B6D0B274356731102E97331E01DB3CF69A -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 254235F9B7739F6FBAA94B9E731CDC8DEC421266CA034F29, 3037F0FAF6715E36EE4DC6202ABEE2053627301F9A9698 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 14126B416F0EEA2C427A326DE64725FA3497A516C212AC19, A8016ABB599F988044C0E8F09D634F04FD4F0C12C0096413 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, C056B8360AF4DD47ECEA6FE448EAD9B49CED7590513A9B8B, 90CE1ED88F7CA49E8157D5A9E87A0E93FAFA03D0E6CCF245 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 7A7B3BED155C2449EAD85AD79EC76FA291A6667FDB2332E9, FC8AB4AFF7538F26A66CECEB6DA986104259AF4619E3D001 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, C54C90AE878E482C5792D25DFAA4CB99BBA5772387FD8B6F, 288844752811170E08F6E46E9BE549B54DC4042F479DC2D0 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, E59FFEAAE5B8DDC5B3FC818F9727F582F129BF1564286703, C4496626583D5FBAC59B57160457BDAB3D4511D265277FF -1.3.132.0.33 -1, B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21, BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34 -3, DF1B1D66A551D0D31EFF822558B9D2CC75C2180279FE0D08FD896D04, A3F7F03CADD0BE444C0AA56830130DDF77D317344E1AF3591981A925 -9, 2FDCCCFEE720A77EF6CB3BFBB447F9383117E3DAA4A07E36ED15F78D, 371732E4F41BF4F7883035E6A79FCEDC0E196EB07B48171697517463 -1B, 1989153B5F6636B610854BCC50AFC929E914C03DA51A4A8239F4865B, B9381E6DC79B58E0443CDB009164837AD450A68C19192F126542796C -51, F92767380D3731F228A44AA785B413FD807DBB30FD6E11AE45D1EAC1, 82FC1287153C3E5F1CEF13FE31291C43CC54F10169FC9CA22E5083A6 -F3, 9799481F3A9E0297A75E32DFC88512E777EFDC48E977349C4FC68C74, B6E8E987474C0C8D13AF4F7B8AF9A1F27667ABE8D6571E71B7D8359E -2D9, AB94C2D7A56E82D79C168B3DA45E33D72D45A5B25FA4AB096898C10B, 24899FC8552974E40FC2A5EE9690D11BFF96A38D84FC79DEF9EB70DF -88B, 5AF579EAD2DC6E6B52430A2F79A3BCECDC2B9952F353AA12AED13393, 30379F3012A1B94F83C5B4AD6580D7C8D42001FE29FA6D06F4C49C96 -19A1, CDC4EBC6434E16ED2A94AD8FC5325D69EDBA5FC3F94940C37BDFBB93, 6F3DD0D2C4CAAA54DE14DED296B8067EC04F5EE1709C27E90CC4748B -4CE3, 362946F3E1813D4DBADEA15A78CDF4D04B9DD573B8CE48E082DD249E, 4632F24D670E17161BFEB43737A29FA7EC19CAE59C994DDF38341A05 -E6A9, 198F000B110BB2776BE024C515BC56186CAE13FFA1F420EAFB7D1368, D47DE0455E35D402E5E7D7689AF837621F1E5067C7FBF9653D6D47D8 -2B3FB, EAECA0011B1AF3CC2C81C542AB82C18C5046B4DD642091467B05BAD0, 823E2074A55D4ADC32787285F42B9E6186D38428996442042884E2DD -81BF1, 3FA4321CEF75D9C148069871B21E0E7D621C008CC1E3EB41CB63E306, 674C08B2AEC76DB3DF5FA9FC5F8DAB6CAA14C605536B0CBF26E91E17 -1853D3, 750F11C5424EF88D236F8C0B8F3B858568333C2ACF4C17084FBCB243, EF8D1C2B5094B210852D8E751F28E23FAD4DCA26B985E54B527482ED -48FB79, 6129013EA424933A18B3986C9DCC4166C7A1FC13C0022358894D6F3C, 7251B2A84BB265DC493617FD712CB971FE10C6903FEC82CDA8631312 -DAF26B, D82B5F8A652AD0B923557D68CA5CC42CFFBDC73DF3B00AA8F9F3799C, 5EFA86F7149BCD9FF4A5227C1E331487B9149262561A94E635999A6 -290D741, EE88DEB98E68A56E4046566812F68193A1B8856D09CCF33D6EEBC446, FE5E7FE985E2DE483CD0B6481A1A1900CC3DA0567AD7BCB1AE54B597 -7B285C3, CE9184F33548BA664AE32AE3613640988CCAC3A4A6269577040633B2, 6AA351D10075F5FC6BBAB3E1D6592A258CBCB6D1D6C828B880043A8C -17179149, 3D30DC993405651CF936A840EC2758454B71AD7DBFB9EFD3216B46DA, 8F1E7837F24D3E04F734FD6275C252E56B9F61F40056AAC2CDACFC56 -4546B3DB, CD6075F48F57C66341B821BB05D75E8C5F68C0EC9E5C901DB6E16A96, 2ADCB9E834A6536D26C0325D0A9B8A05F32523B77AAECBB39025990D -CFD41B91, E700466493B51C521C4A7DE071BCB89635ADA469B7CCFBAEDE84E6E7, 2DF8808FB469DF1A5762291BD71A6F47D5A87C8F77849443AD08B3F2 -26F7C52B3, 985809BF0BF34DA2C90ABEDDEB5426E779A05144C233715EA2F1E2C8, B42E15230584FACC51355E602CB536A89EBDE854C1B411313DB3292F -74E74F819, F4183C3B4AA8694A581F6FFC811E8FA2973DB1CA2721C1771DF7B741, 981354E9716A0B3CBB78959211642C5AFE7DB94E7D874B716EDC96D3 -15EB5EE84B, C90D782309B6C358C6A040936A326BC4FBDDD5A3016CD04949F64941, 4C08C351A44BEB5608AC72E9CFEC3BF6D63DDC289023E067870058F2 -41C21CB8E1, F15788A0BBD53A46BAE249FE197DD5DD6FE0E8A0FAAAF9F31DFE0C95, 11F66BEB06E4DCB13B97EB80D31402734EF078D341522662458D33F1 -C546562AA3, FE978F3F57441E1E0999BB12CC774E32D9C8928EE7FF589D21CD90C3, 9E7ECD938870A5E3AABAE92FA7535707777D9D80F9A14DDB31042A50 -24FD3027FE9, AFD87F62D228450B96109E5206CC0553D9DD8760A9FF052B23095339, 56F145952A468E31AB06CACFC7850EFFEFEB6DA967FD39C4FD8C89BA -6EF79077FBB, 5ED036592516527B62775793FF08D45400E50F198583F29BCF6A33E6, 2B9073611B24F7CA6255B95BCCE19A3D9554AD10C7F188F78DF5065C -14CE6B167F31, 60A0A5676AABAAFAD67595EED957F060A8D9342985CB607BA210DBB3, 3AB05338FA134C4978673E91D790E6F5ED28A46DA9433DABEE72024D -3E6B41437D93, BA33BE7DEF4864D1D40DB7E258658258E04AD1D1221909B5BCDEB9ED, 96DA7AD512B69C87A3FF6AF89C146C73612C8FA17DA6FC39ECC2C000 -BB41C3CA78B9, 56591F0AD7964EB69D2C422C7009014FAF45D3C4FC4DFFB66170DF72, AA3DCF0450F22193AA586D18090DE2C2DC456E7017701C79EDCD4BA -231C54B5F6A2B, D4423739B5D2E81AB85B2D9F9BFFFA4D9E2E97238642A1C2A5FCA5B2, 281817D29BCFB1677208EA276B4AAAA031017C252E3D7429604744B2 -6954FE21E3E81, 2FE618ABCD354D14D175B89C2FA8727F754ED05408F8EC953D7A029C, 8A0F74A70F6BFEEA4825AC6D4940709E38A9D241B9B67BC15C1329D1 -13BFEFA65ABB83, 1E79CFBD171425E53246D1649632EA82320D09D104541BF644B43276, FC4265BD80FB46A4694E221E04EF6CE85F2F349476351FBBCF098B77 -3B3FCEF3103289, 2531CC4E788EEE33FF40F03E63FEF997D7BE20AD5AADC02DF93AEE42, A738D399C5B3538219E2121714A316F427B2555F7899F40A6AD899EC -B1BF6CD930979B, A5AC42D6345A9D75DCBC35F3E9895D953EF7D15B54359DF6BCA1D15C, D55EAD112488C576C751C832176EC7AFDD7D31440BCEA86B93345155 -2153E468B91C6D1, 6302D07975E9BC0E0C794DD36ABC39B153DFE291C8C1731DE4A73926, 6032CC140FAC1603602354F3FF99F60FACFFBBD4393B24EA0601A407 -63FBAD3A2B55473, 1FE003B196E5F0BFB88AA343D5919E7C5E19026956DFAEFF10B41D6, 624EB829116A336D847259F80EC45B6B1D644C1F5D8DDC83404D35BF -12BF307AE81FFD59, 907A212C20C70A7E53A9340330BC05493DD188A7CFEE5FA372889778, C3A13E3D77F269C67C6543678E61A35F392DA85F49B992105350D00 -383D9170B85FF80B, DB42BDBE076F7E75C34C2B927E73EC709265995BC4512A7E6F04C132, AE2A41EE109CBCA26E318A18003E2D7D1B557ACC196244CB175DD865 -A8B8B452291FE821, 17F0BAF1779E31ECAE02C138D69109CAA1EBE101F9AD91D825E1D3D5, 24B76AC081C96497AA7B8CDF614E5A5AA53FB53F1D93369B9DA8190E -1FA2A1CF67B5FB863, DEC95AF67977A90F2C831F822A9883FDD3B119C9CCC552E714907F21, B161B842051D2CD8582CF365E5F919411C9E27ECDB896BA6DA21DFEE -5EE7E56E3721F2929, D34CB5030D6158A0BDA99A9AC40235591C0409BECE4A28AA7E989128, 78D670AF8D31D053B53F67854B7755F38CDA6731145F89378E2EDD12 -11CB7B04AA565D7B7B, 806023F600D2D35B2B9DA9BE107802FBD9B04F4FB569055885F84174, 8463DB49296E86750888E06353ED42732C95F5C61AA4696508F9BAB2 -3562710DFF03187271, 24F8274CA5282CD9FD95B53022F5CD1B878ADDED1D7A3DCF46D25786, B0485DAE467D6795EC97DE1FB4487FC2112D5798B77605E5C8D3F77F -A0275329FD09495753, E7D0B41DD20AF5A36176BCC234AEE25FE7F9A12360E62043F11FF2AF, 982BDB1CA14088CF6A80E3A9CD5F329A8CED5AFAD519FFD7A7CB3DAE -1E075F97DF71BDC05F9, 418DD0F298DD0261802CDE28BCE840A007E09CFCFE85F518F7AE4C7A, 766C0AB7B8D4B2351F72A927583A927A46546931BDF66E9D53E7913 -5A161EC79E5539411EB, 26D81F8AAF392DF2216B68C2125115B3AED117A4F20588A13C2D1EE6, BF9575307370151F7F217482C63851895CDA7DF49B406AD83449C633 -10E425C56DAFFABC35C1, 2A2BDAB9F1E3426526EA8A02EDB7504793A023A7B94F1750A35F1290, 46FA41933EA40F859D230D2AF76D309F4B42831964131DA7879AFFAA -32AC7150490FF034A143, F8BC0F7FB724B0E98068DC7C649C86439D9A0CA110D70534C249A957, 567D9D1611222829F765E233F2865CA765C533A75DF52A8CA6E2EE42 -980553F0DB2FD09DE3C9, 3E52D85CBBE66635CEBEC93FFDF099863AC3532248828404C4488A66, 6E32E7FDBA3D4121370E6E7419258EF83434AD93AB0BC2C42ABDD324 -1C80FFBD2918F71D9AB5B, 6B1FF073A3CD8A64AE76CC428B83D25B9DAA0D80830E98B8D30B1AD8, 5D88EC8A26D1CE0065466721A5EBD21983E5212CE7CE0E86412CC4CF -5582FF377B4AE558D0211, F866E3EF3FA7E04BDAEDE69793A48B1A11F184007E2E8BF3E7B0B13F, 89CBCADC39970CDFC908391FC332BE45AB7040C154908B1FA9363E41 -10088FDA671E0B00A70633, 27088BE15042726C5934504CC097EDB828B808E274382184A04865FC, 7E28842B3D3B141A8FAFF4EC5FB4523A817F533BA3878BF62DE490D2 -3019AF8F355A2101F51299, 7612A5EF2A4FE2ACC965E9EA98C980414008820044C8D2494A6E48A1, 804F8875E4FD670460E6E8774E3F8EA7ABE132EB4F8538C0F263E753 -904D0EADA00E6305DF37CB, A2E07EB44A40264D8CFA93118985E2AA715D9834A7A2FCA5337105AB, 82EE99285D88747C9A969C03DD91F97749A795556206937E02EB7070 -1B0E72C08E02B29119DA761, D130DBB6587C74D79A7B2C25467D87D63290201BC142A26A3F7729F8, 593F7B51E5DE8439291758949A287941E2D0C9C16D257B50E59E5657 -512B5841AA0817B34D8F623, 4DB182A30BBE6B0F0C1733FEC0EDCF0F29F6FF3C3224EF165B40135F, 2F1B284FB92E47C7BBE9C49B99A6E63E95A929A2043A3AD156A831C8 -F38208C4FE184719E8AE269, 91507DC0D051315B394C9D8868B523C1580CA006D12AF7A59B742595, 8C35E6ABDEA10E34147ABDD51A338D043A7DE36C66CCEFAE82388521 -2DA861A4EFA48D54DBA0A73B, C869E191772D7416E0854FC627CD4D52C8E1DC706368EDED86C0A5C9, 1958DB34382603897FA5DBB481AB9491B0B4563D9411707DB27E75DB -88F924EECEEDA7FE92E1F5B1, D74520FAD09C24D7C8229D21268D9F796CE671646C7A1F663112E3D7, A39D0856AB0790FC41750BF4B44470685847810C591E9C65497A7003 -19AEB6ECC6CC8F7FBB8A5E113, 6A854252F1E6A0B376BEDAE354AF23012963364589417EE9A0E0C8C5, A8DBF75C9AE8108AEA6407839DB057455E75EFF24B126782DBF17E71 -4D0C24C65465AE7F329F1A339, A7BE78954E6711850881AAEF30A804E95091F4ACE0A451C4EFBBFCC4, AE45F4111709124C24656B5D9A00A2EC632DD1F9E0D19B7C4C74E2BD -E7246E52FD310B7D97DD4E9AB, BB6BF6D52101D7171692B076718926024949B2FC1CACC4C217E22A49, F4E2E945D6A047AA3C19E8AAC06704D6E6A3E6597C965222EF146060 -2B56D4AF8F7932278C797EBD01, FDCAC4F59249609AD294C519C8AC53DE2F000BED9FC04C4C6B8F2B72, 3D2E5C42C563572BC901E922FBEAB3F05362F30FB064927C9F12B6CE -82047E0EAE6B9676A56C7C3703, 78841771E59617F86F26F54E29FB34D0BBBADBE036332D95CDCF99EE, 4301EE6FAB7416ACC553C2717D7CD36D5545F1BBFCC3D9D1AC99CF73 -1860D7A2C0B42C363F04574A509, 34F8CD3C4075CC243E90AD791FCAD0863A0B8780E807349CB95F8356, 66FF86AB3C4FE675957707DDE054751EC4F630313DA1D3EC3248599E -492286E8421C84A2BD0D05DEF1B, C063400A25BC0F494FC7C150ACAB7A62B117A708E912C1898BECF607, 4EA8F6FBB32B3E8919891173164A63BF8B8FB964E0B004E56379E049 -DB6794B8C6558DE83727119CD51, 1C9455B676487BAA9275CF474F25B77C05CD1CEBBA5E83B72E84F8C5, F771F0402BCD3FBE57BA3155E76AF6F1EF4895C072F27575EA674B38 -29236BE2A5300A9B8A57534D67F3, 3E246D1BEAD5B9A65A6462B144D74E9EC9060D5CBDF7199D0271D3BB, 4D96FBC404BB208D2283DCB44F907E563C3725550EC601D11464C4CF -7B6A43A7EF901FD29F05F9E837D9, 44809885890A682AA2E5A3E36DF30F49650E53597A90EDE162E0A663, 32F2EFA01F22C2F5C35E715BCFCCEE8A1D054E31D6BA67E6F66B51D2 -1723ECAF7CEB05F77DD11EDB8A78B, 1ED9A1DA3FF1D896E53DA5AE2D1ABB5531F29D8AECE017EC27333099, 810A5D32B852640F61043D8905CC49F6B9E5E1A8675E114DBD10E28 -456BC60E76C111E679735C929F6A1, 963BC62E52F3E9089A4CFAE8889AC36C02CA5CA870255BBA41D80992, 8283036EC72E77656965A322EAE1835DEFE81BC2BB606BE039AA08B1 -D043522B644335B36C5A15B7DE3E3, 59513B27D32F5487E7BC263CA8163825CA301AD4FCD2AF6BC38CD8A0, 86F10C63D8DDF602FC5FD1FF212BD6018FD8E84EE2DD8AF699030FDD -270C9F6822CC9A11A450E41279ABA9, A6FDB2969639E579FC432045414BE41C70DDA2E08F038A0A5BB42AE3, 676F76DBF44A80DBE674C97E925AD073A225ADED52A66EAD1743E349 -7525DE386865CE34ECF2AC376D02FB, AE3C55F9F92AF86E2E24690093279721BA8BC470C0BB30629DE7A830, B89FD0207A227000BB68B30CB54E30F4FB91D5530153B82D52EC8688 -15F719AA939316A9EC6D804A64708F1, 340E2C333CBC4F554A9D395F81FDC65134504DD940C5C169096B2E6B, E46482D2ACFC6B7DD12794118B3FB4844702E6AD410EBB2572D70C2D -41E54CFFBAB943FDC54880DF2D51AD3, 3DBC30E4C85CB76E7AB13CE933C124BBCE4780ED0E5DD209EF3E0D79, 2436FD101DB483C4A9AED4CA46524814763E33DF799594196FBD5FF0 -C5AFE6FF302BCBF94FD9829D87F5079, 8D232E2CC2BFD2ABF2381EBDF8E2F208EB7221D6051AA3F848BAD7AA, 84379CACC97CB4CC3E038F03F9C3E39A95B2692EF3207992F6BC5A71 -2510FB4FD908363EBEF8C87D897DF16B, 474E806113EBED5D3207F369B9025C92E5781882FD8283DC156FEC94, 92C1255A2357F57D2033F648A07CB8BF6ED976DF92723F83C1742C68 -6F32F1EF8B18A2BC3CEA59789C79D441, EEFFEB6E96579EABA84813CE7D7D8684BC4526783BB99D766412C93F, 7A882D966C41A7776DE16D83627BF26E6AA2438AAAC509ECB59FC188 -14D98D5CEA149E834B6BF0C69D56D7CC3, B6D1C744E5F1B500F7C00FA3ACD776A4D4FDA70A1AD6FF2A28CB5440, B6B1B53BDCF1D5C3388C7B9E89D13B317935DE42E0EA796DB4CD4F95 -3E8CA816BE3DDB89E243D253D80487649, 565A2413DAA241BD78E000D4514586C32A3618B0540EA46E6E404DA1, CE6054C367C0108D3AE4BA143353D0E88B48507206BF70928F2D612C -BBA5F8443AB9929DA6CB76FB880D962DB, FDDB75542EC1312CE37D27C86B713322E71DBD862F7C32225A3A1ABC, F89EE7A1D1C4E4E211A7080BDEC6A5921C285ACBA7F6971C031F1387 -232F1E8CCB02CB7D8F46264F29828C2891, 13957BFCE2EF1DA3867BFE22E31E40720E4D4A58803579FF12CF72FE, B82DE7FAA2528B4A77D62559ECFD2322A4FBE18EE5113D1E43C24D85 -698D5BA661086278ADD272ED7C87A479B3, 860F61F11AF83C2D6B66DA9D942C2E5BF6B315983A58FE19F3827010, 1A6894B0D572A2D5940F2CE046AB40334FC1145DBC8E2DD87FD1E33B -13CA812F32319276A097758C87596ED6D19, C7C67E5E063741E3906B13E7C7D165C8F16D90B837B5294ABB02CA3E, 91394812FD3A35E358B2864C9E9AAE270F948390B3B1B9FFF5D2352C -3B5F838D9694B763E1C660A5960C4C8474B, 8E0628DC2359649255B2FB0BCD820AA5EF46D52FCD4FA9C6D2935704, 815596DDA0D138F90381FC63591F92F6D0ED19028DD6457B8D56B988 -B21E8AA8C3BE262BA55321F0C224E58D5E1, 79C4ADB605F9C0B34F52281817969775FFD63F36B4F696B06790E61F, 22171C082EAE8EE539438A3DEE8404A94A1737F08645403FB32D76FF -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 83E2B541F70B5F49DF385A40E91EEDB42430A123C73BD71573C4AD68, 471064372661A3CE3FD801604676413F29F37E5A076F307D685F8627 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 7E4C45B94EAAC7A463DF23F5D330F9B7D7A130CAF6D9AE253015054C, 4DB6EDDED348A8E3E3260EB7D6A702A7E9DD3706C3EC4001AE1A1304 -12C9389FCCA50E069A6FC4946479E435E8EBB, 5B0E2714AB739379A642EBBB6DF9A42FF8BF3AA08DF2C874E340AD12, D13787A422669EA964C6E694C3E6A2FED4A5BBC54BF7EB6E5CFF54FC -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 835CEDB242D2FCE30CC25ED413002AF81CA3BE6694BB2740D2C7AFE6, F4F2FA5A1390F06C10373CEE927A2753AD4E6E76E16E82419936FA5C -A912FD9E31CD7E3B6DEDE937884905E530493, CE8ACEA7322FCB9D00F72613D70EECF3634C18CB7CDB86B85DF25B16, F8D7423C003EBEDD38FD283A4581B016554B3B6F19C7A3B21F1B5F49 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, A5388908704BD7037303452C9CD652B019B90B9102E34C62995109E2, 57B7FBDC820539E6975600AA55C452180385AB6CDB9FA9CCCB39D5B -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 1846C2A8382CA7D35AE259A5F991765B0FFE6863984CFCB9C5E3F18D, 9217BB8675E5AA70DDC907F9E7B3704D6F7CA78E7AAFA78F4BD3D326 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 4AB209E645972B5875BC6FB67F451B89E1D0E9982FBADEE7F8AE9AE7, E5108B1082281FF1B7E1C00A0AFA7925469B765385B039CF0ACA4A8 -357F023F0DC204F0CDC846CA921F1ADD8447283, 4938C6436695D4BD1BF9390F81C74F9C3F409D29CE8D1C724B1D93AB, AEA0DF59B29A08951F32001E0EC78B67E8BD026B0B0A5E5E8B67A67A -A07D06BD29460ED26958D45FB65D50988CD5789, 513B8E07F4F315E84EDD6AA65D8EC03DF324D3FF8CACDAF578C19BD8, 171A0D3BB9031D3B1A3F395A89BADE2C015FB77FE2F720627913DE5B -1E17714377BD22C773C0A7D1F2317F1C9A68069B, E85227C4F5C7049F7A3E2D1AF6F809D4DD4060586A7DCD8A9632E30D, C50E343E07A9B62BC3F90F568BDBB438119AF291F784F3CF94170B32 -5A4653CA673768565B41F775D6947D55CF3813D1, 5004F41DC75A5100D0C4C94B5F4ABDC830BB70D8A3EF8BA80F8B0106, D01D936E9B1275413D6F5A3AE69C53337F92A9999AC6A174D4BB7BDD -10ED2FB5F35A6390311C5E66183BD78016DA83B73, DA08B4FA25D8EFDAA21CB16AF0BCCC5A1FB84F36B04F01F9ABF7A466, EF5FD5BCA10427BC9E9EB97FE64B52538BD2A42767EE24E28D998F79 -32C78F21DA0F2AB093551B3248B38680448F8B259, 5A3D7E4FF4ACB9E2E42E291CB0A00055E8D564656BF80140A69AC7CD, D44465AB9889071B964EA9D6DD2293C2FD5DEC5F2DA19647E2ADDEC9 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, F426C8B26E65590D7E482ED14E0A753A04F748E6CA68A95B109422, AA91BC40AF7E2DB5310AE16A791546327B3F65C6BE9D0D48ADC16B2C -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, F871C97FA218C2B9A246DB1C983950E8ED2A5C1F780D1BA90DCF6D30, 596300CFDC1B550F7AD7073FD71DE02CD7187A9B55E4695364534EF2 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, D6BD9CE76DB2389E2A9F0282FE09650599A0EDABEFAF94D680041035, FA546DEEFED7B001A773FABCA8FE96217409BD2417D0B3AFDCF9A622 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 5DC7A99F493CA394F30A83B8C3EFBB4ACEDEEA32742791B6E4D96D06, 54B0AE3E89CFDF50F2673CBAED1A2E51FC3AA88D231CD755F3E865F4 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 3B704A574160450486E281407FCB9F385887E9CED024E0772D956F7F, 7867D7C0F8A58BA59B9ED64300AC618A35D112D7D02EC6630CCF8112 -909A469765F53090D38D5A7231073A03433CC33DF71, EB275092513826241ADD2027C318622FCB610FC48886B0C053F66B9C, 4752DAC073728D4B3E12A23393640A0F38A1ABA1FE514AA952B071ED -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, F3A80BEC6326399E5D846455D2AB4D26F80A5467A344B6E53DB51308, A2DEFFF968EB3D918D3348639CD9DFB31DF0A3BFEB8B0C6D68132B2 -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 5198983342D72EA3323004852DBE34D2D19BC0666746CD4DBA5BB4A0, D43596CE581C07801F494EB0D2176A71076C5C560039CE26FB2BD990 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, ABAFB40DB81416834897227A8062CDB4006F8A2376BC5309787049A7, 31EA667608996EEC5BDA680378000F7246E3728F8F6CEC7989B72F40 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 49AD83CFEB347D0B79D44A50F4EC30D4E50EBE9CBC15208EC8A75E2F, E37F7E851E485A9265037E548F318D689E8213D76258FAF7B70C5179 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 84392061F665B5AF5AF5D40C958CA52289AD4F17212C7E25103EFE8E, CFBA07E2045F60399D7E4B11EC70C2ECB1B5EB26EE1557D28D54A5AA -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 751E83A6AF15280FC00AE31EA3B3607AC9CC25462E8CCF6CCC13C691, 9DB6DBC34AC49A3D0861AFD9C441A1BC177BBC617D470D48C3F5344E -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 646DFFBAD04916E629FF52412143CCFB2EE3A66388BE2F784A67633B, 66D781B41F6D348179275BDC06D41DBC6E8592CC4AB489D246752E0 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 64CF8470EB59EAB6FEBF0FF401D163EED509CC225A11759D893EB01A, E239DCD5315AC07B34C598E164C23A022660D6B943402173A3E0D85D -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 56FEDA7F730804922645928C5EC38B358B16F5B37F07562CA988FCFB, 3EDCD377E4B203D860DD24FE73D18CA02501FE8F1B9E14EF817D53E -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 603959E0F53EDF19D13140C404E972C587A34BC7DAC54863BE600240, 5A729278913677FB173E9F33F4C6B5F2D4F23DB09CB1A491419B46BE -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, C0BD22730FD9CB9CE51E73FB04300214B11D028EA97FCA25630329B4, 400029E2F127F00EE09724769AD4EA2F0219334A865C466FB686B120 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 8928662533735CC4D2294BB65D62C9348DC54860651C5D8ECE9CC4A2, CF38DB1A99A04631C3EB3D91B75D324B7EC158898847C8E97D0D1CEF -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, E31F70D450B1C4D908D42FF14ECC288401B4B2351E09039AAC06760B, C05385585CC321BFE1E9CEE4B724B27A1A44073047B2DB23218B8D89 -29396F76B67B7C403D73A1059B80139336878E44938606769, 540CE2017428F8F2C685D3E026400B8B7F85A9111AEB1C7E732EEDCA, 3FAC5B38F1425C92BF205C5807EF49B0E18407015BC8CB8E48BCD654 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, D6DEF929A63BC8925B4A4E63173BD90662A8F7FB9D88B4270DE2CE69, 9F4EA22418479B10B4755E8FE107D8ED866CE49DB22A1ACE76718996 -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, BB4670CE0329AFF79258EF269A7BCC959D87DFE80BDCE8BA6459936F, BBA1D31C04E781A900AA8BAF2988D34F340973192F981CD1E83B4564 -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 45E6B1674732B7D2338DD56A0ABD9B3D9A9A59D86BD455DC7FF9616F, A2B85EC52F699E000507B6C8B4660AF31CCB90CE106AF94CCC78BF78 -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, B837F43BE73BC0B560801DE91A7D47A558D25FB1E4FDAD26357CEB8C, 6789EEDD114F7A3A1B18C5737DF2BCB1FB9EF1996B5DD03EAEB9F10F -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, C8B5377944667B0C017AB22CCC734EF549632F406104D3C1D2FB19D0, 805A0F9CBB7765A78AEDB87FE42AEA6E360C37A4116DDF9BB8329954 -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 4F400F7A8721EF9FC9CE4AD8A8068F74B51B197400AB38B4D10E6C87, 5F9423C807D049F2FE86443FE8F0C6F1A1F656F3D35CA7106D74F8C3 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 838D9F9EA47C47AE25896303825C31C1ECA75F22A8D3165BA1B4F090, 9ABD33EC035B387A845CE11E42EFF71C8742DB5EFC4C61B201A96599 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, 9B589D1A1534080FD91DF288F0D88C927D27557FD0A1C6F196A9E3BA, E70E4D2B95236DD2B6573945FFEDAB3C02179D2940B75335444E72BE -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, B60C05EC716F5B18362AEFB4BF529146EB2A3C2F2946FCA74078181A, 98F6988C710D73932AB7F72AD0D91CC7D7EE23DED80CA0C582F473B4 -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, B1130EAE2B5733BE78E54DC9070BD3ADA67EB19421C9FC19563D2EA7, EA34001A4E9751C94446E85701671D73C8B668E67F950B25660016DF -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, C91E72D890018B343D3D6D90572BB75000B26EEA1DDEF16709C84F1, E8530B7143DD8E828E10A06135C12CD002E5EFB35F5D9DFCDD636320 -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 496C1AFC7DCC2F878B24443D4250EE53A2E576FA8DF2DA47AF4136B4, 34B68FA994B037B5DD758CDCF737AC97DAF04C8C6FACA4A036EF6935 -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, D92253DC324640172F572A67CB7FDFA2FDAE009020E36F59673CF795, 713535A0A4F70093D3668264512A154FB47A6E63883ECD4627532486 -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 9829981ABC910F195474EBA80C8105570E7062D5CA2F698180896058, 2471A6945484D09320F925B9666DCED662FBD278480935075B1080BD -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, E738FA89F04B3B264E3D9148659F8E89FADA75CA07EF94D99E5E4049, 8D7189B1F1E7121972AEF7EDD22F646973F77B7FA2E9BD9642C974C7 -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, B3FC9DE2B39001A55875256F0D573F47E1178870A2EA8749E5F6B0DE, 175F7C353FC68068FB501F3F6A0E6B104322E6430E14B46B3623DBDB -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 832264CDA085803F497645A5841F9E4AECFAEBB1B91068D05C20D2A8, B0032AE2BE48983FD9696331C744ADC95D2A706D97CE5F6CCC8016C -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, FD00B3858B888CA0E7A44E42656765F775A748BD75E1E3C6D6555D7F, A6E710390E0AD2AF144746F59758C92C08A9F4B666879B795E9AC9E4 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 23B97099A944244533AC76542AB9A004274ACC5ECC9819474681C068, E3C1C5EB1806DA05C3F40EE0296991D5F9019CA998F70E4509EACA4C -1.3.132.0.32 -1, A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C, 7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5 -3, FA182DC268CC40AD9FC1976AF6F1B667D9701679B3D03EC4F7A0DD28, DDE2C5F5AE938E863C6F383D2340638959A80A613BA39DD0C121661F -9, 25074DC8B37F5F277A132610A7DA957E4CF904B470425610061D67AC, FE0A2921C1F2F28B076F4811269F4857ABEC0113A52ADCF4F9D7E5DD -1B, 3DDBC3EE2C74448409982B629F394B5B5F3BA8DB0570C35853A76EF1, 1D5E57F9968B5A885F9AA8D4B0299901AD2F88B6C60955FB4FDD9B30 -51, 1B6E23045D2B65731E9EB04FE79575AB768E5EA8A3717FF091393F15, 9C1F48828EF0F951DBCD2DA7BE7C9F6E4A1A1214F194E204EA090170 -F3, 25A5DAA61CDE4AE2646FEE6933AFBDAF7F5B053CDE26130E5FF624CC, A4A4FF61575579F044E1B2FBDD7820B5D84ACFD8B6F6D89B1CB7A6F0 -2D9, 7F5BFB12D438ABA96FD60FE0F6C634161ED27E50EAA6CD770532619, A938EC8DA40CE7F479D646B11B55C5156C999DC9F9AC8EA246D6A402 -88B, A4AE97205DFB5E95CCCF5C9DCB0B063AAAF2AF05713625D911396405, 2B32DF6E6FEFEF7267AC56DF57A6B73FA247738B22080A4EDF9877D -19A1, 659107A7257E4570FC3248EEC91AE77F79935FBDEFFAC7F39311B6F4, 504D6D397837269961384644B21A0097A85C17224E4CCBD14907B2E6 -4CE3, 5526F666BE42D5CA871610943ACD8FDC7FFC9558A1FAE282FC897A0D, 88CF40AB7C290052CC49F2EF3645FAF6EBA5E37E3CBBA7956EE5B744 -E6A9, 40B26E42D89E88E3948C2D39EE667BDC9AD64AB7FD763B46234AA4DE, B546F972AADEA71542F123E5EC1603A82B32AF431585931AC115DB1D -2B3FB, 592D8117FAC5B8C139DF3631F70DB16CD54EDA20FC8E037C778825D5, C8813334936691CB25B6714C69B6433A52AC229B86C75150AFB21356 -81BF1, 69A4C102E329049238E99BC4B0C494A9F85436F44195A9BF555E97FF, 9D9572AC6FBE9E43D80FEFF3C1883F0D501E27A80028FCEC3895A201 -1853D3, 939881EBCC88E59F11EC12831C08AD3A489F40A87B7CF345AF1F1B1E, 24507475F3EE481E566B24E142EE2691B29E559627EA49D0E6DA7C66 -48FB79, 3E0C9302969C9557AD50C58F6E404FFFD2B75E1EF60B82580F239475, B261E370C3D91A3D5F8A9D76A6EB7BE04B021675A5B183D2D97DE89A -DAF26B, 5B7BADC02DFAB3C1FCF28A906FFB05677A05FFA8F75DA763FA550E08, 4BE84748FFAD28259BADFF80FAB802168E62804CB062B576F4557983 -290D741, C3BDF62D7611CA1B0836AB3AAAAA1BA59510824BD2DDF8BDBF48F901, A4D41484735EDFD1BBC62F67ABADBA36A970C26B04D3FB6168A1D8C7 -7B285C3, A7A37F2EC7BB6307067205AA9F134B43800BC06F225FC4DB8FA90192, B4371DC02FC4F2CF2680AB0B797CE08147768AE8EEE7DEAE207D2083 -17179149, CBAF498E563C3A1C055D2300F4F03246398EE41D19F18AE684599BDF, F7B15CBFDB04F80CD4BB9653C9C1958CB485C6255307BE5851539CD2 -4546B3DB, 1D9DC9B9D3A96773242539209141C52484A191FEF6F19D6078A16D24, 3537DABDAB888CD007171EB30C1A5D2821D562935F50021828B04F13 -CFD41B91, CA44ED584E1E041D75E9DD5A0D1697379DE6F294CE7AD892CFD62A05, 3F1B7FD392C39BDF5C0BD09514C97E0D4A11EB31045853E4AD205B30 -26F7C52B3, F504BF249974434C6B33D23B16DF086A17EEBBDC2FBFF8D9AC7464E3, 60CA97018D48726BAB2A95CD9559E76F2EE05454E8B0E2DFBDCDF67 -74E74F819, ECB1A54F1997745176033FDBEF2D219ECD75341DF940A3F45ACC7EFB, 99A2FFDC8B263462749148714446BAB3CDE47EA0E4C22099093033B2 -15EB5EE84B, B91C67492ABD11616AF928FF6BB674959E5FCDB9BC7182296D95363D, EBF2D104D2F1AD8540F8C911EF27A4500C08B5B5E1512459F07C73F0 -41C21CB8E1, 70D178C8EEC5BBA9D614C415C1CB0BA97FC3681ACB45A3934689585D, 33D3484AEFFDA8D0CA2447875D956FD7E6D3F98DD692BAB820D6CFA -C546562AA3, 3E7751D2EB3AC413A5EEB3A012782E2904C98AF23DB056E5F0C20E20, DDBC62572D1FF2D61336A9AAFC01727618FC6E513321FE96547CDC4D -24FD3027FE9, 5F50E1F9377497FB22C186300C1ABB96B6C24014E22FB867C40DC0E, 9519C032E2FD6BD32B29AB45E4277143C263B925B71956F42A58ECF4 -6EF79077FBB, 80621B7011626C43CE51B95DA64D223571CA466268792CD01424A6A0, B4CCA9EC3B8A7B1C5CC383A495A88ADF7AB809D78CEA773A8D71F7B4 -14CE6B167F31, 3AB6509A6C326A97CA06A6EA9C65471D104D3611322AD696EE235B63, FD3F19D3B78209DD452F849AF85E6393ADCCFED03C2E04B9E5DE1980 -3E6B41437D93, FAD284ED331FE2BB963C2C9A11BDA0FD212E3B87BAA20E1AA16FF7C5, 9682FB99E4B2CB77D8B8A6707E88B077E5B5685DD44C62D491266F9C -BB41C3CA78B9, 7825A72F1C225CFAD711B8050A36A1989532FC31D910ACBBD9613EE5, 73B5046CAE22F662AEE4CA19A3C07E096447B6AB3523EE1CED493C91 -231C54B5F6A2B, 1CB46C4A87D6117060C66DCDD420786682C74D1E6AE0367D516FF497, 46D36F16796DA5B03FD8FA37BD39F68F807A919C14EB3976999D5318 -6954FE21E3E81, C51C714A4A548E0EA5E13016E2A8E74D3BECE100B1E524A5D5F6E60A, 222F9617820327FDE1DE82C50D790EDD8D4BF98D28DEA99DF15A3505 -13BFEFA65ABB83, 287A05C2B0CFB5B65F92876DBCDE346EB4CAFE95D33A57C6843644DC, B9649D74D835F46D192712AF8CD30D86432E04CEB20EB3433F0A3CDE -3B3FCEF3103289, 962F1FB95BDCFFD2DB3C7F2B000AEBD8D0A82FDD7F1F3C723F831356, 41110B8023DF33E6B7376CDBB80DAD5971642C486A49D60E0022CC4F -B1BF6CD930979B, 379A0FBCCC0E5333D9763A538FBB2DCB43ED4EB08C69C68D546B3B6, 4B94293075A8694B0ABBE51B4C88124B8837987D8119B5F3F31E4FE1 -2153E468B91C6D1, 1D4BC5E17C16E5214B392667B1B1A375AF47D26C7C26A38B9B5420D6, AEC6361335B342BA932970DF30F6C1D45E3B0BC280E56B5776570D3E -63FBAD3A2B55473, 9999BDA52BDF9A91F0E9D470CC161281225F20200824378AC7CC3149, 45E09C363E39D1D044946E400C4763A26DEFBF8A69A287A6EFCD5970 -12BF307AE81FFD59, 5EB9111BC84E18D712F0344AD4BF7F05C66276C07B3B7945A1526D39, E3E09DBD1006718210E43F233A15B4C7A71A8C00FEDC0C4215DD1BCA -383D9170B85FF80B, F4514566F651C77B49C648818697EE529BC8014DA120D65136E5F176, 6C7D6017B2F2850B208C966FE49130301C13EE2379D360D2223A66D0 -A8B8B452291FE821, FC97E8C933295630D0185400F2BDFCE5F82101A4E2E02E07C2DC7AE3, EF28714F9A96F948B611B7EBE9D3033ED265D4D549FDCA3BD14B8F6 -1FA2A1CF67B5FB863, 6D8DB651AD4D2E5EB8ABD462F60AF4F61E421B8C067FDE5403FFAE6, 273F25382E58627041A647E221CD60FD1FF4B457DF5A5465D21E34A2 -5EE7E56E3721F2929, CEBB1092007B5EEC9CED300CB6F68B357E5A733D3AE4774E765F236D, B5EC43F8ACA1D2D2019826311116813B218DD2E09E0603A351087156 -11CB7B04AA565D7B7B, 1B75176BCF705CCB967F887C366F8DEE18D34BF8EE7FE0E99D875E94, 33F6FD3DCA889D88A81C9A95FBA4CE10DAE383F56E893A6F0A5BE56E -3562710DFF03187271, C09941AE011CBFEBC56DBC2C0A79A1BAD8B23E0A560A0CCBD980F92D, E6E85712269657CFC7596A93BFFBD8CB23EB4D2A8132412413A64E6C -A0275329FD09495753, 161DD6E85D7125829541E2E609D7550584298E2843339FA523A56F3E, C2BC918A95B8EAD59C74BB6C5DFC07B69F8372A0111CB3F2838EB4FA -1E075F97DF71BDC05F9, BE27C06779E2C840E18AF267CF5BF04896F730FE5E01D99265372786, 66E12F92F7C5943DD2D6128C1AF4550A4DB62DB82C3EFDF1D30BC768 -5A161EC79E5539411EB, C75A3B0E5AA8EA85A56A7FDCEB25E5790FBD5CE38BCC3457A6EF07EE, 64BBB7B548CF78951B4D24301474DADBC2B7C539362EDD4C663630DC -10E425C56DAFFABC35C1, 61F15266BE6B580ABE08F0D121B0F0AD5D957923E0444CBEC5687D75, 8BFBE6D3D84B9F2FC3A3BBA5593FEAA242A0143D42BDF1E8786AD374 -32AC7150490FF034A143, 2836A167EAFDDB118EF444DE4F7987235C4FC6634D555D0763F159C0, A790B0891AC120A52135883BC79E952A26404149A5BBDD0E28A0E31F -980553F0DB2FD09DE3C9, C0213EEE8B029CD197EA03085503B8F6075A58C0C4774CF170B05D35, EECE3EAF24F1DAA08A5B3E28888DEE5784F93451603AD24B490663BA -1C80FFBD2918F71D9AB5B, 6700F0F0D73B39BC78BFB7E47778397126841172ECC77C993ABFF3A1, 66FB3020BCED933A6227363D480F6C3C9D19697355155F424D87AB6B -5582FF377B4AE558D0211, D82B8621EEE2E11CD43E90DAF2292EF81E294D3F7B0CCC98431B8AF6, 684BC3F6FC75224EDFCE0252B5DEBE3B892B739D7AF6C55F41CDC025 -10088FDA671E0B00A70633, FD916998BF3D1E8ED5F759659D3FF30A96A15E251989969350929D90, 32761C12BDB52A3D1D16854FF5350827DA52C467C18EFF005FC4E894 -3019AF8F355A2101F51299, 875E42E4054DCEA8DBE503FE7C1156F32A0A97D90B2738F8F6A7AD2C, C8A8FD1A1D7F9EE0EEE9B774AB5FFE4B74A8E5CE2B0E06348A10FB87 -904D0EADA00E6305DF37CB, 4CCB34845C19253161AB5281DC2EB9D2DF64E4F72D97B84815626A6E, E530516AEA0509947F6D932FD726CE1D389D8D78C984AD41EB1DA781 -1B0E72C08E02B29119DA761, C2719F0C982954EC7FE33CB9F5E7F81977E3E733174B17FBDCA17B2, 11DEEC7880461DF69E7B5067E9144B63B499C44728DCAF793F44A146 -512B5841AA0817B34D8F623, DF9B01B961D3DBE9658340AF47D2EE879FE638012275783A4B892764, 49CC96DC1FE0559582C8415134234702C706C3290F02E9D72C383EB -F38208C4FE184719E8AE269, A340C9644EE9345828BBBA4B49C78E527ECDEC76E63CB48B5984C092, 7CDD3852A8F671A901F5137197A52E283D9844A02CA9EC928858712A -2DA861A4EFA48D54DBA0A73B, D42AA1E55BCC877D898A77A3C6CAC85E3F02CABE65C6D6E2EBC325EB, D443E76FC1C5DBDE759C3753E9461C36A85E705C1D17EB489E684AC7 -88F924EECEEDA7FE92E1F5B1, BD3AAABC848496D9F1A0E156E32B09026651C4BA259309CF4C2427ED, 61FD1E1AA0C8651EFDB6B24592F9B70C04A41E2C1C8A9983F26C284C -19AEB6ECC6CC8F7FBB8A5E113, 9A1DBE35ACDE4257962E036E436C2502DEE50EB325CC88FB85E8201D, E52E7098E51123C9003503B021B8C3F7B3BADAF156ED5B90B703E5BC -4D0C24C65465AE7F329F1A339, 3C880C04DCEF90F672CD6F13A6B51445DF7C52EFF754D8A60D30D7DC, 1E9D203D420A445F8655C35E7B4CBE00A35D460D529DDB6FB11D1146 -E7246E52FD310B7D97DD4E9AB, 4F8D64B732CB3457A0FA3696F3B456EF490355AAFCA912F15FEF06BD, BA5BAED63D087862D80E3AC8D9A826C90676FE48C9B7B6A5E0896E00 -2B56D4AF8F7932278C797EBD01, 8DF6320C40EAE78CE5C74271CBF0C73D2D98A76B974A35DB58E4D681, 13F3D7FC4B50381EBFB5D28F6045E514D55B910FAEF21F91E6A5C8CE -82047E0EAE6B9676A56C7C3703, 744D5076DEDB26A5058E5CF10147ED69097D77763430420C59F1F26B, A9C4F04B6D1A28B64939BB2A811BBE39AF32F691C67A894ACA82295D -1860D7A2C0B42C363F04574A509, CDBD3E3F1E00ABF86E480D29A7B8F10CEE24EBDECA77DA4A6BF0AF9C, B1CCD6478529A7E3CCF1F378B56BA360FF004003375D49E83E4669C7 -492286E8421C84A2BD0D05DEF1B, B8973749142016B3B9FBB473D32CDF6B7EE1934090246A67FA9F7678, 1D3F07E7AD5E6E42E42B0A1C8F31A85863B8CCFDDAFF036626C27C08 -DB6794B8C6558DE83727119CD51, 1B50F21FD521F2CFB31B7358A2661AC1D88D986F02AD5666F3656A60, F318E9252C546259D534E802D017586E8633C3B0EB64CB65659EF2A0 -29236BE2A5300A9B8A57534D67F3, 93EECDB00ED5FA5EB534AA9633ADE5C13B5EACEE709DEA2E51CB4DEC, 6F86CD6573E53AEF0198C3B9E80AB3BB4A743CB346FDA744AECCEF17 -7B6A43A7EF901FD29F05F9E837D9, A5158258CC18DB642A939DB2BEDC1D0C67B6F4B73C935913ED58463B, 6A422EAC15BC73FC674D3C5ED3587AEF6C7C8AA2CCBEF9ACE06D75FF -1723ECAF7CEB05F77DD11EDB8A78B, B323ADF31DAAE66554A0ADB700EC6C19440BA69125D4D961DC856F45, CF2CA620398263F307BA507F35937BBDD48CF0E010A6870837C90BDB -456BC60E76C111E679735C929F6A1, 7A30C5192913867E179DDD4F276E436E9CFDE8E41AEF23AC52A159B8, A20E7C014BEE68F85F59F35ACB63A5C4B5F2D23F972AB011EE473189 -D043522B644335B36C5A15B7DE3E3, 91E4E58094D87617000C8009EDD24C3869725D8A2E74B3BE6CE5D291, 8A7A8571D1BF0AA6BF95DA454CC73697E9A4C3160782456BD3539583 -270C9F6822CC9A11A450E41279ABA9, B537D3E4CA3FD535E2897F8D2F171D48CEE8D45E7191E26806C8ED96, C4E2D2E0135DD612FDF983EC4F879E4590924CC9642D89C1B50CE0FD -7525DE386865CE34ECF2AC376D02FB, B7D060B7AF788B092AC7EF15977CB2881458FC219B9DD0AF0A529C25, 9C5DE2EC9879793C7487163A1FC8029FA97B1D9893C6BF4A0382BB -15F719AA939316A9EC6D804A64708F1, BFCC76C4D1C25DF3AA632DB1C1209304618349777B8A2BD66EB0CA70, F21D994C5EDF35F0895F5A72D8E185FDD3274503E6B8180E9DE3D548 -41E54CFFBAB943FDC54880DF2D51AD3, D2C75930DA447A753B1CB7ABC5825CFDA04487F2CED0D16DDA22F04D, 97CFC4FD71C5102DA26332718F16C9FC6F387D61AED65EB7F42E85E7 -C5AFE6FF302BCBF94FD9829D87F5079, C9252510B4C72BB746648299E6A1DE750AB0C9FECBC6A753AAF60DFA, 683DFD307133D979BDC9A085936302E4B3C0FC159227BB0343AE5AD4 -2510FB4FD908363EBEF8C87D897DF16B, 38E302AE9AEE1465C296782AF9DF579A4AFB3F773CD774E9B15D4DF, BB4DDB48C923EE216061420FCDD600C8BAEF6168F390CD0227FE23C -6F32F1EF8B18A2BC3CEA59789C79D441, 907AE7A4B83A46A2882ED0D7269DB1F9DDF92C11DFB8CB019E58E17B, 1774F9574498B7588A54CAF4EDB5D0FA1683AE0EA5A9EC8B2CAA37D0 -14D98D5CEA149E834B6BF0C69D56D7CC3, 91030BD0A6937EDDF6014159F389F1D7777A43B6EB50581FD9C193FE, FD4895A619285651055354AABDAB059839BDA9198F51AB5D04D5C76 -3E8CA816BE3DDB89E243D253D80487649, 8EE91DCB57F1EE25A8CE42C7E80FDA93C8AEE99ACBE33B73A4FE4EA6, ADD565AB87827E0DBDDED2F1269F5A883BF65DDE5663CE5DBA7DA9F2 -BBA5F8443AB9929DA6CB76FB880D962DB, A86ADFE0D3997F4BB1171B34906E464D604F294E933E24BD04E17049, E892ED81A980BF3976D90C513C1D0F2856290E376DC65FCE983063CF -232F1E8CCB02CB7D8F46264F29828C2891, 83E2E9D9A3BE1BF3E1D4D2DAC85B553E80BD76AC853D2082262216B9, EF4265956E65462D8C2FA02C803F0713D1C30312D237B17B8CE9EF6C -698D5BA661086278ADD272ED7C87A479B3, 4CE22179D7D32F0DDECCE6F1F5945B94B6C595432C03AD36770B0314, F9D4CF0628C7702DB1960A3B2C7C9C773AD99DC68B8AF3CBCAD154A1 -13CA812F32319276A097758C87596ED6D19, B33A468E167FA97AB3ECD1469540DE5D7E41E874964C3AD1101DEA4B, 68017E829E382101D1D7D0F48D2D813D0ACC75A6536D1DBADEB26ABB -3B5F838D9694B763E1C660A5960C4C8474B, BE0832116C76E962CBCFCF0BD4DAF0591A03BF9B873CD5737A26DD0B, FB703ED617DBF3258E60784C5520C8218DF78F339E16E09CDBC28098 -B21E8AA8C3BE262BA55321F0C224E58D5E1, FABF2BE5AA7AB6E3DF16CC7CE63DF8816931DB883CEDB5AC18A86E9, DDE1838D91F21A603B3396C5D87B8C9AE6907F9FED77B40599B8E13F -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 9F6264F3952E9333949F847FC5BE97E3F345102F31B3C9DFE0CCC562, 70C07B144AEAD00070EF89C4CA7B07D186BBAE1EF9489FDDE6069BCA -64312DFEEE1AF5788CFEC3176D34C11F84E9, 2809E361581A36CA0CFDE319D7DA81AD3BD3D1E54CB82E76563EC649, 9D14F0C5463557E99DF027624BB1F32B65DECC0CEB74A11189A4E760 -12C9389FCCA50E069A6FC4946479E435E8EBB, 53FC363E3D9C5D9517085991433D5A79C1AB27DB6ECDAEF8D05CBD44, 7112809E9D5F24D096DB433EB53F8364318A689A05CCD1F0FE600A0E -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, C44ADE251E5987297164728BB0A460222A189D321410C18210A61E0, BC1B5AADEC6AE49A88596FBA84F9E2D8985A43DC6A88C3C6098E31C7 -A912FD9E31CD7E3B6DEDE937884905E530493, 7609C4FD8F1A502744186CDA37A6F1ACA8AC0B993FB184B375E0E39D, 1F7DD0AF0184A09ADDD597F26AA3119430E2883FD89E3577F8401A87 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 217EEC9A7D5C88E4F91458DA968CAE2A2E3DEC23544AEC10B8403570, E2DE1543431EFBFAA5D9584C5FA43C1ED5D47020B3C73E7B0C9D43C9 -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 25F0A7CC9EC54220F01A9EADA8489872B25534C8BADA954474FF3C30, BEAD65B13B11092E8EB8728EF2E635A46F192EA5D5BB6B0D3281E8EE -11D500BFAF40AC5044981798DB5FB39F2C17B81, 910451905398E0EF39328C85DDFC462AC2E81EB5B946097470C2123A, 49729A8B5D61323B3E3820C4F216F1A6EF015F5E18CFD914A9E2D2B0 -357F023F0DC204F0CDC846CA921F1ADD8447283, C25CB32C3EF3FB5F2DE448E6566075AADA4AB02FABDB9B90744726DB, 2A497C82B05B83CA310AE048D4B741420CC678DC77A5246EE2736012 -A07D06BD29460ED26958D45FB65D50988CD5789, 9D5CADCDA13A91B39A45B3EA064D926F2BA2C92A144C8465100C75E8, BDCB416845BBBFA36E395AF70A804E1399C0DCB11ED63473FEE8F4B0 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 60FEAD2DFE0CCD4819C13BE79CFAABC12C19A67B1F5420542189C157, 4F280516A5C338E95A75923373592759904778C3FD4FD08E881BFD7 -5A4653CA673768565B41F775D6947D55CF3813D1, E9321806F68248053F1F6C33A4FC54FCF2420ADE21B01DA4061AAADD, 6CF8F7F87580C36FA73A6F21F90CDBF3121BE622EC0BDDC85F68870C -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 1356DBC49446C218014CF4853104D867FB8BE18F4FAFFEB259766A93, 740965A16BB7413F56E8AF2EC2F79EF8A306C16AFEEBCD7B9C7103D3 -32C78F21DA0F2AB093551B3248B38680448F8B259, C4E3F43CC349C271A584062078D20F563A24B9F0F3030A7B1AFF5589, A8AF7A298E6616F153D6E2B21152368631B75863D21BC26889993E77 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 6724E128785A890F45270A6464E001410C92BEE2AB56829285E609B8, D12954A683C2E6CA3B8FBC3DF4450C061B939C6A58179E6C0072CE2A -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 913E81956A5E4BAC1502C8E3E161F56019D57CB5826209856C82E9DF, C25E7332EEFEE8FC358FB3522693E7FE2933EF39665E0279E0CA307C -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, D72AA156E01C6A3D14640646F3EF6016B3DC4DFC22E5A127B3F2F33F, 9C0D751B70DF0E1B303827F5B0BBE37B129E1EFDC030588E8DEBCC34 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 7E24AC4A7895423C3FBC048BC5668E9A4BE30D5A50DE2E5296B41A7F, E5B93AD632E31C23054D15D7709B7228E4BB2B0F9DE1B5D82D1036E3 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 3DC0EEAF7466F9F3C8C22EC45ADDBB2FCB700DD305D41789C28923F7, A84DB75011A63B1BBD4224EAFAF1D498BD2912013D061C9B3B065B69 -909A469765F53090D38D5A7231073A03433CC33DF71, A0AFBFD5716BD1C965470EBA1051050D35043343DF96EEC1953EA8BB, 9D3C67EE66E32C1D5F08524A51C75E74833A92623A4F1920F7EC8C2A -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, C3BC34D284FCF1154301BE4ADF2D9C9A36D6C6D164DE80D2B9293E30, A13B5C05748F886CA46268B8BE5E5EE1CF35605C1DC8375A2AFC9744 -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 22659ABFE84BA4B96809F15A4DB2C247997E50069390523D9E86861F, 267A20B5C2A4ABB1F7D5931D2684350892CB12225C270806CE8A339F -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, E3C1B86AC5DFB7A7E7070FE5208EDD0DBFBA5A947087A56688F607D7, DDC14FEFE072306F6C3235AA06B98B7AF8D4D2F051D201C1A840A48B -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 73FFC133ECB114837FAF263080088840B5FDA34DFAA1AC76C3D781BD, 86867C893E78B4D7DCE2F93DBB1FADC9074127DFE268303DB84A945A -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 5B5724DFD83451EB0F9EC208EA231CA80D4B071F0D302C54DE89913D, DA6800ADC92DDEBE170BFE5AE6FF33CA6EDB97200A652948605D7650 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 8AF882403CECF8EE292D3007C9DD00039477D11AD2E27E89EBF42E6E, 49D66D5355CF1BEAF605D3C63204F5D4B7171C25AD3F8FDC4C8A4867 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, DEE71CDF048B14CD5D64E03D1713C576D07EB1DA1A45E268F0D120BB, 648A0566555D25C41F9FB8E28DFBC83DE0E46902BC1995D7D6F5F742 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, C901B878C0A781C36AF90C87D04D4013C36C39BBF8FF81ECFF41AADA, EFBF85A8BCCF7F95F7A14A534B0C1AB7C2976297224462659640613C -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, BFB5B0EE8246488F0F63FF935B5717DEAFA79AB0B83E9AD9C3F518F3, B358E7FF9895E6C559C88A7DA0401543604CBA5396201C8A4F026F71 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 41E61B49365183199905CDC5CDC3B0D463C2779EB43B0B370AABB2E1, B75B8B8030D52A5B744CD34B4C518EED6EABA3515C3F4C507AA210B8 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, E425E42368565A5EF0A8EB3E16F74100927C734EBE29287BD3E4C2F8, B8967436489CC1B20771D833FF93D2EA94100B0514809ADDCDE2E480 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 391B3AC2C419F1FE42336C9A714D6FC6738C82B2FAD2DBB6264E9355, 9004FCD699B90DD69573001B370184899B76D97FB4FDE138991AAC75 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 668C933A1CB4B5613ED4261A2D8B09F6901E1971E6AEDF254C1DB2B4, 4DC055A19F6E9C598E6DD76F72B66281388FA51F870526EB4D69EA11 -29396F76B67B7C403D73A1059B80139336878E44938606769, C4B00716FE8C6E2E49FD9B9AAD922533D4DAB3EBFC833A32AC7CF056, 87944F922F6B9E495F64265B6FA531F095E8E915B2813A3BA4324121 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, B424AF12632437E616EDB674D786BE7F6909B406EFE4F8E5C0C04EB, 8A5420078C0FCDA033C0137125B28A483DBFE93D489FA52D0ECB7E19 -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, DDFEBD8DDCEAE53AD3ECCF894C7AB34C904F3DE3CBC58F7537756660, 50169D3D02887187C2D9C51849000FF8EAC51D5CC5002E3E9851EE55 -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 10C6921181DA4617D892B1B1302A400579A8A4337E51E518CC74B0D9, 4170F80934B8257951B3519B10AA6D0DCA3C061C53E98B57BAC6A406 -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, E75B38E4383597AFCDC3E3604CB39B673BC81DD7068297CC567E8A50, CCE5262A53292B96BED31285E6E3F8C39685D223FB9B8564FE43A7F5 -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, D8D5E404269D8A2E54F75CE8D9E59316AFB9B6C704F0AEB03827C305, C41B86F281E4C7FE9918A0C9783389EE975CF1544CB7C3CC6BF9A45 -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 5DE02DFD821DA0156E982B1F4201C3FE80CA807C3CC868E7277A2ECD, 6861F5D1E7CA77AAADB06BCD75DB442915FDBF1743C58F6A27B9BFD1 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, F42B823BF9C1B349B82D4F3FF1B962B5C20918FB150F75ACF7FC2181, 9FDEBF6CA09A4F6D8A788D045F2AFADEB03CEDD519C09FF69D1090AC -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, 3BADE6D36A22A39474B1DE3603B22FEC79350D5EABD8E789EB6F209F, DEBC82227228A10F3D7E5D4AE9C491FC81A1E0AEC38C17B337ADBEAD -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 82729481A22FD5E709F65935B628E9D12D09B0C37B7E45D0E6FFB9F5, D67BE14E202D4C9D10A08713939E7FC1FEFE6D9A656AF6A1E704D4B2 -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, B89A26377D0D16BDE420EB6C8A609ABAAC16673779CAA9C0FFEF082C, 7401055B0FC37F4293D398EFA3C51D1E7F5FD9C2CCD58FBF7BEE16A1 -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 53ED261E9350E7D72BFC2EFC60E1403B6C8B1C194D3AF44FC5A7757B, 7B1A5090234A4EC0095E147807AA04ACE653543A35E8B1FDDBBF4A8E -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 2608AFF212FFC397A36D6BA01114DD0D341B2D97FC73B9C98F1B28FB, A4DB0BDBC6B41F98B8E905C715751BF52EA7EAAD66209E085D0566C9 -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 944DFBD4DBC069AD3959800CFFFAD39BD9B27CB0199049078F083896, 9FA12D2B04D37E8CF6DCEB21828C9911165F9A1378465394DFCD9F8A -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, B832D12CEFDB39DF5E09040F2FE4B750E4105243BA3DA1C6903FF652, EE6A0A80FE681D511969E02D92C700EDF5E1EA0442F72AA1DCCEEC4 -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 6CE2D21EA60DA54162BB2D3387F305AEE621A8431B93AB140E96E546, 812E67049B43E8D061D1ABE9C89C50BCA14C20F6D460B360DCF30368 -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 917EE9BF318BB88364CFC831BCEEE0CD55DAE04BC6E5742FA1265D23, 8F99CD83E1F0ED5CA65449BBBA958F68FC650F28601B653A9DC8FCAC -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 71C42A84C2B036F1F9F5954D577335A38B71B06930556727CB8E37B7, 5DA2A93525445F4DC313B5E156C451A41A119B97C81A147F597869B5 -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, 882BD1398A39EEF487ECE8083BCC6C9F7BF2E95BE33A153CC1977579, 604E1E3D5D508752935C5B8FAE08D0B9C1722CB4DD5D9C9CAC5ACD52 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 9C621454985FBF441C3D2FDBFD3F26BFEBB1E62D5C36BC437042F528, 2F6F1806A8AFE5025FCED9866B4709485E7BE4B69F2A65B1503A396B -1.2.840.10045.3.1.7 -1, 6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296, 4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 -3, 5ECBE4D1A6330A44C8F7EF951D4BF165E6C6B721EFADA985FB41661BC6E7FD6C, 8734640C4998FF7E374B06CE1A64A2ECD82AB036384FB83D9A79B127A27D5032 -9, EA68D7B6FEDF0B71878938D51D71F8729E0ACB8C2C6DF8B3D79E8A4B90949EE0, 2A2744C972C9FCE787014A964A8EA0C84D714FEAA4DE823FE85A224A4DD048FA -1B, 184FFA5819D80D51DEBA2FAC4611F378576355BD683E54ABF2E201173B0883D1, C0A66E276688F359A4C6D90826CB999545BDECCC63F0491620D242C260906E6F -51, D829AB2D2EED358C8464C3093DC72E911E2A1B96700BB9B12CDCF0C2A8A3B072, 3EC1BBE459CAE899E1F6C7BE2A598059166273E2D406AAF7CF3BC0B0B543775E -F3, A392B26B0503A71F0CE1E02ACADF19D72A84D6211B21C914EE8BC58DFEA92529, 90BB3C9F9F1B598B6F97AED2C48F4C59F12194D8EB011465FF88E7560D1C5493 -2D9, 78D56FA935996DDB7565CD320D2F264F5305BE551F411D49CE17944BBD8009CF, DC5B53BB32F4D146A93A6DDE353B6E25A9FCAFC7A5DE15E01F7746239B88C07F -88B, 51E39E9F111A1FFC74D63499CF065324B86A479BC0FBB3DB0EBB77E95DFA86A1, 8C945F778CDEDCD2DE6D7768005041FFB91C6BC2DA656C104373132AB0C9102D -19A1, 9EE8C552F615C8D0E86A7B983EF37F69BF5906DE3ABB7584493EC15E8C803EF7, 2B0363927BEC85207FFAFF4FA95C20BCF723AEB67862C5EB892A726A41500A27 -4CE3, B97B92F86F23855AE92E8578B23FB85128CE00A4428EE1FD91ABFB48316FEA58, 77DA430A9B98E46C9EBC9F627F507467D05CB06172EDE14FA580CA2782184805 -E6A9, 82D3B3A3A5C7E5B34187CDC1AA0FA9FF0E8AD81F269EBE2A079A1CF9837C0794, 8413A7951DAB0CDB00C790192CE9D7FC142AC2E8BDBCBC37671764B264087D8D -2B3FB, 84D845BDA10BD468A270B290020C440958F2CBA1345F77097590E4F0982C5A97, 952F9B537E6E32499A76AF3432CF0B47C9EF5DE39E7EB8B5D5355C30BE1CFCC7 -81BF1, 48FB22AC3EA85118E91EB21C22CD06C0E9AFF19DB827439BE275553C1232DBC4, C1F09255BE08A671628A64F25A2B562618F0014DD092BBC12FC2FF8A3E59BF6F -1853D3, D547A583C479BDBF65D90A6ABACBE47B2ED9BD5DDB848DAEFC3ADA9F045F8DF5, 7A7E2AA0AFC241FF6B254CB58B36125B87E560AD50B469E562CEEAA1BC626C39 -48FB79, 26A141A8ACBB471D3F3BDFEE5889D101F5F244A1ADA073A28A1ABE4D66AFACDC, DD5E7A714BAEF3F3D20947A3EDB6C9A11D221344B572EB75F075DF225514AE4 -DAF26B, EE8A3A9A685BC75A6A6329537AB447B4EBEFC93DEEE05D92D5481BC5FA2DD2D4, 11C6F3406FC0871FA80021D28B9252BA2A4401CC6DE5DD887E1C102F89194236 -290D741, 6777D49BC45F54537A46598C9EF93D4A260CB2E223883131F90EC013AFC3CA9C, 1B309AD15E576A8F6AFACCC30E14BA222C8278D5942B1D3C4D5F3B2E926E9D8 -7B285C3, 1C38CDF2246338A098DB0E2B0E438FDBC1C9E598BE6B661AB5413D7AAC7365D1, 965E5C9AD86C0BD83BB0EB34F4742D02B4C12372661A5A7792FEDE41A036363B -17179149, 2E1F9230C1189F7303AE23F85A4DEC206FCB2C9B9DAABE775D4350759887E3E7, 853E17E5254608B15FF68DCCE6DD47F5206AD0545A70B0BB8E38AF816D9CF154 -4546B3DB, 6DD8BDFAF3A6ED8A97C35E0B8C0889A45232E5ED8DB12BC03C18B5CEA4D146B1, BDAB741CDD72401A40D3FF40F2FB6C8D49AEDBE01AC8221DA68D922E4EFBF0CD -CFD41B91, F11C444EF887CA44ED031DDCEC54AB09CA839113B84DA5478F5990CFDC4A280A, AC2D493266FC8E5814994EF40C6612D15B8A5FA6435C4499A1ECA1783448EE4 -26F7C52B3, 4CFB521D25D4841B3B3AEA60BF54890744FB04AD389D90751CAB408870AA96E7, 63FF30C411688891F322842464D50CEAB09508CDFFB2518613D07493A68E7D53 -74E74F819, E33DFB2BEBEA0F89F7B24E912C309F1BD2201385E7195A7F86EE8D827D252C48, CF788477541A99C605A5A49A445AE2DC83D332CC2E25C00E8DA74DA1816602B3 -15EB5EE84B, B6F05F7350F984E483866624FD32F344571505D798AF01C76B0037A161898402, BEC64BB72514F0302CD84ADD7F8B839914D169F32C4D7DD7E75BDE14610EFEA3 -41C21CB8E1, E4BE38E3A719C76CBE660756EEDCE585E836F79C252F14ACBC347D1F2B005D03, 6F69C0A3DCD5F48BE6EDF0D787AF6C985591C93FBA8E9844B2E2BA83937A3F06 -C546562AA3, BE14B442FE165FE657CFC0CA8A1A765FAB5D14F96988FD02336F03B96686FD3E, E6E8020E81856E788370FACA0708AFF83831A25F751A8F192BB13B9039338DBC -24FD3027FE9, FFACC9CB1F8FEDC112BE4EBF255956A8C8770686D236862AD1AA51C655A8D6E3, 8301B27043EF5D774421E58E3160AC2B82DF8FEE0C97E0A7D2C3499D1C2D1B91 -6EF79077FBB, B192264B1A443E9AFB9CF79B1ACB997B6664A92AE1B8C84FBEA2FAF6E9FB1841, D499FB416CB4709AF072C78A4CD5ADD0926BE45964F09A37E9B3605B15F62F27 -14CE6B167F31, D4C9949DB9AC21F126575255AF2E99EAA6EC3E2C9658D572594445699B0A811F, 6C88B1474CD419D6D7725FEB2EAB9E0F007DC873F12B11484A06433AFA0ABD54 -3E6B41437D93, 5B582B68144EEB9B4921D698129CC87D4DB79A8057E1DFDF87031FB59617C6EF, 43E9A8B669B41532768550B6FE7885F5E75B114D9802A777A9D6C27224C8F361 -BB41C3CA78B9, CC026A9D0A728EC8994DCBAF79F3CA6BD3A935AD808C606886BD333B031940F0, A44C9033F98079E7F2621A921BDF565C861C125A8E6A977F1847B90F34A0495F -231C54B5F6A2B, B4D0291977B7338239B0087DA7205FEE91AFE4E9502AF60A686F0A4ED6E898D4, EAA998CDC7F5BA3ADA9B4FD1F031C0439B1901FD7839C4E6C57D34981598817 -6954FE21E3E81, C84EFB4200A900E25C11788DCD6486271683966891A1720D4E69A05EFDF75CEB, 7927618CF298C706A84F263214389D2ED3590B0CF56616B17A4F92578AA66F79 -13BFEFA65ABB83, 6873677B3481510BA6C07094667A74758A95955382745C2DC9BFD221D86220E9, A996843948A68261819C67D9832431FDFEE4C4B740468B1D32E634AB54FBE56B -3B3FCEF3103289, 318D2083EDBBDFF616035068099DEF9F8F301C18862819572AF983C0DE1B5766, CF4EB2E4EEA21CB80737146A9FE0A9FA8ED27BA3304B591D044F0B5844BE2440 -B1BF6CD930979B, B9F8D2CD8605FBB34FB2E45CA1B7B551290A9756E4E505B8BC1A24D573A2315D, A7DDE469F7EC6C41AF7106D876E942D6326B0B080FB8974B5FCFF4F57B2FE3DD -2153E468B91C6D1, 4F34B85A6E86EFCE07F2416EA5207584EA73EE563AAEB8BA5718998C3E6BC837, B9E58B8C624FC69CABFFF05F0AE627831D321A7CEFB9B46DC00001BE04557FC3 -63FBAD3A2B55473, C72747417F3EDEE3A825D6812433A765B86A5232C6C6A659C9A4B191B1E1DE94, 6CEEF872773D01CE3DF28BC9CAAF7FAFB99DF1D959F68E72E35B6857E0932F8F -12BF307AE81FFD59, 81FD011C8A99A40DCA8A7C32C79162A5F2D4890896CC78B3A32ED717CA5FA2A4, B9D74EB358E8317836B4AF55570A1D3D12860572CD2A5B2D0DFCC4BD3C4BC987 -383D9170B85FF80B, 40AFAE4C462C69336D891960DFE6E196E9993833E665E049B1954637D43A129E, CD4061C098918CE5A9C8AA6834BB03BD772075E65A409E46D714F355EC60EB8A -A8B8B452291FE821, 74704BD80D4E27078A655E706E2A597ACDC29E436EE80BCBE18FAA84C15C6DA3, D1B40931780C1DA6335FC44FE4692B6484F60E252D02F83BCADDDB3EE7A896C8 -1FA2A1CF67B5FB863, 6B439DDBC100DEDEE0483A0C4FD5A8CDAC1802CA3F97293CA725C279CD7BB08E, 59140C0741B1FA234AAE1DA31DBA65D9791F33969AA7061B0749FDBF88758FD9 -5EE7E56E3721F2929, 7668C2BDC91D291B02650789062D5E751BAFAF59CF998678B898823961062D01, B34EB15AA456E24AFB98C5E6E4DF372DD91D129AEF901E0B130BCF7E9331F5ED -11CB7B04AA565D7B7B, F92C3A38FA5E7DFBEFC60FA0E2456DB43753A261BFE6FF63C62E363EC0878113, EEB2E1B0276140E9BE5305B50B749C7B86A03E318DC329631BADBF3887482246 -3562710DFF03187271, 29E7020497D6ACA67F6763F75F4B42AB5AE4EE8A13AC502FCD3D360F4ED642F3, 4CDE12B3883D75D2E0A6D7609B0AFBDFAC4988D9705AFAB4EC0A1589514E0329 -A0275329FD09495753, 1FAD5E7460F6DFD39F30175930AF50D1BD7C5D7DC6BD042D5C41F2C50CDA39F5, 621FF115E20C9EA82F065D44A3A8E1A5ADFE5BED5A2CCCB7CB41EA3011DEE37 -1E075F97DF71BDC05F9, C32260FF2CA314BF21C9657FE2A67DBCD42F8FEE94801DFBF19B90B5F0391D3D, 4D5C4D7A51DE0E13C84D9F73397E2B60691641DAE21E8A0EC176099E53CA25D6 -5A161EC79E5539411EB, 27A7C9B7C1D4890DA2D7EFF72817674AF89B0252D4C5D475BB3A4465E447FAE5, C5E46F8F273374A13C5946F38885C32EC2A74E0EA841FCC7B89BD8D83F55FB7 -10E425C56DAFFABC35C1, 118A2CAC0A483723089A3E884871DF85AC85AF79F585EBC3DE428161FCDFF17A, 25755E6E4CBE651A0FFADCB9BA725B814120B6C06CDFE5A84F907E6E2A6470DB -32AC7150490FF034A143, 8449173F1EF306C543D0C4B9F2CB93429F34637236E309BE67D53D4157796723, 781842F7C978BB63AA594FAD8A68134335C945AD09177FFE0301E67A0B8578EA -980553F0DB2FD09DE3C9, F5E177E4C208EE73EA60F93CF55AA29C7432F64190151C3C9120EFF544507895, C3A1129403AF90EB0144B02064C808A74E77FF1B8D5D20959F2D1C6485D8201B -1C80FFBD2918F71D9AB5B, E97A1033D8D47612F69417D75A39F45E4D3E2FB2BEF8A236C5B1378403C3C82, A1FF6F7DECBD7908319D1735F7E9FABE8A65C6496586B7773B9DD7F3C8458AA -5582FF377B4AE558D0211, 9B62C7D0DB0A1F1F71060373F50A34A3A8956CB4C6ED4AB95B400369E180F74A, 2074BE51F968B87465918C164637E3388C151DA1454F9F5696D93C0B89F5B795 -10088FDA671E0B00A70633, 57789C6F63C6D8B3E1B8D2DED479226BD3C4E15D76A8F184F6434DFD51C95EB7, 2CEA6ED3DE8E8DA3FC023B7EF1879D4035F6FD58A9F5B2CFC3AC0BA58C6CA623 -3019AF8F355A2101F51299, D8BFACB83417C2B665562F70C8AA2A54049B5490BE83D35219E61F4F3AFA6DFD, FA0EA105DC3EDB5BFB57AB2EB0AFE60439F6FBF7ED372C41E23CF87EA1D7D7A6 -904D0EADA00E6305DF37CB, E05FDA5A217409FA3682C6E5707D440D3DF750C185C58CDCF9FB96D7029E6727, 4E336308069F06AD9140C23FC466A16156F5E96E838213AE77F98CDDB1C36A1B -1B0E72C08E02B29119DA761, 84090FDF8B97262415190B79DB0D272ECE5CB2F374E4C05A524DF214BE291BAB, 1F40013072768A2CBAC51F4C1F1C03FE57BE78DD50630416450C9233682514A7 -512B5841AA0817B34D8F623, A3E2C85B131943FC0D17EAEF2B5A417D31C82139ACB2DBCCE2ABBB47AFB8BD1C, 9BFDD98C5698680E991367A49595BE03693E633F6D3ED8D798D8D16F3B4AF3B6 -F38208C4FE184719E8AE269, 38F0BE60E0FC25D6408D876E330CB8EF1EB27187B105D16B1629173F8D68B2FE, 5EA95CBB1C921B1CDF7B3EAFC19B38B86C0C014C8310ABCD47AE72332FA3476E -2DA861A4EFA48D54DBA0A73B, DC28C706097F7625A596B6A820CBFE34152C1CB3B6E98A45CF408B2FFB9A4212, CA52B09F3E15F24719FF2957437117225F89CD191B926868DF67ABF6300A628A -88F924EECEEDA7FE92E1F5B1, 757C39D0DF71B146F31A43DF4399E4D48D2F4310B4686065D1151C00BA3DD58B, A9EAEFD96F3B04DB4CF7083552BCC39490651B3D25939B976273172EF2148CD0 -19AEB6ECC6CC8F7FBB8A5E113, C5CF26F8A81A725795FDE9E4D87D5D3A65D02C62BA9A314FF3C452287CFCB3BC, 7A6E7E4F2F6F5B01B6BD56D85D5A521E202DBE1C92C26E4EFB53A42E82132FE7 -4D0C24C65465AE7F329F1A339, E4A096A0679B179692D761649FC84D12633A45835BF68FF0F6363BB7ACDA2C20, D583B39C13EB95321119438A0FEF948B6FE153AB86CD3B04D68C1C996E0077F9 -E7246E52FD310B7D97DD4E9AB, 1EF7F3BC67DC61B3FCA443E1BE7D775B88F177DDE0DBBC4F87747F8E1FEA5773, 49D9B998A6E36EDCC36EC02D8FB19FB7B9C62773EFFAD5DDBCE44EA8536DBA19 -2B56D4AF8F7932278C797EBD01, B62940D11E471FDB4D19A1C031BDD77D03D9EB7872F1E346C4D71C84A5FBEB2A, D6A251B89ACC62DE0C334E772BB10CF98D42213CA33A7D80E1D5FD97A6BA7588 -82047E0EAE6B9676A56C7C3703, F19C132F1A7081351289273DC31E2383DCEC911C26A5E72B479310EFDCA4956A, 5DA7EC8045266BCD898B3B74EC70C50F3018F6358DB778DCC03085327A5289E9 -1860D7A2C0B42C363F04574A509, 49E7608848B7D6FEAF1C2E3099BE6C27CB12FA90C152CFF8079245EC7C99FDA, E2D3BEA787376ED5A8068D0DFFC52DF910979622F4C6E7B8C366395E6D79EB1E -492286E8421C84A2BD0D05DEF1B, F1F7EC33D596D85A2DD9F97761DA0EC886A28A8E3785B1C431C808BCA54AB101, F5E265D2AA027AAAFF41EB6C62C0C2B45EA12EB74BFBE90BA24F7AFB2023C613 -DB6794B8C6558DE83727119CD51, A8AE6416C72DA357FE356210B220922D91459F8017B948C939968BAE6A816FD2, 19192FDED9B5BE5F6767116343ABAD2B918D3E1E69324E8394C3AE15D18B363C -29236BE2A5300A9B8A57534D67F3, 802604495D3CAF58CB2DB7EF1B5A9489E8F1EC87EC2FB8755D13A712B9F29F28, 8419F80449048AD209258E35789417524E5279FDC69291AE75C1E2E0FC3BC923 -7B6A43A7EF901FD29F05F9E837D9, 3256A959AD2F07223CCE16C4518C5FC0A048C2F275D6ABF5A0E75D89B4AE4641, 5770511F6606B0A9C31BB70996580A9D594A7352E9F0EAB145521238A1D0E141 -1723ECAF7CEB05F77DD11EDB8A78B, E3DEEE86BAB797332DD6C21DE8E6D3CC40236C52A409B2B2AC77F2EB450EB271, 5149CA7FEAB69D29F8636DE57E8BCCB7D2DB60F41C8D6294F6863E29AD46B6FC -456BC60E76C111E679735C929F6A1, 639346FC6E6328306F4EB3EDFAAB0032027423AC593C6BDE70D6D15FBDFD94FF, 648B19BBAA5AAE60A88FBC1003CBEBB684977372D1DBB7D06109421A3BA65043 -D043522B644335B36C5A15B7DE3E3, EDF2B3D2431C8DF28E2CAEEDDF543B82EB427F9C176F3D6E7A7E2F796B01BB91, 803FA14E1D972D8D1B9731C69B1BECE49B8B5DB5F0F35F0DD83E58960F8067CA -270C9F6822CC9A11A450E41279ABA9, C0851884918A2A184BF17459E52C18138489928D34EB18C4145110525CCB70ED, 5E2BCDBDE7699A6C49D22217799C78B881D07A3F6968F21294AB9FB9BB80CD05 -7525DE386865CE34ECF2AC376D02FB, E86A26AF7DF39DDC653ACDC0FF0C106E9CC39A52950B66C813ACACFD7EAE0396, 894E0A381D815ABFBF2935DEC8B5FCF1AEDADD8C8A733991B7E6A1F46B22E5C0 -15F719AA939316A9EC6D804A64708F1, 3BA575814160D9E223A87EBEA660EE5B7801E07C94FE56CFEBB8C7740B2DCFFE, C057035184B7BBA91FF3B71297AD8482B9DFC0B1BF0395F0365AE5E0EB535019 -41E54CFFBAB943FDC54880DF2D51AD3, 26C0625191AA21183B99D36778865073A8A07CE5EBE1124BC796D027EF884B43, AE8B3BD095D79CB195CDD9FBC1078878B7EF018902B504A3F1B8F8B291C655F8 -C5AFE6FF302BCBF94FD9829D87F5079, 2EC7445C966E75B5096FCD85DB95E5A46B8214C0B412E6483A70DE7AB33E9F61, 1F06DCCB29051713852C3D9120D5DA846B868105F5838993B48E649BE7660104 -2510FB4FD908363EBEF8C87D897DF16B, 515259E8C7DEF6D58539D142D4049D6C1CAD70C1EBAB248E7ACA4113CDA147BB, A25072696182B4EF15DB2A453D4253491A86BEDB929A1BF10AEC1846A68B2A9D -6F32F1EF8B18A2BC3CEA59789C79D441, FC9D89DFFCF825FDE96C6A3E1185639B51ECD409A6EF3FB016D825BBD0275A91, 4BE6FE0665F733F48827BDCC02E14FC0443D3BB6D165956A12F6A49350568051 -14D98D5CEA149E834B6BF0C69D56D7CC3, F43AA390DB46C4DD0B16E616CFB9C56556AF36E3208B7AE109BC31696A12E8A6, 7B26118F753416608949A5425AC4FBA4C73C799A92EA56A07D3C70A60A37CA6A -3E8CA816BE3DDB89E243D253D80487649, C519979CB8BF80734D6122317A41B2B028C00F9D670B2351A2556150D3AF52C0, ACB6ADD534B0D4272B93EAE9F8D77A064F51F9A110427694EA8EE9549C5EF270 -BBA5F8443AB9929DA6CB76FB880D962DB, 3EE87C4796A96E074122A62B1953BD3812489741BB88CA714F20798F8B27B487, 2A8B7621DCD56DBCDAA3A4AC5D7B1CC1D78586969CDC9738F97A0DE7D469527 -232F1E8CCB02CB7D8F46264F29828C2891, D37321D22010BA39741189B284438540BCD88595890B8AEC37C8F50A106214EB, 9384CA1E485F0C77E3CE399D1518021D33F1C09454924EA1C7377BD9F46E4064 -698D5BA661086278ADD272ED7C87A479B3, B0063A950C72BED8F3AA2D87E7F9728CBDE2AC10AA203CF0A507EC2B1F431972, FC9D164F254D82AA6DFFA81F0C0AFBA525B2AF3F5AD1914081A3AA57D8424A0F -13CA812F32319276A097758C87596ED6D19, F46A205F21E8560CE289D4FC7EDA91AA9302B722435F24D3168FAE1176B0EBCE, E1F04C816D7EA9783538D556B58A83DB5ECBC835559CD620D7527BDEF66D2AF7 -3B5F838D9694B763E1C660A5960C4C8474B, 27ACBB5308966BF46CD907C16A73EEA175B6A8DFF72BA8000CFC0C5D8D3CF1B1, 4BA2797C5210175846145355E7DBF420DE8CCED60A0F2C3130EFD226C66C0084 -B21E8AA8C3BE262BA55321F0C224E58D5E1, B5C3E7F3488FCD747D7A654DF687E7229B48D8B4350F3C48A28BDF16616E9989, 6425C6B6A515EC5152ECA6AAA9B7DA7636DADF51C2E54429828F0938BB4934E0 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 379B3609C349B0E1DAD8C90EDD479E70F278F5BB7CDB365316E23DD044A0516A, DC79E2235CAAFAD8163120508E6A233A60883119E36A625E8A11328957072B9C -64312DFEEE1AF5788CFEC3176D34C11F84E9, 7538AC4A0F08CCB59A0193BFCE0C12DDC80C84807939190B0629C510C804B714, A8B3FC8066FE1C94383F4C4188271EAC8383F2BA6353E289518C7F0F7B04AF7A -12C9389FCCA50E069A6FC4946479E435E8EBB, BBC2076BE1060AD9806A9FEE9C39DCF83E8911CF108ADD64DDD9A1F5913022FB, 99BD974AA1EDC414FFE0CAECB42E3AEE437DA6480E93C5B8A9DD476939B4BAD8 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 75064663173439F4642B322604A5CFDBB542E474555FFEFECB1FCE3B5175412, C33956CC23C2B31CF01DA801E18571535C27C5F5A16A868034571259786E3C3C -A912FD9E31CD7E3B6DEDE937884905E530493, 41B3248D83A738F9D18187BD61E3A3DE66127F8C7598320653F4827E74F1ABA9, 535A0212A912E134E0AFF0792062A7E8AB70DDACD27A84E15771D52789D0BE83 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, CB0D26B71EB1A3F0B6734AC607DAEABA8FC174E58F09431022D27A7EB3E0390E, 98F49A1576BEF607E105FD66233F5F4B3EC2E137E3191309E025233F12338CA7 -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, BBA6B4AAB4E9AFFDA12A1B46BDE8BD974B9BE34927CA1CF60414A9A118145EEC, 1506C0C1C16DD4EB36FC0CCDBF62FF6E83338A315D4FE7D198C41021595C9FED -11D500BFAF40AC5044981798DB5FB39F2C17B81, D31396ADAF5CE28C15DAD95035DA92470821F4EF5F0580A76D47F01A595336DE, 6E15BC1BAF9CB2B85ABE5863AE8174D9C7E7AFF65A253D7627100F21D5805E8F -357F023F0DC204F0CDC846CA921F1ADD8447283, 9D29DA456BC96B1A6098E5D33C6A28D09E30368D2864EA09A392FE65903B926C, 3ED2BEE9A1F81625B56BD99534F4F332FC590960BF879251028785D75AF8B015 -A07D06BD29460ED26958D45FB65D50988CD5789, C9185F8DC5E5920FDC3E7BE8DC01E225FEE33FD36878AB8509F85B5306FFA9BF, E3CB73400EF954633EB052C2521D0AABF57C3E67C24DC52D999486D553C7E85 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 42A227EEDFAD4F956B08220D22CA0BE899F4B53407968C28DA2D8A1B7DB164AC, 4A907645D663C2685F6FD6DF0DC5A6B6EA158D3711D54C20E269FCDEDBE315BA -5A4653CA673768565B41F775D6947D55CF3813D1, D0D9EE4E36C677D83C325453BF023BDA5AFC8D58E21D23C1054F1BFC64BB53C6, 2AFD68ED137B3D199657BA1818CED99986F51FD25B482035544E6DB6EEC374C1 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, D5B0A27331B72048E0256C1889452B91E366A6174BCE131707D7714A77EAEB72, 5677E46D5757EA41DAC027757C3FA37167EFE9899882365A90088AF78E70864C -32C78F21DA0F2AB093551B3248B38680448F8B259, 601B3A7F661400DC5FE42836C3179183437C2FAB42D177A9B4DB1E3C3D001BCF, AEE8201AB9C8A131A9BE793AA5AD2656E617C9F6756A07A21B6D0CEAC1F986D7 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 20B5805698BF8ABE22E9EEAEA3BAC3997386EB8AD44978C74A96C82285954243, 74717E6B981FFA53DFC4DA6A594F5D1F19502DE455F4E76FD452DBC43C006EE -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 5DD4513D170D41F1C44A39BD70BA0F893514E621938B46BC7ED527BD56CF229B, AD7E0A11FD54CF08360541F956DC20981C338736AF5CC9CFA02944C25E450DFC -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, BCBA4F7644827255373B8438FF87536AB8B311403E566509EBEACEFA63795C53, 6B33C2E0F5E5295A540DF25382ACF3F7A43A2BBF87F07362500846A09A995928 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 2C4DD6E270226605AA870A557478C45818C2FBE60A3051602938961A898A47DF, 67809BADB323B5771403E5451F1164D30B153BF06264D95C5506ACA551808494 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 172E760F60F5832A4102279B67D7DBCEE5D6B160D08B3406291B2602B6380123, 6BCF9F3127D34CA4018B2A353188139AD5BB27349343973BFAC8C4C8F7B06FB -909A469765F53090D38D5A7231073A03433CC33DF71, E5EFE6615988FDC242F4897408F12A775E9CE30EA49E86768A50D75B1D29EC2, 811C3E746DB0213AE68C4A59DCEFD8D97B025642ADF378D1D8DAFBEB00902EEE -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 11230F173782A6F4015B5C73F19BBED3B4A77A42194CE966634FBCFBC55FAA79, E7F5601F7142B324399DBF432D96E3EC7DC1E9C1B3038EF671323BF544B3472E -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 2932732777DAD6699B771BE1588FD7A8755125F75211256AE80882301402E8E2, 21E71D0914D952CA1EB4BCBDF5245D6063E4F414DD38E7DCB9FF35CA2328D644 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, E1DC9FBA51344E8961A9F1BC2457BFEB72E012FFFACF6B7D878AF94685A99783, 2C73575BAE8AF4E6729AC50A8BA3232CE3A508899B82BC40124EDAFFC148662C -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 8C4E50B668E48CF16D0424D5DF62FDF56D81664BB1C86D6E227E1148E57F875A, B5A3360FDEA16D4B198319417A0DA67F61B05FD17545DA2F102347D9B854A965 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, A0E92557F24612657AD7F806B01783729DB117684D1CFD3EEA21AF00239DAC4C, 1E5DBDB219B477DCA45F33FBDCA3563EFC0238A800FE63AF67E229346C093EAB -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, CF09FEEC622B4510F5454E6D607D6A0DEAB9747859F04675E6C82DBB49BC32BD, E4D6AEA583107B538291B8CE6D18BB1D8F88B52613C8DABEAFA634D472EB47E8 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 9F1E4A1D7B7102C71B2C94FF205E3A5B466D61BA76A38DB5AF85A2FC47A57865, 7A0B26C93C1E627E33806C188F92341507B172B325836CB3A89F9DD153E2C652 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 6915B63364675BC7AFBAFFDF78D9238D3D7FE8525AE6E40525CE9164C5900F47, 1F922B67DF773EF9DDC0303A9173D4A0D2A294AF23AD0629B8C9D84C29B061D3 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 88E314A2C7AE62DB858AA1E9795A5A89F2FB360A2AC6D4426D7A3A455EBD3BFF, 27CDD0A660FD359BB4EB9CEA269BBD47D4D09904CE636FC6E470CC7B212AC975 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, ABA0CF697B1B733B287C0A97ED1FE76E29ABB4FC913E67443CE35082A92CB204, E4517A1AED272352E021638B812635F6C601BD46D04DF1EF3B38D4136C46C556 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 5E42DC088B475F6118D595BB3E79E896F5B2D8704890A1A0501702EDC00E8994, 1A822DB338757C5660D439700AA2183DF58FDABCB75E7ECDE52727FE5F18B220 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 408FE43D610E979002BCD4BED86DF136D1A75ECAA324A7B9BEA97520C3854EB0, 7986FE1E891C6207C55AF240C7DD10F69A819CE9F62FAA1CE2BCC0CD701EA243 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, D16513119B25F3BE15558FE23F5B87BC28C2189B706EBE95719DAAF309273834, F0173989C37D2E786E3110CBD4B6E56C4FDB00D4B21B85723E1784316AA1C047 -29396F76B67B7C403D73A1059B80139336878E44938606769, 3DAB6AD259B5F731E52FBAC416D3BEC5DD302D6EB68C518F7D8D930A134B36C8, 7FF5B6B018B0EA0FE9ADDE3E7375545098B5E3E259CA449FE20C56C2FF496F26 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, A5C296195DA154D92C3D19541995F590B88AC659F9F74B9897230977BFDD2D5E, 8904813927D5C1E6B4F3905C8C51C3B14DCAC2719201A8EB05D689628148C1BF -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, BB9CF3584D191A4AEACB45036D831C849DF57560084E52A72067D3BE614E750B, 54AB4A833C01CC422A1A253EF92A60FFA34A20BD82E8BFAD6E15558ABDB6226 -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 5FBE2FC3B80AD6CCE2607AC27C6BAC3653A234BFC23B57A030DAD8514A2C6216, 1ECE4BF22FD472071C1C9F236504A74CC79A830DAC770D5197F39396AE2BFBE7 -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, B353A8A9EEF105CCDB44FD3199CB6F125CCA844DBCEBD50CA02BAA1600BC50CC, D02DF9BEBB10D532F76D7311D563CA98FAEA4CBA7875285C846A8EA76B0D1EEB -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 91D63516B8BB7FAEC5F621F5A9675F3650E4C816CCF87E80094CB7D6817A366B, 51747822D2D489E1A9D5082F36C2C15054B2747EF232DD9D08BB1B3BF944BE20 -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 15E0B6AD6FFA887741DE3014BF4FBCFA1022FA8285382D8D5C69EE243EB3541F, D04B1F1C77EDE6A5579397AA35EB012EAB1C31423B2224AA972CD8471DE8D3D8 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 18159E5ADFA2E5478A196D3E973758F6D6A24E90BFE666FE0934E3567F212D45, 4241715C90E432F154949B3D82CF2F2EF48F0C17FFE7F532347C8DB4B30DAA1D -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, 55F7D55C605C0358BC078616EFAD8E90CCB6E737BD9D1CC10F5BB8A83B49F257, 39345974E4659E643CDE92C9EA5383F2FC74B533B359A701D4369E87C5A87384 -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, C5012B7A288170DA3E0C9B30C558424060777BB1AA385D7BA777D3F2A5CD570B, 269487431A01A4958ACACF309193F80E09E762CD45C228B31D7CF3BE064C0F6D -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, 494002E29ADAAB3BD42DE827969021162576E562D318A88E6839B0632BEDCE3F, 4B659BC6EB77EEAC9AA62A9B0A25283C285D350002865ED266357C978FA9AFA2 -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 8937CFDC5B97748769F993BFF1FC5300A102362694F9CDA200F5A3917E734947, 3D77B10A04A27B8C79375F6CA5F24DB11A02620065B9A5DB088D246DD25BBE52 -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 2496ED6C44A9C788229A5205D2AB01F491AE4217707F18C27F5E63B567581A1F, E394A06C008B80E00BE7FDA6A79D45D13422B5790A871F010B6C92EEC8AD15A4 -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, F21CFFB3EAEE40BA9DF1DACB4CEC7F65DF71910445027153231DED0F452DC3F0, 1D03B97F11FE7BF87ED8485583EC19B6AEF9A236F3DCCF88689EF77211E21AC8 -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 645112B55D4EFC904950086C082DC4D3D41A8E164E86C01554909C0118686C2A, 6B68130DCD38D7DDFFB0B6C24F63BB856995DD1A1699847F67935A7EBC07ED95 -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 93F17111EFE40A080B8ECB79E19B0176E9D80A46C0AC6F68799DEBF64B31F72, FF64A78282EE7D13EDCA84C46F0869C6BD962D02460EFF4DDD8644ADDAE46556 -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, AE69334BA71DBD00B72490AA9EF5BA78A2E20D515F2CA5C6F926D9C08E3B3259, 797BF85C91245664BC1EC92B9A706977FFEA62465783AE9D93FAC6385A74FDA2 -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 5F038A8AC8431F9321D202C24005781866563A68A2BD832BC55CADCAA0A51AD5, AC0696E2796C5A3112CF6ED1A7D9A08FC3D98AB9A24C8FC23A24228D5AD8C8CB -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, 82DB9DB3EEC13250057CF1BFE491A65657160DCA8D8B2FEB6FE6FAD546D4F2A7, 84B0E6C31FC401C5305381127E0BA9D69270B4013C54F490E153A075827A6908 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 34B824BB7171AE67B8D36BDC03BA146348E472024C48336F253A55FFD92EB98B, F86CB5EEECD0A02BF01D079BA5CF97C797C5AC68FA2710E396C9BD45E0407C69 -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, 279DBD6D1E7C0856C628499CED784DA0E025065E8CD73CF468281147F76695C0, 15C322F07B13711DFFC4F90149E49679A3478FB598C013724570F1C042B1CA97 -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, 88F6C763894E985C100A297CEBEB74F0AC2200A6CE73E1968973F6DC093EE523, DB6E1A86B52B180EC1A61C61CC574DD86F9A75503F905679DEB642617BF36EE4 -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, D5D356D043B1536C5D197072C9D15592EFBFE8D34250CF7D20FB1AA7AEB348A5, 56A5F938EDD5FCF99D493874F71D6D893635255A88726D9C35AE85D77194D385 -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, C14DB8C85E0B6D2B676E4C0A250649A85FE73C8D0C7B453F1C4AFEDF67454ABF, 895257DFB694ED1FB4485800DE790065677C29C0EC2D052A884C07D480933A54 -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, DF7D5C7CF72E94C8C8BBC544B593AC942345A022B8F252D517FEC874AEBB57DB, C7D88559EFD4407D8BCAA17618E49AA4CB144788696020A15507F2FC9C287EB7 -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, 6F6ED9FE2B4AC0DA65688AB6597A4FECC2569C7A40B8EA464A433C399801B87F, F6081F2CD5035CCE5720C1994CAF29AEECB703F862D6041734049FBF89D00495 -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, 8BB82D1D4814E632E56B14E7E14A66EB4D199B8DB27688D93109C02A83C03717, 98269529F24CCA3CA4385B62FE340000A315A5BE887C6C914B58A0E71FC2B113 -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, A33FB3D793FA380AF2F28AF7A62D59A92D6BD0C837D01BABCD439C47C270A090, 4B7DABD362A3CD41D839684D8F247DB031B9EB5A06F808360288B0AF42A645CB -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, CE26845F94DEE7E0061E9E5C14A7CEA984708362168320A5A0E83029C16A2D9B, C02FB0DF34C761734BAEF1573B4854E24174372E735AAB81E616326D406EF10D -A0D2E82CA5E358392DE9951D10B533E405FF396E226444B3B8F22B54A64B, B859547C4E7207BE3CD43268192AB88A88BBFBBE5687E8533C7AECC6A1D2BF61, 7E53936BC792436E53C10B930321945784E885B43626B26739DB84A713E002C5 -1E278B885F1AA08AB89BCBF57321F9BAC11FDAC4A672CCE1B2AD681FDF2E1, 22CE0FBE44DE6BCDF09CB9D85FEA1FEE51E515EAED6CB21B8977C7BAF5981C38, 1DEE07C7AC027A082F77EC582E2EAFE281F7AC1D709788323DABF79E5A73FBEC -5A76A2991D4FE1A029D363E05965ED30435F904DF35866A51808385F9D8A3, 2ECC1298F418914C6AF79DE90BE8021E3C7F81ACD61F0449D3ABFD9E3DC63997, 8D229C381A022D2AE62A7B4E481F2564202867A4FCA904D4E91CC6B70C3BB10D -10F63E7CB57EFA4E07D7A2BA10C31C790CA1EB0E9DA0933EF4818A91ED89E9, F8F4F6A1955A9B753D766668CE35829F70030A14CD05853AA09E6F610CCB168F, C6AE8802312258020113FFA9576856155057345E8DE06B43F5D8EA9DAAA9942B -32E2BB76207CEEEA1786E82E3249556B25E5C12BD8E1B9BCDD849FB5C89DBB, D7428B9DDAD0BAABB29E93E13F764F941A00E4645F2590D7E2C1EFC84D91568D, 196696F277C70CB49678359D63AB99AD479B6B9644CA1CDFDD2A1BB3EFAD249A -98A832626176CCBE4694B88A96DC004171B143838AA52D36988DDF2159D931, B8E809F295A7623691734C066D59C8FA0D280159ABCBE1D42967A513648664F2, 280F44E7306591A76646D5FAD6869034A5176A4C361B374E8C6D3CFD333D5DA -1C9F897272464663AD3BE299FC49400C45513CA8A9FEF87A3C9A99D640D8B93, AEB5B4C2AAE2B8F67DF988F43BA523740CBA257BE4422213F4F2A162E4A5BE4A, D42994CF1C0EC81D51EF67AC67F7E77FCB1DFF4A0E031ADAC893EFC3EA9C0AB9 -55DE9C5756D2D32B07B3A7CDF4DBC024CFF3B5F9FDFCE96EB5CFCD82C28A2B9, F9BBF4C0749790F216CC5CDAA17232BA85B3729B36A4547F795A74BA4BB31F3, 322EFD9EBCA43A2625AC3DB8A785DB6FDE7288258B64FAB6C824013568E1AA34 -1019BD50604787981171AF769DE93406E6FDB21EDF9F6BC4C216F6888479E82B, 6336F3F2C0287F1ECA291AB6434163DE79B45E68DB62986970DED3A46D38A43D, 4D91C779F2B3505E0952D2BD1C3F59FC91B625546C5087E9E7D39347DEF446E5 -304D37F120D696C834550E63D9BB9C14B4F9165C9EDE434E4644E3998D6DB881, EF7444E99D2F2A08ACE89C4143B0F95078F15B7F4FC7D9341766429383589095, 215F00149824E1739E36F1E6FFE3EAAD9C08DA5CB082F3B1DF0A3F2349DDD9F0 -90E7A7D36283C4589CFF2B2B8D32D43E1EEB4315DC9AC9EAD2CEAACCA8492983, 4B0A4283D9A07E54E2D09B415DEF9C09C5230568EFE290E696F2957F75E2EBCF, 22FB66F09632C8A9B39DAB9BAEA63D364B93FE0D4B508DEEA6F4716C4E5616F6 -1.3.132.0.10 -1, 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8 -3, F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9, 388F7B0F632DE8140FE337E62A37F3566500A99934C2231B6CB9FD7584B8E672 -9, ACD484E2F0C7F65309AD178A9F559ABDE09796974C57E714C35F110DFC27CCBE, CC338921B0A7D9FD64380971763B61E9ADD888A4375F8E0F05CC262AC64F9C37 -1B, DAED4F2BE3A8BF278E70132FB0BEB7522F570E144BF615C07E996D443DEE8729, A69DCE4A7D6C98E8D4A1ACA87EF8D7003F83C230F3AFA726AB40E52290BE1C55 -51, 7754B4FA0E8ACED06D4167A2C59CCA4CDA1869C06EBADFB6488550015A88522C, 30E93E864E669D82224B967C3020B8FA8D1E4E350B6CBCC537A48B57841163A2 -F3, 74A1AD6B5F76E39DB2DD249410EAC7F99E74C59CB83D2D0ED5FF1543DA7703E9, CC6157EF18C9C63CD6193D83631BBEA0093E0968942E8C33D5737FD790E0DB08 -2D9, D4ED67A9CCF4665E418A0DE08D9380CBFC311413E90A964BBF367B9B0B892630, 8FF7E57CE79A08831FE8A9729249376407472B7761B055FA37105D18B51DF131 -88B, D03CAC394FDABFBF440A6893E410DAB2A7062DF3ECBE1AFFD30703B16B6348F1, 152313CEF530B31770D85C087DE95B1B5DC4A86D38E4040AE5D1BA34449D19F9 -19A1, 3855C437487B44F29E5DC288FAF3ECEAC445372A95ADC16A0B1830A4EC919FB6, DF2E1E9A48CBFA2854FBCD5B308BDBD5ED1949F5E1A3951911C287C8289359D2 -4CE3, C29A214347D227B76B8D6F15027C5BC707F93E63E3A211FEE61260883AD071B, CB396670C249F49522922C9A4F90A83F1B4F4FE75A2FFF7C73B9818406FF7F96 -E6A9, 5C9A5A54838CC64BD4D39FC30F83AF5DE87EDC3359E06E95E1B6EB515E8DE010, EFC98CEE23BEFBE40C13CE1CF45F8AD78CFAF2E419DCF388891373B37AC59F9D -2B3FB, 62F459DCAB2554ADD9BE0CCD9230234CDBFFF55A1CD8900D1DA722E66FA909A4, 38FF1E62B90C7599DEBAED74180EBDE5482B6ED86E11A5AC22492E4F19D046B9 -81BF1, 18B19497ACF1F9AABE409C96E368F8D1FA535972036DD66AC899627E5897D1C5, 7827633BAD8270A376485704336FE8D0258C4A1138F945EE54538898507B3121 -1853D3, E9B6662D72E6F813F9605C51B38589391561657AABDDE5BFEFE7FCCF9B40B92D, E323B66BBF183244BAC37929E04588CD86C3753C67DBC44322AF6D6AFE890742 -48FB79, 604B7A1EFE8E7346BCD943E33B38E02AE632FA8E9F922A7D2E92419A63615388, A6944EEA6748DB9E90FAF9F8A2AF7BFFC466FE9346C7231B97060F10C7B4A0B5 -DAF26B, 9D83706AE0723F395790A65F1AD7AA1569F527CA628BF9C5A4746986D090A2D9, BAF1AB2A9F81A0C9DAF171828E6909F2E8B831458643958FC96F9C572FBC0509 -290D741, 260ACD65711549DAE42DAFEFE7CEDD83D6E6ABC045E905BA61107363D9E2ED49, 88FAB517314632A3E03362785EC4AF6975B5766D3C0E6E083F45D71D02AE51B3 -7B285C3, D194A6ED1B0E95025CF5FE6341D9635E78FB89C18F23DF112CED1FF980285FDC, 655AA08E9BA0569574F8E7E76575C6D5F794D10AC1F321AE8C19D0923D757BBC -17179149, 66C9394F8E82046548C4046342BAE49AED2A86ED3B07BEF0878365E661ACE5C7, AD771D18FF107FC176681EC5F80B6D7F6BB0CB6A36403BAF20D36D42F290C9A8 -4546B3DB, 6F2C9F6BA5661D7AA0A0872272AE719C0B7CB528B342D1927B1B9B7BD9F88040, B8E1EC89A722FAD6E7AD9B60823BBDF2F567003AB9C9D514004BB2939BC961CF -CFD41B91, A488F311672DCCB8D6C71491D3B4D384F78B219648EA9785659C47F1D4E915A2, 4373C29AA9B40F958CAA8C4B87F94A63411DFFCACDF571EFA73B1A1529068DC2 -26F7C52B3, 2CE1FF65A6EBF3CAA507A5A79492C47D84C73F23DAC7C6FE1A25E775B082333A, F71B1DB6288F5FC942A3068850CFF5C24AEBBEADFEB3C2A817F7F316CD865A7 -74E74F819, E09EB99935EE165B4B960AF8EC852CDC7F273501E267608F33D0307BA847D4BF, 878DE3A7EE7B9DED7139FFBFAF814ECFA1D15A2A3F33829DC77E7CDB0F6F953B -15EB5EE84B, 750E6C6271EE6FD1E4BEEEB9543B4F8F65FF1978439ED952580ADF61C900619F, E6634A9B3F1C909B87EDB2C1026ED62D9898F0BE546444CBCC4E01FAB498AB75 -41C21CB8E1, 295D1A4FE888AB0CC173570B0B8F6E237B3300A864355FC6ED9949C831144D78, 7295120BC446FC392A8E442BC62A3CE7077019C1692BB54A6C67DE94ECE5AE29 -C546562AA3, B997A3AC3A012208C4CA95C1C7F5CA96B992C11B7E11CC8BC3944EB3D2A80DCD, 2F75092258F52EBFFF2A40284B89CAAC4AB28C8E0E5173F94D9E5401B244BC4D -24FD3027FE9, 312D370160A34B43FA2C3CDB7EEAD64E552AFCB6B5B3084A4AE2D30831C5D9BE, 570B3925F711AA0DEC4EF18278212BED677665E47BC8AC839D6618015B7D79E1 -6EF79077FBB, 81BE97D1DDA7B1250E9B9FD262C170C69A539748075F8AC2FDBF5B450DFFCC54, A7A86654587C331BCF3A201C5BF0921BC3C1FE146C4F9E0186E86AC61F94CCEC -14CE6B167F31, 3DA39116DA49EB0B10599A0A6819A5488EA02FC1ADC4509AFE17E4D2858E9F53, 7EB41839639A58574B69BE88173ABAE52D30DFD4B72D9A154BD77C3E40401478 -3E6B41437D93, 48A56DACDD79478BE9B2050F4BFB4D678D1C218267B86196B6A34A36B56EC75E, 2F9F4004AA296719288DA0335BF4957D0A286710FCACB418C0F353DDE6CE7201 -BB41C3CA78B9, 7C77B15DFE4C862C2950945B495974FFF1547DC4B01140173380129D064BFE3, C06C9EE8022A3EB18C1605F6DCEA861440CD0DE14B2ABFD9A74F11B15BEFF25E -231C54B5F6A2B, CDD6763437F241B7914D3215271709C1D1B047C6ABF605407614F3DE2D78BDE8, 7E6EBBB3EC4C0C0BA67B1840422F62F06799BBE2A4C4DF3E89129616C4E60589 -6954FE21E3E81, A1B0E6E898B374E57493C29B75BDBEE4B31A88BD566613CA9F498BE1DA4767AE, 62E85EC5948ABF86023ADCBD6592DB7277560956DB075CC51D6C7016918C064F -13BFEFA65ABB83, 86564D31F79BE451819A3305C5A253B2B9F7C7136FB04002D3B37AAEAB7F5C9A, 2AA214FE510FC8B99BEC97D2977712B7BB9631F2010720A9FF9A01DF3A1C0FF7 -3B3FCEF3103289, 7FA67892E01345A57B6DA44A8268D7B4C859167F46268560855B08D2CB1840C6, B3C73F6F69C15E9B64E32745F5F85AF726B5432EEF8092B842AA840E1C60559B -B1BF6CD930979B, 52CC6F7ED0A5598B8CF85BED64685EDE46B00E9F7E0FC19521EBBFD8078D496D, EFEE0460AF563A5EAE4F783E9A6A8455D6612D85859CA65418BCE504958B7315 -2153E468B91C6D1, 16806D777A973849693B01E06284521D2BA92FDE6BCD13CB0FDB8F70591850A4, AD1E1590DE0ED43CCF3BBD230A5CBE256337981C4E3963D584647015804D6ED9 -63FBAD3A2B55473, 4CE6E017C43F6C679821230A48F3EC62D4BED68A9E45D9EFFF79A814BF44D73A, 1D8D2A6A0657916D68FF3FE394A6F7B207C9EA58939EBA72D92BD7353EC5E655 -12BF307AE81FFD59, CB23BFE8C650D2BC4104E6F53AE9980C5CCF329DA0FC4DE37DA3D0C9EEA51E69, BEF558015DE9540E92C58F18B2C8134B5D4F0CC46D362BD59058593EFEFA03C9 -383D9170B85FF80B, 3E2BDFEAF3287CDD4E4801C27E7EEF328C8AE7A9469D04C3245DB2D0507CA3F8, 4B4FB05A7F73C9B614AFF7C7CE0B7A9E0874D29F3E817524BC5D4E0E5E72BA49 -A8B8B452291FE821, 2AB8BE9D29CD7C8AA441D9B1D6EF2594288E9EB57707A1B772AC721A9D859690, 7D51E65B1E338F76F66F806DD21307AA214A9ED73EDE39E3360EAA4389794545 -1FA2A1CF67B5FB863, A6BBCEE10EC2A0C2B2B2C6CA060A9AFCEFB947DCBACADC888C9B70837AEBB3B6, 2EDA39EA415F2565183344A36C066B9854F38FB3A3BD84962879BE4B2535F369 -5EE7E56E3721F2929, CF60AFF1ED4CBC5F2D94DECBEFD648EDF3043947A52E6E5D243FB65FCA783C3F, F39EA66DCF21694958D2921ECA82429F4C5023EAD6289B6946D576B3434BAE0D -11CB7B04AA565D7B7B, 5CE1C607C4BE98CB85D523D0F0BC7669064D1C1C06ED8BB63F5F299EFEC76D69, AEB7155642A6E66F0ADFFDC7E653D0527F32461A5CA74C8F6A851CF25B7F1E7 -3562710DFF03187271, B563D768E540844731AF5007FE5D6D9A6A9F3970E54E84317DF54226E90FAB96, B3222D5CBDFF474BC4F02BD5F0FA9D314186D846E1ABC2CA75870378E72031D -A0275329FD09495753, 8C43C366B2F74C65B70B0CD3112B3D6339E7825CC87949777DA689EE7168A0AF, 818396C38267066149A2D8A7A2102BEB05160860E2DFB60F1E0C56B1DC06EF74 -1E075F97DF71BDC05F9, 23586FFD388A01BE0379E48A9C516F1FCE85DBF214E86E8F4C8A3F70E7883DD8, CDA140EB9EF88D80F83D5F98033ACD71F18143A3500A34887E7F2E154E718E22 -5A161EC79E5539411EB, 85C2AE9EE27D2C4AC2C82A82C008DCD4FECBABCADB00D02049A02153FBAD485E, 35D8957C4F53046360F4E97D8AAFDC7A9A25E18FE5ADCF31944B42ACC185FA7A -10E425C56DAFFABC35C1, AFE03523CF5E03C0312EEF6D77C394A58E5932C24F937D3FE64ECCAA611EEBD3, 5C5B54782C457A641435FF30BB56D22652DAD54AA131D2557AF318A40AFDAF8B -32AC7150490FF034A143, 4507D0AC570F6C1A217DD3A307836E5B4ED52C77DC1CA35B4DC9A08DDFB845F3, 23DFD770123EA650F997BCBDE005A7643594D4A96CA180A3F3B6C467FB97F772 -980553F0DB2FD09DE3C9, 956580830D38557788289DADF4D8984F047A79F79F202D6F0AE9E00516D4F2CF, 61252EE3818174F5227F110B91A10F89735151E865A85D2E6F49FFCAF9A1FC85 -1C80FFBD2918F71D9AB5B, C26ABB8940B7C386FD6BB665B666D4DDCDDBE2C92FA57893D56C048EA0CA2E3F, FE305089E4A4A5D9401BAA0EE0669B3C2F9C8D03AB26874AA130CD7B2A15A6CD -5582FF377B4AE558D0211, 96F2C0040FA0EB146C1405739E06297A89D3AB30DC2E8D188ECA041996D3DF91, 16A0FBE220684E766FF1D4053DDC702AD6C2806B00B4D73556047D7D35811D54 -10088FDA671E0B00A70633, F40764B0DD20E233D5FC966F7B3CC46A19D4CB381DC7F403B2E875415D48BCA1, 88CCC145557CB45216D0663E3BC594106A9CD664AA09D0EC525F1E87C32AFB2C -3019AF8F355A2101F51299, 77AB621CBB809698F8474563240485CF8AC0016C56A37843E6EAE3E022D56812, 53999EAA5A80FDFB57D49F90018E3167B94BE0532A54B1FF89019A77EA76881 -904D0EADA00E6305DF37CB, 8AB805DDDB9B1D4A0A8D08762AA984AE9B788FF32F0191824D270F5307B83519, 3660AA4EE57BC9EEA5618C5DAC5EF97C31BC0FA13861B75581758C19A854626C -1B0E72C08E02B29119DA761, C34039AC1F34ACCF9BBB98F4EFE6B0243391363AB9D097378EE87878B00A0C19, D95D7176FF96E271568CD1D23B43BEAA04C7C2DCC47441FE4AD8C319F8A68193 -512B5841AA0817B34D8F623, 3F92675DE1E721B38FD24459A16BEFEA32F66C97AFCB10B031FD8B6F85FA93C3, CCCEAAAFD5B0F95336F33D8A7EA2E6549C45F22FC8695AB404E152BF5F585B7D -F38208C4FE184719E8AE269, 268EA35DA0618EDBBB38699813B57C47103721B961D48BFE1343ADE1EEE6401A, A142BD30E3E3882E279FB0FB5DAF6652B8C26AA83BD7C835EA4A18203C2DC4FF -2DA861A4EFA48D54DBA0A73B, D13FCC6BFB020469F6D58DF8C747A05176323C64BF609C42176155A08380DF77, C640232304DD7AABCC356D5FB15507F48D027A6855F6A5640E1F8DAF1FC84742 -88F924EECEEDA7FE92E1F5B1, A3F6DF14F17650061C1F551D4CEDB570E125FD7570578BA863EED14B2EE1984B, BBB1F8EFBDB3567135CAC76959EE6DCEAD4B7EA3AF430A24CF3F921CC179B94 -19AEB6ECC6CC8F7FBB8A5E113, EDBBA2D2F52FAEB5A8DB628969BF0FF8B60FD062DA231F4E98C5F00C6A0B1620, 25124032A9AB5F38C275145F7BC8D56AEBB4B7C45D6303B6C7E32AA2742F4E2 -4D0C24C65465AE7F329F1A339, 43B481167AC7E38B3FFD8310C3B1DB1B8EA18FE527548040A3F45F380AB7E3BE, 6B4DEDDF457683E708A740B32E045AEC99DB91A851F4CC715C8291665E48B089 -E7246E52FD310B7D97DD4E9AB, E86B4FB7332EFC9A7317F2367BF7726DDC225FA945AF3E71014DB1D4BCA8360F, 63E400F6642EA7522FA3E5EB8BDAF52C285A37028C4FD1F8F13243DF778DB014 -2B56D4AF8F7932278C797EBD01, 34CE3EB2A51F54B6EE0315847F63ADB53B3F7692F438831230723489CFD35119, A56BA0A33DF22226CB505C380867D1141CEC25D91A1FFF66358D0D727CE13B52 -82047E0EAE6B9676A56C7C3703, 371F84500334DFC47F8B58ACA5F5A27C7C14183D26E3A1E693C21A8015FFE873, D28A3ED408D0A85B274642F08FF25E629ECCC8407FD9B1ACCCD0A7FB806B883A -1860D7A2C0B42C363F04574A509, 8CF5CB1D42FD8FA3043DB96F65A12D76EE4F501B8A4E88F8882A01F014BB17A4, 4B10B035CED8877B8F792DB33024BFCE351A554A8895C41C581D2F93AA6BF20A -492286E8421C84A2BD0D05DEF1B, 8DF8DE6B624D677304219E1A68D0030D1B5E542E04717DDEB952A14B140F9DCF, 7AB6BC06F56CDE046621626652FC1D31B39BE530028C5AA680A4944794B90543 -DB6794B8C6558DE83727119CD51, CB036AD76D01724BB85FC22E1892A76D00B553102A7EE18C9F2D5706AC8AB677, 9E57BA2CCD134650F5594C21A7669B23EEC919B01E193880435126AC2EF75F69 -29236BE2A5300A9B8A57534D67F3, CF6C95C495F37635E9488352C532D98469BBB0229FB6AE8AC2F22D918E812B95, E5AD736D7BB6355789F8337D92763997611691FB65E0A4B76E59681656242C96 -7B6A43A7EF901FD29F05F9E837D9, D6F34B2C8D683F24878DE5C9B4A52D9B30DBF262D23DBB9DDE6144067233B823, 3539004627F71989E7EC2E87D9D92DAA36CA1DA72A5A99151D421808FB716AE6 -1723ECAF7CEB05F77DD11EDB8A78B, 764D386D6E8B8D080F3D237AD1E31DB500488DD50501544102F052E372B0F05D, BB8DB8C85BF55201613E03D9D48F8F542AB3486BA612D2812917C779A2B6B596 -456BC60E76C111E679735C929F6A1, 1DD5C31BEBB2D6CFCC53981C1ABE57F39C565EDB8996DA21D2078F8182A5D517, CF644B470BC92BE096CAD746207A118DFEF7782CE5F805D9CB3D3BADF6F0E438 -D043522B644335B36C5A15B7DE3E3, E12935736BFF94F8B6269B4BDC29339A3F322A580799741526E2ED8F17207C73, 70911A19F3CF050EF531AD3EB5BD27F239B5373AC0D242B1B9F0FCBFAD58D107 -270C9F6822CC9A11A450E41279ABA9, C8E91ADDBFFA375796FADE45399A8A3A68BD64D0C8D3903E077BF9149153EDA7, 3A9688B1ABD6A9546CBB17AAF51A22B997ACBB14E9B182DE36E777F9A59F3153 -7525DE386865CE34ECF2AC376D02FB, 76EEA5CCEAEB0878F1BDF347A9FC6FA91F0F6E07C80CFC51BB057A76BC27DBF6, BB72D7B43FAE8891C550A830301905A0359457248FAA26F7ED763270609FA5E4 -15F719AA939316A9EC6D804A64708F1, 909313D580DD66AC1496D7B3F3B375444771AE20BB56FC85661D863907121BFB, 4F22A5A6B5953E29742B9531D67D400F026585D8CCE5CDA7BC1C3D95AA55C85 -41E54CFFBAB943FDC54880DF2D51AD3, A1CE9484CB56D1958EDF25643646B0A31114F56D2CB874968D22E61DBF6A1D2B, 9E6D222FA26B18DC73D0F0E8095C77E3A09696F03FDB7FC75449F1CAAEC26C12 -C5AFE6FF302BCBF94FD9829D87F5079, 69C996C8FF15A0F780A3822F37D681A073395393517653278356AFEF54CFEFCF, 34CEDC5EC378467BF01655E569BEB58E7AB539ECDC659C49C4A1A1D68D1424C6 -2510FB4FD908363EBEF8C87D897DF16B, 873574B4C4C9A2016C0C3F1827039F77A0FC5A2CE922488954DC4B1103E0EC97, 5736F7F713D468D4542655AB5C8662F26DDD2E28166B83D56D4B79B9938658F8 -6F32F1EF8B18A2BC3CEA59789C79D441, D6D77983853B3FDAF50AEA3D509DFA0AA5B71C1CACEAD5F492ECA816F73A7C0E, 74BD3A27C28D75E85D353007168E02276302C063156BECF27A098DEFC4042E1 -14D98D5CEA149E834B6BF0C69D56D7CC3, 124886BA4BDCFAF3032FC7DF484F69827658CCB36D8F01E18F5957CC2971ADC9, F2B4EE9B8127DD58507C03BC669960E2A5101BD0DE764CCE2A4921E8ADC3BBB9 -3E8CA816BE3DDB89E243D253D80487649, EB4282FE8986404073F56B5EF7EAE89695F33A5D8D0A0E041A63E1764B949C58, 8C3177513E457E849061338132F458CEACE791201F1395D2D401AB7CBDED4AE1 -BBA5F8443AB9929DA6CB76FB880D962DB, 3A427349DDED5E7B4F2913E0EF668EEA2FFF22E0E9DA8891930DA657C6E3F3B3, AFF2A4BF3B74F42B42F53455B0D1D04E5633F59E82CDFA0E8E69180DCFF26E9F -232F1E8CCB02CB7D8F46264F29828C2891, E21F3ED76806C8C5DC39F1130AA8CFA046671123D2112434657E7187D785CAD1, 14C8BA673B28EA9DEADF4E959331AF125CA5D158E7D332A123A0860CE71C2056 -698D5BA661086278ADD272ED7C87A479B3, AEABD9A2E46E9620A0F7CF1CEBD0528B8FB4D7E51F1424909AA071B0CD4DBF1C, C9FB1E0ABBE9457EB44EFAECEDAD083056D8828C5E7AC9299BC9490FC1C434E5 -13CA812F32319276A097758C87596ED6D19, B56F45785F33CBFEB07E65669766C02DDE93A3B3F77403F8E8456667CF4B7ABA, FB82C961C65716C147C98880B6F17CEAC1ABF8F86788C241C4AEBECE9CFB0DB6 -3B5F838D9694B763E1C660A5960C4C8474B, 8D303B45305BB931A21EEEF64B1C0A7BA80D74426A0A852AB969C9913F279E26, B117575F1D7C0EA4A4FE863BC361D13A49037AD574ECA8CF515C67A497E2AF38 -B21E8AA8C3BE262BA55321F0C224E58D5E1, 14B7E5E2F80E5209DCE837EEE55972B0B5BAD8349B74A608FE13FD7EBA7C67D4, EACEB8555DD960E0FC3CF1594583405C298F9740AF22D13A8976748C846104D9 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, A46D604790AF4AD14D97883336766709067799FFA8BC643B596391D0296FE410, 62F4709CAD4308FD3562DF84B0E72A0F70D4E05F8E692CBA6A596F39BCCB113A -64312DFEEE1AF5788CFEC3176D34C11F84E9, 7B9E2622CA9EB1A5E5DEC44C5AA18DB79C942F3A7357CB32AC30D7DEF481DBAC, 2B9619ACE018D1BA9A2886747938F6684C189F8A86F9D2977E2BF3D4819FF4ED -12C9389FCCA50E069A6FC4946479E435E8EBB, 1F3AFD33408EF12B3BF0703C4E6C5B1BDBCC2AD80B322BC753FAA836C86A30FC, 2C797763FEAFDACF733C513082F113C8761EB2712C35992804D5444DE3D4F139 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 6A0C1D10723A2F3DB32374CFB7399D9901974B3424EE44FC4F57A1FC1E04C757, 6B65D2D5D0054B69E31F7232A4964B9B62BBDE16B0A23FB82A2D8EB145E3813A -A912FD9E31CD7E3B6DEDE937884905E530493, A10CF7411E5AD3386F7E1C32DE915DC6EC83A827D6F356688ABF9197861F51A0, F9DCA3B30AF595FD4C62CCD0D210B287F7EAF4A3964DB195A9E5592A834C9C68 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 231F51A171EE3A845A93C209D7946D32E53B81AD11569BA111A7F242E1A8E164, FF6C3828CABA15FE91F3C42F9E1E39A428E51264AC0FFCD1FA6D230845184243 -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, CAC8D5DA594ECB7C3552A3F65204D1C0730A6765257FECB90D8A9610679B8F4E, EB5C9CA732A7A1EF30BB06ED5CF8DE7D07789036593FD1BE2B35A3041AAECF57 -11D500BFAF40AC5044981798DB5FB39F2C17B81, A4F4BB072D0D5923ED902C35B2955E1C09E08D6D3EF61EA3ED9E5975720AEE02, 31F53B4FB8D7317511C506CDD053B12EFBA273D36A806FE147E7FA231D07577B -357F023F0DC204F0CDC846CA921F1ADD8447283, 67CCBA85B59E370D5CBEAB85ED83225FE010E84844D6C6A832F88786E48E83BC, 7CB13E0826CF3CBB20F6CFB42B598ACEA79B5F4EA2B740F5328A2C854DBDAC49 -A07D06BD29460ED26958D45FB65D50988CD5789, 427538161C02AD90B55D1B531D8A81431B7A0D238F25C218510D030A8F68E29B, 765FC7EA49A9B440C8AE3DFB5930D49C461439ED0A7981A5059D674DCC4AABCD -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 4D25759FAF5CBE29FC1315CE59E439CCDE46CEA42DE2A49ECD32A0D6CF6BEAF1, EB7E7A0680E6E2056AB1CA90B45CEF406B8AAB0913771C08B83BEFCCC8F5EE6F -5A4653CA673768565B41F775D6947D55CF3813D1, 52016FE93ED76B2ED74DBA9E4653BCC63CC53250446B81D1F0358A89279D7C58, 8C9EDD3FF39A55AC9F6AC053B48732B1789308EBD42DE365CC0D0BB06833FE31 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 34899BA76F4C7900D12F978EB9D061D29241B014710927D5F6DE03D6876558C5, B747E315F2DACA243308893A317C1055FACC5B4DCA9A4B7CCE05FF6242F397B1 -32C78F21DA0F2AB093551B3248B38680448F8B259, E39B2A854B943C489D3E9B5100DE4A809DBB949B0D64901273AA8BD53A94B037, 2084D46D19C673C6C6CF5528AAAC696DAB008B98250A7E377A9D1FC2C75DEF7 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 212D7F758DD6AC6514C8F5DF694E294F996E400670CCD2F976153A8B636F245F, 56C755056C64525D4A608AC3B91F72ED79A23A0E7A60A3D4FFC34D8FA042E5AD -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 3DD1A5889CF7847709885D12AB0EFB11576273E62B899977BB1EDD4FD4F69F8D, 9B3472D8AE93F5FEDB1AFF7A8C980EAA8735CF0BCA7D28F6200104114120BFB0 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, 9EB78DE250CA7239A93B5497DC3060217424C3FF96759F15A39A34414FB00DF4, 7AD33DA28A14CB033CB6A942F4193A17EBFCCF1F3D5D1F65CBFD1B3B07A8DADF -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 541B175F6231C0CEECBD22497FC4672CAD56F9F6BE1431FEBAC83DF367B079C4, F0DF6BEC04043ECCAF47354BD5E1BE3D36F138A8FE4D1A7E6BD22F22169B1C32 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 60F053685A6875E79D7E025BC6DC21B97610E6F123710290A5620ADACA040CAD, 3C40C676037DCD4DBA20C7FAC8DF6156C2F4555DA8A2344D5A7C95BCE32499C4 -909A469765F53090D38D5A7231073A03433CC33DF71, 784F6523542CACAAD23A26A00AE9B9089328E5205423804A0F0FFF27F6D31F08, 5F123AB87835521975FC4A02C627F65F682C6B5EF450A01C295A2F221EC8DDDB -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, D4A3FF19CC0004961A69100FD6C83B4256FF8D27C456D204DD7C107C6A45042F, B4B1B9A8705A52241B3D795EE327BBF8A27DA9A5367058B89AF2281F5EFA9A80 -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 4588BA75DA294C5601C868C0C660F80C2DCA04D91A3E85CF751A88C9F55624C1, 7D6CDEEF1BF5DB861D8A3369AF852C8D8A87E5AB4F690B33DDE1E4781B36EB40 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 34F19C177D31048DAEE0253D18CD0717C3A594FE5D998350AE0A03027C77D843, BFEAC256A9873AFFC312AAC43FBF09558D6D0CD42DDCD52FF710547A467917E0 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 95A49666EDE25A45345C0599FF15B8E9A390BABFD501405158695AFBFA7DA197, A29905B5E292858E19F5BF15FEC98BE9EB9937D5C8304BBC35D5B9FC0262389 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 9382C40A65A83E6ED5FC874DA02649E1781D19192BEEB11838F686D215971D24, 9C6135F951B6F79D4146FE8A3EA1A1A92AFC414438BA1401F6A22048C7CCFF23 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, E261BAB08C5A63FD8478B8A61156F4912C7B2A9841979613454BC14561CE326C, 6DC8934CF83A8A501DF0F0FD62EA17054B36BA83DD195B6C13364C5616EF3F0A -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 9F1980EAA23F4374F6B2575DC399EBDFC15B3200D6AFC8B5EB78335E9A6F27A7, D74294556BCBF3590BF501AF3C74547827AC92C5980F57DB89E2E158FC509CE9 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, ED6E4645759AC4538530CEC99592591241CF6A867BB9F0D41AD9D5DCE70E0A94, 8B2B0E367B22EC58FC5049A404EFB73C482E3B9C754575C61AE40FFD40AEAF9 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, BBD368891B604EF7324D02B866E1536A5391641E2BC6AABBF48DE5E55B9B4579, B3FCA0B7BA84D1A52B920047D6057C393EBF7424CAB958E82D038DCA52D15596 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 590B24446109AEF0E75D6577615D674FFC373203BD981CAE20F1EC7F87755462, 7A2EBE095135FF76BCD35C70698368CAD6EEF4429552662F306BF75BD8750E5E -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 71E5F778CE5F44CC2C0B429B83DE12FD18A8306321AEA0B27DF839A85C6C35C1, 246DC9E78F14ECAC5E46AE91252371FEDBFA3BB2FACD992151447B59BF35F21E -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, E16C4686FD69F15B57393FDC72AC009FA4188C244F7BE7FD0928014F13B6087C, 8311E79E3DED7BDD47C322A490B25CB5541381FABDC9D6C502287D9F8B7703C3 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 91489C2142FF8C255DB75903A58DF73313704EBBC8761D7DABA7522850659E73, 9C801A6C9049176C78E0E19DBC646302A97EEBD5A6961C157CC23614635AA504 -29396F76B67B7C403D73A1059B80139336878E44938606769, 69DA7D53D1E41EAC3EB53232B1F76E47F10703526A5D59D1934D1B5D82EEEFB8, A8D0F8464023D748B78E0D093711197A34721F0CBE0DE91E2CA08E2EA23E6891 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, DB4B90B5791C9D417D014EFE46488591DD421DD9A670DAD06122CD7140650C81, CED7B0A9E35DC1F87BED0E9CBB72DC67E4E92CD9CC3A01C5D3807BE6D4AD88F4 -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 5E4C79950BFD3F978AB41D2F857ED55B59C6D706B89E7196CD37AFF174193A9, DDD473EB81D510B533CA858ABC49D5887A43E8B1A9642AEB8FD85CEF95B072A9 -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 3CD495F8C155A4BB465A08EFE57095A037FEAA5B73D3ED6BE74556FAECE97579, 63D86492E5F7DBBDD87028624D9D42C1B9497EEF7147BDEC21F7BD24A4F6140E -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, 570065BBAEB7E639B8C3EBD537CEBDF852F195D77C1446B16B162886A5B40422, 2006D8E529CB8BDDD1CD3A7A97887BB67DA9507C301C6D1DEAAC849D9594C286 -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, B47676CE2AC126B6DAD4B93EA05A0BCED9C7F7FD203BB738A23FA3DF61A27F2B, A8B565C95CB9B0B50CCAE8B1C74B1DB0DD95A1B8507A51133626A48DDA2FA686 -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 33963654940D0B830897E0EA269C6427CFEDA639D625B4F489F4C31FF30F4A2, CEAC95401AFA4F4E0C73B0A9A51E67A2FEE324173CDB06F403BAC73AB52D129F -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, EDAF9773AD24AFAFF79D82F933346C1401173C95867FD863703C9D192E08D73B, 303A2D99F46DC58D4B46E1C168D90127D237A34E865B21ACF4EBC8DE2513CD4 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, 29E6E3F0E0888396298AF5AA608D28D5B3C2CBB2E3511C1763C65BE0AA94486C, 53B2D4DBE9E5D175AC490376650FCAB77A14DEE5251DC350456A9205435AE6F5 -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 658988F1D762F9BFEE162E75F4D3A63664F318B6284C5B96C9F4B53FE7E8CD72, 1FBEA07A992C506B7F8E4B1E9A6D93BF9A9345DA37ADC57543E4E917446DA7DF -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, 2538CEB6E4E7BF8757639563E8453A2CD303C701192EA48E3FECB0B95235738C, 62436232D09ED0744E66FAF47DE18DF498C2E777809B69C86DD11784191348EE -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, C9C3F25A60E0D3F3E72E2169A06A27BC084D9191DCFABB1AA5C4F9972BCB57F2, 73B447F5E0AD21902124CC6C8C0CDDAF1CE0B6E4377A4C479F38C76217BEDF20 -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, C6A762FAE2EBCEA576232A4877E23A4FA08508203158016C7542B0FAA2FF4179, 78C467AE30E5A5581EEF37A66A5C18516D31665AA91B76BC258A1150ED84E1A0 -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 46EA9BC119BB50CB72FB92364BA305C827EB9A3FEB9DEAE1367CE481F795746E, 935C93F4AA045D16ACB6084C56D5624ACA715C58CC0E594E0458EB32DF97E20C -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 12288CF878CA1CAA7BC0B2E2155FCC1A5AC5CF28A3B2FACE1BEB4082838ECDCC, E109384DDE3F31A33F1F2995894C9628A689748B8D9AE5E2042962FD57D46355 -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, ECDE9C04C2B19C6B44F31C7C05398A3EF1ED81193B412042AFE29C40DB96B437, 5EF870979145D53BC21C19A62430463086B60A43D91DFAD9D396DE5FBBA28A4A -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, A0E7B659625850DC5B2E7A362C7A60DEE8D2BAC2044F1C046886D792282D137B, B720383561364F44619D4BC0323C9E0D4D170E109677617F22B486659A933ED8 -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 8B00258B9D88E0F35F130755BFA50F98AC244CF8605D0A579E214522E399B6D, 2E3DF00359A8B94239283058FAA928AB9E02ECEE365A764A8ABEBD3D54549C61 -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, A572CB3F4F4B8AB4E0001AF694DE9E383F766BFBBCFD5668E19E69F03CCD365B, 19F0616D405A137F8D117AA768702D71D47698366798DAA8FF0C7D48F8F44D12 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, CABA56BE8432E866E04937B891BE645C996C8F002836B77D7579431E2880F4AE, 7E8B97217A846B9783096DD1B1F17A7F63D860A42F97E1B07EB00A380A1C8AE4 -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, C2A221EDC550F7C73EC9828E7677902DA1E0B6053AB30BC45BB8FE6F565B1F5F, 684C105E9BABCC044DD47CA1BFA237025924E48622F8B93AB46E6332D6D3032D -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, D6F2F9896ADE0393F47414F77F8CF3FA0030DD74D608D1AB35E243145F9711F, 526069ADF808F4D0DE46294BAC0566D4ADC66DAE15AFC4AB0DC6E8123CAD55F1 -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, 25B74E9A65AF3DB5E87526E76C395B75307E3260DB245B55F074D3FDBAEC9F1E, 7B7CEE7857C9E7C69FCE2600889DDAEE982A2F326E5508624C7F947022E5CA71 -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, FF0F5C4B84B85AE4E98CF4290EF3AC2A265FD7DA6893D6AB1933A5F26F03A0BB, 3D82CC5D345C2C13C3F628107B536AED1A1C05F2C8A747808168DEE7D21C886C -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, EC3538BC5C877A82913DED3E99F3E3211337AC415ABE5EFB01B3B6531DB55A89, 524DD03F34E4164BAEAAA5DBD507A5B262940C14A92C129BD29FE009DD39C3E7 -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, 651815341FEA8BCA735A8B7DF21F0B6B2D6E04B154E4FC31788A2CE19E33CD2A, A83AE01693FBEBF079AA78EB4E09D8244768316CC0A9C8AA79F5BB3E5EEF2655 -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, 2A985E69C3628D7A8F88CD7B5F02255FCDD300637E4F797B1DF368462F0E1D71, 201F05E5258292040F3D3C605E8E7A1FA62C07584E691A10DDA26903CD5C674D -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, 6B3AE1669D85D5BEA7AD2CE960A79CB9AAF31586745606A318B742B6A47C9587, 9628207185EC9E243B40A9B89B6B99FBDE590F4D54F0A82A8FE9F1639328C258 -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, CDC14371B1CC34957500620C8C5203F98B453CCA280B314059F19B9FBC6A7D89, E253EDAC8BEDEE0B4340D06CC9DCAFBB8E27B2624773932CB43A484EF8F7CE26 -A0D2E82CA5E358392DE9951D10B533E405FF396E226444B3B8F22B54A64B, 5F0BECA7E9C2AB714355F500484A21DB1498CEA188D968F528F9087EE30697AB, CA578C1136A3B049D0AD6064EF84F16534BB8E09CAE961C798638A3A77895F0C -1E278B885F1AA08AB89BCBF57321F9BAC11FDAC4A672CCE1B2AD681FDF2E1, 969BFE8323E854DD72330E4DB40B6DEC08A26740A3769FB622293993FBF23DA0, 49E76911AFDDA1D8ED8C4F28860841EADB9A3741976FC2CB8B0C3BA6F9316746 -5A76A2991D4FE1A029D363E05965ED30435F904DF35866A51808385F9D8A3, 630C4D11710FF0D4BFE51DA9CF757C8823D6352D3C2EA185C392DED2F0EA147D, 3DAE5359F84144E480882CAD3F7845B3B3DC025F1CD348BF2B1F7607438C2603 -10F63E7CB57EFA4E07D7A2BA10C31C790CA1EB0E9DA0933EF4818A91ED89E9, 2134F1131BBCD2AB40DDCBB9A1157D88E531EF584B0826F94A420D5B803AFF67, F9A294010CD5362CA0ED41DF7263817F76188C94340187BFB946AB1DE209AD52 -32E2BB76207CEEEA1786E82E3249556B25E5C12BD8E1B9BCDD849FB5C89DBB, 6BC6F76CB999BCA5D83F11A65FA0E3A74EC696A29369B0674A3F3171E0FC980A, A4BFD463C7329FA552FD5DAA736B0D960A43EAE46AE83E99C6260D24C1F63E51 -98A832626176CCBE4694B88A96DC004171B143838AA52D36988DDF2159D931, D3C66FB87ACD8455957FFFEF8BD2946E550F8751DB855F0F291C916BCE5716EE, 647A2AAC1225068861BEB49DF04B4742CE830DE479DB0EA34159853D5BB514E3 -1C9F897272464663AD3BE299FC49400C45513CA8A9FEF87A3C9A99D640D8B93, 79ECD9A7C4321CD5C0FDEB333E2D78AAFF1F6D165292A8C2B7C96801C31FFF5F, 1991F1718018F9DD1BD58820A3DE268DC00B5277221884C882C273229BEE9932 -55DE9C5756D2D32B07B3A7CDF4DBC024CFF3B5F9FDFCE96EB5CFCD82C28A2B9, C3E0B1C62B5275D24EF69170253E8B1769FBF7C50118D3B8E6DCAD3683AFF922, A8A67C9A9DA48F5BC8A3A0FDAD67493B9E6CA51882F679089EB6C9437C73DC3F -1019BD50604787981171AF769DE93406E6FDB21EDF9F6BC4C216F6888479E82B, AEA86534CCEFB766C37A3995153208B3B3AD8BECFB696BCA7D2A43743609C8A4, 3CDEEE07A21418F63AC2AC16731C973EC2720C3247667305B6CCBD3E661F5FF8 -304D37F120D696C834550E63D9BB9C14B4F9165C9EDE434E4644E3998D6DB881, 6CA8788ED729508CB7B401B1722648C66A1F219EFC845F79CF94815E5ED9A76E, 14426936DD17B2B73EA11EB2519795D49851F02E88346A9EE58623C10BE84337 -90E7A7D36283C4589CFF2B2B8D32D43E1EEB4315DC9AC9EAD2CEAACCA8492983, C0E75D94899DFB4373E95D5C1EA6EF32F7396955DA923DDBF8FD57B39BD0CD3A, 8CAB60CDC6A17D2EBC7BA436C08DE8A34B24FAF543E25934AE02909C1E3CAB01 -1.3.132.0.34 -1, AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7, 3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F -3, 77A41D4606FFA1464793C7E5FDC7D98CB9D3910202DCD06BEA4F240D3566DA6B408BBAE5026580D02D7E5C70500C831, C995F7CA0B0C42837D0BBE9602A9FC998520B41C85115AA5F7684C0EDC111EACC24ABD6BE4B5D298B65F28600A2F1DF1 -9, 8F0A39A4049BCB3EF1BF29B8B025B78F2216F7291E6FD3BAC6CB1EE285FB6E21C388528BFEE2B9535C55E4461079118B, 62C77E1438B601D6452C4A5322C3A9799A9B3D7CA3C400C6B7678854AED9B3029E743EFEDFD51B68262DA4F9AC664AF8 -1B, 9C5FA2C13F418E623C316D5A82C8B70508E3ACAA2B4A8D3A4ACB49C0D7BA04E220761BC15898E1B06B4EEDFA23E2E546, F641DE0CB075851A5AFE81503CB7BF6194FDF1B7DA9E59556F015651BD9218E30EF2C4B2213F519B529FB56479F48752 -51, F0091B1080B24C407E983FC77C0527861E28CC8D5C9C5B48B1F416FB8F72FDBAB1BA877E2DC9EA82187A3E46D072AA44, 22492B56C351FC882CD63A572FBB7A794EC8CCC18F16F8F352071D69AF769F4E7ED6077A9A08429B58810F8CFDDCFB8 -F3, 5A815D846315E5DBD155BC729B098C810D68B92B05ECA2849230F66A356158C4A1856A11CF7BA5D563BAA6F3AB3D0087, FB880F0D6F85075B70191837CC459851981406857F03F6C8EA0D2ABC5042F0EFB9FC97561A63C71CF8159381F038E7C -2D9, 2CC6E0DE17D86C60A9D764CA17E6B3BF8FF48AB9E6E38EB0996BB6CB36DCD276B61B24C5DC0F7C1083FCB2A87B493240, C86ECBB06ADD45F4FBC5D411AC0B9BB07292D7CB6FDAC1167728A7B825E226D225A3F90DC40DC7DA4F10106A7412E7A3 -88B, D5BECF937401D03C63994BAA76FF1F359A554953B2613F62908B47497CBE15A5F124488C3DBB9F13DB9409751AC6B9D0, ED2841702966C15664AEA733911FD1C00FF1258A5B6C9F00530C0BE9EB940909D8F519D50D08ADA801D35D6EA04C05EF -19A1, C7A8AC69A56E8F724AFD6FD01CA9EDF2D427C332C596992C5F3B54D57911FC5323D21242E4942135649F382EF9A2CA8B, 4186C16218EBBFD84E4DBE3583E37D7158071639B84B9FAAAECF1FF6955F6AA4B0BD21BD5DC7C2927E76C7AE49585543 -4CE3, A4B32813B19844D83A31C9D638DD87F16D7EE7A32D49A6A99D6A902AC26082E41EB9E77B1D44C02E9F48F247D8DEBF11, FB66140C5C887D1CA28EEAF5B8DB7B25AC4DB1A49FA6BAB93639E4A1DAC6479447E8F4BB1312946E0D07CC09B63FED51 -E6A9, DE58069466D407CB27257473DC08FD2BD09D262036D56ECBC0BA9F582641294B18D7B1285E9290C55764CA0E7167B05A, 4248B42C8B6FF55AC40A50191D86129375C7A6C3595EE62A12F74192C9A431EE1BE1341D824CC31AF10370D8DB358BED -2B3FB, A9EB0041AC0EB5825B04B81B34D2402E1F14638B62F4BAA5E9E3F47320AE724F7257387BC470A0B77E1F9855155018D6, 707400FA47C87C696AB61A610D68A34482EF3FF32D2D954E3543F27C2A9F04B261DD53219E14F61B4D5F9CF9CBD4260F -81BF1, DB70CB69AFC2C9BB0EE647BEBEE4F908F43E04800B8685726E1BBBD19AF36B9CA47D1F460923A00CE54E9F03A462B4D7, 7FBB8BECBB33AC921B3C58DC62ED4E339B1A715D5A24137B5DA6C48D8123DD5A91D3A4FCBF8E1C8DC4FD80F7541202D2 -1853D3, 5B513BCC210FEDDABFAC368CA876F91808FF8D082DFB3DC6DAB494797A547F2643BC1C3D05770E0F39F08A1C52599BEC, F6D2A470961AFBA04D94E96A4DB1DD413DDBFA0449C16A72EB95D39CABA47A3CB4FF90A7C8085CE7CDA3564D0DD971CB -48FB79, 2AEE1407D07D4B8101A86061486B19D9399CE28345A1992A7CB9EAC43F3A13941CAE792E3402867B080BC5054D259F6A, 8383EE4A9984E0CC3F51CB1BDEE6BBA3A14E503D09EF36FBA83BDE79A17BBBD9663CE8AA4CB778C8F8252B309790B120 -DAF26B, 6E640CD04E1AC2A7957987D2FC85EA7688625CAFFBFB587770F26E1A44C682A0D947BE7BE485233006AE59ED12B25625, 1CE1DD4F5752F802D264A68F5137CC5F0C76F24007ADCD6C2585F33A21BF4FEAE0C8E450A6FB79A0B091674BD22BB668 -290D741, 9FBF2CBF74EF244D733676D051D0314BEACE57207E02A53BAD5BF777D99EBF3B217705790EE17CC41EC09809E64F6A27, CCB0A336CF5B42BC181EA33476CC4F348710CBEDE690B39C578115D1E085CFF5E51EF95634C23A71226563FA80E55AF7 -7B285C3, 9D94D0999D059A6E294DAEF56F75809D824E8AD91026BF00C792953330B5997B51848ECA853F5969FEF12BB877A7EC8C, 46C61C9C588D5814B789643D945277D6E7801877A09B2EA726567F11B2DB7A06526FBEF365B6FBFB4D56497814BFD97A -17179149, E6A9F66A755375FEDFE9EF57DBB63A784D541BA6BCB6FED27FE4D4B5605E5A6F83AFA71EC1436091B8B64E2FCC27F5A7, 9E5BBC160854223B74CF1E0E26C7AB304A3BA3E6392C1F74EA1BA8C55680171B01D278EEF74CB3B4D7F390C86005C21B -4546B3DB, F806B14FA71B88D0F6A8B54E3708E45040A85999A70C13D40E06990F3630793A141FC517E95CD0021EA1621C951A4A2D, 72870FE8BE24B5F749322F9197AE03DFF1E4689AAADF78BBD4DF16421D5D59E2AF2A5B499B7A1919EA311053E6EB813E -CFD41B91, 139EE0E2DD813FE72168E8876E14A03EF31F4C3FBFC01595733B809A7C1B8CFE6014626622BFE2F6741E77B27123815F, 3D2F7570CCECF08D7ED8451AFAF7A06D94BA65545A20B8ED6248B24988B724F234962DB05E2A6394D344FF64C772B9B6 -26F7C52B3, 13BAC5430DDE14CDBA331A82158D3A45D2CF09D30CBD950F3606103BDEE195179ABBFCF3BA58B664A5C97156ABFE3374, 74A00DBF0C6E447031269B041121D7C928179937EB907FAD50DD4A9F128FF462BBE3021B01F9DE9C712425BC7508C0F1 -74E74F819, 8959A4D72613CC021D691B8DFB887C22870C01354A6B0C185CBB535945A19AB5AE476A58605A48A2568F3A1489B9827A, E49AC7C932874225A94A3020CC9E83415E9F2FCF77A2D70CF6BFCD2F890D2719DB4E3FD816C76D4D3F3F104AC76C0353 -15EB5EE84B, B54125CA1A5CE47ED09AB99872804FA8149E5B11FC65AB34CD2B30DF03965D147CD39471C2A59549A95D6DD850666D3A, 2BE82D08A0CF2FD28CBBB9373C40A5874F8A155650E860A0B31D19F81B94550B065B405245E0A3A683E35B25214C609C -41C21CB8E1, 9E639E290614EE79CEC390A013A4090318FCF5744AFAD91A33634DB4BF5E36B488FC75E21EA5FC23217DC3FA3E006D69, 2E192259B316A4EFF05925CC2D59571A0197E9D6E06B0215E15E3F3F4DC4E67A9D896FD25A256907A34156B72CD9BFCD -C546562AA3, 358CE79F6387AE804C6EABC6780CFDCD1AEEB836B8F94799CC5739B895D603940C52850062824C35BB8A2B199DC4B617, 6D7EF97FAC79F796FA7704F07FE682AAC28EB9CBCFAA2DE4FBFF47C71673BDDAE56316940DDE58B40B8B7A7D0A5B86B5 -24FD3027FE9, 423CAEFA17D4E092260A7BB3E2DA55D2DFB2E12938BA950E0E6E4BD4FE8B0AD48B0A05DE009DF4B5AFCE1C2868418A91, 69B2DD050A77CC4D204492EEF9D929CA7828B3A322827333F37E82A0E76D34470AB332C981995BF1495AC997724634DE -6EF79077FBB, 618FA99EFBF4A6DBADDBE9A1B0EDF34F5CFB93FE5591E3B20B5488ECC48C79C7F8431175F87F1229B87FB2F211328B04, 48DF2D31CB4625EA7FA198F4142C6ECC70EAF215B8F54B5CDFF0988499559D2AC1154B9D9152A83C462E41291B121A93 -14CE6B167F31, 34DEE1D270606CC9B48F3151F8D3490C37E339A9133D47746D2901DAFFE5D6C5F8FB205B66812B177BE43855D2CF47BD, A20D5FDECCB8DB396B9574EBD8B05A7360BD01C47FC7944B46627B09A4990494BE2FAF15938D83FF4F0038DF61348B13 -3E6B41437D93, 7ECD0A221205D3BE0069AB3C5CA03C967E9F27AADEA2A52C8A0213CCB8C7A20AC299EA5AE268C3F5F7763F5B6F2BDDAB, A4ACE46D02BD9C63DFDE827C213D712AB8F01A8AC000995DC39006A60E0CCD233F8CF069BA9620731FF6FC77175DDA9 -BB41C3CA78B9, FDED8D3CB351E254D1E0726D6C34D7B4A6646F9778C008BD0CC094B803DA1A985BE039CFB438326B7EEF7C55C4B23DF5, FA023A32F20E217FDE376F4C775C6A41121C77B79D5E652F8DB71E7564B0D6B8DF83EEDFA246487E94DC53CC4089F0D5 -231C54B5F6A2B, D17E9C9792D9D2E438536433C676EFDF6BA1480ACB525A12947BE7B7575B873948ABC34A014A4E09BBC7BC766FF1B785, 60416FBCBFAB85E393972216B2675BBE25D050F2AE4CCA15FCA0E9F2803F1C873BE66895C3F3BE92D037FFB0972A7B3E -6954FE21E3E81, 5200FC8B4BDF422B0183CB0A4DABE978847983772893337FE827A02A2791BBD720A6C8FD46CABFD32250C64B5D67DF29, 7B47EBE2F9E20842E512D353E5CF2CBFB802567A6C805EDBF1856A9B46D0971FE5A2494EC51751518F9FB1EE036E62DC -13BFEFA65ABB83, 79609210110637883B2BB4CB017FD531F2F85DA33C75A0BC3FED33B885B31D684B76DAE207A6CDAA91370455FB36814, F4FFEAF18C196E94CDC1BBD09FF52ED957F433F23BEB3751003E2C3FDF037F9F8DAD43DDC956220DA5D69B0D47EE1534 -3B3FCEF3103289, 8D6F8533C380A5CE6B07F860644087788F06E65135CD58D44FED92282A45EB99793CFF0379F81FADC2EEFF5B9FFC4C5E, 1B5302FD186E2C8E57A869470F542C4B633E48A026933D95E6202455262AAEB8015DA857486D2D2D1B45FF07AE30828A -B1BF6CD930979B, E1C2553F742CFF283D608E226C5E762EF88DAFD75A6D68DD79A6E94EB094D4D04A40C8B4BB80B5F4999C3A44151DA19C, 974EA4ABE8955CEA715F0441070BBCBB04ECD686C50EFB44B07E830E5765928495D0635AC8AF0CCC829E7DEDDBD1698E -2153E468B91C6D1, 10821F1D9AD2F1C09929D08F2292B58156E94C0C729DF58BF3AF929E79CE011D3BCA116FD47B21DB9F043C17E20521E0, B6032D349B49DFA2C97EEA10A605A097B51582D653D0BF297CB385E0EBA2DC982CA7E9135A0196031EE0700C8DCC3DEB -63FBAD3A2B55473, 1BBD5C55CCE19CCB0AD30DD7405F5E91E2D2F51DEB09ED974AE09EF7666A8C74616D7779FC5BA74E76F39FE4AABEF089, C827ADAFD48192B2B995FC8378122BD8A360298C79B36643DBAD49BED8453711AE16DE6A1B146443C19BB59E439B14A6 -12BF307AE81FFD59, 4035E13EF898A12EF15E72CB79DF83496D5B3CB5A0BBBD6800193CCDABFB20794297529F34F935F1D80DFC69B3144795, F2E854351506A1C15CD2E2E6DA7ECFD10A0AC16DB2FA937A03AC6C0B874BE34A2438906FD3F22F5E50CB52D2E84D5675 -383D9170B85FF80B, 2AA4B819AC5737D89948634E8A92968B0A9E70CBB47EB67AD08F14B8A59C978C944FCF5039D4032B41C8BA24A6B08069, 3332B17A4F66A018B7398F793D5438C48EF88F9A8B439800B4A3A38E483727871683286179494DD4C84130DB63B98D62 -A8B8B452291FE821, 551AFC585E46CDD5024AE80BEB75B079B435F90FAABBEBCC0A7615938A83FAAC3B51C42B295B8BD7472AE9E4278B5072, 5EEC8C5C1AECB5D4329738942D4004654AC375E486108FEB24FBF2AAD5FD457BD32F6563281A34B670D100F196E563C3 -1FA2A1CF67B5FB863, 19E89C4E47EEB8970573C05931D43B8083D850494645CD6C4B378B3C90CA8015EB9B22C79C8876B3AB7815DC1C9C9620, E97B4F1C222F10610F6DDFB5D18D3FC1993367E2EBA32B94390573E89D43A1658AE798523A114E6AD58A56CE5ABBAE6E -5EE7E56E3721F2929, 3AA7711700EBA565E90B25BC0A1ED92395D92D9DB8FE06A54E455F9FC9C0311882C470E519B2AB2748A3EA8ED5934BF9, CA0EEF27B7FA621893B155320A8CFCC7BAB2C4C0567523A34B3FD17F843226022E5D87025DD4F87B1F6CA4376BBFAFDD -11CB7B04AA565D7B7B, 2BD895DFCBBD85950FFE675BD6CC298963B99DB909F627A5B2B08BE481D86FCC9640823964E2413808625511E3F8DFAB, 5161CCAD4A7968B685ED3CD380F9BB391BC59D9DE08F4C467F0B65F70DD77A367EDE2B66551330E5FC8898E1446E39B2 -3562710DFF03187271, 4A55371E09700D7F1B9547414D6B3E4071F426A30F1580690496F7DA06EA9290D3A2F68EDF64BD75145AC8D60E124ECA, DAE73F39BFBD3F2A9F3AD247EE94FD25AD9E891A079F2AE191625632D9D511DD777FC32E2AE930C5A5B6337385618AB1 -A0275329FD09495753, 6B45A93F4BFC9F903B6380C8E1BF23D330FF66978031B2BC2BA2F9F112E04C242B7E1DB73C7B28BC1FF12A1999249229, 94667AA038152520F1C8CFED64D8C65F60B2A68F1B5F9616A6656FC5E91F3447A35F684187DE651C517A4AA8679B2C8A -1E075F97DF71BDC05F9, 7F0F54C1E4FB427556DA4581F48013F3A2CE46BBED66E872C287120F723818B9CD6816DECAA6E215D629AC01BB5C2078, 470121A7E34B39212107BA473B7DC132E2FA3239DFF3C9287DA6AF1AF46591F015BD962FF0F8C66DBF55DDD02579ED0D -5A161EC79E5539411EB, C7E85917B65250AC843FA5FDA808F01CAABD276DE03A46F54CE92C17ED6019D353FEE8BDEAFB646EA6B645E16D822039, 6D38FB10252426C24D77367F6ED6CD68C1CB3EFAE0EF23A29B8FFF5072C32199D71DAE1204EF30AA8405C2428C093A4E -10E425C56DAFFABC35C1, 36A8B370957DB1F875A6D916D84608B1D4902183518B2E2A3409961E852DC422769A7C6D871996FAA0D68A87D73824E1, 7C0B56B029CCDD9D106E88A8CC4A5384697EB9A5D66041F438753FC0724FC8C32AB2001531AB37BDDAFA2F666A7A8F57 -32AC7150490FF034A143, 65E8324C8CAF05BAC68315E1FA3BAEAA4D7D07B42A0F341960D3881D88AD11D3823CDC06717947BFBC47CF77EF02A288, 236A05EA0CFE71B5D2E6AB212281EE351E380150733F52FDF4097D255994FF9D5E5817B114C1D7E259FB45D61675DEEF -980553F0DB2FD09DE3C9, A7B928461464C1A9873A0BDD6D48B7EBCE933FEA1F455B21B5225B3D1117A5E77EFBBAF60EDFCAA51BDE34E069B539D7, B4BF3523C06B1A71D2217259F39056BE28C34F0862DC37663954111458D8DADAE5CBE146DF1A9033B173FCF5B2C7F147 -1C80FFBD2918F71D9AB5B, 87B28B4555AEE7C57918FDC6B416098D30C9F380228B6227AF9AE72CF98550CCD5B4A5566CEE6FFECD9B8B0E024ED8F8, 70E5D13FD11F0FB5BEF6FFF84864B2C7A50B56B5C25FBF811673011CC98531B15F3318AB9287C6999DF07422AFD1D898 -5582FF377B4AE558D0211, 9B7DD39A6DEA392C0971B2303CDFF0F595B6D9C6F7BA2278FC6B1A292455199CD38CCDB75C6359C7F9FA637735E294F2, 4CBFE074C529177CEE79A3889C2906F51CB420DEAB24D1A2295D14BAD2CE1E63578F8E363266122A5553B095F257C3CC -10088FDA671E0B00A70633, 8EDE71C80007CB8C4066C7593C3139DFCCED7FE42B3F64A1F6CD10DBABBD1E7045579F746E2F8C8ECD83B7F38A0059D5, BB79F8822EACFA328432209422A511FFE4C4C1AFC8E02A826B4F163D886B58541BE647FE9B3C78A8906929E8D76BD966 -3019AF8F355A2101F51299, E49ADBC7FC61A49FF1F42CF80B980335A892F6CF196854A21D7C021821C760797C715E7DE1E985EBA92A2D2A6DCFDC68, 117B5A3BE910325BEE9848A9CD4B80A04A3D7E965D25B0290C7586536F2EBF609520A3D294F75D6FE4033EADC3066FB6 -904D0EADA00E6305DF37CB, 3F7D97C61511354B7012FAAA7D96CA248D218712BAD609F8C8BB582A4390A6FFEC4D84E7BC8C5275D3689280EB3B8F3C, C53855408A0A66DC02FD05315CBB896E4C267FF86927FF60A38FCD6E805285890F2C7A63BAAF85A76B220EE363855CE1 -1B0E72C08E02B29119DA761, 3D47F8DF16209777FEDC6E275C860D4D9A56E8CD3444637C0CA0CD85D2E6178880A962B8E40DFD0DCB149DC6AA93787A, A5D39B548BA391ADB45EF05C36488890D705AC1FCAB71987EDC2802BE6BE90A731598A382482B3BC96ACCD6F6EC59C85 -512B5841AA0817B34D8F623, C322629B606B407C8F1C5F604AAEAA423BA63F61AE9BE78A2B89B47AD8931C212F5CA0A95C1CB320A6B1BD8ADF139255, C6CB476EF4151210C3B251982E760E13E4E5C1441A8283C6F08406BB84CBCC4EFAD80A3C64F9043F31193DF5324DD82E -F38208C4FE184719E8AE269, 3E538420C3C76466E691B6247B0BE38DAF4798B81FD55C709C7C619D4B15D60F883E48D08FA6C053A24FC06E843C3783, 5A6462B1894C0CF98D111685EC276E5FA1AA1B9417A739FEE271668766AFA5FAA2B5B98EA63A5848C858CA487A9DB837 -2DA861A4EFA48D54DBA0A73B, 290B7D67190B64B175521392B310336F3B51EED4E82CAE26BDE9111D40D5A425B8CD7C492B3B428653D4428F21AEA32, FC2CCAE4FE20F15A659B6F07952D7C23DD36E771511DDAB346EFD02713F78F68827B7296CD6EC8BB98F9E53629F967C8 -88F924EECEEDA7FE92E1F5B1, 469599F3D1D7285564D2D19E9FB20E374661B95959F87497F6DD3019DA7D123A7A2794F97F61471FD435C478C7871E52, D6BCC6D99E3F448E7F6786FEC721E8408168CC3A49BF3A5D12D635850DAC424F8AD6CD7908292AA7CB11841B683A784E -19AEB6ECC6CC8F7FBB8A5E113, D8486C5E2126B1C0C745F38AA9A7C2CAB8CDC62677DB993C9179E3E72996CDE33C773D4F90DDEB6BD109EC9D295B3754, 180CAA2EC87EACA14D93E5A8B424090A76DD7E9E53299010848A771B4E565ADD29752719D5D69930AE8DA4662A7133C5 -4D0C24C65465AE7F329F1A339, 2F1767176C2E58E0F08B4A51F500F2036EF4D00E163504A2EAA75A374B2999F0486173A22BC4BFA2131C11590EA9749, 293A321223DD7EEDE4B1FD6C5CAD51FDEC7E11F19BCF3BCD15CA43DBC184944CB382D50E435AF3A7DF069E690FAE6A85 -E7246E52FD310B7D97DD4E9AB, 39C1DB044294452FF3AFA2ECE3A2A5E16D1A239C0B63A22A52386CB4546DD87599DCDD9894B95A9D17D0F15422A64244, FADEDAF6E5224FEC08E3A2B3294916FFA178F12984C3E777E1FBFA571E858F7B28AFDBCC0E24BFA7CF84352790BBC942 -2B56D4AF8F7932278C797EBD01, 9A23F134256199B6922DE8BF63A334D48D13823DD447E505373D5AFDE4FCD39329B5D1DF0A33B0065B769A278A07E525, 88EC25D8A2E33B51E8CA17D685FD9D48C82E420F1B9ACA9E789CF5BAE95BA8579F7D2884C0B61A400B69E75F6CC8972F -82047E0EAE6B9676A56C7C3703, 5DDF3AFB5D6453AFB90D7FBBF3F73EE9C15443A82E11A6E719F45B764E0DAFEFEEE11F1ACFE188F75AA277214E580F13, 220B6401CCA494C4E93E478DB4788C0173036AA99EFA9BA4405F2F82B110D68F24FE771078661FAF4FF4CE87DBB50A31 -1860D7A2C0B42C363F04574A509, B32F67F1555963943858BA0AC73C2B4FC2BA2F54681B923EAC5B129E832BA9AD25028C8DFDB250606E937277A3A85B1D, B0F39895C81FA823465E9DB3008DAE9DB4E7FA06B31C61539CF23429F9CD58FD296AF6761D8B258643C779B932A9A67C -492286E8421C84A2BD0D05DEF1B, CF13701368E0B66045CFC41D45E197A675F4B4C4C5D41BF6CCFC908C3826C6C2277B68B52995F9BE860EBC293A59A56B, 6D018EA175D603E924B10DED802836DCE9F0A44EB36094FD1CAA79B0301556B8FB62DD8886D5B2214F5BCA6731477AF3 -DB6794B8C6558DE83727119CD51, F55FF1C787A82E6DA78187C53100B3186E96DA39C7FBFD7EA069B28E1D0B2A1C67A3A93A0D5C79390CD1E2C9E03FDB3F, 541F5BA6D856B9C9BA325F7F0E60FC23E3CFEEA0D5C1316074ADE10586A292937DBE8D8EE191A5884EA9756A53DFE6EA -29236BE2A5300A9B8A57534D67F3, 3A3868C5F9CD908C3B0F19943EA5552364E99755BA974843D32609F63CC9483645365417A34670EE6D0B53D3ABBB1BB6, 8BCEE0B863EADC2DD0D5E528E9F4F6FE549E84DE48958F61201F3A7782D0FAE523791653CBBA5424B17DF7C650759E8F -7B6A43A7EF901FD29F05F9E837D9, 78D503528BBD16DFEE6EE4A6DC1F395A6F5595184953A790EC01A3B61EB8C5060FA3C5BF362FA6575F8BA54698231748, 10EE2DB69F3B9CC49C55547A1A765DC0D6B738E3EB6ED5FC48311358B5A660EAAD585B0DF4D7D5AD0882E8434FA3FBBB -1723ECAF7CEB05F77DD11EDB8A78B, 83925EB0FED9F743B04F4B5B343F649095C14C8EF51E079DB96936096B3E80B7A2A05550202926D63B93C92A737CB862, B4116BFC49CD206618C3ED100FCFC7789E208F83E5D9D95917FD45A5346D4C37CDA6AF21049E160A628B06A139562423 -456BC60E76C111E679735C929F6A1, B17AC741C6CADF3A76DE0FDF1F24B20129CE3B7249B8ACC3DD8325C09B1708389BB28F7F3DD4C9A0863D076DD614EB81, 1E42CBFF458CDE07A8A615D3E5FE7B519EC20071EE1A82C6B32279F823DB84ED192F310E6BED4F24780DAEA76E1541EE -D043522B644335B36C5A15B7DE3E3, AF1FDDE67323B8ADA15C00E1C5B1622C7EC3D4306AF6BD2CFD1ACC443DED11631E39C851A3564646A2EC4748AE6D2B25, 8FDB4636869020D89FCCBFD052B8ECBDEB72004D6F6745FCFECC1F3C66376DA7312203518B26C4D907C2F4208BF1C24E -270C9F6822CC9A11A450E41279ABA9, 801DB56BD43A50C4857BA92264D312816A1455D6686746FAD8158C380841C578750DC162B7546B14E1BBC5DBD43A5DBD, 4747FD5874A10E40E76DAB3C8D274426946D710857501D1AC4F32D93B3551C3A8E37C3EE12C9D6BE425F26A33BC8B953 -7525DE386865CE34ECF2AC376D02FB, 5562E0CCD78C58F382B98659B6C0BB6071EFF74A52BB1D90DFF09462CE1E1B3D3CF24CB722538E992DB861E8B0459C09, 48DD52612E8E79EB8F68B117A579EE598C4E04997BFC71FDA1E51A98F2E1A071CB95C6D40BC32C1330DC85C52398037E -15F719AA939316A9EC6D804A64708F1, 3C720118EACE572081ED712457E028E01A637A131FC16EBF34DF0B65142A6D66B813DA68A66AD213D18DB5A0A562D0FC, 806E1629250396C00C35240719499C02F8AE734C49BA2ED9095BAB5ED7C1743DC8C77478EFF551B25BC16066BEAC8EFC -41E54CFFBAB943FDC54880DF2D51AD3, A665E9B0F5EE4FEBC8EBAA787135EDDCD4DD64F5566F8C4A0214642D08D2C8E96D4A9F8B6A1DBF946AFBD47E8CC1F6C7, C793540EE4FC8D84C7C7A5C5AFFF7B9213E294EACD48680F184AE550C35C3B609C4E4524EEAC301FB7CA87B89255A9 -C5AFE6FF302BCBF94FD9829D87F5079, 698882343467EAC6E642E0634AE74826F0F8635825CB8631FDD461FCA776DAAFD93AD926AF0F1F723643DDABA86746FB, A15F7C8B2ADDDA5A50E830C56F5637A2701C5AB8E0F3AF776E746F35BDDAFA81200428BDFFC3BBC398FC22D942A32F8C -2510FB4FD908363EBEF8C87D897DF16B, FD10B62E5826880EC655B8FE38D8837F111FCACA1E3389DC9645350A8B17F0F12787B654C02B7D3BF6A72883552B66A, DD69AD5311B203C8709708C2AE9E5ACD6ECCBC71CBE837F05AC59188B2CF5364F9449446899879A40AF9A3C8A94D5172 -6F32F1EF8B18A2BC3CEA59789C79D441, 7D3DE83A27F5501DC3AEB5246AA159119CC20BC592B3A04EAC140383178FBD73DC291C6976DBF62E8FBAEB47E4EEC242, BB6EEA3848808EBA89EBE470AD2C79639BAD34367A4A9FA2BCE07D594416A87A03AD56F47A599484923E3B884CEA2897 -14D98D5CEA149E834B6BF0C69D56D7CC3, 56F6423CA135EDE0065ED6853DC33A5CECEA4BDB0FDCA5DC485812695AAEC1EA62E32F362A89AAF790CE385AA3B227F8, 7A23245FD401F4B8F806D92CB0DC01D070A17200105482F24B334C29DF436C8DE4BF74004C36F1716CE85539315DD47C -3E8CA816BE3DDB89E243D253D80487649, FB7ACF54D6BC1F87053A2A68EB73DB8C041E9BD90BA2D7384C2404D3BA6B989955A23C4A42CBBE592119EA57C7D130FA, 804F17D4B2F4347AFEA0046AD2E3AFEC66F320A40B2EFDC02FD2105A44FA3A4A39D75F8A2349DADF154830911D4C4D79 -BBA5F8443AB9929DA6CB76FB880D962DB, C6051F6AC7C8D3A0FB9617CF6B935BE246366DAC40D6DAB7D5CA3271109E74E9DEF5B5DCD34054C3148E09A8EE376F96, 17D5118CD46CB520EAAE22A5CF953AB6C6BF30C4E9903E5646AE4D3DABC0112D8A9DE529A9A730E11C97BDF6E24CF37D -232F1E8CCB02CB7D8F46264F29828C2891, 8226F16EECDCED762B53A5C236CB0473B1E426B7514DFDEA8E1D5E2236CAC6516A8354C0A9D8AEF2AB25B0AEB5642CDC, 8141785EECC969BA58EBFC3A0E0F92C17878E780C6823DED77CC8634EDB5151A13DAA506436787FBEF21FD02F43E1B0F -698D5BA661086278ADD272ED7C87A479B3, 7C6954982B5BAF090627E007EF96BF45BD189BD7C0AD6A22E5956739B60E534DBB10D4B52849E7F230BD8B0097E27848, 4414332E5758586C495E14D6501BF0BB312A7A93ACA75B4DC3C2E8295469039864A70CFFC1416D17C1D558AAD1B55656 -13CA812F32319276A097758C87596ED6D19, 845E24A572803B02599739D0210BCAE6C383FD36400A5AA96B09B89D88916732A039A546F77EA90718971D2520EE8F89, 8974A58DF0FE67F1B723EA739F578733B40BDA73EEE3DA2BB45BE94D485186CC3E76177C0EE81A32BAA03C681E4AAA39 -3B5F838D9694B763E1C660A5960C4C8474B, FDA6AD1957A6CF2E377D1E44E27DE0DFDE39CDCEAE40A2E830A00D2D514F939B3220FC1DAD3F08FA7EFA9E1D15DCD033, AD850C003BDA4DB0D2CCE0B47476AFAA63087A066FE9D9AB8E50B1E6980A810A485759238FA8FD45675BB4E04253D160 -B21E8AA8C3BE262BA55321F0C224E58D5E1, 430CAEBFF1D8578CF05091DB0C810C191E48C4A7B46A1623862DCB8992C520E62130F66EA8DF65A80874CD088B9172BF, 1360132ED83FB5FE4D26E29B84B4747C0C00E884A2E9FC206D54DC70291B8DC2F0BF0C84EB0FA93B471DC10D49DCE982 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 6739E6A985EA9F1EC9C93887AC7A821BF68B1833EAC32833602DE1BE88259C01BFEB412BD9352744DB2AA7E099F65C51, 8E364F68331A2812476F1AD0C35366CBF08FCBDE69BE8F74C33961F47212BDCB3F06B1B374F03F81AB41306A10692FD1 -64312DFEEE1AF5788CFEC3176D34C11F84E9, EDEC4A7A3F5843004EC311096F8353655986118E7ED362D24F31A214F9BEDC78BB0A1DCFC3B2826F45F9E5CC423D0915, E0BCFC02BFC1B3243A746B3BD9AEE8CC30861D93A814B41DF90D982E72A95C4E3639448C3BDF9581F1C2F3E629C31F9 -12C9389FCCA50E069A6FC4946479E435E8EBB, 58C6EF296B7580441B6F638E39610323882456B0367745A88AFC81787F1A39B6EECE6CD8E17E9010A9069FDB54C0B4AE, 3287198D302A7CDB02E65472CC8A59B26FCBAB2A3FA5E7A13B29D2A56E29930D9C0A55294507DC563C96010D89897DE1 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 8F460CAC5C0E019B2DC8D38FD9D74FC3E0BBCA91E1EBE5DB396CB991B23AF91A763BAAA0E1B192E52CFDE09E734B0675, 9CE93A27A6CFEA9B6928521EB9BBB07CEAD33D0401193CB279FEBEF0C2F5327B2E89EE0DE36B804F5898463912026479 -A912FD9E31CD7E3B6DEDE937884905E530493, CC18138D957D582F79133F05A4C8DE1443E6B02797C255A29C05E99BAA764B1DE0CF9759E5FAE7733AE10CDC105818D0, 82D4403C3DCB1607AD8D980895859E251FDD217725D1F6E543C284E75CB23AA8D6E42F824A943F05F1F1590F2B5194EE -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, AE1E98C0EC6BFEDD0D6D06DFCE8BECBA637BDE30229D08E07BED521F3BAAEE494BD05C044BC69335DECB16A7DDA79863, 33EC3113A34D25DF5837E0A7AC4928C1322BA285F07F4543DBB67D79D9722B2D3A6E11E0C04B3967F422E0E19EA1A4D6 -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 59EB072C6AF606C6F56CB4EABAADB7FF55CA5F373C968D6D47B2884549AC41C61FC0C7A54928FFFE412D1748827C3797, 7366C6427125F79910555E2724556992738BE7FFE6D74C2211FAEEB7C64DC4DC37EB20B71A1815EECF1CAD70828742FA -11D500BFAF40AC5044981798DB5FB39F2C17B81, 34DCD5BBB389A5288AEC85E92DD3D603A6BDC4B912344A37B3906087666F63A9A5E1B98B51CCC55D8CE71E2C609786E2, CC0592FEA9284D16230652ABE63501DB123F74DFB960E5803B29B5488B8BB6C85F0B16B5CCF652E7E2F6E6F797E9925F -357F023F0DC204F0CDC846CA921F1ADD8447283, 6DF7DBC6C027088596D82132A7CE15311D34D06486A9698B561AA3B8856FC66419FB551B0B070DB0D38CFFCD1FEEAE33, 28FF1E1E95640E7CCB11E267C06284C3E6FB36048B8CE07B69FB8D6050704FD3DB2899A3C795A287D5CEA737BFE4F669 -A07D06BD29460ED26958D45FB65D50988CD5789, BEAE9EDD444F66A2EDC62B5BF8C0F40AA330F1DAD2D9AD97BAFD1A4DF7E126E9E8B48D05324A44C3B2CAD59A6B8ED27, 45CB5D6C9806A848325ED1C701C8D194C4697A4D9907ECE4322980E2143DBF7D300ED3A9F7C27C3A237881A71DF57EA8 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 8AD64B9BF757181B9C147A77403A713202106DB926B838F1E42B8074650779A3A585073FDDC369151840F72C846FCA80, 41669D2A06284F90A37175944E0AFD30512C02838BE0D3759B8827904086E35F6FD9B7ECE02700026100DBB1C129DB95 -5A4653CA673768565B41F775D6947D55CF3813D1, C3B69AAC77A2DFBC5D3544F50A09FC113E0A5FCB6B05144B9863DE64B42571C2B960DA075BD299BDA28F1C7F553EF53A, F6E91117168706FEDD13B5048AFB9255D8501CF8DDA48CD1E3E9E11D6C520A48A1ABCB7FF39062E7AC44D07001BF1AE0 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 535245AF848D7BAAEDEE934B11A06399F48DA9DC246649F037AB8FBA0D943667B589B229F3ECAEF118AC301AB40EB26C, F3C69A881DDB19055DF5278E6597220BBC130DBEA8074DD98D8F58F155EE67A180F1DF613749A788B9E1E8A18FCDA398 -32C78F21DA0F2AB093551B3248B38680448F8B259, 6E332109579449BA6BC1159763DD73DAA750407D51A6057F719643B1EE06C6C23D4061768C56C8F991A6DD6A48C045D4, 23D28B89995E355F98AAB3522B85682FAEDC9969D711BFB7907269B1E96EC48EFA09225EB1F0C2772CE3A6022D23564E -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, EEE848AF3D55232914F20D9D9858F0DA7D88608E3F95DEA3289EB042655E5BFCAE1FEBD1E4757E9A0A87005E9B77331, 9C81AF59270DA297E5A872F7A0295794AC84E9D85DE0C65B4A1CD40AE0690CC98C6E0CD89D6E689758116D1BF4EE7920 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 4B44D4ED3C2F032A81CE01F5C3049B9F1E1028A9022E3B0B3C7A4476E9BDAB5FB7BC0CC016456A1DC16AA72838EA56BB, F36803A7483D04F05FB0E0EA52ABFD23AA5C2EF8E2B7097C58BD6FD9DB83AFE98F26FD21EEBC1BACE257FB41071A8356 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, 6336A76D5D94FDE2A1A625790B044E38959C462C38FD202048B3A81DB7F27048085EF06D13A0F5DEA359285F636F42E4, C52923D0F12679656B59660FFA4BD70312045985A040CD858F7CD07E8E1F03923B92543186D2E87823B64F7CD9981986 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, E1FBB64EDCDBF21B448243896D0DC028DFA9CED2AE3F184D978F29582FEF39643F36E0A0AC79DDDC13B5299D20BEBEA5, AE25787C0F1B3FECE1851245D98A149B7877EB90400C23A792145CFEFA26958F187B68ABB7C7A10759AA56FEDA55CD9C -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 269B83C644BD0217E3254DAEE476D3B8BAD3A7854B26A2DA8A49445DDE2D907BAB408CF736F02A654C4E104B82163271, DDC4F14FAB24E5496232BE99D74546EBFD28C9FC486F2EF27908C7A3C44D5248CCBBECA1645E327ADEFBAE66049A2D5E -909A469765F53090D38D5A7231073A03433CC33DF71, 60DE6F9CDB270A1813608B46B985565C1202EDDE62C3750A97792AA1F833A91093EF8F86DEC018FF2D427B849D966BE8, D6AD1734E5E3C4AAAB583F75862868EEE4D6EF2C6E7EFB22E73EA567854BECC038AA804E757D93BA6CA41165C9795E9D -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 917B6E9836F425605F20B8A77749A729C7E4F37A728363B03813AEA1B7B1BBAC195C6254EBB52EB9C5AC8026729E6D3, 77CA655D0D540EA8EFCDC1013A5E6C1FD4B4C9D4070A81047C476B2B78910ECC97DACF8E1A96708BD50F82EF4F13D19F -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 3A4894159A887E6C56EF92C6C88C6750BFE1D2D13647FB1B52623C8E96BBF4E4B61C1F0742859A18878A2A4965E685FA, F9E93CB6DC1BBBDA7F4B78CC4F64DA85CF8C70F099DCF2DC1648280B96105EF082140144B244A20249620F2CF5E8925C -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, F094C286632F41143FFB04A0B2CD8E5B787F09E0C3451DD5318528041D0CA63C5104D91A59640275CE525C0C8F067D76, 67024ADFC008C46A0D483ED77CD5814AE9E0D53C60C60D4D1C7ED25480A1E96002878118055414E1D661811AC3F1822 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 50C86496BE68E05F94DE7582524168D2D2CD8CC0276F49591D5FF71B5453FE91A11A6514C434960FD8C5B81956450BC3, C938D1C2209D48E5433B296B7FED13590C1FA6EE09FD4BF5FDC64743AE764DDAED4A086976530F6F25F9683B153C3F7F -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 16FE8D74114511776207D5260CB7A18DCFF4BA22B020031A69A674107B65E87989DA9A0F72F63528E70F9915C8203409, 7DB56DFA23AB19BBF58F56576E30FF7D69FF5B5231AD17E315BFFCD97898F70F1A6FA88FB74F11FBA6329709D3EAB05B -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 20FCA562C8571FFC1F577B5C94FAABE2D5380E392DA26C522A85AC1BBFDA4C8C45806775FFC28A24F5FA0A4A964E9749, 2D2465AF770DA93F5A3F992E2FADBCC6D3EA627D6B32804838ACB0978C4F8C0A26C686C03C49E98F943AC8E7733A92C1 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, E68405FEE3EE25E42DA1AD218C20AACF30D7448C4CF150A9622A8518D8DFC6F1D8469CFAF1C2C979443CC8C2EB1B088C, 889CF33EDE61331625C9F87C68F56417D125FEA6110B72EEF8569A5D005C0BCC8F2DF0F65B068DB4FC4A9AC5C0045D3E -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 4EDBB67E1894CB5A1B274499DB09255A8664299ADD5D4BD7194DD165ECF1F93939422E7B37A91E7DD2A017931F77ADAC, 2541889DFB620C0A68FFAD21565BDF7D1C7EB43A37C428EBCB8BE6748BF04A3513791A304BE52757CF925C1CBE06F027 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 23EEAD8B04C990E245822318E65390210C6CCC496252AA22BEA07F6BB4E133155E8FB686A27E74660E02484BAACF68A3, 756FEA2D2A57C404D5BB305017064DD529AB9140465FA3E99F812083D6281BD55C2FBB3BC2BD49AB2A8510190E935261 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 257D81AC8456551EFF4807051969ECFF195098C16F7284260A74ECF69326D04269A31C9FD892F61C6DED793838389DF2, A019CAA36E0447BD5EDB2EB775A625024A5723C4296630B4EC4C64F5B4DFF7CBB270705A53C59121BE38A418A0876D1D -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, B4EA5DA208AB4AC5E396DE24E497BA1AE849E1C051748F9521D52B0FC34220F11DE6D1B2DBB913910A4FA8DC302375F3, 7C9E108A52DB2853D5CCABAB873BBAA565746DD426B5C9C913DB934AC5881ACA09D13ABCC4EAF4C2C2E8807E2470B03F -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, AB164B4CBCE4672AE7FE5009859092D08DE511B15AC5D93DEC0174AE4183CF3B8E48DFA0E5EB56FF8C1B3DD90A2B58D6, FB3FB21AC0899F5EE414D74B727726B77927E5B803A86618178EF1AE684F9AE59F4AAA0BE668BD2C612225601D76B3A6 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, DF4B2ED8CBF816C905D49AB05AEC9207594DABBF714EFC8F4B042F4133B740FB4DBF2180D21A6E7F167F7958489D406F, 346D924EE85217C15047D68E5253C2B874EFA2DC5626572F34765006E0C802E2E63CFC90830E0E56D90F408099188F8F -29396F76B67B7C403D73A1059B80139336878E44938606769, 5A238C0C26189BB0B65A54935B9DEDD95393726976440BF373A6CFBBC6FC4653145CC89BC8B006A07ED37F2A0ECB0BDE, EAABAE89EFC6B022EA3AB568441DCB57B66C6D33C3E419ADBD17787D90FC0436B970DD920EF8417C6BB1D941C9C37DDA -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, 6F6FD3AA2E7311C2E92A22EA7E6C3328F12298C2C963BE81C6F020F2708899AE1FF38BC6378DF21BED067EE89E78E938, 5701988546F00FC727989B485A1B61B06C2F8E6B9DBC924719F6685B3BC3D6B00EB2E8175217B04059606B2FA0245019 -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 1CCD7B257AC9A6872C8810A060AB7E19430F7E4CA055FCD3611A3F2144C457ACDBDC241420B559581D2904FE211DE99E, 6492BBC9ACBEA3A180F8DD8692C08287C5EF99197027B35267023B898C97E59F3C97E80F37DF21C76FFA5E3DFFF064F9 -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 26E4BDCB7E4728FDD66386BD84DC8F9D1F970225DFBD3C0FE2F67D181650E1596D7EFFC026BCC5A1DC308E7DEE1E3BEC, 380E5C9DB3696B6FCE63A57F7C07D3B81A8E8E58986AA355AC2C9660B9921403AE264BD6BE95A007E6BCCDA136362967 -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, D2AA21E3F8C0BF9284D2E68C6825DC582F562A97B7A7CCEB465D842DEEB769A359012496E5CC04D171D4FDBF5982F8DB, 1C5B56811ED04F7178AB50C29B6E3D3D27755BC3359C1EBFF91DD3C768D6333C67074E51A7A349F9B723559177F5E42F -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 91AC5FEC6C41D4425E3897CADD5AE51ED472C57B703EFEA6AECFC67BE673FB27D8B804F503EADBC871CE70C9D0BE4F93, 47717619E6C0CA27B810F03E29869DB7D32B3471F1DE6B54657FAC227436EA19DDB03638ECF556C684426FEEACD6B87B -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 5262D4A1DD05B932C7111E5AABDD63B28BF8D3D6722A69AA8E519BBD4F2D87EFF12AC973F4DD91BD98F2163F8E430C9D, B212E52DB29F450107779ADB7859DE9978C4674A06D9ED513FC68E4BB363B382486D06760B38B548E0C89074B01361B3 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 3EABD0CC3A97810473133BF0E8CCEDA93B3A16646F942219B55A767BE749AF9EDEC5B86FB10CEE90CFAAC82BDE809BCC, EF5D3C16700E6057A37109AB95DD32D86E6702A8A103CA0BF0E95600B128BD0794DC236F442288FB818419AE2D0CE047 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, EFB51FABA5E00921B4FDC615C3656C9E32C6E3FB0319C08E720C0537B42A037CA0D7DBEA1A9D1817663B919F50D6A19, EC313A410871C71DB05472484B0792E8257B781D366A9206AA53EB8DB56F3FE5C25A094CF2D84B147F696B6646EC984B -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 661219AC4AF8FC7BF8BD2B25F39000A4397C9FFB10FC23440F5A7E33DCC879A1A7ABBEB89ECD462F7B7E895EB7EBBDDF, C8206ADD87BEEC60A01C55CF114D929E2ABFC2F51C8FEE12FEF28379EEC12254F9DE7111D4C1EFF50477C3BB0412D826 -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, C55C2D48774AE739DAB54C3354FD2FD48663E6CF1CBB52F746E91B8E96BA820B4365F4BB5EAC8ECC5198BF081DF7D44E, DC442CAAA1405C10CC8652B3263C52AA99A788B53CD14D256C1453D20911FC4973E77A5396D064C8D15570AD0177B993 -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 654F8444B40DC6ECCEA01F6FCC83E4CE74D39F33612C575F92683B2782A63DC1E34587BD40EDA8A69776E0945CA1FF25, C2D2275E31F42F004918F91901E663053392C1E49FBF375BC7B2188024CDC5499C01367BE41E0820D1F5868133BF0C6A -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 3F216AA2F0175611B41BC07B9B81F10F84B5469A2DD56BE4E2BF76948B9BE2E88A41A98C1E5CB617FB77548A828605FF, FC2986A007B72EFB5E00BB3E7A4366E08060A995DDF4FF49BA59CAEB193A3DD4BEB1ACF422F9069C59B668CBEA74262E -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 49EC115431A5A9DC1FD1CDB9B3C46C80AB42AF7B02521881F5D2BDF9C14B5CD5D8AAC08FCCDED7B8A05C54F322C700BF, 90DA3972F2DAA834EEB421C6B557BF274410DFDD362410AA89EAA3D9677EE83A4B6EB5805D918E1805AC5AF73316A389 -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, D0724A40A6DDE3428D9B2BAF2E00DA732AF48EC07698CF79A7CA9EB67CCBA3EFB901DD0063C085B085B9247B6A7AE89E, 72180D820606E4FEA96FD856BF0117AE642FD3D72E26296852D6EB984AFF90AEDE44380B84F8897045EACB6E38E173DF -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 833ED3838161710EEE4FC1F626831804802621B49ED0374D46F96B647C326F48CF96690B69893E489412B7FD9318CF07, 96FB35E7F381526147249C998456C7C3D7F757499A6D33F7C5093E019C2612A8FD24F7F1BAA032E9B0D7B46CEB052A6 -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 40F2612CC9F0E96C6879CA085A5616E49DA57FEC8435FA5EBF939CE788845246970CB0E3CE1BC5B2EE613581C60A4A53, C317A1E6132860FAB9880F037C229ED821D812F7833743E6EF1862187D210462A6AE2BEA291A3457A280066E05894BB3 -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 501750558640FA04A14396E4942F19B56AAC8BEDFE6F0CEA9162FD91DB0ACBC027BF394BC3C5454CC2F14353EB85AFFF, 48AA1ECA7DAD2DF287751FBD4CCA886EBDB1D384757EC24997C0F3D923884103EF6EC9AE271FB548D6715F1640C4E3D3 -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, DA71BFFA9B3DFCC1C8C69F399535620181F9746CC43D11B7D18A6E058325494AE62D2770FC152C036DF1C34844DDA551, C59A5AF3370D830693263F0995094CC583E3DBA084F4D7A38F1DD12DD23D6F8E112A1B8EFE0B9E9C061931CD6071AD09 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, C7B30F1ED4C3B57B38B529ED7406C0A3B2BD8B61CE67C1541AFD0CB78D14015271FC4A781367FF73BAB6063B062CAE1A, 8A884288BF9A200A768843EC58E978AD5FCB4D9DB5C3FBBFB46079B58D8E6FCB99187742AA4CEBD9784735107BBC2C36 -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, BF927F2AF838FAEDF98BBAEEF2659F53F63E4E9B56C0AD4B68650A420F70936E1FEC3912DE76ED20BE8A21D0DB77A422, BF0847721A506302EC96C99E6D332B92B09E0897FBEE42F4552D705F3458DC12F47CA0DD88F0D3E510000052D320C011 -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, C9BD2B3FD0F566D809EC8D7B7FD72120B2E626C0F8C641084B6A19A318BEE009A6D53A939E421DC87E713F8D9DEE1F24, 19EC304A50124DDEB962755B2E778741FA3B632B4272BA187D17A7D0EF24AED57AFA884118C32474E16454A5F4203335 -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, CAB3A4A9782F3622F212D2D7C0C2D9B6D4129A4A91A93D646BBB5EFB09C822E25800E1D2DA6B7492C4BDD5263C9791CB, 5A495C63C88F6A7BCC513AE17B32B1D787DCFF22EA60ED304158EDB9EE3C9B0D86AD42F77764D6900DF50A4B2EF799C -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, 893E42A8127814CD00941183603F65B853DDE5DD89D33DBD2C7E2BF9CEA93F60B850D70C8CAA53143F6BFD34D9BEE20C, F71C691901A5B8198F97F5AF432760501A8C4948CA35A51EA6143D8A64587F78F794172ADC560320AFCCED3C6FA1567F -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, 1A94BF7387BCDA5301E6B192C85D2DB9E77A7A018C4156BF22A58D501412379827E113C64E047DCF69BC2A9BE6203, 22434B28AF8DB072919E660298AE0B325B3440E366A6EDA5A22E2BD9A684E26909183EAC51B4DFCDB7FC1C9F497F0162 -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, 5F83049AD2A8EB2F763D965E30C08DB85ADCBA02904E9FF60352E04C592A2414FF7BDB87A622CEAEEF82B380DCEC45B8, B884E47A9BCD85D71B52B574202973FD66C49D5ED9896ACD9AA95CD70D40088AD0A88CAF5E5D8D24AE541C0118680FC -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, E6427E2A57BE5CFC7B823528AD5100BC4154789A9CFB5A1D93536A24E72A4CD0D3BD385E4AFB5ACEC9E0FD37F42B832, 775AF7E903ED68D4456252EBEEE04FA5C1FBE917742D179FAB27A2AF16F1BCABA2131F6A66842C26A406098BE0778F63 -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, 892FD294F87BDDAB30F383CECC76D1597ACF09DF87254C3B4E1C6C8B5135FCEB17A6D37232EFA3D8C45F16F3110B17AC, 4385E858C8E3471A4DC02ADA4584808333B2531B6F5D23466BDDF2A545ECE801B44F800A82357080E53D254436436953 -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, CA910127E96D2E00398B88A8933D9CF5DB362BEF06FB9A9A465C64C76749F847B914F5DA1761AB26B194EE879F081F5F, 98327BD190C9F4C1B941789842DD0B475B5B81670F80CB823A77901CFA8222D99E538D72217CD5DB2D2834122A711F01 -A0D2E82CA5E358392DE9951D10B533E405FF396E226444B3B8F22B54A64B, 8C4944FAAD1A578DF285E647447C815DBCBC7070CE37468C4F1DBD28EAF0F05375DF76411B609B71042839631F5A858D, 64958FA8D1DF71EA39B7DDC72CD2043669FFDA77B02907D1F34D763645E013019A0A871D73D01B340BC4F45E6340EA4A -1E278B885F1AA08AB89BCBF57321F9BAC11FDAC4A672CCE1B2AD681FDF2E1, FF7E584C289D4D97215C9C4372ACEC259B694574A8AA749056181FFF3F601716FA972FD2DBB10452DA351F10FFB630C0, 108F5B4B48B0FD567D8A7A6DFC3A7FAA288503581320618BBB9C200124D4CD51E479CF32096C3E6DEF66A548A268BB66 -5A76A2991D4FE1A029D363E05965ED30435F904DF35866A51808385F9D8A3, B533B5DCC6D8C4666AE835793FD39E87CEFF57FB7C113A3B99F82D3448FEC01D088F7DB750707B5573ED055E755A320E, E6478E7F94BC2338C551AC03C60D868B0DF6CB6654397F6AC90B8C1251D2A1E1D2FB71D5FFBAF46875FE0CC10B4CA7AE -10F63E7CB57EFA4E07D7A2BA10C31C790CA1EB0E9DA0933EF4818A91ED89E9, D7DDCBBA259A6E4018A0F62DD0DC6AF8412BBA1F0909C88E71B83D9A75CEF1A66F8A27B5A8754AD77B0A9A0C64B8F0FB, C490F422E5A8F64264DA5E82693640C5F0505F924F553105130CC705D4F469E3768D9A29DCC2F9C1FE6EBC4ED8340349 -32E2BB76207CEEEA1786E82E3249556B25E5C12BD8E1B9BCDD849FB5C89DBB, 3AC066784ACFDED2405E992A297EDBF9970631B2F73A069661887ADFFC84DD35121F3C61A16A9DB441A256CAE3AD76FA, 2902428EEE224C9406A319FD6068F958A7AC490A6DFA71A0D5D6DCDF06412C68C2FA3FDEB0D8266BACC42F9B6CEA601B -98A832626176CCBE4694B88A96DC004171B143838AA52D36988DDF2159D931, 90434B263679BCBEC06BAD5BB43B185E912831A31C0622629F80AA005A09C34B650FBBE82E735F4B9755157E1ED7F619, 5FEB842F99CD571202E05EDD9DCEBEEE7133A387A3CF3114DE210C2B076FAB65166B4AD46211137CCBC156446F348A01 -1C9F897272464663AD3BE299FC49400C45513CA8A9FEF87A3C9A99D640D8B93, 2216B8FAEC60F877265A440D0F311E65E6AE312BE03260408A01DAA1DEC1C18003C2965461CEBE6145B99FAD6A4EF282, 5FB5B6A1C7BCAA608AC9C68AB4D3EB4194A035835D45519F34DE59AF4D34B6887C3394500AB59193B7F6458966774AAA -55DE9C5756D2D32B07B3A7CDF4DBC024CFF3B5F9FDFCE96EB5CFCD82C28A2B9, E03EE03D488826AE89725DBB0038E503F879AEC7DBD3C7A88E522246BE8B2C4FE2F1FF10D55B749852AC2BC9F54C5078, DEBBE08771240ABD85A508BC64ED09CC78787F97393C58BAA0748BC9D31F8A107FDF88F018596C200A4EEEF0303D10CE -1019BD50604787981171AF769DE93406E6FDB21EDF9F6BC4C216F6888479E82B, 6CA1BD5FF27D68C0635823A156C58CD842077B12D050729DCCFEF7BDADD7A700ECF11451991C3A304EE485072DEC2339, 75E0EFCF80D47859E030BB4E89D25F36A6E93A4FD19F8193FA267752304C8B084C426C0CD2811BF188603E19B639694 -304D37F120D696C834550E63D9BB9C14B4F9165C9EDE434E4644E3998D6DB881, 6E7FD0CB368344068BE614E8D3C54E920DD4337ECB645AB816BA42032C40AF9E44A78D478A7D00783FC23AD0C6C6D3C5, 6B8146C68094E6FC6877EE99966A4C9BD7B172755454A90BAFFB9B9ECE25D0C1188E723E783D6C2C4A11E22B65DCA5CA -90E7A7D36283C4589CFF2B2B8D32D43E1EEB4315DC9AC9EAD2CEAACCA8492983, B796AC582388B56FEF9D37755BB7E529FC393C59817E2C2A30365352E3058BDEBBC05A17474C9B21BB177E4DADC90A38, 58112D40D3398F49094196A8FD81090B1CF4F60C8FE567D2521C8C0DB5829B75824557C00105D9FE407CA1F222BEFCB -1B2B6F77A278B4D09D6FD8182A7987CBA5CC1C94195D05DC0786C0065F8DB7C89, 6722763349DDE6305488A56BF54C65EDD505C368D147C7C5ABAE253EDD874D927E270641EF606DCC5944EAFB5C816755, 67BECC5F12221AEE2F18EA6EA98B1AC354480566B271A2A95CF15D7AA7C4B40EE41E2A7759D4223E9DF3061A972B9994 -51824E66E76A1E71D84F88487F6C9762F16455BC4C171194169440131EA92759B, 1D7D201EB1E6DB52E1D4EB87C857E0933378768238B02CBF74864BCD3585432670F7970AB150C6CAD21C4CCCCE9ABB7C, 6429429FCD058769C0557F1F591D22804C71E34CF62A92AF3398CA296A3D422DA76326AF7D3401CB0D922C35B60468 -F486EB34B63E5B5588EE98D97E45C628D42D0134E44534BC43BCC0395BFB760D1, 818DDB262DBA224B41A4E6BCB3BC5B06D2E1215295A5795BEE762A2B1AB803ADAB1CF78CA1E9B428678766C7889DC0B0, 2851BBC399216D09B52E3D0F518FC440BC11E65B8F60FD5F61FCDC544740F4AFAA080880158B1E899F4CE19427F89E4F -2DD94C19E22BB12009ACBCA8C7AD1527A7C87039EACCF9E34CB3640AC13F262273, 60D6926E594171B8C88C1B85A317653FA0A5BECF9138BA15BC5CDC34DA139DB3840B90274CA4D92F47BA84D7C045D616, D0872A2E735DEB24AF801252B2096E2A340671F7B4B2B89063C2F2E4D51ED48978B99FBCA36F781F0A805FE8F4AA3304 -898BE44DA68313601D0635FA57073F76F75950ADC066EDA9E61A2C2043BD726759, 6CE00FFE436BEAEB07C97C3E273DD166D9F292D8CDDE885B04697A77267E99C7B3E84CEC74B08974764EFAFCED7971CA, 12FC43F043C8B8BEA9C9E1CA67602DFAE22C2D1B9754CB44F453FAE6710A31F338924DE4FA9AC00DA116B61382D03920 -19CA3ACE8F3893A205712A1EF0515BE64E60BF2094134C8FDB24E8460CB3857360B, 9D96088E2D41DE9BCE458A6AD83BFE9631CF5461616B5CA08F300DB605A0FE950D76176D31B7225F7E13866FB57FE5DC, 5FCBC3C27E8A2E16B95CA9BF832A7EC4186429291164CC134F6DDE96DA9240F13561D5E84FA4EB13A1E41BD6837B4CFA -4D5EB06BADA9BAE610537E5CD0F413B2EB223D61BC39E5AF916EB8D2261A905A221, 2D3410D1606FAC3B4DBF1265C82F2D5F211035E0C2E928D0A9D151323F7B32360E52238D422679200EF62DA2E6C36013, 79B4F256438C02B3DD0A5CDDBA9E1F6E18A9D669D3652F8FADD79A530F8C22C54029015F15B1094179AF5D9B4B9089E9 -E81C114308FD30B230FA7B1672DC3B18C166B82534ADB10EB44C2A76724FB10E663, 172FF498DBFF706541FF31AFF32E3EB9F07FC81748CD84A8AEC1EE9CF35C2E17407A812DDAA5491E32E83F69AF427086, 6F67F66B7BD3FFDE4C80AEEC026E31D1D7CD459A6360ECD900A879A8BD427D340B0A925DA83654C9855C04910B11768E -2B85433C91AF7921692EF71435894B14A4434286F9E09132C1CE47F6356EF132B329, 31626266CF735F78C5A9BA98EF6A9EB3B714077365DEA9ABEDC4CBFE1812E4F819B5FF3123A2A7AC683EA42E578B6DA7, B0FD65EE7A38E4A4389412811F42A0FB7B223183A2292FA0CD8A5C66F054C987D8C1FEE7A571A2B45D8BF126BC1BE5A -828FC9B5B50E6B643B8CE53CA09BE13DECC9C794EDA1B398456AD7E2A04CD398197B, 49B9BE9070D4BBCAEF23333DEAE2A7E39846EA57C853C59249048D6CA3C72EF8AC5C159B371E16F599BFAAA358FCCFC9, C440C717EBFA22023D74BE6945C7F0040B52029A42AC9FDEF1EF3675478C56F01B71AA26BFE0F30E7194C4A9226839FF -187AF5D211F2B422CB2A6AFB5E1D3A3B9C65D56BEC8E51AC8D04087A7E0E67AC84C71, 23D7F597BBA17B451745CA23428D62BA70713DD5B5B5B8FD060BA4D7070F3A8530996EA96CF6C423FEE9F1D28B12C222, 1EB5C7A12590265923F5C803E51052B75479B2AF848C4FAA898C9F93132C3731BBB62E20B33F7069645A6B9802140E57 -4970E17635D81C68617F40F21A57AEB2D5318043C5AAF505A70C196F7A2B37058E553, C52B3E6360111931BBD8070F79BB3F2B1C594D7D8F2900AD14243F19A9D5D739FAA0C88F30D7C6BF9F9832B4230D8D71, BB82ECF98204BBCE23A794D5D049C9925C1321E8F7EDC9528DCAFE06FE96ED1E11C99210CFAA67AF4A70B5551E95B337 -DC52A462A1885539247DC2D64F070C187F9480CB5100DF10F5244C4E6E81A510AAFF9, B2609AFC57A8238AD4A3C14077736B32493452C962D369BA4ED8182550EACE70252EA9DA790C98767F46A8603EC0A53B, 9E83C5FA32789C1E8BD7DBE04D0B96780C93EFF30FCEDD284D023E588FD1268CAD987F5698362DE3ED24D9BF3E29EC97 -294F7ED27E498FFAB6D794882ED1524497EBD8261F3029D32DF6CE4EB4B84EF3200FEB, 2AE916732DE7DCD8C8527890C10AA218688B578078A25033CDBC57FAFE79AF82E308D860BEFE747EAE19F5ED8FA9D136, E5993D6EC3EA6D8E0CB58D40379B6A0C489D455F9AC54297A41D20CBF958CEC7B35A0259E0E244FEED1EDD5EA86B9AC3 -7BEE7C777ADCAFF02486BD988C73F6CDC7C388725D907D7989E46AEC1E28ECD9602FC1, 7A74434DB230C40AAA6E6696EB973AA6A02BB1A85EA9B403B21B7F4F83404FBF79D11B4DC4264C848EE9863D49DF631A, CC6DA04984781D57199BB36EAE63B650402DEF1968216EE194BA36AEB176B7BF40DBDE28F6465ECF3371F040B9A6AFF1 -173CB756670960FD06D9438C9A55BE469574A995718B1786C9DAD40C45A7AC68C208F43, B8F7F463E8DD26A1A5FB48D3DF0C08A4F2ED37877B4A055FE4DBE0BA4E8761C1D572BAADAF2A999C4148B41DAC692700, B9141FD5AC249FCEF63CA1E13852ED4A874314E74C8F7F1595F7742A8626D2852F9EAF31AA1986C3E57A80826D3F4C58 -45B62603351C22F7148BCAA5CF013AD3C05DFCC054A146945D907C24D0F7053A461ADC9, 68E34CB48DBB00929D9BF6FCEF98A117BBD510C2564FA29FD2735680550BAB2CD93DF8AE1E6A4AEF1156A7093BDD07D5, 74FA37802F53F3682BF03F2BCA48C833A7B40D1AEE181FE764459A62EB99AE94E0D92048186717CCF2AAD7C483F6BF19 -D12272099F5468E53DA35FF16D03B07B4119F640FDE3D3BD18B1746E72E50FAED25095B, 4BA1856FE53A35E25635AAB9F080EADD97F9C96CC49D01293F6178F5B09B736C69692401143D1200CEF4E8B52C5984D9, DD8D0BBFF3E6511AA4530671F525ABABFEA2C5D4500C151029232172FDC69CE5C69BB53A2AEAFE99C8F7FCE1EE25FECA -27367561CDDFD3AAFB8EA1FD4470B1171C34DE2C2F9AB7B374A145D4B58AF2F0C76F1C11, 23C4C7322C274C1FD10B4AEEA784FA4C8A7A8E72536EAE3F8A97EB3FB1B2B8D7E880A39B3B0E4DC95F1C704F0ACE2F38, 36FB622E09A43F62A4C543488A3239F341D231115C4BBE0D7577883A109ED94B19974D2B87B6D1A324DFAB73C6DAFE03 -75A36025699F7B00F2ABE5F7CD521345549E9A848ED0271A5DE3D17E20A0D8D2564D5433, 29E716AC4CF5EFA90E79D99EED9DEEB46EC39229B477F887175C6A68CC6345B5ED1A760FBC997E6CF3EEE584679271FC, 2DAFEAD17CDAE27C83A8ACEEBEBD1655719C74495B1BD05C123254CEE24D348B0E6C3649409F391AABE51E6006E45A5C -160EA20703CDE7102D803B1E767F639CFFDDBCF8DAC70754F19AB747A61E28A7702E7FC99, A840D7F9FEB2351C3C6BF1872AC022AC068F265F3FA0D814762119C514BE0010F62DE741E466AEFD5E7F72190AF5C7D, FB0E5DF0996F206E7154411E990D83D0E73397A27FA795B814B68B344F172248B0F1B7789840B792564D83AD898510BC -422BE6150B69B5308880B15B637E2AD6FF9936EA905515FED4D025D6F25A79F6508B7F5CB, BF0DA77B49FBB8EA2BB433C8873D96485B4A623820B8FDF825A34B7BB5EA6F0C415102C6BCE038424BF3D313BBD3E7BB, 38F81B9F33DF390BA1D1001A09530E35E77F91FAA3FE35CB5C95FBE7DB45E89D9BD081E98A0A1D7250866B27030F11D -C683B23F223D1F91998214122A7A8084FECBA4BFB0FF41FC7E707184D70F6DE2F1A27E161, EF1240F5396B769ABB10781B79F9A1D04C94B089512298B1EE4A1E5073C21FDDDF9EA1106E9C73DC0C27636F6B11993, F0451FDAE15BD55E1992AEDB6D907DD0A6EEF5E9A0872BE6042F8E848F536180FD13EB71D792E0F8FA485C8F658BFD13 -2538B16BD66B75EB4CC863C367F6F818EFC62EE3F12FDC5F57B51548E852E49A8D4E77A423, F3B8A70AE9920F885DA2487B839FCC238E78D3D98B24EAB8B29F329159AB1A28557B0154C92F7268CE9F48D8C47DAA92, 7C544793B5EDD523D217EBBB4EA3C36F8075B1166C06567F6538C3FF5212EC7AB422CEDCF5B4CAA86DC9CE28E780F66 -6FAA1443834261C1E6592B4A37E4E84ACF528CABD38F951E071F3FDAB8F8ADCFA7EB66EC69, 5B9900B2E181437F20C7371C9EFB6DDA9709AB3E8320AD75BEDA3D0A2454F5B84CFB98311F0EB15CE447A395482A31FC, D16A898817F2C9FB2DC857485F9BB615A5AE7258BD5992A565FA74D2232FD754E70EA35EAA181355AAC3374B5BD9FED2 -14EFE3CCA89C72545B30B81DEA7AEB8E06DF7A6037AAEBF5A155DBF902AEA096EF7C234C53B, 3B8F1CE353ACB011F49C9064C619BAC0DCF51E18ABE28DEA414A81531A565D5BF948659CC68A92060658E8706B1254B, 6E9316CDD398FD11D8795CA47382106FD573838D14E6125F228D75F9CB9C0658E4583CE3C6A72A977C29F3F89141FAAC -3ECFAB65F9D556FD11922859BF70C2AA149E6F20A700C3E0E40193EB080BE1C4CE7469E4FB1, 6AD6980445D9CAB83CD3537B2EB1672E3FCCFAFEEE9B71367E60A47790A0D46C1DB962810D734F207A1422034C055926, 61CB8721438BAA0F4135DBCBF1FC357611944DBC71C99436874AA3CE288410C02CCBE22225588524E21794FE443C8DDD -BC6F0231ED8004F734B6790D3E5247FE3DDB4D61F5024BA2AC04BBC11823A54E6B5D3DAEF13, 16F274584C49E3A1F20AF403B4F8440FF0D6AB32A1A23C07DA5848183CFC509401EFF5114818FA45ACB81903040C2EC3, 23FED4B22E70E6EA699F33E154A861E4AC2782AEA62D54D7CA1FC5893A584CAC39443F8FAC3AFBCF9C1B07386C209D1 -2354D0695C8800EE59E236B27BAF6D7FAB991E825DF06E2E8040E3343486AEFEB4217B90CD39, 1A5825D393E1A47191EBA134E7D60FF6113489F99384AE7000844A47EF1781079572BFA26BDA0D2951C7BDA1FAC20999, 752EF2C8EAB59125A80DD0FE3C442A2E0D50A69D7E01BF0DFC3A98413C041CA449B8BAC885BCF6F8BD58C604A12B6967 -69FE713C159802CB0DA6A417730E487F02CB5B8719D14A8B80C2A99C9D940CFC1C6472B267AB, 3B82F8F2C80125EE2A43235037F5B95373B0422FA2F571B50F88EB80C2C8131C8D8B3F64DB9FA15CE443CC15989B2BF0, 5D6B663E995289465BBA3CB4288FE2931243CBBAC8B11A24B47F1C9D8796FA8DAB75973446211400DAB640F13E6EF994 -13DFB53B440C8086128F3EC46592AD97D086212954D73DFA28247FCD5D8BC26F4552D58173701, 6D23BEF6019F6DBC92F4397AF380D0BAE72D88EDE78F62C1AC8A66A5B9F7423F3A57362503C9AAC6BF098F3863BE678E, 15621BA770C918EEAC97C8EC21C98FD27DFAFFBF9A2993AD6C111E0070A2E7140ACCB878C2FD39D0D32346C7C4231A47 -3B9F1FB1CC25819237ADBC4D30B808C77192637BFE85B9EE786D7F6818A3474DCFF880845A503, 516A07F49BDDAC28057A613D5C5E8B3DE0B7D33F3DA6FA38DB282959CB5D0DEF0656CB453815DB5D27E04DEE3D5C4979, FC0892ECFD57BCB0BED19F4E9391CEEFA5867C2E497A0B8D537A5B244985A305DEF1E28BD873622A1FCC9DDD20D69B82 -B2DD5F15647084B6A70934E792281A5654B72A73FB912DCB69487E3849E9D5E96FE9818D0EF09, 663334009EEF0F5BDAC82A98842DBA6C290AF03FDED8E8933800DFC77CD1F21F47E19BE9F0E916D6ADD5458FA9AE757E, C145C26410F722906D5AF84E072D953B6BC2A07C6C8966008FD38D12D1B8E514CB467250F0C5BC0CF80D4FF056D1ED2A -218981D402D518E23F51B9EB6B6784F02FE257F5BF2B389623BD97AA8DDBD81BC4FBC84A72CD1B, 695892E7A578108D9605017456CCC44A0228E3A0CEDEC67A8A5CB219F35626A73228C602DFF9600C2481E1A52F881B5, 803E5E1E1BE9ADF9F8B30EFDF941BEB8AE011BD1C2E4C6AF07D20ACBB88E9DA82F24348AB83E3941B75A3D0008A341B2 -649C857C087F4AA6BDF52DC242368ED08FA707E13D81A9C26B38C6FFA99388534EF358DF586751, 8B86E7D53BC4234563A036A2AFA90A98A9FDF86687A4C3BD60878AEA479DA1EC10A9821CEEF5F50F4C72CD8B58D64452, 2BE84EAC8BB312E4B313DD09E302854C38BDF82A1B5E9C0907F1477D8AC09E0E1C77803827E5E0DCCDBAF0B309E37330 -12DD59074197DDFF439DF8946C6A3AC71AEF517A3B884FD4741AA54FEFCBA98F9ECDA0A9E0935F3, A796AEA61F3BB341C35F547715FEACC5AFDA9D48985E424B89251D9BF11C99A5B10F32A8FC31FF136D016E74E7C7415E, EDF583406BFB78341830245DB5EEC7F601CD84AEB9D045A6F1B0AEF7114F5B7D4A6C9A1FA61A3D4C3A16E2FA1056E191 -38980B15C4C799FDCAD9E9BD453EB05550CDF46EB298EF7D5C4FEFEFCF62FCAEDC68E1FDA1BA1D9, 4AE935C284776ACD166F4C343D5D12720C1BE8C88CBB9C7BE9EA1A70466C47A58CA7B5A2E5B8FBCAF23C0DAFF65CFD31, 91F85E4F305B7F1716C9CD45AFE07B797E70EA8B823F25721C58BD89EFE71F7C978D4B1180D7A88AD6883DAFB5B2D40A -A9C821414E56CDF9608DBD37CFBC10FFF269DD4C17CACE7814EFCFCF6E28F60C953AA5F8E52E58B, 63F40B7C626645481A5B538C360EB288121A3EEEA90DCAF7177E7DF8041655109424A7BBDE730D1E09D690855A7B4A1A, C28E69941D0632596D822EC58B9B6AFB16E303D3C63302A9BCEDD5A96E06B683E6ACF1BF544C83893E9E667A425BFFE4 -1FD5863C3EB0469EC21A937A76F3432FFD73D97E447606B683ECF6F6E4A7AE225BFAFF1EAAF8B0A1, 8431F65646F1A9FD64333DA2687925C55EAFA25A69E476E3DA1CF415A1F05DB42C4C05EA4469179EE0F90C2D70213DAC, B0162F02D0FF9D64A3F6F92C0017504EE441EA61242F1BDBDD6FCAB0EB2915B91C538D435C6D3F400315C42C60E7A4A5 -5F8092B4BC10D3DC464FBA6F64D9C98FF85B8C7ACD6214238BC6E4E4ADF70A6713F0FD5C00EA11E3, 720CB31D6AF250CE026759C170577B008337D57F53A751EF3A9FF29F89601490E5F69EE0E2344481AB8C8809ED64910D, 7483272A9609DCB8BEC8FC7127F05F6AD620E65351DF224D768740B155D7D13BBBA239B38640AEEA65D5FEF11C39326F -11E81B81E34327B94D2EF2F4E2E8D5CAFE912A57068263C6AA354AEAE09E51F353BD2F81402BE35A9, 3DF3D364A95EA24C74117A960CD50445ECB524933484713A87342B06622B975313AC26A82357C46824A50E983E794194, D8008224ACFFCCBA4A2978C20794F25215FE7A5767218CF26B017EF7E1DAB692E2A2CBA87E7A95D3BCB35A6110412906 -35B85285A9C9772BE78CD8DEA8BA8160FBB37F0513872B53FE9FE0C0A1DAF5D9FB378E83C083AA0FB, DF2C5508681B1AC68D71B67556F13BB4A0661BD8266593FB948379D2CDEB836B49B5170A9C309284ECB59929B0AF5434, 906F784289214F86A978A719108537B813E3285290705F2F2E10D617554B898F98B72286B96643D7B17D6BFCCE75E72F -A128F790FD5C6583B6A68A9BFA2F8422F31A7D0F3A9581FBFBDFA241E590E18DF1A6AB8B418AFE2F1, 7B07D208B5A058E7D09112F3A875A58D0D080BEF1F931D83C6F276F85398FB7ED40DD192F0315D7AE8DE0DD00E40143C, 1A7551F40AD14AB1911F794C368A53E6735C3F3A5EA54DBEA88D99BF4CDFC051BB6FD19185CF15ADE25859E4C82AFBA9 -1E37AE6B2F815308B23F39FD3EE8E8C68D94F772DAFC085F3F39EE6C5B0B2A4A9D4F402A1C4A0FA8D3, CA85DC8914314A4F365B1F278F28E0A74EE41E7FC277861406E74E23F6B6FC1A4BD2C3858C71098296B98CF738F47105, 4A964F885C21C5F5D39EB292D2449571D1255459696C4DC9C71CDDBE7408538E33DFB7931530F27DE203B1758AF5FBCC -5AA70B418E83F91A16BDADF7BCBABA53A8BEE65890F4191DBDADCB4511217EDFD7EDC07E54DE2EFA79, C1B9607B4E9DE23B63A46331D0C4B5AB9E6EB094EFD7552081A6B2457024209B108BCD6CEA1174282BD06B34DAF330FF, 5B1C62CDC41E849CCA465468171DB1F5484A0EC6C62D5F94DB5C2FCA5CA6D65322A6F36375D810BC5CC972185F843728 -10FF521C4AB8BEB4E443909E736302EFAFA3CB309B2DC4B59390961CF33647C9F87C9417AFE9A8CEF6B, 8B8B73F58F59088BD5E624F68B426656FC6D90812AFC7AE3D4E28F3532F218C65D21BD545D325C4B6A6BEF298894ECD0, C700E0E02F65DB161A44B5A83492654FC519D1CD37C190DA83077452D21681DF52F06DC3C4C44B830A115BEA40B96A2E -32FDF654E02A3C1EACCAB1DB5A2908CF0EEB6191D1894E20BAB1C256D9A2D75DE975BC470FBCFA6CE41, 440D5BC580B0671558717901C5D909422E72AEF58AD0CFF4A2232EC8BCD98619E81B131583F8F7589DB5DD58D9E557F4, F868CD69FFC0AC254E75BE18F5650456EE793CE63DECAD62F674CB71A9B80A010D46B5E4A9CD3FE2DE626873F7E6BE5 -98F9E2FEA07EB45C066015920E7B1A6D2CC224B5749BEA62301547048CE88619BC6134D52F36EF46AC3, BD75A8FD05141C42E256A896D747F31E1FD5E4D9BBEBC6B03AFAF2D787A060582C097329F581B6D39B0A1505FB8A6780, 9E26B1552C65DB9475D1BBA9911355EF925895C906C9C836160192BAAD415C0B1BE80E280E19A3C60B761AB675308060 -1CAEDA8FBE17C1D14132040B62B714F4786466E205DD3BF26903FD50DA6B9924D35239E7F8DA4CDD4049, E5FAC224173981787051EABC0D28F0420B0DC0859F0675E306AD76AF737F5D40821AD62B59035EC94AD2BF9A72FF7A9F, 39F695FD0A751F8910AFF1ED0C9CBA4AD1015C9E098078532E5CB579357277F29D61039650B90D3AC4BFE6C2A34FCE75 -560C8FAF3A474573C3960C2228253EDD692D34A61197B3D73B0BF7F28F42CB6E79F6ADB7EA8EE697C0DB, 2889DF3262DE61C93D8A9AC7A33E9EC88268D744788A4ADE8AD19102E3F647725C622F80AB654275CDF450239027D9A7, C330BB3D4BD5914FD431AB21612DE48893A1A3B25BCC1E9C03E926280BBFE5E5D8DD7A71449707B11B818C6035CB1ED9 -10225AF0DAED5D05B4AC22466786FBC983B879DF234C71B85B123E7D7ADC8624B6DE40927BFACB3C74291, 807E3BF550B32E277C88533440666708A429FE39EDD1FDBFEE02FB855AD4BDBBCCF91048F74A61026C44F550BDCB305D, E7B5A99A3C298578676B57D21B9FF5C0B2A499B1494016860F14F781E21FC883DBD6A5D6F47E2E6143E1BA2CF2E22F58 -306710D290C817111E0466D33694F35C8B296D9D69E555291136BB787095926E249AC1B773F061B55C7B3, F7EFDF8EBCBD56156CA8D4A9F5568481919826980B4F7E667C00FB84360BDC99E2463C7A617B6B81FA6BA95E9E88C098, 327A298A1A2306076C1CB70642AB1DD09A26502D450D370BE6D7976651839A483F015D9042F6906D595FC75C80005097 -91353277B25845335A0D3479A3BEDA15A17C48D83DAFFF7B33A4326951C0B74A6DD045265BD1252015719, CD8AFA2E883373AB1647AFD64DC8A80F61A2003B3A4ABDC2B7576196475EA14E434A874CF46A58F68396B918B1109915, 5A3BC4B19FF83A1F3CCF539475A8A4A0E50F9055E3B381D6A366F4DE1E5E15E7C782ED26E192158E0DFF52934CEE6FE3 -1B39F97671708CF9A0E279D6CEB3C8E40E474DA88B90FFE719AEC973BF54225DF4970CF7313736F604054B, B778EEBEFF27BFE361B2C919A12EE43AF10DE8A0F09F77C682917949CB68AB1A47B8D9C3B414D493A41FDDFF0960B378, CB71031FDC86DF7AC19BD60BCEBFB1B6934E662F83B41326C8247DF23F3ADBC857AD7105E9BE30D96FBF7F5438C7E1D5 -51ADEC635451A6ECE2A76D846C1B5AAC2AD5E8F9A2B2FFB54D0C5C5B3DFC6719DDC526E593A5A4E20C0FE1, 7150F2DBA77739F4177B6564316E12B6316CA42EE135DE214918C4AF468C07AEA8A7F7378689BAEFF4D334D04D418479, F5D215B075DD96B5DF1CEAE9BFB8CD5B77C1D9CE8F28E78A3B000FFB724D6F1D36F15CC6C4138BE0503FE49504F14D9 -F509C529FCF4F4C6A7F6488D445210048081BAECE818FF1FE7251511B9F5354D994F74B0BAF0EEA6242FA3, DC61DBAF71F48C4FCF89940E18949B92B8B6DD2ED84597727FC1676B21D1A6F2C317995A9F3FD7F35ADB0AAE0F17F7AE, 330C903F413F78030C1301ADEF491CA62A5EED46A7B6F3AED2D0124FCCAB7056C25582139A05EA9CA06932A257E7659 -2DF1D4F7DF6DEDE53F7E2D9A7CCF6300D818530C6B84AFD5FB56F3F352DDF9FE8CBEE5E1230D2CBF26C8EE9, CA764475D35AC4A15EADBBF53EBD3D8694B1E0A832793BECE7CDEFCFFA11E75A5DDF23CA2433BC3DED213DC364E50D1C, F0F6559FAC131174B886F2BF1112759FD0A21F9F9991001AFAA28C72D11C62807107DEB6F256A2E0EA935333380608F3 -89D57EE79E49C9AFBE7A88CF766E29028848F925428E0F81F204DBD9F899EDFBA63CB1A36927863D745ACBB, 4385C0B8DC024C0E4E891F56C58987A8DC44A92F6F1CDE15F327D66EDD3A2248D6A733A913A0139DBA833235E6A476D3, BD8B69A56D688E8DDF2E696E363F1C119FA4F9102F4015E99E37C821DD8093984D1888CDB3A45305D2F25DDDBEF2E0A7 -19D807CB6DADD5D0F3B6F9A6E634A7B0798DAEB6FC7AA2E85D60E938DE9CDC9F2F2B614EA3B7692B85D10631, F26EEA9694983171D70E3A5A4FBF178A08C1C087B5452BEF59490F688D3972FA8CF05B9DBB4DB5FC97B71EF47EFC7745, E14DCD1F6B3392DA3E2D39B93D9042435393206764228FC2E07A5A0C9D95655D5F5915551AFC31F8BDE0873A0D2F4F62 -4D88176249098172DB24ECF4B29DF7116CA90C24F56FE8B91822BBAA9BD695DD8D8223EBEB263B8291731293, 469B1D8A201CB9C63D915BA76C776B04DB67DE4A343709F8FC84C3A7569757A14C738A89D1E093FAC28D84E81098C208, 4585BAAFA636261C5FD8B417B98183E8DB4A5FC31F15B9F3607BAB58A5DAA4CDFDAEA9EEDB2C8423B53EE439D630E9B8 -E8984626DB1C8458916EC6DE17D9E53445FB246EE04FBA2B486832FFD383C198A8866BC3C172B287B45937B9, 2224A5B8D0E6DF5C14303F40BA3FEC51120D078CC9E2D3E085FC2E002D79344B5432C0D78C179B5D64B3D26C29E943AE, A055CF02A96E37559A219599FB3DED8D753DD9AF7F2DD3073D6D60DB00593058C12430BAE9668B7F5B1F3C7247121581 -2B9C8D27491558D09B44C549A478DAF9CD1F16D4CA0EF2E81D93898FF7A8B44C9F993434B445817971D0BA72B, E97D762CF98BE3BD1D4421FAC2EDB20F4E84E6D938BF969AAB005123AA6FB407164013C9C33D9983D11D14BD922B7929, 31842B2BE7B7F860187A6D89515656872296A3E190933868AD6B27035F6B8A5FB7701923243A802D4E9625A0209F9CF4 -82D5A775DB400A71D1CE4FDCED6A90ED675D447E5E2CD8B858BA9CAFE6FA1CE5DECB9C9E1CD0846C55722F581, 25915C50000731C1EE573D1977A5B8CC724F0663838BABE67EE11980BDC2618AE387874403DBFC0D3AC4D0DA4CA078A6, A3B49BFEC66C5FCFCAF2ACEEE28A8D01F4D57296AB730B650F488CA03BB3C90E758BF6558DF5D9183920CEC2EF5A1A7D -18880F66191C01F55756AEF96C83FB2C83617CD7B1A868A290A2FD60FB4EE56B19C62D5DA56718D4500568E083, 68582E393203364311515678FD8679A1778E6EF1D69EDBF93F45ECCE63B6498501ACA1EFAEFDAF7433B3A3FFB6208CCE, D34FEF465EBAE7912B706EE27B62BCB27D9A44886B3FD502BCEE62F043383335D1A1209B5932CDF9EC4CB31B0E154E28 -49982E324B5405E006040CEC458BF1858A24768714F939E7B1E8F822F1ECB0414D528818F0354A7CF0103AA189, E319DF8E341DA59683C28497E8F01110A036805A0547AC8F0550A5DC0A98A315C19664457B517FC68BA31E498A593FDB, D28C5DCB4664862FDEDF90C3C9E1C0E187D79F2994F7D1B24E1431D5D037A69D65EF285EA3E690474B6DB46FE06F10FC -DCC88A96E1FC11A0120C26C4D0A3D4909E6D63953EEBADB715BAE868D5C610C3E7F7984AD09FDF76D030AFE49B, D904A712CA3DE0A765BC1E4324D6D501B1E34C0C8223D8A51CD12BAF9F6EF03F3D02BE88AC5A9645C1C91B132E2D8EF4, 25F54CDE887A4DA40FE21141E431B0C4D4985DBB7FEAB4B7FB2070AD309A78AA21DDAB4BB1A34BFC4F29C47C5F1A9E50 -296599FC4A5F434E03624744E71EB7DB1DB482ABFBCC309254130B93A8152324BB7E6C8E071DF9E6470920FADD1, E1030CF841E5BEA460A2BB2BD04162CAC55629B2424D04DC0F653EEF2D139BF86EA6E885A8B7BFA30114FA978733FB26, 6A4AE9C945427E1CD30AC2C2DB4CB0793DC9A1FC31A587EAE1FB86DD800A3758B4C44C3013F815691019DE1EB343B716 -7C30CDF4DF1DC9EA0A26D5CEB55C2791591D8803F36491B6FC3922BAF83F696E327B45AA1559EDB2D51B62F0973, 552AC5C872630618A2DA71D90E05B80D707262AFFD89B7BF1379911B43AE303EE4796FD4C11D9577D20A78D8F8A07670, C6EDABEB5325FAB19B27AA2692CBB58A4AF57642C7E35435EE1A118A618C6FF921715D62FE85404A341877F6429BEB31 -1749269DE9D595DBE1E74816C201476B40B58980BDA2DB524F4AB6830E8BE3C4A9771D0FE400DC9187F5228D1C59, 22541C181BEF319BA4DE0F5A38E5E3AA178683D7359594C9834A698B4882F8EC933B0C2530340861A6458ED7AA3E30E1, F10BADAD71BE09E1B9DCF0D56C22CF5C0AE30DBC3293B97C9F0C76F0A209F72F33CA699D0E24FBBA50F8E73440C920D0 -45DB73D9BD80C193A5B5D8444603D641C2209C8238E891F6EDE023892BA3AB4DFC65572FAC0295B497DF67A7550B, 702A63CB0B2FF15F9319DA8A4CDA259AFA8494CF9F1447B743EBA7EE13BF717754D0E7D207B86F4B1D3E1673022ED9B, B21CE14F336590C7B851224E5C2E480932792034CDD49464EA85C8AAC6FEBF2BE68A7B7B7ED28166FE99741D9456A47F -D1925B8D388244BAF12188CCD20B82C54661D586AAB9B5E4C9A06A9B82EB01E9F530058F0407C11DC79E36F5FF21, AA9985D7AF3E2FB935029511CDEA0DB144B3D8D67E523E98E23E2AAC3469B46DAD414B4522DEB39EC90907851C9D3CD6, 6513494B1E10AA85D4DBFE8992F61A1140A1E7D066DD0C2E7C5C34DD8AB649D31A555A41CD06DFAC4ED92FA325FB748A -274B712A7A986CE30D3649A667622884FD3258094002D21AE5CE13FD288C105BDDF9010AD0C17435956DAA4E1FD63, E8C81D1BC1C3FF2CCEF60F5029D4A63BCD22FF762032AC65B302A0445F11A2EFC60E46BCE00D714E0A246276E9706428, 7B5565840FB95A2D76313483E2DCDF4B17F0F37C6E67B9A998937791323A310D3E75C30F8E40273544F0ACEBCAAE4F9A -75E2537F6FC946A927A2DCF33626798EF797081BC0087650B16A3BF779A4311399EB032072445CA0C048FEEA5F829, DBD7AB5BBA5A5CFBAA7A1416BF065B07B7E3325742AB9BFDCBF78DE111FEABB9F04532FE06604D6056CF61336EE1750B, 66A3559D318D264DFEE5DF77CE521A3F53857383B89800757866D78B64173F1C3F24206DCB8905F5AC0E859ACBB71547 -161A6FA7E4F5BD3FB76E896D9A2736CACE6C51853401962F2143EB3E66CEC933ACDC1096156CD15E240DAFCBF1E87B, FA533E8AA1FC1203A3C8D8E9A9405C71699B75EA71CE0B1246ECDEB000B1BB8117A1377EBCB2A431FB63F4E0D90CE06C, 23A480D5A4C528A8B9A8D790A03D9FE76D9CF8DA3C5370C810B62A1C6F28A0169B3EF0933484DA685DCE40CC5E2D6607 -424F4EF7AEE137BF264B9C48CE75A4606B44F48F9C04C28D63CBC1BB346C5B9B069431C24046741A6C290F63D5B971, 8BF66C05DB5448E6BF481285A14D38ACB18740BC28FD8F77A2CB3049F894F14F6565A0C2E7DA29E387C191B5E3E19D43, 637CEBAEFA425A2C23E6167589A0D68DDE19AA465F59A1E08C46A64383A1A4703FE0510ACB504CCF2129479EEA3ACEE -C6EDECE70CA3A73D72E2D4DA6B60ED2141CEDDAED40E47A82B6345319D4512D113BC9546C0D35C4F447B2E2B812C53, 9F776F4942E963364B571CFE0F2743030869C03A56D35D0F3928F43EB2D9A2179A6D3D4F2BACDAD96F3304EF7FA941A9, 5B0D270FD2C9BDEC2871510D56B5386D52B2B0911AA180EEB027802E5A25A88674C3CA0A42C204E73411877DA612806D -254C9C6B525EAF5B858A87E8F4222C763C56C990C7C2AD6F88229CF94D7CF38733B35BFD4427A14EDCD718A828384F9, DAFDCAE4D6C475716EC405C348AC9A2343D5D67F9B10082B4D3E2675BD85E32785D536C13BEC607D41410BAD609742A1, 2837910E8A7C8D3ADD8BFD714FF5730614698C4D32B8A9828C42C28869F90254DBEF41A5E43B71E78A2069AC85B05666 -6FE5D541F71C0E12909F97BADC668562B5045CB25748084E9867D6EBE876DA959B1A13F7CC76E3EC968549F878A8EEB, C47B4D6351C30544BE020706A3713B8C9BD48BE44FECABDF134B45AC705B7AA5E1D2E0A4C5CEC413591A93D5134AA50B, C9CF3149AB16FCDA4CEE3BBB757AED324007869C47819656EEA647EC16F896C9919E7C58624BEE371C8D4097A204E42E -14FB17FC5E5542A37B1DEC730953390281F0D161705D818EBC93784C3B9648FC0D14E3BE76564ABC5C38FDDE969FACC1, 4D466DECA0E5F2C664B1C170485D0435CC913B4CEDCB8904E7EC68025C5E24F54250FF8EBD1AADBA575CAE796BA20E32, C1B53467F914F7BE0779A44AFC51735B26B644A1ABAFF7027BF87BE11FD80B816CAEB33C735ADC55DBF4C2118608BA58 -3EF147F51AFFC7EA7159C5591BF9AB0785D27424511884AC35BA68E4B2C2DAF4273EAB3B6302E03514AAF99BC3DF0643, 186F34F7D45ACBEF7F7F7F93C57758A2A578981E9939AFA22AAD14879905E3694737867BF73633CF9F7E25C6A598FF24, DD0B1F68005D3588418D13E69D343B10722C96285A12B139049B8D3E1644C2F110D36BB7F919BC40DEB99EAF443D3482 -BCD3D7DF50FF57BF540D500B53ED011691775C6CF3498E04A12F3AAE184890DC75BC01B22908A09F3E00ECD34B9D12C9, 8F6F64EA2755FDA51C99A50B57D7F438DA05A117322884A8F7F7928BA92C78310EF578005B1FCC2FFCFFE79C0802B2E4, D32301BC33B7B167EEAB552E05A20AF64E86E65986D5961C9E9EBF56F4D7F05D428EBDACFAA30907C50D18E3E7F7927 -1.3.132.0.35 -1, C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66, 11839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650 -3, 1A73D352443DE29195DD91D6A64B5959479B52A6E5B123D9AB9E5AD7A112D7A8DD1AD3F164A3A4832051DA6BD16B59FE21BAEB490862C32EA05A5919D2EDE37AD7D, 13E9B03B97DFA62DDD9979F86C6CAB814F2F1557FA82A9D0317D2F8AB1FA355CEEC2E2DD4CF8DC575B02D5ACED1DEC3C70CF105C9BC93A590425F588CA1EE86C0E5 -9, 1585389E359E1E21826A2F5BF157156D488ED34541B988746992C4AB145B8C6B6657429E1396134DA35F3C556DF725A318F4F50BABD85CD28661F45627967CBE207, 2A2E618C9A8AEDF39F0B55557A27AE938E3088A654EE1CEBB6C825BA263DDB446E0D69E5756057AC840FF56ECF4ABFD87D736C2AE928880F343AA0EA86B9AD2A4E -1B, 160373EDF8218F9B6A762A4D4EB889E646F8739535D0E4F862C33F35187E135854D80B2123DA719D48351353AEDA0D3163CB215604492EC4568357643017002D68B, F1597050014DCFE1C5E5828401AC06A3FA9FD193C5CF52C3BB4A56F78E1A1B22011EFA491ED92EBC5413B874F4A8BB572E463FFE709D45ACB3F3E6AECA5D90B740 -51, 1D1BBA380289A7726BBCD7D76D6D63469CC842DE44D26646BBC45381FD72BE7EE8109F67171227B5C923577F6B0A4731872575A0B029A7B251E5A339416299C8AE0, 1703AEE0F7AD8244CC35BD69E91C0670F3E541C9CE6E3529B902A980E93172EBC8AFEC0368616E1E23B04B4D5DFCA8343EB93B0C8870F7A6662EE1B2160CBB90F01 -F3, 1CB253227B37965174617D5542FC0CA5EB142B4BCB51BAF2D6495008BF2C90BD93043A7377A937E1050B6BB117A81C461A34B14C0832AB26A2785D76462ABDC8B2B, 12FDF35A935AB3008E037D84F5B637C7A745FB21A00884834C9804B4CD3BAC49C9B1DE4AF315EB36E92E1E4A4AEA8351855E70B0BC4BA8904EA3E74E2A5F2ED15EC -2D9, 189607C1793AF3818DA32FA2F94A468BA69B3EE6EAB818B69F889101494155F9516765A8EA7440BE2930179D016B7DF6BB0D89773B072CBEBECFDCD196A56124DBC, 20FFF32EFEF92D8A2FF99E29C3724399CA1B0FC9430F672B5A82F7494787E4EF0DF0727CAB8B82250B0CABE69ABF34CBF4B194D03FD99CD85ACECE083F2B34E9DA -88B, 4E5EB103B19BBB84C89641B7E507308DEDC56060BFF03325AE009A4142D11438A3B2EA22FA8743D6B4AD2CEDB2F0578C98FB6FA857CE3527DD3B746316530116C3, 716F68F81916580A647CCF3036F3C8140D60A63D105B91AD0173BCF6F84CE0CA1BDB1D4049BB7263BE724FC920208014BCF75404D3300C1CD2CACCB07478308AE -19A1, 1D2EF46577B66170D9EF0F1F1486C3E7DEB985FEE76898575B630042DEEB54D8C3E934E6DF77FA7681CAA1AFC7A7C23053E87086932F561BE9B25FF70318BC495F2, 1B0D12E74EB99A8E16F0AFA3BB928B75D2B03E2889F84F3ABBCBAA77027198D5B8E2F72B6BF16937AE709C3026C74D26F2BABE31CE6E0294439928262D66A4AACDC -4CE3, 531C9ABE51563C7C779E89BB2404E00B47891DE3E465286B5177274B12285AED14935FFA8229705B3BD523C93421282EE4C544050F49A79285C61F8F311BDD0FB7, 23B671A070590887AD3388D92AB2FA6A0196BA044186CEA279BE939CC13053702BBFCBE4A8CBCF162D80DDA67E46EDE513B57E5B7D52FDBE040A91C497A2F35CE8 -E6A9, 1EC7605CD3363B524A70C0BC1A258A53FE8F61A982FA3E86337C2B9AADA6C3683717982A9546CD1CC02FCB1F1EB9CD45D91DE8CA29E61E8A88323A6E237A62A28EC, 17CEC602FAA9164AE7D8D342FD9B8A47848D1780F92CB00C221E3A32424DABCF89EE805D1BFC602BC6110012352A15185CC5513116E370B46057A8DF61D9A60F3E8 -2B3FB, CDD2F0F3012DF190BB260CC871FC42A9F17979A329D683503E59E7D4776D8F10F62C390E045D847E7FAF9AA1CC077CDABA6D87F4B1125886F25AFC4D6309199F5A, 417903A05C021068B2FBB9F2009317DC0B51D8A5A1C89B9824D99089D0958AD488C1001BA16E75873ACAC17E0CF711856929255B40B93CB2B95FAF77AC3C8EBF7A -81BF1, 3D8825CF08E2EEC0FCF1BC392D7019ED417E5DDCA47546B14A82F8D7F2EDB9D2DC774C0AC9E9F5478FF1CAE8CCAD02E00A25B8D8179B812D14FBEB962169397004, AB19E783633A89835F7389184681A605E6D5E4E3E9BBD55792E1F05A1EAB5B0F3F72F7333E659AC5EEBEDDB0F6D3E80922C19427CE4E391AAAB8F709613EFAB86F -1853D3, 425EFDBC284A04B79521998BD8199C9C2CA979A33CED4D78A27320B04BC460AB5F504FA2A3B85B09D709B16440BE80DA6391F448C134C2FA99EF5E7D6B0311852, 5B15B0C9DCAC88A1E0DA573948D3E637AC33B3D52B5C365B5F56ABF002624FF68CBC554C37706F33AD005CF0D2F07122AD3A35C8E80389DAFEBB5DBA489A1474E7 -48FB79, F4666458E61E777A01C5CA195BD0BC48C3BDD5F2721F624C448034CEAA54638D8574E56DF526A81CCBB4652BA243713F659B1EDA90CF2D7AB62BEF511B665F843E, 19450B9BC802D91034E580F9568EF80B45DA1F84C1DB1D1D55400D3D3CEDAF64CB01606F3D1EA3C06A5975B09E91173E1573C910F84A98709EBCC9ED1386687D3F9 -DAF26B, 130A85002F8B5DFA04E6AE28359493A64CEBA9CC6E69F799FA502A3E07CC534D9A1E7B3758B6A3C4F95088E03AA1619D778C833EDD1FBA196EEB6AB19FED3D64486, 18233CAC49290DD86F4CFCFDA74A217E141497EE6D3EFCCB1B32C46802AA3ABDB2CDFD3CAD19705580A2BC5C03D42F444AA8B9D98A51634F3B5DF048BDC17D633CA -290D741, 1A55360AB86673AF294A626616B918EB6BB916E45179AE4CB70F5981D71C976BCDEE1979FB76E3F8B04A60D1823E697D7C37168D34EA018F08A79CE901418186E26, D3ACA61B48D79BAF9BF060A0E7E1D9D99C8C1CBC3DE7F8E976EC0786A8075AF407C9B42CC9310D16CBB493CCBC8E816F6CB650C1F8FB5843E5BB43EF79FA639B82 -7B285C3, 15DA0FAD97C5664A014EEA2068AFEB285536825108BC34A61F087FAF171A99D33671EA45F649A5DAF48F34EF86D9808AD8C15FB1780C15399E1E4BED006E11DA035, F78B2177D18B6C6C5FAE8F0EF19C8FBEDB436A41E3495B8C6D0D7FB1FC714E946FAD13B2C1D440C6629C2CEF0766E5A159321C696603B575489CDB5495E69BD8AC -17179149, 1BA1C685592B7F42D16E61C809DAB11F052F214BE908009B25101E39E52F44FBFD0D28E679DF4B830F75A63FCC2EBD52AE1F74345E281DCAFD3C93F5F9F939788BB, C4A69AB266A89B3ADD952780C9B744ED9BE8FAD135579ADBA4E1985872E17A44EC68A34B179E2E5DD6B7590220F5D7629AED0A51184FDFEEFBE69754528F441359 -4546B3DB, 12AAC7907677FFC2B0EA828F9B62CC1D078295332C882FEF4E8D6D83D9774C84DDE3CEAA863B36916728CE0873CF8CAABF1122927922EC7DD748578DD1430F54936, 93DEE239B6A969AC8697F2E66DAF6D86DD382949FE36C628232FAAB7F8ACE756D35F8770B84C0CD91740263801B86EC85D84A707DFE8236920DAA0DB61DB0DA21B -CFD41B91, 1BA7B15DECE55F529F1860709D825B96A0DA2F1B10696EA1411B83E0B1A60AB48419D6332525140733F5A39EC66E9A7E6041CB291BB4A650D28E12E60901151E778, 1124E66E982013045FCBF3AAA04CF16E919DD9584A0ADB75B155569F037F037C9E463B4DC781BE70FCE6E4FD6D064A03DAFBAFB2F1B3BF98AC081A58D9655BFE3E1 -26F7C52B3, 1D5605150C9C55F2AD48D4DCDF57D783CD0FB107F899ACFA8044842BD3EEFF0E14C35FD9D6AF8F5C8CCE32652A44D0485F64D3BB2272B478A4052C07CE083645ABA, BC7178CA8B9F702147D51D9C227AB4ABEADC91CB315BFB4FA0741CEA14A1F093CBC1C9F08070E03E5A363ACCCE3526B398AD79A19B98907C4E83D2F020A615D836 -74E74F819, 881A1909C05C38ABB0B34FB973B0E7F2E67DC887E27B3CC5233F8B4537656DB0B174F85F345B26B26F1691A1C1308E1EA8A3CEEA5957566AC29923E74305027B2C, 1E266B9DF37F657891919442B7AA3BAD7918D1A5BE12CF04057DAB9F2A0548A4473C6114955AED0ACC4E193E185F762F16C8D135C43059083EFDF8FD2E04DCD7BF9 -15EB5EE84B, 1869716D001DAECCFD6765136D256680A68837DC68F2BD235F1A1AB286791F8488373122C50CC598CE10B86845BD722AC0ACBAE9ADFC3A75B77617AFB6481CAD729, 436FE2AAC82F0FE513573C6F2484FD302A46B3D4827BE3B71A26A909479436C9A58D7510CB4FA9435DB86EFB17230EDD1CACA27445115E7B061A62A924444D4B7 -41C21CB8E1, FE3826BD84AB28E075AEB1477999DAF32D238A95CBFF442C09BD1B5EF9447BAE6798F2D8F6FBE0C71CC18F1EDD5A0254D966A6AD84977B88D4C96EE48EBD457AB6, 98C16083605208DB3FB220383B4993E15F5C150B31386642F0BA05F8997713A9238E599628E12BC5B8383E658063394A7C20B0D24C4F7EE5294ABA596D5445F1C -C546562AA3, EC6F7EDA0EB724FBBBCD1642B71BBD0D40F7FE2E47D31C7D02A7AEF1BF89CEFC184B2B6AF7DC8AB5ED0520239EAEB949BE69BD467F0AAA56369A2113FFD5793B76, 846058E5FB3C6F251B6104B0CFB3874CB2DA880F88C48B4C454B1793F0683D21944ECF45D421FE165BF43C1F071FEF68EE89434CB7D540D49500747877255F60F0 -24FD3027FE9, B382CFAF97D0624BD9EB280CEF9DB56B0486194A4CCBAFCBD85AEFC95A12CB624126246F01D1540EA22E94779CA825FFA1DAA6178AC1304F86475D4BADA8D367A1, 1F2BA28968FEE1B6D87B34588AD9636ED261791F2DA1238C5D01A809A01BDDDFBA72C30526542AEF9AD883722BE392D083309705E1D0B79A36B7341E165E3C11B55 -6EF79077FBB, 1781C76DCF27574470E3DD260059BF8A683C7B035EE47DC890A0F22574D58165594F37D2D0723C39C72ADA10E51E5081C60DDBD167AB620CE3CD081BC4705A6D837, 45B969A054784E6F13E3EE16180E1CA0A8D181421D99CF8893A5000435456CABC0DCD5D2369C422D87018B15A81BCB33203A2E48D366D162CB5F4A4EEF0B4B0546 -14CE6B167F31, D3FED2DF278619FA7A3859FB70B813D86E67657BF4E7E3E95D0A8E7B018427BD5F105B54AF8FB6A72E7D8AB8BBD828E5EE05A535E8BE183861163DB1537496F9AA, D8157793E51CD1C45AF217AC773ED035065C5A3E78AD7B14890C66F2403091E7CE1DDDD95970793209CDF9227668A7BC620832D6A8CF8FD07787B1C5E62A1FDDF5 -3E6B41437D93, 1110B187C53AA1B25912B804E1011A16DC86D532691FC2C749FBD2071CE687322798D50FC7F3DE67A6F150D4CE081077F872532FEFA87CDA9A64090A9D96548AB23, 1345A97C14F469E58CB8B9598CAA1E4335F3AEB9174F57BC8D12ACB74995A881A5D4215D834C71CBA3B7EAEE8990AAE324E964A1FE99E4EBDF39D0E30B013E23740 -BB41C3CA78B9, 7EF65FB33141FC3CD577E83C6DD24C9960469C1BA9F8939E83C39E0C561A61C3DDB78B6709FFFF0CFB7300E4149D65554F154D5AC9401C6E6663D1B19B245DBE43, 15E0841BFC562819CF29F603B16F3B4B6ECBFAEA980FA99CAEBB586020182DD2AE3AD469D8E4506A620A261760A08E89D7ADFA6303676DD9B2A2C356A07A21E7558 -231C54B5F6A2B, 5C3F8CC55F447AF2EB183605C74A82F3C0503FC590C286DE08377DC1F84150692145DBEEDB8D94DDD70A2E3DB7C1B20052D9A38A14BF0EAD75E1AB7D96A541DCD7, B2E19C85DF2FA1A6D189A6C4F8F8691E3A535EEE83BC98686A80C6FC5E941AEBDF187964CB68FE5724FE84B51B5B14ABEAF7B9BBF4E9112E29A2F03F83A51D6777 -6954FE21E3E81, 181F180ECA59385A1C1CFD5D73D3D0933E21C3718F5D1EFAEE38A87731B9E337C61D4C1DBAC9FD9C817B1E0D748EC2B54B396C14DAE674D51F1D007A3331F1EF76D, 1A04D11D9CEF25742E0732AFC481E1D86ED617252BBBBCB2BB9E6441167EEB9F5EE4B5CB9DE320C12873A20CF3F9DA34658B3054E17B30939612BAE9FAB3A4572F9 -13BFEFA65ABB83, F09AEB4174243A39E411251C72FB8A141F53F78F6437A92D9F860E7773B8FA2581D9B925EC5AD1A523AE5905F7413745F52A7D8159BDA1C696829F251AC2C87D51, 1FECE716F47B3CF77F2C8564FD0EB11C8705635F31A9B9F456FAD7F7416D2A21CC59AAD8E3A7340F1097164E467224E7553A7C81A279187B08BD8797080334CB642 -3B3FCEF3103289, A4849FFBC7142570E096397E16381C45FCE90C3940F5C506A6DC4363D1A8491A13357ABE330BCE6A9764B8CC517D03038046481FCF18A503C5D8D5BB047311C816, 639FB120417256BB3CE1D55C5F5797D3A9BA21E9E2BEA415536EF6548C2214E80D3D81620702E7EAB848801A408EF6BC9D48C4CE90FC68C80566305D88835E6414 -B1BF6CD930979B, 12C0838ED0101EA04C5AF21B09C2DA4B3FCE8DB0067FC42ABA1FBF319CDEBF33A384BA9407A550C22572FCD41204B4FF01D65E29B9E875970CBEBBC8E6505849783, 1A2D863319E3AECF20C3E9D6F60624A87361177A696D77C559C3EF166240C6B849A986D2BB5214AFB3C1EF5DB60CA5F22A4DD91B0260EFDBCD947536D634D6E17AE -2153E468B91C6D1, 54B1388159170C0C7C4A6ADD5FC41C74FBB1EDF355ECD1D872F9E9582A00D320D0A9205FD2673D3A09FFFAF58C96FAC65527FE5796FAC796371D81502B93FE455F, FAD84EE0FBF823A557B8CA17B3FEB79EB50B631CEBD7C4E43A3362F36DAA89AE7AA44E49459DF34321F7AC9AFAABFC686A00BF2D783909653B3BDAC7593E8E9E01 -63FBAD3A2B55473, 1DD666A051BBAD5E6EB96883A55A9DD77E63C201AB1A143512B774076D0C40AB4F0308D6564CB63D73CDD81DB462FB3C17A57BD33E3B26D7EB96BC2DBBFDE96B260, 50893602BC1EC6F294B5ECD39CE9D1840739C096AC7C1D8C1E4453FA1BAEDD0B18655FF725E6653FDE18EB8FBB6F4F63335FF2DD69AE98F171DCFBF146B86BA08 -12BF307AE81FFD59, 1DE0E9F3E035E3F7D564C189397C21832ADE29F85EC8FC9B1D008871D6B4EEBC84D358C704CB4F7E9D12B909D458E218E9A7A8CFBF1D2C4044B6034EBBA8C477216, 10B2ECEAA69F5F89AC4A7B90EC5A0D8D43613F8E281A63E0727E5B08230689142C3A4BB826F8601CBFADD6282EC2929668EEE0B97995AC796E1335AC32C1A8D419 -383D9170B85FF80B, 118A8A0B98A299F5FFC7CBDE5D89FFB8AD7C24832DE083022DAD4814F3C7A73959F77B6DE807F1DB1879DA1BA9BB547DB38BEBF82707D6A7E66F586B2052DAC77BA, ADD0F1B8DBBFEAD35FD7C4A9F3F8D2076FE42BD91740915B76D090FD31F8AD3365E5A028AD20081EB78B526AD36D46321AAB2FEDC68F0EA3961B699CA015B412A6 -A8B8B452291FE821, C23FC4B56C816757ACDBC3F53C21CD67F660DEE23A06A95D8C8EF751F0060951D343780FB576AB07CDA6B2F68900D6E97C6813E8E3BF40B3D0BAD80909872228E6, 19AABFEB7C4295A5619C5590F209DC72C957654058104E2B0AB4716505C476CF221E541E0264348285961D3ACBB3B148993A06578DC94D7CDC9793C7C2FC8714BA9 -1FA2A1CF67B5FB863, 1FD7232A28A4A37238C080753E6FEBDA89A14C9C44224D77E8E89187C3912EAAAD59EAC55420158B02C1290F665F7DF4BA66D02A82BB379BDBBAABC4315B1DB3BA8, 1909AC430FC4A553DD7285019E0D3627062A6B41D8AAEDAF0B907E2BE68887A568D7298795A0C9470ABFD6ADD29E62AC3B690774EF7B1291A05C61D0DBB47B72E8C -5EE7E56E3721F2929, 1EF6594F94654869B4EBFA95DFBB70B9C735505D45833E17F6DDFF6B02B1C560CE8EE7F4E25F7C1A59C167D6F39573A9A4808BD555C8E8ADAE7AC9678DDF5DFE6E2, 1A47987BA40C43D6A93E5FECB0304973D2EC8E27972524E3E95FF7EB3E1857988C1D37CE6CD9D7E5908919869B8A140FE780CF4EA803FB9124E0BE12E1964B6B9D4 -11CB7B04AA565D7B7B, D25637FE03EF4FF9A71BD0594EA52CBEBF4F16B56E82C566530B0D1C7056EC19099EC1480018CD144D9C91426BC022715BCB190D9BBDB5AC1605B8A102A1E2F63D, 58BB79C16C10D2FB237EF55BB3401B4B9D9FCCBDEF3683C2F5431D4614EDEAC1FE29DDD23D58DD819F2ED64D9E6FE95F1AFDC3C17F70E32D156B416E6308F8BB58 -3562710DFF03187271, B678885DCBE552E09F2C2B9CCD040A76BE73D101CDFF12C1F38427F0B563F2213662D281EDFDD0518E93871490D3C322152B8B99FE156C072AD48A6F246FCEA43D, D98172CD1094736AAA947CBB22A4B9C7CFE82037B816ABBCC70AA20B26B2781AAFD3B8BB597140EF417405AF726F8521918A7B14537480B788DDF7FABD535B4EC4 -A0275329FD09495753, 10F8C57ACF45355ED2C38E40BCAD9BEBD2020CE99D2F445BBD1B2A5C2E9DDC8DE00A6BFB51B85355209E80233075510134E8C44576FC3F33C9390562FF2159DE058, 52CB1CD6F1AC84252B5A69AF5168E00C299C359440CC8E1BF03C49B86CE88794F64DF89563D979F68A166A079A7FB01CF118B46665BFE9C2082F57614D9B48F163 -1E075F97DF71BDC05F9, 45FD2500C1744A0DBB9A28A832FAEC3AE568A8E77E4AE385FCDF45890FF826FA1660018C246E51FCDA6CE0AD7E7BD1C5B9D586495D1D61E1AE1DCDCD2F863A2305, FC6B68E01AD52855522DFB440A5C46171F69047C164E55CA6EBAFDA5908155B166652C487B4024D5B4687F973D90FA1F9DD3F433423583B4EB1B184C0E753D76F9 -5A161EC79E5539411EB, 1496D321897B3869680DB0EF9F0036875B21F27B73E246377ADBB80164A0C8F7AED5572DAF12679DFDA0301B50C7FA50E79CB410143B7E95051ABD52B3DF7944FA0, 12E3332B48AA11E31086040E7B4669F628F17BA333C66E5B4F0602C9348FD5B59333F266A17E7F8185387E4B1B1799759D51DC017811B4E9FD37A506F8656D3810E -10E425C56DAFFABC35C1, AA821872EE88279B74988466C480438447B0B91B8660F1C7427E2A23CC66008E29B5D9AE999C200237C380034E5CEC62C6028DB0B986465EE01EF299FA4051D06, 47871E7FC41A4520303091E7077A820351A6ADDB9B55F75DA39E6C56404EB3897BEA59D9BA933E64A434ECB010256E33B564303B234A8B18ACEBDC9050909228A7 -32AC7150490FF034A143, AEFDEF3E624447E87789B37B9B355B51ED382F62AF2BB9B01722C3D110FB865328AE5973CE920E5BCFED14E6E6FF3369F59F0E0B0DC8C2595B97F3093842BFDA89, 11C15F166282F692177A8025ACAA1E27C6CAA771523400634E083DDF03622E6AA0FE32C97ACD80F74A7AEA83E3C1C46620454F19DC44F695692CFF8C9B5924EEA5 -980553F0DB2FD09DE3C9, 82CEDE98FDEA05EE814A7EE86F73EB5D196FA0529C958F8ACC5DC65EA8566B0D6A7A069C906803C812774D92EA196403326F5CCD84A6E07EB5DCA49D8457017971, 8021ECB6CA72FAD06B69A0963245C26C9D5782ACB28698E3A8ADE1DDAD20C0A3FB0ED90EAD4A7CF0A533AF508884358A6F709F34D9244BAAC40FFD44B6B17EF00F -1C80FFBD2918F71D9AB5B, 1079E822EF5B40CF8050214A2AE16F24F115BB98C379D1D9718EAA33EC9F8FA94C05C017CA59117D2AA5210982D579889C675D61240DFA3C7060C85730DEB36CABE, 133924F6747F6611A1EE66B2E6FCE491EE18A6BF11DD6C56B95AE5E2A96D3DDC9F22C0C3CFEEE18249A5D8078A785D85A271B0F8A6DAC66C440BCCE6A4DE320AE78 -5582FF377B4AE558D0211, 464C7F0BB11C4EFA309221BD9F617FB5C1D286AFE1AB1CF01B8FE713156FB9556592DDF1FC67FD72C382414CB4366E5E17A848928D8DAAD48D1B9D58F410858460, 49D757F4B9D5993E0E7516AF45DE7EFD76E6D433B7B73F90F669ED0084C456F9181E6925BCF62036B9A9CC9E2836B8A3F91CA4E5464DE749392C4D159F681CE6F2 -10088FDA671E0B00A70633, 14395C5F8FEC4BE0611A13208FA0A51884B9B64134D0D490DCD3E226818DB25F60BFDFCAA038DE5EBEEA261832450D85736AD1F5A353E0324A905B004F1175565F2, 1B99F4AECF9C15B1D09195840400CAE567D141A068140DCC08EF11BEC7259B13518FF6786354D09859A04D117E94E76592918C21F78101035F3906232E164019DD1 -3019AF8F355A2101F51299, 1DEDEB355DFB25C0781BF5B8D9DE88C9DAB56DB998BC5C6B061AAED98EE95132173E81FA1515AA8540150E1B6BB80BB696823810A0F8AD17AA41EF6FE3786C91063, 11575AC1A36A174FC9103F22D997C67C7687941093A22E83D04D889A0E4C4228FD13B01A38DAB15CCD7B49E219A6697339C856F72BC99870BBD5EC2DA02C5E50839 -904D0EADA00E6305DF37CB, 16F5861E70F20A1F80908525058B17696A11185F6544C78D4F30258816B2B5DECC7E26B333D31E29DCB26E7B155D34656BAEF5C9D9C9ACB32C5AF0C0571BA8627F4, 1FE3AA95CAE6D2DE7A1CCCDF28F249FBAD507CC03533C992A291429AEE0CE1EB8396F4F960686CA6351C883E5A93628BC28DBDEDBC9CDB89D92ABB6F4DA6D736C45 -1B0E72C08E02B29119DA761, 4E45FDE0FFE64B86818146F92783D1E967C8C4BDCDA44E8927D72F269AFF5F6DF8F4BAD6CE3B2A722E5A1DDD8AFC048C3D7CF02DA3B4C71556D6F2F82C207049A5, 125556AD32950BAAB4C37676815F498FB270A292EAA3C7669A0D13614772C8DBB052C6EA9E753E58E9C65F0D8C4B54A58CB1F25E0C4DC167B4AC0942BF1CC5F0C9A -512B5841AA0817B34D8F623, 1EF25525912F28BC6F2B321C13B7D27237ADE5851431A190C619015DC3571360B3E76452A8A904532512F1F210509FA8EAC2D8E9FD3B6B81050C2026E63CCBCBD78, 7AFB8D42BB5B56C73B38A43015354E85D9E654821E3756C2F57FE1B3206F8BDC693EE96C1166B237C90CE9E9B65A49F1D2CAE4BC4B9A10AC94EA0B505BB233CE4E -F38208C4FE184719E8AE269, F33D784313B9EFFF097C88DFA87ED80B1BFF56340832B5BDAB35E0BEE1D73BAF183D455C977BA643E42B218400FC5B389B1CB9A55B9FAE1D2F66C261EE24B54567, FF1D6CEF8D0E6AAD96D5C9CA827054937CF40AD2F68FE277436E4966D04B64FA071A56B058CA38807C61C5533C9E6525C2FB02266BE222A5ACDFB059CCBED8E255 -2DA861A4EFA48D54DBA0A73B, 1ED6C2C3B4546B41DEC00095940C7A8B629C5C0703F15831096240174D0A18A94376561537C57F8483317B215B00D422D04A7C479035093CD580F1DBFE81BBCAAFD, 1B4AD3B7CDCEB8C34FD7D35FD087D5737A846D7F82C9C3E81D42B35D089E00AAB6197F7956A475727F5FE2899EB19663609C9EBD835C4E066BDC4DE8830138437F0 -88F924EECEEDA7FE92E1F5B1, 1F510CF12AE559559B6D56A7C4CD12B2D6F4E9B211AC80347BE28C544560394E0B77D18909751427F0D72757C95B2288AD53B04EB04C1DE823FFB6599CC12910647, 1C825308C453E4BE1BC25A470AAA262CF256BECF6539005B1835468541B9D137E5A20EFEE41B70BC6109E92C1ED2290DAFE20F523433150AC3A1D4B62A382DA6A4 -19AEB6ECC6CC8F7FBB8A5E113, 1D96F773C1736D046ADBCE278A48CC600A496AC353FD3A0D85B7A39B4F127964577642183E76283976014BEE00E7F8CFAAFDFBF35FC6E79DD637B67FE8AFC22F018, 1B20DBA2B18E31F5620E2231BCA4B4499FBBA844E1D424D2C295F4114AEA4BBEA643C3171126BC9498400E689DA349F3434C692C5598D93689C9CCF7A0E26D197B8 -4D0C24C65465AE7F329F1A339, B69E4A8BF1AA895C618A8DF89CF574C07B737074355578AEEF4534C8D218C975A01D89E699E2BC848643CD5D3D1BCA0468BB0D57AF11B8C90E8C90F415D7DBD14, 8CDEBB41AEF07326AFBBB4CF350B651BE771F46C262914353D64E753FF4616EC07F1421FC38999131449B99A42D460596E53ECAADF9520D8C62936C1945E695CEC -E7246E52FD310B7D97DD4E9AB, 2F44DAC7B64226187E6D4A243122268209B26AF89C369614080A0102CACDDF9FF10A3AD4443AC0895D935E76EC7077FC22D6F8148E43B4EE1ABAFE72DFD4A5C45C, 16811C302BAE1D2139926DFB84E07747F2992E8668A438642E42E0371D0964F5B9E544E8DD50FD4DE7A4FC149FA7CE15705AEBAEBCE2430F98F761E41EDB0348ED -2B56D4AF8F7932278C797EBD01, 599F9A9B5DF7E42F73BFF94099111504BC3FE81340CB7B761A904D8F02E57B1130939C5926BA6D8E7A2F16B6EAD185A67E74BBF32D9C35369EAC094E8404DF08F, 151187A64F516FB7E574009A05FEED58FE9651908128303BECECFAC8833DDF5C33E19EFCF088C2DF944907ED1A7222C55844DD71FEDE063447C3D2B900E3B011932 -82047E0EAE6B9676A56C7C3703, 1F0EE7B47DF0981FB658EAF622151FCD58856F9EF226296F9265FFB4D345D61EC0BE7950BA891C449B1414CA01E824C219E0F95860BBC4C6BD5D5A8082AE156A500, 136C0FDB133DED142D973CF3FFB7AE59F5E379E53ABA3D5B8A773524A947E694B45800AEC0B8E64B1D3BE54569B12B1E96D6F25B6126F03604EB5F205E0C0D2AFF8 -1860D7A2C0B42C363F04574A509, 967C8D057C2C6C527FFEC4B65418CD070D20C917F7ECD53B980352C26E4E8CE1EEF1BD8C18BEC61A3259169AA9573E89BD4A43365AA35238FF792F8831C94F5778, 76A652C96706E490E0642B1B897C1E835FFFF5A0B6B70C7299C0FD1CD7FC902FB5078D58DA583DDC9FAFF4A1E5951C421119DE818EBD78D4B9C645A839DD8FD05E -492286E8421C84A2BD0D05DEF1B, D481529C0B8908B0D26BA5280C36C090539B2C8777DA422782DAC32B8D938CD9FBE48B0F089CCC19E927478344DF6538A12E4C70FB83BB0167BC5F67DEBA96EAC9, 10BCA3006DD8A63F380393337ADA78EA09DBEF67B7341005E5426FEBE6CF6B1D3CE6164C3DA46BB7C583C7EDEE6B3B2CF61DD7170668ECB5780BFBA9363B51D8D7D -DB6794B8C6558DE83727119CD51, 17C0CE40712F4B52705DDEB104DABD27FE0DC8252D732ED96B1EB6D0D2ABC4659B11A7ECF21FE1AD66EFDD6436D4983D1D919334863AF043783A0ED16C91B14FEBC, 680A8191E60E5CD6E64C511B271B665A4A7A3325113C96829FC28FB75305D207BE337A77832A461611F76F63637DC8E2B28383025869AFE5B637E0D6AD57FD5673 -29236BE2A5300A9B8A57534D67F3, 2FAE54CE1D4AE5B9E83ACDDE92C47749C206F41B72A5CD5BAAD031F0AAC34CA679D5F84B81AE4291C7A98BB2C396C22CDE0D896BE34FE237390D27BE54A7533ADD, 173ED43CCD7FCE3B515C941BC744FC62E2B4193E1D95DF624661F795ABB261B5DA5CBFAAA02CF9988B5EF05E095A2C7CB0ACE356D76D919852A1D672E37FB3CB3C6 -7B6A43A7EF901FD29F05F9E837D9, CF6727DD89F1CFC1997BA16862CF19E9217A82FF270B247AED2AA0C992A4526E58B86E23F375BF50B5629312370FAD1E3FA1DA5E3B2E6DDEF7D1F48EB245270489, AB35A48111037289A4C8E360B1AE3000ADDE3FA27917BADEF8245386F1DCC6274522A3D38C74975BFA5264BF1BBCF39E37C7E6EDA0A6D03B896140771991D28890 -1723ECAF7CEB05F77DD11EDB8A78B, 15ED4363F07A28A30112EFA8CA8AA56350AF5752D65AF4EB57007025116EA9F04ECE481F90EB53495798F89D4A54040E5FD4C16D368921865BE454EFCF60AD5FCA5, 68039E8220C159DC30F35F437D9D174574C2AC67D388C966C489462217C2189B2AEDEE9602880578ECDB49034C0B1065C659DD043EDE93ACB1B18EA874CADBA064 -456BC60E76C111E679735C929F6A1, 958CDFC357EC3618C7762B10E3D45E76EADF9157CEB5236A564898DFC4AFAAAE26A07BE8C653A8E16A36DD0F4E448A1E7CC88D6B7542A8E499EB678F78E4B6B2CC, 19723F0CDF33BD23A14BA13A98043FB63B746B0EDB2852963E491E21AD37B959F512DE84F9958BCDF77D22123F887A659ADB27DB668DEED9C90D7D283368651C7D8 -D043522B644335B36C5A15B7DE3E3, 1D6FF827024331C45120C4C71DF35D6888B12C5AF4FB70B5724957FDFE8824A0E713106E888B77D031B740CB73D4D6BD495D80494AD621F0AF8727A6758A455C68C, 19E2DDC3260794B45204C946A2437D266F9F799D6F8AE9886D94ABD5019E7AA7957D5804426AA6195EABA99FD5E2EB8E09363F46FAAFFC262DFBEAA241C79A2E7A1 -270C9F6822CC9A11A450E41279ABA9, 8F963C0D060D273C74B097FF5762CF227BD859561D2FE6195C1EF495DE1B79C97562C7866A34DE56D61B3A8EB42EE87C3E437157EEC3064CA0C7BE6B38F7B259E, BFC2A9BD95034A3B05F63CF91402403BC9987B22290288832D84F33B0F6738C7D010033EA032F3321B6D87720E5F6F564B1BF31BD9A3802FBF2E108126591E707A -7525DE386865CE34ECF2AC376D02FB, 7B9F3B77DAB322FBB3DA19EF73F6F829D881619451B0C5DCDACE17EAF0830AF0204D4D0C51B82ACD94341870BA4C4EEF1A177DA2AAE93092D04B4809DEE94A2047, 44BD3C36192CB52431584F01FD2117C61A0D98B9CEF1AF9D430510B9B9629558DE745AA3CEF2B211BE4EDCB9BFD853DAD9F4B0C2F6DA8954AC0CE29565F5EC1F58 -15F719AA939316A9EC6D804A64708F1, 1F2C1685E8DFBA68D3759869081288CC99224189EACA61392C72BD4C4964C67E3895CE7B5B414F4C0AF73B77691CCB26B592639E3008DD72BD38EB90238150EEFDD, 1141FB62A9474E430A714A2B04743FDFFC938BFF16DF9D4AA8EACD70CF1F05D88A7B9C5B8FF05362083EA0912D36549DC3AE8C1FDA2E7B3DC17295AE0F027C16A45 -41E54CFFBAB943FDC54880DF2D51AD3, 1EA7AFFDECC9D2D173E0B2B2DC0BB570DDD10D7814067F030620B8FD9D8E1BC8B552506418F51396174F99150852490D0F6ADAB392B7C743CF53728ADF7412B3F0A, 10BDE149B34A218B62D35AA3DF252FEF49473C2F730F4868E46FEDB512AC8F176BE2A0C2C339CBCA3A70F9133CE0FEE52DEBB53BE9028901C6CA0B25F7C7F842F2E -C5AFE6FF302BCBF94FD9829D87F5079, FB865DF26CB3AC31F6DFE99E723F631A89D632B63715606D8EFD1ACF7D492A9E974B200B1908E0DD532D564D567E37017777A6BCE040A5EE643950EBB838B601C0, 1CAB509D1E0E6A1B59C2A5D3487D7852CB3DA13533EB1C2FA50A256B805B5B0AF35D95384846CAE1C28EC5329F804F6381BB78ACCF3F737373A2A67FE832D71B6A7 -2510FB4FD908363EBEF8C87D897DF16B, C9F00AA0A548FFACC5478CFA43A2F9F23FD32392FACA4F68AB3FBE66383B2B6E37BA355326F42B58C3A7F6E93E51908D4ED0185D05E5A7844929AE208C3B51B46B, 5B75696DFC684DC9A8432317EFD07C0B2691A237AC0E7498B96730FF547AA7CD9B51B847BBCF2DED8CB93BB0482B67E135F874F5F4C42A8BBE1B70C58600E98F85 -6F32F1EF8B18A2BC3CEA59789C79D441, 1F866ED983E6EF590371618A0BD8FA42B0DD46AAC941F877EC14B24C2B828CEED391ACFECEFC04E35A0DD1FE856426D83AA3FFE1F5556919FD697066BBED3339335, 199585DD07BAFBA24F2DFAE36A30E040AC29EBC63ABDFCFBEA0957702262334EB1A7FA179C3BBFBE928AFBB4D0532A8F0EF113CDB8982134A9D326148CFED21F762 -14D98D5CEA149E834B6BF0C69D56D7CC3, 10CD4E393DF012064B73934CFF7EFBDFC72F3D58CCD733D885EEBAD4B91B64A5E504FDE8F2299F704472772D53CE6D81BB39632B81AB25FFFA7C774E901E1A222F0, 29178F12625748895118D70305535EF88A93113FEE977DE33E330633D40181E9F45DAF7030545F55EE8A612C608B7F41F2812B79D9C26CEE3734DE551026E58CAC -3E8CA816BE3DDB89E243D253D80487649, 171E578DFCDA69BD9D2DA57DBE8A515D48D4C4BA222627FBB8B068ABA56059569031113F60CFE8027D77F3FB990C73F70F1A2E4BF31DE19DD0202334CD1157FF5D3, F1101674FF1C2831E2C145BD2ECCABA19ACC2B87B68A4F5BF5CBD68520C679861800C8366D545A7FCD9124349737AFF5478EC4DAE5F1AE2EECF5F9FB8ADDE9A292 -BBA5F8443AB9929DA6CB76FB880D962DB, 542880C040CC682EFE7BA92DBDE3DBFFC5780584AE3D1F7C2941368F0B44F59C98F27014644580BBFFA2C62C4A81DFA087ACBA7F0A24E7DD877FC26AD10D074040, 18687D13361B2E4DC66E8136E50BBEF079B5D6AF64B839265EC3871B2A9D034FA97A94DCEB81D154C020638D38B4BAE16C6DB8657585EB4F60B71BA08C9EF05CA2F -232F1E8CCB02CB7D8F46264F29828C2891, 1CB8816EC66D80ED05C3172AA33B4F8C8F023816708F2BCE3B41C42AAFD41C6853796F7D014125124230EC2648BDB7088A1AF454B01B4EA6F77E39361AC698138EF, 16503C993B51F6FC4C3EB4A8D408E7370E6EFAE214DF09850DFE12B1C2E7E9B90831B1F495CA81BEB9A96C662E0B223CF4C957E2B3A362AB603B0DD26770C6321FA -698D5BA661086278ADD272ED7C87A479B3, 3B2C55D7171BADAA27F36255458B30A71749AD17F111408543DBC83DDED63CFCA7A232A9A3FFB18073CF39803E8F6F0C1AFB5E745CFC8F923C410B7AE751BE80EA, 8F56701849C8FAF70AFCB92AAE2B0E48C1E85114B78D545635AACE43FB0B51EA53B3CC6D54F13345BF354924FFA4E26C710173F289E49B9A1E10041C2078C1AA64 -13CA812F32319276A097758C87596ED6D19, 1FE012AEF9537E574FE550E8E145F2026F96D3EE1D2301B3D6969D977C4C314E9078F0C5ED85C16C44CBFCE04CB44EC2A7072C5D936495A68A601BE32EDEC595B4D, 1742AC39661002F4DE12307D367F017BB4685AB03035D6B90CFB4389E139DCDFD1B432FE7DA51D87519E46CE9C6E6496A13F59299830B326AA54979477523D547CC -3B5F838D9694B763E1C660A5960C4C8474B, D2B008C3D599CB7CC6C4CCF5F06421B49FA454D80B0503D66E859D02EF0F6A1507FE3B42B5E3BDEC83288AF0C2E79DC348FFC3509A389F223104CFBAC4337B20F0, 158571D28D8179FD934EC4146F45C844BFD806DA4D218567FC4CFB08A1F01B5EC213C8168477816F230DA0FBFB665278E79EE36501C673292F3DE8087B1BD7E16D0 -B21E8AA8C3BE262BA55321F0C224E58D5E1, 4C23E297383022249FAEEC517AFBFC0EBE45AE15602AAF45023BE25A933D3A9A85FAF3B72A2E278528B9A753D3005E299764BEF3A475BFE7DD68EA3C72E7BABF6F, 36D4680C53A60472483B7B8F1845D56BF19FEAF97146E16C66D78A4C5B2EE27088AF0DC602652282269A68ED1CBDEF9FBC6388B28BE732A9BF4DD38C599E3143F8 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 2F7F9D1A89B72384CF5B5B604246FF8AB4BF00A68EA1DFA7B1DDF8345D2016F570276A2ACBF321772DEC7524128724938E74D5E369F6EF5F919ADF2E8F0B8F87CB, ADABA23841365A83D287BB51C50E3CD0149C369080CDF2C1082A7E359A16506AAA3F0B6DB5F55B3CE9977772D434D7AA0CF8EED7B322BFC16790E2A257AA00B144 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 1EF2DDB94CB948844F7C000FBE090D7878F02C3AE37F722220D92255F5244889AEE0B5D0CA9CC1DFF8EBCF35C4C14D7E33C052C47BC870F5C2F648F3AA9F156E372, 17F3D6D89125ABD457EE45B912AFBE4E9B2008C7A95562303CF7A0F2BE09B69D905E5494E0EB3FAE1C47A48924CAB4C56FA49E970E57599C852E93208AC0B7747D6 -12C9389FCCA50E069A6FC4946479E435E8EBB, 11A0907D5B4E6BAAB05F813A307D7DF94FE31024D96233DD9F52966A94EE19BECAF0D93F6ECCA6217FD70954B37929BFE22ED5B529A1FADE6896ED358668E746F27, FA46B3B6C5694F1B4AC9763E9877623BE6DCB01D6A101088DEDDA69FED18D42B0ED1246C4DDC739D03A411EAB3E6316AFDE71E8CC0E2AA04FC8E5F137B84CB8E30 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 1ED6569F5F669F3E6A55A52546060D59D5A1561B0E8DF439602195CC8BA01C90C3F80D7FED2631BB8153EFA46FD56B8CB0DEDE95F9FFD0B0546D23ABEF7996226C2, F4E4A923720917242A16BB7CC62A07C4D017DE653D76AC912783BDEA237F6731AC2C802C7ED70639B1B00026534A9DEC23D7130BF3117475F9F1A0702CDC6D6D59 -A912FD9E31CD7E3B6DEDE937884905E530493, 1EF01E309E9B1FB687AECE947806C35B944D9E5EE06E61DB9390FDE011309E0A91EB0F4FA4A5E62E6D5999E46A4C2D48EA853DCD9313F4BFAF853C4ADD1CF47BD72, 195159841C9D16C350B52E181F559EB969BB113BD08B5159B05A1980F53C799EC1CDB1AA4C8A040B9D9D67B2F794CCA95EE767BB18AF9FD36C45318294BA1668C80 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, BD9334DD3485BEA7DA10E2ECDC8F5433A34C9BFE42391068BB8C061C129F700FFFF83B6FF9D31B0E1D3E2BF65ACDFEA9BD244D055D50CEE355412A4EF9E8D49356, 1B87707BD5D317EB668D0176B786C728DCFFDB8141EE945BD989B27AB1F31320E5A370C582E6F65D91CA166FF8D99DDAACE7AEFBE1576A86135171ADAC1B3FC412E -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 142991D8B21AB53FBB5380B3DACAA3E41FC1EE1ECE7641DC7158621418523DBCEC0ABC7CA28DBD6BCCB6C3097C67F5B60B203F0636F9479EB1B7CFBB7557C14D5A2, 1434E44D52CDED2ED19B5A3B68A0C618EB37B217F52BE2E56CCA41B32FB1E04424FCD9E07BABDD36958108C77027311DE4935A203DCB32FAF18345EDF762B4FCE76 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 74FB515E4078D2CA6B1B17E3297A70726EB56C124EA964EC24FEB6139A5DA47D3F196109AFA5D1115B0C64464D8AB116708DA0B760B9903680AF97F30AB5552E18, 13D19498C65A6D9BD7208ABFBD74BE1B67B113B378B58035C2FA0D0691D72EC683BFB7001080C90635E837B87621E618690179E19F580E5DB4F6B3B28E61E6FEA05 -357F023F0DC204F0CDC846CA921F1ADD8447283, 40581EB0C5F1784C5A3173C273ADAB26E7D72EF757D175989BF73BD364812F7391381DC96735990F8F1F0E36E1EACE55F713EE4FFAA31B516838A3C5F878BD963C, 173B41D46C73443E7EED3F153A1744D7047E8ACC8A949AD240F8D315FD681F4FD44855D23C5FA4BAAF050CD21C10F13BB1A041C170295AE19BA25A1DE1C4208E4BC -A07D06BD29460ED26958D45FB65D50988CD5789, 1564AA18C5C10364E75E1211E1D5957C673B0640720CC5003A31BD1367E2647937C29C56B6916F44F73F60B1EAF592FD808D4C4DE874BDDA27E5D88C14A71D75EEA, C53D8A2301F213A680F58774FB4CFF9DD3B6E8E53B94B94FA131BED87DC53CFC4C6BE4C084FF9B94F35590B74551C0350E718D994B10B1C9E44373152E76FEC25C -1E17714377BD22C773C0A7D1F2317F1C9A68069B, D1E6F2EF12C66869F67933B64C2F4E16E93476720B87383E61FC410EF3D0F9684C1A21C5B9315C29BD4D631EDA4DCD1078978E678046660A8FE982DA818C32598F, 185D08D93D463230366480261B90AA10CFBCE2DFA484A5F5BE5627354EC75340611E7EBD3B10B03165040C0E5C50345C298FA9FDF937C5B76384E72AA2A01E3359 -5A4653CA673768565B41F775D6947D55CF3813D1, 9F9A8B3F2C05FC80D9C0897A82B47D657A0A9172DB16C5EF6BF7B7CCFA589BEA69CC9318A9B7DEF5A4E1D69065B5364CED0F097C073562CFDB61A9D9F3829B2FEB, ABF0E1608D995600118FB59CDCAC5D6337E04A79BECED24697291F011F185AEBABF8A4CE35EF5AC09BD274D21A393FF6A25952D959429E6E00A487941A531A9DBF -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 11717702EAEEB89C79271FD5B6E7E04DEE3550E8F4AB75C89ECBD33B636E3698D5EF69DF324BB8B3EC6B87744718501A2C7CC9A9D15B3A75C015DC310A210F09A40, 1BF3ACE0D121D1653E89459C50FAED6562BA69D2A0CBC65EA92DFC5034C2021E29B16C6B43B436BE76FA7D31CA1AFC06C803D43060459DF22BA75312F158A0E32D -32C78F21DA0F2AB093551B3248B38680448F8B259, A3D261D481EBB0969C4A6767013AFC759D91F214A5EC4F85C7E504955FF6BBBA4F7A9F4883D15C4BA8F4A0AA86E5F70E7ACF8447E44126DF957EE85C4BBB37C501, 62472A2C7D924E1AB0C95C9C5A2A205EA31DDBF4D819A0DA4B9F76AEA610BB2FA8AF486C18FA0DC5F33B4BB2309B5162AECA6E7A76C1D783CA9DB7B0405F6E4B2E -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 72A122AC271DBAC95F310F20E8D8A0BE4192A7E701C93B600AD4AECE62ED31D56C4B1F5CB180526FE2B898FEE0CA1392368A11284DA1F0D0CAD7F429B5FD2B7DCD, D09B0D1D5B5CF5F9C068B758E333A1017659ADFC6CFC7D251E67778D8D0EEFF6F1A03AFE47ADEACE046B0B6890CF29746EC4D774BAF26D6E2F7A7FFE1ED0991F64 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 4C1A20EC2425F70CDCE5358CC7CD25D0DEFB0ACFF160BC4AA218AD3EB91304D17B4A134EA4172933E39EB25D0DEE0B1A0775CE2580B7CFDBB449E2A39B9C596FC3, 1E7B8A2A66FC73F114C81AD17D7FC08DBE776804FD3B83F6D2781B8E87E67C1667461BA0EE0B2BB16A3481E10CD940E8A5815A83785F0A95768358C6D6D43CE2A56 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, BE5C3F42502CA61D1E5E677D4221FC08CA8F1A4ED3820EF4426EAC78043187379E5261254745F2FC875C90446B4A1E6CBD532F276133AB456BDBEB0E25A0D53D41, 174A4B5868018B84BD3897D160E791211889C3CC956E4D985FB6FFDCAE7D2836B3CC542F037971D2EB442D965C373AB5CD51087090CCE1EFA725AE1EA5DA932F70E -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 14868EC0DF006ECFC9D030DB5D1EE2009127F2E91CCF2174B3A4611BC5FCA6A36143D312A1A540D4871C123F6CE5517BC6490A874B09CBEDD30B2761F7ECC64F9CD, 1DB894269EF8C3F60BC6998F0EB3D41A2E2ED7484D1CA927F80F3FF0B5EFCB6797857A114F9E38061EDE7D53B9FDC977F7CD6A53E4ADEF5194AC5A6A1238DFD927E -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 169D74D0DF6E55C842F42DAF2A7576785AA500100528F7859AC23B2279F4F9B48AECED1237856844D87DCCE57D75A38AAEC5FC54468A507FD5630DDECED73C6E781, 4C758619304B7209D2EE9F95698FB440F498369BCCAB059A61E8BDC4BE5636119C03B6D2B7524087CF5CF414A2DCA1801BBD04CF066870B83864731422D3619D48 -909A469765F53090D38D5A7231073A03433CC33DF71, 1CF38F976E1BCA7C2167355075FB849AF27AEE67B5662CE2A0A1431D4E4A93E1EC871FDD78092A42E13D87E16DFFDAF1139A4C097EC77EA6812A6BF24D0EAD26821, 1DA4F590E499D7787F79162DC89C294C8C5D8051FDDF922231EE338FB111E21BCBCA3A6ECEF2FE6E4F894AA507DCCC5C4191A28D848B8C5E80186FA8514B0DAAC47 -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, F111900E115DE9D3765613A20DEA4D5E298BED03A193EDF851E0D73BA054F720821B14560BEB25929EA6DC3424E7C7F2D986455A4CA92F96B74B556D6536180B30, 1FA14F416C63E6A126894B3C30B3433A5179A347B0BB479F6F961EE6E3331A0CB4CBA92B0E83976071B67218F8948BBC5F00EADCA8FA26BED3E5BFCF494D8EE358D -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 111E666ADECCD8BD3BFE3783FD87F097483AA335F2D8206ED1D37B81F508D19DD61BAF93FCD96AEF68AB142407E61FC8C1FDAA4458D6BB6A0044E6F018AB8686F7D, 131FFCD5B2D80063ED2815BEA13A5A5D1E110458CFCB6F36CCA1BFA55343F8823E68D0AF8043551002A08DBA039245117DD070B88FF61A9A15CFF145AAE0E0F6CA9 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, F2D496483584F01E1380FF91B4740B51859EC60ABDED4AE8ACE803C66B822B5FF693892A496649415FDCA986541E35863C3018FE33638CE4D2411F65BAE0D714EA, 8C4CF8529470E0D6EC329ABF9FBAFF170D67885F1EE19FFBE6ACF844FBF233CBD595C6534AF1E27C2F63E85D9EC2F9D6952F4622C0667AF9F85A0EF9F96EDDD2CD -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 1B4F041AFC25FF407E0038A9DCF5AA42B7B99542F5AC80FACA31458F36B6F466B6F0660A23264F28CD0EB31144D83A001002058DBA811E1AA6265E34F50654F318B, 7E4D4E645B80E8F070DDE8A3A5FEB2F578FCAB84085112D6E9483775159938B53C8EF5DED2CEC556D200F20DDFE651892E009C8D5BF8CCC95F1A0A5F17E877890D -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 1526597072116E68F74763B7DB91938AB319D8FAEEDCA942A5BA6482356DEC3DF9E8895C88A7D9DE6590AC9CD327E66D9E75613DCE5A8953032DDE0BEB4B85D8B7F, 961CD4191924722C5EACB285AF255E56A2DD4BAE958CA5952C4538FE5E7AFF79D2AB3515A4B031A11B95F2AC76DC763B40257CFD9D10DB6FB5A1C21DD6A53DA8C9 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 499FCBA3AB753869DF5D089B5508BC7A0AF8F5F6A545C7BAE4C57A3A69F8A09AA3B300389C3A04C70D59F5122828B0E9F6EE9385C512FD3348940605D8A57FDADF, 65AB9CC6B5FE8E00634578331B020C3EF09D51386E1904A1BE07AFE833D018FEAB033CB01E854D8CA3433B693C91676986AD310FBC26BB5A1728EAFE3E4B43083 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 11878C5B974923546375AF0313FB844924EEDE1F76C8035C8EC2A8152D79B03AEB96F71C7618F851B40B4AB5811C402F6B877F233C7F6F77A8CF025BE6819D901C1, 71ADB0A94401E1CD89A353D5089B58493AFA093DCB325D18C3A582AFE1B8B25055467B93C61B1F5C35E8645D90B7E9EB062F36A39D621029BDF6AA0639E25532C6 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 1EB6B4775061A40AB1C7D14DEA339FB0CEE8EF61EFE340F20EC76D52AD03BF60A1B6630187A1D0B41CB0F062C91FB97CA454E77936B14CCCBD6ECFD39207E98D0E1, 119309EBFBB787F62EC0786D5AD5ECF146D7F8D4758C896680180B5EBF119DABE039D55BD1C503252B25713B29EDB52DF67CCDB83F6859B8E66897E3BB3EC10D9D9 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, A0289125A717D790905F7B1171158B7644ACCCA44BC9DD67F2778C89DC7731B18908040BB3F891AFC5B2E5168E1BC29442B8BF5B5CBC0F3EB208D9980A5D1A73B7, 129540821B079BB7DB7BF9D9075CEA7833458FFF77950DDC90B7DA4D30EDEE52B4CDEE9519DAF6FF5898CA3365CF0107D07D9CA9DD0DA2BA47FDAF821823AAED34A -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 1A0D36A91082C697C7FAC4E50887B8A8AB6AF0C82E29B648A7144F60AF2C68A316A90DFEE21303FFEC7DF1F9B6506747943295529A6ABF42F2624B23A60328C3735, EF0B8E839A394FE4AC141BA2F2DDA0DCC357A5461EDD668BDE46239ABAA3A91BEABBA5290463DABC13A426C5F250F26D559CB9131D89D28A953DE7BFE8F2955A3D -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 1B099C1AD9DF6B5773444416A28A28BF25744C9E24F80ECD775417AED062C1874E84E3768FCBD1E2753C43EE7B92ABA6CDC2763296B0E3B88316356517292AE9040, 9FE463186297600D62182EFC6D5184758005A894C96DD177491333ECD2738BE64B5575FB0C453D49DC9348BFD9784B9271233E5C3992DAD8D3ABDF1D4567DCB16D -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 103A1AE83D0C63E738F7EFB2A35C4688C93A74FE41D0AFCC3ABF8F5E1558F00A172506733113EF0AA7B41B1D8C3A5A6DCCBD252093EC9BD62794DB6FEE9E86D7EA6, 15E4053454D9FCC2D3CA84B7DBEC5C2450DDDA3035FDA7E6788FFA0F8D0F038753A2FBD4C103AFFBF9D7E36A2F8139FE3DCC137D41F061A5C1328A9901FC6B1585D -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 662249AE4DD87AB5F98D8BE4E173D91681948232CBC5C3F879AB89654018AE70D797B806967745E9EBDA56102EBF6A72AC9BD5325D3F7551A37D4D123086308F90, 1478866BB350E2AA72AA154037D6D657DD1214072AE0E6BC2B871FE4B178E55F8168A147416D8A90478A4C559C4971CE67C0764D03754EF17100C4A838B82545A6B -29396F76B67B7C403D73A1059B80139336878E44938606769, A2B8066D700AD69186ED471A2015DFDA37D30C72016569F9C57170E78B3B3FD6085B6D2ED83B7FB0FD0135671FDA71375931F4BF21A40600B214F8856801F70BAF, F3C3A4D255BED81E9A43E4417C7F2EF1BB99013BCF9AE93E0AA273DA41B0441E5EEB722558A89A6A5CE50FAC5A513A1C8546845CE4070CBD5A0C520DEA724AA1CB -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, 6B65E9AE0ADA398071A375F757BCDF809C0DE791D409D711F35278D94A1C56CAE3716EA377E91A5B2465111AA76FD98BDF4A654F975582B7E041E77BCF3B1D737D, D633E4CED977BE21D68CC999596F0ED8C4890B938AB85BC06C5A2EA52A439A8FF5C70C72884DEDB18D90AEC29CDF6B17086C94CE5162E6F84E4A8308C4DC02A95A -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 17FAA1BFBDADD90A856D9B2FC478F5402B1D2918C87668F55BA10CE65F676F0748168CA0D02BEB2DFAB95ED49399D9C4495A93C6CE137CC3D0B45AE030DE85C41D7, 1163583065327C943A30C9BB603C480727DEADEA437D0D5873E99DF0BD3487DFF2686E8AC8ABF3DAB36D19DB2FA5966155D8AD2C337B65DB70A05D7FB3813B847DF -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 1283BE1296F2AE4C4997BBB632EE6D07944AACA7D641CC8B3DFB8A0905915B005844529B90CBB2EBB4CF6BADD117E2858DCD30DD6560F87CAB349F0501E925ABB82, 13ADC3807C80A9BC519F74419B432F120BFDC918992729A7ADB3AD95206BEB793035960DAA0E5D002EA8E6DFFF927472AC1DDE10AC7E196FE77AE23C5E1A647CCD -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, A8C3ADC331BF40F457720076577CFA98F6B61201E700DB58FB4CA46C1AEAFBE8EE0BA52B1BA72645A3349B63B98DC252C108914024BF8CF706981993DDD6310D72, 18423EC6B5072CF004A624699C003F2D7FDCE5E243DCDAFDA117273D72746FF3A917EFAA523FC2226D9B39F52569DF509FF340B32E727A6A22F3A33C62F4F1C357A -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 1FCE7ABC8F809FDE63758D1E935AA2D81077300AEC2C16AACE21DD6EDD93FB9333E04B8B403902C9F1B71C2FDF8A3216C20598BB16DC90ECC6D066794EC63CB591C, 3C61DB1B9DEE067756E94A963A2C6E3F4BB681F28EFA3D2084BA6F8ABEF41419E4FA8947B8A02298542F4A3B1F4122745E1DE106C90A69869E0300C68B8CBA169D -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, E6BFBA40FF120E16AA00C0F66A80F7DCDBD7D6FBA8EEEDBBA02A98B760A000705E85DA0C7D50C48740047F0DD69BF9DF9C62A11F0F116ECA18E4EA546AFA1BFD8D, 149A3FC28C6383506634926425F33DD05C0CC9BD9480E0612F0A5D628B4BA963D6B297A44385F3D1895FC16137FD2A38C24A023053356A993BD4DEC457A46DC2282 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 1D4CAF57B94C16D0AA062D2550C98F220D11A3225CA0C7D8E072BC3C241EBFE8D4FE18121599EFEC0BE7EA42C096010B3693CB88F236A53337296723A4D5534B667, 74A7A7D6F099C8B93EB56BB9BFF40AA69B864E8CDC6AF09C5DCCF7B6AB3EBF2FEF2707486074BA12BD1CEFC7D0E3A64D952E4079F7A28CE69FB1E550B66D905FE2 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, FCAF330D53AE4078B34A33DCFA771E7DAD5DAD53FA88CD734FF7E32C4C14FC544E0D55DB2CC71F0C877D1C6C8692B582BA5B4C2BE33530E0038495673C8CEB50D0, 569CCC4D8CD0A3B06DFB4AECB1480D22CA7C9212EC22939834F51856FFFA9D4BCE26CBC1F5BB02A19976670AFE3CD0368AAEAF59D859C2C3087B79F9877D404412 -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 13858A26EC38DA9043362D4E5A46F65F9879B95C1F9D577360331017C3C78940FBE597F3CB320B9167C33AA1EC7014C3216A3C74C6E6FB713BEF1720BFAE6B85D0B, 127E2683B280F8214B351A92F95359ADF1E8EE20A57123460696269FAAEDCB05DA8EE020E114E476A07716DC8D2D290097AAF4D09C6E2EE25D6F5A811BEBC554BF7 -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, BC920E011597A73E2EA7EE4340517EBDC3DC684021895227723C47989293D8892799C3910A22BAD473DB9B926D7994D89B9E6364C387ADDA4A7EC4F899EE46EAD5, 17C42CB788E5A4074F5AC52BA2C9DE4141C5A98A34C1BF61D6211EAAD6240CD678E800EDFE55F288332BE5CA9363CD4956AC634A5066EC952636E3862847B11AFDB -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 9759EC582DCD5670813AFC147091E485081FF3C3D562AD75F6F568F84F64F5146C47402FF67244B573AFD63955706DDBC77009DE6F74C4B9F9981B978CAF2C639D, 1E2933FBBFE103F66C86AC29389D9DAD27B8762225F73A0F3ECC418A02A63872C791F105C33123C562C0CAC2C6E87106DD93344A311F3AEA85AE4B67980B60C9234 -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 1DBD594A0AF67FC7CC2C2FE844E483B3A597C84573F0FCCD844351D43F5D57ED973880B55C02D48DFC38AFF28405B3194B0A0C4D4675571F2AE5FFCE93F3E08466A, 80D427650E87FC3C73D52BA682597946D0865E3F9B1519B17E2D5FF1C60F2FCF7530EC55FE580F3857872E97749FF95B6D263BC697E29FDC85C51953D8A72096F2 -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 190DEFE7D1685379A0003C2A0D82EE746BDB82DABE09510ACF7204360D43C0A3314D4EE74633741A52771723FF1B6C6C8526A12A557BEC896878EF9D11E1B8F8F0F, 5BE592B217845D4CF9059046C53F85B8726FE113BDA0065FCC6E5ECC0A06F93BCBEE6A64061EB48C4929561B3DF8C86FB0BA979662DF1CF3776BC19D74E205A1B6 -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 11B6D026D9F4851F01D34D7F5780701DACB7AB6DD7CDFEC470E25C3652C9C779A982E474CC1208F9EF2BF596D74E1FAAA49B43E973A243F8A5B60D3FB66030DE7E1, 64BF8C1BD5473B0D461B492183C225F0D0F3AA34DB8B7F4C7C3EE06072C87AD140930A462EFFDDB14FA9E1FE435E7180031B7F005D34A1D0CBE48858AA299BEF1B -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 164AB3523A729201BD1D19382F1DC55E670705610412A8DDC168FF814FEB847BD56849A951696ECF9E227DE82773B6818C92BB2628561BE0D5A1842794AB4CF1F8D, 22C694371AEEAF25C7BC9072A8840B28B59F672AE5D17261C003030E780FFCA5E9D01D97931D2187DCD0359A4FBBAFF5BE89917A0230A7346577B5D2C93B0D1BF4 -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 4BC724058FBA3F6B8DD55B549FAECDEFF30E9AEC3E1AB403510FABB0F868CF4B169972DE4A859A88C43BDC5203A926582A4826291162059A5F868E08D94FB6A665, F937E3699DC0F1E7516E0CB5ACFB648B32F44E1C2AFA68BB02C512F52723CBE81B887C41CBBA3D694A7C1EAE2395C687CB605F0019E150419D4F4CA4CC4EDFF17D -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 1D892EDD5504144A3F3B9F007D54525CF4D84A64D2F673559FD7D456029B02C3D7FA010FDCE1CFD670E16376C2DFD746AC5CF39D2B05B6A4545013B78B315A4E55A, C17218A3397CB115A3595DE79809EF3C4BA2B15ADA5EB22CE4015ADE9E4023EA802B8A8DFF386603A670B4987A98421F86868278FE5AA043141596C72AD92A244 -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, 3C5B2B112CF11BB235AC1B800AF6E31E35471CBF50AED698BF79299C08A3738B41C61042D970202C3913F4D498B0B41B20A13BA313119CB532872B1C4C6232E07E, 1D5AA48D23764FC6359A13D989F58F22BFE9207B146993E1EDB3056170EC936540D0C9953252B7EEBF97E13CA04621AB62CBE5F1112A4A3C6E7C1CDE43755B73563 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 10E8673C755C854DFDA62B87D3BD2D7E63AF695636574BBABF04CD343FA7492FECA79AB043031DD2BDB90CCADFE3F691A89E3A131565D66396CE69E22FD6083BB67, 74AEDED0D962A28B5E758F140239A21455273FA8E1913FD4A53357AD5B54668BAD4A2D8A2A1934D3B33EDADCAB0D727508FBD18E8AE38B5A0600D34ADF1276F27 -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, D0729406F428C80837768678BB983027AE7505DE8FE2622C5CC714FBE823AF37E0734CCE94B3B8740489658705A891F8D880C2DBF11A51DFC26A2D2F182B6A68AB, 7CE9DAF11E14AA829DBF52642EDF9B492869835072FB9913CB795BE185C0C3D6AADF859B2AEC23CE27B64D74C2900A9F2EE47A43584EE9F03509C94C6B05A70BB2 -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, 29F0A9A453EBCFD62C1FACADBE38D211E7313D6E2FD33D958E9F6C3C6A611D7DE6A3770D504CC09646C2C4D10977EFAB8471EE836A808455418F7BC9A453705D01, 11F9663DF4E4A066EAED2CDAF290FB828D6250EBFA971A845728D0521EFC09BC3A916FBCA667F548216E624BF530BF81128598D8A1061B040DDFC557CC88F9418D9 -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, 11CE6BABCF9E8DDB31FE971D9E45D4A5C849F9D9595BBD6DFD8EE2238EA53AA41F1B5EBF7D0FEB3362A147A29FC186D8169608EBED6530BEFE559C735B59FEF367B, 3B7C2CA6780FB6E5B8A9C322208D68F5E750408A16D5B64EFA80401871D10EFC5FACC14A2B85A29BD03C1D283ECCB737DFC5083E9BEC57B66388AAC211780C4D79 -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, D4767066E75F170297AF0A2DFC8B992DAEB6C9659AE1853C864141DF8986CBA47DB37AFBBA09F3B5ADF21E872A9ACC6B6A55C657BA30A32A546504E05600264B1, 6AF30CAF30BDBEBAE9B7B9E56104D11E6D1A7727F95C0D6B1EA7B2F289D3C422056A752CE684A9A1EF307CC7A343EA4399B09E88AEA783367F3F33BAD7DAC2807B -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, 17B8CDA732A38BB4F2E5EED4598C0F559C09162C32A7B58DFB5313FD14993A33E3A0DD74F40731E39A57A02FA77C096DB8A80214245500580BE4C012FA5E0656448, 1B544800212017D3135D9414D74622C7EB388485F74CCAE80C7C25E19C313A39A048761521D73D6DB4AAA6A9312A6D72CD64E1DB67325E04C74233C6E6000D2AE59 -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, ECDA2A3B7F5A1646BCC1D161E8E1166CC2FC436C2112BF60C0929DC435D1BB987CBDB27DB1CD4A6A4CF270D07C9F90243EBE432ABB6F595134F3675324FEAA24CE, 785B5E021B11C2CCE21EDCDCE3DC893638501F9E78642BC8DF1EAA3BF093441F18675F1B371DE21C912A46594F120299813ED460CE1195E475C6AE1A2A05039CBD -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, 159F88FF1E2F2FFCCEFD23F8D1A38A4FA2C522F6B9B18147E03D72BB12C9C2956BC994634B0A74DEB22194A011C5B665FA0DB05370781A86D683C9E7564AC7DCA3D, 1E724FC8785486A0F677C45DBA1877FC91C6D7CAA4223B2F5916B86AA814A13337A66747AAC5CE9532C804C03410FB8559397059103147D9EA84BB756E0FD56EA18 -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, 1610A5ECFE3DEF284957B60A5E93D8A1C7535E4B6ED12C761E3B0E471F791D8C18234675F21F30252E776BAC8CD146EDF36A4A8F8E4A53725DF306A0D3673A57E07, 29E8CF5534BF3DDDFE777C2D2990D3AAC191DE1F484A167A58DF107587AA566247DEE42557C156CF1FCBA36F8363CE7C3D84F36CCAFA3E583EAFAA8EF5B9CACFD7 -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, DEA62C72D6C78050E75C00035E1AF8DF2989C894D670DB01F349FEEE0DE4E546925714AF015AB274EC618C4768BE274DA79CFA22E94527DFFCFE14F4354D16E2CA, 123797023635761679034FA1950AD28C33B0F8D96845EED5D88C02E7568B6CEC7480A8770191CB2FA14D2D6486F0E10E307AAA05C1056995BEAB328C9B7B6DA85E9 -A0D2E82CA5E358392DE9951D10B533E405FF396E226444B3B8F22B54A64B, B87BBD1F611BF92D894169BFD4F23547E36D67DA0336C63B1533A9CE21CDC96A0C64C6FDD178D3F08F9B8FA67C55F28DC47A6FE8790F53517D01A961B276774EC9, 87F7EC1DB9880B43EF8834F32B5F032F7459A9B9ECB2A75EC011D81351E43A6D5B73541A1D9E5A9E518B9B53C4367330B9492A65DA429EA5C8CFC4DFE6D244B67A -1E278B885F1AA08AB89BCBF57321F9BAC11FDAC4A672CCE1B2AD681FDF2E1, 19A34D1B76A18D0E607EF77C8C814FF033602A21062A1E83A740B2862E66F2A1560D4751ACE19B94FA4CE11C865B64A52519C126A400FA1D4488FF945F4FB5DB60C, 90FB5CAF650751DCEFA16B6E8B0CD5730AB7795501630DA548141AD65516DC20A70FB250991D1791906AA8051C841FC95FFEC14B25E103E3A1471D4B33866039B4 -5A76A2991D4FE1A029D363E05965ED30435F904DF35866A51808385F9D8A3, 1D0831B6FD3CABDA8B1D516667759EB49114FFA69F537F417A4BEC464121659E0A1144DE9F9436F071BAFA3D13AB7B4754110B230411F6C5D7B4E56E3B5BEF3D92B, 392535DF0A31A897E6694651A5093FA9A6AAA00EE4CC6BD57469369E023A76E1249117A3F6986AEAD1F62996397319732FFA864536C678167F7278991F7FF35687 -10F63E7CB57EFA4E07D7A2BA10C31C790CA1EB0E9DA0933EF4818A91ED89E9, E0B3D3C63E8B33E1ED24CC6DA33B6D72742A545C2158D0451194B3E1090BF3BADDE24EB99F58FB01C62524164F6188B0884AF18AAA6A448DA00744E2D1C893C432, C63F7AA54C8955D3909A8E319C919DD682AEE6C9FB4A91D1E5F3F9CF2962012D54DD1D681DF2C18840FB220A64F1D7886CAFBE7A91AB1E96DBB0476DE75591BAF3 -32E2BB76207CEEEA1786E82E3249556B25E5C12BD8E1B9BCDD849FB5C89DBB, 1B418A885DBE10F1DE1D4FAA6625E7C5B50E7F103CF198A5D037719732FB02A24742170611D9A17FF4457DD42F57F31D7A6B9297ACA94F588996845555E9127CC20, 13AB37AE7CC6CADCA4771D9C038E99E1D58874AB894F5B9BE8EC9F14F3A775D0CAC19F8B34A3751896D59D4F0592DEAC2D9C5049176E8A68F298432814ED9773A3B -98A832626176CCBE4694B88A96DC004171B143838AA52D36988DDF2159D931, 1A359A1F3D1667CDC519D36C1962CDCFBCEF7602E48910A5B33288A5EE547B6A3F94EFF8BEC2E547B5A9134A922AE48953B5369CF39839F9A69F11081D76A6BF3A5, 1615CCA77AEB96CE15EAB63C51EAA6EEF5261B162C74B3DC084C90B270DD50EF73FD0ECDFBF4B5BD230C1658BF972875D96165F7591EA4814FE4617F3AC7C283754 -1C9F897272464663AD3BE299FC49400C45513CA8A9FEF87A3C9A99D640D8B93, 1E4FE297E703C93E2B75100F44B6A52BEE272AEDE7A21AE9659E4BA43428E4392C1C27E5A6C9B66A3F412F4BF3843ADE045A1C1DB162D1485755F258D365B48F13A, 3AF8C0549DD3F8B0CDAF9755A6492588FB9685D008ED243C25798DA3C09F15795F7F4E1C82BD554B6C08CB80B425F009652D7692F57AD0B312AC9B05C8DDAC1F3D -55DE9C5756D2D32B07B3A7CDF4DBC024CFF3B5F9FDFCE96EB5CFCD82C28A2B9, 20CA37292450109E49A2A9D0686D1B43B69634CDA8CCBF78C6ED7A29FC1815EF3CB53D5222496D5F0EBB9E835C90493B90363E6903A5EEE8B6DB978DE8A5FAD2A9, 730D3811A46FDF1808F58DB195DF5D2B3A4FBDE18C8AA7A4077A76A4EFCAA46CBA96FA112170F6F430373D2CA457B3D57094F486E9B61CF8EDC1552617BF66F1D3 -1019BD50604787981171AF769DE93406E6FDB21EDF9F6BC4C216F6888479E82B, 18D651487BEF70163585C3C8372872EB86E6A990D4E719C978C91F3A746F74A21360A64BBB66865C3EDE964DFAA2743DB4E4BD62221AA9AA11BFA9F5395E7131FD4, 13085D837CC678A887A51F8D71EA4C19D1D0EA6045FEFF3880B267ED7162D2772FB1B71FED0BAC58BB82414F56B0853864D32E03EE2069EA5C2CC977C8DAED23824 -304D37F120D696C834550E63D9BB9C14B4F9165C9EDE434E4644E3998D6DB881, 180F36A0129B527AA2406918B35317A7B46AA598F972066A1A507358AB092859299D3CC5903E4AC88B338D0ACECFD0EB204A3453E01CE0049C01766EF82C5A34928, 6AD97A0F30FCCECEF1FEE695711E3A496E46DC284ADC1CE2026E14B569F7EE27729D55C1F7C0E4511B3719492A6D3DCA83CF1E28DF77201944FC41BBF73A2CBB6A -90E7A7D36283C4589CFF2B2B8D32D43E1EEB4315DC9AC9EAD2CEAACCA8492983, 1A5B4157F0C5FCB90A58A5DC1D14975B15962F49DBBC2EBA31A65B701C238B0AD022E24E47E587ED570595C9162F3E421B7F7804B6154B8D606641A82A7B5BE5CB3, 12F37607BE36AC4DD47DCBE8015B69BB588E6FA0BC01392B2B36C6E290F5E969BF83A2D1B8CA4EFD79AC7E5B224134650C2C39EF047AF43791A410AB4E68852F186 -1B2B6F77A278B4D09D6FD8182A7987CBA5CC1C94195D05DC0786C0065F8DB7C89, E63A4F551D90B514F4832649A06CAD4523914E6BFBC391A726E506ECE986510A5ED3C551794062755E5A228F3E9957B58DEC10D80FF5A0E479809F375F32274A13, 1EAE6C44B101FD4805CAC7FC3BF97BB1A68149BB17C233E85ECF4A8836C5861AC92AA606ED12209EFE1B1E3022CC3870A1D53C9BA1A4348FAA5FB01BD724BCAA3F8 -51824E66E76A1E71D84F88487F6C9762F16455BC4C171194169440131EA92759B, 1F02E70FE3DCAC36151EDAE25C6D72813CA6DFE36476FD4682E562E82DEEA12CDD3E0B37B60AA10F7195BBF9B0FF61927F444A80AC0B4ED1DB14074F4D5A5E4427, B128F9D80F6E58DAE2EFAFD9B2C284E9FDF43681AFCEB6692E2EC590C3F52B527FE574B816FE8542C5253D7FBCAFE011BCED52CEE20F51CD612F57045CF0EFEE1F -F486EB34B63E5B5588EE98D97E45C628D42D0134E44534BC43BCC0395BFB760D1, 9C0007EA99435B2533454E908173396852D76E54753F270D28E8F0B2E17AC7EB3394A052F105538ACEDDE58FA2B7274911F952015058333A123D5262B241933818, 10C2C8283D9D3709E8297555534587F920ACF83CAA8D6B90EA66486F82B02AD9C0C85AAA0C13E1504B70D7C630F71971ADF6E2DE4D672E1AAC0DB2B8DB0C726A680 -2DD94C19E22BB12009ACBCA8C7AD1527A7C87039EACCF9E34CB3640AC13F262273, 10C1903FB8A32CF20C7A12DAD680CEBB307607879242D08DBDC8C903C11BFE85208701BDACFE16108C22B0BD33D030AA9700E9FDEF79C74E86600134A8222D9A502, 13A88FD6D22788E955666D60008D59354B6334AE2516231C5C03C3BEF456BAEA119172DD74301F53E80344D4A7AE740C1F357F71D645E17338587F036D38B383B3B -898BE44DA68313601D0635FA57073F76F75950ADC066EDA9E61A2C2043BD726759, 1A1CD70F1E683ECF127EC2772C379522976477E1D0678A50CDFC7968FDA4927C4DED88D520474D314F322DBD76571A269931ECD5435281D92D7D57E72E7E659F5D4, 1B627A3A526D1D7BC41D5843B213BAFDDA248662BB6E193CBCB2B6DD286960B95DCDCE96403CED7408EE362D21C041BC0F3EFE412D6051D1E59464D472118B87528 -19CA3ACE8F3893A205712A1EF0515BE64E60BF2094134C8FDB24E8460CB3857360B, 5A543EBBB1F837274873B93FD59123E0C45FECCC0F0F52A037F10332960AAF0193402A86485C3FD904C349EA2EE2A9AB3EDD1C3707D2BB7EB00727E33B782FFA0D, F22375846AFCBA67544E2716B6A90EB56AFAF8C5B82E8B3C8B8AFC0FD624D079028EF685471D7EEFBA4F27CFDD34FF45E966698BBB058AB20B0C256AAD7DEC026B -4D5EB06BADA9BAE610537E5CD0F413B2EB223D61BC39E5AF916EB8D2261A905A221, 1F3F9B2CC9C1E07880A96698C753CF5697A3BB8F2043E26A211026C0AA9D3CEF50B0F8A12B7D99E8FDECCA3BF921D143739AE0D9EA28A2E3DB4BC49590FE16BB4AE, DFEFF48E42A737A51014392E0AEBBAC0282FF7B3E566D53EAC71DF1ED5251A8EE6FD08E49077B755498FD5E5A6C9E15697B7EEA93AC94B5AEC19EB0EE7ACB99C -E81C114308FD30B230FA7B1672DC3B18C166B82534ADB10EB44C2A76724FB10E663, FFC1CBB203F198EF41B40F208C5391AC63C9CB2869E21F21BE8CFB881F832430FB6BAB63B6A3895A29EB3BD5701B1F50ABA29B1EED4B8C3AEDC012F1F08B6C12D0, 1DCC33294F3CB76499A8A19D7F89D88181C0CA4912987F9120C909170CA20D2E6B669E42D46D2EB14CC0552833C71872419E098299EE54D96F9BCAEEA80EBDC5FCA -2B85433C91AF7921692EF71435894B14A4434286F9E09132C1CE47F6356EF132B329, 1D6A85F8B70108861307710CB8D7BB3D1B591CAA4610DE8C7F4DF1EAE6DE9B51320F1E21FC6515B1AE7F2CD3C00EE1C9264BD9696D56A7EC83ACBAB9203EF957BCF, 1006A5B1FA539993E8C089225C958EEE173E63065CA68CDADD692E0BF1CB9B34E2100F62B2AF92AB803C6E8A00B2098EB8402596F1472829B756CA66BA3759BC0D7 -828FC9B5B50E6B643B8CE53CA09BE13DECC9C794EDA1B398456AD7E2A04CD398197B, 1E7F332DFF1E2D2459A67A0FF1B84BCA3D46D093F583C29D76E1452BB750A9BB4187B1DFCA2F8B56FF032BD43F0FBB29D6D24933E1197DEFEA1AE89944F94179747, 12CFC33FB4BFEE0FC122E3DE5EDC67ED76B61A13F27CFEA2137B6CAF42C002E8A5F5E61449054FCAA1C5E740E1B2DBF21DE5A816DF2D892C2C20C949C46CE5F860D -187AF5D211F2B422CB2A6AFB5E1D3A3B9C65D56BEC8E51AC8D04087A7E0E67AC84C71, E953F7910E7A89904FB2E7DB9B4F9AC1D62DC5B40173273307270C677B51B36A8DC2FA7953AE188D8519F9FACDE50100063AB4653C0AB071E0596EE90BF675E9C6, 455ACDA2038D64CB38D887D510216B1A1946E148D7955808194CB0680FEA8E43CF69B76C36B79BA7CAB44BE515ECB27D25D96CEBCB4A19AD4927B18CDC7ECDBF71 -4970E17635D81C68617F40F21A57AEB2D5318043C5AAF505A70C196F7A2B37058E553, 5383BDA32EDE6A7575F29F48F9D84289D00645674D61DAA74A1ED23CF20DCBCEBA7C074AFEAC4A472431D3E9AB481D6350AC567F818EE71646C579D45763A0B669, 1CADEAC716DA20F02E7B10F8A7334A7692B5BCF85AD19B8F3AE1A4D7BCED238FB0AB6BACCDA35A12A2F2B8CE9A4E02145A7B3B6CB099F0928E7F47097E6F5F2C7FA -DC52A462A1885539247DC2D64F070C187F9480CB5100DF10F5244C4E6E81A510AAFF9, 1BD4579B3E45CDD3F5375E28A03264DA8774B801C774CCCAC16D102CEC7C6A5803BE118E1AE9FBE8F3CBED76C3C44DD8216826F32B6B01520C195DA3FC88E4B115D, F0E428AD2666FB219A2FE10824D4BC3252A2DFF7837EF9C43B2086249F882692C38E6DAB2F81968709393012FB6295133656D3C8F8E761368961E393F6DB838159 -294F7ED27E498FFAB6D794882ED1524497EBD8261F3029D32DF6CE4EB4B84EF3200FEB, 6B46BB397CE7AB596A2AFB3C34EEE6834DF1491B47F0DE7B3D2990A485753D6C166194484AFB55F38C5175436E5A9F128BE0BE0019B24AB71A34E42842D73748AE, 11925CFEE57807337021C6F47CC72712C03E7EE368DDDC30E0130E9370D807069EDD619A21CE113A07B2063F9839B3954139CE9D1CADC158E638D19307ADB216ED8 -7BEE7C777ADCAFF02486BD988C73F6CDC7C388725D907D7989E46AEC1E28ECD9602FC1, 18729744522369D94181089B87BEEA5BBF0C661F21EC5BFCCB5B3880449E3C4DE92641D043B46E5572F2C9AD3836420981156C5F48760E7C393C29B42687EECAFE1, 16917E1777E8BC48D8E68A06A315ACCCB32A37B6E6EC3FE99E6F8A633DB23544A6191730FD4D64CD60256753E9A07E5423AF425955231452821380617FD34E6859 -173CB756670960FD06D9438C9A55BE469574A995718B1786C9DAD40C45A7AC68C208F43, B8C1A2FAA4A38C6B5C086B3E47FEF5D32F3AC9CBC21BF67EFC711CE011B443F117208A16C3694C16BA84E0712C243C13B2F4F7BEE7B1A37F2AEB6E7E544F21F0D0, 9C51A7F89AEFAD420E44B4DFD3BE16BB66E10342AC8BA42F929F18E25B59D22EA2EB1F83D39078AC903817136B4F472B5E87EA2F6CBF912BB7038F5504FF8C8914 -45B62603351C22F7148BCAA5CF013AD3C05DFCC054A146945D907C24D0F7053A461ADC9, 18AB4B785CBE1161A362E5F03D845438758C58A5EF9620B963D5B42A1EAA8F4C49AD5F9FD2082E22E5065D2FAAE0F0E1C83E294908C99EFCC6064A532E52AD68CF9, 2538470BC76D01561C4666A8E69BC626D44B52FD225043639CC3E9922E38A5C292749F8205D21CFF8CAE96837FE677BA2B9B7C1C8690FC417E8EF2E3FF03F3DD6 -D12272099F5468E53DA35FF16D03B07B4119F640FDE3D3BD18B1746E72E50FAED25095B, E4A52924D439236B1A1BAE96F553B2311FC0AC49B5BB80066B00C26AA289618BE855523C7E699B6AD2AEDD03DED3A9F6EDCA065FE37E5FA697E273215ECF45BFB1, 11168C369531E88137F59DCECD60055F4727B03641476ED173E46EFD6B9E89CEFE115AA4A7A9391141F7A84707C78FA2ED89A26C4DC12DAF7C75245F0EDB85151DA -27367561CDDFD3AAFB8EA1FD4470B1171C34DE2C2F9AB7B374A145D4B58AF2F0C76F1C11, ABD75587F23664C736EE9C39EEF7EA79A8A5E756607E6567E0C2E3EB8A3A6BADB017A40DAB56FD0F56572ECDD2986589941DABCF7D46F840323CD60FE200AD01E6, E5DFB5B010DB7E1A6D634E9AE22E141551A6B43D3DE32B45DDABA4096500ABC1F50E2E2522CD9BDF74C6E6D340F35143E9885550FF2319986F17F6B85456629621 -75A36025699F7B00F2ABE5F7CD521345549E9A848ED0271A5DE3D17E20A0D8D2564D5433, 1F3DC34CB9A1697825462062316E191451238CB41A9826DB5E53A3A082B9BD41DEDD03E90675302C81A35294F0F337D86DCD7F71F3362DC7BCD37A37622A3B9F061, 7258ED67EE1F89F2D00BFD90F18F8D5405CE23509A3F8893B94683794D19D5680FFE4B05C91207C29DD4F44C8D6C9091CB254463ED419E534115A93857D3D99D3C -160EA20703CDE7102D803B1E767F639CFFDDBCF8DAC70754F19AB747A61E28A7702E7FC99, 197339C4DB2660663C9BA318F1A871179FEDD145084F5A4607BF0BE5892C590271AC7A22DC1888F066931DB069CF1F9DFD4A26122C64DA097581DEED417FF021FC6, 1707C2DB68D0658BBDDF5C311A8DD905538FB345321BCD65B7275983B3599873B631AA12BB911AE829523C5542D2709EE3B9F84BB509EEB70F5CFEFB23720E432FC -422BE6150B69B5308880B15B637E2AD6FF9936EA905515FED4D025D6F25A79F6508B7F5CB, 19A9A57FBA49EE9897F17B0D51802625E0CD5635DD00253BC0F86066AA9CBA83E9A44E5CDE14227C29AE0C37476E38E2D9FE4A4E85BAF6E3E4DE8B1E8C1E2B92668, 1E4C99F87C7A0C6E6700882ABBDF476A7EEFAEED07093D36A212F9512A8321B60E3B2C4FBEB0F5119A33AD5340A162882FEA16841521561708EF5335B9C36B27202 -C683B23F223D1F91998214122A7A8084FECBA4BFB0FF41FC7E707184D70F6DE2F1A27E161, AFFADD86FDAECEB5FE87E5D68BCA5D6FC66FAAF75B235D75056C703E5C7D08C8568AFB7FAD0318B455BB742E5C5D573D0E777F1AAA6932F12F1B4CAC01D4F48B9B, 1D46544CE165765D7DB51CF3C4D49E75AAF0D8E19736E38988047627CAABB924A9593FA5F6E986330D6C77350A77B0560BFD3C6A2BE3A4DF3D4A224F033BC1DAB25 -2538B16BD66B75EB4CC863C367F6F818EFC62EE3F12FDC5F57B51548E852E49A8D4E77A423, 9D634B0CFF495B37AC29CA30231766588AEA0BF70E3B50A57BEA4159BFBDF3A728D1A4C508A0B9FFCD7A5FE17060BA9C13CFCDCCB48C73230B8D980E62FBFB3E21, 1AF3E53AD7A892A66757823448E49F147D8FE84A0FD56C34C6D536FB2060DCBFBEFE3D17A4981549D5790028D34BA5673F420B1AB09364195E8DE4B3130D6533117 -6FAA1443834261C1E6592B4A37E4E84ACF528CABD38F951E071F3FDAB8F8ADCFA7EB66EC69, 1A6571DC66DDC875EBC7128C7FD1DD5A6838546BD6E101B7925BF891C74B3CB50D29E517DBCA28A538C5AFA9296854A263CFE612364EAD8566A11B1552474146537, 1C81C3E9D9E771C0BAA09224BD0008A11F17F14B68136C61A02D03876711C08FFD12227570FC67DB8D5A7DEC702E1BC928EA3EA3370A8F7455113338D8A27965279 -14EFE3CCA89C72545B30B81DEA7AEB8E06DF7A6037AAEBF5A155DBF902AEA096EF7C234C53B, 8ECE9055639C581B93707DC57F1EBFA5AC5BC5DBD73A05E230CA4C7C1284FE0D47BD8E42F10BEB6576E2070CA1D307D23E5EFB51D1DC20AE19C50BDDAEADADB666, 16CECEE05BA436340253C616F1DA3DE5CEB5A96BA7C077811E3AEC39A5B06B829A959213655ED6F2646A6AD1F3FCC71D18AB5B6F85BB72A15A8560356D6BF0C43D2 -3ECFAB65F9D556FD11922859BF70C2AA149E6F20A700C3E0E40193EB080BE1C4CE7469E4FB1, 108BD3A64E5D20457FFBA7C8D687322232398D44C8A2AA2CEBA2634ADAAC5B95DE65A32B34CC4A9ABA606E2100ED7D968AA2C29B8726D94060CC82D833926D7B9A2, 10D2C7977E4F7CAE8ECF0D06F93766DCDF35DE069D00D26086193305A6197E392FFA92061D019DABC648A9DCF430AB838F2CD46814A3F627618AACDE1756D712333 -BC6F0231ED8004F734B6790D3E5247FE3DDB4D61F5024BA2AC04BBC11823A54E6B5D3DAEF13, 14E82F5E00E4935979D0512654B1B9D2CABF8257FD5BE4850FE76DA5EAD5E84804975D2DD2866FC1784EEA04618E183F6284FBC7C62AAE47013EBCD4590F2B3D6C2, 1A7194BE49BE87849376BC8109F94547056936DBEF812319CD75656EE7F54A152576840BB0399886E9F80B76148208B21E53E0CA4D28F1505421CBD1C6821CCE476 -2354D0695C8800EE59E236B27BAF6D7FAB991E825DF06E2E8040E3343486AEFEB4217B90CD39, 852E915A7A02E40E80A2A8235C2B7A8D45E147EA0549D43461B4BECE2968967F64D8990FDC738CE9DACBDF1FB766240F6F35998EF1E4AEF80AAE4A6EAC04D820EA, 1767EA9A64894B2F66C3076202B9A2AE8805C46FD459A2C8E6110EC78455439593C5EA721489364487EA6D90F3BF8E67D0A0EC39BB430FBC70527B6EBB951DC0B12 -69FE713C159802CB0DA6A417730E487F02CB5B8719D14A8B80C2A99C9D940CFC1C6472B267AB, 1D7C81ED3CE43F21CE09B33EE9A2A985DFF8AABAC817BAD6A99AAD667F44464B529BE9F198546118D5E3525FF0BABAB2E880CBEB0BE003BB04CCC7A5A5D0941894B, EDED4661C5126B5462FB1901A924B7F8FAB742D6625AA9B70DC077D1AC4FB2D30230EF300FBB29B8B4F2A100104A9E630230346EE34DD00B0FD029130CE8880C4E -13DFB53B440C8086128F3EC46592AD97D086212954D73DFA28247FCD5D8BC26F4552D58173701, F5F9A310F3CA4741EE02E3B2A6FD6D74590E9E0F1BCF0CAE1493FF0F558885F75E7A028DB98F343FA0F64D62AF378597FBDE10796267E481C2F5F13C9379F68C4D, 1DBDD5A00E6232A7ACDF3A1C381DC6C6FFD35DF91393ED9FCFF358CEDD9AD0665EF4BDA23D3DF531EE648C42FE52BACCBA29E6111EBDBAE45AFB075312DDEE6863B -3B9F1FB1CC25819237ADBC4D30B808C77192637BFE85B9EE786D7F6818A3474DCFF880845A503, B7AB75D4B652C91083634B8523C1F2113CE5AA18AF727EB9986929BF5817B90B8242869ADCC673A993B688191E06215D208B31B422AE2E7762CB383F3EEA071B59, 40C822C2A70CD378592127F2B43B1EE965CF4C8B25D60E620245F6040378CEADF42112282101EDAD44F4A1C0089ABF8CFBAC1AB25E429E5B0F9984325216BB2142 -B2DD5F15647084B6A70934E792281A5654B72A73FB912DCB69487E3849E9D5E96FE9818D0EF09, 23BB0BBE506F35E1D04F7DF9F4841129F90F77B6E8B480055464020125C064FE358CBEB08954ECFF1677CBA0D685433C2D3D927F60B18EC557452B59B5B13C16F6, 18710199C5E7B1DE8A3F3E2F8FBB324DFE81C125EF81C54FBB4897FBBFD753FF1F3C5622C2346909D139BDFA7D8C3C0FCA0FC359F427C1FCEDFBF7BB8A6CBF2B312 -218981D402D518E23F51B9EB6B6784F02FE257F5BF2B389623BD97AA8DDBD81BC4FBC84A72CD1B, 19EE555DDFED3875BA08AA6145D62D17D9CAE348EB031320A3CD088150D1F90EDEBDC61B482E97D19AB229EEDB23F1AF9BCC62A6892AD1529FDC7B0E6234222C7A, 9314C13F2224643EE0B019BAD6F3774F7CB60763F83B546D3B8A7946FEC5209857BEF2D099EDD8C2FD215878EE6484B7BE3CC3044EC098CE2FDA83091B264899C5 -649C857C087F4AA6BDF52DC242368ED08FA707E13D81A9C26B38C6FFA99388534EF358DF586751, 16075372C721674577CEE52EA455128D3998292A38BC88B4EA697D42143325AF07DA057F65CE57C90C0365DCE08F7E5B95F2550A1CD0C28D3515861FD0177EDD209, F5BED40444A770145B534AA1D862292CB1340409A356555F75F0EEAA740C4F86CACAF244DC66924CB2280E5CBBA6789F4EAE28A1D08CF0F36A6DBB446B87FB2338 -12DD59074197DDFF439DF8946C6A3AC71AEF517A3B884FD4741AA54FEFCBA98F9ECDA0A9E0935F3, 15515C1294E288CF1596287A48613C5FEBF86E440338DF09FDCE61A7062FA047D1F1233DD630D625AB52A0E2240FAC6D61026C8A11755F4FC14D90B0DBB229A014C, EB06C276F432EA10AF2E558DBF476575772B86AD17DCBF894E0DA79DE89EE46D55A4D5E96CB1AF668353C1CF6B54B3A4A2EFA65BAB36AFC775432624C1D2D26CB1 -38980B15C4C799FDCAD9E9BD453EB05550CDF46EB298EF7D5C4FEFEFCF62FCAEDC68E1FDA1BA1D9, 153A4BC626A9A8D19D8A1646954B1005036DA02A5B519A51540A55C53F3E0861DB7FB007503F805521C6361B6964C3CB41B5FD0902047111A49175F5B24D5F9DC40, 1D5F0402244D4C1D45942553CAAA51107637E7C93FA54A83C9F5D55A80775AFA1AD4374EA2D592008AC100414265377BA8BF3EE11C00FBDFC1DE4CB9A0FE36F9721 -A9C821414E56CDF9608DBD37CFBC10FFF269DD4C17CACE7814EFCFCF6E28F60C953AA5F8E52E58B, F1062444D092FBED2979971EAB4D274A10262112FDAD0629AD5ED2232BA94BD9ABA9A3991686823A631E6FC37A7DEF9C9AF9E93769CA10308E7DDEB39ACB042DA0, 18EEA79622BE1B249B37021D0A2B2F3CB16DD80B8834CBB944BB5B7C648C0E9BF6AEE03209992035AD418C6B3998BE7C7CAA2A9C315236CE808CFE32FAC7F9B5DB -1FD5863C3EB0469EC21A937A76F3432FFD73D97E447606B683ECF6F6E4A7AE225BFAFF1EAAF8B0A1, 16A7B3B8A011629BA8FC3D6B73239D53B2AA8123F398481BA5DEAA77914F223F158F6BFE6A43BC783BD36444340CAB70371871835BEB71F25F38150F2BBBF0AAA20, DE1A1D2DC84533D4CAEDF36862796C7EFE8F3FBB2477516AA2316C5DCAB66ED9D158BFD6475925B8EE68A19C506D04B010B76B73C8953947B450763DA698A95873 -5F8092B4BC10D3DC464FBA6F64D9C98FF85B8C7ACD6214238BC6E4E4ADF70A6713F0FD5C00EA11E3, B3A32B8F0BF1261463F92FFD6CA9D33B7822DAD48CE12E202380D86C1CFA67E1184981A0C2553D72D4145AD6F8A6E2B6CAAD43E36DED935D27F5E58C8CED0ABEE, 7EAAB85F3096772A6BD6715D78ACAB8F3BED1DA00714FFA32D89C84005D252CE762835DDE9E721102105E475C633181680410B3285365E34AE4F7ECDA742DC404A -11E81B81E34327B94D2EF2F4E2E8D5CAFE912A57068263C6AA354AEAE09E51F353BD2F81402BE35A9, 16293E3C8419D299E80B94874AB33A48B6EF4C68F8BDC5383FBD324DB60722AE3C324E634F5EC766F429AA82F9B37519D306C9A9B171B3FE010BFF6FE248E776421, 1EB9D1B34120CA7A75F4422A7FF649DE4A9053CC549688E06F9C9F1601F277BD8EF927BCC5250429612EE754F95E79EBE89D886F20A639022168AD47CF8E6C5B1A9 -35B85285A9C9772BE78CD8DEA8BA8160FBB37F0513872B53FE9FE0C0A1DAF5D9FB378E83C083AA0FB, E8B32CB499ECB3E01DAE281F97368802E734B54A4DD62197D713386ACCC0D268AA6FB0F4B04A17E7571FDEBD7B82D9AAE179B602B002304C0C96B501A601B40106, 185428F1BD795C5C11FB45B9EB69E2D12BB7F2F4608BEEF4C6A9317911B0B8B5740BBD54BF899812AB38EB6ED33A7928AE6B9AC49FDE34C3009281D6C62014596C1 -A128F790FD5C6583B6A68A9BFA2F8422F31A7D0F3A9581FBFBDFA241E590E18DF1A6AB8B418AFE2F1, 28328B0CB88F54810A53575CC43C0C8195C0ECED24B4C4668E6C43A6F1C42FB6FAA8D2A9DFE090F135B3FA4FD80208A03CEB8F5DFBBB41204590A670F250F80A5A, 1E646A13E24FD0ED26166AACF070A913B06502ACC9F4BEAEBE1C1EC4347FF0B56A3BF97A11C55C1EF82CC298C393D836C929A43A6E605BB4CA1E72DD4D02D50282E -1E37AE6B2F815308B23F39FD3EE8E8C68D94F772DAFC085F3F39EE6C5B0B2A4A9D4F402A1C4A0FA8D3, A01C54C9314D22DE68E6F90046F8CB4EB4E06D9F57209D3BD6F1E043AEE9A14056B9FED753DD1B054E8104C060637F8FFB22BFFFE77C8417B1977AE3BFFDA8B0EE, 1DDCA880C7AA445F1B154277E9EFDF46E65E1BD60D49875AFCDFCA1041C5D79F15B825B2F77787D0A38518BA80017215CF3A5A77F0A73E4E99FC8E5CAB3FA417325 -5AA70B418E83F91A16BDADF7BCBABA53A8BEE65890F4191DBDADCB4511217EDFD7EDC07E54DE2EFA79, 1369E0815170D373D37F3288BBCFDAE28DA52FB130FFA71157E472A05E75E9E945E8E04220B3A578EEA28386611C63AB52967841F102985CDB40A5772F091721979, B13A78147B142DC325879992F8539804AF4674B0FDD63B93E945E9E54C000838E76429441F0E8A0F497B9EDA8BAE28437B4600490A88C7DAA6D10C1125B0992A48 -10FF521C4AB8BEB4E443909E736302EFAFA3CB309B2DC4B59390961CF33647C9F87C9417AFE9A8CEF6B, 36DA5963E99910A1A68B127398D3FFAE34EA7CFBA3EDE70E12146FD4BF8C1701FDD1C38CA9F73AED1F6023D5C0A0B2B2B05159464CA22E82AAE4950E46C7754117, 1C7D90BC4A5A2A568E89E2D00AFF0AB0D166581A72786380C5A73FE196B4B5487281681FA883F21BB6C14753E696AD56CF9EDD192B1DFDB6FB9933DEB19F74529F8 -32FDF654E02A3C1EACCAB1DB5A2908CF0EEB6191D1894E20BAB1C256D9A2D75DE975BC470FBCFA6CE41, 16A810D97154E1989F831932E98792A3166E6382CEC6B5283EDCF1DB34A1499215B3D11401B0D43CEF4D1F3FF95AD42B4D8177D292EC288564FDFCF4B231C0939FF, 160AD3F0BD27347233370D71201E3356E37D8770C40C56CD99AD699D5C9AD38FBD2167C8ED288A44F08963FDA2820DDA65C36513FE5C42409542E4802E4BE5B5BFA -98F9E2FEA07EB45C066015920E7B1A6D2CC224B5749BEA62301547048CE88619BC6134D52F36EF46AC3, 1807A09363E63533ECCB0ECF180959E7ADA64C6C0A1048D7AB81DEE383C8466F8F8A1A5098EE5CD6277806412947DAD2686A7FEBE93066D02ADC4AE6E0E4758C884, 50443D8C393AF39EBC95BD1F76F288260FCAB0B5A494A064CAD1F7A2AB1D273DDD7BD520C1D7B91D622F2D9D5FB79A46FE5B3C00A17CD7DD8B750B05D50344F8F -1CAEDA8FBE17C1D14132040B62B714F4786466E205DD3BF26903FD50DA6B9924D35239E7F8DA4CDD4049, AD85E38956CCC0F3D48DCD3D46AE51DCC5BFE7CE21F7FA9C1C757796AE8174CFBC0CEE9B1894E52EC8243D012DF6495C6CFA08665F9C931362EEF089CD4F0C4C44, 146336282DAF91B0A26EE20548F978915DC6A84C1361D019587A98A38BA5D0988EFE56031C71BA4E74F0CA01261321DC3243943D7C9D32ADB45909A938DD3A8A248 -560C8FAF3A474573C3960C2228253EDD692D34A61197B3D73B0BF7F28F42CB6E79F6ADB7EA8EE697C0DB, 1E66D6896F7302DAA54CCEF2172C0265DEAB2BA08847C246A631CE6907D5EAD4CA78C299D41B35C4EA4477EAAA79BE8FBCF9B41B1774F8B1EFB54CD2689A8D65D39, 63AF0ACA68529DA67E4DCE456F667218A32D15EC4EEDC4F6976AD85543DAB81459B2844A463E1EA2378C3EE981C75C219E0CB5AFC5FEF7F368EC32B1F35DF22007 -10225AF0DAED5D05B4AC22466786FBC983B879DF234C71B85B123E7D7ADC8624B6DE40927BFACB3C74291, F5ECF3A8796865EC1A21C55D77D467A56674814842BBAE32EE0A2D0DF0C02EACDAB345798BA853ABEAB13C017B99DA5F7BE4C62950B55263565C7F938D4E8E6EFB, 31BBD71552D2A85EBD6C1C4AE68FA03C8B5C4358F65D39DBFE5F40975611FED7E0068430225CCA1255A1A0F190A81A097243501635111CCAFC62B98CC74587C7D9 -306710D290C817111E0466D33694F35C8B296D9D69E555291136BB787095926E249AC1B773F061B55C7B3, 1E958824845860B6DE2C49F60DB58593C7DE3F3D40DB8C239BDAEE35CBA77E86BD9785D9FC738454364898EF682904FBD69284B4CA8579F819B605A00E90F0D3951, CBF7F4DDC6801FA907A0347DFF562B217555DA0CD819409D1FCA92470279E06FEF56514E434D3E0EAC3F4D81B4CE716A89F061A9FD986626EE7A4EA424CDEEF777 -91353277B25845335A0D3479A3BEDA15A17C48D83DAFFF7B33A4326951C0B74A6DD045265BD1252015719, 1D089469ABBF7F177EE086B20D8F4D560F9D2F65FE301568FCA0E9FF8DCBD99D56A143D898015694A23F7204744A39053CEFABA04AF3FE0713C8599ED422409C3C0, FA0B96A5638E827A73DD30F585BF1F5BF2029C939E003CEB4E27CEDCD24420AFE4B7868B91B0127E534E9E46366EAB6D142B9CB7890E0470F14F0F34BC6CA987EE -1B39F97671708CF9A0E279D6CEB3C8E40E474DA88B90FFE719AEC973BF54225DF4970CF7313736F604054B, 7113015C26BF1BAE03B69F4057736389DA5467B2DA955CC58518E853F93AB4581A8B30A01E2597CD4425DA9EBBACD763EB41B7A4C961EB6F26A07202F0C9A23A79, B4EF5757BC534D27C76A7BA8563CD66ECF1E8D42D1F5EB77512E8DA4A62C68128389A3F61C4DB8EC4241FC177BED538226A825A2582591D69218ECCE47B8DF7240 -51ADEC635451A6ECE2A76D846C1B5AAC2AD5E8F9A2B2FFB54D0C5C5B3DFC6719DDC526E593A5A4E20C0FE1, 1274B0343F67A9984E16FD0EE80743056214310796F34D3976A6A8D43CB020B65C3D88DCF58B6C3B7C75A4F7112DC21B3CEA4BE2A80D099C30C44F3E2F504D3619C, EEC43E2E523577DD55CA396E74B2C6C6CCEF6CD565D5718471A0F73F2F74A152545F336682FDAB3DA0599DD52E46AF2A33F7C5FB466AFAAFCAA5918B7651A9A673 -F509C529FCF4F4C6A7F6488D445210048081BAECE818FF1FE7251511B9F5354D994F74B0BAF0EEA6242FA3, 12E87A58496C08ACDE681A371A002932F96EAD5BE0DC83CD756C0C0FBB69CC5CCB27A0256F78751C9DEC296BD9AC216110ABE2D36FF5C6C0E719646CD9BC9848CAB, 13D51083E33466DAA74CE90C42013673B567A1594DBE189EB584B67E9EB02A9574AEA7C9AFB30539B2D82A25B0A10BCF86CDE5ADA0F29FC861C1582AEF897021475 -2DF1D4F7DF6DEDE53F7E2D9A7CCF6300D818530C6B84AFD5FB56F3F352DDF9FE8CBEE5E1230D2CBF26C8EE9, 1AA70532FA8B2911D34749E66DA1BB5151C87B1411820B84746DA5D9551987848341D861DAE93FFE3FFB9A213D928CE02092C0BCCD00FAF16D22A8E02C8358752D8, 1AB4A1B3E648A8E3620136FF7445826600E94506F09ADE6B253515F8928C2CA997A1A665324082891388FF046C92E5A33B6F34A289BE1D1D2DDD32C9877287FFB57 -89D57EE79E49C9AFBE7A88CF766E29028848F925428E0F81F204DBD9F899EDFBA63CB1A36927863D745ACBB, 1FF46288A30152DA6309081DC1BBA11624FEC902A5A959ABB3A46C03FC445DE1BA6A71C3380CA21D757A1C07AFEC03AD23C0F515F1E9AF43039AF86B0115F13EE6A, 116660F754DCC1AFAD29679A16D50F35C37B60424E29A15D64F4C181A5A38086473EECC9D052E5F87F35492E054762EC80A51892F1A3D8AC963BB801936ADF9E032 -19D807CB6DADD5D0F3B6F9A6E634A7B0798DAEB6FC7AA2E85D60E938DE9CDC9F2F2B614EA3B7692B85D10631, E2E2659D183137629CE339815983912705862D112419B5CD3FC4EA51C9544A90BD1E588801913F12BDD30AF3154E116D9CCB5F745035FB4AD89CFA93FE4A25EA38, 148B85F716EB71EF8E4D698A41073FAEF30832AFA80A36A32D40A1F1B2B5D2663187C80EE5A01DA95D88207D6DE6AD84B50CBFC4D3CAE65C9B7C771F3193468D326 -4D88176249098172DB24ECF4B29DF7116CA90C24F56FE8B91822BBAA9BD695DD8D8223EBEB263B8291731293, FBC226F86D592BD29142CC8317D5B3ABE29449B677CB1B82AC622039DD89DBE1AFCA884E42CB3E07B2EA8115CAA0304E60DB626CFAC619471B750EFF62A4726E7D, DFE3C45B09642026C6DC0863F6F502A698D7188E68170FB79A46023B2C986C245F246FC0D53EC4409A81B26979866B9ABBD4D2083F23B628260B93BB914FA8345A -E8984626DB1C8458916EC6DE17D9E53445FB246EE04FBA2B486832FFD383C198A8866BC3C172B287B45937B9, 7F9538AFB15DD31A0B7EACC6912CC76FE8110FD28A900EEB0AA2910EFB693E2124520AA7DCCA641DF1D78D91091F901C759C932884245DBC6CE6A28D5934515691, 3A9DEBCE202031C250E079E2269CCE0E9E7A1E359E14F3A7F8D54B5A8A65E452F4A7ACDD448849F267C535F9C4DB5DDCE46A5B7F8120F639387415A4C15CA50058 -2B9C8D27491558D09B44C549A478DAF9CD1F16D4CA0EF2E81D93898FF7A8B44C9F993434B445817971D0BA72B, 1E5FD5C9C75CA0C2D3C43ADC8CD5C3FD62AF802CB61953315E9D4A1B8C195A62F5C2F8CDFB283D0B0DF7F11B48B138EF0AF7FB0EEF04E521D643BCE26BF6E279E44, 17967B0FAC085EE5D20FCB0B2709B5C248F24B65306BA860B5415A72D4408C8A2A7EDF85BCD36E65F85B545657B94AA209EE994FCA0D8FA2585F58C32F133DF02C6 -82D5A775DB400A71D1CE4FDCED6A90ED675D447E5E2CD8B858BA9CAFE6FA1CE5DECB9C9E1CD0846C55722F581, 1BC6904BA16978D90118BF7847B561CCEABDEFF76649BF1DD7C7BFC4866BA3890F36A0436475DAEB48036E10BE570A6F3642BF69124C47251AF89A9278CC6E56AA2, 1614884FB58B7765EFB0A666AF4D03FD52940BDB0020AE8B94AA36B4942CB4709F1264DBE0A5AD0BE53F57F8270FA443D4BB44D5534BA201D4704C12ECDD008DCAF -18880F66191C01F55756AEF96C83FB2C83617CD7B1A868A290A2FD60FB4EE56B19C62D5DA56718D4500568E083, 9B1D4C6D7F418D04F09AC17C612276BE0D03341EC838F048CEE9A2ABB73EC54815C99E20C51FE7DB47F8CF2A282DB44AB14A1FE920413F60449964B742F8B02C3F, DF24FB8FCF13B35DFCD676EBFAEE3E8D6DCD9C3623A9465BEA96ADA57E4B41AF31BE04ABD82400ADC1E419CF1A43AEC9C024703710660BF3A0ED096AB88A4F58AE -49982E324B5405E006040CEC458BF1858A24768714F939E7B1E8F822F1ECB0414D528818F0354A7CF0103AA189, DAE4D9F107CC11823DFE8293A1FB69ECBB9E946ECB97384C444B634C39FC02074DA7BE04D7FC5B68F73BE754DC3B32CDFFA82E9E1D6A3AECDA4699D0CB93F7F9BE, 16841ACF02E71D74B2036B6F1B1A9E060BF30E0F3FBDE6C6100D21040633CE7DC894D7FBDC785498155AB8E84582394DAC0341339C1DFC0078F316F9624285DD2D8 -DCC88A96E1FC11A0120C26C4D0A3D4909E6D63953EEBADB715BAE868D5C610C3E7F7984AD09FDF76D030AFE49B, 161107D0364D04CEFA9EC04CA61E26ED28698B8F90C5884003369C845A2AF92396C1501A56A600B818E688AA9B913E90402DD2C11A699640CA5B27961003CAF5C5C, CAE4335DCA78ECC080C6D6251E525E7EA6F29AF9D5220E9100413AEEE592C4C38622F902D5D29B1A8F96BA41E004EA9F3520DF16332A48C5345E600ED1EDAE178A -296599FC4A5F434E03624744E71EB7DB1DB482ABFBCC309254130B93A8152324BB7E6C8E071DF9E6470920FADD1, 1D61CCAAB9B9A1986CFD80B25C58B5BF17349AE6E6AB487D1CE00C445E89568C1584AD342E40F95D39E45008499F525218D7F3F386C8A3818475C4D4D260C9CBF4B, D9052AF5E8194BC8A13EFA0797FD4F1585B4F79D97EE261FEBEEC68C15B0B6E807800483694A5ACBB1993184E7741D78956555510C1CCFE285F7C3FBEB1DD25520 -7C30CDF4DF1DC9EA0A26D5CEB55C2791591D8803F36491B6FC3922BAF83F696E327B45AA1559EDB2D51B62F0973, 1516B4B8A638A216CCF3FDA789F265E0710C5AC5CC7CA9ADBC8C21992A7ED6D0BD282056E99BD2FB920EDB5D6EBC4AA1594C2D49B7F16BC4884F120456BD478C1A9, 97A845B03C195EAF74BDAC8ED9808A4655D7B141023599BAAAF4FB9F4F3383875D12BAE755219B7D1840A88A0994222A1D36AB929B9B12AB3F825E7665200A1AF5 -1749269DE9D595DBE1E74816C201476B40B58980BDA2DB524F4AB6830E8BE3C4A9771D0FE400DC9187F5228D1C59, AA06655EA7BAA2FDC21918D55027FCB1CB702DC30D410703BCE95272371A138C95BD13E63AA1F5CBDF3EE18457EF526DB733067BDE9F926BE6E011A32F0D766316, 14153B0F8B6C4AD4CEC216C28EE58BA2003B3092CE98995FE4F3D90B0814F71E2E027621007EBC567127CC20DBC01BBFC88BB23FA65E3B5D7E62FD21EE041AD3D77 -45DB73D9BD80C193A5B5D8444603D641C2209C8238E891F6EDE023892BA3AB4DFC65572FAC0295B497DF67A7550B, FB33691F370AD3058190F92BA7F06D284FB8DB5B15FE90EEEDFFA7B1DA706AD4EF7ECD864B6249480E8D91FABF770AABF36DBE26B52791DC164ECCFE8647DD6016, A501BB4A888E289FC4EFA7F0C408CA0336725829D5FC875143D4E3184D7C2CABBA5586710AF702B2B45FC1983BDD9C300EA86CDA223B7A59DB8FBB3773A623583E -D1925B8D388244BAF12188CCD20B82C54661D586AAB9B5E4C9A06A9B82EB01E9F530058F0407C11DC79E36F5FF21, 5EEC1A628A508CA7A549E77AE683842FC36D7AF0384F54C610A3334E7FF3AD9431BCB451656DA932DA230FCEED26095A0C7BAB19F5D28CFF45CF0C5E0A1E751173, 734279530B1A50BD84B0D0F8DA98800F2A9728333254F29B99232FDA0D6B0C56BA96D5A84E32E5B0704A06D600D6A40DB0B83CA1C6D01C7A29BA145269136E0553 -274B712A7A986CE30D3649A667622884FD3258094002D21AE5CE13FD288C105BDDF9010AD0C17435956DAA4E1FD63, 1B19DF6C95BDA62FCB386A76487544965A4542943E7BDD4945DA59E897ADEC0FAEB5C298361E7D97144F890C8F6CB4ED5D139E0F2BAE201A6859D59DE0800F6A7BE, 18878C679DE2FC6FF305A3B61B3DBE608A21CD0109A7E4A9A6A8C516CF393F2B5F90CCDE100A07E9E83A1AB3E1B18E3AF7D533F50EEFE25910F8DAAFC12273F12F3 -75E2537F6FC946A927A2DCF33626798EF797081BC0087650B16A3BF779A4311399EB032072445CA0C048FEEA5F829, 175CF3D0E1BBDA63D8E533F978D4B6D0EF6EF292433ECB7186216D15F4D56CDE6B2CD949A58323E7130F9E72A17C89CD58D32A3AB51E2A9E207DEBAAB85324E33D5, 13A0754082205127C4FD65976065B904436EE0731BEB74DD02292431349BFE953B8DCAE9A29AD924F4706E6372F6E30A1A695142815AB6EF3D34208FC8B67D3E2B5 -161A6FA7E4F5BD3FB76E896D9A2736CACE6C51853401962F2143EB3E66CEC933ACDC1096156CD15E240DAFCBF1E87B, 1396B8FCC0B17435E67FF47105282E3090A8DE3A75F43EBEC99041CF94D6679ACB215D84E7F30E5CE8B90548CDFAF598647502434C909F13BBBA7CEB824E96B893E, 7551CBCF404CD416CF86112511C97B90C8AE11B9C38156DC018FF8F97CF0A584FFF3A893B1A7EBCBDFBBA7F25975D1886CB435D671645B344C80EC55268980D3DF -424F4EF7AEE137BF264B9C48CE75A4606B44F48F9C04C28D63CBC1BB346C5B9B069431C24046741A6C290F63D5B971, 658D21B04BB7C57461C88434A25D45E0342EF60B29784C6D89BAEA32CEE97E851C142E8C5FBC5C0DE86CA53B402521B7F68EF42D2A9A7FA59ECB2248DE9FC6A6CA, 77480221F9DE981E3F86871DAA4D6B80931F505FDE7FA3EAB499A15F6159CACD3CCEAA18F8E595CF55C15BBA54F5E9FBBCCED5937B0A4935D87635C6BA9FA2A28C -C6EDECE70CA3A73D72E2D4DA6B60ED2141CEDDAED40E47A82B6345319D4512D113BC9546C0D35C4F447B2E2B812C53, 121980C2C37BEDCE3326677FF35C771AE76BE229B43A01B3C3F5D0C63C5E8CDDFA0D57E54426FD298543F55ABA17F408BF2589704A24F81377B148F92C9AA21199B, C05D2B359801DBC37651649B512F0B3C351569ECDBE80DE9D3860FE9F2BB38A7E84865634AAEFD2EB95C2E2FEA210298E0C09C50C625D2A2BCE61FD7A324C6CBD7 -254C9C6B525EAF5B858A87E8F4222C763C56C990C7C2AD6F88229CF94D7CF38733B35BFD4427A14EDCD718A828384F9, ED37DAE03EF4B2813D2F3E81E66FC87582CC1A5B7032E4E5E63306E079753CE2AC57ABD4D61BDD6ADBA549028144DC56F67B6B63304F38A6934119FD79802C353F, 1E805CD53068D979B31A43CBAC7D2D6449055A6085598CA827FE4A11755D8E320E571FD19F1A761281AC06B2847DD34CBCE12F1ABFD5A1755AD7C167142C0BE36C6 -6FE5D541F71C0E12909F97BADC668562B5045CB25748084E9867D6EBE876DA959B1A13F7CC76E3EC968549F878A8EEB, 1C4C0F57168F21D9D13B2FE10315B35D61AFDCCD8B5C97AE71D2E4305F7DD91B81A1C014D3527805717592BD75AD58308656B11EFE66CC2A1394663BFACBDC1622, 1B5EF0897B34AB0A00061B8D69EBF65B3B275F090686273310475D8448F2C1CA49475E7FA4BFA034D1F429A7C2BBC31882B9979E23C7B22F58A1B3F49C3CE97EE52 -14FB17FC5E5542A37B1DEC730953390281F0D161705D818EBC93784C3B9648FC0D14E3BE76564ABC5C38FDDE969FACC1, 11C0062E9776CED7BFCF6F43C9E15B6CDF00E76E8784374A406294C96FC223FB0C0B0E78D0841EAE90607787D9721851678BD4AB5A36B851E5A3C3B3E53DB11EC36, D6BE3739431207B31B4A752767A352EE066FDFD4C26B0B650ADACB6535B0FA90FB451EF577EAF681D363FF72D0C82D5A46CC4D02D7EC4F44ED97C625F2E2F30118 -3EF147F51AFFC7EA7159C5591BF9AB0785D27424511884AC35BA68E4B2C2DAF4273EAB3B6302E03514AAF99BC3DF0643, 171DFC8EDD79DAE5A63D6B79497C7B5EB4321C8752F0F766B8997AB8EF3B0ACF5A72F2344BB737CD2CBE56969D6CE1A9D71E3C9C53A518C626309D3B9AE0F92F3AF, 183BA878DD292A2271D749D106345546621C5C253767EAC72CA3F0367B50E25EB9201F2A8B3616160115EAE4615625A54646694540889FBA262AD60C3171C6982BE -BCD3D7DF50FF57BF540D500B53ED011691775C6CF3498E04A12F3AAE184890DC75BC01B22908A09F3E00ECD34B9D12C9, F207D39271725932A582154650156D6D38BF9F895640D55CB696C4D786AA53ACD7C1DD39EE7B7E0C2E401E0A3FE5FB3BD1C781449A638D55E49114DCF6837BD28B, 1599FD70519256F1DE4C58AEEC3B51C87AF3D186286678630915A355EE234583AF53DDB7FC4275ED66C68AB3FC2FB9403C601421556A6162F33334CA502498CD2B4 -2367B879DF2FE073DFC27F021FBC70343B4661546D9DCAA0DE38DB00A48D9B295613405167B19E1DDBA02C679E2D7385B, FCC2E5F471839FD7A4E786834F61EF6953B1F133E0473305C42A47F79100863AC8CEB3536FDC24CF7208FA74CD15969A2EDFC3321E15C467115A148DD5F1731A72, 1D24B7C1566DC10BBE2166872A3D96B18A934089BC31E873D1C4C7FAAE1D60FA400EBB57C2C20CE54F9B76F1C2190465E5C0B40FF2BC61BACBEA1D8C6C4B0E7808C -6A37296D9D8FA15B9F477D065F35509CB1D323FD48D95FE29AAA9101EDA8D17C0239C0F43714DA5992E08536DA885A911, 3DF965C45946AD537A86FC2B19944CBB24F90EC64899B98B4AE59BDBDD2D3BE2ABAFA6300D916DE8596C0AD5D539210E8B5013472022D5B7A543B652C2B91C4FAF, E90E42247029EC1E9AAD74EB38BEF22971B531ADC6DC665A7C492772DEE75372183678E0C73BCCB96E925CBAC19A2BFEA9E40610CBF5499189CDC014640F849FD1 -13EA57C48D8AEE412DDD677131D9FF1D615796BF7DA8C1FA7CFFFB305C8FA747406AD42DCA53E8F0CB8A18FA48F990FB33, EAC71B13C1006B0163DBFE5BEE05EE005B56794E505366429AE0000138636EF38C9EE9F38581253984481BD285AE21F0244EAD9BE49B576001A3608BCB9E61D1C0, E815EA8641A20B6E7EA92A82A3D55BD9C4FDF65489CB14B782D11913E0FC0BD546E5BE5D8A8E0334FF7255BF91DA611ADF182455CA65E9BD7C77BBEF0AB33CB658 -3BBF074DA8A0CAC389983653958DFD582406C43E78FA45EF76FFF19115AEF5D5C1407C895EFBBAD2629E4AEEDAECB2F199, 137BFE281C39C1A82BFBBF9E4F8B41477D916BFBC30545AD9868D3A650AECFE9CED818BA87FF07D4991E26FCD4A54E4594F91D16208ACA217E3ACD6EFDB47700D88, 578A287AE50EDDAA7E8449AB5A3450AEBFF0A542648E9D99DE733657F2C41D9D43F82A12AAF71C639D530BF30AAC13F430FB64E1F11BF700982DE54D440987936 -B33D15E8F9E2604A9CC8A2FAC0A9F8086C144CBB6AEED1CE64FFD4B3410CE18143C1759C1CF3307727DAE0CC90C618D4CB, 14ADF84B7B26C3B76CF0CCEEFCBC09A3A92870F7EE60C6F616A790FE2DC627EB28E06C5B2FC2E6890922EFB8383237A58870360231BC5FA2A48489B5AC76ECD152B, 8CDEB8EA82B077D2C87E3F7108A5FC13E3FBC9FB84413D99E03DE8DCFFC6647143266DA21E581C71C8DC68A7067B6EAB15A4396ACF2A1279F0B3E3E7BE1620668B -219B741BAEDA720DFD659E8F041FDE819443CE63240CC756B2EFF7E19C326A483CB4460D456D991657790A265B2524A7E61, 110959607CECAD1C0EEB261F007276A4B530693EB5B1EE3CC676BD743E0B062E80FAFB5CD57A6FD0A3368302B30DFEC3C160B941BCEA235FAE9E0C8395E55A85F9A, 19037164E32E56A58DE230792A5B3A67AEFE55A82F4A7D1CBE8C1FB706B7367FBD5D49A89D39DB27E85167993E9E5A9B9623E20EE463B49E3D30C048AE13C268F30 -64D25C530C8F5629F830DBAD0C5F9B84BCCB6B296C26560418CFE7A4D4973ED8B61CD227D048CB43066B1E73116F6DF7B23, 16F7CA28B99A2EDF84B4BE88B786B6B9A00740C2EF71D1667048A800E4C08C96B278AF7EF10716BC5EBDEA3697530C4D33EDD61DBFDA322DB3E805FAED9595C603E, 1776DBDD44736F14F5965BA7D3494985772D5BFFEFEF6B07109F6EEB71EB0BAA72836F0275819FDAA9F6FDDEB34C79137426EAE4C8BC9DEC3938BD423757E13243F -12E7714F925AE027DE8929307251ED28E3662417C4473020C4A6FB6EE7DC5BC8A2256767770DA61C913415B59344E49E7169, 46093616F98BAF2EB3E175DC458EE3C69E5C6B8B5CF13987E3A7A0A941559684F9229DE2A8E9ECEDD82F2897C03BE32BCF0898DE9E3437489431BD7A123C392F8F, 57381B88BFCE0A557F735D9665C5AB29DF169F254231BBBDE2E155B50DABD5196A9DDD183CCD8176BF4B9FCE09EB011C5FB30140BD79A7440064C90341C7CD89A9 -38B653EEB710A0779B9B7B9156F5C77AAA326C474CD590624DF4F24CB7951359E67036366528F255B39C4120B9CEADDB543B, 426C8875006ACDD8271F635D6E3A882C083690635A6C958932723447CB1358D86DCE4CE707B6E50F5476E7E99D848917231FB51C72B2425DDADA401E6A83785157, 16BDE232C303ACD1CA6FAC26991357278F9ED8BEC7DB42BB50D7E22CA0BC96DD316DCD87D4D0F532877DAAA6885AFDB2298720062B9E591451B5FF6CEFCB5B5F7E0 -AA22FBCC2531E166D2D272B404E1566FFE9744D5E680B126E9DED6E626BF3A0DB350A2A32F7AD7011AD4C3622D6C0991FCB1, 1292687676096BA03D01330426AD90A3F1D3772AE8197B1D2F6279FA31C14C26034B567BBEB7CDDA07BF26D1809A694CF6274539B42A706A3915C2F44046CEA0499, 14C8CBF78462ECF2090C0098CE7EE93C2358E7C308B17A5D599887FC20DDDF520F3CA8A15D1928E0EC67DBBC167DA58808AF42127B1C6994B7F3B18F51EAC57B860 -1FE68F3646F95A4347877581C0EA4034FFBC5CE81B3821374BD9C84B2743DAE2919F1E7E98E708503507E4A2688441CB5F613, 1FBD973F8AA1CD7E7E758F543C4B15962E243BA435A7CE62E75193045D248AC3CC08E7B717D6541F30041C02000311155C2F7B8BC50CAACDF9A20223308BA0B3ED4, 11132F7ECA282F2CD15B135664DC71B307793681D35D355CABE19601048E932287AB606919C7C3196EABE8A1FD7E60BC6EEC595619058B5A3832538FD67ADABB878 -5FB3ADA2D4EC0EC9D696608542BEC09EFF3516B851A863A5E38D58E175CB90A7B4DD5B7BCAB518F09F17ADE7398CC5621E239, 1172C5E0FB6D1E3676490A8F6A6F07BBA0168BA6661A2F81FADB201F9522839975840C028A8B0B60A6931692554EFBE883026A2C152DE91CEA777BDDC6F627A661E, D4AC0F11A8727495E69CD5F60359D12A0A1B11FDE3E00934299C0E83DEBBF7CBAABCDB875B24466CC0A43EDDD5F8D7546E4C227B24F7D4F7732B3E6650AA41983B -11F1B08E87EC42C5D83C3218FC83C41DCFD9F4428F4F92AF1AAA80AA46162B1F71E981273601F4AD1DD4709B5ACA650265A6AB, 1CA5C8ED8414E7F8F6845BAFF4C222176323EA57470A53C69F8C43B5D4760E9041FA400BFA27F538AF1A55FEA6D04F5E14D722A1E728969A8704C96423C25AF247E, 166CA93A22B4587FCB2BDE36253A9B9F990C55119E3DA00619E9FFFAB11F979BA125F9864E0BE3047C5F8574AE27B2D39A081CDBE0DFE725D7D05A5D9DA69334358 -35D511AB97C4C85188B4964AF58B4C596F8DDCC7ADEEB80D4FFF81FED242815E55BC8375A205DE07597D51D2105F2F0730F401, B7E9D6A27F654531FC0F7C786F000863AD0D08FAA424DB04C37F85E91A43905EC1F50CF7E0DE5771279B6D00DBF2CC797B92F428F408DD4F23AEE37903F0EAB72C, 1986D1216BB254A2D161DE42417B688B83A75462BBD00E9C73EDDE6B1BCD3E7F9F0BE17BD038F9C0241974B294FC1278283527FCC83B8B93A0A6611D4B2C592EF7E -A17F3502C74E58F49A1DC2E0E0A1E50C4EA9965709CC2827EFFE85FC76C7841B01358A60E6119A160C77F576311D8D1592DC03, 236D2BF74A2778902DFC71134461968114F6CB85470D0814CAE32C93B1F67B4AD78129CDB257FAB298BCE51088B7C446DC98B20D2F9E591E1FC45737D81B17371B, 764E49450662287FF960F7DB953827D14CA687EAAB6F46FB2754EFAABE7B237033CD52F4C9AFA158494D105F8E284A07CD9061694DEE4AF200144B645BF62FB0D1 -1E47D9F0855EB0ADDCE5948A2A1E5AF24EBFCC3051D647877CFFB91F564568C5103A09F22B234CE422567E0629358A740B89409, D6C48BBDAD09D5C4D21C15913F12DE690D298D78919C30833234F234083C2FBE422C99CA3ED62A84C46B5966DA502C674ABB2D445F084F10EA0325DC725EBA1C6A, 1236C9FA47E0DF713E6FB06AE623DFABED654C699A50C9FE01F0473BE37886B96A20AA210441B28C0778057BF8B2E45421ED2941BC9EFA52791BD477EFBDE2A90B3 -5AD78DD1901C120996B0BD9E7E5B10D6EC3F6490F582D69676FF2B5E02D03A4F30AE1DD68169E6AC67037A127BA09F5C229BC1B, 10271D98E7D157B7462534EC909A78F441E2A76CB8DB4E70A1C3D0F25322440ADAC2398FA7A4B2400EA173209AE764425C3677B93C192CA2316A81C32B9040AE523, 4E1CBEE003FFC3496359FF19DE33ECE2AD87960998B25B7C744B096D4B0829F4553C60C55D34F742D685CBBA36153BF462DD7E516659F1B9619D9E58EC2982B716 -11086A974B054361CC41238DB7B113284C4BE2DB2E08883C364FD821A0870AEED920A5983843DB405350A6E3772E1DE1467D3451, 3C5BF99CBF25A5FBC1ED41341A01727F132CFB9B88F96CB4E205FF7982AE6430EECF9F1CAEB0616377B195F3D6CB32DD2B2521F98A5177D270A586BC03591F4B5, F13C82A9FB0BE0FC3285BBBB387C6EF42ADD9D8B1DAA42FBD9DB171220E7989C13FDCE7F6F049B649BE80E193845DE2B82D34ADB8858B3BDDAB5EB76490076167C -33193FC5E10FCA2564C36AA927133978E4E3A8918A1998B4A2EF8864E19520CC8B61F0C8A8CB91C0F9F1F4AA658A59A3D3779CF3, D974441FF93BD875D32F85621FDA40CC5B8D3E553898195D01951434FF62CEDC9E5EF9F286427798DABCF8D7C86B0177D57414A5BB5BE43E671112602B9CB523AF, 5DDC2DEF5B904E5BAFEC40B0BDB02D4C9FF954EB75454E68A83C0FB2836090AA593ED886780518F113C598BFE901724B64F3219779E9829CD4237173BE3B49A352 -994BBF51A32F5E702E4A3FFB7539AC6AAEAAF9B49E4CCA1DE8CE992EA4BF6265A225D259FA62B542EDD5DDFF309F0CEB7A66D6D9, 3B1130BEAB751C179D55ADBB49C6CC941440104AE070F4D960B6994615B661DC31EA425AEDE1DC4086E3671A82836E5AD425F73E76DE95FED7E11E28E7BDDEB27D, 14028F1E42C5B0B76832EAFFD5DABF2206A2DD8FC481827449AEFA922A0A117EE4D85DE95475FC3038B2D6543538FB0BF037DFCEB6A9199597A1BC2987CC67B23B4 -1CBE33DF4E98E1B508ADEBFF25FAD05400C00ED1DDAE65E59BA6BCB8BEE3E2730E671770DEF281FC8C98199FD91DD26C26F34848B, 15491048378808C7F9ABF6ECFA499A4BAF3208DED49D6048674EC5A7C5118B47748A66B5DE05E4F8D508CB5A38C02A9AB4EE56E6281738C4B24A59AE432B3820B28, 1F0CD96FB51360B9588233605504816284D6C46397DCAF1456CC40669408EE35B8E6F8C21AAECEFAAF135B9E2C051D657A657246EEFF851F80A1B3FE30900BFCEC3 -563A9B9DEBCAA51F1A09C3FD71F070FC02402C75990B31B0D2F4362A3CABA7592B3546529CD785F5A5C84CDF8B59774474D9D8DA1, 744DC5532622CE93265A9BD266A973120840EE42A70231F27735C12F262F486F42B9E34DB4823D824171E3952E39888FEB536BBEF3562F9B7FD08031D32A5AAB9D, 1D36375EDC6231BA3AD055C78BF93CED67B4970235AC69908FFEBCD5201A7D42621CE6742B2A7683BC701286DEBE2F1A576D02A9ED1BDF2CC7EFB8AD92AD9A588F9 -102AFD2D9C35FEF5D4E1D4BF855D152F406C08560CB21951278DCA27EB602F60B819FD2F7D68691E0F158E69EA20C65CD5E8D8A8E3, 1DC533F0E41046DE07F15B53528476DB472D8CCAC8028EEA5869BF60102921644F612DE0A96D8E47B2AACC12868CB24F1A6C89C5C91136DB9E68BE0A4EC7191F875, AF5A59CDADCDD5BDFA872792365E735A3507B76A790F8738C88E62DCF758ED22875CE8A27E3E166A5989316331A91F5BB0112590E6B2179903BEAF3179F2D1DD7B -3080F788D4A1FCE17EA57E3E90173F8DC144190226164BF376A95E77C2208E22284DF78E78393B5A2D40AB3DBE62531681BA89FAA9, 192E4960DFF304595C4F784334AA092C2C944CB31328A05C0224B63A8F0D5EA1753F591E02C35064680DBBFD6B8B8BB514E1E0BC4B66C67512D1080EB4ABB010E44, DBC0284A211FE68D52614ABA9B9BA5847BC114DDB1B2805F84F772BE295B0536520404418E2B3186A2DCAB4C4E1CFACA1D096BA3BEC7F32ED20AF10537A6B6DD30 -9182E69A7DE5F6A47BF07ABBB045BEA943CC4B067242E3DA63FC1B674661AA6678E9E6AB68ABB20E87C201B93B26F943852F9DEFFB, 1A72286CA4510335269C0A7A8528973C9057B408FA9344D1F4064FFFD3280B6897D1F43B3579777800F5C48D9E8555E5C27DC179BF25825CEF9FBD1B5B63B04928, 192FE4551454D55E266A623155D2473AB4DF1F675A453494D3A7E905B4DCA0959C98E865624BE3B84E6036939041D0A737582CB1F8404DB0C3BDF9990290A32547A -1B488B3CF79B1E3ED73D1703310D13BFBCB64E11356C8AB8F2BF45235D324FF336ABDB4023A03162B9746052BB174EBCA8F8ED9CFF1, 13093DAD0548EF1CD3DD104F6F415B4BDAC830442AE1946CC95D4FE385F7D89282360B7581F7851C0A484879E5B3F2799772E6BE515D10C90567D5B6462FABC8A3B, F0A2E650678B0526931C544D24987581E01C60A22DD2D5E32D908AA27B7C0F29632BDF2F0049F721783C472E5F2FA4F8AEE688FF530098B8CDB67968BB3354C271 -51D9A1B6E6D15ABC85B7450993273B3F3622EA33A045A02AD83DCF6A1796EFD9A40391C06AE094282C5D20F83145EC35FAEAC8D6FD3, 16382C2B7F9C282EDF4CC15898744DD404BEFDDD274461CC33BAFB8682B4C02417BB3512B566A0722B40FB7A5B8B3246F46621445FD1ADF186E2B7A9AFF802F4818, 1C7D37BC2A4F2359FD35A2AB14FFEB355C483453FBBCD7A0D0F4AE0B30E1562FA3D315393E5702FC07DEF2356E0DB3BAC1A5F58AF3C5E856E51958A614641CC5402 -F58CE524B47410359125CF1CB975B1BDA268BE9AE0D0E08088B96E3E46C4CF8CEC0AB54140A1BC78851762E893D1C4A1F0C05A84F79, 15162C2DB067EF24A26AFBE769EA5FE69155ABF0C39EEB8E3B898070750A0549B318D5B69519795EC7FB0E8F6A7AC1757973EB6040280C3144B57AC950B2A3DF862, EDFE8D5AA5BAE7C42E4A4DDA5EB3512FF854C02078D19F17AE01DFB6651472432F8F69F9C678ABFE4EB28B6E63138813569042DEBCA32E0D7CF3E8F3BD9CF24B6 -2E0A6AF6E1D5C30A0B3716D562C611538E73A3BD0A272A1819A2C4ABAD44E6EA6C4201FC3C1E535698F4628B9BB754DE5D2410F8EE6B, 1D30D470B2E079FFFBEC501C304666F49A7246B7B4A3932506E0F7521FB935E8AA9EE82627247FC724A329D7A8AD5BB18B953F3F5A0764C959BB0B42755157A21A3, 1051AB08DF58DEDF5E83101A3A8349C7C0F6929BCE9FCA91167FEBC248D88BC6CE46FEC4521A9624EEA4AF30991AA03BA342C85517C39E04D3839542A67331C4595 -8A1F40E4A581491E21A54480285233FAAB5AEB371E757E484CE84E0307CEB4BF44C605F4B45AFA03CADD27A2D325FE9B176C32EACB41, 179648DFC76F49FEA912C21304EEABB3EF2D9D43930DC5213E1F261E31D9A32498B8D97A0FF0E93C08FB7A8B58D0062B3AC983FCBE0D427DDFAA6A5F6270A9F7B61, 54B10D0D94D499FD2E853B61FD6C099E4FBFFA8D42FC273A811031AE8ECA4CF4FAEF3735B11FDA90E571D89EA06B7D75A0B4F85DC5F20A681E03BC4B08A54246F -19E5DC2ADF083DB5A64EFCD8078F69BF00210C1A55B607AD8E6B8EA09176C1E3DCE5211DE1D10EE0B609776E87971FBD1464498C061C3, EAD7064A238176B81C605C4CE0E2EDBB7B5F1246A165A961D5F77CF873041F4A7DE3F37B125C8963F7B8450801F2782FBF133AD4035E6182C9B5F15D1344CA7CFB, 11A8F3CAFFCF2B9E0B4CE967566AAF56687397F9A972612D835299D6952275F6861505D876209DEFC0561414B9527C6A201B3ED62669BF45EB8A707C46C41C34A6D -4DB194809D18B920F2ECF68816AE3D3D0063244F01221708AB42ABE1B46445AB96AF6359A5732CA2221C664B96C55F373D2CDCA412549, 1B8E82141830FE5094583A91383E1C96552C95002A1FF026A60AB5A0A20FFD6A90EB0B1306015EB03946E37ED13CB29CC59D74DB098440F642E963E553C984D26ED, 4CD62F03E4DD7578C64C1046280FCF8C3E54A91E16DCAA6D6B65C59358CC0FCCA9A4B597AE9E13FF58BB5DDA4C7D192507B29AE440526E6395283003127ED3823A -E914BD81D74A2B62D8C6E398440AB7B701296CED0366451A01C803A51D2CD102C40E2A0CF05985E6665532E2C4501DA5B78695EC36FDB, F19EF8D87AF85C3B5321BB3C39AD9CBF60F911B4BB6C73F02D2ECDEF4A1367989115192704B9889CF0EB84013B23DCBB0D38F0FDA0296714B50D6F0EF1AAF4791E, 3B90D68A294B4EA3D33613398EB1A8881ED876F47B54DAF92C3C80A80AC555C8BEE98A9D3025DD03FAC042121BCBE797E39B3880309C0E50ACE24F824DA1D0739B -2BB3E388585DE82288A54AAC8CC202725037C46C70A32CF4E05580AEF578673084C2A7E26D10C91B332FF98A84CF058F12693C1C4A4F91, 1F2CE747EB4B22D5014B69BF3CDECB279446105BDEC7AF21B58C93141D32C8D1B031CC78BE26579A0517B8E16335F7087452963CCB010C52A91A2D4BC507DA3BE8, 1F6161A23C26AD6A1DDD965ABA1C3117C77F818CB3083AF6568F1BB8FC2AC7DFCAB7746676E2199433F7E5D4A663F14EA9AFF3413930CE62A4FA4FA1F000448ABB9 -831BAA990919B86799EFE005A6460756F0A74D4551E986DEA100820CE06935918E47F7A747325B51998FEC9F8E6D10AD373BB454DEEEB3, 156A69E1756107B3310D77907458EAA27FA69DE7C110428618F7CFECE6BDED7051A0E856FC2EB2E7E93B3FD8C185B020AE7AEB680F9A5EFA72D1CA4D046F7D51735, 1EDC17FF76DA34AEB0CFFBAC598F2C287AC06A8F2101514978ACA8127D374EEFF677FF1BC7228276D272ACCB872909FEA1DE6EEA69C121D51CEF2DA0202916D1506 -18952FFCB1B4D2936CDCFA010F2D21604D1F5E7CFF5BC949BE3018626A13BA0B4AAD7E6F5D59711F4CCAFC5DEAB473207A5B31CFE9CCC19, 18E231A2BB0970DC1E6655C8A2B7D8325957D73B7E59A9BB206B638C8CD5439BD295D42BD2C9AACAC391A7513266EDA35379FC12B59D494B4AE60E90BF0818D63FF, 18375B951D26832902650144F76A1CC16E91F6EE5AD76F953E6B61FA754E3CDC764481EC519BC6D4CFE1BF6857258F0AA097B5A724E790A000086E70B24EB73206A -49BF8FF6151E77BA4696EE032D876420E75E1B76FE135BDD3A9049273E3B2E21E0087B4E180C535DE660F519C01D59616F11956FBD6644B, 1975AAA66ADCED2833DE622B01A797EFAE478631A9B455D895F46D40A6901ABF6F6F7C5AF208D2CCB6BE2B81E70BB7FC4C72E88DDF00F1409269A9FE17374B940BB, B605C4E9CDE6E43F254A4FBE3A326F3FF37966BFD5F1FF5BEB0178EEAE932FA78987E6F864443B93BB7B9629E16411B35B680E1B110912A33445E6DFCF4BEBED7 -DD3EAFE23F5B672ED3C4CA0988962C62B61A5264FA3A1397AFB0DB75BAB18A65A01971EA4824FA19B322DF4D40580C244D34C04F3832CE1, 1EB1123F455B677723D14412484CFEBB4DA3950F61F19DF5721F58FD3EFA8A75DA98689B5E7A1EE2C070CD3BB069E55DF84D7DC2CC22582F3F7E56D0C439D2E8325, DA618FD3C5505047AAA8CAE07572462797A26A09D089ACECE3C786408BAA657F6422ED5F7417F5367416E9D764D0F22B9F7EB61E7DFAE97D0CE29C56322B9DC091 -297BC0FA6BE12358C7B4E5E1C99C28528224EF72EEEAE3AC70F12926130149F30E04C55BED86EEE4D19689DE7C108246CE79E40EDA8986A3, 1CC4EA4FCAF6798C560DFE9FE970AD45D754BB2933147A73A81A2DB9ACEFDA4F606398E1597D2C064242A56345959692841FF26D364A5745C3D6597B964F2D987FC, 1E67EE899571AAC18EF4570DF909882D6FC76B1BDE8254A616CE9705A9B55100C322BE863FC12DBDCBFEB4A9D4734477590A2F53F63EE8A3D4EFFF2198F1232C4A2 -7C7342EF43A36A0A571EB1A55CD478F7866ECE58CCC0AB0552D37B723903DDD92A0E5013C894CCAE74C39D9B743186D46B6DAC2C8F9C93E9, 1C5C94EBCF4E441AF961635E852A590638E66AD61ADAFFD38AB95CA9BB0D97ADDA6D45BF2115644D4318D25F357D46CEA9858BE53CD9DE75C6EED05FEE6497A5E8C, 885DAE71332B75E9853931E7A602744D6FB7E30138D8B830955D24A0A83A044979C74D51A59E243F90F480A59BDC38FF79A929562BFC73AD896775CBCDCA12D2C1 -17559C8CDCAEA3E1F055C14F0167D6AE6934C6B0A6642010FF87A7256AB0B998B7E2AF03B59BE660B5E4AD8D25C94947D42490485AED5BBBB, 1B1F5EBABC694721BAEE86B8B527C4EA9703C2F49E191F4E6502DA6C447E0A608E87150FE87AAC675580D30D7A74FA52BCDA80AB8804D18EA902BB4520670EBA8B5, 1843B5C24B62CA20F46E7559F3ACFE2DA8C215FFC6B6B9FDC7EB507D8171B7A7E807465B98077EB5CC60A056C1FA738812C6C1BB49AFD117A6AAF3D1F8380F4B300 -4600D5A6960BEBA5D10143ED0437840B3B9E5411F32C6032FE96F57040122CCA27A80D0B20D3B32221AE08A7715BDBD77C6DB0D910C813331, F709B54B5114543471870692754A841428EFD0770C82A781AECAE63386C327B3C52E992379AA2FBC8514F0A0C9BA2B068CD1C494DB1DFEF4B7827424109323E2A7, 159926BFE544257AC5EAFDAA49A90D4390E578D9A90C2670626317FCD26F384CD65138EA7CA1265E9382F6705158192785D8FB604EF15C540E461F58B17BF21D484 -D20280F3C223C2F17303CBC70CA68C21B2DAFC35D9852098FBC4E050C036865E76F82721627B1966650A19F6541393867549128B325839993, 17C4EF2EDDAC7B6B9C896D936664555798422656BBD4240E7C7F9A447E6EB50B6A1B2A56BDCBB92D4BD10553166815B0127960E767103BDF20CC7E24667AC0ACA57, AD52F42C442B23FCE2650E4B7707D6AA5866F862EBF898F105D6AB42292B3343EA986BFE3BF684F131D0DF349C368860167287B1C2BE5672EC431A7CDA8BA22D3E -2760782DB466B48D4590B635525F3A4651890F4A18C8F61CAF34EA0F240A3931B64E8756427714C332F1E4DE2FC3ABA935FDB37A19708ACCB9, 1329513C937AD4092298CF1593A972B39C33A1A8596632AB6422BE1D1B9DFFD17E272D7C9363210E37E43500C399CF9B14870D231A509FE4386449DC32124F5A6D3, 9B3EB56B122B82035030DF2A6CB05FD0463325B70B5475EC576174FCF58861BC26893555D261A8C7B66B38E2FAF393D1C898FC6F4B339B3FFB48D6208D2C5534E1 -762168891D341DA7D0B2229FF71DAED2F49B2DDE4A5AE2560D9EBE2D6C1EAB9522EB9602C7653E4998D5AE9A8F4B02FBA1F91A6E4C51A0662B, 107D8FE9BA7975F4AD4CA1E8446699B2438621B2C0178900F2F8E2CE179048C984AAD88E794F499258EBFF42DF2B9270DE833EC337BB8BFC1033F7976A49BC9B1FA, 51174AC7A12F0A4D508FF09A0EF48CFA212C36F378AC67929607547544A198DEDA80674FBCFDCB81FA90D98F0960FA7CFD17C2C6945B5D7EED22B701F86469C5B6 -16264399B579C58F7721667DFE5590C78DDD1899ADF10A70228DC3A88445C02BF68C2C208562FBADCCA810BCFADE108F2E5EB4F4AE4F4E13281, 15F1D0395CFFEFA176770CDB66BDBDA07534A481B1F5A2A31991B140FDA835DBFF58429A4845EB501A733F0234698DA9B3C58E23E9BE24E5810F9061AF7F20DBF95, 5FE3F7A9D8213FE65D219E638873F080FE94EFF192711EC237B1098D1F6F3C6AF1DE7E3C727FCDAA1B33D6EFDEB72FD9901049E26C373A7FA37FD8E3B5C2F23679 -4272CACD206D50AE65643379FB00B256A99749CD09D31F5067A94AF98CD14083E3A484619028F30965F83236F09A31AD8B1C1EDE0AEDEA39783, 13BB73C7C0DE9343FD9BF33177CC2C916D2FFA0AABEFFB9F166932845A97212A1259BC6416E1EB584C9ADF7486167CE6E8B642C8AE46FA71434D1B82E514620E4EB, 143266D91BD24A639499B5A0C94641BE2D6434BB8FBAEA6D008F021884E4A5882E50CFCC4A939319AE0AC2733A91B0403BF722EF7382CA0EA696457921845B57597 -C75860676147F20B302C9A6DF1021703FCC5DD671D795DF136FBE0ECA673C18BAAED8D24B07AD91C31E896A4D1CE9508A1545C9A20C9BEAC689, 1A2D288FA87769C9695DD78C70D463392AFFA2BB93EF9D5426518F73FB41ABBFBC1CEBF14271400C54782F8CBA28DC665B3A146B383F1D70E391BAA17669E829CC0, 760C7FCB93FD8D145692C3EB4318EE6F03DAD12F014294CAC35A8481C6020EC71DF14764AD139B9406E77F63A41C7E832F4BDA940EF57A957DE9B4A7F17C1FDA69 -25609213623D7D6219085CF49D306450BF6519835586C19D3A4F3A2C5F35B44A300C8A76E11708B5495B9C3EE756BBF19E3FD15CE625D3C0539B, 127B866890F34CC775044844BC0864B15175DE7A26E51B4F993D1851F605F6D4944703F7D718ECBAEF5C69B806F7AC29604952AD0A0C77154ECBBD3AFE3A9D3652E, 1C8949428A66A1F2D7E54CC8F8C56A421FC0B8A8E2C6B0637671F2BF31AC064E141FD615FBB996C23A4C499189B07BB9DF72F5CFBEB16C25A71F9D4733E7AB3FB83 -7021B63A26B878264B1916DDD7912CF23E2F4C8A009444D7AEEDAE851DA11CDE90259F64A3451A1FDC12D4BCB60433D4DABF7416B2717B40FAD1, 79CD3328A3A58064FB8B90F9FEA4437413F176EE41F6B97E299A538170CB81016CBDDB53C679197505B5723F770D7A4F059ADC86003C634A5630AA114E243E2453, D82A25228F8C3B1407B7EAB67628966010429247A8A4B7B6218D010171EE9C896CC4E817040FAE1FA8A0BCC230399DFD3C961397AF4E8D2FD0BC5E380FCAC4EFE0 -1506522AE74296872E14B449986B386D6BA8DE59E01BCCE870CC90B8F58E3569BB070DE2DE9CF4E5F94387E36220C9B7E903E5C44175471C2F073, 67A20B586960E640C96F6C47EAD9D8C0116AEB8C66345879FCE394A5E94F122A628B56B5B555A2B274B28A4CB8213B594BE94DF210358AE760672771435342CDB7, 161A396F9E6651642A631177DF1A79BD53B1047C0A14A8DF913261343FA40E8C73B108CE4D6E4E509EB14ED597F34FAB0B30BF125C627BC778CE764EAB24D0DE295 -3F12F680B5C7C3958A3E1CDCC941A94842FA9B0DA05366B95265B22AE0AAA03D311529A89BD6DEB1EBCA97AA26625D27BB0BB14CC45FD5548D159, 10A9131226B61979B6A9798D2E2A8448E379A2E558B4E4D817AAA04B0304B59F864A3E85CA1050CE55AC738D8AE14386BEC6C0C311505D55AD8D7CC931AEEBE692C, B6483343D7004A3AD8D5B99094191C7FBE8B8B52D6F564E0A4D60E3D56F9EED4445B301D8372613428FDEF86824EBAE9E4CC29BFD4CA39D2602C915ACA75A53466 -BD38E38221574AC09EBA56965BC4FBD8C8EFD128E0FA342BF7311680A1FFE0B7933F7CF9D3849C15C35FC6FE73271777312313E64D1F7FFDA740B, 9E517DC30559C4CEA55660FE9CC6504D875989DF21629D2C8A83A526A9A186BEED0E8BEFE8999F44086625C32DF45A310E41E18B82210B81A81048D465E762BAD2, 14BAD2DD2D10E324491AE8D29FB0181F16DC0101C47FBDD211897425A410B743028CA405FC074843916801507894C24AC22C2428FDB7053DD07E6D78950F452E0AC -237AAAA866405E041DC2F03C3134EF38A5ACF737AA2EE9C83E5934381E5FFA226B9BE76ED7A8DD4414A1F54FB5975466593693BB2E75E7FF8F5C21, 8C6E1CF957E955181DA548E3DC55EBEC6C3C68BE50F4FBFA0B8AC28F7D4E92FC1F9E5F9D32AC4953F7A6602861575BEE012B9F43771619D1CEF7A8CD492B255268, 14FF248CEADBC92366358C2F3F8046F5DA1A153F8AAB1FF50FD701223209C9B876846D1FAE69EBA7DFE27E6824A101F3E976929EAC9AF070AEA5D53296155AE4868 -6A6FFFF932C11A0C5948D0B4939ECDA9F106E5A6FE8CBD58BB0B9CA85B1FEE6742D3B64C86FA97CC3DE5DFEF20C5FD330BA3BB318B61B7FEAE1463, BBEF569E0CC9A96C7A1C0CC4D3D70620BD5E9D53A58ACD7CD25BF21678DC6EFFAA1F89B1F8F39E7631A9A07D25C19E1C6794958AB2A600B278118F0E25C6223487, 148743E3D98925BEEC533C26B0E3AD101CA28BC7701C54F16A92CE70B2F39B67DBC5984D805C418FE5CB09F4134C2FF58B860A64B9CFD866BAA470EA32DF7DDD68B -13F4FFFEB98434E250BDA721DBADC68FDD314B0F4FBA6380A3122D5F9115FCB35C87B22E594EFC764B9B19FCD6251F79922EB3194A22527FC0A3D29, 1C658E918AD481902FFCB697AF52CEDE3F262449436145B74AD147D2D8E4570FF630D547AAAB4F0ADAC32945E559628A5508C60E3775F0F7B3C62223995CEB56ABB, 7BD861163EFBEC24CCC38A42E1EAA9D2B9BA2D2CD8545876004EA665F0ABD374D38E9A476B291E57DB92DD513D17B93C87CEDEB1A187FBF722416B4CE271384BEE -3BDEFFFC2C8C9EA6F238F565930953AF9793E12DEF2F2A81E936881EB341F61A1597168B0BECF562E2D14DF6826F5E6CB68C194BDE66F77F41EB77B, AF1430CCFB6E96905C60132D711CA0183DC456517413D6B4EA79360EE24DF4C61CEE38D67D57D8F6B97B7996FCEFA4935C2EAE90DC1F7EF6CD93B792EA09CB72CA, 15BBEB0B26DF08BA3BA3DF04DA15DEF333445C9D588166E8F5E7C4333EFEDAAE216228A789DB5E9B76A9F9F8C463C7D028EA38995D37D6755E95769D32B68B93736 -B39CFFF485A5DBF4D6AAE030B91BFB0EC6BBA389CD8D7F85BBA3985C19C5E24E40C543A123C6E028A873E9E3874E1B4623A44BE39B34E67DC5C2671, 11EB2130BCDCE91DFEBF477898E00F46CB475BF5B27E7C5679BD0B167AEFFCE9DA47D499B4A2F13DC4DE9E7223659A6A64D6DE2B246C475F93A4E0AB69374C77CB9, 1D33D47802BD0525A4294A01AAFA1C5BC445EA609D1C91D0A35AB25145951BC9766149EE2190FBFF57350187675CA4F0A2E2F4CDBE21AA58048E538D3082735AF08 -21AD6FFDD90F193DE8400A0922B53F12C5432EA9D68A87E9132EAC9144D51A6EAC24FCAE36B54A079F95BBDAA95EA51D26AECE3AAD19EB3795147353, 1A2F18405BC7A3D509B69C1D05856D4CEF9834E79A256273905DFA6F8B965960B1A7355C8F6365C9D9F4D2540979AE68FE6D4F89F1C462628FDBF2C25F47A9496C5, 14DAA6BB8249897441A6E142244167B9DF06E74D7905910A14AE645A0D23AEC3B4C5A160DE60C9FF1DB0AC4A2AC3D5932D77BBC22D02AC2DC1852F3A9F359D38EEB -65084FF98B2D4BB9B8C01E1B681FBD384FC98BFD839F97BB398C05B3CE7F4F4C046EF60AA41FDE16DEC1338FFC1BEF57740C6AB0074DC1A6BF3D59F9, 1BB9D99F0B34F71683F9629D3ACC1EC0E710861E99FFEC3BFCA03147AFBA4DF250247E2E3AC0C139C54C9DB78F3DE4B6C88D88C435C0253EE30BC55A0F75EC6CFF0, F390B86711EC1DA460FA73AB1C7753428AB592FAA788492718D0ED596A3273914A0BDB4EF43ADD85A9C097F48D7C614E28FCDB14AE62129AA2DD7994C5F51C7D7B -12F18EFECA187E32D2A405A52385F37A8EF5CA3F88ADEC731ACA4111B6B7DEDE40D4CE21FEC5F9A449C439AAFF453CE065C25401015E944F43DB80DEB, AB70771B55DC2406DA2CFDF6AD36BE05F3D6B71391504333C2ADA85367215599B1F75483E32432709AF01E8EF2DC7B393B69D0A66F6BB52749E51A8C855E2B2165, 1C927D230DDEC9908E2202D863E37A9254A9AB0F15B4AD3058D6B508285BF638379DF0513C3DED4C5F003CB486001FB9B5AEA796E8559284FE82113E7BC9EE7184C -38D4ACFC5E497A9877EC10EF6A91DA6FACE15EBE9A09C559505EC33524279C9AC27E6A65FC51ECECDD4CAD00FDCFB6A13146FC03041BBCEDCB92829C1, 1CC9802E3D53A08C1063EF50510241DAAEDF80C1696258F812411A7619D500E3ACAE35D1DC16761E9AB1B667F6A5CFB3DE60C6D0E0626DE429A138FEF3418910622, F45C2CA54B397DB15640C19E2FC5C23A727341A86AA485B95E5E21EF56BDA509239649D4DF7C736DFD5B9423FE2B964941333BA7D63F8AD92E6CFB040992C7F694 -AA7E06F51ADC6FC967C432CE3FB58F4F06A41C3BCE1D500BF11C499F6C76D5D0477B3F31F4F5C6C697E60702F96F23E393D4F4090C5336C962B787D43, 15C7C77A85A087586E3543849614AF7CD373C56AD4D04865A72D9DC8572DEB2E811A75A3FC28C8A1D1D7EC61312E1E81CB02EED003FF3693259DFCD877891BE183C, 6F9499F4D91F936C153285A7C383B8C6058E9E676D1E68AA777896030C86F96022A08CDED4527E2B947D4A27E7D11E942F6EBC0E74E84EC2E2F1CD3ECF59DCC8CF -1FF7A14DF50954F5C374C986ABF20ADED13EC54B36A57F023D354DCDE45648170D671BD95DEE15453C7B21508EC4D6BAABB7EDC1B24F9A45C2826977C9, 542B6B74778AC458886E35A9A1410C3DA9F0F0E77930495B62631ACE17B7A0484C9B014CB1536770BB7B6DFC4913B0F34E63FF33C91481C63F7BC031222BCB53AA, 11D96C405781389CF533F8156A70AAE884D261FF36AD792810CA859A2751B6C14CA1C98E12332DAC28A37671D0693C5E81493A483BCE1BD739333035DDAEAEF5AAF -5FE6E3E9DF1BFEE14A5E5C9403D6209C73BC4FE1A3F07D06B79FE969AD02D8452835538C19CA3FCFB57163F1AC4E84300327C94516EECED147873C675B, 183C05B70F209BE717045ABEA0B91E88645D9210307A45F7887CB5B8E05387801E06A17E34545E4D54B50A61A0AD8619B62A9453D499D4CFA64FC591541D360FA55, 185CA9FFA827C9EA38F9EB0BF24CE36701AE794CF05344AAD469C6B13CC40B1426ECF8DFEB69EA8831612E4A042A883279AE8378F3C28CB54A5B367F41A9CEFA885 -11FB4ABBD9D53FCA3DF1B15BC0B8261D55B34EFA4EBD1771426DFBC3D070888CF789FFAA44D5EBF6F20542BD504EB8C9009775BCF44CC6C73D695B53611, 17E2D3E8289F1A3822316EC45C80A93F113C2CCF92BBAD0616CE4C31F47A6786DE3104B172733C9C349ECB4724C59F90943CE6A87064F36369B4173D402B33B89D4, 14FC14E5BEB0866623400696A2FF439967C7E33A1528F5790D196FAE0CAA5686D38BD795BBBA74712F406E183A92EB79102086229675A2A8B2EBCA9816608596DA0 -35F1E0338D7FBF5EB9D51413422872580119ECEEEC374653C749F34B715199A6E69DFEFECE81C3E4D60FC837F0EC2A5B01C66136DCE65455B83C11FA233, 1673C0F4D6A21EAA5692AC9256C648738BD7252DFD184E9512C3F5F92F8F51E4DCA6FEB75D13FF75EDC8ED728CE24512115B7D66E5A8C7BDD53F148CF7DA70E6CE7, 11AAEC3CE7DF2AD0591949D0BB5F4B5437A7287D3A1CFC06F61FF24D4714631E0471E02782BE823E904AD29FFCE51D17AA838F52E304A157FE0EE06742678A1D22E -A1D5A09AA87F3E1C2D7F3C39C6795708034DC6CCC4A5D2FB55DDD9E253F4CCF4B3D9FCFC6B854BAE822F58A7D2C47F11055323A496B2FD0128B435EE699, DE321BBBF4C54AFCE7D32215A2EEFEB2EE09767FFF04FAA6B2341FAF782CF9A9D07EDBE5936F2B36C585E5D99A29B69E8F08F4A2CFE21641DEB6D041C08B974EBD, 18177025D1E0BE77A67CDEB542C098488503F70360EB2F61C823A7B1BDEBB1A8892A3097D85F49AAABCCA29745C5E7CBF103AC62DADCAA995AD95206EF2411C752D -1E580E1CFF97DBA54887DB4AD536C051809E954664DF178F201998DA6FBDE66DE1B8DF6F5428FE30B868E09F7784D7D330FF96AEDC418F7037A1CA1CB3CB, D8DE2E16D35FADD54628BF94D1EC81611E6D703B7D87B3727F96FBF1326D8EFCEE5469442F6229708D2B9F28D0FF2784C78B44877304A890247ACCCBC16872A3B3, 1FE6EA28DD4B30DF390C567AA15EDEB300863F425A5B1B3CC16BCD861924EAE7834D73C0B13FE1A03BB1DD27ED7424BCC01E7C39AB3A211A8EA92445D13444BE9C9 -5B082A56FEC792EFD99791E07FA440F481DBBFD32E9D46AD604CCA8F4F39B349A52A9E4DFC7AFA92293AA1DE668E877992FEC40C94C4AE50A6E55E561B61, 184ABE3FB0312D282A4E0DF22DAF6408F35D4F08EA171E96DD753DAFB8E334D9CB1F94FDAAE28A52CADAA6196F8EC9FA8C4A1228E5C0FD1C77B69662CFDB90821DB, 188314CA090595942D25D26EE3A71B97DBFD8F3022A799BD61054D6BCD7DD852759102E0B1FD13A4E496B0D03EB499F44F66D803AE7FDDBAABD6B43AD1961CD392F -111187F04FC56B8CF8CC6B5A17EECC2DD85933F798BD7D40820E65FADEDAD19DCEF7FDAE9F570EFB67BAFE59B33AB966CB8FC4C25BE4E0AF1F4B01B025223, 2DF486A3DC35410AAD27C68671278B1DF07EC59A3555AC1F33AC99327743EEEFA50450981D4A63AE1D4791F8576E745B58E21FFB0132BC9F5471CD596C75C9E2D1, CDDF942FAC9EC5A83D34C1E61BFC6DD0432FCF22A03E617B2A76FB432ACCF076EE5538D91019809C257F329D670DD32BC861236C46F8985263556421734E2DB47E -333497D0EF5042A6EA65420E47CC6489890B9BE6CA3877C1862B31F09C9074D96CE7F90BDE052CF23730FB0D19B02C3462AF4E4713AEA20D5DE105106F669, FC47F39D9A9342D32CCD7ED1550B17FC76DBD98E4EC648491EAA3AD81ECCD498E758EF6E68E2942FB5436EC2F18E6E1A59455534D36645AA6CE2EEF7ABEA6A429F, 77B64D0C8442C16071D06AB2F56DC1E454EB37C0046CF9D9A05AF17100789242D6B426A335007936677AA7C82E365E25E6D335C67E5A4C7F22E80AC4F7A915D218 -999DC772CDF0C7F4BF2FC62AD7652D9C9B22D3B45EA96744928195D1D5B15E8C46B7EB239A0F86D6A592F1274D10849D280DEAD53B0BE62819A30F314E33B, 72DF7D29DC382D061D17FA29CDF4F2CA5FE533F44E6C0BB39ACAAA5B535748D155DA215C572A24EFBEB3E08C422CBC7CC389280C764FBB120B37485BE7ED793300, 1379F04E35E19E2823531C0D926889287BC66FEDE617EB1F906294FC5C10D7185AFF09ACAA36484097EEFAD2CB2D9FCD1667FC94A21D7BF27844C157D8EB546769E -1CCD9565869D257DE3D8F5280862F88D5D1687B1D1BFC35CDB784C17581141BA4D427C16ACE2E9483F0B8D375E7318DD77829C07FB123B2784CE92D93EA9B1, 6AF49F5160C72F719C743C516123F45DED177FC979A5257EB459D293CC49C6D6C85FA019A1B25A75D5C5C8EF5AB2D7F471722BAF41D880435CD333F1D35A11A1F9, 17A092F54E224F3F5E370D6188B9735D77BA59A16BF18BDBA27C8622CDB0C4AAADDE676975F36A715B1F5C998E463973C56E5077D81351605DEDCC86E1579E4F45C -5668C03093D77079AB8ADF781928E9A817439715753F4A169268E4460833C52EE7C7744406A8BBD8BD22A7A61B594A986687D417F136B1768E6BB88BBBFD13, 1509FE8354E1C0D49704F7C9E384B44EE122F206A73FD15D5FE5C0893A35BACFC657A2F459B6919C6A59F8B16485DD86901D5FC0334C7F8F56FE2FDD9CD710BAFC3, 1A0FA3E32180226048F38FFE609BC26FD2397A092D6A9CF1EF4F76C682FCA5E0A9BF5B17E87737CC187722AB4DB85E35E6435FBD0B10136F68DABA009D03CD553F1 -1033A4091BB86516D02A09E684B7ABCF845CAC5405FBDDE43B73AACD2189B4F8CB7565CCC13FA338A3767F6F2520BDFC933977C47D3A41463AB4329A333F739, 46DBEFDA4678029137F8D2B537F8B3418FCEB35AD4DE9EFD7016EA10AB8CC83F5DE525A4AF44B85D871880490340C24799CFEC7AEB7DCB8A27F328B78033DA3E3A, 17088E0DA70A4E95C5A05C3C9E7FA1E64803497C8ADD85CC6BE00F1F4730ECC3D83320251BEA6F903C26D518C64D70F0391E40F52394D20D464C4CB1ADDFD17765B -309AEC1B53292F44707E1DB38E27036E8D1604FC11F399ACB25B0067649D1EEA6260316643BEE9A9EA637E4D6F6239F5B9AC674D77AEC3D2B01C97CE99BE5AB, BD1D1172FEA3E457BD8AD5444E23C3185D33B63F90381C7F4ED35DD5ABAD4225EB96C94B2ACA6D6445CD805492FAED155383CB2ADCAF8D2109ED57FFD12DBC60D7, 128187DBD872D2FE96112AD4670661DE2B1E1FF315EC45437DD1D17F22855C64181698EFEA87062EA0B21E9920811A09616DD72A9588D4C2B3C05F2D751554A986F -91D0C451F97B8DCD517A591AAA750A4BA7420EF435DACD06171101362DD75CBF27209432CB3CBCFDBF2A7AE84E26ADE12D0535E8670C4B781055C76BCD3B101, AB657A84D03CBE90E321B0C132C593A87E3229AB6F8526BE212718B4938FB431A10D612146F2FEA097A258CBC3C6490D9010D4BC3C8D449512A8644E32B4B2802F, BE610A0EDA21A8284FE7AF01AE163E93C7AA71ECCDDB50B15D2DE9A13FAAB4362C2A29DDB3BB59ACC8DF9002796B193FB9C686C429F5C8961ECCE946F9051849FA -1B5724CF5EC72A967F46F0B4FFF5F1EE2F5C62CDCA1906712453303A28986163D7561BC9861B636F93D7F70B8EA7409A3870FA1B93524E2683101564367B1303, 16FDBCD87907F7640250E562D5D7EA5FF0C1EEE49A0D63FA7A56D6B848793BF1BCD9755011FFEA81132A9364407F299170A095FE89B9A6A3DF9D79AEE77FD341D62, 12548441A0B629009456EAD09DD05F0DE1FE178D71DB7AB140D32B5D0208268C125BD6C60304F450B4CB684CBE67798C91D4CF70E17D2DBFE6E1C4C3E70BAE03796 -52056E6E1C557FC37DD4D21EFFE1D5CA8E1528695E4B13536CF990AE79C9242B8602535C92522A4EBB87E522ABF5C1CEA952EE52B9F6EA738930402CA3713909, 10470A88DFED45D0F19595E671D53581F51E4A2D3A0DA6533F89632AAB22FCB4BFBB025554F762A32AEAEE6A1101100F9C006A037BC6DBECD79AA761F0E843F395C, 657458DEC44CCAAE706CB552B34BDC57E34F46E7B24B3DB8D3B346E8D3F066DCBC7AF6FFDC52115D76A5551C996FE46037A45279553A8532D4A6288211F966FA64 -F6104B4A55007F4A797E765CFFA5815FAA3F793C1AE139FA46ECB20B6D5B6C829206FA15B6F67EEC3297AF6803E1456BFBF8CAF82DE4BF5A9B90C085EA53AB1B, A9C7B530A8C82ED3DDAC093C679BBA9C10BAE4C6E70A46CE699056782212C251D4659D0174C80EB4A3A9DA5C1309DE8EAB660D182B197CB70984C394B280F2FE51, 1A9AFD356F904DE55B89E664146636D5AA3833C9A8CDC3DB1DE6A40B183F2B658AB79F29024AF382AB6E1E0F5A451C9F54288869F9EB728E3AE80E2F00B786CE883 -2E230E1DEFF017DDF6C7B6316FEF0841EFEBE6BB450A3ADEED4C6162248124587B614EE4124E37CC497C70E380BA3D043F3EA60E889AE3E0FD2B24191BEFB0151, 10BFECB2F86933EF2D3D0F4FC1B8BE4C3C2B6AEA1FAFA4BDC00C5E26457551DFE3FDECB8114596EAD3445FB3F7C2D6807AAA4CF476C0F9E2116EE212848E22F7E64, AA03AF238C228537E1528ADB56243799645ECCCA9AB62D78D4354DA6B06EAB59B7B1A61BE103CF52AEF6FD02E39994B0EDF5B55E5E6835E20729BA6CC3BDFD7B81 -8A692A59CFD04799E45722944FCD18C5CFC3B431CF1EB09CC7E524266D836D097223ECAC36EAA764DC7552AA822EB70CBDBBF22B99D0ABA2F7816C4B53CF103F3, 89C9C81B7863056A04D35A8DA566FED1A583B11A32C139AF5ED52B6B3C84763CD9D16A03FE9F8F76D66D9043A12CBA99E2160163462553A259E7DBB9E39B36BFCA, 1ACA646516FBCDC7419702A53757BA2EE8EEAC0D228F499870BEDF68661F8D56FF9B44F829B6F0DC32D4C7209F81A8A818C83B8DAE23373C5FB482335007B5287FD -19F3B7F0D6F70D6CDAD0567BCEF674A516F4B1C956D5C11D657AF6C73488A471C566BC604A4BFF62E955FF7FF868C25263933D682CD7202E8E68444E1FB6D30BD9, C838E095D259ADC1081183214930E368BC3C68C226983B0808314A7B5C54400F7EE47C093230C367AD46D06616AB864A293C3509732F99C4E4A3BF76277B58CD20, B5A4ACD32FB314B1A0FEDB687CE97FE16CA00A7004D73036E80C6246420D9EA5211DB0ACAD07813C8E74B0370073906EC7AB3B0962DB31A624AC86A03914E52D05 -4DDB27D284E52846907103736CE35DEF44DE155C048143583070E4559D99ED5550343520DEE3FE28BC01FE7FE93A46F72AB9B8388685608BAB38CCEA5F2479238B, 12B7BA8CDCD76630988291EF9B9F414711BECB923207BD1641F63650D2EB79F03D42438B275A2261C69F7DD6FA439794022FFC997C80F12B1255DCAE82A50AEB331, 8B37583CF151BB968D438E17E21480A701261C14963FAE4EF37F9BFA12174D1FB477DAEADAF447DA8188E2D89C052174073ED02CD014CF16A87D2CC77FB0F42F5E -E99177778EAF78D3B1530A5A46AA19CDCE9A40140D83CA089152AD00D8CDC7FFF09C9F629CABFA7A3405FB7FBBAED4E5802D28A9939021A301AA66BF1D6D6B6AA1, 1AA4D99854C554B4BC1106C67B4F4C7471C350068949097410ECC934CE1D8A93521FEE72B32980D51B0C4BEB4CCC4F26661ED17AF49D08A6B6850F01C9811960635, 1E2FDA7EBE4C8581C5342540A22C6AE12D991D5D4AB67CACC38078F0DA280902E90E6A14609E9E404711A048A8FEF8A75DA40957494E1577DAAFED199A66EE97C5F -1.2.840.10045.3.1.4 -1, FFA963CDCA8816CCC33B8642BEDF905C3D358573D3F27FBBD3B3CB9AAAF, 7DEBE8E4E90A5DAE6E4054CA530BA04654B36818CE226B39FCCB7B02F1AE -3, 22DBC8D0EC84C7EC9706FE55F226E24F4152950E4BF28A2EC2E908186360, 141AB1DC0DE87873AA10719ED8ED1BF00A1680FA3C41879AACAB9E85CDE3 -9, 51D4A893D7DE5C8A42FE5FEF5EA295ED7A0BF1C90817EBC6A8294D290CC2, 2CA5DE571DF0E191C6E53E2401D9A193BB98EF2C2A6846151E079FAEEB3D -1B, 514D81D5A186D85D88A80C48637048B3215F21404E789F7FB14440CE644, 53BA32A0F22B673EF13C96E94CEC03F5B2AC45F1CB0B3156C4E3A6BAECFD -51, 48A3394EEB28A4009EC99B92881D3B6D70D24CE2AD525E6986E5968F489E, E45C928E437388ECCA315E912863C734DC7AAF11DC60B6649ED32862B7B -F3, 2B7C47FA73CBF1E0AFB70601543CF9E99596130CA32DB1C8CE92AE77DFBA, 2A7D3795710F4496666A483C8C72ED6BC99AD33F7D91802A705E613E14A1 -2D9, 4A36016914C9349C166CF7B518BA0397D255145F22CCB5F36DB84BDE813A, 4CD57D9922BD006E3B3EC36F731980BB01A85EC86E9D8272BDA465BC25D7 -88B, 7BBE812258CEC0D19F71C212CCB12271D958D6678552898414F91BABE24D, 4A323552EBC328D611F2BB792B5820FC807C507F1A5D3FC09EDA8AFCE6A7 -19A1, 5C5E6824B3F957490BC70FB032B726293BF5A176394EB35134FEF74DD36D, 2B1F88BE32378D8C1D2308D92C0464F1638B172C638BC5D0141094E6EBBE -4CE3, 7527D410D7F93DE237879AB7ABFBC19689D5276BCBD7E19F33E315ACAB6B, 4C921C6451C030D8E43BDAF41B1899F322FD715D47B8598D08BA8423F874 -E6A9, 32FD6D43B1BB52CF1D02E6411DC4E20E5E11FB5789E1C731EEFDFAD2879B, 58A762F1B82CBE1FED579632DDC927ED52C1A12504E8F0EF59B9B25DBF40 -2B3FB, 35C3CADFEB3DDC9EC83B21970C4875E6FB151E451ACD9879EBB6A4A846C1, 3DF15CAF88252093A3C8B9D8636F9C8EF2E30B51C64D3F3F03E142D2FE3B -81BF1, 188C11E168DF8E3F35D107F039B2638E28647F2E20EF4750E4953CC0ADE7, 71C924D4737CBFD54D1E851274DDAC69A017441DE5510068A7A0483B4690 -1853D3, 30E75CFEE30897F4B880DD04EF0B7C8677C9D56CB74E3F1AA45BECB5D8BA, 2872CBC55CF557E6BDE9C0DE6119749364F0BBA0C038C21EC7210455F3E6 -48FB79, EE33469CD34FE6AC36261BE712D5826839D202AF469705BEB52DA9AEB89, 66D1B48F5B4F2755BB3E741A20AB8C9578BE9C9FA593DF0A086BA1CEF117 -DAF26B, 5F94A16B5D0CA15F778FFC763BA366B4169D36A4D29EDDC8115207150BA7, 73F7A6CE5C6C96F658063AE0FBF16DD9D80F89D7456956FD824E322B7E86 -290D741, 512C65EFF2C5F319CD781D0C50501B46A776C134EC9CC08A15B6EDB2F77D, 73F34A0C9000E48127B5746194958BCA6BF9F0D20BB00913FC2014BF0F13 -7B285C3, 5AF72CE7AA87C739C99291BCE5DADEF3279C81506ACA69E26A5342DC2E0A, 6C615809FA336A22ACDE1F6394878F62CA86195B323A9C3D33C58E30A710 -17179149, 15A65631C05D47531DBC51A2432B054FF454442CDCAC595C5F42E2CC4D11, 2EA982A4A69DA4A57750FD190778D441F026E6B6F494222C7E347B703A34 -4546B3DB, 630AE6FE21ECD23102DBEB5A2EE9C6F40FDB88B4E832ECB8334B7A7C2508, 234E0B4185329D49C6F02D2E40190A5AD61E9BDED1A1F3E87433E7D588D4 -CFD41B91, 2FCC650D8CE284E29676424F1DBD1B07A0E04B6EF6D3D3A338455E53E01A, 4CC326E61DAC3572F502FCCBCF8048756A7FC891B847132AACF42BA9A91B -26F7C52B3, 4B0B7745D112105467E25CFF664B0D302EAD9E1F66ED6F9DC04FB7F6BA54, 5037A4A57F8C13F96C598CA4103D9FF392BB4D4D4A913144A8D60413C66E -74E74F819, 222720EEE24D0740631757C2338E2DE37B46EFC02B9DF9FDF6F3C646E54F, 6CA7BB2159ECF1896F5D0AF9A831C64B55DCB7A580A8BF22906339C93A26 -15EB5EE84B, 7A385204C010DE73227E58BE01E0072D101E66CFA0ABCA6F8B37E418F4DA, 5635AB75B7C5EA07D0EDA9203450A9B55C0D9A5EF831BDAB442FA8BE287C -41C21CB8E1, 484F7B3E8899129030BDDD229BC5B7CECF6558A4956651C2EA9FD7E30F37, 38291951DCFC93774473EB513C7806420E97B838C4A1DC939E10F76A0A80 -C546562AA3, 2C43163A85B29CC8163E41429B86A8B4BD5ED733DE8DCB5A5E5051C1F438, 6FF3E7CB5AF52C1F9BDB4C9E0821B391C107F46A738555D365EC993BA993 -24FD3027FE9, 33446CAB02F31305E6A10C462617FE0284BE146A26C9AB2FAB43F156D4, 5AF1FB8480C213D8B62870EB1C3CBC0B3CACE37215E54CB088731B849764 -6EF79077FBB, 16299F96EE9CC868AFA7AAC2BA974811B96D7AD0E3383C81064D37F10A6A, 600782CB06596F33B57F8202E0CDC26AAAE2B51EE41D926ACC692087A4A -14CE6B167F31, 723A669C56A99B73CF6F9035CFE7617B61D038F66AF2DAA7F8703185AFFA, 5536766A688D4158F23181981CDBA4CCB17FCFD1F79D5E99A40408D78CAB -3E6B41437D93, 3B5DAC78921332DE3931B63588C4AE399C4CE2F3024A296010E44BF130EE, 65173BA175C6A11D5FB144F6B0F8B687C93EDF564AF494FCDD8D31463904 -BB41C3CA78B9, 5B8CE655500A6EA95221E04DF702B121EB624D12414427DFC6F8D2289E6F, 76E79AB127FE61EF65DC44A082B3AFBCB1E490C7BD6512A1CA16223C4C19 -231C54B5F6A2B, 4082741C6B6BDC7865BCD6DFDEB9BFA7512CF7068A84A9C25D073C8067C6, 46E2052F6238422C1358196E2B91FE52A0DD5FAB9DEBAAAECFD3E9F9C148 -6954FE21E3E81, 1AA8F259DD1F8D2B731C8301D709E870F778F268C7383E5FF5BEA90733AD, 42FA0F89CB438072F29C745DB29DF7FA0C3BC8E14ED9AF2787FE6839B30 -13BFEFA65ABB83, E28F3DE68E70D63E142C602C4E0B26B27ED536ACB26C9A508335EBF2543, 27DA7DC5C16A1AC01BCB82A5742196C08915E337D29EAFA09398BB90345B -3B3FCEF3103289, 6BA72792EAC9E7AB394001CF1D87E0B574338F4F938E90B04CB7E8D482CA, 3F9E9EFB6ED82B45425DCA1841FF1814DC6421059C6F3980698E99F2AF6D -B1BF6CD930979B, 2AE93EA6B1C369CA024438B2702517D4539CF212A5B6CF493204735D1A5, 10A81FAC0C5777BA6A09853B4C8796665556C038810C4F10A23A2399D230 -2153E468B91C6D1, CBFBB6F6824461D51E3F1CDDC153788FCE77B69D3A1F514654949FE8874, 446543FD436FDA1F34DF671D0692C3AE8DA11683C2541CB9405C34A13E6B -63FBAD3A2B55473, 6BF3B0A52D30F56C4BF443DE85A7308433F56B74CB5A06266B48E0B19751, 7CBDE58AD0168CECFB274B1816791C9196F18664DE8F6242B18473244A09 -12BF307AE81FFD59, 531BE1A57D6866B6188BA9A367542D020EB1385234449A99E15C8C616603, 1B252139380F14C0DF050BAAD0F662FDB4D505A549A8662F7DD4032C8100 -383D9170B85FF80B, 56B563424CA7C78FE2AB35FADE5B01967E9D3A336D205210CDA19DD02AA2, 1F3452A9907B8DEDD02D1911626FFB99B9AB198F4D6E6B0A4740CB19B730 -A8B8B452291FE821, 157877DC0731A47A6BD5C60E226AED421D108B8B6CB2C8A930DAED0A7583, 118AC73D9C2B24B0F1D13B12D7355974018F1B427B1422DEF2CF6F886DD5 -1FA2A1CF67B5FB863, 5076D76F6B26BD3D7460CEDAC24A0DA79416B8AAC937DA2F928F25A03A31, 2B0D20B54C8FB7BA123F9E71A76CB61827F142EC00CCB476537825DD5696 -5EE7E56E3721F2929, 740A076D5802038E06BEAE6B80E4B3160C8D08C68657E1585BB8484F668D, 2E723C76072F48E6EE4FD168F21955DB1E330E385554857408141353F7C0 -11CB7B04AA565D7B7B, 323CBFB010B49B6C9830080AFCC8B3F0BCAFDE86F9357A08DED7E32396F6, 70810AD41275B13D20F4012B3DE6D2A332658EEC0DA51382220A0F92AD23 -3562710DFF03187271, 6A4C46C297CB9AD3D7658471EE96ACF685DFAD7C73DB000347E4020A7B0D, 78CE02F9BF052304B7EB3D65C78D6334D6319B9D65C9B1F2D9B78FB429CB -A0275329FD09495753, 63166373F1E13CE53E997F1DE7D2B1DCB9E73679F16EF20252A6DDD75DB7, 676C66EA260BF9C5D60CDF6DB6DF8A328D554B49214CE65120A5FC3488 -1E075F97DF71BDC05F9, 351B172A839264D9206BC8BE524A7CA561682D70F333F2961123395E54BB, 2AB11446DD78C98F291DF9F9CB6FAFC3BBAC2D996DB39AD94FEBFFB437D4 -5A161EC79E5539411EB, 289D5160203D7FAFF176287300492FDDD2DC282EAB4454ACBFAB6E47DB3B, 1889C2C02BCC0268E05BECB9D0A174111BF9F1132379DE2CE25726739803 -10E425C56DAFFABC35C1, 7AD1775FEF7452F410839881DFB3F9226A183C935FC06F3CF313414136D4, 2A45F7CCE7E0EF52E9DD59876F3C31636D4AEECE4651088B49A28ADD7B1F -32AC7150490FF034A143, 241DA2D8BB542E726AB512B38F3165C726A8D5293856609D06222BFBF762, 32B0A452748748F7BD98E50495A246880D1415D37AA9633D0D794E42E323 -980553F0DB2FD09DE3C9, 3CE89B73D207CA3C4AB0FD957164CC39B45B4B9A40BAEBF32AF0903F7798, 19A10EC0131DEAF55DF062A97F9B0FFD99A3A91AF0DEEA0ED8F0F38A59BB -1C80FFBD2918F71D9AB5B, 5741F743E20852A64CC88C22DCE268B6DE3E8F246DEF45B739C6A5FA9016, 32BEDFF017627F90F67DEE4DBD50EA97BA1F3DB2AF0A7511F4E06A463C3A -5582FF377B4AE558D0211, 7108F63CB8AD41A7E5446725AA378F393226442EB7265A70599F9C0C0595, 5911D30A53C7367FE6B202F14C41E44651B72A39F0474F9A7E06A4442468 -10088FDA671E0B00A70633, 6F5DFF4ED68D492F65B685ADEDBDDBD3FB7E466FC20417850505C20BF101, 326E3E5C17D9AF78CC8EE614EE1E608D400EABF8BA4B928975E8E18891EC -3019AF8F355A2101F51299, 4EB0FF50FE6DB7A34EF6C50A89EF9DFE2B8E60F17B8609518B83B5E1BDD9, 3A1D340B2FE7016156087AA5398AED38F48B9A08D49D55EC1AA91C964269 -904D0EADA00E6305DF37CB, 6C8549D2FB637D6D3E2E7F1DBA60E1819F7D5A64D54B82E7171B9FD1F51F, 4007D7AF38CB1143AEF9B224EF0B89CCCC65E61272064F6668FD5EABF46C -1B0E72C08E02B29119DA761, 3561058AD42569ED8D4480FC514234B1B995900F6C17974F98D034EA453, 2C8903D3EC438E0BB07C074DD9FA78D1CEB7118A48D729E64FD2D0A49AE7 -512B5841AA0817B34D8F623, 5AE0AC47225AE7A82FB5FF6613BC1FA7D1FB31172840B7474EBF75EEC351, 7C00C1F39DDD7EF47ADBB7D763FE29DE44B992E5FBF28069C5B43298AEF5 -F38208C4FE184719E8AE269, 6E4E4E147234F649B6103DEBFDEE658C182F4F9CAD9C35428ECCBFF2E421, 14B7163A8E2A45FA38D7338412F5DC198C26EC37A3B8B8207CFE58E2DBA7 -2DA861A4EFA48D54DBA0A73B, 28F6A2B6BED6A6B4031CC5CCCA2A48C9FF1552822F5FCEE9B1D2A3D7FDEB, 1D0CF351D57ECFB4DADA0F1DB874BB1F46492F3E205DA0436DDA8FB208DF -88F924EECEEDA7FE92E1F5B1, 5329E2096B1ECFB89859CC26181017CC8D9E886DC234D6C69CF42E552782, 12294614E7B7D9A8B3B5317D3C7EAD9DCFCCBDCA5E6AC724C5604E9ED16 -19AEB6ECC6CC8F7FBB8A5E113, 187E480AC06A5DE3A3BC2362D0B1B1E4D945C5DA522FDD50DB83E2EE2FE7, B6D1B466185DDF658D59C223288F7286F044DECED850D2E050AAAD6F2B1 -4D0C24C65465AE7F329F1A339, 3463EA404C628BAB406C123DD6A116D0FED5DF797CE662E08E25D785C8DB, 6AB525B8E24BE4877A71127980249B1A84128849B152D4344CB6D66F83CD -E7246E52FD310B7D97DD4E9AB, C08DEF3835253122EB3817CE82AE4C5FF22A35090066671B09F74CB6548, 3A441DB57D2082CFF7BA3EB1D5CD62BEEBD01CB3222C33BE345B3FD405AB -2B56D4AF8F7932278C797EBD01, 498E67A028C31E9326689B7C3A639FE8EA7435A023BAFDB1CF03FADF0AE9, 109FB74C5673288C7D4B74CD3F004D89B97540694016FF7C3EA5AD290AB7 -82047E0EAE6B9676A56C7C3703, 4939C09675A0364F3980B57B8523831C2B96774217BDC5C19D8D70DC0D2E, 2D79E7386013EFC1A8DFD532550FA0DC0C26F5780CD2DDE4461B32EBC095 -1860D7A2C0B42C363F04574A509, 29F983061856678C44E5354B16E1B247933AAEBA0C730C3B26FEBB775730, 6414464A72D491B7195001368CC8DB984E6EE403ED2B79CFE80E32F89B45 -492286E8421C84A2BD0D05DEF1B, 22FEA402646879BFA51F4C787081F717C5476E1A20F5A20B00600C2AC160, 2DDF5FB0E511B19D662B7334EC5C1394BAF06A968D00531EA3EEDA159DD5 -DB6794B8C6558DE83727119CD51, A05E3C2DFC4F790902DBDA02A4B6503AC2B04AA6171C13F2AD3E3450813, 5AD89E8308789619D7C445B538100059E317D99398B5CF87A4031495069F -29236BE2A5300A9B8A57534D67F3, 5291A71DE353CE89A7DC5448833D30D14B1994EDA0495AAA065179436D6A, 24A2CA3B2BDFD93E499F8F7D03C8561D956029121D2799134921662264ED -7B6A43A7EF901FD29F05F9E837D9, 4D65600CAC3C192A134AAACDB4DAFE078ABE55B074419A2525D23CDF9F50, 4FB1A2B21B66C5FADA0AAB3D62EFA9895AB4E4CDA62BD633548B52669F29 -1723ECAF7CEB05F77DD11EDB8A78B, 456E00BAA3EBE4F1225A22DECB3B9E0BCE9755749CE7C604EABEBD97F1EA, 68DB62AD79F3191D89E82210441993873D6E60A1CE13C3F7EAE759558521 -456BC60E76C111E679735C929F6A1, 2795EBC03095FD8539F1A853195F68C5D90FD6418DC5B9E7C8969E908685, 16A068B238FF3854A9D7E97532F51069A53FB5B45C316E27621742D70A42 -D043522B644335B36C5A15B7DE3E3, 2933753ED9E13FF1E16A2DB0489FA81FBBEA3692E1C1AE34B8F07CEFC494, 63DF6363AE5269ACF13CF4D85C6BAA19923BC32FF8036CC08B0B5F0294A2 -270C9F6822CC9A11A450E41279ABA9, 27BEE5431C1A0B4A57DDBB10EE38A3E77173FC675032CC4A2EC958C65911, 3160EF68104A87C89F23C713A7719D610A1BCE777C8B6B43DC0E1E83D0A8 -7525DE386865CE34ECF2AC376D02FB, 634F672253D66B1919654AE067397B710D4FA9DC748E8B0DF5C34A89EA74, 5069578B3900D2CA6D15C22E75E3CFC7AA8D8F4B678CC89FA97287FC6DC2 -15F719AA939316A9EC6D804A64708F1, 66FED1214804936FB3AABAE3BBD68C5ECEAB3C318C6400955906BE373DC7, 15C2D417CDB2A5A4DBF599EC241DD5163E481B6E467A89A68D65334E2EC0 -41E54CFFBAB943FDC54880DF2D51AD3, 3EB92DB94C29C9023D3C49E67AE20CE3127BA1D2D4026508684A0D256612, 10B65ABE42420F10031CAC34F8A7D19DA1F52A15F8E5B879DD5239535EE1 -C5AFE6FF302BCBF94FD9829D87F5079, 26710793AA90A6E24D49DAB1D7AC97EC53B805681CECE0B60DB1E2E43CD9, 65128B3701DBA278A1084601B57875B272ECE6C786ACF7294A18FF95F731 -2510FB4FD908363EBEF8C87D897DF16B, 4F0739AE91E993ADA0AF103BCEEDADC98B4B6E7E417BA703ED3CD13A81E5, 2B6A98D04B57F705B0F2B2ABE88E4CC8116CD65E9C11722A776177281202 -6F32F1EF8B18A2BC3CEA59789C79D441, 6EF2DB58644016760DD29D7121E94386DB37186C1E33E502F647680BF3CA, 6E6C61989FE912AB1BBEA4BCCD54F040D3DC1A720E3E5F9336CB6BFB9EFC -14D98D5CEA149E834B6BF0C69D56D7CC3, 2E5C164D4DC8124BDC888A6D0C1B998B936412E5037346372042D381C26A, 76579CD5F716EC59F2D72501615E339334404BA00BAF2737E41C26544C77 -3E8CA816BE3DDB89E243D253D80487649, 2DFDD312141C5779BC85C4014B0D3478FD0509B80844B71F05095C2A10F, 3A640D76355C016154444226FB4303FC4C34D319F00D1A28FB47EC936304 -BBA5F8443AB9929DA6CB76FB880D962DB, 3E6873EE8669DBC9A3BA7337D25382ABDA94388B8C3607DA06DADA05BF47, 741D786775FBDAE2D25F6CDED61E7344EBE1350734293CF1FDA4CB366A09 -232F1E8CCB02CB7D8F46264F29828C2891, 6F133124D716D5AA8D40DB6A0E7B09FEF0C83F67DADD0919435EEE9E2347, 2F03580C86A724AEF32AEC3817B3288D9CA2987D05D766BF0CA3A4246C2A -698D5BA661086278ADD272ED7C87A479B3, 71090609BB065A71FCEADE64EB9AFEE563EED5F3AC001174FA5535649A29, 4DE76127A5FBCE73EEE9886C11CB8ED567BD6D859BD88D33BCB3AD0D0AD3 -13CA812F32319276A097758C87596ED6D19, 6C58F87A104F8C4F56C854806A08FF6F8E3791F389413D308E0BC540EF3B, 76991852A94DB2886CF82E1D982906E2357F33C31B92BD9EA80498042019 -3B5F838D9694B763E1C660A5960C4C8474B, 22DE3BFE2BB10AB2B978187840F28A9A5931A947CF8C94ABAB2573688E9, 4D20329E481EAB80941D66EEE7DCB94006315F83CC985819FB31F5E1C63E -B21E8AA8C3BE262BA55321F0C224E58D5E1, 63A54BFA5B9EF7A0A1445C0985FD3FD616B20C3FF58CAD1847458DB3EB2D, 7C8F8B57C5387EA95DA3C7B0EF1FCEE4CD3E7D902834488D746A6D38A1BD -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 816607659CD3DCDDE6F1C691E7D4FB7072647F9174E04A9AE7A108BBC6A, 4070B5F4E38DB5873F86F532BD2ADE27C2ABCF57833E62823A44BE32F100 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 14B5EE56AF352EBF5420B456CC060D832120ED403E7B8FFC9F33941C1D04, DA9F3E14EC6C8B518EF8174227BB0F5B68CFB0B7653A2DFC75D8953AE99 -12C9389FCCA50E069A6FC4946479E435E8EBB, 35110990E6E60B625ADA294C368F386EA336A61F0E07F80BA19D21B08F67, 10BE48A8A4A9A6D656EBC63C62030D3D1F27AB88CE7C95F71DE0F9CFDA57 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 6E6542BAFB8496A5C369068BE45C0C989971F56F561B4C065143C5F7E34D, 179B143B53EF351D9A4FE153912D58E0C2A7B133DF946834097A3588B74D -A912FD9E31CD7E3B6DEDE937884905E530493, 20534512CF845F46F856E9CE9966C1E079C495164A48F0FBCB80DE84E38C, 5B669A9E7B3D35F7469C5A80E97A42C676E2C5ACA6F6AA5C8B06FFB1A336 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 1EFE8ED558193CE7F63AC3B3AD7F0ECD34929D52BDD65A0F0C616CA00D43, 6BE9C5FAE993BED6E58EDACCAC5576E5EC0224E0BA5BCD5563848C5F0D0F -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 3A9CA9AFA0344C039F520D9286C2FDEE2212FC908FEC380E18502DB3C4EE, 7301AE0CE8BAA7484955CAF94912FDE19FFD2E877AF2A512F95E4743E6C7 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 21EB924BECAA12EE75185A73323F550596BE8CE61C28D5B75B30530366E7, 4EFC3302D2F643017F6DAE5A9B420CDA517D9250A79CED71BBA52E32DD04 -357F023F0DC204F0CDC846CA921F1ADD8447283, 6305806EEF37DD979BF916C6EE60222E6F5FD116D61650413B5061B90661, 29E60A720E81A72A5BE1C91EF51D01E2C806AA22B903211B4CAD4BAFBE1C -A07D06BD29460ED26958D45FB65D50988CD5789, 2C43098DD5DD41CED0B6E1067E2ADCA5C890135A8C5E3D4D264A3DFB85C0, 3CC62CCC5BE1A973FB6CF22A7272FC1B542E7399C80DC7DA26C587E16FE5 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 7BCCB9820F3208B1F49BFAB8557E9B358B30DF48C4A37FB6AF04871CAAE4, 3428B0C247950847CB00FB2D25DB65C9878B9C7FC8DE0B3F3064DFEDB0FB -5A4653CA673768565B41F775D6947D55CF3813D1, 46E0C5CAACA5A1FE10455207325D887CB1FEBB901772B98500727BE15987, 1D291F9168E252D2381701841C1E091AAD39020263E1E0B827305B184463 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 34541A22A5E94A5105E5C6FC064161D0FA9AF0D64BC4DB1115D022F85E5C, 4571D170AD953AFA00E398C5C87B6078FEB64EBBA75959FF8A7CE4ECD126 -32C78F21DA0F2AB093551B3248B38680448F8B259, 1262D3EBE7E1BBE15F60BD1C4B662F9DE94B1087AE2E77173CDCBE16FD9C, 4B43CBA0D55CCCD1B04CF0A7FAF119623E3BFBB57E344299D436E59868A4 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 66031E5F008F2A5C7E98F3B76D86DAEA160C46217318A273B7A67686A7D4, 3F654B3143EC2387B7AEEE34591480068B07B444D5C2D98B466D7F7F14BF -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 58F535EC4667EFE4044E5E94DC8CB4B2697708BCEA5FC33CAC27DE7962EB, 6F290728FD8B05F355EBACA3E21EFB23D74D578201137C0EE4B7CDD2255E -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, 42B7388D4D0800162D9539B1C742A20779C036951425D0DAF42F1004C242, 3BFF687F16A6125209CF5902C1E5BFD78EC9321025D97482D9CF87CFFCF2 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 46E715529D0FC2FF24D929430AACD97ADE98CDCCF29036052126861B696D, 6808600A5FE4E8669A63A7B49259D5893DE82B326C1362BFE0CC6A983DD8 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 51AD5FEE3F3C986676C9D00A654ED4D30574409DB8CACECB0803D1A94115, B4EBB03A47ACA0B0888437BD763D05ACD8C13C29347DBE06C1EF2524BD3 -909A469765F53090D38D5A7231073A03433CC33DF71, 5BA067A94E80274FCF3CF40957EC53E5B5F525E8811D257B14B5DAACC87A, 3DBC2E024DD32D232F0AC934271FF876DFCFBAEC1E1C09A68D134D35BA97 -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 352063EA6A6490F5702FEB7A7A87C5EAFBEA4FF403B52917B6C1A016C13D, 49BC629B9CE3B05890AF7997AC874AA80DCD1F1B91A6AEBACBAC3751528D -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 38ADB79B159E691B4118E354AE02973F5174A89C1C5B35DC79C6A2FE0B68, 1AB08BDB923993CE0A130FA5490241CDAC0CF76AD8150FB0B4D634138587 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 294BA38C713162A100718891C0035FB5AFFCC00BDA2003C6B083873BC979, 7A438D809C9387D7A5246623DE6E56C7032CFCD8A06C85220319494A4AC1 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 7482B531871A5A09219F453BD80B92703D2605C963C6BE1B402CB8A7F115, 3C01FC35305593F3941E0CDBB0C250E388D142094B78E7978EE7AD852E3D -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 114A9A3F855A000F3AAD6658A608F625383A634FFF7A13D0921F93FF9C42, 754D5E037316B774782D6CC0E0F2DB7FF307D8187B83BA50948A3BDF6D75 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 1AC978D3FC5EEE63FD8B48AC4293D45416CD063765027B02A1BE0933F9CD, 5C669C19AE8684D71D8A283ADE9D1A0CDB978B0178E172ADBC4DC9207B92 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 188058D8F5BA5CE944B9F110B9E25B03BDA2EFB9603FCAE6F0BFABB520A3, 2F8D84099CB6C83F222122A2F2B1A0BB8AB8132E81C0E7F4FD498BEFB919 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 4F10C821611D47F70036B1ECF4E9E436DD8FB7B580176D38BD0439E610D7, 214775E1FDC8F606E15AF5AE8DEB891CD24E10665EC504C25AE9C72EB645 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, B962A8BAA0CBA9D1FA47200A03DBC589AAA666E81D24E024DBC5E0138D8, 526053EFDB5EF43943B8FBD8356E0DF0B415D4A10F3903888DC31A8D9C05 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 72C7C1E675DA3708AA0DFDB697708B58547E31543BD5D746CF4579ED286C, 4DAEF37524DDD841145E019DDCBAFFF8B5D8F36AC07001E5282805C2EFA4 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 49B01C11FCE8E46EB66784CF2BD620A516B83B1D75285F60FA0159D24551, 23A41E66E0A9607AE3F7E8B8D7696E51ADA27FF8967CEEBE77DEFF3661AF -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, D1BBC4B03F4D42AEAFF7C1289334B69ADB15180BCEAA3C94DEA2BD8C01A, 7A5717E12A75ED7B2B66F801479AE1EF20301376519B9C435C84E2077E15 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 2654BCD0099C6BCD086A68B957C34328FDAD2DBDF8F4D5A8652DE8342A76, E7EDA149E8821F56981D75674121264CB1E418B20F42E89FE001238BEAD -29396F76B67B7C403D73A1059B80139336878E44938606769, 22543DC68C253E3FCEE986863F1CF1C825D5CD906C9A3719D5D285454834, 1541689476CC5AEF38112B562C7DDF6D52F26C0677947768AB647C85C164 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, 91FA21E8DEEC03BBBFC36C09A7E0E19E41F5AD40544796543CD30B2CE6D, 6E33A442D6C146C20F33A118F4B06DAEA0525BB035A1D9B9544CBFF2F66C -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 3659F4240992D3632AC1B92F79061AC0CEC00552683C246AC36C9F591DB2, 18B9FEF6470E5A22AEDD00E41A07365D122A325E90684D08445EE2800DA4 -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 6C9A1B911BFF622F89004C92BB96151DE0E2147A1EB6A7EAD890CB9A6345, 7F4CB2E63C45204ED1291A8247B7492BBF7149EA2CEE7FD4A37CB6846B8 -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, 7DA8ABDD8208BCC32CED7FCB49BDA187C42C752C1B3455E53744ABFA6EC2, 48BE2FCF40C3228F2FE651C2D0774FA3CC2F92E213FDC269C591BB0D8339 -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 137B9035A492681CFEA147254895E69BF2FF133088FDA4A81DE279BAC37E, 4C11AC1081AC265E20D76DD5C41EE0DF58D304CBA5A94EE9418A34D45749 -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 1E1595DDA9FE60C9F6677FC5A3240287BDB5E2D56C3E15A890FFD9DFC2F5, 5A63D86866BF38FE8F56A8652BED97D55F93049B5E044E083D2C434B9D1C -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 7194191150E32223D218616CD8BB294F8B3322462F9ABB3711104E99F0C7, 88E7C2000FA6755365116A24ED8919149922FF832BEAE6AC03BAD50EC42 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, 3A11FF1A45B89DF43730AF684397520FF5A283B97600A61A0DB9A4E0BF1, 61425EE3FEEAABEB5BFAEB8CFA7A27567E2A02522DA8E99899E68A24A374 -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 567E86FA357B357E3DFF8891563B9DD5E8508340D62D88471DB8CCA3CD07, 4905C782557DB1199A4CBF3C65095E4FE167C2E3908ECA8B330759A119CB -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, 24D375194A79A04F9281D659B85F9D0FCF576CCC470C9D7E1E92558588F7, 52D9F344F3EEE5C12D7BEBB694BE77362CC4C973399A3867DE12122AABC -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 56A3B0C9BF7F627DB9C8A60D0E9ADC4E19646D69808E34C19E658F336588, 56E96FE5E1A09357127D92BC46396397F025D71D820C85ACB8511014D9DD -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 596D54D153BFCC4A5423BC483D0BE340EBF6E8687F707924EABA54DD2C2, 7CBBB6A84315E8C25C1E17C2C00F67C1FC63384665551EEE214FB0DF578C -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 15BC603F780D726626DC4B90907619A5160422990F1A7915B0B4704ACBE7, 2B5E8ED833469F81EF60FA8066239CA521C848AF380215E50CF20D88CC73 -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 7541AD8763B69955B389B95EB725D8883CA04EDEFB7B09A792821F354E11, 576BA8DE3DDD45EB2B45246723558F7EA69944F0CD76E48759E8AA9E7819 -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 48B2EF2EAA5B065B4280BACC7C61A78DEAEBCDA5DA50877A1EE7EE246F3E, 11DB511B05B81745426882843E9C2573FE32DCDA3B3537C8E2C740672FDA -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 64C7BF110DC22639989FC7CE61E10472E18B22F8A98E3CCED0C99BFE876B, 54C666550FFA73808B806C731F597304875857127FEDC4589CA4DD0F636D -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 7D1F4E73D5303A2DA32B147294172E02A3ED83CB1E118B4BAD534A9E3B8E, 6FFB081861B974E632410478FA24367A18F0330E51C3BFFB35F04FCF3556 -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, 284F2CF7717E7E6CC8E805976A5AF1D53D07550F477115A1BCF60F38B1E3, 51B16BD35B37043A244BADC6A46A0B13D89F4E24348B75DA5A50F2DC2B47 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 48E1E7E661B544A8F59E9493E7EDCB7EE0921E26026704469F9CC9A3DBEF, 64F272672AAA77B188B93D859A3A99BF7FB8CEF111962717971FDD59537A -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, 3BC05214A19B6EFBC333C857A76280845DDC6D78D77F57FFB7DA1EBF215E, 4A72FEAD03536D261598BB12F4AEAFB7D5933BBA3B2E2885C458F60FD343 -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, 170895E40A234A895A2F07F9E7D3928DAB2DCA2C0398565A69891CFC80C2, 66ABFAA4BDB0EAF7C7C7FDA1DFBEE88987240C01CB573AE164C7F3A4EE29 -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, 6AAC504878180ECEE238691026F530B7452CF2E104B3F0EB1C37F5A8B74C, 7A7D852A21885AA4195FE66C5F04AA14EAFBEEC6130BA2542C1134E846F5 -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, 3F8903452068E58A8EBBBF0ED84C13D9B120BEEB46CA0887659A04F672E1, 6A6D122D0251E69D01355FB3B16C3067EF277FC74BF1DEBA75814FE531C7 -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, 2946532A4F29B6B02C7D760F5C5F3E95D2790952D8B5DF5554DE6DD237F7, 2566458A1492E4B2EF36D5D02C2A696A55D0ECE36E26C10A4BD56890B40B -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, 46776AA6101E3B94EED69195A31DABDF0008EEA7A3DD7F8BAD991A4441C3, 61662E13D079830583892BF88C2AFD80344FAEB5C4F95956765024534E7B -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, 4BC7D3F2CF4B3D53496C6653A2267A8A7F46707677D2E9DC5DED45E5F920, 185F87E15437211D21071E6F9B8B98634435FA15A38D645A829C0A50B2CE -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, 7A703232A4F5BAF562564A1448F246A739376049F62834B6562C920375C3, 2F91D7C1959BEA655D6772A58E2C0369A176B470C1CC7D765DC4AD2B1AD9 -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, 1ABC0718238F3697B2D9E5E8DECBF89C740C46EDC49B86B359069D0DD903, 7BEDC1D3155B9D0D321FB2AA836158AB64BFE9DB4E77934C8AA186837EB6 -1.2.840.10045.3.1.5 -1, 38AF09D98727705120C921BB5E9E26296A3CDCF2F35757A0EAFD87B830E7, 5B0125E4DBEA0EC7206DA0FC01D9B081329FB555DE6EF460237DFF8BE4BA -3, 5FE418597FE277F121524B604387AD05ADC9004DE22195F7E9403A6A555A, 2F62636C00AC6920808C5715078BAA197481C0E86FD349005FA0D06617EE -9, 286E6FE528F41140E50E546999ABA8E0AC04CDFF1DCEF19016E6D921815A, 56432FD3BAF77156BB5B5A20ACA3836DD22F4478B1E7235449CCABE580B -1B, 1CF38817AA2E6CCB36AD6EA0A7D357941FE039060EE2A105F292ED43434, 3F9FF3C4DEBA90A58FB05B34C6710860E033C08B8C228750312E337C68D1 -51, 589829D36FED180C5D38E58270EDF62D2921BC601E137BC03D8603D144FB, 4FE3B5621442962366218700AB40C6558139252A0F9FCB3164E1C39FBEA -F3, 68643DD5FD93BCDD10592042E2D9C0444F1989A856DC9284B232F439C06F, 702EF75AA3E591D5233736C2437A46AB1AF1DAA3774C645303013CDBF603 -2D9, 84419B340873EBBE5AE16B1AC18616EA17CAD45ACABCB22818401B66A08, 588EB54B991B85748DA19443568CAF98346B304CCA4319906C25D91A6212 -88B, 13C38D3A8AE4269023CD17C9F151B02682DCCE3440275198465B699DACB6, 474C4F4EF56F91A1546BC5CBF5CBF4AAC940182519AC9C17BD83A7E9DE85 -19A1, 482FC34D9E54A1CA2974CA7F870CBA3C3849DE5FE9BBE80E0DE7B7166C60, 72519864240FF9F89B48B086C85726A89672352AB3772ADD42DC6B6F0321 -4CE3, 386270C34CB30D19299382485D2D861AD4772D7870C366A0A5954D3C48EB, 2B8F16CDC5482BA73090B3C9CD9B71BBD1DE8630E67DB0F57F007FA2EB66 -E6A9, 57CDD61D9C372AF33E2BDA918351EDAD0B3557DDE2F61B22A0969EF14B7E, 642837537358C31169C8A0AA857E5B23A4F4C9F281E67E21753C48D8E8C -2B3FB, 7CABC425ADC0463B5272D0F74DEF1C965B3E2EFE4B4ACA25A75E2AAD670D, 327F5BE37852A54ACEF1D391FC0209A808B9F6E84CF2FBF47B16C7315A8B -81BF1, 61F1FF65862877BAD9B559AF257878643E99C4145C510FBBD0D5E86D6FD6, 3AD527EB4B2B14ACC6B6C2B6F2B21CCFEF7064A05941683F0A56675567DD -1853D3, 3B4426BCB89842A5D81ABAAC1FE9A6E487D56FB3CB3455FCF033824FB41E, 11556DFE56B0F334EEC51E454904285CF9B6281019631475C6C234B341B5 -48FB79, 79E3988928B1E5BE250E7173F3A4ACBFAC6C45364E37ECC2ED3EC7075DE, 769ADEA03059065933EFA4BCA0C0CD3C167865243794585945D11357F1CC -DAF26B, 1ADA7C50E8AC717396865C3070CD18EBBCA7D823F556AF9501B9597A4265, 38208338444CE6B91FA53DA219B2980C1392B1F8225CF7792379C4646293 -290D741, 4CE51E94C1032501B01E1DCB22D829463E53C49C1A0FC1A700BA18A40A31, 6B6B0A8154D88AA8AD3075B649078B379BA43942E3A9B6EA8C5DABA26478 -7B285C3, 2A65B382F74959254358589185B9C475C6B6A4C60FB7E2E5843867D60BC, 1D571C07C3EC8BB1DAB75CDF2DC5D5E3C4A07D61D4AFC60C0E6209A2B92B -17179149, 39B624F5CCC1F4C168A9790D5D52AD92F5B988ACEAA2A060C50FCB5A0E1, 40A9C78844849427C523C8AE757E3841C5ED99D314EBBF84D46E20686BDA -4546B3DB, 31C0E4DFC16DE01DA5048E9E478BD085BFDAD0586E4EE77D5F367F8FA6D2, 649D3AC1A358CC268FB23E5D4CE4E1C0C3DB5355CC333A0846F124D1F2C9 -CFD41B91, 155C3565547286F494321C961AF62E273F08F535582F8C0443EF6164F645, 5DE39A9734ACEBB5C8A5D3C0DDE5E53BCA42D7CF72C66B9297A2404EE92C -26F7C52B3, 37272D7882B909711FB744241973F45D33F0955FDB9339C5B5BB3C970753, 57249D100993FC508C613A6F1EEA444902FB4358AECAAF59412302F5139B -74E74F819, 1B0BC60C07493B348749E22590F99BF8F3DE06F1F8F5B3D9E2B7EA47D7DB, 33B43AC33A81A223C0EF8AC0F44D48ABC2C870ED7319605EBCC4446275E8 -15EB5EE84B, 1CBE6A4D25124EDB8A53CDF879233F7BD0DCE12EB60188E4F58064B0795, 7474BCFDF423059F276D71393A690F355BB60E43091A1A5763043D029CC4 -41C21CB8E1, 5B86136CAB1F927A8130A8E1856AAD0CA7D80D7F8D855AFA57CCEF1BD633, 5E8D80C83A6749ACEDEA995743AADC076426059AE994C34B8996C65F56AF -C546562AA3, 7BCDD9170C57FBB06804CD0A756D226F451DCD970B6E93A883C2022AD359, 51D1DFB46B7FEA2530B7AD7A89AB8070F1331F321897468492370905E8CB -24FD3027FE9, 7C83455A26003A9DD83C29CB7729A4CDB8B52A1D7851EA498D5CEA3EB48C, 278D6C4FE92D772374FD2C1748228966831A72FAA35A2590C327E0E3DB29 -6EF79077FBB, 4C09E3F6ED643B2590341E4F2DD200E7D323263D9B52ECA1DD10FE3FF5A9, 117001919224D778A081031038CAA06CC7451F78D83CCE7B553B179D6817 -14CE6B167F31, 2955F6BCF5ADF627F82ED70AA54BBCD8EE9F26A018C9C3F5B88296326939, 144C7DC7626D6FF10621D18DCFD47CF874174463A9B10141E539FDBE933E -3E6B41437D93, 3CDE83C774A7EBDF4B587F800A3CB392D0DD582DB2221408E8D5C8F24103, 5E2F81F4F98FD43E4ABEC7E924CA1BAC72261C9032B4FAEE8C3A8A594AD -BB41C3CA78B9, 628B0614A08DA062DC4E8EDF3BE2E5E8A3D3CE28DCFD267E170551E3A256, 2AFE79DE489D347B489FA0441222603E644D71C306709D3CA9AE4E1243F4 -231C54B5F6A2B, 4C0E1125DA75C83F8F12D156EE565486BDD38CDCAD89720EAE5D933582B0, 1A8F390882502604EC0A6FEBAE9D47E3DBE2492D3B4CDFF5AE1B11885371 -6954FE21E3E81, 2D1B9FACBE1BA561D90E634DD81D7505788B35F2A6217089F6A8C5632FE0, 4DF6FE2F45B1C32F1E675C8DE775D2CAA07E2315CB89A0FC7B2380601570 -13BFEFA65ABB83, 39434E6BB5E260B912629AF2057D1BA63454D1295A1E070B1378702D3395, 34C74C27E2B9348BFDD4E04517311C3D525A7BFC4883A532BD10DAA74897 -3B3FCEF3103289, 1FA0B1A1EA17DC292C167FF4978169FE05E084C8C0094A595B115A208C1E, 6DAC5AD9716523D27AFD761A9351C3737C4D6025635FA33C3AFBE0B23CAE -B1BF6CD930979B, 150343A4899E5826B816CA92FAE38E3E033D92D429F2DD33FC4E7688A87F, B052558AD531B917F56166AF8624BD8AD99EE84D07E82C0066A383EB0D9 -2153E468B91C6D1, 62F476E582A49E42E053926447F7C7EBB64AECC929D5012ABA83B53D61AE, 1EFA54750534BBBC83F1C0CCC69DDE8B222FAA94406B011C9C89306BDF24 -63FBAD3A2B55473, E65B6839A8E31952272A7CFBE775F737B07FBE98523B1F5BD754CBC45C2, E5FF9C7DD21C276906439387552A8ACA838819D9413F58792301CE0D6A1 -12BF307AE81FFD59, 4044CC246E2A99104F5777438027D8706D45D39C99B8E3DA17A7112DB26D, 4E981F467CB0E6095F4E105A6E2FAE63CC63508730A6779987679921E0FB -383D9170B85FF80B, 46515DC83ED932D1020930E6BE3BB55C121D9982CE4F672A282A661D4253, 39994077C1786E534122D48C2C031F6976C68D59C38EF89A94030853AA32 -A8B8B452291FE821, 5F33A9607ABB6B066D1B0AB20795394738568172A5D933942745A241969E, 13B248E87573CA9235790A776CFEB79D637ADF1EADB7CBB34FD8B1281FD2 -1FA2A1CF67B5FB863, 33A60F349B254BC178FB78E08EEA35CF1B9E4191E701863122F730A6B57A, 64139733CA86918C103A1DB47CBA726274AAE704E4194D6500B760143C91 -5EE7E56E3721F2929, 571E0854E784ABAA6413D3AC3EC48FE131CDED921B3E228A4B478899A970, 2FE16A98F2A4763C358D111A3DE2D2C314BBEBD8C85716686163EA4C5CBF -11CB7B04AA565D7B7B, 6A98FB9A818B000AB3D37DF0BB7290458B1DF3132EC5F2856612937ACD56, 162764740A33B68E70BE07BD3A674B87E7D95921E5126FA0F52B55CB4AF4 -3562710DFF03187271, 63DCE43D98614B407A5948CCC92746128DE42B2925B205FA39E5E880415D, 3AA51AA2E0BD20FD9E399CE2769CD1C2FA6142A038D52A31521568782701 -A0275329FD09495753, 4AEFC1EEC610059BB6A8DF3892F65E69DD921C3C8536890BEEB509FD569, 20F044A4B982455E0DE3D5ADF318E77B633770E7AF39236C0DACA695B46C -1E075F97DF71BDC05F9, 65006C36EF285847FF12A2FF47145B6FC874C6E3CE2C239184B3E443710B, 68F93D909571E6032922D77863904F91CB52AA46F946BE2C4B9B13CA92AF -5A161EC79E5539411EB, 37915E76BBF3DC57782DEBAE492AE82A1A7055C6C54A869C915E6F8D5F49, 3062AC33B091164AB7FD66FAF738BE445E105082C057B5619F49AA85520E -10E425C56DAFFABC35C1, 7E38CC69A165107E1792D82FD9B83CF6740B552B25BC60E6F88D8CE2E550, 626BC202B71CCF04285EC0E1A1DBD9D5A3B26AA81A571F3DEEF5B949DEF9 -32AC7150490FF034A143, 6DD2E3EE90C5BE59DBEF7D147240635B8FB69E8ADF37DEDC487043308E39, 6DA61BB29DD08EA4AD8AA98AB2278296C19E2CDA979D957CBF85A45F880B -980553F0DB2FD09DE3C9, 393E5B45341B6AF32632E1BD459E5A9F278EE776AF870B4746C0CC0F293E, 19BC0D4AA4A164236B189370AFFA279BFD600B2842055B0B90409B8CE878 -1C80FFBD2918F71D9AB5B, 4A641652E35C13B8E10E53F20CEEF7DC085143082F1C0D959857A4D7E5D7, 690E4DEF3B3FF01DBA432430EDCC13B31413ECC4E619BC57CED98AE0E787 -5582FF377B4AE558D0211, 16F7CE5BE4BAA9E904A4048FE529E5232F21EEA539AD7BAE291AF842FC02, 484B8B41633E6D72D6671C70477A2311BC15B2E45CD4E2B94CC81B9CA988 -10088FDA671E0B00A70633, A7B6AC5E15CB5A18A1343206235AC184CCDD59DA52872159EEB71A61D10, 4BC1CA77FCA090221087766B369410655664CC137658A4E84FD90E61A9FF -3019AF8F355A2101F51299, B6D27675930669DDD67DAE6E15470A3D64DA059AF0C5D59EC979D481777, 4DEF4446AEB5F11FDA29B96ACC776A788D1A6295D182262641183B255D7 -904D0EADA00E6305DF37CB, 43EA32166A70739CD23556037740894DC5EDD7201BC76FD5C1552196DCD6, 1361485E9ACE2BDB93073628DE031B745E04C78CE38E7DB940CA6D90026B -1B0E72C08E02B29119DA761, 651A9E0653114C4C6C63C50D0E062CE973D14CFCB63B3E02A3C90510918D, 4CBA6C53ADDEBFCB28084416DA973433920349BFC0C0D6628C60890AA389 -512B5841AA0817B34D8F623, D5260344C489262907EB84B746D43D26557D97AE93A1D15D72F38B5F4A5, 353D3D42DE194DB611FB68EB07F41601827F783433F99939AB9E0FF643A7 -F38208C4FE184719E8AE269, E57F18959DA6805BF5BC6DE534D3CA761630AAEE1F0250A7EBA7BE69D16, 4E524C882812DE0580EE58FDDA82FA0C37C1CE85CD648E37333B59309AB2 -2DA861A4EFA48D54DBA0A73B, 6A828DBF49F6EF816E156884A19CF673249F5A67F37C8F6EBC156C2D4D23, 7F0223DD44B764B2CF54470A4EF9A24A56E1FEEDB297BB87794662BCD239 -88F924EECEEDA7FE92E1F5B1, 6C55DA95216E0C74A5EA055F13375A82B060D4FC735348B66F08668B1316, 631056BECA39B67557B85E2F09955C7DF3A3C87C5DCBA02050C2269E586E -19AEB6ECC6CC8F7FBB8A5E113, 7C1D1F426CC0E4D0A76E7F9C374EB9B4FC7261649EF9E905F4B8CCEA536C, 1598902D84AF7521C5EBFD2509609A340C63C040706CB7BB3250E5684159 -4D0C24C65465AE7F329F1A339, 4BEF4230D00425E03D506368314D66A5D1BF7984E999E2D1AB5A089FE153, 69E02D69E150AF39AB7666346E150C24686C7665F106479D5DCD348E2943 -E7246E52FD310B7D97DD4E9AB, 7A73BC91D2048097228C7664546E804E604D7CBBE5B3CBD000826F6504E7, 299811EEE5342C7718715FC194E476239B15C5DE14D9AC1CD51B441029 -2B56D4AF8F7932278C797EBD01, BF68E4C3C367DC7C16BC2E4F920675D2CFD18BA38A547837EBD454897B3, 709D05881CE11936AC1348C46E05018AE8CB38E269B6F4EEDB7F10C1D0F -82047E0EAE6B9676A56C7C3703, 327407AAB820855F5462B437E9BAAE2865C7EF5139D8F335B5034412E7C4, 53BD529DD1C99692A74A32405AD9947F5DC8CF438091231A1527D37425AB -1860D7A2C0B42C363F04574A509, 3F5240A4ABDA174B3F1BA9DBCE7BD2B94B751FFA51BA1B95239683B4E53E, 6A626021080BB693A28759487CD2FB860834EB2E0D174D987C2D8ADF9147 -492286E8421C84A2BD0D05DEF1B, 2B14C031230164168567F0CBCDFCA8F467FE48580FD5837E3C7A42C02FBB, 5A08EE1DCCEB9C6CF511A9789AF1E26575710EDBCB236B070400D399BE80 -DB6794B8C6558DE83727119CD51, 5B2756338EC48CD21DA02F1AA9EC7074CF83AA89AAA6A57322A271633D28, 73FB15F51525466D8521CBB235F24DDA8B94CD11CF8CDF19CEB9DA558B7F -29236BE2A5300A9B8A57534D67F3, 28AB2F6E7E3D0946B821EFD3EE7E8F9BD4FC6096AF8D831F1FB5C62BE235, 89E1E8262CC6B044248BD281FC5F3AE34CA709588762A8E7FF4DBF43295 -7B6A43A7EF901FD29F05F9E837D9, 58BB5125430AE240B94E8B59FCBF59C45C6FB1CD1D2192A083CF974983E5, 5EBED2FBE42EFCFA162F078C7CF8D6D2E616D7A76C571AF4D5806B392BF5 -1723ECAF7CEB05F77DD11EDB8A78B, 3CCFD94551419F59A045CE3E1FD7631CC7EA4AD7B5F56936337F9F40F329, 3759A30FE0EE3E95C889AB0AA3B0FFBD32614D301638299F5B8B6D759110 -456BC60E76C111E679735C929F6A1, 7DF5ED2077ED238D1F6D47335F79E14B2DB01826D648A57D4BCB803A2F45, 1DCB3E47F5746C06B13E88D9F7C009E33BBF1E1D0CA4FF5C373DE0E880F6 -D043522B644335B36C5A15B7DE3E3, 207FB339A1D75DB3DCC0DBF9C8F8317DCFBCC14701A13C02425FE972F084, 66C7986BA3C66A9EE67CAF02ECAD278C9C8D957F61BB782283C7E0D318EB -270C9F6822CC9A11A450E41279ABA9, 321CFA03E59AB827F45D06F2667A1870E31805D987535F216913F78B27E6, 7104593E3C2A34DBEE7BB13310AAEAC7E57672A05D09CF601CF181CDD8D1 -7525DE386865CE34ECF2AC376D02FB, 2A33D38118C1393E506068404D33256BA7B342D362CE04A165E84737A02A, 41C39170D8EB7520298E3AA918D374C3C626D0937C5FE1C38E07147F86D5 -15F719AA939316A9EC6D804A64708F1, 1A45D463EB58680CFFFE8357B465726A2EBD581D9A587DB6FC98B3D35A75, 2857796F55EA30F4B3B2F72DA90E504ACC4EE1F4EF91C0242B46BA373289 -41E54CFFBAB943FDC54880DF2D51AD3, 14B0AE8312A935E375AB2E2DE5F04D9000185B636CD056000A75B27D9BD5, A425D29CC5425102E71AFA7DA6F4397F7D1086A576713DAA9A0D05089A8 -C5AFE6FF302BCBF94FD9829D87F5079, 688C78676BA1EF3AC412884EC7C24C69A1D59CA3841E40D2FC666B5ECFB8, 23606177320C28686C5AECEB70BD995C97A4F7E28227BB723A36FB1A4DF6 -2510FB4FD908363EBEF8C87D897DF16B, 737C4AEC19A2CA136BEA72CFF719C378EEF52E1EEADFDC28A58B91179085, 472266BC820B4127EC68ABDBDD81E7272621A092CBCCE4D5F300EEC02CAD -6F32F1EF8B18A2BC3CEA59789C79D441, 7009F1E8A3731D6C5CDA3D710383BDD0907B5F975BF2B543D57BDC76DD37, 4A269313F9406396D7BB699518622C515AB12C455E569EBAF7510D3D9DF6 -14D98D5CEA149E834B6BF0C69D56D7CC3, CCE1591338ED1EAC3ACBD324FAA301093474ABE6AB7CB98DB6505ABDC7A, 351864516F9AAD2A5FF1BF637184621EB3337C7A2C3FC02F7F3304C75DB0 -3E8CA816BE3DDB89E243D253D80487649, DF674C5D42A33A1D35736BD57B81FBFE55C71DC5A10B8C10F82223C2B74, 58BA62CFCC28F94B959C5477616A93B00DE985BDE506191C4E4BDD5C8210 -BBA5F8443AB9929DA6CB76FB880D962DB, 352287BD03EC96CEC49817C9AE747FEA0DC5DB5CF5124E11EC4B93B6DB11, 3E3DED02A755DC2F1D60FF063F303BC260984229F1CBF915CA199CF83C23 -232F1E8CCB02CB7D8F46264F29828C2891, 58A2F0727353442A854FC3FF98A961FFC3488A8248B3BCEAFB093C1F9CB7, 71D49874E12FC80B69DE1DA0AFB173C08C8DEA4779A506B3900284569E56 -698D5BA661086278ADD272ED7C87A479B3, 79F6F00E9AA595A06B2832B04DDEF85B2B1004E70D34543794B288F85A6E, 312D41BA593DA6C1E7136CF34A796317C63933B66DC5EDB7A546402C6FDA -13CA812F32319276A097758C87596ED6D19, 5D6D32661D0564328FA7576CCB8D064A224059A5185E5938B5A4CD7573D2, 5189ED4CC1413E9BD73F6FC61ADCD0601665E3699FD32174750109AD49AB -3B5F838D9694B763E1C660A5960C4C8474B, 702E08F0A951420CB2B7DB3E41BB1D5093FC7F5BB083A736B1CCB1798DCC, 4DFEDEF1EC7C05978442F6A1B92DA6C891901D5B4DF83CC8B267C097B39B -B21E8AA8C3BE262BA55321F0C224E58D5E1, 6D9DB28653C17AE18CF1E5408071E8973D09E6B0141B825882116D2F688A, 6537C41C9EF59E563EC9DE8B7E87FD8AC84D5DCE4BC8CF38F581905C237A -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 5CD1AB6D5EFA8C006967E859A6FD14DDB4CDBF949FF247DF69BE7E81EA01, B070D089E47EBC81818C26A1622A7A66DF0FA06AAE0CF40EEB4C1FE8558 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 814D792F23A85783EA24FBC1CAAEFADBA4DEFC949A92991E179023ECE42, 6B798780635D8C4B68EAB8349D94D0EB43973FD03428F90FF718A2CE4BD -12C9389FCCA50E069A6FC4946479E435E8EBB, 70CCFE98A3F7E760EA929E81849883E0BC7A93546D6073E187E75BD7A40C, 515B48161D141093E2F6E730902AA2C1391CFB64FBEA7C56A87E8806E661 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 505C0ED42FEBDCA723717B92E21D4B34D0A2FB320EE3557B71CF382B0134, 1AD86F4A824685C7CED58543695C8AD2E26C6F30B3BD6C7D2E8DF2A650AE -A912FD9E31CD7E3B6DEDE937884905E530493, 52624AAF1A41B11D1EA1E228D19656395C5567061421C355CFF3F93B6A35, 8A806ACA58EA47B7B4AF27DF4018907AE3B7F8D2214F6A523E685EDCF50 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 1CA6FFBBBD43471A895AC768C106DA722CD5697C30C715CCDBE3D37BBC49, C7D25C54AD94913E0C835FC2BA8434BB6CDCC2EEA52A500BC18D42F2AB0 -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 32A48ACB749E87B7FFDFD7D101BEFCB307D61AC1C98B22483F0D1F65E103, 56D218104FD111464E3F95C767DDE59A8C5F1FF16A76FF62C51CDE30432F -11D500BFAF40AC5044981798DB5FB39F2C17B81, 58FA10D497AFBADECDDD98EFCE92C92371AAC3EE4E3C35F9EAD43C4855B, 15F499243343EAD80D43E4292E004A28585FC793D74E4FC239379A0B33F1 -357F023F0DC204F0CDC846CA921F1ADD8447283, 4072E21C8D40F4ABB2B48ECDCE2799E4CF3A9A26AF88B5C332CF9EAA52A5, 38615E4EEBED85AE4C5F10B5FB92C3C8E6C337ADA365CBABEB6BEA94E97A -A07D06BD29460ED26958D45FB65D50988CD5789, 5AF1F7743FCF6330AECBD2ECF3C8524B3D51F9608F063843618F99FD58BC, 4623ACB3ABC76A6AA24B46906D8CE8A554653617F8DA3C64FF9053086843 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 7FE7CA6F6379B93E8792F99615A7BA5E1883A1024381677D72E878BC72B1, FEF3023FC2FC978150F778CF4100FF67AF2D1C8184EFE0C710084B9B492 -5A4653CA673768565B41F775D6947D55CF3813D1, 5EFA4B0A4B9A44F1124880BFF734EEF7DA564A4591045F74A76111676C08, 36DCFCC3F2C75668531DC83849B889C80598463EB571154184B4FB4363F9 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 2B7A2A8F7FCB1E9C790E0FD6BA321335AD87AE195F066143A673A7E32606, 5EA10A0D36F4AA8C21B3A05BCF092DFFCCF9E440B92E3A2B8CD3595D2EFF -32C78F21DA0F2AB093551B3248B38680448F8B259, 65C991CDEA4B6A3B3E7630BB5AD1FE2DDE49EE4B51870E65D77350F0BFA8, 6F0E8069A8C549AFF39995E128AAC62374E77ECF3D4FD7CE47DDFCFD39C1 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 7DE528BDA30A3E3154A49F0982B8AC6CBB4047863D558376F973378187AF, 1A28C0BCF379DA83B0A5CD33ACF993FC25C4AB5853D404CC33FBCD09D090 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 5F1C1C0D2DADCE28298045CAA43B9F8DA1E24FB3D31B8F7807172EA5222B, 11A56304B5A59CBD2D57A4B547FAF05B8DA80ECE087D45A93E7D0BAB2B5C -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, 3D80ADB47021F85245EA0C902AF12584083BAE1A21EC469A9CE2250FC6CF, 4720707EB9CC4979DF2DA32B17E06232C21A6DE3F2AD64B93EB48955B615 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 334FFD241F3535BAD3DD1B793450DC079F534F86CD32858F56E8BAFA998F, 3D5947CFA6138FCFC53ACD621EA68B8707FAA828C2430D7B2F5E6F0B11D2 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 5510369012B2587F3FDD73C5297A1AEECE8B99718C49F412E9CD55A4919F, 1B275F0086047E9D0A57A4D0F905FB83B58A7C7465D8E1A092965DCCB6F2 -909A469765F53090D38D5A7231073A03433CC33DF71, 90D1A89D7585792E61F2DE265AFF5AD4015F49914242FB4FD1FCF127D54, 3EEED8B7D106B665CF56DF9D2366761F52547C712E62F97CE17A25D9D5CC -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 41843916351762770DD696C99AD51BAE0BCC4C55B3759FFCB077C9C5EE87, 2E45545C7CE0DE76480876031696B30C692DD70FB4263046CFC8777B9BF3 -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 4965154C9144A02653AE67FE5E9EE38BCB65CCBDD7B2454727DC71AA623B, 555058FF7D2BB9E3F4371FFB61AA24B0714A02A6D4FCA888D4D8A7261E52 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 1D8F352757025FF13CC99A5F279C729F286F6F751F47B1EFD53F23226A50, 64F8C0C3F32FE1A2FC1562D003B24D7E5DD5AEC4755861F4A937014FC7B2 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, B688B0D4299FA278AFD083C66843BF6D2D4A5328D35E510FA89C6F25C31, 3A97D7B6F68632AD083B8A2D9E52E68C8B513085D18AAA7B70DDED4E869F -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 7C2FD1875D0E3719C522ABCBACE6E2F15360D7BE4CC1F51AE75E6E6AC9E1, AC72A19D25D1BDE9079E3D019DCEF32107EBA747C89418BDE56D8672979 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 47B5EEA0A7A3075F02DDB53C3F24539C21E35C452F5442ACA49980FCE133, 380BCF47E9919AEB94BCA9A051FB9E927E2CAD4273DEC010C98B845AB19A -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, E1CA9D74D5A8EE9732630E74F4A85BFD630AFB5524C75D7FF511226EF06, 3815D7A0173154B70293A0C664A819D21F5EFEB67D0FC4DEE90FD0757A31 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 3739917A3AC6A692105671F001AB975E749055F5800D120540C828225EDB, 19D3ED4ED620BA3C3D20FA3118682D4734408B3DF7A401DBBA64D87F8416 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 4C08A6FBCF175E739C663FED152FD5A43ED2D6BCDEB73AD0B5DBD2AD902, 27335C1BAED69559B5B9B93F16015E3481849D217F6EAA4AE7C9C40EF78C -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 60556B7AF27F3B1F7DAF7C62875FA30A43494FEF5334D7BA9E337A5DAF20, 6219EE851FF5BE76EFA5635DFC4B06376833E8D0C78E0B46D53719535F70 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 292DE86A035C125837204FC7C173BDEEFB4C2118D6B27E568FF7754C36D3, 35721BE83543B02C61E3667C298908427FC24752E8F112C876F1891545F8 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, D8020DA6B7F74D9EE458FC9052F64BCECBEA1AB34E7DFB788093B33465, 491992633E2F9781A3CC65665A483024F640BE7D5FB3E6D4E281A10EE8D -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 375DA22DBEECE002EE7758A2FF849193FF3FC26660F58230F212F1FE8469, 598369EF1E1B2ED93C157CBA4C617F1B62996B46F729D3F9306D738AE32E -29396F76B67B7C403D73A1059B80139336878E44938606769, 50F0FF70D03D0E0AEB53279E24510E8565605346232491F444F5F157F8CB, 5A9E886E34BD8E9C2E8A6ED7E6716FE296BC6B17EB244948C78287D559C2 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, 7BB35C7CACFD2FE6271963E2E11F58CA8B0CEC24D852CC63F9FB70D59DFC, 18A1B954BDAE37426A261AB2825B632ACC422495CAA37F53C7C387E33C38 -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 3139A81006E4068DB2BF55530755DC28FC072A27E69AD20DE46BAD245A6D, 12BD2D8B194091123AA2E2685F4EDCD3F76841D6E2054E640FC9F7423E96 -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 31CA033F061B284C2046367133E9BFD1BCB9D677998AE50AAC2E0C07E75B, 58F72B78869E24B5FFB3CBE43A182F703C7C7C97F355CE9A776717A6BDC2 -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, 6AD81BB1C0D1D3DDE1DC51986B92FF7908FC94A4B5706410B5BE5C05766B, 4657A90D9B4396E7B851FEEAE9828021D3BD850C00A47A896D20B3B2B8D5 -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 2B162F4EDD0DAA51F0B3C0A2A43DDBCB37E5DEFCE5FC43F254F5E96772CE, 53879354EC752A79EBFB71B1440B695BA35DB1BB56917BF92F27F738E14A -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 463C46BD67BD4A10B1CDED3D02D7FA37F9E45FE85E084FF7144665296F0E, 12431CB7B26F44F284EE99E0F069A1FF625A59FC703321FF700DD9D6BC4E -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 3CE82C3D432B31A08104BD46DF99D96E107927930D6AC3EC65B9579CD40F, 62534B14DEB1CE42DE470FB6122DABB9ACF3327C523C91BE431D17DE6846 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, 12E73AC26D7DA1B3E08B10EB1C0DEAE521D7B67CDD45C82A70AC99836BDE, 55DC1E84E8B76372DFD6DBCC8B10F5F033F45A265756445CE7C3F0283804 -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 37F023C56BDFA64127B9922455379548A319B75096EEA0BBBD6CF2A4E6FE, 6E9BA1DB95C64DA5B188AB782B1D8ADD3332523ADEC5228E6A01807416F9 -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, 40902DEE4EBBBAB9C4CA36AEDEA1A77533667E5DFDA5DA62BB69639EAD8, 4764670404E808C13F9A2B8887C04411D1411A9A46E7A436FAED92B2EC60 -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 2540E4B1B89287198283B51EA53F9CDDEF05CC40791481D3EB69F34CC95B, 3C944B6D14802D959F04C55D5FC3F158B7B3AE32FE6A97E6EB8B6504983A -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 79EDB2E4C8A52D4A91B559A2B23AB119BEB3543C0704645AD6AB627B4741, 66083E2E38BF496528603391D81135F01823762F4B7A36B63D5354BCF9BC -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 261978B87C4C406F27602B0C079EFD99E0DBB159D046342CBF221D70E412, 6465F8287C6356AB62C733F8B1AACB4B5187747F9BC7473F98710C7F09CB -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 3FC0BF1539185F33A9A71DDBF59E5125ED2266D016207C3411C786E7B004, 3276895388F85F1DF50F5E8A54F6A95BF1C53E6BBAA4EC773CFCC6D0FD48 -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 27A05F7ECEAC49AF33DE2512531D1E09FD4558B48159CC582622BA0DDF3C, 3B3E61A0784F2E8CE5EB441CF4FF43AE65E6C751030413C922E1B414976F -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 56C3D5890902D39B96B9AA3A320B9A1A5EBA8EFDED9FA18E8BBC863826C, 3D010921027934A40B1EC408F13815E4B5593F36A8932C365F6CF0511B09 -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 3E2E34543CB786F9B22741F54F5649E0676475DC390FF10D8FFCF26469BB, 7C5AF4C3E668EE1B4F50FBD34E811F8B25BF9503E8B70BF28C6E4C0E8EB9 -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, B496D5FCE7C44F17E96C47FB8E586372FE7F1F347F880D22FDC8472FB, 8B994A2A78D8CE04239534F05E6F585380246846444F2CD00B59299BB59 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 24FEB77AD4C439706AB2471833BC15B432AE72ABC9F0BEF6B517851C9187, 77B3846610901E4A62192C71F74DFE088F3CDC9649E8D1B33E73BC7AFBF9 -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, 348CA9435FB7B3E68395F0E067A8B01605B56987BEFFD3CFF5279856F96B, 6FBE71E58D7F80BF7278CDB046F921BBECE81B5F70A7F449A41DF2659EA9 -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, 1F43B5D1EC8C49B455035CD1C28958087473E991B17B45C6ABE2FFC09948, 41A80C0A66FE5B7A345EE2CC5848A791C3FEF0EE6778F73CAA0493CD0537 -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, 1976E4A55E85B9D1EC76A90FF71765B1C5463244F6378132CCE3E5CDBA0, 4AD77BB18F895D8EECDACE4E37499684BE11CCAF2A97A01D960D53199634 -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, C8E11E1CF2B8D0E0F1AED4B705F2C5BD671D0C8B18EB6AF1162D866C898, 5A8299F88BA37E7FE87A9E1E8530005EC6E24FCEF4F598A1201A7CCF74AF -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, 50F5C09856FE4FCDCF3E8FB06A8B9652DDF58C060D881E67398E6622A689, 1837AA0669AB9467C9749C52BAEEF65095A1C5473FFF2E7B1D95F0ADD88A -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, 5AAA955CEC32360A9178C430BDE6F6A8DD43934B56DDABD064ACC14D3548, 18CC35842B1BD4C044D7FAD0CB161BFB8328956141389090BB5846881F -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, 52B8139282B5B44AD3BB20D381B0CF4085909CA1A731103F05566EE5C663, 4275107A473AFA306BE7F4982B1D8E43690FF9C338B2AAE84D78DEA5C392 -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, 4E17B9A23179056AB6EFC0677F3162AB85D402E93E054FA595F92F7D3D3E, 5C6380CC1969394B934065BBC3162808022B0BFE83940483E961C5E872C4 -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, E9169846A80DC5134E9644909C6CD5895965E2F1108C14E8811D48910B2, 1AB7403727F1D85155B30AA95B26C431AF2C1B39013028AA3A68E53382DA -1.2.840.10045.3.1.6 -1, 6768AE8E18BB92CFCF005C949AA2C6D94853D0E660BBF854B1C9505FE95A, 1607E6898F390C06BC1D552BAD226F3B6FCFE48B6E818499AF18E3ED6CF3 -3, 311D5E1EA454CF69E6EAA3B0AA4A8979BD645FFD7F8C4638F8C2BB90B02B, 2698353CF82B32F1BFE06F54955032BB81E7B71C28C3042BEE6273312A11 -9, 3176D4A39A36DC622545ACF0883E4775AA7A1FF3E09FB9B6A638328E2E0F, 62D2E714106185522B150FFA2080476F2694040B26E74D160362E112778E -1B, 648BD580F5C94F8E299B3833D851BC1146ACFD6173D670A1E0813DE4CC8F, 45AA214409FAF639F4108C7D6EAE96E92501D1C037FE0118C06D57CB2240 -51, 2421CB14BC29FDFA3034CE100D035C517FBB505F15611A04ED20F4CBF7EF, 2BAE0CC1DD1B6D65DEFB257A3A66BBD592C022806E86822766DDDFC410E6 -F3, 5B57F40E4518430BD955B589B29DAC41B6CC7F6811C970540B7F46933A88, 478CDFB00204941F1DBF839F3C192F9A72194FAD72E30BD6A25E2408FF37 -2D9, 40FAF009896EEA859463952395D3B9E243FBB71F75135179F46A5BE6A6CF, 7DF74A64B10979F94221D19A3C5320FE1EA0652F12E73429A837CC7FDC81 -88B, 6EE48A1A3416E05F9E62523D41C9C1A0F0436CBA65C2238AEBF923B97C82, 2D98A0590A9AE3FE703F0DA80C0A09266E1DD03E7F13826DB9202ED7E240 -19A1, 780D2BDFC7E32D58F59CCA86CEFFE8B637D0E2B6F2451738A47981C916B7, DE8F18BDED1F72931D047CAAE3CA858E209CCA54056691A4CD841ED5D30 -4CE3, 165963800EA39B48DCF6B0890AB70A7BEA2B771347E24662256EB701913E, 3A53C1B7ECA4E648058F1FB4AEA93FB965028033690D84044260EBD5ED2C -E6A9, D50DACE4F69B87A2EC853A5C56DF7D197296F99E1C6362C732EB5BCC10C, 4B57195639A53AED4660BE3CBD2B7BAE0B9CAA07FFA4C628C7EFDCC52619 -2B3FB, 2FB30AA7B10F6F4E57D300DE0870EE6C752F19B6F02CD7FE40BDF5BF427F, 5C6E291BA2E14FE4A5A0510AB1A6CE5EF2037927123A2BB71FA15E9DB6BD -81BF1, 5C9E9042E60963879A7E5B0D60F9AE05D3B1122C8907CFC4EAC96D4EAF2C, 7FC30E67C9DC6FB22C66EF6724B8EEB493E497761E359DE3B588F83272E2 -1853D3, 41831E7275C66A8B879D1568B95F3BE3F94A268AA90E394C7F3F66B87EE8, 5405FFFF71D1274CE9F9E970CB9A9AD016B094CBF19FF2C25C3B3E1899FB -48FB79, 7F42257AB5A34A1781088DFA9BDFF1E4BA4D3D0FF750EC2B0FECD37AB7E4, 3E33C1E7E1B5D22403C2CE7CB533EAC1B02AB5CC41381D794F5DA264AB35 -DAF26B, 7ACBB84C79AFE81D5CB8F7DE558925AA26F290A75BCD79AEA3667AAF3A0D, 4D01E02D437E29A9D32AB7F88F44F3850134111229881CB70ADD54ED13A0 -290D741, 446A3A4A28881F0F479AC5C9D07481FDDC57E9871A60D17B3297246F5BA4, 146F9C1918E1D8318292CE8CECC35F99F38A246098CC1071E7C426DACB4C -7B285C3, 14F68899E49AE2962D8CED46A76CB2FCF4DEC555FF52D78E45C9C6E5A55, 18672C16084362ACF125BC3C3E72F85A328D64410B78291E6CBCBCA46052 -17179149, 3765A48C51C3D54ACB3FC3EE4856C08C537F57B9ED04122A6A4A99A96852, 6DE9F47034ACB5A503A8BE4B7C50D60ECA481C5DED4D69CEBDE17AF3171C -4546B3DB, 551008DA2EFFB62523C5F77BC05A04FEFA65B4F542F81596CCB766878ADB, 4660CC4277EEB3A809042674FC591B1BB9751AC5C4B907CF2BF46C590933 -CFD41B91, 404AF51E1AF6C8C3C50BF1D45596DBAB20F839A7C0DE292FCE038C3A8833, 6DA14CABBAC761782C072A5C0160D058ECB1D1DA593F208D2AACB727B0B4 -26F7C52B3, 59788FD7EBF75E930929EFA78A3A75B02B98F78B804399B29B914A2443, F57FA5709291B7D716F2988851B7A5664B8D7C7CC055A1FD406A1B53FC9 -74E74F819, 759FDACAC1D944574426111647D59DE50E216A9D26A3AA4C7909FD0A1599, 819EE3FEEF4790475B9057448EFC14A45161CD1E0BB1DF889F7C1E22C4 -15EB5EE84B, 1F43F2859A72065A90F6CE76ED5104C3632FA211708EB569F0CC2B85DDAD, 5D94CFAAEE4EA7E8092457F4324ECBA58D7B3F3B79F7B1871E266F4399EA -41C21CB8E1, 6575543F13A9FE7F821790F2ED96C156E878028A79A89FFC47F960F0556A, 6D44142F3F5625B7D2258619A318C716D99FF26F4515C97C184F9A59E9F4 -C546562AA3, F4F366A82A9DC64465B692D48DF790F0D7E2BFE033B06633ED4689F078F, 3F448946132E4E6E4892050FD5DE35D5CB3D6A925761EEF0BA6E08DF5BDC -24FD3027FE9, 4F3B0EE5AD03139005480814F12B4108355ED5DB7EB77840558D5E95C7CE, 13BE29983279C55FA60D5EB67FCB3526D3985680305C9AD27309E48E217F -6EF79077FBB, 7968952C437F2967D069E97CCC894743D9D2DD74B8FB04B86E8D1CC4E237, 4288E4FC27ACE7F8878FCE31AB8044476C5D9A686115CB9463BF0FAD33C9 -14CE6B167F31, 10971EEC07AE3984E33C5D748746C87DE0A5917579955C14EFD7331AD23D, 49E752C1752F57739C4704DDCBD9D5FE4D85C0B12FD34E36CE6CE13EF9E0 -3E6B41437D93, 41811EC8DB92BE7225F40E37FA237835A48754CC9892E4B131B5EA807088, 620927EB2D0E1B4B153D08CB24500113F24E555E1FA270F1CBD3E680773C -BB41C3CA78B9, 5214180160384C706B0061F84E4E50BCDDB472F5C1B7FE6B0E1CE9DB2707, 533EC6A659C554A3F0913908F38511A56F91BC5CCBF84B686836586915A6 -231C54B5F6A2B, 79B046FA35AECEEC4D24FB7DA94ACCF73CF8558B332AC6591D5726106673, 1907D77673BD06D2F170113C18710592345BE52F8BBEB663396E9A435B7E -6954FE21E3E81, 4FF73C305C01068D9DBAADFBEBC7CBEA2420F2E38A88F340112FB707DEDD, 793B386511AE61435AE3273B9B7C247A8C435206A079234AD06FCC1856D9 -13BFEFA65ABB83, 171041F8F543FB69E4A6F853F6A60FB183DE31195A21BD62CA8F82B3ECC, F8331AE9FE7439BA72E0A7D927AF023637F87FDC35E9E9CDB94B205968C -3B3FCEF3103289, 560B8AB2E1235E7502E52B5C210B83CD116BFBE635028B0EA9927AC8CA80, 28F27D0B52C481F6CA8866D193A0BBE4768140FDF5746B95FEC499EC728 -B1BF6CD930979B, 6D7CCE6C0EFBEF10CBDA0354D751E66682D73F986F6C3FBE391C41EFE01, 12AF15259CD8361E99999696808B9DD0692E40C4A23ACBADBC2C5F81F13C -2153E468B91C6D1, 23D22906D660C0C5393336A2326BD90DA39834C46303BCB45D822F3E92C5, 7809311BC764F4207B5BF9A1B0A420A9A57781118AC725DBB553CB69E621 -63FBAD3A2B55473, 363843FE3D681D3D6ECF802401FB5F63E45B535CE649E0EA9EC5D497ABFB, 4EA1CF5DE9898E4138094AD0DD48CE2124FB9486B68F193891A6D3FCCBF -12BF307AE81FFD59, 72494A53BD393CC31C8CE3153D6F998D6E54D4001023D5EADCE3807D3BE0, 6538FA4180CE520B145776683C151763F449886981E4E6D5C456D655A345 -383D9170B85FF80B, 3EA27FFBA9DC9A44A14A44DD74DB9A3B270448B653A99E7B150C04F19724, 190441F8C15E73C30878E38B17A4A664567EE77B8916403811E735DB3E54 -A8B8B452291FE821, 375DA8C08AB686EF4B21F45E5B7C3EA098627DA3C57F2A2BE0C626C36B31, 44C36D14D95797097E3B4791DF00665E64BD30193F2C0571F72C93BB4177 -1FA2A1CF67B5FB863, F6BB148DAD5C6B0B83F49F135FDA0889A984C3D51FAF54E9571F52288A0, 31B52B762146680529B38B4F3717FF4217F29B6A4A27F89DDF66205F291C -5EE7E56E3721F2929, 5A471FD7F0A8BB1E04D7413C7022591B0DE77111C71EACA43CE77605A9A8, 25A9A3F3F92BF108B3FFDE53D6379BE3A54B46C1979C7E501AA84B093CD3 -11CB7B04AA565D7B7B, 2B45DFD5E90F360B61752915BA6789893A2357D57EA48E441BFAF5111AD5, 45A1ED2D213D02E18A6E23BCAD4085AA07C17EB3EF8513FB422AB466126D -3562710DFF03187271, 15CD7F7BCCBB11ED7E27D50B70700A67712D6848573A37C8FE9E02FE9B5, 1F9BA022904C438EB252F8AAA22993D91B318BA466E46C1074BA224C6DF -A0275329FD09495753, 139956097BAA98A20EA91E31E8ABBB3FB3DC5A6E7FDB3012D934F3511EBF, 40F3E44F2846654AEA9D9CF9FA28131BAAFC82D3FB8FA8B3859AD340AC72 -1E075F97DF71BDC05F9, 330AAF8DED5C53D946341CA3BCD87775262D37644BDE02F9D70C944968B4, 660C41D7A786BA575D6B82664FD7262FEA46797758765CD8CA4A34E43B99 -5A161EC79E5539411EB, 6AC4AF93A15FBF4E18EE2D25DE992D1571492EB74432D4CFB431AFF4E22A, 74899370461850A896A96231E4F45678868811D005A63154F712F00BC30F -10E425C56DAFFABC35C1, 64183161D2BEEB839C4694AFA7DCEB056DF3EE90F5853D5F8FA23DE8BD2C, 5DD037BFB6E15E1AB24B086CC161E98EAEE8C0F1AC907DCED808CB5A972B -32AC7150490FF034A143, 194FA0F2E0A970A8E323CFE3030E46B7204458E2D52B8D6A4BE6D023E3DF, 15F5D921CBCDEC25E0C69D6612023E7CDAC3031A9952D599AD432F860EBB -980553F0DB2FD09DE3C9, 37CCD686D1882588C5A0CC5D05CEAE4C8EB32BBA915D61CDD5DD7CD6B9E6, 189D246AACA1A21C17D862882888DE0116FB90D36A1144A7E5C0E821B1A4 -1C80FFBD2918F71D9AB5B, 1BD95EB9828DFED2C35E6AC9A162EB50B2835EC837FCD09868DA282C7627, 659D98C005CE34DF26FC5444114494BD68017709247ED9FF756B9E05821E -5582FF377B4AE558D0211, F3EA51C4D06C8FA77A30B407A0204619C109924E5A02DDC95E4D91804E9, 75ED7BABAB78B40558338E4318F5338A97178857CEB0F7C18DB17EEDB5BA -10088FDA671E0B00A70633, 75FB1573D47823153CDBD39E96DE37EC55E0B4CC8B1D8B4464143A34DDFF, 34C93E738AA9C17B8EDB01D33AE71F0F6A76B57D70EDB42A046FEFFEF1A9 -3019AF8F355A2101F51299, AB5BCB7826171445D1F7B459369EE6A1252CE13F33C4A750BB6452F7336, 48BA60F829EB05E6D608E41D6A66EC4222FFEED39958E069CB5A638AA455 -904D0EADA00E6305DF37CB, 3511435543981C24DB29A5FADE2D9CA04BD9A99AD1BC8045FB5426C46890, 6119B2F33D812EB2BF7A24A410436441D12FD5822E9DFF32F7625D2454BE -1B0E72C08E02B29119DA761, EAED1F1274733AF0C1CED46E3D5C0A3303C1ECBB92301ED77A65D1B04F6, 32101BF929A1764A64B1FCFD005F8A3E2866FB87EDF134FFF1D85EDBC708 -512B5841AA0817B34D8F623, 302FBFB802D681B47F29B38F2AFAB59988F8355FC2EB63C4ADA17929A570, 2FFC1DCE567975770859E92C45567A14F0969F8900E7E9C2F653B658BE4C -F38208C4FE184719E8AE269, 755F1BD0AAB3A225836B821C71AF3CA3B8B4DFAF071A55FAC806593BC3A9, 3EAD1567DFE30AE54DD86D2A1519216ACC1212602249316B4ABF9A4A0E8B -2DA861A4EFA48D54DBA0A73B, 332DE8092A7D48D3CAF55F0EB92062E76CA819487EDDA720BD1BA048951A, 4B7F6751446230FC8EC4F25991D50F72DF8408746EFB6F961AF442B6ADDF -88F924EECEEDA7FE92E1F5B1, 25B304B8893D732AD79EE9C1A94E4F023185F2CA4AEB611ABCF12110B3DB, 7841258DB138F1EF86B1468548D0EFA3F9AEAEA004ECD0872EBD5FEC3CA7 -19AEB6ECC6CC8F7FBB8A5E113, 6478A74BA8A810225D8F65250BE7E4FC17BC5C661A10723D4C8BC17D6E43, 19EECE832BC44429ED19D07BDE467897047A9AE8B917E53D406B30980D02 -4D0C24C65465AE7F329F1A339, 7E00275A1E6B67345C0E85B5D18EA0D221D4721EA6DC1F5FCC1D1BB836CB, 6F0BDA7577E40A62320632DA7F6D42DA2091FB0FAD72F171B82360062746 -E7246E52FD310B7D97DD4E9AB, 38DD7EF201C8FF36EF4B2ABB7277A2C0CF977D735EEE27C210904F21C941, 6D5876359A0266853972F3C759530510BE92935B582E8FA3589F94000B77 -2B56D4AF8F7932278C797EBD01, 5A9BDB5350CC3CAC49FB9805F14863022516C3BA73901DF67D2336C4D51A, 79B601A918647757F41E00FCAF5C65DCD82FAA8B50C1C42450EDACC1164E -82047E0EAE6B9676A56C7C3703, 59595AAE228F3B18C1F4BA4D14F82FF64C4B91831DFE8C968E35AD423DCD, 46D7B7C72603FCF7B8056D3561CB5ED4169455B961B59BB9614F77D36C77 -1860D7A2C0B42C363F04574A509, 3D3A8048C4A3F82992C61B739C8CDA57F2365A8F6143BD8A101B0649AB2D, 6A68488EC9CA40E12D854C0A68DCEC3906BF9FE9FFD6E9E0E3B8A7644DC9 -492286E8421C84A2BD0D05DEF1B, 7A7DEE6975CECCEC058CADB297A6C0B2936D01719F880255890DA5D0E5B, 468A23F023E07391E14E72F365E3680D7E6C7283C4243A6AF5A089246823 -DB6794B8C6558DE83727119CD51, 209C1D5AF455C9FE86B0C86C65F8F73184BF24706D8B368F78DCE8ECA9C6, 37422E0F227C7BEA849F7F8F5E6E35830E697F711C4B76DDA3D34C19892E -29236BE2A5300A9B8A57534D67F3, 6EE51D62D7B3E249118AD4BE1A92835FA76CAC3123CD2A01102B7C729E1A, 6A6F492CE5F33575D90253D979416A8DCBD1FB08A0A397ACAF2ED3BAF311 -7B6A43A7EF901FD29F05F9E837D9, 580DEF51FDD5EFF43A09D985158DAC7B5F63268517B8AADC9EBBED217A7E, 491B2DC14B13988C54B227186687486CABD6A1AB12C5F11D6354FEDE4352 -1723ECAF7CEB05F77DD11EDB8A78B, 3ECFCC9EB32045741CB4DF138E58824A93771F6124A9664D4FF94E5635AF, 644A881E2DFFCDD05B37F2238B57CA614986A70E8D7812E87E5804CB9FAB -456BC60E76C111E679735C929F6A1, 2FB227634442386A7C85178F181B736C47815D0494A4A7C42A31C39E742E, E7E78250E1A2FD935526B6841B056D8EDCE63AD022DC8E7925AEC7CE6D7 -D043522B644335B36C5A15B7DE3E3, 2AACA4DEE0D93924B321F89BD67CA06A9DC682677D7B4BDFDF446A0E7219, 652600477A324BD61B2F4F5C4926AC172351715A052B03774D4A19EFEC2C -270C9F6822CC9A11A450E41279ABA9, 657ECB939838E61BE64E58E628B655889A1D58744E56A9C64A48C140C889, 36855E876A1B8B3E52DEF824B761B4C56DE2A0CEB06DFF982E367B48DB1F -7525DE386865CE34ECF2AC376D02FB, 7C698030F771F101752E057762A7004A988D020D34B96EC8596D62EDAAF9, E66F5973DDE5BAA5F6F55AFE93D3B976842E7D3D16EB75FA983940FA8C7 -15F719AA939316A9EC6D804A64708F1, 1ED66918C7AE63AAA036161DA70BEE1F2D6A5BABBF6F616B6BC52E91EDD5, 7D2637B3FA267089D7A1F92A8930FD29E0674F2EF74F8BA31A9CD85D1C35 -41E54CFFBAB943FDC54880DF2D51AD3, 3F26AB590C9ABC6F0C214F74721799DF4171A2E7251B3862C213BCBD5654, 792CDA607B30D1BA60786F9BA3064478F0D06B01269E7CB1101A97D05843 -C5AFE6FF302BCBF94FD9829D87F5079, 56762069C2DBF0B907BC7F78D1AD29B99A995D70802901311E514B81EBEC, 784F208AC2ECE38BC6AF8A179803959977AB85EF0B0D561E4121446E504F -2510FB4FD908363EBEF8C87D897DF16B, 48FDB89765A079011E97CD2C619FB7B2C21EC8BB2DA4A45C67282D834DA8, 7396E1718105DFA1FF7105276F3FE216DCF56487FBA724722387A60A94FF -6F32F1EF8B18A2BC3CEA59789C79D441, 38171380DEBFDD6E901D4E284276EF52715267FED34EE97ED649D7A41AEC, 5C15916F5019F3ECBC9C210B6C334F2CF715A4551A2AD3C6547D7F4F98B9 -14D98D5CEA149E834B6BF0C69D56D7CC3, 6A6C48E0A0B6BDBE8CF1737FB67C5DADC9DC61CD0177163F21C4E76DFE79, 45ABFC064FEEABABB92FD77843EF8F8333C17E7FD91A8DA57D9361F076F8 -3E8CA816BE3DDB89E243D253D80487649, 3D1FDB3D5E254C803F0A655A85E97C1EC27422B83CA838638FAFBC51A2EC, 60D73F10B1BCD42F09AE05A689CD6FF6ECB887C8597EABE879C7426A982F -BBA5F8443AB9929DA6CB76FB880D962DB, 5A884EAE74274C6D12C7622732567F244432CB8DD4D3A367424B5FA87E8D, 33C6ED81E75814AE21B7F432C0AE1EAC35861307676C0852001AD4283059 -232F1E8CCB02CB7D8F46264F29828C2891, 68EE1F1175E20F0D5DD8FB73B6C281ABAE8F79B4AED885121D449E66243B, 564E0C85E2FAB605D92065772EF549E990081B9D3BDA30BCE3FBE77CEE7C -698D5BA661086278ADD272ED7C87A479B3, 4F3EFC9043356D5722B2FD70FC42B7A8AE2D3CC069B9547ACC5B95D79159, 4F79D6C8372858194447A5C2BFD16D539A26F0F4635C7843E8C1AF8ECBAC -13CA812F32319276A097758C87596ED6D19, 3A72CF3E535B0F910BC487CE18ADD71B3E61F44AF8170B53AA3DE74E1A8C, 15835063D97AED5E8CA318B00C334E390126B3D3278F8E3994E7D19C6003 -3B5F838D9694B763E1C660A5960C4C8474B, 1A41ACE55E4830542B5EB2484CCDEB863DC02C2DDCFCFD981D45A3728718, 29963F90BE67B2EA8C2E01D178A4C3E3ACA186ECE3E43EB0E86E1C6035C -B21E8AA8C3BE262BA55321F0C224E58D5E1, 745FA94E2D0A079B903A57BAEE18B3873C6501240AFB31D048ED5F830360, 1252D05A71EC53D39085F793EF954083AF690879D4697D127C540FCAA0F -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 5FA566972CB73111BAEFD1C5B57D66BB9BB55998486ED165A7781B98E526, 2C231625C8B46DD937F47B7A8B6A1541134BAE2F9F271A7138D4881BA99B -64312DFEEE1AF5788CFEC3176D34C11F84E9, 2AB8213ABB1F3FE07976F7EBA9123D238CBABBE8B31C12D2363D3BCEBCE8, 5FBEA064C5C89B269227F90CF4972D041C6BDF36655541ABEC38E5A1C6F -12C9389FCCA50E069A6FC4946479E435E8EBB, 70F8CC75055EF6A6FA3F2A7A44709BB6F2D5570FA6ABDAAA74B93EA80E6D, 1F6721418F4DB5825EFB2297B99F9A9D3571390561A561A164E0043F914 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 4658E8B88745AE9D806236A7C125D09E833AC8FFF7D09A0F747E7DCE8500, 38BE84836B794F1E3543F2E8B746ECEC08B63C9D67514A17F3B98BFFEF8E -A912FD9E31CD7E3B6DEDE937884905E530493, 5C81FC9DA7E9E8D2F94146AF4F030A1D821CD5E17962080758A6A366DE13, 4B60242976DA46CE33ED5A9566E48493C5A7D16AF733338DA56653559B81 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 4F530343B83DB55E0994DDE4A803EAB0FAB6F02F80DE57F83382D784A3EF, 4146AFC71CD1B8058D16B45BF9C39104E2C3308173B07FAC9C34764CC1ED -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 59661AAD57A66B2A12A87CC4E12CD839CDC8F05138390B51DEE63925C708, 1ED8C3E69F06C0DF214532D7E52E49260C4D3707266CC5DAABF941D3F1C2 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 4A5EF8A4F53EC8E0F5388EC21B66A1D3FA0182A7C84961393802479F4927, 5FAE0BF52FEB72CE10AE9D28C992D56F1B156478FAE42BB68067ABB6FCF4 -357F023F0DC204F0CDC846CA921F1ADD8447283, 7B02D06B4D25A8028DE2B500B0A0ECA2077BAAE4DBB29E434CC0A21F6772, 18EB0017AECB456E677F92FB6F32F10A3077E068EF700335F76376D10ED3 -A07D06BD29460ED26958D45FB65D50988CD5789, 16B1433EC0E0E180F2EF3ED1B32D15DFD0F7768BE0BEAC6C18D0581ABA6D, 1EF315261AD06CAD857F017AB9E7612D9CBF4E1F04188D8446DD6B55AD0B -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 511F3F64871A76D663B08D68963255984C33AAF36DD8B0D0DADBA67FE148, 4E11EA70882578D13CFCD5EE7B91594281BB5D48E3E361C1C0AAEC9BAE92 -5A4653CA673768565B41F775D6947D55CF3813D1, 3E6EA8C9F66E11094AC776880679CD3BC3E34573303893DFA7247D92FCC, 7DDB470D88B6A36F8528B156E8D9D608A0BFC28E8FE9C95DA6B0E985BF1F -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 54D5598A9018D1B333CEAFFB06ACC407AA301838FF1787C83AF23DFF1E2F, 2529430F9406114653378F4D87AF091676219AA7D480212E7BDB7FE7E928 -32C78F21DA0F2AB093551B3248B38680448F8B259, 8B148734C84AA6826DF903356E68D47BCD5C242BF30291B45659155A81F, 728326B4FE88D325D7936D58966614BEA6DFDD076DCE41DD37D8B3E54717 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 4EC41784F145A10609CA2165431A3EE4CDA4FA2A48B04D7946537D62B955, 543DF5BE99A4E5E89846DBFCA82F9C5611A18C88520DA3DBE8C8DEA1946C -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 792F7FB85B257AEAB56946E0115C423C6C4667760AB773545F6EB268F18D, 106D8E9F6197D26957AF5B2C00D346DFF16697EC9EA165DD8D30A5E91224 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, 4C63F77244F3D79DDFE45F1A792C0C3C956D0789EF11FDCC3FA518AB3B6D, 5320AE536DC8C0D318B9F89D93E686FA5BB5FAC42401407AAEA81619699A -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 2187FC91E7B63280A5C825D82CC9762396D130741891ABE97DA4F817F22, 2676D9547212C05566D43B986A8E96A0D93CA7AE754BA9DFEA6BEAD96131 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 50C91D397180D7D7F8B5199573194014F8C3FB8F7745954CEE00BBE43FD2, 661F9351FD67859C7305C647B2CAB6A583322F9D0BC7BB20210785849C5F -909A469765F53090D38D5A7231073A03433CC33DF71, 6659D5B92BFC99DD779B22ED503D73AF10D3DCBD219EAC3AF1020A89F3A5, 4D344F7BFBBFA12C25C70D7B82F8E82B2F0D3351A2648E16C0AE5900E16B -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 2583BF8B6AC550F52ABB0FD5451FC3CDC5C16871EE092966DC654110F46F, 3E1B31775FA9A17F942B05939FCB922EC31EDD6CA9AACE4E75EFCC56A550 -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 3C6AA920C8324D5EC69684BB8D61516ABCDFD81879AD839F2E0B0067B6FF, 360E767C29883A07A23E66DF9C35621535BD59424B222E643BB87ED5AA12 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 2F8085645148140FCE6ABE3C90423E5D12743FDE110EF1FAEF9EBCFFA2F5, 514E059751A089C196E694DFC8878D5F3900527AD79A62A934FA1BCDC320 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 5AEAABF3B81DE7F0718B17987DEA18FB7EA2E8C819D6F7B1F10AED68F191, 54B56983D95EB181F504CA6D90C4003ECB118F9BFCCE1BA57E6F1DA1EE42 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 5CEC4ABF820A857F2CEE343CD5A32A9306E8F59EA39F399B196FA9330C7C, 4235AFD3DF393945F4644AC66DD9259F2B7AE0DEC09C0D059AF6B043774D -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, BE720ECE0CAF0941E0E1E69673CE259448CB682A6E524727C9CBA683205, 6BBF3BB9B58E30376E5C82882A2D18671EE3040F1B32C37985A55FCD3F17 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 3E56BED698523F5906678BA0113808255D2F6430B01831BC59C63C04C9F0, 41A02D290FEC82F46850A3895E886764A71036C61A8937856251BA1F7F80 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 57A54028F4BECB31117CDDAE814FC1B74FB59B3C4C2F9D1C408492E7C48C, 1279809E48BB0CFBACED2B9C260C9F8C3B16521CEBE53630C94C7733E5D4 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 64F673809F9588C5D6F729B601CEEAF7DAEB5B1574888CEDA8B517007BC6, 3A040224D84BEC957B0A80A56205836BBFA2C01731DAEE73D95F94DB053B -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 2F77C3C11067DBCF592267993E784984E852ECBDB81529103D233757B6CD, 5351F303FCFF13A3DE0094C92299A378068F29DB68DAFA335F3030A9D792 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 56DA451753A420991FA4EAD26E8B5D6AF7B372F28A028E8161F4B3379C23, 66AC3A1805C5916B375DDF660B08E07112C0921978656456D45C78753646 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 5258108A0BDE03B49CC6CAF7649733B2EB77CE526EDBFDC1162B2E6F2CB5, 1E0DDEA07E456A41DDBF59A8CBD0B470FF34270717D01912D13EAA63DF58 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 341B6273F79E347A0058518C3C586ACCD8A2E99755C2248D9FD81B30CE98, 5C6FD81FA2E1E9F3F781B5CB76A543888F35EBDA8C762A5D1ED0971BDFF0 -29396F76B67B7C403D73A1059B80139336878E44938606769, 47C0CB8C1EB6D480BCDB29ECFA8FAF1EB2669297DA155C00E5B4E430DC3C, 5560AE4CCDECEC9BDA3B230B84165B80A2EC12100A06498176ECA41A768F -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, 3B5F36260CBDAC2FC64491C98D238F167683D9F63F8FAAA72F2F91349307, 6E3CE8D47EE0C9E340FC9DFF6E2C0C3F54B01BE661521CA9CB607D73245D -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 671B450EE32688C56ADB4371DAA034920FB2B92B6997E0527F1AF2BEF4A9, 625347DEC3A0EAC276EF2CC86664522157D338555E9C0B40CD34A9E95658 -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 370E76CE940418F6C7843F8EDD9959AFEE25C1AD1110E0EA8DA5F92E14C3, 7992A73F6A474BD525A09C341B953CC30DCA310AD3617E5DC9BA09B165F1 -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, 6C51F5387E7AC2A7C3F9142D278F2615B552B7E90DABBFE282C6DF36A003, 65896D2A0D7A4EF5D299953C7AC801B596E506131DD09352A2FE928458FB -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 38F1FFEE3A22EF3264D0FE12535A3D3F4A65A939BF3FFC7F935979D183F9, 4231C90F232D18EFB6370E5C0F9A9027CA4031DBECE48AEA21AC3CA6C800 -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 55E72A513C854C3E257005101D9C0BCC641F3B0467C8D83DF3F51A5A2311, 156990BD53ED238D7F02CD4FD1330A5145CFC47616CF150C054B0DBAC830 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 7C3D285F5D3CB9A5D1DECB2BEF88CBB5936B92DEB27550AA6C2716F25E2F, 46825E5DB207CC9CB437108E0D541BC881F36074C87AD5DA99F80632A739 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, 2C844EEFE741938EDF3BBD972AC560E50590A72645E129B43D619BDA14A8, 150132EF961BE834C30CD87C9232B75BAAD42D8BD414C8F03FFEE32F40D8 -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, AFAFB0E58E064F0A3F095F173257458DF9DEDB1DCC7C143351B5F024265, 77FAFFAD5EB7B32C10F99F83D277C29AA6BB9CA68D9AA6341A8233E1AE67 -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, 3C0ACC74E97FC46670E1323B79787F4F8DFFD43B676549444F1164CBEA73, 576F500A22D0F93CF73D569AA01AC4C334841C15E6F38B3894BEEDA0B7E3 -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 30FF886DAE3D241E5C93311C33395A94578A77DEBD02C8284FA3AF0E1B1E, 3E427112417203C65BDA0A161DB1E59A1EB33B20BF29593948F1837E5F90 -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 4E4AC9B0F8696BDC87D518B26ED2B56BF5A401646004E9DD72BA80AC5B5E, 35DFE3A2AD79C4208C4FA8103B16ACB6E441FAFD0EDDBC9126CEA6013514 -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 2B79D21BBE6388D798C0362FC1BFD09ADC2DD67855ACF516033065176666, 74E11904B533D3D83C189F7D37623068D2B50677AD4D55B97A928997217D -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 586C391F92FA59AC393346E41A5CD8856CD8218E97152A37EF7B60B2BC08, 4A9DB4CD43000F5C4FCCFEA640058134F94E83427B24F31198F1E8351116 -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 439AF6E8AFF47DE45D7B35166D0C4409797D8BB4DD46F4DF6F7810FE227F, 56EA6C8276AE09DFD6593CEADAC6E6B06925865DD87443DE5BCF70DA6703 -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 5CCE7EC413F068158739F349FDA34F3B81502E8003A56E5390CF3FC6DCDB, 73BC6E03460DCB877C576A75A59E4AF191F859AEB03495BA266D8AC2C3D7 -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 1CB1DF3DAD6082CE7A8615A671146E45B73C958C4AAE58FC8BF949D940B2, 3DC76DDB44C2C7F8E9FB4328F209E5F990CDA2AFD9CD540E98FD464B58B6 -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, 1DEAC5681599E41B5318B4C223700B03F8FA5484FB1568D0E105F5AEC256, CDA2123137DC064D3F781A21EAC44B05A3328FEB55DB00DD0E2A2A3908F -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 28F3A2E6784188B12468360CB4F5634B44252204D940A58520DC5CBE0F6D, 16EBEB22384C88F2A7E76415A516493AB30B0B6D511187BE61D8D1168769 -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, 762D0F4107B695A1AFF0B567035008B01403FAA31050E1D27D6F3F710674, 4474D3671FE43C23D7E8121A78A129C00D2AB1DC80E6BB3A56766D071D52 -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, 15C738EDD37D654C7739A4067A9DCA421161636C7D3B1AE19151A999D07D, 43AA9CAA9E57415040D450BABA3DDEFC2AF111BF73A4A9E93E31B043C08 -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, 39EFDA77076001D76607936C3924C7FC276BD7FC08497B86A4AEDA665659, 273CBD9B3429F91EF4F1A1AFD91B5A2BBBF761D4D44786D5CA78987EDB1F -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, 1FED512A2B635EE348D1E8DD1DD7FA19C0B29FAC87D9D292F60F7F1A9D55, 1A390AF167AFEC038C8825F8CF83824E349EE9BD303870FA8EEA21DA0643 -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, 46BBEB4678F918FEB21CB069D14A343098F3B208A28DDEE0A2417599D118, E1668D133DCD8350D4D83F89DCC22AD5EFE9C13613CC0DF3E9F2689FF71 -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, 2E94A66EC492945FBE95AD369180A259028F5D7DA2C70AB828F9A3FFC359, 770663313F5BB296BF04BA4B2CC7D67D29468505348A79C575EC75E27665 -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, 4787139D1CB36E823520B832F5CD6470E538CD0972B0B08C437E1E86AA7B, 2A2C142613F456013BA5174195761B71E193824EE71B766C3009C232FA35 -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, 3D90AB6000845BA6DA0FF3184F4E5C5A04061709B7FC59EAF07D2B1F08C4, 28F2EC2779A212A03C0E0CDB115EC1C0315189DBE921175F48A2E826EA34 -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, 5073AA3F33509D2286BE6DD8A6CB0480955626C554DC904C3FC02AE50DBE, 3789D24E90D27CC1D958EEDAE1BA5D064EA5C5B3FEFCA082E07B28946F5F -1.3.36.3.3.2.8.1.1.1 -1, BED5AF16EA3F6A4F62938C4631EB5AF7BDBCDBC3, 1667CB477A1A8EC338F94741669C976316DA6321 -3, 8A7C28A550682CDA519CE7BC73778EA9AC7812B5, 868562A3F2101FAF2FB5EE7A0F366DCBAC9147FE -9, 14AC16929EC1491D3F6987E514B0DE516914C5A6, D4E3B847DDB583CD8B4C9DE6010345E10CB048DE -1B, 8420D3389F5A70948C849A61776F54B127408675, 1EDF07662644CC78B59D4989F6885029864C949D -51, 65C2D502C55F9934CEF0BB25383986AB2E0CA49E, BA1CF863F7AE4263A28E18641C478E8700A3D6A1 -F3, D961E8727054EDB88D151E791B6720DAB7AEA0C3, 614B58E73D30DDFCD9809CBC1E422718346EAC49 -2D9, 6444DCFE878844CCF1442CB403B13BA9C24A49BB, B185248C4ADEB414B5F2A4DE4792FA49F7B88469 -88B, 21B791B84DCD74EED62DA2EF61D7AFF18F1393A1, 28798D935A156402BFC40ED90A063A1AEA680D34 -19A1, 572BA1E8379A5B28F8FFE4BD223F27E83DFD370C, 330FB13170774D2579AA26F3DCC9F0391C7F8270 -4CE3, 1F717375841FD86DA3B1F5D59B0E9E95D37F08ED, 29EB9638A4ADD19BBB89B118A2D760201DDF700F -E6A9, E1CE3CE3AF7EFFD286EADF0B418C9A05889B693C, 81FC9368B188462B5AC95F0D8A3D53F5C9FF8A0D -2B3FB, 2791C5D76202A76BA787741D2142AE76D214ADBE, 8C59B95F0C9F90853F022CD2B70BF3B8C68D867B -81BF1, 8038EB6C1B0282AB3446388A0EEC7B096DFAA726, 33D62552D9098B4337AED6032685202F8EBEB3F1 -1853D3, CF7D345CF20ACB098E0A8225D794C9A38EEA6FEE, A6B98C8A64EBED0776399BFB2004717F3D23994C -48FB79, 447EEC2D32E04E4927B7BD18E535643629B5A1A2, 24D10DF21818B0D7E49838F6B7D5C4BD1CF062D6 -DAF26B, ADDF2F21308E677024A452CD271F970E7969ABA5, D8041D9460AD9F03C32EF1A365EBE432BB3EBE99 -290D741, 7D51962AE41F4566C99E397C1B1128362E3AA5C, AF92EAF3697E3FEE1A5E3C793392F65E0FBB4474 -7B285C3, 6252D84D3EB102E5B0B5696503A7657482F32318, B489A617048ADB3D3CAE236216AB6D78619630CA -17179149, D06C5842CED75CACFDA10165B05EAF6821F5619A, 1B4F4DCDCE1A5F6D623B251C0C51BD948FA80628 -4546B3DB, B014F5B6F62004E5A796F68C7E5772C41240C181, 1F31743653922B1CB2C4037D592A3C4B07ADCADD -CFD41B91, A2A58B6C6604DE3E36E3763A000B5A8037472F64, 4EEA2DA2D76E3DE2602D7DBBF66CC36CD8C01D54 -26F7C52B3, 3E0728818A9B37873CA26FC08FB2908397562AC2, 143A2F37F47124C9F2A791A13E5928D8DD63D7FB -74E74F819, 646E8237D599CB70520D99C48B8725E0D3A1E47B, 1D8C75EA7FD043039DC378B41D51FFCB0C9F7EA5 -15EB5EE84B, 94C8B61026F780C572CFA07B6AE98AC319E3E16, DBEB152E1112807F4D146557F3333B788165B6C9 -41C21CB8E1, C31DE42309121B76885EC71836E8532FCFBDF17F, 9578547BEDBCE49E5D3B88DB9A8E76D193A2FD8F -C546562AA3, DD709193F70D881E96D1E3FE8D30C4E5D95CD0A1, A1BD32AD73638F5DE00ADC8A738BAD35116A397C -24FD3027FE9, 20BD337A1C3B6B2C0936229E08FF28F035B5CED2, DC0B024AD5117964DF0DE6CEABE7EBDD49305B65 -6EF79077FBB, 7644EF60485A3882266BEF922F3F390746BF7A85, 4EBB74E80758EF3CDF0A899A9349BC1715ED0C9E -14CE6B167F31, B05B2ECC63EBB6B4B97019BE1D46C97E79362887, 7113E1C8179F4C89DF42EC63A636222F1AB776CC -3E6B41437D93, 8E3CD193407A1A05B2DC651937322653C568193D, B008A687A692AC74F56C096F9F60C81D32B214BA -BB41C3CA78B9, 6C9366454B69A5D54D9C084CA0C7043F88E558CC, 40DAF3292810063EC6EC062E75AA895C2DE6AD2F -231C54B5F6A2B, 88641DD7878EBAE15FB31C9466FE9A823E3EA320, ACB5D761054F5F0EFF4CC01427D5E383F6D93B10 -6954FE21E3E81, 7DD9BDF976BF62FEEFCC93318C8658CEBFD31FD7, 7A5AC9A50167DAE59FDFD6A9CEC9BDBAF96A1E07 -13BFEFA65ABB83, 4F37528B809377669C5BC7D29A34E6D6D741FAB7, A1F9F12295246FC4263635DE2DAEC7A06D12D418 -3B3FCEF3103289, 19E908A0DDEC766963BA8E395B4337E157325ADC, 5377FC22604B0BEEEC14B7B89C5FC0E3BDF5FB28 -B1BF6CD930979B, AD6828FF8A2C714410F256DCE3B5466EA1B8E06, D70152C75D4D0A1CCD9C4AEF6CA0732E15B2F37F -2153E468B91C6D1, D35C1821E9178D8E14F4FC2FE3FC2CD629859A3D, C7856C1C0FB89C2E3C6F17D2D2878BCBC14E8EA2 -63FBAD3A2B55473, 6C4FDDE7A57D8A1835FEC97AE239E3F791C8D610, 5AF157E00CD0F3C542A76E41ADFFD5240C69D9B1 -12BF307AE81FFD59, B2A08C0E60F7ACA550564158FE654E4C392F980E, 75EAC63D8A3E5DF1C04CB945E587779C3B1E0888 -383D9170B85FF80B, 69AB1ACF7459F75170C471A6547C7E8C7DBC679A, AE4372A74AED737F06C073151E29BAAADD1A1FF -A8B8B452291FE821, 192BA97FCBC2F0CB5F6814ABFCBC92263F7742A9, 368630B6699AA2042E062D19B0F3D3D12A4E9EB0 -1FA2A1CF67B5FB863, 3B956C45BDDA8EEAE4A17B14BDE70BF24E4BE624, 364E838A0D2286AE1E5A569845F48F75F9082860 -5EE7E56E3721F2929, 4C66B6F302BCC8F7710F3E51C07364D62E09FDCE, 5F9250F3A1DDB47778A786872D21F2FB24871CF4 -11CB7B04AA565D7B7B, 70C38B87E670036133C4CE9A09455364216680F2, C56E35595F59202874DAF07381C1C4B766E4E96F -3562710DFF03187271, 29349718970CB446DE3751776F888DD2DB1CBA01, 30B5D3CCE0FE41AD03E2ED3C19C3420333050B67 -A0275329FD09495753, 477286AA0DA11A7D3D841D45CFA8EF3153B71BCF, 2004ECC556EF42E8507B6145D0986B8D38AD7584 -1E075F97DF71BDC05F9, 89FC9732EB9D1C8387CEB407B18ACF86394ADFB3, 423ACC1504FAAF6658BABAEA2DB8A9E3355E34B5 -5A161EC79E5539411EB, 6B0CC0CD2ACDC6FB236C64174BB92B46FFD655EA, 15BEF653A9CDD3B69FEA15806D28F1F953CE8509 -10E425C56DAFFABC35C1, E594EC9A082D9C9CF0E2903892114D6705EA9EF5, C335401C5F85F1AB23F5DDA05539F56852C12366 -32AC7150490FF034A143, A1DA9735C5688C8CF0AFCE527CBD75205B6D2F79, 9208E1D248D24A89EAB5671AED2B29C19E66E9D8 -980553F0DB2FD09DE3C9, 716FE2953CF02AE9E4E86467135CF59224F10F11, E1F19DBA3FDC0FAABDAB73C7583D41B467360545 -1C80FFBD2918F71D9AB5B, E8F9B793D5548416EAE8BACF52FB357FC955F047, 60AD53E1B3BFB62F4E414330D5D3A2C68FA7B3D7 -5582FF377B4AE558D0211, 31DA4CEF9871886D6ADBF5ADFD770D7A265AA6C0, 226E6E98BBF23DBE45C07DAF0742BE32C1D55BD7 -10088FDA671E0B00A70633, 558B3CACE6E65F9D2E1FD8C73146F5C3776A41A8, AE963B4F527F354CEAD761155E6474983289DEC0 -3019AF8F355A2101F51299, B461850C5DAB3202C939D9CDE13CADDFFBDEC5EC, 6A8335F0E1EAAD381BE670FC2D0D7B0E7EF278E1 -904D0EADA00E6305DF37CB, DF9CA311A41C87D23AC786D31F1D62C64502737B, CB5F077ADDC5F64C997B537F6AFD6D4341446FA3 -1B0E72C08E02B29119DA761, 1343D4BF1A1B07C9E9F029DC25EC26DA98031B80, 34A29D924CA3261FFFB55AD2855D15A5982F4FB7 -512B5841AA0817B34D8F623, 609DEE8415BA417C7166C2A6AF8B1B834919F8D8, 5B5632885CE4AA24F710E31F4C076A0F11A0B5C1 -F38208C4FE184719E8AE269, 1BC12BD267E6C1D74667EFAE076CD06DB2546713, C5E2F17FC8FE6670B92092D477D36494EE455703 -2DA861A4EFA48D54DBA0A73B, E1A778AC7EC61785D20BF8650C15B671E6AD5C52, 3201B8DC6B877ED73C69F9670D276731AE6CC4CE -88F924EECEEDA7FE92E1F5B1, 428821C652BB8700A1E1B59BFB5469A15EDAF633, 7D46FAA0962396B45AC784F4254D644949F3F3D9 -19AEB6ECC6CC8F7FBB8A5E113, 9D955DF5224EE98A0BA51946704822B66577909A, BAE30607207937A762826748562C5F52B94F8955 -4D0C24C65465AE7F329F1A339, BF7666B4577BAA731D3D0BEDAB3AE9AF34E34D44, 5CDF7C3491AEC5085C9BFA470BCE7221749A64C9 -E7246E52FD310B7D97DD4E9AB, 9A7380E6C6EF78D85877BD6B502B31B709F0B238, B790D4CF47CF016409FCF0640AB6F789596364AF -2B56D4AF8F7932278C797EBD01, 141A27A063FFD4493BCE16B97157C192FDAC4896, 5094E3373CCD16A41E3D26402B6CBF05B66F5253 -82047E0EAE6B9676A56C7C3703, A94ADCFFC4A2889AC15A03D62D5462771BC03DF1, 714A95DCF71CFABBE2DEF7C0732F7950E98F6EA4 -1860D7A2C0B42C363F04574A509, 986FCD3C2250CF0833F82DF570CD2455E05AA778, 654DC271321184CFE4A09B90EBE5EE1DCE39E439 -492286E8421C84A2BD0D05DEF1B, 69B2D8188147BAAED0F53696BE978726B1810EB, BBAAC2C57A7366B79F2C746AE61330AFC94C5B7D -DB6794B8C6558DE83727119CD51, 508369D18CA0B1AFE58B41D1B495B032E23F139, AC99587135A68418C7577718E57AE216CCA1F974 -29236BE2A5300A9B8A57534D67F3, A1DECD9248948809A877115C150A6C2D8617956C, D0F69A8A05CC2E7C1DA4AB9D2AD724DE25BC6053 -7B6A43A7EF901FD29F05F9E837D9, 16BB473D808896EFC753AD4288F029DC201E1E47, 67A8176A4C8D30B42DC5C7EE7892F00E81A320AF -1723ECAF7CEB05F77DD11EDB8A78B, 9653C0D9A082D4B1BE251F14A501B8EDEC58D25A, 66C623CDD039A947770DE26A54B6675BB9E2A965 -456BC60E76C111E679735C929F6A1, 5A75B62AE371243CA8E5915A5B5C76EC87F25606, 9CC4C4D3DD99EA7ADDC1F168221537C3533A9A18 -D043522B644335B36C5A15B7DE3E3, CAFCE2D4436D700EA31658A348B52F44A552FC2E, 42054A2D6D06B6C54C7159D279BD98865ADCCDB9 -270C9F6822CC9A11A450E41279ABA9, AEBCF825743D439712E0BD27F3E0C3A6282C73AB, C09282EC7246840D085786A97774D1ECDE84B976 -7525DE386865CE34ECF2AC376D02FB, 8CECABC82841C8FF039AA57EF9FE371C5E2EF4B0, B5741CDEEC4021AABF16F0DD3EFFAEA6AE966225 -15F719AA939316A9EC6D804A64708F1, 3C6E86DA98D74C3F2DCD4B65F504E6BC768D3D44, DDEFB5BD0E5771D8E2F634F29365D517AEEDC036 -41E54CFFBAB943FDC54880DF2D51AD3, 373BC2AD337D32261178E9C57C70E0554F4CE186, AA096F06913DFB0912C9CEF526D44B1E324BCD75 -C5AFE6FF302BCBF94FD9829D87F5079, 4C7CC3FCF855416C8E15BF601A0122A5654F97DC, 878D540AB2344FB4ABD9C03DC470AE28ADFFFB7C -2510FB4FD908363EBEF8C87D897DF16B, 54D483E6242B4735A00156C1CBA84B91778CF42B, A78DDE6489C0A80E9308BCA3157D1A8B5B3F57E9 -6F32F1EF8B18A2BC3CEA59789C79D441, 6ABAFDFC5BC14A60A28D77972F340E3B842216EA, 51038A67F5D31948B26307B4EA7AB3640C778053 -14D98D5CEA149E834B6BF0C69D56D7CC3, E82C553610FC8B63FEB0DB31E3A0DA68C106E5E3, 1DF1F776DADAAAE58ADF21FBBFB62C0097662099 -3E8CA816BE3DDB89E243D253D80487649, 897C848BF06BC553EC8E8C8950BD09804998C876, 14D7A410886B0DB90525AB7BA1EE246A73A60E9 -BBA5F8443AB9929DA6CB76FB880D962DB, 85D158E140BC6A6CCDF89E8AECA1A7CDB1CA84BC, CB60AF36DBF61BEA2BB2A9C30AD7CEA29D2D43AF -232F1E8CCB02CB7D8F46264F29828C2891, ECAC9F0EF8001E781DA7E108A5EDDA176E1E647, 34537F33929A755A752694A1DF94058D0C347CB0 -698D5BA661086278ADD272ED7C87A479B3, 86C1309A598A35D2D9D7990D0D97007F46F05144, 6CECFC39FCCFFB543C08024647272AA85E8559E1 -13CA812F32319276A097758C87596ED6D19, 46E4BA1C1C543206124874287564B133C90184A, 7601EF178B343FB8CB5A58AC17ACF7B3FAA44DF7 -3B5F838D9694B763E1C660A5960C4C8474B, 81E2A9BE976D6165DC244519ED5101FF295D7E3E, B3C49C56550204A7FD1B0711D53D76598BB99CE7 -B21E8AA8C3BE262BA55321F0C224E58D5E1, 472E76D0B45F118EABF6F69D214C3834BC1C17DA, A24FB561FBF73B6239FED95D46AC25BD212E6B1 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, C80FEF3CB80EAC6EE159C1ADA0FDA46F1A245399, A30DD96A4188EC86845E5AF2AA49019F6AE48A85 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 850E88AAC63BA8E0F781E59F6F9DD9A5945975AC, E2F01022108120D55B58EF453EF6F79FED112E71 -12C9389FCCA50E069A6FC4946479E435E8EBB, 723B3443B2093A75BCEA86499C0405336FAEB7AC, 78804B263B316501CC15AF25EF83BB3C32958CAB -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 45CB4A516AD12FB4416A7CC7B9B4CEA46983942E, 8D9CABF331456BD32E7EFFD124476BB13A640295 -A912FD9E31CD7E3B6DEDE937884905E530493, 45B92C68D067BC02121F17ABEA1F28BD8B7E522A, 8D792BA364EA00CFF2C80755A2679FAFEDA527F7 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 9571BFAE70217D7FF606F689ECA2814876AC21D3, A76403E2F93669480823AFB0D063ADD932082B00 -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 43DDE406DCBB97095064FC1146FF3AF03B0A8969, 2DE4F4B03FB356942571C522525114EA1D53CE92 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 9123212E0BD1280F052D0B4A9263C2A78B19495F, C33773F5870235904A81C2821455F3655FE0BEAC -357F023F0DC204F0CDC846CA921F1ADD8447283, E38ED7FEB30387E2A385C57A95CE92F0DBD840EF, B9428701847396E5CDA66DFF5006A37DB551073B -A07D06BD29460ED26958D45FB65D50988CD5789, 13F5B9BD779209D40F75BC466868BDE3CEBD6E1E, A306B85F579BAC1BBF9BD247A7D277699F8E07D3 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 22660136A8DC351234D82858B99EBA6B3291E353, 8E9F4F7A1564345987E9018804E209129B983D1 -5A4653CA673768565B41F775D6947D55CF3813D1, 6B9E99060CD6956271556E2107A005A2EE2D588E, 4BF231D78E1610201E838BDB3FD3E0F99733F9EE -1.3.36.3.3.2.8.1.1.3 -1, C0A0647EAAB6A48753B033C56CB0F0900A2F5C4853375FD6, 14B690866ABD5BB88B5F4828C1490002E6773FA2FA299B8F -3, 15372D94937774620BDBFF366D5677D8464866C7B0B20626, 240F7E24234C9ECC309F54B7D88002EAF78341AB1D1E4919 -9, 3DE1B80404F2D352E1E0424AC44AE6FCCA3C36E4DB3F2C8B, 42703B24FC029208D243A039D1218C6596901CF5DC57A0AE -1B, 6B6B27A1B34176EF5BE4A90F3EB09819C2AE2D2D3406D493, 4735BE08740DFBF94E69BD8B7EF692456EC5FDB4FC56F474 -51, 81283CEE8EB6BBDFFF42417BE3493972B8F6688DE5132A57, A6892DA79387B8DB33F5F30620558A87DA1AB26FF3F1D269 -F3, 2E778A09031D67C380C1CE82699E926831E38FFF6BEF0397, 1162D20DA47C27C110F8450084E17BFA8AB2043F96A9AF11 -2D9, 55EDA6391B0088FB2CA0C9853A887B3F4511C3A745579053, 5206592A7BF6D149AC334208FCE29D8F0FD26BD5AAC2DF06 -88B, 26C1CA2C155A228963DAFD1F0162F35CCA11D41A0DE1E6E6, 3B382128826CE2D812A1235067FAF792B6C47B87EFF80608 -19A1, 851530598CFAF7C6151C34B1F4F96A7A2D47224058714FB6, 327027D32D0E90975D10918AEAAC6DA22ED1147D8109A83D -4CE3, 49CE4D34AE0A79450F8658EA94BBDA0DCCA08D3BBA198027, 2BCFDE686842FC3335E8256DEE40759CBA563A28DD4AFA38 -E6A9, 4993959969947DAA74CD89B1482A8B0222B31C301E187806, 1002864BF1D0B586D2B7E3CAC05E6D88316503B3C863BFA -2B3FB, 32CCB9ADA919C96E00549CD7766E9F42C3BC1F7AA26047B5, 7EC2F87C27775506F7D7F03D02D4BD4DEDB43782CE7C0521 -81BF1, 757DA0E7452128F8BE474BB10362C232B0B9B1744F309022, 3DC3A6B7E8D9AC1C5EEE92312F97876D3A7CC525B96111E5 -1853D3, 232B2517A03FA910F792512E0156C51119EC3A6F57F80043, 10B62EEAD5DDB374EC61380DFCB5D806CF543CBC41C4568A -48FB79, F028F0C4531ED5F39A825E2C37E51E3975C27794FACC883, 7FACCD61C4F4FAD252A079BBCD38821B454187B338A3F47E -DAF26B, 3F3FDE56A15F210F365E4ACB29501CA11DF915E7361688A1, 194D8C4955AE97A0723F98431AFE4D1CC07A1F01002132DE -290D741, 4350817B2E6AE5CADA4A73F49F8172B6F24B8DC39010F52C, AA0D29E18B607E39A624DD9A11E74BDEB2E2FC1E87B91C89 -7B285C3, 4F402025232360A82BEDD6BB4E17D13C22EE0582C4A6DECC, 806A16FA2ED6E53D83AEC7319E2DA8D5430A200C8021BB99 -17179149, B77A1FB68DA53BAFD6B18CEFFE16AAAC17308549F43DE523, 421FB8870B7EEB49490520B9FFF2550D282C486D2AB7E498 -4546B3DB, 205730FD02089FF1E02FF439F7F9BAC9C3FBFF9E18157932, 87008C5125861A361D5409719F261BAA40E63D319F2DE8BF -CFD41B91, 88E669450295AF865BE8CB29C1782110F3051C314E12F34C, BBDA78931D143757EB2635D98B04ED6B1807425332949F8 -26F7C52B3, 5F3D1A6EF764B33FD2C3178BE49308603652C0610F1AF764, 2422EEEC1A57489C6C88E13EDB22936093428614DF31D28A -74E74F819, 9BA3EF8D35060C4914ED6E26B9D10F49F181695F0F9AB8E4, 4F123A8419B5A4086C195BC38AD770A19C7C717221594B85 -15EB5EE84B, 152B9632352A027D5DCFC3638009A61ED2908F9CC1AD5D2F, 8E05A2D75920646DB8783BE17A40F81EFF90EDF9DEF38CF4 -41C21CB8E1, 23279D291D84A600B0183AD972942423E0EB033F12C0F369, 8EC0F8379501331C684A964886CBC46D5D518F8B65EA61F1 -C546562AA3, 4AA6B8680112263E0800BD0EEDF8C96013446CE312FFFAF, 36C0A8DCDF128CF516D4121B8BE76F6505263F176D19123 -24FD3027FE9, 1FD055778F3D3663CF87FFFC6F02847EC52FF5321EDC1664, C211242F88752136ED0CDEDE08392F38D7E148EE173C5769 -6EF79077FBB, 1B3818FB51F69B7B9289927121D600C8B7F5C2E3C9F109FB, 75329E1D8D024BB5F52D18F60F064E359FFC4114D30B75AD -14CE6B167F31, 7E991DB69689283F054D9242FA8AD14E4A43FEB179D36E7B, B3D30B85C5823DBE96EC16186CB3491AE240C713E22990D -3E6B41437D93, 9148A894330BF850E240D67A02F416EEF9BCAF0444386C0F, 110CA7E702670A48BA44D44CCFDA598175F7F1AD75173AFD -BB41C3CA78B9, 9E4F6CE1E7102F55BE642C5C90238E0726C8ADE9293D91C2, 5A79DD82D77EECBD11CFFE4B9472F879E8CC656F55F94377 -231C54B5F6A2B, C202F399B80AC881E833C197E5A03F5EE5E7E061646C1BB8, 8EAD676E50871323DAAD4A5585FDD8F11056B5378745D0B8 -6954FE21E3E81, 67BADC860D5E8DFB5B43B4039E3A59233BBFD131414DA9A7, 885AEE55E8816D04B08FE3D7908FBF0C3BC3ABF8BDDB01FF -13BFEFA65ABB83, 7F3DD959EED5A75FC4E621B0F1CB41BBB9B197432025ED5E, A87596B33E1C9D94A5D2A5ACF34C979988BE097FE8DF109A -3B3FCEF3103289, AAFCC1E7DEB01438320C5A0D86172F36D1AE6DF71ABF50D4, 204BD5BC52B48DB0A370FCDA6AC7D92515AA8C733EFC9158 -B1BF6CD930979B, 54657D1F78084F27B40C63ADB69103375135C1CF0AB54AFD, 292A4F6D7D03D0276692960BA0F4718AAB8400FCF9DB6033 -2153E468B91C6D1, 86F133D92071066016B2FF0BC8605B4D1F77FB798C1AB89, 91F9B2FE9D2FEA6C8C312DF7C7004ABE91925F87CC7B4EB3 -63FBAD3A2B55473, 90007D88A2BDA79FC74D480E15F5B95C9FC66C52273E5ECB, A4B22C524DB4F631C164D00A342382609A354C79E1AE4309 -12BF307AE81FFD59, 58A90F70B9DC8A33B6904549B78B44CADDC51C0723B8F03C, 1F77C8C671B42A6E2A27AD7FC5514EC7BB7525533C75F0B9 -383D9170B85FF80B, 269AB02DE4BCBE734ED2B0BCAA60D909326A7DC7D60CBC81, 88FFE6D03B70459A108480EF3EC195FD8B481B9675DF3CAC -A8B8B452291FE821, 6E5AA6DE04F2B07D1AA132D0F8E732187D2749A6DB7C678, 220FFF23A8806B36BE5073FCC5C83694D9F9B9B13162596A -1FA2A1CF67B5FB863, 7F7A91ED23191857223EE161546338F32ACD70A78D551830, 9EBAE410DE1C6D32ACD8058422897AA3A5CF8052CA3D2103 -5EE7E56E3721F2929, AD7A27F906A85AFFB10730E1C69F62CA09EF61F940718A24, 3B1AC0B99075AF0134FC3B70C82B431A180AF7D0A17B6B88 -11CB7B04AA565D7B7B, 3CCBD6A44DE3EF3FCAF592BAB09B6569207C7CA326BCFCF7, 27AEACE53211593DAE07E28523021BC212C0D707358BAE3D -3562710DFF03187271, 4F8830FF84CA529CBE403F16C35FF454F700D85E28BE1500, 757E2B112B54EADFB53B94E45BA3CD8E96BEEF29F0B0AA0B -A0275329FD09495753, BB29D839C03954732005C96457185FDCCD4E889F669FABEB, 433DAE8FD3C29CC05AC2239BE6E7271E12D64844133BF5E4 -1E075F97DF71BDC05F9, 407B961F46D046EAEDB0B61D115A5A9C34A1382C0F22B9B4, 3232022F706DC25082E58BA062819247DD28DE28A2A139D4 -5A161EC79E5539411EB, 7B61D06DE1671EE4BE0B7B471DCBC28218FAD482358434D2, 88F767AC4F8E23A39DC8065B3AD8B9AE0B9CF9B4FD90DE68 -10E425C56DAFFABC35C1, 8929C306538941A70E79593A1A0AB3D629A5235A74F054CC, 9F122278AF67A34270FFBBDC7A506E1A4A074C19C38D5DCE -32AC7150490FF034A143, 93170605EA162CA6DE9F091ADD8E1587F172E9D050845751, 9C5C4A58A3A727E592EC5030FCF4777234A8AFFF6BBD7A53 -980553F0DB2FD09DE3C9, 22226FDA07875956FECD9886C7BE5F14B850FBB8DA4CBF03, BAF98E928EECB044869039DB1E385377AFC80FBFAB06AB5C -1C80FFBD2918F71D9AB5B, 37CDB369B397199CE9622239BE453A6F24E6222C94A88971, 7EA3D907AC2FD95EBEDD4A26F899184126D3AEA6E716C189 -5582FF377B4AE558D0211, C16B53593230FB520CFA152CEAB7D7DC596CA214AE8B5923, 600D2F0173A807BB5FB932D85C70989E76D99830397DDCA7 -10088FDA671E0B00A70633, E3DC52820C5964E1A98DBCE9683482289731AB18573F59C, BC94E86DB104D98055BE53FFF53190CC49339064D60E7901 -3019AF8F355A2101F51299, B55D21043664FC16E4927FCE2C99B2EFDD58699C3FA3914D, 9478FF6A90D84EA6E092102477F70FE47AAA19855CA8EB00 -904D0EADA00E6305DF37CB, 37F472C3F2023110B9764C7BFA7F8B77962E3C312842D396, A0834AF3636984D58E851618423B3FEEE59E0D341C618349 -1B0E72C08E02B29119DA761, 3B2395A2AE7865B8278DB284A9574628AAF5303BCD944997, 2B3B763BD8A4E34B2AC8D7AE3E15D42DDD7FF23EB5886358 -512B5841AA0817B34D8F623, 61471F7DCA1BA9911C61C93631417396CE676A21837B50D2, 53853108898E5C29DB32E818FC07292709D542151651E29D -F38208C4FE184719E8AE269, 14B0010F18CDB3C69D0128722BB571AC1AC5985F8C2AA63C, AFA0D4DAC0585D8014A27F2A7A274FF6678EA1CF9FD3FAD2 -2DA861A4EFA48D54DBA0A73B, 831601F000164D5264AAF516932BA849528E59117147C4D1, 7E129217D207ACDB3C33CCE0A098ADCD8E4E05C31EC2142A -88F924EECEEDA7FE92E1F5B1, 43C00E5807DABFF6C1412F1FBB9EC3C58712214F2E537530, 8BE8283DEF77461C638566FFCEB2DC2C420FF3546934E4D -19AEB6ECC6CC8F7FBB8A5E113, 8263C95297007820470FF512CC3D1142B081D4DC72FEBA0B, 4903389E64F1A015B374EC894C8FDDED4C550F3041124CB9 -4D0C24C65465AE7F329F1A339, 1A9FD51416775E7C44FB257A6E7C20FA1D9D565EE08B3485, 97FE3EA3C8AD2E5CF4594E775EEDB21C7C9053C2CE85A889 -E7246E52FD310B7D97DD4E9AB, 54AB4F7852281104964B562CF749EEEA71A62CDB3952D797, 9C57EE2032F91208AF05B828C300D1C94708FF3B05BFE7E -2B56D4AF8F7932278C797EBD01, FDF7DD489CE3A1900ADE9EC805F829EBF4035AE9E2F777F, 58E9D114AE1415D00713B6A9F791DB1BB5955DFD8FF508B5 -82047E0EAE6B9676A56C7C3703, 6A9A0FBCC533215F7C4043C1A3FA6621CBAB39D2B833FC24, 5519C3763F5576A1EC8EAA00AB24CAD218AFAD8D22D35481 -1860D7A2C0B42C363F04574A509, C18FCAAC2E0EB8C9F1FCBCC243A13EA2486A5B7817FC9FBB, 922C1AEAC26F9EC2B3887307C0E5649ECFD073153A7D4708 -492286E8421C84A2BD0D05DEF1B, B1964A9B05B70C12F0E48CB77995559C79D075A70FDDC838, 2DAA8313F34D7C10F4F20DDB8BC1E78C7F43EA13110A24F5 -DB6794B8C6558DE83727119CD51, 301E9C2EBE62D60E760B587FABD90AC023B76E289145E5F9, BF6D7EDABDBB537EC30CB954A8128DBCDF59024FD46F1AD5 -29236BE2A5300A9B8A57534D67F3, 8E48AA82B9BB8B30D727F23EF9F4BFCC5C098477C3182F21, 5FC04F04A37539673170811F089B778DAADABEE7A4A7C056 -7B6A43A7EF901FD29F05F9E837D9, 3FAC4410E7EF6DAC16337B91C0BDA21EC2C57CA14CB6A5DD, 71EF21CD44A7BB7C5BEAD9B186391912AB69B0F6D15E28C4 -1723ECAF7CEB05F77DD11EDB8A78B, B8BADEC34B00A57285D5F7C9986D36FF32EB725FBB805709, 3A0518C91F781B3F3C2AEB6678B0733120562074B099EA32 -456BC60E76C111E679735C929F6A1, 76738B45F7FDEA6E88E8231769CF5B81108ACE1548FBE746, A4C43A885754915113D260A62B87A8C9381C6B6FF8E39A71 -D043522B644335B36C5A15B7DE3E3, 5EE8D910410BC70E5D0E43F142BDC3799AF1D30EF2605885, 1F50B838ABC0125B76C3D5BF7DEBB236F9BB8B528EBDF891 -270C9F6822CC9A11A450E41279ABA9, B17CFFCD2FB4AE89BB4A5783E38118F26F4DA596D37E5175, A235A4FD7E5EC1B29A5C9CDD0044C13F69C4A5681A782DF8 -7525DE386865CE34ECF2AC376D02FB, 8668EAF423C44099877980C339EEE68172D8F78E7427EB18, 69300D8E124A13CF8A4EB2EFDED6110637FE0D6CA76B2F81 -15F719AA939316A9EC6D804A64708F1, 769563AE36AF720A45411501535C18BCBA5DD31195D1D24C, A9ED2ADD8B69902D3D91912C5F54A7AFF18B0F4E26FAF4A8 -41E54CFFBAB943FDC54880DF2D51AD3, 138F3393C69E47240D349310493D86500D3E33DFCF3BE80, 9162178BA669960B0C4A462B03410731AFBA03EEC270A008 -C5AFE6FF302BCBF94FD9829D87F5079, B5AFA48DC52EBE93CF8FCC6197196AD286FC2A0101823544, 59E1D629088E8C1FF930E70C8AE98EE42DF686CC8D1A5819 -2510FB4FD908363EBEF8C87D897DF16B, A4A28324D6AD874F9CC6137EAF93EC69537FA64CC0D8807F, 8C278D4B0FC640BEF155D9D5ED1D23A556054E78C6E095A7 -6F32F1EF8B18A2BC3CEA59789C79D441, 4A7B023F0BB714352833A5F8872F397981738E48B5CDDCA3, 3F23F359030DA8ACD5467A940C04F5B76D4D4A0BCB6943C9 -14D98D5CEA149E834B6BF0C69D56D7CC3, 874B2F8ABD3F86F3C1F8DFA075955EEAB6E11180304EC14C, 15199F9F2663D6C6B7933711DB59A7DEBC1D20ACBF3B8ACA -3E8CA816BE3DDB89E243D253D80487649, 378AA43E9045F2E243FD0EEB13E8EDDB7730D60174B18707, 8D9D5BAAC1ACE8AB2512E08308C15DA9AE700D85206E6DFD -BBA5F8443AB9929DA6CB76FB880D962DB, 78CA67668B52C284CC667241F4694F7430262CE881FFFEF0, 87A1D3860EF6DF1827E171174F012A1C3BB841A255E9A3FB -232F1E8CCB02CB7D8F46264F29828C2891, 46E07162B7AA5B13A8D4D38416851FE2D59D9107FBDE7F79, 1AFFA722D208FC39416971D5AB4E9D0AB0742CADC535F09E -698D5BA661086278ADD272ED7C87A479B3, 1F5F6195D60F0747D73186BF6E3C35A5643899BD0D9BF1AE, 15146332713C57587EC52990438BF25857832E34604B6944 -13CA812F32319276A097758C87596ED6D19, 3B7E53C824740A20EDB0E42BC7EE72DC8B6FCCCF9EFDEB2F, 548099F96E2FD129F0A2290F8A51417778442C1CA8BC4B16 -3B5F838D9694B763E1C660A5960C4C8474B, 66A1900A0649953045405143864B4E204F23F0B3A238CC61, A45149CA592AF06320FCC8213740C6C7A9D9DAFC2584F2EC -B21E8AA8C3BE262BA55321F0C224E58D5E1, 71456AD2EF7B3193DAC4C22AECD767224AD636328B293578, 9569C7A28CDDBB0997AD2FACCED65DCD06745CEA1CD565B6 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 6153263EE368713682C135067F0FBA8EB85BE7D7CF54F853, AD1916EF2C24F60D97D3B2AC11FAB95C8A6DF4CF0340F319 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 59CE61C9CA9D383EC5C179D3D0264740C6903F74C298ED8E, 7E271439DEB776BB28E5FF42465C8611FE177F23E45606ED -12C9389FCCA50E069A6FC4946479E435E8EBB, 352D983C3572FCAC9D8E5F12ECCCF591D9B6AF0AABBDF97, 13C0088B9AE2D5FD1FEF8F1EE0820DA6B632F13D8517086B -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 9AB59EF54E54A6109E0D5EAF4BB500E312DECCD9C44B46A3, 6A078DD522A4AEAB8E3918AC2770CD33676D42BC4938A49F -A912FD9E31CD7E3B6DEDE937884905E530493, 67702DA2755CE88571BFE64C478CD8B3F767AF486E4688E4, 36F575326DAF5A05AC82D9BA7D466C27EAD553FD8CD2B443 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 1CADDD72BF887DD71C00A9532F37F83AFD399979974BEFAC, 43ADC0F07C7F7030337B254E3CFA1413CCB490434C43729C -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 5B0D19425213CF8C65D49B2EAB69ED01534E4D1802CEEB7E, 8C174CC3738826BED8F950BCD5747F9FE8120C3311C5C11A -11D500BFAF40AC5044981798DB5FB39F2C17B81, 42869B96BC0BBE824834500564BCEBD3B00CB735CACC24D3, A2C8B7F2DB830D836EF22B2EC806DA3C142A83FB58FF5C74 -357F023F0DC204F0CDC846CA921F1ADD8447283, 4F796879D7AE5E40956C48554D85A0B98F7A3E261C137DD1, AAA249FB99C6E0CBBD3879D7749FF7F1C3D1772522ADEC26 -A07D06BD29460ED26958D45FB65D50988CD5789, 66E40ED85308D6C085751509350B11054F9C436412E68C7C, 2115B87BE842179395F205BF4AF674647C1F05D7A002DBEA -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 501553C9D5F1949D32F3B30D3A82DCC6FE783CAED2B67AFF, 7852CFF2D5079EC85AE0C6169F664E212AF5C2A34C62CCFF -5A4653CA673768565B41F775D6947D55CF3813D1, 9064EE23E9A580EC19ED0E2607B7A0732083AB2FD7C8539, 1FA80C63A2911732BF1D4B7DF11FE93F0520B152F8DF21B2 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 49E756A4E1E0BBE8B7C8F23F9A7B53B6B3085F448709147E, 308E6416481F42EA8AF3EB275F90A71E0C88A660407DD410 -32C78F21DA0F2AB093551B3248B38680448F8B259, B82CDB22B083EAD1398EB5F30B76293560C0CC8EF8275FF, A54BF254372DE6CA1791D038B621FEFD5E689AA5DF7CDC17 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 1227FF219FEE38CE777E3088FA80DBA6C8BF5B34034D85FC, 8227DCE4AB0D45FE15D49E3171CB0F70033B348FAE24A815 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 1525EB5C73DD831C9DC0C1B7A0B263CCD7FD5E874BB7A0EE, 15E3FD0A154429A47C0793127F030973C24FB33FF70512BE -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, CD6DF42EA1766DA2A5E1C0AC97F5E2DA0517A982242C809, 1F87F03B1D6533707E74C4CC45923A1DCD0308C9347A6854 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 377F64191E3B65755701B7A831E7E2561A8E7221848B8854, 3E453A05C37969C3DDAE17ADF00761DCF346A44636047ECD -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 2F051F142CE5DD9889BB95EE1881CD3153CDD9BF954B96C9, 95D0487036E0BBE80FB9E426BE394EAA58B3D351B04AD7D2 -909A469765F53090D38D5A7231073A03433CC33DF71, B2180D8AFCE2BF5805073D265AF3330660FAD69047EEC213, 93049022EB664E1A177BED0744D5F42BC8B5D5DF9C004D97 -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 2C4C200A8563ADFC4663F82E0196B3F1A0B839C618DEC072, 24799B101803F1AF99BC3F0E8A0B2F22995AFDE46500C312 -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 6473C3DEFC9F6499C7EB3BC7E4268D5DABBE32BDA9F80E98, 63D9ABB1727192B4FB4407E840275F7E03E64AA92C899CED -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 9BC1AE879D3C70DB333860DF30671CD1286BDAC2E4413EC8, 93E3A9CBC5D641DCEBAD66E174ACBD8E9CB4C1AC0903C0B8 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 5F69EFA75320C99AA151F7DEAD3546909F04138DC2D089B3, 6CD44828D0A8DD8411B853DAB17F8DA3F2B2005E275784A4 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 14073F3A6223ACB37F2C1B9D6A4E1DD28D11410C18332E58, 42C28FE14785E83D65F2F46BE15BF750C51C934B29E28C39 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 4CDFC21088B01DD80C5B388A3B494394292AC58709E7117F, 4546768875568FF3CD876F2780C4DF3D4C24261100A98F5C -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 96609F476FDB637BF2564AEE7DEA601DEE9AF9C9C42F6F2B, 461AE3911D8B2E6479D4402FDBEA0399C936AC9303683CD2 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, B1EF9AF3F7DB75D3EAFF3D27ECD646DAD847364A87AF02DE, 60065CF2D88C5A8C94EB9A858560AA649758034C16F19343 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, B574061A8C15B34A9575CD559798EDD583E2FDC45384783D, 7E81F911568604E28FCFA4F81ED74100503E7D13CC99FF5A -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 94289945D4592A05B0EC10786138BC7B4F5C7910391442AC, BD7A3107CC8B9A68BC06CA97088E99075BEEB2AED1A64B65 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 621CCBA89F7F6E595EDAFA4A688E456481D318E958C4A42B, 6AA6B58A119577413B0F288AF9CFB4AEE4C183706465BC67 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 6AB0ACF3C66BE8E07A19D9AA34658970DC5168197CEFCCED, 2DA5C937238B7ADFA37B2A17F748F13F8FDD889F0F78C604 -1.3.36.3.3.2.8.1.1.5 -1, D9029AD2C7E5CF4340823B2A87DC68C9E4CE3174C1E6EFDEE12C07D, 58AA56F772C0726F24C6B89E4ECDAC24354B9E99CAA3F6D3761402CD -3, 9051DAE686FA68103A478DB398818D048C2042F01F0ECAB577E4598E, BAA97F6F99CABF4A626C056B63F21F793589D36CD5981A3579782900 -9, 3678FA80D1990917DC54E0E14BA7FB847A960D8EACBBF0E8359739D7, A1ABEFCB7A39ECF98B7775FFB9D02854DAC0B497AD875914DFAB7387 -1B, C74BDFF5959DD0C6F9216095BB0DD6AD8BA152B867146E75FB862837, ABA0D783E86EEA822530C4DA4053EE85597C48996E105CE860F64671 -51, 700117124C7D5E6001419F725905CCE272BA31EF318FF278468C36CA, 348733183713D1D2C4ED8F5C2C6387D42C54AC5CFBC603102305715E -F3, 37D306A81BBC67535792058A90D84D2DFC12BC890E736492DA7BB64E, F19CEBB5097C350D1E5AE579E3FF82989B2267C75E981A04F90761 -2D9, 97560F40D485C36A0B11A8BA012F646B3241F4AE6DB1F74C890AC141, 8CE9F73DF62A56B3B1403A9013EBD18FEE75FB5A927897438CAC7BE2 -88B, 7D611A190491F63D84A3E8FB0C7EC782FD3198B2C6833F61E2C904FE, BE330D050EA6FB0EC460001B8307E1C505F922D9D97D294FCD9EF773 -19A1, BE2485B40FAF4D78DEE28C4745865DC8FEF4B0A31EB4C61F0227C4A7, 99E0417C003BF157821BA493A4F2100AD715212A58EC5155298466B0 -4CE3, 8DC7F725548007EA8B83A3DE9EC9C4E2C1AF709D5E7CB7E5DC1D5D9C, 99EE4A916E1F08B02CC07E931E166789EFDFEC18D8A445AFEB03AF13 -E6A9, 560D9F6564BF9F33808B49A896D1C14D9000D5F103BA7E243A6EAA0B, 82BE72CD0CE6B10FE53DF27FDCE26023E22E0913104D3F8A1008777E -2B3FB, 35C1C301B524400855E9EC14E81123E6A3BFBBFFE624942253D500C7, 9E627155DAF67B513620B5175602CD622948649CB5D0CB005C08BB31 -81BF1, C434D9C015A5E1D318C0322574E2F3897F4501AAC7FF1A47220D1122, C589AAE40B5A7AD47FE58176A29DDAD03D7B773F69D3A8CFD997F2A6 -1853D3, 13071082B5F73BB39E792518F2847E6D1BBBB3241B11CE4DCB033F44, 5736F3FC56FEF30241A67C033090809057BCD908159C4E79683C506D -48FB79, BD13756E5C6883B8047372F851EE161A41810C2E812FD63A55CAD297, 4BB761688402C3218E660D9A5F4A1A099C3E43DBD3FB7CFC7366CF37 -DAF26B, 88B68F12D724BB9F2D0D281EA9C28B14E07ED554C245B62B142D8521, 662D7A48D38F0CF4DD1D7C98D0DB8CF5D6BAA92AE4E027130539CA07 -290D741, 67D1B6AF43C65B53F1B22B31F4768F3C52D3F89305998D0E3F022CDB, AB33A98708FA55728D764FDCAA6630C8D3827D574BC4D7149A601D02 -7B285C3, 5B650883CDF57C5E39EF9781D9E7E18C832A924974E6FA2C7C5E0536, 927F35A6E21751D6E01594B8C0B9684DA814CFE0064A158A7991889A -17179149, 9DE8EA33B3D3F19D4C96F23C84B7B285D1BB8E8C2A4C0AEBF22F9355, 413B0ACB51E7DB22F4508AE326D2CE0A14D4C1B4E501084475C15F77 -4546B3DB, 407FCE31A7F006D422638CF676503623EE41DA24034CBF03E90437F7, 66D3DDE94E6BE78A84000D62C3E94FFEC7CE67B35D299A5BFF062CFF -CFD41B91, 83EA95D2519AA39049EE26828F24D278DB13A10B00106A20625A4604, 4159FDF7381692F70FB3D99B3C3125C3CA5A814F02D55BF1094C17F0 -26F7C52B3, 1727AE2BD2213DBFD172616A4C101FF6132C0A6CFBE6AAA654299657, 31C2D3E165CA93E56CAE601F59945D9F6241CF00E4FEB34C8E297682 -74E74F819, 8B9CD85A1F0CF3FAF61E039E05A53F8DA54BA08925A884E1B3DAB31, 276ECE50A26503B7E19DCAB8B41AEE11A36A26DBD600B605ED792ED6 -15EB5EE84B, 76A2F5C94AC395CB7F8C7416F0DBA3F0F6E7C438C62201A42B8C0622, 20CD4642E639318C1B03F12105AD5DF44CDF5617A1A5E093E9C841F5 -41C21CB8E1, AA1CF6F6ACE92BE84DF61861E9BF7C562A55CCCF693E71B46AF2055, 3B5A5CEB4A2939EB010D8B9693C09903250DE8AE1A7322F4DCACD69B -C546562AA3, CD1920D507C89124A1B9233901142E18E48FC883D87095EFD7A3314B, 93DC2B5800330A0907713F330525653F3D3A81CD39B45B76ACDB3CC1 -24FD3027FE9, 87A668F4C77C69DB0F444E9F0FAAF7FD171C3B63019AC8BB74BF8304, 857D6BE67C42F64C8AD95E76567481C2AEB9011FD9C5839BDC68FC09 -6EF79077FBB, 9CA11EEDD1589B1E7E33553C685E578669BFC4F66DF8D65D555D163E, C93685610713B0BE6A7D81999CE7BD151B2D52A937191C05E4DD8AD3 -14CE6B167F31, 1D9E8018FA189DFDC0B62827ADBB5AE11B2F33892EB3FEB12B83E75, E3AAFD986DD899B6F083E2BCB54CEE0D3EBCD119BFA4EA607A0FB5E -3E6B41437D93, 7BA6EE049661425D5F8DC72931E7F2402A2E4A97D2F7FC143FD76D8D, C755B8D9FD768D6DC749AA7F9B4F9F27387D825E764347B65D2551B2 -BB41C3CA78B9, 6A0EB8B6773C7AE0656F3CE8AA4B1B750FF2DA2BC3ED589052849232, 2D334CDBAC8B5FCA776B87A39C1CDBB99ED7AC41806F3EE9F50F18FB -231C54B5F6A2B, 587148ABCE0ADA869A839C22949637F750504939DAA0048D3A6805A8, 9D4840C74C2DB99FB39CBEE24153CA3E0A0CCCA7619DD8E76183C2C5 -6954FE21E3E81, 98E5C68CB3F779BCB81772D1707F2263936135C9A5202ED0D6562E0F, 347B205502C67E8C71A744DBEBC516BEE078681A5BA95D92D0C758D2 -13BFEFA65ABB83, F52C96E667FEBECFC4311367E66037B5904B990C89BB7C23F87F63F, 1840FDEBB9EC89A3847139770D6D47BE900AB0F604B6D11891DB94CC -3B3FCEF3103289, AC714767BABBFA5CC9C609C54A875F0182D8B47040B61721F4720EEE, D5D0809EBF9673E3CD7B65E14EC1901C4AE3F36162BA286E4851299 -B1BF6CD930979B, ABAF5D506C352A1F70D71030BA430A982EC0E3563B4C70311957B10B, A1FD75ED09884D7246A681197801FAEDFA33BB188672AAFAB7FC9FFB -2153E468B91C6D1, A4A3C4DC5F63E7D59DCB8BF7483DD3B55CBDA310FFCD53B81D6871F5, 8CF8D465B1D80770DA779BFDBD193AB83683F6C359565CD923175F96 -63FBAD3A2B55473, 5FD9D18EE702585EE2452CBA9FF1A12556CA6AECC42AE1331D77381B, A4C9898EA99CC10BDE0F8E1ACEE506B1BD67FFD622738FC9B516854 -12BF307AE81FFD59, 6C6630CF7A5FC7F0E66B6A73C4C474034739A6ACBA1EC646CFBF454C, 9A392C26578BB12E1432DB221F1C37DC2CD66B79811E34F8B2900EFE -383D9170B85FF80B, AD81CB9B709082F6FAC6A8BA9251E6B9B5D6DB45113B7183DA96FF5E, 90023669BE569CEF1B701F4483EFA949C142A53E50B4700C1EFBD9FD -A8B8B452291FE821, 5DFAA3C6736766BB133E92E2306EE57D4EB60498EE9EA7122471BA57, 9D9C5D1D81386D0D851FF7D9EF865E10BEF14008EA439FA11F297E63 -1FA2A1CF67B5FB863, 7E76ECE33C8BDE5B331E3853640E0CCD6E640A586BF7F29149178E8A, 7D8B4EE2E6FB52B5A50C48E6F0CEA22FED7DB8279F8B911A32091F04 -5EE7E56E3721F2929, 8EE0CDBCA149879F1653742D158AFD304314ADB7F476D5236104E92D, 9B63DD51B4D882C5D3A883887D6D6BA2C2276A32720117872D27794D -11CB7B04AA565D7B7B, 4623A974C80BCDE4E438EBFAC52664B102C473DA18644FC7F7456539, BCA017861E55B59DFFC2BB2758285E28E029698D6EC5834CFF3D590D -3562710DFF03187271, 79C544CD7E926E69377BE9C24C5A0DB19459F6035AB1E3159476A6FE, 21F592355AC496FC8EFB36EA7B393FDD573290D8756F39313C2A7698 -A0275329FD09495753, 454DA445F53728F9587A4AA5AA8A0FB9612623BF57780D6AE64F6BA3, 1BD79BE151FA3A9075F9873ADB0F4FCEDB0F9B521BB020F7B7E7FB6A -1E075F97DF71BDC05F9, 6578141903F2F717585F5E63EC7EE219D9DBDD26F701DEBFA683166E, BA70938973BBEF67E148080EBDF97769991EB732511B7AFAE56CAD3A -5A161EC79E5539411EB, A772716E8BB1D481BF9207DF566255C6C58A323A79DAB4B478A5FEAB, 5C74227385F516E5C027BF7D46C33D7D188583AA9A63F2C9F2B75654 -10E425C56DAFFABC35C1, D78A1D0A9C0B71943D0E3B572555220EC52EBE8791A86B641125B70C, 45F3315D2AFCD55921DE83E3992CFA6F55B92BDB29FCB7C806354EB2 -32AC7150490FF034A143, 44554ACF264CB8A60698CA1EB741E7B118E81CD750AC5DF401A2968, 1C9D4B42DD7A6CEC2B2A5B52B740E2582E553A8C24234CF612E1D5E8 -980553F0DB2FD09DE3C9, 866E8131F5CB8F5104CDD17C677FE3C177C0846AC473BCBFBB0B2658, 805316946059A3417B2CD88EE8D23F3F7981C117110DE47E7E048AFE -1C80FFBD2918F71D9AB5B, 150487A2E0D2747846D6B65512C089A94400732514743012E2F9A40F, C3550F86D242617393E09ADF0FC60D1002554FBDA0F2389BA384DAA2 -5582FF377B4AE558D0211, 390EC67FB51219F6D72D1EAFCBBA1701334EDF3F16CC6D745282E58A, 7EE55DDC3119396852C8F7660E1E6C727861491F152EBA84641DEDF7 -10088FDA671E0B00A70633, 90623CB04AA71C3AAB97DE35A17937D0F046C742AF4EBE9131B1E9D6, 25D2648CB1B208CB9AF7C4AF1FB82DF9AAB8B34978FF4E7639F7B7D5 -3019AF8F355A2101F51299, B968124D312CE494AABE64E92A466C41DE4B0EBE71D0BDECCE03391F, 5090FCABDAF71BBACCA8AB11C7F5B7B11B718856F386F45E2230EC83 -904D0EADA00E6305DF37CB, B531FDC8432F89E0FC6BFAD8EF7C6ACD47F35E81681D4A2A41DB71E, 352C1396F2B45DCF1A9ACF10D8C52B81A7ADEEB7CDD0E2A1673D4929 -1B0E72C08E02B29119DA761, D5559ECF575C6FA3ABAB0E73D034D9F7DAB1B44534FB1E6ACC08D8AD, B77E9A95D73646F4CEECFF9561642BFA487675328C366360916D9D3A -512B5841AA0817B34D8F623, 4337F5B262528B59AC35E8B47074BF9AAB76145F6FC5DAC1F7C2AEA2, 2528FDF84AEF55F2B2D1000BC7FB9C04EBF0AA6111C62532EB95FA10 -F38208C4FE184719E8AE269, 508F4FEACAB97FBC825FCCC60F12B0243D54859DDECA3F27D649A996, 57465AFDE9027BD03C83C325129670FF07C1B51EF92010385A19C1CF -2DA861A4EFA48D54DBA0A73B, 8EB3CA77064CC3FCF03BF49B92DC98CFEBDDD3AA3FD169441F5A654E, B6D46305DCD5DB56C27705E5EBD4109133AE3A344BE016734F4DA906 -88F924EECEEDA7FE92E1F5B1, 9FDD3CBD00ABE17321BA1F6B287F38F18C3A38F0B35427D91979718, AD33176E29BE2CA2DCF8335E64BEE53D3E5E6D877ACE901C8398AE3A -19AEB6ECC6CC8F7FBB8A5E113, AF1AB77067FC702E7BF31BB0900B2CF3C5BC306D2C9D4D9BD8252DA1, D5A365404AE1B87409B5FDB92B9B19DACCCB4E58ED6638DB4A490C6C -4D0C24C65465AE7F329F1A339, 9CDBCE95A324474375C262B453F9FD8C4B463797ED89782215D77503, B18E2720228F4D6E3DF4D68B97D984A8D3CE649EB034732EB4303B13 -E7246E52FD310B7D97DD4E9AB, 458181177F66D518CF18B9246597EF14407310E02183984222E20BB3, 4550DBD5AC61656022534883AAD64FC65C514639BD2F9A8B0713DDD7 -2B56D4AF8F7932278C797EBD01, 29D45C86E04BD1D8B8F555984E35A95FCED91FCB65A29BECB16B273F, 6997E4DB3D41BD07881BDFDF5C8EEAC7E106D7126963CA154575137F -82047E0EAE6B9676A56C7C3703, BCF4B0E5262A4A14B42E85C1E685B382EFCC963E671F10DCCB71CE54, 28F842527FD75AAEB2FFCB470990CB0E76AEFC34162A51909E054BA9 -1860D7A2C0B42C363F04574A509, 9CDCD6BE33CC81B327B8A604976FB4189304268EC06F8EA677F2354B, 572D4CD8BB8F372A083734006AD286DF7C0DE53BC2676E322ED189F2 -492286E8421C84A2BD0D05DEF1B, 655DBCDEC484067C5EAF1B8F4D7FDB5FA7040C6077BA03FA62B881A9, BEB2B98F4ACC207D12AFF0A6ED77B1C61ED547DD0E9D0962963F7B15 -DB6794B8C6558DE83727119CD51, 5FD80366A8C84158334B799EB4D09EF3854614A99FF49751D5E3B4F2, 4DA6AD1B47D54A339DF69529570B2CB8866662D2354EEBED7CC37BAF -29236BE2A5300A9B8A57534D67F3, 31EE8ED6E0F79235F5FD654B196974FFA1638CA540241D4262E09A8D, 3E6EA7198DD97E7C6A6B601AF6DFA80A1F63629F8346AACFB8E0BE43 -7B6A43A7EF901FD29F05F9E837D9, 5E03029E3C16C67D3FE1F78B68C95278DDF9BD96816E1F909EB1059, D46119D7CDCCCDCFB807A747075C7B91DA9C9A2377CD35CD02FA4090 -1723ECAF7CEB05F77DD11EDB8A78B, 701A1AE882537A189F70F78FF5093C988563570E5D64BE18F3304237, CD8784E093D600257E9761747203D74CAD8B06BFBC5C3C6B27F8284B -456BC60E76C111E679735C929F6A1, 6FC7AACFFDC8A2A082E3C8776915781DADF1920CD48F0F760ADA53C0, D694379B438B524EFF485CD60687CC8CA9DF074F51C3D00A4E771C26 -D043522B644335B36C5A15B7DE3E3, B52B46D4F0E7A8AC3904B709EF83BD526390B7702A1D60C2A1F2D88C, 5548A2E5297B28A70FB9E378BBF65215C560567A81DFF23669ED8C10 -270C9F6822CC9A11A450E41279ABA9, B2EDF0949F931E2E7C966EB2D2E71B6EE8EE1056B88A8C8288C4A8AC, 7C4F7B5C5B1540D15B1752EDD20ADC38EFE71D8A50F49F743515D3EF -7525DE386865CE34ECF2AC376D02FB, C04A7D9B2E95578D02543B8614B179B7907DF228BA1D8E3ED616CC73, B28EB5A0FB1787BAA8E9B988D7B47E23783A4C07326E0939B860FD9B -15F719AA939316A9EC6D804A64708F1, 8B29F5DFBAD0D48E025C6A175B39A1D604117D0F063F4BAA360B980C, C23DB7D9D8F6D69B11E3FF2452E3EF9E654DD1C9E07F0C87B414406B -41E54CFFBAB943FDC54880DF2D51AD3, 30A52B96C020C07EC5C6CEE688CBF641984EC1415706BAF4C79AACDF, 99BB4FCE5BD13429AFCF1F3E55FD8CCA9164681E8BEE19CBD73A1C9F -C5AFE6FF302BCBF94FD9829D87F5079, 6B83E99D35998A5A6E3CB26F29FD7318F7D7D233615D991ACB6DB5A, 99C6162BD509757D94C90D85D30F117D16B112C8C18971FA5DD33EB4 -2510FB4FD908363EBEF8C87D897DF16B, 383110A33408123E4BB7CAD61316FB6CA14039D2A37AF0F4537EDAB1, 120E828897606A7E70EE689DAADD7EB86A814B8C477B4F2458C915D3 -6F32F1EF8B18A2BC3CEA59789C79D441, A7F54BADB50E3FFC868401C41B2C908C589DFAFAF91923B98771FB40, 52BEF20FB6F044480439CCD5D17C6C52BD6775D0FA8B0AA550B0FB43 -14D98D5CEA149E834B6BF0C69D56D7CC3, 6C88EB4772FD1A5D379E43CD1EB83D9305F7F6F036B205AC26B6F91D, 874418E922EE0093CB0062E57DCA24F19F1A37FD7B3B43731B66E321 -3E8CA816BE3DDB89E243D253D80487649, D3C756C106DAFCD581AEE7DED28AC0CE58862D1DA455DFFD98A41EBB, 9D5A6ED77C798D0F13654A5D46CF2F4971C0C66EC7D8191645ACA5ED -BBA5F8443AB9929DA6CB76FB880D962DB, 52A9ED18B453B0D260622A6BD0800D0E5DA3188FDB8067DC57F04B38, A43F64C8F801E85F30A8ECDA2ECEB1573084E2E021175D994ABB03A9 -232F1E8CCB02CB7D8F46264F29828C2891, 113F35134EFC0B094AB2BD9D4EDF1A5C3861082763E413423298594D, 7E2D3737D88B5EF0806A75625279EA14B262868621285F911598E989 -698D5BA661086278ADD272ED7C87A479B3, 3F957ADB067D87547F650C6F31B80DE171D0F13353EDB47185AD74BE, 19F50BA8AE16872E435871FE43874E8F3A2EDCF4E45F9261CAB5ECA1 -13CA812F32319276A097758C87596ED6D19, 95C2B8ED860B89E75E494CD5E0A2320E7EA5C580AE1934CC6CACFFA3, C542D9C34E46E32FEC49CDB8E3D645DC49266CA4F24607989C3EAE69 -3B5F838D9694B763E1C660A5960C4C8474B, 5BDAEC2267884609312C65E3BA5B9E86EA4644A557CD66800CE59E2, 7FFFB1A4979F94C784631C6C3443AB570BB6F00EDFB2BC0C5BDF9E42 -B21E8AA8C3BE262BA55321F0C224E58D5E1, BE1586261FA377B31A2A9C732B3620170FB0D9EE7FD3DCEF5285A67, 81EB8B5C5CB0443F7D8213EA509BE92211DE125E5916830137778893 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 3B58B93A32E53232D86B4EE339DE3F2EB4284AEDF784A9EFB9EBF9FB, 69DFE5655D5D268124746D0FA3BC87DFE932E96A58DCB1DF8ABC9CE6 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 9DF46A21103C4F9D4AFADDBD8B1175D4F1D2D2E891B51EDEB3A6E08B, 267E816AB5D46E9078A1ADB00E9A99BCF96DB005035438660E868CEE -12C9389FCCA50E069A6FC4946479E435E8EBB, D4D01DD98285A3F170968161952E8903F96BD62A91C9C52CC7B6AAB, 72433FB70C058E123D12879F089B18EF812E41CD39EE78B0175EE4D7 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 1E7368B2C13AD5D126DA4B7ED3BAA8E9DD7B9A6F10DF213A2359577F, 1048271AC486F0A40428E684C9BE5E3B523D82E20FBFEB78C1673262 -A912FD9E31CD7E3B6DEDE937884905E530493, D12C024D62AF86035697E22414B4420038C8D3E4C021449CDD7738A7, 9AE6D0D2E863688D1C82F33252F409BB7093AE3DF0DA52132BB046AD -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 3CB40EE346306E26AE21678D64C63929905C74E25CEA0351FEEFBE84, 7ECC1210997448421BB47F850F7DE16129D8CA94760F912BDEE650BF -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 2F8CCF58F56C6BE3494BD1439AACAEF31EC59C631DACEEB48FC4887, 88B8725683F4DEB7450A66413984F85763BBAE3BD11D024526EC6B32 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 89FF6084D645F277AA36C14F2005E82AE75007326720AA826AAF0A9F, 826FCC07960E1016134C5DC05A67FFA874F5ABF885413C121AAF5893 -357F023F0DC204F0CDC846CA921F1ADD8447283, 5075AD06CDA4AF298B647F40508C948081A1DCFF1D7A0875212D0402, 2ADB2220A3D8D697A3B3D96F13A1F870F6E035E101CBBD9E0CE0B23D -A07D06BD29460ED26958D45FB65D50988CD5789, 8F8F59C3A6B90FB08109827DCB633285BA514DA8D921FF3DB8F767F1, BF349663D1FD52717DDA6CE51F2F1893962D3362EF129D94EF098447 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 9EAE84C18D7F7C801EB10CE73680615066854B331EDD3CC946195F4A, 3626D3FC1C9463AC90C51501D0E1102F5435041C8E3F3E7D272E633D -5A4653CA673768565B41F775D6947D55CF3813D1, 18668381F840F3328091A887086E7E7039965A95988F5459DF89C59, AC8398B632BF11105D2204402C4663856BD51EFC3C68490320BE86F2 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, B099FBBC805294A6B57AD218B35FF56E71C7101F0AF4D34F7C9B815C, ADEB7AAF60B346BE980DE6D3B48FE87937A7CE75BAC82F57653E6C12 -32C78F21DA0F2AB093551B3248B38680448F8B259, CCAD5B20D10F58FEF0C404163F2895D54A81DCF5C95C381C2CFCF928, 8FF2C03496F7D3A29091B1BE1D7F526B09F3152E0E9C7B0AB42F4389 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 1AB196BD768FB7E4213459870971465F7CFC6449AF1E6445C89E2A76, 8464F93316DEAD12A4A55D5128D383ABCE14856564CDC6A866572E37 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, D5A80913394357A3AF110690FDE557B7FB7143585B3013F760A0F53E, A89FEBD767C3D8055D209C7CBADA549DC9AD7BD9B580C78F318FB226 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, 701598C080DA1D401BC1B1729459CFE8920C3A5A9C2A820DA4CF0E88, B732FF66066B8769ECC10A3545D33DA231EF65ECCFFEE0BF255B6996 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, B58468D4BC9F606C9A476C4FE9FA8F0CD31D4FF66D222EB9CA981A04, 212C629483DDA17A87CC311F1281780EA834148188F829F783E118AF -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, D6B980A4BB61B966202792436301F448E7A5D54DEEAEDF0F1F7E6FC4, AE4A7B44AB64F4B4747BEF073CBF086063E61F0E50013568937EC26E -909A469765F53090D38D5A7231073A03433CC33DF71, 9D147B007BEF3A476D0B06261A46BF90D88C1BB96413B9ECEAEA2A2B, 1F16CCE5FF3541E5FF57BE4D9D0CFB194D4DF085F74958DD3C86F640 -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 2D18837150AE6D5A675B13CF4AD327806F9A087643BD45E795C38707, 302DA9EE0F6E3CF16D2C1EB291F095DAD45B0BF1A352CD448832AAA3 -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 65CE46E2D88FCC93739729EA4281DFDC311F6C2CF891C9FAEE3C6DB, 6F8DDCA0140944A1B65BA9231B18B6C6DEA58C9BC6C194AB1A88235A -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 88A8C8F0022A1636E88F07257B3CAAA895EEDC2E28F515DE33553F4D, 7D537C57337A26AFFC64C43FECCB0B5AF0D19AA9221F413EB32CD7DD -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 40048B31D125B08E4B68B8A5B243C7043B8781B61E9524D4B97650E3, 290EDCD459FD62914573D1096E947E34C59252C6D5646BF3A334CD31 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, A588AF0846363CCA4CCA5EFBC287C5A96CF59C061B3FB57F799F7ED5, 4191436090F58DF720AA5F384ED650788473E5BF1B2CAD4E72173C33 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 7C12EFB6A50FA64B253B7C473598CF47B2CECE4EBD6B9E53610E0FEC, B2D1A748C4B6E93DBC69578228EC58B0D3C0CE600F316E5B751B4284 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 113DDA16E54B5B53F16102057F8F3F89A56B28E91D8DAF493E17B61D, 5061063386F8FAB5EEF8C6D16B0C63EA7FE42C32A43F68E7FB93749A -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, CE81ED7FEBE7FB917E127B263246B6CFFC34CE81676FD00752399B5C, 413B8F73C85556C8B57BFBAF53658A0A37D419031385DD43EAEF3CB6 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 1480C4E95742F59EE0810C3298E59896FC7E0B8F40A2AB829B73793C, 50CDD0CF6596389D8666BF7AF7F626F2BBBED78530CA982781974D1C -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, D68442F141872EF7D602E4A9BFFF9873707E934B6B096599330E0E55, 6D9AB472D24DC479AE774F41ABE385AC9F1F38E64951D0E878A0C64B -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 39976A9CFBA86F2A4986267C3DDCB0D871F94FCCA84BE490B4E695C1, 4795ABBAF5846C8439722DBF48CEBDFA0D361945D10D31FBDBB85F6C -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, D002343FE9EF226C1AAC5C57A68A79E894B1C6F7081515DA65665AA9, 3D1EE31112CEAE2B11CA44F44203FA3482EFDDDF3BFD8DB870AB069 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 7CC783262E2954F0B4429FB9A98C59943E0BFC96739DE44C3029474E, D2C1A1CB0A4691BB2DC3B4E520FE747A8EB82063E51C5F937E643895 -29396F76B67B7C403D73A1059B80139336878E44938606769, 9F31EA266F18248D189F8A64D5D02851E5BC07EBB094AFB080F0CB98, 31CC22BC9BF84225D0B2AF8868FD8DE7636AC57516769151C6625D41 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, 245FF879F1FD72A577D9E9B13D3F848316CADCDB496AC55609A366D9, 82709ACD21053B090E86A8D2D600C6A7A4B2A5CCBB70E3F03F5B525C -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 803FBA695B95B0C6388495DB5E92711F7CB339B527037300A1CB16A6, 15FEF29165B5506620793CA2F6224F6B3D286FCAFD23BE9F55DD0EE0 -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 67492E8F414C11849FBE8ABFABA172B0B148712E8F197D4BAA6EA045, 6E892642EE6E4C110229C79491EBACA758F522DEC735F5FEFA8A7343 -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, 99C43A6428E0665AF0FE9432775302990E5B2A73CF5D63F69E8538CA, 872F31C94A63D533AA93ADA8DA88CFF8D36AF8A862395177B32E6FD0 -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 29CE22F16158161E637FE50BB21CECC597FFC7BCAA9D3E3A87051C03, 551ABD7C1A0B6EC2522E61397F6587FE52E5C543242BF59016F92D1C -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, CC3A2D5770D49A3B2C08978B89016544600FE3DE7071B691D6A93D7D, A0CDD439A35835C089EB1603F3801E9BAB007BBE4AF3179E9F339C42 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 5577AAE374F46793D516028601F50C7B3B7F0AFE7947F0DB666F949E, 2186C3E5D1E135D104107D376D3DB072B9270AAF01F890D75642C56D -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, C61C35436E7F21C3346159335E6308D90EA5FCF5D18C2096BF335085, 98BD3C22341D740EB6CF0351CAEB96C58A05FBC71B0AFB6229EEF989 -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 5BA0BA4F6EAC48FBA3CB629EF90890DE25E8D84A0C0870190642C653, 54607A9B851526687129EB877A888C819764281D9E21296517B7A85C -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, 5CDA9E51CBBBD50183201A8833E9F66CDC60B297AED2343D7D7867C4, 288F53B0B627A60DDA01F120062D87803FBDF0F78B89A659EAD52F2E -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 897D80CBCD3C2F8543D80F38F97707EACD65FF7747B713EF05E4F296, 3A5D718E8B171C5CEAB8ECBB88D9045ACC04597778FD93506AD8443C -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 51C0422499877DFAA78FABC67F7DF44D254922388DBDAAD97ED3E6D2, B9038972FF7EB5A29303BD892D9F424AC8A82A481CDC227B1B2DFE41 -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 566D7B0F6F7E95EF39B80CDE8E2C35422BE39622A96FB5618A5C3F0F, 2F120E54B0F813B203CA28D438CD83AFC92D4EC46805371385B01BB5 -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 9C8CC1A419CA15DCE076FA36E7B72667DB460E5B2AF17C78C9D6588F, 8F60B8D888E15E0E4A4B5A7C9B0B7545839BD342A23573FEA6A9A1E -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 7B132580A446FA3F988C7503AB1A857BCA0B1F8C8B366191617C8CA8, CCF667B9D9ECA744A02740629926E1F452DB5AAD6D029D6DA7CBCDAB -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 9D0E644A530ED5E6117DABF289EF9329DD7EC57C6388B86629252EEA, D459375741A73125FE40E392AFA8F11BC9C8B532ABBE836D6EAFC271 -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 44EFDB643CA013BA6C4CD17A10FB02944F3FE17551EA3A422D55F12F, B7814E32C303118D19EC64463FAC31FCC42389B013C1B34A0F9B4842 -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, ABED872CFE6896CE98A1D22C1C6579AFD487968D3A38B3BB101A44DA, 1B565F988C9E805B9575FC96E40BF544C5A52E0CB6E1DCAFEEC9A494 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 65385735195407E3D29AF0DE625290351664CC833E9648A8F28FF90B, 5900AB88E5848E30A7FBC9E66D8D85DE3E1E9C8C65B7735B2C52AD22 -1.3.36.3.3.2.8.1.1.7 -1, 8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262, 547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997 -3, A8F217B77338F1D4D6624C3AB4F6CC16D2AA843D0C0FCA016B91E2AD25CAE39D, 4B49CAFC7DAC26BB0AA2A6850A1B40F5FAC10E4589348FB77E65CC5602B74F9D -9, 8B5FA06D31D59D690811364099019B7CD283BD714A67C06A420D27D6784F8F12, 41E0E0C34464B5C7AE64ED13D26D038E146F15EEA266B22842BE764F293B3348 -1B, 274EFABE5807D4515B8777A954BCC120094F1814BA94C4AE2382F79BAECC1E1, 9D81F55342FFE3FA3AAE77D7197AC174109430909DC5454E4FC43228CB5BE420 -51, 697ABBC9FD2E8339C055FA674B8861BE84302D307B757AF7875A187D4C0E462A, 77EAB4AA0FBF239EBBDFC43C9E83635CF77273B82A2E1F0B71DD4BEAE7B9D7B0 -F3, 535BFC7A95097A9A056809C7EECA422A9B55C7FD3453268503F000DE1FB1296D, 27984D5E479CF4AE348E6AB19BE393EFBA64BD8F6F3D7153546E101F71B1F453 -2D9, 34C9B2997C637CCA2C8A1D92B6019C5046264BE700711907FED7E760BA635B7C, 19D0748B4C7850BBE084455DA95DDBC124D5024F65714341D85D0C8B3B1FE2DE -88B, 3EECC915BFBBDE645A1D297E124E9117A47ADF70D65B7A395E336402BA732F25, 90C4EF901AA7DED1556587751996EEE5C2383429B729434E56FFD01FD7670E73 -19A1, 8D4846A3EF0A15666C8C5E8BF8611B3E681E1394616BE2848478FAA6223075C0, 8E9C18A97D920CCA211C2FEC6CBA42F27D31EFC2AEDCD6EB76D08B76823FB69D -4CE3, 6D9ABAFF9C56ACA418DFFB22722FE003B04B2EF28EE681313E0B750B97F72E1E, 319AE239D43A668F3171CCA0656F62B0FA6750B15DFA17145C221B3E13BE89B -E6A9, 59C5942567B34615155DE61C1B5F1807F44217EACF6E29D2BC15943F9FFAB6F, 307E36A41888702BE432DEA8ABD9C94FC86446371E213A486B2BF4E681AC22B8 -2B3FB, D4DF8BD1339E4997F43EAE04ED6E571BEE6DABEC7F44878DFA7315B515268E6, 14086555BC1508DE0A970C34DFF67D246F2C6AE29D090CA90FD5E8404617A191 -81BF1, 31972E8CB425979552F6D623FCD33272FB50D937DE4323C0FAACAE58A584BC13, 9A722992ED2311CDCB23F1337771E98E49BC62E15615E4CC021857B243353F6B -1853D3, 899D1230EC55E0F03BC167A1475A75110EFD9A3A51873992A71253B5EC467A98, 27371D0F69A7077D825659F710F3FFEEF74E31B16DC7DE61F8DB67912F6B1189 -48FB79, 89A45B626AAE82D8DD86907B39DFA2ADE4708899CF19905481D2D346791C5202, 59647E386098A6490A29B4827AFB715469E08872A02F821463540CE48ED2DF08 -DAF26B, 93D0857AE3A2D2A1AB2AB0902255646B641A14FD928D6DA427BF7700CB3DAD4E, 5F4B14EDA01BEAF69BA3BDEA3B666E217DFEE4F35CD5A01ABF2F71EC9B6DBC6C -290D741, 3DEE721B22097601D91EC23DE612041AE4BDBEF7A98A3906CC4A2F749F365CE5, 4AE62062843ABCD26336F95B53AFFB9F4BBEE2A8C0810BCDDA553FD2326080AF -7B285C3, 2388F74E5FA7135B6EA5019030D19E6859899161A082D53B91D3B20F3DA7748F, 6D79091C31C438CAAD31360ED8B10B24431D13AD76E4952840792E9868DFD9AE -17179149, 6A9B571595CB42E97E06C572AD566398014D6334B6B21BF63E68FD8A230D2480, 839296F8654F6EF4F24B12F727F09D6F6ACC028FA48DE218DE24C9D9600D171F -4546B3DB, 89FD4EEA8DB6BD23AB208FCE0BAC86B319C4373B9A10E63F597EA7490F944B44, 37C6C73CA9E5A1D41AB2C8CC869AC729D1F5EC9ABF31A1629A57DF9461555F1B -CFD41B91, 7A53D3E1474B69B9859D0532D923A4A64F993E304E8823653587502A1C177DE8, 4AA9381DF1B0611305A84391BBFE764C3D23A3E7FDFBA2026C75903ABB22F2A0 -26F7C52B3, A227234A32C3C0D23A4EC9F33B8ECC896EE6406666C6E20FF030B7EFF9032D2D, 65FF76023CAE79872B66AF71F5EAF7B5740AE83AFD3071C0A34CDBAC5E014691 -74E74F819, 2177F87DAFBEE6E31BB4BFC1ED8F12E2CBA413664185202CFA5A2CA0D576B334, 70A75B99A262394C3FD9B680EC825BB6444A51E2B85D22CEFE6CD11D4A5D2D7F -15EB5EE84B, 9990DB116664BF1F283735F708BC35C1150BD4DEC0E0A52F9145231AA257DAA9, 86BDB88381D7F4D36026F362D0F598AB4649202C424AF446737CFAD6898EC8FB -41C21CB8E1, 8CBB7C3D76CEA55F4C3A827E65BD35FD8CB8894C531D15CDC58226BC29DA8D01, BED1199D8619CC45C2F76E0B99DC579AC5DC0888EC490D57226D627E6E0B644 -C546562AA3, 4311672AE1192A39F1222F154B1799AA6473F80D41366D8B1523559B3A4A2496, 89C0A7A3FACA35A9FDA9FFF90B0B928E16BCC0676CBCE62926AE8F459A2612D1 -24FD3027FE9, 3C68DFEE1E2ED346AF68C5A28C055661F8C75A866A58789A18D9BFFD94EC231F, 7FDE5DB5FDFF0E7744401F7DC8259BED5F87EB4A02B78E5E3F2A4B1771112CEC -6EF79077FBB, 2D4BEC5BCC405E9D4255CA412926CFDCD60AF7A7656F9FC299FE967B413F6342, 8CBA316FF17E316DD8536D1D35E3C0B2BD893D0862008036D2D7C19548E6C068 -14CE6B167F31, 3FC5F1C0B0DDBF4709D0DBDA655E23005AA008004E9E20007CED5B2E173DFDA, 7E80A1DF82B793ED9501839FC81036AF21EE7FB3F6EFB9B6F7BA0A82A166C5D2 -3E6B41437D93, 9E2CB076FA37025BD44B0A648427497C48EFC53621DBB2E5A31359799A39CE56, 65E031694808E2E248C299E7EB0CD6D4C7A252108BFEC6F66B4446B685B610B4 -BB41C3CA78B9, 43111BB0B357B5AB338CE6DF9D453313251DDDB099D4F3892512790BEF83A205, 3586E1BCF37C1FDD4384ECB628A95B58D4C7647E4A1A0A446679763EB53DE105 -231C54B5F6A2B, 313E35C1681A0CE7A4EB864510A9133CF290725A0A187529734E9A7F4D0952F1, 66A253D82425C866F0BA1B111C256FA7F6D51BBBF82D1622DC84B511515CEC2B -6954FE21E3E81, 9ADA028874985264231E22FFB4A4C6E77DF2BA3CEE05512FA184F1646609A861, 34D8F4BE432542BE60F08163C688E8E9845FE2C49703FC2DE3F9D8483BC91A8F -13BFEFA65ABB83, 97719125E81246DAC18561D33970006EC25C5F629A7784FAC5B34BBD73D10CCE, A354141B3B1FB4787F92DDF0A21BEBF5856A37CF23F23D240841ADC3422664DC -3B3FCEF3103289, 799504214614958532C29DBD7CD9BDE594D36741D7977F973405DCF3A73ACAB1, 6FDF169B000C286595DEA1DB78301937F8368F6A6649A6BA916314D9CD94AA8C -B1BF6CD930979B, 957457E0F0F653E159C746C22AD289703554BEF3E4D8E2E6EF602D7DEC951E0C, 10786C72B695464FA3070E2B7C6D62020DC8B56BF747F7934C435FA172037656 -2153E468B91C6D1, 2894D68287E809D5B7CDA4D31B493442C06DB832468FE9AB8C7369D1710FDAC3, 1CC185FB23A77D676007D222629595924A1A916C14F87D8413B404DEA8A14DD3 -63FBAD3A2B55473, 1BBE27F18AFF32B5EBBA1196094B628E6203784BD33E1553CED3F4078F1F4D4A, 72B5B9FE767B414475588B765A471E8A75D2B309BCB609DF6B55BC62539D96AD -12BF307AE81FFD59, 92A8F64023B769A124CFC7131706763AD3CF330E47899E56363F7B3B9C1C3934, 71EFD68C60F2DE85B1466E949936B9E148BCDB8A94E5E40ACAF25481847A3B13 -383D9170B85FF80B, 1B72F7FC1BF692FA53BCF19973FEB9DEC0E122EC20A0BB9510DB6FFC1DB52DFF, A5AB4FC122ACEB064BDD193E48F3DBF2142FA857538330B70E3C1AAA7572BBFD -A8B8B452291FE821, 239B806D1B9D6B18F100E423362062AAEE03E4144CB65082F930023EECD200A8, 9B0BCB313E40CC13069908E3A1B2B2A04D970C2C93B7311B90F60F46EFAE3E41 -1FA2A1CF67B5FB863, 2AD35B717BA5FF05B5B799314BED62DCD8979AB1250D86AA7D5C485A3D034DB5, 476AD0E5D10CF8B9460EB249AC1E97E748FC2650114EFE9328CE660EDAD42EBA -5EE7E56E3721F2929, 11D1C9F96DDD3BDE4A0A95252B30B9E28F968873066E281E4F16371225AB7084, 96CCB8D2306D2EB7F52EF0DACF9CAF50ABAF74237353A9F8D9AF676D2137B2A0 -11CB7B04AA565D7B7B, 9673601DE024EA7EE2AF162CFF8A9481FC9DAB538118E9EB266EA1A5E213A375, 99AA360CCCC27A9C2D36E5FD52EBC97D031AB38CE79358DA393C73634844DE3E -3562710DFF03187271, 7C7C88BF2CCB3B0676CD2EA5D7A5C5614FB38AC4D3950E1D149C5D747D79E18E, 18B858C04A6EF8E3CD6F6F2E4BAAC7E015689417DBE6F432E572748B436F3230 -A0275329FD09495753, 3BC1E4B9BEBBFC6BCF00CE7FA61B962B03A542B89BD42C4FBC847D2225018B1A, A486DAE21CF48D7D6138B9F0E0ADA881285325A9B0371BDBAEA5CFF1B9E13F57 -1E075F97DF71BDC05F9, A79A6808DEDDFD565DF7792FD1B71E018AA845FB47BA6089408DB575C1C3EB8, 6D2812E1048218820C3474DAFF8678220B41A61C1F3DCE72AEC1C4088159DFAF -5A161EC79E5539411EB, C4F5A400D3B36F5AC5501A7646F7E3492E7E770966AF6D773DF3238A234C296, 84D3E2CB8F611C5886F34DBF2458044D2D00FDC75DBA3E7BC2D8CB5433822C03 -10E425C56DAFFABC35C1, 94B5E1E80B1AF7F9354F7F0B7C2F8A945450F73A71159E8C6858E209EFD593EA, 7F675825C5F16E02D4C019B4259DCBC71B491F5AF71E52AA57FD548498305620 -32AC7150490FF034A143, 43D38897C99077ADF2A60968859FFEAF00B0B72AF665E8677F368CAE4BC13200, 118D1440BB30F40C5B930B4FD9719B30265BD5619481F1ACE4CE9D80013C5C8E -980553F0DB2FD09DE3C9, 9C751D68EE50A4FB0C1367DE9E79410E0B5EF070C90C9B79666C145DE8BDF320, 533CF512BA0B492F814E8DC2E1E41E3738A24027BBB9F5CDA6DC57A2D5709A20 -1C80FFBD2918F71D9AB5B, 8AB43B321DD7672D1592A1AE769DC84A3AE184B3FF541AC649196CEEEBAA438A, 95BCD1B7387B05C811DD7DCE20C8F3440F15B449053515496348446341043EE7 -5582FF377B4AE558D0211, 37D3C5B778EAA8FB1418F2DC74DA822D0B413CF5B4573CD21FDA15059980873, A8CB00868411C44FB2771C7C5925CFF2FA29E41F6D610BA20D8122388025CE55 -10088FDA671E0B00A70633, 3B2EE00313980CD4A37442EB6BF1D5C66B363580556D1F7E0A6A36C2D585A2BE, 67A3DFA708D6472F9ED5ACBFED9613582CEEF3D2516FD3B6DAC5A1A55FA3ACF6 -3019AF8F355A2101F51299, 53C5F3FF58E4B0162DCF76B7BCA3155A900B78E174DF362315C287F4901E3633, 7C5ADE2BE6047947808A24D1352FCE04CFDBD19DEA96BA7622C397C0534B291E -904D0EADA00E6305DF37CB, 4D07941C57FC41E6AF4C3E409498A1398051966214732E4A67E6E24FA7607692, A83E0BCA020B91FD7640BC5D099241435CFCA03E442F73D9948FF264C3DCB3B -1B0E72C08E02B29119DA761, 619906539FF77ED2AE601408F5724DF17C5461AF4DA3C5F1AAD67A4C5AD0136B, A65AD631893E0BE638E9BD9278A67DB62FB4F39FCDA437B4FE809B692411D0C2 -512B5841AA0817B34D8F623, A0345860C481580B0C7F719267E0857D51FB83BCD26D5E819FA1DE33DF5670FF, 60E2186BFBD1469BF76AAF34D7B92EE112658E710F2386C61A55970EEBFD13B7 -F38208C4FE184719E8AE269, 19E61D2535DA103BDC07864566CF631B904223B7468FDE4AD3A983694A5243A, 915C0B22C0839D1E3924E4FBC666A9239747D993A40FD0AF30277F6DAF7CBBBA -2DA861A4EFA48D54DBA0A73B, 6ACED3F61BD5B72C5C607890B97D91EA75EDB23AC0AF7F2436DF7F9CD0656F5D, 1C5B60ADE28935DA8D96CA1D7063D6DAA8F842F6D3D30192D8B4C843C7054F38 -88F924EECEEDA7FE92E1F5B1, 60ED14E07F9EB341C8A7ECDC1A2EFB306E7F33A4FD5A2B3C2C534E74BFE7FC2, 1C3B9646E2E838DD0D81D1137EDBE316C9B85E246433F334BA77F0FA22B7A5C9 -19AEB6ECC6CC8F7FBB8A5E113, A74C22019E9842573E25C1EFB95FEF0880CBA6F57346E537B512455E9BF29125, 3AC12203CB1ED1109EB56D93A1A89112AC91230CCD3B2CEB4010E573150FB3EB -4D0C24C65465AE7F329F1A339, 7A8E6B7A826AC0F0E2212166F33C82112BEEB5BC37CA4854445C6203B7E71EC, 9761D71751FC630482E943DABD737704CBB2206C8E1A03333AA9830B290417CA -E7246E52FD310B7D97DD4E9AB, 3765D0873138758D039F69080F7FC71CC3EE8B078D703BE75C845E3E9915AB7, 1D74B19F0BCA8CA2C348F16E748BF7EE0D4D2E909F1737FB8CE9A9D277655567 -2B56D4AF8F7932278C797EBD01, 77826BAF0067B1B71ECB17C61630064A552DFF94D4C911CE800ECC6FA299B049, A4DED48993999AB61CB261A6CC76F9F5216DE12F6B15C98EEABDCDF71AC184F9 -82047E0EAE6B9676A56C7C3703, 3B92BEC0AE06B15A87420E45B0A955B00E38DE6A06FB6DA9C8F4A452A06770D2, 5944AD54F2589EB99E528E3C19FACFF00037971A3610529647EBA6B9CE804BA9 -1860D7A2C0B42C363F04574A509, 4F90DFC4418A901756FB130219C83B1701CEA2C6FC0CECEB1B7E81D009501E96, 733405549ADA6A54F35AC653C41472EB97BB35B2DAEC691AC932B4AD2742A4B1 -492286E8421C84A2BD0D05DEF1B, 4B4B29864DC5543DBEDF9BA7E2607D1F8EF8E051F6C9BCB717139E5271FC8C60, 1CA3EF064CC40A524A04AAECD97025D769D7B8BBCCBC7D2F82D76424DD78ACA4 -DB6794B8C6558DE83727119CD51, 7FEEC485D8A238868722D5E74EA578A5DCB11CBAC383EA40A70BB7F7BD1A5349, 787600DF98CE14742B465459BDDDB19D59ABC78ECCE094274C2C90DC155C5AF1 -29236BE2A5300A9B8A57534D67F3, 2A40D56ADF74634B8D9197619D9B9EE4DA7F86F259075796029FBE02A5D72BCC, 23F07F0D133F9575CF0AB58EBF7EC61AE57661BF2094C7FA9FFB13231F3CC190 -7B6A43A7EF901FD29F05F9E837D9, A476A81518C2C6C69B450A6638F64B64E6816BB0A8B57193462F988724AFE4E1, 3FD025D4A10E8B1F995E26A727BBC4B04A3C0B1BDDD334C92C51AD826546105B -1723ECAF7CEB05F77DD11EDB8A78B, 3ED532B2B4825A64B7DEC7F7ADDF212FB4DCA8C08724F482BF130753F06C3402, 52B9C849AB0F5BE04C956FD76427730D7D687797E34443DF205320EDFC5DCBB2 -456BC60E76C111E679735C929F6A1, A60141B8E954F12782C54D90CE007399A9710188564F0A31404FDE0164732E51, 64ACD4663C5F7416893BBD4BE36D635211063810231D1B5C19A98BBECC360C16 -D043522B644335B36C5A15B7DE3E3, 6AFBC86759853E640FEE7A55BDDFEFB8BFBCF26E8EAF86AC9490B09CB10DFB70, A13A224B92D88FCDF09B8F70E3EC0467611E4271DD14F3162A89983C12BA39D4 -270C9F6822CC9A11A450E41279ABA9, 311C71ED302B72C25C376DB2C4179687B913F34C5274A0D679DA3B4491DAB063, 7E062CC017B36F57FD34C26623B53CC49DA9EDB614C2C600902CB45AF9D77637 -7525DE386865CE34ECF2AC376D02FB, 92E20682271EF0B0A8860CC30BC847EF05D949ED100A68B6634BD1207895FFF8, 8CC177A4FF4C8FE8DF4FC1D3E1858F89E9B1ECBF135DC635CE283092F1F4430B -15F719AA939316A9EC6D804A64708F1, 67962E8568E5457FE1BDFB77C1843EBA9BDC359683A7B1C319EFE7E5D58CD19B, 644B7A94C9D8FC7DE894297F5F2BCA820FA2DE24AB49E5FE481DAB0C57AAA7A4 -41E54CFFBAB943FDC54880DF2D51AD3, 9DBA68F236511DC208F3EE620979594AA128BF7DCF23DF894CA1E380142EEE2, 3CBCB4595719813FAEFC408B56FB40ABCFFA35EB0396BD64E39493BF9389DDD9 -C5AFE6FF302BCBF94FD9829D87F5079, 6D296B246931205593BB787CC521C835F254DCFF5A855245951F8DB3D20EA76, 2DC3477D44F9D120A10C91FA22D77E76BBE2AB28F2F4FCF7628550BB23512 -2510FB4FD908363EBEF8C87D897DF16B, 388C7CBDE0CE407221EEEC171E120A8B09B7F750ED0D913ED07C4D70B4E5EC04, 19C0DF63F83B3AECDF6FA3985DE8922647D8461682FA38D34A2845AA3B683E3C -6F32F1EF8B18A2BC3CEA59789C79D441, 1DF478E2DA819039F73E1B84FD4828D57A9F52FBCC2FABE57A4BF3FA1DB52229, 9181DDC42A6BA50CA101FC89237B9A929836F66B28C5764FC8A042A20C31D137 -14D98D5CEA149E834B6BF0C69D56D7CC3, 38E4B813556D45E160AA808EFBA8CC26FA13386B7AD141208D88D5ED9B2ED34A, 797DBD3D0EDE9027E85AAACA1979031C1B4A1C5F6862102E81D90E25FCB48475 -3E8CA816BE3DDB89E243D253D80487649, 8D41898598C42E58A0BAD2CFF896D8908421EB01FDCBE5B8A3F0C4E4EFFAA863, 9D071080DC3E5595C1494F7A49817682461F2D58E033360BFE453E61CE18B4C9 -BBA5F8443AB9929DA6CB76FB880D962DB, 40C7FDB3FA60B47061FEBDC4B0C3CC050058A501A3FD3DA4ACF9101706ED0807, 8C608E58A9D3A3F013D402062FCF3834F0DB987E76B44C819705AF8D82D907B1 -232F1E8CCB02CB7D8F46264F29828C2891, 9A7C880E201B375CCF84F93541A17DEAB43E25B89E04C4636D0FDB29C1C21C28, 8E6118AC9E4801C55DB75A0801A4A36034676B98B6DC37CAA9AF13486CB769 -698D5BA661086278ADD272ED7C87A479B3, 1F99BCEC7591A4332A45D60A1BC325F90CADC142C4BC502A25178AAE64A637EE, 591D9EE98FB28B962D1E21D2632DB9972F1BA759F46497102A4AC969C24A2722 -13CA812F32319276A097758C87596ED6D19, 4ED83815A46CDA9749EB12D7AD11E892724B256E26FC5A4E846CC9FCEF86E89D, 93E1864213AE1B0D51ACBFDC99A0C468995462A55F113E8DDDBEE3E7ADBB6A0A -3B5F838D9694B763E1C660A5960C4C8474B, 561F4C807BA702F277192EA869150A547C4396B5EF0D61079F73CA8A808D2993, 72F3C844B961AE3BD63A9405E4024260075C35E23718DC9112261A4274960AD -B21E8AA8C3BE262BA55321F0C224E58D5E1, 977D3B092B4CFA262C519DE428C06FEEE0080942BA4A96C215EABD7CBBA48F26, 962D805C9DAD6E23EF1D87D4094C4F39C77C74E2C8B9A55D5C4AFC141AA659D9 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 632A1EF520D43A91678B2213D3C0A404B5952D53C9B109B372A272E085026749, 880EA671EBD97E69364A3B7D417A2F69D1ED4276A1E039884E2AD82E2EF082A3 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 8EE9FDF74F19E0EDFC714C7A41FC445CAE0B05C93EA244911B62BBDB5EC9FA26, 561E67BC511946B2EED4E810F3712728760884FF5FF948AE55E55A4A98BF7318 -12C9389FCCA50E069A6FC4946479E435E8EBB, A2508A77B3E600D3DFE75C1FBC0E89136D4E1C2C51C8B4A909A3BFEC8D6444D4, 2F65F72C2520986CEBD5C0A74510A4F729544DA7B85BADC34737954C0F5D2180 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 1780AC7A120E68A3B38E97BDBEA74FD9BC949A13DB711BAAC42D2A91E02AF091, 38B58E8FDAEC384816A2A4452598D61638AABAB712BA218AADDFE87F1269A3F4 -A912FD9E31CD7E3B6DEDE937884905E530493, 652B3973152C1251F1B9A0B3B12B4FC0C3EE2E54B23CD8E56635A0890B04008B, 7194DBC471077A2E493015F0BFCD629B0313A19C618D28020A7E3FCA3067DB88 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 2FEAD9B0579EFCEBAC67E49403DB3703493EB47AC2202BA6ABE36D3CDC598CBF, 1E10714DABD8E92462D218E6C24796EE3DA858F452206D09F366DC4DBD3B58E4 -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 2CD09A3C3BC318DDADE03DBC3090AFC3C970E9DAA33E67856B9AF78017E3949B, 4D01282B165A98F4837C823F9170AB46035083ABEA5223D54DDE61B45B20752B -11D500BFAF40AC5044981798DB5FB39F2C17B81, 2B07FC5C39D98CBB8F5547668CD0B21E8352DBD79FDEF90350CDCE99ACA6F29E, 30E6D03E2A31D5D4E33D1892CDDD9FD13E39D4878BB52FD9EB1408B471D036A2 -357F023F0DC204F0CDC846CA921F1ADD8447283, 2B34488A7A0C042DD3611E2121039FC2FD25151F40FD3E02A62F2BC23EDB3A2, 8CCAD4D7B6C97AFA23A29E763159B7B12AD729E15EBBF00BF3C782F489D60F82 -A07D06BD29460ED26958D45FB65D50988CD5789, A80BB060927E53920FEF1DB85D5EBBA985C9DDA2242947AA795F010BB2FE7509, 2907D6E16427726D00819866E37E6DF723CAF1A36889E4667783E388D9059BD0 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 9DE675D3294F4D83F5904B04F523C0E7B47CFB099165ABA60ABB2B02D87EEEF9, 72051C640A39427AEA8B4F585986BFEA665562D7385C111365268B8104B102B5 -5A4653CA673768565B41F775D6947D55CF3813D1, 81995CD04648B3859B9BC840BA604ED9543B3750DE0532F4A105B542FA75B122, A465FBD39EDEE63CC11DF2C4EB1751273642492BA3773C9B266265D67DCC9F30 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, A8E60E852F4CCB80CE381A3A0F9F1123E49BABEEBF0211A92CA1B603263C4E7C, 7C8AF254325B8065B2709C5B9463F093AE5556E9D6F1B385B83B610C7981104D -32C78F21DA0F2AB093551B3248B38680448F8B259, 979A5FB11D3C1929283255E433B69CF982FB701A4F3C61A2592FAF9E3DD9F1E8, 53E4E6CF4B74D6A02EE86C897BE4E65A1189A97C2EA1CB81192AF6DB8C052C4 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 29151A44724058F0635CB8960A0780589222DE4C8F0050C667C9DE248D1459B4, 39C4041BE252B4E512B37FB7E2F63F6D56060A47E290420DB1598DE93EC2BFD6 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 7B5DC94F2D7BF8780A335E499BBE998934A6C28C86656CA55183EB5387390847, 3178FC05E07A7A83638CA46B1F1E80BAD3AAAE1A5D5422ED5885D4BD00390E07 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, 1C4CB8A7222CD114CF41D54EBB279306C95658493308C550F4C44CA88BB0ADEB, 969302E43DE607816F6974A64E5C01E25B66A09ECE2645CADD58B18CC120901C -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 690D6B45E1E3CD145268EB0E5CD53C7F98AAA00BBD4A9600CD00273F96F93767, 6F4BC2C911E21AD1B695E14D547AE14883019D83BCA45681026182A6B58BDFEC -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 46B2600904FAA549F9002BC88A112D4D400968256ED9D985D448E7C0C550FE9A, D3383FFB118E8DA689D8C190FA6DDB0C3FF77B68BF10E88DB78D0BF03FF2E75 -909A469765F53090D38D5A7231073A03433CC33DF71, 20856D35B2C2211FB64FDE60560DFB205BF5C333E575F87100334E187CC3EE3B, 1730CFD18A8A8532CF55D472B095CDF1C815EC4BAFF0DFCEE8DE30A925ABBC72 -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 40AE31AD53187AA5F5F4E7C4D77C3F611861781BD795F5A75F8FC419CADE0489, 3F4F46E8B73CA929B15AA9FFE240FFDD957AE55BFB912B6BF8B30C9200BB1CC4 -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 2A67E7859BF0D18C6D7B572497EF1C821998AECF7A5763EBFD0C92A48A4CA6B, 56775A180A804E54F37067B6A71E6A08CAC37F39962B582B5339C45C01F35A39 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 396488750B7DE6D51FC83515FF0120EA402F67BABE57DD0DB592A2F5CB1C3B97, 3466579ED0C3B0FB20C23382561DD5A87D22086A2DC717AC1F331B5668A63A47 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 38D41DB2521064318EB320F57B3A1142684B0A2E9C169397E9512B694C1A12C6, 47972A6443CCC72DFB8290CC58BDD4201535A118D5A56A420944A498EBEFFB4E -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 978AFA4428C10C00C69B987E609C046FFB2880C7171FF4CE724E24F6A5FF9A34, 8857FF196E71BD6CC00BEACEF7FB494DD53644541EB7596DEBA5CB7B1B560898 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 40C3CC2FBFA68D65C4E51DEE32D53E0E9ADA621BB413303742F9904467CACBFD, 364250F41236FC148E3973B566B0BB251ECAAAF7E2B5ECD4728C91A44F0969FB -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 4FB29CCBC95BBB5BFAE86ACDAC262B0A2517239177D35B4DED2F97A27E71510B, 723D0C82E3BCAEEC3712BA9256BA0DB4610A7736BAABC7672CE89CFAE9C1141D -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 381AEA50DFF11BE430B693F233A906E716BB01231BE5E9FBF4B47E3668F6EFC4, 4935C7D8EE8F498CB7A7A4FDD85DAACEF924946A126226052330034806B4CD05 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 3545D4D665BDDB16E302A98A51FB292C3E82FC7EBA30F850F10F9B35474D8AFC, 75D4B610CE56A41C3A258DD76F2F49B43C8249C50393FBCADC0C54563E0E409B -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 75D2290DB5DA2135148BD0E5B1B32187FD05011FC4E052B74C97BA7FD1C49E01, 4E21FC14CA97B7026D3D2ED0A53205FBF9601C70D7BC070331E0315D3567FD41 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 4B2497BF16DF532DD5C12B945B4668182C061955D26E3B7419F238BBD9C6201E, 1B7749A932DECF00C61D48DB054CCD856CB197BA88D991716765C9EAD37BB140 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 4A6153AF9D04910C0BAEF095AF30EBF30D838859981ADCCBD4B133A4BB41F14D, 343542674AFAB564F7361659901447B9F491CEB5E20B3A63BB27F8398F77003A -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 1314907DA9304BE95CB00AB6DC5BB92B20CC6A39A1BBE99D1C26B11411A36887, 7546D34FED8CAA3CA973EA694E46F1E5B7BCB4839BD2A8CCED911113060BC4F -29396F76B67B7C403D73A1059B80139336878E44938606769, 297AC8DA9F7DA20B2A4649730DA171A106870EE8B75D3030ADDBBF00F61A018B, 8400C89AAC8915D2146BE2884DF4196DF7907D7DEAA2A0EA3577A9267CAA58D9 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, 4C73C6E6306F959835F21C290935948C9D30EE35027F142E86E5AA18A9F8C5E3, 523B57F45871335046F3C518BF46A9F3212DA0372BC7E4100856DECDC5921DB4 -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 93503DE4811A45567D0DD41B3951AEB37A99EABFF644C887399AA7E7427A2489, 9AA12E48FABB9557FA526D68D1E0F36772C55BDDCD6E072BD4164D8EFEAEE509 -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 30964570C3BD6DA163B906EE24FD745801911F87D469EA552562ADE3060F6562, 9CC6EC55769044623ECA41E538A60217813CE2BAAEC8840205CAE1ED767682AE -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, A511E1069D2E310457BFCB46F1503F12FB03E806DFE78F6A8C72A3F5F52EEE12, 4070DEFAD7E889FC8813FDFBC2E53FE288C25532D7DF6DC0F9076CF191A149B8 -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 8EEB1CCE1DF70E59800E7160F8E3C834AA6AEF837883F2CD5FC62AEB7D7F41F3, 32C83F4E6F63DB67C23B188E2BA17EEF84AFBC827C1D73A28FAE413757734581 -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, D90EC62BEF1F425F2793C848F57FE89AAA18DC569BCC6A253C8F8502C467B3C, 33CC5089DCC46B1EA3D52A03A831D88E73CE4BFD3473273B67FBF069DB384B78 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 3B6B49D6F39BD2C3BA5C6183A15423DB47DEF159B7B18DF311F42E6A9CDE174C, 5BA1A4F3B33CD6A319DB0795B7CEC2EB40A1A5951F89F245B179547CD460E84C -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, A2ECB018EEEBE4F4C08EE4AC51A32CCBFF76CAAE069DF896B73A16EB648FE4D8, 5278D9A97E10B6009EA3B0A5999A0A7643C92B79BC7F04B60D6842D0989844E2 -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 905ABEB1C822D67693DD3B07D648789D4EA5E65056D7DF938282C5B9B0CA8C3E, 7CEE145AD575A1A599560A10A7B80F2CAB4D633EAA628CDB73BE7E0E1792C598 -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, 943C86F13111B5E7562686FC1752A053A4435A10315F0852AE2F08369862145, 1A792101423561BD048D671F20FAA3AF58FFD4169BB65A66EB8246B243310DBB -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 61B27A06767D0986063F4B58CA8BFE64F0101738E3AF013E745FE4C0FF0F090B, 4367505B7E289703E8628FDE41D3BCAECC74930627234F5E2CC5E0E766323579 -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 85DB0D79003EAB2FE2A444268227FC3BF1C1B777B48D6107EEB613E266AB3C3C, 249C39D08C9B82FDD1BBF8130726F376A55FB0A1D89E159019E687543E159AF2 -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 2FCB3F205F13635A6884FD08A92F36488E74667515F157D0175E99F17F697A8E, 2188A76D3665EAF0B1D72A74D5D5048A7C42D85A0B4DDE60B40725C489ADB323 -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 7D6F561A154EE8F93698D788A4834659A0E029CAB9E15C1312EB7FB81B1B547F, 1CC0B0D8EE304A4D9FA87A967A3DC45F8EE6EA535E0E5A0F4F13D26E451923C5 -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 1A76A267B6816ACB650F2016D5925CD4C48E40D26E17B985524DD33C3649706C, 20FF73ACE1B76202C018263176A7A7537070D24919717567063723E75A63BEBC -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 2228E1608A099A656494C23592164CE662A49D437094CE95D6DDF2697DE06F52, 6A4DED7BC0FD8DA85E1469BF63C4AE75CB7BFCBD5E90CCDE86ECF4CD7B577866 -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 1A9E488CFF47E9651FFC2C4A3CB89DC4A58D214A4045EE842BCD9D7E3E2A24DC, 8E334B35F7AB26E5A297D66ED124AAF0CE3646A35D8928A91A8EB5A9857957E2 -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, 7D7C144159D2B59E712A06AF658C22CA16265C216E72B5A3A5D5291B4CAC8AF1, 44185D2A1ADDB8A46CE43B6534EB5C95FD36D214676D059B0D42B57724EBA6BA -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 3AC16188F3CB08B4248BD0388DFA9AB1C15D04AE280B4A0C8FE3F7C5E4839445, 10146A79A7A02C79CC0DBEC1F4C60057DF8682F1E19C18EB2C843876EA030BCC -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, 2FFD0BA4565459455980185C6573D46F47DBA5FE3B157541F2FC774ADDEFB21A, 26F4C56EE9BC46235AB59A3592FDE0493E06E5E08CAF6BB8D0BD1F1B83AE45BF -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, 1232D974CA0484CC3CF37595F9E81FC02BBF2C64D1DC3318920E4C5A2183AD43, 6B327DCC76E57E11E24DDBA3B33B06BD95542C38FF04D2B6928C844D0E68318 -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, 9CB6CD53F6F27E8D4D8BA37F83C891CBF78A77956E473D6DCCA1DE84074267EA, 849CE6FEAD477DF5ED5B915087A81E0EF572752B2D029134B20E5CDAD74D4A10 -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, 7F813484C5C9853FF8A86BF636D32844923C212FE0CD83E2D63D72179216FFA3, 7CECA0CC46160D8FD75991741D03CF08D9084673F58D19DBC9A8E6538CFEC087 -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, 96319E0CAF019EDED8B0E2CE298899F8E9B79BB74E8C012280099D9CB6DEA5A1, 46BA9A1F6CDD21A9B10E1818027EA036F3A997D93A85BF7D9A1E4910186B9D84 -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, 3B4655AAAD3B9A2F2865BA02F92E88960B929E0A7CA602EA55BFC80263BD6175, 655D657720F306138838A03C913B7BC563E42CD602572692E1568ADEE6F8389E -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, 8DFF7F9B4558D12C046994FB1D3CB17167F2B312E523159858B0F8153ED6EC87, 5D01D42F2AB8CDAC51AB36CC1AFC599F4181D9F371C22925C3A72D251B9B24D8 -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, ACB3680FC9448FDD68FE375F54982F1E875D76B9DB20E6E122009DEB0AC6A06, 9FFEFEE62F4A982DC9C1CB26996EAE2C74014BD2059F51C97C3419B94F0CC14D -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, 90CAF678E3D591D82B519B77514BB48C03CFFF169538F45E94D506993CFC287, 248E6467F1091B3BA88E808802EA9755F87E280041AE867A9ADEA9943DE77524 -A0D2E82CA5E358392DE9951D10B533E405FF396E226444B3B8F22B54A64B, 775989E196A10B00787D1A1F7BAC48F4EAD4CDF1A04F9DA4BF87813B2EBB30DA, 5C67AE12D0506D31AFB6BA3169BD269AE148C1C8325F65D1AAEF66214BBBEFEB -1E278B885F1AA08AB89BCBF57321F9BAC11FDAC4A672CCE1B2AD681FDF2E1, 5AD156A52A8862380D89EBF7394AE292D34EFB55220798BD4969B81C07998825, A537163E74BA882236C8A746B2A569EAE13434745100890E7A2A1155FE3D7B17 -5A76A2991D4FE1A029D363E05965ED30435F904DF35866A51808385F9D8A3, 8F79CC65A0BEE50CECBD75BAEB72A6AE03ED7158E70A70FDCFCBB3FC68895368, 7D9DA2A143EF2B52387E9ED513E39CFE0315ECFB8F1E6F42F54B9ABFE64C73B6 -10F63E7CB57EFA4E07D7A2BA10C31C790CA1EB0E9DA0933EF4818A91ED89E9, 99ABD110264813D40C1A3C99ABE073F2E8D7F431E8B1A7F28EACB243E8CC2BEA, 2303E176A9C7DE590F6DAE3E18013295B50DB326C5326E60063C08DB3C7ECD53 -32E2BB76207CEEEA1786E82E3249556B25E5C12BD8E1B9BCDD849FB5C89DBB, 181B716CCBED785F1E1280982A99F9A08371DB8BB3E19198AD8313BEDDF7D3BA, 2C7B90E22D5BCDFC94DEAC36F9C19C8B64E2819855E9E3BB794223BCF557B96 -98A832626176CCBE4694B88A96DC004171B143838AA52D36988DDF2159D931, 8AB13505177D0F43034B33CC95D3A262580C09A5AD42DAC2885BAD1355FA2AF6, 8168CEB03F37C7805241E8C72885B945F2AC7CF7F4FCF0CF6CCA384BB9AFA0B4 -1C9F897272464663AD3BE299FC49400C45513CA8A9FEF87A3C9A99D640D8B93, 87CE90FC2B5657AFDDB17E8CB93A7150E035B7FD95113A2D2150177A7BD6FDE0, 910F96A747848DA686622486E6A215C07AC2AAD83C5FC6E40B4E8DA09F31E599 -55DE9C5756D2D32B07B3A7CDF4DBC024CFF3B5F9FDFCE96EB5CFCD82C28A2B9, 4AE7614BA8AF4D7A19D8DEDB467918A9330B812A79AD35DE561C667617B81257, 3A3AC95E036BABE88AEE967E4F19CDC32F83B11F58D14F4996A99EF3F484D27F -1019BD50604787981171AF769DE93406E6FDB21EDF9F6BC4C216F6888479E82B, 56490E292B74D6FF6A89D305F4A2EDB352914E649831461E9C6E8DAC1B68F3B, 1418CE5A9FE58733FC72126B6C1F07EC920C9E56BE42165CFAC36DE1BD7E5A83 -304D37F120D696C834550E63D9BB9C14B4F9165C9EDE434E4644E3998D6DB881, 7365208FE3A0F5CC6A072022A97DA9F9C29617AD4046456E1E3DC6A354820464, 2F20327313AB0E945219D08EE4995376475A09A0A08BE7C7F8ECC0E0D7F98B2 -90E7A7D36283C4589CFF2B2B8D32D43E1EEB4315DC9AC9EAD2CEAACCA8492983, 238D9FC6E4D184E638EA17649EBD9521EE0579C9EA0C854FFCA688C735FE1AF1, 3E6253FFFADCE72EB82FF8A0716BAC95D2B282F58DD7BC9A60217B646EA93A9E -1.3.36.3.3.2.8.1.1.9 -1, 43BD7E9AFB53D8B85289BCC48EE5BFE6F20137D10A087EB6E7871E2A10A599C710AF8D0D39E20611, 14FDD05545EC1CC8AB4093247F77275E0743FFED117182EAA9C77877AAAC6AC7D35245D1692E8EE1 -3, C1E31FD7F03708CE169CFD15BE47890EDB83ACDEF8AEF8BA0957FC7AC717C6EFBCE18F0BCF5E73C9, CDB9AECE49778B79F7A6EF2FFA840297F67E4D269AD8A58E8A5F27CE8C5ADA7D9303A9404C589400 -9, 21F2DBCD6F0F8F4B0FA80CFAC0F1FF94948DE345327943248EA4038101031265CF2A3B66B56095FA, BADEB1A7B8D5BA156912476AF1BE2A4550D1F85B8533FA227A4F4A80C295990AD94D5DFA8274D0EB -1B, 50EBF99BB728C6027E57CD54CC609A5A12A11622F13AECBE9EAA82BEBAF5D25F366EF832D2E6188E, 59644D9FAF4E96D3647A639BE69F0D375CAD6ABA319FBE5BA3A390051F1AEA8DE025F8AEE02F136A -51, 8A1CCBE4C755CDD05438C1B140B92848C6CB008F2F0071DD05735133100EFFE7C8323A12AD0310AD, 63997079FE64B938BC817B82F46C64B0D3DF56DE260D08378571B88FAC3B548499950A02493531A1 -F3, B1AE71B89200FB618E6A6C430C1B0E35702FECD21A65687719434BA868F5034C0AEF1580746D9256, A62418CC00847332F8C592C5BD96100640B33E806156699690EE9104A0FD6C2C235BBC414A89DC4C -2D9, A89A26F6E953A4ED7B8A78768B7532BE04302F0F3909E483F7519DD05097FFDD1A4384769F730154, 8F2CA0FADA584553851BDCF7574C0DF69229446A54A6E7035914022C1C279ED66324C0FE8DB11E1 -88B, BAF41C8DF59A15B8CEC17B7EA1A34B4A887826689C2FC9E38EF323C546BE22C41612133D1DE63D9A, 57E41E1AEC8AF17DF756756159C8E9ABC70E22844F636BF05B74B5CE2A15CED907FE4B5BCBD64624 -19A1, A21E77F5C7D227638C22C2458E61336945835A9321821031154581680284E2B0B408FEC3817FB78D, 2E80944599DE90F4B9AE7B0BD2085FAD08B005F776618D3669A3DD6E3E96E6308D3D789443A029A8 -4CE3, BD4C08504086F3EBEE697A14F76E21E2476A3F469F72BA40DE0A4402C11437E4B4E1133008ADFBD8, 74EF8E5C71739492AA30846637BAF03FF6CF3FA6E116AC10168C75312F9540E8F36B7579AF6A33DA -E6A9, 7E2BF9AB72E13E69198CC4D01DA1CB892778E19691DB464FDF7102019BD8F0D9534E31948930202E, 15EEC7A5DEBC135820081D56F3D8479C81FC291BCDCF72077CBFCA53051046D220F7FA60C7E6BE87 -2B3FB, 626554D838393968124793412A4CABC134A067077267AFFAA3709F9661C17239A8C2009614C2B80E, 88A7E3052D611EC95DCDC6DE9309D09E80886C920CBC52226CDE9157167218529F04116EE0E281CE -81BF1, A34C9EC4A74E9977F47E1D652DCC156CF855745EECF81E4863513C2D5F36AE82586379252847B6F2, 49509FABBC4F0187A28FF1B02E64F3193E00F55209E2D9B7981088169B92DA6DF2D7FB21747F99F4 -1853D3, 977F98AF55D13C667EAF8FB78584AF5B5F0CCCC47376FD1D0AF7ABA2F6021679F3FF2E0C5F6A0763, D212AF44D76A1228B3798013685058814F582F14EC66DFA8280BED2A30B7AEA33542A1885DBE6257 -48FB79, A9451FE0D8039D044A891EF32DC5F6DD994CA2FDA0F9026D14477B1CFE12D8F481003CCB48B4E177, 30F94E6FDC06094344C82D1A44AF8EDD36E0E81A6CB3CC1402084B2728B4CA8D965BEC8A7BDA1223 -DAF26B, 8377BEED100360698B93EF0ABBADABDBAFFB90FD3D3DDE7F564315300642BCB2431468236C31B12E, 99DF7574C04D52A611055877A458960660F5EB7287E89352C2B2584D00F8D57D8D0A0553FA1F2E36 -290D741, A3D0DE0423DAA174FE89DD213C7459B031B7886352201F5A547308CC91DF21955BE072E7434D9F5, C53F61ADC465039FAC108A8DA7AF7D1EC4B3FFC8B4DAA00907969A4A1D07E5EE3110001E41535B15 -7B285C3, BD192AE3385EFF5E5ACDBF96375ED138B370E77D22D5C087998460B3FC94FC820886935C728D42B0, 7B25BF74535A6D2136CBB453675AC31E1979ADE3068519289FE7D2A235D937822D29814C14440E3D -17179149, 662067B6F43A68438A31AC8E357057251846575CD9D928F6951B2AD09F5BDED2F038CD65467CC14C, 113E39AAA9EE8C4499E71C5032F31A7E184BEA1BE097E179925A0304D4E97A24BCE48D7F703C0AD6 -4546B3DB, 968F4CD87B729570C936CE442C4F0568BA88BC8D7D13197D815881A9CE0AECCA5638CA5C273C37C1, 510F4976C06652409C9191F54303B128A586ED0130086A1CC84D65C39D54047B8E7BB96A8A64535F -CFD41B91, 24A9453C7F84F8E86B41B94533CE3B6892E53034BFA9F5123CE67262047C29B028D5E66C8CE9EF9D, 60572DAD02842C88741521BDA43ECE727E483F8FCFF6E4DF2BF91B482CADC72C82D768A3BC058C71 -26F7C52B3, B4EA89BC41C6905CAFA83E5D6600F03A37DC16BBA26FE1E3F759BDA4BBBCE6EB94B1B031557ED7F5, 671040F657DFA61E2F0B2C56F1C9FF6EA0BE4B45899486DA62E32564D9FC960250AB854E66D86317 -74E74F819, 235980541B0B92278274DB66F2BF2BD07478E0FB30EA9A9209CCD3122917ADB5B29947BB93F92BD6, 9D1B11E4EFD9AB0679FEFA27360A8A83F1CBA2A9D9E8964189426E02170B681D5B5961A4CE5D8DB -15EB5EE84B, 32B753A7AB6CD781431CC4F607E7BFD03D260345FE0442CF6B115226C28F6C208C0FC5652CE260F, 59346A52A6ED2DFC7F3314A6D36D970DE8FAEF222E5C53555DA3A3F4EF40CC2EF139085D69E4ED7F -41C21CB8E1, 6B35522EEFEC2AC74D098CC576502DCED4AE807820AE97842E257612F10512BF5B6C9DCE64A46F9C, CFC1BA026AE14D9282685680F522E67288AE5AD1637862C43F35B90ABE218B5BFFD6B0E3D84D8A79 -C546562AA3, B9EE39E25367C20A96B4E0B457D5BCBEB65980E56733408E14ED2D2B73337E1FD0C6E734CD4C79F5, 3A7C3BE90D5046A6C6F57B86083E851ABEBAC15BF216372F0C42DFDC4ADFE9F67C5A046E257BFE2 -24FD3027FE9, BD761091866FFB08BA454F4DEE43064C76D97B16D2C77EFB0EA40D9E416E12F2E0A244FC7A52829C, C55CAD79FA0A4F8F724220F6DC30B83015E19F409F43B8BF660CF3E3956E51A3201A3CE3C5FFCF46 -6EF79077FBB, E18029C9061F27CF542AA1F6981E7955F443C00DB9BCA300F4AEBCA98C70E4C8A41F99C6B6069C, 4BF810A959DE7E3378781A0998EA89FB0B9493BA81D55E711FA5A711342D76AFFC71D25A223E3292 -14CE6B167F31, 9BB5297CBF270BC158A044B9AECC4903D799F7303FC6B389AB5D13A38DB8597B404338CFBC462C9B, 56F9AB6B7DEB931D5D25DD0FC669BCBE516159853B66E16CC940A05B19B1CFC6208AB3C1EDB65229 -3E6B41437D93, 3439E863575170E41D2876753299282B530B7FA371F89D189840D393F72999971446CB906FFCAA6F, 6CF3B627A997D58F761BEAA912EF46B20F3EA3B624D9F1185AB96C5C96A47DFA51E64DC4F9B3AB6B -BB41C3CA78B9, 8D1D169E53C79A38C54CFF5EF5FE0CB722F9E1D5F47B16590A12959F798A90798D23167756204945, 351EC0ADEFDFA6E3B0BF587CF47135AF1061EA65615D75E8C95E7D6C786A1EE6F526CBADE46F581A -231C54B5F6A2B, B2A48473A4CEB04BE9C30CD26C106E2ADBDE47E50B9C0AD055A4388F0784053CB8E287112C27E231, ABF69A77CDA3327B0DE4FAEB8C592EBC1E8B67298AF9EA3036A96F8A92FF2692EBA0B4872B787F92 -6954FE21E3E81, 362C8AF76F15C3A343BCB654C351B9F7A91990ADFAA35F497C70224F200FAF4C66C26570DB3E96AE, 8C9E1F8DAE3D8D606041576771AA0E257625D46BA80A431690A158075D98D0187BAE10428E3127C -13BFEFA65ABB83, 10B688E0496E71E9D06765DE16418730984EC0580CB01C93E0B5F30C0A09F7C215ACC94B9AC16249, 1225F59A84F085016030F1732E8689CA628D2DAC9B631BC67B772BCD970218E2727F868411CFFD32 -3B3FCEF3103289, A72F7179FF4039617F7324790B28ED2517F99BFD3AAAFAC1C425DE7AB303D327BD44AB05669AE8AA, 95BCD34C63E7D7550AE854BD9C753961B04B5A66FE453DB37D129D6AFF813022019D1F6239A862EB -B1BF6CD930979B, CBE4419C7435C4F22E95E0D3C13243BDFE964F1BDFA1217148A29DA7422E4F2BE70BBA20DD7D75BB, 321A73A1DEEC6807C1948D3915056016558D6158DC99C9C0B729EF2221B93605CCB53B0B073E9A12 -2153E468B91C6D1, 23FE127B0A38FD2DBE2E5DF3E24966A0CB1A7FAC81D61F627E6BD90B32A13F2BF6A441FDE9F8A7A3, 715BE179A5FE8D314638F60EB3963C9E2EE461E22D1944A52D3890B182B7C12B6AC0C24CDD0F9C6B -63FBAD3A2B55473, A7A69DC7173607D5263804701E58E178C824CD4A1979472BB98619EF32C1886EEA172B5EA53386CA, A4AD61DD484827D84F7460734C02F5A6352DAE2382B098C4EE86BB8E606F25CB486119DF7312A4D5 -12BF307AE81FFD59, B76DDD46F84B7653167C12C51DD485C4380DDF342D455175429314B660DE290497DD225562EDDBC9, B24C61E18A443D8D1024916622CAAF8DE38D66082A0C4686749113182125EB33963E68B89BED03E0 -383D9170B85FF80B, 3CA3EF3F8F9B402F9F62787C6C2BA8AE08C1DB25E663DE453CD68AB019D70A0CD63E0727A729E5EE, 27E1802A26E05754752998D6388B2BFDD9CC6757818DB541FD7B1FDEDF5A21C7F084F485E522F7FC -A8B8B452291FE821, 5D3751A6DCF0A61D2816AF8004A35808FA533A9434B871400CF88A319EAFBE31FD0119B9C0836390, 5AB852616F057840343A9405721A5DD18AE769FE7EB48DBCDEDAAEB8BF2E922671B31678059C029E -1FA2A1CF67B5FB863, A9B943CB82F310DACD319FB3E8BF710A94E21CE01B2B6F7AE0AF0F93DDB8A02D020E423D606BD2D6, C09FEA77244C514579312960CF6D56470713A63F080971724E349D9F74073BEE500B251FD0FAD71D -5EE7E56E3721F2929, 5D85C595183AC8484C933D56CC47ED5400EDFD9A6863A371563E6D79298E35FA7E0607DA78D20717, 3BA92AA54C9B0C4FE136DF75E6FD1547FF977C90718CA6D4D256A191BDCAD0368775C48E0FC52C30 -11CB7B04AA565D7B7B, 681F928D70ACB50AA04A62B16AE38D609F067ABEC5504C9DA48F5BF67C86E541BFCDA54F7C7D25CA, 1344DEA91D318A0AB6AFB82C5C9F4366A70B2FE04AC54E97419FDFFDA2AA69E8197AFD94B4C97D0F -3562710DFF03187271, 42265D6C91C65B76295C89D0344716F2B751443707B860A4A0DA71606AFE59013B5DE04A56C81F6, 22E0E8CEBD66C2939663E9E75C28BE37AFC4C04D47E07BE967170E459BC3DBF1AA09D71048CCE106 -A0275329FD09495753, 8064CFC52DF3D398F8B333ECF58800E53D61882A37B1DFA20D11155884A2F437E57ADCD7CB94D4DE, D1D04DD700C14BC3BB6A0569D3F25C27A766400E98250CDE40F3FC97B7BD498038938227A90242B8 -1E075F97DF71BDC05F9, 862787945FFA18FA773189AA285D3039E6EEDACE9986F58417FF6B41E102CBCC68A4C55A59FA6FE6, 845D52CA605B1B7081EEB9784E905F0D568E6BB1F024A6F1DDA18D9AC446EDC1E4DEBCACC62A5DA3 -5A161EC79E5539411EB, 612A322D659284B93FA3EF437768048A27C1B9DEF179DAB6A7BED45377B691A12CCF60534DECFD3B, 49A4BF97CDBDF607E6DD63178F9C9CEAD8E1B66DEB464F8D2BD0DFFA12EB777E188ADA8D0C99BE78 -10E425C56DAFFABC35C1, 254115081230A3F30F6CCB816B0A91A7A759B212A0431A17C5EACA41B71863D66312B8785A1B1D35, 480A01050880D1F251041A15B6BB92D240D04E9D48FE43F650E7F595E7E62D64D71B615F54BD08DA -32AC7150490FF034A143, A5648ADE6EB27EF1E70FA880C5504320FD7C6D9E8CBBF412ED4DC67CA0D682C3C39A14AFC4A6662A, 220828CF8EFE3735290FFAA354D7B69FCDE8597FF789B82359975A3218A36D06375B0B7E3D3C4428 -980553F0DB2FD09DE3C9, 232C6E43FB14D77FBBEDC7C555A22C937559C040A750EC454804197B7C433F53FF72A50C3B79213C, 32A714C3543301E96958A255501309E2F813A7704A07237B20B2EF08F46D7296C1E54677DD4D2475 -1C80FFBD2918F71D9AB5B, 5A031C7B06CE6844F45471E2AF871EE9CC56889A848A5B5797351315BE81B44F7A402D4533B16E47, ABE9D3BED3BF54CEB8C24A4D6FFC7EBFEF4E7987AB25541E9D0EFD7D85851A065F3FB8CEB6632D7 -5582FF377B4AE558D0211, C252301D8AEF69687C9A8672F52AD9097E3CCBDF0DC2ECD56601AFD927722FCF46A61960F0D38EE5, C908BC1F9231C46D5B85745065381E6A1CBC4E9AEEA3DEE4F4AEEF03C1C2E39A539393EC3EF6E358 -10088FDA671E0B00A70633, 5A94058659363B717654250F400482EDCBEB9B1FDDE015C381D11D8C41734F72102FBC571ED0D8BD, 9CCBA4895E63E46CB26B2EA2BF6890AEDC1ABBA5B585F0FB51C30F2EE607F6045CBCE30B12C30EDF -3019AF8F355A2101F51299, A6F2AD9F907DCCA5EC59AD029D4894A5F3ABF04452C248263689C416A4D3D291D347736A33F0D1D7, 1B61402C64F0C3298DC4F61743DAEC2C22EDC0C09854091350FDF8C107AA84DA51E73D966952C9A4 -904D0EADA00E6305DF37CB, 6AEA93AB8015DD547A7680B098CB2B2B3C21C0C70E6EC85474E4A6BC3BC35F50C62BA7A19BD689D8, BD59106360810780AFE0A5020A5C6C590CD49529B5FE3F1118905A007662CF7FD14B87E4D7E5EBD3 -1B0E72C08E02B29119DA761, 44AC2982DF283B2C06D31E9C2411F55EBEA57AE1F084919CC96C1996E7D62313A200384DF0158BCE, 643081D3DABBC8EA28AE3351DF2D6617E6E522AE5465F32D62FDFE6D7BDC4135E5D6808A76B060F3 -512B5841AA0817B34D8F623, 79DB4DD6CC47EA2C45A5C6ACA24E45A34F987F9C8DC4B0A1784A6D1BC2C042902536216C26915E15, 2FA52F10868B1B23BA0BEF089A0A39FCEBEE29E9E2F21B6FE4E18FB1DC11C92F43003EB98BB75A46 -F38208C4FE184719E8AE269, 23F4C0DF5AD37EF8EE15C817AD0C8F99A02888D8E51E2FADA0A09344B2433EF77670A422170BE692, 1E45D8CDC9F54928449B0E9CC04E7E69C62B97EF55760353F1CC03C51D8B77A02D24E2CA354C3C0 -2DA861A4EFA48D54DBA0A73B, 53F0172B2CAEA12ED665BA36D0D0B3E608EAE6756774DABCE5BF3931109642A9758B558A640942F0, 44545216EF80DE0C6C39371FF5A28FB7360315973B13364FBC6B6F6A3FC36A6D7A46688D8A96FF18 -88F924EECEEDA7FE92E1F5B1, 6BEF23D3396CDD26BE06787A43EB0AC0DC14C83F75F7D85D10F02532444085D461263BD6F65CDBAD, 65B944BBF5C39AE20A0D97936FF6A28EB08B0CF423497647AB36AF00099F1B6664F2F724CE574F8 -19AEB6ECC6CC8F7FBB8A5E113, CF8675EEAD8AFC4346470E8C01C6EC24B2DFA67545FE82EAFD53FEBEA600AEDE052CD7D40F0E01A2, 53F86E7B0738D4280477825DFF5CCA682CE1A859F949ED60539CE2B24AE97AF8714E2A6E88AB65B -4D0C24C65465AE7F329F1A339, A5CFE290C95DD1738C26E755DCAFF045870C6140D757A11E39AB2BA12B684BB942DD0B7F0DC75C30, CBCAEC9D222C65765E84C2FC15AED4D1885AE162BA3B9C37189780F039E72287A75037FD3FDB82F3 -E7246E52FD310B7D97DD4E9AB, D18E236B7F2379C9882BA0C809C9DA294F0257986CE51E3A987AF98847672A518B7D46EA227756B5, BAEA906C978CF31FF1BCF88308E58AEE22E10D65CACBAF133F1E604798DB2924C4BA03890E1084F9 -2B56D4AF8F7932278C797EBD01, 4F6565018582B89588C96C4D284ECAA53E2A52593352A0177CAFCB8AD63688D2C72F96E2716A999, AA49812A5ACC65A7D0700E1AE4BCAF550588BBF9235662823682208A918A8006CBA7856ACA38B86D -82047E0EAE6B9676A56C7C3703, 9324C50F4508FC3DC21CD44A00218DF714D97E774D5E16EB83D799038B11177ED917355E9FF96165, 8E6E53CC8CC7A2056AF6D6A708CB5B13ADDF89EDE994CB04C9904FD12FB255A5CBE010C3C9645C65 -1860D7A2C0B42C363F04574A509, 3834BDCB167EC4140003B505BB9BBB6CB1D3D3583B854D51637CBE2DAE07D3CE678699CC5CA9AFA5, 95E84189BB8001D19216CA7ED887FEB9B7C28428F9C4602542B1012FE894C9535D8BD326E78FD059 -492286E8421C84A2BD0D05DEF1B, 8C2C7C18A0C8A164924B01820982F998BD7F9642BE0AE516B00454D79BE73544616CA505FE6B936A, BC912FC5E24D6DC6331F2F1F97BE741CF1323FACA98EAF590C28768FCA0668569193FCD4602BD118 -DB6794B8C6558DE83727119CD51, 22F98866191C851A60CB57EEEEF218DBCEC3174CE1439D3D46DA9CBDF3A93F4DFF11E76DDA495099, A2A119118CE9FE09DF2EBA8850125175CDC2ADAEC1BFEA3CC412809541BD7825C44821772298534F -29236BE2A5300A9B8A57534D67F3, 2D0B3AFB441BAB71A8EE0FBDEC51D2B9D02E30F88BF76ED4519C4BD85EC3F96F65B405E351EF9672, 955639CBE4EB428DA97616CA6C5E1C048B3E3623D55EDB05241662A66A7A153BD9967CB11A977452 -7B6A43A7EF901FD29F05F9E837D9, 6A5091A90EB4BE387E2866B1F23BF9C1B3195430935683E03243A0AA24219558F70FCF20C47E1385, 8B41A52E76D22E266F41620401AC4F8C0117128C95A43390667051D5B6C50C98A642630B08233553 -1723ECAF7CEB05F77DD11EDB8A78B, 65F68A82B86448627F76D8B6B6F767D48B2F5FB1DE6D99997C34274280755BCC0726B3C978991B03, 9A8D75241864CDA05B76CA73AB91E567C921DC894D7A1E9D96905DD0FA6C74F06D9001CAB7336F0 -456BC60E76C111E679735C929F6A1, 981646D7F7DA5AFD91C3C61AA3605DA5F5FD8C0FE84B033FB7450965BD4778ECC524B90F80766B2B, 62978D8E49B686B393A6F609BCE12E6BBFCC444B0585AB85A76E1274DA1C6665719639E19569C813 -D043522B644335B36C5A15B7DE3E3, 932638BC06C5192D5DE89D37479E922601A83C21D877307EE1CF18CD1E924427BEF1B74224FFC046, 600E7C30FEBEF5CB9C04E0483C6390FE51DF0C348DC9F1CC9C18CB165932FD99AB133408B6E53DEE -270C9F6822CC9A11A450E41279ABA9, A3850FB48B32918B22DC5A1BA9DD5C54E5E4291A2CE8B9F9E10B28D28B82B562A51B9D186CB64AD7, 120EEC16CE1BC95CBC58F29C57ED9DB78E01494AB3F537E33D5CE265B933FE643E59C00B43E4D265 -7525DE386865CE34ECF2AC376D02FB, 33F42334CAC4693A0CA8E58D099B280F022A13F6C825A47D209AFF369F5CEA29443BE51C316CB962, 73AB707ED5E4CC43EFAA5CB62917E93690FA968FA92C048817CEEB39EA4D63FEBE3FEBD12B49D43 -15F719AA939316A9EC6D804A64708F1, F559623FCA4C4EC2622676CF910717B0BA9895DC287B4D6D84F5BFB882BBE3253E7387158A783C7, B06F8DFBEECD68EDEE0DFFC94AC882E444FD641E4BC87E8835A119511FC3DE93415D6D51CAF492AF -41E54CFFBAB943FDC54880DF2D51AD3, 558BA76945F9B87D51C8CD44E4A8782F5700CBA9FD6AE1C413A6E3CAE1353CADF53FDF0F87E469C2, 90DACAE3138AE35AFB459075CB6B0E0EAB99956F8534540F0F478B14A2632891B967B3A824E8A404 -C5AFE6FF302BCBF94FD9829D87F5079, A9491BBA88FF1D13BA834C2C05A593972D2928FE93AEBE7184986882BFDF8AE9B0DADB70BA585769, C4F765D10462E0807446B0664BDDD19513DB9675CAE683E8EB561AB9A0A4FF6068B881319E1C5CC7 -2510FB4FD908363EBEF8C87D897DF16B, AD731D324082AFE7762583CA74394636EEA4C5D5CBE0EF371344865C2DB0E7AA60156B0772C53809, CF508B511C3764297D5E4FF4D56D38D263900DEE2203C2B1490397433157F98C6EEB7424FEEFEE8B -6F32F1EF8B18A2BC3CEA59789C79D441, 2B945B0FB4F44B1A83AF32C4F69AE4337A26AE188474AD36E4EEC7D17A1EC57734F752ABA992F09, 2DC764858433DAB6246A11BA4E4024D67EA75653FB82D812909F46BC5BCC4D40A20B7460ECD9380F -14D98D5CEA149E834B6BF0C69D56D7CC3, AB6BB4B473131E29DC1C1F94E85AB4666F3BA0E9E5D4D4ED4FFD88CC7601B408B0FDEEBC7959B0E, B0618048A303C481EC2804FA34CEE01C36173A42F45FB34DC4DCA75362060CC16C5506E40070BC01 -3E8CA816BE3DDB89E243D253D80487649, AA582E0794A3CF1C57415E2D03B23891CDC3C1EAFC8941DEC88E9602A09A6D8CA43A6A028E345A9B, AC8CDC7F7BF2A88F01DB6D772CA68BCDA3622EB4F06485B3F99C535E9E113AEE3D114CC2A8770E26 -BBA5F8443AB9929DA6CB76FB880D962DB, A7D749444022CC6488300EDC8551A0454E843E3CDF8B7D0399E39D5067F744393D7F5E8D58B97B4C, 18B1AB48C5251C1D7F7CC37254C2079E4A06803F91B41FA3AA082013B60D55D11CBD03EE67DF6 -232F1E8CCB02CB7D8F46264F29828C2891, 2B5B9F3C058DA95C892A409CD337B9112BAB25627493AB5E4FE362AAFF1766F697A752D8543206FC, 3CCF5058866AE3C38BDBFCB92481EA08A42648B4B64576F18569CF10414F601C601CAD7C5E3FB9DB -698D5BA661086278ADD272ED7C87A479B3, 8380CFBF673F7904A234A9AB5AA7B657616DD5C34940C431A8A866E1269F37A9AEFAD1D4A026485E, 647946DF8820FD99FA81B9308E51173AB261F972859EE108792AD3A0672CAB58DC676A54A7003011 -13CA812F32319276A097758C87596ED6D19, 88691DC11C800F94F514B4CD2B94FA024F4E3E6858B412C7E7DD4F0739F874BD8B1B34C461D764FD, 4DDAA89FF728E5C1532E5C9F7E091CEB5930111FB55554A76201E49E237AE6F22C463375B20D5DC0 -3B5F838D9694B763E1C660A5960C4C8474B, 7087A20D7FA6F9A4E4F1A96F65097296678BB7E0E403E0DB8C87DB664D8928E8474EE0F3C109FB67, 75597EAC1402E2C937CEE961F67428844EB00B521573D6B9A156FC1B5BC7B534C37CBFEA3AF0FE86 -B21E8AA8C3BE262BA55321F0C224E58D5E1, 99114CB8A3A8A31A7C3AD0A31F1916E0660A23978B61B8FF7045382717B2AB89586F59A4A3339E22, B2838337C477E7A5195B5D77D520E2DA343CF785C191E52616B5A5F4F7D0B843F9FCF9D70E2F9787 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 2001E1BEEA7AD7573E36CBA7961B2010371709882798AD304B4E8E2CE16BE405B37C605E9350B07A, 9D298E78FBCA0705A8AE151FB07406E4DEBE1AB818DBC97FF373BCE9F5AA5BDE12CF830D597C6394 -64312DFEEE1AF5788CFEC3176D34C11F84E9, D165C7E44269070757BCB21CFAD37477C867C10934C5DF565D0C5AC861C5F8E90B9AB5F6E1E8CB09, B02B663D33A5FFD9D4452477F80E6DB3A064729AE13312DBAF07B520F5F3E28A0F8D36F56CE5E768 -12C9389FCCA50E069A6FC4946479E435E8EBB, 29C3C3AC5C2CFDB9D346136FD27D4B0DA10B01F095228545A533DEC007E5886E9CC5040A58858E0B, BE476041793C2C992B83C21F3749E4C2823EA732239ED7F4BD169BA07CF7C1DCF4D61FE2849108AE -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 670E27A1C39F964625231EC2D569313BFC619A7F1C211FCD0525F5F115CAF4B8B4DB37A2326AB9EC, 46F7DC2DA6A4AF85E1B21D1A11A96B4AA0C0209C12BBD0FFB597E36BD4B6476880F118C6B0746CA3 -A912FD9E31CD7E3B6DEDE937884905E530493, 89DEE6380E498EF1AC574B42A977B1BE88455A3457186BE16DE8E8403A0C528ED3BB25D0B9D5F3AB, 7DAF09E8FD37DEF74CEDBAAC48B5A8A0F970EC219F27603B2EDC55A0CE8FBAD34C1C5CF795F95C9F -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 9A4004D26458E448FAD048D941B834923A14AF2702CB050EC721D51B9279D3306D9AC100E4A33DB0, C1A498EB3EC222651DC6913FA6B426C52AF97DC4317A2976B9D0B11EC7D094A3298976DDF19E9A7C -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 8726381447815E27B11A329D0D93539370E226D64120942708B4C5D5728E60AAF89A4BF0A1424DB4, 221DED29C2C787F96A59E874E5E9431E815389AE8ADB0AD4135E862CE4BBCCADE8C9CD609052819A -11D500BFAF40AC5044981798DB5FB39F2C17B81, 76C0678D7006C1E2D568D2DC635800C3E6376049278FF3B201FDB367E7C2231B75E68295C0C458FF, 761C41B3DFDA9349BCE8FEDAB26B91300D71668899BCBE836C7405290D53A531F8411D70DDC47388 -357F023F0DC204F0CDC846CA921F1ADD8447283, 9D445E66E7ADC83819CE2AFF84436CE99E76EE0FE9BA409A946B8789280CD28DF1B57AA7B3057971, AFAA640AAB1E83551274485C30755E54E6AB0623753CB7C075635B110BB812786E9123FA7B36511A -A07D06BD29460ED26958D45FB65D50988CD5789, 377850883E4A1EEB9780EA965A95B4D0E047BABFD945344E850FD3F90329D2195C85648A4BE3FA3F, 6B52EDF31A6693B61B80D80818AF38225679617EA09BD292A1E44F21693BA11A242389EF1DA0043C -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 697E4696A6F52246690BF5525079F6F5DB03BAE5B41B9DC2CBB2A7F624B13B4B83FA20DCB6749594, 6844659B79C5288346248531B1F53A55E027BE00929927964AB6A39F2157FDF19AD957EE56C88DB0 -5A4653CA673768565B41F775D6947D55CF3813D1, F5FED08AAB3FD2BA740DBA3EC614E7F7E9995D25A3F76A26F095A1487784CB1EDA193F2647E4B4E, C49DAB32BF2941309B3D6EC4FE077C7631B32E1FDAF6A2B299EE68D38ABC848EB84955B209EC8944 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 89FE2A15E985552EEC0BD290F5B5822A80A78BCB9CF63AB36DB497F0832C6AF0B56C59544DC8E49A, 313CFBB211A9957537D12EBBEFFFC5C7677D815818E911F2DF917FDE2FA7434FCF7138DCDFF253CF -32C78F21DA0F2AB093551B3248B38680448F8B259, 72DF9E28A86CC9451556EB3ADD8073B51A56839BA0FD68A68477D60D8273E7BA2FEF4296B87BF2DD, B5501C3FEC7A3C8E00780537EB14ED40AAD4A9E977DF6F09575BFEBE2223A54A8C8D464119F46891 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 673D334A2AC1B92EF47647252F3E77968F6A9ABA60A75C994CB778DC3F2005C0E1385EFABC4EBF94, 527A866218B76EE59643BD084FFD114C9DC695B7B62A249C58CF504C781048069C79421FA07BA5E4 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 9E72000D659446BDE898894AFE48623F1AF014B7B96A191B98F374C4B4CBB56A369AFF5C882ED218, BDA4871AC07D92588E05860CC2D9201711D4E28CCD77CAC95ACC3FC8FE7BF5BD923D1A944DDCC547 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, 5566D8D2A63A357ADE1477B2A2E97B2CF3EFFF011977E687400E6677B44F60AEF56A91C444EE3DD6, 64BA592308B96F724B993ED5DC2F5E6C12FF35C1D2355F2E13754F1B57FE0F1D6F0E2BD18790E4F4 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 957A3DDACF5B05A41911B7391D02B1388111DC2A8FB1BE836608E69F7EAC16EC9932CC6BABC15043, 79268D2DFCF19CE6E683AA25900F2C59904E106771CA81A7AE96AB2575FCA89F13780BDA3ED5AC71 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, AF437E7FB17232B08E40CB98350B2EB893DE3FEEDB9892C1D12378DAD18040E6E13BBC3789744E74, 8AF422C300C364763AA1AF94043E415EE6D183468DEE24576B5EB73C7A4EEFEB8ADA695998EE3891 -909A469765F53090D38D5A7231073A03433CC33DF71, 80785A4C3ACDE68030EA52F592272EE95A24E92957C63574A65334DB1C3EAFB21DE43E97F9773FA0, A5C3773E27FC4C767DF6366C3E3D2A3EACF05D093CC2C78F64AF98F04F8DB45D12BD1CC761AAC5EB -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, BE4356B13A03EA4C818BB89D57A47DA405B7C167B8E78433ADF4268CE228910BED18FD8B01A49BBC, 990D8227E8CE1BCFFF4D6EE479370186464E324F9D6991A95343C1B34AE428A5928A17105F4140A9 -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, C3CD467C4223FB1BF8E07DD4B9170D315D94DAC748FA83CBFF3CC34A7D3EC4DE410BE9C3ACBF2CA0, 32509FC95CB1D0AE2D3CE9495869C5618B0D708EC2620FEFB9A22FD2CFE185149AA0AC1529D020F4 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 237CE88391B351F1500AE6E275B1AEA4142CCC14C963B6F953E2411A98979039E5FBB634F63A46E5, B5EFF62F549A200B5179A0575FE5861D3C32C4F90E44C7B52CE7D24A94217304AEA43AE8B51F2141 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 6BE1D4CC9E229DD0E2E5853245335157E10996B82F3ED4B65AA8B934CCDD5F26308CA19096312213, 7DA3AE2F2C334E164B362E63B72C722410E9B004001283D1CB71AF0FFBD1A2FE545287D1C7A8BD96 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 46255AA29F88403F5FD1541EE1AB10AE09D649E32C52281F48ACE7E32FFDA9ED147F4664A2BA1F6F, 4CD5F15BB983225FC0955A8A32255736365F98CEB012E7FA01F641823B2B628252298D57C087424C -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 713594CD8DA20CE33E17EBE55F37D9435E44E93E2C41D337106A37BFD53D23A0C07F1D6DE63E2D60, 263D801FBF71FB0C3A05DA23CC2E36095ADDF8C760790AECB547058ECC6103A75F9FA5B172C31271 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 6B005FE0368A59F477E27C061019B3603BDA59ECF43D4EB213030C7EE075A78E0A9A7C5A0963923D, 3ACD84698F433E27104082218806B7DC8676475ACEAE12667F073739D12A27A821F8217C88422B2D -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 51DDE2493A2840D36DE30140489532BBBF40BFA7EE37C46C5CB407183A2DC6476A1C3B5054002985, 2C7FA815512F6669CE1B2B767A7F5E8E43F9A3DAFB3E26C4D97391C9FBF8B9697196D497BC04F5CD -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 5AFE1764B4857BDFED47F33D264B7FD50F4F80A834C8C540DCCBA3710A0958202E765BE1FAC834F6, 7AB999BED6D20BFCEAC626C09595650101DC516EF04EFFEF10861DCEE1763B3A36E9191C47F60BC0 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 344E718DD78EC9350C1E745D0C71A8EEE9A98F911970A6D4ED03FAB5D92040CBA6F85F45ECA13E35, 67E6BD283D159B57494788DFD3E54467FC7BBA3634D990CB21C212005400A052BB743780FD7D0A45 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 15D4AB9B21D8D55D5F90E000ABFB9C803949F9E33E1E7EF7A54A9DBE3CD80336AAAC5C46ADD0BC65, 3DBEFDFD4EEB975A1DA0C12331DD9DA36133E736E96E98535035A315E00A1E8CE2B5208F6EDC09E2 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, B0CAB0EBD5E6E8EE67C63A88DB912CE4FFDE1777CFFA19BEB706E62486B6D6161B71B007E9743C9D, 4CA684754FCE89C6B567604CA083201821E7D4F12C30539E2E463D77D6F639DC83DE0FAEA03BDEA1 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, C3ACEDDDB0C8E2FB3CFC20A791D485E1428D7B1B713BD53DE9375B6FDEA4B9F5249995CF069DACB6, AABB47972339C64FA1ABB5843643E1FDAE8541BB1C44B61D317E310AB4C6BAE930CEB9C18070DB9D -29396F76B67B7C403D73A1059B80139336878E44938606769, CCC309EC1B2FEBA7EF654C8A7B398761FB6AE7BC7BCA52D239FA9D05C0021096ADBB66FB353F660, B41D0BA24C3FED69B3B5000D3A3BC4F600B4A7DE71A0912ED33FE6D048C67FF306E489E5410BC062 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, C06F6DD32D0507A46A1AC677F967CD333ADCEF640F802337E348F304F22A607EA45904092BC0EBC7, 5F7863E5D874CDD6303644E1BA18D5D894067F9D31AFBE18F63842E501D263660CB87721E059AF46 -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 68F0A316BC71870D92416AC91755DD3AA01A2B54BA8CCAF15A7179266FB2F8FBB97809B5DB7086D3, C54C717AE7F1412E69531DAD7DEB05ADCCB2841A9C42885E3C74BEEBC0044F50A042C80E9069209F -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 5A43B843458DAA8B90805FBE84E04EBBA96F2E2D87A1F02EE5CA8DAF3FEEE564EE881B471C1F37A4, B4EEBCF03E3B2415A688B8B409933BD20AE3BC3E697609723E31FFA59CA2B0AF24857F997C2AD6B5 -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, AADC07438491829B2BA4A36D8E3D5DC1C510D16C049C3B33F33DE6ADFBD52C07691F4ED7AA6E16D4, 836D5365DC43414DC21114C58EAA20492AA7FF8FBAA7D907E77D45B3C4559078243169F08AA5064A -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 27EB0EC434DC665A71FE0F07EACC663397248CE0A4D8421ABAB0856B36C44E75934D3CF94B84856D, 4EE433701EC445BE26D27A80ACD2E6FE8373B3870EF2370CF55F837FD5F482E2FA2375B468AD92FA -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 90FED13B3A41D8628BCE04E1190662919FA8B8D8CF5B539681898AC6952A5E983DE0D23AF92A4EC9, CB225445C7AF1A081318ADF455631B8F5242F61FF9D8A5C6FE60FA79332C31BE5AEC1297E781BBD6 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 3806FA6E5715A7435CCDD2D1B8A6E9DC26AFE1956C6F05BA89464DE3D33D2F82509E493371965308, 4C9A1B4CE41F27782E888F70C36C93E8019AF2CB6F1B66602C8D3AFFDC30DAEC14A8D1468D5A891B -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, 91E4E989E18C4F3EE8E166C5ADCB3F7DE80941A01F718EAD99030CDFC7736EA0DA6A3C34D62099E7, 9135D0CB0BD3C6DAC0B81A50A816201391F236AE4FED4FBAD6B59FBF48F4F07EFE933BCD6416BA5E -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 86B394BE7B70EF9BFAA63D4902035ABBD9820E1F77B2F0D625443CE3D19F06FF7DFFC808C0816A52, 509A34736D78F0930506DCF3486087F320FDB840FE3F00AE261B46A78E93B5DEFF5F477D748EB125 -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, 46F794C4D1C4361BD9509D5F374C969E71ABE6331FDA66E7A711D4BE66F25EF50B03FB688C47E288, 5392096D3F17838970032E369921D6B7E5A5371986487A71ABA5A38582467F8211556669933CDAD6 -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, C457303D730B41187262EDB1F674CCC4A9102A34362A34869CF024F37337CEBB592A3E13E8A64865, AA1A2E81B44D51EE4A895D6C325B0225E6DE684F73F6473855C5C7584D309A843CABBAE0522ABA96 -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 3E48294D4CD0AF7A6083C9C88E50B54DEF4627BCD20B3024612F5DBDBE1BF57B3C9EAE13EB502DED, 62BEE4999CC508F607BF3535EA98289D0A0C24283A1889E101236C6DE99BD5B212946C98745016EB -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 20E84A0ECAB8C9116ABE91FFD14B13A00F59807FBE9CAAC97AE700AE454D776652CDE804B5E52F74, BDA778FD464491C6506174E00B4C8015020DF9831F7FCA10604F2FA852E2F1DF8C31BC96FA8B5323 -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, AC93DB73CBC03D55B35DA84A6D9D3EC599F8A6D32F8A31CDDDE6CCFC4C45A24BD30FD41F83050962, 807BE2883D3D4B6AAEE500408CC4930500E60094D513AED55A4E67B8731E0725AA8B4CF69E504C8E -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 9F4351083F4C2663F2F89D0C62FB7664CC66C9249CBF9F545AB9E5B7249E400BBF35BDEF1722EABD, 6D685D55ADD0532A971AD3D798DB99D7B01A8FE50D478BF7446DB751E0A5534C903B85BC420BF32A -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, D8E39BD8F87E9B3BFF6F608E43E6AF1F6A447A2DA34CFBCAD95E20B854F2D062229B1B421578BB7, 7300D9270B1FC03B04F55F95A7598DC076B9F43C2976BCDDB084D2D041C1B8B9CEDEBEB22050B34 -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 8596E9EA74B614064CD21A9AD2AD859A5772D1C5B2F8AE9E2051C05C6457E85CFFEE5E5D50ECC4BD, B2BD69EDFBFAC1AA2412083A0B43852096F3DBE83DC87F8A7481A40DAF767CD1AF953902F14A0E98 -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, 38CEEEF98CB29671EAA520367E76DB8FC98DFA4AF7AEC21C18953EF6AACA127DC6DD2D4DB4C8FA14, 7981906F9962E8286EE539B3C3ACB9ACF2966377EBEF43322EB2A15622640540B1A9A2C20B98A8C3 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 381C9BFA9C795A80A1A6919E2F3EEB765853212F745B1C2856BD4B7E3D00025974164718B9F762A3, 8CE8D87A09ABE34B3D9CE6F811C817F506A57F7756ABE02E63BDF2467C4D59DE1575336BAAA9928A -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, 10F76E1254318129B40A647FF55C7B07C28A44B6E4FF01A0154DC462CB67128275E28E9D87D8BBF3, 894F34133E48D5157C84358E29989FB85CDD98AE4FFD4D7EA33A3DE28F7E91C2D2B5BF1960E289FF -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, C494D377C28881C7A794FD65B86BC6F3D0FF964ED131BE6B5D08CA57D20744087EC9D5B0B1A01BF9, 5874FC94710E0F1F0D37ABEFFDCC049E6CB3D3B74A969CAF5A1D53F0EB2141C42E2673EEEF49030F -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, 3B9DFB05C4A0A7CFE0D3D820C50ACC6AC21A3C87B1645FED48C2E89861B146C0B58218EA8C4C890E, B7D8A3793812CD8BDDA7C96A56FD854AE3351291E4D5F49DC34C1B241E8EE57AFD700ED5F3ECA895 -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, E32AF49AB9951269588652467AA223655EEAADABD44A73C443DF89EF41308821F56306EF42B5086, C7335D7C60BDC8D9152C43516D2F4E1A593AEF87ACD50E297562D3183C8465D0AC9A29780ED38A28 -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, 44AAA0CEB908E100F5906D97BAF484D79E1899C10D24741070C6A63152ACDE2EBA6DD67E1B822E81, 1219800AABA2BEE4E09459F66AAC96B8E6B1D7FA68D52F3649FA9A7E46F05A6828985CEBE21ADAA7 -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, B491EA983EF59D8A72D0D2782B2CF3B3540833D98657F7D2FBB5518F8F0FA1FAD1628D77237AD51, 355845DCD6244DE0F143183C3EEA886A37C886E420DC8456A142ACFBF06D3C5254957409100217C -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, 88667D99FA1F1376A6FEF8CF5DF49AFF1C45F80ADC988180E591EB2D6C9A20E5B9C309333BFADB66, 230F1F5ACDDCFD769091B3EC110F47BB961412829ABDE08DE880CEF1304BDBA48DBA2BA26633D4EC -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, B16766DF3D756A6C8BAC1246F7B198BCA0C13778AF735032914223C80CCF74424D3092CFA9036ECF, 92A865F727A3EEDAD64987D4E3725CD83981139292080C4E51EF9327B9D87B6C70408C697748E515 -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, 671DB690EAAB01CF91A56BC4D752D9173FA2FDE2CECE26162C4EF984A4A4852D7B5B275FFDD7B0F, 8739CA3515C61AE4B7E152FC8E6165E31BC0E5CC09371EF84B1A4E45C8424182C082F1961AA0C46 -A0D2E82CA5E358392DE9951D10B533E405FF396E226444B3B8F22B54A64B, 795A63689487023EB1AAD5B5BBB2ACE01F4F3CC0162275D161FB2C8F17081553D920D92F7EE7FED5, 69F833B00B790EB3C34A55B53B002C191C51ADD22C640C75FD86C90A876D501BF6ED743907572EE5 -1E278B885F1AA08AB89BCBF57321F9BAC11FDAC4A672CCE1B2AD681FDF2E1, B3120DC77ED876F00297CFD308D3F1804DF33A99A3DD81F6B05E56F3B73AEA7B5620065C156210B5, 74DEB334C550AEDB6ADFF5B2CF0FE6541F0AB3D7654F588D8D3B05347C70E96A99FBC1104382AAB8 -5A76A2991D4FE1A029D363E05965ED30435F904DF35866A51808385F9D8A3, 5B38A60B6BC66B315EB29DB541A4512AF5497AD2DD6797042433DFE36A7FA9650313A09C9BB51548, 74D2BD4A14EC90FCAB126AE021A5D1F594564D0C98A4367FF5E472D639F1AC9E866E075DAD5E47BB -10F63E7CB57EFA4E07D7A2BA10C31C790CA1EB0E9DA0933EF4818A91ED89E9, 9EC577C1BF1FB39C8BD864037F4B31D3379A43D5B7893119EB10E2F47CE6B905333FE182F3267C09, AB93AE64A905C0A353C7C215F9ADFBE1F035CBAE759C9114E7443B09F328CFE2CCF15A37D9CB77A1 -32E2BB76207CEEEA1786E82E3249556B25E5C12BD8E1B9BCDD849FB5C89DBB, 73423F0AA8600F001A5A1878C3C3C5126D5BF26FA61FC37ADBCB493DBDAA09A24AE9C2818C2E2D25, 68C0BC13FF12E59B668C1D912D897EDA5C6153D6A81B2E88D038CE3950F49B6FFFE7EFC486412B27 -98A832626176CCBE4694B88A96DC004171B143838AA52D36988DDF2159D931, 2FCEF200C3F2319082073652A868081DC403843C7D5FFDCDA9FA31FE7849C47BC4015C6E697FAC68, 7AAC7F74A28EFF6A70743D07227F03D471F5B57256793806AC20F80ADDB935A0E423333EBF299697 -1C9F897272464663AD3BE299FC49400C45513CA8A9FEF87A3C9A99D640D8B93, 9B71FC05A046EF677D56D3186BEB6585C32C5AC4B89F6AF1BF95916B0F2475194EC2B2BF46D7B0F3, 6DA0EE99ACA520F35E0C5D3A3F1B1A312CC4F3C7DC61F76F186DF6C2A344BB6C5649D0C271E391EE -55DE9C5756D2D32B07B3A7CDF4DBC024CFF3B5F9FDFCE96EB5CFCD82C28A2B9, CD3F3D28A01C4CD27632C3B303534B8707E3010967CF7A595B206A0DC672891B36E25ABD3369A40F, 64D17383391DD24B44BAB43403464700088D71CA44A01B07A35D3E4F20CD7CC46AE6357727358AC4 -1019BD50604787981171AF769DE93406E6FDB21EDF9F6BC4C216F6888479E82B, 8938358A4950307A89D48447AF5D1B7A20E7C47B80E240235CC06791A80F3AA2CB9FE840C65A258E, AF49FC170778C1568DCC1EE7D66D264C98C9E5EC78CC1FF6DE600A7BBC6052E598C9FAB0650ED4D4 -304D37F120D696C834550E63D9BB9C14B4F9165C9EDE434E4644E3998D6DB881, 7FBFDB4C3E2375E053407C04795B6E3CBC6385E3B765DD19816847A7A99E0C734D53C0AAB0A5ED13, 204DEFE25F8C3E492ABC1DCFF3377297EDF7C2F873B818A5C624A4DA136337A51E46C4A54EA9DE7D -90E7A7D36283C4589CFF2B2B8D32D43E1EEB4315DC9AC9EAD2CEAACCA8492983, B3C79C642F145E4404FF30884342955F9366433B10DD933C56EBD46689073B7D9AC73C3FD1167C74, 7840CA7668AC3B92B4AB3E9B1245EA418E01AA4AE720A91302D1D865079EC419C6345E884AFDFCF9 -1B2B6F77A278B4D09D6FD8182A7987CBA5CC1C94195D05DC0786C0065F8DB7C89, 9B48C653A5B6EB81BCF7A92586536E6D98A9BEE5A336ED03BB0A42EC720BFD5685CE5BDC54C2CAE8, C5115C83BFA544854E7EDA5E592A30D93CC75B476D8BCE329D182088B3900B5482604F62A6D9E50D -51824E66E76A1E71D84F88487F6C9762F16455BC4C171194169440131EA92759B, 118BC5D60519B8AB02FE914291590F695F2DBCDB4CC48A0EC8FC3EE87AA624E57A74BAE99DCCE787, 37F029BB3B2C80507C876B0EDE662531F8A8ED46791724DC58D3199BAEBBEA31C7EA4C920CD0E08C -F486EB34B63E5B5588EE98D97E45C628D42D0134E44534BC43BCC0395BFB760D1, 365A4DFD7699638BB3034E64DCDEE05EA2BC68E1ED93B4AB7B9972DAEC23E5220F8C7AE5BAB6CD9F, 4AA68464F78CD737282890E6603BEC9274189F73794CDB535ECA4D85AC82423FCE9F77E25E039E83 -2DD94C19E22BB12009ACBCA8C7AD1527A7C87039EACCF9E34CB3640AC13F262273, BC7535A6706EEA4C09954CC97AC3BEA17ED3681394E8427931F2B598E279F8D3B1C294F496F45967, 9C35DFC258B3DE09EC9BA3868DB2E6F195419B6788C36DE4E6BD146B953C0B973ED2D096864E08F7 -898BE44DA68313601D0635FA57073F76F75950ADC066EDA9E61A2C2043BD726759, 78947D4B20A110BF67280BCF921E4B8476DED52A55E2D10CC8EBB14CE312135339555A3F052535E0, 1748A9BD4348603A5050F4F97BE6DED7166BCDFED1D3F71A5500089471125525EA545781542DB4C6 -19CA3ACE8F3893A205712A1EF0515BE64E60BF2094134C8FDB24E8460CB3857360B, A25BE9F2DFF241E6514C00B5515C695C0AC44108ED0D20087762048D32435F2EF30053264EE23CB1, 10D7FD62123CF9042835F64D78669E34CA57AD5880D3F605CABE922F1AB45FA00F2814568F81EE05 -4D5EB06BADA9BAE610537E5CD0F413B2EB223D61BC39E5AF916EB8D2261A905A221, B3FFCA72F413D6F79B95772D366F1083BCC83068C54F763062ED24537381D659D2D767E42DF587A3, 5B758C118F3E3384A302D56CC07D7D0E726B62072BAE1804983A3127EBFED04D86E5FBEAD7CF8AE9 -E81C114308FD30B230FA7B1672DC3B18C166B82534ADB10EB44C2A76724FB10E663, 683BE9A98D2272B8A208CCF2BB6A703DC0FC907DA8C61006787FA73932759F1C63512AB95490181D, C759193178E2552504960C13768F16CC2C16DADFC8760AF235681CBA69092A8C4C047A181C06D904 -2B85433C91AF7921692EF71435894B14A4434286F9E09132C1CE47F6356EF132B329, D1F9A4BAFB164BE5D7C134DE383997A0709947618B6FAACFC1BEF0C2CFA24EF72AE03645621B26DF, B0D158821F11A797509B455A3C6E558A144D0E6082143F422D018C94509BF290168396BB82706930 -828FC9B5B50E6B643B8CE53CA09BE13DECC9C794EDA1B398456AD7E2A04CD398197B, B9D0761AEFD76F16A1F98BEBD421F6CFE9784EC528F22858951D891944E5C3FF22E6541CEE53B338, 613A16160F108A29EABA1207B00BDF8ECA3BB73913714CFF1E831B36789C4E26D51B01AC31C679C2 -187AF5D211F2B422CB2A6AFB5E1D3A3B9C65D56BEC8E51AC8D04087A7E0E67AC84C71, 1B037E5104FF543A6F3A4E6179AE5D949D2B119C2F5C2E551309E6751248616FC88D3EFE23B4717C, B7194BDD1BDC747DAAB4549A5A542B005BAD8813B62BBEE6453069C01F8AB4F78F876F1C234A5987 -4970E17635D81C68617F40F21A57AEB2D5318043C5AAF505A70C196F7A2B37058E553, 26FA8A8393D201BB69FF4EA8E3AC6AFBFAAE80F8693C3B0986171075778632A9FCA962F25A327862, 7409D0AC7BB07232009DB2549D39A709843D3C1F7FE154574BB269D0436C911C475DE767B451EAF4 -DC52A462A1885539247DC2D64F070C187F9480CB5100DF10F5244C4E6E81A510AAFF9, 33358FB5D7E2F323E22D20AF03DE396F7CC796781DC9755A449E538047E8333B67946AB360A939E9, 8C58C1D15729A6C093374F4506EBCD3C0AFC81ED0D6E90A33183B4785FC822DC47A2BC06259F71E5 -294F7ED27E498FFAB6D794882ED1524497EBD8261F3029D32DF6CE4EB4B84EF3200FEB, 13963EF0763A06E5E5937341EEBEBC4573BF7CC8A41B9886F43FAB309A826C385E3FA243EC376529, C8C0F7A5F7D739B142A3F3269B0CC5F5180EE689998387AA1361A946610BB62AF94A8626AF07C8BE -7BEE7C777ADCAFF02486BD988C73F6CDC7C388725D907D7989E46AEC1E28ECD9602FC1, 8520AE265F369D0E5A3D866CA6D36EA0696FD810669B35E40C850276374EDE6CEBA5C552D65815A8, 161FC58CD39D267ECC473D2668C4A50AF082D3F2A51650600651F1117E91EF0ED2CA58870EFE8031 -173CB756670960FD06D9438C9A55BE469574A995718B1786C9DAD40C45A7AC68C208F43, B28DDF5DD85D41DFCA58AD4998E7032EBDF7F0939F93F100C1AEFC981C3B927321262492F0FEE982, 4DE57B6ECF33262A35F893A76B4C11714BAF1A87AF3664FDD6C14C45674513EAC91D4584AC485C6C -45B62603351C22F7148BCAA5CF013AD3C05DFCC054A146945D907C24D0F7053A461ADC9, 4C680BA90B3B537EDB849038C66F66134776B0B2F49A4FA365478EE53D994AA5AF53CB35D2A5A143, A00F7183C33EDED40ECD412A108257B08FB60E414FAC5D9C65D81939B626E419EFB5133DBBFC50E5 -D12272099F5468E53DA35FF16D03B07B4119F640FDE3D3BD18B1746E72E50FAED25095B, 8549A5B4C9C1AFF3006B37782F1EFD66BC93E272E1D63FA71A6FC0EFCC2C0CD1DA3938F455FFE7AB, 90323C01B26AA157A9200FAAE07901AC8AEA8F858488513F5CB1E64ECBFF1237C8327E90B089674C -27367561CDDFD3AAFB8EA1FD4470B1171C34DE2C2F9AB7B374A145D4B58AF2F0C76F1C11, 67CC07A3A85879806FC68D1E9039EC274CF10BF31D4832A5507590C91F96FC43F21CF8CF28EFBFFC, 248EC393A54881A5189A8801B6D894045D33902B4E61D31BB023AA057A368BF5D533E58F0318CB84 -75A36025699F7B00F2ABE5F7CD521345549E9A848ED0271A5DE3D17E20A0D8D2564D5433, CF3632E8B62486FC52E60770179587B75D346458B60EA5D653065FA4A6A08DD749A761ABEEED2013, 3366017CC5F8F352D3197C552B8616CC761DECE3A4D6B8128526F6321985B757AEB6190C3DFD71FF -160EA20703CDE7102D803B1E767F639CFFDDBCF8DAC70754F19AB747A61E28A7702E7FC99, 5E8811AAF581BB220DF2DC22EE3DC3176D8EC9D6C6A70EDFA0FC18309255E6985F5CBD12EBB8DBA1, 80B8958702B750F6C13827CAE0226041FAD4E9DB63D82D979FBE7B7ECE6B81AB34EC26A2F46F5A60 -422BE6150B69B5308880B15B637E2AD6FF9936EA905515FED4D025D6F25A79F6508B7F5CB, 4ED948C40EFB09BE177FF456EF6E84DA9B33AE243AF9F79058A66E59DC2F12CC6AF8DDF0C8D69671, B5F04908B7EE58392D4DB62F04A1F28322F651572CAD852FD42DE709E058338B46972731ABA13A64 -C683B23F223D1F91998214122A7A8084FECBA4BFB0FF41FC7E707184D70F6DE2F1A27E161, 2D970E8694A30331005676B8BD82E01AF47CD8B82F53BC27732B806B8A7289E8CC3C26BB1B8086C8, E68575B9E46FC331E77C9634C0EBDB74E9D9F278BAAACC5862E36E17CA3750BDEC6ABEC0D2E2290 -2538B16BD66B75EB4CC863C367F6F818EFC62EE3F12FDC5F57B51548E852E49A8D4E77A423, 60EFD91A03E94DFA78FC612ED6D412EBDBE66303E7D146A28EA49DF5537333BEEAE1839AAED1701B, 925DDA1A43FD0058882336D2E7E1AAC461AF3FDF7B3407D4F814A9266E75CAE3B7E46272F7B6D662 -6FAA1443834261C1E6592B4A37E4E84ACF528CABD38F951E071F3FDAB8F8ADCFA7EB66EC69, 4F002C0F308152ADE740D6BC045D3802E42B6A0A5B1E222EB11CEDBFE336F3E806BB6F327EF552B3, C1DBED134469FC3861506FA4CDE91EB8EFD49ABF574CE2F398A368B0DFEBE9393548FE91704104A4 -14EFE3CCA89C72545B30B81DEA7AEB8E06DF7A6037AAEBF5A155DBF902AEA096EF7C234C53B, 42188EE2165474FF9FFC859F6A3AB16ACF84A3883F21334500680C4688333047A0D9BD696FCD0B30, B6BBA5C1052C7D358A86241E77C48651D6199EBFAC4E7C022FFDA7EC3F52D781D7F8E0A6EC44F973 -3ECFAB65F9D556FD11922859BF70C2AA149E6F20A700C3E0E40193EB080BE1C4CE7469E4FB1, 3C0607F167498EC04950EC24F7722A8E551D5D5C6E1CC27420F035B200D29E0B6AC2805315E516CE, C24E687CCF15323BD40A6C3450580C7D07560E94C8A6C61E6872F7DD25A00D9032B45BC058FBC68 -BC6F0231ED8004F734B6790D3E5247FE3DDB4D61F5024BA2AC04BBC11823A54E6B5D3DAEF13, 692801E1C3C83A3DA705AE92C77F7C5E2F2ACE535F12E97CCF1047FEA071DBEBAF061FE7FFCF8937, D019AD21715EAB751E0ADBCECDDAC636DD8803570D87B35605508E51120F2584CF371815FA01B1D1 -2354D0695C8800EE59E236B27BAF6D7FAB991E825DF06E2E8040E3343486AEFEB4217B90CD39, 8498D18A845068EA0C803BD1A5C4387A909DA373761C4BEB9E2CB77437F62BC2CDAE7B5859D17900, 22D94B08A93829043F1886630D1768C789BDBC2AEF24D0D677D7319BF317A99C1B30E777265A24E0 -69FE713C159802CB0DA6A417730E487F02CB5B8719D14A8B80C2A99C9D940CFC1C6472B267AB, CF4A5B127FF726566E21CDC63C0E391FA631C8644352F6AD648800C417F4C7AE082B5D7EB882B1AB, 1FE487C65B2DEC1974948F845E3981092CFBC169E8D39EF3F810CC4FAE53CDE9587B0444BA2C96D3 -13DFB53B440C8086128F3EC46592AD97D086212954D73DFA28247FCD5D8BC26F4552D58173701, 6AB87301F19CF5C0712FFB5FDB29F26D8389853572DA35FB76AA16F9705D2683B736146216B72853, 1289047D97C80883D3A3057CDB9180E4E043CE335A9B51DC1B36BFFBE3881ABB4A3D1C64FDDEFA21 -3B9F1FB1CC25819237ADBC4D30B808C77192637BFE85B9EE786D7F6818A3474DCFF880845A503, 46DB35BB9B88DA12C89098FF5312B8B959A89F5158F614590ACCA82B9C7526B6B0D7D480390A3852, B04700BC3D74A68C0791D0CF1628261649C0BDEECFE1E7D37086B4445D2CF637FCA75438A0D6E269 -B2DD5F15647084B6A70934E792281A5654B72A73FB912DCB69487E3849E9D5E96FE9818D0EF09, E47D5C6E1A874410D8651203E244A431C5C36A035089FD752062F46CFFAC4744CA62FE090270617, 12C9812950188AC16C9DE2F4C5117779C2C5F3A54392EDA0EB33D88A1CFC46BACDFDF46E5204DC9 -218981D402D518E23F51B9EB6B6784F02FE257F5BF2B389623BD97AA8DDBD81BC4FBC84A72CD1B, 4D6EA2F955B26B45F6722DC5237C1E42B1149A3E8A071932B82CBDB176231BF2571C70922DEDFF67, D17FE06BD12278B5283B8409DB1A5539C7613787ABF7F9F45F55D7ADB0B807E2FFA3891AB0C2D928 -649C857C087F4AA6BDF52DC242368ED08FA707E13D81A9C26B38C6FFA99388534EF358DF586751, 47E330C8287CFA86EBBE07E64B87598E8858B7C58914E7F60D96A703AE52868F00B122446B732DBF, 65E8F5E2E203D05A3778599B481B891AEDFF53F364B236C69DD409C6BA989E9C15B8D0D502BEF17E -12DD59074197DDFF439DF8946C6A3AC71AEF517A3B884FD4741AA54FEFCBA98F9ECDA0A9E0935F3, 9CE7F7089C23806E4BC8AD08BAF166C8D09BB9EC2DE6C0A768A45EF58E9CB02B2558742287FBE412, A7DB08C288460300B339DC8DB44BAA02FF898281B2522E602C594137AD7DC543D1FEF8AF83DA8FE8 -38980B15C4C799FDCAD9E9BD453EB05550CDF46EB298EF7D5C4FEFEFCF62FCAEDC68E1FDA1BA1D9, A16B7489E4AC4A0C1606172624885800F8DA2FBB242AB2867C6BDBA1AD1C5864D1FB7E6C10A9858E, 2467294D6797A3DE8FE1B7483231CC306EFD6AF97CE119FD906031A061E1983539029502FBD36BBA -A9C821414E56CDF9608DBD37CFBC10FFF269DD4C17CACE7814EFCFCF6E28F60C953AA5F8E52E58B, ADC7E7A3747570C6BB4CD535C4D39CAE6AD71257C1D10D36BC7412EEE6B362A653CB88477D6124EE, 1131935E292F940B9FDA57C1077871EC4929B3FAC83EDF3AF4678FD87B19DB5733A277B8E33EB8E3 -1FD5863C3EB0469EC21A937A76F3432FFD73D97E447606B683ECF6F6E4A7AE225BFAFF1EAAF8B0A1, C37325305611A18C349C2FF45322D942B293993F3E0D4D3067D6088374A30A89C46629A75A7C468A, 77770BC45EDB6C24EE208DC9385BA19145778DFF37068CA5D5537E497581814EF1692AA76BCCB70A -5F8092B4BC10D3DC464FBA6F64D9C98FF85B8C7ACD6214238BC6E4E4ADF70A6713F0FD5C00EA11E3, 86A72BE8A5613B7E12087919D0B52C9A1B844F3C1EDE05D3D8D1EB0BC885A8E27FEC03BE1BB11E7D, 9094953238CE756EE7806A15004714EF646F511788A2CC96FDD84E1AAF214B998F2DB6528C6985EB -1.3.36.3.3.2.8.1.1.11 -1, 1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D646AAEF87B2E247D4AF1E, 8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E4646217791811142820341263C5315 -3, 7B63205BF00DDAE73B17452B6A27EBF53DF581348C6949F83EE1B6FCC7463BBE3C11EF6596A3B8897D7CC85B3035F11F, 761D3A4A5F8093775521A326BC02BAAF7B2EB481EAD16A5C7B2BD39462363E0373C0EDAEA3B8F59381D7129D48772EB3 -9, 318CCBF708397F07ABA57E45A1B99B3DA92B638FAB9B5123CB8050CB12FF55D02CA04884153F3CA5BE9A6FA4D102FDCC, 6C64153906E5540A6F5562626E4CF07A0A7709206E67FCD6519B9CB144A5AF68A892DF80129727A5F0C4D7C799BDD7A -1B, 864075BE72641D409FC89759D2DA960299A1864AFCC4DF506335948783DCC764548141489F31BD76350C9B20A68701D9, 20DA57CBA5FC807ECC8C4E65B1C6728E7BAE3915529C333EA392A608DA4CA07A0D68626E726978DEF92D711CF11588F8 -51, CA535A05A084B78F58F30048ADBCD74C046334306852D1ED6DB94CD7A0B2D02CEC33D222559D077CEE0E8EB5B8DA0DA, 3CEE03C15DC99CB143E682A90C02A4BD4F65D5F40D52E62A8901B46332706A9D04ED50F529C4C114871F67FE42A8516F -F3, 788A8CE31F89234197EAD941C20C10FE535E48C3E0617944B7B1B77AD701D1507279B9516322FCB3FE90086409C55428, 415AAB2DE51E28155F11E5DF6E717D5310D8B9CAAD56D46F2007CF9EC55E10FE991D287FEA187F339D0379C7DC72FA37 -2D9, 5015CC16CB55079E66427BA8C10416FFDB8B4E464DBC70248982A6F2B48BC9704ED0A44BDEB0FD7EEAE798FEB75006F8, 4CFC8C8EF45BB58D6D10D316B570A998A5A2F46420307B89D05FEFDCE87ABF9F35915072A1024EB8C1AE103B04A8E820 -88B, 431AF5910189DB3767F4B0B6BD34E63A85154BAFE7A57EC0E5E9EB6680BC5DB9D8D61075BF066100CDF1A0277A94A6E2, 1E4427DE0FACEEA37D87353AA6B51C62C1E8D6F6C75349C66A3EAAD486B927553E8DADB9DF178368FBECBBB04CE168FC -19A1, 3765AFAE0A5185AFEC38DAD1009A3B96F08490C4CCEAB7DEFAA4B16EF7092AE8952C20A23814BEAB13E25DB112654A34, 2D077326E06880A763B512FD87533D0CDCC71B97FB66C92279BF54AA0A7B83951413EF0D2AC63B3B9FD5DAFA493F74BB -4CE3, 27F1EA60072C4CA3F61F097EFAACBE75016C27E457B34F0023DE3FEE6F2B89B373B4680CAF473CA0615FF89134A47514, 2B69C4AD4181AF8D41AC76D77F6F81495B448A8276D5EFC2DBF33A8702F887CA319097C07FE52A668FA417640667A28B -E6A9, 2B4A0B358DB1DADC18DC2C15DF4C6376C49743C58274424F6A8583F279B6DCFAD78602AE036588958C3A3F87604C95E9, 73F889A923654E7EF3E1A5A5EBD636877EB34F6BBAD991F63E2DC42711ABC834EE080E71D21BA9690906D0FAC13236B -2B3FB, 12696865F9A9E2E906E9879D5AEA480E6193BEDC214A7DE8D540B36E08A8AB56BA9C0F8D64CF051F85C603A2D90567C5, 222248C2E7382DCEE4DBEE53AD5D5A89273F890E8488A2EE895BF3822239926448237D8BE91E4416A4F9F8ACF7EBF11 -81BF1, 2B9D27A375D6A63C803435348D663C2F2E0D4601DE31C88AE56B7EF122DC5878FD6079E930E688228637EFEF579EAE69, 597AC8EF5A0DC12CBB13B46576BF2695A3E368D712ACC2E1EA65A66AD3A7A118E8BECB993A3515D65AA00EABDE12E7A6 -1853D3, 519BF19FC1F70522F35F8298C1B51E95C791C198F8BDA1838025B674E4EBCF5943DEA8787AE97ACBB95702F37F6FBFC5, 84426490A89B5A30AB7E54BAFDFB920A37449DA7074F1B32BC2A81D3278FFA38E2FD7F19968C7BF2891E8F3E846D1B36 -48FB79, 66A66F953C697CB913536CA985732A6C347C96A901472EF85ECCE3EBB2B6CE11570CCFDA6D2434A6ADA6D1430EF5F859, 47C16AD674DC3688562B673832E0C80EF12B02BC592562D1CCC77990B3DB310B3084C6EA50D3435A386D307511B36F47 -DAF26B, 7EC10B0F93C8462E6D9780048A31A1533EB91A8D242AD68C905CB53EC6EA8F78BD2879AA5B815C15EFE4AD25007B0033, 62718B3C78F84ED556986DD4D12BEE8ED96454BC825F5A52377B26EB82CAFB000803D0302531A1A9CCB674D76C031DEB -290D741, 2C40EF87120F869A2CF6B15693CA93A1DFBF2E533918359897509E943D3B415F1EAE7DB698C62AC4CCC1480E14336B12, 15A99E7F3B5D81B368F6D0343CBAB247E1C23046D5F24EC5D1AD9C387A73E7D20491A453A8A110FCD66DAF9E766EEF80 -7B285C3, 3F4659C0A019B4FAAED8F1989A6E82A60BDEB6C38010053D07DA66724C17ADA722500EC0BBEDAA2443B0B054E95DA6E2, 52BB134B0C391147B4B2F7C7349ED46373EB1C2C6BECDED23FF4A4F35113C1612A15B17A1B4B4337C8AF4D265A647DFF -17179149, 24A57EF7E585DC7FF59F027F381CE674A86114927757B31B7742D89A38960CE9D7D8ECCB3E09A2EA0335873C63C7BB19, 13DD67179B0833B4AB6644E5CB7F7035AA1169589997921623E9ED800E9C7457D241448DACC5AA7C8D06D3C40F750AC8 -4546B3DB, 2505BB1C268FA49D5469573386D5D7681D7B2466F770F63F17F93531526303C9A7E3B71E2772CE28C23111B76B40145D, 325B2C88DFC1DBFCFCC5E95FBA12705891463A2A10A2CEE8EA56E8950C98E957D3DCE494939721D8249799D09813BAF7 -CFD41B91, 400C8A4817937655D6866CEA31FD17EBAC6771EBFBAF9358853F41897E3B410AB2A7CF16D9CC2FCBEE45D72F7E50261B, 46B408E782F2B9DA78683F7A69109FCD50DC09192273BBAE4D15FB82A19981F9B9D0482A43B77F7581E2542CAC094BE9 -26F7C52B3, 39CCBAC06D17819DAD4A0A2242BC6E852C1FE90FC68487EC34FC88919B0A42BC13189635B565693818E1E1EAB0ECF98B, 450A2D78796850D4B82A04B03F9C334D006FEDE59FE16B5DA24F49C0ED364D0BD1013CC437732FDC7C5502C9A25D67E3 -74E74F819, 8AE3021D345DFA337B586F14A0829BABE7BB7D4EF6D12F892318B46A2111E6D5C506929E2BC6BC050671DAE0D5C27DDA, 23B53B22057AECB12EB7F89CC23D3302785CF2931E489482867A57BD08030B052188737BA434AD10B00CDDCF81506528 -15EB5EE84B, 18ADBE515ACD595C08E4C2AF637844C3FD9CE5A5944BB24050D9F25A1FC98D35393B4C2F43D0960D1D40E02C2C1F5F73, 4B91FE9E6B69E147B5F04ADC05EDE096A60E302D7170D2E8447A1A3E55015A332225C9AC7F096BA511FFACE7FD63B51D -41C21CB8E1, 1CCAC40119742F20C66A6A8CE41DB75042FD319F9B3D650F7D88003F3A699673D65EE0F67AE8DCB2C4432C665AB4ADC4, 37AD0A73179CF2A40EABEDDC68F5E0879C7046A46DD5090D1E1487B6F36D6755B455DE708E391D938E18D40A5853B9BF -C546562AA3, 2FE8F6245BCDB0DAE364AF76619C88A508E05D74D7F0A90D94671A040466B7F0D22A15674E2655B3568ED6A08C2A832C, 1E9CE2A2665A0D9250A3E4E283398CA6870C2DC18A42F0FC6FB2C5C770EA12640ACF841DB61E774A958DFA3B7D31EAEB -24FD3027FE9, 7E2EE7D32B6683F970DD0EBE82F5B0777CA09D7529F608A87943AB85D38932EDA07978BF68F0714CB18E24931BE87C9E, 2CC17E954F2942BA005966BFC6595916CAC279D1710030C2A1856B37D06C55C9061435A560C164CCE08D3EFDF04FA974 -6EF79077FBB, 7C7AF9FB59625C689EE0AD7D676CB2A4DD5851E3EF40B7212E84CFAF39B3E3B26BEF530713C500C58450EE1503AE456B, 7B22384B928092AC4AD5E43AFCCA904A3696D0D91E6DAD6370750BE43DDBBF781EA11A78CF9D2BCC4D3E759C97389386 -14CE6B167F31, 31C02E1AF46CA408C1388A3DA41A4677E5E9478C046B94A5AAE3D9C8FFC47CD8FF5E505E22FF91ED57DE2C080AB91204, 71ED15A4C3BBE30753040F471CD5442AC9DED23527507AEC5AEEBB9B2EA929769CDE220C80EE63E5297D23B2407317FE -3E6B41437D93, 48D9C949D81428332341588C3A4007742F9E81DA3EE72A8D552EDE6CC10CD9D9BCEFD47B3A956B5BF4D60FE21908707A, 6F98884FF95B66AC13D4212469B66D7B4DA8372E1D2464A8CF94165FBA2EF610F23912C207F251469A9BBC4D32405568 -BB41C3CA78B9, 62C905B81732FBF49019A99284AF7EC1CB179F1DEFA6FB179B346257D96F2BC7DEC75DCCD16B0E7540A867A04A694D15, FFE9B9F99D9AAD7A0C26DEA73E02858DE45D56AC8F212D40F77E34BBF4770BD7C6F138C37B904BABF54FBB39D53FEC2 -231C54B5F6A2B, 6EC04BFBEC603104CD865B83A7115A9A70436997F4E9C35C37CAC535961F45962399C689D9352CBC9AA7BE6981594D77, 6B09F89FA6EC4515227DC651BEA0A269569C26D526F3408FA8164C117622E0E6FC0D70728AACF3A9ECD10DAED439A13A -6954FE21E3E81, 68F53A55F6A2354B045F1101FF2EED58B3FF397B9FF5B67E831DBD93D81F7DC63B7C80E3CB478BD8D8B157EB18108076, 1458C57A7701FE9F2231C47B6655E68253F8D42E2DC4B15FA5D3D7FBD4066D231D432F87617E1125F7AC01843B7B41BF -13BFEFA65ABB83, 3286FF09FD1F53463F3AAB34A87B93B64448523494528663E62E37CD96C539FE7BDD8F2995C2B2A6104B6C441AEB63BF, 15320BCDD301FB15FB8F6BDC88ECB635FEF4B08D68563E1C336D5AEB14AF11B38CB5A8CE0815B4F2ADA25CFBC1687BC6 -3B3FCEF3103289, 4BAFA2D678832D15D1B071F28C6B9132EDCC5C7830461186EC441BDEBE76BC99DBE1F9FE480C748BC529136B2EB7D429, 4CFD8EC4588D8E37FEAB7BA77DF9839BA5D9AB7D629FFA476F5CFA20B48D3B2B309A78BD3DD302EE70747268E50F307A -B1BF6CD930979B, 660E3FEAA3448013AAB99302B542E192787F48C600F46C05DEE5EF8E2F446712CA02D4B387568EAA02A35A1174AC6E77, 79929E1EE4C407798C1FD6D6BFFC39ED14D998E87588737642D18888D8DD8D1E2E43A5B2B547099EABDF16B4D67525EC -2153E468B91C6D1, 6B7067AD2BEA7548420C62A2A19DF8FA1D84B21D2B8C8DF204AA374ECB4B1670B89F2285EB53835CF238DF0A1CE02015, 216A93FEF9366CC3F0B5E66568C46FED14EC2D2B6F4A892BDE34C992A7BA7256345BA03AAFD529A3769E67FAA28A12DE -63FBAD3A2B55473, 5F5CCF966CDBA498BBBB00903516A70FD0E201F1C09CCD5988A10496480CB703C5A3A3301EB3D2FB19883B625483246B, 2D3B46C3870EC792BB42ECC9E1A14BA651ECECD1A35EFD9161B675EE1940B39C72F85159F1D8BBD036C3D86FDBE4F653 -12BF307AE81FFD59, 416FC4AF2D777DE03036BDF5C92A047AE424B5080E84DD4F7B8BF5840F3F8B56CED9A2BA30C80139451B7EEB0649CAE3, 67B4DE43141082B0F2CD0755AC5A37ED9863A0F1AA181DEB6B283184341C3303F73CE5E27068320C0D63B5D71D081FAF -383D9170B85FF80B, 8B0961655ADAC3606F52EA70102E34D7173CE96E2AB0F4FCC73D91253717A31361E4430EF6DF2EB75DBDEBDA61B0705A, 783D267ACEC5D5E2D5AFD7A34525FEDB7DCD0D270862E3FEA7B93889A1FD4E51F2BC4053E4B3160B9E0CD4C691592775 -A8B8B452291FE821, 61804C1F38EF2A7C03C548DB741E37FA30B4F19D77C4CFC1DCB76570A259878EE3A684AD596034FEE71841F436A14989, 38E0A5F2B245F14B56ECB8B2A39BB5E7A44F710BB6587561755124B967836C076BE8851EF8074364336626932F21CDBB -1FA2A1CF67B5FB863, 6C2B582A5B0251B8CF8726C108D31B9D5D46915082612363BF08A62B148C4017F7491B637AF895584CC1412DE5BDEC53, 2FA08DE2946CEC3FB0F9CEFA38272AFAFF7F60BEE8041BA14D8330EA3E757042B548B676F0DCAF5323265B002EA73BF4 -5EE7E56E3721F2929, 468593B3BB0CAB48463DAF2AF519FEAD228EEE97860485A6FD436CAD9E2FD81328D37D33A1EEFA5C2605EEEF752F7C9C, 4E5C9C91F0DC9149611AB94D7747E266131F294331DF6EB45E686481A1F4423EB2343A8445112C63CBE98488FC2F560B -11CB7B04AA565D7B7B, 1E0789D52CE921DC0BFD30140B0870ABD290EA42AB420347594DCE24479F83BB8429D6BA2A21761F20C53EA2DAFD7FEC, 35DA4E84BB69D8759C0BFF60B416A718842BC828E08E3474BF05233AF0DEDB13755511A10263170806437D4EB4D90A49 -3562710DFF03187271, 3BD39CA4E4BD2328F2263158D195BA4A96FDE92A630974FDBD5E6742BFE201312BE27D0428D0D6610AAB06579A5C7D1, 2E1F5A2BB968DE826F4017464D428CF5BFA5F06AA534DAC97DEB958B4CC854BCB21F101D11B06085AB860A559191D402 -A0275329FD09495753, 3067430CB5B54086C28C6A07F77E52477D83BE71DBD43E300AA5704C70C46FC09394536572ECE32BF13916B1D6FEBAF5, 8B5F337E1F4A416CD0C8FF435E292E322282B47E47BF7DFEDFD67E0300C6796F60F8246DBFFE9EFBC74C8298DB959FB9 -1E075F97DF71BDC05F9, 14952FFF3735DA4F3FF816DF6DB596C1387B7CE2C4F645B4BE93E1ED5ADC9DCC78377A6C8E5860AB67641602DD543154, 7AD82CAD5C0A49860625D119BEDF961A26585B9B64FE6BA1303FEDF4C074D546A56B0C5CA5DEF73BB440256FB3293738 -5A161EC79E5539411EB, 29E9981AFF0133DFCCC9395D757B6D6C097D7BE19F9265525F9A610B0902FB53F75951F5C2365D277653C6986EEA9E94, 4130D805AC260C41EFEC285B9C2FE3D55D0B6E8932ECEAA650F7CFD9F19E0D65772CE51CA56B287EFD3D154AB651F608 -10E425C56DAFFABC35C1, 4DE6C90D00491CC0F5E21470A3DD5D75DDEF258478FE3F878C4213FF0DCFFF006F60926E5FD63FFC877EC3033BB984E5, 928966093CC022EDD5C190294971EF031BCF5305419A7B3E197E25C2620B0523AC432DD72A5FCDC66EAAAD688E29CB1 -32AC7150490FF034A143, 6E628B24D487A56AC4588D31AC756CE06B5EFF0291BA475D55A6008587B1CCD4107B0FAACD2678E929901B8E6D7D55C0, 55E573B8B0AD4E7959668D12772017267345F7C119C7F7F9922A3A997B470F0410CC39E902C2D0F34F11D608B6E4B3CE -980553F0DB2FD09DE3C9, 6E9389907561C4029AA608E3FA7F82362C8B5E4D96C0AC622C7528C231BBD7BC68E92ED2229B69680356A1C93CB8B189, 6A570C2A712D5728F88DA70F2437BCC39E802678197FC61519C61DCF5D8C4CA470739C094D58D7313A11D433E5029664 -1C80FFBD2918F71D9AB5B, 585BB8AD0BA36F740FB4E364484FD3611A841410745E2EEECF8ACFB0C23F38D7621BDD9B25D7D20F89B84365E3998E, EF29462874476B9C2E62210EF09E6A54848B7AF9336213A02D70D2DF89784868197E73F502B14DADAA6DB2E0ACC4A86 -5582FF377B4AE558D0211, 19FBF7478D14467511AD952B4B6DDA25E9A8E149C7D9BF083E830B7A5B5139DC6559A764EAF9927D0C174B3C3BF3CF6F, 61CD9CE969736E00E6CA8ACA86F6BFA2BFEEB82656E2562C725A65601570A8E1B173C50DC535B1DC19D3A00B80A72503 -10088FDA671E0B00A70633, 221F33311C8D9E040D09961E6A246DC1C67A679125CC80501B116A02E3AFC46BB4B4B4756202F6F2E60BA1E846EB510, 5E7A36A97A96282A9BEA9E314DA1F9A19C38FA345613EA69C414DC68D8DB4214E099E21B29761B347D9F5169773945B4 -3019AF8F355A2101F51299, 75D87CABD9534391A281BF7BFE4614CC9BC8C3BE649E33861D7F40ABA078137526D200A8C1848DBED8BC8689B0ACB59, 19886A103E218732F4E7FC8B178F2C00F1962B3E154EF2E77FF29A82175240532935D02FB57A2CB0417BEA73F3F6AF0B -904D0EADA00E6305DF37CB, 2003DBC8C553E102F66F5CA0E97E52512E0C5EDFCAC1FB2E6766DDB099DEFC714D1AE8821B2F1CB779A282CEE3511AFF, 7044EDCEC64DAF5298B7B8DFDBC58C7DE10C61F844D39094AF3532F4101DB1095150CA37CBE38EA02044EA8D7585A2E2 -1B0E72C08E02B29119DA761, F303077F48DBEABAD3CAB926F8947ECCCE1BC24E989D0BF5E40DAAC34D224B0BFAEF80CACD3423A82EB934FA6996159, 2BE1D5C5581DFD06778E0CD565896403CB5CBC106C1E6962F3DE77D75B0CB6BB963F4C26F0CD57EB5BE73FC487F6AAB -512B5841AA0817B34D8F623, 556EB8DFC99195ACA2AD301D684E371E271464D997C7FF249780678F9BA7ABA4230249AF01465F067BF0170EEB8E5625, 36784AD9304E0C4304B77B38A61122F28A75938D0EDCB18930AE82A07100F6994D2181EA03C245F7776592B71CA4F388 -F38208C4FE184719E8AE269, 16FCCFF00F2D9314E694F99A72F56F9DD44B9D23FB8A7D63E9635FF79EB01D270F7B28442F2BFD8E4DA8FF7F6B52EC6D, 31B26F5FD7A7EFF631FD73795CB9818DE9A592ABA99035B7407A6D3D5998D498BF17E3D3432B9BF29656DC4327EDA744 -2DA861A4EFA48D54DBA0A73B, 31FDC8D21BE325643971C9944F618519B671430613217EE50DD29C66A1D9CE18C57BE5806B21FF2D1795CC37275EE3DF, 532FCA0D78A63DBF29B79FB5A42B62BD60F8B55A08EBE0E8308FDEF5DC429DD7D813EEDAA41514E78FA974082901377F -88F924EECEEDA7FE92E1F5B1, BC24011A32F3D0FDE8AFF6F4C2CB2E85C04BA562D332313F42212033D5E8B697692A3A4D5DE8C1BBBCA88C18C396FE2, 1B0AEA84AB8591B8794454D62426C0B0B0D11355E58BF32232CE06F6B6364A8A0592FCE356388DB63CBA1135F9669C50 -19AEB6ECC6CC8F7FBB8A5E113, 3B0919ECED381F40E22733AA42DCCFB4B5699D065D021178D482919B5A3072F59F9FA2D4118E63869DFC9A90E01638D2, 801AC689D60A244537081E5BFCD24AD8ABF89B326BFC56492A62D56263F2235057FEA3F9D98E0031E3F555A5E9DE122D -4D0C24C65465AE7F329F1A339, 7DAD2F7B4F45AAABDD6648819C1B8F9D2662476AD3AF087285DB69345E4A78E852C29F287D15091B99B0DA88C7F221E6, 3095BFF3A38CA6A807120387F4F131BC309BE9A2743AA65D57D130749F5045871728409D0C00FD2327F2C605EFE2C8F4 -E7246E52FD310B7D97DD4E9AB, 11C7437533AD41D778E779ABE04CF200413CDC1E6214372A094A64295194875B68C0F505F2300EE192BCEC8B3359F45, 7BC635CA493C74C15065285D9032FFF92F8AF797005507BC6C66E77CC91BE3AD9AC0C59D93F163F40E465BB01575B7DB -2B56D4AF8F7932278C797EBD01, BCA0E72C5417F0C8866F04DC74D3ED41AD3273A0932B4AF2374EC8AD917FFB3C4FB29B4EC14861B3E1BA9733BA5CAA2, 7F3D0346344DCD42E31EF73D3D5BC8B7CA2BB50F25A6E2AA9D9BCEF90AF79B092B636BFB88951D108DE88EB4C78F2583 -82047E0EAE6B9676A56C7C3703, 6D6C2DC5B3C93E17CA5D50ACAB76ED2204E66DB75F7DF148DCC23013B004430EA1BAC9F6CDCE0C74C598FE40661223FE, 675FED2E77727A4531B8C33B6D08DEC06AAC6E4C5B89767EEEDF64873AFDD58C794A0C54F6A35F0C1791BC19A44A8323 -1860D7A2C0B42C363F04574A509, 47C86F7550EDCA64ED299F5C78C40F4132DE2282A9588492F0336C2C54D40D65406A024F0C174FED35237E716FE39014, 63D2D1F96ED5F386E061FA4E5B0ABC9355D812A823842058B9AE8EB77B88EB35BB4EAA73CEFBC20FE652557499232826 -492286E8421C84A2BD0D05DEF1B, 2593245DC85782EBA0766AD239AB66A6B129C1FBC840584D92B10706B3802FA5238E8823E108CB0F2D85007ED38B8ED2, 4C89F8412D0B5FA67F951A640CC9628F5623BB9F2DD126897D1AECF28DECBFF9572B417BECEC8B2A9E8299F59952755E -DB6794B8C6558DE83727119CD51, 541A1C73D7D81E1A877EDA7BBA9E087521426D6DCFEBA5706A68D8571446C041DF477B792C9B35729BA7D197033F93D7, 6E5CB52F6D7370BF9C5136DCEF6287E6ECA491052FAF27F91E2BC946F4C02B0F28D24968F5C78CAB4795CF14A57508E1 -29236BE2A5300A9B8A57534D67F3, 37AA4238D30EBBD6CB3FC0236782341109132421A5254D91D6333DCD10751C1424E9AA4B1BF171ADA02F7F60254B7AA4, 34C2E92985E9317A84B6417C75036E7467BEEBE1AC7E1B61CC8982D6643B7850B1CBA0674C08D58E40128EFFC4277F80 -7B6A43A7EF901FD29F05F9E837D9, 2CBB46174DD00D9646E339A5F2D18321578A75AA361D6368579A0E6A638A126A30DA7960D1FECDABAF19EB99EB7B0F79, 7506DE60292951A7C4C4AB3A938670E2FE8E7A9D437187086CF965B246D33EF72491F8C64EF2E8BDA590DB5A60FB36E7 -1723ECAF7CEB05F77DD11EDB8A78B, 54D5EE2616627032FA30379AF43A9DF3B36669769C439DD45E41271E5352035566FCBDF65EF02049EF094881D24BC1CB, 72FDFF6EAA0D26EC9795E37C2F54F721EEE28B2A3C8775DCB4CFCD5CE2CFF995246F3181C60B6CA72CBFC4F4021AF588 -456BC60E76C111E679735C929F6A1, 4B461FDCED97D8814039FCEEE485B5CF4245CE211B25586CCA0D7593D049F9FF03B9AEAA65D4267A1EB034571B7125EF, 2C904E4D456DF5F91D76CE1A09CF083DF1A0CBF8238B6564DC49CE5C61D7C8B679070341F8F2959E66E2ECBB3CB7DCCD -D043522B644335B36C5A15B7DE3E3, 4B4E9F00B37BA872C5E51ECF94D0193984A32638D8DA0113E4B1B003B525B9D67359A60FC2D7452EA52F6D432CBAC960, 3EF6E39AE979E53BDD19CF665AB91BA01162FA9A5E3C5AFFD0E8AD5A821B3EFF41369F482CCD0166BC1CAE9CE44B0548 -270C9F6822CC9A11A450E41279ABA9, 7252FB98A8209392A750D53F63CC0D82F9BED755A0BB77968F7EA14E4A06D3F42EC641742B815574D80D8D9BDFB645D0, 667E5560DDD010BA91EECA4BBC22F26727BA161B547A40326410904B99C66945D15A143CC1EDFFC96089E1F2AF4BC559 -7525DE386865CE34ECF2AC376D02FB, 8A67C8F7586D3F478C6EDD9890FE2475DBEB956EC8967CAF15D10F343EF59008426BC8562AD81BE220770A1AC2C37846, 2F7BD3E5EEF69F0A6F7F7998AABC55240B9D73804DCE8A3B5E331087824B7DC495442DEF21D3845F43A01CB4B0C19BAC -15F719AA939316A9EC6D804A64708F1, 7C7545A5A6AD4321C913A8AE405CF00D3B27D899520D26DE8A04A24C7D96725F018E47CFFFB1C5C58A1BEDEA7BB9D49B, 2A40B4D473FADC7231D1670EE27C1F8F04BB36A29726CA482C9032F5901DADF6D2D26CCBB76B51F54032CF0D67884AA4 -41E54CFFBAB943FDC54880DF2D51AD3, 301B9EA096D764AD22A762B787CDC30CC83A06CD087E5C8FBB3A8CC6CADDD4E960A356B82B4CE9F526A7BB7509654687, 77953A71E2EDE717F1018CA9475C0A050F9E16F704808B5B6E4F4156AA5F958D380D4B5C18C09C7D7D03AF827EBBFF1F -C5AFE6FF302BCBF94FD9829D87F5079, 805F21086400DD0D9B4C5651B1B43834B0D72A9707C528C914FFDE446D6509F9465AE9F5BE4A653F3CC2981B79821E5A, 4F52325714C330A7E528C7151B1E00F4E9F655E04D5BCA2D89AAE179B85AC62C83927556F61CDCE5743BAEAD6DFDC22 -2510FB4FD908363EBEF8C87D897DF16B, 5E3F1FD38E65E914899E73A310763F6866B00AB1D69FD0291D58996CD4728B27C8F6C3F8382A26CEF6F6D5291A48F65, 3B7D7A4448EB5968BFF8EC084788B308BD474BA44506CFCD334E751372A1DD87CEE4CA040BE088A669BFD587C4B0EB16 -6F32F1EF8B18A2BC3CEA59789C79D441, 831935FC01ADA4AF15AAC92FE3727AC139AD52D4A6278AF9E6212205FFD57130512FFAB25416418835C7F71DB9C9E98C, 4B4092F58CA5C86A2A21E38AB17A4CEC279B18640306F1949FDF7F78BD44E6CC8F851C48C4ACEAFE14ACE8FBB19D40B4 -14D98D5CEA149E834B6BF0C69D56D7CC3, 2D58B8331FB8311495A47A4504E6D90B535177D7664038C64BF0464285AAE3540C3709B20BCD27DF5C168EDB6159B2E7, CE1C0657968514FC268D590161EE1802639CE439CC2575FFC70099B0F05ED4BD667D4F4EC21D9A642CF3FDAF14059E6 -3E8CA816BE3DDB89E243D253D80487649, 58380E62416562C12AA3E6DE33AD430A1571BE03FB9D4773A2D7263C0E286655D4EE23AF79EBD4E94B102FDB4CE76F48, 5A646BFEEA459B86B660E196E93E41B9EF6E17D8D2489AC64CC792C31889CA2B449DAA9C49A1819F6BF340415EF6A774 -BBA5F8443AB9929DA6CB76FB880D962DB, 80941774EE6B765B3F0552AA8EB611DBEA911DD6409411C08D6AE873FE8864422C0FCD0C0F665876E04B8E5938F2F6E6, 4857E0E20502375E4761C6BA270C9B9AB7D8D5F97139B0E6F386C4AA1B01A400880D464C55CE908884B8568990C33AC5 -232F1E8CCB02CB7D8F46264F29828C2891, 4804903FDF0F714FA83F291AB5E0550B2A65A02123E89D49D24B29D7C5F42D1063D14FC4578AB2B9E82BB0A2731A5CE8, 21711909A12EB497D540B59F346B765C0649AFC2A238C636E2FF6CEF08A20B8A0CBDDEAF37B8A4DEF07EB36670ADD3AA -698D5BA661086278ADD272ED7C87A479B3, 79C9DE94916989142F53AD7E727BD8FC9F82F44E57FAC55705A0BB14239B7AD8C0084C760161F9859316729560797F9E, 157BDFE77A9A23196AC1735B78EABA38A417D52A1829E82F334C8DCB6750ED551DCF29133BABC4F6FA8F40FBAB8C6413 -13CA812F32319276A097758C87596ED6D19, 154E9DECF5F18E3C8DE8F8B1B0F4AB9E2C60561834BB85CCEACB0B07838D3FB12B21FE42595DB15C376321F41F5EC62D, 8F7649A835378688BB07CF71C67514BBD0E528A31AD41079838EABB011EC184E18C00A9EDC6CB373D3C64A971865045 -3B5F838D9694B763E1C660A5960C4C8474B, 39B8DA998A889CBD30EDEB46A7D12D5370E81076C2843C0AB7F2D15358DC669EF522BEAE7337B1037C7F3301DDE87FD1, EE0B2BDD7067181227830CCBDBFA4FFE5C0DBD1D1FE86767DF05387371E1C4AB9E5CDC4C30E81C5560A63AE8BE354A -B21E8AA8C3BE262BA55321F0C224E58D5E1, 5B0C160E61233FD2E09860641338B87CD71F1D68E333F7D96510C5C0556DD9253CE9F1E44043FE9301AEED7A893096F2, 5A95CA3C9094B6E1B68426D9BBDC935EAA641D2EAE95B8ABFB2FFC052B074C6BBD1C3D8793C30554DCC02A975900D995 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 6A52A06FBCB31E73C11DCEED4007F1CDAD1C394F47A74B1F01112DAE12419CD6899361841FB2EE21B920CD4742C8104E, 305BB86116AE80343573A0E911168169A3A818AD0FF5673E11E5CAA4A5B53BE48C9C82A26DE43A3A0DBB9BB008A16197 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 38C0A72D29AB50912A63595E878B0A3AD10D5957639EAE71836DFC918E4747AFD9FC650508961711131DD1A0F78CEDF6, 2B587E5C3BD78DE2D2DACFA88EBA0EA4EAD06F192F66AB931BEAF156D2219F2A39DEBAD9F24295DC507C4C912E4DE188 -12C9389FCCA50E069A6FC4946479E435E8EBB, 5C6332F6A33C1BD7D9426D69355B41C004B2B5989818E5B02BCA85A83096E2C5F1A6A4C4B49AC9CAC36668F98D94E1D7, 8929B8C309DF8B3E8125601DD89283CD70D62ACE951AFD680B436DEF2B4A9698321FBFA05DF11C780EA42D749590D0A4 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 61E85FDD577D25EE93A5A2713FD17F11A0DCD0B39A5C0342D873FBA53CB0960FDF417AF534CB1BF481B55B8623E7D5C3, 5FB27D4AFF7783BCF036C33B0BD03328A38BAE899DC78497550DDB93FA9D18D0AF72715EFBF86DB92D0B5014D3A12ABF -A912FD9E31CD7E3B6DEDE937884905E530493, 4DFD47C425480B8768B78E270919CA99122DDD5150541ECDC6DE52B4D2BEDEE57FF90C00A1DDA7E95B4C847644EB9A4E, 7E9183427D915D5B464ED0869111C171752D95EC360E39452080CFDA74583166BD274061C4ECC5CB50A2FC5B44DB15B6 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 350F35DD198E89D6E094D3FED5C5194A1DD4D8D5AEBDF21807EC218A0073ABF4B81DB09E8A8335653DD3190C03738E22, 377EF32F687618EAAAD3EAD9D6968D3886EB9E5EEA68EA87FA168CC4A8F4E80F6E50C3348E0F10AB4258E1A795B6C31F -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 58C40530E9D142E6B370C7E5E9E849D6561780D00A14434E4A59426677F306A9867CA2E619CA02E6985780E646AE6EFD, 5BD739BF01DDEB911A57FC5C2FAF19DE07BAC9567E3B6B2036F7AE749FDBE8E75483AE4D70A963DD44723FFD304BC37 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 30454D4279D61C81811DD3A2BA51C9AE7E174294C5012FED51FCCABA1A55F19DCBE736BDD9B238AAB90E1AEBC663556C, 88491282F5057DDACC9138FED563E13C1F2693668E4B4BE5AF3F51C18DCAE45D8146E240C7B65E5ADAB3DCE76E3601B5 -357F023F0DC204F0CDC846CA921F1ADD8447283, 1D420034B64026476ECFF6379445E4386F537E05B22F561CF7F04859FB52B15090A66FAE922347ED53D19ADDBCC936CF, 51B111D1B0A0788ECCB5B900A282D75090A98B90237DF8B09D3D2CC58B2FC65AEA110FA0554E6A45DC099A9B71C93FDF -A07D06BD29460ED26958D45FB65D50988CD5789, 36FD9816086F79626808555A44EB072B8B93E8AC36BA2BF157E523F255086DE406B65D70D05B8F5ABAD00E097FE34022, 85674A7FCAE0B76E03E6852EAC4D3543BA9C75FAFFF0552C02C8AE930EDD73FBB42562BD1AD79AE3C93A6BAFC8D8515D -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 3EE51A8583EC411DD29F74D4EF6F2B3D9F841636F9BDA461A5C2C6C10786F5401ED97DF9F78BF50947ED39213C6FB527, 4962D500DD437153DAF536D10F0A3DFFD50E0F93AE34329843433BDA46C18F4BECFA622E2CB8E96D542165A110FFF223 -5A4653CA673768565B41F775D6947D55CF3813D1, 89A144BCECCDFFD6FAD9C6843649F16A195F3729484ACDA4E4257A49DA1E794D0689439A9D1278E68E7AD8C94F4FD74C, 50D3A6D13BA85DF7550931C411E521A4A2954A1988C16E62AE2AC6B96BB2FAEE98B5206493CED0B89BF7415D034D602A -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 2D10D826183B80D7959577FF4DBB3BA598F4898408416D6D7E2919138D1777D12F37043A967875EB00F9618E457727E6, 5642A28F646A1D15C0ADAE1D0ACC0A72A52DF61F91F91E663D5626E4B9D70A0A9348FA29222B4539EDF7F1D25A0C5EB5 -32C78F21DA0F2AB093551B3248B38680448F8B259, 142079DC4A2F229896C7E8EAD9E1D1C7AEDDCB2F8E1A99D47F819769620E392402C6EAF5B005CC65EA6B3BB81C61BB8B, 395DF92D22632CDEC03F1F8648127E8C319899D2213B70EFD1DBFF38FA9AB36119294DAD843C97FA74091174DCF2C20A -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 7283328552930383EE4042B87D9675C55BE8C96A4A165C8EE9B7ADB08DEC1EFFB5DD77808F51A06D041E90B5629F41D2, 19E60F3B57F4ADD864E3DBDA649D621503E91F7BDC75567DDCA667E6B38DB5574815A3A997F8389253BA290914B5D7FD -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 276DD53FC79BA7178FFCCF739B636BCC5092C97BA3572992484CFFE2173C4DCB934696259A903AC7944F25A3F42B817E, 882EAEC08BF1046552052D1C84F759D5702BA8A3895144311889BA5E8954D1070B91EBC6F5984CD3D3125B06DFA736E6 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, 2C3DB05E66FB13D3609D6FDFE49CBF794711864C75A8B7F365467AE20C83579C8600861197E274C91246611CCA80E105, 51896F4E82B4BABA061BDCBD831F6E6843EAF7F73EBD39550968190DFF873D3CF13430BACD9EF2EB3E7632C5765E982B -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 478AC3230499D4CE50D13B642CA93EC8BC089769A32C1B4F31F61D2B2CD8CE7AD4E156D31EFF79AF6D8AB6C3F5FBE2A, 4CF00F7656FAC4C5050F9155101A2FF451E7C15CC2DA67580A633FA0C65679DDDAAAB0FCF6155EB3F74DBA3F87F7DBE7 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 76C1AD359B910413EC29BF7941A888585253B7CDB51EBF34D6FBBA6A52A61A3D504BDD596489B3393EC8AD05883FBD85, 379C90DF5EC9A4185B4B02D8F8E7D87885C001A96C39B38CF0C525FEB7DAE137BA9652A517FF4FC85E454B1C9F80342E -909A469765F53090D38D5A7231073A03433CC33DF71, 11FA0415DF5C88079F414DD5BBC3B7FB9861251B0D599C9F9AEB80A61666BAB991AF176BCC5E463BB83546A9AC845085, 7F0E1D544146339B67037E6A544140259C89E1E43945B9BEA57608FDAF4BB102899A9D98264083C6CB92C73C503E20B2 -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 6E5169DDB8DD6F52B01DA04A6FA60B744C4ECD220E4E1DCD2FCCD1EAB05F3B73403A93828F9A079219C7378EBC24CFCF, 2AE8661601F3A5C6D99E5F302E003AF2C8FEAAB0AF9D75B313CE84E71C500ADB3D397ACDDD612BCA4FEC540AEECF5E1D -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 14FA14CBA068DDC704DDE3BC64BFC68E984C8F5E07988E98E1768B4671EB9B6B89DBC9E6392BF26A304A4AE15C9534E2, 72EFFC8D2DE691A22E072403DF56EF2D7BBA436E10BFD03A53FEAADF6988BF1671626C016DFD7A5BCB2323D885E7424 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 11030ADB73FCA47D2C105C4281FF6CCFE4FAA1AFE5BE85994286EB03B307B637603883B6D5134C0DF07E902CE285011, 5357BA1D620F0A6655AE58685AF0B1474E100E2B2B93F45FA92C103B22580796DA7873D7BA68F67327CB41CF5CD91334 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, C3BA17294168E2E84A6D100D9F2DB2EECFBEB710DF9FC15ECAFCFB9FA77473E5A6C813A3E7F566CBA7DF1EA739D208E, 642F5686E932912F196826BB49AC1161171A74613D0E884FD32E057B15CCBEF34F2407525D9B61614CF998DAC08D39D9 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 20C16111E1DB7EEAB93E17879DD1EE6E90ECEBD6063A15530A4B9B6A1DB0E60AA8C01C61C8C7E866760FE2C256E74786, 17E07A208BD8ED2CDDE408C50A79CFABAAC093B0662FCFF0FF93A58AC125866F7F9C1291D66516ED76771FC01067126A -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 8B54CCF5E5C58FD770424F51ABE5E6473C745BCFD999EC1656154CA3329726E68DEA19D868A8651815A83001FFF7536A, 68044B95B76AD57F984039B18D936AFA6F4639D2D8AEC8D48E3BE872BC7FF75CCB1ED70A38B6E72957025189A3D662F9 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 6D18777FDD0611BC8331859B41DF1105528ED516E8EEDE075B74ECD07C9A859536C8C7274489BFBC650DEE10F5F21DF0, 50E758916A16DECF5733B0DAE364EF1BA45C4E3CE8BE49D42A853249FCC64D9BC58DAE5604C111DB2F199436BAF128DE -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 2CF7DCA66E2568A51A0A02F98D279A7865B1A61F3D1AB0AC53F7CD2DAAEBA5A4C98CE38CD6FD4E7723BB14032DBFC88E, 7F03292F2E5ED0D31B811FC955CB2F8DEC24609286E8CE8942947B8840A44264458E44E3041D0685128E1E0C559BAE22 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 6E8377AB6A4B19C8ADA0C542198DCB2446BD31186C7D2591E0C9B2AB75CF767B87FF16BBB0F7D98557E3AF0B2D1D8DB, DF780231A394F24059F6C466AFABB8A80A29AFEDD19774D80ADDC2A296F7E7C78C7785C082DA8B5EED2F6E02D70D155 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, FD04893F71E13D9B457F832D162FF7E2ED257A750882BB0B8F346B129436F68EC38D57EF732144501E1A72F246570D8, 383D63034FD2616641379A291800EA07B186ECE8A9AEE90595F3BBD079FC2C4539E048A08CFC15546D264D62523E7C83 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 5BE12D216D842203311A41F31F5A4364B67BE63FA562AB3C61CDDE4193375D96425838CF76C0B5106A25C770F34D92A3, 371E88E2C54FF7E999D5B03D2200101DD9DD711B51CBCBFEF102980246F53865B2E4929C748491D3BA13EB756E219446 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 110DC7DACB1D5127388F6223BFC7DF4C9D2914009A7ED9B382E2451A68AAF72039D30E396022CADD5EEF48B251347F5B, 7088201A54A5960E0FBD67C0087F63B34E3B8AAD413BD11ADBAE4BEA6B8D5C186D321EAA664D706AACAFA86596EF12D0 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 660251F05CF39161ADFC19979D865541CAADC64AA7361AE6D84410AFFFECC85C36306BD5F209E313E293A514F1A4E85D, 6B48720987B8DA68EE7983979BA16E2423EEE7153E607D9EFF5AEFF343C9D5FF2DAAD8BF15D53046626BDB10CB1AECC1 -29396F76B67B7C403D73A1059B80139336878E44938606769, 3B5BAD2C68D3E839D5390D193A6ABE8870B7231D66B145C6D35368973B151FFF4CCAC6A74DE1B934B83EDCB4383CF2B5, 2D7678E75DCF8553988D663C79FF35540DB761AA378A4D39CA96B8B49E3C9E9307321DB0EBB87A54E22AB6D415C5DF4B -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, 2B1221041523DA398D5364B7BF82A6A332D042212279D1D4EBF64695D3C1C4648AE14F50D47EBDD9DDEE109A739BD0D8, 6F457B7A0C31959D7416F952A41A4DE3F6DD13729145B3880736EE3BDFA6DFD28477A7B0C4BCD17AE604D3BE64503CF4 -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 46F379ADA714B236DF0BE477FAB6601B02376224D463AC50E444971F5CFD893927FBFEC5067A7A8FE5265ACDBC0C6ED6, 768945DCF3E8837C3EDCCA888DF87B954DEF47B74BA41CC8611047342F9292E2BFFD588246670C82B23E26BF4904F0F -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 394EDE4CDA0D56D4CA5312ACB20994768851A1E0CD73D2EE95BBB0ECBCCB07D8CA1F0AA6EBA18AC3D0FF6AC84D6DD954, 83DC7BF03D97A6CFAFDA37AF4960D83DB674C112C8239CB6195756B3E61CF184A9808DD5AFFAD640EB715042BECF0A70 -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, 256B8619A725DE5449BD14B6A6E5A67F282D4610786973BAD74E9127741115EFD03216DB00FDEFB3B24F638F207D60D7, 7A7D2E89D9046C63F1F584BEA856A2F312371814B114B4D7D244264360385974C208CEC3C46C717031D95E725BCB8A7F -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 69E6A3B0E6CA49FD17F0A5152D48BEC2C77C6665FAB020448C251DCD60BFB3A4E550CB77E99E25A2ADA73DD20152440D, 1F195CFCA9068843AD8DEF994C697453D901C965A522D5922A1B3D218E8152EDB37C81BA315AA43094B8A44FD901FD3B -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 6D6908B5E35DA065AFFCB98E23B431269A5935A3CE860A0541500E57054948180E8470C1DBBE3FE392881A825D9E947C, 7E07F44177FD6B8BCE669B2912DBFA72D93A585C636089126EC7F8DEA2D6257EA55585C7B825686F70F47F411E67A0AB -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 4DA6B4E4EC92461721882A71316FDEDB56B9CB09E529990B51B14FB626B1CE06A782D8B3A5894A59E10187D7244D7748, 7E7AF99A77150827105F01103DA86CAD235CA356411A6786E399E1694A3C295122105F2A44AEDB0DDB2B7D453AF0D355 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, 489AE3D37FF6B471DC7A8FA3E98395AA9158CE3098EAB36E9D2C26B9FE0EC1F89139D987C91B5ED053C8FC9679D4F35D, 25140C5CB82262034FC16573F0949DF5BF0E168A0DF33C029D23AA09D44252AD5A4E66452174F225479450F5BA815F5B -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 1078AC814840BBF923AA0ACB1BC6FA99263B538E375644E16B187F3CF3DE8545D056A216BF32A254ED055BC3C937C7F3, 5D996604F12184FA8F0B29E819DA1AB9448B3C7595CCC86D90C1E1A78DCA7A5197F3C359F33F323927FE16D9C47D495A -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, 7CF3BBBD4EC9DDC7A6A67571DAFA9660630F48BDB222429549EAF3A0A06BE5F21F48254C48B5BEE290396AE92B485256, 18B1845FB0A1606E6490F23AF068B8441C4AFB52E6248C1D14F18BB0E0FA4EC5572838DD36DC22A93C750522006770C5 -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 28261A92CEF30A7DAF197346AD52808C5B38A9D7ED18722C257F60D006B440404E3A2E5C98A1CAE272D5511D398735AA, 40B86B28EB6D6DCE5D26CDFD165EC002AF498884E010FD8AC3EB54417138CBA56AECDF3C9D0EFD32C209A290EA383936 -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 33593C540A96186E65B1791E3DFE490F20D4835430AAD3AB4A5CB0E6A1AB54705AA99486F0FD9F7D7C40E82268FBF2AF, 44C1D34920F25AF9227EE39BE6992FBC246A87E3A148D0BD54D80553F7E1FECC5238339F7C3BDAB4D461D5E56F593FE3 -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 1F9364C52B6C261DBB7FDCC7E1EF99EA00A98904DBCA389A2BB212A5D89D25380487FDF16569364CE1E29CC0F47912AC, 154BF8FF35099DF531B1B23609DDBA077D5147EDC713A2FAA009C0E16EB826AD104B840C24C3D78DE57CEF38FB1DBFD8 -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 58BEB9FDBA96CD4E2574AF9263A46CFE5D4982B4672CE205DA972778B24E2A93B53106D345994A546971046B3C75C93D, 45F3442B26314B51A2C373613275BA0CF06921E2E188AA879289C95002DE96DDD265DEF2C4D9A6C60F1BC2A9926CFFED -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 66891415DD9F406B14DE71D6762A0D45137642C3353FFDA435F560574D7A0A365E9BA4887D57BC7479E14E7366DFEC, 86D40C0EE530410D7FF62C8A23703F7775320D7D9CE486E1A44CA52B9A50BDBE1702037EED58B93B6484D4D520D165C6 -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 400008E03F1E40EEED205AC5B166CAE28BDAF0FEBF6BCE97234C959E508D12B5C9749386ED5AD0468F7AF667E2035B72, 76437A7222758EC3AD97C8723CA490549AC55F74735446D507C9F7B9B0A96F72043580B9E51784013C3D388CF4482116 -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 52D9F5DA9CA2AF9D6F7342773D2A9B5AE0AEE8923E3C7340116D11C689B4F2DA50D95414366FA474B8AE8F7434CABDA, 2161E578C40EF034A5A542BBD0FBA1C57133BC561BC9C3A9B4F182D19DFC6E397C51EE0929D5691D2F804855146809A0 -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, 125629DE7B1670F79B541377F321555DEDC73D6885B36392CB81C8289D7CAFF4E69A6E0D929BC771BCDF93D22D8C9BA8, 3764386F110AD78C7F2AC24C75D33E47AB652AA13F58601122849505D2527591DB6C643049A1914281B961C7487B79A6 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 419C175031F2E4432BCDBACC96BAF8AF5F6539983FA9E5C756F98F9BB3FB4BEDE18BACA3C992D51484E08FC0D84E5E68, 2A99D6D5D0F82A11C462E7E620D33353E45BD16BAD6194F615E032A7849858104DEBF380B93D84DFF087126F6F5D7E71 -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, 200734D4BF1027496422896440E67DB29193CDAAB96996D36E649A246744C897AE7533BC2C52B38AD64211DAB80E3C85, 64A5ED72D6F10CAC7C3D50E7B4A542F6BB3D23E7179B60E787580E9BC1D93D70B080DD534C41CCF18EBCC1B2FD517EB1 -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, 3462D9C37BE38DA8A55041FA77B6B84CC8FC8D3B4C8DCE699356CB7EC460EC789ECEB4D9330FCF7230950BB8F5B0C24A, 7A604D471A4EF626CE08FC46E054DCB179CD4D71D0DEEA4668E7A68F707FD2832468FF25D0949822A12B2372BF4869B1 -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, 653328B84CB3082B8466468C8C45595B8F5EB3B2F1692C935B969C5049097B6D3FC02C05BA765A07AC8249011261F701, 190C44E9E3071AEBF4C0E04B80BBA7649EF51BE343D9F60EE882288042E55FD1D63B8450102DC0CC88E4FEABF07BA791 -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, 118CCC552EF89BB5F3A73B3038643C7B93D60DB00F8B2F8F502474FFAC1B22C16D6536FCA1A6C7BA0AFB7DA534BB68B7, 7816F2DEDA41BED930CCAA148FC488894F86A10722D1328A6500A49368184F9482F9413C421F122D1B6011EF3CC50835 -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, 690063232881B862F3B5C08992459F3355D4952D4507AC8E1EC6A668C40DA422865E164AF31B67BE909C945BAE9E5BF8, 60FF0A02795A70CEBF9F18B237EDA2D464EC45F9FB53BFD496D74423A0895225AE9139B16C5B4CE65E4C1EB25F473580 -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, 7FCE5E72B95411203AF1FF2A2282845E87ABB2ED4FE5CD0CF748967AB61DA8031148920606A73D7BD8E37AD74253B67C, 4CF1CDACF721302726C8533726D689FED890C4B5E6A0C268D9589F2C7788BBC2B54FEA5B4218F8D46093A9CA2FB92B92 -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, 2B9EB7A9D37A18657A9E96B5F5E407F3D2DC44C21A213D43883113CB7442421E7859DC18B66341C8A6CCB53F0A85B2F8, 37DB9865DF9D7CBE50A68A41D774438D1488F2B0D1C1C67DEC3B19551F61B41CCE9526020AEAE9658387624255DC810F -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, 24FA01B46C7637A7B696BD517F129F832DCDE112205C893B35A9824FA472057215A536CCA2B58BD6EFB7DD3A9915AC89, 5655D85C60C9B802D4CF6B20C451235809E9EA681450CE4D62127A86745DDF7DF48855C251DDCECD5EF20B92F8877CFB -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, 19D1826D48DFD334F8F37C2680831E2BAE87A0B49C75967CE13B4D451A19F05C6ABB5F1D709EFF3AE87FF67C26161897, 314CE5379245CF6F06031687FB23F398B42BF5F37A34233065BAAB61E17C34766BC71D0A3A44B6DF73FFFCBEC691D163 -A0D2E82CA5E358392DE9951D10B533E405FF396E226444B3B8F22B54A64B, 7ECA7140D8898225D4CAE7D0D44A3D514AC244F72A342C5A5D345C83A0CCDD859EDF3A21E88604AD6B539DF74A2B3EF2, 17FBC2E93721E4FC953F440A39FE8C3A6AC9809973DFE58B17B11EBB2C1D72AC89E6E3230E4A835ADDADC8AF7FDED530 -1E278B885F1AA08AB89BCBF57321F9BAC11FDAC4A672CCE1B2AD681FDF2E1, 7599C88F1C3FFA78046D45EA86569F7945991F05A9A68A9D58C8877476CCED4C717F1E08A88F3DE0D8179C9F49266483, 61EEAC08BF0A64DEE6182AFB70EFA06909D5F95298E16ADA8BA30C287F6039CE676C9A56CF33BA451A05BA980EBC8010 -5A76A2991D4FE1A029D363E05965ED30435F904DF35866A51808385F9D8A3, 150C748CFAC0025BBFF496FA30A754F7FE317623A516FC5BE988E3A44A7007C9BE755E1E7AB716ACA4890B1A1BA891CD, 2B6DA33675018F49DD357DB5CC414691ECEAE8181332CE3851D7A559A241887774E67176C9D327338FD3F94A056E8AB7 -10F63E7CB57EFA4E07D7A2BA10C31C790CA1EB0E9DA0933EF4818A91ED89E9, 300069901A994319C8E9480307BE15E359153A30C9BB8F3706A84404ECC3C82CFFB4D00FEE13B28F00B60A3C9F5278CF, 7E8974EE4595C57424C37A8C639C5BB80037BB84D80A52D7D95510FF23569325D75D419F6A671528DB466488EF0ECF7B -32E2BB76207CEEEA1786E82E3249556B25E5C12BD8E1B9BCDD849FB5C89DBB, 32DB393F5B34A2EE655D841F6D0F97569164E244678905A369E692CEAE1FCC94F1DF10ACCAC0774FB4CE8D47527D2E0C, 48FEE8B72222B151607950E67BAAA5D3859663ED6F7304D9EF3D197087231786354DF2F229565DEA6D1A699583A172F8 -98A832626176CCBE4694B88A96DC004171B143838AA52D36988DDF2159D931, 6FCED8B978AE27AFD1D0B12A2C9A2E7391DE57B722B30AA95DFC1BFB6A74DDD7EC584FE27FBA17280A60805BB0DD25AC, 1769F31D64BA6C1B1D44FF25BD11C97A5B0C3EA29924D972129C8FD650372693E4AC9F2BEE2FCB7C7AC7A5C3BE6CD471 -1C9F897272464663AD3BE299FC49400C45513CA8A9FEF87A3C9A99D640D8B93, 45CB35F59AA63FCBE154C61C5564E09A21903C6C5E9887092F5D5F02C1DBD0054B26500A955B56F8C7FBA2450314BDF0, 43C2576B9B2B6D5F77A14DC7966EC76CF6FC54ADC598195AAD4DB5EB248053B0CA1D2AF72890337C8FFFD53F411467C2 -55DE9C5756D2D32B07B3A7CDF4DBC024CFF3B5F9FDFCE96EB5CFCD82C28A2B9, 56618D762D955AD11A5295B07084DD3012DB47FCBD37F775847FD0A32965738CA432BBB0A2C788D33195290D33CB8E83, 1C4E76350D76D8501722ADDA427BBF4F1B23DF420824801DC9EB2762F4624FFC3BD45BE7968A164232AB00DA164EFA57 -1019BD50604787981171AF769DE93406E6FDB21EDF9F6BC4C216F6888479E82B, AC38B9D8B0DD1851B12C10861457811310C3DD25280451E94C6CECC4254D9241EAA8A3F9B9BF22E0CC52195F70173A2, 71A13F86D10546DBA6FB9D9A58B2905C6F32471DBDAB516EEA295C2335C629F585405A2329F61A6F1D1FED61A74CE095 -304D37F120D696C834550E63D9BB9C14B4F9165C9EDE434E4644E3998D6DB881, 722ADF6A217746BA3EEE4E4942C008D6B4D9BE8426297DE398A8003094C1D1D6A48B3D74D6D66D2A1EEDFF367639559C, 5231012E7F344D96E5BF21EF881E937B2340AFA9AF5A837316D44FC485DABF815A067B6304E0EC08AB4B80A7C3821B02 -90E7A7D36283C4589CFF2B2B8D32D43E1EEB4315DC9AC9EAD2CEAACCA8492983, 1F84393534F722FA966BD8A0AC7C838AD7E874FA2795CDA4B135FE779C0F568D2F827777F04050CE1C08ECC420AC9D0E, 3C49A6462A299D4BE25870AFEF4F9DAED4F45F7F0B762170BABA887A568255D3D77E3D7DDFFA0BF6A837142ACF464104 -1B2B6F77A278B4D09D6FD8182A7987CBA5CC1C94195D05DC0786C0065F8DB7C89, 38019ED975AD122B5DA8E4E5C111DF54CAC7BB5746D434F5C6EA767D17ACE62F3FD59E4C118AC4A4223D11CE5D6F7130, D8D099959E9906C038343801BBE5D3AFF2C5D88551B28D6A2D8A8EB104D030CC3ED457D9D4B36CA493B29A5F89158E0 -51824E66E76A1E71D84F88487F6C9762F16455BC4C171194169440131EA92759B, 6DD61BC2BB4A9C2640DD0B9CE4647C11926ECE5BEBB61851870DACA84B1F1688A4275B45AAF6FF25D8DEA7EB5116A60A, 5D7633F998F739A274CEBD4911D503544C206D0E82CED8BAB8B1A1888B15823C5B4B347D48B6299784C89974A12FA7C -F486EB34B63E5B5588EE98D97E45C628D42D0134E44534BC43BCC0395BFB760D1, 7D7738ED8FA1E2D3ED553ABD7D85DF3864CCA29C172D84E2C831F866E5CC7853C2C17232C6E5545102EF84CA2DE7505F, 6E628E2870D855C5E59A5258AF9A85552CF4CC696EE5D6B38EF7A9BFA6F1D366A327C57E73B7DE759F462C7D7A8335BB -2DD94C19E22BB12009ACBCA8C7AD1527A7C87039EACCF9E34CB3640AC13F262273, 8317259CDD582EF8E2CC499328D2B3DA27565FB1402F3BC73D3F5F8C9EE872AD21EC0D2FB55671CA43DC8B6FA51AE718, 8B1BD5D85D1F38BCFD080FF8C7794D5E6E6D9C9E5F246BC9578D3A12B63EFA7CB3B75FA76B679AEF2E38BCD6C604A3FD -898BE44DA68313601D0635FA57073F76F75950ADC066EDA9E61A2C2043BD726759, 1E98F202CF4DAA2EBFF609D35245E4EA121A8191CD69DA5B7E4C17490D025C0698D59A3A51929640C1AC5FF342DA5EE7, 1A2A60CF778A6C8D015C53BACFF6C437F05AB687335D72A16C4DED520E8DAABFE6B91ED02FE6C46B86298416E0C5FA71 -19CA3ACE8F3893A205712A1EF0515BE64E60BF2094134C8FDB24E8460CB3857360B, 460E2CF076C8679BE08274422A2E8262824FD39E782A00AAB0FFA654A5870183FBB2769B6E74831475998F0610BE6320, 2A0D5A394235FC799C6C68FCC42C10EB84891353D24E88525E97CD3E95C73CECB7300501C1AE29A703043A00C691C105 -4D5EB06BADA9BAE610537E5CD0F413B2EB223D61BC39E5AF916EB8D2261A905A221, 8867F2779BF2476F57989A629A267230387E80EEA8D887FCD718FB50CD3D70F3AB93516CC2933E56CF2663349609BEF8, 623986F764090896C4F8A611056C8B4C700B45FDDD4B9CF0FEE0D65944E191EDBF5EC8FA59BCFA4F845038457B4E3725 -E81C114308FD30B230FA7B1672DC3B18C166B82534ADB10EB44C2A76724FB10E663, 45899F87551764265CCB02F149360DDD45D3AC4CB69DB7874D8C570BA139297D8E3AB10C1284E060D19A64A804819138, 6F76FF2141E89F92F02BA9CC30001C6710403362C76FB800B090F4384D8AA2351C6B6B7BC9195788123051C0E8D0C6BD -2B85433C91AF7921692EF71435894B14A4434286F9E09132C1CE47F6356EF132B329, 886A4AD6156F8F9A53EA0C5E703CD6E9A033B580CA6CF7D2093F19E7C2D6C27AAE2CDAC266F9E952AF3070E01DC27811, 4870199A3A45E02E2BF1CC741E1E38971A46A415E1A5C40C39EA460D22E99C2DAD94C1A1D749B19816A89AC16CAE12AA -828FC9B5B50E6B643B8CE53CA09BE13DECC9C794EDA1B398456AD7E2A04CD398197B, 2CBDDF351779DFB870B3E5EDCE0ABD879808805254B0697101FB433C72FD32AF5887A6FBAD2D50996060CFDF6A5538FD, A464A511282D138559163F2AE33BA5F69DF788949F6677CF613EE6C451918AAF22F95D21D223631A348133A53757B12 -187AF5D211F2B422CB2A6AFB5E1D3A3B9C65D56BEC8E51AC8D04087A7E0E67AC84C71, A9BDEA5860EBF73D2FE6B0BF6F2EEFA288DBF9C53DD61EB909723027AFDEC0558EF8D893C46D2D0BCBA81B01D250504, E1F121F3767B4A556F3FB911C6EEEE1975D5D22ED08AD448BD90563C0EE098580387D38B26C70534E7B5D17292DE65D -4970E17635D81C68617F40F21A57AEB2D5318043C5AAF505A70C196F7A2B37058E553, 74A1CA01C3332A619719DDDA3AD364DB7A00C2C0129C24C7BB76E90306539DF364CF0C9564E7B10FFF5BBA8C7297146B, 84F39BE50EFBECF71FAAA0DFF59DF352AADA351DBEF2684F6D2B756951452DC4D0D71EC266474BCC08F29C799671E3D2 -DC52A462A1885539247DC2D64F070C187F9480CB5100DF10F5244C4E6E81A510AAFF9, 579C5215E2627747C58484D0B2CE7A76B4EF2F5EEC6B08FCD512DB24112DC6283D3810A5C0D83F9F5F32C1027616F155, 7424C8ACC739CD5284DAB6F43BA0C3037D2D919321AEA2098CE6A8B6B88B39751D07BF2C68D623C7F4636A78F7DBCEB -294F7ED27E498FFAB6D794882ED1524497EBD8261F3029D32DF6CE4EB4B84EF3200FEB, 8C6E0E7F944F8575EF338D8A2DDF3A64C412385A50EEAD4857C51814F01D7A43BBDCDDEE007BBA5B5723F1EBE55F1C71, 352A3491E288657FC0B3F6128AEA7F622C3D0D1041893032DEA7F52F8AAB544BC4C7CEC4F30D7F45DBF62A895D636534 -7BEE7C777ADCAFF02486BD988C73F6CDC7C388725D907D7989E46AEC1E28ECD9602FC1, 2367D391531BD6086D4B4FCFFFC8E0AF72A928D3D749C2264A8EA9D4EC7826491D651EEEE147A145A4B39A388C72FBC, 5D4CA21FA263E946362D33A033B5AEB9D71C6CC281FF18050C34ED0F6143BB9E2242B19DC76A0445FF056E9F86C98596 -173CB756670960FD06D9438C9A55BE469574A995718B1786C9DAD40C45A7AC68C208F43, 75EC04DE672CA211D134D553B5934D6BB0C58CDF9ADA95870AEF0F200C52FC701628EA34FF6DC4C574A683A1EF28DE1D, 36F6F59CFC188E8E9DBE817072379529E8B675BB6F45209E34D205375E1F2FFAF26D7E5A04E589D7C570C05E2B8528E2 -45B62603351C22F7148BCAA5CF013AD3C05DFCC054A146945D907C24D0F7053A461ADC9, 16EB38DF9AF8D5084D0AA52211A3F5CC11971D06234283A97F8FAE5051E8E872B165074834BC9B244D6BCB7D39235D9A, 7C04A33104BDC49EF539150BFEED420C4FC911CE671A727392B6DD2EB01A4C9FC293874F67945FE23CC0E7508984A0BD -D12272099F5468E53DA35FF16D03B07B4119F640FDE3D3BD18B1746E72E50FAED25095B, 7EAAEA0A1FDE07E51BFD112B095FEC2296C9F672B71B5FA09963E0703AB186E699739E263D1220E7E559E7CAF2F0D343, 4B71BABFF46E46534F500FAD2E2FF09D1C631203DBBE644BE97FF283E73CA27778A51454075B32E3ABD7CA85A6D7E449 -27367561CDDFD3AAFB8EA1FD4470B1171C34DE2C2F9AB7B374A145D4B58AF2F0C76F1C11, 64C9D1C149A7FD9A2687E4CF51BAAE31EC03A15B11B9F597BFC6615F9775AABD3F44EB69AA9875F63BF0771E626F238B, 7A26AC9459ACE38E188F9EE857C9897BD895DD12BF1C61F8F69BD6B0A22DCF7950F025C53F66632F53BAE813A641B17B -75A36025699F7B00F2ABE5F7CD521345549E9A848ED0271A5DE3D17E20A0D8D2564D5433, 33C0401237BDC65024A6A6266F7BDA34EAF14EB71A2056FCD674F95BB325FB9AB06B9718FA2DE1838797834D21D825, 2F23C869F307B29F44F4AB2D38611B1C4DEB4F12F455CAB9CFD5FECBC93BCCABDFA66AF19BEC028B0F76F480D6E492FE -160EA20703CDE7102D803B1E767F639CFFDDBCF8DAC70754F19AB747A61E28A7702E7FC99, 1A03DD298B426AF4B54F0310D10D74F3A56A908955CD44702A3304C985842A78CCA10615C6CF048B8A1F73B3A7659AC9, 6CAD24EE8DF168E3F9A3E05405D84021F6B1E4512B10B90C6CD73BFA86A315481259F83D89F1D1E4D6B97E5E68C3394C -422BE6150B69B5308880B15B637E2AD6FF9936EA905515FED4D025D6F25A79F6508B7F5CB, 424218F085396C5769961EB13361593B2C24249A04C279C8B435D671C7A7CEAEE2872D38786CD6550514F71AB7F5557C, 15953A1198D89BDD09F882FA9F219DC53DC6E0A091AA235EF6804727ABB0723ACB48B50E80EA2C9102B8F9DB406F9C7A -C683B23F223D1F91998214122A7A8084FECBA4BFB0FF41FC7E707184D70F6DE2F1A27E161, 1C1C362FACC334F33CA75F0F0B68BA7348314DD09FE17E12A635087C5A6EA2AC5CDCCCD98562F41965056B5FF76B1E0, 24E1AF9E302177F67270DFF934AB7E7206F02025AA4E01576C0F7C5E31968060A553C6897538492A6F12DADD7EB49DF3 -2538B16BD66B75EB4CC863C367F6F818EFC62EE3F12FDC5F57B51548E852E49A8D4E77A423, 475A8789D3A026F49EC8245E6301CACF9E60DB0BD1497D22E5361ED4BB01A19305E17AF4FAC760329FDFEDDE5D3B3222, EB5927D532E70FF784650363C8158CC0B85EA910F6203BA8C851A6052552B912E563DBEBD0DD74AE0DB4E276A0FB8C5 -6FAA1443834261C1E6592B4A37E4E84ACF528CABD38F951E071F3FDAB8F8ADCFA7EB66EC69, 1CADDEF4FAFBE0E419A115FDA9E7B96AC0BE581BD761CBDC76B1B16ED4D11829A1EE78A796BC4785F564ECEE49804B0C, 1F3C0D905CBD393DFF2C29B6E880BB300E1FD88538F34EBE5A25A72195CBD401963B129DC9C84222D483029EE9059BE3 -14EFE3CCA89C72545B30B81DEA7AEB8E06DF7A6037AAEBF5A155DBF902AEA096EF7C234C53B, 22791BB903F9310845A4F593EBDED0FE59996ACCCF72C448A1BB68086254496F5599E591667A48C23C24433925F7B25B, 1FAC08B0E49A88AE400F7980424A94840AE2185A6F967093DA79DB1980B1F93F7D3FE3A40C2153D0B696024D461BB5B2 -3ECFAB65F9D556FD11922859BF70C2AA149E6F20A700C3E0E40193EB080BE1C4CE7469E4FB1, 4BEA1F128FF817FCCE6F82B47F656DA3503FC2B9E1B127A2F0BA8D44BD044A3D27E096FBA06C317845C9DD976E660E3F, 2A0B4FAE0F1A6640F16E8BA79F5FA78F6A5FF575897CD7E7BE463799DD178EC5844586154A55381AD7B39B2FB46FE965 -BC6F0231ED8004F734B6790D3E5247FE3DDB4D61F5024BA2AC04BBC11823A54E6B5D3DAEF13, 8C36CE062D1D47830E451A97A1023F928E06167A3A929F434020A9CA148C2D083455EB50A2F7623B559373F2625A43A7, 4B5F3C349DDAE100CF2834FE08BDDABDD4351A5670BB3510DD8EF8461AE34AAB8F22B126C7612A08E0C3F070B9B2ADDB -2354D0695C8800EE59E236B27BAF6D7FAB991E825DF06E2E8040E3343486AEFEB4217B90CD39, 2FD9CA86AAFFDA746EF0F4431CCCB56AE3A5D6A1AB8F64E306D0FA1AF02BA681E4D7D87169A54843E987E1DFF9941AEF, 4AEAA8DC3A904E238FAC24BECEA61B0F74EF749DF0752AF888ACF1B67B84F4E9BE1573336A228F72E32946D203EAF37C -69FE713C159802CB0DA6A417730E487F02CB5B8719D14A8B80C2A99C9D940CFC1C6472B267AB, 7CE352AEBFB72CB141E54F0B62039738AE5B3247BA7F6537144DC70C1EC82556E2AE99582E56D11D526A675BF6DDEFCD, 5769B1AFA12C276513A733418F133BE9D7152E7798EFA805B300A48A0F78AC8C47C6409F2D0AF3A3313A73A8A784D64D -13DFB53B440C8086128F3EC46592AD97D086212954D73DFA28247FCD5D8BC26F4552D58173701, 21E03BEB32DBC17C31F0992ED7504BC76D4FC32886EEDFAA48F78907F8566266C0EED2F91275530D1DFD2EC016262629, 6BD5B0713B8D39615394F6E9990C236470CE184C2407ADC8113B8A1728040314C09DE681B12670A1F84F850752C07C5 -3B9F1FB1CC25819237ADBC4D30B808C77192637BFE85B9EE786D7F6818A3474DCFF880845A503, 129C458DB47F2772F81CE3F50733C78673E2640AC861465ED0FA0AE61B462537F514F54B8CC60DEC54B919AB13135B43, 342C29D2C0548AACA868397E77C4F53202B01FA7BBE3CB057977F551E117CC78744B3A4F21C12CF6F9001BCDEBAED722 -B2DD5F15647084B6A70934E792281A5654B72A73FB912DCB69487E3849E9D5E96FE9818D0EF09, 2121FEB2CB093080560933BE7645470F5E57985D40C8B1695F9AC3FD0735DA68351668A8804DEB04DA6EDAE97791D9BB, 2EA96FF215DAFAA9738C9EA9A55E7529B438B34546632889F0E87A43305799EBF40CFBF144234F03CCD39A85DD871464 -218981D402D518E23F51B9EB6B6784F02FE257F5BF2B389623BD97AA8DDBD81BC4FBC84A72CD1B, 330D5BADB727E7ECEFD8996C89B669912CF3424DE160DBFC75694210599E130481868DE968EF56E5C472F78C7EF220E3, 36F44F9C171A04C8D4B5238BA5E23C81D593C4C770A098273BB997B515DE32F21309672BE3247046BA2B40CEE7339188 -649C857C087F4AA6BDF52DC242368ED08FA707E13D81A9C26B38C6FFA99388534EF358DF586751, 86888B021DDEE5D7C05B49150BA388AF1D0DEFA271F289024E7E7F50F13F5B6401287A20D5BEB7D58CE681BF3AF7176F, 4DCB54F9A227E95ECBBDA9B9B4126C96E002023BC117CFCA169415ACC4E355C446256DDB97E4789BE5F68F41DAE75183 -12DD59074197DDFF439DF8946C6A3AC71AEF517A3B884FD4741AA54FEFCBA98F9ECDA0A9E0935F3, 2909BA7CFA9070AE22980E71296D8A4F6AE7DAC905ADC1DE1C33CDE78D86EAE78641E0E89E625C099B77E7F83FD6F3BF, 815FFEA7147092244459CC9E32E71F9DA0E663C29A5BD13E45E618AC7B88A436F31607F77A9DF31FBBEDB3039A698597 -38980B15C4C799FDCAD9E9BD453EB05550CDF46EB298EF7D5C4FEFEFCF62FCAEDC68E1FDA1BA1D9, 41EDAA88C79A0A7FFA35C96DA887D09DEF9ECA0150F8D9A072A468403C7080B81DB243798712A0E285FA702679727941, 1FB849F5125FA3EEE22AB2A0104CEAD1833C516ED552DF9CE66AAB8E5444938D859D166057EC442FAB0D4183183115BE -A9C821414E56CDF9608DBD37CFBC10FFF269DD4C17CACE7814EFCFCF6E28F60C953AA5F8E52E58B, 2D19166CA6C5C7695810F24EF87E5A90A6F318865A72F91271912367A080A408AB4C98D4B7ADCB8831CFE89883F8D916, 751AEAFACB5559F4D88F99B35C6E0F3B949C44D35B3754C4E9D33747CDE072A22A00ADADBFAEF6F76FBD328552B3D27D -1FD5863C3EB0469EC21A937A76F3432FFD73D97E447606B683ECF6F6E4A7AE225BFAFF1EAAF8B0A1, 42E780338099735A8CEFBF0D9DDD3E50A43EFF3CB1901538C5BEAC7D5A49926FE5397DBF829F87473F53C44FFD72A8E5, 8C5F4828DE01E3996466BC00E1A23B71B49DF1942FAD0B14679343A8D70C38D0A2E3C14278293DA0497307214E20C7F -5F8092B4BC10D3DC464FBA6F64D9C98FF85B8C7ACD6214238BC6E4E4ADF70A6713F0FD5C00EA11E3, 22533203A053D3A406A1F4D84B05938DE7EB2429F6B05DF2F7644EC2F12A3DB494D920E77D14B677FAC7D37B72A321F1, 7421C5779C7FD3A8A4797C9203C24E53D84E52CCB1ED601659F1D895FFD2085FF6D1175EBB06C73DDD2484812F2D261B -11E81B81E34327B94D2EF2F4E2E8D5CAFE912A57068263C6AA354AEAE09E51F353BD2F81402BE35A9, 488E885CE750CFBA23E811525509D931C8FCF6391B08A65E40E8D6C770ED0B2176CBA010667782C83CE2C14C9969AD4E, 7AF719C0BA489D64EC6A9F0F09D42756FBC5D77AA222921F7D1194D1CDD042371B6282DF56A59E2109E0802EFEBD0602 -35B85285A9C9772BE78CD8DEA8BA8160FBB37F0513872B53FE9FE0C0A1DAF5D9FB378E83C083AA0FB, 71B84C4B3ECA8CB1A11E7031AE47130B896BA9322913FAEB0D528055DF1C48AF59588F6FFD2A7AF34B786A7A048DDC83, 4DB9D497C7A52660E71EE696B60460072798AF1E0A3641828D79C74D0658BC79A00D99BE9B353EA616B30A0B0B632FF1 -A128F790FD5C6583B6A68A9BFA2F8422F31A7D0F3A9581FBFBDFA241E590E18DF1A6AB8B418AFE2F1, F0AD743023FC46E6897508D14B79D0FF3CCF562C13DF02149040A0B513680B602F854BD883D015897C04D0392E4017C, 77317016F47D7D4AE5844985A3DC0ADDCC2D434B3BDFEF9B9ED039A805CB8972B8A83A5F6EB1FE955DFDEECFBC530D99 -1E37AE6B2F815308B23F39FD3EE8E8C68D94F772DAFC085F3F39EE6C5B0B2A4A9D4F402A1C4A0FA8D3, 7F56F2146EB92C4761141EBCB99CFCB1AF0F8ED665B8082E4424643341DDE82EB5942FEE71D04007E29F494416B1303D, 4E0BF812648CABD109E4B1267951577600C908446305B4A9038F959F0BEBDEDFAAA7A324F259C8FDE6830B75CA1465CB -5AA70B418E83F91A16BDADF7BCBABA53A8BEE65890F4191DBDADCB4511217EDFD7EDC07E54DE2EFA79, 4CD1203281AF9BE886A65DF6266898432EDBC88EABF1CAB7972E5C106E56A70CF23A658932D14546B73665317883E700, 1642F0B6568A986C6CF3A0E6945391BDDF501DB7273CD4441D4789D9A270D32F0C9E7CA3BC35B8CE872B180FD00E376A -10FF521C4AB8BEB4E443909E736302EFAFA3CB309B2DC4B59390961CF33647C9F87C9417AFE9A8CEF6B, 6633303ACE612AD01B0FDA5CC836B6A955D96CE99CA0331BA975E07A42FD78E6E3E82C041482A44C84D77F1E86211FF, 7310ED9DE1110BA74FAEB58A61EEA8A94F50650B48B31A27396FA607019DE183DB9CFDA5C52BCBC741D4547BC9D859CC -32FDF654E02A3C1EACCAB1DB5A2908CF0EEB6191D1894E20BAB1C256D9A2D75DE975BC470FBCFA6CE41, 2665B55F80AFA38938D421DA824FD5C5B03F9C4C24E60B83D1A0ABF4A3C6C0DEC279776B4CA45023218ACD8FAFFB92E7, 3FDACCD02944BF2A807BE4E5FDCACE0F7FD5800240C33A51159E7A9946AEBD378A10216CB86AA30392F12F58DD8FD36B -98F9E2FEA07EB45C066015920E7B1A6D2CC224B5749BEA62301547048CE88619BC6134D52F36EF46AC3, 4C80358E7AAC813480CFF942A6F7C0E76CB8187913F4F23BFD7021FD99F669B151856FA6185F8D8873B3B68863DD23D1, 53A64BD073369C8A405E8E7691E406302631ED97AF07D0C5AC137FFEC86514F0DF51A525F84405CE797601669ECDCDA6 -1CAEDA8FBE17C1D14132040B62B714F4786466E205DD3BF26903FD50DA6B9924D35239E7F8DA4CDD4049, 4F52CD185040E34A19286A7577A051F2B25D3D80ADA637724BD9DAD75430C9EF938F7FDFEB36C8BE223B9A495F61322B, 3468C72035BB6C008B706CDAC8A2E7E48550CDB7192A5452DB4C38DF8D83AB546BE53083B49788FDDE159747D4D53B3D -560C8FAF3A474573C3960C2228253EDD692D34A61197B3D73B0BF7F28F42CB6E79F6ADB7EA8EE697C0DB, 837B80253E89273D33C3AC16DC5FD42BB388FA21F613C5C536B40F85516C514CED061C38D849FA34D454EB1C82215C29, 85A726E6F260B60622CD97FC5F1B7DA60C408ED78BEBB76F5D576B51CED77061DE074FFCF6DC9CB8C4B608310FA4CE97 -10225AF0DAED5D05B4AC22466786FBC983B879DF234C71B85B123E7D7ADC8624B6DE40927BFACB3C74291, 6FAFB2642DD2D24F7F177EAEFC379CDD946462262F61045919A3063270AA830F97FE3AAA5681B01F74DFBA0533D2FF42, 4F78E9D956982392C0EB34BDA7DBB0A7EA47BC7237B1EC68AF08EE58DB9DE4AAF39D2DB23F6CDBE3FF05E08FF3C179E6 -306710D290C817111E0466D33694F35C8B296D9D69E555291136BB787095926E249AC1B773F061B55C7B3, 9FD71FFB65E81346A6ECFFCC47D7A659B0E350CEE51CF8D7FF260BACC6BBE3CA2A1BC50EE796AC2156936C98C7ED4A2, 1BE097000DBB22754A95CBAF5500DCC3C8DF52E9D77D689ACB2F1549D8E11621809C4C56907F7E88889EE0A63822051E -91353277B25845335A0D3479A3BEDA15A17C48D83DAFFF7B33A4326951C0B74A6DD045265BD1252015719, 59ACAA29D80A75132BC9AD1AFF37723B928811E8482A5BDF49B42254EB6FFB1101821D7DF92AFDBB504A13A860B48BF7, 82CFF7586991B30AF14F8C57543C88DF79AD7755377D42D924B53ADAD8E2C18D27B2E9ABE00233ACF1027383129E4F65 -1B39F97671708CF9A0E279D6CEB3C8E40E474DA88B90FFE719AEC973BF54225DF4970CF7313736F604054B, 7C232B584EAA2E4D4988BBBF90B3D084F4C8177FD622AB2AF5FE137ADA10959EFF4BBA6CC329B27B4BC19835C7B64050, 60B0898804A0E75FA97924F621F1F132BCB8FAD71B90CF0BA0FBF71341C42052FF8E8D330EA8196E4044115EA35370AD -51ADEC635451A6ECE2A76D846C1B5AAC2AD5E8F9A2B2FFB54D0C5C5B3DFC6719DDC526E593A5A4E20C0FE1, 88F17F6C362FC1E4953BE5571ACF8A1720FE4DB57BA48A6B5940F0D653574D39DC98D88E04D69468DF5B8F3829877E82, 191F38D4AEFE51066F45F0266B33C9D07D2354C3D8EE2AEBA0F250005C90054177258EB8A9F1FE31B8DFD03F5CB17CD6 -F509C529FCF4F4C6A7F6488D445210048081BAECE818FF1FE7251511B9F5354D994F74B0BAF0EEA6242FA3, 57CC7817E2F94F0D9702C1D962446E47320FAC5409475EB6274F0CCDDC3A29370FC22F419B13E0FFC1966666E08D4C52, 3A86A909A3F7360A95D7ACD0214FCB4E334651FAD652A435996962AC618853572EBFF68C29760FF44C8AB69F7892A4C3 -2DF1D4F7DF6DEDE53F7E2D9A7CCF6300D818530C6B84AFD5FB56F3F352DDF9FE8CBEE5E1230D2CBF26C8EE9, 61A3A4A95D95622C0357D26672E6E12EB327A9FD349A96F73E1F5EE9E96899424F2BC17B375A731DFA90200EF623D1F2, 81748D46965B2D8CEB6CFCFFEE98BFF0B0E4483F37DB5BD322ED4F7CFCD36271285077D4DF251ADC841BA88952A948F6 -89D57EE79E49C9AFBE7A88CF766E29028848F925428E0F81F204DBD9F899EDFBA63CB1A36927863D745ACBB, 305D3721740917729671DF73DC35020F23F715B397617376172ED96D45F44E7F33640752FB9D64544CE1F320395C2A4C, 5CD5BDE2B9E5BA705BF0B34F91B31D6B7272C37D611A0EFC88CF7A42AF2519A8800A4364578A588F832A95909BC761F4 -19D807CB6DADD5D0F3B6F9A6E634A7B0798DAEB6FC7AA2E85D60E938DE9CDC9F2F2B614EA3B7692B85D10631, 387E8D62812E0068FA644CCE59C54EBA35BFDFCC136BCE0A8E4C283AAE3BDA5D8D3B9A221F4F6A89ACD28FD9C1FF0389, 7BDEC86E0A17B9D4E75FBA68DED5C25C0F782A871D3E8B63902E3260AAC44A72AC16D45A4A19D81C230B663CC0E1ECC1 -4D88176249098172DB24ECF4B29DF7116CA90C24F56FE8B91822BBAA9BD695DD8D8223EBEB263B8291731293, 4A2FAC28ABF3A76F118849C7A996BD6535D0BA5F5077A01A93FEB2402ACD43E0A460DAF69711989590A366D9615340A5, 2A845B7FBFF5AD06419E13C799D85FC18922145EB12B82BD566DD67ED02C4C5EB9D4F5AD89FDC12D573154B5C08506AE -E8984626DB1C8458916EC6DE17D9E53445FB246EE04FBA2B486832FFD383C198A8866BC3C172B287B45937B9, 886505B057D4BBC88082083695A38D3A9156FBE9C9A36AAE0DDACACA8544026FDEE78344254065E3440F0DF4F8693770, 2D946F3D4EA59CB611E3FB5CF2AD93B43511E38227ACDE5D86B80F45B984EBC0B4975EC014DBE9EFDCFF6CE9EEC71EB6 -2B9C8D27491558D09B44C549A478DAF9CD1F16D4CA0EF2E81D93898FF7A8B44C9F993434B445817971D0BA72B, 2C1F08EEA9F2D8B2C3CD4F946B1835C26CC26E486D2085FCEDCF133C61195153DF8B4D5A0D5D996BA96FEDA688C48D37, 360A164F761E3B1AE9D833C2FCD7C3292E60A5F6DBB152752DE1E6D2401C6ED07E72CE1589A83F0126C790F630D9DB5D -82D5A775DB400A71D1CE4FDCED6A90ED675D447E5E2CD8B858BA9CAFE6FA1CE5DECB9C9E1CD0846C55722F581, 37A07B66804BC670CF8E5B96518A98AAE8BEB4FA99D26FF8B3E4119855FB3C69F729B8D23F5DAD4353AC6CAD40C7714A, 535894D48718BDEC4E76372D4DE0CDC2525FA3EA8067C52042E908F4EE908D442996FFFCA717EDDB2A1C534CF505DF87 -18880F66191C01F55756AEF96C83FB2C83617CD7B1A868A290A2FD60FB4EE56B19C62D5DA56718D4500568E083, C8BBD57DCBBFCF561ED2615367108DA7710D0B3B09236C70BF4D7B4A3BE9A5C580ABA0FE03EC1AA30DA5BF21AC12637, 837C4D71C3D95D1E783DFFF2A4214B8EE74E3208500B47FCE0338F9FD2B7352774001F62834DF0B30A901715353EA56D -49982E324B5405E006040CEC458BF1858A24768714F939E7B1E8F822F1ECB0414D528818F0354A7CF0103AA189, 9B79D093D9339AE1A0F3FB8BBC1DDD80ECD9BCF3F26C546E2C315E597F65BFCA896BFF67FC4DCF9DEBB7D3AFC153558, C4D151EA3C324FCE4794A432566E2CDAB4A012B770208FB9EB14B871842E79EE99947C77017B3AB9FB5F099841A82AA -DCC88A96E1FC11A0120C26C4D0A3D4909E6D63953EEBADB715BAE868D5C610C3E7F7984AD09FDF76D030AFE49B, 155E1A8A7F2C061180442784CEF0C547132650ED40F222FC645070A647C0CC8400D746245784B0C9734B94E83078C9C2, 5930C637C48DFDD92BA86AA8B13DB14DD6145C76DEED6C7A344CB6A369D4DB7A6C2B3BE93F4D065114849182EAB30A5A -296599FC4A5F434E03624744E71EB7DB1DB482ABFBCC309254130B93A8152324BB7E6C8E071DF9E6470920FADD1, 7CC79FB9D895F569DA356B9B78A8411953402971D24FC46AF1F3D5027D15FEDA328FEF9D4F5DC501DA45492B68645CC2, 5B3B1D163C2CB56448A7949813E9919B899DFCFCBF00FB3FD067ECC812109E768699EC528B6904508B723F35D94C185D -7C30CDF4DF1DC9EA0A26D5CEB55C2791591D8803F36491B6FC3922BAF83F696E327B45AA1559EDB2D51B62F0973, 6ADF4FA10E796C66F4FE9EC137089A1D72B7235C95CE6E847C50D9AE22A6B055951850F3C74597B2299220E05DEAB1CB, 75487A7E4F2E9F95417D338AA649FB8CD05112301637C867E0929ADF86533178D76BD34071F0AF6CEC1C1AB0D1255C65 -1749269DE9D595DBE1E74816C201476B40B58980BDA2DB524F4AB6830E8BE3C4A9771D0FE400DC9187F5228D1C59, 4B7092B1702B3D92CDE39BA22177939DA45A2A3B29C3CEF457BCE50F191BA9D655E6C9BD013D09A013F1C3775249106A, 7B5348B7472E448C685AF85C507CA825DF4F834185A668E87CABFF88B5F154C20A64CA000EDC299F67DD1CDEF0EBD670 -45DB73D9BD80C193A5B5D8444603D641C2209C8238E891F6EDE023892BA3AB4DFC65572FAC0295B497DF67A7550B, 66D2DE8E2D9C3015C59BF3133244F50BF051E76D665B3E410B0EFF41187610A84177A5D5F3299FA0736DD7DBB612DD0E, 4677CB391208B5BCDDFA287ABA08D6CE06D210D7773A8E99481FF49573EA915C5542740CA4660351B71BAF71E0FF1811 -D1925B8D388244BAF12188CCD20B82C54661D586AAB9B5E4C9A06A9B82EB01E9F530058F0407C11DC79E36F5FF21, 80A9980E3636D9AAFF6E1FB212A08C65AC6888CF74BE789D6323101A20BA69F73A87C23EB70528FD155C3BD7E6660F6F, 406CE67A7A2BD8EEA2FFC161ED5041F238E5A19DAAF2DE057158B93E22A6FBD8D3DDC3199882487664634EAE6F8AFD3C -274B712A7A986CE30D3649A667622884FD3258094002D21AE5CE13FD288C105BDDF9010AD0C17435956DAA4E1FD63, 3309B6C874FB4144535E0EE1EBBC66CCAF7CA4CD1E8D22BC451FE5B1F6AB94160A3E2F95D1C0E62DBB2DACB8BFA1933E, 8839FC73D3BC3ADA33B02DB064FED8180F41D3B6156CA75DCF309B2B9883FEF035CFD9B0A5D52C212D8CB8BD2919CBEC -75E2537F6FC946A927A2DCF33626798EF797081BC0087650B16A3BF779A4311399EB032072445CA0C048FEEA5F829, 88CC3A2E120FB762085F0FD923284AB0BD35DE1C4375B1E0218568BC31C386F65B0BD55D7E4272EE6995487DEBA82D97, 84F9C6C1C4250428C2D7A68986B998D26CF4BAA300D3EB3CEE83E254436A69DACED5257056DD88D57D075CD4C201E74B -161A6FA7E4F5BD3FB76E896D9A2736CACE6C51853401962F2143EB3E66CEC933ACDC1096156CD15E240DAFCBF1E87B, 6162DB97F74C26243635B79C90D5D5A997A28413FD061535A94BAACC004C6F2D03442C34611334D55FFBC7CEAAAE933A, 4BF723DC2E934FB644A697EF5CD0055845B9057C0140A0A3CDC8B8D746919B3A546360E0CCDF5F44BDB52CEA4314C0E7 -424F4EF7AEE137BF264B9C48CE75A4606B44F48F9C04C28D63CBC1BB346C5B9B069431C24046741A6C290F63D5B971, 178125078553137EBE68650A022FA79410E9A883B0E070DC9E518BEEDC7164ACABD36039875082F4C782A90A23CE726, 307AFFDF0C8037BFEA96DFCC706AF489F1CC058D6ADE2A3DA150CE275ABBB5ACE655C48D35D14BC1FE9A9E502BD49E43 -C6EDECE70CA3A73D72E2D4DA6B60ED2141CEDDAED40E47A82B6345319D4512D113BC9546C0D35C4F447B2E2B812C53, C202C43322681BA696D9224997B38DFF1729603F69F598217EE13DFD5F247B56CAB61E9C8377FB462F960E82160FC08, 72200EA1482A676D83BB0E35234CCD53B3987568AF18AE53162F400347E5E057A4A6C00943EBE8A09BE58BED60DB15A7 -254C9C6B525EAF5B858A87E8F4222C763C56C990C7C2AD6F88229CF94D7CF38733B35BFD4427A14EDCD718A828384F9, 21CDF452A998EF7726894BF471A0DC17CDBCA151C8880E2CF2E5F20A639D52157572D5EE806817716B1833A52AF12F65, 83038821D4B89B6CD748777DB4ADDABFCF8ABDD8CFBB6BCEB5200108342A479A0D2F9C8C1BA6063FEE4FFAC39C8C0C79 -6FE5D541F71C0E12909F97BADC668562B5045CB25748084E9867D6EBE876DA959B1A13F7CC76E3EC968549F878A8EEB, 41B14A5EAA68C129B5E4DA4E3B6C7ED87C88D92ABD6AD6FE21E5754971E8A77BDCABC0477C3B89C01BB00D47EF51C55F, 678A8FED7C99BB3A255E7F8FE551D07908947EB6B53E4654CF90FF9430C4BE6A34EFF577F03554931F8FF31D3F56A458 -14FB17FC5E5542A37B1DEC730953390281F0D161705D818EBC93784C3B9648FC0D14E3BE76564ABC5C38FDDE969FACC1, 79D9B81E935C25B93D349315B8FADE5B8F4ADE34127BBD24C3F752C9CE4B3F620AB2B1564C2D3477B57DCC48AC5C86EF, EF6B370892BD38DD237C33D96A3F6ADA1D57367766392F4F6221C59EBA86B2DC786A194E9D623BA18D6CF5BC46C0EF2 -3EF147F51AFFC7EA7159C5591BF9AB0785D27424511884AC35BA68E4B2C2DAF4273EAB3B6302E03514AAF99BC3DF0643, 34F29DE6CA93095FF989EAB9B8E20C9B0421976C74F8BB17C89CDB5E9B8DF5D6A74C449BBD9BD906B2F6B31CB4A84D4E, E0319853DCA0EE78757944B0FE52F5E03FCAA81D4BE3D6EE24F4BB41C87DEB8563C692F7B5DFA3C74C2601C3BBF8546 -1.3.36.3.3.2.8.1.1.13 -1, 81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822, 7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892 -3, 8DD87E12B0A4CC436CDD42543F20AFE907C80EF3BC2459309C09CEFD830151BC1F6FB975CEECADE4780AE53E1853D62F56E34ABFA9AC7205D4ABF882CCB8D94, 26EF5C6E1DAB71D756FF0067376FA7543D903B4A6334C4BBA0B382E1716D843ACDAB8EB772327B3FEBFCB69C0F37C5F8CCE5BC75D8DE6495CDEAFBA05B02C37 -9, 595B061E1AA360E8CFE49337D863265DDCC04FD8188CBFDFD9CD604C8AAC22754492EB78493D967171D60DE7D7A6FB36A0BCAAE472B75DAA973C40B0FBD92C64, 6A3FE9031A5472AF2A410F997AA69880611A61CCB943A00488A0A9FBDE5BDA3C44B2058B82BF9CABD2A2CB6FA4D26A1E0AC0CD086E05B92F904D51202DD6A26C -1B, 29CE5366E6AA2BBEF1F5662B66ED8E9CE3E1E88B70C89C47870F281C8F869AFE10DD934B5ED331D4B21F06DFCD5AFFEF4D421BE9021EFCDF211200D41EF2DBD1, 6432B5CD342338D343E9082618C23FE6FD1C0F1B72C56679A8F6677F60F5694342F49C623F3772BF3BC260AB8312F77669C623628317DF8FE94BD5B1D3137AA0 -51, 8FA02835FB3F84150FFB94F97E86F499F7364D371F004AFF2DACDC8D44610420BC60395B57B0407EF221C3EFFAB90E11DA2C016F14CBCF8C63917ACE9D0A39AC, 652B5B401356F83CEEBD59D8731585663E7F1F8F912CE1FEE3905CA03906DDD8B8289628C4F7B2967E3FE549E705065FBFF6564F0FAFEC1F5FE48F7AAD4A3F75 -F3, 5C2E751935371832C32F1E0E7A56EA6DB55EFF2F23001CD2EB032D5AFF7FC843E6F6C55C6209562CBA19311175BC194252DCA3E82DC41BFFD4D26C1F096877C0, A55E62C70AD8B968638A26E0AAEF24AD6F50F092B5844311D2541024173268F1C838C6B50F43F12D0F4B3B253E7AD065AD5CB1D146B1B634241CF44D75C3C5B1 -2D9, 67709DF58E8753E6C505710D91EECA9CEBE64C2AD7ED07BE3A22518AB04FB853552D4CE5ED1C43AB46325CDF98ACD9E604534E9D65E39F41AB715AF3DE90EF0, 748E5623ED68DDE79253A0F1A2C13798839B66DADB854C5C987E9E114A4EFA5C21386B5C03CB1CEC3DC50D4E75400A1CA664CCEA8C9F4732F7FE294835B40A0B -88B, 8C5A6378CFEB835CA074A3EE324CC3DABED34E4F68421321CF4B731724ABD3A416EBC110E3A44B990CE81080EDB7349F30F6A825008E3BFD408B8E8CB7738D85, 29A052154267222B7F3EF77F3A8F86BC553CE4B3A9FF390BBECEA990AA95BB4017F083F8CB108C281CCE8661D0B3005C97C037111121484887300B5493A825BD -19A1, 64DF2D806F6BCD280F7C8FD4B8CED5978C84BEA5DFF634D29143CEAC392A3BFE7A2B47C6247D379A2ADC52A1C3F0AE8802B37B723810819946423C57045325D5, 60495619354DBAFB01698299A90536B2077FFF99F0FB5423218D3D4356BEEA61C802273C87667B2E1E0FE4E149B1AAF47D5DE92B5AD0678773CA4F6CA7DAF4CD -4CE3, 80878F6DB764464789B140E550C74F8DC1917215785E4B8B1AFA2EEB5594E0ABBFAE9FA65503ED93A1CDFEEB24C692803E2DB9405D1EC198C34F77EFF180CE34, DCA8EFB8271DF045C5AA6375713E80C1DB8776DC826088D0077F4BBFA4A20E668D6E199557FE3939308A7D41175C03DCB9AE5C168AA6558394A1EB853429BDB -E6A9, 1C15BF4DEF177D32AAD5DFD763E6160564969884107841245E0E09D91A6D314092F93D33AB902D5D551C9906D556C87AAAAE2DD68370DEDED95E34F417945284, 7002BE6DBFFF944B4892E4C1ED745ECC9D291AFECB07A213E4D6BFBDE9B9CC0279638B48C580415B5F5CCEC98ABA98869CDBC230AA9EC9B4BD0CFE73F59D30BB -2B3FB, AA335B46E2F719A9C73C165D1B6ADD909C953F1C92DBA2B2B865C70BBA8B85AFFEC0BB38EAE602443B28DD256592E659B250763CBE8C0764EE2617FBF168BC1F, 2930A8F39A42A391C6E8BF8CBD62552A4F81D15F57206917661B0AA90C9574065FDAA757682E4A1DE1DE63C5F2BCEA46F3D40CB27B4D1FD7B21EBB36AE52C0FB -81BF1, 3B1D359DE582897BC93DBC4CEA13D21AD1D024101B0334BEE7D07F6AC230CAC8C43E96A93BAED69A71BDDD7963756587727E7798B421308412A313829B6EAA9F, 7003F9AD66D0DD5148F0C592D4EBE1EFBA2D3D6BCFDE8F2A88132A4C5167A5DC68310567AC57EE68530B04DA334A0133373CA1E6B41F07B9938FFDF0A22AEC7C -1853D3, 725282DAC295B6347826C210A12A652AA93C9D519B573B23A345787602FBCA685CB2D6EA3C5A4B794541ECB5FC3EB69E916858B553541BF9ECAF5CCBECE5F46D, 1D184504791DF2747E364B9AA65B599053492E4B4E088F7BBB2A78ECEBA35C08E43DFB285E931F9D35B100523DCD65682C141ED90ABA50F6013A0821CE1DE64F -48FB79, 1E4D324D9A57026FBB39A4684668A690CA323E54A31BB33F2CD24E90745F913245A581989EAD990A931BE921A4E8A5700FFAD0565DDFA7D665B34B395AB292B5, 6D762BD1E2911C87CFCAC077428D82D6034CFFC99B473FB458AB7B8F7D49A307FCCD4FBD0A9C919D9F830DAC42CBA1A31321838EB2E7E12ACBCFA2C10653F547 -DAF26B, 3D2FAC3B6A1F8B86E6180181101A2AA2EEA1DFD9F92C25B0D6DC57D2831EECC6E04C2039E07C73DD82B8C7E1EC1203A3EB5B7B6797CFC085C4AFF7D18722C3CD, 2F09C5C8E0374E96F24DD4B28E407E7A7D8191903472E4EE1540230773B973A0531D8252474CCB49698671F025F9519C7EAEC360F23FA1FFEFDCB67FDE922E4B -290D741, 390EC47C221F589D0DA0C12B0DDB9C0923DCFD4F9626D863C266B23DEC9F636C9CCBC54267C4B90AC60A0F25399F98D8C47BF3E15208C1017D95EED24620FA23, 1DC7DE0834EDB7003CAE253E4CFEF2ACDE2DED74EC2F04DA6D8B45CBB883BD13CDCDB1C935A9B5BFE11D8D84337ADDC268B956610FD829E72AA79152A9799F4A -7B285C3, 5E5BEF2CC8FAD779A49D32E398D7922BB96C5AFCAE4C20BE32DF67352C0AA2B04C945577A170EFC468F5B7322833783A6DE10A398011EA5BD531455C0987B227, 34DAE68CE2FD85AF6C6ACABFCB654FA93ACB69C284B1313CE422481C62738F43583B84F3A91F459314CEE565B42F36EE82428DBF68D610639295041C24A277AC -17179149, 3078FCD26B871ED744913EA934A13A1D939DDE62555714CCA62B84D18F73FD0265025C819F41D7FEA4F6DCC640302899BFBE8C233F28A3D07F29307FE88D1267, 8CFD6736F015A7D34192AB9F6B61EBB698A81E5C96FB0217A7F4460EA248F90CC9D4A8C7ACA1C4EABCAA7C9F539C1771D6643A037B8B24843AE715FAD735C146 -4546B3DB, 4E063E73C80DF1F7649D742FA35BFE6576345C9402F39CAE571DED3207586945BBB7AE0C6E11FBE0DE5FBC8C98C168C513030FB18B4553624085D635B4D055D8, 87FFB344E1B1ACBF06A5D034F05A72560476E562A6EADC6EE1E28D2005C4DAE5E590C44325797F351ACD659E3BD9B9AA83D9B0ED3015686F86A21A0E05AC60A6 -CFD41B91, 1BD845D0BE3A5E4901AB3C2854709E8022D9922DD65A3048A02722E3448F2260FDD7F5DE515AE08C7E204AEF60732EE5CDD50F669B13375AC52E0002C1177A97, 7A6B38A6C006F2EB1C0163639924482ADC50F95134C9A051A58E3056E4567D51E2BE1D9AA70B3E139DD1D53F5AD0764C64542FBC16A7CCC94EF60C20444BA812 -26F7C52B3, 76E870E1E91445963C79B1302DFC3EC1D160EA53EE61FF9E9FEEADFD6855F644B15813037EB3739140D8FD8CEE6BD7AC6D16B9514D57FEB5438B7A2E0341B149, A2A386B1BBDDD6D918810353F829F2033DBFE92393A2892D50BDD1AEFBD10CB8D2CD534E38C37E4083C2783F960E596A894F246CFDCCC649DF25EAE4A5E346D9 -74E74F819, A0DDB791DC4F244EE29B7E97FCC14A667C716F1D15A1885A06815523177A63C4B16D1A7C84B87B9E694434702EA021CDE5EF227A8BE72C4AC6635B7470DB1AB3, 40524938FF3005F41641AB65DB2B68B9A4B63486BE2F2DC6586DDAD4EF15005F19EDC1144B4CF13C4D8F57CB725352BB512B14243D9E94F5191FA017EFECD8BC -15EB5EE84B, 340B5DDFD30B076A1EFA9FDAD2E82AB064CADB7F4834FD44427D3E26906549E9EBC4495CEBA142DAC058C5C3EF2847C07ABD18B4FF9DDA11612603061D33F353, 44957E2EBE43B52BA1D30D4AAD5C37E5B1E62ED2DD49BBCCB3FB53C377212A16FDCB5A1BF02EE90F4F8FCAC2159D5FE465346362639BB5F649E0A67FB0AEA84E -41C21CB8E1, 410077F0C2655B620F6D94250688596B09FA6C60B9BF0F09AA32ED6A2DFE3907E2406DBEC81143FB9F4AE22E3A6C51FF1A296C2422F22862D4C7393F80D817E8, 8D58D98F0A6FE3C8557B814D0008686E9A248F3EE814AB89FB92C51ED45292FAE1DD6E5942245B09CA4B30DA73D9BFF868AE18D2C0074DBC4FB52D5398DA61C1 -C546562AA3, A05AD5730615D80EE751DB8C87CEB542AEA4F119091572AEC2E217B2ED52A5587C06241C4A49F587664842749684EBF9BD315EEE7C4545689889FEFEC7B3752, 2EA2994CB88E636D413619333005D6DE3D04914C0FE3A560018CCB6E72C1710DF8A3745F2613B2D775E6CCB43FAFD2CA31F2917437FFC06D6386DAA5F2139495 -24FD3027FE9, 7490F9791C6216C60FC31880FB828B452FECC2E5B16D47A8CF43D56D84FB77D6652F99F92D560C3E7205A569521A7B057E9E0CF8CD7CB60061E9FD190B98F55D, 621ECDE8B896C12F7B31580852B4476B06DC6F723F6BF1AD2F04CD37291F27FE909218451A139C2F93322011C3966F5B420AB984D8C82D4FBCB623D7BACFADD3 -6EF79077FBB, 587980CB277D6616CAD2AE6DF6BBB50C59EAC9C0ED19E1E2A2627769D3F8C7BE5ABB78D58CF1EB9117E92DF9376C95D7DF1B95F9163345EBC670066642EA37F8, 96FFD3DB2D393C9BF11FC997E78B6659C2945CCDC1C425C34CDE886BBBDD40DFB106D138AFFE1299FCC762382A02124CB8E883B1758CEBE0D53525C0485C5596 -14CE6B167F31, 4AF2F1FAF9F5BFC0A22F83312409A2301353145EB0C68BC31D1000177D41FA9B9BB6F282C611FE03AD21FEE9E0E3104C97EBF5E4855E73BEE9C812CF01139EA9, 8834668E84945A419616CC4D8B9B7F191BD0DB9082B2220D994ADB98A4C45D575014724A227C080BC1588CA3F3BBAF40D374AE53765EF07CF2ACCDE92A5ADF6 -3E6B41437D93, 506CFD2ECC29851E2086C98170E6A9AC787A336E66A6B997D217BA373330D43015FCE3B17B39CBA76D3392633CDBFE73103349CE091D785ED4CF473F30BBCC0C, 1B6FFE2BED010733A18C75417A0C07B0D378A4E1F6D13A100B8E4723C054FF1C50F1132EE840BB9B3685B14A365B981C977AF8BD1E15032B167CC635D8D1E45B -BB41C3CA78B9, 151E50084C54A4E3F645010288EC9C8BFBED4E9CB2E36364B24D2EC9A395DB7EE8FD435E549DC25CA945ADDBBDDCB46C573E02BBEE76413129B0D0585B888642, A60B566E9B472E365BE4FBFB91170AD82080DE672D19E9CF1A77E83B8C689F0DEC0136FC1C31F89BFD89969075638DC818963AD81FF5B272EC8874889ECEC184 -231C54B5F6A2B, 6F159C855E5A69127D49A3C17593BA45AE27A8DD9EDCA32F640B83BC1732EB75B8E5A9506783EC7F84DC15F7BE360C6605EAD035F2A1D80397BEE6BAE2613B60, 5B4033511D5B7F36F2484FA181CBA856C17B71552C56351F1557571EC92BDBB8651EFA145645F46731FAA3006FDB1B0B70A23BBB9F6362575516C4EB72A58C2 -6954FE21E3E81, 921382E7E81F1F8D97E93603138B1541F1450563FD096AD9ED6E0FC51180F7D4B02B76ABCFB6F6C64A676316D90CB4DE3977C24D946E64FCA2A6E042B91E376D, 121CF87A932E377A139CEED91DEB28D8EEEBEA9D7814D4AE695FEC734180AFD6DE2A466B0435C09A26189155B7EF0B5CF5AAE7228310CB32EEEB4132C0DE7E57 -13BFEFA65ABB83, 1C8A35FEC3DEB8B32B289A2E63C8F42EDEC682CDB6B15486A3408EFCB834D29006468F11511054073560044E57CC53680110910905F81167F55AAA297F55194B, 4AEC4C66044F8D5AFD38C3C993CD5E6DD9F29FBE647CCAD22F64EBEBF42B58A7760F84289ED45FAEE9E4B99C7DAB8297745EE4F766E16023E2332F69E72FCA26 -3B3FCEF3103289, 18A09D2E663A79F343F59304B649767B46B88C8F658A1651A64DAAFD0982D5269F69E5EAFEE1333FD7F65436805D351560E38F10CF64A189063A1E30318E6C80, 6C7F2E1D1E0D51BD5F569C8CB92C7DFE9A746C607425DE0EA416CECB94ACB78E36BC365B130EC33AD6B4F899CD9000A01B5F26F2EADB9F270C3BDF8CC1B781BD -B1BF6CD930979B, 1957972CF7A9118D9655F28CCC8759EF45039DFDD3FC558520EFCFEB6E39EBA5E1C1CEC6EF45669D300C6020B37D7BB70221E2E6D3A14195B7710A59342D5DEC, 1D04ED37DF0538084DC7020047CB3F8AFB97E42833D62FEDF635FCCF615D5EDFCEB9F967E004B450C92361726852A910A0E01A44847A2AABF84E09C44EE0EA1 -2153E468B91C6D1, 1DFE29C9F8EF36ADA950FC5C80AD943C8F3F1EABAF20F80AEC19519DD9D7CFD563FBF6BFBE6E01054E57B468C6766CCCFA4C9C33ADCA8577EF47F7644A10D733, 4677447DCCDB2EDD88D47D79FA1F74B8B0F18313EE5CD91C0C13642A8C9EBF91BF8CB8F79107751F14774FAB4E968CB08DA7BE3BCD5C70344ACAE03B643CFEAC -63FBAD3A2B55473, 45CA8A0F7C5E5A4426C67AECF12D57E09754A32F1F5B0DB9E5E21BBCA669DB8EBF3E507F3340CA53FFEDE64783B4A0CAEDBC766CADBECCAC238C44619AB3F374, 7D2FE782CF87701E37D6FEE5E513975BB83B5D537E6B732F6E46D66F8D1F4CF9B05A9105FB08F4ADB5FE9CE8F155C2DCD1B704F3FC1A08DB2129372BCC665196 -12BF307AE81FFD59, 6654E7E2EE1FF44B423D718041D331E716004EC0C4495C9E7A5742FC62DBADB6226C78E6C679142882D6DFC6CA0177D416E2EC26A9385A1A348C1A286FFB4524, A6510EBF134C905B16A10E9CF8D2978047D7C83081FA919B224BBC45AAAFCA505168315C8515163A74DDD2D33A2C1C8D0CFD42B075A1E22410D96C1C7B1B32E5 -383D9170B85FF80B, 7CA98C34B013A3D48306892DCDAB580E55F2078B258249CDB0442AD6703B458FCCC0378EBFF6657593A87465641D5BE44D2A934971104262A5AB47AB69BB7597, E3E86659C10F1B72303E7AB813D964CF079C4F6603B9C16588E3D4470199881DC90AC343E9422574FE4F2D8F2DA7C0B421D43FDC2C687C712233BC9803640EF -A8B8B452291FE821, 7F85A4B042E181EC1629D2462B45649B1F22DAF076CA4449F18D720E7B3B08FF91880DDCC79D7239A7CE1556B5BFBD657F22D8322BF1B6E3D95A00A0FFAE8F8, 1A93F5995FA12BE98B652697A3C107F971872756CE5D21B77962EDF326F366AA7AE62C312BF79E6F0CC58D8AAD60E6959F3F327188BBAC50DA4F915B94F80E8C -1FA2A1CF67B5FB863, A318705616FAF2B2EFE035C607874E084270E0A861469C4DFA6EEF3597E6D6FA4170CEC4F7355704F4913CDE2AC61008B45B83B2B3D16BB86736AE9423488DE2, 7710CA8E6400D7A650203CC8395F9C7E8F9309101F19798E58036C602413603513BD159E2DD5427FC209D0DC514BC896559E37FE4C3624C5939C0B9803FD78B4 -5EE7E56E3721F2929, 504674A154239138345664DCB02411DA7D686960C0782E9EE621B3C1A5B8438F061CAE4FCF28E0DFE1148DE021E166C5725A58AF6FD87C1AEAF5319A31E05494, 49AE41609B457601D8E94E139B2E705F60849C9990B95411938970910958AB3A55B6921A76AA6BA8F0401E5678A6B5DE8A95D7C1DA53646E35D111C04CEB4A71 -11CB7B04AA565D7B7B, 50D7292FC3D693A9950D39C00951B575626EE1D4E6713D2BCBA14C43BA55E0D526199E321398D9D5C347BAFFDE0FA80CA9D07047D5B225FE75E8E08E79F31658, 154F147FD453CCF73B5E3BCA862A900FCEBEF8A37C7287215A43A5A18747FB803D4C34192D94750F29F9D1530E87D6B2CB50E25486CF730A28B623C10A41CB51 -3562710DFF03187271, 2FB6A69D4B14892765A1BF6CA1A271BF3FF721D01660FE7FDDA3390DD548C7D49FB9A0BFDA786A82FC38D6DD03F98E889F509B648FA002FDC90C9C6E2E0FB726, 907A843758C8CD35AE5D372D0C4CAD7080FF092BCFA41D00CF7192B8BFFDE9EB3D84C4EEA97413F5D522C5680512389427BEEF970401577954262D3E6684AAC1 -A0275329FD09495753, DC566B6115558378A30828AD5E3E40CB59C9B0FA362DA9CE9E18799B096C35A686F70407CF3D6B74FB020748A97D3041617FC16D951EF9B724377C17076A622, 3CBE42ACC16F5D9045C0D9480CE3D2D23E41BE4AE258BA8FC01628E33E0708594FC46AAE94B91C6E03859A0F823CFF498D5C595C30A84C43B68D18B375A7717D -1E075F97DF71BDC05F9, 1F177C07EDA0944770BA8C0CFAC5661BAD32F83D4B604972B8A4AD47413FCDC2B2083B90A32F023729D0E3DC3806774B6A3DFC2CA490E3E1C8CD287E5CE818F7, 5D4542C1406513C4CCF1695C317A70B3BFEDDA3BEE879A08916FF702A6CF57AB01BFDD2059B893AF0EADB6753870DFFE9CCA01001BB1DB13EFB1A8BD15A55313 -5A161EC79E5539411EB, 95780D24DAAE19C17C7CC37A5C8BA4110BEF99BEB0A5AC01437B8C06B2B1A1320F3C986F6230B6FE495E315CA86C57BD1AD8A13C27AC40F66A8A815D44E8A783, 5BC4232442C8496FCB1636B741531918FDA6EB5B78013E845F15904D9D48F3D9B53D1FB7AA6A1B19B39C6F0743B1C363F5FDFA04F0ADFC1A86FACA1E4574D02F -10E425C56DAFFABC35C1, 8689640A1F83470645DACD1C5254D631F25285CC84A58CE2AB125CC0D9E234D52336984AB66503D97E74E7C823A8C2E472E00EA96953B4295E975DEFAC7CE29D, 3CE96CC8F2B426485C439AA14B7B308302E51847C2BBDE6CAB0127EB5A922B96595509CF344941395D3FCF8E864C5BA5A665AE90CB8882599C0B9A627CD432FD -32AC7150490FF034A143, 4C6B89B84AD3A7F0F1E11AFB7009BD0B85135981EF1D2FC7BCF0693BB8DC6F56E20BF943171794545A870C969F0F553435800DD4518072B4F57C55E4FC7FA948, 7403F424B1FAAFEAF731DFB0DFAAE2251572B345230A15DC982C3E929070C6FB7A2EDF52298E9259896E4DBF1B417E597C34FFE36F826991A3609F545A020842 -980553F0DB2FD09DE3C9, 76A462837B6D3D0DF86B43C6E5B41B1244439B27306412EC850ED760F788AABB708D917809D8B83398057AA39A2EFC5B4F14DEBED064DB1799850E8910886211, 44E2C3E0B2295FC29927B3A51030270B8A68EDB619DC0E5EFD55D9B24C3CD8179B09E733E5B6BD2279B534F899D3140BBAE6A4B93F227D6C121302084F55E55E -1C80FFBD2918F71D9AB5B, F93B6E87DF7F880B3E581D36DE5A787D778220EDDF52CC686822E3EE19D187B783BC48940803F8539CD17E5877AA674D322EC9FC00F6EA35CA0D45746AD1184, 3987FDB85796E914D39C3E2927FDDFADCAF2CE0C8FE20E577FA7D8A6879ADA25670443BBBCEB8537635763769549F8E145FBF47A23D57A92B31505C4DD906A31 -5582FF377B4AE558D0211, 8D255257D7E6E1A4E3D1A7A49242B3AFAA2F2BA7032C12EE1761A2FF3404731524D8D280DEA6750BF43B68203974BEA626D25943A9B0797C0ED9E8C5940101C6, 60D4830E435AE8B75E15642CD71BCF404AA0736971EB8AC29A15F59A3CAF6F8D0C4C120575A5F135414817D8020E2806B117C9C602DB23CE8425633EBEDDCF50 -10088FDA671E0B00A70633, 41592CAF910C72CF66EBD76A4D2BFADA00A474FB4D8E5417D2E1B37DE825667481F84E12E0724B87B64E8AEDB017CFEA49787D4FCEB0687878D45FF7551D1787, 2FF10D63064E17010B8A03984ED520FC3B98535FFDB0F7F2F81E03CABE035D4EC26255426F82CE256EA65725C26569A9C5167CD721389BA30DF3B4C639B8D038 -3019AF8F355A2101F51299, 95250EE1951FF34B231F848D7007AD397FC9B7A05D4A744F45676A32DA835D6C57F29C4CDD1390A95106B5B6427C85C8E89B0711A96FD645870DCBD4E29C95AF, 21E313B0FB1BF5F365B63FA71652CBA4D80292D785CFBBF7E1F642E7D0199869BDF22F740B91D617405313E651DCB2B0ECE57982485BB6E841143C2B3E9DE484 -904D0EADA00E6305DF37CB, 50A065019ADDCBCEEE88B5F20FCD8D7F9A8CC35DEF685247110C299C0A1ADF1297B1CB3F8F8E708811523F007C101BAC0A10E0E7E510DD8A64A36D252D90C28B, 1330F75882DE7AF9C19218AC1C6971956805FE7EA7E83302B84CB16093A216E1E77FC259D6BD9C81923C82F7B3D0FFEB3BD2D7718C230198333867B67692B628 -1B0E72C08E02B29119DA761, 6BA56D3DA647897B84A24B395972586EC563D79AE62A26048A3D4697C396B052E8FE09880A601B567A8E52FF14E24919EB1EBCE12FA341FED8A148FC0A1777, 64D258CA395D9EAAD5FBE3E2C332631677FDFB24E5CF28800F07024BD030D6171F93C68594C2926993A4DD92A514747BD6202C81D9C51FAABA9B411AC3083354 -512B5841AA0817B34D8F623, 480B1546B4B1D9AF2628A9EACA381073FAA84995B417F79F7FF06325E55EAFD5A135311206CE622945BABCED83733EEFA85A915DE6D5EF5AB5834C2F0CC9CE14, 56FCBFB232348B3B282F523426690C042ED74ECA460DA0BF4AFAECA2DA319BAE0EE5D4B647F5DC594BED6BA350AE535C1FC9EA030A2DD84C325DCC6D2195F5F9 -F38208C4FE184719E8AE269, 4175B19E26B1512997F85BDDDF2FC6E15F7ADCA291FDEEA54F4D2E30150B39BBB792EBD29BF474AE5333B4D50414979FAC385C6006801A8B5C529E26BAF2E193, 6698D130041B7B578B38B991090B7CBD09FBEE12B491D86129181944173142A2FEFEB4CF4E9B17F4E76F24311E1A16237CA9631CE33F018A3CD382FF3B71F863 -2DA861A4EFA48D54DBA0A73B, 20A58FAC453BFF9239A168F6B91FC85DD69320A9CB49F069FB04DE9199866C57F7DADCB901FF48976944247D254CF9336E820DB7EFF1DDE987BFBE2B794AFC41, 40FD6D493FEC25800B9BCCF089A0FF2EE3F6A7DE70B51503CD98D15F3C7534EC813AB2EEC350411A08588A1BE67849418167E3C15E5920BE43F8C842A80E3C05 -88F924EECEEDA7FE92E1F5B1, 32E36277DC9C5A7271BE0744F43A1905AA0D3C6232B25F2409187EB2F467110DE377CEE6B7FAD89F88BAE72534C6204234DA2B1F6F43420A5EFE3338CDDF7E62, 90DAD3889621EE8F44D0BBE4D89AC07EA4F2CC4732FB97FC6A24839EFF1DB099B661D1AFC2F11DC4621885249AC97874694E70A1EE9ACC7F953DF415FEE521A4 -19AEB6ECC6CC8F7FBB8A5E113, 509D117AC816B2D5D583198B8EF17E5CB5AEA26F24C8223D89615F50E68257D91E947774A52CDE91C913A5761C692F2E17251226BAF761EA27CFE0E21BCC2A08, 430242E2EF99D51095FC20E69D2D260BD06ED129D070999850E47A93850D37F3D356204B7FA1AB355ED8A02BDA4C74378195F8D11FA3FF9F73AE66B902A752D5 -4D0C24C65465AE7F329F1A339, 9991205B698BE38917EB5818F14CC4C30D7B87AF14A9087EC24CD4EC54EE3EDAB2FD7CB6FD9ECF4E63F6C5609E010149806F0F7E9C423BC720232541E145FC0D, 7756B9D774333A1B6237D802F57535AC36D2B824F2FC976BDA65443A4415A49728C556A2085D00A315BA2C070F2FA9B7708187077D9F4D1D5959FB2BF5441011 -E7246E52FD310B7D97DD4E9AB, 169F220E3598D9D36DEDBD3A51B0FB29E2978AA5EA144651CEDA95D038BE0E0F334139F95AA30A0577111511E54AA0398DBFB5A1421D087232FE579439B21E15, 7426F29161B572B0FBB0D69E7EBC4B272D366CAEFF2EBCF00CBB00C2269A12E5AEEA5CD9BE9FCA8D3A8E42CC3514B24C65EA02493F4D659E8888129DB80D0200 -2B56D4AF8F7932278C797EBD01, 803948BC057E0CD51EA87798796EBEE6B1BB16A9457B0FA7F3FC117AA48BEFF44731E7487928A00462B2D9EF77DAE49815F066DE8A9EE609448A881C4925B1BB, 85C988D42AB4CF3676D809F6794D926A7CA0ACD8423293243F21558DAC3AAC814EC3FE8C073AC17A7466AD5954952A9EDA4A0EF71D5869272EE6FDDF63C95EBF -82047E0EAE6B9676A56C7C3703, B3D64722864BCD7DEBB1A6DDB46CA9FA922AC8C4C283871C9ADA67E3984DDE1A599B390AC0AB78DB86C81852ED302937F9C5C4F0EDED77B4A06D8DA2565C899, 56F0EEC69FA1E39166D55DB2970200FC118594E665D3170233007C2C761879C379C617969DAA7039DD0D4B4B70787F41BD26CC26D53A38F009B002B7AA2EA720 -1860D7A2C0B42C363F04574A509, 62C369F43AC3E87F32D9DE3A25865F7F9D3DE1DDE28C97109E327250A63573EE4EB29F37950A1F6729733BF11939C14057F7385AC5322B8096918AC745E406AC, 2E016EE4BDC824269870D4D1EE495E7B3C38F2696674D86135F033AA8817E6E69444451D64FF7AE7364ED8444B5CEA5F00B7D3989D04FEA3E5906B55ED3CB876 -492286E8421C84A2BD0D05DEF1B, 880E4B0B943986B346B3B6F697C0D3225EB911C3F3ACCA2BB3DC4AEC365380D5E65EFEFFF8B5679FAE4C08118040A42FA706A1F2B7A69144B90211D722735B56, 95EB36AFDB517EDED208B42599C7286EA84FEE1B870016A0AB9CBBE4D9122B4893ACFAB8950A89529C94008BB7EC0168AD75854819DD31EA21497529E570BE35 -DB6794B8C6558DE83727119CD51, 15F79661427FD903EDE9B94C6E64A28988E94687E01DB89D5DF747F6B833AE9D5677A6CE69EBDBDCF61E0E782348F52229CE7645580B331CE9262BCFE7AD4251, 6D506E1C76D38C68D84320F24EA126E22D2A352FC954ACF9EE32D6895A13355B56C03B72FBC6418C64F38063EABFEAD756935D161B8FAA27289AB4B20B3F6C9A -29236BE2A5300A9B8A57534D67F3, 108F5D99010C79536A99B8A87D7C4553B7D030BFC1DDC27C2F6BB62023CD1D227619D622096F93ED9EB508CCB3AB53FBBD4642924E27F9A19EAE7FE873E08D9B, B69D08CDB88B9639F2E8A2A450BA6659FABF0088BB7F1DEA591D37C0969D020E56D29A000D7B3C3916BA4A60E7208CEEF8CBFC0E2B8D3772DBB9A36B70F14BB -7B6A43A7EF901FD29F05F9E837D9, 4877BE4821594D6753FF495B648E862458B68A15E0B59FACAE473CFCACBCFC590BF1428108FC839EE5E2706532EDBD15551C311CE8DABAA842480CDDC47D0231, 88D5A30F0AC5C5AA60A9AC5BD9B0C6D981AAECAD41D93F826746F1D92CCF274A30DDFF7936E3533A018B313D4A9461F4F22A0DD1B3D9B6E889036A4AD9A7BCD6 -1723ECAF7CEB05F77DD11EDB8A78B, 68C62C43B4C5469A96D32AA749635E18CB5B4AB4F91B30A245266701E18231689D479139DD6F7BD0E06F26D0C8C61C39F7F17E9E605AC81E35550D616AE26F3F, 5E2CEFE2254809A7D1C11740505A3E9D4FEAB8476C889EA643A6ED8DBDA4DC7AC01AD34F4EE80756EAD83E2A084A9657F40145CBEBC062BDD441FAFF985B7B1E -456BC60E76C111E679735C929F6A1, 82B8D63F6AF8687801F0A93B7B41A51E2D88E2F22B7B97558CE0588B76B5FDAC90BF93CD505B6694C35DA2A0B9D5336BE9606B63999DB1B33934A267C53EB80D, A564C06480E06E8D52CFB815159A5BFCE23010E8B2A2DC1437E12903D2399B1397331CD64B0E0B5061BCC3F3EE43D8CC60A27C8108F2ED3B831C07DDACFD8717 -D043522B644335B36C5A15B7DE3E3, A603ECA0472E962C32B1EF8F3CA668F9FC9CB747F5FA74002F6538546D1382F3FB3FF39E82FD3EF0617121F41C40BF9BD329F17C63E405C8ACD44154C7554D54, 6C2C7141DD71F7E977BF912022347B9C8A9A017ECB3BE0DC6777586B03E1DA775CB35F27B033D888D56D96E8C49D08BB724675763948EF4DDE1674094738F8A -270C9F6822CC9A11A450E41279ABA9, 3A649D5A7B0CB9A4E38102C52F32BC1B8B0F4E4BBDF525DEBFB4A76B6CA099F91E906EB8E040B16F887DC16484272089653FA419DDED2FAC4DA0A42668CF43EC, 7D6AADA4DABA3985435FED6CD59E609C2D74A0B1943626244817E6218A4A7CCFF8F7316BBA9A1CDFD0AF8F00CB76FCB425481F6C2C663B8284342AC8EB3122D3 -7525DE386865CE34ECF2AC376D02FB, 4469A75BE43CE6D45E1E3F7517198DACEC3DC51459B38D0DED27C06487C1E979525C2215BAF0959C36948277658E5714FE49131B51CBE7E0BF38C1197530B3C3, 4B199395BF7557319EC24ED9126714E79DC65D59781350549232E118D5BEF711EF4944910ACAB9FC1A5964F0C166C0449DBB9345A46AEFD7DEB254AFB3B86F77 -15F719AA939316A9EC6D804A64708F1, 13B027404ADD3F151929A3446008EABE5EF6589228618289305DE92D0ACF5046AD1CA5067977AD9EF84AB5A0207A95A2CBAEB2642DC34C93652A0383DD8B2B0E, 44294CBC55C730686D73F2006253771293A2F39592444EB083E604FF967A86629539F8BB8603396172AE9D70CF13F5B938E3A67B28D8A862C9D071C821A55590 -41E54CFFBAB943FDC54880DF2D51AD3, 95B0F22066A260643E884D98F34F4C4618DF95DE4F4E58E6B275765E62D982AE6420082BC8122EA49F52F57E6CA45C24C96A9358BCC345E1809AC25E3B5B2A1E, 5777A3E18DD0E0BB7F302D84E2F39AC395AAFE57BE981833BDD292FA3636DD2641751238B6F5EAF9FD23A06E6E3331E006D0939284D9EEA1C3218B1943343A6C -C5AFE6FF302BCBF94FD9829D87F5079, 726D87C9973FE30EC335B8CA00562A0D05A300823713B6EBC997E2087E5ED7AC2D1CF9D3684F24E1885FE0D77D6689409C96DC78A6FC50955E1EEFB2821F9A, 4195DA9F59A2878333677A1501377DA52E85C4BC8A47A9E22EB060F56053F0565D094D49ED02B582E75000C10BAE816C7ACA883F041367FD8C463A8B4006A905 -2510FB4FD908363EBEF8C87D897DF16B, 518686D1DD167DBAD75A07008A81D2E42B75C2881D0350CF6066D587D2B497DB2E6771A4F2F5A3C32A03A6E663017A3EA58A91E3E0D4152EECB2F5C7029955AE, 555571884CB8CA725B1A191E4AC339E7ADC63A345B732B28A1C7FC37A57741EAEC447A70F26F3B6AD009CA920489C7023F6AF5D73ED091BF2B454EB183A00B6C -6F32F1EF8B18A2BC3CEA59789C79D441, A99120A4BB1CED9FE977F734252B95DBB919003896334CF5B7596B2BF19840AF0469AB16CC6B29C9AF7F783026E657E887C6A4CA5F48CF1AB6B0F3B56F7006D4, 6B8CEA5F636935CA3A5C825EEA002149DD7621E8AE260B4BAD56E2A239106924A6E2788447A6F35CEB96ADC7AE9F53E03ABBE516A9F4674D7EAFC8C4B5E1EB0D -14D98D5CEA149E834B6BF0C69D56D7CC3, 22F1A404DD5803E3C89CF2C43F4C128242C0E94466B2B2812D59B805BB6B0501D5FF258FA05CCBE6052B53D068203FA447DDA99B6C000B7C980A86128927329, 1800E663D10913BABE84ED22705F12B493987AF8DBCC97C4FED0E8FFA19E813C8C6E76BA30B296AA40A5834A64C7F75F6717606194449E30D5EF503422DB18D9 -3E8CA816BE3DDB89E243D253D80487649, 4CAF787B90B5A20913E325ECF5FB03465AF594D277BBF2130ECEA574467635CDF8CD6DF7C42B4EBA7287DFCB71DAB09E2DC5737CD9352E878DF4336946D10017, 6D57FF7181A88099714600BE2E651020C066A82CADEEE531AFA1DE2D9A35289E489135BDE6B01989587E26902057B596B0899A0CD03CA6BF2947CE8A62C1162E -BBA5F8443AB9929DA6CB76FB880D962DB, 51EBA2578555FCE98755BD6E315503D2316603B9A0B3F24C770DA0DE4BC1715CBE62A4E52EF41AD81D13CA366C6F4554942A515F3FECFC12555F2CD6F7CD523C, 455C76AB9A53C28B8D3B85C27220DE83E544A4277BA8C4EBA3F522F22C44F3B0D18632A81B95AA6C37A18697CDD6994BD4F8C041616E8C8E16A173B6A16F9EB8 -232F1E8CCB02CB7D8F46264F29828C2891, 98037F31B4C54F0762676BE7DA882AD0954AFDA67681454499E307D384117747ED03BCD41C1047D4896DE97D6102C87D07933A7CD37E68B6067BD025590CBAA2, 5539D153A7F8FF1AA133F3E1259DC6C50A755CB77275EA50EA679A239631DA1A53F5839DD542EEA947B3010B653B39993684C13B181B2719C9A0F8045863483 -698D5BA661086278ADD272ED7C87A479B3, 623982B7CE81160C18610AC0C0CB817854A26E59BA92B08D3668A94F397ADFE9E6FF603406EB49774368C170014CE49F943E96191B267E16300C311547CD683A, FD86A67A64649C1EA3B602B74F6F991E1479CF5DE481F0D00F7D0EC1E345C74BC1727BE3D1A0977B08EEA6C1E457FBF7EA24FCF6824E001B9A6462C9150AAB8 -13CA812F32319276A097758C87596ED6D19, 719E8219813CC338C326AB614E8C612D4F2B1C89BB8C93C631BE7D2F812C812861D4A85A29A4FD9BEAFF42420CA18F4547D0C7924F950A8CEC74B23D70F7FE0C, 7277D941865F2146D25B037B5654F104FFACDEE491A1955949441652A264400D2834013FB50E88E733824852F8B7BA9B8AC216DE2DA9D8444B4C4BF30CF22BA0 -3B5F838D9694B763E1C660A5960C4C8474B, 97171341DAFD8ADEE24645AC355FB61105306D03E29F6F8F2576C642A26F79C2637A9D397AEE014E0E5C81623F0DCB11AA8F2C99993CFE22B4ED209E2B47E9, 3ADC8A11B66164273D34DEBA5F6CE30F33804068E9DCA4CC51AEC1F0E407EB969CA635570262016142DCCD7B57187C415A2E5CBB32212FC6D67C2F84DA2D3BED -B21E8AA8C3BE262BA55321F0C224E58D5E1, 844F869866044D75456DB087A5D99848B39A1ED51EFEBFC32EC024AF63FE1ECDEC021E6CFBEADE14E8676120F97ED66C588B85BB8EA0EFA352850F0419611903, 264E5C62511A604214CEB2352C429ED1D01970E6B5F1D1CC2B1F18410C18D7EE3AC1208E461751680B5866229BABE7A0A5564A5AABFE1B03CFBA0740A95273D2 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 5B65E590983B4880E503574466FA71433F584B2EEB8BF6094BFDF52879C7EC2676D4DEF194420EC9D8A255EC88E7B303C33D86D4922E0424A892B50F8F8A162E, 17667AA64CD934DFB10ECB684B117ACE7E7E4CBA05A5A9B11399685428C23C297DAB96A37B52177F394B5CEFAA903C18BAFABF796BED7CFFAED94D2564546449 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 32C5EBA5521C56947A9B706486CE1EDFE4523D56A99ADC5A56793EF3508966774B656DD4F720F69079EF5487AF0E15E362A00E2AD5D88EB81794E5D0DD6F82CF, 94AF113249FF9AFCB1EBD792388D6AFD38466A10AAADB51C529F265BEF5B2E46973B3A11168F89EF07581FC68F19364F092F36B93F6E5FA557B95C972FDCB21F -12C9389FCCA50E069A6FC4946479E435E8EBB, 7BA6A1C34A2F831CA4FEAD062968E42B54EEE2642408B9A52FE5666760967FEC1187A4F7585F1C03C2C3560C1F1506D89D07352DC3B7299574D0216C8D89C470, 2BF66556FB68A7F58C6067A10184F446DA88A483AE8BFC1DCD642A1CC3D714E15C41F34A176F3270280754B6024BDABB76451F739EBBF2AC80C9DDCFFB307DF0 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 56D372362605A7CEE5D5DEC3176605725314659CFDA790D8F8F2474E674C02E2D017302A9B0578FBE26791883B1286C32B9864DDBC857A414AF93189E5F5A3FD, 2DA2F50EAA6CC02FA7C865B9FAA9441D7F989C2330F543F9782587EB3A41443D3FE6D8F92ADB2A0B87465BDE42F0742BB5F2DFFA68A9D79328AA189C3EDC6066 -A912FD9E31CD7E3B6DEDE937884905E530493, 605F14C726332189D6A9FDD1A02B766A3EE1B4572A92CC41C26D0542C05CE0A8FA9F1063E8CFF6C962942501AA74716FF135288807EC099C96EF2305AD49BE1C, 2A499780783938404FBF06672C0CE55CFE2F8B029F90E9A978F317232885326D45E25AE0941B982C5F7FE415B95F878FFB354BB83BEEF8DA112B9C36FF239B8B -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 555984754BC655BC130C823DDDDB45055BB240709B88CEBF620E3FCE4FE6F16ECFAA4DE5A5A02CC76C9CB655A81B626D42CEF26461F007364DF14652892E3E6F, 6BBAD92399388A66F32E0ED79A90C1784404E2503E6BE6AC5975908E0CFB73DFEF11028389BD1D0F01024360F7C83CB517B43D537DAA0956525E11AA92DFB81A -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 1D9F366C076D3F22FC852E6A38D274B7F03DD9AE7CB5D8743D9AF21793E7FFDC5F40BABFA8D13590BB228ED7154687F34F0FBEF2647147540D3DDFDDEBFC2B2E, FB2CBE28293141BDF23A268051C405932DC06E6048351B3871713974AD7592439C1FFA7FA9931708BD0E27D7BB779915FAC1C8E1C2FE8F786FD05301C990E6 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 19B0CF07E7EFF3A04D7FEB6B9765A018397BEC655C798E88772E93BE028DC0948D0498B7E1102EF17D1FB8011A512D240386B7086935F08C29FC9E4182CB22A8, 84B1C3A2665C9232609B082057A5793C9412245DD468D06D7EFAAE8F771CE7B5F47AFC521C3E09ED0DDEC7FCBC001A0866843057316969293AF6DF85B6A3BDE2 -357F023F0DC204F0CDC846CA921F1ADD8447283, 136F4A0F03E69ECDC971C800C954B3ACFA313B05F078CC9FFA819485BD248B91F2A559F2251FB531ED1C30EC936942FB04CAB4D59887AF6AC1FFFBC3A1FECCB5, 1CAC4511DC5FD098510482847A2A86A6658926133F091DA2BE4CA92DA19D3834F39A90FBC5A03413F35AC20E352FEFA30F7DFC05A27947AFC076DC618D8F15BF -A07D06BD29460ED26958D45FB65D50988CD5789, 63857DF732AD12459C61716221BC684ED527DF9A2EC34332E525DC6F625E82E7A92A1B7F5E1E19D796D413865729FCEEDB08A61BADA33DB3889113428D7026E1, 3C8BBF87CFD340D15E5E9A1A186777F2930C91BD7AF8826710147E2D72439EADFBADE313045D2364A2AF84F5675E1DE6C59A0F8096360147531F69178C5DF567 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 9547C93D146D4D3E463C92BC16CBF94D19F4706C0E5B9FF22810F0BCD6BBF1CF4639D1E6824FDADBC605F3B66E870E0899FF366671DEBF4D4B4FF9425EB84A89, 9F6EE6F07C32A252CF5C1E31CDC5EC86DF48B5D86DC17AE6E3C5931FFD86E6CCB730FE24F75027B2DE8E4ABB4183E3CBF33EA2E8B6F258736C7CECDC4746B4A1 -5A4653CA673768565B41F775D6947D55CF3813D1, 67A661F809ADBABBD5101A32D0F849F53E8C046A8F577CF8C0ACE2F1DC39E418C40E7EF4478A6E5FCDA0BA33A9019D92DAEA7EE228B0DC7EF10F8E3403D36809, 9EB61B0456110701A3FFE02E966D5A874D84D427DCD0967F71C617A328CB88096E4D8A43C4D751EEBCC168E04157B99111D1DC27C59AED3AB99FF8B1974DBA71 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 708B3BE55CDC987698E1DEFCFE3BF409D4197888DC8A7F763EC756E70713680D24C42F7E8F5BBCE884118DA6BB2BC012E9D36A308CDCC12AC764059D3F91D310, 484F6F2ED11B1960BEEB30E54AB77A7D1350BD2C5F3A92847989CC5091EFA81CCB59152ACA5A623DB81AB8CE7EBF5A0F3137CDEAF91981ECCC20488F6A11EB40 -32C78F21DA0F2AB093551B3248B38680448F8B259, A831B87F74E9FA55B23046DC79BA8680D4A487E8A73E0D00F99FB4D7881069C0FF2F9FD72D2B5390896227C5A3AA7891FBFB57C11533BC27E7C4BEC2D6C5DC7F, 39616A62F021B1D64EDFB5351B3821C624C10F5145478A37DE20ECD39A7105BC5C0EE1BE88F627A826C87470E908D7CC686B169F06A2DD4C35A89E954384049C -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, A1791BBF95DC41CC8BF27E92736E24F69C28953766742C436587472095C06E8EC9C85101A63AFD70AF7388AC395883C21743C2EB421812494C06EA81A98E3ECC, 535D3EF729620B6C5072E30047286F195ED9C0377CD6AC82942D875D693321C54602EB80B83DCFF87446D5247F16EC3581D1BA81C7B9894417EE30EDCFC202BE -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 15FE5AF9A06915DC99E422FB83AEE332FC8E936DDC1839DE4BA9B07B131E70A1BC54C57DB8D3B3727EAF93A89C1D61BBA79950C391D40F2780EC010A2E514C79, 84A1594363D40BA7A686511D20D301656C835914B94014B67465A1F43CA35A8AD7C750771198EEFF2436DDE9F8BE945E6E20F03AE0A3A3E3F3F4AD4ABF9B72F -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, 9E2AFD61691CB77B61E7A86FF0DA3977CE535823F4374D7F940C76409AB505F9E5EDCBBB26CC10929D230F7EFC5B15FCF58451FDCA80F72A83783322724AE76D, 21EBCF45B76EF2F991819DB1BD02639482BE61455D3D61C417B0E2111DD1D869EE4AA860DAF7649E2CF65669FDF88732CCA8C72C4A3DFC4035EC38C5321CBAE0 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 5769E8E9B3C90626779CB327C21E73DA5484925BFDF89F27D3AB9D47D191C10D0F366882415FA2CC43907D2791C0CBCFF2CB0992348EE2D5FC1A90822F682AA4, A1FF4031D4B8AA9939F139E6E663143ED548685D57B5B406B34166D1119A07970BE112781BA916F4E6FAFEC506EC01E914F2961949B48497EF10DD4459E4473E -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 52E2BFD22CD1945CDA7BBB941E3D8C3FD89D807F1B892C3351DC063296379409651136B1D91A2E5089D1319DA28BD67BD85FB18DC3EC11010877DCC7BE9D13EB, 458A89466460B92DCF4EFCFCDAE68AECEC5F1DC6E0EB98EF498D24433552EC78C682AEAAD9AB1A3B012034EF30CF4699C28A2750C05E73A3C31B576387D17796 -909A469765F53090D38D5A7231073A03433CC33DF71, 68DEF9EA395D53DC5377515F97AC89FE029BFB04EADCDD8346D8C0439F914C914AE6E42F7AAB4CD0B06C89D1203625651ACBCB9ED046F3A82B8B8BE6B8E6AC0D, 4DC9C4A44A61765743EA21DF59AF2DF9CAAC0881E6B06945D41FEB61A995F0112D5586137AB18E672B1CD29ABD9733567808711B40C65C240B07B7A50B27054D -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 9D7F171B789073B3E84B5CBA9ADEE119B69380332EC8A9C61FC0FE956EE9A397F82B8AFA9C21BA11227177EC959D828D42CFB2C89AABC5BAD3DBD4E03CA26285, 2B199FDB9049DC09346EE7B1F7537D952E8005D3EAE311DA1259532A506A6D6D7131C36ECD4A275DF0255EF506FA11978402CBBCDA02E92282CE24CF68F7DE48 -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 4A0F075CE9CAAF333500B1EF376A2D315E713151448376AA6250FA8A006A6D871780BB7B943AFB1AC06092D48537564E9D5D61FCC598621AF4B1B9FE5B6CC9A1, 8BA96CEAB2CB7E0F6FD75D7040E487506E83F54DDC1ECA1A67B09B8386A3E985A9283127A716FF9A83A21B7B8202F0ACB6E719BF6C302E2239A4E1119E34ECCE -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 408E8D0A3454DD1374197D1B69B05019F78963674AE4D0509566EB76CEC7264C4B84B3FA73AAB622BCFF69B5104A2CCB43261D37B5393EA31ADB129937DE9345, 25824575D8174AC5E485587CF0A3D08F57D051ABF7D2BA1C3071454AAD1295935C131C5D6475C8B41D2DDD5EBF736ACC0AD1E101D7C75C35248515F3B8C85F69 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 24F2EBC4AF80358B96132D10BAA65D7F9F4EA6D1D07521EE554D069E8756AA5E68658423C88CAFD7CB91A85A200354DB654BF7CC1D9F0BA6842EDCAAC852DDA4, 7349FFCB5722E53B15061E0F88E5E754AE1BD531C0ABBD233DE6CFC969870D68ABFD103F97C0649BFC02E5B2A0A6A0F5D3FF40FA8B158E9C108C678C411D4A46 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 2710EA547F88B888C63EA49664DC89A68BCEE62CF6BD8A3A372269A55E8956F22132AF3C4B1015A252113530CF40AF7E6931AEA6CCBFFAAED3AE4ADB5A1CA7EA, 5A56D8F7211B85F56BF6583B2ECBF0DD0FD4792A4351CF77DCA7869BE3B4143D1C02A4F0C9CF669AB31E4E2EF7DBAFA7AF757C49E3243EFD7BC2C3D13F867234 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, CC27F68B1ACD3FE051CBA2CBE0CA3D1B456F8B0032EE2D5A4ABD7617DDC470505DDCB356BD1E00A9CAB5AC7C15A379921B4CD5961FCF37B1D84D3A35866E3A9, 26DA376C79029CEB0FD43300026B6884A42FF4CEBADA2489D57BF534FC6EB9FBAC8E89D41CCBE628C60B46C3D6289C582E04C9B2D7E56E95D7327D980ABF39A8 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 59821B9986D39D8BB2C9C4D75A65A78D05B9BF30C27F9E2B7DBA2C5345AD7B7130A5933E63860F39C66B8B4F6EB4F173525C3BAFF5BDCF0F423CA9A309F09EA2, 8023395D582DE015E723C1840BC55E5F2007ED4B3C089CA139E59B2025822BE3EAB4959404CC9F2FFE837B450F3813D8DA3DF641C40D46D0576C9C1A261343A0 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 4EBFB14E78D96B15E409D8C424F05641070D55ABB66FDC737918CF9BF9B4A7C0836B7F51E9247205DCF9B1354773AF1D59C793BCD74931F8473326C75809B9C7, 596FB27E8CF706FC9E1C28C6ABF389597D4E504CB84D0551D5EF7FABFDB3577529AF0EEB975270B46F2E5FF6709E80CEDE1E2FFBAF5A2827C263B28B96D9CA95 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 9548FD064921E83BD0C2CD66EC564AB6C58EF37C7BDDE3F5D5E3824ACCF0E1FDC599595D2B81AD5AAF2D3F0E89ABD24E0BB66B7793F7D916EF8FB1CC032FDF5B, 24E1C8045F37DB7E1837A425DF3BA60BC38EC972AAE383A1144D38D38FFA35951A644D28FA890C6F594AFDBA0974952C70F066252DB56D9A85F5D166B29DAD84 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 79F3DAEE039109BE51ECDD6038447A31379C5B559F2DAAA9EA351CC7E672FBC5BFA45FE578CF580E823B29CAAE53D302258B49674AD95709E7E6701C3ED8BFFA, 94820553082CCA48322DAC965A393314CD76A60D45C474238AD1E962E7A24B1E37EDC145714E0FE354142270E7BC2E92372A3CD8E310BC17204803E5FE753CA7 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 40EF247CBBC535CEF8610080101DF85999D6864B3420D5676462EC43917A1DAEABE760D26FCB92E321701A38DD076C9B935FAEDBFA2FD6ECE05C3160EE082A5C, 4B3436A35C05B204994C493C542490A88559668EDE83E863DBB1D2FEAC1E1D1076BF7659E2425575E84F40454F5768B9FDB4B42C69BCD3B2E48C4159BBA9F284 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 81BE7CF340B21D465C86B6D6D41995A9C23339440C19BB1DA054AB29F459CCED4C5AF84D7D65B0A450301EDCF25665CEA7F8D77CA85C6A9D56ECF713DB50251D, 4F1AC4FB7566F07723E341D0DD7EFC76B982C519A37E78F3844712094EEBC65577AB3BF36E8336DE905049428CFBA4F73A10D9EAC86CBB1DAB92C5E7C54AAFC4 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 86779BA45192DAFD1567ECC9106C565E6ED168EEA9A70C9EBACDB9569014780D5715456B0054ED9511F62C02E22C54D607D7B8F1C71B06C26D7D2567578BEE3C, 162950BD2D6029848E918F663650B307E4023F2EC04530DB6D4ABB6C33C4CEE9554E4946225527EF5FF488532E64985F71464C93CD66C90C208E9E69B308004C -29396F76B67B7C403D73A1059B80139336878E44938606769, 591F8236F91FAFB37D3FB440B2AEB1314B2C8F6C418A9C67BB5C723EFF0880617B7D27EFAEB559D52026043FBA5E8EFE564DE8924FB657B05171635C54C5C022, 3811148250E9A3DF274CF0B719F706CB7B3F7BBF9700E3EA66289CA08DC706071E77C7057D1B32D2A82C4F55168BC6D836DA7C687C9E913320B701F61F873380 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, A8AB7BDAB0E62D20E15E92C87F4FCFF35CCCF6E5852362F4F45E5B5FCFAAD40503839720E89F7A6F0CD9F2A626C4313AD99EEE3F58B9808E935BC3CE0995FFAF, 25A36AEA91476C68CE6A5F5F08940F6653A0095762DB6698C1043462B343693FCBD2EE74300F866679C5BCC6F88DBA5A8353173B53465361F161F460D7F39C9A -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 7399B7D50BE82CB22BBA5D0D06EBE842B480C03D015A792368BDBD16B56DDA5A1601D21A695CBC0F4F7F8FE1AD73429C181C5914E14246A261F2C6795BFD399F, 741194EC1DE823029625B3814FB36C070BF1AA71559B7A9A4C5CB2024000D3D24E6224D285C1E60F08DACE5D40DB2C8E1855E9E14333CFB72C7423C3E14681B6 -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 5D05E0B21BA1F9BDADA62293E0ED864B33ADC286A11DFD18D6EF0C3A2FF8A9C0C1EFB9D4E649F5B27BA52EA2C36E4AF05B9F209F3C600B15F9FD4FEECB67A4A6, AE3E6A215C1F2148FC536D587641FB463B79164A592AFE1B0DC9A3C5C8F3B97739393D40ED3F72DA6AF861D8512342D5F3C928CC0F3AE1A5D4F98514F44F87D -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, 9B5670D250073CD58DE512E2BBC37BEE7F6BD764A9DB5BB19B32722C4027E4A67D0B66B2182B640CC10419C3BEA6545D81D9F8D1BCD7D0238466E6F3A9E530AE, 4C33AD1FE5AE6565935436F34213F35BFFDA32104DE8E6ECBFAA98DFFB819AC136AC705EBFF39E08B46E29D74B600F10315FF24AE9A771BEDD5B8B33ED157935 -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 908B1B63ECD11699514F529C94518E6FB83B303816A0B3FD74804908F1393D0623610D5F4788B3AA569E6A1B2D667EC1C2A6C59EA1CC0410FAB8757F3709E19C, 351D21FF4882E87E3DDDC0B11DD96A4E1DF40A15AAA7F3B9D731B94A0F532B66384C2F28C303A4423B0A3DDADDF9F9856D43984FAE4C6421B9D39E81960AD14A -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 1675DE8C6B8E712182CB698EEEEDB96F80BB2DC25D310A9A7A3513D712FC16790301504F0BF214E433F8C4606E2AA8B89C29A583EEA1E85521B458628C25F1B8, 2D7061774FA018186FA15FEE871D9DEB13504E9EE0699FDCE3173AD39ECF23317BC9084EE0770FBF588A1B19DA8E5905D8852C64EE6D266CC96BFE6DDE17103D -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 8CF1507C146F54E61CD14951A50C7819DE4E8CE41C6A42547739C180EA9F255DD727958FCE40D46F713803429F26A413BDA3BF472FC1149351E709F999C57AF, 7646E5DC0652B5598EE488E93414D98A6621E88374A38405C7B9624A2ECC85A800FE631517C40CB44D079A74C9F3BB64E406B7BD30E00CB8CF3F0E41B6DF76B4 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, 8DE31385AB2E0379D312F7282773374D31FC49A98B58BF4EBBB30714B835664D786672F8887AE8282C7BCC063F6A3CC8BC828081F0BAF2A6DBDFD14E13E2F1AD, 7BB440A6888E8B9387C8E452B079D1F33F2B62BD78180FAB916C69D09672434DF6C02BACAF1CCB6993EBC762F83AD4900A1E25482A5B34C7D6A5E4451C82396A -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 4E67701B23002051F2162244B7B1A969D7159D87066847274A4FCCA03CDBBD4903FF86754B29787457BFD7B118DBECCC03893FA384F4E1F43F414A4C42736881, 704BF78CF8C9A69EA7D6C4326E3AA6469ADD6FB0A14718B133543F830474C0F68962C7DBFE93A1A8B5990347E62D36275197DDA51878D949A2E04503AD80CBFE -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, 3F6B72EEC9099301FED5B4F18073977528E8CEA5E6496699CB54349559E8DF34ED825B00C3FC4890A323975CA690541954645033541818BFEB6D444B30D57A8C, 5E404FB054874A81866A6288C65A9FA2BFA1DFB251024001339757755B799474D0F22DA2DDC07696FC0EE68372B10847822ECAACEE691C8746BF4EBA7DF76849 -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 5E8AA9BFDC6A222B37AD1F5BF64220F059342B1CDB176747FD183DFADAB7A3A965CE72AF181234649544D62ABEAAFD1DDF34735EC06CC38A0720FC187EFF8E57, 4FB3789092953C8358C15195F71739E88EC1345E093EFB25EDCC0242A614D9EB956CCFA1EA86D46F8E0D079D535A5B746B5966114CF75FB339595222FD0B727D -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, C71C41D8A3F8A438BAF696169C5C318FD8EF902061C6B60EBE968B11BDC6C2BF25CD26A219274CF47B83BBD39507C405E671840EFD09C187B34C8D27274F3C0, 1F99411B221D9E233AC1524360C502F66A09FC20C480A3F94EF022C5D7ED67D33D9514B9FA47CBAF30280570935F5CD2B6299AE5A163592361B67294629FE9BF -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 146FC3560E54B5DEFEB8E681FB198D01F7F4D65CAE9D3E46A83C9090E5F4A62514C582B1F22620807532209300572ED8CA80C5E385CAD2DAF5BFE4B53AD4C90D, 724EE7986C77CE95FD00AB0CAAC07F2506732DBEBF49F640F998793AB01F7EAF9960FB84B710404D01731CE8404FCFB2C933EF21AB91BACD6D648DB503C3724B -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 6F0B6FB3C09FD472A1B78AF5DBEAC72C9EC2BBEB21F734C65179F3AA4903D09E6F5A61FFAD61AA763944780841F03DF8A3B0F04EAF897DD8B5DED7FEEFC7D74A, 143A91BDD2332E4E71F81F8265CDED1221DFE581C7EBFC4E0A792428EA9118B279B23FDC49E9F1BE3F05946E183F15666D9897814E7506F0BD20F027705F451E -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 97A0280F1C158BC26FF819B95E5CF88A8096BE11031CF38A644827755E85168B27CFE05E7EE63423C007CC3260228F047C951A274DFE1597BEB1F14545220EE8, 230409FA3749A76604659982C5660D4A1F3FB55A24B683145F67A056EBA686538F15A02D89529CF7EBC420A0EE9B97C01CE89D9FA0F4F6C2C9E1BEBA62A42CFC -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 7F6BCDBF5B248D8F75C18506159AA610DC49C0B23345D1463E8BFCFDC874C67A74B0FEA6B0EC8C10E496D37578ECF0B1543BD39A2B6958E78DEC928015784CF7, 237C2B36913A3B090407EE768815E3D159DFE3F9C45577D14B985CE251ADA670C8F3B7CC02ACA8FA1007C309CC7AFCE67DC385202E9C2BB7996A4426F06D418C -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 20EFD8BEFE95B2C38DBAEB4520C74EE57DD1B8AA57E92734887175C5E0A6ADBDCC3311573F969FC2422CF44AA34749A79C1D672974BFCFC165308D5729DC4FF6, 660BFEB21AEFD844110AC01B2E145AB903F1312CF6C8DDFF80B64D706AB48AA79299D472C3B504C03EC2B2CC23B0A59BE846C3B8813DE47706AF4562E4B1F08D -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, 8A2657EBFF86A293CA8B184567CBCE22BCF73C018CA8FDFB828C1FC52F338FD1BE585D90ABCB24A10959D4D70FAA8676A94E6B2E5DA9FCB0A5AD6B2FBF5369F3, 1D86D088D0DB79137F43F597B014EB684624E9A24DBDB50A0C857BED672E7D41462F8F1841840C0B7BC934766F191E780990A6F4DA736068864167A383DDF8FB -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 3EAF54A0B04A31E964F3F15B1C4563165D2FD2C0A98B8240B2234211829E4A1C0030B9897169407A2CD5EEE0CA7DD525CEE571C30ED3BBD52FA4A099D3C4519C, 86BB30EA1F547C020449566E3D065DA228BD43A07B87C2702E7D073EDE2272F35F7A692235A098A344D3C4AE6D46715CE3C06810DD298939C99449DFFCACBAF3 -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, 4F35805DDA899EC5E95FBAAFA44B3C1B669672619850D5628BC24095885355334E84420BBC716DF79FE8D59F66D4C4A0E5EA8B6ECC38D5F3FEEBF81572E262E8, 3E3C19C6BE5188032FB6A440E248B4D87F887ED8648FF6F784C78B2BB9D57CDE2B77C0037463FD2BA9E5C0FC29FE19D3488CBF7FD24811C276F01CFD09E18BBD -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, 62D5CA0962F86BB26F9A755802413AA5E809A1BEE6F957E414EE2D72CFEF124EDB8FEA3887CFB833047CEE4E5E9968A8E7ACB33AB96FFE75F63C329343CC66FD, 29A0C308D6749705E4E134604A2FAA577B68DC97A71F38C0EB6689985ABF306973020A5D9AD7922AEB27F4BD5E6C3561D48DCE873B9D865FF9BAA909AB6D81FD -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, 3317D9A361C2A25A50BCD0051EF38566787E7651F431B1F956AFEFC24D27D43122B51CCCB67A31F462178930993459FD8A1B4AC943233A00717B8186E42DE2F0, 640ACF5A110F321533931FCEE289519052F1919139A07542568F713778A293AD9029A28E3BA9E992E98A98DF9B21E72FC1F1D0EE0CD2D11D3132E5A64B816018 -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, 84493BE27104AD04E71DE0B2900016276BDCB243671813E772752C90FFA9D48B4C0233F65A14C79B1940E13346C01963516D98055EF844748EC55C8DFFFB1CB5, 753F80B8E62CF095D71FDF27D0E6847AE112B1FC6463AB41C92E20C5D0D006AF68CCD67D7A69B7ABBB1EA8624C699B38BF0F26C82063313581B6FC857C68E014 -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, 6E6E79FD23F0BA2D914A82E9729D44D2CD9293F1191D753C907DDA724ED4F80B43BA5C3D559C0DF5B92FF18ED522196DFB7D9C2956574CFA95C6798602296089, E3D1FF13BE07CAD7C4D0FF1D05E9FE75AE3E827E17286688712059834A8188A1DC8B18E7EA5CCB30E8F310C18336EDD2B2C0A9F1B3D6524E348E1CAB35CAB7 -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, A51B079191BCDB41E7DF7D7B0CA816CF210811EC96042F5E40C6F8973CBB740C1E0BBCDF254C3DB279BFB78BBF1F90912111A93D28CA0F2AC09B3E4F3245CCC5, 7BF9D1DB51C1DEE8E32758E86DAD6E87113A458BD31CF30E71B06F2C6BA51FB41ABF925E758D8CD31D9294DFF0AF2E456E029066C840CD007DAB64199F363930 -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, 9E7D11D4551E2AC6B648A4AA7D91CF12BA3026CC419D57C55260D5C41570972CEAA2AB870FBDB0230AB1E7ED1C7CDC52DD51A77A1583532A0F81BB4D7E1EB63, 546D39140FEB9037DB9B808B182A3B2DA23C4BB1993FCEBB9F7197AE4B5326C2F0614EFE7B57C67250A5112CC3244730A3AF84FF3A3E1AD6C3D755ABE962182D -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, 3AA49A40545F5525346D1C348469D59A38A877BFD03C41E09217B601412E13ACDF8854E0AB4EF16E90D38C9A2CEE9E649CE158B454314D6B000B0AF4D988C1DC, 9656E782DF06836AB038F1C9B92F7A5088D37E3CB983D6D8CC401519F62AAB62A0CB266D1B81DF93C0855529FFCAD51800E4D0F2C8C4385B277769AF6DE62B37 -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, 80B6E9450199CAADB519A517C2C9B5F368C20545599F89697160B923F9876ADADED268F5635F31CF4C5D592C68FBC1910840066199880C9448EF1F3970867451, 6544895CA598849A7075FF20DD271341DB6E6FE658192257110A6604E1A7859E7034EFB4101CA04A459F22867227ECC540880617D109769F45E72FBB679E5412 -A0D2E82CA5E358392DE9951D10B533E405FF396E226444B3B8F22B54A64B, 6DDE911D18503EFD1B2F77AFE9D3D640E35F3974D35FF08A56B78024DC07C578FA9857E72235FD297A8E67CFA481B5229297F5C57D14AC4D72469B6217CE52A6, 7DD6323D24E3380E7ABC1CC17DBE9D917B367E2C453B6D1967C0810230621A26CB76BB2284841D27772228C53034CA1D0D510CA292F30D77E5C8B8C7CB785F7 -1E278B885F1AA08AB89BCBF57321F9BAC11FDAC4A672CCE1B2AD681FDF2E1, 875EFEF06C918F0C9D964941A228A7311D4AECB74346B5AB7AC3B034D28EF7C4B91F9C418B521C8F3E7D187CEB751418884A40D3B1FC0C179DA3CFDF00513562, 930A8E656E0736742BB3092036DD619BC4626F9695E8F0250422282CA4C8EBECB02890F870C73D6340CBF6A623DE3CA0062791C2B2CA0D6BCC33573B106A80FD -5A76A2991D4FE1A029D363E05965ED30435F904DF35866A51808385F9D8A3, 7E8234D85019CB1B70F53AABE10012A06BB76BF130F0D3C68A1EBC93A537E83D099EF6F7074AE27ABBEC8F35E1A69A9998731F94AE5E50D91214D6340F1ECB01, 1DAD3838BD70D7B3166FE5CC6A84E6078472375AB83D19C6800F427A03ADD44B5E084552AA7E8876BC204B50C57A59E23BF61CF90BF6BE2D35CE4BD5053981F7 -10F63E7CB57EFA4E07D7A2BA10C31C790CA1EB0E9DA0933EF4818A91ED89E9, 3C57D459E5FC858BD18E1EC0BCA739A6EA7ED14DA87AC2AE768868BCBA1A7F1AFEE30273D3A66C83EA2AE085465E9FB04CD5F633ACF119F965DFD561759FF73A, 2F2FF102969F35F017C81BB997252AB08C967514155451E91774EA9D179F905AC70C76FD57697CDB68EA54AC219249CB933C30B9D961D57FE60D8A322D5F25B4 -32E2BB76207CEEEA1786E82E3249556B25E5C12BD8E1B9BCDD849FB5C89DBB, 67BD97ABE9DBB9E7B8C219321D8C21861B60BF0DE1ECA836ECC70BFA6AFF4F12C01B206AC6539707FF07F5E6198F95943529D8276BAB695C869EB39FF5FB19F7, 5CEAC98AC895AAE893D1685627A84C08435424DF05B3FAEDF26204829A0D1AA691C6722C0AE5EDCAC29DF87B4914212683F5D44CB7116F72FACFF0F498F52546 -98A832626176CCBE4694B88A96DC004171B143838AA52D36988DDF2159D931, 96752012C820D8A82D89DFF89B9E94EFB15AC44046CBF1A58BAC8767BAFDFBC71278CFF20F798823ED9877D8BA0DF2BF1FC1E8A28953837EC27CE6B421BE52BB, A3F22C63B6CB144ED7EECEB1D9A7C375F174887FC2A543A624EF22103B1241CBDBFD3C1C89E3FCB9B98DBB0DE332518CD94AE66044A258783235E11B50026B71 -1C9F897272464663AD3BE299FC49400C45513CA8A9FEF87A3C9A99D640D8B93, 719E546148F3DED74DEFC6576E5C24C3629E0D86F247366E0AC9E170CF019E95BC6588CB19B7CA59BBBECDF0838DEB4335AF88FACD1A5427389FDF87952E804, 9E017B1F3A2F24842993B79ED9794A7E9EA0C8BD10F59E0D1A8B220430409638D4ED8E94ADF19302816F3E4462AC9B70FAB18309C61B7D924496C5F90BE58E1A -55DE9C5756D2D32B07B3A7CDF4DBC024CFF3B5F9FDFCE96EB5CFCD82C28A2B9, AA90A54F94BF47A9DA64C014B730DD5C3793F0645BAC5BA13B9CAE1955BFE483301E6B25149AF3C6ECB4393377D2B199F60C99B1B38E4696CBF367200E43D7DB, 24D55524E2212DE0098ED866D18F2A847F3B2D82537B0D7B47F7E1404E8795DC34A20C8A7F7C9279BECA257251803F74852BD59F6F108E8E412D19A798CC2965 -1019BD50604787981171AF769DE93406E6FDB21EDF9F6BC4C216F6888479E82B, 9C7EACF047CB2E988034688B29423A2FB4E4B6B4497F147412FFE9B6B63F64877791CBFDA219C0520332A914C3C233E6BC2CD8EE514850E3D0106B1A5BBA46, 774F8A5A1584D59812244A5F329F8854273D6D3500796463B6B58485C3971DB28533FEC6F126CC39E58D11C0663FE3EE839C14F6334BC1DD64C5B2C1DC1C9BC3 -304D37F120D696C834550E63D9BB9C14B4F9165C9EDE434E4644E3998D6DB881, 50DF98EC7FE053D6813FB72F3DA768C66E7B563D5782031E78B215C1692706BDE7CFC884369841DD4E8A6C12F375148BB50C473F75673B01E6AB902ED9AFAEEA, A67C1B869155547273BE16930C5BDC3F9CAB82BE75CA09EC1838944A34633CE1FFA9C08CFD23D5AC55DDB242FEF61095421F9A512FC5EF49F5B3647268AB1657 -90E7A7D36283C4589CFF2B2B8D32D43E1EEB4315DC9AC9EAD2CEAACCA8492983, 10F18DE045522C8DDC8B6330F53193C3BA57912BFCC31E0B3763BC2C08AD3836E6C4EE93AC22994F58E85DBAA455EDB7C90A498680E58DF2CF48207389EEC20A, 2DBA48675F6C3F94B4735D9D7FCBFBD796393729913BB4F8A41A4A9B4FB9AFB22993CD985801DAE78771F464628830D08DD01A1984CD4E2CCD97D6A1FA712435 -1B2B6F77A278B4D09D6FD8182A7987CBA5CC1C94195D05DC0786C0065F8DB7C89, 55596037BC4BE2A253BF09FFE5DC777D2C2EEDB69467B90F56C2E4927C512E96B2256FA15B138DB0E9111AAE2020620CDD2D48A2D2675BE02F2CB17C5ED7346B, 54D2561D6BD5A244FEE960DD37C17423DC1C7C820539E1DD99A270F71E6B3B527E1A0CA2B8023A53F79874AD106867E8683788F0C2BB157E8B7551E0E9EDD5F8 -51824E66E76A1E71D84F88487F6C9762F16455BC4C171194169440131EA92759B, 43664695D6E08FB6F03C6C0013472286DB1066A9FFB13AC5167F56DA7691438C05163F70E1659F881E72D46BEFA21CF1900CAED68B1E3F20BA37F52228D5C190, 6CFAC30D320529549F27B57BD2ACEE9BD8327103322BA16077F2F8A90E61647ADD8862ACEEB72AE1935644066EE89870BEFE3AADE49FBF544CB78D911E2F72FF -F486EB34B63E5B5588EE98D97E45C628D42D0134E44534BC43BCC0395BFB760D1, 5C409644D746E64662CB206C9FAC199F43FDE9F543E491CAEECE2FB094F0486FD44CFAA704595403C708719662ADB0AC7EAFEA6F3BD7F7A0032A403CD194356C, 3B67BD2B186A1C6B083EBF8E22AB60B16E8836B169AEC57BE5D4010543C9178BC12D4E8E051EC5A485A68A3850EBAE81E88E55BD12E902DB16C62E72ADF55EA0 -2DD94C19E22BB12009ACBCA8C7AD1527A7C87039EACCF9E34CB3640AC13F262273, 564129367DF8E4810CF8C694586030BD753178B42F1F46EFBBD7C0A7196872FCE6EAD821BF93AA5EC88350DE5EBF4CC1E87FB84338DF44FABA1AB4C6CFBC69D7, 8E1EC43D291B014F8DB92101AFB2798BD72F22B72A181C3C9473AFB123F13088B41F9EEF0C0D38E2508315B8DC4767B8FAA4AA2A709429C9DAC15ED7797B5947 -898BE44DA68313601D0635FA57073F76F75950ADC066EDA9E61A2C2043BD726759, 4D975418323CAF96B491A564B67E6B086A632084DA85D7A8FCB9118F97D3B5814AAA936C82BD67F18DF8328B95A2CC558D3C3C60AE6EB4AA346B18E1FCE8FE87, 6E42AE68FE91E0F6452D25EEC591CD9B71E83FBA41AE5B3039E73D0CFAB40661641BBADAC0A9BC02EF780C59C690BE08304D11D6AE51EE4CBA1E5C620BD67CF9 -19CA3ACE8F3893A205712A1EF0515BE64E60BF2094134C8FDB24E8460CB3857360B, 6101E0AC17239854378A7EF4EB86D94C6ADDFABB232B572573BE879142F5C1361C1AE2A2EE8D255082C364C3F3ECB8F898456C50E0085F85AF9ABBF5544C60D7, 356D672766AEA32A317DDB8C0C6D56EC6826B3BE342D36DBF6FF5D265802B4FB6787CAA88586D0ADC9751E1E58ADF1C0F145CDBCCF8E7080D47B8FFD59C3B742 -4D5EB06BADA9BAE610537E5CD0F413B2EB223D61BC39E5AF916EB8D2261A905A221, 945D989DB1C5CD01017043C5A945C38D914FE969FC3895EE1DE8F10F799729C6BE33DB7D39AA81C02F19892181D36BE7FEA71971452E1A2102DE6CF2D25BD30, 208A98CA11B30F2FDB5388FE33385C292BDBB309691C7BB4F43AD075B60A66825BA8CD1B4978467BDCDE857EAB5D6D43699CEA2798932E0B12CE3EB907ED0508 -E81C114308FD30B230FA7B1672DC3B18C166B82534ADB10EB44C2A76724FB10E663, 4B8898C4C5903F8F3E85A9C31B1D14665B45CF2B2C4230BF0A260E068BB63AEDA1EDF75D328BCA466C4B6272937D9DC803FF479CDB271D4D7C00BFB72484337C, 30E87CB18049D61A5D621865BF4B9CAD248CAA5F1F910E95DE7945BCA08A5A2BD5801759BE12EEBE4EB1BF7C472AC3F57FE67907FEDB76E0E3F9267CE37F4E86 -2B85433C91AF7921692EF71435894B14A4434286F9E09132C1CE47F6356EF132B329, 8290CFFA5DAA7F3AA33AE6800AE6CD981AE6AAFF81ED108D83DCD4645286EA79A95FE1E718EFFDFD7E9F92A80A651E26C05C7BA6FB9BBE7A464E1898D736300D, 2243710EA294BFE7BE4E4A4FD4E274F69E2089B3508A05CD961B72074338C226EF3AFECF879CB1977316E475705C6C530F217F3CAD6C440BF33CE16CA73882F6 -828FC9B5B50E6B643B8CE53CA09BE13DECC9C794EDA1B398456AD7E2A04CD398197B, 29879A85AD777232C198D5CAA95A01004537BE27319AE988965E213D73317258665A803C26F265334A5D653B3346F59F7C1E48C40B478BC9AFC19675739B3AD, 3B5A7CE6EA5F154A1E72018E83429687951A8486390E3DA91AF4BAF54471D0938D422CEBAC8349834AF1C1997814ED423B52F859367155EFAF29F4CF20868005 -187AF5D211F2B422CB2A6AFB5E1D3A3B9C65D56BEC8E51AC8D04087A7E0E67AC84C71, 7E76157E6EC221249492210A78335ACDF3669237892FDF4653FED5C18A9BB6B14E9B22005E2819658865FDC9DF7CCEF521D0ED67C8D3E22B5F0CA424E51051AB, 769DD322437FAFACE9CAF63A9204A74345A760042B0F0DB5FB428FAAE73D4ECB0214324A317B189848ED5D53FCD668E40F536E7281E979F07C0951E342D6EC07 -4970E17635D81C68617F40F21A57AEB2D5318043C5AAF505A70C196F7A2B37058E553, 96978A5AA00653B04A9B3213D9E42B2AD869872258153B9DBE9FB289BFFC7DF19EC50ACEB718F9AF76A93B5636A46AB71AB1B81134CB5D0ED2ED0E4B28CEBE24, 65601AEC0E856DD08BE8355475AF8DB0E9FA023CE31C99676E223804C3B8BE08C73D83EF67D0B49EA33EF06411B8C5BF16CC11A991A8E9B67D887BC3E390C87B -DC52A462A1885539247DC2D64F070C187F9480CB5100DF10F5244C4E6E81A510AAFF9, 7532048D97956A300BADFCAAE01FA9C70F703C9246A933D0A843431278D1DDDFB791F10A1EE5B20A9CBC917E5D7E9268138AA66950EA7C56476757AEFD0F5ED1, 6CB9F7AF18DFA5EB58967EFC8FA4444BBBD5F56CDDC0F142DC526BC564DBD9CA2B4BC99658A7C883BE275AC750C74D9B3DF3D7A6C99A9D79FE8216460480B0AD -294F7ED27E498FFAB6D794882ED1524497EBD8261F3029D32DF6CE4EB4B84EF3200FEB, 5269657F0C80D782D4D075F0E3EDE638A10DE741365132E5B887274CF3E3E01083CA571CE896A52E901A5053E687FC3A666AC821BEDC1FD9AC551E108ED56DA4, 9769C2823A179145DD6DD56E1EB9F04CE1F1ADB43C54189F18A7CD4FEC33CD0129D4799AEBC14DEF0EEF0A162A383D0761FF40180CB821137F7616F2BFDAA590 -7BEE7C777ADCAFF02486BD988C73F6CDC7C388725D907D7989E46AEC1E28ECD9602FC1, 64AFD624CFA44AF2FEF41961EDB94BF25477F569F35B69C21CB20448E160685752B9563524863C2B3CB4698D20AFFC2895520C98B4A6D4B1019351E926674965, 8CE881E64C2E84469F08E0B7510675890F2919A2ED1F23C02C72E5B3319FA6890908167513A167C6707793F667CA2EECD83B5E9A328A1459D65890562A83FD6D -173CB756670960FD06D9438C9A55BE469574A995718B1786C9DAD40C45A7AC68C208F43, DCD30C3FA18790D111C0D9DD4E21EE197671A9D1B80D5AEEA981384DFD2C3087C97F1DA58EC615A2FCC7A90AA412DACD19DEA8D7CA8932FB9054087A557814A, 70869975379E3F7C1BA0B19B7A651DDC85B95E8F6F771D256AE52B59F170DC409FDCB7665BB8B19094BBA056DFA10D76A9194F810F94C0D8E2DF985971F1F320 -45B62603351C22F7148BCAA5CF013AD3C05DFCC054A146945D907C24D0F7053A461ADC9, 3711C32A3CD0D3174F7982D8585545E2E663F07FD5D8923477386C31E8264BFA938380B7D3BA4FF97CBD3AA7403AB8B3A7BB79D1B39852EBD1F5BADC95724D1C, F8C1DD1DB7E7985E40029DAFA7A2751A41B0B8F7A48548BDD896D83D76508367031EDD1BA1A931C1928875B9E3BE6EABB9C67CB82EB900F7B6FE7FEF13DCC0F -D12272099F5468E53DA35FF16D03B07B4119F640FDE3D3BD18B1746E72E50FAED25095B, 7C7F8494E9339D22275FB0BCAE27FA7F8214E398D66B221E8A676113F0624273A403CC587BFD134C10D393D6C7BE001C7B771614AA0748A3D643510E9FCE14EF, 97B824A9D125662CD65CE346C08A20CAA079CBA91484B6972B425DF07CBFED3B966E88E8C926C8E9EDBE19A3BD62E15A664962341E6E78D2C7571913BAA99282 -27367561CDDFD3AAFB8EA1FD4470B1171C34DE2C2F9AB7B374A145D4B58AF2F0C76F1C11, A80A38EB75372198BF18167742D05D619F4E4A573A47096C2E0986CB3657836C21E53911068F869853E8BDC80500C72DB0AD889B66C65136B14605C3FDCDC01F, 9202D720A3AF28E219A856595B913E35C39DC0779294C26DCBE95C92DF2226CADE2025DB5D1814C7012E1F8A555B3D46C0289C6B681E59061BA5AF160D7E11B6 -75A36025699F7B00F2ABE5F7CD521345549E9A848ED0271A5DE3D17E20A0D8D2564D5433, 4D88CD7C36FDA45499B18AA4A5FED3C7402F81290B80C1F1353D9B4571046DE6102C4075634F8D78E049BCD64A02A21D97AE3226AF55BF655BAA44ED68C94D78, 5174CEE2869F6C87408EA273085056B3DC2D2C4935D4D3F475A50080CD203F3612DAD8A8A6D41A9B9ADEFF7B58FF56C19C8D8399C7CB3BC36F9829D3A609C45E -160EA20703CDE7102D803B1E767F639CFFDDBCF8DAC70754F19AB747A61E28A7702E7FC99, A58B27AA50BAB77AB09D1CDCC09B58FB5ECCA617B1A7E51C732ECFD9CD4582F5E58898B068FDD20B2CBF40C17756383D145CB69F5E4BCC1757C48950A976042A, 62A1AEA68449CBDC6AA9BFA1A72ED3A48414B4CCF246A88A1E4F874267A259B1A53EA93D61985EDE503B1AA1D0B1E36D7F1905B5A9F5E10B9B81B238D1C347CC -422BE6150B69B5308880B15B637E2AD6FF9936EA905515FED4D025D6F25A79F6508B7F5CB, 9BEFFF756321805DE0CF101A4FF8729D9AE28DF700E4683696CEBDF3D080FA9C61457AC2EA43C7C0F3D60898D0EAF27EABD294B5436E34D560A801B1DDB9FF4D, 6F81EF103E453414F69E39F743AC7E260E3581C463912594D2ED7D4A7B705D5E5DC33CAA3324AF8E6DB50C03B2CCC7BB5F5BA2BC4D3CDC314A19D5F46DAD4390 -C683B23F223D1F91998214122A7A8084FECBA4BFB0FF41FC7E707184D70F6DE2F1A27E161, 61711543332B8DEF9F8887C98CE55C3881A3926A7EA0AC129C8FABBF2265A716D132F675D4A31760155663DAFE59DB9249BE2EA4433DF496AB064875861605D4, 24EF56F97257596FDC5A4F946F18281E6DBE56DB41EEE98A8589C305E3ABD5120A18B840E3121B4550BDC0838AE7AA271658F181764C5B0A63D8428A2D3A3B3D -2538B16BD66B75EB4CC863C367F6F818EFC62EE3F12FDC5F57B51548E852E49A8D4E77A423, 29AFF31E24B519EA0A2C52D93109CEED1EA18302E606789CF655D0EB9DB146FD57DEE305D9E086348F38D63006F3B142CF5E410F27950C26637C091C47E3BDC7, 9A8D922B787D2C373E151D814215D776B15B411FB63D4AF9824AEF9B1E853392C567A47229E16C948C1689120FBDA607F206E499551ED475E46796E0A4BBC4B8 -6FAA1443834261C1E6592B4A37E4E84ACF528CABD38F951E071F3FDAB8F8ADCFA7EB66EC69, A9C091848518433DC91CD20394607A33ECD47E8F90957BDAC3BBB6BF0CC3798C06174AA5CE1BD9BA3F73B8A65BBAF7DC533B5A8E00F3B518F439DFD0B90B0828, 99E2A4C242E80922709B6B97AF39FA9615A34A081DBBDBBBFAEB4A935E7BF23424D3E1394C9BA018EC3B6EFA316F423DDB3F56A9DE27650F539E451683473192 -14EFE3CCA89C72545B30B81DEA7AEB8E06DF7A6037AAEBF5A155DBF902AEA096EF7C234C53B, 23F13E8D149CD623D708FC16E68A164B932D8010D196136B6F412C9906E81B250B2A19739B4CBEDB4D20122F9B3EDFF4761EC05544A144042B773F30F3C49F23, 16B4712D215B65C6CB2DF5217CD06B90DB713C7AF4B948B31E7A86AEFF4AE005639DE4BFDEBD34B0F9F31DF8F778F4F55315F95EE57C5153D5FAB0EDB0C5A263 -3ECFAB65F9D556FD11922859BF70C2AA149E6F20A700C3E0E40193EB080BE1C4CE7469E4FB1, 21267D6554B7C998CEFF617B48483CA57D5F8428A43F091B06D4E50CE16B9B252C27AA72D578E3AB46228BD8C3F768E1FD3E65CCCBDC1023783091CAE34DF84, 630A51ABC4EFAFC6359E7B316163BE566C0A14217D29A37B294F477AFD791D57E10C2A1889A0022EF5D9BFB1FA6236E5B196AB056BA127ECAD0D05330E9E48A4 -BC6F0231ED8004F734B6790D3E5247FE3DDB4D61F5024BA2AC04BBC11823A54E6B5D3DAEF13, 4E76AB4A327801CFC92F2FD4A706FDBC2E855C4BB565F912E50543A2A7C8B2BC022AF4A7973AFA0FC700DDB13D2E45EFE455E8A7412D2282BDDA1EE2C4D8160D, 6825A3E8EE9032346A1B0D4B205C934C00C693B1EF17E97796FD43F96E049CF309A94B1F04DDBCBDDD3B47D1518B70D446CD22EA6D6360497F9EDBD79925657A -2354D0695C8800EE59E236B27BAF6D7FAB991E825DF06E2E8040E3343486AEFEB4217B90CD39, 8768456FE5361D387B3821D657DE3D68AAFEEA7EFE5999FAA2E9B79F31CD9A6B2BD38533E770C03B7BFC7CB4A469098906BAB60EF5B975500AE913776844C0EB, 37B205C8EB73D73013A912A75D44C74A7FBC756676112E3BC5BABD46F80CC97B526ECFC617655D94E6FFA4D92E4FFAA44A39531AB107D3427DD5AD8479E6C3F1 -69FE713C159802CB0DA6A417730E487F02CB5B8719D14A8B80C2A99C9D940CFC1C6472B267AB, 34D8C6704DE88CC772CC77C1CF814323B6807DE4C442D921211BA33BC9AF44187B6384A28B8EB63442BAA38BFE99C471A060F6385408A504E863CCEC1527958F, A724060323C18F952788290AE06D0671D2D4F1FD2F433BFF2B061A9AA77D3A16F9053A5052CFBA4567EBED95CD073ACD6C234CC65D2579574A8F518F352DF13E -13DFB53B440C8086128F3EC46592AD97D086212954D73DFA28247FCD5D8BC26F4552D58173701, 53DC9B83590A50191009D553C3D8F1CE8E470C927BA3DE2D512F18321D7476F40D09EFB7F083B33585999DDB55BF6FD5BB6007D20FD7625607BEB9EF4377F39C, 9E1FD2F2CF72F124FF1289191C5D5F4ED46F212D08504D714E41D92CE237ABD73B21AC1E956BD18738C0D760384306AE8FCD0401A7F189E124A7A8BB37FA456D -3B9F1FB1CC25819237ADBC4D30B808C77192637BFE85B9EE786D7F6818A3474DCFF880845A503, E3A594B91EE4968634509188F924642C4E6B63653FA0491884055E37A559F4F6CF1A336E4C0D5B61E504F3E135070E46E781371BC292B56358E574B9E29D537, 692D59FA40854A1DEB69E458F3516C80C0085F4AEDAA83EED5975DC3B5CABC022297A3013F08BE68AB50B4D77703E1DDB9E8FB12996FF7660618E1F381607F50 -B2DD5F15647084B6A70934E792281A5654B72A73FB912DCB69487E3849E9D5E96FE9818D0EF09, 3C6AE0B79DC69D6BA6A90FC1C52A0657B381BC981E0D6BA553E334ADF2FAAF178886A4FE43FACC3CC76F24F82F9A9C975BBE557ACF62556859ACFAB1D57098A3, 7CE5CAAAD8B31FE14604961FE199CAB4F35125F9F6FA8CF15B91475050A622BAC54D5BD15CFE927288FAD7C4C9317215C39D8368E3033011B2011A507D4E1680 -218981D402D518E23F51B9EB6B6784F02FE257F5BF2B389623BD97AA8DDBD81BC4FBC84A72CD1B, A8DEF39D3CB60942404CDFFED3C9174D34FF005301169E713FF111FD37B3422FEAB8964A0D2C937431432D1FC9EC5666B98C913BECAB80A78539AA4EE4FF3680, 1C77BE8BFD37EDA6958F0675BAD3053C742D56E9502C8290876B186490D9D531D4192AAAC93CE5FC9F15679A4B6BEEF07F4CC94A788B57A17AB7192100C17579 -649C857C087F4AA6BDF52DC242368ED08FA707E13D81A9C26B38C6FFA99388534EF358DF586751, 2A477D74E7F5623CEE8F2319F99EE2F82EEEAB4BEC37DA580E491058A5D7F33DB7AC4B5896A50ED52D0D68B434141D3EDE4BAD8BCE757C1543497242C9CB1B1D, 3B562B95CA852CADA47AE1F59A4C32CAE88221E39A25210C4922C618FE7EF8347976EC427818CA084E48BD0C1E0D21465FB4B1EDB30C055E4886940879DD48F2 -12DD59074197DDFF439DF8946C6A3AC71AEF517A3B884FD4741AA54FEFCBA98F9ECDA0A9E0935F3, 313A44053B1B37C1EADA1C73B371585E767B5DD68F3B65144933E23F389BFC19035272F823E6552F979A4211D40F56F144F4A51CB276B91F14BEE0D14A4CB52, 7DFFA081EB639EE2CD3D433B97E3B62DCF3D42B52833E5779B4EAAC3F0EF5DE9F64794E2C1259E7147882BC3FAAE2BE11DE4E50605CFB27663ED58401245540 -38980B15C4C799FDCAD9E9BD453EB05550CDF46EB298EF7D5C4FEFEFCF62FCAEDC68E1FDA1BA1D9, 3DEC33DDA80A2CB702162C2F4D9A432D71A9F9C39D7684CF2FA3696AB701588A4871ADF996560C6983B25E22DF237C29E7E02117679200896EA3C9B585EA48, 2ACF16C5E09817FC207B8DDDEE39F0B3E9165B2CA7A1222654C3BA56A922745187289856DE18DF646B3D431AB6931C749D34773922D8E6691E0AA9865D2180A0 -A9C821414E56CDF9608DBD37CFBC10FFF269DD4C17CACE7814EFCFCF6E28F60C953AA5F8E52E58B, 73D6D5B9ED9D77DE4E300DE8756B22AFEE7307D66249B4220AA9FEDB7D69D610D1B3BE60A3E0EFD34D8E2E8A14A41C2D875B703C297878C7A24EA75738FED0DA, 8FC0E6794EE6A9B492B36FDF30527F48C6D8E3F4922B034BD94DDDB0AA208B49104E653F53169C1BF63755D8C19DC4E1DF80133A0134F9746FCF3AF4F7795BBF -1FD5863C3EB0469EC21A937A76F3432FFD73D97E447606B683ECF6F6E4A7AE225BFAFF1EAAF8B0A1, 4FB4F1991BEB3D26B606C8F3A12385DDAC18EAA29B61B773F47EEA7C247974AA0EA5A9A5864A7BDCA3A303AAA79BDCA900F036F0B4F57316D15AB3D8A314AEC8, 85B6B7E4CDF02A691A1C230C9CC9A3C4AB100846946B6DB503416809943B41594667E4E6B6E3D05F58D6BBBF3A0334371B5D79B726AD195118999E5C67A050 -5F8092B4BC10D3DC464FBA6F64D9C98FF85B8C7ACD6214238BC6E4E4ADF70A6713F0FD5C00EA11E3, 7EBDEDA02513BFAC02CCF6AC8E23660214FD5F20D38633FB49B0D0416BD00484D1350C34232E127825DB9AD022205AA4567155EC22A2133C116745CEC5F8A1C6, 184AA328318EA64008887CDCCF7CA00EB821838D5FDFEFCC6F2EFFA93B0AAEA2FE088260BFB9DF6452BAE0925218BB6CB1861943A634ED26A5A1C2342EC7364B -11E81B81E34327B94D2EF2F4E2E8D5CAFE912A57068263C6AA354AEAE09E51F353BD2F81402BE35A9, 9D5701E059FA2F4CE077BF3CE719B956388D5D0C835FEAA8AECF60724B8161F59AA5C8A124D8236030085B2008D5FCCFAF885E8F81E2DA7A6CAD8CAB0C544E97, 20901D447239375E4E1C1B735C821A6CBBE9271167EE71689E4E3037EF14AC3B3F9C10AAD168FFCE9E414ACADBA478E3B52022C404553390723357E81D107A7A -35B85285A9C9772BE78CD8DEA8BA8160FBB37F0513872B53FE9FE0C0A1DAF5D9FB378E83C083AA0FB, 69846C05C5D07559DF17A8BF53F6F747351DA9C969390CCEAD356C6A570100C9F50C3284F615CA52F78E43F2C04FA90EDC3D1DB5AC86A2FDD8842C33AAAE2547, A119756D47690ED23C6F9A587E876E261DA3C794BF0DEEA9612A8B8E7DB1D73161B5D9B35D152A69D5D5C395F996219FCCB4446D2E4B9A915262124C02CDF551 -A128F790FD5C6583B6A68A9BFA2F8422F31A7D0F3A9581FBFBDFA241E590E18DF1A6AB8B418AFE2F1, 73E8907ED46CC1888262154FA61980024B9BF34F42ADA31723168A9DC1E01818DE43A9B2F39B72C74C25425DBF3894EDD1CFC648777BF2E2E1746B0B6A7792C1, 571B4479AEB2F8F0A44F98724ACC5BF4D140EA9972F81C57A08A7CE561694EC0B1B0B91CD8EF2EC7B189A7F39402972426F08859263338472F23136AD5A3CFAB -1E37AE6B2F815308B23F39FD3EE8E8C68D94F772DAFC085F3F39EE6C5B0B2A4A9D4F402A1C4A0FA8D3, 862736338BE183B1CC3EF7B0DB63547501D46B2F21D20E53C9ECB25AF7E0B49EAB825C371BA04835EBB21931AA31AC5B9EF93021A74BFF8872BFF452CB76C212, 734CA2CBA963ACF9C486CA9035469050E9567DAC8025E720AF3EEB50C8F10BE3F407FFD9B79134C441AC87819728CD61ED275290CDFDE4B1A54F6FEAE971F1DF -5AA70B418E83F91A16BDADF7BCBABA53A8BEE65890F4191DBDADCB4511217EDFD7EDC07E54DE2EFA79, 82CCAD3606D8097D4BE78C8EDCD411A79C56021610A2A71F4BECA03420D5D870F46B048F1A48317D6A04C8251632C7AC367822963A80937D10C7DCBCF614FD44, 3EAF4DDFBE0A40701E87E40399D336F1457314CF2D74C97402B5A6EFFA251A23FBC70B361BE7AE09B221E620A74960B41778475A7EFC998B2411456938237A3C -10FF521C4AB8BEB4E443909E736302EFAFA3CB309B2DC4B59390961CF33647C9F87C9417AFE9A8CEF6B, 407F29B39A036F3C53349C5C55D700E81BF0931E4432BDE1B343A9C4D3A9CDF4760785831AC58964FB283F326DAB84963F30A504A425D4EBE3C7756E20E00485, 74EC048B9CB3D2A2BE1CC93FB106D5A5E13DE7390E8CC137A8C3FF4E8930FB187F6AB9408341FA6680CA6A9B43129293AA73A4BA6AA0CD3840774BAB87910FE2 -32FDF654E02A3C1EACCAB1DB5A2908CF0EEB6191D1894E20BAB1C256D9A2D75DE975BC470FBCFA6CE41, 78B50522B9FE2D91EA76F4D8F79075178034498E0B58E9791FA5D9C1564EEEDA9F02BC581F0C2EFDE954DB8104C9BE86F980AC46D23E65D1C8B324D8311EE0D3, 58E289D9FA4524941AB73B3742B8725E9D3A07D6D88E696C76DB36EE035286D62257EC4B6D31DB6FA0CD22CC9D816DE9FD0B6042C898C3B768B3F4729FA8EAD8 -98F9E2FEA07EB45C066015920E7B1A6D2CC224B5749BEA62301547048CE88619BC6134D52F36EF46AC3, 88344B02E84AC318A2273B4396C933275B730D59518F17EB2607B88187D263BA96B951E75F786AA817DB44BB98627D547BD33C35D8E5D27D511EC4A8E588B268, 25E6F766F1DB3B7DB37ABF30CA5A9FEEA95C6F19681F59F66679453E83422E44E9ED397769559CED1A98DC665B963EDDE14B7EE6410BAF06589D35C15D14B7DA -1CAEDA8FBE17C1D14132040B62B714F4786466E205DD3BF26903FD50DA6B9924D35239E7F8DA4CDD4049, 6E7BA88B7D804DBCFF2C5DEF0C5AF66F24479977A4FBDBD170894C5FC2D688166E9E9F3A279756EAEA07CF2FDCED9AFA281B1C2D9E4EBDF6A2EFCB687E78DF63, 191F9B9869FC75F7BEE7ECABB8588D2EA3E526A50BE5A2E4EE22DF6BE01DA0333984B743DF6705ADF97015D080821DE0161569F5FF8E4EFE44A974CE6E990274 -560C8FAF3A474573C3960C2228253EDD692D34A61197B3D73B0BF7F28F42CB6E79F6ADB7EA8EE697C0DB, 45F568A1C1A9F026E5DE35CAFEB5423897BF79CED35AFB64FB9FB80267C1E9CE1CE578068C4FE3F80640A4E033EF2E5B48A4DD49F088EFDF2F8F0A42AFD51823, 24C5D284421008D27CC698EDCCADA2942E1614655C73831C1EEB2F1B4330038F1CF5937FC4481CE42BB29704462126B4B546EC54AF510B2F1C9339DB241CEED0 -10225AF0DAED5D05B4AC22466786FBC983B879DF234C71B85B123E7D7ADC8624B6DE40927BFACB3C74291, 38E50A9BC82B7361120AB7963F62342F4B4B9D41F2BBA9F4AD7DFD490ACA73C239C57C1CA4707CFBB2B76B9141BC353E54AD30DFFC23A1FC74ECFA1439850AC3, 261FFC1098DA2AD3380316EFBA3E3991C607F861AE4BDF7ECBC18D5FE2E10832C1A04DDCA8294D3BCEE049BAEC864692EF3DAA6EFEA67C756D9CE2936D68F3C5 -306710D290C817111E0466D33694F35C8B296D9D69E555291136BB787095926E249AC1B773F061B55C7B3, 58EF6824DD42710B6722B34DC70FF52B40EB54238DBBBE6286BA282BC6117AC628430B47D1D1F455B13E136DAE20A0CED77EA20CC5DEA8C4CB1A470A7FCE3801, 3FC8C95D2367F9B485DCEC8C74163C6FF84C4E7E8C6997A517EA6F0174DAE2078A08A0FB179E374B20F59EA809545B05F2372978F51E1A3664340C1C03BFF74A -91353277B25845335A0D3479A3BEDA15A17C48D83DAFFF7B33A4326951C0B74A6DD045265BD1252015719, 949119F4702FA1D82568BC8A451C5790CF39E18BE0BE3F0A91119EBF5C8A74B420931E0C8B26502924E4C0EA6E848087EBCBB4D23017AA6101C4ED6A3D952FB7, 400047404DDB95E49979C2E42AF1C13F546A4D63FBF5242F52B658C980C3092E09C1C40AEE4B5E981EDB8B4FDEFD39045E86EE530A7376C2C0FD84134C054F26 -1B39F97671708CF9A0E279D6CEB3C8E40E474DA88B90FFE719AEC973BF54225DF4970CF7313736F604054B, 5EDEEE185141DA17BF12533B0301E76F7542A46BDB4FC5E2E25315AB931BADE9050092005FC4D722750A49DCEA25DF11B147E4F28168776E273EF49AB36405BD, 9F0ED2C53620E96E426493F3DB435FE6AD2E7AE14B9A596418024CD3628485F71432AB7D771E550E5A075E6456DE0B0B88B3136BE9BA3D44BB9DA25CA0B715A1 -51ADEC635451A6ECE2A76D846C1B5AAC2AD5E8F9A2B2FFB54D0C5C5B3DFC6719DDC526E593A5A4E20C0FE1, 3E395385FCD2C45C8B25200DED1CB27681533B71B12FFBB46DEB135BF81C298B705A9A913D2FE2B170EA7C3EF148267A3C2484745C03517DAE3263665E6640D8, 1C87479B67C55E063753F8C36551DCA180F1FF8934BA7DDB1FEB5093DDC234DF7DAC064ADD5CCD9293106D580D15943267862D1BF1EAD8FCF139AA43C9198879 -F509C529FCF4F4C6A7F6488D445210048081BAECE818FF1FE7251511B9F5354D994F74B0BAF0EEA6242FA3, 6ADF559DC09E92A26E42F2BE6C5A995114B73E86DB113BD91EB88794AAFD58A4048CA8A6E86D6C66039FA133B014B62C50C7AC26CDCFFE33FD17C28587850E12, 8EEC3B084A3699908EDD836DA6B9CC9A8DD28554706E2B73E013E0742B5B4DE07AC25EA9E93580E3FB154AF8A01220751320FC7CEF1E973D4FB50723F912940C -2DF1D4F7DF6DEDE53F7E2D9A7CCF6300D818530C6B84AFD5FB56F3F352DDF9FE8CBEE5E1230D2CBF26C8EE9, A4CFD499E8E078E7F3AB91E11E9647EDF42D5E73E7FBAAEEC613D93DCE8CE0598290ADE94669B03EF35563B13DC995CF8EFABE6736D4C3CC9957D6863B8218A6, 7DC8D063772281FC8BD559D51120A467985379604F5C7E91DBF8566C5A39E5F799181420DB510684DB248595AD7EA5E5F5F78A4AA3A1C99190D40737341EA4C8 -89D57EE79E49C9AFBE7A88CF766E29028848F925428E0F81F204DBD9F899EDFBA63CB1A36927863D745ACBB, A5B309D6B49FEF712B3586C62BA493D50C2DA58465EB1A4978C56E37F8C932B20084D29B7F1AF8782CB556C2687C125BBF873D7D728A61C6429FC218378699C2, 7AF480E6CE75500E3FEA64276CBCA762F08353803BDDED6B055A7F0F65C990E3AACD1C6FF772CB5375CD4F7EE55374F4ED8E19F7FF40BF8192CD2BA4BCF1368F -19D807CB6DADD5D0F3B6F9A6E634A7B0798DAEB6FC7AA2E85D60E938DE9CDC9F2F2B614EA3B7692B85D10631, 203B99E59A7C583EFAA8416F53F9FCEE656AB55C56E3561927FA43FC87958839435F6BAA4F90538B14C24A7720964C65E18A86B157F02C7359A1CB3114827E13, 320C8A125EA66752A76BA1191871D85D2943E82232E26CAE0291605A408BF8CFB44A335371DF09336E520AF9B0AC10B3114DD340B2D008BF5BC7B10327939153 -4D88176249098172DB24ECF4B29DF7116CA90C24F56FE8B91822BBAA9BD695DD8D8223EBEB263B8291731293, 286218AB9E0A2646659B7C9E0399EF78BF3ECE5EB15E59912484EA5E7B858095C6A9030C6F491EDCAF818AB7C4C27982573DD9C15DE34FB157D1EBF2B12D6E2F, 44C76E3238E4CB735E8BCA35F842A1465FDE1B12907DD41DA9C0598712D55AEBBA95D80F13564CAAE77A358532D403E2B0BE722B7A2606F285F5E08CFA982064 -E8984626DB1C8458916EC6DE17D9E53445FB246EE04FBA2B486832FFD383C198A8866BC3C172B287B45937B9, 3DB6A30B67AA2D38794A036B547F3BDBD21CB39ED0724FA853323F42AA93A15CBB97B92FABF36FCA85226CC676E1D195EBA82098B147E72197071AC0180C3C15, 7E0F2511EA2ACC480CCC135EBCC0733440BF0A8AEABB1A574E1141945C0247613434CD1E221B7785AF5FF484EFE30770CD41074695DA57BCD891DD317FF3D838 -2B9C8D27491558D09B44C549A478DAF9CD1F16D4CA0EF2E81D93898FF7A8B44C9F993434B445817971D0BA72B, 37048DD32CB0C860D278F52C2150AC849DB2BB2B91C071520E2D36B99BFDEB2AD5FA6697072D32359512ACFCBD3FC1EA4BD84C252AA7C3B54F411E3F756B86E4, 4F37AA1B7D357A64D9A8AD06C89B89F2F37AAB9BC68E3B8134561D8E9C34C81C364F5209E9F22AA25856A87459D633B3E106A3AA0C8EAD0538636AECB823CA8 -82D5A775DB400A71D1CE4FDCED6A90ED675D447E5E2CD8B858BA9CAFE6FA1CE5DECB9C9E1CD0846C55722F581, 18FFF63BB7EA2BC204CAF79768A492A8E14590CEA6F41C785DB17C34310063847013DE52523F713CBB1635DAE765CDAB1614FE98CDC3EE9E2324C8B5087640C7, 49B8DCE9198187AA48E90E01B4CFD21F6BF11B1687C40DE9D2AB2E46D048C1E42E132D8D8D6F1F5E9C54B2CD0473DCE1F054D05E41C2FB6CA2C1C0FFC46CAF15 -18880F66191C01F55756AEF96C83FB2C83617CD7B1A868A290A2FD60FB4EE56B19C62D5DA56718D4500568E083, 86EE0005D5040FE7D4463897A5837DDA4D1CF2BA45264D639366B3C99F78EB2317BFEACCF0357C73A2BBBD6F000F695848D0C5B5BC14FA2DCDBD6D448B5E5A10, 4C975AC1E9162B3FF9932E846C5EC20A0F9E8C0F60A581B2E3CBC1FB74712D06605818A33B19A612EDB7BBB2BBDBD74B1D21106A7D479C981DCFCE93EECEA80B -49982E324B5405E006040CEC458BF1858A24768714F939E7B1E8F822F1ECB0414D528818F0354A7CF0103AA189, 597FCB7629F972A8FCEBAF347A5FA4EB87C5C7B412FB773EF1EA5A402C619A1A8186D90BA50EE67A57BBEDA69C8B66775C75FFD249D6F7056B5BD2FFBB5CB26D, 8B9522C93F1BC2D0B825AABD25ACCAB05386C372B25712F4B140BAF73C47A0F5BFF5556B6F506592C7E6C4333917470D7714C37B6CCF0F20A29E8EE3D8061986 -DCC88A96E1FC11A0120C26C4D0A3D4909E6D63953EEBADB715BAE868D5C610C3E7F7984AD09FDF76D030AFE49B, 11F4FE4BB05B2DD3731B376CD13076B975EEE0FBBFCE96EB77AFEB43C437650C2F5987A15E9197A6BEDFEA7C1471CFF4F10CFD28E5988EE5FFE82C90CC0E6E73, 26BAFB8F750AAC13D5F38F29297330061C60E824E27717DC9BCA3425A6BCFCA083AC306EF75A3F83D3A1EF4D78853892AD60C49D6938C56A8B600BF5405687B3 -296599FC4A5F434E03624744E71EB7DB1DB482ABFBCC309254130B93A8152324BB7E6C8E071DF9E6470920FADD1, 786E42C03E927409DFF0BC169EA07B2C1F5883B1082BD79B2D056668A027C5A736A0C53E861C4D670E27AB36809123486A3A829A451C04CFCEA02061D900B390, 4FDA77011AAB86E27BBB8EAFB0A315721310A96D1688B6A1DACD2A9B57AEEAF6FA76FE8203ED1CBC6D10052F85DDFC844023B25327D604C254ACFBFD88B4F788 -7C30CDF4DF1DC9EA0A26D5CEB55C2791591D8803F36491B6FC3922BAF83F696E327B45AA1559EDB2D51B62F0973, 85032928C58971760D24C537B6A8163CB932A5C8BA1F7613533DDFF48E55A573524DFA94F9BFF55C30A09A0C2D0CA3D9A6EFFB980330DCFA2EC944801FA961FE, 3A79599D69328830D92C147DAE07DA84F0D2E17F5DE69F7073D443303A826091C1F9B7F2A668DD3EF1D2AA37E70CC0B94A34E82C51A5006EDF1274D2936A158A -1749269DE9D595DBE1E74816C201476B40B58980BDA2DB524F4AB6830E8BE3C4A9771D0FE400DC9187F5228D1C59, 84A57411C2AF7C314911D133977010980D0C134C2BC8128BA5EC8F0E6A6AEA3B2B42FDF20071A070B013802E28C02D22EFDEAA15648C66E6D455B4DB4081A4CC, 3B5F6AFE6E76F8846FDEADEF784E2CF1386A8122F364A91EC50B0EABB0DF3D6C0A0866B6D958B4AFCFCB8814AB433D3101F36937991DB8E4123BA8377CC44940 -45DB73D9BD80C193A5B5D8444603D641C2209C8238E891F6EDE023892BA3AB4DFC65572FAC0295B497DF67A7550B, 46ACCD73A75A36B4CC34B207F1F68BED73444162AE6180BEAD5258AA454C26C59E3C43E8BF6F2C3C8CF86BD86F02927A890D84E96219403D57813D0ED11D856C, 87DC87C8A30735D9CDC1C32D23F62E786D9878870E73F82906CD7F158C06A28B5BEEC7E0DF081A49CE69B26EA4E84E3719AD5926F9FB5797869D32774BF27189 -D1925B8D388244BAF12188CCD20B82C54661D586AAB9B5E4C9A06A9B82EB01E9F530058F0407C11DC79E36F5FF21, 18E2687EEBE01D7273F5E207F72DDEBEEE9C606CD9836DA698532DAB033BA54650ACE402FDAC4257B45C1C4BF84723E5A28731B43A1BF489FD082A81900BF08B, F3836207BC7745D3ECF9BA618ED18C26F60559F074187CCF8C807307ABD9253EFEA8B76D1E152B8EA10D6036186AAC476E24C6ADB965B4F8F8981E1375E4ADB -274B712A7A986CE30D3649A667622884FD3258094002D21AE5CE13FD288C105BDDF9010AD0C17435956DAA4E1FD63, 1B5901AB8475DAD688AB3C8AFF6AE7647F47507A10BFF8E712D54282FE44A2F656392FE24AA65E065BB025BDD6E175628669E8C390D8A74895CFBA1EAC740FC0, 72BBA8321056EA3F223CDCF239BEABC9B2C1D652663BF12495BEDB210E82967F812570826132405BD5A4191905D44A8101715BAD6835D58C9D79BE9BA951EF43 -75E2537F6FC946A927A2DCF33626798EF797081BC0087650B16A3BF779A4311399EB032072445CA0C048FEEA5F829, 893EED22098019C05A66A21540D471A7F641F649CB3C9174D86EC2DA90A0BECCE688F6C31107871CF781BC56B3496586C4608BDC0EC78B6D8A3906F1BB6FBED0, 5DBB5D197B24851C710F3FD170FA9884FBF3440BA688B96E403EBC0444901B66EB82A4652E7BCCB4A20E4F5CA0EE8409D3D3D433621DA74BC46A0BEDFD9AA1E1 -161A6FA7E4F5BD3FB76E896D9A2736CACE6C51853401962F2143EB3E66CEC933ACDC1096156CD15E240DAFCBF1E87B, 85E1A023ACEB9E00169EAFD71067440435115D9817B93371734A146AA2ABAA2A8EF185F853FA2CD6865DB01B4C20E411531DEF781AFEC563EB113E1DDA9D48CC, 21F815BB2AFD0B5E85F2AC300BD636E31D8E24974668BB871BEB2A8797DBFDB4B0D01B3534CF4125188287B65BC2A59221C7E2D1FEE2A32B641766783A308044 -424F4EF7AEE137BF264B9C48CE75A4606B44F48F9C04C28D63CBC1BB346C5B9B069431C24046741A6C290F63D5B971, 618E4750D1C02EACF5B6173992783CF9EF07ED020CA7269514F3833E4D26D70451DE031F043DC3B4AD6CFFF9D383501E2545FC87D981CADCF9D59EB5550C35EF, 3B4950FEA5E12F1DF24C66B19D4B072560142C93CC6E4390CF3F6FE52E100CA5E4D182C81F056144572FE9CDF770A805C29BC8348B55779C173C7B58E977F29F -C6EDECE70CA3A73D72E2D4DA6B60ED2141CEDDAED40E47A82B6345319D4512D113BC9546C0D35C4F447B2E2B812C53, 760ABA75863FBCFE22B98BE3BCDD1AD3B4FD0FFDC9D63EE2150D3C70DEF45F5EEBCBA8526189C9BD3BE5C0E4117EE7A3B2711703F92EA6E07191ECE8A3559137, 1B42E6DB168F97836B4E0301617290298BDD00A4329B8F5DFC6BCFCE17F3D4EE982C36DDADD679D6139633CB2F665407B19CF6A7FB8B0BC4BC95E72DE8CE62F1 -254C9C6B525EAF5B858A87E8F4222C763C56C990C7C2AD6F88229CF94D7CF38733B35BFD4427A14EDCD718A828384F9, 581B615EBEE72175A9A89C32CDE5FA05359F2CB963A5D8CE73A0E024EECA393ECA883A60DDFE438FC1E504FB02C0F8EE0C9930848EC66E759389E8B6AC98C980, 8FCD62537E782162C94D8015CA9B8EB35177399F8A40062061A8848FB24CE85A755EB03A4492CDCA0B4C5259210F42F69A2CDEAF0624F419E4A464B81E01C7D9 -6FE5D541F71C0E12909F97BADC668562B5045CB25748084E9867D6EBE876DA959B1A13F7CC76E3EC968549F878A8EEB, 7A35FC8BD88CB361FB20AB7FBA0DCF2EE755522276C74E186E79C11D305671C8978FBF2DCC213E24F5D0935E4096ECE161BE2C140E05BA689CC2576F61A89F8C, 4912F2C6DA633215CC90791FEFD8D7ECE3333A026BFC3D2E5E58B03049F61048A8B877E97A1C8788883AB5F75690E27215C0BE7CDD067559FF7ABA9C0F678146 -14FB17FC5E5542A37B1DEC730953390281F0D161705D818EBC93784C3B9648FC0D14E3BE76564ABC5C38FDDE969FACC1, 944190288E7897CE46381A9BF3397585EEC7A01F95BE5AA6ED543F4029079E63F1950321119FDE8C2200D3C52FE41C507A52188A202F4E755F290463698A4F4B, 660633547200155474D73809FD53866212806A2005871E0BC34E07A8E81857ADC6D521167046472DBFBE849B925E484BAAC092745748EC855A92F53EFF795D8C -3EF147F51AFFC7EA7159C5591BF9AB0785D27424511884AC35BA68E4B2C2DAF4273EAB3B6302E03514AAF99BC3DF0643, A017B1E9C34D66FA30F50019B8DEB7593545F538EB5C9FC8F35E1513B6995F6861845860F4AFBC612E000B2CB8C2F03CE1389AAF1290D62C56FF1095B602FB96, 1101971147865354E9A1ABFA1729DB85E5E341B98498C7264FC4ED4315E95EB2E734999B42DEE0FFB9795D3D0645668764BC3B98A36D63159DE904A55D568493 -BCD3D7DF50FF57BF540D500B53ED011691775C6CF3498E04A12F3AAE184890DC75BC01B22908A09F3E00ECD34B9D12C9, 672079C23ED824526F3224188613D8F06E4983E93E7F967097D6581492D7FB6876D2EC23C0E5A7C12E7820FDFEF9332D3E6E4435E15663270EE18800F5437C53, A670D3649A8A820028DA45495029E306D75F3A9E3A438879F39232E0D435DDF8F391E2A9F777BAB90E42954595BDCBC00EBE2AD951822E275287E0FAFEDD3B95 -2367B879DF2FE073DFC27F021FBC70343B4661546D9DCAA0DE38DB00A48D9B295613405167B19E1DDBA02C679E2D7385B, FAC38B1CA88AEEC3447B8546761B9753D603B30577A5FB221A06C8044A0E41CE61D60BB5768DFC2DF3D7C720FE3B3425BFF1FDE726619010CDA7BF24EBB847E, 637212416E54DE5DB349706F7163C61CEFB28D590E60CD5B4D4DFF789D2A306AFB387E5ADB2761FFEC7BA9139011721AE9D4D9D7D2E2A46DD13B827A7D5870F7 -6A37296D9D8FA15B9F477D065F35509CB1D323FD48D95FE29AAA9101EDA8D17C0239C0F43714DA5992E08536DA885A911, 271CD79AEA85A046AA01D5A3D77F1540D317BC7FCCAFF091A212C5E5B3AEDC313D3C88FC999AFBC13223538CB4766BFB483A79A74E1B9D69F82C2022E77A03C8, 8D35CCED1387BA960FF56E5D0281C3DBFAD6AEBEDF75727E67E54D10454A658FBF44EB0B4389FEC823014A77ADF537FECF9204866E3335D08E2E61CA24FE063C -13EA57C48D8AEE412DDD677131D9FF1D615796BF7DA8C1FA7CFFFB305C8FA747406AD42DCA53E8F0CB8A18FA48F990FB33, 79DEA23DB396B2D6A77EA64478A65890A776045EB5217E49CDAA93C2B3A41A6BC62D28FFECCF49447344C9D05664010AEAC4468F88983C0F5EDC6457765CB4D4, 849791B6CA5B4AA99A4309C7DE1EBC2E8DBDF318AD50AC491414F9DE643CC143B823D97FEAC112545F9653B6EBF3AEA326D567DD01FDE2D1501B9198EE1801C7 -3BBF074DA8A0CAC389983653958DFD582406C43E78FA45EF76FFF19115AEF5D5C1407C895EFBBAD2629E4AEEDAECB2F199, 46A75A9BA2517160AA1A0D0A57912226AB499A1FA48452E91C33B27DB1F22389F403E9F3543D0734555743BCA1EE4B554A7877DABAF5BFC60F05F41C1551979B, 608F69B0E6BC7FFA0A253873038B28F478501934D94AEC905F98FE5788CB004D8608CBCCA326F20B17114C7C038B2F06C0E31D6D32CCDB617E08B2C87EB2F711 -B33D15E8F9E2604A9CC8A2FAC0A9F8086C144CBB6AEED1CE64FFD4B3410CE18143C1759C1CF3307727DAE0CC90C618D4CB, 5034646711A346E3228D5F5903D4C4AD5F67C6B4D50C953967E61BBBBDA6A6610B7302EE7A9B5ED726F4286D0FB3C36E7DF241B92F32151B92495848D43CEC7A, A613CA00B345E7DD9A129BAFCF9ED60B3BD84EADEC82D8C7B149C877BFB1B7EF907CB7B91CD0EF15B77223EDACFD92943B26A799CE993A0406974CD6F7A900B0 -219B741BAEDA720DFD659E8F041FDE819443CE63240CC756B2EFF7E19C326A483CB4460D456D991657790A265B2524A7E61, 4278834E232ABF404C1F605528C5CF265666D0602F869DE631A2DFC18DF4DDFE94CC0BF5C69139A0BC9B035B0ADA2B7E4DFE480A3DE9361C45F27EEC42146AB4, 62CF885646A35457249C6D706744F03E51ECED64B83E6C4BD3197EEE4AD030396F0539206C2F38D2AA287EF7535B6276851B0EE4A9B30256F363FB8B2523461 -64D25C530C8F5629F830DBAD0C5F9B84BCCB6B296C26560418CFE7A4D4973ED8B61CD227D048CB43066B1E73116F6DF7B23, 483893B1FE178D564B3690D551F6BBA44C36C7D737B7745A22627B33AC4322654E077F7E887962AC30EAD117A5BF0085E883E0E47EB482B47BEF91D96413AFF1, 6D0B0376C34B1D1562EE6EB7E1F994AAF312839DECEE49A5BE4CBB2090F8EB59141C604DEF20B47B5EBEA2665E4DCE828224D1EAE3AE2DF50075327EAF9C47DE -12E7714F925AE027DE8929307251ED28E3662417C4473020C4A6FB6EE7DC5BC8A2256767770DA61C913415B59344E49E7169, 850BEF31E8D7B6E7166CF48BB8FFF9C947D4D5A7F756F83CEC6FAFAC8F9AACB1BFFA93B67F45C7CEF79CBEBBA8A8E17AF85799B1FBBA8A41EF247EF16658E67D, 907D5BD6BBFE3AEDA3E77458157EA2DE53E20E323504476A8AA97E0777D2299C0707A20DC798B8B614F9EA46CB694084CA080E5567952D1A269604607E685401 -38B653EEB710A0779B9B7B9156F5C77AAA326C474CD590624DF4F24CB7951359E67036366528F255B39C4120B9CEADDB543B, 7C208CEFDB39C4AA4F38C60CE9AA8555E7DD2B9EAB3075C6DF9BFF905E0EB927BEBFF8AEC2CE78613588BFB0658F5B53E8DF368C466F2119764C5347AB89CB7D, 3642532808680A3C5CA444D157B1AE1C7DCEE2D0724E6871D0DCA29258583E74C9EC11200647F520FBF72ED38A62DC47C4F806B8DF208BA14B21F3A7E4A9040 -AA22FBCC2531E166D2D272B404E1566FFE9744D5E680B126E9DED6E626BF3A0DB350A2A32F7AD7011AD4C3622D6C0991FCB1, 8A9A5314A952AE2F08EA92D2591E53BC940E692CE1B8D2C14A70DEFEBCD1672575EE677C152255D3F65BFC90CEE88EC42A87FDC76E80ECE2F3481AD16E735916, 9E7AD1657DFB0E76D0C83342A945442F9871EC25D847F2578A3483269D719697D12766D8093423C719243AC2AF8E7B97033088B6BF1ECCCAFFC7D716D4443BE4 -1FE68F3646F95A4347877581C0EA4034FFBC5CE81B3821374BD9C84B2743DAE2919F1E7E98E708503507E4A2688441CB5F613, 426B7503122DB42CF891FF5DF140AD3F9E60B6DC15155F1EDD0B2EB1AD6129F38C2ECD950B45268B28C3AACEBDF7BB8CC22B27D1E572878BE2F9F4995138A268, 566E07D188CAA50EF8E2B770709158D05B0BF97565B94118E9FE4A5B80C503CF177425DBE87E062A19EFD846933B1B1143BEBC52DCBA733271131F77491662E1 -5FB3ADA2D4EC0EC9D696608542BEC09EFF3516B851A863A5E38D58E175CB90A7B4DD5B7BCAB518F09F17ADE7398CC5621E239, 441DC38C30799094198476F14C81A8573B5830EF84A9FFD74CDD8913A82DF234551DE2945D0DA464CBB0E2E8BBACBE8DBC035D46EE6EC17E1F60D42F13ED8D46, 873201DD7B238783AB2A1F98EE77161ABE33AEB34B081D91DD3AABF4DB9992EE9141E0F8E90186488D315260344042A05FB7AD8672FF33BD4222542B5019008B -11F1B08E87EC42C5D83C3218FC83C41DCFD9F4428F4F92AF1AAA80AA46162B1F71E981273601F4AD1DD4709B5ACA650265A6AB, 8D39D60FDB3E07EBE3F1B279D5D39587B0DD002957985A65B1A578F7532EA80F69EC537FB147F428486CB02B127CA2622AA94D216E2854D8D64F23A2ED2C9617, 5D9C4ECA7E1A204ED5252B65E4D5495177B2A775C01CC3564E081679BC8E0A10A7CAAA853E69E7621863BC651E4E5C45728489B01BBE3A4DF2E3F7C840A2D371 -35D511AB97C4C85188B4964AF58B4C596F8DDCC7ADEEB80D4FFF81FED242815E55BC8375A205DE07597D51D2105F2F0730F401, 339AD4A4A1053274564EC6F56912E3C943444572E45679CA8769572B409A5970ED08FB9C9BA4D7DA236E03C7ECD2994BBD9142990AD2A22A4ACAC1D6EFEBF646, 4B95B3307D368CA6C01AF83EC9A68C3133B227689EBF98873DC4EFE8CD97FAF8978D641845FFA5DCB95C568CCAB7F03BE1FB3B755A1A79BDF864273B7B6342F0 -A17F3502C74E58F49A1DC2E0E0A1E50C4EA9965709CC2827EFFE85FC76C7841B01358A60E6119A160C77F576311D8D1592DC03, 6C107FA82EC8BAE0CF3B98C5FBE6A5CCA7082C4210C6C6EB8EE9958B120EA4CA9F4E4D8ADA6EA26C64B961BB5E27DA58CF9EFFECC4E20F7470F3BA5E610CC4B6, 43D5A2F0FFEFD71A47BEE8F9D7D8B44E8A0DF89C183C169AF88EB8653963A937AE47FF49D1729667EC784DFBD0B3A34368A9FE1EC52208D97A5C3933BC88A302 -1E47D9F0855EB0ADDCE5948A2A1E5AF24EBFCC3051D647877CFFB91F564568C5103A09F22B234CE422567E0629358A740B89409, 64BB03FF33F443776DAF903D1208C46909AF279C23B91F512E50328191EC43F5B23933FC870FBACBED792448BFFFA600366F30EC2FCD4232E7A696204564BC5B, 33B8E7FC2D99D513D2A682929639198E011B361AC6A9B9E162D49B692DD8EE8318FBB301F9F0F7E06C629595F1B92E17E9790E51161A69FA7BBF60872B2214E4 -5AD78DD1901C120996B0BD9E7E5B10D6EC3F6490F582D69676FF2B5E02D03A4F30AE1DD68169E6AC67037A127BA09F5C229BC1B, A85E59A7B2A400589514FF378D06C25D7C42D3393DDC57C136596A0E50805B875E7C95130DDBAC826E9088C8F76782FA8A976DB441D665AA912CCE6E9A554205, 87EE6C0A5306E6B1054DFE21593CC6C880359198E0C50474B45A0F085926429EBEA7EB64AA9057FE278831EA1A57A58E1320F4F425883FC8877149E3AA6224BB -11086A974B054361CC41238DB7B113284C4BE2DB2E08883C364FD821A0870AEED920A5983843DB405350A6E3772E1DE1467D3451, 4901EE84DBCAB162E6664B5601C28F44B104F82CE56BF9FAC6806B5C481557A1F8BDE00A575C260A53920D6C731F86EDB5E569C3DD623AA76616B2BCA01AD626, 1DDE46B83F8318142F327126760F01DAC410CC1082C3BA7A969331FA4D5D9D58856C304D94825BE8B9C4FF34B32E5A77862A78EC316BBC5CF90B1A4713659DF0 -33193FC5E10FCA2564C36AA927133978E4E3A8918A1998B4A2EF8864E19520CC8B61F0C8A8CB91C0F9F1F4AA658A59A3D3779CF3, 328F3D628DCBCB5176742DD9F7AC00FD98B15581F7FAE410F42D61EE67B0641D92AC99A51DB45871ECD48CBBB72A5E7FD41C6605CEDD649DDAFDE40EC875CC3A, 1F30B7123905CBD8E2EFF9AD88ECDCB62A646416A08A48256B66AEAD2C5FE7AC9A84F47C409D806B38D18CE8FC930F8827CD270DA826972FB5F6812056136DE6 -994BBF51A32F5E702E4A3FFB7539AC6AAEAAF9B49E4CCA1DE8CE992EA4BF6265A225D259FA62B542EDD5DDFF309F0CEB7A66D6D9, 9F96A1D78F72904638111CCC3FBC833B3C862F0976AD32365C49A5BE7E314914D9A28E2D40C217491ACD19B39418CD76D73E895330B2FC995EFA3A8B5A24FC4C, 6AE0361F2CEE7E2983754B12B2678B7C8931A430219D408E3C7754DE7A9DB678B96735F2DB3F8C1036351DFAEAB600B58C5496B03B456D3612D385408FBB9A41 -1CBE33DF4E98E1B508ADEBFF25FAD05400C00ED1DDAE65E59BA6BCB8BEE3E2730E671770DEF281FC8C98199FD91DD26C26F34848B, 8C1038CCCB298792533F655E018A6B5C26BBB85574C5CC54811AC768EBF15D33D3E28E0C600ED68724F3C6B9F9DD80A70303122AC9E06F0C1A91118E684B87CE, 8C1ED988CF3CA18FAEA895FB49BD15D6421666911FA8195FB39E72E5B288ECAC05608189E8AC84A8A132457B2B91EC6AC518C18D48A080F3949A8FA1A57AF50E -563A9B9DEBCAA51F1A09C3FD71F070FC02402C75990B31B0D2F4362A3CABA7592B3546529CD785F5A5C84CDF8B59774474D9D8DA1, A2C064E78CB6A2E57DDA42962DE1386E99441AE373C28006992FBE3DAC83EC317EC4DD1F89A3F1C85ED8254C836CC127762D30335D0721EE931EA6488BD7B9A, A5AA23471EA9F63F8A4057FCD515797908A4E8A86C5D0CE3DEC365E1F12EDE3792F93938ACB99EF2272EBB1BFA436DBBFCDB64C029F84A08ABD839955600FCC8 -102AFD2D9C35FEF5D4E1D4BF855D152F406C08560CB21951278DCA27EB602F60B819FD2F7D68691E0F158E69EA20C65CD5E8D8A8E3, 8995A60E20DA3EF178B274EC2C1AB7BAD172ABC76F4A563D7C30CA02AB683414E573EAAA00FF32337B5665050675A9896A1D4A06C8DFD697A5528E50D9EE26E6, 5BF0B9538B2AA971A1A7269687CD042B4246E60AA9A830D8411B2BE8D39C19BE5DECC73755CBC5C3604241AF4BBBB6703A1AEE08A11C4184DC093042162634E7 -3080F788D4A1FCE17EA57E3E90173F8DC144190226164BF376A95E77C2208E22284DF78E78393B5A2D40AB3DBE62531681BA89FAA9, 9255FF659F8C00E6E299975F5A3E889C9E219759E26DBAF5A17239144EDD8F5FDCF773BA6FFE481293D378A37DBE1F9C80A4802695233F51126D7F2AC4EE4223, 265792C7D42DF368DA672C0A4A6F3BE916DE83950B1FB913017276D069EC4B1769BA92FA6B98EF2D379B78414AF207009FBF501FA7941781CCF3C7615BFB8D57 -9182E69A7DE5F6A47BF07ABBB045BEA943CC4B067242E3DA63FC1B674661AA6678E9E6AB68ABB20E87C201B93B26F943852F9DEFFB, A03D9BAB649BFDC4DFC43D61840C8206E391787E6A6BD446337D226E64467FC946E8C9D5953EA205F61139B935A4BB1431E44B6364758A054B64328DBC4E10CE, 8B49F1513CBD296306653E8EEABDDF632886A2BB82C6C6FD48791CAF6B6AF3C6375655364B7CFE89DB4B8CEB7BDD5BD17270F0E0A11168282FEE6A0F2FC8D622 -1B488B3CF79B1E3ED73D1703310D13BFBCB64E11356C8AB8F2BF45235D324FF336ABDB4023A03162B9746052BB174EBCA8F8ED9CFF1, 76A74DFE489E6468DCDED5A301602D98D155596200D7F67A208B00FA8AB7DD1CB8E47F499DD37DB6C22C3E3120214F21D722F2D59C9241AD83E662FC28C1953, 43F6CAC28D82051A5B3C4B704EC7B47FB91702A655148B9EB31402FC96CE406549D9C15AA5C6704BCC678872CCC02BF198E45FB94C12C785183FEB6B8AD5A046 -51D9A1B6E6D15ABC85B7450993273B3F3622EA33A045A02AD83DCF6A1796EFD9A40391C06AE094282C5D20F83145EC35FAEAC8D6FD3, 5D84CBA4C42109C403B3433AF720FA8B149C3D48632EA70E3A2E0FF9D678836BDD42F5BB7ACC113E0110C3A36D044E84F323BA086658E0E8E30331DACE1241A9, 44F42F764EBE3BC7C390AC16CDDED0BF3F7D9239EA2C173F38F69A0E5F7C041310FD8A4BA5C3518298694251C926EE008F02F6BC7B275A01A5D5E992A8741AC3 -F58CE524B47410359125CF1CB975B1BDA268BE9AE0D0E08088B96E3E46C4CF8CEC0AB54140A1BC78851762E893D1C4A1F0C05A84F79, 33D8DE01443E206F7FC4A0B2A67856489E01CEE44752B86356241FFBA2A17FF1873637733A37D135ABBFF985EEA75A83B06D04F4A94CDCCCA65398272BEF2FC, 5BDE236DB09F9B58DDF44BDEAF0FFBE9DACAD67C3BC2CA3617764155D705B1457BEFA3746E80A4D6A930286281BADD0F5B7B34153C8A976C9E5DD70059DCAA11 -2E0A6AF6E1D5C30A0B3716D562C611538E73A3BD0A272A1819A2C4ABAD44E6EA6C4201FC3C1E535698F4628B9BB754DE5D2410F8EE6B, 3B8AA1B3E1ADCE12241E1A5B54901A4F26DE6523D0289FC366A0EF0006A0EF585BED519D70CD10B69314F3ADAB85B126E676281E686843FB19D410440E62D040, 5868603D99A0EA0A1D30FC959319F61207C70B1174F8A83B7635302257403A596C6076D820DF3A261B699CACFDC2EC165C488C08F0B133E9810F0A16FB35CFA2 -8A1F40E4A581491E21A54480285233FAAB5AEB371E757E484CE84E0307CEB4BF44C605F4B45AFA03CADD27A2D325FE9B176C32EACB41, 7F463E846F1F6162BA010CDE17B85CF746A2869082510E16EA60B42CA4936A1906DBC3176B2A70E9A6E84A562D1D35DF6688CA6F9B58AE0F447FF2FF4DAC91F7, 960102F90189218DE22BE17ED573C7B1A8F8A9247D3218F8449548871C7DBFDBFE70A21FEF92D7D25209310A6AA5B7D7466854A2576933B833022E47E3F0C848 -19E5DC2ADF083DB5A64EFCD8078F69BF00210C1A55B607AD8E6B8EA09176C1E3DCE5211DE1D10EE0B609776E87971FBD1464498C061C3, 92FA8B0A51DDC1979793C753C46A6B0B83E239C4E3656B968B5B03A2CDA0CF518C819936210DBD343EAF7CB61FA331742D7AEC3CDC4A7AC2F3032F234264D184, 4B1C0B649617FABD9F4CF677A728DEFD931BC42A7881AD98D66F0B59EC51B53A19C35A16BE93E8E21679230F6FB9AEF8CBC04C64EEEE37079B68B1C399B7D65 -4DB194809D18B920F2ECF68816AE3D3D0063244F01221708AB42ABE1B46445AB96AF6359A5732CA2221C664B96C55F373D2CDCA412549, 899738E070E23C6CFE6875AFBB094623D9B91BC3B3BF7EA8716CADE6AAE3F2283367205E584556F200369729E39B2E0506A692CEB5F919276AC9143718E4F75E, 5EF7140CA05AF0B53E4CC51CED28E68D3C10B821476C25AE4798EB8CD5E91240BF07833A9BAC7470F4F1A62EACBE3FC18BB9CF52FA2DB75700270053ACF0EDBE -E914BD81D74A2B62D8C6E398440AB7B701296CED0366451A01C803A51D2CD102C40E2A0CF05985E6665532E2C4501DA5B78695EC36FDB, 3F354C34EFB7FDD5F9F1DD72F47EFE63949B5857A1AE454C44B45A97C23BADBAC1668D591717C45D72C14EC02806CB0015ECFA0678BA1D0FEF1B9A58BA394AF, 582627540BCB0419DC02F846F11DAE31E89ECD49E6197C68C177397D98AD11373F1DC16669696D0919CAD158C2703B72525AE9251A2B28F4E0AB371357600A58 -2BB3E388585DE82288A54AAC8CC202725037C46C70A32CF4E05580AEF578673084C2A7E26D10C91B332FF98A84CF058F12693C1C4A4F91, 951865A77468DB13399E17CE995AE25C54CEA5780FF019B28CA0D847DC33DEE86E0CA63BB8986A118B45292B9C4008DB1338D0E2DEAD4F5893D92E2A942015A9, 1F3D47043D90ED43F9475D9F2BC5FE5D0253848916F2B47A603C52697652512F54F930A888EE0E61B912E5A63E3879927F771944CEC390DE5AA06795F9EC2653 -831BAA990919B86799EFE005A6460756F0A74D4551E986DEA100820CE06935918E47F7A747325B51998FEC9F8E6D10AD373BB454DEEEB3, 457BAC6AD950A1EE8D4999B5A1851B04D7BC5FA74DC46DAFA2A8D1AD570AF8E78F5ACF2B55EDA88E457B8C88CF4E49B2E2A7D665E66B062D7716B20212E3CAAB, 90277606B64C6E28DAB055C7993C40EBC8EAECB0EE566096A7CA85B48890D68ACAB585F56FA9971B52AB6DB3DB0FC254808C98AB4E26E792440CD75209555394 -18952FFCB1B4D2936CDCFA010F2D21604D1F5E7CFF5BC949BE3018626A13BA0B4AAD7E6F5D59711F4CCAFC5DEAB473207A5B31CFE9CCC19, 2A558D365A374A6F22D9BB30E67372BEF6E1B4E5C1CD8ACD757465CAB5427774CA2F40287F787D04E17BB34E7AB9767DDFB14EE50DD39A9312E6AC2AF945F5F4, 1275F55F7FD86BC95233E4B26554EB658D17AC7DCF8EDCDC054AB395397B89B10BC78F3E6BCC21AB43ADD981CB8BA419D32BD89FE4DD3827C3B622E8CFA42D8B -49BF8FF6151E77BA4696EE032D876420E75E1B76FE135BDD3A9049273E3B2E21E0087B4E180C535DE660F519C01D59616F11956FBD6644B, 166F316177EB1B0B50B32AF5A334C36D804A5EBB743F83793BD61463513E9CF2627D7A9D03077A4BD64C5255B51C83DB6E02A45FBDA4D7CE72BAD4C6232C8878, 9684B03F19B033FBD7722A63B16CE7C009FA34B5347837C9981520EC9769B1735119A52D61510D3D251C22A5F677C905C738120D3F81E0DF8D00C2769E6BBFEB -DD3EAFE23F5B672ED3C4CA0988962C62B61A5264FA3A1397AFB0DB75BAB18A65A01971EA4824FA19B322DF4D40580C244D34C04F3832CE1, FA215F99B6D960A31DFA35DE916735E79C0E2003F1185ED344C2E5BD236F661488D8C9C26A0F65E2A3B959748097366E5F21A70F76DB1502CE51D58C802F919, 34AA44CFD9EB47F5DFE6E48EC689F5137DF316B7FB2511A8D7C9971CAACAFAF2F3C2C4F300F206DA3B6F867032E47852314C33DC81462DA92E4CDC89550892F9 -297BC0FA6BE12358C7B4E5E1C99C28528224EF72EEEAE3AC70F12926130149F30E04C55BED86EEE4D19689DE7C108246CE79E40EDA8986A3, 49AFF02582697B700A0C0E80EE5C316D334D884D91D67D5E4B0E2CD4E284397AB443489B8B7DA2F481197408B99D17DD4DE629B85DF87BDB2B5B0DE49349BC04, 8C4A4FC2155987FE26776AE4F2075CAD44B8828FF3C595BF749BB4C609DCE4AE9620A4E4D7B21D503B8471245297558AA0F93A1B6FEEAD1CDEEBB016B2BC416 -7C7342EF43A36A0A571EB1A55CD478F7866ECE58CCC0AB0552D37B723903DDD92A0E5013C894CCAE74C39D9B743186D46B6DAC2C8F9C93E9, 33294DAB3FA6C6287DFBD08CC1DEE7B73E848AF9AEAC89EA47BAD14A371098D77EF5963BC2E91C2626849508A48C46445690D4E0103C2F701CB5ECD745003AE3, 17F4D38A456DC0C1601A9D84207517EB102BB02118676093175051348CA824F5D8D4EE033D686B4AFD4473E41BE5C564AD1CEB20D9E5893859BAFA507C8AAF45 -17559C8CDCAEA3E1F055C14F0167D6AE6934C6B0A6642010FF87A7256AB0B998B7E2AF03B59BE660B5E4AD8D25C94947D42490485AED5BBBB, 1B0D8F53942B0C24FCE49E9A71C55B940144469C1E0A98BD09C48165F8FF7AE9D675A8BC61AB8A3DB826CF6586533E79450D9B5D677371CE392F7AF33076D85E, 910F830B3E07E885D57DC87899298E7661C59F028CEB8856C5DF06DAC17B9D8C4D8720F63D92008F46D9D62FEF1782C087522E32E657146BFE5E20FA7D217B71 -4600D5A6960BEBA5D10143ED0437840B3B9E5411F32C6032FE96F57040122CCA27A80D0B20D3B32221AE08A7715BDBD77C6DB0D910C813331, 4974A3A55E052584A622B1D36E1D0C625C65546AA5543B3E7ADA19A7B39CC5237FEF859A6D2D05238B5B235BF973EB9D71EA398ABB495863D6BC52E0EFECA21A, 5911D98A5593E4E3B7BA68F056CBD611CAE63B9F20116A2AFCBDBBCED1F70F7185E1C671FE60F2B966733D3B4EE5DE58C2405D23233D1AE8B7D06F08B0CA9104 -D20280F3C223C2F17303CBC70CA68C21B2DAFC35D9852098FBC4E050C036865E76F82721627B1966650A19F6541393867549128B325839993, 4B762DEBD20B5043CA10FF0B876686D1D9AAD1003288D40DD00AEAB2B2F25E2D19C35434FA92BB3382F915C5141E7D178ADBEA5A3400EB39B92C18A86A80AB43, 3AE530C6AFFFEDE98E2150919762A5008F01713F3AF370016CC4410399B8ECA3ADAFC7FBC4C4B6A7987C852C2786FD487024CADC67224D062C3DD980D22482F6 -2760782DB466B48D4590B635525F3A4651890F4A18C8F61CAF34EA0F240A3931B64E8756427714C332F1E4DE2FC3ABA935FDB37A19708ACCB9, 1940ABAC2140F9144CD88BA80938F28BB4F5B4CC2E2DEBF64C9ADCD9FCAA94009501AF0EBA772C96AB38BAE9FC64745825FF602C08B28FE16234ACEF868662E, 2616CAD736D76F841D0B9185F5B1067318FAE9E0501AD3C4602D9F7C15193DC5658C60A502CEB1E474F28ECC4D2912BB26E1A96D315E94CE80EA42893BB79D5D -762168891D341DA7D0B2229FF71DAED2F49B2DDE4A5AE2560D9EBE2D6C1EAB9522EB9602C7653E4998D5AE9A8F4B02FBA1F91A6E4C51A0662B, 2BDAC8883EF9B7AE81CAC26DFBD846F50425B0AA6EE5102CD976DE1CC9FB687A07651B1C0ED0C851A18AEE64FA96E801CD49442A5C41684CAF4A9AF5DDD2CBD, 4EF8EE2BE40C507AD16852033C8012051CB4A20B04E24BD5F900532C3D49C663B157DD53C95BD38C584FEB69E1E363D63F89ED682960560962839BA0F8DF241D -16264399B579C58F7721667DFE5590C78DDD1899ADF10A70228DC3A88445C02BF68C2C208562FBADCCA810BCFADE108F2E5EB4F4AE4F4E13281, 5BD52126BA99A23DA194232E1FFAC5727B3E61FEA55638C6140B569953B2D3400B7611FDADE63FE114AEF25AA0C5AF8A1E93600DF97917C095572E84C6F7F3F9, 325C764D954A9D0AB3BE92D774E70037E106A511E9B0866D906F2D92CBACCF1C3170FE003DD072A48996C665E446E022A54EA890E799BAFBCEC3F6349B0419F9 -4272CACD206D50AE65643379FB00B256A99749CD09D31F5067A94AF98CD14083E3A484619028F30965F83236F09A31AD8B1C1EDE0AEDEA39783, 570A0D94165DD4BE42413577773272B27263F5702A335E9E19B586B550AC2252D21740D60FE943FA289B6DC3F39318A560DC258F10DCE3B07AD65E251441CB00, A37E072BCC8C030B087175B7E30923BD8B6881B5D997D08AE5AB73249E6E1A5F3CAFF9D8DC598F7F5CD0BF448189B108D1C2B8B52166BA9D93F9C8B085A600C0 -C75860676147F20B302C9A6DF1021703FCC5DD671D795DF136FBE0ECA673C18BAAED8D24B07AD91C31E896A4D1CE9508A1545C9A20C9BEAC689, 97F7FA6E1C75055FDDB3D4207C23ED186B7DE570A4775C356A9F1E8CADDAC4652325851A2FD68AFC0D6D813306A94C19AFF1DFED0F90E736C8A770F534683B22, 3FB867E55F7B472A52DC082B758C91CB8D588E970CA34DC33BF096AE59EAF8CCFD75A36E6E74C6B20E1408463EBEA5CEA054348A183F539FEE1F289E903FF516 -25609213623D7D6219085CF49D306450BF6519835586C19D3A4F3A2C5F35B44A300C8A76E11708B5495B9C3EE756BBF19E3FD15CE625D3C0539B, 17E0A7E673BD399551E49EE552381C4C94009A291DE782760E0B89BE657DE0657788A1AEFA7FA5BFD11ABC1CFFB0E34DBFD99A99E71B1FD9ED4B089C3EA6297B, 62F74D7CB134DCFC174F80DFBAC027EAB9ACBDC151D6A13BA7D5A5342C16205950581018C8CE6043F6C519AAF0751C5AC00AF70104AF709746EE7EF511FF765C -7021B63A26B878264B1916DDD7912CF23E2F4C8A009444D7AEEDAE851DA11CDE90259F64A3451A1FDC12D4BCB60433D4DABF7416B2717B40FAD1, 2CF4B7606042E1057FB8A3155B5EE77E98748D604742640A63FB3CF1842CE4C521B0A90004B11C13DEBC729C1A567BE30612586F7B16F21A770BA56AAC552D95, 7EF91D4D9F44DC0480AC70B02E548483781F92E747A03663E3BC84FE881E61D88B9511487F5EFC33330794C71F474CCA96888DF211991D648237BAD918004B5A -1506522AE74296872E14B449986B386D6BA8DE59E01BCCE870CC90B8F58E3569BB070DE2DE9CF4E5F94387E36220C9B7E903E5C44175471C2F073, 6986AD8B72EC3BB896BE02644E4DEC65F418C53F84FEEBDD8F17383ECB1D6A52588CB036268856BB7B819BFF16DCACDF2073BC204FAC76E7D01367D0641A01A0, 3D184A4C3778D4B87C30D5B8EF32F2DD238691D590371BE2DDC6CFB334D05A9CAA467D13BAEB8D77D090E77D7AA8608E2352D76415FA9A4F3D52D6B2D029642D -3F12F680B5C7C3958A3E1CDCC941A94842FA9B0DA05366B95265B22AE0AAA03D311529A89BD6DEB1EBCA97AA26625D27BB0BB14CC45FD5548D159, 220E9293CC42EB30C0F3B575DA484A39F280D30F070C718F180A9A0277AD86847C6375D09ECC2829C26978137384F3BB5C0660F331182D7E5BD702EFADD9982F, 3F9DF360172A18E256C919FB1DC6F48CD721B90EF6FAF3DDBFE81B4A21A77E4772DB20A585111049BFD40255F127A26B74660EE054C4B6F06D601E9D04B2A4BC -BD38E38221574AC09EBA56965BC4FBD8C8EFD128E0FA342BF7311680A1FFE0B7933F7CF9D3849C15C35FC6FE73271777312313E64D1F7FFDA740B, 6AB46E2A598AB54D6656C7F43AC15E720246C0BE6DB991CD52783F12848FD4415954D2C09C4B745CBABD6C003E065E9EF496BD486C6BA560D96FCFB96BE54CA3, A60E1CAC5A19774D1732DFA1EA6B714F197799CB521265E57B61B5C76071A5A7018D45E8E22AFA5708C6273D18AADEA7B9830A22DB2D595E353478155D4BFCEC -237AAAA866405E041DC2F03C3134EF38A5ACF737AA2EE9C83E5934381E5FFA226B9BE76ED7A8DD4414A1F54FB5975466593693BB2E75E7FF8F5C21, 75A3BEFD125AC5D3349D2408BAD7F3BA1E61AC56D7713F008242A894A613FC97675EB1F8241FE9A3A8E5821F90FD2030CF4EC8B4C49827CE27740A21F145E496, 16D17F7F59CE7BF9681683F5F10FCAB7576C4A89885C85BEE4AF8901AE1AA44A57A650AE8D227E6E27B5B3D5A698EC2A654B2BCE4AD0F0DDC7AC85F370FFBA2E -6A6FFFF932C11A0C5948D0B4939ECDA9F106E5A6FE8CBD58BB0B9CA85B1FEE6742D3B64C86FA97CC3DE5DFEF20C5FD330BA3BB318B61B7FEAE1463, EE44069629A9EFA5A5B557BF46061F95B5619DAC9484FB284E371884A369D90BEC88826F85970861A937E9622B3D4F1BBC971282FAEB94F2AD9C226DAA8EF59, 6CE559ACE767E8A29016576A633BFC7EC53180E0A800F26DE07456632F45D9A40ADBF7BD5F43BE4402B071982B20033FB42359669D005C10B101AA56794D9731 -13F4FFFEB98434E250BDA721DBADC68FDD314B0F4FBA6380A3122D5F9115FCB35C87B22E594EFC764B9B19FCD6251F79922EB3194A22527FC0A3D29, 9EBFD7EDB5200035932AE573348EEE977B6C0D05FC4A4A06AC62BB2489AB552D6735CEDFB5AFBA264FC739F14AABA26234ED8472CECB5019CAF74724052F095D, 93AA6AE56F4DB24224506C074FF5BF27500657B57D552A87C14F89F4442EF3295AEF6C50F7174518FA3E73EDC10FA921107094FD833C0ED32A1880B2C5FACE7E -3BDEFFFC2C8C9EA6F238F565930953AF9793E12DEF2F2A81E936881EB341F61A1597168B0BECF562E2D14DF6826F5E6CB68C194BDE66F77F41EB77B, 2AFC4E95A9453BD2ECB3A985C94E06D96E012CF05822616928E828A1098DEDBEB52F59015FEC744BD35EFAC1A88AD07E924E51BB9A30232EBFBE1FD1090E676, AA7103834794144E21AE824F18CAE2C7C9F4B61E86B00E3DDDE1DE82DFD5DE20A5287A505A59E8703687E5BD38295FF0ECF81C35B0C6CD7E1FB01279BB6845E5 -B39CFFF485A5DBF4D6AAE030B91BFB0EC6BBA389CD8D7F85BBA3985C19C5E24E40C543A123C6E028A873E9E3874E1B4623A44BE39B34E67DC5C2671, 7D54FB31A2DB594B3358D7502072BC761CD67188AABEF6671338FE1EE8206408B461C9A0EECD55ECF96B3AE88E3DC2334184553D7450B7923A92BF878794570B, 5D29AB84473D3BBF53515175BAF34BD813F7503286DF31CEBA66DBB511A5C9C02ED937F064BD2E51D2803A90AB23793F4CAED28B4D3D5A22EC86366D78AE366C -21AD6FFDD90F193DE8400A0922B53F12C5432EA9D68A87E9132EAC9144D51A6EAC24FCAE36B54A079F95BBDAA95EA51D26AECE3AAD19EB3795147353, 1BF703BC55FFD2CAC895D8A5053E0488CD1214DC16B78C9F1D48E73E98766122E80823830322AF3D4BE61A125FF4A9611218FA8F592311FCB4CA73FFB972955, 830EEE6304B9CFD2FAD0B3435487649B56F3CB2D48A8C4483DAC916DE4508CD6ADD484ED96616CEA3D58E226E461F5DA83627CA97747354088EAEBDED6DE0CEC -65084FF98B2D4BB9B8C01E1B681FBD384FC98BFD839F97BB398C05B3CE7F4F4C046EF60AA41FDE16DEC1338FFC1BEF57740C6AB0074DC1A6BF3D59F9, 6DCF992DB09C134D7A795706BC27A31228284C04B14C51635CAD317A86F283E52EA2EF9A16672E75C90C5D21B6868B1D56FB5B482D77B6978608930D2DCA3655, 3043DA0CB9FE90E1DB6E5CEFC99ADE87EC2D2079739400B17FD0BE63ECC08BD7C304AC708CDF87A3EB6FE81D506210E27999DB5BEB9F133D939988E0DC65507A -12F18EFECA187E32D2A405A52385F37A8EF5CA3F88ADEC731ACA4111B6B7DEDE40D4CE21FEC5F9A449C439AAFF453CE065C25401015E944F43DB80DEB, A2D87A43E208C3950E473375D83B405BD6386EC345BE53A0970689E490D2C38C63AA3293323837055BFBB586F85E2ECC832C10A20527EDDABC63D29B2DCC9654, 4835E6A2F6887B249EB7C59146AEDC2A2282552AF47B146D41F5B277910D62690FC26EDC0948BC6200CCD3CD6F0502FC88C39596B9F15DF3373FE03DFF4D1C91 -38D4ACFC5E497A9877EC10EF6A91DA6FACE15EBE9A09C559505EC33524279C9AC27E6A65FC51ECECDD4CAD00FDCFB6A13146FC03041BBCEDCB92829C1, 6C5756DA996E5CAEADF3445869E1AFC579691ED3DD0C743AF0A6895BC1F0F3EEAADC85C6F3DCF6D0AA2E4A066FC06C10BB307FC7866C90C41168B0A079C27567, 86C242A26CC17FFF561F363F328E1ABCE2BEDE7BA52E3E9259329A763C7E61EC6297A5F33BE87E7732ECC590C945AA28C48345ED0DBE085DBEA04D12A59391C1 -AA7E06F51ADC6FC967C432CE3FB58F4F06A41C3BCE1D500BF11C499F6C76D5D0477B3F31F4F5C6C697E60702F96F23E393D4F4090C5336C962B787D43, 62F9FD1F81D06E875C8AB89BDA12B9CA42838740C11434BD9E6C819B2A9799EE9CA71F54B9460437D5F5B9E960AA0CF1A2068B5DD556A5EAB8FDD887564F2E8B, E4A0D15F43C33EA9064784C8DB693150A500D44CE4BFD2193572FB507459541B67817EC57872D0A2B40A2EBA96168EE1DB20BA1622F30B95519DAD5848A4ACC -1FF7A14DF50954F5C374C986ABF20ADED13EC54B36A57F023D354DCDE45648170D671BD95DEE15453C7B21508EC4D6BAABB7EDC1B24F9A45C2826977C9, 47CE8E30E795F497E30F6086FEF83C664F924F433A67262A69DBFF742F08EE8F42D07FDFF7614749288B9C468B18C8195BFA4F7F77FAE9EB7AEF24A0D764E412, 47651C19DD7DB5766BFD2DE1EC1427B32140156BFA6D1AEC21C4DCDC6ED8414E4C47A9D770DE83F1A2DDE1CFB234C9016004402E96AF9D4D87C1B23752DE619A -5FE6E3E9DF1BFEE14A5E5C9403D6209C73BC4FE1A3F07D06B79FE969AD02D8452835538C19CA3FCFB57163F1AC4E84300327C94516EECED147873C675B, 8E3CDEE1DB91B8ADAF9E34C0EE3969EED99E36A1F25F43BFF3F486BC8A2B9B0ADD116E97B8E0E92DE2F8CFD7CB5C7B3FBF5C34F29A3A23C306853DF3569257A3, 8856EA8F054A070FC29193AC7B4FFE31D68960BCE355AD7761A3D33557C2F00469BAC0A9D8D015D1B92DE359555C7E3F10A35D6BF8A78AF898D0E0A0EB1B5FCB -11FB4ABBD9D53FCA3DF1B15BC0B8261D55B34EFA4EBD1771426DFBC3D070888CF789FFAA44D5EBF6F20542BD504EB8C9009775BCF44CC6C73D695B53611, 365250A27F17CD0608876B113DCE0C1284BC09A73E14D115D157B7EB4FF1C13EB04A28A1EBAF821B21858097F08D87826D808F8F8175937B534C16E2E7F837B3, 35BBE252FF49946CE2AE2533DF2B89FC7D266FB390199CC1FE5C443447DCB290C7DAAD83CD7F7F44DDED6136436E4E99437C96A87E8CBE70C2FF36B853F7D8BD -35F1E0338D7FBF5EB9D51413422872580119ECEEEC374653C749F34B715199A6E69DFEFECE81C3E4D60FC837F0EC2A5B01C66136DCE65455B83C11FA233, 24E444A09D7B361BEC629E44A68CDE14250C7DE3199C61E9FAEE396C204D8E636889812E2A7C98B7E5D4F6659FCF2988089290F6A35901CD01AB54955A8BF05E, 3E73B4A036309D4D9D395BE6393F68F4E9AF2E74E55A114CCD7D27606DD1AA1ED31230863CD8A1BC336AF2A695C9478E8DEE7103314DC058CC97550D24F703D0 -A1D5A09AA87F3E1C2D7F3C39C6795708034DC6CCC4A5D2FB55DDD9E253F4CCF4B3D9FCFC6B854BAE822F58A7D2C47F11055323A496B2FD0128B435EE699, A676C578E24CC1F5B2E4076D60BE9BCCB9C03C7A4EB33B95BEC020E8036FFE10C8C7CFD7F99A97B75743C51E4640B24E331F76CD2343EF6BCAC841289E123909, 3B4223C4E0E9B6E0F004698C02198D0058DBE404A6441641D0766395FB2A767BB384FE02E82475C2C88A05BAB4F05F48ED81DC7AD1B09C1189C9BEC1D7ECB191 -1E580E1CFF97DBA54887DB4AD536C051809E954664DF178F201998DA6FBDE66DE1B8DF6F5428FE30B868E09F7784D7D330FF96AEDC418F7037A1CA1CB3CB, 73DE199BDB523A8B85A0BA71AB3CF88876EAD246D25292A2F66F613023DCAC764865B65243B7B2FED0D66D7724C2C7022C43ACC2699C8674265D53DD3D85C264, 694938CB54B3E783845BFF8DF589A181FF1C420C4BC19E8F1AA0D6CB9E5CA14728F697F298CFD242BA9B648904267EE1831F17293B007C451B3670DCDE64B448 -5B082A56FEC792EFD99791E07FA440F481DBBFD32E9D46AD604CCA8F4F39B349A52A9E4DFC7AFA92293AA1DE668E877992FEC40C94C4AE50A6E55E561B61, 45771B575901C7F58EA8616A7042721B8556AC3FC0C47AB2529D7F73100DB4A7F4B6B9F6055C53E7D66629589E8F9C0BD57E496570E0FE133B74F1C88B22830B, 8D1BB1D9BF0DD76C3CC183133F8464FF42A023B93B0BE64385AC1E7EF551594C60500AD32A26EC109D40163E4ACBCB4FADF2B365C6FF14E839B7CADBB2B84537 -111187F04FC56B8CF8CC6B5A17EECC2DD85933F798BD7D40820E65FADEDAD19DCEF7FDAE9F570EFB67BAFE59B33AB966CB8FC4C25BE4E0AF1F4B01B025223, 41266931FE54DB7446A0B60A7244D9CDD6FBBC3B3C94E3EBA73096DCFFE57D5DE5913F185A92F7B945548970B82DF0E6781250FA225D81F02F94FA1738FBD5BC, 2BEB974CC163AADB4371125EEF0936B159227FFBCCEFDFDF91F04031D4EE391D016D4A5CDFF51A20FB32042F545B84007982B38B068BA6F19E1029341FF47FAB -333497D0EF5042A6EA65420E47CC6489890B9BE6CA3877C1862B31F09C9074D96CE7F90BDE052CF23730FB0D19B02C3462AF4E4713AEA20D5DE105106F669, 4555428E07B56F677C1149813D26558448F4E9F21132435BA44BBE1BCB8C7B9B10C7A6958E15A75466B744CAA9B02116D3FCA8A26770063B0642E3E27F453CBA, 6C459863C38BD28811F836CB8F1540F6BC66A8775F820E04770A70BFD8F5C4F2ECAD5989731834AE9890E57B969A6DC3A592EB80E15A4EEE6EB1617C76CE1431 -999DC772CDF0C7F4BF2FC62AD7652D9C9B22D3B45EA96744928195D1D5B15E8C46B7EB239A0F86D6A592F1274D10849D280DEAD53B0BE62819A30F314E33B, 1AC2C9F391160451E56890153EDEA2758B042380833A1D6D47529F83DAE0127D3B33A831C7E16DA427984309AE68F56AE23863574955540808D9CD3451E931E0, 57799943A7F8B7AF0BC3C7455C4A0E9997B256B021143CBA27547CBD0D6288F40454EF4505B87320DE21EB80190560F14571CE9A6491D1ED6011B88E29B9538A -1CCD9565869D257DE3D8F5280862F88D5D1687B1D1BFC35CDB784C17581141BA4D427C16ACE2E9483F0B8D375E7318DD77829C07FB123B2784CE92D93EA9B1, 20D82C1825A98BA6B9EF6E525CA1E9C36CF4B51C1F5FEC2CFDCB8EA57BDFBBDA3A83EF7CBE00AE6735DBD260F7CC5A313BB7926C1E944280393CC39AF2EBD71D, 5F7E436A1D4895C8E6044D06D08B79C54C99298618BE1EA0439A74B36CCD087EA42030E53912FD3920B256CAB53C2BC4E59A7E7C6CCF14998352CAA59B76F7FB -5668C03093D77079AB8ADF781928E9A817439715753F4A169268E4460833C52EE7C7744406A8BBD8BD22A7A61B594A986687D417F136B1768E6BB88BBBFD13, 7CC751B330A7F047F27042C5781996C98F635D6FD9B5EAD514B1B16293EDA82D555935523B4E31862B510DE957FC3CA73ED937648946ABDD2237139B540CD714, 1B0733694DCE25A31D1E38EC68589E0BF2AFD96E9B46B23F95285923A87669597C2B8E37CF5ED53EB563C716D205415DF79617F9657D0A4C31DC83C7F6F994AE -1033A4091BB86516D02A09E684B7ABCF845CAC5405FBDDE43B73AACD2189B4F8CB7565CCC13FA338A3767F6F2520BDFC933977C47D3A41463AB4329A333F739, 6D8001592E6E889559F33995CA9F69C0D059FE46EC4EEC55C5E573D759056684DD3C8FFC2B6AF2FF6C5FEA0542B6BAC0051D173083C5084A838F5011461B4143, 1BDC475146988CA8FC2751DD4590418885CFA50152A16B00B2797AF4D47DC668CAF7EFC0CB28F127CF274A10F11450BFCC16C4A8CA79F811BC57FF58C65D4F68 -309AEC1B53292F44707E1DB38E27036E8D1604FC11F399ACB25B0067649D1EEA6260316643BEE9A9EA637E4D6F6239F5B9AC674D77AEC3D2B01C97CE99BE5AB, A2049269C1F1ED431B5ECF577362906503F335ED86711CA35867F414214BA3F3382C277793605C03AFA6C2A9963EEEF0454E53AF8626CFFE4DA3109C9D4A9884, 7097C6EE66E2F86C208592FFAFB8D960F8CBAB36BFBEA9761F67A2AC63960EF7FF464D5E58D04BBF820462DC47B2B794CF78EE68F1B9E037D9A465A546424C72 -91D0C451F97B8DCD517A591AAA750A4BA7420EF435DACD06171101362DD75CBF27209432CB3CBCFDBF2A7AE84E26ADE12D0535E8670C4B781055C76BCD3B101, 8666995B6FF5AA7262A9A315CFD9AF912995DD981CFF2B82E5E149106F8A31197F59B3DBBB42AAB90A76F581F1534D1CD07FC0B9BFAB90FCB4E6B0FB59CDE1A2, 7AAA0293E48DABCA6918ED16BF4E79DFABD70A473EC4EA5C6D6EA5DC27A2B24D7ECE01125D13BA76C6A3857D605D6D5614B2263CDC46B19FE4D9296749B06BB3 -1B5724CF5EC72A967F46F0B4FFF5F1EE2F5C62CDCA1906712453303A28986163D7561BC9861B636F93D7F70B8EA7409A3870FA1B93524E2683101564367B1303, AE6E54141F62957A7CD05D3660C43A3D26D7FED89F9D7F744A752AF3D85D2B5193E81E9CFD0279F37DB08D4965E0D732406077BDB2A32E19E6337B13A25232, 6001299784404AF17B12BEE1C5D4D29A1E92968AD0B4A4A0F4071704462278A937D878BB657A05C35ED65910717477405E738766F97DB74BF371EC37BDA0BB74 -52056E6E1C557FC37DD4D21EFFE1D5CA8E1528695E4B13536CF990AE79C9242B8602535C92522A4EBB87E522ABF5C1CEA952EE52B9F6EA738930402CA3713909, 8801B01792AD5FFD7879371AF5B5D14D10B2537C68D91A94FBC0BDAF50ED5AFB0D4F43E9543912C639AF30E61E750C70C9878568933B91B5DD09BA27F3936432, 1352C08742A0ED83E1AA2614830724082560EA74852F915EF2531E52B1FC8D592BD321377C174DC8669138EE45FD1D0A4C73C7314B2B214A65A66CB7178499D1 -1.3.36.3.3.2.8.1.1.2 -1, B199B13B9B34EFC1397E64BAEB05ACC265FF2378, ADD6718B7C7C1961F0991B842443772152C9E0AD -3, C7FB4E367ED789413FC9648CE0E921156F37642B, 554BBA4E002E3F5C7CEF7F0BD169CC5979D8FF3D -9, B9C27D4F77F891E19A9B66432AA4EE009F905CD7, CA3AEB5275D7A2FC59156D6EFE6FCA5C6D279095 -1B, 9FC202B13BD52DCD3B764A4CC12C25A583D4218F, E2478BADE6590695B71CB293848C999EC243513F -51, C62606A16CE0F762972069A66F1B6289A8980968, 86760B19E3A73AED23B765716923C8667DBB6727 -F3, 478B9E7AA6C7F9C0ECC30821FE2D80DCC9038828, 60A75E23B85D8C796917CB11DE58BC56B9F32CC3 -2D9, 80A19629C68B97D3DA6E0186F0384BB000B05C00, 41CD264607E9392FE267CBD10E82003E4B57B58 -88B, AB7256691D93B725F652B8AAE083E8CBAEFD27A, 5F84734B7B5C71C4BDD07060B98FBAF5BA046E64 -19A1, 7EDC23B26353D3D22FD4652B9F22219D34611FFF, ABB190255153CE3F11C3F0F9333D60E75A79AB4A -4CE3, 4601F611407B89151506C235F7B0A11444CE1593, 184F6B7C93B0AA2EE0FB88A8786D6973743AFDBB -E6A9, 6F147255C23966D511F9FD6365829A1D10542DA8, 735E524EE14B25D6B80E264C9A631D30D241D5CE -2B3FB, CEBE1488D271403728CE6F683079BA3F4E26296C, A018478714B97751928556FCDA547F2B0C37BB34 -81BF1, 8CE13A0E44DBF8BF9750C7ADADB8507A9E5844B7, 7BF6B44B9E8E1528454A00F00BEE153991BEEF85 -1853D3, 82E6A6BFEEC69DA3F33E80C34F21AC66314889D2, A8142DF848375D7F4858A1FD6A8A5214F5803BF -48FB79, A310575DD16254F31D4686877AA88763797AAF2A, 1559B87061A77EBA799963A095DF12D8099A80F -DAF26B, 9EC393B024B60F6EE75354A972AE0066F953E622, C55DE2B47E47B63E2626A87F2906113C0B8BB7A5 -290D741, 7BFE7D6A8DD8161C11E74BCEF831BCBB395C89BB, 40FCE2EB687D50431FCD76094DF0FEA6A83B6F82 -7B285C3, 9F6D527128AB1AA34250B1B3C0AD6FD1730C8890, D4E3666D854A137B676B1A68DD37213A806CEAA2 -17179149, 91EF5FA6B627C357A56E47DFA6E3FBE89394C902, 2EC5AF4F6077883ACEB30F31E1690FE379EEA8B6 -4546B3DB, 43CC4967CCD20454DFDEFF8ED268369DD48437B5, 82EF1F5D0374446B350ABC0D7D989759F8E817EA -CFD41B91, E73BC8FA0AD2B1203F043D2AA1F0CA68B32FEE70, 9CCD5C7FCBF67AB69518C560A3876778496FAA84 -26F7C52B3, 7AF2D069A0DE8926A72F80DB38F5C2F0832EEE8F, 37303163935FF83B9569346608BB193D5EFACCCE -74E74F819, 58249BD17B5BC4EAE0667D569C1849325431AA20, 67B225587B53DDCC1BD9C165776035B675657514 -15EB5EE84B, 8B89C64747CEA2DCD260606441E382D26AE4E78D, 92D4C0A742D2ED22567A695897C54B1DF42BAF63 -41C21CB8E1, 879DC7BB9C64462B9D4EF93BCCAA718FDCEB2CF3, DA2FCA262DECC9BCE005CDD4EA314067360A36F5 -C546562AA3, 2ED4A98B1825E1AC652D302A6907343A873D5C1E, AD3791E9BD1EFC2497DF8A24C7DDE24B1B8AA7E -24FD3027FE9, AEA7C797A1258FFCEECF336579E9A3060D3314C7, 71C86C66C63EE286E4497C465E40B5F27B2E1439 -6EF79077FBB, E3865247A9CD505570B622E0B2496B9AF2F77751, 4F201934586E8C8D5EF272C195FFA6EA655A9C89 -14CE6B167F31, 6C46053C25AAAB6CC6BC210C9894527288DAD3F1, 83327FA0811EDBDE196887212B3EF4E9D4EABD90 -3E6B41437D93, E5B753D7E42AFC1F341BEEA988527586ACA63A8, A301D54CE2A1EC084642E5DAC0BC0D8953FA10B5 -BB41C3CA78B9, 2F6DA4670AF94B8D985598AE1678B773FD2054, 47487962BD6E98E75F53B83FFF350525E301EC44 -231C54B5F6A2B, D047A93FAD51E8CF0ADB0A945F69A373EE7EF518, 6CE6D5DF601ADB14EC40C3A4F45389791BAA19E1 -6954FE21E3E81, BD30A8A24EA7FC704F6D78F610FAA424A19FB641, CA1FA01C4CAA062B26E047FA1A1742E3A0BE5B9A -13BFEFA65ABB83, 5B2155B7F88CBA4776A99A4D576FA51AEFC2661F, AE538E1DD40B47918EB488D4E9F4F97185C2ED7F -3B3FCEF3103289, 3B48F28A395B129CC5E401992AC40A88E822DD55, E28CBF29202DDCBD7E7408EA0F56FEE2FE621215 -B1BF6CD930979B, AB26CF61E0C1829EDF9D4A02347A6FEB842921A1, 2FE84DC812839C3C7DF797C59E0E4249F1E53CC6 -2153E468B91C6D1, 12FB80F49600F5407FA93C73A6F920C395CF8D7, 8A87B365DEEE700CFACDE84B4D4BB7AF31178D22 -63FBAD3A2B55473, DAC793E050B85F8DA700E5B2BCA35351CEF635A8, 6A34E869F981BF1A0446B8CD0C193D76587406C6 -12BF307AE81FFD59, 6260A68D58BE6266FFE46F06485E6AFFA70E1855, A43FB7DDD893FEC502D40A81A945234A4B69B266 -383D9170B85FF80B, 248D7BA383EFEE833E48DC389F97D7362530C884, CFC51573765686B7370FE00E49A64776FE7E2C5B -A8B8B452291FE821, 8D3FAE40272D97BAC5E3B48E9E5C338DC4C990EC, A286F113D81F42A2BB6AD39C17F806D0559EB3CC -1FA2A1CF67B5FB863, 6D2A2F3108F409E5AECD2B72D49A9CBE0D2FE618, 51BDAB375981B63DDB5B555B7CF6EC4223E7FBF -5EE7E56E3721F2929, 5F5A8F842DE50A36021576A09683F24C27D87E57, 9349EE2737090C982ABBE05BD67D8477C48B31AD -11CB7B04AA565D7B7B, D2FF44FFA356FEE83CCD3F135774A9B4768D0D4E, 10E0A878430059B8A777632CF97274BB10006A7F -3562710DFF03187271, A42EEB3BB04B0CA8326E81752CBCF4A43677109A, 992D074C9B0F0BBCAC56925DE619F3F47CFF9A7 -A0275329FD09495753, 144155375F113EAC03FE3D6BCAD7206B9796BB19, 3F718E3527BBAC3BE08FD3E780D0F94B678A2B24 -1E075F97DF71BDC05F9, AB4A591618808B89CB3941BA5424D331D54662A7, 2DAAFED9F04E361A4861982789C268397DAF163C -5A161EC79E5539411EB, E2DF52808BDB5DDF9B32100E5831E1774B4246BF, 323CDB20D34D8CAF7A60509348E2E8775C144EB -10E425C56DAFFABC35C1, B4C2C8CDA6E504330400BDA3C9F969BA25DAE265, 858B401489BE34A334B04584BBBA74DF5412257C -32AC7150490FF034A143, 89C7D485AA8C4043FD9A46DAA5FDC50A4D6BE27, D9AC64603F91BF2486AFC5B5BC3C306D671A9462 -980553F0DB2FD09DE3C9, 4733F6C731A03DE772077A51396CCB0F26D2DBE2, D3EDE8898C555746F4C3376359655B677ED85E50 -1C80FFBD2918F71D9AB5B, 292823FE18CC0CAFB7F210755DDD46F3317C2DB8, 1B7CF8B20A9C36CAEBCA73E661BF890A79C044DA -5582FF377B4AE558D0211, 2AF490F2A26C9E738BC0DE43BB1F50F374BF38B9, 9EF4016E77079DCAE7D7C621758BD6AB3185BBF5 -10088FDA671E0B00A70633, C739B3D2374027BC59D4C1C8DF21341FDCD5CAD, 45FEE4F6956DEFEF25244091987C2EEE0D84D50B -3019AF8F355A2101F51299, DE7D5AD2E04B77314F80872544F9A29318F7ECA4, D5F40B94B2683AB5AC01FC306EFA9D12DB138BB0 -904D0EADA00E6305DF37CB, 16A1AD73C8AD2413247F10184C68D456C362FC49, 3ACEACEAE70873F0FD6FB9229CE1C978211CEF28 -1B0E72C08E02B29119DA761, 7527037D43C3FDAE7331D334E2E2A621E7EC4D9F, 6898CD05F4765A689C70935F1D0CF95CECC9FA22 -512B5841AA0817B34D8F623, 7F994F88F4E5E1D4F55A3088F512DD6A68CEA959, FF7C8B7DE13CDA4B3A6A7E3A76F03C27EA037F2 -F38208C4FE184719E8AE269, 5B44F555E6BC81A6EF4C18897431898BDD318, D6E3F6D49E972DABD4FBFABB1BAAE723F38935D4 -2DA861A4EFA48D54DBA0A73B, 6FB1F0CB32AAE55E3C3F138F3149679B30270D40, 904678F96BB20577368578438FF32E9D5EE1D976 -88F924EECEEDA7FE92E1F5B1, 390AF109E9CBFBC55E5FD2DB2BE9BBFE65187CB5, A690260831A2CB5575C2CD57AC14D7A8165FB898 -19AEB6ECC6CC8F7FBB8A5E113, 799CDCA7162642170B059A259416764B214E7DE6, 8871451A8453D7EFE44B6C62D10ADCEB59B67779 -4D0C24C65465AE7F329F1A339, 99C604E53EEF1B83820059ECBC9F87305CA28126, 96D7F7587DAA3526D8111E3F083DBE41DF8FE062 -E7246E52FD310B7D97DD4E9AB, 93ED8BE431D2B3CBB002ED224B3E98CFB59396F0, E9E9253DE3118DE71E83135920E6324F1EE055C -2B56D4AF8F7932278C797EBD01, 4EC66C257EF349078BDE787778835EBE2CF2B62, B693B59C42028E2E2E8A81A5D8F84ECAA2613671 -82047E0EAE6B9676A56C7C3703, A95A4A8E4EE4C1A72DB335F673441F0BDA077A14, 12BD22C58B55CCDDA63A031F91DAA3FBE0B4936E -1860D7A2C0B42C363F04574A509, D6D6C46A13DD4168553AA8EA4AFC0B2CA332335, 6D2A4B3396266E0EEE255B4B466E3DC109F35CA3 -492286E8421C84A2BD0D05DEF1B, CB19A1775C351FC2F321F0986B78F0B9E9F7FACF, D007F23B3D18D35503C5576D34277DFA09898B33 -DB6794B8C6558DE83727119CD51, A64DD2C04C921CD891CA787F6E93AAAF9E540B11, AA0CEF20DA97E59BFA280E7218648256432DDBDA -29236BE2A5300A9B8A57534D67F3, AB474067892316D83808079823D13EDE5CCFFB27, 59F783F08C96D09D5476BF50B775C8771EC59D47 -7B6A43A7EF901FD29F05F9E837D9, 7F8CB6AE8FAC8E548623C0352957F172EEF8D776, C085448429F49427868896C6F305B4E3C2C4317 -1723ECAF7CEB05F77DD11EDB8A78B, 67171486BBD065066473B49A9001C5C50BED09ED, 4D990D183F150B93B6CE006C9E7E0CDB4269B3A4 -456BC60E76C111E679735C929F6A1, 29E6DC11225D0D85707CA61ECC8E36A18A5DC62, 1C34278B08A23083057107844BDC3B506C8E9538 -D043522B644335B36C5A15B7DE3E3, 966B05F1970857F6879793A8725D063BC09267F, 9366D8BD0238A46949D398C1A8FEBA810D945987 -270C9F6822CC9A11A450E41279ABA9, 6489855BD8DDF9BAA070137C03B5BB886319958F, C0B698629582156A3F0EAE3B619317BCF39D57F8 -7525DE386865CE34ECF2AC376D02FB, F28CB17368CFA15DF1E7DBDC3DD40C5A48666F6, 560C5D06848607D9CC54BE3AB621A8891E0C246 -15F719AA939316A9EC6D804A64708F1, E788D78BD0860B9D97991A85CD53A6D6B61CC1CC, D8FB74068DCE86237F83CAF7792FA2700A77674 -41E54CFFBAB943FDC54880DF2D51AD3, 1ACCB5856CC76448322DD2FD9F8FF05B1EDE2FEB, 42A30F22A313EE8A611D71A308A3A5ABB9A4DE3A -C5AFE6FF302BCBF94FD9829D87F5079, 3190F51FB8D67FE9BD5815D05BA723D6D0EC05E1, 903026D439EEBBF6D20858B9F59E9A3EBD27C84 -2510FB4FD908363EBEF8C87D897DF16B, A7ED2E7D21FB9710533E51EEDCB77956BF4778AE, 87F5953C1DFADD0525D832396628C9A731BBE295 -6F32F1EF8B18A2BC3CEA59789C79D441, ACEAF6C9ED572F26A0A6E892A037F4184C9575C8, 4F995EB85806B80D847618CA8CD61BF8AFFBD5D7 -14D98D5CEA149E834B6BF0C69D56D7CC3, E3E2B2F621F8E841B4F49A60A55E7311FF49C593, 679F0D7105ACF1852CCA869F1152F7C5030F6B80 -3E8CA816BE3DDB89E243D253D80487649, 57B8F31C57B665B6FFA996E8355945ECDF449AA3, 70009A0956BF9F4373B41D2BD329B14F1DC9FEBD -BBA5F8443AB9929DA6CB76FB880D962DB, 4844FE5273DCEF824E4B670B2A6E51B61D9E95FE, 7BE1FBEFA9B6F12FF626432D594E3965E6EAAC94 -232F1E8CCB02CB7D8F46264F29828C2891, 7DF2432CDD6CC8F1C10F2991432436A1BA2673D8, 83A3085A5659B798A874790B4C28480DB189FB18 -698D5BA661086278ADD272ED7C87A479B3, B96CCB88B617C7C4290B263DB6660F55BA51C15C, BCEA8645FC791558515002527C93CC65CF91FE97 -13CA812F32319276A097758C87596ED6D19, DCE08173664B47609CA29ED7B797FD88983D7D4A, 208B43DF259203A5819C70A5F8018E8528CE9055 -3B5F838D9694B763E1C660A5960C4C8474B, 2992BB2B9AAFC37F4EACD5FE0052F69837098032, C5A0D7CE37347290DAE7DD72AAC081EFCF6904EE -B21E8AA8C3BE262BA55321F0C224E58D5E1, 406B89BD3E5C2EDE2FD7BEFCA40F861F2F30EA90, 45ABEADCB4D1B3B5EBD874E706B49399D694D11F -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 738067CF1830EF4C279A7234FF14669F82EB30BD, CFB1234BE7FF4D06BF3A5381C21BC455EC1FA5C6 -64312DFEEE1AF5788CFEC3176D34C11F84E9, C6DFCE2B61DF59DC28F76269F08442304508AAC1, 4E38C592F17F5D51C1949297D145079B34D8F5CE -12C9389FCCA50E069A6FC4946479E435E8EBB, 6B4093EDE5FC653CF87D203418A528143ADB50EA, 110E6A29288AA01A1078FF8E9360E0C37AC0B212 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 65289F6EFFCC4FD0B2AD1C9CF1ED7D44DDFE28F9, 6AA0911599CDBBCDEBB86B7BA651FBA944109DD -A912FD9E31CD7E3B6DEDE937884905E530493, A5C880FC6454EE96F518A733EDD113086D5B8AE2, 620D2FB1BC2F589371DD17A1A3955D4B8B779247 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, ADE1D99B5D3A3E25F7F82AB5E6868194B3112BFC, 91F2198223591DD1C22BE0F87D52EE3172A03B66 -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, CF6F91558CFB5C506F69C51C4753AD5EA16935B, 884B6E9B2175E1584CBB063EF1F24F5F6D3E0AFE -11D500BFAF40AC5044981798DB5FB39F2C17B81, A8D873E91B1D6065F71782F6A62F4E3E12B5C8D6, 34A71492AE30532D5F48197DC6A3FE5D65EEA9B0 -357F023F0DC204F0CDC846CA921F1ADD8447283, 3F89F5C514E9F8F13C9F5E6BEDA804FC4C9AC7F3, 75C1C147E733A0A2C67B445137C409C17A241A68 -A07D06BD29460ED26958D45FB65D50988CD5789, 11DD853CE9104647FCC557880DABB3C45BDD102F, 6C05C1988E2C5B10798B236E867ED554DBC91F37 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, E91AEEE88A231BB72F6D0F27940414E13628DB7E, DC2F94FF981BB6D84C77C1BBA1E98AAF60CA420E -5A4653CA673768565B41F775D6947D55CF3813D1, 1851123C9E165EBDFDC6EDC12172800D17CB3665, DD89BD3243D8654421532E60CE4244916481DDC8 -1.3.36.3.3.2.8.1.1.4 -1, 3AE9E58C82F63C30282E1FE7BBF43FA72C446AF6F4618129, 97E2C5667C2223A902AB5CA449D0084B7E5B3DE7CCC01C9 -3, 1092182A330DCDBBAB7BD585E1611B05D197DF5745273FDC, 65E8622349AA118D9E46DAB8EDDDE2BCF7765F768C05E708 -9, 283805249E1B5F851F13B0898F2E15BD987F507A1C59CD28, 6D580AD6DE0F83B2B1C0A032EF987BCF19FCBB6FB562AD49 -1B, 63CFCDB1794BF4D08ABC2FB5A690CDB4CBD9B773A9030E9C, 2C9CCACFED46EE676462A85B7630696C08E8CFA2A3C5454A -51, B9E2E18D569E89DF2A9BEA6308BA9D5DBF423C2629F0880, 2AE1AAF7ACC94C7F2E71C2CE159D64DE24EF280A622331EF -F3, 771FBFD394818AB771C092B7595F86A22014F6F464CB0FC8, 22751181C8F46E51C81F091A3A4302B751ED33CF9C2180E8 -2D9, 548D657F8CE88843CE264B05CD7B69F0B0EB64A04D74D589, 38D90D7F5DF18312CA2F330E18D3E6F24F0A30663DD25A13 -88B, 3D746D98DF0BD2F7A02272B1F9701E148FE11EF702216BD6, A0C5A7E32788C3DADB7ED3F9E4B6658ABA007269C49EB867 -19A1, 3903B50AC6204E25B42FB3284CAE57823956DE1642923A2C, 92407328D48FC4744E7AB74663B2F53AB22F5C665DFFCF01 -4CE3, BBFDDC6E8C854B0E536BDDB23B349204D8AB7707ABEC15CA, B82BA2641EAC5AC52EF8A31720AE70F6E0F36BBCE851787F -E6A9, AADC7277150D3E5496D26BEE207C794C744018FCE01BDB8, 14C4737EA885EF1868D38E02DB74518F9B7CBF57820E4D7F -2B3FB, AEF940DE82B53777337F53450804AC12FC764ECC8C833BA5, 756734C073E606037F7B33D7BEB61E35A6978677C5AC805E -81BF1, 215E07CBF1807929CFB831D2C77E0EB7F96F10ABA1097E76, 598033349BE43EB485A49BFB4BFD99CBA52E2E38DE53D6D3 -1853D3, AF733E223D0BD6A82B0B08F87EC80D51A2D784425AB57648, 71E3B510F855A0401A1C89216FC4398A32D2F0202F9972E1 -48FB79, 4647957AA272970E10FF356ACC8BEFC86F0D47F96AA5F8F9, B1A3391E0D6B4AA9101D1140FC46A1A136BEAC4D62619927 -DAF26B, 6755F734FF9EA14560BD4FF7FDC0F9669F046D627F602F84, A3F0E638E297E5602E7DC034306234D30C6F1059213896CB -290D741, 63E76DFA522A4A37DE2FB4F2BDD1E6EF10A8D04CDE9107D1, 46560A23D8F8888B59D26D3013066C785410305990A17724 -7B285C3, 1B9170CE5510A1A9B4F0C7498CCF7E243F139CB06DB23C82, ADEA7E7616874A66F7B7DE96B4E1A5464AA780511217EE34 -17179149, 619EBB76BFD371C9439E3CCF1FF428DE571459C20270CA9A, 3725FE51F61F030E714D734771AA5C62ADF58AA7E9DC5F3B -4546B3DB, 7DE427F3C8A80AB9D41D691BE0458FF9F36D93BACE1D3BEC, 829EDCD23C3F1E5EFF78D9B5EF8D9328ADA53A8E296956E0 -CFD41B91, 89137382692BC326D4420EFC7F6B303430C848EEFD752FFC, A16FC076EAE968D93F77B4ED64FAC2181E8E8A6429D20110 -26F7C52B3, A69A944A6ADFEF70F5C31EE7882802AC3095E51F8F12E26C, 3EF2933987F8982BCEBAC8CC0C0A979A42BCB8338E5E2305 -74E74F819, 95C083D64BF100C3CFDF442A5D723A1AF11F21D716BC03CB, 8050C5ACC52997B6F49629147EB9B8D0BFB1423B73B223C5 -15EB5EE84B, 6F9BEC0ABAD51449138567FBA0FF27C6A6610394E81F3E9D, 9B90FDDCC861E07AE595EF873BE967CE390ACB5CDAFCDEC2 -41C21CB8E1, 63E9E44FEE8DBA870070A20AA7CF1A76DAC28DA243BB6AAA, 47C48532E4A1A0D560AB115F4B427C1BDC3F389CDA4256EC -C546562AA3, 34C81F016C63687B5AD744C73048780CAF329B17590DD1F0, 7D8E32604380ADC773FF6337C22504AC0BC5527060697676 -24FD3027FE9, 8F39781B5185527587D749F5383087EB5F7AE24245DDE354, 15B5EFC96F3691C79652DCC5C6A3D4BBA2A3F66424B06635 -6EF79077FBB, 6AF538CB302B05632F16BC97FE28DDB65E37BF8BF108398E, 3A0F2D6C6D02870F31746B1E417FA7B290AE2B86B450A17C -14CE6B167F31, 91C8E692E95DA99BED3EB0A52CC094A70F3736877F4FC9C9, A2E72EA1227E9265494782349A3721CD2C70566F65B59042 -3E6B41437D93, 3D106AC1386049D4A2B5B953B814147249EE7E2AAFC1B405, B9238E557578880DDB81DE51855C602A05E9E9FDA881413F -BB41C3CA78B9, A58CD98B2FBB2088A50D5D295D92C8F0BFF08AF6CAE435A3, 21CD3403072DE173DDCA4081B510D29068D33AF548D70B32 -231C54B5F6A2B, 475B7FA5A3F26FA8E648A73BF4FBE3424909A1C6E2E80B57, 88411CDDBB9D68CD7561C008795B94A4C6409084F08824E0 -6954FE21E3E81, AB0EC15782973AC4D06FFDCA2A92EEF7C721BD8E8FD24BDA, 336FC43185B111BC1A015A77C697136F6F8F82F4A939E474 -13BFEFA65ABB83, 3F2615FE0BBFC7CAE0E29CF07827367DBD0FC675D3EF2505, 822550619B52FBADE12C6B8514D04E253C0BF4E2615FD6D8 -3B3FCEF3103289, 5C37B713819F52E92D7F45075059340779BD0B98A8A2145B, E5764B6264B75724C1AC3E6DE276DC5B09F93CB02F3DBED -B1BF6CD930979B, 753CB33318F5CEE648A5E517D112B18BEE1154AA8D9BBC5B, 1C0B88A400E33D17EEF0E160080FEBBE08A68C3D296F79D -2153E468B91C6D1, 95AAFEF7557DAEE0ECF5C8A1DF2C059DFC7A5B76F5A16E8D, 984DA92576BCA984EE659B930ADE58FB88665DA7DAB54855 -63FBAD3A2B55473, B1F4BC63FA8919EB4C8279B9036E2D8008480C94DD24BC3C, 5D30188F554AC31AEBF73B4AEB4AD0A406A0F92E6ED023E1 -12BF307AE81FFD59, 470DDDA4B540E60A606DEE486EF703B560EE72FACF69E7A3, D8DD50887ED9C06AEB0CC77874195DB040A1387F41D4F6D -383D9170B85FF80B, 2EF783D2483AF6366416AD1C0A196F9798FF7CDB9C248D55, 39B3D3C737E0535EF1501239EC9829D509BC42F84CEAC6BC -A8B8B452291FE821, 145421E949FD791C2F1EC3A49F8F19165157995FECAC2540, 20CE7EDE918B204C1EF7732CDE43D08DD2CFB6A85AEC9D72 -1FA2A1CF67B5FB863, 1F8DC925888A05BE2407BFD212F7D8A060814D72FBB568C5, 33A72AD948387971AF774765D9E81F7DD6D768E70D59732F -5EE7E56E3721F2929, 5FB7ACA5BEAF2C071C73F097638A439C612667D164C8EF20, 3A760B80FC17D31298F1B82B42AE634EBFA0324E55E10097 -11CB7B04AA565D7B7B, BAB10DB060D551DEE0A9FA4056844ED9E7344486662E7AE8, F6FCF37396A82E1BDB98D0362FA712F2F5929176B3E0AFF -3562710DFF03187271, 6FF6FF055B820B59CFFB4448EE0481E1B980731E4FC3BE83, AC511BAB968C904C82914A323C36FBE7082B2E0603928771 -A0275329FD09495753, 503618F6A4CCBA67238094C604F27821D053B8B81AF6B888, 798B3DE937FCC372DB2329C0EDC43024324C0F6783FA9734 -1E075F97DF71BDC05F9, 9858736320E84277A033FC8F3262A16621CEBE67B3E3EDEF, 9B56ADE6642FC82522A114778879A21D6F5C2A565CDBA8B7 -5A161EC79E5539411EB, C0D0B992A1851717A31A7BCB782162984BEBBC3C149A7EC3, 72D68E412040B8C8B2843C56FEDAB1E21B4D6E2E0581DA9E -10E425C56DAFFABC35C1, 6D50B1338C326098AEF346F387F58DDC13D65965BB887A7, ABCDE68582460C35C22C5581211868FBE582E95F52B28D65 -32AC7150490FF034A143, 6369D091B37E2C303962A911411630F34EE2224E8BBB371, ACCB4DE0CBBFDDF719FCDD9894B10D57501CB7DEF4B02EDA -980553F0DB2FD09DE3C9, BA806D38015B3ABDB49E538020BF74293854281EB1EE6237, B0A3873A403BC70B99BB338A636F83B56031B8EEB0EA8F7 -1C80FFBD2918F71D9AB5B, B35C4BCBF16EE0EAD7F31A928BA4B11C3C89A1B484AA0497, 24D557A55EE6B62064CF1E17AAB6730B7BA9C8B0C9B0551F -5582FF377B4AE558D0211, 71166313A0ED414E84319B81C5CD092646005A916B73EFFA, 83F42D361CCAB72FBEAA4694614C45DB4E19F3FB23698D8F -10088FDA671E0B00A70633, 98E7032593C0B30699728A7644CEE3D6FAFB36105CEF7443, 907DD731EF8995DB07863E2F93A6ED1D7855693188A84412 -3019AF8F355A2101F51299, 2D8A6F716F08246CC03B0B56294DB0E8CCCBAAFD053977AD, 169ECC1840FECF2E95B176AF7AD4B0422E4DF3FB985F0220 -904D0EADA00E6305DF37CB, 8C5EB4A614A5A4B024CB3B37FEFC990C81F70FBE930898A3, 3E0EACD361D9D11AEF8AA79B3BFD47028EBFA48C38B3A66C -1B0E72C08E02B29119DA761, 376EE66D8281DE819DF64E58B4BACD3791697B31C809534E, AFE768E9CD53A075AA4F6DDF8ECA1CACB570CAF2F433BCDC -512B5841AA0817B34D8F623, 63AAE0D7330A11364E95999A5DA72FC5A16BCAA6189DB6AD, ED83404103650C9C79678FCF823F4A147AECCCDFEF5C1A2 -F38208C4FE184719E8AE269, 97AA81DF7240E5EABE9B78B9ACF7D3A8DED439F4771D7E21, 281387DAD84635D03886A662221A55477441ACF97DC70591 -2DA861A4EFA48D54DBA0A73B, 4E0C2A59D8651271D881AF8D07879C78F89E63495E3974DC, 3BA78FF7484665EF7C5623695B1580E7C45808D5ADA403CE -88F924EECEEDA7FE92E1F5B1, C203AC5CB9573D2C80F6D11D4836A58FAB8E03DEADE65E06, 784125AA1E8C6C4EE899198AEB70EA90FB2233A13A57516D -19AEB6ECC6CC8F7FBB8A5E113, 823B9118604896905D2F5541E795A0D1B0640789657F1059, 9AFCBAC2C46EFA3D38910793674E338105DBC083C7EDD34B -4D0C24C65465AE7F329F1A339, 49C6A23BC886F3E68657BCC76F01B0927F8C45A37435D30F, A67D709D21B58E3F0E0D53394B12016C69B5595FF33CEC6B -E7246E52FD310B7D97DD4E9AB, A10898F6F1ADAD0AFDB7F13035A02D1404A04BC508F3149D, 61D5D7C62AA60EDD5BA26419400E6199DB7BAA39BEA7EC63 -2B56D4AF8F7932278C797EBD01, 8191C056EBEE38B4BCEFF8BA5D97D05744C23321DE234C6A, 723EA4982FF0DB56D9FB914838E9EC71FBBD6F4A3ACA2E32 -82047E0EAE6B9676A56C7C3703, 3F293C69297913A80D790C124453C791B3FD8E58E1D88311, 335410E38E82867B70C9957BD09198DCDA360C9135D5A797 -1860D7A2C0B42C363F04574A509, 1B5050EDFEF24D952864DC2436E8F55582363F9443A3EBA8, 862E5F0C23BB041D98AD5936B8A3B26AC8BCC5B0DBBBD5F2 -492286E8421C84A2BD0D05DEF1B, 17A009FF035CD6587E3A62365085CD9164FCE7B1569B7184, 83DF00C368C250F403C06B0FC4D324455D77E065E7545C59 -DB6794B8C6558DE83727119CD51, 90B25DCECFEDC66EA2A0607D726DCB39F2A790F4A4BB8D38, 7D5C0A5D204A34FCBEF5CAC6068A3B3CD3260DA32F47FFFE -29236BE2A5300A9B8A57534D67F3, 3C9F535403C56A2115FD3008E4A33FEF321007E306AFA29C, 39126453A6435A5AF70BFE6070A18192CA2F8DC3D9204BA0 -7B6A43A7EF901FD29F05F9E837D9, 64C286ABDB1E06E4A8ACFABB3E7C914CFBBDBC303FB7AC10, B7E79F1B4F6FA04E7484341604CD0FDFC8A580419E825457 -1723ECAF7CEB05F77DD11EDB8A78B, 72897348DE96189EA211B42CE9709F083D230692F8058D57, 78DE88F3DDCB63F0D710BDD7AD82234C5B5AA5BA11C0B660 -456BC60E76C111E679735C929F6A1, 65A3BA1D1675DD7FE0C01179BD318B8D284AF6C999E43125, B053CBF758BB330A444B79F2FFCA7B3C47390F84E1135261 -D043522B644335B36C5A15B7DE3E3, 249ADF8E903C2B60822C090D3D25F2FC665677B13F6003DB, 8A02EBCF6830C0CDCB4037EAE8DF388D63AE275F77398633 -270C9F6822CC9A11A450E41279ABA9, A1C507607D0C978272BFF8ACF11C99C50114871D7C54EBA1, 2D56DBA78B7329FB0D554A82228257367DB7854F179FAB93 -7525DE386865CE34ECF2AC376D02FB, D49BA9672607802BEF389D1A9CD7A45CA69BCB66FB3136, A32B17ABB830AA91BC2A4E558A32568F987DC9A8E4868461 -15F719AA939316A9EC6D804A64708F1, 3DBF93BD107CDC4292F5F1306E624F6B3E6A89EB55CDFE0E, 9607FF60835997182BC11B5270218C16BEFA3E5CF6625222 -41E54CFFBAB943FDC54880DF2D51AD3, 694E0BF8644779716C55D18EEA91619828C41FF98DA7CF92, 9CEDBF4A31712413887AD25599BE5AA65AEC4C15FAE7B87A -C5AFE6FF302BCBF94FD9829D87F5079, 277E66561B8BBA882138DBB0C7AA26F56E91E746426FB3A2, 27B6329FA6D83355036050F55FE87BE47BEABE14DE3584FD -2510FB4FD908363EBEF8C87D897DF16B, 8A9E1EEE43E8593B6335CCD694E9585A745DB9CA73B2956F, AEB2EC384A0B41A8035F5753DF78099C4158ED6C09C973A8 -6F32F1EF8B18A2BC3CEA59789C79D441, 8015912DCF4004187BCF3190C953AC55BEAC939816BBB6EE, B42708696FCADE8D50C1DE6834BD9127391143019CE9B4D7 -14D98D5CEA149E834B6BF0C69D56D7CC3, 1F8997AD79EB1EE94EAD227CFD402E98EA7CFEE46678A931, 803FEE7B17F875171D59D211F0CCF8AF946BD826D20A9CE1 -3E8CA816BE3DDB89E243D253D80487649, 229A3084626E4E44E5ED62E8FCBE0C81C59138C2FB8B1309, 6E251EDF32CCABCAEAFE2AB542AA04AD35AE0C63861D3296 -BBA5F8443AB9929DA6CB76FB880D962DB, 537DF81849779C56DD18F42E616E96BAB598E3164C4A28FA, 8F1DCC4385943D23F024687A1F4C3A4D7F3AC97E13904F79 -232F1E8CCB02CB7D8F46264F29828C2891, 5DAA786C954C7FF372EC48AA2D44846BF09CE64BFFE7EBC0, 27C4DADDB974D9F81A75F0F66FA1E231B501C887E451AB79 -698D5BA661086278ADD272ED7C87A479B3, 815E094BFD9A51C0254D768E7D89E3E981015CDBEEFF6FC8, 165C69829424C6ED29CAA4525AF24451AA831D20C71D34B5 -13CA812F32319276A097758C87596ED6D19, ACB6343A55D002EB5469957191B9C9B18EC1657F67732441, 4F761714099014CC40F9390499A0D7B5A28B3AAD93A2CA26 -3B5F838D9694B763E1C660A5960C4C8474B, 60ACCF43C9EFE8D6945E5227D937BC36080A7B2AB85FB30F, 30443BB0C84D7F5D0662FF5DDC011157CFE9A7563A4D9F03 -B21E8AA8C3BE262BA55321F0C224E58D5E1, C1ACC9D92F5E5D89CC76A23513B14FD932E15748C4966CF4, 1A663705F766AED0EA311CDA335FDBEEC71CFB00C6E97175 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, F9802B875D32DF0097D5289FB08EB42131BCE0320FF5B7D, 9C2E4196073F43821302F50475A570E13973D1095DFBF6BB -64312DFEEE1AF5788CFEC3176D34C11F84E9, A28992928E987E3F52C1A5FCBF40E42683B95DF6FCF77E2D, 25B9FB9511F9A8A327A7939CD0EF7A50FF99728544563313 -12C9389FCCA50E069A6FC4946479E435E8EBB, 3F08A237FFD7963B123FF1CC5B09E36C6533BFBB064CC962, 2BD2195E5D6182B4E2EB873FD73F6962F6A31411B445B9C4 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 22FB682C20B5C99EF67802C7BF0B72EEC9A28FB5F3F3F750, 4022E7ACD68AC30DB6E1566CEAD4C4AACC7F30B578365C50 -A912FD9E31CD7E3B6DEDE937884905E530493, AC95E059FE0D7A4E948627DA1C21341421C139617927222, A9B512BE8435EAB2480BCAAC5F5A9287F21C3D0863779D9B -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, C0C23C85A02B7227B7979104F7CE17A7FD8DE2847D0C06E0, 6BE06F7A98F64B3C2E75D7E2EADA05E9F75F0578F902BFEB -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 962C9D695623D442928D96EFEADBCFF46EA572F274E2B2B4, 8872F6D48CDEEC012E5C08B8073BC142DFD32461BCA1E880 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 30838617C3A3EEB7C9DAF11696244F7716CEBF91CA8D2E33, A57DBF7B49789054590A1767283C2569DB76B552E174F3F0 -357F023F0DC204F0CDC846CA921F1ADD8447283, 98CB36D41601B2C82B0A9CFAA4B67B2FE402A537BCB96B63, 8CF86E0CB5ED9D443EA02478FFCEF7537EC2E5DFFADED213 -A07D06BD29460ED26958D45FB65D50988CD5789, AFFEEBACC68EF7A3AC71D73BA982581FF1CB19495014A610, 7E011B02A6D50CCE0972F9EC04B0C45D053040ED82FFBD37 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, B09E8563AC859196BB92037C623462A40BFAFD09373D3BD9, 2C3238548C3C5ABAEC51FDFE59E3A68E0BCDFB51D2C04015 -5A4653CA673768565B41F775D6947D55CF3813D1, B3226F9D03F56AC4E39478ADDF1F1588151D9BDAE16A2316, A2CC3505C014AD9695AA0CB8C269E8B09EB48AD6883D4E72 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 1069EEA05DA71C827F9863EE97C0B40E779E30D5E76FE1DA, 4B53B601144124AE5A778DA506A726D5C48BE965C971669E -32C78F21DA0F2AB093551B3248B38680448F8B259, 560D64DE0BAAC87954517030E24B06FF9F9D3677B83F3630, 9A4B481A6342DE84BC237F86D3B5DEFFEB63C98D88184E3D -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 3D5D6CC9979C23BC586843791AF4A7E76A23AAB41CB66A0F, 43D0CB43162A000B93502DCBBA01C9796FE49681406F408F -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 7DDA8AC43114F9AB3D622182D1A547610CC21FE72AE4DB78, 8C87CE995948B37B3EDB57E9E6BD7DFF60E31B994EB3E1F8 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, 1E0F3DDD1A57EDB3890E07632EF3EB79BAB46D5F620D4D16, A3C5E408F0C19A2E7DB68D02A8AEBEC636EDF318DBEAAA7E -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, A7713BFEA1C0094FDAC3E0F5A4C9B5018B677F584AE0889F, 9AD9F9D1147383EC7351074F4DBB19A630323C0CC1A320D8 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 7E5850CFC86C99477BC5482497B0E7179FD93CFD903A1330, 3478E6C71ADEFC39D7F03FD2CE2B9E0DB957B26C776EBA14 -909A469765F53090D38D5A7231073A03433CC33DF71, 722AE0C081DFBC9F7FE96F2DC53E526302874216440805D6, 3E8FFD30EF8BAB55CFB5AD0BB3F747566E8FF69C99825577 -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 5FB77B7FB9A18BC8EF9422E15461D0F4B2A2A3377E3A1E9E, 3F0C3D559B113DF0B0F6FB90B5283F8E02F13A1C8F76D327 -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, CFEE109370D6562C84D635DF3EE574EFD1CA1F4B0D96675, 4F37612F3152725F3D2E6E8818ABA69F998EC02BD64BBA3B -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, C0DE3CD9C235AF08C1DD648785536B6FBD4DBEC167952B33, 67253C45BA6F21E88A0351994728C178881DA231588E139C -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 8B95AEE9E7603F70CFF61BCE9322252164EE96A16F05A006, 70FDDCEEF65A69FB7292327BC7394773E3994749BBD9855A -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 7997B4300DAA7F83FA179ADAE3D571C7EF5FFAE53E47EC85, C08AA02FBB2087A0286140A68B4C6128AA6F4D43180B5833 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 2AA14F2CC7590AF60BA413068B25E781BEE1650B9158CBF8, 7581C4AA4F26A9CC153ACF740AFB660C4B40BD8A1ABAF54C -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 76AD44F938DC6A19052C2E79AE3095280541F564AD887AB9, 477B3857D2F7953C3C04C8D8B25E2B0A2E0A076769E37677 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 3C61782D2E5D1B72FCA0284C1111C42E25E2E1E6049D0FDA, 327FA391287447C95C087A7655F81DCB9C49311F2F21AD57 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, ABDBE7AA98A2E5D7CB88629AED24E27A0792826A8CB03811, 32BCE0183007751D8BF8FF16E8CC6B4683546ADDF16359C4 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 50A47560F45743026CF07A50B91F088582DB12CEE186DEDE, 50B5E0411E7247DD70CC804B3ADF77828F9911A1AF1B2A0E -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 7EC7EADD7CE3815DC8D5F63EE8C3CBA4D8FEBC7114AD32D3, B5BC0CEF95F039B6D51B2F6EF8300EF78E3A8D1D57494D95 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 8362A2E657E6393BFCC83D7F886FCC221C5242306895D556, 69845085238E212484E89BF670F7FD5B86CC1C4FDC55A5A8 -1.3.36.3.3.2.8.1.1.6 -1, 6AB1E344CE25FF3896424E7FFE14762ECB49F8928AC0C76029B4D580, 374E9F5143E568CD23F3F4D7C0D4B1E41C8CC0D1C6ABD5F1A46DB4C -3, 347945949FC2A5A3C21D6C34F880545B85F9283FFC900FA0BE1EFC11, 545EC6FCDF28122F82BFC658DCE53035ECA6267D49199A0CC00CEE8E -9, BD9E265BA3FBD69E1144427907B6D12CEDD7A0C2EAFE99B31E923EFF, C3F835B1F94550372EDDE805408E3832512557BF4BBA7FCA5CD5ECB5 -1B, 7C697F68C03D5405DDE22B398794A30700340862A38AA96984FFCCE6, BCE1BC4ED98A70B415221D6F4E2DBDD8722AE2738683F9F3960B6997 -51, 364514C548851A0637BC89D7A27B4FEBB3AC27BF66933D78F8D16B43, C71EAB779F1019AECB6F97A9CF6C2BF91B1EF7BF1295593FBEACC5E1 -F3, 28C8D50804DD4A22D0F41C2E83C41506C4CA24C0FD0E2F7F9D1E53F4, 661E009035EA2751026BD62A9C07AD156C861A741E901B9319EAF633 -2D9, 9DBD0E778E0BC0CA55B2066039D7D4B07CA7BF94AACD914F9ADCA760, 94D7ABD204F2A2E5A1F88D188C0F6CE04385F088A663EDEE099B9247 -88B, 643B13A5D70741794A610C6CFAB6778F0ADF0765C326F2514E92E0C4, 3F31788D87CDA30A16DBD4AB1EB303BF287915A6DC6328941783A021 -19A1, 2804488B7FDB144B8FE6C3579BA4BF6CE904077BEE40755FE7851EEF, 907935475C87009F0184E0677DC7A9138C9E812C59B0AAC2F9CFFC7F -4CE3, 9E71DEDB3F5EC6C66948BF757F755A8242A1AC228D87D7D548FF8ACB, 75921ED36BB340A808A1684D3DFCD30FEF989689A55BDAF61B61C3E6 -E6A9, 111F3D8621A6DD92955842E6E20496872BBE95A64427EA059BC2606B, A097B496F74D25F5C3553CF1F8FE7CD42B44BFED1AD0FBF8F1DD1069 -2B3FB, 67205EDC2726F53114E63EB247ED75A2704D01C668F20D7B9A16D9B, 9333E70D1901255B6A8BDA0C9976E914E75F5CB8C556B62CC9DD39CE -81BF1, 8D05B65A44AA9B7931BFE9C9F71EFC2298070F5A3BA69DA0BBC5C383, A891A72BD1AB7DB6E5A9221A07AB1802FFE879445A4B749C3F4180FA -1853D3, 206627D06C142FB657F0DC5053FA992AECD2468BF5CD73A935C68C8D, 87173F03540A6DCDA52C3D1FC07C5F06B58DF13705495213036E79C8 -48FB79, B75B6F424AD55D6B6922548AD2EAFC2A87979FA5D2FD9A550183F639, 884EBA4D076EF073296CF63AEFD04A14EB43BC97BA9CF4584D0C4D7C -DAF26B, 36E65910CD718533CD454EA121461AA380BC902B80707AF36F770335, 36578B57EE571EFD19893B0FBE20F2C27AF70691EB85B5742383F39A -290D741, 22F338C38AD9710DE0FE42114D56D08539E2CF2DB1A3C02515C568E, 24789845C68C60E8ACDC60CC45EF07E0056689E520EC05BA24D6B839 -7B285C3, 1083923F548C4970C5973DF1036ED4CBAB805D834DD28DBAEC1A6ABA, 92BC4C78C13E94B1BE7564C0B74AF15A31C5B656D95E2E2366D47021 -17179149, 5849814822FE5E5122E29B8247CF094347BF646771A1F3DF7B3BD89, 77942F4D230B142299FAE1750BC2FB3766FBD0A6EEBD08D96C60089C -4546B3DB, BBD436D1CEA67119010CF3C3D66852FE35BA29CF687607F22AB942AE, BF43E3A6928BA22B62D8FA95897F4C3C1F6C8F247A5D95D85AFD992D -CFD41B91, AA39CD6AEE80A128A66140C6B533AAA7B39BF5EADD0BD50199AA6A71, 28DAE5979F46131E9AE43D3412A40C852AA95B0092D9552FFD9E3A9A -26F7C52B3, B46432AD54C642E04C60BD858E04585810C2B6E42F55EFD04A7BFCA6, 8656D6E7A45EEDD968D5AE827B755A35A3EAC05E6F8E2B02F26E1D22 -74E74F819, 62F40BB1D909BB3D570409F6572A4180FAB2B1A76960065953ED745D, D5FBECB5DD735B4D302A33741507C3B64A831E1AE7227E37117E4665 -15EB5EE84B, 4F32956875A7266BDE86CD9773F9F2D635E8BEA7BB1BE0004147EC36, 81AE99C787D9FB3647825FD65A89C593A8BA65401B3A66C25EB53606 -41C21CB8E1, 63911693FB2E2C5713F799061F73D3E9CDB81991EEFD82BA06FB5F7B, 24DF2CA64CEE419C51E4BA8709FAD0BB715A0D4C8586C35041DD9BAE -C546562AA3, 98C2A6D508B2D4E0FB34DF8085EF75B3481692B38437FC29895FCE04, 9FF216EDF39D6A0B37FD544BD13991A40235E1BBEF0ACF8061E6D5D8 -24FD3027FE9, 679E96D4BD4BB97F46AD963F467FB7AAF47CC853D750DAF9E578D548, A93680F13DEFD1BA3051F38D7FD1E7F40DF88DAE7E97CB597D479DDC -6EF79077FBB, A43F11F2F52FA027B03E43DD190AC424438F5C10843AA6958CB36835, A6E28DB311BBF90C9043381DA115695735C1EB55BCA8C4F9C9E19CE5 -14CE6B167F31, 5A8893419D29A272B522CA0C191015D2AD30BA60CADDD2E05A0C6AFE, 6C76AC3F09C32498BB73A30D503CA72CC9C66986C88E0CCF46DDA73F -3E6B41437D93, A46CEFC6EBAD120F4058C0EACE5198E77BE0778A12909A68A7C67D6B, C25B69E349EB43BFD196E7D8434CF9FB99EAE9C4153E8BDFDCD809E9 -BB41C3CA78B9, 7B83AD32865B9E218C9DF42A8F540A6EFD8CBA10863B0BB8757587C7, 7091FE7FE16364CCEB34037510E21AE607C3B577AA0E03A6C91FBF2E -231C54B5F6A2B, 5D329610316827A87C5DF37EA5F60FE5634E3715FFC0382D93D6808F, 9FA17E2A41A2FC4EDFF2FC234D08E4DD313EBE71000BF6F0DCD650DB -6954FE21E3E81, 559C917DBAA1A55172BD4851CCF14446F5400537EC0538DABE574AE1, 3B1D239C45FB3994211F1DF27D763BB3C271EC727A7BBDAECB7F7353 -13BFEFA65ABB83, 4D93D5991E3CF886C043B118B0DB6B1EBDE4898F1F4585CAF61FF867, A39199BB5369253509CDF3448BE6936519F7C0324217B2EEDD2388F8 -3B3FCEF3103289, 8D878290B856A4BE515A17ABBD5205B2831D8E95BCEB12B014DFA49A, 16B16E5ED0EEB8242BAC2A50273D7C916138689B2175C00236AEAEB1 -B1BF6CD930979B, 7CA13A07FF71E7C5D6016EAB459E5DAB9FD00C51089EC8064ADF440B, 2052D1FF9662F58E21A3027EF1723C4DF99BEF86E5641936CBE6A8C3 -2153E468B91C6D1, 6754CCA9808198A686C5DE673FA04F69E624ABC0929F711D9CBBD811, B9AC8FF1A263F5B3D45BE69AE5C7666C8FDEA757F7E1F1DCE79A7F79 -63FBAD3A2B55473, 61ECAB0B53EB1FF9C25299AC09EFE4BAB376ED8A766BC7F7D2608387, D15455F6EBC2BA9A133391D40D4BA6B2CD8B34017D5076362E1C6012 -12BF307AE81FFD59, 3320580795887EC2245E398C32A020E43229D508B2BADD1CA881863E, 528F6321C6FC1B08D1D025A4AF4075AD75366EEAC9175E8CF044F53B -383D9170B85FF80B, 92189DC11764B339BA0AB01DBD34FFDA92E07695999CD3D52E61FB3B, ABC5AD41019F3E9C7226EA133A1CEEA021CA5C5678D8228AC53D73ED -A8B8B452291FE821, 9799E5A68692FBB6D7120053502776EA7DD0A6C94E452C8A43E1466C, 4727262E184CE31118125E269F04E7065F3F37D2BBEBEF85724ED60A -1FA2A1CF67B5FB863, 1BFE156A8E344426474563DFF1DFE0C3AD0203376FED73343560D356, 22A7D1A5B8986E02046478102A043293FA2009F256143B1ECF84D4D4 -5EE7E56E3721F2929, D5AD6C39802B3AE6E77E8667D398D32AC0E336D918DCCD51E70B9BA1, 7CDE7FFA8313FE769D83B358E133CF2BBB86210B1083BC1CC806523E -11CB7B04AA565D7B7B, 2D894C8516A7F3D5B6ED9D7CFD6ED91D1D74776A696289CAC1B37AFD, 23B5B4649C57F03594B7CC5656E1A884E2020B327C3D22C29417C7D8 -3562710DFF03187271, 615FFB464434C3587934A91AB276852860C0FFAD0BBBB3C380375D11, 111BBC3AC5AA28A1DDBB8ED4A2DDFDEEA15CD30A26E354D0278960F8 -A0275329FD09495753, 44A3200D837AC46A099CA9868671973E882B427541DD48FAEC127CFD, 70AFEC4C437DE8DDB6165C1D9DA3D11818B4AFA818867A6A14B46129 -1E075F97DF71BDC05F9, D40147B30AA8E10FF278493595D6E2E26434C6B6EEAE9D0DD4B19E43, 92B22F95F1249EBB8A0390B2A1BB01E2AFE4CCBC9EC0843D065BB195 -5A161EC79E5539411EB, 4EAAE3C6C156D12B836F4CE7606C7A6E3380F00CDB9A92018A195514, 307AFBEFF145A59A1FD0ABA1B1B104373F1B4686B3FE45A00CE3DCE4 -10E425C56DAFFABC35C1, 4F7B514FECA6109A09D77EEEBE9060B734AB7731AC3D87EC9CD2A92F, BD11DC5EDC0C1E9918C7CCD9F46C572B213760AF6A042C8CFD42C196 -32AC7150490FF034A143, AD24DC99012D1BEC408C18BD905E9B8A3E008FFA9581D2A179BE0F8F, 6AB15E6289089011045F57359CA5B7DEF3BB829B53A98E9C85871A8F -980553F0DB2FD09DE3C9, 12D257766D215CC9E791CAB5FD49447B2B90B439EB68E94C4FF37A7B, 368626A07F10B45C9A5B3DC0914A00A7548197EA74D770588FD73F18 -1C80FFBD2918F71D9AB5B, 72F9E3666E92E9809B7AEE48EB4508426BE42236088C83A2ADFA642, 73EB55F92F5A540B5C77970278E6D08D3792B3F26C46A1A0AB32E1DA -5582FF377B4AE558D0211, B589BC6671583A59D27794D9A147E3FCC74EB091D83C672AD23B2248, 89627B1FCF76A517D5476C4525B2A4BE82E657FC4A3864C71869C8BB -10088FDA671E0B00A70633, 1F58F28D2E533AC884D50D7AA64A1B6FA9CF2AFD10FF9A58BAADC045, 1D909ED1573F8B08BF407C31072F0A1CA0541BE07911E3C9140D6416 -3019AF8F355A2101F51299, AE186DAA7F2BC8129AE93EA29614B652826124F6B6C4B4BA11497DE2, 40BF14349467196ACFCA3D67551A3606954E4E6AA201B464839070CB -904D0EADA00E6305DF37CB, 11AC26214DD7AEAE303979DEA25F91C0C59370E3387975E824E5C1BA, 2AB9B465A1FD536F2203B6321AFEFF2945B56F5F444BD2F194BD3562 -1B0E72C08E02B29119DA761, 6C346FD4EBF867C50627C860D8B649022578D183F3A653D4C2F7B3B6, A15020F476743457C703697E3A65102593BD7C23654BEEBB974D0CA1 -512B5841AA0817B34D8F623, D6FBE18E015CE4C39F523785EC374144A857F140CDF46F69BC8826EB, 4933C385FF6466DC8E02B40CBC7AE9A1A3E22EB1F96D495784623F19 -F38208C4FE184719E8AE269, 538543D7394B4E1F9498CC30E1071C65D8A74B0E6F1C77BD890198C3, 212E788D5D20EBC52C02FC6D73A98862D4A02CA138DB98A01A693679 -2DA861A4EFA48D54DBA0A73B, BEC3AA905B6AD3A7F4D63818A2EDFE6E94AB8BE6619EFBB86181DDC8, D430F019CB8A085BD9FE21761BE736B53EAE24B5A0051E515BFE07F7 -88F924EECEEDA7FE92E1F5B1, BFE582B499AE3E088075CAF82C919C08514499622E2F6419A6B7EBC, 52894AEFDFDBB58B8A76F4FDE595E2F21FC78317350B1A86F26423AC -19AEB6ECC6CC8F7FBB8A5E113, A29D697AF2498106C2B03D9BA60013B963E23E00DD55BE5F898C53DA, 93B77AFC7F5F926A0D65529DB0CD052699BD56FE69B4A23149931608 -4D0C24C65465AE7F329F1A339, D1B5B610D85FF46DDFA65E33ADEC62E03147DF2A35837ABEB0C28837, 8150D26FB91E2792C10F6EAAE6D6218CF284FFFF329551D60F786B69 -E7246E52FD310B7D97DD4E9AB, 721424AD66110A419EE724DD3CC1EEC8F4505CB47DD2D83D8C6B783E, 53B3DFC8CAD98AE7400C1F7CE84362C237A865D1F1CF2C51EA4DBE71 -2B56D4AF8F7932278C797EBD01, 364D4B4644D248344A92CD7E0DA87EB0F7392C4A7CBCCD2F5EEF2F3D, 944D4E138F7F214D3E6F5F107AEC8B9A012FA122C24077433E1341A4 -82047E0EAE6B9676A56C7C3703, 893993E757708A20E955C687EF10BEC1CB61AFA7EFA0E626DC7CC751, 747232EE423BF2ED27790D2E2E9DD46EAC52D04317490620FB241C76 -1860D7A2C0B42C363F04574A509, 210E935F235DBB11E0B63670E9B106F5CF2E6D60262241F14FE4BE1C, 6F5BC89ACE4A0A03D6BB581833C1CF59BEE8FE5272B3D2ABA796B134 -492286E8421C84A2BD0D05DEF1B, B3E7089CDFE8175B734F2023A0E9EF12E387170A2FCEB2A3781FFFC4, 75EDDFFDA09AB1B4B7D87C28DF3BB60B121F3390ECFA736CE453C0FD -DB6794B8C6558DE83727119CD51, 4777A7EFD57D08FB9C7D00860F825EA544D0DA5A04AEFC12DE98E48B, 979A4F95D572BC2C919E8A6D994E2F29A845828924C0369632CA77AC -29236BE2A5300A9B8A57534D67F3, 71EB2688EDD1766C46D51E2D29D2609FC9571340B5BE3B800C990CE1, 769FDC0DF3E621BB3BE9907E4D8E7594B1748F9DD03F76DB2717A2EC -7B6A43A7EF901FD29F05F9E837D9, 91289B134ADE0372B699B4FB985824CA015717A30F3225C72F3CD02B, 86D901D02687A098AE0ACAE5F7DF8F8F98A77075D40AED90814ABCB1 -1723ECAF7CEB05F77DD11EDB8A78B, 74A0A68CCC87CA5496CB96A9967562DC71F5C765F0BE307A86A0933B, D0E350DC10E7BD33C5B7D86F07464A1E7B48EF34FAC813F39C979BBD -456BC60E76C111E679735C929F6A1, 47E8F70BF17F6C5C98736CC2D52CAFC7AEB201704370A8D243C6A12D, B9813C566B5231EE79C973934E2C2EB9F91EF4B80C6A0BBBD47DD13E -D043522B644335B36C5A15B7DE3E3, 55CF7429EBEB59C42CDC53EEA3E7F9CFFC8CBB2C3D7E4F4EF53DA91F, 223694B041AA601A541BE84CFD3E2012E1B502A3B845E97F067E2145 -270C9F6822CC9A11A450E41279ABA9, B4B948CA79466F2F9D42FF657A792BD8345BD0B8D96A1698B1B1E2A7, 3A15D9408DFF3E0D4D0CEBEEDB3FDBCF15599034DEF03A77E9E0A2A4 -7525DE386865CE34ECF2AC376D02FB, 81F0CDC7CF6CFB5D1EC09FC1B65FE3D8A401F87BB3DCFEC98B63807B, 5EEED4CB5BE7D100B32FEED055D37D0B41B6F7804AC54F53C527AD59 -15F719AA939316A9EC6D804A64708F1, 213D8F60B75EA70A8424C3D442087A7E9D6846345A9A2B641C648FB7, 1607406922393118086B9800CF5834A222FE29E032330333B83649B8 -41E54CFFBAB943FDC54880DF2D51AD3, B4FDF21EE7D6B02BAD4670BCE88D7DBE14E732374F37C00DDF84A256, BD19D4181099F3A06B37A0B7179D389E25305BB729B93E14D4A9510B -C5AFE6FF302BCBF94FD9829D87F5079, CB3B04915FB0A39107991B8F32D268D29C70A1500D52F684626256C6, 9D58FAD61FF073ED112331A7527E5F6B798C69A8E0C90BE6620C9C88 -2510FB4FD908363EBEF8C87D897DF16B, AB3365E212A2FBB50BDD18B48A05D5B91FFFF3C702CEE7F509FB05D4, 8380D5EFF9DC0ED37B845E9D3A7B1F3831731A19DCE0802A5C025019 -6F32F1EF8B18A2BC3CEA59789C79D441, 6557E6F774290CAE2E7345BBA7CC9496774DD067FD8630FFD0C74FB2, 692842AAD50480DAC9BFAC959D82519F3476B3D7A7C6DCC6D4413AB6 -14D98D5CEA149E834B6BF0C69D56D7CC3, 61DD60B4E4D9DF70449EAFB3B439A265BFBD0FA2260256416834B800, 9B7638D31063EF561A21FD4D0544DB004D17036E28ACCDE8371CD241 -3E8CA816BE3DDB89E243D253D80487649, 5B347CCDD1C95937100E1792706EAECA8521F0B90939EFBB308E4669, 4301E455EA85D7D79C78C33DF3D258872CB6D8E55E137D2F7C26C527 -BBA5F8443AB9929DA6CB76FB880D962DB, B9DE11C6BB1CEA1D8BA1F0163272DDF33BF9D6A11936507953D7C14, 772BF3B71BB1139DA092488AAFEB5865F84EEFBE4B0244F3B5616E8B -232F1E8CCB02CB7D8F46264F29828C2891, 7AA4BF8B6DEF7037F531D266B7DABD80BF2DD90D765D6AE245B13B20, 59096FF686A48844F95E00ECDBF3AE321D0B07E0E3A3889562B22847 -698D5BA661086278ADD272ED7C87A479B3, 1890798EB18C602137381127DBDAE9DDC852094DCF902D94153CD91F, 535BD9806A7687617A8CF398072AB668789FABE7F126164BA3404F02 -13CA812F32319276A097758C87596ED6D19, A4A079BEBE4657EF9DAD2440E73669FB90DDF6202405630C35360D50, 6B84FEF658ECFEDAB79E6535FB8AF119521E28E9AB648173F989A8F4 -3B5F838D9694B763E1C660A5960C4C8474B, B533D16E1A5237821E152358CDFFA75BDBB97C14C9AF9DDDC0F44187, 6AFE04E024DAC71DB1DC7E618F4E41596BEC166D9DDE0C040B11477F -B21E8AA8C3BE262BA55321F0C224E58D5E1, 844B3694AEF4350C9B4FCC264B744FF7A09A2E768E7649F09391313D, CE1C069E37AF9C39A3C1FF264FD23BC0F9E9E81F9941CA6B136D10C6 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 4CD0A78AF110BECA147E654CE61E6012DFAAFD7FC24FE26258AFE380, 5302D5B53EA9AFC4E4E613DFDD9BBAB4C92874FE4CF62F5B15C27ADE -64312DFEEE1AF5788CFEC3176D34C11F84E9, B032FB76AD51B5EF92BD590C30DC4D5EC06FD6BC29E301792759DE43, 2D08B86518359813F4141F19897A4C716055E50139ED5F526BC3427E -12C9389FCCA50E069A6FC4946479E435E8EBB, 130E29F9E4325DC36CB17A4C474618C922F096D193985A1123FF6A9F, B24A243EBA49D6272A3C76E95213B7F1963B91A2C703B820827561FE -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 3BB94BB32D7BEC13F06F29358BEDFEF58426779C4268DED2F3DE14F, 3A0BF8D7BFC481C53509D85469FC0DE6B32AE6D5FE3AE28C5FBF8405 -A912FD9E31CD7E3B6DEDE937884905E530493, 478F0ECD4C419D685B3869F1F03A134D18A4B3032AE8583AF2DF501F, 7ACBB609D56766D9FEE81DEC2D721402D916EF50CAB2E09C8AE73DE7 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 88E3D699B47347E45A93D77D715382F74436509D83FFE0A6EBCF9077, B066CF5412B2DB63B43F4EBDB979D572C77CB88C9ECBB06F5B1B495E -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 5792B5B8155F83D8FD720C3EFB403CA903D39B2207A47896C4D5E7FB, BD5A4B9E223B6E8E9AB26FE9C1C4F30A690819ABAC931919E88E41A5 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 8FBB217781DF1BBE08B4B4FB4837098FB70A5E9BFDCF24ACC1CC27B6, 3BB4CA833E780886A4109C8A3BB4F5432111B9DC09677EBDDFF5E5D1 -357F023F0DC204F0CDC846CA921F1ADD8447283, A63D1A41D1A04A52887E1078A04CC45C321B7352B1BD26E797EB596C, 2736E3380F6BA665FE3E7C1163C11BFC81EF3548D519D00824C3CA9B -A07D06BD29460ED26958D45FB65D50988CD5789, 7A827FA054089820B48820ED31B01CB80BF2C72A6A1AF0809DD5D6E2, 6E71B4CCDCBCC2CE339E5F660C1628003C6888C21D88B0B27FB2A1E -1E17714377BD22C773C0A7D1F2317F1C9A68069B, C73EECB9BAA589962D59E94F94DFBE88D694C9B05F3463678A729CA4, C0B87137C3166F5AA1A9BAC77601684084F61873BF9088F224351BB -5A4653CA673768565B41F775D6947D55CF3813D1, BFB17FBCE38AF7D1D49C709D77E343D104E198531767CFF1CE79305E, 4F1BE5D8AB89119A025F29F751C41D0A264E1836FE5608382D7AE116 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 7329AECDB507C4B706162A4459D9218C550BD56F122B983BF2054FD2, 2E700B8B204A9589BFDFFA3598ACBB669162D8AD2A356722D12E89F -32C78F21DA0F2AB093551B3248B38680448F8B259, A204317C0B65F1834D5818540F1A491F0CEEE1180039BF610B63A1EA, 206A4AC52E4D13B47AA6388A92C1D67F93A7087B1567152AB4C999B2 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 425043929305B9CE5F2AAC5432A082553A0DEF208C680CF715DFE5B4, ACF30B61D9433E912504973AC1696DFE61A87B9CA6C1E714B68B6797 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, C1A71E1A94129F8A017C991CA78975A0E7DB2C6CB72491BB9D161371, A27D1324E98F9FA81973329DF980ADFD2ECDC9305F9C148871F28D05 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, A202F81DDC2540B57EBC5EB5BBEE260F57A06309CD5914E08C72C9E6, 6B95BD6D82B1E3FF7E51EBDA25EBA01A89E5ACFA8DE0A47095BB833C -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, A54DB1040C12D8EE51FC133A1ED46140E0C2E87C4751DAA504A9905C, 9EDAE3FA6A83550BC31634CBB785DD6022A1F96DD0FF047E35BC8932 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, AC6CCDF1E6A45A6557E99F736E0713F967ACB4CC323B17EECF02C28, 42E6E0D8362AE7B04008ECA845FB68EC9F9D2204CB4FDCEB2996CC2B -909A469765F53090D38D5A7231073A03433CC33DF71, 50B721EF7C3BA5C92782014C1159B3316098977959EBC1EDAC353559, 8FE7159158CE1C9335EB002D58219CA2556988CF31C7184C99559945 -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 3679BF8392E932FA985164CD6781A4B49FCE829A124B75D69912BC12, 8FA1A9C803950D039A197C26AC1EA84FA68BE1EE4FE971984D5E75AD -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 71593D4A8E3AEE1B357846E2BC73A9B731A787E6759C9F28767E5637, C0C4CDED4F34E659CEE3E523CE4800E837973033A3F1672A929E1D80 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 8C656A1D2C6903B312ED9C898F71B315B894DB21BF4FEF9B8DE98622, A69E7778F413E7CD2537DDB0A0099CA4C37045ADEB83324A11C00B7A -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, BE16103D379A907AADFCFF9CF0B51BD5389DCB19D3C333B6EE650132, BFFFED5EC3B301839609C4858D1FF722723AADF1BCF365BD5743C262 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, A35B6D124ED0CEE7758597C424D876FC3612C8ECC9655C635687ABE7, 75769C64CF387AA30AE37C8450AB88C0D258EF94474B7BC068AABA2 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, C47DBB9CA39CF4A08FFC50A23915E81B6EFCFA82EB11CBE5B3E5C2D, C5FAC7B7622B7387D8BE5ACED0FF0BB35DAF63CB3C4E5FA8E08B5078 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 71148980EF99FB782E82330258D2F77B37217A3DD9A8559977026C2E, 4FB51B7F18FB91C16797C55706E5D0D1888E6EF2B1C5BC55AC1521A3 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 6557D10E9682B94041B8787E28EFF82FCDC66C0FD2891A020CEB5B32, 548F695C2E8D084D480B8A019D89E7683A93D9BB3B99F612BA425667 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 66DF65239BDC2DB453BAA30831A46E3725E221E6E8DF0040051C03D5, 4475A81554537F94F1DF91740D061760CE3B690B743EBE3BDA57654B -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, C18E7077D34615E3C1E775FC26060220A378BC5E6CB09A2503C52511, 50E753A662BA044BBF1E8A12C47A3FC32FEE76ACFBCD7382AD9A10F4 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 77CFDBC9A73F0CF8E4F9775700945A559C9F20FAB9B31AB6CB58BC15, 9B82346F1AFE1E6E61A1E49B1AC7B8E1D9995639EE2CAEF2BA440BA -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 174772F04829EDE8AFDD3D58E65167567D3932CDC3318CA89F57FD81, 72C25C4BF9DE5EADB48AFF87ADE93785E6CCEAE64713CF2A01D846B3 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, D41A2FFB65FF90076A259B95B50C5911689B5EEC830740EA59A6A6D0, 8C26EBC87597DCCE658057955CAA22E02D547FB3FB5570C1008BBD71 -29396F76B67B7C403D73A1059B80139336878E44938606769, CD3AD2AFF465AA5244C99429B26CDBD67F082E9CFAC6011F388543F6, D4AE8CF5F8F20CE4519A905CF3D2F0AC94E75F6A13EB83352B4B8664 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, A9F09CF0A85216D572FDDD26AD08EC7F70FC90350D4B48F6D4BE0E9D, 77459B4ED98511F07097E8C0745D2B0DA82CC3D10DEFFD77EC7A84FD -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 3BA069CF00C2E0CB8609B57EC931290A0B67A4825A414CC0A79ABD62, 43D105DDE27415361E7F5F3DF70D4D48273D604DCC9E22B6483900C4 -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, AC6B86F3ED7A81BDC183A10B5FE0AF8F21123F96869632A095EF5C19, 9B79D7A2B026E00CF213CC804732E55C77CF1E8FE7F49958400E9525 -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, D373134A824015686C5159EEE20B83D78C41596CFCF66A5ECE7B59EB, 6DF712C1CA0D78714C0EB91992FAB0A3A409CE0C7179ABD1DDF49438 -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, B3766C39193AB3185D75DEAFC5978E88BA4AE24C2B5BD5DBAD0F61FE, C239B5398D2F3FABDC07FFAA84D8D8A10F4F43E494F5FDB942C97EBD -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, D01533A6399097DF8EE27D789F1592C7854E78B22ADC55500EB1871B, 89944017C34F11251DD38A7CAB31765D07DA7E10A266EDABE7449C21 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 59AF551D15C00ADDD7A6CB54EC479ABC83F71CD0AA3E1B90E95A4DFC, B549F16C8C9D729A62C0126DA733DF29831D8A22B80398826422FF36 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, 82F6544C03430F5CE49AE25F26787E668BE606ECCFC54A1444C96BE6, 6E45F65BD2CEA42A23462CDD0734724D1734985E9ADB03063DCB722A -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 2F2B75DCDEFF98E1C83E4F8AC58A8CE8AFD9C8FF6D4923B3E4095360, 9651E45F62A65E2F58E28A20C1299A1F78A3BC810C1823FDDC197C9F -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, 1A60B9902F159F10AF3D8342373780A837B9D25432B562E664334725, 7688485BA6B8FCBE33E4E52CF9CB08498FE056F78CAA17AB48D00891 -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 6CCCB54DF16D7A7C8537292E1314CC3E788D0FC5A4826DECB1A36BA9, D79A57F5B3CAD91F01BB413207E301AE48472B93FB426821CACE065E -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, AA4B365137F3DB610BFB81DAAEB98FE32BE1D388FFB42583B64A1643, 6D4C5105ED5E8D08B2619CFE93F9064F8BE660E6F28F4716A66E0FD2 -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, CE78E6437FCB42ED6DEB735F3567153111DDA91346223C063F260B74, 4091D4B42854D226107B2438A383E1D552EA57C3EC16C14F118BB50F -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 150E0B491F06E562ACFC0C2E37F74102731BACC940D2F9B3BBCD13C0, AB9AD5D37EFBD163D715440BFFCE33EB8160C4D57F62C453A31BA081 -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 419E09DF81BC138935002C1241CB0007BD135C9F20472451B0349D2C, D490007A6DDC6E41F804C89B1261A8F0EA04B80BA7B7A41D0DCF865B -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 8D3D4CA5D14CF04DFA79216BFE30AEE4C4E9FA2E58605D415B70FECA, 341D728F708FEA2DA5DCE29BC7E9D77677E748921D4205B134D36B61 -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, B2B6BF427896EC75115EDE373AC20C0CAA5018AD2EE277280BE5A7A4, 222CFC898FA6854F86D500A382E347168CAACC22047C841E72B51B8A -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, B6B6AE5BA7A5C2DA1794648AA3471651C8930269FAEBF00B70667616, AA2DF242A69F440ADD19BA7E5884BEEC3FD387547BF2531A4242D457 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, AFF17A56BE48AA5559B214455A619CA098C34E649B2D17C12174699C, 15518142E99B58D05B2E7D71C357A8C97C172E6AAD1FD2CAF6101B11 -1.3.36.3.3.2.8.1.1.8 -1, A3E8EB3CC1CFE7B7732213B23A656149AFA142C47AAFBC2B79A191562E1305F4, 2D996C823439C56D7F7B22E14644417E69BCB6DE39D027001DABE8F35B25C9BE -3, 46B2A45FDD881ABEA0CB4E5FEA19C5A72D399245643B06E0FBE24A5E4058D806, 4F88CD8D4BC69ACC7B7032D98460B2C23160441F40562C00BEE2AA7860C19AA8 -9, 6BF1219838C00C721306D29AFB1044245332FC80EDFD3B1D614C4D5DDD73214E, 9883D5A3AAFEBCA5D02F25D93BD0570A7A1963BAB3869580EA224D5E10F11DAC -1B, 6AD5656B255BD36593DA21AED47B911240626D523645DA059CB04742C0171486, 160C97047612029C2F42246DA9BC56E46042F435AE4895B504173AFD675B5E62 -51, A8039D60E562D1FBCC12C4D2E4BAB2F6E03149D16ED2DA93573AF4AAC87E4A03, 6E860377BA3F47DFA7C3E53A2062728DA5A659919CE947B470E8C557C3FF1B3B -F3, 40FDBBBE7B36FA05AA4CC4A391CC270EF09F977A23C1E76E075EFF8A31320DFF, D65801633AAE04033257B0B6B276644E74E48C7A14B5E7942D590ED9D0AD570 -2D9, 37AC206449E37FA7F890EE3ED9DE41A92E7C97CC7779EDCD017EA4E1466414B4, 7267ECB7570C79B7C7BA6BF1A48DC1B1E5EDCD4E91247595E235C65F589001DD -88B, 8DA83CE93AE501EB6D4BA218085213E685FA62CECC00026C485964A22C16EDF1, 6CC2D9758609FC0FD5A31976EC2FA2C56FA8103C078D5C12F5A88DCB6715BB9B -19A1, 3024D2C2765D03FA35A73B80DFBF14066E50778029DB4500BC3D0D3596444D96, A7C2CBA4D9A28DADA14CFEB8AD46A37C414758930B7F6508D82266E4F2CDB82D -4CE3, 5D1745B77600F05E4934BAE86C22CCD61920EF3FCCFF7E5D4D882C10A6FA1099, 996DB07FD460509911D07D9E3D335BD289C057B78DAF8753B5E51F18949E1497 -E6A9, 8365B23806E687BA877BB26ED2C0B1C5513780A70EBAC0F6EBFDBAF3024833F8, 98EF6AE20C4709794038A2B196FE454FD8B08989E79E642DA1BE5C6171C6028E -2B3FB, A069CED645647C95A65F2A97F31C3E0751D0769D8447BC1913201453CBE59981, 4720C8528394BA22D4C2800AB724AD16C0F8B3DD359E506C8B314CD461ED3670 -81BF1, 4590F4E19A3158327919EF0803EB2C583C660DCAC7D2427454AEDC852FB2425D, 71E6EB45D665BF44CE274DC0EBEA9AE6114957F886E6647E87320485F57192D -1853D3, 1DCF2D72D3B4ED4D639FCE7FF1F73380B4415D6C894CBEE84EF7904D8007A2B1, 62FAB0B5CCEA9EB985D2BF01381B68544C985EC952270A443D9B4549D6D9AEF3 -48FB79, 66CFEBA81F5374DFD115B5221D489BFD4A53088547CA4D90D622532D8CE4CBB9, 5014D7CDA5BA33F9CA433E2701C9571A6639BF842F3E68C1AA3A8CB30ED450A2 -DAF26B, 24CDBDAFE654671D34C15D4FA4B5E5EF6A13A45B5249EA3AFA7B9D7686CBB51C, 7938C5FA55FEB0822EDFC915481B8D9EF35B3A22B72B40E27492FA7EE18E0F98 -290D741, 72BF6027F28B71F87D887A7E91FC1C3126DBF719D843A16A01DBCDFF8D452E8B, 5C529E65C96B5E098A7A8E7D8F5E89F92EBB9F851339257F728A673E488FCC6B -7B285C3, 5F7CEFDFCCE23BD555756F7ACB90C31D2A4E9D1936E26A2D5213AEE4A1C013B7, 45710114D25F5444E0B3948C29B2712A488010689637551BB0EE96FA1EBF2FEB -17179149, 20579E61E96F724AC181253140A220FD18F26FD35172D11245D7404F1F7D6065, 8F5F24B34EB09E8770B2F9003B4CE5E9CDEE7BC131B5FA8E9188341341E1C9E2 -4546B3DB, 9BEAFD6D9D52E1041BA7ECC4151C2874625611C7822E86723D0F153F8EFE46DC, 8A799C32E38F08BB09FD4358AB70AB222699809B5CE63487B5AF779762403792 -CFD41B91, 32A43AF6E1DE8240C5F5EC6371965E4F2DF437281493CEE59DB18CAF2029D800, 632A7EC329E15CACEFE1D64B737B63E606AE6545747DD51D4DE244735B7516AE -26F7C52B3, 5FD25877098232E8D7ED97DC3ECEC23E28A745B4FA53F624585A3DD75F7A0D48, 34DF29A96405D6F80F7EFF964025A10653D84BD79D3FF667DA35268BEB4B322 -74E74F819, 875A9EA2C25249A5F38BD85D39274409769E2AE1638964F5ECE17019D8B581F6, 873EEA72A7B886F3CDFCACD75FB2ABA2E84BFAD32A522019E51E1150B16F559B -15EB5EE84B, 745D9F0A786566FFADCB38FB6F8C977087A5F4B93A90EBD8DA1FA0E1523999D6, 78CD646A1E418FF4B4E0C669E0EE56AB40499C0D5E06BF108C0A17B9F1CFAB8 -41C21CB8E1, 70D460A5738CC1CABB49969EB82F51DFD0D99992652A853F6D859195B893A4, 2CFC605A0B39BEC27C37BAA397208E3A8E451B691DF653FB38E58E560D1A143C -C546562AA3, 44BF8CE8B579D2F06FB3EC58BB512A82BB4F75AEC5CA7419692E5A9704FAC3EF, 4EC7AF1F26028FF4DA810F67454C683BE3DBC58B93376E2CE039F4BC666A7736 -24FD3027FE9, 1B16EFD0632ABD82C9361BE277B626F19A132569C4AEE51A975E8044F9CF1BA5, 969D6005B144A6C98F3EABC06533463132B95167002972ACF1F60860783F5552 -6EF79077FBB, 1C3F28BB11063BFEFAE67491A38CAEEBF4E77783257F11E813E177D3FFCBC3BA, 523A343D53BB1281B31B78218F27ED61ACB766A3F5F8AD9D325175C545E45E7B -14CE6B167F31, 5C40AF812A85D162E0B4D53B382159DB3A9C20D5FC02F2EFEF3B9081105C5315, 6030144CABA433483B4172E2E1302C53A28E5A509EB181C35F482645A44E9FCF -3E6B41437D93, 7EB6BD281FA7D5796F55A9551BBB0360855CF90A5F80DCB81933C0C739620C3A, 5F26B9310DAAC266EFCF923B66BD5ABA3C686443414B16CDF61703A0711B428E -BB41C3CA78B9, 58E66A858B55228FE0A546A94FC96C53C048C8AF303EA69BDF61ADAFB7D5880F, 2BF5A23C1F3215E363904606D86409B08D5454D9E201ECB8C98D64BFA5D84B2B -231C54B5F6A2B, 7890CFEFFD9B8DFF45F1688641894BB932400C1372A8A6CD7667E6CE3B00E7A3, 351F1CC6AB4238C1EA4EE51D1E16783CEA9811D9722F9EA5AD032FF3EB4A7883 -6954FE21E3E81, 40EBA6E73FC113DBBABF2956F0E2632AD9DBEA99CAE8B50AEECF62F6956427C8, 34BCB5BF2A1FF2B04BE119CA9313BB7EB14EB1ECC0EDE7746BDB94CCF2A1952F -13BFEFA65ABB83, 3B38E7BF2FDF9E69918245069D61FB84A6BCD52A9C99E603D4CF939FDF31435D, 973F70B04B3BC957738CD0A3B855A1FF93D15BD94D7F4EA42A9E52BEB6740943 -3B3FCEF3103289, 9F0C7B33B23460D13ABD540AE4474169FE4C51269442249EE7C3D39E14874FC5, 8767F88325F73D1D893446CB7030E1362CA61AF52AA4F199C60EAB366D93A60B -B1BF6CD930979B, 50A861F4D948FA2B3DB2BD691909067A81D48B647D9EA4F79C04530B56565504, 6F98436941F7773E3AB25E039872A1A206B22F025198E67210BDB2731664B323 -2153E468B91C6D1, 6551EA43B6730C32A046C0976F712B668A6AF40F09E909CA441A41DA7714E8A8, 55BCA3B61D09EE93B9DF5A754CC8CDB712BE00682870E5A9C9988B2DEB275B3B -63FBAD3A2B55473, 4A68ED2364D33A9864A7F9F174E318DCD3A98355754D80CF84F65F4D594636C0, 4D13A889DF28F8A76822AE6265C7EF6F1A968333AEECFED7DF1DD015D70368FD -12BF307AE81FFD59, 2D18FDE1057CD59BB20DF280BE115604AA8DCC35B15DE6F3CA5E01EBB1C68E4E, 783F0F7C216117D0983CB6CEC5B994DEF501BA24118F6883FCEDC7BF9E2AE0BA -383D9170B85FF80B, 224218BF2ED709AEA610D6C5DB90807A9D71393F6B4317B9A401A1C253B5419E, 26B3EFC0D6A3D37688F86CFF79C21EB5CCD88142A47FA775888E5B12E931EC4A -A8B8B452291FE821, 632DAF743585E127427BDC95DCF0C5CAF61F21B58D05D77607238D0AFF070C56, 9E54F11280E84FB18405F532A6F5B84826A79E32279713F06D129CC4A8F4D212 -1FA2A1CF67B5FB863, 4D795982B36DDB139070EB4FFC87EF3082AA1A61EAF2BC1D2B0BD3F740189FD4, 80BFE179D34305868F45212080AC9D45805F44B461290646110B7443F08549A4 -5EE7E56E3721F2929, 93E9F7C14558C7752561BD3D4BA761F6324E70837F0268FB53EA0CE849885C32, 2F9E0906412C4A1127741435C9AAE9E96E1E6D001F40EF1B07981A11A49CE315 -11CB7B04AA565D7B7B, 5F2205E9DBABF26122AA57F6B6F4369A84875B418CD74A9B350C2FF04F6349BD, 76927AD14C70EC1CAF088C05BC05F9D0E36A6828AEF8A99AAF1C7080FFEF6E -3562710DFF03187271, 538DAE8E1B7E5D2B8BEC7837A074BE9CB3FA11348B578F52477759A08876307C, 2EDA4609AD156AF1F64018E688589BBD1E422D88CF32AB4FD0AE99F67DFF4349 -A0275329FD09495753, 36A9AAA6940A75E896B7355D574CAD41DAAB063DC7A8BA6130407EDA811E10CC, 9B8D08F03275D02E77319A25206AE37A78A177B1D339758CFD0E0C7760AA4899 -1E075F97DF71BDC05F9, 7892865521871FC49F8C0BDBFC3E3754CF83EB6FC0BE39B8F8849403EAFA198, 85A53564D19E6DDEE6B8BB839359552F0C352500A1C2ADD5087F612123902467 -5A161EC79E5539411EB, 3BAE34FF36CD0576F749A269EE86139B8A1745C2FD849DF1AB5F61C12A942ECB, A198073D36D65AADAB8A9D742C7A187B0E50C9CF35D3CE39C63F6EB3DB358004 -10E425C56DAFFABC35C1, 60E076AC2C3A65B5FE1D5695225CD93155C00DE5DF1DF95D0C4EF84DB81C161, 6E8F70E37EBE90E5A9A5CB9E4CAD84E846BB6FFBB07DB61B2E8A139D303B89 -32AC7150490FF034A143, 81A6AB91D7A9806978E90984BF6AB583C67B45B2A715739429EE007085910405, 59898619B7FC31F1D91F039B9355FA633F3799F8DF641DF94DC005326BEDDD40 -980553F0DB2FD09DE3C9, 8D21175EEBDE9772CD6A68E39BE915A6AA74366795BE75C35A8A3AD5859EFCEA, FDD357F0E898384F78D4455C427BCBAD880FE96E4BF044D533017EC0ADC5B6F -1C80FFBD2918F71D9AB5B, 34E6E2D65D425E1B694DA7282F922C5C631892E63A7116C69975BA2BB53E0BAA, 9864F3098483F9C389E95DFDE740F3948C86A38E4E42FD924D50FDFAC8FBBDA5 -5582FF377B4AE558D0211, 98411A15FADC60E4DBDB58C8AB378923E97C2EA3786A4317607B9F5D01485C24, A0743668ACCBA9EA03E9613B1703372C7C8264FEB6DDB75A0E57C23025B7E0F7 -10088FDA671E0B00A70633, 19B32E43D1B2CE54DE1727D7E11A72B5C6DECC60C87E6499CD350A51FA58A30, 4E10F85D75B1DF429BCEF284106EC4769B7CFDDD6B131F6793DAD50D5852163F -3019AF8F355A2101F51299, 9A004E78EFB4CBA602E3A3B7796F55056CD258584EE400F26FFF83B67C039110, 2E6998E13BF7F84A4D2D3DD7D483D0A005839A482868BD69454F88FBA8FCC749 -904D0EADA00E6305DF37CB, A3C569D591C3FD26182FC9EE21D22051989C9DCB4DE726841BA7EF81C684E07, 32F7CDA7CC0056C0491B2134211D662E5BF08B63D2DF15BDDD56D1B9BE99A64A -1B0E72C08E02B29119DA761, 9DBCE8D58EF511C80ED47407A3CF7BE88D75B25D4C1EA8C43D3E6E372A6C6CC5, 8405B6B6E2FD4C15FDBAA64D37C7F2FC9B69C5265AF832FD2BC39FF05C5D3CCF -512B5841AA0817B34D8F623, 1BE7923E83412F67D0238D9AA6728880DA4BC382D50ED9ADFF4905244A9104A3, 1B0B3469CF0FA205546EDB97C769B91D0179984599B58643F5D3E726EF3BED39 -F38208C4FE184719E8AE269, 10AA00B6AF193A672F0724DA1FA374F964ABCB6B02B5D4955372B0CCA3D214AD, 8DDFF02A383D404C6BD1E780F114E4E3F19DE25FAB779543ECC3107775FF8EC5 -2DA861A4EFA48D54DBA0A73B, 2D875CBABDF227872B28750AB7DEA07DC018E442107C7397028F1F4054E9F23, 499F2E2EAED5D8FA1142DC956132935FE07D574F77360B596F6C51A99D93831B -88F924EECEEDA7FE92E1F5B1, 203C187EB7CD8FC4548D163CA5A9959EC91830D591164DCC31294563CA45D017, 8B8B93665C62F63DA7BD7AD62DD0BE40F26FEAD090A2BFFB7C1F6C5766F0D32D -19AEB6ECC6CC8F7FBB8A5E113, A94134485955266017D2CF124AC76407C069E122F3077DB8A7EB556E5A49024C, A73B651B966E2973200BF110232C4171EAE8059F09A3602722275B39280581AD -4D0C24C65465AE7F329F1A339, C74EB82F2A847E2B97D19602E7CF5F2FE63881A81F55A00F43FE664F2532566, 549DDEA4BE2CC8C6BEF84799A9073A28638B0C5095EEA8DAAF0EF3392CCCB50F -E7246E52FD310B7D97DD4E9AB, 1E099935CC9B6917FD7D02337812213E23EDD4E8548E90943FE9B981A9870995, 751CFFA356086041045C0FF346B7C39FA195A3D7194FE60A5F6093EF29BC2697 -2B56D4AF8F7932278C797EBD01, 950D0A385221A4A4BCFD9A75C9478DF29797129BFC834A45274349D6360F6D42, 145B6C8C26D1B05917F27C76CB5D1686DBC3C48B24756D82E0CB75A6319DA78E -82047E0EAE6B9676A56C7C3703, 770BAE17AF6B97B8B0F37CEEEF0FDD0E9BC6C3C3A629553C4EB53C2A78E28E75, 9EBA902272409CE6FB5C3553E6633AC5BDD0EC1AAB23FE1459A5A0CF6FA042C9 -1860D7A2C0B42C363F04574A509, 744EB24B018BD7D554E049A8B71A1266BECA3F5A3613926B04A2995C8368CBC2, 53CFC18ED230DCF88CFACE90C5BD7D28966ED121E8EF2BEBCD96C64FD67BE5FC -492286E8421C84A2BD0D05DEF1B, 103AAA3CA8F594240107B8EDBF3826C81DBE7F6CD30B33042AC4BD28D5134A26, 905259B118B2FB33E21A3B380D2468D906DB2BD491B417A51F3B2AD5242935AF -DB6794B8C6558DE83727119CD51, 864246A340253C8A61F0761248457D461DF5D60612025A21F5C872BA2D13CA31, 7145C3DCA8DFEC57FF6FC5E1FB7ECDE2F0FA69A4FAB6CAC5509D0592B5BFCCED -29236BE2A5300A9B8A57534D67F3, 5B3F39978FE6D1F82B81FCC7C660C8FA38706F4C8165CD1EF9A87EDE42B37817, A4E827B062DAD88D381D733C71F5F932A413006FB3BB721293D7122ED84704E9 -7B6A43A7EF901FD29F05F9E837D9, 6E28CB2C64B20E4521E1EAE38574E8F2EE8D38740E16C656FFD79729E040007C, 4788CB0A7D038AB6E51D3D459C17CBED4204DB67E316B8AFA0DFE3E420F3E354 -1723ECAF7CEB05F77DD11EDB8A78B, 1BC1112C4756703F9046D5B45237A343BE25C0B0B84A33107B5A737140D4D97F, 336FB8D0266C8F6EB0D8CE9A7D820270E77FFE39294D7C913D0976B216F21C1B -456BC60E76C111E679735C929F6A1, 5E2A15F5F298DFC69AD7E0B1414D9C0831E5EDC9D2CDA93E36E8AA87F672B873, 14A935428F1F395FA12C967A6DDBFBF54635206A327B20129320C04339A6169D -D043522B644335B36C5A15B7DE3E3, 767234DA102C40320AD4F77417408FD2819916C7CA860FBD6A2B0D1B3B47370F, 99FB6F40412532FF87D0CBFD4932E2D93E61636E38977AA3F031A8A78424ECB7 -270C9F6822CC9A11A450E41279ABA9, 26EB55CB671EF2EB4CBA2E5D6A0E8421A41D5D9DF0A05CB78F160CEDD6F0DFFC, 3255DA6D114A3FBAF9F461930838CF36FC7E6A2E1F0FC01B7E7F503A663CB2A1 -7525DE386865CE34ECF2AC376D02FB, 81D6568C7BB31D32D458FEA07BCA34AB8ED2FB05E3E4B8D761A47B19E3EDE485, 6E5C83D95375F088F0FCC63D88E33F535C1A5F73E260F344BAA93F8C4DEF9F97 -15F719AA939316A9EC6D804A64708F1, 66B4D53FB31BBB5B55E45093A684ED3F28121FBB64FC2BCF32C30519477F4BA6, 6C88C0B905DB461FE0BC17F2734D6DB41EFCCF83F37AEBCE8A37E1B4B9FC318A -41E54CFFBAB943FDC54880DF2D51AD3, 3F8A3C5A1CB298C2244AC3C06A739C660D0F34849AE1500A62C836FEC91CB2D1, AE1D5F560EDDA454B09EDCB92158024CF5E4DF011E845792A12B13B5984B4F0 -C5AFE6FF302BCBF94FD9829D87F5079, 209452B63FFB18D479EB5B171F7833AC70EDC98EB234CC2671EABD6621643E8C, 8467725C3C762858C5B8717484E3D5D05C604D9E811D66E1987975CB8594536 -2510FB4FD908363EBEF8C87D897DF16B, 614F1B5D4798F1FC229998E37EB67EA2355C769543DA163461893E653712D63B, 3173437C8757751892517D1E837DA5A7B02F9C70654A5739440A547DDCBD794F -6F32F1EF8B18A2BC3CEA59789C79D441, 5AE1E0082207598F5D0C79111E708DD7AD125EE8482825A70B53DB7538D6F9AF, 48118BC1456A742F425444F36D0C20F6B7759763A75FB0F9FA197D7780D21B8F -14D98D5CEA149E834B6BF0C69D56D7CC3, 4717057AF14B7BBB1DBEAB31CBF22F78E15E3E501EF98F5ED089B72D71DCB98B, 97B79ACE69F16212FEFDE387C65EE6F758AF454A138839007E282205C9DBF5AA -3E8CA816BE3DDB89E243D253D80487649, 48922922989970D2985C17991DBA5744A31C7475FBD9C3D4D94EBE7C065400F8, 8B4D0272A247B52A198EA7E2A48391D1EBD3554FB93DB182B7B3F862E87D45B6 -BBA5F8443AB9929DA6CB76FB880D962DB, 114258E6745F216E72A80974B76E36A9FC1A99F21AF12A061D04BA0CF8CD73E1, 33FD0EC69FC2B9E55CA4DB84BE3A9163A0DC20E7D91B925E62BF57FD63A5EE58 -232F1E8CCB02CB7D8F46264F29828C2891, 8280EF466119DF141C7F58F9B1839ED92D9D2A054360EA8920CE2D61F2E1AEBC, 792783D56FC9AB42DCD65A363F48B2095A5215CF78EED4678382D928595D27D2 -698D5BA661086278ADD272ED7C87A479B3, 379C4B0C9B1BFFC94062AF0976A360BD1F95550AB3F61B2639E0E9F997A03247, 6292F4E8D3C40D3370FFB8B79215E7BF74054227E9D6F4B23FA1D4DDBA8732FE -13CA812F32319276A097758C87596ED6D19, 26DF787480BDB3CFAF597818104667E97BFD4888D2FE75B4E9B868D1EDD98144, 73809AD3E30DD692E7C2B80D54CB7BD8CF05F5E2D24D7D0D13290FF3BD383499 -3B5F838D9694B763E1C660A5960C4C8474B, 5CA528DD918E140CFDC3BC87A51F505862407452BEBB8C87CFAD1D6D5F92858B, 5FAAD192D81C0829FFCC96327F5A3D2A727CE0D8AA1142C2BC6642239BD7D5A7 -B21E8AA8C3BE262BA55321F0C224E58D5E1, 4BDCE2A75756A8B7EFF8ECD6A924D73F11C4D92A33EB855255FD88A36D9F9CB2, 5F55A4D8EA62E933C0EFCE572BD0045806D494D9A537D2E7F9A9C9F42E92043A -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 5F387752BCC36C3DB52AAEBF9652FB8393356DAF15445AAC4B5E83F1B5A1FA2C, 3933FBB887A72A05DB23B736D1C90D5DA5D6B51F2884A806DB1B5074974167E2 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 362E35BEAAC4F4BC6B5A45DD1A120B2EE869E8441FD9F2BF830AE1AD3793667A, 8C0FAB2CA6379B17F001E32D0726D9CE55702D6638C4FB69D7D38B9AD1B41B28 -12C9389FCCA50E069A6FC4946479E435E8EBB, A9EC295F8C422A16B6B6BE0A6705A46106BF8C3041F6DF8FA73B1BCCB321F866, C49E44FE3146F065D53ABF1DA27FB26AAA3AE3192FFEE503BA6BBDB05292C4C -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 367E2AAD65B771C4A70419896960D104C5DBCE8FBD36A3A92783CBCD66B1DFD2, 92F4E4787E274F734802F6E3BE572AB1CFE5AC7DF897FEAAA6EA1884DF264263 -A912FD9E31CD7E3B6DEDE937884905E530493, 9AAE2FE1174A77C0A10621B8433E6869B6224881498CAADABCB622FF298B62B5, 602D920A9FD58B42284F5C4E1AF41C575D7456B981E3962844DBFF5F56A59BE4 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, F66BB3F9B9E6481D4C84C725BC4E6E2B6D965C91679205CE3CDF64EF4F32CEA, 3EED01D326D280B094D1F56109CD55B917A09F972B8FC32EE416DD92175D0A6E -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 7E536B69A239E36E29AC6B68ECC9B934EED729F5717BE86B74F7A7AE11AD432, 9068D5C9ECC55AABC05742AB8789ACD37FC3DF5CC93EC1D0EDC28EA1CB334BCA -11D500BFAF40AC5044981798DB5FB39F2C17B81, 1C36A93A80F1B0FF6CD1E4870C530F15CECA70611192149BC635270748C3F578, 2641CB2E955B281549562C5C0632CA13F7A7F36C3101CB018134F70AF73E453 -357F023F0DC204F0CDC846CA921F1ADD8447283, 502AEDFFA46A21FB92CA4921343AA43F4C1B8ADEAC20B7F3F56DAE17D9850E7E, 6D3AE4C11781761ED0C59DCD5220FE18C8286BEF3770A68B34173780F6901D81 -A07D06BD29460ED26958D45FB65D50988CD5789, 4B532EF179C0E093146D52466E991C919EE01683271CBD6BEB6E9A1DDC8EA0EF, 93D92EBE3A60D36F182394C035A005B08867DD703EC01DE5BC02DFC1AABBA19 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 969B53C18D3017BE44E933530CD33E253F56EECC6EB581CC7878EACA10F5B54C, 22594933DA2BD0261267567AFC751416E95D6B3EF2AC91955F3583A4B7B9ED95 -5A4653CA673768565B41F775D6947D55CF3813D1, A505D3892BF72407E24D7875CC61563182911A60676AA626E8BD8E06507402EB, CD96A467C3C60351479B80A82C25F5E3AE20CE6C80E3B58AD1C023865B17314 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 6621C59D72A18C6D19DA52D7563913CCE5A97AFD99C2A6BFD4080B1813374F8A, 596782020374CA581C42A6DB289F3342CCA018865B95C38ED36CCAC5CCF407B3 -32C78F21DA0F2AB093551B3248B38680448F8B259, 88D829118A00A5ABB58CD34BCF6A27AAD83A123F1A6924D049FCC735453D8617, 3B11098F0DBA3940923815A1AC44581B4F0C41A2EB3AD6BC9477F0F31F6258A2 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, A9537D481702463854445C5CC8E71BA0B159526AACFBA6E44FE1E01A66EBB792, 8CA66BDC656192D8B9D71D03C1B3C02A458E7FACB231D384D4B9DB661055FD31 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 34D06E4BB77628A597422E646AAA472E8F4D966A2463E02D9C948B87CD9BDF41, 46A93FDB6A68321B98FDC02E9C21C612D5381170741F4FC1733498FE1F7E4A75 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, 7839B884B136474A15BB44C34095D96B3447A9CD549D09A13D5D07FE28E664F9, 685603B6568F02D4BD91644F99360F548BDD41ADBBF46E4FCA6085E1C6EE1C66 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 36E4605EE4DC17BE81E833320F40C31C0C9AD6902C967F4D3BFEEA4B8533090C, 9844B89F8680960C5800E1BD2569316E32A93132A940CAFDE6EA3B9223D2D128 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 8405A7B7DC395E052C650C7DB94D5D71B4D16B0F47DEB37E2066479CED8C3753, 33D059067A4FB92152EAFD94C875D971F077DDCC2EC5B70B3FBE185905808CE8 -909A469765F53090D38D5A7231073A03433CC33DF71, 7FCBDF7EB17D0C35CF077835EBAD2ADEA7D7E293A0855634C49420C1CB006C88, 4FFE5B8EAFD0AA057D7E3C53332F9FC985508D1F7D57264AE73807C8EF6BAF7B -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 3AFA5AA58BB479832830648596421153F8450C27EDFFA0B0355C4AFFF354D20A, 6CB7CFB1C06F487960AF3244C3D8FF75BBB740547E44FB5FBA8225FB6801FA33 -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 25F7584F372D66D7039D59A6246CA246DCE20EB3B7CCA1DD0F49D0C73A030917, 5934FB024AE816596419902EC0C9582E105C3DFDBDDD8D009CF7AAB4FEEDDDC6 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 978D08AF48099965D83AA5980B4F2C1B1CBC71712033485FE7443E89669CF28E, 8F53B6171E3C9F1BE1FA0E5C9472B5E400ACF8C79E5A0C4AA37F9B6AF87EC9EF -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 3BDA102CDB344890DE62320B690D30B5CB4479BAF6388D0B743D6D538563176E, 88CDBD16ECD8D5BB5C948B1628A97B4BA6550E50E135AF5A5AF85762D499E959 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 3ED24BD9F4500EECB15F3C48A8D63DFE2E6DB08D7B95EA0EA9D2C50FA6D220D, 7BCD2A92991841CEAD5A6B449E4F7001DF78E2174EB9F72F08FCA199ADDED8FC -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 5E249C74F7CD7BEDF8F7325509C90344920F401F88C3630EF427B7CB678779C4, 3C78D09D08C46162AE27B38DBCB93F6F8F0961EAA7A56BE152E4AAE1C3BA6D29 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 5FE1C85B63E0436E9278F3D811447F8243066C07E98290A31A34F96E55271020, 48F8FA9512D7D305623F4152BAF04E228DA23423F01391EB7F9BD81F3FE243F0 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 18E9AC7C75DA764EA9302B4890E33339594373183C9EAD7A9928AB30918A18A7, 5E4EC043C0A9E3E968095C51D519A2BD669438A4945422CA38A5C445C4588D35 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 683D4FCD6DCEED18CE55D047B4BCCF256D9C24E9D7E8FD9BCFDBE564FC898C78, 87664287BAD24BED75202EB363C583DA37CF86327D8B9C3DCDD9DC5FFB1EA0CB -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 939650DE33F68E6EFAA6EDD2B67622A51E92AE8F1A36944548735E29D60087E9, 3A2AABB4D15D248CB4E86586FCCAEE1376054275EE06323512EE7862C073640A -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 14F57A3782DE421ABCC56C68005CB31E59AE55D32A8FDB2C5ECF5084F45ADB58, 4C39B91F83C6711F02D24DE42D7AF0CE58CD8FB8AD78C3A06CFEBC9A909F4EDE -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, BC66B72B8B55C52B1DECB6F76625F47972638F377C09F9E5285916AE01FF23, A23D2BBD78F7EEA303886721E848F7F75E7F9F5A0D462CD59BE146FA28F424EA -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 8D0F48612CA8F5D7BD9FA7171616CB545E726AE8C6F53265985D871D76098848, 9586A78E932D1F0452CEBC60D31BA9DAF4B94AC9C8F94814897AAD5D888C6BB1 -29396F76B67B7C403D73A1059B80139336878E44938606769, B4F90630C1D0C131E5424DE09086E294A477A8F3C6BD23919FA4098ED002A06, 3D22618397059BC43B7364D99732DE87B2F8030C3DA2714289146BA534F099EC -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, 76E31EAD9896050E62FC607E8BBB23C1E7A8C7CA47726B3F5D94FCC86888EE97, 3ADF7D5BEA67CE56441D867F0063278B581EABE14B6E82F27F6278C9A2DB4847 -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 9ABDEE87DDD03D8F6E9F57FF38AE47687A6F9185964BD325D214ACD52D7A379C, 3B05CEDF7A2E08B7FC195A38359C0729B9BB1B2B6D3DE73DA0BEDEC97DA5605D -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 4C9AFD1CAB7C6E118394F4BF6012B5A11FB4B424B5010EC51E199EB39ECAD270, 8F93B45FE8C119BD0B7EB17C4E95CFA3AE9998AC343A069D3707C8A6E2CA2F1 -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, 4CCBAAF5B809FE85060E3FA1496E4BA733DBBA3B73FCF93FF605CC0FD8018D61, 9E033AC6518FE3AD2B83FCA081CD583D91F76FF468C980658EF7358C38CBFF10 -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 4A9F36E45C85FB8C1B713821EFE506D5BFFB5E0FD3CF0E67EF4F08EFEBFC19BD, 934F0FC98C375F28317ADD200EC73AAC8E39687F9698278CACB1F3CCDDA8BF8F -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 9CB57EFBF7B73DF49171608DBCBA3A52000F3B3097354096F2E12F84494F0EAE, E859E2F93D90CC978F2805C438322092F032B2AEB5E62FCA697A6D9E9CCF069 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 1CF4E7DDA5B38467932296295295EFA80AA905364761B211EFF6ECD7EB8E010, 30708910CB9DF0063C498BFA527201CB5F64139E5D674A7804400E329979E057 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, A26E3227CBFE6B4C6852966FF7AC60B14F2034859CC5DFFF97E14D0E9EFBA276, 73EAB7126CCF4737EFBB91BB77F43E1AF91E4035BA0814318ABFA22F9C58FC36 -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 8C6AAF02809EBC9DC0801D13B2C681ABB59EA532A7E25750DD7830189CE84EF1, 6E448E27EC19558C5DB1D0D15874559C547C37CA3EEA2951B8E100A575F09F7D -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, 2D7E867B7DCC9DA7CDAB2296640A10C7EF7653E16E8AD7D2BA363A0294006F83, 7DCBC751987A8455BE41322D11ACE3A5159B90445C8134B66A1BC5F8F6E587A6 -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 3BDCD3D7E75D0305D4AFD65302CCA380EB5391081D847CEDD8E1A25DF3C824FA, 321A140191A19C4605CF06E31EEB820397513A6CDBC13D99E8DCE57B844CA9D7 -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 41AC5BCE0D9E07890D3D2A1A704A35DDDDBAF987788B6898D23569A4E82AD2D9, 247735C3B091D220FB411C011F0D365A92FE51C516A86515DC8DA10CA8027EF5 -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 5A2850B4BBAC39059212BF16090C3CFAF522725D4304ACA6189B908259E4B5F9, 3C60EAFDA228C6F4C0DAA7950CA299A428E531FD09D3444FDDEF1E12196B97AC -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 99F02B8D0383A7606A1B21C928E812194DCCBEC4D6A147C51657508E7F6C77C, 95BB99BF52C3E1C258623E6A8C098BA61784168AA8F3A5CD0DC4DA849091B066 -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 80233E8FD0C5357E2F213C14CD203009E0B6A67ACF9F47024480D316C9F1229D, 116B82E1C1EF6DA61896A0F496FA79FB2A235300D153F4B8DD6114B6312F1844 -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 382615B9281D5CAF292433985EF8F061B2A558DD90C161D89DBE7BD64A1BB4B0, 73C50D8F9D486E10DC955B7ADD28617AF216763CC862429B00F1565201D79BF -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, A630DB7A35F154FDA10E12BA8BF4FE03571F2A8EC40CBFAC437B30E20039502C, 924BD141B9EA1754373E26695D19409A3F22EB094939C3B14681FBF0475EAE27 -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, 7DBBB38D2481C4851CC889001CDE7B780BA771A5330E50A080B1A048AE9E0548, 735CA8F7F19641022491585D32662A2505108AF4D72E387B2414AE084AFF76E3 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 3DCCAC073EE6D1C442B030B31B95F870BBFD66A768648571AEC5C887EC6BCB63, 8095D7FA74F7EDADCB696D62B80BD28B48D55527439CBD8285C4A4BE7733C134 -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, 45C9381DAE78D752FB83C47E6723E3FB58B9FF4C46C0541BF6EBBD53C4585F65, 7DAA58E645A2AC3C6404516F9D297D570F39CE37D4255B52EE5EAC32B990B936 -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, 3FCB0203B867D516CC6EA5E3D85C91E0C6CAAB5F3AEAA0919AB35A6DF60E3180, 9E88BAA614C187822DBADCB58B4EDBC5298B1A74917652BFF90B7A85FDAE4470 -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, 317AFDE7AA4D1219B754E5C36857DD47D1858518C51D17BFF90B1C763D76FF07, 157E151DB4A1ACF543603394EA1821DA3861A30C4D9242D2EA06F9385EF708CB -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, 5FC478DA203FD8D60716B51B5FBFAEFE208B8AD3C8BB323835A8A624BD9F6FF6, 6E4FE357B0CE1C603E3F1F651BCF028A74397BE825B27C98EF0BD1A6CB2F9E3C -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, 93FCD4F1372E6760A5F48D601187AB2770BCE8877F008D71596B2085D1116DF2, 1626BA09BDD3D81B60038590A0163B48456F19B8666BC4CD2939366245A2F962 -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, 3916F41E256E90E200CAFF950D68DA938ABAFDCC48AEAEAEA7D9D59D7319572F, 7E791AB59D799F805A76DA4FC0F1C5DA23EC11F1FA2B690602610A4DC61EC147 -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, 233578CB50EF8DCB7279C982C52158359EAFE1279BE8C9EC4F920F91B1811F39, 89AA3E8BE685E5014D61A1DBC4A6520567F98D59BC5ACF5C384174626C0E8839 -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, 95DB358B19E6DA2641CE2F3557D1CAE311F2A75EC4E51C5B8FFF4B9FDD575E60, 795A1DDF64CA5BB26B31E1B14BBB9F6EC0168B0E842866CC8F42CDBAFDA8CF27 -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, 8E86A6111956C085E79DE4E1168EB48045D5C07A8645A07413610AAC6E8301B, 29041A5F8052552A06C4DD090BC23B3AC0C035C836CDDE65F34F24693C4DE705 -A0D2E82CA5E358392DE9951D10B533E405FF396E226444B3B8F22B54A64B, 8F5A778652ADD7F92391C9F93EE0F48E35E7A966B8C0588F12E28DC75A634C30, A4515348FF4A7B9A6616B064FF8332AEFC714207DD5C8C8D1E4672757EA7D454 -1E278B885F1AA08AB89BCBF57321F9BAC11FDAC4A672CCE1B2AD681FDF2E1, 7E340FC2D33F6ED65B46CC2F9AAEE4BA4873298C9956447F485F892DC866B83E, 2D3083487FA1E86EC5AA56F72FB808AD251CD13D675BD4D1DF11E74332B595EA -5A76A2991D4FE1A029D363E05965ED30435F904DF35866A51808385F9D8A3, 982CAC4C90359DDEA0B519C0164515944677FD080A54EDFE64437EE98FACDD03, 778DBCF256793CE505F1DC59A0E7CBE9A8CA54EBC56C9D28F19416E5F0FF474F -10F63E7CB57EFA4E07D7A2BA10C31C790CA1EB0E9DA0933EF4818A91ED89E9, 693389D796D1FFC582FCE85EAD92EC117059D38D410913244B8BC2D1D67A7846, 1EDD87519568FFACA28F20813F60181245D0D76CEF8A262531BEF8F33ED0755B -32E2BB76207CEEEA1786E82E3249556B25E5C12BD8E1B9BCDD849FB5C89DBB, 3D9BFD9E677CF5B334FC4C44A2997CBD80766EF757EB5FBEC18088FD813DD1B2, 9BDD78A4BF66AA2E728709637970E54AD7890281EF5A07DAF5FDBD833B774D51 -98A832626176CCBE4694B88A96DC004171B143838AA52D36988DDF2159D931, 9387CAC3F93C25E306A778C45A0B29EDFF0D2CE4246824F40A58E99D60AD53C6, 30471F9A9D6A4CCF3691CEB4D02A525B3B69A815303FA23440543454624309DA -1C9F897272464663AD3BE299FC49400C45513CA8A9FEF87A3C9A99D640D8B93, 334FCD2C14BDFAF74FDB910A9C0B2EBE22E5D3FCAC65AA63D38BE96CE402ACD0, 3380604490BF203A203AA6EBD6432D3C31B0F021A5443C032E4B25934F214937 -55DE9C5756D2D32B07B3A7CDF4DBC024CFF3B5F9FDFCE96EB5CFCD82C28A2B9, A7AEE34B2365F2FCAD4DDDED371FA1773E99037C60B39CEDD5EEEB4502A06C8B, 7A829AFF4962476B48FFE0B56542623F6839C410F93844BE7D569D5C1A9383DA -1019BD50604787981171AF769DE93406E6FDB21EDF9F6BC4C216F6888479E82B, 4A27B58F0868669A49E8095F267F6F461188EE513BCA2EE0CEBD058704BCC89D, A6476BE4BE61461359BDDDD53C9A76870B630AC350809E2076306FBF4ED9ED94 -304D37F120D696C834550E63D9BB9C14B4F9165C9EDE434E4644E3998D6DB881, 27B8B57175C0558A34B200320F5331AE24AA88559A1E82E6F42D366B2FFDCC77, 86D598C7B62AF993389E62EF04440FF47EC5202D2AD1BD61FFA8BBCC0818280E -90E7A7D36283C4589CFF2B2B8D32D43E1EEB4315DC9AC9EAD2CEAACCA8492983, 89222264D0C0F063BF870D6360C58544CDBC5948BCFBA4B885AD458AD9E493DD, 32F11F840D0B22E4BE8F738EF8B92A9135A2BAC87A3C37CE0B06B9E09CB9EDEA -1.3.36.3.3.2.8.1.1.10 -1, 925BE9FB01AFC6FB4D3E7D4990010F813408AB106C4F09CB7EE07868CC136FFF3357F624A21BED52, 63BA3A7A27483EBF6671DBEF7ABB30EBEE084E58A0B077AD42A5A0989D1EE71B1B9BC0455FB0D2C3 -3, 847758C1C7338EFAB1B79A22B4446F56C87FAB0070B7858E8ABDBBD94D454E0C340EBB42DCF91633, 3D944522B6C1B7D42038E281D4D77AC75C2E0A37E33381C3F0D845CF32D54C39406EE208F7F322C1 -9, 304E90F8F040B6A88964E6FB3A43D9CD068747B0094EE97432CC5B4F84F12F5D163672D7A74EA352, 131E4519C80F2724499A2B1538FBD771933B4797AF6B0E65A1579A746C92AC2FCDA30FE607238AED -1B, 20D45FED0D0B8D7E32BB46FA9BC9DBB11836EA6F9561F383E84212A8F41D1B61184B0D74C58DBED4, ADACCF88D248DEF50139087A34B780FE8FCD5F9B2BEB108E82D129130870E239575FFD7920F0E9C4 -51, A19136F05C5DCC75C64640803EAC4286ADB5E2718FC5A45E8226BAC47917C356FCC685A39145B263, 99CDF68F68FFA37BAA0D8E0A0BA298DE7F8B170C85C2CD37E44395FA6DBC4ED6A7C7728F37F1684A -F3, 6DD0D32960E8BB972475442BBAE993046774D99CC5D9B20621D5DF1259D8D710676778296A2409DC, 166A6FFD2A374901383AC6BFC2EC44424E880524693C47DAF5D1C0C39CF7D5EE64646632CE0AE643 -2D9, 884F7510BBDF10BF28E4C05301F8252967D0A65944AD0B2B8862448790023F1AFFF2236D5C53C589, 62FAC5D045EA9CE8AC154571C85FC27912E7A812CA909A3F5E49D3FC4F43EFCFB1E7BE6AE10AF2D5 -88B, 5E570B7C875472DD89B6458A203DE85E1E75B658D1AFD7C1115B8518C090D1CD9C883726AD334C42, 477858A9F58B6D56F8DDB77E4E5C2CAE910E7B6ADB0FB33F0CF3395A2749F82678AF17A27D99B4EF -19A1, 6E066191B212972A8AF238F1B06BA62E50C8996992E520A9DF8333CD1C07E4FCEF053597EE0FEEA, 5D721FFFE9F57F1F59BB45903A4B96BC55477F7EB19F349C27ABE0A2312BB811D282A118D3CB8FD3 -4CE3, 9E8CF19119F709BD1775E88FCD68BB8B0B2D76B3A82807A337F47941201FFAF9D41A46DE75BF95EF, 89AC7D585111E3AE3E41FCBBE431389FC72D1FE807A248075FFCC91CD3C702F81F3C180B212C0336 -E6A9, B334D049E1C530F6244BB5B6AEF74F64112DA9860DC64903B8F63BE8298EB8C53AE2311C400090F5, 84A7B032BA9696DE55F4C11B9879237423937F1129D218972A462B5D490934776E9C727ABA4746C9 -2B3FB, 2EE641C8F82968BAF6BABF7C438C0419CAE8E16CD3F85C348579A502772E0CBEC64CCB2936E449F7, 96AE4ABDEC9CCDFBF1CCB9C710A9D190350942902485F261BE7370783B5B6230397E91B6B859EE44 -81BF1, 3E9F4C2A93AF3C1458B9D1C8B29EE8EDC844E2FD9AC81EB3DFD0EC62F36E6779480B5B0005AAE852, 1AE1524F0C1FD32D2B57CC18D599D2950AA5C8F589B0E0736ECE264FF4A62F57D4F8D730378CFDE8 -1853D3, 9BFAE3231C31385643E0218987E54CBE67EE1ED5AA8F933456BF94D4B863C186A69D243FA590B0AF, 9537BFAC7503393BC26878A972ECE03320E5E5922F5342E00AB7B7C787C6F2CBCBD04CCCFC19AFAF -48FB79, E60F1B4191C267BC38C18683903F972EFD0D563089F90188EF6363DB9A1C8ECB03F2A28B625735B, AE670BE3FDD867DAF82F84A9C7D38788341F4E0839C92BE587A35EE747201773108310D0205864F9 -DAF26B, C7E0181540DA0A8FC718C509A18A86EA5BB0F2F174F523501D72D05974359F6890165117A9A42527, 92AFEF2093C06292B9FE8DEEEA164730316538EAD321FCE92E3B0550ECCC3F8202B199EFB5C97F27 -290D741, 39E1023439F670C85ADA73657B099560E620AB9105DE09E03576D4C7E418B8635B9968FF52E70E57, 2E3ACCDF00F8EA51788711E1B3B7663308893E9EE3E4C53413EF038A5428BAA62D82AF488A818324 -7B285C3, CE16C80057D780672BFF4B843074715E346018AAF18239FA70384479B55C562705714C7FCC8CACA0, A8F936BC3D0ACB8FD97455E4B8E268477C19599FA5D12A456A2DFDD523387520A6721FB6A9067090 -17179149, 8FCEABFF6C9C12C837D01FE494B26304CB963A2A84724DE4171F1175537EAA40BEE3C9B7EF8D59CD, 3B35BF5CB95FB367537C1CB23BBE020B3ED7127AD7EC33469199073DBDEFFE2964E1AA8F7313CF0D -4546B3DB, B5E7C546313823BB780532A103E61E277EFE3AFFFD642CE30107BA972EE3051CE2580BCC9AC90654, 73636AA3546C171AAD7739F4C783E9D262FA1B07AF593EE6A3DB00C943436EFEA230982A58CA302B -CFD41B91, B7192EA014BFB94797868BF2B193BDA97DF98200222E32DD82F3592991F69D78F61460FF19A303CE, 33A4DE5D53DCF6EC711C8E28B5C0183FB1024B420BB78033774884BC8E38D91BFC340A170E90D236 -26F7C52B3, 98021AC2E968649DEFC8EAA33B373BD0F28FE2AFBE47BFD7B903CF9132D93D8C9A2E8607CBD98924, 535F47CCEDE851C3FDFFCA6C542C15D9A828ECBD3A1DEAA4E3F08532A0CCA3534943D035AB616188 -74E74F819, 2B02DDB9AC1CD709928245DDB75F2B1986E6C83305411D10C0EF993CD0A00EDC460A995707CCFEBD, 2B0F99487C42DCE7F11B1D8D574B6C5F9A5579899BEE3604F8110837EB621F3B2F16056132DB43DA -15EB5EE84B, C3069567B1DDCDB886A9F3DBB05521A36049A3C7D7B40A0FC04E1523CEA8DE7B81A4642D7152ADD0, B978A7932113A98440C2CEF6A9A2CD93C93E520ABFD1E1A0A9DDE17454A4DBBC770590BE82D51C83 -41C21CB8E1, 697CB6B319AA4B4C26D3D4FDC6015EF01B53680785F49C930CACC5C2E6F65F13BB2286A95A72A17A, C1DB12DCD7847552E6AC99FC2D5CC437DA1CCA787DA1251D74AEAB5241E5C6D4E00DE2D41A740414 -C546562AA3, 6C16C4AC65B6BAE35594667CC764D3C194C2D7D941666D2A561D740993F0A17E59F5858C6B5974B, BD4497A2ABBEA92FA333BC9E6DDB19CD9BA5CE96D59014DABDAB994157A2A1E0DCDA6590C98AD612 -24FD3027FE9, 748319352ECA1E21E1ACE90BA49E00919EF71870CB505BBC05966DD3E9C1721DF755A43F7C6A3FEE, C217E1B99CA5E7AB70261AEA2DEF147DD6C2B737C4CDBE75CEB0E2B38EB9D4885E214270007C0CE1 -6EF79077FBB, 8881402C0961B557933E572AED917B5B38A7C04DAFD955F15B112A02EE7E70FE237D9A6C8A77E7AE, 2D2D70CA58858CB741B23AF553504B44513DB5902380629D1EF05E1A8E49D0383885CAB4FA395E90 -14CE6B167F31, B1611821B31766484BB3EFA67E28B55A431DABA9C804FC3C5FF07DFC55BACB599304F5A1F831ADAC, 4462BFF036BF547F8663A58404A37E57CE30E34341D9E8C249E892064D5122111F6A0C2F54299BC2 -3E6B41437D93, 5BFF420F4CF54C65EB17B6ABAD838080561C00CB17E44228E9FAB6977AFCEEB73E0F2289199FE830, 54DBAED8CB2526465119BCFA2918A5AE5BB736DD902B4DE57CB02AF3FE2917900D03A74DB41BB562 -BB41C3CA78B9, 9560B16F89817B642938D526A237D9298DF2DF5F2CCDFF36B114E49099E5AFEE60E64AAB73B1E359, 7F0B98D1B5F169929AF3826D5839A6A0CEB35FE93637B3919E190EB83363B7A2B4B865B239E0B99E -231C54B5F6A2B, 3867D3DA2E84F97569FEF72839315A50AD959611F39A5FC106336262C8335CDB4BBA96E2CF032F3F, 582A6DB1F76623B666423610F15C1FD0F1D307E4D87E8E5E1896655F17C302C38D6D79EA0C844C05 -6954FE21E3E81, A952A497CBB05DE7EF4831B72C7AE3DF1A8737C0193D37D6D1DE5B8DAE4CDC21C1C402B04A04B1C6, 5A5AC1268A6F5F4489616D03658EDD9379DAF2CBA9187ECAD251B53AA4CE9BEBEA5FE73F429AF633 -13BFEFA65ABB83, BA211FF77AE904088517F5FE5DAAD661D788E28D922BD26811D6250782347182CA3A4147E34ADAC8, 44A86476343AF39F53EA511D919C9731EB15D52CB2F7AF454F21E068F1413F4CB83F01755B75E010 -3B3FCEF3103289, 86136F71ADD28967B6BBB670242209D8D1E6B2D63B03D24A23E5CF9FD348E567FBB02580A316AC33, 856405493B696C318EE5844E0C74C3AF20A6CFAEA1B68687009496CB7F122C175B1A785A1692C2F1 -B1BF6CD930979B, A395DAA2267DC4A514646D667B0DD43EF0ACC47BBA25DE60E299E5CD321DA3FACFDC5EB0D27A2B6E, C1D4E8DE7A7CE92C86F12780FC9DD131314FCDF5359FB907BC5409074C3D47211C2FC70FC99A238D -2153E468B91C6D1, 5CD8F4943A015E5DE90D45C3D9DFA0FDE82957B065E335828AFB307AFF5A1FCB4E0A7A0E888E5D28, 52A6BDA239A15A1D704FBDC29D32D4A68E316DCAF846AF7266926635F6EBA1383245F7DE64AFE606 -63FBAD3A2B55473, 28ED7D91FBB43AF82F40523C32134252B3056163A2CC606404415B91D2A00D14C8CA6E38C4F46407, 8FB68F4D7F9AF4BE9D76C53671D88927F99C6A9B3F41B013CD27F1E21598F7DD5462B4E4A723468F -12BF307AE81FFD59, 60ED3EBAD6351D9C65F375D503110FEDEB4B1F15BC43AD96815D4064F18B369B81FE199EBA91EE1B, 56EB8E371229B6620B4557FD11DDAC1E184C5EC036513B151E1B6A91537121E4FB26A2554CFED667 -383D9170B85FF80B, 22B147635140E66D9E476C68B3C4998DE5EAC1AAFBFABB7A80E14D816CF57B8C598EC4018B1665ED, 6139F0C3DB37A1417551AB5359B7417B9B953E759C3951388E1FAAB4E431DA88004861BD38CDEBFC -A8B8B452291FE821, 627ACAB69C5D9838BBA405A37986B549C9C7B54FD72E610C277505F0E8E9F81D2D4A1E270B727F2C, C7BFF60677080569BBB36D03876C1B16E7047FBF96C8658D12EE1AE756FE7AE91E6096272CEC3A22 -1FA2A1CF67B5FB863, A3A7D65ACAF9EE52445497E667D5AF6527CC200F6513F4EFA36929C9990C854A8B0850CA96C182CE, 2272CB2868AFA52E363E47AEBE1D49CD2424CB9180A601DC84B8B8B6EA93533C5FEA45F23A59F69E -5EE7E56E3721F2929, A57E8C313074C82DF8188BA9C049D47C3A9F0CA67156FF60939A4BB187EDDA58436B579F6215B915, 9558EE1EAD7596204A0A15C93CEB9A462E3916E44DEDE69208CD5CECA235ED7A04012F8825F9DDD2 -11CB7B04AA565D7B7B, 869EE09ACAE1795C50633440BDD1F71BECA65BCAB5766B2B57F0DC294CF665EA1ABE5296B8C91BB3, B331F1A31F56CEB5D31525ECB84B8080BD62E35B6445B4CA90E7DAF2E246430B4A4A3E4B2FA2622 -3562710DFF03187271, AF34F0BF9DA8403B979D11BDD866C5DB5C4DF6E562044A0849C4C671542EB526548A46AEDEDBBBB0, A8BB3CC301A6607ACFADE1DB411CE1528ECC282E077EF0A00BC07C8A5182ADB06DC2EBDDADBE8454 -A0275329FD09495753, 957E9CCC2E77304AD2F60FDCF9DD0BB1BF9F03B419E88A7A5DD729714D54EBDD29A5A015D83DEA2C, 54030D9B420CDFCDCF6F0B608DDC27DAC73D9235DDBE1877CFF4AD3A39F712C46C38EE039DB89FE7 -1E075F97DF71BDC05F9, 647C671A9DA8B0EFEA61CB0C2A4AB1CCA5FB71227C7EDA7ED28BFEB9EAE4453A30377B2BDA4734B7, 3C83C9E145DF87B1075D14397BDA12279813A7F92AD266B86955A50DB9C442C2FD9FE1341DED2E88 -5A161EC79E5539411EB, A41E0E92739AC60674A7CC4DFBE942B80E3B7073264D9468D6D44751862993C0E0FD372D41511AE5, 777CF89EE110413A47570141E092FA259A01B831C152E3B2B31D867B273195EEB20BAA9EA7F6D005 -10E425C56DAFFABC35C1, 73C4A523D66EE24A9CE6682C72213D4E56525DC6806D7D75E1F1515B70C7D0BEF61F60B4F58F054B, B1BAB53BA8599D711D0A626D5F3B3968CC1BB7ABE2A5F5D13CF175518FC89C7E6D2E0DC33D238EBE -32AC7150490FF034A143, 1503B1A38C9EA79FF9D8D89C7373E12764D12313DAC4519763B64237885038CC0FECFD21D5BAF429, 9897E92517C646D78BFE435666C8C5E96BE4CF0FA0FF4C9A33DE799962FC28CCD00CBD628EF9C950 -980553F0DB2FD09DE3C9, 2EC2982842758375383FCE9D9922CD5479A152DA8636310FBE1BCE7D539B36CAB9534C532961D0E8, 6E99E9D520B8C8F197D8FF68954DDD933EB622A113ACCFE34013DC97C22DAF2291FF039303AAF8F2 -1C80FFBD2918F71D9AB5B, 83EE0864E0837D6C770DBE26A402A8E67451B8F9E7D6257E988144A111EA05AB335C0F6A2454896C, C87BD93EACA856EB20F3B199FD87BDBAEB4BA6E99F56EE6F0389A2F32F10AC73733EA9327D1EA1D6 -5582FF377B4AE558D0211, 67B4F7DBE4B68D4FC310E1B502BC6B2C73B828A2211817AD45874DE210F93318F5DB5FA5AD307974, D159CFDE6558D5EB0125A02A17A6D9EC097A69A28DEA60D60E25936BBFC6AE313FB19FF9F30DE0D3 -10088FDA671E0B00A70633, 18F1B572AB7EA386628E7F558F4843F8DC1A89ED4F542733EC5828D0C98B5D9E2656A780D9B11AC8, 2CAAE2300D99462FE8B816370D4F1094B9F0FFDEA788E83E35C44B355BD08831AABF0F2EB5604C03 -3019AF8F355A2101F51299, 7FFA1B7B3DA5E74F571F27064BAFBADA6BA13546458A3D67CA3B732C54A970F22BEC7CAC60E9693C, 74FA9535C58C171E815970896E47FFF78568223B8C5D075E9F6992BA2A4924E943AA737D108F66DF -904D0EADA00E6305DF37CB, 768A0A0E72C1471B6F5BCA09D22DA573735CC03D6A2B55990BC28D85E5834E77F821B03BD9776EC4, 6885111242C29FCB299293AF2DD28D1B9A04A2285A6C597AE5E411BC9ECF550B90E2F44300A0E80D -1B0E72C08E02B29119DA761, 1770B94A3C1527DC8A83C576CAC617F4837C375091D0555370BE7B6B86AF7194CFBBC695FE3F110D, C2A3740450A8FAD6827F7ABF438F94C3846D43128755B9B96C22E3D1FFFB14A2AB9440CE00E250A2 -512B5841AA0817B34D8F623, A8F3695AE40DF7534E89F10B4A4FC215B225AD93FC11A0A4671051F05282ED7CF68D2D69C7675874, 2A4057215197E11B87DF55AA59CD17217DF16F0DD1228FB03BEF697FC08AF0B22D7E0870E99702F7 -F38208C4FE184719E8AE269, 20579EE6296730DA6701FC826F87A3B10057F88AF9DF77B3AF146A71C047790DC4F03094BF4C8463, 913D79E20DDA3B747CEB30F2A75DD4DA91C979311EDF95531D4894FC26C6026BF3133DAF04974D30 -2DA861A4EFA48D54DBA0A73B, B511AAF4CE18A269345C3728B8FBE4FF807D793BDFBC871E21CC5DCDAEA26D294DD0E14007FC19E8, 55056BD0AAA3B8B46EDDA4130323C7E8ECF281BFC3FB2F3E106310F017FDFCB5C0ED0406C26FAC59 -88F924EECEEDA7FE92E1F5B1, B3F5C6A5B2E239E3111A69F6C73865F4A05D9218BF9088451F6E27AEDB0E87B13DF766C2BEC6193A, CA4918580A00149748269BE71DDE0E28256AA728F50AFC371788DAC33AD7F06FAF8340E271E8B149 -19AEB6ECC6CC8F7FBB8A5E113, 42B9CA94D3E4B507A05167E479EACF3B79809E7089C04DA62798E5726D946BE6237B1A14A9585395, 423DB5C8EDB579C30E232E37F4B15E3827264005AB372DD32FB059EF254458990413BD0B5683D6DC -4D0C24C65465AE7F329F1A339, 6190D98397F9AD09B56E1830C8D51E32F4EEE1CB30AC9C6ADD479D51EE01ACF6ECB17C322B3D9681, A3A97CD71900EE457BABBF605A6D8600529418FC169ACDC2CAA78EB4F98AF4A85428F4C9C6AFB323 -E7246E52FD310B7D97DD4E9AB, A59D7378AE21EE10AB84D6A4E2BB15030DD4D82EB0B22B8F9F99A8F06F6BD4338804B4DC4B629754, 153E8367DF05A6512D242243D43D19FF6D759F3ABA4A02DCA9442CD49753D585E156694A359E369E -2B56D4AF8F7932278C797EBD01, 4EDD3EFF2EFEDED31539C17854A7597F490CD5266193E0927E8829044F7397F90BD9378D945EA866, 6B2A0FDB62484BCFFF908832041B87CEDD448B3C94C88660274AEAF1D7BBF2B5539A5081ECDA28DE -82047E0EAE6B9676A56C7C3703, BA4E2FA66BD45D24E058E3C0E5D4D559B17BE4897B0BB544D4C392A5836432B9B6D172313CEB17B, A52D85FE0CA72F729E768049EC8ADF25723095D20EA05452C9F0C4118A338D4694701363421DA3C -1860D7A2C0B42C363F04574A509, E315BC4C7BA5FE68473BC5C22AAB52BC3C5FEA4CDECD43CD23D87D5F10BB7266F245A4C7AC74CD, 3866CF87A0C72547600DE739C16D1E80B1D671427D4D6863ABA969EE392D0C8CF0F23F8287FAD664 -492286E8421C84A2BD0D05DEF1B, 7862990418446359DD4971B0D97DA97C65F2B2AFE1F6D7D5367538126AB20E10D3DA77088271E358, 7084B19C578DB18EB01A932C10D78754DA6B8E46124DF55D69B46A3B39948FB280B1A54815BA12 -DB6794B8C6558DE83727119CD51, 3E293E1B909DBA203967C1032AA138EF0BA1D2E43009C7264DBCC382DB7DF6B560A19EA3055CB3B7, C90677698990C297DE59ED6C5F6AA53DAA74D6F07877939B764E28D7DB9338130EC353424AE2733 -29236BE2A5300A9B8A57534D67F3, 848551E26606790654AA933E78520D85046EC4D0BA147E9C089921AF3E3F48C53125DB588E76D782, 32F0DE30B6923F8D860B582207F1AA1872A000E788E4AA3244A0A772CE15FA9798EEEF45117122A6 -7B6A43A7EF901FD29F05F9E837D9, 737C39E4E8A3DE0560D9E6B3157BE452C27B8A8289B70880376C6ED0BCA827EA84E00966110C971B, 3FB3C0E5FA3AF18259B1E97D3DB20E915DB46F8297CDA7B74D11B8B34E855EC8D457B1004A9B4AEB -1723ECAF7CEB05F77DD11EDB8A78B, 94D25FEE5C770DC4F0E3B6E334484B09B53223892C3CD5FFF50C14BDC8447B9EA894FCC096F8A25D, 95083909BB5445B102E638B9D583860679096FCE73A516D3DE6EEFA5C4BAFAB50D622A5F21DB238B -456BC60E76C111E679735C929F6A1, 29D5B9C5A0466616186CD8233C9945CDA4D543D81276CDE8FABF70680BCDDD924C87C92F9C32799C, C1C1B6CED82DB69496A40C2061574168B81662C9C1218DF872F8669D5D555F433E908F0178AED1C1 -D043522B644335B36C5A15B7DE3E3, 1625D1C0AC31A0D18A47D949EF78AE16B69DBFFD71746481C6C2DD1E44823B5B5927D62B3940C559, BAEE41DCEE884DCD72E0F4EEA4B9E15CF26718B2C9C839262FB67F19A727BD68600DC254C13E6F9A -270C9F6822CC9A11A450E41279ABA9, D66B3BF22FBFE872CB41581254172B802A74C7675D04FE715F0B527003C10087D61DC74684B0AA1, A10C1FE0179875BD3257FA589B19C26646C42DA7F874A6E0234CF1E4A26C5D0E2DE11BCCC7EC0468 -7525DE386865CE34ECF2AC376D02FB, 865E6BBFC34FF593AE7B6D46EB1A20FF37DCE2CC4EE65C6FDAF7A6A745F39160CCCE5F2D769C7D5, 6EE3A90822408FC3466A961EACC39FD1931A411D6623CAA896CEEEBCB2D4B205F5D068D6187C79AE -15F719AA939316A9EC6D804A64708F1, 81670771FC30B900FB640B3AFE57BED7F956BC096FBE9764D73619DC8F3545694DE1BC957DC881CA, 876B34892B2CD0DE875625833FA5EA89A262D5E14C5F6C1BB43F92E666ABA7C2386B4E1210943697 -41E54CFFBAB943FDC54880DF2D51AD3, 40377E4C485A76FDC32A24DA7DF3FE31AF0169E45C3D02C9B17C37DF48AAD8E22221898F80039E3B, 51DE97738FC9D840F25C61B94FD481FD66EDAB95B2B9B6244073BB92E3ED58AB2CB3BCBF948221C -C5AFE6FF302BCBF94FD9829D87F5079, CF48F60D054C27787C7C10EE8E21FA68BC893341D8D475F6895D26209D8B463BF24F1CF66C75B3F8, 6AE133D3D188DB365AB8FBB6B1CBE46A6A3D187BC9A71C296315F4905B7BBED7A01A472F3936B2EE -2510FB4FD908363EBEF8C87D897DF16B, 4C9D16FD3F09EBCEB87CBB238EE4CC8750D63B4F87BD97D0C7D20A1FE4C091E4E6CA7187F7771328, 183DDFA7BD4EFBD934C081E3E54570E9F8C8877E4540F4604DBD7FD7871E6E8D30413F78BE5A4DDD -6F32F1EF8B18A2BC3CEA59789C79D441, 2F0914162A5D968A2852F718BDD9B011BFFDA19A80B27020E08A285A749721276B792B029A34AC90, 128E0BAE571DA104E7CFAB260314614E2CD9182F072965574B7336130BD7EF9F6117F46084CD2271 -14D98D5CEA149E834B6BF0C69D56D7CC3, 96B28E41A7A0BB6495C8E6ABD2735D73EEBBCFA2C827BA12C0B09E5350C35DE4FB0CEC9A08F51D84, BE9012DB74E0EE66AE8B911631E45D618775B11D04066699136A2859A3D212731A9B199EFCAD01E1 -3E8CA816BE3DDB89E243D253D80487649, 4BF728E8BBF4A0133F3388AFC41E0A8D83A708372DC0B606660AE3C4AD3DB9B83B38A05FB5407666, 5B733FF1C30E95C48CBCCCA21475D61DA7CBA5C9213F456924E8F49AC49DB611F5385A1C8F065EA -BBA5F8443AB9929DA6CB76FB880D962DB, AB3015BD849DD9C43513C95713900E93B9F18F76E02ABE153A2AFB736997AE6463054013A8DE03D8, 9C8F5505284312E6E91A2265FC95094E23D232658B561CF68033434F65ECEE744C7FA647CD9C18D0 -232F1E8CCB02CB7D8F46264F29828C2891, 8047006A2173914F394BE8F67A3C07A793493173063C414114799D3B2C30E6DB2B0D1F8CEAD740A7, B3BB686E0D2E40244D4736A54A6BDFE304510EF03D1B2E47231B1743ACC23D98F3ECE0F73238C655 -698D5BA661086278ADD272ED7C87A479B3, 353A025F620093B01782045CE8AEEE0403A62599841DC3975A5CEBF630B33CB6ABC00CFFD410586, 5709C538A16AAEC8641E4F478703C4D0D30F33517557C35F98D2069184907C944FDC95A8075B4F18 -13CA812F32319276A097758C87596ED6D19, 3602EEC99636AB347ACFA95A117A2ABCAF2FC894DC5C898FF581905230C1A4C340DD5B2E318BE80A, A8DDDD17563D32890C1C9B32A4642A9743B6A6C5AB077BC93345A29069FBD5940802BF726FD71E4A -3B5F838D9694B763E1C660A5960C4C8474B, 372237D3DA4D14F365FD7BB12DB40D13D3D62F469A10C259789C0959241B1892ECE61526B3A49823, 4F1DBC2F1A859D66FFA6116BAC6461F08A3831A144D2827AE8FDED9DE122B1A8DED1DA7693BF0DD7 -B21E8AA8C3BE262BA55321F0C224E58D5E1, 4E6A1E8FB0D1E2568DB7C84EFA6F1C12DF9F16EC12AC0043F988D992485E11FF559EFB4F9FB6A008, 5716CE73A2582EFFC8B0AE74B63124BA7C2DDF50AA5B392D72538B88794C3FEFF6014818E11936C7 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 2E9D5E120B593885AC8868399115D3303091F376959750174A4A439D2E53B8CFFEA4BEB08D226D14, 76804A5F06F49781C0D039481EA19AB4EBCF5F494D3D533E4E0C2CE5DD1318D4B03FA8FFB7E8ABDF -64312DFEEE1AF5788CFEC3176D34C11F84E9, CB94863547AA43E389157E5114E75C34DF701D04632122949D2061A65ADDF4A79D3F6B5FDD844307, 4E219EFDF232771A056CFCA2B05ECA3775B09A80A6C099ED11757C17300F8674E51E2B59593BF0AB -12C9389FCCA50E069A6FC4946479E435E8EBB, 369BEE49E88E9FF121DF9070E19EA17EEFC2758034109CB6FE2001E3FDDD70B6A4CE797EC14DA818, 7D8DFF1C3B00694A7DCD99310349B94A467BF6EE9BE636AF063C21130403678EE293AA8F628C49B0 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 48A77B40188237A4DEAD549E860F85BFD9E97C9ADA0DFE7A777F5088F0A9113E9F15F20214F3A7C5, 9700BEF8FF412AAC2DF490161217B42569202FBEA2502DFE089FE67333D8CF3B3798D9356A46859B -A912FD9E31CD7E3B6DEDE937884905E530493, 2758FDD1BA9BDBA216D66F851CB8E8CB40663B03772E34E3CD7694DB26233D7A74FE5DED846D2814, BEE9C24CE4644878FE9FFA8BF22A3451F3FEBB16E5081E1566E20DF4B3E24E931C118FAE5819AC33 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 478DEFE50590CF108F10D0A6F9BED4EE0844636972DF6AA705314D3921AC04A76FF81E7EE9762BF4, AF6E9922EE79D95EBFCB187DA3088B9F72D2CE666F166711171B9F616B9510EFCEEE46EF24930924 -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 2CC376B0786C80376E7F83D746BBB334299771BFF52A7954DF19B83E6B0D1A52EC8CABA2C2645B54, 5C84DE95129166B91C910388B2A348D324FAB76654E19FE0E5015C2B420A3AB9CB5696D340CFED59 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 3BB71250A65D76BBC632A9993A5E3F7E745DACD9EE6513D212462AF7291337D0C686687FE62005B6, 8B08D0452AA4151F60FB65812AF2C949A34E535DAA871FEDAF23ED53A0683DE34D0264844105B754 -357F023F0DC204F0CDC846CA921F1ADD8447283, 84C6BE7595C5BC5D2EB5CB2036E92516DF0800CF1C99C1821C6EC570121F4DAA4551795F182EEC35, 81D7679899C90DDB55A7F0BEA258A3712D03E9F60007D1849E42D72B09EBDA6D3DDA52055D6C8163 -A07D06BD29460ED26958D45FB65D50988CD5789, C1D74CCFEAA2CF87936EFA6D1D025BD8EED780C8DF8CD4F2C8EDCFBDD3F0162EA4E58BA39045497C, 5157F505DF25BBABF4903B624F8742BDBEB879B81DA1F4BE3BFD92B0A737B4841E00D205F1322C0E -1E17714377BD22C773C0A7D1F2317F1C9A68069B, B138D853FD329596163B9268294A5C39439FBE4AFE3CD9D444B863F998DDAFEA8E8041D671B67D3E, C707804E5644F7621663DFC94C3ED9CC2719C4978F43C2DAD44B9B027692FAA502B8C1838B0EC609 -5A4653CA673768565B41F775D6947D55CF3813D1, CF52943728FA2C5119EA16D93979716AEA896EC998AE699AC3B445895C0A2BF94BE64245F42D70E3, 5B59DEB48AB5AD40B153E94516BDA3F9F5E123BCE2595E66126CB45991CDDDFA811F16037B2EB5D9 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, A79438A50AAFA9BC39B5D32378532CD58B44C299FBE237B146D57D3F63E6DF1D04CE11C1DD9C53CA, 5F39CBEA9FA6556ECDB4E93897C31590B8B1ACD300FBC46CE528D99A42607B8ECDECB3F874194830 -32C78F21DA0F2AB093551B3248B38680448F8B259, 4709FD8CAD0F1497DC47597549FC754FC894A285C0A33ACC1B6E6DF2B7473CE5850105C31C48B5BD, AA89B5365FCB710652FC76B78684657BC18D883106BEEAC1C0C781F404275A32B445856693D1F57 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, B8FC1193F51D1591092345AEE2A681E082A2B4DB620BDA92397C2FA9FAC9448CB5DB9F6CE6969E1, 33EE868B77B2ED5853EC7E8449534F4687B75679413B0DDEF7A7D1FE97A9192FEF56FD42E453BE3 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, A07908B50A422E6282EF0D0DC27AB06FCAC12D6C28EBECEA76B5BA9B70E57932BA15375CF3B9364F, A4129E03C16C1EEB46939052B010253E4F8660E22B82E16468E650B1E9EFF4D1A9BEF29958569ED8 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, A2C083768C39A91B4BB1C378C2E8F7324CE88E7B6EB1308CC67EE8DB9089E24AA8E62848144BA072, A16BB45AD66109C50C8826301B308E254100BA2F9DFF6B1BB5019B5E0B817CEA8435A7BAAF8BB3CE -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 8252CAA460D992E6C295E2E85A1A08A8F771540B57232B8A74CE05687D01B2EE7B6C433A9FAE5735, 102B297DCCA27F97408FD8FD743FA4CD6A0114ADBD7EE6FEFF11BC90368B821A45ED8371CC3817DB -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 58F89F5B9619BD6FF2DFCDB16D95E74BC16FB948660CC09ABA6BDF9D346DF41290ED1F4503D6232, CB944D95507531AF691171FBF9101967C887999476F2419DFC4E95988C19C1CC68DB4FB686C6AA23 -909A469765F53090D38D5A7231073A03433CC33DF71, 4D24FA3D5C2616840119A6C38AEDDA4D922A7BF2BEE4B52A064A775235ABCEA438109F9358034B23, 167D4964257CFAA68A5504513004C66314B515511ABAB7D8A524E00BB5D41F0C600C3627E0FBF687 -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 1E6B963710BBD23312D6E5D623AC5DFEEF967D147D627212CE44F9B33B4E33E0187F3F22D950D6AD, 3640434BA94AB7B121BCEDF8044B43021327304273419D01BEAE4E48BD41A1DDF4F5EE28543BAFEF -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, A07518B342FE5E52293A054E5B57201B7FFD19A0B7DD404137CCC18ECF0F542EF5202D3F4F6BA520, 7FABD37C89ED62BA09AB336EACC4B144E9F6CAEA0BC99EBB22DADC2C5320B88F68022621ABFA8808 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 10B0F372BA0690368B8E7CC6A297AEADBCB5599BA45811A5C598B0FD8C9A435D8CAA091DB369B18E, 29EFD4AB163C2A60594AC276187AADB74FEDF908AF759075D2C3FB9F55C029DBC7A9828D24BDD5 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 9829F6AF369B17D3F85EEE4315DAD1234BD103124F96B627F76CC06E233A411C2CFAF9FCF60A05EC, 8EC9F49FC3CC29DF3A1DFA6AB2AF0377BF7AD655C26CF0245047FF3CB3BCBD0CA15D0A4812760876 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 624937613B558F4C0674BC1FFCD755859312F9E52803811DAB0E79D2FAFD9CAC97DB0222830F26A8, 87C6444F8C1ADA33013E2FC3729AB5F6FED8BB46CF0EA7A01D480896FC47B4676188145A4D37E46C -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, A2D9EEA65859E053D32AE771DB033C4BE83F8BE7A2E6A076BA1E697BA8C323F4A6598C09D45838B9, 7CE57067769BD269D313E22721C0ED3F61C34FFBAFD775DCF7CE36CC1DEEC404DB050129FA821A22 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, B7F4D9E60F6E7B7AA857C97E8BA04002DD145B9B87FE082F8C40BEA44061556935BCE5380B73A0D5, 9788734CF75C395CA270A0962D17D8BC8A7AB9B896D63DEDB4A14E77ADEF66FEABDA1B4E7FB56457 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 19758DEEDFDE1D75FF2FAEFD3E2866F20760A136008BE1D13220AE87E003A81B1884FDDA793D552D, 5B76D342C62DB58EA8C4408E303C1BA609EFCD47445C211049B405170593457CBE1A550D509E8195 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 56BA4BD06CF23C6070B1121CBB5263F0093EB07196750F486AA35BE9F9DC369FE428CCAB69811D59, B5611EBCAE4F1BFFA8156D0FD23C6A5F4528329B6803B76998F5628FC05BAF1B96CCC8219BBD5AF2 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 4A42D322E3B7E995FFDFF8CF3B9F485BCCDDC2651674C0B245D08F2AD3EB98D720088DBB8F1FC321, AC19998F05D28C22B44302C9D0D5E527D36698F2E9BBF5D0A77E9288304A3648B3588BB6EA3AEAF0 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 7F98ED82984713B8260758B604CA9140F1D5CFA702BEE3CF791253E30468D2B9CEC87FA30C9A45E0, 56F8C910AD6A5814DDF71EA8F1FE9634A34F8193AB4E71DBF1ECCA23C27F6FC4744B2529F3860EE7 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 4DA7199325A51D959373EDFCDEB3FBEB4D32A4DC1B9613686938F25966D5C83D2FF17E9042FB16F8, 71E043D3DD57C727549ACA7DB1B5B5B0219DE3E35A2594DD27E58E6038157B2AE797E1C0C5D19AD3 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, B93E715DFD3F56318E0C8EF00B18B1CE3939A86C0F71A73DDBF7B33608FD1AEBE9C9914EE67855E7, 57ABE08DF4332A7A526C64582C13238CB5D707912DADE2551F2238264A7801365575443D7364EF0E -29396F76B67B7C403D73A1059B80139336878E44938606769, 21C6C96DCAB8999046E144476B7B5D5274906CD40FA2AE12FFB1294D0747B6492B43F8DA16980328, A9AFB31A670834C171EA466BBF2339DF55AD3DD221E4509C233D6F5B77B604703EC4E0882825D650 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, 4E12FD81CB362AF30880F3E641D26A6B3782253DA323D61D31A1AC19BB78621AFA889C7A20BA2B74, 60DD814FC940FC6F7632742D8A2C28E23249EE37C021D0228871CE58EC01CA5D3C3E600BC76918CD -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, BA65A96A9E313F445FF800E6980DAD1E0035AD6E66443775BFE3274942736EB92F394455FE98D38B, B1B21BCF9F20D2D01DFEA710189A85B73205706A0EB6A1C43D5805775D915D1442378E058BE49EE2 -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 8996CA1F66A1F926244137C44C83DE2F947643D0358CB03D00B157D0137F19F314660D81DDEEFFBA, B9F2ADE313A6822CE2BA55EA8348FA8AFC82263B3D366435C4772CE548D65D86948AD7959245ED7B -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, 83455DAE8493361EB41ABB60552C4E03623AEB3D129F928490BB53110E207B6006397366F74C8928, 81EFEC6F99FACEAEF0184D859F05D773F17BD311A9DF60892FE9DB61397158346D37C70003B63616 -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 1BFAC25809DDC176EC92786AB1E405CFEF0E8AF8B2CB77208E23779D533186869FAC3C91E22A202A, 776746B076D879EC85534C7F5D358E8160C4AE6E4E3436C8A9771E28469ED0342428657A301F806D -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, D1B04AC73E8B79B4DF7916CC8F24AA552A11DA6BA892356EB07C82C14904811A008FB237B68C63DA, 20233BA1F3621CDA15507F42F75B65EDD733B5F28EBE3A50F0CC292177B36F3848F60DEE60CFA984 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 337CF70A8BF3E875705E64F5BCA2D78D00796AF1F2B2F1D1E8797282989047BF0B5E9889A2CA00E3, AEC570993C272C3252FF321E7828E4A3A19D5F5B0313A4BD16FFE586EE56CFAA1ACC29E8ED70DFB4 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, 4075E85006A7157F269488B8C98FCFB51C3C6E47C9F2FCDEAFC20A0F9F8D17571A5446020094146A, 97440AC5E0F102082DF6B1DCF449F2D4DAD07E2316FA55531BF8461C474096989482B28053F49B33 -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 8CF86AABA9CFD74DEDF6C9607277754590657C4AC3C49B72EC52E67DEBF53571C81D2A216F890533, 2BA7EB92622688C4AB9DCB3317D7E7F8EE266200B9BD9AF03A62B1F5E9EC4961B3380D53AA756FC1 -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, EBFD161D98D29600E7214551771C11939F1C28ABA989593232262A448ED3B87761F4A7B0F89B5E, 31A13287AEEAE6FBDCBE1FF1CC0EEC7331CAC597C7394D7D2BC5BEE3F6F778D7492DDD3D5D3A3A19 -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, AE161137827FDCFC8A054D0DC4FB064165BA8DB6E7FD1BCCC7CB09081288E48169E6D9977430D5AA, 4FCDF980E44A5B8F0BA30369414E80AD57CD2EFAFCDE90B5FFC766E3A7039977747401AA92057295 -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 3B2E8C59E4355D68CCE7F3A15C898DF065A3BA32E42F9CB68298ECEE2682078D48CE3921CEADBFED, B8DF17D09672753AE08A6149A727B0A956E665BD456F1361D3B46D51EA9F9E849B9BBBA5188B3182 -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 2E33923BB61FCCA7136C2132A22A5E58B549ADAEDAD97231639CA5BF818DCF161FA8C0672A2524B, 5CFBAABA45595EA42D4AE84A8C29BBAC6A01A78E3AA0DB9CB3CA031D50E16F78100B8973987913F8 -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 5B4EB15D04BB809AF98FE3D7D610C293596C75E93C91C306DE15F54DA4C8446DFB30ADBDBF03F1A6, D2702D1079F67025987C7F1C10BE9637B338218034C03062F4E0AD3C0837DB76542D16E8DFD0C192 -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 7561196C37A1D84A9677A2D74985BCAE7B041C336B2254A4E78C13AA657F740A87752D625C62A6B5, 8F6B796CEB21D622CA1F681566B04E0D86EF120DEE6F4F21EB792BDF0FAEF970E35D963CB7693E1E -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 7E43627060CC16B367DCDEC7AAED616188B88AF1F525D0C34D32EA408A7C423AED0F6F87B3D3E8C3, 8825CEFC7E3BCEBEA8B4CE7137CDFB0FBA7D33DE6D32BF27113CC6628BEEF5F1B674FE960AE37DC -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, BC48701CEDB49F6009E735DA5341460876DA051E580A899E19F9A4404BDFC22F32FA899A8D3A0723, 862E1C699CECDFDB2A54D5CE49454B6DEBBFB720EE333D7E797FA11993392E872BD8C9BD06FAE7BB -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, 30CBE8AF05430F9064CB4F334C98A77FAC7CBB264EEAB52583F492AB0C105C08E35495879A284306, 60D616795B909D881A1A70DAFB613DE8E451E01AC54ECD3CFA9AECB1D7CA2870AD8A60EFA8B79040 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 5C7500AC4CCB93554A04EAD16891C12F290F7FDA6672DFD4EEB596D12FF52B42E12108036D938F78, 21207A877B1E8FF6EBDE68749E0766B607985E2E419E07F399E073BFF77A43268D8FFB9A04CCCEBF -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, 8BDB660EF4AAA311C2FCE3E153C1DDEB1B76AA92EE3D7449FA3A811C1A12B91205B9E07E1F886565, 897EC6B49A3A6844F6C94ECE15D5DACCD1E0CDFD05C1A7C20D1DB9126D9D35DE54F94799FE6B7E6F -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, 652AF04FE37D8D497FB040EB3D9FEE8E4EF691EAEB34A1FB19B889B72D727492F99016762E887502, 3C843B06A59C8EF05F365A67896A2C997044E7060CEB8D7DF57B8A3BB87F16A1BFD87153ED7303E5 -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, 38FEC1C1463F890692F8DDCF1C74D5FDBB2322F87251C0924F1EA27652B60D461A5EE9004266E68, 8127FFDD8E06E9367BD3F85C4219577AB4DE38B0D4B559004A5E58B3025127450254DCE1C50FE23B -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, 4D8B9ABA1661BEC94FB52157B152B4D4B287D9E6CB35AF88F819FDD61DFE3DFD6A484741742CCB10, 61F2A6CC766576F080B61AE11F6152FA5BC2B60D698B8389FCA241ACFB3CA6DA1D0DBA4578C23EBD -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, 7BD490FA216B1C1505C8A1EF35B3AE4620D316F9EF6D8AB4BDCEFC026EC51B37F1D75A2E66850FAC, A9B5157E48E3C1E28393227B904A20080759EB804641D197CAAC4E7DF1FCF35AE6B3C24C53B1B4CE -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, B6FD53E1E15BC5EA7A322C6FE6584092BEAB02B2FE351D1291C871C561698E829BBCF80E11D6AB4C, 7B44F22062659A2F9A5BA2020828ECE787CD0E8AE393BFEA1DB6727A62BDF697901AF113C9D711D0 -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, B142E3E0224425A7D79F7690AFFFA9F096F72108F9F08A70E5E85F3C48B3D64A4438EE15D9B4340A, 4FE72C05EDD2A12572CC651F69B7B8703DB3799CE2A38E73140D3AD90FA4A0586691711FB2059BD0 -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, 92D36E4CF809775C29855043A99F4080294617893027AB3DF0EA58C35AF40C113EC8B81F21B0F5, 40B777D2E2A696A62DD2B09CC526A03D1066508BB0DDB410C4A857ED1CEA51350041184A4785D6CE -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, 8BB0981A4B242456E6CAD6677560FCBF91AF3D17D57F9CE6480743D61120A386375788E0E97427FC, 64F3513DB216AB931F8FA29973A3D7E02F50159B7548A3C8461B890B6324500204EE8310EA7325D1 -A0D2E82CA5E358392DE9951D10B533E405FF396E226444B3B8F22B54A64B, 4480A44E458E4BE9F70E44FFFDBFEF9895B4CB321AB315AE042114C6E77688A586EAF64735538AF9, C387EFA4D40D2DD78E1D6E0886EB5CEB6259C39C18B210B9E62A0BF6B1A0A9ACEDD2F31944F5124D -1E278B885F1AA08AB89BCBF57321F9BAC11FDAC4A672CCE1B2AD681FDF2E1, 2FB113CF1FC9F0EF4641EC706C7F04837358B27AB5FB8749FBF26FEFFC097CB96D3F1892A202E64F, 526EF03193208F67E756B71B544B35D6E75CE423E89A97588736A386547135FC400036F505B45D4A -5A76A2991D4FE1A029D363E05965ED30435F904DF35866A51808385F9D8A3, 7D73A10E180A31F1C26FCCCD1FF94D0F585AC62DBD3B0AD01CFAB5CD6B72B8E6571145C93B321B1B, 4AE5975DE357880088DC9946E8C95A4F9754B1A84D95067CDDEF18FBCC839202D24528D021C4EA41 -10F63E7CB57EFA4E07D7A2BA10C31C790CA1EB0E9DA0933EF4818A91ED89E9, 70CC33CAE4DBB4E5858D1AFD4E74261F3022ABA3BE10077BB9E3933285160E52BA1F0ABB48F16977, 2D991110E137DC74811985D2EB0DA1EF02B4E4B16F867CAC0F38AFE20F41F8F9482FCFA9265AB79D -32E2BB76207CEEEA1786E82E3249556B25E5C12BD8E1B9BCDD849FB5C89DBB, CD4189B1F70512E5639870FB83BB0183361CFC72363C1D631441EE95300391BEE131303E90BB7E7E, 989C981E68ADF0612F186B9B53B73CD8D980EA698287643E511CB6C6527B9C55B9E43F644D246B16 -98A832626176CCBE4694B88A96DC004171B143838AA52D36988DDF2159D931, 6F4E21FF38A4471663D6655744795E2ACE90DDA471259E186BFB6FB4E22DADB882BC9EC66E6EA361, 62E3CBD056E270545C377B9F5191D3F25404978776182E097A5ECDE73B9F7D75A2EC0A9357F80829 -1C9F897272464663AD3BE299FC49400C45513CA8A9FEF87A3C9A99D640D8B93, AFC48A54F6C4703A1EE6149E23D81B29FED73CA26CCDFA8D82513C8AD9459FC3A9D35C0C0F5C44A4, A30AB17F176CFDD29C49F34C2BFB5AF66E14E2E3EE7AB3DC040183275A6138207F19D5A5076CD830 -55DE9C5756D2D32B07B3A7CDF4DBC024CFF3B5F9FDFCE96EB5CFCD82C28A2B9, 91A2AE01E68A9ABDFAA1B57C99C4B4CCA9F66742F76862C0D894A32636533A7202753E00FD283E1D, A12FA22242E311ADAD1F7E9DD20C3CFA1F1AECC08017CDF33D70CC00D691DE6B8673F9E3DD96752D -1019BD50604787981171AF769DE93406E6FDB21EDF9F6BC4C216F6888479E82B, 43FAABBA0C1AF89059B509436FC84294B91054BFA74ECFD8BB122405ACAF9EEC0523EE4C3949010C, 138F41867349B0558B3E3C267ED55D9D1D8ADCBAD1BFB53F9B84E5F614FC090A4976544D9F550DAD -304D37F120D696C834550E63D9BB9C14B4F9165C9EDE434E4644E3998D6DB881, C8301F370123369893ACE4BC4677F61C3F943DD220CB6B1AC2107A62837A9B2CA2E542391571544D, B1988053C7ED09E30FA660EF822D4CD307E333185A653A916C3AA2F7504B7B7838954AB4719EBB92 -90E7A7D36283C4589CFF2B2B8D32D43E1EEB4315DC9AC9EAD2CEAACCA8492983, AFD233D12EA39BA0A281ADF7E545FD23D0B2A97B47C8FF4408071C44DC6B92E62E5A3EFA728676EA, C52D6534C0BB89527A00D3222A1E7CADECC5984325CCD31E2569FD9CA04F1EC279A9F94444E383D2 -1B2B6F77A278B4D09D6FD8182A7987CBA5CC1C94195D05DC0786C0065F8DB7C89, C07846764875BF07FF150480DC83D4E303B06438BEDF1B76DB5A33751DACD4F80AF6652B4C49F46E, 1D7B2082638F365AB25B679B98DC07CF7AE8173EC6E812DB62B04EC5C6F4F251621EC9C4138C4CB6 -51824E66E76A1E71D84F88487F6C9762F16455BC4C171194169440131EA92759B, 4CF427B466FC807D5A05AFB6B257958D19F295470591391433A98F5CDD8305DBAE38DEE2F4D9CD79, 23D9B7639D201EF212E0BBB3F629AEFB634FC54DB72297C082926680219EA30DCBDF55E7065F0AE1 -F486EB34B63E5B5588EE98D97E45C628D42D0134E44534BC43BCC0395BFB760D1, 8C0E31B04CED904ED4401671FB3B955F1399483AC11F625B2F5DBA1A2D2BB5A461F63885BE0D4B58, 42B010527E505599888D7A594BD833843E3498CEB1829D000F80AB18664AA946FCA9EE38009E833 -2DD94C19E22BB12009ACBCA8C7AD1527A7C87039EACCF9E34CB3640AC13F262273, 3BF6968DB54B154AE2F625DF07B58D6B381FF1344B9AC09EC8059EA7BB90AD303D6FEACDE02823C1, 8C4785EDB88DE75078D404CF0510E22BA9099C1BA96F3CD586D0BED3947FE08891AC72FCA4F665A1 -898BE44DA68313601D0635FA57073F76F75950ADC066EDA9E61A2C2043BD726759, 70216AE841BF5823D6E47274F990F75779E0FBB6BD8387A327C9B3280C6089FB931AD53D0B847942, BF726BBED3B5CEEFFC70A10232E925E6BE68F855125502A7E75869CC2BED2C54F785CC3B761B3C62 -19CA3ACE8F3893A205712A1EF0515BE64E60BF2094134C8FDB24E8460CB3857360B, 5EBBB041736FD564D03A59E4E46A491E26D77EBBD2BFEB2F72EB042C96ACF246212A71E793F619CE, AA250C9692BBAB7D262C832404ECB5F811AE79E7E1DFF8385D6CB915BA1C037F0710209F65744281 -4D5EB06BADA9BAE610537E5CD0F413B2EB223D61BC39E5AF916EB8D2261A905A221, 4AD2A8D2677FA9987512491C47AED1458D538BF54534AC6D0949D0C060636B9531369B6A45442A41, BE83AD961F5E9AD783FBD627F6C31BEA4AA437992B8DFC564D45E3EE28C7F9EA826EC9CEC6B0A8D9 -E81C114308FD30B230FA7B1672DC3B18C166B82534ADB10EB44C2A76724FB10E663, 86A48835294DCCD5390C4744F499C8388B72F49A2F09D8C88212561E89C9C0C78B1E9657F17BEB5B, CE769AF9B5D3A51B4EDFFD41394928F55B8A0AEFF2464DCFA21590729A51B19C943416786A21C4E9 -2B85433C91AF7921692EF71435894B14A4434286F9E09132C1CE47F6356EF132B329, 2CDA44521AA95B28C663B8800764064AA05CB6276F7A6A45D988A772BCAAB48988519A528DA37CEA, 7972FE44D7C8E51E49728093D5EA70021907C733802B5D426D630B1A5817F8105134390C679DFF4E -828FC9B5B50E6B643B8CE53CA09BE13DECC9C794EDA1B398456AD7E2A04CD398197B, 34530A8CE4D03BA6DC6796CAA9A8A2FF3A802FCC9A99A6079B8C40C0ED6CFEC12880AA41074392EC, 81E4EC5B178E7C78C0CCDF3D88871E5AC8D4EF71F1B29E471BB5A16F8ACC157C34B71C42A0E20A4B -187AF5D211F2B422CB2A6AFB5E1D3A3B9C65D56BEC8E51AC8D04087A7E0E67AC84C71, 795F71E2E023025435D79EB2403E1365E5E16D1E246AD1087E4D10CEA0BB1232D53A3A5488741C11, B7055BAF7BCF2C6624ED3EC0641C1755725484D2E1D518994A8B12F3F64DE0CB75489C628710DC7F -4970E17635D81C68617F40F21A57AEB2D5318043C5AAF505A70C196F7A2B37058E553, 5277F1262747D260298162C317D11CFC5ECD655B9BE074E47AD65E59FA3A88A59E9AA6C7E31C87F7, FB403D4B371B30053B23046D9492DD32A0A0203D1A263E6919057429638238CBD56983E00DBF9F9 -DC52A462A1885539247DC2D64F070C187F9480CB5100DF10F5244C4E6E81A510AAFF9, 2C120B7527155CDB26B97DA93225419E5121B07406028AC8E3EE953DB780AB0F5125B943A035FF23, B2E8945AF06C93C44DA6AEB4E439EB0732B56A6FB3C272C0F66701C0018EFFA87479EE715C45E86E -294F7ED27E498FFAB6D794882ED1524497EBD8261F3029D32DF6CE4EB4B84EF3200FEB, BFE0302DA6E4AB401B95B9E73114999D9A4374B412946C9A74188A5A5316DCF872A956803218D430, 9B119EC3571B32CDAD8C96300A34A83A12D63FE91223A602BC75DDABF8FC433C80E7BA40152807B6 -7BEE7C777ADCAFF02486BD988C73F6CDC7C388725D907D7989E46AEC1E28ECD9602FC1, 5444B6DB54CC9C0C534E83D42B1F06D85BE6F24CBD554DD69DC8630D559A936D988FD7836553E225, 12BD8D6FE52B12E45B38AA420E854A0CC7C3C9E0BE7DAB8A5186D62B01164209EEB98015B39C8483 -173CB756670960FD06D9438C9A55BE469574A995718B1786C9DAD40C45A7AC68C208F43, BB6A3E9A6C2C8E23ECC4F1A69CF0CECD5194D9436E4F8F4963D892AF7ED0CCBF9ABC2F2A0E2A1A2, A341197BAC90E1D9C85B63D04F028B68D5A12F7EF8963A75DF60A8782AC1C35018DF8675709C9138 -45B62603351C22F7148BCAA5CF013AD3C05DFCC054A146945D907C24D0F7053A461ADC9, 81763BB429A7118FDA7AFCE403A6F1191BD967FB8B8EBB1E9B398AB5C938670C6939FAE42D49451, 98FD3771FAE36DECADAB0BCCDEFA8C54CDB4612E831CA547D4F8A47FA04EEF0B3099365A263243D6 -D12272099F5468E53DA35FF16D03B07B4119F640FDE3D3BD18B1746E72E50FAED25095B, 99561230DB5D675857DA9334C85E7EF9C854123AE4621909F079D814377B95E4DEC5A96A7EC643D9, 8F8D62F56D8DBD68862EF93DCCDB1477E0C91B97B235C9D0DD91E6856EC0CEF25F3757764E68F8BC -27367561CDDFD3AAFB8EA1FD4470B1171C34DE2C2F9AB7B374A145D4B58AF2F0C76F1C11, 5B262132990366E8F43748553E866D1F714EC8865A84B25784FAEC1AA75A1C43D59236F6B384C74F, 1AADE2A8C0CBCA2E21C2001791671E74022CE277E729EF0B1DA25C598014D1A79DA0E279F632724D -75A36025699F7B00F2ABE5F7CD521345549E9A848ED0271A5DE3D17E20A0D8D2564D5433, 35E87A95F283FF3D839E219CFD17DBB7444475FE80697DB170746F4E0ACF2A3254423B77608961CF, 4E051D03C866DA5F44E5E4271B28B87423A3DAC514859748AD7F080D5E2230DAB7C6C92A10A21F7A -160EA20703CDE7102D803B1E767F639CFFDDBCF8DAC70754F19AB747A61E28A7702E7FC99, 952D824DB2F2A49C2B87EA2F528E08DF615CB961CDFD1637524B9CDB783F387BC242DB2E5E9CDF5E, 70B3365AC566E7DC70346F1038D6177065C7ED54BE8A11359C1A7464C78F55CD2AFA06009008FB11 -422BE6150B69B5308880B15B637E2AD6FF9936EA905515FED4D025D6F25A79F6508B7F5CB, 49AE196BE6BE328A5ACC7725645182BB8C6DD22E09403F3A9E8AF6F36F8AEE7AFEF5F14A0BDE0892, A7B3D296F13D9BCFB9C9442CBC124B7825852E271189832109BF22F68EE8D9AD0AA85A57832FCC06 -C683B23F223D1F91998214122A7A8084FECBA4BFB0FF41FC7E707184D70F6DE2F1A27E161, 105AC69C780FD60D8C694285610E1373E07CD28C2788A24718B3801A42E47462FE9C84CF5DDE3F42, BD367ACD0B0FB3535D9C64D03B30FA6F864AB4CA32F010CCF1B5197CC3E895215EF6BC8D473D5630 -2538B16BD66B75EB4CC863C367F6F818EFC62EE3F12FDC5F57B51548E852E49A8D4E77A423, 1BB07BCA96F0B3969F28B29376FE6E9DEFF507811E6FE3E01F01900846EA1F1DD72C497A9DC19ACF, 65A2511205D7BEAE924FE5A4F17527E7A0B9B75EC11F392A463C4544DE84635A65DFC4DB2F1F45D -6FAA1443834261C1E6592B4A37E4E84ACF528CABD38F951E071F3FDAB8F8ADCFA7EB66EC69, 7D66A77E9B34DEEC871F1020B9AEF6B6F7A1556635CD2336AB1DCBA1AFD87F6CCECC2BBE6CFE9186, B6BFEE2BB7D57D30BED1820A19281D7AB1BA55D1CC0002B5D75B6A909A610C2D989CDC39D74AE772 -14EFE3CCA89C72545B30B81DEA7AEB8E06DF7A6037AAEBF5A155DBF902AEA096EF7C234C53B, BAF1C658015933CA20C254AC4157DD21576B7CE8F2C125DF74B3AC096C1BCB664270BE7B5523443E, C517DB296436DBCB56F3A95500BEF7B5682653D9AF1600C9673EAF1E9057F915EEDF68D19D3A2121 -3ECFAB65F9D556FD11922859BF70C2AA149E6F20A700C3E0E40193EB080BE1C4CE7469E4FB1, 2E061A7DBFF93292573ECCBB3562393A2068594456F26665296ACEB7D7724A4EF51209F83EB4C110, 8F0678BC35E182DB435E1432BA320A148782166248E19F33B97907E541DBAD71D6EBA788883FBE26 -BC6F0231ED8004F734B6790D3E5247FE3DDB4D61F5024BA2AC04BBC11823A54E6B5D3DAEF13, 465BEF41CAC71BCF005A1685766C088CD158037EE98A7A22E5976548042763B040B3B4DCA99C50A0, 796BC1E943093D81E2F014F20415362C2CA9F97F732D757C3DC79C4FD6FDCF350159844E192B34F4 -2354D0695C8800EE59E236B27BAF6D7FAB991E825DF06E2E8040E3343486AEFEB4217B90CD39, 30CF4C476FAB0E4D83BD2B8E31E0778F12B93E8091FEA2E5A0DC5F74DD34E4591431456497696D1B, 17A2802A97A7C440B1A0413E6E0045A5B846657C7EFD33F5A15A4A8436C54546018390690347814A -69FE713C159802CB0DA6A417730E487F02CB5B8719D14A8B80C2A99C9D940CFC1C6472B267AB, 741C2CCE2FBE7C6C1DCE5E349AAA516C8B173CAC12144E256811C7A0F7090C1A9DE4566C683B82F9, BBA3C622196A5D73E252F2E41C98714D3A291FACBD1707138BC2381A50DD076C8B0E3B0C1699D551 -13DFB53B440C8086128F3EC46592AD97D086212954D73DFA28247FCD5D8BC26F4552D58173701, C6F9D51F58F300F189EA7B233AD177F436C93F20CC00458771871CC74130802BC80BE94E3B8A6AA7, 84D821088E26DAF04774008D7BE1B2C0F1D265E9F3B160B19570A0D67720C592E002389D4F0A2F78 -3B9F1FB1CC25819237ADBC4D30B808C77192637BFE85B9EE786D7F6818A3474DCFF880845A503, AA7ADF6713FBDB5B41466DACA2EF5AD8EE32A505198615FD6F0CD0164D5F563E524CFC4795A68E25, 86A40CDE9EF77B18D4EBC031C3CD06A1713E1DE51616D7145E5A3AFA6FD7447B362519921476E2C8 -B2DD5F15647084B6A70934E792281A5654B72A73FB912DCB69487E3849E9D5E96FE9818D0EF09, 333E4EC27A4F31AD04C8927375F655E55FE1A5B49051087A123A787CC1426A6479718BE42B871929, B0BDDA758ABC53D8A90C7B6DBBC2752754F636D6777593564E60891913D23008818E26A0A073E550 -218981D402D518E23F51B9EB6B6784F02FE257F5BF2B389623BD97AA8DDBD81BC4FBC84A72CD1B, C06B17EE02167DAE61EA430538E44188453A0F3ADD4E279BAA8E84F212C1A7D46D0D14D4CCFF579A, 5FAB793528743EEE2692F3FFF835E4C3BE573F396352E1AFFC98A769AB3D5760EA542ACF14C540B9 -649C857C087F4AA6BDF52DC242368ED08FA707E13D81A9C26B38C6FFA99388534EF358DF586751, F7F1D0DB490F959C50360818BC93ABC1729C86D7343B8D88C85C02C1436B69DD8A90082A63A355B, 2D9731E3446EEB75AC300A0FA524720BDD90F15DB8C1E5389CD303A3B24929431E1C450A3E65C963 -12DD59074197DDFF439DF8946C6A3AC71AEF517A3B884FD4741AA54FEFCBA98F9ECDA0A9E0935F3, 16DFA18E11A8B9B1FCF9122A790DE66E851A3FC2D3A21CA70917F90BF308A85CC7807C6C803CDABE, 42D503909182F3C4CC024CC097CAE184A9A6C8F576F56088ED9EDA262AE0C884F188DD83FF7D34CF -38980B15C4C799FDCAD9E9BD453EB05550CDF46EB298EF7D5C4FEFEFCF62FCAEDC68E1FDA1BA1D9, D058C0FC6D3933BA0A477FB140D592A87439A049F2FBA946BD852DFBF61B9241337C1DD03DBA72AC, 13081948CA7C434734CE6CE8D2107F1593D8909E52D3A71939F0154EED6D241DAFC6D073AF1E3AF9 -A9C821414E56CDF9608DBD37CFBC10FFF269DD4C17CACE7814EFCFCF6E28F60C953AA5F8E52E58B, 539AB9EABBAC27B00F82C4B13E64774C4AF781B64BE34E68A41341116901DCAF77976A44FFC2C908, 8C45DEDA6ABB68257D8E0A292B9CEA7A4C0F4D587D3E10DCBA522B0C70B012BC7C2BC9C9920D26F3 -1FD5863C3EB0469EC21A937A76F3432FFD73D97E447606B683ECF6F6E4A7AE225BFAFF1EAAF8B0A1, 308E2E0DCF7628559A4CDB14F2D68407182F66EE19E1241B34F321271920BCB5A5D0F88CA3E2B820, 536FE0BA523795089B73F02DFB8CCF077756D289784DBE5CC2D40B34CDFD0A25F19237DE457F02A3 -5F8092B4BC10D3DC464FBA6F64D9C98FF85B8C7ACD6214238BC6E4E4ADF70A6713F0FD5C00EA11E3, 7DF3A9E6B5935CAD5499D9BBC73D437042CB1E8E8B1651F083682B10D0956A0D68FA1CE62C06BC98, 2B5057ABEA95F9A4E83206983C3B66EC75B8B96846F6DD6CB5016920B73F08B2F30DBDFA71DE0A19 -1.3.36.3.3.2.8.1.1.12 -1, 18DE98B02DB9A306F2AFCD7235F72A819B80AB12EBD653172476FECD462AABFFC4FF191B946A5F54D8D0AA2F418808CC, 25AB056962D30651A114AFD2755AD336747F93475B7A1FCA3B88F2B6A208CCFE469408584DC2B2912675BF5B9E582928 -3, 3E7E83B88BA8D99A004F1C92EE361648A922F773F96D64B2BB66D1F3C0EEAC30485CFEF216F68B596B8861FBC005EA9, 298585E0C24722037F09DD015C2FEFEEC87058D76A07FE43ED52E8641B7248D2C8BABA631D9D68ADC2BD7E748C753C0D -9, 3733C50D309C98DB4DCC412C7093BBE4C420A5B168F3689A15AE1AF552D2F34505A596A737720DECB08B59DF4E5869ED, 3E477B31A353F8C619D1C4049E36144D51FE5EDE1C0528BDA04BC4F19DD65024AB13A2D479F0BD7D33AADB1AF8A21966 -1B, 354006AE1DF2792A5FE6A37CBBB14F3E9F9EFDDDBDA27CA7660A91695275FADCCD6F391CF2F696EB5FFA90A257FE3FDD, 3ECAA59868086710F41A88353E5F75266C95793FC5BD7289836EB147476822992FF1E27A223325EEE1D20763C83A5D82 -51, 657E528D4242DAAE2A6A248011BF553CB3FCF54645EA0AD86469323FC86611CB7FC3856B97FA8233F8EE577DFBF774B3, 1F5E2E9ABBBF8846702F3D856E4FEEDDDD228E6878629FF3A18BFCDDF9DB90F79B05CB6EC9D8F2B587DB417536189EB3 -F3, 4779591CFB558CFB94D726B79AADD897E673DFD64E3970ECCE0476F7BA2EA4C68F8105E0A26C1681B212D86402CAFE33, 64829F5DCF1B1DCF3E6DD09BA66F26E5A63DB6F11E74A7DE5F90F7AC45AB466A6751F30AD086C84A611AC733736869C1 -2D9, 1E1C93F6831EDCEEBC4E9ED1297BE83D53F838534B72CDBE57BD03772EEE9B331254D69BBA2A306409A9391B9809BD25, ED5F3D6A168F1CD2DF74664C2FA6BD35EA796F0FAE8C8D1B087AE2E5C812A20D501575EC062FA53C211787564411BB9 -88B, 72D31C893CF3F9AECE2A479A5306E746AE3148BCEC235842200544328BE42CFCC9F5D278A2468EB50B39AFE638F46647, 76DBC9A41D5F374EFEDB84159D19F0AB6591FB28EF010D374805FB3EADB8EE5C61DD6A9CCCFFEE19D0B879B80D920AA9 -19A1, 7E97C237B41AFFE91BB48F4D0649BE139E547BFF39268BF7D712F706A5F58DD0DDD6998B21876B1319F2044E1611CB7E, 3835D45E14CD1FEBF565690A88070FC96A327499C7986E0AA2120A3851B8406C11F0E8E6075EEC2077E842338F89051B -4CE3, 3E84E54F9758844A2E19DD5F75524C2F1A7FB9A013F922A12B10B762CCC04F3EF512C3C0944630C66F8F83BF49B057F2, 357ED3F5AE4E080D513D44D9769DAEB77760EA7017FEBC8954E159859B594CE699F984C1FB81DF3DC6079FBF0D9CFDDB -E6A9, 8052A41FAD81A89F962D7BC2029A4C0B33A51575F5511B37417734939073406C5BE1CDCFCAA74911CC343A046A9C0122, 328D0ADD9CA8AF77AB7625167E57135CCED6C67DFE6DCAC9ECC9C7B2F8F1ACDAB163B42F8110BDAF9F205716554E47A1 -2B3FB, FA4BC4E48B13AE881DFB31B953472E252211A5BAB5292F30782294CF0AE44A7AEB4BD848B0733B514F86310664C31B9, 7C303D1DFA4FC9F91D53FEB8A73824F05E8220F8CEAC8B5263FF65859797135875E29B97E0FE1CB36AD166102DDFE2F0 -81BF1, 45366092F6ACEEDC97203918322AF857CC22A820F603911D9AB919B1F6DB7B3E2706106B26AD5072513B4158E7B92F6D, 270AE1BEADC505C38AB70605E98140B9BC8D60C723E01482C53AFEFD7034FE054AB4DD9675D93829C0CD26846CC00C47 -1853D3, 35553E6666FD10EE372DFDFDEC7B498B8B96E5D19CB105EEDAD2EE0F07BBEDE53E4E35859EC2141B0D978D7425871CAA, 671530392AA0827446973285C8FDEEE177714E67D1B13E867F4D8C1CC55EA6678DC6B1D3A438366130E3CCE762686FBA -48FB79, 12CBFDC3EF991F8B5F1A96BC1A9F32852A361E1249665C1DCB5004C1D42369811DA92B9FDDEBF5ED6FAB843FFAF3777B, 35B56F1BD1A096A6CA9EEF9424362505CB87E25B07BCF128CADB6695DE248B4690C43A2A95B10FFAC25029A7F46A6295 -DAF26B, 5ACBE6AC4C5A59BA659060F91BB536916D39BB975D9D464529302D9E38AB5E6D078BCD718651C7C3DFC5B7E7FED59A26, 6040592A4CE212427DDE18C96E1BAE9F22A5A12E7F2995A952410C0CC52BABCEBF005B0F671CB1D41841AC38B4F97781 -290D741, 6BE926B82CA459ECEC41229CC53793D8437D663374BB9CFC7A025FFDA80AFD4FE5EA45AC6F75370040F630C1A9798B7E, 12B0B3D38B48DC91CC87B77FFF08A2EE726A214254549D041191AE68B0EA1E77AA0E4E34D7D742DA94546B374FA2A460 -7B285C3, 53D6814BE4560BC59DC7BF57C285D2CC30FB208C645209D629001CA7B8CB06EFB4756900F992127F763CC66E4D83BCAF, 1F2C34F2141138AD4693221454E1A719265B17ED4DEF3AFC2C5C80A532C6B5B7D713BE9DCDA0FF6B553C640A973CB1EB -17179149, 72BFD79BC722703D04CDB46E8EC3CABB5A2C2A2F5B58E2B23A80976C82E77FEAB351107E35A5A55792D0C46762B33BD1, 6C76E8C985A5E38607A67D65B7BF8EF5F374D09138AA0745147C369270A97D5A7CE13BDF63FDBF87253BFBD78B2D36F1 -4546B3DB, CE0C5B9CB9422DCA551A66205E6C464A2150C8B548641B5894E6ADD3779572ADE50C170DA443DB89BCEA35443807BFF, 31F00F25D07F0ACF1894FB04FEE2EEB72B72D558362AC909312B5FB7B3592E796215A077539C0E2AA57055C2415C4F7A -CFD41B91, 537FEF15F55273C996EC44A0F2F1CB0D8CC6DE7F6A5F02FF8E8E35A8D4166CEA3920D79C8DB7CE3F8B5C9E02BC41A5F8, 7699994DA3891B9EB5DEAD54F71DFFFD44ED0F7E77E2E3BCE94B3EF671C54C0FA25233AE8ED1CBD4C491CAAFC23931C1 -26F7C52B3, 63FB87AEFB9DB8021A81AF0CFA3679EDB477B3D924153B815445B4C56A460D34C081970C22743AFBE940C303C543090C, 19FEEC42B235CDE8AE5F1B0DB3A05B10F15C7B1460A8DF4A65CBEF1130ACBAF808F2ACAB3680CDB360AC002298965D4D -74E74F819, 2BF1CD64B8755F64679E6A525F53FC13EC78D1AF59E607ED4473A1FC69C62D5324F846F21CCA91BCAC4885A5B3EAFEE2, 456FC7AF5588D802FDA9863490A21806785195D80E1C7DC48C4EDE266F911172F77BC520C76DAA5AC2A6F0FF6AD2672F -15EB5EE84B, 4EC0E0DC693E557DF1117C16552CEABCD3FDC25846A5A867AF345BBC4B215443F3BAF52C0E998721AAFDB58373479186, 475939E02ECBE7C6B027712C593B11D7DEDCE47F5FF2840BA7DE22E2EEB9F259DE95C5D97F3F6E087D6957F571DF1397 -41C21CB8E1, 32C69343181EB12DFB0AEE32A21C7358AB33F6FA5A799E50C85C930AE12988F1DB45E8AA950DE534A3173D6D023EFA76, 8613E7B061668AACFBACF78B97E77C928FB96769E2FF5AAC5A4E3B511F1456FFA813B75F2D87E011931E8FD1F3F0D0FF -C546562AA3, 7D84FDDE88A73198887B500E32E8F259293553100D8BF696544153B94594A2C0FB7264C265249FD2E2156FF336D8B5FC, 20DD98D8869DAAA3D97C3C39FC42A1C7715513760411E307735C833C33F6F71074C8C852E2B21A4ADBCE34E0AD6FEAC4 -24FD3027FE9, 19026356800D83FD7695CCFAC1CA88BFFAC592FE507F1674D5319E65F2D12BA85259ECE69A62EAA3EB58FF5F6FB921F3, 15B961FA914EF4EF28C88541A2ABB54909C077858A80737BD09AD9D0BEF41713FD86475808449B4B7E7124FF0139B32D -6EF79077FBB, 51C98E301F84674E193C1457C99D3FE9B02C3757B8B5D313F7613984767F6643F787094341DA1EB77189AAFCC7F7D4AB, 882CD52FDAF810D9A7F87B938DFA761D732B30F01E4AE271850D4C0DBE323E2911DC9B9BA4DF7F85B2F7539165F10891 -14CE6B167F31, 51CE47CAE779758D1CB74608C5EB93E456D614717E97D43421FAB7701BE0E19E2C70C03AD2734752018E7BE65B8F3A85, 75C41747BF044B18686E9731399AEC5F119F503050D04A049715CFCD4C2FA64708942B7F221443D4841A9AC0C1B09355 -3E6B41437D93, 1DFAB8ECC56A6CB9F82E8B1DFDEAC346A373701E9F5E8E4253E20C0346B9049A694F04D55C046A7774BA1FD353D49346, 8A06B0D49D74058FBCBAD3392D1EF9B30E800D2F2BE34441655B161232B7D0705344EEB3E028F01C941145826A7DDEF4 -BB41C3CA78B9, 8C4C8E50A875A789E34346A2B42AD5AA07C2882705066D17059D33F66757F538389E45553D8AC23D9D41E5A293894780, 504637E51A7C1C3F8DE829F602F81B822DF086AED0A768CDF7C85C469E1CC88FCA38DA751EBAC42DAC119306E7BFAA55 -231C54B5F6A2B, 52C823093F8D4E0AD8DB1859C370429EA55173FE9CC8D5D9D9C5053A74999E73D171A0A99A2D885D1BCA710A57D40019, 623CB59D038AEDB272ADE59D6CEE4292B0981D8A6432105AEAE9340FCD8A4EF45AC18B64D289E7CF78C83394A01DF8C3 -6954FE21E3E81, 3C4DCD6E6AF15CEC9586591711589EC38BC52FC1FA07D56F6AB57C9E11F985C0AA636A4270FBAD37521A679EAA5F84E2, 1B1C820EE4B4CE01222732656FF4C848D6FA182364168EA885598C8B6069CE5C802FAA2EC015978037A1C93E0492D52E -13BFEFA65ABB83, 1C104E85A011105C5CE04436439931B511C0510375B621A75DB61253469C935014CE6306FEBCC05DD877CDE0338849B5, 2B3AD764176EBAFB80D4BF3EE35D2C4B3CA07A7C1900A11699222E6363627ED8E2648C87600453ABF3BAEED263CA99C7 -3B3FCEF3103289, 78A969B4C4D79A141B1F892774D7D3555C2C06216304183B46A1CC26EDE7F36761651BE514518E995E4EA3811F3E7546, 1FFDD538B601366A2E60BA186F097CC09339BB1A231ADBDF1E52FC96B1F7DB32076790A79445DD59FB76EBBBF30C84F1 -B1BF6CD930979B, 31EDF379909BFFBD55F56BA399CE770BA3689E828B3994D0F859ABF1DD6DB1812D31156E0E614DE682719D2C70880B01, 30CD9D129C6FAC549B911D1CD683A6BB04CB0D57775B7F1D9DBFB94F8C162D5015D7F6D4530406FF8127195E15C78310 -2153E468B91C6D1, 89FB3A35F8A40D1EFE0DE54EE70558910823AE90EE87550767684A023BBAE2FFBB2EB2CE1155C84632754140C14295DF, 6F3099811ADA2F232005572A7F8E5B83B1AC45EBB9BE10BBE649638F4394C88D0139285BE32894EDF02D144AF4CC1691 -63FBAD3A2B55473, 1968664EB1FC5BE5C70418EDADD88F631CB854267D0A8988D2CF5DA9B4FA9A3468C28968F785E37457F579139787D066, 24AD6B2A90C3BF3D6B98BFFF419847D2AEEF5659333059EBBFA07A1068D1105A2179533E1F85214A809179AB1B507F37 -12BF307AE81FFD59, 1B78D9E92365F65C4E43AF92D0B8CA327C7FF5970800A7C87CF31F9DE401180BF061B410D7B06D0BE98CC10B3501B7, EBE4BB612061BF26C66A19B6A0757F0ACFD6B14E39D922FABD9ADA8360431894E20408CBCE66D89CBF3BCE2AD62CF5F -383D9170B85FF80B, 8C745F261782654FE45E2774D3708DEC8A2A58190BC5592198EA954C0D16EF5C3E90877DDF5DD7D122F129973BCEA061, 7908986F613F5E7680F4B75FE84BD12476621FA5EA89D290E380358A03D56710FCFCFBE36E834409F41EE9188CFACF6B -A8B8B452291FE821, 260256E2A4D5E29D7692DC9AB3B8AA2DBC20F94348A9F316E703E2B71C10EB6005D55F530810E23944CC77ABA441B9CF, 4CE8895E13292F8103425AAC8FC2A75177DB8EE62410A7C3E6F849D0BA6722387528D8B62BF810F3E5B30806B3A17B2C -1FA2A1CF67B5FB863, 617FF0D33527A6B08BD9A3BD33EBC60E0A330178A7A970455A17E01C601FAD6CE5216BD4419102D0A7384AD25C931463, 7A0F630C8EC838408171E432D0410C2B6FE0CC4B77BE16D641E3FEA700639FEBAA3B7902ADFAB601C9AE83A7A638ED34 -5EE7E56E3721F2929, 86DA00DAA1E5327111450A490FF709695466649C0780E48CE1BE8EE85870B1E73771DC5AAE4453763A0B141D0EE021B0, 2A36E7228E4964BC03FB1EB05637A85E19882FE3AE56914D595E684DF0B5C31C97CDECEFEA4B382C0A9CF225FFD7703 -11CB7B04AA565D7B7B, 8AEFB52B3A0BB612536259A65DFD0EA74919A4FB0601CCE25D66F90D35B0B762E00F84757F82B32B536795A34CBB9390, 4F348CA82B5E578D3909EDB00CFD927818A41005572008C18538D0C245737FEE10F9DA4615701349D2ECAFBEA6583E40 -3562710DFF03187271, 11FEC5EC8699E188AC23622004186ECD88313C0E5EDE95BA4E9B3B742480CABD3CB7161FC9F9C16B61E3B74F21ED4971, 5EC5DE2689929D8A92DDBD224883BEECFF5BE4A4A491BBD3F838505E1722194EE60FB58E4FAF98579B10A0DBAB5B757D -A0275329FD09495753, 195FBD1CCB5E2FC06F4C58866ADE405C257A37076E8D7E41029AC921063D9B1C836E5077F6334D68F8BFE25ED4759A9C, 334D20F9AC938F29C95B66DE29A51D1FE5D3BB351E1D22E9213B1122960AE708121C02783C70C5E0223AF1080D563799 -1E075F97DF71BDC05F9, 2042C2523BDB62E2D7ECB72EA354877D7976209A74A638898D21092B121D1768441CAA0EAEB45103D84B08EBC8566A0C, 69FE335867972F05B0532B31A9201F139216E45E84D5563B3C40056E6CD0C8040262B36AB59AF79BC6CAC37488BBB4BA -5A161EC79E5539411EB, 8A3CE8EDE84D2D8D81B1CF9ED165A065A49D6BF652717F06E1E41C69B83D6B3A0CEC6F8063B9CC79031F7E690655B277, 4FC9571CD509F99AA08EBD447A13C3F7893D041B47DA42F70A465BB83B832AFF0A4F983E17E78B7555ADC55E8B7D123 -10E425C56DAFFABC35C1, 550974E478D01CDF4FD0E21CBBD580B5560DAF537C947F052B5F8AD3746F24DCD902D967EED1E6C3098335CFDD2A7226, 2B54E9BEE083CC75F398EFAF86A9AEA30FDB5BD777494DB911CC940E4C699CE864B40A9E553AFD7A50F03362C1293106 -32AC7150490FF034A143, 1D0942F505020C5BB38FC20E613477FE8A506B4C98549D465C5967C615A89BD6EB03F81752DA448511E56F8770001298, 787A01051645C8BD6DCC3AD93C39D3244762924836F685E0C396FAF10C35ADCE1E77C851660F1C726DAB70453F89D6F -980553F0DB2FD09DE3C9, 1D5F8A0A96AE3CF2EE93F87E2740AB89A908AF903DA665A76B0E7CE2C88BC34AF34E7CEF250CC832FD01C07EF935F003, 412D0E0EA9029D4278D10AB84F1E600847B85CB17D8411602FF19CFD7E54594CE690A7FB9EF227C62C5F847D67065F5 -1C80FFBD2918F71D9AB5B, 4043BF490687233258D0708E537342ED62A3D4EA0033C8538DAD23DDDACF6CEC4F20CF81AAC603782C39ECBC2746D441, 31D4A0FC41CCFB0E8D2C69ADE8A20640C6FF46F3C27D4E59F267CDB97E6D9F8735FC578BA7328C7CC3D73400A790E979 -5582FF377B4AE558D0211, 188251FDCDCC8FF2C783A208D434703771EEF23327BB271BB1CD3070D5C5C6425E87CA216AD98D2FA8206F7B3315F5B8, 3DD8BDFB15570DE13C431B7F249A585E460E832521067C66CDD26A05910415327ABA4EA51A48136565FB3B124262CED8 -10088FDA671E0B00A70633, 1B8AB911AEAA93FBFA473264E8FE851094A85B0EE1104C5F6E50C34EA87F20542FD853ACE44647754604B71D90A89891, 2871563F1AE5EB45918C0E6B4F72162E8190FC1FFB81C701B6771B50277D4333E675C87D5D6BC7AAAB3A1AB767EBD0A9 -3019AF8F355A2101F51299, 3F69919668A1725C2EF63AEEA88E91B8E2EEA330C1A9FC3CD581D6D368DE3F595EA00AC0BAFC15F9462702B9146F3DE, 479B7E6369F1847895D319F2B73B9AE7D255A6D1D43E11DB7D99DBD98E9B5520AF35A79B4FC225A72AC05409B9A0AF0A -904D0EADA00E6305DF37CB, 8CA2773EFEC9D43E68BC53B21C505615132CC4E80C2BEF7117D110CA81A6CCB574F17DBE94D5C1A7A8109D852283A333, 6A9AECA98EE049E19C8E1A861AD341025CCBE7FED7457E100C9B595EE7ADB6932AFB7B075AEB76A693B05D793CE59C7E -1B0E72C08E02B29119DA761, 84268BB1651F0EFA75969D92B2F097E723593DDAD938F375A8BBDCC44700928CFD922490D844AE2DE9AA2DF4A170B954, 695F4A528246CDBBEC236399766DF986B831F8A6BADB96EFA2911E4683E233124C8EF7F1EE4425A4B63639272007E471 -512B5841AA0817B34D8F623, 3C85F521DE00185FE5B983FF88205BFDF90DEC91CF37AF20E9FA015ED6C5C3E1C711082E8CE73154E516106E90A3DA0C, 142C77739C32FEF99802CAD133D70D73663405656E5C07F67FDA291EA1B0B0267F7DF8C80DAFFEEB64677E99807E15A7 -F38208C4FE184719E8AE269, 71122BD6887945A437AC533A0C7AE2BF70F2A84AFC674A182A1A2CE4F06AD27DE356C39263A8A25FF2AF43BCB353729C, 5414E589099205A50BEE02C02AFC2F6A842F829BDD0D4981EF58289EDF480B42479A1A92CE8FCDC4246A9CB08C3A443C -2DA861A4EFA48D54DBA0A73B, 57581490E7EA25AB3D73811E1A5501014BD383E4B6B4DC1C3E7E13E54F1D07D3030535D3BDC28BCE7A5C3A437E98EB58, 20858E4A93F8F8AF7EB1C94E72A090D7B7B194A197EDB44A3DECB32D5DDF6AFDF47A89C96B0EE2FC01A222F5D7D62F97 -88F924EECEEDA7FE92E1F5B1, 35B27A02F1FA2D8B115C705B50C0F285FA36838DD48E0EB46AFCAF01ABD2EE76E97F124AABDAC86DE3F3D1D5A9C2909C, 83FC57F7178396346DA6C0C68DB3AF5DFBDE421801F11CFEEDC574949039C35CBDAD8662B6D7ADAF698080F291EEC014 -19AEB6ECC6CC8F7FBB8A5E113, 4EE673566C6ACDD6BD8ED9097DEA1F127DBE28EEF0F979229BE0588DD47BE24920F2CE81861DAB72748C0383EE5C2F68, 1DDD788D942A09D89BAC9E01458535BAE282D1813F499068B89F0D09798E7B86FC260511362243683A92F30003D1C484 -4D0C24C65465AE7F329F1A339, 3F121899DE094E0546EB745C7D29CE881F8415DBDBE6FBE9A56A1CF1284C6701568C367DE7280BAC90FCDB124C8357C1, 1AF8DAF63ABCECE0C731EB0BCA21229C5782C54CD8B708D138A79B9B74FA6A0FDB9DAED688E924B67B848B84F02CC852 -E7246E52FD310B7D97DD4E9AB, 229A3897BE33FC58D9011309D518F0ADDCC9E0E6EA5300A3C59D3F76F4D5EEE2897FC95B95C165D33E9BE971D19E8C9B, 35F87029F057692FFE5C6709C35ACAB539C11284B6815FB52518C9E4DA96662F24DB9DDF7384FD06A6B0E0A787EEB849 -2B56D4AF8F7932278C797EBD01, 4BF18BB4C8BDCB6C0DEE5A3D26CB40E5C40A67AE09999382D3497CFCFAC715DF88CA9D4F1DAE73900E87814602935CC, 7F0D240F2DE1A93E72ABA5796F5374C58B2A6E5B078BFAB255B95CE192886FBAEF8D803C1B110BAB3A2C0CABB76F8070 -82047E0EAE6B9676A56C7C3703, 45D47F426552F7E62B99668AF59BF0602DCD0EC7539A713B021E5D646D0F36578B485EDA780C88BDA928B3EF97AF4029, 7D825AD0AEC6F010E2C7D0244A3F3049C06B6E0A5F9D5BFD9B07F16381FC985FE80B1AD8C40485ED69DA6488DB6CAA96 -1860D7A2C0B42C363F04574A509, 51CBCB8926F29B2FE1678B626F4AAD94F2FB5B103832A325400F5C921B6FAAF60E85DBD317F06D1D2CB16B0CF7C13EDE, 89A009791E9AFAA264645EAC87E55E02FD99BEEB39E4D34E487FFE81FBFED9F4219EBD71B30FBE460DEBAD0D8C50EE06 -492286E8421C84A2BD0D05DEF1B, 1B9BA2035F9A60CA82852BC82B63D8591176C2AB0EF10FEF817E2497A6BEF7B9B52E7F2C7A24986223BF431D509EE210, 1F3DD4E87A1174945A6927CCB81AB9CAE102123993AC6AB0BD927789C6497C0335CB74F6FE3AEB70B100F435335E7214 -DB6794B8C6558DE83727119CD51, 5544CC080CCA8F21684863CD78C005A08166018763D7453011A80B948834F9EF0DCF950305C84C2387925D7F335B0793, 1F22F45030D2814C05BC474FF0463FA9FDCE3F1D84506FE02CDC4848A9EB3B5CC5CC2FA0C269C7DAEBC912868C091FC5 -29236BE2A5300A9B8A57534D67F3, 1FE9E6519A1E3265120C4DF80FA17E12269203FF93DC524D84A91DDF932D5BB1F1541BFD24BCCDA2A1D05E5BC1F1DA6E, 77E78E549C2AA0104F0678C55BB5C65D135CFB6A0F1BE5BD941208841A63EC1C59E5CC912D7094979C79A0DC154F7910 -7B6A43A7EF901FD29F05F9E837D9, 7B8CF6889D4B8B52665F4A7FFD20FF1DD15678AE572B5066AC60C2EFB3CDEF713BAB99F0304F86CD78F7D9575D01954, 73B2B9B9CF2B3462DD62DCE43634BCE3716670E2FC6B523808D0111B1083A3CA27AA28C053F4A6A36E99B074320B241 -1723ECAF7CEB05F77DD11EDB8A78B, 66193D870B7A0BB7FF9FBFFE7729093784589DD809A0B4041E5B5547381F4297E20D1A7CF8D4DD0A069036BC084AB01A, 40CD3762EA2FF6635E53395DF89839D66BD77F993CD8B9E8EFA96119CDCADF29AF7A63025FFA3FB084C3905376125623 -456BC60E76C111E679735C929F6A1, 3CB1A95B9C1D1161D6763BCD87253DBB44446A27460AD060B75B1152D4F52909862692EA1EA0ADCE06924D50FE93CEE2, 4358E5AE323FDA66A5A4C2EF0D677ADAF210E994D22BE60800118F26032FF13C999F21ADF2E47B928BA839375F5095B7 -D043522B644335B36C5A15B7DE3E3, 8A46B4E1EA1FA3C3FF1337F2279F0C56C7B264B5AA1C2C2B2EDBB3E7B9F788EF5673CFAC48B5B477B153A2EA81E69805, 3F4AC28761FD38242DADF5FA292821E590CDDEBEB055BAAC0CF403A479222B1FA94D8EE53199A77138B3415FD20DB5DE -270C9F6822CC9A11A450E41279ABA9, 39DCEC3619101D446EBD6048E2389D8B9938AEF43F4554F5331F89ADD2FA29CC6B87E427B1BD39D550C1B5FFC4D5DF8C, 91573436220E149DBB64877F1DC9FE026101B224350EF33F47DA0AB9C37D865FEF9674106258736E2017E79C1C72629 -7525DE386865CE34ECF2AC376D02FB, 59FCB9AF216506BE3CFDB23747E8207D1F5539F0A253D9B8617FCBDDD1274ABAC41E207C6FB6953621897A3E8DE67B47, 642AE4DD7FDFC6A51F72C0004865F62C7AB68B5448A26535F561E89A67803C4196E3B934413FDAA6A10BD183922A8AB0 -15F719AA939316A9EC6D804A64708F1, 36D36EE82858022BFDC77159B661C1D24808B4A5573C925CD187ED9E5A992EAB75F970A3F1D76B87D86C0B0731FF6706, 73825BC70187B48EC9CABFC6BB0B984F2FE913AFF2231E65C5941FD129E359CD7F74E76E1A6C3A65B942D6A61A37AD94 -41E54CFFBAB943FDC54880DF2D51AD3, 179D3592092FB82B392A3C9C6166BCB53E9BDA3CAE9D1B9699468C2B9410274275D44E75F81738B30D56F7EDE43F9051, 8A9196EDC6B0D93CE9CFB86A59062D6484436904BA5C4114B3AEB532AC189585423C0B6BCD531AB25C910EE771BCCD73 -C5AFE6FF302BCBF94FD9829D87F5079, 101F79EBCD80C0E453E0E58574F77C62C04751767E1FAF41AD8EDC102D2B00A30580B2DDF99E0427058EB04D439C7BF4, 3477CA75B06EA43CCBDBDDEFA4809F22BD8BE0617BC8D94EFB8EC5CD2F12AFB1454E4D66B3C571E693378CC1411AC220 -2510FB4FD908363EBEF8C87D897DF16B, 250FB5DEE433D94D01EF2DC7346442AE236A86921127D70CF1A0B98EBDFCDB103EADA311018B55BCFF8C585833BD214F, 33591639987E49886BE37486BB8C5D5BBAD9385FE250BD16D3CC5F2EBDB985E253C866FE395BF95C4C6911F05EE6D8C5 -6F32F1EF8B18A2BC3CEA59789C79D441, 83EAB08F6D4B94615955B16B7312F16497F24EF58100E5BF910FF393E1ADF6869B0962962809E0ED803A7B322C51B22F, 788F57C86C6D0BC95F29A3E472371A41E436D7DB67985E65027E7EFE7F16D51AA9F843065E3C7498CF5B449B91A1965D -14D98D5CEA149E834B6BF0C69D56D7CC3, 3AC168174CBAA8846DA3DBB109B08EC213C7036093417C0B6C5EF035BB7E86F9C9DD64FC13E4EFF88DA05C1082178631, 29A2EC79D681DA113EE9C329708A85E3C62411E8079638C1C83456A94597F671722EE493FF3A7BED8E51078D33B1E936 -3E8CA816BE3DDB89E243D253D80487649, 71578F44C04A64BF00A9E0538DF09B095D6A931C7810F5041392E02FFDE0D4115EAA056CC15B5F4CD40B3FA7B6B76A8D, 3D124BB4DA3A22A36CF487C8C5BCDEDADE8D71CD185E02CA22EBA908A78C7BCD0307EACD8AB61A4B3CEF3F1DBB21AFCE -BBA5F8443AB9929DA6CB76FB880D962DB, 1B8441DEC1299861BCF881789E291F532F2F591964D36024208F55DA51080C620E7B84F963D9B59ED2EDD8EC7C75C06A, 1F0A34725EACAD64EE97936B8B4383C161EE5CF9FA00D5C2CA3AC2325876820539A74702967A5AD46F3F13314CA8C81F -232F1E8CCB02CB7D8F46264F29828C2891, 5CBD3708C1B6E02D66C69566632240AE204C6097D0F3251429E26656E040F35E5C8DADC8ADC7DCFCB7AC2C7074909971, DC6345DFB478563D199B6C93D134577658192228BCE701938DAB15AC43C0EB076D381B6510C8447DEDF06003F417B95 -698D5BA661086278ADD272ED7C87A479B3, 889E0871AF482D879B6F1CDA5984CDB50E9A0F330C313BC17811CBFD7806D660B0D364B5FA0C0655F14BF52CDBA5A984, BA5CE4E346A892966C0CEB770D5F825078C1BAF57B32D7E81F160884DE036673BB18EC1481B05C100CB8C8E208E9A60 -13CA812F32319276A097758C87596ED6D19, 6114D9B70E250A81ABCB6ADD6366C86D5A30479E63C7613F3BB4C4110F838D56B36188F0B3E3B6F11228EA820CC004DC, B17A62EF02143D6A3D5CA0D86F3E99FC4E3EBB7FA4F3C24618298A5B452679C1BC34B2CD4B9F657245A2088D9068E20 -3B5F838D9694B763E1C660A5960C4C8474B, 244FCDDF8BE5EF542E3E7119A72B65E00B75803108BAD5C815D870D1B196D01A2792B8319E2894125C5BD210F4D11722, 755F2C270560527C96F76965CE66F7263C2009D2A59CBD15AFA3D77C8F60A59D167523D69E609C5035821049C1879FE7 -B21E8AA8C3BE262BA55321F0C224E58D5E1, 49C418DFDC13AD70414F155358158B3DA8CABC6E0CB31078C54843D88F16EBAA31B9B4835F57C7DACC7B7DDFAA40C866, 397174372013E6133A5335D27BB28DF19D104DBAC552B8AB60DDE606DE762F6D18F7FBE836D83276015DBF8F7A19514 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 6374779E29068536586D73BC611D6124382B6DFD575FE7559E5641A1E04B892740DF2CF3017988CE112FF5155D3CC9C6, 7AF54DAB79C5F97150CB600B2BC045F0D0A912315F392B7E104090551C30BF4695F721491E6B26DEA7EAAC08F32A56CA -64312DFEEE1AF5788CFEC3176D34C11F84E9, 520ADF68E6EC9E73286186C7A208E8C5C6FAF137EBE7A39670DD5E62629677F22ACCD021C0EB04224FAF08D1B120590F, 155FA721D1A8F723807DF60748C51AB4C753C97CD7CBD9089B38907B1AD1F8CCC6A796A3CD0EF6BACF42651A0DE4A9B3 -12C9389FCCA50E069A6FC4946479E435E8EBB, 51E7711F81AEB1E4D4164293596F56F4561DDAD0A6D6B26D12592ACC22AB9169963DF719FC48F4D53E99A760D56CE68, 62FC0A793DEDCC2267D831A58AE894C753132D99C8E201F7252AE24946173EE81FCCDA21860E57BA2B6CF1CA7E69CD6B -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 5DE047E05BD0E2689397AA7EE4079D03A90F2D4EE79E0D6FC95E830F49189514F31D7CEBE6A1FD9087EFB83A4E5C70E1, 29BD751965301326C2E8A78767C04A850F9A9B9459FCDD943F0CE35AF71ACC6B84529AA2B5C3DAFC566067D586BA6A83 -A912FD9E31CD7E3B6DEDE937884905E530493, 29F8EEB7D5BA130AA28BB7DE237C46776110A8D55F70934E1F6A9347D3E8B3D85970DBD8FF0F204747A369C603DC7383, 79BA3E1AF70EA73C5EE4907F077BB5DBF55889E9D5806CEA1ECD9DFBA9BAC24BAB0DF311B5FA1DAB6F816CEEF91315C3 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, 117A67D649146B84F7B8F78F9E45344810E1344609ECFD234C33CAF4F64211344E2765B945EBC5FC7E277B27CB5AE4BD, 3268B6CBDA3E1B4437298360B08F0C42678EE34DD5D378064B6DBF501E2F79CE759CE31805FC80358EC40EABA52002E8 -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 40659FD6156929B77EFDD77AD16CB5BDBC5FC5D0B20C8BB40A5FCC253B09C29BFD3809B6BE5D4E9D2C82258EFD3C0865, 206B1E2876CCEBEF293C83B4D7BDE1B137B3A4EF8E4109D28A0882806FB6F412D6FE57FA08FFE9021727C21C2F26DF30 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 60DF8A188A15A26F336814CC871658C1C27D5BD9EA88AA75482E93886972FF01FBE8A81026A94BE09470947DA9A8309E, 2F9BD1C09617614946799CE1D95FCD2A1ACDB2E9625B64AA9E9ACBF653F794FE5A7E0749A22089941409C1ECB1483A8B -357F023F0DC204F0CDC846CA921F1ADD8447283, 2AFF1FD98802B64D3ACCF36AFAEBC30F770D44218D61C8F24469FC0ABFE115B055FD64324997BF7BD6F801E5FE6A7FA, 7A3169153AE96E0E194A2A4D830C88F1BF7912506FF5CF4C98216B309B8630DCC02C4CF2EC0653C56163860857486BB -A07D06BD29460ED26958D45FB65D50988CD5789, 302102BF1EAD8D266C240E03D0C58E3A01D89B3AC8A091C3401DA47A6E13A2F4716635305FC737DBCA3303376822A7D7, 162BB81C52E99108494B71A9B83F565AEC52FC4CF4244E7045B885F18911A3E3B7CC87DEB70F92C6041F318DDE3EC4B4 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 52022FA0712BA2C7E4E7A6929D777D8503BEA1589DF60D3CE8A2806FDA466B95AF603BAFEF82B9B37464B7BE216CC1DD, 7EC9418B72220C1F83BD157A095AC92B1D35E2A6E16FB5C59D43F436A301442EAD46727655EB6CFA508D137FDB5064F4 -5A4653CA673768565B41F775D6947D55CF3813D1, 45B39BA326C078B3A128E9EF093172A9E125955D15598E21041590F62ECFDE41C5FC129A0B7A8BF88CF65A3E6BFAA5AD, 11D0743BB6C4361B652B36A30BBDAEC56ADC5D4B5D6C58B854C7BD417580853731D95C2D7909AEE62163E3DCF5A8B464 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 3498FD7A96507CB21DA9ED20A44746B26E6B64552A4CB462245257C6D068B84986FC210EF50EE9EEE81BC8433875A0FB, 2C78EC7BC09105584BD21A5EDC2800E7C0D7FF5E9D75E0AEB28CA1C0F959DBF86BA356055A22BA91F3074E85E1637B83 -32C78F21DA0F2AB093551B3248B38680448F8B259, 5F7C79F9E704314A700081D3177296B2B6E6D9C34EFF40D71C1FE6F8CF673436368F55C31B9A7D3E5F42E7BA57313A81, 67FDBFE519D4A726D72484206C95281B3E74D5D3D4B4D2821561222B3378C91200905CC67F70194D59B66BE1ADB3995 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 2ED381A1122887EDD173F3A556A95C5EC4BE1FB498A0D6CBBADA007AC46C768D4957F818626BCD25B88A4380E0BDDE9C, 4283B717365CCE3EAF535559E9ADB4079A7AC42388606BDDF32F7E8C8950E4DFF6D4D5283C5D58D1C3F42D964D95C9D5 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, C71FE1CDE23491586D9A1961E2B372D8C8D4D00933E59F738BE2CE073508B033466724C747A8E5DABC8F4978C02AC53, 145275A0C6471F6CA0924848F49EA53CB2E4C944CF104ABC96F9B87B05106F11C96BBAF436029E1C5CF144C624E73EBD -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, A0B899C6F89995E8AC67FA0BB155A1C6CFDAB42F9FA1CE38EF5322E3665DEE520AC2CEE058902A24AD44987EB62C27, 5971ACCB4C47F3C7EC61D11069839673AE895ADE89E03E0D351FB066D05CC6AB20DF96C005E6FFE42734BFFF65E81383 -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 10BF9D368F5B574492A569F73CCD8062E062D9079A8C0A19FC0D17DAECF34A24B683ECAEDB822C2CB60A9F0A36DE0291, 5D0D54F6935E8EAA7AEB5E9E41C9A6949A0024D168B2446BC946294CBF606713AB9A34213C27ACF2D47B2923EBCF8535 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 31E0F43A6CAEF04BE1E1A6BFA48F5AC87CD66D8BA6CF7195C45DAEA15246E7A181800CC18A2946507D988E87D8E9EECB, 20AB12477EC9260964F6A68E319A248037D631EBC9D2A7C3342708FBD68EDF9348C538C3DCEC92B1EE4EA651E6F74C -909A469765F53090D38D5A7231073A03433CC33DF71, 834A15ABB1C6E54523F66375AC2277D3EF23A4745E0AFDAA1A6A5645C422B435ACCE74DD18339F890373D54A209B4F65, 1B911FE077679740D9FE96441762C7073DFEB1127A75EAEA6A3D606DBFB4E83BCCA11E9145F719559906FF4A353AC8F -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 854FEB95BF602C88763990C52659DD786C1E6AD95A0DE0E3EA78E5A3AEAB10444F946DD85643E3FD4E7F74FEA737806F, 7F9B19402B313887464FAAF59CB797887D7B3FA63B7902DC9BDB1A35FD408CD11F704CB658AA10A4443BBEC3F359ED1C -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 4DBBCE71DEE25B9C1F74DD7103901F45CBF977146150B613E780FAEAB2B2A33C7ECFD75A318AB1A9DFAEC3398DB99135, 7643F23C344B93D736BEC2E59A408EA4FD66307866346C3908A87DF4D25C60EB0DF26CBE2833D9F2F562D53BD72C5434 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 4209658DBB0A9B686DF0E58BCBA745F18FDBF920CE691E7CF74AD661E58FC482DD214E50489765BFFBF5330896919786, 40C6588F35BAADC499F2F3A944B71E40A7CF6017E0732BD7C0CB2124689DF6E9943DD2A43EB3B6C191E670C4C8FD68C8 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 1B9724547761B84C96A009116EE25109B4ADDD926D36D8A6068A7EBF7BEE54518D994A2400260257281702ECD29B1FC1, 1B1D4D0320288BEB39A308D4D1659B2D98B86883FF4AA4B0CEDE12093D14A941F8500E3D7EC4D8636FD8FBE0D6DCAC07 -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, 22919B6794E0DA6182CCBD13737EAEB1BC5FFD9E7B02AB576438403D5E33DC8EB6975EF5BB5A99D20124090962EFC52F, 1B8491DC34383691736864A9DCEF1AD0488E18E408BD01AF1D60DB61182FFFCB28D4636E2FD50989FBE9522428BD2696 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 5405578AA1AAA75648BE139A70162355164A5C66D21EF666E5B69F559B4ACA3D92747792110239D631F6DD5C81488D5F, 22196B29B8539E95A39FBBFC29B48F372DDA43D56F988A8BA2A2DA2941A34D2EFE7F549EB2A9F0EBF50FB3092B6EB654 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 70368247C935A844C4764E15809DDD3B24090807D4CAF3BCEB9377FC409B0E66F3BAD688FC1A37F4447A27A9FE3F63F4, A8FD0FD17094543822D6320E7245F4A03115FD2D87ED042A22696511C71FDD8243A5698101D0165277B1C1D310735B6 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 8BDEA864F9D4E0583E89EB104EDD6F9C059364474909E997572924A369C6C8943C6BF7D662B725DDE2587C84FADB8ED2, 6C44EBD93FFAD51C2E4048C763E945F31C2D697A74FA118D398B5F933B40FF2B429D0E61BCAF974C6467C27E4F27DA21 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 146EB8631AFC4D8A2B937A90158A383B54EEEEDB7EDE6D108695F433F91ABE754D3178DFE485AB3FD759CBD9F9DBBDC, 8A7BC26FC555D016CBED908710AD5E272A4E6FCF8E3179A443770FF3CBE5FC463F37A25A951065637E503BBAF69106BE -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 85FBA99D1B3D2017138C37E31104BECC437420BEDAEDE38788FFA9213331DBC3D80209A2EC9E31C21DB8C7F87B0BAE00, 4AF785E8A5CA6290068FF89C609C43197BE7987BF9ADFCC2DC37EC041E3D8835968F35160AF5E6C7821D317813548025 -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 1C4813CBADE07968CB6F1FC1C2261D9F6BBC4F1FB16CA02D02CCA89F8DD6812984295F28B1206CE7537967EEC29CAD83, 2DABD5E2A75406BC5FC90504BDA2D691DFAF1252EEB119DEF31C4667C85F0B8C3A332C424CD55B5D008115186CAB4C87 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 3A31BC324CFD65F07B5A0E54DB61AEADE551DF67BB384539E5D4C20BD99D855843D06AC273484CCABA6AC2452FC90DD6, 21D7B5471A3B475B6F81B11A9C30DEDDCEC7AF3B9FC9ACA9AB99EFD28B39F214F390EA6CA28C114F39676DD1C9BF9CA4 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 5805A33EC23E05CB68119CA519B2C75B18CCB44CDE7A6CB4C95AA003D9A3DF5BF2AF0813B7507725C970556DC12B6034, 46BF1DB5DEC007C9F81898E77184F21C0E13833A1D06ED0EDBBC7303A046B60ED7E22183E0F142F314A1E74C4D7D6D2E -29396F76B67B7C403D73A1059B80139336878E44938606769, 51896F64395ED56D354135266DCA7FF2F6EB340E87F57917D06A5E2DF8BD8B41837DCEA7C6829ACC5F15F1787BB3E595, 4AA28C753B3F7CC7D87332191D9F561B106A58467D461EA3FA1D7BC37A25D57F70821D306DAE653AE6AACF9C3EFF1AB5 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, 543E7A4DFA2BF6B36E6B18E04E8B40A24A7F1E3215506705CBF3EAA3FEDF2AF90379AB79074E7A6C24FDE3AC148AC1A5, 2721595CE15E2AF7DC820FE825C1A468387D906CC71C42440A598352BA3BC039CCC47A4E4A19C1ECE7DCB002EDAB9BEE -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 2B5A25FEEFFA50FE6380737AEF16B2115A0F748B02ABCD162CA4EF3450587F04EDC88590F81A0C20CE620823BFCC2B76, 12ED5A2E5F2F87D906010C28E0329927AAC62CCF79CAF6533B5E362F49F57F662A7A81B2195655AEF2AAE25DB234728D -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 835048D709AA402B02ECA95F6FA69F38BA0378A429813369FDF36B0125B3EAD838A0983387011D3D7C8B470618F6D036, 2895FD53087EDDF63C83E8A92D085EB751CFCF4378402F5A55368CC3207BE78B3AC910BFB300E2513102DB5C4C4108AC -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, 304F047F77A27B439482163AE208DB349E23860D7DC9306C4327A0BBEB7C8A9D5922F5F235922BEBBF05F779400B2CB0, 1CD64E639685A3B72BDC6B54662429E57305C89F66CF9FFB0072932590D45CF4EF63F4B12270B8262FE7C92CFB89231C -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 30908F3786F64A38F187E0B47F8F58B2F12A0DD261DC5F1D8785C1FF9A76564D52CCCD6CB7172CECD5B8E38619BD4302, 7290DD7164463DB34874F12B5995D4301E82B5464C85637F705EF6652A48A56B8FF554E43F1606DBB8ADF861FEEBD68A -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 5E1AE590C963E2639202FFF5FBD24052F22D8A8BC84308312B6CB04746ECD41D63A3F527F7FFF9B3E9B025394861E86D, 6EB6AF78B934C04058AF6BE2A14F6FBC67B385607C3BEBC6DCE00AAA0AC6511405E36712973B43CE250FB31AF757E006 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 528E163FA774AB57025401831ED3D3475C71DAD4339EED3E523C7111AC588BB1A4E0BCE106A1484BC30F32A58EBBCA74, 451BBA51A39A735C580A358A48F5F193838E98A55326504846F4D206C8A559702771007B8A30BBA7DEC5ED64DC4BC8E2 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, 19B025BE6FE79786448CBAC2EE21F2475030CB2331616B261B055F88465DF08FB94F44A7303CEB731CEB3E5350EDF478, 2E9278315978EE23C6C2E9E547ECC18E51835C72FF9EDCCA8DC1694282E6AC46E72F45E9FFE8E64397478CD84666052C -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 802D5F1F21636FF4B5E8C4DC39E84CCA502D73B1FC94346C1640283AFABAEEABB72B6609D067AD834E86033E28D506BA, 6845645A8E5B200CAECA8C6D4C80D35B22874F99FF2C7666E4895A5A2D7FEAB022D1FC1AB4299FA6E5105F284906C7D2 -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, 5E0E9BA3A43C35C847C156A7167371315F668201C8C560C2AC9F0B3041A928AE6F927E8D0F819DF8CCE68A324E75FEFF, 38448B79EB13CED357F93E11792064C62E6370FEFD7B9A568D3A047AD4995334FE2574CFFA801F92CCD46491F3499C37 -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 62056FEAE0B7CD5F59F6FC1C056575CF027078673A2FB0B2648264BB9F63EDF3EBD6DC68B96D40C98DDA63311D5051F3, 15B1897E1EE35F618D75F3DBBED2E793250CFA85B0D9F475ECAC853C61A20BD24E3DEF13A2AEB168FB55CA92CC0364F2 -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 519C23EC0B61E52897F514BC435BE7F483DB781EFB88292E4A25CB64BFE3B8391D283B3E18285870237A84D5B1888686, 853BA2A2B858A228465B5AEF52560FCA99FB1C9C88508B832246AAA68A8AFF75BCD6C12CE3C24BFFB2CFBE05079D1768 -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 25FFAB27EF43371B6B76D9493FA4047BBC0854CEB60D52C0125978EE604708815C578C2CA155334D936D89ED139A21B, 47F24E39D09E3A305AF9E8955C04454251E1EA81BCC86B5A7517A75148F0B4C9D51E27BC56FA4A3E5DAEC4E42B82D46F -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 214833C2219182C21A834602791C0726E636630853BB26E35E73AB43122F904DB15FE3C6DA669AD4ACF2B8A79213ED23, 3619FD42CFA63E136E3A9E5317330BA86CCD740094974C97A1822B1AB05D21F55864D924374C722D5A6B7D960575C9C5 -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 2A4C1DCCFD8B97B5D446E866A9F5C46CE36B2CB78BB88074B88C94941326C966783AFB783A38945F7BCDC7A686792F05, 55775EC97B11047CF84177A9875CC264279D17603AC4FB1C02CFAB668161AA31218E5FB8D37E4E0E809E6887077EC2C8 -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, E6F86E87337DC362AFFBFAB3457834490AF13F404BAF3EE535CB5246323F301D23B0A017166B5DB8BCD6E8A7D26FB3D, 492D994CA8B1CA6AFDB1D7E93A0E3790161E0A4E1C1651D0E9D2D7328F8FAB742D9DDFDE193E6F8FDE2D5F936B808161 -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 212DDFBA04626A0E0164AD0B21A8FCADA23B6ED8C9D609004A26A4C99328F901E3498DA254101C104DD419B5E8ABD3A1, 6066E709232F7C2844042920D857C02D096D42C327E3FF0028DC3D7CD700198FC5ADAFC97C75A8794504BA1AD8473854 -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, 84190D329A0A9B8030D15EF1DAEDC748184311DE7A54405085D34ACCB5B9DE496DD046E3264276728F30AE65F3E94B6C, 88206B58A081EB867B20D6F2EDD987F377292520FB79F18EB006542D80A108327C7457CCE69BF602BD15CBAF723271C6 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, 10C760E0A05D19DDC7523D8D09222AB68FBF19AF0F57F012DAFA6E266C46E804FC85AF6690E4C7EA93EE59B058FC13CA, 45BF5B65993C91835E31A1D3A64787F039A3E97D3762F43A450F534AEA459D0CF1E44C118EFC7B52D55013C3A1462A94 -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, 189FB56F1BD3CE4663BE2201A931B5D0BE7189096FBBD700BDDAABB5214E9EFB6F4DF0A6C74DBDDDE4D14D023254C6B6, 562A34E0B3FC88CC1C08A1E984B98F2834E3BC1DFD98B6DFA534664F29E27BEEDF366D2A89F30AC1E6EAB2E4408E3C64 -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, 85EFA24416EB096EA11FEEA5DF0609F7710209921577575447AB50374946DB9A657E8FEDEE02A1565F6624C5559034DE, 85B21039365C0B36B5298611BBA5BC9DD38FEAF846B3618465892F07305AECD2B4816A78DBDABAFE1B945C0EFCFD657C -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, 2A6D09D8660FCC9B240A962932BFEF2E0E84171C133F54EEF3DECD96111AFDB5FFB2E9C82DEC3E9E6C4AEC973CA870A2, 10021620F2A92093E3824DD1CB52310627AB33749297F0A21A692D9AF17162C1F7E72C1246AD9E6A7DCDBD94C2FDDFCD -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, 35FF970B4DDCE25C9D68D4295C7E79C7461951DB91D922482582EB177BD8B27E3D0512D5A6099F34170790E50FB917B2, 58ABA92842B77445913FE23C578794214643E99C10E27F2CCF5C3DF015276A04480AC73D496B3851ADBD50FB8A1EE17E -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, 80D8C8047A8A4E59D9AE7BB2155014BC7A41C7D77DA08E6A8B1DB2D68228DCB03BB6463D38AA049A9710C3ED41AA3746, 8774645AEBC4EEF92EAC10B8C049ABC7104EC0FA09B9E7301F92C688A5AE5999E984AF7AD9760160AFB98DA42289366F -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, 5332BF940BF7C08536252B78C61E447A677244DBC016E57D36BFBEE253F924267FA8A74B4AFDF1E0E672B024A245ACA0, 872D9B9929E386AA58583876C2348938A1A5BA850CBADE438E347733293C7560E9C8C3689443420F181F1C30EDA624E0 -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, 86D653F57FB7883613890F1FAC74F4AEDB1A3231B85B914139DD41991A5D1DD3BF73C1B47C079054C273059E10D0A2BB, 185FF494A73DFF6D21D8106A426A2DC812CE34B422A948A70BEE895AA2EC28871A528E59A27988F5961F32DD2B4A4C21 -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, 6189100FCA723913AF263352B1BE32B343769BCD979532BB27ACF45A51F8D2CBFD48F79AD3DCF47DF94B7BB5EB265760, 7549DAD87410AA0F8E1EA8843AB6C529FAEA46D6979DEF430417E1EEA0BE446B88AFCE22E8EBD4C521C0843288D00104 -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, 5AEB4E23778980B3AF675F3D95421E0F1ECEB1F76C3777409AFB9A7F3E529B8A972440068215EB604C896D4A46293091, 1894937E6F58DC8743DFB7CB05A947282B2AC94EC1828EA1CE1CDC6771D94E514BDE0B27CADED6DA3D4B9A96DF68370A -A0D2E82CA5E358392DE9951D10B533E405FF396E226444B3B8F22B54A64B, 1D779DA9D48BBE80B4EE99C19F34E7D7BE84A59CFD88CD8613B32F36EB3A040D0B2214F07441A4EB1017590398F165A4, C126BA5747C4DB15A9FDE40FAE81C252B17F8AC298813A6973259AF0FE82D038CA1F546DE08E635BC33DBA68F2D1267 -1E278B885F1AA08AB89BCBF57321F9BAC11FDAC4A672CCE1B2AD681FDF2E1, 484621DDE66502DCDB2441854295D58FF17E39ABA6D8C8885F8BED3A4E50BAFEA68376BA8AAB01D2E4C9ADD484455954, 6DB9E43BE9B720D3DC3F2C38D9AEE0E29F084135AAC83B8D8269B10B1B7AE26B92C71D733A44E3F479A96177E7E8AB4D -5A76A2991D4FE1A029D363E05965ED30435F904DF35866A51808385F9D8A3, 583B76AC755FF6DD449C7D33B3AA59C10D5A606CAD8C2E174125CFAD3CC2BDCF774D16C30281FFC2AA18D5BE0B183296, 578B006D0815A335E4DB32EBD5F09AE0FE98B28CE15EBA0A9AB806C513F78B0955276B5A634AD47741A687AF1D5C75BF -10F63E7CB57EFA4E07D7A2BA10C31C790CA1EB0E9DA0933EF4818A91ED89E9, 45156D39B2CC69C014BBD0C5065FC4CB01F492377791218FFFBFF73A985B01DC7458E07A5ACE9F35AC0B98542C01A697, 7849D6DC6ECB4876069B512DA005C33D76B6DB5A88DF5312C1A4D084308B30142E87AE5D4E71C2D5EDAC0E99E0F4D761 -32E2BB76207CEEEA1786E82E3249556B25E5C12BD8E1B9BCDD849FB5C89DBB, 12BBD00EECD141C44BF5F82CC0EF5FEF5A7F1AF02878C7DCFD04D129FA063F11F9D109112790594639DFD3853FEBFE15, 51F50D6AD160977B2307E66520F402B7BAB56923E53C9856A90456069098D05D78D3D44E9D21945D1E160E58C39767EB -98A832626176CCBE4694B88A96DC004171B143838AA52D36988DDF2159D931, 192029E42F5A230632F9E2E98A711BAE00E8533F7F510CA0E175F9B87B1EB0D83B2ADBEA10DAA9989F662BB3EDA54F16, 886051C718D29DD2148D24A16CD966EDC232C0C4F2BB34F16A597AC2828D6FBD35E474C522091E22B3C813ABD8DC968B -1C9F897272464663AD3BE299FC49400C45513CA8A9FEF87A3C9A99D640D8B93, 44A26A823C48F2F5E92483836A3B489B2AEDC1B1E04F90285921A88453D7FE0928DC539E34963C0AAC9FB33CBE47E214, 1D9BA5F9742DA094C6937C97C365D2A6DD78EAC32ECE3EA352069ED9E6F8A3F57F5A45B0264F1DB8E2F5A235CE3AC094 -55DE9C5756D2D32B07B3A7CDF4DBC024CFF3B5F9FDFCE96EB5CFCD82C28A2B9, 1EA6A493532BA83CFD2377D56626A44D2FCDFF7CACA925A12524BC7B61F7E8F98BC46BF34474FDF91BFACE1F22B2D862, 40376A518C5D12C0CD34BB3FB8D1937C2EBD15193244FC031AA06AF8EC981E1AD110F12CDC2D0BF50EDFD9C373E2AD6B -1019BD50604787981171AF769DE93406E6FDB21EDF9F6BC4C216F6888479E82B, 7BE0798AD4908E838D6DEAD359AE554797AF332D518F39C89D526B65AD0D1DFDFCE3A7E912114C93E69F486E619D18B7, 6AD74D84DF15CF31AF516174ECF249824F29B5DBAE1C655181C89D72F1DCD0F3C9C5A9BCD427341CDAA9749919651DED -304D37F120D696C834550E63D9BB9C14B4F9165C9EDE434E4644E3998D6DB881, 203AE05DC6CCE5FBC1A08495FEEA5803EA4AF2E59BD6EE332CDEB064B88525556F793703D00EF4D8565D38A95FC8A4DA, 84D8870DE5CE1B0232BCAC30A6EAB697E67683A130104F871F8D7CF9B093CA8A980949D292B88F8C6309083534F5976C -90E7A7D36283C4589CFF2B2B8D32D43E1EEB4315DC9AC9EAD2CEAACCA8492983, 2FE9640A0A0FA6FFF26DFE199ADD45F1E2D7842B1CE55D89C39EC94EEC639DC0CEC023EBABFAD84466E2171F46CCA1D4, 2711B541D9451F79F86DE7017171E640F422783FA62F4B6E782D1E5B815797152AA8E848AAF1EDE611494CE585A5C510 -1B2B6F77A278B4D09D6FD8182A7987CBA5CC1C94195D05DC0786C0065F8DB7C89, 20F6761A6D26561A6E3CF9E5AA35431E65332343C4A789C1DC0BBF9A681792F6A6D0A475E29ED784B7FE1C217F49F92C, 2BE1A897E68481512E835E26F5BED846725E323AE272251D5FEAEC5C367F9135522AF530AE6E2CE46CB4B33854F6C84C -51824E66E76A1E71D84F88487F6C9762F16455BC4C171194169440131EA92759B, 64D6B0C1EFF75E69883D0E23ABC55E4400881BA45A5AABB6E0D32E709906EC0DF157970ECF7CBD00833F3FF0D7C45E3D, 529D117FB9199E404F913BF06165F331B9CD5195D16646529B45215EF39B92CF9588755B7C90F18A833D9D82C5018A4A -F486EB34B63E5B5588EE98D97E45C628D42D0134E44534BC43BCC0395BFB760D1, 20C8B45D08BE272026248DD1784AECB190FC1FAD8080AA6DF4EC22779041F30C3DBDBEAAE94CBEF65AF9B38ED0CCB0AB, 85DD2B3975EF4F1C29FB5A9584175CD857AB6801F1912DE7D0CBFC32052432D5BEABC9F6A6E73D9BB2BE4FB7999E26EC -2DD94C19E22BB12009ACBCA8C7AD1527A7C87039EACCF9E34CB3640AC13F262273, 8E6C7495CDA878ECBA40F782EE0E22DCAB06801642C74C2E9BBA65C9CF84ABC563C1D33E8528E62F3FC31B6BAB16CBF, 4863DBA90AFBBA1D84E402A4A72A6B40D57295B9930943D308A22896E0F9BCDEB5677F80C030F9888182713BFC3D58A3 -898BE44DA68313601D0635FA57073F76F75950ADC066EDA9E61A2C2043BD726759, 1ADF20AF6E113BD865C899AC59844E650A7445CB55DF9166C7B3A93603EC66C66A152458DC00D0AC06E4567659357E18, 5A49C9CEF0F7C675FAB116B697386C27C242382BD4066F2BD6645EB963142173AD4EAF762E6ED3B617DFB1434E438FC1 -19CA3ACE8F3893A205712A1EF0515BE64E60BF2094134C8FDB24E8460CB3857360B, 8A2BE2C1AE5BB24AD4AA997C240F1172E93FB6BC053EBC4757CD9004F869286029A3BDEF2B0F9F4119C709841681D30D, 397B86315B9A1BF966548EDD1B2E7324F8CFC7629AD259D66E57C5B750FE852D2F8626D8016FDFDFB393314F99FF4E6 -4D5EB06BADA9BAE610537E5CD0F413B2EB223D61BC39E5AF916EB8D2261A905A221, 1E74BDFA78A9A8970BB26486E2FDBDBB8A2648A446E13227403342287ED45DA94FBFEE769EFF75894A0081B47D232404, FA8B0A14F37269FA0E807F672FC2FA27C798314C5C61CEDA544C27BE7887D2C373C7D6553CDB5863E37B62438DE6DBD -E81C114308FD30B230FA7B1672DC3B18C166B82534ADB10EB44C2A76724FB10E663, 5D05600EFC79C5725E9C9D0EDEC32D06B4295A046ACED0184A1A2D3E96B41F37DC0905F87D63AC12486220CF510BC7FA, 523AE9B29E78F473F1979C5B2B3EF86AF798E1FA7C2863AA7651874BC6EAC3E870690AAABDC40ED2ECB5C40D7F8B459D -2B85433C91AF7921692EF71435894B14A4434286F9E09132C1CE47F6356EF132B329, 4E4F9FB10544AE2B53CF34892800723A958C7354A328AB9F687794D969F2B93BE60AA2FAE8A5961A35BD331922788DFC, 89CCC2E8CA7B09D5574FDBE08F7C2CB08519571FA08563898FF43A2DA405C40D2D9D93965F4CDBCBCBABB5EFB2A5F746 -828FC9B5B50E6B643B8CE53CA09BE13DECC9C794EDA1B398456AD7E2A04CD398197B, 5F1803523E048F01235E601A9380B4A76D1D2A6FE35A14AD54DD25F6A757FC73E3DD6AF4C621E8E1257E8071D75B0C84, 378019B37EC7D54C3782DE752B7AA9104678ED45DFF587B88AEFF477678624C769BDFC4F9082725F8EEA9A0243C1BB0E -187AF5D211F2B422CB2A6AFB5E1D3A3B9C65D56BEC8E51AC8D04087A7E0E67AC84C71, 13678592A27A0404ED104D0F9A63D969D5A076FC0ED586BC8C250336C3C7C0B7AEB181946F31020A87849721EB060BD6, F32B3E8A55DD521EFFF1D69171CAF792E4223EE99C3D8EB926E3BC413F22AF840C597A225FE4D8E118BCCAA4048445D -4970E17635D81C68617F40F21A57AEB2D5318043C5AAF505A70C196F7A2B37058E553, 1F6DD9735D070A07CAD689351308DF2F623A5722594557AB10B232DCF5ACC17668A0565A4BBA39D880ABA2A4F9362263, 9675E338D2819908E0B6DA802B4807021B827DC1D0CAA69F92DB8C7742F9F5ACF19356AA94ECE37031AAD62A9B18D11 -DC52A462A1885539247DC2D64F070C187F9480CB5100DF10F5244C4E6E81A510AAFF9, 3162F2C52679279920FC7639AB10D5EA6F789DC2D886282D2DE830168B8AB1766979CAB47EC6D642D217814856566D1E, F06328E81C26B774FDD6A881D0057E1149DFDDF677185B566A0132575CFBC122C633AA5840B47D5254FA6A671124CB -294F7ED27E498FFAB6D794882ED1524497EBD8261F3029D32DF6CE4EB4B84EF3200FEB, 1E1D62A98AEBC9CBB08D4BE7F1809046A11BF03A84FC74EB322C65D2C21072A445D0BEDA226A86F9D13BFC7C70DBF8B2, 10ECCB578FAFE9709012277453A8E767FD5C333C08AA9E7D7CCB1C7DDE2E5AE1E749FF99649A63BFBC1C9F88603DEAD9 -7BEE7C777ADCAFF02486BD988C73F6CDC7C388725D907D7989E46AEC1E28ECD9602FC1, 3C08CE342668431D847F12209DF4D647F604FEB1CAA29D8B780FCFB01974CB374CA3792748205227F0AE958FFEEE3DA2, 5CB146B88A65834CC6BB2D3E713C9920D842233478BCE2C475460CAB3AB412DEADA59B933412E89CC8B2199E959C03DF -173CB756670960FD06D9438C9A55BE469574A995718B1786C9DAD40C45A7AC68C208F43, 100F916ABBF83239A2840023543EB06C01B2315E8E6048D8C0CD34F4A0F59164686693C217E0E8D3955FA23ED0746523, 413EFF860B289519AF0E46C5DFC2827664B995A9268EAD3C711EC2CDD51D967C280C48F998A7C0D6AD7840B0DD425860 -45B62603351C22F7148BCAA5CF013AD3C05DFCC054A146945D907C24D0F7053A461ADC9, 5038FB278B2BBCF33897E6562F659E3229FA3899AC31A94C7ABB0664321DEDF550B526A26DF287BDD91A6A2E2DBDF407, 841329EA6500C43E17E4AB30B32E774568F608684C754589C18D32F7F67F82F397BCCFC47FEC39164BB440D8643705B5 -D12272099F5468E53DA35FF16D03B07B4119F640FDE3D3BD18B1746E72E50FAED25095B, 5E3FF1E2C83F5F350D2A16EF1A3A54E1528768F99B9B9A2A652D409BC24EC4458229C37A83253CE94565502B0310F3CC, 1ADAE66F1F0D3C19AC5A7A003E1CC8ADDA00CA6E1E74F1ACBE184E1F5295349821A526E4E6E8EE7CC90D8AE58EE9D0D7 -27367561CDDFD3AAFB8EA1FD4470B1171C34DE2C2F9AB7B374A145D4B58AF2F0C76F1C11, 6CD47FA37EF6E333A43B7669DA9D4336B3911F117F4CF11B9BA03AA935B28A0384372A11CF266AF0420DB11133D57000, 573359B530405C6E83722E91FE6C18469C2576A019FA90D3F9234A2455B81D853CB61C5677161B3C6EBDCFD8FA301706 -75A36025699F7B00F2ABE5F7CD521345549E9A848ED0271A5DE3D17E20A0D8D2564D5433, 2B225D98DCF594C9603890CD30A59B0319BE1B6CBE5C4F5E454ADE083959AA7FB1834770C004272CC8B07936B9E06062, 7D9A5A0572B3D7A023DB8FFE88A7E26EC28B9EADA1D20558EADFF033A0DF087B3AC9C4D6BF31BC01A89B5CA5B6FA85CB -160EA20703CDE7102D803B1E767F639CFFDDBCF8DAC70754F19AB747A61E28A7702E7FC99, 9F2FF6AE4D1B75A1006FD44F20C91BA91CBA55866B0BDA455E1DA80B9B9EF91D623D2F5C0A9618A2D72BACCB1CF3E06, 63E497D322D511D94C662B569FD58E943DED4F31F00FE26325798305C79301B263443D12AC17A34AF6D2DDA378A2F8C0 -422BE6150B69B5308880B15B637E2AD6FF9936EA905515FED4D025D6F25A79F6508B7F5CB, 5849A1EE95B8D131D9E4F63148A90BABE5307819E1D19FB551696AE54B8B427009C27FC892C25503F41934887742E696, 2E4AA82B32BDC72E2C67A103DD55A1840BC66F3FDD7E4CC689086D6AF77B452DE80BC3DBE023620D43EF7346513D6824 -C683B23F223D1F91998214122A7A8084FECBA4BFB0FF41FC7E707184D70F6DE2F1A27E161, 4D21547734545152AF2E8C481B9678C1A18FECBC8C7A356EE56CEC9375A873EA2132360630479C13EA6E2308E2025484, 2FA7EAA6F701E0FA48ABA5C7D2F02B89D62FF073BEA08FA513FD307A5F1062325661696703033996B78E1C445EEBF970 -2538B16BD66B75EB4CC863C367F6F818EFC62EE3F12FDC5F57B51548E852E49A8D4E77A423, 20D64D5AB851B3D2E21C28FD9E9FAD27EE9930B16C790703FE57B8507AA88BD8E5C07FEF83B8490B1C59677622B9A116, 5412DE213888A57ED9D0AF92F87BF25D43D25B083ABB9199270D3A268DD4AB0FD78B38B28927639019D72B1878DD7EBA -6FAA1443834261C1E6592B4A37E4E84ACF528CABD38F951E071F3FDAB8F8ADCFA7EB66EC69, 447ED724C5BFAB97F34B089E4AD97A76979B26A1E4016749BA0C84907E8B861451C502E0B119ED71F7981D7AF4B52BB0, 87C5FB4067218CE380E55E12EC19D8BC860E07C73440F6CED4473CC92E7A2088704FEA4A19CA1EA12E719AAB4184F1B -14EFE3CCA89C72545B30B81DEA7AEB8E06DF7A6037AAEBF5A155DBF902AEA096EF7C234C53B, 6118712B2B154244A5F56157A90BA0984A6EBB36074901533B7972FB2E6419CF7FAD19B7F1D95631FA3D5A6C2967EAEC, 3C285C495A68C4825896E1F628606EA7635F4411501F52C1CDA8C2968356B1CB1E404CEEBE98849D2F40BB46173A2EBB -3ECFAB65F9D556FD11922859BF70C2AA149E6F20A700C3E0E40193EB080BE1C4CE7469E4FB1, 7FBB1CE2D8348058F2A4839B9A7B3C35AF7C29E04D616555971F72AC489955FE83B5CA447F2B2C03F9613BE592A0E122, 510F7AF92AC8FDFFA9C04A2D43841D4256C35EC36DD844C6DB0CD3AEF95776BAF3132FFC9BCAB1A97914ABFDB2C59873 -BC6F0231ED8004F734B6790D3E5247FE3DDB4D61F5024BA2AC04BBC11823A54E6B5D3DAEF13, 263C26747C726766200163C7517BD5FE60C7255DCC56472C739B081C602241BC108FCD9E9A2557271BA068148162C3F0, 7BE5A92883C851543114456522D844C9924936424E4670538C075B8FFF2F97E4B2FEE095A7E3671ADDD5530E00E9056B -2354D0695C8800EE59E236B27BAF6D7FAB991E825DF06E2E8040E3343486AEFEB4217B90CD39, DE2682DB2D66873DB4F91F93C314FD79D0B6B1749CD567FE7B35D3FF1C99479C2C4B2470E6ACD6AB8B86954321C1D12, 6FDEB5565784917700229134CB649953EFBC2137C49611C388580968EBBC99C90A3FF5DCB744E4D05DD9D0A529FD031D -69FE713C159802CB0DA6A417730E487F02CB5B8719D14A8B80C2A99C9D940CFC1C6472B267AB, 85A0A7F13F8EB3A4D5AD3550DD9688D8AB3435D65BCA7B7F8FEB34C04D98FCCB35DCABA431A54A88DFD526CB80AD6DD6, 88887370F87C1650496430D57CF2F6EAED259B3E852E0E78E2EB629DDACF471CB4C90CA3A83AD54089E6B6F37B44B203 -13DFB53B440C8086128F3EC46592AD97D086212954D73DFA28247FCD5D8BC26F4552D58173701, 5552AFF52675A005DA2754E1A83D742EDF5E5F7891AC08A870D8F21F3B64C74A871B3DABFCF821A69187539E7BF7040B, 92FC595C4239C7EF0CDA84CB739232F15EE2DB564CA333AD84E0F111CD63021ECD20C216C292FC3D59CFCE44ACF10CE -3B9F1FB1CC25819237ADBC4D30B808C77192637BFE85B9EE786D7F6818A3474DCFF880845A503, 883E10C4666E82FA8218F85AA3150E018C75EDDBC5BF89D9C68FED1FA82433DFCF0F1593487DFBFF3E3BD01AEA0566B3, 878F372F52C8AE4B0BECD32A4E2174455AB701DA3D9EA8CD3C3B74489B6911EE6AE769BE6363AE48334533C92A3D1E32 -B2DD5F15647084B6A70934E792281A5654B72A73FB912DCB69487E3849E9D5E96FE9818D0EF09, 31A7CC4CE28FBB4CCDF43107FFAF3C420FA3B0B9F1A736270EAF64FB4C8B29A8F4D8700B002243CE061015F68241B654, 20964C670BD8DDC257429FB91AB91FC96A853D365581E62EBF0F9A6F7E34927B860CA7513D665F30E1519D32AB3DE5B8 -218981D402D518E23F51B9EB6B6784F02FE257F5BF2B389623BD97AA8DDBD81BC4FBC84A72CD1B, 24201383BCC58A7F7819070B18B6FE848C8B312C81E8B9205130779521E31FB73925EDDCA8C5E755E72976A09581DA6F, 5C3F1A3D1D420655A52FF3DBA1418820E0B28A6057FF1BDD3EC904B5EC45A0D77B07DD504B87DF89B0E9AA50AFFB60F7 -649C857C087F4AA6BDF52DC242368ED08FA707E13D81A9C26B38C6FFA99388534EF358DF586751, 2441F991F126E470BCA82C7CBCDA80741781624A5F973750FBE89A7F81C1A4628317859922373DF676403322552E4524, 8B4A37C429B9C7A8ED1D9D0DB80BB91E30F3175AC517882B9F1BCA81815BBB4DDD7C5B2EA5E76A99C070B1C97BB43B07 -12DD59074197DDFF439DF8946C6A3AC71AEF517A3B884FD4741AA54FEFCBA98F9ECDA0A9E0935F3, 893BBFF069A6B698F7E66C2FD08F2F1082201378A6BE5173C881C54E7968E5C867B8DAC161D863CAE3B19D8FA30CF073, 6B2B529F58A2E9654430C5F5863C50FC372AFFEBB97FDA233726918154287619EE1431335F5BFC5BCB31F72064442AA1 -38980B15C4C799FDCAD9E9BD453EB05550CDF46EB298EF7D5C4FEFEFCF62FCAEDC68E1FDA1BA1D9, 744AB24EC837B68F0A7B2C783F9645683BF6731B9AA4DD87802C02328960EA252FA4613BF83B0F1F22E743C660073E45, 5AB735B9505CE46A1994B4E5EFF02D42993B6CA3616D11489214BA61D7D7487B95FF0E4CC281410800E7C5F644B4A0C6 -A9C821414E56CDF9608DBD37CFBC10FFF269DD4C17CACE7814EFCFCF6E28F60C953AA5F8E52E58B, 6AD5F0CB4EB3B9EF6201347D861AA81409F97F25D31504F3150E0F29AC26541C65BF735A6DDFF431B94ECB6CD3F64869, 260FCCD1EFF0E672B0BCCE1A00F8D281B3ED3325AE71C28B2B4BB70F788A3827CB0D52CB537C4B5B8194D135E1D671CB -1FD5863C3EB0469EC21A937A76F3432FFD73D97E447606B683ECF6F6E4A7AE225BFAFF1EAAF8B0A1, 57F56AC2AB37D54EF6129F95BDF0DD35F63529D9E1BC47FC5FF059B7B80BF78373B5835904592021EC95A14715987835, 848BA4654D7CE8778C3C598F0F118514F6DA4577C636FD4A067F5721EF6CA6DFD0987ECAD70F643E0FC68451EF69C0F3 -5F8092B4BC10D3DC464FBA6F64D9C98FF85B8C7ACD6214238BC6E4E4ADF70A6713F0FD5C00EA11E3, 5F50BD8B03A2C301F2456FC01A4FD5B1C0AF8A27797776C803273A383B5AA9BE992A240AAC07B8DD129C12095F400CD6, 210CB0B875951F766A1078E5AA74B5A4EADA5903C42D745D69468E747C60534BC8C8ABE4970A223EE1F7AC664FA6E8FA -11E81B81E34327B94D2EF2F4E2E8D5CAFE912A57068263C6AA354AEAE09E51F353BD2F81402BE35A9, 34B28771AE2C5A71979055C055FB31C8C84D8E72B2F12356667AA97C1CD13D7952F2AF8313506AD5B797D1F8F6A8BAE0, 5567879A567ACB0B45AB695EA2A2F516450215BDE26E66012E21055F0CE63C1D6ACD6B2B2F82E15F79BFE0467F7AD9A9 -35B85285A9C9772BE78CD8DEA8BA8160FBB37F0513872B53FE9FE0C0A1DAF5D9FB378E83C083AA0FB, 2C8A78A69729CE054B2B538806E4251BC41AAEC448F036C64657469ECA33E3CC859734EB4F0CF22EA0DA09BF21178562, 881A1F587304FB3A175F84ACA080BAEEE882AFB234C8488DCCC647C3307A2DA645A488712DA3F8DA3D6D357FFA6EC1E9 -A128F790FD5C6583B6A68A9BFA2F8422F31A7D0F3A9581FBFBDFA241E590E18DF1A6AB8B418AFE2F1, 5308E741924FD2B47ED71E4A2812992997FECC086843D11A9398BBE069CCE11BCC6CBC48BE72690BD5762A720713EBD6, 286AC62204269594CA05D6053C8B98AF010A9AB6FEC3C64F628AAE700F00F713C657D28CC34646D9137167B2503C517 -1E37AE6B2F815308B23F39FD3EE8E8C68D94F772DAFC085F3F39EE6C5B0B2A4A9D4F402A1C4A0FA8D3, 12F6AF5121588F38869610E032A93799879B13BED87A1C1A72E2C0DF2277BCBC4CDCC0D7A5C9ADA06B6F98137654308A, 65034C329027C79EC049FD1B0C7B95B4422223F065E2AF49C8B289FA974F0EC897F575CDEA352998831C2A98422DB11B -5AA70B418E83F91A16BDADF7BCBABA53A8BEE65890F4191DBDADCB4511217EDFD7EDC07E54DE2EFA79, 68B444CAC8017A8FA1DDD2211FA10A83AC83D5D8B4573CBCF080919D91A87A661451F703CA8A20024F4D2567251BBF05, 729B040F20D68B3876E6776170EDDDBB5FC5F8D10F299389C5C7B0DC9C0A199B152B84A0DF7E384BD6E5BF02BC0B4E1C -10FF521C4AB8BEB4E443909E736302EFAFA3CB309B2DC4B59390961CF33647C9F87C9417AFE9A8CEF6B, 39DA4DA480255620E85F58FA1B7A1767E6F27B6AFE2F454DEACEB13F064B66915A4AAE52FFDDC80CD94452C0E9967B54, 734C04B27B3DB77D07724AC791CD8312948042766E0C5C6A98A052DAB1CC94B7B4E751CE7467D0DE9719FFC0F666D47B -32FDF654E02A3C1EACCAB1DB5A2908CF0EEB6191D1894E20BAB1C256D9A2D75DE975BC470FBCFA6CE41, B9C11529ADF2D26E92F4E757A4FA7E2F09EB70EDC3B8DECE9A2697D25772751A98C9CBC8C1147EC43C624629AFBBAAD, 61A0BD864A8F3AE17CC3F1936671CD31BA5C3CE35369EC5E7497A92012854299B546E0F15F28E1B63788F7CECFA5BEAF -98F9E2FEA07EB45C066015920E7B1A6D2CC224B5749BEA62301547048CE88619BC6134D52F36EF46AC3, 825175BDAB206E1CF5101F7E2EA82AC3D6AA39DEE418BB11B8130DF1EB950FE13D3310F397132FAB809197D0603F348, 27E906A21BCA68522BABB792BF3FD30390639056FF4FA3F4A45F5798E9BC9823BC2494339FE17892797AC71E5554F554 -1CAEDA8FBE17C1D14132040B62B714F4786466E205DD3BF26903FD50DA6B9924D35239E7F8DA4CDD4049, 57029BF87C1BB22D125624089239A85DB2D2CA74F3FAB4EA637C8007C6C5A10A75C55DFFCC9C48FE5B6F16A5C6E986C4, 24458D370E65A60F913D262B85B7AF9D7A80A42613C819A84E829767DA5DC418968A4887E5F36BB91D046EF885434AC -560C8FAF3A474573C3960C2228253EDD692D34A61197B3D73B0BF7F28F42CB6E79F6ADB7EA8EE697C0DB, AFF8975D5FA3DAC5C3039D2FF77A5ED6D1E844F1E1A7B34E974B69C491E5C9804CCFA6F28346EAFF46DBBC9013D7B26, 3CDA193FF4CF353B3D857616288562601476F83871912EFD2A9A27E875D0A883F55231FA642A4833ECE4DA3DAF0918D6 -10225AF0DAED5D05B4AC22466786FBC983B879DF234C71B85B123E7D7ADC8624B6DE40927BFACB3C74291, A75F069665DB1A046DDDBDCDF661A5B339752E0B0F4B64DEFDDC75205A45C417345F677B7DF96786E2D69DE331B8D37, 30447BCD2B6F8E9E796F1D860BAFB26D1EEE436572A323C978E06029CB55A0E44F5E7C38A7CBA5082E84C4421E39A250 -306710D290C817111E0466D33694F35C8B296D9D69E555291136BB787095926E249AC1B773F061B55C7B3, 85C5488E1DEA85A22893D17AFA5C5E1A0D21788CF1AA61B0DE89D3E48D0E09B1BC2EF6BB37714B87F11699AD3144D39D, 2296D5ED16ABB366EDBE2C2B91B14F114178F07D8F1D2ED78F277987DF90B8D2A45BBBA32FFE95874B22A6B33B9EE1BF -91353277B25845335A0D3479A3BEDA15A17C48D83DAFFF7B33A4326951C0B74A6DD045265BD1252015719, 1C0DD78C71F34BC3C9AA9BE9B89B6007D72266F77D65C654FB164EDE6CAE749B7AD9B80427DEBEEB16132770A6FAB273, 59837989B03F957B42EAC3F629B456020BA7486EF16410A081CCC3B721A3692881CA1A13373CF7745C45BFCAA4815D5 -1B39F97671708CF9A0E279D6CEB3C8E40E474DA88B90FFE719AEC973BF54225DF4970CF7313736F604054B, 3DCE9AFEAFEACA8C5CD1AE1234584BCF42429DBCE273BD37EB16BD902894A33319F1EB25D0BAD092F41D0723E7F48766, 21458943ACD1E88169F16DDA26401B9C52246C68F519B2B7779DDA49E0B64C960854303A58E725131F9095B2D31F96BD -51ADEC635451A6ECE2A76D846C1B5AAC2AD5E8F9A2B2FFB54D0C5C5B3DFC6719DDC526E593A5A4E20C0FE1, 7399550FB93EB8D6848B551A720A6D0DE503867BC35ED48DE45A09167FFF4A724335942B854B376F55E0C58635412219, 89BEC33D4AA98D7472F4B7584DE29FFCA43A43F95C9F20DEF98A569C6316C25B02A55D4685DA8F3C9B2A6A18B74D7B82 -F509C529FCF4F4C6A7F6488D445210048081BAECE818FF1FE7251511B9F5354D994F74B0BAF0EEA6242FA3, 1AB17EC010B93E211B29BEEA015519D7B426190E7A64FB82A2BCD63BD031CBE1A8911ED4B7146AEB5A3DB4611CEA78C1, 3C646BC70DE6641E2C7E6F7594A6538543346472CAD1595FA4990373D60C660AA10CB46947AEF71CA51B5070FD26E440 -2DF1D4F7DF6DEDE53F7E2D9A7CCF6300D818530C6B84AFD5FB56F3F352DDF9FE8CBEE5E1230D2CBF26C8EE9, 42D386324B8724F605BD48BA7DC9ED0C8F52BE51F56596A1BFE2950F4D7AF108160296674076FE2FB16F93340B61996E, 326F284BA14941DCF889638C5401A733E6C1F6EE2711748819BF90CCBFA2D7F3E158FA4319C8ACED00D2378BB47A5041 -89D57EE79E49C9AFBE7A88CF766E29028848F925428E0F81F204DBD9F899EDFBA63CB1A36927863D745ACBB, 5653B9ED4F2F76E02A5330533B14B3660733A918AF390C144047D29EEA510A0B3CD801B92FDF515DCCE2272D49756E3C, 89B72DE0EA88668959E3B7A25644F00DB291093971E26CA8135604C88B38051DBD11B56FD734F89676C1EFD843EB2E0B -19D807CB6DADD5D0F3B6F9A6E634A7B0798DAEB6FC7AA2E85D60E938DE9CDC9F2F2B614EA3B7692B85D10631, 60A328F45D9E9910047FEF967AAF2903C57F868052C10DDD298243E15E363D384FF9B91A7B16BD8ACED722CD7CAA24CD, 2E0568CE82048CE0AB21CF7B334C67AB2901C9EBDF85ABFCC50108FE9F419BB387CAF363865B85E4986380F63C960F99 -4D88176249098172DB24ECF4B29DF7116CA90C24F56FE8B91822BBAA9BD695DD8D8223EBEB263B8291731293, 58838F4B5993AA6B482B9D6BC7BD61D8915A38BC329AE1F9924798EDE83F71F537095F649B3B3B2EAF17D600DE81A7A4, 57EE428B5E5B3D099228ED9729214C81F5C145F81B0A358C81D4DF97445EA31CB8B6246AAA509C9A9CD611A504E05434 -E8984626DB1C8458916EC6DE17D9E53445FB246EE04FBA2B486832FFD383C198A8866BC3C172B287B45937B9, EE0135E5955A275D2114B75B3381C49898857512A06C1B210BCEFB17DFDF7A9CC3C7F965155D5AB3C5089DF072FD7A9, 839D9D686E3713BB12F799CDF8A9414083242E2D4BAC618CAAE5AAE17B647CCA7736FA99F18F1855680342213CEF9572 -2B9C8D27491558D09B44C549A478DAF9CD1F16D4CA0EF2E81D93898FF7A8B44C9F993434B445817971D0BA72B, 46222FCC70A1B3035E68BE46695495ED9BEC5D948EDC645094FE02CFE01E0C2E0BAB8CCA63DDFA77EB6961B3D755FA74, 5506AE9314DE353546B79917DBDB187C0F97D5C03503CC4F29098665B784F0528ED9E442CCAFE3CB30AECD2E68C0F6F5 -82D5A775DB400A71D1CE4FDCED6A90ED675D447E5E2CD8B858BA9CAFE6FA1CE5DECB9C9E1CD0846C55722F581, 81A5ADBF696EA0E8E5031FA8DE5494D804D39461778594594D4351CA69167C2CB1155F8E05AAFB6FCAF08E455852035, 48836523E2B340AF1CAEE2139CCD7F1BA5369145E38D4D498E7A09867EF7F172CB9EF710FC2872006D3F19C6A39123F2 -18880F66191C01F55756AEF96C83FB2C83617CD7B1A868A290A2FD60FB4EE56B19C62D5DA56718D4500568E083, 6B90C808E89C3DA9527E119BD43844ED6F7B02BC1E2442B83B0BB9A29212DAE28E5B630C34A24F3AE96D06A488AE1D42, 408074ED581EA36B1E3DE987942A87FC29BE5BD64F40EBA9A82469E951C7F6BEBDF43716D8F37EF209F28EC204E35339 -49982E324B5405E006040CEC458BF1858A24768714F939E7B1E8F822F1ECB0414D528818F0354A7CF0103AA189, 5955A8452065F3BA361D6EA7C136935908ED6CDFFDF82C81911F77B105D6EB020A80EBDE02168EBE0A474A3D8F1E843E, 3D02F389156F8ADEAB68C68D48209E5BB74971A10B2325945FB9C3C6F93CF6D14C5B787B4CF5309C5593622BB2E5E2F2 -DCC88A96E1FC11A0120C26C4D0A3D4909E6D63953EEBADB715BAE868D5C610C3E7F7984AD09FDF76D030AFE49B, 10B4D9EFAB05086697D0216CB0114C8442DDB9465CE15077327EE100ECF02FD7E98ABB8FCD91E0A7620E89E23A8BEA3B, 75CDC219ED443BD240D2C9E6560EE5DE08718BD2A5771086D50396AFC302124792376F1B8514A75D6743596D26AE3851 -296599FC4A5F434E03624744E71EB7DB1DB482ABFBCC309254130B93A8152324BB7E6C8E071DF9E6470920FADD1, 9900A5BE09D49AC3FC7274EA04BEEDC3E1CD8FC96A6398417DF8C9C61809F66CFB6C0053E8018503A06801F6F231CBF, 39C8E49AA03D92E9BE4669614209BD5149D0EE9BE502639316E8CBB3E3BF1675C7BA92FE56DD44FE4A0E5B1145889630 -7C30CDF4DF1DC9EA0A26D5CEB55C2791591D8803F36491B6FC3922BAF83F696E327B45AA1559EDB2D51B62F0973, 32F1B642811BE34107F37EAFC798FA1AB61C4BADB92B1E3A0459F4E31A6D710D515C006A5DA1BAAF272BB1369D78C766, 5884F654AA249A0B2E632737E1B8CD690005A0662524F35DA5E7C2C42CB1A31B37187F0B9E2B2AD5EB7E7546D0AC7CDD -1749269DE9D595DBE1E74816C201476B40B58980BDA2DB524F4AB6830E8BE3C4A9771D0FE400DC9187F5228D1C59, 2D263FB290D815B441455250D6282950AF5992D59BFE5F1EC99B0F7545D795F1D2A477109535E97BE67A3E738E8D56C6, 3D5D62C24F0B8B608536D5A8BEEC07CB7BEE2B458941D2D932E4B7070D3F83FFC7E520975A73ABF4DEDA1B7B3552479D -45DB73D9BD80C193A5B5D8444603D641C2209C8238E891F6EDE023892BA3AB4DFC65572FAC0295B497DF67A7550B, 139FB3D296274C88B2BDFCD52B16E735474AAC7AC8FCBC64895E4306A44E790B66BC24738AC6BE5E4CF2DB6620E04F4C, 666B280175130BA9C7B6AD351E0D6E415D08CDAD59F20948EA829C26F552E7568E96263D970FD956EFB658DAAFD792B8 -D1925B8D388244BAF12188CCD20B82C54661D586AAB9B5E4C9A06A9B82EB01E9F530058F0407C11DC79E36F5FF21, 413102967B8F15C82EA82AE5E834FE0886864BC1AF350EB5448D1C16BE36C2F8A43D32F324415BBF219DEB040DDC210C, 5D8CFF22B1BFDE6C0B324C98C24C1CF5AE61B9F36177C9C89D34BE7E4CEEA5CC4F27F2EEA673DB508A5452E790BEB061 -274B712A7A986CE30D3649A667622884FD3258094002D21AE5CE13FD288C105BDDF9010AD0C17435956DAA4E1FD63, 4899C81E0AF7F9573983E9C989E1F1C263EA550F72CC1748D87559CA36681E8819709C7114B3301E2A32E5DDE434FDB8, 698CDFC749269F6445B20ACFE4AECC4C37C3110B37DEB325B75B96C8646ED6287A630A60819CA0AF65113D5DF17BE37F -75E2537F6FC946A927A2DCF33626798EF797081BC0087650B16A3BF779A4311399EB032072445CA0C048FEEA5F829, 43B346C0EB92FD2D211CE50C6D71AC32360BFA51325B2A531379E95350C6A3714D8830A179AFBF6AAE8DAC5F13E11C96, FB140823D2AFC1ABB7B9D6D780AFC3580819D15794AB040C9A359D0283FFDD70A4CB1AF939F23D99CE9955EA08F17A7 -161A6FA7E4F5BD3FB76E896D9A2736CACE6C51853401962F2143EB3E66CEC933ACDC1096156CD15E240DAFCBF1E87B, 4EDB5F3F19E41AEF7FB0C4DA14A6D38BF6065ECAB8F8561CE64C370722AB9AE6F392C08A416777FB6895E47305A10F0B, 6913A8570DDA57900F8414277410E7EE9230ED4DFF622948EE2A293B4B45DD738DBF5D336D0E0070EEA8158CB0ED369D -424F4EF7AEE137BF264B9C48CE75A4606B44F48F9C04C28D63CBC1BB346C5B9B069431C24046741A6C290F63D5B971, 5F641E3429986E946CDF3502E9AC2298275761653743970787158780A0142FE63017A1A621321F4DCD1BD88BDC9C834E, 6C9BEB7E82524DD8557A602940C208553BFEAE6180EA2969C1AD8D70470573FC7CAEE2C671853A11359216AA754BC49C -C6EDECE70CA3A73D72E2D4DA6B60ED2141CEDDAED40E47A82B6345319D4512D113BC9546C0D35C4F447B2E2B812C53, 4EE56C92FA0C96AD80C605F28F73833274EE11BEF06A65F29753BEBC3F5231116C24E657B417FE08E2F9D349EA0BD3BD, 8A998FC1497B01A9092474A88E0B6274A21D9E7EDA28A532C51DB3D7B2ACF2435E0107DE9A2E4BBEAA5DA05C8C37664B -254C9C6B525EAF5B858A87E8F4222C763C56C990C7C2AD6F88229CF94D7CF38733B35BFD4427A14EDCD718A828384F9, 6E02AED0C4A210A4F29E1B88B75D7768B6575657F6E06724FCA6515F11AB5D837D64BFB4354B83334AEDBC4E85F5FF78, 54EC993780A186316E713BEAD700E11037C5E8510E3207A5A74A7BEBAB2ED80BA52A0CDC0A6B392F65A9BE678175CA7E -6FE5D541F71C0E12909F97BADC668562B5045CB25748084E9867D6EBE876DA959B1A13F7CC76E3EC968549F878A8EEB, 45B6EB9686C3FEEEF3ADE2939BE371D4CD12257B1A11F0065AC44CCBDEFFD9945BBFD385D426D7775676928B9BF6E1E3, 24E5C9779A1042832483F608D96F7AF5176A54B5FB5E39D741DA1E5353CD9D79C4F0C3B83417CBB7690C2E5D9E1376C5 -14FB17FC5E5542A37B1DEC730953390281F0D161705D818EBC93784C3B9648FC0D14E3BE76564ABC5C38FDDE969FACC1, 8AC20787DFA928E131E42BF5B4211E5E4955BB51EF973E57608BD94C8D01044AA2A90AE745A08BB468DA2A843D0E5110, 3CF4D6985F46E3BB49C14B343490B58F94739E9207E0D63CD6D4422D5B15968263805FF8C336318415314F5700BAA038 -3EF147F51AFFC7EA7159C5591BF9AB0785D27424511884AC35BA68E4B2C2DAF4273EAB3B6302E03514AAF99BC3DF0643, 5A16AFB6E531ADE5C7C299431C34DCC28F7160C29BC65A1ED12B4AAC9F353631B50D6EE3D97F95C08A0EC6C4F9312664, 2FC05D6E95EDF348CB4A7E468116F883B5FEA87F82A38D2129B3208617548C96E298A1410E1EDCFC049A6911E9CAAC6D -1.3.36.3.3.2.8.1.1.14 -1, 640ECE5C12788717B9C1BA06CBC2A6FEBA85842458C56DDE9DB1758D39C0313D82BA51735CDB3EA499AA77A7D6943A64F7A3F25FE26F06B51BAA2696FA9035DA, 5B534BD595F5AF0FA2C892376C84ACE1BB4E3019B71634C01131159CAE03CEE9D9932184BEEF216BD71DF2DADF86A627306ECFF96DBB8BACE198B61E00F8B332 -3, 6EBD6E634974F138300E1D9024E1132BF53BFDCB1D0142501EFCBBD2A295F70FAC1B86449310AB68D8C7E6AAAFA22A0A4398AEDACDCFADD2CBDD03A56EE4FF0D, 2FBE930EC94F50E8031161D73095549C2D39E1085DEDB61DB91F1C931C1A0C1022EFFDDC3F91BDE114E87F77F544EE1AC6DDB5DB1F55FE8406FB7F856FF951B0 -9, 90A9BA498AEBE68367CDAC6BEC2FF22A3967BBEF07E52E888CB70DFBA1170F9899B0E9E2D1E4F24CAB3B619EA4EABDFA83302BAEC25AD171F2EE81A3A0AF4217, 8DE2CD0C317DA83B8EC9F33E38880C54FA200B8155A00B7A844D6DC893598835AB58B17E99657AB9CFBD9E640E656438ED794CB0E1AE5EC1670467855B047DD -1B, 3B499CEC54946DB7B6192C1535A7EE4F6A33E5CCA35242448568AF61058C4DD563D2FE8DA3B239D2FE5A42E211C4C71F6ECF2C907DAF92DDBCD71F86B395ED7D, 960D8275EDEE1EC9C17514BB1D63F3E3AB5B1A0AEB0CFF15822CCC5D5713C3ED2383D48C4BE732D5DA3BFE6F2627043A665FE73F84E854F414116DE5D3469520 -51, 5D5A689FF1764C61832B9EE7DCD1EFBE981B2B1F22C5A926F91070003BFE3027DEC0A1BD435BA88DE0709DD2298508CC1B981499DC07A295E1DAF1BA24524144, 85602BBD3F39F44089E4575347C863B4B20C3F18B767F153A35F1FCD5DC26371273D331C34F666458BC143F2CDA7653D42966F3A38767FE80E92DBDD9C86BB2A -F3, 354DA6F5C772E4FDAB5AEDC11AB90BE532C04348E6EA3D74FEE704257C15AF3C3D67AA27323C99205C7C6C8CC48C9631CBB714AD8EBA814851C30E98AB208CB6, 335EC253EB5D29C51567103C413D425FB5AF7C09A2D3D8DAAD6EE56A7F52792904196C8EDBA4E181FD8623BDF38AF1AA21A641A7EA6A10A13A1A037B725316A9 -2D9, E90050A1E057B5EC53A721FE3C0BB862FFE7288CBBD37C4D7158B9B2032A1553AE1221EB2C37320E2C1CD8CF100E955C679F70237869D306611AAFDB0922108, CB977F5E007A7D1150CE1F8EC6E4E436DBA45941E177817A359A5CF33CC2AC7A9116571BCBA8C5F6AE59E491A930B393863D0DC3C237DDEC93F78C533F7FBB5 -88B, 5D199607766FC79918F75B3ED10776C862E3E00233C1C09A58760391D9D4DAF9779C587F4B7645442AE2D941E26A8D6EADA84990A541E83650F6C3227B23903B, 15E5BAB98914EFECE5FE05AD6C2F54C5774E97D5D1D3A209B17E28CE727225C9765026E21D6618EF76FDD5C4FB922CD3CE92549CACA746362EEA8DEAF463C230 -19A1, 673BC8AF3F23109758DA994A7F7406B5E8F06A6B0C2DD329AF51F42C1AB73248CE46C114D4033A2169F9E4AF19E59F32C2106251B98AF746C93DE0F50D85A59, 6ED4BFB2421D72F8849BC7AF748E4F739F4B14028D84533AFD41ED967E877E36843E9278627C0B51AC27D26EBE68B3FFBF30F3324BECC4341A0D04CF4E85E32F -4CE3, 657574A50D2D13E42CEC4F8B7C7F2D8F7A0A735EAB1CEB66C3FCC9B49579B29D4DB0C06904BB93A4A8E3F638D3FA328C23FF423C3301F75C0CBE0DF77957D36A, 565828ADD94F1A24AD40AF7C9D92B1C6E636A67D4833682F9ED7681F4C6275EC9FA8F85827715B8B426BAEF7C3A672E5966DD398C6D0E87187F18B205314228C -E6A9, 7D46E09FCC2EA391C5186E302DD8B86BA2D85BAD6A7B6F1473459146E931BF474CF3117376CF7C7A0A79B38036F1E0A2305F6C4544D05DE5D4D6292D100491E, 9F24D6A73C40F3FFE38979498F83D49EFF71BA896230BADBE901108808AD7A470BDFDB271489CC449CEEC286E1BF533EFCBE88E5C30178BBB121E40240AA447E -2B3FB, AD18788C57836F1D684B15E2148DB879A41B3AFA8179A3FE679FA51E12F0F3B58B5BE3CC48432B5AEE822F9E9AC2BF34E19C28DCA04F8DAAEB62D876DCAAF40, 972D1DDF2E79E130BCCD0AF8919D536F823B2DDEABD453430FF1C55AEEAD583FD69AF616849D73A179EAF7E1A2C174791480C9A4C36FDAFAD98A2E921B409CBA -81BF1, 807F4D6CF5856CE1DDE579FE7E6D9694B4484199D769F204A5CB19C62D8EB2246711B56BA5D2EF548BEC4975F1390D61D1E08CB16ED86E3B720353182518ECB5, 7CBF3BEB568765FC5D2B9EAFE2AA87376CA1613F8782D755FA78E910F9BF493AA8BDCBFA70B7A8716E7769CE148544CCD32243A589E2628E306EEEAF37BCA6A6 -1853D3, 45A76AD89BC251BF2A4BF0867FABAFEFDF2A1906928AAAEDDF84A0A1265D075906F91581E3DC4FFE428222893910A14DAE9590056DF3E781A95FFD2C0740FDE9, 232D2207C5B2CFD2B4D36599A87CFFAA3ADF52C693CFEA65C4FFEDD8F69391DA827220E7AFD55634970A0BC0CD5FE0FF2AD54AE57EB42067ED2DCE5450A90403 -48FB79, 966CDFB39EA5C9895F1E3BD7F0CE488CD7CF4F58D15A00E158E3CA151283196DE161A28EB80DEDE69EC0805384B483D78CE09F882BC5E28FE01C15CDEB73C31D, 7EEA2AA1B049603FF5A6580121160857AFEF75903A64162171FC7A520B1E1E3234327BBA3543137BCB28A03AE83AFEECF0FB71601F9F693F5F11027EDB1B8A4B -DAF26B, 8026F0B50912FE00B6EC23AD67866F9881E46C5018B47A5C9E930761CD232F1CABE6B5936868AB00C4D6E914DE5FE10E03B0AD3F717FECC0102AE6E40341A9B6, 40E01526391B39E4AC9D2CBB16FC94C8612DB112C623CC38226C743BDF442EE66E7F622A6C385AF5D6EF6398C97EB945E4083C0F7FB2F411BC9CA7436E29A777 -290D741, E468C33F4E2FE14F39EC9C6A3A033957D6F5D6F5B126984EDB7F88298C840D84E1EA878DE4347928C280B0787B1E720A998DBD33DE089DBD3DA1E7F24E3977C, 4D254E6C725EC7F097D7F896143E5B9B6E06516E9ED34214CF60788F9DDA44167080300B72A7AAF6BB3F14F1B19FC33B1A053F0E15D15A7A9CDC7C9732EBE3B6 -7B285C3, 6CA380867F4116D2CC8C74EA3A924C3EC755775DF218CF62432F6826CEA9E0303E11C887A226D6AE9ECBC8CB15FF90CE8380A27B1B637AF3F6A24A69780B6715, A050D09BD8D76A2DE51DCD660A15E90C9734CC847FBCE9DE547DA92D004D915B3E2BE9FE2A68A9D06A4785568195291DAE716B86FAB1E76EB3E9699936073361 -17179149, 47A817328DFCE3391E3625D1AF2E3CB14CAEDE1E4FA3F040C6E2EDEB623D6A5B1F333B951285FC37E8191EA8525A969E42E6E846F39A5A4D7DD15B646CB8AA72, 42B7ACC90A481324A177D5EB71E57B004DD13974F0EEB898797AC08BA16711EB5ECA75C42CB568308EB3CAEA84E4E0EE9CCD72C0CDCB6A5907CED70C5F55BD5D -4546B3DB, 3A059B7695CBCAE4BDC536006A67E447F37445FFFEBFC4BBDD23B04E7C833CA62FAD6997EDE81F4111E15290676C2752906161B2AAFF68E77E33D4C5B8E7580F, 55FD7A299B7B9EB018B8EB538810387DDCB73CD9EA61BC92161CD47D6F9CE37EE31FF03C2908AC9076BE8590502216EF00CCED85A853548E386ACA6BE47FA619 -CFD41B91, 183AAAD92836FDFA97C25DC7D51D966E5BF1C85FEA004FD7B826A15C19DD398CE09F0A6B48C6D2F2E98619E604D49E5215143A6A009E84676C183B6D3963C62A, 104202D59315C0B34EB5EE52E01FF43C1E0D589CB56CE07842CC2964FD35CFB1A7DE9358613CE467317ED2A3620D0D57FE4D8C8986794A0CD7606852BCE383ED -26F7C52B3, 848A844E0CE05D1D54E48E84909FA1DBA02EE983D163E4733E23EAFB7ADE13430EBEA60C33D0A677DF1C0B229BCF463FE6E1D27C71688A00801EB58FCF23BE1F, 46443AE12B5035AED710276AC08670C8826C95F03CA1A989B2D668C9B72DD5EC8C51021918A892F7C2F9C7AAB77875400655D470EB2E257C08514BD03163ED4B -74E74F819, 9B2A95C938D7E0FFF187002B29FBA9FDB12083FDF6B4B2F356508361C50DE6598F4D68D09693C35EBFABFB4E6CCA8CB7F84D8E590279809C051E39DADA666D56, 8E204EC291BD5E4A224A9EDAE66527BFB7A82B21C6A9BFBD2253560F1EB0F31FDCC345126494F7FA0B2F8DFEFE2D2FC7F130EBCA0CDA38F3FD1FF9B2E05B008C -15EB5EE84B, 906648486E3011215AD3540DD6CE02A714EC2397A7BA4E42CE9FBC6C5EA5E44808D6FD09112DF9DA84784227B04B93E0AFE759E02EC9A32DA7C57B764EDAF948, 88BD2A9BF5F045D63D7D49210F3DD8F697A1F7AF756FB80CC4FAE010C5E4476266B804444C98A3340FA82FB37F2798BB0CED31832430F53DED3A2A300632D2ED -41C21CB8E1, 443C7994E2829B1128E432FED1268A700FBA0EE31D602F4EDC8DE444F0E0BF12A9DBCE6EDFC3033CDA9BC13643684497D3E513E09AE1881F79BC105F50662FEA, 9F950D4E2D41AD78CC128CCA6DF75739824A7563336159D1B9FAABB00C461B0341692F6DFC5A03F463C6D8FBD13B8B123BC32A3F179DBAA7A9B4257977C129EE -C546562AA3, 46BC6DD37E91F48964E781685326EF484A3017A130980653CBC55ABFB78D3B2AE7EC377BB8A0E8C73ADB6403A34EFD80681E8A19E06706A6172A9346E6E87FA7, 89FB4C97276D78F8DB239031993F83BAD4227DB32E6768092C3C27BA17DA6546923B108431ED3E790E6D2170B466DCA448BBD35CBF675F090990FA4F00B42AA -24FD3027FE9, 144E58E80B2583765988502F9B0484B1674E43B9DF0259CB78E87393F5A43FB58D5DBE402BEAB104AAE97380F0CE39F81B45E0791778972DF293FE91652E8432, 4368481EC410EEDFDC0FBD5F3122A10CE46AEF55B1DBCD9185232E9FF8A22A71F5159D6D704EEBDBD4734E7AAB1FC9750209D8227F46CA11999B513EB80B3B14 -6EF79077FBB, 13E86AC98ADEF5B52147C90EB93B523D6093035C3B486955D10D2254675B316AEF50C0386F36F8EFD837E151F863CD73BEC5C9D15746930C6995D7428D316DAD, 6901E7C444E1B1FBEF9CCBA871FCC29A2F78DC269D9487FFD74D6745110DBDB78DB37CE0D983FB7BA17757BB90814FD5046DDE3FC87E731279C22B978C636769 -14CE6B167F31, 46DD21BC7055B990AD00ED50C3C5EFDE25DBED6D0426C07E5AF2D2CCAF56C69FC7BADC7778E0D42AEAFD9EC521359EC4D1C51BEB251C66BB68708F63EC726557, 3438E4D8FECA40E85A4589AE203BBC6409A54DF8753CC89C4276FBE3352EC0F2DBB8B7959508E9FA3E48B6AFFFCDA42C48F408A9DFF4C126EF684B5936BAF3EF -3E6B41437D93, 573F90818FAA266604FE017F4F59D8B085D62D1C6F99BA3E90C4170B403D8ED4A8200B5B361E9AC0E0A44A77E2649872867309F9C2F40BCA5EB1563EAFD6B462, 5111CDD2FD2893255E8895E02962F3D2124B08AB82243920B45831F0840BB6DAE37724D717C4BA9BD58C12B72CEDE971ED9F97188A3C789D10C3306BE7B0E57F -BB41C3CA78B9, 838E78099079CBC1B3D930E76C179E293A06A9AA01741B5AA71B715D47D80F2DAB61F10AAAF89E0857EBF9CCD50644BEDFCFE4E935C82B80118F6BAFC6F2B71, 1F5E589634A5A97F4A785B197221E5A04F4FD0E895F144F6B93B01AA4D638A3A88CEC0C1042718169F55917B8794B80B8FE7FF59F2A125A4BC8B1B908EE24F48 -231C54B5F6A2B, 1658E32723EB718570613C75DC2260339366BDD8F8B46E45B70F83E53530831E8FFD665EC0F3D815DC13DEF1F6601F68D48359A8CD10465A9951F9CD43DEC4B6, 34D834AA2B7F6B4EDE7818095CAD0E1B000D80818D0F7FCE9F0B96D866909A6EC5D119E76A2F1F1A9DF9E997D547DB27C96BAD4E10895F532B6D94CC2F803BC0 -6954FE21E3E81, 63C6B0766C82BE17ADB6B635760C20D285391D9B8634B69B35E9DD649D2F7636C9C814F7D4B0D706526057296836C094E1974F93EB4CCDBEFB1C430D67C6B25A, A4338E0C86DC1979B343C0CF4C7081AF57D438A44112C793DD2EF42B61AF779B8D28229C09990FD1E02B0B0FA6D40785CF30E85753CADDAD116FAB021F0EFEF5 -13BFEFA65ABB83, 527C8B4DEFA10848E995A8F536E24E7334A299DA9008861FD825052AE9F0F03C9D9C877D4984860F5D02D99DA0D71D989E2E901134EDE6153E73A1A5CC24E08B, 1B8AEEB3875309A1585F23402D8C2EF3FBC6440AC12450FF97B56F4D8FF0E7D165F5C53DE2414DF5C94AF7D121401EC96479E5D10588A068A3E0F813483CB514 -3B3FCEF3103289, EF78A0FA28F23DE8BF8989AB0D74271BBF455FFDF17DC0AD4B143E5804AC1A89D5C075980190CADCC86A5BF10A1ED52B60657CBA2D16D11C07CBF25F7383AC4, 4025DACFFB7E83D239DECCB2C7AA688214943760742A0C1C0AE605F9124B56B76DCC7B2797E61D99B088144CFDFC93ECE36AF9289B2A1607EB6857A80D3DF64B -B1BF6CD930979B, 1158A84D12E86199B9FF86C4188C2ADA4428687025A86F56E9DAA5F1512F7E1FC7372AA14A94B9B5E2503B658998F684F810686B134AA1C3881EA107C040388, 29ADFCC9B48D03633056B320D9B6796D99519748A8AA793F1EB34831826361379C45A0607E974284173B2F66DBF5F819943C9CFEF872BA5B67AF6A0531F78459 -2153E468B91C6D1, 1C605A543C045597C0099A23CE35C4696EC8A01AB6A22FA720DA6D8BE5AA7E000A7AA8F17091AC4FC34A5C121403C79460D0A19CDDDEED0E91CFE32344EB447B, 358836A188A67E98A56894B06C5AE96F91251A63B17D3DDD23CD1BFBA4C888EE65B05B04D5265605E0452ED467D31B4FFEEB974357C2D1294B87C8CF2E3CFA58 -63FBAD3A2B55473, 9D91DB87F5A704990D80AF3FA73F7059892F4834331E237E43CB56B9ACF939B33D9414D80E2483C7B288A9F26F4A0818431000649B19C3561A9894D3DDB64833, 8D5EF42A66192F2B3B8C254B84A468A6D0A07B08E4E502FB25AF66B231F15E20FC97972FF89C669392628C28BF1A70B69797C7E2DFDD9F20480CD99B2E8431F6 -12BF307AE81FFD59, 7458EDDFFC402581BE666A6AFD4574B75627684101DB11977D0902AB0A3841994ED3A929D756CAF57B173C9BE6052B9712321D53B726C44AC0244AC1DCCF1526, 8AA9BB03647FFD9E363E2C217AC08BC4127705D5947ED53D51DD04CC521C96513D6B3C537C21AF8A5BFBF04BBC790F9714FA34324375DAE35102509FB66FBD91 -383D9170B85FF80B, 1D96875B4202AE6D74F8DF88D31E20AE8D4A9D89786398401B32EC653ACB070ABAF7A8B2B09F5D9523CD0B71469A247F8E2A33B0C2C85E4AACF3A88BD191892B, 2CF8BAACDAE21A8DC63E1C601EBA8C4EC102EA5EFC0A5C88EE731712F45B53AC4D021A5F69EE4AD3A4CC4B259E2710C7D65A6D51EB6DB054331C410270220861 -A8B8B452291FE821, 96D6C30ECA94BD57489DA5E4DFB89C3445BC1D35FD01939692FEC83CFC26F3B105468B8E563FF0AC3BE28A9534B807BFB2AA4BF94A04BA2DD005FC2309E05153, 99DF31B6F3B0C3E10573B9798C4953351B34483466761F9220C7218C3B232BCF74BD01BBC7B0683CB9A87595FB218F110D6E6DD943C5A9D4394661F2EAFE4559 -1FA2A1CF67B5FB863, 4A7A9DD9CC46010A297E0C87FD7756A34F5CB56BA024F46F32EFEAF8E039992ACC708DACDF19F652C17D785F897F48F5791EE379700E25E8FD81B587DC06F09B, 6FA3E15F5FBE96382941006854D9B641FBA4BB88BDDD931DED7E0537E4438104C64AFBAB16A0328EA1DAEE72AA14739EAD777D26B5DD690D49FAFD7324A71E2 -5EE7E56E3721F2929, 70DEE2760901EC7F7B3CE756F124DF9C785CD1CB17A322C345998D10C8C576CA8FBD6CBB44DF7C106F5582475B08C09AA0746686EBDE24DC18982C50D121EF1A, 77F5E4B20F6EC8A17A3B50211FFF5DB58516BF6F5B4A8A0B0A8D58476205BC57E26DADD1A9DECA159BCC777C23CE978BC4805665FD428A5B92482745737D951A -11CB7B04AA565D7B7B, 3FF565C15E395ADD9F2D3AE6BD1AA1F5504EAB8CD56D66BC34B0ECF94709857C32D80DFD3212BD2085E0409CCCE41F3A260314FF3C76A51AB728409E02DB4D7, 433523CB080618227DE1D3D8DB54146DB66E253799400A5ED7F07EC04B22485FDB9447DA7D62409D5BD325F22547B85B9B681E3F37C5412FDB76BF39D1578A6B -3562710DFF03187271, E644590EB1EF51B2C307E898A2A753F7C2CB55D99B8F423371C323DA62D4E82C49082A6B2EE494B975332FE6D6B9DD4CFCA32476F3FBF0540C0944C22769944, 7555385CCE41C4371DF0B8477B918F53287B43EA596B4170A0FE0ED2F6455D69FE37EF8ECA041B2634BF7CCE1F54BB1CEB11ED30D1818A533BAF867812E5DCCE -A0275329FD09495753, 1D0A935E337B83F70B1DE2AF0C86353F9F0827F5AEDBE18BE69C2513A51D1AD0FA47028266EE7D94D1D4D0D2E1389F581016A1B4B65BC9653D784C5AC78CD924, 4F2ED54E3789977BF30CFB99B7FC7DCD106DB043D96B7CBEC79FBD41F6FE95D26DADC8405B41D70E29C1AFF7D2E19AB1587EE63AC4C4517F846898979C2ACB62 -1E075F97DF71BDC05F9, 517B8FB8C3BCAD3B3E02628206B78AC864E710B003DE83851BE34E1C32DA8EB80906316DEFCFC9DA082326C65AE06F2B1101619FFF80C272AB3A847DD96C1AFC, A76678B0456500AA4B32A2F46D7F09A6330F00FD4BE69BE31708ABC8ABAE57170BF5032B7D3C4D4F4071F370C508D6EAF40DA7284002DD893F9D987A415F5984 -5A161EC79E5539411EB, 783A2F8F91EEF3EC9BA2A414A4105C636A70AE0CFF22337292C07CE6F48CAE1EE76E5974950B1D7E7A0AD57FBFE366D95E6816DAB6E586CC340853AFEEB24857, C9E384873DE77C12ABF405B375E97FA018D4591F158CBD3201D990DD3E724B9019D00B51E6950399E12B550F79FA9CD25B07C35EEE13B99FD3E3EB306668D3D -10E425C56DAFFABC35C1, 299735A933238CF7B33EFC701E3D87B2D13630B3F9FBFAC75B6B15E1688BDE6ADDE04CA4F98BAD62AF8010642889C43BC77E98D39ABC3B4242F1F7D4640FB9F7, 898130E46F0D8E94CB3B990A7F7178D22E337495EA74D4EED19857A7F2B78FB65426FCB31A342748BC6E02B8161286A5386DA824ADC1DA5784B2ED68F5082E7C -32AC7150490FF034A143, 25EFA7913F4168336B7A903DD64AF460C4C3AECDDBDC50555A6C519B56A5A4D7343A7AC77C504FB9913DEE56379D71E24841EFDE96B145B8FC59A4AE5446522E, 4DF95798D727983450A63C8AA1B01B4BE72D6EEAFE9A93E56D2CF4B9CF256A6DF4EAFE33897F8C2A17A125177AC524FAA0869D12FE719EFC470FB943013B9632 -980553F0DB2FD09DE3C9, 4346E43579CEEED9144DE75F62988608EC9F6D51058820F0C8E62F2374DD934A50FD2FC8CE3BEB04FAB1F9CB7DBD67A88C0C0FD5377ABCDB473FD6146CA2F68A, 7F3C26F31D81BAAFDCF40D0EA5DC01E6CAEC9D256D640DF97D8D27357F67E873D228AE39545717D52D1E56F22F54706B7E73615341E2C2F2A32AD37162A74DD9 -1C80FFBD2918F71D9AB5B, 7E50D407DA4D6EE3B3AB7F44BA8268E7929537EFF88C96AA1E221E2D0CB30EB242C2627B49FACE87A4D98B4D33308E6BBE5E9FE932115BC854B69D2FD3749396, A983E7D5564A694957E25365EDCB6F459D02E1F46FF83FDB66247F5BC7D4FAA899514CAC944A2218C3F9CC147E3F727BF6BF8C94BAD63019822F4EDC62BD3691 -5582FF377B4AE558D0211, 745FB07C66DCA6C1CFC1330504301F77D82CB388DCA20D09505DB955938BF98BD3783D09D2725F459FE6ACADE28DC02EAF9E95DE9022DA9309CE1BB8452BC1E4, 896C96E08761F16316206471A5CB6DB14337A05BC9CB6F160078A8BF96F8EE1D9674F534E94894CA2F793F8DA79E9C33718F2915A6A628FCCE7282059ABE9269 -10088FDA671E0B00A70633, 6B05892FACA2596A3A7973B0EFB94B655147021EC9A2911C57CF5346AC30D54E42661700EE9100E2672E4E31F8598AC80DDBA3B37A3F63DFB7A1821074AEB0AA, A6B0B8E431E535AB25E4CA886519534B173DE8D6FEB030F150851BC10BD0711BB49938BC2ABAE834858ED5D03E323FC4243102BF63BE704B9EFBE5203B6F1A14 -3019AF8F355A2101F51299, 8CB735A45679705240E1B42E2B258DF0C45CDC4D6C45D4F5223F3AC96748D84FC310845E1EE111C7E16F0BCBAB45193A2CDBCAC735BD3720B92F6175873C7746, 4942590A5D03E12A53FD6FC6779A40BCCA095BD47618F16E08D5A5C91A34C9B560F4584D2A64E535EE637754680372100F1F126E2BCC9E0368B037979E69110F -904D0EADA00E6305DF37CB, A63C05D662BE126341E9E79C117F12D6C7CCB91569F44A9FA4C3F769087BF6B94FFF9118A910CD76509498EBDFFFD27A9A232BFA07A3693CB95F06D5A4EF24D3, A6249F27A959B8E186F303AD6FF3DEF99650C102440F89B2349DC164821E3423DC5939DA58AA8EB276FE8BBC9110002FF2BAB289A02CACAFC9A9DC27106FBF7 -1B0E72C08E02B29119DA761, 9D691FCFB555AC4535CA8A9D1F9A9F06E9CAC780AAD27D4025EA4DD470981CE88A62E9CBA01E35172FE7E790A361997CCAB22277A995D62D3C5BC83BC7EAC07E, 27F53F62A7E905C73113D0EA49B69D70C3DD37D97C2ECCAF2AE69845446945C13D61DEFDC101E9736944C77F40287A8EA2CEA54D1E6ABA6E3346DB814F89C384 -512B5841AA0817B34D8F623, 4CF6EE2FC3E30EF31360D791864256813317721D1EC63C0DF95F2E07287152F7A5312EBE6156979CCE6D2693A3D5EC5097EB36F08C427657CA64F52A6AFB015B, 5AEE9E9C3F1749E013CF749C8B5B0412EB19697248DEF576CFAC9B6D15A1E85AEF03D4F3AA49BF7E76FE8A58CE29ABA0125EEAF0FC797FE95B20D9BB4CB67A65 -F38208C4FE184719E8AE269, 43BFC19DC74F7D85E670198DBA51F0D83122FAE9FAC29E24FF27389C552B7591E97AD2660871F8842247DD31480E1CD4936BF7CF467B98D529310092BBB743D3, 24F791CAD06834FC51519D8D22E037D394CC4CFBCDB23B366DFE3E768E718A3CC372B8BCBBBD8D29F81C67AA63AEF05FD033EBCE7C8E1D087F8E8FC9161A0F66 -2DA861A4EFA48D54DBA0A73B, 403BFE6E51CFBEDD5BC980913871AB7CDA8C373A56ED228F65DFC6531D0C7C145D14ABE3739DF52F1B6F6FD1558545CF41B7A7EEA1D1B4B38816662462F4CAF4, 8A94F83AE386CBFBE1B7F33A90ABC480126A2E03271223569AB70450066CA6767B18D3C9F9A87FB9A1B6A9BA1522A49C79CF3EB20A6E3A38482475A795F7E66E -88F924EECEEDA7FE92E1F5B1, A223BA386358ADB25FD6A392065206A948ADAB25525CDF44D296EB90481A74F636B970BC6C56C3D2B7FE3E508D7804FDBC5FBE3A948A3CCB0CC441953E291C9D, 8DB08B2EF3271A30448FDB1DC60554806235712D353E0FDA15A7252D65FC9CFE4476ACA1E6A094A4F8E1290F9DD8D075F323EB58C7C18AA7FCBB0021C74A8839 -19AEB6ECC6CC8F7FBB8A5E113, 884B61E52DB3B2B1A2F9CFE4E61EB8BCD209E8716CB1BB397D15641252ADFC2789CB6FD43D0E328143FFF04CF30E80BFA3A51DF533C2F2F8CB922BBD19E9ACE6, 9FBCB5C97E4E819B707858B4BFC44145AF9052990611AFEE23A9B6FA3A788C62285982A44D52F08F7ADCB5D9F18F311996B11A4C9EAB657F858D7EAC4741D74E -4D0C24C65465AE7F329F1A339, A4B855B177AA0304FB4000206741E9B04AF21722EF900A4555022C7278C392C9C75747C54431830DC3DA69DD0EC8C463B7F5906214D63B588A1E8D30F296EF6D, 87F4D1C8FAE2F95F6C04B739AE7658ED79BF5DDA7EC5C4CCAE2EEE41AD7155D7FEEACAED2E3E760194F96036BEC54A5B882E79E22943B790CD4D5DB1236E9DD2 -E7246E52FD310B7D97DD4E9AB, 441A20DE90C713E8E8531895E16307AD77566ED4DFB75B3EEB72B2532EBC0BC2FFACA44DD166416012D30E1D8C9E63A7488F4E9584DEFD7497C0002AAFD367BF, 215B6B8ADF334D42FB11E7358EF7E8C2767E1558578910428A1FF409AD082545732D8AFF9D659C56C12F1F8700AA587086D431F35BDECF1F36EE12DFCBE333F4 -2B56D4AF8F7932278C797EBD01, 8EFFEE7894118CFB3B5585B4AB811AD46B64B21F679009C9B6D9367DE227B11C82E98BC28909A5964B87D08309EFA5F5E8C9AD28BD0B4492D4DBA82E037FE416, 707C4A8026751BD74629275E104A059A73CE1EF0E286BD5F20D2373F0F7A92FFC2333D481DA6C38A188B462AC0395B59F21E9A263E8C6AA715BF2716FA5EA397 -82047E0EAE6B9676A56C7C3703, 7DB1128A1BE3DE7F7B736A46811E012C5C1EF68AD4E7DE274048D5886D46A311CF787779306C9FA3C1734ACC6193671611F581655523A469BAC359F1A40D88BB, 60799C6C830F74094729F64C7EDD1393E4488DA2BC875CA0BD10AB82AE1CFA2D774A734C9C20182B6CD29C7270B3BF06F41519AEF8FC46AAF9033BEB549453E8 -1860D7A2C0B42C363F04574A509, 43BBB561BCFF3F5713E2905ABAA09098DD4341B20D29E9F02018CBB87483DE8E800C9B254A8504528EAB5F84FF8632E58808A38680E83B0661EF835D23708801, 7B37AF3385F22592E686D074D4B83379787B3E66B7135A0C7A560C4E1AB809BE1C2ACC85ED7D52D602B0E58F17EAA911A23EED38B305EFA619F606ECB185E5DC -492286E8421C84A2BD0D05DEF1B, 441DD4BB6F247A8E498C3B93CB8C98D8749F70B4F242DA2DEE45D04C8CDEC0DE85DF7962F6C9EF1925713B962969680CF71A119F07F59C27FEB7AC33AF989A86, 65D994F58EFF6A6978D17C321F8AB8D7C942D5BB619B84E4F8C0F57256FBC758432D01DBD6857ED98A8813618E89C8130F96A48606D86690F87693AF04EE29EA -DB6794B8C6558DE83727119CD51, 259E78EE65259225E1583C08354D8174DA3035CC9F3406F8B4CD4D83C8B8D3D09261168D1B8B8AA193E13C1CA81E5D004071B094BD1761E02A1D9FC1BEEF0D6F, 993FD60E9FFD0CCEF3B3162C31DE8ACF8A74BE4A746F697B71029C08F337183602CDA00BF45866B0B6B884991BDCEAE005AF93C5AB5818F330A4D0541CB367E0 -29236BE2A5300A9B8A57534D67F3, 56DA0CF4994FE381F470197B366465A3E508D69F8B1C42CD1DDAC158D5405B365945E7C6A46DA42B7BF6B50BB51B55A0E32E9257DACF5FEFDA8120B012959767, 9769924836A1184AC6B6E7BA5F0A82E012E31EDDACA41DF2D98ED720EE0F192E06B0205C8FDA3BFC9178AB3A50031918E5A72AFD966D257E1393A5E9A90B8B6 -7B6A43A7EF901FD29F05F9E837D9, 74747F061776CAB98B00EC8206F12A28A7E6EC61C85FC46F1C41AC774FCF4B215AF784F490C1C562C22EF383089507A6DBDB431C6F2D9BCCF3D33AB083DC8A96, 8CB54592032DD67D08340195E9586E669E826904D6EE330253CBBFF9379AD2D85B1B9DDFC562B47F181F18506E50A6EFC679C3057E9A2E482903AA1123B1D513 -1723ECAF7CEB05F77DD11EDB8A78B, 2625DB8FDF2897E0B23960C779A0C021A1853070D0FECE2E8E257636208CD40A250F4B1B696DEA0AE874A3BE8E01D90BDE0676DE83594EB805CAA4EC1DDC0E67, 7A413BFBE960C85BB7AD9AEAE920E1EC667A1E11319410BFEBCD4640516BA29A87F30628688EA430A104F0B5752144CC400F2EC479815253C1113FF82A0AE39A -456BC60E76C111E679735C929F6A1, 7A2844946CCE60802DC3971B4F903EE249C550D559942E27FD10F64473ACF898A12CCB1D10DEDD5035648C8273530D766CAE6F477A1BA7952988BD558D14E94C, 7E551E2079B1DB5BE6904FE7E65E7B0E0171FB3183B9E074B23BF139D6157BF1CDD0D61CC6878798CD54A5C4E63CF41D25D73AB242EDDE90A63C830F1ABE55B4 -D043522B644335B36C5A15B7DE3E3, 17CA4EE59663F4B53198FAA44D05D1C64FAD41FF7BA754800CBBC9E7745A4A673A60FB3FFFCB90268E302262F521A041172CB9F035EAE936E600614A9EB1496, 610734D0F23C2146A1CB154C30C56792E13B982BB9589C19A5A90B350290D624396D1D89703EB3F8588C2142E73D6BEA5E1CBF4F6D569167FE95EBC10AD9BDF7 -270C9F6822CC9A11A450E41279ABA9, 7535B023ADC4DA650CE86AF863A7DDE9B7B4657671AD4177D373D2C566C63A6B6581217F163EDB03C04D3307BE3F80F127F0FEDCE44DA9CBC4B5560D2464978B, 23290CA07A5D20A02F3D0376816F30CB0E91A206FFC147BC3856FCAF4E4D9FFBEABB9C75270787E524A69107CBCF6594343F71FDAD4D7A10F27BC1262686686 -7525DE386865CE34ECF2AC376D02FB, 92EB6CEDEB594A86E379195147797B8227E5780842941021B304A9B67C1BDAA54F93A0666D19AC1BC49E8EC5B2EDD0CA56659F5E49169E0E5D7F74D007FAE8A4, 33DA0D6E7A1AF801E8E9D611D0D5DD38B17805A42642D591AB7D2D690CB80B17A7C3C1618C3A282E626A34A48340C362715705E9723ADA782513AC700B7B4F9E -15F719AA939316A9EC6D804A64708F1, 72DB02D5E574F1136016D816AFE591FED008BE91E5D5D923203108874EC8269DF45D3F370D17D00F3969228E200D74EDF310C3E0CF8BB80663C7693C1C77F12A, 9125CDEC79C9A2E3FBC1EE5D78229E5D1C1A6D6EB83E96322B3315FF0FA394E264528484E2347D62C988D68F29B6C848BD28193AFFCB822E795E6F54B599F34C -41E54CFFBAB943FDC54880DF2D51AD3, 12FD4B1C83BE5FB17756B9A66F9543224ABCF18A4F34104873E2A9C417E49A6ED331BB48858CEF9B536CF4F8F75651C351E12000AAD728AA170553781191830E, A9EB64F6E1E45B43FF4B163FA3FD40A145886CB6762E4884C1EA6CAC84444E324529B72B831691A83EDFCAB0A5EEFDD4545221DC462BB8AF76D6F4DF40F7A7AE -C5AFE6FF302BCBF94FD9829D87F5079, 9A3B008D110B87DE79DE6DDA15C5D455F40D023DC6E24BA9FC2530168621EA9FEE894805B3BBFA854ECAFFD33BA45B86C894E6C251AF4E78145B8FDD0D56AB43, 47E7F647CAB3A18EE8E80A189F97F528E01F42672093165732E81F42FFAEBB922907B2C35F563F636B97D34E46421FDCC1B685A2AFF0D808DC7B3A8A9CE1DF7B -2510FB4FD908363EBEF8C87D897DF16B, 180BAABBB1F1D03643822A3D11C2FCF427BCB17C67C9304C8CD54399DA9E16FBC5BB23CD208D2C0D325B3C13DE8ACCED8953DD80E0F141CB25B7E3312CD61A81, 6CAE963BC89C7BF1165E05C40862F08A22673F352FD5D2A2507B60F006A93F97719CB27A0ABF5A245F0DED160C245CBD1DB3B593E3EAC83F7D72BBDA26C6F17C -6F32F1EF8B18A2BC3CEA59789C79D441, 40C02A5B0CDE531AA731E63CE5A7D269D9560B3524FC85B7F650331DFEC2C97106BDB8A6AC2C8003ECD08DD71A9B86C8C242EF65C0D5A4CD47277D39E5CBE1D4, 62B13352F22912BA65F79B72498FF84CA19E8FB78010E7A51758219D39F30A41C3522AFAC8AAB28EDD26313DD91B5EC6B6B90C7BC14BA17DFD6D92EDA30F44FD -14D98D5CEA149E834B6BF0C69D56D7CC3, 6C50B698B189F709966C0DF6D471C58CC2643639B5458DCDE3688919C04F79B3BE546549BF698E7160936950EF8523B9374E22ABAC99730EEB0E1245A42A248C, 4A488DE93A417989AC713C5F297DF971A4BD3328D48174B04C0A770978FBF61CF1335F5EC837A061DF43920BEFFBC1B34A90683CFABA9A323DA4BB717F1DFE9E -3E8CA816BE3DDB89E243D253D80487649, 98B994D0B7AFBCADED933E1FA433460C8F333DF2D3C1ACC60B3E1C3686294E182C057D625398F3553F499B3C75EC6FAAD98B7484A7509D0F4826487F4578C179, 170947177AF5B185839BCCF3FBE74082FFEEC8C9612E1F01FF3E45C1DF90077EEDD3D2614039003E110831A61D02FEBA426612ED6728CCEB0D98A24B263E0378 -BBA5F8443AB9929DA6CB76FB880D962DB, 200376B8971821F345415C792D0814E88F236D5913046BEB75B23C5733973125B78936582FA4E3B7083AF19AF08B18CBFCFD7A1731C166EF68BFB2EFE2490D9A, 11AC9AB8030EAC420BED59EA32F2CA064153D6B806CF0F484376183A4A4895F2C89A8798C0E481E05D2C052623C7BAF846E42BEC8FB61DCF32E7144FF8F6AC82 -232F1E8CCB02CB7D8F46264F29828C2891, E0290F8EC0698DEB491A7A23B133C439CF931CD2F8CC2516E3DCD0C72A2AA4EC228981BE5E015D86132CEADC6E63824B95BA23B406BE809A9DD19A53420C61B, 5BD2FC607D86F81F2BE26B9DF9A6534B7ADB124F34084EA399F98DCC8C0000D39E093F1609E9077381EA69896AE49FCEA7FC34BD179E9ADEEE1A86DACC51DD1B -698D5BA661086278ADD272ED7C87A479B3, 5B217267BBD00D8377EEF473E6BA187C309BD2251BCB493E30151F32AFAB067D5B5025DCC779D561D9234FCFE3E81CE5AAADA2AEAAA5D7DA315E262FC35200FB, 4B75AC8CD269765B8225757AE78F947B3D74D151B74020914F7CDB5E31504AB2F41E292282F134A8157111E6C3C357D241B9CE21213DCDFA32B312C4DC9FE64C -13CA812F32319276A097758C87596ED6D19, 183E02EADD7B7BB51179358C1BCB9334BA18AE2A5C9A2543909DCAA682CEAE497AAE734C4B7FA35C0453E58066EA3F84B31DE42CE7A870476CCC579256CB0A53, 5105E5E85B2C090236984E550E566B1EC2DF5C0E83A73ABEF5305E725A273714D6248EAF56A13C8E185075A3A0D1BBC10D6A219D06B7F8BC47167D8C197C5092 -3B5F838D9694B763E1C660A5960C4C8474B, 2292A30E1E9AF888EA53E6A46C98743DA11CBDACB112D3E1A9494BC0E1C2ED8F80188C794A7CD33882FFBBF46A1884FBB67D2DE514592181550C1E76A7EC04F5, 4665E9FE0D18B9202AF7C4B88A2BD892BEBBD524EC98D069BF5ABCEEFB77BB7729CBDE1DA37224AE0E7CC760FAB149A817750D4D664D6FED9FAFA5B0DE5F00A4 -B21E8AA8C3BE262BA55321F0C224E58D5E1, 831AEE802447032420858783F60AF82E930575B3CA0DB63E986E8933C63BB9397A003C994684F2319B269975ABF6E5B34AC53200BEA32E9F307AF5A9FDDFBC4B, 721082B94815CEBE65AF8258BCD5B49095A92777AD6230CE04FC0B426BF52A4216FE8D1E4474074C0538957BF50766143EEB2AA4C0A8973CA14474F4AC5331F1 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 4B93DDFA169B5FD5DE766D32BAAB868585AD1C434D82F937343C229995A7631B38ACC241C312FFA2E6708A85027F42E8F8334D014D0DF29590B1F2394CFE65B3, 8F334E45C1EE4D89998D0231BDC5CC59A785B95BF4106275E257A576A59DD61B8A4B208ED4357A42D2E0119B01B4A61F7C836CB465777CA36A3E784682DB2A56 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 67A034AEDCD9ABD135565BEDC69FD08B8A1649DCE8A450130CAD33832F537D5187B950EA6057C78F5245E93AF5AB0B4964B9CB292C42812ABC12FAAB6BF5EB6, 8A7FA7E584E1E466444DCE14F43EE7F16874956F1E85AB716CDB481658D4B6889972E84502A634795915C29A9D8A701B0F5BFFE050767C3B61634F425767E8F8 -12C9389FCCA50E069A6FC4946479E435E8EBB, 65589168A4AFA1E2E3044C4C988B62AB450277E712481686633B31CE36AA779DBAB26BDB586327D052753ACE8762DBBF7B783340222EF5665F7485E5FCE91608, 39BA658C0A7E629109BCBE7DEA25ADDA670CBEDA50FEE3A839EDFEAE4F7D4B8768D9E47D317454973060EDDAAC52D67C6646FEC7CA0CC00B642056C7B3D39F81 -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 722BF1A40242BE5930BE5C0978BA4E98180BED9708A9BC07A828F49C8799D70E117A7574167ACB1B28162E51829660ADC763709DAA5A7328CD4293B49EED019F, 5CBA2E03C267CBA58DEDAAF3574BBA31BB1E9AA3038BDA6CF7DDE43C9A69E3D3A6F1AB5AFD5BF9D6E75E308DB90AD9B2818DB13FF8B267957F4D84D85048E58F -A912FD9E31CD7E3B6DEDE937884905E530493, 144E3487AABDBB2D6656EFFCC53943D4AE199A005B9496764F197F36B171E3D7B503078543466A7816809FE1045B75CCDB43621335AF9718DCFF79EFFD8E96F6, 9AC106F7C4EEC9E13DEECF9B7B30D26EA001616DBDCCF588153A48B7D62E6250DDAA15150424590FC9108602E0311BF2CDDB6EDA53E8A335B3EFCC9355105CD0 -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, A6558C72D7B433F87CB0E63619F6E8EAFAB240A117015E888F9F227524B9399AAB3DAFE31C0368884C124844EBE454AA0898E3928D5279CCAE91CD23ECD95199, 8FB724C2A2A712DEF9FA505C3BF9D0101B887D12BBA6BD7B42838CFB9CC7886C9A83F915D4FB5BBA95A11F14B7280C097C9298921442A62D98645B037DC9C78B -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, 9AD84AF0438AE930D0F135D8A06233D9C2F491A041A87DFCF56B85B11E2BBAB541EB5083B0FDC6D323931C8C89919A4710A7D8AAF6929EC6F56DD437F6777DB6, 96BA45DD64861DBBC4E2334F2DEEC900F5D17182814D9C2B462243AD497854CF6682B38E2127327DBF913FD1549CA47152FED80E6C9CF320A3886CFC82D2A0A8 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 3ABFE30325205375A6A9211F5B1B2E185819686B03B3DC21E46219E0407A17928345CE530BF70DD26BBD520A5C292106E15EBC7176580772DAC3044D97EF9942, 1E93520F76E4A90E3A201ACAC859C6ABDE74B80003E553AB7B9A309AEACC6FF12B87F8A663C1662517A93BEE8DBE1E17615DAF677F4DFFB2C5B3B47B49BB0254 -357F023F0DC204F0CDC846CA921F1ADD8447283, 15AB265F80F39205400597FA935A1759D420B2250C09A4040B7DDDA2CF6A7C482853FC379C2F2729043C8593AC82FB229B23CAD711F3B2A2340849C9A4B0163, 4FC5A0FDBDBC79F9150B400E4B1400C8F6BBD36543536DD3CB4AC3EE1434030444F7A2F0F74F487E3473B1BA4D23F29F00BC49E5268FBF3C911E7C245B727A2D -A07D06BD29460ED26958D45FB65D50988CD5789, 5685D3E1CA51B037A42660A07CE8878DF1EE0D6EB061D53C07E6B1C73AD557595DABB0B95B06394BBC37FD0840FC3B4FD04174343D091EC5C159DE9B3B865C00, 39ED8D926A55CB6782CEC2ADF93BE6F2F5564CAF1AEB5ADF1C3E1E483B04A0D2CCF2A7ED56DA8B15A7F3977870B78BFFA029D4D934F350A51134F40C3CBEE3E6 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, D62A84816EA53FC90E2BDE16CD038ADD962EB28684C3CC682D693DF85791A8BD58300622C333EEEF6EFC51FC59B749F0CFFCF6CC7C1F4982F55620C16517085, 708E530164BE33F2476D97DEED6C6E7C2DC9B1F0959DE383B2F504CBFA8DE0ABC19B27270D53D42A0107B0E419C9B4744EAEB25BDB253CCD172CFB32E8F07E8D -5A4653CA673768565B41F775D6947D55CF3813D1, 2C211CFC8BA78C942CC3AA3647E7FFCFA30FEEDC2CDBF86765C6BE1AA2742A17E30C3F5B810355DE1883B6FA18FA3BBB30B689007F656740DAEA6835E6580729, 5B9149D6F8624BAD8D0F5308E15AE397101C95C2682948AEDA581FF7A43285500E32F9443199F7AE19EE12294389DFA4F2E31795CFE1C696DCF49DEB0AD1BABA -10ED2FB5F35A6390311C5E66183BD78016DA83B73, CC40847837D806D8B45E8914E41759312414C88B2D3DD2DFEF8BD98D772F55F2E7625F6D2AD21FF8A2723A13FA1FEC2E998F249CDF1172DA65C2BE5E9995FE6, BD6393DDB7A7A0483F29D8D1BD0378BF77DA7AE22E0CC93564DFFEADFF366693E00AC6860B702944ACAFBB627F0C98C8CEDD232BDBD2BA0E3D5C15B6FD6DD4D -32C78F21DA0F2AB093551B3248B38680448F8B259, 77C6E36773947962F6B00523F022090F47BBAFA12F172793543B90688842F65C075C84E6A748FD6664FE6F5441469DBEB445CF5ABD986B7939DA21A4A8CAC7D7, 508B90F7DFDDAC72394C3C676D2F0D8E83DF74D82180864AC003F18F0A8935A90F55BBFD6D6FBFCD86EAB9002C459B6CB1E3A927514CAB73744D03F9957B9570 -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 1C0353D2207BCE556575D82AD038DA5D2F5E35318867A76877FDB73881FB77CF4181C429A189410C27CEFA509357C36A9FABF78224E941191A5731373781727D, 380FC245BE36E7C61F3260369F2162AC1C407E54E8B5EEA5850E3C73484C7D7631FDBB0E2B483054D35ED520454BC4B259D6D6950B79396703863F66B5017B54 -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 47FC89BA4EF27A3D84666FE6BF2586E50C93B191242FB13AF64C1E677DF3DD74A8815992937326A70FFE01D2513D1B85178762F11A53E18026FE8067568CF4C5, 275D6549EBF44883EDB38742177658232EEA3D2774D8D99964E14851662C1D7D8B10E3B4F837178B4DE6EE44A9254E8325DC1E2FC6C750AABDED3A82C6C983A6 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, 9713203B723C21110202926387DA68817DA0B1B85E0FB2825DADF163DB7166C9DDA40CD21E24A371060381111FCF3DD9653F0CAC68742754F72C2A6F39A4CFFA, 2E9EE16425AC592B4DA155095D0BA6E1159D497603A79187DCB98E8F0964019626C9ADAE29B725E0F37692932CE09E47B9308A0AE3DF9FAAB78F9818D04274AA -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, A12289C8F05C8771443B57825E0136422926703C1E89686096CA547AB1C5DA90CF8CF80499A20D812003C8FDDA24ED801F145756FD3D012E4A7A632E949048D7, 7C7DD14D934E506831726C5963BFB95FB7EA6DE8F04E79E9AB8A0759F7F92BE60562FA0FFAC5A460702802580A493FF822A727FB1B2C54E5576C802E8BBA1771 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, 64EDED82A66BEC047B09324286A7C36078F6E0285BB0A3399ACE8639810E61453092096B8CC7B1B9539910CEE1E005D740BFB6039B6C62484BE691F6351B4FC8, 12C456D4901B056E4DB79F75B32859CCEAC7DE9D3C2C54EA9DAA3BE6F22EA735132974B1F5394A323EAC6C371A531EAB92BD959DD2B77DBC3BDA500783DE749E -909A469765F53090D38D5A7231073A03433CC33DF71, 565B7B8EA914B8F8B14660541F06522CD8087621FCC73DE420DB31FD8627A7950EDBF949D197DB0904BFDB0710CEDF8D2CC17DE8EFDA3E4922D8FE26EB2F0F87, 1112E3B55C3AA7BECE13A0E7A7D63932A9A8217C4D885AAED51EED8A1EC2C964A05BBB44CD8427AC6BBBFD557C579908C06139F76034DC5931997F1230395D1F -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, 3491A2839E330A6ADE2AB8FBF4E7BC05E06877C49BE948B2FC89819D13172DED5B769FBD74D11D6CF57012DEF12F7BE0D84AF41392A1D223E668330522E20460, 3B92C1EA63D9B31E73F916E1CE3B4CB630E1F1579FF97CC79288B4CB8A001C47F714BC936AF572082906CD9850A336D4875492A5B7EB3FA5DC869821E004E4CA -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 4A73DBBF7C0B211B3464B1322B1FA1B78DED18A814EEF56F711F935F47CAA57AE17AACF7C65F69A3039B41E38B5942D8C16F2AA0B33A46D188C05B5C2C06FDCD, 27B78622D48F22EF9C26BA4FA621125485D163225C8CE149F3A2C2F21F261EDBF1284AD86C4855C929476EBC78CA98C60B06601CA77B0BA0E188B65CEAB0DDE4 -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, 464B9B915124B1B8364C0C215FB4748983273F1663A733221D6AC19FD52429E7ECF2E1E472C2EDAC5C5B76A534A3207C4B0B8DF546BD676687A859C2353DD9C5, 184218992FB3868E40418C214C5A9D9EFC407D07DBA6D14FBA3422B29F7524697A8A803F3949C388E424C41B381336ADFE35B512BAA8A932E7EF22A83E555982 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 376B8E071F30EFD59E3BFD7B05E9C0801A540D2F5BB4A8661B5CED3E07132BE5DFA6C9C9CBE8344D5266016E2F0A3468C879A952C218908FF82AF6D6E5489519, 538F4651B8438A6585918B02B9A3F5F345762E6AF4E3326FCC83884D417774446C5231065A1B8BFAB01ED09E99E256B6688255E80D55DCC39B0B79AA2493675F -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, C6DAC0280D032A9713EABCB3C6CA649609A641D21CC4325C1F0B340B6585943CE827E1EC738C0B8296EB1F479B2937D102360656C96BCD364B90C763F819B94, 6617A9DF0A14D2310E728962767A6340453ED6AF0E06B0C23BC8A6521D48D3B67259588D47394FC4E4265E3B9B41B37EDB8727D358BECE9D61E848CB72F3EE76 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 33C49F6AFF1EBB8A8280290392804D2F9C162B9A70F302C83BA8FD38B48C5EC0B1B0917BFF197B61B68ED25DABB55E8606F1DDD23DB0FEC7880F414522F6134F, 887974613B410C6E7B8CF531339D86177752B3FCAED9EA113C3CE36CAEE0E1CE88B71AFF678204FC0C205FA51E9A77C06F8387A4CE29FF93B66F40C1374AB6BE -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 1B92446644964EF5C0ECAC5C687D5E77779D0B6C8B31D622CDA88A79606BC8BD797355B82E4C0017609D37D06E57B764F3C0C69AC2613591D91CEE826F9FBE6D, 5B42F5DE3D9D29156B00ACA0F3E27C4DF5960B0110B3AF3C2067DF68BE07E19F14656F8FE9EA5E2AFBA29802757A5BDDC084E3FDEB01DFCB3E5C053E399510B -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, 6633D52067F904276FE446D56F026B1D6DF8E5ACB6DF3876CA1FC35AD37EF2C9B6E1393636207BB0FB8E1115F9D2508B9A40E31CBB07212CEA4F119951772449, E70845A85C6286BE1D86D8B558B6AD01C7494979D40D3BF8861604EC19848CFE3FF699BBEBDC53BE7BA3998D89487AFE14D97845658C42A19D8D13BF8594231 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 928DAB67A9271B63F120FCADB527874F27E1750E01C88AA021ED7CBE693CE1EBE651B6334166E2829556FB11EB87203B7124DE858C244D12B83DAC7E471CF7D3, 4E432856B82415B368D025CE9C90D4BA436FAE196CAEFBA7D1401B320BFAD2C2F0890E70BE0EEF1C671B01E486E1895BFAFA648123A6C63D13DA88657C67C0D1 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 34F66D946541CF2988623E0B80DCC825206F53644CEE7CA3483CC3D6214CA8E996825157E95574B0052C47029B84BC03B896133E650EE877AEBC11D0AD7375E5, 32C5293F8DDC2B446FEB1386E509822AEF664E69163C2096204527E87074E5F814659DBA39599432CCB5AA4ABA52892217029CEC389BA87F8BEB6C5DB3891ADD -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 1BF68AE60A429C3C9DE6D002625554DA16CF50661478FCE1D8B5766581008E890223F20E093F6D79F5F1E687D53BCBF916E69B3B2D2C7D5A6F456192932C78C5, 77F3005A3AFBD24F86DFE104EE9B0FAF40BD9C2B3D17E8075BA8EEA48FAF65A0A83F84E16BD6E6C6BA8FE268FFBCB5EDC794DCECCFC982C24AED68B4DE19A849 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 407ED37507A4DACDFB8ED54D9342E71A7E6A27749FDD775B096EF65339D2892ADBD18FA1CE7FE4825371926C83172B7803789FD4E0557B7EABBCFB31093736D0, 3DE7CD1761B1D564102FFB7197D67DA9E7B845700B2ACB0B660D6E4FF1B00F7422E93F9708B33DDA1699EF3366F04A42C4A4D1CB7301425AAB04E12D6459B6A4 -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, 4FE4817B6261873A5FC83BF3E3FFC0DA1CBC41B31627AE96E7F83BE86AAAD6B94659C08A959079ABF7BB067B3AB195E8ABE3029497A6167D7155A62B801589B7, 1B74A2FE1B2AE5F431FEF9258708D39B20EE02FF671CC4379F870A678CB7760DCD8836C7B250BC790A01159899406042746019CD916BE94D244C25192E3D1EB6 -29396F76B67B7C403D73A1059B80139336878E44938606769, 13094EE96396DD3BF503B298DC9505EF687466E7C051F26B4543288BE7950F30912530B9EBFB4FC5C35F43E0F8A745AE53FE3410EF3CFF80DD1C93939B469580, 3460053C0BE6FBB16498A35A34BAC5836203C9892C43D50A78435824C4348C5E1DF6487BEF0B09F746C0F6803FA9748E861E5BC54884050881A1F3936B577CD8 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, 2052294A9B6CF44312A8945D4EA84133CB2804C92C10EF85C30B69F6EF3611DAFF32AEE5372CB8EE8135B2958842725ADDDD2E5BDD9F60F95F2C1CADE5A1A66C, 784863C428867D4A1E99B1444903ACCD62777A66AEAC908B9E7503A196FA9AECC3084A4914228C7A89A71FB894CA180DEC6998A07476073823D12238B7180208 -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, EAAC53BD3CD553CAB64EEAD8C10BA16AF078AF1B7B47491894CF8104D2253A8301203C0F0E799525DA273444FCA27D5F7CD46320912DD18FBE18D0A2159669C, A0893C2A3BA029BB1ED15B5F00CE2DE158427F37721982C5818BFAE006FE8F7D4341EA893400DC3ADAA68A037DF45BC2D756BFC1C81DF0A2A8F17E4A1B3FCF6C -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 3FE75BAE9BAB72C93D969FAD335B9566182861BB24C2FA1574E21C50D389B2608B2936E9308575FF74A8A766430D934436ACAF30A6BD2EE7C7775D25FDEB2A6B, 6C50CF468772E43A52EA2A728D1122122FC3803DBE6C64A7FB7F89DAFE753E4CE4452DE2B8FF9B52D40A79C32400A7292AC2F1E370AF904677A767C8B3F47BBC -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, A773367A61734C79997AEA4D92BE1F2A12ADF223F9741EC5BFDD90CDEBE50EE3B506AE6BA4B8621E910339279116B825A64DCE624867844DF4AB8CE0C6E3FE25, 69E6CD079C9062F8C4F1C17BE62063EC03C3664E7867537E326C3BDC201C7E9F72DE59CBACB48DEE79915BC8D384BCC8B3757370B47CE04A2591080866D87287 -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 57F6B8F0E57B1B1B9848718DA32D664FA41F8AA31DDA9C1AD7AD3890C9E610D977DF3128C6FE8017DCDE0673FEA286D3445E374B14D7BAA75CE0551A46FB82A, 7A4F545543CD6ACC6340F0DCF82DB363BD710332E892707E36C4CB29DF48E269407B1B5D3E4275B7844263B3F7FEA26FF317E6BD3755F76562C6E7EDBDE579BA -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 3F04062E037900153889744FAF2C45AB747D6260B982FBA449ECA34E4B2E49DE9BA78FA045E3D1BBC8FCB0A08D690B9CB1EFFA651ABD81F32597D52004E15100, 5EF2B6700C87D148D39894E813AE99D29EA5FAECC2EA43C3FEA507C2514AE65F00BD6060DDA3F99B2E49795F0FDDF7ED55CA16BA32554AF3DBF2AA7B795CAA60 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, 1F9E8C57B9732F64C37365FFBE6655B66F394BCA8B756305B0E7E17D798A633D864EEB03D437DA8EAE0628D61167BAE1646470BD1249B6F76CA8C5DB9C3F9D99, 40F9D241A484AB395D416F022C9A98B717BE231904F0F2B0D0DD88BC44C3F4D04BDACEFA6FBD4FA33D1A519948FCA408F47E2F12A0A26D34A383D1326A7A8E98 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, 7CB2E07767C56C7CCD87FA291E74B7B2E2002FEF24570B48BAB45E45DFB424911E529AA60CAB40EA3B9EF1DBB12A858466B2F14E837E16B6BAA4C2B5FA5C9F29, 2AAE4B3D6C8AC26611088537FE0E7B3E876E28C2D8783D80AA7EB66BDDA1042BDD02EF25E24CC458F602CE3DD78464B1A0DFD914224C742ACE79FE4282B470EA -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, 6D6A26CD5EE1D88E607BE3D731ECBC20A001AC9F880C16B3AB351366F28DB4529F68BC397704D8A59872E82E86B476921BB8205E11DBECE48DD99F3CD27C94C3, 75967C258DAED859A8115F8DA814B4C842760FA8B34DFC90E83872965A0A722CD04EC25DFDE668C36DC21E9C2AF6E4F71EABA130328367DEC20F3A12738D15F6 -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, 32C805098572437CDAAEC771C1FA0B897E7E7E3C05E438163F4E915AB2B32B6AE8C1E75E5B136F6A01CD514CFC01310DE17E65E918F709D9BC63232DFC8D3D64, 474AF0DE868998B3AF9D97AD8B1FA84BDEE8B7DEC53354D90EF5A75C306BA4934AE3708FB31FFCBADC4A621AFDC8AB9C7C56849DD23A26212AF8CB5BD3EDB491 -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, A57E18AFCD2D374B11AE07A6484EA89C4AF3F56CACB828FDA06EB4D7A982AD384A9488B2A6FD80B019812C830E96F3D8F89E1C8E1A876FC03801777BE93838A5, 74D8023B2933B74C15137DC9FD38B12259C65CCAC28886D9A963C08C5BAB050F037CE644F6B60B59D746AC7D83F438EAB0F10C9D89382D1A1D0E25AB3152082B -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, A51DB1F60C9D62F32BEBC0B0324326B88824AD3E7D86108D945B947697488BEEC1425A3EAD4B402A524D4B9F012ABC71934D5AC250E7FCCDA72CE0387C411337, A058D41694C6DFE5C99CEEE7F58AE8950E67F5E48FEBC0820B8BA7F8B84F718B1063C3B4B68D476D64E8FD565527A98794068BB56DECECB8FA91C312D29B22EC -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 8F3912587EEE0793190ADC1794A3985E3DFAF53D743831F7FC8442EA5B97269D9240E962AE0F89EBA2E8056A3617C0976EEDD70407631E55EB7DD8C7AB3651E2, 9FBDF6CDF5705480D7AB6F9DA13FFCBC1FF407A39E9C5A400FE48AF3D955636CCCD911BC06D1996FDAB2CE51B650B6FFD9B507898675345693FC7E957E2246A1 -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 9697B036E62AABA3903A88CE8E29D002808FF9A77B64D2E1DB48E5F6910BEF83A6864C7D386C5E33CD9799A4EA375F74AF02C63B10354C2CF9C009B5F26FD7BA, 8B28F5EDEC1B01C98D56427BFD60FC62D0E27C166854E6639E454A9CFBD04A22688ABFF850CA1C8790ADFB5AEF3D5CAF8F2575444039B39B5AE9BD6DD2A5E15D -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 7E5BAA83F3569551E2AA727EE2BAA861032307D702DA83B759DEA45E14105B4E8BC5AAE8709F803F60D3101F1A9A4C47B784E09F0BD5B9F77FA2C63B9D733422, 55BB0F6A651F40307A13192DEC2C636C48725EFE8FFB4EE954E39150139FB8E09ADB438CD68EF5ECD7A604C4E45BBE0C3FF35F7CA8C5818B37BA292A690515B3 -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 79E74A34602DA62096AC3F1B843F68004F32191AFCFD011524732D0BBE245196F9EB8DF3F26E52DF605F658CC1EF099FE35CE91608CA8C6BCD987196CF6376AF, A9ED004F5657EBF42131E79FF0345F661F9257171164436EBBA89B4086C60BF013D989F2950657A8F0492F08501F04CD1C5422CE1285595168F6181E0425B196 -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, 1718ADB83A3201A5D1770EA9B7D1F5DC65F92A3E03130C45AD22CC125E8196F839B4161F33CBB177C737DE2D26C88B5F04016036DD63585A4347D7D69D08CD9F, 8758C686BFF6B5D5EF9465032B46B2022BF89FF8C032CA05AECA6F784260FEEF8E75B75722B163F5C6E06D5BD34C4C72A03437F44049767BDFFBDFF2B1599907 -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, 4A2E0F350D419D27AE7FB50806C75970C6CC1C0DFF9D53EFA2456FA15E2045A617C199F62D752B45C18A543E827382F68CF43BC68C0B31C2C62BC5C3A3D55B9E, 267544CCA7A2D9E8D436EB413DC73015D6FEDAF82098ECDCBE3BD26021B89367765849A9B2CB4BBCF94B9EDE524E2A65C125B644B83A85E92482175BD5C75101 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, AA105BE0C1C15ED430189C0379DDA5B7BA620E5F114CCCEF7065E65DA31F04AD4431F66A90673FC47F55F8FB04FBCF157E13496503084A23573AC15397FD15DB, 2A127FB5554BBC248F40133104E20EE514E004A6BAF7E17199BCDF16F91F002FDE72ACB43EAB218E697474760D53B2FF0F281CC38B3528F8E1A52B9B97707A96 -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, 67B1F41D5F340EBE4C6B365B3245A09E1359908709BB69172760D1A49CC742F5911C0653DF0487B3A7DFE9D477B58931CD0794E12130591BA0F261D949B30A1D, D6350078B28D45BBEAA58B91050B04FA7967D8EB238848C5ED0586A55E4F562DF6F4BDEFB68AF07F994E5E51A74F5D839F5E4566DFE313664E09985238FE49D -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, 6D63CCAFF16DD738F211B3266173CEC2054946DA79154A26722ADB23815513B65895F72F3CA4B694AAA808C95B21C3659CED70BF74E3DF23048D14278E1D312D, 60EC71FC424AA364C454BD1642E38D3CEBE263174652B5BDD106F71138D07B1F86BBF8508AB447C26930FD47BA90EB0EE8D5EE46C5955A8826CD10B251531411 -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, 310CED3BD35D6DABDC49FB7C9A3057E2EBB467095EEFFCCD34F98AF366AEC4554C18FF354A6809511FE17F9143F0056EC90A707B7A994FAEE09508C4B1A1221B, 7ACAF3084D3C830DE4D23F5784E3000E34F1626901F2D131C11128E7C89838CD6F1E537681A77145DD128BB0E2B09AB914A5A0B6237CD9A51C535DD9C06E3FD5 -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, 70AE5141D286FCB433BC5EDC55A98EF694F3B0F27C602B87FEAE21E5A07999BFF17BC1D19FEC9BF66E002FA0B9D8DE617DA87B6167FAC6426C2CE2029EE89F70, AA21F8B77BBC92AF7C5B33A070803D68B02B7948B91F361ED71B9F68FD7A14EFF22B268F8CDDF9C6F6F61D4545A92CABE38B8874EF6A6D342DC36BB0611A478B -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, 2804469D5E8BC52D5FB071E531AA48B53CD92BF8F7C2CFB3BC4BC27C2F1BEAC9360DE70EC42B44D71ED0E88214949C6F9433D6EC3D18CBFABFBD7BEFFF492148, AADD3A68FB1ADF31BBE7609FEED92C7111FDFA449CBF5377C2B71A239A094F6BF0738013EFBF5E3E9F4E206419903087E703615D0358D1BEC1FD1F0BA3790EAC -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, 4AA782B4A6D79D23E63E28186C831598C2B6D1CFFE9850353413F8EAEBD917D2464ECAE10A0CC07C3C8E27EE31202C4189EAE16738511207934A6921E4D1763B, 385FD4A4D47E11427B29AACCF5BF7CEE95DF4D93E39AFBA80301F2560A3091BC96F749AB3F71B454919F1911BD05131B59EF11DC208DCE1651097EC67E6EB0C3 -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, 8588CF201CF40F14DEACE5E00051CD4B877649D0F986AAD3043E339FF788DDC6A65AE429865116A4B3435400F21C5209F94FAB7E8854E326FD8B64DD81FE01BF, 682A1A52DAFD4FA853ABC583A385FF8C79546B4FB267A0779D7CA0319FC0D31891AC48B8186E8FA2AC9F8B686ADF10DA70CB3ACF8208639F898DC3E3B1B5A183 -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, A620F8ECF232288C97707323F2955B8388D6D6B8A70D6AB65FBD793CFE5F85EFCC0834B7B0774629D9B8C79F99966583976B5564AEF87FD9CFD0CFBC8FF3F6EE, 92E350F051FC5A2E351B7D90E8E9711DDC04AD55277CF68E89EF8882CC482598E7E7BF4A464EC0EAF24678561DEE280EF90B68BEBBA2D535374A21A9B08D425C -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, 597B3D78837B549494D002AC755536875CF622EA208C95DAD3BD5C6723D8CC4DCC8BD1878DA75ACB83DD74A165014AA152DAA16009A59BDA21E39AA9CC01446D, 78353396BBA308CCABEEF639E60D9A9FDFC90A42B546A0ABF5887EC79766EAD2F4CD3C3241C95D82341E0F3340383A5361D72362B79BB4F37C18E2EC4E912E96 -A0D2E82CA5E358392DE9951D10B533E405FF396E226444B3B8F22B54A64B, A55C58793EC59387C12EB12C958D832802E7F26FF6A44366AA4E565EA6F2D85483B644CB6A37A26E9B6F64C7C57EC4726598FEB5CC28FA00C192AC5DFFE1FF55, 5460DFF0C0C7EE454C6B17D157479532E60F29F63419F05710ED129AD29A8B6DF625CD03C8B65E9E5796F38094CDFC62E4B6C8BE2789781A82DCAA2A5EAF2980 -1E278B885F1AA08AB89BCBF57321F9BAC11FDAC4A672CCE1B2AD681FDF2E1, 8224BEF425D08B38EF1D17322AB523117D2070E8C08A001253BA599ABCC26F64006AAF411AC1D9F7C81CF9FB377B53A304971F14D01C36BA960FFB715BD029E7, 8409C8D519AF0AB4861DB5396C22052972143DA2D13596B4669F1E7E0C865333A7796560ED330FDED098F488BC033E4CCF75E9981631E3CFC037C4160B59ADA0 -5A76A2991D4FE1A029D363E05965ED30435F904DF35866A51808385F9D8A3, 31815214FDADA4529A8270A9862525244AFBFE71229B51D1906827CD61C646452FD8C2893CA2857F4F9112776FC58B32259A0A4F764BA733A7E4DEC9892AC4C9, 347ACFED600BE372D8397AD87D69F64B0FAAEED073DFD423DD0E0C1373F625CEDABD6E015B03D582434CFE18D01193B41E20D2E0DC3BE667E7EC604800D05B7 -10F63E7CB57EFA4E07D7A2BA10C31C790CA1EB0E9DA0933EF4818A91ED89E9, 684573059BE69D10EDD1270D876B4B00D2679F8C11CB57E3AA6E2D6B4868C835C1536C080AE3B885C18C9AEA585EA599F740472454852FF191D35BB26F1338A8, 127F6B9F70970342833F0CB6836F28694748EA1F6D4C7F4A8D44956700F906711B2A1C5FDCD86F2C5D91797206DB769C01C3443CB85200039392B9BA3C9D5E34 -32E2BB76207CEEEA1786E82E3249556B25E5C12BD8E1B9BCDD849FB5C89DBB, 4BF724C7D73C2854B46587F80971E72EA17A493B841DAB48C87A87C1B30DF08B8CC01F964D5B40618DCD919183EFC9D8360A61842C1BAAEACB0DDB5BACC5DC00, 927E7CFE8AA0F4B9E2AB4B6BCE17E58E1625D1C9962D1CB8F44A34B67D8F3FE152D3A507845316510AB001DEB86E0D056B12A753E87C8BEC73C7C5A3B54C73CC -98A832626176CCBE4694B88A96DC004171B143838AA52D36988DDF2159D931, 261417D12BA8B678A66DB1569011B276365B6346B4B022C4EC708B9032E540D05A6C2992099837E875F2DBDF11F5A4432FEF358790065515D9A2F1D0D602BC0D, 39B94A5A302EDF8CB1B1893DE8E97A5A12DE475941561DC5804F46E024C72B4852B02199B348446C062490CED43BF522FD1E5FD6107B1406566681AFE695EB95 -1C9F897272464663AD3BE299FC49400C45513CA8A9FEF87A3C9A99D640D8B93, 164C5EFE103A0E81577CFA4B959E0FFFF13B413505A78CA2D6C08E3B0F83619B6750B4907DC49EE085E11A5F25AF455F6C6FE79727C8E89172D5682AF16038A4, 69F5EBCFABB9C0C42144FD26C34DBA2E081639FD53D22B656119805C42A26C0CA9303B81FBE658BAD6389A794EE82042FC6E4BF01E12C3184BDFD2A50365FD54 -55DE9C5756D2D32B07B3A7CDF4DBC024CFF3B5F9FDFCE96EB5CFCD82C28A2B9, 6BF6F957D5D8293250B0AA48932E0FFB577178D2D189236C46AE83FE8C8C2FB49E1CB214E42635D1EECD883FCD629C3E23BD39C927C2A2C360035B7AC0816A67, 1E8CAC6E779DA8708D4C4F7C676038CD4146C445DBB09678BF707C4C54734B0AD30A9A1456ED72F654B118FC3C339828C7F89D5724ABEEBE2E2168C276B12E8B -1019BD50604787981171AF769DE93406E6FDB21EDF9F6BC4C216F6888479E82B, 611ED6188B65549A506F3F3DE37171D57B1D3EB9FC6492B1954708DA139E0E75B1C45AFB951071722D5831F0E4701CB79285FF91BCF30C42A8015571E8FA29DA, 72810CCD402630F2D17DCB8D4DBD8453AF18B5E86907D95E0BEC65FCCC977E648F79004E3D1916219105438F74E9054821401948A5DE6673E84CCAA9852F1130 -304D37F120D696C834550E63D9BB9C14B4F9165C9EDE434E4644E3998D6DB881, 4ADA1F84385A0A4CE99169A8495DB6FB813A6961364FAB54B176799CE459B2419C326E261C63983519544A609737302BB2FA12E836447C3155A74C64BAFDC8A0, 60E1353C13BF5C4774413E820F3E814320135272123C30DAE8DF740E6C1363B107525A3DC2B7565FCA999CB20BD0E3A4DF2023EC9A5382EF9F14F6E11E69F410 -90E7A7D36283C4589CFF2B2B8D32D43E1EEB4315DC9AC9EAD2CEAACCA8492983, 20DD40A309EF4C2180F2AB17953D0F41F18B7E4AC8A355E24B3933B94FD2F14FC553361860AF029E2A9093A175CAD835B891A5DE7AE410FF7D4135CBA65A7F08, 6CB59DDBCC5D629F98D42C5163BBACEFF8A932CDA614E387B5BEA984E478AC0BEFEE3491B21FE1F2173F6F0E5AF147E40D7F5BB6FE9A60D9ACB3CD18731551F8 -1B2B6F77A278B4D09D6FD8182A7987CBA5CC1C94195D05DC0786C0065F8DB7C89, 3EBE74AD3CECBC35363544220FD9FD159B98E73D780614A1A57C94EEA310B198AA06E47CCCCBD317E80A5A328A4EACCC8676497C2B4424A3C495A80CDF153DF4, 5FCB22E304055504CCFA720F51CA8ED58C394B9498781C828EEE0970029A1BEE5A72BA6BB8CF93D2DAB0483A140B13AB78F184CE470167224CEF528F18FADB2C -51824E66E76A1E71D84F88487F6C9762F16455BC4C171194169440131EA92759B, 2CE6F31655103223800AE7B37FC5A3DF6F0B914A26F2AC49F42F9A52525CBFDF1C430DFE3AB7B85D0B4C47D69572F9F9173E3D4058EF53C3AA9F987E894B84F8, 243BAE65B31CED687875F204BC05A4C34B8195F6FE63F8A9CA9B3A08EEFA8EC085A74B5B2B50BAB60634510085159DAF95A763A5F9BC2A40E3022EA66C9F6CE3 -F486EB34B63E5B5588EE98D97E45C628D42D0134E44534BC43BCC0395BFB760D1, 1067A395C2D03F7EC31D9E43E8AF64A0C3235273FCE8F41EE7112D9B1272AB6E9EE9B642F81A2BF34A09AACA4E216118CDDA5EAD95B0912F38D9B9794053F729, A9D2F424E4F685871953C53DFFE47F1D50B78195BC7EC40DB54F621A292AF9AEA5ABEF0B3B27BD2D68C447DAD83CEC128E0544980DD7E8D7ACE6B60309D1A658 -2DD94C19E22BB12009ACBCA8C7AD1527A7C87039EACCF9E34CB3640AC13F262273, 98998139807F8D98943AA7CDB7B4EBFDC598B7F756E5541671161BDA9D04AEDB1CD6AC5E61BA56AC49E4CADB46C553484BB0D97B1972C1296CE686FDB3638DCB, 9C5A3BFDFF63A630711E211BB0DED20AC985A46A70568D65EBE22E25AE36035C34561927E7D38997B383478163CBA3F34BD76F71A88365C5FB906299D953CAB2 -898BE44DA68313601D0635FA57073F76F75950ADC066EDA9E61A2C2043BD726759, 7C7DB0B5920557CB09DC4776FCF41BD27AABA06234FD529A08BC9FD55A349835DDEE240414AE98E97217AFC485ED55048E5E79A93FA01F97103C926D3E415F32, 6251AC9F15D588271394C3D019D7E60655AC2092FC7B28F9CE31EDBA1C0D1BCF672BEB206B2F6941682E5DB61311D96EABAD4FBCE89E84E3DECD4EA10737A557 -19CA3ACE8F3893A205712A1EF0515BE64E60BF2094134C8FDB24E8460CB3857360B, 59776811445DE37AE14639B1B8FEA0CC58E7CC82D27A18957A924851CE17DD2393629E0084349520215D925F0C97FAA11708181A08A2257EB6EAB85E26C0249C, 20E1E7C4B42385FA0D289166BC8CCDF1A6A1F206AC7F8E7052F1B97BA85153E40204C87C2736E9758DA4A240DE07212706F7FFE87FF7A477BE1022A69EAA9BE4 -4D5EB06BADA9BAE610537E5CD0F413B2EB223D61BC39E5AF916EB8D2261A905A221, 38FB23E97B9614C4445C64FD87C74E8C39D519694749406C66463E5F91D9CD6AE5068C9B4362B75EF5FFE353EC40CB4D54867DB18394F9AE146CA4AECC6EA58A, 131AF52F963CA978CA2632717D4BFE23A8BA92CAF2A4B73379310E9CFC9D5CC01C74CA9E1908B0D99CA04F446F338EFCE3BDB600B03E39562A45F5E7A621BE13 -E81C114308FD30B230FA7B1672DC3B18C166B82534ADB10EB44C2A76724FB10E663, 53FDFA1A84E5DF21063955A42494E607176D302731A67373B06BE27F7B6A41F1D7DADF70705021B0EE5151BFD3D45134F8FCD826EF2E01D6562BB30684B3EF4A, 87D1F06A26CFDD0E97677F198D0B0780FD0A27758D4EC5F2F2AB68DB90BAC8925AB12C7609E76404CD79BD9B54E1E5047314D2B82057F443217538EF76BF809C -2B85433C91AF7921692EF71435894B14A4434286F9E09132C1CE47F6356EF132B329, 7A67ABB7AD9F6BFB0DA0E6E3F5719BC7EB13A9D0C33DEAC2427BDC8A8D9608856D86909B3290955CD23BC1FDE1171339FC17B8129BDCF3B7A66B6222CF218D6C, 3CC20CD90A54CAB34A49D110B59DD190C90BAADA8265D76E3353DE7BFE3F7A052F5EFB9DA9FC85CFC54C83DA6B2CC2A768E3F31803C65E670AA56A490AA27AA6 -828FC9B5B50E6B643B8CE53CA09BE13DECC9C794EDA1B398456AD7E2A04CD398197B, 7F25DBE750F9AC5F54FF0E1322B0CD7A97AFF7164B0DA515139877BE9BAAB037325CC182677F95BA5AF871C1B2E6F1893536D101DF00819C647B75DE8D3D8487, 62BC8788D1768A6B1E926A96629FD852680F4ADB1DA096F131C15E6C666AA89B4FC281AF9087ED47AA13DE3DCC218F0E00486FE788DD736646980F2B26923D68 -187AF5D211F2B422CB2A6AFB5E1D3A3B9C65D56BEC8E51AC8D04087A7E0E67AC84C71, 7064E5D45D7B36BD4E1F522BE5DCF673563A660265B3FAB6E2C78AA3383982950BF0E7AA59551470C8E1FD47BF2CACA787B29FF652577B5C24330C1A3DC23B7A, 10807D5BFFCB5B0C00E007A0A3EDE2DFA38B7E4429E72E768964CCFD1B49E401E3BFB7E6F789B5581F9616B096CD38491A5681C8E9146DCDA98F8F1174577EA0 -4970E17635D81C68617F40F21A57AEB2D5318043C5AAF505A70C196F7A2B37058E553, 917D93DD9DF5475EC77A851F87B4D108BD72D23BA043DEDEE353B620121ABA6D6EC77504C92E6B8FA6DF92714398B3497935A6FE24B4D570EDD92193F3B6CD0C, 9C83CB51F80A77EC0D21D5C7D4BE2461903ED5F90B5773360E143528911D47465770EBB0FC8D60D04AD5AB0AF20C79599457F86E85953F69D23B60C8EAFBB446 -DC52A462A1885539247DC2D64F070C187F9480CB5100DF10F5244C4E6E81A510AAFF9, 89FF348A7E4076E2E402A63A57D8D15ECB7E01439A08FB7F7E47B9C83C2DC79FB5C4E13E7B01F2C5DF053113DCA93E46BAE0F164F3907D8F10BF60972A295005, 2B320D3859E31382A4D80A8B078D7414B56CA910E5A07B3A7DDBEF3638200D1097356A8F53B1A7C36BBE2246F2281C782792AA9A0ADECB9548EF8CC420E65394 -294F7ED27E498FFAB6D794882ED1524497EBD8261F3029D32DF6CE4EB4B84EF3200FEB, 90C803BCE197C17CA7C61D2B7814C6B3ADB9E9ED3275E79A7FA4BFA3304207D1CC60483AC719E926CB189E6557BBC2B9717C47E235A462309875EFD32E6E57DC, 8308A4A1F260DCD5B3703C271ACC1DC4596322C6AD21A3D900F74F9FAE19BBBA1CDBDBE8627A2BE770426368E811882FED9DE6452103E1A7FFD705C1C9562864 -7BEE7C777ADCAFF02486BD988C73F6CDC7C388725D907D7989E46AEC1E28ECD9602FC1, 998143793AA149EC90A1FA964BAB85DADE4FB2137EF4046647E8230FC1F7E644008FF0F0E2416D167618F9BD0A09D2B64E5FF27C8F5A1446FF9CA39763E11384, 471606B0ACFC79BD23DE443E8F40CF9A08035F9F47877B76C662DE301835F123142BE5DDDBB68113250CFF1557FC5E0C417C6D70DAB93BBD1CA1BF348EA0D14D -173CB756670960FD06D9438C9A55BE469574A995718B1786C9DAD40C45A7AC68C208F43, 4CDD78019B409C73ECDB8AA34F6834120995A85A2062089D51C80FB6639E17FA9E38CABE3AF5CB3778E2E82962079F3B93A15E29E5ED97E6FD38A4CCAF27A1C9, 1027AC06B0C6E20C81497F0A219BDCF1F2EECE2B873E07440F981EC54096F1264F03C6DDD5CF9F85CC58C26AC99FA8B82B162A58F195410F266B1C3DE4FAFEA0 -45B62603351C22F7148BCAA5CF013AD3C05DFCC054A146945D907C24D0F7053A461ADC9, 4E432BFC91BD78B0D3B1D1A6440CE3CB27EF62D125E286F2A8348E0A6F63B4FC62089B62D0179830E209793322F214FCC4B0CC8C49E39918EBC8F3EB4F94FE3F, 58B8E5475B205030FFA462F6B15B3437E6A9680136DAC7A1AA2984A92854DD482EFF796215A70575345830B7CC1E794BD7088A54C5A7FEB203794DD84CE106ED -D12272099F5468E53DA35FF16D03B07B4119F640FDE3D3BD18B1746E72E50FAED25095B, 8867FE6C96E4992FE47A7E33DEA57951CE3182CC8A7533A081BED285E5C6F760E650CC295177AA0E4009CE62E0312126CDC11D1E5946BCAB90C76F2E4ED91B13, A183F7877397C9F9058A7CE9127A9AC1BDB8D7E0A476F11D0D04FA16A4E51D90C26CD3A486A2F43D09D0FDB1A3F422BE7551670F155A7A1CA9ED5708F5E53E2D -27367561CDDFD3AAFB8EA1FD4470B1171C34DE2C2F9AB7B374A145D4B58AF2F0C76F1C11, 2693423CD74C82C951CAF4B428DFF41A008D3C4655A997C39AC14B7F882BDF50EA800AF34D4AD4AB800E2CE8E8DCA38E7978EA9CE0D34B812461519FD55B08EB, 21AFB3ABCE299660D4CF07AE57B175DDE8C870216A53F8CE49B3ED4A226408F83A156B6EEB2C1D07375869FB52D7342D6B0F866C8BC9325DF6635F03C2B741AB -75A36025699F7B00F2ABE5F7CD521345549E9A848ED0271A5DE3D17E20A0D8D2564D5433, 371BC89B9B46AE28DC8E618D19C5103630E6066ED2033CA6914658DD96F8FA32AB52595C05CD662CE940B751EB0F21432E7E302E0DDAF80CADA2C248D36BDB3B, BC2F4DEE1968B14E51588A219A1F89CC4D52A218BA226044A040C6A535EC8EF32C8ECD9297F1996F0D64C5E0B971370744E24AA60752C45A4A38A34E1325292 -160EA20703CDE7102D803B1E767F639CFFDDBCF8DAC70754F19AB747A61E28A7702E7FC99, 6F02F99D9DBA57CD6D04D38BE702B2A62C66418E7C240DE2376D8942AB2410DB446E965F3BF1B4C6437F7145DF0E76CB0A0316DA1F93313CDE80BBD43C84B81F, 1A4EBDA45F244EC7268904537546911B297D40D18F3EB74B2A2110D26EFD49645FB7E8CC1BE17BC8F6E2B7D1FD4A5A72D5011D9BF3DF38836CC88AA814745C36 -422BE6150B69B5308880B15B637E2AD6FF9936EA905515FED4D025D6F25A79F6508B7F5CB, 84AFC10DE9C12E52DC24F9A7E629E12C7A5674D8137A6FD0FF127C278E28F73369C48BD647B75EC4723BC34EBD54437FB41A7B88456048BD25767D55F10D3412, 5EA3414EDC4647ADCC902987B0C58E6366FD1038788B7D0B42155715FE1E587E2BB607E7412A0E42D5B020D8864773026240754FA6D7AB24D1ACBC1BAC1E7436 -C683B23F223D1F91998214122A7A8084FECBA4BFB0FF41FC7E707184D70F6DE2F1A27E161, 41F507C72A18B60A00E75CA02870AE93482441763A6B10CC28BBA9887DD4C2046CC192B7EA2D2B9C4D49F6241A5BBF409E9458C8FB16F322FF068683FC9C703E, 840B5C8DB4E6395DA868198D0D709BFB56CA10BF95CA4411AFC4FC8065F15F0B4F768D159FBD6F716DFB53F64300FDB199BA7A29910457F65B1049964A0210FD -2538B16BD66B75EB4CC863C367F6F818EFC62EE3F12FDC5F57B51548E852E49A8D4E77A423, 3AA314EBC34CE44527B27F8A4F15D69F3B9261D794B82B7D91A66FE14EB3EE78065C9AFC3939247759265F0982AA379C187615755E3A687E826463CC42AD531A, 8105A163901DBF780DBE1639FDCBEF9A1F05D154AAEB29992AAF093097E07ADE0C500E048A844D2076009CEE071759CF0BE165C4846246B3681EEC7B7A085D9F -6FAA1443834261C1E6592B4A37E4E84ACF528CABD38F951E071F3FDAB8F8ADCFA7EB66EC69, 6DFE13B16D991FB784A17B441949DB4E86A9EC0A5446113BEDA4A58A39BC2692B4B8F6396664A37E4E5195B82DCDBC14047D1D4ACF1B25BF719166E8EB81C6ED, 7B688F4405D02B58BA5EA484709EB2B4511245B61478C08D5D782AB40D3F8A8A71C1CBCCE5DA80962048D9FA657C6B55B14EF5A478725C8AF8CEF83CEADB8CCC -14EFE3CCA89C72545B30B81DEA7AEB8E06DF7A6037AAEBF5A155DBF902AEA096EF7C234C53B, 8836ADE8D3C03F78ECF1A81E0BC324BD9CE4666BCC24C359D07AA9506BD9B42A4ADB6B53C12E3D57D2366C82D569C34199C103B9DB7AD462CD31BEBA3910815D, 693C3691FA933E5724D073C546B191939D17A57609E9620E440C6F8F04748C00193CF4BB5A8B0099FD4EC5B65E7AB5ED9725813BA6757A6594E4A9A275CE09C3 -3ECFAB65F9D556FD11922859BF70C2AA149E6F20A700C3E0E40193EB080BE1C4CE7469E4FB1, 52555EB51EAEA6D9EF7251F820B63CBD703D59C45E1D82317827D08563FC3D8577C1DF93B3B839864324444054B766D1A02400E1BC00AA0F9136F11D860C591E, 16B74D136388E03F514EA1277B48C78BF1EE9F8C4C7C39E976E8C67DF5848C0EFC49775603F64C261ABCD1C22D96DD41ABF69A753DD4783751BA65BE9DF7BC29 -BC6F0231ED8004F734B6790D3E5247FE3DDB4D61F5024BA2AC04BBC11823A54E6B5D3DAEF13, 9162966F8F4AC8D00E722C8210CFDF540698F6B28B2E32F2336B3A8B3CDCAFFB0A2FD6D34875FA8BDD1D9BDD5E64F593A45B3FA8B2044FFFF3185D73A6E40854, 46B32DCF978D18CF20A1E4017A81ACC2AD391F2D24B25B4F67BF1E34D2FBDBFBA946CC8666A194EFC5E8B3B2D3D86E67D13BB332AA1A5DE2592DE8A30CF6F6B4 -2354D0695C8800EE59E236B27BAF6D7FAB991E825DF06E2E8040E3343486AEFEB4217B90CD39, 89FBF518B0EC6D49C608E2DE5F0BA8AF99AE9653C61B3A224BC6C09B3980FD73926D5EE12F2E5B047B47F5B08712951B315782C7B7886CA68E467D95D20EB40B, 99EE73AD421DEC5F2428B735BE5B7ECFB374FCC2569359109E579AE1CE628E75905FCE98D609FBAF16B5B3E72C1120D017012C1A5F8805D13C4EF0915B70CDB0 -69FE713C159802CB0DA6A417730E487F02CB5B8719D14A8B80C2A99C9D940CFC1C6472B267AB, 42B17889CBFF36444D951AA6F3C13215EB58220346AFE746097922A28020E67993363D7888190B387990E19F8B7877572070A78F1104EE2D022A30C2FBB07CD3, 880C9A2646D732183BDF1D440E4B99B1690A70FEC11EA044F18500C5692CE68A0124B0285600580BF5696AD5ED26821456BB6D2AF6B353E001A96810BE9518F4 -13DFB53B440C8086128F3EC46592AD97D086212954D73DFA28247FCD5D8BC26F4552D58173701, 73FDA0740A7CE8144BB1A9047D6DD139930A50CBD0A9111094FC1C2C58A338C0BB352543FD4C48C62743F3FFF477D80DD77ED3C94624B45612AD68BCA593C58F, 8E6DEBF8577A44E371C84EA5E9D71CEFD4A3369F24B2DD3BB39870DA8EBE30300E9E24AA66215F540D726D7326F6F5093D2820D737E70D53C2D3A25888B2B25F -3B9F1FB1CC25819237ADBC4D30B808C77192637BFE85B9EE786D7F6818A3474DCFF880845A503, 1CDB6D10BD9B2B6288FBE93FD6CD5E8D7389E864F025787A00FDD2F655A27C07E1582373EF80F3AB0E4C811710E5C733CD05D10A2ACCFCBF5069AD858E7CBBDF, A9435FBE66D75B92BBDBC277DA408513D0AEAE81795AB1655C2E2095D2AEE6CD0D18DE3BE147E311A38A9CD39E4F13934EE08BD52DC46438E8561EB0AF2A6E80 -B2DD5F15647084B6A70934E792281A5654B72A73FB912DCB69487E3849E9D5E96FE9818D0EF09, 984760CDCEE4311726F9EAC31CC9F54B03579F34006A74C10FA7A0DDC6A212DDC263CCDAD2F0AEB74DBFB2E724B5828EF4C2E6B36C38C54D6B1695167244BDC2, 3CF7BF78F22918AEB42134E0C9B8AF682B2846D98673768986B52CB73D7E540FA5DDE3B3D7C89FCB5EF2A386A2AA440623348EE6BBB7009E00CFEECDD3F8F8E4 -218981D402D518E23F51B9EB6B6784F02FE257F5BF2B389623BD97AA8DDBD81BC4FBC84A72CD1B, 46EAC0F2DBFB2F8AAC2D8346E45090DDAF2D3C4EF47EE9D61D2974E0C636CB6016878AE631E90DAC9A6EECE79C51D1FE05D5F40F131AA6584B1EF720447A3DAA, 8D5D4DF0ED912BCF66CEC81CA85C8D7C97FD6DABF0C07A4DA53578D813102FEF068E91534844D506030006BB894EA190928FED8CE766FA1CADC5DE8AD056584 -649C857C087F4AA6BDF52DC242368ED08FA707E13D81A9C26B38C6FFA99388534EF358DF586751, 73632E05BC428566035C8A9BE7EAFDB354FB8ED39EE80F17E10BE2CCE0064DA7A064AC6545BA163D72BBCBE0CF6C8688F90E0902881BCDEB1034E69FF20A7D55, 859F30F17CCF4C660A45C8D5E2D6AA301957F3D160DC1D011095CBF8E7F577176F5AD86B09A425A2B895F248F2976393966C900015A795E914BAE9B0F4BAD649 -12DD59074197DDFF439DF8946C6A3AC71AEF517A3B884FD4741AA54FEFCBA98F9ECDA0A9E0935F3, 3D8764B45BA797BFF259186909420A3FD62C453336E15BD19A0CCFEAE51EF11DE38688DCE17AF94DE9B23663E48E09CF2D0ECB0C5C454CD3645F3F0B4B6BF7F, 2B0BBDEBB8F6440F3B4CF38DAED819DCFED8A91D50DC03D2C4E52B0D135F15EA62A184A0852BF4EA957603B4A3358F550601023FDD6914E48363536833E5CA56 -38980B15C4C799FDCAD9E9BD453EB05550CDF46EB298EF7D5C4FEFEFCF62FCAEDC68E1FDA1BA1D9, 30416095FCED0B025F84745A24FF666B906A1BBF44AB0D60E42D71487F15469AD38C57B933CEF4290FEB1912615C0EBD661638E9946B003107639515CA2242B6, 4E92DE551BDD7AC7B391D98EC68AAEAD0E21FC2AE165B93793ED3D284C7E225B71003359CE4921D961D4646CB7C3A87A2500EB4F41A8511EEDF288FDB093451E -A9C821414E56CDF9608DBD37CFBC10FFF269DD4C17CACE7814EFCFCF6E28F60C953AA5F8E52E58B, A4D8B116AAE5C8D44149B82E3583DD8389D6C3F81E964598B1693636D18CDA28CEAA57C46D9762E5BFE09FEACADBF942FD7DA9197BBF83DA6190ACD461573791, A5198455EE3935B2A7148AC8D3F6EB4223893C1996005A8CB9717DDC1856CE85DF1C2F05A4CF0A6A05AED1305FC53A0CC2843607C918AF6F60BFF077FBE134FF -1FD5863C3EB0469EC21A937A76F3432FFD73D97E447606B683ECF6F6E4A7AE225BFAFF1EAAF8B0A1, 175C61CA9DA9881DD4833CB80C7FFFA291E4D010FD0AEF572BCF43A8A0399E3C5936F962768D2334F4788246240F9D4D00B1C362DC94D1E8BDC4BBDF43DBE1BF, 6AD69E79983CE715E2FE6F0B8729C00BC598C51A940DFF26952AB60B3284FB9B78E155A9BC3B3FB577518CCE1885816CF45BBCBC108812148D26CEEE8F82FE0D -5F8092B4BC10D3DC464FBA6F64D9C98FF85B8C7ACD6214238BC6E4E4ADF70A6713F0FD5C00EA11E3, 37F6CF5713BAA43E215E1BE99B13E43DD953E613BA2DFAC268CAD3B4213418078CAF77FB952FFDD0FA7AE1E390FF469B09C221E93E2C7B9E018184782085A094, 54C7367D2F665D7359DE79178E791C2EDC483A425A536845F5B8A7A63A81382AAC532B47E6C4EA3069FCEA9F126F76F39D65D84D9EA820FCA063282139A23346 -11E81B81E34327B94D2EF2F4E2E8D5CAFE912A57068263C6AA354AEAE09E51F353BD2F81402BE35A9, 8F71039EDF828CD9379A95DF0523842FDE5E5E39E43B1545B6F263F007DD806E1DA58122301A9EB86A073E58D489446DC26D3EFC3FBF03FC400060DA8F42A98A, 12F4DEE9F23FFDEEBB6803833F900609390621101380A92CC2A4D4377A3DA279CA4D177FDEDA4E6715C8E8EF852AD65E8C5A6F96F96F904E26579B0DAC811089 -35B85285A9C9772BE78CD8DEA8BA8160FBB37F0513872B53FE9FE0C0A1DAF5D9FB378E83C083AA0FB, 121D15F9A33387C1E78AA44660155BFA1199729615700BCF16078E1A724BE9FFD6C389E806813EB0926D64EF862C145C3239E7B63EAF522AB9EFF02BCC83235C, 5FE9880D1D7DDD844EB861130D1D84C1BC9EA96ADFD8E2A9DA3DD646F56086BFE5807AF8A8A84B013E4521F527DBA446301844C693AA7716E8748BE4E87EBB0C -A128F790FD5C6583B6A68A9BFA2F8422F31A7D0F3A9581FBFBDFA241E590E18DF1A6AB8B418AFE2F1, 3B8C1E53C9E6F748865725870E904E8052DBA1E61B19FC0392550F12D5B96C55AA971344B03F58A05CAF1C5CB0E2EE34BD438F86F02B28307479A09B47B7554B, 63D6E141F042064D7253249392AF5CA77EDCE7AC08CC3E4756D75B81145D18A2628590F79550F75A50D2A2997AB054F0C120BAE350F272E6D1ED6454CC093AEF -1E37AE6B2F815308B23F39FD3EE8E8C68D94F772DAFC085F3F39EE6C5B0B2A4A9D4F402A1C4A0FA8D3, 20204CB499AA0D09C3CDAEDA04D30D4DD5C948DFCBD00A5BD28BEC87DCB1391D14E66BBA128A3356CAD2631E88229E319A9CA86AFF6376A0A187548405F5DD4A, 857EF0131DC1B80E33C60DC5724FD81D937D0316FC87E24E79B72095718DCF5C975AE470D4A2E4A7DBDAD8B5638D9E6E73E4828579884B908540A68FEC5F0900 -5AA70B418E83F91A16BDADF7BCBABA53A8BEE65890F4191DBDADCB4511217EDFD7EDC07E54DE2EFA79, 9E6CF050C54D713BD183F505B954338A1161793A3B2E9B24C58A943CCD10AD870F985B929F8442588D3204AC92A74BB41002103534F264D31D1C5F12543F00B0, 745F5D01A6CF92263AC98DA958A01F99195D78C8FC686D79A49D5D7E3C66479C6EA0424A4A1EA5109B48418C216AE9D6A944F41E11FAC94FB59F4E23A2E3E9BD -10FF521C4AB8BEB4E443909E736302EFAFA3CB309B2DC4B59390961CF33647C9F87C9417AFE9A8CEF6B, 4ACC7228FA05E9FA7762AAC1F0B7F231A4A6C43E9BDEAF5E0ADA0948AD0CA06B9F8DA1BE59A891929AC8D22EF1C06667BDE50BE0D19523EC0306AD20CCB54E84, 91C2EDD72E3077D5E29A1497711E2A101A010A8D51550860E6FBE95C0C12A3FF64C0033FF25B5044953F5D480C94A17B13A1974BF45AD61AF61D3D9BD9CC5656 -32FDF654E02A3C1EACCAB1DB5A2908CF0EEB6191D1894E20BAB1C256D9A2D75DE975BC470FBCFA6CE41, 98545AE75F464BDBAA1E594D71E7B45937E86B16A13FFDBEAD4642E5BCF375E25549FA5D0EB6ED1EA446729BB63228090B88D8D2126FE540B03719FE9B99ABF3, 4A9619572C3CD7DA8B3722A855359EE01E49C87B3FFCE021BB6348F2C271A7DD1CA67D21B2B716AA061C1B146BA4FB8408DF9BF001585B84EA28B68C4745B35 -98F9E2FEA07EB45C066015920E7B1A6D2CC224B5749BEA62301547048CE88619BC6134D52F36EF46AC3, 9D79422A74071792225F8BADEB46DED375F46C79B542A432D9D2A32F11BED8030E012DB75C1626B101E1F48B1CC26562458FF4D4B2D3DF408161BBB24431A38A, 9E2A4CCB99CC3A569D424A1D7AD73CF11F2D82A0323AD15FAE134ABD00B70FA49FF9FC69C82520CD12EB9EBEFA37E0DA45FCE17CF082D06C780D898AD119110E -1CAEDA8FBE17C1D14132040B62B714F4786466E205DD3BF26903FD50DA6B9924D35239E7F8DA4CDD4049, 453BF8A01D627C228E6F4CBECCB4BBB60E042B481A63F9E90D6851E516B2045A69F38213E89B96440B23D10F72B8F55CD8FB21EB9C3C1B6FF453CCC13E47A067, 62D7759E2771B326FFCD5746182493429B1F24461A225640CB8257A6135A693E10BC6100F42C1266957E6270097FEF11289AF58FADF26CD1CFF445AC3235D437 -560C8FAF3A474573C3960C2228253EDD692D34A61197B3D73B0BF7F28F42CB6E79F6ADB7EA8EE697C0DB, 4CD3669E152507CF8B7F71442EB3B0150984089BD1AD02AA08AFFB6DF6FCED1D834225B5B43BBE20B13C88DA4A291CAEED3E897CF896252214E4C67886CB9E71, 95F70BBC5B9EFDA06CB3B2F21EAFD4C0F5DE4DEE19C168B565EAF53DE223B3CCC20669671E1A4E59CC1B97397729E232AD5C9DD0C7CC4D5BB138171CB472994A -10225AF0DAED5D05B4AC22466786FBC983B879DF234C71B85B123E7D7ADC8624B6DE40927BFACB3C74291, 1975D67891AF2877A36132D1D1D0F8B4C32942F84549ED9347FCB39A36819FBB7284AFD33D6C4AC4899520AED26AD0BA450E2C3EC1060B3265049F3CA8EFC708, 13242DF891480F55A876CCED8DD1E8012872B3F232811C30ADE353544E64E61806B36006776EE4545C956323F22FCFB3252F7D2ABBC922F71AE91EA73F58484E -306710D290C817111E0466D33694F35C8B296D9D69E555291136BB787095926E249AC1B773F061B55C7B3, 8BA054393895962062A00CE55CD59833A858CC5744FD634054DCA54B32B8B403170609EADD9A243483AE19729F4D090098CA6DB106D5D345B4F9AFFD1A6A2B2D, 3F9CC187A3920F26E8D26D210A191569764BAF057201B2FB7B33FA8A230950BE7095277C95EB6CCCDE42B6B2E23CA0FEAD0DAD80EDDB85A7ACC9B0F2F31261F0 -91353277B25845335A0D3479A3BEDA15A17C48D83DAFFF7B33A4326951C0B74A6DD045265BD1252015719, 8BC5A5958D7AD3A1914C6322C22F2AACA7D04FAC45402E956A7DD6F22CE0CF6B041C6BD2C02B95E501D1205D45AC919A46990398F2EC0FF2FF87FA630E997324, 13BBA991EED01C7717A51C9F4728219AAB8510FE4144BD511C1587D09F52BA8AD8B37B71C9FCDD1513E7A023C4D23F6BE39BAC5B47DBF8E580284D59B8456E37 -1B39F97671708CF9A0E279D6CEB3C8E40E474DA88B90FFE719AEC973BF54225DF4970CF7313736F604054B, 8774151C5C8C59685B46F070534B5EFF47E5E694C4210F65250F9F0A464DFF1A8FF9134C617C8530D4AD10B64FD9DBA9ABB9245A3CD438F4D26081528181A98B, 534629A27471D3B2141112BFA35A754E16D762CAB89AC98AF90A77799B3A6B3A44A6811E88A0C3D17A7FEC5742A3645BAD63C982337B5DF369749503BCBC7D0 -51ADEC635451A6ECE2A76D846C1B5AAC2AD5E8F9A2B2FFB54D0C5C5B3DFC6719DDC526E593A5A4E20C0FE1, A6490007D4C2C71B029DD85464F9E27A0181A634F0438BBB77E5D5281A478A4CC3306DCAD518979A57886A6B587276BE5D2B33F5DB57C82B8CFE3400BA11F020, 454926FBA183EAF83AAAFD30A92A46531645B738ACEED6FFAD0D008C28374C2F2BDE8758B287727727F0269B3323DE0A4EC856A5D21A38434561BE6D11815853 -F509C529FCF4F4C6A7F6488D445210048081BAECE818FF1FE7251511B9F5354D994F74B0BAF0EEA6242FA3, 599F74951EEF4718FE701F4FB97812D4C519711F77B4B174AC071B03993422C625AC79D10F83B956E8BE59D5948701D83E361863F603FD3500D0AAF4D9837A53, 92DA413C890CFBF3F8FAEFFF4DFFCCC96DA9E18EF92495F7282A6F1A4499CACA6253D2D932294982230C593402F3B5CF982FFA9B4480EBC7D3B7D11804AED506 -2DF1D4F7DF6DEDE53F7E2D9A7CCF6300D818530C6B84AFD5FB56F3F352DDF9FE8CBEE5E1230D2CBF26C8EE9, 639887FA4D06AA4A8AA2277FF1F6C6D3B317D1505F3D6020384FD8CF45EEA34C48D45DC3AF8756E6D773B7E33A5BB87DB2796981D7E1906A8286F25A1CAA0601, A3C7E605A7811E240A5F999D220E83FB649A03BCA87EC2107D13ADA371D5219D19F04186E3C6D4AD082A38AB647291A75721C3B25EC27FE1BCDE21A16F5068D4 -89D57EE79E49C9AFBE7A88CF766E29028848F925428E0F81F204DBD9F899EDFBA63CB1A36927863D745ACBB, CB2D5199595EE3BF2F905679E97F9C0744CCEB2F3B70D33E2870E746852B4DB73DDE78F287D187D7A32CE4DB04633DE67B01CC4150090C2336B6C1857E4B41A, 3DA238D7483F4211C80F56C3C5DBE654BD5A49CA64604E707E4142C5758E0E88BC48A3C0A6B112B494931F3DDE598496D195DF32CCCFA0F3CACCBFCB851E3DE6 -19D807CB6DADD5D0F3B6F9A6E634A7B0798DAEB6FC7AA2E85D60E938DE9CDC9F2F2B614EA3B7692B85D10631, A905E21D12BD019130E01BCB5DF45156C1BB6240D48EC15819680AB393CAA18FDE2A577B7007D2585F30968735EF189D0A3393F0D983D8C414996D1ED23FB6E2, A0AA8B1106857E70A0AAE5879DD0722AC9C027A4A22CB9600CD867ED68E43EA28C60768CAB34EB9920E2AFB3A74E981FA98F5CBAA08813C0F71D2775BC097EAA -4D88176249098172DB24ECF4B29DF7116CA90C24F56FE8B91822BBAA9BD695DD8D8223EBEB263B8291731293, 6D7CAA541E8824E52663D5B43611E0EB929FF2A5F527CA7AA6F56CF412DC231378DC0C4F6FE18C393A3E5BEE52B9FB8E6D5263D009584396EFBECE462379EF67, 845C355CC7125E36086C0FB4EBC5D215DCA33CFBC2FAB1D0788EE65396EAB0B3AD6DD031829F1CFCE97F1D501643ABAB8D58E1BF6FCF738FCFCAAD1DCE44846B -E8984626DB1C8458916EC6DE17D9E53445FB246EE04FBA2B486832FFD383C198A8866BC3C172B287B45937B9, 7E22AFFAADA6EDFFFE3C368C1BB8D487ECE1E1F58BEA37261B1B535F5F7BCB3A109BC52B2132252C5197D151B6CD9BB3F0DC83842353A9F1503E76E749B06EEF, 47C67696BC939D4A6E525FC46A5F321E4781977EAD2576C322167DBEC6D3BB221F5BA408BC7BC9A3CD35498B4FEFD444E7FC0C2222AB68316B0C0C8B0229D8E4 -2B9C8D27491558D09B44C549A478DAF9CD1F16D4CA0EF2E81D93898FF7A8B44C9F993434B445817971D0BA72B, 98B6DED92F061FD1A4E4E56BF900606E60B3C27A2A870B2EC8919EBBE7312EBEFAE768BBD1772E30051F77C6ECC673836C407F4C234331BF2038DC8B1328CEDB, 33387BEB31DF627C71FC08F3BAA698686F8BDB5ED7B40870EE4D57168AA47F889DFAC3D70897F0B8E3027A2EF56D53CBD43519605378B4873A10B3BC7099A0E9 -82D5A775DB400A71D1CE4FDCED6A90ED675D447E5E2CD8B858BA9CAFE6FA1CE5DECB9C9E1CD0846C55722F581, 5F7A2A15C45A41C33FF8C50BF391820F67AFA08899C812668C0A37F75A8B0B1A13D449B457F194BF05EB23F9122F7A6B62FED6B25F1D57818F284B59C39BAFF2, 9FFA1B940A7DAF97BB7CC578BD67BBE24FFBC8C36B781C6E723F4150AD03F3173DFA5DF91CDACDB0CA6B5A94BBE882103401A13DEDE1AF6070C8A64E0ABFD213 -18880F66191C01F55756AEF96C83FB2C83617CD7B1A868A290A2FD60FB4EE56B19C62D5DA56718D4500568E083, 5BC35F385F6FFE13C07D6794593E7FC7FCAA57891D4B51D66EA2AD326DB17F2A5584A62A9A6BA4ACD67FE36C574CC1E8736D0F87917E346F1BB14AA062E3BFB4, 62135F8A38D4D4F02D55581D8F0414ECC40BA3F779692BB94CE76D6E537C002A3F3A4360266508C5F47BAE87DA505A27878C501ECEB9836041DC9EC578847081 -49982E324B5405E006040CEC458BF1858A24768714F939E7B1E8F822F1ECB0414D528818F0354A7CF0103AA189, 256FA4AF84E1657D4824BDA91C12B251E4E35FFB87E24D5F6DA78FE69B8C5EE7D98F4BA7D3FC7DDDCD915FA338E0C858C530624FCDB9189C81AF149CB3EC69E5, BD54DAA1C23A1E33AF9EE4D62D1B0EDF455EA151DA561A924B489CEDACD2E414A21E64313BBB17186A15D6709623352A2B19C8FAB44A64C64027662563A921D -DCC88A96E1FC11A0120C26C4D0A3D4909E6D63953EEBADB715BAE868D5C610C3E7F7984AD09FDF76D030AFE49B, 3B5B3DDA3C99B8153C062E86E871198A5F4536E6CFC87F7C16E21DE449C3552A40CEF3E6651D06A8227E75A9DB33A5E8ADD5CE2902EB80001D3A55235ED0CD9D, 681BF926F1CB32EC66667090B15322EB28F66ADFF450AE0511E8EC36A08E107BDD76D7C903239FB1560317F4F66F3553F2A0B74D523499C5508ECECD81BC55CB -296599FC4A5F434E03624744E71EB7DB1DB482ABFBCC309254130B93A8152324BB7E6C8E071DF9E6470920FADD1, 1E440FA64E7BB7C479DE5DFE805A02248E9F97E73602F2BF0C7E4851AEFD75F827738EB389EBF4C9FC86021745C61DDC663C72E9970A8D1A90F3687488736BA6, 587F43C1D742EC2399C20239CAA6ECD32A7DC82FD0957A2182FA615D6C0993FC8963F6E54DB47CA8142D69E4D5ECE38835F7C60CDF4C8FA65BA6DCB02C0E7AFD -7C30CDF4DF1DC9EA0A26D5CEB55C2791591D8803F36491B6FC3922BAF83F696E327B45AA1559EDB2D51B62F0973, 75ED926CBA9C6D894E9BA35383B68877442768EC0D4CBD0EE6D275474906102FE3F27A8D92062C5EBF9ED130EAE711058AEAC2D45DD472576BF7DC3DB6C45155, 71427B6D967328078455D02EEE6F5AA04E30CAF5D8F716CAC88812D7234B5A194E5B345F2A096269F61471B720F18F8DBA1FD20CFE4557655AFA76D61A030954 -1749269DE9D595DBE1E74816C201476B40B58980BDA2DB524F4AB6830E8BE3C4A9771D0FE400DC9187F5228D1C59, 8F9A0122A02689031AE3C516C673EDC4B18E503A9560EFA44E84CF47BA649D713D1FE2C545252E12B51AFC22BEDF543E0B2E663D90E88F17CF4AE7C74D7D8FA7, 1C4F199FF6AFCF1D612FAD53BFAF8539F04A12FAAC7AD084B85B4BB7BB6EE86E43E1467B49EDDF280325668499F2BC248328302AE528ACEC75D0542964267099 -45DB73D9BD80C193A5B5D8444603D641C2209C8238E891F6EDE023892BA3AB4DFC65572FAC0295B497DF67A7550B, 126D2A498DD5CE75AED9DC958279C36CE5B1B16C95F139F42F06EB8614E6FA66E370BF6460174F3966B48D34EBA2E54CDB6386EEDE59D3543B724C28266D6DD6, 356B903D0CE25170FC922C6CA1DBD01E54C75C03A3B959CD04AFE564862E88316BCEB1718593B1DE73F5268F6376D4CF8664DB2CAA33A233D7B15CB8C187082B -D1925B8D388244BAF12188CCD20B82C54661D586AAB9B5E4C9A06A9B82EB01E9F530058F0407C11DC79E36F5FF21, 33DBA04055078F6C54AC42E34883C290E4444AF13F188CDE959CBE749DF305BC75DA887DE26CDF73F5824A323A86DD7A44BA1A8E7AD88A80DBB129A0062C75CF, D23E511088F061BE31B27C55211476E1E933D9FFC90803279557AC8BE3D31ED563703C6D9CF1D8C2D2FD0BB1580DEF9853C6049B4B1993D584465C0155F810E -274B712A7A986CE30D3649A667622884FD3258094002D21AE5CE13FD288C105BDDF9010AD0C17435956DAA4E1FD63, 7E1BC70534EE5933AD51924B5A539F62D1ACBFEDBA6BD97F8909A6F238706F962F7E5D72BC62CCA461387B21B4C38D09790C0A8A41A1446295E16C99F4E07D63, AAC04FD2A91DA6913E965E3E3048F4ED5FAB07F1894AC727A605A767229012088266218B66CFE2C12DED50DB194800596DDAC969F208538F8F0E8B403551C185 -75E2537F6FC946A927A2DCF33626798EF797081BC0087650B16A3BF779A4311399EB032072445CA0C048FEEA5F829, 5D713760005D3A242376F294FDF69FA48B31EEB083F630CFA7C9AE0BDF24E53400261D198DB50027E7CF98B3D35EFC0FE06B8DA1199202711CB3DDCB42A00CF0, A18915C63CD4FA7A334E3868DE68AE90AA2A63C414447EF0C0C693FF4A7B262F0BE0F45F118B5277C99349BCBB2F4EBC904FE5441DD7D8009D7E1B43BF7D5558 -161A6FA7E4F5BD3FB76E896D9A2736CACE6C51853401962F2143EB3E66CEC933ACDC1096156CD15E240DAFCBF1E87B, C13ABF0AECF16CA2E36A9B6D2336988A5CAACDB75EA213D36AA5C9CF34440CB35B1B1EFCABFFA583614645EC74EB44CD9252502571CAE8B03D7F1F4A758FE95, 78657B82A629E507D76B05BC92F41C35608E1DA5EB97C12189EF9CB49609BE522ED5F8B944F0D06B8ED78637A9806DFA532B521F824F16EB3B2FA214BD9AA9E5 -424F4EF7AEE137BF264B9C48CE75A4606B44F48F9C04C28D63CBC1BB346C5B9B069431C24046741A6C290F63D5B971, 551AB3FA9A71E23D395DDD419D662793F2E3C1B35CB26A95C99902C6779C9417D840BE77F89A63591784F659A4AE54F8276132A89282C9C9F8EB6612B9CE87A9, 3712CDED9081F1E3375C6030C4263778150163EE075864F5E10B8C728E959D8C7CD732364B82B822379008496A941E64934F112699066BD73A9AAEEDBA843D00 -C6EDECE70CA3A73D72E2D4DA6B60ED2141CEDDAED40E47A82B6345319D4512D113BC9546C0D35C4F447B2E2B812C53, 5975FB39104EDF8BCA65150BB915C404208D475457A433597F98F162F1B529C6A37654DA529262AEDAC399FEAB9BB1A2A2906758386EA88AC27C5C3CF1FC33C9, 6AD594FB59F36E7C32F934AF4A3C8D7584989F51CCE401CE6B407B788AA1D7C3E47CD01C29B2F04D38A580FB9AEDF425574258225C4AEF5351DD454FEA02B9EA -254C9C6B525EAF5B858A87E8F4222C763C56C990C7C2AD6F88229CF94D7CF38733B35BFD4427A14EDCD718A828384F9, A4879013EEE176E696E95201A1E9F99FAC31178334B68AB15FF1162A800845670F47BAF3E7B44B7AB335CDBF4F8CBAD77A8007282903D8EF39DBB268A6A41D3, 80C295DFA68EF2628F873CA3FD4B3DE59942A3009905B1B90703A1AE9E2C3457505914C52AF7F2D073BBC1C22BC62AD1221A15F3C33FC806CF933BB323895E79 -6FE5D541F71C0E12909F97BADC668562B5045CB25748084E9867D6EBE876DA959B1A13F7CC76E3EC968549F878A8EEB, 328B27E3272B16326157148ABEAE56D6EE67DB48AC3226AA1DDE18E18172B3ED7C169BF3675351CD5D3F3EFE75E1D068E8C69FF86C127587005C06E5AB04EE03, 78C22F6FEC578D07396D3902DAD34E2A3528A718EE5DB231298B4B98CEAC672ECA378EF1112F6B104C3DB0C608109E90169A3DDA58BC734D5D1EC7EF94F5DEE9 -14FB17FC5E5542A37B1DEC730953390281F0D161705D818EBC93784C3B9648FC0D14E3BE76564ABC5C38FDDE969FACC1, 59556DF31236036F4BC609ABB8442A007211EB077E317150A2A425A8FA2B9DB4BC56CEA88FA050F51175A9212EE6C32B90723C712F8DEEBA795081253CAA6B07, 461C1B56C7E15039E2DD4116EA70384305181C61294960F89DC11A1679D5AB438BED84016BC7A16091D4F79DA07EDD04206C8B1D96CBD2EFCC3423A7219D941A -3EF147F51AFFC7EA7159C5591BF9AB0785D27424511884AC35BA68E4B2C2DAF4273EAB3B6302E03514AAF99BC3DF0643, 9AF6AF26640A09D2F18DBF6A0C365103851FE916701A7DF15050895674477030C561EC449581F94DD6AAEB322E31F530084BA6676F01EB453F5D575E90AE3D54, 6B3D8CF3B10FFADF24575B577E397A2DB7DAE8B84FF948631A713F5C19A28BB66E6250B6B68A59611498957FE8D4AD283208FCA9585AB35D651F027430E50C0E -BCD3D7DF50FF57BF540D500B53ED011691775C6CF3498E04A12F3AAE184890DC75BC01B22908A09F3E00ECD34B9D12C9, 95DC155ECB14E7567FFD97F2547873B7C1C211B952747AF82052CEABF1E7EC8C7FBB1FC4849B98DC477C49356144A7D54FFCDCF10BE633FD388A72F1C763A039, 397C6661923DD15C102A6134A2B054E6FD3029E309165B6205EE019A76C4E36671F96C0CEE4C81CF7149668BFF7EECB8796C23B2457A1612C3FEEDFA0101A403 -2367B879DF2FE073DFC27F021FBC70343B4661546D9DCAA0DE38DB00A48D9B295613405167B19E1DDBA02C679E2D7385B, 5A31C80BCF4560AB447E0C42D4CAD913059190A5F5BD5CAA6C955CA10B8BFE3D3ED55F199264AAE3045B4723214D3846EF0099594E08CC0C761E5BF49FCD4B21, 3F63203CCB29851559FFBE21F9E922B0AE885A1E116269F4399D9A50F5C521F7C6A36DE92D903445CD8FB67BD5C6E82653281AC77E66CFCC3DB709DB9FDBA717 -6A37296D9D8FA15B9F477D065F35509CB1D323FD48D95FE29AAA9101EDA8D17C0239C0F43714DA5992E08536DA885A911, D0B79218C93DE3EAAD7A545DDF46F5BE51E709105D5988E6C067E407E33934E49C02758DCE7D8023D84E5DFE9E0453C07D5BF7F860BB3FFBAAB7D3A06F54CF1, 74F8B8E6BFADCA70076C18884198D5CBDB7AD8808AA593EBF5714D5D6E7DBF7FDCD562CE48A51C34A50875A30DE0EDAE43B8110E2132A26089E3419D6BD6EB61 -13EA57C48D8AEE412DDD677131D9FF1D615796BF7DA8C1FA7CFFFB305C8FA747406AD42DCA53E8F0CB8A18FA48F990FB33, 9727BF0DF9B8FA2D01D16E7966135084302F36B2B17FC4E12FEC2C5C71DD15E47308EA329EEE6AA5154EF8FD1A9A559553BC90F12CDBA16641444BFFD55492B7, 959FE923AE1DBC51CED17B92C9DDBB6693E9002E56B2D7ACCC2EDFB400BBB30FDC761B324F0C2775106E84CFD330561B0906B565EB24B69B90C42DD2FC26B5 -3BBF074DA8A0CAC389983653958DFD582406C43E78FA45EF76FFF19115AEF5D5C1407C895EFBBAD2629E4AEEDAECB2F199, 3C67A8FD3FEB14A8998CFB3A6AE9A6E2579A386B516026DC15EC9222D89348A63706C40B8D7BFCD4DD10C475612FD61AEC8B90105BCFE796BDAF6249BC8C74C9, A9BF03F87B92F296685F74D4F169F1755B62AEFB7E2EA2CBF249282DD3C2705BF9DC915F9AA149D61F2A647B826A64E900C89E24143C939F73DAA7376368FB3C -B33D15E8F9E2604A9CC8A2FAC0A9F8086C144CBB6AEED1CE64FFD4B3410CE18143C1759C1CF3307727DAE0CC90C618D4CB, 1F846788A2C896B77BF882307B37A5EC5403F00EA85E64E283CDBCE232C2BE2CE6192D3BF2CF6AC98365FB5B04891BD9D4A9974F1092B056CB3B2F3A0FC73ADF, 1A897A658245054DBB85B43B05D41C949F08B6CB3D9A2343DE5EDA5B901B99E3148BE8608B99FA1BE12BFE4C824DFCA48BF6B763CC32383C88B784325C69D670 -219B741BAEDA720DFD659E8F041FDE819443CE63240CC756B2EFF7E19C326A483CB4460D456D991657790A265B2524A7E61, 781CF07D4C8E321E3CEBB76D390341EBA842E6CFE44AFE9706B87635DA138BACA67C3A93024AA46F93600B48F92887A173F97157F49345622C7160D7F061C5B2, 14A75448DE3C0504E2243A4EE753A348E76CDB336F2A7743741900261E3F085AFD89231D8257F2EEC9EFA3F871E4452AFC43D117293748655084EB3F5E152D46 -64D25C530C8F5629F830DBAD0C5F9B84BCCB6B296C26560418CFE7A4D4973ED8B61CD227D048CB43066B1E73116F6DF7B23, 2456E5784B400BCE444ED1023C0E676BE149E5C20DC7F6B7D0B5495C9439576B893CACA89D5BC733FA1420D602CE81AE52FED641C5EA580AC6EC49425E26B871, 333CFBD9E6CF3761CA33B9307CF8D58189C70F91D7F4D066C5B701C43CD5F76E7D99E3A74CAA48841728646CD412339B43E3AC70B549F4688B36979AC5309B84 -12E7714F925AE027DE8929307251ED28E3662417C4473020C4A6FB6EE7DC5BC8A2256767770DA61C913415B59344E49E7169, 9C186CA8945545DEE8D47810D5BCEC2DEB40B732B0EA23BED7B93373F047865069ACB7A93D19942675C578077A8E135D364015B12D1BBD727CCBB9915C4B0D00, A66A57D18389CC1B9DF65BC5FB089EE7956676481A231D30513618B4A76B9D8D93D637861C62FCAC09009BAA11985A1734A13DAB19C43ECCBD9D01269344C4E4 -38B653EEB710A0779B9B7B9156F5C77AAA326C474CD590624DF4F24CB7951359E67036366528F255B39C4120B9CEADDB543B, 6D1BE2A0BDC65612FAA9C7BE386285740062F421A6D84D96C3B2183DC5A3833F9C847F1BA2DB6D939449D75617360DDD5179E3748019946AF9706D0E393059F9, 11D62EB72DCA2F9F0EF5585CF7C7236C2B6705217B9974AA2EA6EDE7D9134136721A7D8D90C30A652B8E7275EE6A882F5859BDD526D6FABAC7273D8730AFEDD3 -AA22FBCC2531E166D2D272B404E1566FFE9744D5E680B126E9DED6E626BF3A0DB350A2A32F7AD7011AD4C3622D6C0991FCB1, 78B4A0F55A7C5AF6FA130ED8264A017823B573151760AF230BEFAFB0F5534E03180E52BB3F8596FF4D373660A0ED0AC06ACB7DA43B3AAEC2644973F99DB63FCE, 9096875CDE100CEBAD1348CC11D1357E3C1D9DF3F2198966BF596EEDCD784BA79C8F15920FF581D330468DC25914015250246CBBF8B49880EF9764C4F6D987B1 -1FE68F3646F95A4347877581C0EA4034FFBC5CE81B3821374BD9C84B2743DAE2919F1E7E98E708503507E4A2688441CB5F613, 53AA921B1A9249BB1FA944E0BCCAE8BAA0082261BBFEA2161DA64C479F7629C001F7F489A342E871FB1EC71369F5D6055B99E9A19231AF4F0258773A5035DB47, 14D9C038F92AA57D6E5D4446D54C1AB43D7170C03031645BEB8FF2A6EE547F450741BDF593920276D2CEEB6CB4959E7C9188AA969AB425F714B4104ACF47FF46 -5FB3ADA2D4EC0EC9D696608542BEC09EFF3516B851A863A5E38D58E175CB90A7B4DD5B7BCAB518F09F17ADE7398CC5621E239, A5EE83CD608C98053FEB518C6AA6C8716EC070B7F33FD6C344CB05A2DB1CB01A4B98A32127D3D9323FCC64AD3124AE634EB4FFE24BCC2B9842A1390112F5A94D, 5A85360DE3F0F6452BE3730AE3231D8AE6052C7EB0EE2BDEC8991E7CC45E84B6926B17FD35128F527F0A2E74BE953736C22C8FE9C4DD8F7D04C58F9F1262E0E7 -11F1B08E87EC42C5D83C3218FC83C41DCFD9F4428F4F92AF1AAA80AA46162B1F71E981273601F4AD1DD4709B5ACA650265A6AB, 237F0CDD9FCEE2F6A3F64A3109C5D5D0C365D8E15EAC09A222520A3AA5B13BAD0934959AE3407CA5F23792478869B369796E8AEAA3EE5C35E9004C86895065A5, 9B9333DC4E722A841A14C337673DB7016BBD8EADD6AD87693A5FCFC1AE249CC4E1FBFFC444771710C050B954739BFCB007B51D15D0D2E6C3348E629B54F35BE2 -35D511AB97C4C85188B4964AF58B4C596F8DDCC7ADEEB80D4FFF81FED242815E55BC8375A205DE07597D51D2105F2F0730F401, 78213C27B10073F2B4F237DC300425644550999DB14105408FA14237CC85A12C65F172C7B364862F31737316F8EE733C6C30E53A7926F5D505C126E078E76356, 78622E218982E2EEB4B59163F9E1319FFBBEEB930EB57A4E34160B0CF9F63E55918D5203DCC6A6DD6A4CD511B3CB2EE8779FC0FA35CE410E0663DCCB9F799857 -A17F3502C74E58F49A1DC2E0E0A1E50C4EA9965709CC2827EFFE85FC76C7841B01358A60E6119A160C77F576311D8D1592DC03, 191BFD8EFADFE9897DED74775E84AFE7F96E3B910F76FB32B355B8F85FC990F8F7BB1F8E02BCBF9B8B7BAD8E307AAB13F90EB197CB54E6C2B680CB1BD8C20CB5, 8863007633D6A44C65A2232D9B51FD7FBBE905973E5200F61D7C316B9D13C11A717374CD8E5CE775462E02A87F4E25D4CAC90C8B0B5062122F868B79A0E0C387 -1E47D9F0855EB0ADDCE5948A2A1E5AF24EBFCC3051D647877CFFB91F564568C5103A09F22B234CE422567E0629358A740B89409, 263D90B51A800511D6196674F4442A7C6AB21D9A6E93B36ADD99CF079BE082AA2083CC3D5AD2D3D5EC5AFCFFA6422F742C684BCD89A305F8F996AB18F672D8A2, 603F5A46C5E8953B0E5C1E196A3C26F6E8767D5B704EF1EA01634310CA8D98EA1EAC4E88A59A740DA7E235C48ED11E05DFF3FB5C37D0077FAA93915EBECA308B -5AD78DD1901C120996B0BD9E7E5B10D6EC3F6490F582D69676FF2B5E02D03A4F30AE1DD68169E6AC67037A127BA09F5C229BC1B, 2578AE58BE46A068558907044A913FEA345791B6BC865922881456542CF0D4A250A8017D5258887A79A2C0D1403BB49FDAB8F60DEDE56AF9574EC37D3449E06B, 6A007DCE3A460C8295F0ECA497DD3B77B69F8E8A56DA3E667F8CA6B790ECD25F86B8A837F0B1517EB7EDC3C8757A02FAF040AFC5A5DCC178BB48C5FFD07A8015 -11086A974B054361CC41238DB7B113284C4BE2DB2E08883C364FD821A0870AEED920A5983843DB405350A6E3772E1DE1467D3451, F9E37EF1ABEC1EF4D538EF8CB43E2DC8B2D955455C4913CD14B1C9FC8EADE302789E535CA3BB79F47425FA21D03A084136D2DE714E0F6DA2290BEE3F59B9D68, 95A9A0AF4CB859156A613430322CABB22C6BCF5685A58382851C3E3E64ACD5E561FF6FF484A46DB994C9E15833F7E353243D4C9F539DBD7D3321D65B6467E397 -33193FC5E10FCA2564C36AA927133978E4E3A8918A1998B4A2EF8864E19520CC8B61F0C8A8CB91C0F9F1F4AA658A59A3D3779CF3, 383A73AA6DBA163CE92AEBE0DFEA2218E9E9B95CE989552AC0319F4E9AE898AE32B27230044B87B9FD1040C8DEA5CC9C28D267BC80CB1F27A99E666E0B0536E9, 23A5258042580AA6D2CBBCC194107FCA2EC336506CEB01D9B920F77CCC736922CE38FF782FE643A16EEBC81B0B59300AE0686CEF21916B77085CFE83015AF55B -994BBF51A32F5E702E4A3FFB7539AC6AAEAAF9B49E4CCA1DE8CE992EA4BF6265A225D259FA62B542EDD5DDFF309F0CEB7A66D6D9, 4725864EB6FC88C77DD9076A24F0002623F0D3F5EF74827C12FF2ABDADED1A05DD27A15577A40C9FCABEBD2810D66D6E9FBD5C97F03C485028405281A0AFA8A2, 7B28BC6A0CA2650811EA4A9D5CEABBA0AD3F786791BFFFA237092A0DBACD598B8DBFC3E67492DFB8443AAF1E98BD767595DE9A8BF286EB2E12D54CB4C23059F3 -1CBE33DF4E98E1B508ADEBFF25FAD05400C00ED1DDAE65E59BA6BCB8BEE3E2730E671770DEF281FC8C98199FD91DD26C26F34848B, 1A5EE3C5063E9708B6122DAF4986F4B044C7F985F6FC4D048A5ECB58A46843DE3170EB13CE5FC9CDDB31FA604DF6573C1D875A3F6DC51C268A9068D672C96B3E, 65084AFB4573AF933F2DCC1366E3E01C0D0B25F434AD5731BBEF0300B472F4580A5D144ABB13C9363DE0B3DF6975B6E4C7FD0C53E9D472197E8C7C15F0A16B75 -563A9B9DEBCAA51F1A09C3FD71F070FC02402C75990B31B0D2F4362A3CABA7592B3546529CD785F5A5C84CDF8B59774474D9D8DA1, 44E11A5B0E676BDC217E7E0C19FABD898CB41ACA99503F8645B2F7CF1E09C96C5FAE6313C88591DFAD25425481E193F6CE2E12A93F9CB9960C1E776F97B14AC5, 8281244CE6FE8BEAE8E582A6C2CC2200029DB29F25C410507052DB9B7704C046AEDEFC183E80FB70C40EB1AF44FDCC8D655B7E27A4773BF923941333C4798268 -102AFD2D9C35FEF5D4E1D4BF855D152F406C08560CB21951278DCA27EB602F60B819FD2F7D68691E0F158E69EA20C65CD5E8D8A8E3, 23268D149F8E4FC9B728C47054B13EEE0895D656F4D119CCFF83D7CF6AE77B7B42F9301D52CDE647E46A4C87842CB55315DC590746D50CF13375EF219A1C4EB2, A6F05F0C3849CA660864E189BA99341228E50E4BF30B58E0A40D640E18290186983C3D0D2DD4BB10122806B56259E5811B4980BFCCE66264E6DD1C31F24736C4 -3080F788D4A1FCE17EA57E3E90173F8DC144190226164BF376A95E77C2208E22284DF78E78393B5A2D40AB3DBE62531681BA89FAA9, 579E529F1B5A67135A1C3B1D2F6B87B145C0EF3DE68357989F1D4D04CED534C1BD836C2BE1CA8C41A6998F1765BD204D5DB4665AD4AA6D3EAC684B8BD351F48F, 5CF585AB6AFF8A18E9572E55214794BAA8679F12A6DD364E8EF742F144ACE646F1DBBD825C58DCAC6ECDEDB061EE7DFF4AB57BE0F770ADF4D9CF11D91344DD9A -9182E69A7DE5F6A47BF07ABBB045BEA943CC4B067242E3DA63FC1B674661AA6678E9E6AB68ABB20E87C201B93B26F943852F9DEFFB, 7B232814CD7DE2F6FDD37A24C4ADA30F2EE45FD2BA1C65DA4D8BCFD2340E179525552E36A16F061FA2E79C2604C0731BE38A4B26FDF31369E38EDBB22B715AB2, 5590F1018A44BA418327CC7129BEC251516B85AA4917B0BCE1AC95500A903163447B8CC3742557AB1D7D0A064C982A44710E0B87DD3DED47327225B35AA9829 -1B488B3CF79B1E3ED73D1703310D13BFBCB64E11356C8AB8F2BF45235D324FF336ABDB4023A03162B9746052BB174EBCA8F8ED9CFF1, 2DDF6720C0106C609876BEE812E08A13E1B753B5DDBC728729AE317A0ECDD4954F9967756457E81D128FD170B04C4A0522D63EDEFC7FC2A049DC6FE21554DE88, 661BA5BC53D34AC704FCEF24621971994B67E77265F81FD4A2B9410CBDB70F36F74A7EE4D640ABC02433ECDC0FE73F441C648CE24349AF9A0DCBCD40C15B3068 -51D9A1B6E6D15ABC85B7450993273B3F3622EA33A045A02AD83DCF6A1796EFD9A40391C06AE094282C5D20F83145EC35FAEAC8D6FD3, 23C770835338A766892F0A7B58106161502E67453D3572BCF25B1BE39F36E12E30A06AF49618119D30379367109D04F834D5DBCDB689EEA4176C2FCFF9B7CBD, 3FB8FD37DE7AB6D7C147008897C46BCC07702C22C2514476BA7AE76DE2FC89DC9234691C8F16C06DF66BADFAFAE82CBF282A9AD7325B07609C3C01FD283ADE29 -F58CE524B47410359125CF1CB975B1BDA268BE9AE0D0E08088B96E3E46C4CF8CEC0AB54140A1BC78851762E893D1C4A1F0C05A84F79, 7743DD173017F5CAA3F81DB40D713C80971BF309FA928C9DAF4DF9E97646B467245808C5DB4AAC51FE937C36834A29F4A78E8361F54AC62DF621E49102005820, A827729FCCE274B8C2AEBDBFB57042264804739E16946C9CAFFBE49AE32851C9C51D85F3ECB4BBB4A2B0F67046A9D025B57EF16191E96B7847A135312694067B -2E0A6AF6E1D5C30A0B3716D562C611538E73A3BD0A272A1819A2C4ABAD44E6EA6C4201FC3C1E535698F4628B9BB754DE5D2410F8EE6B, 14EE5A4F796EC4942718F1396381DAFC32DF4805F13DFCF7727088AA69C83E41015F682B0FAD75635EBAE9125FF21265F894FD4A5B56006F6646B89A03EE4CE3, 9487767C6CDA8447811CCFD42672DA7F0721A8ACB7FD422633F2E46DDF29958AA9BBAFB58D6E68DFCCC26F9920E345EA779E07AD17410E1094B9A19C4C06685B -8A1F40E4A581491E21A54480285233FAAB5AEB371E757E484CE84E0307CEB4BF44C605F4B45AFA03CADD27A2D325FE9B176C32EACB41, A56EB4231D966FE29536C442A5B5BCC5F5DBAAC1F6679EC6333B7F1D038F50113923CC2D4B5951975D1C5725BB1D616E59337EEF32C83EF9F0F2F4BB3574A4C9, 365A87C303F17211411CD52BABB7BF8D12396A24E0B9E2A7305B9513CF7CFF2178AC0A7818DD2908DD3113131D2DCABCB21322B4280DD4044ED40207C8D73E73 -19E5DC2ADF083DB5A64EFCD8078F69BF00210C1A55B607AD8E6B8EA09176C1E3DCE5211DE1D10EE0B609776E87971FBD1464498C061C3, 990C16FBC6C7C7F71B8305A48A900F6566BA55849718EC4BD1DBD59DF9BF55A3AB628EBFF2F817945FE2330BBF600BA15D5282B882E8B5E44D31E9459335FF86, 2052E2DB36A541EAFE039ED151102768396A33D02286AE053C48E81497F4F3ACE35A6B505486E96D0228020090417DB4E088195ECBFF6F9D938CF679CD54B770 -4DB194809D18B920F2ECF68816AE3D3D0063244F01221708AB42ABE1B46445AB96AF6359A5732CA2221C664B96C55F373D2CDCA412549, 5B244B5773B2E33639A99C77854EC6DE0F9FC04D4C5EE90CA540491C7F8B6E8886394C38FF162E20377B0800CE90C903933F0C54DB24FA3F99A62BE12AEAA973, 996E1D42689B6B652A2491CB9DAF4293C082B05BA19A1C7F8D0BAAFB5E8AD7BD44195A82F3C519893FD813C17E82702719CEC846A36C5943C8DEE1E11D9AA0A5 -E914BD81D74A2B62D8C6E398440AB7B701296CED0366451A01C803A51D2CD102C40E2A0CF05985E6665532E2C4501DA5B78695EC36FDB, 496C8ED6DEDA08ACA63A3406147D4F8822651FC90508E9B603FE07F3EB45B2E066579564E683D80C3E5951548080AED1019E2ECB66FAECAEE96DC56C92CCA348, 795ECB26EEC595C2FC3C6A5826E45D0D3BEB5AF3F1262F21F0597EA4AFB79AF842FAB148735FE09F6E19FDDA604E1CB0E058796C2FAD541DE94BD27E7C9AD169 -2BB3E388585DE82288A54AAC8CC202725037C46C70A32CF4E05580AEF578673084C2A7E26D10C91B332FF98A84CF058F12693C1C4A4F91, 6BB9A40C634F1F1AE118F5541658F32E3A2F78FA1D6D5A83A32795F42CD21835F7027344E470F2CCB81D1DF7CE26CDEAD7FDC33AFA7BD74BED72B276A37199B4, 89A0D73D51FCBF01AFE473F37A32BFE6A3D92E1415B96EEBB8B6C39E135E539C24ABDE6274BC3E7EB9220DCB088EA4DDB5A4ADFE39DA7ABFA5AF1A25E2313C9D -831BAA990919B86799EFE005A6460756F0A74D4551E986DEA100820CE06935918E47F7A747325B51998FEC9F8E6D10AD373BB454DEEEB3, AAB6A416F01257FAEF679D5A8532EFF2E0F8CC33815A0D524AED383C88F59E9B94A2A2EB52C644F9AA81203B1D71A3B0E44B9DA12D10D2CF42048BC26305DB7A, 5C6846A4C193BE1472AE25E49AA2DD0DBB669D7C1D6437138BCC019AC5FC7729A0344402F899C0D994DEEE5CBFB29D3F877C7BC223813D1C0D5D542BABEE9923 -18952FFCB1B4D2936CDCFA010F2D21604D1F5E7CFF5BC949BE3018626A13BA0B4AAD7E6F5D59711F4CCAFC5DEAB473207A5B31CFE9CCC19, 539C849305C780B4D0D959A55E34550503F3FD8FECD97B9EBE362994CACBF927B0935C751F76B259E6E86F24BDBAFB611FF54235BEB54C8DF99A1EFE4593269D, 1FA6AC32359660F7A49B397E3A61E123765EE977858B1BB118C5F1460E2D6BEC8F51AEAE50871DCAB64A0C46EF0C1420251480DE929BE1E5C2F4A997A82267EC -49BF8FF6151E77BA4696EE032D876420E75E1B76FE135BDD3A9049273E3B2E21E0087B4E180C535DE660F519C01D59616F11956FBD6644B, 74C0D3709DB5F6615B78AA60515D370C01A77DC06A0D89F4E51DEF731609C25AE9B3030C204FCA6CD311393A5985532039C60BFEC2C2F8214C8E113595329642, 590563D926280F19A459111EFBEB3CADDCBC6C935B55D37F5C34727B877AEB8C092BEE1ED5273C6B5A5D776D17809460079737CB3F1C73116FA34B9337D52F63 -DD3EAFE23F5B672ED3C4CA0988962C62B61A5264FA3A1397AFB0DB75BAB18A65A01971EA4824FA19B322DF4D40580C244D34C04F3832CE1, 8E1C4DD681F5C3FFC2C87BC780ADDA8F9C84CF765485E2D9988BA7C490A1D6E93A9A2055351460E420CD84BFD2C86C3D9D424F590E9439461D3EB4EF6AAB0142, 192849DE4E853C79FF2E0B2E5256889B767FECF44E21030EEBCEA8DAD6F70473F96396712B2E36AB69BECB0E3B19E990ECBF2CF63B46FE13AF3AA83C1DC9FCA -297BC0FA6BE12358C7B4E5E1C99C28528224EF72EEEAE3AC70F12926130149F30E04C55BED86EEE4D19689DE7C108246CE79E40EDA8986A3, 8C8FC852551E837B4F50384419712D62947395120F5CBBEA0BEEAE59DDF8B32FC79951A1A375576562D4FF1B673A2E46BB64131990C91F20FC35A982944DD046, 32302D63584CF5A21EFAE257EA1D66F62A8573EF31BD5FBB3FBF77E23B49A703CA3414479B99A75D0D62FFD6B4F552E91401C8FD12FC887A3BD193BCDAD76982 -7C7342EF43A36A0A571EB1A55CD478F7866ECE58CCC0AB0552D37B723903DDD92A0E5013C894CCAE74C39D9B743186D46B6DAC2C8F9C93E9, A3A2D738AC2ACAD5854918DDE2D70C4DA10BED9D5B53DA7DC1B55ADC5A8CC54A6411801A9CA669BEBB254062573A2D63D446A9397D10B59F9640A6C880822CE6, 9CECDC28C3CB1AA406C945F52E1902E8B21C63F40EA4F08C261908059541AD8C44A6C735CE77B89A2651119A8249B3FD4BBE645C8351B9A508C876FCFC52B459 -17559C8CDCAEA3E1F055C14F0167D6AE6934C6B0A6642010FF87A7256AB0B998B7E2AF03B59BE660B5E4AD8D25C94947D42490485AED5BBBB, 7E8CC4A1EB94323B83D63DB50C03A6DB473DEC7F207F86700E51A6EA8C39C7FAB297DED363FEF2B8992EFBFD73C38BDF4D2D24DBEEBD1ED6CBC8F57E3C2AD97A, 61F2CDA683D0FF66A3C4D1C0834771A8C8F6712CF908A9DC640F216CC02BE7D0DAEE88C950B998A09F5F79B16BC0983BDE6CF89AA7C0B7E736BFAAED2CA64054 -4600D5A6960BEBA5D10143ED0437840B3B9E5411F32C6032FE96F57040122CCA27A80D0B20D3B32221AE08A7715BDBD77C6DB0D910C813331, 4AE1F23A861B5C7CC822224BFA737CB258C3BFAC189C405C62D9A0DE6E821A9BDC931CE11A92851758E9489D3CC1146E9AF50D088784BB112CC40FE15BF24C72, 1101FDC025FCD9B96ABC7DDE02FC380489CF8C70A5835AE6F52BD4FF303E2702FFCFD5E1B78F0DA4F262018FC1B65D82D776930CE9A6C2AF265A0B189C4A27AB -D20280F3C223C2F17303CBC70CA68C21B2DAFC35D9852098FBC4E050C036865E76F82721627B1966650A19F6541393867549128B325839993, 60496060509D7D609367A449E1C6F92AE48AC30B4D4628503339A22668E769729E7A7C00BD2B8098590DCB95A4A89B6F82E4CD3C7FBBD57E5283C4C73703EF55, 708F66E8D6FD4404B84E7E123111382D41850790D601BEDA39CC5E81A1848AF77956A37D94849AE3AD99CB6EEA2662C1CFD099825ED05A3FCFD078745F2AB64D -2760782DB466B48D4590B635525F3A4651890F4A18C8F61CAF34EA0F240A3931B64E8756427714C332F1E4DE2FC3ABA935FDB37A19708ACCB9, 5F8389DE4D6A63A54560E25F8077D72FDA954EF26CE2FFF4F53B3A67D0570E7EBD7E177DD0849C341E73D39A6F7B4187B5BE0AD9176EF52D37377D7C9E9670F2, 91AF1CFD62D861BB87479C41D83D3F1A053FBB03513A0CB57D9299FC1277E448C5A47DA75832AFCEABD742D2D971AB15657E6A61F5819EFA57BB9CEA4A227B08 -762168891D341DA7D0B2229FF71DAED2F49B2DDE4A5AE2560D9EBE2D6C1EAB9522EB9602C7653E4998D5AE9A8F4B02FBA1F91A6E4C51A0662B, 75A8AAF0A9674E68F8403D5CD2EC88BB79E7BEB85B8A4CCEE8ABF4517E7CFAA1DCB0F29448EBEA51F0B2B36DFCF89F4494BB446C719659BFDCDBA6C96CFD8DA8, 87A7BA8B62AA9F01FAF005008F084A3C70532A932FF66A59FFB09D8E95DD8CC8D665D5123B795925BF9D2913A2C0EA32B41421519AE1391884BA356CEED4ABC1 -16264399B579C58F7721667DFE5590C78DDD1899ADF10A70228DC3A88445C02BF68C2C208562FBADCCA810BCFADE108F2E5EB4F4AE4F4E13281, 89A1D93FAECF58ABE6ED1F8102FC220CFD233A7F6FC1151B02BD069BDEB930781C49FA83AA2031B36493AD294BC75938C232DF97CB0151B2CC50A130127EC7DF, 8921E5555E67552CF02641B294E46B1020482F8029F83719FBE20DC646AD3485260D72DF31CED374853F35CFD14B93831B16BA74912A222ABFFFE0AEE3B06A17 -4272CACD206D50AE65643379FB00B256A99749CD09D31F5067A94AF98CD14083E3A484619028F30965F83236F09A31AD8B1C1EDE0AEDEA39783, 87494D1389358DFC48B97B51FAF5530BB1034C4264635738AD053B9BC582946F43238393F7341BD2FA506F2CE222EBD2E58F8EFDE395678509D8082F6B03DBDF, 4D7751880B64E1092CC3BF1600FA995E4F702C000D1DF6C12BD2B7FF2C38059E130EF5A6BE9DC9403ADBB09C1E6842CBE0CBBBF89F4955B8B46722E22D1E4C71 -C75860676147F20B302C9A6DF1021703FCC5DD671D795DF136FBE0ECA673C18BAAED8D24B07AD91C31E896A4D1CE9508A1545C9A20C9BEAC689, 3BEB8465182FEBD9CEC87FE79617C13E5E61C9C8C60CE10038BFA46C0ABE2D7F268118BAD5A42534033A0B7232BD2EED337B23A9E3716433EF799C40D704ED72, 17EC7560FA8365DBC260D1CDE12D9F37AA3B1F4BB9DC88FAE4B757E268A79648DD249E15FAAD6AD9C4249A26D6E9071378B81534DB7569215EEC9DD210A346E3 -25609213623D7D6219085CF49D306450BF6519835586C19D3A4F3A2C5F35B44A300C8A76E11708B5495B9C3EE756BBF19E3FD15CE625D3C0539B, 586EE62BB116DFBF8F6E48C9BA225CABC73AEE2D5E73947DE17AC51BF88D7211460C4FB7C8549E0232E5C38749EA1FA72BFD8428F995C8608FC3DF9CAB0211CC, 7127A3D99A198B252511916BED83649BE6A18EF7AA2526FE03F83B8707BE7AEF6B25D336A917551894134241F6DCDBE95DF93C55DC7FEFF5D0C89DB888AFE0F0 -7021B63A26B878264B1916DDD7912CF23E2F4C8A009444D7AEEDAE851DA11CDE90259F64A3451A1FDC12D4BCB60433D4DABF7416B2717B40FAD1, 1627A4AF29260A83114E1C54B136D71D5699FC49D74C766BBC01A7E427A60FD886A0C9695E7EFDBA025FB12BC9128C03BF3D3F8EA01301A7589B327ABC8BC816, 6F6FC50933F7E664F60355A5A7F1319B7F9B822191DFC4F1798F333CA84BDF7E31EA36A72EBBDCB855F87EB72B75B800690ED98FB894506E4C0B07B6AF51F56E -1506522AE74296872E14B449986B386D6BA8DE59E01BCCE870CC90B8F58E3569BB070DE2DE9CF4E5F94387E36220C9B7E903E5C44175471C2F073, 7337D62795CE0563923D4C510562C5B5B9DB92D67D9ACD3DDEAFF026FD83CCDAD9D44454B5A9505DC32FEAA76EEE79883BCCD2E3A73213634E89F9AD759C7CB3, A21F68D76F765736D20474CAE76644B864F6ADE717E49CBC6839939048F2671497616DC73522BFFF674D4C9A81C3EB08150EA89E323917A5B404D527DFCCED3 -3F12F680B5C7C3958A3E1CDCC941A94842FA9B0DA05366B95265B22AE0AAA03D311529A89BD6DEB1EBCA97AA26625D27BB0BB14CC45FD5548D159, 4E56FB38F6D33247630500D571A064917177905DE07D378E18BEDBAA4E44546D9CA64F8FB75B4723BBB5A89DC0FB202265A880C22BD7797E671210B505633741, 59333E9DD77B751311C9DB8F71B6BE7002F93CDD7241A7F84E313DD0657883CB5CD52E57EAA9B57A072EA727ECDD44A702D434E98B0857A2D49085CEF038C000 -BD38E38221574AC09EBA56965BC4FBD8C8EFD128E0FA342BF7311680A1FFE0B7933F7CF9D3849C15C35FC6FE73271777312313E64D1F7FFDA740B, 5813DE9C5F7C0C26FB3023124F96807280D76732B1B546CC8F1B8E2E84898047BDA3E1F69BDB1FF26075887A390C7A13CAEFA401D15313695BEE2723227D023C, AA8F2EE5EAC53B5E0F1F9A48EB7845CF1EB7798027FF8CBD2257A0D6ABFAA07BD9611F2D55AE20AF7688008165BDA573A28E80CB8D208103943EEFE616F53F13 -237AAAA866405E041DC2F03C3134EF38A5ACF737AA2EE9C83E5934381E5FFA226B9BE76ED7A8DD4414A1F54FB5975466593693BB2E75E7FF8F5C21, E5F3E6C2FBFF8B7EB20D81DC2322302420AAAC5D97B0C8D11A34E4A0D58EA465BB635ED86BFB34B879E8BCD9A273ADE904EB31C238A703AE1FDE1A0E786BD0E, 41BB840075AFEA10FCE9FEC318D1881DDF0FA92CB4B7EE26574F4040FA26E3D7100A96F014E85C107295CD12355B280FF6306D70EB50FA70F7B4D4C86009030B -6A6FFFF932C11A0C5948D0B4939ECDA9F106E5A6FE8CBD58BB0B9CA85B1FEE6742D3B64C86FA97CC3DE5DFEF20C5FD330BA3BB318B61B7FEAE1463, A557F19BBA63CCA02E06D084A421BF0039158FA3DB42369AE34C3F76BB892CEDEC688B718B19986E08C82103A58F73F252EE4268962A4D9FE2F34F40BD604504, 8912494BE4A096FF10CC6EBE42D5F27B6E15DC8268C37B6686EB8D5AE61F73711A1C3915B757569E86071FC9429B721116AF5A6F10E94EE1E4C771818663BAE1 -13F4FFFEB98434E250BDA721DBADC68FDD314B0F4FBA6380A3122D5F9115FCB35C87B22E594EFC764B9B19FCD6251F79922EB3194A22527FC0A3D29, 7DED41B9B2B15F989B1DF8C32A992D275AB0F674FAD1C773A0A3867571C23AB55F331B03D5178C5EA0CE5D58E0CCC23C6731E12D890F9F131A2C92AD2A158E0E, 51ED90C89B48A99CF1B78BCA29910E42E803D45706216D9D62AC5248D09AEE0CEF3B638449A241BC5F21C464FD3C237540E895899522B5A597D6B8B190829DD7 -3BDEFFFC2C8C9EA6F238F565930953AF9793E12DEF2F2A81E936881EB341F61A1597168B0BECF562E2D14DF6826F5E6CB68C194BDE66F77F41EB77B, 6BEB4A5B672F8351B392124EA006F11E5A5EB80B576A7BAA805A71AC014607EEA4F680A7F4FC9940C4603BC5EF91381D02FCCE4F0316DC6A0A973C733F323BDC, 22B27FDA77175EB509ECC4113D62E75B379EE78A25AF62AC49402B9EA717EE58CB1FAF3010E6D74777C5292DB0E0E1409CA57F29110DFC4B45037CE124B6AED2 -B39CFFF485A5DBF4D6AAE030B91BFB0EC6BBA389CD8D7F85BBA3985C19C5E24E40C543A123C6E028A873E9E3874E1B4623A44BE39B34E67DC5C2671, 303913D115C8749F889591D07C705124B15C80CAFDD66F8B8ECD00D4207E3CD2078FCAC7365BA8AB0CFF9C3F455A2FB7AA436DB8B5B353EC7CA7382E678A8F15, 8649D13F81839202E2350C8E0514B11E6826C623C1E7EDC29950041346241CF2917129A338176B457165D82CFD16B4C7DD6CB29AA69F72DC1FCF11708D22623 -21AD6FFDD90F193DE8400A0922B53F12C5432EA9D68A87E9132EAC9144D51A6EAC24FCAE36B54A079F95BBDAA95EA51D26AECE3AAD19EB3795147353, 70C32CE2CC3DCC88434F67731E1E2132242AEFF13BFCCFA563B288A94D0829B4D47F5C193C2F64267ED24B0CA43551D051B54DB8D1EC84391F1C28BEA664482F, 6C18794A8137E5039E213FFA7D522ADD661175E93AA3C4B5FAD7D42A20277E6232994BD956DD5B2EDC824AAAC9133A1AFAFF64881A14E898057BEA2A265F2370 -65084FF98B2D4BB9B8C01E1B681FBD384FC98BFD839F97BB398C05B3CE7F4F4C046EF60AA41FDE16DEC1338FFC1BEF57740C6AB0074DC1A6BF3D59F9, 441630E6C9C941952A4F325A7F61826F66F3A89CB92E9184773633835A0095BD2E1B9B3E4526433167402BCD8325EA5C28CB4A7EB4005F1BB82FE160B93CBB5F, 8A967F85D768869BB68EE0BAEFF0932E0D47447B536CA15C0FEF138F2A0ECECD943A71003F78D561E418EAAC8737518B83EA3443AAE4D60E34D5F56B1DAFEA2 -12F18EFECA187E32D2A405A52385F37A8EF5CA3F88ADEC731ACA4111B6B7DEDE40D4CE21FEC5F9A449C439AAFF453CE065C25401015E944F43DB80DEB, EEE09FCCB5BF8DD8C5AD60FC83B15DEC4AA8F3F983D85BCE40F325BB7C1C7C083CBE50D5F2604F76A1951E79D7319169B6153679001D589628B97569718EC85, 80E15F62AFFD1DADE6B18472A8A402EBE75F121C0B2BD7EDB72F9BCD4126CF3FF2FACE01F7C86F443AF09E6A856F1477581B9C705D9729EE3FA3FBE6208684F7 -38D4ACFC5E497A9877EC10EF6A91DA6FACE15EBE9A09C559505EC33524279C9AC27E6A65FC51ECECDD4CAD00FDCFB6A13146FC03041BBCEDCB92829C1, 88269C1AB1B9766385DD39802F1504822277D8A639A6FE5B7F3D027F1B5988D647FDDA6FF9E711E584A884B4D248BB41D29EE4332D3DC46AD19071478D0059, 9DB0239F2812775F60F54A63C7C920AA298A85C4DB2165EFCAF97E6C6D0AB37D71E2A58725EA5BC07F1C270745696162D8CF753D47C5D0C83B81B703916AEF88 -AA7E06F51ADC6FC967C432CE3FB58F4F06A41C3BCE1D500BF11C499F6C76D5D0477B3F31F4F5C6C697E60702F96F23E393D4F4090C5336C962B787D43, 8E608B45E6D214865E4F0D116484F1947A2256FCD2E9089CD86B18451C3FA40B4A524B9D40236746642CC256D5845943D635B4F239E51438FE020EF52B6AE500, A821DEDF4746DCB925043320B9B4440B5DB82E0B5A3C6B8A5562DF0B6B3AD37D517B7020AEC9C6799F24C57F9E26A664901B24151E16EA9DF885D43025E552F5 -1FF7A14DF50954F5C374C986ABF20ADED13EC54B36A57F023D354DCDE45648170D671BD95DEE15453C7B21508EC4D6BAABB7EDC1B24F9A45C2826977C9, A7CBFF9CEAA8D06431E373DD5BF6A79416A8E72CEAA9188B511B1420549A30DB3AB5404F0C04C6A8F3755398448DD3C408C7166EE1B707A7CB243CD01851C10D, 4BF61E0257D9D4942BE59333B18DB6D90FD86DF904B057AADA39CFD45E85F6E3509B8B886B04AFBD925CE52A838748669F1D9447E7F2AF560053C1E41B838E30 -5FE6E3E9DF1BFEE14A5E5C9403D6209C73BC4FE1A3F07D06B79FE969AD02D8452835538C19CA3FCFB57163F1AC4E84300327C94516EECED147873C675B, 88DB1A6B28A4BF16C5B3309D3D3BF67E4B4E5B079434E097E2DB67CC8E7DF8570E579998E94B117B8602C30A9A2511F4BD764C9B0346E3CF7B36EF67D01814F9, 45632ED87BD707CACD0F7FAB3A77BB370CA273C8F820B82E3C2643839A54677BFE283181A4AAFA262E0A5F3F6FE07575F2DE9DF5D7C7A14949556355A0C0DFBD -11FB4ABBD9D53FCA3DF1B15BC0B8261D55B34EFA4EBD1771426DFBC3D070888CF789FFAA44D5EBF6F20542BD504EB8C9009775BCF44CC6C73D695B53611, 817AC3142735096B87F59DB99E2128E6D4AC24AF79A3DC578E6942D54D797B5823A17B8F0BDC7EC341229DE1810994BDC3D8DB25EDD12B44D50BCCEA0FE3A6BD, 42016FBB1814697C6E809DDA92620A9B35F8A9A9C5D2E3DB68FD56DE073CB2EAC0E311838FF02B066297C31BF0BBE57BA9C507570CA01C72A6C6E89E8FAB9C1D -35F1E0338D7FBF5EB9D51413422872580119ECEEEC374653C749F34B715199A6E69DFEFECE81C3E4D60FC837F0EC2A5B01C66136DCE65455B83C11FA233, 241EDECD461CDAFC5453525E3315ECED624A806AB6ECD252B04ECB6EFF87C4CF0338C9EC23151FBA62FE8A71A62B5435640C7E5788F51DAD87ECE292B34AF8AA, 92484F0FDEC2E26106056BA66FDEC7F6D2894D0266D27A22938B35B23F31E1477A91800C6C8B25C5DCF846EF85B4ADC26167BB5AB951FB5843C8399715C12AE5 -A1D5A09AA87F3E1C2D7F3C39C6795708034DC6CCC4A5D2FB55DDD9E253F4CCF4B3D9FCFC6B854BAE822F58A7D2C47F11055323A496B2FD0128B435EE699, 7849B559C0715DDE4EAC87D6AFAC8B52A76F02D2031CC7DCD4E3917FD8F712B6390DD54AADE7FF0705B4165C67F13E0BA0B0C8990972072DB560D6FAEE6A9D5D, 6795EF1BF45E3F5E0BAEFB7EFA019360A658971B3F71FB6430DB41B18F373CC80EBE828AEE07B747F2725911236611E3F33C157C5AD16ECACA03781A311D7F4A -1E580E1CFF97DBA54887DB4AD536C051809E954664DF178F201998DA6FBDE66DE1B8DF6F5428FE30B868E09F7784D7D330FF96AEDC418F7037A1CA1CB3CB, 1FF859DA9C9BF856850E7D6FB6DD03F17734616645476AA593E9238760119F234CF565BF335B17A0810DBE8D6FF57DC21AAA1DFC03F06303237795EDD097D9E1, 55B63D838E0BBCBD539CB8C527491499ECC6DD0CBABFD08B1A8CEE2885B346B54C6A663205796EEF42EA94E9E6116E66266A0CAAC9013541E31DD36A8CAA6BDD -5B082A56FEC792EFD99791E07FA440F481DBBFD32E9D46AD604CCA8F4F39B349A52A9E4DFC7AFA92293AA1DE668E877992FEC40C94C4AE50A6E55E561B61, 8E2CC51D5A88D50261E86A70CC8699DF1EBF7F7717C9516CEC254964424B8D761F98A5797061A3A09690890716D65573AAABA3423107350A6101380CB80E1DA5, 96F22D765E33407517ED26B8F2DA452CABCF691140C16F746D8DB8DEE3BB2092684FA99987779C8A29359C445F1EE1E445E40F5EACF24D31A20928C6FF9F61A6 -111187F04FC56B8CF8CC6B5A17EECC2DD85933F798BD7D40820E65FADEDAD19DCEF7FDAE9F570EFB67BAFE59B33AB966CB8FC4C25BE4E0AF1F4B01B025223, 21424939461B500C479FC53F8A4080D326EB716916D586D621457A57DA5B24DB81C9EB13564DAC6B5D03502232EA09714D0ACA1D541FFAE44BBF39E603881D5A, A697B183243F4DCA2D1037651AF048535D5173D4389EEE2C4B40EBC417D337E16B580974E5C608F1F48B62C43302EFD239D46E7CDBDFE16CDDE7479972692926 -333497D0EF5042A6EA65420E47CC6489890B9BE6CA3877C1862B31F09C9074D96CE7F90BDE052CF23730FB0D19B02C3462AF4E4713AEA20D5DE105106F669, 4232D7A236BB1328CE0189044AED46F7DD6880BFDAC0877BA3CE59E8853ABFD80DD53D5F57D14E0C61548DC310E8CB7AC558CB0C9B9ED23171928D5CE567EE6, 5C1BE712E50FDED1DBABECE51E7596A219AC7AE399E1495C073A7CAD3724068DE4E7946D018F5069A5F5E51C319BC6CF298E459874C97326A482C19BACE231C7 -999DC772CDF0C7F4BF2FC62AD7652D9C9B22D3B45EA96744928195D1D5B15E8C46B7EB239A0F86D6A592F1274D10849D280DEAD53B0BE62819A30F314E33B, A8FD2A12F38B192CDC38EC2AD0CBD36A65EFCC65AFE9E6558448E65A53DA52DAAB3DF1FB239B311C26057FDB336E3AAB25C850F9C70DF8C6D37DC70AF310C703, A088082C1C989BFA7963451175ED516F64E5A5D0CE13FB015E90FB55AC8EDB1979433346B103F00A79A12B0347E6C10D61A938064F0CAEC5818A3B4A1EC851F3 -1CCD9565869D257DE3D8F5280862F88D5D1687B1D1BFC35CDB784C17581141BA4D427C16ACE2E9483F0B8D375E7318DD77829C07FB123B2784CE92D93EA9B1, 295AE2A11073A03C4AEDAC43DD1BA136A258302FD18BEB6AB9A93F5BF241D9D0F31FD9993C5D216CDAE760D6EDA8BA7501561D53A43151DC922A3871CE1F523, 8F52E27DF6EF87B48E1D54AFCB84131BB28442BB2789365C4ED8CA7DB8FB9C6FE827421FC60EF0017BD38905E34A9F1319B65A9045DBAE98AB537907F9CD9E8 -5668C03093D77079AB8ADF781928E9A817439715753F4A169268E4460833C52EE7C7744406A8BBD8BD22A7A61B594A986687D417F136B1768E6BB88BBBFD13, 3B4D04C807C3B80908C883782A32B8DC2F2CA94DA18699F6D1CDCDBB4850894F6395FBE2824B7A01E759953196F375FCB3745747F9580BDB2B6B17AADB25B317, 68547A371709A68090213175F3FA631763B9A8F8AF872FB04647DF1CF42878E28F445DD8B2239BC6AFBEF49FC0E2DCDE791B29B9F00D5828A774282345DE5ACA -1033A4091BB86516D02A09E684B7ABCF845CAC5405FBDDE43B73AACD2189B4F8CB7565CCC13FA338A3767F6F2520BDFC933977C47D3A41463AB4329A333F739, 2BD782898D1479B7F25055338F20CED505D56D4A6976A59575F6BD3C5C69149D47989507F185BE98F45AC72B742136DD9C0C897F8F636F1863E6F738DBDBA4BA, 7F3D72426AA948D16D970A8C66BE5D5ACF3BD617089ED1A04FCBB85386077B465013015BB2804AD03E9AFCCF63ECD38965D38FE75723F1BE7DE46CB0DC222975 -309AEC1B53292F44707E1DB38E27036E8D1604FC11F399ACB25B0067649D1EEA6260316643BEE9A9EA637E4D6F6239F5B9AC674D77AEC3D2B01C97CE99BE5AB, 903208F1E5F9E674A8C55BC1FD130B4638E00A58D447E61CC8FE5654DC174379A69AD1B1DC65227D8A7D6F03397559E88C557A8F61D323E64EA0ABC533F0593C, BC89BD8DC03F0F5C5C42A3B15E864DE6D06ADE8A15852B262ED3C07CF4388037AF428E44A537ED6C2CAB2B9356AD90235F9C4EC5CC2F8C0A2DB03545C06273A -91D0C451F97B8DCD517A591AAA750A4BA7420EF435DACD06171101362DD75CBF27209432CB3CBCFDBF2A7AE84E26ADE12D0535E8670C4B781055C76BCD3B101, 30CB7584CE32A1390C110DD343BAF79DBB6B5246296811B2C68981BAD81CC034099A86DC371AD7FB32F52C6DD47B66E9ADF5406D7A3FADAA0EC593C9A543B616, 78AAC0C6A2C19EB8584244AA6A9532A0F477A78369073F347DF6A989A13A1494595B548E6AECC9B72098AA8149B9B52AE4F1F34EC44B58949BE8F819BFB194FB -1B5724CF5EC72A967F46F0B4FFF5F1EE2F5C62CDCA1906712453303A28986163D7561BC9861B636F93D7F70B8EA7409A3870FA1B93524E2683101564367B1303, 4CBEE632895A6A341BC3C258E40BF8932E872BCCBCC01EF91332564A11C537B9442CDF44B41864589226471B6379AE2CAEB2CDFAC00200249BB9DDE100A32B9C, A622DF6A3A0DA992E42D9FBC21A109AB7D655ED0393A004EDC68254A4533E6EF1C30D7D722436759DF9FBF3987107ABDAFDD239EABE2726CE22E51F8B540706B -52056E6E1C557FC37DD4D21EFFE1D5CA8E1528695E4B13536CF990AE79C9242B8602535C92522A4EBB87E522ABF5C1CEA952EE52B9F6EA738930402CA3713909, 7E9A67D8D6F0416017A9C7FDB43929D1E62722559B8AC053959162427B8BD2322F0DD0131B006DDAB172D1111CF7387ABBC11548FCEEE15A692BD6AFD4831567, 52A3A6B6144598E16E8C2C32F93518D306507A029AA070D5A2517B73BC6A6649209527BBFAB73E078F280E6016F79E976FF7FB5E6E9B5BF3BD73AAE7002429CA -1.2.250.1.223.101.256.1 -1, B6B3D4C356C139EB31183D4749D423958C27D2DCAF98B70164C97A2DD98F5CFF, 6142E0F7C8B204911F9271F0F3ECEF8C2701C307E8E4C9E183115A1554062CFB -3, A13ED122D99792D3CF188FE2C964EADA77A95CE2D03BF3451BBA94DE3E967BAC, D141A90C972AE0DA909A77BB02B973176238E32431CE8F378E039DEB74989A21 -9, 2F13E149CD81DCB537A6E319F8958AB924D44CB9AF159EFC4815DAB2E8F085CF, 6F379F283A2BC73C85EA460C8D055845D65E21E6063571B67B8AE4235E03826A -1B, 4DF28A78D6B21A47576B011AE8BE7D6EC44D38DE80FF8D2EEE717D96A670D4A0, 14E58B9E155507727BD15B71D05749CD2C06DEC79F0ECA8C07868F335E59840F -51, 9DDBEB0C429EE1658FFA16A79DF822D86579827869D2D634ED59EE0C6DCB69F5, 51144B605D2E6C0F8A6D112229FDE65975435CBD3B7A7613734BE5784D210983 -F3, 857FF3C40605A481153B4DC42D5939D19DBFDC17E1DF0941C91CC1E91EA2BB6D, 57BB311A8D2FE1B4FD27484CB0EA7CE30709977DD87849E504A6AC8B5BAB4700 -2D9, E41D82F6FFFE73E835B489592439F6FF79B5ECD14AC80E9222713A4F307660AE, 824583499C8E501E437FE0137DCA1D2AB3AEA3B3F1C38CA02235B9437AB9E409 -88B, 62B094B669D1ED7E8D92D4212D7A7C2EF00B1701EC3D3897C19ACF75D72AE844, 542D95B69831AC12CE3F649C08F42B693A09E893E8720FF229595943AA67A938 -19A1, 5E049707B2C42C8552DE5DE7E44A073711BD14CF062BA65011E6E573FCB4AC06, EA12FFD74AAEE55264BD5CBA96EA69ADA3AF411DB55080DBB63EF1B0DC0E0752 -4CE3, E6B77C15A90DC5532CDE7906BAA91A22FC2EFEF779A3E8263E268EBB3928C456, 424EE22975A50C36C86FC3F781B5F23E3442F20F02EB5F100C0BBFB2479ADB54 -E6A9, E8A4BC98D6F6DE0D56D8FD4F2431C57BECDD82EC86908A7612C80740B0BD0542, 34C7D61D1012A288081E3ED2322F34B34417311FF445F771233E0072A96A87D3 -2B3FB, 3F6C7BF34CDD141F14C7037730BBB412CAA7ECCE55AF5FC9C83912F4935CE895, 13446D83059BFF498EDA58CE3EC7F80F452D60FA3B709B53A14CA4EDF63A978A -81BF1, B3EF2ECAE9E29DB806644FC4D43B4510B9D5A20628924E5B188FDAA60636B711, BEB7FB005912DFD528B7C4215E9CF325155526C2ADD9ABE91C64388219CFD987 -1853D3, 976796309D3C67C2280D447695F39A6DBD1964A1E57102BD07B25ACE0D51CE4C, 92C841138AA40A98735BBBF167E2DA84AB81148E0930E9655582DFC930DF7F1 -48FB79, 51C0104121A160E19F24F7E7D7A4C7450E005D24A5F47BAFD9824739C8323F3B, 3FE990D22B9D441B47C9308735B6A207A261231B8F60891E83D84A2212104027 -DAF26B, 6B5F8C87E20C1BACBC17606462CC7CB4B7DB369A3578B4A6BB8D340ADC449F11, ED0D7830F3D3B6F653A39BE4B2E1BA8349CC6E7170B5BC1E70211A4A5C592800 -290D741, C9D44B95FCC79EE69B6A8A2FEF135D472536C9063650708A50530A75095A8C8F, E90F41B9FB0818690F5FDF4FFA98193DED45AF16392E662180A79DB7739CA15F -7B285C3, 9BAC3413787E2E26B91387BD00685556781FC518D6E3BF9F2E8ED9F3D4FF0247, E4FB0DFDFCDAC9129921E33EB00A7DA4344B6891E49EDB50976E42ED26468A15 -17179149, 241632C09666C7DF62D7D52518F95FB99F708AD402B940A97D461C329D6B42C2, 132970439D7B866C2DD084D650EB36BDC362D1A2735B480E6FEB1202E9A870F0 -4546B3DB, 9328B788C5A8FF09DF7B40924886DDC0E91DA9C0BB777BEE5EDBBE736A1F775E, B517396FC90CE141839B943EB17DA2BA92450B0A202AB3CD24A6D9E3C30E3824 -CFD41B91, 278CAB1B2ED1DC33B7CFB928FDA4B20B74A6BBABB08609B81D12BBD470917D63, 8753BF0594B258C983C36AF6D81FADC14D552EA1A91B74473F1A10C3D8DAF9EC -26F7C52B3, 1DDC21F364B89FAB3954546CEC0FD6F44AB6D18B38CC9824A6A7665F194AF2F6, B425B0EE2078F7F920E04BFED0F87171E92CA222CC3D5B93AE0C308A4538F372 -74E74F819, E9CACC762550E458225659C59411783B142F2D58470A67D8EBFBEACCFB4EA03A, C817231DB214BE6E9CD9EBB48F86C9B1DDC124B02B9016FB9CAD82DE31076B79 -15EB5EE84B, 29A8DBC31F023B2BD781BD60A1BFE22EB18063E23829673A6A848760240EA0E2, C6E33F6BE8D7E91767CDF60E7D62D39EE272DB5757BB5D3F106A39EB83EA918B -41C21CB8E1, 36CA18A2BCB4540FB1C9D59294A940084E2A735201CAC1DCA85BA8C96BE31425, 4AA3E8614C99257AF58A30AD9C704FA1A54E45BFFBF9B5A074376207B235D27C -C546562AA3, DD3B52DE3809A82F4C589F4B0B0E02D749C4B7CE6BADF97EA0135D15DC8B8841, EABC2878869CFE61874F29AD9B2B4181297CBEEFA85533A88C4FF1B351AC4434 -24FD3027FE9, 10E21BA7A73291A2D7D4E759D6B4AF830AB6C57551C4A260683346034E8605BD, 89B11811E23E2C71502227B42046F14D1D9657A1AC5E40CA92345A1A31E0AB49 -6EF79077FBB, DD2D95971C7EB78AC6AEAFA483F6BB41819B40C70B24D594EBB69AA024E34093, 2DA2ED0132EC7E4215E8D0FDCF3AC8681ACFA93DD8C793955B0BC72904EF21F1 -14CE6B167F31, BEF5243576F81A90E4A8685CFC9264679F9709B4A554EFB9C63B12119D0C2EB4, 6A932DAA9B99A51DBC75C6F6E1F25181D12CE60F12A27A05DB9CF08DAB2BE097 -3E6B41437D93, E4C3E3A48A896AEB226B035C2556157F0BDA05CAE26836A84FF4944A6C6AD351, 184AADC61D4578D88E4E94A4158F76621CB23ADBF553C83A580F106F2C4B438C -BB41C3CA78B9, CAFF347B5B488E99379C6854248E7687C54C08ADAF6A0773F0C1074527586C37, 944F0E9F67114BAFF18A3496C44BDDF544068E67FED41880BF60DF8D365B5DDF -231C54B5F6A2B, 372290CC605992115105686B68793B185E4F53BC5B4959E1CAF298C5C2B40010, 96039B7A6CBADC9D8BA255986D54CB96FB0C2C39F4CE5686BEC9FC94588C7827 -6954FE21E3E81, 29A5B4B9F6F5596561B64AED4B75612D9657F9AE54F79B91586D64A9B6634A48, 86F1B7C40F757E1404CEA8A20D14A2090EEDBC8915BB915026C82C1DB0DDB625 -13BFEFA65ABB83, 4676A6C418D19C98B8D9EEBE3CFEA5584A5EA81D3009592DF78743BEF63CE886, CF89EE410316BFE4F3335E0ED88103482DF4B6525B7F3AF2F5618AF96C7632F8 -3B3FCEF3103289, 77E68055CC06386EDE89C7877BAA881D6687014782A0D30E1DD8E7A0D698E662, 2D5188610358E100235E680E563C499AC7047BEC7B7CCBAB379C60017E3A515F -B1BF6CD930979B, 22BB03E384F2D1930B4E697B573AC721542E69718E065E4F595E17BAD0FC5D18, 567875241891F8F9B968CDD0BDA98B92D9B121CEA7E9E977883988968EF2A6CE -2153E468B91C6D1, 65A7C415E749156E92FD9493D6EA0D96D2F9DE19869D94E482B6245BE0AD6E15, A74A81C0A3D31ED4BB91C92F031380B835AFEAAED8EB4EDEC97556069D601148 -63FBAD3A2B55473, 2B0DB39ACE2E073EF5CB85B7FD561C835CD4BD99A3405DC224D449DED0EED340, B54FCE3290B0980386582FFAE3FD4C20576AB348A3CA0BA8A8BA585D8EBFFDB9 -12BF307AE81FFD59, 278180A2C27F21637FC133EEA10DCAA3EF70574FDD90560F112CA8450CDADF2B, 1FBD56D8CA7DDAAC3FC9DDC20C3BEDE3C1742CA21B1FD3F95CBAA130B7D4357 -383D9170B85FF80B, ED64CF3C189C6C752DC9763EB9F6FEF272596FBD0D797E590DB2688D58AD4C29, DFFC7FB08F8B2B462F7BCF92DC2A94F26AE6DBAA072C3A318BF7929A812C3D6C -A8B8B452291FE821, 32596EAEFE7919CD58C7EA6DB3267981545DEE0B521C8F300129DA254AD78D78, 4CCB5B2D4009F151069FE99FF7AEBB35B20318DB4445F94557AA6F1D54AAAD22 -1FA2A1CF67B5FB863, A923FEC326C609724231C77162A92EEC049241F33798C7E6E1749E947F192B54, 82B403DBFBB7B9B06ED44B84E333AAA83B01C59D8E1CC7635461824013CCB49C -5EE7E56E3721F2929, 23FFE16348E78ECF8DE39F8E1D0814A1EDE2040CAB69B7FF40A5207CE1D94EE8, DA0B44342739E310D84AB37B40CEDAFE7B0FEE7E51A287319686C51371345F79 -11CB7B04AA565D7B7B, EDD7401FB31101F9109B46D70C67E4FE4FA805E1173BBAD1B75C114C0FD173A0, 481AA1BEE30D3E9D4FA3F7EFA2CB2DA2705F2B446D47CD66D531E1CD1E96D960 -3562710DFF03187271, 89A81A9D5DFD6A92E50158BFDF985ACF3C3495E3905889D6D362222D5FA02A02, C9A3296040AC669A3C319012F963F9BE457E231489063E555C973EA996DBCE47 -A0275329FD09495753, B2A062D61FE7409B08F5DCC28E704F6A0FA740054CA6BB0D853DD9578DF40C16, 14F976E8D46ACAFAEABEE6D7FF0B0052F16FAF7C9EB8CC1C050AE06F16FF866F -1E075F97DF71BDC05F9, D8A5F67C4303DA6BFAA29A4ECA77DCB691013823C0715EF1F7BC36A88B62E49B, A70213DA4432680D81B0867C3AEC83138878406186B6F9872B08E3C4429AD8BA -5A161EC79E5539411EB, E50DC61F9A7A1176CA4C60FB72B767184CA42063671F978715738C13B8F10900, 8764B7A403D9E28EF3B72D543FBD74A9C9A9F3A0BC8D66083D11A17BC14955EA -10E425C56DAFFABC35C1, 6298570D06A914D1FF9BD269EDB5C994A75B5B3BE78A34A201BF8FC4C7A37645, BA0999832E786099EB24310D20E38B389867372FEE394655DD85F3E4DA9F85 -32AC7150490FF034A143, 9B924BC71EF89E279746F156A787FCC8BF274311C94F9DA0A2220DC60C01E542, 1D36CA5CC0FAEE4C3F4B0394F2E89991D0DFFC69083ABAECDC652020CE3A5731 -980553F0DB2FD09DE3C9, 4AF0CE1D7627D7DF8BC5FBA0E5110291F6CE9193D0AF713D06721C762C69EDC7, 253AED4EF1FE50FE8A30A7D95FDA4233AA48BDC910D10E972A7E7AF7DC275B5A -1C80FFBD2918F71D9AB5B, CFFA406A350CE5449D023C8EABDC74E7F16E5A8202E498BFAA1B64552DE3E1B6, 9C4BEB981D767DEAC7BAA5388B0F83284FBB56BD5A02290D39F34262DAD07461 -5582FF377B4AE558D0211, E540129D38DA9843FFC34AC96EB4B88600CB6846BCB3F86B96BA2D82972FF2DB, 1D4CDFC3CF1EF350F0F98DCDD763BD94CEAB4C10C20C998C7DDAC51DFD22C22 -10088FDA671E0B00A70633, A3AB4338D41BB6607EC059004DD33F3B276E1B11DF132595FF573BE95E9D690C, 6FEECFBE22879DBA76431D5591E275C7479F8E12894F51D79B9BAE3C33F8A466 -3019AF8F355A2101F51299, 5417D5D9C11E6C34D0244210AAB5B4A62ACCD4A2A6011717F2FE5F3556A2993, 191961BCB8E5CD47D3616D21B83E62CAF3803A33BC78BE81DDB02849ABA1A305 -904D0EADA00E6305DF37CB, CE18B7CDCE732D8A11CE7E16FFF7BA71DA7F8A938A88978CC4002F0AEED49548, B735084E94C959E287B6731054EF43AD325FF6758C085922218AD71D67A428 -1B0E72C08E02B29119DA761, 113D13D27BE84E1FD23895888EE826A4040DFD3FE28F6ECB5A45EDEA5EEF0ACB, B42F3D88BE97D3460CF23BCF6FD2120F5E324C7A248853E5E020270985A096F6 -512B5841AA0817B34D8F623, 156ED99DC9970C6225E9D2847B7E6FBD4CDCDF94604AD3EB496E17D34AE41C64, A24BAA7BB9A2BE5A848FEC18AB09DB17B3E8476FA3459E4CC0D98DD9E27452D6 -F38208C4FE184719E8AE269, BCE75C4D3891E700F83D2FC1812B95B38A7B52834639F17D50E97B4A7FC5A9DE, 3B95FFA945D11347DBA57C00D95C3B57C12B8C14B7CA31C95C8F4D6EC717CBCF -2DA861A4EFA48D54DBA0A73B, C491AA62280F7C22B3DC12A60806F5AADDDC0A204E492940E03CCCF98E3BC447, 3D6E48B05AB9901547C8F54105C03AC3A872742799F617DE197B2E7356373F70 -88F924EECEEDA7FE92E1F5B1, 1D1DF1856DDEA9CEBD18B30D4467EA4ABDB9A82C5F88008DBE797D3F285CB4B3, 4E222707AAABC7FE9995044EA689EFF3E55784DA16EBD335DFC833F1137478D8 -19AEB6ECC6CC8F7FBB8A5E113, 1E258E246BCAE8A5F3E390053C51CB2CD08E71406F605C0AAD13AE5F8DBAA555, 5DE54EF960A60058C4C50D0E052F5B87D81E3AE332B1B0E6173C1B22365172D9 -4D0C24C65465AE7F329F1A339, 3C04CA7F0E7F6F05F3418512CE590C31E66D5A454D9222D4E7F2676E2A922EE4, 61E884BDC9216EF5BB8229E477D2EFA92020962718ADA338394189524A1F1262 -E7246E52FD310B7D97DD4E9AB, EE51BA66024585FF001972141B3D7E303721614A8B7978D9AC8CC2E68DACFF6, D92CEEA9A521DAF422D61D5F629307B3370497AAED737F9273F9A8719F6E2EE8 -2B56D4AF8F7932278C797EBD01, E5E97D3BCADA1A383485B7C876662A4222A609E89ACCC7066F2C89EF53451FFD, 59884D3E03E3048BC264D7C1F44329A6CDD918FD592109509D5B2D56838558EA -82047E0EAE6B9676A56C7C3703, D54F2F87079910CBE7D65EB1EB9AA7D4DD376B055855C48A28BA7E76FC5BCC13, 6368F4870DBE9934E4F7F7B5D9D4F6042924EE615EF70788CE85D03911491628 -1860D7A2C0B42C363F04574A509, 4B1FC9DD92E7CC17DE6D955559F3D99015A827EE6CA8463EC68364DFEF181E39, E10FD18B82C7699DDDCCDDE9DFA77FFA6B52147B9BFE91DEFB591A63B965C683 -492286E8421C84A2BD0D05DEF1B, CD6086DEC561164EECCA81871EAB0101076DE493BEC9D47EE2682FAEC3B04091, 85FB377B04840C0CFDFC686AB952559F8C53D0EE854609FAAB981F3AB226AC11 -DB6794B8C6558DE83727119CD51, 116C5B73B56E55F5B43F324449C2E6CA3FCAF13A5CCB70DC09AC78EE1A52C276, 6CFB05DD9B2E6F5A35061B0421A69F8095AA5569AB9F0994CC320032D74EFF16 -29236BE2A5300A9B8A57534D67F3, CE2430FE723E0EDBDC5CF5D6EA408F81B454A6A8A2D9D89874BA45DE8CF7E610, 30AA45CA3FF959776DE0060E859ECA2641BC629AF1B72C94E024BD88BD92EA5F -7B6A43A7EF901FD29F05F9E837D9, D4C719E78C3C32F14BCCBB9B5D21F1CCB44A0B26F83556386C0C0D3A338C9D25, AFC7D22FE28BA577815302D30B209028FFB01B697AC95BBAD2DFBE7952A7CA4F -1723ECAF7CEB05F77DD11EDB8A78B, 428BEA172712261C24623664791D09CD4611D578661962B5800016AB19666E92, 96B39237A2BF26231D0C9040BED488B0DF2FA7D406941CA1F13AF194A1318961 -456BC60E76C111E679735C929F6A1, 65D18BD1424997E071AFA1B7E1384792CC4ED721192445687245D45B61D75759, 14F2236BF127A05EAC99B9477660B490234E4EA8610D934492761172A0BFBBA8 -D043522B644335B36C5A15B7DE3E3, B6DC43600179299591502AB3A7B62A7522D8518FCBD114AB0E300C2BE89C754C, B0C43B85235217E016005659C14DB81417063CEE07F25C3EFB22D2D43D2AC8B6 -270C9F6822CC9A11A450E41279ABA9, 42830166A28FCEDFAAE674737BDB980ABE713216F13D081C36CF5CC28EDC7A2, A880CDBEAD854A724B0CB957EA1AAE9AE9ADC553DD5FC1DD4034D61F358356E7 -7525DE386865CE34ECF2AC376D02FB, 3D6BA19FD08838C48F9EAAC374BCEB3ACDEB52B003C057FB1134002B2A7EB64A, AD3E43E0A93A16DE4F51BDE0CBFE765790FB794EB23A962C71950E0C58C1D0B4 -15F719AA939316A9EC6D804A64708F1, 5D77D6DD26B173B01B34E1696453445AE09CD2C7F6921A0A0F7563DB639EDF2C, A2B70A3CECEAC904AC26F544D070754C9E44BA79A93D0E837B933ADF311D2C9E -41E54CFFBAB943FDC54880DF2D51AD3, 4FAA2DFBCE8C73D24B863A5EB81ABD98CD09007A76BDE3F4FA58DC57C2CCAD24, A1E22B4ED10F195B99153A4FA5D5AC5001FF32963A5562071E0D10DCDE5A9C4A -C5AFE6FF302BCBF94FD9829D87F5079, AD4E4B03BCE96A13E6879DE36C784E5F5E9B539E0BA52BEB563799E2EE340157, BB79E593CB74D7E4F1547DB02DCA01A1062D80FAD325A16D93AD5F6AA2327285 -2510FB4FD908363EBEF8C87D897DF16B, 1079E71F57429DB2E48B301EAAF268C3E29AC00A748238E510CF66443CE47643, 295458E61C1F7D09273135453BC6AC6B8C808DFC672BD8DF276617C1FAEBE45D -6F32F1EF8B18A2BC3CEA59789C79D441, 6FBDD9C68E6E3C13EFEC87D55FB449C5ED08103B4FE3DAFE063AAD4752C69FFC, 30DC03A35768074C6E2CFA1AC4465C6F0FACE221E02E4509C022EB9979C26839 -14D98D5CEA149E834B6BF0C69D56D7CC3, 665323630EF7C3DBFEFBDFA462E132436595A20116B86FD4D088B5EE1F46242B, 9A0251FF81EA9EF22B7CE29EE10A1DDDD8C2392545E869F705A9759A64284F2 -3E8CA816BE3DDB89E243D253D80487649, 2A8D5D3996D8FDA7AD598B9812DC428A49A804E4B9915E1ACC4317D70A394526, 6B708373077E7B214F92F1E43BDD9FE10098EE871CC8A3CED2703CCBC64819EE -BBA5F8443AB9929DA6CB76FB880D962DB, 3F8BFD7E01D6BABEE8AE5C0023406A7E55527D492F81ADF193805ADDC6B5BE06, 93A796BAE5BAE20B5FB5BB145F281A688AD964980BB8D607EBD0682E32A07745 -232F1E8CCB02CB7D8F46264F29828C2891, 3159CCFE341E3232484DA60E6565F4224509AD06116316003FAEB69D1BBED6A7, 1350681E78AB35756CC9A5636032232723CD558553161BC949EECF005566A16C -698D5BA661086278ADD272ED7C87A479B3, DA9074F3576970F61918DD953C9E2581CED47C225E34C2F800A9B26B0B61F3E2, 77BDDEAD28C0351CFD8AC3909CD19FCE22D158CBA3FC03739094EA80E3B232A5 -13CA812F32319276A097758C87596ED6D19, B1351C4FF86586BDAF37EB87AE9F6FF04B14E990DAC784B7EAEC2C2651105BAB, A88949AECA8ECDF881A8007BC63B77A427480F1739A0D3743D0D1754E91CFE88 -3B5F838D9694B763E1C660A5960C4C8474B, 579D8A508537E69D4C4D221AE9D1E38AF6E90538BC8971D973DF7D4712F74ABD, ECEA86769A2844FD13347EE02C3A516FDCC99EE93BB7B40CA3A0C1A9716EA46C -B21E8AA8C3BE262BA55321F0C224E58D5E1, D9F14BB5199B8ECDA86E0631213B8A80E780088B37DE44DC5B1ECD58F0F841F4, 1B581DE93E760032BC4CF2FA1EA14B4C0B67DA14C49512DB565E591C47B18972 -2165B9FFA4B3A7282EFF965D2466EB0A81A3, 55C3DF8C6CD7E4F26BCEA8C9860017C4752763AA9E49949AD8838E10C9CB240D, 16727F2C94F57583C6E851AFD853963E76AC96A5DF530CBD48870B1C3349D831 -64312DFEEE1AF5788CFEC3176D34C11F84E9, 2B465920BF8CBCBF62022E09B4C1356D1E1BF725055EBD3A30A11B39AD60A94, A7FB8E02CDA904488B8F66EE2F62B3ED9ADA44D2B605F4AD3FABFAF3D92C34D -12C9389FCCA50E069A6FC4946479E435E8EBB, BC1B2722AD47B8EE2A8B0253C4F3241AA48C520F7F5EB0EBAF0832E042BBB94C, 4FBF0E60F0C77B3940DD54DDBB75BD57DFDDF9EB8560F37028E851B7695A206D -385BA9DF65EF2A13CF4F4DBD2D6DACA1BAC31, 67EC6AA7E9F00A683AB12EA5D2B0D6534F153F52364BCB50957DC3C9B25085D5, D51261CAF18CCB70FA255ED3193DF359CB5A9E4DEA07BFDC68E822E15B201704 -A912FD9E31CD7E3B6DEDE937884905E530493, CBC3844BD953DE892EA36C87146AF6BA7D447B6BB6385BD628D2E6458DFDFB28, A0CFC1CD8083CE15E976B282E34A1074DE9B08F91607007D436B11A634DD42AF -1FB38F8DA95687AB249C9BBA698DB11AF90DB9, B061A3BE1CFD5C9B7A6FA70FCA8BAC56C232B442E589EE2B28A4EAE499BDFA44, 145D1912E0B9D5CA255B34C626A90D4B09BFC3BA052EBCF99E887FFD861B29CC -5F1AAEA8FC0397016DD5D32F3CA91350EB292B, B2517F8988757E8E3F8302A77E4EE74FB9ACC6B64D0C6074ECA5738D2D922837, 7C326B7D0E710DCE0127CF99D0D68B1C9B1B26ED4795AA0DB918499346FF0CE3 -11D500BFAF40AC5044981798DB5FB39F2C17B81, 1096E0AB5983634C16D9DA730CCF6672A4E155999B0F14F3F760551423021849, C327F46EC2093C801064CE4A107DB1E22B3BB0895266784178320E70DE7CAE25 -357F023F0DC204F0CDC846CA921F1ADD8447283, BFBD8F0601C73B9FC6D25D6DB4758B5CFCA89CE2CD35263C403FD6A880DEA3FB, DCBFD837E4106DA006ADC08E2459DD11A17431FFE3E2016B0B7C592E3A2EAD22 -A07D06BD29460ED26958D45FB65D50988CD5789, 53B2F6F9930E5DA209D51352C7321F18A97B67C40569315AAD935D13C2E34936, 439244706D7468F8BCBDE516ECE17AD2F30C9119F0E8B6FB50333CACB58E0413 -1E17714377BD22C773C0A7D1F2317F1C9A68069B, 57C8DDBB1AB759B69BB8A6629F998186C40478EBCC67DFC993471D490ED8AB85, 7AC909AD8973CA7F5122813CD9938A4455EE25B6415642BF27DED7C95AFA7FCC -5A4653CA673768565B41F775D6947D55CF3813D1, B834F33DF67A70F78EBCB948C45DFE64529A43E26495127FE4DACB29ED3FDB63, 30FE389BE9A99561CCBE60529DBA4E9D30001081BBC8E95EBBFD9EACE274BE12 -10ED2FB5F35A6390311C5E66183BD78016DA83B73, 20AAC70BF354A1D1CC349993A0FFF56BE19C53BB9E85A7DEE929D7EBF7E93F8E, AEE2B58B60B7FD429BE09B2234BE322E6D3839951F26A36ABFCADD02E6AE3899 -32C78F21DA0F2AB093551B3248B38680448F8B259, A208A10BDE0F07CDBA9311E4E7023D9B275860A5E223EB0BC4C3D27C297D63B8, D661601B560427656D27D0316049BBB3D390FE53CC268DA1B53824E5C680187F -9856AD658E2D8011B9FF5196DA1A9380CDAEA170B, 495D9297F46D251A4ED144C013123AB2ABF73B4433A65A65789D913891444FB0, 4F745ABB79C8B82570CDB05910BE3E633A2FAC1DDF6787449B0E5845CAB874CC -1C9040830AA8880352DFDF4C48E4FBA82690BE4521, 75A7AD3285D6B7864A72616DFDF40B8D753C482410D8DAA8810C60EE2CA00629, AD803C0554F36D240E224E830A92BE8DC303FBBE957E01B36C60EC3143DEA370 -55B0C1891FF99809F89F9DE4DAAEF2F873B23ACF63, 77C8ECA25B41B1C63516FBA26FA43298A4AAFE402B812405AA6306A5097BD9E1, 841EE2D5B77B75425EBB5128DDB3F520ACF7AFF446202490152F4C14D219EDBC -10112449B5FECC81DE9DED9AE900CD8E95B16B06E29, 2ACC6FB1B4A58B7025A0C542510DEDA8F147B5F3EB28E04FCC6244856DBB3715, 36A1BA43FAD281FE35A1AD390C4A734C3AA94CC89B7950934CBAF3C9F47CD452 -30336CDD21FC65859BD9C8D0BB0268ABC1144114A7B, CFC7CAA0C2D40F1F6B9959460C23A019007CB6B812957FA17BE969FF92E241F8, 7089616949A7BA06CA36DEAA30B4960A83335D59E68E1D835014E0A8C027D3A3 -909A469765F53090D38D5A7231073A03433CC33DF71, 76120BFDD2EEB6C3D7822AED2D300FAF5B3927633258E63C9B74D94C1CE524E7, 178FF1C86776A14514865D9AA454030496B5F4018C36D1427582BD326297C67 -1B1CED3C631DF91B27AA80F569315AE09C9B649B9E53, D0397DA2AF792A973A77B55762C0C51A263AF2F0D577A817E6CDCE6541E26FEE, 3EC2AB1D20F0FF4886E836E6FF34B3628A3483187BBCD8E78937F9CCA2F08A9D -5156C7B52959EB5176FF82E03B9410A1D5D22DD2DAF9, 415A23834685EBDCE06F994A16618963520C8CD84F9014C8E4E3D632D9523994, A4A9AFC86420EC28CE6E8E4D17C64F4B1463BD7262AFA96089ED60B418A7D9DF -F404571F7C0DC1F464FE88A0B2BC31E58176897890EB, D49FC91BE7AB212984776C68D9C783BD4EA44CC485016121DA50FAE97C1A3CB9, 627891911877D2C7BC3B0E4172F44E97F34E0E80A5F321E059AFAEE19A40C8A8 -2DC0D055E742945DD2EFB99E2183495B084639C69B2C1, 3D5BF5F7DC1762471E4E24D98346030B1A56D21A8F638C85E105737E73428523, 9A917C022261FC4D074CBECEACEB6588956CCD9E9418CA2147AF33BD49B1E0BA -89427101B5C7BD1978CF2CDA6489DC1118D2AD53D1843, A1126451D9E34D2040F5E09E3AE23E73C89CA50981983BAF1B107FBF7AB3C8F0, 74C7959EBCA53263D52DF1D296E20A0D1AC1954833C3D3814E3BBC0BBAE8FA0 -19BC753052157374C6A6D868F2D9D94334A7807FB748C9, 3BD40ED9FC06885E3D8ABA8CF020F01AF6F26B62E0FA170CBD86B55A865CE6BC, F02BF5CCF5B3C778E7143B37BA56CC7C215BCB35E761E6ED33866A84E54A1153 -4D355F90F6405A5E53F4893AD88D8BC99DF6817F25DA5B, 1FA5CD6769E286BB3F7C207814A400B0A131424CABBC8321782FD45F45179789, 705B21BC7AA42A13365C4A8EBB3BF6C6BE7583EE9624E7801CE4826F159E3F50 -E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, C3FA4B71B7A9E8734BAA031C07F3C52617C009D19A156C24E755B875AC9610BB, 362E5F7BB0B3C23BA97B4862D2E9285FE869E576EB88B452689CD417DACB04A5 -2B6E05C18A8432D50F398D3119CF9EA168DAA8D7854AD33, 7E5B0FF5ED458A8EC300D6E8E21E1EA8737FC7AF96D9D4D2F17A8EEB80FA6E8B, 6D4964E12A1322202B2F2175587C2C67FEC3150E083660C7020FD4A6254D03F6 -824A11449F8C987F2DACA7934D6EDBE43A8FFA868FE0799, 9B601E15C593D4BE9FEA536B5A5F613DC718A462E739D0DEAA0F1AA588060522, 18C701BC28A7F5B310448B9A91D8ECFCEFEBE6AE731E87F6113CE6F49A6B7D2A -186DE33CDDEA5C97D8905F6B9E84C93ACAFAFEF93AFA16CB, 97906F5FD7BFAA96A2DC8DE50EB540DAA1E7631291E9BECBF93CFEAB0E840BD7, 6435CD646C8F08CD97003FD86BA808BACBFD827975BBA30C900A6B7DB8CA3600 -4949A9B699BF15C789B11E42DB8E5BB060F0FCEBB0EE4461, 57F1D69B8DB313F85A58A91A361205BBC3C5B9F51554F0859BB8A1F7F7BFB095, 617F370A301F04FFF30D226EC88A17DDC7059C04F3DBC853496089250C84527C -DBDCFD23CD3D41569D135AC892AB131122D2F6C312CACD23, D7789A117DF91395FEA34B145F5FCF3052183EF18804E0E10DCCE2FB40710933, 18B7F785922E3BC2860F50A5DFB360CC0771166E39435336E8E1AB2292A779E4 -29396F76B67B7C403D73A1059B80139336878E44938606769, 74F61E72F91A3CA571E3E163DD7D91037540264FB835D8F7571D746CF74EC92F, 23AA2935CCE34021CB1DF88E17D4D4A2028D835038DBB63302E508C6706D3857 -7BAC4E64237274C0B85AE310D2803AB9A396AACDBA921363B, 6F4B74D86DE816D232FEE77EB2EAF97BB0790BC6CEAB3F9A31BC3320AA0DA7B6, 761B85A52A5C1C67E526D03F6EFF465FBEE2DD28B1141B2D452C1C3BE097E5C2 -17304EB2C6A575E422910A9327780B02CEAC400692FB63A2B1, 7613EA577A3C0515508104E639AF490F4B96A1517D3D10ABBBC6BAF32977F0C2, EB7861EC7120DF5A330DA6BFBB474FE41BD14B69AAE9B50DC7C33652994B84AF -4590EC1853F061AC67B31FB9766821086C04C013B8F22AE813, 1CC296408B84D5D76EA6D1437A07B72E85246A3A29E8912285A6D59C62425775, 62F7293A7B6179794650273E6D507E0A09B03E371D1B923052981304F452FD89 -D0B2C448FBD1250537195F2C63386319440E403B2AD680B839, A9AA34E2720127F7F1F8D0232449139EF99507189B30F144EBFE24924A07BFB9, 7A8437B10E9728FBA85DF51634BADBC102FF23B224A4E4B58BCA08A2016FD563 -272184CDAF3736F0FA54C1D8529A9294BCC2AC0B180838228AB, 46C01E02D4888DD13883033E4161F9E747051540656A02B1B74D27150CF2EB6B, 80090D5B7C41D071A11A6D8B8F441B9B290CB51317DAFF782BE73A85F3FE0068 -75648E690DA5A4D2EEFE4588F7CFB7BE364804214818A867A01, 7920A0A640191CF20FEAB083305B2A164A30A69AC7F89B0339E07E9B5DD82290, C82861B4D1F5267E7E70486B59A1A6D49C82A169679E8448D7D358E941D6CB35 -1602DAB3B28F0EE78CCFAD09AE76F273AA2D80C63D849F936E03, C26142762E32069E20EDB92E8666BE3836BD930C985BF8116FF922DDDED448A2, D6BAE7F500F4C0954EFE6DD55384C776BCDB903D77A3759314881342B0D1EC60 -4208901B17AD2CB6A66F071D0B64D75AFE888252B88DDEBA4A09, B3CC5633A9CDE1D6A478309FCA0456F5CA39980296A790AE6A7D1C6802A69533, 1ED777C041C02D69C70DF98B353738B70FFE3BB95D9CF7C07359D7640DC70AA -C619B05147078623F34D1557222E8610FB9986F829A99C2EDE1B, DA319896D84A293D5B7DE77AE647C6191B68F4D5E4B4458DFA3FA25B9CD198DE, E1B53F44D37536DB28C4EC0FF066F14BB74FC2E85217AF4C218E923E23991B3D -2524D10F3D516926BD9E74005668B9232F2CC94E87CFCD48C9A51, CF29FE665E22DF6577234C3036D9C762CFA2BEC14EE441082E412703BB6C6BC0, 5D475D64E88D2270FD24CA9377A15C704EE764AF0B3BF19B040E981B09E65ED8 -6F6E732DB7F43B7438DB5C01033A2B698D865BEB976F67DA5CEF3, 8AAC4CD3B9633363E8C72A963BE149D79E1CF78AF33E109101DEA8E4943B3078, E47F75908EBBE6769D3559E07EC692BACEADB8DAB28EE94C43DECAD51883EB5B -14E4B598927DCB25CAA92140309AE823CA89313C2C64E378F16CD9, 1E8F640EB4FF22CC8F5D70A950936E7B0FFE73BAE6A80C16642DBCF09F25C671, C53E3FDFA754C0C75D6A68C7A4098B0494D2E0DD269F49A1534A7C9B5560FB87 -3EAE20C9B77961715FFB63C091D0B86B5F9B93B4852EAA6AD4468B, 2DAF80614A44F375067397F1963ECC96A367ABFE9FC1F0FBFA56996DCA320AEE, E11A854EEDE82208762E81E73A208C99D8E15B2C634943B3C9832CBE35E87A1 -BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 3728051881A5D7971CA34B3783505AC19F61494EC8BB6922C25D4823F9CD154A, C0CCE51CB8072267C2921CFF989D82B6A3367B08CA0A908C122251FAA1686E66 -2341F271773446CFC5FD681C520567BC65C783158AEA3FDC1767AE3, 21C43F5805F6C29A36F3E0AC67217748A8D0273F088A8D8F19A5F6167AB9EFB6, 2B31DCB1C02674551FE3302C5FFBD7C7209DF984E98D02A275A651D4B5F8EE7F -69C5D754659CD46F51F83854F610373531568940A0BEBF9446370A9, 5DF605E21F7EA769ED1659BD4BFD41858D61CC3FB7AAC29FA6E3574CBF0E8EBA, D354A4D5F8D429B7594A80BF8E9802E4D2BD5967488B263F79DC89AED1C978B9 -13D5185FD30D67D4DF5E8A8FEE230A59F94039BC1E23C3EBCD2A51FB, B8D6DB27215B4E78EE497FCFF3ABCC781639EC08E768D5778E2070C2EA385AE6, E80C1A129CF668933F95C3073DAE5798886D70AF5C0A87C50CEFCCC3AF176A5F -3B7F491F7928377E9E1B9FAFCA691F0DEBC0AD345A6B4BC3677EF5F1, 7A06895F962C32FEBB63F10079775FD3CC76FB800B14488BFDF056156DB62029, 1E4B94B3312A9D8887DB3C44DBD4AF9FFCFF264AC448FF089F2BF808082519C0 -B27DDB5E6B78A67BDA52DF0F5F3B5D29C342079D0F41E34A367CE1D3, DDAA2EEEE2573A43A43C1827ACAA00A13667127D2EB6D3E7E759C614EB3DC9A3, 90AA175BA77054377D15E0A641ED1956EF3592D7108ABE4618FA7AF81B36B8B5 -21779921B4269F3738EF89D2E1DB2177D49C616D72DC5A9DEA376A579, 765A3C81609FF60C2779D89E0D5B2FC6128726093C7EE6216F248E09DC393D30, 1BBCB16FB3029270FCC8D09DC519623C298DA5B12ED700326BACA5DA09AB015A -6466CB651C73DDA5AACE9D78A59164677DD5244858950FD9BEA63F06B, 3CDD4983036ED8FBD369F5AE9D95CF343E0EE7793CDFE28CA8F3ACB3A843FA1C, 2CF5696812D676C1EF402C90B35EB4DAE2B5F17930E77C23EC8B5787EF7DFE6A -12D34622F555B98F1006BD869F0B42D36797F6CD909BF2F8D3BF2BD141, 1D19980E6B2B59C7973B07FF5C543C5320FF047D2CE273E9F17907150EB8E213, 71ECE24770B37D2829DFA3C59100EF7210B40FD7322B96DEEBC5644692756D99 -3879D268E0012CAD30143893DD21C87A36C7E468B1D3D8EA7B3D8373C3, BA372F5739BDA9894ABED52AF8520E65A29626FB94476C304457780AC062EEE2, 7D5E6A137439945DF3A1E7C15BF2CC3B001BB9DDCBA1EC2197ED3C0188AAAC8 -A96D773AA0038607903CA9BB9765596EA457AD3A157B8ABF71B88A5B49, 5B00D214C37A58EBEE1E9AB4F5BCD3F349DE92CA78D614D2AC1F6717299FE80D, 9A15129BE0FEF3DB86DC3638781697F5A68154C6B57FA75535048CB748508558 -1FC4865AFE00A9216B0B5FD32C6300C4BED0707AE4072A03E55299F11DB, 4C7D01A88881FA463FF9FBB011BC78467371EC3636BF356A40DB3966A4725C12, D4256E3C0791CDA134DCE046B989FA1C851CB0E4C0F93DDF65CAAEC37BABF1C7 -5F4D9310FA01FB6441221F798529024E3C715170AC157E0BAFF7CDD3591, D8F8ED1775924A365B6E33A1BFDEE9AD981D9167D233B0FAE3A94A919A41C08C, 1D6F143C29937358B24934984969C9231EF91969CA4E0238778144CEBF2395F1 -11DE8B932EE05F22CC3665E6C8F7B06EAB553F45204407A230FE7697A0B3, A3389D30E62E6B5FEA12AE3A9764F43B3668359A11CD5E4E709FFDE63E704B36, B74AC9406ECF52FDC939790D648F9102B829FFB16DCC3428B328B1D5A70CFA27 -359BA2B98CA11D6864A331B45AE7114C01FFBDCF60CC16E692FB63C6E219, D4E908AAC6299672CB2B58EC073DA754EFBFDFCB8829331A075ABF37C60C7618, 954FA0B144CF43D24DD6F506532F9230ACC85F99128EFFA77E211D5C3AE67313 -A0D2E82CA5E358392DE9951D10B533E405FF396E226444B3B8F22B54A64B, 9F852D5CA1197D636F8E384B343CF063A91C6C22955FE1F53D38576864F13E96, 127BF45A8DF139860EFC26F42BA42CBF2FA43CEF01EB05E82D392D96780FE9B1 -1E278B885F1AA08AB89BCBF57321F9BAC11FDAC4A672CCE1B2AD681FDF2E1, AB4641FC865855D3F724D725862E89C0BC5D586CD38FBD9055259951373CE5CB, 949E2E48F885535FDD41DB7F2ECCA98AD9755B6E2E8E34149808118E860DC52B -5A76A2991D4FE1A029D363E05965ED30435F904DF35866A51808385F9D8A3, 41C87689196E759F70C84C76A20CEB654FBD743A7102B9C28B8B5AB17440B27B, E285AC9259B5C1EB772630D6715113A2ED1F6CDFEAEF168208F3115DF985511A -10F63E7CB57EFA4E07D7A2BA10C31C790CA1EB0E9DA0933EF4818A91ED89E9, 6D4256FEAE924962F1344A93C722664AE6DA2B00D2C2E85C9052FC7F9CE35427, 8D1D3CFEC0357611FE17042315A43BEF57A5AD7FE80AA7F840CACC2F3D13D38B -32E2BB76207CEEEA1786E82E3249556B25E5C12BD8E1B9BCDD849FB5C89DBB, 4D3E07C7ECEE99A34FB7C910BB6086B4D1E0D0E512F98E9FFC419C9E9AE691CD, 2626132D644B9C88C0E345417CCD0068C9661BF8272924DE6F991D12BD37EBBB -98A832626176CCBE4694B88A96DC004171B143838AA52D36988DDF2159D931, 6FF3287C5837D6F3886B9397D6EA1D79D7379C7D97E4CA57466CC00324BCB134, E8AD250EB4FA73D8A5935115E2871CD6702484725CEC5B449DFB1559A98A5268 -1C9F897272464663AD3BE299FC49400C45513CA8A9FEF87A3C9A99D640D8B93, DDBDB50FA78705DF465F1D63B744E8A237A7C341837D275AC701E9DB4DDE0306, 241306EF4874F9EB88F637AD8D17E30EB1BDC5A7BB0CF4366DEF1CC2E5068B3A -55DE9C5756D2D32B07B3A7CDF4DBC024CFF3B5F9FDFCE96EB5CFCD82C28A2B9, 388701AAAE700C0D2CD3AEE24A0355F425DCE93EDF07D3F5FCBEC3E38CDD02CB, 45334DA11312FD78356A148DFF7B57C7B15ABB46FEE7919FB3A2FF25434FE542 -1019BD50604787981171AF769DE93406E6FDB21EDF9F6BC4C216F6888479E82B, 1F3E9850E3E63D817409779AFD0D03CB9C887D9D9F40F4CB22914254688EBF93, 34A83AA60ACD17C6606D526D165C2BCBE355D5C4735E2555CE54DFBE75D03074 -304D37F120D696C834550E63D9BB9C14B4F9165C9EDE434E4644E3998D6DB881, AE48674A2FF5BD610393CCC508E483045DAD0E33F01E697311B4E8DB23D4C933, 8602587C18AECA2C5CAAD1D138C5A6FDE9CE23644F5C763E6FE5CE051221026D -90E7A7D36283C4589CFF2B2B8D32D43E1EEB4315DC9AC9EAD2CEAACCA8492983, 145AB3976B233B422A68F7870372FE1683915C1B9E9E377D3F5366DAD83FCE3C, 9065CE9E2B6D7EF0F53F56DFAAEE5E2FA43A9F37E2F504DA4DE077ACF9303775 diff --git a/notes/etc/NoekeonVects.java b/notes/etc/NoekeonVects.java deleted file mode 100644 index 8ec542aa..00000000 --- a/notes/etc/NoekeonVects.java +++ /dev/null @@ -1,249 +0,0 @@ -/* - NoekeonVects.java - Generate Noekeon test vectors using BouncyCastle. - - Written in 2011 by Patrick Pelletier - - To the extent possible under law, the author(s) have dedicated all - copyright and related and neighboring rights to this software to - the public domain worldwide. This software is distributed without - any warranty. - - This file is dedicated to the public domain with the CC0 Public Domain - Dedication: http://creativecommons.org/publicdomain/zero/1.0/legalcode.txt - - You may also consider this file to be covered by the WTFPL, as contained - in the LibTomCrypt LICENSE file, if that makes you happier for some reason. - - ---------------------------------------------------------------------- - - This program was inspired by the comment in Botan 1.10.1's - doc/examples/eax_test.cpp: - - // Noekeon: unknown cause, though LTC's lone test vector does not - // match Botan - - So, I investigated the discrepancy by comparing them with a third - implementation, BouncyCastle: http://www.bouncycastle.org/java.html - - I determined that there are two reasons why LibTomCrypt's Noekeon does - not match Botan: - - 1) Botan uses "indirect Noekeon" (with a key schedule), while - LibTomCrypt and BouncyCastle both use "direct Noekeon" (without - a key schedule). See slide 14 of - http://gro.noekeon.org/Noekeon-slides.pdf - - 2) However, LibTomCrypt's direct Noekeon still does not match - BouncyCastle's direct Noekeon. This is because of a bug in - LibTomCrypt's PI1 and PI2 functions: - https://github.com/libtom/libtomcrypt/issues/5 - - This program uses BouncyCastle to produce test vectors which are - suitable for Botan (by explicitly scheduling the key, thus - building indirect Noekeon out of BouncyCastle's direct Noekeon), - and also produces test vectors which would be suitable for - LibTomCrypt (direct Noekeon) once its PI1 and PI2 functions are - fixed to match the Noekeon specification. - - Although this program uses a PRNG from BouncyCastle to generate - data for the test vectors, it uses a fixed seed and thus will - produce the same output every time it is run. -*/ - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.Locale; -import org.bouncycastle.crypto.digests.RIPEMD128Digest; -import org.bouncycastle.crypto.engines.NoekeonEngine; -import org.bouncycastle.crypto.modes.EAXBlockCipher; -import org.bouncycastle.crypto.params.AEADParameters; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.prng.DigestRandomGenerator; -import org.bouncycastle.util.encoders.HexEncoder; - -public class NoekeonVects -{ - private final DigestRandomGenerator r = - new DigestRandomGenerator(new RIPEMD128Digest()); - - private final HexEncoder h = new HexEncoder(); - - private final NoekeonEngine noekeon = new NoekeonEngine(); - - private final KeyParameter null_key = new KeyParameter(new byte[16]); - - private final boolean schedule_key; - - private final boolean botan_format; - - private byte[] randomBytes(int n) - { - byte[] b = new byte[n]; - r.nextBytes(b); - return b; - } - - private void hexOut(byte[] b) throws IOException - { - // HexEncoder uses lowercase, and Botan's test vectors must - // be in uppercase, so... - ByteArrayOutputStream os = new ByteArrayOutputStream(); - h.encode(b, 0, b.length, os); - String s = os.toString("US-ASCII"); - System.out.print(s.toUpperCase(Locale.US)); - } - - private void printCArray(byte[] a) throws IOException - { - byte[] b = new byte[1]; - for (int i = 0; i < a.length; i++) - { - if (i > 0) - System.out.print(", "); - System.out.print("0x"); - b[0] = a[i]; - hexOut(b); - } - } - - private void printVector(byte[] key, byte[] plaintext, byte[] ciphertext) - throws IOException - { - if (botan_format) - { - hexOut(plaintext); - System.out.print(":"); - hexOut(ciphertext); - System.out.println(":\\"); - hexOut(key); - System.out.println(); - } - else - { - System.out.println(" {"); - System.out.println(" 16,"); - System.out.print(" { "); - printCArray (key); - System.out.println(" },"); - System.out.print(" { "); - printCArray (plaintext); - System.out.println(" },"); - System.out.print(" { "); - printCArray (ciphertext); - System.out.println(" }"); - System.out.println(" },"); - } - } - - private KeyParameter maybe_schedule_key(byte[] key) - { - if (schedule_key) - { - noekeon.init(true, null_key); - byte[] scheduled = new byte[16]; - noekeon.processBlock(key, 0, scheduled, 0); - return new KeyParameter(scheduled); - } - else - return new KeyParameter(key); - } - - private byte[] encrypt(byte[] plaintext, byte[] key) - { - KeyParameter kp = maybe_schedule_key(key); - noekeon.init(true, kp); - byte[] ciphertext = new byte[16]; - noekeon.processBlock(plaintext, 0, ciphertext, 0); - return ciphertext; - } - - public NoekeonVects(long seed, boolean schedule_key, boolean botan_format) - { - this.schedule_key = schedule_key; - this.botan_format = botan_format; - r.addSeedMaterial(seed); - } - - public void ecb_vectors() throws IOException - { - for (int i = 0; i < 8; i++) - { - byte[] key = randomBytes(16); - byte[] plaintext = randomBytes(16); - byte[] ciphertext = encrypt(plaintext, key); - printVector(key, plaintext, ciphertext); - } - } - - public void eax_vectors() throws Exception - { - System.out.println("EAX-noekeon (16 byte key)"); - EAXBlockCipher eax = new EAXBlockCipher(new NoekeonEngine()); - byte[] output = new byte[48]; - byte[] tag = new byte[16]; - - for (int j = 0; j < 16; j++) - tag[j] = (byte) j; - - for (int i = 0; i <= 32; i++) - { - byte[] header_nonce_plaintext = new byte[i]; - for (int j = 0; j < i; j++) - header_nonce_plaintext[j] = (byte) j; - AEADParameters params = - new AEADParameters(maybe_schedule_key(tag), - 128, - header_nonce_plaintext, - header_nonce_plaintext); - eax.init(true, params); - int off = eax.processBytes(header_nonce_plaintext, 0, i, - output, 0); - off += eax.doFinal(output, off); - if (off != i + 16) - throw new RuntimeException("didn't expect that"); - byte[] ciphertext = new byte[i]; - for (int j = 0; j < i; j++) - ciphertext[j] = output[j]; - for (int j = 0; j < 16; j++) - tag[j] = output[i + j]; - System.out.print(i < 10 ? " " : " "); - System.out.print(i); - System.out.print(": "); - hexOut(ciphertext); - System.out.print(", "); - hexOut(tag); - System.out.println(); - } - } - - public static void main(String[] argv) throws Exception - { - NoekeonVects bot = new NoekeonVects(0xdefacedbadfacadeL, true, true); - NoekeonVects tom = new NoekeonVects(0xdefacedbadfacadeL, false, false); - System.out.println("# ECB vectors for indirect Noekeon, in Botan's"); - System.out.println("# test vector format, suitable for insertion"); - System.out.println("# into Botan's file checks/validate.dat"); - System.out.println("# Block cipher format is plaintext:ciphertext:key"); - bot.ecb_vectors(); - System.out.println(); - System.out.println("/* ECB vectors for direct Noekeon, as C arrays"); - System.out.println(" * suitable for insertion into LibTomCrypt's"); - System.out.println(" * noekeon_test() in src/ciphers/noekeon.c,"); - System.out.println(" * once LTC's PI1/PI2 bug is fixed. */"); - tom.ecb_vectors(); - System.out.println(); - System.out.println("# EAX vectors for indirect Noekeon, in the format"); - System.out.println("# generated by LTC's demos/tv_gen.c and consumed"); - System.out.println("# by Botan's doc/examples/eax_test.cpp, suitable"); - System.out.println("# for insertion in Botan's doc/examples/eax.vec"); - bot.eax_vectors(); - System.out.println(); - System.out.println("# EAX vectors for direct Noekeon, in the format"); - System.out.println("# generated by LTC's demos/tv_gen.c and consumed"); - System.out.println("# by Botan's doc/examples/eax_test.cpp, which"); - System.out.println("# should match LTC's notes/eax_tv.txt, once"); - System.out.println("# LTC's PI1/PI2 bug is fixed."); - tom.eax_vectors(); - System.out.flush(); - } -} diff --git a/notes/etc/saferp_optimizer.c b/notes/etc/saferp_optimizer.c deleted file mode 100644 index e9fc93c0..00000000 --- a/notes/etc/saferp_optimizer.c +++ /dev/null @@ -1,172 +0,0 @@ -/* emits an optimized version of LTC_SAFER+ ... only does encrypt so far... */ - -#include -#include - -/* This is the "Armenian" Shuffle. It takes the input from b and stores it in b2 */ -#define SHUF\ - b2[0] = b[8]; b2[1] = b[11]; b2[2] = b[12]; b2[3] = b[15]; \ - b2[4] = b[2]; b2[5] = b[1]; b2[6] = b[6]; b2[7] = b[5]; \ - b2[8] = b[10]; b2[9] = b[9]; b2[10] = b[14]; b2[11] = b[13]; \ - b2[12] = b[0]; b2[13] = b[7]; b2[14] = b[4]; b2[15] = b[3]; memcpy(b, b2, sizeof(b)); - -/* This is the inverse shuffle. It takes from b and gives to b2 */ -#define iSHUF(b, b2) \ - b2[0] = b[12]; b2[1] = b[5]; b2[2] = b[4]; b2[3] = b[15]; \ - b2[4] = b[14]; b2[5] = b[7]; b2[6] = b[6]; b2[7] = b[13]; \ - b2[8] = b[0]; b2[9] = b[9]; b2[10] = b[8]; b2[11] = b[1]; \ - b2[12] = b[2]; b2[13] = b[11]; b2[14] = b[10]; b2[15] = b[3]; memcpy(b, b2, sizeof(b)); - -#define ROUND(b, i) \ - b[0] = (safer_ebox[(b[0] ^ skey->saferp.K[i][0]) & 255] + skey->saferp.K[i+1][0]) & 255; \ - b[1] = safer_lbox[(b[1] + skey->saferp.K[i][1]) & 255] ^ skey->saferp.K[i+1][1]; \ - b[2] = safer_lbox[(b[2] + skey->saferp.K[i][2]) & 255] ^ skey->saferp.K[i+1][2]; \ - b[3] = (safer_ebox[(b[3] ^ skey->saferp.K[i][3]) & 255] + skey->saferp.K[i+1][3]) & 255; \ - b[4] = (safer_ebox[(b[4] ^ skey->saferp.K[i][4]) & 255] + skey->saferp.K[i+1][4]) & 255; \ - b[5] = safer_lbox[(b[5] + skey->saferp.K[i][5]) & 255] ^ skey->saferp.K[i+1][5]; \ - b[6] = safer_lbox[(b[6] + skey->saferp.K[i][6]) & 255] ^ skey->saferp.K[i+1][6]; \ - b[7] = (safer_ebox[(b[7] ^ skey->saferp.K[i][7]) & 255] + skey->saferp.K[i+1][7]) & 255; \ - b[8] = (safer_ebox[(b[8] ^ skey->saferp.K[i][8]) & 255] + skey->saferp.K[i+1][8]) & 255; \ - b[9] = safer_lbox[(b[9] + skey->saferp.K[i][9]) & 255] ^ skey->saferp.K[i+1][9]; \ - b[10] = safer_lbox[(b[10] + skey->saferp.K[i][10]) & 255] ^ skey->saferp.K[i+1][10]; \ - b[11] = (safer_ebox[(b[11] ^ skey->saferp.K[i][11]) & 255] + skey->saferp.K[i+1][11]) & 255; \ - b[12] = (safer_ebox[(b[12] ^ skey->saferp.K[i][12]) & 255] + skey->saferp.K[i+1][12]) & 255; \ - b[13] = safer_lbox[(b[13] + skey->saferp.K[i][13]) & 255] ^ skey->saferp.K[i+1][13]; \ - b[14] = safer_lbox[(b[14] + skey->saferp.K[i][14]) & 255] ^ skey->saferp.K[i+1][14]; \ - b[15] = (safer_ebox[(b[15] ^ skey->saferp.K[i][15]) & 255] + skey->saferp.K[i+1][15]) & 255; - -int main(void) -{ - int b[16], b2[16], x, y, z; - -/* -- ENCRYPT --- */ - for (x = 0; x < 16; x++) b[x] = x; - /* emit encrypt preabmle */ -printf( -"void saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)\n" -"{\n" -" int x;\n" -" unsigned char b[16];\n" -"\n" -" LTC_ARGCHK(pt != NULL);\n" -" LTC_ARGCHK(ct != NULL);\n" -" LTC_ARGCHK(skey != NULL);\n" -"\n" -" /* do eight rounds */\n" -" for (x = 0; x < 16; x++) {\n" -" b[x] = pt[x];\n" -" }\n"); - - /* do 8 rounds of ROUND; LT; */ - for (x = 0; x < 8; x++) { - /* ROUND(..., x*2) */ - for (y = 0; y < 16; y++) { -printf("b[%d] = (safer_%cbox[(b[%d] %c skey->saferp.K[%d][%d]) & 255] %c skey->saferp.K[%d][%d]) & 255;\n", - b[y], "elle"[y&3], b[y], "^++^"[y&3], x*2, y, "+^^+"[y&3], x*2+1, y); - } - - /* LT */ - for (y = 0; y < 4; y++) { -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[0], b[0], b[1], b[0], b[1]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[2], b[2], b[3], b[3], b[2]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[4], b[4], b[5], b[5], b[4]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[6], b[6], b[7], b[7], b[6]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[8], b[8], b[9], b[9], b[8]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[10], b[10], b[11], b[11], b[10]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[12], b[12], b[13], b[13], b[12]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[14], b[14], b[15], b[15], b[14]); - if (y < 3) { - SHUF; - } - } - } - -printf( -" if (skey->saferp.rounds <= 8) {\n"); -/* finish */ - for (x = 0; x < 16; x++) { - printf( -" ct[%d] = (b[%d] %c skey->saferp.K[skey->saferp.rounds*2][%d]) & 255;\n", - x, b[x], "^++^"[x&3], x); - } - printf(" return;\n }\n"); - - /* 192-bit keys */ -printf( -" /* 192-bit key? */\n" -" if (skey->saferp.rounds > 8) {\n"); - - /* do 4 rounds of ROUND; LT; */ - for (x = 8; x < 12; x++) { - /* ROUND(..., x*2) */ - for (y = 0; y < 16; y++) { -printf("b[%d] = (safer_%cbox[(b[%d] %c skey->saferp.K[%d][%d]) & 255] %c skey->saferp.K[%d][%d]) & 255;\n", - b[y], "elle"[y&3], b[y], "^++^"[y&3], x*2, y, "+^^+"[y&3], x*2+1, y); - } - - /* LT */ - for (y = 0; y < 4; y++) { -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[0], b[0], b[1], b[0], b[1]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[2], b[2], b[3], b[3], b[2]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[4], b[4], b[5], b[5], b[4]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[6], b[6], b[7], b[7], b[6]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[8], b[8], b[9], b[9], b[8]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[10], b[10], b[11], b[11], b[10]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[12], b[12], b[13], b[13], b[12]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[14], b[14], b[15], b[15], b[14]); - if (y < 3) { - SHUF; - } - } - } -printf("}\n"); - -printf( -" if (skey->saferp.rounds <= 12) {\n"); -/* finish */ - for (x = 0; x < 16; x++) { - printf( -" ct[%d] = (b[%d] %c skey->saferp.K[skey->saferp.rounds*2][%d]) & 255;\n", - x, b[x], "^++^"[x&3], x); - } - printf(" return;\n }\n"); - - /* 256-bit keys */ -printf( -" /* 256-bit key? */\n" -" if (skey->saferp.rounds > 12) {\n"); - - /* do 4 rounds of ROUND; LT; */ - for (x = 12; x < 16; x++) { - /* ROUND(..., x*2) */ - for (y = 0; y < 16; y++) { -printf("b[%d] = (safer_%cbox[(b[%d] %c skey->saferp.K[%d][%d]) & 255] %c skey->saferp.K[%d][%d]) & 255;\n", - b[y], "elle"[y&3], b[y], "^++^"[y&3], x*2, y, "+^^+"[y&3], x*2+1, y); - } - - /* LT */ - for (y = 0; y < 4; y++) { -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[0], b[0], b[1], b[0], b[1]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[2], b[2], b[3], b[3], b[2]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[4], b[4], b[5], b[5], b[4]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[6], b[6], b[7], b[7], b[6]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[8], b[8], b[9], b[9], b[8]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[10], b[10], b[11], b[11], b[10]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[12], b[12], b[13], b[13], b[12]); -printf(" b[%d] = (b[%d] + (b[%d] = (b[%d] + b[%d]) & 255)) & 255;\n", b[14], b[14], b[15], b[15], b[14]); - if (y < 3) { - SHUF; - } - } - } -/* finish */ - for (x = 0; x < 16; x++) { - printf( -" ct[%d] = (b[%d] %c skey->saferp.K[skey->saferp.rounds*2][%d]) & 255;\n", - x, b[x], "^++^"[x&3], x); - } - printf(" return;\n"); -printf(" }\n}\n\n"); - - return 0; -} diff --git a/notes/etc/whirlgen.c b/notes/etc/whirlgen.c index 2062ca82..2880d3f5 100644 --- a/notes/etc/whirlgen.c +++ b/notes/etc/whirlgen.c @@ -87,3 +87,5 @@ int main(void) return 0; } + + diff --git a/notes/etc/whirltest.c b/notes/etc/whirltest.c index 80645377..9184f770 100644 --- a/notes/etc/whirltest.c +++ b/notes/etc/whirltest.c @@ -12,3 +12,4 @@ int main(void) } } } + diff --git a/notes/gcm_tv.txt b/notes/gcm_tv.txt deleted file mode 100644 index 80d41b17..00000000 --- a/notes/gcm_tv.txt +++ /dev/null @@ -1,378 +0,0 @@ -GCM Test Vectors. Uses the 00010203...NN-1 pattern for nonce/header/plaintext/key. The outputs -are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous -step repeated sufficiently. The nonce is fixed throughout at 13 bytes 000102... - -GCM-aes (16 byte key) - 1: 3A, 03C32E0E9D7E07A410B9BEE40A8F0D26 - 2: 26AE, 3A635BBDC1A17CA40B58CEEA78105CDC - 3: 142FAC, 7E8922E8FA6F1E41E4339F0B52176DE4 - 4: 20C1863F, A1D12620C22EA7A0AA0E74667A20B8E1 - 5: B3B796AA54, 53F0F9F03791BBD76BC99D1B5639F3C0 - 6: FDCFF8EA82D8, B56076B42E3EEAC73DD42FC83B9220F9 - 7: 4695E719E67849, B4A1A2E29AAD713D5677CF425E65A400 - 8: EE5BA3309D417697, 146EA95CED151F8C40DF98C1CC54930B - 9: 13FF05ABB084FA608F, 55550AADC3461CC190CA22F29C6246CD - 10: 008B0102208A22D3A562, 7178534BC7145754BAE525CC06E14A6B - 11: 3536DBBB07B026E78E94C8, AB27183AEA2240B0166D702EEB2A7BFA - 12: 00739D5A27AE82AC7D6A40EC, 4354578C3D241074D3C1F6496420F239 - 13: DA41A5F458400C94B84026C052, DC6CB036FCAE9765A69F5B8C38B0B767 - 14: 4C99797C7EDCEA9D5425565522E2, 3FFEEC557F0D5FA73472D2A3F8E71389 - 15: D381E7AD2E5BE2C97FB4BD958BC2EB, 6BF713D4E7DA7C4290967A1D23F97EDD - 16: 5016C127F16A4787734AF3A3E6F6F0F7, 8CD8458531E94BC8160E2176F63F8D0B - 17: BDF3D0F24D9415AB5CF9B87BB45B4A8AE4, D81A3D56451313742ACE53D41223F6AF - 18: 68C1FCBE22FBDB296C246F2E34D871A6902E, 7AFD64D4EB0DE7E2A842B518AC6D483F - 19: 7D8D3C31E643611B0B557F29B437F635FE3FD0, 8501B61DBF4A4DD19B87E95055B95962 - 20: 4185EEB0B9B480F69B3EC7A162810073A36AD95A, B9BCA6D9CA0AC2B4B35D7BFF4DB27D25 - 21: F991F4A481E322FEEC6FE9302D010AC4C811B23B4A, 54FA4DDA92E57509F4D48D206A03624F - 22: B288424FF96596B2A30A1EB9480F5EADC2F6D8551B9A, 2C998C8DFDC7663C8DE677B2F1CBCB57 - 23: 1066FE3DCB9F8AE0DC0693F7179F111E0A7A1FFE944FF4, 65402D1F8AFBDC819D6D1ADB5375AFD0 - 24: 0A8772CCDE122EFF01D7C187C77F07BDA50997B4320CD0D8, F55823AFC3D9FE6E749E70E82C823925 - 25: E6E2FBB3E2238BC8CB396F463C2F488B4B4933087728D39815, F06DA35A9AEE65F9AD0DAD5B99AB4DF6 - 26: 569BD39CB1693CB89B88923ABE0D8CFA0B4F22A48A15E2EACD4A, 661AF51FF0E0E363406AB278BFC9176D - 27: 199EED81C2428170EB089060FF9676596EADD2270895A0C8650903, 90AA9C634469D45E7BDD9AB955B90130 - 28: B5200497A0654009B9F5B0D45FFDCF192F3042D6B05C6D6A8191A7EA, 71F6C4982AA50705D5FFC60512FC674C - 29: E39DA262C0E851B5CB5BD55A8B19D0AC0ABDC6FF3F32DF3B1896242D9E, B58AA05F594FC9779E185353CC52B8FB - 30: AF349B91BAD4BE2F2D5E4DDE28A1AA74115A9059A5EBBF9E38F341DC368B, 966B04FE43A2A9D94004E756F7DBFEFA - 31: 8C87861DFFDE72FA64E926BF741330F64E2B30837650F309A3F979AE43BA2E, A5C825AE1B844D6A8D531077C881BD36 - 32: 924E178A17FA1CA0E7486F0404123B91DBF797BB9DBDE9B1D48D5C7F53165912, 10F972B6F9E0A3C1CF9CCF56543DCA79 - -GCM-rc6 (16 byte key) - 1: 16, 2CA928694EA91AF92B3ADB402FBBCDEE - 2: CD9D, 4A9940BD7148F08AE75A4F238148C174 - 3: 6D1332, 5CD73043FD797D1375AA011D2E36896A - 4: ADC34199, FF5D2B40B02CB58BC63AA6D1CFBA811B - 5: 83158D52A1, CB8C45A56D7539CBACBB85DFB4C1F52E - 6: 66E32F053C17, 3EB9AC9A066DC66DB4973B5C78C6EC0B - 7: F23224FEB14897, 0ED4890D034F20A9A78ACA7492AE9341 - 8: 3FF9570F77486C86, B82C19DE2C5CA6CAAC223F337173F840 - 9: 44B4F4130619FD516C, 6689DC410118E0DC2D90ADCD6327049B - 10: 6E205B2537935E50A1E3, CE5739FDFC13D279075508786388C08D - 11: DB836471D91F2FFC6A199E, 1518E9A6CD2190D32A9EA1AC0849DF09 - 12: B9936A58667AABD9BB9B2ADA, 388894E75CEF512CD5E3986DFB2CA589 - 13: 1B5072C8FC0EA19A0486C0E04C, A804D99E2414A314440E5F4B8BDCFB45 - 14: 614903F301B1E7C092E9A32C195C, B4F7406533C58AC54869F09C4B0801CE - 15: F30ADEF328878D174B1AEAF5D7137D, 7C5BB92772540C1E2209B77C78AAB092 - 16: 776D20B980DDC7C48ACE4225F59E2736, 85DAEE9785EB1BA9C99FFAA5AE565159 - 17: 6BBA225325564369BB5F11EF5734604938, E41E0E3C31F4B1770AB93750A386286C - 18: 6EAAF9EF0C149A13BA535A2AFC398281017D, 10CBB6A874711DE179D8A4EEDC4DE085 - 19: 9D0B62274F7E5426F5AD9515DAAF4742C291D9, A35D18485F881CB0BBB00A9421C9694C - 20: E6A18F640923DBB22FCBCEB0ACD1A2BC94256212, CFCFC7E7E5C64090DF746F8C36F605D4 - 21: E37EB92C38B47C6E2621C2CC64D83CCCA9104C2095, D88C0FBF2402FBA40EB525118FC2CAC8 - 22: 0E690F9D73E7E689AF48FE5B99E58AC42F3702EA40FD, 33D698F9C44FEB68C1C442B30DD36B9E - 23: DA759D58629FA946FB635538C1AED318890C4D84EB6610, D7BC6A69DA658EE3DB842C01B9085A07 - 24: 581F86B5A844FD709B13E09A7CF64ADEA84EFC2D7AD9300A, 0296F58775CE4D4E92C4DD0CF65CF8D7 - 25: 78B346A03098BD6EBE0BF56F5C37C83B3C42288D0E031E0D4B, 2F89EDA70B8A31EE64B264C7C5165AF1 - 26: ED768B0F18A13ACF40738FD61642C0CFBCF746D60887A8C5FDD9, 56EE211AB10B37D61FD80692A76615B0 - 27: FCC298575C9F4E1DD2C8B0482F9FFF42EFFE565ED5FB178DC56947, 0EBA843B28F91798D79E2105995EF662 - 28: 4341133DA062A885DA6D7BF4387C6F28829E65EA7DB7E50B15F2D03F, DAEFA9D1230FE3084FDB91AC7ED35503 - 29: 777C13A7FC16345BF949508CBC1051540928CB5B9B36569488109FB60E, C8DEE566513233B8E74ACB1046FE87B4 - 30: 6342B6FEDC0B8868AAB5E870CE1B2E420269CB11DBA74F10C5E978F2B44D, B2B001639A2A0BA045023817947573E4 - 31: 99A123D836EF76A4250A960DF7DCFA231C3595EAB53024F53B961EF80901ED, 02E8820F6D31A23DC9F0DCE511A1F8FF - 32: BF57034D1EA94A6DB86642918EDBC9CC7D6C39025F9EC528EAA2A9EE7B22EAA1, 7801231ADBA83C137D760AA75FF2C9E6 - -GCM-safer+ (16 byte key) - 1: 0F, 62E723CCA67DFC49C1915AD3C69FDFF7 - 2: 87A7, A73B3D416AD68235C662E9684430FAA0 - 3: 40FF80, 8EC11FFA3B777664FC6D2AD37AED3765 - 4: ED5B1716, 1A4FD3FDC9D197866FA8AA1403E3219F - 5: 033CF349B9, CA1E6111A5BF539931490D2EFDA7575C - 6: 23E30716B131, 79FB546DE6C534A18BBA604E8E2BE8D0 - 7: DE67DCF5635B0D, 463989CCB9A972468B870C403AB840D8 - 8: AFB5BCFD6E36E41F, FD3A63618F1D31A8A71D94FE91F41501 - 9: DBA0EB7B664D303BE5, 2860B5516CF0CE20E35BF766A4375EAF - 10: 2826E6EDCFD7E9FB938C, 685E8B032254DFF65DAC8A44C3819E08 - 11: B70FC9EE54123F45A4E67D, 8661E54524A0F12612E000876E8E6F15 - 12: 5FC3C79807594E403B82B9DB, 9D88DACCB8654708B241A505AB12FD47 - 13: 2C7AC463E62BBC014E1A48E15C, B4FB110193F147E4A59EC38983528047 - 14: 046D692C6B2827453F7BA3EFB609, C4E46E0D5F71D2D477D7CD12B7447713 - 15: CD693A49640E00134FE33C9E324122, F43001B425E37C094BCCBAC49A6471C8 - 16: 9FC2042EF22E0F8A767DB0C52109E4F5, F60730D914AA02A3BCED7F737640B9FC - 17: F09ECC9AA4FE3596C00D0AF4E052E60755, 199B8C9CEED9B4E70526BFE603FD5E45 - 18: 0C8BD929E87A21A9F043E47CE79950EA0E75, EC9D38AB193FEC16EC470A15E27FB367 - 19: F621E43B7FB21D98544817FB229C2F308361D4, B6BDD4053C4DFBD3970A5055E4A7719A - 20: 63F1D36ACEDADC63627CD438B379C48D648126A8, B1A7217302F84CF5F6A259F2881484B6 - 21: 60BAE96D5E0F248A257CB3A7788D6107CFB525D20C, FE60C3B3E2029869EA063BA3B981AB96 - 22: 01213496633A4525B2C7CAABDCFEB84193A8AE2D8059, 738E7956DA8464FF655CE4F5B0A005C9 - 23: F6822F3C87B238F6F7E44307C416B6366C18B26B2357C1, A27A98EA0AAFD1D3010DAF4070F52E7A - 24: 32B49BE196CC3825B7B6E0DEBD90680B996C3AA161BB52ED, 8505573CC5191577BD992A004F255953 - 25: 38361B85808140127A44B364046A5E1FB0B86885D5030110D3, 17DF461782D45807A7709EB2BCFAABE1 - 26: DBEF6C2067BAFF378A285EBF685F559A896B76A517292B4301F0, B6061185764BA316CC0163925F27A1A7 - 27: 15E2A0634520C0CF4C189436D35DE01CF5C83F0684CBC261A59AC5, DCD96E1687F24676838B60E873D47087 - 28: F837ACBF63898720B0527477B59A8EA74751DABCF2CC48C768AB421E, 72DD76EADF13C65E6F322E110F9944FD - 29: FDA50738B60251E5FF1C38AF0A8E3F619D247C24A20D63B372571AD6D7, F1F1B212BD7E973BA17BDABDF27F5AC3 - 30: 0CDDC7A10CA3F3616E923A751EB638CF1E67CC2D17A03538C6A2BEB8555F, 7DB533FD15E48FFB217B18E91B7B2928 - 31: BE0C9A148FC3344025C8BD35AC883B584AC706F540BE1100A92DB67EF900B9, FD172B0942DDC1EA076D46BA46B9F7AC - 32: F8256E9A41BC6E09084274A91229DC877257C433E3E43F05FDDBC3584B6093D4, 5CD834DDE7406085CADD5BEE122AF052 - -GCM-twofish (16 byte key) - 1: E9, D82A22BF49B52DECE1A3DAA163956EA1 - 2: 3DE3, 837CB2018053A6FA9A51A18362C0A6E5 - 3: 1123B2, 280150FC247D06FF79ABE3C6C5ACFDBF - 4: 6BE74C72, 52FA635AA14154D3FFD7A4866AC989E7 - 5: 7610B2DE22, 3E77AF501CA8EF386E2843A2C9F30425 - 6: 31BBF5CC9F77, DA25899A5B84C4CE3CB031D24BE39EEC - 7: 49FE2D43D16BEF, 491CAFC0F9A749AF0F87CB5276FF7BD0 - 8: 28191B8F4FBE3C03, B8318CE8B7EEE3BD42A35F7EF7B4FE91 - 9: F6BCC7AD009DF4B71F, 01BDA4572E1B95D0152A8675BBA9F6B4 - 10: 89B6B6B611CBBD4AB667, 5AD5C05B2FFC3AF07ACA04EC488BC4BF - 11: 985A04A3BE0A43A3489870, 57AB64D52976293C09882943B8622A0C - 12: 15DDAC26F9C07856F5C11CCA, 183A4FD20C0D7AD1744B77992D4A16C1 - 13: FE45E506C3C26745D6B5B53A36, 67B3768535D1A50D2756AB4ED83C73F1 - 14: 8EBA337B5E13FC16BBB18B8F0B10, FA90CD334FA6565E517097C37B7281C7 - 15: C9F914A669C4C58ACA86884FFF469C, 876599BB8BC1AD6E7B1DBB00ED53276E - 16: 8416EEB95A4B3DA645035CBDC76C8532, 405B3A936CE697DCBA9385CAEAFE2B55 - 17: 312BBF82B6619E5F7EE56AE873CAC9C415, D5FB2028CF3F6C57295BA6F7E5F410A9 - 18: 1B51044539639A7093D996E3B4174D6A253C, E934D7A7EF90586A56C6C2DB53CD6C40 - 19: 178762C071950E8E0198E6573BD585EEEE4E69, DD661E463BF3BB45225F7E7A6E0DE3EA - 20: FFD6BA51FEDDB7E20593AD2BF0EEE061D3B5C014, 0DCCDAEBE6135EDF787FEEDABFF3A4F3 - 21: 04BE622B5CBE1058A4C8356F65B8158295F39E1AB1, FCA9B0BCA348B319D0B19DD28EE9DE79 - 22: 8B49016BFA45DCE019BA9E4606E987A159ED0DA07D2D, 6B93BD424871D5231EB359E40666CC5E - 23: FF8D016642B2C3190094423F5A61F7CBD358522A5E5799, 2088A4088AF6F786DFE08AED79A19B3B - 24: 07F446A2E3597041B9AFFEDF5DD474CA5FA5C872844A4F8C, 870223F7404BA37C8DB940623F0DDBE2 - 25: 32C2EF41ED54C8B63AB8151E690C1770CED90D2827EB2C302B, 5BC4EABF30986EE33FE483B8FABCE7D3 - 26: 3310D94B00007C10D4B3BC3F57DE877D0E2B822B96DA9CFEFEDD, E0E114CEC34558A180675B0438128F30 - 27: A4C95A5B316AE03A569B7862290DC6340FDEA1299C5B27591333B6, 63288F9CDEB93BF029C194B2C62B4AB6 - 28: CB63472F93E0325123558620DB9FBA058455D8AF1D23A94BEBB60A79, EC0968F60DCAFEB17411C4A2D7793FCD - 29: 74241261257C5610211A3B9D45D62AA0876B63EA289FE938FB03CC8D1C, 4A18EAA2039B29F0CEF7745EB8AA7DDD - 30: 6172080F96B60E3BA450BA195EB4D6732A25AF30A109031560915C4C0344, 3B690B088522D3EBD6B647070AECF97F - 31: AF52E18DE8608C39FA886377899C66AAF8612513C21C7B815E248D9F75D775, 39F0F712265F44A442A7581D8F314D1B - 32: 64F9AE4A9E6735D348343EA7ADD617F0687C2883637468BBFA3664F9194F1683, 947A02C9994DA490BFC9E036305B26EA - -GCM-sm4 (16 byte key) - 1: 35, FF70BBCF7CCB35AFE8B806BBDA8CF462 - 2: 418F, 4CB59D26F6F41BA4413339DE202394D5 - 3: F01644, B06F26255E3BF20393B697283619F4CB - 4: AE4871E8, 1E7D9A18D453B5992DDB52975B8B9BD3 - 5: C280528391, CF1C65604E006F9B79EDF4B6B6EF5B05 - 6: B2F0185A5F9A, 33981E9B9A58CEA9FCD1219868E4907E - 7: 441988562A65B4, 4E6610F9F18F7AECCE0745B8227FB139 - 8: F70D70319A3B6652, 09BC4E06455D10358AFB36C01AFD0494 - 9: CEE87EE6FF0078A9A6, 8333A61DDCB965BF4293E6911864CF66 - 10: 2599C4CC2007F4032AB3, F2F0238D73262488B89F2C25ADFC999E - 11: D2EC717E6897299EDB42F6, 05603ECDE2E18AFA4470DF97F8EE4899 - 12: F8FD6DA197A96D5B3B06287C, 4BA295D367B50E71FACD53214151A7B1 - 13: 0C7BCD801EBF114EFFFEA84A66, 379C586351C9D2054FC458E0DB5F878F - 14: 9C4F1D1D7C98A042AA62A7A28E97, 1A932604F135BB21C2EC2E7D73AF0C3F - 15: F80C96AC05523E55881D716BD9E0A6, 5CEA5F26E90EA3588964E374942CEC54 - 16: F2272532A01D7FE05A47EB04ED422938, 294B483BAEED79A8AC42072D20F9028B - 17: 58EB27B530CA20D5A85BA7CE06E9112D2B, FCF9EEA2C4EF185199A67C172DFFFCB1 - 18: 46CB6F7EC77EAA26A78C2FC5184741F0CDC7, F9ABC0744B86DDA1DA92F317EF9269E4 - 19: 442355822E3E451F3FA92567BB3FC6488648B6, F51A079916440068677971C70D24C196 - 20: 5241BBF0112C1802697B8AE0B324853839734FE7, 15A71FFFB4156F88A5585BC5587E9101 - 21: DE432C494F1CDDE5F5055AFE2DA309E200E6014482, 517FBDAD471B0DE9671B831E797521E9 - 22: D84AD8B34414E955B8AF0EE292107DE71788B29BFD59, 44C464F41512C71AFFAFF37326A429DB - 23: 0E21E74C073C639049EA361606D7C2C2DEF7EBD05FA233, 2169BFF97DD2D677D9512E1BAB6FD5C0 - 24: 43E116D801E2EF765E9FEB07DD4DD33999796314064FC926, 90A32EDEE61181ED45B5736A31C7256D - 25: 506FD9ECAA69A9D608AE2E8D7DFA0E529E9249A57757A76BAB, D7E977F8CCDE9C2FA5FB52D38B9F326C - 26: 3D403A81FA1B1BA530E27D9864170BEF4241F373750F4891D117, 416580995A698D7F2B948F86DE09B9AE - 27: 1ACC9E429DBBBC790528F7156CFB81D7CD9C42950F97778D0A49F2, 0294F18AC56719B6F0B564D65DC3735D - 28: CBEE1B89C717D3DD688132EFC8C26E3A73D0F4371BE2011B33040631, 3D65AE78B1F7191BDCA08E1CA0040EB4 - 29: CE869BFF3E7F73F41700ABCD63635277B7751838D43CC1EF94CC740A98, 118D7B0B39B7461BA4C465B2CB1E601F - 30: F795251BE1FC9D13087DF27051A5F765A95A052DD5BF3779B5110E333A23, CCBD865E6BA507DECD56A56178F2C934 - 31: F6A93096ABAD485915A035C24341E1EFBB5B23AC7901E12FFFB5E9BEB23685, 07399EBB80C57C761CD355B6752EEE3B - 32: 195A9982F24E9310DAC69CCEB62B509E962B6EF55698B95AA2A7ED451B331249, D7472FFC15A99DE62CD2993AFADD9867 - -GCM-noekeon (16 byte key) - 1: 05, E18F8A201F281A4F3F4FE6F43A001107 - 2: 55DF, BE4D95A0BC5966CC2E80FB544AD43B8B - 3: 0C5A1D, DDAE782864D5EAC894C863D4D2E3CA54 - 4: 767CCE5C, 106D7DBE5D9D56D38E6A679528C72688 - 5: 9F099BF360, D4D50BE3B13DE7B18BE415B21BD9AD4B - 6: AE4B0C056B1B, 8E0EA5A5F612835B1A498C671413CA19 - 7: A8EF51FA62B5F9, 44A65E1A85C9C102467A50297F8256B0 - 8: C58D955A860EE8E0, 45622020FC40884B61BE3C35B940A870 - 9: FC5F5562143A7F9AA9, 7FBED30D1594D1DB57BA10EEF0C4AABA - 10: C2B2D5B922504BD29C23, F14AF5025799EAF249745F1B91AB554A - 11: 62C250C8548BAF088DD01F, 6D49DB3F4D3D8D30DB0B26DCF6CF6A80 - 12: 3FD64FC5BE13ED2AA041B8C5, EDC192E68D5A7B37F395B794C3D8245F - 13: A84B4EA6C8CF088B0C6D40B5E0, 01EE07A0D3F4A1957579C1EE36C5D5A3 - 14: 39A4C10E5C542FABA9C6138E02D6, 8B31EDD92A71F53ECEF716E08CD0A3C3 - 15: E4DF855B9065B51C47454CBC3209A1, 4714B347E11804D0AB3241B1D72F4FCB - 16: FB6D42C9C44997D4C854BA321C8631CB, 7F0BD8708CC6358899B7C62A7ACEE739 - 17: 81A2C031F0D5593DBD283A9650A4160185, 3267D10C3BE6044B0D2E0BB59A919AFC - 18: 33776FB240A45E1A84B86B49FB04A350B9F8, 3743BA55B523F4BFC25E8B2474347C70 - 19: 4E19A791B6EA4B776C5449CC3AC486EE9EAAE7, 9D4FD554D57E73B6789D20E262E706FD - 20: 10B946D1B1C005516B7DE7F51CD41C8DCC581DA5, 3F41B2B8FFCFDE5298473D2E6FF76227 - 21: 184C4DD415AFE6FE74B3BE662AC04E6229F517F4A2, 158749C83A13B178F0FB7C48E7A4A19E - 22: 6DBD3F3888A2028841B61167C3EDAAE71FC23774C923, E0E87641B9C55DCC041D343960C9417C - 23: 6D995776DB3B90B038A4CE44EF2D4EFEA16DFE0A5BB054, E14F63E6C6657CB904B16EC4F2B82972 - 24: A955576527F9A240B13F9DA2FD67997D5E606D34548C1444, B8FD23A3EFA33E7F4367C61E071F8BEE - 25: F7D9EE67BD019E97A5EB7A33B7A307B2268ED7BECA95553D92, 6B31B756C9B3EE98613BB29B357FADAE - 26: ED68485EF62E89965CC8B085CAFE89BD9661ACF66939FB014E1F, C57A80259C493520E50902597EA3EFCA - 27: 53365AF657B186724902E8011368D6E49DDD2158F51EE0FFFA9658, 8EB890A78716344E79E4AD48C52D423D - 28: B49CCFC3FEAEF5C8DE4E41EF538A537552B4957E8965E454FFA3B5F7, 7CA3442BAF416B50431BBBE5CACD44DD - 29: F02E7CA72035455ED723EB802E66118D5FA642295416F12AB298567AF8, AB211AB9624F17975279690C6D95EB51 - 30: CA4C2EC503773BBF34FA411340CBAD6A9115E81B073932444ACEC5537614, D877D5B78FFB31CC54142562BED1890F - 31: 9B9BBF2D46D301F3ECDE92A13C1EEE8F9F1533AA4AADFE2E22D36D51F5F469, F03F634BCCAC070F210142F737542491 - 32: 92AD34E95350275A4CF208CC1A07776E7A6635EB8F2A7D4D9B6B6C96D6812616, 52E49767709D7CE349AAFC0C405A68ED - -GCM-anubis (16 byte key) - 1: 99, DD35EDAD537F6FCA5BCDEB053BEE36B8 - 2: 12A6, 24CB6ECAECF376400F7BFF52C4312D08 - 3: 791DDD, 7C35A987766AC11A4625C92BA4AA419E - 4: 601FF830, 69A6E3718404D3A20019D9E7F875C2FA - 5: 45A67C8B23, 92EFC3CA67CA0934E5E22A0EBA4E5613 - 6: 5F2C7A733D42, EB5BF55241D049343457F05BE8B53CB5 - 7: C356F4D8AC59BB, 12598DA524E6F01EDDB512E3B988B860 - 8: F24201E87407B8BC, 58FBE9D3E242E16BA16420C354BCF0D0 - 9: 509A017E05D0075264, 357822F3CAF350972D86F2423FE49040 - 10: 0BCBA97FD277C65D4BB2, 068F57C866AD35379F108237B39C78C0 - 11: BFE30A88F0B1FE651D0EC3, EE2F073E23DACD211B1C22074CB32A70 - 12: 11AA35923D9CCC49AF83DA5D, 9A7E9EED9774C06D1D127D1ADE221893 - 13: E3FE3E1C2CA4E1C61D530AA46F, 0D26F48272F7DAE98C797F0AE5BD5B3E - 14: 6407C7F6DD9E188DB09F584AD32E, A673DD2BB4ACC85983DCD4B5EAC2FB68 - 15: AEFBD570198C05D5B430A275AA82D5, 3A1CB79A7DDB7601C7F72A5B0DA8531D - 16: 40C1B9150E8E09C9483C1CA0CCBDF363, 241FBB631ACEDF77D51594D660BB4981 - 17: AD3F3FA6D431E12D6B41476D7B5DA77C2C, 4C22BF4240AE4235FEAA2D3ED7AAB8B4 - 18: 5EB8D86E7B26064D75E56C42B090A17544E0, 44EBE42984F206FA78D19DFC88AA1EAA - 19: 75D7E5AD5C2D19E21A1931F88229C1456EBFD4, 1F1CF1F832658DB0804D577BB2FCD2AB - 20: F73F1D3F38E8B99898E30FACECEFA40FA933F63B, EFF893CE73B6B30AD144735A5BC759A3 - 21: 452A09F297A013652273C124085FFE03D5034EC331, 9E71970BCD0EC639049F906589B7FFD1 - 22: D7BB98AD11A884CC8BF3F2F52CE9F8C17F8B188C190E, 31496C89519DE6F66113C9BEEB151275 - 23: 97B8305B1D1E02D4D1D8194BC54E4AB394FA8F5C8B2526, 1A153F52C3C67E0DA81B626C159D31A9 - 24: 1542789709D1FD889E7C5820F920126434D5969C4EC3F6AB, 685A03CA342688A70753953AB27CF0BE - 25: BB08A7F815AFA96B96C028EA48D79FF3BA7FFFFFA1902E7822, 98E4377462566EFEE39F65659DEB13CE - 26: DC8EC0B08BCADA829B3663980D66B80A2D51500AFD80EA0F18CC, 58D9C85F9561F59BF264393DA954399B - 27: 477A3B8344DBCC79577C15524F35B45A7FEA72B0561A0CDCB3CD66, 57343CF1432D30FAF8724C5AB3120539 - 28: 3CE2DD2869EDF99ABBB3DABC981B5BF294D6AA29A785F1ED6363D6A5, A939560243DC164D46028133C12B16BD - 29: 72504872BE65F3DE8F0B63BD24AFEED17B195D270AB20ACBEA7E6B0B8A, 4D5D642AEAFE6A2CE8881577FCD7F2B7 - 30: 5B71030C43F551C27183A17D08FC1B9C8AC1829D404B8DA8803FBB09343A, A602A88365B46F19DB240F2C077A0334 - 31: 89C0C85BA495D5F92D91EAC281362F374A0F41C507FD20DF6E05147C8E7208, 7F8994E46CE0548DE8F290303E8F3613 - 32: 5AC62A000B9A80B6B849F3A36E1B512097922F8475D3C6F237C3DAE23A6B8C6A, 346203E5D4775D002A1022D7F42504C1 - -GCM-seed (16 byte key) - 1: 26, 87B72BF4F343FA59CFA40D1091F50FD1 - 2: E80F, BF6A3B3F649E3AD1D07D24326C44365A - 3: 16C93E, 740A57E99296F82515190712B4B56F00 - 4: C403D1FF, B210C95ED48A15A8E78DBECA2831CBC8 - 5: DAF5735AE4, D74ABA53295DAEB4A04842D0F587C0FD - 6: B80ECF00DBBA, 91DD19615D6F71F696C4AE9D388D7266 - 7: 45F170B0D2ADD6, B9FC969B51976A3CE3D8CDD227722A53 - 8: E3EC82041FE3EEDE, 3B82743C9A974E594D53DCF17204CE55 - 9: 15B8E18A9D105E2F2A, F1452F649ADEB08006092347A722497D - 10: BE3E6D03650BC96975E1, BFA2A6EDEF412FAB922E861514475C21 - 11: 0361D6CEEAFBA30C30EE5D, AC97D081314CB9CD24113CF38E9E41FB - 12: 50E4627778596D55D7A508F4, 99A3E41EC4F3B20DE8D217C06C828F23 - 13: E3362B153E59770912C7B12FB2, 9A96E56341834743DDF33156AF411B5E - 14: 3408B88EEB308F20964DAA903AC7, A4D487202ED5EEC5EA4C45792982A821 - 15: A6AAA4ACBFF8AE329618B023C1EB99, 5B67A194B6358D44FA5801B588289DF0 - 16: 4DCF2115BE730CEFA52053E9398EDCA2, 5DE56AA2FFC6FFEAF87225316C74C87B - 17: CFFA74C036CD62DCE15843160B39FD18F2, B0CA9A45CCFDD7A61B1D06E0075610B2 - 18: A68AA4DB35238DCE0D537670D76073ECE5FE, 283B33B1D7B57917B8658B3E957B52A0 - 19: F99FCDF3990405A203BC6F9F7D56DB5B8A3E5C, 0887CB21263AE7178AB02E287D47E2C2 - 20: 363664B0944200D152A48C8C27183D7AEE177A1A, 3043B2927916652091951B9E2104E91B - 21: C1D9BF607F76D69761A9BDBA7D13D9CE4C8E430F7B, D6E7509B620B7E83B3FF7F931020F56C - 22: BB2DC71C8FB4A7A201AF36C4A174AD542D3A34EB2BD6, 2158A10FFA890769882FBB6636F95D1A - 23: 6B478DD22EF941F726D89C1B5654260845DC9140317630, 359297946889A740671BBB0BD2857883 - 24: 3211DA2201F029B1ED2E11187E62D434442D5302E78A3242, 0C1D43B63A4DD329EA11ABE5404E83F4 - 25: E0398E55D8E5146A715FE9E9A74316BBBD69DE747B5F7C3C68, 74FE8E2F10A96CAB8102EE6F0847380B - 26: C404BB08D0BEE8FF032D3EFDE7A15CEE27BA29B43161F0B5E952, 0F21B0E2D83584B65BD7A2F912BF9CEB - 27: C61D97BC584FA3CB0E6CA3E966747D75BE90CE32E4E1DFA2F34CAC, 45D4D5B01D578ADE8EB7B58CDEFB7950 - 28: 2EEC4B1DEF647FAB996C7A5FA5061E5B572E8B1B0BAA0C8B7D01D122, 36E014FF6D8729B2EADF2E0406840B9E - 29: 9753865FB716D470C634974C2056D637F11EB2467274D0024A72E5FDCC, 1E2DEAEBBBA78E0E6000275B7CAEC89C - 30: E9FE40F4C8F4AF2607E41C6BDCAA28EC7241FBC6C8DEF6F36961EFE9B46B, EC5EDD19299A09A39D2F9006093E4CEB - 31: 995FEA1FA6A0B0B141375B12BC9BA18E29229E3D3BA3FF2F67438268B06EAE, 0413AF0B5AAB28C4EE92495ACEAF17B1 - 32: 746961D162BECF915397F718478F5C1DF7A3FB8BD2413A4BF7C0C43314F6E2B1, FED8ACB5288B6ED8E0556D169CAD99B0 - -GCM-camellia (16 byte key) - 1: 13, 0679D1B662AFDDF3ACFCE419B6DA94AC - 2: 26D6, 162A86F8E59F9E6EA5DF0748B890862A - 3: 58767A, EE0B79D3ED4B852EEFA323F8EF9839DE - 4: 0CA5F75E, A8063610439C0AD6631F6CFBE10C2AEE - 5: 5B821141C2, 0568AE410E4EF4C9FD4EC55926FB0300 - 6: ADCDD0B1C7AC, 84B1E359DF762B7E51084FCE1619D632 - 7: 75882A4FF78AF6, A13923C17E9006E06FC10710C3F1FAD0 - 8: C4F2E79246F1CE2C, 27FE18DF274233BF632F91F5C6004C3F - 9: B5F5462F5AFD8333EF, 56EE2A3CCF86F4F5CC6FCFF2638283B7 - 10: FF40C4163E604B0679D7, F813C36C222C5EC2DF7EF51DD12BDA97 - 11: 93FAF62FB742529F2F1034, 2A67CA1A0CD5ECD3EC62E9A303D11B27 - 12: 4C7F377995D7FA5D94E740A9, 0F8B822AA9775F742D5436029263520A - 13: 357A0DE9ED3E1070808B2AFBA4, FFB8426038E07FD7D23E92876B3CF4CA - 14: 281F9A4C95ED6C363A1F00564206, 93D5470EEA15AF8E85019C47728B217F - 15: CBBB9CCCBC78A78CF1F571BF667059, 15C7BFE9E2D25DE73BACE501D9BB5346 - 16: 8A3392119B0B01A9C38C556C6F31AE45, 87886BF5B99CB77FE3B681826286E87B - 17: EC52B385BC9CE88DABC560DA23B3684378, F6B71A19E39723BD4D9DCFF7ADE97796 - 18: DA81EDEBBAD7F6A49D3BC377E5F16272765A, A0D06F71CD2D9947562832E1A83E577C - 19: 2146F272EDB8F46958C01887D92BD3AC9B8A47, B5CC3F66E09AD98AB6BCEAFCDED10CB3 - 20: 3E281F975765DE1DB519696DDEA6F94B462B4717, 515B758DC732EC6CAEEAA4B94C943CF0 - 21: B3A735243E2D508E2EF3066705D0FA37442C8406BA, A8C1CC8EE8D5935FBEEC31B7132977FE - 22: C1272F2CFEE63BA750A7689385ABBCD4D431A99BD2E6, 46511DE41E6ABDBDA73AD854149B03F5 - 23: 3C66C359BA5DC0AB52EB152DBE89AB28767B7E4A6A05E6, DE4BB656C5B0DDE993ED461A0D9C185A - 24: D0248AC2923887E76BAB9FD48D8FB73D93B23E4FA8704C10, 7C120335F1DDBB429431F15E24F64455 - 25: ACFFD738047C794E9C88BB76C2BD8E300CC5F89C2E5505815F, 7D090676F5CD61FE8BB3E20BB1BC8235 - 26: 8B2F83612C9B5870782FDC506FD9E7CF08024C6D126AA0E715AC, 5A72E736892087A91E77FE785200ED68 - 27: DDB64F5869813B94E80975E55BB8B62A23CC8B0DD56357C51A0B2F, FE9B74933C7D6FF5272A0DD90D1F5D71 - 28: 00A21C6C047DB3551368ACA67B45222386A2DD63297CABC780493A73, BEDAED8C4799594FDB40F992CC82B4A2 - 29: 35FE5CD3F9ABC78C3B6E96EF11FB601741710FDA8572CF741EF9E5A522, FE34A91C83C93FE08F7D4EEA3F927415 - 30: 4CEE166BB1E1325C69BFAE06C9422BA735FD5B21EE2D7581E27FC027CDB2, 31D3086C3A0639D79FE08F5DEEB3E81A - 31: 6F575BCEF0FC079F8FA300040AA50AD6CF6F4C92A27E24A210AD32FB1FB0E7, 057E5239A6277E1D96BC277D4EEF5FFA - 32: 5090FF37EF4F163F5B54AEA54DAF1CDAC1125C46A8617CE3D251576BF52143E2, 182FD3ED463E1A6A615F4E25B34CA748 - -GCM-serpent (16 byte key) - 1: 59, 99CC473736142E231C8E2F7983696FC2 - 2: A073, 97EA5DB74235D7C9CF7ACDAAE9A0A7D3 - 3: 7384C2, 0284EC6DBF6EEE7AC038894F0B83E740 - 4: 6BC5F0D5, B1A9E78ABFDA9DAFD93E3E6F10785402 - 5: BCFD59F173, 818144A066F55AAEB713F6936CE79501 - 6: 87DEE1FA7D21, 6694DA4EE26599A6836C7736C5A0A9AA - 7: FA2DD1DEAD1ED2, 9B7F45A3E8C5584CA68C5E8C24073036 - 8: B6AEEC38E4BAE411, CCCB1EBCE819F011241CD295818B4CAE - 9: FE2FD69E73754AB2AB, E08D2FF91E5B08DCCAD050A0F399518C - 10: 409169EB71E9986BA336, E797131B00564D9A4F420FDCA4EDE649 - 11: FECDF3D772D5595FD84330, 232FF07D2945D119058EBE9D0A09C852 - 12: A849518D738FF180519CAC0B, 4E7EE3BBA0442C19A854383255D2A6B0 - 13: C9F9F35975DA8CD50ED16302DA, 7D9F2B224D975EDECC381B78F845EE88 - 14: E5AB8D47CAB6B2AF0110C9C9A3EF, 218A677E10FCD9862B5E6C885D7D01C1 - 15: 82FD0D94DFF3FCFE5C1133F8DBA522, 1930CBD7C04F6B075875C8641FA9E39A - 16: 7EDF3267E7E798C0622F31FC7235B86F, AA472388E03067DBFFED9F8DAC6DD296 - 17: 0A51F0E3D46C47EB677CD33CFE7638D762, A961F757ACCFF8677A9D33D1AB16C7A0 - 18: 2C5F591358F2BC1CE2FB984CA5BD35680EFF, 6D722B6E47DE42FD33D99C2847951724 - 19: 4282489BEA7383C82544969E1BED4201687178, 2B70E41844175DA01170DEF7AE4C677E - 20: 1A1410118E91AF9D670DA0F3A6245410BF4A58C1, 20214C685137D8E642E5040E020103E8 - 21: CA792BD1ABC2F0D671D5A24CF7ED286E45A858C15E, 969B7BB2762B440DA35E97AE4A7D8AF6 - 22: 46035A0BE300E7C6ECF6CFFB9BB0E30C3DA5F33837FA, 0371E1F6A3C71EC92D9A1109539CE20B - 23: D0D19F32DD401A2F26CF7CCC3EEA551F9EF6EBC62B4503, 07AC0EDF5BA03782F655C1864FE03A1C - 24: 0BA2D9B107991D08020537FAAA73E85733FB2E94E5370A91, 3D192C4A6CEFB1E9C01224A83CE56C22 - 25: FD83350D639213E2CD87B17C46A3A68FD4744A0E9132A54408, 76DE3B21C33287DA5F6A6496D8EF0544 - 26: 2AC44A6ACCADB4B3FAA87DA0CA2F0E64435350D5629345862FDD, 9DA24FB432515AF720127024DF7522CB - 27: 3E72B3820ED4B358D78275A33BCC06B378BD1075974B66A7BF7CB8, 9D05B7C4C3A394E40D56F8E48D62D1F8 - 28: 82B4AAAEBEEFBD4960B23E8020733926C4716BDFA6B6DD1A97CA3623, 9D9056217F955B28AC37932A213012E3 - 29: 85B43B381EBF7D4A61BF261DC2E0018FED9A3BFFA5097150624E00BDEA, 128B0ACC4E5342174BB092BEB87B9A30 - 30: 8C06161B3CA867B3EB61A9C71C85EB8586772BD45682FD57B15E03C0423B, A17FE2999ACA23CEF1196E3424A0ED0C - 31: 4331553A74B44F279B6B007E9714322105AE73ADB83A7FBC5A622DDFAFAED6, EB4781C244484C51A155F2A0F78D38FE - 32: 855378D251F29B822948E3788176E96247B7CA292D4DEF383FFD936BE3F7F42B, 6A08DF742301EED938AECC730D187AD2 - -GCM-aria (16 byte key) - 1: 2B, 588D8A797D5CEB2AA14B26B23DE380C4 - 2: 0724, 884B5363AB5AA07AE0C8A410BD079A7E - 3: 44018B, EA3C6C6C053E06CCCF16B6B32855FC66 - 4: A5DB6607, 7F95AAD5C450A5B9DC0F57DEC357AB68 - 5: 9B70EE197C, FA09A2E3CD4BFD3DAFDA909D111F80BC - 6: 0F23E0728B81, 758C5D228EEC2A3BB515E9B36FEA1FDD - 7: 038F215412C0A8, 12F30C9639C93BCC4FCD8F12F182B6E3 - 8: 1D291AAE5E5C8F5D, 2DB28263C719467FAD40E27778EA4641 - 9: E3DE58E2B25B6FAEA8, 64C197A174D8198F349253F60EBDAD81 - 10: C08DE0A91662B88E9D77, 98CDC565E1EC01AFDD1C4161C2C33281 - 11: B6CED209A6E1F65F3DDCD1, 5F6D9CBECF9C803BAA257BE52796C3FE - 12: 4A42C425D548FD9C821D77F5, 321EF78B7C41BCB774EDA7825894579D - 13: 6E9391A1E7F005472C977B2A29, CAF81BD97237A31948048F99AD1E0E2D - 14: 730A2CAA7C6A0FC93F9CE9B3EEB7, A351C84B4C70C3CC231DF1369D89AD69 - 15: FC64D7F6406569814B6C3CBEF0C38B, A0C355049D2E7428BC5E62E276C31A73 - 16: 41F9DF6FA26922ECCB989FE278B07AB7, DB4B01EA6F44397A3FEF8E323B5D60F6 - 17: C408D91E56F31F3914BDA7DBFDF6896195, FEC1FB48EA866788272445CB572190CE - 18: 652BC2873039D4774F41E73338D5D67D912A, 77ED1D0B0EDBA46AB71FE93F00B4B9D7 - 19: B6933250A2EB77EE9B45B7A565A600757505E3, 1185254D942974C01A62F8069F910C27 - 20: 2AD1147927FAE72D54FB7C9972DFDC1D04B22B67, 86D6D4894A8B545937B649924DFDA239 - 21: DFB11C924CAB8478B5F760BB6345394BE8059B93B3, B20124792ABB6CE18C8B7D8A1DDBECD9 - 22: AE9872F53CF169D205684F14686B7D9B2D5026E54E1B, 8F8E9E7020807E13125157698A4DFDDC - 23: 3E5A6D47BE6BF6AC6671BDCEE57357A92EBC0D6D00145B, 30E724C92A189C869D73CB69D3FACF4B - 24: 74E0639EC83808E217A2B81D5B8C25E5E1629E3C8948BD24, 557B10EF8C133072267BA2C646DBAEE7 - 25: CA74B6109BA5591E29AB3405968F383234B18EF12B39AA3151, 670C1911DC49E03AAA0928B15D4F304B - 26: B74784A0C1A346A3307FD9F79361EED8CC99A5AFDEED56701DD8, D513308E7F73B9672C2E47C1DF3CD042 - 27: A66B9C824790EBB44A85711E675242421F40F915FE41188D9B4AE2, 62B6B7EE20E526E2E711A5F163E26686 - 28: 6A2F04E886BD16ACE2B371A3F9724009A934F7777DA52943FF7DF947, 6F8E87E8EF5D5DBABF2AD8655BD8D083 - 29: 1A22F02D01AA1F20C4ADE774A02A91F98EC77C5CBD1FEE5AF11567A6A0, EA8D55F23CF93E4ECF797C7EBF8117CC - 30: E2EA78F8DDEEF6E2A3D296EA54997FEC9E0721926F72AE9097A0EE861085, 40A17EBE8FF9271038FE7624139E3C7B - 31: 2AA70145E304090A0CA4E12EBF238573C8EC8749AD048D957A869E4A4E221A, E6FF72B33CA247D666084CB696085B48 - 32: 05B4268A698F214E5A05BA41C2B010F589EC063372F9C019D311D983EEEC4426, B5A5601BEF292E284F5F73AD9F1343DC - diff --git a/notes/hash_tv.txt b/notes/hash_tv.txt index 3a6600ec..7fd90622 100644 --- a/notes/hash_tv.txt +++ b/notes/hash_tv.txt @@ -2,2451 +2,564 @@ Hash Test Vectors: These are the hashes of nn bytes '00 01 02 03 .. (nn-1)' -Hash: sha512 - 0: CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD47417A81A538327AF927DA3E - 1: B8244D028981D693AF7B456AF8EFA4CAD63D282E19FF14942C246E50D9351D22704A802A71C3580B6370DE4CEB293C324A8423342557D4E5C38438F0E36910EE - 2: 80536C6170DD8626DC081AF148D39EC2FD5D090CC578A76647E7903FD34BD02E4333ECE57B0E24FF116F43429B6FF541834BD40EF0C8D3563ACEF5ED0FD254B8 - 3: 8081DA5F9C1E3D0E1AA16F604D5E5064543CFF5D7BACE2BB312252461E151B3FE0F034EA8DC1DACFF3361A892D625FBE1B614CDA265F87A473C24B0FA1D91DFD - 4: 4EC54B09E2B209DDB9A678522BB451740C513F488CB27A0883630718571745141920036AEBDB78C0B4CD783A4A6EECC937A40C6104E427512D709A634B412F60 - 5: B7B70A0B14D7FA213C6CCD3CBFFC8BB8F8E11A85F1113B0EB26A00208F2B9B3A1DD4AAF39962861E16AB062274342A1CE1F9DBA3654F36FC338245589F296C28 - 6: 2F3831BCCC94CF061BCFA5F8C23C1429D26E3BC6B76EDAD93D9025CB91C903AF6CF9C935DC37193C04C2C66E7D9DE17C358284418218AFEA2160147AAA912F4C - 7: B7C0B47F42F7202BF7D28D6834BEE365FC01CE3F0C8C8DF24B4D940406C2E9C230BA88854E946EBCD786C18C748969FDF012362B7C96400604B6058950FEAAD4 - 8: 8A414C5860CF1BE7BC8531442F69A65EF2ECF0B7CAD9994BCB407097EB74CCB92E93AABD24BDE60331123B4D900684CA7BE6027099D4946BF537F4D6C6DF3D82 - 9: 8B5E5E7FB6530CCE1BFFFD1B1AA338D3282E8483319BF028BB674BB6AEB8200DA389647E3D8631503DC5C487BBFA7D074584493615B036849E0242610EA4758F - 10: 0F89EE1FCB7B0A4F7809D1267A029719004C5A5E5EC323A7C3523A20974F9A3F202F56FADBA4CD9E8D654AB9F2E96DC5C795EA176FA20EDE8D854C342F903533 - 11: 8FFAEE0CCCC162851FAF051AE38667EEFD423C0164C50055F8ADE00AFC3705E3CDEB9900004B0E426CA66AB63AA3B99B075273F44FD37C22A3555C6FD1F37CCB - 12: BA51B2A9DA2F26FE81FC3EE11524255937EC6BEC48835EB437C598C55674E15AA50F88922DE7584332A5E4D24787090CB14DFC3ABDB39C55AEDF6EE108F95354 - 13: B6E30A4016029486F9205C5D141344F885B3DE2468EDFB0B870545F1775CE82597C2A40462F385C957790C20822D9E920EF1AE230878D6B23F221B0182879CCC - 14: 79D76024A31CDBE54CA951D264C46E78F6F5AC5DCD018BAF89AA586333BE82B2D5CA2BC64B99CA2A99D95A984F2DC0D6C07E7C96059DD346BB3296ADE3AA33C0 - 15: 4236736D08F26244E75B51614091CC2C2907D5DD162F8497B14D58D0D954A777C8397549BEE468F30E480252D9B893175DF7D2BF415A128CCC79407D9D5FA536 - 16: DAA295BEED4E2EE94C24015B56AF626B4F21EF9F44F2B3D40FC41C90900A6BF1B4867C43C57CDA54D1B6FD4869B3F23CED5E0BA3C05D0B1680DF4EC7D0762403 - 17: 7B9AE840AAB8BEE45B038CE398D15A8679DB92D0BA46FA67D1B8177986E41EACDE915C6552FC2AF8678425B8BE81B57E0F7EEADCC93B56C58DFC38B4D33BF25D - 18: 0EF6A8C19E19A466DBA3139E2A401175BEB9EE01FB56A8FC11A3E53B345F2327959F6DAACF0CE6121987D2491251DCF550C95F6026F93A1D96A0F4164CB1C642 - 19: D6221AACC88CE14EB7DE0F15F2260EBF4294D9AC3D75B87465EF7AF9570C959077860EBBC5C8153000507CE1E39AED5D007F2286210EFFD26A118966ED15C143 - 20: C9AC4561A7503FAB9C6B71C843AF6911438550BCDF4881EEC18DDA06E4D8B820CCA9521DFA9EF47298CCF6308FE4C4F2F5E34DFEC2ACB78FBDC04D2EF0A5A09E - 21: 73C5D58B05E1E6FCE4299F8D9294681416BC3785F51E402DCEDC0E30C0671DD48321A0248CCC13389A012B52513F1B5BBF820E91EB4F616928183485B4F1EB22 - 22: AB1725C57427DDF93B34AAC62C26F3FF1E49CAD30DD41AE7B5FCE23894245E7E889E0FCA5EC076F247DC7E929D72FB965B45688E57D8CD54212714A17480BE0E - 23: 456F6757A82F0589040996BF88F28E61317C358135A9AB6E96E22F5CA68E2A6438D13D176B01157ACA1FEEDCE3C1A6D5C3A9B1D5A471691917392FB94D0834F7 - 24: 5330241E6F01A49B21AB0D01A9C76AD662E97A325BF8E24C4EB82C6F3B7D2538ADD98F62307F36F900F3934861B80FC9844B761BE15460A1B102C26CF0410E83 - 25: D8DDA603DC21C20A6DD3C6A4F380C297679F035D27BBA82554D02E1F95ECA2EB20496164F96DC4B84B9BB0942B96A3796AFF6125BB9E8711E2674B440176E91A - 26: 81E5A3AF460DD2881353D006AF37478C58AFFF16022441226FB04439783DA920D09FD03E19F45BC82F82735FBF4F2E5F588F11AFDB87B69DB91123CBF05F7F2F - 27: 25AECF7D241EE54E668DDD345582DB777F9F631B9D2432CE4D32119BEA3968D9FA3E184B135364DF62247AB74BA7B86AC3542F63D9F18653D86B9B47944AB96A - 28: 8A372F722A922E29CF5CB22BDABC6D284364F376DA355CA65BE36DAE2FA6F0335744CEFA9089DE55D331AE64E9B2F1037E73608B03B978758A20A012924AB235 - 29: D57C54ABB87AD2D518790B81230DA336F551A0D89A57D0A3CFE2F4ACC55B4B210261CD1482BC436F62D3FC96D1536B82A2E93E9A3DB5CD0F1822EEACF307460C - 30: 6092F1E76F04A5926F6FCD149B18DC9DBE8581BDE6D2A1468145280463472B636C711FF61F5CCA84FD2F044697BD1DD18340B3ED0A131F4BBA35F839A2DD9E0B - 31: 0674A3CDF5F7C18C1B7524C87C36037F3D0267512D11E052F453DBC097CFD52BC331950880CF904656C70758B2E25E21FE2C7E0462E861112A2DC9D0636BBAFC - 32: 3D94EEA49C580AEF816935762BE049559D6D1440DEDE12E6A125F1841FFF8E6FA9D71862A3E5746B571BE3D187B0041046F52EBD850C7CBD5FDE8EE38473B649 - 33: 301F1CD7B25B097AE4C79A97E92BCE359D1289F6754E76B71E7617A06E7783A3CC30F5290209BDA3E6AF239D0DC0F3D1CD4C5E866F4C5C3209EABBD7AAFB8058 - 34: A8C7114B292CC6F46D73824CB073CAEB23EB1ED5EBB37F064A0A76AD452D936D1DF41433FFA337C3F7CD53F5CC00658ED0633252B69DE192E61D9F002B0F133D - 35: D2F92068E07C9AD0572693CF546FE75070E574807C02F5483A31B8CB2105CA55CC6AADAAFE74977F581CE90F43E2AB48260BD7E273D4A83C442EC4871CD88AAC - 36: 1A4133CDFA6CC518387D392814029744D6FA71122EBDFB70059512B89469CDB9D9B5E45900E99E67DBA54B4708036298A94835751EF583149F06AB272B2BA355 - 37: D30DE790B4905717C956A95F60D9ED5948F9E509BA27607E1C5C8FFE35ACD83F719AE04D63364C0BCB72BA529AC79C321ADDFBF7AECF7CA3CAC840A372E6F6CB - 38: A25F5D4BFFBC5F0E3D5CACC3A91870866D8C2D22573556C9B9FA0D24E1D68C55EB42726B1895DF8E5E870DA33755DDBBAC130AF2D96D84DD0D57761D25FDB64F - 39: F44001A74D0B087AF2A143B778DCDEC1554BCE5992C9672E3D0F6704D022CA1E78F087543569CB99D249B820E683138A2DDC5DC178D585167FDD269D17396A89 - 40: 692F36EB114060FD04CD38555025251DF985DDF681A0636FBD290EFEA6FCAC5226859373F3E10E8CB07AB5343547EB0A543C18420D70527D2BBD90040F8DAA52 - 41: 4B1CEF875A025624398CD06DB876EF9AB34FDB1B6A75A07CCB591D9B20EA66E24BAF323911B5CE8B67904945A36C28630B36129939D23D26218610CB049D7AED - 42: DB3E80F11517AB797265829371F245A7A0A384E36A8D43E72852C8D47F8CE37A178475EEF44CE8BDEE5AB054F47EED502E76D49B9F4A5AA392077ED1E6F43EC1 - 43: BD08551AEA7759911B37E9D45748219B47C4EC17A2D2A306D9B8FDF982A9E3106BDC1ACF3F47D383B6D16E85910BBA08128E35EE578E7C55F2E9B9B59F611298 - 44: 3BD8A709DB9A4E0B874B113564B11EAF8270AD1DA3A9236DBB16F58F43285070344962394C2231B3917401924A3F688150B9A9ED3B410547DE3F56450739592C - 45: D0206C8577202C617592B47AE178DA867AC7DAAE4E65B912C771C5FB09585FBD10C36782064E83ACE749BE27045508D544532B628F67DF00A6B7DBA9775D3E06 - 46: 745083E5994158A0FEE4D849012F43A822D19F068AFB327B372A7A8BFE8347E579DD29424EC95319BF75A24B4DB4280D9C16CEBFF5D930D61D34909061A478AE - 47: 3527A5E1E5E5953EC57F309C6513C34405531603372BA0DFD5725E68B9510E5090CC6B317B2E7359D2ABD5ADD353AE1435B85535EB5B0B8F2E09D4DD1BAF3C8B - 48: 622BE417916F1B0E9CE8C952171B11B6D2E2932D6197CC17431B9FFDF03FD0ADB69B08DEDAEBDD0F94812BC2C670C894D65165B31D2F2879532F2C14453E6A0E - 49: C2EBDADE0368F1DEBE44F8E1B77E66BC1C25E7F0FCED7784D615811E2C01192DBC21253E10709D0BEEE746DE6EF93CF65AA39BA29551E11F602ADDD27B196019 - 50: 5ACE0640F0DCB25871E1925F96BAB48162D692BA134C9C7052A37FDFA4895B90AC56C7FB0E7FAF155D147A467839500D980E9D4ED1CC96661177ACF0BA8D4167 - 51: 5D43600C04E52BF6524CDCB9DAD89B1C7563912E7C7E2CA3D34B27B3C1D07D85D35EBB7A65AF0434155AFA3102A580AD557468CC23EEA1E151BFD4EA817FC5B2 - 52: 38D7538AC3E51DDFB6724F57B29A5E46D15A8C08FB29D15FB0681A4315B03FD6747B85D0EB2B9E5FCEC709F365DE08D61A1EB363094BF292B5154671D15D61DA - 53: 2DCE13E5882A31F7396D970AE72E89FB59270D78BF7B4579D0855C4E8BA231D23E5566B77E79CCDC1146762DAAA74F49D82F9EFC0D4FCA891E78F9FF86C61300 - 54: 6D7644DB575C5C238DA02CC4259996CF163A3A3B5ECCC4FC62442DDF01AA05EF0C4EDBE3E6D220DF189C984AA55726A4922EFE004832F2D8887F0B8A9267DB40 - 55: 6856647F269C2EE3D8128F0B25427659D880641EF343300DD3CD4679168F58D6527FDA70B4EBC854E2065E172B7D58C1536992C0810599259BA84A2B40C65414 - 56: 8B12B2F6FE400A51D29656E2B8C42A1BBFE6FCF3E425DA430DB05D1A2DDA14790DEE20FA8B22D8762AFFFE4988A5C98A4430D22A17E41E23D90FA61AB75671A9 - 57: 92CB9F2E4EEE07C7B32B06CF4917FBE54365F55247CC9B5BC4478D9FADA52B07D1C302B3959D0CA9A75A629653EA7C245A8FBBA2A265CDA4EA70AC5A860A6F3D - 58: 23417F93C499DF9EAAF1BFD6A62AADBC711BFE56682943DE5D94E0DAC32F732B763BE28C32AD5F01CB95E5B322AEFF8494B111D7CD8BAB50E7C602695EA6FE42 - 59: 4ADFA8837BB499605D38716F8305FD50255DEA2EC4BF3EEB07560B3C93B5E3725C5A598277A32502CD5C8AF6C88D55756DEB03B69CFC278FFE2BFB3CA202B0F6 - 60: 981A245B249111B4CDCD565AE60C9DEB69FDB552B10C932E8D0635685904203C37CC65D674292405DF24A589682B8AA69BD0E16F666652290BD79AC10E3A9B37 - 61: 15DDF1E434A88F27DEDB8435ED837FE4F1F3BFC5B6FD387A98E93D1C83493D326467C7C53EFEEF158F6B9CC2081267D9761A32A5094399754C0FD62F4C72371A - 62: E08026874830E0B911F5CC51B81599A4DC21204F5C9381CB5A0DA8F452EE99D9FF7590B798805C2743822572E6D2E47C2C1F2D428EF3C28D05297BEDC5CAC4EF - 63: 9DC9C5598E55DC42955695320839788E353F1D7F6BA74DF74C80A8A52F463C0697F57F68835D1418F4CE9B6530CD79BD0F4C6F7E13C93FEB1218C0B65C2C0561 - 64: EE4320EBAF3FDB4F2C832B137200C08E235E0FA7BBD0EB1740C7063BA8A0D151DA77E003398E1714A955D475B05E3E950B639503B452EC185DE4229BC4873949 - 65: 02856CEF735F9ACEC6B9E33F0FBC8F9804D2AA54187F382B8AE842E5D3696C07459AAD2A5AED25EA5E117EB1C7BA35DA6A7A8ADCE9E6AFE3AD79E9FA42D5BBA8 - 66: 371DDB96ED5BE6521379457AE8ADD707A866732B629EE00074904D73858F3FAE827D84E503F3779073490B274E29D644D76154FAB18945222289BCA798BA6438 - 67: 96A693A22256D39A0596802319CB7AF997DB4BFE311577E38F8423DE81C567A96775D063471438F0982EFAA6B75B4AB173D9D3B3D4762030B522FA70DCF3B27A - 68: 7D8AB6155AB31F29740042D82788A69E880FC642E600BEDFC89098B9D2F4F98BC11141FD420870958810295100DE66F50C96E1E4F6489DE98F9BF2D4A9AA2237 - 69: CE561F8F679B4EEB1DC97DB0F72632B9DA1C5B5C0292CBF0662CAD981374BF8C9A0BE1355657FB18196F980E6685D52FE601DD45C6B0FBDE7AA5C9D52E7E5973 - 70: 10164CFD162CABC44C56D76D369096D759954074B0547FA7310C3388F0FB6BB2AA295FAF1E22C44CF59959A37EFE317698BC29AA718D57EBC831A14144F4E48F - 71: 658B337A8FA873C73AE4D19992BBAAD10E1325AFB4DC8B5733F870761429B4243A7982AB375E529C1FBE6339A48F9FB9E8FD6A568F9CAFE640E102B9F398A330 - 72: 4EBDFA0E60E1A3E7FEFB8DB424A5C3A52365F325EC7F51389A4955EE3453BBFC94692DEAC3FF6A4E94105C27D632DF26250FF37314C882FDEB65D53534F8A961 - 73: DFE9D2A6B0AD5DA802D695B3B91745852C97B0283D9A033F04D79D2CAD4FDE50048AC7D82BCF8C402B109E785D39FC9FA0203F7CFC620EE43577688BCF3E69BF - 74: F21869E1EAC3774F3878570AF0DB9A94F464373C1A92E097D180A331C9028A18A68BF4624D8E620B2216B03709F03FB6CD10004F77433ED605B0F771161145C5 - 75: F1F928D322E6852301AD6FC901E91F2156A3CEEFA204044DDA3B4B76A63692DAAC479FFC6D83EEE3BE028A1F651D3520758DD395A1B251E6C261B7CCE86D0481 - 76: 37954BB11B0AAA67F803973DDD2709A73B947D0A5FF8DC46C2D3C6918C87069AD0DF907589F3026A94B071E0F00230F00CF74AFE8010C24E489CC8AF9B8BD646 - 77: 140DB04BF46A194E44F07F6ACEE8326573AA0591F8370A79DF320093C45764A2ABAE531E5A742F496544657FADFEDB7F04D4BD74C347AAE237B5EE59921BA87D - 78: 6D0D30BE796B6E1039739BF24CE26D8DB954D25813F8D7F7444617816F93FC7488B71C69D96D77C65007EF6A2BA313AE0739302395F3D9EAB0244E372AB96961 - 79: 2B92E0D915BC7D56215651BC9F769544C55E2A27080EE726AB14FAC0A43AC51CD378EEA356DFA70EEC3C9146E08E98358C61FFFA3D477CCAC35FD6724A44C23C - 80: 2CED9E743D84F8EC5664A99C6DE2238464E61129B3C856A7FD2CE08B185F4D447A829F287870AC5428114A7234E41A78801C19EA5C6246FEFF961DC6A9B55835 - 81: 4462303D052C70DE76296234B72BFF1AF173E7B63D1CC0E26C518D103BF3BA78D9AF4BA88013192CBADAD83801B8FC29D0838A144AA3CB721AC859EEABF019C0 - 82: 880FEF79B74C109F030F3FA6FCB82DCA034528CCA68A23ED1EE4133C10B3E443434A37C436F079F3F3A922A8547549A39854120723791519DBC166936C239AA3 - 83: 12DE996C9DCE152C83BE6C0E69C66633FC4244B412066A5FE7CEAE27BD4A109FEC95332C60E87DF08A1C714D9D2ECF28A8A81F1CDF8BB3CD2CEF71011BF5A5DC - 84: 748405D18FC05F0AF7F61E0CCDDEFD8055D86826038C77F2AB230F7D97C89D0EF09CE82C4352A7491729C9FD704B279449D0DD7D86CD2FA52EB3B5A582DC2057 - 85: 746653CDC44B4C86B29DE5B28254BE9198C0271249F0690615B05F23AC0456DD66CDDD13D2F22924DF530C78FDFD3699E38E29A550E2739A803FD1FFBEB29E59 - 86: CED0B3E4011A6DA0415C51E37996EBBC5041861FD1584E3D948E1D4DBD7F8673EF93910A10797490DD5C62245EE7EC03D7CE8B8C38FAE21EFAC1AE6056AED143 - 87: FD4BE7DCAC6984196FABA1D88D0FFA9F33CAA29FBAB3E38CD3DDA7FBD94866C944F91B405B3EC613044E4AF11BE7187B15D5AFB4067C54FA09215C3BAC4FF080 - 88: 46836D5A579D5158B9F49D6EBE9A43C9F4A55C768869C3D542BB615FDBAEC8DD34FFCC40288567F8C5E9363852EFF44FEF0EFC0904BE178D3F78EA1B61B9E98A - 89: C05B8745D68BB9647E411E5AA1F924C2C9B96E7DDE71D190A3B8709ACC2856ABFF3C2DBD7093B25F81C6B9883D377E721968632FA4D566F7F72E1109BDEF2D74 - 90: 647A0E15CC4BB5EB3333919CC828D68C5352F1FCACE6964F23FCEB46D0D2408AE896D3319B202EC687F3F9E55126C05705FDB909CD8CAC88304A61B69ABCF65C - 91: 2DD1C321E3CFB58C2E883F5DC3D87F01936ABAB3F1F27648B6AE563333E3852BCCBBCBF4822230E8F0A0DFE32AB6D8DE92A2B8B2271E17DEBEEBF00D83046B75 - 92: 38122D8324807E25DC8A74012CA9C0292222604303CE8B66D7329FEA394D85B7BFBE0F656895EBFD26BD60A3B553A6E3E4003276157B31B3A47779E1633D89D9 - 93: 27FFBA5DD09485E141B659E218D2924AB0392163CDE296D4109F3AEFCDB02241CF0952F0A38E2680D5CFA35363391A324E12519B58C04E8ADF0E9C7A8B6E1712 - 94: 69DA55F3BDBB1C7397CB382B7E8075F615794F6F8453313C0933D33656A3BAB07C42FF977850625B11CA302494497B0EF3A51F3D2EC2E4AECD24BBBC661C6513 - 95: EE1270F6FE6223C19AD4814F0549B54C11AE7B43A8F3418B0F7BAC42BB5B093024DD4F3AB0C9AF5FD2025D50D5B8DC3505D8F754F98AC3237344A7C14FA50815 - 96: AD8ED48E056378B1AFCDC0B3D5D3936AC825F96ABE0953E9BB85B00EC16084A4F0BF12A2B0B73F0A29ECB9841A1DC7F003456016203E891ABA1BEE13FFD19BF0 - 97: F6EB6972CB5FB156FA20A93D8695AE1D9DA8BBDECCADBA81123E7ECBE917596B51E4A6CF9E1458D882B76B33AEA8F3286CC7CA1085F09EB3DB9B9263095339A5 - 98: 40C54D468FE760A7094726B9EF12A98A1F0FE5E7112137ECFB3A88DB04B0758EC581603EFDE3610B1D76AA879EC31933CB6AAFA2DFC559C59BA31425B091FFB1 - 99: DD0324C4DCFF798F024A32A13063A05AF673CB5F8F03E08A0D931406C868A86B5071BA711F6DA80D7FD2F7D3CEE1B7DC12EA456A1EBE4CBCB25ABFB27492390E -100: AF216A7122D29D6A7DC7B89C8B41C111E7C9A00781D4A867A1D75110B48A5A9C92A15D1DC2AEABB53B83BCFFC50F44CFDCAE29DC9984C8C84FEBD0189322BE25 -101: 1FD96E1905B024D5FA883B3BF76C00A0235EE6386EABAE4D9602B5C5E5EA81FE3A1DD0D81BFB0F904ABD4DA7FC71EF7A2BBD0DC6A766902021CEB03D2578B204 -102: 31B75B047B1214B915EC56983E284D14C214D567F149EB467A1A324080AA0D80264ED771E2F91104B2642E9A8312C0C001652CF4E55308A870A77ACFA088D7C0 -103: 59B8D11078C8B65C5DF4F39D1C532BDB9C6E8F2EF121B97DC5BBC29CAF76774A7DDCDCE0F3BCCFFD4779E57D9B23102EF596B8B940480079355CDCF7EC52D47C -104: 3F1702458BA7F28460E84A032BA160430126221AB5320AE028387B60AC53DEBC42FD169A23714AAC3009D52BF9F9485C0878C06A98BB42D1568E7D038234AD23 -105: C8DA7ABB93D370CE8BA6F2B58F91ABBF1302F96799544CCABF52D5D1EAC3318AD4EC853EDC99CF86DF9341D6D794B57B68CD1FBC5E37C03AA10297F9828D5D0B -106: E1680FAF315911FB7588AA2F02D5F96A3FB02F60DC3C93117B97E4F00E2CE6862DB06117A6627B14B11B9E4C61BBEEF09134E1684599A370C61721A3B086942B -107: BAEE728FD37CBE1DAB3FD5A922E58111BFBA9BB47E107909FBDEECCB1812DE27D2D87003FC6F9F67977ED592EBFC734470CD1E907858F555F21EAFD6E64F060D -108: 891AFA38F3094E487BADAEBA012F11D3109EF19B858394EECA4C7F0C2E8FFBB3B88A7105C7D73E7252E67BBA518ABB6A312A7B8A11742D31BF53267CF3B09E5B -109: 6E6E3BE3956224A97F813DE55B3594EC5E2F4A43BAB873D902025699AE58FB43DB71DE1DC159E83F7A7EFFC19CA5A03C1EFFD27B026EE9AAAD92D1D58104D3DC -110: 51F2BA331C24541EFEC042CC66398D388348C4FEDC3F77A4DDFDA39752AE2880C68E0465C15B07ABFD93E16BA635AE7CA7D7E144018ADE57607DE8643992F50B -111: A1A111449B198D9B1F538BAD7F3FC1022B3A5B1A5E90A0BC860DE8512746CBC31599E6C834DE3A3235327AF0B51FF57BF7ACF1974A73014D9C3953812EDC7C8D -112: C5FBD731D19D2AE1180F001BE72C2C1AABA1D7B094B3748880E24593B8E117A750E11C1BD867CC2F96DACE8C8B74ABD2D5C4F236BE444E77D30D1916174070B9 -113: 61B2E77DB697DFE5571FFF3ED06BD60C41E1E7B7C08A80DE01CB16526D9A9A52D690DFBE792278A60F6E2B4C57A97C729773F26E258D2393890C985D645F6715 -114: C02CCA2EE8BED9B4AC74438D4E8B39619347922DDA5CAD2BC3EB9E4CFD4FAF7CC7EB9F6B21ECCA2C55CB60D11EC450390EBCFBA18312E49598D2BC52020DA9F4 -115: E528ABD6C315EADE09A981E4861F6148C9DD4F2FCE0EA54CD3E9796F17033A3751FE9A223AA23CDE0E051A10C2BC27C0298BE97CB87C7110667A115B6D30657C -116: 1B0BF23602D272A06BEC3E86FC675E16DFB067B2AB662181315C45733D191137454BA22713B51478B096DC51D3FC7E9730504324655AE8B7BDFC184118933D36 -117: 12D5EBC3016C77ADCD01F1DE3F792C4230DE67C0B50102E03FBF3B6B80BF913CB66C3E72530C644719003DB2FCB15196803812D89761E0B781E8AFED7268A35D -118: A3527C4E62349394274FB15B30BD95FAC27472E1E521514775D2E667A5480C5367DA6EE526AAC8D0D1226C33EDA1358091C93EC6B1B8464739D25AC4795EF175 -119: 43E497279C2CE805903A33B54B746EA92D607F7C4807986C849823B81097A9099B5896AC7CC66DF3A93EDC8A91B6F3971D6C7F5688DAF635737760BD080E27B3 -120: 9636708964C5FF6600510319E07BF3FCFCB1F4058FEC278EFB677964BA1E140C1632505452F802E99BCF09DA3D456DC3868D149A0788A730E49D239CE7415145 -121: D5D17F592D401CB111FA7C34CF5035BC08EF6B2E0D3E64DDAB08430DEEFC8B9C09C20EB4E8F98D8EBCAC6F09AA2C1DBB7C1B3B2EFE792377CA6600F703643700 -122: 0EA053BBE2E72264AE4F54512C621C733120F777D3CF8FCD8A7CC1ABCAECFB9BE93EE821A15D19467D249A27961E474ABFC433B8C7132321198789D5C2A50896 -123: C64291C217E37E754F6F57C1316FCD8A7C2AC2426E86786FFB69797C0645848CAC41DE345FF90B72FCDE918B7CFAEA4D661687E6F737A088E9296EEF4C3B4F31 -124: DEF8A3CD4921127815F4D1650FBF8B3EF16EF724A38045133749B7359FA68BDE3EEBC9CB5190FB6720EE3D24473286FC046DE0646C6C0042EA1968B48FB6BFBD -125: 6F3581DF30AF789E44C7459356E1C248749B4A5A389759DFF37826BD278D293BA2264BB808A71C453E22A2962DD33A9C03338AD060B3783713EBA8CC8B43E2C2 -126: 2681BF910DDFA680B7204037294D00D0FCAEE84A3747F6E302A16704B3B08EFBDA0E57DBB8E61E92348C8D5FC5A59EAB74C77949A74C7740C30412A9FC65BF34 -127: EAB89674FEAA34E27AEBEEFF3C0A4D70070BB872D5E9F186CF1DBBDEE517B6E35724D629FF025A5B07185E911ADA7E3C8ACF830AA0E4F71777BD2D44F504F7F0 -128: 1DFFD5E3ADB71D45D2245939665521AE001A317A03720A45732BA1900CA3B8351FC5C9B4CA513EBA6F80BC7B1D1FDAD4ABD13491CB824D61B08D8C0E1561B3F7 -129: 1D9DA57FBBDAB09AFB3506AB2D223D06109D65C1C8AD197F50138F714BC4C3F2FE5787922639C680ACAD1C651F955990425954CE2CBA0C5CC83F2667D878EB0F -130: 90272B89212C81B9700897F611F13AC1D291C33A437000C1423336B4D962DD39CE23413160F023963E12F4CCF90D2762B31BFC6818EF865E8A7CBF918A94C1DB -131: 325638D30C9F63D7CDBAA689B7AF8D23826BFE8593B361C7042D3293926146C65C2D6092F20DB5068262359860B3E3D502B6034B9EC8E7253A1FBE4B2007B77C -132: A3FEEC20C69CDAF1936795AEB9052DC525A26F5559045FE458D4B24697E260BDAA45BE8C940A06AE39FDC1F9365F32BAD7DE824FE7722A444E469C7BC198B7C1 -133: 3F80B7BFBFC9D45073FDC2ED93F7C19F01E4D49CB912BD2568F248561F9C9ED1B6762270033D9F421C977F8BB8B4A73F9A99D580C0245DD4F64AD35D68C9847E -134: C292EF04844CD7C3E477C2C2FDDEF46FCEF97E5DEA7955FD4F418C7B4114BA0CA2CA230D0F73A585EAAAEA9277D72B83DB74AC5E887439A225C105B0BFB5A38D -135: 9F0DDAB7986DA54E65EF6B536BB4F7BFF468E0F310803DE28D3908492343E4CAA855B8CAC7409E3A8928E63B9C5D1CAEA7A408ED061809DBAE1AB1A67BA1B926 -136: C58867D309CA48AF74B4D7E49ECED514C89FD433F9DD842F9B50FFAA6C7810BEF35348D00D26DCBE28122BA1CE33D4CD00D09BA76F982A598B8F65790368AE59 -137: C8B1D6B4778932BC21EDDBBE4E48F7711D7E97ED5354DCF11BE98E3110510FB007948C288FD2F7AA71B2E41C86330DBBCA2ED472D15B444828C6DF4282815879 -138: F1C0C057C974E4C27E497EEF52A02963D5957EA02C7E1CFE06423048799AAF74475732A7352220A914BF32EBA6A0B6FF28C77D25CC3CA1AFBDA89870F4EB55D7 -139: 092E121F2C7A2621AA36AA9B040EFE4435DD649E3F336BA82788D57B9B164184F5B5BA644DB4076B46FF9F3A6B9F58D775CE94FEB648A372D960471A663B74E1 -140: 406A5382E9A563E60FDE5CC47F52C6DB86CEE271BD3974AC6E274A1B8C5A7EB369A9B7CD312C301F891D4E3A601A80B9CA06303C53CABD5D3B7834DBC5108470 -141: B2D3EFC2390CF7A1093B93C52B76D0DD74BC277F3D67A85F41635F89E923AEBC960B2BDF8A13860CF3083AC3FBA13D4FE5E426F144FC988554E89ED7A0324748 -142: F1F7100636AEEEC8AE93A2CAF1F4852F192E1EC1AF13697765CACE58FB40B9D9AFC3BBE7E52EDCE649F53C1BAF653CA20E75D3E4AD549D05EB33A68DD11E1898 -143: DB604416DFD0A7DC509DBD2C83D5FEDE5E31D641EE6C14390CF599CDC7D841660AC700D3DE4BE35E07006B724B7DD1BAA21EFC3CA6D346B3B858384FF691F913 -144: 87AE00E496649511C3BF947A65805ADB5D237AE8486CBFF01EBE52D5D5062A99DB3434EC22A37DFDB4CBA1A59AF1FA5825EE3DB2A8524BDEAE07F3264989B85A -145: F442BB697D498F2026FA2A5FFFF9AC5ACA0052F6D200E10805104D91BDFC71A3764CE0277009229B9E7C945222BD7C9085163987E4CED02ACC7420A96B0F9587 -146: 1061588877909CAABFA37D4915EEBD6E517B8D3EFD5660F872019050B3C1465F11FC9B44E72610219F3F5F21772933F101D9D58B5C5F79FD7457F95749BF11D5 -147: FBB4C9BD6821A04CF154DCC7A7507A2C655739F3636B69E8183418E2C33D951DE6BFDF2C3CA603694C44DE44057665EA4835281A2773CB8A84965BE02DF1F3E2 -148: 08D54B05F901FE95EA5B56BA19DF9120C66AD004F98BF8FCBDA9DA0874E64978EFC34877B8224A024DE12D7B926B5D83068E8A704EEF0F738A5061E5F8462F54 -149: B79F53A5117503B5A0316F801B8D448079F38CB90CC39BAFD4DFE169E3C931D622AF7E26835C9AD4DB25C0D6A684E7DAC4B88B475663E05601A99EE9FC8922EC -150: 2209CF6BA43F61D7E579651EBBA0890686A9CDC1E045255494DB0BC732C9512ACBF72158D5738FF63B500AADCCBA000D25A521D41AB4EE6D92D38E8077B79C07 -151: 8236F7CFFA68B49BE5C38A7A1BB67B745430D1511A08EF347383C32AAE1EF4AB2E7F63A20C9D8E5CF2198B32B7BC79B470D36BDF12E7263D669FA4AB8605B75F -152: 228BEFE5788090066D493CF87F75C666BC3C75E0B7BC63E80D38340CF9176251C6E185992B244D4A5B1CECFA42128DAE6EC3ED535AFF039769E364048C442DCF -153: 59171D498BF80731E2E35D0A32DA356419E69B8BAA5B1195D690CD8A5B11542087A007D8DE3FD000BFB03A0408C08E92A0C7712924373FD67A65218E4A4E0F68 -154: 4F94A8F6A136E49069C88DFDEA9361B34D68FFC25724F836CCB021BDB74E0AEE9DDFE80B938A5C12B01F0F1CC49C500FE7709C2090F809D9E0256FC93D93122F -155: DE5E17A668F75866262BBB2089C9DD86775100C77974161DF46BE02A9578855E7C81C77263105C473FD1A2D55483063970C0F643CB25AA4B4AB45A40888F61FB -156: 3314001C825DFD2CD1CE08C746F0BE5C451027F0FAA401431AC84FAEA51553EFD9E0646FB7E9B94CBC672DC98FE9870467C176AA648EC72BF61334B13E479E4E -157: 3EE80B1422E3572B46F7CE5841998BD2B6DF3B591FB5E46851B4D54BF572A17DB5963A04EC6AB98BA07C943475AC088B4D201AFD684F30F45C8037400A7C9510 -158: 3743FE18BD6AEF36887EAB7BEBCE36D5D3B69DFC306B58B1E8C6241E81A9D38425BA991A29C3B07D4F4B9C5CC762B2563C9E5A05B199CEA5833D9FA0062D161A -159: 7F9F71B086CC6D6B63052767CCD6D0349C076289F63483241CE105076B7549B3187897D45D7B5FB2147E54F056530347A1F9265E6F37953B5941272A29E2FAC6 -160: E09CBBFD3DDBB24755CBE8E51C8BFF1BFF36E571EE72E6C99DDA6D507AFE3C562D437E8612B50859AD5CD608424DBE625E0162E6CB7B838F20E7B2F93F40ED91 -161: 2E2F91BD5FEB5C79E98ED97C513E17D2D97B02A844780A0190264773C3040A2CF07FCB0E6424B7A0E88C221BA3824C1906FC1647AB40DC13E2D0CC507CBB6BCE -162: 8D4E87F66B3418105CD5583A92A2D2EBE8824E1F9150CB872FD3DA9C93D382C08065C818E1AF9B25875B142E70676D9A525D901EA2142E42D813A221D21EAEF5 -163: 0518E420BB5680B74367F8CFCF7DD32F3AAE009A0067FEC22456CEAD0832BDC2A60D8AA7B0A2FDCB9072C0F1171772BB665C0B28CD184609F63AD53F89597F9C -164: 247197FBCBEE77B8EAF6358F71A49D784CB43FB44D99910B0599E69B29E31C4019E830F322D5A7117A996BDB4D91E5CF323DB354E902E4DAEE8057B3F78ED5B7 -165: 35A7D806AF0C8167D1505B25EDB565E931864C453BF60AD7B6695035D7584E7714E21F377B35A5F3A69878835617B951977C209F5F3C5967B7DD9BEAA75A7CAB -166: CA9B60EA8DA2D0BBF46742E31AE882F5355688B071883F690AE775C4D949DED8077170F26E89A18CFC251662EA8D1FF43F5A5F28E3FB41ADD741AD2E28341A79 -167: A861DC64C745B0F5D3EFB2773C51981A836024BC420B1FCC564E03006163B491126AD8633FADB6DFCB25C2EF92FD82823FE2C7F1161A78C7766B5E21F96BACB8 -168: 1EE6CA0866F227B27678326FEDA4CBF59934AB0EA2E874E9EA233AA5C67141A05C1B4C950044BB6C9B9D146520C2E3779AE44187BE0DC1CC41FA7F72500B249E -169: DA1032057A25DA7EF987A2D7CF28B927D3DBD956979679F5A6BF4EA20FE1080BD8AF2DC8B1C7E236E7601BD82CFD64DFCA7D03A03087475ADD57EADFFEC2CA85 -170: 22E41325474C7C7EE980314D7738947E9CE3A970B2D28BCD69D545D5E795ED50A5A1839021645D000CD4779E181A65974171C15B9B08B349205B87C150688839 -171: 5FC5AD1B8B7622C4D17CCE23679FC7E0CCEBA00C1FD7178245206F866A6BB198F26A05A3D429E2C508DAAC6D0F698FAE6C0DE7FF971EACEEE84813110672F3AB -172: 2264F674AFC9743A46180CE4E4AA6A2BB33D6BF2F62AA14648179400806D718DEE8FE57DA48D88DF5D57B42087BB2FA62F833BFF87B6678606C6336CBCF34B3F -173: 65E9D1187801C74FC23C4F19698F6B93405C681B93A80D23D427D9F2CBFE63F7E2959B2AAD6CD7EF6E987A5FFD585E1BE8E314A1D502FAE80215C5331F8FFC2B -174: E0436B17C2BB096B08698F4CB448287D69322C34814776E0B1B21486A2D5B6906889A5B198FDDF699AB285BDF58783DE7913075F86ADA977DD35FD09AF336E21 -175: 857BE6485722B4BE445B72C7A15A1D0BEE6C7FB2AD541C2B4F0035DFA1EEAA10D4F0BA5A124F985DEFA53D0A0554BB258B2832BC2CB5B7787D812E96A55A93DC -176: 7B2298654B95CD00307D8D983A0079CCCFD89E5788180CAF352B6C965B9BB5153C9DE25C4A0CBB5E578859660696C887280EA378A2E02B7C7F9E6CC635509EBD -177: C7ADECC928EF065C263A97A273CE8CB30485BFC035F2FC02C78AE2AC6B7F7ED20E93897C0994CAB8D584EEF9DD475AA1613159A0C862FF179C67120F6B4C72C7 -178: 041A03CCE6696653ED5F367749AE1AF3C2654E8A9C0E70E467261E60023876C7271CAE545D114C32D38DA75389525CF0CF1FC0FA9A481ECF43FA0B1F61B868F7 -179: E652E4A88EC1A9C4678F8CFDBFB1D758774600255165E2B4DC15F61C18B9ADE14C5ACE7E8AE72D3062B7F1787583C55B14B347F642344E71D6E00FD6F4C56808 -180: 903675FD8C70BEBE9FD0DADAB17A638A2DD8089AE63114E36D28F4C75D951D75B0BCAB5247803551862720713AB45A932DBE141E48E9BF3ED9E76201577DDD43 -181: 6E61016D474D2AC2984E4EAD44ED82B7129B0B7FF0B9AAF5F45CA68B0529A736B846626CEBCAB9E7CE374D744E7A09C51BBBC746D989806F1A00703A002542FA -182: 20085D4717A204E896F10C5F7E1FD429C9AF848FFF608A2C46D3738EE4FFB944381880A7A455FEC6A1A21754D9ECCF3F1390EA22EC17FCFECE2B86E361784045 -183: 37216CA069259BA3244DE3933A3AD5F35712F0AB7B9C81D64000F0B91DD4232B53748B704E7ED0DD682A77D84BAC1B943D2FF7A3DBF5FE33DF455DDB10D11632 -184: 1F2467A57006D96FDC75A8BDAF98907AE72AD330C0418B06513C33D86DDB800AB6A51738DBFDF1C44676038C094EB5F309B5B590EAAADA4DB09FE7590FF04888 -185: C45893F92AC3E3AA3BC86A9ED659797A7C7DB949A66552ABD046DA2AA7DA9E52FF8BA2673CB44B2CB0481D599EC70020B6D5079296F2C19DB162DC8CCD64BAFD -186: 9919574ADE9B8640BB0EF45F98D1DB6FB7242C433D86CF6D4BD67AD14FF15D74A13F796429E312BAC581552E6597BAD2792F31B2488ED300C6118891ADEE9FB1 -187: 034A92D00A172A5F0CE717FC38AB8D68019F500493899401B563845EB604ABE0907749AA830F91B53AA7C89DFFF86664F8B123AFF4721D790A58CC22F36A560C -188: 54714E69859C60B07C7FE34859C855A37A82204D723F1A695F78D7765CE906D109FA6144EBA9E7E7A7D8343A99495E72D160DD468BEFB794D97659B8E2D8F1CE -189: D6CA476F7E68095DFCEF4338BD6466FCA90DF78A17DE9E29111D4645B0DAA0C6E98F156C0EBF9134BC28EF9E0EA67E6D839027DD5CB084E9EBA899DD3413E222 -190: 86EB8C026D6BF090636F01F623CD98B960D08E521E44697F364BC1AE1655B9AD6FC3EA38C929AC9A244D18E697342594F3E7DFE605954579AE4042CA69E65AC3 -191: 1F63EE615E9B809E3661C77B5029C78A92DC4BE3CC4DFD8BBE78DC7B7D990BC717238004969A8B854CBA04B4D9B30AA1A1964264C47F23D9BCDF45C74FFFD918 -192: 0351F475C711D068BE7B0395D65343B5E249FEAA3C3F3B6B87100C50306EF0340F60EF36233F0E6287057EF7BE8634BFC4D46B49E4A8F2CC4839F42F486A16FB -193: 16645F9C0ABBDA602B7436DE3B1C55AAFD1E844057D51EF80A96CBC2FAFF6E3B2706B45069C90A52D779E101793EAF4C9AE85CAD0A5A394164F0BF34C189A2A0 -194: 821E46199F4FEBD9C118D49B1CE9FFE953113EB6E4E33DA9E39C676399A0B3F792C2990A9F75D729E58EF750857C07336526631CBAA5EE0643699C8E7B7EEA13 -195: 64CB83ABF2BB0A94451F2B9C3EDD76E4A15F9D1F9EE32C0607F5E0951084377E484A8259B3C64428293396F78E6674CC3C027CED1BE12F5671D328D131740770 -196: CCC1A68114DF54BF467EC49CB15CE381EBA7E6FF06A93EFC88F442F8A35827D5DC6494A4F39E8423167CC1C3269A3EE6AE68825FE3E2E40EAFB75C8D878FF88B -197: 94D38693F1B1A8F1013544419C5B3BA0CD79B72478A91CF3AD325E4C3CDCE092AB667572233A4F8DFF132401968BC74C553AEEE96D530CA4E5F6D427F9D2C422 -198: EB080E256FA9A5D51C3DF577509B877563958704C0F1DB645F75CE24005D3B12503BDC26FD3A66E8F6882D3491428A4932EED6F5F58532FEAF521BA5FE05B70C -199: 9A43D7D0C42D7B5409963339C9D9805BA59ED8A63DB144165A3C759EB9F5D756E6288308DD2FE460CC50DE26E1A1C1747AA165FE6C8A1FD5B0F7CB1373E28CAC -200: 986058E9895E2C2AB8F9E8CBDF801DB12A44842A56A91D5A4E87B1FC98B293722C4664142E42C3C551FF898646268CD92B84ED230B8C94BED7798D4F27CD7465 -201: 9FCCC4EEF7571A2BEEE06981856228CEDAF3BD412E777F4AE8524B81C373FDBC210795C1E788EE7081BA42EC3FAFACCF2F386A9096AC719E6565B4E384E390E2 -202: E4E8BF0BF40249236FB88C442E6668E3067ED6001189053A3A81EB755798911258E25CACF7282811DD5E5147811844C4B5BF52FC24A6862BCAF9407F2E38EF5D -203: 317ECED703044C1BCE944DDA7114DD1E36244DF6A533790FAADBD0B8DDF1AC0D198B593F0479A038198F4B94AA6ED294168FE0EE800C02E769EE78ED45249945 -204: F5FA1EDDE359173067E463107FCDF00EF227CBBA0EC5EA02EBBABE2C79B12E793B98FD3A90A72BC26240D994F53DED65FE22C6FE87EAFD01B8478D1E8569A882 -205: 6323E2A8E380CE86433D5B8FCC5E02FABA4ED7F9CE5BD194F7CBFA36F65844B61A7BDF8F131CB4B28C56ACFDB99CD84830557C571FD369650B4608376BBE4FDC -206: DC6BDB69D1C6111E280F993635BB59CD6E7B189166DE593B71E194C5F218D67B00EBE0D028E944976D6538DE410C4D86A2B6F272BB94FFA590208C644F99240F -207: 2428590D2043634FB10268435EA90ABD082D45317D2C54D065529F15E180438AB18FE4CCC9129584804EB04EA1CFF646FA881878520BC01AFF392B6D7D9C0369 -208: 1A29341BEF679E5351911809DA190BAB8E665A9375BC2D477742176A70A6BE8ACE4A35645BF8DB97AB9BBAF1F0313004AF8B4CF10ADB26AC0198AB1D45D05C46 -209: 0EF4FCF3B2010921C58056B2BA367B4C09F5325E6AE9AD732AB277281D4BA797A847B1C6A74D81523DEA163AB0E556FB5102C14E8CD94AFBAC0AB0A921BF1A25 -210: 73C65AF2A53E8860BEE63AF0BD8A457B0AC8D3C5D243FBB1BC3D67624727CC175F3CA133B26342C3401D75DCDDDAD9A692D9A2B1264E90CFFD4BB9E6E775DE15 -211: 18D3DE049396E2EA541E15C31C0EF0E0BD90CCC6CA35663856B94F6F18160D616667C55F3ADC1B33E749F60BE50514A4F3BE48ABE2E18FCA10F85ED0266972D5 -212: 34DED45ED26FE224E0C5A66A193C11A2CC0786E61D421034B3BB16175019C95453F20BDE865DEEAC5C2BB5C86544641482B51C4E61D9DDACC238D050CFC35776 -213: 025D211B55974BAF086B139D8FA1AEA75B627CE1AB894D52F8769874557BE5944D27FD4BA3606266BC7F50D1734436C53D4555A1D2DE0DD2AC51D7F2FA373867 -214: 08CD521B1F13440D57001F30BDA0029FD8AA17FF26AFECEFA2CB7EE1812FC79A694ACD0BDA98184154B72FB7CE305FF4897F466CBB3972B4863FC88B3DA52C28 -215: BA3BF464071BDF124034CD122451D3374AACFBBC916C858B93E191006235F4D741564BA1DE70372269C122D360121DD3D427853BA76C6B450BB46F4156EA7524 -216: CB0B3250639B4ED947BE0C83EEF67D370DE76AB901F607F68FBF1BF8ADA15984DDA7BECAA4D7FDD55FBFE479EEE3F5ECC9CDA7BAEDC9DB7D35DC227411DCF20E -217: 8AFA4024BD96BD50323AFDCF92A7F3E7BFB4C927108CF81C01FD378F61C55D850020DBEB88C6528B8FC141C37EA4852481C14902878AFDE51A7F1EA1612D0324 -218: 27057269EEB73333A1A8059D6C9D6FD5AC89EC26500F6F9838CACEC20E93F1713CF5569E820BD80969547D77E56AB0CBF57F03182EF45AC8BDDE114470C6DDEA -219: C79C3D4A4608C7CB4A3D0C14B28CBB96364F44DD8651F36D908AE502E547AD7AD5DFC10DA26CA26C6D9E51CD40F6D7F1BEA0A03358967D867A97333DA8ADF3AF -220: 9DC3B1EF11D85FF8A57330FDF91D5B5AB142FB89A72D880DAE476E020755C2F3B4CA58C9ED36239E8807C059BD66F826EC517B7A44187E7216E48B683B567076 -221: D11A97FB7B967E90C2D39EF42EBE49327CD58EA6977C84275B01698E322DD97024A40FC3EEDD96207310708F737E81B79659A6C7202E96BE7AA34D18D4026F63 -222: C9BD62C0FCE47736ADCD9275B46845E4ECA23B73678693FEB8E21909EB8405D4B057AF2AFFD7E667E047A07E6ACCADC2A58D7360C17689769DB009F0A7795560 -223: 7FAFE6ABE7CB8C109B18A14BC4FC2E4FFEADD55A43AE7DFC58D89B9CCEBB4467FE4CC163FF6EB16C8C71B8EFF12E7891D11D3DA2C6DFA8152DEC52B232267B6B -224: AEC37B2A1157708142BDACFE77E5204174F539D86A12730BBEF6386FCA098AFF2A5C31EA1AB21D3B4537531DDEB27CA9DAEA22F5CC8C9956B2F2595F53BB931C -225: 6B005CC923D9AFF56334CFC7A5E3ECD70E97C4247EB372A3180E7DC5BEBE676E72E2FDFACB74277B70E15D871819626F46661285DB04B3F825C49EEF42391B5E -226: 509B5C993CDF61F8F507A84BBD7D6D7AB090970927400043D39E5F47DC23AC289F5BBF9D3246EDB174D9C5D72BA7A066DC13171EC15FF9508911464F8730D395 -227: 00A05302C3A60E58C4C52847F47379212A918060931A72BC660D88E7BF5599DF6C38DE92452B4823B4725BA3EEE866235CCF4D5903E91714CAA230C6D6EEBE45 -228: C4FA5EFAA31CA205A732FCD5DEBED53C09A4F30C5BD9ADF27F8C1DCD4B2730925BB6AF176E2E680B2BE325F7DDEFBC9EE6C1CBC4F0426ADCB5CBF18D1437EE6C -229: D125006B8107FA63C375A79AAA0EBE82017372B7CC65C3157CE078DDBDAEE8C569BB84FD8490F2D66D15FE73C6881245761AB2B1D4F056637ECA70641745CDA4 -230: 01C7D098DCE4E40A69DE14682587FF2A40BAF9833BDCC6413AB54DB0E64262F290D584CD5B21C6558682C50E1E27BF53A18A16D72ABDE878C3522156C9F04DE3 -231: E863DA51CAE09500F589BE05CAAD5788587E2017907444D76F547D6F30632AC658EEB8585733BBB815D2E19EA046369ED3B81AA773FBFFAC316162389E015A71 -232: FD8232F7B79BDF9CC52FF0D5DE1C565E9D659BF19769096895D182A88028C1CDB7387DD240128A7ECFD2708EBA7E9E3C676D6E2A036E1B993940F5CCDF1A736A -233: 3BF8572CDC7B825CE7F3222A3DB87F1C52FBD1A8229B957ACFEF2047C560567483C479603A3C0B0F1B2DD265BEC257D1A32C651508D7A4DF501BC015657DCAC0 -234: 23FC530B031136A17B8B2FCB55046DE7271312EE3E77851FBDB05F78A294815CB2169079168E07647A2BD5D05C1BC2B1EF1B64B929DAA1F9CE723D448C936FEC -235: 83D10057C7FB494FAAD289B4FE5F093DB2A0C7D79A298173DA735CD5063232BF9E5327A7B4AA795C99F323045790B554476F37EB9D04FE3DF40C047E4113A720 -236: 0AA201EDF4124F421D4515554A1A642E3B9D18C70E09E83A886D6F0CAB0750D9BA1FFEB9C587F3ACAB0D8B9C1D83D789102F0E2A6CFF885C50F485929DF4602D -237: B85CC52981751513B917F58305AFFDDC7D901CB3BB1D1BF5DAB058DEC9B8CDCD2DAE543D73EC6AE0889C9D785F9178D207059D994E1C80706EB28AE65AAA100C -238: 068FED72E55444AE108EEFBDD59A96DA4AEA3D81A6642742C38BBD4EAAEDA6EE21FB8702C2F95152F1F997A5F40F06C54619481F2EC343AD33400913D6FDB4FB -239: CB4C7FD522756D5781AD3A4F590A1D862906B960E7720136CB3FB36B563CAA1EA5689134291FA79C80CCC2B4092B41DF32EBDCB36DBE79DB483440228C1622A8 -240: 6C48466C9F6C07E4AB762C696B7EEB35CFE236FCA73683E5FAB873AC3489B4D2EB3D7AFCCE7E8165DBBF37ADED3B5B0C889C0B7E0F1790A8330D8677429D91A5 -241: 4F663484EFCA758D670147758A5D4D9E5933FE22C0A1DC01F954738FF8310A6515B3EC42094449075ED678C55EE001A4FB91B1081DFAE6AB83860B7B4CC7B4AB -242: 81A70404857420638D72672A2DF5A49D52B9F9F38B385D8C5129D6A2B82A682CFEAFE6509266E4B00F6B6A07341C2F64E4D4F2152583ED143E3DCFB14C1C216F -243: 31F655A1334E1A45584F12A22E03B09E3C69ED0E1D0FD573AD0D56F9C86862299E333ABE78590E97EEAA5C2FB14DC9F34FEF6DDAF6E7A9BFBF68CA6631195CE5 -244: B62C5102F97E5C4D7554790A4CF53A58D3EF44C83142D6E009BD1F6FC8F3A19AA1B89DA8DD9BD1310827A5BF662BE7CAC750C48E6ED91313E940D7D9E5EB9C22 -245: 380023C0BAC4C9524FF6778BE80CDF195E36FCF460E8CF1BF04E5C2FE08E38C35F183FBCDC3726FF26423F351C507279F6258F2319EA1403B6C8A3DCB384AC7F -246: 473FC167C7C4BC40B17DA039EE09FF3DE884879557E40C52C1981AC419CE021A090BBAE014822D05714077008988D74FF151C927AA43E88CD63FF2CCD2012AF4 -247: 006086E61959B1D66C72E754427EAD5E1D6C02D8409F5C32B2F5AE448F54682B504A1ABC0346CCF39BF66A8C7B69081E886B47A7D0B02291462391C95351EE40 -248: 3828B2ED548CFD0B74BB34A1FEAE030E267222198D7E387E7FE3ED503905A25D4C3301A9A47E78372F685B05847062476C507708CDD75580ADB579E4CDC79AA0 -249: C26A7D5BB103EDFEAE2F1201BE58AAC127F69AE378DB04156074E991745D4AA5AAB3BA064407DFDA8D34E573B7EC1F9F37CEF01ADC17FAF393C262A09F2C4736 -250: DCF82307195035A668097514FF1A10E0BF0E802B4945A702D2E17AF6DE1D3D9BA49616DFD16D802054B5219CA37884385E87A713B4EF5C7FCB69661C7F56D5E3 -251: 46049EA0DFA5C49429E15626AF4AF2CE0A9DD2F308B99BA6E6E3F3088250A146870FD0B53228D5A1F1BF9859480E1B7A3D3DA180AEF4D5D41BD2951C4E19426C -252: C0A1FB6C0A65A0D1AF46A5FE86C8A88E8A86F83E36317F435542927C98E74833C887CA3AB5E792CE5E3E21CC6C6AF437349F5A66FAFC4DA79742491C643901F9 -253: DCDD20CD47B7C7D011E9DF7855B08336BD5007C4435208BD3B914D7E503B8399164A155697E68A1B88A0600BDCF847A114D98FB773C81FEC817B92057A6998A9 -254: E2DA07644DAA73B66C1B6FBCDAE7FF28E3B9024F0BC5408FE02C18E3744CF9BD6DD54EA7BFA1F6F3A81C8560FB938FDFF9A38A29853A3A819B58D10213A290EC -255: 15025C9D135861FF5A549DF0BFD6C398FD126613496D4E97627651E68B7B1F80407F187D7978464F0F78BFEEA787600FAAEBBE991EDDB60671CD0CE874F0A744 -256: 1E7B80BC8EDC552C8FEEB2780E111477E5BC70465FAC1A77B29B35980C3F0CE4A036A6C9462036824BD56801E62AF7E9FEBA5C22ED8A5AF877BF7DE117DCAC6D +Hash: tiger + 0: 3293AC630C13F0245F92BBB1766E16167A4E58492DDE73F3 + 1: 5D9ED00A030E638BDB753A6A24FB900E5A63B8E73E6C25B6 + 2: 65B0E1EA36CA17EDE2F055E67EAD67B1C282A11A5BA3A8E0 + 3: AB7FB8D21CE3D8D9BB5F1AF1F2FA0D3C277906160DB8D226 + 4: FE2E9D43F74B199D91B9291D73CCFCA0BEA5F068FBA244FF + 5: 3DF6D672FE9DAAB21523EB04705D8A8B72B78B00AD465D1C + 6: E05724353FE29957C3E8DEBAA21D0C2DD49CCA22191D5AD3 + 7: 4056DDBF82AE74AB56720DEAF079ACA2F076ED046D044DE5 + 8: 801FB9BE1A9AC7337A81345B3845E4E7C13AF1FBADB73723 + 9: 430156547A82492CA859385304748F65F2D4A7E2664AE2B1 + 10: FC435137CD652D720A11EDF47ABE4680BA4AD5BD810C9835 + 11: 20A8143DF47F5715FA0905FE6F9D1D2B5B2D4E26FA98930B + 12: E4A2063019FBC034DEB01E2A95296042319CBC039DA69A91 + 13: B5F0FA570C4CD69A3C68448BE42C865BDF77ED68B93875E7 + 14: 802BE6EA2CE86A0B371F2354944B19CB3231AF7FB4F00FF8 + 15: D7C08863B5E5E3D69B5404A116315A698E128EBAF8636B70 + 16: 5C5288CB0E4E533056BA5293440D9BE6F3C461233BF1ED51 + 17: 88D3A94F3820E4087DA69D8BBE2CF415466063709C450C4D + 18: C07B4B155F9F75805D9D087087FCDD28D08A9D022192447E + 19: EE473E569FF3E092CF8996B31CE665EA7D61520D42E27395 + 20: E13DAE8098139CFCEA755D2060F107E3C7581EDF9F4B3B85 + 21: B48A9C09F26B379AA28FBC750B50CEF69D0D0EE37FF765F7 + 22: 574A01456373014F4179CDA14541E2E3C5A1CDDA9F9D071C + 23: F2E2831E5BB4AF05914C4BA61BB8D600D1EF071C5DF02269 + 24: B7808A5B6258CBE718EDA938978C69D3FFC45A222E9DBF4C + 25: D8E4E076DDE78950D51EAC9F97D2D1916A0910465D45A55C + 26: 4EDECFAAE1DE98B7E056E64CA24003422BBE6F048129B24C + 27: 0DE283B5A4953EAAEC6F3FDE50D7875C8EE57FA79BDC70FC + 28: ECDD4BA1936DB9E6F83E2BD7F39D23927A1A17B2D52A8649 + 29: BE11893460E49659F7DF3FB3BD5E3E9A319F85FD3496E26C + 30: AEC0DA0F2CC0646325CC03319A0E080F68B46B33F81920D6 + 31: 8824FD39984F6A52FFFF19016E27C594921452086373F2EE + 32: 8B6592AFBB02E227AA451B5CFDC821B84245D34B96BF4F13 + 33: 960DF9C349EC6619FF37E3F0F4832E19CC6A4E4D68962651 + 34: F4E2B7AA72BC7D6E0CF6DA1094BEEFAA9C55610327C62900 + 35: 05FD1B80CA4C7C14FE5BF0ACBD0EA3DAE498DC391DCF2277 + 36: C5E95F953898C68355B591507BB714F0E5DAB9989D083900 + 37: B2D4E286CF7EA8AB6ECD650C9E48CA23497EADE55485DB1E + 38: 9D51657E11C54FFDF205DBB435097A2BC6F93C4BE8D6180B + 39: 3C6AE3911356A343AE3113735F07FCFB5E046ACD47B00FBB + 40: 664342CDECC825ED340A7FFE2E57107DD0B5F24C24B2C3F0 + 41: 4EF7FCA13CE684D81DE4F566D2897CEB407FBB3DDE81FD64 + 42: 54689FECED63F297B13CD494B85E686680F4F78DE7EC81D5 + 43: AF434BDBDC7EF90BE03E40A033F16E8A57B41840E1E8AB59 + 44: A32DB678F44905C18968F5D898CA7992EBE2E4CC3318B96C + 45: DEE9D519A12ACFB8A0935A368D6E6C75EEEEE6F2B0D5D191 + 46: CBC74863472D1C9D23C526F4908BD4D4234E00CBCC99A9E9 + 47: 6C228A1D4871E802E035C9BB16C5187354841FB6BE3C69B6 + 48: CAA755C55AA869E633CB3C6D93A561944AC7418154E2B0F0 + 49: A6835F7C0C6CA8F4A45787BAFA77478AE9ADDBEFBC3052D3 + 50: E406755957EC21BA6A64B5D3AAF31749CF98DF92F1B1FFE0 + 51: 0C2D4A44A803DBA99B7A467553C9293B46A538558BD77DD4 + 52: F04F011B09D275A185528CC040EB719649C8471A87B259B3 + 53: 3DA8B57FF52FCAE7C32636EC6C80708189CED8113C5CDE1E + 54: 6C6C88B8E18DF5CB22EDB61A2D3ED74741A708BC46576FB7 + 55: 2D48EE2BF85DE234754BECF3C6F5B0E62988B5BF24AEA5BB + 56: 0D17702DDCA078ED1CC51B95DF29EA1053CE97F69395C613 + 57: 9D8C2AD327DE43D5782D5F20881F4A8C433BA19AFC8C15AD + 58: 227BA419B760D9D10DBB09585EDD475AC2734FD4539F8275 + 59: 2F5220A828EF94E327BD51D4DF5C58609F8A93B9FE01FFF6 + 60: 0EED9F91E1A33A50B8E913DBA0B5E248D263E1FC72C6A449 + 61: 766B707E999FF3C51EE01168513BA0DCEFEAB222DD1F69F6 + 62: 85E6710694E7C36A2340DA6A371C0560450F3D44D35AD98C + 63: D401F9B13D39C24477C0AE6971C705C63C067F29508C29C9 + 64: 212DF89C57155270344ACCB19027B0B26B104FA0FBBE0FE4 + 65: 3BEDE767AA4A7507DBEFF83D1BC33F67EBA9C64945066227 + 66: 79FED1FB9F17C4980108E8605C10D9E176AC8FE4F6A65064 + 67: 48D9B7622AB7F8968ED926255F78E8CE461E4C9162FFE8B7 + 68: 6638C83837297B3F53B0F824C087D9A0B8D9FC6265683B8F + 69: 174421CF6D331FF51924F8946E8244555C9020D38E31B6DB + 70: 03E42AFB5FFF9B9C3794A3DBEC99FA7E3F7305EF07BD29EF + 71: CCAFC68D4B3ED889DC9F28CB9225808A40AA8E0D5CA343FF + 72: E824F93B4022011886EFC54539D4D5D51863ADA329FB4E22 + 73: 7CF0DC01B326687530F42040BA0D0CE93174455E8A990D14 + 74: 7A8E619479F4F5C418EC041806850E6723CA56AFBC3D32CC + 75: 083C5CA90F4B296C42040559C8296149D4EEBAB5EF2CB82D + 76: 3581B7AC32FA8A0986FD14F277FB106E112B92D18CD689BD + 77: 258E822D9CC1ECA8B55D925BA361BA2D9FC27AF181F138B4 + 78: A86C1E88A64515FA281A462D467458231494F16E835DF873 + 79: 76E7F06FE9B8B388DB012F8B4BE2FB343F95913EDDE47A27 + 80: 00278B4E5690E729EC7118B5BF63C9D1EB1268960893CA75 + 81: 8DE70E64A31BA1AF4F5C23CF774CCA32FE952D76C3FDD1B7 + 82: BBEA72C840749BABAF1415FEAC343411B89515B87848A09A + 83: C6C3CCAC1B338DF117A61ECF9A280E9BA709784C72B76771 + 84: AE9813EF4429EAE73EA9FDB5E23D263AF1BB87928CF5F048 + 85: 68647CD7BFFB8E530D28C86685A8D2F657EE4CD64EDD7E66 + 86: AA8C35B0E746AF56435F6C711AD0423966EA459087409713 + 87: AAD5C0D5E980B29BC88985C544717B81F58CDB923A3468E0 + 88: F60929D14781DE44EA607AAFC0D25FA1B6EF3C6AA0F8B3D7 + 89: C48087DC75EC43A54A593F24E1B359BB75C581A65C3170D0 + 90: 11D1372FBDFD9FF514611AB20D31BA62F18856C8D6AE3AD7 + 91: F2A8076B9017EDADEED41F409C9E32EB3BC090EAE89F855D + 92: 702FA47E5BD35E344B5B87C0082106337206CADD3D4D5014 + 93: B9E03FED752A560C3B0365EDF5BFC4DC7EAC5E4BBB93738D + 94: 3C84C52BF51077A5819F56E5A5C1C06209181579393220C7 + 95: F8ECCA28A525594E138B55C06617A063DF74FE3469D98381 + 96: 1081C3BAEEC0ADF4980C2EA6593B0906DCBEDE4805754774 + 97: B5152E39DE0BFE8982D783FC4F0CB7160EB2D69F6F3B3E5B + 98: 6A6B760BFB1965C72AC793F9C02FA21B0F1C34BD2640BB6B + 99: 1E6DCBFA8BA8D96C29101768A6A39433D5AD5A50E0970730 +100: 733222D3A033351FAFD68C5CE8A4D833BA7420D44103CB6B +101: E4CD7DA59B215F1DEAA8FBBA850F2C1A7F4C3D495FE6804A +102: 7BE78C790713545754D4C78A9318ACA4AA058C5C23540131 +103: B71C3809A504BE2F57AE9E25BDCC3921DC665C65289EA55A +104: 2B8CA39977535EB692EFBF0DECDA8971A8604F7FCBAE75DD +105: 3CC48B51E4C5DE4F0C2ABE0BE6EE4B63CC564A87C01943CD +106: 157ACDF7B59FC25966F9783207554364882840E7251ED6C1 +107: DEA1CFAECF18D3611CCD0517131A16DDBC97A12902DD8BAB +108: 2AD2E990BCF6481284DF44B961632687C2E64DFAE2AE16C2 +109: 838F3A3B28A50A12B5707490A66080DCFA0230E583B6EB14 +110: C8B20315121CDFB3A91BC0EDF11886F283CF6C480F498627 +111: 2B0FB04F100BE9AD51B7D64C76651BAB4B7D31D1D9195711 +112: B6495B6256FF464EC409A4098B622E8BDBB1003411854FD7 +113: 1741A789472E20E1CC89869A2477E4F2807C22182EA5B221 +114: 07ADC82CB3F27389A12B6B9C2B268BDDFD1D9478D9EDA0D7 +115: D9BD6760FB819A8A3CEE75303F8208FCA3E138B517DAB934 +116: 9FCF21A9236C2C12861FD20F1FB15A187CD7EE7821F72BE7 +117: 73D165769B34DA6F151464E61115D0E09A66F8D0FA049726 +118: 74580BFA88EEA03C0EAE722F81997E400D9CC25FA0311DFA +119: E3C6A369820E267C938D276A858928040C7C25A826501DC7 +120: C20AD90DB0B8BEE0335D069259991060969EEC9F939E4CA7 +121: F3746F4CD6A19CC137C5FCC8F60A4C0A7F56D97190B7A9C2 +122: 63A3B79EAF3DF35180960465059C0ADEE06D45179A56284F +123: 606AFD833D082628D58672403EE6DB348E6F68D8CD1947F8 +124: 7567EA8E10CBF312F8478B7C51D87B00B6CF3DE82B03DCE7 +125: DBCDC2B9B8589F6C7616B55B059B3B3E38D97A9E6DF1F29A +126: 15D9909F8D69689E7E78A0DB928194A59623E7253AA9D400 +127: DE39589DCC0C654867943801946B9888B347526279CA15BD +128: 34FA7C74EE67C1F92C0BE1CFD4B2F46A14FFB999604925F6 -Hash: sha256 - 0: E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855 - 1: 6E340B9CFFB37A989CA544E6BB780A2C78901D3FB33738768511A30617AFA01D - 2: B413F47D13EE2FE6C845B2EE141AF81DE858DF4EC549A58B7970BB96645BC8D2 - 3: AE4B3280E56E2FAF83F414A6E3DABE9D5FBE18976544C05FED121ACCB85B53FC - 4: 054EDEC1D0211F624FED0CBCA9D4F9400B0E491C43742AF2C5B0ABEBF0C990D8 - 5: 08BB5E5D6EAAC1049EDE0893D30ED022B1A4D9B5B48DB414871F51C9CB35283D - 6: 17E88DB187AFD62C16E5DEBF3E6527CD006BC012BC90B51A810CD80C2D511F43 - 7: 57355AC3303C148F11AEF7CB179456B9232CDE33A818DFDA2C2FCB9325749A6B - 8: 8A851FF82EE7048AD09EC3847F1DDF44944104D2CBD17EF4E3DB22C6785A0D45 - 9: F8348E0B1DF00833CBBBD08F07ABDECC10C0EFB78829D7828C62A7F36D0CC549 - 10: 1F825AA2F0020EF7CF91DFA30DA4668D791C5D4824FC8E41354B89EC05795AB3 - 11: 78A6273103D17C39A0B6126E226CEC70E33337F4BC6A38067401B54A33E78EAD - 12: FFF3A9BCDD37363D703C1C4F9512533686157868F0D4F16A0F02D0F1DA24F9A2 - 13: 86EBA947D50C2C01570FE1BB5CA552958DABBDBB59B0657F0F26E21FF011E5C7 - 14: AB107F1BD632D3C3F5C724A99D024F7FAA033F33C07696384B604BFE78AC352D - 15: 7071FC3188FDE7E7E500D4768F1784BEDE1A22E991648DCAB9DC3219ACFF1D4C - 16: BE45CB2605BF36BEBDE684841A28F0FD43C69850A3DCE5FEDBA69928EE3A8991 - 17: 3E5718FEA51A8F3F5BACA61C77AFAB473C1810F8B9DB330273B4011CE92C787E - 18: 7A096CC12702BCFA647EE070D4F3BA4C2D1D715B484B55B825D0EDBA6545803B - 19: 5F9A753613D87B8A17302373C4AEE56FAA310D3B24B6AE1862D673AA22E1790F - 20: E7AEBF577F60412F0312D442C70A1FA6148C090BF5BAB404CAEC29482AE779E8 - 21: 75AEE9DCC9FBE7DDC9394F5BC5D38D9F5AD361F0520F7CEAB59616E38F5950B5 - 22: 22CB4DF00CDDD6067AD5CFA2BBA9857F21A06843E1A6E39AD1A68CB9A45AB8B7 - 23: F6A954A68555187D88CD9A026940D15AB2A7E24C7517D21CEEB028E93C96F318 - 24: 1D64ADD2A6388367C9BC2D1F1B384B069A6EF382CDAAA89771DD103E28613A25 - 25: B729CE724D9A48D3884DBFCBEE1D3793D922B29FA9D639E7290AF4978263772B - 26: B858DA80D8A57DC546905FD147612EBDDD3C9188620405D058F9EE5AB1E6BC52 - 27: D78750726155A89C9131D0ECF2704B973B8710865BF9E831845DE4F2DCBC19DA - 28: DC27F8E8EE2D08A2BCCBB2DBD6C8E07FFBA194101FC3458C34DED55F72C0971A - 29: D09BEA65DFF48928A14B79741DE3274B646F55AC898B71A66FA3EAE2D9FACD77 - 30: F2192584B67DA35DFC26F743E5F53BB0376046F899DC6DABD5E7B541AE86C32F - 31: 4F23C2CA8C5C962E50CD31E221BFB6D0ADCA19111DCA8E0C62598FF146DD19C4 - 32: 630DCD2966C4336691125448BBB25B4FF412A49C732DB2C8ABC1B8581BD710DD - 33: 5D8FCFEFA9AEEB711FB8ED1E4B7D5C8A9BAFA46E8E76E68AA18ADCE5A10DF6AB - 34: 14CDBF171499F86BD18B262243D669067EFBDBB5431A48289CF02F2B5448B3D4 - 35: F12DD12340CB84E4D0D9958D62BE7C59BB8F7243A7420FD043177AC542A26AAA - 36: 5D7E2D9B1DCBC85E7C890036A2CF2F9FE7B66554F2DF08CEC6AA9C0A25C99C21 - 37: F4D285F47A1E4959A445EA6528E5DF3EFAB041FA15AAD94DB1E2600B3F395518 - 38: A2FD0E15D72C9D18F383E40016F9DDC706673C54252084285AAA47A812552577 - 39: 4ABA23AEA5E2A91B7807CF3026CDD10A1C38533CE55332683D4CCB88456E0703 - 40: 5FAA4EEC3611556812C2D74B437C8C49ADD3F910F10063D801441F7D75CD5E3B - 41: 753629A6117F5A25D338DFF10F4DD3D07E63EECC2EAF8EABE773F6399706FE67 - 42: 40A1ED73B46030C8D7E88682078C5AB1AE5A2E524E066E8C8743C484DE0E21E5 - 43: C033843682818C475E187D260D5E2EDF0469862DFA3BB0C116F6816A29EDBF60 - 44: 17619EC4250EF65F083E2314EF30AF796B6F1198D0FDDFBB0F272930BF9BB991 - 45: A8E960C769A9508D098451E3D74DD5A2AC6C861EB0341AE94E9FC273597278C9 - 46: 8EBFEB2E3A159E9F39AD7CC040E6678DADE70D4F59A67D529FA76AF301AB2946 - 47: EF8A7781A95C32FA02EBF511EDA3DC6E273BE59CB0F9E20A4F84D54F41427791 - 48: 4DBDC2B2B62CB00749785BC84202236DBC3777D74660611B8E58812F0CFDE6C3 - 49: 7509FE148E2C426ED16C990F22FE8116905C82C561756E723F63223ACE0E147E - 50: A622E13829E488422EE72A5FC92CB11D25C3D0F185A1384B8138DF5074C983BF - 51: 3309847CEE454B4F99DCFE8FDC5511A7BA168CE0B6E5684EF73F9030D009B8B5 - 52: C4C6540A15FC140A784056FE6D9E13566FB614ECB2D9AC0331E264C386442ACD - 53: 90962CC12AE9CDAE32D7C33C4B93194B11FAC835942EE41B98770C6141C66795 - 54: 675F28ACC0B90A72D1C3A570FE83AC565555DB358CF01826DC8EEFB2BF7CA0F3 - 55: 463EB28E72F82E0A96C0A4CC53690C571281131F672AA229E0D45AE59B598B59 - 56: DA2AE4D6B36748F2A318F23E7AB1DFDF45ACDC9D049BD80E59DE82A60895F562 - 57: 2FE741AF801CC238602AC0EC6A7B0C3A8A87C7FC7D7F02A3FE03D1C12EAC4D8F - 58: E03B18640C635B338A92B82CCE4FF072F9F1ABA9AC5261EE1340F592F35C0499 - 59: BD2DE8F5DD15C73F68DFD26A614080C2E323B2B51B1B5ED9D7933E535D223BDA - 60: 0DDDE28E40838EF6F9853E887F597D6ADB5F40EB35D5763C52E1E64D8BA3BFFF - 61: 4B5C2783C91CECCB7C839213BCBB6A902D7FE8C2EC866877A51F433EA17F3E85 - 62: C89DA82CBCD76DDF220E4E9091019B9866FFDA72BEE30DE1EFFE6C99701A2221 - 63: 29AF2686FD53374A36B0846694CC342177E428D1647515F078784D69CDB9E488 - 64: FDEAB9ACF3710362BD2658CDC9A29E8F9C757FCF9811603A8C447CD1D9151108 - 65: 4BFD2C8B6F1EEC7A2AFEB48B934EE4B2694182027E6D0FC075074F2FABB31781 - 66: B6DFD259F6E0D07DEB658A88148F8253F9BBBB74DDD6DB3EDBE159A56BC35073 - 67: 8FA5913B62847D42BB4B464E00A72C612D2AB0DF2AF0B9A96AF8D323FA509077 - 68: 7DED979C0153EBB9EF28A15A314D0B27B41C4F8EED700B54974B48EB3ECAF91C - 69: 1CF3AA651DCF35DBFE296E770AD7EBC4E00BCCCD0224DB296183DC952D0008C9 - 70: 5767D69A906D4860DB9079EB7E90AB4A543E5CB032FCE846554AEF6CEB600E1D - 71: 8189E3D54767D51E8D1942659A9E2905F9EC3AE72860C16A66E75B8CC9BD2087 - 72: 107DE2BC788E11029F7851F8E1B0B5AFB4E34379C709FC840689EBD3D1F51B5B - 73: 169F6F093A9BE82FEBE1A6A4471425697EC25D5040B472C5B1822AEEA2625988 - 74: 2087EBD358AE3EA2A092FC19C2DFEE57C5F0860296BC7B057C14E1227C5CB9D1 - 75: 182AB56F7739E43CEE0B9BA1E92C4B2A81B088705516A5243910159744F21BE9 - 76: 081F6C68899A48A1BE455A55416104921D2FE4BDAE696F4B72F9D9626A47915E - 77: 5CE02376CC256861B78F87E34783814BA1AEC6D09AB500D579ED8EE95C8AFCC8 - 78: B93E407404E3E95F20FD647365E0E7F46AFABE9AF1FF083AF996135E00D54009 - 79: E81FA832B37BE8ED8F79DA29987AA4D61310DCB14B2859DEDF8FB1DAA2541FD3 - 80: C56705FEA5B110B8DC63688533CED21167E628017387C885423B835A55EDD5EF - 81: C2226285D08A245A17058ED2D24AD095B714F608AE364FDDF119E0A7DF890540 - 82: F9C270DA8793221A6809AC685FDD4F5387E0FE1EE6AAF01C74F1E0A719621614 - 83: E69BEFD6EF7F685C36E343AC1702D87AD6A0E4AC8C0D5C521D04AAD4EF0B7458 - 84: 4E3033562AD74A7D43EB5FF5FC2382622C6307CB10E245AD62DA77C4C63CB178 - 85: 2EA17629472564A59E5EB845A2CDD04F442DF2FF26BCC866E400F77158D612A1 - 86: B90223DF74DD49A8A1461F340F2D7A90F96903CCBB5BC3C74EA3658FC8948B20 - 87: E0209F42B927EC9C0F6D6A76007ED540E9BDD6E427B3368A1EA6C5E7565972DD - 88: 10D9BD424114319C0999ADF6288F74060CD8918EF1228827A6269B2BF0F0880C - 89: 7D1978A65AC94DBBCDC62E3D81850299FE157DD9B7BD9E01B170156210D2815A - 90: E052DFF9E1C94AAA49556F86FAD55029A4875839FDA57F5005F4C4403876B256 - 91: 58D29459B2130A2E151252D408B95E6DAC424C564062EB911CC76440CB926CA0 - 92: 4E4530C392316F598E1BD07F32166380A8F712A33A48E9EB4247131EC5DC05D3 - 93: A09C9D3E42342C7DEA44EDB4AEB48CF6727CACD8032A12CF77A25829FC249D32 - 94: EB978D0F1AC03CE5C3510B5F4A16073A7A2BDC15C4AB7777DCF01030CC316667 - 95: 7D1905A3ACE827EA1AC51C4FA08C281ED3BE87E7F4E928D696BFDE35C8F2DC0F - 96: 08359B108FA567F5DCF319FA3434DA6ABBC1D595F426372666447F09CC5A87DC - 97: A7B3830FFAB0F2BBABBEF6DF0B169A7917008BF238880BBF8C20B8E000077312 - 98: B4F5D9B1555994C5EBAEBD82918D560A3BF82962A171A1614E7551939E943366 - 99: 014ECAEA1B378900F1212898C6DDB01565D81AF1D0EF78DF5E28D46E9CAF7CFC -100: BCE0AFF19CF5AA6A7469A30D61D04E4376E4BBF6381052EE9E7F33925C954D52 -101: 4565D7B898CCEA3139AD260F9273115F806B30079D7683218C4E3ECD43AF3B33 -102: DDADEB660FE8902C9FB2DB9B6CF237C9CE5B31753398085C4367EB5910B9CC13 -103: C15A8928131F6687DD10F3C115DDF8D7C8F2DF7E18D12C08C4FD16F666CE60BA -104: AE8E3D799B1353A39815F90ECEEBEFA265CC448FE39FAF2008CB20784CB2DF9F -105: 98545371A3D9981ABE5AB4A32A1D7B2FADD9801D89DA52A94A4F78A42740D21C -106: 6323DCE2F8B3A04DCEA8D205602348C40403CB200C677EB1A1C0FE37EDB6EB2F -107: 8150F7C5DA910D709FF02DDF85DD293C6A2672633DE8CDA30F2E0AA58B14B0C4 -108: 44D21DB70716BD7644CB0D819FA6791805EBC526EA32996A60E41DC753FCFAFC -109: B9B7C375CCA45DB19466EBD0FE7C9E147948CC42C1C90F0579728CFB2651956D -110: A47A551B01E55AAAA015531A4FA26A666F1EBD4BA4573898DE712B8B5E0CA7E9 -111: 60780E9451BDC43CF4530FFC95CBB0C4EB24DAE2C39F55F334D679E076C08065 -112: 09373F127D34E61DBBAA8BC4499C87074F2DDB10E1B465F506D7D70A15011979 -113: 13AAA9B5FB739CDB0E2AF99D9AC0A409390ADC4D1CB9B41F1EF94F8552060E92 -114: 5B0A32F1219524F5D72B00BA1A1B1C09A05FF10C83BB7A86042E42988F2AFC06 -115: 32796A0A246EA67EB785EDA2E045192B9D6E40B9FE2047B21EF0CEE929039651 -116: DA9AB8930992A9F65ECCEC4C310882CAB428A708E6C899181046A8C73AF00855 -117: 9C94557382C966753C8CAB0957EAEDBE1D737B5FCB35C56C220DDD36F8A2D351 -118: D32AB00929CB935B79D44E74C5A745DB460FF794DEA3B79BE40C1CC5CF5388EF -119: DA18797ED7C3A777F0847F429724A2D8CD5138E6ED2895C3FA1A6D39D18F7EC6 -120: F52B23DB1FBB6DED89EF42A23CE0C8922C45F25C50B568A93BF1C075420BBB7C -121: 335A461692B30BBA1D647CC71604E88E676C90E4C22455D0B8C83F4BD7C8AC9B -122: 3D08C4D7BDDA7EC922B0741DF357DE46E7BD102F9AB7A5C67624AB58DA6D9D75 -123: CC63BE92E3A900CD067DA89473B61B40579B54EF54F8305C2FFCC893743792E9 -124: 865447FC4FAE01471F2FC973BFB448DE00217521EF02E3214D5177EA89C3EF31 -125: 3DAA582F9563601E290F3CD6D304BFF7E25A9EE42A34FFBAC5CF2BF40134E0D4 -126: 5DDA7CB7C2282A55676F8AD5C448092F4A9EBD65338B07ED224FCD7B6C73F5EF -127: 92CA0FA6651EE2F97B884B7246A562FA71250FEDEFE5EBF270D31C546BFEA976 -128: 471FB943AA23C511F6F72F8D1652D9C880CFA392AD80503120547703E56A2BE5 +Hash: md2 + 0: 8350E5A3E24C153DF2275C9F80692773 + 1: EE8DBAE3BC62BDC94EA63F69C1BC26C9 + 2: 1EAA4F494D81BC570FED4440EF3AC1C3 + 3: 54CDB6D1BF893171E7814DB84DF63A3A + 4: F71A82F8083CD9ABA3D0D651E2577EDA + 5: 2F708334DBD1FE8F71CEE77E54B470F9 + 6: E014DF2DF43498495056E7A437476A34 + 7: 9C410644446400B0F2C1B4697C443E19 + 8: 0944DEC40367AC855117012204018C9F + 9: CE8A6E797AC79D82D2C6D151F740CB33 + 10: 06DB4C310570268754114F747E1F0946 + 11: 9F323D5FC6DA86307BEBC0371A733787 + 12: 3C1C7E741794D3D4022DE17FCE72B283 + 13: 035D71AA96F782A9EB8D431E431672EE + 14: 7ABE4067ED6CA42C79B542829434559C + 15: 5E8D0D6F6F8E07C226AE9DD32609035A + 16: 2B1632FF487D6C98AA3773B9D3FCD2AB + 17: D3D894482F7541BC0948B19842B479D9 + 18: CFE6B872AC98304524CC6A88B6C45881 + 19: 1573DD015C8629DE9664CA0721473888 + 20: ACFE2D3BB3CCAD8AEF6E37D0D8FBD634 + 21: F5F83499AA172BE8344F7F39BA708AAA + 22: 1D1C71FF6321B685D26F7FA620DA6C22 + 23: 4D7E74B6C8321775A34F7EFF38AAE5DF + 24: 351A988C86AC5A10D0AB8E9071795181 + 25: 970F511C12E9CCD526EFF8574CF1467F + 26: 0A68F53A476F7499EF79278A4EE8DAA3 + 27: D458CF9C8CD0ABA23BD9A8C5ABE495CE + 28: C8002E85C3AD9B8B4AFD23378165C54B + 29: 0B4788B157ED150A34D0E6E96BB4789C + 30: B14F4E31DE09281E07248A17939BE5B9 + 31: 803EEB99231526D6A33C8D4FCA537A6F + 32: 51FE5D6637D2F0F09E48CE2A7F5030EA -Hash: sha3-512 - 0: A69F73CCA23A9AC5C8B567DC185A756E97C982164FE25859E0D1DCC1475C80A615B2123AF1F5F94C11E3E9402C3AC558F500199D95B6D3E301758586281DCD26 - 1: 7127AAB211F82A18D06CF7578FF49D5089017944139AA60D8BEE057811A15FB55A53887600A3ECEBA004DE51105139F32506FE5B53E1913BFA6B32E716FE97DA - 2: 23A5743EA4136810A2DD503252708D35151259C859BCB7AC46F5F120429983D14736FFBEC6BF8F174977B44B0C5B73378EA88A4EC1F7AA295C04B5DB9017CA48 - 3: 123119AD1D6E168E0F20A3AF1FB2E29C76BC3F83711CF3EE3122AE37EF6A1C2E094BD4BC53B7F9A45C9DB1F900F87A3759327A659DE341EF1A7B1787AFBE9EBC - 4: 8A012A2D7FFA17EAB1B63C2E6CCEAB1597623362E7CFF2F1D81BB1D1813D27AB344EED9987E55FCB4315C4F8004D4C541A0CFF1AD050E5B1D39EC91BF68CF5E7 - 5: D18F88E32C65381463856DF34FB0ACB1AEEC7FC21941B628534CBBC44CF23BDA195B46A8B4CEDA76175FF1875B194E453479D66C7E51C8ECA9E79A1E5E35020E - 6: FA6BBD204ACB2A0E44E3330BEF3AB905CCD5D86B2FE7E07DCE2A8C484B676C8317B5EDEB3896D9B7AAA3250059B91AEFED0CA628E8548AEA63106E4758D56BD9 - 7: 598D98ADD2FC26B551E9E7385551F760898230A51F0E507C567FD502317A521E8FFDCC062302286C975811478B89046CDE9D148814BB4EFC21B5C901EFF0E151 - 8: 44D125F785E8EDF22739FE0ECAF0902969131B0A66B93091119B8F3BA16BAD118FF2DF4CD47D2639FFD180D5E6491CF957E6D346D6C7D914B810E4560C7E662C - 9: 3A1B39B1F0FAB64D4AB06F1082C9BCB72B6DB81CF391363B56F2EDA562B55E50406ED946A4D18777A46E6A6984A561A35A0179C6091BBCEB890570017E3F3C4B - 10: 3C5249D4D814A0ECCB3269F5024F3BCF102784E043A06A6A6A9BCBFD20F753BBFC5DA0808E34F8836DF428AB9F2541DFECB36DF288112CE0268902DBE510598E - 11: 6206D8EC11289EF46456F35E483DE20FE0AABF6261FD634473108375A63D5BABC27143ED51EAE3C4D8B7649638DC794AE63810903ABD4BB303700804ACCBED32 - 12: 06E9C5BDE5128B27926B475874B371F7D8352FEDD18BF29F9C7C1F7BC1AD267E93FB5562D3E0FEB47CE10089ADA5B67D6BBB225A5181BE3789D539D2368DDCB2 - 13: 628012B90C121454C02CC2937A47A87C7F96D1B91AA42589022941720D6F6A8B6905C489364250D21308A13D7B00529DD4F303E95918EDCA0682E64F1C3832A5 - 14: B99F8D912D10ED113884391C27032E4A92475F6363F5A7D8B08ECE569EC628A0F1DCD51E0AF640972D56C7BB570A97E67E9DB59811BE6A8FC6EB66611026F98F - 15: AE8359EDE5BF78C10A72A484FEFA47164AED963E458AC880DE4FB65604355655FD8211B11E549E925B3A28D7E288FAF5FFF8CE15CF992586434D10CC5A8927CE - 16: B1241C96B35EE185E39A58E5B481925BE53B3EC31B5D082366021B5D7DF5B832E0951A239CD0A337DBBA6DE2D3A0948105C3120A074A450799AA2547E700EB1C - 17: 38B94B9A3FFA22F622AE3508152AB5F576A20A3B55FD7521849A6C8ECDD06C132F41583258E572DCD003087EA92EF835CFF2FA5EF3634D0D55C2E66B1ADE8F20 - 18: 1E77FB17AD950D28E4C498C5697E46F70F1649131E6B61CA90F32AF38F342C108CC33BC63825EF8EDD539B4C25E21AC5B3DEFFCECC53C0A570831031A4F225AE - 19: B8AF5686985A34CDDF4B850F3A92B55C34C6F1B418C4225F4BA8CBD8A6BCD53338F635B376F37F9E434E716B7D4CBB4B240A2AB8AF1C9B8E33FADCC84B79F0AA - 20: 1F0529210804655F91186C04E0A94F4AFF12681B13728DA70725F9FA3680DF14539F37601C47CF0C6CC0B42EDD810EF6E5913C3FB199AF7EC8E38D62CB6BB2C0 - 21: CDEDA0FB94EC6D9155EB049DF7F379E537F500BC42048D46B4A0959B4F2F148F7F39D6C8A46101E64023EF37ABB101FB3E1567D55C1E872442E4175415D1B8F6 - 22: 97E5AF6C72FF3AB6941A11D321310C4BC6C510C57AE480BD74B13B4CA0D2CA08067FA4D101D3998AB637680271F61748365777B7C9075366217433C8ED14BF3B - 23: 171C2B53C78491921D7CED8EC5FCD6C420FBF509A9C46B13743F3921356FE439194767B24A7002AE1C5D20B16AF2FF16113AE64353EFDC198C085C0A83EB8A6B - 24: BDA138CC4264EA65BC361CACDDFC24F7F2932490569E1BBBBC6DBAABB2A439FA4C59D9E848462C99F4A3E904AE4D77359220DFC0C4109005220FBF5EE68E501D - 25: 89483F3ED6CE89576702D1AC3D3441E51CD1E4989B8D3D01B92BBC22CE7E4EFEC53F3FB7EA9EA392366E30B50EE72A71700C9F2F36A0374D07DC724EF5A7071C - 26: 22D09DBA077F3CA703A5C3118981B4E6E0BF9ECF644E8A50CCD9F9A8BBD201B5AEB8F44876B54FAE4814E2CA8DD8B65CEA0390822CD00FB804F6535005CD939B - 27: 4FEF39AAA693F0B425E261E448D1D4BD9C09CC213F249AEF6BF57EC20E83BDA5DFA0D5073276DD6F55E03D537AC6E41B7DA24E39C446B98A1205CF0E172E779C - 28: C2919E494C333E510EDF5EAB888F5872399D6F6F9B2669708CCFA6F3622202F514C4F65166B93CFDF13D5ED4057FBEBC3DADB50E9F88BE4270077968042144C8 - 29: 41DD097AC338442C76407A100FE4CA941BFF3CBD645ADAE50505B8B0D6B41901940EB8C2E3142C2C765488C9283D8247A9AF011BA9E4BCE11B9BB3CBB6750159 - 30: 455304D0B290FE4160D66D78F5DA2492E538D15089C74031DBB2CA3E8C820C723A89BB85F90FD0CD22AD6AB005AF0CD87C4DB3EB463BB5E35A06650C6C39DC17 - 31: 2F09F6DD601CBC8A0F8B324099C13089DAC3009BF9B0063817438C1055E7593D27822B1854A2560E664FE23362921072BA2EC4A6B28FC234B017C55A077AFAA5 - 32: CBD3F6EEBA676B21E0F2C47522292482FD830F330C1D84A794BB94728B2D93FEBE4C18EAE5A7E017E35FA090DE24262E70951AD1D7DFB3A8C96D1134FB1879F2 - 33: F55D3AA4A656D91B04900111A8EDFF4C7AA7EBEF8717F9679BE4C2852FA098ED8050E70477869E8AD13F62F70436E429E83DD9C268CC1F4D6E410004317A10AA - 34: D448BDB045C8E0AA4DF423222A8ACEC37DA81BF020CEACC49C93AE374F2051981406B736388DE716F126D77385A051783833AD6EC3EC293137DA493198C46C7A - 35: 75A0C701E69724627AFCCB915B63235E1E20B6A63E7B54B1ACF7EB82A37D437DB5FCA2CC9FBFD55C60018F22153582F846B2AF1761A369613FEFC7DF645E714F - 36: 3497BF2EABAEE843AFED140E204B88C48E3D1CDF99F1EE5B3F281A39EEC554AA169C5940EEB44B732667C3F9BFF4BC12A7B8431216653CB06A88D9D91E207245 - 37: F0657DCA8FEC2873E4788FAAB46CBB528A850D2E5C36A301D3C5E0AB2FBA04A28298F8E3455143687C86AF48B7090F18574A39ABB47CA6C2010F79A9AEA16528 - 38: 8A0DCBBA20DD46CCD073DBBBD38362A7C7806D9D3EEECB7BB75F9344C607AA3401AF20A1176BE3786ACB804A74CD2FEFCE00325CE9D9826B1F18E9D37872DA6F - 39: 3A91610D901532F12DE112D6690720B91F8004E31A4319B66BB9A9B2D345E1FBC214D3D9A3C2640AEAB1CEB876ADD27B90DCFCE3002227847AE5DE747BCFF162 - 40: 413A59AFE0BCDAB6478BE0CED2351BC7AD833EA07B08C7A58F5050030969080EB96C1ED37FD480FA57AA09B152E74193E247EBDFD8F3DA5F19AF5EED19761CE8 - 41: CB368E0D768F9DAD380B9F1FAE3CEC41739DA61FF9DA3DE813A76D65A7694D05AE89C280456954CA0472AF3BDC01326066F30EA643A4E0FEC67DC530681912F5 - 42: A0E331A70EF82DF3E913EE97B210B4E0AE47C3B950F1C9B1ADF66FD1602831BB584F661863F4592EB152119A63B1517068B339911BEE5557CF17E6FC937D921E - 43: CC9EBF97C234A6CF2B08100343C2845CBDEEB27F5968BF39F6519072E22CD07E4C81D11F43552AD78AA4E38808DCDE7A9C917B6567DCF3FCA60CC1153F9596B2 - 44: 6536411A996F5692A4F4DB792D6DE5F73E0B68F919AA551644F07CD5FBAC1331F27D902B8EC9F33D882E5B6638F013E4F08642EF91EEF7AB868998960836633C - 45: 76F62D8BC869E64476AF4C87D720EEDDE7D8B79A0E78D4688BD27F329A0065B6C3F8FD87D8CD2AEC493BCB5F88CFFEA341EC88486D2671E99ABCC4A61C271EB1 - 46: 11EA3F12DC7483B0A9D133951165E696E992AE88AE1C98FB77A66238570E59F9ACA5079FF3F3A226CF8DC93AE3589E4EEAFB7F48C38640AE18DD05FB9AAD5CFB - 47: 74BC2C69D958135E73EDC4703FEED12E89B8B5889927B87A9E35CFEEC1CF1B1B6F4913F3F5D97976DFC859E64A98D48BA0CA4F89069B84383C66F2B2870CB313 - 48: F1CFED99556434ECC9AA170228C2BA5709EDD8EA68AB9ADC118036AE5F49677EA9E2F7EB003FCE763FA35E58687BA6CC9BED2ABEE386D91D975FB9AC8D1A2E3B - 49: E5B20D257A021E4835C06DCCB770EF003657E8BD5BA79B64B55A0A8542CFC3657705DBE5AAB0D5FEC34999938CE5F66D497445F8E522BEAAEAC7CB0A679CCC7C - 50: 20E0DD49444601FF9C6237D5F94F4EC8196F9C917C37E1EAD04E814802EDE40F8A8AA9C55015602A6D53D87A0D4119B6996813F90BF984B6FE571B79DC5BCF73 - 51: C8319ED403C57E18A7D2668A9B6621DF11A34FBC54BFBCCCA63701A2F50D3BBDDEFD603F0262AA2DFBCB5D82056E9034CC51FF1D69996BB985E6C782C82F3BAE - 52: 867926EB86AF82183123664835D7D4B941D6BA4C8988F3A2A17DB8A4439C6180ED8DD14910738920E1A3FC8F6214FE05BA218345B9079CCA662AAE480519D2C0 - 53: E9FC3C407E282BD9A6BCAF1E50E3A738F843830C6F9CB1D4F1C34CD8ECDC7397C5D4D3C482896BEC7383EDC4350CE40AD700BA5400B956F2CC1585DDD7129420 - 54: E1CF4D1704A9D37DE70F3F56A0D521A41293095A1F99BA928B3A3DE90DB1E2BF2F74EBDA9A90CA9D79BBEFCBF9BA6D140E1418AC46965DD4F59017E1ACFCD459 - 55: 355541FA3EECD27B1DCA8D596B3C41F0C60D85034F8811E2D15FA8977E25433F297C5C14775A0E5C26429062B952BE7DC2DAB84A69A56FFAB826CDCB49AAB4AB - 56: 2CB606CD80F35FCB14183916DD04C4508EB0AC03CC24CF0DA485248758BF0910084CE6C503ACFC76962564C13D9EEEC408C3CEA22EEFF9C7D41B206ED8F74F10 - 57: 0BC7A701FE7AE86E7186D27F85435D088385269FC333D124C17AC32C10A38E494291007532B06114199245CEBE8B4B83AE85C435CD2983A2C342AF893A161169 - 58: 69B557C3824DF67B6CDA58E107D82A3295C3C888EED24432E002E312D4BEDA1FEA72DD4419FCAF751C11BE33BE6499FFC3A3C239327B7D781859358855216148 - 59: CC0F4C0BFA00891BDE18E07B766FC52BF19A26186F56D7DDFB5C9683BBF814BB15104DD999CD70FB310D8757B938EBCEEE59E42A62E4D654CB106BF50F1283EB - 60: 2F3E29791BF2FC175F6E3ABDCE41FEBA2B77C5F016BF076692C51ECDE344D0E1F21187F6EC0D958D6A1373639D1CFB64BE4E9C36D3E5EA1B9F0BE3ACBBF6063E - 61: 3615F2BBDC87E8AC38B03C3A73D671A855FBA02D81C204C2EF8EAF24F7F4D4DD0B6DDA1631D884F4B6F05C1D1E324DF2E4ED63430B43AAA42F87DEC2D4C7E6E3 - 62: 97B59ECB6C17B829147729D80391E09A399F7E49F781038F3DC1FF195D90677CD3CC9F723AAF309B4B8911D25720E4E399070353BE01A218FBDAC460C3AF22EC - 63: 6A930B07A37E9F0C62E2A220FFCE9DEA8D8E34BA52C0A7311C5F4090A253F16C9281BC0DE528E5EF86F187C3185F2ED244352A5DDF5FC09E99B4008FEAFC584C - 64: CB29601EFBEE71F4DFBB7F1C2BDAEAFDB212DF6AE35F8BB1EE6C0A245B99F3F35A82957567A30CFB01AE28B94C7223A62C5C786E8624B8FADDCB913E3AB2CE71 - 65: C4D102C41B4F588324E3C9E880ADDF370874B30FB6C814ECE42B599EB8C1563D88E89225E7BB5CF4DC8CAEC9E7B729664D421E5AD72B94552D57FD04B254D551 - 66: 4E91B0F1107CE978BDFFE2AB3A6A67A2C4233A0AAB518DB2D4BF243A88FAB5AFF06058CC13DAF54A7E41281AB1D411E618D73FF1115517D49ABBC1A1821F2A0C - 67: DFA65C9356EBE3265151D84993C9246A8FCB9FEB9844D8B4DC7C04689035FD2966611CA81DA600559C9533E6370861C00D23C9DB16F1E715CF4838538307E403 - 68: 9B0E7F19F3E03C425F7A29C95A8417F23A3A64C18E423F7F8717558A5D8FA1AD4ABCAEC7FBA83D216D8B66BCFCFE50FC6FBE6BEE2EB054ECD3EEB71828B44293 - 69: 65E34948011BF0715855139BD03AFCD01C10A0CBA4A6C237CF38A79977080EACE8F47E1E9EE14E7D60DCC2A9FE2E9DAB47DA5BD0EA1CD3932FA788F07E04D7A0 - 70: 351164E46DA292FD3D75132545401498D8983BE9D143732DE2DF21FBF975A5E2C81584D90A773D34D7895D4CECE328637AD2FFA973E21D4B6D03F39141CF44C8 - 71: 3CCC850D53A1287AF7B4560B2EF0D43EB5D9A80D62A0E9CF1DBC040135921104D4395168E90BFC871773EBB34BCA1BD67056E1CC7DC7A48FF7C3167D389F117C - 72: 5D63F2BBE971A983AC6847480106E4E1264EE3A0BEFD79954914E1D86E795B2E18238F12FC5E46CB9CC78EFDEC610A93647CC04E1C23D8CAAA6A58C21DD26C07 - 73: 921D9B7B2B0F3066A1646DBB058C979CB3925DEC0F8C269FAAA7F9648E73465AE55EC527257D5D5E1CFDBF5D6799BEA1004B6186F5108C74E3B92FE924166558 - 74: 88725980B5A5BC5CE6E69E9CFE128BE2FAEBCD8A5B9FC2E17C614F81367788EE6DEAD64EF02AB4141E369879E38D4E1ADDB5E678347D4CB86F8DD698631B6643 - 75: 469F61487EB859EC7E80F3B6992A9C335B4CA864CA1BC7081155A882CF2E64EE787779EA251EA3EF781F4FF42ADA9CB93DDB96E9A07EB06A793F737F2C6C12F6 - 76: 8014AE3EA99C4551E214BE2A075FD7FC2A048152FF874DEFC66E22437B8410427DA8FB5BB594E09562C403D14595C921908DDC45E270B3208B2125AAAA53C191 - 77: 74E6B15025353113071735919571F765F098622730A59779D021AE39D7B0E62A887388E3064B16D3C7A1564BA5F823870A7C318D00FE484CFA919046939E7023 - 78: 2709C7DFAF46D985813EC7B14CF8357B6C9D0F0BD206A716E5DA419F1B54C0A4F6CB1CCEEB9A1CC22A6D398B641D7AB10489084365931F961BE24EF31544B425 - 79: 02384A7707E913992BA30267BB1A07081A82C97F0C8127974B16E783E4F788B2E207B91F9385A3417D339AE468E935EB31FCFE7CE78EC03569710564525C6A34 - 80: 5B4FA98001A5B76CD19A8B11C5F47BE9615A1124FDEDCCEF6E247797371A5950810283D4C2695524749F96F6E5F11B2B17810AF4B527634C56EBEDFDC956F9F1 - 81: 245DEE786EE305DDD0F6C592830B463049A702916BCED916A29F20553ADB5F160021D2A0CE50B5CB5F9EC7B342E10E63C9C643499542786B0F13C75FE662F181 - 82: C500CEF078A00D242D6A8DBD36BFC8BBF4D16FE63AFBB2DCFF0E745737AFB65728557FF624FA1C70ECA3F7318E82B3454C22D929CC2E03427A3EB92832E2B826 - 83: 86CF47EDCA1807430CFBDC87E9CCF646299285E7A89A22C44D948959F678E3956EEE32F7724C82B832A6211FB17057418DD307EFC877EBF47B05869AE4FEC59E - 84: A22EDD54BD66968FBB5B0CBD690216BA9372DFC73C652F1A059585BA4A4172E484710741E7DAE28EF32A3188D4FE227B864724DFDD6661058B62ACB29A5B6DEF - 85: 529D168D19A280DDCD507EC1C9AAB9D622C168ED4847CAC2146CEB4A8EC3E32FBEEC137A8B975ECF60FB297702D4EFC987A2862EBCAFE4FBFC8A040BE5BAB2E3 - 86: 96C78098873B4D7842CC9D3CC7C36C872CDC0EE4DDCDF8290060A64FEB04FC55EB453337E7E77B6BE081CC5D8F2821782F82F98BE8CF290F1CB8BC6CC1314D2E - 87: A6CDBFE071376FFD6B1C3C90C9D8DEB49D46CEFE9177AA84E5D8DA9B3ED5449F507F5A972C97E1CCD258381B54A3FA8C087590D7EE85B6533795DF91DB8A58B3 - 88: 2B472A62AE504DB117D77E244C36C2B6793D26E89108F34ADCF5AE51D6F5EC08CD021BFAE4C80A4C1090FA2CA83182ACDF1957FC2C21F360852C2C8C14C2A39D - 89: 6882290FDF4829B5E8BDEBDAA9BC11826CE1B751758C9DCFE5DB84A0403948EB1BA23A5A899109C91925ABC44BAAEB57BC88DEE3383C456CAA030B4EE2072118 - 90: FD0243F8D7BF9B02002664100B0B6B228C9A11D7BE648DDDF279D147C8C4B57321F348DFACDF7E40010D1F4F960355479B7CE81EC481492952B864815648B890 - 91: 348978B95213EA28BC3B01A457173D2784D1A301886891B40E7825C627D449785B1596D1FFE81EDA8F487314F56B96265230E465CEB6B49D6D58D07C195C1F7D - 92: 85D3B3427C0F58CC5D9A1CAD73F9D66F2CA0AFAF37089519CB1E3B082C96EA1E08E67A0F692B79752BC7914D636EAFCE4281F2C4E1F1A7C80EC56584C6BF023A - 93: CE2C2B9A13F55A2700199BEA8210591DB80AD51DD5227A2E34D0722661376702B0A46AF3A3AF00C9B1B0A254299D77E568448B3BC8865BE13F8EAE6B0E714A36 - 94: 552A8EE6F26E9E1CE87ACCF9674FC96A4722F30035869194DC56843A12A986F368A760EE740E6D22DDD08461B33947A6D4C5197F5877E4FA9BDDA08F9B904C53 - 95: 5DF5B514C10744318B104C4F2790EC18070A8401B5427D06CC44CF9320F110B5FEB176CD5CEFCA31AC57567C677418D065C6AF2C6E8BEFD4688DFD8F7B3C93B5 - 96: ED4BE3D733CABFDE4659B2F6D6ED16B9C69AB46D0949BF1290F360A6AC358EB9F9FB3560582C52AEBBEAAE73B04D8D040621723521FC95A143E322258056742B - 97: A070428BF846D27696D9CE6A24CB58DA841015D0CAC74BF481270AEB2980A1F92A20733CCE4BE4D9226428E9B691B8D2E41385B836C612ED969832D14E43061A - 98: 8B0CAA5B47BD3A6881DD9FE3A9C617BA4229153F7825467E16E05A19E9277466DD002040B1897569F26F0C30D8C21E554DAD7A0042E9737EF217131AF8D72BE3 - 99: 2282F0F5B13224B66AAA946889F6DA0721515CC41988754B5075FBA46EAD1A54E6B641FF536CD061923505075EE872742E748C45E01E375F8278E5F9DB3499E9 -100: 6286A3E2A02236F45739BE74F1D1D83CC55C7DCA0018F852AC52B5F5ED9B3D1728FA4EB2087E87F16FBBDD64ABEF783F1953F20D06CF271B8F2FCE2A3BEB76FF -101: C8560C1F73D8F309676B71C239C06FCF16A7A8FC710C593B0F83B32606D6D7C85B66F9AD987A4C24BAD2F4A03A20DA89D5F1F0987F60FC97F40F306E221EDBEF -102: 9D6DF09DB9028FB57B45E346886FC0A6BA37D81607BF21B4C7E5EF811197E01EEFD4BE9C22E68A1B7C714F8F7924F2EA699B0E83A3C95379F7E8DD0CE20CA8B6 -103: C2204BC64DEEF9249AB2E29187E31DB863002B0AB130C1189D76D8E41F40AAB95606B1CC3955788FD6E377D438C2C88C4AECF8F2096A5C8D214863CFBAA3EF5E -104: D29281937684621D1473A7E7EDB80B7C9D80B0842E9D801B718A13B847B9EC4F17D1082E90EF5244D2DF629786D1F0F3F4ABF9C457B348D899A66D389D91D6F7 -105: 0A320F94BA79AEDE56D0574064050A247D8F2DFFFB8E00980C7A2523B879CA2E6A077B66DB538BB707372F81DA453072EA7C1972BDAA968974945058B768FF14 -106: 95A45FA111B186AEA2B9F4C20D8E50CBF008435DDEFB07CD11A87FA84D918CDDB35CEE7A9F4EC44D072369531712D0BB82996E16F81353DBA7AB5229D16FCB85 -107: E29FE5FD5CCA695A65944360C09BA2A361613C231A79A3995BFE552F3F1A6B77E34257F58EA53CEB86FE3F90FE078DCC66374886A1239DEF364D13F26A9782F8 -108: BC433FBC25C91C23829A411CE6A15BB068E7415BFBB8A6FA9C28D786DF721FE9BFBE68B04FB0EC74378F2156D1DD77C35376528FFBC2092DA00397B5BD74065F -109: 127612CE5CA9DF6918EA8BC7E9F4A2F2650E7471C9C0422E90891382F93E89F247D36348AD57CBAE703B898B846BD610E796C81BE5ACC0FD72636D46371BDA6A -110: 0381B5E3463509BFB578EF20C4ABD824EB6D7AC97A0447CE917910475AC58D2568B0EF6C1FD91EC1692F6ADE94E9D8BA82F6DCA14CF3447587F4EF627FD92DAE -111: 265CC0491A1AE6071EDB97771EE58406C0670DEC9C531DD0B44E8B7111FE51FDC6D44C3547D350E134116F9FA75D9836E6C38BC78C099A98E476A3A7CB955C8B -112: B44E1E6A3B4C597CC576754772B57904BEA0CC132520A265CFEBF27079F494073ED2520DA03B5370404AC5CD342C1253D261A60A8ECBB04F453F0C9972863004 -113: 287AC1401EF422FB02AA9CBD63D6D9B1F4CE54E468385822AEB353517A1322F04489C632891A261E9E24D4EDDFD9B603EF9E3854B8E41AC96A6B9BD7F995D04D -114: 158676AA01E5254B4F26D3C0A5D6517608EA8C237627C536268DEB7239531527BE936DD3D79140713FFFEB6131EF731281F5C76507FB09B110AE5F2E567FBF34 -115: 2A5FC3C6FBF1F885C21728A6095E7057D35750546EB26A04E3736D251177765EB40D21B7D36EC3AC2A8A4093A860D6BCA57667D8E86D0A1DB0ABE76A997826BC -116: 932C41E642771EECCB6AA135C5E14069EE073A21352AEC401688B630140E8AEF14734B748E28229B0B55B62349FB4247A910B155A0D5FFBDDCC9573A6DEA68AB -117: 3B89D3C164A814F8FB65B773E5775BD326AB6D2AE331499E8DF49EA15F8849442B916C9146B5078E8C736414DBB67062F18AE37B33320C4AE9514B294326E1B0 -118: 66997E8892D06568F993EC906F6D6F7C7186D954FD9646C9660F04358E08DA2CE47008900B38B83E8AAC014BA33C0AE6A541D26222055A8E9ADD10D41CEEDFB3 -119: DFB1AE03E491E5C637DEF10AEE4A668A35C5D3EA13E02C626F5527399FAFB1625FB93BA389813CC2D728FD6BEE207DA07847CCD13AA1A7B7DCE7FDDA30FA9AFE -120: 7A1D68CD4CC8DFDA9D181D639A2A96F15E7B8545AAF0E7EDE62865AC5352145ABD0429D54F3FB58B54D227AE70959D99F972425F606429B0BCC9F7299348BB3B -121: ACE2480F467F60566E3383091C0609A80D673BE13855C451B857E0E4C496C13074928A725C2EA59206965B5C7F834446683E17FDD1505FA3A49BC13C753CDA16 -122: E9E9986D2428A2CFA74A72836AFA3B2FECC1608E0AC9445E66E3AF8538D3385D7348B04AC1D446EB624F890018EDB59CD70FD97B245010B3DA87C1A8AF3D5DFB -123: D1D57CF31AD59B2D6EDCDF8C1B68AF68E3AAEC415C4F2FA00174D56394D71F70A276492C800B2A2D899EEAD95B849123C934188444FBB959C72C3002F2276BED -124: 1FDB3B4AD20BF1AE27DAFE88FB86FC52BE5EE12DEF74120674443672042A2B662D7560655700206737165AA866685B2633FAA5FD63DADC559AF412525527B132 -125: 4E773E49D0A95C02CBE48AA80D12C54EED596931D3E230DEECD012D623ADD3AC42F2771D14F4B4511A69EDA3A719B06B0A23C9CF15A4EDD72AD0EE3DFB453CAE -126: 9606F242AD1EA9046807BE0F95F3B3FEA36FE68A1DCADE5EB181003494F4A16D125F7A2372A45EFA4751DC676E3E67B1703FDBA3DDC457C362A7AA80D900F381 -127: 73BB20BA4987E427DB00B5D42E431B3A37232F41CA4D29591758F26E73788A3B3468EACC9415F4BCE5BA6AECDA14750080EDE3F0D1017727359D215A770F76D0 -128: 989C1995DA9D2D341F993C2E2CA695F3477075061BFBD2CDF0BE75CF7BA99FBE33D8D2C4DCC31FA89917786B883E6C9D5B02ED81B7483A4CB3EA98671588F745 -129: 4D8F28EA5211C66A28B6A0F98B34B45E9C51CA6759193FF52D10EE579D64441D9B240A40C3660F39AF600A9FD15F137C635ED13494FC26A5E27A23F04242BD3F -130: ADAB2304D128965FC499DA1D5955EEAD869A9E6B33D9CF03C02AE7A22AE277F35F45C45D9BC6297DD7EA49664EB213780C97688C3241443CD7FEA04BADD5726A -131: F4A3DB8BFEE2F2D0E5F9287137BEF902D1B78C474445CA56DFD0E8C5769AC90BD427408353BF9440901931F65FBB727A91966CEBF229233236E1203641FF06D7 -132: AA9B9D3091580D39BC893BFC28358CBEE8C9B6DD2BCE64856633E5BBB08CB9BE457DEE04F7735969B2E991555824F12AE3CD3E1553786FCF0D0A8368F4FC322D -133: DF7F2A48B2D154DE7D3ADF710CDD3D1528EBCB06371A72AE607E6E6836163B179800E1EF1BA08649ED405637C6617D6600B0AFCDFD7FD9E39A1240F45C21FF96 -134: 76DC7B65F9C314C810C75A7C7A520CA9BC750D14FB4984F982E86E4BB1E46F3DF3CE529BFA7B52366884EC66A1FB6DCDB9EC04A72D9405E0AF9FA1BDE9054A32 -135: D942DF0DF09AC042CD3B641144C98D8FDA0980BB037FC5C0E7F2E9A073B073DC4BB8A8C1F4CB5B45F5805C6523741ED0571D6779B15829B2FAA280FC60B50645 -136: AD8EDFF4F1B7AA1C63BBE49728AB9B165F7245B3D7102E6F99C261FC15D2D0BF6AFEF6A491720454A1349FBF5D848854875AC83A1156FD7F6E2A37AF26C07FB2 -137: 3F827E5D7DDBD54EA1DBA28CAE0154EB5FF8D8D973770865861B7CDF5F091040889D55C0E74B672CEAD274FAC1D4A559FD9185BE898AB8969B5E78681527660D -138: CB36F942BEB4E689E03249E1339A4C038970DA2EBEFEEC52522EAFC0673C1DC8919121D8D9D5D2C71E437FF4A6640784DC4D2CB84F8AAEFD32B9B9F2BD3D31BA -139: 9D6BBD48EE6103734BCD763BB2C2A586975DF08F1A49C59645651A6FC641A2D93A3D8E0A09A596F585DE9F700AF2BA4B0C6A7383EBAB422745E129472330481E -140: 6CC31CEAEF178C8526794C1FA47154264258731148AEB3694D443B11A59FE756E540CC662BA862D0D6745F75C542DD2614D8E27B25E0C56D0AF5CE6475BC13A6 -141: 3E92887FF9919469C7927CFC56523492ABDCFDA14D7FAD2BF1DE875FA05E2416674AE1793799B7A0703D4DA88CF67D09AC64004DC4E332ADB6B199BA6EE52479 -142: 64E5A4E32097CF9EEB8170B582503AF020076F2856D7E67C0ACB4C53C5F7FCB6BED9E330BCAAC7C9229D7875EFBE233877D5D3A43A25376EAF7804320599676E -143: EB9748309C6B70FFE82820052AD26EA99F43968D2AF359ADC804B2A76741A62EA8D710F018EA113C2259D0BD6687E3838602AE6C1DFF727AE985F059141C7217 -144: E1951B8BCB58CA75A34AF80A7A2B765CAD4257FE383A79B55BF21F180B75F6E5B08F09598851EEEA7D13486387618D6C6BF88CF23C0088A3F783F59A06D60493 +Hash: md4 + 0: 31D6CFE0D16AE931B73C59D7E0C089C0 + 1: 47C61A0FA8738BA77308A8A600F88E4B + 2: 9E7A1DDE4D280E7F389018A5CCC3ABF2 + 3: E9A4DB2923FAF634CBB12CC1F8AC5C66 + 4: DF8FA069C6121801FFC539DADD33FCB9 + 5: 4B3511308F7E71BF6462CF18F1184C61 + 6: 075582A51F87682919E733C84C9FD998 + 7: 20DDA7535A464D13E1763BA61BDC12AC + 8: 66AE1E305BED186780BB60328D3CCBC5 + 9: 503E90BF2375627262E58D90177220F8 + 10: AEC6B48C10659E3D6E18A2CDE8F8D3A0 + 11: 45EFB3704B6684B0750E3DEDBB2BCDA9 + 12: 7C9443DBCD858138E32604E0D288F7B8 + 13: 95E5B93F4EA79C082BA1745D3026D70A + 14: C913D5DE0BBD1C2F2838E46363732D97 + 15: ABE357BDC413C82C8BBAA380C39CB5F9 + 16: 22F840370EBB1DDBEA4FA3A40243391E + 17: 0A289FEC69AF967988FA40C47960060B + 18: B63D3ADF13B509C95C088F909A0B356E + 19: 36E8E07E3202E6F4F7E885853C9735C7 + 20: 1D363AFD1208A7B8BD486D51AEBFAEB8 + 21: 75E36A5445AD72CF5BF47301EBED1FDF + 22: DA7979688F48A6606D86C762DF0D8850 + 23: 6ACB325CE624372873CC01A4AA053F8E + 24: 94F9BFD6503DBDC58C163E33504B7EDB + 25: 3702CB296784290FC46B82445BF7EB17 + 26: 903510251E7A00415EA21B6AC268A92D + 27: 6DF08DB9C33C86CFE8DAF5E5BB865ECE + 28: C29C5223D89A6589DE9253AF050D3449 + 29: 16B935ACC3EC6C016CA1BBF727C272B9 + 30: 644C01B157A24584B02A32119A424C01 + 31: 4A3C6C73634759420C419426F7D43E67 + 32: 7BD627A6B82FF3D797FFF130D8956391 + 33: 811A69D6A8AFE3C4FE5B4EFD73804F6E + 34: 721BE5F4BDDED885BFF842868F62F4ED + 35: 76956871B22D5BECAD3E9A459B4A448B + 36: 4F2CF372771A13B4C0C1A589F0EDCF87 + 37: 084AFBAE8D22DF83CC760A61138E560A + 38: E1CA123EBA05CC4899731A593833F372 + 39: 9D9E277FA61993C018C1C61AE09588BC + 40: 85E0D0316F0B76578948810039EDE2BA + 41: 27736345D0F2B0A1A9576D17C47D0202 + 42: DC9F788BE7C97BB5E0D2DD49B9F1D2DC + 43: 27F1A9A0D166C495493877DF06E9C104 + 44: D1ACA7951866F58773CD4AFA3D2F5C2E + 45: 5204BE3729BD7D318EA8127BED82D5CC + 46: 10258B7939D81F5F8E0EA70EE6500B08 + 47: 4E699952169098ED3084DC2EEE7BC488 + 48: DF6ED8D604512088FCEAFB21808BF7D0 + 49: 904D0667C94C9C981D59BE80DEEEE628 + 50: D83483A47B64D74F9DED5278EE462404 + 51: 490EC8799A9DE3BDE8708DAF68E6888E + 52: 443E4D2D5F800C22D818927A29A38490 + 53: 48E82AA772E111FCBE393177F3123963 + 54: B72685D042162D5F30472281278C42F7 + 55: CC8A7F2BD608E3EEECB7F121D13BEA55 + 56: B8E94B6408BBFA6EC9805BF21BC05CBD + 57: 6AEC85410412FF54078A9FC72A55ACE5 + 58: 3E69F792BE88478883E46E867F3C93EB + 59: 3B057FC41BA700F0E46740B8FF391F52 + 60: 3E3C6DF9500BFF8404486A3AEFC6F16D + 61: F5AD65BA970ACBBB8335F9C0B9D7139F + 62: 75D45F8E48406E32ABF94D07FF9B9C84 + 63: 54BA4472FCD03E99CF28F90EED9F2AE0 + 64: 2DE6578F0E7898FA17ACD84B79685D3A + 65: 3A4F2CA37EEBDF6DC99A6155517B74FC + 66: E19DC463C01E1B712B9415202A2B5505 + 67: 61D8AA0838DEAEEADE2F26156AF58761 + 68: BE294AFF81BFEA3159564B8B61844EFE + 69: BB943319320EE7B3A029D7BCD101F92F + 70: 36239791A7BE33AD46F668B51D724481 + 71: 21DCC9A32031428B7B02F68E1450A0F3 + 72: 95C1B0832575E21982B17CCCCAF54556 + 73: 24939E25985A3B5620B19D7889E5E153 + 74: 3029C8B005386705FE7E4CBAA060E987 + 75: E8BD97C5C1A0CC9AD1F1BEB3913B22FF + 76: 808EBCA0B0E6FD1B30E4BA499C05EF9B + 77: 55BD20AB87DE2E536DDE22286D0922D9 + 78: 2B2E45FA5628F29DA06462378D17DD12 + 79: B90F1709241EF59F78666AEBB3D5607C + 80: 37854275343F079BCE1639C84D74AE1C + 81: 444AB5A4F39B765C5D67BB433D4CF0B1 + 82: 7E30CFA6363F9AC96607783710E151B9 + 83: 9D9252DFFB2D5023CFE34873EA6C43AE + 84: 49A70634AFCED27DC2DF2EB079F7A1E6 + 85: 4C976C9EF13716CCB468D82BD8C56FE2 + 86: 4EB382D16DDC18C31E6DBAC6CA83247D + 87: B16112D0FF3C6A8ADB19C13DF742F5D1 + 88: F703DC6100AE23D194E01EAC433CF28B + 89: A6527B1B907218063BF196AA91C73F47 + 90: 61F1A1E947F3F542FCF85AC758BA5D14 + 91: 12ADDEDCE418E9444AE34A40353ED0EB + 92: D1C35142C475D44A52CEB0A8FAEA7AAB + 93: 1F89912C1FC59AAB53C983B035661269 + 94: 2E7E19A4A6635AB5958DDA70B415EB06 + 95: B700B6739C0AF162D246AF07284A1AE8 + 96: E2B95AC9F876A38D33CCBBD7FA92D67E + 97: AEB4849953750A10BB236BAC8D5AB487 + 98: 82D738AF18FD4B26FFF61377EE921E62 + 99: 0E1451640E59CE0461A46934F174E237 +100: AE06EA64074E8C07116563E8E0893BDC +101: 562DCEB678FBFAB24141E591FFD471B1 +102: 7DD6C3C2884E483E8CA572C471B2D812 +103: 2A4C8E4EC2672C1D54A8DA8F32F04783 +104: 2BFED22E8810A4658060B95B0ADB60BC +105: 214D8F2DD099BAB68EC17189BFF8A8EF +106: 98E4EB29797C8E631CD4317AF422FB05 +107: 241A0F826F359A21CA0E6D9154D1E291 +108: A3398C0118A3605E7A7794B8DF7CA152 +109: 5B0A6FC8721F14EB8A03E9A5D87F173B +110: D93ABEC3EBD5672350C3C36F8FB00E53 +111: 659905751D1F614A78ECBB56D4398D06 +112: 594691B38126E028352DA5B28ADFD416 +113: 7533FBD1FD58C85D54A712EF218A9D53 +114: 654796E7D2F9F2C2D166F23B5AB18812 +115: 5D25B604FB75727AE7EBFF980F54D96A +116: 426A7709CD61EB6ECF4034EC83E073EC +117: 62E21CA2F8E39C03BFF56C8265ACB60A +118: B7C9DAAA89A29F2805DEDE790DCB9575 +119: 9C1067170940CE8F8E4745D362675FAB +120: C5BB35660E3D0A286A96EA3AA4922B3C +121: 8F3B6351623A0E482B57525474DC703A +122: CCC34CC280340681CA5117477DD86AE8 +123: 2F5FB6B41301F87A0490035DE4C1BB99 +124: A16E28DB3F331091E928F9AE3F1ACEB6 +125: 7D2259C98085B9BF7F5E36B29DF8384A +126: BDDA1266FF3E8FFBA1DE1B2759B58BCC +127: 2067886DA4BDE10A94B971CD740B0AAB +128: E1275970EB67D2D996E6E658270AA149 -Hash: sha3-384 - 0: 0C63A75B845E4F7D01107D852E4C2485C51A50AAAA94FC61995E71BBEE983A2AC3713831264ADB47FB6BD1E058D5F004 - 1: 127677F8B66725BBCB7C3EAE9698351CA41E0EB6D66C784BD28DCDB3B5FB12D0C8E840342DB03AD1AE180B92E3504933 - 2: 6A4E8EE496C5FACE43BFB748253EF689F1709986EDA8ABEF8ABD5674A0A9ED2B36A31EE29ACB146DB15F36A32B3F2D63 - 3: 427EB9311DB30F28BC248174A913C1E5A7948ABF0859E522D5B99E29672B3DBBC45FB0F538EE3C98B728CC47396F6998 - 4: 0F555B913FE5BCF7A9D3E3C3DB63EBA5EF404C3CF386A9C145C4021569DAF66BD374806C1FC5915BB0C27468F47044F2 - 5: 45D4F929FBD0CD5FBA12164CA2ADCA2222D924DE218753D31FBCDD847E735811F84FF4977B6B190E53BEF9324EDF3356 - 6: D990EBFD7654E00C1E29DFE6C4250B36B9A17B71F03086FF61F7EAC792E03C10C4A759E1539C8CBAB72DA794A35D76B9 - 7: 4CA74FCA7427EE6B1761EED920CEDA439C78DAEFC6BBBA71A0689F0F4427E5C4FDCAAA52B4914CAC70BE64954A6CF684 - 8: 4E3FD32584A399E2635A17B74B3AD3DD5B827FB0D6332288BE09103DC691EEBCCF083C7C6FEBFEE10F295067B88DA1C5 - 9: 8FF05682F7E10BAC763DDD2EA1A236231254CEE6153E431A450B2D2EF36DE5E42E254C5332D5C6D58907F8473251765D - 10: 43D220837F55B8A0058C5728E0255DC0B0075A6CE69D5FCA704BCE5CDAE189634D660B736D7BC71B32CEDA6CCCEF8EDE - 11: AF48BB366B53FBB3C046532F7FBFBF8F813AACEF151028D4E1B140C3654C6E9D5A9815DC33447DD49715A124E3CF9C76 - 12: F35855F43EA37F0C41C156ED3B56C8EE337BC2FF343F571952DD26B67019261397EB840A2FFD540AEC2623E2D4AB3781 - 13: 952817A26D4534B94EBA43FB88BABD63DA1BE5C63671CB2CB475E0ECF2A8DB9668D5772B00329FB6E570B4AF9390CBA0 - 14: 31E1FCCFB404608F0F72DBD60048EFBCBE9B1D4453A8A24E14FE7B65E910BE3FAB37BECB9B9E4C98FEC79554296005A3 - 15: 580A37B961A4C6CD76C0467BCF68C281011A03A5198F28CF98F599A4D5E9AC433CE2839A071429344E716DF4E861E6A2 - 16: 788BE9032A1EA3DEA20F24AC5197342274C8AFFC9AD07CBBE37BF1CDB32DC3A70A1C447C81ABFA49210D8C1724EA2941 - 17: 07C6E7ECBEEED331245ECD219837A4031D9FC4EF02BA10273079941BD4F7709184B06DC084D24B5F09F6096DA30D2C32 - 18: 9AAAF441D0661DD007E198795F025B7E6F76743418044E90FB949310842EAF3A78BD781E2BC9758A359C28336056BC7C - 19: A7D568F94E74086B83FF05AA32D9150CFC6E477F762244FEBA12E2CFBEE67861AB63CB443AFE04B5CD2251EB56014709 - 20: 06691A7F9CA061D4BC80E4F6A84C77F7A3214AB9849A333DEDA40DCEE95336DE1C6202AE1A235B304412DCEF03506CB3 - 21: AFD3FFA73E7D3D24747915BCAA13FFFEC26B2BB7605431C302BC0EC66DE11389C892890DE043FD114F7C778AE9CD369D - 22: 68E1608FCA35CEF6FDA2E98355CA92FFE4881F9B63AB1F6744B192C09C160B2EF23AC19379BA0443263541080007B20B - 23: E7907160D99FD530D19FCA90A1AB5927D51DC02EC39015C53279F0A0855508CB3FABC74E404F2C07A9144989DE88A869 - 24: 3AE1A7E6F8E0007F53167B85C478203B8445AC2B7B092DA29046C49BF3D9DA7541965AA2C78B7A0253CDD59659AAF7CF - 25: CC78688C451D9576B021329785D34BA871FE4F4EEA517ADA3C45615F875666C0CD090DC2456800AC7F6500D4E75197B1 - 26: 15F2E7C8944B16E99C855A5272B8FC0A38CE1F2D2D12C17FF1C667F392A5811D408D82122FC21593EC836F25A02093AF - 27: B4FBE81EED8250ECDD9DD3590AA882D2C71C9B1D0A203716270A8B83BB1701A6C32F584BE1471AAB8A7FD92FAE21272D - 28: 6633732CD2666600233B24FC6CB067503632A9CA6D0CBED03855535064DE061FA2D01E28B1D9DD47663207C8E4BD77EA - 29: 6D02805A80F7EDFB1CF91D61904F6B18B3B1274F6F11447DAA68252BB4A6D9614A527B1AC69456134CEDFCE3AABC5322 - 30: 6F9F419C1A77C4F3E4DD4AABC872C415CECF23BB28704580B17482325AB0627FE5CF6C77D6F98F7168FEBC57CEA15093 - 31: 19B75DA5D63A8BD3646DDDB644C7705F2869662A1A69B2A53422B5CADCC5EEECEE452940E1C98ADD64CDAFA853BE51E6 - 32: E086A2B6A69BB6FAE37CAA70735723E7CC8AE2183788FBB4A5F1CCACD83226852CA6FAFF503E12FF95423F94F872DDA3 - 33: EB9ABC6D96A2E5BE1BC45F2EFEFEF95D06E27E29FE0817757FB404F14C18549D12BBBAF81F43613A0151FEF81F9478BC - 34: 73E74BEF021CE493DE3FCEC13E29731F31030585462A0F243105F1879EB951A6DD51CD1F3175853956726147670B2D09 - 35: D8E03406F43A864BD81CCE2E86D454F72A3C0BF581B7003A6E74F0C5EF59D2582822FC523B385FE3C82F952B3AE1506A - 36: F807C4241853A8129613C004A59ADBD404A8A925AE7DE53025ABFD9F1C21FE7C90B7F6B1456B74974D20BF00CEDA0943 - 37: 5B42CC6A0B43D9F6AF81508AFCC8C48F6030D32820DF756A8B24870ED967113D19FDFF67C54263C61C190121330FFD06 - 38: 7F0FB5D4A81102B14C899BCB53D12B8DB092021873F610E813E64B4ECF789D5728AEC725BFC88F9C584E8B2CC612A8E8 - 39: 4287487DAC605A7CA671D1B4D320023E3323AE92F868CA9779B1719ABF9ACDBF63943D125525265130DEBB36B16B99B2 - 40: 531F055E0C4CBF7B5B12C75F0E345DEB8842144DE7B567171CB4018B148EBFAF487BF516D04B25E4E9DAF7D115149A3F - 41: 5AE617D89D5FAEE633E088EE6E4B33B20CDA06D9B13D4B9D3977AC6ECDBCCF52C6287F42718C8A8D96C4CE256CBCFC54 - 42: 44E0703455BBFC23E9D679C3AB36999ED0E5D740CB610409FBB0D171A2E48E82DD0B127BEFE8DAA97E9681B4E6E1FCA4 - 43: 9A67A07470AE13E23D86A3380FC19BF16FADA592C46E1F74ED847EBE7743B9F1EE6731E5ADB9DBC7A8311C630BAE196C - 44: 2FF7CDB8D4CD5C1114F3C501EFDE8462A900003AE406F15B2F471889330F32076C5B85ED7036B5425B54333AC707CD42 - 45: BD26DB7A72ED88F8723001E57E2BA9A9FC5C4E2B5E1FABFFF50DE2B294DC4C334932996093368E3F2E2C174D1463ECFC - 46: 3B2BA4FBCF43847AF48F9E49E6AD7C58809393D342B0761B6F95845E9847B5108C07B4A164B7C5134A108165E545EC40 - 47: 2A65F9DD13E44ABF4A784CF49CB986FBA576E04545CAAD665757F3C153EF7C21EB9AB70F444D8A9D13BEEFFEDA05E849 - 48: EB865E953547BD5FC68B1553CBCE1D3F46C761116EE881EA1A62E909A73BCAB32A898EC93FD1128E8FC603419C2D2D5F - 49: 836E4E947DBCF89A7CFA651AE678B9096590FE6B12DEA601C85D11A3EC9FBA4EDD4FC5745E50EB88A0CEFE8A80A48AFD - 50: 96165224C6EFE359842F6B1243A5D7FAF1EF426F5D519A5B4F4F7640380F22C7368AE71074649E3B8C38229AE26626A4 - 51: F069917F615F432BF15BD9C7E924EAC631F997C4C5A2AC8E00EB11E72C7958C3C3F6D73EBFEA6F43F2193FC5174AAD02 - 52: 25D362142CB9610002CE07BDFCC1F5CFB3E6200C07F80C3081E875C9DAADFD571C17D98E315D3020E92E5029E12B9689 - 53: A3B2ADD23AE5432F1CA23CA42CE6EFD0B9E30076BAB13B5E208834AABB4C44F9764EA76EEE48B5BEAFEB1DECC1010038 - 54: 58F8319D720468259175A7089512D3AA405D6C761573B112E90C4D96A588CFC82F6D38CDA680F6668C2370658F5B5F32 - 55: A9FB298676F605C92C722FB6AB428A0E8739D019EB7C11728627128C7C94B66ED5D85FC95852CC4CAE72B809600D6B27 - 56: D21E03C7C28B25E16E92C070361FE0A66D7038FEFB67F1684DA7CD498325F837018C92EC8009ED6CF75B94FDC758EE2E - 57: 1ABCE3D5590BFCE73548209E667A8DE7A17B8999BE5089BCADC8B0C76F2B2A3DE8B6950FB55CC9D0505A3D1F860CA4AF - 58: EA5E4595961E82F5D01CBE7B5430541F5EDE2E70C59CCFDAAD00E6F2E69DEDA1C74259AEBF914A1A250E20E79113E514 - 59: B2BC4CA8ABEEEBDD49EA57C0B1589F5DE56128259BD7B533DB877F27B4FE700F4536D611A422DE1591874B32AB5627BC - 60: 7EDA9D065472B813052506E71214917050D854FE5E73FEB3FADCACCD2DC640EC1D627FF99DB8BA055CFE616BFC6989EF - 61: C07811A5C2114DBBC250AF41D45AFD43E75CD109D14759C14AE32DB7904A96BC1FDA849D98591C8D43EF9279708E52FA - 62: 042DD9712B07795FE9AC327B74B17C49588CAB803ABB3C775FDA744B251C5CA982F3DE574EC37760B3234FCCEB15FB91 - 63: 327F97EE34EA7DDCE677A4F7CF3531FC5D47F57394A0E62B8E86DD5FD0690286EE28E6235E8FD296070EF2813C816AED - 64: ADF2EC9D4C135C64DDD796AF90462FF4EC1D3542CC7002DD8CFC20FAC50A0FAE01A65D35B000D191398A5EC57A1954E4 - 65: 75D6EA64D59EC622BDA970ED8BF034EF19840E1797426651198982FBD8899F6907CA3A5910E2CB44AA48ADC149D07B43 - 66: ECA433A801082C9B767C6F2E7817E0CD01B807DF6C2B3A3FD26EB283E771550AB722923A9440D2A68CBA7868B19485A8 - 67: 1792DBB0259E6C4BE6C5317F3D48E1E43B6F7F5AF6D12F24A523017C7B46924B24B0BCAFD85B10A92BDEA796232129E9 - 68: C282467400D993300EFFB83B189F4DCD1D1EF2A32EF5ECBA4AD23B6F455DCAB8EA3D6F16482DBFE286EBEF594D587AD7 - 69: 71007B69C9B15FA519AF8CAB73514A8B92534513AA19153E7723E56AB54C34BCE618BAFEF9AB92D13298BD35CB6E692A - 70: F82EAB30F732330E9692860682EA083586216EE761EA08C014C8A8DD2DC08FC9901942F311F63F63BF3AB8B4DAB14975 - 71: 4BB4DB01AC1C1D1A5DE657436ACA5275E4CAE772BD6AB9B358E0ED094202BE9600724A5BDFEF0461BA7F1DC2427CF155 - 72: 240914A09175AD5BED4CC2486F1CB2160EE182E3B71E17EFE5B82DFC0C8F0A8AD30C1E1A03CE42F31E5EA64074CD6F66 - 73: 8F8EAD15C47CD6F89ED7110D454759903DF4E1FF3E2229597893776CFF5195DE326080B897A3833C20325A3A127F9064 - 74: B815CCD36BD92DB0F74CAE305B7B77182EA6741E729FEF0BED0919C42E04329C2602535784C22E35BF8622468FF0E5C2 - 75: 0FBDE2B10A882163D2B52AE4FE609FCE18DCE971241FE9AB5DA3D486BD51E1445B14B65B841A4F262B994C2ABB588FF5 - 76: 3CE139E2B58F5E0CCAB2E4D3DAF8DB4CCAE348E97B9D87F5C9EEC91508DCCA697E85F8CC6CB399FEC80BA084528B9EB3 - 77: A9469B079964D0F8CF27E36762BD3F8E9F1904B4993AE622AE01AE4AE926E2563BD36F960E3E59341F92846F253580AC - 78: AA5FB18258FBF838FEDC3898B421A9A1A742EBF0BA7E8A8947545CFF5922EB0E2F92D8959002DB97121C93861DDB9643 - 79: DCF1486489AC46EDE14EE46C0642B9456E370B45A52C8611714CFD618CCCA42E63A61384DD7615F4042F36719099C761 - 80: 849BE67D56B19F08667FC7A6CC7EC5A5813BA6EBAB51BA30B5B1EEC99A7CE364C6B3DC588F389C830B174BD946EE6913 - 81: F67D9CB19E53910982C73B72F1894ACB02F902E25CF6050E4289A695365A3CEB482AF6215CD0323B4E587FB5BAB392C2 - 82: FA36BD7CFE938653150FD74A4042BC93A8A822E9F8173571A94ADBC1DC3429D5C531F516D04228539D11E496B984DDFC - 83: 861A3A316AE078F5DBB8104A20840D578D68B3301753F08D831D077A71C7665D104766E50959D2549ECE4680F9F7274A - 84: 6D313D3151483C6DDC5CF8CD6AA184A397EAD7698BFF1E133942C4325B5341D4DB01ACEA6372D893A4F9998039B80294 - 85: 2B330544810368EC3889068A58317A0E33867F60F80CAECE9DD1C10F0BE08C3D128881048E4401ED3EEC7F4AD72CD88A - 86: 7CF48A30A434E6CADECEEB13E1012E6E96388F1E70B1398DF1C1D698DCA96A54D93BAF256D2356FF37B8E6512F35C969 - 87: 8157A2A24F2B087872084B40C14CE8EA874C5F3CF99CC7EAEA5B20F129D2D77C79C6EA42B12C2C6CC557E2CE0DBCC1E4 - 88: D4CBE9A60C7EAC9FBDB9AC13442A0F8D49141B11D3F9239E2318024A501C72D2DD9ECA5401E7F97A7569F905F414A8F0 - 89: 94145EDD14EE5941B0640ED98C6966333779D21B51E3EECC046E1833210924F2B4A113A7E6810E2B670FA28BCEA84817 - 90: DC5F8BC7D2AE1B645833C72C4DFE753ED9E742D006D20490BB52954BE27D8556099484E5C432D598496C6372059B6B2B - 91: B629CDEE3C53958792CE699FE35B2678BABA9BC6F48CB5FDB8A575F180C72301CD6ADD8690E02412E6B8CE8327358F52 - 92: F26B761B5F75F407D5AC984C3B81F14CBF198A76C7DE0692253603D422EF8C4926B018C0ED210ED8549AC78BB543C64F - 93: A88234F5311E7438E76AB5DB42EC62878DE377B74A1E951168A2D5B1D00E2C2AD7F9AD322F438C58E6E879CF045C390F - 94: B153A0BBF5BA9447B0BC53FC71AC652C279015579917BEED4BDB5225BF592D63F871034C93A88518A98D0DF5490E82CC - 95: 4024BF283702055A9460F24EFFE8963468FABC1D54EE4172231F786652BC9D45CDAC121C88F92F4B4A707670D89E4F05 - 96: D6E266970A3FDCD4A833DA861599179A060B576959E993B4698529304EE38C23C7102A7084C4D568B1D95523D14077E7 - 97: D7992EDABD2897203B1FF128271AD5464ED507900D9AD3D0701CD4896AB93E76DBA918E43155AB908E6812FA40C09DA0 - 98: 7833168F67222DAFFC2CA272904E248063BAB4F8973C69D0F85CB665323389F15D533C2F3E8B55F0C3E71D59A709F9DA - 99: 43917A5FEC80AA876D11919AB0C739681F912A998A190B051F75854388F1908BF5306231D33F4E30E50994D0FE7D949B -100: F433C88078C2BAF1A5818887F8C36D34FA62561CE3DB34EB3C9F8331A357895DD29DC98286A0ECB64601B177873FF813 -101: 1C3A5CCC5DC4030BA16305A85F59DCED8CB5023DB4479E8B3749A7004AE77BB18996931AF4C16409EFCC0C72CAA4C1A1 -102: EE8A6C983DAAEC5976CB0ED4446494D348D0D571EB4C77FD8CF7EEBDAA0733F96DE2BDD8CDD0C70F5FA4391A336107B9 -103: 1F91EE551AD18F268876D1FC262F137FE196580216C5193819A95EC5222537D2A658DD129C3D8080E65EC7460F1F4704 -104: 5B8D0D5CF8B41BE507BE8FCBFCBDBAC3A28EB368D430FED6780AAA78A93A8DA4A6C50485949CA344F228BE91A96005A3 -105: 4A2F0A8F2F1F4CC4605CC2537E0BE28CF8B465C30F0A54B494A7128EC54EE4E85706B5E47A5697344D15CBF85680CD40 -106: A29BF5A49ADCB475A13C656F4A9D529CB7CC586B1D931646DA6172D7D673EFD745EF16040099F435E96168B0F4363E62 -107: 8A6E85CC4BD8B2C161C2AD6DD96B494A33F6F5839A7236D0D9A0747B888484742B8BDB1A6CEFBB4DA774B8F5A1059CD9 -108: FDD86101B1DBCDFA8514CB2668728EEB47BAEEE250794DFA7955693A3C316B2A95532F11BECD8359D6EDA99912DC059F -109: 3410059B9C81DAF99CA10CBDB58D6EF9301682AF4B75BCDD5B50A36127E7A2EF4CD185F10AA707C57B5F0D9FD6B6D18F -110: 60D28961A90F79CC60D2085357DA8411F6BEEC0C9FE1CB3FDBC2D80D737DD83449D6A6E3D347A6E286629DAF87B66178 -111: BCB12B36F8BC6D74E23736D19008D07AD6A9CA3E29FC17F5D505BCCABD0F2309D7BA11BA421F14286ADAA5575FCB83AF -112: AD107FFFD282B3F49F01AB1C88F62E88F779671721FACFB7F969DF1D96E942FFE13E1629B8DF9BF4C4B13B218FDBDF3A -113: E65FF7BDA6A992B32D4C6F8A13481CA6CD80161D6F44780D1244B02F8B06533ED0630DADB4954CD7B88AB6FFC35399CA -114: 123ABDF1D6B601CD040090006D6F80A9831AFB48C95DF4065E1581D334F207F66360E57720354C76AA33C57AAA7CD706 -115: F04B9EE00D64D6882A32B7F1191B1B30F814C69153143ADE1DEE49A710088E938639945AA20FC9C6737415F44E3CB9DC -116: 6F7C0F4892E676B880D4207020F41E0FC4A2F307697A25E69529C0B9B5F8CC0F1425577BE5F783D3C8A02A465DE18556 -117: D821A2E3EF04C924B3FD7D953E72675933B82847A4891FE260C6B8D53B2DC5AC5AF0BDD2B37D979024E91521EF60D877 -118: A7E97286C045A4BE5063079029360D07BEA0D325A70BDCE30076E761B34D363B3E061D33BBBF1BB26D65BE918DB4E767 -119: 00AF631F808431398E9EF320E97EE5C28110AA9FC9DD9365D536E8170A7CF3F36699A0B99E15BD7DB8E2CE614268D9FA -120: A160CC9D12716DE4020C02B259FF712A7C4CE3488A8D22871CF5CC13B79F110EB35C6377046268E9237016641F51099B -121: DDF7D046DE9C741C67E4C6B65F4EE6790EDF7F76A3AF7A997EDF23BC1C7650B4311E53C921B56520B95AD52B505A357D -122: 5DAD82A9A04DAEE4E7636E42801A1FB9248F3F0FC8D7337C3838B3DD4AE5F08583A00A3295FCACC1435A9D0E670C1654 -123: C193DCFAD7E89FE66E7E3D2664C541B407DDEC921EDD35100393EE4BCDDAA9F086C2D023E161A604695A8333BCAAD4A2 -124: F4421A9C548AB2485507FB2C2ACDDFCA6E9481D10E9057B96A0BA6909E308405ADEF66D8586C1A91AF25BC4DF4F349A9 -125: C250A60DBAC9DC3AA06DC752D6ABB5BED93FAC50BEB8A2C52FF86C71331C55A1D3BE05E4136B2DE811990BA28D1CAE36 -126: 750211AD5768DC4F99A236908DC832191AE16F65C616CBA0C0F53E60B98CA65C5AB2E0D1B7086B8E1001BA85AABBC883 -127: EC728F56EAEFC03913FD2540AA1EA2D10BC4631A074A793AA8DB687E9C3FE8B6581C37445AA6C2C90BF76A489B62D2C2 -128: 77C4B75F9E92EB8DB8E3F9074C3D3ABDF06BABC9868B11F789112FF5822F6115421E0EC1627AB580B830E6C12DB692E5 -129: 5E7ACA003B911F6CB318C1182631D9252F90750F901A377F5F4FBB87BF2A55DDD11D87B1D6A51658B3A20B1BAAA296C0 -130: D33BCE776E6D67139EAB8DFF9FAE5A7F012EABA15BD35EA1D630830E6A7032A9F2E277711FB5BCAC6AFEA7F390A876D8 -131: 060858A71D11780D60E48B47C1FC6357AA0AB77974A38D1247DE8003368E5721C5A3B289F7AB2DD42EBF2C42282F5624 -132: F3CB3F6C05914501C89FE8536163EB0CCFD2D9E63A1591698DE7AC0E3CE38835A9F623A208DF37687E1956115CA2E1F0 -133: 72D7F791DD6B7E70CB118634B458BF6977A64B1A6C27A136464AE12DB9E7ECC5CB2D7D73C8FAF07D4D93D1B2E2F1C0DA -134: 0DD4000D8A25D0CFFDFE2B7151FC610CB5BF25D9249D855CE8D0D647D2151235A12092A75233EFA7820FCDFEDC59041F -135: 25D2BE1F5A681F8135992E0CC18A7B0758D1A880EB3C64D9C722F80D68B744BB3A89C223A0C38164CF4A423F91F8A533 -136: CED899B993A69F66251A7872FBB87F8BE5967857B2693E3FEB032B3440DD94B78CAB782DEBFA10956642AE536A8241E9 -137: EF446C45F31F98FE3AA92392EE4198D8C797128CB87DA84AD008AAD1E1D972D0C6D98EF74E99B4BC5B97AE92BE53EE27 -138: 1A7EB818F91840BE12AAF24D39D5C81051FAF5814BB64DFE697F23B2822BD3537C1E7623DD9EA6C06CD2693F054B3E24 -139: 0F35DF35342D118F3372E3682BD702B04C420F239106C611219DE4E0B1D7121CC9484478A7F4BC3B5C0389BB82C8046B -140: 0E10FEC501B24CFC5DF22085FC8B7D43638DBF65709304FB3A6A1BDA7815F2D0C58EC6BF257D6B16B087C415AD35C1E7 -141: CB6B185E7F5E232DB435F2D02F6E8BF16DB60F895FC92CBC7FBAD356807C5D693853FE638305C4D163D7B35D51B9041C -142: ABE7A3A2309B13851157043658589D3F011CF2B58DED164CEFC56654146F1884ED73D195C5176EA879F7821E9C332B3A -143: F25214F92D3B1CCC162C46A74AD8FAFD33E00ABDCB3048744D93D36BC77F2796F92D91CEA8946B357F14F249792DD8DE -144: 2FE2A7AB6DFD014F013C662E4D669AC595F7D80BF8056D156BBD0135DE841C17E7E544AABE568DAA2650EB58C0506413 -145: 16F18F6D08B03AD95691DEB59615BBB7330FE8F75DCD5F7B314BC022D3E27821083EA37EC2AFF3A22431305BFB315342 -146: A2294C64B7941B21124AE0B3A73D54D139D67965021201FD46F4F59BF7113001BA8C76B0E6C29143070A40966D24D9A0 -147: 6D1E58EF4EC828467268A92EEE3F622FE475DE8B1CEF0A38031C9CDBC7DB3804A683FCB9257415E904883EDA4D8B93DD -148: 8D6482ED3C1B5B1903D921D9B32B197CDEA5ADE41BE202CCDBC5709DE4D6AF80E11CC2724FEDF2C2D77BD8831A61C339 -149: F726B44377CBAABCDC3B4875D4B369769EF8F2C11D28F23ACF196A202BD3364ECFDC4B032F3E05E8088498D6F32ADCBE -150: 12560A76E0A4A4222AC89EC18ACE2843BEDBE0EEC4CA689C6A9E8C71C64DF0311BA4C14957C54CBD190CA095E386811D -151: 144E9531CB3D3379A6B1A11F335BCD21C712BE8C6B4511EAE05EA802AF5D78CA049BE38F886777A8FF9449B02C4E0E8D -152: F8E53817BFF912A42876FD20E35FD064A05F39CE42DEABEFB435DCFA2466B4ADB3C23765F13BD31E3DBB0005D695055B -153: CD728182C73A391043CA41BD05614CBA964919588017F3C7BEDCAB9DB3F618250FA3418C60F3BB0835E27B9F8964BBEF -154: 02636722F4F0E21728201ABA1C86B6BA79B57E4C3AEDAB300A7D03F973B938A74044EFE7A477684C4715E8D9335B6188 -155: C9917BB005AD6158EF50A2A2B1C3680F88796C70C9D3F87963E5D652853A4EFFDF26645811756981132C09FB855B00F8 -156: D21D724FE7C4064144A2159EEDE9331354998F631F9975317732FD5BA049095B741D9B200C027CEF5D870F1C9DB52EE2 -157: D417B70CEA7FAE4CC1CB195A5159FADCE9A8642F9B229EF1403AA8AAC3C3799C4E9474356BBD2B7860B74E55142FE048 -158: CECA34BE220603EA5BEB301A360255314AF963E0D0FDD0626E578C0B42A5F44686C7F15B5062089B7809CEA61DE6394A -159: E7C2C9E69810413212B0DF7BA4B361431D4F3D20AC8730FECEC454EBE12F18866B9A4B5227989DC61C862D29786B6595 -160: FF19F7FD7BA1617E7F31397D0D1308E035860042DB2DF5AF812895CF2C9EA36AF9234D730D2A633D87C8D836B1729BB8 -161: 672D8E8F7E7AD6BCBB602F1F7F15DE7D59AD72F441778C061E4961A40A991D26E151E7A5026C2DF69707D19BA1A4219E -162: 10381CAF7829383AADAA9569CCD84ABE6505D78817FCCD44252D71D1A6620509318C26F4F1193CB6EBCB0450C9BE9CA3 -163: DEAB3596909B7463E53801F6748DFADBCD615FF8C77AC2F78D12ED230B758CA717F157A4A551B7BE42D95EAE41424363 -164: 3E44362375F671109371AB12C4E21DF3B4F69FCD0B22B5B408D52DCA65886A335AA02C119B1D4DDE5DE316A0426762AB -165: E289F3866AACC5FA881B43A44699D69887AF10D96CEBB47D20713EB49C50B3D1F9D71DA9EA4F8D75B194A84738E7A7BD -166: C93A6A3F09E1A61FA86309398663486E96CAB9D6FBC630B3CB53F520EA77E18806597944CB780193EA79D4AEFD65E20D -167: 12442EC232A21DA5FB424E8C51416FEB6E1EDCFF3476875A80F7F2237CC873BF85EE0AFD93C3F7BE5C1B33D184FBCD4C -168: A4F7BAC5ADF27C96BFCB084091D93C51B4E6E8442A7A1D473171C2D5A73F97EA8FBC4D619FCAA642D3B3AA97C9D7CBC6 -169: 6858BABFDD40FB2890E6EFD2D32A06C5C9579C1ED70ACA8796BD1B512E61233B0A3114CF78EF02CD9B2407C9D26447FA -170: 75A5AF9FBA49DF9E0774B77B60BE134A9779DFA560AF54FC632E0275284DF5A006ED485095D8EA57A358D748B778A111 -171: C8BCFA5A29CB50F7DE56E258806F0E40BC8D4008EECF765F444506534FBA43B1560CC5B925CC825AC23FE540A5223225 -172: 3D8CC6117A23AA303ECB4596C85C070F87335EBEB1CD0C0FB78455EE271E299E5D68E43545162A12B1B31D4C89200BA9 -173: FF4033A73D1615DE86C770E25D05919C0CD18FFB50F3E8F832BCF0D65DCF91FEF57C3C336807A07708F243946091C6B1 -174: 2020043B473B8A878548E2D90844C0AF4F51FAA8BFA7C4A80573336840C8D599E328EE197688443584C57C9B0CF2B67C -175: 977197E70CC7B75161AEA543971E09280E04ACF639B031D954BE8993CC72FCCB50FF1BB8EBC7A9BED365EC65E7F0B923 -176: E954B99371301C4E29225E93BE7A8C42864ADE844857B25F14A42854D568155398AA69936DA49FD268776DAEE2EAE75B -177: B6DAC53FF0058619CECED87E7F0A8DECFDCD44EF201695EFD744970B53C2110B34A42FFD8FC3ED385D22515A5DD7FA00 -178: 338D89616AD5FE0C81FF4D64CA274F29FA2BB15BD1C03D551180EE545D7588B961EE59B6A841BC107473A5AD9D3003D4 -179: 26D29BE4726EAB64D207EBF0B0A653C5BDB49D4BE0E3D085381007182DED1F4ED1575BD3D951711D6D49830F4B736B1D -180: B4E2F98F6CF352EEF41148459B3AA81AF033EB4EAEE10517DCFB05D84EF9552241080A2CC78C60034BCE5760821249C5 -181: 659E63335B9E946685B923447F6E08950DC97736214D38DCB0A1F46CCCCF474C204A5BB3702E76504C3BBA59C238DDA9 -182: 64451295F7CE5D38916B81812E4B10E5D2663C311A43F02F927FA0105247571755C5F9931F3F521F4616B45108164AF9 -183: C8B6B136BD8E8EDDCEE3637C3872B9955C63CB62DA669ED5C664AD31B9A77D8A91F8E504C0B51DC03E30CA59F45AA967 -184: 9E0BB33CEAAEA09F3805B152A2DA475972A8886539B45B3F016728364083A11E345A2E32976277D322DE576A660696F9 -185: 86CAF7B9DFB6BA1B79ABE881DA5891EC98E61ABBD4B7F889CF5B4F01D9C3AFCD0F8AE5FE9C0D967D3F1E6106BA99C7A0 -186: 83B69D4D2F1182AD64F5DAC98AF3EB4B8817A8DE9B9D3C1159B3D1D1AC4BB763B9CFAB6E89B1BE6C289C04A7983B2958 -187: 693F93EFE5AE69C773B6BC623FADF4B8247086EBB424CD393742DCF2003242C85A843D28D98394DFB9FC45EF297E310E -188: A272286F6C14202359290D5503C385C7A09318541F27122CFC1E008EFA1AA5F8E86A7B89A799D9171FA91FB1B4FB79D0 -189: 4B0AF4F1AA4F03B1A12034328D2588635E3CE69C92A4A23B99F9E9EAF53CB80FE24964AE5CDC80F82D2C4F6B1204EC69 -190: 79BEC27CDF535873FC2094929ABEAD60945390DE5D1B0B6F978B9856F1EDA2230E7D44458810CDB6EBF9E1FD1D769903 -191: D2D19D934FF6AC59743FD35E538155CFE3402DB68116E8F0C5AC883302D2D916A8E704F4860F4BB8439A4D8A2DD188AC -192: F47FEEAF14CBDFD7A1A41CF15A1D819095AA673142EBAE96F43E27C04990B1A8E88D85E3DE952C01F931A32964F74B71 -193: 5899BAF4ADE7284EFD3E985E20145FB8E1B8D37B26A0D8A286C342D27BF65BDC96078E81802AAA0E9817AC38B6CBE259 -194: 45210363539CAF8ECE76FCDEF07053C23DB49A4298089BC06B001F2D03712AA565A4E3DF20828D251CAD574E1BD4CF09 -195: 68C4994FFD5DAED4071AD382A1F5D3692AE12BC12974A13E4EC458916000F4699DE8C41DD53492860AFC6FC32EF3394C -196: FB1922DF64C07983F8B288602BA7FBF81285B0A4367BB18047ED2D520B90776819CC900169D38367D3E3056D3AF15916 -197: E26F2631DA328E3475A4ECBC2CEE90FF6C07E60DF1C630164193FEA932109B8493EE6CF95C3E4EAD01CD159FBE2D6338 -198: AC80E42D1F3CECC2C55CAA648E6E28C4676F4FFABDAF1F91C652AA44265CF1E261842308B19378F14A035D80ABBAE5FB -199: D66C1CA84D69B546D2E54313DE3DAC651B0AC696C2AA9909A6EBA20736716D9262E0163573F6F1C3F179E9F1559F0EFD -200: B13FEBB1B3C54A7C6B69367F693A1D1F3145709B6DDEF23FF15874133EA1FB9CFA48EE7FF4EC9AA987DEA641E33CCDF7 -201: E1ADC09F58F561140C959A1F1B8945E1098DC62272073CC2209B65A089CD714E0A472A1325BD2F6B40E4343F933D62D7 -202: 499C8B1AB4D590B225F5E7C6B85691C4FDED5BEAED16968FF3AB9B25FF1412AE970C153584B731CB763AC7DD6BA3D785 -203: 0C9EB9EB4F3C025488CA6526A6B503EC466B62719557F00055064708A819E76FFD24F90A1F9D6851A6FCADD52E0499E9 -204: D359A919FFAC6B0041AB766E9F2D0B02ABB5E7CC491AEA8A0EEF81AAA58ECA52E1262C58925D9FA4C59E73E948E5AA54 -205: CFFFC9AFAF1FECD47E4554C3C94FA6F4D08887F1DCE53D9E78A4F224AE38AF650812334E1845CF60BBFC9F8A72F0B949 -206: 2DA46ECD91373DEB9675C75901D3BE59ADA8580BC8F71DF2A3FF1AE02310F23681B6C6FC840B492E59E017686EBAC7DD -207: 05C54EBCCE483360359D63BF0AAFD97E2B15B00EA40C6152B3BBAC80285711CD0B00FC234CDC214251E0AA13E38A0008 -208: 13A929EB9E4AC18A07DE84B17E79BB420A86924B9DC4CD80038DD61F17770FC42460F2A0A717DD26FB6B6B4DE357AE02 +Hash: md5 + 0: D41D8CD98F00B204E9800998ECF8427E + 1: 93B885ADFE0DA089CDF634904FD59F71 + 2: 441077CC9E57554DD476BDFB8B8B8102 + 3: B95F67F61EBB03619622D798F45FC2D3 + 4: 37B59AFD592725F9305E484A5D7F5168 + 5: D05374DC381D9B52806446A71C8E79B1 + 6: D15AE53931880FD7B724DD7888B4B4ED + 7: 9AA461E1ECA4086F9230AA49C90B0C61 + 8: 3677509751CCF61539174D2B9635A7BF + 9: A6E7D3B46FDFAF0BDE2A1F832A00D2DE + 10: C56BD5480F6E5413CB62A0AD9666613A + 11: 5B86FA8AD8F4357EA417214182177BE8 + 12: 50A73D7013E9803E3B20888F8FCAFB15 + 13: B20D4797E23EEA3EA5778970D2E226F3 + 14: AA541E601B7B9DDD0504D19866350D4E + 15: 58B7CE493AC99C66058538DACB1E3C94 + 16: 1AC1EF01E96CAF1BE0D329331A4FC2A8 + 17: 1BDD36B0A024C90DB383512607293692 + 18: 633AB81AEA5942052B794524E1A28477 + 19: 2D325313EB5DF436C078435FA0F5EFF1 + 20: 1549D1AAE20214E065AB4B76AAAC89A8 + 21: 7E437C81824D3982E70C88B5DA8EA94B + 22: 2F5F7E7216832AE19C353023618A35A8 + 23: 6535E52506C27EAA1033891FF4F3A74E + 24: 8BD9C8EFBBAC58748951CA5A45CFD386 + 25: D983C63BF41853056787FE1BB764DBFF + 26: B4F24C1219FB00D081C4020C56263451 + 27: B0AE6708C5E1BE10668F57D3916CF423 + 28: BA7BB5AD4DBA5BDE028703007969CB25 + 29: EA880E16EAC1B1488AFF8A25D11D6271 + 30: C7172F0903C4919EB232F18AB7A30C42 + 31: E9E77893BA926E732F483282F416FFAC + 32: B4FFCB23737CEC315A4A4D1AA2A620CE + 33: 5506A276A0A9ACC3093F9169C73CF8C5 + 34: E5A849897D9CC0B25B286C1F0BFB50E3 + 35: F54FA30EA7B26D3E11C54D3C8451BCF0 + 36: 07602FE0229E486957081A49E3F06F83 + 37: 7C4BBA98253CA834BF9ED43FD8B2F959 + 38: CF8DF427548BBFDB1E11143FDF008B85 + 39: 1431A6895A8F435755395F9BA83E76BF + 40: 30DD5E4CAE35BA892CC66D7736723980 + 41: 8EE247A1063931BEDAF4C2FA3E4E261A + 42: C32CEEE2D2245DF8589F94FCDA0C9F2C + 43: F25FA0E071D1F1CDC6632C6B673BCCD5 + 44: 370491B643E97577F4F74BD88576D1EC + 45: B292BF16E3AAFAF41F19C921068214F8 + 46: 52921AAE5CCC9B6E8E45853419D0C80F + 47: F1375BE31969155EF76F04741CD861D7 + 48: 04605CA542B2D82B9886A4B4B9ACFB1C + 49: FA887BA0FA491FAAACBB82BC5FEFCD5B + 50: 06470E932AD7C7CEDF548B5CCB9D4806 + 51: AD130B245E2DD894267CB0DDC532D169 + 52: A9EEB95053682248608E97D79E89CA82 + 53: CC26A3DC608268B98ECD1F3946C4B718 + 54: 33DD62A2DF6538DAF1CF821D9CDE61F9 + 55: 6912EE65FFF2D9F9CE2508CDDF8BCDA0 + 56: 51FDD1ACDA72405DFDFA03FCB85896D7 + 57: 5320EF4C17EF34A0CF2DB763338D25EB + 58: 9F4F41B5CDE885F94CFC0E06E78F929D + 59: E39965BC00ECACD90FD875F77EFF499A + 60: 63ED72093AE09E2C8553EE069E63D702 + 61: 0D08FC14AC5BAA37792377355DBAD0AE + 62: F3CDFFE2E160A061754A06DAFCFD688B + 63: 48A6295221902E8E0938F773A7185E72 + 64: B2D3F56BC197FD985D5965079B5E7148 + 65: 8BD7053801C768420FAF816FADBA971C + 66: E58B3261A467F02BA51B215C013DF4C3 + 67: 73062234B55754C3383480D5EF70DCE5 + 68: F752EBD79A813EF27C35BED69E2EE69F + 69: 10907846EB89EF5DC5D4935A09DAD0E7 + 70: 5F1F5F64B84400FB9AD6D8ECD9C142A0 + 71: 3157D7BB98A202B50CF0C437AA216C39 + 72: 70E7ADE70281B0AFCB1D4ED13EFC2E25 + 73: 0BB96A503B1626C9AB16C1291C663E75 + 74: 5BED4126B3C973F685FCF92A738D4DAB + 75: 7523C240F2A44E86DD22504CA49F098D + 76: 6710949ED8AE17C44FB77496BEDCB2AB + 77: 4A4C43373B9E40035E6E40CBA227CE0B + 78: 91977CBCC32CDEAEC7A0FA24BB948D6A + 79: A6A0F1373CF3DBEE116DF2738D6F544D + 80: 761F6D007F6E5C64C8D161A5CED4E0AA + 81: D44EA4D5A7074B88883A82F2B4CFBE67 + 82: 3097EDA5666E2B2723E8949FCFF2F244 + 83: AB247A3D9BC600F594D5A6C50B80583F + 84: B229430E3DB2DFDD13AA1DA1BAC14D5C + 85: BEFEF62987C6DCDF24FEBD0BB7CD3678 + 86: BFC3E5C7C461500FF085A66548378E0E + 87: A5712194537C75F0DD5A5AB3E9EBAF03 + 88: 8DAAC097E9044B85B75999D6C3BCCD24 + 89: B8124DF21129685597C53A3F606FFD28 + 90: 8FBC4D795C22D958248582A8DF7332ED + 91: 36D217135DB136B2BDF1617D7E9C79CE + 92: 1B3E6271A3A4B663C509A1255027CA99 + 93: A25F596574031FF9C34314C1B1F6BF34 + 94: ACA7017E5BB62BFDD5BBFDED78C8987A + 95: 8129E53A694ADD0560B1534B32FE5912 + 96: DA0E48224106C7535A4CD8DB2AC7B8E3 + 97: CBD4ACE3D766D8E44F63E0DE8F110F04 + 98: BDC17A0EF2777512CB402C90E9D13E31 + 99: 47695AD6AF968D6F1CDD2D8C5C87A466 +100: 7ACEDD1A84A4CFCB6E7A16003242945E +101: 225489D3D073AC705F7B3AD358EABAB2 +102: 301DA87A7B2EC27514C3A2789D5DBE49 +103: 16222C503718F1420958133C330FE3F8 +104: D778CE7F642AA23355948477DA4CC11C +105: E873C37F8977E200A594B815E1A87EF3 +106: E8F8F41528D4F855D8FDF4055BBABE2F +107: CACF3D3D1E7D21C97D265F64D9864B75 +108: 6BF48F161EFF9F7005BD6667F30A5C27 +109: 42E7BB8E780B3B26616ECBCACE81FA1A +110: 225AFD8EC21F86F66211ADF54AFC2E86 +111: 4FAD3AB7D8546851EC1BB63EA7E6F5A8 +112: D1FEC2AC3715E791CA5F489F300381B3 +113: F62807C995735B44699BB8179100CE87 +114: 54050B090344E3284F390806FF716371 +115: 50482241280543B88F7AF3FC13D65C65 +116: 4C36F27D4786FE2FB8CAAC690B6D62F7 +117: 5A0EDF0B97977EE5AFB3D185B64FB610 +118: 4541055C6675B614D27C537C3BB15675 +119: 1C772251899A7FF007400B888D6B2042 +120: B7BA1EFC6022E9ED272F00B8831E26E6 +121: B0B2D719A838DB877B6D6571A39A1CDC +122: 800AA956EC16F603ECDBA66C2DC6E4CF +123: 8827D2778287C58A242ACD4C549BEB31 +124: CFBC5AA0B61103C1A982D8927B26F575 +125: A1F5B691F74F566A2BE1765731084F8A +126: 80749BE03F5724FA4CA0AEF8909379B7 +127: 8402B21E7BC7906493BAE0DAC017F1F9 +128: 37EFF01866BA3F538421B30B7CBEFCAC -Hash: sha3-256 - 0: A7FFC6F8BF1ED76651C14756A061D662F580FF4DE43B49FA82D80A4B80F8434A - 1: 5D53469F20FEF4F8EAB52B88044EDE69C77A6A68A60728609FC4A65FF531E7D0 - 2: 76AB70DC46775B641A8E71507B07145AED11AE5EFC0BAA94AC06876AF2B3BF5C - 3: 1186D49A4AD620618F760F29DA2C593B2EC2CC2CED69DC16817390D861E62253 - 4: 33BAD5430899ED6F8BEAF3E732B2A2CAD1D40B7C9DE0CFCDC7E0BC0756803A10 - 5: 8305D46643F04116DDC816F91544B7DCDC2A2CD34A0255498BEFCE0795E21205 - 6: ED2479F84980D846CD12447F241059AC1679AC30584443D40222FB7E1639414C - 7: 59B1ADD388B7D625D2797894A4D88C7554A796A5A3D8AE232BF5F86BD72D5756 - 8: EB4D0F2ADD0F6D0B26F0C65DBE71FE617CC6B43FB403649E82CC8BAB41195F4E - 9: 5257E34D7BB964F59AE4A46B3BA5921E04A550C2B1E04F268B297E358EAB1362 - 10: 605A0514059192E26DBF06CFAB86F3E9BBB9A69363D4BE925B2246DCD8659A95 - 11: 4585AE166873F94A8930881014FFD14EBCDAC1A0D599DC57EFB4989B44472095 - 12: 4ACBD92D310FC38697084C1BC7A79516A9BE20701DAE8EB36C643F07F45EDBD6 - 13: 154E8759089D17DDA455F74BBF702BE99F678D58AE442EBE16264A7822A8A048 - 14: 85A3D4E61229DA1490E64093E6118A733E3021B4678256335F437251F7D222C5 - 15: 89C25ECFDAEA85B2F360C15A2ECF31F0BD59A0CE821A1AAC31E2F73093DC4CD8 - 16: 39462D2A2320F8DA572A97B0B39473D4312E0228B23E2C2FE0AE9B6C67F2343C - 17: 6A37657A32560869154EAA9CA59FB648F3A96B62F5BDADD604BDFE0133783048 - 18: 636E904C72670EF3D78D9F0E121BB2B5EAE69E806FA02314688D65600424349D - 19: 6AD0DB215FBD30E7AE5E22C2841357624D5605B1FC9FDB96882BD42529E6A994 - 20: DB32380ABE23EF51F0547AC0FC4D095A2A16445A00FD8CE2E52628E189BA562D - 21: 331CC1C851DF863EB365860B2BC76E7E1E928261BAC6F1A4EC0A25ED00D0E2C9 - 22: 9F5577BA75324007CD66F9D7F16BA6E74313D853E791FC865AACFCF63C561799 - 23: F0E872C81033E67EFC37DC258435966A0D1504BD14C2750276092ABD0F9B0169 - 24: 2AADE36CEB570D6D3A92FE79DCD612CFCD3226F020F205A74FB1213244EC4857 - 25: 5BE74AA323CC1092D1A73A574496658CBB4809F4125AD275FC112E990BB8C1C8 - 26: B6FE46E0DCAB352BD9D4DCA77CDC88B733001ADCB089596330769CC6BEFC1BCE - 27: 5E080231CF3A92393C287EF7B5950D0394774700F82F2A0BAFF7EA82524223F6 - 28: 646DADA5A492B9EB649E576F976A0CC76280111F767A63921DD29C09CD4AB434 - 29: 2022202E664AE6B9E468706B45CBEA851CD7A352D6378236AC6E0DA2924E9AB2 - 30: 7909BBD61FF6C4D0552562E3A57E61F23FB82AEA99C9B2E004D94FC21A3F49CF - 31: BE29B022732A2E397FE039EC17766DA33A16D25555502775B0577BACBCA40625 - 32: 050A48733BD5C2756BA95C5828CC83EE16FABCD3C086885B7744F84A0F9E0D94 - 33: F7B83039FF915EE67C8586BA2D4B9C348733D9C75863056EFA4581E80A09B66E - 34: BD6D450C1E2072E614152D5E6344A0CF14FFB16AC8658D68176E3AF0F737C9A3 - 35: 89C2C6A69690335F7B475C47C62F930C8BC58F6AE92A99AFD4D9743CB23A832C - 36: 50B5D09F74A3FB9B07EDC08A62BF546A143A1AD234FCFEF0A386B78A4869191F - 37: 8E17112C6CB1399A06443509CCC95366C29CD72DAD72198C2395685C56FD5F1F - 38: 4910E2311E19D30748F38E265A1AAD54E0ACC89111572EA548C1B71E28C74B29 - 39: 850103B8D08D566159D0BBFC175987F991790FEC8D2905F9EE38796301CC8FF9 - 40: 02BA324D30AC854791579BEF4D356A6CA0B7729905D241058B8E5A726E74B0F3 - 41: 1BF232E67BA8ED72F1BBB4903B2589CBDFA880292AADEB416B30093439FF2477 - 42: 5D5A49DE3537A39CFC5F67716608A5012A003D5ECE5416A37DEF8E663110106D - 43: 2D3BB57730B167157EB825F3853971583F182456B91FBDD75014DC271887397F - 44: 40ED8D3D40DCED5DDE358163F73A2B4BE35C609522620830880CF6381EAEDD23 - 45: C7B82C4199A88162D5B04A4279F9A59DFCF97239D5BBBF4CDEECF3B475CC4A8B - 46: F338292A6F44F97546774EE97C578815F2A7BED5AFE036952DA0677F92F3FE1A - 47: B2E6C01E2D03B78BD71C3E246A85FB076B30F83159AA43AC18E33ED9CC232982 - 48: 8E7A856365F79E42004AA1A47A3B83E8E6D0EBDBB602F62793E574139B9F2A17 - 49: A25B6AD8226FA9A9318CB86CC7714CB0BEBFDE6C20572BAD7B89925F0D09A7E1 - 50: 57FA0A179B510246B3F8D195ACB103CDC86D8315588325EF536C47FFF2772658 - 51: 5CF520297C9B06AAD67483986D4C018A70C67173059B9EC20DE0C4F58278FFD3 - 52: 667E55FA3D3D6AFD3CA3AF6A60016598EBF2B1E98B59C702209C247B3360394B - 53: 5233028F23B5BAB4005CB86EA31B16435EC1F6C8FCF357580F6789DD795F1E29 - 54: 81EB9DBFF576E3236776D43B5CAC9DBA10685CA4FEBDB0DBA8160D5468F109DA - 55: A91A138E3374D2D8FA4791B83A93A311A06A2926EF70153428CF6E1B239C10D4 - 56: D192F5964DC70118FCAC64BF0EB838009B816D344F67B04E8E78D5BDE783E54A - 57: 6ADC19A25346D39409C264466AC7EF7EFE4A88E765A8BEAA191266791A906064 - 58: 275AA07CE6D62F62FD66E479F300C00544F697250B6D773F91BF06E206F88925 - 59: 15876B15FB6B696F89E78A040AC70BACF0EF0EC18389A5C4CA5D6D2406C22454 - 60: 3CB8D033AD71B9951AC09797B306540AF9BA7819CFED6793E9DDA6C93A0D3458 - 61: 829824766EDD820E8947845C98130D19DB0E286FB465344936326B6DA5633A44 - 62: 8FFD849312CF58640B1DF47AE8FEE5F438CCC3DE342E92A87A4F6E69EC27087A - 63: BA7AF58D214BB604BCAAD40AD55CCA7D9815E7535F1C9837BE8FB8FEE2519560 - 64: C8AD478F4E1DD9D47DFC3B985708D92DB1F8DB48FE9CDDD459E63C321F490402 - 65: 9A11F135D2231BE8EE824D1E9D3204018870DEFC2F469F34EF5969B4815CEC3C - 66: 0BBECA7B5BF86D84E697C0E52DA482B9F0B8BB90C74C59C6358DA5458527355F - 67: CD0E763F87C88CD162FE971F2F07AC888362CCC33272C2E79E4DB84C891E7123 - 68: AD93C686DBEA416E5069CAD1CA9D627B2A040E9C3D9CD148C93DF58DD01B1E03 - 69: ED379E9012F1D3A4FEF5096688A2557B3CEB68C619245BFFCF05A14A5A846FD9 - 70: 97A26B0E8066F35D400B7F12A6AE62A290BC1CA68660B4DA8BF17AFAD6B8C948 - 71: 881AD9FFBD7F090EFA51CBDFE93DA23A0401F4446F7ADF150D1C226851CBFFF2 - 72: FE58866B2893C6C40EE832CE40FB6EB4C70FF7C4794380D95C2EBEEC62DECD31 - 73: 797061B3AAD8E724740C79DC697EF3DE4C96C4DB4483DBA4E56F852222C72474 - 74: 6A3543B82C9A14D8597B2BB3916159CF54A4F3332AE55EC9706979BABC206752 - 75: D46DBEEDD389BEC862EF7431F929CEDF81BD0A20573B539E11C8BE957D6B286F - 76: 64430AFB89B5D3B944FF085D344A96F514441962E2B2808943E8159378FDE2FA - 77: 98FB8AC5EF7A58F079D41815484B19650084E4CA68D1540D90CDDF536FA470BC - 78: E939BA431C6E703F7D26FD0EB511EF41A37F6EB386E80848EABA2C3D5BE01F62 - 79: 80AAC0531BF27D1B0E3E746C34A86DB09503636E211E59C54F9952BB4E43684E - 80: 0E34AE32D043275B50E9A9E0DD024AB024213F096CA6E5B7F16B524F0B37C271 - 81: CEAA5666FC5BD015360A31EFF0499D2AA8E7FA8391A0C490E806D785A9F80C5A - 82: 6E85589621FE2ABC1214A841B22FF667E0B797C04EE736DA819ADACCF4176CB1 - 83: 0259B91E342828924911DB5071C10D890FD65C28703A000CE2EAB3485D5CAEC5 - 84: 1711B6B8E196B2BD188B71B3207AE2B03D9B2CE42D6593F816D7127567B31D3D - 85: 63F7BD481657A2C0DA9B8C5D4BC37952AA568362CD27055049C1B43BC3BDE48C - 86: 9F8D2B19AB069CAFA57FAA67D3A7796F880F35E95AC71EF4663123616F585242 - 87: D95375FF4E6BE80944AFDA92819794259C7DA31B1A952A309D7EBADA4A78EAC1 - 88: 9FD373552C93A6D904BFB67D45F7B174530C3EF7B9E71E84CBFB32DFED34831E - 89: 832BF41E6C3A51C07B9E21C17056587D07A45012CDB5FF21A9ED7F5777E2A3E6 - 90: 8F35ADF849B78A97A5F71EBF17C102521DCD86D9D20246B6EB47F78BF577809E - 91: F4C82DAF9218F14C37ECFB50FE222644FAE96F439998E990B1A8492E7BDEF13B - 92: 60B070C296CC64968EE5E4F65617D00BE43F2E77AF4994A12D6A28110C586C16 - 93: F94996D82141AF533F903BE6F0611D2DEA7584A895BE7096B2DC35097B18E2A0 - 94: 805E1F47D06244283D88F32B046CA95554AD4018076C7480DED3CE7DD393BC82 - 95: 7804AF4E51E0C1CDAF0F0A6FAC6671B260434081F7CE05070BEDA63BDAC9BACA - 96: 2BE0AF9221BFCDACB4B88321D8CCC9CEBCC53188ECDB4E97813CD1D4C775C541 - 97: E500BB02AB9FF69F068E9CCAD41F0BF7A5C176F41119FA700791DB12092AB7C4 - 98: 0F50C9F3538F0E35645720BB51D9191138A6CAC64D9F83660957D4412ABCEC83 - 99: 05186DEBA22777FE7652D51F24ADE28F18493B809236DBD60976D213575E2F86 -100: 8C46D8901AE6919EB001CD4A9907A22AAA47954630099A473D2D5336EA7689E1 -101: AF504DD36FEB666B16FE553116ADBDD604E449CA783E54A83171AEE7DDC7E7B1 -102: 986B81944604EF3A1F26032A04537777C0ECD1CB66B37E3CA6E9B108BEFAF56C -103: 120A055C592D237C0F535EEBFC05673374FE4A50E1330293EF2C1AB611E0D0BA -104: 22892EC826B20680C8462ED416E15D402E567FF4E084B08274D702FD2411F40A -105: 1D867E60B657511E28C15C100B07B62AF37CB4240C67354CA29373029B55BABD -106: 30E02DE534005D7F3064E57AC79EBAAD483ADFBDC1CB227B889F0BD66751ADBE -107: BA6B3EB9EA0CF9247B596E0BFB1129789046FA539C068B6255F21920A14672DE -108: 9581220D4D55C622420719224DA4D72ED27C5A9083FCC6C9754E0B45E89263FF -109: D2082A60F6EFE8B4DE35E6956DB4772CC74007A3C1588D6A1475DE5EC6079388 -110: 607CA9672E3C4692E094257CE00B332962EE247541D187B6135498A2F61B6D59 -111: B08646567D09C477939EA7F417FA307EC0D522A41D4F8E7AAB4D9A889EC67FEF -112: 575F18078B5874147ECD662F4260CDB3548756081EC3D2E7BED2397F67888622 -113: 9213EE952527591E3C10FE51DE916C10B72D90B234BD366BF2D3DA89C660678E -114: 80E7DD3D16B56C9038B9A7F078199CF3BA76841E9B8264AC3E103C24D3C8871C -115: FC9BF0A78CF7BC1407ADE5D07995CE2ECE2467482BC5D04F27BEE116E33B26AD -116: 0CB94A64118CA106B5D62B7B0323085551B7688ABB99FC47AD6F46AEF79AD0E7 -117: 20B54EBF368456150152F2181E5CCE7FADD18C41CD4764236C68E4FE0D49F775 -118: 398F0CBE7FBBDC6E5C88F5A6E58DA25968705D4704FE9B16BFF7BEBF39F7838F -119: A226DEFF22F92E994B1818026D923B9C93A72F8D5B4F2CC3CF622D6492373DB3 -120: DE05697A0743D511B0049E4055A7618CEF7A3F54AB2ED031EC6D2F75C5416AD9 -121: 6F2DC08E4A30CE8C74D175BB4D8F7A32F88AA145F190BA863D146D3047E01CEE -122: B722090B50928B07B1FA3D457CFFDAF70D04FDBF3EFA1D7ED4067DBE925B4F7A -123: 6C278930B0DFB48E7D9BD095C01DFD5DFF859760CB5AAFFFF939907673F44448 -124: 35C6C370972BF0F42EBD123B4FDCEAAAC4557689037249B3D64B67F034B74774 -125: 4A36E7BAEEE661BF9E8750C48ABDAADF969A83E22A91CF7D299496367CA7EBBE -126: EE257791809CA409757BC9A21F81CBD85ADA03D6EDBB5CF4171CFF2CEC87DD7B -127: C66018E60C774D770CC6539D42C023FA974C29E3FE2DB5925F226B9CC5CF8B05 -128: BEC3EBFBA06834F224543CCA2A427CB9329147BE93E19AEB0E33A7119C7F63EF -129: 0F41A20921BCBC39EE382DFB54DAF2DB373CE6B178833111E22F45266124F3CC -130: 1CEF9A7D66905E25EC17517DB9FFD91EA71F05C11BA66D9AB11E6A46753ED617 -131: 99EC5EB5856241C7AEFBFF8EF9E245D32FBA82E5A99610549C41CF27F3AC0D53 -132: C89B4AABF8E4D1C37CA932F488DDC2803334BCDCC76953900AD630AF70511761 -133: 721F0E936B3B93C0384F970C07680A8A6293E5012295E83615EA4657ED5D7E17 -134: 644E15224F5597351AEF5C4BDD22B27CA0C19DB2244431534C2A4A0BEBFDF39C -135: FDED8FD9D6551C601EEB3B7C6BC5E5CFD8AAD1D015B7E9AAA9C9B9475231D5E2 -136: CF3CCFF92480A29160C2D38317C430E14749BFEE1788106957DFE73F8C4930E5 -137: CE9D7DC90913EE5D92745019479A5352C6D6279BEF18ED07DC0A83EE8084DACA -138: 14914E322770698E090B44531062424057B3DCB0FBDFA93229D21788CAA29A6C -139: D0AF074A51AB3138DB0581170B2F4E02F464095E9AD62CBE68A48C6938F34B47 -140: 3A81A47EE2720F109E7D1CB54A36F77B64DD465803F9717264A5E5F131DF5E12 -141: 4134FA637CC87AC52320F311F4A681EF740B58DA8CE2C09C721EEDD720179C4F -142: 4996D371ABD506E72178B4CBEA8E9F5AD781A5A566543D97F89A4EFB13D5BB5F -143: 295FEF4D46110EE21FBA0D1798A1BB7C1BBC88306BC9B7661B18ACE7170F02AE -144: A32AEB728CD50069F906559158F1D0A9DF3A8C6795E5CBAFDE00C632F08BADE3 -145: 93657342BB49BC9E242C4F5573EF621D6CD90F4A2082B14FEF85BC9884D00AC9 -146: 34462E1B472269BC270A6DBF09D9075FE9CB5350CC4B74380D17AC19D580D125 -147: C1BBBC82E8512BBBDFBCB9D9A68552BD4EF3B7953541451C82F3BC92AC8C4BF9 -148: 962CF8107DF385B4E1B1B3FE3694BBC731D21FAAAFBC2B48EA1504CE07F19173 -149: 078748DDE5FE38CF8AF48260CB531BF8EF68F2700437C1DB3E210DECB757417B -150: ADAA23CA1ED892AD1CF028CD40BA8AE2BFD3D7DF1289C3F2319072106F587A98 -151: EC656CDE6ABC81A8C85C5F682D392737C495DC871303DC3D11FC651765AD99BC -152: BC744E374FD83CDF6EDD709689C4F3BCDE56BA612469F331789AC4E738F804B4 -153: 4CD9A50E3F427A64E312A1ACD8BC39D47030EE1EAC173E84C75C481D3CF13911 -154: EF5A980E76E92C94BC43C5DB34AE25B990B1B8A4CC28E834EB4CA4A27757FE6F -155: A59526AE178AAA3CD3D1849F9AEEB914FC555CA790C18EC1EA63814E45480189 -156: 92915B3078DA2EC31978123691517835AF47EEC12D9162D269900D0DDA0EC58E -157: 81B7076D3EC489393A1752F4B72C51C9CAD0BDE0F2AEC6F402739E9C20359674 -158: 3BCCD5439FC7C4BD3025675F7A9C39FF87C8CFDBEADA0B6DD29EB179629A689C -159: 764BF722DAF72E8F04AE830B10313C836667676DD9E8A072E4A1C0482EA682F4 -160: 3BDEE46E603BC40A719E84A9913468D790EE33157195217C1A723596A9708A9B -161: E55AAAF6F51D43A5336BA4D29AF2128C3DC3BC3D9D70B3E41950F445BEB1E5A9 -162: F071BE09184E4849ED48F3F71CB254A9D792C1A37BA8F61119BE4AE5F5C5E9BE -163: B9F6E53FF9892DB0A04805270E5D60B3C62F72BCCCF2052CBABA2AE2CB732C78 -164: 576E9DD4F7CE4E9432D456D02C5AB77E15A1DBF74E60F4632F80061A756BC201 -165: 67D11A37491421224C1ED64B3D2AF9C3B45C413FA0FBEDB0ED1BED26126703DD -166: 4FEE7968E68B1DC75C14E23C16C4CDDB9FBA10AE7EDAEF32345D7D9450F05CD8 -167: CAC5458D48E6163CC843D5F18E263E3CE03290CBD5A866BD3B7D02DFF2DA413E -168: 369A33BADFA618D58D16AADDEAFF98D66B30A70C2DEEE42FC809B9721DC1C524 -169: 6D9EF22B871F8518D91FE5FD48BAF514F1165ECA0A145F8975EB4B40898DAB7C -170: 92E47248A9591F77D39067359B91FBA0F011F1C753E9284C50BA10FA436CADE1 -171: 98AC409C2E9FA2DAA81A36EBD188CEBA0B1997F9C8776C73AF360A5C9D6B89D7 -172: A9317975E935A13C8E86E5C2DBD9C829936A7A222A28B52D6607E99FAA362AA4 -173: B8C8D53BCCF1F1B65DCA8F701853E6FB575A0929C9DD7C0BCDC3381EC4E8BC80 -174: 8EB9F83DBCDB9CB9FEFAA713EA6BD300389BD5F85FB63AEB60BBF39F0072A115 -175: C913434C625FB9B9969ECDD5FC622B53152B812F605C1274A7554EE18BC26BBD -176: 2A3C05080E904EACB025774D56D60C44E7716B90ED705D8640975A1C752D6EAC -177: D4C19D7ECD62C298FC6FCFB4256ED7208D4CBB01F81CA1C1F7C36C9A55667F80 -178: BB5F95132BEC7C4DA72BC38C221CB8BE458F90233CF7A5DA470A89AAFF8057BD -179: 87F6F39CC3FCA24CE71440CF4EF792C8FCA0D72291044849A256BC7BF7A59950 -180: E05AA3289774E9C934BA4B6A621A1602BC8D52D2AAA88411AADFAC36E259DEDF -181: A104B60CA8E7B09AA4B21625A6FFCD60560889736A368DED1F4BA8EAD8EE732A -182: 07F03CB0615479FA964632E84A12A7AAFDF2B0B6E76C9AA1FABCAEB0FD89FCE0 -183: 7580655A0445669030CCEC133CB73E83A628B8E1F50C3B933C889E7CB3F83AA7 -184: A0C0169EA227CBC67D8E5942118B4A3A7B4654668E86F4C332013067DD0F2014 -185: 33BD57010692128148B62E21A1A435097F01BDD21739E1231D6E79B227AE8287 -186: 4C5A425ADF6EC2CF5B50B443E014D9043659304DA510BB841FD014F04FB955BF -187: 1AFF2039CD670EF2ED07E69858CDE39BCB0890A98725D1FB2D1DFC4CD2DC545A -188: A3007F2155E2B7314B3685E848F249CF3F32F17E0CAE736F8515F1EE8468B06B -189: D4569F3356C8B426421B2F15F6DCE14C406216A1CDF2AAE78E99AE765003D53C -190: 69AA9378F0A17E0B88CF85171AF22F569C321F66CAF3193C8DE130B007AC561E -191: 8658173321B8E1A1DB6C55192851CB681B17F0B89B10D4D5766AC0EFE389DB62 -192: B86BFBEA7E3F8D0AA23A1D1F6E38DE98C0A1046274664AD1863CF2FF9A7F9565 -193: 961450E75313537FA23B0E3EA10A231CCE0DF3ED2E5FF4EF0F73C26776CFD7B4 -194: C72220672365514B8D738D9849A029BBF0B14C4D18E7A3B27AA7E90A5DA015E3 -195: 947A1BD610A6C54D7DF166EC235ECC3A686A0AB8143EC49BEA754F12C03461C8 -196: 9F40C233C2D868926FF9016820DB5E6244028B1A041A62BAE105AFFC85A643C6 -197: 30726EFCFC02ADDD0F812300BE33ADC6D64DF47AEA20C0AA09197A80DDB24DCD -198: E3CB59A416CEB3811EF17978D65B57C16705F205D21BDB7F5B958EB09D21B758 -199: F1B4BC516891C3FA44F1070ADC05E1164080FBA3F7A17840C25B1E3584C11540 -200: 5F728F63BF5EE48C77F453C0490398FA645B8D4C4E56BE9A41CFEC344D6CA899 -201: 0E24131245B6AE634ABC4C47DC9FB3E9B97966077F7311C5CE6B26E049E68D40 -202: 3F994BCC3057EF299827D6CFA47482F17B2CADC44524D5614A5BE17D61D4E751 -203: 1288DCA8F28CFBF811695EBC38D9684EA00C5F13937A527C43CAAC3C0BD29DEA -204: 22DE73FF852BE6332DD1037F00758B975B4CB6711D515248DCEB39637385D44A -205: 397CACCAF3F87F387CFED460282AFC0D24AB5A5998EAFD93E1FF984BED007840 -206: 63E8EF934181B14EA2F6C24A92BE4D65E394F512766884D37FCB9EF0B39840E1 -207: 39E999E70DF9431DA86325DB192916A2B18FBF52DCF62026310C903CACEFDD2A -208: 81DD116578D0F4E21E9296583C816C3B4E25EBCEEAB5BD1DE6E3493E409ADB50 -209: 9E29F96453F474D2811D780AB43FF74C2D768EF89DCC8E7DF05BFAC1D9C755F1 -210: 6E4E7B7E819793A3DE17FA3D49C5754E15436FAAF43E6472261B67FC49F57942 -211: A2F86FF99DAA5BCADC9217C0995FE6E06CE3E4D67E1ADD5BCE963788B9813EC0 -212: FEDE7FF8A5C4D7EDC3DB3A20B95AEF722E916D67F64BAF89A7C774FBF080474B -213: 41C05C7B1277C17C9F6E8F2C8CCBA36166770DB970DC04F84A8525B188B5FFE4 -214: 4DFCB2FAB5314BC06C2E41D837EBB4777F861BE295FCED434552E12DDAAD2BBC -215: 078FCFC3A29207AB4F251C94705EDBD0143E8FF1B9D5E69535B80971CB409826 -216: 34EEEA9B1987A580003329CC86C40BCE5D95846CDD6EE84E6A35ABA20702B7CE -217: 056D21D6F895B9BA9BF16253EB40524B66E761767C65F41B2994F7026284F273 -218: 33D0A4BD4DA19BBC49C064680E8B224C3B5A95D93CB831E6592C8F700C69DE58 -219: A3B8D55EA1BDF8C4FA4D22593836DEEC66F9637AC9B68FEF94570F2320970680 -220: 87CC4433FFC8E7CFE0757CC80DA93FA28A78395C8CE283874695F4CC7BA1F13B -221: 99D5C39A60F94C428942C050F025B6706440B1A044D852E733FF783AC38337B1 -222: CDE4A1D28164159632243BC896F29324769BAA4A303A381F01BCCD73F05654DD -223: F1B740B5C0EBB657E0B6A28AC7F669ED8397C340AA13B25DBD5C98B8113A830E -224: B735B5CE9A81446AEDFD313E492E7C11B91E71888C5A52962ADABCD9D7905C73 -225: E44FABB0A710F907C940F87987F46641A83C5693EEF1D9CE7D82E6708B3E3994 -226: 1D515AEC5C3816F3243CDD56F5ED51A70692C08F76733914F24344487E84B195 -227: F1769B5D39F07A4ABA832F5B2F845BDC8A39A4ACE27B3E9A4F843C8133B785E0 -228: E15EE3D9F169CC495ECF40DA59780B8662E773111ADCEBB9C81F06001C377AE8 -229: 13FCE1FD10B9296B31F04E9AB153C10B6C2575FBB814605D18B9C32E9CE4A306 -230: 76D4EA81772EDE0DA191154F21F0B89B8891F2347ED8C38D83B5FB82C59D73BA -231: A592228A56F858F462243D6D63C16F14E863393C9CB1F3569E7C07033129746F -232: 7C78BD9E41844375848566C240143AAB57D8E67351150462EA36707B1772B9D9 -233: D0EFF015852746AC03A445EA89D8F620578F4D8C20CD0A376C5292C8DB399E68 -234: BAFFF987F15215490FE09394EDEE3CCA219649568ACD5081E5BDADA980534136 -235: 0AF5A64DE4FBE093C163C20F22554A41350B86133E1E869239DFE28CBEE8CE42 -236: 99AF837FCFF053E2E1A406113F87C4975D6490D557CF3991A13C288BBE4E476A -237: BC11D588F1944ADCF6B73CA650CBCC0E23A82802026E3A23C217DAC1DB2300E0 -238: 8D5A9CBF73F51658AF588FC3A09D5E51C945BB01C269A360DEB506D965B74DD6 -239: 66424CD8971E43F2F47A166654ED3F601AF764151F69A1F80E75D9CF2A94C8B8 -240: 6C6F549299C69EC48681C6B9688E4AEC022E16F70DBA705D562789D045CB7163 -241: 5F37D2952EC1F9804C27123075E61BF6BC000B2E016952CED4F7DF6EE1406596 -242: 70C9E969E885D65BB4C29C9925CD8CCE4E9B4C3DEA81F8ED88AF987090130002 -243: 558A870CC4A5A17B0313804C7C6691A318BA2A6D54EF34800BF7B50C90EE3AC7 -244: D84090A202B531317C1476EA4CC824106D635B4BD41FBC081B0D942525DF733E -245: 127A74A849A390D8FF6005170ADBCC5673734CFCA276EED5468C3436D1E4E957 -246: 51368D1EBEDDFE8A9005A5D9627BC2FFF5EF100D28E246EEB6AEA6F93027E45F -247: 0ED91BE319464EA50C9405105A75367182134E7AC3D2E5E305453376BABEE919 -248: 3D4BC2BF5E8CB5B70098714EE09E16BA9BE125DF702D0E5B80D027B30989A154 -249: 2F238528F30336D00EA4933528862654549C800427C43AEBB74675EEE827B5F5 -250: C5C52F5B2EB5DDEC9C37C8922DE4EE8FFA8B674870917C20E4E862DF8CD090A9 -251: 8C94F6ECD3E33433D04E634A26C4CED1184B9BC6AF47562C4459309494A9F574 -252: D3036F099414A9187B79D3AED2F54FD068EB2FAB2322A79C0D46B8A8CB777E2E -253: 2507450731C11644F2DE23B9720BCD71A827725F8FB11A622194EBBBE16233BF -254: 6EBBC54EAC2E9506E5A6B35E09C899A6878ACBD3F7F9CEE602982F479F7BCE66 -255: CEB94E2E8BD45BBB4AF2A3AAA05CC3F7BC010A6C68E242923CE3731A108DF8E1 -256: 9B04C091DA96B997AFB8F2585D608AEBE9C4A904F7D52C8F28C7E4D2DD9FBA5F -257: 0E4ABD998FB067CF059475BFA57585C94C3786DEC4FC2B600663F59631DBE2BE -258: 4440FB3956DCD5D186F72436E23D20903C21A1A2A1BC351EDA8502509C30FEB4 -259: 08E19DBCA3C0735EE75F47131CECF6EE8922162C0E84D25C3A6BF132DB7069ED -260: 809D398F5984D455A403A77FDFE8A9E86DD18149337D891B719B4D7D7D2A1692 -261: 30FF0B8556DDB6425AC9FA62BA25F67E12DD8536EA4CB1861B02C36D54E3F9A2 -262: 90CFB8A5C3F9F243DBC96EF9703AC75E480DE00E435E80772FC57CF38E3EC7CD -263: EDE7A68F2D8F80F1C6AFEACE7F6C2F1A27F12656CCF8BD84C417CBAC9032C0CE -264: AE27F6201401C3006905D09C2B62CD74E60BFC5B23079AC41D8097A1829CFEE6 -265: 43566E4DE1A37555E272BB63D1113B6061E4A9320FB88E4B435CBA67794A1AF2 -266: 59EC88A4E06C3C0AC3739C834AF7F533BB1BB8E0FD92ECF8554F048CF0B23CD8 -267: 6F4AA17FAC4770676532195A7941EF9A34577A6493019CA0ADFAE099CAB4A443 -268: EDC9456FD6FE931C317139713DCAB3ED10CCBDE3255CD2ACBC5DA2BAF4C49626 -269: 8B6F715B06995BB2DA6A6EE96958BFDCCC873A28AC0DB5C8351DE1D67C29886B -270: D77009956124FB8FC30EE79B44B213D6C94C684BF24A02E87D8544C9C5C23D91 -271: D409BCBB54825556454A757A1F629135BA49C0467DCF6B4E0AA69E9718DD31E6 -272: 0B21EC4A8EFF6D179E09BA9FE0AB08515B24E0923FBF419F5C30A38E64577DB5 - -Hash: sha3-224 - 0: 6B4E03423667DBB73B6E15454F0EB1ABD4597F9A1B078E3F5B5A6BC7 - 1: BDD5167212D2DC69665F5A8875AB87F23D5CE7849132F56371A19096 - 2: 334CDA37A26C0669CC7A5074452F033FD57FD96AE0729582B69F865E - 3: 5FB2B598EE40EF6F46E82CB8264984AAEE891C680D89AF5C3C36ED45 - 4: 4FB067ED1266B8F487F609F12350AE92CCDA9A197D7DA4A831724D7D - 5: 365C10987F3C57DCA7B9C1FD7158C0E52A394A8FB0ABD43D738893B2 - 6: 911029D5B740DC8F65661C3A137296D9E05C3315D8F52F1FDF632462 - 7: 45C40E1C9601FFB8E7D024968E48581CE067EA33B0EFCF25F85E627A - 8: 2FF69F46EA70C729F349DBCC9A0B5D6166031321AF70833B2FACAA72 - 9: 7AC8B0AFEEFF883AF3896371FAD034386F88941E9C14371FDCEEA996 - 10: E38CF337E48CDB4B64A746B994BE20781E51F4547A4C39240599DCBA - 11: 5891AFA32A2C7435728F0627820908F20A339267E42119D5A7910573 - 12: D78D4B95DB37CAEEC81ECBA9568EB35EBD5B11E134E974267B294636 - 13: 207002605B91D5225A8F89DEE317C747A2D8688AF13CE0E3204979C5 - 14: 61FEAA9DCE58B63BAB08455026AAA94E620BC03F1DACB6A2F75121A0 - 15: 6999702B14328604DD71D59285D3E82ED3E5E7CC44169B21E975A849 - 16: 31F77B0C661546DC776A938983A2A10A2EADBC8D33D4A82863933F12 - 17: DE09A5443FF8A9F87D667C88005D06061D4DC716B29265B278A590C4 - 18: 8B53AC4F3F6ECC2707EE6B404A17996A75B2B3251B2D0078636D679B - 19: 0371C2A70002358F54FC14E5AA4B7F65D825FFEF5A0A4E3C9ABA5793 - 20: 6775D26C17A4065ED4DF905506B42E59E7F40307395BA33E5C4CED1C - 21: 7AA468C9554A9B1DF5F3E01A95678D9E7910EC9B9A6B824DDC28871C - 22: 5640D599AB3226854D178F163FA42818E59B309D56C5A827C172835B - 23: D7FBECD514F2E707020FA059E600A857635E3F7FAF5759B5800AAC96 - 24: 8FD2B6843C0C2D668607FF71C7F34F19F7FB75ADAC806B66C6C7B448 - 25: B81788863F8B00FFC7E1E7EA429616A92EC89EB559A11FB4BF5DE286 - 26: 9E987B34BABEEC98886B1002A5D42778D76BCA5330A03CF032672C10 - 27: EBA0716D82672CFE5900F7AB0BB35FEE3D8FFC95E2DF1BB61354236D - 28: 97E5E7D260B9799D5F315C3FF429EE9C86550394CE833D792C6ED1D7 - 29: 04CB508569475BE9527B16B4C43FF664175CF9F4A387A23D49391375 - 30: C82B33A8CEFCEF6AA1B38C658C066AFCBD38E6F814B0209B5053C3F8 - 31: 2457BF71C2BB07328BA31A109AE3298A6603BA56DE537542DEE8A128 - 32: BFC9C1E8939AEE953CA0D425A2F0CBDD2D18025D5D6B798F1C8150B9 - 33: 6568AE0FA4A34C7E229EFB54A763BE00B843436CF2D19C2B6BAC75E6 - 34: A40955AFC5E1756A35F7EEBFC03B769186D6C48EBB38E4DE613431C4 - 35: 3F1B508FBC4DC40BC4DA2009367ED5188611DB2337E581316BB51F32 - 36: 27DF7FC47C4DE0B861EAFE748BFF5C1C522FDB029247D7A000D19500 - 37: F6EFE4FD3D4F7C8DEEC783E891F9250BD3E86BBEDEDBE6F5CD5B86C8 - 38: 44976B957E6CC5157F46BF52C46855E49687B7FA3102F0043F251FC7 - 39: 221553ADAFE51AA810C853CEEED84EC0A2EAA0635ECCE9BE354D0BC8 - 40: 0E2FBB87B0CA6BD9FB85A32E357465CE68E0ED40A3FDAA36BED423C2 - 41: 1FCB5DB23D17C53D75D03FE26EC2EA74CDB1BF308A5D0B8A18F3A563 - 42: A24830A72AFB30EADF4EFBDB94DEF365744D0F151627EB9BC97D3003 - 43: AC2C3F390F0173B228C73C9AF69FD2D2A425FFC0883886514335EDAC - 44: CE009DCD1C90325762707024C06B19E9E98F3AE645BEC1BFB133327D - 45: E3F3F6EB37420DE23EA22C13D4B5B01D2E29594AB6E3103D0EA80CD0 - 46: 0966D9A5D07F5E2CA13699C46A77502251F802646E5D5C1A4AEEA70B - 47: B9E10F41CC2FBB430D370E20E5081C00C659D6B6A9ED2634CEB25D33 - 48: D05325556666453175764F98A08679952AEC0C9649353E592131FB9D - 49: A4F03909FE084AA3F0E5511E1DDEC77A026E5280B2D6C417BF662418 - 50: 446B0071F21FFB63BFA6054A96F44FD4996F30CB4D398190B42C6F43 - 51: 9F048B051AF10E08DAA0C9FA417CA690A65870718DE161C511C29D9F - 52: BEB65AA59119AB5F8F75D0B64859028D3BCCDC8EEF764D27B70E9F5D - 53: 3E5C923999C5D50A8C414BF627DC53834BBC2C0DB765C8087B287DE7 - 54: 9E9105787BDD3D4E585C2FF029C181F1CA04934607FBB14D1236FE33 - 55: 10681E293CCE004E088BE7C67426F50D6AACC7E31447B0F73A425C35 - 56: FC95D44E806CBBD484E379882238F555FDA923878C443ABE4CE4CDD6 - 57: 1E348592E91C1FE6AD862AD5311868830075C4189334E04EC22CA930 - 58: A7154F3DC5490F0D0751AA68536377DF56D8F2C9FB46496B79AC4B65 - 59: 93D13ACE1B752CD34122C3FF5BA26AB96A72282082AF34E40242E36B - 60: BDA4464722E003C1B8B150051E39E5106E8F05E53397C6B411ED960C - 61: BB19BEDB5FF28577B732BD0BFABAA9F18AE10BCFD193448CBCB89B82 - 62: F2E6C2BA4D6E085BD900BCC499C8ED8341C613AD721C28B3020A9978 - 63: 05E05C93D7F8B002EB5FAB6958A32D124E000143B63835DDF64E48FA - 64: FE7C26EE7D8A00D407EFC65DCD88809F25F8E37395148733E6EFC3B5 - 65: C5C12A29147A04DA59CE54CC657A26AD2B7E65E679F64684915BE492 - 66: C29AF1E7B8F818AC1815CEB1DFA5A8A177AA98B5DC2803ADA079047F - 67: 2E5265A1D7556CAA6F355C36A3E726BFEC40725FBB1088BE2DAB08D9 - 68: 07742BE70320B1D87628531D521E6744282A8F70180CD8B5EBB5AA59 - 69: BB41C858301CB57230FD85083BA5C76044282170123A990F461E3B14 - 70: C885E6C9BE4A56615ADC88657907B0449FF80A0B14459096CAA14999 - 71: 5E31D4BC8904E6E77531E6B975D3DCDD4330C03620E5204BC047CE2E - 72: 0FDD8265D5382246A4EB6580DF2452FFC3918CF04EDD9FED88F566AA - 73: B1D7EDC8A77C2457DD67597772EF2EB3360D6F2C48CE599CBD81F2CB - 74: 5798BE75376773997CE6B43A82BD323D3A5171176D349F0AA91BB18C - 75: 0F8BF99981EC3363F6FD917BDB1B3802761E6383675C249866F6C28E - 76: 7FE009BEFB156B7582BC1173871BFBF611E23D90C7B495E8FC94D7CC - 77: 449702E349D61A6391648DB4244D8B104836D856FA7B18B32F764BE5 - 78: 4F80419266A26D02B97DC83AACC2298775E061D30DAC8C6CCD9AEA7B - 79: 431C1D7A3B1DB04141C4D4C0A3C56468380E1A8810ED72DBF6851E5C - 80: D89AC3CFF48F7F73861ED16DB3FF239559BA8F04D4E9C46F7ABB20CD - 81: 7259CD78031B5012BFACFEF147D52A8FBCFDC5EC1A5E54B38014F6F3 - 82: 0E5BDF794984DE3C5082E8A9BF5F83056FE28990791707979350CCAF - 83: D49E2A8D59F3F60CA46180250742E74AF7C3E6356FE8D4B9FD145193 - 84: C4F63E763E463357642AC06CFD84DAFC4578D36AB63766726EE56320 - 85: 0C91B9E9B50B98FC31D4F70545692BF861E148DED0C6E712F710D81E - 86: A65ACC6242A0C8DEBA233A3F1FE4B9DC0B4012D45766CC22EC2EC96A - 87: A5208843BA4F129C0129323CDD22303DFD25A1F6D9063C2BF4FD08DE - 88: F6F6420C9DE252D2203641D4D68E7C6C14F8BA7B5E159F05179420D4 - 89: 82C4894ED849BF4D18672865D98A35FE504284E574C06E4310CC9354 - 90: DD61E5602720B1C1885CE5DFA61B7333259DCEF201A5FB7274FC948A - 91: B37608E84CCEFFA667E5EAAA925ECF00286C3A6DD97EB620B300C7EC - 92: 1C6005AD8414EB5FDB90FD8F8F241B781C6E78922BD5F155EB8066BA - 93: C79E89E33C99CBC50BA0D1781C45A1F2692A2FEBD162AF590E390753 - 94: 6B7CF9DCEA9126FCBD0694BF5376F4428F197E5BCA5AF957457549D3 - 95: 9E2FE74F3D509A5E0FF21517F5ED277D010AABFC8EE6DC8DE589882C - 96: 3FAC97532617C7CA76E2648958C9470A3AAF37AE74C28E5C95FE884D - 97: C855C493D7ED05F8D871AF38F66B3EF6FB6BB4E9ED45D1D23AF0FFA6 - 98: 490CB3DCD9A9CADFA1C590C9EB8695CE5F4787213CED5B7593CEC26E - 99: 8EFD1D71D36A31A799403596BD1189A25DBDD3ADC5E2425AE952B25F -100: 21649AC9D0430D74D5F5261653DA46C87AC1560540B4579101083461 -101: 03B96617EDF75C33E4949E2B462EB75828546A2EB8308BDD4C0859CF -102: C556DB7B33E53BF1736D9BC84F30AA936A8EA4AFCC590D70FBE647AB -103: 8B59FEFCAF88187D29EB7B887F5C066475168A4348DEAC4F34993D63 -104: 2027BB84E1A588623F3F5DDED0663BBFF3B93D46C65578CA892F6D91 -105: 9F2AE8EB1AD97E9B3DE8EC65BE32908225505B249F8A7A01405F2E82 -106: 3FB6E70E2AFF0D7E0FABE4A4C93B689F72D27DA6B79FB195EB790BE3 -107: A805C623242A8C03376E463285999AAFBA952369D6E87124827514A1 -108: 1A8C1E9940FD32E203065A840071FE7B4F92E51F119783A356849F12 -109: E9BE39172FC3D85C099484FC1854351A1850232F12BCC98C90ACC290 -110: 598B9E288D05E0D7F3739967C706BF888BFA4128A32543C662709D4C -111: 4FA336790D224B4A79FE2992C5A2B604988A8DBF85A76068DC5CF3F1 -112: FC8B641FE0A9268A14BC1CE81587B80F31A7BBC8D5600E310F70BC9F -113: DFC4ED11AF8646B394E816DC1EFABD6908E6ED5ADFA1CD911C905DBA -114: 2E2AECBD2EEFF11F2B904B57F514C6F26FCA9BAFA7431BF1E74158A6 -115: A7B03A76C3FAB1D2391F527FC1FD071BF2E1E98F8BB09AABCBA17727 -116: 1C9FF49680486878EFFB763A10DD1FCBEBEBB8B947086AAD5670F019 -117: 1AA1ABDB490CBC83DD173FF2F893C1E28554C5A87669171A388ACC91 -118: D708FC237FAA908E445B0E5C037558E0A30134C7171489F2EEA3B34B -119: 0509BC607ABB229F4F9328159195249390630860534528D260BE452E -120: 28EEB96CC2A73ACFCF6D7A4B8017315291AF31BDEF2DF8B09B8A107D -121: 0684AEC742C636A0A2415DD0D710B9142A4FC45E8EA5CD2226B26F6E -122: 8EA838B2DF09920001FC3D86C2DA985C5D456E2C555AFA3C2C94153A -123: 7E9584A788305A9C6CE95AE9F6E6214FB068D6421356FDEB9472C681 -124: ED232D89C157749B47A1A0CB1EDD71D7C863BC8822192921A551D15E -125: 2013B0AF19BD61CF2DDABBB7D45FAF04784103210DB6697DE37CD63E -126: 5F20F121AC27794E25A8058ED9840EF36D8668EA360F82CA64664C8B -127: E0AB99E85CC24D5AA35B2B2D5A80F15CC70FE6443FA8ED433F9DD8E2 -128: 935982770B8E39A960C38939824E4236085FCAB2EC5C00D72FBF1C78 -129: F95558A7F2A0E7A5B6F205F1D7570AE7AA08D3D50FF137CFFB5201C9 -130: 6F1D54B0F0730DA6F13E7B1ABDD301F278A979295EDA0CC9857F7DAC -131: C743E948DDE59240651706C46B8CC6D931305DCB7CEFD70BD0653368 -132: 8C26212B2F2CB047C94A2E4C312D92768A1A05936FA9D8E0DCB5175B -133: 67DD1365E9E2EC75F4D96A8460A0A9BF686827920E2B7FBBB0EF2925 -134: 6D8A43354B6C4E4E28E93AD60E16DF666EECA61B360F718009C445A1 -135: 3174E5126280625ECDFDB238D6A10D1C8B071031870ED197640CAD90 -136: 5D633F7E245E4338FA2698EF8B0CF98B129B5CC99622F770E3BA0CB6 -137: 7098DDCFF44C0AE3E0802D8D60FE7BEA8D0D3219CE28660AF1AEE40C -138: D6537CB1962DA8CE6415A92512FDC03BA319C9AF89EA795C2EA962B0 -139: 5BBE5C79373CAAF7F79F3012E96BF5AC0BAB10E324DFBAC3D29BF374 -140: 8EB136B9F46C1F40F82DD7609E65BCBFC45E641CD0262003DA81997A -141: A8DF4DBDC4C5D535EB3F590DD7E097E0B1B3ACE931447D987AC25E94 -142: 4353E7ED38EB9CC41ABBF0709C6AB707DE70D759E5D6EEDF09043FD0 -143: 64D0E8A1BE3CF30EF6727B30A6E428F7F068D44634C943D277AD8E7F -144: 5BE75E6A08F19913A1D8036C056CC4556B98DC90AECA3F2A0664DEDC -145: 90B861AC1B1598459AD8337AFA9933CE2F1A6F972C57DAF8FC2737E4 -146: BF0135795B4CFF740ECA130C323F8B44F663B0C4F9DD4A753E6D19C6 -147: 5046B58A09C9D4F0B46557C1BD29C681E1D8E6753A98E321FEF9E668 -148: A500B780B184DB8CEFA4431EDCA414D36096D69A257200BD58DA50F5 -149: 23543FCC62111C1576B4B66E27E08188AA4F428D80EDD0E296FBB93F -150: 179BF2290B46260D60D729DC9FB547A67A25BAA7B250D81B42473888 -151: 93DBC78BB8581796D80A799867EB7433A76C1112D041A43832F46AB9 -152: 86B38BEFB99A0C37BD562EAEDF416CC98D37FD76EA6841AF2BFA00CF -153: 586E75D5C595020D039B905BC0C72549F1F0F263F383071873B1A3F4 -154: 228D798D4B715B2CC5ADC9FF00FB6123A6EE5DCAB09C62CBE0F13610 -155: 4731F0557591E5F2BD5F4A82B2867217D2F187170BA434DBF3655D72 -156: AD2EB6EA86FDC83E7DE7AB85C8EE63E3F74B8C45E2F17F3DE5AAEDEA -157: 4F866857ED64EC4489465BE797D6E32DEE4866842A35EB0C3EE9DAC6 -158: 2F50B9307F67E63151C216D66DA5A14AF9AC3752B4D8C27C202D5CE9 -159: 7F034FE5B2F0109FAC7449B46DABA20944102E25A31A0C346B7DD1B2 -160: B227E462031692D03AA4784E7DBF6A5A18FFB070389D5B245957C911 -161: 1F66E24E59F472BDAF073E38CCA1FE9F0E3FD3158C0E340E1737D8BB -162: 579C94ACDD161130A3314BC21E9174A02EB8A58287450804EEAEE246 -163: 59BFEC1D1B9CD922BA82955069CFE9C69114EA87ED78057FE38ECA49 -164: 08A9164451C41B3B3D8858A9E54CDBDE2E871305FC7342C79D4291A4 -165: 2A749643D6F831532AB07A1FA9736857CB1BF699B0D88B75DBAD4D99 -166: FDD6D5D0A8014CD0E62D02703E252A32A7B3485E406A77E026AF666D -167: 3E78E02F6BCD8CF59D7F633F1A9FD522FBE6CC8914247B6171694B69 -168: 58E2D8551F4CB53E9CE8CDFBA50A81FD14E0B112A42007B03737372C -169: 44C06523FCD275B5CEFCE7D0FAD88ED27F984EF8BAA6C58E6BBFAE73 -170: 0D1EB14CE7A3923AEEEA1BB0BB547A66B7FFD35622B41A7762D44D63 -171: 29FBF6234371C81A48E85BA79527F1EDAC02B6AC990EEE8C0B2A8DD5 -172: 46F9D06D9D45A89CF79ADA602F77F39236114945E41ABBA656A122CB -173: C1754BFE1269ADA378D3805DCD05BFF68631DBF37F52A758EC447007 -174: E36A81BCED4D94D6ED0541E2E4C2754E2EB94DEEA20717A916B929FE -175: A83197194F2B4255053CBFC3F62728700A7D0A9E1DBACD047393083F -176: BB8F93DBE385D8165517FC5A3846C29C9E53BBF029E208DC99AEDE9C -177: EE83F2E05ACB846430EE4B48C00AA052117DB078B308F055814B7420 -178: 033254B2F0A9B570372D5464F9DB0248620D7D1892CF75B9E41E2A76 -179: 8EA210E4AE717107C1D01B8375E7D367F784B780F56D53D58C123690 -180: 1BE8C13BCF3907FC49D2077E50B41505E140C3DC6FB3955D098C46FD -181: CA7A249693D61CAD10F8E5F4CADC950F13ADEBCB54601D5420E5E14B -182: 724F8866C5A1920D2E44665D7A78AA651A752D02BC9540EAC624CF02 -183: FD16C06F8DCA7C4F8672315718A491E210EDCBA5046B890F36C59C33 -184: 8A43F3FA567A4A713335CF4F6827F74F4B2BE277F1A9D3DE8C38207B -185: E897112CB41BDC0CE459888212EA5F4D41123EED5FC45B80FCFED66D -186: 56C37A47857DB340CD58BCED82D7D5BD9690D6003AEDBC69960ECB2E -187: 7CEB4DF1D46918CC5066AE697DF9569EB847270F3011CBC681ABC64F -188: 3BD6FDB78946EF324512CD5A0DF1FB34DDD68F4DDA07732E9B4344DA -189: D442C6E9324A1A4DFADD0580E3AFB33C669A12777BC1A990B7848D9A -190: 0342DBC2248C6D2B283CFE82F7ECADAEF526363C88AAD70663408EB1 -191: B14CB26E7A5205BE06851D63B07270DB7815315CD5D9D53A87B9A43E -192: C8C45C35677C8B0A8E0F69A058C2B6E8684F302BC2903EE0C79430B4 -193: 11653C5C30DBA94F142056AE704EBC82CBD1F4E2A1CA120004EB7DD5 -194: 19BEC341BB47355CF06A30AB8171FF41112B5A14DCE42A6F28CED997 -195: 00DC3930079D7BCF1BFF3F76A90901F0CD528E233D0A2831FD6672D5 -196: 21D48FCED6A0C14B580C2A82F2380E70578AA22C6C50CB6BFE76BC72 -197: F5CE6EAFD6224F02CCC0AAF5DE793EBAAE2128AF4877476F8358028E -198: BF329FEE8039E89E0970053EE509EDDDE096F026A8BFCBA6D99856C7 -199: 75EFF28580619BC6992DBA34062399CACBB7F96FFE361B240E36D930 -200: 8BCD90DBC5379549B5E78A1FBE24AE120D92CAEF17750461262B1E97 -201: 0DE753D613321A4EC586FB8D4A5330A35FF2D08C32D434457C58ED38 -202: 5196805B5900643580CA19E464D276DBA36C651AD53700FCB8AAC114 -203: D2A3342D9187CA1E54457264F61E3F63B08FE6C1486C6FA27D93F372 -204: 4671BEC428BD36E0A0D9B741A8F312AB73629861731F43622397D9F4 -205: 04D3C3FB6359A09FBF9179A3E83B147A2C32274151670FDFE768B26F -206: 85F8B6BCD8364CB1F86929BE5F0C8E8CD7395508A35A28721F2005D9 -207: 05069F1D874DEDDFFDA67A3C74DEB39BA64AB26B9A288DF18EAAAAFE -208: E512D3088E41C157F4C31081D835061E78368ECB995F0F865AE7C8DD -209: 99CB5E3B68E4CEF44E7BCE89FEC5D3AD0BED68A341C4F26685A91435 -210: 257B54153499D81573E680442AEA471B48A2051AA2A87CA85B97034D -211: 027E48B8B02932BCBDBB2EE048A65AE28C348F55EC739357938C2CEF -212: 0937C69C2B9FDF13C58D5F80B627B29E2B4A00A6EA43D39303EA36F0 -213: 15F0894B40AA70EBA1BC28B7413B0FDC248DD83A7C057F1A3C857380 -214: 5C5100F771A361BDE3DA81CDD785D5EA906676D54CE6F37673D95411 -215: 4BEDD88CAB661DB3621608DAFA55424F00580E35A158EE9502878964 -216: 4B6B3E4E23805ADBD9520D65D01E6F132343DC203F97584F067761B4 -217: 4CD16EC65628AEA9E2857A339E957DD1987E0598119F58FEC84C53A4 -218: A6230282773A972AA88F8749D42E78E51089198506EF5B4D44E6B077 -219: C1CC1E77014B6CEE035C07217B2711CE0592F199B896BD9BBA8C36DE -220: 5B3D971F3BD1CD65D2D6888A044CDF4C099581690278354FB384C34C -221: C3D7CFE6AECABFED12C1D90D499910F8C98C7FF6EB1E59A4ED5F5161 -222: 01DCF63DF396168A5D79178E9C609DBF2AFA3576F5BA13E0336217A4 -223: DB2C60B5EFD3CBAEE94F9DB5069208258B2514702850ECA5B4D0CD2C -224: 6456D3B2001892E582221E5E1BA665750D0A26C977EC81086A1F2AE0 -225: BD46D6833E96998C8FF2772CA72AFEE2F6BF01B90FC4CEDB0342474C -226: B0CE5949761859192C151C57013B68ACB0E6F3280F2D01AB64D73937 -227: E4F9DA1C2B99AD60674868BD8637C183800929533663E65930593765 -228: 8A8DB3F904FB73D78C0F10412F9D5157D99BF04CEB9E2098092D3085 -229: 53F138AE00F3D4C70ECB02448F611A7AF28C8A8BF5C780C6AC418728 -230: C2B4AB66B72F8FAD6DE82CF448FB3D3364A010FD5684E782A11B9DCA -231: 36E9942DA297F65F32401003AF92650F98B9A63CF551AB4110D9F51C -232: 5B118A50CF4709C2145D0BAD449995201E813947B48DDEFC9AE91CBD -233: EFC6640A100DEBBA66807F4FA5C77EB39E961E10996B79AFD264559C -234: EF44CDCB35BE9006C8C870A459C5E9F682C133C7289FBC48D070D5B6 -235: 792F9656C76CFFF751CA61E613BC76F5B2499AF2A0D3CFBD66847C09 -236: F95E7CF33801C2DB385D9D4A2000E2E28CF90A6C6036E7D82BB0B2B2 -237: 188480C0CC9B923758036F585935647B59E172A33CA76F3CAB672105 -238: 8F15F5E14B5084D1146F050BA70363C50E0C8E5BDC49CF9215B857EF -239: D42EEAD6ECB82E4303CFB175BB4CCB02580632315B2C73DD9EE1943F -240: 14FB7CFE5D96DAC71EAA91CAFDC59A9B08FF9C064EF649BFE36D1F4D -241: 7A8D5880A965339E9F0B8E319F7EE943255949C828D7CFCC1F19709C -242: 250DDCFF230F88A6D7B5B27F489D2136598E7D99DA718EF84980C2E9 -243: 3F4259960EA3755BE7F75B42FFAFBA24238CD0A38D97C27B613A3058 -244: 40E0FCB308F152E25BC1E51C8C5FD925AE796A8CBA3C97B0AD35A19D -245: 92E16111D49BC6C2896E4C0A71585A0131B40CDAFB85D3C8E08AF23C -246: 34FB6BAFD5EC3F8911E2ADA599AF82E089106BAC823AB55B2AD9ACA7 -247: BDCEDFCB39AC3C7D206323C934B3B729AA9236AF276A1AB50D418946 -248: 981279B006F56E6E061206FD2FB31CFAC9F3096F2EA5DF2C63EF92CC -249: E9BA3E2410344DB27DA1441D36CB38A7A85FBE7A0E3C5E15EECEF990 -250: E44FDB52FCE67EA1B385A3A8572E30FA5355D07803069059B9B8BFB3 -251: 8814FD9C42084E846B56B2E648279CAFB8B68CE256BC2307AC52E229 -252: 16704FD498F3198D6A1E92CA301FEA97F303CE815B5F26EF83113786 -253: 40721B0F061E5A69413A957A876C15ED3A4892D6A471522D82516DFB -254: A525CA4BAD5D45931E9D86F95F152C7BA6685BBA7EEDDDE6A0E5E4AA -255: D95C168E8F666375A1C7D574686D36293FCFD3717D79B212D47D97B7 -256: BD34C1FAA03A01DB5E0C3A3D5E0440D6E5E361060F3DC9D149A26812 -257: 03E10A11A8BDF2EC14AFB011C5C9BB2EE3680025DEC0424DFE5DC2DF -258: 33194743142F4F5474D0C838F810B118896FE27BBC5F2DF131B0AFF2 -259: 662DC8FC31A54BE1B24EAB02A31DCED04A9F91732BC8FC1E15019FAC -260: 4DF0C8D3C0E78064FFF39A81B9425CF27143B1B8F5FEB7196F1F2D83 -261: B75B4229C34125D73A2CBB3121F52E21D0BAB18C26325D737F059E5B -262: DE5D530F306AECC6FB3E28BA257F880021DFDC1587CB6B1F4CE46EFC -263: 5A7B8217581080C5BE7D170616F2CC83515E2FBA5C65E5F34A467DA9 -264: 903BC1827EEBC44603C6B928980CB3DF28F263C4156513022A45F475 -265: 9908F48AA078D1D6597AE7C218CEE0EEB12A2C41231B51B988373353 -266: 8AB0C41518972B3C57C089A8C0EBC60A8E9C43E301C43421A37D74B7 -267: 54420E517AED65DB6EBBC277F4FAFC724B8B7C696A1C71D3AB3ADB55 -268: F5D60C41755C454A9ADEF57FDE9DA16DC5AA415BAAA78903ED9C64DE -269: AEE77DC85E4C31A8941220612457825E043F80CBA918C2E70A470788 -270: 4237D2216D0BB493CF29E7CE17172C01401E19F6D31E868532ACB470 -271: BC7C26D8C4AF880BE8506E12B4D4091949D8B8E67A1812304E6195C2 -272: FD7441603B909F3CA97425B835DE0B90F81D6245D54D835AE8601EBE -273: 6807B8CD0195E6BF20B4A9A6A549F06DC7BA4BD6E9F618949E79FC5C -274: E29F1EE90A3C617AA28137B4A4569ADC5DC70EFA6575F32168908C28 -275: 494ED666F699AE72248EA95192E97715DE29968B02782693659B73E1 -276: B2AAC103619549F1A2666EEC5A75C54EB0DF8CEDEBA0ACF8866D555A -277: BB442BC168D2DBBE1FFFA41E1C0075320998A319D8B2E52512D120D6 -278: F7A055F7B30C4AC467092B4370799F885A93C622C6EEAE4694F1A374 -279: A15A08CA715FE318CA88404B5BCB19C5D97CDF440F84FDE03ED60A70 -280: 20A02956C34845DA985D75CF6DC80C3F53BC1F1C7826126994D71F74 -281: 2E3F7DFB7B58AAA8F01B11F46B7BFD5E27063E73D3BA32666D933284 -282: 395B9F7BB41D7FB37C4C33FAEB604AB91AC82139B8DDB10B91235F58 -283: 444AFF7A34FBF38911AA5329E4A673D5A41AFBC8DC1E4C67090E4924 -284: B622574B90BF83A82B3E664E1C834EB9A8051F942300B32367FF5851 -285: 3392C851D4D61FF0F15178E7AEBF176E640271E25D1617F647CFDD5D -286: 1D6060A07BE28B210DAB552576FBA7CAFF2C25BF75C8F0BAF5B47793 -287: D0A87B49E62BC8D7A2BCC3C8104836C5E712F2A4B5FE52D67A23BAB6 -288: E0AE33F2DD63C31EF87F219C9B80C897669974B73D8A9FE64500887B - -Hash: shake128 - 0: 7F9C2BA4E88F827D616045507605853ED73B8093F6EFBC88EB1A6EACFA66EF26 - 1: 0B784469A0628E03861CD8A196DFAFA0E9E8056D04CDDCC49F0746B9AD43CCB2 - 2: E62801291D99605599422504E24283F0633B6D9A84D60B37DC9FA04A8C59205F - 3: 203D4B7543731AD58BCE7697B39A48EAFC4FEE548891D1CF94BFFD231022A896 - 4: 0B0CC28E60E37698B411234B1158A5D42636440432A28E8B8DF5BE04208878F9 - 5: E0DA1CFF89D768C948759B3040DA9423A6F2BBF6265474DBE0591C34EDB85B83 - 6: 66949B7A0951E403BEE03087BBBF6A2643A9BA982403F7E203163315B04D0635 - 7: 4652C0AED60F33EF1B6DD719770CFFC99756D6865D74E8F27DA5118B29236561 - 8: 2EA7A0601B9C5CB41E469F854077C1E33AAC94D39CE46163429ABCACFA992BBC - 9: CD53FF1056ACAF76C777170B6E120101D9996FAD8B6672DE321ABB04CC78F96C - 10: CDE86EE7D357C10A493012840FC8C8D0CE332BFA75D4975A91BBBE78C0BC4F25 - 11: 8771D6DC1F97A08CB21D14C112EE90B95098BB2B8AF0072BD610226B6D10488B - 12: 15BC36A4F117F4FDAB5364D5DA678C2E35CE0950A57C1A235ECC830ECE29ECEE - 13: 779C2936699F8741F72142C68D0280B40C3CF2A23EDEE39594C213F9519931C0 - 14: 685139CBBD97DA48727EECCC7050D13D3EB43BBE9112D950A46FC9F1843A7CF3 - 15: FB7B7ECFDEF92986C9DD3280AF1C085292A9D5CF5CF33774552ACC588F3BDE2A - 16: 98481946DE85C670A7A84432AB4091A81EC7A3126D0F60D33A589BD82714FBCF - 17: 238B0259ABADBCC1F4BCE2D995BEF5DCCF87E784BFEF35CC714F0A9FAEF0D965 - 18: E00E4652A9FF758CEA71764616B9B2ACEF1503B27F2F070FD41716D1AE9EE63D - 19: 988A668D4532CF3931551051DF40E412F9A3075A544C39FBE60A5A043754A4BB - 20: 4EDF4DE93C39487E735EDCF4E989B57A34CD0476883405C34AD3D4247F8B8ECD - 21: 70E320D2302B2DC63601F46471914B5CE2D193C5D551ACDD5CBE245C78DB7134 - 22: E935126821DDD3C70D7E6496BBA9A1F6A6196C9C6C4A075CE9596773B4FA31B6 - 23: 4FF4F41DDE30924CC1B802646C5AEDAE3EAD0E2B4BDAD736AEEA03A87A1F0D67 - 24: FBD0421F96932D037D538057E34DEC52F3890B973EA0A7E9AFB2D6CC1EBE8E2E - 25: 95351C55FD897BF4DD64ED26039042C6A08D0B0D547D2BFE62171465092A13DA - 26: 4906A13E8CC46E006EC8E207FE8FE2E0D8AEBCCB444FFCDAEC84B33E5ED4AA0A - 27: 351437F5F725D6B8D7F6B841485A79F6F44AE33A74093EB477BF792FD198AA44 - 28: 30E5B0C57DDA88C933A08CBE53EFA43F1890BDB3DB44002436D653554BE98B08 - 29: 3FFF5E8170C9C1009ADED45AF65754899C3F88BA351285C300E45B11EF05AFE0 - 30: E962490249D53B60C1072A2F5629E2A880E7560149DFB61C9BE8B8ABEC7D6B04 - 31: B9FB3ED4741ACF81D2074BCBD404002FFF1541A1E75D2A87E726F59144F5A3B7 - 32: 066A361DC675F856CECDC02B25218A10CEC0CECF79859EC0FEC3D409E5847A92 - 33: 701CF026357B0FAA0927C80981D796AB3405CE8EBF72B74D56089F168AE06960 - 34: 42B3C5CBDC45441A59489B99A72A74FB0CB4C1A2B0182AEB5F48F925D8EEE07C - 35: A1224A4496506A4DCB4BAB172A880FAE99583EE67A33B42E95F08E9B8FD8DE43 - 36: 0C3703B56E0E78A81F96CDEAA2A63CBFF7A72C108813E74F9B42EBEBBA78E9DD - 37: A7337209E29A96F2057E63CF708D64D58162A37F076260660C1A56FB46943C7C - 38: 9F063E976FAF114BF88631E5D4F1B18FAD85D11E29D64FD039D0911B5814E6E7 - 39: 5670FEF9DAB2893F31CC2FC712BDAE3F8EEDDCDC15BEFD9E81143DD622072816 - 40: 99BA8BAB5BC61A7433E902E7EC8A66D05349425EF8530A4CC43B746BF850EB0C - 41: 1F5A420B55790C436DA712FF03C5E5B6357ECBA9E8F18708C9629C4C928BCCC6 - 42: DC29DCE4EB3A1B75C02E52352B0A649A180F76D1008AD8C72B159C8E61E2D957 - 43: F2CE06F03E6413A6BFCCE805DE0B4A57525DF1988661A79738689E5760AA04BD - 44: A9480E372B4B23B5B7462134BFF281F86FEC2E3632DF6E68A77836194E5C449F - 45: 06469F7B2B0EE228C409EE582ACA6DADFF35598BE62A54BD9B3D0B211502889E - 46: 12A4B9FCA7EBFD1BB035603C67FFF6AF9B2DB6E7531590F1E32E4A9E2DC40894 - 47: B0F2E9773E43DE156D59CEA5C0683348808490278CC3896C09F77DC48514C31B - 48: AA0E95005B8B23241332EDB390A53D75747E97444B2DB8D04C3CBAC3BEBE8C3B - 49: 44098E367193A901D75C21366841A0776D665847E7451575905C13B56ACAC4DC - 50: D35453ABA7A0853322BF2B10B531A5159596518EAD2BB2F3F4A854B2E13F4DB3 - 51: 132DED329156494874426A469A4A5D3FA42CA681A306974A1433C3FD9660E18F - 52: 5B1E78F7B20FF92846B7F4FEDF5FB293B3E652170612FCFF1EB7E340B934FF4C - 53: C493308C6B99F6502070E7807FF3B66C1ADAF6C249852976E1423C216B5B9F0A - 54: 7E7DAC076AC5B415FBCA392367FB9A241D7B72231E10D656B06CFA1CFC2658C6 - 55: 2567EF8BF8727DCCBE710668F410EDEE7C3A950F0DE6693D2704F29B3795EA6F - 56: 795045323781A7ED0D6BC15F98961C6E392D36C4B0CC866C4E186FA94ACCB336 - 57: 9F6EE133650FB9E7FA4DFB9AB9FB2302029520ACAA9C64FD5A585CA1097FAC05 - 58: 361C96790F6BF1E93192398FAADBC8B3C33C40A43A43AD31C4F0310AB3738616 - 59: 045DB2A737EFB22785CF6EE756133463FF06EAA8A9CC6E1259917E086880B9A6 - 60: B9E982F9BDDA6E0EB4AED7C63629F3741CE6F87BD52CA89CB7EA62555ECF52A5 - 61: D0D3DB969E94D84514F45C3A7D836F3B7F679EC7FEE6A1202072C8EBAAA52954 - 62: 8507F6AC46772C9EA055915675F3A5319DCA9F3F4C30F350A57B97AB9C78DB6E - 63: E8C2C5BE7EF8B003EA881C06F34334691C24267BD31CA0360FAA7375B2362DD9 - 64: D96D7E90A6278534DE6B95EAF3DBE0C478CF582577B36A50A3A8AF6829B73404 - 65: 701CE6125B588C626A6D9C68411A4588BAC7CC9ED2AFBA7BCC0B068BDC0DBC99 - 66: 76043A0AC1FE9A2D941B4BEE3346931E1686FA5DBB7440529D23E4D0064A3ACD - 67: B254A188A28C0BF1FAB0A32136C58CB9FFBFC929678BA48C3C4070D21FBB8D6B - 68: 5AE6DC728C7E0C74C76FF74290962EA3EC53B0590D6491A06B21695D2011327B - 69: F346D4E85113E2C55AA31D6216D0EC282A33059E536962449B84C92EB6600D01 - 70: B4D20A681C246D7398FB84E8B0E70EA93B4683CC3B50E25E38574AA623682730 - 71: 87495B03CD07A1624DF24A4DEC4019D6E014094B334A33C53344FEB7931464E9 - 72: 29CBC126C6E6BA6A53C0B6D2A556FCD13EDDB6EBFFF551B2405C51B4F0AAA45C - 73: 05876DECCC921922E3555320777779E6510935E9BABB6D9B9EABE52FD9246F51 - 74: 4C34ECCBB1FEF5B715A95157BEDFB8E87DF360B59E930CA5E19621412F2839D2 - 75: 8FE289AC6678F5A5A68A52A3B9BD8A6B8154263F1FE17EC03816D70B80596EAC - 76: BE1312DEF550A8D4A5B328345220D8347168D529D08FA21E87E671D1150F61E5 - 77: 460F499B283CF10692D786140E9789BEA6C3DC17DF4B323B971BA4166CABE182 - 78: C3EDDCCECFE12F8E94C321E8B4EFA6AA95681F73FBA3706B173E496B0D2A3075 - 79: ADCF01B7B4C5B4E564DD4048BF45CB265F0E8378435679A4924E0ED62BD3C4A4 - 80: FD10046BCC03AF5AFFEB7CF6C36F30E4E023EA4B6DFE3CFBA311A36FE65DAB68 - 81: 4A5CF07E1D1CC772C8F9092CE08037A37C3B968B31CACEAC4927155F50375007 - 82: A28157E0EB0ADE6E0F466CC9C568E0F832944F44943710C92A64837CE224EF10 - 83: A36F15FE83C24A92515635CCEBB2A767DD4791C9A0032F65944F6165296DDA8C - 84: F461D5BA316CA5BB24B7322A1C02778BCEA335B1399A3D996AFB208D47213433 - 85: 7F43880B5E8E195CF1A1E86121E98DADAFE15E8C4365EDE9260D7651CCFE4D0D - 86: 0079E71359688FB2A9A682983FB20BEFFB0D6D676E567634E0AD4E270C593718 - 87: 9CCA878E20F217386BDDFD1B98B25C7AE938DFCA181783FA620352C550C57989 - 88: 913BBFCF87FBE8BB682B8796F43A7DCC43A485763E9C4FC879A38C4EA5DD0BF1 - 89: 71B48570B974BCEBF7AC0342F03F9A274A93DCB1FE2C6B922ED2C36E07D6F5FE - 90: 42CF4CC90FCE9C913C5957DB8751B3309F524E07E76A7BC8C4F5220A4337190D - 91: 495C3871A1AC236F5E2182D464E8233DAFD4EB0220CA0B53CC162585877E734D - 92: 2835AC8B716934D7A4DE712AB073B8DA28F06C8B2C9C3A197889D9FAE140FA03 - 93: C1C0A1B215D0AF707FB1D870E213F71B0147E3F36B97040EC210420F16D5F7FD - 94: D85853311D0C56825060728DB893C1E4A2E5F716A134109386A0FBF8556E6E91 - 95: E90438A5A78E17E2C1E3DB34CEB014683DBD1533FEB61B3EBAC275CCD73759FC - 96: 21E2073B4E7188E967E9AFC23B564823284F5E189703C3C92DD1F37DE341853A - 97: 7A69EAE42B6EAF82945B2833E52A9A31B7B8ADEC2C3E0490BEE1BB716DF880C0 - 98: C5FA321F0C1FF5BD51BBE630D27CD4089ECB259556424E7546CD4DC2FA519C47 - 99: 953D8965B578CC47B93D425EA1A537F272224E1FA34EA70AE76795ED18EB496A -100: 04EBA30B78550EE461BB4D591D2B3667EB844002EEE5A1C7199F7D0420385F11 -101: D85B5AE80BFA37550CA9669FD9FB53FBE36BECC24EBD8EFAE735CD3D34179E49 -102: 4D0ED7CF9D31E11AC85D28F6A1E0EE657AEFFD0295743A65F9A7D26193BCB79E -103: 4ECB7BC8E13B4A7460D86840CC8E07CE3370D67AA0489337D0473628BC6275AB -104: F7687986587914614951AEB538EC87289AFA6D1285E1FACDF8860D0C6D98BD4F -105: 9A6DCB2894621D51B554A6B523F598340C7B4CFB2CB33841CE11D320DFC790B6 -106: 20BD355731B91C6D0D9E929712C81790BDE87CAE9B43B6D802154F7476EAB15A -107: 749B60F75672C13FB919156777DEACB9331A51DA2040C472A5BB7847C3F66414 -108: A7170A2DE74F0829B49DF184BEC242660DC4B240DAC3BB20B9F9A457001B4671 -109: 00CA9966063C96660EBEA7645607541E2358C774D10E026E3954BE669DC736E7 -110: 73638201C5534B443D24868C15E981985EE355D4BFD9D9F0167CC6D003E36C53 -111: CD07B68063C1C5BAB1BA6487C5F14E900CF17911F98073EA7D63892AB23CA243 -112: C258563EE2C7F1D665349B630102E38AA5C35B96FB3EC304DF3C2A80E18662FD -113: F86403323428F9B11B150030074152AC1B95E41DE67216D8787C36327CCE4277 -114: DAEE5D1528B29DDAB7F9247A57AC04153583BE0B413BFEB959DF92F209A6C45A -115: EA371EE645DECE2C8C9891941102B5911B21898B92F54BA91813B3A66F3B84AB -116: 28ED068F450EEAA020BCD6EA5BB6C7E09829B658BF2379F268A3C53A6A3C6164 -117: 1D9C2DD6709016C1B8A32BFE205F5385247FFF551E8104E3279C98618CBBF675 -118: F81AE57D2CF97368428E345F38F349963E1C733A6376F7888C6099BB378421FD -119: 3D8D5832DB61538A492A84572F38F4C932A3CB608C56008FBB74C088EB9D6762 -120: 10B6AC94A0F4081BDC17395F99D1C8688138C70443850109F9A3CF8EDED9729E -121: 9F4DD5F42F2377F07F6E829BC02978D41088A4844B6AA5C8BBB54CB4089FAD61 -122: 5C2528FC4CBBBBD9AC6C499834236A27FD23B02414C0ACB5831382DE154238B2 -123: BCCC572BCE8B0E0F7075D50ADEDF9513ACA564B016BA50B994872FF1255FE80B -124: D14FDC259A8071E7582A151DAF77ED08724BBCB14F160715FB60DA5093C55B8E -125: EB1E2A01F8E9E1200A9558D4080D255F878164DE6F6D63ABA61F1C712A141381 -126: 05316363AFC2F603FC48FAE7B5E253A3761B4269D382D92F40B822B180CAB608 -127: 4D2D62B4C29B64D592631D7F764C482407EC1663A9C1378F9A40BBED8BA61347 -128: CD5FD43033DF4A618199E01EB9B999830EDBC36E0865E10EF1EA7F8D513CDFBF -129: 7E78F5B0B1B8C1919332254F504B47D8CAF453DC6B5094944A41E732FDE983D0 -130: 5C06CDF41C4A68303DB14B68026E329DE0DAA201C6014679A81BA69B3CEED270 -131: 4B2D4EC7CE37C3E43B2114250DC7172249BBF7CFF3C5B506E79DA9FFC7AE3ED8 -132: 9C671CBD3FF4DE912FA0E05B9ADC405118402D0BEA860F04FFAF90AB0790DA32 -133: 31EC6B812DDC0F12D2D871D952444A447BE97DCE65A87334525C7F83A7151204 -134: A7E67C2EC36C785C654B1E7AB8A217B62EF61C2E86192EA65EEBF14ED7FF966A -135: D11FAFA27F42A8162B8AE013535771DE81722C0ABC8AA2BCA01825462E2F8971 -136: 30BDFD69382CAB028173FBA7C6D53878EC18081358E52C955DC6F5D52B60B029 -137: 047A94427406B3AC81270FE1C3AAFE1594F121BDCA236DCB2C01CD977B41EE02 -138: 5B45EDA5703C4AB2251758AC5F5DCBEBA92DB3EFF202B1C7F7B594D4A29794F2 -139: 3F40AF528781BA2B906266EE9BEA8D6137FAEC9A3E51B90F73DAE2E53B4ECFEC -140: D9D1E1F640FF3FCEC9D549D050BEB97916579B234C61AB631A259A73250E3C9A -141: 3D021B0D6C9A5B00776DA7CF250D8BF538DED2E4CE59BB181868D4C27A7BB671 -142: 181CD641BC8EA00336A5B1CA2FD3D6EDBA4B8B1AD182708BE0F67BB9382986A9 -143: CB1FB98BE9317FCFD0947C72EEC9383E99C87689BA3BB2F080B0A252E951D7A9 -144: D8A845597FAA65FBB3E62A8CFD042511B456E9158E9C260DD1699FD28E3CDBB4 -145: B75EC6549A67D3BF37F403A425EE947D2DCDB332DEBB516516102EA85BED8983 -146: 8693E9ADF5B8F4E2D449E61B8B1D338514D6641652271030BA938794C7EEB9FB -147: 65EB2C78925FDF3F39B85A88AF5FD4C79B70058A06ED7F0495A689FF4A1EC8EF -148: DB7B9293031E1021700A83B9A45A9DB1DB4B7B0106F105A826B5FDD47FFBBB51 -149: CD270A91A44D88DAA979E0B38E3D6146C9DAA8E578105AF2AE49C75C61B5E997 -150: 9CCEFDDD96C264FEFE56041DEE342C48A2C00F6E26DCC74DFDF9BC1B24DC5D83 -151: 31A70A8EF3B16D2C5B1607BC66E38AEC8D931FDBEE89269F7278B0E5959F4A50 -152: 1355461736BF73F99DC148B09760D047342AE801274CC89DFDDAB193FB7111FA -153: F765FD8520EB133B269CD30A33B94C08F67C6A9A370DE33332BAD1DD987A3AF0 -154: 1E45F94997ED209B083D513C504E0F71B11F29E48988DA53AEF2D3678A0AC18C -155: 908338C32A1264CC34E6680135BD8148F9C91A39513BDE786E2AD5C1260B0F2B -156: 4A705081F5D6CABBC5BF16523D1D3608AFF4B2B2063C15B7325392DD2D523904 -157: 751622E92A2C148D642B1665A2D99D9072178D051A50D3CA5568546970636E3B -158: A968D1727CBD398A48488D73CBD59E16D236D285C496EAC4530DE30F6247EA6A -159: FE09E59F5B7FEA96AF4A38B3587E5CDA175C9A215EEBCA3A1692D3AB8FC724D1 -160: 68B6C17FC3ABF63812D3B80F3C4051A04C3F0CB85C4F04D7D34C0E3B15E50399 -161: 6207323D732A57205D6AC2FA76B6EE4FAD7C8E1B9DB9A6D3703C4E68772B3437 -162: 4809BE56D952E0D7EF42649592163FC36BED03672A697B68F8D8DA60DB55D751 -163: 1D5ABDEFE687536883766521C290586F75A2E13FC06E3A38A8DAC15E7584D3E6 -164: 0460F79D71CBBDA7618929F6A859CA930FEB30EE5FF7A6D0A4D058AC49E3D389 -165: 0D7DBDD6A238B52B56891040A00C417853BBF631ADAF47D80B7967C4A784D939 -166: 3BA54A1410815583E600DB440B79530C7D4D549621DC260AB88555E3F24729A4 -167: 1E552791CC4E93A0D4A8DC47AE49228C2FAA869E40E628F6ACE477AEC3F1CA7A -168: F15277EB61C4908D44A2853F3CDE071AE2ED7A23461FBE162A1A98CF6875059C -169: 015BE3338C986D9846AFFA0F94B4AFC2A76BC289C709E1A596EC9ECCF090A773 -170: BF52BE8E9FFA5F744FCB4FC2E74F73C0E18FAD69D2EB7FF23420163E5962216B -171: D7E5E3E373CA8314E0E5FEE4478A3284E9A0A6F6669FE7E27AD49B12C43FB596 -172: E7A94267D22229D7CA7E410FEA953B564B95343A42BA17F0497C39DE6DF5FBF9 -173: 27B27FACA30438B61D244C57622264164919D560C49B1F57DF70F3108AF44850 -174: 7C9171F9DC1526AF2D083C8CBD951445E1C084C2B249F40E8F80EDE2484A12C9 -175: 48DFFC4739781019941C74AFB243918107CBFC4DDC8C96A87893EFE2F8FD319D -176: 366A616E5A46681CFED3F679BEE2EEDE72264327D2F399F7BE1FFF98D71256E8 -177: 75CF125C3BDA824EBF420A9F224D70D9CD2315C7F6BC67F82535DAAAFA36B623 -178: ABB6CB8529049C03D0362D8026A50F3C45EBD2DC924636FA1B9D78A3FAD61BA7 -179: 25DAEAD3A02A9A9DC712328B7EE190DD826FB63E9E663E2F06FDCEE5BCD3C2C9 -180: C7550DD276817F2957BE7EB4F531B2C5964D683546D5B3970A714B708A2DFCAC -181: 89F8D3C7E22C137D31071AB1C4A7FB44B694A401F09EF20BC29B354C704BB15E -182: 2D69522C5C73DAC11C3DC744A8D9FD138756B8E457E5578EBB312A91816098DD -183: CCF2EBEF230FBCA9FEFCA68C1EAB58FAE7A8C22C70A5FF9C18AEF296955E259E -184: 93DF7A6B9C69A1353FB2C1E44263D95D4B60D84E970065EB1D2BF072B8E05E11 -185: 7C85CC0DA7EECFDEF8709189B1E9F760AEC68DEC9F23B04F81A50BB5587C5E6C -186: 6B4E901E3785755D16D4F036AF7CB3FF455E58B7D74D4C9957F8C08F9876C03A -187: 745B1F8A19A9DEC3C0420A9EEF3623C1D1712A25C408539DD301ADD6D309D538 -188: 3665AC7E5C47C7A6FF54F50FF05C8675413C873BE0FF91C67BBE2C7F081AC2D6 -189: B84D4E67232AE0839643E50CDCD8C8E3A54B5E7F7D435EE5FEB6AF157C861A5B -190: 3E9E8DCD4EE5DB1E0B2778D93B300ECD7DDAF14C3A774A308D661BF10318C539 -191: 6EB9F4DD8786B15DFDC437262F9A6E5D318BFA6C9DC900225DD5A33AC2E7D3D9 -192: DC457F1B847DBEDFC2C8C06593B3D73106B6F8D356C841CD6152B7BCD631FC26 -193: 350B43A373FB316AD7EDFE335E35846264E09A6A4F757464B0A7DFFC90FDFD1D -194: B941E1FE6FB6940D09A6A6C94F8B9C7BB1F87501EA5EF8101CDDADA972001387 -195: 974704AF377822B6ED992250821428B9ADD1DCC5690485D49E01941CDAC4F4EB -196: B781831B6C2568A8E49E02368D348B4CA5F5B854BF2082FEA92655890AB42518 -197: 2DF482A19307292DBB01E20E4BE0A6B5264BA9F5217E7268DD7ED470B31EF02A -198: D2E8E41CD2A37F3697A20D78A36F566268F6043BD0877BC1C758A5AE993AFD6E -199: 4E6B94846BC1727180B5EF45AC7B3561D972383F02E8BFCFD15D221DF284186D -200: 0C4234CA1E31801AE606F8B8D8E0665C66F42A21D601C2681858A92C79AD5D69 -201: E42F9787A4B5D80C9C61DCB97909842651D033CBD9A838D804CC70B3A7A74963 -202: 96E494EF729E5B732886EB00AF4B0CE97D470999370718F57F9AD4BDE8E34B78 -203: 7E90C8AC4C9D318C9676F3249368BDD76E0C2A0919816587606ABF6E71541914 -204: 180EFD817DDDAECD5DB27026BD96B7372BB0EA8B8AE9284A89F71AD150217247 -205: 89E3EA2D94AC5CE980835A5C0FBC54555D17897A8C99E4D58F443B9A97DBFC9A -206: D1D91A7EDD84BFC685913AA473CE9DA87B99901E7391F63CB8C16CD71BA125B7 -207: 752294793B1C459D58065826A9FC5AFCBB3908F9B8D2F4DFB42E9087BFC7D05A -208: ECD9AB07BE44E93DDC43E94F0A8467D0B36F8461DFB15903E6F9CC84144E3541 -209: EA2FC1D8D7788E8FF0C786F303D0477E8779EC645BB5377571E051C896410C4E -210: 2428F45E74A78C821AD6E5006D3B9E684DF586EBA441AB8D8E0BEBB0507A1636 -211: A1A47FAB93675A7098AF7AA6F3533BB23D360B528D2844D962D9B6D875A54A7E -212: CFF228DEF73EFB58B6455D3E543ECCBBDD57288A201772691DC019985E88D7D6 -213: B8F567488E6C9610E02DAAD1965305E070DAB0C11C8BD83FD525E88CE9121E4C -214: A8E412527E8CA52BCA1AB66D493C86F30D17873849377B33B252E4EA48803773 -215: 0A10D17A741F95EA8FD6C807F8FBC7D126E66341AD57E408452622C37826A73E -216: A76AFAF1185581FD3B98A3DAE3A43816DB6B0CDD729801573F71F9F69676B2C2 -217: AEF22FAEBF9653F72A75C53178E46590C855FE31457F779C71F1F751AA40DBE1 -218: 86550C16D199B81ABF9CAEB99E5941A1CE0FCC80739FFDF11554FF6CD6617C1C -219: E2E274438A01E076900A6BAE38C81ED29E63ADC2C079F90AD9D7017CE7F166F9 -220: 7D30FA85945F341F54A33B24EFF6799B5A08441C754DB2191A8549AC84BAEC43 -221: AAEA84717B333FAD1A226FD0CDA842FD25713F748F82D73E06F5CBDDBFE68057 -222: E0A59532203F9B36F9F3F3619E200AB3BEB0315E38A11B5E033BD68999B45DC2 -223: C27619C78E069500F886C38F56C44EE5B5575A2DAEC2AF95B25D5CD5478EC925 -224: 43BCB2BDB5D09972AB46CD2CAE0792D0AB0A3DEB2C46F06885B3EA8648DA81DC -225: 388F660D6E0B378A9C511B5D2C0B01123D83B193BD8395A214988520AD01D1BE -226: BAC3717BB99DC4E4A3284EC458A07CAB67E4FE38B2BF6D8F1944DE89BFDEEEB8 -227: 2241093AF5638463C29C34323C6F0364FC9CF632E31EED296B5E1D6928B03CC2 -228: A1480748A0739097D59FF241F60D37BD7AECC909BEEB09B23740FDDF7D630BE6 -229: 82A12D203F2283CAFF937C8181B2A59866F63269BC9B28F043092A12E6AFC481 -230: B006A21A0910082570C91E558A59086ABCD571E5824C3E61D5DEAB4153023DCC -231: 887C480F501C390DEF626E6916770EB522622CBDC85BDF6BA445EDF2E248F950 -232: CC1F791AC568747C5F635FF554D758739353C454E1F9EFD95D5A9FD2B5D34EAF -233: F0D14019F023DABAAFF096BD6DC848B2EF25C18D5EA90B2BC3C1AD072D45CE2D -234: 3435EBE3263BAA8CCAE231B1DF8912A0923F55F7FDE2F1222D735EE2FFE275DC -235: F85F8BC8EA35424FA2AD68D921555F3A5E53406F419C8DB1C3554A59C2940B52 -236: BDF7AD289B220039311B5B7660777571A4B0B8654202E31D17A7E7FAA7337545 -237: 022C80174FC07F6422B5E8BCA4E4354A47456E1C7791D211D22B76923F7AECCC -238: 5E5774ADB48DF35EC287F6DB61398B351E82C89C6E011EFD140E0B096C243B92 -239: 1459A9C41DADCC0126C75771F11164D7354FAC0A6DD4E0AC25EDFB02C80B41C3 -240: 90BEE4F8D438AA5F4B4A321FD1813CF539DB616141D2C6B8CD27FD94D13666D9 -241: 9FE142BA2AA1CBD9FB7797A50849D04D3E8F5EC015A50487DFEBE121CFDE1DC2 -242: CE783FB0610A110397B2ABFCE046C94B4EE90D06E1FB7B497874EB0312E401C9 -243: D8BAB61BF0431156D6B967E6E22E30D01C07D3FB4FF1083FD0EF7A0810653D87 -244: 31B54D923182DE6ADFBA9440E0AB83D02FFE1ABAE1FCEDE38F30C4670EE621DB -245: 0F604ABE5F769F69572F443F135D82CD5ED0354BB1AD2F2A6A0A2613A1E944AF -246: CC20457438627BAC576BC1DAC79F67FD7BAA3446FED43677A5BAD60A7E391692 -247: 2149A3A38FE4F76BFBF56358793F315E62D6C1F2023D94F77E8E1CE2A5AE667E -248: 799392CE47335B584FFD459A6AE58C97380602019655CAF7BB9685E71AAA0805 -249: 0CC0ECD9050BD0734B9A59BE9411A956800A6302AD94C20DD50075A6B2D8FB94 -250: 7C1F862F09B5C6E19A0E5CD240A7FA1D9BDB0174B4BC4BEB17C70C7847F99F3E -251: 1F32E43206173F2BE91DFA1E447399BAC789089692B4BE4AB34D6B8D81DD02DF -252: 27C2D01CD64A88F4BE691C43AE717F1B8645D1B7C686AA702B5CFBAFC71190EB -253: A10DC0C1F25472931034C82EE6CF47CE8B6777F29D102E6A641FD606A52B4837 -254: 692A687763649B17F6DEEF8F5183CC2ADC3E24A7F6238F5F767F5E4643CF6F5E -255: 9DC7650D682956137D374C9BCD2F121912758F90441E3501DE49818BCEA4DCBB -256: 9D32BA2AA8F40B0CDF108376D77ABFD5C97F149E6BA0C9EFE3499C7B3C039B0A -257: B4C9475F71304E446DDCA51E468F0F369B01C334B4391BAFBC2236CEA5CB7224 -258: A17567B30A93A3F8DFBC92A927A92007F1E181EF6264E73C78844A499AA6AC90 -259: 6152E4A388A82F372614DFDF1551FAC268297CC3C90A1436476C8947A828EE1D -260: 7A284F6D18D8EA5F186538B4CE54D45A72A334AD2FD6FD429A9EA46C6A9FCC45 -261: 9BB266D798DC0EE57F351F5E4E6DB55C5B3430F53EE6562E9FFBED50D33F8E5D -262: 57091563C843EE9495686CC57F0C3B51F330C29D97BB02F773E1C0CD518B1FFA -263: F55DF458E47D0172A719CCA15D450D3A9D962DC6F150387A2DE5C574AC69954C -264: 799E804D3FC745758E0333BFB28B221074CACB29EAA6E9D7D7CB7C80F9A74FD6 -265: 0D77BCF174B6B1892691819B3AE75753385B7FC21169B347C0D97363FF434F36 -266: 5B9C32CE1EFE8C5D21D1DFFB32795209D35DBC6FC47FD5C08A18CB4B82C7EB0A -267: 20A3A061BC52F6BE39144C9EDDEC46F4D058991404BC3A56347A65F4CF17FCE6 -268: AF33CF1E61C8AA5DEA2112CC65EB769B82F25F97C010EAEC31641ED64939F7D2 -269: 973106DCA628A0CE2AEA3F7C148C9BD1F84602056B0D1D6EE10C70069EB42B6E -270: 8F343923133A31BFF95BCE97865E08CBEB6538221AE19067D6ECFBDE2AF59B22 -271: 1119A07A1AA3A956E14CE5A815BA253B9D4905A2D1DB95AAE3383E43364884DF -272: 06103F2849461F0888AAD68F4BE55D817166F0CA6E4BA3B308F1E74343C56372 -273: 78DD2643F72468604006AB132F799107F61A6BAC0DF71B105980507B74CEE637 -274: 957260158FC1036DB81DE25CB0DF1BB78A6E860E080D0814C071DDEA78859C96 -275: E6A845ECA1AE9EEB4A43919C90724FA5B12D70CAF7630CD370B95AFFC5AE582E -276: 14FC524EF19CAAD8477D395992AA577A5AFC110C88EE7B1ECC68B4B155AB5446 -277: 374567A25D628EC318EFAD95570CB1EBE58EF9BBCF3A10A9E790398B58CF243A -278: 7E63A95BD47CE55AA3A06F9218F4E2B33DBC6D6CE6B9D2B250A1220DA49A04BA -279: 745B94E369362C8090C40144D4F3FDBBA88B35D28F75E9623B07DEA32556A861 -280: 6560B41D33EC2913CD72A428EB59790EA201A52EFC73EBFB97CE6EC9945CBB29 -281: F328BA870BB83A8F9D5466516D3CF61FE15D6BAF48087B9DFA901D4D9977F298 -282: 342871FD4538D4D2F49A112CED113F2A0DC750035A84C738B73B2AFB5C24BA74 -283: E55D75AD8327B3FF877D3B7824A7266B401DB4BD35635B2FD532F2BFB2DB6A00 -284: FA9FFF514ED2EA63B282EEA73EC9D7D32C63CA57A0B04127B3DA7B28DF6972A7 -285: 40B3C90BC2A4BE7FEF7FA64B8FA742DF19020D5CED7275380FC8A26ED1E56400 -286: 32C7786647D15F76A0D4937970829037AF7DF7E7161F26CF90EA33C1E7F10451 -287: 34867EBA95C36035A4E8773EEC8EEFE3033F90DD6612E22BAB0812C13A9FA6D7 -288: E9D5666AF83B6D024099C3A346C3555A92F5D3706DE3852CD6B70CE5322FA0EB -289: FEFFA1F93AD62A0934021E6303E38D520C714E22886788BF24C929D231DB3B1E -290: A9170C43DCCB78B4029A04F3D295D07E3558AEAA8306A0777BDACDC8B8B9DAEC -291: 151FFF64226D34EB7338CE42FC3DB06BB52DF8E3611650E561A9991818EBDFE8 -292: 6C4DA0C40929836D23C15ECF9B97230A5F198ED6DC5EB50573DC55C87115225A -293: 1F1F2ADCF52FC8BD3C04583CC54FAEFD60625C541B4E7B456007E261DCA4638C -294: F27CBC47C1A5136785740C1B644A09811D8A80F9E14E478CD720FBE827DC1841 -295: DAB9695FA167F345C9B05DF290755A14E2287B0075EC409143C265FEB0D033B8 -296: A65B4E0D271F3143345FA8D58BFD999A0E8D12F1652D96AE9BCB709752073FD4 -297: F3A0F98F66CF0C7FAE3D7E684CF73AF4B6111AAE23A5D22D793A5F094681502D -298: B7AD6E7E86EE59F38AB729D326E763363DEB244DBEEC5979E9D5ECDA78AB77C1 -299: F2AA82CB07A1B0A1C483C3465B380CC13CBA99A6BC144205560EACDE501E6BA6 -300: ACBF138B9CEB3B4F0B2A78BF886F2F2B286AF964F200F8784AF97E6DB5885558 -301: 359C69F48819D5D76ACE584CF9272898DC93F8707D2BD7A06D370F2EBB7820FB -302: BE2FC4A8B0A4619C9DD73D8A8F293E7E34106086342B49B26A8EECF1CA89B90C -303: 4E54A731FE5832BB9401DA4122F0C981CB4D64A7EB36B7A44B05203ADFF048CC -304: 3B9DDB7B0FA3729D8E46B81A49261539F3579E0960CB755F6C26AE687E9E45BC -305: 37318D199227327E7133EDA288909C3F809A8E8366D1357A2484E9E80A007549 -306: B4051F391AF2038A1705D58FBC95CCC6D82FFA94091B1973E2C4E17B7A6E244B -307: D87D8B7542B2E939804D2C2C4E8DD3293D28009D90DD889F29DEE4AA75630F45 -308: 4493D36C1C7802F19F776E4969D7C8763A9AA32D42D21B9EF360F8C835B63F35 -309: 40BBF137EE584A1FCD203D6B6A5CF21885154AB674C31B737A47BA99535B970D -310: CEB20696F394E3A6A129571CD0CBDD883DFEB12772950514009E70C1B10271DB -311: C1ABE352051479C70A973D0449D81BAE099EF9E57F86915DCE960677D144FD2B -312: BA980879DF7A8519709AF1E10C5C8B3C369B8FB117D40F2C2C100B6CC211AFA2 -313: 1E9CA517818B7AAEFB55CC3908DA90228B0E3605D3C3F464BE213223AB6D7913 -314: A5CFD7C946991EF2F0C0E4EACD6BC87ED556E71C750D4AAE004B35D7AA623D0E -315: 95423877DF70EBA2B48A01E7520ED11D34C3BD66FD97222113009759CD992FAC -316: 926AFF52E81C16E28D88A21A15BF68C6AFEF13EB0240BB60849A8300B5561667 -317: 180F96356702FDE5E14DCEAA9A8AD66600832457D03AD44CC20E5F2F3EDDBEC0 -318: 573DF09DE71D1B8895AADF2824602C8EA2BB60F7F28E24E78E90AB9978C92887 -319: 70E8434EA23A7C93CF6261A85A70D41DC270CBBC3D5A6DDA036CE6114386CCF2 -320: 2972347EA9441749E9C97BD400CCD6F5D9A30882A3DC54CBD82250AAFBA4856D -321: 0277D9AC6E62CB376EE53A997602B23353C0A8346C554BA2A95A91B7F01A04E0 -322: 5F455D9BFA8C5AB1C491EAF5644A24C7ECD185872500213978A81280599A2241 -323: 7C5CEB2B18A9A63252688A6021091C745B9717422E6A04178C8A19482357E4A1 -324: 38B87CB045EB8F87219F28A549CCFBBA00D1829134E22B060F1B16B21220BAC3 -325: 9FBECA0BA048FD19F1C14104E5A66FDDEE894BA5CB8355E8103FB1A711B5071E -326: 8F88BD8AB9284C00CDCE1061073710CD5D49FF4BD69E451C0DE6E7E8BA39B360 -327: 9EC33191FDE314FE52F74DFB2E663150A9B378857577487244BCB96D111B42B4 -328: BB7F54B63DF5BCEA5FBE99C7CD624BCF65E57FD5F1F02EE0DF37852FEA8065A4 -329: 659C8FCBADCFE94ECA4B0ACABF79BA9D4D174BFB960A4E0CC15D15D9E4B596B0 -330: C5484DC2BD9AE86C407CD31C43BC81EEE04A3EF0D9863A1E70E90C39CCA732AC -331: C5FFA5D98F41BEC5F562295115ED8054BD7E15D3D25F148EC4E60D79A187D097 -332: 1B668E9ECE574EDA9D2757BE2466A6039776CEFC69A2EC6860E620480C6C92F6 -333: 157D8ECCAC389202360152ECDE5DFEA6BD9EC15251972FA0F3CA6C3990AAED6F -334: 0112E569D576767AAD575919D1E8347F455E081E3125A9257E05EDBC0A498863 -335: AEC267CACDE6C617C3E59FCA945C4681DF6907EEED628AB003A5DAEA396FAD51 -336: 1EC1F8887FB8A5ECD8FC2692203320267A3BE636509F5A0065EF594341B84998 - -Hash: shake256 - 0: 46B9DD2B0BA88D13233B3FEB743EEB243FCD52EA62B81B82B50C27646ED5762FD75DC4DDD8C0F200CB05019D67B592F6FC821C49479AB48640292EACB3B7C4BE - 1: B8D01DF855F7075882C636F6DDEACF41E5DE0BBF30042EF0A86E36F4B8600D546C516501A6A3C821678D3D9943FA9E74B9B99FCCD47AECC91DD1F4946B8355B3 - 2: BC6FAC1888E51C55A2019B36984C6EFBBF492628C53D1397A1B8962BA80E8F223F13B5DFD1D7156229DCE3CC53FF9FA38423B6AB2591B73303D4EA9389E7CF3C - 3: 714501167EAD924EA87E422993EEA1E67DF0EAD7B93140C1109470FB66D50AAAFF04DDAFD104B481B98B1F4A81BE29FA10E54A51B2CF5F804C158A95202CED09 - 4: 48B8D57A5F8C29D0326049216380AA85D2D7A58B784F5A49E980CA93409E3D4BAC25509371F937EF3224820EDA0AF0915C10D07E2DF78BAFE7208D23F36388A9 - 5: F3D21988C170243FA71AD748E1198AED2DE43A81BDF3A2D033A800520C25A1501DDE8ABD6A6E64E659A305A7327B2D955A451D7693C1DD0C61AC15CD645B0BFD - 6: 3A1B0D60AADB0D3D435EF65AAC428A6CB122768EB8BC1AB505CBB37239E2087F4EDE665F54888B9AB31CD89E81996E0D8AE8B21FE9F7263E2132CF6363223F6D - 7: 552294355AFF5C43A2C7009607E47C0CA3720536EECCB2F7560D1574CE1A197951A4164AC477DB352C95BBD3C7D1D5BEB1BD9778BB7F4CA58FFA6F0F2ABD9766 - 8: B44DAE93F2360C4914FA999F3AED53901D47A1B614109E4BFBE8A595D5DD5058142C63B0B548E296C37F8972677B7FAF0C22BF85BF9C891C1B91F69184D8B6DE - 9: E101FF7ABE4B32631184812A043DE70D3EE1CA1CA6145273BEB851C85BC91CC3DE3AED881EF8EE6656290EDF32441875F79D49C64EA2F33F78F1EDA8A6D7A9BB - 10: 1296720BFAAC8504E84D1C97F33B57863495328649546B62851DBD77DC27CFB465F4983A97BB649CFB56ACC1619432F0BFEFBFBE33887A46E9CC71B48DA2D23E - 11: 4EB0E89FF82E0FE45E34E56F377CA2AC4A0442A7CE89F66B824B41DF55EA448AF8B919D9A3E188D08A5593A9485BC4C629C1A69F9F1CA9D7723D364059F9899C - 12: B330737B7F00887FFE79124D6177382B92FFDC2640390FBBF385268C288A9C9AD95691001C6BF065DF3A72BD5E58DC35B8D9045EEC7B39E990BE9790C70DB7A2 - 13: 6F31C02BB22B2C5C9914119D762E04575446B9325A95A90CA130813AD0AC97B61FE6949B33765AD18D29313147E7C3CF9EA0889ADA34A17DDBCF4230F76BD120 - 14: 5CA9B5426728C53309801A7AB1E5AECA94EBCB32A5503390CC205523AF9F8B835970614716F683B9F51ADD6CDA4AFED2AA12AF23C3A14E219FAB5F4323C249E7 - 15: BA4AA8CDB42AEE165964066EBF88A7D6ED68A5A4309E9448F6CDA2D2254D4706840A14A62B55C096058BEB6D3CA8CC1B9EA012130FE5FCD82B61AFF618AA85C1 - 16: 11A535D23A5AA23D22F8A025AD4253C606E9244D648FAA06071735C215A1E349993CB32620568291BEDF88ED4370F63B0A709DC2790F54E2319E4AC8C9332AF7 - 17: 160BB0184BA68AD3C5AC0BFAF1B1D5BE6A06E1E39ED853C68EDB5D8F2BD4673A8817AFCFE589BA65870D956DFE610AB55C5888BFF3E65C0572BDD37970087AC1 - 18: 9AF2724C09D2892EF056F3BB2485C634E8EA14D721376BDECA3FEC022224CA138BA83AFBA9354351D7B89AC54B3D3BD33BE81538485958CD88D8BE704E71C1B9 - 19: 0DA8106213D886FF93E79BF725709936681AE8ADE40930FA825F6AB8A414AD789CD37D319DE581605B1B155A4CF13DF97CD4A7A8D0A8615BD9AE245BCB5359AB - 20: A03F217C8EB9457C0EA8EE99D632CBD7ECE0CA01B40F21BD32B527A39DDA0A012FF19F8F8864835E79709327C9CCA3303EB2CACB6D6B498C6D7E1C87A9D556E3 - 21: 9C8AF12060F8E15889C40B7C629AE3F2CEAD9DEB16BE4BF789BA2BA7560237DF0B858C0C37325EE0AA6BAC79025EB2D4E563A2AB1D5024F5C21FA30976568B8F - 22: 909F1A677A172DF0EE55E401AA92BAD2C1DB3B650DFD82CA21488888A4B876AB8BCB8CC2169F85B227931D9B58BD9523874A615966DDE8A9C9CCF3A9C8864F6C - 23: DD0D8297A3E888F35C2D483B38E203700185120D75B3283117211C2D6432B3E7BE4CDA484436DCA7C8449CF0C1916B3C28043890069A9362E7D2859A4B63A1A0 - 24: 714951231FF70F18F44AD30645433C0B6204A1EE70640B374020B0AF88DCE11AADAB02FD3D67CFAB0E348BB4349BF6FDD8AAF7341C8BDE454D4229947055FF3A - 25: 609A5C3E3CAB590788D63578D620ACD2AC472962F9E409A61EF0FFC275DD7386AC4D20023C9976CFE8DF955EE5D10504A3FCB5F82E30D2D4EEB3051BE3FFB7BB - 26: EBA13E7BA89598B3F8E13C683F8D07772F38EE17CFDADC35953E13766D48BB7494A570E490A5A3A5216FB2FB15159B6FE79441C5081E1099452A8AF59144B0B2 - 27: C7CF341473AED01CC1DB212267522939E48BD7D27E6535F366215013F7DD0CAC7948F3400995A98612F6A102CD567E6BB77E64F968F8B38F5957D63C8808CF8B - 28: DDAC219541BB3227162B993A35E5C2DF59A26C308941C942F3DECCA428064159C930387CBA3FB08C08354C22CCACB2B50D896E01DA179DDA108C2A9470038849 - 29: 5C71C5BBB67461AD56BD1C5C2F2CD364DC84FCC0C1754A8A8277710B888CEACAD4FA156979E351EB649DAADBBD163508A515A783DCB112AAD7A6D353E7E0D34C - 30: D0F50F44CAB70B872762EB90441568189518FC8CF89443042ED57A26568BB8C52DC956CE5A7AA11F62A2393944B9093EAC352B90846C18646615DF395C7B971C - 31: AF40F019D34C8E7641C01FAC2D03B87B36601D0A6C8EC54F553B6118052B29C3B2B2B7A01D9DD4C54A48FA927ABE47ABD9C79A2E3FAD8DC39C72B8C4AAD352A9 - 32: 69F07C8840CE80024DB30939882C3D5BBC9C98B3E31E4513EBD2CA9B4503CDD3C9C90742452C7173D4A75AC49163E14EE0CC24EF7035B272D19A7AF1099B333F - 33: 4DAFEB9DC9CE2AD3AFE9395090F66FD3E33B2198ADF6FF92B27BA6C495FDA7036458F532A2C5943AEDD5F1C46B6AA4C84F7CDC595A44590170925904BE1C6E3C - 34: 949E46287D4B7AEC9897413D0B6ED1DFCA92729E09393D5EEA2D189D25B77E208A93AAB81F92C1F0BEB089B4D2A567A3FE43EDCAE70762718DB18AAB11B34FD7 - 35: 3A9A454F5325FA3343EAB3CDFF7EC76504138B6C9D843E8CF95F7A9D5C243239B380D289FA17F3742E3255A89709E63097A90A1A40128F0834DC538E21F97CDF - 36: 1E1C33CF1B2F10E53D5FBA6D5D675329C8BD9E17B6B958F686FAEDE555C284C61385AF839F503C29E8A9B664C2A654F3468145E188D76D68C6CDC8EFCAA88C4D - 37: 35064014797FF02269F8D4356918EE8632AE1510D1AC46B2DE5496A3FAFCB665F5D58590F4838A522B69AA0E8BF7AB2A94E3A09054C750A78299B31A1F0CF632 - 38: 696D13326B81A70D3BB299EB137D475B59DDEE671F92CDD334883FE6D784FC03813C2542A1E907F7FD128F60FC8DF51AAB8A58DA021F9E6BE1B6910549C701B4 - 39: 69DE1FB4028691CA954546982ACFFF25DF993D80A6BD9879908F2095E5AADFF86A9A6C687768D08BE75BD466F7134AD29D7C729262E1F7FAF9BA25A440F0D08A - 40: 791574F3E1A66D208C1F6183F989E2B636BC040EC7AAEAE417BC598803D6EE90BAA33942BD8CC65B5659E426EBDF461DA12A9AB686D4BB0121FDC7DA5D3D2088 - 41: DFBDF6E313B24BD263EBF0C90E4C2D1E320FD65DCA7D00DCBF766245FD84A3A08D117304FEB80F4B4918103D65117ECEE1BE7BD3E384A61D2A665DC47D300568 - 42: 69BC72D4E4B1F97BF5D016AEC9B29CCFD422141D0F58CA3E2660FC8A6055086E4523B048D9A6F3688D105FFF22E618641932465BAFD275E40A5E579C9EC4635F - 43: 922390718C4F0293BCEF61696542AD7DA5F4C25D672634C40FA4D6DEFE9DC112C7E1F7316D1AD5C9D376F8C9FE541002BACA4762F1D792D5D0ECE3E566450C0C - 44: AF6DDB20AE259C8D5A3822EFE6EADDCC9850BA764C562E191F81747BA52A4F44EB99B6DE988A22C333134D55A968ADEED682C63D76F31222B5517E40C0570C1A - 45: BB98F155FD3A9B0280C051FE0890B2698DA886487237255F7278EEC3994233A5D980442A817ABB5799B242B66AA09D798059ED88657F390332C5C4C11EC4DCEC - 46: 5948CD5041AB799909B85009651ABAA3BC2B611AB0461A2693466B38551DD6562633691B2E3F88C10341D2CC56F2F4EFFB3DDAB71700B83279041FCFB996F5C5 - 47: AFFD952F28A0210911889385E376373FC8FDA33BABDD917FD29B8E15E5E924646A2A7F6DD913F72FF1E3760D2FB12822D66F385F2F4833ED46801CAC119DE3D7 - 48: 0C459BB1B4D1CD8CDEC0209F37D4C91597896CE8DE0911BD021DB47029D70DC332AD39708E20DFE28F325B63BEFFE4F841AA834D46F740D3D988A3BCEF678DE7 - 49: 1F1B08EF9D0B67A8B084A650B687E414DEED5F76670C01684CEFFD6F13A80A41E93D4566577F7C657D8C7927DD690124D926635206AB1A01991F8D013DB923F4 - 50: 8938511721E519A251E29DBA33B06394F2E3A7FA7B63FE76798BD313CB2DE8A4CC4B99EAF08F549ACA6A5DA29D564E59860A30BD4BDFFB31991FF251CA1C4D27 - 51: FAE1641A89E06AA1148D921D2C763DD9100ED689BBBCF67E0D2FFCDDA9737367F76600D073026C0807FCA5837369F5DC7CB114E31C1030B78A2E58D224703BBD - 52: 26745DC733F4B32BC185DEEAC4B636C34005B328350E8BDD688F066658EBB819D0A72622AC5F2A2F7EE69328213EDB21FCA92821C2ED981AB3FAFC2B1C64BFD4 - 53: 139EEF1ACEBB94B98417A309DB0F7849B9BB8EB0844AD68C57C2B885952E5FF742749767C2A2318B2CB08EBF4DA0AFA0D81E226E760F083B468E214FC4E00A6A - 54: 86C607C507723C726550714781CA596D182D17CD7956BA6029B987A5451AD5CF2FD26BFECB4DF7404CCB0BA7788783C294651BC114FE225DB1DC01D82795D3D0 - 55: 9B4CB90DAA3EF4E1B923727DC61EBCCAB5A81C7D54151300A3C26B893539ECF75F14A23129452305CC301FD9276C22781A999A25FFFBC6B749906FCBF994447A - 56: 512BAEEEE85FE330750BDA3758AF98F3935C85447EF93BB2324D689F3DF8366F099C945E083ECBFC34A6DD5849ABCA1AA89828B414CDA9269AF272E0D938A2BC - 57: 0411D38F9076DA316FB9ADDCFE25F7C4D9403D125F3EF899409BED928BB9A30AEB9769B3B47CEBA0D14ED5D7563EC01147FD18AB67CCA295A87E18098F333493 - 58: 2FC85AD54F42FD98BE50B41ABD15ACD4BC92F6185B50827B7EF9300CA2747CA6364E454AF660ED5A0928B56AD9BDCBCA52D8C7FE529650B4113F1BB2E9E9E538 - 59: D32F03D3279F07F6C8B537FCCD13B367CC663E37BBDE26241AF803609D71531261BAAC4EFC557612EE3C25F23BCB2FB8F1085075AC123A98DD1C96A6476D9B24 - 60: 4B3054A224E8F1D673DE538D9590C238AA65A2A2CDC01AD5AE68FA6D429B96F9BE41B166BD8930E444C0CAEBCC6CE46983B871EBF5B022A4ECDC118865A6D639 - 61: 42F15BE80987DE0771CA87818CCF0E85182F159E7C3339328699D5A9E182F546E4787C625322D6132A0E12E2BF26DC46241314C21735C74820CF3B3E2F734D13 - 62: FAADEAB39617F3B77E2AE72B40F59D760E581EAAB39601F04C052118DAC7F0B97DF0B00A074029DA161D46994F653191C7D5B8595AA65C3451A072E2588AE20A - 63: FBBD7BCC6463C166CC83E3F286EFB9223FD8B98BAFEB56D44EB8FB328E1FCA7BC05C2DCA9294F1722052511D75DB5731F7E5775138D2C886208CA43985AE894C - 64: 755E8863A2B2BC067F51C1637A71C819D524DC37C17BA7A29C6EE3767C996A49E39D3F402BD2452D01F3977DEA88467AC2AFF4207F8A70CA32A3C345123A5875 - 65: 0779F3E173425A7E640107F7AF17BE8F6D39F95A75F73A111AF7B7A2DE5719F32B8EB1BC9DBE4B7091098DD81DA327B3AB45CFA41B89E33DB08895362A78F5C4 - 66: 1984F5A35CAB470F603E076D263513C9689C428E4B14B1DF9EBD26490F9D035C205D949C1A3FF9124F6C06994C72B3B3E93613017CAB7DA79D07EE236E5A8120 - 67: DF5D8624C7614D1E1415369A3B142FD7E26A28D20A3C001A6B26168DEF57C2E4D441253E3E0D79A723B5677AA001B69CAA0FA77B977CF6A966C08017647E485C - 68: 47F6EE568A88A42916149D6366199F40FB241EDAA126C2981668D22FF1A1971238C41255E0F1CD9EE90650EF36E200F2EBDA9A84438D2A7574AA815014CCBE10 - 69: 39B3F80C1C49773AE399155904DD4D926424DAEA6C246F249E5FE9BE68DF1F73A3512F29D2386AC137AD604086489E7CF183C51AA715C34869DF253AAFE35A7F - 70: 06702D104EDA0EC751898FEC5E5F0CF0603B2521B8F05F2C062A57ED39250744A472B3A17AB0E3F674AF392C3FAE0D612D1D101012CB18ED042C4393D02B5F41 - 71: 10B3B7DEA36EB47F49A380BD01B0278E6A2AC94C9E13B4826BC77DFA558CA157AA841702012B534F7C112839C27D06CFDF182696CBA3B57CA27044BF51C2043B - 72: 2BB9AADE91B40CFCED14AD1FD7E26AA839B5140227FAD20311D24DB1578A8A554E11CDC53600E451EA0CEBCCA9B700EE7636D47934192C46D6CD4A27C148F8C6 - 73: 1E0E36CD5D88FAC489D6B411ED5E8D1FC969A2F73E1919B6BD2CB62B3A86191DDF636784A13CF06C25AABDE87718DBBCA3E70F23D6E179B6F9F5A6AF541ABF92 - 74: 611B9E9CD1BA6DFCA3119BAB36A2EB5CDB1F41B3088E432D783B72BEC02DA47C8951F9DBE7C93D5B2180E74BB7D1366FD5767E0CBBFF17F98C7FC501BBF39A55 - 75: 4355DDCE68F1E0D1FDA10C622BD6A2C306B8D667E7F0401FD9B665470F9FF36906F57A20F6476614305D2EBF392D981C4EB8CA21942561EBAA5E5012FF5364C3 - 76: 16CCDF2825B002745C00522045465E21C2BF3B04EE640CAD476D546BFDAD916D69076B078E1F2F48BEF8F11F2F0FE25CFF623C981C7022D712900BE722C4CBB6 - 77: 2FEAB314455484F2EF56D836964BFE9CC8C0738256C47082424DEDD7B705D74022BFEFA54959FFEBECAB9737C7493EA8C2645FA79E0D1F1CFE458C56049C4D17 - 78: 9BE90B1DEED6C31CD5BA1E7C009ACB038EDFE9DA1FC76F35E7CBE26141C29881D33D06F389A42816F60BE1C6B8DB46C63496C02B75CDC1C0B733A5F6D3DE0BBA - 79: 2367C74778D8E6C5E3C9685E1E39193E1DBAE8A036FDD421A741BF3B7FC4956027C24147BADB807C2D2D3DAD9FD26F9A590E6017842ABF908F7C6323E21826E9 - 80: C2A11A26513BC86D6251BB14DA1E7DD654E1072DAA0BC8F06EADC4E6BF0D5A50CA54790545B0F2F9CA4204572C1256BFDD2742D3990021FB02E1395F17076393 - 81: 353C14120BFE1FBC0169C16CDD0DE52259E2F74051541CEB9B185B6C99B5B062947EA797D29F08AC3A6036D50817BDF80AF0A64B1E56170EC943C21A3BC684A8 - 82: E68DA7FFEB261025A8BA45A8658002E8C33CF2FF4CED4B71E955BC691A56C812D634001639975B147EF51CE0633152038798D7FF4E8B7086BE29F61CD873E681 - 83: 04DAFB387B8EEE010F2592BD5EA3C21F63F656234ED0B0BF91105E618C3E7A247652EC284608271AA9BF74D3DBF097246CAFD4F13FB9C46E197CC465F929BA1B - 84: EB8F477E83693BBC41B3362C60372A89CC2A671BE16EBD1C8EC7558661FBC8525FE3F0F2E812563860FB8DA905F5B61C466CEFCF44A9D34325A7C1A8F2C3D701 - 85: 34DB975B806D41780E2C4D7D27358FBDDC598451218509AD871B4A6EDE2EC8DE8D6F38C02B615E4C61D744A6CAFAC9B3C7D3839376DE18F72822F93DD25F512B - 86: 85D1F08C90B1C91902F58258DE0E0F757EC18C3246960D7E4C8515B57545F478B5B776D9269B1BAE59D997A9420A1DFACD994ABC6AD32F897581BFC7730AE01B - 87: 28050C2EC791A971D085EE3E779788E15895E7DDAF4F1497AD3FE9DA644FFFCF6D2C8FD551DF78D3EF3A7311891FB2907C0E7D9E3A22E1699CD5510DD63625DF - 88: 1CB86BF5795E48D3C8876FB4EB34DEB2AA4A30DDE3C7D050CF6EFF84FB363847082122245F74479B011113E3A2BCE9B97334D4B83EA83E765F179F05BF33D57B - 89: A0266EB670502E88EF58C39888CA3242B428CBFAF2059D012277BF0B49FBB687415E1068554D073717A7CC6B3AEE38899D32625AD6E185F504F10E21A4F7F5C0 - 90: 9727A31A129300DC2AF926DFADCBC9D551AF6444C018E78384FA7CF68D5F41F1D1955DD519A69654C094D72BD4A7AD012383C209EB099AA27DC3FCB4FEB5202A - 91: 0A6747CD37F5796B01DDA0938CFE254F563F3079C9DBFDC9775578A1B141CC8C7FDBDBA1B1B06C08A73BEBFF64FDF3C500D9EB5953D0487B83663A58101F9F84 - 92: 17E92338A9ACA2A0951B8F394F97DC8FB7E9851607513692B1107A13EFBCC3820EB3E3B60E153CBA0C3F27B83B38F0B083936C8C7E43A60FC5134BF5FCD88D8C - 93: 215A4E796A92E7B60B05A6ACE267432CA354F4DC8C9542C27D069DF5C752B2A8CE539A5286CBB7342A83B1FB27832D47F897B114BF4180BCBD39B1DFE9F1D24B - 94: 9181997F450C485BF29B8AD10336C4894A757EA091DC00557298D27E818816F3ABFFB7E8AE1E7088A4AF920757518A0F5772D33CE59EBD0805F33DD770EF538C - 95: F38FE26AA1F5D9C52D291C584D785A6B8B4748CF3EFD3B97DA6F24CAEFA53592B638459EAD0AF3E92C4FE2E9E69679411FCB705AD0B655E9212C4090F18E708E - 96: 38E07C494D5ADF7F5980ACA9C311C3843CF3B2A44AE679DD3E6FF4E129BB82B3B2459EA8A2884341D8792F2472148A2FE11544857BD474822C623109C7C2994D - 97: C50629C3D7D30E0369C091AA8D8D226CED184D267ECAB49B01AB2E5DAFA6985B606878D796D4A2C02F787B0E4052DD6E4EB9DC190683DE96A1EAF6478CB62E46 - 98: EA55DC3071139E5FD74176AA2B7256C095C27FE23A5F4518E01A0BF4C6FE78A4EEEFAA3C23D2E4FFC9A7589301599874780F5B73C559120E0390E1B1F589D336 - 99: F7237BC89FFF2F9594DFF86A2BD1280AA6D3A0259BBB210A18D10DD4F284D8348FF0AB11A71EE1BCBB716505B435768469345C01E04F541D57D911021DCC7E27 -100: BC98C76FBB61FCA7DA032D69423D140ABF2AB5AAB4271C29197C84303C0D90FF78FEB885FED1C98C9FA1BDE066E2E1454DC6E2EABB3A2CFCFF066B266B035C5C -101: 4B872447BDE9FAD3CB35A11F9F0256C3E3614EE0496F174EC76D9729669C5FB2D628DF8459BB14107A8D2481F6FDAA0838E65A556A71AE001B93167E017F1A81 -102: E5A2323D47ECE6CFC2BA68F8A7CABA5524E417ADA1D27E3D9D42A0F9127569F3644F37BF85CC66EBE484793EE8F970B3F9DE06913E26C885C5CB356CD81B3F9B -103: C7074E7839CCA9F1D31DDB64DEFEE4A4A3F461BBBF40613994D3E8EF3AA1A08D1F6047832DD3ED2F6CE7F1CDA0B68587A2124F98B2D964D0A696AEA89077A098 -104: C520492BA073679D445DF807892CD7900AE5187EA59421F7BF9C4738B4212B13478059F485A1F5A3A147CC5BD26B2FB4EC30ED30C51A411ADAA4DB2A9E65BD72 -105: 2719AAB44A2719EA799F7ECADC30BBDD451BD86FE989AAFF35ADE87D22D492D29E2011779548175207BE4C0E8931A9C6888AC6A5028D4AC01F6314A11686B142 -106: 10FD053512AD6A5C5EE14D69BAE247CE169B047CE04567340376C4B6FCB0576DCA3FE088DF2775A94B581C28982DCF347605A0065FE899D81BEE52359815A1B7 -107: 053FDFED026C16AFEA0486CF33A3F0B544F11B84496F4127889F83C43730C0855239DCD979E4CD05C493AC3161AC8D727514A4A61D4E062E008A7E856B8BF8EA -108: 3B7CBA3030E2474D6306B6191650BBFC2325F727CC970BB7C86D90BDBF811FC5C21E095D10F715E6975814D91C4445CEFAC6EFF8612010F8328234ED9B083D5F -109: 09A4A871923B2E9635F82B066FF5C993F0C18FEEC3EA5D36B6538196859C35E4C6252670CDA2F7D3E3D4FFAB6B947F0B08DA51D9677D5C4F71621768DC9A0668 -110: 52FAD2D0B924B93CCEC490CA1F6AD0FBD696723E77F6337B6F0618BC64731E678EE00D5CD1840A45FCE62A93315491EB85C13DD20CF32164D56915015C8BA75E -111: 081AFC0646B059E55BF53026EC7C614012D6F74AB664185BABF38065326E4D92D3F7FE701A55F7B0E983889F664AE101E912B02AC8FC3A3EAC3CA89996FD44D2 -112: EE1B7DB3B3521E1DD252BC2EFD8BC48699AF01D313264938C913B0DE7127C8DEAA4527E52F0FA0861B18C11B0956D5AF2ABEAF3992195545387294E17D6E12D4 -113: 9E7AA77F7D90722A9F0A31CC3AEF8333F040AB751356770E49C6C1E267D7C91C9A2D6337ABE6AA235B2D4CC9AB04EC683C2D70FC75A9B07F7A3D705288AFB43A -114: 0A15267153DE99104457B7C2DEF57AC40907D2BBB891034BB215BAE91CA18AB31AFFC218E3E2B8ACA0E7DE1FA5649296943CAF808927E0445FB3A570B0C9ABEA -115: 64CA0AC6D8CE4E06446A0C58E8A663EC82255E575E0E4B3F23C39E0E65171267EA7FC9342EF923212072960BC9AB90CA7394292A1AB4E02A989F973996B35684 -116: F1392C815728C562196D5261A7C06CCF1C57BA93EF540D72696797BA0103090586A80BAA537B83278F0B5C430BC1658D012274882B812F8697FB20A7DCA2763F -117: 81B60E08A3072CC60FF527A234EEC8C29D2D988F99CB92A0BC07292A4A09C4F9A56DF7D998532802EA748919F4E6C9DB8584D2E6F52F05EEA0DE396D1056884D -118: A0805131B24439BAEB467722A9C6E55A0AD4613714AB3D8844F7886BBFE5BFCE399C3AF82C6ECC3F8AFEE272C57BB2373B802FEB41E50A154DA4A7FE5EF1D3BC -119: 0352614BA19B3909FAF35FBB8886D5C0069C5EC9B96D0467A10FF9D92F5489D577DB53A25A2078554AE4C4BC803ADDEA96E4BAE14AAED67225EA9F59D965AED5 -120: B2ABAAF5D09A7E9C8F0BE0666B52D3A74F7B965B8DE9867A4B6C6E3CAB50169F644255A9BB4E0E85A59E89040537E57B0B5AE5FD1341C9E133D6284A3B6165D0 -121: F9CB2F6B860ED6873FBF8CE3EFB4A4D978925DB59BBE6C1EE4E0111C7C19D0469E8C8C65E3F9CEAF25CC8A5C653F18358000ED4DD223079E96DE2B9AB0B740DB -122: A94BEAC620E69E547E066C90FAF19DB7EC34F6CDD336369A3817E85CC98EB8445F121D43602CB0401146ECCDB2340F485AF81E776605E8E709701148C3E7D900 -123: DC22AC0511F728ABEB8BB48F0776A67A0C37509665B81E5AB9018D04F934CB8152C84441B802BC8F0CBC9C31C195B493E3FCF4C6756D0F00CEFAA90F740E8C68 -124: 07F9431A8D520395D622621A79F15F8F4000D26B12ED2F2DF36CC288905F4402E33C1CDFA478171A8E3BB316DD429C5B561E551E1620A538DEF4E64728095DDE -125: E8425943C9D40E5F2406819235FAEE9E8679423F1FCCDDD9F43FBA132817A3681DD1F3A22441C963586B42F8EFCA33D01039FEAC754A19E1DBBCB142BBC39B2C -126: 2050F4D952D7A0BFC7B2A8B380D384170C203190B8EDBA57F7BD84969E5C63D99E97C910D5DA49CDC44CB735CC056F4E3530AB721925371B81AA2F1B70FA03C3 -127: 7456ABC9254107B20377F545C308B2F9812B55BCA1ECDB616F48BDB75D0794A788CC5D1857C3FAF4BB665F829B23F6416D82982DB8AFB38730B004B19C5E67C6 -128: 8D3A3A49EB989DD9DE155FCD66A2C85FB33B9D0576BEC9790AF31C0565EE15EC1DE5870AD28D7F48DFCB11E39118B114565FE73FFDCDD8CB4B23263DCC6DA15C -129: 1454E9127A50E2765FABB757E10D46E28447C6BB0CBC943274409F5207C5EEE5771D62103922B6035E966A19F16C63BD4723B03E11B8066F73159DBE3306904C -130: 3093B2A11DF237F1FB4A775D91B687412D9B5E844AC32BBC7D0E567241A23A81ECDCF8ECC755076EB2DAC11BED1B36D1E76969E3A21599C772A5A907ECC061EE -131: 0BBF6D41D61B71BF8F0412BCE760E177FAB14BD2C15C4CA2ED18FE0A2C93F160BEF28BC2C54DFFC3463DE4883BC2DE5CFA10F13A43CC701462BF9268F01CA61B -132: 5DCBF28223518D472768AE87E31345109267B3A7F24A5D5499ABAADC8E31A7816292FDCA9295E12E64B1644BAB55624B9B9A1C4ABB333EF1D9B3D196041CBA0A -133: FAF187072924007C2CB6F92ABD3D03B0A50FC2C1C3434CCB1F06E046A5EBC7A73D60F6D556FD7AD2E412530F98C9215A4B2FA9F57E4303EF23F17A13B67F6789 -134: 391D31C757BA04F9BA9EB6B9293E297F09D07E52B6B66EB6D6C62837ED76E55E1978AA9A26C9DEDD60AFAE6BDAB4222A85829AF42448276933957D50B9CB15B9 -135: C45DAE624AD8A2F5AA7BAC9D7557737FD91C96EEDB70A6BE5574D57A844EADE07F4056BF081A1098101CEA8132188C422136FEB4687D1E2209F3FD28BEDFB8F4 -136: B7FF4073B3F5A8EABD6E17705CA7F6761A31058F9DF781A6A47E3A3063B9D67A757E8DBF043DAC48D2154E46D59C0B9E8BC36BA035153691FBE83B9EFF5DAE4A -137: 01D90952C642A5EB2A8FC9D713F843A45D7AC05132DDDCB2EFC9BEBC27E37BCBE42130C36F3540250AB11796980E773683F28D07F0F838606FB9C45E452BD38F -138: CF045CB6B7D78C0F6D3EEC5BFE30195EA5147101A5F156FCDCC11AFD6401C8A2BC48FA9C29B0BAA4AA4B66E053A659493CB60BFA69CF4BB3DF664B3EE0EC1F65 -139: 3977BB5A24E3061034CC977141679BD14CCF1111D621BC30E9173C529C8C370879CB92A4B8718BDFF8AF5500508CD33853F7550A63278E75437E8A1233DF1FA9 -140: EC077CCB54D236A9539AD3F7BC7A34C1F892CC1D52E0F3B37B2651A21886B259409CD458ABF8E7ED467D605E9701310D4B9D235BB0FBF05F57D3661FC01BA067 -141: DF0D584283C046E0AC31E030751EED61BCBFD1014B3452826B043BE326B351DC5A75DDC40AD010CFAAE5355AB5F623DE6257A006933311EA670537E2A6CDD595 -142: F2D5E29E7C1E92E20CA693F4C7F30C9EE367FC0C9F0BCC54470A62F1C848E89442065BE184BFF500BCCDF8D11A7898040E83783DC1AC586D06BE1BB97E2AC409 -143: 82B3C39A4B58DF8CCADED619CFA0DDED3CDA7D18A037A24E99A36D9493DA51F58C764DF9EAF3CAC1170B0405336738925C8A117CF3C810EB24EB5A93F7D58364 -144: 29D1318A772C0AD4506F7805489D2C967D8662C786D59994879C1FA1C10C675FD0C76295CE18B6E7D1CD60F3BACF51DB1DCF0A51DFCB569005A06D5B8361EF1C -145: A25E30CC19C63FFF8819CA84DEE64C293F267B67423831B0B9D1A6BF8AF87BA0328D480D539779E663CF1B1621BB3009D144586B826903316D50A5054F77746B -146: 3AEEF183ED54A8EBA4C6323EF06A468B2CB39E0585D4B2D6ADEA881C42E624364E8B422F04045B5F140557652A797E9A3F87BB54A6361968B6649E25970A8B61 -147: A79F05217ECF9E1E08433A7E9558FEBE2F02B316D87C318118E157C08634587D2A48AC466B23620032C861287B46801A736A4436665C4644E7C34ACDDD391EF5 -148: E6A4B68C250648D2844F03435598993DE9EBFA8AA3A584255FF77675CCB9C71AE8D2620C9B1878D5EF16D11923BCD8BC62878B483DB148DA1810E8F921CD0BFD -149: 16606E1B12F0F6AAE6C094447B32C9ED4554C939ECFF48BF76226EB105AD0B32F4469E35CFBE7087042BE1B8094DC86A0DE6F22534206A317260A713F5D45A8D -150: C9ADEDDB1D7C12E75577A7BA78AF0B8E0E472B0A810FF2166DBD8DE55E137862D0367C2B7077175D07242F4FAAECDFD7DC6ECCC7D4C5E9E583B89C1ECF6D3DA1 -151: 01191A47B54F4302069A403ADED9761804844B58F08CE53F3200CDECDA0FA78155682160305E237BEB14151615E2684722461B74B62904B81E3C4119E724AF5E -152: 944D3A3C684409FA9D239880C9EEF07E2E4926DE9CBD20B64B121C5EAD35D6EB6CB3FC4D8CA119EF6EC519328653EFE197227D12D5C857CB0AEA3C32A3078BF9 -153: C376E3F9DBFDAF06FCF43B66A43B98D2ED3BE6E58904EA9AAFBB53CF8C327B8D3378ADFF1A29561C5A7F42D98A22FA4BF5B66428FA202C5759A3C493F0E46B78 -154: B6F6333973744C93BA4CBB65710E3E12570C21D61E7CC499C67042B95EF0D886F7DC639E88BCEBE25591AF204D62D17E4AD63437729433C1EDAED8063CE07F56 -155: 744B6B5C8698EA1476466B3A8C263CB8A843ABC69D142423D024310DED0E314C25462E9AE7D4C92B566005F35BE46762EBCEC0247F2EAA7FB6299C38365A8674 -156: C14C6DC4C90287B392B60C496829B81538889A1E3BEFA63BE9B4BD5704BEBB85C46427D2C96BB7EDA0860B58C690857A5459311DB5047944D0E94DA7D3F31807 -157: 283F9FC96A90A298FC9B8776A290C98593DEB788B76E43BCE1F27A5EBB82028C8CBA422114E937CF28AA32397A75BA13E82E84ED1155C1337386F2A1AE61AD19 -158: 115825E70C5EBA950728129929264F8554BC8FDBF5DDCEC93AFA241E90B95AEB44C436B052115F619CE4076AE8DC246CD740D83A7E886A79CAC18AFBAB606CDD -159: 148C9127730782CD7A06B075AD354CDDF6A99A13D3C081E69EC5A3ACEB467C9C6A392919F5868889D584AB6E2D4A5D75C0015276D6551E8F59B8BBB4F10A1B9D -160: F844A74FD694969D03C9FBF8225D6BD8B6D95072069AA629BF90C662EDD60B21D9FBC1A670D71BB3AF9A8C997FE9E699EDBC16AD49D34CC1E7C36B95D0D0EA12 -161: F9D89DC1C924677229E6B95538F0ADF6CD7FEF2F37E63BC05F10D05E8C41DD7A2FD6FD09427A22AE15CD04B0C4AD7A289166711753C0D982F8395238BC1AF2BF -162: 63BB45A5C87AAEDFF6F90056AF2B08115408E34F6BE14B54771F0A8E3659DAF58167847A1567FC0D86AE9601731E8848793122C10E74D03F62BF82855270AD90 -163: 53C3D48F0BFFC3CC4AC45DB8C24CE6071A1EC58BD95EFDD8DD16CC585B784933B91E855B3A5FBD7DEE0FD04A48F13C36CDE6F4123FAC52C497FFBDEC6577B73C -164: B28F53D97B947D10BAD512352D8E6C5680B1F4E52340602E5DB9BFFC9B66D5B11B323946E5B7D7EE45A61EB2F1B4910226A875F4DA9EC047B43F4E0E40BFD527 -165: B32DD1BE95BE3A88DE30B098EA93ADC2425AB9DBE871148A6E3827CDEA70EC384F6A515F93C9404572A07FCBFB5FE31B9C573262BC92B5E4A797E4AB7730A63C -166: 37979BF15734822C4A559DCD4A9BD9948EEF7156189B6F0E14282C67C99B036922B9615530CB3AA5A4C01912D0EC92FF1C006B09B38B816C9A75BCD4CF6D0F0C -167: 989A61FBDB26D1695F841FAAEF850DE4E5CA0095EA4C7511C54F0B0A098E8FADE8743CF73F9781DAB695685A356CCDD1C7DA4790F7F4C7BB0BFA0E044B23C48A -168: 1687771440DBCDAA8AF7049DD319414A12A702CAA4809A0DED089CB659219EA4B6385175AE6C8BB65D04A1A015D848A52D61B8C60E0A7C748ED963974EA70BB0 -169: D639F47FB6B6836625C047A8240313BBA11E3B7E479595B43B48ECD35CC89E9E4A44C78C1FC60E1F4B7C56C9568C78E8581207F66DF0FE1BFBEC31FAB303818F -170: 752DB5070FB5D23C39E1895E36D04823C74E8B5C1D2BD246107C4BBD9325B725BEE35857E8F6FCFD11180B13DC7ACE6A91576D449D3E8A5775ECDE515591E6A2 -171: D4EB74D5F12635B55B1ABDC12D128D6EC008D978DF6F75EC60E1EA7DF0F304EA1BA751427A5D963FDBB6F2ED18AF1A2A32DF5DAFCABB38B97AD95EAFDD6A5F50 -172: 973DA2C937722929F920D04F930A5E8380F617C5363EC59FA53BED022FC0BB3A87BB638347317A12F2B15EF116CB72ADD5F8EEE6E4635CAE9BAA7ECD8A86D3C0 -173: 480357E65BA1258B8DC8DCDBA5BDCC8C928E038B7887EA449E19BFD0941F573BEE08929D1AAD038F9F095D485A2730B344C993783C1C91F681912F3723DBD96F -174: 1880256120AA5D09F90DD1B6C24ECE3F60C7AD726308689A379CBEB5DA80D00F53BCA00D28FC681376FA940E8E55248FD1AB56C975BB145B7F8EBACE5136F5FA -175: 4484A33046ED272E66A6FBC09097EA42CED72244A5D90A2503395A892E79CBFF8F5B1BC53A1ACBD194DE93A34B35205519708DDC895BCAEA2B9489B7F4008F02 -176: FA0032AA591C2EA28A4639A562D3365B6A9A1D0E12A971AB57BB3A057B506FF7F8B853612D090EA4FD2BDE2DD5E5D532A562AE03C8DB63D26BD536E23ACF817A -177: 64C8DDEE8616C8E4B72742A5062D1F1D3D6E6A528DC50979C81079F7D328479CDFA16EDB952C900AA2FCE6442A6ED5BD6CF9A842C3A53D85E21D71C7ADCC8942 -178: 05552BC4A871BE2AF7DA6651BF9F77CD22CA40B0A803519422F010C76D63B5D991F80A886612A58D579D114B8A5B72584E772BB4E285F26D6E3041E251B896BD -179: 3FF747480329D59B7D94C3B3B75E5A3AEEACC180DF34CD499C614FFF2041BB6A8997C7CB3C414D35701D196718199823330B3040DFA55314A9795C79524DABA3 -180: E733AFC2ACAB59D914D298FD58CDD2D6EC261F4FDF3A258F6681BAAABF28739993E9F5F87825445F843F75CD573AA8E76D9B90CE7C39ACCBEAA2F497C60F88CA -181: 476A4CCC37292214B7DED3C5BFE1487251251E515AAE2BCDE72F41FBB5910B438AD39AA9B43B579650DD00D90661EBB09224D390044B5494225D8AF0731EF9E8 -182: 0EFF0FB64F45D45177D5C76BF979F055D3E8A65879CD63F3F5B811AA6F14BFBA702C674348DF8E50267E8A8DE1C5AD4BEEDC0FF4786525C7B06683D5A0D4A605 -183: 89F7C96FD7A35078B4487CEF977C876CA5ED43C04117953DB6F6CA4A9DAA20B2186926FBD2D2632E2B0FFA7A7472CD385ECBB233568326311B0BBDE6F72B37A8 -184: A6D4BF2E8466FC3679C1165330EF0C59538070E2490EA59FF4C9A0F49089624A53439C0A20EFDF045624CD7434AAA4D91F96928D00AC391FF6348B5C920C7BDD -185: D594B2E1A403FB5AA6AE5DA585F3F697C1E444B0E114BF3A4951D63AAD85B06650B52123464CD2190F50CEE522778177B6A910F5690366F5AF410AB5AC4D0570 -186: 7E673C004DD311908D011731056F7F5AF2C040E8171EFA187CEA3A147F637899010319755EA2DEB86185F3E8E3C1A02854EB68F03364E961D776A89B51A1AD55 -187: 49622239EEE93F284CF0553A9ABB1CBE7D7E8285FE778A58B3C944EF97CD458F9B08B3976C2DA3FDE2202E0ADDC17457E027380F24BF04A624AB380BE8FC0024 -188: 1961126C4A5B05922FBECA4B2D281C1D147197142E425F791C8F074412A212BBACCD3E27882F9C478380722020C67B1B7FA4569A422A0F35209742961BAA3953 -189: D9A3B1C052A7981B032ACF6313BC96B6C1D18F18BE18B4B33BFD964C49D981A936A9FC5AC0CD564F24CA100010ED09DF089535E9B038FD193F66EA032A3E4309 -190: E38F690C25371FD56CB7E399414C4A2FE14B52F619912C935545D0D202A64DCBBF3B047863BFAC596BB49BEA42D7CF863A7038160D24097A4C91BC762953DE05 -191: B91922A165B8BBC48409C8091E7731C294DD048B5907E482303D6A8C3AFA71CA9CD342FAED7FC45F7DC187AEDE56072254BFD64833E6D630549F457B0D94F1CE -192: 1F93899E079ADC398450455033038137C7087678CC529B7752C2A0BDA9A9C8C1450C1DD45C70AF04BF7E797A5E11020A834F07355B5D9B9310666799443C3140 -193: 942405095204DEDE53D178A8C107510112785FECB89C9A7B6C3E1AA6C8AEAC8EB710AF4DCC7FA0EF17383F17896EF861852C8BBC887133E04EFF3AFB3C45CFA1 -194: A6D14E5D3C3BC6B15F48DB64343B6167EED4CCFB52357431A3D85BDCF883A396B7BF07D64CF34AE5D8CE52CC45FEC35667872C8E38988164C67422476F004B11 -195: 2362822F460DFCD141BCF20E59677DE4C9DBB0852C782B69A3177CC634ECEB3BD73B3869AB938AC902CA4BE009E30B4ECCA08C115522EC593D504B473B1AA70D -196: 9B41C8B48CA0E59BA48367C3379D98907A113ACF4D09EA5B601F5D6E77C5BAFB9F79F63F2DB55C3681505346A8FC6D3ADD91F0DA01E8625BD774E6B0D61025E1 -197: CABE9F2EC4ED01D61BBC3B6A4EBCE6845785E9F610BDE8EC81D40607B074D29EF0C6B9914D77AF3B730B9C98843F5EC0824A853048B798803612E71CF6E3CA98 -198: AA155D3097991659DA1B79E8256734E21F1E7921EE538B15F226467085B818583676A1D5F740AA1F1254111B1D91080C5551D46BBDC86FC735CCD1B541A78116 -199: F741000010280E42877F87893DF95AC1ED02919A4F2165120C51FB54ACEC890089CC6AD612DC14758F0AC5236A36B1136F3E26708FB452C4389F88328331F9BA -200: 4EE1CA03272B05D3BFB1E1C79A967F823B9FC5E4BB3987B1BA9E9CB5AFB07A5EE3A07FBD457A94364964A841E7F466E5A022E21AB7F673C18BA98CDB1D5AECFA -201: 0D17588A3BA82BDB888A5D11D474AC0AD5981FB6E4EC53444A387685D47CF2C5079F9F35C97488FF5B71E84E9677F0961725B6F35D7BA9690398BBC5B9D8D3D5 -202: 50DF3F5F09297CAC4B2CB37C0499739EF0821EB15C7003A4843673B6BFEEEFC4207240CD3439865B6A6630A72A9F5EF65687E429ECB46588100D312ED4FF8386 -203: 51D70AB62D2DE38B019B520894FF622917F384E9E02BB6BFABF19B6686A6A29AF171F918C97CAEA45426D476E41B0B93B78FD2B6CBE2D2B40E757707538C1178 -204: 2D7DA113B88F48054A93305652A5AE7B0C2F06EDC57B2CF60E002C0AF9967CABF0D94F22303553B550C74841CDF460CB63A1C3F529789FB3398F8184DFCEB6E5 -205: 725BDDA641EC884B4ABFFED88EA836054B436FB56EF68A878D7A47639DF51F64A60494ADA344A5E33F1A20DD6CFD32D6D754D0FB259FFB2BADFA00C34DB63F7D -206: 6F89E9400561C3A2E40023AEEFDFC8FE1F0D8B8F9B1E469A7DB54825E41FFF96CAE83332CD677FEAE86FEB1788B89817B995CC230CDB380540673CFF3A9E3086 -207: 8A91940E0D9E5500023853CD5F534517D036D3C86D1A91731D458741D8FA85F7891C52466034B4C6D4FDA580C175E209C542FF05760EA87D4A8745716B3E9A64 -208: 38B8E62D7B0A8F342793631D77ED89E5F09F361DEB0AA51E85CA60A80A6CA12C1531C58D4A7118006527E94DC37AE600A2183117D5C215AE6CC14ED8191A904B -209: 0A07E3F6E8391DCB6C1497DD18AF870D484225192C46D32DD2F176255B531C2438EC4125CD2ED56716BD20EF626010C2CA5EF2C0C6445276E8EEE88F81CA4C66 -210: 5B43E4ABF2215A6C57C681747737A955258B35C6D1869C06CA02B228EE370499FE0F4FE2DD61EF13D3E5802C401A16444B75AA38E172D8D2C93B4A25FF6ECED4 -211: 98EFBCBAF4A2A13658B931B8C5E09D1D376EE9C975F83F39D27000B8169F5186C7DAD6544371F675177BCA0A3450FF6C5261088B48642DBEE3A65371E36212F7 -212: 5A09E2DE5B92D2005FA83A5710BA3AB3D99463055E597336CEC1E51FEF10894064BE0D00752902C618D6B2173CAFA39324007D43D245662B3A522BDCFCA41E19 -213: 75F7F9FD823DED26237E6DDC27E65465D58B61992B32BF9DF7B01E62C95DC89D09AA27AA99A653F19FA40A423CCC10375A6A21E9CF287E1DC6C16B1C31B74E41 -214: EE236F4F1F079003679063EF4A347CF071AD04141037BE57BB4831FFC8F9B9BD111BB0CD1E45AD8A2AE0DAE47BD4AAF7B49CAFE2331FECA6D7A27E2535D55055 -215: 285BD10D48D8E2EF34DE36533F8E1BFEC683DDC29B906990D0FAB1EF4ABDA8CCF429E9ADEBC8ADC03C67BC7DE074A9EF6AAC739C72FB84BE7139C1E54E770E4C -216: 34D7C35E1ADB37B8831EF6CC9FD12AF51762E7BB5FC4F3E4A12EAC9865A08DB334F3D049AA01593EB0C0141B7F99ACD741CC04EFA7F3A9A856BE1CFEF73BA938 -217: B2FEDA7CB8E60D0A1F6C4EA70926755CC1F2DA2271DB57BFE39FEBD4E7D38ED409A65C87484F26805ABA5FF24F2D15B2F0CDCEEB54378FDA7EDF2B429C38CB29 -218: B2D2D31CD5FE02348E8992B64A04E62385BF0E3F3B7DC7D216A018B25AD11C59CDE9853B382A5B8BF73A66ED0CB79C52B5BE65DF4B705FFFD9B085CC943ACF85 -219: EA788D39DCD4708F0F288B861B89544E72778C88701631E1B5AE720317B9E91DCA71E3619F9DA0080BD7909C3F7583A64EAA342A86FB109B14D89913406344DB -220: BBFB079E6193AC2C1FEC851CFC2B4B8EC2EC8DE5C1DC15D609DF112A31BF151C4606A88C4BEFD14A396AEBD73A9EC8D181EFC368BA4CFDFE8BD315AD304D8428 -221: 0BBD5A4D7F3E2BBED14472C9B3DB050AC3C58D2B72FA9D715DFF2E4BA23059BCDEFCA6F12D1CFFED5C67584843D9CC3716F2E4175858257EB036BE9A9B38586E -222: 64134D0CEBEEF6A5EFDD2751B589C612D4234D3B8D574FC56370F222F084849D7F9720626636C00D555C1B6306142C910A2FD4BED4401D22F51AB0FC5C59A109 -223: 9ED490CD151AF59F99CBEBC55885E77A89234C5D8A95F501AA0758E3A83D45570CA3C38A4B4F27198788611C05F0A9ED510E2C035CA37E34477A6D82EB781971 -224: A681CAF9255AAFB856AD8422DA13BCE46EFA16209A88ADDC90A851D1CB4456785CAE768A46BF5678305E8788BCA2B9220F05832884611E0DEA1371164EB6F3A6 -225: 9693508843F25F819CE20E82FE6137847FE4E40B1A9DCDC1061A188E1BEB875E345DCF01018A966FED35BEBB9AE26EE2FC761D8CAF006C6BCC668DAE2D1F1D8F -226: D09833DB5EC5F3E1CEA5842F8BEA7AC8399B3BB8F42BBB9A6AFEBFBD67A31C79EC46D091811E28F9E9B5655A6DFFFA4B70571ABDD40DE7E89819230FD0D125DB -227: FD1EBC6CDE435621E93BB5084B998931875F09F56BA600781666752957387AA812972EC2C71DA12D130CDA63616BCAEFE84A96FF3FF4C60F21E7B789E581146A -228: FC96581B5C076943710039E181D83E04A43FF5148B3EAE7A5EC26CC8C18EA1EB1CE03616DC1CE8977FC62D1268D7D161D8F39D8F147510A94E33C9C76878D649 -229: 148A93853868E0AB1CCA93A2DC52936C9796EC3ECDCD6E792ABCA5D41BF7FFEAF274C088D39AA16C090275A57747D2657722487A41ED53B5AADEB1D5479B6AFF -230: A83D9C131DB5784A96146F73EF3E12B3D3151EC643E0A93B5B3C047CDC4178EABF682E5017070FF69DDE35B5A65927F8BC62A2E6D33B9DAF08AE2400CD5395D1 -231: 2A571123DA520B82C5C296E099A427073893B882600669DF4C45D66BB5987829C88BF9D1E5043499284BF486A6A5F7F00D7BCF4F37ECD7A657442ADF604386B3 -232: 3F9A71CFA93C62A12FF285C932CA8C05F6AFC1E23C9AE4013BC39FCA3DDC445A54BBB1CF5B80DBA20275A1597BF934C621C594E76932510E0A7C41303AF99D23 -233: BF2386FA364A9DC619AA046BE3E7E145E174EA1A2217D967BE6098ABF30101825E2A9970C30E4726AE4D4DED75B29649D307BF865D8942718ED3C61EE8E58905 -234: 0A4761B6714EEABCA9A1E1559350F75A2F5AE3CE2659ACF7351511BC90BC6866109C24E234CB7E6103BEF19586AFC24F0082CADCCFA57EB6CD4D2128EB914077 -235: 3FA45BDFE5FAC0FE57CEC94A18C3B66EC70A86B6B958426FDAA073F9FD5454C1F4E909E551D62041D338C568242FB7EFF1F995F2389360AC486F6EB0FA820845 -236: 853E8BB5AD54D3E9024653BE4F7CB761211DC366B921874D53170D6D1078DAFAD4625FC9F0FDFD2070504D6E1A4B71A1A165414342B4B1A6FCBB13EA471DC19B -237: C725D2849E1B78C3B19E99DC3D724330D9610F07512654D6E518B635CB4F9051ADA46A274A69973B42AD51165444CE5EBFC03638614FE8A4907111E6463DD32D -238: 659B35F849A916D54E44D8F2FEC9B7EC2E94020C408F3E2F9269515DC707AD0EE6CB54E0A9E62C8754D50F86C4663B8C78DBDB5DD420FE710EB51EB7AC7A6197 -239: 865F2C9098A4FE3025AFA6887F826F5043B21391CA15AAE512991D565AE37812C8DB99647CC1EF86C917E33DA856D31B63EF42CE300EDDEE1D8A6C7C9D240081 -240: E1B94E7C89C655FD24B98C36956143C94AF243FCB34341574F8DFD19B7008798D3A9CDEC394B9131366773B32BFC7E36B68C592ACB561923740952D859A015B4 -241: 554AB3565521B30964F7094F8BA09E17A611B00473DC95DACE6FAC9E14598E21DD6EBF06625EE47E7D50065DEFBB02BEBD93F7438267C1112CF47763CAEDB7AC -242: 49B26273760A6A4E145F233DE04D703A5144DADE8A7E935306F00494D05FC1ACC0E87F1568FC209708331D45FAED0D3FFD8849F68A2A9C42F7D7ECF2543D76B8 -243: E4874C04DB5CE15C67085EA8510F6F4BF15007B257F68EA148B95831C8B0F30ECDF8AD002659885D1AAFFB82AEC0EA20412B6296BF1A90809EF2004C3D8AED14 -244: 57AEB83412CEB488738AD4BDF52CA0591064081DF8D2E0784511A18D7211F9C847D4EB6B6EFFBD7EB88A2DEE81EC46C93964A5E566AACAE60575F40AA17B73EC -245: 037585EDEEF252413E0A497640F3170771C4B3B913D1FB8B97A0843BA5C7378452E26839DC908FD1F8544CAC2FF6795E8F8CCB1B53354EBEF9AA6433608BC76C -246: CE4B15C49B348D9F83071CC4FEB79BEC101DF6B761D1C6BD4B782FE3B8D62E52A146D59788D0402B4FD5FEF8456652E9C52056C9AA560B11A5C5C98B75804BD9 -247: BE10D442549161023A97312A171A7333ED0E5B0AE972D46F841C915F4680363E62DBDE98322265727AD63D022D986EE327F6B2EC03E0C4B9AFA9C01F58C5D067 -248: 6F470D073B3FED6F7AC1F10126813DC218FC2865D509467636F5F6E8ACFE691F2158C7698FD73C66501F84C83896DF54AB04B76525D9EE3E4ADFB769DA8FF121 -249: 3779AFF6FDE2BFB597604103B733EA1A6DE0281BE69F53C208A1395C9122DC3689F14034BF60A74A28A28840E7AC83451C8C5C1FB81148EDE7BAC5461CFA6923 -250: 71DAC8AE1DD7F7685FC00D051F8BE4949B8010075D09BD53820627DAAC7EEDE9D8EC6A6A5926C19081E90ADB477486020671C88BC86F5562873816EA639EC3A5 -251: 045FA79BF1BD5AB1CB1FF0FE332803D2FB2E16C341FE12EA771C859F96679420AE1F726B48F158947308E4A78EA8D4BABA1A04C30929C49AA0324543A7D62AC6 -252: F8448E23535F476CB21FD820B50FC653EF6DE3BA26750141E4DFE45D7AA9D931C9ABFFB9D9558F1C909A1753804CBCB38E37BA70D5CFDBFCA85BA4D991978384 -253: A3231890348AED081E7A39FB1BF3A20001AB042158FA2BF49CAA126623D19E41E208F4EAC2297B130E025BF4EA3187E6C419B2F870114682CBF41473FB3949F0 -254: 73413523CBCE4A229F6A916A2E786B90C021DD31E1A067FE4CC17F6E0A7F80DE88F06D027F68D60D59DDFAC244834CEB4F9716AAB5C0693F9BE749C6A6382621 -255: D33ED6D180EA0408AEF7D32B530BEA6B5D57B963516A4F601F85E954005A9CE7DCE016902E67E275E425B5B99D248AEE4360B614D7E540569F279B5EFF9465A0 -256: 336C8AA7F2B08BDA6BD7402CD2EA89760B7728A8B31802B80524756361165366FF8159F2F4568A2BFA286DB6387895629938C2868A6421C37F988455763A75E4 -257: A1115C07DDEC72E482A58089396035617F2083708E751F511E564BDAC6BC7C5DC99C19868B8E0883F55BC2464DB10F5CE8984CDEB3FB9E7A901693B65B6EBB48 -258: 6831D686F5E5AFB04A3A0FE7B7F9061EE3A7B5A8C5C1DA2A8DF7FA04489316BF5FFA43AD4564BA46CC37E62ADD30D6AEDBEDAB333C3B0233DAEF0E95CCC08A13 -259: 37A49D8354746765677B87648B158017CA91185C08B7A2D91115245C9DC307CA5ACEDD9B613101EBAAD6C5A12C3C7E8B1B16AB080A59701E29A8EF7D412B8570 -260: D4F020E9E49CD4ED9A48907881A0875859ADD6879F5B0C360A888B8DA9ECA148ECF371E57BC7F84BC614A68D70964F082C0D7D7555AC279A957AAB4AD29FD761 -261: 066E98F24811B18F302AA7BEE9805035E116C0E0A52D8E0379CF5D4588CDBDF0E9E6FB47B7149442AFE6DA335EB528144439C23070A462D5880218C81AED1E1C -262: EB29144551AE8EDF1C564E0183AABE78F6BCC85C7EA927E560ACCFC55B94952C70CFF8B2FF5DBA5942F65E2C7D9CC9AE7BAB2D66EC55536C6807F7ECFF9F845C -263: BA2544A2652FACD25E94F7BBB13F2E897A1F1B7498C0412E70B785877D63DDD0E863241008AEA54A8D0B3A15EE7C60FC12DABAABB9DB7D40F3F505C80A89F53D -264: ACFDF5974D754C9683F531F63663177D2025125DE09F3A3629DF7CE87E618025DAA8CD06E4FE2CEAD4047EF31335C1069DAC88B03A4ABED2013C87D7FCFE8DE5 -265: DD4A265F0313AA940301E88CCD625AFA58C14DF119D85FD0D5124C5C46F3E3DBAC0847D2E0CF7206F7447A1024FAB65803F524CE9F0018E0742651AAE4288C01 -266: 3C91BA400BDD372C3D4A3417589712332770AC093A55E8A4D031A11C952F9FF9C526C15368EDEE1B3151C12DDC9D519892AFEF8DA12CAA08D704577C02065E25 -267: 198BD38A8AFCD3B8F43BC84280C0A7286BA545074E8A0BCE61BE390B4ADF77BEE666E78279A0553E046C819E89A0EF63BFF8AAC75A0894A962891F5CE0E35A86 -268: 35BDDABD1C28427043F43AD1F90F4248F34878F25B763536DCBFDE1BBC75286E5CD7B6C7D13DBE09AA5298572A371EC4A695F1A159B730257772F7B3F844E200 -269: E233AEA5092A37EFFD86287BE3534176D0F9385427A9981365986F3073FC5465D5181F19BE11EA3FDA9F739C88304E2B16EA0395A7BB8ACB613CA119C073BD3D -270: 020FBB93BBB1CC9CBA208053F46B25B58DF5AE0AE5FD035BB66E7FDC34FFED308EC3DE3A69829B253D1A471A159DD1949DC71D4145B05306A959173B60DE4D7B -271: 62BF381E58685C312A38286E238B2C60BCEE6F2936A97918F191999A91687A62348D3CF4675B540766F076769313E86E54BA2907AF52289578CFDE8BA11D8735 -272: 8379A36D10791291FBC946794BF8009519FD0B2FF6C0BD99A2B014E8422ABEF08DE0D667DB69FA4203FD37232CBB5C7980A795EA6795025551995D904CB24EAB - -Hash: sha512-256 - 0: C672B8D1EF56ED28AB87C3622C5114069BDD3AD7B8F9737498D0C01ECEF0967A - 1: 10BAAD1713566AC2333467BDDB0597DEC9066120DD72AC2DCB8394221DCBE43D - 2: 2E753E709156F4820A27D9CEB7908D180DD0AF1793D37130379C5FF9C9345F4C - 3: DACA0762A6678E4E26CB8A893D71D72CF3239E29CC837629590B84625DEC14AF - 4: 6DC06B8AE0CB304B1808731BD5E77B0BEFEC809F6E02379623EE0F00C10B6586 - 5: F48B764B5D6EFE72FCC9C113668A8AD8837D9245832948CDA1E77743C9C501BC - 6: A697459F59F222B055E111E791211DA13A050EE577711B4EFF2AEB7B2A6E7BA0 - 7: 39783BC9E859E0982346A792CF315BF81B492E25A12E279EE845BA6BD14435DD - 8: 20971D26D0FB904D66029DEA021A24BF8BA096493561EF86A3F75E84D3091406 - 9: A42515266DCA56240A7E09683880C0ED5AEE04221D7DFC635107A2762864706F - 10: 5F9310E9D1D72BDFD98FD0F3F442F316E5107B46FBC67E162350756B061DDBD5 - 11: C19109201CE9314D5BF1873B9B98185B0F742DEB8D6D2AFD526B8095371A752E - 12: 0A850EF082ABECF9899A6E6C5701649C7A4C41584105315C1BC0628A0F736BE6 - 13: 0EC705FB202BE5AB4CD22A5BB60142EB33A4C4F0E4DA11F3E7CD2A76BA109704 - 14: 3C33C4E6DAFB97D45F403BC662F76B5505365218FC63F23FA49772219CFDC806 - 15: 7A9A6B0575546936A59DDEBA71D76FF145478076906EFD5E0D4129901102F526 - 16: 4725E7C23DD68B8B2D722F2D370F4340D13A0AF42BF574F741AB8A89FABA6CA6 - 17: 29EBFBB5E153E98CE0FFFF83F39590685207BEEA613746496C75D984FEDE6A43 - 18: 81ED8980C1D6623A2A14C07898D0AAB69A5E89CDFE756439BF544F12CBAAB96D - 19: B08B0DE05F73D0BB40F152556ACB7413DCE4CAC59C57F95FA30F5574F5A01EDB - 20: F2C93A59085DFA0E71D7E962FAE74C8B643867F8799D16C1413225AD4CEE2F49 - 21: D35E6DC12DE337F89840A707838BE9D5CE13C839A85F8D82F92CFF2FBCF28B37 - 22: 55511CA658E7001FF7BBC193AA94006917D41996D8D0597280DAA155AB2AAD76 - 23: 925619C01E78B771F68401E5BB1ED1FFA698AC541FB88AABD7DE53973E20BF0D - 24: A2572A13D58039EAA827086B83092D235510025B3E96E214DC848B42488C46A9 - 25: F7C0B4561BE28A8BA941BCC03E7E004D6479234AFF2FB7D5CA2B48F059D1A16C - 26: 34D424317805ABFE78585C9F1C1AC0A29F1DC899D0BE57338167FF9F9B473AE5 - 27: 27BD8B29EC37CA761B9A51003F5DEE9767F7FE8155113C39796C379058624D36 - 28: 17CE5B8FDE3BE708F1AA0620998FD7CBF9173283D5432C3B4AA0213D466B544D - 29: 3A8EE8804B61227C32240859188830215D61D8179DBD4789EEBDB94781DC91BA - 30: B4A6473F90CA2E87FB330996A826916374515ADF7B7BB81334007D05DDD2B00A - 31: 82B7DF49A1D7BDB09CF1183372122339CF3FC28EF9743B98FD193609297313A8 - 32: B1915EAE84B12616CE51D7E259B7AEC3798D427A735BB13226D07119F651E981 - 33: F0DAD0EDF6A7C761E9A4EB3C8C22CBDD7F82F391B74F929DF0AD7A73D39C4491 - 34: 35CADAD79D50C2A3BB0D5D86727A3BE9E6093A2BF8CCEB0BBEDA3023F7BFA1F5 - 35: 73F5C99BA298515D9407E042C2A544907FEEC14722D22BC51A0D2D19750265BF - 36: 40FF68F9B5E4D61CA671AEF51B9972713A324E9852AA733FAFD03E0A1E7A2483 - 37: 43F79EC5D92316181F4671B464B5069F68FCCC5D87031D273A47C6E3BADB2F09 - 38: A6A8BD5CE9C76B21443C0A076ED0E059B50981A540F37586AA41BFBFA6EAF449 - 39: 161CE872D1771C378CA7208E8990776B88EE4C5B7DF327D7B68C5781A677A2FA - 40: CAB370E6ACC494A41655B487848528AFB55D884FAC6A404775FB5D4C305552C9 - 41: 6224B54ECA83BF2517E862CCEDA851D78E3BE0C9BED185B8195D0EBC85449C48 - 42: 42DA7812A177FDDABFB5EF5705542AAC732B2C9B8D7349F4150704BC5186948C - 43: 5C51E81BE0EC3817465E968AA07F049BFF7CF7A67B1D355E1E254EDFDA222F71 - 44: 9A18455A2460C62F4436E27CB08B385ECDFC3451AAC79E27A62B2A6A8EE00358 - 45: EC5A90362A75A517EB65D7120C05194E643378E6DC259B5009C6E7279C23B8E1 - 46: CA5F388E039F5E0E74158E959B0282B266AB4C8DD81223031882524297402D7F - 47: D20DCA54AE6FB42A967FF2A9AE686335A3C2262A1FA4F3E219487131D645DB0C - 48: 2D3D934745D397067D63F0B05DECB78D5392E08904D5ACC8287B0CDB697E191E - 49: AE4279312B901FB98AB0F83730EBEB0C30ECDA2E1D1AAAB62008BA5384A30BFA - 50: AC308FA5DCF85624EA186DE4081B3BF0B9EB754F8C938E992668263A87AC03BD - 51: 99EE8024BA8C355AB416B7DF162910975246F61323061EEA67ECC9C1A000FD2D - 52: 7773B4CE08E9DF85FB0B138F99A76ED421668ED19D0EF9766C5252BF9AFCE4A3 - 53: 72B6D710DECDF097D4F7FBD42DD9B9E5595D97C81D436DBA2FEC96D0D720A992 - 54: ACD22160D881277F0010D2575AE3667B0B17099E65FE34CCA75D576A721E53D7 - 55: 7DD58A7C3285D6436F4B8876A4E3CE63BAE92A11A5453C46A6032C5E469BF40C - 56: C06D2D4F6D22414491B36E215DE341782922EC36900CFCA39F4A707A5379F51A - 57: 9B0810A0330E06AF78DC08CA491BD248FE6E36A1E89FF7B9BF65AAC9E760580F - 58: E97AD0EC164712E8103CEEADFC6CD3F71F0940351617D39726EA5EF512A75E87 - 59: 79322D79A95B60F46F2EA43F94378C59B661E433B4BBD3595734586FD354E93E - 60: B5254E8E1E349B60040C76F6FE3BF9B81FC83F3B4249F5FC020D1BD182C1F818 - 61: 9B7A90CDEB29791070A3C22B14DCB04554A802A5A441EBD0A553D2C71464CB6D - 62: D0919ABDA514C7F246DDC9E6F104D61CC7B57336E3E8A658D9DE814994207B36 - 63: 53B53EC7C0D980B7980C16A40D3F7FF83C1038D0300B7313584DE5A5EAE4497A - 64: C9E483B9622515E83259E1E075746B70142CB1217863FB8C85FAE33256F4188A - 65: 9A1983429845A7FCF3191B15EDFCB8A068200DE6224FDE6791DA4C97FA6258DF - 66: 17D3846C20485DAFE0C807D0EECF5AC19A1D7DFE5EB27D569DF16CBEA52E981A - 67: 79B96A06D61A8C08B9E3A2053A3D990963E1D4CBF7CCF3160E474A3528F5CB2B - 68: 58482B747195814BE99F0ED34AF9AA171184FC2596BB147142A7863FD18D2B33 - 69: D5B79F2B49B6B50DD99AB886A3597913C561CB0ED370DCA6FDF3A3FA005709E4 - 70: F9CAB181A422478F977D5504F9BD824C30824AACE2A1D6B9F1F909841AAF9E12 - 71: DFD1598FD7C9BEB3C4653DEA2D4B480C87E33A7D0CEB1D97DEB4C5963DF53D16 - 72: 400F5322C0FF43DC5200620BC37FF4A9E24AEE56133CF7EBD145A39EC251A2FD - 73: 742E35F513B7C9728D99A11E92371D8BA6E896FEAC9D8A0D39E4495CC256D927 - 74: AAB4949E557839802A695377680D05503AC6D3CD75DB9C1F8E8A9EAB38073191 - 75: 5CB8F1894FD53479E32A37807EA634DE2E40B27D010D0EFB51A9D72056AABEEF - 76: BADBE2E21FA08388E3D8370CE52C4B238FF609467A210B55E85A294EA8A742C8 - 77: F5A95E8A2DB33C41E27C6311C38072855A449A46764CB06E83E2009F55A99690 - 78: C4F85961E3573BAA0D7A641C54FD823E1CB14AD0A80EB39EC51520C3811971B2 - 79: E5EDCEA3EF14F62971F2A7AF9844BA087FB1B788A71D45B2F742DAFEA4BB1995 - 80: EF2C5202301B45464FBBB20B620E1DA64DD3BCFC9CF70C4730034E3454FAF167 - 81: 7B634D4FC438A677BD4E870F6B032FFB560BF0B8C3DD725D9E8EDEEC215EC548 - 82: 83A722BED1883050623713ECB5579582798F2DC57E005B71260C524477EE202E - 83: 8EB021C8C8AA70F7C4AD48870014CC7C1E145584440CD43588908532C92B7BFD - 84: 6022BC8D846AF68A4657F2D6BE72DCF61B1CE43383D23444B95B2AAF145A7079 - 85: 47547F2B77898B1DB71CC4565ABFE511DDF9B965FAF8FE522B346D5B236B692F - 86: 5BA80C644AFAB98CEB9C006077DA110E52CC63C341F0941228A5992BE8D1DD65 - 87: A6B25F4E9F3AC57169CE0382D90B01F4DCC0F8C32C27ACA4A2F7907A013D33FD - 88: D851BD49FB420914B48EE013820E1C687063280292FC3DB19BA1736DD6DAF398 - 89: 5B975A34E73FF6566C891DED0CB8C7DE4AFF692BAA0927242098EBE7DB3C9D89 - 90: F2C574E2D8CBB04A7D40E5C3D135667B1C87876D0D2D6BBB60D4DD7C5685E9BC - 91: 1B337E6A77B5A12F75E971300C3D45A58B3C03C7185F2A3483B5A96CBAC4DCAB - 92: 4AF936D81988008315F97C57198E004E005C397F5AF713B4DE91C362ADEEEA27 - 93: 723108E510BB95B6B81096E9ADD1F4172746B11EE25B20EC0D7024EDA98FAFF7 - 94: 441B54654FCA74D21B181EE09949FFD08467FDB46809F5483DCB4A22155C19ED - 95: 0526880DE16DF38A3694017D726C488BA91A367987668D37A941B302127F9EBB - 96: C4242192953036ABE19D07719D2F1CBB8FF0088753D25C58632C9E2C600F5600 - 97: 1FD87DA597469DBDBD93D81DA9FB3678EE01B6B5E897BED5DEC5B17A077040BA - 98: D77403931FFF61B28384CDFC3A9857272D3452633B9ACEF703B668E564487E3C - 99: 19488ADA94F1C4CEABBE07C407BFD59A5F52E4F8EE964CBA6442636DFF12C925 -100: 1E6871799BDF2B3937F8458D124C4AE55AE5B4298EF6A83B8763070F4E2A0F3F -101: B3529A093CAE29DF5E4EECE729AE053FBF4579276DE2F90859C57D9579FAF6D5 -102: 7EA44D126CB99EEB4F985709BAF62015AA9802442D9D352D21FC75ED23450F54 -103: B52563C175057965565F8F6345282F5048846CBCB4DC920664CBEC585AED5DF4 -104: C2282AC6771F2651161B09D48DEF64CC305ABC98644C6F670D2F0E210FC9D16F -105: 54491B482182FC0C0D7B3B684AD8AB29166D007DCA103F0B2459E6834FFBDD9E -106: 1B673FB33D5A8C78E5EE95B8D7DBB22689E6644CC3AFD634A65BA79EFB47DCD5 -107: BF844D58767FA5C221422E7E12A8D33B7E529E6FC54B71813099686ADAE01938 -108: DD48C0124465C585979B4D874EBF2D62A0DDA994FDA7B7DB7A54352B3C04D9AA -109: F9B4586DB8320E1A08293C5C362C0234BA5B897D9A24303FF15309E34712B89D -110: DBF58866CDC3A0F11EB0C8AF7908C4FEFD4C1D1C2D16EECE2EC67A72E3D599F1 -111: BD209F60B0D04102A09175297FD255367E54B5A5605B928635C606306914363F -112: 2CAFEB0882CC405167E9A255B8581A66DC683212474902DD453DBCA20A94E61A -113: 3222333BE019DC995E5DD1496D5859DDAA491E03E7DF81A659D5E74957BF3B53 -114: 2CB19434BCBEDB42C79311C0F54AEDE574CD7541897075031D3A5061EAB75E84 -115: 544468938A91832E1491727D68C4D882E45E4C53CF2E94D6FA972D97B9383B66 -116: 7EC78AAB48E24164F2F4BFE5C98449A864C21E6548866A921DBB41C1E56338AD -117: 291D160ECEC8BB0A7555FDCE7BC0310066950B168CD6222F70B28F1EA2781D77 -118: 0EA887F7B2FF29215486DCFFB6336FAD698DFDE84FAAA7819C3229025760309F -119: 6FDCC1A442CC8391D7DD5A0DB6601EFAEE9A4954056C78A64038C36BF7ACB368 -120: BE74A90ABBC2EA03FF56DEDAE4EDA154BA6CF24D73A515903356283B653F5109 -121: ABECAF3391F6ED54820DEDD40221A6A2D034632B5CFD99F0E415F2D0C487C2B9 -122: 1B62C738AD0890B7EF86253EEA5BA612F65F9C106A04EF7F8F8D0DA2BDE1A436 -123: ED19094777D33AF6FBBF59170E3299CFFA2C7CEAA394B639DEE7E6691F7F23B2 -124: 715DE0E8C09E5FDE6BDA64971E9992A11A229DC1EBA3DBECA89CF1DA76757F39 -125: 3B963901747A3256269D07A476E4E3E6C74CEF45AEDCA3EF39897A3E83307C52 -126: 1DBB2537F9D1C789D59B43C188F0148C4FF00E4545F15EEF5FCFDB5B9C771A9D -127: C26BC7E9315E62AB0DC6AEB577724D07C09B0C6FDFC0A9F08D8548047C032248 -128: 2FF11194B2AEC1F943CB5F130BA647C151334068083194D7281A55D607AE255F -129: C4A3BBF841ED2A289E5109FB392229C80DB61C72FD92079B5A4F0441F095A111 -130: E9ED1482130F49D78F1FDDEEB30C8A8E255F917DAAE9553907E95B8242554C4E -131: 662F168860670C947B0954E99DFAFAABE57CEFE784D4852BD8B2F8F0118A2D6F -132: A492C90A1674016E0A2A4D47A9090C0BB496DAA57B57405E34BED2A596AC5D08 -133: 5B468AF710143DD99336EBE35CEC44D47281147F117A061279AC60A238FDF0F4 -134: C84140048F97A2B07831BC654821B316A1286A04CECEECCC172F0CA0039A886E -135: 9D4C1DAF06FC13D4E6AA4439AF56591E86302F5468ED2FD83DF5DCEC3EB5B741 -136: 744B6DED6880EA488FA1D63D52F1E5A49A8340A706C49AD81C017988AF20D2A0 -137: 89CB7DA333B0FDE45AE45950667A550E47EA40EE5E90F24CD76E0EEF8C524C4F -138: 7ED320CC648E71F703645E24DCC138CCD709B2CC301C2DB5C3AE5A12DC7D42B9 -139: 5AFAD9784B470924013641DE8B3D022C181BCD54D809F0A64FEDB2C4568997A6 -140: E503143A958D963BF71095D20C61DE3344017A745654EFD640C89FE5E07A1B70 -141: E332887A707F2A38BF12301B029A5D6472962D937C4056844E3224EC80D57B67 -142: EA6D40311804EB72D7B28C81FEDB6F926B7232AC8C66811AD1382A8BD4C4F840 -143: C83F8EA193498359183EB8A66958348E5DCBFCFADBAADD28C7020238BBC0B339 -144: 449043A396B3A48EB3467612981A8E666D60DDE6691A54CEED7ACB0E6E901CA3 -145: 978BA98ABD7DA915CB82FFD68E6C72EE336160809A9C98D0B73F6D4A5A2D539B -146: B7FE297A5A8EEF8BC273F104D7EAB6A346773BAA0C83BE78CEA1073EE6B3B611 -147: 3CD2AC21566B717D67B7CC2AC13F7883C2F05D6871F0A59FA2BE8DB5A11391EE -148: 276C34FD66A673BEB30E90B37ADD5EB27D8C07A61D7BACAB8B948B2650A97AD6 -149: ADC4756A2C775692463B9E25D3DDBE7679355F1CD7C0A63CC5B880C9EACC3763 -150: 251CFFD321CF37D9B80090EC1AE296A450B05B8DD151D60BA1C9CD63E0C5EDCA -151: 50550008EBBB5C82F774B0C6F2BA1E10CE411F44B67475515D7D515741A1FF19 -152: 7EF41372147DC56403B8EDDE2927CF7ED9C2AC755D24CFBB3A792F02A7E1E9B9 -153: 29BA190962830BE08A9D26DBD06B39F4098DFBAF63689FB732047C3EFA4227FE -154: 69943757A8848DCCF71ACEE24030DB8BF32A4C5799EA0188BDEA6F85915E530A -155: CFB235AA688E22CB7082C938A4C1FF0AC8D2F0888058A6B783EBFE538D36C439 -156: 9FA588A94CAFB1B9253AF2B2043BEE45B11C22F25939AEBA723B18C8B523155B -157: D5826F6F131A682F6E6C3EC66F00C451DE9976A74221F031E6541F9ED96E649D -158: B7586F758A8D392648F8FAEB8AC1769632F812512D07DEC1B8AC4110EF932028 -159: 7EBBE53085A0ECF3319884CE0DB4F8EC76473783E1AB2FFA953F25C6E1E76A20 -160: B301C3CC815CD2366E0B31074EBC06119400FDB8935B713CA6A44507AB88AD3F -161: E45D33110C77AB146E69D214CFC29B8521027F318A20A617D0F17D90E598F6A5 -162: 5CD02E62E506B8BD6D00BC2A7D4CE8FCE52103B7F2C3AF0A85D1FEE52D736C97 -163: C5F15519B2A71222265DA310E521CAEB50CABB221E3BCD6766D0037EBE76838C -164: 8F619377F20A94158D0ABEAA076FC591F44B1DC917524CDFA6E8A46D56D677A8 -165: C80FDE1BCB0A393E5CB79C418565E1DA15B2520CFFBDBF9D8A078F1E3DA3051B -166: 145AA28DFD7C22E2146EDDA61582E59CDFB3461C034E21A7021DFE9A87EB4F02 -167: 87CB225B33F0D1E4342CCA75D0B6838F3B5E3639605DDB6C34ADFD1F000F3628 -168: 6723FA46D8E660D58DF08ABC7B8ECCA5687BDCFCDE075DD262F351033F29B3C9 -169: 318DE82AA52B2786D92DE178B3685664D17C081937803792CD8E58D15B0436E1 -170: 1829CD424106FDBFA4CB062AA7B55BD0933EFC9DE2FD1B3CE9513A213F76051B -171: 36E31B4B7CCBF484C4A1E5D169DE9F726E3846344D9C2D7FA0D09BFDB6C26DF2 -172: A67DDC415E7AC24088C728A0C90B5718965AD380790B937584F34ACE41EC599B -173: 408517C5E891A82958F1FB2357AD46668ADBE9C9A62497E625FA99DBC9B39DD5 -174: F78CD14A1F44BCCB28D054965946DCE4EC830AEB10DB7D57453B0096354C764B -175: E7E19357A66DFAF638014FA2F68F97A61774391C0DE6D44BC8B04FD73A074194 -176: 2F43764BB6DE5F371DE70D5D321422D139E68036CCF4BEF548CEB24DD0E8F7F2 -177: 842FAD62A0B5A057DD95D8A18EBBB38DDB94E2D8BE8CBE8CB143035226F3D3DC -178: D2B5E100E50507A5CFA81D82B1675B346CD472192E781B2AF427404D6CB7DB27 -179: 05480D17248024985EBE22CBC9BC4FECF680D1C98849A45EEF652692C85E5124 -180: 44866966D06C8FCDF4E07074E1309B9DA6C498C5F624FA71DA12EA90F5659994 -181: E66A0FBA1939B25E533EFB1DA1E509111B1B2F135E2B395DC7411F1C5983958F -182: 7CFDBA5EFC5EB2C562293BC1102F9CCFF778CAB78145A3D2BDCFD4C29C5F80D9 -183: CDF05F2A14BD01139E731C82E8821AA4094971C95CC6A08C7EB4643742A3B871 -184: 52F30234CC6F24B7637DEC71243AA70C3130BC74593AC6C794EB6D5AF563B11A -185: 7A7933C4B7ABFECB8D7D1FD331A15AF98512A3AD7D9D9C3F23BF99F189A1C78B -186: 85A9BB602894578AE83F18E1ADCB63EF6F9A3C13828BF212C751A285B30EBDEC -187: 9C4D7E27B201D6B4571F897C2AFB7E95075951CC96E31C01DC224BA904A6ACC1 -188: ABB898DE6B19F043D9481E69DD97069061916E05F3415DCFB5766847A923F9AB -189: 8CF262389D731135956603DE1429E35290478239163F17BE26D92852D5B3B612 -190: BA6D869CEE76015F45212B41613A567985D9C30D363E968948A07190841F3B5A -191: 5520437CFB0246D7279CA01AFF3C8B87A7B228309A0C0C64313BA54812DE6FD2 -192: F2CEE575D139DA5D0C49A888EC3A573F3D28496699FC0F3C82C69B2FF2CC8FD9 -193: 3256ADE32D4D17F167179A11BB42888A78B0F169E0F900406E2E6527F83410FA -194: 0430205B244020D13A4E99F927EDE6363E69CEAB486F899676F092FE100C8E26 -195: 6B6B0908E9C1FEE98B95AAE59BDA5EB6F2EF14EBB49747175F0224F16A7268D0 -196: 5CC244BB87F8B09058DEC56B3F92FDA0A5C5FFD375C45D4B2C6259D9E7341494 -197: 8505317F0760F36B40A6781DBF6095BEE4A4C3C207491107C2A8F76368578250 -198: C76F387DAE210C7FD030E591F35D735258882C72C847ABE2B7BD7E0B42A8A23F -199: 2AC2E952027767245AA4EAC553E531B3EFFE92582924FCB21D9E6E7E67054209 -200: E511AA65D4E53C0BB6065C9E1D2882248307FC4987E67FCA18D7E3C77017DF65 -201: EDF8F5A95B1A6F3FF8AB66E2C6A19A8AB40743A079E936510F40148AC735BF10 -202: 053AEC7A30D83DBE469D8F2681C13147F79FD0DD9F1A1A0BE497708451905D2D -203: 21433FBA9B1939EF2C4AFA26BEAE530E2025DA29EA0F6EA68C0BE12433517BC3 -204: 52ECFE9A21C46E99B5CD93BE95C823C5833BC31CAB438609418B4D7F9F8563CF -205: 95BD806F45711A55AEE76D774CD61EB525B6C0BF30204F4D8032E3551C986F42 -206: B3B55F8CC17DEE54BB1244FBB2F8CEC30442A5B40EA1841D365ADE811B2AA782 -207: E1BDBF67EB54ACE9E283DFF0F8483CFE372362EAB502439F960ABF5D67465300 -208: D47DB397436F5F0A2A7A2E8BE41AA9422E269B9ED7885D36143ABDC43DFD6700 -209: 7BB4C3B85AF25263FFE1D275E32874F7F1A9D1EF9D1D60FB4823D6BFA7E264A9 -210: C9C929BE3E43739965C7E0674BDD1C6EA72C50297747D3BF3AAD42DB47E2FF8E -211: 12E101B96C9CBB6FF3CAF705C6CBFB89FC23AA4C9677DC5ADEA067B6F0A07F93 -212: A01A6ED04C9AC88BD6B635DC1EA960F24A1861673C6C8AEFBFCF5F395E9DBB00 -213: F32769B2C875B9FF94BDBA4967D43E9A8FD057DB6E6C30AF73D193B7043CC71B -214: 9DFBABF53ADEA41DF013F7DE81E0CB3FB45460D0EA05A4A118F94734B5C46108 -215: C64F0999F72491D5D231934F61852D4A80515D8B433919BC428A97460CAC706C -216: 727F38B67AAC9F8769C6A6DC8FB5DDEE59EB1D72F151384A3EF84B0D002A95D7 -217: 2F3752B1856A41A771463FE86D33691FCE73658B4F4D0618267850175425FA57 -218: 4A98E1098631E00F4EF84982671723616230BEDEFE262F4B85529410A1610341 -219: 531C4689A799EFD30CE2A2D7E402DC4112662E2CBD09147550BAC74F9B710E4B -220: E9AAF8A14AEA7B7095B68DF1E63BF61ECF23DE3336CD949CD7009011E26875CC -221: 5D601683D4AA736661BC2AD3DB8EBCD805782733495A973F3952BA5CFA272A85 -222: A322AFFFCCF4EBFC1235A2DF3EF4037D3F88A002D221D2658A5A813A4499850C -223: EC30D001273482A2DC2D362CB5F6A33C2156E923E2B250CA385713D4C0B01D78 -224: 2A6ED14E53950B0CC3AE36C157829AB67D8968EC2313368FED1277EC96C20197 -225: 01090CA95E440A43638AF490BDDA94E1AEA7B043DECB75797E2CAC04F7DB0640 -226: A18334813457B25623E0C90CFE5B7FB78BB8F3B02BB3EF1E60F2B5C466FBC4BF -227: 3F89302B5AFB23AC66C5C55DE02880B66EC8559D67852B66E754A819835BE501 -228: 85B211803476C33B845FA83E88FA79185C197254A72A413EDC568D1F6849CC32 -229: 08A363B5C2637D0F22E6A252C850612D66156FF2786E3D467E8076722B49B95C -230: C100CD4D709925FCCA80E4D9A173C5607638182C174458208AFEFF23B4B3C206 -231: 373EA0C75488AED51804B6E6C1C80413C234C13FF75D19BCBAB9864EBB7C2C90 -232: AC1C350458F207DD58DFB3B7EA27EB66D677E57B090FB2AACE98C85B9536E7B3 -233: A16FF8306C0F4E7C98AA5D522874AD88C465D8E1A156A3D9D951886BEEB2C5E5 -234: A4BD343B59F5AB8851FA2BA52CDC0D66FAE5C0C17C108DC8F78C2524D2F92D53 -235: 3BCE52BA2BF56215AD45CC66AAFBC61E0A32EAD8B5C0B52CAF78B7F47BE118B0 -236: C6AA797F5D490128E8ECB7828EF565605D38DAC5D2532B87B98E01B82B590159 -237: 40F2369A8409A9E373AE61F39F98754419257B8D602E89BD6646145CCFDCDF7D -238: 72CB3D5F5474F0FD2AD89B5811A13F9FCA5AC514C850A19A27984BAFB571E0A1 -239: B81472D255D80182E196481E5866AA207761A152302A0237E242EB88C577A428 -240: 6CA13C55886B74A5CA2AC9782C4B9A49FE3AEEEFDFC0CEFC34984872FB4C54FD -241: 1A488E47268942A41B5733238286FB218AE45D4BD9B59B48E1C20478410943F6 -242: 98DD6E9B848D21D02947BD75B6D220C9AAAE20AF0597C50D70896B5F494ADCC1 -243: A8DAE0682E2A7A5A7D7BAC33F409D4A2377BB7454DA5B4708F37F7435B52687D -244: 21CCDC5EFF5BDD96C32D279D5134666F5B3B3E5AF86D0A56E1496DEBCE229D82 -245: 69F37D48186A4D243267D8DD064BFC54989177834A0FEACFBDF22160D6A8C2DC -246: CACD4179F2C2AA00207A70DB4B1397C2B0F278B5F926EB6A32EA349DACCB9CDC -247: D8D16C8EA78D7F3E047016273B4B145D82ADEFA1017B07D25B36CEACF5266B7C -248: 5AE8021E842AB071A0918438CFA7D1522581994D421838B61F53331E5832137C -249: E3872214CCEA7FA48B5B32FCDFEB5389E0AFE6C1F842CD47BCEBE52FCE5F3D4A -250: 153EFE4642407F27A595C3B78AB2535F34FFD7DA8200E81E3AF8027DE8F237C3 -251: 076410D63654626C4ADA16A8911918A203FE3345628D4237CB6EADEA67A8A070 -252: 031C022F234308A9AA5C9532ACF563F299F9A63D8353F294FD8C46D1BBD67D4A -253: 718E33A2A762F99E7F1146D5A3A1E96156593ECAD1878911EFEA11AD15B5FC12 -254: D0CFB8A40E130BC70905903D1EA8EFC7A1DD0DF7E35810472DFAB302C9480C44 -255: FD932614F375BF71420530A690CB16E52C08E99CFE741AC8436FCA8C8BFD5676 -256: 0837A11D994D5AA860D06917A8A0F63E3111B95633DEEB15EED9949376F37D36 - -Hash: sha512-224 - 0: 6ED0DD02806FA89E25DE060C19D3AC86CABB87D6A0DDD05C333B84F4 - 1: 283BB59AF7081ED08197227D8F65B9591FFE1155BE43E9550E57F941 - 2: 0A07690C7F1FEEE3D8C36114E0564D43CF0E710642E90BBFF1E9B7C3 - 3: 00FEC611D324972280D5B8D125BD43DD6EA2515CE38C3B888E613A07 - 4: 6E30A312ED1B6D4C7B31D269BCC7B0E6A29F0BF8AC223049732B35F4 - 5: D44BF9D6D04191EC944F8310B785991F4EF45EC090F35E847BE4621E - 6: 94EF12F2B3A28BA5E6CE4650386E4427A4BD28D2843F9D1E5B32048A - 7: CA5456E523DF159636695D94717801CDD968904348197A4FB5AC5119 - 8: 5A00A59D3FE5B7BA5B3FE011F8181487EAF7201ECE9802E424C61E88 - 9: 1666206F4D64AF32793D51D33DE4F268AA54E7D112F048356F317BD0 - 10: 069BBC329DAD3C93089EAFBB937C5A632A4319262EB1A6E2DC1E6A77 - 11: D0A05731CA8F7931F6982102E4400BA30C54F168AC16EA775E7C4421 - 12: 2613FB4EE8451FDD2CE06DCDE74D6BC07ED02EB14C1C10C0D3D363FA - 13: B667F676EC45176BF778C82B74784F49CD39190D100A09EEAF80BFA8 - 14: 1EE61F074B90106665F1D5F14ADA3EBBD85A90A1F86480A826BCACDF - 15: 0B0687B2E11D2F895E409CF2BB740A6955CF1BFD92FB6506AD842E2F - 16: 65B59A2E9935695519257ED5732C4CBA8DAEB3FFBEEBCD76ABBF780C - 17: 39933CF59CD76093DFBB32D3F22A2C625C01E27EAA08D6384AB3000D - 18: 04D4F72C5D27DF6C14A7094510B51FC1B3DD00B6B8ED4C075036E367 - 19: 559769278E6162D83151E400A271D430D679F4CF31E56318A292FFD1 - 20: EA3D6A5A59D4FB0F91EA5BE140F10EF016FF3F329C0D249B4335BB8B - 21: F47B5C68134BC28B322D79D3AC6C972BD0F399EFFDE08D63E51CE934 - 22: 4B15656266A2978EDBA018E1B2179A1AA5CE391D4C6BC519B3D00C49 - 23: 28CF753FF5C3638223730CF084FD174A241ED388733AF557CBAA7DAF - 24: D0B182ABEF413BA386AB674EF13D6645AAD072966439C05026E033C5 - 25: CDE0DAB321334986FB8D0979F91E8DA4F124A50CCF36C1E141072886 - 26: 70C12305B10FD9F7988AE80DE76C12312F5A1358CC8F501F7559A1FC - 27: 329BFD0CFDF2F12CAD586117A963E70027A4012D2E34FD48BEC23837 - 28: 0557344CB868836E365BD8D9744270FA985D68C6C26D93B800453050 - 29: D92467142FCF76D631683D3FCBE57A8B9FDD345D6B89DF1608008D74 - 30: B330CCC7206F6783B7D99DD15EED88C5ED55FA68105DE4A4B8B97361 - 31: D89725A75707E3CC1A7EABA0B6062D7EB3851BC1C49B3B237375235C - 32: CF2FC8B204143A496C4151113069636B288874D2CD9BEA3BD41B8495 - 33: 6F2B418FF1162E8EBADB34988E1FFCC412DE7613F3DC8E7C1C9523AD - 34: 0F3B76A501630F8E04214DEC93C3D019EB8F544112FDE69F77D1B342 - 35: D149A08A586593EFBAA96AE24171F962695DE0A55DB97F9AC936EC14 - 36: F3FDCC88C022ACBBC1F0BC7C738290768811A817B9A9B80B6C04B0A4 - 37: E5C962AE7DC60812C96041F20C5AD6E65B46DD55430EA0541F98E704 - 38: F22C11EC64A1BB8A883773A6CE9C435BE2B788807EEE19A19B9D940A - 39: BA5DE0946DF38400AC68EDF0A86A4DD8BF9594400FD239B8D1741044 - 40: 7802075428B0077420E37020D6932A24635C2D3AADAB7502098623DD - 41: 488268FD1A6D83CFA6EAC8685979C5F7D30933EE06A75E691871DA49 - 42: C1E30EED85DD23DE56C0897D04B8A8A4D22743ED39CF336B5338FAF7 - 43: 92813F2CD4D5AB56426D3E0B555D842E257CB0BF0C2A5393CBF35DB4 - 44: EE1FF9E3606625D954283059A3216464B5FBAA6DC64D8301B4777587 - 45: C6A59E3BF7EE5B5BF84F0F64AB196DA82686323D5213BE64F0F0808D - 46: 7A893130DFFA5DB80A087CC5CF58241A887E12D24C49F57A0CF446AA - 47: 2947CA00789EAC5FD4CB15AB516DA2BE7E728F35192F5F50A273AA69 - 48: F465139CB305691F5825A29E56F6D5E40AE1E041D3EB6E40A62FE854 - 49: 930FF6177F2A43D1A68565AFA65D85B7C335B50EC7E539F2FE44807C - 50: 3A758B9ACF4FBBEF5E4C31C181C82772AB9FAB097E3F9845F5EEF502 - 51: 570B4A6CF0CB0D96A6F285B8E0572DE4C0C9141BD78629790FBE0C13 - 52: 80AA23B431AAC8FB8DDB2291F574191BA1A66CB6F59271A6FE425ED5 - 53: 0208987B33EEDE4C081D624D50D621B6E57573A502DD3893CB89D9F5 - 54: 14433D01D241AA9EAB872098E505514E77AFD9F2FA2C64B62C9B5BC2 - 55: 4BC333B55C3237ED85AC21B6B3DFB70987C33CE04E20C2DE6142D681 - 56: DF1BB702813C49110142BC858073E618AB22AF52FAF8D5F0403D3FF0 - 57: F32287421B005CDB31B9B010A0F5A4AB12E161C2273BF69C738AB94B - 58: 26368FCAF3E938A8F144382227E1007CD58DCCA9726C74A677E2EF43 - 59: 54E346CBCB5AC8D3D5FB2D23014F485D966124F55F4866B2A3071467 - 60: 64650D072F1AEB7D3125598F96EDAFDF1EDC9F32BC09EB93E1DD687B - 61: 37240528FF0A13E4D0B1554A241BF2E658EDEB29BAAF9435C0ECA091 - 62: D233C35B97D0C77A0D925341193C664987E95CEA687EB76A473C73B6 - 63: 4544175B79234F008606D6071D74DE7483FF0BDC1DC8C99A89BCEEF0 - 64: 9E2437140847453434ACB859BC4F842E9FB4A4B55BD9DC164B74CEA4 - 65: AD09C080E71D330C7AF75C34CCFDCDC103C548EBAD3A058BF638AB01 - 66: CF9FE51BB566173AF5DCF3224C37D54801B3D8D99981D21E567A789C - 67: 58CEDB734F792A83905A7E76A014D6AFDB0C156AA08E0FEB1DC6F737 - 68: 69FE39435F7D2E63EDB3F8C43EA850DD9A89107309B72FFAF459F65F - 69: F164038057287964A01C51255DCC0BE0F2C42882598C1C2E0EF9A28B - 70: 57A8EA1F84E6653455CE70B8AFBB7CAC715B9D566250F7BD7A568E82 - 71: 424F87E867ED6A9FD34AB5B14BFF195E7BB65F70CB19D3B50510D380 - 72: A5BA006B30F2378CD1AB2E5DBB9FE130BE7F504A7A7AE51A09839229 - 73: 67386EDC9643345A4A7B060CAF230748B72CDFAD644AA1A69B846731 - 74: A48F0E00C1649D75E8D1927ED977EC333F904D97C2664B37819BF99C - 75: 1EEEAEFC4BAB0A232580116E8AB9C24BC35781E11D35562CCC97107C - 76: BE3D716B6DB628B4BB50F4472AD316FB906B5CA7DADA244D29E5FB8B - 77: A731A30796C89F3C37C99027F487979CD23B9FDCB5F03B4399A52778 - 78: D99A36476A13D2E1F4798C03E083FDF3E883401EF99C89B3D1FE7DFA - 79: 2154E08A409998272A3B7D2662BF10D30866AE0765F2AA1437983753 - 80: E0B6566F1F80ED434158B87807CBCD92BD28AC05D686C150DD67D1E7 - 81: 97DE2D154454C4693C3B09F7DED9F24D82095F0F59A49009A622CB90 - 82: 10CDECBFA161F69EDCFBAD57C10077E3DBD7356AED8CF00826554D61 - 83: 25DFC75815DD0995241F2EB0BF3899A2F70FF161C4C8913ECEFEA31C - 84: E87B6D729D9B12434CEFB32AB0F3CDDD98CAF531CE0F1C0A4EA3C594 - 85: DA64DBDD17C06E5BCA25B29FC9BD3E807FBBF85B88457C5007A29420 - 86: 2B354F454796AC6B73D4DCB61B245068857FC0AF370F7B810D998E29 - 87: D413BF567E46384C50F1C8F6D04E15EDFE49A23A9CF8FB3BA5366C0E - 88: D34D30F424F8966AEC100295D38F50BA202B7870D9F563DCAE7E53EF - 89: 4C92C6C9AC7AB81AEACD86FAB38CA0F14CBFD04F7ED2209F658C2C3E - 90: 0881AA04F7029CD296BB0956DCF148F4781F7C3FB651C6EF939C74AD - 91: D31507F6253787BB9565B114D98002010996F2930E32FAA8F5D50C57 - 92: 172205CD782DBAB95A449FAB59ACF89B3331FC060F9CF2DF94DC8D84 - 93: 0E631B1F9C604BA237CE9CC935ECC7966C35C8E847D8AF79EA7A6780 - 94: 5C632A21E6FBF71026B1BD8E89A58105A9231449F865F433121C9996 - 95: E5E6B8C1208E9F82FE16837AB87CBC3D0AEF9E424515239EA8992720 - 96: 24F4D45951C40A39A37BD5BB7FD48CB6773CA6489EBF50B396597ED4 - 97: 8807B743D38F491DA0C30FBB81C15037AD05FCE775211EB4F71677B9 - 98: D807E6C39F1F6136D03B2C64398482F8F0E34615591509EBC003EF7B - 99: 6B7514EC3320B8FD441D76AB9F7BC79257A5E6371A3F20C0A19B2233 -100: B8ABE8559D4921712A44815B8C4EACBE2B8D6E93DF96602534CEF852 -101: 3562AC37EC2EDB9D49363661B4C2A466F673D51D9081867A3D871359 -102: B35D3621C09E9C61D4B7DAC784AB12F7E08786F5F191E30A368CD68D -103: 090AA07690C305101F7943C57585F66F972B1299F5C7801971F70D23 -104: CECA8AF862A236CF08C7BEE7B938A822BE0DADDD36F52DA9832100B6 -105: B5C2B958BEAC3EF67F6352F2814F12DBB1BA548ED8C388148310852D -106: B14FAE5CC21CA79DA51DE208F74C12C1DD242E91141BBC2DF6F445FC -107: 0FC57C8D7F410CF551DA8591FD90F31F678AA10667221A4E3745130B -108: FCE9C580498A5D331A5769C7B0E28EA269DC38DC96EE653E89BA994D -109: 15628C95775984C37CDA5E240ED7469BFDA805F7837CA2B701AEB46D -110: 4F18E2DBFC15C957E51C15CBC834CFEC545C5B49BFB754A7C5C08A9C -111: F8810EE322210D0F4CBD7A4E92E7D7E72B63D2777DCB531E13DDD690 -112: 8099918892EBBD31215C9BB5E4E53C0B52927B000CED0720D2C65A22 -113: 8AA886CFB7357D802E9043498BB9CA36C80A79DCBFE06C9324F8C027 -114: 5E15C489124F3F4F1608B715B997F7965E83C025EED250E3F9590D72 -115: A0438519E0D17BAEC7D598ABF5F803F87D6B1646B1E0F7FC4D2B7FB9 -116: E09144D128BCF27B515888A761FE0C75AFC0F3C62AD49FF7EF1B7FC4 -117: 0F53884CA788693D5F51582A9A26568EE143884711E6A4502504D4D6 -118: 8255D5A16DA27ABA30904E22C13FC6D8014FBA31CEE8BC10D79ADFE5 -119: 091688FD3B855964A303EEE8F09F3A04B211B8A31B1729451A0458A6 -120: 3055CC455C76A920206971189DADE9A78A53E2455C12865C4ED36CE3 -121: A7F4D536F9028234EE7256853B95B9B984DD8CAE189C085380C70087 -122: 91CC350F8D813330D99061090A43349B57735675EEAA86C9AF9FD081 -123: 2FA22BBA6349E2F41D7AD06204547CA0D8C75DCDEA49A2BCE81F4F0F -124: 848183EA80864E016D5C5568B4A843B5E5748DE89E572169206CCF3E -125: BA1784E1FFC8B17E4E1849A54C469622482B12334A4AD620E2C5D99D -126: 35F29C25C39B50D886B398E6F654504CEE6A71B7F886D5FE9A71BFC9 -127: 29D2C4166A36E07B2DCD3A7C988DCB14776DC187040F6A733162EFB7 -128: 49A64B72A88A3C93432B6E4C59A1B4908403F70E46E13BF7494FBE88 -129: AA05964C59A40BB5140F3F1B9CA03C3EEE0A1044BBD3FE84E5936877 -130: 38E7B198B7D65953C36F24AE14A1476F4B6273D0F551B0BB46AB62AF -131: 7B95414DAB33D2063E798ACE54EBC3B59734089BD90782098B493518 -132: 3D6B803BAAB3DCB33FBF41C9A0A26AB4ABCF9B6130A1767FE8D92EA6 -133: E39B41308DE4E09EDF225ECD70773019DF360659C00788EDA15A3B09 -134: C061ECF6E38881252E65522B3244FD013700D4E0FEAB8FDBA5963C44 -135: B95387AFFDD9040046D28CC9B90CA83547C73F8AE774918FAF17112A -136: AB4D30FE79907AB6BF4153FF2E15ACFD3FA851C59918C6D1BDAFB8AA -137: ABE3E517600C412DF53B002CBCA6741DC1ECFBEA68B595EECEBDC2D3 -138: 1A5BEBAE3CF1B4C02C8B8A177801AEBBF11D194B5ED274BFFD2B0E70 -139: F87D97F5BA0D6D6C5BA279D5A803DA48E38981594517D03DDF0667AA -140: 98C4579B3C3FB17BA3A9693B6CC38184E66C6CDE8CE6B572B9DA27E0 -141: E08A209E340A496289C67BFD38EE96A84FCFA4413B3B545AE847D8E9 -142: 8AB4CFBA58F12EFF33B19D57DF495591983C39FF014DFDADEDB12837 -143: 3A85A696BC2E82456C682ADCEA5B2BEEB0A11E9FCC363D9C25124ADC -144: CF6E901A2A18C002E75E535B34812AB027E32384EA0271CA6ADFD07D -145: 1FFE5D64C7D229344ED0FFCD0FC1F87ED80F097A5F16F27E89BE2414 -146: FB238E7E0F64DAB7101050E2A594C12AF572DDA5FB5DDCF0A81EF7C8 -147: 413F330049C3A309E746A6B6D24BF40CA430D107A18227AE7BB60165 -148: CDDA7B929096FCE42B07E19C72913BF37569C75FC5183419E0FB070E -149: 07F9A28D87B98482C0053E187881D02FB15ACC321ABA51B9ED5D1F4E -150: 666CC5B7FCB82C1CA6582309CC4CFF989D4316101003CEA5897254E3 -151: CE161DD7D8AC4DD45EF0F511EA206F5D78539314C4B44A7A4F4A403E -152: 5AD4DA1DE62D6B012259C3FE1573E2F6BAB8CEC85FB6AF4CCD1B4EED -153: E9E64E30A48783FEBFDD8347837B52CE7D5287E5FA4B7A3F7F66C013 -154: DB14B1F354735C9DDF4230C844D5E184D6BDA7FB8C8E0623A4416590 -155: B394B4D91411B38C4BC98DE63940CF6393E19EC229F4767D130E1F03 -156: 904369E594C39ED6A32DBCF5D3743FD31992430BBF126CBE2E8E5788 -157: 221533E80E5B43D2F817283CB611EA92E02A1A6B31B26F1F9B5F2DC3 -158: A16564159AE18130B912A694F8311BC6F769837A5E07E46622375228 -159: C7462633CBA1DAA4C0827EDDF9632A4FABA2DC07ED45668A2D012174 -160: A002A7A6A4F75840A5A94610E7CFD2E9CE165E5F5177EC20E2211C07 -161: E12C0157BD545EBD67B907954E3A25D95A42A5626E6665BD1285AEEF -162: 0B8F3327D09BEDFFBFBAAB6D863510F7D54A81791C4DD66B7C5FACBB -163: 0BD97B63D7D8F0A4B90330A5A00444CC3941292138F2CA6BBA76CC8E -164: 5E1209A29CFF68B4DB004D0C7CDE223A0E8801C25AF560ADBBE2F27D -165: 4D458E8F2F68B901C13EE4AF463141617DC1D0D8E62F6991C6A07658 -166: 174C92CE40F01DA75C57DBEBE8114997D2B931F2B1E94BE5D99E987E -167: BB9D18ADAC9261895FCC5D1D209742EBCE546C3F68918AF614BB80D3 -168: 85A49A9C7034746587671B8DDF543CB9358C2FE4C75DDF332BC695D0 -169: 5D618C15A9044D6E5D461F8FD0896020ADE117E8DB7270E602C86B3B -170: 8B9723D842504419E29EB9F8B222D3C5C1D8D90FC02E4930FE1729AF -171: FAB6F7BC8105A9E107A5FF6CB408616197A5EC8FC8DCAD975A628CAD -172: 2D66807292855E8D11BAFD680D59BAA5B9E6D8BD360D6086CE12EA95 -173: 1F2936B3C91E9A3C17C11091DA7D4D42581CC3D9EE9192497FC3CD18 -174: 337575215CB0B37A843063867FE6AA322222F8B0F096FFAE69E385F9 -175: 002EDCA2423B16D8A84DD7B01CDF53C330A16A58A03B74D906D6EF62 -176: 37B20A60AAF4FEA526B217BE0DDDFB8CF8880ABBE5E444432B579003 -177: 975D4F979EAC80F42F7CD3789C0A18057AB0593BB78626A52B15BB8C -178: D1D7C4A4ABEC252B300560D3B95F2A8747B2B554F19542FF44B9AE9F -179: D4B36857F9DFC1F6A530767E9AE20C18123789C81CDCA6413AF990D0 -180: 853181CA65B54A26F0090111266FAB58A9F0B80DB49F89B284661A80 -181: 003337BDB25A835BD9A7141A6A35924CB47A0C404F79E9E5C1454AE1 -182: 55DE6261871747A96075A5FF81B17C65054B923FEEADACBC62DEBF99 -183: 3BB872FF69DD7B319FC39E2D6ADCAA724751339AA98EAD9B63E31C7F -184: 72BAE6681B59CC556D50204FC7A4B286E95DECF54E699C35C4C1E46B -185: F87A12A8A2C62C34126544DF55ED1C299A835AEBA148AA79D29433D3 -186: 4FE245B12D8312645AFD30E764061DF8C95E80244ADAE3853CBAC5E9 -187: ED824E6CB63CD58B9FD9C5DA0DE419AAE4AFA07D356C6D594E6C7602 -188: 5684C0B9736B43B25FEE8F75E24EF479AA28C4EDF8D3F8EC3EC1B18A -189: 516F0991FC66A910B24AC719E31EEE08972E430A08EC3E487520E6A8 -190: 02F935F3979AC59B7179F8F149B39526D9203333678E37CCBFA81AF7 -191: 487E604E36E13BCE0145C659C2018935E706AA910A4DF2F248E94AE4 -192: D3E164E063FB6FFB4F0210D91CDFCF9C1E73990D36EE98169C12C566 -193: A9ACEF6A6203186CB946133A9EE86F414937DC81B1E95EF4FFB8F6D6 -194: DCDD529CC2B0DDBAC1AA5C5581E39E129B73A3DDE04403358310544A -195: E8C8A1557D51C2B0F7E7ADFD65DB10B751E1C66400FA56C72E632EC3 -196: DDD60F8795A5C74AE07F4BDF7CF8C1EA7F617978F0D12EF2783E06AA -197: 7C13B11A3BA5A3C74BA9FDF6F10F14D1822A248E823BCE8248610433 -198: F9AC0A30F4394E8C8D07F10F03DEEFDDDDA27C1DF74B80300B1FCBCF -199: C2022C77451889454208B56284CC50CCB4126D0E44EBB3C8FE6D857A -200: 45455AC9539E497062D4D0023CB5591AF4ACED509E2465C2DA57B466 -201: 41983FDFA1EA3C3956940C1704827605AFCB16CA89EE83F4BEC0407F -202: 0B8BA25FF9E897D29F545A367453A35E86457E8C84FF4067AB3FB26A -203: 754AB63712BBE28A7BBE70E4C3071A09E13EE3D4EFF11E3EFADE3177 -204: 6026F011FB67B4C00CC20C4415AA0095E4DCED5B5BEA7EB3E3602144 -205: CBB7AAC645A32503574225E6707C28C99E35B88DE840117FFC0915EE -206: 954451525EE5B1B66B5FB3C5F087ECB9B194073804474F7CF01C4057 -207: 0357EB8AB9026850FEA61551A5487DB50245143312837BED6FE66C60 -208: 1D6CF1413CCEBC8E408888624854E7CB335EB97816E39E6BCDFEB35F -209: 6D1D954AC353DB3F79E163AC4B56776881AB10CC659A01BEFCA695CA -210: 7FDC69BDDF3C6E430EEFA3DE553BF51FD440EF85DDD34A2A49DCEC11 -211: 8703C4A16397D2E70E4E26FE49456F1EC0902AE2C02045980E8B8869 -212: 3289D50B0C47E66061711E63C249C87B364741B62DAD2320F551E13C -213: 56DB3E8CCB6000AF46A0C1219E5E56FD26A3BE542D05F2BA2901526E -214: E0B7236D6E547C20962D3E95E62006E536220CA828F96AF51D8BAE37 -215: CE3BF25BF54317D8F30D9937B14CF817A8EF6666F0C5DC88A08EEF2F -216: EB421F51CEB230081C16CD4E33DDC5472C6A0B35C623AC47734E203B -217: 7C696551EF2E84C27504678BFBF530CE978302E0B8CBF41404CAF902 -218: D96CF6D20FC6288923541976A80FAB2CBC634376A02B6A681C3E7F27 -219: A2C6217991958BB799751E34CCDBCF9E492D4623F9BFE0B791B9B0C8 -220: FC6B5B15F2AF1C3CD1B9C3C1D08DFD12E4B852217CDDE4E19DA54565 -221: 553B8F6031057F7D2B7854AC04E55D6201B15FC3540AC32B54434B11 -222: 67B0B63C5D6C16E86E19BCBDA02821B96890CBFD662B9AC796F58602 -223: CE68A9C14D4F6A0D4351FC3D1E46F323DB4EC7DCAE0E59D726246913 -224: FDB91DED054711B9DB1A93CF852650BAE3EB08B158B189D241903A5E -225: FBA7CFD46FD05633D8B5C0D9F5DA6D42A881E493054B032728FB6861 -226: A1E4C1644E91993B281A82515422B2449F364ED8E3AD3A54B37CD874 -227: CC9157FFC6FDC62AD86D826FDE2DC78BE93469B21AD7D1ECCD37B6D5 -228: 93A505763CA81F90D1D8C366D63DC9317DDE8EEE264F3700421820B8 -229: 46D41897B31707443AB817F55797FF8CB52ED791340244B3713C2D6F -230: E7928E3AFE6416915E697E356D885AA7A33D43D4766BA920405BEE75 -231: 967265670BFEEAF3B188FBD501A7AEDD79F8CE24B65538A56A6D053F -232: 7E549C75FBA3B16E0BA6C3BE6E3CAA9F5C45A78DDE6CC5E1EE90D853 -233: 9A795A0F33C4D7FCFA58249D36DF648DE3BEE61ACAA2131371B131A1 -234: 9BF0F8A0A2919F1A52B39672DFF3405FE59138051E67E0D7609C3FEE -235: 6ACAF1122C142526B46EAE5B859BE5D62CE7E54C6991EBE6EF0E0934 -236: F179211E88FB303D8A074019664F5009BFBD1DC86EE34F1582C1C72C -237: D335C48021FB0585DB327D67FB12554C65E4755B466476D3E10E10AE -238: DF08D65DD48136B07E0E7F5B6C39E1B10FE95212C3DF0CA10E00F53D -239: 5F3FD8A5A4EF847D833B2FAAA74A30FE51D22C68244298A25302B7ED -240: 181DBAE9308B111D4AE06A6229D6038C4AFFFB93A0EAFDA9CF1E83AA -241: 671D5CE9A1DBFFB15B4449CDE3DD91569F875D4BDF427E0B42DE0974 -242: 799583432083CEC377826EEA43B35F5CB5261D091F2BEC4B2EF2DA54 -243: 574DF003B08BDC906325FE2160907347104E664645BD4A9AA16FF74A -244: C8B29DDD1610D96D26F213FF883CEA12EBF19C943EB50BEB895A89F6 -245: 2C57878E2CF8C2FF0FD014392C843341D78FF741489D672285FBC5CF -246: 56B4B8AEFEA02BE5BBFD3D032C71BCFB8CE204B4CA89E22919E11B5E -247: DC5172956E9A8C86E4CC6F2B13D8BC600BCAFDC673842AEA711589D1 -248: 2B762DAD2B6591F4E60BECFC43214EF34D5D435A3DF85E091B30A47D -249: 1DF0613C3E109CD3716BE1D8D7C326FB4837AFAFCB36A6C8DCE14E70 -250: 543DA47D5E9462DEF4AF0118D4B69869E7ECB7AAA6F3E2039E1FE8E4 -251: 0872386B43F3AE3D652EA4575F7F91329413E6A67C16B419FF6E3CE0 -252: AA50752B4CD3D84C98E6883422C15D75AAA99EDE7DE3F81F754897AA -253: 367174DB2317D0E294D768BBCE69F60BBAEAEDAF755C5B2B03F76285 -254: 34ED7159891BBCEC9DF0D24C50F6209B8ED3E5380A34CE0C68C621CC -255: 9E31B671E498E8160BA558AAFACD05DEFD252B2C7D8BA8E9E618FBF1 -256: F8B6E6398B49C87678A1A3235C078D8DB93FF50271D6EA36647F7F00 +Hash: sha1 + 0: DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 + 1: 5BA93C9DB0CFF93F52B521D7420E43F6EDA2784F + 2: 3F29546453678B855931C174A97D6C0894B8F546 + 3: 0C7A623FD2BBC05B06423BE359E4021D36E721AD + 4: A02A05B025B928C039CF1AE7E8EE04E7C190C0DB + 5: 1CF251472D59F8FADEB3AB258E90999D8491BE19 + 6: 868460D98D09D8BBB93D7B6CDD15CC7FBEC676B9 + 7: 6DC86F11B8CDBE879BF8BA3832499C2F93C729BA + 8: 67423EBFA8454F19AC6F4686D6C0DC731A3DDD6B + 9: 63BF60C7105A07A2B125BBF89E61ABDABC6978C2 + 10: 494179714A6CD627239DFEDEDF2DE9EF994CAF03 + 11: 2C7E7C384F7829694282B1E3A6216DEF8082D055 + 12: CFF9611CB9AA422A16D9BEEE3A75319CE5395912 + 13: E51F9799C4A21BBA255CF473BAF95A89E1B86180 + 14: F741644BA6E1BCF5FEE6D3C1B6177B78468ECE99 + 15: FB1D9241F67827CE6DD7AC55F1E3C4E4F50CAA03 + 16: 56178B86A57FAC22899A9964185C2CC96E7DA589 + 17: 0A0315EC7B1E22A79FC862EDF79BDA2FC01669E3 + 18: 32AF8A619C2566222BB0BA0689DABCC480C381D5 + 19: D35B5AFBC48A696897C084E6E71AAE67C7CD9417 + 20: 602C63D2F3D13CA3206CDF204CDE24E7D8F4266C + 21: A3C6FBE5C13E8B41FADC204C0CF26F3F214189F4 + 22: 25E480E9E0CA2B610105CD1424B8A35F63FB3981 + 23: 45412D51D3CA7BCF452D1612720EE88F9D2427C3 + 24: ED6A95036E3E046931597A457DB7A78B7309C4C0 + 25: B4FE0256D346700783420E08A4A6F7992B1E36C9 + 26: 33E1799E98280E5A9ACE5509477A2048607C5537 + 27: CF193837F6DE43F8E38000ACFCF764FA8D8FDE22 + 28: 7C8DE247DDA83599AF2EC2EE2D29E20583DAC34B + 29: F38A076F70613FC251C4D21E6435AD08341A8A99 + 30: DCD68E6174BD74BA180DA047A7345E8D111F85FD + 31: 43BBACB5F62A0482CBDB564171B04365CA6E27C0 + 32: AE5BD8EFEA5322C4D9986D06680A781392F9A642 + 33: EB90BCE364635C4C23B49F493F0043579BC85C17 + 34: 2942C7AFA65444C43D0592D0DC73CA71DB729205 + 35: ABF726F5FDA729FB7F3F0484D7C94B3107AA02AE + 36: 75DB4F6BCC05A781DDA9D17C46717286DD53654B + 37: A82CB42D89DAF5FBC1D4A48476229C495782F98D + 38: FC1A69683744AF823CD69E8A1E3F460591714028 + 39: DC68DB44B48521B0700A864896A00E17777AEA83 + 40: CC9AD99E917042381B0F99588896CBF236AA8ED3 + 41: EC7A68484A749C7065C6B746F9C465DCB414F370 + 42: C627C449DEFF14AE7ED807293D30846F061DA5B8 + 43: 4782F2A19B6DBB0882D656DE86C3D21A7317F768 + 44: 02D4EED99E7307BEA39AF5330BF7FB388D48B496 + 45: B3D99B9D90A69E50FD4365704F5AB2EAB7BC9763 + 46: 9B1C07176BB227F73E8A4E173071D39302061DE2 + 47: D79097DDAC552A6E02A52CE7AAF494D2D73B2557 + 48: DF7F23B160E75B9BAE5EA1E62B43A5A34A260127 + 49: F598F3780D8C374D97957B9B62D56106E9E0B2D2 + 50: 0BD98598F9AB29C1359EF5460A206DD1370515E3 + 51: E6C320834F69D81689E1ECD5ABC808D49D9C4E07 + 52: FD5EE7588CD129E12B886974621FD29FACC78E19 + 53: 2A9C28EF61EB536D3BBDA64AD95A132554BE3D6B + 54: CFAE6D86A767B9C700B5081A54265FB2FE0F6FD9 + 55: 8AE2D46729CFE68FF927AF5EEC9C7D1B66D65AC2 + 56: 636E2EC698DAC903498E648BD2F3AF641D3C88CB + 57: 7CB1330F35244B57437539253304EA78A6B7C443 + 58: 2E780486F64BC91FBFA2785EC1CA5C9E3CC07939 + 59: 4A7713D44E97D9F09AE1D786199C58AE2BFAF3EB + 60: C98714B16F92C8A770E9FC229DF834D1688E282F + 61: AACE3DD6F54A2A255ABA920F5FFC8CF04B85A69A + 62: CF8563896A3B0A0775985D8289444C4BBC478DA7 + 63: 6D942DA0C4392B123528F2905C713A3CE28364BD + 64: C6138D514FFA2135BFCE0ED0B8FAC65669917EC7 + 65: 69BD728AD6E13CD76FF19751FDE427B00E395746 + 66: CE705B7C60D46E7E36FE073DB8822698579CA410 + 67: C717EBBF6A2BF1BB33DA6257352D5085BEE218B3 + 68: 86151D140AAFC9A4B5877D3FBB49014FE5906E57 + 69: 7446B5A6BBCC58BC9662451A0A747D7D031F9A7D + 70: C24887924F92ADAC5AE367995D12691C662B7362 + 71: 5AF83CFD42D61967778889CA911CFB6C14339BA7 + 72: 587D4F6E6B4E21343423E434679009CBD3D24DCF + 73: AC65DD946C5CC432D4D624CAEB53C7363F96B7AF + 74: FA71E70750674C0F6B4AA19D0BE717B2936C83FD + 75: C9EFE6DD0A019315F73F3962DE38B6C848A1705B + 76: D1D05649B952C8F6EB016BE08FE1544AAC5D5925 + 77: CC3081AC1D695BAE51CFD5B44B9FB3A230733CC3 + 78: EB9DE332558953792687D9A7F598B5D84BF0A46B + 79: 39DE5EFDC92E3D3678F24D2CF545BA4D172D003D + 80: 399DBC9F721E44A992A0DEF42D999B32AF449ADC + 81: 996A2817C8ACBC667E1C4C27B8F4E9952736DD7A + 82: 3EF8189CE1BCC0D65AA182B1A81534635EDFDF2B + 83: D676714C6A6FF4E17A60C0511C25AA8B164FA606 + 84: 4DB6E3381E1B9290267C1539E1053793C8B81FA1 + 85: 3A34D35B0296FE4D83EDA39B742A9D8F4B13A958 + 86: 54F3B45304EF1287F54B877FCCE3285E154F9D6C + 87: B1EA96216E025377AB5AA845238FC8BC65DD60E1 + 88: BC6C7488145485DEDE1AE1D43B594F0046BCDA0F + 89: 3D9A0619ECF88C84CE86213E9AA91D9A252CBC32 + 90: 92CCAA0B4CE89E2BD80A61B9BAFD5AC58AB7B588 + 91: 3EB326B5BF4440FB3A88E3DCB05C1DB5EA01AC5C + 92: 989C63E819B13D4CADFB33F8DEAFBC57C1992A12 + 93: AE944552C20CF16F07A5C357713832C9D72D0C6B + 94: 46723E982569A1E2D9EDCED5498FC1F46F7D63FC + 95: 3BC5DAE7907C83A0693F87FD8372EFDD1DF53E09 + 96: 96D281BA44EB21ECFB1663C8AC5752C48686A927 + 97: FA0EF18178880A72B51C26555C10F5210DAB4390 + 98: 0C7ECAC32B8ED6D9835D381BF069568722A276E1 + 99: 649E44ECBA85C0938EC09229CEE4BB69388EC642 +100: 1E6634BFAEBC0348298105923D0F26E47AA33FF5 +101: AF2AF2734BB2BAA288940CB62109F4849DAA347F +102: 22D14BC045CC9A3794C99BEEE7ABE278BF24D6D8 +103: C3164CCBED75B82ED3F59F4A47FE09B256025549 +104: C27B5BC7CD24DE4913614A769A442E9CC9FB0E08 +105: F44D48D98CAC77522FF6B9E1B9CBB8489E58E588 +106: EA19A71FFBEC9572F6CD65523ACAF865EC05AB52 +107: CDA0EB9D310247BD1E8B3EA10D9B9DEFF6FBABA9 +108: 449DFCE971B9D65D69FBC72940E9A885E8DDE9CE +109: 96EEBB6B95A9DA99C58190CBD77CD6FBCF638A79 +110: 670F7A869E90CE86E0A18232A9D4B1F97C1C77D0 +111: BC544E24573D592290FDAFF8ECF3F7F2B00CD483 +112: E4CE142D09A84A8645338DD6535CBFAAF800D320 +113: 1C26461E26EB697CCC36A98714EE70CAAA87A84E +114: 51C5B1C25A71FF00394A84AB48B5733C8955551E +115: 84803504181C0AE33A511C49AF5015A5B1892BFD +116: 7CC8BCA120C2635ABFEA82DD203112B5C7E165DA +117: 44E2519A529D7261F1BEBEDC8ED95E1182CAE0DC +118: 2A81372DA39C1DF4251539A9922717B7CF5F0334 +119: 41C89D06001BAB4AB78736B44EFE7CE18CE6AE08 +120: D3DBD653BD8597B7475321B60A36891278E6A04A +121: 3723F8AB857804F89F80970E9FC88CF8F890ADC2 +122: D031C9FB7AF0A461241E539E10DB62ED28F7033B +123: E0B550438E794B65D89B9EE5C8F836AE737DECF0 +124: FB3998281C31D1A8EEA2EA737AFFD0B4D6AB6AC2 +125: 7A914D8B86A534581AA71EC61912BA3F5B478698 +126: A271F71547442DEA7B2EDF65CD5FBD5C751710AA +127: 89D7312A903F65CD2B3E34A975E55DBEA9033353 +128: E6434BC401F98603D7EDA504790C98C67385D535 Hash: sha224 0: D14A028C2A3A2BC9476102BB288234C415A2B01F828EA62AC5B3E42F @@ -2579,6 +692,137 @@ Hash: sha224 127: 554C9C3F7E92B80F4121E00CC147535D377EAEB4FB1FA8E25C7F81C1 128: 67D88DA33FD632D8742424791DFACE672FF59D597FE38B3F2A998386 +Hash: sha256 + 0: E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855 + 1: 6E340B9CFFB37A989CA544E6BB780A2C78901D3FB33738768511A30617AFA01D + 2: B413F47D13EE2FE6C845B2EE141AF81DE858DF4EC549A58B7970BB96645BC8D2 + 3: AE4B3280E56E2FAF83F414A6E3DABE9D5FBE18976544C05FED121ACCB85B53FC + 4: 054EDEC1D0211F624FED0CBCA9D4F9400B0E491C43742AF2C5B0ABEBF0C990D8 + 5: 08BB5E5D6EAAC1049EDE0893D30ED022B1A4D9B5B48DB414871F51C9CB35283D + 6: 17E88DB187AFD62C16E5DEBF3E6527CD006BC012BC90B51A810CD80C2D511F43 + 7: 57355AC3303C148F11AEF7CB179456B9232CDE33A818DFDA2C2FCB9325749A6B + 8: 8A851FF82EE7048AD09EC3847F1DDF44944104D2CBD17EF4E3DB22C6785A0D45 + 9: F8348E0B1DF00833CBBBD08F07ABDECC10C0EFB78829D7828C62A7F36D0CC549 + 10: 1F825AA2F0020EF7CF91DFA30DA4668D791C5D4824FC8E41354B89EC05795AB3 + 11: 78A6273103D17C39A0B6126E226CEC70E33337F4BC6A38067401B54A33E78EAD + 12: FFF3A9BCDD37363D703C1C4F9512533686157868F0D4F16A0F02D0F1DA24F9A2 + 13: 86EBA947D50C2C01570FE1BB5CA552958DABBDBB59B0657F0F26E21FF011E5C7 + 14: AB107F1BD632D3C3F5C724A99D024F7FAA033F33C07696384B604BFE78AC352D + 15: 7071FC3188FDE7E7E500D4768F1784BEDE1A22E991648DCAB9DC3219ACFF1D4C + 16: BE45CB2605BF36BEBDE684841A28F0FD43C69850A3DCE5FEDBA69928EE3A8991 + 17: 3E5718FEA51A8F3F5BACA61C77AFAB473C1810F8B9DB330273B4011CE92C787E + 18: 7A096CC12702BCFA647EE070D4F3BA4C2D1D715B484B55B825D0EDBA6545803B + 19: 5F9A753613D87B8A17302373C4AEE56FAA310D3B24B6AE1862D673AA22E1790F + 20: E7AEBF577F60412F0312D442C70A1FA6148C090BF5BAB404CAEC29482AE779E8 + 21: 75AEE9DCC9FBE7DDC9394F5BC5D38D9F5AD361F0520F7CEAB59616E38F5950B5 + 22: 22CB4DF00CDDD6067AD5CFA2BBA9857F21A06843E1A6E39AD1A68CB9A45AB8B7 + 23: F6A954A68555187D88CD9A026940D15AB2A7E24C7517D21CEEB028E93C96F318 + 24: 1D64ADD2A6388367C9BC2D1F1B384B069A6EF382CDAAA89771DD103E28613A25 + 25: B729CE724D9A48D3884DBFCBEE1D3793D922B29FA9D639E7290AF4978263772B + 26: B858DA80D8A57DC546905FD147612EBDDD3C9188620405D058F9EE5AB1E6BC52 + 27: D78750726155A89C9131D0ECF2704B973B8710865BF9E831845DE4F2DCBC19DA + 28: DC27F8E8EE2D08A2BCCBB2DBD6C8E07FFBA194101FC3458C34DED55F72C0971A + 29: D09BEA65DFF48928A14B79741DE3274B646F55AC898B71A66FA3EAE2D9FACD77 + 30: F2192584B67DA35DFC26F743E5F53BB0376046F899DC6DABD5E7B541AE86C32F + 31: 4F23C2CA8C5C962E50CD31E221BFB6D0ADCA19111DCA8E0C62598FF146DD19C4 + 32: 630DCD2966C4336691125448BBB25B4FF412A49C732DB2C8ABC1B8581BD710DD + 33: 5D8FCFEFA9AEEB711FB8ED1E4B7D5C8A9BAFA46E8E76E68AA18ADCE5A10DF6AB + 34: 14CDBF171499F86BD18B262243D669067EFBDBB5431A48289CF02F2B5448B3D4 + 35: F12DD12340CB84E4D0D9958D62BE7C59BB8F7243A7420FD043177AC542A26AAA + 36: 5D7E2D9B1DCBC85E7C890036A2CF2F9FE7B66554F2DF08CEC6AA9C0A25C99C21 + 37: F4D285F47A1E4959A445EA6528E5DF3EFAB041FA15AAD94DB1E2600B3F395518 + 38: A2FD0E15D72C9D18F383E40016F9DDC706673C54252084285AAA47A812552577 + 39: 4ABA23AEA5E2A91B7807CF3026CDD10A1C38533CE55332683D4CCB88456E0703 + 40: 5FAA4EEC3611556812C2D74B437C8C49ADD3F910F10063D801441F7D75CD5E3B + 41: 753629A6117F5A25D338DFF10F4DD3D07E63EECC2EAF8EABE773F6399706FE67 + 42: 40A1ED73B46030C8D7E88682078C5AB1AE5A2E524E066E8C8743C484DE0E21E5 + 43: C033843682818C475E187D260D5E2EDF0469862DFA3BB0C116F6816A29EDBF60 + 44: 17619EC4250EF65F083E2314EF30AF796B6F1198D0FDDFBB0F272930BF9BB991 + 45: A8E960C769A9508D098451E3D74DD5A2AC6C861EB0341AE94E9FC273597278C9 + 46: 8EBFEB2E3A159E9F39AD7CC040E6678DADE70D4F59A67D529FA76AF301AB2946 + 47: EF8A7781A95C32FA02EBF511EDA3DC6E273BE59CB0F9E20A4F84D54F41427791 + 48: 4DBDC2B2B62CB00749785BC84202236DBC3777D74660611B8E58812F0CFDE6C3 + 49: 7509FE148E2C426ED16C990F22FE8116905C82C561756E723F63223ACE0E147E + 50: A622E13829E488422EE72A5FC92CB11D25C3D0F185A1384B8138DF5074C983BF + 51: 3309847CEE454B4F99DCFE8FDC5511A7BA168CE0B6E5684EF73F9030D009B8B5 + 52: C4C6540A15FC140A784056FE6D9E13566FB614ECB2D9AC0331E264C386442ACD + 53: 90962CC12AE9CDAE32D7C33C4B93194B11FAC835942EE41B98770C6141C66795 + 54: 675F28ACC0B90A72D1C3A570FE83AC565555DB358CF01826DC8EEFB2BF7CA0F3 + 55: 463EB28E72F82E0A96C0A4CC53690C571281131F672AA229E0D45AE59B598B59 + 56: DA2AE4D6B36748F2A318F23E7AB1DFDF45ACDC9D049BD80E59DE82A60895F562 + 57: 2FE741AF801CC238602AC0EC6A7B0C3A8A87C7FC7D7F02A3FE03D1C12EAC4D8F + 58: E03B18640C635B338A92B82CCE4FF072F9F1ABA9AC5261EE1340F592F35C0499 + 59: BD2DE8F5DD15C73F68DFD26A614080C2E323B2B51B1B5ED9D7933E535D223BDA + 60: 0DDDE28E40838EF6F9853E887F597D6ADB5F40EB35D5763C52E1E64D8BA3BFFF + 61: 4B5C2783C91CECCB7C839213BCBB6A902D7FE8C2EC866877A51F433EA17F3E85 + 62: C89DA82CBCD76DDF220E4E9091019B9866FFDA72BEE30DE1EFFE6C99701A2221 + 63: 29AF2686FD53374A36B0846694CC342177E428D1647515F078784D69CDB9E488 + 64: FDEAB9ACF3710362BD2658CDC9A29E8F9C757FCF9811603A8C447CD1D9151108 + 65: 4BFD2C8B6F1EEC7A2AFEB48B934EE4B2694182027E6D0FC075074F2FABB31781 + 66: B6DFD259F6E0D07DEB658A88148F8253F9BBBB74DDD6DB3EDBE159A56BC35073 + 67: 8FA5913B62847D42BB4B464E00A72C612D2AB0DF2AF0B9A96AF8D323FA509077 + 68: 7DED979C0153EBB9EF28A15A314D0B27B41C4F8EED700B54974B48EB3ECAF91C + 69: 1CF3AA651DCF35DBFE296E770AD7EBC4E00BCCCD0224DB296183DC952D0008C9 + 70: 5767D69A906D4860DB9079EB7E90AB4A543E5CB032FCE846554AEF6CEB600E1D + 71: 8189E3D54767D51E8D1942659A9E2905F9EC3AE72860C16A66E75B8CC9BD2087 + 72: 107DE2BC788E11029F7851F8E1B0B5AFB4E34379C709FC840689EBD3D1F51B5B + 73: 169F6F093A9BE82FEBE1A6A4471425697EC25D5040B472C5B1822AEEA2625988 + 74: 2087EBD358AE3EA2A092FC19C2DFEE57C5F0860296BC7B057C14E1227C5CB9D1 + 75: 182AB56F7739E43CEE0B9BA1E92C4B2A81B088705516A5243910159744F21BE9 + 76: 081F6C68899A48A1BE455A55416104921D2FE4BDAE696F4B72F9D9626A47915E + 77: 5CE02376CC256861B78F87E34783814BA1AEC6D09AB500D579ED8EE95C8AFCC8 + 78: B93E407404E3E95F20FD647365E0E7F46AFABE9AF1FF083AF996135E00D54009 + 79: E81FA832B37BE8ED8F79DA29987AA4D61310DCB14B2859DEDF8FB1DAA2541FD3 + 80: C56705FEA5B110B8DC63688533CED21167E628017387C885423B835A55EDD5EF + 81: C2226285D08A245A17058ED2D24AD095B714F608AE364FDDF119E0A7DF890540 + 82: F9C270DA8793221A6809AC685FDD4F5387E0FE1EE6AAF01C74F1E0A719621614 + 83: E69BEFD6EF7F685C36E343AC1702D87AD6A0E4AC8C0D5C521D04AAD4EF0B7458 + 84: 4E3033562AD74A7D43EB5FF5FC2382622C6307CB10E245AD62DA77C4C63CB178 + 85: 2EA17629472564A59E5EB845A2CDD04F442DF2FF26BCC866E400F77158D612A1 + 86: B90223DF74DD49A8A1461F340F2D7A90F96903CCBB5BC3C74EA3658FC8948B20 + 87: E0209F42B927EC9C0F6D6A76007ED540E9BDD6E427B3368A1EA6C5E7565972DD + 88: 10D9BD424114319C0999ADF6288F74060CD8918EF1228827A6269B2BF0F0880C + 89: 7D1978A65AC94DBBCDC62E3D81850299FE157DD9B7BD9E01B170156210D2815A + 90: E052DFF9E1C94AAA49556F86FAD55029A4875839FDA57F5005F4C4403876B256 + 91: 58D29459B2130A2E151252D408B95E6DAC424C564062EB911CC76440CB926CA0 + 92: 4E4530C392316F598E1BD07F32166380A8F712A33A48E9EB4247131EC5DC05D3 + 93: A09C9D3E42342C7DEA44EDB4AEB48CF6727CACD8032A12CF77A25829FC249D32 + 94: EB978D0F1AC03CE5C3510B5F4A16073A7A2BDC15C4AB7777DCF01030CC316667 + 95: 7D1905A3ACE827EA1AC51C4FA08C281ED3BE87E7F4E928D696BFDE35C8F2DC0F + 96: 08359B108FA567F5DCF319FA3434DA6ABBC1D595F426372666447F09CC5A87DC + 97: A7B3830FFAB0F2BBABBEF6DF0B169A7917008BF238880BBF8C20B8E000077312 + 98: B4F5D9B1555994C5EBAEBD82918D560A3BF82962A171A1614E7551939E943366 + 99: 014ECAEA1B378900F1212898C6DDB01565D81AF1D0EF78DF5E28D46E9CAF7CFC +100: BCE0AFF19CF5AA6A7469A30D61D04E4376E4BBF6381052EE9E7F33925C954D52 +101: 4565D7B898CCEA3139AD260F9273115F806B30079D7683218C4E3ECD43AF3B33 +102: DDADEB660FE8902C9FB2DB9B6CF237C9CE5B31753398085C4367EB5910B9CC13 +103: C15A8928131F6687DD10F3C115DDF8D7C8F2DF7E18D12C08C4FD16F666CE60BA +104: AE8E3D799B1353A39815F90ECEEBEFA265CC448FE39FAF2008CB20784CB2DF9F +105: 98545371A3D9981ABE5AB4A32A1D7B2FADD9801D89DA52A94A4F78A42740D21C +106: 6323DCE2F8B3A04DCEA8D205602348C40403CB200C677EB1A1C0FE37EDB6EB2F +107: 8150F7C5DA910D709FF02DDF85DD293C6A2672633DE8CDA30F2E0AA58B14B0C4 +108: 44D21DB70716BD7644CB0D819FA6791805EBC526EA32996A60E41DC753FCFAFC +109: B9B7C375CCA45DB19466EBD0FE7C9E147948CC42C1C90F0579728CFB2651956D +110: A47A551B01E55AAAA015531A4FA26A666F1EBD4BA4573898DE712B8B5E0CA7E9 +111: 60780E9451BDC43CF4530FFC95CBB0C4EB24DAE2C39F55F334D679E076C08065 +112: 09373F127D34E61DBBAA8BC4499C87074F2DDB10E1B465F506D7D70A15011979 +113: 13AAA9B5FB739CDB0E2AF99D9AC0A409390ADC4D1CB9B41F1EF94F8552060E92 +114: 5B0A32F1219524F5D72B00BA1A1B1C09A05FF10C83BB7A86042E42988F2AFC06 +115: 32796A0A246EA67EB785EDA2E045192B9D6E40B9FE2047B21EF0CEE929039651 +116: DA9AB8930992A9F65ECCEC4C310882CAB428A708E6C899181046A8C73AF00855 +117: 9C94557382C966753C8CAB0957EAEDBE1D737B5FCB35C56C220DDD36F8A2D351 +118: D32AB00929CB935B79D44E74C5A745DB460FF794DEA3B79BE40C1CC5CF5388EF +119: DA18797ED7C3A777F0847F429724A2D8CD5138E6ED2895C3FA1A6D39D18F7EC6 +120: F52B23DB1FBB6DED89EF42A23CE0C8922C45F25C50B568A93BF1C075420BBB7C +121: 335A461692B30BBA1D647CC71604E88E676C90E4C22455D0B8C83F4BD7C8AC9B +122: 3D08C4D7BDDA7EC922B0741DF357DE46E7BD102F9AB7A5C67624AB58DA6D9D75 +123: CC63BE92E3A900CD067DA89473B61B40579B54EF54F8305C2FFCC893743792E9 +124: 865447FC4FAE01471F2FC973BFB448DE00217521EF02E3214D5177EA89C3EF31 +125: 3DAA582F9563601E290F3CD6D304BFF7E25A9EE42A34FFBAC5CF2BF40134E0D4 +126: 5DDA7CB7C2282A55676F8AD5C448092F4A9EBD65338B07ED224FCD7B6C73F5EF +127: 92CA0FA6651EE2F97B884B7246A562FA71250FEDEFE5EBF270D31C546BFEA976 +128: 471FB943AA23C511F6F72F8D1652D9C880CFA392AD80503120547703E56A2BE5 + Hash: sha384 0: 38B060A751AC96384CD9327EB1B1E36A21FDB71114BE07434C0CC7BF63F6E1DA274EDEBFE76F65FBD51AD2F14898B95B 1: BEC021B4F368E3069134E012C2B4307083D3A9BDD206E24E5F0D86E13D6636655933EC2B413465966817A9C208A11717 @@ -2838,2882 +1082,264 @@ Hash: sha384 255: 98D7AC796C4CFB5D98A1C323656A4BE8AFAAAD168E5EE72B6B7A3FA3260461A043E27243120D41584B58F1AE4463121A 256: FFDAEBFF65ED05CF400F0221C4CCFB4B2104FB6A51F87E40BE6C4309386BFDEC2892E9179B34632331A59592737DB5C5 -Hash: sha1 - 0: DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 - 1: 5BA93C9DB0CFF93F52B521D7420E43F6EDA2784F - 2: 3F29546453678B855931C174A97D6C0894B8F546 - 3: 0C7A623FD2BBC05B06423BE359E4021D36E721AD - 4: A02A05B025B928C039CF1AE7E8EE04E7C190C0DB - 5: 1CF251472D59F8FADEB3AB258E90999D8491BE19 - 6: 868460D98D09D8BBB93D7B6CDD15CC7FBEC676B9 - 7: 6DC86F11B8CDBE879BF8BA3832499C2F93C729BA - 8: 67423EBFA8454F19AC6F4686D6C0DC731A3DDD6B - 9: 63BF60C7105A07A2B125BBF89E61ABDABC6978C2 - 10: 494179714A6CD627239DFEDEDF2DE9EF994CAF03 - 11: 2C7E7C384F7829694282B1E3A6216DEF8082D055 - 12: CFF9611CB9AA422A16D9BEEE3A75319CE5395912 - 13: E51F9799C4A21BBA255CF473BAF95A89E1B86180 - 14: F741644BA6E1BCF5FEE6D3C1B6177B78468ECE99 - 15: FB1D9241F67827CE6DD7AC55F1E3C4E4F50CAA03 - 16: 56178B86A57FAC22899A9964185C2CC96E7DA589 - 17: 0A0315EC7B1E22A79FC862EDF79BDA2FC01669E3 - 18: 32AF8A619C2566222BB0BA0689DABCC480C381D5 - 19: D35B5AFBC48A696897C084E6E71AAE67C7CD9417 - 20: 602C63D2F3D13CA3206CDF204CDE24E7D8F4266C - 21: A3C6FBE5C13E8B41FADC204C0CF26F3F214189F4 - 22: 25E480E9E0CA2B610105CD1424B8A35F63FB3981 - 23: 45412D51D3CA7BCF452D1612720EE88F9D2427C3 - 24: ED6A95036E3E046931597A457DB7A78B7309C4C0 - 25: B4FE0256D346700783420E08A4A6F7992B1E36C9 - 26: 33E1799E98280E5A9ACE5509477A2048607C5537 - 27: CF193837F6DE43F8E38000ACFCF764FA8D8FDE22 - 28: 7C8DE247DDA83599AF2EC2EE2D29E20583DAC34B - 29: F38A076F70613FC251C4D21E6435AD08341A8A99 - 30: DCD68E6174BD74BA180DA047A7345E8D111F85FD - 31: 43BBACB5F62A0482CBDB564171B04365CA6E27C0 - 32: AE5BD8EFEA5322C4D9986D06680A781392F9A642 - 33: EB90BCE364635C4C23B49F493F0043579BC85C17 - 34: 2942C7AFA65444C43D0592D0DC73CA71DB729205 - 35: ABF726F5FDA729FB7F3F0484D7C94B3107AA02AE - 36: 75DB4F6BCC05A781DDA9D17C46717286DD53654B - 37: A82CB42D89DAF5FBC1D4A48476229C495782F98D - 38: FC1A69683744AF823CD69E8A1E3F460591714028 - 39: DC68DB44B48521B0700A864896A00E17777AEA83 - 40: CC9AD99E917042381B0F99588896CBF236AA8ED3 - 41: EC7A68484A749C7065C6B746F9C465DCB414F370 - 42: C627C449DEFF14AE7ED807293D30846F061DA5B8 - 43: 4782F2A19B6DBB0882D656DE86C3D21A7317F768 - 44: 02D4EED99E7307BEA39AF5330BF7FB388D48B496 - 45: B3D99B9D90A69E50FD4365704F5AB2EAB7BC9763 - 46: 9B1C07176BB227F73E8A4E173071D39302061DE2 - 47: D79097DDAC552A6E02A52CE7AAF494D2D73B2557 - 48: DF7F23B160E75B9BAE5EA1E62B43A5A34A260127 - 49: F598F3780D8C374D97957B9B62D56106E9E0B2D2 - 50: 0BD98598F9AB29C1359EF5460A206DD1370515E3 - 51: E6C320834F69D81689E1ECD5ABC808D49D9C4E07 - 52: FD5EE7588CD129E12B886974621FD29FACC78E19 - 53: 2A9C28EF61EB536D3BBDA64AD95A132554BE3D6B - 54: CFAE6D86A767B9C700B5081A54265FB2FE0F6FD9 - 55: 8AE2D46729CFE68FF927AF5EEC9C7D1B66D65AC2 - 56: 636E2EC698DAC903498E648BD2F3AF641D3C88CB - 57: 7CB1330F35244B57437539253304EA78A6B7C443 - 58: 2E780486F64BC91FBFA2785EC1CA5C9E3CC07939 - 59: 4A7713D44E97D9F09AE1D786199C58AE2BFAF3EB - 60: C98714B16F92C8A770E9FC229DF834D1688E282F - 61: AACE3DD6F54A2A255ABA920F5FFC8CF04B85A69A - 62: CF8563896A3B0A0775985D8289444C4BBC478DA7 - 63: 6D942DA0C4392B123528F2905C713A3CE28364BD - 64: C6138D514FFA2135BFCE0ED0B8FAC65669917EC7 - 65: 69BD728AD6E13CD76FF19751FDE427B00E395746 - 66: CE705B7C60D46E7E36FE073DB8822698579CA410 - 67: C717EBBF6A2BF1BB33DA6257352D5085BEE218B3 - 68: 86151D140AAFC9A4B5877D3FBB49014FE5906E57 - 69: 7446B5A6BBCC58BC9662451A0A747D7D031F9A7D - 70: C24887924F92ADAC5AE367995D12691C662B7362 - 71: 5AF83CFD42D61967778889CA911CFB6C14339BA7 - 72: 587D4F6E6B4E21343423E434679009CBD3D24DCF - 73: AC65DD946C5CC432D4D624CAEB53C7363F96B7AF - 74: FA71E70750674C0F6B4AA19D0BE717B2936C83FD - 75: C9EFE6DD0A019315F73F3962DE38B6C848A1705B - 76: D1D05649B952C8F6EB016BE08FE1544AAC5D5925 - 77: CC3081AC1D695BAE51CFD5B44B9FB3A230733CC3 - 78: EB9DE332558953792687D9A7F598B5D84BF0A46B - 79: 39DE5EFDC92E3D3678F24D2CF545BA4D172D003D - 80: 399DBC9F721E44A992A0DEF42D999B32AF449ADC - 81: 996A2817C8ACBC667E1C4C27B8F4E9952736DD7A - 82: 3EF8189CE1BCC0D65AA182B1A81534635EDFDF2B - 83: D676714C6A6FF4E17A60C0511C25AA8B164FA606 - 84: 4DB6E3381E1B9290267C1539E1053793C8B81FA1 - 85: 3A34D35B0296FE4D83EDA39B742A9D8F4B13A958 - 86: 54F3B45304EF1287F54B877FCCE3285E154F9D6C - 87: B1EA96216E025377AB5AA845238FC8BC65DD60E1 - 88: BC6C7488145485DEDE1AE1D43B594F0046BCDA0F - 89: 3D9A0619ECF88C84CE86213E9AA91D9A252CBC32 - 90: 92CCAA0B4CE89E2BD80A61B9BAFD5AC58AB7B588 - 91: 3EB326B5BF4440FB3A88E3DCB05C1DB5EA01AC5C - 92: 989C63E819B13D4CADFB33F8DEAFBC57C1992A12 - 93: AE944552C20CF16F07A5C357713832C9D72D0C6B - 94: 46723E982569A1E2D9EDCED5498FC1F46F7D63FC - 95: 3BC5DAE7907C83A0693F87FD8372EFDD1DF53E09 - 96: 96D281BA44EB21ECFB1663C8AC5752C48686A927 - 97: FA0EF18178880A72B51C26555C10F5210DAB4390 - 98: 0C7ECAC32B8ED6D9835D381BF069568722A276E1 - 99: 649E44ECBA85C0938EC09229CEE4BB69388EC642 -100: 1E6634BFAEBC0348298105923D0F26E47AA33FF5 -101: AF2AF2734BB2BAA288940CB62109F4849DAA347F -102: 22D14BC045CC9A3794C99BEEE7ABE278BF24D6D8 -103: C3164CCBED75B82ED3F59F4A47FE09B256025549 -104: C27B5BC7CD24DE4913614A769A442E9CC9FB0E08 -105: F44D48D98CAC77522FF6B9E1B9CBB8489E58E588 -106: EA19A71FFBEC9572F6CD65523ACAF865EC05AB52 -107: CDA0EB9D310247BD1E8B3EA10D9B9DEFF6FBABA9 -108: 449DFCE971B9D65D69FBC72940E9A885E8DDE9CE -109: 96EEBB6B95A9DA99C58190CBD77CD6FBCF638A79 -110: 670F7A869E90CE86E0A18232A9D4B1F97C1C77D0 -111: BC544E24573D592290FDAFF8ECF3F7F2B00CD483 -112: E4CE142D09A84A8645338DD6535CBFAAF800D320 -113: 1C26461E26EB697CCC36A98714EE70CAAA87A84E -114: 51C5B1C25A71FF00394A84AB48B5733C8955551E -115: 84803504181C0AE33A511C49AF5015A5B1892BFD -116: 7CC8BCA120C2635ABFEA82DD203112B5C7E165DA -117: 44E2519A529D7261F1BEBEDC8ED95E1182CAE0DC -118: 2A81372DA39C1DF4251539A9922717B7CF5F0334 -119: 41C89D06001BAB4AB78736B44EFE7CE18CE6AE08 -120: D3DBD653BD8597B7475321B60A36891278E6A04A -121: 3723F8AB857804F89F80970E9FC88CF8F890ADC2 -122: D031C9FB7AF0A461241E539E10DB62ED28F7033B -123: E0B550438E794B65D89B9EE5C8F836AE737DECF0 -124: FB3998281C31D1A8EEA2EA737AFFD0B4D6AB6AC2 -125: 7A914D8B86A534581AA71EC61912BA3F5B478698 -126: A271F71547442DEA7B2EDF65CD5FBD5C751710AA -127: 89D7312A903F65CD2B3E34A975E55DBEA9033353 -128: E6434BC401F98603D7EDA504790C98C67385D535 - -Hash: md5 - 0: D41D8CD98F00B204E9800998ECF8427E - 1: 93B885ADFE0DA089CDF634904FD59F71 - 2: 441077CC9E57554DD476BDFB8B8B8102 - 3: B95F67F61EBB03619622D798F45FC2D3 - 4: 37B59AFD592725F9305E484A5D7F5168 - 5: D05374DC381D9B52806446A71C8E79B1 - 6: D15AE53931880FD7B724DD7888B4B4ED - 7: 9AA461E1ECA4086F9230AA49C90B0C61 - 8: 3677509751CCF61539174D2B9635A7BF - 9: A6E7D3B46FDFAF0BDE2A1F832A00D2DE - 10: C56BD5480F6E5413CB62A0AD9666613A - 11: 5B86FA8AD8F4357EA417214182177BE8 - 12: 50A73D7013E9803E3B20888F8FCAFB15 - 13: B20D4797E23EEA3EA5778970D2E226F3 - 14: AA541E601B7B9DDD0504D19866350D4E - 15: 58B7CE493AC99C66058538DACB1E3C94 - 16: 1AC1EF01E96CAF1BE0D329331A4FC2A8 - 17: 1BDD36B0A024C90DB383512607293692 - 18: 633AB81AEA5942052B794524E1A28477 - 19: 2D325313EB5DF436C078435FA0F5EFF1 - 20: 1549D1AAE20214E065AB4B76AAAC89A8 - 21: 7E437C81824D3982E70C88B5DA8EA94B - 22: 2F5F7E7216832AE19C353023618A35A8 - 23: 6535E52506C27EAA1033891FF4F3A74E - 24: 8BD9C8EFBBAC58748951CA5A45CFD386 - 25: D983C63BF41853056787FE1BB764DBFF - 26: B4F24C1219FB00D081C4020C56263451 - 27: B0AE6708C5E1BE10668F57D3916CF423 - 28: BA7BB5AD4DBA5BDE028703007969CB25 - 29: EA880E16EAC1B1488AFF8A25D11D6271 - 30: C7172F0903C4919EB232F18AB7A30C42 - 31: E9E77893BA926E732F483282F416FFAC - 32: B4FFCB23737CEC315A4A4D1AA2A620CE - 33: 5506A276A0A9ACC3093F9169C73CF8C5 - 34: E5A849897D9CC0B25B286C1F0BFB50E3 - 35: F54FA30EA7B26D3E11C54D3C8451BCF0 - 36: 07602FE0229E486957081A49E3F06F83 - 37: 7C4BBA98253CA834BF9ED43FD8B2F959 - 38: CF8DF427548BBFDB1E11143FDF008B85 - 39: 1431A6895A8F435755395F9BA83E76BF - 40: 30DD5E4CAE35BA892CC66D7736723980 - 41: 8EE247A1063931BEDAF4C2FA3E4E261A - 42: C32CEEE2D2245DF8589F94FCDA0C9F2C - 43: F25FA0E071D1F1CDC6632C6B673BCCD5 - 44: 370491B643E97577F4F74BD88576D1EC - 45: B292BF16E3AAFAF41F19C921068214F8 - 46: 52921AAE5CCC9B6E8E45853419D0C80F - 47: F1375BE31969155EF76F04741CD861D7 - 48: 04605CA542B2D82B9886A4B4B9ACFB1C - 49: FA887BA0FA491FAAACBB82BC5FEFCD5B - 50: 06470E932AD7C7CEDF548B5CCB9D4806 - 51: AD130B245E2DD894267CB0DDC532D169 - 52: A9EEB95053682248608E97D79E89CA82 - 53: CC26A3DC608268B98ECD1F3946C4B718 - 54: 33DD62A2DF6538DAF1CF821D9CDE61F9 - 55: 6912EE65FFF2D9F9CE2508CDDF8BCDA0 - 56: 51FDD1ACDA72405DFDFA03FCB85896D7 - 57: 5320EF4C17EF34A0CF2DB763338D25EB - 58: 9F4F41B5CDE885F94CFC0E06E78F929D - 59: E39965BC00ECACD90FD875F77EFF499A - 60: 63ED72093AE09E2C8553EE069E63D702 - 61: 0D08FC14AC5BAA37792377355DBAD0AE - 62: F3CDFFE2E160A061754A06DAFCFD688B - 63: 48A6295221902E8E0938F773A7185E72 - 64: B2D3F56BC197FD985D5965079B5E7148 - 65: 8BD7053801C768420FAF816FADBA971C - 66: E58B3261A467F02BA51B215C013DF4C3 - 67: 73062234B55754C3383480D5EF70DCE5 - 68: F752EBD79A813EF27C35BED69E2EE69F - 69: 10907846EB89EF5DC5D4935A09DAD0E7 - 70: 5F1F5F64B84400FB9AD6D8ECD9C142A0 - 71: 3157D7BB98A202B50CF0C437AA216C39 - 72: 70E7ADE70281B0AFCB1D4ED13EFC2E25 - 73: 0BB96A503B1626C9AB16C1291C663E75 - 74: 5BED4126B3C973F685FCF92A738D4DAB - 75: 7523C240F2A44E86DD22504CA49F098D - 76: 6710949ED8AE17C44FB77496BEDCB2AB - 77: 4A4C43373B9E40035E6E40CBA227CE0B - 78: 91977CBCC32CDEAEC7A0FA24BB948D6A - 79: A6A0F1373CF3DBEE116DF2738D6F544D - 80: 761F6D007F6E5C64C8D161A5CED4E0AA - 81: D44EA4D5A7074B88883A82F2B4CFBE67 - 82: 3097EDA5666E2B2723E8949FCFF2F244 - 83: AB247A3D9BC600F594D5A6C50B80583F - 84: B229430E3DB2DFDD13AA1DA1BAC14D5C - 85: BEFEF62987C6DCDF24FEBD0BB7CD3678 - 86: BFC3E5C7C461500FF085A66548378E0E - 87: A5712194537C75F0DD5A5AB3E9EBAF03 - 88: 8DAAC097E9044B85B75999D6C3BCCD24 - 89: B8124DF21129685597C53A3F606FFD28 - 90: 8FBC4D795C22D958248582A8DF7332ED - 91: 36D217135DB136B2BDF1617D7E9C79CE - 92: 1B3E6271A3A4B663C509A1255027CA99 - 93: A25F596574031FF9C34314C1B1F6BF34 - 94: ACA7017E5BB62BFDD5BBFDED78C8987A - 95: 8129E53A694ADD0560B1534B32FE5912 - 96: DA0E48224106C7535A4CD8DB2AC7B8E3 - 97: CBD4ACE3D766D8E44F63E0DE8F110F04 - 98: BDC17A0EF2777512CB402C90E9D13E31 - 99: 47695AD6AF968D6F1CDD2D8C5C87A466 -100: 7ACEDD1A84A4CFCB6E7A16003242945E -101: 225489D3D073AC705F7B3AD358EABAB2 -102: 301DA87A7B2EC27514C3A2789D5DBE49 -103: 16222C503718F1420958133C330FE3F8 -104: D778CE7F642AA23355948477DA4CC11C -105: E873C37F8977E200A594B815E1A87EF3 -106: E8F8F41528D4F855D8FDF4055BBABE2F -107: CACF3D3D1E7D21C97D265F64D9864B75 -108: 6BF48F161EFF9F7005BD6667F30A5C27 -109: 42E7BB8E780B3B26616ECBCACE81FA1A -110: 225AFD8EC21F86F66211ADF54AFC2E86 -111: 4FAD3AB7D8546851EC1BB63EA7E6F5A8 -112: D1FEC2AC3715E791CA5F489F300381B3 -113: F62807C995735B44699BB8179100CE87 -114: 54050B090344E3284F390806FF716371 -115: 50482241280543B88F7AF3FC13D65C65 -116: 4C36F27D4786FE2FB8CAAC690B6D62F7 -117: 5A0EDF0B97977EE5AFB3D185B64FB610 -118: 4541055C6675B614D27C537C3BB15675 -119: 1C772251899A7FF007400B888D6B2042 -120: B7BA1EFC6022E9ED272F00B8831E26E6 -121: B0B2D719A838DB877B6D6571A39A1CDC -122: 800AA956EC16F603ECDBA66C2DC6E4CF -123: 8827D2778287C58A242ACD4C549BEB31 -124: CFBC5AA0B61103C1A982D8927B26F575 -125: A1F5B691F74F566A2BE1765731084F8A -126: 80749BE03F5724FA4CA0AEF8909379B7 -127: 8402B21E7BC7906493BAE0DAC017F1F9 -128: 37EFF01866BA3F538421B30B7CBEFCAC - -Hash: blake2s-128 - 0: 64550D6FFE2C0A01A14ABA1EADE0200C - 1: 9F31F3EC588C6064A8E1F9051AEAB90A - 2: F52B4FC6BE5AC0FE16B72622653EB56F - 3: C41561EDB251DF8F3C9523524D60A707 - 4: 51725A57BE12698E2E0D7E98910780A0 - 5: CC08C41EAFF7842C4D0FA1C64E45F1FB - 6: 2C00C87B2FF353A0C365D857F6D4F3C5 - 7: 46F26ED5863A347052CCDDCB71266D6D - 8: 873AD9CE57FB6D239970A38E0D92CD8E - 9: B044DBE06680312DB797F66F8F27165B - 10: 33B42203E0347DDA0524EEF98C549520 - 11: 1A717B76A9D588DF20A139FEB8700A7C - 12: 24375C055F615A9C0DC0EFF1311A5793 - 13: 59C26B0674069026C8FC5E40430AA282 - 14: 823CF141A111D66024B4C82AC33215D7 - 15: 7CFFAEFB9840EAC8962A67CF944D1F72 - 16: DC6772000E3E9567BCFBC92971D67816 - 17: 4398E7D6EF08141A842C26156A9A8A48 - 18: 43819E64E9B7F6CC8472C1B6B68EA581 - 19: 447BB325970AF8FD500ACA7C176ADEBC - 20: F7E75644ACEFDDC9D0547C3CE3FE3F6B - 21: F5D21AAE342B3505373AD3EC5780B447 - 22: 4100572CECDC30AEE55FD5F53BF62A21 - 23: A25F936F82C608D74A4ABC84EF708BFF - 24: 2CCB218B584B721C60607A1B9C4E9F33 - 25: 0072DEF78710F1590F26620AE20DE4C7 - 26: AB0E6C1DCBDB90C92156AA02B36F9A51 - 27: 132362DCA6248CF3D6FB6FCBFDCB4B86 - 28: 193A98A19AFC803105AB43F206F8CAFC - 29: A6C088A5D8142C015770224B3A072DE2 - 30: 25B136277F00BB182E4BB0BCC4200181 - 31: 5B7D0CCBF06C4CA454BE26866C513CEC - 32: 68B96E07FA73966CCEFD87CCAD489984 - 33: 45149912910D47C800FF4E81B0950222 - 34: 651C7F67076CB90849DB32EAE2F79D3A - 35: 9C593BA0329E86C74AE579A6DB7293F9 - 36: 61B1EC51D5066BEBB9D998B9958B363F - 37: 84E835F9A85374098C79FF250F66A7E5 - 38: 6E638958112E8D6214F8DCB9C8282D64 - 39: 02F4BF9AEC321B31762C78D925BCED17 - 40: FC80DE93148DE2CA60A05A8F37C477FC - 41: E38ACF89451884610D983EC19FD57087 - 42: DABACBE6DC653B782B05E5CBBB937413 - 43: FD86FB2467D49C061DFEB1D8E9EAC01B - 44: 07A6516B3A9776542D2309E8497D92C0 - 45: 50BF654DA910A62D1DE7D5D99ED62292 - 46: C66BB047226FE0A8CFD0E66248E950DA - 47: C7C4DBFDF0C3F654396C51688246D95F - 48: 8D9BCFB54B78C2B087C363C2C56225B2 - 49: 425BCD6D6BF3266FDCEC5D98AA85E09A - 50: 5D8355BD197259C37FE9DC2CDD182E85 - 51: BC0EA42B5670AE36052A12A26B109729 - 52: E410D3852089501841E25C84EA73200D - 53: C03EFEEA95B308DB60676C352788819E - 54: 3EE75BA9D3B2D38F2A8DFBA57E28C228 - 55: CE44DC306DFF56ED00A657FB7B25D20C - 56: 081B0E61DBE0EA09128BF93BA7ED8EDC - 57: 3E1338B231B4539CED2D544EA4E36EF8 - 58: 9ACD12EE98341CD766DC19DB927B42C0 - 59: F9DEB66F1A5099D99FFA93D1F3B36990 - 60: 9C9B2E4E368FED54222FBCF50E9DCCE7 - 61: 4349C4260FB9E6E0902EA098502F293D - 62: FCFBE4782A28AF1AFB5DAEFA9599438D - 63: 4006430A2D313751A9ECE24FCCB52DE5 - 64: DC66CA8F03865801B0FFE06ED8A1A90E - 65: 399D3E92CCFCEDCDDE9BF4C2BE14CF8C - 66: 38C73D61E72531B3AC0CDCF871C7DC8A - 67: 8A085A96DE26DE17BA55CC7476F16660 - 68: 12C7C53778F67388EB23191C74283EA8 - 69: 5D441FC807AE9884C83F49C525FED6F0 - 70: 31690A560023F81B096FF943A9838AE9 - 71: 55AF48053A29C3EC6D5B8633F42F0500 - 72: 7181837F0225C7ACB3ACBBAAB1CC6FAF - 73: B1492F0BA13EED356AE769E193B5C967 - 74: 48425DED4E98B96B4A21F8DF8ACF7CE6 - 75: 56C366C91B0994E7DCE0CFCAF1AD2E35 - 76: D85FA654A309770440100767AEB1B225 - 77: 9F21184BF396A5F3ACA9B26DD1433941 - 78: 1ECE3C33C566EA55C5E0D570A48D4722 - 79: 8389E086D81C1A08B81E2A4CE752D58D - 80: F2065C23188121333D580AB95027A834 - 81: 7FFC1056F79C0226E568DDFDEDB68D10 - 82: 91D77F2607100D2EFD10364AA221A512 - 83: BCE2E5CC780AF0CB8487C676B6C57958 - 84: CE7A9493264224636EEE4BD4228D3501 - 85: B79A73B6BAAA83BA4200C13600FB4A29 - 86: 5E175C8D9402168B081021AC4AAE5E98 - 87: 1684969736689A062365D08B2EBA4448 - 88: 3740022A6174BDE156C7880003364907 - 89: B5A1D9C73759DD4965F3A2CEDFE6AD89 - 90: 8C2EAC9298148FD6C259EE2530BD8326 - 91: DC57AD06873459EF69D3530B4F9EE73F - 92: 649619FCBF2D303DD458EBD66969FB6B - 93: 6D6A17605BD1AF230EE9898E0D8B704C - 94: 763F0C908954913C34BDAB019C143582 - 95: B65DA22F1F0F82AECEBE91E1D3CF8C80 - 96: FF04AA06DA3E342AB335E9C1F2201C1F - 97: EBC7F4AC87CFC9CDC9DC13BE494E16D8 - 98: 68C0C171AF8C661AF6AE2E958102247A - 99: F0C587EB6C6AC5E1C34DB3BB3920B56B -100: 666A861D60A4C86BF684FE089CFBA8CC -101: 9CE84B0F08E03DC38BBC89F889D53AA1 -102: C767CC2F8F867551F210DC2616A7978A -103: 8970A7DCB77D9264596EAC8CDB86AE16 -104: 6CE407E9F51D6949B0AC6931EE6BE7D9 -105: C96EE2F5911549E44A1DBBBDFADE9B9F -106: 4ED2790B30C24F0E4D25494313667CB6 -107: 76E535A3B57CD085E8F75925C458083B -108: FDFFA482F90B1A788ACC57169508ADC5 -109: DA54C33D148DAB92D70C8BED79F352BC -110: 2030C26D92D0732A5E45716052147AAD -111: 0760E13DB7921CDBA669C67E88C3A7D1 -112: 73D5A76FB7D704856C0DAA9EC40E75CE -113: 76C45083E3405EEA53EA2884496C80B4 -114: 1EB92DD78744D9C383DCB52BBB418835 -115: 342C06AAC7B367193619B247DD04B0D0 -116: CABDB99087F2227BA327A19DC8052028 -117: 1A693513B7838CD492B7A4708F2CE04A -118: D1FBF911AF9246FC36BDF7D26F85E549 -119: 9D20CA08AD292E41F4F4C0D496E43903 -120: 6DDC8ABD8A94C66B62E6BE297B38CE20 -121: E36B24346B30DEB928D52C20AE068839 -122: D422522FF476B3C8E5D8DC92CFFE49BC -123: 8CF8C2D76AEEEB6C7A72A05448FA14AE -124: 28EF0EA3F71B1F1C024CB77531E6DB95 -125: C8A7768B284F5568F8926518F09C787C -126: 52A7C5E8CC60E4AA0935BF2303A8DD30 -127: 5D3541BE0CE9B6D8F9315862AC0198C5 -128: 7A3B3FA888B60095E7B305EFCF3C3DBC - -Hash: blake2s-160 - 0: 354C9C33F735962418BDACB9479873429C34916F - 1: 63A5F3DBA42C1EE9CE4147C1B22E0B61F4C7A17A - 2: D7E7E6E5A94FB0B0319212F4376E60C0BE1E7604 - 3: 5F70714603428963ABE2EA507C1D0A7C3D67A8E4 - 4: D2EB068A022B036AD8F46AD5DB018DF76331BAB1 - 5: 9B76C33F4F273950A4CF51FF337D00E7FC61DD23 - 6: 4309F8371A6AC414FF37D1D52EF1776C95A20789 - 7: B4F2034937EDB13E5B2ACA648274F662E3F284FF - 8: 55AF018D4764BFB68D6A1157F1CEEC211E1885EA - 9: 28356DD720151A6F60845D7F0E2364A720AA6E8D - 10: 92BAE8F308BFAD697E5AEB54A465DA37F9D24425 - 11: 9BFD39BE442702851DD618737A05830E3AA40894 - 12: E2ACC08A5D25D268595EFFCFE34EE1BF3AE884F1 - 13: D899B80BD2B851D721760B03DDD6E6A37F1F074D - 14: 440DD02BBF5B49139D5A4885F0C923131AD3D3C5 - 15: CA6F08E03BD4580C89A1E341CC248A2847C52F9B - 16: 7FA3AA4D8C97FF99A6BC5D16613D859E52F026C1 - 17: AF0BECB1E358C5CA393586DF9180EE065A837A22 - 18: 6E7DC6203623F33A98CFC0C05B96A9B3F368FD54 - 19: 9E65CB46384717BF5F6A16D4C8357DC232C9FC3F - 20: 985ED9932A7529791CC7535AD0FBABC3BE4EF1F3 - 21: 98171FF82492AAFB7FEF5D1C3D2DFC9D2B67AA2F - 22: 8904388C800814EFEB7ADE5EEC2D19A3908B0779 - 23: 717B89BFE07E2D64391B315603B2AFA849595F8C - 24: 027EC32547E076CB8AA0645C7F6C3A916339FA29 - 25: 47A86EAAFF8E2C9E72E8352E13907C4625B88C18 - 26: C1688EBF848D91A22499FB6C4126869F2B45C715 - 27: 3B38DA6BC7706A551A2C554653BCE5F88BDFA3DE - 28: 45F888CFFDDDDE987FAE61A5FA1CA6C0461AB265 - 29: DFEA3AB50EE3D5878F165ECAA9CC497DB82927E4 - 30: 1AB376D7E1A479032F26BC158F698CDD905871CC - 31: 6E0C39AC0442DC1A6C05ED1602806E64A6EF82E1 - 32: F73E3143C51B27F4E4605613948AA1DD3DB1AD77 - 33: 758D383DFCF4E44D440879E14A16D1303CD4F014 - 34: 439CE5842CADDAC3DEC67A2C47CE3566D8982DF8 - 35: 0483C39E9616A1AE7083CCCD5700C4F8FAD23307 - 36: 8EE9EF037310BA9174217C4921EF32620179D04B - 37: 1C0BD65FE618575F0750D2E3B08E2E718C8B7970 - 38: F0256B86A8E9EB359F950FF0A5E16596F253BEE4 - 39: 8D7BFFBC634762D0FB5222E4BB0A8719E9B7D081 - 40: 27E1D09CEFD270ADB81599B71A47ABA8E17CE4F9 - 41: C5A52EC4DF672DED31983299F56FE7B389975988 - 42: C9813921DB8760016DA939BF7EC2E34E30A8BB3A - 43: 7B1D1B8933557B22DE1A9A5FCAE805F52CD30CA4 - 44: F192A8F9A94BD34DF766692A2CDAA63DD0BDDBFD - 45: 39E6ED136B56D8319DE6D51B3211A035042FFED1 - 46: 5E9930F1EC9066C20296AF7122CBBA72B25A2A93 - 47: 793030A738EB909568471EE20340D32BEA78403A - 48: 2E8DC80084C5A2E64245E974AFC408C2EBF89D19 - 49: 006869129561FDC6549A03C0B5214B9A76238F92 - 50: 11170463304E748E8DB1449F55191E9D153ED1BD - 51: 1A0B05555FB77D2F9C074FA3E83BB283F95BE537 - 52: 5F5F8FF3CE86AF33C1415C60F76CB2C25BDE6728 - 53: EC7675D6B24FE54113EE502F4B9C434AE2D510B8 - 54: F6D1E8931D28A492C487FE2B62684B4DEE9606AD - 55: 2C0AE504B7674099048042CE546844DD06E32EFB - 56: 81DED6F4245B0BC4C055D5B7940D4A82DFEA329A - 57: 0285CCF80282440FB7E66B16DCF53D6C530EC3BC - 58: C617F39AB2446324C5E42D8B24C773AAA55CF624 - 59: C2378D825E5E8D9C98AE33DAED09DB42D8BE0A40 - 60: 62B4DCAAB72D70A77806A9B96C099AC76D04D72C - 61: 1D9CAAA74E54F3CA2D685C74211C6A4310E66D9D - 62: 6B190C2ABC4C181FF207099CB51C3DF5C944CE15 - 63: 3D0034E3E070CED4C8555CC592D019AF6155B086 - 64: 68C18B80DD398444AA9FD4272ECFA8E71B31EE8A - 65: 20EB8EEE0C703A44779298F35F92DA38F2B4F0BF - 66: EF4CD91D8F64838A042C07FB47F2736E68B66809 - 67: E2F5974DF791223616B42D5DA419DF26F2E128C0 - 68: 06C2DBF070561DC936212A3ADC877C94D6C4A5D0 - 69: 14B0EBC0735758C60EC1EF0DB2DE0E2763801370 - 70: 3D389052DC609E219CCF557B6667F8976B82B782 - 71: ED2B645B593417C11431E55E646D26E92DE1CFB3 - 72: 7150F391010A2F175621D5FFBCF7A6EDFFC8FE1F - 73: F4B6B92EBE81533243053EF7C44C993F50983B3E - 74: 36E34AE33E41722AF099E6A57CFD466A5631057A - 75: 1FBE85FFF071FD6C98F6F1A519E2D64F475ED76A - 76: 1C6C18D0FC578FB74B92EC0AF23CB61C8E6CF595 - 77: 240240245C8BDB34F0A52656644593BAAE08A5EB - 78: 2F3320A1E36B4E3CBFF7085B2599752FC830C78D - 79: 10FCC5E7FE1927674730A94CEC96BF2F0BD9DFCC - 80: 2E33E68B08D61675372CF6DA84AB69F2EC707B00 - 81: 9729F628CE9C027774A643F3CEF26DA829F36592 - 82: 1EF72D087EF5E79D104396D63579BD6F98CF4C1E - 83: 69B9DFD3ECC5560FACCFAF2A402F949F76EEAF84 - 84: 12EE430ED6E37CD3B9FE0318F134390F11BB99FB - 85: 0D491088429004B2ECB84788FB045EAD3F7B6E54 - 86: 0A755ACE4673E9A2A083E9B7E412E0F21C4E8D18 - 87: 38FE0BEA8C3B5D105A6D6BB7D241E4345893FE36 - 88: F94971CFF90543B01DD32C5589032B0C05AC179F - 89: 720F5741BDC10B4599E67F86C1A14C0116B1C69A - 90: CB82A141D54DE5386D032C87E417240C2FEAEA5A - 91: DBDC7A6B1A2EA4CA3275871FECAB399BB2C91065 - 92: 2DF5156607D295E207A31FF08F0CFE7B5659ABD9 - 93: 338F3C5DF3EC240F5310F826EB17E86BA05C4E49 - 94: 60CFC1A154C1D98B44F0DE61090D49E71979D992 - 95: FC9B059E0B22B699387F2DAE43949A56EA395514 - 96: 18BF054303412DA7FEB896C7940D2AE0EA4DD8B8 - 97: C1942585DDFBD73AFBC7F1F8A2FE54EC9DB1DBE9 - 98: A0A46EFE86E0438226977955E5BB92454AC0EDC1 - 99: 5EB5F8576B9D35EABDC5377802F02FF9E121B435 -100: 680D1A3BDA75F684618CBDC2863A76719155EE53 -101: A2923C7BD0EE1A2BE98BA750571B4A95DCD53F67 -102: CA57C775ABB2082BC165CC102BDC54F8F3F2896F -103: AED1F4A1172389137FFDDB36CED33E70E0AF111B -104: FE6297DB2444ED4C50860BD0266978C314724920 -105: B522FE23A986B6A911AA575590675DC80A0608F7 -106: 49380F56DFD3E20B1517374304814A8F351B71B9 -107: 9053188745A526DF0431EC4BF836F329B2AD54F3 -108: EBA715AED607617D90340C144D4E9059A80FD465 -109: CB1ABE32A735C49164A068EF87120B49C7EAAB2B -110: 7081B36DEF56C5FBB541C8C0AD8BB324C29ABE88 -111: AACABE58BF3FCD680DEB8FE8C7D8D74798E9081D -112: E660714F551A3EAEBF8BF334AF6415152B86E485 -113: 2C425922F0E11972DBD91E4394282E1570BB25A2 -114: 45C24A1C263432568573075A2162CC8098CCA18E -115: 7847103CF22ABC8C2FC0AD911FEBB7B14943C9B5 -116: C5147A4590DD4C1426E212156E01F608DBD66D69 -117: 965FE7D1837B971EDAB15F7E67EBA9A2E6914F40 -118: 741E306EAD4D955C33052B0ED20F5C5AB20F2101 -119: DB5207DF29623C33809DAC6E43F475D30A72A911 -120: 71EDF00F043A71BA57F6B5E1B68A6789DD546F1D -121: 8662782A37C5750197139141A9727141552F3ED9 -122: FEE742A0F8B086265397D6F1BBCBBDC0A06BAA02 -123: 79AB45D0C1993E96A5513CB71E90B6CE6534255D -124: 81941D21C28A57C91B9912A0530393C5EC4B847E -125: D751DCCD29D33981DF4014FE866B04029BF79370 -126: 247DC8D47CA83F3B852BFBD5C1100E5EA7DB9A8F -127: B326E5F0E03512E436F31111DF9C378DCA2B3171 -128: FB7B50DB11A7A2ACECF57AA08636DF85EEAAC736 - -Hash: blake2s-224 - 0: 1FA1291E65248B37B3433475B2A0DD63D54A11ECC4E3E034E7BC1EF4 - 1: 61B94EC94622A391D2AE42E6456C9012D5800797B8865AFC482197BB - 2: B354A3A86CCB9D779E2CCA139D231DBE9ABF798F167FEA6E3F577867 - 3: F366ACA9739FDDA59DC11280B6E6D10DB6286B503E1D0A922326307A - 4: 42ABB6E970408779166B9EB742FE0621B03F77794A8881FC398F97B3 - 5: 01F21AA3E522547A29784118863AA2A1954E295F42529C3DE0600835 - 6: 4DED466648D01276EAD4A77882C05602F7E92B198E84810A52FF11A8 - 7: D2FC4A9F2B1CC35D2ED8A7C24A91A68C86FBD326574B079C66E41196 - 8: 9903423028C41511FABD3366A07AAF7E480D2B6FC0457EEF7C11A824 - 9: D664024F8A94368DCCE909495E2CD6BBF1BB02390F8066545D010701 - 10: 976C9034E79937B253F7D9CEBF6F7E81B57CF27C97551E88FB95168A - 11: 314B02060FA7ED987F3C566783A6B325D30F17A6D5F3724E23C46633 - 12: 0C7F28E829AA9484F2AFF0605535404B8E845EC763439FAD1BF86024 - 13: 3C12AE2CB1489D1E962A1D171173628B3D6BE0590C3ADE492C3987B7 - 14: 55B6D6D04513E811CC41F656DA633E7DC9555BDFF733F735ADB531EC - 15: 90C14B6F15AB39F0623A092C25171DB744DCEC78BCAC1C5F722C4B56 - 16: 9384BC14A81DA3BBCA13D0CF2A876711545EE8C3A87C191A4169F727 - 17: 49B6BDF2ED04E5D76A19CAC2BAEF08AAD16A3B4A31B2765781593AF8 - 18: 5AA9C3AABE961DE67A16AFF35B0AABB7E734C26E2EE42C76A46299CD - 19: FEB584CF41462363372F82999262AB93F154EBEEB644F58B4713202C - 20: E17CA71ADA6B48CBBB8399D9CAEA26D0F2B7F5B1C9BD4924E6A6A494 - 21: F5BE4A4A44421D403F7A154366311D61E415F6169516E72DB426A4C6 - 22: 2C347252DD3B7B99FEF9038B72E7961799C7DCD7CD9D22BEE98E5720 - 23: D5A11E41B9FF2562A8A93D62B1CC9DE2A734C2C14D7AC5C818B1D225 - 24: BB2F2A95B9A695091D79CBB7DDB60E6344EE6A1A0A00506F8D4E81A6 - 25: 4C676307A506243B96B8765274D9696C41332EBCACDDCFEF51ED98B2 - 26: EBF674014A0EC1513A522B13CCE542E7E8E4A5C4915A8545DB9A28E9 - 27: 03308AC3021B1F36500A53A14D472C669D03135DA7477E636D381412 - 28: 9F7194D71D515EBC1E15DDB382D218FB35D91485F7967D9961CCEDCC - 29: 8F6809F5F9ADD0562C0D7F70583AC71A24C6C1885EE1D5F572D3D973 - 30: 00AFC8B9B4F0C30625E53D4F2064F6BFF05EDF46FEEFAC6EA6CB7334 - 31: 4D42ABA3D1D12AF74A8524114B17D6D1957FB24753DDE2E28E9DA390 - 32: A19C4CA01CE34CD61408E9EC9946E3DAA98AD1B7D77C087782E6827F - 33: 800559FD51E93E4BC2FDDFB26964343AF7C0DD343AA3D36D40857F97 - 34: 3656E7DB967CDFC7F3D7BA099827449E9AC38AE992A02D446706CF5C - 35: DC690F1B322291B741D0CE2D9639F8DB85FDF5FDE1E41701BFD8A406 - 36: C0EBB37BB3E12CBD7888255E8C3A8F1EB6AE5A9582455D7A0772BBE5 - 37: 32B16E5D5EDD71424DD8C8E1E23A651322CA06AF13E3FB7E56EA9733 - 38: 20D5B7C0B52320AB1A1FBF7D47626BD758138E07B74B4FB2B846E186 - 39: C4A7603DFA81B43D36E9F5B0D1423DE4686327F7A4415D6277751428 - 40: 1ECBF4EA964E9B3855A9E9293F3D2D2BE1E251D9204B54B6837800A9 - 41: 9C9440E097BEAD44FA7B968818FF557D41D2AB29EF48212C975378E3 - 42: 97D936C85DA801F053AD2C7EE6D7B4ABFB43D2563FA5CFA76A366055 - 43: DEF0FA3658530B7BBC0E6D5A30AF8B48ED780C73D947BD267DB36E2F - 44: 6C26BA6D96EF33EA6977943D2BDE04AE3BAB13CD7329D7CF304A091E - 45: D5E49A864104B862020251F91E917E33F77208797F4FA7FEC2618C18 - 46: 59F3C5D276DD45FD1B1A512094E6F7CB8946D26B6DE0B16659E86505 - 47: C5F52A98EDBA4700EB18E7855EE8DD1A427FC7184FF4259B3DF09B91 - 48: 69A7C96A17478FB971E907399C125E39E7DA329D231C4A1ACFEEE1F5 - 49: F97C42B005A40AC713CD1201544058C332FE83D6A5DFFCB3F7A26DF7 - 50: 080519CB017B2953003725848DD739C9B39AE9D9E6E7E9006103A852 - 51: 267AEF7F39ED64DCA288F25B01F9AD5478599E1B91B496840A1DF1D6 - 52: 52240CD9B35403B8832680EE72FDDCF37E51897E9E4E46B55D3ACBED - 53: 63DA0BF0FBDBA65430F5BBC099A4B7F868672BC3FAD71ED31F5F77B2 - 54: 5EE73E709A1661971150CF31099124CD42A9F9D6FFF6F9078BE63154 - 55: 5CD64A9845375020F2331C72CB955821CFE11D06A3B63D8A1D1187E2 - 56: 8522AB2D20CDF3CA0F85EA5A18E5C385F1BB3E9B0A4FDC07324C98B0 - 57: FE16ABA3459844E3299FB7E0B47A8DC6337C8209CD6220407BF29682 - 58: 86B4C6EF1783701C6F6DC237A8FF45035B61FD7F3FBDA61EF37B79D8 - 59: 2A4A292DC2ACE8BD3729332332AA8757A7DEF68A181DF8CC51266910 - 60: 36410AE1CDAA027F85A4ED1C8892B70E0B4FD541C2A14CC1411D67F0 - 61: 21E5E7CCADB0A287A37C10E4CE258B2658DF29A0E7356C88A3E92C20 - 62: 027B16F4E0F5A5C17A46EA3B51DC50B368EA094F5EF196E615FE8B3D - 63: 8D88168937A3B44E45C1408C03DF60835DF2794E8B55ECA1FD1E266A - 64: 0F3CD451360AAD6BD7C9CBC1497771315BC0E0F34C82D1F4E1052B1E - 65: C4ED166EC8CCB80A236767111FA75498A0666901226B549DE011D576 - 66: 8CDD99B9C3E2F417C7DD334AD50AF32F220CAC25731C667BA6CFB4FF - 67: 19415845A2F27872B881191381DAEA10E24A6DC1214B994DCE330F1E - 68: 9973F64635A408C840C1DC2667BA0E9C2BDAFA8E86E584BF2642076B - 69: 5041DA88DB2F7478EB5AC630FFB77BE46328891A5BA940141E2344BF - 70: 7FD3930B4100F6A6E97B64EFC6BF77E23DA925E1C488FD89C618E03E - 71: 4BFA0D8F207926ACAAA0E04A4EA269D822875A5FBB462C72936BFDF4 - 72: FCA9E83CF144083FE82C39CA58341DEC32CEBBEAA87E728689C8C6E8 - 73: 1F152AEAED0107E3F1D7317BCF61FBBBE9756D9C1D3A998ACCE73B19 - 74: 5ECC27D88DC605A4C30CE046CD93C252E646CC5D1303C3A1F8019371 - 75: B44C388E1CFF293242A783EC000E9CF1D977812255009CB35917FD5F - 76: E3C4B860A91C6DEDBD796EA5EF957453A41BBD477E5C5327A23C4D87 - 77: B61901A9BA1AB20128DE4832923742E01BA41A648EF09FE5D0FC64E0 - 78: 562B90D86AF640C3835F76B24FB1DB7F509DE8091E15D52FD6283747 - 79: 5704A0A9B316400692431460D45F64C52FF939CD33AC93EE23927352 - 80: 222395B8C1DAD60F29E1B02E9E944CADDA56A61027F46025F893239D - 81: FFD94C26439196ACBD2E9C225E522F2825588BDC67053BBF3F0D3A58 - 82: 0F2C8AA114D3A687F143EB35EEBE32FD1CA325AC5B8818024AFB3554 - 83: 00402EC26EFEAAC7E376EB294CC3F1A5ACF55B8B2D06B581194473DA - 84: A504DF8BA4C46C6D0923C67DF94169F057A63192A17623FC7B20B189 - 85: 654954B063729D09A562598A9537EACCC0D98B9BB1FBB34172960F19 - 86: EE5773C670FE153A969B1F3A54F155A28AF9E25BDFEE02285940FF26 - 87: A5FCA2FCE745A8FED0338C747797539CE96998F0678758679BDC7A84 - 88: F2761BB7E85BB2953FB99AFF5F2EC50C6799B140359165035333C8F9 - 89: BD5FE527CD74ADAF6A646C6C35E0B891744CA78098224EC8E4CD5CB8 - 90: 886E3D5B274CF83C5CE6D16E4C3A8D3382A3486A3F447EC70526EE17 - 91: 23E6611E54C8D767D3C0B007F05815E5FACA2DC11A27D5EE5D3F8EAD - 92: A09DA0A8EE1DEB0B41C6F50BCE7446A7F6CE60886B5E289EE86F7008 - 93: 60382D65E2FC987AF43757FC7AAA777F82F885C98EA07F650C52A3A1 - 94: D2033BF9C929E13F39A0033669F7B270983CAE1491588D6765BFFCFF - 95: 278F3962EB35495F08C04DAC7C2DC972550B5E8125DE7B2DEF30D67A - 96: 54501DD2B4B14AE335F0DAA6DE33C862532A9C7D895A33582001BF88 - 97: D14803662A73E03B0EC08DB76877E8EBF614A7B2E48800536032A329 - 98: 4669600EFB4AB6D1653AA0470F6E35005F961A9A0896F2F3D6A2A5CD - 99: 20EE59D9CC85FF096A6C209EE25A9D9D7B01BF6A0FCF3FE512573BB2 -100: D578424CA09A3900792DC6F4D3DD0282B80C39415C0DB9283806A07B -101: 047BF849300AF65A5E5A0037A2F03236D78F18AE96C760D084683EE3 -102: 66E2C5DC229AD1318A39E5E38276181E4BEF8467A3EF99CAAD842EF9 -103: FBBA003032683675DFA34448CB70F50F9D52B3FAD23BAAF4E9D810AA -104: 87147164C725A5C17F0C108315AB67266D2F748C4F97F3A4A5450C53 -105: 808E48C1FF44EAE1289F2B460E8F5694E65F1F71F08C7F09281B2024 -106: 4D8A491E0F4E265C71A7FD993E94B187B69053D4DC4A45EEFCA66763 -107: 4B93C4B9DF00FB64A1E5D00A7130253B438DD30CF132C1FFA8B49458 -108: FA77DD5A05385B4F08787EC821A4D9643E66570F5ADDCC95C558E916 -109: BA2E4C01D2C80EEAB1C1D76C3348C37D88EDBE52D2322B38AA4B2553 -110: 50232F65130808FF427EE791C0D7F4B0D80A5428E6D153970462138E -111: 6E3DF733DCB232D9742DEAB44A6CC9CE75B52D677599DE018BE80A02 -112: 589286CE5D448B9B6A727AE3E24DEB9E8141FEDB1E8E853556A63A03 -113: E48768C63384D8C29736969B1F2934D57EABE67D80EC1B05C74607CF -114: D243C7B0EA86D4286FC46217A4DBACAB02D47B553E500F41225A6F9E -115: 5048ADFB6091292878E21F2D40682F385B130294BC61216133B7F28D -116: 2400C769610FB06F9BE1810F202E325F5984289533595D5252DB52B8 -117: B64166E2678CB7BED689CD28F0C06969559FFF3F8C31564BF68C0741 -118: D8160C3E3AAC9FE0368FACB3190AB11ECF545DF83F6A60D058A06908 -119: AC993AF05709DE0C7516C09F505562D8F10C643690ADF3DC1EB12803 -120: 8D3221FFC272D7FD44D4EA0AF6AE4AF7D5E0BE1E48F305B7EFB1BC6D -121: F14EAFFA4F73354329CD49634836E3A69DE1A89C80262BF40668F2CC -122: F4DE293C01AF09BFA4E7417488EA8D599FA854C6305E8D638AC83146 -123: BFC807EFE5CF0C5C7F71E337E68BA974F137DF299D01DC7E57F053D0 -124: B943A8B8EC482F68977BD6FEFD3FDEB1FCADFB84B3B5A8442CBF4F0B -125: 01D45AD3FF542DB030F7EE00F80342EE397DB480737A3A17098C0804 -126: 11FAE1A284C26D0475026225741EE11E10E96453B92FAA72FF4DBD47 -127: A5CE0FF6222E2669FC425EF4D5CDAED1870BF1C384A560E4DD86F5B3 -128: 784E4D4A1465F11253D1812C9C865C99581656086F4F2B7EE7FFDBB6 - -Hash: blake2s-256 - 0: 69217A3079908094E11121D042354A7C1F55B6482CA1A51E1B250DFD1ED0EEF9 - 1: E34D74DBAF4FF4C6ABD871CC220451D2EA2648846C7757FBAAC82FE51AD64BEA - 2: DDAD9AB15DAC4549BA42F49D262496BEF6C0BAE1DD342A8808F8EA267C6E210C - 3: E8F91C6EF232A041452AB0E149070CDD7DD1769E75B3A5921BE37876C45C9900 - 4: 0CC70E00348B86BA2944D0C32038B25C55584F90DF2304F55FA332AF5FB01E20 - 5: EC1964191087A4FE9DF1C795342A02FFC191A5B251764856AE5B8B5769F0C6CD - 6: E1FA51618D7DF4EB70CF0D5A9E906F806E9D19F7F4F01E3B621288E4120405D6 - 7: 598001FAFBE8F94EC66DC827D012CFCBBA2228569F448E89EA2208C8BF769293 - 8: C7E887B546623635E93E0495598F1726821996C2377705B93A1F636F872BFA2D - 9: C315A437DD28062A770D481967136B1B5EB88B21EE53D0329C5897126E9DB02C - 10: BB473DEDDC055FEA6228F207DA575347BB00404CD349D38C18026307A224CBFF - 11: 687E1873A8277591BB33D9ADF9A13912EFEFE557CAFC39A7952623E47255F16D - 12: 1AC7BA754D6E2F94E0E86C46BFB262ABBB74F450EF456D6B4D97AA80CE6DA767 - 13: 012C97809614816B5D9494477D4B687D15B96EB69C0E8074A8516F31224B5C98 - 14: 91FFD26CFA4DA5134C7EA262F7889C329F61F6A657225CC212F40056D986B3F4 - 15: D97C828D8182A72180A06A78268330673F7C4E0635947C04C02323FD45C0A52D - 16: EFC04CDC391C7E9119BD38668A534E65FE31036D6A62112E44EBEB11F9C57080 - 17: 992CF5C053442A5FBC4FAF583E04E50BB70D2F39FBB6A503F89E56A63E18578A - 18: 38640E9F21983E67B539CACCAE5ECF615AE2764F75A09C9C59B76483C1FBC735 - 19: 213DD34C7EFE4FB27A6B35F6B4000D1FE03281AF3C723E5C9F94747A5F31CD3B - 20: EC246EEEB9CED3F7AD33ED28660DD9BB0732513DB4E2FA278B60CDE3682A4CCD - 21: AC9B61D446648C3005D7892BF3A8719F4C8181CFDCBC2B79FEF10A279B911095 - 22: 7BF8B22959E34E3A43F7079223E83A9754617D391E213DFD808E41B9BEAD4CE7 - 23: 68D4B5D4FA0E302B64CCC5AF792913AC4C88EC95C07DDF40694256EB88CE9F3D - 24: B2C2420F05F9ABE36315919336B37E4E0FA33FF7E76A492767006FDB5D935462 - 25: 134F61BBD0BBB69AED5343904551A3E6C1AA7DCDD77E903E7023EB7C60320AA7 - 26: 4693F9BFF7D4F3986A7D176E6E06F72AD1490D805C99E25347B8DE77B4DB6D9B - 27: 853E26F741953B0FD5BDB424E8AB9E8B3750EAA8EF61E47902C91E554E9C73B9 - 28: F7DE536361ABAA0E158156CF0EA4F63A99B5E4054F8FA4C9D45F6285CAD55694 - 29: 4C230608860A99AE8D7BD5C2CC17FA52096B9A61BEDB17CB7617864AD29CA7A6 - 30: AEB920EA87952DADB1FB759291E3388139A872865001886ED84752E93C250C2A - 31: ABA4AD9B480B9DF3D08CA5E87B0C2440D4E4EA21224C2EB42CBAE469D089B931 - 32: 05825607D7FDF2D82EF4C3C8C2AEA961AD98D60EDFF7D018983E21204C0D93D1 - 33: A742F8B6AF82D8A6CA2357C5F1CF91DEFBD066267D75C048B352366585025962 - 34: 2BCAC89599000B42C95AE23835A713704ED79789C84FEF149A874FF733F017A2 - 35: AC1ED07D048F105A9E5B7AB85B09A492D5BAFF14B8BFB0E9FD789486EEA2B974 - 36: E48D0ECFAF497D5B27C25D99E156CB0579D440D6E31FB62473696DBF95E010E4 - 37: 12A91FADF8B21644FD0F934F3C4A8F62BA862FFD20E8E961154C15C13884ED3D - 38: 7CBEE96E139897DC98FBEF3BE81AD4D964D235CB12141FB66727E6E5DF73A878 - 39: EBF66ABB597AE572A7297CB0871E355ACCAFAD8377B8E78BF164CE2A18DE4BAF - 40: 71B933B07E4FF7818CE059D008829E453C6FF02EC0A7DB393FC2D870F37A7286 - 41: 7CF7C51331220B8D3EBAED9C29398A16D98156E2613CB088F2B0E08A1BE4CF4F - 42: 3E41A108E0F64AD276B979E1CE068279E16F7BC7E4AA1D211E17B81161DF1602 - 43: 886502A82AB47BA8D86710AA9DE3D46EA65C47AF6EE8DE450CCEB8B11B045F50 - 44: C021BC5F0954FEE94F46EA09487E10A84840D02F64810BC08D9E551F7D416814 - 45: 2030516E8A5FE19AE79C336FCE26382A749D3FD0EC91E537D4BD2358C12DFB22 - 46: 556698DAC8317FD36DFBDF25A79CB112D5425860605CBAF507F23BF7E9F42AFE - 47: 2F867BA67773FDC3E92FCED99A6409AD39D0B880FDE8F109A81730C4451D0178 - 48: 172EC218F119DFAE98896DFF29DD9876C94AF87417F9AE4C7014BB4E4B96AFC7 - 49: 3F85814A18195F879AA962F95D26BD82A278F2B82320218F6B3BD6F7F667A6D9 - 50: 1B618FBAA566B3D498C12E982C9EC52E4DA85A8C54F38F34C090394F23C184C1 - 51: 0C758FB5692FFD41A3575D0AF00CC7FBF2CBE5905A58323A88AE4244F6E4C993 - 52: A931360CAD628C7F12A6C1C4B753B0F4062AEF3CE65A1AE3F19369DADF3AE23D - 53: CBAC7D773B1E3B3C6691D7ABB7E9DF045C8BA19268DED153207F5E804352EC5D - 54: 23A196D3802ED3C1B384019A82325840D32F71950C4580B03445E0898E14053C - 55: F4495470F226C8C214BE08FDFAD4BC4A2A9DBEA9136A210DF0D4B64929E6FC14 - 56: E290DD270B467F34AB1C002D340FA016257FF19E5833FDBBF2CB401C3B2817DE - 57: 9FC7B5DED3C15042B2A6582DC39BE016D24A682D5E61AD1EFF9C63309848F706 - 58: 8CCA67A36D17D5E6341CB592FD7BEF9926C9E3AA1027EA11A7D8BD260B576E04 - 59: 409392F560F86831DA4373EE5E0074260595D7BC24183B60ED700D4583D3F6F0 - 60: 2802165DE090915546F3398CD849164A19F92ADBC361ADC99B0F20C8EA071054 - 61: AD839168D9F8A4BE95BA9EF9A692F07256AE43FE6F9864E290691B0256CE50A9 - 62: 75FDAA5038C284B86D6E8AFFE8B2807E467B86600E79AF3689FBC06328CBF894 - 63: E57CB79487DD57902432B250733813BD96A84EFCE59F650FAC26E6696AEFAFC3 - 64: 56F34E8B96557E90C1F24B52D0C89D51086ACF1B00F634CF1DDE9233B8EAAA3E - 65: 1B53EE94AAF34E4B159D48DE352C7F0661D0A40EDFF95A0B1639B4090E974472 - 66: 05705E2A81757C14BD383EA98DDA544EB10E6BC07BAE435E2518DBE133525375 - 67: D8B2866E8A309DB53E529EC32911D82F5CA16CFF76216891A9676AA31AAA6C42 - 68: F5041C241270EB04C71EC2C95D4C38D803B1237B0F29FD4DB3EB397669E88699 - 69: 9A4CE077C349322F595E0EE79ED0DA5FAB66752CBFEF8F87D0E9D0723C7530DD - 70: 657B09F3D0F52B5B8F2F97163A0EDF0C04F075408A07BBEB3A4101A891990D62 - 71: 1E3F7BD5A58FA533344AA8ED3AC122BB9E70D4EF50D004530821948F5FE6315A - 72: 80DCCF3FD83DFD0D35AA28585922AB89D5313997673EAF905CEA9C0B225C7B5F - 73: 8A0D0FBF6377D83BB08B514B4B1C43ACC95D751714F8925645CB6BC856CA150A - 74: 9FA5B487738AD2844CC6348A901918F659A3B89E9C0DFEEAD30DD94BCF42EF8E - 75: 80832C4A1677F5EA2560F668E9354DD36997F03728CFA55E1B38337C0C9EF818 - 76: AB37DDB683137E74080D026B590B96AE9BB447722F305A5AC570EC1DF9B1743C - 77: 3EE735A694C2559B693AA68629361E15D12265AD6A3DEDF488B0B00FAC9754BA - 78: D6FCD23219B647E4CBD5EB2D0AD01EC8838A4B2901FC325CC3701981CA6C888B - 79: 0520EC2F5BF7A755DACB50C6BF233E3515434763DB0139CCD9FAEFBB8207612D - 80: AFF3B75F3F581264D7661662B92F5AD37C1D32BD45FF81A4ED8ADC9EF30DD989 - 81: D0DD650BEFD3BA63DC25102C627C921B9CBEB0B130686935B5C927CB7CCD5E3B - 82: E1149816B10A8514FB3E2CAB2C08BEE9F73CE76221701246A589BBB67302D8A9 - 83: 7DA3F441DE9054317E72B5DBF979DA01E6BCEEBB8478EAE6A22849D90292635C - 84: 1230B1FC8A7D9215EDC2D4A2DECBDD0A6E216C924278C91FC5D10E7D60192D94 - 85: 5750D716B4808F751FEBC38806BA170BF6D5199A7816BE514E3F932FBE0CB871 - 86: 6FC59B2F10FEBA954AA6820B3CA987EE81D5CC1DA3C63CE827301C569DFB39CE - 87: C7C3FE1EEBDC7B5A939326E8DDB83E8BF2B780B65678CB62F208B040ABDD35E2 - 88: 0C75C1A15CF34A314EE478F4A5CE0B8A6B36528EF7A820696C3E4246C5A15864 - 89: 216DC12A108569A3C7CDDE4AED43A6C330139DDA3CCC4A108905DB3861899050 - 90: A57BE6AE6756F28B02F59DADF7E0D7D8807F10FA15CED1AD3585521A1D995A89 - 91: 816AEF875953716CD7A581F732F53DD435DAB66D09C361D2D6592DE17755D8A8 - 92: 9A76893226693B6EA97E6A738F9D10FB3D0B43AE0E8B7D8123EA76CE97989C7E - 93: 8DAEDB9A271529DBB7DC3B607FE5EB2D3211770758DD3B0A3593D2D7954E2D5B - 94: 16DBC0AA5DD2C774F505100F733786D8A175FCBBB59C43E1FBFF3E1EAF31CB4A - 95: 8606CB899C6AEAF51B9DB0FE4924A9FD5DABC19F8826F2BC1C1D7DA14D2C2C99 - 96: 8479731AEDA57BD37EADB51A507E307F3BD95E69DBCA94F3BC21726066AD6DFD - 97: 58473A9EA82EFA3F3B3D8FC83ED8863127B33AE8DEAE6307201EDB6DDE61DE29 - 98: 9A9255D53AF116DE8BA27CE35B4C7E15640657A0FCB888C70D95431DACD8F830 - 99: 9EB05FFBA39FD8596A45493E18D2510BF3EF065C51D6E13ABE66AA57E05CFDB7 -100: 81DCC3A505EACE3F879D8F702776770F9DF50E521D1428A85DAF04F9AD2150E0 -101: E3E3C4AA3ACBBC85332AF9D564BC24165E1687F6B1ADCBFAE77A8F03C72AC28C -102: 6746C80B4EB56AEA45E64E7289BBA3EDBF45ECF8206481FF6302122984CD526A -103: 2B628E52764D7D62C0868B212357CDD12D9149822F4E9845D918A08D1AE990C0 -104: E4BFE80D58C91994613909DC4B1A12496896C004AF7B5701483DE45D2823D78E -105: EBB4BA150CEF2734345B5D641BBED03A21EAFAE933C99E009212EF04574A8530 -106: 3966EC73B154ACC697AC5CF5B24B40BDB0DB9E398836D76D4B880E3B2AF1AA27 -107: EF7E4831B3A84636518D6E4BFCE64A43DB2A5DDA9CCA2B44F39033BDC40D6243 -108: 7ABF6ACF5C8E549DDBB15AE8D8B388C1C197E698737C9785501ED1F94930B7D9 -109: 88018DED66813F0CA95DEF474C630692019967B9E36888DADD94124719B682F6 -110: 3930876B9FC7529036B008B1B8BB997522A441635A0C25EC02FB6D9026E55A97 -111: 0A4049D57E833B5695FAC93DD1FBEF3166B44B12AD11248662383AE051E15827 -112: 81DCC0678BB6A765E48C3209654FE90089CE44FF5618477E39AB286476DF052B -113: E69B3A36A4461912DC08346B11DDCB9DB796F885FD01936E662FE29297B099A4 -114: 5AC6503B0D8DA6917646E6DCC87EDC58E94245324CC204F4DD4AF01563ACD427 -115: DF6DDA21359A30BC271780971C1ABD56A6EF167E480887888E73A86D3BF605E9 -116: E8E6E47071E7B7DF2580F225CFBBEDF84CE67746626628D33097E4B7DC571107 -117: 53E40EAD62051E19CB9BA8133E3E5C1CE00DDCAD8ACF342A224360B0ACC14777 -118: 9CCD53FE80BE786AA984638462FB28AFDF122B34D78F4687EC632BB19DE2371A -119: CBD48052C48D788466A3E8118C56C97FE146E5546FAAF93E2BC3C47E45939753 -120: 256883B14E2AF44DADB28E1B34B2AC0F0F4C91C34EC9169E29036158ACAA95B9 -121: 4471B91AB42DB7C4DD8490AB95A2EE8D04E3EF5C3D6FC71AC74B2B26914D1641 -122: A5EB08038F8F1155ED86E631906FC13095F6BBA41DE5D4E795758EC8C8DF8AF1 -123: DC1DB64ED8B48A910E060A6B866374C578784E9AC49AB2774092AC71501934AC -124: 285413B2F2EE873D34319EE0BBFBB90F32DA434CC87E3DB5ED121BB398ED964B -125: 0216E0F81F750F26F1998BC3934E3E124C9945E685A60B25E8FBD9625AB6B599 -126: 38C410F5B9D4072050755B31DCA89FD5395C6785EEB3D790F320FF941C5A93BF -127: F18417B39D617AB1C18FDF91EBD0FC6D5516BB34CF39364037BCE81FA04CECB1 -128: 1FA877DE67259D19863A2A34BCC6962A2B25FCBF5CBECD7EDE8F1FA36688A796 - -Hash: blake2b-160 - 0: 3345524ABF6BBE1809449224B5972C41790B6CF2 - 1: 082AD992FB76871C33A1B9993A082952FEACA5E6 - 2: D9BA03C1E5CCF9083FCB21F7AE01D20BC0A61116 - 3: 147420788D27F83264EB55BAD410D304540A21D9 - 4: 72D1B592354DFFD34B9A33A1D9696BE6B2A76162 - 5: 6BE786CBE2439FEBEE399618309831D8CCF8E68D - 6: 508A9AF9195DB76523F32DFE0DEE2615C4EAB892 - 7: 83A00152738C9C2D0CE6980BC093C73ADDA0A707 - 8: F422108C43BAD02773C989E90A027729B0FD3B8C - 9: DCFFC21F7D90B79C7E4D72CE1CB68E9393707A0B - 10: B673B12C3BF35B84553157DDE2D64F01D53170F7 - 11: 24A88757AE5A6AFB6F09E4D4BC0C0D1F7784E693 - 12: 444C019756D384677D54F4DE70E3708EEC20BCA3 - 13: D6A974E117A3B5397082A2638586CFEE6F94DAA1 - 14: 9F2FFE2B4CE9318159CD214811E856A2EB1996C1 - 15: 9729578C9F0012170273AD01920D69F5CADECB59 - 16: 2DED4F07D5B7E830711976338C12D66087F41E34 - 17: CC6A494DBAE2D0C782B9647F5E268D20C89DA8E0 - 18: D913843A8FE13C412FE21736DA128C4F6E5149E9 - 19: 6AFF7DBB8AC24568ABD268442FD2A3210B5A6FBF - 20: 52498636C61D58BD46D8BAD4C06B572BD08FF983 - 21: B91DF3153932F20DAC48D405689DDF5A3C379559 - 22: 3F6DCE460E8AE23C222EEA45BFEC0FA65E3D118F - 23: 75B340DE05638C190C1345F1823A12DC019F439A - 24: 8CEADFCD30B82A4686621E570F3A97025246C411 - 25: 362412D1AED48F91084715F30787107902601FD2 - 26: A09C9A7A20AE73A689FEBAB171C585AB0549F807 - 27: 9D33DDDEB1A31DF8C33C4F4BE8A3DD7EB99611EF - 28: 30F738CABC5598A35655D7E727AB009BB546B84A - 29: 318919F5F5CC9DB7E15C67D1BAA1FA660BFF2AE6 - 30: 0F2A40B3D3C8E9C6825218FDECEE51B65FE1F261 - 31: C9F4187E8EDBB4CD82ABE892BB0353C4DCA32390 - 32: B1B133B99F516E6C82CEDA892EF5AF50FA4B4E71 - 33: FEFF72EB10133687CC4BA345A409491346E4DDB4 - 34: AB2EBD942C73370C568A092CDD52441FD7427065 - 35: AF56FEBC670729FC0B945B30EC5FD4054D433B1E - 36: E0608B977EAA078A4ABD485A802AF1C52F44754A - 37: 6100835CA6FC89D1890A65CC01C322D195B23CF2 - 38: 25824CA722292042AA1182186BFA9863EAE3D1F4 - 39: 63445DA5519800A2CFBA55FF6C365BE2A9899618 - 40: 6BC0EEA6FD440873D7AC2A6A6D3F3651BDFBEADF - 41: EEE860BF14DF86BA903E1F62146F891820FF2CB4 - 42: F443B28F036AF2B79A2187912156129DBE28B943 - 43: C6A3BB461788D74D06EC8C58BFE9D3DDC5178BE3 - 44: EFC5B57327FCEFB5AE21FF75F65101D1ABAC09D9 - 45: 623AA14E42E6F3B8C4CEA1E5E1A49BD668F27BB6 - 46: 42098F0935B568DECD5E172321504A06820BA543 - 47: 96EA35D6AD0C91C65752562CC523E0F66E6E6DA9 - 48: 9B3BF9CDFF4CC55957AC4FB77F5BBA5CC94E4BBA - 49: 500F61E1F6BD816ECFE76B0A499FAB1A945BFDC7 - 50: 2338D3A37BAB81B165FB9B0D96774366AC1A5518 - 51: EACF1749527B99280B7A3108A8B9B79E58421F68 - 52: E80BBA9842ADAEAABB298CAA14435EBAE9F5B0A1 - 53: B1F5257EFDEE106309CE66B6F59F4C138C7B73B5 - 54: E61F350020AA8E4A83D2AC0635ABA5666B75BFFE - 55: 716A0F2CF96F308233E6C68150A1AB2A661C3DA7 - 56: E640F12A22189A12AC432BC56B24B1E4EDB0FF80 - 57: 32FC87D32E3CFC5CFF05144634DC78F8F02687A1 - 58: 137421D9E5BD9B351ABC465D61A22B2815D9F259 - 59: 045A2FD55DF2CCCA08CACDC0003FE1A026AECDAA - 60: 36DBCF4C47E0257A5A7DE43422CD55644EC22F39 - 61: EAF8D4A6B16B0DD1AC6279FEDC2B49FE742974A5 - 62: 4BA44618105A50075E3ECCF9535A1A7E758626F9 - 63: 1CB62C8F6CC806DCD161F08C81E704AE32AD5B3A - 64: 11CC6661E922B0E407E0A57249C38D4FF76D8EC8 - 65: 7E8D79A50A0FBD8BFA2C605E5AB883DB8B4EA2C6 - 66: 556938179EC873CB5F36B2F415C05EE14E3AF19C - 67: 214F921517DDE6F4E7613C99BABA4F2A7B7E086D - 68: 46685E91EB0402558744A0C9EB9F1E9B2C09E835 - 69: 976CF4208EF2432FD746EA12CC6CDFA2AD8C400E - 70: B414D0C48CE5A10DCFFEA9E625E0B4D890350145 - 71: C863CCDB88168D400BD01FAEE59BDEB3B1100ECD - 72: BCBBBB50F8D8495C0A76974C593611EF11118B76 - 73: 5D55F85EA7290C9AFEC642BBD8CDB087D96235E8 - 74: 7CE4700EABB3554168F3442D53DFAA87273A75BF - 75: 9F2CAA037876C0714A3C4F0EE93638266215B74F - 76: 326D352FD19B1E1D6EDFFC370BCCAA5B65265583 - 77: 17784225DEA6523A218939BB2C7FD800E8F901FA - 78: 64202454E538279B21CEA0F5A7688BE656F8F484 - 79: F434B89C355F32288849E69C831C43A1D1A973BC - 80: 892EF8517F0623D92778F0B85B7656F42EBDC8EB - 81: B4C72E5BCB122487DE719986D2A64D165FA2ED5A - 82: 625F82C023CF34C8E387322F254592A79A6ECCDA - 83: DF802769136C3A61B5F52602D6C9B73752716C97 - 84: 910FB3FBB922399F9C62E56ECA482D99E5795454 - 85: 0FBF8429F92927FEE97DC2BA4EAB76BEB862CFE8 - 86: D5E38C9B12ED4A35DCA2990B8D47180AD449BBB0 - 87: 2D9606C1F5981F54F1D6C2ADB5A809052805F550 - 88: C5B9110BFB2DA0CE0A55BA3F2BE0AAAB233C5A14 - 89: EAF391F4C3BF6F37F67CFA86CB3284196778F18D - 90: 3EA61BBE4F6BBD04DA75F18F5BFAB2C9CAF41611 - 91: C65BE6423EB531EAFF051098FF974168DEFFB39A - 92: 6E01FD16DDA5A7A2379FCD63778F55A8629B42CB - 93: 51A8BA40AB41BA72EE4B29B47BBCFB36868C9813 - 94: C495CE12562AAC6B126A8A131705C272D4969864 - 95: 08C93C1D82DE592963BABF7E3B8BF68CAD21C286 - 96: 732B3B39A2D7D9C69FCDCF4A9DA9D1CB4277EC3B - 97: EB7BF339D86B6F1E1ECB0D2CC3F1075DD1FEFB80 - 98: 36974AA1E83255AC9171AEA642351742005D7654 - 99: 60D55DCD8E9DC4159D840E57601D1AB937EE04BC -100: 54709EB6472DE7CAF362B93FBAB834A7A609F2A2 -101: A1BDE91C5A50CE658D9B812CCC7550BDECE3CD63 -102: 6001F23118F26AD0A177546BF788B917C81996B5 -103: 5B9147BDDF6072345DF9C1A2C1BA138F28C079C4 -104: 816C7C3ECEA245AD5FF19F59F27FBE346A54B469 -105: FA44AA7F1670D3B4158BA23C4CCF0651512406BF -106: F4337F09A0ECC6F79B837EC512AFCC2A9DF79B49 -107: 41D0368270C0346A974784BE3DF07DF66EC11D85 -108: 6E59AB52A972C60FE6CFD20615D9CB9517503C00 -109: 721D857AC832372BC36D6B38929538E2661D51B2 -110: 84DC2CD71FD10A4FC5FCAFD521E5496A157BF870 -111: 139105BC993171DE9FFF828B5E8A3FFD15297DF6 -112: 866CF68F16E920CCCC4770602C4F4952AFA6A238 -113: CB740B92FD7A86874A2E31DEA72210A41143C1D0 -114: 0F21249127C64FB12E327C57CE6C36B337298AEF -115: C4C939B4C886EB83DCBCB2EA59100143A094888B -116: 8D8B95E3506414341DC90BC7F24678373B4489B5 -117: 2B8EBA1D0B9400A865378AF46E9D9E088C21CB6F -118: 35E0E3246C15E153C12F7F0F2CC7EB54B836B193 -119: 9DE8DE7278578E387580FBF2547FC7EA34096A36 -120: C1D62B446D90A6F6AB19862E37B9BA2BB36545E8 -121: 98DE812D22A091F511537A32765F6413D4D9AD7E -122: E324F1547791E8B833E68C8C54F0407B54978275 -123: 63F4926B58D517D676813076F8ACB722CD7A01E3 -124: 872CFA83AA4A9A8E6868CD68897DB04970F8E215 -125: D5A0E33125F65896D1E02F94F6E7B2249AFBD7D5 -126: A5EE27706E706856298547F5DDC5C84FB4B998FF -127: 535975C8D8C5DD9ED14A9204757B06783DD7B1FB -128: E6992372AB022447B34F6D6032FBAB707A11ADEF -129: A7BF25F1599102AB631E3052E8303A2C097D1A7E -130: 44C843A35F07FBACB9F7819CD11CAD0359A7A6B4 -131: 86859704A90DBD20F8C6365353292BE6AEF4675A -132: 7E42D899823F55C07620599AE2EA9F61D200DAFC -133: 16F26BBC5A68AA21F97E1E847A7D8500122FDEFF -134: 982C6A68E68D5A692A4EC82B4C318887FE85FF6E -135: F036FC6B3A9D6DA82B52ECF4DE3D82BC8E38D075 -136: BE941DE2A77DAE6763E6143DD3689DBF18831E9E -137: FAEE2E5227EF4A6EA64446F1C2B5220B815981C2 -138: C667456AE916041AEEA1A358516A8C781AA6D17F -139: 43103A30BF5B2AAD39AA6864B4DC255CD4716418 -140: 9EDF855E4E411589D5C6BA1FC5D1C6AEC709E664 -141: 11E94407FBB164313ADF4DC5DA6CCF382A72C6D5 -142: 9B0ECAAF97D7724A49A70958F52EF78EFB07F1AB -143: 0D72CF6D0351BAE24D684238CF2F35EB78891828 -144: DAEB6FC65CC55220F2856E859B18E34B1AEECF8C -145: 8FCB3B9085D5FE4C3311D7B8251DE553C58F25BA -146: 37F740BC58504E705B9BA7D817963000EAE6786C -147: C69222050BA9A1DD7BA144A4B2A4385D0DCF0E8E -148: C9A7364BF1F15951585EA8E18A7DC7F34E7CF807 -149: FC6D567415981FC5D4198D899794313065A92551 -150: 6CAE5BCA89D61886E992C41E8BD2F8FF7E20BFEA -151: 806A1FDB3213323C1BB6F71EF59EB24A8E5C51BF -152: E672AFA75F19AF93124EEFEEBDD1BA7C6F3C4145 -153: 32AF925E77B58DD3BD0B5EB7F1A01584ABA6C5F7 -154: 8F2454474E0168717AC71327A5D478C4A629D7BA -155: 690C8FE73AF60FA9EFB53EA7DF43BE8FE07459E6 -156: F6D81BE22841D8CA69662342AE1D4A9A7F6F2277 -157: BC37FF42B2636850455A360F54E8658FFC6CAF1B -158: 7E6652237F861B6163B488D7FBFD0BC62A103582 -159: 94E6827AF3EE1E51C1F0B9F1A5235FB8FB70E96A -160: 52305B52403FD43054EA48937FFFA73BD2645E85 -161: 6E76DD51661F45C77A23C1C779D461AAB7A7C22F -162: 61849C549D3D38DBA2BF7E98C412F9C9ACD513B1 -163: 39813928E21F4DAF72E3285544A318ECF98D813C -164: 9C94A2F324147F03ADA5EACBFB802644D7EDFA65 -165: 8A2C08E547BF37BAA4AF6B6A30922979DDBB9766 -166: A8A876D38284AB64396DE23F1237FD34C2FD4A63 -167: 078C9EF520D26927309642117136DE00CB00992A -168: C44F0EF88C20FDB32AAFA6B0294A2CCCEAF8612B -169: 064DE4C0318AA79BC00F9CB22BD6A2E7DA535B9C -170: 8931F72588D1E6614832236EADC2997A5691EFAF -171: E9902550836A48950BDF5A63E37F117FD45B3C32 -172: 96D97FC0F694249A747FE88C9439FF26BC0CB83F -173: 2E204242469BF511FEE24C5B8A5B052C9857ABD2 -174: 96F4755AE3CC7D6387368E9367B1E174475F5ED9 -175: 26DCE87C191AFD557869175DDDF850B4035016E7 -176: A0D9CE9E4D5B55C45AFDFFC703A031BE9BB29ACF -177: 09BDF1C2FFE11FFE1D4E03FE5D808FE874743279 -178: ABBAEF9016CCC804A4FCD0DFFE1025793185F864 -179: E6B721A78CB4B9E25D100738D8202C317C73CC15 -180: 5B0E055B51EEB39B67B45E1A3E2B1475DBD22729 -181: F5CF64788C5FFDC9AEB83AFE55E1C470DFA601C6 -182: CB06E8743280ACAF9E55AD5541AACDFE3EB1BFA3 -183: CCCAFB4941602D4790A0A6ECCE6D0069F02030A8 -184: E36A5D027AB9E9DB157EFCFBCC8F17712245CFDA -185: E416E2CE9DD29D2188F03E4B2073E9DADE25D215 -186: F6235F265CC28B1BED62469D316A6109C133FE5E -187: FC70536DE716C655ED333451B9C5416F4EED07C7 -188: 69AFF1A75E074106762CAFA28EBD52B6B5D90A49 -189: 9C48186EAC0FADDE94185045875702B7C9478AC8 -190: 12644FFE3C39EC3C9CCA3A661A13A1D7CBD34F9D -191: 6CE8BBCACC200E7A78843D479ED931D4BE1622E9 -192: 3807D7BA0B12F14510C36CD3DC867BEA4A24C5F3 -193: CC621CB0A8A4573C5330EC70C455270265E3CFD4 -194: 464AB86E899FCB9FB7101BF97448AFDA4C9919AE -195: 11E7B2A04E3C271068D6F15C7FE87D06D990D3D7 -196: 5EE7F04DF2B361C5328D191CFC037C1259DD2B1A -197: E3CBFFA5DACC1BCE117ADC4CCE95D15D9E0329E2 -198: 9D3D4521501FDB4B6007EFD7885164EE8872A579 -199: 3CBC27AFC4872BF7BC98CD354E7AD8996F947168 -200: B83A5733CE63F2DD8266EA8EC93333D7935142CF -201: 7E7E2058A18ABEDC54DC4EF8B9CD797FF95E6DCC -202: E6E0046460CFB3B1DA4CB9A19B6BB5F31F978E28 -203: 8EE11462985FE95EB711F7D941C816DDED7C95C6 -204: 5132D140BF66D8BCBC58B1DC34A972575DDB51AE -205: 3EB18CF69D5435CAA7BA4C7FD7EC3555E9B3E725 -206: B42B17372AC5B3036D8E067E693F73E935BD9D45 -207: 5DEE6C27BE536C94B2A9E9228F6AAA4C781C5588 -208: CEB13F3FA99D2D9892B0F704422318B77BBC5F85 -209: CD5053DFA04346625229D8CCC398E032D0D0628A -210: 2D824961BBA32C43FD507787BB0CF0FB55CE4D19 -211: BC2A382DE0B9C4A315428954F09B77ECA75DAA48 -212: 173FC391D4955EA415E52B3D0399CCE2D719F764 -213: 8B528FF527889A99E4B0A591324E62A2F3118214 -214: 5B715BAE5A69DA3FB9A83163BFB947606936F73A -215: 89D83102EBDCAAEF3543EA3834851DB22029C09D -216: EC8802D14CFA38FE98FE63E6B3F1BDB3E7D21553 -217: 936644C0577DC88B2859B6171A0FF1C0CAA69F09 -218: 52E58F4975ADF680F4EA8FF6035EFCD8B5872D22 -219: AE824F652DB88351BCE104D0F3B8078897D82D5D -220: EE6001EFC8EBEE26639414C4D89D50DCEFDC8D94 -221: D0AC69294328955D4A656E8A1948519225ECA936 -222: 5CA8C4943132208E1A4917C14916A9C7DB14146C -223: D5DA697B560D31914A52E540D46AB971B7AEB81C -224: 7965F11D207997CF686AB4C480AA510BC53F1CB7 -225: DEBCB67C707B013472844E54B19F0FE2599CE0C2 -226: D4D2813A7A8361D0FF6984C1A2D2714B5DC13C7D -227: A5F5DB114ACBDA81E269B5BCCA6FA1CDAF60A636 -228: 75E5F2A2E56586AD611D86D619FF01CC1DBEA46E -229: 5AA68D13040B18872E8E96DF8DC779C9C88BC8D8 -230: B0A2F03F4DE93A00C520658B58BC41233109DF52 -231: 6F386F4D127D2FA1F2F4A8ED3E8A41509DF84CA1 -232: 8A9B7BA28D741469F2AC8B4AA8580991BBC5BBE3 -233: 608B8724F4A5024DC2CFF7A9A52F455B45CA5679 -234: 664C7DCAB4DC789844F04DB2CACAA1868E59B8B1 -235: FA506330D1337AA6FF8FF0BA22FCE87CD6389253 -236: 03DF08E3C2DA86552577A64FBC8E8497B77D9784 -237: 27C35B1CEB3F40EA76230702E78A52E7C7F34EA1 -238: 9DD6A68BEDB58B9E88B89638E98543FF118836A5 -239: 86347CD4FE48B0E6059E8A6A0EC8DED0A9AF85B4 -240: 1EA41C7B2FA4D908F5337D1FA5E1E8CB3B21C8BA -241: D57129319BD0C4F30221A64305512FFB239A7AB2 -242: A9343153196BA3E98E639EECF62D5795613E50B9 -243: 11F7D62D79F0C06A6D016F36B15173D6A1C25F19 -244: 98774533C0C6CDFE0CA3147BB624D65F2A61107D -245: 873D52BEA652DDC833F271295511BFB164912BFF -246: E6039C14618A04E095F517A38BAF1C205F7ED2E5 -247: 3642188C11E50C54AF7F975322631EE43AFAE0B2 -248: 9C8B66B38DB900EFF221D1848E3104D134D85476 -249: 2DA1BFF1134CC8B6A690B1070F7B159940550470 -250: 4513CC83DC564FC1174B83DEB513BF5DF045560D -251: 65AFDA952D796653E1674F877D44AC22C3A0E10A -252: C49BE08EB9F989F69F05152EDD2AFC2CDDF3DEA3 -253: B1A310B7CE162B481B9A275CBA17A7B57E8B6672 -254: 4B8F017B6C1AAB7BA3466B2C6EE28DEE9DC3978F -255: DB5A3CE0593548C3931B518DA2F02C0550694841 -256: 2433AF65183F411941345962733A8860DF650139 - -Hash: blake2b-256 - 0: 0E5751C026E543B2E8AB2EB06099DAA1D1E5DF47778F7787FAAB45CDF12FE3A8 - 1: 03170A2E7597B7B7E3D84C05391D139A62B157E78786D8C082F29DCF4C111314 - 2: 01CF79DA4945C370C68B265EF70641AAA65EAA8F5953E3900D97724C2C5AA095 - 3: 3D8C3D594928271F44AAD7A04B177154806867BCF918E1549C0BC16F9DA2B09B - 4: E1EAE5A8ADAE652EC9AF9677346A9D60ECED61E3A0A69BFACF518DB31F86E36B - 5: 663694AC6520BDCE7CAAB1CF3929FFE78CB2FEA67A3DFC8559753A9F512A0C85 - 6: 274327D0E2A207844988FAC0B39E071422E3F621913D69A5CFEF23B38601A56F - 7: 9DF14B7248764A869197C35E392D2A6D6FDC5B79D597297920FD3F1491B442D2 - 8: 77065D25B622A8251094D869EDF6B4E9BA0708A8DB1F239CB68E4EEB45851621 - 9: 8660231B62CE1D61FC8BE93BD6ACDB43FF61A7AB4CC9494F0CC803362360B07B - 10: 8B57A796A5D07CB04CC1614DFC2ACB3F73EDC712D7F433619CA3BBE66BB15F49 - 11: CC932BEE351BE391849C87925F2E00A83051419DC310B288D4304D4ADEA3D0E0 - 12: 99BD72C73BEA193F7040AC279BD656CDEC7FD35E097A657B6C03B4FA967223ED - 13: 695E93B723E0A08E8DD8DD4656389363519564DAF4CDE5FE95A6A0CA71D3705E - 14: 4CCE7128E4F659BA41EE163C45280D468163ADC8C76C4937A0BBFA0CF3BDEAE7 - 15: 929CEC40E9E746E771C6AD05CFCF37641254EF5E802FA71A02F8982F525F2B00 - 16: C7CB5D1A1A214F1D833A21FE6C7B2420E417C2F220784CBE90072975131BC367 - 17: CED0CD609F3C8FF85B9CEC93BBA556DBE3CAA996AC5BEB629D4512473D6B31AE - 18: 584C9CB4DA3BE635D86E803C9EEBCCFD27FBED4AAE27B0207CE3C934A0043AA4 - 19: 9B508680D1F75D5F1E5306FBFAF7E88621CEBF39F7F5CBF9E2DBB7EBB88504D4 - 20: 5D597F201EAD11DAA0687185C579EFD702E288D5BD72B6B21238A4ECB52D288A - 21: 85B8AFD95165D04681AB948F2F0545C47A8D11D9D1866CB7ECC88BC31A634891 - 22: 93C541C87FB52D506B1B262E49ED71689A15B745E8F3E003893C8C59CFC669FE - 23: 395D6A5E3B41B6151411B9B22F07FCBAE6C7C30DF59C10CA2DFCFE333AC8E3FB - 24: 8D71AEB3137041D31ED42466EA5FDCA2EC7A35C7701D142CCB813F8C614CECA2 - 25: 3B0B9B4027203DAEB62F4FF868AC6CDD78A5CBBF7664725421A613794702F4F4 - 26: 7384C8812F6803D8649BED21A3ACBBF36239BBD17274D249369DD65E6329FD84 - 27: 3890962F7D604FE0FCADE7D8FC03C7E6285DA2035BAC5A9362C1D68A353D5350 - 28: 9DC0B41D6A6A6C194D04336EB383AC7F4EA537700D5926346DFB1379E9453460 - 29: BD78E1C368D70B968E194DCA2C6FBDA605A67D5E52824289E058C93EEE073EF5 - 30: 4CC3E428D63DC132471D3135D406F8D6E30D2480D571BFFBD64957BBB090F582 - 31: 9ADF65B53153B1CAEC84CD717E00E01C2000D0569704CE38D065180ADEE5D964 - 32: CB2F5160FC1F7E05A55EF49D340B48DA2E5A78099D53393351CD579DD42503D6 - 33: B7634FE13C7ACA3914EE896E22CFABC9DA5B4F13E72A2CCBECB6D44BBDA95BCC - 34: 9BADDDEBF24552CB1F66D32990476594E5249A729254F7B5C840728A42749A45 - 35: 13891B823D3A2CFE0D1A5E60FE89D8C091524F994CDC3241C4DA19C4BB3C2C6B - 36: C1B7EB8D130D705C5FA9EE8061076A3151F2E36E42D9C9289D85065B9AB343DD - 37: EE6A288C4FCAE34572FC6DBA3E0B7D698BEF65DCC63BF28EBD74207A2065718A - 38: 1B5AD5F31E4061F423EE11E3DE88FEF05DFED9393C268FD360D05FE4465FE40A - 39: 87C40636D0EE94687FDF020E3D165F4E45F21D62FA04AA2B9103A8187DA6E64A - 40: 70A3082DFC7582B9D252939A474338DB1F94A6DCC7724709377797D17FF51AC5 - 41: 109036D1DECE657AC6471F7F7ED33846986FDCB9DAE8A73EA0881607E5E45F13 - 42: DEDA4F3E98E58392ADAEE3C2E7B91D172551C50945A8AE9E9E1AD10C2AE510A8 - 43: 2A82CABBBB09956D212D182CFAF7CDE2F55FA33F96E3A1AB19FCCFDB668CE2F2 - 44: 4A21B38C69F755C016EBB4A66EB76B4F9D4087A02FC8C3C257C1183EFEBDA824 - 45: D3ECAA4853A092755C3692CAC3FEA5D9CCFACA2D32B59CCAE151705333359E79 - 46: 0AB5250248686AFE6ECA3F3ED89E061C0B3AE2A13454B907BBDB643A72B25A66 - 47: 2FB57AB5FC0927E8301B6933325530E90FA7A94EAEA95BAD7C3F2F1052032900 - 48: 48DE881E6C1DC35253D9C8D56E773743640F097BB7274B80EC090F1B33D1DC2E - 49: 71745158A70425E25A8446122DDA82FCFEB6BFCB593B25D79C539C6B989C526D - 50: 45D3D95F04F304BE5A61EF38357BD01E61F9BB7F8C9979458D846D9899436167 - 51: D5AFEBAD633B7D595E6C8482D8C9A429091F58ACBD84725ADBAC12E8BE80ADA9 - 52: 06BBB3B17EA95E7E00AC21B8632F84615F11456FABCDA9D99CBF079E3134CFE5 - 53: 02B8E881B5F78B451995F07116AF3549066CBCE498497F546A9772981779D908 - 54: 370C5EFE99822C30460A123467E8F151F012065BA3639BC0407ED3B3609E5D56 - 55: ACE7DB9E8F298E823B7B265BBCD004577E0029256C48684B2D7A7CDFCBFF5E47 - 56: A6C1D35F74218E57B4DBD4ED467B41981208666738FFA0D9DC53D3DE96BE702A - 57: 25E44457F063AE4EA799502C38D66EEEFB46F520B4FC9A298DF9826C9D62EEA9 - 58: 1B35B64CF659D6D7D0CA933C9A52FB0E67FBA76A304FADB7C47DD8FF6B6FF0FA - 59: A72DE68FF63BBE9CCFACCFA6859AF660BB413F9E5D0200106100919C10301EF8 - 60: CFE37AB9C02BF84AFA7A734A10317150479B791A27EFC374DD669F4EF67A801D - 61: A55A2C06F3DB74C95B33D1E962DA18772C3601EB13FE0B86A78667B2B9F9DF86 - 62: 1B8A9195724AC01AD7DA4A76C2545D2F3DC223A0242537050D7395F588748079 - 63: 29E41A64FBDD2FD27612228623C0702222BF367451E7324287F181CB3DCF7237 - 64: 10D8E6D534B00939843FE9DCC4DAE48CDF008F6B8B2B82B156F5404D874887F5 - 65: 84C04AB082C8AE24206561F77397704B627892089A05887A2A1996472BCFE15D - 66: 2B684BABA4A7245E38C3263D85B5524A51BAA8CA18444AF1B5958596BC30D424 - 67: 1D59FA9501213440975A0B27E4B52EEA7274F8794EC35B8EE4824F7B00897ED7 - 68: 60669608711B9DF3715B631B474D5206179A81D054EF5494612899728B55E103 - 69: 46060CB9DC6BE177BAFE5425C4F84F9143B71CFC75DD958E15FF7A26CC92859B - 70: E7F909C8E018BC36B59A8E7848D16C05D6BDB0EBB91FB9BAF54CC328192CC362 - 71: 7A9F75439C68869A6595EB63C61DB2BC213D3EF067EC0CB3F25E02E554FCE2A9 - 72: ADB39B3E53A791DFD32ECA83191EB82FDEF4321AC504539B257C3376DA240ACA - 73: 240CA19B3671DCC5EF174331FB0DD24B845DFCD01B0FBE52FA72A29BCAEF1373 - 74: EBAE0805FD52D3E9F5F29AEB33B6BE8CAB0F28E668990D3CB95444D9EF90B932 - 75: EA7C3C052928F0FA3B8D86B19C87DEE905E8A4B26A0A23B3C8E8DC7255EA82D6 - 76: 4AD32C1F2D18C8B7DC29D1526D7C751B89B86882FB12AA3CC9C6EDDB7991D266 - 77: C61F81C3E6B899D0501B05DF1DE32099A7B0E878689DC2A3FD5583DE90A74164 - 78: 068A8A0B96076A2773A8E00E00E57EEF4FB26886B521285A6C747130850792D7 - 79: EFAB0151162523B18147CBA89679BDAB2D9B670F5AE222A34C360C094AF1D441 - 80: 066DE1009DACA2B8390A9DC734BCE547AC4E3CC4531645BB8B9CBC0070941D88 - 81: 9FBB33B95E79C5C1683AB09A6ABFF6612FFFB4458543DC8BBC7723A6DC2BF2ED - 82: 88FEA89237618CFC0270CBCD08E7FFDAA8933607C0DBCCB8DD075B84FBA83B11 - 83: B1960BEAA4FED01453679C7D6CF78D25442BDF92AE51BE479DAB18E1B2B922D3 - 84: A7D6821A97BC57CF6B5E25953C689439BEDA79364C903A3E64B6671DC9ECEB2F - 85: 90CA93ECD3E0E7C839E4FC0F2E4748954A89B2C7338E55FC18A53CCD08ABED2E - 86: 58FE5F45B9915A5B177F4256B51CE5781662352A2DD620A946B8755213FBD61F - 87: D109C8EC77E2253B5E7C761F59B184815E46B06CC5132A92511A93DEAD6315C2 - 88: FD9664ECB814785C8474188706E6AB0952925F9B9D8E351665CED12E84D92FAD - 89: 81342700C48F41EC5B54180D560E73E5AD6782717B2D3320B42280BE11F0873E - 90: 523CF9A356076FE8C3538BDD752BC43712C7D28F29499AAAE7812F1E4167840E - 91: 9706D70E28A9E99DB15974B1C01635868A62C6567EB40903ADAE58D417B882F2 - 92: 2216F01255FF24422E18D906C64506924940451E09D4EC17E4DBC8EA6D14EF59 - 93: 64AD22E77FC9F8A03AD6E06A067ADD9F0E0360D4533014FA286CCDF40DCEB231 - 94: 9908418A2BB564AB9607D2F863B841DD4FE47EE370DDE05A9368E400F7F9904B - 95: 981A7989084E74F6D5FD8870321E860991729EED88E60D85AB5FDAA769BE6FD2 - 96: 6528EA458EFD23391E968E0DD3A40202AC94E3854D1A4642CBBE0D13A15CB849 - 97: 767FDCD43CF16CBF980FD560DFC55F67BE20510F9A0C8FCD5C749DA8EF23FD7B - 98: 90AFC4E366BCEE748591D93BA9F7C2E05A1FDA261B58D094F8F0450C8A31FFB8 - 99: 660F9F5D430BF89F5946FD4649AD41F806937641C808A80DA70660F53179A941 -100: 5AC86383DEC1DB602FDBC2C978C3FE1BF4328FEA1E1B495B68BE2C3B67BA033B -101: 7C15CDF3705457EB6B8EDD79FB75BF568692CCB778F85FA2E1D462F48EE55C4F -102: A8DF989766FC245EDBB4B7268AFB7380E4EA3F7123802B72AE2ADB938211C9F9 -103: 707AA875C6162027AC2829894C0BE750F5EE8FE8A64465080025F708DC200F0E -104: 6EFD41538FEC50459B6C2583ADE5754C86617580EEF3071D38723AAF743F93C7 -105: 5C22D6A56A4FBDB85AA70994B4E118224BB6DB2AFD017A98C2B992CE26EA8925 -106: A4A9739A1C83135BAB3334990B470164ED81F633D7FE79722B3AC6E65DADD38E -107: F1AC1AD3348EA6C949FDE09CBEE706EA0AECF3A93FC51A8A7E2BDB8CD7400B01 -108: 492D9EAE92F27ECCE118D3FD8DF63158CF709ED5069502263B8BE1C105196EA3 -109: 8691C32810F3220C0DF76816AF0A73B3FADE2594CBCC711B855E2CD81DBDEC95 -110: CAB341F7059D974CBC620BC423B02F58B5E1A899F416B0858AE1A736D4681162 -111: E08B3D16F0A3B663F319DA999DB897488D1677048A38FA7B4F1F783E4F1974E6 -112: D5587E0B33166A320DD69417ADB01CB1129AFF5506A2F655574CF2E264636BDB -113: 5A69194C22AF2B7040A8488738F96C901AE215965D611A572932464261539FC8 -114: D8E7D58CD37ACAD505940843A8BB046971C43E4D0593C6BB946B07926644F78F -115: 46B07CC026B633E6245661813D5ACA2BCC295D0B8AB01F27F517B4F2823D0B3E -116: FC169B3E5480E72057D828702F9DA4F08D141A178EB8ADEF03CA0708C1A10DF7 -117: AE3E241C1C394190FBAC7FCCB3DF0D0BC317C6E1A15993330E9B648C80264066 -118: F430AEEF864823D8C8B448F2D25452EA3ED7ABE2966ADC8C42636B69D0A1BAD9 -119: B0D6518AFA4E3590746AA5FD1E58F7EC06A347981177737AD6631B22C53B6617 -120: 16684DDD272DFC18DD40C16A7F57CECCA70DF0A96C4A066B97646953E7C7691A -121: E8208DE0982F3D8E9AC258EB26EB3F130CED7331797B625D6B65BA4BA2064C9C -122: 8ECD4BDC226FB29DD486CD77B566723E44C77194BA7A000734736DBB76F61C7C -123: 153D5C1D5EDB08F51F6353B6B7BDD48A9BBA14068923B8991BE59346A4F932F7 -124: 60E555A694396B48273D2D778709C208C0757CD15697A43CF0C2115599C80E68 -125: 7A4A15B47029005972A6B814D5E7F2C86C616BD98E6A06BD95CBED2F47400C67 -126: 3DE5ADB8E3BF8DFABB41AFE53C58FAD23427A148755148011B5C12B88ABA3DC0 -127: F2FE67FF342E21B8F45E8F2E0BCD1D9243245D50EE6C78042E9C491388791C72 -128: C3582F71EBB2BE66FA5DD750F80BAAE97554F3B015663C8BE377CFCB2488C1D1 -129: F7F3C46BA2564FF4C4C162DA1F5B605F9F1C4AA6A20652A9F9A337C1A2F5B9C9 -130: D3B11B4CBE513EC7B6F4BB5FF0C411DE405A8641CF221493447A35927CA3AEA7 -131: 62323574C7CDAACA448FCBC7091AE4AF3E04DECB0D3C7C55636BAA0A99C88699 -132: 89B7D0203387E0332622CA84A879BDDBCFF155A213997560FC05428E79E06891 -133: BE5CCE3E365FBBB139F68A3DA3367E42AA8BD79B15F5252F7C08C3C8F0DCAB27 -134: 7AE7702BC025692F2EA5AB0C2EB6552C7975A57C5ACB93FF115D303F341A579C -135: F7C4EFACC0A4CB5836F170EA0BF5DC5CE36FE2D88E76A9F259EAAB71AEF0FF13 -136: 6A35D3DADC62DFE7819519F92181B2F8D38F5E0ED3D51A22CF8A133AB628D6F4 -137: BACECC2948C41BEB73C815CA7CEE6C7DBF2E4219190936EDAC5E4680500DD4D2 -138: 2DCE89F76F4F37472AE6374B0825A9CD61619A995C7F49733F62B606A7CE905A -139: 7B65E63A0D17D68C798B5D5631F17C35FAFF70DBE90006589CA89277DBEEAFC0 -140: 9477E374453099D2F8679E1D9B167B5F1C4E3CC66F32BDD9A3748A10876A27B3 -141: 448437ADAD41878E6529FCC2FAD9BBDB13697B6CBB2669FC8150D3AA7E0418B8 -142: CE4936743020825F508CA72C8355C88224A52C348A21567E65526FF8F82632FD -143: 556A195BF23CBA5C3193FBBE472F1CD5478EA4CAD2DC6D6A193102A2ABD0FAC4 -144: E15DC6238E2E58E9EA212B0D7ABFD700DA3AE5120D4D601341CE9E424A7C5828 -145: A22022450276C5018D51CD321E0E195A0ADD003E33ECAA97028D6974B5712187 -146: 044CABB79E57DA22B772249C332BFB43C5D1C9B683D1B2D2B75F4C5E6773A216 -147: 766E1167593896BDC8793FB7CCDB1D35DC430AAEAFE1E7A96ABA870416587E7E -148: E19D72CA8438477DB71E1BFA48924C4E75EE4F84C7AA9B0911521C60A2BA6440 -149: 512EE7AA89497A761F0798C29A1DD37D1D86F1C0870519A0AAB69D265DF118C0 -150: 80C199310A2AB7AF6A808F6D68843136C30E9228A766618632D4E1210EDF365C -151: 43FDFFD19C692B6EF87C103CAD9B80FB86919E6ECDCB73364D260DA29A5F28D3 -152: 1D1DC1909A6A8E552A0F8964601102D0EDC89F5A02D3ACCED71826BBC5CA37AF -153: FA77DAC317E8C531246E14265ED42A87ADE6FC3CE351652E6AD9290F8A157617 -154: 5BBC0F8B1A52732ED548E600865AE53360F0642A5674ECC7C6185F2CDEEB6601 -155: 89C5FCBAF3A61D6FA4FA33C3ECA8761EBAB3C3467ABA7D255394A0E70811EF3F -156: 9B3ECEC85FA5BA5E0F1542085FFF46BB2262163979879C9565294B2C56842A28 -157: 4E301B852D473B5D12271209BDC350B4EC615C99CB07BDC2B379F86679B465BB -158: B306FBBB65EEDBD07AEA67A6490DB9158A768D8223772D9414B124FE184098BA -159: DE9FC91112BA62A5B732D4B708D6CC27A4B77D88E8F9C50DB361C6F27295B46C -160: F3AAC26DC5197EA8DC068D6BFC9E3EE2217D908DF5115FD236BA31828637AB7A -161: 3A0126EC4DB7BD8C0C44E5197A84465C9C97C45F9D1FB8AB256EB5681DC25000 -162: 7B6B55E2623A8EB6D70FA0913012E3DB03CEA4A6DDC0F5B875673A225F95D86E -163: BE3ED738F221B53726D8A54AB7171189D77700BCA86A2C614F5FEFBCA37EB5B0 -164: C90BCB90AEA0AB6A2331ECC17F4E68507B544910F3561D20A41916D8ABB421DB -165: 72F18A50776C9EFBBB1D360342235BF28AB259648DBC08480390333314E02672 -166: 2F1C635728444B5189540CF99D92A77057AED5A8C6FD7DEADBBF9D86815CF5F9 -167: C372E87D3540FB30E7316AF85B65378384DE4664A04E51B30ADA778E3A226D85 -168: D244F4CE129EF1C84EB40D30DA099A2D65682E025E132B94F630FA3FDBDA05AF -169: 930A3E1F69EF7BCF3B9A81C1FEB9758F60F9086B331FC170E6FA20B2A5738540 -170: 84C3E0415A9D4DA972A4FD9EE82D63B00099A2620889BC274ECB8606912CF92F -171: 6D0D4CDE9886218E9240A0C956836EA3939B558B8DA0B309CA686F3C631F4942 -172: 86E476F2F8BACABC996360A0D6D57F0E045C9D3085FFE06D2305601C30D2340C -173: 6CA5FCF07D2D4B1449924C8C84AD2C2E432A1F923DD365D81D9FDE3C4985724F -174: 9A7E1A3B1E01F24FCE4D115EB98E2BB9EEF349CF0D40493B8AB33727C9A1CCC8 -175: 165509739C09EC3486143B0C7C009D5B588736AFF2813A2DBBFD733D5840EF98 -176: AD191A623337F01563824B493BD735BEE26833E9224D971A67B453D6E113D96A -177: F99E6D680BCBC6BB384290A5F966B18D4DB38951ABE695C6444C319058BB8904 -178: 20E7E81E12C9AD28B7D65D3917051C327031F334A2F82B1F746CBCD7DC41F87D -179: 14675C8FE5CBE514491F7093AAD58E9DCF8DD33AB22F3A8BCA1CA5130D5E5BEA -180: E105BE1CAF056CF599B91423DF3CC1FB2808E0C6A50DA68FC9DB5693D1E0A9DC -181: 8FCADE674361487F88D58330ACB439A4B3E717341615BA691370BECF4905E057 -182: 70251DCDF7C899BDDD4BC745597B998506C34BEBC5DE115D4FE85AF2AA420171 -183: D987826931A47B9FF871A0F2A8F10BBB659598DA57D8ABF81714B48A475A1356 -184: FEA31B338415F503DCB3708D68F377C4267E96345158E7B88D24EC8C232EF2B7 -185: 3F2084DEBFEAFA75D0C078BED7EDA160459A3792A440C3718FB5C14C118E3263 -186: E55583BD588FB053F040C541DB36603E4959A7421D6281FCA88454720DA34C17 -187: 0F433DE1BBCA62440BE5D1CEAEC8138A2154B374921D17E2D6493F85529A5EE2 -188: 39CC27D72466D2D63F70F28C59950A0665005B4BC8CFAAA662AEEAF34A19601F -189: E7A556EFDAC11394B6058496B06DAD0EB7315CAE4CBD509E77E496C85F202AA4 -190: B90CF1FD5DBEE8A9C18764962BFF431DC560E113073828D839E11929D7D602FF -191: 62B227EFFE8222299E757A065F1B64AB73FE6D2AAC5D762303DB956BC82B78CE -192: 7B8F54247422C43A6D36977260E195D06E1DBBA44C392B3FE76DCF4A96C433D5 -193: D1400C9E8C7758B19E29C38E356EBC7ABE8C0887741B845426821C7F74EBD35E -194: 9C557316EBD1E9CDE622271E48F654553067C08D58986190BD3108D8BF54F130 -195: F005478FB35B7A389377B35FB6193AAB0E9F3C4138127D0905E488A3E5ED1BD6 -196: F62114D69C3BFA8493061F44DF01566E3A932E83B050B94ECA7A1F7F189D6471 -197: FD915AE6A50C06BA3917BB6D001A4B84C2FF8A906813BA78E80B043A91E7D1D6 -198: 2176A39525E6A57CEED2F28EDA5179172EC4F5A15BE41B6CECE8AB140FF1194C -199: BB831D2653AF40B4E8A1048309C1F058D21334AA20C78DC63B8EB74A56FBDE3C -200: 63C3D97A9F8894D5E043A707B0FEE7F7EC4C049A23BBF1079DF20B4165F9E22D -201: 3E53214E700694863284E7DC8DEC3B98C1EAF97ADD0C1431E3BD321D6742A586 -202: CB4E69B8ADACDCB20DD2D79655117DE489030ECC86C210A268B9985126CA9DF3 -203: 33EB4A42F46198EB7B52F8FD556FEE08430872D3AD16FC3FCA466A2D63CC4932 -204: 4FB1C07CD6E6ED8DBFAC72210F3FF9707293DAD1F8A4AA19F0AC8FF6C80F3CE9 -205: 22349AA35ACBCFFA6C84AB0E0231199D8353ADDE248CA1FF91010234886C94DE -206: 4DDF8CB3D4E80C9971A9AB171F9BC29FA4FD23ECEED01E3BC297892DE389D6F7 -207: 69BE23136E4AF5F52BB333DEB3F32F76610B9FD9DAC9EDE75B2EF0491BF218AB -208: 0B5CE2869EBBBC91BCC4D2E9560BCC21F4DA20FFFC96CD4EEC422B795641C808 -209: 82C17CE6066F792DF2DCE06EACD03AB4D202185A0A531E4AF9A1A2D7B2D43DEF -210: 97B1B2E7E7AA6A9D1821EE2AD6C8062AF397072EB9A8547C75817D0F0AD1659E -211: 5AA4D29AF9903050D5D329D4D7F3A657CCD038543DA764ED931560F799690A50 -212: C78B17FF5EA603A809668BC06DBD99B78561B37FF615F6F5E5B86165A442EC2C -213: 2D1F5FB13901A205B158C5DC01BF54A5BFA9914C6B19AB66F501DA64975E3A4D -214: EF7D3F61C537CAC2A217CC214CD9D3E80F4ADAAC8431768F9DB88A6571D3A57D -215: B23A6EB1184E297B5E9EC2E3AEEAEC3C8DE411DC614F2979DE285CE4D3802E18 -216: 6598F5924005CD92E779A5525636FB061A1CFE4E7AFE97D468EB3106817D6C7A -217: F0AEC1C2872DFF14F3592C5F7E83C0DC4D299F94A7CFB247D0A4B95B9B0FC077 -218: 709DA24C1CA042C055A3CFF57280D72F2B50094BBF029D9AED1DCCA3288022C8 -219: AFB0ABB463999CC9AB124C95993D62E839BF7409D91D1C377912A895523C3125 -220: 049EB53D4BC939E817C9572A5F0DEF95E4E38B4614969D866E738E3AE6E24936 -221: 1F9DF26FB5219482437297326737C0558EB557DA4EB6374805DD9A30F842AAE4 -222: 11151481E2199BE550F9AE696CBD9DDC9BE9686DBC77B619C005D0FB5AEF9B89 -223: 0767C2DE1353F58B416E3FA492173C9C39792DE46A34C6153D5878BA01E5F07D -224: 46D743927EC8AD5E403C9E20405200481961E7335E90C4EA9C5AD35B77F3681C -225: D5FFD30325257614674DE0B40F7B2DED3A287F48AE229B02C91DD2BE28404171 -226: C36F10F2463B839F4BBE7130C8F3ABF29A56608BDF767199FACCADECC8245631 -227: 4265605E9D5B02FC438C15823BDD01CBCEC073D57AD7A699D0126312FDBE4322 -228: 829F989B205831D3C5C002EBF8CEA1B5FBA3DAF966539E3B421B6C2C768F7554 -229: 406A227D2D1767E0CF417D6BF7CA58A262C79460F421B9C155513714187D10D2 -230: ADF7D0028E41121E47AEF77DCA9DE82FEF7FE4F4C82F2D6DF253ADB4E756F2EC -231: B9A11305F92002DE551314DE53739B1C7E31C257149AEE21F3A5BA4AF068215D -232: 49F9ABBE9007E85091827B49256730F552E4A2170A7B6F9CC461483BD8AE0D52 -233: 98EBCE2D0B548D9FB99FBD63D842C119F2CE671317CD080EE036FA69457FCCDA -234: 779042D9184C626289868DC73662E71F413C1DF4FECD2F08B0EDF40BD8D520F4 -235: F8AD01320E4BBAB09282A97511598384089A447F9A6A8FA298B65A82F1731806 -236: 1D799E024FD1627CC0395C68BEC456631153BFFAEB625CDA58411B9CBE137B34 -237: A9BA7072400DAC24052EF744CA60C8273D743AF357C851A7016CAFD599225672 -238: B02147BF83730CC51219F660FE93C63A7463C765395B6721BB842E3EF230E6F5 -239: B642374D57AFA89053DCB7F6E1E72680FB96E3F28ADAAF5AED89AB4CFC78214A -240: 546B4BE370BA614A1761FE8CEF8C023D6A7F968981E23A1E8E1168B25CCE2EFA -241: 72DAB9724F6E174D48E6B8CAF489747995D649828A1B1D7A6E8527D9A01523A4 -242: 30B611734127B847BED5C68A867BCDED79B2B9DA0A358DBE15C4DD578F81E6C0 -243: 986317B1D1AFD4692DD533A712718196D412F46A6F3166F417EF01306AB695DD -244: DB6329F783ADF7CF5A10E47369FE03C95BCF523558F3AEDF18B51A355A252517 -245: 54BB60A43C1E045644420916BAC42CC72F86649FE8EFEEC866CD8E8128A88DEF -246: 802875948F79EEFB707094E323A0FAA2D6D88949A08C044ED3757174492BD2EB -247: FFC9E261842E1AFDAED9F364F125301F20AC8FB0EEA556DB975211C7DB281DAA -248: EDFE0AA71067C62E894A516A72DD4BEF8C3917E46EB22D39626EA826B90804E9 -249: 98832102B93BAB4F82EE872D1DC96D2651CCC9E908C3CF25A56B59CCE20319DF -250: 1248D2D1736F1C125C6928BF893F581EA25BE6E6E3D3C46081C557DE591D6C6C -251: 7A01651D8FFA44F6695270C73066CA9D61733AE3C181E3477D11E7C9563594A3 -252: CED595397CFD128AADBF451002457FF5B0FC2AC3993CABD47F0FC3DDBC6D0F32 -253: 8797DB8DD8DDD1ECBEE1F1D71AED5D41ADCA8345277A7BC0B12DF75BB4536722 -254: 369B09E04BE27275DF75C180D7283C083162F35456152F0B16AE680DDA5195BC -255: 1D0850EE9BCA0ABC9601E9DEABE1418FEDEC2FB6AC4150BD5302D2430F9BE943 -256: 39A7EB9FEDC19AABC83425C6755DD90E6F9D0C804964A1F4AAEEA3B9FB599835 - -Hash: blake2b-384 - 0: B32811423377F52D7862286EE1A72EE540524380FDA1724A6F25D7978C6FD3244A6CAF0498812673C5E05EF583825100 - 1: CC01088536F784F0BB769E41C4957B6D0CDE1FCC8CF1D91FC477D4DD6E3FBFCD43D1698D146F348B2C36A339682BEC3F - 2: 7AA1310D573ABED36C22FF582DD50F1DCBECE6617A402BACCBAA2B71D6FE1379C317FF80C15216D6DA64186ACDF89EB3 - 3: DACC5FDE6F28330BE86BCB13BE11032485C6FD2EB8DBE9EB9FA217F4583FF9A564BB354DD768A672BDF46A2E1465D515 - 4: AD4955474387FBD0FBD0384A8569FDC80DC55FD99B5AB37718C38D471DE31798DF9D287473CF2BF7965E025C97743EC3 - 5: 3B1DB9196F040256579DAB7044E829FF12D49C0062F65A99307286A03A43E08962CC65B431EDEAFDECE0FAC3F637081D - 6: 5446F0F8400A98B847C7C99D303A948220E62272C33F25A2C55DFB50C8FF04586F9834E1F2E7CBFC928473711088E725 - 7: 7917C2E9694CA3A8527B3848FAB9D93F54FE77EC5246398F49FB970ECD2FA3E7639B9D0DC1E93CF9A2A31752F26F734B - 8: 8EDA71FCD7AFA16D333D5897026E2628E6C272E78ACAF021A3FAB244AEE81F8A6DBE68ADF9B649C90536D621067A01BC - 9: 68D136924ADEA6DE85BD5C010277B0B62EFB7D1351EE20273946156ED9D5EDCAAA284C1FD25CE1B0BAC547F126454336 - 10: 57EBE1BEA284B150F9E15F8D58CB2606FA37AEA4BF96668304B896A7CC9CB3F5EB02DAB3058E1A26E94E59799C227984 - 11: 516BBE48CF3F244CE0A2EAFF66D09A7162A5E338AD3151A527940E27E66A159838A99962AB85A9164C2A035794B57D1D - 12: C301D5B04393D60AE2DFA5E5985EC36C37B1E58AED5753246DD8E7FC36212E0183558CCB66D3CB97DC6E6FEB9BC5CFB7 - 13: 1521E9AE85DD32E9A903A72DCF1C969173648DEB84C991E3C4914649801286BDCE85CF59E7BF15D53D84E832B0E9A1FD - 14: D52238289F07E2864591953DD6AA4657C60335BE4AFDD3D9D65A3C5BED85165EAF59EF577196770B27533B3569BD2BB4 - 15: 0558EE75B48030065F6F53D1770521BAB938CEDF8EDEA3DA43D8670836E674DF97B0F01A65EB2151D1BF7341CE1E1018 - 16: 7DBFE0CF53262764CA067721002A7A16A10D6CB22F6DC554591EE8E008E1BD26CFCD125DE7BE3EF5A80FE5E5A7C9EA34 - 17: 971E429E3E7EC82B2DFAB160EE2607CC57F6839412DDE8E23DBB744A126B1EAE250021E800B9F40812B7EF44D82A8FC5 - 18: A11C06EFB06D8A01153B06E9827A7F209A6202864AE18AB984E89E98E77FF32C3CCF5F5D40FA1CC09336E40303D05EFF - 19: BF3BF737BDDB8FA7D4055177D8F06AD9228C6BD7AA2C8D0C2B3DA435F3C9D485486712EAC07CD456C16B0A03785A2610 - 20: 094B7F217646F1637A26076C749C40BD1DD57106501342C8DF8ECB30EFC44A6F8A6155FB77CEE476DC126E88BF1BA0EA - 21: 195AED3C477C98901175BFABAAB4834D559C3E93B6849B6C7006F2E44C73B30985C56BAB7415B4AB7F872913605C4993 - 22: 2029007DB07004086EC1DE9A61EB9597B8AD2A5273D28AB7B46A0E2337CFF1C66672F76E7330E3FBEF1A26C2A4541E65 - 23: E01514C4D1B44F784FF6FB4051F38197C2223AC510A80E01D13F701F6A0486780C72430FBD7C8DD4F8FC19C0D04D94AC - 24: E991FBFC45C40FFAA3AAB7C9884BAF823C03EA63A4A4CCC4FD5D6A6805BFEEF007E0460D221B65D28314010A75D0D930 - 25: 8B331E2E7EDA24D8DEA1CB4C1AB41FF75FD0C6506413DBA04E300EDA8324D56B8ABDAAF5F3D1E05515FB51145FE7F6F3 - 26: B7AECB3B1DD4E1EADADC97510A604FBF64C60C4068C44D7B33E74D065145DA6929EFDAD333A92EB98CB7DA20FCD39D38 - 27: ECA0856AA7F204653BE5EA42AAFC91306B3019C42E8581F52E76EFCF4D023BDCF57F73A8E5DC15A497B65FE1B139D5C0 - 28: 215C2D6D58DB2FA8FDFB1C2EA3692E9ACD68C6929F15DD751B1FE056E0F3792D46D0427BCD3AF72779E8EF304254C778 - 29: C22E73ADE37B480AB20F7EC31F1844E36E5C3064F4B60B4FF5715D8D84292348B5BF482CBBA3D09032B83A1377962374 - 30: 9E661F0789728B4A7118715C19FBD272C2C5C0BBB8F4543E81133888CC38B17554687753D193131B35319F1743CCEB9B - 31: E440945BCE0807DC2FE07018E086ED53751B9BC3C0052CD039CB48EE1A80A0FD72F38C90D9A7280C9082B9F52C8A039B - 32: 7DF0B7BE6C29A965D6C3A8056CC72BF36DD8849EB73FC1F23A3AA1902B869E0C8EE99663887EA76893E239C9E45988F7 - 33: 8116547B404D20AA0459B97AF4E75D44703EE8E41084F10080F68FC6FA76C38C1047B5E17CA388DED34B5A83C87043C0 - 34: F7D5B22F0A2409ABC271202B06CE4FCC70FA9C1D725A24CEABAFE241E9F6789668AAA797F414D560F479B9AF3156A265 - 35: D2C5E302EB59E8B2F532B37435557C6BAB3E87B3B768C22EC6EE867235D3AED81335C6A8DEAF009DCE362718EB4905B3 - 36: C07401041428648F80F11E0F5BC7572A0E25198A2AFA1F9F97B575E58ECB4CB6022A643665EF5E1820801D8C1B54A7C8 - 37: 5CA967220BCD51FE2243E456725856B1F3112EC7CDFDA93DA7CB1B1F6C672CAFEE4E17AF5B57790261D1385AE9783B6E - 38: 82378F12C4AC4EE4CF23F13E6DFFE15817183D4AA354C9A14FA352CAF7DDC114663E8185A25B76E21C8FE6B9E3486E3F - 39: AFFEE2FFE4287228EED3D9332FFDBD3CD807FB1BFAC1DDE4999E0A249D7D063B492D48ADD72CF4B906510BEA724458E9 - 40: 2C455A23E456EF7209A73DB89902BAF67DAC313147C337409FF5085423A571DBBC79AAD3C09BDDCF30CEBD4E2E975EE7 - 41: CAA00F63A96D68CA39B213ECAE9204861256CC0CF19ECB1048DA9213F3ACC56202C5D0C95544E8B70B655F610EE45721 - 42: C2B4602F2BBB0F9A35DA3C4510E430B9385B8198239E45F5E2FC3BD39C7B6D9AB8AEF8E7F30615C93CB811D3E0FAE6C6 - 43: 86C274D20B1D5E2CD36100711FDCAA8835185A899FB0A34CFF37279466329299A57EBB346A55009844B88B1CF788FEF6 - 44: 0C5F57B0D24D37F3CEB925156B11C6784BAAABE196774033010033D7E2495B157F9F238F774DF3FEC6F86117E2F3712F - 45: 49048770429D040EC90B9DBC11CCB2EDE463A5B263C12C3DC529B1E28B01398992051DE4AD9FE598CF8EC5F1589FA2E5 - 46: 2BBA965E13AD32B3832A2AD0DC5DADE3EB21DCB6A919E0CF18E08E6EC7CB5BDF1B87A0347AB8D4930FCA5E612003D439 - 47: A01DE48A297DA53FB1BBC9C43EFACB7F4FA47D95265A8211451F6D18B97D56CC19962ABED9D275034C0DA48ADDA002C7 - 48: AA8339E709CE63EC6597401E71F130D615B830D3ACD50A8F61ED68DF50CEAC4621DDAA12DD68267878CD4AB7A2BA6975 - 49: 5544A73DCDB9E814896E78793D6E149C407BD334CD802193FA8DC3459A4A776713F45C8DF3AD59B8F5005930AAACCB7B - 50: DB71BCF0B95791F47A586BE936FC88B538124904E39FA99E04BBD0E7A1456B614975ACFC05EFD5684D43ABC464390F5C - 51: 87AF4B918713FC85E73C10AB6304D5A4AC64CC96FA1B62A404A4AFDC56694038631794083117FCEF571175DBA4DDA404 - 52: B0B4DFE92CB69C0CB1264907B0843D588803B1CD9F024FEF2BA61AAA8AF0E60F584C754143FDE0E551B739DAD526BD2C - 53: 3F0E22A4790A955DBBE8C557B2299BFDD9D1A472DC9FA0E16AE573AE27C14D6BEDF6C3B368D8A3E99E394FBF1E0B09DE - 54: 3B08FF3536EC029B03D7664479F33B01DE1831623834A925433F002BDB071129B89109790E1E0DA2FE6D2F5D8C5FB749 - 55: 1A27A6C9A0C6F493D66E567061980FB0EB5819461C4976D5D30CC91B3C5DE1118E89CD2E00176322C42BFEBAC3508CA3 - 56: 40FE3F1E4F60AE955D7EBCE290DC3C867557650620F512EC42689D999F7FE6CF51459A361D688225D43903BF67197483 - 57: D7C98F147ACA01767A630CAE9F73A03C0E12870E79A715229E23EA6E98B8ED666D0B79B318E5F63E7869F07F52329242 - 58: 5D48009FA2A03966BC9AB3604B68E86F097F6E7B54B33446A52C11A9ABC447AB60781E8EB2F7706FBC1F9D75C18FF50F - 59: 2F6BD98F71F935EEB12216F11964171DE85A9BA01EF4770BBB1B9C1C27C51A50354FECB5F1C37C7E207D940355A1F099 - 60: 99DE86DE7A2973FE64726E216891F5EBBC64F2F6931F0E15082BF3EAC044C9BCEB2FABD3DC1CCCEDBC7F80313BE5B5F6 - 61: C148F35C0FB796AC801F5FBD4ACE22C52E86013E123A65F2946EBCB0BE7B020019AE4E3EDE83AF60628E076CBA4BC4FF - 62: EB059F7B0CE4C6A2BABDF8C8B0CD9E1E17AF300AA403CD35A6A98A5A73CCEEC80DFC80B6F76BECA4D634A4E0B996E1A8 - 63: 16BB371B2BCCA20F406442146AB47467ED37A24D1E51115C2ED5C10B31435BB9FB5CD4025156E428B5A57701EC5DBF3C - 64: 11C8E1A6AD99F75BD0B8DF1530549C6BF2E72D64E6703535AD06512417B0F335DFE07E63CCB8C5CF99D76EE1F653F609 - 65: 31466A2F0FF943F08D69924B1049181670949CECC738075F410A6EF41A8E25BD2A8DF14829701637ABA4C97199EFF213 - 66: A1390F24E088B0EFDCFB6B4E92F5086EDC10B6C217D629FE81A1C0A52481BF018341B183A48E1ABFD710FA1F61887E57 - 67: D00AFAECF9006508F47E6AD3D9E575EF5DFC358B0D2576AFA98C965943376910DC8BDC23CEB47D485B933BEF350AD788 - 68: D2AD61644DD08EBB11133FD86F973DD55DE4E67EA347B53E5A8A9091D7095F5F63C332673F291FA2CC0F9A924B60CB58 - 69: 6CEA68549CAD3A2729AF0F3D2E468FD95BAEFFBDB1BEDFFE5116A97938E49A6F1224B6F5090CC8288EDC176A8D925ABD - 70: 7A261025C8CD21B6FF423139C14DA4F880B56991F11C39BB9B21FDDE2072C4D572534ED9AE3F1E3FE4959E977E78BCB4 - 71: B3C46D3661B30BD2B66494B2DF909BD10D0E9FE4147DF4287EACDF3C2D88074E15E4284C9F9DEB326CA22E6AB35458E6 - 72: 09DCA1ADAE2FCF98AB4BCA7AFD2ABC68300E23FFA14345FE4057EE75E362E602EDB5A3F08055410ED5E93AD8B944DE38 - 73: 1FAEF87632ECCBA883117E6C1480B5042324071F509755CF6DA179987DB08E47F41C37B1097627750970EC6C72F7A02D - 74: D3135CCCE3CD1B90288DAB286F143E05BD02703DBDC4AF12335F23258B6399B80A8E12650A933D4262B419F973F4B72E - 75: 6B9709CF76D2C68D0EC2F8DD34CDC700356143A61A3BD0646F9BE30EFF9102F59A5D0ABC5B5306ED6701115C39FDB96E - 76: BA648F2BCD568F5D498D9505D2A0CD86B9A073C99AB85D9976E4844BDFE801FAD3AA22515A9FF08EB72FE16FAF4DC81D - 77: 433B7557735704CC1E47AAAF1C7C53141E5E2FF6420E3570181524724A09CE73BFE11EA2A7B059C7E18BEE7E5D928125 - 78: A3DE980310B14F269FEC07D5AD8D0F9CEAB17EDE99F97849F976877027FAA37DD0B492198467C0DE17649167FC80C9CC - 79: 363900E86CF859C978F1A7E860AB872BD9AFDBA445EDF044364313BC29BCCFF9C912D065E55288976B5804D0861D1708 - 80: 5DF4164BE6F6706D8A3A2FC157725565CABBD520B0B198CC25D3CFBCF2C5FC14D98EC46A226A61C72AA213284FE880FF - 81: DAF3B3602A2B6A0E918C78D72885FCD9B24377879A2E8CBA72DCE8BE3C36FF5DE39D01ADEB4D7DCA8773A3438EA415B3 - 82: 8F9751EA2DA27AA11FBCCB55960A5A5D648D34C81A36EDFC9123255A4529A018AB9230FD07551236422E1B53B06A8BE6 - 83: DA5E38532DB4AFBE5C38BDC272889FD8B18B249C9658C6806F8BE25743E89AFA06860C117E1DF6067CDE4E2AA5A359D2 - 84: E1B0A43B0F121293EBB439C828ABDCADBDAFED717796CD0A8107237158D1F55E77422212B7450CF230CDC49B78F55A09 - 85: E0415562EE8DBF78FA3A543D0BCF8823BF3240419ADB0339DBA53AEB565D861448879740051D2831DFB0791D5F537CB6 - 86: 2061E08844332CBEE5C5C81C8DB9FCFCBAA9D1B4FDC14FEA69BCB2D4B7CBA02D4D179EF0BAF4D12530584F9AA83EDBC6 - 87: 8EB1C337D49DB5ABF181CA2D1EB0D5A3B530BEA1720504C7ECBCF46FE1B0DFE5365EFD119C0BDAE6D92A1F3BFE62F4D8 - 88: 5389909A11359D68263875199B2D53BC2C473D44BD5ECCC562634DDAED80C6075A35BDA179AA3129EAEC1A11B87AF6A8 - 89: E4991FF9FEA81EA2C32583CB642941BDD7677B1680B63825F2873515C632BAAF313447BC291F03F5F493FDD66DBBC462 - 90: 8CAC77097F7412CE765BC20B900A8DA83BDD561E6F0BCAD987C677A428A42D1D289E0D8B2861135F33FD6AB3F593F4BF - 91: 38C9510779D5AE1F114D0C3C3015C9869923FFC39E38660048735E7ADC4BFC073FD90505754692C3FCCACF40BD5E61E2 - 92: 4B1D3D0763BB619F0E898E0DD6F06020BE5D1828A798277553D607F273C74498CE505F160F2961B995A1D4959C3D0A69 - 93: 8820CA3444593CA1896328D90A836B768A271410BAA29D1588D22EF68F2D0F647BD2637279F2C4469FE7DF2625EE1DA3 - 94: F5BE62D7CF77289C4D3D656BC1328ED6D32A43B2DC2A9F2615D7C8F97FF3EE28ABED0CA6EE02E9966AE16BD0337E25E6 - 95: CCD1AE814F18CE64E176D8895364C8B600CE901573079DBC7EEBAD25CA1FCC23B48E7E352BDDB625DF03B2168F097F20 - 96: 447502E039A85D13DAC5EC5D009B3D9607D6F0E37BB15A0AF7D1513D63D2DDDDDF4386F642D6D7B2B47DAFC8ACBB4297 - 97: EF3C7F9D484601A79908B61B8A58049F63A0FE6B33AF31706332C5C4D5003A93D2C4DE7BDEC5EDE6E9A9CF4362BD1CA8 - 98: BB7E3FD37861E3210AAAE39E2F2F3985B6143BB872BAD077D71E2545D2E9F95A898930BF6EA2C48F2411437D08AF93B1 - 99: ED83072604C544B7B8BA03E61D6F9EDE575FB35DB4261B7783773F3DB5B1944D6D9AD484582FC78A0F7505988B5F1A07 -100: 313B0350C45772FF6787F1E2831CAFC6C8D77162BE100819E5142F1F398BB0FB3A3123FBFF2C94927F7196386952067C -101: C746055CCDC870C9FD92D249E19641C35C4908EAF0158284562897B21255A84D9051D71E9F3C0C6B5B107D7F080A765B -102: 39D7DEF4679233C60A2F2AD6C5AB9EFB8741E330A533D15F912BAC27C61C6B26936D6B70FB8723B916FAA61CD0949306 -103: 32DA7CC15BE7214D99C928E817C13B87C23837D0F4A0949E8CCCDCF66AD9D66E7329ADEBF4F8322E4737A765E4E5B69A -104: D847BBB38306F215A96B2D991AE3ED8165BD9E25561DDC000582D968D54318D82F0FE0E331E933CF2BEB9D31DD3EA4A9 -105: CB186B1873DF28A7341697806DD13B3A79032BDC9DE6CFD5F8DABB380AA7C7CAE453BC6CC53FE0ADBB2A13861F9915AD -106: 03C82565471F18CE9EA9BC5C945179D1B05AC9D1B7D42213E4C6D331E98019F5429CD4C68449E20E17112628E35B449C -107: BEDBBB184452D605455FF4C247C349B589CE3BD2D9548CF7D70C33347BC3EC90656E3A4D8C9AFEFC42356240A4B396EF -108: B9227B25C189C98256B061A0EB3A9B95CB65A1EADA1CF7F99EFFEA0A3D13153CDD0FA6C5187C6EA3BC6358BEE389DA76 -109: F66BEA2EDF972A29C888BB2E213E30C3583F07D2FC4231A4FF39CA1B8AFE14C4F7702D6F24CB69CC119A5709AA32DCBD -110: F1D96469C28B5B74EB4451F775813DF3512C212B9B9B07A3215FCD3C98A392EDF752FF95D0FA8D991E82B5EB3C62219E -111: D443F41B6461562048765AE37FEB6C63683800C4C7AD7DC4C8D7D6B67A689F8435FBB2940506D6722A09C0F3E46D6C64 -112: 40790C95C391EB482BB315E6153838AB6622BB651EBFE979B09B7456EF021C811FB216027D063732C5B83F0AD639EBC3 -113: 55985DE48CFD269E07E5D2610D64FE61F14E874098E60B681C95393B7F2576A0842F086DA49CB392195CC1333166EB2A -114: AFBD441595F4AF79546D0F56B17CA57A3991ECDAC87A029E3A51FF4150856F19DC7D97DF9AF3E92A3E75ED5993D1F259 -115: B3D06CC9DFF506E46701E6E66B69CF0B47167E46407AA348522CD913CABC0DBF1E0CDE6AA1FD0FD986C65393272CCBCD -116: 0FFD81EAC822E16262F242DEFEAF1FBC864F7BAEB4C75DF2A6D6B88F72C8CF7314F8C57463D27B85D123C1F5E0ECBDB0 -117: 4F2717491FF76CEBD2F5F2387B16DAE119F584C8EF4C503CC4CA980B0C780F7EE8D74200EA147F0E2443D194293CD0B6 -118: 926BE35284BB3E56620FAB3224B5213E06FBAEC1D3C8642E8ED86066AE531E6B0547320CD8266CCB14E8595AC2AAE69B -119: EDDE7C594252AC8FF98A48E682D6290B0381C53835373F4F9F2BB5923DC020878D83F2FDF3B9412424D5C70EA1BF183F -120: 2460963A3BA372E93A397D0BAB1CF3E4141785818AAA7BF92AC3658E45B6B55D1C9D1705D46ABC69E0F2EBCEA48A0464 -121: F699225B801D19D3A7BB057B657A8BFD2D7E5AA8CB858EF05551319D4BE76D25865928CDC4C53464AA6D12785B870EA0 -122: E4CA222F516E44719D874BEF8622C600DDBC475F8C80D664329D79372AA070900D84912C885F1EAC370D13C28D12FB04 -123: BD05EF18A7914C1C7747568B9E5FD61F7B0384E0B43FE3DFDE6C01E38A503AC98F9F4D8150B2EB2DA889A3F4B10B256D -124: 6C701A9BE9FEA1EEA3B702A3183C35BCE6B890BC623E8FAF3CD086DFE563AA7879B4ABF639FED909307F03AE4E7D65A8 -125: E87693FE710A95FBE1B6DFF46B54AFC430D290B2C7FDBC0BF551C1E8F4F40B44B68CEED6A18B0D7C4A48648ED97FCA99 -126: B371595A7AF71BF1E8FD22BD950DDAB0FD642F5D3FED006A6E66D1E71E47867CC74A7018BE3FCA6829053454A52DF1F6 -127: 0C046DCE7C3ED50A4BE7ECA79FDEB9D821EBE28F5D82ACADAC3D7449E6892789313679018034A2CE6B42F006C02F19EE -128: A2C2ACF7CE4079C02B7F38E2EF33BFF531A31A7C7EFFE712C5348B4D616C0CBA9B152679317984EC632D0C70EB11EECE -129: A95DB6E5CCD191793AD20179BFD63E8C7AEDF0CC1084549F73127E3FCCC738B405AC2A93D692E76214320089121073E5 -130: 6ED4BDD216425D5E91458C254152ACBFE8F4751BE0045401C1CBE1E2979ACFAB8384E66816D1CDE56418A9FECBE76B3F -131: 18391E55459C665CC076D3152EE0CFAA5C498595298C4D82E2E160C7ACEA15D7FD749E1D5566A104E7F24344E0BC142E -132: 0C841025777221D8F7E1271E03687A380250B269236CF5535D5CBD77A480FCE6872E4885F62DDA17136C9AE05F07FAA4 -133: 0E6A87DDCA034B11F6D221F17F53052D85B22968ED7A2E2DFCD13DC1DE64C27639A1DDF29ABEBFDF02DFAAF687E3108F -134: 8CAB0302A4402B1E9CE08E4D87F6B9D82F17424C5DDA59A2670FC29DD8F504CC7B15474BA179DB20DCF3D3580EBAAFCB -135: 17BFC685EE89A404752DDCCD0BED6B9B0696C0F968A2D96749A2BEDE10BBF8E57F4B1AEDC9E8DE723FFCC22E3F309C81 -136: ADF0CC27BB9D359090D277C3A47A3C96E1F0C6598E9ABF460ED128BD39565AE464B39CD6A75DBCA75298181AF1356C94 -137: 02AF7C886E86140E74F6635431732ED6CF9FA4EA8D27174FDBAE9A4D92EB03383F0419B26508C556D6A0A1E0777EF38F -138: 806150B2F09CAAC8311C4E1BDBE6A1FDE29693AFE7DD49C9929A85E593F2184CC27C895633FAB658C7D20C6EE545B827 -139: D0A7B0CA39327EE0BD4AE02B870903A1400B7A8D28016834B4F0F4C49A5F62581D4D4A8FE658111B80E6A6C1F2C9B691 -140: DC19DAEC1D86ECD2D9FAE6A1BD4BFE3A7C4EDD941DEFD83A92AB50C2C48DF2B9911ABF2B91CFFA11BB839692BD80B2DA -141: ABB814006D0908D4BA2CFE11B589BDADD4A17CE1E799B55E44600A7B2A0225E6BF6AFAC61D8C7958060D1F28579BF129 -142: 63F83790ED5882A85BEA456CA446A2401644E3C9BFE3D4F8A54210DBD6BB807F60F9641AEEB994D4CC8A6090F8D58871 -143: 185FE5D0E6764C660BFDF8D581CDCE8F118232BA58CDC4BEE4C021FBA072C6D04250C8CE3DA4DE58FE43C8D0172B612C -144: 57D66CB0A11F02127FD13D435B6CB6195E30EA2562E92C88B9F5DAAC5EC3E86F738F05C9C949D66F04D4665F942EC991 -145: EAF6A0121B3B4BECB5EC1163FFCC4ACCE76330D4236427646767487E0B5F1DD938204B3F3848082313C2170B3FD7F06C -146: E6793995C6B7F03BDFEDB7C41BF75FA223030E33E47AE9FB75CDAAB46AB9E5A580E864301E94A10C87EFA08AF4CE0ACE -147: 616846974DD72FD90BC27DA07485D4E55BADFAAFDDF09E0CB48B7494280DC0CC20A524BD3BC60E28723F939F915B838B -148: ACEFB24F02371015638A8D2D1F8D0CEE4CC71959F328D7B443F61BE497E1AE5D934BC47B7C3611418862820F6F2CA27B -149: 2F3F1757EAFA15BCA9E5A463D68AA56EAF59BAD93542B89FE7C733F3991640595298CF0447A35A207388F0160BE3FE21 -150: 2604AEC3CC0CC8A5F3C51D4B7977341751D35EBC4157A4CC3A5915B65370DAC58E0F7C8A5E3517A12EAFF69FAE323CD0 -151: CCD7214BE7EEBF6B1B203675A6C2A77646469794DB7841511B88A6BB95570773B1F30D494CA56320A6591F55FE011F7E -152: FEAB9CBB082877BFA8D1215C098BD9131E9C22B8F4ED666D1571F467771EC03FE0BDE78D7E24EDC5C9F14B9488D24966 -153: 90948F9AE3B1C195005D81BCAC2F3F32629B1D512F922E4376456782BCB5D916AAC5BAC7AFBF6DF03974AEF73C48CA5B -154: 2FDE1A345A9874CDDD1C966413F518D3DB91AFCBF253EC5F6F90228C904977F65B24C1039055E6AC94A7111CE00C0EF3 -155: 285F4FE6AAE37FB6DE5318AC8F07E1CFD678C8EB42D408323989589CE4D50AB96684BF399FD5EE775B4EA583C6DC4BCF -156: AC29B1F850E3FBF0CBF88EB04A23DF73E966C2D9F10259AC87240B740B94814F42C1D9EC460C5353D4518ABF4FF72A3C -157: E56BDFE4DE330B91B58DD9AAD2CD203A74FA71CC2B7973F5A055390D99A498A7C71844EE711D2989C29A481A526482E0 -158: EF6A9215377AEC65A6382C6775F7A703E0C56665B3E71F877DF5B00BAAE6E0C5E963B2C29D7E57241A6EDDB338683CA8 -159: 2AADD60F700F29CF5F1739ACF5888CC137AC0D57FC113549D1153881287C0E598728D88E19CC37C4BE1BD9E1AA2B510F -160: 1407E4D4E7E572DB091E06E73D4F0D59D67A97B861716318CEBF80AED598F26CF1BBE0EC52918D3A78A434094939E2E7 -161: EA5733A41647AB8A1A717550B41FC53AB1CA49CC28DF772B229D94727E5CA98FB18663EB0EDA37F81FBA387A8A4F4BCB -162: 9915D517A86107E27B1F78AF6E7B0896E3D2E90C7A917CF16C9F68AD4F17DCC736F0F2D8CE5C7B634BF297B197D235C9 -163: 5D9E3D02EC4088C2F3D514FDFBE27A9DB53B0037CC3FFF615B4AFB3EEF279DD7A0B8882F0DF5E125F06302BE9A30C1C7 -164: 0627AA95EB148A7682118D502CAD7ABB8BD83E13008364F5E8B8732EC3E648C0D0B78B7B3B0E2E5A58103DBB7F56E4AF -165: 51BAFAFA927821102EE620D2DABFD4F9B18C365707569E161C9A7A33B3C433E16783C87DC2A949732683E951E538C3E4 -166: 08D9894DCD5C8FF0B4A8339A75FA95E9E88C68427CD8DBAD9297ABF02598BB6ED3FAF8F7B51470514B3BB9A6C74A0137 -167: 594B4CF5BE4B482A8F23F610F7E57493C708B269207B246E628516CA66D91C7965F9D830E1A245BA191113BB2E2D19BF -168: 02FDDB82B56E4550B8DE39C7013BA1B3B8E1EF0186A1EE899FEFEABB5B83BEF41C76CD276657E69FFBF131D78FEAD875 -169: E1420C71511116DE6BD3225DFDCF54D6242DE8E84DB032E698A5548F5311D306B6B3AE57417193EDFBBB9BAF516AD804 -170: 9616D9830ADC19D61EFAF62B3B0BDDCA2182A3F9A340BAD5E347A780716A73D2195C00C5BA4783C41006D2B43FAE98A3 -171: 1A5816F33CEB8F566AD383C47850387535E020A8D0B24DE45135ABF217599664E6E78A492ABD367A7B04A44CD1B8912C -172: 5547E5190F50DCAAFC3CED495AD238852EDAB167F092FDA5648EBE8A602F073849F925B3F76D4E5506FD671885B236FA -173: 5D6A6082AF10CDB8323202F11A79FAC522AD32BE9620F77C24C809970F1F80D7E5468BB11FDD63788C8FA46F553F9B23 -174: F9AF7AD6AA566D2E80478B50B043DFCDA40256A2724351BEF6CE819039F541D8BD88DEF486CA1E2256B18417BA0F5472 -175: C3106AAB2E9F2A4C772274FE1A36BA98F3A9AA94BAD93B54ADDCFA72CFB084640BC3A6881BE9A2783AE191BE13A7E85C -176: 713B25A0A73DE00F72FB93E440DE6828D6FC1B4FE631F27538A4B37A1DD6E1F4C7928A96912590F750B04BBAE0132B96 -177: EF3AD97AFF769E1450656A161B0BD0D6B251ABE681F0EB0EC856D125E2DCB5B0D04D787232FC9D941271AA62E7CC28A7 -178: 6B3052F9304DDBD0EAE8ABE5FAF982641A5FE98D89F531373C74CC6E068C1D9A7E57994C2856EC490F607A1C421DEE9F -179: D28F0C437E0F812CFD4068F7FED2068E2C16FA89D3FED5E43FF06CB6A9EABDE3C81F585EF0CCB9CB4EB1D3BFDE7AADA8 -180: 4A7EDFD099BAE536F39D27E28EEE09683B4381A237ED49B152490108FBCB5B008B452509184F24E2C15BFF448C4222AE -181: 389B32D6503D04B43A0F608D171F79DDED2CC8F82919FED673084DAC52315A72177FEE73A489B0344EA3FA4DA2F7B82C -182: 335F0D7D2EBEA7236E1A15D892923FC92F184E112FCF749E173C3109FA4C33FE9E4B0353DBEDC0C9974A51EBF3A9620E -183: 7A2F48F490C5649A4875ADCC8B37A06A3D76D08ADD0613119E7D752D3E39E3C4D9F28E55230B1D0F0FD411685671C9E5 -184: 064EFC6A149C8BD56B889BB0D0C427C47349F72A57655B97897BFF17B3C997C3217E03F63F90E6FCDD94847FF243B6F4 -185: 1AC5D8B018C1981AF1CF0FF849C5819C42B0015B83A0111C313F3425F9B6389D7309DB7E5A7B17BB50DE72F4B4F7CE03 -186: A8D496F68517A880B7C27BB2A7DF5EECD65A79355F15645385EAF830F95B14F72C57C60E030610B6263E7A9430602222 -187: 551345C9934FD4ECFE647A7EFB9E6F094FEB70F3935A6C81A33325CB8B15A4816D3FD1AD3FFC88DD0F47CB143E8B5EAB -188: 11EE22A28D7F0B7BF6E8110A12E3413B58FB6A0BEF872744F579CBC44990AD83BDFB13FF5C1177839590312DAC646AD0 -189: A9BE399F1C9D3DD12EB61E69E0BA0AD878FF86C9A81DB6F36DA6F29B53B6FEBD998889E3DA5D1E65B35276056D019307 -190: CA0299A194825AC60197E2017618A656D8CE4973C6B2FF434DCCC202A3692373BC05BE34CC5F4E7BBC133D32D3A7D17C -191: FA0B8D238239F40622207F0CB6B08ED33DBA359ACB9FE7FF26EA0E1893F909D695AE7BFB87ED74199DC23C9E68CBBDA4 -192: FD7ACCB685C639F49D4D21AE57E2D3971A902D1892737220BFEDDA0FD89B33A97D8B96B18773910220D268A61CCDD070 -193: C62FE53E61FED07C1718A5BBB3FC65141F4F294BFF1CAB291EF62DB856953EFFD0FAB5F3BD20F8E4AAF48DDC71F3EFDB -194: D0882A9FB46B0C8D2C70DE5EFC5569027B516450835E3AD9C5FFB7A86962B55436B692B4E930B66D0CDCE2FE3BCE25C5 -195: 8DF5F9265406DEB1DCA57AB46E423AE7E9D5EAA1E650EF9B399DE74C175C694324BAEC0386AEA2AF0C75F2AAA1F4D421 -196: 3887E609D8841E57CE7415CCF815C34D7A9A31C2A1A29B9007E4D826BDA8EFF5EB8D8DBB6F9496FD2565B83ADD400DD7 -197: 0694FF8371961712D8A35970009BE8E3953E09E54F119EDFE4B947B11CFAF078ED961AE1F335BB17FC389A9EA35F7EE1 -198: 99A8EC7449A5E51B5FB4F6E086714960ED74ADF8FEFE89C1F49054CD34C3A86E673CE92154BC7DBB1DD4F780969EEC3D -199: B138AAC5B451C7558D02C518636FC80BF49FAAA6AA972D68981A684F500C43E9DDA171AE6168BA8EC2B52D0428FAB4F5 -200: C3FB89D604F306FC6EE2AAFEBEFBF69D26B21DBBDC055166858D527A4501FF479894B533398334379C182AD6747BD1AF -201: 5AF5504C1F18EDF72C918A40EBCDC51B898FA45C42CBB23A64B2BCE44F74716E7BA9465EE8E347E33C3A6DD6C1ED78D1 -202: BAABBDC830ECD27BE8B089AF00D4CC0C9225533721AEF1D24070CAFA20789407FB3CDF27D2AF1FE0058D0BFC85183E09 -203: 917496B4E3D0D4780A6480FCB04B998A035047BEE524ECB437FB2558A093DB8E1A62E62B0C2B82E73463F7E630DCB197 -204: 24CE0EB4A3ED509348442C252E7B173108A20AE8C5042DAB97431CBBB07C5A473B14E44CC5BCFD2101C8EA4DD88E336C -205: 82E9F843BEB8669C9E9A05B4F8F51B59EC6454659E5753CB6327749E8D3940DDD8593ECDBD608A6564B1D638F581D2A0 -206: 9ACDFCF2BCE50A32B083A69418B2814B10571AE455FD5179480AA02A488962B28CED5D7F54DF3569DB34E11B6276E984 -207: E83BF11E8469A7F17EE92CA39BBCC34BE04316C71DC698C008B85B5D578BCE3E3528A4001C4A39DBE0BB24B97973AEC7 -208: 8A1A5287F1875B39342B60DEA85ACB93BBB3A4DA75C13D15A88253BA0591C7308646264150B19A2B698C288419813759 -209: BFB72AF495427F4DA2663D7A71F2CFB08AAA195E9F27064B4360256AC4CF243ED69BBB5DE791F058BB2BC80149B71295 -210: 47BE392C89A6A1E9FE451B5E869BFBDA0A9A23453C66D81FF3E716DA65F6E4CCDCB6CFC1315D627B7A4D0938E04FBB89 -211: FF110E7ABE253D27C0109FD1A4AF2A89290828BBF06F3233C1E0CD979C1372F1235216B66D0BAF3F9FE1E503C6983746 -212: BAD05016EC91AB339F8F5790A86938AAB9F9A96C317F61344BE0E49FC17F49B47F11E35DFDE96D1AFC74D73F42E73712 -213: 5DC02FB03284E604C66F38F61936A1557AB265423C36AC4C66CC5AF4BD282BFFC2EE33EC924FCD47C8B771695494B487 -214: BE13DF098FA3CE6C0BC1EE8551D28FAB56989C41BC273F1E5289204A172266C294F12E631841AE8ABF90DDF15C9C9993 -215: 3EE39B0127853E2B42ABEAA2C3CAAB17A8474945CC140EE09146F2B2A9844D8490AEA003FDB7329525F4E3E49D222F8B -216: 313B503A0480DDD1387A8CB1DA3FBA0773C465964AA49DB3893B973FE2345402BFA062532B3D90FC5A679C95FE97C1FD -217: 3A59FA6049CF57C5F0459B4DE0AA3EA727A223E63B9098177D9ECB6BBDB59DDEDE8E0DFD798DCFFE9B641BEA32629745 -218: F5F5695B468E89E150B8D0769D5866FAE28D2F4B74EB01DF91744F06D88088681EED0CDBAAEEAFCEF069680FDAD53CC6 -219: 9F3217D32F0399547A5F5476FDCDC45D60ADB4EC3ACA0C9AFB12E3B914F5A3E6A42E673A3156F842C482C9AED6F452F7 -220: DC10EB95F4A95C62A62361277E3B7B4EBD26A0CFB4D40BD9B60124A718E64138F634797C4AF404E38CDCA2AF1F891E8A -221: 58B9D8007536A0ADE76CD798928830E8B2454565BFBB9B9CB4F212C423CC01B2707F23FC1B98B153E453AFF75228BFF6 -222: 96588A4D0EAFA475F6C5EF4A541057F2B42CB39A80D9304CC42FF36E52F4ED01E59477468D1C4A4E76689EE63CF3F2F6 -223: 75F4E8ABE2665CAC88D4AF0B5965E553667D44F735BB6FBF50C200EF72F842BEEF8247561898258CE1B91B03FA181BEB -224: 01F15A3254772AF6633FF9071244E79F2A5A5245B01DE8EA96BB83D4EEA7358BF2A5D605D9444E8FBB603A93E3FA3533 -225: 23CB6BF2EDE9199F57324CB43E9DB7A1E8FADF8997295DAB095297108DE429A6594DD9B80EB8BEA86E5D5D3C16A3E8FA -226: BAAA44617DEB6EC6F686D609337BFA50278CFD4E7DDC18F674A604151EB26D1D2904BEF0F928CB45E263321B0EAD96B6 -227: 2869DE18E00085B176BCBD60DB172EC57B6DF786F0E6AD675773F5923516B35F87868579DFCB7C640CB350ACF4BA661E -228: C71EC380475733D52C6D05F37A5356DD4B695C83B7893EE1F46DCE48AFB039112C5A23A11A8898AC5C7F9149C2681608 -229: 4BA5FCBB593DF2612912E0910DD1B42CA8566F643B7F80BB92B79079C42F787936E0CD4CBD12C2315B1D4264B4D40C20 -230: 3252104DB29CC76745BA21B7F77F994E68780C7A0C3679C291C7F02BD8A9719A0F7ADEC42930B6EC3DBEA0F1723016A5 -231: DA9B50C254272DE5EF502DB79D01D7685097C469B523910842213034458E9051A74C3E040778AFCD75D8598E636EA184 -232: 5D075E4C4B7A0CFDC184A2EAFD1B3E9223E21020DD04DF20F5964A8233C5A7FFC5C623AAC2AB5A1F02EA8D1A5031F593 -233: 16129C669BD55B939C1FB73215E79D43D47052A1EF756D439814B4DCC6C7FEE6E8A8925758CC9EFA3AEEE49989590554 -234: 06173DEE9A8BE76CDE992894F06D26A70A5284F120AB05BD887F6024B518A6137DE60D0158D7C34F4E1F85A6DDC20AB7 -235: 2E5468C9269C522E7A246039CE96F0491F97643776F41A2A70C8958E139D2FD106B952E8A5D766783FDC7A740F0958FA -236: 893C17BE1F39231F4C98321B0473B04E2CB421E5F6A0D9A22FF1D6E0B46884A52CB8721014280B39C5DA17E5F6CC5EB6 -237: FE61D7BAC3A3159E2F76D090871529ED846584D5710048912D75BB99674E595FD3D483B665287A86AAC5A58D6B1138D5 -238: 2ABC3C3D615EDCCC0235D36815DB403378E957BFF9AB44E4D2C94B9D5890BEB3F6C58C4BC6161D302E70AFE6B8736482 -239: 4C592636F932BCCEE6B161ABF1A565543A89CA6C7CABD2E3A3547267D1AA0732C76FE1677AE9888DD919B00A14C3F5FC -240: 1B06997AA47379409CA92F969366FF92AE888201B22ECADFB644EF6B3F8417AC220FA338F4CD6C9B08996F0CBFDEE947 -241: 8917996EFCA60051306B4D1992911CDFF4926746BFB41768A5EB407A2F2A492869F1C404EFF07B3FFBA03C928195EA3A -242: 5FC13C39D40A4528EEBEC469AE57F32F1BC8C4E36555CE49618CFD3E74ADE57CB8D023A07B8B599076ADAB673073390A -243: F66A41D3FDC709E33E6511E329799164BB18FAA44930F47BD6DF4472C5BABB1A41A514BA76F89825265C43DE407EAD03 -244: 7B23F639B5704B57AB3459FFBAE5434D6E1D913494C64081A51613B147C94E6585C8DD0C2E887835BD147DD59BBF72DB -245: 10E3C81532095BD18D7252708CD19FA796A43EE417721CFFD047FF54598C38A69389B357E14AFE69703A5863336660D7 -246: 6C015B143565592127A5D9E9C90766946CBF83388817B0C26E605C03A4637BCA7F3975BD34712177B4B7A5313BE4ED5A -247: C8F8F0A269FACC4D325F1388CA71998FF730415D6E34B76E3ED046B6CA3066B26F0C355417CD261BEF4898E0567C05D2 -248: DF7F3CD66B7DCDCC6089E2D51C27561AC5FDD261B61ECE80ED067C35B146610998BCF693FE3466DAD5C92BCE663D18EC -249: 30EBA9B4F06B52C4A2C4791972588AA2F2DA6D606D6445FBFFC00477BD69D5106070F5049A0B5CEDAA93506AD7E0B84D -250: 82A241F49733D9909BC3B7881E7337AD00CE85FD8BF7D8B8F531767E48EEA606A04FA75E038692E98B89BD8D673CFA82 -251: E9B1E02B6F1E2EF5902BFDE2A3327F960AA97B5D585CCF621F1A509FA02C280EC6BFCC13B293975AE9727A818A7658F9 -252: D931609260468BF52988D10632B2844FCADBB1410536FE332301107E0512DBDF48159C6928A7E05D4018D2B474EBF927 -253: E401AF666582970D7EEFEF6CDC74101859CF6A14371F4E650D1CA5C0E50E5D960B6D5835F170DA9274C3E55BA6BDF6A4 -254: 98154F1CF4569B9C64DBDC42C629637185CFA820502B4262B1EA6C0F782F9A1187D23D300F7B9DA8AEA07FE985490F81 -255: CBC5A8273028CE5CF0EBE5651C5910ECF16B6F18E4DD28749A72C0DCF2110DCA0A7BEA48512A9EE96277AB0F8A12A3CB -256: 9BD2B1BF7A89613FDCC76A3E02DABE81772A97BD5E6274FD9FE72E219BFFE88C5E6F681A31481485DCB85DFA34BDC657 - -Hash: blake2b-512 - 0: 786A02F742015903C6C6FD852552D272912F4740E15847618A86E217F71F5419D25E1031AFEE585313896444934EB04B903A685B1448B755D56F701AFE9BE2CE - 1: 2FA3F686DF876995167E7C2E5D74C4C7B6E48F8068FE0E44208344D480F7904C36963E44115FE3EB2A3AC8694C28BCB4F5A0F3276F2E79487D8219057A506E4B - 2: 1C08798DC641ABA9DEE435E22519A4729A09B2BFE0FF00EF2DCD8ED6F8A07D15EAF4AEE52BBF18AB5608A6190F70B90486C8A7D4873710B1115D3DEBBB4327B5 - 3: 40A374727302D9A4769C17B5F409FF32F58AA24FF122D7603E4FDA1509E919D4107A52C57570A6D94E50967AEA573B11F86F473F537565C66F7039830A85D186 - 4: 77DDF4B14425EB3D053C1E84E3469D92C4CD910ED20F92035E0C99D8A7A86CECAF69F9663C20A7AA230BC82F60D22FB4A00B09D3EB8FC65EF547FE63C8D3DDCE - 5: CBAA0BA7D482B1F301109AE41051991A3289BC1198005AF226C5E4F103B66579F461361044C8BA3439FF12C515FB29C52161B7EB9C2837B76A5DC33F7CB2E2E8 - 6: F95D45CF69AF5C2023BDB505821E62E85D7CAEDF7BEDA12C0248775B0C88205EEB35AF3A90816F6608CE7DD44EC28DB1140614E1DDEBF3AA9CD1843E0FAD2C36 - 7: 8F945BA700F2530E5C2A7DF7D5DCE0F83F9EFC78C073FE71AE1F88204A4FD1CF70A073F5D1F942ED623AA16E90A871246C90C45B621B3401A5DDBD9DF6264165 - 8: E998E0DC03EC30EB99BB6BFAAF6618ACC620320D7220B3AF2B23D112D8E9CB1262F3C0D60D183B1EE7F096D12DAE42C958418600214D04F5ED6F5E718BE35566 - 9: 6A9A090C61B3410AEDE7EC9138146CEB2C69662F460C3DA53C6515C1EB31F41CA3D280E567882F95CF664A94147D78F42CFC714A40D22EF19470E053493508A2 - 10: 29102511D749DB3CC9B4E335FA1F5E8FACA8421D558F6A3F3321D50D044A248BA595CFC3EFD3D2ADC97334DA732413F5CBF4751C362BA1D53862AC1E8DABEEE8 - 11: C97A4779D47E6F77729B5917D0138ABB35980AB641BD73A8859EB1AC98C05362ED7D608F2E9587D6BA9E271D343125D40D933A8ED04EC1FE75EC407C7A53C34E - 12: 10F0DC91B9F845FB95FAD6860E6CE1ADFA002C7FC327116D44D047CD7D5870D772BB12B5FAC00E02B08AC2A0174D0446C36AB35F14CA31894CD61C78C849B48A - 13: DEA9101CAC62B8F6A3C650F90EEA5BFAE2653A4EAFD63A6D1F0F132DB9E4F2B1B662432EC85B17BCAC41E775637881F6AAB38DD66DCBD080F0990A7A6E9854FE - 14: 441FFAA08CD79DFF4AFC9B9E5B5620EEC086730C25F661B1D6FBFBD1CEC3148DD72258C65641F2FCA5EB155FADBCABB13C6E21DC11FAF72C2A281B7D56145F19 - 15: 444B240FE3ED86D0E2EF4CE7D851EDDE22155582AA0914797B726CD058B6F45932E0E129516876527B1DD88FC66D7119F4AB3BED93A61A0E2D2D2AEAC336D958 - 16: BFBABBEF45554CCFA0DC83752A19CC35D5920956B301D558D772282BC867009168E9E98606BB5BA73A385DE5749228C925A85019B71F72FE29B3CD37CA52EFE6 - 17: 9C4D0C3E1CDBBF485BEC86F41CEC7C98373F0E09F392849AAA229EBFBF397B22085529CB7EF39F9C7C2222A514182B1EFFAA178CC3687B1B2B6CBCB6FDEB96F8 - 18: 477176B3BFCBADD7657C23C24625E4D0D674D1868F006006398AF97AA41877C8E70D3D14C3BBC9BBCDCEA801BD0E1599AF1F3EEC67405170F4E26C964A57A8B7 - 19: A78C490EDA3173BB3F10DEE52F110FB1C08E0302230B85DDD7C11257D92DE148785EF00C039C0BB8EB9808A35B2D8C080F572859714C9D4069C5BCAF090E898E - 20: 58D023397BEB5B4145CB2255B07D74290B36D9FD1E594AFBD8EEA47C205B2EFBFE6F46190FAF95AF504AB072E36F6C85D767A321BFD7F22687A4ABBF494A689C - 21: 4001EC74D5A46FD29C2C3CDBE5D1B9F20E51A941BE98D2A4E1E2FBF866A672121DB6F81A514CFD10E7358D571BDBA48E4CE708B9D124894BC0B5ED554935F73A - 22: CCD1B22DAB6511225D2401EA2D8625D206A12473CC732B615E5640CEFFF0A4ADF971B0E827A619E0A80F5DB9CCD0962329010D07E34A2064E731C520817B2183 - 23: B4A0A9E3574EDB9E1E72AA31E39CC5F30DBF943F8CABC408449654A39131E66D718A18819143E3EA96B4A1895988A1C0056CF2B6E04F9AC19D657383C2910C44 - 24: 447BECAB16630608D39F4F058B16F7AF95B85A76AA0FA7CEA2B80755FB76E9C804F2CA78F02643C915FBF2FCE5E19DE86000DE03B18861815A83126071F8A37B - 25: 54E6DAB9977380A5665822DB93374EDA528D9BEB626F9B94027071CB26675E112B4A7FEC941EE60A81E4D2EA3FF7BC52CFC45DFBFE735A1C646B2CF6D6A49B62 - 26: 3EA62625949E3646704D7E3C906F82F6C028F540F5F72A794B0C57BF97B7649BFEB90B01D3CA3E829DE21B3826E6F87014D3C77350CB5A15FF5D468A81BEC160 - 27: 213CFE145C54A33691569980E5938C8883A46D84D149C8FF1A67CD287B4D49C6DA69D3A035443DB085983D0EFE63706BD5B6F15A7DA459E8D50A19093DB55E80 - 28: 5716C4A38F38DB104E494A0A27CBE89A26A6BB6F499EC01C8C01AA7CB88497E75148CD6EEE12A7168B6F78AB74E4BE749251A1A74C38C86D6129177E2889E0B6 - 29: 030460A98BDF9FF17CD96404F28FC304F2B7C04EAADE53677FD28F788CA22186B8BC80DD21D17F8549C711AFF0E514E19D4E15F5990252A03E082F28DC2052F6 - 30: 19E7F1CCEE88A10672333E390CF22013A8C734C6CB9EAB41F17C3C8032A2E4ACA0569EA36F0860C7A1AF28FA476840D66011168859334A9E4EF9CC2E61A0E29E - 31: 29F8B8C78C80F2FCB4BDF7825ED90A70D625FF785D262677E250C04F3720C888D03F8045E4EDF3F5285BD39D928A10A7D0A5DF00B8484AC2868142A1E8BEA351 - 32: 5C52920A7263E39D57920CA0CB752AC6D79A04FEF8A7A216A1ECB7115CE06D89FD7D735BD6F4272555DBA22C2D1C96E6352322C62C5630FDE0F4777A76C3DE2C - 33: 83B098F262251BF660064A9D3511CE7687A09E6DFBB878299C30E93DFB43A9314DB9A600337DB26EBEEDAF2256A96DABE9B29E7573AD11C3523D874DDE5BE7ED - 34: 9447D98AA5C9331352F43D3E56D0A9A9F9581865998E2885CC56DD0A0BD5A7B50595BD10F7529BCD31F37DC16A1465D594079667DA2A3FCB70401498837CEDEB - 35: 867732F2FEEB23893097561AC710A4BFF453BE9CFBEDBA8BA324F9D312A82D732E1B83B829FDCD177B882CA0C1BF544B223BE529924A246A63CF059BFDC50A1B - 36: F15AB26D4CDFCF56E196BB6BA170A8FCCC414DE9285AFD98A3D3CF2FB88FCBC0F19832AC433A5B2CC2392A4CE34332987D8D2C2BEF6C3466138DB0C6E42FA47B - 37: 2813516D68ED4A08B39D648AA6AACD81E9D655ECD5F0C13556C60FDF0D333EA38464B36C02BACCD746E9575E96C63014F074AE34A0A25B320F0FBEDD6ACF7665 - 38: D3259AFCA8A48962FA892E145ACF547F26923AE8D4924C8A531581526B04B44C7AF83C643EF5A0BC282D36F3FB04C84E28B351F40C74B69DC7840BC717B6F15F - 39: F14B061AE359FA31B989E30332BFE8DE8CC8CDB568E14BE214A2223B84CAAB7419549ECFCC96CE2ACEC119485D87D157D3A8734FC426597D64F36570CEAF224D - 40: 55E70B01D1FBF8B23B57FB62E26C2CE54F13F8FA2464E6EB98D16A6117026D8B90819012496D4071EBE2E59557ECE3519A7AA45802F9615374877332B73490B3 - 41: 25261EB296971D6E4A71B2928E64839C67D422872BF9F3C31993615222DE9F8F0B2C4BE8548559B4B354E736416E3218D4E8A1E219A4A6D43E1A9A521D0E75FC - 42: 08307F347C41294E34BB54CB42B1522D22F824F7B6E5DB50FDA096798E181A8F026FA27B4AE45D52A62CAF9D5198E24A4913C6671775B2D723C1239BFBF016D7 - 43: 1E5C62E7E9BFA1B118747A2DE08B3CA10112AF96A46E4B22C3FC06F9BFEE4EB5C49E057A4A4886234324572576BB9B5ECFDE0D99B0DE4F98EC16E4D1B85FA947 - 44: C74A77395FB8BC126447454838E561E962853DC7EB49A1E3CB67C3D0851F3E39517BE8C350AC910903D49CD2BFDF545C99316D0346170B739F0ADD5D533C2CFC - 45: 0DD57B423CC01EB2861391EB886A0D17079B933FC76EB3FC08A19F8A74952CB68F6BCDC644F77370966E4D13E80560BCF082EF0479D48FBBAB4DF03B53A4E178 - 46: 4D8DC3923EDCCDFCE70072398B8A3DA5C31FCB3EE3B645C85F717CBAEB4B673A19394425A585BFB464D92F1597D0B754D163F97CED343B25DB5A70EF48EBB34F - 47: F0A50553E4DFB0C4E3E3D3BA82034857E3B1E50918F5B8A7D698E10D242B0FB544AF6C92D0C3AAF9932220416117B4E78ECB8A8F430E13B82A5915290A5819C5 - 48: B15543F3F736086627CC5365E7E8988C2EF155C0FD4F428961B00D1526F04D6D6A658B4B8ED32C5D8621E7F4F8E8A933D9ECC9DD1B8333CBE28CFC37D9719E1C - 49: 7B4FA158E415FEF023247264CBBE15D16D91A44424A8DB707EB1E2033C30E9E1E7C8C0864595D2CB8C580EB47E9D16ABBD7E44E824F7CEDB7DEF57130E52CFE9 - 50: 60424FF23234C34DC9687AD502869372CC31A59380186BC2361C835D972F49666EB1AC69629DE646F03F9B4DB9E2ACE093FBFDF8F20AB5F98541978BE8EF549F - 51: 7406018CE704D84F5EB9C79FEA97DA345699468A350EE0B2D0F3A4BF2070304EA862D72A51C57D3064947286F531E0EAF7563702262E6C724ABF5ED8C8398D17 - 52: 14EF5C6D647B3BD1E6E32006C231199810DE5C4DC88E70240273B0EA18E651A3EB4F5CA3114B8A56716969C7CDA27E0C8DB832AD5E89A2DC6CB0ADBE7D93ABD1 - 53: 38CF6C24E3E08BCF1F6CF3D1B1F65B905239A3118033249E448113EC632EA6DC346FEEB2571C38BD9A7398B2221280328002B23E1A45ADAFFE66D93F6564EAA2 - 54: 6CD7208A4BC7E7E56201BBBA02A0F489CD384ABE40AFD4222F158B3D986EE72A54C50FB64FD4ED2530EDA2C8AF2928A0DA6D4F830AE1C9DB469DFD970F12A56F - 55: 659858F0B5C9EDAB5B94FD732F6E6B17C51CC096104F09BEB3AFC3AA467C2ECF885C4C6541EFFA9023D3B5738AE5A14D867E15DB06FE1F9D1127B77E1AABB516 - 56: 26CCA0126F5D1A813C62E5C71001C046F9C92095704550BE5873A495A999AD010A4F79491F24F286500ADCE1A137BC2084E4949F5B7294CEFE51ECAFF8E95CBA - 57: 4147C1F55172788C5567C561FEEF876F621FFF1CE87786B8467637E70DFBCD0DBDB6415CB600954AB9C04C0E457E625B407222C0FE1AE21B2143688ADA94DC58 - 58: 5B1BF154C62A8AF6E93D35F18F7F90ABB16A6EF0E8D1AECD118BF70167BAB2AF08935C6FDC0663CE74482D17A8E54B546D1C296631C65F3B522A515839D43D71 - 59: 9F600419A4E8F4FB834C24B0F7FC13BF4E279D98E8A3C765EE934917403E3A66097182EA21453CB63EBBE8B73A9C2167596446438C57627F330BADD4F569F7D6 - 60: 457EF6466A8924FD8011A34471A5A1AC8CCD9BD0D07A97414AC943021CE4B9E4B9C8DB0A28F016ED43B1542481990022147B313E194671131E708DD43A3ED7DC - 61: 9997B2194D9AF6DFCB9143F41C0ED83D3A3F4388361103D38C2A49B280A581212715FD908D41C651F5C715CA38C0CE2830A37E00E508CED1BCDC320E5E4D1E2E - 62: 5C6BBF16BAA180F986BD40A1287ED4C549770E7284858FC47BC21AB95EBBF3374B4EE3FD9F2AF60F3395221B2ACC76F2D34C132954049F8A3A996F1E32EC84E5 - 63: D10BF9A15B1C9FC8D41F89BB140BF0BE08D2F3666176D13BAAC4D381358AD074C9D4748C300520EB026DAEAEA7C5B158892FDE4E8EC17DC998DCD507DF26EB63 - 64: 2FC6E69FA26A89A5ED269092CB9B2A449A4409A7A44011EECAD13D7C4B0456602D402FA5844F1A7A758136CE3D5D8D0E8B86921FFFF4F692DD95BDC8E5FF0052 - 65: FCBE8BE7DCB49A32DBDF239459E26308B84DFF1EA480DF8D104EEFF34B46FAE98627B450C2267D48C0946A697C5B59531452AC0484F1C84E3A33D0C339BB2E28 - 66: A19093A6E3BCF5952F850F2030F69B9606F147F90B8BAEE3362DA71D9F35B44EF9D8F0A7712BA1877FDDCD2D8EA8F1E5A773D0B745D4725605983A2DE901F803 - 67: 3C2006423F73E268FA59D2920377EB29A4F9A8B462BE15983EE3B85AE8A78E992633581A9099893B63DB30241C34F643027DC878279AF5850D7E2D4A2653073A - 68: D0F2F2E3787653F77CCE2FA24835785BBD0C433FC779465A115149905A9DD1CB827A628506D457FCF124A0C2AEF9CE2D2A0A0F63545570D8667FF9E2EBA07334 - 69: 78A9FC048E25C6DCB5DE45667DE8FFDD3A93711141D594E9FA62A959475DA6075EA8F0916E84E45AD911B75467077EE52D2C9AEBF4D58F20CE4A3A00458B05D4 - 70: 45813F441769AB6ED37D349FF6E72267D76AE6BB3E3C612EC05C6E02A12AF5A37C918B52BF74267C3F6A3F183A8064FF84C07B193D08066789A01ACCDB6F9340 - 71: 956DA1C68D83A7B881E01B9A966C3C0BF27F68606A8B71D457BD016D4C41DD8A380C709A296CB4C6544792920FD788835771A07D4A16FB52ED48050331DC4C8B - 72: DF186C2DC09CAA48E14E942F75DE5AC1B7A21E4F9F072A5B371E09E07345B0740C76177B01278808FEC025EDED9822C122AFD1C63E6F0CE2E32631041063145C - 73: 87475640966A9FDCD6D3A3B5A2CCA5C08F0D882B10243C0EC1BF3C6B1C37F2CD3212F19A057864477D5EAF8FAED73F2937C768A0AF415E84BBCE6BD7DE23B660 - 74: C3B573BBE10949A0FBD4FF884C446F2229B76902F9DFDBB8A0353DA5C83CA14E8151BBAAC82FD1576A009ADC6F1935CF26EDD4F1FB8DA483E6C5CD9D8923ADC3 - 75: B09D8D0BBA8A7286E43568F7907550E42036D674E3C8FC34D8CA46F771D6466B70FB605875F6A863C877D12F07063FDC2E90CCD459B1910DCD52D8F10B2B0A15 - 76: AF3A22BF75B21ABFB0ACD54422BA1B7300A952EFF02EBEB65B5C234471A98DF32F4F9643CE1904108A168767924280BD76C83F8C82D9A79D9259B195362A2A04 - 77: BF4FF2221B7E6957A724CD964AA3D5D0D9941F540413752F4699D8101B3E537508BF09F8508B317736FFD265F2847AA7D84BD2D97569C49D632AED9945E5FA5E - 78: 9C6B6B78199B1BDACB4300E31479FA622A6B5BC80D4678A6078F88A8268CD7206A2799E8D4621A464EF6B43DD8ADFFE97CAF221B22B6B8778B149A822AEFBB09 - 79: 890656F09C99D280B5ECB381F56427B813751BC652C7828078B23A4AF83B4E3A61FDBAC61F89BEE84EA6BEE760C047F25C6B0A201C69A38FD6FD971AF18588BB - 80: 31A046F7882FFE6F83CE472E9A0701832EC7B3F76FBCFD1DF60FE3EA48FDE1651254247C3FD95E100F9172731E17FD5297C11F4BB328363CA361624A81AF797C - 81: 27A60B2D00E7A671D47D0AEC2A686A0AC04B52F40AB6629028EB7D13F4BAA99AC0FE46EE6C814944F2F4B4D20E9378E4847EA44C13178091E277B87EA7A55711 - 82: 8B5CCEF194162C1F19D68F91E0B0928F289EC5283720840C2F73D253111238DCFE94AF2B59C2C1CA2591901A7BC060E7459B6C47DF0F71701A35CC0AA831B5B6 - 83: 57AB6C4B2229AEB3B70476D803CD63812F107CE6DA17FED9B17875E8F86C724F49E024CBF3A1B8B119C50357652B81879D2ADE2D588B9E4F7CEDBA0E4644C9EE - 84: 0190A8DAC320A739F322E15731AA140DDAF5BED294D5C82E54FEF29F214E18AAFAA84F8BE99AF62950266B8F901F15DD4C5D35516FC35B4CAB2E96E4695BBE1C - 85: D14D7C4C415EEB0E10B159224BEA127EBD84F9591C702A330F5BB7BB7AA44EA39DE6ED01F18DA7ADF40CFB97C5D152C27528824B21E239526AF8F36B214E0CFB - 86: BE28C4BE706970488FAC7D29C3BD5C4E986085C4C3332F1F3FD30973DB614164BA2F31A78875FFDC150325C88327A9443ED04FDFE5BE93876D1628560C764A80 - 87: 031DA1069E3A2E9C3382E436FFD79DF74B1CA6A8ADB2DEABE676AB45994CBC054F037D2F0EACE858D32C14E2D1C8B46077308E3BDC2C1B53172ECF7A8C14E349 - 88: 4665CEF8BA4DB4D0ACB118F2987F0BB09F8F86AA445AA3D5FC9A8B346864787489E8FCECC125D17E9B56E12988EAC5ECC7286883DB0661B8FF05DA2AFFF30FE4 - 89: 63B7032E5F930CC9939517F9E986816CFBEC2BE59B9568B13F2EAD05BAE7777CAB620C6659404F7409E4199A3BE5F7865AA7CBDF8C4253F7E8219B1BD5F46FEA - 90: 9F09BF093A2B0FF8C2634B49E37F1B2135B447AA9144C9787DBFD92129316C99E88AAB8A21FDEF2372D1189AEC500F95775F1F92BFB45545E4259FB9B7B02D14 - 91: F9F8493C68088807DF7F6A2693D64EA59F03E9E05A223E68524CA32195A4734B654FCEA4D2734C866CF95C889FB10C49159BE2F5043DC98BB55E02EF7BDCB082 - 92: 3C9A7359AB4FEBCE07B20AC447B06A240B7FE1DAE5439C49B60B5819F7812E4C172406C1AAC316713CF0DDED1038077258E2EFF5B33913D9D95CAEB4E6C6B970 - 93: AD6AAB8084510E822CFCE8625D62CF4DE655F4763884C71E80BAB9AC9D5318DBA4A6033ED29084E65216C031606CA17615DCFE3BA11D26851AE0999CA6E232CF - 94: 156E9E6261374C9DC884F36E70F0FE1AB9297997B836FA7D170A9C9EBF575B881E7BCEA44D6C0248D35597907154828955BE19135852F9228815ECA024A8ADFB - 95: 4215407633F4CCA9B6788BE93E6AA3D963C7D6CE4B147247099F46A3ACB500A30038CB3E788C3D29F132AD844E80E9E99251F6DB96ACD8A091CFC770AF53847B - 96: 1C077E279DE6548523502B6DF800FFDAB5E2C3E9442EB838F58C295F3B147CEF9D701C41C321283F00C71AFFA0619310399126295B78DD4D1A74572EF9ED5135 - 97: F07A555F49FE481CF4CD0A87B71B82E4A95064D06677FDD90A0EB598877BA1C83D4677B393C3A3B6661C421F5B12CB99D20376BA7275C2F3A8F5A9B7821720DA - 98: B5911B380D20C7B04323E4026B38E200F534259233B581E02C1E3E2D8438D6C66D5A4EB201D5A8B75072C4EC29106334DA70BC79521B0CED2CFD533F5FF84F95 - 99: 01F070A09BAE911296361F91AA0E8E0D09A7725478536D9D48C5FE1E5E7C3C5B9B9D6EB07796F6DA57AE562A7D70E882E37ADFDE83F0C433C2CD363536BB22C8 -100: 6F793EB4374A48B0775ACAF9ADCF8E45E54270C9475F004AD8D5973E2ACA52747FF4ED04AE967275B9F9EB0E1FF75FB4F794FA8BE9ADD7A41304868D103FAB10 -101: 965F20F139765FCC4CE4BA3794675863CAC24DB472CD2B799D035BCE3DBEA502DA7B524865F6B811D8C5828D3A889646FE64A380DA1AA7C7044E9F245DCED128 -102: EC295B5783601244C30E4641E3B45BE222C4DCE77A58700F53BC8EC52A941690B4D0B087FB6FCB3F39832B9DE8F75EC20BD43079811749CDC907EDB94157D180 -103: 61C72F8CCC91DBB54CA6750BC489672DE09FAEDB8FDD4F94FF2320909A303F5D5A98481C0BC1A625419FB4DEBFBF7F8A53BB07EC3D985E8EA11E72D559940780 -104: AFD8145B259EEFC8D12620C3C5B03E1ED8FD2CCEFE0365078C80FD42C1770E28B44948F27E65A1886690110DB814397B68E43D80D1BA16DFA358E739C898CFA3 -105: 552FC7893CF1CE933ADA35C0DA98844E41545E244C3157A1428D7B4C21F9CD7E4071AED77B7CA9F1C38FBA32237412EF21A342742EC8324378F21E507FAFDD88 -106: 467A33FBADF5EBC52596EF86AAAEFC6FABA8EE651B1CE04DE368A03A5A9040EF2835E00ADB09ABB3FBD2BCE818A2413D0B0253B5BDA4FC5B2F6F85F3FD5B55F2 -107: 22EFF8E6DD5236F5F57D94EDE874D6C9428E8F5D566F17CD6D1848CD752FE13C655CB10FBAAFF76872F2BF2DA99E15DC624075E1EC2F58A3F64072121838569E -108: 9CEC6BBF62C4BCE4138ABAE1CBEC8DAD31950444E90321B1347196834C114B864AF3F3CC3508F83751FFB4EDA7C84D140734BB4263C3625C00F04F4C8068981B -109: A8B60FA4FC2442F6F1514AD7402626920CC7C2C9F72124B8CBA8EE2CB7C4586F658A4410CFFCC0AB88343955E094C6AF0D20D0C714FB0A988F543F300F58D389 -110: 8271CC45DFA5E4170E847E8630B952CF9C2AA777D06F26A7585B8381F188DACC7337391CFCC94B053DC4EC29CC17F077870428F1AC23FDDDA165EF5A3F155F39 -111: BF23C0C25C8060E4F6995F1623A3BEBECAA96E308680000A8AA3CD56BB1A6DA099E10D9231B37F4519B2EFD2C24DE72F31A5F19535241B4A59FA3C03CEB790E7 -112: 877FD652C05281009C0A5250E7A3A671F8B18C108817FE4A874DE22DA8E45DB11958A600C5F62E67D36CBF84474CF244A9C2B03A9FB9DC711CD1A2CAB6F3FAE0 -113: 29DF4D87EA444BAF5BCDF5F4E41579E28A67DE84149F06C03F110EA84F572A9F676ADDD04C4878F49C5C00ACCDA441B1A387CACEB2E993BB7A10CD8C2D6717E1 -114: 710DACB166844639CD7B637C274209424E2449DC35D790BBFA4F76177054A36B3B76FAC0CA6E61DF1E687000678AC0746DF75D0A3954897681FD393A155A1BB4 -115: C1D5F93B8DEA1F2571BABCCBC01764541A0CDA87E444D673C50966CA559C33354B3ACB26E5D5781FFB28847A4B4754D77008C62A835835F500DEA7C3B58BDAE2 -116: A41E41271CDAB8AF4D72B104BFB2AD041AC4DF14677DA671D85640C4B187F50C2B66513C4619FBD5D5DC4FE65DD37B9042E9848DDA556A504CAA2B1C6AFE4730 -117: E7BCBACDC379C43D81EBADCB37781552FC1D753E8CF310D968392D06C91F1D64CC9E90CE1D22C32D277FC6CDA433A4D442C762E9EACF2C259F32D64CF9DA3A22 -118: 51755B4AC5456B13218A19C5B9242F57C4A981E4D4ECDCE09A3193362B808A579345D4881C2607A56534DD7F21956AFF72C2F4173A6E7B6CC2212BA0E3DAEE1F -119: DCC2C4BEB9C1F2607B786C20C631972347034C1CC02FCC7D02FF01099CFE1C6989840AC213923629113AA8BAD713CCF0FE4CE13264FB32B8B0FE372DA382544A -120: 3D55176ACEA4A7E3A65FFA9FB10A7A1767199CF077CEE9F71532D67CD7C73C9F93CFC37CCDCC1FDEF50AAD46A504A650D298D597A3A9FA95C6C40CB71FA5E725 -121: D07713C005DE96DD21D2EB8BBECA66746EA51A31AE922A3E74864889540A48DB27D7E4C90311638B224BF0201B501891754848113C266108D0ADB13DB71909C7 -122: 58983C21433D950CAA23E4BC18543B8E601C204318532152DAF5E159A0CD1480183D29285C05F129CB0CC3164687928086FFE380158DF1D394C6AC0D4288BCA8 -123: 8100A8DC528D2B682AB4250801BA33F02A3E94C54DAC0AE1482AA21F51EF3A82F3807E6FACB0AEB05947BF7AA2ADCB034356F90FA4560EDE02201A37E411EC1A -124: 07025F1BB6C784F3FE49DE5C14B936A5ACACACAAB33F6AC4D0E00AB6A12483D6BEC00B4FE67C7CA5CC508C2A53EFB5BFA5398769D843FF0D9E8B14D36A01A77F -125: BA6AEFD972B6186E027A76273A4A723321A3F580CFA894DA5A9CE8E721C828552C64DACEE3A7FD2D743B5C35AD0C8EFA71F8CE99BF96334710E2C2346E8F3C52 -126: E0721E02517AEDFA4E7E9BA503E025FD46E714566DC889A84CBFE56A55DFBE2FC4938AC4120588335DEAC8EF3FA229ADC9647F54AD2E3472234F9B34EFC46543 -127: B6292669CCD38D5F01CAAE96BA272C76A879A45743AFA0725D83B9EBB26665B731F1848C52F11972B6644F554C064FA90780DBBBF3A89D4FC31F67DF3E5857EF -128: 2319E3789C47E2DAA5FE807F61BEC2A1A6537FA03F19FF32E87EECBFD64B7E0E8CCFF439AC333B040F19B0C4DDD11A61E24AC1FE0F10A039806C5DCC0DA3D115 -129: F59711D44A031D5F97A9413C065D1E614C417EDE998590325F49BAD2FD444D3E4418BE19AEC4E11449AC1A57207898BC57D76A1BCF3566292C20C683A5C4648F -130: DF0A9D0C212843A6A934E3902B2DD30D17FBA5F969D2030B12A546D8A6A45E80CF5635F071F0452E9C919275DA99BED51EB1173C1AF0518726B75B0EC3BAE2B5 -131: A3EB6E6C7BF2FB8B28BFE8B15E15BB500F781ECC86F778C3A4E655FC5869BF2846A245D4E33B7B14436A17E63BE79B36655C226A50FFBC7124207B0202342DB5 -132: 56D4CBCD070563426A017069425C2CD2AE540668287A5FB9DAC432EB8AB1A353A30F2FE1F40D83333AFE696A267795408A92FE7DA07A0C1814CF77F36E105EE8 -133: E59B9987D428B3EDA37D80ABDB16CD2B0AEF674C2B1DDA4432EA91EE6C935C684B48B4428A8CC740E579A30DEFF35A803013820DD23F14AE1D8413B5C8672AEC -134: CD9FCC99F99D4CC16D031900B2A736E1508DB4B586814E6345857F354A70CCECB1DF3B50A19ADAF43C278EFA423FF4BB6C523EC7FD7859B97B168A7EBFF8467C -135: 0602185D8C3A78738B99164B8BC6FFB21C7DEBEBBF806372E0DA44D121545597B9C662A255DC31542CF995ECBE6A50FB5E6E0EE4EF240FE557EDED1188087E86 -136: C08AFA5B927BF08097AFC5FFF9CA4E7800125C1F52F2AF3553FA2B89E1E3015C4F87D5E0A48956AD31450B083DAD147FFB5EC03434A26830CF37D103AB50C5DA -137: 36F1E1C11D6EF6BC3B536D505D544A871522C5C2A253067EC9933B6EC25464DAF985525F5B9560A16D890259AC1BB5CC67C0C469CDE133DEF000EA1D686F4F5D -138: BF2AB2E2470F5438C3B689E66E7686FFFA0CB1E1798AD3A86FF99075BF6138E33D9C0CE59AFB24AC67A02AF34428191A9A0A6041C07471B7C3B1A752D6FC0B8B -139: D400601F9728CCC4C92342D9787D8D28AB323AF375CA5624B4BB91D17271FBAE862E413BE73F1F68E615B8C5C391BE0DBD9144746EB339AD541547BA9C468A17 -140: 79FE2FE157EB85A038ABB8EBBC647731D2C83F51B0AC6EE14AA284CB6A3549A4DCCEB300740A825F52F5FB30B03B8C4D8B0F4AA67A63F4A94E3303C4EDA4C02B -141: 75351313B52A8529298D8C186B1768666DCCA8595317D7A4816EB88C062020C0C8EFC554BB341B64688DB5CCAFC35F3C3CD09D6564B36D7B04A248E146980D4B -142: E3128B1D311D02179D7F25F97A5A8BEE2CC8C86303644FCD664E157D1FEF00F23E46F9A5E8E5C890CE565BB6ABD4302CE06469D52A5BD53E1C5A54D04649DC03 -143: C2382A72D2D3ACE9D5933D00B60827ED380CDA08D0BA5F6DD41E29EE6DBE8ECB9235F06BE95D83B6816A2FB7A5AD47035E8A4B69A4884B99E4BECE58CAB25D44 -144: 6B1C69460BBD50AC2ED6F32E6E887CFED407D47DCF0AAA60387FE320D780BD03EAB6D7BAEB2A07D10CD552A300341354EA9A5F03183A623F92A2D4D9F00926AF -145: 6CDA206C80CDC9C44BA990E0328C314F819B142D00630404C48C05DC76D1B00CE4D72FC6A48E1469DDEF609412C364820854214B4869AF090F00D3C1BA443E1B -146: 7FFC8C26FBD6A0F7A609E6E1939F6A9EDF1B0B066641FB76C4F9602ED748D11602496B35355B1AA255850A509D2F8EE18C8F3E1D7DCBC37A136598F56A59ED17 -147: 70DE1F08DD4E09D5FC151F17FC991A23ABFC05104290D50468882EFAF582B6EC2F14F577C0D68C3AD06626916E3C86E6DAAB6C53E5163E82B6BD0CE49FC0D8DF -148: 4F81935756ED35EE2058EE0C6A6110D6FAC5CB6A4F46AA9411603F99965823B6DA4838276C5C06BC7880E376D92758369EE7305BCEC8D3CFD28CCABB7B4F0579 -149: ABCB61CB3683D18F27AD527908ED2D32A0426CB7BB4BF18061903A7DC42E7E76F982382304D18AF8C80D91DD58DD47AF76F8E2C36E28AF2476B4BCCF82E89FDF -150: 02D261AD56A526331B643DD2186DE9A82E72A58223CD1E723686C53D869B83B94632B7B647AB2AFC0D522E29DA3A5615B741D82852E0DF41B66007DBCBA90543 -151: C5832741FA30C5436823015383D297FF4C4A5D7276C3F902122066E04BE5431B1A85FAF73B918434F9300963D1DEA9E8AC3924EF490226EDEEA5F743E410669F -152: CFAEAB268CD075A5A6AED515023A032D54F2F2FF733CE0CBC78DB51DB4504D675923F82746D6594606AD5D67734B11A67CC6A468C2032E43CA1A94C6273A985E -153: 860850F92EB268272B67D133609BD64E34F61BF03F4C1738645C17FEC818465D7ECD2BE2907641130025FDA79470AB731646E7F69440E8367EA76AC4CEE8A1DF -154: 84B154ED29BBEDEFA648286839046F4B5AA34430E2D67F7496E4C39F2C7EA78995F69E1292200016F16AC3B37700E6C7E7861AFC396B64A59A1DBF47A55C4BBC -155: AEEEC260A5D8EFF5CCAB8B95DA435A63ED7A21EA7FC7559413FD617E33609F8C290E64BBACC528F6C080262288B0F0A3219BE223C991BEE92E72349593E67638 -156: 8AD78A9F26601D127E8D2F2F976E63D19A054A17DCF59E0F013AB54A6887BBDFFDE7AAAE117E0FBF3271016595B9D9C712C01B2C53E9655A382BC4522E616645 -157: 8934159DADE1AC74147DFA282C75954FCEF443EF25F80DFE9FB6EA633B8545111D08B34EF43FFF17026C7964F5DEAC6D2B3C29DACF2747F022DF5967DFDC1A0A -158: CD36DD0B240614CF2FA2B9E959679DCDD72EC0CD58A43DA3790A92F6CDEB9E1E795E478A0A47D371100D340C5CEDCDBBC9E68B3F460818E5BDFF7B4CDA4C2744 -159: 00DF4E099B807137A85990F49D3A94315E5A5F7F7A6076B303E96B056FB93800111F479628E2F8DB59AEB6AC70C3B61F51F9B46E80FFDEAE25EBDDB4AF6CB4EE -160: 2B9C955E6CAED4B7C9E246B86F9A1726E810C59D126CEE66ED71BF015B83558A4B6D84D18DC3FF4620C2FFB722359FDEF85BA0D4E2D22ECBE0ED784F99AFE587 -161: 181DF0A261A2F7D29EA5A15772715105D450A4B6C236F699F462D60CA76487FEEDFC9F5EB92DF838E8FB5DC3694E84C5E0F4A10B761F506762BE052C745A6EE8 -162: 21FB203458BF3A7E9A80439F9A902899CD5DE0139DFD56F7110C9DEC8437B26BDA63DE2F565926D85EDB1D6C6825669743DD9992653D13979544D5DC8228BFAA -163: EF021F29C5FFB830E64B9AA9058DD660FD2FCB81C497A7E698BCFBF59DE5AD4A86FF93C10A4B9D1AE5774725F9072DCDE9E1F199BAB91F8BFF921864AA502EEE -164: B3CFDA40526B7F1D37569BDFCDF911E5A6EFE6B2EC90A0454C47B2C046BF130FC3B352B34DF4813D48D33AB8E269B69B075676CB6D00A8DCF9E1F967EC191B2C -165: B4C6C3B267071EEFB9C8C72E0E2B941293641F8673CB70C1CC26AD1E73CF141755860AD19B34C2F34ED35BB52EC4507CC1FE59047743A5F0C6FEBDE625E26091 -166: 57A34F2BCCA60D4B85103B830C9D7952A416BE5263AE429C9E5E53FE8590A8F78EC65A51109EA85DCDF7B6223F9F2B340539FAD81923DBF8EDABF95129E4DFF6 -167: 9CF46662FCD61A232277B685663B8B5DA832DFD9A3B8CCFEEC993EC6AC415AD07E048ADFE414DF272770DBA867DA5C1224C6FD0AA0C2187D426AC647E9887361 -168: 5CE1042AB4D542C2F9EE9D17262AF8164098935BEF173D0E18489B04841746CD2F2DF866BD7DA6E5EF9024C648023EC723AB9C62FD80285739D84F15D2AB515A -169: 8488396BD4A8729B7A473178F232DADF3F0F8E22678BA5A43E041E72DA1E2CF82194C307207A54CB8156293339EAEC693FF66BFCD5EFC65E95E4ECAF54530ABD -170: F598DA901C3835BCA560779037DFDE9F0C51DC61C0B760FC1522D7B470EE63F5BDC6498476E86049AD86E4E21AF2854A984CC905427D2F17F66B1F41C3DA6F61 -171: 5F93269798CF02132107337660A8D7A177354C0212EB93E555E7C37A08AEF3D8DCE01217011CD965C04DD2C105F2E2B6CAE5E4E6BCAF09DFBEE3E0A6A6357C37 -172: 0ECF581D47BAC9230986FAABD70C2F5B80E91066F0EC55A842937882286D2CA007BB4E973B0B091D52167FF7C4009C7AB4AD38FFF1DCEACDB7BE81EF4A452952 -173: 5AECA8ABE1528582B2A307B4009585498A3D467CA6101CB0C5126F9976056E9FFC123CC20C302B2A737F492C75D21F01512C90CA0541DFA56E950A321DCB28D8 -174: 732FBF8F1CB2B8329263EDE27858FE46F8D3354D376BCDA0548E7CE1FA9DD11F85EB661FE950B543AA635CA4D3F04EDE5B32D6B656E5CE1C44D35C4A6C56CFF8 -175: D5E938735D63788C80100AEFD18648D18CF272F69F20FF24CFE2895C088AD08B0104DA1672A4EB26FC52545CC7D7A01B266CF546C403C45BD129EB41BDD9200B -176: 65A245B49352EE297D91AF8C8BE00528AC6E046DD83AC7BD465A98816DD68F3E00E1AE8F895327A7E9A8C9326598379A29C9FC91EC0C6EEF08F3E2B216C11008 -177: C95654B63019130AB45DD0FB4941B98AEB3AF2A123913ECA2CE99B3E97410A7BF8661CC7FBAA2BC1CF2B13113B1ED40A0118B88E5FFFC3542759EA007ED4C58D -178: 1EB262F38FA494431F017DAD44C0DFB69324AC032F04B657FC91A88647BB74760F24E7C956514F0CF002990B182C1642B9B2426E96A61187E4E012F00E217D84 -179: 3B955AEEBFA5151AC1AB8E3F5CC1E3767084C842A575D36269836E97353D41622B731DDDCD5F269550A3A5B87BE1E90326340B6E0E62555815D9600597AC6EF9 -180: 68289F6605473BA0E4F241BAF7477A9885426A858F19EF2A18B0D40EF8E41282ED5526B519799E270F13881327918278755711071D8511FE963E3B5606AA3716 -181: 80A33787542612C38F6BCD7CD86CAB460227509B1CBAD5EC408A91413D51155A0476DADBF3A2518E4A6E77CC346622E347A469BF8BAA5F04EB2D98705355D063 -182: 34629BC6D831391C4CDF8AF1B4B7B6B8E8EE17CF98C70E5DD586CD99F14B11DF945166236A9571E6D591BB83EE4D164D46F6B9D8EF86FF865A81BFB91B00424B -183: 8B7CC339163863BB4383E542B0EF0E7CF36B84AD932CDF5A80419EC9AD692E7A7E784D2C7CB3796A18B8F800035F3AA06C824100611120A7BDEB35618CCB81B7 -184: 4F084E4939DD5A7F5A658FAD58A18A15C25C32EC1C7FD5C5C6C3E892B3971AEAAC308304EF17B1C47239EA4BB398B3FD6D4528D8DE8E768AE0F1A5A5C6B5C297 -185: 48F407A1AF5B8009B2051742E8CF5CD5656669E7D722EE8E7BD202060849442168D8FACC117C012BFB7BF449D99BEFFF6A34AEA203F1D8D352722BE5014EC818 -186: A6AA82CD1E426F9A73BFA39A29037876114655B8C22D6D3FF8B638AE7DEA6B17843E09E52EB66FA1E475E4A8A3DE429B7D0F4A776FCB8BDC9B9FEDE7D52E815F -187: 5817027D6BDD00C5DD10AC593CD560372270775A18526D7E6F13872A2E20EAB664625BE7168AC4BD7C9E0CE7FC4099E0F48442E2C767191C6E1284E9B2CCEA8C -188: 08E41028340A45C74E4052B3A8D6389E22E043A1ADAB5E28D97619450D723469B620CAA519B81C14523854F619FD3027E3847BD03276E60604A80DDB4DE876D6 -189: 130B8420537EB07D72ABDA07C85ACBD8B9A44F16321DD0422145F809673D30F2B5321326E2BFF317EF3FEF983C51C4F8AB24A325D298E34AFCE569A82555774C -190: AC49B844AFAA012E31C474CA263648844FD2F6307992C2F752ACA02C3828965175794DEEE2D2EE95C61CD284F6B5A2D75E2EF2B29EE8149E77FB81447B2FD04B -191: B9D7CA81CC60BB9578E44024E5A0A0BE80F27336A6A9F4E53DF3999CB191280B090E2AC2D29C5BAAD9D71415BDC129E69AA2667AF6A7FD5E189FCCDCEE817340 -192: A755E113386572C75CED61D719706070B9146048E42A9F8CD35667A088B42F08808ABDF77E618ABD959AFC757379CA2C00BCC1A48390FA2BFF618B1E0078A613 -193: A73C7DEBED326F1C0DB0795EE7D6E3946894B826B1F8101C56C823BA17168312E7F53FC7DBE52C3E11E69852C40485E2EF182477862EA6A34EC136E2DFEEA6F4 -194: 6CB8F9D52C56D82CAC28F39EA1593E8BB2506293AC0D68376A1709B62A46DF14A4AE64B2D8FAB76733A1CED2D548E3F3C6FCB49D40C3D5808E449CD83D1C2AA2 -195: 683FA2B2369A10162C1C1C7B24BC970EE67DA220564F32203F625696C0352A0B9AD96624362D952D84463C1106A2DBA7A092599884B35A0B89C8F1B6A9B5A61E -196: AAD9AD44610118B77D508AEB1BBCD1C1B7D0171397FB510A401BBC0EC34623670D86A2DC3C8F3AB5A2044DF730256727545F0860CE21A1EAC717DFC48F5D228E -197: C42578DE23B4C987D5E1AC4D689ED5DE4B0417F9704BC6BCE969FA13471585D62C2CB1212A944F397FC9CA2C3747C3BEB694EC4C5BE68828DDA53EF43FAEC6C0 -198: 470F00841EE8244E63ED2C7EA30E2E419897C197462ECCCECF713B42A5065FFF5914BC9B79AFFE8F6B657875E789AE213BD914CD35BD174D46E9D18BD843773D -199: 34FC4213730F47A5E9A3580F643E12945CFCB31BF206F6AD450CE528DA3FA432E005D6B0ECCE10DCA7C5995F6AACC5150E1B009E19751E8309F8859531844374 -200: FB3C1F0F56A56F8E316FDF5D853C8C872C39635D083634C3904FC3AC07D1B578E85FF0E480E92D44ADE33B62E893EE32343E79DDF6EF292E89B582D312502314 -201: C7C97FC65DD2B9E3D3D607D31598D3F84261E9919251E9C8E57BB5F829377D5F73EABBED55C6C381180F29AD02E5BE797FFEC7E57BDECBC50AD3D062F0993AB0 -202: A57A49CDBE67AE7D9F797BB5CC7EFC2DF07F4E1B15955F85DAE74B76E2ECB85AFB6CD9EEED8888D5CA3EC5AB65D27A7B19E578475760A045AC3C92E13A938E77 -203: C7143FCE9614A17FD653AEB140726DC9C3DBB1DE6CC581B2726897EC24B7A50359AD492243BE66D9EDD8C933B5B80E0B91BB61EA98056006516976FAE8D99A35 -204: 65BB58D07F937E2D3C7E65385F9C54730B704105CCDB691F6E146D4EE8F6C086F49511035110A9AD6031FDCEB943E0F9613BCB276DD40F0624EF0F924F809783 -205: E540277F683B1186DD3B5B3F61433396581A35FEB12002BE8C6A6231FC40FFA70F08081BC58B2D94F7649543614A435FAA2D62110E13DABC7B86629B63AF9C24 -206: 418500878C5FBCB584C432F4285E05E49F2E3E075399A0DBFCF874EBF8C03D02BF16BC6989D161C77CA0786B05053C6C709433712319192128835CF0B660595B -207: 889090DBB1944BDC9433EE5EF1010C7A4A24A8E71ECEA8E12A31318CE49DCAB0ACA5C3802334AAB2CC84B14C6B9321FE586BF3F876F19CD406EB1127FB944801 -208: 53B6A28910AA92E27E536FB549CF9B9918791060898E0B9FE183577FF43B5E9C7689C745B32E412269837C31B89E6CC12BF76E13CAD366B74ECE48BB85FD09E9 -209: 7C092080C6A80D672409D081D3D177106BCD63567785140719490950AE07AE8FCAABBAAAB330CFBCF7374482C220AF2EADEEB73DCBB35ED823344E144E7D4899 -210: 9CCDE566D2400509181111F32DDE4CD63209FE59A30C114546AD2776D889A41BAD8FA1BB468CB2F9D42CA9928A7770FEF8E8BA4D0C812D9A1E75C3D8D2CCD75A -211: 6E293BF5D03FE43977CFE3F57CCDB3AE282A85455DCA33F37F4B74F8398CC612433D755CBEC412F8F82A3BD3BC4A278F7ECD0DFA9BBDC40BE7A787C8F159B2DF -212: C56546FB2178456F336164C18B90DEFFC83AE2B5A3ACA77B6884D36D2C1DB39501B3E65E36C758C66E3188451FDB3515EE162C001F06C3E8CB573ADF30F7A101 -213: 6F82F89F299EBCA2FE014B59BFFE1AA84E88B1915FE256AFB646FD8448AF2B8891A7FAB37A4EA6F9A50E6C317039D8CF878F4C8E1A0DD464F0B4D6FF1C7EA853 -214: 2B8599FF9C3D6198637AD51E57D1998B0D75313FE2DD61A533C964A6DD9607C6F723E9452CE46E014B1C1D6DE77BA5B88C914D1C597BF1EAE13474B4290E89B2 -215: 08BF346D38E1DF06C8260EDB1DA75579275948D5C0A0AA9ED2886F8856DE5417A156998758F5B17E52F101CA957A71137473DFD18D7D209C4C10D9233C93691D -216: 6DF2156D773114D310B63DB9EE5350D77E6BCF25B05FCD910F9B31BC42BB13FE8225EBCB2A23A62280777B6BF74E2CD0917C7640B43DEFE468CD1E18C943C66A -217: 7C7038BC13A91151828A5BA82B4A96040F258A4DFB1B1373F0D359168AFB0517A20B28A12D3644046BE66B8D08D8AE7F6A923EA1C00187C6D11DC502BAC71305 -218: BCD1B30D808FB739B987CBF154BEA00DA9D40380B861D4C1D6377122DADD61C0E59018B71941CFB62E00DCD70AEB9ABF0473E80F0A7ECA6B6DEA246AB229DD2B -219: 7ED4468D968530FE7AB2C33540B26D8C3BD3ED44B34FBE8C2A9D7F805B5ADA0EA252EEADE4FCE97F89728AD85BC8BB2430B1BEF2CDDD32C8446E59B8E8BA3C67 -220: 6D30B7C6CE8A3236C0CA2F8D728B1088CA06983A8043E621D5DCF0C537D13B08791EDEB01A3CF0943EC1C890AB6E29B146A236CD46BCB9D93BF516FB67C63FE5 -221: 97FE03CEF31438508911BDED975980A66029305DC5E3FA8AD1B4FB22FCDF5A19A733320327D8F71CCF496CB3A44A77AF56E3DDE73D3A5F176896CC57C9A5AD99 -222: 785A9D0FBD21136DBCE8FA7EAFD63C9DAD220052978416B31D9753EAA149097847ED9B30A65C70507EFF01879149ED5CF0471D37798EDC05ABD56AD4A2CCCB1D -223: AD408D2ABDDFD37B3BF34794C1A3371D928ED7FC8D966225333584C5665817832A37C07F0DC7CB5AA874CD7D20FE8FAB8EABCB9B33D2E0841F6E200960899D95 -224: 97668F745B6032FC815D9579322769DCCD9501A5080029B8AE826BEFB6742331BD9F76EFEB3E2B8E81A9786B282F5068A3A2424697A77C41876B7E753F4C7767 -225: 26BB985F47E7FEE0CFD252D4EF96BED42B9C370C1C6A3E8C9EB04EF7F7818B833A0D1F043EBAFB911DC779E02740A02A44D3A1EA45ED4AD55E686C927CAFE97E -226: 5BFE2B1DCF7FE9B95088ACEDB575C19016C743B2E763BF5851AC407C9EDA43715EDFA48B4825492C5179593FFF21351B76E8B7E034E4C53C79F61F29C479BD08 -227: C76509EF72F4A6F9C9C40618ED52B2084F83502232E0AC8BDAF3264368E4D0180F6854C4ABF4F6509C79CAAFC44CF3194AFC57BD077BD7B3C9BDA3D4B8775816 -228: D66F2BEAB990E354CCB910E4E9C7AC618C7B63EF292A96B552341DE78DC46D3EC8CFABC699B50AF41FDA39CF1B0173660923510AD67FAEDEF5207CFFE8641D20 -229: 7D8F0672992B79BE3A364D8E5904F4AB713BBC8AB01B4F309AD8CCF223CE1034A860DCB0B00550612CC2FA17F2969E18F22E1427D254B4A82B3A03A3EB394ADF -230: A56D6725BFB3DE47C1414ADF25FC8F0FC9846F6987722BC06366D5CA4E89722925EBBC881418844075397A0CA89842C7B9E9E07E1D9D183EBEB39E120B483BF7 -231: AF5E03D7FE60C67E10313344434E79485A03A758D6DCE985574745763C1C5C77D4FB3E6FB12230368370993BF90FEED0C5D1607524562D7C09C0C210ED393D7C -232: 7A20540CC07BF72B582421FC342E82F52134B69841EC28ED189E2EA6A29DD2F82A640352D222B52F2911DC72A7DAB31CAADD80C6118F13C56B2A1E4373BE0EA3 -233: 486F02C63E5467EA1FDDE7E82BFACC2C1BA5D636D9F3D08B210DA3F372F706EC218CC17FF60AEF703BBE0C15C38AE55D286A684F864C78211CCAB4178C92ADBA -234: 1C7A5C1DEDCD04A921788F7EB23361CA1953B04B9C7AEC35D65EA3E4996DB26F281278EA4AE666AD81027D98AF57262CDBFA4C085F4210568C7E15EEC7805114 -235: 9CE3FA9A860BDBD5378FD6D7B8B671C6CB7692910CE8F9B6CB4122CBCBE6AC06CA0422CEF1225935053B7D193A81B9E972EB85A1D3074F14CBB5EC9F0573892D -236: A91187BE5C371C4265C174FD4653B8AB708551F83D1FEE1CC1479581BC006D6FB78FCC9A5DEE1DB3666F508F9780A37593EBCCCF5FBED39667DC6361E921F779 -237: 4625767D7B1D3D3ED2FBC674AF14E0244152F2A4021FCF3311505D89BD81E2F9F9A500C3B199914DB49500B3C98D03EA93286751A686A3B875DAAB0CCD63B44F -238: 43DFDFE1B014FED3A2ACABB7F3E9A182F2AA18019D27E3E6CDCF31A15B428E91E7B08CF5E5C376FCE2D8A28FF85AB0A0A1656EDB4A0A91532620096D9A5A652D -239: 279E3202BE3989BA3112772585177487E4FE3EE3EAB49C2F7FA7FE87CFE7B80D3E0355EDFF6D031E6C96C795DB1C6F041880EC3824DEFACF9263820A8E7327DE -240: EA2D066AC229D4D4B616A8BEDEC734325224E4B4E58F1AE6DAD7E40C2DA29196C3B1EA9571DACC81E87328CAA0211E09027B0524AA3F4A849917B3586747EBBB -241: 49F014F5C61822C899AB5CAE51BE4044A4495E777DEB7DA9B6D8490EFBB87530ADF293DAF079F94C33B7044EF62E2E5BB3EB11E17304F8453EE6CE24F033DDB0 -242: 9233490344E5B0DC5912671B7AE54CEE7730DBE1F4C7D92A4D3E3AAB50571708DB51DCF9C2944591DB651DB32D22935B86944969BE77D5B5FEAE6C3840A8DB26 -243: B6E75E6F4C7F453B7465D25B5AC8C7196902EAA953875228C8634E16E2AE1F38BC3275304335F5989ECCC1E34167D4E68D7719968FBA8E2FE67947C35C48E806 -244: CC14CA665AF1483EFBC3AF80080E650D5046A3932F4F51F3FE90A0705EC25104ADF07839265DC51D43401411246E474F0D5E5637AF94767283D53E0617E981F4 -245: 230A1C857CB2E7852E41B647E90E4585D2D881E1734DC38955356E8DD7BFF39053092C6B38E236E1899525647073DDDF6895D64206325E7647F275567B255909 -246: CBB65321AC436E2FFDAB2936359CE49023F7DEE7614EF28D173C3D27C5D1BFFA51553D433F8EE3C9E49C05A2B883CCE954C9A8093B80612A0CDD4732E041F995 -247: 3E7E570074337275EFB51315588034C3CF0DDDCA20B4612E0BD5B881E7E5476D319CE4FE9F19186E4C0826F44F131EB048E65BE242B1172C63BADB123AB0CBE8 -248: D32E9EC02D38D4E1B8249DF8DCB00C5B9C68EB8922672E3505393B6A210BA56F9496E5EE0490EF387C3CDEC061F06BC0382D9304CAFBB8E0CD33D57029E62DF2 -249: 8C1512466089F05B3775C262B62D22B83854A83218130B4EC91B3CCBD293D2A54302CECAAB9B100C68D1E6DDC8F07CDDBDFE6FDAAAF099CC09D6B725879C6369 -250: 91A7F61C97C2911E4C812EF71D780AD8FA788794561D08303FD1C1CB608A46A12563086EC5B39D471AED94FB0F6C678A43B8792932F9028D772A22768EA23A9B -251: 4F6BB222A395E8B18F6BA155477AED3F0729AC9E83E16D31A2A8BC655422B837C891C6199E6F0D75799E3B691525C581953517F252C4B9E3A27A28FBAF49644C -252: 5D06C07E7A646C413A501C3F4BB2FC38127DE7509B7077C4D9B5613201C1AA02FD5F79D2745915DD57FBCB4CE08695F6EFC0CB3D2D330E19B4B0E6004EA6471E -253: B96756E57909968F14B796A5D30F4C9D671472CF82C8CFB2CACA7AC7A44CA0A14C9842D00C82E337502C94D5960ACA4C492EA7B0DF919DDF1AADA2A275BB10D4 -254: FF0A015E98DB9C99F03977710AAC3E658C0D896F6D71D618BA79DC6CF72AC75B7C038EB6862DEDE4543E145413A6368D69F5722C827BA3EF25B6AE6440D39276 -255: 5B21C5FD8868367612474FA2E70E9CFA2201FFEEE8FAFAB5797AD58FEFA17C9B5B107DA4A3DB6320BAAF2C8617D5A51DF914AE88DA3867C2D41F0CC14FA67928 -256: 1ECC896F34D3F9CAC484C73F75F6A5FB58EE6784BE41B35F46067B9C65C63A6794D3D744112C653F73DD7DEB6666204C5A9BFA5B46081FC10FDBE7884FA5CBF8 - -Hash: blake3 - 0: AF1349B9F5F9A1A6A0404DEA36DCC9499BCB25C9ADC112B7CC9A93CAE41F3262 - 1: 2D3ADEDFF11B61F14C886E35AFA036736DCD87A74D27B5C1510225D0F592E213 - 2: 7B7015BB92CF0B318037702A6CDD81DEE41224F734684C2C122CD6359CB1EE63 - 3: E1BE4D7A8AB5560AA4199EEA339849BA8E293D55CA0A81006726D184519E647F - 4: F30F5AB28FE047904037F77B6DA4FEA1E27241C5D132638D8BEDCE9D40494F32 - 5: B40B44DFD97E7A84A996A91AF8B85188C66C126940BA7AAD2E7AE6B385402AA2 - 6: 06C4E8FFB6872FAD96F9AACA5EEE1553EB62AED0AD7198CEF42E87F6A616C844 - 7: 3F8770F387FAAD08FAA9D8414E9F449AC68E6FF0417F673F602A646A891419FE - 8: 2351207D04FC16ADE43CCAB08600939C7C1FA70A5C0AACA76063D04C3228EAEB - 9: A0FC27E5D7318B723207637BDEEBA4F7DCB22F7F9EC3E8B6F3588DDCD4FDF861 - 10: 87FCF07CAC5BE3C91735B34E535C67286E4E7A63BF152D95F2CF4CD1A244758B - 11: 02662E12EA8B243F0A8E970EFE19D8955FCC71EA7DC10F7FDA89492D07CD9730 - 12: 46771FD4C72C26DE414671D8C8634B327FD12BA240E3739E011B4E64BFBB898C - 13: E1C0BBB02CB1622397CED750A9F712A2D5EF5B1E17E7CC01A3DABCF448613A51 - 14: CBFA77A4531D0D07800518C49CAD65E7130CB2C225AFC718BECFEA56904870D1 - 15: 163475FC98871015D19097D29536653BDEAC6A9C3A18AD4B3A629CFAA1BBF32E - 16: A6A492965517A830CB75FDB713465AA465F2F098233896FEA44C1D98268BF9E3 - 17: 8462AA7BE93B09FDA7B93CF9F9CDDB703F6DD2CC0C8EDD5F9EEE092EDF8ABF0C - 18: 66A671E4FB354B7FA37D12B506D557F9170C8247494DF4591B6A38C4C1ED8CD2 - 19: 9F9CC8084631848151B09AA51B05A96A5CF674DB8BE5D1C5E8054BAA87A3B3F8 - 20: A418FAEC67BAAEB5177880C3673A125F1C1123AA18370B007C3E707EF9A7946C - 21: 7FE1802DDAC5BBAFE5BA26848B95252590EECC4937CCFB9C55F3B6EAD2DC56B7 - 22: 2E4D3DCDF0702C936D4E90BA664DED539B53190006CA17A010744B4AD97CA4F5 - 23: 3F3123529EB4B83D3D38A4E79C7A1B6F4176F7A9B435254D402162EFBE74DB47 - 24: 0B3AB94011D18786D51ED60C6B3FA6CE1B10B14D66D594836B2CC38451F7A8D6 - 25: EDF54F99CAD804C52DFC45C54524982D9F0F16A3E193143EF7AF1A3105CB78DE - 26: 2B001B01373DB4C2E8F790CB1CA9372FB53A2818C391224CE9A24B3428025EB6 - 27: 630AF0542832B93F6F9C9A4299C04E06CC89F0609796CBAD0714CEC5B97A21B7 - 28: 4D7694418F33D099AD643D743D98FC1E5BF71EA979B7DCAE3E19BC2AE8732436 - 29: 0A8B04B4686B2D211E13F630B22CB2846D38610B9668619B8C94948DE6A86075 - 30: 4A370926EFD1807A3D7699EFDE168C9A4D128AC5367B95755DB2BE230A085D00 - 31: BDA80C7FE2DB38BE6387B35C870BD7728D67B7B6CC5EB9B0E5C7DCB21EA754C2 - 32: E528E95798037DF410543D9F31E396ECDD458D71B157D6014398BAE32FB56C65 - 33: 4F4E6C1DFFD3A6C9959876D15AA96B5FB0DA8632B995F6CA2E30503F2829FA29 - 34: 0DBEFE45C10F3E35DCA05C85DE406E1DAD035B28A1C70E8476D2FCFCA744CE96 - 35: B1153AB473AFB31831AC2CD78167ED9B49C4EA1AE05A16D4CEFC111CA1D40885 - 36: 02B34DC75E6E7DFB3B020188C7A5C277C7171417B75F91540F34E112B7F3552C - 37: B86799BC285A4A9FF30B36425FA164DEC196DC403A0C62C27EBDDDB6DC4FA40A - 38: D78545492EFD467E227662AA5BFDFBE4327D1C9DC18116CD493F157BE42BDE1C - 39: 6742AD3231B1D91EC920D04F911F8B2CD10AEDADBCB13EF1FD24B7DB4761027F - 40: 9563A50F070B26EEAA1EE0A6AC95B8BA9168C32B1AF71AF2FE55A8B4E268CE5E - 41: F0DBD489DFB0FB6A9206F1F7B9D6FBB6C81350DA461E88812CD4F15C93853ED5 - 42: B4CDEEB0E5B83AD41753011E1B56D497B3CA9785AA0A606610E91B97172A7928 - 43: 051978D4083545DBA07983654DB5C3C82A7A982A53B6005304A1BACBF0684ADB - 44: 062C1BCE7948A70DB0D55355F0E74F13E54A022E8FFFCEAB06FE71041D0AAD47 - 45: 304ACD11CA45BEFA2B9CD55D2AB9C7CF0A75C4301BB8813728F180E31D25696F - 46: F420058BEF32C43E2090BD112A2379FEDFAB0B2BD12737374391A3FC44BFE91E - 47: 39DA10BF36C8498FA071067532BE53492CAE29F6CCAFDCB7E77552E0406A1A60 - 48: 5E9902524B30F4F4CFD5D2180FD357BBF881221A603C84C119580E8BC422911E - 49: B78309B3D5FC5765EA4F02A6DC1DFB63370190470011F1025362DC691E178895 - 50: 475438FC7B1BFBEEBFFC69882E18C7D0C6B505312484EA2B9ADD451ACEF2D743 - 51: C98AAD8B112985E7D532D6F48F93FB0B26BFE90DF5A161FB3CE4FED674991911 - 52: D9B171EEE2809CF0A020E7367FC83413EC7C2A2E46A400D81297D98EBCA3464D - 53: 0F4245901611D426CA9BA9700E64F267DBCD36221CA20C3B9643F5DFE38C8EDE - 54: 6FE71231259609F9D0A6F799F983DF408A6104A1510E69D0050C6E4DBF63980C - 55: D04EC5F6F5E7DAF5CED7A1671FBE912580A56576C8BF6A2ED4B80E35548F9C13 - 56: 60F238116F2936698A88CDA03D8DF79D7431249373B048EE7A063849FE6E9742 - 57: AE097943D385BC9B2CD9369D91ED13A97C59B9B654B04514CD87C74BF4B9A80C - 58: CA204CEB059EA73A688A2C7D485418C3BB3BE97756E5FA1583D3A0FB582AB966 - 59: 4F174ACAFF29FF88AAA4DDE9404634FDCAE5A895F90DD5D610F91595C042D751 - 60: FE59BA0025B061E837DB84910371240D9B417DB56C14DDFF68D4AFE36DC39658 - 61: 86A2CF17CE886A3BE084862AE3C2AACF64F50E88B7334E675AFB34365CB9A5BF - 62: 1F5EBF4B2ABEA4E78C2AB709D5AB298E13F494F9237F6DD19C8B90B3B7C83A13 - 63: E9BC37A594DAAD83BE9470DF7F7B3798297C3D834CE80BA85D6E207627B7DB7B - 64: 4EED7141EA4A5CD4B788606BD23F46E212AF9CACEBACDC7D1F4C6DC7F2511B98 - 65: DE1E5FA0BE70DF6D2BE8FFFD0E99CEAA8EB6E8C93A63F2D8D1C30ECB6B263DEE - 66: 191625E0BE4C2B741C2FEDABF54031AAA6E1991C95ACF95DECA48B925110F7E4 - 67: 810943751089482736CA4A0E7E04D4CE0244008F7ED6332D82AAB40AA1976EA2 - 68: 8720B909015D7A29AF3DD7A06F78729449F07BBCB56DF6954C032C0920491406 - 69: 0F0DB3C00DA61EAE613F02881890C3B896C5EEBFD94CD0DC385CE4002D4349E0 - 70: B0AE0E326C4BE7A0E1306C6C24DDAB88D01611863BCD6780B39D932227AC8510 - 71: 1E8633CB3FBA5DEDC5D22549E27CFAB03C8AC37884305EF25E9937A6F5F52E93 - 72: 028EB97D80291FC1F4AB846657FB2277CAE9D7EDA639C09BD220A9C869F0E9E6 - 73: EF0DE8AF9F7EB55976C1E97C2B5B2B61BD449BAD7B4D2F6C0C1D395DB1B0F247 - 74: C5BBC18015106771C91226EF36B7B1BC3849F92BB3D007F5AF78862677A27FD5 - 75: C730688E8971293A5F824E3B33AE03CC93A8790599C195F613FDF2124AC35520 - 76: CFCC0C08E078C3A7932293976A901A95C8CB0F2F75112D1C0BC45AC7ACBFAD9C - 77: 5EF9C11ABD40A9FEB17F524FC574F1834C009841FEFCD75086970CC7B812BD34 - 78: FC6AB94E91AC711546E915926ACB19C1B2E12A60FABFA99B4AA375A28301F3E1 - 79: 28B11E5D82FD3FB24CADD8110715134DDA8485E0314C163558A30A81C665D67B - 80: 4A6847EF66BCE6C14CA05EC8F8AD7383BF2931F4BCFD0373C18E059E93F9DEF6 - 81: B17155C79EE1E856F9264C526C7E2BC7EE4CB29AC0F4EEEA5F5351D7EA571C0C - 82: B96458DAF30EE72C5140B45774A981A13E847AF40DB3217EE2998773F3587EDC - 83: 0B7AD6C45101C2146728C4419691CDC8AFCADD7B2BD76F38818AB136BADE4224 - 84: A377584849A6890B585DDA9E9DC594DFCC91FB60FD4D00808D34AE379DCDB456 - 85: 3D173931FD3D576785D9FD8FA7179AB4C0768E2C2D264E193B1EC9EB9B01EE0E - 86: 34B9CC80478E5665EF5BF79B7DAC4B85F74E8768CADEC19AEAE6323DE332FE2A - 87: 672D2D2E6E995CFF226475999449BE91A43DF70F7CDEFF4CD39B6CAE60ACFD67 - 88: 87D03D704A84FFC46F5BB2A8000BD15743FAA303D2C59E2CEC61F3F7CC9EC2E5 - 89: D90E8853272707ABF2A7C7CF54233085D8D05140E433F94F27BDA873EF265F31 - 90: 2A9770A82D76F371336FD4FBE9999216F2B3C28C90FA25B1D42323691BC7F3EC - 91: 27D3BF094C5083D31AE11F855239116D6220AE1C113FA74AEE4560C4888598F6 - 92: 6C883E2335A2F69DF61B92046069BF5D8FE0EB5DD255F2BAA5FC230F7EC37968 - 93: B9A19A0E32E5D04C7110F0771C652D0406ED152C3474AAAC198ABD3EC7C8BCA2 - 94: 00F92A5B63E1FB1B3D3ED08CA14389C8BCACEE494B1F80FA839A7CD64339E7B0 - 95: 45376CE6418ED3454D301CC373671D35BFF7447860D86C545D380C8ACEB8B65B - 96: FD3748482969397A57DC96FA5646AF44BB4928DCBEBB795BE6D61975C3766BD6 - 97: 8A06220CAED39C22D8889B73351488D6550C43D4B4A777BFFA9FAB4F2074A4AF - 98: C0828951F49A694C8D807B2997BF0BF2D0123BE7D10B3DF23FA3D642DD67AEE8 - 99: A2C85460E965626580E9CFA7A8AEF6047720EE48EFDD0EF27613ED358425E57A -100: 8E2EB1BBA3040B8F611A1240A0E111C74B45CFC9CAED10B95F6372DB1C40B8B5 -101: 8F5BA69BF1882498FA92515D3105FC580EF070D2A4213580F0279D70B7406D38 -102: 9DB10F45A5CA40F4502316DAB6ACC63A4C5F8A1B95BF76B05C3E7896368AE24F -103: 7BF6852F77BC98DC83DAFCC4165933C9D600669406415653501D2C32E4CBE395 -104: 49F7F1D30B977E3F9D07C54B2A0DAD64513045B5942B634374B05365BBF4AF1D -105: 04FA0B7C1592B3F19E1D4981871E5E69DA3CAECFB07F11929ECC0CFAC34146E5 -106: 4E57D05348408846A3EA0D5C3D189CAD70FDD7DCCAC390CB52CAB05508E22E90 -107: E539064D0DE3B8698A336FBDEFA2B6E534AF90B37D7C8D8CB7054F2EB6403290 -108: 5F13A0F0307C6000C5AE6C5FEF866E4952517DD3BB824CB1D41E4326898E987E -109: E26DEA917FE9AB2CB7AD7FE19092160A630976EF0BBD809B5FCBE63609DF5978 -110: 5A2464499E08A48FCAE32B408B8BB608254E19A5758C66D9F77BA63CCAF81005 -111: 929DCDAF9B6A6E500A34978B5C9206D0258BC190F38C9E8E42FB19A4820B2171 -112: C881A3C5BA84905A418F3DA19726541B5BACD9E3438A741FFD980E00865FE13C -113: A2B62D6E7C7314E92E01DE6C10643B7B0BFC2C780670D243E676763D7C41E390 -114: 6D543DD890F0694C149B0E974730F05BADCAE792D50865744FAAB9005FF36DBC -115: 028C05BFF2A54FD6F85427EDB0CFFD878105602F7F72075E7DD60C3A252C1691 -116: 957DB4F3CED7164C7F23081A8B332C2C3738D292732D2D5809CD8DB522E2C4C2 -117: 2CDDF24AA6075E12E81AD2E5FE81F6A1DAB64660B5821B441E4F6A35C45DB8F5 -118: 4F3EC99446A61A12091364F8F542CB4940120A44B4448E13E696C5FE7583439D -119: 82878AA8005C85F2B3E847DA4B825891409A00D2950AAFE87D39BF07F8FA1077 -120: 1C5F22834AD113CFBCA3CFDB2884327061DBC873924AB2A35C8EE470594F074B -121: B94206155D4D699CC65E1D81D67F26CB50DB0170127FBFB6D300E2B521CC1C6A -122: A1DC94BFB2389377402CC7DE5AEEC1CE0B306265B57C0BD145255CE1DBAFB758 -123: 790451D31FF33EB38F077906A26D5A6C096814E8BDA984291E57315D1BBDA82C -124: AD8129C5BDF91F2B8932311CA036558EEBA072C70255D8917B13527E0C6BB6CF -125: B3FDB34BF7F8B89DC3031ED06310EFB3D92CE11749F7B4601684D7AC5B857CB6 -126: 67CB8BF7A00ADDC70A4947D055558A500802F9A2CF685CAA1A38A577CD308325 -127: D81293FDA863F008C09E92FC382A81F5A0B4A1251CBA1634016A0F86A6BD640D -128: F17E570564B26578C33BB7F44643F539624B05DF1A76C81F30ACD548C44B45EF - -Hash: keccak224 - 0: F71837502BA8E10837BDD8D365ADB85591895602FC552B48B7390ABD - 1: B7E52D015AFB9BB56C19955720964F1A68B1ABA96A7A9454472927BE - 2: C679915D1D3D4B3FADD84CA35D7E8642C0611B488B879B661A636971 - 3: 2D0099DFB7A1F00F1795E0B805EC0C020CF36F8DC9977AAF974344FB - 4: D0960AF8992B81388631270075343FF215579A5EA5E4EE24056BA7E9 - 5: DC1EC11FDA8EFEC33C78EA9871E33FB5F1184CB56E6B451699DB5B10 - 6: 5ADE77230C3886F87082E7DE3B9EDB3B35FBB2F0B5F45B2E0EC02268 - 7: DD30ACC836A52A97D2C9D10C533975BD22F979F27EF5A5D2506F5F8A - 8: E4E18C416BEA9C0F4D82157AAB4A26546BF0B06E4C46FA6A54C318E2 - 9: B5D8408F0AB44206F9E4E65D24423C0E45F88AB807C7FC6CD36D75B3 - 10: 4B9E7C7107341A5352DF6B3198A4DD0E8D2D2769259A919E36A95002 - 11: 7514CBCD43B4A3D10FD59CC01FF8BE939F309363F23FC1B83D42BC58 - 12: F3D5B6B6F6C6775FB43B86926D2E228DBC27386343F9EEA1114520A6 - 13: 58586A110134FF7D9749C44FB06574A4C8FB2A0A1C35CE6FA2443241 - 14: 8BCD65B1DECF498CC6272679DDD4099B52263673A484CD0E6E20E350 - 15: 7EEB8D74E9B933BF1FE77B7EFE220FAEE21A68A2C19C90458E8C90FB - 16: E414CFE76A9330D6F5D566307850CB85EDF7B848DBC55BD132AD06B4 - 17: FC8A6BF75E342F3A21B1F6CC142843C2A7BE867D7DF72C3B4C288F1B - 18: 1EB5350656DB35126109F6FF5128E7168C8F4D6F07AC0AEDADE0F473 - 19: 3414C9BC3A4522C2C3E7F303304EEE9A706DA59F12AA09E1D48C12D5 - 20: 51165F1A5E742E3E53911C753CA58B0E91037C53176BFBCC67DFB0B8 - 21: 5C29EF3B025990DAF2DCC196C1F3ACF713AF247405A626F27E91985F - 22: 5C82AC6B8C9C6E1654E49797CC1FA4BF265D390EFBF64156FC2E5C73 - 23: 357D31AFB3A697B9EB4F0C95E7F7DFED5347787BAD1101D224C164B9 - 24: 46937DC0A2C0B34A5B6C80C3F785D3880276ED68B800008D6D9C467D - 25: B05E356B2A1B41DAC5D43418921BA4CB27A2CD699E3EDCF95824DD28 - 26: 560E766CA26078AD479D9C0A26C5BA1CC24174F39FA5ED3AA05D135E - 27: AD3DE074962876FEA3BAB3A18244935576AAD24B090E2A98E6448D92 - 28: B423B6B7332189C910D81AE74BF49800DAD1A8AC28F1FD391F4916CF - 29: 142BCA7F8220B9938FAD4C18892096A762E520120AF5E72A9633F154 - 30: 78B707DA8654876EB0BAFF6F4E99EA1D18D60306F29DE94C084F04D7 - 31: 48967F2B7031077511B0115DAC83BF2582D0214244435274336ABECC - 32: ACAD3A650C69006D285300546B89C427E0C4DE00FDC280749E90055E - 33: 43A96A0D648844DF4004EDB55285954E8281692D82A720EA555D03E1 - 34: 6C895396F4591C2DD186DEF4724F384A20D2C1311BC308BB25A7E4AF - 35: 780FB0D15643B00F09C69E9840EF492A2EC8E7CCD238A266AE31CF1F - 36: 26B9084D74FC766F3497DB7C4338992C7CE6C798659EB03144DDCCDC - 37: C21905A23A0C19076AB55DBB84E03EF55C5942CC4D2B1BBDC9C59B54 - 38: 6FE139BFA942B15C744655716DD8DABECAB689D1E59E43A3F65A9BDD - 39: 2EB6990634A84679B26A6A875CD724BF36D005B3E0BA43EBBC09A3D6 - 40: 647DBC19FDF4E62DCD1D2E3CF8599DF6BEA60D48AD4C9C04729CC3FE - 41: E2F2FFBE869B001299120D6CE6C5815F67428D13CD01DB984FFD1613 - 42: 51D22C6A902674C509398FED4BBDC931FC28F5E0810391B51625AFBD - 43: 577324EDE3549E0E6489BBF55A9CAAB5EF8D967F4584CFEC5E809F96 - 44: 6BE27D361202A4F2C4016D70831F98DE7485A57B3DF127237BDF663E - 45: 83C2D1A11B08C2D8F115301EFE07FDC8B6631B459461FE4E471A85A2 - 46: 89E2F31AD3E2A2BB5506C8C23F7C4838A529DFA9D8F76D57393CDF55 - 47: 981ECAFA0374D5332998971B68109B1FDBC231736BD496AA68268FF5 - 48: 14A72ADD3087F3F675B15F408F3475697D9352F9F9D1920E4DF4E331 - 49: 16AA2B47C39467FA2C1B8A53CE26B31FBF1BA7B656F5ECB278CF9F7A - 50: 161CDDEB9596A2DDBB888F37A38E9F0E3647F0DD3082F6CC327E79A4 - 51: 115426B4E2F6BD55C5514545C04CFE7A9BD2F2B7FFA641BEE5CA110F - 52: BBADF51C6FF4043EAF28C923E535562469A3C77D2CEBCA40AC91F279 - 53: E8CF6E83642FE33411CFCA02C4FF1030B7A4995D2ADDB6B70ABCBE6C - 54: E82544623838B1AF22E9E9041B49F5C47A237037A21DDAC0E4E128F6 - 55: EA9E6A6545DE9874722D41A15C38665C9F90812409F07293A7177E53 - 56: 73B0D58F69C69B3D68EC49821356D7E38EA2334615328E863440AB1C - 57: CCCD1BBE3E2CC243A3FC72239F2D23B8361D92EC4F9A1CFB99EDAF22 - 58: 8E906C41CB0B64EC2FFBBF349A7542FF7921F002296018A1B069F99F - 59: DEBAFDBC154054CA082582E9C0BD99DE0093591FCA2A9A21DBA979FD - 60: 19FB370EFE48909406793F40D9196168AF1B82D669B6BE227B0AF445 - 61: C2BAB08A2A3568B1B8030C650EF520F04FEDFD841E7548CD9D1C97D8 - 62: 1B0D580355A6941F3BA7A537B963EA963097FA4BF777DC6E319E1E2D - 63: 1883E9EBA56865207B7D7023C81B4F82333FE15E82476D98484F758E - 64: BCFF7DBF63BAE54E4270ECDFFC821F069CA808EBA2C7D6CF1E96F142 - 65: C82DD25CFF6416555C79D6E2EB1ED1CFFC94D9B7552C6366149FD651 - 66: DBAB1F2AF32E0D3E5B7715D89D74E34277238C8C52BBD3E5D5CCCC57 - 67: 3DFD0B5FD9087D248BDC07D441B8B4BB157564D9F7B4EDE9F93F94B5 - 68: 2B797B168663B505EA64E61234B82ABFCCA6F9671BFF237F6B816DA8 - 69: FABD3DF81C1FA5CC2FAF192F0A122AC2A3CD20647C6523394CFAA15D - 70: 5DAE1400876B46E428F81EDED90F3425F06C99C4BA9B4CC4A36E0A2E - 71: 04407D2AA7CC99318851930443B9B40E460F9C4A94015A3AD69655A0 - 72: 064266CC9F576342AA334FCD9380076C24C97DCFF31437DCE9275A42 - 73: 894E3E76CE8E47B5E9E453C0A13043ADD1B8CEC28671D10CF7F2FE34 - 74: 59250F3315834E7EEA5D64CF64399CF19E822CA0F07C57C20543D9EB - 75: D442D042ECD7D79E7A512014225297EB5F82EBC0796160CB84AA668D - 76: FF0117BA1F4A0B4C3608038BEFC921044E054849F9517B85D3D10905 - 77: 8147A3266B3409C50D4675B6B6BF51C03DC9C2B0B35E5D680A0B1DF7 - 78: D5AB7BE2F5CF67F1002DD05E1AFFA94FECC68F96956D92E896DD5B23 - 79: 718A83164DB7280E110332A9C35269167A1CFE1D90F7EA177C2BE2D8 - 80: 457E1041ED34819B4613FE1AA5C2966344A95A9D5D2BC66D7FB93853 - 81: 059FE8AC2A0596C66A000A02D3AD2FB02C9A4E01958CAC8F96DEE727 - 82: 5B491D49C14A07B7BF58A1EC9BC522B991D8D0C77028907A8F20BD96 - 83: 2BA8EA6F1F3E4D9B184793D5129384E21F38605D2E4057AEFFCA764E - 84: 7B761AECDFD982F74458187A8E59D9CE44E71A38BC8611C712736919 - 85: 8000EF098B61D8F97771FD11FE41EE149FADDB8416A7BF1FD8D9E181 - 86: 184550E13216C126913A017A9959E25C1264FD57C4A960BCB183F0C4 - 87: 21479431734753AB73424FF08B8D293815CCCDF5E97EF1AF09BC4EE0 - 88: 97E42177C199F1828471BD2FDF7021E12EACDDFF04C4795B6F9B6864 - 89: D108871E3867B0D81AAABCE605BF315FBC67FF6A64068E58F9512797 - 90: A9704323652578B7F2A8EF3D6735D3783772C32B1439D395B044EB71 - 91: 08DF42870A017128BA6DDAB2DCC5ECAF7AC42845A11B12FE50E4D74E - 92: 3F0E253FD6FEB5B1CC3F460B9AC1F1C2D4460ED55BF763940CD31AB4 - 93: E04A69AA755571B81BEB3B74995E337A109B40D6A6CB1B765A492E0A - 94: 04F9AE60DCA1D7A0A077DEC060DA13C2ADDCF6AAD8EEC52208EFBECC - 95: EB77E840CAD301690C232153C85E4D9753D4A91C6EEBE08FC39A698C - 96: D1878202C83DAE8F7363373072CD0D93E99542CF5D3F2C578751227F - 97: 384E05635DB869C03990C3DB9B606F74B96CA7C331F15A032AE6291A - 98: B6C2F07599EA3BAC475710F75C140D733F54B1B5584AA7B9C89F7401 - 99: 79E41796E9F55A9B63387AFDC90256E002E553545A44CC8D3545C6D4 -100: 4119A8BEAB608F6B14836E530CBFD948739F9FA8C99291C2A5E7ED8E -101: 59B2514FAFE191F5666AE51C888FA3371CAE75C3533BD59602F10CE9 -102: 09825006374651C0298499077BCCA16C61D737D765454A699DBDFD0F -103: 1DFF7242E29F08C61CF0C2592A9BB7E241FD8215FAAEC10E6774722F -104: F7A31734522F540BA5F14C159E7E6A1BBED99EB1800EA52AF1F73538 -105: 4C7CC838C5434ED03B9B76D9B5E0C9780430351697F72F805C4FD0E2 -106: D1269C06F8F6E2605DE4344308D8579CF27BED73553DE376C31BCBEF -107: 28405A90D0FA5C051EB1538A24B0F0785D8B94D497986259AEE25BF4 -108: B17873E0010724A7B2EC41C0B962E02E57D25DF77D39534DC3D5B6FD -109: 71AB9F58A7F07AA203635A4AF47F571477C971923AC2D0FED4547B7E -110: 7E223F519074E15242ED2E2CD2A68D34FF63FAA042AE58DF90B2EBB3 -111: 9161BD0513DF4C76918B9616C7CD2C74E31A0DC6EC89F680BD70A26E -112: 7D30F5B92CBB8D348FB009948560DF8A64F36E550DF547DCEB3B6508 -113: 236AF64EF2EB480EF1A618E658E764AE066B04A82212AF43235122C3 -114: 944578794B797DE313E1ED5E98CCE5B7D7F125FAA797D68168BEC103 -115: 0D6FECA9C59E21FFE6D98A2EB7F4E055A7A2499B8B1EBDE880764983 -116: 1904445511502C778B29015D4A4D6680A86C66604371D0E039B85EC6 -117: 03457FAD17A7ACCDFECD69B26C4534A9F620CD587EFB9D9AF18502CA -118: C4A362DFAAEAAEF46BB80B6487B6CA40B98BC7B941870A901783D860 -119: E16E91CEBF1735AA8679304E98DF84F7775A043CA8EAD57B231AD822 -120: 9CBDD4877F174938AF28F85FCD96049C9FF69781F38908524C583537 -121: 24DA7226935AA22D08F160E57E197F2330E9D577066BB7E4322B2275 -122: 3267D2B6DE6E93572B35E1795D5A52F7D9EEA32C5DC193D8249D69CD -123: 66D182DEC54F9687BBE5731C8FA0302D0567FB0C16EA198F633E76D1 -124: 3E48D1B6FB23B6409BC23ACB2FFB0787C38D1F212C89466092A04EA4 -125: E725ADFACFA9E46744745AF9104D68FB543624ED4EA183572ECACBD7 -126: A97B0B4E30996F2276848506F60E466BD2A685F90CE25C5878D105F9 -127: FA448BD7AFAF2E01E15416E4184D5D173650DE940DC41814997B0DCB -128: 08D30718E87968DAA344E4EBEF9E1586A4FC5D94675BF65F3DB81805 -129: 4A65605A63C77135121606D4C0115376EF35F89DFD92CC826B6CD0BA -130: 6DC8EAAF1D70CF6C72F587C62CB1DE33E04F714B306E3825D16CAE11 -131: 051C2BEE5A1F7A6B36A03CD04215AB72FF6E4BB0C11DCB1158F18135 -132: 0661E8797A9644FAD4FF068E7C2A8FFAFF46A8B8D74CDF79C03C89B2 -133: 6C95F9427A910925BE45BB4704A5E43D55F73E9EBA1BA6E64FA70442 -134: 7DE46F96ACE4CFB2C3DB825555791A8A58CA81EA4705FB5031C8981D -135: D0AC8323039FDA2BA4B4114B15396CBF90171B92E6C079E9268F3353 -136: 746FC08A969BF648D0E16BBEB8B3E2AB33A94CAA1AA4D7882DB673F8 -137: 6BB28759F137E72A4DD54D6B484D857FAEDE9B33FF38C7202297C055 -138: A8DE0FC70B72AE936B180C287438FBAEBD79AF327420BA18205E7D45 -139: 1D32EDDE694460900E186649F17C749CEEE91F10C34C87380285A836 -140: A4B6210BF3A98A4314FE53CCCD6A343024AD536B189064878433C400 -141: 3D4F4A8735AAEB06875B799C5F6EF68DC24361BE62ADD9CE0FBF9F2B -142: AC724BFA6D3979C1343BD0E6DBCCE1E5481B23801BC88A71D49C902F -143: 374A82237511B565F6E4216E9ABEC3AC081027DC05265C697B32C284 -144: D271397E154EBD140589C670E5B04F0DC287C660DB53483683C03525 -145: FB59302AF80B4F37C2931F6475BD6A782805DCD14F5087C84E401F5C -146: 44D330D4A05699EC641C0E1FD9BD2213D2494749B8DB0EC204101750 -147: CDE57E90662AB753898D24E5BCC1BD508EF6A31EE070BA2213E53620 -148: 93EC8B71607372B00B08757DB484FC1A048AA2BB7D58CED32F06B672 -149: 6EE882E9DAE9C79094B9F4D4A4F7EE41011DF7AC3A0C445AE77F6AC7 -150: 56F602B43B0A8196201E33E8C744BF20D9B0AE67F28C3D918B9AF937 -151: CB13A9EAB66AC4AD317F555AA4FC6A3E3C3833765AC63355EF9225AC -152: 66E3DC0B815394D8FD40C06760A1D07345ED516CD5245D17FF7E397E -153: DEEE7B25FBFE66AD90A983885DEE62E987F47A3383664583FDB53335 -154: 093BCA5FEF1F320D403C1AAB62F872F2DF0918AD868DAD9C35581860 -155: 6E046655BF9CDFDEFDB6003A4C83B1745B7E729415D1677ABF8F6E3C -156: 36C188B7A0699CD50937D861323FC13F18117E4ADAE45320D6050249 -157: B677DA6D49977AA591BDADB2BDD60EB6943E3FDAB61450D47D7B5A1E -158: FA24DBD2FF8D6AE55AFF99355139AF827759FF9BB4112E95962542EE -159: EB8702776CBC5D68FEED74EA0CFA2D4547CB9630839ED808A827D6D9 -160: 46ECBDAB796DC4A0A8C4C8C249E4F8C4572105231C83ECE22BE7D631 -161: D182E61FE74BFB11AAC868E07B110FB7CAF04810BCF03617D97E25CA -162: 4B19D6356FE7CD382506BB9F8E538685E3E2D2331502387147574914 -163: E8515DDAED9AE818DF7CD6ED4F77D849E9C887D302BB919CEBF118DC -164: DAB625BD50300E131256AFF8543084DF66C02A76564DA068BBB41074 -165: 52EBB1A919D2F0E4E1A5C1ED273E9C4DEEFE0D6DD069B94C2F56291C -166: 97EEFBC8A3008C37EF75A92FAE33DB3E275C16D12318FEA015F29002 -167: FA5D0B600EE9BCAE7F2DAC0474A24A8B7CECC3410718518B1B4045F5 -168: EF89F2F17F4B00AA908EC083F5F83C67199E446B49F3A51A5EAD235B -169: 1E7E70B10BD754661B9C5AF405EBED8191870EA59E4A67C1C8980274 -170: 82A00BF8D7FE852F0CD866A1D6DB216A8AF35338C504758A57AC44C2 -171: 1689F9D13B745C8682C7B4B0E962EE8E02BC9ED324B13F5494D81D60 -172: 29CAAC69566FC691E2BFF57F4DBCD1D1E9A33F03079C61E5529829A8 -173: 66EF6B4BAA295C6B4C21FB188E5D0B3834F16E8373EAA82FE43CE23E -174: 05701D8FAB32A896E0BC8687AF802A93E6C05F8D553971FBFC8F1CCA -175: C3F84725160431955FB724E96E91B02C9BE9DFC3961EA8785D3068D5 -176: 92F91A1FE983DC6A8DF65BDBD31C39B1FE07D02C4CCDB815A312F096 -177: DCD2A8A458DE3F038F79E59E0178BC14120E726A0AEC8C7A8AFD0ED9 -178: 6976A6079ECF966C8391615D44EA70662A491FFC65711C301A3E02A7 -179: 427D6F917CA622647F477D0C59DB0AFA1EF3DA2F129E87A846903A16 -180: B47E033B05F8ADE5DF95FA6D2BB40D6E28F8BBC83DE33D7884006FE8 -181: 580460D01D8CF507E8A2B3E8C2547537EF731605C70C41250CD2977D -182: 2AD85EEAB2CB7187AAFDBC54B59B5A73EDB29226CA7C9092A5670438 -183: DE2DDF963EB28E0543A04B056719D3C7F523FF0B66740A718452CEFD -184: 9E5658FAFA48920841CD548879BEE65814AF81033D3CF69AF06EC784 -185: CA71F889616B7C858A482878BE095507516764126A66EDE7E300822C -186: 2DEDB50F0C587D601CC616460C84A2E4A499509577570EFF7AAC8560 -187: 08963C04457A2FF77B34509C19F2B5F082574A58E9AA581DF783B882 -188: 6702C4D43D96B37D1B35259B10D056F91FF2B9048196C05609023A61 -189: 1F3BB700F9928DC26DE32926234181EFE151F73D9FBBD601DACB0E0B -190: 6EAF96DE6BFB1E6EF17691EE34BAF2EA6D21D195BC026F93067ADCD8 -191: 1BE947658CE876881234E79C18492DB965497A7B97AA4D56F35638D1 -192: 6307BA550D2BFE03A8C2D15C3F99BC113B758FC634EFEA71DDF627B1 -193: 861FD92FB95D32FC3B43D23B13903630107169C6814E0AC07E5FC638 -194: 833905412E1E337158EF60AD7FE09BFAA0654FF8628E76EE2095EE4A -195: AA726FD6FD62E35467C158B98F783E0B9AD84BF45512198716E0C4B2 -196: 581FB459273A3D1AA9CD6269BFD368B3D0BEE5E6E30AA168BF1B7CB3 -197: DF1C4473661C2A86E287779811036AC849A7F9B5015D653E2189DF48 -198: 883DEECA89E0A7461EBCBE167A0A36B1F3EE53B838220E1F0D8310B2 -199: 09A0902CD687F7A3790112C6E0E8BE9C95CD920FBE66CF442F5F3AF2 -200: 1922A6155BF6BB5ADE5100C99771912596E45D8273347D5DACA1F3C9 -201: 079D18C5B5E964BB2C74FB99659907E43087F0ABBB2B0528418C8753 -202: F478C0578EBF89DE4A0B9E71F31B508C13927BC61175AF0995C1EF08 -203: 0FF82AE79280A6DCB12C85A3179AD8A9A4B6CD4FE167609DCB08B17E -204: 264F01C1874050EBB1D7D5CFFABAE2E9446DBE3A3542A2AEF4DD1391 -205: 454A064DB32B7927E8F1CA1032CB0902B9ECE58EF1F3B1986E9A37E2 -206: BF14E2D3E4D7BDDA486DBC7C0805D8F88FEE9BF062CAD7028B566314 -207: 8DD748536B66560292B219A8A9B3A025687EA716BA1098821F6B262D -208: 54E61DBD97D0A1686CE73F3A1BD86FE5A004B7F0BED240C9DA8F6108 -209: 2EFE8CD8920A4617A68F17BA8FFE2EDDD4C168F25F601D4D3A3019C2 -210: 587C7D35AF28A196781CB517AB931C07D7D207707602C829003240D7 -211: 3A7F78490A088572107278B8726EE77962BFA644939B41161044CB1C -212: 15E2F9C27D8B55662130DFD2D36F555DD6BA10B80983F5C9119ACB5C -213: 3529492A3218E6D7F3AA0D7AD66444DB45FA915E88E25A104E3A678B -214: E1A090685E80B914605A29CB254B0870A5BD7057EA1F02A2BFB2C1BD -215: 355E60F8116988E960A6680F85697888DA75DFE326EB96ED52763C4B -216: 85DD9AC379812ADC231CD0EE42AC47E3EF7F76BFE2E1FA03914D4259 -217: A985AB02CE8E1EF4F8D5C6E81A966E7725F50D31D05AB85C11FDC35E -218: F7788355EC81F463B4F57D8BF7A59EDB8289DF0205BCF2A613C59F8E -219: 3CB1981A0DF2BFAD687E185BA258062A845B9DB7935F3EBF4D175968 -220: 8A32686C43E8340F13E96C92F205AB5165F6E53259C95741EAC78DF9 -221: 6863D314554E69CDB0222A6F14EF08368904D99A601113CF3A8936B2 -222: 9EFAAAF20C138C326472869F1F4DBCD2B4B56E95613A37E776844B0A -223: 5A5F7CDB4243BA30DA39D42790EB9A5AF4BF03B5E82616EC8CF40064 -224: FD282AA64059E8998B62D3410C6BEC7A37ED5815B042B4C5486D51F4 -225: 82B310AA7A8B72E0838190465F9BE0395D0832E3175F9B3814FCECBD -226: AC22DDE178D24EF79087B59F9E72FDCC7AE342FCB5F4DBE5B9E73102 -227: D4491AA26EE3862F34D8E9540377F45655F87647DAF3C21179784FA3 -228: 259F80D7A95A458233DE9B00ED1B27409A6C84BA154D1379B452796D -229: 56BA3211B4AAC4C1816A9C7BEBB524EA4C05FDF054E5446831604972 -230: C78D6680831C64727D014FEEBF756C792436C5290920BE93FFEC79B8 -231: 8E854DCBB9F083062BE7039EDDD3533FA50F2E5B95E8610D40B05378 -232: 697F173D62374A934AF5B8FEC8523A8F5FF47D26D90D3B66F1312201 -233: A9F91717A3576FB714703DA8F16E587C36B02108DDF3C14F362A00F6 -234: CCB9680F73A7E31401C3D9EAC7C2CC9493A78394058BC144273A1391 -235: 5986CBB39128884EAB6C01F3EFB078E18E214D274A13EE0F475C4BD7 -236: 0EC23FFCB9DE56C6180E4F0A20B5170210CA68731CA24118EAE19E1D -237: DC31314FAFF59BB3863040D6DBEA8B2CAD9BE67E12AE8DEAB6E0D808 -238: EC44310859D2F7B384468F6C013DE2B6B961E89E7973E4A0E15998ED -239: 9EC25C8F45853E459F5CF045E21DC90BFCB2AA5039372E38F6D1C8FC -240: DADEB9B87F548EE9598638E7D603AAFAC6AB6518B0A72A0C1A28641E -241: 2685D9367BCC4D19267F16416A973E6EA50EE59CE20448A3CED5C9E6 -242: 5839A96A1495516FCCDD2ABB4B0D7CB460FFFEDCCFD940DED62948B0 -243: 3D2E5BC6E5D16D889A3B98FEBC74581C57AD51C343ADF8542B43ACC2 -244: 59C97F301348AA3807A0DBB1352BABF09770A8E7FBA24013F554A21B -245: 26F17ED4CF35AA0019B9D2A63506B988D8F27F6095F593CB46EFC72B -246: 893F405721F98710A2C18D42421273B2F2F24303C331773D60AF46F2 -247: DE80930B7499EBCAE762AC52E879E8B9D979987B3B6F84B297C5216D -248: D8376ACD445005E843760F99A5622A1B9B3218F5B34347862AF7B30D -249: 127FF9B9811401B63632BB057BCF9A8953747E370EF2B60536AC6D95 -250: 8690509F2F1BA55DBBF29189834D9997046199BB79BEDB49B3C3532F -251: EE67CC9FB12215F380D831E321F423C08737550ADDC8451E461C2106 -252: 68D5229B0FF7B906B041260B306EC8737C651B98D270CECBFD3C26F2 -253: 51C9507A3456014A1B8E549465AAEBFE89F90B974ED797772C53FF10 -254: 38535F47C57B652DEDCC4D1265D48302E13BF97B374EE6DB6B99BA8F -255: 62710EA81202148B3DBD0FEAC248F7402D0428B29B9EB3FC0E3530F8 -256: 0ED84ED277ED5EEF8317AE0DDF1B7B7277B04B5F632FE86ABA291977 -257: 16AFE96C863B0099E37B747213F039386005A839CCFFC8548B574410 -258: 370BBFEB16BE695ECDF2487A36F0ACADADE93372C7666C7DF1A7A66C -259: BC8A40B0D924C4A7920A69B157F28665E2075CC22F2E59074BC1F3F8 -260: 0234749DB49F732A06734B9D4031F9F7CD1527A8046EEE2C7DF26ACF -261: C261D88423413C8B5894E4DF9C38622546F53F7719ACFDCC42CCC05C -262: 4AF23A5364000BD06604F0E506073AF090086E2955C1803315BBBF5F -263: 4EF085D0D052D41FF314B0128FF74210F7302A9ED81B9C070354AD88 -264: 88ADB2D27A6FB94C1423C764647B4525AB55C0F1D318889F354DCA07 -265: 5479C103D968294F807CF33563F64E4AD368DCEAFEA8541CA55376E9 -266: FE01940BB4E4CAEAFC33635BD2A9D692614716293D02BCE83E45C31D -267: A2E93550751D63C30EF65F5804B49505793CA681736D55A804BCC12D -268: 8645C889BAA7317DE60DA9FC5FEEA8B42830DFAA9107ECE2387A4CEF -269: 7528939602B263B51C791E34C7AC57C4DBED055E1665C5B33B8CFCD0 -270: 7387C53CBD520DB370A10FF73A8FAD81253BE50CA55962E83E29D2BB -271: 626A2778B70D03430DF58FBF924CD08F12F60E744E143B82D3C9CB20 -272: DAE0B5FE5E17B2C65E8EBAFED9EDE2CFE29D72B6DBAD88B04870EEB0 -273: 55582E82618621EB79E7E967FE57C4DAAAF0A527E0C9E9D145511C8A -274: 187DF095B0AADD1B25ABA94F1E9B190C19E003CA95C3C39D41F143B3 -275: 7A7EAF3339C175CB549BC06A08D9CE3CD14476143F9A3F2B60C99297 -276: 688D8E743B79C818E1E1F12287FBFB8D79E0B82C397FFF05453CEAF2 -277: 9825180241650446FA326A324F4DD81121B2CE14BE3949EC50D6715F -278: 73243B6079023B59D95D0335AEC04271FB996B075B3B1BCDF32BAEE8 -279: 0CB055DECA6B7E856CBFA594EFF24001A4CA1020C11E2FCF258EEE45 -280: E2BDA37532A5070E0B178F7C418D859D42FDBF9D12B5B384D36FFCF7 -281: 2128CFAFF1868DFB6F02650A58C6E81014C98E5E586D8B2A302E70F4 -282: F854CB817DB0F4AA40EA63A7CB83DDE93B7D5B7D0B7190C8B8B093EB -283: C1B3B0002AFD4F3C61BF2E001167BBE24C50A29E80A57149CDC3BFDA -284: 1FB4FCD48CF7312A7B4354B1CE25CDD4FFBDA1DB1197946D1A587847 -285: 99A9B9E1F7D57A987B19C577769D32FED8B96C858434A60CF838271F -286: 1206698E5D2E6650743EB3BA6980649B0CA1722450718CDAD43B3CD3 -287: A3706BAF066688B1D7DE624E947CD3ECCB9E54D7C9EC5DAEE3B3032F -288: 541FFB881F2E57318F48C0C7DCCE9244A995103EECEE48413BE403A6 - -Hash: keccak256 - 0: C5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 - 1: BC36789E7A1E281436464229828F817D6612F7B477D66591FF96A9E064BCC98A - 2: 49D03A195E239B52779866B33024210FC7DC66E9C2998975C0AA45C1702549D5 - 3: F84A97F1F0A956E738ABD85C2E0A5026F8874E3EC09C8F012159DFEEAAB2B156 - 4: D98F2E8134922F73748703C8E7084D42F13D2FA1439936EF5A3ABCF5646FE83F - 5: B76772EE47306482C3E219E9034BCF3F79A9BC88D6317735CD5A0E21D661ACF6 - 6: 51E8BABE8B42352100DFFA7F7B3843C95245D3D545C6CBF5052E80258AE80627 - 7: 801560412425120FA609BE232D6FA71C7F64F42AEE7977267687DCC0A2F5AA63 - 8: 59E7C99F6BE4FD053D7C99F54E371304A33213473DC41F1825B7F3CEB33841A6 - 9: 1C2876C406ADB4065117127D838F839F4FE555C0106787D5CB24F6DF3444E08D - 10: F0AE86A6257E615BCE8B0FE73794934DEDA00C13D58F80B466A9354E306C9EB0 - 11: 3265140FDFC32C9E426C38411EEE8756BB33F183D0B426D63AC15C517798B51A - 12: E46410456FEC1D54361B354AE212982A2876E6E16D3FABC90318018823EB91BE - 13: A1B365D45C3CDE59C247B81FCFEEB1C584CDAD573DFC2E3BB32D4225D6BFE989 - 14: BDAED152BBEEC4CCABFE2FD4E12AC8F5D8C91FEE07973817C6EA4F2DFAED32E7 - 15: 6D1652BAE8D6432BAEB6E6C317C1741B3A40A7BD071531849F0715C43C700E64 - 16: 01AEC967BA5D2A807EDD3FD8942C6F72C0C62961BFEB10C1F79C756F7294B0E3 - 17: 5486C20DE406AEC410864158664DCCB105759AA15B32D7C08D5DE24DB6C0BA98 - 18: DF88CAC20099324E18A83DC3E0E955FAE959E4244D80F27FAFD1B86E35413998 - 19: 1AC33100BD4AE7E7F7F147DDA368A0F5A28F7A5A61E7CAD7D3579790BAA55D83 - 20: 27DE39F50EAF89FE36FA279026A22605711FDE9C16C0F23AE2C3E9FAF4EED6AE - 21: 3C73B64AC0B35803891CE2E239D30EED547433951B4DB1477E700524F15765E2 - 22: B3553BAF5F240F75A4A2BD7390033D6C6B805653F2B027F39C72431E2E1BDB2E - 23: 292A73796EBB43DEEE6CA4EAA0D7CE8482EE2F3FF256C7A4A75B169813E23496 - 24: 5A57C46D393B384A04667039B03592449FAA4297D6DFD3C6C652FCCFB98D901F - 25: 525CA978447173611F5B3631C9656B0FDCA1BE8C6F0FFAD08F4DD46DB7F4B0CD - 26: 10C28EC2B0A2B8DB3ABCAE67B8E4DC1C077A9E32299777795B7A6E08AF188C18 - 27: 8D0D0475574BA093FF3E2021E5D5570955BE753925780B32980CE7EFF4CB97CE - 28: A198783B066809469953B928C4E4CD4A0649CD21C30876D265224A499357BA8C - 29: 11E7E8E86BED1896C0AF0788C64A6075347455B09D594D08F9A43D915E3193DE - 30: 8F460687BA2C07E371E8B2B116E50E16C45A44BC43C9F859EFAB0DC871B9F197 - 31: 3E50547CF72E8583EE91462F9D99FE624F53282F78E1A5EC2347B1D0123D0D9B - 32: 8AE1AA597FA146EBD3AA2CEDDF360668DEA5E526567E92B0321816A4E895BD2D - 33: F08683775F4A25DFEF721C487073FB77026D45AC57E423424290E47AF9FD2835 - 34: 2CADE1A0C349AF9546151D9129A2060A653B33CA635ACA24A0C1C7ADD2E6C8DF - 35: 78776299547A4B6FD3E5FCB87BC237A952EC910ADA6A3F747C9C0182B07521B8 - 36: 12BF82157BE1FAF71B6A82EE6CC23A9AE44AC7021FA9231F45C6CF0CBA66774F - 37: 0BD17DFD5F30713F4A430DDD4E54F11287D3622606FB63F58C042EC2AE6EAC49 - 38: BC400F869C6C8DC8C77F37BE1CA1BF820F9B25530EB914B331ECFF32B83825EC - 39: 5621932E5E0008A40CF9E18F7DE8FB327F1B73ABC0B3EBAF2C1DF9CBA29DC7AB - 40: DA227097C39B25F51EBBB255C17B0EE624BC34F0CEA142CD9A811B96D3D41F32 - 41: 2683F85B40B1020AFB7C53BA127F005A3D23F846BFD348317D013819C032CE44 - 42: AEF6A9E910C3E9E46B2472267A7C2096E6C09BA35DFBD0C014585A08DA65BC59 - 43: AB6A4FC111AE74B3A74C019660F045C87D205088E1D5455709AA79099B49DD9F - 44: 50916B557A037A1B4992AD5F1AD3BD5E6B7A48C14F4E6D541B379B01BA709FF1 - 45: 225B0B003DF7D0B3F85B341E8D33BEA10B91B3BB43BCD57FF620B96B069D21E1 - 46: 5F763E5DBEA932D1296BA8530AD698A4EBDA166AE2904D4182043C3B7DE0691A - 47: ACFFA2F286A18591ADFCE73BB51D17A87D42CCE9F528722012EC074C91A8E725 - 48: 39264A37173F6BB8BA919E2B6E820682FD23710F40B2466EE82228E8447A1F6A - 49: 5199EC172698C7616ABAAC86F618B0D367CCF2292400417139B8511F39F531E4 - 50: FD34586CE4E5EDBE8EB1ACEC8725983364403E5AB71673CA2EFF4DAF17593A60 - 51: FC5860FA90EAD984B85A91A3093F9D284A299C59EFD0C2F7CD337C6BC66BAC30 - 52: FFA5C7C7B070F5D32CE188D8D1241C66D7616274620A90BB553ECBCDD5082F9C - 53: 74793ACC214D9EA58406BCBDE0DAD0B7308768C9F3EF0CEA2F700CAE57C0301D - 54: A245459097C4ADBCBA098FA238626E7E52A629F63C531601F07769D4688B1C50 - 55: 797F92D5E159D80A886C0A7802A255B475A1E8E473E8CF4345144824A2AEE79C - 56: 0D0BF4902A749DEE22EAE5F1B6E2B867BA696CE9BE7632EBA14315AC09BD1856 - 57: F169AEDA92AC03A64D7168E923F5F41FF8F68B6918052E07288645E2C8564C41 - 58: 285BA965F73842105E7AFEDBC7F18FC19AA30E414CD514AD0044F7956D3780E7 - 59: 21139D610D6C906A4A399040F0C0F4544A9DD8369096E569445BB1BD48910BA7 - 60: 0AECFBA2511535A2BC90EC9E21837048C910C8D4C81D3AAD8CC0AFC6693E4F85 - 61: DAE4882EF1573818C264AE752C1D4BDFCA44C1A51BDE700D6E3DA37CDBB8C23D - 62: 97C4B68A5AC6F87ADFEE9CB69B9F1F9D3AC91264A9404E5825A1D1EA473F2900 - 63: EED42DA65350E8490C201E15DD3BDB8AEAAB8618692DB71DB386A19B6578C59D - 64: 002030BDE3D4CF89919649775CD71875C4D0AB1708A380E03FEFC3A28AA24831 - 65: 64578D7B8AE53C452C57B27375F3827854A7EAD6448DC566D77A6673701F50D3 - 66: C400A829EE7726C580D7D5FC9D3254D149E371879FA657B4DCE50CF98F354A6A - 67: 3DD4C9BC4AA93BB5B8A21A06ECBEF5336C378A7B9814A5A3A743406A54A3CC7B - 68: D4EB1DA8CCD3C0D0BB75A19004AE13919FB788861529AEB68A180BE25DB574FD - 69: C7A6078FCCDD9E9D1AF676FE136F23BE7DFC9BBEFE455C787C1E5EA30BA88EEE - 70: FBA337A6C60C401AD95F486E6EB259AD47B875B6831FF3F889F364E6ABF730B7 - 71: 90B85DA48683B012AA9FCEBA0E81FA6B724C3FFC7F358166D6AEDEEC6608E601 - 72: 0C478A57041F7910BDBEEF2AB6286EB293068CAD92C797E265CB46F3EE8801B7 - 73: 1E84EB5179D80098682D224D9E6CE1F37C9D5BF4B817A220C4DE5D03D55F6AE9 - 74: 1951D797AD88CE1CEE2CEF845373E9489B2BB60D45ACFFDC6EDB3E7EC4E2856B - 75: 6FA4A77C210D4B18F109DA583D6970ECA13C2DEF7EA8CD1CA39BCEAB08E375B2 - 76: 73F7C43D64B877A25614F8B8DFBD31ED4F0F22B97E0236D2A2070774434CA3A1 - 77: 1856031CAD6D973E878D84935B5C82E8B5E45FDA17A7F081BD6B6979BFD38C31 - 78: C84A94EBD24DAF01AA127340E12158A567798DD78F3C76BDCF1F3B25A204F722 - 79: 1E924B9D89D3002A3BF16EA3F41BE85E3CE993C15C500B45EBE1FF4360D90FDA - 80: F0FE5C66FA31E6089CE5553A1BEE59A71251A9801E1CBCD133353CE8079E085F - 81: 3768DCDEDB14B482B27BC13B504867A6A2036AC50058A89D3ABD76A302BCC74D - 82: 1C0BA490435E9317404DEC4DE1450FC25C1E6606D11F2777DBA2BC726654D44D - 83: BD8BD96C5B5A0CFDE7EE879BBD001EA39ECF389475AE86BB00A8A5B8C2196027 - 84: 4A40F287C7B21ED8E07BDA2C39A927CB3C489A4A3B2ECB38B5FAD1B114C9B082 - 85: 4F867360DD0508BD8707E85E916348C27A53A5A08803515D6CFF2D52C1A01854 - 86: A81C9BC51D1F40A0711A15EB8BB43493269220F1CD47DA65A300FDE8C6178EAD - 87: 15D26829CB1EF39A2A83E34FA562257A9E8A1CA7B710849D8666AA23F6F27CF7 - 88: 02E08E8C61EFBC269AE61F974E0D6465F36D6CB3824A969DE9F463CE159FA755 - 89: 73F15A158FB330CFB82A77F2F663EF489E208051D2385D32504B0661282F8C3D - 90: A7FB06BB999A5EB9AFF9E0779953F4E1E4CE58044936C2F51C7FB879B85C08BD - 91: 270D271B23378F33E43865DBCBDC58F6D2B3152D50D1FF647FD9941CF01FE16F - 92: 7FEA2A75041518F5FE548A415DD378A67DEE9CF8E2F191E7828404ABCABA8CA5 - 93: 67D64D7ABE79A53F98387CAD23780EADADCB9DFC1530C4312D5D1B0461B8F929 - 94: 01F68202D714B4651A4FAF6792CD810E9340FB27F8B81458103380C97D2D3352 - 95: CA13AECC8ECE2CF5BCC618286B62A6034B3DE78828FD131CEB5A3F5DE8A673B9 - 96: 894F0180A325BF111F4E5979AB53CB88426AF23845F5CBAA5A9735A00CC87F10 - 97: F4AF8BD6B6AFF7D8385039EACC579AF54160135C87B2FFF3C33BFFCB4AEBCC8A - 98: D9634C80888574D94C557B0006C50DC16ED86DBD783B9901386E695AD52830E3 - 99: 08F42AAD40F5014F4CFB1E99E1BE069A1C104EB9B10E4A95AC5C84B6E0B134BF -100: 816AFB32E7661842252BC955167EA1E36FDE4AC8CFE932978B9DCDB04AEE8CA4 -101: D4DD059D51ADDC79EA2B377FDE8E981D04C0AAE0B1639BCF7E300AA469DFCF18 -102: F21A847083767AA565E3E61DBBB4D08717D526410D4590290B05C5101E3CD009 -103: A10159D654425C47C7433B44E4D4DE7D0E8DD107119EB7C59E130A8292B35623 -104: 66AC308CF5E4113F5E821881583BA1E371736B22FC2BDAF34D9AF78F019ABBA8 -105: 6AD13006FAB59840BB78584D58EDC5576E2E4E29652D584D1EC24520EF2C2C56 -106: 9CE52929C3AE15B299911C57DF45353B013A81349624C2624C72AD58AB06DC84 -107: 42847C4CEDB10B5CE736E57761B5C5FAADD032E76D2183DAAB57B5EE6E9331CC -108: 84020A6BCA030D873FC4FD99E9B4DC9E0ACDE9B17BB1FD10BE731FEC464192B7 -109: 2F94445CE89DBA48A219BF1BD734DB1D17F56916BAEB78CC19452CCC727F8FAC -110: 9A133D482C182F6FEA53E3560B5223CB1FBDC1CF2683F2DAE8E525D7C3D8EA54 -111: 0E2A8043782DA1105CA8652BD9280AEE14A8BFC26DB740686790EA80B09A6A66 -112: 57B2F6B1B1692C57745FA6D76F34F06273AFF8A75FBEB33CDC5456DC450A5BEC -113: 66D743810C4B20359412ECB648DB4AD99F56C330A529FF3C3F692450A3383C8A -114: D0A3B4332B5A19981C197EC8DC11057F6B89DE6CB00CECC2E372B63759844F80 -115: F741714FF5DDB11A17034F8351E2BACAB52C2F3FC68128962F2CFC083CA3EA68 -116: 797337FD446D5C066BBA3126887951EB6EA4503B2149B1D065624F09219FF50E -117: 44C5D5F0A50969A594466EEC4EA91680F527C91D45F1586C1116BDC0AE496B2A -118: 19DBB1F43FAE20B205C5A5D38001E53AF92D596B9DEED4C45286E7C558A4F8A1 -119: C42F2D53209C66747E67EC100C88A38BD759CEFFC3836DF8D5DDA8F068D91E87 -120: 16ED8AD21D9FD8F7141A03FD39FE7E181BB5CB89A54CD837B85BD53C8E4983BB -121: 490128E66B633B891237A7392051CA915AFE2BC744F38F8DB9D856F3648B899C -122: 08447A53770BBC92E461347AB7037408B12A0DBFD4C8A6F13D5F338E7B63E7BB -123: 02635AC9E68EAE2EA41221DC1ED7247C9835AB7AFE5CE11CF6A7B8EA80254FF7 -124: 29A38A9DD9654E125D29CA102EA76C3598844E21D1B81652376AD303114DCBC9 -125: 2BE7ABA493BC1BFCDC4E5EE4EDB723FEF1893A220093055BD767F1CBA64AE2CE -126: 1BF339260B2BD4E882CAA9E2021B2376DB1614B58A0CAAAF3F768D1600DD9F93 -127: C52F0BD08793B9E8601B29753539E1BF47F8E483EED0A901E8761982449C9B4C -128: ED4C9ADC183FB8CB025B1500EC3EEAE1B45517314441A187605DE1BB8A64726E -129: E075544A1759C383A96A47F831194F0CF55C96A46B0656547D2F8C6EB96BE8D3 -130: CB1D730B4688FABCA417DF2A628AFA988D102A272D63A2CF4643201F55E8EBD4 -131: 54151FFF7E44E6FD0FB584B5172D04E527D8BEACA7EAF77E87DFAD11CCC7080E -132: 32A6B70D23696FA331926ED604A426EC97D1C965BFEB10DD40AF03ECA6012C4C -133: 3F3D3C929859088646811BA513126CF37AEA039443546420AC6295139AB2439D -134: 861E165162F806CD361C4421A48F205820DDF4DEB02DB9F041F48E179DDADA97 -135: CBDFD9DEE5FAAD3818D6B06F95A219FD290B0E1706F6A82E5A595B9CE9FACA62 -136: 7CE759F1AB7F9CE437719970C26B0A66FF11FE3E38E17DF89CF5D29C7D7F807E -137: AC73D4FAE68B8453F764007C1A20CE95994187861F0C3227A3A8E99A73A3B1DB -138: 9DFF24F078DFC5F2858894EE1F79728C3E4BE850A0FCCC5929BBA850CA98EFA1 -139: 5A6A8229F2ECB58E9F7BA0779FA6F961C4D339AEA61C267D7C091A97BF411DC2 -140: D0F5F9ECAA5AA64876E1352A32DD5DAE0CDF0FA4715E46743AFF00EB63F961AD -141: BFB044FC0B42155F328A9F1AF2178789896BA22340D8C8F0DE2E855793CC53F7 -142: 2CA67E636ED1BD37BDF7FBB0C6F0BBF0B3224B06BE8F4D01BFB1BEB3E9C6A287 -143: F1C4711A2AA3EB612D59DDBC7C6E8EA7B0025A3ED13BD45EE926823E1D13624F -144: 36B6C310C763EFCDCD51591B27AC640EC854BF8DA8E413F4CC0F4A29E2A48DBC -145: 231243F69471E71259E4548FC86C73AD2ABABE26F06EF5F99962A445AE2F2BEE -146: CE1321E755632601236D4D59478DC6C4471DF9171E6DFE9FC7C3D34B568D3DE2 -147: 121EED64ED66CCD4D644F3AAC470B990B1B3811DDDDBDA1A4D5E021F19FF9C88 -148: D87B411D4DA7096B99BD093EBE0E3E07498870B87FD9D06BB59864434D4246F3 -149: D0E215AF9D87EFAD73F3F15B6F307DE736A1E806D8DD9D0F4C65E3DDCB48E1EE -150: 51D16B7A39CD78B7C7CA02C8430383F0D1E481862E8D84FA3C4319186B04D4D7 -151: 8F988B9B0329CB9ADECE17C25A0D13600F93F2E63CB2C3D99D09CD43A2886C5C -152: 7C1DAE2B1C90053A3FA299364AECA5A9025D1007B8F12D076D0E426C7913350A -153: 94F70063281560557CC4A65B5231036AD53989B6E26E7B0B6299A4DF93E502A0 -154: BABC86A2F43FE022A9FD2C9B4584FA8B89E32C42615FBF99BD9408E6E33E80BC -155: 7651AAFC381198D596ACB1D849C8A7C8761E6285FEB6DE9757D4F0692D272E5A -156: 5219667FD1563D300A2017077E77DCD58E382CC98CE397319D788AB9D3C881D8 -157: A07887230DE1A6E0E93B678172D0093F47F27FF5A4F174190EC16419A92D22E9 -158: 536513B39FBD79DD90725AC110A9A8D49139B4182CFBD681372FFE838EB192DE -159: 1872C4BD9BCECD2B6F19B4799C12D94C0755C67E4817C7995493E82CECB99D62 -160: B09D02588B984210A0C37DBC240112B14B62C472AECA91F747323F2F71104C8C -161: C62724DEA26B598D92A8A0E2C754C671155C175C87160D945F0C0A459AA1E71A -162: F22E28FBA74A19127877A67491CF53513F44A1A931223C551F8003672B0A20D6 -163: 2ED9A296C2C45D228CE8E7A8152632BEBDDBB5BDCDBF6799F499CB23CCEAEA5B -164: EF234A23432B1CEDEB36C927680F464A3008C2725606C03EF2DE357DF00E1DCA -165: 91F82D5AF9433E0E96AA4CDB4D192AEBD1353E26C84053BADDAA08F7C8FFFC48 -166: D132EE64F337718B9D9DB3FFD9884C3111215009157EF72C988FD48D71922DB8 -167: 3E737074325A8723A76B72557A1CCA6DFA2C74903107E9966CA46F45A04ED487 -168: C08F44C9850E264C9B07DC9BC3177C35AE543E54DB61EB43E8E6954473FBAAE4 -169: F81B3CC7D97876ADDC71C0366A17ACF0942233CA53C7005BF5496CA8F488C866 -170: 164E98F10E3F7501D2E92B32A63E1B35570AF9C26B6C9A734FAC1FF743675058 -171: 85D55EDB080B4BC2425ECD5B551A1E5E63B030466035A6CDA5D895F72D81176A -172: 58540D9B2DACD49E50B8183095A43A4D896CD560F3106AC26985DC3159128CEC -173: 98681628B533AACB07466B78C06BDA21BA7DD0637D3596CD8ED2989F5949F138 -174: 3516E9953CFD2E0872C0554CACE7A8290A8874549348522A245672FEF785979B -175: E7868B9A42791408EAE4D38D49232C4296DFA9FB0F0BA2CC2434BC95D633766B -176: DA28208D2F829C3D946E4FF05F56ECE1D653782A571910D497D400BD6421DD12 -177: DD23883874C61A26B28A78D4979E8498C46D5B948191DE6C9D6D36918DFFCF67 -178: F5084BB3C7A4F582CD42C5541C83466FCBD29A6BD1B4C8DA78CD37109930D0A3 -179: FB636729F866F30ECC5546B6733401F3BE2470AB3CB809F1998C91AF42B99EE6 -180: CDF75B54ACE9269AA63B8B375071CBBBFA7DE59585F15484720EDE62074478EE -181: 5A3F247D759E2FB829D0065751020437F45CBE012F0B1539C5798E39746E58CB -182: 0728DFDD1AD6B01F7974C401FFF8B5EE4CB4778BA43301F7F382C3F13E589DD0 -183: 40F4C2FFD89A19D508AC9B4432B2D58291B99412306A42553FFAE8604C5A677D -184: 07DF19467602E1FF1F73BF654210495FEB2AF99F5BAFE3F9167577D378D66D01 -185: 552C0B65597D078B8689DC93D40FA355077DA276DDB163785D48142A9B6AB446 -186: 31EB6D2E89AF63D34EA2939FF7209B13BFA4DB7B60895B3DA228425BA62C52F1 -187: 23E5492DD12FA3C13A05405D59D03A2CDC32197E4161ADAC19AF712A11BE0EC8 -188: A8A4BC7A1C9396A016CFCA13CC34E98974880F0C96E42A2136B38ECF52B921B7 -189: 00A9F7F8E473E6BC04B7BF167D21359703772D08DC46361A4BA1190B5EA63237 -190: 7AE0C01A1B4BBA4B6173C489D46AF7D400F1B70FB934AA1ED629CCA3BB986446 -191: A3AAF26466B3873E3E23C29128174E64AB0CFA40C9700A8AC93A64E551332C85 -192: D1B5A7D4CF9673F8803C0E95874667F25C13C05A6F0ADC1F2CC4931228A32CD0 -193: 86048E7F01D737FA7F5DD4C93BE479A823F85718C95A1013F199719473A78B9A -194: 082273F15AEB8BA78724F3599A17B47C896CE1F3F04E5507195B19D40560DCF1 -195: A4171027E815BF01D698CE82CD6A645A2A5CABC2A2AAEF8FEF1BB47F182F51B6 -196: C9BAA8B764876DEC5E02051309F2AA19E4BFCB5E6FDE45E6CE9470801B357078 -197: 701FF147893F09D1FBDF1CB52DBAA9DB0107519DC4165413809C34446A95472B -198: DFA7C06B91BD7DEB9C098C07761DB953D8474252A67B364F2CF677DC5A92D1F4 -199: 56250BEE01A9201A7934CCB27DBBCB75E84298884EA6A03405A88D4F20785097 -200: BFB0AA97863E797943CF7C33BB7E880BB4543F3D2703C0923C6901C2AF57B890 -201: 17A5D3C7560E896C5143D9BBE25ABD4427388D48C64ECE2B3C8E511096A4E6E2 -202: A71FF4B1FFE0820CD855E66F1E4E458D7A4D57557555561AB926D37ABF2E603D -203: 98F36F0831196D533BCD4F68B41C551CA2F4772636C77C35E8A22D0F4158459D -204: 17136F01C4BE72EF13C95B769F2EC03DD049C3E2922EA50A5AB1596C5A5EF092 -205: 75CEB054AB30A7DA63D2DADF5EE3DDF02B7FC5737BA2A2278F7A21C13C687DB1 -206: DE2350C0707E92EA48B03576365ACD0A59087D1FFDC951D218F36F581E3E7875 -207: 8DFFB648B0B0DB5ADB0E024BCC192DA1F35B3FB437B2232255AB47F7CD7F21D5 -208: 7FE365CC7D3BB294567B1CD557F0A4E20D82F35414D1AF899E8889187CB22DDF -209: A456227AE994BA6F2F286BAB37A5F09204D99CD647351196B89733D51ED1EDBE -210: 4259C36A2D9BB9D4461DBA170328654A385EF320EFFB381249EADA5BBFA3EB20 -211: B28BE24ECD05DD25A85911382ACD33C5AAF7FE09EEBFFF35CE25DB52550F1C59 -212: 18F4C509827A387130D106737CE86D99F2407940E5A01C7AD66457C8FC80B79D -213: 4E4F5340AAF92D30CF0EB8D840A23198784E7AA4385845D9BDA103C059BF1ABF -214: 239C46D6889CE821D1435EDDA8C27645E14FAC5B8ED8B556C1E08365F8C3B22C -215: E3F9CF09E81033D0CA064FEB6E67B12B326ECCA953CC384194650DE89C382234 -216: B074D5714E1C54EC6177F76E1B0CC741D364916CD7B917DDE407AEDA93870F46 -217: 7FB3F74AA4A9C4DB8D7B4BA6607B763C98675151D67868D20050D4B3D012958B -218: E470A46DEA204AC096CD437F1FF37FFCDEF4C0B6749C64EFCFBED3E840DEF314 -219: A6233595A50B5714A752A8313946299B46A31A1E58126D41ADBB6ACDAE53EFCA -220: 3D18FB9B485F283FF7B07A5DE379081A616F09630DFB86A14BF7EE5DC717D596 -221: 82549486F3CA789598D8334773C564F182CD4E3E6EEE0401A0103BC7269DDFF9 -222: 0FA38D90CD19F209B4F4013EA1DE35174660FF2C8ED512709CD569E70F135BDD -223: FE123D02310ABDA79804F7942AE19A53E6E3C55A57A1A4C7E0CBB35E114D952A -224: 302CFFAA3A2E06669386BBE93390ABE776BAC7EEBEDE5F4EDC675F7AD9522E50 -225: 8D15D0C835DB94330DF2D979C0BB6EFCC00E811EFB78774543DCA9E17B124048 -226: 240E5E47B1C56BF7B68C3F29AC24C97964EBCEECABEC9085D217CE64C02EFCAC -227: 50A45A34BD6526D89A82BA6B3EF3FFDA18AE12AD3A88D65F10D355244C9B1AFD -228: EB73AD9455304786CAD26D62B34BA016C6BDDD5CDA4B0FDD976571249E253AC7 -229: DF60C0CF4130E60FF357E74E452BDBFFD892C9D96988F2817E92FF37D554CEB9 -230: DE55C606D5FA4877186F36C64CFBB5DEF2D45A4AE7E16B804694679637814F89 -231: B990B5B121F291B0E96F6C6F836B5420A155448C4E78FBD71DBDD7587433DD96 -232: 0B7C9BECB801CCA2DC4A6DE0A93D6FF4BF46F6146ACA9843BB34663EF6FC6576 -233: E1FB5A189B61D225BE6D421C46BDB39B43FB90FCCC4C021DC87B3D9AAAE32465 -234: A48A08CBE44D0DD02780A0A144CE98C6118AB9BF9AC4551AD6BF72D4453A1D67 -235: 5FA3B7C3CF001681911277629004EC2C62D3A9817D9778897612BCB42A114EEA -236: F8D125286120BFCDE30EE8FC85F9EE72920C05CCF5E79A93C63CA4CC59B7D083 -237: 69EA407FE3BF415232725A5A49B2D2E4634A644D2FFB70E84C7765222C850786 -238: 28318F3FC5D2BAAF9CB5853472B9C324E939BE75B76EF58D4BDA49629CAC21C5 -239: 947621208DEF6AD2F6B617F3FEDD2AE89928BF1058566F9B00B598FF0EEF0DF9 -240: 979EA390037EC25C950180233372D4B6A8422562A52D74151519FD4D8341DFB3 -241: F9F3F8ACCEDD64F40ACB8EB905707A2919E124F51DED145F4E043911AEC92148 -242: A9F01B4A0E6727377F0B9456E2C32C10B6985039CB300D1FD4A23082B8304187 -243: 6ABC14E677002E330746669BF237EFEDA64F0E6F575422CF0F44932BE9A4582B -244: ACB1786BAF3050C4DE9C2B7919DC4B117355ED168BE8B81D89D77064A91FAF74 -245: EF994C49F08B27403EF6C679210327F42128072A41E7FA13FDE28DB0BB5F1DBF -246: 0F027D2E35295CB1152D3D09A07DF43A0C0DF2387E91224CFF16571CF5D11D4B -247: 530F07B344F90A55D186967EF5E545FFAEBBA43FC86CFC1B38D76BF9F66FAC5E -248: BCC7D012D02A2E7F27FA4BC6D816C9663C04489D56472A7C61FE0C3823F17E59 -249: FDE2BE4266735C2D0B0EFA5D7FA1A8825FFA5E51C976A0A341E552E91E3A5EE2 -250: F485747E0E986A5A54E639FD009A1E5BD2C78CB303FF1FE910E1543A5531CA22 -251: E99557C6E4A4FA6A4390B3C87B13B8F3455B43C94A4A05FFB65F00F9F7C43237 -252: 9BA96838D2CC77F65DEE20DC07EA32C691F391223FB2EC506A4A348DA2D7D47A -253: 8860BE6A7CED5BF345B0379BA2BB0C3329C2F61B8C72668384E79844F95B6059 -254: 50F5BDD3374D72BBE3466DE6BE19991698B8086A8743C018B1BF8AE43E02D6D1 -255: DF819D2E7B8489CDD9729E77BD40A2C02F9BA2CEA4EA9433385BF79350E849D3 -256: DC924469B334AED2A19FAC7252E9961AEA41F8D91996366029DBE0884229BF36 -257: 9FE893B2961AC7E11B22CB121728F3304DD405F8CDFE59E6D248E1262D0131A3 -258: 1C1878DD0700EFA33D90F11433B0E07B42A2525574F1F0A2AFCF537684A0E00D -259: 45464A8F5443FB208C39BE653CD0E09B8340956D75B1505986752DAF3E055DE6 -260: 72A8E55E23CDD778D48289907C5C5A15326AEEE5699F8A2007B339281D026352 -261: 2959E6689DDC7F1A320BAD133B176356E1A364E1A1A1592B39E0471241F17C83 -262: 9D6609D127E0A664737CF53074D43E5E85116ADF637C0BFEA0A2A6D837D51C62 -263: 477B87080D4C0A5797EEEAEB14409D283F9D98D37172771288BF64DF537A1CFA -264: FA8FA1279CD43704D1437FF59C3C812CAD7F30CAACE649630802588C8121B889 -265: B3CFD6B1003A84FD7F88A159835C5AD49F4C1A2230C45657355363BBD109E236 -266: 5835897A51F605ACFF1D2C8D927E374AFE2E4BFD717CF0A1B31133CBDCEEC263 -267: F577C59AA820B42DD9FA6ECE9B9DFC35C56967881161D4A54A0AA94B98907D48 -268: FFCD70AED6D95FB7D1DEF503B29B98CB3C0A2719B4634AB6AFADDADB8F74F6A3 -269: 2F188F83E4BFAC007C86395CF35A69190D0D5A531EF9132D1012A231FC42B21B -270: AB6CF59E344EC536F58F12D17ACD9EF2CF2001E6AF1FB00754FCC13FE62F3B22 -271: 7C974895B2A88303FF2DC6B58F438CEB0B298CAC91099AC0539CC0F477506191 -272: FDF2EC49E749960D3C8521A0219AF8D03E30E2B3BF19BD16150EE0EAF133D66E - -Hash: keccak384 - 0: 2C23146A63A29ACF99E73B88F8C24EAA7DC60AA771780CCC006AFBFA8FE2479B2DD2B21362337441AC12B515911957FF - 1: 9265ED0D889A1327114CFFA6FA682DCE051855E24F9393A3FAA7E4791124C9DB1ABEF28F95F677134EDEFC63B02066D9 - 2: 695CB02A77A6B3C1350EF2466C429071E164F124832A606EA44C2600CD8FA1CDA8D05254CAD896769E36F01E52EDA29D - 3: E899080BE7EE51CC543627DFBF771852107A14F0B8106BA238CA8EF8FA68211B4D635877A30D691818D465264F6C2019 - 4: 2E86B895B3497665F88A9A80D71293BFAB5E7A4332988939AA85ED858CAECA19743C877D2D3DDAEDACC6BF66B00A7681 - 5: CA3E90F927D68D55A1D2848819189F3510CE92AFB2DCDD57F28332228CA32466494BA1219B51AA7EC215287DBBEEC651 - 6: 7312DAACB4620AAACA86067F3FC29BBAEF11B5A822012A497AC5A56385AA285DD4CBEC516AE8E4A3D1D13BFC940199BE - 7: A58C19D44391CEAD3DCF650AE106D4DE76F6A99332F2054429D7D58728BE51E1BF25F9E7283476937BB73B56921D3491 - 8: 67123CABF06130A45C4655038885ECF74123919D3F3F0D6620B064388BB7CDCFD5AA5250E24C83FD9BA7D40CD2348CB1 - 9: FFC7F2CDB1FBE79C4288B52463903D42809883E16AA13710EAABD21F8D1A522F1AC7C1D3A7BE671A4AD0469FB392F658 - 10: BCE4594AC2FDA36CED07D5E18E955F67137C4D21DCDB6E81DDD8564A8CB1C2FE649B580DE70E79411653F764276A22D4 - 11: 0452D5FEE9B2EED625BB71545ABD88A8B776D38BEBFC819BB8307BF58B397A5E8DBC543D8F377FE10AE00C00AE65DF7F - 12: 7184E3E36A649EAED2FD125099F71C5BFBF35322F44762BB7B54874BE67720B3AB65DFBCFF3D002EB6D85AAEFAE612D8 - 13: 7202ADAEA7285E18732C6A59F64D4A3AA9BBACA3BB248CC47A8F72C016E9BC2A4164AC0E90C118012644DF35C91292B7 - 14: C3D86CFDA4C9DE183FADE87321D64C7BA85E4BB043D57DBFE4A728AEE99BF88218D9E68CB38BCDA1DA426683161AB44E - 15: 41D6CF4058A3D55A25537C2889212A61241954EA5EA94351E59FA55BE046EDBFC4322E8D22763E742DBEC7B2DFF95184 - 16: 35C6C81FFEBB661375D702021554782DC5000EC7BBCE51E8F1FCBCF019146A5731F7CF1A676212690AB681466036B579 - 17: 341F0F19EF2D244BE834703BE7FD976EC5D5C1B5E640A925F2899105879205F1DAAF6BE47F273F3C95A2C6B1F7B3D4D2 - 18: A70F7E6744973F928AF08F00EB980D2F0742A7F10066D2B9F35226E9B0F14C6ACD4D8028C22DBF97DAE90996387DE55C - 19: 2E62F5881A011ED4D759A5690B1E5D614B4C809316A73FE34A6343CE6496ACEF8584462DA8A8C79B010B7CF647F9C61E - 20: 719CC1E5C6274D560F1F36F345DF0729442F208CEF57556F0C57D3D61C1FB8397E74BEEABFEC5D814FDD76683512207E - 21: F7E1998F599462375352ED1F6F122F32B1DFC7AB9B098661882FD75C758C0C962A04E0B064449B8A733C6223C9FAA795 - 22: CAD03547CCF83FAA49CD949FCDB4B650EB3085BB67502AD9F289D6DD3FC9DE4099C981A0459BA3FD6D4E9A57E2B5A330 - 23: C334EF9558F0ED96A8584448C1799A3571447B0AE4B25C90861C2C13F3F8EB4278F5E21DF662785B5D385259777B4108 - 24: 8CD6667844419A6E4F031CB4CF0B5DD29B6BDB145A96D9F0068C73259B15C305C355CC0B48AE85B7C0BA55FBA33FF2B6 - 25: 84560C43BA769F1B6741400AA4A847611F4478D1296A2938A12D83ED0347E2C7FABD61F30E8A0EF3105D2E3751CC0A6E - 26: B262E2350C3D471CB537572FF72461DF18427277A19A7560368B1D46300B769789A5421106A76A06A38F93F29A4D9ABD - 27: AA58FA572C16411DD7450B6A90F10C075C9E7E6911B809F5A8BF72C118078017DBE77E2D7CECB29D809BD1350ABE43C5 - 28: 52C0E9EDD215B8A81E9B79557FE76EA2F0230D30E88E46EEBBD86E01F3F759C44E9AC178A571B4BF3EBE73C626595FB0 - 29: 09BE4E38554DB484FEDDD0C50D228251B4398102D994279738C62BBEAF4DF0C5C62F55E469230C2F24BDBF852DF84CEA - 30: 2938D7A028505F4E0B6D694DE6C823971B2206035A9478E7BCFA0067908375ADF4BFAC03EE57FB49BDA0A074301C828A - 31: 84966512053EB2B0A2424E5547F9F79DD56379EA09C57FE2BFB93D7F69911F76B64F76912804F7D9937DD96E2BFA7644 - 32: F4218770640F2CAA843378B28473CB24569F97F6CB9940F0601F459A5CBB8EF908D2C94B856A1E6B8C75A464971E2D4C - 33: 95CE76EA95ACC5804BED824F72C46816B62FD9CD489555868EB68B79B64D39D87083F2AA6086DFE5ED936BAA0980F806 - 34: 16B308CF515522220CC115E353D85A960099FC7EB32D5B9B4F68D5B9884BA76E3F37E99A81352A29F681BEF961E29CA8 - 35: E543A1B3AC3D4CE0B41871299EC3703D903F0BC0695977827F82DFF3B53EC5A5BF415B8B190EFE6CC930D21DC52CDD75 - 36: CAB8FA18ABD439B747D6232088382192569FEF5A8E5080556C71EA4E14353845452EAF517C2C96327F7F3B499F1AB413 - 37: 99F63325E1F4B299A2B7B2DD26260C4969F060AB1AF592E8E6685F79505092DFC32D3A960A14C17398B6D491764A030E - 38: 7AC006CBE0F40D3C10ABC063B67D5CDEB513D8F7F3F5083C48A1F3DE134508B49CAF19DB075B077786AB3B1D5CE5DFCC - 39: 10ED8E64AB51C53EAA4A262E1F8C0DCA5EA1C66C8876E10BD35929D9C5B1D5F56115BE680DA5BF185A3E82872DB3CC00 - 40: B11FD20B97132C384F13305DA3940055297A0248B7B55010C93B62767C83120C550A0DFE9A81E90024BC7E95A35AF045 - 41: 4A7526938807394F09418D5662AA325449797C71047DAC8B87483D61ED7460A9898FF0061DA2714A82D3BD4745D6150C - 42: 9943D4BD3D72B14EFF58589201E6899F4D9B4A5E9368E8F21DC2CDA56E6755257921D38EA184DC92840131662AF61182 - 43: 24809D0A379343B84E241EFC05B43FFD270B2B630CDB00E0E1AC559A4F9A0D200E3AB1334E5AECB5E669BE2BAB4F3C50 - 44: 108AD5DA306A220CCE9D062F755ED760603292807D043E2E722BD79C115F67D6FAB3DA46139D775485EFA77C4DFA1CA4 - 45: ADC20C7EC94C2822EB39A9C04973FF8FC40AAB8C91339F0327E2B57242B0EB42402084E4D0C73C2154D2E6735E79C31E - 46: FC8520E602742C6C2360613D05386D8EF83969801D59186A22166F2329585FAFFD700874626AD7EA74834A247734F241 - 47: F5EEC7F83066BBB8BF8B14D920FC74E48B2BE2C5F8206A330471F2672A003D64566B7A4AF486596F7C886CFE67BD61D0 - 48: 8C44C040E46A2ED1C4BFE2CE9D425CC914825212965526AD264715246821869343416E2B9E590817E6927C505AEAA88E - 49: A69106004554F05D4423582F8A5197CA79BD37C516BFA019CFFA40BC8559D94FA80AF980A2864F41E30A7128CD0BB71D - 50: BC8F1DB925A49FD599B107A4D955ACD0498DA7A2720A83135E20576B8813946B9552A87F76F96C5CA5A610D0F72CBAE2 - 51: 2C67F473D55F0C59359616610B00EBC79D2CA8F7B6114E5422284E703DA46E6CC6D4F1199A399307DA33EEDAF3983DE9 - 52: 8F9B54C9629BAAA1F83C9993DBEF83E6101FE454141C1ADCBBA11985685BDEE344DD646949A4776040962E1E93B06040 - 53: C9C181DE1B5FCA70B2656F756FC81E2C1FC37A0F8F7063C393CB397D85F8B06DE5AC7639158FAD37BCA6DCDBF50909F4 - 54: 679648DA38DDE975D3DE526C47B7F2F5DC0CE833F09EF8DCA2A074F89F76A2AAF009B1E3003C7DBAF676EC64F0A48494 - 55: 120A0E60A66687F611DCB3E30967AC2FED1473B343EED11B38923F2A95F9F8935C1326F7C4F1E723BD541CFEC448F218 - 56: 338D69077B958B30B8B7F9D06AC31DFBDA57863CD5796716AC02886616841B5389C2F08EB3F0DC5F1AD7FF6EF7594632 - 57: CA40FE85DE04AD501A44AF6B99C8E9776F3039CACDC7728080AEA20D4FDF6C02EFD9FC2D33360DDDCE84AE0E867167B9 - 58: C419C7E5E3E016F1FCCF026CFAC149F0D24D1988CEBD72D76E96FECC769E6CCCA55F2916B5324BF6996DBDA3C9466F32 - 59: E9206D1565CD0164B45A0D4A4AB8DEBBCDA2CCA151A98782DF635877833B3D01863AC30033B03C13909F565FB3B9E052 - 60: 59C004B437356C284618C071648EDA3F47ABAE65E38128CCC16EC61CA2FC4C6647D0BDE8BBB54B828B76BD913B0321C1 - 61: 6B8EAAD8D01ECDCCA7518500949146837624B425D3311A281D3800549CE55ABE26739DC840972D43937C93D322A7D6BE - 62: 68F71F4BD1CBE3BCE88ED292B64F4C2B3DFDEA1DE32455E67B351D35A802819091031709E235199153BA779F7CDBC565 - 63: A8F51BC5812F24990900E04FE4D4E140D99F24E9C164810F543FD4E6F694BF65192B3E69E428AE67754D10A35757EF84 - 64: 42D55A075A45C2C61E51F16E1DDBD1AF4B14C4702AA6907E60AEE9FEAC4F4B279FCEDFE40265E04DE26D0D2AC6C8434D - 65: A8E5E506CBCADA7AEA4548BCE495DE4121081FA53D36803E97FAB0BB01068552328172F9C5F6C4FFBC62A001FF114D73 - 66: 84A79F45ECE5570933248A81ECFDBC7C4B58DD4D36F38B59D41ECDCCAA6C3A7727310D4D589E0D39CC9A33F7375795D7 - 67: 6E84E1A79756C8BCD0090CF0344BC27E5C2C9B4C037B2FE6B198DA5E691A00979B545CE0ADB030C30EE10B92E6C460EF - 68: C7A8A02A039B4E50E0F28BC6DE5CBB515F277357F7B5A50D8C48EA6A6E6484600B54BFA92DA9779DB7E71B40F00158DC - 69: C7DFCDEC28CD6610E105B98F05BCE1958E1A0BFFEDEDFA4E429FC7CD5682D00617B76450B9711B1424494EBAD9CC987A - 70: 0647EF27105C9A782E43A44AC4173174D0F18B3E8C4EBFA6947190A96E0FD9C736F4128ADD17619FDEFB0E48357B507B - 71: 7D8A7F7C4F2D775369B127D47DA266AAAE3B08243B974CB47D7A8381F4C2D4B8B293C9A35F4A66977C64AE95ADD54926 - 72: FA23E9516C973F7ABEBDCB5B7BA7DA09A2331B7A2ED13813376E267767F8DA36FDD13CF0FA317336FD0DF2EC364E77EE - 73: E37DBC48DC2BD3673CF75BA74F42560E20EF7DEE466B4FD53738F6893D1195B1815BE8644F49DEDB111E988772229628 - 74: 835776E37ADA850491AC68F8FA905A7A65EB30F45910670041D848BF74D5E7C7809B5FF70BAB43C58CE5E42F1D9012FD - 75: 38D14E456357399D9490CE674852853A3D3DA649768792773964CA49F23CBAD6D7B9EAA4C4D235410CE48A63833A45AA - 76: C24352569DF20FAA59A5C8CF60C67C4AB8E120312C32DEBD2FC5CE69CD555CC0023CB9B02B48D927C88B573FC1587FDE - 77: 5A0283110833ADE9D0AC7BED218320099CE264822F7507BB85B4D7DD062E44135A743493FCBBB8781393868B2D9B9F16 - 78: 7BE2E77F9E692E29367B16A65FF27D5E3DE516D13F6DDB259A45F2B5E8C023870B3E921A1BD058470B1939BF54E5141A - 79: 916412787A238574C697C29AC8148ECFD6C0D16907E00D63476546601B724EB0FEC5A6A0596300C4B3C5D8F2CDDB5368 - 80: 8E5C86E5A11723D73E8C752245E11C0C0A83F2713B3E4DA383BC2A7006501A2F8F9D3AC35D89D0A26C4716BBA5FED99E - 81: B8B652969CEE989A150DC2CFBE8DB47840A43069E203184DAF8021D7C4F517397C724AB948083E99AF66104F2EC03E07 - 82: DEB43E47CB46B770ABA0F098D7C2DA78A96F6E7C78FAC7DB0E42E715C710A8FC2842EE82D72FB0304B3DD9148DE63B08 - 83: F86C560ED561120C210866AB8BFAE8443F55CF9DFDBEBF994109B1BC23C09D369C758356969CA1574E4BF7657CACB1A0 - 84: 1ACA7D29D6FA09B99C3EAD756A3C395AE8D7F5E0079EB395ED90F3C0C413ECC069FF5521E50D7CA6D8ADE6AC779362DB - 85: 2C0E3675E1CDC7966041085E7BAAE6B517AAB767084EBD71D2F81541C5F17823D35C334E7C507E838E61D318FB24EC58 - 86: 3240CF7F822E82A919A245BE2676B3D6935D39900553557A4E869C728EC27964A1EDB0F7F69DD7A8C86EBE09272FD255 - 87: 1858C3AED8FBC9D8E3ECC4DB8942665FD014680B986029DCA51DA086F207F0E3C01AE7D2403360A38FBADAC5A5D4516D - 88: 8C0656046C0AC1CBBE040EC3248750B8692209242C380C884DC124A5D8553C1478C0B8546C71A491613E0AECADDD3C7B - 89: D9BA38D485D435B840229EF8D365F98105007AE856414736F203588C5BCD896564497C0D4AA975036FACE0B1CA141C2F - 90: 2AD4893F6C445C742E84C4AF0CAE1DDAAABC262F4B75807AAD3DB0A072E03D53202F32856322D921926B1638B90B0174 - 91: 6FDB438A281FD4591A4F0C3FE6F0D01ED1277224C507063959B9C257826791063A6A3BF0DED28CD75F922A4B1A0B1C5F - 92: 8FDABC20E987A569D286A43EAB0F1A98B824BF06D708188B5C6457319B855B10B732648B29CA16616D0B100A26609DE1 - 93: D043EDC853EEC424D8952E66FD2B580F29A39437D655A58356B41548EE1222DD6B3075BF46C5BDC8D3CFE5E35174F59D - 94: B49E72EBC6BCBA7F6707131317E4CD38416B2726C326E47BD7404AE5FCEF2D63A98A85CC006CD99324FE32F0D3CE218F - 95: 6F382CCFEF0C51D07C959926B57504BF317D6495CC1690A2AF7E373F5B66F7472526D3D6DADC7C1DDB4BC1FA9866DE9B - 96: 76C93B7E35A908BE9943AA40663AA19062AB4DF687ED8A9E0F471A4AC2A61020912ED2C11C57DB7F91D672143B2E5DDB - 97: 9E1F795A1A64E0E19CAB76E8D7FD8685ED2631F7E15A170AB85DBA4153074BF1745EF7B6C3EA10B0E9E69A89653B0C34 - 98: 7AF4094BB6F96287C26FAF5A83B53306204FA32D11126DC16784F73008B909B661ED819FC6F050A04EBCB3B5D048C33D - 99: 03E25298D93068DDEAFF7A9D459F42B929DA6980F42C34C73FEA7E987A7240FE31B2531021E1884FA33A26E017156288 -100: 8C10AABAE6FFB3A78CD20CC963073B0A6471EB1A2B94CA835D8B09C670BE8C34477CF152D1FEE3EA5818A9DABAFC391C -101: 5833D4764E9C180FB2EB3B03E021735E9CF42EF38DD34F53C1DDE9B5F4A17ADAB40D6F832247B759D3A019C940D63F57 -102: 83146C1970EBDDC83E30445FAE907D6405EE382FF7B4589A5A50B5E03DC0D7232FA2F797BE87DB2D46F1D1F903A105E9 -103: 594B7F9A689485DBA9802ED9F13E986B0B9BB83B448D402A37A628FEDBEEE0783B1D03C8A9A211FE9D8269A6A45AD0A1 -104: 7F6DE44434FC3011507C34186E81E80174F82052F4C63E67B85FC82835EC7659A767052484569835C98BCDC82C785E3F -105: 1480A097D5C3CC04B85BFBA18666C3FD5F246744F8798F247F3C107187D8899A2711EDD8AA5CFCAF77B9F33450C8D785 -106: B18BA98624999DCF7A2DE07F23B9A3DEF889D6C94CE5121004AF2447A2C10951FF76E4AA48BF0C8C9A40AB11F7297511 -107: C1CAF10943182F100CB59D5271F960C73C8650517E313B1E4093646412DE3E1FCFB9E3CA5A39FB9589897A23084F9269 -108: 3144D2C970EEAF290D786A79CF5622CAB59FB3A1FFA387F5E8871941123133E590FCB9248870217F355E7AB63480F25C -109: 01E3A53E00259A597BC4F2BBA35D450712D00D402FA2D21C498553D4831CB2BB1BF3D558DEADF62B282DA47E85A53BEA -110: AC5553E65F6FBDA34B6CD4051EBC67AB13AADE148C552B470E7B6A02AFF012C0739B1659BBC3037D162F88B2D93F8231 -111: E80383F784F6605AB55EFB92576077E878BF76AC4B02EB211B691BABB03C022D4B935A0F1AF86D5CB44D2935586E51FB -112: 9C5315CA5862CEAF28953864A9C0C36A2B278CD5F5C54C86368D8539B54687AD3A258BD246C3F07A07C248D0A0F88378 -113: E442AE742747FB2DCDD0873E89E2230C87EC8C1061E470742C147DC8E196380EEAD638CBB75B2E6F7EA7232E8DBB1189 -114: F2C64C83BC02356E703454EC8FD0978E130FCCC9A4BB4E0875DF52F86A1A06C83D8DC10D81259AE273AC5C88BF73AF63 -115: D23BE6BBD386AC65D7011C7DEACB68756F82F0A2AD634C84A9F99510C2BC2E31A96F9CB14A3A2FAF105F6969096D9BD8 -116: D7AB4834C71085F783F0881711DA225A9B4F927E01EFD62170F13A8D77A2E95E5644339DF828A538FF3930EBEA3B6BDC -117: 9203EA583E2795A8B5C716FF0937BF7BFD6F9FE4AA59E89008E864F227A5148CB9A3573B448A86638BD81F4266CCD7E8 -118: 0EC37E66FFE4DB5B9810869FA4611E3EB0AE57C712F35AE52FE15FB8781AAC98BFDB4D404B368CFC31EE047302FCDD00 -119: 9F9F54CB0861DFFA7DDFF24E9FA4CA413FC3BD8D4AAB64213E2698D68C9C8A0BA1D14F0D0277BDBEC5E2C30A3A6A645C -120: 68BAF1A90A60907489180C38DF9A1DBA3F811676357C482DC7F431CE7407768D421F581BD822FB31BB9EC19B9AB4F889 -121: 14DFD3834CFFD9581B9DEBBB587B81D6B3A962BD633FB8BA42C268BF21C747E785CC6BD952853497809CF24E9476B7B2 -122: 36C3770F44EB046EE5E6A6B4848D4FF97B8843548AADA56B3E76A15E2549F2AE7D4A1975681BB448FF08A9865490D8FB -123: D212E955F562A0DC63E3228939DCFCA00E7F49567A77433EDB9D3DD2957DD76CC36EFC3538510FD6B920C9E6C39ADA4C -124: 0B15FC0FAE61E6083B1F2DEC9C01891F9F7FA966F55EBFCC068EB613072D591A1E8E7EB9C8A46030A9D3C4C1B6AAAA30 -125: 64AFD2DCED7350D68323D3C4290EDCF1AFD524CBD7512944DB8D6F9A4DA869CC5536D9896C4DD553BA1B7B0092F5C307 -126: 8F3E1F3C9E0D2C471631FED77D220021C0763F8F24348E42FD27ED6EC99088340B3049F3F672CE6B3467BB2DB975877B -127: 8B4D3708D27FF292DA62C5CA247782D673DD80C6E94997DF29298D15861263020F8861C15EA4636CC2D380E4C160D43F -128: F75FFCFA4E1A0C7ECDDB69F5F21D39B2C4C4A6A543EB1C69C5E36B841513BE016E5227F9333616111EED64EEA75AE71B -129: B3B4A2B1EBD4787E69057838BF55C8B446BE13803106EEE833345C11196708DDAA8EBB12B018940915758E8DC7013941 -130: A568C0BF47AEE68E54C9AA6B83825179F0E58F3918AE219DB8116C1DE60964A6ADB02EFDD917353C62F147EB68C28B17 -131: 3B851FA096B1874FAE4B33D40D1622C7654D3A6A45BB61035D3E5B2231AA9BFBABB98920F8E8E8A6856337CB524A7CFD -132: B5DDF413B9093938C7D6E93F9291ABA31BFA413FB6A70DA78A477F47BF6174B7039AC51FE1576C76B44977C3FF5E92C5 -133: B78B53ABA3FF4BC29CA6EA77656E1B6240285969A4193D84C057121AB65B5EF90763FF97B762345D416C0522B79CCC44 -134: 6C7CE22E21FF8A3C49222AE2B1FCE46B533A3B8F392A74B0576E9C165A4A88DCA5C400942AACAB37E29A0858B2771A05 -135: B42456285DED6F18322C819A87BE578CF1DDD78935C10438CDE7F1D1799B1D58DB5729F4134B4A39EFB3C662D60B461B -136: DE17CB7E7806706914969852CFF85F68F3C73806227B91868B2DE93D64B68ABDE25EDE7510F682CC3D48244C77B05B61 -137: EF22D89B8C03D894FAA531AC2BD3B30EF92457E80145E6D4C0CC30FABD7A3C74E6171345D0B375C2F0224399D5950831 -138: 87EE524F307FBEF55962500121A1F300729A9FC80E2FA9E506A4A75A668BD4C4A323579783E4C5245AA226EA8C1BD55F -139: 9112377D8EBC25A41BC2B5F87AE5BAABBE6A930E38613E6829EFE98092FC67EC460B53FACF03EE62227AD908633E1F08 -140: 7C920752F7E2B0DD91E7CB698CD5A2564D10BAE293287F1C301CD7DD560565108881A37E26A4FA845E0E77C772DB3722 -141: DB46531C10A04E105C5C71F6FD22F0E2ED49E620B25C203D80999887423A8F6FF52616E2E2BECD66F3B16217ACC90F7F -142: 69297FB7DA6BB595EF58348B5D3A560C1B5160D0E5BD2E6178FAD0080C6A2170F358CA2C4A293B075DABD60C138B8350 -143: 67CB50418B3E17D0B5CC6F269E9DBA3BE8EE92F6CCCFAC1424BD2C0A494E75609E85CEFED4B4E56D095A3A9EC7150AAC -144: BC8577B534AF1A7C9C505098E34C9C96B09E1F1E0402E94E83224E0D7BACACA171192DBE8B09EC944051CA9272EDA352 -145: A521C6822963F6F714A68EF449D28C5EBE3476D6F7D96DA305E5C699413BA9A94AFB0C482FA9B856336EF6B7AEC39B5E -146: 9933660C5DE62D9A20A6D16E71EEE600DADCE7AC4EB762A5E89DF6B166F6319045C7292ACA09C1389CB6996BDF115685 -147: ED2E9223A0F34D64EFBD9BB815B8455382C77E167CA910DA5FBA66297866E21295F4529EE0A8A86E810D8D46343F931D -148: 5E284AA5E5E040A4D9094DC1B3726D4947B1078522876A631F8DFA2652F8D2200C38DFA3CCA2EDECA4E9FA9B1590FCCF -149: 045908EB1A2DC65CDA50A243220335A8C3595FD4B742F4C6468354DE8E8D24BAD40809DF3F21A2BD1599A9505ACD679A -150: 1A4A6BC89A75F3616EF37BA4ABC43966D5C36F3F62C3D29879BBE2B17CEA2DBDC8FFECCD7EC2B3B83AF3377F822FFD5A -151: B57AF68128E4BE17A4D28D9C11B30E641E0027C07EDE20BF65066F658E63C53E717E42C4EDCE7D6714814B9071C231BD -152: BF6A7B4CAB772128500942697A30760D50B0DCFDA97023AFDC4145DF0F765F4F06432C3EC50269A3395EF2703649841C -153: FAA535C758FA4DF1BCFE97B3B2DA552392FC42296D9D7F9DD9C285FD14E6D6D1A9161E2439F99A250E1F5DE35D965343 -154: 1A84E6CC0F9E94758ADA95B2D7AA2D90FFF72444565AE71D5504FD46B444F2F3FE028FB473102F14A2ADD5FEBFA10BEA -155: BBD512FD2E8BFCC5223169FC7A294E675BD0AB11BF830ECE96BF3FB6684B81C5F85E0FCA4531B21E0D0EF2341F608834 -156: F80C8D26EC51594B22CBEE8F64903BF18D8B7672EC23DEE1CDBE8F03C863AC70A7DAC3361B8336F615D6D4756FF10B66 -157: E09081E26EC15FD04DCEAE2E7AF8D7F5C380636E5E24F40E5F31A54827E809549940598B0945BCC46AEB4ADA1536B682 -158: 063E77AF1AF7461CEDE7E752B0C4CA03C256102E08B4AB06704E05ACC29EE27906C9BFDAC69A6F659ED337E0E56CD47F -159: 9E52D4FAB2231E99513CA22EA4EFF7F33BE1868B4EB6FF2A319D396D04697DE57BC03E2A71F7C0129B6D2B7906754935 -160: D9FF09CBED932E248BF0244D17AAE112DF57C8489A76441756BD97AD3D673B3491D6E3B37D9355646B44E348A2D571BD -161: E230500DC277CAA8AE05AABE43727B65D9F5909C5DEEBEE3F216FEF66FB2D66154A22E1A7136279325A782662D1F22B5 -162: 4B52F57C06E7E53884155B07807A6818B6F7B1C789C789EA99F376A619547E2DA865B4ACFCBA0617FDF103838037BF48 -163: D0BCB567AE4F1CE9B2950888A07D981622B5C4CA4E5794F1734708F1A82251BD09BB317672E819C951FBEC7A3F90D64B -164: BA4E90B9133F1EDECD8050BFB66C93192503B4262098644766FE695F9D22E6F77BE0B1656B65D11544C23914A1A4C263 -165: 2A2875FC508EA7AD9D5635F3108BC98B3D89235DA6D9E861F81AD389739EA2AB095003FD36B1B7165E5ECE55917DD43E -166: 445D1539C27F417790E80B11CECA886C6DB8AD20C56E7518BDFF11AA7215836CBCFA2E3064586520AF93941BB4CDC823 -167: 37E71E43968B170656CB3C0D1B39E74FE4CCA5299E7FB3BD6856579015DF7E0B4E40B61E2D9BA965018D38216BDE90B1 -168: DB133A9F0B585837C1FA277C5AAA15F74A45C290F4DCB49936707F15E8A50FB4D76F08086121977E19A1ED6578C0B75F -169: 97B1F5D92D659F50BF42CE60018DFC0129DEFB4798B3A72AC891B89A04D70609D3F3CB03E91F768A63183E036DD5BB67 -170: EA285F62DA2D4966420008F556C9F787079068BCF3F569EF11B5217C2F9960655D9D8989D90799200588E73F4182167B -171: 2B7F0E699E671513447BF36F4D5CFD1DFF619DCD47795AFDCABE275A9442B44FB9197075B7460C1A6B6322683600A456 -172: 00130FD2EF9979B8E3DC38155A992B40E55BC45F6D7132E3EBFA46600A4A1F500CA328B902BA647DBAF9C275D2C86123 -173: 5B795E9A3638D0010207E73B98DA769EEBCF3E3946A8C3273B7F4110A25FBDABFB3178857FFDFF6CD3D18B790D2FA546 -174: 79BFD2E1E1D5C6B894EFD0B5AF5818A21BBF9396DA23E5D7C768A948BE8215F9D3215FA128926ACBBC06D18EF407ED1D -175: F24563409E3FC70DCA76FA5662E0D08580E8A98216E86AF7EFC18B677F8289413C522CE32509DA07ED92F29864CD61C2 -176: E0112781FC1B1DDC7C4374527B7836E3EBBEDCC8CEA3BF1BC9D2DABE9F263D187C3C8F5D35747F4084E06C5B1898C6A7 -177: 65B1782CEF7AE0D5BF25A40ED88EE9696B9DEF4E636F30CF8C7B9FAD143F1A88579C296B3A3B98C5EA18E94454090F07 -178: A6BAA41D084DB54D5445325235D24C777A6F3FE2839A5AAF0E4D789FF79A307A7DE30CCAA1743BD6BA746F411598F9FD -179: E2B02D23228A8A657241A47600713EAB102DE76323097F73B1861ED74B92AF3B90C43ACCC4AA52076D028BC7004A9F40 -180: 6AD009038EC4C3DDAA42FF979B5BECDF29EF21C496F0BDD454A4A4B29598A32741A16B0589CD696603E9B2B4A15CD3F4 -181: 7C694DEB54BEF593C3791CDCD79ABD808070044BDCE76558D8F154F815FD4FF6575A45158C9111711800DA8D16CCCFF5 -182: 5CC75DE9838432E7F7213BEDB735348A429439BE16E386778CF1E491D4D1849DB3776EE4847717CA65EC72094CD41B42 -183: D863BB0CD1B4A85CA6F1E4FC34FCC1EE7A72C8207621777686DBA9606400DC9F860BEF11B36FBC1945DD71C83FFD75BC -184: 40B7B8750A2F7BEC4F916780F53E4D856F067B3A757CBE8647CE8798F451489101A7DFED9782B08F4A3A6D5AF8099D9F -185: 8CE94B63FCAF388B18B6C8931B77E52CC8A8764DFA125B83B6D3AD387F36ADE8305656290E1B91B7D26757109172BDEF -186: A44A26DDE09ADE3C9210E875653A5F3B7358954E2B7462BC01431D5B1AC74CDD738603DC04A363FB8DF0E80D062EE46C -187: 0AE2C42B8FA8261D7CBD3AB871D427631018AAF429844334CA23EC8E9CCBF2EDC9D76653218BF29E32423878CE7422BB -188: FF17529040D3C6A8A830102CF0150B80123E40766F069A044D0506AC436655B2822F0EEAE7A4ADB67396EEB54CC7918B -189: 4919EF6E4610CB781FF632B13026EFA7DA48E071E3EC671319FDE89D135329576D73832538B111D80E9AEB0F1259FC99 -190: D2D9D9C3BDF00F2095ADE1B5D3BA6F9F3B84CC3430E224E9D9F996E0D534F628E9215A4269E1195906FCDEE0B9B5D1E4 -191: 9DDAC3383E36322C3B3B969B23E26D2B0DF87689DD8506F61DBAE23A3B763A35AE8AAFE89881A059F6F0CB1363E06CD7 -192: D176A1EF4947ABE619C50F4B0FA11BFAD71DCA7EBDB7741873BA6F42797BE20FA22F92CE87D6286B830BBB45868B1E0B -193: 9537116340192BADDDE42F09F01C4BDD441F63F2A78F34F069CAB8203820B2BFBAEC5930EC2797323F24CF9A030C7331 -194: 0D8C53EAF179604DB5E75B729089636D0CD0FD2FC2844576953A9DC8B868C25CFB4DFC3E39ECDC71BF12388E3F55C53D -195: CF87DACD9F2E776AE2929A15F320A9F29DB67BAF48F0E6339734FDF1B2C9A584E803F55ED6722039749E341D898EFCC9 -196: B679E3E865BB98482ACEDCC7379F8728343B1B1999A04D6FF925F23374CDC2A3FF703A72E91CD223B7DC799DB7223F25 -197: A0C9D62E2432C3366A1D460A466FDD340E76C626F887B5F78647EAF4FC9021A3D04B020082AD5BD523342174FF08F9D8 -198: F8D9DD3023E6394522BA5C5533BAB99242B87BBDD78EE02ED77AE8644C4176ACFF2E5DD1DBD0E672DF2341784BA5FAC4 -199: 6E08FB5E1246BA9CF0E33D33997A5E12E22694B983FA4B4C527C1CC9F3CE9D557407C82BDD44435FFD2167CA81B9E701 -200: BDB00A13330573E75652BEC64443B6CA9512B487FB7E1693540D04D55D68FF98B25CD30ABD53BBBC27BA1C12195C479D -201: FF6B5A707899888BADC55AC1510A9A63FEB4E9FB426C991E3DC4C99C0CF7840214616044C73831818B08BFFA80BC332A -202: 3DD6AF49BBDCF73C14E134DC8E2CA8B89AC87D584245645C40D92386DDAA19DDE5A3106E895B8B3AA03FF9C20B3E8D07 -203: 8ADD2EB50303672E283CBF568F0BE9174F926229F2E8384439CB30E4B92C70FAF87EF6FE882A8D54E0620E369F569176 -204: F24302261948F22BDDE6902D22C5D39970936C8279042F84A370BAD01E5880F6E3CD3D9E7A1C58BF99ECEC756856DE52 -205: EF9142317EEE1CDAB79517A45207C73A4083EC473772316CC364F1098AA85D26F48B34E84BD6144593924A2F54D0061D -206: 82B9803429D2F63212B9BAE81A2DDE4F78DC3974545193A9D0FEDFC07C17F6DE1F18C2729DA98E0D86F824787D2724D0 -207: 512ACFE17ACEF96250FC7D1160FA763F42648E2B0DDF12163FE534B409922DE79C5F28BF0298D54B55C1B6867A689394 -208: 7F5449080798FE0B67726E8A01D30A6462E5F1BEB6FD0A9A54AD829CAE3027B69009D76ADDC2F2E3C16E34367025967B - -Hash: keccak512 - 0: 0EAB42DE4C3CEB9235FC91ACFFE746B29C29A8C366B7C60E4E67C466F36A4304C00FA9CAF9D87976BA469BCBE06713B435F091EF2769FB160CDAB33D3670680E - 1: 40F0A44B4452C44BAF401B49411F861CAAC716BA87BE7D6894757F1114FCEC44A4D4A9F44BCAB569FABC676E761FE9D097DD191D5D9C71D66250B3E867071553 - 2: 8BA349CA619A10EF25EB999D822EA03A1A3F063F883F01B1A959C005A803E4237E766A0A73C27B168DF229AA69AFD5637F1C2969073B00710601A6DDE55DBFD8 - 3: B914CEF4C879A4099D8B8AD040CB12738F03D481C35323E03C6A886CACF225E34E5CDDAC704A97A8358C09D74FD78D5AAC7F44154A1C58BE9FEEF59B47063CBF - 4: 1DE5045B6BE161674C773EEB4061F10108F33BF0F9DF93FC86051B5EF2B4C9B45433A783B212923109D4EEE2B32BC3B8D4E3E2222289C900C8B1E33C27E16D11 - 5: 66E962F416886BB75A638308793793C89BBA3CF3176C6E5D7AEA5BF97E20DF49F61E3A4EBB75D80D0BE084F97197A80B052B1D9E6B53E1FB2424EA3315E737AC - 6: C8F80386B1F37F94B80A2B73D8289661EE727E4216BEEDDAC862484976059A499921E4E1434ACD8775646154D752E6101091732C87E142251766ADF9B0190B72 - 7: 1E55983CA04D4A4A03B9DA869088EA232A60C70C4563CD6A7948E5C4D74869BD5A9404A250A839678AAFD3FC6117675529D626C58C431565B7E222BF0C26ABFC - 8: D32899DB2BB418A57B7254D2B08DA335DBCFD0C6CC3C017860F8BDBFE5DA83733C95C5945B46F4B4D0581AFFC6D29924C3389068F1027638966011ED58A00669 - 9: EA02CD1C6F127747A46ADC1727EFC00D97EEDB252454FCE34D88E2D5F9D4DF70471D5F41D3A8419161249232747C85139F98C28875317D2D7A43346A1EE90307 - 10: 5E5B0F8D067F076567A59E7202D7323E06C0C526E23C09CC8AFEDA2291D800A87CC1C324B23F687B53AAD03C73E4470EBC1D2183B53AE2D5917F3EE6D78BF124 - 11: 689ACAA523B20EE5B7FEB0536DC8BD6F6DD2AD593D1E44578FD7CD3FF748FB0806AB3DCDC2179DF1C742C9E14AA2B0A0A34F637EB9592E71C5ADFCA17166AE43 - 12: 66200CDEB468AB6A2BB4DA085DAEF507DD68B8EB72E6075B9DE42726D7090284A6615087A49D8499E3EE15CCACB4F036A87F97EE184340D627594586FB18FDBB - 13: C3EA63FC9F169CAE07EAF16306012B089AE34865D8061C0A5AE36A2C961C0CCBE75E142DB3D2B64D1FF1548A6B85D0755653601620FAA9EBFBEA7FC0B50B0692 - 14: 5934FDE3B543EF3949169D4CD894662A16D9F9D84B66713E4CB96B05C9E08A38A990039A038FDBBE28F9D33A0651B5FBB57C997B2DE0E0BF71780BE4514AED90 - 15: 7ABFF07B06DD97167AF8E98D95EB5E7FDE26CCDA58947EBBB7991CFA1E5BA142E46343F0B0E731A3D5DB67CE4072FA62EA2F21C9249ACFD12E47AA541757E33C - 16: F4442DD92E6613B3C7C9155C060939E1D39317CF6AB3F66D92FE9705FA0703519ED6B57BE9909A0E30F130C4030463F0AAD083B4D8DC6AF0B0284C3A6359EBC6 - 17: DC9841C5519863A881B3C4FCE2A77A382EE998DEEB62748717F30A5D752762C12E4FA7ECE30AA482DB4246C5F285C8FFB668C8658A5B53B062FA2D6A628CC7DB - 18: 38769664109083E36D41F1ADF64C54FE53B95CEA446465C0AF59197C0C398A60250A62F1010A7362A50A79D7CBCBCB4D219185D5CA429A579DCD0420B8EA6408 - 19: C999AA0A7BD7F7D3988628C9747288FD8EED1B9B1B1BA7D85FFE282A88AEA7F7B430EEB8EFF67AE0F7B68B14503C2EA2FB18A5DB415F0D2A1840ECE0E319051C - 20: 32508EBC7E47F1725CBF38414BA374AB58282770B0B33136502DBF27C1522F4062E8671205FFD8E1269726C76F0E00FB6F0AE10B94CCEBDD9A7DCADEBE0E77CC - 21: 7533F47BCC1C47388A6E66234D7C734CBFD7323826B1813EA09B06ABD3B7169854638D3196F8701FD503B7CD59D476707DBDFD1FB5B737098FA1DD54321FEA75 - 22: AEA8D8FC1F770E05F5DCDC9BF6B6DBF2FA5A5388CB3AEBC0A08CC3D0E536DF73A12AEFDA2E4F66CEC361A8586D769800255C516DA08CB975879CD0F950D453D0 - 23: 680D4D7F629A12592644D7DB8209B99A350FA75CEF6777B477C4B8E105ABF22FBF16B5B9B91E5419A2D9D9447B5CC1BCF90F8AAD0FD95329A55A85B837554E8E - 24: B584233E01865344D7FB2FBFF17A10018A1B3F425D80780F1E319D6174B5807C1E57BEE0D745BA54680486EEDA15A35E685BF87C797F45A8F09C375EEA0A61E3 - 25: 7D7216AD2AD79EC8C7825AB5FAFC13F1410B76591478190BC74221ED32EDBD013DAF78ED4FA10A48C7C313D29285A67BC0F5DEECE7180F119E0BFA0158F88684 - 26: E302DAE08EBAE711B36A2A309722EC09954B161E4B6D0D2F62E2CE9BF9DABC0BE390C944BD16B77F2B9CC65D67996EF4CC7921E5DB077C1C81E7A76B698DF715 - 27: 8D09ACED018EFC448E4479C7B214E94754D3BB9AE09AE9E725772C0285107AAF08656777109803F78B6D8D593BE7E07025A0455D478FF556C622FFA87C186A56 - 28: 522B74EA8E26510A5449A6620EC9D9586D800DAF2796B446FA1201A3088D23DF4D24628D17CE5A05A3D7DAC85E28C507EDC0DDC0B2605329468CF8C0F19F6350 - 29: C324137277DEFB72286B3BFDF63FCFF43A3479EAF3EA6A0EF8697ADA7600AFE0935C0620D5056A29FF475DFF6182CF5D37FEEBCFBA30C214FDF90CC642C71307 - 30: 05D90FF36C242395221A143CE87FF9B8DC1E4C999718EB05F73B422616FCAECED250F2A8B36D2D0D390D44C246717D6B6060F410F252ABD0A3DD7882DF7F021A - 31: 59DFA88D3E20E31CED86978F187990C8FD7F809EA57401A6FA38A0C4AC467656D51B5251E74186C3902CF0B6AA3E66136F6374A27FD2F5CBB5CB0CA3B5DC6E3A - 32: 1414D219F4863F278ACCA4A4B5149298E2EC4F001D83F5F6E09FB14D7B47732E9EE6AACCBEBEDF2092B9CB209694B7EB8E7E36BBEC9F9866A031D8901F891099 - 33: 048C5A078F7432704E960E341E814071F1DDA6A7E238C6C6423C65C1241EEC33849D8D856EAB9EEBF06B48E7E5C1188CA03EE47AF9BA8F23A4EA46005BD74123 - 34: 1B494897D576ACE5B16D313B81B9289373ED2C0125D7109ECFFCA4541B33A0DC0C9957E7FFF682ECEBE0C7553661CA0F698B5AF802B31B5FFC3AD53658F7FFAF - 35: 312D3571645E21F5D07B37F2063DD9BC293FF30FB54D78A8203BF0ED32AA0545F436AE1BC4F662166F2DD813DCEF0BE2B081BA9AD9790735531E40CFA7280861 - 36: 54F6C139B3E936D9FD70AFD5342D1E22FC8E52C70F614DC562793A191B30FA0D91CCD74A9591565893F5B18772D6868139502CAD08C1559E1151CEC1A97B768B - 37: F62E492EB89165EFD745372A2418E3D83CAB25FF2C7849A27852CBF0762E8CCF9981632D8D8C0EA23BEC857C6186CE178435FB5D59110AA99FE1F346F53C8715 - 38: D0E4F31E37F53C658207C37DF6FF46A4550B3BEEF5B251B12B8643FD93C5F753DD21624E72E699D2723DBFE97BBA52676123ED78F644EE25F50E28D6C2D132A7 - 39: ED439CEBE88A2E1B2DBEE36666228B46AB504E07553C1DAC99FA7D431E81BEA895E7B283D1AEEA5066D26ADE4463A44EDF28436D7576353B7D879E67B9B8A0AD - 40: 7F246272B31FE54B37BB72F53188E0DEB6767EA9C0A1CF752519D7E91C5B8CFFB2994348AA07C7016AC65B14483B40CA3187A5D202F730E16A284FBFA8CBDB52 - 41: CE9BF9FFC9C1791CB3DC407819476469AD226E2E244F086BD96A4FF2B461FF7E80257CC6C9A8332BA541FA4FAEC52E717F6FC6C8E43F2B12809D7D7DE7E69AAA - 42: 67849075B60970572DE025B51E00AA9C468D81F2D19B693AA1A4C6E272B2708098E25E4FB9A1BB4EDAC334ADA76023FD9671DB07E8E4DEFD0189AE8B0C74A8EF - 43: 8279C9F7B857F5508749D8FFD24781CF3528F141DC622DF42A15C09AC31C9884DD65A4581503B89316603151937F9AD563B26346DABB4C169B6F3236AE20797A - 44: 28A84BC77F0C2E67EAF74E1A4A1D6AE6CC82AC767D576B87D6B2286D98C755B3CCE29C201881462B2C2E7622E98E77CBC5C6FB59EAA8D2B71B28389310FDDAF5 - 45: A699CCB99E1B9A7336D3A1A4E0EF98ABF470B03B3BCD403FD25D4F34527B3AD4C43FF0067B5191ED94D8179BF5453BF26C4FDF8561BBBF1A18DBF6E08A5154BA - 46: 4A25E731A39FC7EAFB8E7EBA06A4E79F0D6FA4A4304CC8DF481257B1BE9030F46FEEE91F9C44385A84019712932027F2AEB3BE52C77B3A0F40797D8FC95A1C50 - 47: 712E38750CB1A1EF1F45E2213AEFD99861E4643FC56321CFA1BEE3C121C36540BFBF3497AB467CAD3EE7E25C67025E33950443852FE1AB014119EE5070C2A8CA - 48: 9A8EA2185200F4E9751B66FB7665B2F32338BD2B0AA10D38F3A3DE3462D0DC2F2FB800833728B683D603C78ECF38A45D104719EB4063F29931DD6DD541DC1A9D - 49: DDE5215CF926074751903105E2BA821F9298D0571F55501F81E027F4F6B3FB3784A3A90C4A2810D389D2F96EE24920A704574CD67039F6BFFC6BD6975935ACDF - 50: 4E40BC608ADD967FBCEE8CB728C946AE077881832562DE6A4FAABDE7ADB48629D11331DCF9C637C0241F43BAD8899C4F272DB2E19BB8974BF81EBA65B86AC7A8 - 51: 6EED402E533E9665A82914D8C9F0D324F17F6721C283899590DD211BDE6A4FBEF2238505DC8D88F0A408DB0ED567736AC5A51400B211DB3AAEC0A9D2113E88E6 - 52: 26387C9F0E006D6131147D9FBC45C94587B5585B8C4DA8315DBEA62AFF0379EE8F2F74A49F62B9184BAF81E2D2043778BFBECED80C8302DD73A7C7A2D3A32F7B - 53: 839800D4CEC773169F17E69F7284E9AA9128ECC6682555C731D5F04DDD0ACEB00DE40257FDCB7B29B11764AB58EF368DDB5BC6AC9B6DD5CA9E02578CD0738CE0 - 54: 4B8D7DCA654894EEEED491F4453B7F90254D1321A7A4BBB3D80D9D0248694B3DD6CA69D41D9B958D54E4AC8D7CD9C661DA910DC91AE8AF1CEF371F0ACFCF2AA7 - 55: 4566F6392C752BEB1F1B93BD824B80A8DCF36DA4FBC6CD9C14CFDC581FFCCEC1CDCCF641D585753FC996424272456D92951CB4B9DFCF87A92A5713CAB136F7CD - 56: 736CE170E8D45E3B4400302EA38CA10FF710317B6ED873F15CCE9C79D42E68E6C2D4A032EB0E355704D4AE767AD4D9CDFAFB182540DE7BFA445D656EDEB4FA52 - 57: D5C5E9C8C1CC77B4AEF723E7E9B107ECD352C91BA0E4DFCE023A8666DBC4DD7FD069CB1C615CA49EE27921E49D86780ABE9038E2328DB97CCC5FDE46015684FF - 58: 572DB1CBC2892A6E1F50169CEEC9FE351132AB1F70F8A47B0C24A7499FCC79EDDFF85B032E09F252A76B451129E0ECF039C2C76532F21E76AB1F2CABB34AE940 - 59: 5F865DCD64D3B7AD20646F205E4786B04FE859FEDD208DF1C2D0459511D8FC2D16AFDF1E058935484BA6A09AE736338C771475E064408C6C6F6236362B8B0A59 - 60: B9E258C8C942713678B7F142CF9C7FC2ACD8D4FE8E91538588399AC4D5769DA3646CD44B9730E19EEB212836A56AE6DC0F8A6BC5AB260FA2E32B65C168C311ED - 61: 59C3DF21809560AAB3EA487C2103753DDE6389F739AEC0A1D2F927B4721D0F182CB54C03B23D3981D6596954639415D3B752E411D90C1D1EA9F58C1D20C02E20 - 62: F87A53592FB4DC5AE42506001A50CACF8A10EF36C8EF1C2462667AA8495E438332B3D711D200565B996D973B8ED6A1EF50CBDBCE9B032886FD90D4BB2C68728D - 63: EA182E5D760C461ADAF01DEB1B1B43F2807EE9790A67D5231504ECD420C19103A5414F5D1E5F7958E6C666603E6834EAC47E11C470D48AC6087ECED3495609C5 - 64: 59BFF1EDB37C403BEA6387E283C5D4D8878246592807D22328FBC11EC1E029CDB6659300529849189AD647FDE9AD4A8918202BA310B936AC6A1D477E4284AC4B - 65: 7FC279F9043AAECFAAC3EE8AE845304664DAA7B4C8AD98DFB46C65E8DB58A2FDD2152DAD9DCCED438E19D2679C3956897E3AC39EA96333D888C8D1D785FF7240 - 66: 95EB1E10D83BCC9BDED7693E46402866B1BF648F23D1E01B2A37D53DC03CCBA0E17C8303A5517DB7211ACDC02743632DB995F10A0C3D9E5C0D922C59B3746BED - 67: CE13598A1E2E79CB663A538B4025D98DDA7C90753622E0A58746EB3DBFF614EDE80AD40DDA6F5AB745E4D801FC1BFC3A929254C6BBE44781A5FB72EEBAD9B8A4 - 68: 712E1882D73E31D9B391133F6209204E7269462E410838A93DAF3691A398B1B1FCA0627B7CB5C9787F83680F0F2888EB8B83A7FBD9035167B2079E95B6012E06 - 69: 357584063B5AA378471FF6CD40F2B0A564FD60503ABE913CD97F25321289B540F1A41FAF4C011725E533FB3015380F4B801B9518143456E937EB37B07F3012FF - 70: 7A59A8BAFADE44F1D446DF85522F99BF08D47C67E7421EAA2217C97F0FAC0163DE1BC1EBB8CF8B3CD59C4C041D515E3C05A7AA4304B93FE6DB8683ACD396D53A - 71: FE0953F9AFDFFED7FF9764C2590FF0E6AF1B0689E42DDCA68D6EF003DDCE2671B806E0D2E6D57117BB75AD6166E2E990CA662B6A7F8945584F5308459EABAE15 - 72: 76FA23369085405345FE6A2831F334113BEE6B111056E21072082AF56E7C1AB4458858DBDB5F88E0D86D38CA654310C9A30712319C1F4F9783FE9F3AC0469527 - 73: E417B9573C871D948D48F62F6B16EA6CD1F1557A462FF5C1AE276D14D2FB43CD7084631656BF60F4CEB881133113D304335BD93487E8EC3E845EBC3C1877CA12 - 74: 600A368D014AF29F2A030908EB52962ED7C196B93A44479AC2BEE4995B1CEF345BABE4BEDF9571928EC74FC0BEB12CC76AB11B1A2AC43EA8D97ECC963B8419C7 - 75: 567D7A32DC996B0D4BB7619FCDC5607BABBA886A788F3B38D9CC980C7895F91DE5E91363600B2E87FAEA628761EB0DD27CA10D173D2CC9FFD909692B21941ADF - 76: A8433F05AF7E5A43E4CD68100A5BC10A420DFA60E9300C18C5AA3ECF4D584A14A98090818CAEBF75A004883584CA410D7B37F61C39664614AA4937BDE449EF6C - 77: CA85B9DD0527336346C294DBA9DF1AAB32182F3BE4137595696D456F46E730A89A782AE97C6B157D0718FDF2C5BD5DA4F33B2D58E71175BC93CACFE3216723B1 - 78: ABD8E1DB03C449B5BAA64CB40461230412A70218D8ED2475C10FA548A6BB9DCEEC668ADC60A03684F2C5AC1F4CAEFFDF9EB305AB9DAE05A88E604CFFC0BE4C4C - 79: 323F434AAF591BF892973B0F3DDC89E36030B410D94C60A3C6AFFAC0937DAA446911FF90D11FB94101A375A64C35FB2FC1F88A2D43FBA38C17B129A6BBD3B9C0 - 80: 9B61B6456AE23B6533A6D22F8D52D8F775E34DB06352F3C43550717DEC83EACC93360B403CE6802EDF8967AA11D886D10B4B0F8DC0BB6AF07473BBB9F1202C9D - 81: 92D960E500B79C5C118479D8E7BB8A58A7E985FBB1567738DEA8F989328B3B7240DFF2CBD6DC5000EE8094D9B8A12BDC90B0C3309ED8651ED8AB61ED46D825CB - 82: 54318D7E76B4196AD8BACAAD120D475AFCB0F249F549CB1E972AAA41DA2E850C07E5D3BAB9E3BAC12D57DB4C2D4E465BAB34B686B7310CCD9272A8825D0F0CA0 - 83: 5202939C0AC399E999B68678BAF7ECD25732AF2F5D4245219F768745F0177762C8C937FA666FF895EA274CE6782F7037D234D21A6EF7FA89A8894AA75E448163 - 84: B57D72DB39EAF070A9770D0DDE35F5E6FBAB3E8D475BCC87882E922EC7E488B6DB4ACE1F802536A66E09F5AA702D272F9F641EF77BE0DF00EA8DEE2DF821F534 - 85: FB7907417B9067412BF17778C0D8E0527040061A0DBF59AB2CD0514BB10EF0F3CF58A2894183D8551A21710DFF009CFEFE7E5F840F0180CDC9339DF01FB71CFF - 86: 130F4AF85D77EF3ACB3D2E917B93B97632DCB89BF54503C8D77C340B7E1889412903EB81944B1D5225E4DE73BA687F443FA2DA843F5EE61E9EE2E40F3574691E - 87: 6587C185D286D803CDF9DD4C1B6E368FFA82D453D4F5A57F699CC0EF88D5EE703D4B4D97E6C02C10DDC7FA299F6B16381633DA640FCB5B287CBE49F262396127 - 88: 37D65A893BC3E8A72B1F51535116584E14B467411BFD2CCC35F6FFB992F964435AEE3B309C4896F796D88C9BD4D69FF91F34BCBC8A96156855D3C4784951ECB1 - 89: DDFC27C03688FA988379B961531CCC0686FB1D0B58A53102BF529C66AAFEE715C8FB0AC76CD681E5447CFF04D4A292CFD846E929FE8430F742BDAF09887CF50A - 90: 13A3819C440C4EF6CFE6B52E51D690B023D9E72FC23A93AB8C456E9909916B5AF274BD7C70490F824714DD7B43BAA18DCC5F3DD064B601E0A5FC2C8141A09FAE - 91: E4472CD6D4193E9BCE4CA06CFD386CC3F8DF9DE745AB84F684F519A1C3CEF2E0634684B86F7D44FCAB9F4F39BE3CD9912F05517BCF2F3E9200962DD6862C111B - 92: 0E11F29DC57748442BA586C750335FC01D2A526D8C44851BB1E01878B5FEA32A1AF376F5244886445B2EB5F9DAA762C2411966C75D41453BAC009299CC491459 - 93: 836DE25DB09476539D877367B88881E009883D4506A44C88AE58EC07D15968D1116367D9CA0E2E8AC8B59F9AC1F67E363711AF9ADC7FE388E23DA3EE65B261A7 - 94: 0E8128022764AF2FBAE57B2CFF415B6CD6C428194C3B466A2C8752F2EDC08FAF898C4A63CA0D806A59BDE12333CF36017CAF3878525F51C515338214295B2963 - 95: 36B675F6BB2BEBAEF9C15295F96216B5A3B38B215C0B3C62D2C88D97C649CBC511945A272A49ED67ED449593ABBDD7471B14FD362833EC9F301507DBEC42931E - 96: 1081E5AEF269D4F5767C3200347DFC13CBF87A8372AB4AA6014080241E273794E5CC80A9BC2524557038DFD6C12BBCEDB741D462EBA8AA286EB58685B515168F - 97: 701F142E5E0B1A1F745C8155B0A0DF3B0324B646B988C3E4E66A48AD3F3AB49FEFA220A4114E933DEA27CCF0F3DB18E37560921D7C98861E81BFEAC2F7765A59 - 98: A4A59AB0DC2422BAF4840DA35B42DA60DA467477C3D99BD1E92C3FFD7BBCF37D2DFCD218DBEFB9D416FE526B63F3A20782E2320EAD6C59B33F975B39356BA803 - 99: B8A8CCA827370AE036428ADBCA0827F9B592A4213EAF5558B5C5417BE5EAD05D545F6AF1C70C86D73CE7A362A1ED1BAAE36A2AB9F0B8F39E56E186B420250CDF -100: 180AC9D064F74C158F1C47CB7C4C7B64342A0BE963041AB24213C292B88C5EBD051B258F454EAB1297C4B6998C1EE27242A99217CCF392449B23EFE235C40CAA -101: EF3FA84E58C527DBAC57061BF95E69FE2460F8EABB131F7D424C7646FEA072E06C5241A8B2DCC350AC9BE36B50292CDD4B6354C23983F38865022BBF0B021F7B -102: B85065320A5504BE97F884DBC56A8B8159DC4D924C9AEDF45D2C11AB8457D556F8DBE9A461D522360D848590D8B79D675260591D2D77492C508734D0409A2D90 -103: 7750BF1A2B202AB4BB94BD468A15EF52A595126A8C478FF49DAB3D79EE2F982BFFD297FFECDA2F8FD9C5808BFED25266CA8AED5CEB7F984131BB82232944FF9F -104: DEAEE6A17946FCEA82FF8EA8DBDC7D70B5FB5A928C2D80E6AB589BDAC79AA9FCA849374E73F1281588417DADF072BC903BD65925C203B40A7CBB1B8AB7E3E8CB -105: 8AF69FF46283182AD9AEA388AE762378E1132928250FE02611D882FCA5B449CC62B486FF5CBE891AF319753206D9677DE52D00007C70401A74B49696E1D63970 -106: ADFA9E3CFF24BDE937ED0A7507D4554ACB9D045A0A2AE4624DB4765B26460B0AB42D64AB15F26BC2AB2300BAA181B163DBD3FA341E1F7BDA825E925151BF539B -107: 4CCC2155472D23D4CDB98C38EDA0E1CE293D5A8AA271265637FD513D3C07C329CCF754CB6C7F2C9586951D5F4F9F7A4C9162BDBC41E97E4C28027F43B4D17F9A -108: A3947259594084BD22BB95D5094930D1C08763C2DAA46D63817F41B84A80172AAA806BB1E8C29857D34447583D53880E27B9E5BF296A03D683C8AE3F779A5166 -109: 866E2F0F8321023A8B2DDFD88184B61466438258DFA7BDA7029283F05AE7004B5AFCC8C83AF97A3AE18EB741B5C7AF9341DEEA0570BFD7FE9B42B2A12CF0A24E -110: 8B78A765CBE70232BF1C8ED99FB8C8A8B4481E111ACB6F4EB786AEC75B0EF8EBF484D2F82425533D3C3C5065E25E6D063FE41BBA8FA439EB3FEB210F7748D3C0 -111: 85E5190019CAB8AD15518B63E7A39FBF474DC28D36139AD9E1121AC43B2C6D3A3D75ED773E971AEAFF928209816CCE900D50FE3B8F214A6015F3FA0865248044 -112: 82B5C93FFE55D6FC87C3AE38507D3C2DB38B70A5860FC59190AA2689821F4F1C111C50D1AE26C3135F85C110D00240E35173F9E02C0142407E5F3F10D4A31278 -113: C5890C54819528E25436EF43C4264602D87B9D39DB0E2F2E2563EBDB9DA8E22270292FF3653DEBF825C43DE8F162EA3B3A5D3AA970D51748304B63DE0A1D8815 -114: 82DC097F5DF451C3463C3D35E16F767CE2ECB27A3454BB1D4F518C81DA04CC1BA3514257788CB8A7A5C3D837BCCBBA4EF0F69FC65BD44772402039A8106DA570 -115: 6F0EECD6349AB0170D6021ED3487D83DB2C40F5B0B07BC51B635DE1FB1933D2BDAF2D09AE17BD53F5AB3FA12AF0D9CACFA020DCC0EDC5F22510E26C8A15C3AD4 -116: 26A830AADCE2D0F609D0F7D97A96660EFF832DD583EF751C4D82F010DF3C11C682CE1F4241B2B323DA023428DE48F8548658A9F8A84BE95A1DD1B87C4AAA9D75 -117: 98737F7A2839286F9D43C570F6D31D789E3386EA1597F385D771DE9D1418D944F9F0B0A2E94FB5E77064A0C5C1E3BC05E07A1AF0EB876B9FDBCFC29FCD640A8A -118: 26FE80CE5C5C1CFD06A0F487AD866AABBA6389DB8A0E8B3F0B84D1ECDF068C122431CEB89D72CA68E97BE276C22AFF0B5C525FA17DE8377A42DCC40413DB62CB -119: D605D415938D9E7FCFDB0ADCC2EDCAB7C14D9B2525CB00E2BE0BAF08C9B16ED574C8D69B0B0B58F4BB6CE639A9657D6094FD056548040AF22A130A55EC122B8A -120: 498EF663B284B390C2EFFF4917D3A473F4ACBFD60478B613C5B148A524C7C77AAC111B9F628B3126495A771D563434ED3568030899A28D660A122A7C7E79CDDD -121: A049901950E5519CD8AD90CE1133D6381CAFA6865DB39E8ABBA0EA96E13F9EEE205EFD49D6C25C948DD98073C4A976413EC9271130770F0CCAB2FB86F451C729 -122: AAA445C0CA262A581F01C1C34F54478C40B4A4DDB4D84141F460ADD89D9DBD9FC21F47A8539AD8D19C9C9199A51EEDE0EEB845E8BA0A54FC1D4A250B01A3E8A1 -123: 5D746EB54619686026C4676E6268C313204413BDF4E385C01CD2DC53BBE90C6FBE11044C193C4AF4666F1306A241C4EBB1C62B9875813C977A38F0900CBF3368 -124: 27F8738B75219C8B880A24CC6003CC5C0591F3A268DB2F25A6A5EA39DB366BF80707C7953DE0A7193330E33EB6B2880F9923323E3269EDE9C2DE40250E092196 -125: F3D8D04D41914B651D463FA90D2372073E8D7F0C051476AA9D6870D9D3DC6CC16CE14384293FAF66969958B240D44D1109A1F2C59598BC7160016EFB3B0C2E33 -126: A67B45A563130FBC593CC60804D963DC2766936655C8D65A632F30AF264131E12F6457798036D029FD8F07DAA31B479D517987FDF6C846C569BC84B622CCF42F -127: 4A1F3C3CD2081E8CD187FFB8A3AE89E8BFD8D3AE59F1941E787123B951567C0432AE5B3443D2B752C6D630C411DAD4672D09C5121AE8778C2CB8AEE9443C0EA4 -128: F12D2A4F05A8EA4AE51B502FF85D57EDAE69735F91F101D54FB6BD3016FB8138397B0D1796D7006CE0F3E9FFE0712448728140034104B51484E33D1A6F1F126A -129: 1109EE4FE4A42EE79924291D253545905493C1CCB9B537A53768B54D8D9FFC16887E27B8C83C1489443F25E5496CABFF757D159571D29CB3896A1A35F4051171 -130: B61C0D6AFCE09B26E479FF887BF796E32B1655D3175AB75EC84FA6D5449E7BC78E7D7FA21EE757CF791D95023A845FA821FE11EB26DEB64D708A77A4EF337D3F -131: 24A337F0D7DB13A6F2F8945B98F0E2B21BC278ABF47FF047CEB3CD4C025897F6E90F74FC3A99BFAC73CD9AD4581939A6481C206438E8D1AC274A15FA895167A3 -132: CF3E9C287FE47A602A8474994512C0601D0CDB98741200D45C2E331A1FA5EFD9D41588C340E06517103864FA522F3937319F977105A6DB59254A977FA67DA386 -133: 35102F9A5EF43A248DB216C974996ADC4520322F41A9741C0AF26557C3E9F79B03F53B31A47CB7B547BEFA3B93A3A835D7A83C0532BD4596608E00ADB44F8DE8 -134: 7D6F9C38DF2DF26DB78245A7C0ADF4D7069CA233C89528221A3E8C5CC94AD84656E812F635D283B5DA613049F0E99FE2036B13B9782669D60BF3C40789138C0D -135: 006C8F51CC69FC852EBFED7DDE9B83E566ADA57F1F553B56F886E5D8E31C548CA655E1DEAF65A82EADCDD64729173A5F8DADD98ACF26EE84FFE2F54BE8235344 -136: 24D174F907F6CAA21DCEAA001D1F8FF9096FA8D0D01437D25943B85C7E3B6DB67A0023871D11F64A23ACBEB322B4530A470AA5125161AAB53DE25496C4BFA5A9 -137: F17092921CBB7F101985180BBFEE7C14E9EEC171F20193943049FF35EC1FB1ECAB19C3F4A8426550B37290C74DB50BFA88FD0CA3280A58BE495C54F47DD1A856 -138: 413C581F31520DD0653470BA9142793CF4B0B55D23DAADCAFDD93AB91D5D6523C41940573DD99D8C8693537302FF5A8220B79D1289F021E6308BB6C837979C44 -139: 2582F4A1D1FA1025D22B42004EB460098993B041CDDA4DDB4DCF517DBFA0B369F1F4A93B66355E778B6D4BBB6A923461AD0C2E167BBF2E3500BE928008EA3F57 -140: FC0A12DB8AC34D7D157A791D723C3428150CA91EB3FFE2E1C9E3F3380CB3B1DA247C347689D3B5054E4A2C6F0ED67FAF212E44F4C29A7F11A677C78FF4123072 -141: 5AFC34074906EC5CD8BD2F370259299EBC5C7F9EE014832FEAA24F04A4C58807BCD9EC3C3436550A2A02E68049B05A9A3142D1D73E62F918E9CDA3F376129963 -142: C44D4501C341A23D3C1186F42B5EA08CEA0ACAA9A2D89017FE8F4F50E2F561ECA0981B46EB8692DDB719C9090F71A42CB6B6A243BA7CEA97269950F07012E2F7 -143: 5235D72EE79341191B3877565A0D24E7AC8752657C7596D15FBB5EC08FAE605FC3C863F9864541E256981E0DC53EC82F7BC55839201F8FF000A38D419D18A199 -144: EEAB6AD7C545BA3BE7FB5E25D15FCF3CF573EEE7062ED7EDBE0322C65BBCAC59D213D222BEB3C8D3110F1431EB27FC268D9B91849CC8E6210F45ECE4CC8D312A +Hash: sha512 + 0: CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD47417A81A538327AF927DA3E + 1: B8244D028981D693AF7B456AF8EFA4CAD63D282E19FF14942C246E50D9351D22704A802A71C3580B6370DE4CEB293C324A8423342557D4E5C38438F0E36910EE + 2: 80536C6170DD8626DC081AF148D39EC2FD5D090CC578A76647E7903FD34BD02E4333ECE57B0E24FF116F43429B6FF541834BD40EF0C8D3563ACEF5ED0FD254B8 + 3: 8081DA5F9C1E3D0E1AA16F604D5E5064543CFF5D7BACE2BB312252461E151B3FE0F034EA8DC1DACFF3361A892D625FBE1B614CDA265F87A473C24B0FA1D91DFD + 4: 4EC54B09E2B209DDB9A678522BB451740C513F488CB27A0883630718571745141920036AEBDB78C0B4CD783A4A6EECC937A40C6104E427512D709A634B412F60 + 5: B7B70A0B14D7FA213C6CCD3CBFFC8BB8F8E11A85F1113B0EB26A00208F2B9B3A1DD4AAF39962861E16AB062274342A1CE1F9DBA3654F36FC338245589F296C28 + 6: 2F3831BCCC94CF061BCFA5F8C23C1429D26E3BC6B76EDAD93D9025CB91C903AF6CF9C935DC37193C04C2C66E7D9DE17C358284418218AFEA2160147AAA912F4C + 7: B7C0B47F42F7202BF7D28D6834BEE365FC01CE3F0C8C8DF24B4D940406C2E9C230BA88854E946EBCD786C18C748969FDF012362B7C96400604B6058950FEAAD4 + 8: 8A414C5860CF1BE7BC8531442F69A65EF2ECF0B7CAD9994BCB407097EB74CCB92E93AABD24BDE60331123B4D900684CA7BE6027099D4946BF537F4D6C6DF3D82 + 9: 8B5E5E7FB6530CCE1BFFFD1B1AA338D3282E8483319BF028BB674BB6AEB8200DA389647E3D8631503DC5C487BBFA7D074584493615B036849E0242610EA4758F + 10: 0F89EE1FCB7B0A4F7809D1267A029719004C5A5E5EC323A7C3523A20974F9A3F202F56FADBA4CD9E8D654AB9F2E96DC5C795EA176FA20EDE8D854C342F903533 + 11: 8FFAEE0CCCC162851FAF051AE38667EEFD423C0164C50055F8ADE00AFC3705E3CDEB9900004B0E426CA66AB63AA3B99B075273F44FD37C22A3555C6FD1F37CCB + 12: BA51B2A9DA2F26FE81FC3EE11524255937EC6BEC48835EB437C598C55674E15AA50F88922DE7584332A5E4D24787090CB14DFC3ABDB39C55AEDF6EE108F95354 + 13: B6E30A4016029486F9205C5D141344F885B3DE2468EDFB0B870545F1775CE82597C2A40462F385C957790C20822D9E920EF1AE230878D6B23F221B0182879CCC + 14: 79D76024A31CDBE54CA951D264C46E78F6F5AC5DCD018BAF89AA586333BE82B2D5CA2BC64B99CA2A99D95A984F2DC0D6C07E7C96059DD346BB3296ADE3AA33C0 + 15: 4236736D08F26244E75B51614091CC2C2907D5DD162F8497B14D58D0D954A777C8397549BEE468F30E480252D9B893175DF7D2BF415A128CCC79407D9D5FA536 + 16: DAA295BEED4E2EE94C24015B56AF626B4F21EF9F44F2B3D40FC41C90900A6BF1B4867C43C57CDA54D1B6FD4869B3F23CED5E0BA3C05D0B1680DF4EC7D0762403 + 17: 7B9AE840AAB8BEE45B038CE398D15A8679DB92D0BA46FA67D1B8177986E41EACDE915C6552FC2AF8678425B8BE81B57E0F7EEADCC93B56C58DFC38B4D33BF25D + 18: 0EF6A8C19E19A466DBA3139E2A401175BEB9EE01FB56A8FC11A3E53B345F2327959F6DAACF0CE6121987D2491251DCF550C95F6026F93A1D96A0F4164CB1C642 + 19: D6221AACC88CE14EB7DE0F15F2260EBF4294D9AC3D75B87465EF7AF9570C959077860EBBC5C8153000507CE1E39AED5D007F2286210EFFD26A118966ED15C143 + 20: C9AC4561A7503FAB9C6B71C843AF6911438550BCDF4881EEC18DDA06E4D8B820CCA9521DFA9EF47298CCF6308FE4C4F2F5E34DFEC2ACB78FBDC04D2EF0A5A09E + 21: 73C5D58B05E1E6FCE4299F8D9294681416BC3785F51E402DCEDC0E30C0671DD48321A0248CCC13389A012B52513F1B5BBF820E91EB4F616928183485B4F1EB22 + 22: AB1725C57427DDF93B34AAC62C26F3FF1E49CAD30DD41AE7B5FCE23894245E7E889E0FCA5EC076F247DC7E929D72FB965B45688E57D8CD54212714A17480BE0E + 23: 456F6757A82F0589040996BF88F28E61317C358135A9AB6E96E22F5CA68E2A6438D13D176B01157ACA1FEEDCE3C1A6D5C3A9B1D5A471691917392FB94D0834F7 + 24: 5330241E6F01A49B21AB0D01A9C76AD662E97A325BF8E24C4EB82C6F3B7D2538ADD98F62307F36F900F3934861B80FC9844B761BE15460A1B102C26CF0410E83 + 25: D8DDA603DC21C20A6DD3C6A4F380C297679F035D27BBA82554D02E1F95ECA2EB20496164F96DC4B84B9BB0942B96A3796AFF6125BB9E8711E2674B440176E91A + 26: 81E5A3AF460DD2881353D006AF37478C58AFFF16022441226FB04439783DA920D09FD03E19F45BC82F82735FBF4F2E5F588F11AFDB87B69DB91123CBF05F7F2F + 27: 25AECF7D241EE54E668DDD345582DB777F9F631B9D2432CE4D32119BEA3968D9FA3E184B135364DF62247AB74BA7B86AC3542F63D9F18653D86B9B47944AB96A + 28: 8A372F722A922E29CF5CB22BDABC6D284364F376DA355CA65BE36DAE2FA6F0335744CEFA9089DE55D331AE64E9B2F1037E73608B03B978758A20A012924AB235 + 29: D57C54ABB87AD2D518790B81230DA336F551A0D89A57D0A3CFE2F4ACC55B4B210261CD1482BC436F62D3FC96D1536B82A2E93E9A3DB5CD0F1822EEACF307460C + 30: 6092F1E76F04A5926F6FCD149B18DC9DBE8581BDE6D2A1468145280463472B636C711FF61F5CCA84FD2F044697BD1DD18340B3ED0A131F4BBA35F839A2DD9E0B + 31: 0674A3CDF5F7C18C1B7524C87C36037F3D0267512D11E052F453DBC097CFD52BC331950880CF904656C70758B2E25E21FE2C7E0462E861112A2DC9D0636BBAFC + 32: 3D94EEA49C580AEF816935762BE049559D6D1440DEDE12E6A125F1841FFF8E6FA9D71862A3E5746B571BE3D187B0041046F52EBD850C7CBD5FDE8EE38473B649 + 33: 301F1CD7B25B097AE4C79A97E92BCE359D1289F6754E76B71E7617A06E7783A3CC30F5290209BDA3E6AF239D0DC0F3D1CD4C5E866F4C5C3209EABBD7AAFB8058 + 34: A8C7114B292CC6F46D73824CB073CAEB23EB1ED5EBB37F064A0A76AD452D936D1DF41433FFA337C3F7CD53F5CC00658ED0633252B69DE192E61D9F002B0F133D + 35: D2F92068E07C9AD0572693CF546FE75070E574807C02F5483A31B8CB2105CA55CC6AADAAFE74977F581CE90F43E2AB48260BD7E273D4A83C442EC4871CD88AAC + 36: 1A4133CDFA6CC518387D392814029744D6FA71122EBDFB70059512B89469CDB9D9B5E45900E99E67DBA54B4708036298A94835751EF583149F06AB272B2BA355 + 37: D30DE790B4905717C956A95F60D9ED5948F9E509BA27607E1C5C8FFE35ACD83F719AE04D63364C0BCB72BA529AC79C321ADDFBF7AECF7CA3CAC840A372E6F6CB + 38: A25F5D4BFFBC5F0E3D5CACC3A91870866D8C2D22573556C9B9FA0D24E1D68C55EB42726B1895DF8E5E870DA33755DDBBAC130AF2D96D84DD0D57761D25FDB64F + 39: F44001A74D0B087AF2A143B778DCDEC1554BCE5992C9672E3D0F6704D022CA1E78F087543569CB99D249B820E683138A2DDC5DC178D585167FDD269D17396A89 + 40: 692F36EB114060FD04CD38555025251DF985DDF681A0636FBD290EFEA6FCAC5226859373F3E10E8CB07AB5343547EB0A543C18420D70527D2BBD90040F8DAA52 + 41: 4B1CEF875A025624398CD06DB876EF9AB34FDB1B6A75A07CCB591D9B20EA66E24BAF323911B5CE8B67904945A36C28630B36129939D23D26218610CB049D7AED + 42: DB3E80F11517AB797265829371F245A7A0A384E36A8D43E72852C8D47F8CE37A178475EEF44CE8BDEE5AB054F47EED502E76D49B9F4A5AA392077ED1E6F43EC1 + 43: BD08551AEA7759911B37E9D45748219B47C4EC17A2D2A306D9B8FDF982A9E3106BDC1ACF3F47D383B6D16E85910BBA08128E35EE578E7C55F2E9B9B59F611298 + 44: 3BD8A709DB9A4E0B874B113564B11EAF8270AD1DA3A9236DBB16F58F43285070344962394C2231B3917401924A3F688150B9A9ED3B410547DE3F56450739592C + 45: D0206C8577202C617592B47AE178DA867AC7DAAE4E65B912C771C5FB09585FBD10C36782064E83ACE749BE27045508D544532B628F67DF00A6B7DBA9775D3E06 + 46: 745083E5994158A0FEE4D849012F43A822D19F068AFB327B372A7A8BFE8347E579DD29424EC95319BF75A24B4DB4280D9C16CEBFF5D930D61D34909061A478AE + 47: 3527A5E1E5E5953EC57F309C6513C34405531603372BA0DFD5725E68B9510E5090CC6B317B2E7359D2ABD5ADD353AE1435B85535EB5B0B8F2E09D4DD1BAF3C8B + 48: 622BE417916F1B0E9CE8C952171B11B6D2E2932D6197CC17431B9FFDF03FD0ADB69B08DEDAEBDD0F94812BC2C670C894D65165B31D2F2879532F2C14453E6A0E + 49: C2EBDADE0368F1DEBE44F8E1B77E66BC1C25E7F0FCED7784D615811E2C01192DBC21253E10709D0BEEE746DE6EF93CF65AA39BA29551E11F602ADDD27B196019 + 50: 5ACE0640F0DCB25871E1925F96BAB48162D692BA134C9C7052A37FDFA4895B90AC56C7FB0E7FAF155D147A467839500D980E9D4ED1CC96661177ACF0BA8D4167 + 51: 5D43600C04E52BF6524CDCB9DAD89B1C7563912E7C7E2CA3D34B27B3C1D07D85D35EBB7A65AF0434155AFA3102A580AD557468CC23EEA1E151BFD4EA817FC5B2 + 52: 38D7538AC3E51DDFB6724F57B29A5E46D15A8C08FB29D15FB0681A4315B03FD6747B85D0EB2B9E5FCEC709F365DE08D61A1EB363094BF292B5154671D15D61DA + 53: 2DCE13E5882A31F7396D970AE72E89FB59270D78BF7B4579D0855C4E8BA231D23E5566B77E79CCDC1146762DAAA74F49D82F9EFC0D4FCA891E78F9FF86C61300 + 54: 6D7644DB575C5C238DA02CC4259996CF163A3A3B5ECCC4FC62442DDF01AA05EF0C4EDBE3E6D220DF189C984AA55726A4922EFE004832F2D8887F0B8A9267DB40 + 55: 6856647F269C2EE3D8128F0B25427659D880641EF343300DD3CD4679168F58D6527FDA70B4EBC854E2065E172B7D58C1536992C0810599259BA84A2B40C65414 + 56: 8B12B2F6FE400A51D29656E2B8C42A1BBFE6FCF3E425DA430DB05D1A2DDA14790DEE20FA8B22D8762AFFFE4988A5C98A4430D22A17E41E23D90FA61AB75671A9 + 57: 92CB9F2E4EEE07C7B32B06CF4917FBE54365F55247CC9B5BC4478D9FADA52B07D1C302B3959D0CA9A75A629653EA7C245A8FBBA2A265CDA4EA70AC5A860A6F3D + 58: 23417F93C499DF9EAAF1BFD6A62AADBC711BFE56682943DE5D94E0DAC32F732B763BE28C32AD5F01CB95E5B322AEFF8494B111D7CD8BAB50E7C602695EA6FE42 + 59: 4ADFA8837BB499605D38716F8305FD50255DEA2EC4BF3EEB07560B3C93B5E3725C5A598277A32502CD5C8AF6C88D55756DEB03B69CFC278FFE2BFB3CA202B0F6 + 60: 981A245B249111B4CDCD565AE60C9DEB69FDB552B10C932E8D0635685904203C37CC65D674292405DF24A589682B8AA69BD0E16F666652290BD79AC10E3A9B37 + 61: 15DDF1E434A88F27DEDB8435ED837FE4F1F3BFC5B6FD387A98E93D1C83493D326467C7C53EFEEF158F6B9CC2081267D9761A32A5094399754C0FD62F4C72371A + 62: E08026874830E0B911F5CC51B81599A4DC21204F5C9381CB5A0DA8F452EE99D9FF7590B798805C2743822572E6D2E47C2C1F2D428EF3C28D05297BEDC5CAC4EF + 63: 9DC9C5598E55DC42955695320839788E353F1D7F6BA74DF74C80A8A52F463C0697F57F68835D1418F4CE9B6530CD79BD0F4C6F7E13C93FEB1218C0B65C2C0561 + 64: EE4320EBAF3FDB4F2C832B137200C08E235E0FA7BBD0EB1740C7063BA8A0D151DA77E003398E1714A955D475B05E3E950B639503B452EC185DE4229BC4873949 + 65: 02856CEF735F9ACEC6B9E33F0FBC8F9804D2AA54187F382B8AE842E5D3696C07459AAD2A5AED25EA5E117EB1C7BA35DA6A7A8ADCE9E6AFE3AD79E9FA42D5BBA8 + 66: 371DDB96ED5BE6521379457AE8ADD707A866732B629EE00074904D73858F3FAE827D84E503F3779073490B274E29D644D76154FAB18945222289BCA798BA6438 + 67: 96A693A22256D39A0596802319CB7AF997DB4BFE311577E38F8423DE81C567A96775D063471438F0982EFAA6B75B4AB173D9D3B3D4762030B522FA70DCF3B27A + 68: 7D8AB6155AB31F29740042D82788A69E880FC642E600BEDFC89098B9D2F4F98BC11141FD420870958810295100DE66F50C96E1E4F6489DE98F9BF2D4A9AA2237 + 69: CE561F8F679B4EEB1DC97DB0F72632B9DA1C5B5C0292CBF0662CAD981374BF8C9A0BE1355657FB18196F980E6685D52FE601DD45C6B0FBDE7AA5C9D52E7E5973 + 70: 10164CFD162CABC44C56D76D369096D759954074B0547FA7310C3388F0FB6BB2AA295FAF1E22C44CF59959A37EFE317698BC29AA718D57EBC831A14144F4E48F + 71: 658B337A8FA873C73AE4D19992BBAAD10E1325AFB4DC8B5733F870761429B4243A7982AB375E529C1FBE6339A48F9FB9E8FD6A568F9CAFE640E102B9F398A330 + 72: 4EBDFA0E60E1A3E7FEFB8DB424A5C3A52365F325EC7F51389A4955EE3453BBFC94692DEAC3FF6A4E94105C27D632DF26250FF37314C882FDEB65D53534F8A961 + 73: DFE9D2A6B0AD5DA802D695B3B91745852C97B0283D9A033F04D79D2CAD4FDE50048AC7D82BCF8C402B109E785D39FC9FA0203F7CFC620EE43577688BCF3E69BF + 74: F21869E1EAC3774F3878570AF0DB9A94F464373C1A92E097D180A331C9028A18A68BF4624D8E620B2216B03709F03FB6CD10004F77433ED605B0F771161145C5 + 75: F1F928D322E6852301AD6FC901E91F2156A3CEEFA204044DDA3B4B76A63692DAAC479FFC6D83EEE3BE028A1F651D3520758DD395A1B251E6C261B7CCE86D0481 + 76: 37954BB11B0AAA67F803973DDD2709A73B947D0A5FF8DC46C2D3C6918C87069AD0DF907589F3026A94B071E0F00230F00CF74AFE8010C24E489CC8AF9B8BD646 + 77: 140DB04BF46A194E44F07F6ACEE8326573AA0591F8370A79DF320093C45764A2ABAE531E5A742F496544657FADFEDB7F04D4BD74C347AAE237B5EE59921BA87D + 78: 6D0D30BE796B6E1039739BF24CE26D8DB954D25813F8D7F7444617816F93FC7488B71C69D96D77C65007EF6A2BA313AE0739302395F3D9EAB0244E372AB96961 + 79: 2B92E0D915BC7D56215651BC9F769544C55E2A27080EE726AB14FAC0A43AC51CD378EEA356DFA70EEC3C9146E08E98358C61FFFA3D477CCAC35FD6724A44C23C + 80: 2CED9E743D84F8EC5664A99C6DE2238464E61129B3C856A7FD2CE08B185F4D447A829F287870AC5428114A7234E41A78801C19EA5C6246FEFF961DC6A9B55835 + 81: 4462303D052C70DE76296234B72BFF1AF173E7B63D1CC0E26C518D103BF3BA78D9AF4BA88013192CBADAD83801B8FC29D0838A144AA3CB721AC859EEABF019C0 + 82: 880FEF79B74C109F030F3FA6FCB82DCA034528CCA68A23ED1EE4133C10B3E443434A37C436F079F3F3A922A8547549A39854120723791519DBC166936C239AA3 + 83: 12DE996C9DCE152C83BE6C0E69C66633FC4244B412066A5FE7CEAE27BD4A109FEC95332C60E87DF08A1C714D9D2ECF28A8A81F1CDF8BB3CD2CEF71011BF5A5DC + 84: 748405D18FC05F0AF7F61E0CCDDEFD8055D86826038C77F2AB230F7D97C89D0EF09CE82C4352A7491729C9FD704B279449D0DD7D86CD2FA52EB3B5A582DC2057 + 85: 746653CDC44B4C86B29DE5B28254BE9198C0271249F0690615B05F23AC0456DD66CDDD13D2F22924DF530C78FDFD3699E38E29A550E2739A803FD1FFBEB29E59 + 86: CED0B3E4011A6DA0415C51E37996EBBC5041861FD1584E3D948E1D4DBD7F8673EF93910A10797490DD5C62245EE7EC03D7CE8B8C38FAE21EFAC1AE6056AED143 + 87: FD4BE7DCAC6984196FABA1D88D0FFA9F33CAA29FBAB3E38CD3DDA7FBD94866C944F91B405B3EC613044E4AF11BE7187B15D5AFB4067C54FA09215C3BAC4FF080 + 88: 46836D5A579D5158B9F49D6EBE9A43C9F4A55C768869C3D542BB615FDBAEC8DD34FFCC40288567F8C5E9363852EFF44FEF0EFC0904BE178D3F78EA1B61B9E98A + 89: C05B8745D68BB9647E411E5AA1F924C2C9B96E7DDE71D190A3B8709ACC2856ABFF3C2DBD7093B25F81C6B9883D377E721968632FA4D566F7F72E1109BDEF2D74 + 90: 647A0E15CC4BB5EB3333919CC828D68C5352F1FCACE6964F23FCEB46D0D2408AE896D3319B202EC687F3F9E55126C05705FDB909CD8CAC88304A61B69ABCF65C + 91: 2DD1C321E3CFB58C2E883F5DC3D87F01936ABAB3F1F27648B6AE563333E3852BCCBBCBF4822230E8F0A0DFE32AB6D8DE92A2B8B2271E17DEBEEBF00D83046B75 + 92: 38122D8324807E25DC8A74012CA9C0292222604303CE8B66D7329FEA394D85B7BFBE0F656895EBFD26BD60A3B553A6E3E4003276157B31B3A47779E1633D89D9 + 93: 27FFBA5DD09485E141B659E218D2924AB0392163CDE296D4109F3AEFCDB02241CF0952F0A38E2680D5CFA35363391A324E12519B58C04E8ADF0E9C7A8B6E1712 + 94: 69DA55F3BDBB1C7397CB382B7E8075F615794F6F8453313C0933D33656A3BAB07C42FF977850625B11CA302494497B0EF3A51F3D2EC2E4AECD24BBBC661C6513 + 95: EE1270F6FE6223C19AD4814F0549B54C11AE7B43A8F3418B0F7BAC42BB5B093024DD4F3AB0C9AF5FD2025D50D5B8DC3505D8F754F98AC3237344A7C14FA50815 + 96: AD8ED48E056378B1AFCDC0B3D5D3936AC825F96ABE0953E9BB85B00EC16084A4F0BF12A2B0B73F0A29ECB9841A1DC7F003456016203E891ABA1BEE13FFD19BF0 + 97: F6EB6972CB5FB156FA20A93D8695AE1D9DA8BBDECCADBA81123E7ECBE917596B51E4A6CF9E1458D882B76B33AEA8F3286CC7CA1085F09EB3DB9B9263095339A5 + 98: 40C54D468FE760A7094726B9EF12A98A1F0FE5E7112137ECFB3A88DB04B0758EC581603EFDE3610B1D76AA879EC31933CB6AAFA2DFC559C59BA31425B091FFB1 + 99: DD0324C4DCFF798F024A32A13063A05AF673CB5F8F03E08A0D931406C868A86B5071BA711F6DA80D7FD2F7D3CEE1B7DC12EA456A1EBE4CBCB25ABFB27492390E +100: AF216A7122D29D6A7DC7B89C8B41C111E7C9A00781D4A867A1D75110B48A5A9C92A15D1DC2AEABB53B83BCFFC50F44CFDCAE29DC9984C8C84FEBD0189322BE25 +101: 1FD96E1905B024D5FA883B3BF76C00A0235EE6386EABAE4D9602B5C5E5EA81FE3A1DD0D81BFB0F904ABD4DA7FC71EF7A2BBD0DC6A766902021CEB03D2578B204 +102: 31B75B047B1214B915EC56983E284D14C214D567F149EB467A1A324080AA0D80264ED771E2F91104B2642E9A8312C0C001652CF4E55308A870A77ACFA088D7C0 +103: 59B8D11078C8B65C5DF4F39D1C532BDB9C6E8F2EF121B97DC5BBC29CAF76774A7DDCDCE0F3BCCFFD4779E57D9B23102EF596B8B940480079355CDCF7EC52D47C +104: 3F1702458BA7F28460E84A032BA160430126221AB5320AE028387B60AC53DEBC42FD169A23714AAC3009D52BF9F9485C0878C06A98BB42D1568E7D038234AD23 +105: C8DA7ABB93D370CE8BA6F2B58F91ABBF1302F96799544CCABF52D5D1EAC3318AD4EC853EDC99CF86DF9341D6D794B57B68CD1FBC5E37C03AA10297F9828D5D0B +106: E1680FAF315911FB7588AA2F02D5F96A3FB02F60DC3C93117B97E4F00E2CE6862DB06117A6627B14B11B9E4C61BBEEF09134E1684599A370C61721A3B086942B +107: BAEE728FD37CBE1DAB3FD5A922E58111BFBA9BB47E107909FBDEECCB1812DE27D2D87003FC6F9F67977ED592EBFC734470CD1E907858F555F21EAFD6E64F060D +108: 891AFA38F3094E487BADAEBA012F11D3109EF19B858394EECA4C7F0C2E8FFBB3B88A7105C7D73E7252E67BBA518ABB6A312A7B8A11742D31BF53267CF3B09E5B +109: 6E6E3BE3956224A97F813DE55B3594EC5E2F4A43BAB873D902025699AE58FB43DB71DE1DC159E83F7A7EFFC19CA5A03C1EFFD27B026EE9AAAD92D1D58104D3DC +110: 51F2BA331C24541EFEC042CC66398D388348C4FEDC3F77A4DDFDA39752AE2880C68E0465C15B07ABFD93E16BA635AE7CA7D7E144018ADE57607DE8643992F50B +111: A1A111449B198D9B1F538BAD7F3FC1022B3A5B1A5E90A0BC860DE8512746CBC31599E6C834DE3A3235327AF0B51FF57BF7ACF1974A73014D9C3953812EDC7C8D +112: C5FBD731D19D2AE1180F001BE72C2C1AABA1D7B094B3748880E24593B8E117A750E11C1BD867CC2F96DACE8C8B74ABD2D5C4F236BE444E77D30D1916174070B9 +113: 61B2E77DB697DFE5571FFF3ED06BD60C41E1E7B7C08A80DE01CB16526D9A9A52D690DFBE792278A60F6E2B4C57A97C729773F26E258D2393890C985D645F6715 +114: C02CCA2EE8BED9B4AC74438D4E8B39619347922DDA5CAD2BC3EB9E4CFD4FAF7CC7EB9F6B21ECCA2C55CB60D11EC450390EBCFBA18312E49598D2BC52020DA9F4 +115: E528ABD6C315EADE09A981E4861F6148C9DD4F2FCE0EA54CD3E9796F17033A3751FE9A223AA23CDE0E051A10C2BC27C0298BE97CB87C7110667A115B6D30657C +116: 1B0BF23602D272A06BEC3E86FC675E16DFB067B2AB662181315C45733D191137454BA22713B51478B096DC51D3FC7E9730504324655AE8B7BDFC184118933D36 +117: 12D5EBC3016C77ADCD01F1DE3F792C4230DE67C0B50102E03FBF3B6B80BF913CB66C3E72530C644719003DB2FCB15196803812D89761E0B781E8AFED7268A35D +118: A3527C4E62349394274FB15B30BD95FAC27472E1E521514775D2E667A5480C5367DA6EE526AAC8D0D1226C33EDA1358091C93EC6B1B8464739D25AC4795EF175 +119: 43E497279C2CE805903A33B54B746EA92D607F7C4807986C849823B81097A9099B5896AC7CC66DF3A93EDC8A91B6F3971D6C7F5688DAF635737760BD080E27B3 +120: 9636708964C5FF6600510319E07BF3FCFCB1F4058FEC278EFB677964BA1E140C1632505452F802E99BCF09DA3D456DC3868D149A0788A730E49D239CE7415145 +121: D5D17F592D401CB111FA7C34CF5035BC08EF6B2E0D3E64DDAB08430DEEFC8B9C09C20EB4E8F98D8EBCAC6F09AA2C1DBB7C1B3B2EFE792377CA6600F703643700 +122: 0EA053BBE2E72264AE4F54512C621C733120F777D3CF8FCD8A7CC1ABCAECFB9BE93EE821A15D19467D249A27961E474ABFC433B8C7132321198789D5C2A50896 +123: C64291C217E37E754F6F57C1316FCD8A7C2AC2426E86786FFB69797C0645848CAC41DE345FF90B72FCDE918B7CFAEA4D661687E6F737A088E9296EEF4C3B4F31 +124: DEF8A3CD4921127815F4D1650FBF8B3EF16EF724A38045133749B7359FA68BDE3EEBC9CB5190FB6720EE3D24473286FC046DE0646C6C0042EA1968B48FB6BFBD +125: 6F3581DF30AF789E44C7459356E1C248749B4A5A389759DFF37826BD278D293BA2264BB808A71C453E22A2962DD33A9C03338AD060B3783713EBA8CC8B43E2C2 +126: 2681BF910DDFA680B7204037294D00D0FCAEE84A3747F6E302A16704B3B08EFBDA0E57DBB8E61E92348C8D5FC5A59EAB74C77949A74C7740C30412A9FC65BF34 +127: EAB89674FEAA34E27AEBEEFF3C0A4D70070BB872D5E9F186CF1DBBDEE517B6E35724D629FF025A5B07185E911ADA7E3C8ACF830AA0E4F71777BD2D44F504F7F0 +128: 1DFFD5E3ADB71D45D2245939665521AE001A317A03720A45732BA1900CA3B8351FC5C9B4CA513EBA6F80BC7B1D1FDAD4ABD13491CB824D61B08D8C0E1561B3F7 +129: 1D9DA57FBBDAB09AFB3506AB2D223D06109D65C1C8AD197F50138F714BC4C3F2FE5787922639C680ACAD1C651F955990425954CE2CBA0C5CC83F2667D878EB0F +130: 90272B89212C81B9700897F611F13AC1D291C33A437000C1423336B4D962DD39CE23413160F023963E12F4CCF90D2762B31BFC6818EF865E8A7CBF918A94C1DB +131: 325638D30C9F63D7CDBAA689B7AF8D23826BFE8593B361C7042D3293926146C65C2D6092F20DB5068262359860B3E3D502B6034B9EC8E7253A1FBE4B2007B77C +132: A3FEEC20C69CDAF1936795AEB9052DC525A26F5559045FE458D4B24697E260BDAA45BE8C940A06AE39FDC1F9365F32BAD7DE824FE7722A444E469C7BC198B7C1 +133: 3F80B7BFBFC9D45073FDC2ED93F7C19F01E4D49CB912BD2568F248561F9C9ED1B6762270033D9F421C977F8BB8B4A73F9A99D580C0245DD4F64AD35D68C9847E +134: C292EF04844CD7C3E477C2C2FDDEF46FCEF97E5DEA7955FD4F418C7B4114BA0CA2CA230D0F73A585EAAAEA9277D72B83DB74AC5E887439A225C105B0BFB5A38D +135: 9F0DDAB7986DA54E65EF6B536BB4F7BFF468E0F310803DE28D3908492343E4CAA855B8CAC7409E3A8928E63B9C5D1CAEA7A408ED061809DBAE1AB1A67BA1B926 +136: C58867D309CA48AF74B4D7E49ECED514C89FD433F9DD842F9B50FFAA6C7810BEF35348D00D26DCBE28122BA1CE33D4CD00D09BA76F982A598B8F65790368AE59 +137: C8B1D6B4778932BC21EDDBBE4E48F7711D7E97ED5354DCF11BE98E3110510FB007948C288FD2F7AA71B2E41C86330DBBCA2ED472D15B444828C6DF4282815879 +138: F1C0C057C974E4C27E497EEF52A02963D5957EA02C7E1CFE06423048799AAF74475732A7352220A914BF32EBA6A0B6FF28C77D25CC3CA1AFBDA89870F4EB55D7 +139: 092E121F2C7A2621AA36AA9B040EFE4435DD649E3F336BA82788D57B9B164184F5B5BA644DB4076B46FF9F3A6B9F58D775CE94FEB648A372D960471A663B74E1 +140: 406A5382E9A563E60FDE5CC47F52C6DB86CEE271BD3974AC6E274A1B8C5A7EB369A9B7CD312C301F891D4E3A601A80B9CA06303C53CABD5D3B7834DBC5108470 +141: B2D3EFC2390CF7A1093B93C52B76D0DD74BC277F3D67A85F41635F89E923AEBC960B2BDF8A13860CF3083AC3FBA13D4FE5E426F144FC988554E89ED7A0324748 +142: F1F7100636AEEEC8AE93A2CAF1F4852F192E1EC1AF13697765CACE58FB40B9D9AFC3BBE7E52EDCE649F53C1BAF653CA20E75D3E4AD549D05EB33A68DD11E1898 +143: DB604416DFD0A7DC509DBD2C83D5FEDE5E31D641EE6C14390CF599CDC7D841660AC700D3DE4BE35E07006B724B7DD1BAA21EFC3CA6D346B3B858384FF691F913 +144: 87AE00E496649511C3BF947A65805ADB5D237AE8486CBFF01EBE52D5D5062A99DB3434EC22A37DFDB4CBA1A59AF1FA5825EE3DB2A8524BDEAE07F3264989B85A +145: F442BB697D498F2026FA2A5FFFF9AC5ACA0052F6D200E10805104D91BDFC71A3764CE0277009229B9E7C945222BD7C9085163987E4CED02ACC7420A96B0F9587 +146: 1061588877909CAABFA37D4915EEBD6E517B8D3EFD5660F872019050B3C1465F11FC9B44E72610219F3F5F21772933F101D9D58B5C5F79FD7457F95749BF11D5 +147: FBB4C9BD6821A04CF154DCC7A7507A2C655739F3636B69E8183418E2C33D951DE6BFDF2C3CA603694C44DE44057665EA4835281A2773CB8A84965BE02DF1F3E2 +148: 08D54B05F901FE95EA5B56BA19DF9120C66AD004F98BF8FCBDA9DA0874E64978EFC34877B8224A024DE12D7B926B5D83068E8A704EEF0F738A5061E5F8462F54 +149: B79F53A5117503B5A0316F801B8D448079F38CB90CC39BAFD4DFE169E3C931D622AF7E26835C9AD4DB25C0D6A684E7DAC4B88B475663E05601A99EE9FC8922EC +150: 2209CF6BA43F61D7E579651EBBA0890686A9CDC1E045255494DB0BC732C9512ACBF72158D5738FF63B500AADCCBA000D25A521D41AB4EE6D92D38E8077B79C07 +151: 8236F7CFFA68B49BE5C38A7A1BB67B745430D1511A08EF347383C32AAE1EF4AB2E7F63A20C9D8E5CF2198B32B7BC79B470D36BDF12E7263D669FA4AB8605B75F +152: 228BEFE5788090066D493CF87F75C666BC3C75E0B7BC63E80D38340CF9176251C6E185992B244D4A5B1CECFA42128DAE6EC3ED535AFF039769E364048C442DCF +153: 59171D498BF80731E2E35D0A32DA356419E69B8BAA5B1195D690CD8A5B11542087A007D8DE3FD000BFB03A0408C08E92A0C7712924373FD67A65218E4A4E0F68 +154: 4F94A8F6A136E49069C88DFDEA9361B34D68FFC25724F836CCB021BDB74E0AEE9DDFE80B938A5C12B01F0F1CC49C500FE7709C2090F809D9E0256FC93D93122F +155: DE5E17A668F75866262BBB2089C9DD86775100C77974161DF46BE02A9578855E7C81C77263105C473FD1A2D55483063970C0F643CB25AA4B4AB45A40888F61FB +156: 3314001C825DFD2CD1CE08C746F0BE5C451027F0FAA401431AC84FAEA51553EFD9E0646FB7E9B94CBC672DC98FE9870467C176AA648EC72BF61334B13E479E4E +157: 3EE80B1422E3572B46F7CE5841998BD2B6DF3B591FB5E46851B4D54BF572A17DB5963A04EC6AB98BA07C943475AC088B4D201AFD684F30F45C8037400A7C9510 +158: 3743FE18BD6AEF36887EAB7BEBCE36D5D3B69DFC306B58B1E8C6241E81A9D38425BA991A29C3B07D4F4B9C5CC762B2563C9E5A05B199CEA5833D9FA0062D161A +159: 7F9F71B086CC6D6B63052767CCD6D0349C076289F63483241CE105076B7549B3187897D45D7B5FB2147E54F056530347A1F9265E6F37953B5941272A29E2FAC6 +160: E09CBBFD3DDBB24755CBE8E51C8BFF1BFF36E571EE72E6C99DDA6D507AFE3C562D437E8612B50859AD5CD608424DBE625E0162E6CB7B838F20E7B2F93F40ED91 +161: 2E2F91BD5FEB5C79E98ED97C513E17D2D97B02A844780A0190264773C3040A2CF07FCB0E6424B7A0E88C221BA3824C1906FC1647AB40DC13E2D0CC507CBB6BCE +162: 8D4E87F66B3418105CD5583A92A2D2EBE8824E1F9150CB872FD3DA9C93D382C08065C818E1AF9B25875B142E70676D9A525D901EA2142E42D813A221D21EAEF5 +163: 0518E420BB5680B74367F8CFCF7DD32F3AAE009A0067FEC22456CEAD0832BDC2A60D8AA7B0A2FDCB9072C0F1171772BB665C0B28CD184609F63AD53F89597F9C +164: 247197FBCBEE77B8EAF6358F71A49D784CB43FB44D99910B0599E69B29E31C4019E830F322D5A7117A996BDB4D91E5CF323DB354E902E4DAEE8057B3F78ED5B7 +165: 35A7D806AF0C8167D1505B25EDB565E931864C453BF60AD7B6695035D7584E7714E21F377B35A5F3A69878835617B951977C209F5F3C5967B7DD9BEAA75A7CAB +166: CA9B60EA8DA2D0BBF46742E31AE882F5355688B071883F690AE775C4D949DED8077170F26E89A18CFC251662EA8D1FF43F5A5F28E3FB41ADD741AD2E28341A79 +167: A861DC64C745B0F5D3EFB2773C51981A836024BC420B1FCC564E03006163B491126AD8633FADB6DFCB25C2EF92FD82823FE2C7F1161A78C7766B5E21F96BACB8 +168: 1EE6CA0866F227B27678326FEDA4CBF59934AB0EA2E874E9EA233AA5C67141A05C1B4C950044BB6C9B9D146520C2E3779AE44187BE0DC1CC41FA7F72500B249E +169: DA1032057A25DA7EF987A2D7CF28B927D3DBD956979679F5A6BF4EA20FE1080BD8AF2DC8B1C7E236E7601BD82CFD64DFCA7D03A03087475ADD57EADFFEC2CA85 +170: 22E41325474C7C7EE980314D7738947E9CE3A970B2D28BCD69D545D5E795ED50A5A1839021645D000CD4779E181A65974171C15B9B08B349205B87C150688839 +171: 5FC5AD1B8B7622C4D17CCE23679FC7E0CCEBA00C1FD7178245206F866A6BB198F26A05A3D429E2C508DAAC6D0F698FAE6C0DE7FF971EACEEE84813110672F3AB +172: 2264F674AFC9743A46180CE4E4AA6A2BB33D6BF2F62AA14648179400806D718DEE8FE57DA48D88DF5D57B42087BB2FA62F833BFF87B6678606C6336CBCF34B3F +173: 65E9D1187801C74FC23C4F19698F6B93405C681B93A80D23D427D9F2CBFE63F7E2959B2AAD6CD7EF6E987A5FFD585E1BE8E314A1D502FAE80215C5331F8FFC2B +174: E0436B17C2BB096B08698F4CB448287D69322C34814776E0B1B21486A2D5B6906889A5B198FDDF699AB285BDF58783DE7913075F86ADA977DD35FD09AF336E21 +175: 857BE6485722B4BE445B72C7A15A1D0BEE6C7FB2AD541C2B4F0035DFA1EEAA10D4F0BA5A124F985DEFA53D0A0554BB258B2832BC2CB5B7787D812E96A55A93DC +176: 7B2298654B95CD00307D8D983A0079CCCFD89E5788180CAF352B6C965B9BB5153C9DE25C4A0CBB5E578859660696C887280EA378A2E02B7C7F9E6CC635509EBD +177: C7ADECC928EF065C263A97A273CE8CB30485BFC035F2FC02C78AE2AC6B7F7ED20E93897C0994CAB8D584EEF9DD475AA1613159A0C862FF179C67120F6B4C72C7 +178: 041A03CCE6696653ED5F367749AE1AF3C2654E8A9C0E70E467261E60023876C7271CAE545D114C32D38DA75389525CF0CF1FC0FA9A481ECF43FA0B1F61B868F7 +179: E652E4A88EC1A9C4678F8CFDBFB1D758774600255165E2B4DC15F61C18B9ADE14C5ACE7E8AE72D3062B7F1787583C55B14B347F642344E71D6E00FD6F4C56808 +180: 903675FD8C70BEBE9FD0DADAB17A638A2DD8089AE63114E36D28F4C75D951D75B0BCAB5247803551862720713AB45A932DBE141E48E9BF3ED9E76201577DDD43 +181: 6E61016D474D2AC2984E4EAD44ED82B7129B0B7FF0B9AAF5F45CA68B0529A736B846626CEBCAB9E7CE374D744E7A09C51BBBC746D989806F1A00703A002542FA +182: 20085D4717A204E896F10C5F7E1FD429C9AF848FFF608A2C46D3738EE4FFB944381880A7A455FEC6A1A21754D9ECCF3F1390EA22EC17FCFECE2B86E361784045 +183: 37216CA069259BA3244DE3933A3AD5F35712F0AB7B9C81D64000F0B91DD4232B53748B704E7ED0DD682A77D84BAC1B943D2FF7A3DBF5FE33DF455DDB10D11632 +184: 1F2467A57006D96FDC75A8BDAF98907AE72AD330C0418B06513C33D86DDB800AB6A51738DBFDF1C44676038C094EB5F309B5B590EAAADA4DB09FE7590FF04888 +185: C45893F92AC3E3AA3BC86A9ED659797A7C7DB949A66552ABD046DA2AA7DA9E52FF8BA2673CB44B2CB0481D599EC70020B6D5079296F2C19DB162DC8CCD64BAFD +186: 9919574ADE9B8640BB0EF45F98D1DB6FB7242C433D86CF6D4BD67AD14FF15D74A13F796429E312BAC581552E6597BAD2792F31B2488ED300C6118891ADEE9FB1 +187: 034A92D00A172A5F0CE717FC38AB8D68019F500493899401B563845EB604ABE0907749AA830F91B53AA7C89DFFF86664F8B123AFF4721D790A58CC22F36A560C +188: 54714E69859C60B07C7FE34859C855A37A82204D723F1A695F78D7765CE906D109FA6144EBA9E7E7A7D8343A99495E72D160DD468BEFB794D97659B8E2D8F1CE +189: D6CA476F7E68095DFCEF4338BD6466FCA90DF78A17DE9E29111D4645B0DAA0C6E98F156C0EBF9134BC28EF9E0EA67E6D839027DD5CB084E9EBA899DD3413E222 +190: 86EB8C026D6BF090636F01F623CD98B960D08E521E44697F364BC1AE1655B9AD6FC3EA38C929AC9A244D18E697342594F3E7DFE605954579AE4042CA69E65AC3 +191: 1F63EE615E9B809E3661C77B5029C78A92DC4BE3CC4DFD8BBE78DC7B7D990BC717238004969A8B854CBA04B4D9B30AA1A1964264C47F23D9BCDF45C74FFFD918 +192: 0351F475C711D068BE7B0395D65343B5E249FEAA3C3F3B6B87100C50306EF0340F60EF36233F0E6287057EF7BE8634BFC4D46B49E4A8F2CC4839F42F486A16FB +193: 16645F9C0ABBDA602B7436DE3B1C55AAFD1E844057D51EF80A96CBC2FAFF6E3B2706B45069C90A52D779E101793EAF4C9AE85CAD0A5A394164F0BF34C189A2A0 +194: 821E46199F4FEBD9C118D49B1CE9FFE953113EB6E4E33DA9E39C676399A0B3F792C2990A9F75D729E58EF750857C07336526631CBAA5EE0643699C8E7B7EEA13 +195: 64CB83ABF2BB0A94451F2B9C3EDD76E4A15F9D1F9EE32C0607F5E0951084377E484A8259B3C64428293396F78E6674CC3C027CED1BE12F5671D328D131740770 +196: CCC1A68114DF54BF467EC49CB15CE381EBA7E6FF06A93EFC88F442F8A35827D5DC6494A4F39E8423167CC1C3269A3EE6AE68825FE3E2E40EAFB75C8D878FF88B +197: 94D38693F1B1A8F1013544419C5B3BA0CD79B72478A91CF3AD325E4C3CDCE092AB667572233A4F8DFF132401968BC74C553AEEE96D530CA4E5F6D427F9D2C422 +198: EB080E256FA9A5D51C3DF577509B877563958704C0F1DB645F75CE24005D3B12503BDC26FD3A66E8F6882D3491428A4932EED6F5F58532FEAF521BA5FE05B70C +199: 9A43D7D0C42D7B5409963339C9D9805BA59ED8A63DB144165A3C759EB9F5D756E6288308DD2FE460CC50DE26E1A1C1747AA165FE6C8A1FD5B0F7CB1373E28CAC +200: 986058E9895E2C2AB8F9E8CBDF801DB12A44842A56A91D5A4E87B1FC98B293722C4664142E42C3C551FF898646268CD92B84ED230B8C94BED7798D4F27CD7465 +201: 9FCCC4EEF7571A2BEEE06981856228CEDAF3BD412E777F4AE8524B81C373FDBC210795C1E788EE7081BA42EC3FAFACCF2F386A9096AC719E6565B4E384E390E2 +202: E4E8BF0BF40249236FB88C442E6668E3067ED6001189053A3A81EB755798911258E25CACF7282811DD5E5147811844C4B5BF52FC24A6862BCAF9407F2E38EF5D +203: 317ECED703044C1BCE944DDA7114DD1E36244DF6A533790FAADBD0B8DDF1AC0D198B593F0479A038198F4B94AA6ED294168FE0EE800C02E769EE78ED45249945 +204: F5FA1EDDE359173067E463107FCDF00EF227CBBA0EC5EA02EBBABE2C79B12E793B98FD3A90A72BC26240D994F53DED65FE22C6FE87EAFD01B8478D1E8569A882 +205: 6323E2A8E380CE86433D5B8FCC5E02FABA4ED7F9CE5BD194F7CBFA36F65844B61A7BDF8F131CB4B28C56ACFDB99CD84830557C571FD369650B4608376BBE4FDC +206: DC6BDB69D1C6111E280F993635BB59CD6E7B189166DE593B71E194C5F218D67B00EBE0D028E944976D6538DE410C4D86A2B6F272BB94FFA590208C644F99240F +207: 2428590D2043634FB10268435EA90ABD082D45317D2C54D065529F15E180438AB18FE4CCC9129584804EB04EA1CFF646FA881878520BC01AFF392B6D7D9C0369 +208: 1A29341BEF679E5351911809DA190BAB8E665A9375BC2D477742176A70A6BE8ACE4A35645BF8DB97AB9BBAF1F0313004AF8B4CF10ADB26AC0198AB1D45D05C46 +209: 0EF4FCF3B2010921C58056B2BA367B4C09F5325E6AE9AD732AB277281D4BA797A847B1C6A74D81523DEA163AB0E556FB5102C14E8CD94AFBAC0AB0A921BF1A25 +210: 73C65AF2A53E8860BEE63AF0BD8A457B0AC8D3C5D243FBB1BC3D67624727CC175F3CA133B26342C3401D75DCDDDAD9A692D9A2B1264E90CFFD4BB9E6E775DE15 +211: 18D3DE049396E2EA541E15C31C0EF0E0BD90CCC6CA35663856B94F6F18160D616667C55F3ADC1B33E749F60BE50514A4F3BE48ABE2E18FCA10F85ED0266972D5 +212: 34DED45ED26FE224E0C5A66A193C11A2CC0786E61D421034B3BB16175019C95453F20BDE865DEEAC5C2BB5C86544641482B51C4E61D9DDACC238D050CFC35776 +213: 025D211B55974BAF086B139D8FA1AEA75B627CE1AB894D52F8769874557BE5944D27FD4BA3606266BC7F50D1734436C53D4555A1D2DE0DD2AC51D7F2FA373867 +214: 08CD521B1F13440D57001F30BDA0029FD8AA17FF26AFECEFA2CB7EE1812FC79A694ACD0BDA98184154B72FB7CE305FF4897F466CBB3972B4863FC88B3DA52C28 +215: BA3BF464071BDF124034CD122451D3374AACFBBC916C858B93E191006235F4D741564BA1DE70372269C122D360121DD3D427853BA76C6B450BB46F4156EA7524 +216: CB0B3250639B4ED947BE0C83EEF67D370DE76AB901F607F68FBF1BF8ADA15984DDA7BECAA4D7FDD55FBFE479EEE3F5ECC9CDA7BAEDC9DB7D35DC227411DCF20E +217: 8AFA4024BD96BD50323AFDCF92A7F3E7BFB4C927108CF81C01FD378F61C55D850020DBEB88C6528B8FC141C37EA4852481C14902878AFDE51A7F1EA1612D0324 +218: 27057269EEB73333A1A8059D6C9D6FD5AC89EC26500F6F9838CACEC20E93F1713CF5569E820BD80969547D77E56AB0CBF57F03182EF45AC8BDDE114470C6DDEA +219: C79C3D4A4608C7CB4A3D0C14B28CBB96364F44DD8651F36D908AE502E547AD7AD5DFC10DA26CA26C6D9E51CD40F6D7F1BEA0A03358967D867A97333DA8ADF3AF +220: 9DC3B1EF11D85FF8A57330FDF91D5B5AB142FB89A72D880DAE476E020755C2F3B4CA58C9ED36239E8807C059BD66F826EC517B7A44187E7216E48B683B567076 +221: D11A97FB7B967E90C2D39EF42EBE49327CD58EA6977C84275B01698E322DD97024A40FC3EEDD96207310708F737E81B79659A6C7202E96BE7AA34D18D4026F63 +222: C9BD62C0FCE47736ADCD9275B46845E4ECA23B73678693FEB8E21909EB8405D4B057AF2AFFD7E667E047A07E6ACCADC2A58D7360C17689769DB009F0A7795560 +223: 7FAFE6ABE7CB8C109B18A14BC4FC2E4FFEADD55A43AE7DFC58D89B9CCEBB4467FE4CC163FF6EB16C8C71B8EFF12E7891D11D3DA2C6DFA8152DEC52B232267B6B +224: AEC37B2A1157708142BDACFE77E5204174F539D86A12730BBEF6386FCA098AFF2A5C31EA1AB21D3B4537531DDEB27CA9DAEA22F5CC8C9956B2F2595F53BB931C +225: 6B005CC923D9AFF56334CFC7A5E3ECD70E97C4247EB372A3180E7DC5BEBE676E72E2FDFACB74277B70E15D871819626F46661285DB04B3F825C49EEF42391B5E +226: 509B5C993CDF61F8F507A84BBD7D6D7AB090970927400043D39E5F47DC23AC289F5BBF9D3246EDB174D9C5D72BA7A066DC13171EC15FF9508911464F8730D395 +227: 00A05302C3A60E58C4C52847F47379212A918060931A72BC660D88E7BF5599DF6C38DE92452B4823B4725BA3EEE866235CCF4D5903E91714CAA230C6D6EEBE45 +228: C4FA5EFAA31CA205A732FCD5DEBED53C09A4F30C5BD9ADF27F8C1DCD4B2730925BB6AF176E2E680B2BE325F7DDEFBC9EE6C1CBC4F0426ADCB5CBF18D1437EE6C +229: D125006B8107FA63C375A79AAA0EBE82017372B7CC65C3157CE078DDBDAEE8C569BB84FD8490F2D66D15FE73C6881245761AB2B1D4F056637ECA70641745CDA4 +230: 01C7D098DCE4E40A69DE14682587FF2A40BAF9833BDCC6413AB54DB0E64262F290D584CD5B21C6558682C50E1E27BF53A18A16D72ABDE878C3522156C9F04DE3 +231: E863DA51CAE09500F589BE05CAAD5788587E2017907444D76F547D6F30632AC658EEB8585733BBB815D2E19EA046369ED3B81AA773FBFFAC316162389E015A71 +232: FD8232F7B79BDF9CC52FF0D5DE1C565E9D659BF19769096895D182A88028C1CDB7387DD240128A7ECFD2708EBA7E9E3C676D6E2A036E1B993940F5CCDF1A736A +233: 3BF8572CDC7B825CE7F3222A3DB87F1C52FBD1A8229B957ACFEF2047C560567483C479603A3C0B0F1B2DD265BEC257D1A32C651508D7A4DF501BC015657DCAC0 +234: 23FC530B031136A17B8B2FCB55046DE7271312EE3E77851FBDB05F78A294815CB2169079168E07647A2BD5D05C1BC2B1EF1B64B929DAA1F9CE723D448C936FEC +235: 83D10057C7FB494FAAD289B4FE5F093DB2A0C7D79A298173DA735CD5063232BF9E5327A7B4AA795C99F323045790B554476F37EB9D04FE3DF40C047E4113A720 +236: 0AA201EDF4124F421D4515554A1A642E3B9D18C70E09E83A886D6F0CAB0750D9BA1FFEB9C587F3ACAB0D8B9C1D83D789102F0E2A6CFF885C50F485929DF4602D +237: B85CC52981751513B917F58305AFFDDC7D901CB3BB1D1BF5DAB058DEC9B8CDCD2DAE543D73EC6AE0889C9D785F9178D207059D994E1C80706EB28AE65AAA100C +238: 068FED72E55444AE108EEFBDD59A96DA4AEA3D81A6642742C38BBD4EAAEDA6EE21FB8702C2F95152F1F997A5F40F06C54619481F2EC343AD33400913D6FDB4FB +239: CB4C7FD522756D5781AD3A4F590A1D862906B960E7720136CB3FB36B563CAA1EA5689134291FA79C80CCC2B4092B41DF32EBDCB36DBE79DB483440228C1622A8 +240: 6C48466C9F6C07E4AB762C696B7EEB35CFE236FCA73683E5FAB873AC3489B4D2EB3D7AFCCE7E8165DBBF37ADED3B5B0C889C0B7E0F1790A8330D8677429D91A5 +241: 4F663484EFCA758D670147758A5D4D9E5933FE22C0A1DC01F954738FF8310A6515B3EC42094449075ED678C55EE001A4FB91B1081DFAE6AB83860B7B4CC7B4AB +242: 81A70404857420638D72672A2DF5A49D52B9F9F38B385D8C5129D6A2B82A682CFEAFE6509266E4B00F6B6A07341C2F64E4D4F2152583ED143E3DCFB14C1C216F +243: 31F655A1334E1A45584F12A22E03B09E3C69ED0E1D0FD573AD0D56F9C86862299E333ABE78590E97EEAA5C2FB14DC9F34FEF6DDAF6E7A9BFBF68CA6631195CE5 +244: B62C5102F97E5C4D7554790A4CF53A58D3EF44C83142D6E009BD1F6FC8F3A19AA1B89DA8DD9BD1310827A5BF662BE7CAC750C48E6ED91313E940D7D9E5EB9C22 +245: 380023C0BAC4C9524FF6778BE80CDF195E36FCF460E8CF1BF04E5C2FE08E38C35F183FBCDC3726FF26423F351C507279F6258F2319EA1403B6C8A3DCB384AC7F +246: 473FC167C7C4BC40B17DA039EE09FF3DE884879557E40C52C1981AC419CE021A090BBAE014822D05714077008988D74FF151C927AA43E88CD63FF2CCD2012AF4 +247: 006086E61959B1D66C72E754427EAD5E1D6C02D8409F5C32B2F5AE448F54682B504A1ABC0346CCF39BF66A8C7B69081E886B47A7D0B02291462391C95351EE40 +248: 3828B2ED548CFD0B74BB34A1FEAE030E267222198D7E387E7FE3ED503905A25D4C3301A9A47E78372F685B05847062476C507708CDD75580ADB579E4CDC79AA0 +249: C26A7D5BB103EDFEAE2F1201BE58AAC127F69AE378DB04156074E991745D4AA5AAB3BA064407DFDA8D34E573B7EC1F9F37CEF01ADC17FAF393C262A09F2C4736 +250: DCF82307195035A668097514FF1A10E0BF0E802B4945A702D2E17AF6DE1D3D9BA49616DFD16D802054B5219CA37884385E87A713B4EF5C7FCB69661C7F56D5E3 +251: 46049EA0DFA5C49429E15626AF4AF2CE0A9DD2F308B99BA6E6E3F3088250A146870FD0B53228D5A1F1BF9859480E1B7A3D3DA180AEF4D5D41BD2951C4E19426C +252: C0A1FB6C0A65A0D1AF46A5FE86C8A88E8A86F83E36317F435542927C98E74833C887CA3AB5E792CE5E3E21CC6C6AF437349F5A66FAFC4DA79742491C643901F9 +253: DCDD20CD47B7C7D011E9DF7855B08336BD5007C4435208BD3B914D7E503B8399164A155697E68A1B88A0600BDCF847A114D98FB773C81FEC817B92057A6998A9 +254: E2DA07644DAA73B66C1B6FBCDAE7FF28E3B9024F0BC5408FE02C18E3744CF9BD6DD54EA7BFA1F6F3A81C8560FB938FDFF9A38A29853A3A819B58D10213A290EC +255: 15025C9D135861FF5A549DF0BFD6C398FD126613496D4E97627651E68B7B1F80407F187D7978464F0F78BFEEA787600FAAEBBE991EDDB60671CD0CE874F0A744 +256: 1E7B80BC8EDC552C8FEEB2780E111477E5BC70465FAC1A77B29B35980C3F0CE4A036A6C9462036824BD56801E62AF7E9FEBA5C22ED8A5AF877BF7DE117DCAC6D Hash: rmd128 0: CDF26213A150DC3ECB610F18F6B38B46 @@ -5977,268 +1603,6 @@ Hash: rmd160 127: 2BE8E565E24A87171F0700ECAFA3C2942C97023E 128: 7C4D36070C1E1176B2960A1B0DD2319D547CF8EB -Hash: rmd256 - 0: 02BA4C4E5F8ECD1877FC52D64D30E37A2D9774FB1E5D026380AE0168E3C5522D - 1: 1D8ACF74B1E573CD18F674A656CBB42D2775F552C1DB4E53AAD13CA11BD6C7B2 - 2: F3F828573917AC450BADC76346959631AA2F95BBD81A11385E6F5ADA37CDBA72 - 3: 5F7E44B9139D312DF5D1BB993D18C81A4F0D4F3C838CEC281FB2705BB794BCE7 - 4: 85C61A4E83F6729898C7B314D5BAFDFF52A74E56D250F93CD5897D9784BAD6B9 - 5: A991B5F7AEA42AE89AEDE9388B36ADA18197FB01191BB6FD0CC60430CC28D14B - 6: 77A1FF436C780DBAEA30FCD6AD8CC5E885F906BA6C47E063306A4F55318E08F0 - 7: 444B048799BEC6B27F4610F84B39068C07887D08D2BEB86658D697FA6BDCA072 - 8: 590094FA91A424568DA2A36A59AD6278FAB52B1D3A6DB54F15101C6561521C47 - 9: 081CB429EEE586A5343067B92717F6B5A9848C418C9B401639C46C548335A9A9 - 10: 027E1BD9B94E8574EC015D61B89DC1CA4DE0C1F5FA2766FE3AF785106F41487C - 11: 8D04CF38DD51CBACEA243750F8D070354994F7CE7BEA0453B7FF5A775882C6D0 - 12: D216F5F19DF91D8F429F3E37B24870137CA103719ACDC0C8DEC38C84E7E632F5 - 13: 9F9DD490AE25CB5DE2AA5154BAFB77BA2275769ABEA7A67DCEF35D24FE9CCD33 - 14: 9457BD492CF1818BD1ED0E19A21B01C37610F7F8EC64580B5A9957E53ADB1040 - 15: BB66CEC86F7424A681EC72BCEDEC52A2094CEA413ED3EBFCC0B294BDC698668E - 16: C7A379F7F6C0A7E6CDB840659061DF3C16323979FC562D82455B56AEEB6EA300 - 17: 4E602340A2910B6CEE248D90574182184BE342097CF009C9D628197A8EA140C1 - 18: 0D1398C0B19C77C052E867F6E7CF807097466FF2510CDF113DF512DBED51D062 - 19: FD6D66506EAF6FCF8E2099B2933AB66E44508E7801BBCCEFE56FF5AF981AACA1 - 20: 97D651CDF20DB8AEC9C1521FECFC05E4B0F889FA9EB66EF1A871A5AE808C19C9 - 21: 6408DC8B2ADD72618AA428F75263E71B154544F67E760CF60AC55E4DD0D6F2D6 - 22: 911189A4A9AE158CE040BB42D943AE34446146ED6193110E7B1142D164BEAD80 - 23: D3C083CA2E210C4C2724597F32FA7B3DA19CA65C9871D683C4901C671EE1C642 - 24: 9A615D37A2D1371F556381FA0485DF637C22EEA2837F25477BB177D9DE869118 - 25: D910ECFF8056B3E394CBCF0B645B3008AAE92CCD547FA44A519CBF920D403B7F - 26: 1A87170F5A18669EB41E69CAB585FA327B1CAA37300C5CA78F5E39C51627C402 - 27: 4D12DDC6142978448CD7B5381BFD8FDC847AD1E80510C3115BF13BBC6603CAB1 - 28: 22ADE8ECB7F3CB38A902FEAEF0BEC86842D87AB8239A366C992D3A528518B48B - 29: 9F44A733B43134FB6414E974B5CFA51F030AE7E3D88FA87811FCBA68963DE6DD - 30: 220E600CE4D7B7B6E55942503A92A5BB5A465089FF714FC2396844D8F82D9DEE - 31: 66452A4168710FDB3324159BCD216621D68C8226A2C72EF532D99AA32F3510BB - 32: 0961108443DB15095E5B77B907A71152171A1A38DE987F48FB692B63E6F8366A - 33: F03CE07C4A208AEB939C525756898ECF0112931B941DFB9D10DB9CF1677016DD - 34: 4F5237018B528C16E7E3557B5DAB9C0B2CF9ECF2AB5D4AFC7364034096EA1EAD - 35: 31DE8243507EE06F570517D356BBA08144519FF02BC192ED6C5B72BEE636D242 - 36: DFBF28278232BF83ECF5655B3A98A295606B36D50623D87309A9E41F38F07DC8 - 37: A672BF18447A7B38A8070D81E20137D17D1B6F12EF7807EC2B502F26B2FDFD88 - 38: 08BA1B06319AF152118617949424DD56D8A5B25B3CD548762C885BF3F0B5B804 - 39: 4414D6FD839FA2F59B7191CEC9D64C638C4FFA68B5ACE58397BF9F5E03452D1E - 40: DC4689B0403652290006DC4616A2CD910C9D0CCBC9C3FDED752EDDD5E8B30CAC - 41: 65E220527C2E30668BE29950094D32958526FE61282719E755B77A9D0964F62D - 42: 1D9C633609BD66C9D79BD6D15F92A855389F2AC86746521E867D4CEC477FD8D4 - 43: BB1580974F0DFC2C43DD5AC6574476247AFC77C7659619D3ACCBF82F7B02DA67 - 44: 20EA480E09BF0DB5005719FAC0D6418704E94F8A36DC5D035FD0B0F33B1EC31A - 45: 430FE91156DD28552E37F2608CFF0EB966C6320EB402FE4BDE0EC10F280FC9FD - 46: A83A95DAFE6FE47DBD1AE9A730D62D791853A66EDECE3CD3A5D79D5EA2E852CC - 47: 94EC24274FA110FBE2FBF01EE05B6A41F7FDABB284D422DF0AD97B8878544DE8 - 48: 5A311B318E82E776228D5A31306647AE14658499B6B1F678AC68D6AC7A794C79 - 49: EECD9C706520AF15E960CCD22513F985861A7243A7DC93106E968652ACE5E577 - 50: B1841ACE57E67FEEE2E0B6EF269074B367FD65944C9A05F4637C7D44503EF88D - 51: 2D6B88A5FF09116C87CDE17BE3AEAF6A587474089EF1034298DC6BE800320FAF - 52: ADCE72E8A1066B4C73CF42431EE141B611682528A7730ACEDE6503D3FF3AE0A8 - 53: 8A8C37E1747D1BC9EFF92EF59FAA6B734C62EB78C2B3DB43F93CD97F8BE41887 - 54: 816617922335B1E5C12B92954B0463ACE6F5537B2033C9A51F0359A137849689 - 55: A7E0D9BFB62FB1E4A88F127F0664CE655B363DF17910783643A5F790EBA43F1B - 56: F961DBA8C62FA522B19FB6A376D2E2D3071E8C71E899708E4763879A369A1186 - 57: A8E7CD5B63463A2E58382B76D0D3E0188EA0D3D1AAC5965ECA6B2C746D751B59 - 58: 98FAE21943227464F26767A74F725FB35DD81E599D8B34625770A140497F9B27 - 59: 550DADC0C1FAB6C6F1F304BAAF9A43AC3C3E7A713FA5AC413556278DD91196D5 - 60: 1092B070AC7D87C2E373B34C93EC3FC58DAC222A19CE62F5F2EAC8E0F374915F - 61: DA8D53A8D17E1D4EA20EAC427E1F0BC3E3D71ADE1E15D1FE8862F2EB41CE499A - 62: 029247B7BF14EA7816155149753FB10DE170A22A050B91A03C1321827BDA1629 - 63: 0162A083B666069A0FAD1C3336B994D72026E8AB433045523366BCA9CE07325C - 64: F4FFF1BBD2086BBE13A46A8F281CBCC725D882BB783A8B2FBADE2EC969D4343D - 65: 0A8E1887EE60CD0DE01C34BE1B0C3ACB93C2A4BEC05CCF2F8117CA58C5E087C5 - 66: 90739857F831403806F7330808859E0DF94EDB2741ECD0F0171A35C6AD94F4CD - 67: 91C2AAFCAE4A8B23BAE0CE181286441BD1CEC4472DF6A53EC2BD7DDC6FA1B2C0 - 68: BB0BAA63AE67E84CB1F055D412AFFA0E8211046F0D759EAB05A706BD1CC5E604 - 69: FCC28D2003B96A3C07A70FF6B2C0C4D4390E0DB493F6D832069E73844C8FB750 - 70: 9A37D338881200153A65CB5308FB12D3A576C465A37A68173E7624121CFE4D9F - 71: F56AF9784668814B6B4326B013F7BC69A68C63A3998134B227D88EA0434C7D0B - 72: D741060526894DBFD6B79B705CAE79A2A219C934393D0499CCD3FF53B5C11FD2 - 73: 2EA96E5A9F0EB649325922072BE2555DEA2B0044D425777347D0ED1E146CF332 - 74: 7864EE22092803D666BF2458E0E2A1CDA24B60E57341B0816FD66374F2AD16D9 - 75: 50A0D061EAE67B68CA787319D60F7239728331D8644D9365B883B29DEE474E13 - 76: D73F80BBE9587C1E345BB11CF92374753B36471A39F5EFD64AABCDD0DB8222B6 - 77: 1091B151A973BA2C8D34CC05F826721ECE522EAD452569EB65EF9B7BEA530959 - 78: 635E1E849CA811275F2800E224A7702424BF219EFA77A3CCE720136E485C8B81 - 79: 51EE28464F294096221B0E3F4B7B9712A5354C4922737BCF1223DFB596D09549 - 80: 41CD03FB9EEB650CE9FC69DA04577DA1DCB81EBBA33F60A665A49FD1C2C0FD89 - 81: 7FB09C813FC022E082D9A83B4E998DA4934C64F50F0BDCD94A877DA6D4BD0655 - 82: 4CDE469AAC8792070C5C487AB3179C4C15304EF467CE24EDF5AA38DA592A9328 - 83: CA603B9165734CA8447E62D7EB813E0F1B15BCA80EB9F377BC945C20CC80197F - 84: AAE4396316AFAA2AD67468DB5471A6C20082A6162E0B91D28C5A3EFF80C15C78 - 85: 215BF71CF7FC1CC55D625727F8988576692840536D0394DF5636BD5268213919 - 86: D3F6447DC4C7E7873C017BF395327278B91C4A0F2087842921CB91C40B949C42 - 87: 59FEEDF8C57A70CD074EC8CED25059AE7E540C89F777F761A427BE4A34F99664 - 88: A789680F986CB3DAB6ABB403B9697F202AF4346EE70F0C12A7BA5A74EB42DE5D - 89: FD3335E382AA232FE743E0922A2C0A9B3203C2F5A9B2FE1B9AE54F99D9602EE9 - 90: C37B4817A90A2F72F3CFB2B76007304D954C56ABB95A8C8D8446AFD330E5CEC8 - 91: 8CC0EA382E5EBE80CB390C49DA953B8334684D2BA84D80DAF20E33A0C6A566F8 - 92: 25B5D534BA632BBD1B30416163DC1BBB3F2E3B67B823D0E98F1C975A3DAF01BB - 93: 0978AD3D43E754145B69EF750F6F7E824181A3E6383F975D3496EF66FA75F416 - 94: 263BB5B3084B1091A0E645E18AC1308AF7F62BB2B6E653A862598BC6948BDDC3 - 95: 3A930BB5919F12303BF381B59D104E928CAA96B99F8A78803B465A53EC3A3389 - 96: 2723841C4FCCAF40C397D1833FACB5927B96C8AE6C09A699913A29604725E9D6 - 97: 09679C9CDBCB196456D8FE1792CB65F5544E6575EC2B8E073C89C0D8D744B498 - 98: CEC63D082A50A7C81AFB946E87770ABF0E4C38D184F78E1003641ED0815DAA55 - 99: 671A3D948B0BE9BED110B2565E57DC126572AC82AE7DCFB65BF1B51349822E59 -100: C9DB0D4CCE88093A0809F61C6013EE42429461CCFD713CD0C66053F07294B26A -101: 54FD082DE3F67D3C04565644F169615999A2D69CF8DDF1BCBE6D8EC8A41DBD04 -102: A60C2EB5A44D7F0CBBB1120EC9299D130EBD6D635EC7A2C5B37AB15C058BFEB0 -103: 28050EB0E18F339F1B4E9F1F8A5284B4A0B2844D7518AE193CCE4B87A7000B7D -104: BE27C28206567C3ABE4D6F7D852BA0709707F5CA4BA0A3B01D11A051CF5B3615 -105: 120B73D6BC62FC2572269BA7325FD136EE5249CF073195413CE34F2A512A2AB9 -106: 7C5F4EDF9358098AFA928CB67FCB32C01ACB87B59DD522F6418A1E2181C5C97D -107: 90CAB395134B7B03A1202B3547D1D478F3FBE503D844E16566729AE29F11FD1B -108: 50D2C02A061A1A192E3EEB3B0BC24BB6EA7AA9580B2AE060C32989E81BC16FA9 -109: 61A147DBADD4FCDDFA52935E703EF0C6ECA883CC9D1E328CC72C30D375920927 -110: 498FE79B7F5DAA6C8C53A84E502E6B685A20AFF7F455B1D5D0090FBE28C830F9 -111: E625994E6ABECACE3D83E27E2979BCF696C3BDD761A7EAF33754EB9023A7113A -112: 7AB2DB3A9F6448FE0E4F2CF9BB5CE8CDEEF9EE52CB6A471286B6F89EB155C3BB -113: 62C2C2C5F240211DB4841A7500FE05B6DDA262E0DE2C75CDAFC7E95EA29DAF44 -114: 743A3B50D63DA1440A172DF952C23FA0FEC9A9AE208581B1AA6478B8F5D90C11 -115: 471617F452E5FEFEDBB2C86E60772D5BB68725E7317E416F312D9ADB1D5EE842 -116: 7B834E0663064F049AFF80C221221D400FA42C30DBBC2E3044DA31E86B9AE032 -117: 40DD593D41BB4B546D51DF3DDE0FC6CD2B2BD233C88562A05D1912519D7F0E78 -118: 08063E168FDA50E7F4AC535C9637CCAFA048518D41D10887EB0FB0C8AA8F0ED7 -119: 7D0B85895BB085F9E1C28B0BFE63683E57CBE1EE98F6A9F439542940AE91EF82 -120: 1842A9925914E3C2D799DEADF6BAA3A8BF3ED139954FAAE0E399F54F3429E6D4 -121: 254AF4A1815E6FB33D52554988A0E3F534B029155DA84A8E6F58D14B3CD56FEC -122: D4A7E0BE95FB6D084A552217E50812CC0318478CD70F7CB45A48C00A5C9EEEFC -123: D481D7F2543050CEEE34CD048938503463993719586792434F5D12E8EDD92456 -124: EE1D0F8F574EF0131DEA4AA39416FBFF031F461E7FAB8250D5DF8E4091375063 -125: 44232B4083D59327E587BA035F690FE6A8C76AC098E747E2463D0DB446C1E11F -126: FD3A67059C103328CBA0AEDA33FBBBF717AD5B3A328AAA1A76AA1120FC7B85DC -127: 9A2F5D8C138EBB3B420EF4F98A2DF1E8C65488C6AB842023C9B53A7A13D6ABF7 -128: CDBB22E28AE05A82CA0E4AEA774DF5932443CE9A4C76D05B5171FF9FE4092FB1 - -Hash: rmd320 - 0: 22D65D5661536CDC75C1FDF5C6DE7B41B9F27325EBC61E8557177D705A0EC880151C3A32A00899B8 - 1: D15DF650542C206F970C18117BC74E041E89697493726DA37A6F3F0FB3DAD8728D00FB27F0A84D52 - 2: 9571FD2B984A5BC36B4000DC8114AB76C8EEAAB8A091F2AC14A0201AD02D8FD0DA714EF47AB5DD94 - 3: EE9966717FB23EE89758E0B4038840161C7AB7A88D876058712231F4F810B945BBF5B5B9D3B3A1E2 - 4: 849C84A4355CF2F9D64D28B57ED754068A16F9573B3012D982143E916D1607E2EEA28939AB77E37C - 5: 5A94801E82D72AED7E836D10EA1B65448347E9591D4FA217797972F337DDD3067D55A60D56136A18 - 6: 28F83FBF908DE50967A51A4E074C5D80ADD2AFD54DF75653CB6A11FE77E885FF871EE4C854DA201D - 7: CF5842C46723387FC1DCE1A77AD1F7D8A875A3D1BA453820BDDE30930E3151D341E50556D8756853 - 8: 7087CCEA4A4CED84B48E5477C5048833767D55264BF859D8883E1ACCDD60750BD07A21DC8ECCD246 - 9: 7C2ECCDC632D902330B78467008F19C2F16D0FA60B27713A5CBC2688838107874EA68465453B1F16 - 10: 12AD7F5DAA2099A980DD9DBC5970235C25C3D1381EF0A85D79FC0358C5AE9942BB8BE4B0D03C2A90 - 11: DC3477B69D2797AF620A21C8436F42EBC1D79008E2C7DD581588AA9E3D5FAFDAA3384702DA10EE67 - 12: 5FC1E422DD5D5A86883F3402EF706F4195D25861C3133E6F242C765F0DA67FD9ABB423FDAD60AF45 - 13: 3C26026E3E873CF80F3E2962656CA15F7E4E269D7FCDDE6FBF01A447E68D87DF0B22CEBB55F924BF - 14: 5BC3C7E2B201783DEF03CB4063464A299569B0EF84A8FF99A23F305E659856FBFA96078D1B083A3A - 15: 21CBE4305CB6C2EC8F952BF4A46D1C403D21F3CD43C97CC60C799EE4B7A85586AEEFF906A9B0370A - 16: 006B6C4529FBDE25A4F4A3AF5FB78825BA02C6C2E56558A5685F48BDBED9365AE7CCAD528BF8DE31 - 17: 473B8F7641056D324C2C73698E2176B5D8E65E8C58D2F30E2A9F84E8896AC5A65B6292197FF3A938 - 18: 7F058B60F44F9A7F5360557EBE887CC8C3BD1A7395BA08736A8DB6FDA66D4EE84D14466861245AD0 - 19: C2F30D08093FC48571BD09DC6B1A2201760E11A30CC680DB49A34AE081DC036D4E56D364F85ED0FA - 20: 41713664A255F0B7156E679EE476665DE0DC05D52A6E2A14A66FA3DEEE5B36BC6CF4D6D6BE688F1F - 21: 953069C5FA9C7A4E0F7554FA33AFB943774144562EF3E9533E6122BD4FAC02188020F5B2C3049F06 - 22: BD069BA97BF14702CCD6175AFD685D0D5D811EBAE7FBF2D6B0840916E1DE278489165825D784FA29 - 23: D656C4AFF568971D09313C2EE38365986649093CB2F97523BE008677098933880A4C082F365EFC86 - 24: DE1B0B3A42710EAB3FD6111D24D5C425F47E38737D647BB7A6DD01E4D0909FD9D65876DF7B476DF0 - 25: 843F522FB630B5C69295746907E6F62105EF1897F1E833909CFAB1443BC2453D42E332DD0A792EB9 - 26: 22D6C4B5DA1EAE94258FFAA4FF919EDE1B1C78156F79009241A8D4072ECC193A299B228F0EF65CC0 - 27: DCE0CD9F9F86CA9D1768B6D82C46F5CF5A9CA3DD06B9CF423443D6A5B65DD76A20C3565F4D90688E - 28: D63452D7A5D2F4C997C71BC1C3DDD7CF1EA1C2942A67939A14B6012E77D6A44C4754FD104737C32A - 29: 5F7F890560B601ECED41AF54CD070B6BFEFA48483CCFFBA224D467D8420422FB1B732A5A4C30D902 - 30: 520B822D935CA48E80307D17C5C1B63F3074A9732251B8A52158F8BEE8CE8804EA611D3385ECE604 - 31: 746AB0B6625CCCD9F9F2770A7F5AA79DF5C0B00222122C5CE341D51E0341F9F10633A6BA3192CCD5 - 32: 164422906D6B607E562C23DD26A51DC2359A8AC9A97E2B90554417971E0B512659423A6239C72958 - 33: 9E7CDB5A2F9622AA49B04F6246AB486F324D175DF993CA048FDB05AB5EDF02F9F185F110BE2A90EC - 34: ABC057543ACCE8B001B06729D6149B1A74C635FAE0935ECA260DF910570BA94853517DC7E824BF6B - 35: 9A95F9664803DB3A898BC783376C03E96B5178E649CF467A0119CA8B89093566924E58CF3AD8BBC2 - 36: 772B1827AD20991D649688FF4F44FB551B2985F0E3B24DB243856A6389B56741C9C1FF2DDC4A7AC8 - 37: AFF7C444FB955F20EB094DD44AF2E1E0E85D903ADB872CCEA43D975108C3816BF528B7F4E069F5FC - 38: FFB8124321A8296B9CE714DE88AB623D61A284B6053926209FDE0EBB015F6995036A6A2B5D0BEB05 - 39: 2FF330120122CCEBA3D520DE3DCFDB60E514F6361C7C768B6FBE49FFD0D836D2E2793E9EA268FCE5 - 40: 72794B555A99BA139DA8034F6D159A3B3FCCFD65D70335778853AB803432EB28711B3EF8FF6F7978 - 41: 7B7956BC244501F15C1AA6CE66FAB61CFB2A0CE674C5534B964209889ADD73B637DC5D4934F06547 - 42: 595FF7EB667277D6CAE46F87D9903A978EBEC466E03A4A42215A46100964ADAF95546FF9D7A7A6B7 - 43: 653C057A495EFA2895FC74A79C6726132BDB8A5D3842F6768CC9918108CE5A5FB2C5982C90346141 - 44: DD880C0F514B3C5EBEB7DA070804D31C52F5EF47558FDEDE9B416828D5990C12FFC436F0407F52E5 - 45: 8E802DFC8821965F611B2BD3995EBB6D88D758804E785F933082BAB5A217EE21ECF7D0BF25D080A5 - 46: 11E49D104BF0A76A912FE1EB92CE5A87BEEBA1DDB606207C9C11F6749CDA1E378CE4D2B87EA90A6D - 47: 7189DFC591B0F89C5C947F752FF91C4C0BA40E8E1A12EA58E82DCF1C3222DF34D4617D281496C0FE - 48: 96083047284B452EE0C3E68FA169CABFCE4CD6B29D5773FD8ABEF6D3CA8F9B47032AD11F08384EB3 - 49: 27646497C0E50D41474FFE6871B3C5391420B7B753FA97BC606A770343BFB758B927329B1B950136 - 50: 9C74209F16B73DE0F9EFC3E0D29B58E3B97871807AF3FCE5F9954BCF083BE09FAB615368ED48C888 - 51: 0D44E094F2A99854C86BB1008BDFD2BF66B7A608C2FD62AFC2078B638D83F8AEEE4216C05A587B10 - 52: 979725BBC062B011B6751B68F21AB22BB0F8BF1DF10FD6D1E239B55FFA8B1D29EF5C33F193DD846E - 53: 1661FD3D05468A4A2270DF667AFF347EF8F98C38A61B2DFC482563C09FB5E789697E4A5834444971 - 54: 7B67035C8D55CFC6F0A82CE2000EA51AEC95EBC94149AF23B86BE465A0D9256CAE24FC983F60B315 - 55: D5383387F99FEF6732967302F2AFF4B8F694B43235768E151BFDA508D6170133EE44C4D1BF19D1FF - 56: A092A11FB22676778C6720BA1539B3EF72F7E25B1E75AAD307CE3D1A1FBC9962D95D1B6E8BD19148 - 57: D36B21E8609F2EE9067EE719FDE8CEBE8C23C026C133AA1831DF87F3974B6C79CC1318794B5D8360 - 58: A020799E188BE3E788AC671D338F124CBCF1A9E3FC855EB69DC0769E114C6F38DD5602A3AE0E6751 - 59: 7C0A6943329F210EF9DD005D36AC330261B6D5D01ECD0950D195219DE2137B6E67BCDD8EFFF8EF2B - 60: AC849447899C070133FD84BD9FD0755464A0CA543B20C0A8CA6E5B1EBCA0EB2F155F5CEB9B0D37D2 - 61: D692FD2DAA2A162C3EB09AAFF9A1BDBC2A9A37F39D3BD1E53927948EFF0CCF945B89EE6BB40A82E8 - 62: 35C531330A8889051467B9D9892B7A964350EF59B14301905E6C645971253BE3173845CD770559BA - 63: C8E2F8B3B8CD1127152218237982F72F4C930CE663A232231CF7A83D1F833843BE5966AEB40252C4 - 64: 8DA29DE9049DF2855CF8F26594C03275B9A216CCA012A8245818BB63B0EE6E4AB2DC069B393270CF - 65: 389AFAF1F9B4616A4FD9269A9500AB82C3B65D26546A2D6D10DE741351F96761A4337012BC2844C7 - 66: A9589DB6937A5F1F8F5BE81299F57019D06F7754079C8E7DC3E2A45AD265AF5349930282DFDA5DDE - 67: 989CF19EFFA226DC8EEC1E3EDB1A9F0436414D77CA5F4508B98378A9EEAFDFB562B54D24D55796CD - 68: 2F48B7C774572D9E2FD21AA1DF9C575F6BBF68FAB12505FC38D2B5C47289FEAC9F6D595A10024349 - 69: 48C7A6904D11F412517131C718B0D32A6DFCF05308C17802D44847C8B81778FBF67946FF4F551E64 - 70: 4E9962FBBA06B56FE8CA0CAACAA144CE1BBE30B7ABE0917A268C9D86E59042A2A343DFA8624D6757 - 71: 5B573A2AAC688FCFDE4408F647DD4965C402FCC82784C822262D15F69599D94F86DCCF42054A2886 - 72: F0A0F0D04052B3429592823CFFC713137E0833B9E776D9143213200209C214FA4E5F700B2C77889C - 73: 52F471056DD15F895C07186055791D6E688644BE41E8470DEC1F4D1BBE741D08C12BC7DFF0766E7D - 74: D1EFD8F68D3F2954C8935CE0C04F6F428DDD79A39D5B7A86C7900D21D139F20FD9AFA1B2943ABA9D - 75: 76E2F2A2BBE58D7B26E358214C8B244843F7DFC1A2C413F8F06B0ADA18D7F54E3A59F577C742EE18 - 76: 197E2B2BDC7F9DA53AC2256A8A74CD132847A3631084F4D6E95991E83B6091C0384F0AC9345DBB97 - 77: C788B723815260FE8040EADDC011B9458835942D9A9F92FC0C3BC936AE60C8EC77D9B6471DB6184F - 78: 70741225CE46A008A59CC695D9A4835689A446F378AC72611CC0344468C788752E03EEAD7D467337 - 79: 354D7204D60332E3CEBE5EAABD63E850054847F579E6175FA54EA4FC97839266034A161DB9CB0DC9 - 80: D1860BBED9848936E7AF61512FD38FE2DE3BEF4D827E18B1338C0F7EFF526C0004C5C5387C851F8F - 81: C1C866DE0D4AFC09CBBA4045089BB6D3CB914800A7F123089D9DBF29B891DDE99F170A86D2D6CB29 - 82: 751DF91EA356622D934A7E577EEBC076F97B3C82B517C20F5FEADE2679CE41C8F3BC23C659CC3D16 - 83: 2B1BB63A71808AA22C935BF7259DC253AD475239CFD072D9484CDB46541E38C7468E223E465A974C - 84: 0F05A15A2928F2E5C179C0BDC48501ECA8409440D78979A06BF6F5AF345D3D2364A4212CCFF7FA44 - 85: F1B9FB2C7E1597A57E80F7E072BE3ABA785D44EA19E5AA687B8C953C1BF62945454E15138F7E6371 - 86: 4DDDFCAA087E7747462CFE5633DDCBBEA6762F8E5755DD8384C2028070FA73960097B106CF21B12A - 87: 8E2E498EB086D591A8A1F0ED7A8192BDE00F3DF59B1DF842F3D122454F081B02A6673D937EDB5D59 - 88: 9911573F54CF6D10996AC34E5ABFC0E4B198D7B20ECCD07261665B70BD1F26B1142DB089584BFD95 - 89: CA46D0B9EEC92CBB97FFB9C358284CD79CD7C5BB1323804CDA6FE1053724DE0A1E260C9BC2201957 - 90: BB58BCEE9C19A05239237D482A9441C5D3B4F20C73F8C052AC0C86506F17534938E1F5A98E4174EA - 91: 3089F3A1C0CC73E2B31FF5F0168F78275386F9BA794D17F90DAD9055E328EBB1E2CD711F2519FA69 - 92: 6669BD24D20CFD12E8B26CDF567024513F02E6EDD5CC1FBFED6CA2C4C16A364F47B820917A39F8FE - 93: F94A8DBE7246CEEB1495764D4F029D018A1F59370A5107791A729E4C6E0D0EEEC66B96CA8CDF1EEA - 94: 857E4DAFBF430CB3183F9735700C1B7F44CCB76196E269C749AA1F39634A0EFD626F465CB4F8CB24 - 95: 250FB59132DC632527BE41D334FDC6E25C90254405FE46E3FB80C9DACFDCED35AF28FE0E62630B79 - 96: 8001B80CB6C9E446830FAABEA5F8A7CA47554FFC921DE56E7D0C3315CD14BEEF5CF1770F06A5F95F - 97: CAD6EDA223A5779FCE361EFE0666305326327BC3246AE2A7068475D67D4950B39D379F5B6B9251F2 - 98: 07BFC31731F8F076AE65894115F88204CB51C3D79C67F2699B439E2FBF133F2D0977DBEDC10363F0 - 99: 69C2279628C29A7930573D58C3C6E81714F04231316616B58104E1ACD57C038A992039111392108C -100: 558684FE7E011378CE133B7C17231B73F54CDB33D77B93668BB9994BDFEBB92D96AC84CB4CB6EB3E -101: 77FF6744C4FFBE4D4144E732850FE27BE7BB0BCCBE72B970BF38B7AF5D7FE40E0B12C1CB8E5DE42A -102: AB7ADC40BA0F9E02BBC83D933AEAA964FACF93D7AE29AA4923BC7221A8A7613CD3CC688BED4393B0 -103: EB7BE1B8110E23CD725886A7D9B8995158B166600E4440DCECFDE15A0EE426947AFCCF6CB029F1A7 -104: B45A685ABB285D8E29B471E07CFA7674420175843F4D0142D8B9A0E7664AA8B3E3D63896F8270D16 -105: E931F6602A3957C3033D243D7DAE2871F1B92698426836F4D3D06EB246B880F50CA25EE2328A6810 -106: 86DC16B09A768560DD2D985286BCE2AA9D8721397064F5521DA60746E46231AEE50C4FD7B2E6F04B -107: 9B30C031660007BCBDC3ABB3C10D063D90307DDCAE853972DDE47FBB6A4F320F5F1EDD040713C73B -108: 488F5EFC7B0A09965D1689E3456475A0B90B647FDFE38D609384BFF01D46B6C169B75F4DCF74B316 -109: E2FF3FD214B03BE527DA2CDA8F0B67D14D47F6A08FE309690A7F3E705EC26D497EC23BEDE64CA76C -110: 30606CA65C5484567BD569230183A77679B085B438BABA9A59C00888D43249161D836B870486A143 -111: 90278C79CF7129EC87620C6A1E1CEFF81361B9FF7234F1202C3CF9903E3842A09A511E27639BF037 -112: A67689A579055F4BAEC45289F5F7C2A8236196F241A84EF721A2B8FE3F7AABED17A50754A3791813 -113: B1A74D37FC23A5B0CDD60E153D988227AEFD32F2CBDE72BAA40FDB1492BA01947D607D11AADC16B1 -114: 4DF43237C8D10DC4CF90E7987059F4D77637286F8F26FE16B95A004F842FCFBD03BB667F88BE10E0 -115: BD5F268BDE9707B085E73975576BA07A71722B5EDB2CC4F7BC16C75E94CA239497161512E52E6FEA -116: 777B474F4DC1E7E7181363299506DAD103EB625F758AF9602DC5761DE3E5A4CD93D8E245BC59655F -117: E4BE803DE4CBC3CCCB32761C0BF51B4048E8326C6F2610F347AC7D6CEA89273FAF613396341A662C -118: C0F07D8589EB941D78D3B07F270905CCD19A62040C2DD5B5172187D0F6E4B919089667CAC24AD57E -119: 99DA1F25A48709E3051C52CCB417FCEADACB3B2742583E95B0BEC05E651D4F59D8169206B45A0F15 -120: A368B02B9D6ED249290CF6BCB225F6636D4E226B472F07C80B39416AD30FCB84EBD45178B95A2DEC -121: 53BF8DDAECD3022222369ED66C20B1A1C6739556DC4874A0DCE63C2818817E09D9F611031ECC4769 -122: 9EBE33A767738B7DE55A0193FEA6C76C718EA9B3D4FCBADEA37DDE743D052D1C1B2991DD7DB8B57A -123: 38FFAE3C7C07F168887997BA0AC8AAE8FE9F5CB14A87A8FEABC4642FAA5323DF94CF73A962C8AAC5 -124: 13DEBFCAE09B0FF90DA06B49D6330813AA487C606D00D3161C8283CB62A661DADABF2CA5CA4E7230 -125: ABCD79732983370AD0E130D3BE29BF19548F57CB744A4B8D3F2BBE295930DBBC484EA45FA7DC99A0 -126: D2CF766816B1592D91D66FEED7FA9D5FEDD93EC85ECAC455EE0CC1413DCB53B2A6F5D6A7BFBBF26A -127: 78E78895B7E5AFD95D4FCAEB84F89F04FBF83B51FEE8C1F7B342BE0096DC010A1748F60B57839AC6 -128: 05E40364D0466B7C46755EB198F02BFF8F4F1D584AFC27B900654A528454CF692E2792CBAB60CF8D - Hash: whirlpool 0: 19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A73E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3 1: 4D9444C212955963D425A410176FCCFB74161E6839692B4C11FDE2ED6EB559EFE0560C39A7B61D5A8BCABD6817A3135AF80F342A4942CCAAE745ABDDFB6AFED0 @@ -6370,597 +1734,3 @@ Hash: whirlpool 127: 3C9A7F387B7104DF19CF264B0B5821B2E46E44ADC79262546E98FFA113EB3D45799EAC78CCA4643C937FCC3C1D249A212FACB34C63D45EEC81069095D7CDCE7B 128: 803A3B37C89E84FBBEC75BEE3D00DD728FFC4246B5A5E989DC8DC2CD0F7937966AB78C79E1D4648EE6EB40F3D70491CB46B8AB42E155672E2AB8374FCF70DD79 -Hash: tiger - 0: 3293AC630C13F0245F92BBB1766E16167A4E58492DDE73F3 - 1: 5D9ED00A030E638BDB753A6A24FB900E5A63B8E73E6C25B6 - 2: 65B0E1EA36CA17EDE2F055E67EAD67B1C282A11A5BA3A8E0 - 3: AB7FB8D21CE3D8D9BB5F1AF1F2FA0D3C277906160DB8D226 - 4: FE2E9D43F74B199D91B9291D73CCFCA0BEA5F068FBA244FF - 5: 3DF6D672FE9DAAB21523EB04705D8A8B72B78B00AD465D1C - 6: E05724353FE29957C3E8DEBAA21D0C2DD49CCA22191D5AD3 - 7: 4056DDBF82AE74AB56720DEAF079ACA2F076ED046D044DE5 - 8: 801FB9BE1A9AC7337A81345B3845E4E7C13AF1FBADB73723 - 9: 430156547A82492CA859385304748F65F2D4A7E2664AE2B1 - 10: FC435137CD652D720A11EDF47ABE4680BA4AD5BD810C9835 - 11: 20A8143DF47F5715FA0905FE6F9D1D2B5B2D4E26FA98930B - 12: E4A2063019FBC034DEB01E2A95296042319CBC039DA69A91 - 13: B5F0FA570C4CD69A3C68448BE42C865BDF77ED68B93875E7 - 14: 802BE6EA2CE86A0B371F2354944B19CB3231AF7FB4F00FF8 - 15: D7C08863B5E5E3D69B5404A116315A698E128EBAF8636B70 - 16: 5C5288CB0E4E533056BA5293440D9BE6F3C461233BF1ED51 - 17: 88D3A94F3820E4087DA69D8BBE2CF415466063709C450C4D - 18: C07B4B155F9F75805D9D087087FCDD28D08A9D022192447E - 19: EE473E569FF3E092CF8996B31CE665EA7D61520D42E27395 - 20: E13DAE8098139CFCEA755D2060F107E3C7581EDF9F4B3B85 - 21: B48A9C09F26B379AA28FBC750B50CEF69D0D0EE37FF765F7 - 22: 574A01456373014F4179CDA14541E2E3C5A1CDDA9F9D071C - 23: F2E2831E5BB4AF05914C4BA61BB8D600D1EF071C5DF02269 - 24: B7808A5B6258CBE718EDA938978C69D3FFC45A222E9DBF4C - 25: D8E4E076DDE78950D51EAC9F97D2D1916A0910465D45A55C - 26: 4EDECFAAE1DE98B7E056E64CA24003422BBE6F048129B24C - 27: 0DE283B5A4953EAAEC6F3FDE50D7875C8EE57FA79BDC70FC - 28: ECDD4BA1936DB9E6F83E2BD7F39D23927A1A17B2D52A8649 - 29: BE11893460E49659F7DF3FB3BD5E3E9A319F85FD3496E26C - 30: AEC0DA0F2CC0646325CC03319A0E080F68B46B33F81920D6 - 31: 8824FD39984F6A52FFFF19016E27C594921452086373F2EE - 32: 8B6592AFBB02E227AA451B5CFDC821B84245D34B96BF4F13 - 33: 960DF9C349EC6619FF37E3F0F4832E19CC6A4E4D68962651 - 34: F4E2B7AA72BC7D6E0CF6DA1094BEEFAA9C55610327C62900 - 35: 05FD1B80CA4C7C14FE5BF0ACBD0EA3DAE498DC391DCF2277 - 36: C5E95F953898C68355B591507BB714F0E5DAB9989D083900 - 37: B2D4E286CF7EA8AB6ECD650C9E48CA23497EADE55485DB1E - 38: 9D51657E11C54FFDF205DBB435097A2BC6F93C4BE8D6180B - 39: 3C6AE3911356A343AE3113735F07FCFB5E046ACD47B00FBB - 40: 664342CDECC825ED340A7FFE2E57107DD0B5F24C24B2C3F0 - 41: 4EF7FCA13CE684D81DE4F566D2897CEB407FBB3DDE81FD64 - 42: 54689FECED63F297B13CD494B85E686680F4F78DE7EC81D5 - 43: AF434BDBDC7EF90BE03E40A033F16E8A57B41840E1E8AB59 - 44: A32DB678F44905C18968F5D898CA7992EBE2E4CC3318B96C - 45: DEE9D519A12ACFB8A0935A368D6E6C75EEEEE6F2B0D5D191 - 46: CBC74863472D1C9D23C526F4908BD4D4234E00CBCC99A9E9 - 47: 6C228A1D4871E802E035C9BB16C5187354841FB6BE3C69B6 - 48: CAA755C55AA869E633CB3C6D93A561944AC7418154E2B0F0 - 49: A6835F7C0C6CA8F4A45787BAFA77478AE9ADDBEFBC3052D3 - 50: E406755957EC21BA6A64B5D3AAF31749CF98DF92F1B1FFE0 - 51: 0C2D4A44A803DBA99B7A467553C9293B46A538558BD77DD4 - 52: F04F011B09D275A185528CC040EB719649C8471A87B259B3 - 53: 3DA8B57FF52FCAE7C32636EC6C80708189CED8113C5CDE1E - 54: 6C6C88B8E18DF5CB22EDB61A2D3ED74741A708BC46576FB7 - 55: 2D48EE2BF85DE234754BECF3C6F5B0E62988B5BF24AEA5BB - 56: 0D17702DDCA078ED1CC51B95DF29EA1053CE97F69395C613 - 57: 9D8C2AD327DE43D5782D5F20881F4A8C433BA19AFC8C15AD - 58: 227BA419B760D9D10DBB09585EDD475AC2734FD4539F8275 - 59: 2F5220A828EF94E327BD51D4DF5C58609F8A93B9FE01FFF6 - 60: 0EED9F91E1A33A50B8E913DBA0B5E248D263E1FC72C6A449 - 61: 766B707E999FF3C51EE01168513BA0DCEFEAB222DD1F69F6 - 62: 85E6710694E7C36A2340DA6A371C0560450F3D44D35AD98C - 63: D401F9B13D39C24477C0AE6971C705C63C067F29508C29C9 - 64: 212DF89C57155270344ACCB19027B0B26B104FA0FBBE0FE4 - 65: 3BEDE767AA4A7507DBEFF83D1BC33F67EBA9C64945066227 - 66: 79FED1FB9F17C4980108E8605C10D9E176AC8FE4F6A65064 - 67: 48D9B7622AB7F8968ED926255F78E8CE461E4C9162FFE8B7 - 68: 6638C83837297B3F53B0F824C087D9A0B8D9FC6265683B8F - 69: 174421CF6D331FF51924F8946E8244555C9020D38E31B6DB - 70: 03E42AFB5FFF9B9C3794A3DBEC99FA7E3F7305EF07BD29EF - 71: CCAFC68D4B3ED889DC9F28CB9225808A40AA8E0D5CA343FF - 72: E824F93B4022011886EFC54539D4D5D51863ADA329FB4E22 - 73: 7CF0DC01B326687530F42040BA0D0CE93174455E8A990D14 - 74: 7A8E619479F4F5C418EC041806850E6723CA56AFBC3D32CC - 75: 083C5CA90F4B296C42040559C8296149D4EEBAB5EF2CB82D - 76: 3581B7AC32FA8A0986FD14F277FB106E112B92D18CD689BD - 77: 258E822D9CC1ECA8B55D925BA361BA2D9FC27AF181F138B4 - 78: A86C1E88A64515FA281A462D467458231494F16E835DF873 - 79: 76E7F06FE9B8B388DB012F8B4BE2FB343F95913EDDE47A27 - 80: 00278B4E5690E729EC7118B5BF63C9D1EB1268960893CA75 - 81: 8DE70E64A31BA1AF4F5C23CF774CCA32FE952D76C3FDD1B7 - 82: BBEA72C840749BABAF1415FEAC343411B89515B87848A09A - 83: C6C3CCAC1B338DF117A61ECF9A280E9BA709784C72B76771 - 84: AE9813EF4429EAE73EA9FDB5E23D263AF1BB87928CF5F048 - 85: 68647CD7BFFB8E530D28C86685A8D2F657EE4CD64EDD7E66 - 86: AA8C35B0E746AF56435F6C711AD0423966EA459087409713 - 87: AAD5C0D5E980B29BC88985C544717B81F58CDB923A3468E0 - 88: F60929D14781DE44EA607AAFC0D25FA1B6EF3C6AA0F8B3D7 - 89: C48087DC75EC43A54A593F24E1B359BB75C581A65C3170D0 - 90: 11D1372FBDFD9FF514611AB20D31BA62F18856C8D6AE3AD7 - 91: F2A8076B9017EDADEED41F409C9E32EB3BC090EAE89F855D - 92: 702FA47E5BD35E344B5B87C0082106337206CADD3D4D5014 - 93: B9E03FED752A560C3B0365EDF5BFC4DC7EAC5E4BBB93738D - 94: 3C84C52BF51077A5819F56E5A5C1C06209181579393220C7 - 95: F8ECCA28A525594E138B55C06617A063DF74FE3469D98381 - 96: 1081C3BAEEC0ADF4980C2EA6593B0906DCBEDE4805754774 - 97: B5152E39DE0BFE8982D783FC4F0CB7160EB2D69F6F3B3E5B - 98: 6A6B760BFB1965C72AC793F9C02FA21B0F1C34BD2640BB6B - 99: 1E6DCBFA8BA8D96C29101768A6A39433D5AD5A50E0970730 -100: 733222D3A033351FAFD68C5CE8A4D833BA7420D44103CB6B -101: E4CD7DA59B215F1DEAA8FBBA850F2C1A7F4C3D495FE6804A -102: 7BE78C790713545754D4C78A9318ACA4AA058C5C23540131 -103: B71C3809A504BE2F57AE9E25BDCC3921DC665C65289EA55A -104: 2B8CA39977535EB692EFBF0DECDA8971A8604F7FCBAE75DD -105: 3CC48B51E4C5DE4F0C2ABE0BE6EE4B63CC564A87C01943CD -106: 157ACDF7B59FC25966F9783207554364882840E7251ED6C1 -107: DEA1CFAECF18D3611CCD0517131A16DDBC97A12902DD8BAB -108: 2AD2E990BCF6481284DF44B961632687C2E64DFAE2AE16C2 -109: 838F3A3B28A50A12B5707490A66080DCFA0230E583B6EB14 -110: C8B20315121CDFB3A91BC0EDF11886F283CF6C480F498627 -111: 2B0FB04F100BE9AD51B7D64C76651BAB4B7D31D1D9195711 -112: B6495B6256FF464EC409A4098B622E8BDBB1003411854FD7 -113: 1741A789472E20E1CC89869A2477E4F2807C22182EA5B221 -114: 07ADC82CB3F27389A12B6B9C2B268BDDFD1D9478D9EDA0D7 -115: D9BD6760FB819A8A3CEE75303F8208FCA3E138B517DAB934 -116: 9FCF21A9236C2C12861FD20F1FB15A187CD7EE7821F72BE7 -117: 73D165769B34DA6F151464E61115D0E09A66F8D0FA049726 -118: 74580BFA88EEA03C0EAE722F81997E400D9CC25FA0311DFA -119: E3C6A369820E267C938D276A858928040C7C25A826501DC7 -120: C20AD90DB0B8BEE0335D069259991060969EEC9F939E4CA7 -121: F3746F4CD6A19CC137C5FCC8F60A4C0A7F56D97190B7A9C2 -122: 63A3B79EAF3DF35180960465059C0ADEE06D45179A56284F -123: 606AFD833D082628D58672403EE6DB348E6F68D8CD1947F8 -124: 7567EA8E10CBF312F8478B7C51D87B00B6CF3DE82B03DCE7 -125: DBCDC2B9B8589F6C7616B55B059B3B3E38D97A9E6DF1F29A -126: 15D9909F8D69689E7E78A0DB928194A59623E7253AA9D400 -127: DE39589DCC0C654867943801946B9888B347526279CA15BD -128: 34FA7C74EE67C1F92C0BE1CFD4B2F46A14FFB999604925F6 - -Hash: tiger2 - 0: 4441BE75F6018773C206C22745374B924AA8313FEF919F41 - 1: 860F73A57072EFACBBEA35F7DB67D97AA829C53463805093 - 2: FEF05EE7A34522E5D942D172E88CF1BE6733D9B51602C60E - 3: 63A98123AEC6638FE54DAAC7D3B556BB3EA89C3161B8442C - 4: FB74560B78925C828144FB81B3E3D606C93266FC50348A11 - 5: B3A2E70DE9AA8582AC5B1B9129072899C8129E62BFD20FB0 - 6: A423E667BDBB82418E5EEB2E09F642C648A0C4F7876FBE4A - 7: 8AB2E536F8AFFA33A02C179D69CA3945DF1708645BF598C6 - 8: 89D39680FDA7CD9E4AEF74E1DAABB439C61A210179D1E11B - 9: 7BF7D50D476571CCCE71EA422FBBE19C5732B4B4F0218480 - 10: 54EC453EC5E0FD3D02BDA1F62ED5768AC2A6DCA773CDA4E1 - 11: 5D18F5465C03C04A227A30E8047096E387E1E2F49F8689B0 - 12: 5739942F95E90FAC91BD9C20FFB212F8D6857178B8629457 - 13: FDD2E9977E006E9EFDD90E0B1C3148D11011490D5731F51A - 14: DB17D418A70D93F0E3AB066778A6E9FF6B0AEC0C0FCA732B - 15: D31F7BAC1783373D1663761380E000126CE062D29DA33DAD - 16: E2C8CAA79C623D67FE88ABAB5D75E1D6F0B162A5810CADD1 - 17: E6D9E52386BE7C4FDF8CED788330EADA10EBD7B8DF63D74F - 18: 851EA0E80DE6D8464DCE43BCB54BEC652CC6440062E50164 - 19: 84B18F2BD8709B09D28D9409198375985DE9659799DA0C9B - 20: 07400FB79F880FDC130B77C697BE5531EEA5FC521015E350 - 21: F07D605809BF6424EA422F430385315974BDB0F546124E03 - 22: 8E6DEE46C033BF9C066C3072BB77F31962E30FBD1B6D9906 - 23: 341B583590A6278AD0EEB26F024D20DF4306C7B5E3E4791E - 24: 72CF22E8BB2068144AC98E697655373276C47E38DF3A2F19 - 25: 14C5CE59C8DF7A665BB40101FC14DBB21E1373A18FA00427 - 26: 555784C81E245996A5608AB20FC614F47A78B176F9BDC93B - 27: 87B3B8C1E2ECD0FF4CD5CD9FC6B665309CD215F9BDC22361 - 28: ECBE5F713AED003663207FC995E25BECDE3879548811F208 - 29: 11F1E981FED8EFA49F91F052374A69439037EE55CF27B2B9 - 30: 80D3778CC24468A845BA184EDC79947ECFD37790F8E0E679 - 31: 787A1E33A83839790D553EE73C877CA3A371866B616B6EF8 - 32: 9E04376CB4C48AAE1179A13D1B1B7C5C5E3C8699C4096BCA - 33: 4701C1E0CB15AC6CABB7F08039D2567586DA3CCCEEC0B003 - 34: 5FA5C3E177AA2EA0E9E601F6D1FE50BA788910380D77796A - 35: A64800E3357BA972E66F85D19D684C95B1827B82BDB9C8CF - 36: A7AA868C726868B0838714FA2BF6A560ADB5F8C11D1582A6 - 37: EEE83496AFF5ADCB7F3538D223E8B3B4BB5B097052CF0481 - 38: 690B6663CB1E19F272801A1A2250ED2D381983E816D1CEA6 - 39: 4868E429D1C529048442E9B23CB4E4172677BEFF6492EB4B - 40: BC10A971426831EF4F004DA3F09240D819C4F11A7032F5E9 - 41: 9796865C26FB65BA7FE0E2D744868BF26F8EC86FB707CDFB - 42: 5A5A41FB4FCA0EF18E53257B261D0222C4BEABA248C71D02 - 43: 984E1670EBE09A9A1AEE3CD727EA3E8594E43E4AE38EAE99 - 44: EC97A8461C7F1581F877FB0DD3EB405443C4E5BFEB7DE673 - 45: 1C8ED2FC7E214BCF8F9CA064B1DEBAA5552930DB73957B38 - 46: 5CE7109D6B3D6CE0CA50BD27099FA004C3A9CCAD27E9330D - 47: B8C5EA6760A1C651BB1240BCD0E15F46C7A1E75BFDF34AE5 - 48: 9AB70134B530A75EC977692679A462B3F0921821DD8DD49D - 49: 273B2570A25EDBFC0DB586FA761856FEE187D978CF4FD4FE - 50: 6F90507126A74A0D03839921E745813F5951CF4D515FC7FE - 51: 0975E2F9838A8F3F1AD314AEC16243410002A73DA501DCC9 - 52: 718448A178509134C808616CB497D77A07A0181E63801959 - 53: 34EA51CD2AD992073D505F8337B5D076855C7835CD9B2E33 - 54: 8C4E3D194750D0E33F09E97453EB9741DE2401BFEFC42B64 - 55: EF719D2D5CEE1B3E2F9F0DACF510955E04D2518570F040B9 - 56: 13456922151726148317D1B5EDB2B962DF0538B1EBFE4EEB - 57: 992D52B04602A6D4AE1FC0EA9D7CD26863CF3A5D470DE112 - 58: D39DCE52A145C12795F8E83A39B381093F0C9B90505CD28D - 59: E88E13E7BF228D157DFC5D6A0DB85975E10C8B64F83E81D8 - 60: FA43E5E7DA6211245E71D9A747E64097625E54E3423146D9 - 61: 4AFC4D052B7A0F6B6EA88E2904C7C6E2210589124ABCB58B - 62: E976A40DD98F2E3CEBC342082B7142554156F338CB656EF3 - 63: 1475C93BE7D1AB73752AAA750520542082E1CA4CB5350092 - 64: A49A150130A2D9FBAEEDD3C0D2F1170DFE0F5FE842B52828 - 65: FAA63B98298EC10DFD5F873F62DE6ED1F2316ED8BA419C2B - 66: 43BFE83A0D433D6B289465182CC6AACD1104CC5A2EC4C650 - 67: 9786A1524038BE2AC5CB9A2DC1C82362329832928B5FBB5A - 68: 7077B3CD3CEAAF775E09AEAC2AE7351B77C6D37E5C4AF5CB - 69: EB2C1E64D78AC307FFD3DBDC6E1DE6FF6380BAA0147D65E7 - 70: DEC0E1CD151DE382844D7A861E2BB5D68DD33C33509A76F9 - 71: 8C5873FC0DACAB1E35078069031EFB94F3E02155BDFC8F85 - 72: B662A70C5843F44A8888C8B7608A420DCBD3DCFB2471CCD1 - 73: 04004F6AE3830F7BF22A111CC98600B60672A42554DE00C5 - 74: AEC3D8E4DA2063DB0692276C16B2DC51B1D77C83437006EC - 75: 0D5A811F200DFC67B700A17FB6451F4FF3157C144E0E1141 - 76: F5C48EBD4CBF06BC125794C9A96F09A50903D828A6FFCCE8 - 77: CDAD316C9525CE81BC118372E8FAA58390C5BC8D04E22B92 - 78: 6DD4B8CCBE14A41F72A605BC0506908397EAE3ACB937FDD0 - 79: C334F5885E7B84CB453124564B0A4C14B39149009EE0E995 - 80: C18ABB11F4CB63EBC79FFB17BDBCDEAC9987CCFEEF13AD63 - 81: 5AE19250EF20FE72C14B4466EC582662CC3D2B63F5277204 - 82: 957854273172C871583561F5250B9DAE205763E23AED255E - 83: 44821E05C7BE96BA383AA4E7D16FD7CB246E6A53D511FAD3 - 84: F80EA3AEF38924AAE3A6B72663BC6A1DE6AF69E45646AFAB - 85: 310B66D0D148184D2C815272B49EB52EA72C17B0166724BC - 86: B0241C52269D2F0F1C3E9026EADE4F7E9F9DDE4540F6F24F - 87: 1BF01DDE44DE3418FE902534BA4D0A75483522A6DE7E0A23 - 88: 2D4BC6A21A9EB4F82FCE3ABEE79073877D9AE31AE5A9708E - 89: E945E7E613F714ABDAD98649C7E7D285185C65EC092C7A4D - 90: 505C0F0646183CCE37C6BF9648892B2F5AE87A23ED444964 - 91: E76DF21A37AFE6839C59C8E5BFFFEC421F8AABF69CE13889 - 92: B99037CC4752EE2D0DB2D61092CC38FA8FEB16BF401BCBE2 - 93: 6207ADE154AEA631D22DB915930F64F90306EC0AFB6CB6B6 - 94: F9F4864E48581CD2CBC455EC56A3772726AF0A150E6CB622 - 95: 6CC0666A35361103200D15F0B505B858797C51752B80DB1D - 96: 8CB75FFBE6F0D322696D667DA80E693F1259D1A9173ECE38 - 97: A75D4E6E2BAC8DAE4283B38453F0743A2ED77F9887E92A9D - 98: 02C99F35D15FABAC88E54DF3E564A3A2F7DDC0E0D3959949 - 99: A8B17BC390D28705D6FB127D6D0A53F4F3FA4BBF5EEBFD59 -100: 0DB12FA72375D187E89909CAB985D52F2FD89103DCE76DDD -101: 6809BA1A8BB907231B81E28BDCE8F76E9F49452C3CFC6799 -102: F5315D6756C2984BE424FB48E06C3571832ADB1744223B06 -103: 97A128662540AFE0146FA5A215627E84FB4EABB35879B819 -104: E87066D1ECB771EB8A01597810C0F3AF9B7294E1539847EB -105: B0A34B130C01AB564E95A2F1C691D05587D9B0724B3E7BA4 -106: A7EADC328FCE8977F4DB2EC3D5FC58A0AE0F5857F680AA3A -107: 03967F6A6057EA5BB244F2EF2EFA67A661A7357651012410 -108: A6F0EF91F9FD4B037EBD82BF4E231D9006E689A6F57E0BBA -109: 408FF16696B2BA751E58973C221095E3EE2FE8A276F6866E -110: C33AAE6CA5D1C92EE1C35B8B88F5783906F069C3F8E59129 -111: 75ED40AF4E21951F600C393AF6BBD449DC390ECEC5369C93 -112: CAEAF77EA10DD6F0F41AB8BBFBC9899B4C2709F3A23120B7 -113: D780B68A9B62A9CC6B4A14F292ED355269C7C7EA38F6AF1E -114: D064598A39EAC6BC49D38B8BC4C6FCA7B0DB6CEC323B848A -115: DDF0C0F38C3E659470CA33616AE89775457FF7963F6256BA -116: 1F1E9E0090011C55A59D3FDD59991CDC3B02ABE7750E2614 -117: DEE599A44ACAA54D3EB65CB43BA9BC4BFBC1664A46A89DBE -118: 4E3A9D4C7416149D45FB9AE6249F8853069A3BE5FB5E3798 -119: B105BE5405C4BD50B675CAEC9B973A906A822807BBA1FA25 -120: C26609AA6FC7E149E3CD06A4AD95857839E50327EFEB5FBA -121: 85A3A610ADE988C02A55BCDC9F7C908DDFFA7D96169838AF -122: EBB1237CFF524C31E5E7D070507ED5C152F88B1D8E095911 -123: 2569B46F953DB353FC95FD8F7D31F3FDAB0439A5C340C35D -124: 4114507E95B5EB844E1321F988F5ABCC58867D9EBB85929A -125: 54DD5AE1A7D29ACB9F347BC552B16D9A1E2B90BE0936943E -126: CD1A6920DED6BE4522698C1C7BB9046EFEE7D6CDB6A5F89B -127: DE4D8FAABFCE06F91D1C7954491E8E695B7BCB4697A53F8F -128: 8B5641298B698DB1D451575DDB47D89FA0405AA301B0B50C - -Hash: md2 - 0: 8350E5A3E24C153DF2275C9F80692773 - 1: EE8DBAE3BC62BDC94EA63F69C1BC26C9 - 2: 1EAA4F494D81BC570FED4440EF3AC1C3 - 3: 54CDB6D1BF893171E7814DB84DF63A3A - 4: F71A82F8083CD9ABA3D0D651E2577EDA - 5: 2F708334DBD1FE8F71CEE77E54B470F9 - 6: E014DF2DF43498495056E7A437476A34 - 7: 9C410644446400B0F2C1B4697C443E19 - 8: 0944DEC40367AC855117012204018C9F - 9: CE8A6E797AC79D82D2C6D151F740CB33 - 10: 06DB4C310570268754114F747E1F0946 - 11: 9F323D5FC6DA86307BEBC0371A733787 - 12: 3C1C7E741794D3D4022DE17FCE72B283 - 13: 035D71AA96F782A9EB8D431E431672EE - 14: 7ABE4067ED6CA42C79B542829434559C - 15: 5E8D0D6F6F8E07C226AE9DD32609035A - 16: 2B1632FF487D6C98AA3773B9D3FCD2AB - 17: D3D894482F7541BC0948B19842B479D9 - 18: CFE6B872AC98304524CC6A88B6C45881 - 19: 1573DD015C8629DE9664CA0721473888 - 20: ACFE2D3BB3CCAD8AEF6E37D0D8FBD634 - 21: F5F83499AA172BE8344F7F39BA708AAA - 22: 1D1C71FF6321B685D26F7FA620DA6C22 - 23: 4D7E74B6C8321775A34F7EFF38AAE5DF - 24: 351A988C86AC5A10D0AB8E9071795181 - 25: 970F511C12E9CCD526EFF8574CF1467F - 26: 0A68F53A476F7499EF79278A4EE8DAA3 - 27: D458CF9C8CD0ABA23BD9A8C5ABE495CE - 28: C8002E85C3AD9B8B4AFD23378165C54B - 29: 0B4788B157ED150A34D0E6E96BB4789C - 30: B14F4E31DE09281E07248A17939BE5B9 - 31: 803EEB99231526D6A33C8D4FCA537A6F - 32: 51FE5D6637D2F0F09E48CE2A7F5030EA - -Hash: md4 - 0: 31D6CFE0D16AE931B73C59D7E0C089C0 - 1: 47C61A0FA8738BA77308A8A600F88E4B - 2: 9E7A1DDE4D280E7F389018A5CCC3ABF2 - 3: E9A4DB2923FAF634CBB12CC1F8AC5C66 - 4: DF8FA069C6121801FFC539DADD33FCB9 - 5: 4B3511308F7E71BF6462CF18F1184C61 - 6: 075582A51F87682919E733C84C9FD998 - 7: 20DDA7535A464D13E1763BA61BDC12AC - 8: 66AE1E305BED186780BB60328D3CCBC5 - 9: 503E90BF2375627262E58D90177220F8 - 10: AEC6B48C10659E3D6E18A2CDE8F8D3A0 - 11: 45EFB3704B6684B0750E3DEDBB2BCDA9 - 12: 7C9443DBCD858138E32604E0D288F7B8 - 13: 95E5B93F4EA79C082BA1745D3026D70A - 14: C913D5DE0BBD1C2F2838E46363732D97 - 15: ABE357BDC413C82C8BBAA380C39CB5F9 - 16: 22F840370EBB1DDBEA4FA3A40243391E - 17: 0A289FEC69AF967988FA40C47960060B - 18: B63D3ADF13B509C95C088F909A0B356E - 19: 36E8E07E3202E6F4F7E885853C9735C7 - 20: 1D363AFD1208A7B8BD486D51AEBFAEB8 - 21: 75E36A5445AD72CF5BF47301EBED1FDF - 22: DA7979688F48A6606D86C762DF0D8850 - 23: 6ACB325CE624372873CC01A4AA053F8E - 24: 94F9BFD6503DBDC58C163E33504B7EDB - 25: 3702CB296784290FC46B82445BF7EB17 - 26: 903510251E7A00415EA21B6AC268A92D - 27: 6DF08DB9C33C86CFE8DAF5E5BB865ECE - 28: C29C5223D89A6589DE9253AF050D3449 - 29: 16B935ACC3EC6C016CA1BBF727C272B9 - 30: 644C01B157A24584B02A32119A424C01 - 31: 4A3C6C73634759420C419426F7D43E67 - 32: 7BD627A6B82FF3D797FFF130D8956391 - 33: 811A69D6A8AFE3C4FE5B4EFD73804F6E - 34: 721BE5F4BDDED885BFF842868F62F4ED - 35: 76956871B22D5BECAD3E9A459B4A448B - 36: 4F2CF372771A13B4C0C1A589F0EDCF87 - 37: 084AFBAE8D22DF83CC760A61138E560A - 38: E1CA123EBA05CC4899731A593833F372 - 39: 9D9E277FA61993C018C1C61AE09588BC - 40: 85E0D0316F0B76578948810039EDE2BA - 41: 27736345D0F2B0A1A9576D17C47D0202 - 42: DC9F788BE7C97BB5E0D2DD49B9F1D2DC - 43: 27F1A9A0D166C495493877DF06E9C104 - 44: D1ACA7951866F58773CD4AFA3D2F5C2E - 45: 5204BE3729BD7D318EA8127BED82D5CC - 46: 10258B7939D81F5F8E0EA70EE6500B08 - 47: 4E699952169098ED3084DC2EEE7BC488 - 48: DF6ED8D604512088FCEAFB21808BF7D0 - 49: 904D0667C94C9C981D59BE80DEEEE628 - 50: D83483A47B64D74F9DED5278EE462404 - 51: 490EC8799A9DE3BDE8708DAF68E6888E - 52: 443E4D2D5F800C22D818927A29A38490 - 53: 48E82AA772E111FCBE393177F3123963 - 54: B72685D042162D5F30472281278C42F7 - 55: CC8A7F2BD608E3EEECB7F121D13BEA55 - 56: B8E94B6408BBFA6EC9805BF21BC05CBD - 57: 6AEC85410412FF54078A9FC72A55ACE5 - 58: 3E69F792BE88478883E46E867F3C93EB - 59: 3B057FC41BA700F0E46740B8FF391F52 - 60: 3E3C6DF9500BFF8404486A3AEFC6F16D - 61: F5AD65BA970ACBBB8335F9C0B9D7139F - 62: 75D45F8E48406E32ABF94D07FF9B9C84 - 63: 54BA4472FCD03E99CF28F90EED9F2AE0 - 64: 2DE6578F0E7898FA17ACD84B79685D3A - 65: 3A4F2CA37EEBDF6DC99A6155517B74FC - 66: E19DC463C01E1B712B9415202A2B5505 - 67: 61D8AA0838DEAEEADE2F26156AF58761 - 68: BE294AFF81BFEA3159564B8B61844EFE - 69: BB943319320EE7B3A029D7BCD101F92F - 70: 36239791A7BE33AD46F668B51D724481 - 71: 21DCC9A32031428B7B02F68E1450A0F3 - 72: 95C1B0832575E21982B17CCCCAF54556 - 73: 24939E25985A3B5620B19D7889E5E153 - 74: 3029C8B005386705FE7E4CBAA060E987 - 75: E8BD97C5C1A0CC9AD1F1BEB3913B22FF - 76: 808EBCA0B0E6FD1B30E4BA499C05EF9B - 77: 55BD20AB87DE2E536DDE22286D0922D9 - 78: 2B2E45FA5628F29DA06462378D17DD12 - 79: B90F1709241EF59F78666AEBB3D5607C - 80: 37854275343F079BCE1639C84D74AE1C - 81: 444AB5A4F39B765C5D67BB433D4CF0B1 - 82: 7E30CFA6363F9AC96607783710E151B9 - 83: 9D9252DFFB2D5023CFE34873EA6C43AE - 84: 49A70634AFCED27DC2DF2EB079F7A1E6 - 85: 4C976C9EF13716CCB468D82BD8C56FE2 - 86: 4EB382D16DDC18C31E6DBAC6CA83247D - 87: B16112D0FF3C6A8ADB19C13DF742F5D1 - 88: F703DC6100AE23D194E01EAC433CF28B - 89: A6527B1B907218063BF196AA91C73F47 - 90: 61F1A1E947F3F542FCF85AC758BA5D14 - 91: 12ADDEDCE418E9444AE34A40353ED0EB - 92: D1C35142C475D44A52CEB0A8FAEA7AAB - 93: 1F89912C1FC59AAB53C983B035661269 - 94: 2E7E19A4A6635AB5958DDA70B415EB06 - 95: B700B6739C0AF162D246AF07284A1AE8 - 96: E2B95AC9F876A38D33CCBBD7FA92D67E - 97: AEB4849953750A10BB236BAC8D5AB487 - 98: 82D738AF18FD4B26FFF61377EE921E62 - 99: 0E1451640E59CE0461A46934F174E237 -100: AE06EA64074E8C07116563E8E0893BDC -101: 562DCEB678FBFAB24141E591FFD471B1 -102: 7DD6C3C2884E483E8CA572C471B2D812 -103: 2A4C8E4EC2672C1D54A8DA8F32F04783 -104: 2BFED22E8810A4658060B95B0ADB60BC -105: 214D8F2DD099BAB68EC17189BFF8A8EF -106: 98E4EB29797C8E631CD4317AF422FB05 -107: 241A0F826F359A21CA0E6D9154D1E291 -108: A3398C0118A3605E7A7794B8DF7CA152 -109: 5B0A6FC8721F14EB8A03E9A5D87F173B -110: D93ABEC3EBD5672350C3C36F8FB00E53 -111: 659905751D1F614A78ECBB56D4398D06 -112: 594691B38126E028352DA5B28ADFD416 -113: 7533FBD1FD58C85D54A712EF218A9D53 -114: 654796E7D2F9F2C2D166F23B5AB18812 -115: 5D25B604FB75727AE7EBFF980F54D96A -116: 426A7709CD61EB6ECF4034EC83E073EC -117: 62E21CA2F8E39C03BFF56C8265ACB60A -118: B7C9DAAA89A29F2805DEDE790DCB9575 -119: 9C1067170940CE8F8E4745D362675FAB -120: C5BB35660E3D0A286A96EA3AA4922B3C -121: 8F3B6351623A0E482B57525474DC703A -122: CCC34CC280340681CA5117477DD86AE8 -123: 2F5FB6B41301F87A0490035DE4C1BB99 -124: A16E28DB3F331091E928F9AE3F1ACEB6 -125: 7D2259C98085B9BF7F5E36B29DF8384A -126: BDDA1266FF3E8FFBA1DE1B2759B58BCC -127: 2067886DA4BDE10A94B971CD740B0AAB -128: E1275970EB67D2D996E6E658270AA149 - -Hash: sm3 - 0: 1AB21D8355CFA17F8E61194831E81A8F22BEC8C728FEFB747ED035EB5082AA2B - 1: 2DAEF60E7A0B8F5E024C81CD2AB3109F2B4F155CF83ADEB2AE5532F74A157FDF - 2: D8AABBEF65E6196AE1106FDDF48CDD0FD6EEE7FF54CD678F209B4914426B0221 - 3: D18C17EF9F985BA361F06B599A1EC3CAE9BD5DE6967CAC33944E5F8B67B6DCC2 - 4: 4B41BC3558731767A4B19187A64F8D171878EF5A45BFD73670815C2C66387D75 - 5: 96EDA336EB22EE830F1D1354CE363872497171A3EAC3CDF1D251C88BD4D28D2F - 6: 728ED1FF1C9FF55249889985CB21187D6E4F9516CC5CDBA5F7CCE79F5FF12DF9 - 7: F4AFC6E2843C2B00DE925B36259E386659BB727CFC528016F434E2D79AE46E7B - 8: 6C79B88EE30D03CB22B842BFCC15A18F839F70EAADBD3BDA953C6AA31092F83B - 9: D9260EB16F78E835EAD5B02FCA32321439FAFFC1763507DF21B3848EEAD70E73 - 10: 24C898BDB4D258F9BEBB2E820D4ED478A7C013B37BD9E5006515730C18A70416 - 11: 25982ABCAF86A30979CFBD4F86C76F2A3160F916CA0301A55C1B48DB89C8D7C5 - 12: B1A7B180FFD9147FA043ACFE6C794E902656C502B4F241B01F9DE1229562205B - 13: 65721525FCA963BFB01D5250A032AD3FC15F5D3B1E591906E892F8ABD4499A5E - 14: 386D2B4DCB208DB57B938C345338BDBEC61547EED302ECD273992A64876155D7 - 15: C706E492B6994B610A4B62ABA68E797772AB5DC2764EC35980DBA24734CA2EB1 - 16: F65C16E869F79670DEE45F4B56FE2B3E0308D8FEFC3214E16C64B7F5D3741E89 - 17: 431F00611D6EDCBAEB4C53C8F94148478A894E34383984F6D3BC45D144EF1B1C - 18: FE4C9FF5DEF43DD8A6E1EED798AE1515871BAF70FDE50A7F9AA3391C53604FF3 - 19: 674ED992C21A2842673AF768EB51374790252097CA545F426AF6F898865BA903 - 20: 54001A49B4CD4275A032A257405FF7CB0CB8B396DD9D8D4D387F4A5840EE0C13 - 21: 6C9206FB7D349AC74D44352A4F5203F800AF34C1AEA8F1CF8C6AC491317DD1B5 - 22: 6A4C8E752F5D4B4774FC5CE600260B727DEF2850A2D4BC470E63E6E728DE9D7B - 23: A4F9221FF5E44E68CFA1576CF37A57BC7EAA1FC365BEAC7D369C414770DC3FBE - 24: D5CD0C791215BB022B7A07FE60A947AB436A4EC1CBC29CA60824A57CC6074CE1 - 25: 52BE7FD40C801C55380473D80AE191B273BB90F4750180F12C84B92F0378E102 - 26: 1B3F4246B2AD89AF381FAD9D993BAB24CCAC205576594D292489836F45E7038D - 27: 41903C7B3EA1F3F63FE734F54998682C97723336AF661DC988919FF7C0D8ECF0 - 28: B268AF3A3971754C8DF859C6A91BFDE7929CAE0C4F4CB08826990F02574D7E95 - 29: 137E134DCAF4348C629347DB5626DC85FEC2A9312B6B379CD2ACEF43D073983B - 30: 65333197B21CDE07F4A452656CE2EF447CAC4EB56AE0F25FA9AB1551A52A2E58 - 31: 182C11FF061A611473BB2357FB422EDEC582C80837CB0A838B43761E81E528CF - 32: FA34635F1D3AC2729AC5987EB59E01928457F325B4B51CA85A177813C5C5DDF7 - 33: D2D8FE4545DA9CD3AFD31D31425FA2B3CDE043C6B40DB542B81683C20303CD21 - 34: 09276AF3F77A8F06F9A3F84DD05DEFE5704F4B4A51FA27CB9EC162085037AE33 - 35: 36D1655C6F37FF56626234E8934B8922A66B978C78ADCAD8234D6A66C201F29D - 36: 3CE6E59BCB3B3EE8581E34EA5A92CD5C5D03C877A54ED9C8CEFF188125FC765D - 37: 2FF022CEC2F8D6C474C86237E747983D0833EB65A435925FCE17E780E4D83404 - 38: CF021C2A028F8101AB8173E35DEE507F5BE2FB2F133BEBF4AC6F1A3C420986F9 - 39: 51C501B8F6F85B3C36B630171F857E58622DAD1CAFE296D2371187F24D307A7E - 40: 9D96C19358BBC611B74B1844A69E12931884879CC2267245FE940B11662F905E - 41: 42248EEAA80C20C2181D982E2C612C422A483866BE662766B754D4090D19BBAD - 42: C1EFBEDE74C4FF558DD39C550AD0C078CD42D10B5183CA4CF626B1C8A7504802 - 43: 5474CD859A1CE6B80B04F40ADE7E010BD26AEED4BE01978DCED46445FEE8F93D - 44: 7E20B15A795D8278C911C8E8FEFC2A4DCF57BDE011DD9AD9F32A0FE758A829F3 - 45: E36DCBAC4C65F93D23F83FFA5F9FA8F6F542F96DC957A2952FF50C1836C7E1D7 - 46: 791E088D7D0A769E47CA3CFBC99723C549078E389D687D0E9A4F13EC6BA5457C - 47: E14485A2627415801FEDBCC1C34A6C3312940126EF62A90D94BBBE5E694CA89D - 48: 7EC11F122FA8D8858B6D4296B25E941D2C2FBD1E583D47B7EA24CFC9E4035A9A - 49: 8E13771E93C4181F1970BD92B9F8E349EB9C69F780D8E1BB0409B092F0122937 - 50: F24CEF726525070D3B44EA309A6A03396B22F6C48F0DDDD99539AC4DC62CE4EC - 51: 9731C326383BDD50E2AC8BE14E8B04418CECB904502F888658EC3AB27C44D926 - 52: 4BFEF43CD2AA9BD40275DE4DD7E6E41CFC9090D2C5EBE1C96D00F336E287A925 - 53: 2A5FD61773794FD7C959FFB29256C1C9A9C028CA1E4F1F2F5224C002B766989A - 54: 1BB1B592239447B5DE0395D94159996EA7CC4FCC7B9F66CCC5F0CFDC89586782 - 55: A79CF9DCEE3404ABF7F769698201647FD9D3FF61D629D0F58BB4B5579A427DB8 - 56: 62F7363B15F4DE76DD925C493B9D6D00D4BA0EF2A1F334C1D0F13B293AEB40D1 - 57: 441F67CC31781DD2986FC612B92DFADE871D81357F2487F5C86D94A8C6778D82 - 58: B4242D2BDE6758049D6BF3AC979CFBFA8590C8F9A964BAA53F4DE3529E958CE8 - 59: FE83EBD916FA2EFE514556D3F3410D5C571D26B97722517D182626D1E8D67D65 - 60: F886E1C50D032C1B893A53200F5D2C0DBC9B486CB0EEA56FBBB63A35BEAD01B0 - 61: CF232D81E9C18D7CABD90EEBD871C81A69BDF378AC06E49C2E8EFF969B75B670 - 62: 84932BAEBBA0FF9E1506788E6CFEFE7E6FA6B2E7132242B91417E1C5DB4F7706 - 63: 6165E4CBB15CDE01C6226E0015A47F710F8F8E1F2C296700033BB34D9212109C - 64: 93566F236D157AAE078D1DDB5CEBDBBA1520B5142E22A8915564345BA2AE1D63 - 65: C886E6814BE748285A10B28AE62DDACD85DB830CD2CF3A2BFA2F729C15F63618 - 66: E844F6E566C8E40CA5E650B938C4EA3C1EBB3F16A714F51F3303A089C09F9E62 - 67: CFD56A9CD3AB872B2E3893011341330B921513790C938BF09603F6DA2EC0520C - 68: 879E8707EB2F72C8FAE188F026486B3F0864B5EC43B7968FC516D3DB91AD72E5 - 69: DA5887C018000EDCF53D3E1E0B300FDB6619130A9D99EB5B80170D3308BF1036 - 70: 5EA935C5BC7A7D1F0A05865D059F9DE99D9C21CACAEE6335D896C386F2380F1A - 71: C4424CF106704451159FBF8AB1B69C0DCA84FBFF9D186702FDA7A99D1FD2DC77 - 72: C10B8C332565AB5A91C09BBB6E6E0187824CC5AEE0A2F9C607DA3B6DE15F9456 - 73: 807624E5CB1BC14F514C9F7C4FF1235D02B4FB9C8CEECE3458B20DACADD9BE0E - 74: C2B0AEEB41EEDFB383D1137F6C84D0331254ECAA1E1108E7D6C3F19BC28AA90C - 75: B5C1A6629434D8E47F192C10B79562D390CB91754755AFFF4DD6824AA9ECDA63 - 76: C6D12158451A0C2B14DDF34D2A512065F338D8B57EA821591B67C6A7D1F9BC5E - 77: 0311B0CE52BC5DBE8C837EA76D6D6259C2F4FCDC6C7BD2E16D78B67AB4149B8F - 78: 470739A11C5C5EB5860A0450AEB696AFC7EBF24DD95DC555E99B279FDD88B06F - 79: 7F57AD909EF4F62D7E762BBE1C9C3F18C4CCAF37805995CE86FABB7C762D1FF6 - 80: 9A1198BAD957F2E411297E1D17B627AFB6C842437C0ADE5879EA249021D1F0CD - 81: 7FC44253FA19DDE0A9FE8B116A0D01BF95A3077440C1A5D11B9614B6429DF505 - 82: F056FFB3833ACD0379144757E9816953AB097191533DC8A57AFFD1D127B38C4A - 83: CCD3FA40CC2D2114A5E9B3325F6584A4DF488E1B34BA3E2D1528327A36F352A9 - 84: 04203C3B8F1FFD61FF3D0134C6172D39C97B94B962B2ED7BE70070F0996DA57A - 85: 157CA56DB5039FB8BF536DADEA456EED976AE7DB54372EF71750852A1BF0542C - 86: 910BA7725F46EE646C270C7E82C5CFD2C9066FC0D88FB2820BA963C26DF1F465 - 87: 867441F91E3CA3E5EA5DB6269B8E30BAF5F6FD2BD56FB3FB715D4A8C7810CC71 - 88: 6701746ADDF00166C676CBA3F6CEC7BE379119C00F11011537ACD99BDB3CE0C7 - 89: 6D6E112EEC5B237AF3927A9A2ABFE7E4669FC15C5AD379D072D32B1D255BDCFB - 90: 986F414001210C8F32AA79DBE9EF3D7375E75C51271B7A04B366C67AAE1E4C87 - 91: 4AE6B2E1F2461A55CF44D92390BAA0492333A9F25645CBE1352CFBC5B42AFA2B - 92: 6A529A8E765E6988300F495E9B73A651C28E39892F0B31B4D5C43FAEB06F3870 - 93: 2228C5374B0B93CBBA4D4012362C6207AD2FF0CFA0DA0C5FE5622772B1885976 - 94: 2DAD3FA1D4856E95B67B261A5EBF6C5AFF149C5A7BCA25130940CA9E70CB6251 - 95: 6529643CE86E9FAF589409403F6DE23908FB91499C8AD09805AAD6C7F3EC5751 - 96: 2EDBD8866011F112124F30774E9CE85E3BEA3C2CCF98FD8757046A2943DA59B6 - 97: 2B987812D4479D2F095A5A22AAE0B8A77A1BDECDEBDA16DCB987CF3974003E81 - 98: 95BE171D4DC68DC32DA1DD5A1A31808C0A324A8FEAA4044F0CBE7304F4B3603E - 99: 7D4EAC94A68E328B800BE8D9BB1772C268450B7A3C9959D0729F036CDB8B8BB6 -100: 4B2833C158DD41614B76E37F18889243BD6B4A744E36DE60920A2F89E409C64E -101: B0992CB78BE5CDA48BF503DE1D3B4EF88AEFFF54EE6CF8A2BE14CA48BC400D55 -102: 0CD08EAA77E6A6F48E1E4A9371C17EC66B5D3B27A28A00E93D633CB68097CC4E -103: 30821BF5C6770CB2071A04BC764FFC859EE9FD51149A0FBF6F45FCACE6523D44 -104: 67916A4F629B6CCC733EDDE300D316EB405BC04E7D381738456E2AF39601DC70 -105: AAC90FA00921904EF66D6BDF92DC29F478E1D394CC4E8ECC68F71882062380FA -106: DBF54DC0B588C2DE7DD9FF941868873D60222E77990C16CA2892B32B326EFFC6 -107: FE698FFCFAA632E75EA1B943889ED4D090E91E846AFC78053C8B72D8019C56F8 -108: 3FAACA4E09E7667DEAAB83ECB6D430E9DF80C0D1F69B05981DA052D6A0BCD977 -109: 32302DB834A491D160AAF5C0A66AD90CFAFEEA5855E6D0283BA331B66777DA46 -110: F3214C9CCA8FA3682D22660A541625D55F2B3B7D7B56362A861D4A1C75056E36 -111: 46EA8FF040518238FB6E34B688209BDCD18B31672C4BA28271045F8C8C312733 -112: 1C7B0125F4F56AA3E7104B10B25CE1C98E7668720F9A9E2EB21B6DE36BBC62E7 -113: 2C828958C3F34A2587DF239F258F52B3ECB599F67E96A4064DA2D4FA1A955F2C -114: CFDD1BEF2646546BC6FEE51B84AE9A056A1F3D3FF404F719C5EA889AAD00594A -115: A02A9AFC0B47E0F4E79924CD3FD2A9E242664360172B61298486D0CC6A9583CA -116: 7708158049314AFDEB7C9B23B18E27F556D480057AAE126114167688B2D5EE0F -117: 8990E02F7553F6077D6DA698CA76688E64F52FFC93A975085D2FD36D9541A2F9 -118: 28470FFDEC4F1C82E0A09F1D2A771DFB0D785F7119E401B6E5A42029DFC88C32 -119: 8F3EA392A89A7119982D6634660DB1A95F35D68267A2235E3255998A857F4FBF -120: 6BABEE35E6A1515AF9D6255109C24F3C08897829422C6225D235FD4C8527E9EC -121: 501BF851D9377E2F02E6DC2DA58795B5A7337D94EFBEA64BCBAF0B3DF11E240C -122: 00825B1AB35F89279C4869826C159F5910CFFDE3AE20AAB7BCA13EC8263E12E5 -123: 722D468220D61A129D766E589968B196E4136B39C4E83B5CA215050C4CC7107A -124: 76ABE4F014C7CAF037FC6B87529F8031DBA51F55BA3C00C61C8AAAD666C43098 -125: 60434971512E75B7325472797C7B11BC4932EC6561050EBF8A38698BDDC84B76 -126: 07F7BA45D5551D5DBD3C3926619235A7EE880396D67A63398053DA8E3376BCDB -127: BCA3436D828517A6A6893A9E309E06E7B7B29C6E3F78B4814B23EFE149962980 -128: A9E7985473CA09DF1510D83B572F72375430756C4A661B00724AFEB8B75DD0A5 - -Hash: chc_hash - 0: 4047929F1F572643B55F829EB3291D11 - 1: 8898FD04F810507740E7A8DBF44C18E8 - 2: 1445928BB912A6D3C5111923B6C5D48D - 3: D85B2E8854D16A440CF32DDDA741DA52 - 4: 5F3082124472598098B03649EA409CDC - 5: 604A19622A06D0486D559A07C95B297A - 6: A16F89E4DACA6C8174C9D66AA23B15AF - 7: FC6893F79A2D28315FBBEFCAF0280793 - 8: 6A80F04CB93B1CFB947DED28141E877A - 9: D036D0B4DEF1FA138C3181367143D1A9 - 10: F031A2DC2A196B268046F73728EE7831 - 11: 2E05C9B5A43CFB01AD026ABA8AE8201F - 12: 8B49EF0BC936792F905E61AE621E63C3 - 13: 485CF5E83BC66843D446D9922547E43B - 14: 704767A75D1FD6639CE72291AE1F6CD8 - 15: 19F6228C2531747CB20F644F9EC65691 - 16: B78FEC0628D7F47B042A3C15C57750FB - 17: 3EF9AFAAFAE9C80D09CD078E1CC0BD8A - 18: 5E4501C8DD0D49589F4FFA20F278D316 - 19: 00D2D0FDD0E0476C9D40DE5A04508849 - 20: CC7382E78D8DF07F0BAB66203F191745 - 21: 85B841BCCCB4AD2420BCABCFD06A0757 - 22: 7159E38F4D7E4CEBEBF86A65A984BA2A - 23: C8949A9D92601726F77E1AEF0E5F1E0F - 24: 8CE35EF6EC7DDA294134077420159F68 - 25: A0F4E4522832676B49E7CD393E6D9761 - 26: F55C27D180948585819833322D7BC4CA - 27: 0A3975A0113E1FE6A66F8C7D529715B5 - 28: F77135C5D04096181305C0906BAEE789 - 29: 31FF81B49B9003D73F878F810D49C851 - 30: BE1E12BF021D0DB2FC5CE7D5348A1DE7 - 31: CB4AF60D7340EC6849574DF1E5BAA24E - 32: 7C5ABDBA19396D7BE48C2A84F8CC747B - diff --git a/notes/hashsum_tv.txt b/notes/hashsum_tv.txt deleted file mode 100644 index 8c872242..00000000 --- a/notes/hashsum_tv.txt +++ /dev/null @@ -1,38 +0,0 @@ -blake2b-160: 684b540eb245ebba2cd66b7814fe6d787868a5bb *tests/test.key -blake2b-256: 3aaa08120aa0174c105fd1f3412e3da30c3bbb9073569b0b8ae458b34de7780e *tests/test.key -blake2b-384: c33f39ab19099d5dea6789479e23447857803a3f45361ea58dd69c7b8037c8697544b6a741e236215adcb8b38fa0cfc4 *tests/test.key -blake2b-512: a2daabae6996e3bbfb76c5d277fb881107037c756173f510d83a78f669cf0b70a5088b971e30ca2168381568ea3d30b80a7b500944a5e2e3294f25aed4c3a5f1 *tests/test.key -blake2s-128: 7e1f9b6de11a3c597308f9d8aacd7321 *tests/test.key -blake2s-160: 3d1c9ae1a0afe8a6ef8b61d5380de7b061cd353c *tests/test.key -blake2s-224: 95dacd83d0421b2d69a52d92ee54143bb97c91a61450d917a88d4388 *tests/test.key -blake2s-256: 92ac6dc88b9ce4a75b2a54783435a37919303f713396db0e9ccd976d8c55f1cf *tests/test.key -blake3: 634ba3ee0627293fe3ef89fe7200434fdbf2c40b08266e0fd09708bfd486af0c *tests/test.key -chc_hash: d50da1ea9b53c0b891c8bcb0a4c6e5e0 *tests/test.key -keccak224: c056b64ec1d8066aeb148d38aded0ff96cdb1e17eecaaca407b3bf66 *tests/test.key -keccak256: af91c0982f5f79d51df0f6ccb28c7f0075ef330e09371cbefa660119a74f28c3 *tests/test.key -keccak384: 7345e13adecaed861e2b1c30b2f107265f80e6e6a2670d00209e18ea4221f696f1301fe1824b5a4caa6dfc1688b1fa9e *tests/test.key -keccak512: d4dff58d79a22e9bc5150786bb1cb3ef5598fa8c65bf162f55866560fc3d05852a5a482ff347db288a42f7a1ce7c2e3e30fcfccc7792a6f7cf85cdc024ca9ba4 *tests/test.key -md2: 0b327a17a102580ccde8081c18f137c7 *tests/test.key -md4: 6df7b3c1f7fbcbf6b8246dc0046e9d6b *tests/test.key -md5: 48fd9ed11c633069c3cf721611696a73 *tests/test.key -rmd128: a78170e11d56605eb0f5e05e6a218e61 *tests/test.key -rmd160: 56236b14cd15958c58136a295fa2b07c5edee009 *tests/test.key -rmd256: a0a658b25b8841f20be8151eb5e2c1229f085dd5cf7aa8bef4c8e07ea5738913 *tests/test.key -rmd320: 2ec15ca947f29dd8cef4782aeaeb4541ac00dc29e1649c4f5f4578ef0287091e513f9da423ce7319 *tests/test.key -sha1: c17a11eef02d7a2ad7250bc2ee22bdf37ed21f0f *tests/test.key -sha224: b226daa069512c849d55866470c23543d87e1fb768171efdcc6ab59a *tests/test.key -sha256: 76ec7faebdc42a4de35ca70024c2d273e9f7856ca61612e89f5f66350ba8cf5f *tests/test.key -sha3-224: 09525d6410c462e00e72ccd4304290bc59ff2b1b8e5322dbc197e169 *tests/test.key -sha3-256: b9016fc9976545ad0183775d88f20df5295d40b31db00d85f6916333260b8ae2 *tests/test.key -sha3-384: 5452977763b602df4185bbe7cce193346b09ee20d4a45a780fd44237e335ceaa71b9da06242621e159d796db9043c9be *tests/test.key -sha3-512: 1fadf63073c8613d38d5c944e2e3f7e086d94d93dceb2eec1e9693fd44158f3127c90cbaa8a13035cc9ff9b3572c9dce836bea15c92e8a78b036ec382caceb0f *tests/test.key -sha384: 7cc080c662524617e56d5a49f1c185909e9b1858a86684161ddd97fc5426f693b53f59d779de16da25dcb1259df879e5 *tests/test.key -sha512: f90afe4d254716a9770fd2c4f29ca544f2975f961cbd7fa207117383e4e48f7a2e1ade4aac333a2cb8c227dd6af2fff4d87c31c2a3916ae24d507c7c94c21818 *tests/test.key -sha512-224: 64ec566b5c2de736eab1b4e8542dc110f736819ea7f8f48e3712fbad *tests/test.key -sha512-256: db880bce4beb7246510febb961c7595aab57a15de6f90cd079f145e476b5d773 *tests/test.key -shake128: 9acc6823e58083f1499718d478ea42f75656b4780800c3b105678c4985cdf3a9 *tests/test.key -shake256: 29d0d19db50cb5b90a7ce94883a04bb6a97b0dbb9a648f342d7032d64160dc7019262ed0e055ee209c5a0daa92f36004c9c51d70402145908b4b6e91ea15b5a1 *tests/test.key -sm3: e03629750a6e6be2b1be1dde48b83be44a7ff19f1cbe3d9bcab540aa2b7e4d6c *tests/test.key -tiger: 97d713850e7affac30a642572c1ee7b18793d5b9e0ef5932 *tests/test.key -tiger2: b2dfd53b3edba5b54e1f21a82cbf6a3475efbce33a8cae03 *tests/test.key -whirlpool: d7d41c755e0f28313f254cb198e0bfa42f56670595d97b80dceec754825d69938a9c11e5bf16e9a3809a62a09bddf021f3dbff4302ceec7ba46c88b41772b711 *tests/test.key diff --git a/notes/hmac_tv.txt b/notes/hmac_tv.txt index 2a5ea3c0..30034901 100644 --- a/notes/hmac_tv.txt +++ b/notes/hmac_tv.txt @@ -2,2451 +2,564 @@ HMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are HMA of the same format (the same length as the HASH output size). The HMAC key in step N+1 is the HMAC output of step N. -HMAC-sha512 - 0: D29B9E3F87809686F34109FBC718D6ABBB09C278CF05A206ADF21463E1170362122E58272A31679720B254CBD63A7C6D696BF9283F9C6897E7D792483BB0388C - 1: 5EC18FCA20788348244720D58E9532B4B699E78D48CF7D7BDD1A4E5C61CD09C075EA7F112DE379FBE953332C6A7D6273B3F6360BC07203A5175FAE618E4A2F55 - 2: 293D275FDD5021716117D2B85E6D38F8D60D4984BC73E2D8D7EF5942CF1287B65C0675E566794786FEA18AED1192A024FC4B3E0505D91E1F91833B210590BFDF - 3: 8D9E222D6B16C58B3862D6BFA556BDFC2A4A152BB2574C2294D5381F6E38FB681500A6A19D55525B337A467A2FC30DD1684832FFF92AD071EEF05BC4F4399FE9 - 4: 71E7028F8C4CE9C1EAEFE459771528D26993E180E616D68355B9C618153AFF2C0E9620B151C8F733E71180EB87BD773A512B945AA353029A8F807FB2A8FF2264 - 5: 589F462D37095693ED0C1F3E0DCB892BD19086FE033718911931509EF6195AD17C79939A87665889EFA6DC19A69BEC6E7058531552832CCBBC06F1BEC70D1736 - 6: D94FC6BDAB3613271522BA05C998A6D1C57CAF0E6EE929651762F257E7EEBC07F5CC7CD3D4064A2755E408B347939B3927434556B4ED49CA406C21D1024E6D80 - 7: 4D8A886A89E9C60EDA3BF0BC512A295196C3F62018936DDB24BE9F6AEC7AA9511B33CBEC8A22309B6389417F4E7FB0489981CACF03DFECF7D9FE5B91D62BB719 - 8: D0E00955F0FFF98ABE885970EE44F1B5D4C23C205C64B681381FA13C543106B2AB4E762FD71F47008B4C429C39ED3D66B3EAEA946674F08684AC99F957F50416 - 9: 4F623E52B5FA2D556D25754FD00BB8429356FD75FE2EC57EB4BA4E25CE03C5332D3A632179C9FCFFF140E6B443A4285F4A7CE881E6D3EEC4FB0DB26C0E2DCDC1 - 10: 5196EE8D442E5308F9D8911C87050DD3C4842D0CDCF55AC554412CF096EDA94BE1A251743AD5BC5F8AC902A38B66D7D57C90C29200984572D57C04F64166B803 - 11: EF77019B0F93B1598E38D3B1B703B52660192547353E7FCD5A7C8525DBB516970D3A6F2A94729D90A5A34CEA255F310C1F46546C2A08975AF477DA2F3689F17E - 12: 0A77531D7081095AC0D0ADF2B379D3F820DD20CD89610917E287FF57BCA5DEABA750E1E075DAACA9CC4DDC74732E6F7BCCCD3671B6DD27503CA855EACC63FFB1 - 13: F1E04B1F7B09DA270A44B62DBAD2FC0160BA1D144D7721010D77ED250A00986932CB6652D95B4A977494F11AF7E7FC82A70DFDACFA11232D653B1A052820185A - 14: 7BE1855550A49FF66D6D395DA7DEBDEAF674F1AB192DF82D74F6BAE8088F83EF1471F413CE00A404486213E41B42CF6C4F7FF1BFA17A1E28928B7179F0A966EE - 15: DFF2CDE8856D811494F559E9F4159065A50B1E82961628E95F04D595F670249A2B71C2625CC1CC2B1F85829255DA007F0374363EB749E935BB72BDA24B8A3F70 - 16: D2F7FE57D9583EC1AA733403527DFBB118DFE07B2A60C43039FB238A7205A053E0496AD0F3C1896090AEAB3088283C8FAF272D1D53B5F9F88281E0A53FE7F8DB - 17: 963F629ED8F0E7D6D4CA4DC8A8B57C825F726380D0BA9A9857459491BA82F64A929EC4ABFCF79374CA68BA812E3A83A643D05454E146E9F4103D17E20B8350F5 - 18: 1FDAE69CA4A9FAACDDF30A56B23F14768EB7D5616F6666B6F01FE5E216825CD4201A69CE3D2D1D2C3D03246BA7D32ADCAAA4A7D03B9AE6AF4CFBB474E1717BCA - 19: 2532E98B6D91D8D658BC1A1FE41AC719D648D47BACB423C031A8E2E9C25CC6650D3E5DF8046BC3532875F0C8DADB38AA911F216E6741E9FAD700D31269EE5D46 - 20: C81E6E9F4B75A4EB2B903C4DE28CC437CD87BF789F6BE60EF521491CC7E44AF26E9EFAC55961135F79B3591F5F7B92ECDC9917641BDC34943C6759AAD9437498 - 21: C0C2B9478F956800B64FA408BB0E077FEF48DE4B146926B3C577C00688829FFA6540AD7C211A807286C546F7D146F95989E77B62F5E14D62FE0C77C85FCB6CC3 - 22: 980D06C1B27EB2EB15069566BD1BD838FD3DA453751BEC564C05941C9BFB9EE8443EECF84CBF8AA7DECAA294C7D1A3FA4A39C20A4659DF332CAFFCB2863A769B - 23: 70FB10E482AD19447CFAF10EB9FCFEE67F9DF7164B2647F19CB220E7D83BF892AB7B5C5ABB73B779522012BFD464D9D1B18C37C3F6CB70EC4106FA94F8CEFECC - 24: 7AB19BF67380012D3A53B93AC15E353D477FDD1E2E8851CD5AB5F36EA0C8B128D3193934F837D23D232F44009AC60DDD358AFC8D3A201BED3EAEEF74C03617A0 - 25: AAFC1227AC42CC27BBF78FE26B3FACBB7B15360891C8EAA8C737AD42C00971D02B3A07CA751774D02F402F7E76BE08E2C1241EB66242DB5E11B342C22AAB9FEB - 26: D8CC3BE5B48C7BEE8522BD8872419932907B78392B7F2546788477C858D0C7BD772985C0B0D202AB7E69AB5F4E1A0BC848A512FDD79EC29F19BC4BA6D28DEB07 - 27: 6133D836D68C82658F6263F794073CAD9029F20CC11D0A6CF589335B023CFD66D708F09136546C6C08769139363AE5CB4CC2CC86EC6911237ACBFD8B0423E377 - 28: 833DAC9CFFBD62FF0749391A42324E2848670913890754E24ECC29D4738AF00A78134660A20078FE59C66113787F4A3E6C0E783740B2F2B2BC8D36FE4EDE39ED - 29: A2F3BC0DF058506805DCF5CC3006CC4FC4085FD846C7A7A7DD3A06CD6DF635359F4FBE90A676DABD7F9AAF42577C8E3B07B63B9CEC8A9AD05B38D16F56214E8F - 30: A49C3BB487C561E5AADA4FBA2D9F5B42681486AE2DF56087DD65B3D5E03C625F709299C84C64A68D87C92A4CC90246D608E692D1FFCE2C099348CD0A19407C2B - 31: C8D7B7A7FFAEDE88963B09A09ECCCB4CAE77DF9D8D242BA19F6485BC7775308E5D11C78FE9C46E609F3AF070F3DA8ED929C103DA1F25BE7867FD4D3E4F2757C9 - 32: AD4627AFB02DECFF956E612537F011E82CB0C202A5A11AB7AFF55A201016C02CD21EFB4EB197BC2D13D272C6A830FD77F534E800B0AF1E79FCFB626ED6A0D6B8 - 33: 8D4E232D9614EA1194E60748496CFD32A4AC249BB8F08E55A7C9DFDA708DE90D067FC433EB9DA2A6833D43BBA8E8DBF31137A3C9B26903060EF9217471E9F945 - 34: 4CE5E4055F10F1D2182A7892F98206D9A120FBDA3251036B7EFEC835C95B4D1FE0BE3892E2363087D01948AA426AA403ABE1CD79F0AA851E2D1195511C7A85AC - 35: ABD65F8E9A2B39BFEF6EFC9A9EDEF6572489AE82034EF3BF2AE5F380026FF4CC40AF093F0408445735C0E6EBEF5D7E7ECC13C98B59807AE01FFE1BAB040FD14D - 36: E8C687D7AF785B1E547307875682ACD82FB58A8259551D81F309C923C2B1FBAF5935EE059B89070B8420F71EEE3BE7B1E3B55B196872F06DD1FB890F6FED11CA - 37: A344BE73E6585E0CC31525BD6D4EC3345D7780CF180D0D5C2D5FBDEDCBEA050A958FEB13C21924E311F57FD6A498756146AAC58412B98E4D2A3B29D9B77A9F53 - 38: F0A088CC818F76A1FD6B5D707B114BDE24245CD55E48611ACC6AA497A0CEF93768501B5F280AC518CEE48C15373118BE7B72F8ABB2E9FD3526DD1C18D9CB2545 - 39: 4D56D5C9222BB78E04DC9346FA9C4ADC27AE08DA3E34F490A13F674264896E58F9E9839715F633C7195B40DF722441275C84AEF162B513E673809F7874E7A124 - 40: C4B3C9E8140F0D5589E326916462354827E491F3444E0C361512E6E761F5E24AE1873B238B73F32F6BF8F1D1D8FF9437A01DACCB749282E776FF66151A4F7E19 - 41: 7B4E07BAF338DF6479E169EB6CC64CFF88167958D44C5CB6606964B7F9ECF5F3F1B1F695C63F2BD66354722F81EE4BC90B9FCF5345642E264C66F6950CC8C481 - 42: 8571A8F76A1D5DAA0900A03E236FE965D085BE6035B7C0601EAD338106BE7DAFAEC82F7C3D8AD346FF749B6DAFC69901A6072CA089B7A5724C75CB0818640F7D - 43: DF516D84392E571C3FE39F4A0BA5D16D866553644B4C4627D3513F0A1C60D22FC5AA4276A71CB37BD6D6AD05A12BF812A2D5388A606583B78372B84DC567431E - 44: 535AF3C73B479B61B8B70E590E335DC4C1E22DCA656454213E1FDD46D026B6D36133BDD372FBFBB27B6DCA8E487F4A54BDA8C5F67B37C871653C656DDE9524EA - 45: DBFA27964DC6A80FF76112FC6CC02C87811DF1ECA3A8620A5030C600561032FC374A6B060FEBE0ED67421D9217D2719F5A55621736FFFC6F4F26DD4C6049FC09 - 46: 6F69BFD2C60AB1554023A6A2094D30CA78D364501F7813A2CB73DEA94AD4B94A0EDF3A3698D6A30C8A5E764B81F51CD0CAEF0F996B8C685A345AA630CD10570A - 47: 2769DDB3AF3DD650BC381D7B10CBC4353699A2A352E57FA5D5CC4FB610E498767F49104ED0F4E06E2BD563F7F8045212F5B9C49CBE050A1662F2262BAC4053CE - 48: E50169B15772017CD9FF93D1B46AF273B375A39D174E3B8621EAC8EF968BD967E1448DC3B2C72A667EFAEBF2B90D4E6640698CB866075E95817719E0EE61DF30 - 49: 4212648E8F9ACBDC16D48CD7B355884E0817A95DB03BD9B8AC5B28BE6371D8AF83546DC82550B8B23DC77F6D06211E3AF3B25528BE686CCA1672C91117DF9762 - 50: 33C71EECDBE503A6AF72EBA8D2B9AA7AB8FA8DE536C87643ABF1BC3EDA535BBA64A8A7F4BAC90ADB7D8C926DCAB1D7DCE15D356C5074BB3EBC7B17516671EC8F - 51: C8EE9E57EFA859DC5553D03402AE80B84B1E0032CE3F2CAC43F8422A80E3EF59126AE7AB4893735F9C948CD9FA8793571E4582908DA19FC723A93C7C36F79F9C - 52: 7CABE0F83E90CF9A497DCE45F14F9926DC714DEEF05A1A0603F6436E134FC7C8346A19CB92DCDE69D794B38FB22233577BA3905C94A7020841224DA888B9BE1F - 53: FDC20554A15B71BA62F896DDC4F8B354E5D2434B0AF719CCA7DC56FBC9BD280B0F80136C4336D605C7C26208649F38C1DD0004C6E0E787A91FAA6075051FFDCF - 54: 87387F89646B4068038E011D7E02C353BD5649F6DA1C4C46CD9F7D69EB3A2F6EE84DD42D25B67BB81666CE8F92A5B1A0F3EA58D4F0B5B6E59EDEC86B43BA0CA6 - 55: 6D0210417671B66D59B8F28CA0EAFDB493C30A7D7329DF29194C53887F05EDC2C3F35853898ED77394CCC650E8D350F69598E3AEF3DDF540DACCED5BBCBAF6AA - 56: F14085036C69398BC7E0CD8A9D4451A10B080E7CEDA5582ED396E5D54441125EB3EF6EDE4534E788DFE6DD3DAAA204814097987981EC8BD8E39E8E8B35AD8FAA - 57: BA67FB4D7D137531D3F4CD3D91975255FCF8EABBEB97EF0FC7C21C4E25FD034658C63881B0AEBEECD2B7D15357C14542D26EBA3ACCA944EB4C4D7E44E9899D42 - 58: 4546585669E343AD40792308AB456DF623A6A23CCBE64B26B953D6C461460BBA7A3FB444481BDB3F7FC8D5E825F2527D2DFF193356CB3171CFBB56C679AD1BB9 - 59: 210F8AD68FCD10BDB8773194FE57EFF566C7E65BCD82BE6196DECB40BF39774691AC6BA718E4B5FF0DDCF2C0510182B9A114C6F0117A0BB0E1AD585C69D38D0B - 60: 29003A048ECAC0613CFAE8EC8757F5E5CF80E9B0BBF538D7460765FE2D6B56D6251ABCFD42B56D64B56D8F219868DEB42B968E88D3F3BE3A161DCB43EA98349A - 61: A308F9E2B60D0093A7278B0645A471408F58B45B3683531179F34931D06A15F4A502F2F7E1DF8B47830F65387BB9F102646058AB456045267F2DC403A1D9A6DD - 62: AD484DDC270FE74E68620AEC882E86320D0D0753E713D9D5C9C7FEEB894DD3FD5FDF4995DDEF87B1126B36E92618331126F5852AA8C0D44404BF9F77B780595D - 63: B4BA7B2F08BC0FC901188B50493FD165F659D3226227E2E9892BD70B02312C12D195A73AED3A4009618E6E74799DB158D9AC27FCCA9BC682B09ECF53BD368C46 - 64: 0AF65ED93646AE826C79BB6E8CD193D5246BD00B0BABF8425ACE03C845B9AEE428045D5F8267F3EA86C433F1A9DBF4AD1883AF164EAFE02C07CE43079668A248 - 65: 65F899BE2C5E9879F6A3BF7B60E62591B5DC5398283229E4FADB1EE78FFBF962295C427BA0D50BBCB9E2F1DD9694BD36CA598BAE7C2EF1F4D0700DC95BB66C37 - 66: FA9ACC46F0841962D6DDCBF5D47BBEC43A0E1E9B2A8F8B7970E2E73C06612FD95044B8BEB58C71B19AF4169B7E6500500445490F80EA4E305B6BB00C7181810D - 67: E9AEA6E12F881A7AEC3AAF428BBF0DA3138EBF69C6B8E52621609AD340D6537E4A03E2B099B735FA82A3D300F782606EF58598683D4ACB0870D5130B4B3142FB - 68: 3558ADBFD411DB8436A1A8B40420EE9C274FA153AEF891290F79DE5714130A50C70EB87E8A901D540ADCFC37E40EF44592822F6ADBBE8E5CB4EC89909633DD7C - 69: AF3852A0B4E846B59A4EAEB7A7A451311B1E8F554042CEB2D253F10FCB3067F9CA927C7DA3E57BC9C99E4E7997856B35DAB0645C194AE9F1FA0A92BC218CC9BC - 70: 6BD90F0F8FFA39C2A483E8349D2A29A96AA7F3CB4B4C1325FE5162988C9DEE849B8E56BF1423B6905ED3FC6A82A067F850372414E2A4A7E5CA379AB80F1C4F23 - 71: 6433885A8A39F2E4CBB36191A038EC3E3227BDDDAEAE24FD396481332A9AD7BECCC4E9BDEA0C8A7F33180ECB1EC1DB49218D17C4325B661967ADCBA25B341649 - 72: C3235054A1FDFF2C0D218C3B54EE6A58FA5AE99040A64A90B9C8DE601B80A7C130168FE7484CE1FD9FBE22E6E794161826730B63DE794EC4ED1D653E40B27F7A - 73: 89F4DF5AC626665D9791A1E1C30D1F206D89C4B0C59916DA295931539B0A607A1261B4EF022CCDA6ECE02E99449E252EAFC8929F5074866C3FF59CC58268E2B8 - 74: 3F1AC15A90C38AA964518F176016FDC73A85B096EFD1FCDCCF38F3EC692635BD4E610F1B3314E068164D02168F73A307AD549E1E7EF07DD374F9697DB6A17447 - 75: 4FE16A3BF0534DD2E4DACC43E221179C9B61D7D50DAEDA4DA9C45CCFDC76D6FA96EB3CC1C184DD5DDF7DAAA413D05B2FE518117E2C9A880726148C7AE6052160 - 76: 1EA870E13B7E59B97045F662682F29DAEC4413566DA341468CC9F5CAB733D1897BBAD8E9520B85C43DE33B9B70880AB774EA636248CD0A1626C9CDFEC3F1835F - 77: 37AE3A9828B08A055B2E47A613D25A8D43D5A456BF741E7964C0DF4AEC6D8E5F3EF874F2B20606A38AFCBD307C104DFA5BF40BFBB3078771436276E777F645DF - 78: 48CB9B779D37299162D2674CE2C2595B2422071917C28AB48781DED5060E76EDABA56E7C538C3182F9D960DC21928E6B3069D510046608C976D7A113DE54DCEB - 79: A565459CED6C996C04A21FF0DA10A7F24B1DE22EEAD7FA7FD2CEEAF522A42E29395F771140573D684C94F61F19C771DF68FF8EA0FF727C55294C70E701C8E426 - 80: 3A0ADB5479E65BE1F00462E60C8F7F74FF5C996680A2A4CF787B5DF65BB2E82264004E396AD7EAFCF8A201E03AA950D42B9A26EF2D24FD2AD7CF57CBD08AFFAC - 81: 6FFC799781B2E9F3F573651EB2DCB0771073DA1875CCC3D2B4C6C06F43161195610617007CA9A943B1F2B001E62518EBABD4542E73CA131E20A167FA6E8CAE44 - 82: 79C9E349F1216FCB295FFFE5771EF54A024306CED9CA111DA3DC629722DF7FA5F0927152E4401E0358BDC16D9ABFA02C709B1C21F6D86905B0CF0D6EC9FD1952 - 83: 6876CC513300CC83BAFCAAE5DFE4C4A0CB962079523ED475B19568243A63B208301335BDDE10CEC90CA816960013E08271F02111BD18FD03C1B941543FF4A579 - 84: FB5392BCB60C1329D3FBEDB4DE1131E7B89326A34F34BB099A7EBEE42B985682F52412D3F0628AA72A8C2C46BA3FEA08D5765264E48DDDBB96CB598C9C0BA93C - 85: FAE655D7CC2FDB54349870B199FA54CF47BEF2AD98021FA27B968AD4C3AE477C6B2DFA9A10C75FE275D5A32C5E9FA06B03D4C908184F49FCF15ABC409106E951 - 86: 9B15DD192392017E2F4DDFCD30B7AE58546AB71EC44DB94EE66CA3419D580AA05B5F10E5D36D9E60465FB8F56665366824B5B6E9A63A13F6E83A026F5A8E0911 - 87: 1A0EC6F024130D24D9740E8037C78A176D9C5933C4073DE3C6B0536E9F7CD20E0E89705953DAC9CD44C85EA059ADC496A7A0EFC40F187DF676D2BC83F80BE983 - 88: 5E9683BD68FA16BE904FF617510AE99249ED3477276A0B410B269EB2E03A3505EDF653C725811AD9DCD7FCCF6F2411980784F4BE7407D68C02CF6ACD21FA1B52 - 89: 47CE3079037E396A5B5A1A3FFFC3C60A138AA2C6BF4FFF26D846C7E1E84E31A26270AAC5C688DA7A29DED589018BC349E3247B073B765FDBA4C8BB271CC6E233 - 90: 280FE2B5B0B72FEFA48A9B6A1B0A3529CAC9D6338E2083816930B14FEA5B21088B1009DE147D81FC7F29B00BADAB32B57E15322A6180D713411F559658FAC715 - 91: 527C2E33018CE9895C3F84BA5C072055730AAF767DC82AE236F1F7C5511FBF2CFCBE32AAEEFEADE38EED4C0895290D0EAAB38E3A5CF7B2462675D1E6B26CE814 - 92: 8C0E22F5BE099CEE31C816A0F5DCF9A548B0EAB55AE7CC127D172AA5243A5C73B5BD3AFD77C89370D51460CB7E84F1DD15774D1B8442C07AD21A3B128688E1E0 - 93: 6CF00F05A9DD7EBA5F1A755987F5678F80AAAF9B5FC44D6199100C062DB50D2DA89096389DB94A6D68BD8337640BAB60AFC8793E1A909624A4E149AECBE415C5 - 94: 8452FD4AAEB1AF4ACA8192DD59926E7B0D7B295B8FE18DF4DD21E7C7ABE8F4ADE7391753E533EDA2EFA13CBCD96948ACF26B658F1E72390BBCD7C1BDCE8FD650 - 95: C4DBE8DC875D00FFAE2AAEB3E0BF1F01529A364454D56D329FD493D327287F3E34DBDF2AD54C5BAC5E6059F5897D18157C7DC846F15F2CDA1B2F0A6EEAAE58D5 - 96: 6C88BBBAD961E9DD1418E9F8EC69FEB443176108F56FA2B0B686E93B0E5F505E56302994FB190787EBA7CED5EAB69DD24CEC39BD566D18ABE337A31414991735 - 97: 439ACC720E8CD0C4A119B9C318FBC543CB7B35FF12DA190D82A951970248BB47D0DA2171A7BF850A881E8767FBCD542039E483974F18532FDB57DF23CD18B1D3 - 98: D71EF6284984442D05E8B6B1AB636E0BA013A8D70029F9F1B9BA7927A582D5AC6899B9C8EB990CA93B49E460AE140564D40467A1368FB4A9EFFED4A467E174CD - 99: 8B5AD2DDB4F8C044AFE2B0216B7E7D830EBDD285E4D992CA022CA2F59644806D8B7599CEC51DC73786D98B7B6F7C10C3BB7D4CEE3740FA42DB21BB51A1269611 -100: 28CA7AF155E9E7E1F5EB64F211F254D624C6C42935E27A91745F2AF2EECFDCF1DBD5896F60520A527499432DD3D0F3981F0E5BA72EF113231A0319467BF5271A -101: 45B69480A77AEE3D83D39A38717EC1CAE1634D2D50D05FD78F70309DDA566DFC160FDA967EA6ADEA8BF45B74557DBCAE4D6187DE1BB82A053CF84B4217F9CCA6 -102: BF46E03CEAE3211FEAED2147B3F2909D406A767005F9C8A5CE6139133D41C2812D3225123B3BF0792288E4BB5C8B5ECE9BDFE0F8FF097DD64FB2CCB964FC9862 -103: 3CA25AE24E0D847D9552FD74E1D6FAAF91736603DEE98E51922A2923630D7CF35917916A1DB23A758E7F067F26A5DE9135871B3DE508CE4ECFEBCBBA1A958C78 -104: 2C4380BB9F29041388A0F8292D97482E1E96429B79162A19F01918DBC2DF0B36244ED9E7D015A20290877ACC4D2FFB14D236CE7FC92ED16C7C57012B0CF6DF70 -105: A0020193ADA7F57DA648C1474731F145E6A8E9E7F9550ECE1A841E2D735B18769738AEA78E7AABB8ABB51EF08A34C187478B4C5AB5BFF4932E97F4E246C60C6A -106: 60E81090C365DA5E69E2FC12256131F134F561C7A411F51F72B7649727C9D7E99795D18D1AA54D09F6B2DD7FC556512F49D582BA6006D951D474039095F3ED07 -107: B213DA3FB3ABD16B1CF5CA81574D78649382A6CFEBA5A88C0B8DD40B1C6E18520F145968C342DB13A2B4B2659F4F865E8CF50BCF2138A7B09A1FC190676E1895 -108: 6862BF8F73054DEF42EF38C4A362ECC8F13BE7E705573D8E9AC6B347EFE6A218950A5AB5ACAC3607C0C94301E0A085BFAE7DAD5E1863D469C113B790C234A947 -109: 2D7D3040A495F8C089C67FEE236A07C7D3361D35271B4DFEA5F17C7E80B888EA339B936C4475194BBE35DD9AF3BE112201AC21C9F5858E4F4C39A0FCFF0EB31C -110: 1F995515755C98C5EB95818DAF0C55B51192BD8D752FA35EBBF51176F05ADFDC32E2FA845C1821B6110F7EC1F1D1EA963433194BB978285CA4344A5F989113EF -111: 3F5855B07A4288497533924165E7EAD3D91A16F5E832FB341F5373C118D5ED7E0EF8D837FEF594C2039F08A7870EC1C2770B7C4E7185246908976B62A416DE5B -112: 1541B5A9C84B684BBDB543F77CF384473D007992F37498F07709EE68033E41829E29109E7C77E252C241C78AF41C790E40696206D58B2FDEE768E5B321362F4E -113: 6DA9AC8390F4264064947684F53A1ADB49314E0619509298CFFEA1729A944990BE2D4C0988BD6E8BD1062D574879218ED8FC4801877D637ED3B5383C069A29D9 -114: BA0A194D5078019B21910C37AFB81A890C4FECE7B1F4E722CF855A6F2F8B82E4EAD37B7B58C07ACEF1EA2B76B146811732EBE1BC0F76A146207B8213802DFB28 -115: 20631BF1D6555C7BA761B0581BBCDCA5A7B1BAACA1B3D3E5B4D70D0C9B0A279BAF00DE093AB1334ED5994FC17386D0B2BE9E0FB67AC1038704891769AE530BB6 -116: F31F66E176DF632694A6F7E16ED8F15CE88908EF1D1F0067CC8A5C805370B9CACE0BDC78B1CEF06630012B3A35D129C4E2AA4F7302E1A122C7E53C51DA7F795D -117: 18B5417DC4CEE4387338C63156C34BBAFF19A2BB962E4248B1A1AFF1FF145BA47D84C6C8570D072BBC57D912C8048E0ED50060CA33408A00722A65C194178387 -118: 2AE09DC52D7BB9E692822A6FB3D582B805E5ECD2C1C4813F94F555BA2210429B615A2301B3EB7C491153D68AE33AD9D28F2FC11B6C61700D79BC7DDB251BD15F -119: 534390ED2DA55D45402F828D6035819C4528768DBFFAE1039CF0D18F89BEAA867589F78871FBC746E43B59E7886FDF734364DEC4193AABF56E8BEDD801E60D89 -120: 231597B2B71E6BE567C86DFE31ADD7B31332BEDA930C4921C4817B7DEBB0282A12D23B076F4783EA840D890F6C571760E70E143F8565561062877D95BD0FF941 -121: D60A1481686AB8F889EACF2E9F66BC32271E70E3E04B91ACA6CFB90375860E0BFC5AD9A627BA0C763CD7576811CDE2921E9A63C0F0A7A26E763F7EC7902308E7 -122: BA65BE7D1EF697281736B3AFA97FF675CD776C125CB01028EC2894EC2EFB9908835A3882E5E57BD44ACA09DC3B0580145EB2265E1724DA6F01AF5F93022D5774 -123: 0DEE2EBEBAA770891C14346A26834CF40212531EDDD64A21EF9FBD62F4728A16E18C673DC8CE3883156F51854A0ACC341DDEE6A0B71C4CBF797CD5327056AAD9 -124: 0717C9EDCC2FAEE525A684EAAB79653DD83BF46ECB285E6B154DFCB8A0C9F8D4B28FA200A6C224B4620CB0AB5B33B9C8BE77B2B5A04DB1A3EF8A5951EC46607C -125: BADCAAE4F76006290B9090AC81B807E7251EAC041E6CB10A2C5B58C4F4B2386E065E6D55C46CD888396C86606FACC82DE2F3F88904E15D549101AC7FFBA057D3 -126: 751F6366EFC97218AC2E0675E7F375444C8D82AE7A139E78305E14148E07100F5B7EF93B576DCE546A7BAFCE24FE148B248BE072031F89B6AE7BA9CC559E9C9B -127: EC0FCB3E124C482CC8D86BA2CDDE931E521F0B6F3E7F333C4388E7448A7F196D95766CEB8A49A90E46B592958BB85BD7495747E71508877975EB1454A4EBD57E -128: CDEEE6EC4D67DD8698B72C13735657EE9F78BB0E1DD37D0CF06063717DA9DCD617C5F4FF7656AA48CB3F697E36B3904F496136A2B04E19726DEF9D3406F8A84A -129: 81BB692EAF7F5176B6A0E5F2DFC01A045A917649D0B23B22C180BD78672F37F8E562FD006A00AF2D7AF0AFE15C8D191339AE28FF2797E64A3809400E2E73A785 -130: 04A8456D131499586CF7B9FC45C2EC96859F3F4BB8240ECD93E439EFD5DDE1DE7B67B688B583598D7FD50CB179D318D4C05EDE04F6FA318AA1E9DD7D4E279307 -131: E5C9D55B686DD9D7B1819A6144F6272B1FB5BB3B3034AB9D1BF34391283BA614D57894925C3D589A7FAC0CA1B1E98A12E9DFDDC2BCD85D1E7F2980709EF25719 -132: 2C6EF2E1C179BFA8295197371C474081790A63AFAA194E459CDC27AD4453B3A8C0110F9229BBDD4BBA5D6E80F2CEA71059334A97EA34F96810A2EBFCC3B177B8 -133: AAD54FE02E67080851DC84E20F7661E42ADB610D0B105B3EA6EB6654DAF64458B7E0F756392196AE2B40626CC2B0D82E47D74D3C50A607F4402C6C6A62999324 -134: CF210EE9A800943EAAF4EFE15DB7DEB696233A4DD62206D46BD9C84A7EB13B5EA43FF3CE15ADD8FC4BCFF022196197D1D097B7A893A79C6640135929FCEF10F6 -135: C81761EBF3235F4D56697B19F62B4F7445C8FDCE3D7999F3249493D50C19CA57C5FC84CD35CF794F58DDB6AC86E8BD53350BA9676AB63B88214162C8E11C16AF -136: 8E56EB131EFA286A92078F5A3667BC6669D6A7FD9746CA5F208EE38D5265CF27076C1624ED0F98D486C55C28A4FB89C7B667AAC505CA1CFE1E841184615B7602 -137: B6CAF44F87688E9E3651C2C98E840264464DE9DFE1F3E4CE5C1BEAD46C7D9D747DFFE282D775E101591A7254112C2DFD543E44B41E72EFEE30B032E5E015150A -138: 8E7851F56585595ABD2B3EBA5AE713672093A3120798506ADD1ACAA3ADD92D737F9AE155B8A5166C0F047801A93731D4B807DFE15F08D67DEF31A7B808601D6E -139: B36B6689A5F391688DA3A0756A15AF15E6E66701E2132CF6F06326AE9C91A0BBAA35664B28BC5B936D2BF1E6653848C5DB57654685124A08C79FD03ACC0681D1 -140: 24A23CE3A90C8EC3D10330EBDA47763B1B03035F9E4AAE0AD336169A2F464E067B026D94ED4B9723E969C8AAE7F404F7B4481C48EF7545EAAE4E648525A68751 -141: C7ADE61F21133886EE0E0B14438F070DA398B3A5387CABF98B0802662F3BD3AAA8738D36CCC0D3EA25BBE9DD3B59062BDF4BE2740482BF6D4C21D0E0FD7B0679 -142: 17EEAD5930DB3A1F8E123AD2E72C38209824F977674A52F380843442F0A5C82B55F8A362527BF5324124401648BEF5E9E26E08050B1FE80886E3856F98AC1EF8 -143: 9DE4F43CA8F7E528FFF9F4EF5897652323AEB95DF80049AFBA189C3D142CFF55AE340358A71B01797A8B72F478276E6353421E1C0C22EBDEA0C044EA60865784 -144: E259BE34C467B471C94B612EA6BD99A3F7EDE58E237DABA6A6656F7F7EB5466DAF908B7759027C277BD9234ECBB23C5C62DD2C9D248C1AE52865D66B5C256756 -145: E49099FC970994F8293E71467BFB1D241FE99322075795FCACFDBFAB396392E37BA09E66BF492684642FF2A03F8CF92E0ACF4677C21AC1C236DDCA103F0B5A69 -146: 4338E438D419D8694FC40383EB1045FD9DFEBC6F18A9A03B4914687A8639322E3B050F48E872BB7E2AD9013D374D68BDBBDD0B177024C1185320D04598515ADF -147: A36238A5C795B23F42D0833A5152770A4B0094BC19DFA72C935D32D02FAF5D136BF55D92B022D01949FF04B78507FB203302833AA7103729771A112E4FD1584F -148: 47180F9E838B129A7732A8DAD763B8CC5437BAEF77EFD34D3B33C63C09F6314B87B3A1436C6866614C3B3A693BC7926E9AE876C7BDE9D712FB5198D6417FCEF6 -149: A87064FF5DA177F3651488A139E568F6C75722ECF97507316BDAC36393724525291682776843B8563A6B014646F6B19F040B17B62BEE4A0711A7B06A67DF75C3 -150: F358321DC6A376ED500A2DABA60096B817D13B59AA02B56C1F51E2C6804F5D2DE2028409964D5755BFC6424287504994C7605749A5E5D9D802BB42922F444D76 -151: AC4A9999133546B8452047EE31B398F623E01DCACED7BAE4CB0B4DF0DD53B8E4921109308DE53C0924E0006361BC8A480AACF798D6B403F338357E8DB676AFBA -152: 0E73ABBEB68982F163257C1145FA2E465FD6E720EEAF5E532DDD1ACCC690B37A8FAEFF8D7D41564A9C86C2F185E0FBD0FCE75259D34A5E96B8C514EC83CA1382 -153: 094503A1B90D71960F83C91D76754BA6B05D670EC6A8EEE1D3CDC652DA6E52B196E155F3BCB62A9E4EF8C507F377AC1321C4C0D7A03F7D8A5286C0019C358E92 -154: 12803349F15FCBD53F2FE11B67DABCF3F470B8E3AFE8A855D7A918E611A2D5F4DAE8FE847ED1FAF834BB3678C6253111636100A991A80C1EAD0D35E28DB3AC85 -155: F489665F4D8A4AAA679D5E5A1B7C501DECE2E0B228630AEEAA1F5643FC4BCCB9E2F018FC2D7C44ABC4AC0861EBA8B7700A49B42486DD13263D978F8A7C9CA306 -156: D9DFBC3DBF0E3D247C95E16D376E7098A92EC59A54FAB482C330139EC6E06ED514D5C74F9604D1171A127502811A16D1D3039BD03C4DBED20BB765EFD34C5F0F -157: BA56A64D01FCF392A6E2F73D791D6C5A57AB40A376E73388CECBFDB910402043B4DB2F2D2B86E3510986CF1DEC3880E3C739175D5C0AA1DCEA18959135E2CF48 -158: F4B07B0A063AB240E5A64F1C494FCD9839276FD9689AA6720A94B83E579EF1044997F6506C1AD82C2CABB9384CEEA0B77D3970C1B7E13F8DE98AFA869F1F4D2A -159: CB4F232024B2D0C48E415D73193CD83C1A6BB9806CA336AC4F3B8FF7BF992B200504ED5E539CAAE68B1E47D4D8ACFD2E6B4BBC1B518689BBB5BB4311C96FE06A -160: 1E67E36D2EC5D0591C0171E7426A88919EA5A17470DA305CBA7BAEE90002E23043FAE1F4BE003EDDC2520A404E639B03880E3CCC68243C60E243A0E7A02E2CA0 -161: 40E46A8F257265A1E57A09B43890FEEFA57F56BB47551BAB38BE2BA8D143C176749484ADEB2D833EC9D6B70FBE872FA53618E64CF0AED24D51BA982D29E730C8 -162: F399712E5EFBA3FDF6B7D04600C16F69260179AB79545F44EF5849308E6FA589721CF7E6FE384461D05EF02BE51E50FA93C5FEEE9279A953C57EC07CFBE53E1D -163: 58DEEE13BF73ADD8B49EBBA90A8EDCE7030C17D6E6C449726D094F90A35A07759A3BEA031EEAF963C4753522EBBED1482789833D15D6EED7F5214E1AB93C174B -164: 13B2F766E6B796C44429A747CB46D99A9866115C78D2E94DAB52BBC9269B6584D26676CFECC2A9F026AE8E0162B6BB8DCB2242659EDA67CF793BF66963C69021 -165: 992B995865F57633665483C7C3ACD34BD108B5DDF151CED97C0D7AD134A8D9250CA8DC17C5C2A76C1C07989228F8B474814FB116C98D25D8F291D10CE259570E -166: 1C5D5E9C29DD91877E279DB679ACF0EFD8464B0A58EC9A3036EDB2621E8106FCF2A81719FDD1B89F13FCBD20960387754DD0F12876DAA911E793DF8F1991C043 -167: FE7F98A1D7839BB417CFF65A45E2DE806C74ADF2636385FEB16A34C890B524A75452EC096849EF0F905FFB38A0319D31A886DD840FE2FA66E16AC7C68B0D7FCC -168: EC67530458F01366BE95049FCFBF65465CEC9AD7D12332CF898DD72ED4D275F9C9EE96AD02603E8032F9B3B12615329CF0FEA564D278B1DC3B47EF304BF901B7 -169: 77BB3F5E58AF174DED0B31627648A1C7B5B8092C829020A6FE4CFD42CB51143E9DE20E3D827FB070DEDDA94D39BD0D330604DCB190E7252B12B03F48072B7E27 -170: CF33E5358E518807B70D6DCFBFB1CBAFBA7B2BDD20931B2A3B08BF8C6755367AB3BBB2FDCAE305F04812460FAD37E9AF70F1905D2F0D3E7628DD1FA453E5AE63 -171: 0739D32112107994BF3E6EC3A107AE3BDB9E2BBDA1D7C10D9AD6AE32952649007F68D28BA0DDD1F1C45F7128C1D3C42EBFDB1975A143A42949C7D97D9F9D3BA1 -172: A4F0B775988038E50429428C8526793AD8B6EC1F0F3AB7F6B33F716C61B7DFC49E254EAA01FFA422A31D30A8268E1BE99D385907479C7E2E0492681B6851DE1B -173: D2472E93989E1F29BE0DCF991A65BFE0E772CE77850A2F96FC6114EBCD78252DFC17712AF193FC5ECBA371B8FD27B0DAC44AFF6140923885F403904F1664AAD4 -174: 6696E09A153B0077D3586705E4A19FA6B3B2DD8621F5D13D7003017A0C569B7483C8CD9218ED1A252EB160C3620FE96A00E267DA0FA8996B417F64DD4A22153B -175: 2337E38B460CDDB026CB81B59B99572D45BCA4A43949440AA5C9F2502DBD8906453FEE23AC0AE47AB77214E52E7CF06ACE73DD8565BDD315F49A460996E08DE9 -176: 068CAEDFA329C1FB00BA02C80877E0E2B1CB6127FA2224BD14FAE5AD0AAE6FBAE052A145F5A8340B446F54AC9BB2108CF6582AFA0FADE91CD3568B604F68F470 -177: EBD69C96F4F2DB05350B74A475CA8C1FDC671B018A47072A11A8DC082C418EB20466720AF12E113C2D507F02596CB022D2BECC4EF8486CB54260020EB6C36481 -178: DB0770922005DE66FBC2B05B1F863ADA569B76DA9B8CA433C99C2F2B4AD60BD28B19A5B3820C0D8B6B2E443CF54A942B961E5EF1D53BAC4CA379964D701070D3 -179: D435D7240B8C6A6AABCB026EA53BB8DE58C5DB471EDD8173AE30C81BEFA9CCDE8E30758CBD7DED822410576115C2415D9DA7FD8A83CBEAE337E5908A012AE1E7 -180: 838AFEF97BBCFF7692C731D55442140D58CABFBE81BE76D41652106E215AF4E934691DC20F181C2123CF091B6D7552115F59937E165F1645CE0E14DEDB864B11 -181: 771815708A3D7BBE5E00FD677E4EB76B2B9A03A09412284A236401E7FCB19B340782C81D1A49371609DDCD7E38F9448FA657533D53280B3D6B492984E9C9CBC3 -182: 649EAB3244AEDAA18CF0A1FFF6619D63BBB66955C5D58E3A592E53F537FA74C60616B9E4483BCBB08AD7D1F5B6B91ED3176E89C03C224F94E5D3893FB6D01CFB -183: B4B6C653D90EDFEC3BEA0FE1FD766D5736DAFA184C360C8B036B7CC842E8C76BECFBAA7046AF087831E322FFC181073C19360A269851FF4DFFB4712E68560C3A -184: B0C0061EC50BBC67DA4765FEBD4033B8A204260177F9CFD451E97B93F19736D4B0B7478E29FBE76BE17AA6B0DFE9C4CB9C6E4734DCC8AA5EA825F101E5C9B02C -185: 54EB4D2C9B26B8B17818AD702E065407A19A711E22C8E66163E7311D8ECFA54448453890194C3EE892A599125AAFE1CB230C6EA268ED68ACD86DBBD17432352C -186: C049743F49D57D9226AFD26B94BFE9165BE5A8CEA9DCCD101F837F29C63A4201B1D4478EB5C4CE9D8F5D6E91BF89D09E6A0D918EE7A6D58CCD0A46D36963BCAB -187: F11AED8EC2B1C003B8E35F8F2A05861D9DD6B7DED02E28EFA4EDBB0BDA0DAA76EAD810CF1C78F50668D50DBE2AE65009C2E12504DFCE9F9BFA9A14969E1D0622 -188: 1CEB4106BC700F76F4825E6790959CC6EC85AD93D6FBB9783098E367E5C9676AA0D6B8CF9A7DCC67565284E71205551650557D556870B421273772524463245B -189: 9711275100A787D9678CEB38981A2246112C2FB1F0EEC1F844DF1703DE5B0FAD995FAC983526E7E3336B8CDC9DCE56FD66B73811201A2DA6783309AB6B9C0546 -190: 81E9DC0CBF71797104A44E72841FAF7F9CCF35C18EFEEF873450A25AE56564B0E9DA98598C527D5629EEF7F0571D9AD929BAB87A27539CE9898ABF4C57C9EBB5 -191: 28F4214D1C8C5B9291F2E1F7FCE732C3290A691432A65A01F7EAB1A313B83936DC98A3B39B5F7712DDEEB8968001C93A102C7FCFB8AD7D49B29661C9A9867109 -192: 78C7A025ADB85145CA8C6E417C4E68A9DB83FA78A23D0CC3DF20AD1409B936686FF756EB51BD8901157B1D031DE6848D97DC2E0F137BCA1D49EE3FB2D5A5E83F -193: E2C25FC61AFC794F65AA57DCCC4111D4B15331842493F93E9500AF01E2017CB226444E208BA9C841DF6D7ED28955B318511335F842AF3C2C0573227AFD790739 -194: 50D768C744CDD318B950986E305BF74B77396FDABCAF63AB786893B5F4104C2525F2F69905955A35234BD6BD85DB17B94AE7008F2E2C368E9639ABE8BAFEE4CA -195: C4F1BF6C56C494351A880172B9CBB59BB0D1A5955352E10A868D3C33BFEA0484EDF6ADDD009A20C8D7B59B7ABD5115D595B026CCA6442921038D9BE860C44CBE -196: C782CE6A141EF9E6CAA61853588B8C75B3A39CE191C161F43D7C5F88FB77BD5055B21F37D4A49D65CCDBD0E6BFD98193FC0092A34C21D5ED0CAA5F129D462073 -197: 1B2F68D7DC7563C286612B3D708AA725923FC9A2FEDCD4B1F1E2557CC70F3BF65944A2BAD9705303207B00F6DBCCE245C6E653C38EA0896DEF4150DA118A699E -198: C1248D0A6B75BEFFFD70EF17F2D0F3CE3628BCFB6A634C93E8F0ED97BBFDB48F6E5608511AD7091D7B062B795EBEDEC67696679EA092F7B84A64C99BB224D387 -199: 20A3D3F3676947173C7FB824B40069A202ED3A5637DB41C97ABFE9E7036D6C009BDDD5BFFF97FE80EBC40355A535D7D3A4B2FDC09B809D3BAE2DC31803413B27 -200: B85500CB777B14592A4562A26B13AF3F08CE74E03372D9622E29C1FB7988A86B8C00DDB2049C1395B43B17CD5C415A5AEDD71E05CC0980EB9520D4CAABBD6FDC -201: DB553A36A3EAABF7BE6FAF85DB96D3D0F207EA1E5B55DE589A116DB80C21AE5B1826A5FF3BB9D84C26A403A1E5C00BC7D2F6DE3F6A9661899D6D75373ED76B71 -202: 5580422E6393475B7C1F5010FA7F4395B969E190AEA056ECC88783A8B5FAB8ACF130DFF39DC0175E9BA8B63B4FABA7E4A36FC55FA1504468727086B2D26B5818 -203: 1CA3DD194E7BCA2591AD1B95D0CD4CF7938334C95A1EBE2C8C1A9B75E6A85F534C094E652248048923CBAB97CB1581E9A2D1AB8375C506159B724F74447A3201 -204: DC525D0EC1E62EA68C013470D77B61377398EDCA82A91C1C3E4D7E5D910A9D556B3AC810FB1457BDD70A18B063523C39BD806A2227C7E057CC6B018DDABFF73E -205: 2F0B9523725B27245D2A1B635DB5A3A3800099546ABFDD95C8E86C67C378D91E4711AD1927E90CC9B50A1A7BE3D60414E487E72445936FD0FA2BBF541F1394EC -206: AB6EB21BC802EB0854F61346F7BFCFFF738EA39829AB2785976D869830DBAC367D59D50C3873B960AC5185F3DBCEABD4E4E594C5C2916A8DC304207E887473C5 -207: 8E1C160A334D41F08918EC084BE12872DE79D00473D1B6ACADABD67E2A6827FB1DDDACAD9BFCF27430AA84F3F7A0D6CF2FFC91E7758F471F2739D51B60125D46 -208: C135532CFE84849FE9F40799E1F2CA05568868C0D44E6832A05C29ED17C5F6D0FB844485CBAE5E50A67F2319C30526DB444F4B45CDAE01A9D0542427731DC175 -209: B1FBEE68843D42FB558D1D9E0B759C168D6F84D07B2E90B646F45F1708B0D6AFF7BA8959EBB6AE4D5DF9A9951D139C81BBE602671CFDC618AA1EB63288DAD72D -210: DC11C3D993F59473F64F16F87D5F085E834306FC1C40D12CE7D6E44C59C31318C694282B0FE53B4B60E1E5DB546D930AB741A8DAAB8ED67C3D87E8E76B8C025C -211: 85BFAE07EEA80F939D52CB18C970C8ED9D4035B57391739C44D7973223C51344B9BE28C16EA29B35AF74A2F8F7581C766D61525DE5922A83A1BB600D97F7A3F2 -212: 26E52AFEE0F11DD79061EA3E4F97205729E6B61E50B69CC2894CABB08CFD3A10C41662CA6F6FEC9B5B80ACACBF968C5B75BB8CFA31D06C82D9CFE97F6E1F43FD -213: 74F18E92D85D9AE79BD62C4B8FFB2116DA8157E17A6927BE2B2D0D79CA101F7CAD6A25CD623C8756D49B9CBB903477B9CAC67734F84F0915ACA9025A9D5C6DD2 -214: A51B45BC09382F85334EA58CF7E7747457B517118042D53D773C66668CD6D5059B9997DB183B1C0F2900AC9949028D8F76DD8B7259149388FBF340834A3BF4FA -215: 59DC88A518FE44A7FD0F316BC8B5C865D370A8BC82533037C9872B24390F7969ECA530911463520218D00B415409AFA90A63F88EE729A252F1B747C414414091 -216: 146FBF362ACCEB8DF79A761285A0653484C38585817E26A7B8906FBBEAD70031160C7B924D3BD3A9ACE28A5712ED0E6E89CE4E71493B27F87BF73BF592D80600 -217: 74B6738B2F0904FD59F3A680CFBFE4E466FB5094037AA1942DB3A0017260D75AC5916E044CAC6BD0E25D176FDA267542B2C7EA201F7237E18B9D00723E98A239 -218: E821A4033FAF0FEFE525115109D0B836A22C287E3B157EC302768BEF7989AACE853218E5AF7DEE9F6E234AD50ABCC8A9658A0EE4D9FE050235341C94308D7A4D -219: C3EDD652D2F831B1C783CE1B8BB8CEF9453FC71F519A4800EC2362ECDBE9EC142F768185D55E322A32AF421DC84EF84615F7F3DBE6BC6E702B4BC8625CEB5BF3 -220: 6A3CA0B5A43EF42A1D6526C2F1507785248374C7D2602079A923C841F775A652724C29E788695B52387778CF2E2BBE2213B2FE212D729E3718D946238FF0E57E -221: C425148335AF813E36D072DC64C7EF6782D7DB981C5142B5D32D6D4338E06AC64363E86E88DF018968FD659DBF50A4B77BE2A02E71B243D65024B36CD71C1796 -222: B796D1F5AB11389EC7EC8DD4D1D5AAF17262C8522A4AACF454B44A7ED71E20F7028169F3164AABEE4C716B38271D72D7ACA3E54B30B9E05616AC51594995F61D -223: 113A56E96ED6F8613705B5CCA6CC4F2138204D7BC0C8965162597C1FD2F6E8143F57FF1160F4B482F7430536A349D20918064AAD2BB38A9D4403C16977B9616D -224: 9590A3BD7A0613381159E1E26342C150DD9B0A937855BF78FBF625648448B540158196A2855E7FCB967F22F5AE927D60E97D0C1C17A01E8D07284FF985F54B8A -225: 74B11968CC7CD925E21037DF011F1C93B2EC34C34A3224AA281ACE7D6F1B10F2A755DD6DDF33F1A4630123BC1CF875894FBD8D8B70AC05F8C3C1076E346A45B6 -226: 85A08D6993B7E5C014C3CA957D6B53EC1B8A5CEADD5060BBCC350915D3278F28E238425DA3A95AEF725A23B1BBD43E5D8832382BF76603F7E2E4FF711D540980 -227: BEFB08F621281473943AF153124256386570261916E5238FAFE44A72801D7C204A974B38696C102748CD1DF65BE3EA8C45A40021C28C7E4BB143800A3F38A93F -228: AFB97494318F31A4C6813246D125217242247D4EB6CF884B244E59655DF866B2820A8E1A7123DCCDE98ECBDF1F6125EC5B95A0D9F85F05CB09537B3FCFC2CF3D -229: E8C2E1D342E6503D77328A2C1336F95939B0E8855F75CFC61D4B03F4AF2305AB57C7DB383055A51E61AFB75494C222B01967BC74B4574B8208FC337E09E57075 -230: 0B396D0F15F49E60994DF4FB1E7E526A272A5B41FAB67EB8A41547CA6CE5B7F3FCE404B6A46BE79AAE37B4DF2C2EF68EAB71F39D5908760FB2124C7C83B0AAFA -231: FE86580438E8EE3459A62E73AF0E14F00F4F0FAD0447921FAEB2B77A0D8786784659B1F6D3044538300C759EBEF7066F9218F9386FF6C8099E6C71B5EC6B721B -232: C7E45B1737EBCA62C87A8F0C46F661BF7D3FC020C3B4B91988FC36C38BBC8DE05A22D4BF148F96D31115605D7B04D4CC8AB3F8738B652E933D76CD6966604CAE -233: 2C43F84381FB618512EDA0278FD382AABBA41FCF5546312DA565F4503CACB86B8A704B3B49C0C86B2207E4641F71FB5E72654B0AEE705C52ECB2E8FAF109FDF0 -234: ABC4EED8635DDFFD9900F5DF8C6246CAF12D8CD9333F38647255DCC52A20B6DE8D4109957CBCC2F48F52346579E008091628FD7CAFA092F2568828F424EABF26 -235: 14672F19BEEF8896F751B0BCF40FEED78A8093AA4DCB590D7AA588DDEB3170460381FDEF3CFB608D55F9E8A295A36DD64DE058C9EFF30B1D1F1A3671388B0AB8 -236: DB87424F975B03F925D8B99A1DD0967D2283E408B6B0155851DCFD53C0C00B05A42CFE14B10408E0F5985809813D35D7AA7C70C1A7BC852C7F254F0303103628 -237: 095D34066A6E202C896EF29F3481EFACBBFA622676F58E90FCD5A0591124E489BE3804AFA9BD3E4C92A9653EBE878A88B275BF9B5C8EF8EA0F01C89CF40E5FE0 -238: BB5BC80C718B85BB3C3DCE95D186711D5B90827B2097DE63C647E5B6C14B4766BF8EE8ED395103030F72ADF0C8992AE836086571908DB4A6258616EDB4BDA878 -239: 9A18D6DD0F97B7407DB0F17896DB2A2751B76C69B6F91E821A0DD717DFDEF630EEC1427C2D190C095DDB07601DC0EC8687B7411D735A9A6EF0EEB84A60948BAC -240: 60A614BC40A7DE580B6ADD05279A68DDCAE79EC3DDDD2C6FFF7B77BE9DD0260DA5241660982B77BA9C4B904075F39612F514BC86DF6F68E189FAE2C84A32CCE7 -241: 5CFCD44DECBE3D74708C620C70DA807C5AD58072F7558D950F519691FC96F98B760B02897C3A85F68EE37B2735931660106670C4DC7FA98EE2E18B6DED532A9F -242: AFBE6D9871AFFE6D201E2E61435703856424301ADD5152DC745D96D1BAA3ADD4C78F2D7C5057F1AE8B21FB91879562050C84144A2042AB2CD273025FA03839F5 -243: CE9C1B19D0E0FFD3085D28C5B2176A741A3034C1B76C54740AAC3470C1C8C6E77BA765AC4D6D90D4DAB0A89AFB17A8863A2917674F5A189A5CBF721C14F5D637 -244: F2F065927839C22DF56960845E27868BA8F272A464619EFFD9AEBAF1E40A72DDA81CFC67DEE13C351736C407F59DAE8EE6F2BDA17521CF66F10C73566B7DA891 -245: 24CD3AFA2218863437C5518021D1B96E0A80EBD14EBF2FA161A5E7032FD985BF71EA59DC5E35DEDE5EEE3098EAF6A16698F5BD5903C4ED218868D1E96E4B8096 -246: 1C6AC311730640FE427C1F23B60E817C25E1318109643A8AB51DA74995FFC3F156F098AEF97F37CD9746002DAD22FBED1A1F222511B92AB5F39DA9B53BD62AF2 -247: 37609371EB63AEF0CA6EACED8388D187203A88C379F24970434D87950C9B7DF9A68B618E9E83E3EB10376504F8FEE2505830EFE3FFBD23EFBE081325AA171482 -248: F0C06F6A2C7AC3F0EE428D7D1BA893E73D4D2F417999043BEFBB3CED51F95F7EA3CA882B9E8C1C973DD8A7F450CD60BB5A0B30D44A574E43E71D2533EFAEC6B5 -249: 3A9D1BD43CB3B7D3E9364F05987DF4CD99D573C036BF1337988751658EAF2896244DF5E4DD8984DD494709E587A75EA8AFF93681787AD738A95C5E98616115F6 -250: D42E2D57B36095F0CFE8F771A9B198C7B7E0433763341D35033F32D21C638CD948D8DBE75F533391347C440F208D17F20614309DBF1091DCA10801E16F5D03B5 -251: FBB964B7865A889433E99C4B61D3CD069DEB99E44673068771030EB1B8F1FD3B3ECAED1DCE8ADFA44F9A625472CD4D987EC7ED7FDA0DA912C8AFF5B20BED7F04 -252: 13F67CAD96C3304FF3C2E45D71A2D69301695516EA384F6001850A46A7F93CB74C5A4CBC1C56544166ABB6C9BBF90B9559320F5F75ABBBDE34C7B8B45C783BC1 -253: 78A609196BB40EEEBEBC04A8794C840A6F831680864D65FAAB093A499A3CF152EAC96865747ACA28392E9F102962C49247E0EDA424A345C4AC6F4B60CC3D2597 -254: F199515CF806EA25237EB93D658BEDC994E61EF70F5665CC2F230E7A40EADA14BFA00D56C1249F2E5C8920977A6C85017F8663BE9422762CF88487B76EE7EF9B -255: E8702ADD4B9034BCA0590FF897C10022C56D08FC4EEE0A43BA85E9E9C2086616B1BE7B6F928A3C53755506ED2D9D62DF5BA4A1862FBCDBA20683931A2244AFBE -256: 6E6A3CDE12F2CB3A42EC8A5D21B435C4DA4DF6CA7E41537D361D8169158287BF1D2241581DE07F88FE92F5AE4E96EB9C489FC3B258EA3842EA2D511CE883883E +HMAC-tiger + 0: 2EF793765716EE48A671BDB5F002103C43734304C8717C85 + 1: AE61B56C82BE9FF96DCFBC20DD02B4BEA4FC6B6D5F4EC412 + 2: B54ADBFB404457E6C5AFCCEC27199D1F259EE1994FFFE99F + 3: 08AEEC38E88403BB854935EB6F1464CE95B044F4B4202524 + 4: 4C9DAEDC1929E22128F2A7ED5F3556D8A6D3A8315A7B556A + 5: 764794ED9EE1F94891835CC3A361FE75C600C7951A07F450 + 6: 1A4C447A0FB8826A0881ED2E7BD89499EACA4B6C49F96060 + 7: 1396A21D8B465C6B898511DF94846588EE8E35C0095AD90A + 8: 7552EB03CE26A8F079AC96B42F556FEAEB756014B8FDE622 + 9: 835B7CCA9D9F13BA2A36CBD746E5C92D5B2D123CA2EC848E + 10: 7CF4EA88FF8B9A5A57E5ABB6B35278EE9D8653F624D662FE + 11: D588D953C6F438D077A1E302F84E25EF31AD99B9C5FC9DB4 + 12: 86EC62CF1A08CEA9171AC742E8E615B3F0C7B6FBC95DC3C8 + 13: 6EE7C51E26187F86370A26811C75136E28B0C39A113D80F8 + 14: E1326D54123BC26CF41B30F9F2BA2E732203836AF8A74273 + 15: F211E4C46862E3AC8B8E69976A705582CF6D1B34A6D342B7 + 16: 0C6160FEFE70C81C71B7465F42F070F30808CDAE448D1974 + 17: 492FC6BC091489F926F0F54CBF3E3F6C8CEC6ED14DF2DF8C + 18: FD166027ABD1BD9DBA13E3908D16C403E1691FF173328CA4 + 19: 28D99C64CDFFAC1E6F7B33C8E675E49749CE835A177A1C63 + 20: FD7BD55BC2A684F4875C811143A2997356AA87A300345843 + 21: DB8968E787BF65C00992ED9DDE974EA71BA947395111FFB3 + 22: 4C31B2FA4E6F7F40DECA589F85BB69BFAD1815A73CF9EB23 + 23: B4D8D7FCB314942F171F85EA0953F7816DA9F07D72AF48B5 + 24: 9A6A70BAD76203A7A1F64D1EE34375EC8BCB21810ECE0B68 + 25: D21D7E5EF6F1579C84428AB5D574468933BA037C9B0C34B6 + 26: 3C5292C87B24626241693F0EBE20A96800905691C5945E65 + 27: 350BEEC075258BA7FE0314E6803152B021570F067AE0D4D4 + 28: 6881F892886F9D66E68B937BB3A71FF5CB064611C722996E + 29: 07831F1B2D00108386339F192729687B2F57B9DAB2B1210B + 30: 38DE8DE8398EEC32939A239BC0198B0CFB18D12E4F2A3023 + 31: 5B683578F81867054089AE2E1B20E02B3BD92334CBB01FA9 + 32: E30A80BE07651BA17E2DF0D43A583A9DB268DFF3AB7393ED + 33: 42341B1EC4F61E90571188F5599FBA9ACF884B1E15694921 + 34: 7D98297D65F5FEA85CB967F22AE0707E03F305BF1D2249DD + 35: BC8EE5CE0FA8F9E6694406009EC9358BC420B7E5DE07B6F8 + 36: B8095DE6770CB4CC2127FA672F93F39CA4AF0CCBB9805DDB + 37: 20C0E981DF1B763B6BB47D43F66765AD434127C1FC55F829 + 38: 59795328D40D2CE6CFDED8DD5089F2D5B796C9438E7646CA + 39: 0789CAB229AD54416C82CA5A2E667EC7CE66019FCACF766D + 40: F7C81B1AE705019FF9A9905972AFD72484A70E11FB81B278 + 41: E72F52644BF5EE59BE87DF692EF0070D095115B7664BB53A + 42: B9A5DD984358D0B0F3C2781BA60E9BD3473C1C89C7982F23 + 43: F7BA22269249759F1A87AEA0A125D4DF9B58E93714449008 + 44: 5D2257317F8978576CD7D2CCD346E861A59FE949F74A3D82 + 45: 199D8D5B0B5C5B61E046F50E0E389DA6F19CB3A7A37C8588 + 46: F489CC6CB2D3E9F741D6C9008265CCA97E7E54D62F5EB85F + 47: A5E7CB0787EB7E62A9CFD8486390A6628C9876654B9E85E4 + 48: 22FA78EA17F0D29E16276C70A564D234BC4ECA7302301528 + 49: 4422534FB9EEC601CE7662345D6B6FF932E54BB0483C2F62 + 50: 5D2E2B90B460D393F36BF32B2F491E224EF388FA72A48501 + 51: EA5287BCBB856BF04FC785541079087CE24783E9310F3090 + 52: DEDA3920899FA69F913AE50A4F0D7119C9D3CE8F4E6D5BB2 + 53: B2F55D8EA64C9842BFEA4FADFE616664CD44C57D53998C58 + 54: 3D2C72F26188E1EF5C0F0FC8B541224066C4DF455FEE78FF + 55: 50BB36BD8A8D97E4D6CA78DDCDAD0690FBBC93DC9A66BF18 + 56: 48140E192FF8AB74FC22676AAAA186C1A7E2FA0166E986AC + 57: 40AFD540C40EE7E598D26AE3FE5A47939299B5DD46B0B4FE + 58: CEBBBD763B077342BA16D4B20412C9EDE0F0508ABCE3501B + 59: 0FE4DFE539160F5924C324B8B43DACB4F220195D286C6FA1 + 60: A06D135075F943CEE74AAB1B8DE08B772055551B1E73ED48 + 61: D4E1B5EBBDA5CDA5040DD697BB96DD702C6730CFCC012992 + 62: BD5E77B67B42C507C4912130C8880A9DBD66431DCA0C0038 + 63: D81F583A9B4DD1F48028CA602CC0F131D60561FA34F7B3B4 + 64: A41F0481EE52842CDF676177F8E43BC1F1B00A5682C63E15 + 65: CDB29E274ABEB20EECC8378D5BD806997502E4271AB56708 + 66: B8366ABD45565BB3D26CE46B6F419F74B34851863FF4C336 + 67: 5AD2C193D6D51C9C7E56C5BFF55C1D61E045366B51E7F619 + 68: 9948E3AB7D121B15A6CA8DFDF4EE5377C957F0DE891C3575 + 69: 095676D61096853635128A80570BD1CE803AC7249C0A0F57 + 70: 354F4CCC1E5112770B2AB035AE07200A6CDC0280AD088AFB + 71: A8723395E80BED25DFE8F9ACEDA942A77D225D00440302D2 + 72: 0D2BCE0F8CF396FD8277C8BD9B19D54965308D3ED04D2F27 + 73: 54B1939E9944F499798B3DCE3479AC315F2C42A1EF231984 + 74: 5CFF726EE4B2596240E6CBBC66D7C737A4D12A702B40E81E + 75: 82996D7F3F27B473BDA647BBBA7230DF217288F2D1A38B99 + 76: CB95F63E0E7A2EC4F26E94B81A3C8C757E04EEEAB35A8C2A + 77: 057DEDF45207EA885A0BAC5B64240DD21CB9D99CD8F38FEA + 78: 27DCDD1ABA459506EF98E5C8D567692264C4153F91FDB269 + 79: 911C83660F7EE8CFB5F54890AE98CCA36C4C12B8CC771DF8 + 80: 67CD07209988C517FAEE01E64AC4B5CF261B6035069508FA + 81: D9A40C407E2BA852684770A5EB08D8502DFD264F2DE5A5FC + 82: 9AAC50A2BCFD74BE3DF85237478AAA833484FA3DF912A3AC + 83: 38078488F6183B5A94B655F24212FC9769450D93986C9208 + 84: 2EFFCBFA4CCCAFCA66BF8B368FB1FEFAC280C20416BB90EC + 85: D626FD6D285C49F20E99B88B9F82640D93D9E765CA55B5B0 + 86: B1DD178943B26AA241D34031D3128344C6955F6A942CC5D3 + 87: DA0C850E2067F9FDAE433C1230E0F629700FC8896ADDBDE9 + 88: 58E393E353BD7DF75A591904AA99526E94FA45C98D095E21 + 89: 323D0E04D239BD70192B2ACCB9ACF06E2F8C3B07565893AE + 90: F9C4147C6921640C097534BB08020540B420AD569D03665B + 91: 5171DB964AC815B3A6D058419FD47833DDAED71039966E6D + 92: E7DC7C574AFC2C9A59E46CB8ADBD03330A5321B237DF7899 + 93: 97074CDA9FF8D40B0501E9F632ED7335D6A7926101A34C0C + 94: BDDCD4D007DE39680B80F9AF9803A9F21C836EA971250CD4 + 95: 0DBFF45E3155098D4B4C13815FB461D3C4BE41E9E1A68757 + 96: FC16CB95478E4D23A7AD15CCAE3C24BBB3D0FBDC8A00A144 + 97: 93A7CB506481D6A72EAB14A2BA544F8631542B55903CCAAE + 98: 9CC1FFA19736AB6EB36EB4A2C1624FCB6913B255D2346795 + 99: CE3526A088FFEDEA4345AB221707848823B16DADD19AB487 +100: 1E1D790323586DB8A306EDCCAC8C64A6F29A36F772B8D61D +101: 8C403515F2B9014E9519EC04769ACCF23E522D3E22DE7F41 +102: 6B6A634607634804988301240CA5AB029A9E86E51281D64E +103: C7C3483CC8E6B58520B554259EB08866AA7980B53FFB6B86 +104: 96E429611C9E411321947469E2095CD9B0EF29578030E40F +105: 5C5A7F2B7F1F9BCE730BE2779304A443188FD3B31DD2BF19 +106: 70933F999325353277E0AA1F543B5CBED3F28DAF4FC70A57 +107: 5CD6D136FDDF4AE9CE42F008301FB6647096D5007E79973F +108: 1162BA742AD199AC17FC707285301A82BA9CB12C09BA229D +109: C36615F6D5E29E6CABB7EBC44A6D3F7B024DAFBD338FEFFA +110: C29FEF051D1606CEFCE3417BD571CB9188BBF0FA8AB98679 +111: F925144EDDD27244E19E4B6E433F312C6CDE43EF4F9B84B5 +112: C4230A59E54A34D0709F3F1DB02C18EC8AA270078DE424D5 +113: EB1699CAEC36681CCF8A9144DFB5050566042977D15FD1F9 +114: 9FBF0D9B2DD9A6E87240E538590E9799B76E22604D22AB75 +115: 2657EA06D69A78A5895A9169F849B3DE111B31E5673A8E17 +116: D1F9E1BA4F4E52CDAAFC388FA4C366EF4BD5F440608D86B0 +117: 049196BFFD9F77175FA936066C3119293EAB79D1E0028C8F +118: 9CC1BD2CADDEC1D82FFAFA7031F2E5C9B6765CF1727A0ACB +119: ED00438670D68A70CE2E0729997CC9648947EEA35809B8C7 +120: A520A0089BC16C84CB8E05425B330C6D261108EE3049FACF +121: A55B470483E547D2752EDC3C4FDCF3B4C48A1990AD857941 +122: 46A78E772C533EC8EDA60EB4A127FCEBD35E7D0E7F183241 +123: 5EB9A774124D571FCCC83D1F36C603D9C387390DFB3928B2 +124: E904066FC77F73CA41166297A8FC631FF59634B659F0AED0 +125: B85B66AEF7D9904356F1CAA5583757D1D69EEBB8AB1D1420 +126: 6639F85214BC798D71B757FCD480CB78D325881781A3A073 +127: C5B72BBE80917B55036A9AD6908D59293C49373F0BDD104B +128: C0BD695F6B9B42DAB543C31BA73C9497A6AA6419A007A9F6 -HMAC-sha256 - 0: D38B42096D80F45F826B44A9D5607DE72496A415D3F4A1A8C88E3BB9DA8DC1CB - 1: 12B06C3218C858558CAD1DA6FE409898C31014D66CBE4ECD47C910EC975E104D - 2: EDBEF6AA747C951F25AB6AAA0D874648CF18FFECC4C9159F8FC71E971FAC6D21 - 3: 03436338A166E9051599AB268CD74867C6159378069A9FF46FC07CAE375EDA68 - 4: 634758DF0774A587F3AC6AD7988D0965524DE24EBE4DFF07EF622BCB8DA71ACD - 5: 0C08E52C7CFF8B5F70781197069DC8F209552D241687BA0D24661CCCC28D3937 - 6: 749F473E0D934694AB9917569A61591CA50BEF18CABDED51666DF243DE879D53 - 7: B1E12CFE0273F5D27192D1A4B70EEC4DDC714B66C8BB1921C63381F78CEC5219 - 8: 1C60F13A1C539788E989BAC2EBD4F8E126EE6ED82C2E25817C63B2B633FABD33 - 9: 5643F445B2C0656A49BB3DB5088C9E2E4B2082C2B611BBA0DAE5791F2FAA5D43 - 10: C467F47251DAD4694C9C7A6758E54CEBD68FC933C7C57458020774A2A2B4288B - 11: 85C90CF2719BEBF40EF8D501FDA20C342BC406E728551BC0275ADA1747BD981F - 12: 06B72DAC895B008DA249B7B1D8A5133F09D86BF82DE2C4251BFA6C3D8C4CF03F - 13: 49EDB6714A556DF324E41A3CE5B57006E38FD7CA8B90FEEA2ACAB429204747BE - 14: 7411921D759DA0B491D6D4CC372DB79CC163F146C345B4A73D93EEB4C262A1DF - 15: 5C37FFBD1F0512AF443265B2F3E8B6D01AD9B45FF6F373D2CD0A7C6E48D03E26 - 16: 773165FD16D51E51CD8A958E548902B47BBD0A6E156C31B6FEA036F6D8C4A90C - 17: 5B4BE909754EBC8ECBBB8B5DA6298B8341B35D92E17CE7281909EBA1EF568347 - 18: C6EEF2D12F54815561EEED3426D7AA7E671E26D42384B9478D91FC6B14CC76F8 - 19: 4C9FA0575CD96BB1DEF6EA79F5EC7A1F0478E86352812F690C2C2BDB70028BCC - 20: 7F87BA45FC41EC30E76F61E4EADEC013CE2B4C49CA6FE6D2FA525F6BBD45E103 - 21: 9B8CA1D70339A0894E16CE4E76F6655ADDD3EEB598F3DD80FECC5EEEF3F638C3 - 22: E4608AEA430A638799991B748BB858C91AF58F56B226E1901D28336B30498279 - 23: AF4F9C52079B28546FBB44EEBA20C7AF0BF493D34EF6967B07CA32FC4DE25ADB - 24: FE51F3A9313EEDAAA991350AB4D1D7045D42AACF3AC7155DA3AD9A2F1DE3A73E - 25: C1F5AED9D77F85404A4B308A139D33F351B20C91A738E698BD8182F124D96C82 - 26: 3CAC12A252B93B7D724AF9119FD3C18E85E88401F93BFF42AA05711B9833B1F6 - 27: E61D4E94C212324A64B1A0C04B2237A9A1C5CC003D83EA80BCEB45452DCB42F2 - 28: D01BA47DABCE4704B6820EC0ECDBEF137B9C4ACB80DC99B7C9220CFD9F9CE363 - 29: AED502C53A8B2C76F671376CDDBD0596376B3664B917CD9C9ADBC489543D4721 - 30: 3405AFD96584C5E5963362948D112A70155877BE3B5EFD479F226B73351ABAF0 - 31: 5FA0290DC68B72B1FA27DBAF157923C706B3F52CDE9C4EE38CDA31D376B0BC0D - 32: C1391C694C985CCBA707A8C78AD05E2180AF6B4DA5BB877AAC5E2AB33B4890E2 - 33: B018E7B15F92DBEC58F767633BCA3BD0D84B6D5B9443784DC1757166D7AA1C16 - 34: 8D9E2C84967004E3957DF59D502BC11CF8C8959368117EC5DB56AC958A3E791B - 35: B0EAF9C0E869D7A304DDB30061A73C580B0A6F9D49E15442ECFBB3B5A851855B - 36: 0B48B0D8C3ACF7B4F9ECF8E46563C921B1B6720B6C650D72DD1126B6763CD595 - 37: 8879D239EDB09F6606957D96A1F4BF37EAC0F3419881EEA79E8BF1364FB3FF6D - 38: CC663E436DE42E32EA110F9D90EB990D9151C9F06D51243D2076B0CC45361736 - 39: 732DC3B1F809E55C498C53FC75A23966CAEA16BE984F795CB1BC94D026FAB30E - 40: F1F0EEC77D97A0234D0F19B2FB12A96B6E2FF8626F79A74D4AF26CDE1344D838 - 41: 75C9D8C7344668C478D8AE6D9E2C41E336E7A2504CDD43B73CCBF78B4C05EEB1 - 42: 4B149BCA6429408B242E76C52C4D3A0A5F5437EC0AB6D24D71EB1AC5496D75BA - 43: EDB65EBEBC0411B4FDAF186033E306AD500711CCB80E770E99523BB2672A237A - 44: D1BBFF5A48346A0DFD5CFFAA7A2AF08C27F3FC2908D7A5D2F575E07CA9E72474 - 45: E8EFB6373DD3457610E57750738358A50026D2C6704A98148CDD69BFF7B70551 - 46: 8E3733B729CEB97444BCCA405044B98F45FC59BBA86444A3FC0F4DF4854B5C4D - 47: 868F3EE8F4D4DFEDC3FFAEEE1FA069F5FBB2CB818E63C28151C1566634189234 - 48: 3F5396115DC7F17AAB19A3A9779CFFCCA57DE7A7C1A42F748FEC49B7D8C2B82D - 49: DC2A5E3E176A693AD8CAE551A505729B78FBDE778B526E28953BC1A56B54840E - 50: DC91FD745E9A7A9D0B41C79B3B3939B84BDF78BEB007F9AAF8FF82084759223A - 51: E73DCF5413F17D4ECCEC813DC060EF907C2E952AF92DD247A0AE2BE798E6A40B - 52: 696B5EE4C1E1D8B60B0015EEA2389C9A35088022FFF10034D0D09FA722A2A3E6 - 53: F86C07265389512B2CE240A89EA29D61C6C79C2738FACA157B0DE43294485682 - 54: DB31CBBFD28D6F8564219911EFB748A5663E482DBA26E38634E8E27E3CF65707 - 55: 2F9675313AAB7A940AE77CA906D0342A448FDBA3F7589D14B1344D586EA157DE - 56: 7D829FD994258EF2AFDEF22C8CD5CC1D29A9A55B62847B3B6F5DB630421CF999 - 57: A6CDB9BC9AF75EA4680E895E8EDDCE76F536F7CCA571D62781A06DDB3424FA50 - 58: 1B4186A34EB07F5B3127F2BE0F3943610679DB0F6BABC7DA03B416FA577D36E2 - 59: 7B5DFF3459DC10B9B7AA2B2829094F97706DB5B2F133B8BF9F48D90253D68359 - 60: 2ABB68160300028BBF3B5A414970D11DF4FD6F4B4A35029DEF8492ADFB19A480 - 61: B1B13ABF9D20C42E755D63EC63C016126259C8A6C3F9AB3F0F6AC5D0BD44ECA2 - 62: 9ADDD17E5CF407CDBB12E5E52A50CE134F1B48A2A2AF90D7308344FB5A70485F - 63: 6A4C06DF40BA515C56476471D4A94F87A2B91EAFF6C66510892F2F20A342B736 - 64: 555D424206C003BAD0B08BEEA76DFC81B307C79BBB6E4F15325B2ECD37E04423 - 65: 8A58733E0B990D0D82F93F77DF36E30DCFD03B3181B73C544BB097A3A73B6AC9 - 66: 6FCCCCA4172E30A281A702E36E7BCA07370D4B57272385077A44D5F7933DD2FC - 67: 3B1A91E49AF88B1832F8E91109C7CC5DBEE2847D9ACD2A57404DBB565480AC75 - 68: 69584075C278763CB0B09D4C9E15E9300A191BF99907049F14EC8DE24D86C121 - 69: 2EE24340D13E68B10B95C3F77D55027F98BDE6BA5328D0C02CF89965687C062B - 70: C04B37F5932F427D40E21EEAB7C9594B16BFCF4F5FE2BF175CD63C62F2CEEAA2 - 71: 058E1AC8971ADD2617A4BF7D02B46A8B74A4D52B25643DF9729A1E7DF6CCC86F - 72: 18001F246ABC760197482E25F3AC64B14A795E55B41B505D6027261BFDE7C52C - 73: 4AEAAED524B173E08E54A83E2D9A8B8824E6E2F1B89203D698E9BCE7C3242F8F - 74: 7D82CFB1D7427302889CADBA23A99154CBAC0C9ADEC94EAF29EB07DC86B0B7E2 - 75: 18D42E92BA532A409CEDA8E3A07E751B430800827F5A9F14D93E3ED231BA08AF - 76: 8CFBA378D8595372DCE5D9A6E726C23512F84C0C1EC3C66ADF6B6C55DF63936A - 77: DE1A6E280A9054C91B826785928F37A16E1D2A9A3CEC831185B26D2B8EDE158C - 78: 920C40B4204C7F3D4775176BD245BA0276604C568B3C29943C9AEF1A1C93428A - 79: 935BB39E5FBCE5C4A15AC2A854475578CF80308E531CA86818DABE69BED8824A - 80: D608E561471CC09EC0865C826242CA26AA1C90BDF1625E1A38B96E3EE0CC5F04 - 81: EFE2A8D806A1A71596A05A2F5F48D18CFD4A742247B04E8089FAB27291A8DD50 - 82: 80235BE35DDEA5D49F124D8BE3D143F87CCBA7D0608C7E2CABBAAB01BB95E477 - 83: E9410E0DC14F3BE36A49A5CA673C12E18CBE4F0817E0C1CBD2069349F8A09BBB - 84: B2042A81A36F27B4CB96DBB52A61F701A815869FF5AA0CDCAD0327E1ED1C2F22 - 85: E9E5A9501B24952DCFBB9D59CF95A9A9E6A27FB7315EB472D1E2B7F523D06D42 - 86: 99193B4FAFEFFC932B261EF169250B96901ABF877424FF667CC0DA0154C50498 - 87: 1D9C7F7E681D20E1E0324EFE71C8B6913FE8CA87EE52E443335115AB2C458E7F - 88: 7308DB7E2591D2342109C5084B1174F07D289FBE91472FB2D8C06DF39F826B84 - 89: 90F06ADC29070DC50A23D3F093007E273E783491A70A2F0AD6BA40E34F02518D - 90: E676DEEDC972019F10FEC24B4AEAC0A97870E924F7B1D6D3ECF91EF38A2AC544 - 91: B5DA3B40FBF373795E67A6338F9AC3AD742741F34048930D9336D429D02EE78F - 92: 6FDE20988863CE157042EE52065EEDA233BB2E6EC0464B9DCF2AAC1F3A18971F - 93: 428D4CFF477F0F0379F634D1E7C15E4CE6DA067ADC45221A860C9C3AC4235753 - 94: 9EC80B57E921DA3F81D13B65AA851F5971E4074C96E0D8B64E50A7F5089C1FC8 - 95: 9088151BEF766D0896A48EB6DCC8A09D151C3396FBF3A9FE193C5E7BF9030B01 - 96: 86D853024A762536666316F363BB867EFE25FBD03BDD28EA7522973A1A1BD95C - 97: 007104BD935B532BA4702A78C505D67B41358A61DB8069585B91B1445DC346B5 - 98: 5C5709F6202948E805FAC25C454ECFADFAC693955864494E511F0CD1FC9CFDCF - 99: 0B010F71C5323CC96D3B8DF71170968096E44969EA55B4C3DAC632D30D81D529 -100: 54621EC4F31CC7F6273601D81674612B44726B5CC4A76EAD2BBC3D32DBF62A9D -101: 28EFE1AB745BE64E5DD7286C97360FF2D287F862ADBE44380F85E1388008079F -102: 831BFA684C25542676AD52819249A10D9EF9C2505D69CC1397D0D39D08B39E5D -103: EF7922C40CD96A47C5E7AE4D958B495F1D6954EDC20596E303CFBA43190A9EFA -104: 3A0262EBC746A7C044C1DB043951F7EAC645C40F554898D3D7B2B7AAC4EBD396 -105: 1F2CFBA7275639A12DA7CD1986F920C47850DE3FE13C931618C0FAC765820ED5 -106: 7AC8913C0975101E187FDADDAC5B5EC467A25869C4E630EADBB42DD2DFE4958A -107: D386591F326C91D274FE625A667B6F9F6F7D99CF56ACB365A218F1CF8E167A70 -108: 66286CB1B61156B005CBFC94C2CAB1A6694D7F123411B8A123F2ACD821C291F2 -109: 844D1038E710690050DA737D56FD6B17C261C7BE512713E62033384B53C40902 -110: 7EF970C40080F554851277F4E950C6F378B0A3DA3CD1BE250D976162F8A4EE79 -111: 9BC20A2B67566688BCAC77FCF30259F11D9B2FD2277D033E6AAE19E36058A353 -112: 796C72D95BBA1A4341C6B0397E165DD21CFBEF55555B35C717CE33B6C6ADE490 -113: 1E6A9C1F78AFF266EF8FB25C32C1FDFB4A0F64AFFD046D257470BF6DAEF61D6D -114: 0E1AD927AD658C5E0321333AF8AE4ED69903B4F22C5DFF90AC93268507A7C86B -115: 07B7A778E2931704E7FECA284FF3B14071E255A2B824AD0A2272D21448579CEE -116: A8D810DF06368A0E825D6DB4394916E43E217BEE9303AD4096A8E1CAD37B8703 -117: 6A9C7D302CCA1EE170366F355D8F40AE3A20D28BFCB2BA163DCB68E08DACB748 -118: 40C3A8B08FF9F767491E4243D1808572FDAF1D8CD21AB47115849531513D0750 -119: F26EA6760AA80360398371855783815BCD34431E0CCEC58A34A67997ACE43CEF -120: EEA78D68A509988ED6D7E3F27FC22F3EBCD570EF0FE242A0251457EAC4C3C1F4 -121: AF977819B87F2E63C0E131DFA2A31C555AD831ADCA6DE0FC1BE48D21A1E7E666 -122: 846A75DF3691B2BF224FB0E66E360A2E8BB1DA32422190F2B319B73E6900AD42 -123: FFA997FCFABC9FCAD4B58B0EF848890FB23B974CD57FA07223037450C371B116 -124: 0028C776965A0AE5E9E70D9B833BF328BDBCD06C5A12A2F1C510911E60AA304A -125: 7FA234C59957C214A7BE8D1B909C540B48E54414EE5FD1081B4C339FD2204515 -126: A840BEEBF2C2E80AF2E4830BB26F71AEE48A9C65DE4A9425DA9F98FA3A37DD84 -127: A95332415EA29A8CA6FDB0F771E3F2262C6907DC45B0AC8BC229F6009323C3A9 -128: 8B185702392BC1E061414539546904553A62510BC2E9E045892D64DAA6B32A76 +HMAC-md2 + 0: D39AD9DDE006587A8BE949B11B9288F8 + 1: FCB21B5348C95E8A8DCBEE50A80302CA + 2: 2F26B6ACCD0E03FE9B21A1B0E75FF665 + 3: 17CF85D985D0D85F545897CD42C6EFE5 + 4: 1537A6943B4F5AC1272E4161225D987B + 5: 83E17165D62CA6E4B9ED67DF1E599954 + 6: 7A3195C863DFF86A98968F254E128E61 + 7: BD05057AEBFCB92FA4B07456085EC6C2 + 8: 23AC0D307BFC2E87760F8BDB21851DF8 + 9: 2CD26A2F2994106A375BEB0433575BDE + 10: 1F63BFC44FDBE9A966CD90DF82265EFD + 11: 72735FAADC3819CC24CFCE1D589BA311 + 12: 28B589C3C8078B8FFEF1C8297E33C1E6 + 13: 70A6DC014CAD2752931A47C0879D2371 + 14: 81694317A37FFBA816504974F38B4829 + 15: 72F26208B3051F1B938EA7E03DD8C107 + 16: F945F57FE0696A4C81EC59AE69384FAB + 17: 54D8DFCEE33969486956698495B4BFD0 + 18: 508B82F88A234E753A9E305E15A14D82 + 19: 527D77D2AB25131693B02F653ACBD90E + 20: 4868AC540FCC3A896D5A89F7A0444D36 + 21: 6189807C5FDDDD68D20356ADF3B90DC2 + 22: 0356362F2BC4206F2B930C4282213758 + 23: 2F59956F19B3CAD687C66C4EC3CC916D + 24: E30CEFBDA3FA1A8EDDE3B72614ADDEDF + 25: 33E0E6BFCBC9581BBCDF13F4D3F26724 + 26: B11C6476F9775219A9F18B5E88857790 + 27: 49C7A9D7F56344BD405E53BE927E3A58 + 28: 99A06874B0F0CA45C9F29E05D213195F + 29: D21A60A18F061FC453AD5AC2A519071A + 30: 2F735E82090144C036E3D12DEF2E0030 + 31: F9539EAC81BBCD0069A31E2A3C43769D + 32: EDCAA9C85A614AB6A620B25AF955D66A -HMAC-sha3-512 - 0: 607063701A568559228544D63A27D3EEFEECAB50933A989E8A2F5A6D0741A463E504D4C03A1BE0E8FCE99A20368DC5AC0F60D90CA0C48443F81A51D4C8AC4A74 - 1: 518958867D49C5BB04C52BCFC355D0B18A92B7214976839E0EA15E0BE83FD215D6DE2C1676A00D92DBB670B752F16BBDBDF37509AF380E14B566F5D46FE1E91A - 2: D74E78A3C4A6A71F8D2D16A41BE30399DA21718FE668D66598B49CBFD4D24EA980EBBAEDE671F12D01F48B6C6CB70CD6467AACA5E7338195137F899FE7B7F03B - 3: 23634DFBE24D8CE8C5A5407632E9F14DAC79995695D39E0B39F817F01A45BE19339A5BA5812683CF81DAEF4A73D76FF3E386D9CFA78C4204DF10474A8175BEF1 - 4: 9A0F5434BAF8C7BF60CDCD7E115BC1DF46E081690A85E706C844B00BA5C314AAB1B2053A795169595FE95064AF11C819B6F7699C7BB1787967CBD5B8BC8B765B - 5: 52CC5A5E5B44E77437FDDD218726B524FE2671D6F183851D4952C37AF9EEE91809237C88804791F0470084721C3A576A17B4F035593371813CE11129CD703823 - 6: 2C2563F93E4CE7BEBA6656A4BF93BA6D235FF6CB0D988A73512D3926911499BCA0E1F98EBE58E4615268BE8AAE19F75DAAD0EDBBE829259612165786474523A4 - 7: 2222101A59FD264FF005B0B18FB59723509E95737299567E32AD2F04A4E5722BBFCE67BDBA2B9608EEB14980793F49C342EE82BA667E68A08282C915CD5454EF - 8: 60E480A794F5C5E6785CA377D789FCD1C22EC85BE9853BB8C24804DEC9C179BBB4F6A9D2D0E89894561C8BECA8563042B96C815BCDD02DA1CD05AE7256396C61 - 9: 06D1CD3879AA2E196DD81E9F5740C7F60EA0D140B424A0183FF536FE6197B065033B31F755C62FD7FA853896C1433536D7AA3F486DAC868822B7F6E5D8B115AA - 10: 3DEB62CDEA3D8A58535CFDF2716A6512FFEFE90AB1A30CA9DED0D5D86407F0FE5541B35A1CA033BA7D3850CBE804241B8B78980FB4424FE6AD7DF029722979F2 - 11: 48757ABD9FCBAAAA71E91BB6B6B85323EE8423B93404CFCB6581CDA1B68B843F25B18EF7C9699B38FF8A2F114F53FB87BBA8714BD8205F4CC18932B6B0038729 - 12: C1D5946322D900C51BFB28B8519FC88C84F3B190A073F6C0DB8C6D5460817D185D9C19D939CBBC2C6634F544F59120782940443432E4B43D47B0F7B936441452 - 13: 8989CA4C20856CBFCDD62C7BD1C0EABE77C832010B5B2A493B805EBF0CA313B30BB1F3F3833588D67517CF524B1A46D2E825C584E2E681FBB80AE6C827CFA604 - 14: 023DC361B007F52873873B28CE6BB94A9262E5F7BD2252B2F75CB10EEE2B34982BF8167BF08A9BAB42B899591E903A4017DFD0E7B2C3754FB23D767F0BB09DBE - 15: D6E2962C2AD2CE76ACA3D9D14A32ED485A04D37BE939D240626C058E2F208B19640911948901530A32C78D19A50D0DC6A5035D9B12859686DF8E6FA7CCA7685B - 16: 019281117A868EACB7ED5B7E251FD36A5FC0405FCA5C484D86AEE22B20B675BDA26CFE622CBE85E3F7C547AD229A2A913728E410E0AB344D10E89EDE65D1E6BF - 17: 0851CCD83120791AD06E52DCE7993FF980157ED918F2EA262A349354BE376780DBFAE7BD04E4734AA333C1C2879DBC4FB7273F88C114B036EF8882E4BEEB01D5 - 18: 7D24626AF0DECF1DFEC5862FA2BAF83525E5AA62A3A1951C1118529F3F5DC12F1B918D02AD55C2C9A4502B5D1521EEBBC7BAF4E2EA229442F64D3015D202D209 - 19: 107A9DE066CF944A939024FDB1588501B83D9121C3B01E63D72491D5715067F4477EF88C2BDD335B498E3EA23068B83D0E641C5AC34FB8B11ACCE93CA5CF4193 - 20: A224DE3438312A8D905D018F2D4C4EE57264D91C84A367AB4BE410CDD23D43E039BC2CDEDCB70C60E807935FE1F6A8F9B913572E5A3DE6DB9027C1B752117786 - 21: F534E03700DB4466AA29FA903D1B87204D3EB5EE214DCA9B25DEB3F1FD0FAABCF9F113C03A49C022BC45F74304E616B61C1AB5130101A9DA99491E467B87763C - 22: 052CBE4C2B0E9D7FD911B80D0E9549D9016D896A35675D7A44ACF2A8222F24A2AB31CBE9D46698F8EF267814A9955541F50B2FEFD8D1A3243C1726B2E57722F1 - 23: A8A686437589EABBC9019DAF5B603393356DE6F251F274D290B210496D5B4626D4E81918DC5F4D261B71C5278D7A61A2DE5B3C5D024DD93399FE833E199A81B2 - 24: 9C22F9F56A255A15D9F7CB0F246B1D939CF22F742FA3F9DA218D69281D0BE850B1117455C13DBA690AED08A9A512BE0CC28A160CF80002A8FA868F8A299445FA - 25: 407780D19554DA490CCBFB98DC2D09693EA792409F1ECD4ADD32FFD9B586A6BDB14E1576BEED920F6CC65FD0A66144D2AF69210A8EC2D6C0EF3EAA032E972B30 - 26: 9D7B8DF3A65E5577A5E298B28F2FAF62FC535376C59C8956D3DF408CCB9C5AEEAB7E70E6B2709E91BB2FCEBAA4639DD0CE122E74F4741045E209EC68B7F27F71 - 27: AE8412C84CF6248D0B54A33B250D44D2F3451D1AEE5C04907BE12CBCCCBA0BA9D0A107F0746B6684064F3C01E300EC04AFF4EB5461FE3C0E92AFE83446AF2A2A - 28: 349F1D06656328D19B0CCFD438C7D49DA81755D504D01A8C5724080DFFB5564CD4E9A71715828138123678B4F237A49DC0494A40EC55450DC9879733C95BDBDE - 29: A47879EB68AC09C02362F5A4473ECDD87ECD87B78E916669F15157F752C2C6CCD902B2FFE9A15C7C9FED7B2C81D6DAB8F1FD8A135C8D952221EFD3E776D435DF - 30: DC20BFDE7180FCFFCFEF3B4B7842504C95D4C0F7DDE990A6489F961968D518C94404500F489B1B3CFA404973D5845DD956C18BEF2DE701F26C0CE8EB11AA408A - 31: ACD92AE66B7A42D4589CC33543C2FCB960D5804E37E456157A3C1BF99ABD2E077118B016529F1E68AD71B6A1A241E2FAA7D44BC9DB245B91E088B5FB1F824D5A - 32: ABC093135FAFEAAD1AF51E3C6BF2E5DE22BC81E7D4AC65712F0B09FD9771860816673E4738E280E6DF00F2F2B3490CDAE23036D3801FC2BA6B8CDF7FA59E3EC4 - 33: 969D35418093A58E650E19E9917A3DA6A427B8A91EB1826201A94EEB2F59A9C41E8798FE82633E32FAA2E700FA31647EC14EAEA42306255F6ABC8CDCF50F48C6 - 34: 434725B4FA11B833E5B0FBC922160E8B0459DC9F5DFD83523EA0D0B36DBBAC4D41D13C4875CAE177E4610E005582C6B18248B9F728BC3DB0B77847F7800CB451 - 35: 706186D7D5792137A90A0BFD3F550A7EA153FED6F925342738B01CC61067D43AE1F641E8979D08B0597FF54E98C01A46335723F17999E5A830CD3AA15E6126CE - 36: 3BD4387B31D794D1B66F1D47544B9F708C326DD6FC5C5D0067FD95193BF10F1E39E42EDAD18E5DAD57FCA8F074F2BEE681F6C42A98737D90C8651336D8AFF9B9 - 37: 071C211B122DB8CB871A56C9F02A7649A26FD13D007BD3FEB1F63AC2BB78AD39405E0C4A846C33863F4C28F0DEF5536AF15F0D411D1C6FC6A02468BB46CC25DA - 38: A9DCACFC97BE053FE0758CBCA3014A4476E75F223075C3A8E2DD594A5060344789962FA186F28508E6082CCE461AB1EF479DA6D5F45C38874AB9479AC86A04A9 - 39: FA5701F55087B657B470D02968DDF35229680B0B5A7B7D7873446F69C05F5BF0228163318E93A52F2245D1A5A523329C2BFB1D7D7B517DAD14995DB3F5F2C049 - 40: EAEA5865B5E17476734E0CB5B2DD9BEAAC3DF09C651D53524956D4655487D96D00A63AB7886DDBC9DBD9983D57BDBE640D5A7E71B8AB76683DB0D7072D1DDADC - 41: 83D543715F749A84C858F56644089C338BCDFEABC7A69AE810341352B9FBE2D5801AD2A28A1E12889FD8B999511B4C87BC0484C6A63E992AA83017ED72A88302 - 42: A58DF4A14438C048C31BAA80F2320F165BF4EA00D415B08387732F3C15E03C87F91E412A73973D2B9E9A49A4269C36315DF7F7C4E890957B75273B501B56F8D8 - 43: C063D19169D7606B2B48352E37EE591E79FCF010D4D3BE6018D2B1EA979166738625D0FEF7C5CF06DA11D1120C0F3B301BA91B514333BE3A28CB784358423800 - 44: ADDC3820BE7A1605E39092B7578D515AF482937C1C99117CCE7C733D622D9E22A37AF8E8BDD31AB9D23E00C4692FD2D3C7353CD162537E93A6EF37E4F70FB3F3 - 45: 72EDC8787B0C405D02F8C9DAE4ADB5DD624BA1FBF1D16F52B1F29602C0C4BCE5A5559BC8C35E98FB08FD73B595B0DBCD47F6C96B8E6EA397139E216D4BCA4545 - 46: 31FF422F0D8916CE0CB785647C4CE1129449F5E45F50D8982FF8FACC9B6801F6E058C9A143236B25E7038A2955CDD7E952C9EF68A14CCBE4DA2A9844C187F7C4 - 47: 1A06F699193CDDD7D196D8385FEC20EB4EAF2D75A78EDFE4ACEE7EF201058DBF1362670F9FF954E2548C9082D302C08EF3BBFA0FBA5F0F5003D9450F2028C380 - 48: 521010AE36C67DABFD13D932092814CBCC6FD33D7AF4685BC50904E298B9DBFA52C361E2ACB652B11DFED8A41FB78C526CAF691A37C73165FBDEE5231601E59D - 49: A98E15D413BD770699193D33DDDAB31F2B04C903FF856B6340F0E787F8302CD95D3A752A83E1E5F787CEC3E96118299CA539B3F146759872FD5BAF408A105317 - 50: 73A7DB7E1A345B59F94EADA1B291A1CE4AB02D11AFCF5405E9A59BD7247B45D44C587AEFD49E18179FDAF286F96ED392FAA20D099F5F25CFEFEAD4FD66129C7A - 51: 20E13570C79EE803735B030591DFA13CA41C4B20122327C60BDD9234B66FBB0243D99B1E752DE90F67845E22E677F11EDD15C01802A3EF493A613B951189395D - 52: EED9B5BF830F6B0CA03899009511FC52F6D254AC4374BADB1CF1D1164FFCECBD2AE3EC216B623E56ECE34FDAE922F4FFCA0E2AC64E6E85F3B99BA37FC0A93935 - 53: C20D60FBB86982D29019D36832E5804399E1A005467BAF13B40EA135C557DD51F4D9A065B1B4EE985578DE6498E5FF1C7E482253E66706781FCB4FE57F9FD79F - 54: 908D720BC0F0DC7F881CEDC67BC6D056E5578A5999048D734D9E9E0357B1011B83B6728BA3068206EEB19E8357DC356239813C15E70A25261FE18E185A2D40C4 - 55: 11DA786BF18C8357D2F9EE47AB193FB0DC39DD0B260F1A8FBA4FCA903A653AF6B4FC4AC143457B6BE5AFD7DF316AF22AF16C54483B9EA08DE45A7B122ECEA284 - 56: AD035577451C5B9EA43ED4AE6B52F09D3C84D3F639480462DEB3A9C89B4B313B10858BF02A6A00D5343D2CCF5270B936C471ECF391F1DEE3E9F64B706872E331 - 57: 6487F7F7DD92E17BB9932CB151FB7F048293287FFF0613A0481E6B6C46F5FA488C336CFF852B67D2C0DDA4DDA6CAC21D20C1B47D7DE87E9A51DE059939F939D3 - 58: D3473E01ECD565ACD20C2653E74436F791BE692CE8E15E14CA3E32F1795A5B22F074020175AF28B5DB8791E9A0EC4E2C3124EC5AADB248D4BE2E409A19AC1A65 - 59: 0153A44A6D62977FC08C3DC243EAAA4A81902A1EC58155D0FC7A6A918D9C8D8F349754FED4D0E2F963672740AEAF013C030F6B1FA4BDAFC6ADAF2BC27BA03E7C - 60: 460EDF7AD01EED909917D674FF7DBEFD065101A1A5691E94545BA08135F101DB2B0CAC6082363511D04A40776C4F9779195612E9D5A6A1C68C319D15CE35221A - 61: 077A82F24FC3647F3FC9566122B8CE4DBF0A358F903CC7B8167DA9D0C197339228E0FE566E999983548F47FFE8F51E9AC4D436FBFBDF16B6A02502A317EB5C0F - 62: 5060763DC1E321D3DF08E1E12063CE362D9A82BE4D81FC7F77E7AAAA00DD2133063F0D6F610F5BBA4220A721E5B6D86B159F9E7C8278EA3F4759CC41B71CB15B - 63: A30EC44AFD5A217FF44642F4380CB8BBED1C8B6C063D5C4040269F957511E41A6CCDF697A4EDF986A75EAEE04D09BA2CC725A842A3FD568C9F56FF63D488ED49 - 64: 76DF0FD1EE3F8783087D1FCB42DAF99A259047D2D5DEFD155289E81CAFFCB039FF7D6ADC105194EED7570668F2980AECB7AC2509EDC76BC837D529F782198213 - 65: 5E45B1D0E2C4E578E091A1DFCDCFD22D63351BF3BC5D1D221FAE54197F9C26517BC963650EE57A57721A7B9C429D4CEAE9CA6BA9FF3B700ECF34815313227E87 - 66: FA1EAA3FD0AE71E839BA8F88B79FFCF623AF786EFB1664F063632DDCC6C022510B33F0DA9380A4E99B25D32AD55C094CD019CFDDC333BF38528172B2CAD42872 - 67: 17E781B3DB6481DE63C1BABF42DE994F3080E9BE3D5B106EACCCEE9E777DD111F5140995BFB42EBB2DC9825BD8762604B2F44CF0D0A2B1CD523613718E785533 - 68: B9B0CEB5FBBF8700BC942EC9955E2A03D1936A263F0E5A34DA9C1343F8DA6C091E21CBA8F2B2C31F8D1E2B1113BDD4D9320D502C893B8FB207F4402FE4080AD8 - 69: 308DF238B129A559414D0C204B52F999CD3BF21630367B1B5FB0F555C1B4AE4202BD08B4B56BB5B003BFECEF98206DC4AF5BCDF968731E0C7649BDB3A8EE5172 - 70: 41CD3EA09D81E56FFF257379347FB3FB9C76FB73155C20786D7DB013FF52166387C50A46C9113A7EE639C6B3F0D89CB2EBC17414E84D62309DA2ABF2EEB85B45 - 71: B38598D56852345D06B9317CDFFFC0EB64D04C7AE38F50C6F772F6FE19171F8EF2201E0DD7B977F738FA92FD35D8DE210393A63052FE547C0BF1A2B9FB3A642E - 72: 4D94CAF6581C2CB75D0569975DA9D453DEB8FD8BB3A2B6113BE2B2678262153D138D9DDF4FC7B34C539DB8E6A205DA6749D43307C19258C7197908558A56C05C - 73: 651D19D053570235C7E5BC5D7C21C3565490D87025A22DF7A4FF24F4213E5E8A2490628670328D6C1E207687DFC8B38C05907D7270F0F6FB8103D61369812C6F - 74: E290455679285C240FD4572F0EF3034CBBE1BDB86C4C0FF97523FF2998F6CF67FBD0866752F12A8DF04CF14532B49556437056BD80C7670383C3E2741C5C0952 - 75: 8E70604A73AEFAE09D79D861F6DEDEBB55DF6DA62654CFA7275DA075A946B55DCB65122734DF8683DA5190AF2F68223B8C5C552259A53C128FBEADF51E91F069 - 76: BE89C425AABDF6A595E617947B26F5397734538B5C02D4CE4A674A7E42852E125FD805177DE636C347EE837F94724B03177B7275D4FE4EB5D42BE2566A3280F3 - 77: EBC825C4337A805A58CC1B666D0FE82DBB9E8C0D3FA28C57F931777DB649DBA1509B21A5537629AE063BEFA5EBBD26FEE0C3DABEFDFCD4BA1D391AF08C64417F - 78: 9397823EC26C6D72A606887CAF2A53F1EDC1EFE2BFF128B9A7004C4468EE95F3F2AD0FEDAD9ACEF8743560469E83BAF4FD5E00F891E30993C5F48D2C6969E313 - 79: A61871CDED4DEB4C74ED2781538458FF13F51F27D7E476BD9B66442BF592BBCBBB74DDEA121392B010CF35F247BD3218AED10F1A2E7EAF5B574BD6E5A8918B7F - 80: 799991C408F4F80E849D879DD89855BF1BD45263B58A5D94EB899F0AE3C8293B9EB2316B5C681BA85DB6A322354741EF3001904E23351C31E8AD0FDAC4C5778F - 81: CF7803A56DBA2A1FC0C031EB761B73DEE7B88EC885FE5DCF9B3EFCEE15D87D049D738AE5A1A8A064B4382E09B376570768BC93473AC5695737FE645694111D8F - 82: 7885B5D757583E32622F5AEAA8AF71B4BF45CA48764EE3DFF1389A69F5376814C0EEA34C58BDF221DE78A2579EAAF9E1067014EC6B0B54E32977F5EE003CE412 - 83: 7BF9F15306D499239FB665BB916DABA83BF123F497495D5D3E52B561CD4883700B59F0C7628579183C655E1794A148849754EFE2E41C34040B828D1BD2B38CB0 - 84: E912EB1A389F40F10BDA61345810EF3EDFBF563FD0F2C242F69F01D99DEBB5E65CAD858D83CE14D8B6FAC0219905A3D2923DCBEDA72FA64310BACC212BF05090 - 85: CED56C84245438276DAC269055623360DC642385D86CDBEF4C30C774FE176DF4F3E4B69C3A565E9D4A96ABE6CA17FFD015216F586C2E26F82FCC5FFE94A7EC9D - 86: 3447E02B9815968A5D1758F12269978A46CE0646639085C06F96C31E199D0266A0F145B30B490D43B2DD0B4149F07982C50265F7743BC24F03AF76B7A5983EF8 - 87: 96837746AD9C1A6F83F582DB6D8D2F6C23BA4C24EE4DBA36A07B00CFFEB1384C26D508D6B0DAC036BC66775F898ECD1DEE83759B733A6AAB9674B1D710BAB0BF - 88: 4E82BE79528840658E3A5372FE5D79D4E03AD9EBA12D9D38EBDA5005CF7AD04A0CB5D3C8E0FCE9EBE5EA15C758E7303107E116FE7B5144ADACD7691DF90A7EBC - 89: 6FBDF01B54D350B9DA4DEEE82E99006D59327CB7D6402DBFE9ED6CBB3AA937FD2A0B62BE9AFB2A1AA90C75D8B6DE3FD44CBD63A074BD75786C92F31AA56589C1 - 90: AB53D2FD8CC51A8EFE5D2AB8F201B0C1698157F86CC0A1C68D8CE48ABF9BF86DC1D9DC4EFB96FEC95830096B687DF86DE71C2E96E6D9683692AD5066194D5A48 - 91: 9CCA67CB98D216077B03D3EDEDD30F930EE03814D77AFAB4B6AF4F81C32779F01471C06DB24A21195CDAB34C34A68DEACBD887684CF4741709F08BDF3A66AA7C - 92: 59FD4F4C0086043358739E394F208D33E582CC5FA5B55340C8AA43FEE5EFA23629ADBD891E0385319492F9A7CEBFD11C1E3F9BEC44B6918F5CACF613235730A1 - 93: 7215240E23507E346D1D187F6ABF494A14E45396670DE22FD42E921CFF65B9669A9F4F3B3D55DEC694683A32F6204C2F1365348EEF7018796E808D5802FD268E - 94: A7DBEA28FAAF61BC0EC40483B38FF7C7342817AFF2F2D1B7C8ADEDA1E18FA8FCB1800BA6130C9A1D7365ACB0E9C3CE72FE93D92887D7BBBADAFA3C7F4CCAF6C6 - 95: E56A3A60F528AC752C7D32CDEC1A1F5DF2D5EBE1179CAF8B7C79676E43E7236145C9B9CEC126F5141F522C79BB4E749D33A57BC55520506BBD527800A50A5EDB - 96: 77F1262505D3AE47AC2E9C11884194744FE2A855F532BFD507A9B064C602E29ACFC0F943760E370B166E5E1291F02D20343559F3D7E6C1A8C7936F927DEF8A52 - 97: ED60B7711A77310121498DA56D76932EA6414ED0352F6DFD87648C0A5C98EA43C836F34C4154BC49A727A518D055745C2241FDDF4421E9607530C2C1D6CBE0DF - 98: 0DF724CED01A4A8F9C096D8ED0CD616BE03CAF7517C2B9434E414F257A0CC816F1853B3A9568468DB610224905E136825FDE83FF0F7BF475F1D60FF95032AFAC - 99: 281CC53B70A1D7CEF29E202C1E8A381ED4DFD1711EB0180DD2AF647809B77A9D8C48FD539D1E75617AF375FF9734D9030B0779931840BD053F50278F881EFAC6 -100: B92C99FFFEA9ADD8BFD019919B4FBFEA7460A99BABB6E41B48DD378DADF0473B7F0FDD3A8A5972935E5EB29992FD620E09BE090E104DA7A2FE0C3015E0828392 -101: E845187E29CC4D772443DEE9C0F3C79348325EB5F75857CA6356A261F4FB2C1BA49005C6E7AAC9CC1F4DB1A9BF629F4419FCA2252CFE23727BA57BBB31873864 -102: A1A3CCA0FE40FB5D9D057D2ED51C324AE138BF78A111480F3008D6FC62A9FD9C728BD050AF383D476F66F443C132303AEA589FCD6157203756E35C58694AF866 -103: 9EBA0C6229290209E18C97271FBC6C7BC3089E5C01B549BC2643395040A13A2045C2C0C3E08839DD8FEB20C3678DA10BCCA1410647401944F46EDE6AA40D1010 -104: 3A6E5344F8392145F25BFA6D0282F584AE80DDFCE76A5F5DF7E4EA743C64D74F35895D476282CF32E35AD3A40B431F09F38D3A80B45C8C33100CA98BC28962CB -105: 61211EAD2143949C4D667C5B2B6EEBCF0D4FC4F45F373D36E58CD307258A593975CF953BC268C64103824553F0B5539209B995E21C0BC17E776B28862C766F1D -106: 743631807E2629AACE87CC7E4AA1B340E97DF291EE47F5538FF968FFAF031E90B4066E1EBEDBECDBA101515C4514EB2A4638D6E393ADB740479E371E7234B3A1 -107: E13DAECB91144E05010B31216CA7A4D5775BCFE36079871F99E4E7DA641BE6496FC9DE05DAA459035298F76E931A5C3E380C02328ACAF1E3B4A637344643A20B -108: A24E27BB79F437C5652E6E063680E1E5A3257FA87DB6E8E778B9FB01C7667420043255DA5E8F7E96B3B14E55434F8F4CF918305512C1C6E3A3DDED2E69542D46 -109: 81F77DB64AC43580C9230A961CB1345B309A95ED5B424740F14D3407E3B553CF507520BF474062F5035E433BA40A22700F9F6C4C5BE1F101F5A45CB6AABF8EA6 -110: E9630884EF50E2DA61AF946307586F8E1F9738616EB01E54AC9392E440FE17E8D3E94633BBAE0870AC7908DD8D63637DA19B772960336277A7A0651C9130002B -111: EE1EA8A5904F484B788DECEEB8E13E525ABD21574279AB80AB196B1A419BE9A6134071E02AC515A09E80D9AACC0050A2254147E8A9D66FF9CF8A465902BADD33 -112: EC74AE25260DD8A3C9EDC3BCBF234E042FC694576838C40A7F12D650A6C519974B76E5B2E5F64E3CE51629C4AEF0EEB38EE0C634BF3DE12FDA8810B4E6F941E7 -113: 931B6F44FD03182E692F2A4FA4A3E1FC2E354E002FACE4C012DE2552508B5612F1480D29A36F4CAB2806B5E0C9C4DE7160BC6E257189DE795BDDDED964E21690 -114: FA1F621E61D8FBBAC7A821D1E345047CF58F54D06B0983CE3FB01418C50E5326257F5FC563EB50236EA5CE046359F751A9F002CF09AF8736D571610BAE0EC4F1 -115: 82EA8C6EDA51ECB1EDEF20828D61E5B26479DBE6EE9414BA97763058096352853E9E2312935EACA691088D36F234DFCF383DDC75C6C58025CDCCD3A3D1AD009C -116: 5DE671C1BFA41FACD8BFBF896D120DF259792BF4895EB963CFA30DC7109762655B0CD1843BEDC649C4F72A0E8149B21547FDE93E55860DF8E0C8F21D4F0B7EC5 -117: 581E8C5B8CC2A3BA81A14B20909830EDD24C7F48B3621931C201F4D080C58EC855BDDC6FA8355DE22938B536C78E77D434E03CE00B71C1C8FDD99903052D83DF -118: 7A815C74EA89BC9A49D18FF81C4ECC9A54813DB52906BF2AD103647C2F20D8F31FF28AE4A861DF56207FB2F3ED4E3148C27D617B09798175496C9E6968A239B1 -119: 8ADD3C5C93F6EA7B077B9831791461BA7CAD720E79E31E50723D47158761D013B185B89553579A7E7BBF38DDA482F9DEAFE67CC9F001BE90EA8466BD4A49E9CB -120: B9C76635525DDB96BC98F9B3BE26E37D3050ACF7E1ABA6F0CD46E72847B1946A8CDFC107A8A558962F7DE52B5ADDE261CC2DC3B410AF14A8A76DBB5436784CDE -121: 14A505A0AA73DB2255292C2C2EFDE974B134CACB3A5BBF7F37968FFDA6EF663182220DECB06980035A834C7F91D6A1E3DEB9BA60FEF04A131FFED11EF780F935 -122: BD2E42452ECC149FF1D7046CDA8EADF6ECF4C439A37B648B23FD533834FB3A763E3537ED8057A5B31EA5223FA3F3D60681527AF2CB1F80AB38C2F541E564AA32 -123: 570490B81BB43A320485B2E0D4394BDD58C0905F38CA8971E05FD0E414E63A300DA6A76EFB88A450C298BD626994368E20E90AE3F326A2CEA765BAC696EF02E1 -124: CA8FCE1DE2BEC3FA3954B81B52C90D0309BFF1D1C1BEEB3EB9DA72B30B7879EE3F2650038AB6F92080A56000B2D4413163878F5991B17D018DF01BEC206F5A5A -125: 32600E7F6B798E61530C18A8F680331E1AE0AFFF5E038EB31D0F9613DE3DCA5760553B3C839BD3A569816A13A6BCD87638954ABB8EC14263691FDAFBF96FEE17 -126: 8F0472A84F22A63A1C800AF6FBF4E85FCFCFF82CFF86703AE0EA0AB6B698C215A9B8D8077C78622BB66A2B308F26D9774C67BA5B22DF209322D901911713CF14 -127: CA743B61164E0011812AE0F06BD1182B1180DC49946D6778C40BD2923CF5185D22417891AB9375B87AE58AE5043BE60A4A26B0765393CB67380AE78B9BE48EE3 -128: B6A0E07F242E1645818515B0EED349400D01CC55744618A3ECD039F0AAACEE1EB952B60BBC4E5E652DA2069B2111823B719D4E99CF227BF9C792E38626D115CC -129: 43A7EEE316DA7919A83931C818C11EC083E361416AFA7E01D59729F6E9436408416AACEECC8AB703687F91794ABECEC86C7DFDE61A27B6BA64F72F5FF264CCFA -130: 4F98FC1891941C50961951CBB2569E3D9B3671CEF5AE4BC637C77A788376CB6D5801D42BF1BCC319170ACB5570927362B214157FE1CA9F20FB38DF2B9DB4730D -131: D11D5C742084336982563D6255E5F3D314D530EDAB9252D47B160F141E02843A973DC919DFBBE2EA4C28B72BB1DF9720CB4A8FBFD5B6F40F43E5EE91D7DB7275 -132: 3A28C283AF2BB4DDEA75E456769222253CCCEC64365AE0DC37033029198647306E598ABF2BBFD7E7C96338590681508062C439545D9E34CBF89291DEE8617268 -133: 7F2984DB3289C5EA0839FD394AEA241F15CF6ABAA1DF9A46F27A979F519CA5214A73FDF8ED5B3B3B4DD847EA99C5BD6593D42990F641365A209AC4E483989757 -134: 65FEBAF4BE31967634B3DF6C7F0577EE88299175B1A06727C6259DDA8F0DD8AE5372F12E73F429878AEAE55C4052A17909FF88B0814983F0444CDEB8FF2E17F0 -135: EE044EB2C8B74F3E5A0E45282B5001377163764A4939EB4A2D0B981A348202DFC4BADBFBC302C18022FDADBC095CB5D63AFBC630FCEF02C6E79AB045AE202AFE -136: AFFED6BA5C6CF9364C667163785C58DB1F6D3CA753FF3ADB109E769BDBC5CF207C6B0252FAFD08391B9E45513E2697EEA834FE784907D32A8250D2C555BC584F -137: A029E5EC734D594288D8A29BECE7BE5588C8E5F042BADA19A689AF3F4BE3BAF00FAB7C44FBDE00B7556A81458ED841E748996FC6D7254A5B711AC642BB94F346 -138: 5AAAF48A2C5036659F760955FAFCEDEC18C63217F3EAF65DA3089D84445B8876E8C1D13DB6B84516D519352649359CCBEAAC3DFD904B6E98A0A43E0BDD144451 -139: 564F2DA71E753F3C8A96AF4AB1CBE8A94FE4F0E0F929ED2A92B9C82C41F5953F7A00898A08D7605F1A12A5A315B1FEEC3BA20D817EE9DCA92AA06DEFA4592D34 -140: 2C6776D0136C670EA76F67C6AEC33A3FFCAC63AB0EC041CF4267E5EEE0F5B998432D6FBF4C88A2578B8F31BFBB4AB9CAB7384EB00F300D76984C66AC1A562F36 -141: D96D1796E76DD7A30B34BD93FD093A0F1093DA9A2B9F93C5039B3F53B30EFCA87600E94E9910EB4C925E90B77D647039FCA61EB97643A1DC1C15E19795093C8A -142: 61C012F71E8837B780B91E9E2D5358063D1C93658A6C1895DF5DE8CEC451C95E4E6ACA438677F22EB6BC9B03D1B0D566A852C1382C48F470F0897C5DB119962F -143: 6D420F1046965A2AD82C3F65754B7D688D4FBF14F1506276C3F0D5A6D0798E1C9B1579C7940E81D12C484B66CC7ACA8AA74D708796B3DD72262B54B44B271F8A -144: E201BA62FAFD13C7C1B38BE2F583DED1CDFD8DC53FA390402A9869E876F1E75A4A143AF67FF0521F0E559E0B38B798B76AD2AC6B2863CA3A5C2AA85CD392ED97 +HMAC-md4 + 0: 752E874F35085E497D5032112CC65131 + 1: 6B2CAAEE210F970AB481D6D8EE753114 + 2: 2162A41522C2DB0B8AF1F0C712C19A22 + 3: 7C2106C3CB687F35FE2658BEEFB497A5 + 4: 3715333CA3EB74A15B4B1802A1A78921 + 5: 403D9A691A130AFFFB81A655AAE1D956 + 6: E697C3CB42716CA1973DE0D15486068E + 7: 99676F34E42C61E396F0E76BCB77BEAB + 8: A2B2CE8CF8AC151C5556A36D58894C61 + 9: B8614BFF1DAAEA90BF319F333024976C + 10: B8759E8B97DFCBB2DB94D8CBE2C96B20 + 11: CFFE6119EB0C649831459339C1B0C82A + 12: B2FC0DBA9C4830CA66423728599D3660 + 13: 454749F1DE579F1918FF046FC1CAE7F6 + 14: CC625178FEFD46481B7D02618AF6194E + 15: C26D523EFCC42C4AF7EEC2EA4B45B719 + 16: C352DA2D077FA3F493A5CE0E9A79CB87 + 17: 570DDE9FD220F59867F17484605D2061 + 18: FF5954A163CBA61CD3C8424CC71682C8 + 19: 1240D12E3D6C07F6FE1CD595C847C038 + 20: E87A4D7958C43CA71791B13E16301036 + 21: B2CEDE4A15F8D64C53D243F8C5763C05 + 22: 54A9E9EAE155E7AFA6FC8A7E05D7FA9B + 23: DF0E79F27CE25E56ABCFF5E74D1212CA + 24: D9BE454A95E5D9127990577F7EB7183E + 25: 26F9221A8B854767861BF0281303B89E + 26: 92BD4CC81A673B254A4AB493864BB014 + 27: EBC3851E0AD28BE9876BEFD6B0A88B44 + 28: 1134BC8A40E1D2FB038B67548AC2040B + 29: 954700135C4E7F232337C84130B43360 + 30: 8C3EF2D8F896C8D252851A1543F72493 + 31: 52817E79D2B0B3A37DC08D18D3519F92 + 32: DA661A428B9659DD59545E3B09162F8F + 33: 3FF5BB67B48F87B4B642DACCD2E4001E + 34: C674F95BB622D7B8281FFF34E9EF3E7B + 35: 3A4D25E3BCABAD8CD4918CE650EF00E9 + 36: 2D91248C51837A8B80898E2CE42CBCB4 + 37: C0B3BD2B36493F0EAF9AAFEFDC37064F + 38: 9B4723B091102B480B2B59069317F292 + 39: 0F8EABB489254491FE19AD0E328A483C + 40: 25469BD482E1405E51AA021752394C4C + 41: DF1DF50EF9D95892D08DFEFB79D6552B + 42: 707A546964CB22710482C478E58C2E0F + 43: D1E243DB14E2F946D650C811030ADE9A + 44: 11A1AEA678E98A65420747DD6CF9293F + 45: 66E735F658BD689A9F1BA0B526827CF9 + 46: 98170734E67F576CCC3D01D83965A6C9 + 47: 399D99CB7979E80F6D3B5D5BBA5871CA + 48: C26651C32EABC76289CD0843D3BCDD92 + 49: AE0F50954C90E8897BCF504592D0626C + 50: EA3AB701136862428EC326D2551F8AC8 + 51: 4AE98E5A1E6B1BA8CEAE844E34934039 + 52: 7C9826187053186DDC2760AE6FB56DC7 + 53: FE0F555B851CAD830BAC9FBB40705671 + 54: 221BB509584BCC7E10F3B4FAB2AEB1F3 + 55: DD93EAFE25EE27C6FDC2CCDE7D273267 + 56: 535472E1ECD49FAA75CC6621BE7E6210 + 57: DA4554FF7D5B289A03D195F94154AF47 + 58: F15A3F547B5A3844BFF713CBCEF701A1 + 59: 279DE06FD5644C520BADD3B97D96274D + 60: B933E929073492EC1E2AEB78071C7B83 + 61: D1DA2335654AB4CEBAE5C2E78CF27553 + 62: 06FC50285F4BA5C8B5A478E9C02D6434 + 63: DB66A5D55224DDB50337B7FEF9A808A7 + 64: ECFCD0385FB49553EC89DD94AB084D23 + 65: 4187B0B79E6CB916F747B857AB2F75D3 + 66: E03E14F5E00B2DFC0614308608B929B9 + 67: 5F61FC3005167EB3256DB549DA8BA562 + 68: 21A4D14DF8E934A858569D8BA7F151E8 + 69: 5955DDA4CEF16ABADE2B551841C69B8B + 70: 8E77066A973B60DF64C27DBB93EF204A + 71: 2101EE9DC8221FF17D9D887FC39F41BA + 72: 6574A9DE32B7A673B5BA20FF18EF8C93 + 73: F571B14C9F5C5C1858D48AA944A13050 + 74: 0BA4BE0A5E853D07F79B2D29BCF046B5 + 75: F240C8C38D71131F510369D79FA32208 + 76: 920C294DE37C28803FF3C49A4135CD65 + 77: 38796D25822AD8F2AB4D64E4A65626A0 + 78: 65A203170FDF794397FD1090E318C5DA + 79: 965A767FE4A75BEECE26BAA79D816AD7 + 80: 0F4B30947B790C47924657648FA1D88C + 81: 74B05F7B7D006F7DDAB31DAE251C3BB3 + 82: 61B0366B57A8F46C2F6C16F935DA768F + 83: D4CB13CA922B542980F854C9780A1951 + 84: 039B2F23A1CE410FF4696D9C35C40C08 + 85: 2D734E28F995C2AA2A7AE2412EB99A10 + 86: 1A55FE47703ECDBE446033F492412812 + 87: 6AF4CED86D0181D6E99EE6AE57F295EC + 88: 69C239A875E0352D20BCFBCF8D5CA19F + 89: 62723FBBF0AC6F397438589AF06625A1 + 90: 424EC9353901795251AEF7D7BCFEB8BE + 91: 9BBE4ED6C8BD14F85BA86E553B1B8152 + 92: D7840AA82F788B7D58712E29003D1239 + 93: 4AA55512DCAF770FE4D9428FB318B0B0 + 94: D040BA08BEDFFB20D2C499FEB35EE12A + 95: 0F295EDEFC85546547860B7F7CDFB1AE + 96: 720FCD871B7D8824EE6A7DE9FF1A62BE + 97: 2FE3AD14E24C441C36186673A0D60767 + 98: 943FD502136B66D0313951198680F746 + 99: 4EE6829F3EFFD0A87115512ED28C85BA +100: 6EE1AC28A320246CA5C37F981E22D294 +101: 36BC623D6573C3ADB164F8A6F02315AB +102: 08B3AAED34FB0A0F99C4B22714B9CEAD +103: BDCD10B66096AB992DEC5539773EAF23 +104: 6DA36A53A79FA2C68E5060C0D2D43E13 +105: A3E886199532C025074D4646113F9C23 +106: 00D67A1D2ADCA77A20441CBF593FDEE5 +107: 2E4399F5FB44FF5573B73D01C5B248E2 +108: ED22A18A8824A30B68EE0EF9907B2B91 +109: 36166824634304417BECCC9519899CDD +110: 0757DB01193BEEE90617AA8CAD0360A8 +111: F7691CBEF4ED2E9FE4EB992CB3939970 +112: 09DC2FA975CBE8CE828919957D110EC2 +113: 7DDB74DEC57AE8C318AA5CCFB53872F6 +114: A26B7DD0AA30EAAF1F4F8314AB7DF16A +115: 088855527BEBCDB67A40FEA4FDDCC061 +116: D0F8ECC0C32B7060CB6128279F57FD80 +117: DF5B79D3671CA5E5B44CD395F6FFA551 +118: DA8999EA059C463D5F05D04020EE867D +119: C0EE404DD8447AA70D3725D5634E2B53 +120: D19D1A725F5E9F0DF21871B31900CA73 +121: EC202984BE149C93CC1D440CF6D29E1F +122: 422DB7C21B1348983B75498E270FE6C1 +123: EF136334BC30C92DB9082A9654B391E4 +124: 0B3526430AE734054873B14DD696CB3E +125: 3BEB77C0F85F8C6F21790ADF30EBB812 +126: 4376F8C8EAF5A94871822DBDFBB5F88D +127: F7DEAF52378FF735B2D171B17EF573D8 +128: B4FA8DFD3AD4C88EABC8505D4901B057 -HMAC-sha3-384 - 0: D00CE89D5235B22AAF49DAE078C0C8C29FC3AB699D89837E1D1A9B443A70C9A86CFDE0A690CD4377BE0D91ACF03FC86E - 1: 405FB92DB5ED34B36DDE5ADA810D73102BCC7C4EDC56EC67C03CD5173EF67DAD4E9A911986DEF61636D6DF98603B82F4 - 2: B8A5C7859CB74C8642CF622E35A8624B906791A36CBC31DB83CE524E21F21969401768C8FFBAB66412A01CCA9C81CB83 - 3: 217B36937A51E70B3C70BB8C72A130EC09FCDC9F0044915864EBA7815A6A8F2379D982299C1F1A156DC377BB8EC1CFA9 - 4: 2D596E20A8690BAD631C9419157540F59E6B83BC1AD66D6FE5DBF43C582B0143A5740870FEA4BBB40D6367407DE8A5CA - 5: 1CD891E9ECDB3904FAEA9A45B7E2090331C926A0E703B365A11D4E7DA283DC7C766F3C1BAD0CFDDDA8932F2EF9390D7C - 6: FD75F6C3054F1B8594F382F0D8579116CE03FEDFE64E18190A07253D54E2ABD15DDC2420AE4FD82A861C97CC6FDD6492 - 7: 5221D7775F57FBA4CA33999216EFC52CA0864A86EB405B66C2113BD01054ECF0BA5ED685A6B96814269E12CD8FA92BE5 - 8: 30FF52F3A2F22105FFE8EB5B29597D4B00066C0AA94A3B08C4F03248DC140AE04F3AFA16B271A4D8587F748E3F766D1D - 9: 46C1EB8E229F47658289464D08CEC40BBA69FA914FBBAC2EBD74687891F86C6A62AA08831E0950DBCAB8D1D999E91F10 - 10: CC91CE0202A6990E188E72886C188DB46CDF5676702CD52B94479C2794184F6F6B8E2A298DDAEB0906259CD1DF6FD41B - 11: 5BCF38009AEE78EC63CBFF5CAB45C21FEFD60F3677B49335815C0C934C7F7BA79B0677F9B4E25F6953C4D15CBC340B68 - 12: 514EADF2B0C4DD12E4AF24FE28C72E6155FBD32D054B628EA64048EDFD70E761F569C1E97353F69BBD62E3BBB74C83EE - 13: 2FE23C76A46451BFB3B7247DFB417290D376B1A9508F7F1405889BC08330CC9C044643BC1C1B28E30BDAE7A9CD54EE87 - 14: 58E94B564EFFB88E622BBEAE5F5BA893D5446A5376E418FAF65A04C364AB1403C5883D49D655CF0C5305B17742779DB1 - 15: 33801F1B333CC7CC592ADB87415ACAA6D887964498151B94BB0F2347975ECB119B88045EBD1670B6B00A3705BFAA4438 - 16: 28835D49E401B7B0EC2C84B5B76CEA6D12BECFAA8D432E2FB0919CB98E95C6447F7C757B026C168B1DE4EA6F478B20DB - 17: 91203529A6044D17B4C782B4AA2674813F2BA11050B3A3BD9D6677FF84863F6D74E62129BC59E1D0888913B36139168B - 18: B0790890D7E952D8951D08C4183587206E530194842009D4C868EE902B3606416786F336FD964704E9CF0DF7EE4EF569 - 19: 4515BFC56710B63452E82A7E5D1838E18B7719FA2CCAABF0E9D43204095817AA5643622931EC4B9B5378B7FB9CB79191 - 20: 8F01650F37C4254EFC1BA9D30EC6E84F7824FBC34CFBB94BF60E758E52F344B29366D16529D4C204C675D272AC2D3962 - 21: 5E9CA7D3EBA0E5A9FC70523C9122BAED96E7864460DE13060A22635975DC007C7533B0387779BA2D2EA6084827B17052 - 22: 61EBC5C22E5CE2B706B5019E23DE9987EAF5EFDC8D003B4AEB7FDD29F6E770ADDA4A17283262C25871556C261C79F605 - 23: 59558286E872AD2227F02FBCC3E3D86E86355C2DBFAB909F2B2CFF493024C1BBCE01D048E6F3A6E666C86EC06294D91F - 24: 159B05EB57BCC17A4E43385F3BC46A5FD5124734568C85C5A52959B86765C0A4D1B7FCF987BCE48F407BA112969DBAFD - 25: EE9167312425A2E7D13E820DF3AC29F21E8089993154015107BCDD84DCEFE1A8DD9484C9D6B4950A8A7B00BF28B6064B - 26: 297DC21EB30242C6C845FEC6F8DE331E71CF09BEC82DD2AA10E069B828D7381D47664848C4DAB391BCF1DAF98AFA8170 - 27: 4AA8315602DE4899199941F9B14ED21CEA2573C3EBCCA81927DE6EFADF3E69E8862848D22ACB37793E644007FDB605B8 - 28: F56E13425CE8D01B5327922B15B81A68A25E8EB92B303042A586FD3133F99AD8B2D2DA0D5601D95D924D36D53C392EA0 - 29: 6787656DA62D2A547784DD67C01B22A8085BBD6FB93612C66AD9F11E0C13D8396ED6DB6F9EB85EDEA1B512D8AE90F1F7 - 30: CB6BB9F2B97844357595C9875DB306EC578ABC568F5DEC3A293D634CB0D1F04B1B7D33DED313898ACB70AEE94A0D7340 - 31: 91F1D8F995C3B78A8659E27368B2ED1D81C9E8FAEEE7C9D4530028AD19453937DE9C5C8D6B0DB4B1A1386A2E14C2DA61 - 32: 27A4E5B5E0D313113C019F4A235EABF3AD4C964624DFA8031740B82E858513858382D19378994AA6CC2AD0041C5CE87C - 33: 842C5F49D372F069D795DADF9357B450BCBC8F8DC2BD1637E3774FD38FBEC4AC31D08C3DB032E219A75A4B21D9F7B8E6 - 34: 3BE616F08B1B3C73747B0D7791E4870879B80EE2E42BA730C65BB6EC581CD90E25E5730FA115CFBE5C76C9AEE71587F9 - 35: E29B04FEB3258D932F873A78C84F151A6C76B64DDC91C1E410B0736BBC5770AEE800391EB81904C858DCDC1D9604249C - 36: E73C5661C4B94C067218C16539D70C65B48FF3563C61043776998D6CDA25AE869C790B4134A3128F117863F5D402DDC9 - 37: 8CAE539D4374573D76B5507F8C928E8874AFACE190B5FDD2A3DF515159A8928FB930E2E6C41B76EE855318E0E5244D3B - 38: C565AD8DDD159D90BC650E18A5214B42FB794B2E45242834D51B1D6F381EB20E4DF795A7BEB544F932EDB1565AE05A96 - 39: F078B06244FC71F84480D595039AAFC27BDAB0FA251AEC796B1DF42D5D12BA329F2769F2CBEB45144D688C2E64D55FD4 - 40: BDF8810F4E862A128DB95041C50546774489670BA94A1F3BA4BD24B540FF0CC2383C54C4DE75B66FD1F10E7920A697A7 - 41: A44D19FA05D1F71DBBD4B10ED60BEEEEC3EC6672EB7D7B7B18500AEA1689779CFE1E068CAC5302AD008C7274294518C9 - 42: FF7904A2133EC8CF6A462518C27883269BAE8248A8C50F6F7F905DDABFB5F5736D7DACDCD69603072BD23095E85B72D1 - 43: D73C738D076E9F16E37DC6193B98BD88548EA6B713BCA945C2FAC5B956F945B767ACEAB2E8BE30B59CE1D15274FFDF3E - 44: 51D2386FE4CFE73D68CFBBEF1C1C31C7DDEAC11329AABB4EE48A38B69F96073D829E489628D969A102DD0AA741B37534 - 45: EBDF109A7A48F8EE453303A19981B6A22BCBC1F0E108F196CD8FB613BCF5D9367BDEC76DE7B96BD5B6B61672A56B9427 - 46: A41072DD8639B99835C8BE32AB442AAE81ADC52A44AE4477FF2C0DA7D37F7C332CBD20A94E83FD6E5106EC1238B25D7D - 47: E6E3CBEE54A29BB62384BFAC735C287037D3CC3F32FC325DD3F88944CC730461621E74153B907A03C5A22AE854493A7B - 48: 0FE96FD8DA7AEEAAC4E3ACD688F34FAD84D06905E2F78CC3DED25547534A3EA255F9514BFE7899067531A172F9676724 - 49: BAC00AA18E64F93053F84CC69E32CC29D6E9D5F0C3E5765B631738A545650F7C5C4106D42A420D8F7F9A3E5B882446FA - 50: 5E598C707D6901E2C69E69562E597C533951F1504F5E69C11CD1FB2CCE2E099776D10F85D467520379C133CF2ECE1BDB - 51: 08B7AC513F0C78CA28C478B74C14D49A62F291CB78BCE87BF4F2F95FE094A3E24C6C5176B8A09920242E424EDCE32826 - 52: A37E733B02D4A6E01532938BE18719D80DC74C9671A24CECCD869359D960084F0B97E8FEAE52391C9805B91CEF0B2D7E - 53: 801C4E19E62A9DE32FF6E8BDE2153FF3ED55873140E81011DAD1C615121007399B6EED6102FC6664462766E699895D63 - 54: D680D7E7BB8DB2C1376765B0A21AE97A0F6A7B15F39BCCEF7EBD5F1552C8A6B9A06256002CE592356EF3A6ADDB36032C - 55: DB2D71A6B4EB44D1A09E04F3A139537FA790A69CB07F483C79D26D8B65B209F4564CE3A73AFEBC4D7B5AB937365ABD25 - 56: FDDC92175AE7AA88E86E5F579267479CB88F5B3FD65B33290E5AE2F1AF8E7C4F417230D46E83499AB3AF0FF8B93BB10C - 57: 19D9F298112DFD74D5D9B867561EB5B38052F6D5D07B9C6E6F3143773BF7005B3F0CF5F252ABDB6CF8580C85379EEFE1 - 58: 870D46C9387395A54E86407DC76D692555CC9BC35731DAE243E1EE914F60F9AA61A9129E8427144BEDB4BF97CC45C29C - 59: 36B766B9F923F7483E363FDC382547E3F0214B4DDA2D69070EC0B0C5AD2646D7B1FF5872E62245919D65F573E869C953 - 60: 2BA77E0254A38BE6B0ED52B3498DCC45C4EBE830208437916225B496A78BA38EDB7A1A11AEFC3F9DC4DD12D3C3E9FD56 - 61: 17CA8FE1AC268187121C6FABFED518BC377CC47218EB685CD94EBB9BCF030A840C0A319CC9A8E09F863D409B026237B5 - 62: A7A2608BF45D47EE66682B7E165EE77F1F2ED2BF7FDAD26D8E250C2CBDB6706C49B7792C95C61F18458EAAC4FC287C11 - 63: 7B59408DAC644072EB3B6806B514D939B0F4C2CD634EE996820468E252D1D0132CAB9B1EBC2B5CC1F0779D4CB266F655 - 64: 69D24A303ACAC6AA37A537B50EBF8B1489565DD09964110104341DC7199E628E94A51CFD135F62BC6A1E572C60758D4B - 65: 208C0C61706AECFCC650BF864F8BED282992AD6951D07217F6BC6276E81CCC52171308114B920A9C06B4FF7D3704BBDC - 66: 5B3312273491108BAAA9E52E9CC71F5EACD2EF421118711EF2BFB6DB64A0D2D9D701DACB9718E366E153FA6E728A7FDE - 67: E9E1B82A0BD09FB24113818A86219CCBC110CEA2B7216602834418AD0B77D86605E2D56099ED23863A54FC3645148DB5 - 68: 9865998832B5E99F4137C347E62E43866DE7D9D779BD7C4EBE4828FEBA9047B6D76AA1BD19781E0A1585697A62571946 - 69: 3F36314DA0CF03BBFEA256FC789FD237FDE047D3D3C40C833B889DBE7E09B593DA0DADE4EFF76795CDF4F4D7B31FA19E - 70: AB3B29673A5614167881C861B9FAF374A72F50ABE286E2389EF27ED9FAD1FBF70D2C2F0A66E4AAE384958D695F849A75 - 71: 3DA043DC6E1D59D3B4C44472CF83122BADB13D5BE5188D9F1142E91608EA917E6A313211B1FEA4CCD83DBF54F8A00B5F - 72: 4028AC4C3131F1316D214E30DD87C58103F410958600D55B32C0CDF050BB8C899685A3D2209A2928FE70772A5208B7CC - 73: 5538D91DC6EF1B34E6783EBA7A5A02229D98E71B6409F85AE377F961030EDEDE648ADD17CBB53F9A6233739A2096A381 - 74: 7F1BE0925A10996760F348A593C71D32F1D5A0C0EFC66E6567928E8B4DF906D2DD501A7BACA16582F73B94981EF4E98C - 75: 09CCEB3E7A56CC81163BDF8D23BF75725318F039F1CD13B21CDD9B2773545818F4CDA4A3C5C35392ED79460CCEF73902 - 76: 9CB5B47EE21249863C996A9332FA247C3B62D9295C0A62F6F4BA74B05152AED6D34B626F1E1F99B21167555C750D03E3 - 77: 8B01F68B62698569DB267DD28636F7F61D358ED9F44E6909B347A3BF4ED262CF653A2378937E92F2E8A2B5CAFA8561F4 - 78: B5888E0432D96E9AE49C93F4A803D1F56D1D6447AF8FFD7A4720625C085FF02CA2608706ACDA23CD21687C51DDC46FE8 - 79: F445366C4AB6692D965413E4485F7B75B9EDEEAC405657A8F818B650F0CF4ABA373D7752901B7A2A48651B5FD541C347 - 80: 3FFB363ADBAA57C8DBFA86A3E004B0D7638A51B3CDA32D830DCA800BC14761C0DD77B29A2C50DB6BC4C53C7CE4775032 - 81: 95C52CB42F07E45E9FA9399A53B556101509FB0D4C3C52CA74D4EADBD7D5DC16276C8D0EDEB2FABDFAE9D22B9EB1F5BE - 82: 8C4813B4D22071113C4A2E933B6B26CCB2D51FB0382D5872B49E17BCCD60D1596B582DE272D9F4195F21AE5237D2D231 - 83: D3142DF6206FE465616E7B803E40FF6A2548B9E10D0C216491992E862ACCA4E83C29075F77513141A1A287EE535C267D - 84: 737C2E0601033B89EF157A8C1A030C4574F9F2A427A121BC0C4DA4AAD94EC97F2E5DC4DA4E73542550F9F991D334886F - 85: FF6A7200EC5F1BD5125F671CDE9CEE485E8EF6EAA70EF7A679F5F7FD9ADE0FF6AAF68D2AC070E4B37C857A62C38CE848 - 86: 0EFE23704DFA29370503A1D22A26B5126102707F1F761FC4206DF6E4E444D7C4E6D7BFC9233304FADAA0CE1A7000FAC4 - 87: E7819E9D2EE94AE4C6F496991138EC03BD94AFDFC0867A186487F9F017A5066370F3C22317821B8EFD892D404490BDF8 - 88: DF4E6F26BA61FB47BDDDB65B7A47A7DBCF5D42E8191A231EC44847587BC9CFC581F0104DAADE840A123713849FE90630 - 89: 86DD336CFCE62C96D1D88E1E981C8E23E5CF65E1BE068581D7ECDA571D230B7E147389DDA6790F8A94FE379B10AB21DC - 90: 99BBCABBBCA80FADFA8A982F735305D686EA0EB8A241AAC4236B03DD70266A2358031FEA4D24A489EBCB9099EF5E8906 - 91: 239C8F1048675E78F2EF17D4EA0EF26619E71D904C6D23C37BD60F4D10DF8F228DA97E6527284B571A6E993709981468 - 92: E6D7E1D6E10DD40BFF662E3B8962FB89A95E635EBB7735DFF56A1EF07158402B2D007444DA3B433AD313D5B772FF88F5 - 93: 550E96D2C9882CA386CFE07A2F9CE2C9E81DAB0722F4A1F407C792B0039895B8CDE1E1CD460B20A58957C38B872357D9 - 94: FCF3F86603D252857D173053BD8D7E1590D975DB1639BA6AE077D644EF9ACFF820D0869A3B7452D2E23D9512E7B48A2F - 95: A77AE656E09EE6F848CDA9DBB2FD38EC0C6CA14E2540935C75C0EABC8CA14FC00104F0E41A2E87C6BF017CBC3A90868D - 96: 8FC876DEFB536DF7524A6DEC8B19EDC36F85A55AF01A23E8D271C790E3D6FC7C171A9744822C632B92B279C7A7A10867 - 97: 78BB1A3BB1BD13D319256E6BD58C7B03298E46B5EEF63085677C0023F3379B5659C8E972EDE222499952DB7A19544EE0 - 98: 5991F33DA48C7069F6FAC12F5B99B4F23FFB157D43BBC3BB43F9BCBC0BEE2991EB23B9B756F960BF635352F430D7DF0E - 99: 63172BE6A03A9D0F1F5D51CDD356CCCEFACBAB9F6E409F70AB74146E502F932CDBDC5F44373AE8E853307507F3DAEC2E -100: CB8C97ACB9BC21FF41085FD7494D963808766497CDE31BFCD9133E7C43BF6240CCE2C5DDE174FB2E1992ECB38C6E43A0 -101: 1F68CE6F662FFB75370CDB6ADCD3095FFC7B381BA7B4729004EED6D742EAA0B807CA23E155816E646F68347EFE7337E3 -102: 1F9111B7FE153B1C890F3F8B6B9E7ACE952C427D05F5FE1D8177B86A3DCD88C9830FC344F3BF1CD33B5B8813CAB0EB78 -103: B089207692FA237DA5B8134993F2EB6B302A77B8A13BD53392005443A43F687F52A32B470A8863660405767502907478 -104: 3659E60A05D94F46E489ECF9E0C916B984662951FEC8D0E3F7F5ABC05CA115DA7F2F9534A2880DA46264DFAC1D3F6104 -105: D028EB286C33E9400C0B3C6242C4F63F062CDF92A3C5C889CAE2A90C651DB85FD0AABC71F3685D3968C9D1A22330B0C0 -106: 51F3DA297F0E56E66FB301A840BC92BB504D7C4BE80F7DD358B128B64852E06B40720A6A2895467B92346C00CDEC6CA2 -107: EBD5BAA316F80C25A982FD9DEC059943956B3F72B1DCE0B3EC5C2186E049B76AD1A731E1A345B2ED980D04832875160B -108: A101C6E0AB891551D0243ABD2D1E15E201280AAD2555BE16E19A64F91A6CE5AD2D710BF163219741582DD3DFC9EB1CDE -109: 191F36096A116F4161FD362D1119301B23EA55ABD1B0550BAFB4E2995CD23EDC18A8E5950DC8BFA175B9FB160C5AD059 -110: 5296048FC3B99A98934971F82CA0E229136AF8E9F73FAA9DCC96173EF0F637FC265FC4398887CAFB595F0AE7E2D96700 -111: 91A833E586EAC25A4ED3E10FD1FB5727A79A85AFA70E2B3F0484EAFE847467E5E235B95C6AD8363FAD833CEAD226C27A -112: CD61E2E65301FB751DF317EA7778137644DB8D91A1EC22B1CF4AB11BD3F6F8657A6CAAE78E472DB42A1B56035B7F3CE7 -113: AF42BFED0ACA6A82B1C17E8C32DD4E9E329511BC8230FBE4CA7B1559A6695C8AFEA016A9BDA69CE0AA8A2268939AD34E -114: C05D9A6BA6FD2419EF8862F0E04FC9D3BF88C13C078F06ACB4907B95795B87F6BC2F4F11FE54D5E2C5D80EE1BCE0ECD4 -115: 7B2739239EBE27540425E6CF0F86F5A4B378F28D022F82246D45F3702597D71E002BF1057DE77E6BF11DE3EA82D0BBF7 -116: 03C894C39CF2E7BC1BC0842EC6C1F1BA1C68B56F5AD497F44EB75CB6A853629EB406FD87EB11396DB54A6F77EC43F814 -117: 4A0862ACBF7C2AB2B0791424E028C557B819EFE12BCC4BDBEBAA68519A4491B57F5C721270B51A270FDBFCBD26459BE2 -118: 12C0CEC2065DFBD52AAFD685F41F7487C3240E31CEB5F1D361626940AC537669C44C3CDF5B7106032E37FF11996392E8 -119: 9D54F93400A6322DA80297CBAAEE69EA1AB96B5A6C617C49DEDFD095BFC5BAAA85D6425A208FF26977974E6F94909A02 -120: 694CB2ED1B1F90C2E95FB0524300930F9F106CE398F119058432C3846945D5D29BFA2CB71CCB4AC5D12D7C2099361D67 -121: BF16039CC1EAD633AEDEFE62DF92ADD9EF190B0165EC68EF821BBE83C59F9D5ADAE39794032AA9487EA0C8D7A7B4BE20 -122: CACE6CB16361ED94FCD449E0E60E1D4CF0EC754595E6E6F2F8BF72926823D0A74105E8C4CBDEF6D24FAF37734E0EC9B2 -123: E47D98969CC8A80006A31DBF9FB973653EF6D97EEEC13229D6D6A187A595957EC6AA00E451979EF0F92E10CCCC204575 -124: 0CA28E8E31C61ECB4C30F83068ED5A339B2CB8A33CD73FBFF0E6670FAF11755C9D901F938505D4924BB69E5755B337F4 -125: 59FC8F1F1435E8652A377C6806A14607041BF3265D8B500401CBCDD32351973A43D5C57866FF1634059A308B9B2D7CD7 -126: E6295D9C4532121628AA1AA2A600BB1F6C65B6F09BCFA3FA5747EEAACFA81282484E6B2E813E2573BD737F187FC90C79 -127: FF25C2A6FEAFD824D887AA52FBEFEA1FEED316DC5FC28617369071CE35513978F2562CD04344C76505A824FFF2E1D4C0 -128: A89FDDDB0B571C2C7D8FAECDC193F6BB97442F6557088673223D0D53CA6E99854CA1076CDAF2A54A9CCF96A94C19E46E -129: 33B984329FE9BEFFB3709F64FA523CE1912620FCD083C514CDC701E05DDBAF2946C9E27E21B306EB264C65229FC98897 -130: E50B511DC092289CADF662768E39CCF8E08ED101368B6F9D5C30371C81B2671D3420A5143F9B20A3F8318C569FBE2EF6 -131: C568C70FEF2C81770892B919CD5C7A55D61A3CE9104EE9677471FDFDC8A90FC53453574B86F1974894D1563447C5DAE6 -132: F7F55541667F3A20C2D6F3C2098D881581B5A35F93E68F10FEB84FB8ECEA8F8B9A5D85879AE06B0B50E8601A33980E0B -133: 197D0658728C65838A42453216EC7429ADB02ECB1AEC2313C79EFE9F2FEFF66A6195B86B95B7CDA3761F826A3C27C767 -134: 1EF0101877543F08EA789FCE62114E6A33229ADE314594A8EADC0CE8D1E64F56B03032E654CB6467672FF539B03B589E -135: 2DE522B574AA46E0EB7160FA3B9AC358213044E58057BB57B3368D9213F8B88776100C8105059B0187DAEF3656EBAF83 -136: B975ABFE51E485314D4577F7EBF941D9C8A111CC919DB00309216F3E20ECB07C06E926E146B0ACEAD9FD963A58F3304E -137: 3D7852DC1A1746B59967320F436C8AD67A204582406EA8E6127D09FF0A8545F3DC298508CD4BC10274D69A1B18629F82 -138: 73669086A40A26AA20B63437FF5E21C4695A9055FC9C0E0A33A252EE75A7BFA2D550049E09B86C10594BC4FD39F001C6 -139: 8D53B12101145837F94A9623DA67013FE7EB37D4A40C7771611AF1CAB505A7C5F7DA92CF969873BFE6E7DDB354AC61FD -140: B580DB6F46C69F1D783C7EC331083085D35F5CA196A8BB8814C280F998D99E459AD944C7B0B9F4F381D0C59802C12503 -141: ECC17164BFBB5C0DEF31C384B3EB4EA6DAB146031E317C8B0BEE5905E751D412267947590422001423DDAB2FA1DF711E -142: 57412B38D69AA64710F6CB9461C61D7C813D20FE95C6FE96FD9821CBC83B48E04ACC34BCBC6F0E37AFD4916F479381EF -143: D9F1340643055927CBEE42E024024F3BA34E752D410C1574CC07B93F3D27246E3F33A70893F030D38E416526EFD8F58D -144: 3058654B27C4C374E0CF19EC648B15A58AC95BED6D9059AA90016454D3A81E740534AB1FE3B9D255F843E68CB8697912 -145: 87E84270AA2B11131D9EA7999F7DCB13CEDBAE1B181C099633B1A2FBBB9F41D6C33117613BFBFA376A8FF78071F8A73E -146: FC629F184B0FBCDDBC314C78CFF3AA0C4E83A0120A8667690BB854FAFD685722179C3170ACE7578079C4C29D426BB1F7 -147: 924FA77295C625756A05AD887E401DD2FCF99492C985980876F5EE4A3635B347569468CB960F568986312B70BD58967F -148: 67E246939BDE9A77F1CD5D76F2AA83C285285A548F41B471A6B6298767CE76F3200BA92E734C89BCE9322AF67CA80A46 -149: 7B990DCB4B1BC48FD76A011632382F21E44D8D5E0BAB87EE32F06A2E6F0E917DB8AEC4E86EA7D2BB4B90799D3560B80C -150: 6DDB0A9ED2B347969FFC0430DEFF05B9864677F4E00E6C22787A6A7A26FB3BFAFFE0EB942A3C27AA0C05A0C94E09AEC6 -151: AEB5C76CE373A45D9E6A870C95BC9034BA82773E9DFC8E530A88F5668D6C375A9BCA44CE7661D5CBAE90FD42DF6B8128 -152: 09071AB16B5746C2E5C020B49B8367E8C7A1DAEBD90460BAF5A2F7212ACA7631D6EB73A4C5103D204DFC7A94CBBC39BB -153: B538DC93F36CA59D59A38D3418C936E7CC0603CB9ECFA7453F84EB6D20D610C63C86B5DDF0E74124A2039BD46E2E1691 -154: 82C1E23F02A3466273E960D68D605A17B2391B87EA1CB48CB64DC0EA726469D7E0B2EED818C0CD57C7169676C3FA83A4 -155: 7A1CB5ECF5993C4F383DCF9CD9F1A6B4BC29E061E229F7A723DEDE301F3229223656733F41562BB5DA4CC996EE972165 -156: 5DB4921885637A9465604A6F3F3A4461F9D6D2027A64E30C90AB9AE72FBD9F809A7788CDE1063081F91C9097E1332E19 -157: 428A24F58324D45265C1F09C84B0F2E669AB54087105E8133268C7A70C5C00D4E7961A36212F2588E6DC8C496CD53CF6 -158: 5BDB40ABF30E19F8382378FCC4A1178EF3653687A753B3D4E03F5D7B190675EF5EA49219FA9A14BD9F2798B3DBFA116C -159: AD7EE03FBD15375502095A5E1B7E87BB17DC56D9F65A275DC8FC2A02508426AD011FE860AC1EBD215E1D3420CB8760CA -160: 40544F2F1DAF8BE54C01E71997270D7905384877EA48A27DEA7D7FA9720042EAF63D1CE91B511EF5F50A88752FB74CFA -161: D53D537C6391A323618CA0A5CD5120B58D3644315CAC34467A347B23F06AC61B0B670D73CE01E7B5BB63373EDC2F2121 -162: 9B2039972A8F0570A144EFD7382F2D6DBF9C2589E46A417700E3212FEC2F89030482034D2D0F1A1749908BE022315FF1 -163: 510D4ED3CE4A8908FC5216E727F4B66FD052C4BC9ED7D39C453A83B9CE6B33C6D7A509DF94C835E7E1FB34752FF0831C -164: B7259587B389C863EF3CA2E412CF206CB3D4E0D393DE042198DFF81AF9B32881411B75E8B63A03EC6106783FA2ABB634 -165: 028DC9C66F01D09133106318093D31272F15E103C9B298822338BE88385CCC5CB443C66971D099C4782E1B8E5BE3D205 -166: 4884C073430C3A45968ADDD2BF09AE87CA27586AB8646E8372FCD8C8A681DE2558286ECACFC3542CD35472AB8B44DA46 -167: 13863F78EFC686192E71B5190A8A6C94D8314C48917ECBD6D11555DB900BD0B022A2A95E96AE42CB050C9A79A9D20A3E -168: EE014F3121B1200DB52B7B4537C21709152FF3C3D37065D86007691B861A2462942A4B26A3C79CF2CE8B13BC6B8EC985 -169: E2E09C38CDC48132FF2089D4E014E0F9998A2F637605E38DE6846EBFDC90DF258CD1E3A0EB4A01A25CA92D21FA296DC0 -170: BAF914750ABFCEA813F14D902CE983E9C6B953137D393ABBBFB17E47658A8FAABAED57D9B5E8304B11BCDD3C83A6F0A8 -171: 1219B7B05D0BB6F4803BD2E0A89F8429842C234085D9BDB81ABAD29CA1C5096D0397AC2B1621F5CF9C217406B6B6EB75 -172: CC6267E631520B0C225832CBD2AB1A1FB79F97F6B7045514F331C2DE2A283A5FB5DC5802E6A9A94B670BB815C78C7C22 -173: 6484600876693F2077772149F99E696125887FAFDE0994A69FE37CC346D0F84B33E79C295959CDA12ED94285BD7B23C8 -174: 7C652527259D05BE20884C3E88A20695AD0F4F01CCE6BBEC63BB7B5A9175E73CA11B5E633DAF63C6D86DB86AB0643847 -175: F059A739D5018B1B7D9C315FBC43970A9D4DFA9DBCAFAA16FD3760B1D817AFB03C83B349C0A39A69474E98177E47CAA9 -176: 252EC8396CE2496889594D21CA2D93CE10E4AE98C228C099DC9655B7CEF6C2658C2AB90F6F3038CB367AAB0D4B0E087D -177: F5353252F128488025CD20F5E76FCB370C69581200B067E32B520E5ACA3080114933D0F34A15026F212A5B4DC0D4FA9A -178: 20DFF2494B1101D056CF9D1CC18E387634C416960B014B523F993EE08DF25FD44E98CD064A9E59A964AE57FDB89E0CA5 -179: 10865C0FE2C06044D06AD9E9715C695D5B8C67E94555AB4EB3CA103076288726F93EE7D09CD1468B0A64DDEA658CD48C -180: E0C4F439B3756F7B30B26C7BA0072297065F084963317AD70695639ABBDD3E8353709C6B656F63B6F48036BB4189F74E -181: 2FFC1C68989E2D6A0EF78C68F92950B8FBA12D1B67604BDA0B8CE227252579537512D911D61092A3F17B16118C1DDEE3 -182: 1B950679D834DB9DAE390ECD2EAA7A700EA2782F91276455FC0362804FD75FA212C7929A0169F8EAA80EDD108E4005B5 -183: 2D6492B81C21DB1A8DDB36794D869702E82DAB21BF773CC5E195DEA0AAD3C97179FCCBA21C4FC8C754DD3CEB3E426E66 -184: 79E81238BC7360E9324EA6452012CF14A949DA83E8616D7236C6872D835AEEA86165BA363311FE9BFEB05B4176CCFD97 -185: D7FD84A6267C50398C2D9F71DD923CC337D763AAEC3FD6004E77B3AC1E607838D0AFB617E7C82AF606C99CE5A8B2DA17 -186: 87AFCD90D1F35801EFAB2FF6AC07E279D9B0C97B62A51B854239B4E06A0F543E7F6E2FC0E5454BCB296241791A63AA1C -187: C01C823CAC285B54114E4CB7D04EAB93A1A7154E2AF7EB7617592512815D9D19553F7981A54121828DD001BED78CCF25 -188: 4C3285D910A0B6E3A5872CB36495F4BB1F1BA32946DA591FDEFF297CEFCF117937841877D1289DA308BBF7C3EB76DA28 -189: 6659314C927D903D1B009ECF0767E620C18F83B5F874AAF30FD8C2BED836DA56B93044FA5B727B9FC08C54B16F58AF7A -190: 7E159B967CCA37E61AA5EB0BADF93D068483CB44A8952805C517B934B7FF355214C27090032CCADDAEB6B164A58F2187 -191: 578CB4E0F032C45B04232E8C03B60FF5E02F22D81BE734CDE0AC9651F2694FD11BB2AE04824AB2205F4CF7ED548F6EDB -192: A3999E5672A9692036898D2539743542A8507F8C046DDBA553A8D68FED14498330910631A4018BF4F3173A846FABA62A -193: 0FDD9D3A3C64F995EB95E57A681DB55F66D4690052C994E855D8AC406EAF87E354934FB806C7E6525FABD2B79D2F36E2 -194: B0FE744FDD61663691A75C806038394636014BB35C1DEF9CF859FBB5466C78B3C3C67AD6E79C76DAED5BE125F8FA32F7 -195: 7F99B051EE0E0B89590A85D3689340A06769CA0FA6A5E5B094B899C05F2FF68FE7945279B29B216D5752AFFBAE93FEB4 -196: 8BE13C8CEA70655088B3E31A0EE9336F134F6B6EBDB4453ADD10108C0A59CF762DFE3595E48A945ABD0396320384E079 -197: 73D2D9DED1378CF9D626F84E90D91943EE61A1D184F07847EA2AE622F79E3738FDD7642CB7829B17FD2AC54A9A2CD903 -198: 0B878A27CE393CB05BB6323C531F358F22301D53161E611F67B9DE4BDD4926B531C168E15D78EF3FC6E76656B892670D -199: 1FB5F831279660B1E77B6DAA1948EB4931DA9A9D2FFA3225FB5B89E1BA64AF54F3F2CCCD22293226A362A010090AD4D7 -200: 6D8C6DF187063C47E297BA220EBE168161D795B130D364D9409CCCC53240A94B24E2D53C1CF8E4DD6055B332A6FCD1BC -201: A845B33749A6DC99886DBB49B3A9BF030188D518624D5819C38AF04EE4DA348487CB6D953C20A90CB7E8D3C8E9335DA0 -202: 1B30ACC8AEEE974F8551E1C545A2B3C55867AF9285D90BD55F5C844BA4C716270D62FE4CBAF0D0B1E64F059233F4722D -203: 20A80BCA843FAD7CD25CCA2298785A99CAC0C390AF744E64C2FBAC3FBE0F1984E5351D2DE74B712ABFCEFEC8CBFE164B -204: 5BEDAF458354FEF1B070F994A2F0A00A015754FD0CF905D082B4B7034C0DBA0004025BBBACDA06CAEED9C93B1F1FED03 -205: 2DE6E7673C65F52B8511BA04FAC2ECFDD163553553FAF00E2F921C6F69987AF383302172EF5A590128368702F666534C -206: 1DCC4B2EF1614802ECFB58E01E01F6E5C44308AE26C1E1115D936E3A0B7442085AC4AFC0A6D800FE8C37C834900FF824 -207: 3448D4A17ACA2646C77C4BC6303EB2F98DA1D5CF2F1E99B0F825804DCE39A47681FF41B06EC55420542A96A64BA95DE6 -208: 1D249F8DB91211F50F81E216C74D27EB3F02746D1F98AD24DF4271ECD65AEB6AD2A507A2FE2F1A3B7E0B8B789090BA95 +HMAC-md5 + 0: C91E40247251F39BDFE6A7B72A5857F9 + 1: 00FF2644D0E3699F677F58ECDF57082F + 2: 1B6C2DB6819A4F023FFE21B91E284E93 + 3: 04B0ED3E73FBB9A94444FDFFAA530695 + 4: 1557A22261110DFB31ACE25936BDE45D + 5: 54C5A67A9CB4544CA66BBDA1A2B8479E + 6: F803D9E43C934545AF078FFBB34BC30B + 7: 32F56EA655DF36D845E430D637C85D17 + 8: 14BD2095F4A478C10EEBFF379DE76DD3 + 9: AAF6867B3FA01DD26312B0DFD6371A2A + 10: 0FA2A6FEFEBE7CE3C31A38400F8AB260 + 11: 54C37BE13B7333287D0E74AA9D9227F6 + 12: 385D75A58B0C95E5CDC059DB168BD1D2 + 13: E73003103ED65C08E62D46AE1E1B771A + 14: 278ED4A4EBEA1FFA5EEC874F198C0CC0 + 15: F65CE9EEA7FDB90B9CC603329D3FB9A9 + 16: 8640836944EE0009B2CC6FDC3F5C39E1 + 17: 7819A99F82BABDF060AA51AE109629DB + 18: EF26336668486C76921D1DAB67ED5673 + 19: 13ED7BC140F1496E09AD29C644586957 + 20: 5FDD337CE9C4AC8D910833FCC2BD837E + 21: E9470246ABF7CF4D37FD378738D8F763 + 22: 384A75C33EFFA12EB69187BB80DF843B + 23: 63866A5406B9EA0341032FCFD0244A4B + 24: 8042F8572C8A9B88E135ACB83EF1FD39 + 25: BD1BE6AF2D022F966F612569E191F0E9 + 26: 9F70C839533EE4C7B3CF20C6FB65C94C + 27: 800A5CE92CA4FEE6F1D353F496113873 + 28: C35E93E1E54C84C4389D2DE71E1B9846 + 29: A130EF5F91465F5A56999F450E63F4F9 + 30: 5F16564E05285A099F628245DF9A3C2A + 31: A34F7E3DF06DD84CC67E8A922240D60B + 32: 945E50753B6E6C920183822D5F280F10 + 33: 2DDD269DBCDF5C21A1C3FD540FF4ABA9 + 34: 212FE3E2CEF7DF74FC01CC2CC83119B8 + 35: D98B2930011649F16C08BC8C0178D838 + 36: E39E21026111C1EFB0C491C0FDFA841D + 37: AE46DE06C3B0D2CEC35352C95A1003F0 + 38: 5550EE50BF88C9DE5ADA34567FE044C7 + 39: 6BC486627760373EACFF508F7032BF31 + 40: AE6E0B8DBCFDCCA4B3449B57647D5AE5 + 41: 6BE5A0F140DFC4B75439630E6F9A36EE + 42: E3E4E735BFE79397D4653A6243DF1925 + 43: 68C1D9E8973A3F6B92B588469D68A2A5 + 44: 956132D512118D5F446C8CB912B924D9 + 45: DF5C2AD650B3CA7A89EBF92EE618C845 + 46: 14D375CF7E4294ED99135E4237414F01 + 47: DB966D40B447692E2D13CC0C09C1B495 + 48: 53DADCF1C6B99BD403052A1CE1ED0D14 + 49: DEC4A3C1DB8F6AA4515C512C9299C4DC + 50: 3B3A51DD83AB1DC56A7F0CBE1C71923F + 51: 03C73353B3203EF9CDB95F9DB8750AF1 + 52: ED9E15FD86D66DA2D546D2BFC55041AD + 53: 81B649338F9DB1C6E592427D38221C7C + 54: 92E170E13BF40FF65E3B4C665F222DD5 + 55: 00D5E23F5F829B21D454C4445851AB53 + 56: 39057029AF0B3F4391A7BDC6DDCE4D07 + 57: 2DEACEFA698F9CCAD5198C4E17E69A93 + 58: AD35FD52EA199E26948009DF3546D3A2 + 59: 4C42CF2CFD4D8FD9A06E3F73D02FE818 + 60: 4D7C893E4313FFF72103854463414277 + 61: 3F04E8B32AB56EAF216503E46BD7AEBE + 62: F015DDC3EEF41ECC93E944FA3577DB52 + 63: 31F77A50A2ED96ED8E4A3CE04B9DAA23 + 64: FBF481373481756E0C88978F7E0809A2 + 65: 7D8D793B287C04E7D2896D76EAA5CA15 + 66: DAC74AEBECC2385DD9D0C3147CCA1F78 + 67: F6DDE50D37B460FF5E8B4C03A0854BD5 + 68: 5710D6A54A2124E06A6DADBE9BF76119 + 69: 19DB5D13A53E57184759F33976537AA5 + 70: 848DD8D32130626FBD11B0133C2A29E3 + 71: 4F75BE04BF2F6DD85D048DB82F19C38C + 72: 4AE9436540ED24BCB5EC62977AC90789 + 73: 859D1A9FC2B795AD60F24A37EB9EF890 + 74: CD45865317FD17B652DE9F9EBBBA16B6 + 75: 52313319D395F453BA2C0A0159CF180B + 76: A7B190C0EECACCA4DFC5B45DFB324718 + 77: 23E85CAE85B50F45F7F48EE0F22FDE85 + 78: 6A80DBFF139A5345235EF76586CFCBC7 + 79: 850E638FCE5A2F3B1D1FE9C28F05EF49 + 80: 797CDC3F7E271FC9A3D0566A905D1CFE + 81: 030CE97A9A0B1D5403E253D883FCAF12 + 82: 648FFFF44E416D9DE606BA0DDB751194 + 83: FE15098E0DAC65FA8EE45CAC67121CC9 + 84: 17C90ECD390A8B41046B4C7FA0354E4F + 85: 7D149DFF5F6379B7DBF5C401DB6D2976 + 86: 8D055A4701DD51CB9D1AF8E2AE59BD21 + 87: F3481CB07B034EB4A023D00D4FDA9A86 + 88: FEB22562FFAAA9CCE5CDDA34C29E55C3 + 89: A620AA447216709D8CE5C5F23474ECF8 + 90: F25FCBB2BF7440C5E3C5B53092B8C828 + 91: DBBAE1CF60BBCA0B05EDEA0B362F0A33 + 92: E18E85BCB4633A797FAF7975CEF44B84 + 93: 1BE27EEC72C2EDE151978705C7C7DED2 + 94: A15D36C5C5BED77699838832FC225DD8 + 95: 08F31E68BFBBB420742F80B20B69BE8C + 96: 5E9B4B5B3228F533BA8EFC3C0B9AAD3D + 97: 1239BA6D941D1D8AD2ED561BF517D4B4 + 98: 5233F50218E0D097EFCC68F1536F30AE + 99: 340B47C78B003272EAA4B9D22C3B0542 +100: E7F11759FE8A897364C21767570885BB +101: 054BD6ACBFD5421C0290B0839C0A0ACC +102: CC0748F7B2CC921CF5FA019F955066C9 +103: A4DF167697949B1AEDBBA3226A334BAA +104: 29893B9776BA5E750A9FCEA37B0116AE +105: 2DC25C935F006F7965FAB3256D77004D +106: 24089811FFF2189FB9AF38651F43977D +107: 0E048569D634BF652CD8EBF859C9B69A +108: 00386B569DAB73844A708BA5B48BBAA8 +109: 8033E1AFFBE1218F81C8331343FBE5B5 +110: 9B82008A34F3847C1204ACA89F3D57D1 +111: BE1A529F88AA05A42AFC40F663E97849 +112: 5237637AA645E83B0E56A1361AB80643 +113: 15BC4405E891ADAF48FA56D4356705D5 +114: 0820087438832B63AADC479CFC88BDBF +115: B1E3BA7E96605D5FF614B1BEC1F57AC1 +116: 838A096D64E6C0DDB069DC89E4C3F839 +117: 934BCE159F3959A933C87AB497CA8D42 +118: CA501F1DE619A570DC38FDCB8B3F7722 +119: 033B27D5994A6F5D5F6800539B69E876 +120: B447FC68FEF4E3CF9290B06EB6AECAA3 +121: DD3D3F72F0F1FBCD030D839DCFEE457A +122: EE73C4C996E0150D93B3144F20FB2C1B +123: 5AF9679D2441542391C6A903FD8C1626 +124: 2BD84B87230511DAE7256B62A46AA45E +125: EB159E5694C191F7708951EBC0AAF135 +126: 60F02EFE1DAFAACF65F6664A2321B153 +127: 14E5A0E90D4420E765C4324B68174F46 +128: 09F1503BCD00E3A1B965B66B9609E998 -HMAC-sha3-256 - 0: 50AB1606034383FE4B3B4BC0A341A82E40AC85E455CDFEED4CAC902A7B8CCFC1 - 1: 2A4A74B8A29CB3A2CF8F68BACA39CE678A516DCFED48F0028F6F6B21CDEE5CE3 - 2: F6F61821815051B11CACE0C3B1E15F794754A0ED9B285EB049C496D902D76DAB - 3: 122DA3592DBF80CF413B6CF1502B65769BAE7EF0E6A172A12A517F789049897E - 4: D7CA62324DD6A8569ECB7E03382E51D0BBD889F6B5809C42ED484922CEC50C1D - 5: 302C41DCF6B0D51FF46BB17F7F7F47DD466DCF4FA0692BC80B7142D92C94B398 - 6: 00988C6E9C8B75134E1ED42C6827E05B733F347A6DD6A4818F935A88E38AF0B7 - 7: 2288F2C4EA56CADE449DE10310D84DC7C8834855D3B6ACECC7B61AB4EEE169C9 - 8: 4B1C51C1B733CBD9D580AA144370B7844ED8737AF1181FC330F56F9716CEC264 - 9: DF656A0BDC3EA93AEBD2ACE4F55C879F8478FC4B7F550205189CCD285822A087 - 10: 7B074CCFB872E60AE73E90728B4D737327AB3ADEE35F0DBCA4935943548FE0EE - 11: 725E3E314C8F2B8EDB137810560E9F963088377101EAE97F1102FB3F51743F0A - 12: A64D8B525AF849FF14E88DF144166040F9470EEEE8AAD01E8398C842088179A7 - 13: 59E974E7B284E1C3F57AA84D5156EF1A66974A34D9F858C022DA642C24F89946 - 14: 2B33807E49DBB32F23A8A2002334D087D43752ED54254DB1B4167CC99F07CCA6 - 15: 0BA1EC1F3BAE7D4D204BF699A5552A92A30F67CED38E2B10C76B6C74DC140081 - 16: 58224E061A36912A8549EA6D607B3B88CAF93FA6801385CA04142A13DD44AE30 - 17: 242069CB97DBC5E3CD67290A72285CC3F1B9A3EEC4A83E896FAAE065E342BE74 - 18: CB5077AEEC2B61423B8F8CC227DE3CE9852509EABAE7C863A183F8EB039F5F7B - 19: 4C37A0EE90AB318AE30E577986E782F28897EAE380D2DEB28D4B142F4E2419A9 - 20: EEB7C21D476EFE2117FEFFDD7250BD29B57139BF20C951256E3556DA7B22B0EC - 21: D97566F8D85FA503926DA4A4F67412AD5AC427986777529A6B624C3CD6E65CF7 - 22: 518A2BBBF93B27A0BCD280105789839CA571EB01A99D06E8767ED99410A19E6F - 23: 2A4A957A16CC7BC7C9393BC5D4E3B12A4252A4DF03BEC301AD880DE08E9FCC46 - 24: 4F5E365BFEE6D1C3EF93FFDCD8AB271D6352F29A3A87A6B5F86E104EF389EF3F - 25: 4A19FFA1FA0AD3E85CA230BD1C48C2AA103A21050442794529B9B3F8F029019C - 26: 24677DC7A18FC2227D2137EC649C9B95C6F447561BA54CB081B6B9219F14CBE1 - 27: C8AD78F00E660E54CA173D0D9F9261CEC673150B17F03C30DC25599E574326E8 - 28: 6D402B040C9A9DF4B59D7AC5648E586DA82AFDB123237CE87964D8CB2ACBEE16 - 29: BD415D79E5C662E6251C3EDE20D47720C9CC415C413AFEEC1A64A2E293E12504 - 30: 0E6E974A876C244CE8C1862F9BB37286B6F4786084131A50844DE64F90201789 - 31: 887EF591EFF9BF94AFC48824B0E6E521242842170611EE3BF4E43075A37FB5D9 - 32: 65B9E787A34DCB7F8FF6914BF4E32F13108A8124CFFBA41F778EC5E46E19E219 - 33: 053238A9703A446E7DCF0DC70BB99AC3E40A4A1E2A0FB5B8605439C08E2DDEC2 - 34: 0F75F3CF5DB76A495AACE8048F890B7A8F19A190DE33EA47F145B35481FB7BC7 - 35: 45DA38BE1889EB202321D4A3C47162978A9CBDA8B0151C666FA99E2BF6F76798 - 36: 646135DE28865EF17A8596DDEC2CFD55F11F2C8B040E78835AE6E4962C051B03 - 37: F4B0A9FF537B0A376D22A409D9B9F28C5CA839F0F7EBE49A37B8263AD4CFB2BD - 38: 499F6A8A55C6D47A4C34D3EE81A75207A24CF900D99F4A3DDBCE78EED1A7C26A - 39: 945532B77FFC4CCB3EF7F20E09CA61E0F410F94BDEC9914207F950EF234B71F8 - 40: F8BC5F01A338090989B5507F81459C7CE8D0892E449ACD06F73F9DF79057F494 - 41: 107B28EC5C3C08CC0ACF86B679CC25D11DA16C42E625B8EE3BBB19EDE93B8F94 - 42: 40210216F27C92463DFB562826DDC5F01BAE75CC70AE97631CABF42C8D047B1D - 43: F678D0E03FBE7EF49CE023D36867ABF50866C775CCB46F2C1E5DCC77ABF1A73F - 44: 64075E1D786A9CC8C4AAC9D0F563A1D5FFFBCD0268830700DBC8E4D8BB30C344 - 45: 4781DAE774404C229D90BCECD4183D1B3F3CFA9C194003759F5DB2CF7C7AF95D - 46: 8AF09DF7EA4517C7B0D9C4C805C21397BFEBEEB57D554F47FEB4D80094AA647D - 47: 80EF33B0605B22A8D39B0F12DA83D975E69F06DD4906B9E6EC96B08FE88B8C83 - 48: E3C38B985F5CF51AD52310DF2405F78E032DC4AD0997B04069A5C16A35CDE985 - 49: A206A67631F595342D57FA131A306B7B41ED5D84F4ED4EF6746EA791B4F85A11 - 50: AF2ECD57179217DE57865DAAF9B13420597FF28FDF5FF01F1E2D9C4551ED57E7 - 51: 755796523A028BB7CA985776C339872F832353002C42FB8572D8C49E38E6C9DF - 52: A016105DF6BDF70BC6922759F3A5B14B58718273BCA5BAF98161DFBE607F1967 - 53: 4ADAC11EDF3F782ACB8877232055595CB7021C5960A310F2947CCB9B5B3BF14E - 54: 380F57D0D7F92F865F3A43BB4F52291F547F12240A6677B7AAC27F29312223E0 - 55: 03510CC4C0810C80F5981E52A044DDE9DB96BE58BF5D130BAB3E269B6F25C062 - 56: D21516F9C19A56F94F0724974B82909B86AF7291A94CC1F38E8D69EA1FAE149F - 57: 0BA82501F3CC71933134E096FFF943D24BD44A6F3C848C1794108AF2180D5CFD - 58: 277FC716ED0D63C72BFA846543675CD5173B85F04D9299ACBA9CAA54EB58B76A - 59: 058C2544BF65F46D7DBF5FC035AD4CE1D882A4C15861075BC6AF2DF5D60FBAE4 - 60: BA67ACA8A335198CD39C94E335A79FD9CECAEAE2A949B4DB6667176F4626AE8D - 61: 2486D1B356DE82F58EA2C6217FE287034C822805796F7CDC855006BDCF339F66 - 62: C274BA0F6171B13CA7AC891E2F94468D2E63679DC807C8EB062CF5872B017AB6 - 63: B58BB3648B9EBF3E973BE866D97AF8AF8C1401209174AF231A82821464D2ED6B - 64: 399166BF4F0A1557A287EA34ADD02E31E101368B70186420612B5CD686188112 - 65: 18A32B258CCD3D1B2CED8DB4AF840047625A6327ED9157138BDCC55ACDA029C8 - 66: 2ADC58FB648C5AAC3E5ADE50D808BFE983257A397EB25C305554B4D10CC0C415 - 67: 46524FF96E26F6EC52D6F7365438422FB4A8E4B41839C3BE8F0DE4AF4665DAB6 - 68: 3E7E2B6EF00FDE432DF84D58BB62BE72A4F879C30BC4B9EE3CBD7E671BDE91C5 - 69: C76882FE783BC6DF51ABE866F20AD3959C79152AF17AB373D8103273363E297B - 70: 8273D27F5810FC5F618310007078726F76835A07AD939DF874981ED3933EE8E2 - 71: A59987A2FF53697FD7F5477AD93C5D3347CA3A4D9CF2F7B1DEBC5EF0337B6BE5 - 72: F3EE99BEAB752D7F967D802B986E0C5E440FF55E6715AE62476C175DEFE49880 - 73: B8BE881E07549C7B512BCEC147BEB0999F60B37A9E3539C064BAA9087F695EA4 - 74: 526C78709F5D0FB59339C74AA110D85A538CA5F285D4C10072D0360EBB6D792A - 75: 78A52E87F895E3785A03BF0CC07B0BB3E4B13E39ADF3AE10345F55BBE4A1FE51 - 76: 8753C9A1AA4BBC04B70E1E53D2F332FAFBB37B22E04F73475C231220C078E9D1 - 77: E138BE525A0FC25896363D702DF7A51A76C7D0BB6B934E9F8367077C0B114348 - 78: C1BF13C457702E3F55B07973AB822246EDBDDA27E6E9BFB3EE8C8386C5864DB1 - 79: 0214524AC7B77CBFBDE5EA45F3591E7F3F14646D47C6E780DDEBD694A67C8C47 - 80: D03733E560950CAD1C08AC05EE4A56BBD2B6B66C2943908AE7C55B44BAA444CF - 81: 142E70361E8188C4A03168C5A9E09CA9D63746D3889DA9DF25272F2AD4715919 - 82: 58784A0DA7F53F9E8F61EC2DEBDE47D58484917FA1147C6AC2EA166C27F3D55F - 83: 7C10F5BDD0DDE3981AED24929545CFE5F7DD8E7C0463EFF8DA8CE2DC4B9ED4CE - 84: D68688FE3542987A21666ABED558EF894071940DF039C0F62E7370C00414ECD7 - 85: 69D749759F6719D5D7FCAA8E3FC880AEAAE02ED3F19B2CA3AF6603CB2EF686ED - 86: B9495E9BE90BDD2898C4BA79053E0E3BBA0CAB96156A19B6474F3D8082062DC1 - 87: 932A031D47705146C3FB5437B2BB5BB222A24F3471206615D0EB48E9616D2F2A - 88: 3378B7ECF28B590AD3A5B63DF280A2EDB4828BFB23A72A53DBE29FD5B7CA1E0A - 89: 9231275B81F2F318CF4CFC54216FD0CD66B252954AC325FE43B52207FC042FE6 - 90: 4C20DC51B49C1EF9CA34DB2BB885B3085218672347137F0FECD6342FA0A44E0E - 91: 17786F16279F1303131C4C06147451D9BD9527FBD7B3059233B2E5E5EDC76019 - 92: C9DFE55E3E9EFA758E5E678CA185C23AFFB16F4870D4C5DFBA2F235D7234808E - 93: 8BD27FBCB0727CBDFB29FBB32CE54761B659B6DDCC3F22FD92F81D711FAADBF4 - 94: AC72CFAF9859B6AFCA17D6CCBC31E14309035F179F70CC6C50B1E983742B61B7 - 95: 3820FEB4C43B2282B2ACD90E0D27CA0FB3DC4BF70C87D5C00D10284DAF9F722F - 96: 223AFBC2AB5E469ADCBB53CE8AF8A6AA1A4F84F9D9487002FD1FD17645BAA39C - 97: 269B0B7EF788E539FD881678EB1AE50EF3D41B8F230F4A76A1C6C77545549D75 - 98: A2020C92921389FF94689A1060622CE51F28AE5F8334D297AA64E51A09DEE73B - 99: 5EB2A6402D59F950BF0ED5907BDE3D3AFFFD031F2836C484C1C8F684CD0F870B -100: EB99D8D3CAB05F478E42079EBAF4565525DCAF9C64F62D7B4A71CABB6759B6C2 -101: CA4C2B65B20E3E442E8E4B49795E99A7EB93A513FDE592AD5BF6027FC0899B76 -102: 8E4B9C5D0883229F6CD2FB574EEE3C36B5346C70BDBE0CA0E273D674478FF034 -103: E01A183FE7A893DC91B1A90E84505E2390BFEE27705483EB99B5EF1A5382BCA3 -104: 2D5164AE808F846DEA107F8A919F4B8A876CCA0C5FECAB9369C3F64EDD9F6F5E -105: C2771B6830E50B5A03CA3523FFE89B31BC056E837BFAD3968937091F69115748 -106: EC666174054E0A7E07F1E4B689515BBA0C70AE109DAC104916671FAC934F972A -107: FC5E78FFB1BE74069F233DECECDE65FBEDE8BFCDB921DC53AF7024F7E45C0683 -108: 9BE4DAD0B9FE3F7160D0DC744882A4454CFCD08298A3859B8AE2231FA5F53B2F -109: 8C27F7A101ACE3A4D73607391EB3AA1893FADFE919DAD7838BD3998840BEDCA6 -110: 18512E220FED71B504B78677D81614D33427B2C753AC50B63EECB6C7E1858064 -111: 45D95E338C0681FF16F0B76FC3A613D0BC74F72EABCC3D548CB2264DED924E33 -112: 2BAC2857BF866B536ACE7270A5CF71D0532939EF6CD937D23E20BFBAAEAF3D0C -113: D289400575B939E0147D751110035CC8624A6AFF5C8E5D92B0048DC01FFDF1E5 -114: 27013272AB9340B15DD0EC5FB102A14438434D2857E580A1E4DD655393E9E8CB -115: 7E80D7EB1F1EF312AB38077F82187C5BA138A339A6E3E5DBBAE8ED530FC815DC -116: 5AC6D7E7E40CC968495778BBFF6D4518D402238F9525FD105C83105691E04C9B -117: 6BB712FE2F629B780FDF8C02B063CF28F577C97E96DC5D0C5CFAE5EE952DC60A -118: D11AD92D2392E66020B76B22D16ED503B01470FDB6473E579F9A6D676C39A936 -119: 07C552D7624B8E22152D3F3D7EB450AE400946BBBED376E2E74296F3966739E5 -120: 37B7848A2BC57DF301F90BD95B7070BE8731971B64D6A91B2246910C4BC28444 -121: D3C525A0F26AF107CFB82862543A3D44060309B5A8D8349476D8FCA68BB54186 -122: 77A0E371F935F8176285E726271C0418628D0452C65C0106F052BF457BB6BCCA -123: B01A31AAC6A8E2B64679473304C2BE2362055C81C04E15FBE6A112850A831440 -124: 99A047D24C5A77E5A10A29B0E361F040AAF886C93F733967238BFF0D0C3C0EA2 -125: B699EFD9B6FDB0F6D37C32317A7DBFD0086A86D859783C779878F4A3331BC323 -126: 8589EE4F7200F9BC7A5E2FCA66BFDA5E9E5E3AA6A3652F5C6FD419E9F247F7C9 -127: AEDFF2E6D7CD7D083F8D3D7C3ADC701D64F62044C1AF95787F30590C8E94FD53 -128: 1E641D63B739FFE9FD1388E3F1C36F59D6ABCE83BD1448B782B2ED0EA24DF0DD -129: 99137657DE6BAFCC8CC5FAB6206BC91CD8869F59CCF125A76D2B90DEC9D9F99A -130: 9BAA62AC62BD25FC74DD090DB5BAE3E2FEE4A4BC3EE4DFDDCEC35CDBFB458D03 -131: 661343E6069EB01BC90AAB94FC91900255DD5AFA973128AE4AD7A816E0003C1A -132: 45DDC37443CAFC45172D2E276E49CC82163C2937C14C2F332D6A3D21E9A525BD -133: EE83394466C27CC56F73F3D45D425A6E18BD7F847AD5302447B7C6908A2CF4C9 -134: 337D7F763C292F9C8DA49E62D47D6332E5D64F73A9FDF8C693385F2A045140DB -135: 6414B64B863E98021DB3618D54FFCE52EAF6F9E103E5AB15EFB0A58493704A0B -136: 46A8CF7BB8022FA6EB8C0060FB8CD938E2FB51FB30C9160A707E0D1396C382B1 -137: 4F5693EF4CF1F92E90A45621F80B4BEEEA0208BB34C0DA856099BB1A430D6305 -138: 834645A17330F8A307A506E9F7EC5FA2239784B90C590528B12B5CEE37F693BF -139: DD89D1A5B288F32601EE8CD02CB2FC1C46B946AECF7A8371E5B95FFF95B72935 -140: 0D9458F49EBC787249E1FCE27B5C2E62E455693959899514A1E6458FC970F2D2 -141: B8052FD0F2563CDE49FD5F0D9E23CD6E4470FFEA2D864C1353619434AB71FFB6 -142: B01087ACD73274E39EEAF42840A2BA3F510348E03A337A515418272B728A59AC -143: 93BD1DA6562815233B7557F0C422EA73DF2E1B014B4D8D0D0BD9F912869CF28E -144: 81C3B358D1FEE4E2C01DFFB8974B3558416D0D8FA24CD39C86A8CAA395DFC6B5 -145: 1CF9E97B10B8942A9D31D0B9AC1160878D5503E21E6899C9A60D958E5780696D -146: EC9C7AFB37B734FF8E7FA6DAB7FDFBB9BF27031B820AE9208EC15E46BC956523 -147: C9C2CB7542AB4004B225886AE36CEB3414EB75675D28E9968EE9ED447FACA53C -148: 1558C16700576BC28BF5851D6121748135359D2B0DAB5894B723069CC2EB0727 -149: 23A98CFC310E98FF5C275D26BEF42FA4FA69B4D355B0E46F931F35827D061371 -150: DC1BB529596F6D36401980038A1B75863800A715860FCBFB2BDBDF0AE4DB5967 -151: F434E237F8C2956D55E4AA85F559C7034DB945B350077636D99D3E34D321753C -152: 52E7FCBC18D02D8EFBBADAA3E7FF09CB2E8C8A30534612C3084515DBFE91B252 -153: C728EA292FD96DD66A3D6D56CEF4A20B8BA9B28EF5DB6B26CD813F481D4C4ECF -154: 097EBBC0F11EB0F1A8DDDCCF737A341ABAB4277B69AB6571D264368A52B42CE1 -155: D36E8951ECECE489A9710E18A1A3B090F929B77EB4342B024DD933B88D569EB1 -156: 8B27A24B6309F3A9AD58FF5C1DE97439F8A306B22DAB359F0F505437BD47BADF -157: 600AD22E3680EAA76DC3CC800C0E15A56B85ED9B0C201D12C5B565632BECCE08 -158: D5E54E53ED68592BD379F607A71C66D9D24B7533B996B952F2E9175D0DB4B53A -159: A94DBB464743F4EEB9169134A12EFB20424E4892C61849AF20DD2C5C9CC0C34E -160: F506C8FFB058467CE2FDA45308A00413FC4AC63A1F7D05AF3514F3FE07720DF9 -161: 8CC63294B21CB17DDF6214B296F19ABB36AC1F808D8A2481537FE2A9BA86846F -162: A5E796A0A6F211CE76987C2B7E965C3A6A60BC0AA46EE0B8C0A1752E857A40B5 -163: 401C0E87F3374AF4688EB111B153585B6AC59D15002279A67EBFD7A44CA37AC3 -164: 9F273752D15EF9232B67FE4544CDD77ECB05054FECB7BB777353E33106D981B3 -165: 10C1828084676F9527C5EC8A86B85E476343573E2DC01F76AF020DB0A051E7E2 -166: 57DF379A9A4F2CC81B51B7E902174BD754E615A41924B89AAAF1D82D0A1B247F -167: F968E527F2BE68B71651B39822902B920B1321A3C1D279227C9674454BF929DD -168: C8307C8DE70251DFB7B6F4176FCF3E1E2B084BD7BABCEDAE051660D112CED766 -169: 92FAD2A894E486C8F7B95D8328C07BB0019F87B412E7A0828E620D306FCF4BFA -170: 17CC3FE3A2DA637E90546C9ABF1ED9B3AC8CEFF9A1B2F3D30C818B0C55111AA8 -171: DBE1622DB683472A2A42C98B837768053AA9D3B3FB71255CEEA61A4EC89936B5 -172: 8B46A4EEF26428FEF253FE633E86450713BEECC6CFDFD6046E7B32666667EE0A -173: B0D01C04255AD566E24774585D1A4FF9FEDFD61A361E3E28F2CA8D1CBE4A438C -174: A5AB98E1CDF0C57328D373A4B33EFB85C8AA52178BE521B41065BD1C03F52A95 -175: FF470AC4BF1D2586B9BD9BD7730CD4F48B60357D4DF99A65ED26630DF3A1C989 -176: E8548CE2F42C1B6C4820E8D1FBA066EE426E69058FD7B31A18B9AA875C29502C -177: 5DF20D1EDEFAD55F8EB7E4604D8B4C2B4DC6F03753FEF0A95EF1AD75690EB4F9 -178: 632E58E4AE4DD26DC10FA6718225130901190D97614E151C72AE866263878BE9 -179: DF37B47ED64970D737B80540402FD25C74A4ED0CC5F4855067B202642584531F -180: DA715F8847774B39E7D6C70BC3D80AC4EBD65757D60A4AE99FABDD62DBEBC0AF -181: F84A5417AF999AFF15F38EC55BC1BB6DA00D40F81B6EC3D911DCF01CC6BA0936 -182: 662177D61F8C69E7080284B139A541D3AC2A499F62B4E80797BD98FBF42C179B -183: 5D481DA0458113106E36539047AD96E9EA68662B59E7EB0C04AE4F3DEDB62B48 -184: 58EC20C1B4B205E00F513F78284A0CF702D011BEB37FF4BBF65DBD7C9340957C -185: 23D9EB2F0763C3810B3492E3B401FF7A79368EAA62E447C984EA274A9BF025AD -186: 49A121A0F40CEBAFE99A77EC81BC035FAA3614E0C75A1B4E4AB75E36948E7768 -187: 36132A7DA9A65D27C5288B641BD7716F5A8F92D801E62C56838A3375C7AC788F -188: BF07B9182FA62A50A543E82B95C87845F24EC9131729F0376940016453577AF1 -189: 76F16FAEC4AA73A97E6AC9F3D8381B57198C7D8D4431FF40E8F1D73BC9ED1C2C -190: DCFA909E04204949A866CF1A8D2CB230AAC22462E474A908DC42625919E9794A -191: A9F12AFC050A6064FC371636D50CAECC5B1EB8DCBE094179FCA51ADFEBE3CC84 -192: FF715336D5EC6BD4AF1E68A92EB398E686D9F3FBC84D9AEE4FABF513FF9B6F10 -193: 93649AD7A74F92CA9C6AC6456AD9F33F77F11823429DC5E87E5456B088C10961 -194: 000BFEE1B37A94721AD664D8EB639FF572881483AA47668407CF3E7CC08E3E68 -195: D60708054606B40FB53C87B68C41168CA99AFB30F3B72B41D83A7F36A5E31778 -196: 4BBE606CDC9F6F5EFF5294EB472093D8D13D927444DC2C4B0F25938862DD1869 -197: A81A403B78559DC6B7E1E577F76A5343429C613A7F6B4B17573C6743DCD1B8E9 -198: A4452A113BE56D8737263F965E367416BBA95F825AE4EDEA7FCE93B801D23623 -199: 0BF6BFB442054369663D4204E2786048C8732A0604942656BDB7CF1AA8973925 -200: DD072D6FC4A203F430F4D44B061A15E525FDE572159CCC5DDBFF584FB8DB23EF -201: FB4B75E89C01A7CB7B82DE3A6A2D6EE4EC62C09CAF34DADE24EEBA6F0F72DD54 -202: 0558E94472154611665A926C2760FD9BAA034C5CC89A79BB3E4007F64DD4E16D -203: E3757AD0AF9DBC26B09334778333F27CE3F88189D834AF807A1F1C1310CD7527 -204: C1823F5C31D59A02D4387BD1D01B7358F2490858678AE999C5C0289A7A1C71EA -205: C2169C717BF782D7B19D2F6C23575FB053AF8969FD1EF14FB4374C3ED0290609 -206: 136C5F7C2F097AF920D2CAB5E3A6F004AF75E48F79ACAC9804957AA0830C6F0D -207: 2D6BB9AD9E809EBFC6828CC92E9937F8F8D5E8FC7B619521A5E73AFE1CE0D91A -208: 0AD746155EFCE203C44CB8367D11D2B98BA25CC41FE19FE8B24CC8A4A4925C3C -209: 293FE64479379FC50C80F598F567F0D8F83E5DE1A64B65CD0D8E24DA5301C739 -210: 071193E6DAF311F73E020279E74B1E723C3755F469D6426BB7789F409DD082F5 -211: 1509EFF810D1CC408684ED0F1C3503DFBAAAD9E8A5AE518A0DF2782AF44B33A6 -212: 5991927B26178C7C0BA7EDD5D74024CC837FC9FBD70E58B8418574EFD3A5F484 -213: 1CB1C2FB4496CAE5014718031BFAD64C7CC518EDC7659E4A786925C1F8D04F62 -214: 595BFCDD70F1F32C5631F270F1D8D4818D57F120516E2B5C4D64F85FEC0A6ED7 -215: CCE1D922A8AF198048C7FABCF1D42E15FFCD44C6E276B9A00B2F97FB5693788F -216: 85C3F375A51C733809F854FBD1E38CF5BA5E22A3FD9BF187B1AD66DA373C00A2 -217: 18B9B92F696ABABBEE8E7FE09734AA742A953E68810DDF1C5AADACB298673078 -218: F63A28A74339FB739E751A76F9C888C79930AFC73F1B43584595E5A15DF695C1 -219: CDD08C2839D569D4138C2629CFF9182A3F3B00C9E4F02E2A19316058882529CD -220: A40EA17095A5F42B8FC22610D734CFBF6FA73D1B2C758C325450B38DAD966AAC -221: 02CFDF1A9972569AC2CC02B5BA030564B4766895F8130CBF40175FA936F02032 -222: 439FDC2133ABB08E1332A14DE0D89E7096D8ABB981D7C04473AC1C087FBC3C3F -223: 6B813D645ADE1FB3B38EA39115C82391F227466FD13865570B806A30885C9E79 -224: 7BD097E6665E3FE0D3838F264E6FFC5BC8B084002A6CA0BBCE3E784FEA24694A -225: B705257D8A2EFB36696F736DCF837D6CC0DDEFE60D536C77E2CD686666B42E93 -226: 1F14516210A43C4C3C6EDD491EA8DE95C23433A0DCF3D8FCCB1B2105322AE450 -227: D3FED5040397F0CAFDFFAE80F743BE8DA753A34145045020FAB72BE3BF9D02E2 -228: 7B6FD6D61E6F5FDF59015DCC3B713CD74C889214DE584CAF4794B59DBAD87E70 -229: D56D25AE12D7A29F05B088B7562394AD9D5C94A6DD771DCE028AD3EF21348341 -230: 4237236529661A99E776617DB6D6AB36442A581B0CC97D9D3CFADC40A40EF252 -231: DBD6B4A76F0DB0E1983F8AA2208DA61558C8B366F470B2AC82F45B3C07A85CAB -232: E339723895A9F394F9BE7165276DB31F8CD47E54AA0EA8E96F80A1F136499088 -233: E5A30A8DB4BB8F7F5C3C94BF2CFD0BF366CF099C3E5FEA81477464C076E84776 -234: DA0C79BE315A665D242399FE1DEA4F23C8F332351C111668A3426197CE1D209B -235: 9FAB51892F28FA9196B05FDC0B4714C957B00030A96F98E8C84C966CBCC0714C -236: 3B571B2DFAA7233C9CE8EE8A62D3299F255A8C8D05FDF9502F5875F5E49DB20F -237: 575CD67F22C60256443AA2749D00D76C440C0FA1D44B6034EB03D4E9CB7AF86C -238: 8473742B401B29C5FC6D2384DE972E8005B60AB05BFDEFB952848662FBC49D3E -239: 61FEF2413F455758D37C0F7624B417D145222C7F1BEF37923AB3403A9B788BCB -240: 848A9A96C894AFACC6569014C5AA344242AFA3DF482AEE070A6028DA8DFEE536 -241: 5CD2CB40D998592C90AB4B3FCE978FDBBDAC8810EC77228B1F8B7CD399FF113A -242: 4B0E5A2C4071D77C7DE8FE77EDE2845085170A290C69B7253F6148EE53C3C0FF -243: 68077310C146FBD01F5B38BBB4222E8D21FEA31E0959A0463360952E0CF3AFFA -244: 022ACD451B6BB3304E7D3547EFCFE2613FA7764632BFB5845675716B3BAA6EF4 -245: 28C3749126FB7FD2846375B01A84F77B9D76257EB0EC0EDEE333128244F54042 -246: 8B77B36CF61AF6468C3C205CF46989EB832FB38D34A5FC711BC15FF1AAC4B42C -247: 4C5B01C22BDCD239E9AA8D78DAE76AE558969A9929B589CF2124AE8CDA922452 -248: 061D00E8181D9E6DD5A19CE14FD002CA17DA471028AE4EFE45B36B15792ED671 -249: 6693FED54BF0FE3EC58CDB72CFBA4CAECF6AB5C894974FB6DE7B0748419660C5 -250: B39000AFE76181C104777375284B3649461CD36AB48FD63D03B07F45C8B7AF39 -251: 025AE98309E87195E70E6D66CEE69E8CB1BF0DDCAF83F9FB4D7B6E67975CE832 -252: 00AFCD23E40B673330FE1AEF7E1A0FD15C3E606494294C626DE6F8C43ADFE138 -253: 0FA5EC169687DE9622B4EF94CD094187613FA229F33D31E03110EDB5C593B555 -254: 61F3C895552B790AA9E38F3257E909C79D3561B572F746BCE4762208227C4595 -255: 0A271E998A3C5DB822588BA02A137129E11C5ACD059570F7E2DC9BDB1791144D -256: 2B91CF89FBB3353429262AC896A57FF6CBD5BCE560AB3C1106FF91285747D80A -257: 3D84BC671A7082B45867308A1911B39D3B204E924D37E069FD12C0DBF7F9D6CB -258: 799A1E3B40FA9741FCD08232C2F37589A2A8A3F42FD31F5A56C69EEC199E646A -259: D194CECB713A996DE9BC51F4F2D5A6B95C79E746BF67282F075D1CBF79B76138 -260: AA3CAF601125B94D9B3AE037BBD513F877A16C0C326357E89B5B4806D1B5CA04 -261: D13229BCBA5A7413DF53F983695F5E7E8A158942110D5F80811FC7F2A26FDD0D -262: 5BB5D3B4320976E40364CAA40E39E41AECD835CE892F05F333D34259FFE83D69 -263: 05184BDDC02D0B51C1F17B8F9B36044DF65AD77915FB5287276DB906AB18C6C9 -264: A2F64FB5F1A853D18E47C479CC3E33B18DC98C2027E74643AE348EC9B2975798 -265: 9BE3D79EB5997C872041E5EFDCFFBF431696C4264385E5EF9DCED5206B9C37E6 -266: 8BDEC3EB418A6E4582BF7F7442DBFBF84A3793E541FBF314CBBDC6DFCACCCF38 -267: DCD72D14144DA61ACE65F6187F3F70C1D7E996542D6057447DFBD83DD9C607E8 -268: 93BAFD57513BE654B3C531ABB9BDD377946EC0368EB0D7F27A6F459C8E0341F3 -269: B821AB8CABBE27663168172CE01ADF59BA3055F25CBF344DB540F3218504E866 -270: CB8021976EC64A700DEB83081E1E556DDAA9B92B1A9197704DFC05D0A00B9CD4 -271: AFA9DE95379ECAE67D8887BCF2EB434ADCA23D7573A35A8350A0EC321696976D -272: D4CA369A89DA417922E55530703D6C3A8C7D3CB67AD7241184D7FEB27A7A0314 - -HMAC-sha3-224 - 0: 43B8F94FE31D2662600C97097AA0D45422DE6C5BEB14DC05F76BA6DA - 1: 74E16D1585E0E9FEE9214860F892DA8D53B3B3165DCD200CE8F78119 - 2: 4B0B7F09748054B19B97D7ED6005B271AD257B849D8930D40F31892D - 3: 1F465A203DA3B301AAE9BAEEAFA6532D822BD02739CB91E5F6EA9F4E - 4: FF53166CCCE62D20670D885EC8D962CA07606BBADC5C40B5EF9DB387 - 5: C31516050FA58099AC22978436B3C1EAC7F3DD4652B87CBF76E5C0BB - 6: 57E4B09416E2BD5BAC27A0C6AF920CBD769B5CCCAF1D9BC19DF24288 - 7: 8819C0198E1BD9EB20A13FC88D50F2C6C58A27F39165C368362C3692 - 8: 64B0108F3CF4A545B309F0597E869107079B3C9E07540E9F6AE0B0DC - 9: 5D05CD8C5BF31C964825C71D8E60829F8D9D619F320E0B6724346413 - 10: 09CED0D7384BFE2ABE6857BA256193DC0ACD0E5746CB7BFD402E3424 - 11: 5331D8CE79B49468257C5B04E8C9BF131682CDDDCA3F1417C80BB07F - 12: E10EA9C3AEF6ECD8B57AA50C8F272D44D1D893A0C2D95F64AE3B5695 - 13: 8E86249D0EA82F47F0859F526589243C86AEC76BE37760D2A0C85267 - 14: 2EEC6462B7B724B3F0D37FA507E174972D99C081BD0CDFB419E75063 - 15: 67BCC714CDD11B2B64914D7901ED9124CE0FD3C357CA328EC53F64FB - 16: 529772508E3FE013510198560435823177D4D011A746D71E1D2CFDE0 - 17: D0B54A5E43342C08241D019C55167EF0952DB1B0B7A9A059B054BC68 - 18: CFCB4ED33215A0BE9BC93DF3966941B6D1A33549767D6A5080C70DC1 - 19: C4829B1CBF75B80D21C9C36DC462258A99AE029EF10FBA0F93E07C17 - 20: 9FBB8B2FF876AA11F3FDBFC8DA717A16BA4CFC5D4748D56289046076 - 21: 931E82E4B9AF0C2385ECE8AA633C6B539D75CDCB7041813F5A900299 - 22: 87B9E01EEE46F2CE6CEDE71E405B99AD13EB03D0DBEACB79CC521825 - 23: 1DA934B0541DD0192F286556F121DA9631A3109B649B2241C9CF8179 - 24: 05A64F935B719F82CD7F7DB5D2C988BC0554B7F2A56655C6A332A7BE - 25: 64EAE4204C75E10774D722E534AC173BCF4C2D48943637BCFC480272 - 26: DBF93C0AA0C9900FEB298BE229F62954373E3E4E1B18500BBFBE82A9 - 27: C3F92F2080FC6908F2277A7A9716480959DFEA1930D5299198749A57 - 28: 29D96B0F0880D4F496E3D31AC8371AFE60D3E5FD0F69A1A15B9DE869 - 29: 3D8814E0B0862D797BD06C135EA5AB02B2C801FCE9D12D03E9DEE414 - 30: 5E672AA014D249E41C13BEE22D0C7595D73568ECF9B78DC88C313CE0 - 31: 349A5B7E79F4E68430CAF41C85D3A583E624AF712C02179B729A1DE4 - 32: 8D2835E3A02C646BBA76B5AAB2CDFB2B72F5073B98041603F75C24E0 - 33: C8848B90A1A2426CB357519C00CA3880FD9B6398190BA96C1DF63733 - 34: 419EAF48EFA6C366FD27DD703B0DDBFE9151C439F610EC996988005B - 35: 248F9D1C8362BC394E31B5E8A35CF0533EBD7D5FB5969B8B63918494 - 36: 30DF5316CF8D686304A4E42FC9DBEB1C172AF98F46AE3F05BB434A69 - 37: 5D73E52C265C1DC1B039443A2A881DB2B9D4B100000F0C34A9312940 - 38: F7E6EAB3DF1F28029244BEB746D78B489A14AC2406E07759F123AE2D - 39: BD0BA55766B5A14D308E1D29FE916CC7B97C2E4F6A21FCDDE5CCC0D1 - 40: C7DFDB9A975C074E8B20347246A884185D3D81C27330B3778207CA9A - 41: 7E1652EBF0BBC6E628ECBC9D1AB2275FE56D50BF9931765115266DFC - 42: 1E92406DE8D32D0B1796AECEFA9C9C97E98C443F2AA06798BE293158 - 43: F9688DE507E0D1982B99B8066DDA0B89EF6ABF360B541DBA9E258C81 - 44: BD4076674B7049C20B5B7D46D89C78806F9FA4C506299CD7B22CD04D - 45: A1CC7A6AF0DE7008DB0FC3511A9C9F12B5B69D8A361FF036753C4045 - 46: 678B22E55DBD50FED5F0DC5F26488B1D9F7151D457BD3D85E30F0689 - 47: 593889A97724343826A7E45B85D831215624D5C720CECCA5829CFDAE - 48: 8BBA168A3C4F2996EEC2890895FECC62D463AAE1F395F0596275B632 - 49: 99F65EF06A16E1DAB96533233C745440AB839BBEAAFEAD481F6DD722 - 50: 2E49DD264AD674C41E1406C95BFB986A239712E2745440405F88D064 - 51: 5B431D21E66FA2D5E01ED91D6DE5871ACD59E3203F4AA328F6EFC706 - 52: 311812E900E4EADEA4233E2D355BA54F2B8E66F670D160213E567AB9 - 53: 07F366E371F692B3A84B3880A70A76F59B08C5E2BDAEB1B8F6D5CCDF - 54: F6EEB41C1398732F31E032873FEDFC75E9FFA51E982D65F9FE2715B4 - 55: 767163048EE79F8FB7F002F11CD972C8DFCB1F490CFE67459FF3BAD1 - 56: 5842767868717EBD11D36C5037E3ACC6201DE1F7883006A1DF6A2CFA - 57: F651451CF372D75FB777782187247D2E23C6D20001389F9431B46285 - 58: CBC19EA5B586456CD01D20C47DB87DD740F37E6D950354E3D63849F0 - 59: D9E98B355971ABC110854680EA2E7C77D0A7812F0999B9A05460442E - 60: 0555429C850F5E105946B061B00100F0CD50038129BB65D3AF6C12CC - 61: 4FF03D8F11D2F6211E355DD5B50E0C56498BAEA56D9923CE359930A6 - 62: 28E86D605D1ED5BC842F6D54E4D9B6C54CC734B3FBB88EA608944F0E - 63: B8A8C9F3A0A2B80727F3480893229E72341AD44A24710FCC515646EB - 64: C5F486DEB68F10B6CA78626BF50A94194AA952CEB0C227475D273823 - 65: 947BB25A487F6C696472D1CA63494534239FC9B50DD20F05051A00D6 - 66: 513823550969D3FDCB4FF9F7BC666C5B873DA13384DB1FB5DA4088E2 - 67: AC71951188D6A0165D241C0FCBEA005B023139CCBF478DDCEE9F0B04 - 68: 482FA768632296E555EF58F6F134DB8E6DA134D3B5F8D3547C29655A - 69: 66F9DCCD1FA2ED16BA69497D370F153B373D73E6D99AD7578E9FE89F - 70: ED5964F4C3CB6AC80D975CFE2E9945B6B2F2D0E250241D2A1D2755E3 - 71: 52C0862C24A059CE78905A4EBF3A04A2330D840A467E176BF6803ED0 - 72: A56596776D0479D6538A91F3B4F1FCF330196B73043929C82075E6ED - 73: 142EC4CD690F8F28E2455FF417BA14AFD8D483D7129633E449547E54 - 74: F72B073545706FEEBF50FFB282174003E1771E3EF78ECBF00F828483 - 75: 98937D5C20D924E154ADE9EBABBC2F3578B2449BCD995A06F2FFE821 - 76: AD65CE057F3A84DFCAA45E1C6665E625505EC230A5AB94DC55FB5034 - 77: 03EF7A85A9318AF284F57A0048FE735484946A233C64CFD3A28E5010 - 78: 7FEAE68E61C1E18A4BFB30CB29ADBE5E16EF7B28044E47D88A4FB0E2 - 79: 9FED5CE97FC500BBD6BE931F8D607B4F220DD975E9881443AA106FDB - 80: BCDDDEE6B0E0C1151121547C260FCF02083C97DB9B99D66EDB8FF0C5 - 81: 314467D82C5C64D4734BE3729FE43AF9899F247C6B0BDE7472F7DA67 - 82: 5A9F2215152F9845E12A18966DA50FF7502C5FD616528D5DFD192086 - 83: 38B513350AFEAADC9ACC27F155147B01981A7DF061E3B25BCD6F4992 - 84: EC86009DE61B85AE5D98E94514E883921CDA0707DF1EE5FE27E35C32 - 85: 099875805914ED0D2659103B23362260E9D008AECB6353A9AB6308A9 - 86: A8B2ABEE400EFED2514C005490DB46D7DDC7A26BE4C0FAAF3EAF44E4 - 87: 31715A03A2EE97ADFE4579A3B38B0932B5200FE4E9B43812CCFAF7D6 - 88: 9814B6F387B5A7C86F25A1E987FEA6EEDFABE1D06255E7DF55AD672E - 89: 376948F8F117FF814369911E64C3C58E70D651039CD70DD02E233217 - 90: 8D78980F2E00F3B1F82CB5F66550DD98FFD31BB845418919DE08C5DC - 91: 9E4941171F66217FCA2B7B15C704F7AD3BCA3B73D193328EBA84F6E9 - 92: 220A754DCEA4EC1235C6DF7B021ED865DCDD4903B49D33A0CAEE1146 - 93: 9D70DD51CEB3F271EB835BE2FA5779426812B84086B2F6B0839878A0 - 94: 67FFCCCB6C7B6C40378E10338C6F7D8597878746875C0E56B9A55DE0 - 95: 3499392774E0982BC49BF2157C1B1E3D7A6EDC971F804894613A342C - 96: 1A92B5C55D8FEBDB2C6CF1F4E3E4290836E7EE38A496802C9173D62B - 97: FE1B6D1BCC0D7F05E9751C63A517AD69F421420AFCE0BAFE2EE4C223 - 98: 4EDBE4A9E188A16BB349794635B633C94BE6294AF795FA95F2D3256A - 99: EE8D33F9EE4E563F8832F4B8B9A2613B8DAF3B8376C5D059B585F178 -100: AF2FF671BCA04CB77D43E70D100AA23721A6838B9DF7C167C2B0F52C -101: FD147899A566735F53BCFD64A4930F3400416B53072B788F2E419D3E -102: 35956E507CBDE896C13DC6CEDD754C3A9C535739381F94F59BB981B9 -103: E7B9899C45F40EDB1B9D56943A5D0FC162CE1B99BF3FF307946C66C0 -104: 61AB923F62FB6503C965049C83273D0CD8840626BF1F8F2C5B94D784 -105: 1CE5C367EEC6A7022EF512FA7C229065EB3B7C229D1BEC56D532742C -106: 2A9919A2B7AA578E08F54848670D71276530EA2454FA73A0CAC6DB7B -107: 065F78D7A478710F7A02AEAD16FB4F388E6A46100BEF69309995892A -108: 856AE3FEA77E94AAF41458893CD1453E97322703D7E50B801A92FC86 -109: 3A7121C84B5F580E6B85E895D880A5F8FAAA212BE68EE93044EE425C -110: 7E663B819CD1D6D1013366BD65D6DA61A29D1CEDB7026BF5C9704561 -111: 217C20189DDA2DCF4DFB487448504584954C53C07635C803E8AA7F7D -112: BE6DD8115DB39CA01F7F4C03B8F6297EAEF4A06CBC618D5432A56071 -113: 6BD6A60B7AAD03165743113A477A44DD42412DBEBCBBEE93B1E21A85 -114: E749DDA363599048E095E5E702CA99EAE5C94CBC0E6D65B706571A7A -115: 3EBE88686A65B51760CEAD220BF5844A8523A303630B892B0B2F4664 -116: FCD16A99ACECC901D6EF9C4EF6E47DFE363C5C0CA09607F167859A76 -117: 3195DF6179C9F423CE93C18943A9BAEAECE9466EFF19BDC2A3B50230 -118: 8F994FB8F8808862C23CE0D54D74638D5E791F223BD5B0C932807327 -119: 0076555721EB1E5109D739AD02F754F65B60925BA337E77D6A823800 -120: CA335FCB3983DA669D23CF4121D0759FA5ED4B81ABC73D3099A67F69 -121: 43E78CED42618BCFF73D12BE0FB19ACBD4B6E35D6CFD56971ED0259B -122: 7C9927AA1107EE6FC8DC2EBA1726BA11C5BF58AA4D94544FAAD9F686 -123: B6CC58E1995C7A907966856AE345BE9CDD6AF5FAD9216409E601DD84 -124: C737869555A82EC9AFA80F0F6B02E4A4B006B5F817C318A9730C40A7 -125: DD6199493CBF768529A4124A24FA610BA0F3F065FE917175767FF143 -126: 07995E8EE6590930D3121050A1EA9E02122F1402133121EB99B24953 -127: 14DAC0B2BBAE3DD9F48425B372790BB70C58BBEF3EF7F1BCD0331E7C -128: F1AB62CAC4586020538CC065E01BE62896D620074CFA83FAD004FB66 -129: EF8C3EBFCAA59914477A43765C7735EF98B9BFB4C487825176D80FFD -130: 0160860271BA8A018457C9D02FEDCDFA875AD47F688355F60984FAE0 -131: B1259FA2F49C36BA861619968B3AEE8BF0BE31F36A43085CB178B6C0 -132: A6276B9416884552F3F629C556319F75AFEE0B86213A73D65FC4C946 -133: A19E52D9B53AF45A370AEC6227599B9D748DB8227E54635FB327D734 -134: 700EF4C63D08F0467902C469570EC994FA156E5C23B11C8B23C4ACC8 -135: 155E1EB13E0CB1C7C22C229AD4C1834613DDEE84FE4868E87839565D -136: DBE339E6E3C6378E1C7E8EAE5AAB4440B6F5553E8256A10E299545FC -137: 2FC9DE54F18E6CC5FCB1DC195AF45755A6C0121D5D6F3410CAA4DFF0 -138: 9EB09A504DF98D08072B2B537A4A77CE552D73E01DBFAD29A83F2DED -139: EBCC82D245205409E258DF60BF029BA4B40838A21047B591015AD0E6 -140: 1265A4FD513273BEEAE8158C89DCDF445CBEC44144BD7845B2DA1BB7 -141: 84DAED52AB24CC81DF2E022844593DAE2B649020354D9358A3396EF6 -142: 6633AB5DB4EBB14DD8013E05FA4CAD410140483D77B1C03A84C5CD2D -143: A0DA99FB42B20F7096AD1CB88CDF20BCE959744D780A888F41952EFF -144: 74FBA63BAF4AD94E06E5B5492D91F85CB340367E82922EF2241CCF14 -145: 23049C858EF172982F10792A3AB7B4EE048C1BA2FB5E2258F701ECC6 -146: F8020E7379A0DE1C4024163956E84BA57834086FA73CCA05B28699C4 -147: EF6F3F80DB70F7F952A5A455FFCE79C41EFB4B2F379241A8ED0EEC84 -148: 81ED7F0FC910B49438DA5B6A521C6C32EEE6E37D69DDB1B60402E0BC -149: B0E14468D8B00AECBF9C75AB4A4EEB81EB5EDBBD5CD8559503202131 -150: BC87DBC579F6C1DB9C80699B37DE4928DBDC3BF3A210E7933F267C64 -151: 8EBA191F6B274F2078DA6A0E4DF9412F1B43688A0678F4CB6B21F08C -152: B5F23951F70DE4520D8569EC21BF3A6ADAF9EF75A795031793D3C914 -153: 62BB7E72FC5E18CE99835DBDF39AC8F9EADF714889732781A89ED625 -154: 1DB4DC696E5A8B260D662BDB7EC6E003F544B6D11D27028AC50EE442 -155: 48562F639C5B9A1A0AF798802B35DF2F17F8A14B252F8CEBEBDDE7F2 -156: A26A27F4CCA53145368E1B1A59E75193AF054FA4C8198986EC20422C -157: 7EC9476ACA252E535E15C03986BEDD695078B41E30C0C979D2B970AE -158: FFE44CB9C129FBED78BDC710C740ED7DC4C3083388C70EC8AD84CA56 -159: 6C129BD10A6C1F354020505ED33733DBA7386DF19F9C7E9E0874E3AE -160: 3C61A1248DF4FB6A02C68FF413A2787E69D777F838FBEFB8729A6622 -161: 9704142B751D3C508A6123D2B807909670BC9A25CEB603C79BB212BA -162: D5163C0891D82BAFB5445D495EF53AEB458759E79FBB519B409BB446 -163: A1F6A6E1A921A9C30B58C76ADF86DC93154D81ED43F429BD7F961F73 -164: 19F1D5ED5219EF7F45EEAC30F335E1B018CE38DE1C4910C13FC70791 -165: 058E0834C5135BC9BC726BA9B72E73B07AB108EC46162AC51221A119 -166: 25FCE8353D4DA996E16F52C5EF310FE9FFE541D634C29712CA0A50F8 -167: DF9540F297E29A2230497D2F1407700C34937037CE9755055F8284C0 -168: 54BEBDFFA7B42B659935FE5DB06C47FB4492EE898CD9FF96FB60C93E -169: 56C58611A9612582DBF3444950F9AD2A15F4833BFC1B8CD51EB0F02D -170: 44CF684A3726979A97B88D2C1BA4B352D483ED6BFF75D33FED9B192E -171: 79C7A8099BFF3D9D35555E7187FE4335B7000DB9399C19CB3AAEC3E1 -172: 45AB6DBA6612691C9F25BAA40CC28E934E03D045D8E60FB51FB2DCFD -173: 6C44C28DBE5E69FC6F1D7D76B313274437EFC330EAF6A924964D529E -174: 1B4620B6DF146B921957213D048071030F9A7D4922E05E0622363E85 -175: 535BC93C1CEDF95D152DC94BE264BBF03456081BD3B7EC90FF3EEF2C -176: EFEB2A0EFC5DA1B229956115216820D573C9657EDB473B37CE545189 -177: AD943B52EFD3CDFD08568F124C0DAA22309BE6C801A84C06B184A532 -178: A4ED7D40AC60D3FC6006148EE93C25EE4A8310969DEE99304ECC6239 -179: 846A1783B36EED83B26F3542156B3046387858DA302F1289880343D8 -180: 946ACA7987084DD0681058FE48A88DF58329517CAE2F111262A416D2 -181: 1366566B209824AEF5FA190F4FD3E264F96C1F98EA6807D297BD2C22 -182: 0B7221823FE41585E4CE1900F4DC36CD67D3AD4A492664F08721EAA8 -183: C5432C9C4E8EC5AD630B24DF215F4704356A6D6C9DB63DE912FACC5B -184: 5D39A43FEEA695FBD7600102363515B1D896AF2CD97BE04A79C44F3B -185: DCCDD00A15CEA8D47A3C5FB0988E871C1071276BF862B06FA4F9AE83 -186: B95E8473EBEC712E3BF028F4EA364193DD57503327AF6D079E9D7D12 -187: 40B8D3FF918F590E790886B0AAC1DEE2684C10D93005E0813507DB28 -188: 65FDD6379950C218BEC640DF00A7FA8404F867224CC67E443585B881 -189: BE8682A311FBD69C97383864493D2333510D64F8DA13835F7E629518 -190: 562FD9460B40647ECE452BE962A4BCF63D6172C9E204C5AE8A468BD2 -191: F8DE76593980E12E8E41F498C4BFC53E68E9D0EEB0FC1D2079708610 -192: 8EB58A30AFF251893FD67211CDBDDBE44F2072AB8D8E2213E132B250 -193: 9798DDDBB93B5FC196AB1E117E412DA9A746058A85C666BEC974CD97 -194: 0C8B33B90951D312557ACB0ED50B6C77AE8C9FE5D2CDB252415914FD -195: 03F8253CFFF0842172D653E49AA7701BF1D419A0F5B362BDA6BA2DE1 -196: 9189FC7CF3CA3D948F04E5AB77AF80DAFF01C816D204D5B858BD7101 -197: E3488A5BCB04D617975FB294B8C3446D847807D2E91F20D057ABBEBC -198: 15763DED44BF8D45DF9137DE8745C77AFF2CC50BBEBEA8792EF29658 -199: FCF482E3529A1D8FFCFA1573C6192586971774BA6EB359C6517EE206 -200: 00A3A32CF3438637A3C5BB1F57ADCCBBD8DB41A699008BFADCD84292 -201: D4773FF714CFD494EF23F7FA0961E0E34F28EDD2E06F102440E977DF -202: 2D8E5F0039CAC2F7246EEBF007A47A37B5FAA85CD7491133A68794C7 -203: A3DE783C44B931209216826CC20DCC1C77D64EDAECE1ADD25104CF6E -204: ACD33E1987F8D26234CECBFC3D26E56C53D1E41ABD7EC737404B6A27 -205: CE1FE075E62DFF7A0B47FE694891A59FD0ECEBC7B1DBE33AA6E44419 -206: 7CD08D628EFD7A9C2B2DC6C82006F8A1C1A1F9223A59C3F80174DA8C -207: 6610524B38D5B2E26C1E5AF3DDBE037319B157919E2CDF12A1607DE1 -208: B31D3F7EF6B10195B648485984628CB40CFBB0F93513F98E9861EB45 -209: C0A3A78EB08C2717296C0A71C5DCAEC47E4DF1BE31A5EEDFA79A2650 -210: BC6D960DFA108A61F8FAE8A1BF10C2BD91C0B3BA1959092C735CD65D -211: EB71B5087850F2B7F42D22DD4B6AB37A133E42A5D37EE217DD0D1227 -212: 155142DE31A86CA36EECEC246D5FCFA1694EB382B10A1FCF219565BD -213: 5A640F3EEC8794D87D3E40A6FB87CBE40889FB0494FE4663A03BFA48 -214: A950FF4909FBAE5AF36AC39DE179D3A2D434AA76DDBFC9EB100A9230 -215: 635AB32F412AA4F346F36FDF9EB41D29649706415B6A861D6A41D8DD -216: F7EACBADA4D6BC548AE74D3F567FD3452023B3AC4E12301E06E8EEC2 -217: 00F3FBDF9E42C60113B12CA67897C4CB139D97E2B9B3B378CDCF8E94 -218: 2D9161ED3361ADBDFA19A56FA9A8FE058947182E41616BCF9AEEDD0A -219: 62E9764F2ADDECEE21DB8ED084B4CFD61200F17CADE030860E5119FF -220: 5401387738A9F11DE23E1260E132CC6417CD4D0BF8FA1FEA99E1658A -221: DEA79477D7249DCF4EF8C3C857CCA6B1767242F0DEF1F6AAB49FBA09 -222: FEA604EC2719135F7AF1655C751768E503096FC8508BA4E76645F46D -223: 1FCFF3A561D2B3C38A9B9BC00B6DCE45004E8B486D410229606EACAF -224: 982DFA333D2EF9EBF4AAAD995D22C884A61DB282246AAA13787813A6 -225: FBBAE03A33E887A3C3A5EB7572D84AFF5649AB9A1D1780343415FA0A -226: 75FEE5E8A10779C2673E307BB46388A31AAA0348FBF647B6127F0EBB -227: 50A0A5C89CFBBBEE48AA70A9E280D4EA9785C49F54EE1C251CE11AD9 -228: E720EA2034F35A2E37CDE57AC4C250FA8C82B04B5D2643E44A7CE35E -229: 5F1941F93C4B219F88D9571595EAB3E551E580439FE7231098A94ABC -230: 9010C146B393E44C64B83B3F8DE1C2208C6EABD4E56AC6D3174C0D40 -231: 1BB76E2E713580B12A9AF0AA25BE9CE3E1CD0D414C266789DB820EBC -232: 1FA8AE4B83E577DF574BA8896C9CC145B319D6A2CAEBAF5EA765BA35 -233: D57DF5D7F1A5E42981C841F9316BDD78B492BD10CD91A6D6D3CADD9D -234: CE697F3228A27A4EE63F1B91001450ADC5D49415BE3156CD427752F1 -235: 1A10B2C52B0EB905DE30811B3804A43AA44D10162823BC19776D7F12 -236: 933C3EB00BBD11AAB39DA7B501EC4426E0364202B2D2FDCA15F2C707 -237: 78D47CBF418EE7A1629DB50C9FD335D158C61910CC4A9F1DE2DBCCBE -238: 0237E7FC73E700F15F0C8DA9CDC0B7120B45D25D88E11F9FD0A9A843 -239: 47D3D25E73BCB435C92E8A0ED5A90AEC6F30CB7D184DFD65C6E22622 -240: E364E93D1828E225C940EB9C75A8BD5D4D74330442AE76BD669E8FEA -241: C508351A61A066AC8667D01EE8F2B82E9B016DE16997CE5099959AC1 -242: E4DA6E8F7CD1587749A751523F8BBBF8057FA5167343E7646995038C -243: 45366E7F33DCA4B4720CCE7B3DCDAF674A6B4D344CCC0B87019CC2A7 -244: 7C3317597F17BE069DC00CA6FD630C954F24FA4CEA14121023390D55 -245: E67F80AC4997C7DBAEA218EBE3F6A12A1C49DC60ECF7074426C60157 -246: D2D706913B09CFCAE969BD8E55375E55826A0BCC76D2616B87421A4C -247: B7DD02446A780CA46750E57A813F8240359CB9BE040E50217394DEF1 -248: EF98DB17FA7D5670F8E5632274BA2F1DFC7845F9F03E5349AF911B5B -249: C87A383E9C0CF5890ADA3B70674F492BC024E3CD5FE686C2D30E8575 -250: AEAAC036E59D32828AB8F14D627F9DF8F96EFCF657FF06F93F464A9E -251: 5B14A767E4D592E22605FE9E88AD07CBFE29F0EB8C4C981A591DBA82 -252: 3DA791F77867AFC68F89B896ADDCE45273C189C723FC2BB37C685952 -253: AE4E91C21DA6601A7805D998D6530A7B8F1ED098985DA05E9E34CF8C -254: 6B5B4254826EFBB1BB3A840F709BFA977D44489BF63A461867E71131 -255: F52E5501F8352D8DC439D414B563A21A1791B23622130D0AA1BE06A7 -256: 17E1FED5DF79835C5579296F12C863FF2A851F2BFA890640D89C45C2 -257: D669842D60DA5ED1AB497535D923C13FA9F1971F4114DF358E4EF191 -258: D550AF20D4CC8982BEC1BFBB3D9CD48C202E6ED3BFE53C3D17533AA1 -259: 8E680422C724D3F390BDC1D619759F7706D95BEF81733AEF4FDD9E4C -260: 2102A7AFAB6BBC5B5EDCCD8B927EFAABC1BF7447255F588C13CBA658 -261: 1F86A514C7E97D5613B10C05B0B49D8AA2DA96B60A123836876D40A4 -262: 6C36C0DF541B2FC55F488E7FDEEE582EC6FB907266D05912BA5B1A5E -263: 85157706FDC77EEEF108AA709696B081357028C93FFECB8B19DD5B32 -264: 7DB694923013B743990EE3F05118B066C99D824764CB8A90BB5C7B1B -265: FCD3C0C5701F442BCB129221EB964266E051EC76F4B99001D4362E18 -266: C30E41B0B49EC36E8D6847856EED83485CF6487EF27E0D4AF81E65DB -267: EFDF7F1FA75B2AF41A8B585E780693B757F583AA55A5EC14D6AA4D40 -268: A56F33CDD6D09510CE0F3341A932EFE1E9BEF638AD230A2B3CFCA681 -269: 58EED50C50F79A48C8DBCD58D6A632080E82B555858E78146D9E4333 -270: D26DBB8335DA2322825A7A0A37A2FE89E1FF7A7FED7D22FA21E57119 -271: F97AB13EE6713D218526E1F0798DAD03972644B43E830EAD03A91672 -272: 1AA85126E0B614AC5604C0257F9C60E6A99FFAC190E71E2B3C7F08A2 -273: F4BDFD31FDD995F83D63FC2D1982AF5C62055D4CE37004C1C0253007 -274: 8A6B0524FE27D0E7EDB02C6BF0B289E933ABAFEED0E64FA8A3445990 -275: B35D6CA52AF7005DE922703C7CAA1BA625B941D17205919AC473F30F -276: 90BF6A33C4067407C484322454E3AB98EA3985D86F954AF59CE2737F -277: 24C37D603C1895C92467960B370C6CDBAC57FA76A953FD7CB3D65923 -278: 3DDEB086BFDF17EF5D3EE6929B0105E8243FA9C440974929BB6D1317 -279: C1640921825552CE15CFD29A37E6F11BD4E02702258D0A11674F0DF0 -280: 93FF2218C378730A0BFC4F0C002A9B8C0C5229A845DAC5452625DAA9 -281: 215D3F0226153D66B89EABD0E60A17080C1ECD8B47644959728345C5 -282: F43A6CCAF79F6DFC5AD2A06AB990019CED9A0F03033460CE9724CD8F -283: C89FC99E50757B20FA6690384D3D90C52E5565690EF0FFB8C19C9377 -284: E27768874E84816A45732B2FB77CD87AC1D101BABCB4A2FE793BC7F9 -285: 1FE52DD8051BFAF26E77CC14F07E1CC72D1090A57A453444B2647EE2 -286: 37F5DB200FA65595B74854735F5752C05AFF17F2539718801F860C4F -287: 3F6304F546529D4F7CC4742D0688B1211647A185FF474DA0B8D9B508 -288: 347B1E96D9A00F084C4FB3FF354E77A924BF3B90BEA14AF41BF989B6 - -HMAC-shake128 - 0: 2F3C4640BA40514F7A745F3F148DE7D2486CD5E17BAA1BE4FE475FB4CE058610 - 1: DF5AF834184826BD3FA90F14502D139BF0274154F2B1DA8122EC2C8FC49F1743 - 2: E6665EB554C46562FCA66B282C6DC688C36615C66375F03A12703A71A78B7615 - 3: 4E3648D45BFC96DB8E13AC27959A53450158E57B7CB07DC0D460A1A4082E239E - 4: B6A0EBC4D5290B271D2D000A5F24EBB915B20ABA4F95485BC5E83A8C520D41DE - 5: 49BBA3DB647E69A2690F790D0888D8DAD709F4A24CC1655F9FEC9B5A525215BD - 6: 0F31D228B292F60DD3EBD36BC98DB805C5E42BC737F19E2EF47551BFD67C2480 - 7: D13465ACF13C5E64C03EFBE91ECCD9E80672ADF1D28D34D2D04C03D5F9FFC3B3 - 8: 235A1FE032E1805D3C612ED27F47E00FF46DA058CF7A41D8AA6A0D8692B0519A - 9: 3AB9394F39C8B4C29C5C9BD943623ED732D0B07617979AE79F909712E2FDEE60 - 10: 87DAB4A8AE65D971ED46D9AEEEED2C36186ABE901A61E2C60D7CC503C1C8B7FA - 11: 08AC40725887F48AB6C34876166D153900C38AF7BB9EBA1066170D8494987DCF - 12: F2FB68C8E89F56B3AA52676498A6BDB6A19F36733B8E59F4A40723BF8E293DC5 - 13: 23F42B38B79807918C9018FA9B4252C2107E7FBB1C2C5F87DB3B66B51F5D9201 - 14: 65655729C1B2D5158606658C3406A68E2E7D73B33FAB354F2C5528CCB84DE73A - 15: BC2CCAA7086BCBF7572ACECD25D6BA16A6C6CB73A37752B8A832FBF1374D5856 - 16: 64B9CD4EDDB97F0CF1FC3F5322800E25B2D2C9744EBD358DF4869D663713EF1D - 17: C7E0610D9C25018BA96391DCD9973E44E09545DE50E186838E2410B422FF13AC - 18: 6F86F2F934FEE97226054FAC7CDE42B36028026D13EF181A8B405D2B428341CE - 19: 8A06F37FE2EB5596A1A09A03D35EA54C3E4ECCDD4ED28278EFB1D2F124CC067E - 20: C779EBBAF2109BBCD68844F981D289A667A60E02FDF5F2A808BBC8595F000BF5 - 21: C4321E28EFBA184D0A367FE45CC6AEA7EFAD8248C895DD510E18818E7C97B11A - 22: 6EF960B78680316273595051917846E388139441F60FA13875B59107FB24199C - 23: 9C8B62DBB259F06F1FA3BBDDB35F806834ECED09EFC1FF66A8141C922BDEE8E2 - 24: 276E0662052AA7520229548D7BB8A25C64DA8C1CEDCB5753792AE99C59D54587 - 25: DC923349F560DCF8DB50A33C6E41CC407C993FE176C64C04FBA9749287E13C69 - 26: 54285A8B4F28828D7E72F80D1B8E46269625EE0490DD3EFC3231A1DBAAA93FEA - 27: CBA858E881B4B9C0DFF85EFC2E547FEFC985EF1ABB181D97033F4F311BE6A976 - 28: 72B7B6A7D33470815A247B026DA6260E329B06A76D04C0A4E1B6A4CF66CD434F - 29: 34AC8550AD23FD12111C3252CF5CE4902DA596CF5D441CF8A650DED2093C9AA5 - 30: 4A0058CE8DD9348739D78EE1CFC8A00FC495EBA1A7471F5D0BDA0C1002BF9EAC - 31: 6A28EE0FFE1098FA46EA7441945C25150AFE25295C5B0D5BCC5D5FAE83D5968D - 32: D2081F1A9CC059AB7C3D1252446394B730FBA0064A3C98CCCA23134B5690C1EA - 33: DBC36B145599E74CAFB58AE25F3AE5543A1B2BDE27904EC707F3D00F350F4EDB - 34: 7F115A7B3FBABED786AE63F107E1EE06483B72531B2C8389AE052B9981E55346 - 35: B9330484234566E4462905F2805D040BD77CBE72AD31C3D1CAFE201C89F976B1 - 36: 97B56851186BF4167E37853CA9801CFB46108639499B606D89B917DE7E29A44B - 37: 547239DE2B0CE99B9E6F8E7E8EBCD3F559DCBD569BFEE188A7E5FF44F52FE014 - 38: D7FA5BE092851CA1C0406C66A44F05442434356DE971A2ABA0698581D4FCF0EC - 39: 7F2627DD80D8520BEF7616BF657A96000F99B79A7226BFBE21A92231FA9105B5 - 40: 2314A9504594D7218140F74F9AB4031B98F46A48F7F2BEFA8B425AD5AE8D5458 - 41: 0800CAE512F09C40BF0A78F5BAEA334FA51B8810DFD5730447D08917041B7F29 - 42: F23FF58FB5C8CE7DEEC8D99E72F2AD909334BE2A954F95B9BD026711F4C49C9E - 43: 9FB3169405A328635E916FE24681C462D98EC7448049874DA6AD948044768193 - 44: C1649FFBAFC8713ECE2A5103BB07E9D0E5E2454AF74874348E383EA0B9AFF32C - 45: 319ECE17A78306C166E7D63F9B502B61E96D10C005C162BE24D0D8FB6C131DE2 - 46: B432ECD5AB08D0388EA87FA31EDD796F36F229124730B7B8689172BB437513F7 - 47: E28A2BD5A06224CACF0D98E4EE4D4DD6AD6DF77C4CBE7CC6F91CBB020B9EF70D - 48: AF1975D3192C0767873E301E5E1C317E8B1D1A72663C4D1D8DD5D3C6C0E65F80 - 49: F77475DE23D4DDEFD0526DEA19AAD6204AADDE97B6F0C5976D2ED18DA64711A8 - 50: 33501EC2C5D2BD29C9ABC1688EF6DEDC8EE4E6DDD1A525D2458CBBA7DD6AA83D - 51: 0216CDDCAE38FD24CB35680AF8C07F2EEA54C1894331CA1CAF4D96F7886B3ECB - 52: 48715C08FD3CB2AFF869B4121D977B0C7AE933959A19CA3314532FCCA3998905 - 53: A08C552D9967BA99485B32813715A23A8ABA17C6E130B97B4B7980DC2770CB61 - 54: BEF4DFF7260AFEB58403AB6E9976D6EEAA7FFDC2E49D1731049A1EE1AE0F1DB3 - 55: 815DCF8FA2FEAD757B7D2319AA5455DCB29A547C0010BB7A151B097759094C0F - 56: F5E58203176FB6E056F98752EE0F9220CF6D22DE0B0043971A3F6F06EBEF9799 - 57: B1B1371DD71F39422097A529988E0FE8FF89CF191D32616F8E6F815E2371F3AD - 58: 91F6CDAEB3F9CF67C2A47065A2753D0A441BA70F573E180469966D0CEB9D2BC5 - 59: 725884CA1CA602223B3B380FD2F000EDBC98BEFF38073C038BD02644478A46FE - 60: 38ED18FDDA9B4692FD6A4F0C37F7D78A6D119F0A67E1E06A0269658B0C2FCD66 - 61: DD81BA546A8A2631E3BCC3285DEF4E33164B25BAB38F2688ACFAD65D8F313297 - 62: 4BF1194F1550C16264B48740FDD5C1588C55C4FB5CDD834C588FD0D3ECD0268B - 63: B3B1E8BFF8A1AAEAE7243BF0E0A5D47E3FDCD82257740B400DADF318321B3984 - 64: 0883A2442F382B84E4E12365C6BB55D4430B8A2D6D56188C888AE26A371A5A2D - 65: EDEBE28186CC3CC89E1675963261BD30EC6FD88639F99353C344347100A87393 - 66: 616151F300C16380F16413A258ABED9C448540D50F8D16D155604BEA6D8FADD3 - 67: 475F1CD6E36ABE78574EA7E6D286B564E71C018C89AC90FB6140DE1905CBC6CF - 68: DA02DDE842BE4321E8C73B2A45F4D726B7C2602C30EFA5E00DF362370BE65106 - 69: 6EDE9F6DC113825293E400C3A179B381A300A6194155A3429F4372090775A4EE - 70: A48E928CCB4D9A499ED00CE9FC4A275613967B7EE69538D22CFB02FED16B8700 - 71: 5B9F066911E07EA413E423BAA49A393CD3989C7BADA702519C8448631437739D - 72: 4EEB9CDDF8EE03B944C05C906D31D7B7B958957638A4363AE72943A57E603E8C - 73: 65F82010062A2DAFBB7E0871C6D91FD8467973BFC8071BDEEEC6586D1CF13EFE - 74: E43C50D08171DAB88E1FA7D85FE6666D98C301C6ABAB84A5CC6BF0A0D9C64DB1 - 75: C756D522B5265B1A8DE6497940A5D61257C002E2ED253E10925FAE818F14DF26 - 76: B9DAEFCDAA54CB34F23B180288A5F7A50217FBDA1F717EABA691A373643FBA4F - 77: F3BDC26AAD42699D2DB014F36B4F98F770F2EE60A37B622C7B0A4AD777652DD7 - 78: 9A5F3FDF967DF5757BD59EA18961F67CECCBFA1EF9E6E1CDC004D1B07A33A68B - 79: B3FD60E03001169800AD667FE0D7F1B75211635C8F5C5433678327332AF56E81 - 80: B7C4952910F667EBAE368B113317D974C9ADC8138C0BF32E6DB524077B936DC3 - 81: A1242DF7B55DFCCCB171D76F121B7994EEE961072F85961F62C5A62151D8679B - 82: 8145A636AA2FA526FFD3825307FC77672DE0071B0241FF1469198CE81AC27537 - 83: F943D810DD1C707533707A2C4164554F269744285304D6BC5AC2DDCA85BE3B1E - 84: 9C4CA05230F2BD63FE2DC8E5672925E8743E2717FC07532094111837B7CE7A33 - 85: B1A02676CD24B84947CA71682B749056F132E43032D46EBCA25D31FF4EFF7F73 - 86: 7AA7E1F0D8379EACE57A3E78615EE7627B32A1967ADD35F1C448AA5F9D99F30C - 87: F526DF1EBC64ACB7BE2AD3B0DEA1E1F5CD3945581B594B1E93BC6B7BA8CDA212 - 88: B72D25183EBFBA5ECCA049D663061FB1E7B42404AB50589D4D17B563791CE78C - 89: 8506D1A1E21EF297A4A92551DCC1E2D8F193CABA06F6B77C3223CBB2842BB3C3 - 90: B1D6D3BB07FC8BEDC16795308E0155BA486394DE172F8341C03F251ED87B25F6 - 91: E4FFC2A3241E9E1A551C34BEEB125B99A144A2299719FBC092454B9CA3C551C9 - 92: 5683AAAB485D46F543463ED2B185D9600E516F29C00A4798DC576E16AF3F76D2 - 93: 6D43569250E6FB36480ED9DA71D5B13801EE7A8ABB413EBDC167762C56A43470 - 94: 5352565A919DB3A512911245C3554E2438CE9740EB5AE0E5F0BD4F2036A56D5C - 95: 23A7A08337A1CB0D06896B9DE1E4ED326C0373B6A48343847D1A3F4CE774F90A - 96: 2F6E5A4D070B70DA3F27E3F11B71BC378A47FF91C8A5E9B15139FE1F85525678 - 97: D1FD9EE3AA6EA8ED29614EE045F3A6016A3FA336CDD8F700AE954FD83A3D0446 - 98: 1A57FABFAC2FAE75116924E41147FC7F87E003BE29AA78238F53D04CC32A01E7 - 99: 2E83561D4F186630BBB6F12F03F838D3BF2E00ABB973AEB3B1D17C4752D5E004 -100: 53FD366585658D92FCA1A01C2894F7A889C9354008547D6BCFF28014FA0B1141 -101: 0D0020EB02262CD299E86400F080686D6C1A9EC9E5529A94756F8179B13E1668 -102: BA6BC413D83545FF6CA684A2501C4F659DA224EB6F634F7D9AA87138EE6ACB8F -103: 9DAF2BBD34C0C5D9BAD301A24511E28F96FCDBDC3B4D66D91FADF0D102B99FAF -104: 941DE816E3DDD706C75A2F7834D83A3082AD85B3B6CDDF6405C6A58D4A29B2F8 -105: E212670248249BA8F7D957FE597A56D4374B267468C746A6557D01ACC3FE2B9A -106: FA0BF0EED19CD5F91AAB5A873ED2306641A8F4747B5A25DB7335D9FC4535C4B8 -107: 698F1D1E87152F5784E253C6C275EA716A294F8189DEA0B5D9E7683583685AAC -108: 82C74603CBEB7B341519A2DDD8D2C3F6A988118B3C613A2C3764A2787D075BCB -109: CA312FA413C374E78A35501A0402221DB1790EEE878809FD43AB5291A7843F87 -110: E87B44D3CF5CCEEAD631AFB38B98B05E135302F191D27340DF4DC48B46BFF2EA -111: 6E6AA51006C12884087AE18C999442F95FD5F83711E08A8F31DA312E4804C828 -112: 2A49A7FBA2C2F3787391CB57C8ECABB998A3A44FD1479A4C67C0465DEE46314D -113: B4664DDF69CC932080EF5FDC724C801C109B95AD8F302F845EF1FFB65782AF95 -114: BFDC34C091E66EA815A2CC4E19E6533D212968C8D1C1848AE815F31A2C54DB62 -115: A742B51E99A48E7F0FA6260382BE252C359EDF415C907DD6735AD68C1EE80A6B -116: 504514875BE6F0BE355CBB5F8CE94AEFBF75FD58D1B974451C47FFFC3549F920 -117: 84DF1AD54FAA71FA32718FADF58C0B5FEB0FD3902F34FEE7B8C9E28E595EACCD -118: C40B9D311078B55108D8C614260460CCBEB892A42FDD9A15E43FDD2C39F01C6B -119: 1E4E8BA94DA468CEDC0CA0C1740798D6B04660D5FD27F9452F8A3EBCDFC815F5 -120: 9A5B32560834AF0FE1C598ADB95BF64377960B2D30A42596ACA001769D555427 -121: 9691D25507204AECA115B8278F4F218EDD45C6777C1B6E8DE09C5B67A5F24B86 -122: 8E43FE853CC36A4B10FD195A83594A4CBD5427657F0E32876820FF2DE00EF963 -123: EA9D14A6551166C7419198E5F5C7FC22C12866AB138C44CF3A5A9E2E8ED5C0FC -124: 55F1ACF99D62E623622037D3365588046551E2396D5B04D00AD4EBA41C394CA4 -125: ACE6BD243D5A2D97A834F1011D629211E2E9C5DCF6D233B16F1287A056CE25BA -126: 321A6E3D20C1C99F5B11DB0433F575B918ACE85A0291D3894040A28BECA8DA4B -127: 358C4CA74009DD8F269E7828E654E373431488FD21744DB10556C4D031D58702 -128: 41A4C0E79C7235EE458B203B706936AAF12D79986459E3E17F793DBC5C867525 -129: CFF20D61F967684168883077BD34A6DAE9DC92DBBE16DBAC5512FA64DA3A0F47 -130: 516400B3023D516B5D48A178C4215E347DC5FEC6F33F2DE66AD4F4AC8B0D4AAF -131: 26FB5915B39435A1FDE5622E22F3507A52626925F25223E838EA8B77DD5E547D -132: 09645DF80ED85D5AB0A22BFC94E2F0B0CB6AED07B6339EEC83718009C5D509B8 -133: C23A9935D302B9C136BA56ADBFF08D801F505B7764C121523A68DC1D411DF1B4 -134: ABE11AA0AD4B9840BA90324559F9B8EC35F8BD76F9F67F9155C3B000056F188B -135: 5EEC7D130BD9CD5B75E194A8A0F3A9B1EFB55AD45C1DC434905E26F2EE115D6C -136: CD3A5553CDA05F2E24D04A3F8DBB84C1B7D576DD01E56036570A3799FA42725A -137: 3D548EA0A291AA1274915635276716E4668315EA5CC680269C047447A2D6D2AA -138: 93BE072C0BBF50AD937735174592CD56990F39FBA05D1BCF353759D7409AEFD9 -139: F0AF57159091726E373F731632D786095F640BEB3017C5D03E33EF766398902B -140: E6BDBD6BA0B2C5875C4A6ED9F31607EE010D2EDDE5402F0FE662893FABE4BD4F -141: 14E76761A01E15A2958579FC70868296B192DE67D869C26594680CAA22BA2BFB -142: A706E5C89D20F8E03246CBBB8C01427BCAF41B0AF0C84AA81E6B7B895A409858 -143: 760F7B8751EBB26C54EE643DFABC159035A726485C3F9FA07C774343E5BF30DE -144: DADD3A09086245E6DBA27DFF1A57C81FE69EE3FE065817C0022BDF742645CBFD -145: 9C9DEA77939C4ABCA217552F7420081A239180E927FF3511D8127B5D6D84B70E -146: FD4BC0127D76DAA78BE125B89708A51C5A2E8D753ED2AC80C7D949CC73D37F8E -147: 011376C0B4844DE9BB744E1DF69CF4FD24F5C663A5EA591577261A71B70305D2 -148: C1D6DD1F0390247FCF3389ABBD82053A782431F2B3A54BDC76A9D4D8C5F43A31 -149: 78B528D379AAF6B5D5EFAEFC1D54CD7BDFF87D51327B6B3ED7645FBCB7C8F725 -150: 448B305B7DF26D8CA7250EA9F9E67B619D915C8CE197CC1EF278469621F80395 -151: E990BBA280FD9FA92DCBA8118A8097BDA01A35B4F1273B98DC0EA2A4D822DE45 -152: 95D6C5FFF25A487881EC3EB16B34067F0D32B5FB85CAB859CF25200C761480E3 -153: 46CDD31F745B6EB62EBB395524178C8ED82B93C5BB1AAB271469AF091ED110B6 -154: D81F754F67116383A5F28332006D14CDFDABF577583AFAB0EA2316729A8FB930 -155: 08FF57A6592510A555B7852FBC463AC68C94E50C628088CCA50E1FC23A567629 -156: 90247E28AB0BEBED9A5C294396F5A7F2651C6CEF5B88D2736F216FA62B50BC3D -157: D4CE6C50A37A7531FCF983A4CA3F1F821ADC736EDE7BD382B2BDE6EBD445C890 -158: D49AC975F75CB1136EB100DDCBB4219EF7091D7637F14AFB11B962F95329E56C -159: 2E33FB986CDFEF779398CB97CCB2DA7A26C53999F1235464EA7E7AAF54BBEDBF -160: F8F7B8ECC57D8C1259D988933A0579A79D16E6E4ACDEE78890B175D0285768F9 -161: 53705DA79C089535A76E284B3EBE6C7711EA685C6B63AAA051E6E8BDDC3296B8 -162: 482143A2710CDC6B3951E5A659DFD576BDBD08B523A09EF293A474A5B9375479 -163: 9B7FFA742B0E7AA9E0EFA09C5C8363C840C7B41610982E45138EE010C61DD757 -164: 56371339010DAE38C98FACEB5C72F876B9C57F3B4A015AEDD30C673151AFB17B -165: 27456D1D8D88AA0D8DD80A9A9E21746A870DEA31E3B01EDCEAFCAD915E42D618 -166: 1F9BC56AEBF8145DD3D714F389F5A2D5FAE2C4071813E3359CD40FA8F4A7AEDB -167: C854141B1B5F5E070D55B15CBE21BC7C5067124741AAD4A5AA31E451F3B3249C -168: 316EF0EC5E99610B7B2906A6F42ADF1381CC183E2B83E3EC7FC5BEB7F2631BCE -169: 294CF7923FBA1AFBE9D9BEADF7395C847A48824A45C984E353CB9FB52CC3C20D -170: 51F85481AD198E40E7858564EF75F1D00D30EAE6021F929F895B25B9ACA4B07C -171: 1ED9D8A8753D20F397085B9C660FFA9DC11C3AAC58C2B2B95088738D86131941 -172: C80C270400359EE3F8057FAB0A8C8DED4863BE54D14A2557F2F77527C099842C -173: 28DF181F2A46196413490E09BE72F64DCD4C2C5A24E4DE3F92F858BBCEA43E37 -174: 2A177357665A7D7C16A927FA9E9BAC63AD9D15E462081AD61E5CEB169A8801F2 -175: 46ADA350F52B830CC56EFECE888809AB5B83FB63745D09C8EE9B05CA6176558C -176: 117B6FD5795CE23EFC7C60B816F952B98A05E5B4D59553C03699D636D13BB96F -177: 6F996A09CECAEFABE5CC0F643C832CA95CF87830DD9B02682DAA19DE8120E8F7 -178: B455B37252A43F0AAD13F6E2526ABDBBB69A6D6F4DDD285D02E921CA03729A6A -179: 60677C2CE7952FC51EA12DE8E72B42F4A0C0A9FF08BE40FD87D59E1F5B579222 -180: 0147E2B7D82DA44AE336723B95B68FD5E2C4986DF34702D40B8806E7B8A4F2FE -181: 20B949E56E6C3B0425547F1E30AC4811CDE689BFB7234B37DEE6A20C5EE48B4D -182: 9DC957DB83BB77642E4407B30040E997BC5176FD0A075F0ED50F4CBCF8B44135 -183: 675D5C1591FEC6225291CECCCBBA54574B9D71F94C2D564753CFC147FBA63CF2 -184: A710D8AB80BF9F4191C097736B2289EB6F7D1FE791ADCFF7B8A79E1040522FB2 -185: 6AA264815736B95DC271F0C6425E9D9AA577A7C2F0B3ED687C707F0FC34DBB5E -186: 89FA62658DE241240F3F570615BD795047FC565D99A096CEA5B6200AA8056DD5 -187: FDB79D2AE835ACDE03BE46148CF8C51B8F0392FA252B476E38FCC744F868E9BB -188: E5776936A86A9A150662CEFB31589D7A40BAEFD732D9A42AE470C4D0E7A5E437 -189: 69BD71719436E5DEE1DD040652918B775E1D804455A25960D7D80F1D653138B9 -190: E7BEB427791E13D409806CC617C2A7EFAA5F5DB0065F85FC02D66E0F36683090 -191: 282AE3716DE438584F9FFD31D5ECDEF0793E54CC8D4546A7B6B9BB66CEB07530 -192: A95B8461EF51A0BDABD2A909B2FDF146486F0EB7B6225763E7DD6F1D0083B97B -193: 7A2B4C3C2DCE2E14FF85B73CE9E5E9162962171663835D783EC707C32E35208F -194: 2A9C62E2C309FFC6B46C3B3173E4CE4CE282F986B840315021B660BE1B7770B2 -195: C22003068BCAB886A710B987B539067A0248914D92F0CD70AE4F7012CA7944BC -196: D317A2E2BAB19F4C8F0C4DB588310A8AD94C2942010AEE405797F49C7BFA5404 -197: 0F9BA884ACF851D4492E8A0EB5C3521F1668C306CC7D640F844B8821470A2C25 -198: 800D1D577E948A2175E76D0E35A4381CF687D3AAEE51A5E7C7F778C9B5747AF7 -199: 694FF7316408C4416564B5B64D0E13438383EDB2263AECACDAD23F091475ADDC -200: D8C7A45760291389331DD31A0BA13A1526802E1FA08D475651E5BA28366618B0 -201: 77AC72951AE925B65D4D9DD1B47EB484B41DBBA124CF63F54E9E7106B45BF499 -202: 1FDEB06191AA96CAFE94859C20DDCE3EDC56A1A3C756D68CB28175D6F2CED9E0 -203: CE3E67C170B8F2ECB8B6348B3DDC1B5D84BCF9AAAD1F777BD4581661BF993C89 -204: B1337B96E06DBE9E0A80F827F3BB1D6EC8549EC65CC08BEEBBBBDE65745E4AEB -205: 9DE89273E2BE7C96EB0E619A444FFA68CB23731776F93ADFDE94E33A0506451F -206: 6A89CB96DD3DBEC5415EC8B47C1554314A8F94A1E2985782B2E5CF96E06B62BC -207: 4AC1A6512AACED45FAC232AC2F48EA3C2A9AF6132428FD72F6238E49B0F7A169 -208: A74B2F2FE853E3379F440927F3715A9592E3339520DDC3FCBDEDAB12B59DC5E4 -209: F9D1FA610EFDA174BE3B5EEEEA794A0394941649A887B56AAD9B84CEC2F2BC0F -210: E87E80800B50F61C94ECBD147147FCF19859EF65C1F6137F30AE77A509AB11DD -211: 6CB41B16964C4BECA31A899EB1E12DB49E3680E40DAD8C290CC1798FDC54CF10 -212: F8E91521A2E42B40BDB3C9CD6352868131F68C38FCE8FC3993856C0034621F0A -213: 5A71E9454D97492B805F36F2714860B4E0C8FD8E8D2817031C0AC0E64AF3D33C -214: 06EDBD6A7B04A40DAAA955E6669A6195A0B9A5BB93D61BB349D4EDB0B95669AF -215: 11F48D462552715D2D7A073F3D22CC5ACD11D7D710410FF3502B195ED5A6E211 -216: 9D04BB47B788ACCEEA2FE4E5D12136A2FB13312B89963FB0C7455F5D0548C4CC -217: 81B5F9BE1F856AE19541C45AA03A56FE5B3F72E7FDEDC932658059A575E0ACE5 -218: B6E377678CEF34F91B4353A172ABEEDD60ED0AFA2A1FA4A46E5823C7D688B9B3 -219: B93220C7A24A052FA8173F0450C7FEA01EC7BAD56E38082C2D9D765805514234 -220: 2BA667BA26CEA5F0C86E34567C53CA32670F326CABA7D3C8DB28607A50325B90 -221: 271DC328CD49C70CC04A4C9C1A511BCBA0A64BBE3C006989F6A5379F99B20BA9 -222: A0889E2E7B82BC86946D1FD683C55F825B0CAFDE1CFF23726C998E28FA53D43A -223: A5B8BBCC602EE0EC0E449BC2C848B967D764EB2A1F1F7BF6A6287BF65801E859 -224: 7C26190424ECFEDABA6A6E478BE9EB3C45BEAB199D2AE2D5343E6838F1BB409F -225: 64FE58B623A0FF82CFF45C9519F16E5AF47D9349E262BE3755E97C67E6BE96EE -226: FEA45C5B9D462FDA09C0A306CCB84942E9594FAE9E880618D14C10CE92B89867 -227: 42BA064C52633E6FFCB48DB4D2F9CE47E80B41CCC44642BB670785E61BD8A1AF -228: C3E67539F4C0C32648E571E5766F8FFEE14759C4A084978FEF794112CA6DF75B -229: 05A3B2C764493CA02DC565A7645E26A02C116C5F8331F3254F4ED13C4E06B7D9 -230: D53196776E1FF69BFC45DB1415C709AE4431FEF0DE9BD8AFA6B98F218629D0DF -231: 80BAB2876EC2807F8CC44C38DA4BE999B406044BDAB8021DD42F25A19FEE0094 -232: DDA21242974654B965FEECEC0CB16F5B0641AB2802F0985371A54A34EF4FC175 -233: 0B46386EFC6CB6C7E35ABEA9B92F7C35C5C0F6C09C7E22739DFAC5A5D6310EC6 -234: C2A7148CBD40C429D9CD5C9218622C0C2E4BF5DAAAEDBFEFA5EA719EFA3A8707 -235: 01DD575AC375FF03613B28908A6A2FE36BB5C4D209480507C36548C5A55C2D06 -236: 8B0D22953F81230707DC95DCD33A8204C6779A775469A9BDD8B67DE1783081D9 -237: C79CEC4192CEEBB0EA80BCD8DDFAD836E5AF250420469F8ECDD79955FCBC71D7 -238: 37D3B72FDD2821691DE187AF4508A5E1B6ED2856C776AFA8E659C1149182E5F0 -239: 1F7FDDE95E9C7F575966C6527376BE556472788D5E91418AA28A7F224CD6DA5E -240: 2098B9AB153C0B61E5747F6E849ED200BDC24D073C4B487C79DDEB838491B9DE -241: 6B97C0500F8D848FF47C07478208BE6295C6D09A4C6328E636A94FB2E3D2C337 -242: 07314BC974C24264917C276071D48E05DC689B5F7AE278069EA50B5EF3BCF23D -243: 53B34B25C721D648C0FE1A7EBEA77BCCCC04CF3A27AFECF7960F3BDF55045F37 -244: 2C99E8A5FFF8AE0590263C45FABD3F9E162A79B30289588C35726330BA416C65 -245: 628FC13F3F2BB2C272F2C1AEC1F9465356FB06B8D241BF9FC62EF57AD67095A7 -246: D43440445F01A04F7DE6B052C24CC9CCADCB930821A84A3793CC013CA698BEBF -247: 2D0F4662C19C216E4D83022089F4666FFA809FF4372D99A8FAE1447FC87BE0EC -248: 7AE09AE6AE9CB0AF8A499FFFC2D43FF4EE2B57D7D9BAE39A6D87E12BFAD0F305 -249: 861DCFE93F24D363DAAD1144C6F932F3AD92E1BE58290A8A03EF0598D02C3C53 -250: 785B9F0DD93D0F2CFD6CA6A006C9B7BE6340F37FE4F0E8918F899F096CDB0074 -251: DEAB5B508B4A32786664049A0F6383407815F6D47D2143CFE65412BE97FF24F3 -252: DB2F9525E92EF25915C3FBE57F5114772D8545847944B1616D7CD65325AF12F1 -253: 1F66F24CE402E1707411C2E374CBD11127837CF857C0C7CCEF294F41B7ADDFF9 -254: F7E289D1D479BF276562525B162937DC985F6F2A3D68B07666611EB5F9D58E18 -255: FDA0F91069E15A8EC35ED216564FB279FAB28FAB5FBBB73EA51931B184681844 -256: 1983008C29D18103E86F1B91FD13193C453E8A52BCC413DA485F4AA73FEB5962 -257: 14EB1E4D6742FE28FAC682696D6363ED621DD13AD2E459511816FCE5A4DF6685 -258: 80F131A9B4FBF291F0B803EED75021D61951DC8BB9EC7E28D153A440D9E8C947 -259: 3AE9FC8FC2EBEB210BDE6FB62F290FB6E9488BD97827E479C99BFD33BFCAD1A9 -260: 27A839E7016CB3167745210E65485F21BB6648AC555823FA2D35F369797AB933 -261: 15CFC139FEC8F74D37DA4B3A56E28A2E26E065AF0CEC60281E3911D53B5577AB -262: B5BF49BC55D41A1B81B56689EC1ACE9FA67AC8F1D300F2449D004C220F7050DB -263: 83AFD99EBBC844B409E46999A3499B0D4921BA5BBFA3AB004C8D0DD2B3B28241 -264: D5E0021C01ED5C00B195EB3A81222762DDB5562B72DEA2605FD78BB060DBE88F -265: 5117006505A908223033ABFB9002FBD3744898FA304A7F530BA640A8EF6C8A68 -266: 1C0D45601111088D341DD9E0226B5959CB1C234F6C01820BB2A28AB1C0E139F3 -267: 768C5F855D3D9A9C041D6544965079496C203C2373D43A3AE799CCFA802A117C -268: FBE60F61B244327A1E73DE2CC9C2D6AECF62F17CBC9ED3F4709DFC3E89EB67EF -269: E42E6832233935361ED03878B4F4F39767A7898115F1A7FE1B1B6C08BF11BA93 -270: F31DAFA4C749E7400838C1B845A10936B28E5D4849B65646FD923B85C2FE2ADF -271: B85BC587017D290EB4F397235655C103242EF35FA171ACFA3C4A60A2C141CFB8 -272: 078F5F2A3BDC74D4D6BF07A907B18DAB68909F862D2BBCC146A74AC2D19652C4 -273: E41664122EE5E1195715B1473D7EFCAFB6441297B48A4304F77C14A77E7F52C1 -274: 91C8BEDE28724DBA912992F8A419474328DA09A0ACDC11158E59DDDA782ED081 -275: 2DEF25ED3E9B33F039219E4AAEFB9FAF89E029F9580D684748516AB0B8795EA5 -276: 88560F2297730AD159CC061829B85E043FD86E903C0E32905444C407B051221C -277: 4265C17C5B5BC4989CC5C91EC1675590ECD7244F66934FDC178CAF2A9637899C -278: 419A596B3508F95775EFCA09EAD3A4FDE3158EB177695011442B7D0B329B5CC7 -279: 1FD25FEBDBB486721AED1DC6D6221149142D6B2E1447F063F45ADCC20CE59AAF -280: B704F497C010F34E3B7B4B0F041B24700A9A2C40BF553FA4C0D9A50FBC570381 -281: 63E8818B416C1D2E619A88260AB1518FDC974A472167695AF320E50A301D128E -282: 167A7AC8E50949A524A23049F3B0C97A8BBEE5CBF7E7939922F11B904013DFE3 -283: FCC3A7AE079DC907581D93F43AC029E8F52D97AAE3AED17871FBCE04996A544F -284: 370E776A8B2A1644297A88921336637687845C126D8D6B32FC62CFF66CB048CC -285: 79EE83778901CE091261E0C2700374A4B61F094D88A5C5A8F54AA0AAE1A2864F -286: C3ED6EDC73EE1C5EC9B50BAF49061181FAE3D0CE2FB6419C92941D2EB21F1B27 -287: 2A79111205E7B17887509954F7C97935E45BF488908C46CFCF8635E791949963 -288: FBFBF3C179B7385A2CFB72C855E70F20762077C5515D325F6F73D243D6382FE6 -289: 2CD693E131790A4DF6CA41E53B054314CF4A62642D472B42CDD9B652D45FB9B3 -290: 0D1D6686A79385A94F13159EF5F5C168F2D16EE3FE64785D747E583C9ACF1B74 -291: 7F33EB939CC0F954C7026872BB6CAF7AF8C19CF36CC5405A4EA89115DD20A8A6 -292: E8B510ACEE797029D26A7E00665DB07C1FB10EF309FAD1BC3A3B4CB4005D472F -293: 77B4E147A06404CE5F458DEA119C5ACC0FBC5FF5C903C10ECD0B1B6E5134AB0F -294: 17E5191A435058714DD40F29FF00DD5B4097674C21E6F47E64F7C81F953AE64A -295: 32CBBF70508395B981A4B195046C7EF1A7918F5A20B8CEEBC880615A3BDAB0C0 -296: 21270CA58BD089D2FA594029D73642BA84C0391C2587D6F1959AB96E0583DB43 -297: 613AD03D10F997C8BCB5EAAF07832CAABA407B68C2AD8A546546B1EB55BC9425 -298: 9E46FED6F028DEBBA58F90052A352F35F4893D251875FBB8FD093C39D06F3A09 -299: 0CBCCE0200CE749228E59F63C8D15AE6A9BE05C6C4E0B566CA03537C3B0FB1BA -300: 5C29E354F12969E3290FB4972C086EA911CDBE41F9101BCC3AD114AD6A956823 -301: C29F9040B0EBFE31CCF25639BCF31013B9FCCB24A9A3A50E2B724AAD0358BB77 -302: C2B7526D521EFD3CCACCBDC6C1366EDE8BD5906DCC4BE629C5AD9573B1AD7D36 -303: CE19D2AE2AF34170DDA97FF9CB752D27CDCB13C72AD4C4E417748DF457F22169 -304: D2C5324242C83438DF9DD4EF1241AE433FA264098ADE60ABA7E9A0F6F62C8B96 -305: E5D04581E60C1A7C26457E5506B6A27C12722710D344EB8CE87AAECCC0D94610 -306: DBA2604FD5DB37CA07E3CF5B972FD959AE8E377C7B3E949CAD953A3A1D6C6CCC -307: 7E71845977D7259E445FF865DA2E404F340F5A7623A341411B8653B57C7796F4 -308: 3854FCA3EC0EC5BF88B98563121C35CBB8A102D713E00B5529DA9B8E19C99F29 -309: BB0A7CD32432E5344544AA49D1C99ABC5B68960AB6184A5BAC7C16B4E52DCF2C -310: 7B05157B45FC28AD43BE76E71C0850A2D06E6160F9188ED1E925EFBF242EB611 -311: 652F2B3CC155A785F4338291B6DE3494F92484A1319AA536B7D3842FAAB8C4FE -312: 1DCE94CC9EC900A22CAEAA374D53247BC572CCF4C395898BDF45665A799F73F6 -313: 6D8988D9C10AEAE1CA38C035D5E6175C2B45A5290BB12DBAACB8D87A1E5E1F0F -314: 11102E42BC3487B040578C05AEA7016D8F8100880BCECC8E74F4FDB79FCADCCB -315: F713403C4BDAF09BD9060D7E4A7D6260F5BB53FD9576927CB125B5B83907CC0B -316: 797374B0215EF5E1BCBE84792636FC12A3EB19DF1767114FA61CCA802E81A509 -317: 1F93D994226B0F540B3B2915D92C74731CD9349AD04EC07923377BA648D3490E -318: F4DD07580D4C6C59F111E8E2B787996B7B9C725799CB61B92885BE874723F7F3 -319: D7CE0F3D0C7812FABD9FB005FE72FDD73CEF7C08080D7FE290072BFAB430F746 -320: 00922AFB776432245122B966C7836D55D54E326BFB20A6C35D46602187D39427 -321: 13A7D159FF57ADDFC7064CD4756A6887B80C55D067624692F3D4DB2F509B7C91 -322: 85EB20700531B612AAA75221756CC6EA7D41C067A0DB01CA65884EDCB5AC0F3F -323: 0176125819AC0EBC2625BB82D0B5086A4E6E2DB12CD38F90E3EEAED54B17E327 -324: 8F282CB4381D21FC8ECEF534E319F343ABEA612615F491EB3A9C32C5C5D5DB0C -325: 7FA396B211555C0B6C52800E8177FC4E7B9E4E08F20F0E5D2194CDC2B4B5757C -326: A3279DD8F52E0A2657D2C42DDB3F55F4573CD3D92C7533334BA020E686F78674 -327: 26D7385D824C5413ECB26BBFB5CEBCD0C1322E6A5112C95B6DAD761417C26E2A -328: 03A26326B970AF512859A3ABE4AA624F903AE9AECAB922539D7CB84E57885D94 -329: 5F5081E9C4ACD2C4E94707B32BCB14672B9040078846A1486F3706D254A5ACD8 -330: 8F304536D449F68C24BC0287BF8F518E421ED05DAEA3A58B6DBBBD92414F558C -331: F0E26CEE81E711A447A0F84437E3D6424789C05125B61734D3AD53970A74F78F -332: 1B413C2A652C94A251D1E6093135E63578773C0D098F2B9E67E45E900ED97445 -333: 0C21FA478F6B9EBEDE0096770D815CF7282DADA11BAC3833FDB5E49B9ADB3626 -334: 76ACFD8C6064343C43F20CD053DE97C2D1B231D8C908D7DFCDD1B3BB9BD314B5 -335: B07D2DEFC8F751295AD3F8EB182C61819DC8FDD5F3CEB85149E8568CD234B394 -336: 8C8EDFDE7F01C60B364CFBF2E7164735DDC65798E600F20A01C8E63F1FBA30D7 - -HMAC-shake256 - 0: 42B12928375B4BE0136217AF0975500EB1A2B1C277D54BADDD34884F9A2827188DD19AAA791B66ECA4630F7CA4B87D988F99DE5A02152B4CB07829DB3F249FEC - 1: 4E1FBC9EE9B33BA6F9B2927ED6EDD9209CCF589BD7AD9EF54E1B4BFB1877003EDB6C5A536C92A6764A385DD4E11A7F0B1E50CEDB99C6A70A547FF2FB6736859B - 2: BAA2A47FD88F31B258613B4E3271BF830F6D1B5D80F6F0576A9A8E6C72576AB26C4B356AEDA87E6D5855C377701BC6D624F85C0E60C4562AA16F2855D6260050 - 3: BC04127DFDBF769CD95740F0C9A07F14A8F2A899FB6343AE32930BE98ECE84E1F8D12594649FA94B0A3F4AEA14F177A9CE12F00365CE5F59B05C0A1FE861D031 - 4: 993192D9C4F7E5169B092063DFF9750B7091A18182E8B03A663F8FFF6F1235D4C1E66C4F2852355C39E8FBA927D2F80DB2515AA59A302594AE07709B327A2C50 - 5: DE29094308D32E340DC71BA035299F9357968EB9437035FA33AFFDE3E33F858F1DD57CEA2AE33E347D09773EF80FCBB2BEDCB6CBA74D46AA6C7556224B23FEDF - 6: 53C67D5E698D23EEC05DFDA19B2E67FE607D192F134C599B72452A5C5BA4CD7CF6BB429AF15E33FBB009AFE6EE3B1DC1E08C85F35526E3D6E80F01CCB0105E05 - 7: 505A8B4F6B586F5147342E9115288433E5A3B02D047374A687F3267D0BE6CC72AC676C270D52FD8DE2AEACF7A26242F2B81FD1542EA46CC2392EF19DB74333E7 - 8: 38976E09485A89110EC5668D3E2A59324654F8AC152BF250D4BEE23A67B8EB5C2376DF1036EED6B8974696946B8F2EF59B35772A1AA5E1E35CCDECE115ED0F8D - 9: 7AEC64D0088413C90AAACA0CA5A6188AAEA12ED6650BE568B2948F46CF3CE7D90F6DE9B6BC0881ABAE1221036DD4CAF38DEF203DE544C411842CDE1FAB154694 - 10: 6519D10964A548CE07746C7917AB7D772CF9E3288A5DA1A33EB8CC75D156967180A4AB597984F945FC7BFAF6196467BCF54147108DC9754F39235499A9663564 - 11: E6D0A2198C36C8E525B7D28A645C3E6D5A0B82E39FC316D659046647103DEED86A8C8F2FBC326D1BC53AF41EC6481641EB3802D60B59AE6883D72275D99E9A9A - 12: 645699BCD40274E4F8EB081907BEA1F1932A7A56E56B2A138D917B49EBB10984E446FBFA2E8831D079799A9DB750D3CF96280824FC7DEFA956BE38CB42B3CCA5 - 13: D1B832265B9B3FDB423CD20F13E504DF0D200AA543A39E4FEB95051EFCCC2A9A6F459293CA395486BF254738D97CD22B11AFBA1E141B32E2042EA02DA3E4CCF3 - 14: DE833A60785AC76FF1CF896E0931A7C789A5BF159648082A8B7DF169E10F12C63A0835B0551A81A42DDC292F175C05EABA3C77FF2284F3CFB42F74B8483031BA - 15: D4E8F80CEBCEEC0274F02E67B7CC63D8F47D54FF8337390D510C7AB8A0BE671357257AC8395F683E22C6D6D24422D51114B2E5E896F6578E71314AB94F504C1A - 16: FA35D5712B25844F78CA20B472B7749478777845529BAD8792EDCB40438303B855242D85884E836E9B525BCF65B4048465783A862D51E823F23EF7F1C0AE500F - 17: 5962EA6A96E22B243141D9BEAA1BD0AAFD5F0417609E4CC9733D2C4497A8601FB000EE52D283ED566F24B4858217CD28421B2258A3A51C7F057CE74AACAC8DA0 - 18: 82A70C2C7369CD4D5BF61CAEE4B91F6F63D81402846FD1304FEDB3D43D6C99DABBC29941E41B6AD7A914D977D5BCFE02D52CF5529982CFA53F1A94FCD18D39DD - 19: 4C13B2ED126A4C3245078EA65DF4D31D384A7C58F1318587B3408D498E9F16A484FCC49D4C13095D80CC90873A68F9B0AD2D300F575B352CA58EC615091FC87F - 20: F1D3A22AEE1E434B82D273E36788B0FDC4F5F53BC1279819CA6DB8CCFD6B0654CCAD324FEF0696291D7E26F8D96F3DCD08C66D50112601439955AF439236BD0E - 21: 7910A2C73DAB0FE68DEE313E3E1917F48AC013E644588FD56C3421949946D7859866145FB5F2542ECFFD5DD210A4A9753436BC778DAC9B96EA5059B4D693C1F7 - 22: 80B5346B650EF930EEBE856C2B26D66468CA449E95EF791A2174D8148460DD82E7031CE623E9E7C249F5F9E9AB518DBA568E480BB900A2D3435EA2230A3529A9 - 23: 1FED31DAC7F67029DC74A0D78A8AA45A929EAEE958825D91BDCCCD4466DAED70143628E28BB4DAE3D57354179CC425D9CC311DC5803EB102804693A50369BDAB - 24: 704D608BD8F15209A8FD1A916A9D479AAEE8329AE94D25FB19C3C4C8CB807C09D8C80FD6860C3C541BF542A118356E1A257635666B73C57F45A586D8DFFAFAA2 - 25: 62ABA2AB7F82A48D3A6EA3BC49B37A8791A93AB25C6D1DB2DD45465DA3BCBE7B62F19FBF3F8B17A4BA3D74C04BEEB02E78F07395429210690CDBC588FA8CE9A4 - 26: 628036418DF9B5276F250A2D0C9C2E10E2B6A2D157917440DDEDC76B5B2E1BEEB32AE0C1B57F5C0311799AB10BF10012831226625033F032182BACAA6CE071E6 - 27: 58EF3CFA9F162D65702E4F353EB331E97719A130741D96370B79E5A4640BD7ED97C81132AAD881BAF0F0C1FB1D5F87B3DDF332D149F945405B41C8119EF2435F - 28: 3FCC6D135092B579E0D78D73B5814F0BF17661D271DE75D3A8AF1FB81FDC9FF9B94DE93FCA3F38A29CAFD1FBB24FE22E699353555D7AB9377756040F31608E70 - 29: 4E7A28E9534AE7D08E60664E3666EDC0FF0CC94D000C2A3843A7905BFDC1E692BF835B6385BEC7FB6B7937D9FCED6F202601C9744ADE2BE988180CD79B089F68 - 30: C63F85667D232451E912C906356236E79C0CF79A7147B069E351B8CA1D004E0AAF28A3D2012993F81F590EAB7491C4250086F867BCE972CEEC2EA0868A924A8A - 31: 61213328C538AC49BC35B06950E9B7BD11317A082659D5642189D70B52E1E72FAE2B223BD888440F27FAD064FD5407BC4E432ACFFCB506FB4188471BBBB7A86A - 32: 7B42C8E89F8A7954030D9AB31BB279CE2DB59B4849C80C1F89ECA7FB778236D8178A099216C8271C7ECCE71DF8ECED16D680C7E120BB6A6A7354B938193741C1 - 33: 80D90751FEC0EC8283AEC72C5FCBAC34F816CC88FDA72BDC34452124BF12CB1C44FE8AEDA67897D1F5A869F478DF5B932F5ECE531B74049C53D1BD27F24C3EE8 - 34: C98E315172F1DB1ED990842899F118AFE84351EEDC1E721D203A66865CF0CA4A09F7C3C2A4530D6F0F4F50FEADC79FAB17108824E71DE5F93E22FA00DDC111F2 - 35: 3FE38E8C85CA456D8391E440C14D356785E875B0D4520E53EA4687D8338D6212FE3B9A7D735AF3F494E6661C1671B476F00B181FB7CE3326540ECEF3DA1345F3 - 36: 0CA18E7AC1A468A6C64CABB9C474201739CF59EB07000E4065E42C3370D9025249081B978BB431936983FFBD8BCBAEF74B9DF7094E5C3B3C1AE3A19ADED4CE04 - 37: DB606CAE5D68A9422A0A73522E307149D7CFC578D4081FAEAB841901C0DC3D41B1D5DF201495C057642E3CA360C460248707F9E16802C96F1582802516F2F0ED - 38: 8E786FF80E8526EC87690ABF38EA4CF5A161D36A25A5CC5A7D243FF01F8EC7A762CCAC79AF9B51A2DD647A30436501D1171F254F84B13E890F72D37EEF8FA4A3 - 39: 8E5C12F526BD7E11E878036B09981E7A72314AB15553F32D522B126FFBF6C73A245E28ACE0E07D20BA158AD37A0CBE41F90F3DA86F9EDA467E31A46FC99CFF2A - 40: 4F0CEEF5B1E1242D99D7DCDD0583AF96A9D2E60D5D33D0BA8A69FEDFA00A2B37A632C180DB0ACBF7CC56F9EE1BE716EEDFD363EE27396DFA171466E77E9E70FB - 41: D3D4C9BC591C06DA20352B8566EA6BF21E4E8006FE0331DF9214F4DCD79138C9C8E46384DB882D220E044FD746CEDC7B5954AB9B0073C05BF278C8CB71072166 - 42: 87AC24B6D9D2A3A0A4B6E7DADB1D51AD9990252CA7B5461C3665D19F493AD1CFF99C9F7436B5998AA27F596ED37EB9F2DCA2BC69C865A7FACBCD76CFFBD5A3BD - 43: AB966A496F0C1642438A572F46EAD958B31F9B0A4F09C40CA1FEC5F87775FB10242E93AFC3A5BC03284A97D2087A81082CBEE0BC0FC2A0FF71E5DEA800E185C8 - 44: B9B53C076D33F391A607B19439404FA928AAD5E0AC34EAAE938A388ED884D5465F59BC826A1A15ED5E1D585842C0BA83A172E1A811AA4CA6504C69C0AAC85E46 - 45: 6492EC71BD823FD4C56C6291A0A1448A816E7DB0BAE9A707A37EC8184893036A4E76B563D5E77C24A6AD07143E4FFDFC6ADDE465940B0918CD4F83753FBAD3CA - 46: C899BF69DA6A1B284FC8EC5489BE46822ADF35B6E3FFF41D46228E67342FC9D929FB90B0D64E9C9A31924C357233D0CBB5C00864313EAB301D54E3E385FB6E27 - 47: B8133A0B6B39498C31F1ABF8EEAB5D0112271D903B013CAED01DC965C36CD44CBCC1FBFE8C8DB71D53EE0E5454B86F55F80B53D2246B07C64EA15CBD9C6FEF56 - 48: 040A9FD5132CD3A160CA6394B8B9C317BF5AC055BDCBC7CF964974E3A553CDBFD3B4316AC0AC59C17C26F4793359DFDC4260DC2E9BA0A12E2318F353CF887F60 - 49: C2105DB7A6A9BFDB92155D1E0A8AA7B4B240702A2AC52BCD7F4BB60A2993F06F1CBE63597ECE7152370C5686D6D3520085000ED823F6D5CA2D7977935B591A19 - 50: EC73F88BFC726A75AD061834412F3A350B32DE5EAD2449A2ECEBE574C615D235B68127A79078C32D6CCFAF4DD47A7F5AD7B49EC7D8D09C2AF32A1FCAD387C001 - 51: 4E4BF013AE0FF7FC6A43E0BBA38812FCA721A0E6762F65175E3ADB3F3BEF95C70E86460B4996F8043D06BFDC5F19B83775CC5C704D2C009CD325A2684FEE7B7B - 52: 92853B4C126629370C8DA3F9B572981FC76A2136C2627B322413EE50BF23A325D28F81CF7557E2818757D8072E58635B5DB76116B5F8C3311D434F8D69B18FBA - 53: 018409ABCD892E6395D80FD1CD3F31C95B29AE324EBB45576C3294DD2023669C9D59B7FD55A98B93227DDC0477B8C4B374B14B080C7FBC97FB225CD683DC754F - 54: 52A5824092E97D22144F5C621D92DB1B63DEF06821AD499563F50770D472283C045C891856460460C749F0A915AF5DD7D5126A01F0537937C3F8FC2335FFB66F - 55: 5F0CCE61D4ED2018FF8B5B55382F8AFF30A6A2F7CC7E4867B18A2FE8BCB45A8E939BA66370BCEA988450505A1507198859218FDB884D1CBB80E8D1F504B713E1 - 56: A9D47814EC189DCCA00D740F977AC5E31C8038F82B07EDC8B9E7F2662B5C90CA1986BDBE0AB833AB0BB348E1C00A64C13E0681D2460A2C0F8D95F92EA91A14BE - 57: 312161F9D51D7B4564FDACD327715775C915BF2FDD3A4A9BEF773D3710B40704817E3A7A39D09CC3753FD2B6EE7DF7BC4A735878A9637661983832D123141096 - 58: F90E7497BC0F31C3A6CBE976C940C7897906E379D0B3AAD7F95AAA6E508A459B80590AE866BB048FC5C99D0CD3A5241220DEE01C2D8976EC2B8EBDB656F29DFC - 59: 70642517F1810746672C0D4BB549D00C1851A1EEC11864998D3D8441B29240443B00D9BBCC757E392A8B8EB7F6316BE193F60530C7E49963E2420CE9963E15FB - 60: F899AED68C5E1749C387962A4B19595EF21688ACDB78C6D877F9C65197EA4AE745511C80C42EA99FB11BE78F736C349535909E2A2C29F1F41CDB6F83C127C2E1 - 61: AC04E4074AE7D536DFB491053E790AAEEEA3B01E0D6EC348A5486A15E4F303378BAD634596CBC226CB3DC941FFB80E79BFD67EE497A42B7D70D9F43946B0BE8B - 62: 7B938BA763CA94292DF0AE1ADECB15117FAA7C8D0558D4B235E3A1F37E532D7424B800D75B1ACE3F394B19D9234C9083CCFC8869F7C6B37C9B5C3E405D723B62 - 63: 7C4391518BDBB6CC0B93D0BA0F1ACE25096F43FF43A8092CED95346556A0E3CDA9BB312880C8B684225AC624ED38ABA356109BD93EC0A7358F158BD51C2F5C6C - 64: 2400E799346694993775DCF28710060AD89936F10BAF0B3416A172BDE5DC663FE3E22A9460EAFC3F0266A60607485CDA4CBB23751F7A7963E9E05A68EC599F83 - 65: 5F68AEC6D00DBCEC9AA92D102D74F6679930FF714B21D4286B1B7B7DF2C5DC47D2A118E052F087570A72CF9953044A2AF83D70B152CA722C43B610AE78B40AAC - 66: 34A50CDD3E7CAA449398243ED5A302E07664A0329AABC3B76AA65D28AC3DB16EB1140829B0E1D2A0DE8E8B792C2A82E1C9309EA5A0CE111D39EE34E31ABB00CB - 67: 6F06DF36D6915EC334C973336B62E913020B58917F1445600490E5DBE3ABD17B1A78988A02436D237682EC267B8ABBA27AB9159BA925C9844BD7BB68C8360A0D - 68: 54691B2D6F881299FFF54CD60245A993F1E95659DC4FAC94AA9BC34D52A2B906829BF63D4DC7F8C5FB60ED812CA2FD2820B184FC4810F562C5F6103F27CC5DD0 - 69: 6065B02716F891AB2E2EC98C374B1D578D560F816BA9EF7D9BC45B42EA2FF3788D5B96317DEE8749D695A1E8F178520AE82FFA3C6919586E929F72E60BB3242E - 70: B3F8BCDF6A4E27FD045017E42E0A9F42751918C27F837E5A182D2DB8C6D204638E75C1415A5057EDEB3056B6184AC1869A839D399D8833FE2EDBA623B8CC9A1D - 71: 81A909D2FE468735BC6EC9163D8BE7C003F0D096CF41263B408C92245501501A5CCECE270E3D00060637A4CB438B2D2C768B7461905A0C508E9B61BAA61773DD - 72: 578FA2EC79470F0F5235A78BAB681CF1266EBE64099AB7937F59AF8B2C773F0F1DD228F9B26FD93DA3D43E9F23E712A766AE5A91149A68E0FE5A436C03940047 - 73: E5E88E2CC272C8DD78BD85C16CD5E9F4B23E776B8548B81E887A86780CF55A6228E6DF3D4FAE4BF515C6E2F645F12EDB1FA0B329DD53CE4173BBC8ECAD5261C8 - 74: F70B45D8AD454C77C4C8CA650E5F1F964324400725068F2FAF779B301F81C51D0D89AF5847EF35A1612AE593864FF1E48B88A64CC664EC5540B903A442EACF96 - 75: 5B9B1671BF5CFDF7B09E2060249283E91B96AD7CB088493BF5EA986CE95D03B48C986A8608B1F8824590B79E204E14213CF7FF992438B81318F0F1C87A5492A8 - 76: 245FAE4DE8BA3B7B8CE889BD1ECADDD22DEC3844284EC754B8624C645C43847A9BEE88D5EEE9D739C155C9825038FDA19D7CDE4FB939DCF7EEE861B61DA382A2 - 77: 437712A93F864878E12C37F0ACADAE73D70E15A512A31C7F20C618B6EC6049E1533614FB80186A23BE36F870BCAD3EFAB0ABEB623EA2AEC5DFA2D4ACD8F829D3 - 78: B7BF3E949290CA4E2CBA563269A10E9B9AD2DE51D0481C0C678208C21C0E0BC01306E8801DFB63A49438178C725DEA239716BDA84B2CB79C90A610523A6CFD55 - 79: BD392E9F469CF18872FED29725DD0AB62E4A3BDBFE264C6242E8E12159E9725E4F351B34A87D56A73AB53F3E77E916FDDEE8543D88BA025BC30108331813D869 - 80: 14C85B2EAA69A066226C4E7AB5FC77B667B26862724C760481491F0E2876FE5C11D0CE1E1B21FFA0AAD1F2DE2D3A5840ACB164D233BEE51B5B093AD6D5503401 - 81: B33DC37AE879B15705CAF4EDF9E9220A35E64B4BC51F6EACF98DB316A0DEA80CF12D14DA45074F8971F0365BB02836E923F571D60AC566B7C39F2A282E0F4F52 - 82: 11739F5CD682B41F4BC78B37858F9D2236ABE42609ECBD01F0F2C657FD87ECCFCAB36E5B2C73D91D77DB252ECE3CD68C82896C9722DF08B98AE6AAE15AEA879B - 83: FFE401D3BB81DF066602D8D27556360F502747509BDAE552270D38C60F240CF17D3C5AB511C46DD73A15A5BCB893AA431EA396071DFD0F7E737568CCB52D1A36 - 84: B6916143B3391A2AF2EDD05AAD178193F727A992B9056D9B3A94D56D5246A9E559BFCD8E85F359DE6118EF8340DCB3965D966C210BC26347BCE5CBD9FA58B030 - 85: 39C0E382A2672BE1E38AFA44A1A6071D03F0D226E64C971BB538F2CC885A0797C3E7894E942A0550BA03C3BC935E22E0F9261AA5C803B0EC20C4B50BD967B375 - 86: AA8C2D142305C45F2E9CAD37732F87C6489B9745E0CE126A9B7CB92371E25DCAF1632C019061F89BBA40FE723FEA3722F193A5B0EDB92049498A0E85DA73E47D - 87: B3C6ECBED125C11E907479A98F67BB6D3DA6913017B911B20B07F72720A3DD8D94E023DE2B7B96A532ABD4B73ABB95BC1C89B5BA2D897915C396AF0AE5F393A7 - 88: 329CCB475FB0091127FAEFC0E13D59E204CDFCF461D3228F5C315838022F558015D1BE4DABF18DD88F30ACAB95B449B89490DB0444414E43F23C9A1625F3812E - 89: 51463325CEF52592487772B1B45E6C7D4F1AEFEBE222F734C1173086286654262FFD5546E316B807E0215894BBE8CA352778D2B33FEFDD562BF96F6F901B58B3 - 90: 51D4C2820A67A81053327E4A902AF226AA985AE8BEE52E8A0BD8E8C79D25E9A5EDB1C50D6E4B00F1B164742FEA17FA57B66030846D48598D743D76A759CEC191 - 91: E417AEC328EFEA5C332F3363ED8D9DAA9DD1D049D9C6E4357B020AE1DE439C5FA9706104D5342221A6BED201658212519846529D6E5A60F584882D02F8F0B94E - 92: 298A7734B00DEBDEF9FBDFABBD7006E1CAEDE16E6F1CB947239701291A078EA0E324F483C19FFAF705F335DD83154001723800C02C191356EEF76A3CCBE4C280 - 93: B04DEEAF2DC0D8B8DA3072143DF30B34C9D1EE9577DB8373158635FB237FFF4592FDB806077515A4840DDFBB66B5FB35D39C37050D12266424DC026844D71EC5 - 94: 091E9BA94D89E345D9F8926E0E4CBADB82C806882E890E063416302557C8F369207C54ED126B0DB51E26BD3899BF30BD97C9CF084BAD61528FAC6B6C17D74248 - 95: 8206A463387A97C86428D5E1086BDEBDF42511C96A638774F1912E5A99CCBA7B608D9D19CCC4681EF71C240D386C548A813E19EE9DA490EBE44786B6DB82D3FA - 96: 8DA009E4241375DBBACD64E74BE81CBF235E3619E38DEC24A2E4034D0D9EB4C76D98FE42D86C263756CA5A69F5A9DC2CE4FF80AF3FC18002FF8ACA9709495BE6 - 97: FAD2A8DF8CFDEF27D5A9162DABFEB2D86C4FB131B4CE8DF68A6CC9696324AEA57166C1697709A887A563167C2F8849F863DDCCA1DD2D3667338DA623419659F6 - 98: 236C2B2D025E575AFBF6F2D673A24B1CA6142FF713D1D431E468BD6214903A61DB51EBBB8E8B391D3209971641BF95EEDE43017EC08FB3ED8FF22D3887B3E46E - 99: 450211747F0764B6397B42550E1ECA3F53B5492200A71824F00342992B0D0C442FBBA7809334D374B71865C50FAA88EDCA62556859D46CEF864F6BED51957CDC -100: 27EB6533169614C584E2E3DE9CBFC79CF15BDCA707047B384A9500B45BB57AB174DD281FAD1BA7DC443AF31950966BB6EC0F2E9C3DCD776542D8D37431A9FC25 -101: 7B82E014C77E70AE0DF12937FF7D05232ABD34CCD1AB0CF1C1615759AD5E39A7C7D16E28FF66F58A1435E625C348266CDE25D2C335878F520F418A5C53A6A1F9 -102: 8DB6E8AB8F5CB9C42AC26C8535328460A6BDABB71FC1FD7D118CF01ACB0AEDC8F05BF7E632A6A762F0D4235CC26C4CEAF6CB793E6C72D087F0F0F2B4B225E690 -103: 8C6090C3B367C96D6DDE67B095E68AE1DB5C62457BA329EEFB524F8FDBE34CA79A43E04102AF38B54A51371F0EDFABDC0CB7DCF130B65933F1B1A23CD2245A18 -104: A7E681ECD5B7867AE3B90EB429335FBBB268F991792B4CCE91A07ED6177663B48C1CA2F80E43B1E7E0742CFE0025AF943CD85D33BC274D3C161F35EF494751C1 -105: 80CD027C1585F1E82F2D56380F0EF8493DA992FF9D63807DFD40E84A6E11F0C5B318254147A167FA7E5B7AB08D2FE2C996538AA194807585CA1B69922AE54633 -106: 6DCCA71D44C9147E5D14133D2301F31341AA4A01FE3DA68B8D6FB187FDD26ADCCDF48D94C0DFF7D267F97F639CA0F374230D580CC0F5C76E873379A3E3FBFC2C -107: 545DE064AEAC1EC2F75913AE4D7FFBE333660998BA19349FF92DEA43145BAB8E9B8409760261CAF77DFF8833F17378F8FCF3D7F9A9E4ACA86F11318D8D356131 -108: C2AFC6DB39AACE8ECA2CF4E1F08C6F1FB461EF642122D1BE1657E705EA4DB003741010A63E56ACD19D06500E06821492EB9535B467935187C2F601F0A857A613 -109: 7510584A7B9FD16E6105D2C77EAD3764BF55C94AB4EF8F4A9A588ED936371F2C130CF07C5E41B49C6E3D901BEDC7852B18C4EC7DD66A8BC137C7234F23C9ECA9 -110: B8204085D0DE333D8FE9E2906F382CB69091FF8A69FC17B92434532E77EF37612745F34CBA999ACD2E8724564CEB13502AA41BFB6AAE40EE603D9005B0E69EC4 -111: DA69502BD06406F291993E2FC81D7C7A19AE08C09C0B4C36B9C1D18A0EAD0FF56BDD7FFB94D0198951123B7B6BCC89491B3FA7A8EC233A3138413847F0056CFD -112: 4CBFAA75B1D20FBD2E74BB7B35741F51B502BD3DAB4F0C03F5E3F77E0C5AAD08B8F8E588C03F857248C64C429B48C3422C09CFBE19F303615DFCC1FAEAED5073 -113: 37C078A54F6FF9EBBFF9B3FCB883568C572A51D337F2C0202EBE655873EA4723C25908C0251D099E94C908C81B28AD1334C83387660C6D648C51D1CDF735A13F -114: 1079232D07EA23E597685CE53432DA3C932DFB21465333DE345334DA7E8B54F86C7F9E16CB333462ABFDEF4B5E56830A05316139594D7CF5E69373D7E49CDC6B -115: B277265F479A61DED5BFBDCC633B5B9C447F8C798052873F2A4589455E808C719F0C66EF4BB75C703243BCCD207F4302D55F2A360649BBAD2A9072B0C7878508 -116: 095CB9AC025521426913744DECDDCF17AF6BEE718879DEFD76A09E4D45E9E1824B3389195622B6937BAF97A2D63E8F08399EF975D3C6DAFF530B78761ABBCE39 -117: D94A4C098A987D97E7C08272F817306CEDA8B298B4B7E19148DAF8510129E067029361F949F6F6D436A10821883AE0F8C36F0A6116A885CDD8AE4B41123CA2CF -118: 1184681C750097C873F153C8E584FB744F6820899145F84A974C8140CCB340AD859E35CBE94143C402825636D131A6E6D720700A5B9C5757B39561BCB21A5A02 -119: 9896240FF334DF91C4536C21536BDB02C2F8A2B9FEA2FAC42B640825680B48F14FCBAA0B6480D265D12BA48C8FAED2AD70632590273C089115B1C1AD13B0E714 -120: 35FCB6A0803BBD622CF4853EDA9113A2449957446BAA3B19F5F92C6531939723461B929F671BAB9C646C5A0D2EFF4F5E732B490EE93AD9612EDF2803E66206E9 -121: 5A6DADC89BFB3433067ECBE94F3BF890C7BE56F8D1CFC9780BB529950CEAE9C80534542F144AF5CDB5165C63877D1A11E44BFB58D652654CD9A92295B7F3B262 -122: FB8360E88EADA8063AAB19DBE9D765E77FED252478895FCD06A0690882E8F75D322A784069E72E4E33576E1990618FD57F843D6FFACE617C2157B7A2A2C2C588 -123: 1EA156BD37E0548FE4FDEE44177B985A95EF62D1EECBBC88970BAD8BE2545B430CDC0909B933DC1972DB5F5472DABA14D3706AD3EEA37392E5F07962BC690580 -124: E8325E07A1659177574DF9F339C892FB8A024AEE72A92CFC1E1B233FD0FC011DA501133DCFB60DA111F60392A718F1F6B7BFCB4326EB6ACED3146715ACB3D26B -125: B1AB1E735B2583FBAD7843746BBAEE18FEAE8F1A1DB6340505C5210B64F6002645DCCEF93206FC598DE5E718583792E5457602F66C89DBF2DF37D9A20303E3D4 -126: 085E1882F3F8C809CABAD6AE411B56D0A8374FAFD69EDA5C0862A29B3F68B429EE4CA8E1A4040E17BB991298CAFB35E9423EBA3E46896F71B783B03FA5DB696E -127: 72DC482B6D1056C3D0FB8A88FE11F78AB9EE0B3BE8F591C8DC028BE3D2479040C7C7B7B6B796F560C38B64F525E67BE11749616DCDD5BA6DD8D318B82B807702 -128: DF030A789B940A46C5012C4F9D4311306DFB491E03AB22200B527C7C08E6FDF19E0A3B0768D3AD88FC7A52743BEBDD11F908AB5588575728EC1D327BC5A46D16 -129: C3A1E3907D08846647017BFFFC3DB08C681B17F44840280B81FD019A1D69E10A15F29BB7B5A461E6D237ED82AFF663C99C3E1AD17F42F7FA47FD2D914FAB63CE -130: BC0B6C02C3F52061B6EBFAF861A44A54BABEF54586E7E4C615DA11CDC863D9035C6442E46F17B858E54A8BB5F058AF246E719640069A6F4FC28917564C2945E7 -131: 84ACBF5B76C5FEA12441C5876AC1DFC1FD3AAE8AA389F80F48C29CE10894BAB35D9CD65503B01B0776995E965C55087085A6447A84C11E72AEB2A7DA74D0C94C -132: 4C3471525A8A00D80920A532056AEEE4B7092E386ECF7F63E344CFD57BF503B5BD40127574D99BF0626BE70D804B5789C8DB4AF5D6A230B80722B223B3DB32CB -133: BF17BD18B094E873FBD12C5551776BE856064569C825796325EAFD632D3927EF76F821BCDCDB5EB3012104C50C159BB2BD9F4FA1FD02043FCA497EBC16678630 -134: 2A47837FB11A3391CE19228F885241B54E77DDF7DFF3AD2D2B28B47BBC62BC73B779C20CE3B1CEB2E7E84C89C45DEEA059E6F1B7EC0E3C485E780F6662C8A776 -135: 8C845FDA174804DFBEF245CA46080ECFCCAD86ADBAEE34CC5920595DF03A5446674FD68F063061B38F12F5E8973ED94DFC5365716F80F509D60E7CB73B8C7DC7 -136: 2B0287BEECCD67F8208819D1FF31790F977ADA20F0A44E33569EAAA7F3B9632B831A03F7CEBEE2F70C786A05858E9EB16582F433AEB5BA0D3F7B7FE7C0BFFAEC -137: 7F57F57AF9599B255C6267AA36816E9CEAD3475F4B4EB3FDB8CB3C6C17774D0680A7A86C4050A099E807350856C02C34CFB11192D84514B4D1BD561F4130B313 -138: AB68CAB015ABE87CA6663FF9E156ADC85A7253A580A3400919C8BB90E34AB5889E79862D0BE69BA96D19F889020F5EA13CD4F0588CA72ABC835BAFD17B31B51E -139: 8876487EE3A3488D6DE8DB0A3B6E9C0C1F198FB128A2220E34F1E4361B09014275FD305C82B954523C6BA1B3E78BD4B98EB4A7BA96E3C34343208CF45C73AB1E -140: 5223B0D40810BDD40E3E2276AAB198972B9889D568B8105B9425F1A03C17A256897D9B0A8CA91CBF9F053366B0B65C8FD2CCC5C814064FC86B91DD1E37B89A5B -141: F84BFFB815577CC1199C7CA8EB61D3D8002D69802AB6B59231B00E019120D60100B90C3549668478387EE95A3BA0AD9CC85641902C34D5337A2CFAC9DAB1A110 -142: 8277EEEECF21EB070645DB15BD25BACBAD09B6107D80E74A67C0ABFF6FCD4ED1358467AD9D7A7992CBD30734B649E0E3D7D2BF0DC3FBA015DE9F34E5A085AA28 -143: E6CC5EC2FA75DAE398E7E85C7A27FD72EDE236ACB9B8B867B4DF3ECE53A71542E4CD9E5CAF546367D7ECF95B52E859DD9DAF3F534127DBB7806ABF06E5048A03 -144: 71001C821050EF4C95777E50EB70A96D234F1478E82930BF7BDB1D07C9D151094AA17809822A9AECAEC75F9C818379E679C5D39E91FE59A6F71D6445E47A2BD2 -145: 21EA966DE7FBC39617C5D27F1774990019CF0A01D39D93FA80BBFF4AB8CFB7336DB120AECB6C13E336C941567BCB3788D060C478426AEF6D18DC08343AD96C2B -146: 4F5902C09B270FA0A893B673AC4B86E91B3993B49AD501086C882773E48574F273F15C0F05D5874ADE7B111B3E7437DB68A3B034418D89C3F2291FDB9E47D2D0 -147: 18FD9695CA58A5E1771515E91C4366AC4287DC73D42088C97538F133DD3DF6EDE3DD219E039C8F27B5E9C85BD4793D68464D7FFBDBF1E8D2F20ADD7CD8BFF05C -148: D0784891F7EF2C6DD1876920486D7A80166B1571CA9D88818AB68F4351515E5F617565BF70F8AE80004279FFE9F59F151E31238E6794C024A50AC266E58C4A95 -149: 87059A1110DBE07485AF2BABE71852D1AC0D5940E8D1865621AC55FBCAD3CAFF1288261C13107DE6A42625C4B85E34B190627A5A8DCE58ADE4D1352BFEA36107 -150: 0B40A3DA1FA647EF83C5626C04161BC0E84031C67610732BEE642A9B27DEDD86AB230160FC714FBCABD8263477CF366F416D5FE7C0F19E0FD0073CF0A99AC9FC -151: BA59E058344957F675CBBBC7ACF9F8457CDCB84A73B80113DBCE231C7A8D7DFC76D80AEBFE0EDFCE36206A066AD4810F6D7707C6E719A80D8E27638769B47EB8 -152: 6F6C174822763F828F0DF602BD36F2AFBB11D86BC00CBAF47BCAAF246A0D8B44BCBF1DA45B67329C4D2A76247653633B9F65E5F39204707641A29E32D7FE3CEB -153: 5414CC37C13615B85C69D018C858ACA6597AF81BF1FAC9D8B1F05DFCCFB1FA33E2CCDC1C78BDFCB9F47714162987D26BA950E731831F745604C4F9FA2B60678E -154: 091AEC2C431A8D8102D6EA1B72EFB493420710434662CC5FA44F86BD1A485F3B1D999243D377ECE19CD5D05CEE31A872B844C0A2F0AF6AEBE006E00595F7DDB2 -155: 1C8D069000BC6B8D14E24BA4AE89EC9E81EC0CC201D085A66899F642815485B457E95B598A4EB57D57352A29570E35704BECADA517C13E1594623ADF9DB0AF45 -156: D83B0225DA735E485E49E6A4B5E80A4894D91FD389F08C93AB0182B2886EB7FE5E2D28CB63C104297C58962768140D6770DFC9AA8471C4055FDABA7EEBA329E3 -157: 9702A929EDF57B705D97CF9C17B6A16CAC4573830333C863AD7616840355CE34E72E12E25D6E600E1BC25553AD994B8E0829B335063FD81F1C97A2DEB8A2C3BE -158: AA2B770285D79240EF45ACF15DAFB1885D00E087A23000193F87BA7A3A5DFE797CF3850E5416EF9C7236611C931B6B6523183C72E4A6A94017549C706BC3FD6F -159: 4FF8FFABC8B9485BC5A383BA5634AEE08E946D5226AB50ABCA8959228FA11449474FAB4EE0B4194F7300E922D4E80D47E19BE24363D15F5877E04419586177DF -160: 696EDBFC8FEFE5D8D659DC496E61303B2517E7DAD0B66B1310F775D679A6ADC3DBD52685FDA944680CB5116C723D2285DE7238049E9814CA4BFF5188E4511E1C -161: FBA5ECD5D339D8BE860A96FF544E5012BB6ED656CB5A21CEF010BF4074FC7714898974C09BC2014EE12FAFC3F13B43CD7B640A1DB55D6B420D74A069333F3253 -162: F4BAD9D831FA173DE5A508F92C553CF3BF41A345431FFF968F9A014FBA8B4E3CA146AA46A58084CDFCD96AED2ABC16AA5D62619437B220F18C30C80FFEFACED9 -163: FB8812861932A2602DE3FFD889E025542F5F8AA66ED4E818FA0D790AB5CDEAD06D7C3B74D6C73EF1B7D4A1D71405A34C1A20FAC4C2E60F6243EB391080DA8890 -164: A833CF5851F508B9ABD4211E700E5E2C00E6F92F7EDBBF991611F6F72B752C38E0A0BCBEB3D601B0BDC6B7A4E92180BB79429D01604A163DA22BE2598753594A -165: 7B5580E55BFD2AE2F7FBD2D4056DB373F174BEF341EB161C41C0275429F371F9123478310EAC47BB04B214B4AA384D6EC44C6E16296E32FEFCBA78459E56FDD3 -166: BD554F191E6F33CB671CCF0D82AE25BB3477E069D05C0C9E1BB0F1CA9B01C9C06FF351BBDC66A529939513AAC54D30ECD46F7797625DC047866B2EF1520EB672 -167: 02357DCCDFD28CB399A954BB0F347FE18E2B4BF782F95D718250D1DF82BB192AB12368379803D6BBBCE076F01A4E467ED7E1A49786E20225F6C910CD303D6DBA -168: 6687EB6C1F71004B35FB01771466E2B6D19BA7E2D407CB656F3F4D91EA6C636E2E8D8D73AEB312AAD575B62EDB48DE6D935A1990BCA2BAA2F739792BC073FDE9 -169: 0BD48B990F81A6D01E923EFFFAD942477EEE360ED4EED4F48546A11D64DFC0E364AA99720AD9683356E0BDAD39CD30DF76E82E7DB06C60C95BD9D985CEC45DE9 -170: 19A0A6C597A2DE5BA1C08F99B0966B7793C13CF817868B63ED760DBB87BFC632EF2C3F7A8B8047421BB004B82785AC6886478053BB84ED045A04CC901BC5B568 -171: D8148FD5C34A1CE096AE7A97CE1B32CAFF942DFEF7FAB11A0CB74D98C0ADECECB4B24BC6740CF263312D2087CE73CFCB4C2DB5BC98B0B39E85B4CE0325FA9DE9 -172: 17C23207863457959C4020808101696C8D31D326FE0288797555178CF122B954977E1E51A6C2C163F36097417E3CCCF7064A4375B7D4D20AB12A02EF50722826 -173: 8DCE74985D95D26F5DA00CDF0B9FEF60040B502E4C957D4141E052FF11B5CAFB626EA7777F468CBDAF9E89D5247974EF5B05F709628C31431276DD266254331D -174: 69302B58D6FD9D9396EA0CBE0BAED713FA7981C2D6F9808E48C47A1C69E13969144A24E60E31DC0DB7A3517952940CD433F7185B7CAE69623C060EAF14D023DA -175: 21D51B15CB882E231D0FC2708BD3B65386068D43AF3C4AFDBA6976E93B97AF67679B398C50911AA3E44D318CD6B751AF0E9F83DB3CC8315D4C37ACE6F27CA43F -176: FB661C097AF19A9C055FDCC733BC1A7025E58D4E6B2C40C0CA082CC4F4CF6D1480BE9A894E359AB2E59D4CE6504F36BDC7241172F21332FBDA4247996818FFCB -177: C9712F5D6DD2EF0A045F17FF0F3FA593C6F1402D94548D7B3D6A6A5A032A883EE679A76F48EE96A35805B5B1F7764636A3871EA2525E8CC583C279A2EFBE537E -178: 3C4A335AEDD7600A059ACDC54F1550E0027375CD4BE2A23DD67944B8FB42D3398CC62FA69D8CD819B0DA58187B3D37F9C109847555C7908C805C494B2CA0C039 -179: 609908DE5F23619DD964B16CA4081E41C230FC98C07DFA512C366EFD0B4F08AF9FC1759B97EA3AD8A1DB1561EEFB2A751E5C85D98293B46BEC7BE3E1C7F6E7D5 -180: 2033C645F0C71275676DA0A6C51710AA277984C0198A1CACC86FE860CB033B0E141C830D817A6A6B0793FE0396E1FD6FD6A825C27BBAA69B236FEE83ECB74F17 -181: 1EF9B3C072218E5C35B64390ABB6170CFAA061496F687970FB509F0177D8F627F2FC0E4BD7E4AE344ABF2E7EEEA99C3A10CA1EC0984E496D8562B89F899E4D67 -182: 1B0E7CA3173F92C51A2ABD627188BF1964704E3367625BF67226B6214F28840144737D6B6968C6099660202B41CB00A3E88F31A3CD0E26ECB6FA2454801F3987 -183: 3B3B27DDFFC62F190FA9E01364141F14B2E3D6C014066EDCEBC7B55B9329BCC4AE454308DA503C50EAAE95944852B8484E9BF4E6DCBABE45099C75544A592774 -184: 7B4C1BD0D7BC73905D7E65C106C8A2BD55E0CE394C9272C146AB5E6DE2809F710172DF4E48807E4106575972F111462F6CED50D40B1953A123DF0978E733DEB6 -185: 4126E9C90C7FB0D120B8435F3543BE54A8C695A3A8475B1C1A6C77C9A23AF96A3753ECE384A723252190EA554727202E50585D015E79B9BD0B9AF15554E99B05 -186: FAFD2229F3AAC0F007F6A6FD3C17FF98142A609E61BD5E9FADDABBF1EE7FCCD572A2D7D7C3E9454302776AA01E546E19286151626ED32621243B10A0EA1987DB -187: 5F0B1A2D04F0C1E8094B32BDD27B61D28E9EB6C76DCA7209FBB68AFBF6D5661F82BE3219D7FFB8DD7619E1A253A72581F2A1AAB38984CF02B9528C8023A5E7CD -188: 871323431BB630E7CA422C8B7E44C8E661DDF9C73B7EA0BDBFDFE4152C36F2C3FFC12B282229DCC2549854796E40860BD155D15C0409504C8EBDDC1CEDC1C5D1 -189: F34192F185C9D59B61E438498D2CD6EBD381B3C1114EBEC99657DF22186F8F9B4E38B794E1BB7C5029E04E091C23B27A5CB1C493E81E9CA6CA125263B9111A66 -190: 4A4293CA1692C58C0197598F379E2D87A569CEBA546FF386D652A0732991864FFD3F6B255EADA6839B2001D69D1BA45CE00BEDD8BC91761EEFA1FE09BAD07A18 -191: 912FE3ECA8F7123CDD471D409353D4234B9DE11BE0A78E18AE9440C6B2ABF44FCE4EEBD9B8F712A91DC5060AC1D8422B25297263A630500BB01220832AB4FD23 -192: 95236852BF49875F5F8E37F3758DE4100F9BA6F68C2DB91DC6CFAFA8360BA3E39AB5DA91E4CF3F23064C27CC514242C476C09FEC7E4A307E2544EEE6BB0A63EB -193: 342B38D11ABE4CC56394200381BB710E8B6D545D5142AF35654A4027D995A67873104EA9C68961BC53702D780C8195298CCC8B72B334C21400AF259D7362EC81 -194: E2451A27CB4F3DFBD51AAF55B12DA140CEB2E20712AB86E50CF6FE09C67F67F6290544C48F8459DFE80183308ED0EE7F55C14A7CBA686039BCF321C141F31F4A -195: 395716B95B536E49AB23E2224B371B28273D27B21AF49BAFB27BCCC205FE7DC106DE54DE17B6A7EE559D48986203A60F1DD8901D485B1B7A31AB3FF060891F63 -196: 9400A8B90CB4D8815F6FA26FFD3AEC8F573BDD2C3841F9A2F27D728947691CC2ADE3C8A4EBEACDBA9050060452346CAA59676CFD6D0991DBC809FDFA6FDC9C93 -197: B6E5143732F537E9468D49A8A0E1B8491AC9B841274EEED535E84E0A4E3A3DD2E128B854CC59043376F176EE8A943C0B945F307A55149430A8AE6B4DA9CC56A6 -198: 65CA7D957FC4E2D9E96ED84C7A211C5FDFBC14DA762A331F505095700A757A7E9C92155B38AC0132C29A62D5E51A6ADBE7C12D20EE5C97BDD0B1613E5DB6730B -199: 6B3F4B5A93381DE670732B27B93A553C14FB74C4DC70F2A0C3C5B90615DD83BD306BA8863B06AF2D2ED7A329BE40FDAD247A33B5241D9E69D228CD1A9DE84C1B -200: 8C839B3FA984F293184490F348E4499647A37DC6121EEBA60A7F0688EAD9B2581664DEC638C239A2A860A08B28C65C05029940474CB4384FF1A5D4B456D5ED46 -201: 8BD12ABF202FE0381F18FA28CA206C52D8A71A6BE5AE8917FC2CAE02468E3CB18BDFC80EB86D6A53E47FA339BEC354FC37EDCABBC34FBE10F74DCA13DCDD7928 -202: 5C2960A5CE0590AE444EB5D7AD7D1A42C45FD32AB9C8F5805E28CB6C31651E1BEABF13CA84531AD5BA76AC00E8107468A3DF1E2AB8535BB90C9BF31359AC396F -203: A164739C214850FC3660AB6D87EAC01F69EBA33C33DA32AF6AC7B1E2B5135AE04447042EA80B1C19F26019D4F72C165F75641D17CD2026098A32AD6C3CD46A0E -204: 43CF05C7D3B98CDA91C5D74BF9A1BFB469318A7485777EB150FE1A1E5312AB3763BAC65C919B76AEB9899D5DA5DC79261A60E08ADE39B3646BE12893AEDD5DD1 -205: 4254F748D81A40A043B6899CA54DA6E5C89B6EB9E77D3EC6C2564CC6A3398655A2339090786375906A7C47F0C2CF30D88974FE47451A3A6AF173DA6678D1C38B -206: 14DC7FD8A43EB6EA44785F00294484DB316C610C453298738C25C76695D6A29630BFE380264BA2AFB507316F0FBE26980D8688F7B46C720F12D8E060450B6F5A -207: FE90D8199EBE9E9E33EB71D0D21B8B327FFE681476E0DC93DC48B3C669628BDAC974CF7BB07B4F9647843E86ED89468B7D5E6180A1F146F7911153495E889E81 -208: EFCAF1A038BF926B2B4B54E03249F6C8BC69C1FFD07691EF5DFCE4917DD271ECE4E2FC36FACFB99A4FF51F1327269BA08457D5D02FAEB7AAAE32A5362D031196 -209: 6A9DA0311E3AE582908C30C08A04A0C54C897D83A4DA5A3AC790AE657992C6738DDF845EF37150028C31AF81297B8C3F0015141F649A869ED905BD08C7DA79AB -210: F50D8710CEE03C4CEC3E70A9C0CF9A99D6A77483C39B609C5A37D246A0F7966B8B588C959AF282211070251342551539FA3E377589BBCBDE4B16749C67C65D4A -211: 6623071D309C1299E464691C621483F56BDECE78109CE303C5CC7A1462770537DF22C714DD8F03EF737696FFC2719446AD8BC1201C783132B428DE6252AC94E4 -212: AC3E844C9BAD34A0D9154CAF87F15E8DD41FE46801BDAAB130B7766942F548F0EEE73509972C94646EC20C7B89BEBBDB9910842FC2B8851ACA5C0ADB7B42A985 -213: 1939A8D91FC8E8B410D02150E4F041CBB334C97430D989BB39DD84333BBD42D43D10618353A7988829DE692B8FF5480D944BB1C6FDBE0D598939A8AA14668CF6 -214: 3050F5CB008135E04DCCDC8CEA89C17DE5D35BC4E63FCAE8F213EACBF9A9C59B696FAD439AC1B349141EF2221C183D805E409D2C2DD8AB8921016D3F40A1EDB7 -215: 000F2048B7892915C4DCC0CF71D2EEA80623E560FEF5C718ED712854F55CC22713E0480448863ADC298269048752DF50E365C5889C5E5B0CB4F8E80FC5426007 -216: EDF592F5A10DA5EAC8F68FBDC44F52BB7DEA0B002CC7700EAF181420F83BD80A369B201FE5D0FE832D590889F2429CABB1B734E78104FA250A529B34F0060F4B -217: 980A02998CDC859786D637E7EB84E0DE7623FF2CEA54C6435F8B40A7106ABB9018E38D61B6F091782F616BA86B154E212371B8FE9982765A711B099010ACB278 -218: 6768DF470541CAA9CB8A249E0ED1CE25335D8D5899A19B8F753F40C0E9CA1E3BFB7BE6F256CEC73B57B1333C6D3D3F3882BF7506871A158E89C48E3D0C60C460 -219: F33096C9A4F0C1A01A3DD877A805AADDD3D7B047A74266F6A828FC65990D06583C03772E9252F84141FAC276E6DC9132EB9FE21143ED6F0825D3F833816EE54B -220: A84108D4244F3253EF2AB98F2CF090C9D7B2A931108E4AE3B36F6D77F401ED868C0D8D18F5D462A31BF54CA4DDE09878C48EA9069A0DA9362D6951411DE93DA0 -221: AD190F6486EC84AFE2A6BA3B7F7A62BCFCED1374230B60CD2CBA8F90D11136DCD3000A1BFB67761EBBC294E8943EB7654100443F1289555CEBAE43D7B8C0733A -222: 7ACCFFB674CAC806A4B6FD8ACD61887C40BA6933746ECECE7EA6D1866FC0EEB52F44A0FD8251FFFA2565BE194B8D3F9FBA8B1296C965E08E4BC5A1DADB6DB75D -223: FD39D4D8C51D506A5A0DCDAD8C442C3B11F0F8A04122AA1BA38AAD40F63D9156E3D9733728E0BE6289539D186FBC00E273CC52B3146AEA38D76CDB7D79605EC8 -224: 3AA776F365FE6AD31BB3420347CF22B2FE183E57DF1F7256425E66CB8416F5E53881FB43686F16BBA6210A2FF26AF5F5DFD41EBFC769D6857391B1CE8B9D96B1 -225: FA69B6064E2110243A491987EB563BFB2A9FE8805605ECACD7AF316C04EC08C019506737A0B44431E0B3B0AEACE918102957557E23C24210800DECD34FDE66CD -226: 3565EF87DF1A9F98FC3989F3E854964451B7A9948BB199C0792092CEAB2CB03496F9198C58931277FC888024BCACE495BC81E937CEA4A024085F7B221AFEAFA6 -227: 521371571706D6565CD0EC820A1FC7AFD3250AA6464CF2F8F8EE548E66837BDCA5BC83E527DD618BC37973952799B379A1FA33B9E50C0894AE3214AEFA92EEE6 -228: 9260F23CA0E7DA3D05A0CA9AD0353F0D19692139BCD6417ACD329438F1CF704DDFE774BB13FD9EBA89CC8CD0B71164CCCD372E4E26778C5C42CEC3B4F2A33303 -229: 7F8BE258CBD3923DF1D2A6B3BF2ECF5E0F98E898F1AA2DEFE51808C1C0E9BB1804EACE8054F2B79A9614F6F6459D3656CB9096B7F5F6CF5CCFBB6617B365142E -230: 5C12DEFF6AD8DAE4971053DDC883CA3F6603335305F46D7FBC3246A3447176D28E604D568C136CC5E88B9BA2C904DE9AAD6EF3AA9DC03F4FA2649D6A53F7D2D4 -231: C76D21FF6D0A0F12CDA3F1204F5A7C6790B14A10DBCB1838691B7FB896AC5F855574E4A128D2CB79BC6DAD9A05B6E07B76B47893BF6B9D9C93F55E77D5364DA7 -232: 18C90B19591F6774C2B3FEB37A4533BB1CB50594719A1B9104B8E5EF5A5B5489FB9359F2B4874ADFD818CA16FE02C63AD3D4BD82B027F90A03CB31B9C687E991 -233: 439199E26F4735E93546627A375D7883E64DED4F0C8FADF28C6BB45733D40AD36187FC71EAFDF88811E2959109EE6E9418681061E4F788D389AE34B9434C04BF -234: 643136B03F91D42CC0DA577CF4C825398071B8C3C6F5182867AA962BFF5161DA62A56C6B7CBA7CF28A176B73DD15527E19BF031DEFA6E4ED7BE59F186A9C7530 -235: 79E3F81400244F690545CB49B1231CBA0A1ADD51DDC24547E1E38D7E1D577F33281238D9695B4FADB7CD7DC01030A9B79FCC4ACAAB2463F645213F710B44F51A -236: 10004B87AB2D12B848D2C3732C82C31E2E06BB74E6178A387568CFCA087D17D31E503B75707D32F9F554D8F699095E8D5683F0E7FBF93AFBF82637A67CBC6CA8 -237: B5C4079F5CF1FE55ACC873318A94C7C11DB55E3649633373C7D454748F35B02D126ECCCEA8A72B9839C5037EE4A85A1668AED3A269573B464FDEC483EBFC18DB -238: 4D45D30B4A5A6E25A28B771740DE70364E276B77149CB270B190A90DCE88B3A3760340D633D3A08268CA12D74AB13D603BA3F38F25272898785C61C3B409E92D -239: 2639D08ADD18BDA01F0570312B63C9E5B5DDAA879A6200BF9BF9201ABC274DC0E7E29A33DF05BCD7EC6C6A64FA996447B611EAECCEDA96C0EA3D8947FD3192AF -240: 2A43B0F82ECF7556C9A35A5B94D6ACABB8854998D2C32DC4A260F5CE7EC9281EB7E7FBEA71911C0D8CBF898E5BD33CB05CB409A6DD9B382F9B2AFEB6A4C70BB9 -241: 26F8005ABCB267F7EDF7F0E9E2260E152D9FEA2AD872A994E3CD5A2C23C50C5618FD9BFF93480F6F969D77728BE0A487DAEFEBB07B78DD6BF9848E4B2DDD4497 -242: 504FE3A906AC73859AC5959A37A20A5BC75AF0640720309DCBE9670850512391E65F0462E6C3B983FE6DDB638873683718E7F252CB625D0C87CB4958703A6C18 -243: 9ED19E92E1B50350615FAF42F4582FB225DFEA785467AE1459BE03C29FB2B388DEFC7009694C71F69541B212D46FE0CA897A7333F2A08E1E364C2948C3EB1E96 -244: A0E6A4B19D6AA7E6B1EB0385206FC28657E70408A66AF889CCA76F80DE1253E7375172ED04E044C6F05037000EE6BAC093DA0F5369D44F069524626A01477F59 -245: 9971850185972EB364BE72B8FB7F8E256FF2BB93FE0945C2E138E3DDB0B6118B499A6CE609C34F8763BE7B37580CC73267768492B502D534F82045F2EB5EB0B3 -246: 7981A7E6BDB3F312D03DEEE4AF8658ADB328A534FB9A59421BD602163F111A4E13C56B3E82CC92F73F2C6D53389D50895AB77DED48DB39BA7745495EF3FF5632 -247: A6CD201D504D201DD2110AE74BCDD5EB7370B6A9C5219DCADF927A32CFA39C2447B2E015D5028C1FD5461ED4E4DFF297E669720B2B6BEBE517CBC95CDDEE1943 -248: 382BC0EF3CC3264E23532E84DF48BEAE86F6F1F2EC9A81DF63580BF9FAA4B1F0F42D2B92E84FD3F2A8B271EC33673195A1818933F5AF000E6D107D1FA00E2390 -249: 0D06A6D2FD7B7F9370FE19F5ECACA31FF5F996582DE01F281CE5779CD20E07E42A98005DCC80CD2EA0B578EE9B981D9CB4537954FDEAB8B189079F6F7519B96A -250: 8160ED5DEFB9DC785BD94F54A81B3A12D663049BA8B422F5952A7EAA729B793CEFBD811CB0DB77FB509F513D1E289CC7FD6CDF1F16C0B66006B6BEEF68B76761 -251: CD5E1A2793391CEC09A5E6797F234C5D95ECD2F2324DB34C404D8BEC774E0D7FE98E28B9C4C9E8B09035E261306C88821E2A6A1C8C443CC2409CA555A822E3D7 -252: 60E1FAC57FADC5CB8148895B783A250E43A4E67C29E44C12017246CCB66B74B91B38E59DE61688B32A4BA66788FF9CB3F690D40AFC8B39929BE153DF53602544 -253: 6003662F107D645D78F09CCBB56C2E01B5638DDB2774A0DF5E80B2E7FE1174C14A0CFDCE1D8410EEFCCEE08B0F6F49D459F663B423D686C765DDB46902463167 -254: 3F9670798614BC57659378299BFD9914B39A5344B74DF72D3B1D947DAE54EF2FBEE4EFC24378C1B8F80FF3079172DE50E7B0854363AC480C4A9C5A32105452F5 -255: C51E1AA0F18C79EBD023366BCBC61EA9AD982F79328DA81115F05C1AE72C83C728264AB192EBF198BA78EC7461C5C2A3889F79BA31CFC70A0B24B5B7F0D39EDA -256: 059A45507DC68B876097E73FE9C48006DEF093385D6392C8AC84B2DE0C310C31C2B1E4D6D468C5C268032C86E0934A663040C5D4CE26BCD3BBC731DDB31487AD -257: B47C4D9A5F60C1541C5D9B93B85C7E677B21AB71AE2B1B6FF9CA4552A1C85483B8B87DFE3BCB29FBA6757E56F4B1F4FF19FD3EA7E5BBA10635E9AAAC251B5525 -258: 7CB862871CDDADC64C4466B9DE1BA21BF22D3544F63A38EE93CB21C09026821BD56291E3AB8B5585BB64DA72BCA6FA17095D798A218409F1EA6AB071AFC01CB5 -259: A98489907D9C255DFCD89F1A06A9689B7994F6CC64EB5D409B78C67A11516CD36B3BD5F88D590E5487D513C36C82DAF7680C22B9F987332A5E93F7B89103F863 -260: A8112B9A50FA12B63E1C3F816043FD0BB174E50BF8DBD4C4572429D130139C55DD4FAC25FEF1C691710367029931FCCCE64E431C6498E55B460D0CD6143AA92D -261: 5AA815F936135DF6ED3A265CAD507BA7A1A72D3BEB6502463877EDCA967CD37F501476B60166755AF332C6716A67780EBECFD5E610AE7622B3589026ADAF9744 -262: AC5634A129D1D8C14C7B2FA5C58A0AABD364644DB748DBDE683026FAC2020100F8D4AD245EE34FFE402B6A14676FC0E1B9BC0676FA167CF7652C4DBA8168F2C2 -263: 66823EC55F6E2BF8BBF2E9392D061FB0CC913F3F656FE9B3DB15307980315F298DA27FF01B4735DCD13306C1585F2E9E3C7466D3AD188ED6DBD92CD24525F59E -264: 669200FD8E8FB782D7C9C85637FA60816FA94ACAD7DDCDC0C9338A6DCD8A4FEF83822F664172FEBEB6F5FCA5B886DE1905F9CFCC0FA946666F894179BF128441 -265: 6C0767BB8CA5ECA5F0CECEE4BFAAAF20E0542198D80B8C3B810215C34E1804EBACA59CF58170AD1639A0379E28B30F322718E2A6A0E761679F035186E31B39D4 -266: 21733B076C3C719CA9EC59A8FD9692CB272FDB4FCCDCCC2E079E32AC2E0B39F1F607F256B465247C3183F0170028657E9BE78687090F9C9F900F507C1226FB3B -267: F27842F7148F4496253204A4EDCBF0C31C0B2CB0F3B04C4EF0594D00BA1703D3B603E5F747EADCD5FF6F91FAA45FE0FD662504FEDAE35B1EEB60F015780F8BFF -268: B8B6DCC030166DD5F53D15A11CE4BA5CC27C13604E170F3B6E18DED03407D949E78BC8E680779B559FB9382F431BA8F0AFAC0F721B14077BD0CC96AE1F89EE0C -269: AD2D68AA2EBB7BA238BB977623B28E8B2FB31C9B43593EC319A777EB6276AF897F4419047956852183E14AE937AB38C2B5D4630ED84604FECFBC5B651412F8A5 -270: 25C11EE3C28009C1B689BD76777B45EA42079AC3478F35771B0BF94168F48E79CB0F72BCEA3983300EF915BC7DDEBC4825DF99FA9548D76C9552FF9A16DBF39F -271: FCDF344E680A37024948889221E41E1FF07EB9D693C66310C55BCB42E425D0BEC9FFD058CB5D0B4AB799BEED070E4F1E4C90EDEEBDDF8DDE71F50A985203120F -272: 11A1F599B6EE86F4CB79F897D6ECF013607B79806EDC4A9AD9E5237574EDBBD6C4E1705703AC0BAC2D78D74D6F8A757A7816A1944C7E58F2D2B1771B70F485F6 - -HMAC-sha512-256 - 0: 62D06962DD2C4114A07D0B1EF16DF27CC5F2D9C80FC246E8A9EF7B9B7C59AACC - 1: D5CFF98822CDDD2E92B6D0F71C612502A3DF7E3FF8790CE9C8BBFCCE717C4C9D - 2: CFAF93B7AB7525F116A0D130C9B19CE0032F8BFAC2FE49CF093C911AA5961A59 - 3: C95F7A592F833DF1E12A7A418AAE9740A55EE7991AB3D684B3F12732CA95D045 - 4: 4B0B3D921555F7DC2768F6AE7BB9EDC0E0C7F96926E282245BC46955DE8DBBF1 - 5: EE50DCC0EFE8B7D6E56747A7D38BF3F17FCF13C43995B003FFFD3B44AC6B5A7A - 6: 724F97FF36BC550BAF236C85F5E955ADAD4DA34EC7BCF5A2218D4BAE6DB970C7 - 7: DD6C61DEC4A5D57F67BF8A3937605E2B495D5AB730B461BC2CA9923EA98192EE - 8: F4344FC58C223BDFB4D7ABBBB22184B3838A00AA9F32B73034EB6D0B92B36DBC - 9: 2ACDC752DD983717AB43916E08DE084AC7C76FAA12F492955829267B5B364B8D - 10: D1941B1C3C82DAA71372B920C130C567F71EA2C7B74FFD147D9D47A6AA0DFE05 - 11: 7EAC8D2402006AC547DF468CACE2A0958BC1C6AF4FACCAB833E6ECEE4D9F7D42 - 12: 155CA430670C06DBA5D435030E0AEE85A334837CC1C283E00407CCB58C175C45 - 13: A1319AC88783DEAA14A49A4FEB9AE8A67141B1009E2CE03CFD4E74B6D05353FE - 14: 5166B9CA51BEB6D6F34C8149426538B1A4F67467C9BF48033E0CF0227767DCB0 - 15: 9B135D0A184BD1FAE7432F5DC5622FE8AE4C2346B5B7CCE49BF6A1040F39623C - 16: 4FDEE5ED2D03A4CBFE861D22036301E93C0418C56D40CA3B965E55B73B8E18DA - 17: 2B3AC5E1ED76494EFF814680BBEB4D9A9F4EC5D0CA7456F2D5FAD0585AD90ABA - 18: 4D37D3509A392000235D550A8419D0A6EFAEFD0EA63957FBF4FE40A2EFB5A763 - 19: BE6E4FEC5AC49092A42E868DCF26324BE91E3986C184BCBED4DA7CE7EDC97F22 - 20: 01E8CE2DE5E2FA9466F61673023A4C975914A10587BB81219F8D7FB304E9BACE - 21: F5964929973A3F8A160939D18387191D06CB63C077342CA3B1AF4DD28D956B7A - 22: 833BB2EC2996850A1A31BEBE5299F4C3B1F6D02A2A3A211F9FB24C1D41ADE3F8 - 23: D3730A1546F9B49995DC70CE5D855A1AF7DCF18CAC51765C3BEB8839D72A66DF - 24: 8D45D51CEFABF7617592B008F37A37BE2448446418721EE175044D965043C730 - 25: E67DA5D21A665C76232EA4EFC75DBCF3F50101B1244141DD56D739114B4BB6C5 - 26: C47D610C3CE0FDF34CB0DFF91FFAC8ABCD865B4E9606DA4B3E4568B615889975 - 27: 698CD86CCC14863A46EC599C070160C18F7368A9EF6430DE39597C554885D961 - 28: 942187A9236DFB636ECFFE0F9FF766962C81209CC3F3379ADA75D1C2357AF368 - 29: 5F3258F6E99F02322BF9C2E3AA04334F282A57F02D73E86E372D6C3EDD954E51 - 30: 19F4AF814C178BD81A515F0277E06DC028F791E7F6D0427EED563DD7FC35041D - 31: 60AAFF144C8DC8E9768A35EC713DC4F3146F322F66E29C5090AFD8441BD68476 - 32: E3A9AF6573D66861012B6DCB257F5DF8FD4ABBA279AB07ED2E021FE066F09F47 - 33: 711AA63ACBC51025CBE3ADEA8E3D68B95DD73D74E292CC57F62FE9FEF4D8C4F4 - 34: F3EB05A23BF0FA9D13913C033610BE9C7C7769FEFF271B5FA2850986FF75A40A - 35: FD9E5DD2C9E0102EB8A51E1306B3470CB67B6832C711A63156A63D82888B32BD - 36: EA7213FEACA19B5EEE7BBFBA7EEBA25E130222328CC21EF270F80D7DB942BCA2 - 37: 30D371E80BAEC1402B932E3856C15EB2E9F31C8A1D6B5A6E90EBB83AD57B7825 - 38: E8EDB9CD99D83B841C4DB9D0030BA4A4D9B5EEF2783F476316F0E641C4FFB04F - 39: 74D250A28418972D22B70DD6AA2B76DB45E29FEA64FE0B8A7129D54975ECB755 - 40: 51E3A878516AB35205E0D07E4D3932A1EDA5DFC4BC7570CE2060E72DB26AF119 - 41: C34B6F11F7BA6EC028833FDF934ABE864D1C8BD159C0D30C9E6FE12DF73522BB - 42: E59CFBABB73AC08DF99A7A2D79817B85BB0F2AA0E27527BBA4B63FB3A4F1343E - 43: EF7DAA4BDB64EDA5A5281658DFE834253F045C9594F9B488D982C031E68B9BA8 - 44: 1CE7C3AF27EB4453B4DAD5DE87520F0FB83EDFBD07EB82F2C923F22CA94E2D7B - 45: 905E951CC4D99611B6B9EB871FEC52E67B75BB37B3EAB72D0ED313D2298BBFE7 - 46: 762E0642564E2AADED03C6F9D11C375BBA7F483E88031242C1B9C9D05A4070FA - 47: A6EB16F4CC40698FCBA75C296A4B065728B156128B87DBE1AF318148FA6DF659 - 48: 0541B930547BD029B1134F95C7EC45FE3203495D0F4F4DD079D505F3FF1144E5 - 49: 84CC81D678843782D9AC7B1E04012502F9E40BFC42F4CAAB26FE078BAAEF323F - 50: 6319DB86D3DBAC66015D9446BAFA42F212EE88BEC3C4569FC871B16DD92ADE8E - 51: D7130A64E78D8FD210FD26AEE52D1E45F81440A2D7D264CF94E8136F349EA535 - 52: 9927214BB0CC3E83203395F3130AE2249F0EFED925AEA84BC38D67E768B4CEF9 - 53: 261E626722A5F3C64BB8761FA0EFC445FE718A58F4939C459D234021EB18F90A - 54: F5507EF69EC2DE971E14B2B730BAEE32FE34B96B526B9A20829C04B693CD35DD - 55: AAD06972EB603D7767EB9820BED94D13B88CA4E42DB448B410C84FF7FC94C3B5 - 56: D905F27415F62D83C9F6F260C60498A7C43610EC85503AF4667B8C21BC0C97ED - 57: 570281833310E1759DC98388BDF344F1CD71E7DC943580BCEC1EB788F126685F - 58: C279A6821C57EE9E9422CEEEF8940E1DA455D6AAE3ED8FD1AB634F517B2EF480 - 59: E91F2D38B1DA92A76E067DBFCE038EE74CD0E81C0F31E2C3CB473784305A9381 - 60: 50650CFBEE6D4D0F6657B8D064434FE6A629D64AB2D763BA4D4DA19CB65220B2 - 61: 8416B58785C68C7422935EFC970EC08091A8351A33EFF6F59EBAD35FAAD81122 - 62: D4740FEE1536246927B7FDC146AE453C20BBED8B08FDE899F1FDAAF02F5A1270 - 63: 375ACD1D1B00C50EAF0CA05DF92C111DABA5853450441C57D6F639A31D8F99F0 - 64: C143C3F81C9824880C2F0291B15F6A58103B391328D53F88DFC8A0E73F55A820 - 65: 8F418A5DCC1D51D2B5451E11D187060E65FA71455AD967ADCCEA266CC0D94C9F - 66: 09BAD687ED53A5642B29E580B8487AF0C976AFD2567056961A76A3199D05CE0B - 67: 2B0066FE122FF187FF7AC64299EE457CE53BBB52B9D0C572564F989220CFE904 - 68: EA5D252BD1BCD007440D51052C0BA8092ABF6046AF8C96ABA25C21B9F9C32FF0 - 69: 1D7FD07AA53F2E3C6907026CECF5A9574978C3968DD7E926826D8C899556E85C - 70: 2EA43F94BB6924C3931B2CEF0090C8FB3053E1B29302CD16AD9AD766354798FA - 71: D0917C2E81945607C65E049EA71D36A9B42FFDD7CC93ABDCC826EB454847B8C7 - 72: 3575BA4282ECD011D18979AE1FA0AEEA5F72008428CCACF69855402BFFB95639 - 73: 631ECE31A53741DE4A227583888A1970631E100E9BDAEC7A7A1C804225AACA16 - 74: 6265F73189AA56468FE4DBA9BDFE4DC099720F2264CF1B5CB2FD364F433F782C - 75: 19DD20D128FB5018E5C7F31C73FBF11DC64892ABF872EA0D9CFCD7A9712DF9BD - 76: 4CEC1A3D891422F40B76748AC3D5790ABD3CEC9FC51152F2E26C4BEE4A139300 - 77: C16832D1D80B9397613B54B422A1487E9771A98D99FEBB4D475026C4D4242BF4 - 78: 837072B871964FF66990EF5C933D233EA35CDB5E9C09893DE179BECC96FA2805 - 79: C0366D34EE34FBBC6B026661F60786C9146EC538CC91CB2A49DC334E467C0095 - 80: 95115429B0A8DB0C48072D4322FC02AB8251CA18F19C5AB6605E53FFBF35749F - 81: 1D64BF116FA874D17090FF12AD1C1B1FC3AB084A285602AD29962B4AC85EE0F7 - 82: 87D2628E605BF73210CEEC796EAA7333B0B24A41F014B70111B5FBD1991DCFD6 - 83: B8B7B0B1A8EE5B516F851A9B43FCE17BB830811D063D6752BB291D367F7428B2 - 84: 1DA0BD60DFA12621C8447B7B19552C6B87BF22C3B748CCC2354C29E5B2D265BA - 85: C297A0F40E8A4AF8DB006CD7E862017322CD39C1A2B0EF10F99F1B5660AEEC30 - 86: F50D782C19A217720EE223D3DADBB6843BEAB1ED5468D2A958C38713ABAB9A42 - 87: DFC5D6B5138917A3AA5B088E348D0420AACD1CEE9A43850F23766106006827E4 - 88: 5F45DCA7854D4EBD2FC11A82BB8C47FDD920E0F20842027CB8F145800275B60F - 89: 86CA61CA3FD5334623FC01D8DFDC94E41D6FEBE1A06EA6D08783AE9BC7C7F821 - 90: 30664B052BC7367F4ADBDAAB52341B71CC906DF45A61CFEC79D763C739E899D4 - 91: F789B39DFFFB627D25FF42A04AF26EA96D9288026F7950171ED75160D764744D - 92: 619E52054C59FCE2B032D61FFB8F70958A438E89EB59F568E259371D69C4F854 - 93: 5BEA7D888A08712C314E584A3C3B20165D67512A47E2FED3240208ADB11FBFA7 - 94: DC4678EB90EB26C435D1989D1D38619266DA3B8E8D4B1EB7EFFECBE3AB96D0C8 - 95: 050A9C3D445E040BAF5E0EDEFD4DF5F4113201E98F38C87AE922B910BBB67A5A - 96: 595B24A9A01E2D9EC587B3947366AA6E86191735A96B3B888310D74C06B07B6D - 97: 9FA11A915581FCC02394E1467B98D587891E2472431ECBB849158DAF7D15B85E - 98: B53026FB6233B0C18B8BD3AA2F7A6DFCE0E2648A7B883E25EC3725D6AE39C9F3 - 99: F747B648165C851B200962FD189CDCDBB9192CB897826B28C67292A39D7DED1F -100: 01192493F79FD2C509E21F8BB1572CCD9B12CA0868CE8DD5C2E6E6BF1A380D35 -101: FC152F8A4273AF47AC10906C4C89A7C1272241BDC0F5135BE8BE3C84CA050D2D -102: 5827B96117C981BCDC8E25AE0434B9924E5DA32B1953A5379D08686DE5B1435C -103: 80A8B745779BB0E9760E524D7184ED2007C849CAF124F7502779F81C473066FC -104: 75B6DAA37B64913714AA35769D7680CA70BD0553B329626A28102E78C4FFB44E -105: A56908C0AF0567D7BF2CB7F8C9F0F4E404F978B073BFC053D76A588ED45F60D3 -106: 27CC97CC666301E50887FC3ABA3695FE13C7EFE865753194301AFC42EB19B4BC -107: B41FF0483DADF4D5E08D46A3556C9A49F961AF83EB28A90A9D5B0F1C9C8EBEB5 -108: D90489ED5C6EE39911739EA5D996002F8B0DD032C8055B0C2138266253947991 -109: D0BA2D613005FA04A6D6644A16401A4899C7A294807FF1A0CBD9656694D4D20A -110: 16F6FC4FA936ACD8A229E402F026D2D09A3FB9F1F27691E600922324209FA122 -111: CC13CBC8627968D28C96A963252F4829E1D907CC2DDD6333D669AAE391EC6139 -112: D3534E8A1FC18B0CA58B46096D1C131FCD2996EFAA2E5747C1B0FE9A5930D888 -113: 753D70B35D6C7BC01A3DD3B0BCF982583BFEA16027BA4A253B1B50657EFBF641 -114: 925CAA043690E3940F04A3519C15D85C411DBA3E44CB1EEDC39E3ED1404608BD -115: 46557CD8F58B89363413583BEE5C0A4F4F31B441AB29EFF3DD626BF89AEFFD64 -116: A6609BDEDDD1C85887935332428F0C5946614DE71C045D728766779A3E1112F6 -117: 80D0F9D2C252750AAF9DF0F52BEAF3B0D19B14019DB0AEDEABB5FAAB1B663F42 -118: 9BF5C904C30831F6817B07AFFFEC8DA539A332692E0FC66E3E9452EAA926C63D -119: 889EA18D6681B77F7DD7242983CE546B3AC7DDD05C416D28AAAF3418DB5818A7 -120: EAC6ED423CB979D5D98FD9DB50552DF09AB1EF269D9ABF5B02A2769143148A43 -121: F25134457768D42CB631BE8965ACC3EB1AC21AFF354BD35C2B814D060B1A220F -122: 9E22D3BE6959123CE7DA07B66075F81ECF67D551143C1ED3101E1F12870B8855 -123: 00DF80AB54D23502D1BB02819D08C83DDAEB13BC13E9601BE5D012AA9BC4D657 -124: 3FE7390736A6B78870C581DA3C14ADFC27C73CE4E8CA06935B0BCD9D8E6659BD -125: D3E3877AE4D5866DAAA09AEC36CFA21B5314E7032D38D5FC94D84AD90C0D223B -126: 24E2A8BFEBF80BF94073537F686DF034F8A10566847A5B0086F8B76E414F9086 -127: 8DC9FC9060E27D4EF5456A08F86AB81D3BB98136A0AC4105991E2B1F71D889FE -128: B875753B5076ED9DEB7525581AC282F7348B5A63411E880518138567F506DE43 -129: 981AAF85A335E206350D1A4D15DAA926DE7D0AEE9F1F5BA79015D511644B0F0C -130: 6598102C7DA37CF6B7334B00CD906A222C7563580ED3D3B39F9F11D0B0AF0301 -131: 3479EF6A54DE9370A0A1BA3F8BAA1454FC9FA862CE9FFB4F79F8187F2125BE27 -132: 878217BFBC9338C6502FBDA1C923DF806D052DFB9DA271790A9A1B85B39F5EAD -133: 60733D591BF2A04D669068D04461759EA90A0FA68A0EC82265D64744508DA56E -134: C11ACD60E124C3BD50243ABE6D4768D742D29F9415C3AD90A3AD9DD903E86F0D -135: 67F415C2F36F67E99D0EDDAD87496672699EEBC7EBEBAFE89E9D47EEBBC80574 -136: D95CBD9586DBF532A636E4FCFC0DEC46CB670F199198AAF4BE6788D5F7FB9D12 -137: 19C034F7B948C723D1DDD04A5A77E1F9D6F85CD4DADC2D07D7BFD48BB39405F9 -138: 45020399009DE79A761BCBECB0F7347C5EE794DF231D63C132969F90AE9AB8E1 -139: 0EE2789FBE5A12E370F1393624252E8C0FB51C65C5067B8A8844D51837FA39DF -140: 7E0290CF18B4BDE787EA81CCD101D483F3CB1F2A6380FFCB32E062853467DC81 -141: 09B1A981FF43B2D4B5FDB193CB222D8C4E8C5C66AD1E5D3C21D436BE50C8D9C0 -142: FD24C2C0B6278DA18D09DB33B4ABEFC118761998394DFCB8C4D0E006B0ABAA1B -143: A441E7AC72C25365366C324B457E1D6AB791B4CE8880D25790A22A6B6C2969EB -144: 53DCF635B001F853E4830C0B6D6B7AA925BD5F14F838637DDA3A4EE718C059EB -145: D1038CE5E372A6D0D95E486C80364DC8EC540717C59E2140590E4B502D17EA15 -146: 7F4DD9F3EC6AE4DEC08681377D3AC840B0099D25C2626719D7223698BAA262D9 -147: B495BE63F7FA74F93C34CF159F5A6623876299FA622BDA58439D78F7DC972C46 -148: B218ABCB244F2FA345D394C0D3BA9EAF2F83FCE79B461C6A30C308341D5AED60 -149: 2899CAEEBADACDABEB171C3D9B9A070BC42B1D17C7F941BDA9E846F90C3C0BD0 -150: 3E64F541FC5A7EBFA2EFBDD96C6EF665983821444BBB2EB79FA0BB5B76C51A02 -151: ABE8E109AA5F1E401273D85A355B8168442FF8629C3E41E706FFE430CCB87275 -152: 2DD4680471AFFFF9B78807DDB04E055A1F7EB48948C269DE7D81B2BA9CA07C27 -153: 8BB77361122763D51C586DAC6106F2989E74B7F85AD70DB463BB10EE910E6522 -154: 11B701F336BBF2B08F9A7BE583FBDAADA074EF0CE3A547BC2E87970C9FB0D59E -155: 6054881D240814B10B89DACF686B25F6785B1A235209B2D3FFFAE1D4752746F2 -156: B4ADC9DB316A5B4E35D856DA551D1AA6B25E6FE40D77E636975E51005E460998 -157: 5432D73961F4A5AD1899267EB5DE9F2D032970AADA38968210AA8905B5A95E37 -158: 5368C8DAC0C3E84D3109E0B0E5CF5C53C17015310FF59282925487493399536B -159: E632C4E53E53222091D88E2DEC84B2C0EE356A5947AB2508258AEAE4B4FA4206 -160: 656171B95B0DB501E91A175C51BC974F1470AA1042F4576FF58545A50E91AA16 -161: C432FCB7B414B23B569496EFEB7C6FB995F15D9119FBEFD705C91D1D8D08002B -162: 022B5C7DEF3834AB569EF6F8C1DA7E58F49F2F30D045FFF569E4ECD52330FC63 -163: D028B5CBE31CE3D25D12806584E350B73D6D81B823D7D3472A7E7F3FA54FF0E8 -164: F4AC80D5B3DE0EAC631E596E03F7C20A56A23524A5FD85E0F70DD3D6CCB9B0F8 -165: 10747FD771470FA9FD57B9CB43B3EDB8D12C3CBA06F85305939953A7E2715D15 -166: D08EA8C5743A86287A3DD2C81340D38028F0CF2A51E3F1A0458BEC6AABBE291D -167: 7465B5B805CFAA8C948D5812E00F6486C0D186E131250B00834688150FE3107A -168: 92D7513E2A74050A33E46FDCB7D070ABC87D3A586B7A4621DAA71F5BF7E4E11E -169: 6431A79635A219DF89E6C3B5A6012FDCDAAF87E7A3590DB10CB8031FE2C6A005 -170: 0BE055F4704ACC45F2F215930A107187D1DC9C1562B0FFF5139E2B7E321AE97E -171: B2AE10C38C34C3FC2C89B599CD528EEB12B237E3AD2DC577A4BFE6033C8F9528 -172: A32466E6273476A64B0734E439D3FAA4D8F38D3CFC6252E44551DBC5B3B810D8 -173: 9B7E21B4021C97D05FBB65E5FA90A181D4B6EAFA49704855360C02F6C09C5A78 -174: D829ECE0A8F238D772CE5BF5871A2197843F315B16ED2D1EB37DCA96EA013703 -175: 023167EB4223BC883E7D8C7C38ADE42AF3821FB7E371A25455F497C7E127622C -176: 753F711CF07F275DC3E1A23E9630B81FDC068532085C5838A10C46CB34926FBF -177: D0AED3F462D1CAA85CC02F8A6B3A2EA636609BFC628420725C7441614F7EDAC6 -178: 3F4417BFB429566969030D1AA978CCC330E5023655902002D6C4AFADA4099348 -179: A98928F7845882D43142E88E87240D9EE137DAE61B98C5D39B789AD8590E114D -180: 6306DA7B223D3898AD01DCE8E637B1F2DD13AF50241471A216D1BB0BEA5A54FC -181: B2DAE5E3A185150A2B80CD23B8FFFE9AFF074F17E6192E1C24DEBB4518508C4C -182: 1223D7B034597FD7EBE35AB15157762CA92415281094DA7E145C2DA04B08427F -183: D663AC54B4330826E172AA7081271388071B5FBEB252D7506EB4678D54854A54 -184: 3E0802B55C89390B80CB8BD49F35507234F3223D7B21BC31C7A2A9CB699038BF -185: DD4A8FBAC932E409A61F3970B425CABA4A08B4901B1FF8AF78AB63473B12A4F8 -186: CAF1FD8E9C4ECEF6D12D3133C4CB99AA939547217808119BD5471C7E30336618 -187: 40050745910EFE4809D40652FF752EAAE800A271D6C4CAFB375C7F060E9107E9 -188: FE6A5F4AFEE97491B231AF7BDA8EE79FB9FD6F42154613700EBF58F1BFB7DBE8 -189: BBFCF14DA0B02C4BBCF087BA314A69A5CCB01EB6A926816191067532BC003593 -190: 1EA4A74EE88FB70537AA17ECCCC968FFE276FA48D3D852A8063B1D75369EBFC8 -191: 9BD73C3279E7047B8D392527C393F53A75D5F037D3E2D725471735215DF39621 -192: 89B90929270CD6D9AC58779CA9D955EECE0D251E02FECA2067652D31098E92DC -193: B9C571C728CDD03D17119788E1B7073B1148237839E5E8756FDB85E3A1D85E53 -194: E6583FE8ED9C4A6063FC7BB08836736F1294BBA9696FE18770C5A01CDF9E24EB -195: BE93441336B80550495326F81CBF037860ADD5D9C28EA4E05F46030EC10082AA -196: F9459FFB122EA907D7F39253B3B7E06A37045C32F33F751D60DF5842730100BB -197: 63277D26B37209609627198B131BE3382C8DCEAFBC65C2697FDA17C1F3A18D9E -198: DAB9A0AD0B85A48DD50883E5B23C01F1EAE1768D2D1ACE9F2D8020C79E716E96 -199: EA9BD268257F630C1A31ACE736279066B0D1D680EE5C7D4CC6DCF91D9210E501 -200: 17B7A3E7CCC6478DAAE7837C4E18685AACC5702FCFC7F926D0685EF52A083E46 -201: 19126EAF099A9C27B5683CC0C4939B469AAD0706D14E23FCB613E0CC8AF923B0 -202: 3FE1B40BF38C37810110A5AF99A719479825CC08B672AE3146CE61D1985AE248 -203: E08DE3A1463963E314BD7A1772FAFDF45A36062CF14B20A31F1F36DDB5A78CA8 -204: 78647D2B2E362F1200407AF2E5831BF41F09929E4ED66A17BCDB5D7A862CAE9B -205: 7DAB1FA44671926588657945796FA9CB990C691874D5179A9D5CBCFAFDAED21C -206: 7954B56A5C9D3BC80C4B17E79475749F0126CDEF9E9336443E9B1764C5651689 -207: 44D8383683C2B65AD284A99412E29AED2CEE73F0EF34E13B3745BC9D0731A6C7 -208: 71D4B6ABBB26296DE2E9F6E303ADD0F93C3638B1BB83B3B2677D02F48286DABA -209: 985A55982E58B96820DC94A848B479AD5AE1AF95FFE0188C6645134C31CCC07F -210: 269EE8535D5E1676BD7EFB324F5A54ED36D70CFE85F38931A04DCF66616E70F7 -211: 1460A0EFF458E46A8A9523670B93A6E9579E587C183AA9BEED0980F7DF368B62 -212: 81591F9C463F7C22792DD42D250E81C9010DB82C98680DE31D951AB1829E2E4B -213: A23042543083EDD57A4EC79D2C5A43C34C9B6433BC3C199A38C0DF86C92A7238 -214: 8C536BEAD517911541360CCAFE2E8BC2249B43B67BF8B1A2D09836E73238B225 -215: B2308B84E852F8BA58044C901BCD745579F83EFD178CD23FD85650CE53FF632A -216: 8742852257FD8188F9F04BF096ACC7F50FF3437F03D4882800CE64E1A2137C36 -217: C0DBAB7B7203575790E33BD58AA2D1E25A406F1D4088B3FE9EC850EA147E8C96 -218: D9B08D97D4E1B55AA52EF2E99FAA6E63D86DA3CC78A8CA8E45EF58EF49563F65 -219: F5C8CFAB1450530E2F645AE99A8BAA5D7F0143476AD41B4D5BE624F50CE0AD07 -220: 0526969FEA08C93BEE59510A9C4B1E70A26501426174A5C06D042AED823AEE4D -221: 3ABC7667B6063F836C6525C065D5143039F28E0B1731853AEF74ECFB6E01C03D -222: CAACFDA0DD1665CDAE0E1398094E269C46F1E976E05F5F775583DBA2F71197E2 -223: 70E9049F0B0E6FFFDC3521B5FE8361C355FB7E67A801926CB176980ABAB663CE -224: 8A410AB325AA49506162BC8B8116CCBC311A49A73B0916A466949BC72B85821A -225: 862413698EABACEF0C2C70C19AA49943C02DEF683DD6B78E7EAD43794FCC3441 -226: 1B95CB4BBB837A882868C5C6A08FB66218521A544AEB02154BA6081CA40CAE17 -227: 5C931BC92FF7DC3896B4081E41893603A06998481BD60BB82FCFE2E6887466F4 -228: 689C32BD98B033997F1D2A9AF746E63A0A5B79DE6D4D6E858CE8EF6755EC2FC8 -229: A7D22F18F09F2EC693CE318BCBF2E681E78F8907D3533544B38DED54E3D2D932 -230: EA289C980A1491D824A44C8AE9D73C5FBEC8C43AA48766E19843C1A00C762239 -231: 21B1986825371A5FA3E5EA257B3C7E39E5AA0649504251DD2163479220B84835 -232: DD5357464DBB7279BBC7A7A327AABF146ED11845A9DFC623BD39E70C650BB7DA -233: FE9E957CF1DB65A9C0768D090D46CA915F0170D1EBB0EC342F20F968EBA7C2A9 -234: CA0D3C522B886721763CFE4D5459901895624E09AF3F7E7F9566FB645DABEEC7 -235: 77879963E67A88D3354130D647E0FCFC9F57484460143F045FB1AC61957FA110 -236: 4EA2D24F2823A68EE835CCFDBC8FFCF2B417ABFD2E779EF443CE8069C90E5511 -237: 0B530EF2C4B2620BF122E645711E8A47596660E8464E7B2C1C8F420C903941FB -238: 19F115D6D9251413FE31D26A0AEE9CFF59BF52B8CA97B69D2FE764CF6DFB1AB2 -239: A59EB6FAFECD4601471BC24F3E1EA7C1BA5FD9EDF7D84A4C8034F08DAB436370 -240: CAA3A67FD134ABCAFDDACF5023BE2C032708FD211FECDF507486C8B58CE24D61 -241: C02805AA8BAA274D3A66FA440C0C426D1D78E53E6CCA833BAF98B8A4EAB1E5D1 -242: 58F27145A4E702C8E95F9A9517B98CE298DDDA3C0D5A61F3081941284E0F94D1 -243: 86838562B139DD0F2CCAF07C4125D45E7D59FA203B18E0F574F2AF9F31E9C3CA -244: 34E1EDB16414E3AA2131C6B3FC938C08EE426FDA8987A1E19A90EE9C311F31A0 -245: 5CC30D04370BAB8066F0640F1CF723909EA9E1C3A6A04103BFA39B11C3BBA77C -246: 8341D11F1491E460809591D5607563EE03C1BF09169E4F1E64A8013B14CE99AB -247: 39510EE3A27837C0611FC1D5A8C14D7D9759071E6944B0428AC9A7563032EBEA -248: FA4C5F21DB0F426DEC292A9DC7F752BF3C665CAF99AA776F658FC74868418C8F -249: C14DE83F707BE65DC6F9400ACC62AE57BA277BA82E00EC01DE3F34354F6EC89A -250: D7D91BAF0DE69A7548EE02EEE2638A357586F79DB52080ED4C36D7BE5158846A -251: 20005E8B31506A9C45EB81BFDB01E48328F5C679E8F8957786F610977806B806 -252: 8A2512FFA079FDCF44DEB445718DC45DE45B1EF23885CF7764F25505E42B0D8E -253: 4DCC6BC7AF9F767E7B955474682FA2E9E1F70691D146E1A6806CEC84F6EC2D08 -254: DA53E85ACBC931DD0084D0076FFA7F4410C1F34702E5CF12D45763E46C9D8BCD -255: 2BE7933119BE1B6E7D90983F9475EC3EAD2BEDCFB0C688F92749D05954F93566 -256: 4C1E9FE65A4635CF336D6F15BB33142C7940AD8352ED45869BD2D34C1E70AE60 - -HMAC-sha512-224 - 0: 48EFBD72991A1B6C1A276D5F37B62E55DEADDBE0BD107E4BFA366C66 - 1: 839952295D1158120AC85ECE73C3983626390813FD983578BFB34101 - 2: DDE748FF9F9784F23BE861CC2C7FA01DF6AE97AB5E40BE7DB4941DCC - 3: CBC29E8C2E20F04D9AA8758F19D960287A5A31EBB6056DD31F69AF43 - 4: 23D379745B258F1CFB81E084AC79473E9DC5733E63DAB944FB929F2B - 5: 3A3A791D93D0C8817090E28192D3449BE494EEF54337BED209936746 - 6: 1B33D31AB9FD79D0A93EB9A50E8E7A4E78B448A05DD3CF93D9A36B75 - 7: 3C89FF579EC0521AADE48B00C7DD2ABFA936A4C5455688870B4121E5 - 8: 2F8520FEA211192EA7B5A1BEE7F27832AE7CC411F8FAAFF8FC573016 - 9: EB45FE092721B4190C63BE24D696F81FC84AFD6CF6E1412A90B8CE9D - 10: B25214D1058F6ABADB544B638AFD69DA778447D1EC58277215DAE60A - 11: 96B714CC79B11CF9B0B8B903AA195BDE97B84AF8EBB3C20A6CC1F163 - 12: 3ADCA3DC4F0BF937F0C01D277D448A46DE7E3AFF807926D2F608BC37 - 13: 0EF449E66BFAA6E5000271077D0B9FEC85203C63EF3A555DE2518B06 - 14: 022B7F16DBC27E933AAB75E36220BBDDE629422DE52FE52F7CB5AADC - 15: 2B8BDB3ED8FF84D18E69933E83C545FAB236A7506F025BCBBFC304E7 - 16: B338B15B48E49B4E8597E477EB64C9AEA29F1AC96E33AFDFE528CC60 - 17: 9DA6C657C280547E17BB72E307F8751077124E7CE31937F19D783CD8 - 18: 683FEA80E1AACC175488E0547F98AC771A255E92CFB22C1D95393451 - 19: 5FC8148383C08015F483C1073AC5CA9746886B88669428A3FD3FFFBA - 20: C0CF0B758B58F0E2DE2340C57192BB158E72D2FC126DC34F8AACE2EE - 21: 65469E3C95382569C40CCDE30BD09C822EE017F4A8D9306E8469DFBA - 22: 08AC0A7EC2DCE74AC22243DEA716D0279D7E3F8D4ACEF1679A37CB50 - 23: 6576D56228261D1F42BBD95C096D134E15747F4EF505AFB1D292DCFE - 24: 1E35DD06C89A8DB1536A95584B4319D56D5E58567F49F30B9532319B - 25: 6923F40994B9773B31CFFAB037F50F934E65F376A250D884B1135E4B - 26: DFA27EF85E5EE8DED1D20E090200E8917F6E7854766AE3C6E587DD6B - 27: 600F788C7B71CB72E10F5C4A8E92B77EA6DC8CA5A973647FCBE7BB5A - 28: 3ECC120D2BD6AB1A12517D85C7BEBB5C5A84DD946101C444D2B0C966 - 29: C2E8D1FAEF0F22A3DA726142FA32EE59F21C32628D6F3A19A97C3D3E - 30: 66A1CE87C65EB602284EF6DDF3F4C21F45A7929E99BED1969A63C5A2 - 31: 7F19B1FDBFDF53F80D96F5E6C9F332BB6288CCBAA4332CA48D828F92 - 32: 6C0FE6A2C4684AFBE80A8115B9D2DA15E6B4252A7CB3743261D5366C - 33: 37E4D09EFEBA5F9B93DE66EF903995CED65DD257DBE75AD83B33496A - 34: 8DA8F60B56EC0E251BD622DD811E1E872043F6CF08ECB3624E15BED2 - 35: 8FE24873322EE8118DD2A7E5F86B0D97B9F0C4CAFE90D0B0EA297DE8 - 36: 8CFA8029966C1CFA41B298072E673F8762C205D31F62952F45B31BB2 - 37: 53276A17E8351255D48E6CE6BAB2AE7F4D538F58A7F107C2CAC6EF56 - 38: FAE09DD82A2038B168D4BC23F2A52FE4D2E532BFCCF3109849624CA5 - 39: B37B81213E623D6744914F859C08C020C36A0B266651691ABDD9FB4D - 40: E0E584B70EFCD22727489D86C13BFD5B11218BECFFD12224AFE8BBDB - 41: BC9C6FED305BD9882D74533E3082782F58BBB9CE71F3507A4F928F0F - 42: 12411F98581BE2230EB7A0865149779D259A4CC5D9C2F4E792180B10 - 43: 56133ECEA7994F5216DA535BCB81CA193FF523C0FCB10E5E6593EA31 - 44: 97FD2C66D1D594B943BDE7E3F157B65B0CF8D6EAA08BAD0A218D96EF - 45: 2734BDAB39E9D243043B81FF4C6618AF7794F7D566487598A44110F9 - 46: 6D9E305E16377873B49FC8408BE1AC42BF1AA4609E7BBD83464903AA - 47: EBB237E61FD7E8D0003A4F4DB1AEB887073282311729BB56F4958E12 - 48: 9A85D05C61B90B5C18E8E4B3FA1197A1895B794BD40AA01624415DEA - 49: 05D7C140A6A20BD82D97812B48DDA409871EC57FB0847F0DAF26A9B8 - 50: 71D65BC13FF4AA3F679617C83D90689BA33C428209B59F279DF8C672 - 51: 0F2045E03869ABD13798D62D34F4F6059157C9533999F32244933458 - 52: C4E9037696D5E82E949DCA2715990A8460E0FE63928E4AC1EDF38F02 - 53: F41678F54F797944E043594234B92A7A918D32411C5E200C02C15F81 - 54: 244FA5F5A7981357358EB2825A8E48FD7F2691891D9D6A0D1E2CEC38 - 55: 605EE444B396FBD3A53EEEBF790A3B77F11FA06AAD253F2D12314C19 - 56: E7020C2C0F0950D713A006C1C577374D791F09B76F7E35A0606BAAEC - 57: AF1D23B0BC656709B57BCF069AB307E479C69F175238A190E2AAC393 - 58: 9A6260BE8242701E865CD781298586BC2C224723BF4E0A8F1DC50E9B - 59: 206C7CB8CBBFE79E1FA25A33E49DF7AD9673C8ACC1AA730EA2BA2A68 - 60: 7AE765E266FAA21812AAC4338000AFA44E0F80C2ABB325DA010548BD - 61: 9D17B8886D68652CAC09151912BB5969F399FC698A83BF0BF3C74FA8 - 62: F4EC709C89274BE6D36800FDDACCC6638F83FD058FD356E86A320123 - 63: 82892F3D1F6EED960E4814A04545115CC7BCD918606F4A150C60327D - 64: 2B97508B1FCF1C00A1D7646C93E196048A9216C80A7DBE128B087A42 - 65: 0CB2102EB19C395C3DFA52671E18DFB818246C97FE5A0C18544AC98E - 66: 040E1B2E46E2DAE8AF799386F341766384817826CE7664C726B248B7 - 67: 07225AF0EA6AC19945A07FC8BD67FC825A37ECF41C5A86060FC5B5FE - 68: 0A476E60506A019458032F6392CAE63D69B1DD8BCC67C3F867A04BDE - 69: 6FC8CAC1A00E57EC0E59D73104A5C3517CAD3F0CA1A2832C08EB66F9 - 70: 34C8FF46550C16BD8A0DF97C6AE857791F327597A1AF412D4B260536 - 71: D518FD80AA92B3FB7A48C74E136C98D63070DA11B8558FD1506EBA35 - 72: 7744B4CA11C338EB81BCF4202CAFD3B1B997AD63089E9612E10E1C7B - 73: 0D2CE3B5C63F05424B7534E5541C821B21216EA38140975D01D798F4 - 74: 7FEF76C6AA4975C98F1B0F491A4E7F2760E4742F697D3B2BB36B3355 - 75: 48974ADBA6926A3AC726872C0A2E86B6B92FDB86721E16F33AF898D6 - 76: 6AD0D4DFCB43BFB8EB86D71E46185C13871A64C53D74C0C22A7B6C31 - 77: 57720B3205D3062D7E07079CC74A41D4396FF6B6A64B0B09333F0404 - 78: B8154B62DEAEBD4D8DD0B9141629CDB565F37DE9F97FCA1B4A25EDF8 - 79: 3EC327CD667208DFF7991BF9E4F6CF5056F7AD587C7C284E70076978 - 80: 83C505DCD265C6D694D8713404BF2AD7D5650E5DAC5213601B598C4E - 81: D1162BD2E8E32CB7084C6DB435A3E579DD48A09A6C5FB9462594FAF6 - 82: 2A4B3B272D6DF409C785784442067548A3EA21DA8D87432CCA8D4FBA - 83: E4F2F49F66551F2D3502E369B3D30E82DA681E1675BE6E467855716A - 84: D0DF577E51FA006C54BC10087DD8EC1F2C5BCA01D18C76ACF8497901 - 85: 5C750D859A10B9860D051ED996B5715BF1435EE3F79AAD28702BCF2A - 86: C81980EB158DD340B404B4E8EF86B9DF685EAA3DA7C836DE9BE3A6CC - 87: 189CE82411AF0612CCF224DE13BBB34167E24253BB5D0A2271861ECA - 88: DC6FF0AEEFBCA6F550ECFDBC2D53A8A6EFF92DB62BEBEF3A490A5512 - 89: 55644C0BED38F73039F8F367E3D17E5D009F14AFDDC89245AA20E2EB - 90: 7F137F0AE9566665B86F466FF000C36A3ECF2158E448C44FDE9B685F - 91: F455FA8E060CEA12A3DF67D66E73D766B4AB82D7647362F103D95950 - 92: 687D5B52A2179DE3768F47A676CB4973FB1AA806002E2A2B3949A62E - 93: F9EA2922CAA3FF38FEBBDC41C49A25A2D11E65E9BEDCFDECB74716D2 - 94: DEC3626E3022A697CBBFD35DCF2AA593311B839B62B618C395F8FABC - 95: 799B4021680661DFC94A87EF06E8EC2CC9C5CA9CA6582016C40DFBF0 - 96: A7C44F66C5D7A1B5FE63E5C9032037F1D7E5BCE4E782E8733502892C - 97: 7824BAF4BAAB467C66206D60072752913D4C4664DBA9197289528ECB - 98: E5A0166B21D133CDDD7ADD2F000F0C97DB9E02C15E6C0D7E3761D08C - 99: 26B94C44E3B082C083C507976DC5271D64FEB19DBFBF7C38967E424D -100: 4502E140EF20B35E73DF874AFD5C83993DBC395B19197EB321C1A1FD -101: 4B098D373B6ED0E643F4D7AD71465154386457A62F409E6BE5523687 -102: 7E2F229DEBB0C08F1E7C1623F68854F9BAE2142E44EAD46CC560AAC6 -103: 685919BA2AC4826513E2A80AA3A68625E1E04B7B82510FCE0A0F80F8 -104: D77057551DDE8539059F810E1E5D1EA0F9BD3C5057D3720D25D6496D -105: 7CA61B2940A9E015C4BEACD10A2A5B5B6A1480A1BB79FBD0AA40E0E2 -106: E8B27E9AEEF6DFABFCE02989003FF965E24B888B912EA0C98C44114A -107: BE7CE40509391771AF7D8C652620520D19792BA902565910CF19ED06 -108: 2FEAE129B5A74B9EC26359553E051C09A02812F81958E8BE90326DE7 -109: 4BCE3E62A8939372CA71E83661D2D1B297B5F9EA76474BA1E5D15BEA -110: 9519D5CA28959768E59BB4C698F77EA1752B9C9F5BC6DAA684980FEE -111: 44B228490D8AE1FA0867F59C950F6B28DAF012A11D83A81A295AF2E4 -112: 595447B547F45C74D1014AFCBDB5922B10D2554E134D335597BFD351 -113: 829C4F36A1B49D658AF8366AE2B4500586625C849A3F8B03498C0271 -114: 32DF56524AB646F3DA2CB8F16FD5B4B5B12BEDFC8C525BE30B892125 -115: FE03ED2B0E48E730DF1C929E0D85FADA7E063285AC70832BEDC7B110 -116: E37C4E201A5B500915F63DC7C4A2C8D1585A893636E22C349C379A0F -117: 6994EAABD9981D8D47E4C0141FFA90E715E91CD0E784169427468DE0 -118: F00CDFB559A1E5DAC4CE58F160A59AABF1C52ECFC033FD2A249CAFF7 -119: 898B07C76126051871DC47558B53B50C626947F4F33A28C5337E1255 -120: BD063BE62F249B9A2FB1A0436616FBFCB5B2AD8A5DF1E7ABFE7A329F -121: 2D146FBDE27D9B602B77D407120CEB2CAE9D28B11D1EC346D5B1D3C6 -122: 8DFAE64D860BDF213F2A4270002C148BE8E84D0311BEB38DC5F2249C -123: 06052EC65A786D16765D2AB54389C7E85339C36A5545A853E055AE6D -124: 14CF06FCB039E3710EC182B1F5E18312B5E11EC93E0AE84D7A5BCA5D -125: 67C4256494E9291E1460AD0536102E41091F04A1AA44C78D47D6D1A0 -126: D9803698CCC34B0D46590CF24C5FCF2F36BC51FD2686A96D88D2BCE1 -127: 6914FAA3532F1AC05CC4EDD495D6912C3F5965987D9D1D4AA4B21E00 -128: 00A9DC95039BF57918AC31B1E373D77D285A84D44DBDFF9ABFBE7466 -129: 1C6B4EDEC9F9CCB58DCFF50C802BE10E79501B8792FBA8DCE52B2CA9 -130: FEDFBFE3C8172E1834E44A6752A01AFB6C8246C2353787FCF1A6BC62 -131: 27D852515A2B6B1C02D0E4D736D2DE326D5C904EEEDCCD64FDA6FBD6 -132: E3E80979EFBD933792258193F413F3E55315BB46F74A538474DE3565 -133: D151F247C1316BA8ECABB0FBADF9D4CEFBAA93EFE2C89C6C8EFFFA6A -134: 96E250A71B2521197C570EE60509BEAA3D0FB1B2338DACE0094ABC46 -135: EAB4CFCAB47A7C813A99577745A96D806B8EFDD5BC6F8EE9767267C4 -136: BAAC26619C1C10A9F9F3777D199E5FDB737DE32EE00B866FFF7F16A3 -137: D07F3979AF9EAEE82F6157E41348C259AA2D36889EAE8D002C4790C4 -138: 8EAABFC87D6C6AD10B783B54AAAA03A5F3BDE35A04F4DA9ACFF38772 -139: 7706344CC31F387CD703FD3348D2207879BF467E61A3E1CD9F567056 -140: 1412F87D074B582A81193D0F70F5C22229C51E2DE00045CBB05DDAD9 -141: 6193E659A599F54CB0B349B0E869010F257D9ADBC25514C6084F3273 -142: 4382099F2F015954D7C9E586C539A0786E58A723F95ACC9239CC68A2 -143: 3A520462C8DAEACBB88F1D68AC2DC49E337835F9E453C3004306F78D -144: DFBA194E4FC14F2B9605DBEA44F5C06D4FBA6FCA32051788FC009B37 -145: 30E504ECD4F40AD31886EE5E4571FBC5C54F6BAC96008171FE2B5275 -146: 68331004646EE0FC06565E191A5852BA6E45236B516DA9B87A442DE0 -147: FA9B8009638947DB8F7AC40D67743AA26302415FD66A73DFC983CB3D -148: B6A32174525E96186EDB85E3BB2F0B45B25D6977B7096E5DDECDD934 -149: AC09A3F072A7BAA0EC985DDFF5CE34BA31FD87981A41ED35F4E38FCF -150: C9946B4FF4245FEA0D40EC5F9439638B9AF0E886E1D5C8A9F04C874E -151: 3310303B0138A108453729DE4F075B61E8CD6FB59997CDEFF4736E38 -152: 53BA121A4A0D61468F22850DD658D31ADA31E0AF737E5E2B6F2F04E9 -153: F7213DBE2423D88FDC42890FB1CBB5E59B11641E67FCC093DDACADE2 -154: 4961A8695490DD6FE0748FDE2042D55B49176D3C450E323672BB2277 -155: 6BF7C3FCB97ED327987B17356B6D3041239392D5645664BE3DF56248 -156: D70C01960B95A2448F1F2EF31266DCFFEF4B71AE1A3C1FEB10B37324 -157: 2EBC7AB719A8DDDF75E4F1B3DC89C44B79C6AEA1D14F718462CAEB93 -158: E05E69B2B3254EE44406588B57754E295F783252C0813EFFD7B5C3AC -159: AE95B902D1D103DF530DDB7F23B5042B00DC3547C3F984D5EF622237 -160: 8EB2792098081D060698CAAFE89A17E619152856757AA70693615F65 -161: 41E0519DC9ED139EE6643D74553D44BA64E2970269C8F156C2D41CA4 -162: BE04EBF4F3BCDF671435F2D0058E2E2B924C7E8D5645DBE5F6B1BC1B -163: 927C73F4F7A760FD54383D7FD65556DB111E26D36107D4C58314E17F -164: 1A38B77BD45EF0661411CC1F5E8C2468188FEE7D8768AD4BF55F7412 -165: 7E5DCCBBAE6D0F628E409C1BCC266ACD824A6FDF01D39EA0E006887B -166: AB5A3611FBD94A61F6822F428462B69E20F660763FC116F10DF90ECB -167: 6428DFAD5C80BAE31173B0169B87DB88B9B55FD722A6BA8216C8B01B -168: 2836EEEEB3A8739F1098E8F0C14B070E40942F721EF3CF2DF29DBEE2 -169: E616758FEF5F6BD6E3A73C6A4BEB058956D3BEE8FAE489D8D548C881 -170: 2F7F4B3E1F57D94581054F05DBDA5848AA05F459C32C1ED0983C48C5 -171: 491E9FE109C7E0232DE1FD44F29AE728889CBF63F28AACFFD87E94DB -172: AE228F17075D696C6721F424A5D86ABC9F030A716FEC12353885AE1E -173: ECFBE1037F707D02849C032653FBC1B9D25BD353D10E9CEA44EF9513 -174: D6AB30DFCE87BA4F2C476FFD309B8869E393AB2FF4CD2132B64A74D9 -175: CB2FA4084BE1A1FC46B0A69091C9DD87D632CBC7684125DDB9AC6A64 -176: B1C2761E7652D38A04B819CB16EC6215B5D2479E86F7BE0085CA8B0D -177: B1BF4F1C96B3BD7D255052014E6F4D73A684BCA6F0A461310F47D8D5 -178: 8F294514DAA7CB978B8B0C5D76DC2006EA2008BDFDCEF0EDEB446B9F -179: 816A65E12EFD71A1113C4B819B88D67112401C9EFD4D855EF1092DEF -180: 6767EEAB8829B5F5BFE1BE604726C6C20FA0E54EAB0CE234FF5952E2 -181: C3C4C35690B0F28D329DFD061AAEDE2106BE2250FF537742E40EC41F -182: ECDEE6D9F4E121FC76B7F0C9B102960C69B6A1049191A11C2C7B8C90 -183: D8EF5B01A28D78949F0C58F8BE3D3BD3A74ED5DE0028BA42ED2B1140 -184: B43C43A6B6C73CD2D9D595BA20F2EC247B4D19B16A561EB26DBA59BE -185: EB7D7A248124057B9F74FC12916E559ACA75F20ECA1EB4E30FD2527A -186: FC707C7C06CE750695075E848E973EEDC9F85EB5BAF214FAC3C5AD4C -187: 678A5893561582CDEFE346CA10C16369DEFA9A17507B99ACF216E59F -188: 40765BAD0CB7932AE3B7A192E0B388D63C54EA63CAFE26AEE429033F -189: 3CAC08B9CB39953D3E3954EBBFA7A5811BCC99D9577DBAEE374771ED -190: DEDEBB105FC7B21F135DF6B69DE66D2664682946D1CABEEA1CAFAB72 -191: 79CDCB8D656F38CB7B4D8DA5EB65E6FFDF832060E9A823CAFB3C1B58 -192: 101385B6E5CB65126A27A7DB748A9290E77E0F9BEE449C1AB290D246 -193: 97BB59A5DB5AFC83E0A0D6DFE9587A960D0C8AF59308841F766D5A9D -194: ED222485EA7671E80A4109150E338D6BD2FABA6A700B4F7333C42AE8 -195: 06B50BFA5AB26627BAE25B98E382A1ACDCB21A7873B739E12F77522D -196: A815DE10C82C38D34B39BB405BDFD3B16D6C0261FF02325E81659A98 -197: 9538A95A5EDC58B478EBB83AA16983DEBA545A92159982BB1DD218E6 -198: 2E3AF5AF5E3ECD587CC91358E9C3DE5F361F124D72346728297D7D16 -199: F2B67A6B7465AD65E6F6AAEC246A37F5C430C9CC52BFB7D7B68F69E5 -200: 1A03820B8A7022C591C534613B23EB02641D95612A182FE49097715E -201: CFBCF8E23B47BB32FEC6EFE26F678A6616E6DED024F3C83ABDC32492 -202: 4922FD1B573E4A3F12067A9E516C3551F83661AB36AF1D317B3507BE -203: 21CA53A40B827CB28615D47E54AFA773A238D6370C528D6E51DCFB5E -204: 6594B5C299912FC4369F4756E55028CF82BB2BECD85814F91C0B036C -205: FE5B06D55E84F9EFB694A61C3460E55AEE34A6B4650649BADA886EBF -206: C7D15364B9CAABC921FD901A55070E6D305D1D1E8C903A142FDA20B7 -207: 92652A66541BBE1821B9CEEE55D2A4831BBFB4E9D5A35601F3482F5E -208: 1142C3CAC5A6F4F59D8A0B95BA49F7DD81FF647D6A46C8C80040925C -209: 9DF44B3DB1C6B138B346A101E6E25C308D2093E895837E7A8F4273EA -210: 036E6B3C4FE95959D73E5652B5AF98E8EFAD9A8ED6BFC8FF159B68F2 -211: 0E3CBED5EBB9230149847388DB06FD4A749902F391DC627C47E4C6DB -212: 938092819682B577C13904D3686027EA542E25B7C88ED3664D59E557 -213: B570AD6CD024E1E01FADFD2DDD9F8BA9B9F8A72B4CBAEA44C59EA8B7 -214: 7C8F6185886F1CF378D8DEDED86576C6AE8F8ADA692D82EF1E14713C -215: 5B2D3BF41C123656B34AFE19D446832EF3C7CC4EBA94AB1D0050830A -216: 8B4D91A13761BD006E792BD955BFE63F08BA94B0CA51773239B64853 -217: 041F9FA170274090D0D0C95C4604A7D3CB48E97773459169057E8F7B -218: CAE6C451053AA714E4BC801CCB87DD3E2C1E3553423995167C1BFAE7 -219: 16F92E470EB0DE652A96122647E22947645D65AE1F92D039A2B8CDC7 -220: DD1DBD6E91A1D240C8218033BEAC675A8E3EF0A7CDE00DEDB783F465 -221: BFA2D188941AE6AC2490359A0343802970D67A15DA7345EDC78181EF -222: DAB74C5A79E18B36A31E526538D0C9FFF9EEA0E45D0D7A93982D4841 -223: A7C6AAD2CFA553900C878B45FD0D7E7DA905746F9FF86B006998ECBF -224: 269B6DBD5748A95F9EA533E4348C7DC75148C41C89DC5F9C371D40B2 -225: 4FE2D39FC6F0E04EBC4A75308E59C9201F35162C264F373C17227092 -226: DC1C083866A3E5EB22A640B44F85ADF93FE649E6C76DC03906DC3A81 -227: 2B59775AD1C37F5679569987BA7920FCACF100FD3FFEB94A8995F431 -228: D8EB02B089C120E6ABA2E2642358AD4BF9EE19D263A8BBEF7B5721C1 -229: 0723AAE2214B61F78A977E1953D83C5B08127F6B9A2723163FE11318 -230: B0776EAC2CC0CB1875D42525608BAF1D64CE4B23D6E134C56727B979 -231: FC5AE9AB94A0153920EC376C1DF064782F377BB2648C0F49D5848CC6 -232: 7DC27D88145EF5E81AB5D2774408BE4E0C815BAC81ADD394E0BF6CBA -233: BF9665A989BE534A1C185AACC5E476F96E3104E1F7478F9E413D0485 -234: 8BF6BAEFD10C0DED1E3F3D4FCBCAF0591F17B986C41D45A32B18FFFB -235: 7A6F1DA4E356B3AD16B8BD2D96229A87E722B34CCFA2E425D3ADB4C4 -236: 13DA7382CA771F747E6FFF0999B5787B8FAEA91875A0871E05753141 -237: 329B5833BD5DBB13847A863E882EC388B014BB32EA31FAC004A0F0D7 -238: A1FD939A3214721E46CAE26974477C940D9AF79C2AD1DDDA270F663D -239: D4FA32047199341AB1D4B0D84C071B4E8B301F6F71A2E4D02E430589 -240: AAE0BA62DD736A105469FE5311C7F9BD5CA913FECD094D80D7E85E14 -241: 202AF230416873B89307D67CA8E8114FB9404A72F83F5F1043050C27 -242: B8D66FAD9C34E46609EF24DCFB92EA40B32C4769B02B1FCD2A424FF3 -243: 6B27A103D5DB1632650AF52160A2307CAF6B58713FDE11A0FE2F093D -244: 656DE776B94BC467B688D0B5F5C628EFB42C77897EE266E1A2D5079A -245: A4A3CA586E387F73A5275752D5FD0CEFDCE0A38E8B34C52E7FA93451 -246: 040C523CD7CC33FE5E6F8D0CCEA9046C31B4A3077B801F45811FA81C -247: D69E643B91B93592A43EAF560186B7469978CF51268092A0D1E64693 -248: 905B9304B5942D9283DEBEED6258E81DFD035AE77E6096E3F721B02E -249: E4558D0B406D536B5776C15CB0DB97A5BAF44D1C9902DA8C4B67D37A -250: 5C057CFD6953175A25A39A4291FB2E792C3B237D08F1BF4C7E0E8D9E -251: 1CC817A93A8F4926C95B33F6140C2B6DCC844A5942E5CB1B449197F3 -252: 7BABF3D47D61366A5EB605649E20EC498733189C8C51AD1853AE8FFE -253: 13D09996FC0A93BB28F340BD0CF30D8908F68B3758FC17190C625BCA -254: 8FB08B94C1B0EAE82852713641CC2FE0696727013877E4041A48C4A6 -255: 413EC6FB4311E11A44C6C031785A759F5BC9BBB65BBFD3266B7B3B3E -256: 80E0A2C5EEF95C7CFA8AB1FBD6F0E8D7C892D5B3BFE1390F2D4B7999 +HMAC-sha1 + 0: 06E8AD50FC1035823661D979E2968968CECD03D9 + 1: 0CE34DEAAD5CF1131D9528FAB8E46E12F8FE3052 + 2: 23924849643D03BBEAC71755A878A83BD83F5280 + 3: 6119DD9A7024A23F293A3B67EFA2BF1D82EC0220 + 4: 379DC76AC2D322FD8E5117CCA765391BC0E10942 + 5: 7897CC86CFF17A3F95C7AF02CCA03546F5CC2368 + 6: 1FA1EF3980E86B8DF2C8E744309381727ED10E8E + 7: 03B2B726D71DAC6A2BEE63EAA09631DA78F5958B + 8: B8CAC4C104997A547374803B5898057B3F8110A9 + 9: E165E07F8D542FB288C7D367198D0618DE3C9917 + 10: 18125F046C675F434B3C53A28C301FB2D91B5D34 + 11: FAAB993F2FEAE442D28FDBB613D2C768ED13342D + 12: B657E7EE3A65C6484D007E21484813D9AED1264C + 13: EEEC2BB7BAC158742711ED13090FA20462A5E5C0 + 14: 12367F3A4E1501D32D1731B39CD2DB2C5DF5D011 + 15: 57DD9DA36E7A4E567A2C5AE9F6230CF661855D90 + 16: E37110DDD295D93990C4531D95564E74C0EBE264 + 17: B2115C4E923EC640E5B4B507F7BC97FE700E12DD + 18: ED20C67345867AB07E9171B06C9B3B2928F43188 + 19: 6CA7DFC9F8F432DED42E4EFE9F2D70D82507802D + 20: B39EB4D2C190E0CE8FA2C994E92D18CFBCD8F736 + 21: 91BE5ABF1B35F6227772E36337F258420CF51314 + 22: EB957199EF666C6D0EACC64FC4261D11C715BB23 + 23: 2A18D8D4AB1F8C528C9D368BF5A7CFFC2168D067 + 24: D4DC370D482D82932701DF8CEAC9337682C2551B + 25: DB9665A6A26DBDE20238F04E9F1A368D26564E4F + 26: D5AE212C9E543F2656699B59DEED54CAACA9A071 + 27: BE8890F9DEC6A02AE2848D8505B6408E884E6D1A + 28: E8D9DD9FAA3080560B0EDE798B745FEE2A1E5479 + 29: E219219D2CB8C363C2687F578446ADE1C0404287 + 30: E8E7767B35ED8D0965F68272ACE61924CB044262 + 31: 1B26689C1EF55448A61DFAEF98B6E7206A9675EA + 32: FE850390864E98A17FC43C3C871383169741B46D + 33: 3F63068D536A282C53E5C003BCEEC96646CF7455 + 34: 2962C292CE247F11ACB7E1F981447C51E9BBE63C + 35: B28909A2B7B2E0E13FDCB1124B0BDC31D7D2FEDE + 36: 8DA0FC30C8322DABD67D61E82FC92351894789AC + 37: 543DAC6D449FE2DDC3201927D08695F68F832905 + 38: 371540F3092F77867F0CA9DA69318C7673F68388 + 39: 7EAF32204EA5993C87E9A12C67ADA4C85D253281 + 40: FC4994BAA05F592901085ED7DA188EC3A9BF36E3 + 41: EBFE77592EF34E81BDA05305876411484DC0744F + 42: 25F64E8F076305D6F5741EA58232F68B725B8F6E + 43: 5DBA03F7E4B4226666F0D8D5BF49FEE77951D121 + 44: 98E1D56D723DCACF227D2AC67BF2D6E7FD013497 + 45: 53550BC55A367D87416FFA25261362E7D4618DA2 + 46: B18434BCCCC5F08B35397C1A6684D60F4F3A452F + 47: FF2BF38DFC6909B46A01E055D173F67A7E456341 + 48: DAFA445432ED37FEC99059DB8A0BC528E788E95D + 49: 7FF823C570F8B4C0E483165C076AEA7B5E727632 + 50: BC4FC948AB621FE1419CF6006DC04E7D7B32FA23 + 51: 1678AFCC3FBD1063E7C82CACAD5B6A933A93091A + 52: 97DC2F9F56738FDAFFD555BF09274153FC2FD009 + 53: 74F5CB4F0900441B7AFFC278C01A3038DF3D60C8 + 54: 021F66143270C9D58F26AB193DBA81A811917CBC + 55: F486D1C8127813FEEEA8A693C4B8ECB5BB53C3A2 + 56: 8397CAB8EED5B2164FEC6BE688971DFA2138934E + 57: E4477CE9BF8CC5A4CCDE039B4E3000F1A0F4153A + 58: D6D2D1E3EE4D643AC4B38836AE54E846F99B376D + 59: 9545B2C6279371D4D928AEE24328121D43DE1E5E + 60: 947ED38EC087C4E53F417E8216408863A8EBFCB2 + 61: 32518A2326ACDE1E962B3D0D2BF950F318894E83 + 62: 5D21D368FB9D879ADC27B341D608BCF860AB14F4 + 63: E2BEDD94D565A51915B1EC6FA9DE18C62D12533A + 64: 15ABF657DB6473C9E2F017C7A2F4DBA3CE7F33DD + 65: 0C9DAF8D959DAE3B66FF8A21A94BAFC523ABC462 + 66: A36BE72B501D435CB627C4555A426C4ADAF3D666 + 67: 1C171979D67A014A0422D6C3561C817A354CF67D + 68: B75485B08ED052A1F4C3BACCE3C563DF4BA82418 + 69: 17297624219C5955B3AF81E5ED61C6A5D05BD54D + 70: 38A9AC8544F0EF24A623433C05E7F068430DA13E + 71: 1E9EEEAD73E736D7B4F5ABB87BA0FABA623FB2E5 + 72: 4B9D59879EAC80E4DAB3537E9CA9A877F7FAE669 + 73: 7F76F2F875B2674B826C18B118942FBF1E75BE55 + 74: 1716A7804A9A5ABC9E737BDF5189F2784CE4F54B + 75: 168027EDF2A2641F364AF5DF1CB277A6E944EA32 + 76: FBC67DED8C1A1BEBBBC974E4787D2BA3205F2B1B + 77: 33DD26C53F3914FECF26D287E70E85D6971C3C41 + 78: 97906268286CD38E9C7A2FAF68A973143D389B2F + 79: 45C55948D3E062F8612EC98FEE91143AB17BCFC8 + 80: AE1337C129DF65513480E57E2A82B595096BF50F + 81: CEC4B5351F038EBCFDA4787B5DE44ED8DA30CD36 + 82: 6156A6742D90A212A02E3A7D4D7496B11ABCFC3C + 83: 3040F072DF33EBF813DA5760C6EB433270F33E8E + 84: EE1B015C16F91442BAD83E1F5138BD5AF1EB68E7 + 85: A929C6B8FD5599D1E20D6A0865C12793FD4E19E0 + 86: C0BFB5D2D75FB9FE0231EA1FCE7BD1FDAF337EE0 + 87: AB5F421A2210B263154D4DABB8DB51F61F8047DB + 88: 1B8F5346E3F0573E9C0C9294DD55E37B999D9630 + 89: 09DAA959E5A00EDC10121F2453892117DD3963AF + 90: ACB6DA427617B5CD69C5B74599D0503B46FC9E44 + 91: 9E1BB68B50BD441FB4340DA570055BBF056F77A2 + 92: D3E0C8E0C30BCB9017E76F96EEC709BF5F269760 + 93: BE61BB1BC00A6BE1CF7EFE59C1B9467D414CF643 + 94: 19D693B52266A2833ECA2BB929FBF4FCE691A5C9 + 95: B99816886D9FE43313358D6815231E50C3B62B05 + 96: 7A73EE3F1CF18B5E2006A20BB9E098E98B6513CA + 97: DEC620F008EF65A790A7D1139ACE6E8B8EFCCA5E + 98: B6BA0EBD215CF1B35742A41EB81A269ACB67C9A4 + 99: 3A0FAAD14D3B64BE4EDB9D5109DC05DFFA7680E2 +100: 12E62CE53283B5422D3EA5D8D00BC7F0AE8A127C +101: AA36F0CC6B50AB30286BA52BCB9BB5C1BD672D62 +102: 55120C68B419FE5E12DB526D4ABFC84871E5DEC9 +103: 372BF92A9A2507509C3D3932B32444B7BE1C9BAC +104: 7AB4B04EEC091F4ADA0807DDD743609BCD898404 +105: 20CB412425E88482E7D184EFEF79577BE97BAFDA +106: DEB91399A7BFB8323BC8E6A5F4045125277C1335 +107: 6769F41624E553B3092F5E6390E4D983B851C98C +108: 716760E4F99B59E90A4F914E1FB72A6D2C4B607A +109: DA0AA5548B5C0AF0CC494F34CAB662A30372DD11 +110: 17A0E2CA5EF666EB34E2ED9C10EBC5DDCD0D9BBB +111: 1B3614AF749EE359F64F3BE3650210CC3C3498ED +112: 346E604622CF8D6B7D03B9FE74E7A684AECCA999 +113: 629E46882D214F9BD78418C2A97900B2049F1C83 +114: 765F86114E942214E099E684E76E94F95E279568 +115: 002ED578F79094B3D7E28CC3B06CD230163F1586 +116: 52CC9748778AF5C8E8B41F9B948ABCECF446BE91 +117: 9326190BF3A15A060B106B1602C7A159E287FD4C +118: 18A5DFBAE6E7C9418973D18905A8915DCEF7B95B +119: 6D25BF1E8F1244ACB6998AA7B1CB09F36662F733 +120: 5F9806C0C1A82CEA6646503F634A698100A6685D +121: C3362CE612139290492225D96AB33B2ADFF7AF1E +122: 3D42A5C1EAFC725FF0907B600443EEF70E9B827E +123: 7FF97FFC5D4F40650D7A7E857E03C5D76EDD6767 +124: 3A92F2A18E8F593E6A8287921E15E2914DF651EF +125: CDE6F2F58166285390B71640A19BD83CA605C942 +126: 21A227A8DA7A9F5D15C41354196D79FE524DE6F0 +127: EBE93AB44146621BAAB492823A74210D3E9FD35C +128: 6560BD2CDE7403083527E597C60988BB1EB21FF1 HMAC-sha224 0: 6E99E862E532E8936D78B5F02909B130AB09806B2AF02F7CB9D39D12 @@ -2579,6 +692,137 @@ HMAC-sha224 127: 5E43945BA9DE62C364E34CC1361FFFEE9BE8974D7CF5D2E06428916B 128: 0FF4DA564729A0E9984E15BC69B00FA2E54711573BEE3AD608F511B5 +HMAC-sha256 + 0: D38B42096D80F45F826B44A9D5607DE72496A415D3F4A1A8C88E3BB9DA8DC1CB + 1: 12B06C3218C858558CAD1DA6FE409898C31014D66CBE4ECD47C910EC975E104D + 2: EDBEF6AA747C951F25AB6AAA0D874648CF18FFECC4C9159F8FC71E971FAC6D21 + 3: 03436338A166E9051599AB268CD74867C6159378069A9FF46FC07CAE375EDA68 + 4: 634758DF0774A587F3AC6AD7988D0965524DE24EBE4DFF07EF622BCB8DA71ACD + 5: 0C08E52C7CFF8B5F70781197069DC8F209552D241687BA0D24661CCCC28D3937 + 6: 749F473E0D934694AB9917569A61591CA50BEF18CABDED51666DF243DE879D53 + 7: B1E12CFE0273F5D27192D1A4B70EEC4DDC714B66C8BB1921C63381F78CEC5219 + 8: 1C60F13A1C539788E989BAC2EBD4F8E126EE6ED82C2E25817C63B2B633FABD33 + 9: 5643F445B2C0656A49BB3DB5088C9E2E4B2082C2B611BBA0DAE5791F2FAA5D43 + 10: C467F47251DAD4694C9C7A6758E54CEBD68FC933C7C57458020774A2A2B4288B + 11: 85C90CF2719BEBF40EF8D501FDA20C342BC406E728551BC0275ADA1747BD981F + 12: 06B72DAC895B008DA249B7B1D8A5133F09D86BF82DE2C4251BFA6C3D8C4CF03F + 13: 49EDB6714A556DF324E41A3CE5B57006E38FD7CA8B90FEEA2ACAB429204747BE + 14: 7411921D759DA0B491D6D4CC372DB79CC163F146C345B4A73D93EEB4C262A1DF + 15: 5C37FFBD1F0512AF443265B2F3E8B6D01AD9B45FF6F373D2CD0A7C6E48D03E26 + 16: 773165FD16D51E51CD8A958E548902B47BBD0A6E156C31B6FEA036F6D8C4A90C + 17: 5B4BE909754EBC8ECBBB8B5DA6298B8341B35D92E17CE7281909EBA1EF568347 + 18: C6EEF2D12F54815561EEED3426D7AA7E671E26D42384B9478D91FC6B14CC76F8 + 19: 4C9FA0575CD96BB1DEF6EA79F5EC7A1F0478E86352812F690C2C2BDB70028BCC + 20: 7F87BA45FC41EC30E76F61E4EADEC013CE2B4C49CA6FE6D2FA525F6BBD45E103 + 21: 9B8CA1D70339A0894E16CE4E76F6655ADDD3EEB598F3DD80FECC5EEEF3F638C3 + 22: E4608AEA430A638799991B748BB858C91AF58F56B226E1901D28336B30498279 + 23: AF4F9C52079B28546FBB44EEBA20C7AF0BF493D34EF6967B07CA32FC4DE25ADB + 24: FE51F3A9313EEDAAA991350AB4D1D7045D42AACF3AC7155DA3AD9A2F1DE3A73E + 25: C1F5AED9D77F85404A4B308A139D33F351B20C91A738E698BD8182F124D96C82 + 26: 3CAC12A252B93B7D724AF9119FD3C18E85E88401F93BFF42AA05711B9833B1F6 + 27: E61D4E94C212324A64B1A0C04B2237A9A1C5CC003D83EA80BCEB45452DCB42F2 + 28: D01BA47DABCE4704B6820EC0ECDBEF137B9C4ACB80DC99B7C9220CFD9F9CE363 + 29: AED502C53A8B2C76F671376CDDBD0596376B3664B917CD9C9ADBC489543D4721 + 30: 3405AFD96584C5E5963362948D112A70155877BE3B5EFD479F226B73351ABAF0 + 31: 5FA0290DC68B72B1FA27DBAF157923C706B3F52CDE9C4EE38CDA31D376B0BC0D + 32: C1391C694C985CCBA707A8C78AD05E2180AF6B4DA5BB877AAC5E2AB33B4890E2 + 33: B018E7B15F92DBEC58F767633BCA3BD0D84B6D5B9443784DC1757166D7AA1C16 + 34: 8D9E2C84967004E3957DF59D502BC11CF8C8959368117EC5DB56AC958A3E791B + 35: B0EAF9C0E869D7A304DDB30061A73C580B0A6F9D49E15442ECFBB3B5A851855B + 36: 0B48B0D8C3ACF7B4F9ECF8E46563C921B1B6720B6C650D72DD1126B6763CD595 + 37: 8879D239EDB09F6606957D96A1F4BF37EAC0F3419881EEA79E8BF1364FB3FF6D + 38: CC663E436DE42E32EA110F9D90EB990D9151C9F06D51243D2076B0CC45361736 + 39: 732DC3B1F809E55C498C53FC75A23966CAEA16BE984F795CB1BC94D026FAB30E + 40: F1F0EEC77D97A0234D0F19B2FB12A96B6E2FF8626F79A74D4AF26CDE1344D838 + 41: 75C9D8C7344668C478D8AE6D9E2C41E336E7A2504CDD43B73CCBF78B4C05EEB1 + 42: 4B149BCA6429408B242E76C52C4D3A0A5F5437EC0AB6D24D71EB1AC5496D75BA + 43: EDB65EBEBC0411B4FDAF186033E306AD500711CCB80E770E99523BB2672A237A + 44: D1BBFF5A48346A0DFD5CFFAA7A2AF08C27F3FC2908D7A5D2F575E07CA9E72474 + 45: E8EFB6373DD3457610E57750738358A50026D2C6704A98148CDD69BFF7B70551 + 46: 8E3733B729CEB97444BCCA405044B98F45FC59BBA86444A3FC0F4DF4854B5C4D + 47: 868F3EE8F4D4DFEDC3FFAEEE1FA069F5FBB2CB818E63C28151C1566634189234 + 48: 3F5396115DC7F17AAB19A3A9779CFFCCA57DE7A7C1A42F748FEC49B7D8C2B82D + 49: DC2A5E3E176A693AD8CAE551A505729B78FBDE778B526E28953BC1A56B54840E + 50: DC91FD745E9A7A9D0B41C79B3B3939B84BDF78BEB007F9AAF8FF82084759223A + 51: E73DCF5413F17D4ECCEC813DC060EF907C2E952AF92DD247A0AE2BE798E6A40B + 52: 696B5EE4C1E1D8B60B0015EEA2389C9A35088022FFF10034D0D09FA722A2A3E6 + 53: F86C07265389512B2CE240A89EA29D61C6C79C2738FACA157B0DE43294485682 + 54: DB31CBBFD28D6F8564219911EFB748A5663E482DBA26E38634E8E27E3CF65707 + 55: 2F9675313AAB7A940AE77CA906D0342A448FDBA3F7589D14B1344D586EA157DE + 56: 7D829FD994258EF2AFDEF22C8CD5CC1D29A9A55B62847B3B6F5DB630421CF999 + 57: A6CDB9BC9AF75EA4680E895E8EDDCE76F536F7CCA571D62781A06DDB3424FA50 + 58: 1B4186A34EB07F5B3127F2BE0F3943610679DB0F6BABC7DA03B416FA577D36E2 + 59: 7B5DFF3459DC10B9B7AA2B2829094F97706DB5B2F133B8BF9F48D90253D68359 + 60: 2ABB68160300028BBF3B5A414970D11DF4FD6F4B4A35029DEF8492ADFB19A480 + 61: B1B13ABF9D20C42E755D63EC63C016126259C8A6C3F9AB3F0F6AC5D0BD44ECA2 + 62: 9ADDD17E5CF407CDBB12E5E52A50CE134F1B48A2A2AF90D7308344FB5A70485F + 63: 6A4C06DF40BA515C56476471D4A94F87A2B91EAFF6C66510892F2F20A342B736 + 64: 555D424206C003BAD0B08BEEA76DFC81B307C79BBB6E4F15325B2ECD37E04423 + 65: 8A58733E0B990D0D82F93F77DF36E30DCFD03B3181B73C544BB097A3A73B6AC9 + 66: 6FCCCCA4172E30A281A702E36E7BCA07370D4B57272385077A44D5F7933DD2FC + 67: 3B1A91E49AF88B1832F8E91109C7CC5DBEE2847D9ACD2A57404DBB565480AC75 + 68: 69584075C278763CB0B09D4C9E15E9300A191BF99907049F14EC8DE24D86C121 + 69: 2EE24340D13E68B10B95C3F77D55027F98BDE6BA5328D0C02CF89965687C062B + 70: C04B37F5932F427D40E21EEAB7C9594B16BFCF4F5FE2BF175CD63C62F2CEEAA2 + 71: 058E1AC8971ADD2617A4BF7D02B46A8B74A4D52B25643DF9729A1E7DF6CCC86F + 72: 18001F246ABC760197482E25F3AC64B14A795E55B41B505D6027261BFDE7C52C + 73: 4AEAAED524B173E08E54A83E2D9A8B8824E6E2F1B89203D698E9BCE7C3242F8F + 74: 7D82CFB1D7427302889CADBA23A99154CBAC0C9ADEC94EAF29EB07DC86B0B7E2 + 75: 18D42E92BA532A409CEDA8E3A07E751B430800827F5A9F14D93E3ED231BA08AF + 76: 8CFBA378D8595372DCE5D9A6E726C23512F84C0C1EC3C66ADF6B6C55DF63936A + 77: DE1A6E280A9054C91B826785928F37A16E1D2A9A3CEC831185B26D2B8EDE158C + 78: 920C40B4204C7F3D4775176BD245BA0276604C568B3C29943C9AEF1A1C93428A + 79: 935BB39E5FBCE5C4A15AC2A854475578CF80308E531CA86818DABE69BED8824A + 80: D608E561471CC09EC0865C826242CA26AA1C90BDF1625E1A38B96E3EE0CC5F04 + 81: EFE2A8D806A1A71596A05A2F5F48D18CFD4A742247B04E8089FAB27291A8DD50 + 82: 80235BE35DDEA5D49F124D8BE3D143F87CCBA7D0608C7E2CABBAAB01BB95E477 + 83: E9410E0DC14F3BE36A49A5CA673C12E18CBE4F0817E0C1CBD2069349F8A09BBB + 84: B2042A81A36F27B4CB96DBB52A61F701A815869FF5AA0CDCAD0327E1ED1C2F22 + 85: E9E5A9501B24952DCFBB9D59CF95A9A9E6A27FB7315EB472D1E2B7F523D06D42 + 86: 99193B4FAFEFFC932B261EF169250B96901ABF877424FF667CC0DA0154C50498 + 87: 1D9C7F7E681D20E1E0324EFE71C8B6913FE8CA87EE52E443335115AB2C458E7F + 88: 7308DB7E2591D2342109C5084B1174F07D289FBE91472FB2D8C06DF39F826B84 + 89: 90F06ADC29070DC50A23D3F093007E273E783491A70A2F0AD6BA40E34F02518D + 90: E676DEEDC972019F10FEC24B4AEAC0A97870E924F7B1D6D3ECF91EF38A2AC544 + 91: B5DA3B40FBF373795E67A6338F9AC3AD742741F34048930D9336D429D02EE78F + 92: 6FDE20988863CE157042EE52065EEDA233BB2E6EC0464B9DCF2AAC1F3A18971F + 93: 428D4CFF477F0F0379F634D1E7C15E4CE6DA067ADC45221A860C9C3AC4235753 + 94: 9EC80B57E921DA3F81D13B65AA851F5971E4074C96E0D8B64E50A7F5089C1FC8 + 95: 9088151BEF766D0896A48EB6DCC8A09D151C3396FBF3A9FE193C5E7BF9030B01 + 96: 86D853024A762536666316F363BB867EFE25FBD03BDD28EA7522973A1A1BD95C + 97: 007104BD935B532BA4702A78C505D67B41358A61DB8069585B91B1445DC346B5 + 98: 5C5709F6202948E805FAC25C454ECFADFAC693955864494E511F0CD1FC9CFDCF + 99: 0B010F71C5323CC96D3B8DF71170968096E44969EA55B4C3DAC632D30D81D529 +100: 54621EC4F31CC7F6273601D81674612B44726B5CC4A76EAD2BBC3D32DBF62A9D +101: 28EFE1AB745BE64E5DD7286C97360FF2D287F862ADBE44380F85E1388008079F +102: 831BFA684C25542676AD52819249A10D9EF9C2505D69CC1397D0D39D08B39E5D +103: EF7922C40CD96A47C5E7AE4D958B495F1D6954EDC20596E303CFBA43190A9EFA +104: 3A0262EBC746A7C044C1DB043951F7EAC645C40F554898D3D7B2B7AAC4EBD396 +105: 1F2CFBA7275639A12DA7CD1986F920C47850DE3FE13C931618C0FAC765820ED5 +106: 7AC8913C0975101E187FDADDAC5B5EC467A25869C4E630EADBB42DD2DFE4958A +107: D386591F326C91D274FE625A667B6F9F6F7D99CF56ACB365A218F1CF8E167A70 +108: 66286CB1B61156B005CBFC94C2CAB1A6694D7F123411B8A123F2ACD821C291F2 +109: 844D1038E710690050DA737D56FD6B17C261C7BE512713E62033384B53C40902 +110: 7EF970C40080F554851277F4E950C6F378B0A3DA3CD1BE250D976162F8A4EE79 +111: 9BC20A2B67566688BCAC77FCF30259F11D9B2FD2277D033E6AAE19E36058A353 +112: 796C72D95BBA1A4341C6B0397E165DD21CFBEF55555B35C717CE33B6C6ADE490 +113: 1E6A9C1F78AFF266EF8FB25C32C1FDFB4A0F64AFFD046D257470BF6DAEF61D6D +114: 0E1AD927AD658C5E0321333AF8AE4ED69903B4F22C5DFF90AC93268507A7C86B +115: 07B7A778E2931704E7FECA284FF3B14071E255A2B824AD0A2272D21448579CEE +116: A8D810DF06368A0E825D6DB4394916E43E217BEE9303AD4096A8E1CAD37B8703 +117: 6A9C7D302CCA1EE170366F355D8F40AE3A20D28BFCB2BA163DCB68E08DACB748 +118: 40C3A8B08FF9F767491E4243D1808572FDAF1D8CD21AB47115849531513D0750 +119: F26EA6760AA80360398371855783815BCD34431E0CCEC58A34A67997ACE43CEF +120: EEA78D68A509988ED6D7E3F27FC22F3EBCD570EF0FE242A0251457EAC4C3C1F4 +121: AF977819B87F2E63C0E131DFA2A31C555AD831ADCA6DE0FC1BE48D21A1E7E666 +122: 846A75DF3691B2BF224FB0E66E360A2E8BB1DA32422190F2B319B73E6900AD42 +123: FFA997FCFABC9FCAD4B58B0EF848890FB23B974CD57FA07223037450C371B116 +124: 0028C776965A0AE5E9E70D9B833BF328BDBCD06C5A12A2F1C510911E60AA304A +125: 7FA234C59957C214A7BE8D1B909C540B48E54414EE5FD1081B4C339FD2204515 +126: A840BEEBF2C2E80AF2E4830BB26F71AEE48A9C65DE4A9425DA9F98FA3A37DD84 +127: A95332415EA29A8CA6FDB0F771E3F2262C6907DC45B0AC8BC229F6009323C3A9 +128: 8B185702392BC1E061414539546904553A62510BC2E9E045892D64DAA6B32A76 + HMAC-sha384 0: 44BE81C415D283AB7A62A45188E5DAFBCB97DA606BD5B16C92C1FC36F198C0B3A714921848D5E03DF1C4849BB8310C66 1: C1E1E68D864F758941B87E30C262348B373F167CE4629E4117FBA208773CCC2E6C7797AE5D6BBE2ABE6BAD4DE2E1052E @@ -2838,2882 +1082,264 @@ HMAC-sha384 255: BEDDC3C0E168A4B14B023DFC1AE07BE9A418678494C2399695EA9B17843D373077A708F8C82F37657BDC101950FED664 256: AA5D7EA1126BF16DA2897AE036E94D1F96875AD306B19910EFE3F17B7A98F9A4163E4032EFD17DDBF78FE3321047509C -HMAC-sha1 - 0: 06E8AD50FC1035823661D979E2968968CECD03D9 - 1: 0CE34DEAAD5CF1131D9528FAB8E46E12F8FE3052 - 2: 23924849643D03BBEAC71755A878A83BD83F5280 - 3: 6119DD9A7024A23F293A3B67EFA2BF1D82EC0220 - 4: 379DC76AC2D322FD8E5117CCA765391BC0E10942 - 5: 7897CC86CFF17A3F95C7AF02CCA03546F5CC2368 - 6: 1FA1EF3980E86B8DF2C8E744309381727ED10E8E - 7: 03B2B726D71DAC6A2BEE63EAA09631DA78F5958B - 8: B8CAC4C104997A547374803B5898057B3F8110A9 - 9: E165E07F8D542FB288C7D367198D0618DE3C9917 - 10: 18125F046C675F434B3C53A28C301FB2D91B5D34 - 11: FAAB993F2FEAE442D28FDBB613D2C768ED13342D - 12: B657E7EE3A65C6484D007E21484813D9AED1264C - 13: EEEC2BB7BAC158742711ED13090FA20462A5E5C0 - 14: 12367F3A4E1501D32D1731B39CD2DB2C5DF5D011 - 15: 57DD9DA36E7A4E567A2C5AE9F6230CF661855D90 - 16: E37110DDD295D93990C4531D95564E74C0EBE264 - 17: B2115C4E923EC640E5B4B507F7BC97FE700E12DD - 18: ED20C67345867AB07E9171B06C9B3B2928F43188 - 19: 6CA7DFC9F8F432DED42E4EFE9F2D70D82507802D - 20: B39EB4D2C190E0CE8FA2C994E92D18CFBCD8F736 - 21: 91BE5ABF1B35F6227772E36337F258420CF51314 - 22: EB957199EF666C6D0EACC64FC4261D11C715BB23 - 23: 2A18D8D4AB1F8C528C9D368BF5A7CFFC2168D067 - 24: D4DC370D482D82932701DF8CEAC9337682C2551B - 25: DB9665A6A26DBDE20238F04E9F1A368D26564E4F - 26: D5AE212C9E543F2656699B59DEED54CAACA9A071 - 27: BE8890F9DEC6A02AE2848D8505B6408E884E6D1A - 28: E8D9DD9FAA3080560B0EDE798B745FEE2A1E5479 - 29: E219219D2CB8C363C2687F578446ADE1C0404287 - 30: E8E7767B35ED8D0965F68272ACE61924CB044262 - 31: 1B26689C1EF55448A61DFAEF98B6E7206A9675EA - 32: FE850390864E98A17FC43C3C871383169741B46D - 33: 3F63068D536A282C53E5C003BCEEC96646CF7455 - 34: 2962C292CE247F11ACB7E1F981447C51E9BBE63C - 35: B28909A2B7B2E0E13FDCB1124B0BDC31D7D2FEDE - 36: 8DA0FC30C8322DABD67D61E82FC92351894789AC - 37: 543DAC6D449FE2DDC3201927D08695F68F832905 - 38: 371540F3092F77867F0CA9DA69318C7673F68388 - 39: 7EAF32204EA5993C87E9A12C67ADA4C85D253281 - 40: FC4994BAA05F592901085ED7DA188EC3A9BF36E3 - 41: EBFE77592EF34E81BDA05305876411484DC0744F - 42: 25F64E8F076305D6F5741EA58232F68B725B8F6E - 43: 5DBA03F7E4B4226666F0D8D5BF49FEE77951D121 - 44: 98E1D56D723DCACF227D2AC67BF2D6E7FD013497 - 45: 53550BC55A367D87416FFA25261362E7D4618DA2 - 46: B18434BCCCC5F08B35397C1A6684D60F4F3A452F - 47: FF2BF38DFC6909B46A01E055D173F67A7E456341 - 48: DAFA445432ED37FEC99059DB8A0BC528E788E95D - 49: 7FF823C570F8B4C0E483165C076AEA7B5E727632 - 50: BC4FC948AB621FE1419CF6006DC04E7D7B32FA23 - 51: 1678AFCC3FBD1063E7C82CACAD5B6A933A93091A - 52: 97DC2F9F56738FDAFFD555BF09274153FC2FD009 - 53: 74F5CB4F0900441B7AFFC278C01A3038DF3D60C8 - 54: 021F66143270C9D58F26AB193DBA81A811917CBC - 55: F486D1C8127813FEEEA8A693C4B8ECB5BB53C3A2 - 56: 8397CAB8EED5B2164FEC6BE688971DFA2138934E - 57: E4477CE9BF8CC5A4CCDE039B4E3000F1A0F4153A - 58: D6D2D1E3EE4D643AC4B38836AE54E846F99B376D - 59: 9545B2C6279371D4D928AEE24328121D43DE1E5E - 60: 947ED38EC087C4E53F417E8216408863A8EBFCB2 - 61: 32518A2326ACDE1E962B3D0D2BF950F318894E83 - 62: 5D21D368FB9D879ADC27B341D608BCF860AB14F4 - 63: E2BEDD94D565A51915B1EC6FA9DE18C62D12533A - 64: 15ABF657DB6473C9E2F017C7A2F4DBA3CE7F33DD - 65: 0C9DAF8D959DAE3B66FF8A21A94BAFC523ABC462 - 66: A36BE72B501D435CB627C4555A426C4ADAF3D666 - 67: 1C171979D67A014A0422D6C3561C817A354CF67D - 68: B75485B08ED052A1F4C3BACCE3C563DF4BA82418 - 69: 17297624219C5955B3AF81E5ED61C6A5D05BD54D - 70: 38A9AC8544F0EF24A623433C05E7F068430DA13E - 71: 1E9EEEAD73E736D7B4F5ABB87BA0FABA623FB2E5 - 72: 4B9D59879EAC80E4DAB3537E9CA9A877F7FAE669 - 73: 7F76F2F875B2674B826C18B118942FBF1E75BE55 - 74: 1716A7804A9A5ABC9E737BDF5189F2784CE4F54B - 75: 168027EDF2A2641F364AF5DF1CB277A6E944EA32 - 76: FBC67DED8C1A1BEBBBC974E4787D2BA3205F2B1B - 77: 33DD26C53F3914FECF26D287E70E85D6971C3C41 - 78: 97906268286CD38E9C7A2FAF68A973143D389B2F - 79: 45C55948D3E062F8612EC98FEE91143AB17BCFC8 - 80: AE1337C129DF65513480E57E2A82B595096BF50F - 81: CEC4B5351F038EBCFDA4787B5DE44ED8DA30CD36 - 82: 6156A6742D90A212A02E3A7D4D7496B11ABCFC3C - 83: 3040F072DF33EBF813DA5760C6EB433270F33E8E - 84: EE1B015C16F91442BAD83E1F5138BD5AF1EB68E7 - 85: A929C6B8FD5599D1E20D6A0865C12793FD4E19E0 - 86: C0BFB5D2D75FB9FE0231EA1FCE7BD1FDAF337EE0 - 87: AB5F421A2210B263154D4DABB8DB51F61F8047DB - 88: 1B8F5346E3F0573E9C0C9294DD55E37B999D9630 - 89: 09DAA959E5A00EDC10121F2453892117DD3963AF - 90: ACB6DA427617B5CD69C5B74599D0503B46FC9E44 - 91: 9E1BB68B50BD441FB4340DA570055BBF056F77A2 - 92: D3E0C8E0C30BCB9017E76F96EEC709BF5F269760 - 93: BE61BB1BC00A6BE1CF7EFE59C1B9467D414CF643 - 94: 19D693B52266A2833ECA2BB929FBF4FCE691A5C9 - 95: B99816886D9FE43313358D6815231E50C3B62B05 - 96: 7A73EE3F1CF18B5E2006A20BB9E098E98B6513CA - 97: DEC620F008EF65A790A7D1139ACE6E8B8EFCCA5E - 98: B6BA0EBD215CF1B35742A41EB81A269ACB67C9A4 - 99: 3A0FAAD14D3B64BE4EDB9D5109DC05DFFA7680E2 -100: 12E62CE53283B5422D3EA5D8D00BC7F0AE8A127C -101: AA36F0CC6B50AB30286BA52BCB9BB5C1BD672D62 -102: 55120C68B419FE5E12DB526D4ABFC84871E5DEC9 -103: 372BF92A9A2507509C3D3932B32444B7BE1C9BAC -104: 7AB4B04EEC091F4ADA0807DDD743609BCD898404 -105: 20CB412425E88482E7D184EFEF79577BE97BAFDA -106: DEB91399A7BFB8323BC8E6A5F4045125277C1335 -107: 6769F41624E553B3092F5E6390E4D983B851C98C -108: 716760E4F99B59E90A4F914E1FB72A6D2C4B607A -109: DA0AA5548B5C0AF0CC494F34CAB662A30372DD11 -110: 17A0E2CA5EF666EB34E2ED9C10EBC5DDCD0D9BBB -111: 1B3614AF749EE359F64F3BE3650210CC3C3498ED -112: 346E604622CF8D6B7D03B9FE74E7A684AECCA999 -113: 629E46882D214F9BD78418C2A97900B2049F1C83 -114: 765F86114E942214E099E684E76E94F95E279568 -115: 002ED578F79094B3D7E28CC3B06CD230163F1586 -116: 52CC9748778AF5C8E8B41F9B948ABCECF446BE91 -117: 9326190BF3A15A060B106B1602C7A159E287FD4C -118: 18A5DFBAE6E7C9418973D18905A8915DCEF7B95B -119: 6D25BF1E8F1244ACB6998AA7B1CB09F36662F733 -120: 5F9806C0C1A82CEA6646503F634A698100A6685D -121: C3362CE612139290492225D96AB33B2ADFF7AF1E -122: 3D42A5C1EAFC725FF0907B600443EEF70E9B827E -123: 7FF97FFC5D4F40650D7A7E857E03C5D76EDD6767 -124: 3A92F2A18E8F593E6A8287921E15E2914DF651EF -125: CDE6F2F58166285390B71640A19BD83CA605C942 -126: 21A227A8DA7A9F5D15C41354196D79FE524DE6F0 -127: EBE93AB44146621BAAB492823A74210D3E9FD35C -128: 6560BD2CDE7403083527E597C60988BB1EB21FF1 - -HMAC-md5 - 0: C91E40247251F39BDFE6A7B72A5857F9 - 1: 00FF2644D0E3699F677F58ECDF57082F - 2: 1B6C2DB6819A4F023FFE21B91E284E93 - 3: 04B0ED3E73FBB9A94444FDFFAA530695 - 4: 1557A22261110DFB31ACE25936BDE45D - 5: 54C5A67A9CB4544CA66BBDA1A2B8479E - 6: F803D9E43C934545AF078FFBB34BC30B - 7: 32F56EA655DF36D845E430D637C85D17 - 8: 14BD2095F4A478C10EEBFF379DE76DD3 - 9: AAF6867B3FA01DD26312B0DFD6371A2A - 10: 0FA2A6FEFEBE7CE3C31A38400F8AB260 - 11: 54C37BE13B7333287D0E74AA9D9227F6 - 12: 385D75A58B0C95E5CDC059DB168BD1D2 - 13: E73003103ED65C08E62D46AE1E1B771A - 14: 278ED4A4EBEA1FFA5EEC874F198C0CC0 - 15: F65CE9EEA7FDB90B9CC603329D3FB9A9 - 16: 8640836944EE0009B2CC6FDC3F5C39E1 - 17: 7819A99F82BABDF060AA51AE109629DB - 18: EF26336668486C76921D1DAB67ED5673 - 19: 13ED7BC140F1496E09AD29C644586957 - 20: 5FDD337CE9C4AC8D910833FCC2BD837E - 21: E9470246ABF7CF4D37FD378738D8F763 - 22: 384A75C33EFFA12EB69187BB80DF843B - 23: 63866A5406B9EA0341032FCFD0244A4B - 24: 8042F8572C8A9B88E135ACB83EF1FD39 - 25: BD1BE6AF2D022F966F612569E191F0E9 - 26: 9F70C839533EE4C7B3CF20C6FB65C94C - 27: 800A5CE92CA4FEE6F1D353F496113873 - 28: C35E93E1E54C84C4389D2DE71E1B9846 - 29: A130EF5F91465F5A56999F450E63F4F9 - 30: 5F16564E05285A099F628245DF9A3C2A - 31: A34F7E3DF06DD84CC67E8A922240D60B - 32: 945E50753B6E6C920183822D5F280F10 - 33: 2DDD269DBCDF5C21A1C3FD540FF4ABA9 - 34: 212FE3E2CEF7DF74FC01CC2CC83119B8 - 35: D98B2930011649F16C08BC8C0178D838 - 36: E39E21026111C1EFB0C491C0FDFA841D - 37: AE46DE06C3B0D2CEC35352C95A1003F0 - 38: 5550EE50BF88C9DE5ADA34567FE044C7 - 39: 6BC486627760373EACFF508F7032BF31 - 40: AE6E0B8DBCFDCCA4B3449B57647D5AE5 - 41: 6BE5A0F140DFC4B75439630E6F9A36EE - 42: E3E4E735BFE79397D4653A6243DF1925 - 43: 68C1D9E8973A3F6B92B588469D68A2A5 - 44: 956132D512118D5F446C8CB912B924D9 - 45: DF5C2AD650B3CA7A89EBF92EE618C845 - 46: 14D375CF7E4294ED99135E4237414F01 - 47: DB966D40B447692E2D13CC0C09C1B495 - 48: 53DADCF1C6B99BD403052A1CE1ED0D14 - 49: DEC4A3C1DB8F6AA4515C512C9299C4DC - 50: 3B3A51DD83AB1DC56A7F0CBE1C71923F - 51: 03C73353B3203EF9CDB95F9DB8750AF1 - 52: ED9E15FD86D66DA2D546D2BFC55041AD - 53: 81B649338F9DB1C6E592427D38221C7C - 54: 92E170E13BF40FF65E3B4C665F222DD5 - 55: 00D5E23F5F829B21D454C4445851AB53 - 56: 39057029AF0B3F4391A7BDC6DDCE4D07 - 57: 2DEACEFA698F9CCAD5198C4E17E69A93 - 58: AD35FD52EA199E26948009DF3546D3A2 - 59: 4C42CF2CFD4D8FD9A06E3F73D02FE818 - 60: 4D7C893E4313FFF72103854463414277 - 61: 3F04E8B32AB56EAF216503E46BD7AEBE - 62: F015DDC3EEF41ECC93E944FA3577DB52 - 63: 31F77A50A2ED96ED8E4A3CE04B9DAA23 - 64: FBF481373481756E0C88978F7E0809A2 - 65: 7D8D793B287C04E7D2896D76EAA5CA15 - 66: DAC74AEBECC2385DD9D0C3147CCA1F78 - 67: F6DDE50D37B460FF5E8B4C03A0854BD5 - 68: 5710D6A54A2124E06A6DADBE9BF76119 - 69: 19DB5D13A53E57184759F33976537AA5 - 70: 848DD8D32130626FBD11B0133C2A29E3 - 71: 4F75BE04BF2F6DD85D048DB82F19C38C - 72: 4AE9436540ED24BCB5EC62977AC90789 - 73: 859D1A9FC2B795AD60F24A37EB9EF890 - 74: CD45865317FD17B652DE9F9EBBBA16B6 - 75: 52313319D395F453BA2C0A0159CF180B - 76: A7B190C0EECACCA4DFC5B45DFB324718 - 77: 23E85CAE85B50F45F7F48EE0F22FDE85 - 78: 6A80DBFF139A5345235EF76586CFCBC7 - 79: 850E638FCE5A2F3B1D1FE9C28F05EF49 - 80: 797CDC3F7E271FC9A3D0566A905D1CFE - 81: 030CE97A9A0B1D5403E253D883FCAF12 - 82: 648FFFF44E416D9DE606BA0DDB751194 - 83: FE15098E0DAC65FA8EE45CAC67121CC9 - 84: 17C90ECD390A8B41046B4C7FA0354E4F - 85: 7D149DFF5F6379B7DBF5C401DB6D2976 - 86: 8D055A4701DD51CB9D1AF8E2AE59BD21 - 87: F3481CB07B034EB4A023D00D4FDA9A86 - 88: FEB22562FFAAA9CCE5CDDA34C29E55C3 - 89: A620AA447216709D8CE5C5F23474ECF8 - 90: F25FCBB2BF7440C5E3C5B53092B8C828 - 91: DBBAE1CF60BBCA0B05EDEA0B362F0A33 - 92: E18E85BCB4633A797FAF7975CEF44B84 - 93: 1BE27EEC72C2EDE151978705C7C7DED2 - 94: A15D36C5C5BED77699838832FC225DD8 - 95: 08F31E68BFBBB420742F80B20B69BE8C - 96: 5E9B4B5B3228F533BA8EFC3C0B9AAD3D - 97: 1239BA6D941D1D8AD2ED561BF517D4B4 - 98: 5233F50218E0D097EFCC68F1536F30AE - 99: 340B47C78B003272EAA4B9D22C3B0542 -100: E7F11759FE8A897364C21767570885BB -101: 054BD6ACBFD5421C0290B0839C0A0ACC -102: CC0748F7B2CC921CF5FA019F955066C9 -103: A4DF167697949B1AEDBBA3226A334BAA -104: 29893B9776BA5E750A9FCEA37B0116AE -105: 2DC25C935F006F7965FAB3256D77004D -106: 24089811FFF2189FB9AF38651F43977D -107: 0E048569D634BF652CD8EBF859C9B69A -108: 00386B569DAB73844A708BA5B48BBAA8 -109: 8033E1AFFBE1218F81C8331343FBE5B5 -110: 9B82008A34F3847C1204ACA89F3D57D1 -111: BE1A529F88AA05A42AFC40F663E97849 -112: 5237637AA645E83B0E56A1361AB80643 -113: 15BC4405E891ADAF48FA56D4356705D5 -114: 0820087438832B63AADC479CFC88BDBF -115: B1E3BA7E96605D5FF614B1BEC1F57AC1 -116: 838A096D64E6C0DDB069DC89E4C3F839 -117: 934BCE159F3959A933C87AB497CA8D42 -118: CA501F1DE619A570DC38FDCB8B3F7722 -119: 033B27D5994A6F5D5F6800539B69E876 -120: B447FC68FEF4E3CF9290B06EB6AECAA3 -121: DD3D3F72F0F1FBCD030D839DCFEE457A -122: EE73C4C996E0150D93B3144F20FB2C1B -123: 5AF9679D2441542391C6A903FD8C1626 -124: 2BD84B87230511DAE7256B62A46AA45E -125: EB159E5694C191F7708951EBC0AAF135 -126: 60F02EFE1DAFAACF65F6664A2321B153 -127: 14E5A0E90D4420E765C4324B68174F46 -128: 09F1503BCD00E3A1B965B66B9609E998 - -HMAC-blake2s-128 - 0: D9A6509D3D2811A6EA00396B532E2B04 - 1: F79B6C460ADB138E9A3078D30CF1CF41 - 2: D03AF0A5D31238C70BF2FF9932178EC2 - 3: FF4505DB5B00CE433974EBFBFA9C61F3 - 4: 0D746A6E87F39DB33368405D4C725C01 - 5: 4E9971E0DD79E62594064E7B8555288C - 6: ECFE8163755587A22EE56B5282358D79 - 7: 530A343749AF55CE7C6E21AE417B0B0A - 8: 6692708FCBC74B441F9ADBE2724438AD - 9: F9938A73391B5BE81FAB9D08917D536E - 10: 2F9C62131AA9FCA8EE9E6958A07E9AE6 - 11: 0B995D0EEA8E157BE7282CE0CF4B1A7A - 12: EADA065A4846CD66DC33A43035F3E125 - 13: DEBD58E85794350D2D29E28A548E6796 - 14: 1CD3F6862568B0B734871C2E161020FB - 15: 93AD9B9E2E48D9D58DE3588479CF20C1 - 16: 54FCE32A581D99F8AFEB9F87078F3037 - 17: 45D33CE2809663503A2C064F34FCD6C5 - 18: 642129A619B3E550394E5A95B5711158 - 19: 866ED5891E4C7FFF22D3FB3E55CBAB5F - 20: 91DDB23B639D178D58DB3DF6E995CC3D - 21: B503D9288A68CECB4166CE7BAEC03CB9 - 22: A936BC69C1A57B4FBB1CF832824DF2B9 - 23: 9C5CB33108D044572C40BD0F1F4063FB - 24: 7842BAD82BA10245E8CE9DB4BA05AF2D - 25: F5E149656E3FAF650452B2F61DBDC4F1 - 26: FE874FFC33088BB88DB4C6672B86C0FE - 27: 2CD8160DCF17084BA9C4F25A6908CE61 - 28: 4BA2EA1C10D004AAAD91324C6D088ACB - 29: 5474FE93522CC4A91037E1EC2A79CB9E - 30: A32A423D018B336AD461D45A4E25E403 - 31: 8C15330F714B2FAC8326CAB9BCF5E8B2 - 32: 52C43169125A66E41A673741D8CA9890 - 33: F74AA0F375061D11DF081DE41523753F - 34: 155F2BCF9D479F09C1B60A0CAE587B54 - 35: DB082767BC6DA25719D60B1DA4D8C82B - 36: 7DBC0D6181091DAC48E055638B766502 - 37: ABBF20F9E6A9D6A834AF1636C043393B - 38: 987B018335999FDC01C4545E1894B89C - 39: 5C2DCEEA6A6EF1F382C2436CDA5DB39A - 40: 300FE9F65DC929990F54492F00F8DA6A - 41: CC93C2599F152E82422A272EEC7B5363 - 42: 08710B279972CEA381D34994983620DA - 43: 72CFDEC6CFD987A9B6F3E350344CE619 - 44: 67B8FF6BD7C7B216E5C69FE5D2B4A955 - 45: B97D8DB2B5FE62306D78C2ECBCAB5FFD - 46: 97D29FBBBC0480DD21E6DCD8F76E729A - 47: 5448B03820B7B8C6B8B8558D3905FE4E - 48: 2F9C61A414B7AB3BFBB59D5C98062404 - 49: ADFAAA1CED2D0AAF10663A9C92168FF8 - 50: F04A37FD9663CFC7AA3AD27E641B1C7F - 51: BE05676DD21A5B29C1898D7D8E30B508 - 52: 0EC95105B257D094E83630F4D51ED8F7 - 53: D64ADE612C45364F4125E7FAE80A1E8F - 54: 893155E369AB94CA09732ECC2349603C - 55: F96FF508E46787820E7035E13A55876D - 56: 3387E19C2F26DB6159431F3390FAC491 - 57: 09FCFD1E0F9A282B6BA3A32EFCBB838B - 58: 95849C47F985C3B23637654EE42A3B15 - 59: B137865CFCF7505E21926C5AF8886AD6 - 60: 776F6F212B550961E8581F761E9AAB95 - 61: 1A2B49AC03F4FACD72BEA5D042EFB0AF - 62: FDE5B32633BF9F8F46BCA20377FDCEC2 - 63: 7D889B6E843B5FC92168F8C0571E0F28 - 64: 4C9BFB112352331A367D43E47D1584CC - 65: 95057CE969E8FE681BC1CBCF3F785870 - 66: 098339C9520F932DDA9FE62879637041 - 67: 876F5E05C1DDBB7BE6FEC34B41B07206 - 68: D4B502B77B416602F8C272DCA6F41F5D - 69: 3C15591D5644C185C7AFEE486583ACB6 - 70: EFC75F9FEE23778758483FA86E72B9B3 - 71: 6A4A75DCB183D833492ED7030F6BF99D - 72: 3E48F7484C176C406E78D29C5D48CE7E - 73: 04E67CB957B943BC0C20FEFB7E931201 - 74: 20AD75B9967D16771F6F6758BD48AF67 - 75: 90441BB7795A9D2E35ECACD53DBE7AFF - 76: 4A9417219786E65BD1A486C80B8A71CB - 77: 347DBA5AC5EA0D6F47C8BF91F3B878E7 - 78: 1B82F56FBC1C864F32C81A8D8A5C0BD6 - 79: 133321AFFB4F5B842A9BF8934F63FF4F - 80: 61DEBABD5788061B94FC2462A952F8F4 - 81: 555B2DF9BEEEF2EE96B90F46CEEA662C - 82: 02C1172F35B9E0F2914AC0336069A109 - 83: EE51CE9BC05E37F0F60159DF809C33F9 - 84: F3FCA58EFAC56340BB44A9679E4BE8EC - 85: DF97300079E2E0BD4D4A2508B202B55E - 86: 070E813FD6E2B36A23F21C4394C5D875 - 87: A16CB8D0EEB5C505B629565FBB32FE9A - 88: 06AAAABA7537BD2C85E31D65610F100B - 89: 283DDB4E8911B66C62F68989FBEC6802 - 90: D7416094ADB17FC6C33D3CEBD898C352 - 91: EBDB4E928266BF1C61DCE73370076FEA - 92: FFE60DCE45DE101B5251C912BC1B39CC - 93: 2C969B49F0CEEA3E63DCC917A1D649ED - 94: 0450FA648005EB1BB0B2AA361346A154 - 95: BE1BEFCE99A2C1F550F2308BAC66D932 - 96: 341A60C4D0A71B673B01F3BF87C7960B - 97: 17E2AFDA05A94BDFF080488B1C2B9F9B - 98: 23A6551851E4D71EC261A7CA132CEF06 - 99: 8B10BBDDC7B02DB662FE5493C4546E43 -100: 361CEAD587523282C13AE8C39DA1FDD7 -101: 68F5509C807278A39397F1A5F18FC97B -102: 36F9D2AC6FA67FDF0628BB6BF89C8028 -103: 28C042DB70B923CF5B2CBEADED4DB367 -104: 60CA4E8EE11CD597ECC8C07C223D384D -105: D9BB79B4907142546BD52AEBE3E1049E -106: 29E0BFF2E1883595EE198D5DCBF525D1 -107: 149ABA37AE99875E152E1BF4FF412E2F -108: 02390B64373CF88D274E939C355E8B20 -109: 34DF13EADA0F3B2C71CAA3FCAF086AA3 -110: 34B6FF7256A3B56B839A77672D8BB8A5 -111: 9F0EB9BA6E35208F4BCC2A3343ACB884 -112: E2367A2625BA78A6398315D1FCB56FE9 -113: AEBCE64E2B7D9647A1247EFE8C824496 -114: DBEB7E590480AE646D874D1D1F8F7F43 -115: 23C64273CBDB4CFB849A37DC8F975E53 -116: FC5BA814D687219021C32A850F1C0324 -117: 54475DF428B168985B858BBA5A322BB1 -118: 8C1AC0F39B9333BD5A5E3B4E966E0F58 -119: A2038AB9D9E3AFFE495FC944ECEEA4A6 -120: 1B7E712D61E86B625F82A5E770B01FD7 -121: C012695ACFD62E23F28BB6558FDFAC95 -122: 5AB61590EE427A2AA7A2361E44710BCE -123: 0DF020970F09FE19C86CD889FCC7BE88 -124: AFFFADC4A74B8CB6B4316C8222C07BB9 -125: 9FD53F054EF4B5AF3CAC470A510CB267 -126: FD217F750FA45E0B7D5C9C73454CE1A2 -127: 6DF8FB94D774E2A294FC9D6D3EFB4C8B -128: 1F73E062BD976C36CEACD5BD777B4E62 - -HMAC-blake2s-160 - 0: 13F3871F0D9CB982359D9C6E977871688BC2B15E - 1: 45BD7321877A211224FFDF26FE226E4C6B4F04E1 - 2: 2D9D50A09858649136D611F612EC1554FE52EC75 - 3: 431A1116DD8B4E788E13B1D2D5431ED054537FFA - 4: 472C89AF44BB957CB4B6C66AFA43BDD35B7DA029 - 5: 5C5E9B4C1506CA3394023D745F187B1857C8B96E - 6: 0FD11DE5FD818743D86F3B2663A3DAC2204FAF82 - 7: 4313DA2BE7D104331786FDEF496ED257BA0C18D8 - 8: 1B759614B1C5018FD6515797503E73CCC0AFDBF6 - 9: D8A3FC6BCD0D2D92CBB60A8493EAE480EBB54D75 - 10: 17884E85D98766DA6F70A3274B5D3F91AF424716 - 11: B38DDB510E744D029715B14FBC50F90BBCF9163C - 12: 15CDF174E9278E8FBDB1281FE25A653E6E8DF9FB - 13: DE5D5E0589683457EC47D4D8EC0A7C70F255C53C - 14: 220432AAFC2A9CE96E79E248D2134C8F7ABA268A - 15: 7CDC604CC967D9A7D3146C2ECFC3038710A614C6 - 16: BA34F85698412D54A544285C4E1487BFEC35644B - 17: 6DBCE7E42E0B721A33C46CE1E5ED20A9CCB8496C - 18: F8BE2E683773F2DFDFB6B0DCDCD00A304854A13E - 19: 6DF711C49955C45E89FFD62FF0007854936B602F - 20: 03E8EED5288F7EBF15E016C2190EBE8893544798 - 21: 0299CA8ED87A763F94819898AD719366DBE71477 - 22: 3154F3E94D5DA8E8503DAFE32F117D0D202F9917 - 23: A184481D1081DF8B79F3474BCFD45D47300FC06B - 24: 610BDF5276E71C5D6B50DF19236E33D93BBD2D1C - 25: 8B541603B954683BD30421969E04FAD9F70F8334 - 26: 225FF6D4C37F8F8B2D006D764972B11D850DE20B - 27: 2A0341A49812AEBC18E22E8BC67053E90C0BFC92 - 28: 3E1A346BCFDEEB2B406D8952B43B19E42D693F5B - 29: 69A55CBF75DD84C628327A44B029E920BF73F5E4 - 30: 0E802994CA8E45C9FDC89EE21F78B89C3E6D2123 - 31: 6AA819DE26733AA35EC8C0F697ED8870A47C777B - 32: 2FCF9BDD9E9C46F3B4C34A315C22C7E4189CFE0F - 33: 353DDAFBD05691C0BCBF99260ED8604FE84DC6D7 - 34: 44DF49D9B9727BDBD4573FE184D8A5216B359D21 - 35: FCF21A74F868919F8AA7B0C72F17D5C159071C56 - 36: 12479686B6F46C277C6705070BD1D32F8DAB67BC - 37: AD8B56B9547CC7AE42770D37A349306FF8594D2A - 38: 8D3107FC59D43C818DEFFFBCA70AB1E17565BC30 - 39: 2458744B470CB3BB73EB0A966288462A87A75BD2 - 40: 6D94FFC6446FC1D2862A1AC089B010AB16AA9884 - 41: 198D66A09D7B4794FCE770CC622EE104FE237B3D - 42: B26EB75B76AAB6BD3C95ACE957EA77BB18A64DD9 - 43: 0E0761261FBA216C90F23425BB0297D577E1FEF8 - 44: 7CDF4EA63F6995EE7767BC4A643BEB80B21F3F81 - 45: F6C45B24451512BAD9B3A950A068BEA2F4085D09 - 46: 5793A84D61C180D4C4A8BB1505786EA7547379DF - 47: 10FD9FD1B2A2FA69B0BC48D22E80061BEB939392 - 48: A5EED67A0FB6645CD4F9E60E47EC4F32006FF294 - 49: BDB6F95279A63916B1D2F265544AA46E2582E87C - 50: F9ED46687EA2A5F314378835950865204AB97B83 - 51: 8309367D55BBDF584688B296AC823175B2DE00D3 - 52: D624E2F09BF9E49548BDCA56B6CD5AA36B4FD82D - 53: CAF70D309CDC3849BED6D2E1D0BE85D6F075CF9F - 54: C444C9241B3EC18464C9C120995B557FCE322CA3 - 55: 181A25606A0FEE681E5F8173F0BC11449CE2DD00 - 56: 55B5D5F5565D1CB029FB5E2071A523E106523D7E - 57: E67FFF4F7976FCC844AA52CFA8802F6DCFC8818C - 58: CB4E986F509B3BC5D771F0AE6CB2ABD3B9073FB1 - 59: 1D3419C2DF81BC6EF958E03786BE4C08A8945C09 - 60: CA787B50AE2CF4F7E1386D718B0F79E10C1455CE - 61: 5E1639DBF4EE1453D92C62339891AE53D54BFE70 - 62: A6BE68706BAEB0496C1D8F5455064DF3832EF7EC - 63: CF31170D3A3E21013FD2ECEBA82B95B8D6C68BF3 - 64: 32C0B83FD0ECC9F9DA771E03D18C36804943862D - 65: 2C5F427C54D2112430ABA277BB204FA74BF410A5 - 66: 32122F82FEA075A354DFD69A692053F4DCC53A3E - 67: 9F2D35F1A4CF26A9FD54EDF6E623DF9A2B01A276 - 68: 9D0DCCA8B4E85C6FCC5F70BFBB3F900B6A5145E8 - 69: B2F33A492AB22CFB7BA8B2A903569C432C1C3211 - 70: 96417071EE4AF48C70C8F8BFF466F573B0152A83 - 71: 24E31AD9DEBDE1F615A625C029F74A65B441B8F0 - 72: 66B01AC99DE64EF441048FF3F8FE6798EFC09420 - 73: 890E31D986B987495D535C186FC8AF5D9BAE5356 - 74: 1989FA5828C28150294C057F51DDF6C20985F6DF - 75: 95E1227E21BC69CE3EE9BBBD0CDD4C0BC5DCF853 - 76: 9050C21DCCFAB8E6107C2710A43E19B0243F14A6 - 77: 42ED194DFA1F029169FEDB5F6A39D297881F308D - 78: BDD8E2C229A618BACBB7EB00AB0B864382F9D013 - 79: 8D28748367A93D8B70F3CDF43605095114D0A6D1 - 80: 47404E643AC3A58615017B93A415FC888BC386E1 - 81: F547D5C21279FD77C477445A8C3BBF9111B124C4 - 82: 38E5AC1244F786D9A0537C0CA15C5D24F1162DA4 - 83: 27CB8F3CB3203D5494D97ACE99C3F9BEF1DB1461 - 84: 74E3ED28A84FA9832CC21E1C91C5D55F4FEB4763 - 85: 4CC6263C2374DD2A169A52A087C9465F32C93F42 - 86: EA7CFCC877A793D7298A0A37BBCC7EBD16830D48 - 87: D9283B0A1125042728347496AECF3AC57D5457F5 - 88: 00CFEB2968E55D43F9929D7BEF8F4B376351481A - 89: 8BF5DF0E161B65E7C820D6895245CF9777A0874E - 90: 617E10AEC765B114D315005EA0701A9EFFAC1D4E - 91: D2D3857C808897D2571C0DF9B49F533EE01A1F7A - 92: D98B3217C162160ADFAAD4C804EEA894C6C07A71 - 93: E01D6CF694DA97F9900738001949A5CA7009F74C - 94: 1926C8288F6EA0D5BA42E9D1BA35AED6EE53C1EA - 95: 66FD124F7BE58F3F423795EEC14BA840E4ADA226 - 96: DDD3BB5C542D29983AEFC9EB50EEA092E7F81D82 - 97: CDA58BBB569BC8D0DCC78DA3A94C23AED30925C1 - 98: FFE43B5314FAF5049A9316271F25CD4D559341F5 - 99: D752D4BA2CC1E5509D1A778D5C8B695A24F15242 -100: 3BD42DBB774E91983B59892CF9F1D8DB9CA49017 -101: 63040AFF4F6258E5B37A567DE56E0E900F9C1BA4 -102: E4E6A8CFB1FFBA2CC875C316FF31427108A22E53 -103: 6254A2D74CD029F6E0E5AA5420D979F979A0CBF0 -104: 326287DC568844E00CAF2E2443CA01C5A466B725 -105: 67D4982DE0B34D9E507E9BC3A89DEEFDDC06B676 -106: 5FD61FBB0AFF30DBD6DF1CAD3913DDDA7D040AED -107: 795CAFB0CCD44A0BAB188226CFCC9EF6FEC2BE4D -108: BE677F528276571CA00E82ED116ADD504BEB3CE0 -109: CBF1FBC02ED8FECA99D0D86F245F23B3F5A3AB45 -110: 2C5E356A47417DBECA2BEF23B17B05918711989C -111: 0D2D96A78A64740C4CFFEC632A018A270FCA88B2 -112: 77261CFDEA5AF0451F08C5096385FD425312B294 -113: 0C9D743B956F5711B156DE7936BC39460BE60F24 -114: 45B1444EF8899FF57C57874F0886E2D065144DE6 -115: 2E807E3D0F571F4A0D16E44DCBB3F916B78104E2 -116: EC9E3D0929AE03F116D3B328F1987E60A2A33487 -117: 924BF678E1586A719153E534821F91D301D4DCC0 -118: 5408020E4D0269543144B383C66EAF9AE542FB03 -119: 2C54AF352A4CDABD85E1317D2715D2DF1620D51F -120: 6DF7964DD06CC04AC27B92ED0C0359BBAAEDC203 -121: DF3D341855D2A06FF878A77F65D021FE425E3382 -122: A5022518C6145D5F749C09D869C46999302F6DBD -123: 0D94E7B2C49CE48C0E7DD92F3BCD98885D70E386 -124: 7E2CBB2929F1863B67C4EFCD92BD7772DF674812 -125: EA87DB318C7B965C6B5AF8D554A9138EBB06BE24 -126: 668530500F952A0FC14D6B01E174ECA3D1E02C23 -127: 83ACDD54FA0CEE4F748DF552F8B23D0ADE1C5A82 -128: BC6F09510B16CBD54F5BBE43368244806E1DBC7C - -HMAC-blake2s-224 - 0: E159B76803B9082D1EE0EA6076E364CAAB41416AE670CE4BD5DC2FD5 - 1: 20E48E9BE3B788B443CD264409A004216DAC3F993748798079A71801 - 2: D9517495324F2DDF138573659E1E90C72051D5F7D1F566D057F58B0E - 3: 2A74016D8C02B9D1A8832A28F33162379680642F976B1D4AFE21CC6A - 4: 3F97704DCE5C28B91532AD38E4E5D31C865B8DFF2593163784F32841 - 5: D89FDB81CF226C37347E934FF55F8D659DF5479E74504EAF70506C34 - 6: A033764DAEE71BDE3E1B0D8AB3CB02EB5B5F367F025B73A56CDDAFEE - 7: E33B119FD8A73153EB4F9307C77685BE4045EF648D7820A8AE5685FC - 8: 4A493F11945339BE6358C78C2D991824BD1236BA7B2F22E97DB42D09 - 9: 5868C49313029648169041FA48C3163CCB9CE1BE6F52A64982BB553C - 10: BA1935A2582D3872106A5CC405C9DACFED33B1491F99ED3CFA19ABC6 - 11: 7B63271FC7071598349967C0DB69F270A4C5432997BFA5D0E7FC0E5D - 12: C05D09455FBBCFDF863653624CCBDF0DCE8DCC778C0F8D1555493EA2 - 13: 037D0A46B07AE8B8432AB0FD1285D6D2F97C218C8FDF5E604362C351 - 14: 22C72A472AF33D2C085F6EC9C1D7298A51B58562F348ABBB3EC09002 - 15: F728FD2C29A3B6535BA745E8215342298413E182B513EF76FFFB1902 - 16: 6718028861CA19236FCD4527B23EE27E7F6F4DADCD310F054CD09E87 - 17: A7999E45B997697005521E2ED6F3FC0B99E4204077A3931BC3D65301 - 18: D73FEA06275E1C2FC5E51434CB26EB0482CDFF08707C2A845A1F800D - 19: 79ED0DED96891FF6392AACBD9AC93A7673825B34364DD4F554144EB5 - 20: 4B676CDA46340E50F289DE37DE0E7D52722FCD08262B20B825E1C04F - 21: 0703C8269084531A722F71F807BC0EA810B8E03E9A642934A0F789F8 - 22: D2F1F83BAFAA05D0CB82E5E7F09A0F048FF9718F90256E20B058E1FC - 23: 45E4DCCE998C78934ABF36B18E26F90072781AEF5B6DF4AECE64FFCC - 24: B6477AFE98E6894CC3724FCFDD1E63FF586F6E1C063086EA7C2D698D - 25: 383A90915A864B37FDC8F64EAC4707926E202910E00345C3DB842A00 - 26: 5D428CBC8BF57A747917A365D7A3B5A3D4BC338870B3D654DF53A30F - 27: 3CEDF4101DA588D887CCAA4FE82122A650DA8CD82CD1678864620E47 - 28: 7B89C1F194AF6C8454D9B25143116014330606ADE3A3FECE960339E8 - 29: A7F40B968707F814F5329BAD52245A833AE1A72AE941B84C814F982C - 30: 0EEBC427F65A41852A42A632EBA73CA53DFE8EA95371A190E75D25B1 - 31: C78B7F0EA77A00D174C7181036748EFF7361250D671FDBF77C9EA761 - 32: E80067ED5A5925884E5DC7D2B47AA38847530537761E953623A1F997 - 33: C8E7BE0F691DB2CD44189A20005A160CFA744825A54E6A528110E2D4 - 34: 9DDCE1AC38B64D911C0FCBFD4715BB77AF5225617A8CFFE9101E7B7B - 35: E984EAE61CFC72946D2F38B894C87B5AECF939387C64022EB06CFFB9 - 36: 9BDFCD633185BC5F58AAB28E200C5B3F58A9E5D3357113A61E5F0F38 - 37: 980D355164A35C4C7D863D9A81EA053DF327C83375FCF21B9B5E1108 - 38: 5F0E7CBEB83A12F0493491A444A29F0B7C74500D8E17E2000B852298 - 39: 2CF803E0BBDD31A55B1BB1C449C507A2B43F56E3950B0F72F909B666 - 40: 1531DD3C6B0320A16291EE79DD6DB42ACAEFA1D54AA1B0B5E011BE71 - 41: AEB0016B0C2A8DCCE0C74B8794C2FF578966139920700EB921A75315 - 42: 8F93BF8DBF1411D4EFD4C2489DB975D4604F1801A5AACCFD55FC26ED - 43: 085B7720050058BB86FBD6A301C3654993791AC8ADA2EA773DCF7A7E - 44: 8712014F67738E3B9D8E2417B793076BDBD418CF34C674244A84FA6D - 45: 357F78A327A2D207AF16A868A84C595B11B51D02FE604F9F32407362 - 46: 8EE37BDBD1703D8A5EF22562E0384A204B89CD81E80946DD483F276E - 47: B1DDF7E03D60D2DA4DC5BDA1607C6A112C88779DB84128B80DA34ACC - 48: D318FB0A0196A20B99B012CE1D5E5554D426178DF81087531A8CBC68 - 49: 6263D8968CB45E33D327929A29ED404C7ABBCD11D860AE9B57E44E24 - 50: 69D9C85B4F8BFD68D9823E0B0E862D09668B0F99204944A98BC2C8BF - 51: D43E655C0DACF1C8FF7A00C7C5FA26234BEF45F2BA2378757BB9FFD3 - 52: AC39886893C7433953682793127364FA8D0C65C6531C343B91915DFD - 53: 94E7B5DCC1EB3DB23776D20C894803A51E5DA837C29BBAFC2DB7F127 - 54: B98E665D9703C394E46725B3D557A59C7FFEA4098C8BEC9B9D98C0CB - 55: 414FAAF92795DCBE7B4537296FB891422952E3E1B14CE6E1A6D3C2E4 - 56: 8FE87554FEFEA050E6E49D50D13CBD18B37B1729326962BDCDBA2EE8 - 57: E9D2BB16779A81D445C97F38B64CA363DEE0858D285015E4282B5F8C - 58: 538283E0B06AE7EBAC01541BABF4AD1C8409647893C73312D5BB4133 - 59: 5727EA1EFEA020A7E9AAF26D0EA8B16FA71EA58732E16AE592E5B204 - 60: C62949534E0272DCDEAFE82001AF1D88CE8FDF8F85A6C47FC65F3B74 - 61: 8F6F09CD73B1791829413D6493749B7C83920DA0B58FD6D4043DB4D5 - 62: 4C7AF80CC670F8419C609FFFA8CF483E1245F248BC032CF63EF24DDB - 63: 66CC1E00C4E08B9E451EB5E2953C668746D5803604D7D3A7D8F33D4E - 64: D0DB0A43354F5690B543393347E5ED07CB92AD674E81A41F9D4986CF - 65: 15268F39426D908D8CBC137E635D9FA8520DB3B8C2198D81DC12248F - 66: 3F9451F5B86B5A92014579538A8C5D6FCD141D9E9D7E164816D86132 - 67: 9F5C754F844532FB8EBB7B2B42B18F8A8D42A2FC202539C8C0B07BC9 - 68: ED84024F1431C0638BF483A88E18018676F2A3026FF1B04532E0DF81 - 69: 0CBA1F3EEB60BCE64F68425914D95C596F53F98BFD0AC9922B486C79 - 70: 52E1226DE12E3CCF06A3DBFA4E4A73483425FE58D8A8FF0C219C670F - 71: F81CA60FA66A5141718FBE0655BEB8B6BAE82519462A700B8E89D313 - 72: 2363D70502A9AD10CA559E69616F36DCA94E3699681471DFD43937CB - 73: 066E85EE1FC687364B5CC8B06E1FCB1DFA081F15C832483C4E173195 - 74: 9F6A853D85ECF3798A7D7AB7CC7AA2C67DDCA2281041B58E2E19DB57 - 75: 00FB321AC5A37AB44010B11FC26008C4189D1DD628FEF47B4B91A059 - 76: 3E10854699C685F6CEADEB3FA00B811C72D9A354930487FCFBBCAD92 - 77: E9A1EA97563B106093C5E1FDF52535A0FEAFB5CC641D7F1820A7F07B - 78: EC08202707E6B2538FA9AD7A29CD473B90F3BA039E96957B5AFB5824 - 79: 34DEDB11038A874291CA6F5C5304BA957B3435DAC69641CFB7CC941C - 80: D5C33BD6B1E40891B50C6D68BFA531FA02AF781AC2E32B39C36804AB - 81: 107B1DD009BF49268C93EE41E755A4CC5F0D6C5154C806CF0FC7D2E2 - 82: 47C80D97FBF6980D189A19F2A2F5EA69BC3A83C35C625894E8A7256D - 83: 0A2278622C518159F0AEFF8EE396C7501CD7BD475FC2F5A36BFD8A30 - 84: 7783B6A5BE2F808D2B5305880F82B63E22F5A7D44D30ABF93AC5B69D - 85: 5E98037E7CA8E0734899B42FBE757BB678F5734F174DCDC89DF4C074 - 86: B50F43E0378667370FFC7B7399692FA3EDBE63B5857883D7605A6C58 - 87: 09F24F3343A161DC5CBFB97DFE6041437A96E0C6232BF6559019B4B7 - 88: 814DE5F235CB237F92DA4362FE5828A44CF5C6F6496432BD47D73C12 - 89: 7A67C5000C65582EDB7DB43C201EA60125FA4FE26A9C5B32DB180FA2 - 90: 9E4618777DAC670BE99DBFECC5FA2C8772935BC5AC85BC048D1E1157 - 91: 8136C3E222E66017ECC63F3A4CD02CC59BEF5D090BD7C15F9DD0A0DF - 92: 99E3D6F7F5F7A8A464B18B8C150CC0676BAAD90671C8385BDF565CB9 - 93: 88D1D864A9742D5EAB92941711412A846154B63A9F39398BE3579117 - 94: 1AC73C137447509A568F38418649CC4FDBE17DAB3C8EC211EE2EA66D - 95: 7C4732A0233A824C14C8824344C4D48BBE25DF760276E4297419E246 - 96: 3AD94BA3AE1687AC841994D7F256C5323F8472F866C73E3BA7996439 - 97: E2D1ED6A5CA2417953B93B4382053C8565CEE9587E225F981EA578B8 - 98: CFCFE1AF2BD7F04F71D8A3E693D99CD6A8AA6672E7219C43937571CD - 99: 0ED5F3CF3C8BB43A1092B88ED5DF2D6E6F205900C7A58D1DB12255E3 -100: 6874E421B75321F9557AD33321C953FB347752FAB4248948F6968FF5 -101: 89F6846EBFFF7ED93331EEF430CA76B8BA07B2C45A8800BC4FCE0CD8 -102: 26EDB14A61CF9CC8CB47B52132E8EBB9F6F74659B837D1CA2CDC69EF -103: AEF05C596B9DC0D5B4DE5EB1C5B4E0D1CA7F2AA7263A15ECBEB8F21B -104: 8F9C483F86B936DCC362F7D2355D1B9D7FC871A94D0AA600E1C0E7A0 -105: A6F87051E521EF4508A257D4F8A1234067C2793B81ED6B12C9A78E6C -106: 2F14EC6CE17DEF3303E4AF12402CB993DB6F744C98496C8DFD314739 -107: 47534461C68F5845ED81B321D01C3AF799B90685AF1CBEEE94FE21FB -108: 47E9F55B20DF65269B8518F2FF3E86A64F6218EB6D4B5D4E31286BE6 -109: 710A584F1F5C90F87476EACC55E5B3A69D98CFD99411DDDE9A920D93 -110: 04232108D28C257C3B7CBEBD89D0217A5B9493C6C55D98389B1B25E5 -111: 52C8204FE1858787F42C06A88366310DA1581E4EA8B37C6072C4453A -112: 9DBD83A2D053C9AA450C71BC1F6F14D5D19A43665269FE074FED27F8 -113: 31E2DFECB3A2898DF67AB5BCDA7882C6FEE1007B433139D2C8BFAFD5 -114: 72CE843B10640D421D75B68FC142BAF968B016BAA63469AE07358FD1 -115: AD5F0911A6B64C5474264A448F3F8FA38D368859A1BC130AF1E1FE69 -116: B0A85CF422723A819C7C79EA504AA9FC5EC181833CAB5F28CBFC1934 -117: C6B7143FC9463E927D2DFDC84EA04FEABCCBB687A9773C71C3D05BD4 -118: 1D2348211ACEF40B47418D01B56E4C2628D0C37A2ED12D449606E901 -119: 39595A28C162B245FCD5C67B4680FCFFF2A94328E226D1D94F338EF1 -120: 7D7F67564EC1E1C7CA7A700868B5E6924C7E0B2602616D98661D831A -121: 6BFD3795DDBEC718FB494F82EBDBDFABA96D03F95A6BD314D8BD6B83 -122: 2EB81E4366A2AB7D8A45B40F18B0379E9F88C40A921A26982D3EB005 -123: 33C2EB7848A12A83AA6E481B304B87C481A7C67C783A46E727DDFE51 -124: 0E2A18CE135A59AAEBC4A0005C297ED95AF8CB4D5A45CB24DC4E306A -125: 5538F4C2AB53987351F6B1368CE067E0DF71680D127C46EE5932B78F -126: E2072202C04D503488F8409C74BBE058766104CA8489C75555AE6B1C -127: 8E6149B225A64643FDCBD6E6D23836B422E7DED4998D38FC1FD199A3 -128: 1413ED73BEBF067429D7DA342B26E249BE9298E2A401FE18384C93D6 - -HMAC-blake2s-256 - 0: E2641D24DFA8DD89E8CB77F1CDC77D8C006E5BEBDFC4D6A3A3A6F8D5B7586FB0 - 1: 6FB4EF46D33615E0186611FE54E26F1AC9165C0BDD779CC9B607D5851B3436BC - 2: ADD5D8CA3B6722D6141B268F36E823D10B3528DEAF34037E59257D8375BA8D36 - 3: 0AFB3DD812202A50D5CAA79B11F4FABF00DF15A8804B1937D581CFE4B6B075DC - 4: C170A746498F559F9420328A9CDABE0BD3B642056763C221EA8B0F8DAA94E045 - 5: 27153E6F8BBF2F2993E0DDAB90A8E0C489718C7DD36478846BC91BCF7948B04A - 6: 72E6B7E7AC538D5B2300B6F4155E129F3B292CA6DAE759A31ED235D4B51F17DD - 7: 4893848EBA7D64F98FB7C0A3250B08EDB57F51CCC07BF535510CDC6C448C2545 - 8: 90D1E212F3441600D5D64CA71884C48638B0FF5320FF4222E47003CF672AB09A - 9: 7E6BCFFA924CA6E8EB2168A496EB34E9FC5657318730C0D0A401F25D8F583D97 - 10: C403DC0963B7756F4B654C5F1EAACF4847FE32CC08F5BA4AB9B2EF3AC81F703C - 11: E9EB6574BA8D9FAE0BE95982E08DCFB674D24B887F2BB431F13547C8F99B71E0 - 12: 8BB7CCF6920D1F2BAE01E36C3EE740C2FA7D2FB3AACD1C67C01F5047CC75A605 - 13: A2549706D003F66A03796CCDB0704D343C63F779DA4F1A96ACCC8E0FF5BF1AC6 - 14: C95281FA6BFAF36C5E93F4853F8C08E13A0CF6EA8CB046937907EAAACE5F7103 - 15: 6AF95F7C442BB215F8C9CC56A5854B26711D480AD1F5877452BE426FF288F057 - 16: 49B3E7D802276CC9CDD5336B83AFD6131759C320D2D37854ED18D186EE8DA474 - 17: C125D1A259314E1F3316BF743F80CE01ACF8F3A57898070BAC2A79518002B957 - 18: 877D8B722417933FF97402A1617F724681FAEF960FD412499CFF5968E5311B8E - 19: DD3290905622873CD48E0295CD9E0DF494D4FBC0ED16E7CFB518854B290F3410 - 20: FC08D9B1E2EBE42A97CDD89321980D1980BCD75026BD5856391E1CA5BA6068E6 - 21: B526A243275DF3351E0834A62FF7629612627537FF3873A5A955B61F74E87340 - 22: F0FC1B236E7995C28A411F3DC7E9482F68B18EBA5F45612113F1E8E5A0EB9590 - 23: 29BD2B1501B3AED43D54804DC04D8A4B6AAB5CFC49D0C8F8BFEACD9986525649 - 24: 0927998739FAEB8FFBB317D03B0D7C9EE9DB56AE1131FA087F45EE86288B9293 - 25: 244EC26D5D6E886B06533940F7DBB40FDB18BE3A615E1DDFEF499E4A45FBFCFF - 26: 725F88DD0D86103E3043A47047224A5C07DD793DBE7EFC9BBC42BC9D9E73D6E1 - 27: 4D4C4F0600D4496CCB896108B5142035E9F0278E969996625265F56A13D9F2A7 - 28: 384D9C0D90753BB78A6609A69EA6368ECB789B77AB752484640DFECC9517E179 - 29: 49BB5A53DC021574C8A30C9ABED461609AC27876E8214ECF2DE7BE51D46A8DE8 - 30: 11D4AF98A21E5BF150353E1DAE2FD86156D335A8287A658512B6458BAD4749DD - 31: A4524D264137A4969F966064914251D8CC3835FC777F60DB86AAA08BF27B88D5 - 32: 63A1CE651B924BF6D00E220970816A9F40329D91B66BC141F683C147FC39FB48 - 33: 79891957F958050595300C02ACD64C653683D4F93B68A329ABA0E2F943503767 - 34: CA3D41EB14C5DEA17011F5063C9E6088900BEA37774C180D85C364E323ABAF7B - 35: F98F40AE387C389542F162155A315D4BA964AEC0D4E3E6ECEE14E5298DF63CFF - 36: BAED2BB0CFA7704E960D4C682DBD64E0E4411C4818E0DB04BF3959B706B09449 - 37: A89B07949F8E2726EFCFE8784FE9D8C41B1F9EE0A586F01CD9214866082F5F1B - 38: 4C0AB34AB27CC7BA096E9B2EDF576C3097814A9348A5B9AE0B86CFD479635574 - 39: 7EF645A6E6353231580F84EF977B8574E2DA8D8306311FE84F0822CA722D0BA3 - 40: B2D5F87DEC52BD5AAB1134441CCFF3F4FDADD02EF13281E637713970B3790C5E - 41: FBBAB146A1AC28AC41BFA01409A44771E206FFE435B8884E5C358BC1A28CB92B - 42: 77F762764D910FEC8C41930D2194DF3C27A414F688E4DFC5D936FC5030BCBDE8 - 43: 55ADC8A400FF3BF1D40FCDB83A5D26FC4352450C91D208DE3FBB4B03480971C1 - 44: AFD9D6AC75C8AE98D16A15D61C7AFDC22EFE2728FE01EB1D5B9D6C8168047782 - 45: BED58BB8F8581B92E34E4B770A2824BDA96E2E623DDFA0C2556DB49E54FB1888 - 46: 865B7876492C12AC7996C79D913B541F29F986E1CAD8CB2FE40FF838FC20C3FF - 47: D539F39F77BF62F7ABF2E6765BD285ABA9256CCAC70F86661F997CA5FAD4270B - 48: 5C4839FE704DB64128920CAE3CA4016E4A7D31B1BBB508F06A72D4DD570B1914 - 49: 801F1994C3074B6A468206579B3B78A94F431EF2A48EEC405A03BF496BC0DE06 - 50: 551D30E7AEDED675AF8BD47B26A025698C3AE0C7D32855EE5FA83F41F303150A - 51: A70E7A90060B0E965114F336C28BF9153FF2AEE6563A5C45AB913927082CA371 - 52: 82F12D40A669DB72DACCF7DF9C2AB2AF10FE952D8CE3EEAB4B89AAE130F28143 - 53: 78CF324171569F7DEF4400ADAE179E985315F8CABFCBD84F1062694566B85BA2 - 54: 70BAF36BEE54DD98B3BB75806D2BD159DFA597B9673C9CEFAB5BA985046EECE2 - 55: 0242878D7169446373B64D121C1195593FE22DBB8872DBF85FB6227662C41C87 - 56: BC3BAA6ED2E3D2A0E6E053960D2F58A4DBDCCFB93BBD14BB39CB65B4288820A5 - 57: 2BA48F57028C00D3EB2A432815CE1F8194437BF82DB761BE4432613457C2013B - 58: D752B097DD421BF28C8AD861CD55D67F15C20B36071FDE187189D04804CD44FD - 59: 1722F41EA907AA96C0D7117CA66B479F1A38E6D3B55C3F58D9671761A5C3F46E - 60: DFFC2E28B130B95969CD2D13840DEDB7C2B7BBC4A1323BE5669661F62F25447C - 61: 5883F44E26496E9AC3821CF991832F9A6E9217CA2F095A63DE0DFA95AD42A054 - 62: 12973B879E2F1810ADD0FA069FA8DE24359003008CF6F0AE86CAC5DBC261378E - 63: 39CE700048B22E5861FD32D9802F585F5DB4140C6DB25E0E96E3B2D9063F116B - 64: EFB921010B511146BA22454CFFE9FE6A95B11458FDFEAB11B8DF90357E0C2338 - 65: 9E768E700187B04C9F04F2FD39EC4C31CE5D5D4510EB284C34021AD68303AFE2 - 66: 27C89697649C72BC616B9BCCA390DAC87BDA1724CA8905D981EB38861DAE2EEF - 67: 0F393204FE1943E4074CC20030AE4D1778DF745DCA0C85C16AE190929A223473 - 68: 8D2C439A7F8AC1503469D5B0A5615FA1EF76DABF46F4199E55BDD7CAF4299B8B - 69: F078B8EB782766E8910763A8B21794B788F9E76BE8DF491AA9E7D3CF4F5776BF - 70: FC593EA587568051450BB1E951D5481EFF200478798D9EC50B6B02E83252F9D2 - 71: 247E82E689C55077F0C1BF7E652E72C0B373C189C5867189B8B9E3DE3664B897 - 72: 119CB9A78C023F674AAED82BFE1E9028A6D550A39AC22CBA0F6FF6DB05D05F43 - 73: 5237847916449649C2B6CF12771755093359850BFC7FBA157ADE79E5E2822B40 - 74: BB80C4B2485C7DBA5E73035AAEEDFB973FFAF67FA2E691E300412A7712FA55C8 - 75: 34B23D5707123EE7513D08E03BC5121E45986DDF508E8616ECD1349D40B2D8E1 - 76: 3D91F3216ECD7D45714ADE20457AE23F6C92AC7BA301A54ACED35F8416868572 - 77: FFE85878BA61569DE803F1361FD7CCEED5939140CF71CFA371E11D6F4CE4F708 - 78: D8403D5015C025EF2F1273558AEC3927835FF2B4B2F52427C2FED2AA15AEB3EB - 79: 0161395718F3A2171699FAB377A82F9AB16B1C3BE9CED6D3EAD22C19F2EFC537 - 80: 27E55DE15A0AFE7018F6F09F3601F2957801DE3F2BEA807206B4E7CED2DB8199 - 81: C19756D0FD605D62322080E22C100A0B7101A3818A39568602E052855F4304FC - 82: E3F162CA1D5E431FB8CDEA00A8BB0ECAA555ADF4113EE837337434B2C43E7408 - 83: E4AE78BB9B42109273D433E5BC67D918CC8348B81D22F639C16FDFF6A0A9D748 - 84: 9D599C8AA519D1EBD121D8F826794D79B359C37D59215B4187A4A716126C0F07 - 85: 793081487DCF188411C0513FBE7C9F350147B3E09B285258ACC163C703232913 - 86: E68F8985FD2E56173E7A1CF65955738536C80858B30751F62B91B773DF0C1EE0 - 87: 01B7FEBF76A44BFAB141DBA09308E5D0BAF9510834D21C3C76D0ED30592877FC - 88: 0D17E976859100842621144A76DF72BB29F95A836A72B23C47BD1CAAE60A85F5 - 89: 340650F975C051A499E2C5DA305516129126F8AA3C73E8BE04BE4958CAE42F63 - 90: 1BCD66C88670AECFBF705F49ED86D2090A89ABA5FC0F078CA4C029FCDBC13DFE - 91: 9B3F9D66E901759F0798B8E6C99FE952DA0C9A18DBC02D3B811BC1A309FA0F6A - 92: EC2396E05B1151102C5825F6442D8B8E911C5E303FF783D5FFB26004C996892F - 93: C084E091A7ABF6927B63385CAEC91032B8594DC1AC394A512475E27F9099AA89 - 94: 786CCF4D13341FFDC5E17CD6A8A4A449BCD78FD884E4413F8B25BA2042AB5F9D - 95: CD7BDAA224DDF56470CA9B7D8ED3EE2EBD431522107397322B34A4326652B462 - 96: AA736484E1C2955D67FA1D320EDFBAAEAFB4D6C68743D1B4594735545E51F123 - 97: C0AD0BA65438149769DF2D1DCAAA50C05A5C40CFD4B60A7CD689825804A0D8AA - 98: 903717621993168AF13BE2B16F0008DA37885D8A36B748E263A9CA779767E2F9 - 99: 031C7059879885D6EDFC2E17475172469F560C90B1D9EF555446662B291DD394 -100: 65DEC0535DBBCBEE8D5F6343A42D00108E6F3F68BD46EC13AA0A6E0A42475A30 -101: F6530D19FC8CA5D78D60AF7B2B8C19CBF59DA0B71E7457A80DC031AA77ACE615 -102: 2D00D07CFC276203D8DEFF66D954AB1EE422B1689E7E23838213A26023F82EDB -103: 6796A084FF352743D41A750426E7AAFBE5412702D087C2CD9E560FBD5E8C33F1 -104: A9E8884926115E815C51CDD480D636DAA75C2D400DA2D659F2813E6161C13672 -105: 6E631CFE75CFC9C6939EAC7232B0B2862FFD471C53A40388A5CD7808DB78F1DC -106: 9DD2F27BCACFF12C3447D0CF5208B597FBEE4A967E910080AF2175CF5E2FE9F2 -107: 08B2333D3F833D7CB9F599400D194BD807460E6E8AB9783767BDEAA108AF7D38 -108: 6CCA37F73B7AA93D948A467E6866FA5C150484C32726E7B6D2F23685379692E3 -109: 5BB12131D1C2F7F668034817BC7EDC8D3F08A932BCE993B7E270983C98533063 -110: C4214BA35FCB5F77EDC916B5954772FD90A8746BBA61797E3CC196C73CE817CD -111: A286E879ADC84DE575A6B59645825E4D4F55246A7ECF169D8554A65F62BF2D87 -112: 4C0890D5BCFDE5F01909056FE49666D4ECFA7DD56DEBA11A84516DFF5B5F1E37 -113: 23D88A6441492B08F932430FFE8E92B39F2598B46BBF974C96761390388C0F1A -114: F03BD6F980D353F6A4BEE16EA6F95EADF814D82E64D47D5FF28F7CA3B11C61A6 -115: 12DD7EE2672C3A876694C05BD350D466647F0ED32A039F1917FD1109F007A473 -116: 582DD21F7CDF4DCB58BC8882D181C87B78A3AB0691C7ECE77C239137C0A5D85D -117: 8C8BB083C161A1EF9F161C6143159FFB1E993B568042D1DBC440ED363EE0843C -118: DA72596544E494A795420712FCDD1B5B184D80860285D449921E25E2AAC87F0F -119: B14227DFE83491CBF4096B66CD30F6D582FDF508658B5DB0DBA566E04459E443 -120: 5E2AC117C01471B83179F09D6569E733FB6012FE82EEBE6E0A284378EA98DC4A -121: 7964D042B2E63053D39983B25B91FC40D0A79F2C0A7AE9B17DAF958A746C2BF2 -122: 2F3B1982F6F036B3113A5EDB83C330DA70DCB7029C897C0F4C5957A38D3F47A9 -123: BB9531D4EDDBE2D9A1ECD3AB11AE50CBA7C9952E159F2985173CC0C5065B972F -124: 5366BAD10FEAFBFA174EAE88B6452D23EF2EDD40D581B7A3A650DD50E224F5B9 -125: 4E22C02BB28FA26FCB45018ADF49A89DEBE1845A97BE92466C0744FD3D7B08EB -126: 997E86FC2E5A561EA8BAFDD9BCE086D3E8E206B5C27AA497845AB62E0139CDCB -127: 46925B5311894DE6CC0A42F439B958EEE32537BF73A96D4B6886A83B1A373D5D -128: D04D93977FA94A57D95E476034103827AC21B65132AD34658844D06CA923FA3B - -HMAC-blake2b-160 - 0: 91B41F36F10A5F9A3BD170E02E517BFFE5331384 - 1: 5D5CFB715ED31E9137447075BD5B549C07B3FDDA - 2: 3CE156D7DEEA2048BF356E8F6C8B59F5AF04AFA6 - 3: 92F836EF5726EDD58DB9E4B4FDEBC597BEDBA589 - 4: 218C4DD898B801320678F6FFDDF87FE56FC786C0 - 5: D96E3A018BCF20C9FDDEF1930C06951AF345C818 - 6: 91FA0CCBEF27B754E2C64ECFE6844814F6BE8620 - 7: DDCFDC2D726A97FBA4CD317CD3F551FAD3331045 - 8: 45ED295E5338B2AE02FB952DA9BB61BFA6071CAA - 9: 61A9AD603F3695B8D29A2FD2A4C363CADC0A7BEF - 10: 1A773798A5925F28F93BD56FC7BBF50E1EF2D721 - 11: 0426696949AB75F41C73EFF0F30ED3E286F677A5 - 12: 5B83AA227BBCF05C6C4484FE244B16CAD49B839D - 13: 1777DEC2CA55AD6BE3E492135EAC2C4D56906707 - 14: 4870BF4800CCB03AB2421FA1FB391E7D60C2D97F - 15: 0C469D4F28620CF7F90B20078356989470243D49 - 16: 2287F572BFBB2ECD49A50F3EADB2A3B9E4B4876A - 17: 83432F240A8987F3FE97D81384A417977E5B01D7 - 18: D2D705511C9301F107C133898380F07EE64F4B46 - 19: B517EFF65145A0EA914F4D8A9A0C3BA99837C622 - 20: 07A27E7D51B28D64E9F4E86EC4BAC2B4CFEE4F71 - 21: E3001AFB1FB326FB56E9BC266995FCA21E585D1F - 22: 3F01F2A087489B17E266C046F96D770DAA75B32A - 23: A47CAAB757105BE824943485CD4E5A894DA4B2EE - 24: C79F3C3E44A2CA66E68D15490E708FC888C656DD - 25: 3811AD9174A05E89FA6985D1AA67CE719ECE86D2 - 26: 0EF02F1D60910E439A169D5CF2CF88ED49F977D9 - 27: D783EB1CACD38317F6DE37AC4B4BEDE6145EE0E5 - 28: 1416396D5439FE809A924B0048C37F7C49C581CA - 29: 810C7E4204C9C2D0F2C54C0532DC6CBEFAB89044 - 30: A436140726FCEC72AF39434914FE4D534329CC73 - 31: 8B86710154FA4CE04C0C748750B2FC86CA8CD5E1 - 32: 5367509112CA9EF7263E2C50FFB2605E7C870E48 - 33: 47D269F4DDC5DEDD79A055406065D28FFAEDBD8F - 34: E9C48F8AA577628AF49C4E21BC370C25EE632E94 - 35: 8409505C22BA85040F3FFF39A7B1CC7FA9D0602B - 36: 77B6482AF6217DFFCCD25A9934C9FD878AF5CD0A - 37: E9E6AC21B91805468E121293949689F7FC4C0294 - 38: 1B9C111D6604A97C246DD502A30C44E667AE20C5 - 39: 4EAC3E4BED6EBA2E7ADC66DFD32D06449E7D575B - 40: 951800DA1CCF5431D017DB2D6B4D8ACCE8D97841 - 41: DA506076CB4737E3EEB985DC7AA8CF3DCCD45EF1 - 42: E427D5314F4C672AF8C4DD932D1554FA66F9AF0A - 43: 95BB99ADA3CC66D2249FA70EC21A1DEBA8F33AA8 - 44: 791EED39EE89CAB25C590BC940C085374AC07E14 - 45: EC9BBDD1468C2E7BA180FFA1744FA55AC83CAADC - 46: D61BDBBE513ED4E97207109BCB457C2C4C6C1B1F - 47: 08829726D269A4DF0455746FDA30900EA89BF85F - 48: A5A730B7BC19A473271EF8103CBD702E2C690EB7 - 49: F889A18589FF7BD39C9240613CCEBFB8506C1888 - 50: 6A11150B2411A7EF49B6323150D57893713C4DE3 - 51: 3D21C0233D6A7BCA5D3840DBD3DE630BD11CFF0F - 52: 2B389884899C1CE9E38232F668B89AC19E11B371 - 53: 2476925F06549A759CB450DD30312A216EADA4C3 - 54: 15DAD84EED1986A004107068C9A0D4AF6C86EE5D - 55: D8B2B9A72EF637651249DC810E094BC398FB7E69 - 56: CD0E577D787A997EE2D45261182237C950027707 - 57: 517510E731D667B2565BAE6F53B8A5ECA13990D6 - 58: C2EB5066908336DAE8CC85F9264677F00B01C5E5 - 59: 697E197A467585A9235AE463BE3ED974DAA6B7AC - 60: F60DDCC3D5BFA9C09DFEB824D910F7798BBB9709 - 61: 381F8CDBF7B84B0D90B6AFA5A542058CD712FB23 - 62: 5FCBE74DD172AEF23454731AA292549159FD1C2D - 63: 1022AF30F8AE25F92257571AA901F641A1A0C161 - 64: C8E9A2E2804B45F4A1133CC35EEB686714FB06E1 - 65: 7827A6CB25970BA6E957D6B870C30548C08E1D13 - 66: 8CD063D29160B06519D94F269A7E63D10C9D083E - 67: 391032B2A264C4516C349DEBBB92FF457B0EBDE3 - 68: 47237083EF729524980E750D8DBA10940A31C87F - 69: EF3823E526FE0BFA96A59AA01202A1D9ADF5F6FE - 70: 39C00C41CC48A0C12FAA771910C140C979889DA3 - 71: 3CA776F737A36BF88ADD6F0873AA4CD79B7AC08B - 72: B5505CB70728B304E562F830D1B541330EC09641 - 73: 164B95A64F6AC4AB7778AE3271758E57D68BC0F0 - 74: F737117005CC32C9CF75149866FF62C666712302 - 75: 3325BA34AC267A2C070DBB6DE0AA14140D43B98C - 76: F7BE840F96EC0E7C1A563858E08DC4A8C05739FD - 77: 779DEB8903688378E81E7596C841EBA80C020D75 - 78: 24A55B6FF3A5982771ACCB01FDAC787C127DB872 - 79: C97B5306FA9B6D6F0F1F86B9BC82D80AEE710C06 - 80: 8D4C0AC8828FCBC9FEA4B8D389906F5447BD7841 - 81: A1DD2E5E8E9108D29E875346D7F5DC0A8BB88E21 - 82: FA80CDB34733FDA40CFF883185905E818FE99906 - 83: 53622AFDB64A6B314250D449533332CE50E54D44 - 84: 0B678F2320733983ABC2740A816FC3AF6320F6BA - 85: D8BE658D14F67C6ACC8C69328605C35B9D63ACA1 - 86: 0C0D0F9C1E1D83C652BDD74007E34636AB33669A - 87: E619A83C29304ACDD171CDA3AAE6F9DC872FF53C - 88: DE9725D99551CFF1377578BAD64A815F1070017B - 89: FF21E0F39C91DEE778A4F06FB02B92FC657C177D - 90: 5B1021479562EEC8B6D3BBFF04497029C97237E9 - 91: 0020D098252AA355C0F0F4CD8EB34DBC0B73DCBA - 92: F8F35EC61D590D228645336C1F815300289CD898 - 93: 60F638CD649A5EC518EEEA5A4B2D638DE2DDC7B1 - 94: 6C78A0C129AFEF245F7D66A6FE57FAFC3E28E10F - 95: 9013B5174394CE01ABC175F8F688E234A4FD16DD - 96: 34783C4C0F4F9321014CA6DF7DF766E54F5C96C3 - 97: 3636D4F6E5C61EEE4A86E14ECE023F5CDB15D46C - 98: 4E1F4AC9F841B95B2E594BF6AF760180DA1D03AF - 99: D6EB0C8996370720C5F9C220E9E68FDE34380E30 -100: 5F7A0112511E35F4273C4BF2F1F7E724D4522DD5 -101: E5FA55649943517931FCC903A4CE4CD4F491289A -102: 9F53F1332F91029DBD32BEBF5DAA6C0DEA537DC5 -103: 4B8715D7E8ADC51077A29D787E48B11557408204 -104: EBDDB13C99F58B6E5EF9DD448B1895CCEC019E69 -105: 027651A8CDA7E31B876B9D3F0510CE0E4AC7A63F -106: 8D38DBFB024629BD83D7E37CD81B4E194B18977E -107: 4D1ED53492885F6E071A66374A01C765A10A8630 -108: 3AF73ED62231B543A258BA74CC9E892434527D0C -109: 1F30A0AE1401CDD15E6D0D1464B14B0B25F9E8E2 -110: 57D86CA815F8CF4C0506ECA8453C4015FE252C74 -111: EAC5D0315CC5E63DAFD7E6AC42BFB6731FD5B90F -112: EC7F3E81D1C76792A984A590A447427D55B9BBFB -113: 46965A3E137CC0DA820228F24D2FE48A51EBA32E -114: C952D772005A7C5A51F421D97C4E8E13CA49F294 -115: 4F294AC35EC97A70D9F26A26451FE8777A15924C -116: 64763832C0EED10678DB46465E0542CF3D561CCC -117: F3D2E5FAC9EB7FB5F2A6D4815621F9CF4421C450 -118: 66BD63901F59268CC04A184919DB0002CFC86741 -119: 15A0694D1D2192BB38253058EA2087D5F18EA4D6 -120: 92F0CA14F48B5831C797BB11CEB01AB09DDDED30 -121: D2B881D1AAFCFD3EA7C345D98644EF9028988FB3 -122: 89CF09EB477226E70A192C6261252EE50FD2F262 -123: 23766C1705A6C84F9C09936BE5D89DFAD33C70B2 -124: E5AB4272EFC7E534987DF0D1DB00AFCE0B610BB5 -125: BA1533A83360E295A5B02916415F19A74BCCFDE4 -126: BCA0F491597C809528F51509295F86BD0E1AE5B1 -127: 96EDC04327A391951BB3B3B9912C40E11C7E20D7 -128: 9E34D0C76C1C208007C79FC2E9F537F717B6BBFE -129: 24F6D1D900DCD8F836828DFCDC40C861AB73B552 -130: 8CB4AED9E93F93FC018C854BF3AF63684FE2BAC2 -131: FFFD7638161CFAFE2CB4041D04DE867D9974F0D7 -132: 56B919EEC4B494D665D3DC49C10F30FF58A78626 -133: F85ECE077F8C8EBD4FF96A6E42093880EBA0B832 -134: 6D94794B606FD67A2760A6A9F7768B778DCC9F5A -135: 7025DC803EA0CE00F533D265753C0EC443393501 -136: BEC1349BD4E8B0D456B2E808D7E19FB38A938637 -137: 10D6EC94DCD27FB67DFB07595EEB8791C1C98DEA -138: D1D3BF08EBE9BC2C9543CADFFD6B31C235EAC392 -139: 4CF6B180C42BC7D00A56044A94594F22296C1FDA -140: 504427586B8AC7BB3B511CD0E7620281D88B9947 -141: 385A73AC9A075E3989234C60EF77C1B2600ACCA1 -142: 0D1696063C5BE42C71AD36F478B4CE0BF4F54D68 -143: B524145D384980E983B98D31DF80CE097B5BC235 -144: 500C8200FCD89A14A3D2AD625F57AD0B93007D4C -145: 860B11F1A6CB6B8598CC8428EAF7B1633FD8BF0B -146: 6C0FC9148016A8B1E6513B8338BD81FAC9B5F6FD -147: 7793209C2613B32D2B410507E0FA115A660BF47D -148: 849E1B1FDB5C6AA9E7CDFFBF7434DEA043C94B60 -149: 99784ACE6D1CC66E3EDD4460D223529B7C41C6AF -150: 2E7973AD078A82630CDA2D30B4C4B0F220CF04E2 -151: B6B46BE8A7ABC4F33D0EA4BA705C9AAFB3120DAB -152: 94F8DA30825AC75342B21C3AA461C2FA09124C68 -153: 8A9D1A8F07A517740E966687FFCFF37BE79032E2 -154: 6BDD89F93E8EB17A0C4C25C312D656F4EA73697A -155: 695D4B4361A4726EEE929064218CE25EA2993189 -156: 160F8EB2FE3C12D993DE2E0C8122157E42B64467 -157: 22D444366FED25B20132D00F531495E1250DF2FA -158: B73BF87C324BF91F55E6E82DE291385958505094 -159: 70555E62D15441B430845D2439287A46E44E65AD -160: 902CBC04D89F2CA95FFCDB28B3CF612D5AC60FD1 -161: 4DDBEC1B9CDFCDC316BB109C14B981FE3AA79005 -162: 35527A466446126080A7D5BC4EDBBF7263208FBC -163: EF9A850245574AC3BC03BC523D0BF11A946BB43C -164: 81A62BA66250C0E4FB6F3413608F953282028F71 -165: C77D5612686519CCFA2E9626D0E3B729858B128B -166: 02472059AF034DCE8F2DB835BF861E5B03E11F1C -167: BFF3366670E2A9B4CCEB3EFB73AAB6C6A9CF31EC -168: 6E124CC3C5E8E7048A1AE272B1A98756053F35F4 -169: 38F00373D0E0BB5C3B51FE9E83674E9E3DCBAA63 -170: D7ADFDB44F0B48F6DDE1BADD51E71CEC4A54F746 -171: 8369F354D0C03BDD25002FBAEB4097C82FC6FFF3 -172: 1CFBEB3357B96141ABE3174D3747531FA7CEEDDC -173: 2892004E23D054F5F201F5163E160E2B3F5F434F -174: FE5ACEF4E51944EF26556D31432536B583FF3718 -175: 430E9A5C642E858C83BED9845BCCB3BF597B4ACF -176: 026A695AEC601C04A68FC249775B3F658DB56522 -177: 73A8AE5A09963B90256F7000D745E4B405657BF8 -178: 39D7BC6FBE317218A3067520A93770348B7D06C2 -179: 9F6725C5C9824C2551BA41B7A1BE8E7CD3877C61 -180: 4FCF1A8A95223AC44316D1CE8D1CFF05A9094C4B -181: 55EC2376C84494232706401A5EE935506AB3593C -182: 53067496DF6FE64135343EC9CE7652F0AE17AA4C -183: 1E7E857E68CDECEEEE2F1D9F53E2A25DA86396FC -184: C1600FAB2CF3231E8A4820314F8BD1FE182B2F9D -185: 02CFD49DBC6492781E28C0E43D9ACE3B3EDD8D87 -186: DDCC26D3E8458B3269D4A39AB485207139A514D0 -187: DF1515CA3E20978147CF4E62224C88F9A78E6C05 -188: D05EBA45E23870CBD4C32556A5CFF731469B96C0 -189: 4DEB7F6DD512E7C3761C3B274C4DECFC0E4551C3 -190: 239D8D8F1B7B012ACF916F168A449721EBEA86D8 -191: 7ED39DF9F3C7EB62B3E70CEE8AD80D28EC52CF09 -192: CE70BD3603CFC7E1C55A7B775CB94D992E941AFB -193: FAB476B601B3C1E3A47A1FE1DA96A0AF71880A71 -194: 29DEFED7BDAF54DA7EBB500FA159CA55042B2A67 -195: 12E0903B289CEBCE694695A50A3BAF4ED3230FE2 -196: F41294C939F0ACC186401EC0E1C1B6B9324B9D4A -197: 0B3E7BA883D7909F78E5585D377C6140F31BDDD9 -198: 70495AF1F81FC652718FAD74EAE3D8842F8BB55D -199: 735B1966FFD58D5741EF34E52CCD960E548FE0E2 -200: D2A39D17077D2D973585B7118A60BED4418F9D2F -201: 4065C3B1AE063E44942F21F74456D31389CB375E -202: C3CACF4093FF3A77762EDCE18789631D5E9114BB -203: 87977AAF6F78987EE4A729F6B1069352C03B8259 -204: 17BCEB4E0C773A0EAD196D259AC15C81530A44DE -205: D50896BCCA9B69A14C8F96F3B7D514875FAE91AD -206: DD947612B02A2B3E9E1A2AABD4A7F4B630B18021 -207: 78797676313EDB42996D08982F1ECD3E1A9DDB85 -208: D3CF1E2A8166CFA5B2EF1A6935633956C46997D8 -209: 1DDE50AD80DCF35167B1ECC7A3A0AE07B7BCDA2F -210: D2E7085ABA3FF996D46D61407B9A1FCEC77E3591 -211: DA2FB91F8F2C30BF0BF419A297D230C7C2974A6A -212: 56E79F5620F97221F40770398AD56F3DB7326370 -213: 639FBE4B78BB4BAE556E4B5E39F7A09CED54ACC7 -214: E7A4E2EC2A58779FD15B7371FF2B8C9464DBC60C -215: FA0226413C1E39C40CA6924F88FDA62B3659929D -216: F3FBA413EFF99AD1AAA832A7E4E91A5DB92F0A60 -217: 3D1BC9D1E3936C5C8A56ABAC688A7931E74A5447 -218: 12332C438A1032D1E0310238AD8616CE90AE1076 -219: 0094AE3A0140D6F41183A3D71F513B7D37D7523E -220: E0501598D086F7A749489A1E94E58B39B20B0E41 -221: 0414FE449C5BBC58915C8134565E14145A9C6B22 -222: 27F2323EB75D2BF455AF1A4B8844809E4F6C7561 -223: 69124FC993FF512968D1DD2C66DE6995661C6A76 -224: 2E908ED58CB6F6715E43EC988826F811D74AF159 -225: 19F815F7E9ABEA2C4C8C781C13D4511E6C9B9C99 -226: B63DE59953555718DE5DAF2D35F096B7C6E9AB69 -227: D002F14EA3C14233C1AA1F990F14F377F2E50705 -228: 234D683CEF16842ADF236077E7BFAF59F1805852 -229: D8BDA8BCCF7850293F9F7F82C9866AAD9BA27BA6 -230: 57BB61352B23FA9B3CD11587CC83E9B7547065C9 -231: 81F3664801DEB387B8391D13A45D4E0576A5B8D9 -232: 89CF0B3DED84D683F6A8176F48A830491F83BB77 -233: ED66834EAA82BDAF54B13E00D1EE46D716A3C806 -234: FB52313807A161C4BF1FCB6201366A44E5BCC655 -235: 6D8B84A35B48E2F3DC16D4B7E73F74BAA16EEECA -236: A3319BD60DCDF72BF076CEFA347D2D4C5BB60CC0 -237: 17DB152295D410B56B70934C6279DBF897BE3CAB -238: 73F5C199C45D70A15DEDF9E5116BF5FDB29B5A5F -239: 26734C86594D1549A4E5C93F0567194F03159A08 -240: AB7B14F5D55B55B68C981B3FCFF47ED615709CA8 -241: DADC35B7D37732C14665089103AF7D83F55CC896 -242: 9C0E3FEA3FB98BF4BF56207F6205F6440BDD2559 -243: C1473E91A846DF6E6F5132E01DA171A3622AFAD6 -244: 9C83212F49441F0E7FFFBE594341CD1E7EC9D75B -245: 93EF7E3D20709433612485F96EA910F71097D329 -246: 7078DC3CA059352719F5592E3B5E89BF2F632296 -247: BBEDD4C77DE663C50757B3D5FC490D2B8B9DBCDE -248: 0461A77102B4EAAD2F5794F596DC71A564A8FA16 -249: 3E27194189DC0C843D41E325BD4BB4984EA7A09D -250: EB144A3DED47B5DF4CE7160918AF579AF44A6819 -251: B495B9C4225D1F2CCFDBD13439F9899E537C7DEF -252: 39C768C21766380111A8B44052AEC0CBFC5F0499 -253: 424F9A6A2A68FEF9FF958BD6F88FCD71563572E1 -254: B31B3AD109D63B575A3E4EA61CA899CCCCD1D520 -255: 85B745185F67197DB09114B5AF11261FC1BAD1B8 -256: A9E4967F95AB2566784755FE625366E7CE4AAA57 - -HMAC-blake2b-256 - 0: 652C4818A846DD289D18D38C934FF0A06B2A78C3A1A4548D8CCA2F2B38C35683 - 1: 965C0BD4B4C5B060859C6943860F11BC438FD1A7133876851B33C470225247CF - 2: 81B04471DA1B28D80043C6299986FDE0F227BBCF873EE065AD2B850C8D6FA7B3 - 3: 4363D8674B928239DF975199E42F65F249872183352BCB7B16B1D25CFE9227F1 - 4: 03BC4B9048EBBE83D915106D2A25E80FB50E24E2163C6BF50FC5D160FF680FC7 - 5: 6F3B2A87E4170B4366D591D29A6C4148C41D600294FBCEEE176325CB0BCB9048 - 6: E97E6318DCAD9B53B8FDF2D697D874488C3D8717DE35352AFDBC7B845783D091 - 7: 8522A943DAB9883F729094178EE0A70E8141EDD2831DC6098642CC55559D0F45 - 8: CCCF2B73708CE2C824A5C46A6450486FF56181883C7F1EC3B61320CE890EA8C7 - 9: E241F9C373DDE0A81E5A8EE770BB249646BE00DE0A0C387A173FDCC3518F8254 - 10: 7AD7D93BBA15644E3E6E0FCB3052C61A3B2CA4DCF522FBC38FAC897B9A2152E3 - 11: 91F4B49D5E9975D809A834EC74BCF60BF1728C33F331FE2EF7E1D36A4F957FEE - 12: CEDB595778F1A2305351FF5F844804D1D6A28CBC5E72459DB1361AEAEF0A7EFB - 13: DFB2B31F9C964BA9123D6D1226D76EC00BE21F3939838A8C404070CA8C0DDFB5 - 14: 4EECF16EB573FF2F6A86A0F982E6572A0FBF8FB81253BD33990190CFA90C9107 - 15: D4D71A7D58806AEBB87F5B04CFC8339B2AA9E2A850EE7A996EB99785482DA370 - 16: 6172B2551C40957D3D602323D73159E2A90212E9703E7CE2065C234ED4F1F319 - 17: 6B099A1383B3FCC7F4B81E98AF3398AA988A7EE729E7005A5DC56BD3F907263F - 18: 9A2C6C3C285BEB4576C6281D3B17D308CA97CAC24EF55760308E3C4A0A25433E - 19: C6F865EB1164450115BEFE90F73D03F2AF950D606E86F81396D0E23B2ABAD49F - 20: C99EBAAD53DC254027637332BB816E246A6CA2BD8719C77A36DF9AFE610E9603 - 21: 1B6027BF1495A715EE232A26B6856D398F38899FA7F81696D87046C1706A1D10 - 22: C5F87692C84132ED72D8C3F666B583496A17B427AA5A55C3727E706C0C74BE39 - 23: 1601E725B874792CB56AEFF94650F40398AAC1FE02F67B30C86CF247162B6749 - 24: A79ED034F708504C7C14916A918E214E9D2665C40FAC7E5A407953C4B73871FD - 25: 3F7E96EB8A8AF85A1D88E286948697B85070F60FF651A51673790E580810F984 - 26: 21A6A1BB4F45A11FFFF69300B23B00FA6B97E728BBF1EEC99F7ED49BAF1F9F16 - 27: DF2E45C35B53323DDD4C6990BE090658AB6148E84C91A1EFA41498F8A8863CA3 - 28: 1A276A6BF0917FFB7D731269C384AC1AD33C3F6B468A2DF5B2B09F89A3D30EFA - 29: 3A3415215764F985B347DF8195BA50B495CAE26D73D497968FDA48C8F6C20891 - 30: D3F0E1CB156DA0339BE0C438E440A01C36AE1C3D979006CCDD9B4C04DF45276C - 31: 29F96F3085637A80AE4DE432B4DA434A2C721E3ED1D88A14B16AEC9856CA7E80 - 32: 81B0EA26A21E8640549739AF8F8906CD31B51B69630386D63922C8F90CA67AFB - 33: CD8B95E8F45A448467A2A510D1189AE5004F92021F2D019411694BFC1A286B2A - 34: A514AF45CBE2947F23E9CC96AA4D65C227C56BF3A05B37A9B77F35BD6658BB77 - 35: A40A55D992DA46508EF9ABD209E14D290C640B36315EA99E82B7FFD3AA216805 - 36: 890D418DF1DB48670A9C911518D166B02A78478D8950BC238BC73BF55B9C6A99 - 37: 888E57FCCAAF5CE6D44B0DB22DF86022CCD297274CA327C050335B7E68A58E69 - 38: 9D309D8F7ED42B570E66C33C647CE19B99BA34930B5C19E53DB1984262FEB3A0 - 39: F63409B60932B087C4D8BF3B7ECD3594A78E6B16A4A51D9D304883D340DAD98C - 40: 770B12D90238C8FEB8940947BC9448BCC9D19DB4D4D3B62CC277354C1FD9C6A7 - 41: A3661CC87A5A2E959A426CC3C2EE15DE0DB7A5177F2BE4A340E79CD3CAFA3057 - 42: EC2F7AEA80A24DE936105B15DB6B0FCF63FA1802D00313540DBB4296781BF80E - 43: F506A21EE73C5289EDECF0C3916AA0D0A2803C64613129484C22A8877D2F766E - 44: 00327A62D4FF46E6BF985BE450673900B1F2C58EB1BBCB08D6FAE06A42B32A79 - 45: 680780C2B502E7347772F7B7156706221E081A20F04A8B4D59113D12BFF3C12A - 46: F1CDA40ABB756C358B9F8E08F38494AD7CE16D9E1DB10EB6F61A54B2742E1FC1 - 47: F4A5DDA9C79FFC2754C14AE60082BFC7736B70BD4C3A1A2A0780365F17708EDD - 48: 6DB26F90FD7459F3D50F6B53A420124FB679C200C28559CD9F73BEA9D1F3F6E7 - 49: 4CF34A6CDFF48275804B90C9D29842C741215150330FAC49A33BECF4FCB5694C - 50: 3E7A195C034BE44BF7645009EAA1F4A4549BE3E6AF239CAEC3083B88EA15E7A7 - 51: B83A639653CFEFE2960545BD00201B68FBFDBC230029816DEDACB2A339A65A4C - 52: E5B93DE67B8AF0E7B7877EF60725363F02353ECB7AA1B15719CF72618DB5722D - 53: 9259AE1B51CF93D13BDD0E66DABF52C353CB560FB78F4121A06F37E34BA60572 - 54: 7682B67AC15ACB47A74B6B252E0A07DB3267A5F30B25C76345024020641455A0 - 55: 873C71811DB064C74C952AE0210D035A10CE45066390C6E28880A4F3D113789B - 56: 8B3BFA589ACEB6EFB39D987E0B6C9E51B889B16B04C83CAFAED3473DBD028B8A - 57: 270334E92C8CB85A995F05B2B712F8CF76113CB609BB967400BF69A199BAA29A - 58: E310245DDCAEF03C50B6EEAE895A4D5CC3911B55C41684F8E3599C10A9AC5094 - 59: 23CB6BF0F634DE484960738B1E5C16B758C4DB6850D4ABA906E1B146F591065D - 60: E8ED01354FEF6718FFCDB083DA60547800735E2FC2EFE4B902C030C0B8FCFF1C - 61: B1F135BF0FA659A289A5910FDC993D727AFB90DC2D06B3CEC2A4E68F5606603D - 62: B363B808582E1ECD288BFE85D91EBB2E258509A2F4A0B8AECDDD5E6CE454CA5D - 63: 51093E531663A8C26967F6665177F5781BF62B292282966B56E0C3CF81885D58 - 64: 9538A7FBFC83E631773CBE148CFB43B064BA117D4F1686A1F1402DF7D806DC4B - 65: C7E03CFF242283FBAA23F20DB7E60CD70564967C2319A183EAD34E51DC8E3D6A - 66: A4C7A4560BAACB777F48D651C5FFEF55F44048313CEAE44A1869674C1873F9BC - 67: 9CAF35E553DADCB73A42FC606C66AE4A7C68EA4C8D6D0D5D70E03B514A9D89BD - 68: E9B66A6260F9EB9526AE6335A9D6AABD1C1C63980202338B3282CD9AAAC9A7A6 - 69: B684F469236F7421FC7211B57F6FFA6EBC29D1535FBBEBDF6964EB086E9513F8 - 70: E44168C8E6511E675CA471CC753418C2A04DAAEC60061EB4F687627CA3C1C460 - 71: F857E2E3E27E1B9481A3A4E261DFB06EC1A5A2FD39AA8D884A35B7DB84CBC25D - 72: 48EDBC181098C90101D479E9F577ADCEA5A26F0C4D202F2B84B91642439803E0 - 73: AFD5652C7E77CCE446B8FF5CA27DC18B41E35FAE1AE3865F55F1B7E2B4F26A36 - 74: 325B27B3F9EA7C643A46DE798E7189462EB82BBB4888CA4A78E9F21B9869D7E6 - 75: 15E6CFAF067D81AEA560D19D470C985C4DBB89F04C1FA801732BD0B3D9FEA70E - 76: 9EF6C16174701CA971DE17D8BD23231279CA95F70C3E3016A90F281FAF204564 - 77: 149F55663BDEEFBA13C6F3F48F578B6BF2EB8D1AF19E8C2B351ED46173A19C4E - 78: 474ABA1288EEDFA0138F8233AAE5F7ECD82BFA11A19C15B022B346BAC1217F50 - 79: 8FEE8749037FB69499BCB71B0B2EC679D739173B572C8F15A336D6C06602A69B - 80: 2FF471E60F81EB1D917E8056D338CF1EBC622B9EBD7B35C95F43182068F9D274 - 81: 23A766EDB11B74B7B9E879C298B025512798161279DF6ABF55443C6F099A30E8 - 82: F4B2E6671B1D071374C9A7E8C0AE53AF8058B238C0025CF465B8761138A37712 - 83: B280A33C87A019503BBB1846570105394EDFD76F6F8799AFAE95C345CDB12B5A - 84: 0F7F6389A99AE5BAB88B8D51E61DB4C8E77FEDFEE37803D603A3E9D35A060F9E - 85: 931FA282297E4F58BE0DF321F63BEADC7AD6AE0E982761AAF0286C6953660E8C - 86: A48F1FD5E913903FBF7FBB358882F038C192AEA188C310AF9D1ECFD5B4FB6CA6 - 87: CCA246F0CBE873C03EDA960459B8B6AF9F3BD10876D3331C0700FFA2C4CE6288 - 88: 0C568638D74B33CC25731A957CB731D30D1049C95392C8EDA7935109DF6AC3AB - 89: 0798E48F92A7FEF84D8CABDC310EDC38BF44D0081E384DF8E2DBA637ED274E04 - 90: 7338FA2AA1D8735969B5D8C778CBA17DC6234ED6F1D3EDCC797741E28EDAF411 - 91: AA02110433C8783CA4B6DB389835891D2AE48E82398EB61CEE785FFD342C28C6 - 92: 4C275EFF43C9B3018192AB748072E428D031DAA0AFB71C95157869D4CA6517E0 - 93: 4412EFFFEB9E5BE84A3708B33FF8FD3FC86C6B09F612D810E22DACABDFDB40EE - 94: C151D878B550D714EBC8146901A35AD9FA6928254125EE5857DE9454FF687A2F - 95: A8422D9D607364547B01965CF4603433F50D3F5CCD2C0AD73C19D9491C19B7DB - 96: E0585BAC140FF99A8C5FE7875959B4D9A27973BA1DF7770F3719FEF753DDC25D - 97: 4D3F23D5E360476F80FA716A11201C7E38E4F47FFB34B744D8C2E5FA82B39AA7 - 98: 8A485EBE048F00B75F71E8838DB18E885420D34B90040D3DA3E99DDE9F7DD31F - 99: F00EAE59CA91F43107640051BA7AABEA8D218290A5EEE59D541F4ED0C6F6F23F -100: 1D0872D72C7C958794A0A306139E5333F101AD9425B3A444AD599302CA1D38EB -101: B9F85AA3FEF079601570849E21BF0A008DFCF50C5F8C3D475C9A4FED80D6EA41 -102: C7675E7B2DAA88D6F56587CEA4ECCFBF0F73E6E2F485049D6F634139108F18A6 -103: 961D2FAF25AAE2C828C693013795942E649FB60A3F4AB99A4C726176DD9E6800 -104: 0D72573A496CBE9FCF413E5A94D66AC6283F58BE1B2A00DEEA84928369C7538F -105: 547500C06C4225C9D21C5EFCA39A4FFAF2BCA5B90981901D468F5D357BDBD439 -106: 3A06651F91CECC35704958C77C428223815DB5A646DD2B5C23EFA80B55C98A59 -107: 681859EBBA0ADF350D3264A0034D7ED9B1A4C7AB76490DC58A774523489C9913 -108: E718F2E0345000CEA3645C15F02870B6E665622E6E7D3E7850813878953ED58C -109: 6892D4FC7F2EA6E20F45C8C1595038D1CC6F07DD0211839A5FAE2941B241F258 -110: BAC5688E05FD132E95A16CF72FCCA6D72EB9D184ABA08B657A48670B54B99D28 -111: 7E6DB1B204A2B7957D8B19F1D730734CECC7D235F1F88F949CD58652F5474DC5 -112: 88360E8D857C28E27865BAEC5EB248119A82E5D1BFA76A48E4CEF9F35E0EAEFF -113: 686A6987DF516693A84ACE8B9BC45D8D6DAA07A6395136CB8BA8EA2E9C1988E2 -114: 9050DFAE4F11A9CCD86EB77A51284D5110BDD75A234D9A8D0A9D096D50BAB6BC -115: 535925FC039F5126DCDF8BA3D0763C8F6819DB907AD2F5699A678153D144C559 -116: 4D25BCBA0A075EF30A38164CDD958965C1F0D915DB18C9DA0307A27FE7BBAD52 -117: CE930CF1D4125932CF246E58E5F1D452BBF8ACF3FEF65380B1B06F78838E9AB2 -118: C61E02A0380806339FFB8F3626CB60F0EDB4686479920D701BF827A572E06943 -119: 93B85986C608575566151530611633159888D84FBD545F9438045F22FC76B28B -120: EF4E34C9ADD7233AA57BC0BC3E3D5AD9F3B62ECBBBEB55C683F137CA35188F31 -121: C2A2091063D6DBD7D84EFE71A0302D6FD8B7F705E3FA313B2B4A7CB9DB96FF43 -122: F473842DF6449B5CA01ECEF2141B2371825D0B36F8F2C5103D0C03324F1B5ED5 -123: A21664BD6737E38EA567960E8080388DC7125580E12E1FFC7566195A85B59F41 -124: A095FCF6E3CC2024BAF5E3FAA22264F6E3BBF020F64C7DD3702E5A441E28FD1F -125: 8526919DC55187817F283A25D35D259E7690BD7897C5A54602749CECA53A4B2E -126: 18049FA72D1ED3A5DA6FDBC611F7AB6EA448C62D27E6EA11786799E9284AD393 -127: 0C03D92F1C2D3A13E202E4CDE765E8E7144157D2791801CA5B4E3DE52AF86686 -128: 058B4C17D5D9CFF1B6B654C25986312A39FBFAF6FB3099CE616E1D46385EF20E -129: 6D55D957FA582356FCFCA8E88E8841C9AD6210625CCB59AEFC092730D11E3E31 -130: 95A4F42399987CA35F9D09B89C769DAAA65AC76041D468FC83E177A14A36210C -131: B8640187180F1EDFFC017A1D9F0ADCAC9833C4271E68AFE37D2D0428B7300C9D -132: 83052B99D772BF42E02E6BA292116EF9B8614F742A26D4890F4FE47258A7A53F -133: 5412A8E71968A250B28A110ADEF902222F2112DC481FB1F47E8AA523533AF3F1 -134: BA8B9104AF732E5A1C864D40C7637AA9CE4D690F63A80C2163504D3F8434EE01 -135: 4F0238902BBB09F15E51DE6C49638E8265AAD173A814ACC00F329536D483A57F -136: A3560CCBB7E20C5DB74AF7CF9D48D7A6334E3DDAA18BA3B90E666AC8D66F8BC0 -137: 032EBC519F073776FEF325B7076F210DC84B704769F067FB1BD1CBD7B2EE3892 -138: E2FF8A40F4C200ACC4D7FD2B3D1FC29BF6C9E4E196BFC86E2E7DB74D85334623 -139: F66A5B3538F21010BE15C44BE69E705043528E13B81F139A4C9B0262B25EA87B -140: 22F707EAEAA4400B321327CFAA6DEC5964CE05FEB0612207DA32315D5DA0DF8F -141: 9DD31599464A2670E87ED158D582125855D71C3E1F9E6B051E3E3C5FFF638636 -142: B4320C714FDA01F8AB0E5D223E54DBD666208E7DB4A34DE4C6B5CC45974FABE4 -143: FDBEAC0713D8D592F1B22DFCAA8D1BD7985827191BE54F1A854E69E0B0BAEBA7 -144: AFA02143102B6AD8CE430C51F206A2C554B0E82F23121C98D70CDFC6DAE882AC -145: A0559B660C738B0093517DA09B7D25A8025050E380A060B57A14FE64F1B534F4 -146: D0CE6A96815C6C929DAE41F04981AA424AD18709008D852E6A3E207306E52E94 -147: 9E10B97312AF7829D553890065C066F6845A13E1F6B9E2EC079BB25EC6E68CE6 -148: 9D78F59940A631AFDE274E928E79550F2123335B67DE99BCD8ACF8898EE5F4CC -149: 47726D6D2460187ABBC09A6819E36BA156B673A5F07921FBFA8AE589CD6A95B4 -150: 5F02C7A0B8B845A1C98FDD443F19A501AF4520A78B559F542CE61B19F8391A12 -151: 7F7941C5702C58B5340444434BEC2D2A1B5A3BB7D40DCE192E700FB88C836B0B -152: BC9AD4682A38F65B08F8A37488799EC2F8224C069C8694E42F2353C7B50AD0D1 -153: 785A82F878A742F02714DD2DC9DC32F4CEDBB873A0887552BFDC023261BB992D -154: D1E291366B74BB0CDD2E258CA27ED44028648536668A2B043C0A56DC1B88C707 -155: 15924860AABBAEAB0094A497A621B76377F809D58C550872443B573BB3A401B3 -156: FBCA0E151017C6F6E2151B754E97AE4A8B9BC347BDB30CA10A2228A6F1FA00E3 -157: F6E32E251EE0D95C0D08DD36E56D3637E4E4505770EBCDC30246A714D3945378 -158: CA659B2FD6F8EE865DF19619AE25CAD7945F6BDAB220926CCB89C945E1470632 -159: BAEEBE9BFC97BDD6D6834D8F1B392A64DAA8660311734E38B3D3A7AE51E45C51 -160: 3FDF504C0AC62302DFC8BAEA4FFA97820B57A77DB8FCFF05ED00B8AA7347A8F9 -161: 3C1DD10F7DCAE111DA82BC7306E230B632DD0F9E01DADF93CAE02DFE77A5279C -162: 3E0CB421A440B65404E647444BC5F953C17B625CD7A8697649B56DDD41039FE9 -163: D6BDA19BB5226B9CB27624E1A85B09282F254318DD3B53E385A0C5C1045708F5 -164: AF7C85956E56D7C835002A80F4C63E5D57E724A852DA3B8ECCD60B201FB8283C -165: CBF8BA797D8759F4F1027971325D7578E5B7C5372DB230892E5E99D931B7497A -166: 52614D2D03741BD372BE7595893166EEAC8D13B7507C821B6D5AFB9A1B233509 -167: A9369AFDF31C080D94F35E73FCB7B6835BAAD7888224E170FC3EAEF3B4026458 -168: 7C248161FF7B1A21EEE44D5A60A4237B4A9F3247FC0A519EBF4DFC165C67AEE0 -169: 9AD8BA1036DC3ED58658BCBA3C18061A7F027E26A8CD4C838E9084A045989CA2 -170: F48906B1852A988D6070A1B5CDFC2E1CBE295217B4FE1D94B1E9A65C4F2FAF19 -171: 0DD50FA788B20A9788E76D10342E398E7095AAEA11C759307CECB9BD846E91FE -172: F9F0ADD2CEDCD4D376741A07C530B6030A4A3610F2DD7ECDAB898118248E1F75 -173: 24DD0F41BD9636D959065DC0315E64DDCE95738CB4EB90CAA74BE03290CD3A40 -174: DC9ADC7C7D69617151F76AB75BF851CD54797DE4D90CCA0F67340425E1603E9E -175: 1401A7D314153215C2DBF25B41CA224A3A27CBC39A76374761319D1A7CAFB463 -176: E6A57EAD08E98D535761CDBB160EA13656F23B9760FD93F6095FED19E3648011 -177: FDFA142853F6E104E26872F40EE1AB57D5DA5DE9CE08F7326FD5C15AED5AD6B1 -178: E90A354AD2DB7D682F62ACD9A5B75917386F200EDAFD7C9F0DF6837C23144BE8 -179: CB25CC7B01D042A730794C0EE610059F469E999B9BC641FE8293555B89F3B015 -180: 5562C634F2E1C294069BBD12D44338DABB0518B21E62C8685994298B41E44D07 -181: AEBCBE009C5D6D639D7857DA88AD5F20A9B8CCFFF405D6C0F29BAF50BF00A206 -182: 503CBC282FF75F2A7DE92EAAE48396C8EC5DDBF48A21770F04A0A60B66C7CF09 -183: B87D972905E0604A5BA0DF448870F66015A30DF7C6DDE7682D6F79E8D313B83D -184: CF6B864A2E53E537BF87CC32061198272036723098F0891EF4E8AEE561E89069 -185: B9198B4C8025B49D8BDA72671B89392A8A4D8845CE79025EA3015CD539F2BFCF -186: AC27C2EE2D6C7C2D45B670050B33964149F14F9108D139E615D90B9261AFA8C9 -187: F4DB7AF3909D161DC6213140246D57590F23C86657E726CAD85C21B6FFF7AD09 -188: 38AA92E98FB4C6F98542496138A076320988932574FAEE2BF040FBCFDD60B693 -189: 070A3F8627A515FC1BEC92186D660D8CDB6F5778CECBF33506ECFBC1E5400A0E -190: D3780DD5C62EA78363037964AD68EDA5362E8AA3B7679D6C6C26C1F0ED4D5884 -191: E8AF6E7FEEAF5F1DE4B904F2D4C4499EF5249F704BE4CA9B540B3549BA007F5E -192: 5F34F18A4AAF3B9F4F646549CD96C154358A403865D497C85571A0A7077E03EB -193: 7E443D2AC1B19FE376BDA10C3D31FEB9039442B6872931F5073DC2981484CFA4 -194: 59A92EE3CEFC188B013412DA75A59951E0E945F3ACADFB4C6FD22F0933793F1C -195: 3876E1CC66B21B9250416D8A7CBE554B6FA61E02AC70A7392938D18FFF09E6EF -196: 44D7ADD7CA5152AF8D9CEBB58253DEF1C39951D1189C9947D02167DDFC922DF1 -197: C11EB21A420DCE67B467245B95AEC47B4C40EA2B5BFC35B5BEF07E8C80668B9F -198: B2A180A0F912A7923551DF1C4CE7B9C90CF87A4CCDB0AE4C210742B1A7ED3D7A -199: A11B004FE0A23CB1F54BA33996B3EED22DA616451F461F44C09EB01BA2BFEEE7 -200: 7EFA86E792DDAA6D10AF6C2C3A27FB4EDCDC605DB11F76D9779F42D485B94211 -201: 46EE4AF99A12FC546A85D9E58A6092E8F6E78FC7014FE20F2F39521E0D2D0AF4 -202: E0D145FD4AFACAE2ADD87D9522A3AB77FF37F0E66A888C3DADDE74DBCB412684 -203: 623DD2D7B396FAF9C283E6DED3B9AFFCC79D13DBAAACD82A71C19DA9B4537215 -204: 67BB86B0689AA3095811EF9EBA3671B3CEE163EE528FCA81EE1247A752F5B11A -205: 9424163ADC8543A5C6403F158AC85873480956DCA34858F40149C939396EE6A3 -206: 5282724162B1661F158DB6587E328DD04FF453538604FA5DE3A80B5C29CF6545 -207: B103FD9C2F5343634F5805BD42561A6133408D7A922852627F3306A2EC6D9106 -208: 32706E4DDF5A2B907F1480B9678542891969DD3B7B7936AAC47A240BC1A51B66 -209: B6653AA2B3B78F3BDC9E06EC471E39248F5D3B8BA9F52C1DFE6024C41AC71B95 -210: 5342C7BF84541ED96233EBB89C53E27AC14C29D89C6E5782D2161162EA50F9D6 -211: D388F59DD69ABA52BCD11007381C00F713917984D9A144612E13CC2C8CF115B2 -212: C0C16BB30E0D3D31DC0446915A76857D1C27D25D17D03AE9927AF918D07690B4 -213: 27E8AE37383AA1D694DA48A8DEFB40E2E42F7D31913019EAF789F7E6F9663C5B -214: A4E87F8DC999BFA61A0465C709A26424A7EB818E5FBB410906FC0C83D1FCC84F -215: 379CD9ACA503B76BDDBA948CAF3FB82C1592EE5D3C802217939C76199BEF3904 -216: F19DABCD220AA5E5E98AF1131F9EC102DDE4789DB4A38042928585321AD40C5C -217: 28B21329EC4B3CB8E0EA6746A5CEEA12791296CCAA3F97F53D9F6DE3E7BAC66D -218: 388CEC5E252477AE29B23EF8C4D5CFF1BB843F2C192E04C5014E92AB1D5017C5 -219: 5056F18069B17BFED7B61FD337086FB375A097256DF36C37D60E8A8F0E01C9AA -220: 54B9DEC9696893B55C43F470BE594B9AF87E141C859460F7DA90FF112C429D4B -221: F85C7DBCA458D5A3AA22E5E44027DECE7D75A70DF4AC39D86AA6320212045A07 -222: FC450EF487E482BCDA6B79B6F88D77A3066694DCFA89DA79A1F26076D73462A9 -223: A76C7C989685AA3E508EA2DEEC1235907F6821A358366522EDD003BD20C9C199 -224: 1E340C35C5C6EB2D6A62164DE4FD99842E92566F5CE4EF1F0384DE876FBB05DC -225: 0B1FCB640D1CBF4D9586E35F734F6259DF1EA2D372CDC3BEF62CCA5A52A8DD22 -226: 0F84DC8527810DAEB94D3BD1965FC6F77DD55675431432301C84FD80A61F9DF3 -227: 1F3DA5BBB4493E7790663A708CDBA1520166649C2F7CC96592EA32717B056994 -228: EEDCC857926971C6753D1D6285E05B528C93DF22BF2C34667E0758B2A280A023 -229: 7CEAF3F9A496F48C59B36CE8227BAF6D77F06D0221FDC1824508A6E22C420A09 -230: 1999B52C1BBE44FF1880482F5C1388B97C054446293D2CCEC1A7DBFB41A9D5A1 -231: D854312B1C7D31FA1B05361D9A6F1732EAAAF2D6489869AA5F1F007123D3064C -232: 205821682182D86398E9ED127B1566FBD15EC53DA9B0848C44BCA4D1A7E0C2D6 -233: 8A187B6F5296DF4474F76501BB153706EAD16437C07B93F8B402C9064A9F2C56 -234: 295F177719C762667615E2F0BD877AC8D335B972C73122C268BE3781EC73F877 -235: B755C081544DFFB214E159CA9EACF5B0F8D832D66600C8FCEDA81E7BF73BB3E9 -236: AAD1EB3F56EB324BD148D11C0D30E73E469E5795AC6E5CF316963FB6D9D56268 -237: 7F85ABC4476718C75AF6ACE5E23D81801F3BF1C5C1106EBF166F93929DF1F5FA -238: 4375AE509D1850EBA1816CE1B0F23D5A1C88FA91824265E7471C30C51C8387C7 -239: 0C42D27AA14279BF6144CF3017B436E5926C857CF692F12F0A163F7F1C1423D6 -240: F48221F68C29DB5A0FBEFDA5A1DC1449B7C7E8A31CB667225779541C5D0D0819 -241: C73BE1389C322116F57610ECF2EEEF4398FEC3691EF89828AAE53FF48F9B1880 -242: 53F24E53C474E330ACF2AD97CADD0008BEB454DFBE95D014ED02E56ADA24D354 -243: DF2DD00644AEE3AB992A8A035A6CA1E06104CBD8A25F9091400C7B3F6BB56051 -244: C9D71CCB24A1CBB0AA78C0EE036DEF475CCA27DB5556D46CE48A9F1B7AA23707 -245: 2FE92B5B626A9CF044B8F6B05A8D4863F4C330CF2D617A1DA393CA4DFC6EFA54 -246: 2F77323013D451A104E704D5FEE77ACE42264CC12B1211C51B56EEA583F251CF -247: 95CA18CDC55CB5D71D9B115225DA6EA45ECD52C40063A4021216394917D59486 -248: D701032302AC49213B359D36942AE08FC0A8214AFF5436E637F6FF2400F9A693 -249: DCF14089BF74ADCDFC21F9E7A077673442AC402B6BEEC534DA9D33BCB88F4240 -250: 29F98AB76037295069E290227B73D6AC616511D9E184B6DFD8011B19FB804B7E -251: BF68C07AC316F6995BB27EBCC5BAE4F3223F9E19B286C467CEF3A5C7AF82013C -252: 831507A1E5747CA5F7CF8FB3760A0934B8FE1A2697844BCDDC2D6BD5659A9D18 -253: 266353552C65FB658782EA5FAC93F3D849E8D9C08320A339F7ADBCDFE865D5FA -254: 1F5A45E4B8B2AA9D2F17686BFAF092ABA5A5611E02DB2D9322F04F6BB4D6D5BA -255: 37ABE39ACA0BCAB14D8F5D2CFC80B467260D2EBD8DA8F1496B4288F3ED807642 -256: 3A217E5A5BC1C3F7AD21B4441A9D1EADBA6E7907835C152A86319A96CB197160 - -HMAC-blake2b-384 - 0: E2EFD6339FB7959727D9394D3BFE5B2B8043C2517755C8ED4E8CE1C4AD4D9B6F594755BE8ED6332CD2D417CD60820EB9 - 1: FD62DC26DCFD3869F9845B7BC4977C831FF6F3E20CC9791BCAC252C6CDE33F6D993A24015AD1DEEA622D8F088987CB35 - 2: 0C2EC4D9B0CFCC5BB5E2137ADFCD2F4429E8945383BAB333F826302E129C446B8CF26FE463BF743B4311E439B0A8BED7 - 3: 951F25322784C0E17CC3A62CFD3E6B99007B054B388C652BB27A81FEFDC4630F38A4C32A06FDB5867F995D4B9B0150C6 - 4: 8F3DBEE1E20D7A77311B80EA60AD0D15D42CC54DD20843C796D924830D5E9962A017430A7C376DA09D9D83CC9C6621C1 - 5: CD1C60CD6578E8DD546E4D483784047D17579685EEE611C32117CC66549B8FB43840BBA4ACFA29F6DE67994DD27F2891 - 6: 14CB6315C646EA25FC3A8BF9D4691A556EDDA84550A25A1A816911247F324C36A5670F2BA6E59AD8CC4A1C30F80ED48D - 7: D0250AD3CDA040D2911A6838A0F35BD6C2D4D19BF39F2323CFB3FF59CC6FCC90218FE5EC06EE52D2C91DAA4C4810D479 - 8: D8B4DD44DA0D235B67834A9EF3AD533F0E38E7EFF4B1366D23217379430D84F6115EB5999E1EACCAB9822039078F6CDD - 9: 656F582FC042F2D574F26CBDBD813F0D8E775B6617A704310BB217195FE11CC8339447FEF682B5576EE09AA39F452114 - 10: F3A8E62D047926615BEA73DFABA6036AC1F5AACA8EDA40F7A30AC8E23429D32CCD6EC3B5E7AD488CB9AD75AA95C3DF86 - 11: 8E356BB747AC4AF327B979889B7FBF3D70EEAFA6FB4100F353CE42894DC97DD2A295D8128339B7742FDEEFED545532B4 - 12: D711E147489BF1418BE3637806E2421564F56DA8E8205F3E3707EDC79FB4EFC4B552A3DBCD498D556251D913E359783E - 13: 55183AFE384C4ADEC219E10448977E93A720F06A26583107AC624021A2C3BA3F0CE6C694D8D69FB4C357420666F299CB - 14: D5629C962AAD7BA82A2076A977B736462A4CAC3D5BCEBEE944DE43586A0CA688BBD3C6A7CBD8743A7E1CA06BAD45F2AE - 15: 60B6E1F3D563E2AC844F4F01807DD6B37BCE8E89920C34B3B24D3D30559C25ABC5C68E2A60B0A3CA6F4CB51C0DC0FDA6 - 16: 2E21AF74537A5CD07C9CB69E02CAB0EA59D600151F3E3F8CE8447FC0A8EBEB8A5CCE2E8383CE4DCA5CAF7F56971BCF8D - 17: FCE5B5B9391E25F7C71804426ADA428779EF3E67425B73981D04EE9B12AA2502BD0E70CCB126F7DD1AD762BBDC5D66BA - 18: 8295A41CFF43C778C0830AEC1518047B51421EB215669D0579EB49786C2421BC2E30ABE56F1207F2309064B21FEB106E - 19: 8774D065D3E5C1FDD7B9763F64D0976AF704A45AD75C9E647B85515997DA5DEB802598FC6A2B04E3F7EE1124107B64E4 - 20: 7358E8FBF71BC83F52544FA1B41F22BDD7D675C00FAA02C473B2CFF4DF582EF58C1E11D04DB173F821C429AA55DE7A67 - 21: 54ABD134B7DE8B9741C505C6E71FA0B10E9940D4A62E4D66F61FFB92A781DF0A3E63DFA99C8CC7EB151C006D25A128BD - 22: EC04EFFEF79926F1520B7D70002CF4ECCB5E8939CBD9F63D0085012D064AA4FEB5D9C67D9C188998B1125D85EB8CE6D9 - 23: 71DFB1FF9D2D3B675C36346CA16A65E0BD00A4F029FF717BEB993D08B1ADCB540E3D41ADF0DAECD16D978DD2E7CDC886 - 24: BD7F33F6E1E572DEE240B05987B3E6D5545B75E05A3E8281339A50B176AF9E89559FBF899F84C45C5F786312E25F0379 - 25: 3A68CCE9E521FD57507084FB92F35D077A56157FAA231822A355CA576EDCAEBC0F7A3410B06BDDE917077698AD38EEAB - 26: C53B66A6C2A6A951537DCB2220748C965C2A11A9AB2A99E15F2994BD0DAE3F31816FC66900D27C00D1FA643E565A8E7A - 27: EDF535F33B45509BBD1302681765E4EB60DFC2561C6372A407A30DAFFAF49636710AD6CC3962EC7AAB239A91B1B1FE5D - 28: 9501840F8943F6B671956D1FA8F1F0355AF41E5ADF88355925820A19A82CFD94D0C09A56F559E769A1249A3C26757258 - 29: F923B9B2F79FFC3006FD4772E22319EECAE52E5969160E8FCE672D4463BD7AC5CD6CDE6FB055A57E024B1DB1CB7A839D - 30: DC03F6713B343E5B3886A224214783085FF487471744C2077BB9D2C19512AFF81615D88DFAE47610B8F9E5C2E953F856 - 31: CBA5DD27F5ADB6896E182B8BA92EED8E8B52CD2809F2694E20EFEA37C09396B879AA0865F08FFFE79161381B8260C0F5 - 32: 631FA80DB857E519ADF0D1F71C120A577A861F8492220A33A884B3FCF56984A124ADA91EE45CC882AE6DBEA323116012 - 33: 8378A6764A26E8A12B9949C106900F02DCE3E492E3EEE8E5B04C82A2DF481C7EA56D7866965814CBCF26A9F793F84EA0 - 34: 4DE1AB2139C4718278990A935A27799E0E4EA9C8EA887D3697F7CB557B84A3B2EF546E96BA0827C103BD1476438F0EF3 - 35: 38EC7AF1950EC2AA8DD21239B1A47E3D6A12ADBD9A6EF4185ECB08BB91832B3DC8B1B8047E2806F312FF67C478FF8201 - 36: F319814A42B9EFDDFBD646820BA4D5839993B749A4C46D3DB4F3D7E60BEB7E865FF86E2F67698F507DF6586643F234FF - 37: 0EC1F4BC8E7CE1CFEC574C42F2321B86C99D0400B6EBB1C450AB6580DAB94FF55433C96874CBD42479127DFD901FB0B1 - 38: 79E1E5EE2E7C7AF254F5909D782424ABAB27C2950F88A9E4C43F9B6A9921B52836F9C8C81968E1C4777B34EF377B8F3F - 39: 441462C5CC0C88BB195C16FFB9EA98C0C11407CB4E8E6DF54417B6EC0348489B2C65CA9EF1A915DD8BE90EBCDE868286 - 40: FA3D1D50BAAF3D9D76C5A7A5E04DB89D87CFF66520B08FA494BECE2B9719E42512C2C486248679F29F1011DDB966EC7A - 41: B8BE44C7FEB0B1FB157C53EC1312EA39E946A4E18E8CC36B844CB56EA33414996B9B6EC75A32347A922A2C42DB97759F - 42: ECDD3FC94B8E383C630E10F898F5168EC45535296486898AC1DB918B216F21964EB8AAA22F7213E5DA541DD814EF5DD9 - 43: 3C8829344F9291A7820FB6028CE6902C1882B02F5E9CD953795CD475AF99424F26A46F191FEE305C91B3D19F9D0E5893 - 44: 1FB699939257BFE62AF561050E015C8A25F1517BE45FC7D09D8AB6F9E7BBBD731B6F8E3A37A7D0E9FC53F102E6B5AD8E - 45: 2924B05C3BD1D90F5EB35CC80294689BC24438C953133F0A2952E633A75C66A03032C5F7E58687A88F6DBBE28F8231CF - 46: A504DC744A59DAD43D39C4BAC7D82242A859DF9810A2E4332FD5B92E251990CD2A7211872A3F8251C225B6EF29810114 - 47: 6517D9EFC8D9913A9DE719B19956C233636502B227D40CC392CCF701B04AE380FAE6267F7FDE2DE9ECF52BC9FED82C92 - 48: 7BCC833628CBC705490F8F78D181F44922B87397262D5F733A8734BB2CAC417505B1298E66F91AC7EC528A51B171CC40 - 49: CFD45DD9FA9F81998DBCB5D4E8AD4919E72F5B45449772F4337B1196DB3B1EBD88F5F386771E130B442EB76E8102E59D - 50: EDF591D79A4B8FEEB4279A7BCBA1AB707807BE65F1C079E220889E02EFCBE50B875532DF7F2632F59DD84C67E67590FF - 51: DA6D781D7EAA9EF0AA2EE8B37CB3053720F1854CD3C52042241D2111DBCA50403897741F2758340033A4D5D9829F3873 - 52: CE9ED86F39D72B58572887E90AE9820536C19C83FDD6331E87E9D7F4EA8C30E3AA73634B37784A9105757A1DBDE3071A - 53: CFBE3DC40F9DFC95C182EAE98CE49112EE1B53039C8ED5CFA4CEA89EAD3C4704E1A0BF10DB265616D3AECCBC7E882376 - 54: 75641A027A75259077AA0C2A88CC3E2D3F080FE85A4BA57BA6E1380CF706AB7483A186E0C5D37A0DF1001DC019FB23C5 - 55: 0361A72AB610005DBF2A462CED61C373F2F974A198AA48E0201A10866263A37A2E7BC1F73F9CB9A01AAEECB87A5F2063 - 56: 79F4CB0E66F83D5E263402745A659D01CBAB5FA3445837DCA117DF8BFE5404BE3DD13991791C3D95282F74878DF48D79 - 57: 588E0535C5AD19DB03A6B372C961DFD92780AFCCC4EF735F171551403F5DF39B3864705AAC7EA328C0D64142AD74691C - 58: 37225AD3FE0A9D2D1990AB1D3BECE6C8F2C7A33340CE9ADBD07808118023FF0F586136D44F5ACC2866D5E4FC9B8AE697 - 59: 414514AE03092F33676BCB4AB8D28CDF2922550BBA91C817D84FC09A172EDEC6F0ED39917D0625C039CE6214F2DBE41F - 60: EA0B5F0ACD91D5B69E6BF1F63C68196F83098CBEFBBDAC5658058235C792D23AD36167B8F55DF80670B96EF12ACB29E5 - 61: 362E8BB7017240FAE5A2F99A5EF1331A725A9DC6BF56394328712018946EEC09283E883E784E9809F8A78F635D7EB6DD - 62: B4354FEB9077B24A3EF0B3B81E61E3E566638BF565E512975D5FEDF5E4799CB9B81FF63E50ADBBAFFAD2748C8F2639F9 - 63: 9AB65961D0469D4589FD4F9A48963380A8B17FF59DD43212F1A00D77FA2DEE2380357CF565E0529B97486EC3A2053DF7 - 64: 527C5B164C63EFDE3A2E939770E090FBE854ACE750CAF785FBEDB0372800A2D46A3F0350B9FF16F41C9FAA92531F01FA - 65: 035FC236D413F377297023DA1D546EDD411206DF534B84A92E6B9BD69F2E1F274A16B0DF4748415538922FCB7F79389C - 66: 8088A71692CAB6CD37E2A42F45FF42A3544BD46A6D15F7F5387F330BF319BB471C0D35F3B0A8D6432D3A8502E425C125 - 67: 7AF755B9F4A083A3CAA0FBEC99EEA92605A1068D7558A7F0FD9D6DE307373DA5914A2F9A0447477B53A5394C058192EC - 68: E6147AF3B75BC28BEA40801A1AA392727C2E5316B689497A1F4A1762A1C4B5FBCE6965447B8DAB64CCEA58E09FC0952F - 69: 9B6E4D670B58892239F008A36B5149AFDCC30BFE06DE660ED5A753601B24DCF454E9AAE4916FA01256F30DC6E3877640 - 70: 7C5F4C73736DB27312F808C82A2198B43B2383DC45C7CD2157A007347A71AC720B670DF8125DB55B483179207B2EFE14 - 71: DB313F2FA18EA1043352BC51BFDB34979EE7CCB2CC044FEE81AC6728CCE3F70A1BBF09B5266CDC3B7FFFDA5E4DE03639 - 72: 55B092DEA6591D4F86589EC88B141171D5FC0CC84CC228A97B7A6304A0883B12917FB8760AB9F60B94E62AC1A3DC103D - 73: AEBB75AF53EEE9308955252437EC885AEBBE0478438FF547872E467381D0BAC5F4BBE4137FA639DC50B24BAD50DAB32B - 74: E340E236ABBDDCFD0C0A1228142598FBE100C99A0589D0CEE53B5D40DE3517F9B906AAEBAC2937911F226691E211F751 - 75: 736F6C28068FFC1D44AFE915EF2B2E7080AE5D7AD12E14F6E1EBE9561898CF3B2539B5975B59D9BE7DC5838D9B914710 - 76: B05D067F50C57324684DB5496D4C562C4F924C183366E7AD758C860A96674231A85A2C5677DE42166EEB1FDD46B761F1 - 77: 5D452939CA0ACC60CFDEAD461341E5156B0AF6C60246A57ED74B58DD7F56FEADB3ACCBAF5E3F1CCED95117E6E863B4E1 - 78: DBD083E3803651EB26A8B3BA59CC305514C431C9B2E6A3E5A856AC1885743F4989B8ECA528050881F78318F8D0A729B2 - 79: 9161AE833EC63E004C746C22424BF948DAEBEAA4707AE86E280B8F862B0C24CE44E234238AC0908A249A2D1BFB5EC0EF - 80: 471482F5D21D9A9221A48B1DBEC3839886A6F5068A34B71703DD17B3C3D2DEF2B75EE6C4B4504111CFD5FB3DA053A0B0 - 81: 44A184362D8C177EA74FE67EB320739A0B925FF2801A18311AD66CFA278958AFAA33730332FF77EBE365ED25746C5321 - 82: 7927B2779A8D6ACACBE4358424CB3C64F2EA07A80E4DD285357CD419323A5881772478C2F02FEFD75ACAB12D08AE2DA9 - 83: F765DF552FB090EC0F8B09213956F33A06B431069D21482154697BB8B12610C33D49977EA17197B329605042CDAD0939 - 84: CEE62CE137FD4BEE1D2AEFD6960570381215A80F26F64B9CE8E5B14A856E709A73E4FE49992305D85D049990833E6DF1 - 85: D971969FC958394FF1EB2EAB642F150215B299771545F8D284A0EEDE5D682786342583E10D9915F1DD52392D856E3A68 - 86: 8299EB80F7BBDE6BEF9DF9C672BCC5D337159BDA98D31ED12E05D817FA13E845FC6DD35474C5160F6750FD588157E6D6 - 87: F0AE246C4B3F76F5521F436E520F643549172A6EAFBBC4936C9BC65C9BCB08811F49E4A846948E487222AA50BFCCF226 - 88: FC3F42840F420C1600A626B62EC755AA0D9132CDCA6DC813AE33760BFEE7F7A94AAE90A0D341E192BF76E3F9D0EC88D8 - 89: A180318386F38442BA5CB295DEE7B141E14AE9B1F92A4F9FF06ED05A7E79845B4A3150666E1503354E4EFD3C9570F3E4 - 90: E8D9F18BDB8E8352629B37EF7739A8BCFBBF6AB3A45F0C6CCE01DAC73C2E4C8D509496910765EA597D2EB30317B665F7 - 91: 6BBF88EA3C5F2FEF60C3EBE7FFF3785B408ECA7DB302DFD901FCFA2FA62A79BEC17CFE5D5C77AC8F38BEC89C93CA5CC0 - 92: 8C67839CDAFE394B0FCA9F451816897BD2DA79D6239AC6BA3EE2814200D397149139EB0AC9B40B463300F4DB17D60EE8 - 93: 8C1D27302D2E863724F2A43CA315E116875BD0EF5763BAAB6BEDFD4076A79BFFAAC92C58BD0113DF2A06305050A39D6F - 94: 680A61EE50A7EE05C3ED32978700EAF343681D1D5C4DB809D7A57F2CAE74DD2053C95BDC4B0ACFF8237F523C23B19F38 - 95: D529A04670F78BB2534AF1DB96DC30089E008C4288C5DA568E86DCF03691D3C3598CA8D120D62429B44FBC70BAE524F2 - 96: DD92A0E9F336F5DB5FA020AAE917DFF397DCC2202207FC740A9524FFBD8F526D5C263327935CE661631FB94D4501E2F9 - 97: 5913C2E17C0A96E6DF7A7E96FC9BF322BB9F7AF52A854561851DE0F1B3AD1BD34C00FC64CF1588084B06FAB7A7050892 - 98: B451025F6B29E5BD2706DB48C8650BA52C09FDDED4DD10354AA7B216DB0CE892ADDACE734369D06A70B5292F60E5BBCB - 99: C734F13F7F8A7CD01FF83C227AB3B7610D1A0C2E9916E1581FC742CD48DDA5939D054ED3D8A9246C2DCC50E65188FFEC -100: 9D5FFCB1CE848F3625A19CE0DB23CC503D4883080A01D7B66AA259FD5C35C72DE514E6606827C0C9533031E2C43EED1A -101: 8A573FFEA77CF501014B3B9221D6F99F8053CD21AC1AE88BA8B14F021AB746B3B8EC29B390A8118D3DA399F9EA03BFCE -102: 41EAAC7D7256DEEA1086BD42FB9F5A56B7DF5A72B421B6864C24E4D8A0FF3B4F0474B3F0D9DB8B9C6B4B6D214676C297 -103: BBB30E99F1AF1FFD99F379794F1E648A0BF31B0F0BF54BADA75AE5805F56A62D8DEEB540D836822D958803EEB7221BB1 -104: 701454FE6BB3D850425A69EE6F704066D8B2B0C46BFB751F8326BE50B79976DF6BE26D531CF0E2AC972AF7CD38A90075 -105: 3B740773341FD606188A15645D651BAA30B099D118CB3AE776A90DAF104AE909D2A600C2E3913E40151D7C181C94390B -106: F8745B6F95C5C1C6FB38A5200BD2A3764FE204D95042D450BE2D7FF736DB233277091873EA3C6D81E6DC0474C6E62D41 -107: 8CD48174E2AF8284AA1F9A9CB6A292D34B6033C131C7B515A76B031BCF6FD31D61E1A741565F249DD02BB8B261501364 -108: B36763DAD5203A088DA3D7FF5A0EB55395B2DF84F9EE9F80D026712509DCEC082658DA4F1EB56F73420445BFD7247360 -109: 24974EE4EF4FFEE37AF1468F0344510F06B3C70D144EB104C65F6114068CF0B0511AABB683F272831CF07E843FAA2675 -110: A4ED01EC7592E6D0098B94C6127DE2FCE4966A3F5DFE1B8BCAE3753AB2F35CDC5A5E106708ADFE841FBD05088634297B -111: DFEAA792C52A87331AE508DFBDB4F22BD78A4C8EA7E47432CFCBFB5D863C73967CA55BC08EB8A29B1740301D4C8C020B -112: 634C76310A58733639B2FE35B9415B44B48B7B9EAE420CF7A726D7F2A9F709B1656F8F2299462006DDCAF9310B642313 -113: C1A3D84BB1EA2E84D6F5E7D9F496175B03F4836ECEC2FC6E3FB3BD6AFF10869BD2DB83340CC0583D76DC6C39F8F2266D -114: 84866B02820563FD6FC8F0F7A207D0A0C1F2C9730B8EAD40538857BDFA430AF4F38CBCBA18820CCB9EF10CF280691EAE -115: 9027038D0229A8492D1860E324D355E0BB0213065267974E535E8B1C717B43A390849010A08F4E3BC17470E1F4B8DF2B -116: A11B02D14B6245A7078D014B3C1414D1AE525197562AC231BB65E657AA4C55D8B7E3207F05235625EC978F9E0F66AAC2 -117: DDC3FCE5EC879B40F357383EE8AF8C03E7D5D52D973AC5001C100F203EEBB50CC9079413F35527D7BEE94ABF9A84E111 -118: 1D82DA0FD448E244CB1D0613A427708A7112BE6439106D82C55BF43A9A042037A003BBFDC8FE3F0C441CBB86AA15BACC -119: A3FBD7034E0ECA79C7A700F8172C5EDF4B7744575EFF569D0BF30F3BCEE4FF7E840983314503134F0EB3195D84A77576 -120: C098DB022B3ACFAF41B8F7F80CB2B9342B92D5F29F0E7D4C94B3766DBE9199959EA26C918C9880624AE5BC397A517368 -121: 314BCA818DEA9348AA65C7763C2AAD9AE264EAB16D703558C02FC2AF51698264C931D7043EB3887607134939013512BE -122: 089ED8BB4FB29435D5335F69EFD141EDA4AEDE8915CFE9E977CA07BF4013522D033783BCDCA2383A78AD6A845454F39A -123: AE35563CAD3B5D3C89460738CC67CC5084C1156F4EDAAAA392528EAB775767BE3D170E9BC46727DCFA92D3C01020B8DA -124: 7C9DCB28F423EC18C5C20A5382C8A9156C66418D5561EFE536A075783CFB575451B3C8CFF49CA0227CE10B89D5E11832 -125: 727C87FBF18D07759FC2345521EDF2F2E6C2B6D6172384AA29AFF14B35DDE8C7FFD317C98067686F0E9D2E7E92DDD8E2 -126: 91834D962C8B21D76488C34C723D54A9BBD8B8221146F47B31E4258540728F13C562A7854AE441D815F9F65FBC3368D9 -127: 1EB88488E2E551B7982129358B58EAE0337CC576FBEAFF70CDB61B6D6AB3803EFD6BC54493625CBAD64C282DEE0E7858 -128: 19ED96EC83E9E28E9404EAA475970BAB64DBE0896EF0DB8D95EA616BE31A45CAC84DAFCC8BAA70755B04F6DC0D945021 -129: 2054B86EDB891F52780CD84FFA0EAC642260BD8CA09C918D1F71FE3C27956813DE031AB48366501D5D9E0CB65598A4AC -130: 4257868D9F21A3E2BAABCE4DBADB6DC3468300816EB50D6C58837B1FA4A304488AAA0F5D349B258F7078D11616B41789 -131: A755057935E507328C1BE2C725EB3EE67A4FB717FE606FDCC0DA64BE7C8838377980D86AA5E97E201C2F01215BF094BA -132: 42711D9C6AD4B94ECCC7C533EDDB55946535A448924CDFFAC10C0BCBAC306035BA1110128A189C03E50DA32979A97ABD -133: A821B802D1AEAFA0F18A357667D9A1DA42B4E6B2D282113948853EC920A00B0A72EA4C03565D2EC8DB1512B414A830FE -134: E2AED5057A1575F4585931DC8CCA533FB6968874677AE582341B36FFE048E827B6E56446172930A54C1E80BA7944B921 -135: 7E9DB44CF172ECB6098D18BF4B6C7AF30860CB188E007121772C025698869B44F4601EB19F4ACD729CC53020AE638F4A -136: F2070221325B3A7EF6C293D72A424434E7CA170D692698EB9B579709639AAAA6A7A7154336BB10A476E97FB4ED6C345F -137: 31F32411B9503FD8CD62EEC12B918983C54362B37C7D6F5ADF83A567EAA07063831AF2CADCBE9A111BFF5161AD51146B -138: A85AC180EBAC3E1A9618D1E0EEA6B0DA5B27C68D2D88E295E73AF0697CF2D3B885C1DD06AC5BFA70DC6B9E0F965BBDC3 -139: C42214804ED73A5F1FD4A338551407B6D8360434B361689BB52109A599786E9421E90DA2815117E541D472FDAB15C42A -140: E539B20117D2CF436BEA76DFC2188DB326F934199A80920E20AD586CB509590DFC9959CFFC19DBB37908810E4F2E9512 -141: B74FC4881EF4CE3E23B82DEC18234EBE8800F42346A817D981F89B8DF36BB9F0E1B487746D9167574B8540E6948CBD01 -142: A71ECF63F4070A97088CE45B133178B1F016AB4EB1E1492E9550ED1F70A9B6F93B7B465F06BBF56459D45B92C08D7DAC -143: CA3B2259775466D0D61600405AAC2016DE7F429DD0CC38A53033038EB3C0E5439D94CA05086E0788F1178130642D61C1 -144: 8FA70E0E92CD8ACA06E90A1ED458F855B6E34854864B00CDB3C8A4B5C0580F233DC0E3A0A937B3BCF73CEFF9F4CC0FB8 -145: CAC112F9253C329E563F39234C60D0884C7134151FCD223408FCB170F2EEFCA99DD44DBBB52EAC3EE0A6462607D715C7 -146: A24082FA7E582205C3D5FA5C7EBC59B4BCB8B186967A6D452CDF8054DB66E3F3886EC2201E481AEF11D52D5D3904F51A -147: 36FB3AB6EA1D963E78505810BA6DD59E6620C252E36C6F67923DBA86FFEA645B6F66E01D8DAED25E4770EFDED3A56D58 -148: DBDADEDAE3CCAFDA613FB76E3A226B6051DA4EF8E3573F8A58812263EEA08C5AC2A0EE9B0E688417AEB2E46932382E15 -149: 4E464DAEFAE2FE0BF15713A05BB2F1B029A30CB02FF310D38AF90061CEBD9B58990265AD11515D6E6582480CBDBB6BE0 -150: CA8FF99C97F003EE17D0186A0354E63021B6D27C93A30F1C4C7F3ABD3DCED4F909648B16D3D5635D80D6985A4631575D -151: 61477F9D04A7D6A3CFCCEFFD2460E62B5C60E938CBB67FE615578C0F0E4D410961AC4A9541C32F30BDAA431CFD85C53E -152: 6F7257CA336EB5E1E6BE568AE1536D1A289518242B8DCEEDC4F9A25F461608AEF58263F8233C7D3CEACF7B354D6BC75B -153: 9BCD41E8645B7C76100F06F9AC3069EB27F403D2B6F1E69FAB86806EC2B822C3D1673CC4E05FBF3FEE93903D6B3C0424 -154: 69664A375C8B9CBE6ECBEB7E74B3139E9A3A3A097BBBF3CAC1E13A4C4E48DE877363FCDF907A99C69A4F52FFEAF53547 -155: CBA3D3ECB94A89CAF7591086355C79BF4DD67AD3E472BDBB7C59C51760C195283EF45A1F9A8A4615C9514A46921358B4 -156: 4D9697E846D03F1AAF7A08A2C0A9B4A9F4CC546F3433CC0773568803E050A977FA14DC2BFDC3D2C04FF29629939D02CF -157: 1C67DD9FAACE24FB125657CAFA6AC6A77D20BB6B90E5EA6037D3909283F6C53EB23E8BB55C2E67B05C8FBB9ABFF27458 -158: 0366F13C0469677D6B2B26830D47B56F2BB01F4CF46650B68C378174AF0BB130F848EB8F5960C43F76A8793C4AF1FF28 -159: CD76F0332A14D4504DAFD5A61FD33FAE07F5EFB6EFDD2625922CD34C1E9544DF8B5E5DDD9642450484729BD56D6A2746 -160: 2DAC6B918E8DD8B0D132E13A6877EA03B3966CE8DE035F36E63EBD97B8A00939B8672225394405BD3D8B36FD33013AA1 -161: 97E443DBF8E9E7FCFD85BCFB168F8BAD57E54514671EC1558815AC2DFDF9E0D4DBAD3DBBEF59DC04151B1FCDE5C7F13C -162: E56C2FE55C0D1577D6B36A6F60A32EDA3E57D42A8252CCF96E974E0AB5CBC27F235E6746B53919228BB8F682D6D5EE7F -163: 2D6AD4813885ACF91F86C480A2DD8BBE880AAC61E7158296BDA71927A2E3998E999B71707156DA2B8230EB81DFB631B8 -164: 9FEA4C7D949C7F5F29EF07DED769A6C2572E9C66199D1E7F12FD00FF08D21EF0AAEE8A1BCADCD954D704EF18D030390E -165: 2CB43085FDA800D08F45795FE6C637A5F5FC7794C37FC5C3C04403C7D4B4070F7202A7573D5CA59E6771F38CCEE33036 -166: E320A25015B14E2E8D617F79BFB84A7196F3DB1499D55072878267E5ACC39D34AFC08C18613F5EF8DAF4090CF27FFCFE -167: 29D4FFC8F46DF51A64E3F791AD25C83B0B0D371DD1866B869B8D56C67EB13518D6A4AB3AC35E6A1C2852298B46D37E61 -168: A1D665304B97463D8F8A112268C1497492279DC444BCDAF027898849C1C18620DC153A97DDD414975034FCE74E3E4218 -169: D885891B5B53C7F5BDAF932AC9D7C1C1FB3A6B70C62D4F87DDDA96E275441076BC78BD973E62710C9DEB0DA086BB6D89 -170: 655D51B2657DA6BE1DC25480DE76891D272D46DA414C42CE71DFFC7B286E338E65139E408696B6CB85B1900329D9DBE0 -171: E51462E37921130A0F606FDCEE5BB3A249B585EC58A6682E5FED0F9923B3C9A32F22662A9598D98D385C5E102A75A5B7 -172: 2C5AF48686B5E76874216A75E476932320F9CB51E9531C8A2AC6E8CE9BDA572277BA622582AF47DFFC15BBCB38AB8E4D -173: FEE7759324DEBFA2396958EFDC3160BB13C64EBE55E508734C52088CF3232AC947F33BC008C0BD243F22950C047AEC4E -174: BEDFA50FAAC1F34D293A8D98E3A4405D72CD1872374730380FA3B698E3442920AD79EAAC275CD677019F0D1DDABC1294 -175: F56A79F5B5E92A2A5FC65A346998F295902A8A053A746F8510C4E69F2A35C3FAEFD5E3C67FDFB4707EBEA31F89317906 -176: EA5053634CE6D8DD0F7B79D8ED76D5F74E2A431F030D8D1316BFAB2C951CE16BECD0F64EB658F88BD79D516D0467AC65 -177: C8E5C1CADB69B1EE867FE5B04B45E9FA902DC1925A43485D85AD4A277443C00A8F944193D82B3C7CD58D7FEE76025E40 -178: BCDC2C7F802C5BD9EB938EBC2019523C4371F880FC7AF0554A4721EF239E5E2281152F778E83CAB0A8CD53ED7FC00A75 -179: CFA7A667D2698673845AB3A9C9DD75499F9EF73390B217E705915D020B162F8C27DBB9AB86373067E7C07A3936C237F9 -180: 63137A5EB0EF084FF9E5C9D0C74BA377CD451475C7AF9957505E740EB0A92FC9AA98E9D9C6A03DFD12B28EB7D33CD200 -181: C7CE724583E363C93849FE094E92396CC84DE4E4BD044C5F30B218B8ED94507F6150F288F0AAB05E1A30819CB246C72D -182: D5A720A6565CE2AEF83F526E3F170BED3FEBAD5F8B61FC7FE49EE530E00A4FC6F5ACE0A515543EC7CCCD3596F3451203 -183: F5734A0233687B2033247BE55A785ABC456F3F6A5A98A473CA2879CD7A6C4C662AA3B2C3C274102DC86534A4523E95D5 -184: 2131B69D8CB775BE7D6A2290088673736516690CFA274133134A75CE921BF44E3AA37DDFD1A25D9ED479349F29F31DC0 -185: 6BBB74C46FCECE23643A6B84E604697F6959975F7FC2B27D11143627C97429F0D25AA89975867E17F4F66B8F14856F9A -186: F15F4198C827AD8E11F960E7BF0A4FAD2A8E9B307DF2B0C2F25E2DA96A2659C19B89E41FF6BBFC5F5BB1518E5B3F829E -187: 3DADBAFC2AB64BBD16CF0AE08F4BAE514FB74DF35873F7E49A96FE2A84B43D926A485EBFD5581B061729700A6398F87F -188: CDDE4E482B559A0881F04D6DD84DA1E66FF1E81CDEAC1337C3FD413EA870F87A50A4345C85D624709116ED13DCEB0C63 -189: BBFF34A1A43ED451B4E9C68E4399E99C6620D2686541076BA3DE9279B12D973E6056C467F8A4C3446AE23A5C261A4B63 -190: 6D0A63CC63C5B4E5B517ED860BBE4723F4FFAE2934EEB7F59B2C943C9373FDE8DBCBD325218AB377CA19EBEB3D932BDC -191: CD2CACD736EAD27492B8C3D2BDFC78AD9C61A090FB78B6C4B9116336352B238BFD1DA6C0A5093ED726B4FAF8E974E034 -192: A0D37AB9D467FC6219B7FB93D9171D0AF03767535608FFBE0A575245B63E088D3C0DF387B0421B4FB7CE28BEC98D2761 -193: FCA0DDFAB1CE1E7C30EF3B7C6F9F248C0F19E926B4E5769EBCABCBEDA8A4D3A66F344E52024F51BBFB2C275492AA6DB2 -194: 74E588693CC883FD65993D6938DC75BD257D8E7CB4E6958B4FD9A0214F24D43F08CE55AE4BF4C819142DE23C617ADD3F -195: B6945DD17122105CB807F571900C1416C3AEF9CACB76142E99A8C689CC58065E80693E0314D327D1DE144608B913497D -196: 0C58F4426E2C98FF2770DFD52DDF155F842CAAAE70FC759F7D9304C7477400EB263F6A208F1DD9462516BC27C18A1AE9 -197: F47D69B24FC88DEBF4B4060F7C5702D57AA2C84F25CA128E0E99D7DB0ED45629EE90C5B998E64076EF7BA288CD69D815 -198: 82671175BFDD5105D1C71EFF4411C0C8FF39199004D23B0287F0044902398284D6CE8AEE33BCFF12376F54FB38FC64B5 -199: 10A389495C6C70DF373C08959C8561705AB0EDBB8F0277B43E7D0EC3B6039EDC6E64BC94E5967CA05A24FCEAF312C898 -200: 6D5EE1DA84548AE17ED5B8AE43D2CA3EB1FBEDFAD17867B32A4DC33B60C937C76D27209B4D17C940C512776537951A60 -201: EB4128D7F8D3558BA72C46D2DDBF9B1569DC86ACC44AB2BF7158D9F36C85434C3C7AEBFF63F0EB5A7EC46067903AF21B -202: 068852BDB5B1739D3AC05D827A1D04B8532C00AAF960850E38B86C80CF52B78D6AEAFAAC087CDC8F95E2953B917BC042 -203: ADB26C7180B8DDD5A18A1785B17AE145EA9490262472E59B7210E456C838B02B3FF85C37396C9DD4491999DF5714EB53 -204: 1F8BFFCFC5BC86711F30E890A28EE15D628805533EF977B0B7ECDB6458CF5AB670254571244D245F20A115AA72678850 -205: AF9E79C1B7C82583172AEBFBCF70CDBBBC5A34145287E48ADB0B0CDD1494E9223B2EAE0DC5E3544DA2907924A52C57D1 -206: 320E6240B59F41A42F2E402388137E70BDA609B7FED4805FC8DF568389C7F14A014ADF4B736E07DCE3A81F62A5936ECD -207: A01B5AD0EB7AEAEC76AA74ED3FC833D02CEFBAFBD9A684A743A05EF066B5169610FF25014CF4E3C9C09830872AF16061 -208: E3AD4F0E10B9C30E2AA3A092E4F7A30A89F3BA81E1B19E9FAE6C6A5A0177AC757D6698AD7FFC783A82D73236A73A056E -209: DC0FBEF72A7825E19F0860E60F0A930DAE3110D10FDB4CFE54C272F0C21D5EE1B1141318C689525E9850AFDE95FDFD7A -210: E40DEF10CBD64A69BD099D78599260636E8B4D5CF9CF03E44B878BD6FBC40AAF723E5D2C7030F05C44BDB513A294F008 -211: 56921133E67F37BA68B8E29199CF4A106FD7433572EDC0CB6440E9EF383C4D0963EF5739C3388B7ADD10D226786AC559 -212: 05111EE07C8CA9012300DC99E2225D4C5F392A04D4577C6238B2572B0F97BE66FA51D364234BA6DC39A8720B04C0BABC -213: 779B5A94AFFBA7EAF658EABF146CAFCB0F2C3F5C9213C11FF8C776A622C098C92B97655BE378042D2336084135832246 -214: A411430E3130F45F2860037C0E2B8D1983E90E766C75978886FAA3EF890383E382FDDC9B0D597BCD428048B3CF38ADBE -215: 9F0FA131949F9F24EE83F648F582F0ED55F684E23C9D71E726B53CFC74F83D6E5A7026D0728BE1139771B4FA04C7183A -216: 54BFE6A248940016B6596A18BDA3A5992AE03786AEECCE79B1B0D4B4E08985BD1D0C23DCCBFD1B2C89D5CB32849E93E9 -217: A7CAD24AEFB8133CC76199EEE5B8C789F7B37F3B43EF0B275C777735634A698305E4E975D0348564269CEDB846EA69B8 -218: 350D613190376D013DA493FCC24C51CA33285C7189E9AEFA9961B3F44F738ADCDF8B2586E9D89775FC920C2ADC4A89A5 -219: AD0A4640DE8ECFD31F506A6275094A677EC0CB6D9541079044B43B447573461B58EAE5CDF02D2F3AAC15D2D931EE9139 -220: BFF1485E7ED73F9F69BF067B11A7CC4DB314F4DE84E938A13DD38D8F67378D0419EC3C8BC8710851CA65841F3D938907 -221: F9FB1B3A553E5C5E8A00821765EC588A241AACF5CBC1CCFC53FB67E3F7E7B906CEDE21AEAAE6746B9D5CD12BD87B4198 -222: BEFE21A4D11E36CB1ED0261EA4509BBD6D28154B1379E20FECE905398EA671E8A3B856CCEEDED52818041D33D6505DD8 -223: 3DFC0D4F04F06E6EFBFAB1A5B4F9A363920E05B7CD6634DC9B8CFBA0B7AFE3A5C1CCC259C14B3E678A047FFFB1C42B56 -224: 5E64363560488187AA20814DB407E1A9A0E725DACBDB54FEB4E1102723961D01D3E9CB4A1023D1DF8FF131BF1E13E305 -225: BB35B77698B4819B0805AAD6363F65D597733DF0BC963B682082598E8D62BEA4BEE6952600B3A2E5B03993A5074777A7 -226: 4A8A2D66731901AAC2F900F9F94E21A661A63797AE5B51F8DA52C455EE498AC85C02CB5525F1266F43FDC67C6DA6163E -227: 707398E730674378D3242D5FD94DB93EFB0D93985F28159095AACB46503C3282AE93915379F9FA9DBC366AA8B4FA62CE -228: A59EB986281305BECD1703D1B4B00EB973B568106F04D6BED0A50CEFE312244EF5B3DACCFAC22B5890C3D6BB4D920848 -229: 7AE5FB1CDA1A4D7EC9A3A377A65F3A5F2F5BC800CDE0914CF18351952F197F130BD07AD53E16F613D9AB49B03B56DB8F -230: 8BF00DEB53F777780F77FCF14A524D53E2C3696F9C92EF54A5EC2777BCDAFAE1325EF562000250BA030ADFB27ABC0592 -231: E893ECF629A4C56CB45348FBF5FA126E95E3A60A0E590E75AC5FF7DF22BA609E72B7612996A84E8699F479DF8BB19442 -232: 88133645942997BBDC2CEF36E1742959869DE7494BD334CD7FEA8C7FC736FBB61E1DD952B43E4749381F440526201B70 -233: 8D6ED566DAB6634E1CE4F84C36A0112818218F4807FB7DC5ECE8F3C0055EBD5B325D496A52142519CCC3C769C3B65340 -234: BA2E0551EFC0A796AFEDCA3DC46010BF00D57CBF6B47ACDEC02DF67ADD7FF48EF4CC9B448C2E1014BED0133DF36237E5 -235: 3198B778718E3993EDDCEA855914FFF73DAC1BA04AB4B88461478D367EC4298BEE008F124B8AA142D314AE6188B0CCD6 -236: 532CF7749CA59217C79A83552A3DFDFB0A49C568D109BE4DD84462CE6508E7D64C0C2455D583A8FDE0D3A62289BCE552 -237: BBBD757D7887BBBABD88C247E748417C99F9AF1150E863F214264573C3905E3F85D1B715EC10899288BDAAF03060C329 -238: 7016FA50616A7EFB191520C1E1C4D2ADB5C5EFB295CE5CA387D5C786EE26E04BD71F5A3E0A3DBEEF6443E788DE35C5B0 -239: 9D41893CF2B96B4F488E4F693EFFB7F8DFADF78046EDD8595A457798ADFCB93F54525D5BEF065C66DB04084D855E2886 -240: B1770A7CEF9AF476931A16FF8C75F202CD9DD93C8A0BC7253B3DC72C7B44A9A9084BF393566526672F5AB383418C16B3 -241: 0A7285626ADF287631579108B09C4A8824D26882718FAD2EFC16C52DA6572760609DC05C683C31BDD88B63986750868A -242: 3CD0CFA89227FCCABE4069EBBC1F9124589CF5746BF5E2C34B7A0117D66E03CEE6F2874DDE05F02E3C33244567BAB346 -243: 9770ADFB0521D8E48134B11130B0A3F7729A24E44969AADF8A420737227E89E5EBD3DD4173F44781E2E0AA8DBAC2E7D4 -244: E15EDA14B3D4C927A427B0965BC1F3902D30E432457F74A303AA1B93DC81577800AA553EB5A94C474E62EAB1CE511055 -245: F2CC8075B56A3E5D4EDB69BD5F4091277A8470A2212A8E38053EE2F138B18BA815BFA57FA46943F47825E0E45F2EAFEB -246: B12C0FC3E3F3E03398979D0346022860091F94F15E452B58F3FB4748A84A5569ED15A66A0F0A553F60859E8F02A74C4A -247: 9968DBBF29BC7B469CFB8F7E3558AB75DE232876807E81F350D50A7B617D823E6A3E853AED696C1B2622892277080227 -248: 7DDAAAF3991EA439E6454FF0652F37F81722C4806C643B7AE8EB4E5EDA5B026BC0B7703D065A9DC12E2AE86B65873F7B -249: 093A0374C170E26EF7743289AC8915FBC5E5B07C0D5FF56D954DD256C78B4A926DAA64C110603391B545AF1AEDCAF707 -250: EEABCF9609F48CE7E2949C681EB97657C0879DBCEC1EADDCC8DD60DE1892BC7CEE2B49F53A7875D30E6A7036D5D7B3F4 -251: 4B1890B53340E5CF63CF9BF573E61A920DBB727FE7C6218BDE80E8941F47F0A107C24B84EB74762CF56CEDE7F047CC3D -252: 2F6F38086C248DA50D5D68209A45C1E1282ADFF048474AA3E6A7B85CD204645C93014A4AF2B7AE7BC8DFC9BCE7A8CCB3 -253: DAE7D19125E0D9B2FE039BDAE417AB942B0A66C98AF0A42070AED682BC8F173689EA99A1538729937B62F4E92D63134D -254: F5C90E2C857EEB7FEDDCC8C99885FF26AC095EB18FAAAE1602824FF7A83EEFECAA577018E104EEA421660CA1FCCF2C97 -255: 0C402634FCEE1DA322C680FE914FE9AE7A38C6E371B7B42B06DDB65424062BD6BD9497104C10BC5997C78775768F5DFE -256: D8B3B2F4C0679825244A53DDC8A39EC9A6AA800EC77086A834E040FC6A6AD42693B42E6D2BBAA78F0C0FCD24090EE430 - -HMAC-blake2b-512 - 0: EA1896AB7C8319A824482F757C038B70089765501B1F8BDB78153D195915BD330BDE7A8C0FB6DBF3DE09277662BA661FDE80017DC277309EEDFE05BDF5B27E18 - 1: 7682E08FF9DFA80E3C9883FEB9065452832084DD32C72FC4815D73906701C8DB39883BE4A3B7AFBBFF33597CA3A9D7EBD34916D2D3FAAD999EC2656A210EB76A - 2: 87E79C4A27B2094AFBFA6EE60FA1D083BAF46521E03EF7B2A487BDC5060BD3D0D86E28B5762AEB0A99B79733214137AB83C5FA7812E337051044B974C67D7E5C - 3: 649BEEB90C41F477487DB04BC6EF791065BFBBE78C916E0668C32A0D8A4805DDD1E415B33FA63F11D1463811757CCFA5317CBFCE2D4A0008D886EAB615A822B1 - 4: 23C6F2FD46B257655DD220650D4E04681BFA1B30AE76F38E15FA2B5E0D338ADE7D420A303CD8DFAD35BBB317079A55A90B958956960F8ABC43D5D20D9CF0B6FE - 5: D79F7E43E4C2C9654A1992354BBF0FE4800377FA600D6E065568B4E27DABC521A210EDB1ACE4EE5EE298F03BDAB769C2235D07C2A02191E1A7DA36D22863DBFF - 6: 71FEABE49DBA07EE415CFE4E490DF7234D5DFE275830F36ABD224AABC32D2AC3059BF23F784A38A3C9145441417D3042E0F95B74E9F831AF11CCC3AABBA977DB - 7: 0EA5FD2CB481CFD4A7B27AF1F89D139F881367A32CC76E7EA5DE5AD683A926BF3B5A5BC57C2D48F729DEE2AB9353228AC2FDB04DC31B0E4671B1503ACFED6315 - 8: 476969CF5B495F6278B815098A58C4E2BA4B50F6D7FE1DBDD67184713B37016E2DB6FE95D394215EA2C8363ACD4A98806FE788204BEC951FF8C4EFC0625508A6 - 9: 21169FCAC853B78E5FA01416A8E545C0C4EF610818A033889C3795B290D12E6FD024594860339459A730DCE43205E41B76C6A0CCF24CF331C77E9EEB657C4932 - 10: 6CDFD03A2D929FA3E174A576C2B26A89CA8EF57A9E40203E39AD660B16C3B70748B1D06FC40447F77E9D14F4A036E0204958AD0838D8359C724BF0DE536FDF96 - 11: E136FCD211EDC9C4A8E5D5088848101899328F2F7090888F78EE33CB10332E0D79658F6EA6A8080A858940F0E3335BEC44A5BD7B4AE0926F855CFEEE38AFDCF9 - 12: 591BAF602D92E369397BCF6AF04EB6E6CA5B36C16D93895614DF1F5EB3F784D1747DFE286A268280DA87D27C11CCFC67ACBC828DAFAB97ABAA16B748C0A87463 - 13: 472E91515238A4D76C71844A3C78A455BB3F6E017738E4EDBCF105AADEC7A636649F92AECFD2E36038DEBB9EA4298AF61A6EF8A9CD95BB2C0FC98C94D7DE4C60 - 14: 16C2FBB590F613F1D6C54548A86C242AA3AD5CBB842286EF3C5421647DD1CEE2D35FADEBF74BE8489A98403AD3BC74F1362262E355D9B63AA1B6CC5D8DE48B86 - 15: 6EDAB004AD8122442550F5827FFF5E37441F5389A19D8E2060B630B3B52F3514190C586FDD1F2B3BAAC228F479CCAD4A96E18D5FC2EB7AAA0BE642671DFA618D - 16: E7A23AD0444BCA20B5F660B83982F53AB231BF9EF7F0C8B7CDFEF389301CC9C9F16EFC95AB505592EA5CFB0F62873C7996443B70CA0B128EB99D830DA7D12BFB - 17: 0956D4C7D398CB4CE1A1513B676B4EDC958B4736E96275F0B26399EAA74069B8D907177F27DFFD0F3A103F12DEAF336DAE351203AD4E2F65FEC8B932EC804149 - 18: 5D8A510635022D7F4BE55D07023E279411FE3EBA43132BF4D0521BD23EE056BA04F3F01B5E1C395AFAFF32AC92F5AB507EE08CD7B122E03C98C75D295BA48F0A - 19: 1365357BC665858FBCCBE9C08722F870A010B501697927D07A57B6BCA6261CA4180CBDD77FF95B16390526DB966E23650A8F89968BA4CD768BCDDD27B206AA69 - 20: FA19E8206FB8FB96BE76D9996470CB9EB16E5E9B86F2A798F332FC82C540BCBB9C1FA09DAFA06B7CCD6FA50448A20BEE92FA7C74A06517A140942451D706FB27 - 21: 9366C4B12223645C6F39F63278CF87CC8455040ACFFEDA3ABA223BA76F350F0099991CC9703DB6D35FC5D91C88C0292A7483DB44FC3BD46CFA6F0E4E47F31279 - 22: 7B1E389354327EC217901DD0475267B709220FCC354EC2546A3B3EA3BAE0C3F3BAD55F032A18467EEDC7D798E107F4949C5DE6AB77A3825604FF2F8E36809C2F - 23: F07670D48E17914017DB563AD7216E682F6D5BCD1CE2FD9263F989F498B4E13178E2D6CACD6ACAF824D3001A89E0423AF0356832A855DA7D8EDA8043BA59BD00 - 24: 47EC9E45471621B338C0D508AC94A63656E24FD215DDD77E9E0B4E1510C5C1E8FB93F5090F2E0D86565A614E491CB5076C49E909254965D65774B6526A0E8323 - 25: E58B90B65E06FFAC887FEF9AE0F2C1357E020485A311C3E00F039A430D6151DEA79A25AF63827B0D055081335E350C6E41D2B66470B41712565C3877D185CA04 - 26: E9761CEFE922E0221700FB347AEDB4448FC65ED5A7C2502F290991EA22D18A0F4D788DF5D95B4ED2E00CDA37BBB6C28CA037B9D2A57C03851435B0E034156A78 - 27: 6368F5B7ED851155FD112A41A75E2E25E538F1775854B5AD73B9A7A27A754B044186EBEDA486AAB3487106E36FCBB07BA8EB2DE3B76D499609A89A7B8689BA78 - 28: 0DE1C2BFA7FDDFA1A463B0BBD79DD7342D3DD174CED3C707D8825F9DBABC336BA7CAED3F0C0C0FD39A4706FA03CF8991B44F0CE18FB8F797D12C7BEC44E91EE6 - 29: F1B7DD52C4EFF89AF0429DD389CA7B5FBB15B74564D92CF8BC8B531F9E9451B90745FA524BBC4AF716BE9E53390D290EF15408843768495CADD670D059FC669C - 30: E040E6CDF252A6A89F50758CF82B9B7A62A156EBFCA178A32A72E39F1285F5534860B9F8DF07D2A64DF110EFD11246CF9728FA76D0C9362ADAB3D95289832BA9 - 31: 58D724946DED80DCC21871147E9213FA4B16A4D3B0ACD90D827716D534A2B38DF9FEC3BE944637A60769203986F99E2967B80FDE5886A3139FC1697EFCDF051D - 32: 297F1658C7924E4D5B3F0D0F56E0C86116AF25068EAABF05D7F3F32CC4E388A59A34D4C3C42A661A062EF17C83F9731D42D75638FBF5F501566D3D2696585179 - 33: AFE015CD1034EF25D3ED02859A4AF0D1B0189996BCAFAA669D8AFBC5F49DF268090C43367A888C52398F6DE3E09C9C090F54228D791F6185B74EA081B8F0509F - 34: A52E1C2150929A7372A00C6319D2B4A990CCE3E9A2DABC6E04C137C49FE8554B0FA36E093803E9C0CCCCC86851FCCFA32C4012F3D39CD2D814FC266273A5BCA6 - 35: FEDF9EDABF14820FE5B9635C957AA059A48B65CAD0C54D6D3B67EEF3F1F3309D67F9976013F0337C7E454709B627EF8B7BA93DA5901C165BA82614A499A69845 - 36: 69AD3CC53F0831AD0DCB19EE1E35FFFCE4AA4F2ADFAA9FBD53F3B7EE8ABAB637B3BE7DAAE15D2FE9A710DEE69CC19D4508ECF82CF482337BDEC0A16190A0D9F2 - 37: 3A987894E507233D2C164C091AE4D111046C76226E618695C32A3A0879193B374F7216AB2B16DB0B495C9DED7EFAD242E06BCC4DB97344859BA1282898145AFC - 38: 1BF4443856163CD7A183FC55F365E2AED194B67C5FDAF12F3A0D088F5C0CE187509E6F384100982B7390CEA04D95E64B3BF6FE5A2FEBD462F381277333C06561 - 39: 9281DB83E58419D13ADDF1162A853C8C151518314904874E221B90CE60FEDFB407114889D5880CA912835D6B189CB0D01233EE3637992EB56A482C3061AD1967 - 40: 2A435825FE4D75D8AE4F8B79FD77CF54449005964DEBC4068BE8B837887AA985209FD2345E8379581013078AAAB3C02F4D462B4426D8C242FF6EF206CD128C81 - 41: E9A130DB46ACEF338D57FC079735BA36FA6BCA5068199BD26E915914548942245D0C77F4A62EF84F94FF60AF2404EB184DACA4A5A710C77311A52EDAF3E3A81E - 42: F4940C62561D58CF7433590476685E7561D9FD6C412EACF4E016C71E4717A62F4F4EC571099ABA6C61959044D49C73CC89617817B90D39610AEA94711760BBF9 - 43: A6BE0CC944D188AB2C90C998B19B9984BAC2BD1BBD6ECDAC02CB92911E3155BB8318A2651C353E1F711A2F41E8A920FCDC6A424CED5499FDA3BF97DAC1F394C0 - 44: 3B45666CA25E284F85562605F7D4061BF33C8E7A22EA7EB5646A720FFAD6D4B6517BF6A843C73A483892F943500624EF9A986E2DD3979866E50681E875CE3F55 - 45: C888CC593668B67B1CCA7F372A1C456711DE06EF694316FE4F890D67D3D8CE1064E4E5665EF49CF506FE1913A6498F5786014633A63AB547346DFA411050BB21 - 46: 46C223EB818C5E2E0B08C13C11FBC9E050910C266DFB1EB265BEDCC530B53157B8D1A17F889D69A29AEBFD41770471612213F8D218595EBBAE61A26301A38109 - 47: 58844F9F72070295F5D2E75B72089777551FD5C2AB782B552605DE096F30FD21A5D5D51EAD24E41084D6C52389F0E6D70370AA51225642A80D355E47DEA7A909 - 48: 6D507E4980327BDD63EA1148EACB9CAE281833F6849B681258FF26836197309729833D153AE18FB9A4DE8590E1D4673ABB7A3ECDD2AB88AD6ED3D7948412D3A7 - 49: 1DEE62031BF73CC3D028E1D5C0BD0484DB066EA7E1137767E7AE5E4BACEB52F43A516D1B4AA5D032900A27E447113E5823C99089D492D1B80C6F1787A296EFD9 - 50: 4D3A53873D325C506A5755D5A0AB9A1C1311C0930EC9CA627B612337407358D6568FD5D16B13954382FDAF42CD6506CA74E33D8F6C59D77D5CE108633D276502 - 51: 8C97A0BB3E2E34D4970F619C9902836A4BF36A2929093E605397B6FA4644CC48507E1B6DAC36D26046600C2A8535E7957C25B5B601AF9C7401A5E749D7CF83FB - 52: 4634F95A268F0D0BCD6DEC3A5E4908942E8C46C89227721BDB39763A7096695D1C0D9528801D6AA325FB2DE721C797B082E86BCC414FC7030C35CB332220F56A - 53: 35959C0AFF4C14AAEF9688E283C7E86215EA7D360C123843C4E644212642A669B82834B492BE2182A8699B4CE6D87618E07A2ADD6E356E2E1C6EDD5F2EBC51DD - 54: 8121AAD5122F9A3640FC0C902AEBC0F2C7F12FC4491518874D634D8157ADE473F91346E936C72A7CA512965417E850FC5E7DEC98CD29F2AE28556E3401AC910D - 55: 2C1885E35DB27B5C81E75B3605F2E488C431419B65305238E90046F963E0339B57EA10383F61B7167978B3CF25F8E51A419D464D11D5114AF37E1342630F1C9A - 56: 02632A6BECCF2E11456ACF45D7A8B63CDD5E8BEE24E6251D3B50E8112BA65AFDE80A10EF405AD311F999F6756BD12EAA8444FEF4D4B5C3981FDF1178308A6A65 - 57: 7DC7297BA07D74EA280C53A5F30C98366DD07F426B505D30A5F8C57A89B4729D3A5CAC997554EA6A06B5502F407786D3BB2E1BECA98C16FE1A7D67CB3F08E7DC - 58: A774D76D68FE1B3490E952750BD1F80824848FDDE6690FD797919FE1F5A7064B31CCEDFECB45F93592FC2AA0BCDF463674020CF667D754D7B3F730AE04BB7F73 - 59: 7A1A9BD45F66FC19828658070B1354132A192A492BC65023C9C4F32EEB14C2E6E81634C860D8A90188AD195F067E7A64DF8C4782647FDDEE50AF1349415428FC - 60: 07C0D5BE89A951224BC9957EF39BD383D584C8BD3A9D59913B52B92E3A889DC69957BC6B22E2F0C62D9841DB1D4938DE96A9434BD227CF3F5D550645E6066513 - 61: 9B319B6F1CE1A0A3905ECBC7034CFAA45EC0BF7615DBEA2396A435685C69C03C4BBC4A347D7CB153D7368C893DE3656C9E05BEA29656E61008AEC91DD3D748E8 - 62: DEE7DB214040C7DD6905943C7B9FAB2230B0EDA4955C22AC11ED0E3AD737348683498A835873CFD5F1623ABCD7354612F86B52D1C676D87B73BC4BA58A33B353 - 63: 0624D89083E73B452C33F62D48BF4EAF360E91CD9576EA7513230E2B3569B7A98AF9027C96FC5A4C7E2E3A0746593D126339355F368346217D0B92CF62B1B702 - 64: 12EF9F4F6B7A1D9B10193AF01C0B28E4408A64A54FEBFC449BEF4FD5D492D22ECF135EE37EF82BBE7F8F02B18776904FC1EECA6B8D2BEF3AA0C2F9EC542E607A - 65: AE31C0D73FE69FD9BD35CBC43EA97B75BB46A3E9ED6FD2D753E2C4D5B861733897FC9DF7B06BA818C9045AF7F88D39549116980E874D736F256514889A9648A6 - 66: C30F0ACFD60B1703ECF123AE381B9E18AE50B7AF7FC239F07B40852693AB70C09613B9092CF93789A94C7BF1E4184F9EAC9761D609B9138ECAC78301C08E7638 - 67: 3DE94D2F0A782A9793A077CBF8B4E597D9266DFB1BCB022E107EA00D9E975823F74981D506546D18D8EC3DC617D58F86E55599B5EC057070A0C7703355E9491F - 68: 1838A42C24B0D92DA5DFEDE6396794D5CE31B4AAED261CA2F54F8DB980AB71EBB7ED1F49C3D13A598028632C8E9B4FE4660B981779FA67CD40B8152860A2BEAB - 69: A032E7ECD1E85AA177E495E5364365F4402A302B24B0A38AEF3585653180CEE6D4AC442E5A9B3A8D84E95FA267689B4CD698F3865AA5787FEF95B765FBB975F2 - 70: BCC3B2AA991198658D7B12F9047A8E1D5FEB4AABAA3D16D1B1AE6CA3495AE8894658B531689F68CE8DB6F8E6F86532D0623B39CE904BBF8B1CF63B68773DA0E5 - 71: BC90C3EFD52CE813B53F3D11EA819C83519461D849E4DF91B0A0252429593964611D8235F720F5AE56329C3BF5DED84F3DF47DF673E4BE9181E2744B81C8C07B - 72: 0A7EFF404D4B50805C91562E78B87106C58D32CB5A21BAA42DAC5D74A86AC32EEB0F974BD7FE6537A184FD87067E3A40BD3A123B5E20BB564CF7AD00AA70AF0F - 73: 516C165F28DB4123CED152A365A39787AA38E970DB9E288AAF3714CDC43C5CD11F962CD55B6CA9D7170CA0F4386BC0C3984EB523F6EAF20AF194490732D4ECAD - 74: 02D68726E79914803D2EF3CC38E15257EFA876F2F5F66F2673DE7DFD43B06CBB646B7258E2C6EB048823D7B4B68E5C473128CAADD356D0B66FA557F22A856589 - 75: 6322C5416A2A4D7AB31FB298ABE6D080427339A78D99F61B3D417FCB8F45EEB21A4032C3E48F760C5CAEAACBE5324445A99E56E26E4970F8CDFA4264C5EB074C - 76: CDE1C7BB34341FD7D275607A64CCC4EC66BF9B1335012E2F496EA325C0CFCCEE91EF7A953C643A6C76FA2DE5F6E227B99E248147C03DE567BB72803ECDF076AC - 77: 6F1523C339675F50EDFEDABBA7A0EE24F921A6AA093E9400C03C48512B33B51619ED5471490F83A09195624E457C9AAFD4756ABD80D80D9E4BE1F4717356DDFF - 78: 409EDA0D7ED32186054C732CF126D66B09C5D393C0FA060936AC93CE08049BA6D95E5865B7CEE777482C24F0FBA9B3FFA993457BA007FD98526A91842A9B1909 - 79: C4A0A183DD67D4907C663556E40E4F77E44DFFDF3849F1A39EFC2847399FAE6BA9D7E39E529136C7B2898408AB96FC4BF985B8E172040A22F8D94AD8386AE2AD - 80: 307509EAC26FB8CC68EA06DC7F8EC70AB15A1EA764D23DE26D471524F1535D3A0F74BA977DC0C3C821C7763E81ECDFCEF23808B87116FB03C15A9C0091B76967 - 81: 8A4197EA831F582FE31EC5C5C7491BE844132F0F6939742E8D0022C8A989ACA28F34770D2AC60751E680ADC951865A5486497E3E15104F58B0003B9730E45431 - 82: 99303E9ABE4962EBB2688B533985C3F40F552B1394F20FC87443B4B0329BAB4C83548AEDBD430CDDB296F7AFB4F1DF7952CC6F8266D4CFC9A5D35DAD4DBA4EB4 - 83: B253B044D70E45480D3B985F0C3BAAF3E39546C5D349AC5863E154C90B2632A2F7D7A5C884DB438AF0C96EE5E316BC82C1E198FD367CE79BF51A5EC0BB87609D - 84: FD7664FB39C69DE4507D1FA4568B148357CB8694B33C92960058F68B2EE04CE8BDA2ADAF4DA3CC12C3AAE2C0A33917ACD5E61DFFF11B898C4FE81264D4EE84A0 - 85: 66157A9B96104FC2F77BF8DA20821C01FAEA348919FF9CAA1821FD953F1D5728B737713FC838C65F9D623743CDA79EC4CE0F32D8C9EF4CA4CA1A1D7ED6C3C34A - 86: B4B1D500113852ABB0768423620723D3076E740773E03ECDD60E205742B0E441ACB03D88E15D0B008BEF3D3FF5C737C7EB5889223F1DCA7095FDBAC534A1BD4D - 87: C3EFFDF2C3D14C674DD619B3025B8539BE53445BFE6276D0C6A67E903BD73D76E9A7C68C6033FB76970783802585160D0643A7C49A15A114CBA578D2CA3CB1E2 - 88: AAA4842E9A21214360F774AA1FA92E7E4A100D9711F0CCAB8A2A25FD62F6CE5733D840B16B90E6ECAC19853BEC9C4FF6F7C762790907EA9E4857344AF54AE664 - 89: D3F27867BE6334A88980473459A4F7345D3723D7B60D0B29B0CC254280437E7CF4BB0E8CB4905FA773B33954CBADBF37D6C92EB252D8A54DF1B240AECE2D7028 - 90: 43EA5969F02CC21F4460D1C48B44E18777A48DB1E43C4FD2315830DCDB90AFE45540405B2141A4C7724173869595AB50A3369B953CE758F6C54DAF8579DB1092 - 91: 839E018A7B3C2EEF20E23966A4E5896A5A76720BA5B96A7BF58594F792BF79F8D847EF0B6604313D4C2E3AA16CD529F48D5043E2A17E9C665707B9100C29D71D - 92: 70F131D422CB59B0E8AB2F2153FE84D2A78CF757B50073BB2DCC42850A10F495357E9D8304CB870F946E97C9DF2D9314F333847120ECFA8E2D39FA96A2F6E1F4 - 93: 947CC741E6BDB17121F3F8AE0E5C29D4C0D1655A5CB5690FCB0F162D123031CB170EABDD2CBD7299F682162D1CC30B51B7B168597EFEA695FF50813D1C5EB2F9 - 94: 757D4C28D2A4D195CD4D0D6763BBDE5F47B8E4B618A3B6288EB928CF848F881894EB277B8134CF049CB231658FCE8AB2CFE5D01A8D4E9AE1E25995AE98CCB901 - 95: 7A905DABBAD8A3686853F36B89A1F1CDED0C1D182D18C18FBCF07B96887DA95876E910EF1C2534A5E002756C22798B0E56BA187C114BBC57E780C1C9C6400482 - 96: D5EB414C1E39592C02E464607335720C3E5C2D1D657B636CC14DA3CEA517149FEA6B7E3CB77245860746702C347A0A1565EF4162670D1CFE054EC426B1B1EE1F - 97: BBA74C30CDF61CDB3B8EC5A0EEFA4D6488DF5014DEAC77792FFFBDA5B611976276D5EFE3472076DDCE1EC982869F6B56E283B5C3F3F07465CAA4C2240DEEC3B1 - 98: FF08B16224CBD0C07489063EA843B864667CAF3460B5FAC806577A0DE2BE45D451410C21457FDFB084B84796C9D1AEF0E8221DF0DBDE77E62CC36761C5A64C37 - 99: 4FEAF081BEC94D5064F3E2D5ACE753827DFF8A61648798587FA379C44BEE4F60F9103CC62282EA2D5C54CCC40BA70B5C9D109796915BFDC04603746541C164D5 -100: 207D9ED6ABBDBD1480A647CF1ED5EE377714B6B15064D243BBD88C8EF5453F1B13541480031258099D76445D9F0BE03E16D1F6B50160F07B37381F57C267DCDB -101: 4DB8B7C7A483C206EE70A5A2BD8CFE8C4EC02336BBEDED4EE1131BE5DBA426E04B26F965E675DA8F590F9066BC09FB0BF4DDF842F98F4C3F1FAB76B4A5E4BF32 -102: 80079A4F4BC288147E3871AF1BF4F284EA40E67E0FD8154E1E246A62520192F20F7DA3A27E6E691724F5BE4AFAFF0E0CEAB8D509EDA8CE96103493099B44DB7E -103: 901D93B51E0FBB6E56FDBE7EEE09C79AF5EC2EAEDA634D196D1DCD42DB54628EFF7D6F61554253667DD0F1FFD3B58834B831138243F3B494CC337881D41BD56A -104: 3CCCF5A353C25AE6035632DF94DED5577B75350883B20A682E74C800965F508DB3885BA3DF13022A5410593380430825ADB3AD2AAF85063A49DCD555AB001333 -105: A18FB80876F663B3896131769D062C9CD210EB6623F818DCEB026D5F9723ECD4804D7DC3284D0D877C655AFC95E9B29BF38787D84D72C22C1B8651BB8E2598BD -106: 7AAC6A8BBE683187AFB0B84E8B4DC454EE296656C42F04F6132DC1965909E4F728A2267D320E9D1815365773B5A44273A2B51B70FC1447E40162FB8D82530031 -107: 345B6D3EFE8E80496E56DAEBF4FB3993CA8793EE93EB62BFE3CC008A0D22FF7CA1CBEDF8041AB4AC09FC217965BB73C20517498B7B8DA880CF0AFFF9025F761E -108: 59BA98D091D97A1F8B3D5C307F433B90D46DC8BC14A00959171FBCA8A31C15E38461FF9AE9A0DB36B9E1E0E491F42B53632BE731F10650E5A150E6BC414C0F53 -109: DA8E2676F88A764BDCC8297AFAE841993BF432054D24F6B62C79112AE79E1D6A0689F14759BEDB338E58428DDA56AA161C9C568F93479EC9C0554DD97CAF824C -110: 9119108F59A0C428103E86A35460B81102F3513AB143FC3BD4B9854C86CDCB19A06D1841C52C1C0C1DC775A1BC65E9C8C7E3C3D1F18F7056AD2D001F4E5683F2 -111: 5D5344389FF8B760019D4DD8C850051E6899E97B3E1A0496FDC23B6172B4D944E628E6F4689EA75CCD72230DC44AFF3CF5BD780D83F91EDE28185E49A17376D4 -112: C3F6E19EB5B02555B59B089C2DC57892B325EFB3334A0567769CD09228609813E7E62137693507084AE4479297023B52BD5C303D06F8705543E86575BD814C4F -113: 5380EC375AD10AFC684153BA5368968B8680252C4C20DA44948C83D6EA7BFD4C3C06F421D041B2ADEC9B9C59D00A8BBB63B55721A5E33FB3A58D503AC6E4C435 -114: 8E71FE96B7435EA16B4964C00035F280B1A3E8CC3CE5D3B5A4786DC4070C83E5264426D54232DDA57C141F14DFE7439A30315341461226F1A5359576FE43F2EA -115: E313EA73FA31952BB64995BE1E3D4F820A5FDDD775FC86CC817AC168BC5D79B4C594E1802A56963D1D3DB3190B50B8E049CB4DC89FD1F81B7F32B10931A8C96E -116: E89C70262573BEF710E6CB9CA20A600DCE52752F5A9B50C440CE94F9B498C8B8D029DD768E98F0CC0D5A05C84FAF8043A4659A3F37229791D5518651CD062EA8 -117: D0C6B3FC6B59118E9122574115299D47698A42D73897F0638E3566BB498AC2461A7635AB4C1670B64406732197110C7FBE2E383548801BBB0152ABB1153F495A -118: 295F030512CE6D3361657401DBD1BE01FCEE58DBD83B1419D22795FC5AC0551509398A55B2373BA606144CE433C3045741096222DE1ACEDFCE027A4BF5BAB60C -119: 57419208636AB909E3C86BCB79CC971398F41310B25B7E7E07F502EC4DC2C328BC050B0BDDCFE1D8101A4D34EA0B4EC794B82BD2379AF2350AEE6611D272DE55 -120: 4092620F2AA9B337D09DA7D437F75210B9E8DD7B86916BD7E2F4F53AB14B01ACFBBD574B22D0F75DEBD7C2E24D9EB230FC7801D03B58B656218AE72E9A3D6074 -121: B8310583B8699BBAED86F734263A24F294CEBA0A4607CE6D2FB1DA125E5C29BB6D82C0D46AD13F4659EB9596BFFF85050BF318A912CFD0C7B0727363CD3BF945 -122: 43ECD72003EA43024B62420CA77B5D867FA3308321F26F3A67409542E7C14F7CD3062D6D0901BEC5E3A6FD2A2226D9CC8D321999F3824347720A28E681DD570E -123: A94F03F37206896D82135E491823EB24660E0AB97167D5760023176BF41961DB4B61BD7D3125066502A5BC16B8822D3CCE174D401FD154BA69A39C55A1DC2828 -124: 0A3602BD0205F614CE1ADFA35CE854DE914A46BD6186B14FC43F19FB00E34D81ADFA50CA512DA062DD98626DC05EFDFC3939082563F48678CA6694F0EF3F0BBB -125: FE6CF04D96D04778A27918451067083026D8EC299EB3AF1EC358C4471CD031656304F1C699A50AD3603454D9C840FE94A1CDB2A4E1E0AB7FA63997646CE12592 -126: CD5AA685BD788389284F7A66A7ECBEA1E91869C1F91CB2530AADF1C459C26B8C8C0138B122CEB0FFD6D20C1DDC4D6D83075B490C2BA36BE7409F3584A7A8AA04 -127: 65486D5C1BE12DEC14B560590A989065F635EE6F00497D892922FDB2A0D0BCAFDDC2650430CF0E06948A52FABAFE6BBB77C2B263FEB7A51D06D6BC6C4751D9BD -128: A44655F4B4680AB484AE8B0E4ACB42715D52A7DB30F1873BB17DAC82578B95E5A9408DD7F9B71B8C623DCBDCC39B3BC09E0F9392E5B00719494E28263B4956EB -129: 228E98C35B738C92E3B3702CE22CD54B0E5E906C7E0D973763BEEEFA1CF3F965743302C6A1CE1F64D89ACC61FCB18C61316B9F939969FF02512697ABA801767C -130: BEEC3A4379AA56B3DEE94B85DF95695AF84C30031C7F9DA21D55387C1450461FBA0B53B39AFDE37333631607F6A28D50DC181AF5A77A2007EE9BD7F14F3B00C6 -131: 6FABF195097F95D3B699B7095F0237E4528955BBD649841BEA404CDBDD86C72BCCC537DF5442DC6B6583980380B3D30F4296322B8C76DCCA1AED12261A4A2527 -132: 8989AA87A728EC695D684E330F14854C64EA9698087F56EC574B1ADA2857D5275F9B7C6FC44E3A26BB132011F434C8A440D2BB44995CC2A86BFB6B6E0C8A6747 -133: 207882DF2DA14E1C9603D4E18CE948C5E5476605FBBF035F44629DC2D19E249CB24D6C0027D9BDBCA761C3A8B281BF7850A628FC2C10DDA6983C53A6CFB0A7E4 -134: 287E99C768F3B717AD10843AC1F73804AF90A008ECFC877E44CFAC6D02D59A5A777A58209D88928DDBE4383666F0878914C79F08EC55C05D9F30B0CDDAE0B4F1 -135: F660DF06604C41189E61A26F1E7F8FD0DA6A41F59753100435CA46001673BF280400E6B7A7A3ED1CA0DC1E65D0365787BAFFC170C4836719DF1713B028C10D24 -136: 16BBBC5713F35D9DCC789F0FBE572C12DEE482B1A05FE49074F75A2C650A6394682F7DF2B4DC8EE4CA7E6FC62B42A1ED906C50CF0E6904DE68AFD678785FBF7B -137: D86ABA8BE95A657F33402E2ED70BE9FD707DCA2D9562A386FD0A783524D912B010883510C80708E8427BEE01D013AD935534316B331210E303376A9E16831E08 -138: 7813B00974EACFDBB8D768E2A9C178B0F5C4EA9233A9C442E30EFEE86CFBB0E2F6C36129492909457920FE9E6D6D540CC4B7FC2158167A56687E52C42B5DB35B -139: F075A524D625DDC0181569D34B4FF4FE290CBCF88134FF0325E11A843AEDD59DBA24E27A89615096610F153D9506E03B1BC680EBE00294E6051051D0B5C32B3C -140: 26FA214DCDF29754047B2FFFB587B64E8987FBE76DC600065F47A411868F9AE47585111460E39810D5E841AC47274EAFB305874411E086C1FF43EDD7B2A6A385 -141: 0022A06E328D2A2082DE5FC5EC69E52BE33242E2A47B6E6C405A82118CBA955F6B0E71305DF8D06F98F209529D0143638161663407E28794FCF9A78ECD8B359B -142: D29F32657442D25AE034A4DB00BB957A74725618E2609EC0DE9B6E6D49BE61AA2EDB5699E482C4ABEF7F173453C6AF96AE86B30AF271B2032926028234CEE8AD -143: 37D8BCF9AC9B658F38D6A64C47AC07EF5FA5B033B1CCD40CA0782E9676C4AFD58EB757B758333E5BC516D4706EAAAD8CE915E92B4B317541BECF5E1BB6EC8577 -144: 04ACBA5562C9038131AFE06CEF8CBD0D4DAC374ED4DF9DA6A47E5532A527CF8CA4A4EA4062E9F5CACA63594E0030253DDC2347954DC8517972C433D1A16EDE29 -145: 6117AF6A6F1F0C4D1790EADAA532DD4453337CA61B5E2D996188B3B4C1F6C9376C6066846360B1A6D3CDDDEFDE592AE251A81403EF54882FFDA0F0C380E7F55D -146: A5AE946658C6898922EE5C92268AC994CD2417E2F631A0396C8EF6CC67E4F2812F6B794D969C306994E01C759F1AA0EFF81F196C4C2488A0A3A638D88E2EFCD4 -147: 0422AF0A73064F54D423DFC8D2C93849B029B25C296101C894DEC4B702660C70D9ED585EBC81DF8CF64A689BB586E75943D57984FCCBB1D9761E64B22D22A912 -148: FA4ABD456CCEB8130E9D6B451DDAB71D6D683F22D97CEE91848B8A0D9A6C17BA721FD944B179ADD6A77939D624F2354821CC1BAE4879D2367A58C1F41A8EC4D7 -149: F1BDEDE21D8A9FEFB115AB33911D733C53320843D16E0090315EB31E1CDAFCFC896DE46EE638171B59E0552D0795E64863FA74C02CBA70FC76F0DA6EB836621A -150: D08D5BE3B9D15B365FA7031B8AA29041521619FD6993E9E2F828BAD1A29048A0251837216EFF5004C4C11D332098F0ACCC15E0E6F3B52931D3EC0B79D2BDC48D -151: 77161D3C18445679EF0F208E307275D979FCBA8B55FDCB06B60CF99A9BEA2E1D9A397C612F9CF24D90AAA1BBE821DB5FAB2E039611764547D3CEBE3B4D2571A1 -152: C6017E7F5EA1239BE480A5A730AF6E464045CEC024DB8A2D0B5B5D569F4C0F043F22FE56BF03CF3D0EB743A14236B4DFA4B3232FC2B841947ED166A526789924 -153: EDB10C3A3695FE4E4B791F953739FB16E4444F202AAD171B800D96CF85AFC69E728EF6D8A391C769F1ABDB8546AD8050D13D15A0883262DC947D8E842F1372D5 -154: 9E1BE52AACFE0D2D2B4C4C506ED23AD54C0525D07627F0C222C6AE49FA2D4476C4611D94753EA6C134F4ECDEC3C6F614D5FCA283D43BA65AB89388C1D20DBB73 -155: C0572A42CBF5636C35B1214F22D60268A1692C3DA29FC85FC48C454FE1685DFBAAACD693CEB7FF0F2DB4DCE66DA7FE14A404C30BEFAA03CF3638E1344DCA4220 -156: 1023B73A74252B510E1ABD3FBC1D317BC4F17109635FC8866A378EF02FC7999D2088E7DD1F994F41AD3D4D01B86FBFED6663AE5343BE28459BE9884A30199E38 -157: 79308924CFB5C1BB96B5B75FF0120BFE5AE9402FF4C983674885403152C47E0835E2A152D0F3C612A651A87B3F0AFBD5875695CF2CFAAA72DAA9B95432B37902 -158: B8F6EF849EE2F312FAF44876DDF2EEF4A37FAB8A7495E27C43EC3FB0B008E14D5DAFBBABF6CEFD09BAC89EE3980E8B761DBE35947D95F985B5E0A0B4FC42C872 -159: 91B5CDB070E4C6527305E0F73DF0177EC0DB352D0F5F39F7D46DD7B5BC59B64D7C830163FF344ECDB1F46E22B27A7C7AB3CEF9204D90B8751F4A347DF32EB262 -160: A95B6038C9F4D8AD16CF9726352030A0EFB957BA58162F8F21A63DD9BD3608B8BDA02F4F23EB05D16D51353AA84242C9A20296C2B72D3982CEFFCDF5E82F2EAA -161: 65DE94F2089A3F9D3CF6DD8388BB10640D8BD05B807D5BA08C9DF8B5D552448CAFD991867AB025D1E27F2E562624596D12D049B5BF2E5F897C465E42F04978F8 -162: 9BA6F31C3CCDA57A5470E2591E6E43C5D3C6E6E5D0822CADE1CBBB91D3A45E1F61576C427B80D77A57188ECDA04EBDD78162F574AAB92EB65E65C09E48FB5B5F -163: F123D3068AB2FFADABF06D98AF6B756B6ECF03AC85A98684E0964092BBFA53E56A2811E1A7802C17F838870D91EC0FBACE6AE5ED882D2B532AE5922A6849C9FE -164: C25AE90AE52FE770F4EAAE7DFCB798B7CC77FD9EDE79C12831239A966C012B1FA8DE50D4814AD415E5B94DEEDFAAC8DD86F28A40DBAB7535B941484534FCBF55 -165: D642150F3F76A9357F2DB6FE19055D522777FFFE137FE2277E5C7BD974E21FED05B76BA1DB0EC9CA0D438DAAA029E9F1DE1BFFAF17FC96B12099E94F31ECF304 -166: C90A604694CD5B694F271212E0356EA291961492AB836DF257646239131485C4606565BA17F73F1C36E23B35A31A35B34A6B9EE32E2403D061011967586BC771 -167: 05603DE1E9BA4B580437D9CDFA3E55691B46AD17EB7570A8D0C6B93A15FD3F18BBDA9E9157CE48D2531D20CB4BF429C41C201F4ADDAA5A5C9FEA23189C5529D7 -168: 772696481C283004B659C32927EBDCE11264DA372FA5C17CA59053310083D9DFA55A8F6E40DAD12FBFA27B9B6A0A0495CA86C61FEBBC5F0EC2009088717941B2 -169: C0AD90C7F6D748BC371C1EA022B76C0FAA83D81C3A2B29E951A00D4E92CD9D0AFD3B7A5F8DEB7541A7876774CC29F6EC8FA5C954A3069778FF1CA384CAE2F2E2 -170: 350277196BA7D1A3D60492A03323276CA437107BAE847A3A48032FA9E8399249C34D13B5A0356DDBBB91A6901B39F222F7C4389291E7B02C7FE49DF24B7CA44C -171: A600B600956764A530E609CDF5C9F863049B642C8467BFF33CD6DBE92F3413323FB0DA55CAAF9CA5F7FF8D437C985B292C3B17AED4FBB1312559C953F6E26F70 -172: 27E5B647D5DBF77FE8E56B7ADC2FD4A8CC724571012C5A1BE8F29DDF09CC37747852B18BEE585F2B2D640E9C2DDBBE33F00130E5C5C5C150F14306F41DF9AD60 -173: 438D1976A4217A18E0741EDF05B2B58FC67D2CCAF7DFDDED9310A5697960EC5BB8CBCCB649075454AD4AC11088E56118EF5E6ECAB4657A8152E886C901F95FED -174: BD10B1E5F03A2582BB83BD560B2F9245DC9CDBF709A03A4619E02ECBFA2D0EAC5AC9C1C08B7EC72F098A21AAA7BA9385866C4943561AD94E23EBDCF802D3CC87 -175: FAEA995E3E4C662F779D526062FCB3281B7EFC1F5564189D26196EB327EE99AE747479348616EAC982ADA9608DD7063B6F38327560B466694A4E6BF65A863193 -176: 40B841A26B90843175D4013784C2F1D3D3F9D1BFF4626431D2E7A54D2F07BBFE8E6558AE0AFD6502D75D2B0F24FB7F61D778DCAA9CB6A5BADB358564BBC3CCAB -177: A2143CAD931E75B65FFADC158E0D7C2D805472BF82ACF3E091C0E5322B50E156F3CEE474A8DDBD693135A08204AC4DBD3999EAD8A97B3EF2EBCE35CA5C158378 -178: AFBA7D6AA8DF58681666E911307A6870698D6F8C5B6A5D186CEF35867A65584AA0501E1478C3CD66D0FAE8137A994DF62425E2981F1C733E853F157CF304E46D -179: 9231A406995AE03B62C1CEF89853A3EC315725DCB40D927EC1413399F425402FD5628555A6F0351AF9E0B3C47F7F8450792001C876D1086767A89D180D1721BC -180: C56AD16C7BFEFDCA88CAC3BA609A43126953B2C450EBCA87CBF92397F7CAE12A20870FB3C81386C7E2A1F967559E5EB7A3E494704870308A5F5CE756BAB9CC6D -181: 10F5BBC7588661BA9D4B1350830863F3CF63A596026DBE72542DE7EB8C56CC79140E0DD99C3D3DC7093589BAC74F5E6572C58535ABF64C81FC6CD8859AED7CC0 -182: E487FCB67519A06F109D0C27235599B5BA09ED02B2518C923DEBF5F9CDFA5C9EB59A3D059AD5C4A7B42F36473217B370A3D71951CF38B36178ABF00CD39D2FC6 -183: 5DA067697E72B521373DE0BF8A6AEF324BC21347812986237988A092F75BB9813AEF6C7992E0CC325CF30EAF0D586231FC8FC2350FBC7644BB9A7FAC9DC3FACD -184: 0C1E455BC16F7A32211E463969646329B0EAA3B08E1136A63A7D0A91F8238FA0BF7D2AAA7DC19356DF8FB3B0EC2AE7F199A62856AE58D3913B5B53E66D2533E7 -185: 586086132A2BEAD42C017BF2AA833DF668B2A55338AC19F2A3BB0634A9EA95C64B7E751D74E07E7BCCF2BC959F1AC1947CD67B684A2090A456469D251864749D -186: 92F031794AB95444A7129125B18FE70DEC5A76215473E9FC155679E2B7CC7A31E3202F69478CF07AB8D206AC1B5EA905D12F2987175EBCB3DC7761EC3E7F32E2 -187: E03B50D3250913B4F1AD62662A9B83D557B2314A9373EA2F28F58940B2C91D96745F6A4A371B9929F023AE92857FFE814A2057F44E58724B57056FD33224842D -188: 55FF8EA6E624AE5E8A3AF14E389915AB792541D32D5797369E5A76699FC4C7CA188F44882579A9A436C4C0784A5A3A0FA99E5FD988A79EEB423D96CE194D411B -189: C1FCD5551181C3FCFB3CB866F9EC64340175047EDD2766440A0CC34E3EC6B90524DF1890E216A2A72849D39A94ECA1CB3B38A0DFC847798535A07BA7786B9B9A -190: 5A54D9F2A83C3D2883D3CC3BC7259387A6359F787F6CDDCC2D2209292FDCFBF2D97423B47A070A48616ABFBF12E2DA489C84BE0B82ADED5F55AFD19CB6601273 -191: 332C9B6DD8D96738302633674A4742BAE44C7BF814AB4901D24A2BFD9532668360FFEE81C3C419BF90215FD1C600B6FCA87B44C4ACA0591965C2F2E636945A83 -192: 7F58B35E7FC62D1B6DE9ED0073D65E80DD663F8E84C2456D36FE4F0F894C5C07464EDFBB0B9E9900333AE97864ECA28BA289E577928D12197F6C9E753F03A714 -193: 8D2DCC233B5CF142C3C1B9D18E0ED6D0FEBBB3AE85727C36D4E646C901394A60931D412FD0D501F7513AF14DA68B2EF89692E2265011A085C9D71BE48CF0B800 -194: A8599ACFD7915F199139764521DBC6E1298C4E1AE835A96C7A3DD3651FB47B469D24DA4FDF0089089612D14E0B4D5D874A26D560CE293F4F4C0F197E0F49DC18 -195: 95FB01F0837E2EAD37BED14FC8891962B462D2EE28792C32E11AF99EB423B37EB087EEA60D0121612BF0265ACA0B7D38AFCDD1B2AA1C0B32E1E6EBE85849C131 -196: 9957A95CC23B0B60A9C4D7BF3D18E435538A64E86F9550FE4003B987B103B4D81947D2FC312B228BE4D5400E4F7F4253F6D2729B64675B9F42F08B5ECE486690 -197: F4E171384ED49755AA2281D45C1D4969E9C16AD9667E12365AF248C32C4F5F81161C428EC566DE21F1765D46CF1527C42479DDB3BAC74478FCCF8ECFF0CB8F89 -198: 3148E6C8106E1B4D0AC1A60071BBC61D3E219AD2C385B4C584B00EEC4715DC6F470E0C385EACAA5DE172DEB86D03FE8521335417F993244162DF5477AB3673C6 -199: 834B39B087C0AD092F5D17034CF8C3907BDAE858E48637F43BD302CD64B764012408B86424795B4B60A1EB8B8AA41E1F6E280AE4CB550BC6B5E2B8FC969B420D -200: 7F6BC2F4FBD6508ABB9BC1BD358A660A174393C1C07C62FE76F50EA82A08902D38EFBB3975A9B4F29EC500F8AF40A2CB0A224235D6C56B9EA48A0568FEADA32B -201: E3A368B056D9D409D447C85A6F3050283DB26C916D8BC2BAD5BEC5B60FB91B93B9186CB165ECB0A63F49F8FB8E227C82250EE4D969C85780CC28FE1D255E2832 -202: 0161BE50DDF3E016FA68FBB642894E9F7B4782045022A2203FED43F3262DA985E4DCE2A4422777EDF22AD873209C8DAC0532D264E9874D50E33B54F9BA8CEF6C -203: FD9920E438B41AB3D1FD62CF89652FFBEA82E291038C0A16A18190E9AB27283894753CD42BCDDC60B554FA19881463DB049BF924631D85F7065E2ED40387178C -204: 3A97B803CFCDAC445DD9A8AF654B9A98B664E84FCEE56D9B097B6448625894BBCC7007061BE4D2DF8B874D60F977A0B9A36B782DFD4740109E858DDB13BB761D -205: 520AA1AA599358C3524CC24F86FCE8142E19C4FC4E6BA3C00BE80AF4AC9D0F84743FA30D9DB9410A5DDBB6C4A66D30335DD5CFC8FF09C128773F9412EC9A7D02 -206: DF64EB972A7E1C0C74414D0D71C327A6275977E2D5E0878A657B7D64FC82FDE26AC5D0FBABA412ECA47ED35F03218B009C816B85B4547978102F7CD2987088E6 -207: 46A3AB0D690B6F15F905C3E58D0C317B5437F115AB7EB81E88BECD1ED5715122B7A32250898528490E66B0D9B411DB00979FD2DEB44A06AB32E4DC91A1DC454A -208: CE9DEC64B3568EAFBEFD8CFC223289A5F6D783A54BAC6D6CBC52E276D3FA15437E0BDE4D872BF1C1E2378C97CBFD6B9523B46E8A66353C25AABF43336DA834D8 -209: 525FA87377436BA644C9E6ED794AB64C2B617869F87E1522D046693003AC67ABA395951273B0361AE6FB0BCE53B7A074F21430627D69C47DEA17E35980D053A3 -210: C312700BB7F49C6618D757B23BD0B0EC07AA21E7BCF2093E5CEC062CF4416F8C54C76DE9F50D4E436290669CD33223A74357AEAB6D9CE05233419556E5EC4E7D -211: 92DE52D6EC34E35E66FCFFA0EFAF0F683C7907CDCE69CF001266FA15E3B62D9037175F055E460F4A1A788F0D088531D914392CD1BE5FF11D8261E2C4C9865723 -212: 314EAFF5A5AB71A6825F8659B7020C24E891281E376D0F0FB7A5DFAA8C97E1D2AEB4293602B074B568F4F93EFD507C035EADF7E88479A02FD449B397D1B15718 -213: 0C3E9AD8E481E64CB0B55F30B817340BCC99A480BFEB6F870A94DDBE8971A0299A3915C3B68E05AA13907EF57D1F307E9FB1B8A8717C824B308F98828DD261DA -214: BF9EDD790DE164C4006B25A65835C69C9F92B7106D451FA251798DCA4362796E4C7AA2C1D8451A04D5BE2118E81F778663AE6F132D1178BC22A825FFA929F15A -215: C137755FD583558D753EA58F7036C6B7AC80A79935288B2E4317777FA129487B38A0A26D95E63B5372BDCB97775902A0238B75FC28BD19959CC7A43C87FFB438 -216: E57F8DC55B423E037948BE4F84D48D3F5822572638960FA751EAC23AA33783059341C6B52FC065E3C1889809432CA0BE2FC071BC817DCEBBD318B116AC057A24 -217: 95172BDACD164CCC6B584291EAA1E553269CD88DB3A5C588D149B67662AB709169EA6FB9C4432498223DF844A0FF94C9E21CDDE47247442498FCEDE16B5DBEEE -218: 225AAEE28945824A84E7D9DC34D96B4B364B5591E0027727D16475BC95D864E154B8144D6F24D646F45A0547FAB18D556B4F452E71FF68D1783CABE48EE5D454 -219: 4F60A23917E9C6D893EF478477CF915C96DB18FFD1026832F35AFC4BFDF88519A964907CA540BCA7C63B22D364F43FF2F2412ECDF8C902B1722A0EEF317986B4 -220: E06B2F54AA30F3DF6EAD09846B3306EC363D6C64F208B4B3E58FF9EFA8C20E712AF5794BDE5246173773555B0AD521D9BA2B11B5107C069D26ECF3E70FE0A5D8 -221: F6B508AEFC60906F372B0431DFB031921E3E375073173EACC520E5713CD321FE07160B3EACDD08BF0730CEEC700EEF0F0FCFAE2A75994015E4C88B9D68C34867 -222: 8FE24769308A276C5C4CC58FA0D685EC094D500E40D6A5EBE5F937A0957F78A08E252DD5D45419EFDBA4E8CCFDA17D2BC6A9F26001E28599AB38A93BD7872D22 -223: C4E02FE649BEBFE96E502375F750BA7A1CDB6E006CBD2656A79BD170E4AF4E36B7B0AD80D143AB19B779E9A244774007FCB6AA8C06A24AF16C9D570F9FF918A0 -224: 45F51AF830CA71C313056B03B393EF641AF65CA504C0DA4F6E427FC1786CF78E9ECC782E21CD3B4B3BD28D4E0A753A66D7A9264467030BA9980B7DD540B799F2 -225: AE255B5B24BC9B489F1023D39321B0BF9D84C1F441EDA7CB77CA0D53FDDD80D6F80D6120AF297FDD9175E6B338774815F7CF997BF994F1E87D4A79245080232C -226: 3ECF82334C27C67B668B97AC47520F93C481F4499A308862FD0D8191463C020E4E17BC7A67262D60C35468B03287A38511C54CBC9AF6B502A6EA7D29E3068A0B -227: DE7FF24EE533C3F936C919A909DDB9748F3ABE91FBE97F1968EBB703CBC7A016F606DDDCCEABAB8FDC0534016F5293452D49F21E1873EF5B8D0A639AC953DEA8 -228: E6F6DBB1DCA85478722B125454B7A93D61E3E5FF1ABA4093FBD051950B2F51E6F7A914F50504441350A636480AE8D78469C9B4F3F03DD205B7EB6327A35A1A9B -229: 0816F780830F24BDC1BDCE3E1437F26B92C945D7A5B5155E056901931D750C98FFE263075B35AAEB2EA570CCBC457C706853BCF8D5C8955AE6860CDCBF3D6604 -230: 82DABF1BE59AD176355DFF33E8BA2943A4D68FA4E8A9DCD9FD49AC11E9A10134F8D253729CF3D8D744A0C8780313B45D937BBBD8C5D71DD8BB3906EE1C2BFC62 -231: CFCC30863449DB6F79F2B72F14862AD9642CE246925DA581ED102BDE19ACE44BB037BCE6B64806C75028B3F6C0703AA8483B11B413BA24EE58837A0E5911AD8D -232: BB7D666E3CA3B2DE9BBAF96BB8AB462C3EF948284086FAE23C3EED6EFD1B8A94DB002221BB869642B6394199A9219AA993D193E7FFEDC2AEA46B70264F52BD33 -233: 5E8F1A1E011B0ECD7C3828F63EBF166B883BBFB4CBA4251CE5E8A50BFD83128A412E1DF68319BC57B6836ACDC0E87E6C9704E393650D2496C42CF01301E72528 -234: 014D86AE49429F6983350EC1D460DDE2ADDDD2A8A8CA9144205C7264A0C899A05DAA33A2960700CB85E13AADA0A2D04E6A04B7AA9A7BB8EC2E44728579781A16 -235: DB2C4EC897D0A8E5700FAC5BB4681DCB608E14DAB0DE8DCD62A390BE8C48D87B83F23CC2B2FC2F60763CD8951733623FA8D9C9074FD6B535E324CF489E993FC3 -236: F8A6627C3DE6B36D81F955FAC80648A83F05BEB9D00471BAE703D626D432D86064FEC8A926701202F4A86C33A6ECC7C5F283A956E5B7DABA71FB5E9DAB22FA00 -237: 5E93BB2C80B0612F6C5C5416272142CB0BFCD27766D8A9DFBB78CDD9131A752BA4BD1193EED1EDFF1344DB272B0CADAD051C2D641F0569B05BD9FBC22C48B06B -238: 3B53B57A749E41D62E5CE9FAACDD5F69A21F279D413C1EAAEF2A083B85BDCDE563D0442695DF09D40EE5CABE8B7C830FD01A2BEFFFAD4A7BF76B94E6B910B6BD -239: 1D8749F262A4B1FC9EEEB4F7F495BD8A7DAD04B96FD090C8841526AA8CEB2B7FDAAD4F179A9D3BBADDADAC7EFB54175AFCCA04B1FB4EA3DD740FBE0099ECA53E -240: 14D325D202F3EADCC84DBBAC419E5080E13A58FEAC139F664558EF9372145F18C2171605516DFE95446A2534F329C1665846909E3B94DB88BBD19AC364BB520D -241: B86D647CD938D94AC573F15D5B08FEB37FF87BF12E5BE2DDD2B817D1FAD8D4128D075FBE0FB6A51E308F414ABBD793BB6BBFB8242DDF8EBA7EA029CCEAD7FBF3 -242: 9B7016D41D186E2402F63A6B2FD42F60771FE635DB5F6158A2256A757C8F99780B73D8216DBDED6D1F3957505C7786A5885BE37C601AA8E5E9BA36885FE88B90 -243: 5A2CBBC693244B2BB4762765BFBDA28CBE960AA3B53FC1878CF06E490E452FB1674EF1E12E2C3C97B5103A7073C48D0AA3895085E6A0D74E47CA89BFB03EC9AA -244: 87C2A89F195633DF49AC8834D9B0013A3F83120C68F77A21D5AA37916762A6736D4CC4038B9C9FD3E99189236A684D2E574248499184BAF0A016607BCE7D01BF -245: A45B32D86A108F8DFACE9FDA5CE5EDCAC8A64AE5CB21D9F5E5648DD45385A8429E733D160B67BB3625D5B115AACDF2A56BA5584B12A2896A47C48D8181309C0B -246: 38425A1BACAEDEBB152D8F8D6C85DF75FFA0CCBCFCCABD8C1FE0985E25FD87C73DB913635B412BCBD4C5765A4C1E6F128F3471F31A382A62C14B8CE7B666004C -247: 02EA28A9BC3BE646B63272D9012FACC7C4A8CD4C97EDC3D9AF7BC06729860E3B97B1C9AC343C440C53CB0F2DA2B0413F058F7D6B77EA967C0113F6D2D91C4D34 -248: 5DDA7766393EBED0EBD886A3E0CEDC649C6462BF0D3FC3D80F4FC5F0E2DA8E501368A74008D3AF8A18764B3A610BFA73F8911F633E7DA9D6E389C11E8FCB273C -249: 4AE1B047CEE7896CED4280CC1C8A158C44A8261D17AF3025B27E4264ED412926E9639907851CB7380CDA60478049A153E2E8DE7EB8248944574B4C8CF5863BD0 -250: 3314E24E918A04DECD180AF7EEE35CBA18461CB618C183892B63284CEB569432F047CA4397EC3B31C435ED35A61276D0981A74A49FD7DBD7BB5D70016282EB21 -251: 848F85FBFBA1BF084CB7854B93600EFE343913ECE967B57D3FC46E02787F108A5D7966B0F16B3CF698523C3F6B38586E37AB92DF15987C5FAEFA759BD9B64288 -252: 94730C832C9B4B88BA9565C58DC451D1C93861342310ADCBCA66CF4C0AF2BB7D5A28EC6DD51399728190D6BF10EDA505D0A8EF7A3DA726106DAEB9377773094F -253: EFE6917B94F6C55127A1974D39148EF6F9B331F081659999E0EEFC15EBC198EC9568C328393216A7E5F30342A20DB76504D1A90FF0121840A7FD8C96C20E306C -254: 483F3DA2F6BF5794BC5A3BF856004E35D311EF70F392EE59BA5857A2FA1A777281CA22119668CB2F49F0253B6F661E5F099B15EE6704DD4BB44B9535B9D4612B -255: 2B72B3BAAA241F977917BDF8BB019DEBE7444559A1CD329274377154B00E0BEB78CCD9B13F8733388EA7B23245BF3233414754CF0AFB1932E0879DF415133A4A -256: C21D6454682743DAA662B443FF48FD57A493950E7D2F8CAD749E5FB398DAC7AB7D0D9EFC3E6ADC3B66DC45D59A95551AA0A928C676D0FF2E09FAB8C77954FD1E - -HMAC-blake3 - 0: DED7A86325A5CA8BC29C391AF63969C5C60DF823EFE5C2256857AE98C8851FE7 - 1: 12AE5BF7DC7D719BAD62BB21A66AA88301400DC6F744D015BD05ADF9C5D704B0 - 2: A1D6A2C21E2887C526B95F90E3B48B85FA600E780CEED6A677EEBBFAD52B179B - 3: EA79523FF0F9257877DBA02FD48E8799068E38866382BC18A532890CA12D1E52 - 4: 8145F50F8E0E792EDADB5638586ED4D0306766C9F96AFE8FE1CD76441F6F9416 - 5: 60043135E4A77EF2886982FB344C558A394127C7233A524570A487AC729A5954 - 6: 351892CB1A5D20D96E8BDAF719D332F4D17EE0DB9E722C799BD602D69317F7C6 - 7: 352FFD3952CEB3B73C5941D15691C2CFE10B1DD1F5C395CA13844FDA0ED650FA - 8: 65E559BD462B34B12ECC8A0D680BD3B18EEF640A193E4AC9097FE9FB2BD19EF7 - 9: 46F421D1D9B5CF8F4F556EB73533C4711C8BD81366871CEF4660DD9278CF192D - 10: E5DA318FBE3ABD2AAAC554A6CC855E3E3DB17947DCD601EF9800D45F9024193E - 11: 0AB6855EFFF8541EB782A63120457A294B94F8D025D3BACE9543AC510005B25B - 12: 29B34D925BD37C801D044612D0D92F179E64ED152D1ECEF8B99C1530647172C1 - 13: 43067F492168FDC581FF2DAED459B44113F1BCD2C58811ACAA0C0A6B31452BE9 - 14: 0077515BD13E7DB6FCDC8D638AED14CD230F102D4923A3D3246DA68C64FFCD33 - 15: 3A3DDFBE7A3BFA81C2FC2BFCE0BEA69BA15885CAD6C7D99381E29CF8251817E7 - 16: 41E224D8DAAD25E6D3E4D1ED172F9A25764FC0892A95E10E58863DF18C231FA3 - 17: 9403EB023D9C23B82A985EA11B411C058C42CF78A8D19D46801A140F5913D03F - 18: B89D0C5F2BD264C6C047226FDDEC7FA3BDC6423056B14D2BEEA58E7850423D5C - 19: 2D8DC6990823354F18496D91BC90A256A61D26B212C9D58EA5C08A12B3C292DF - 20: 93B4E4884B13089435FDCEEDDD9621C9B120D200D6FCCE84C566CCEB8A86C63F - 21: 2D598DA80A8C888B85E414AA7532ABB524C2E69DEE619BCEA744C48C6B9A5AFF - 22: B5E763E63DDCD678020A4C115E798EAB1824C7D929295F2C80D3706DC079F2AD - 23: 210E1C516361AC95570B65F958AFCC1316297B8FDAF5ADDB55BCBDB1BA350205 - 24: 4822C34CE97EEF5D29E6AAACFA7BB15068AA6EBA1589C33065DF54D6667B6999 - 25: EDE67392D184BFA183F861D3B56119BA6EB7638A204473AEE046BB912A59DB1D - 26: 8084BEEC7D865C08F5CA9A97F5BADF896159D84CFB5E9FD79D75638023826103 - 27: C94CC8E2DBEE5331FEC95C7BE5A3A3B268FB58A25E835B8DE06167A5262E14A5 - 28: 9E9B87FCA91D8E2DEAB5FEF979AD6CB30E522BCA691ECB64C681440A14D49C8B - 29: 9C6110653C42B1F293AAE4C7D2A05B6E92CF5B5B4CD6F42EE98CA0AEB3A7E134 - 30: 3A81FB92319D2C3A97BBC73B2D45995496AC48F5752D6E600B1530E61DC41950 - 31: 01EAD34F362DA0DCAEE738690DFC0CC1E2E26FE6416AAA7E93FCEE7C96C04BFC - 32: A803ED71879D12D66BC9B3EE65E806651821517C49768002A0FBB1AEF4F63201 - 33: BB35AC5F01495108BE7E9E122C8DE19D0D5BC102B2FCF246AAF322FB3EB7A20E - 34: 4F2290EA4945F77A8F41E4C776F0716551C8333F2C3E07691C409A19390C54EA - 35: 5F3A35C28D4C7506D9CC24D6DA5BDC761218D3570AE6DA9E2AE9149EB3F11776 - 36: 87FCFF25B8284176C37BD95C2C4C1B61B5EA05C079421443AB7B6FC638914C7D - 37: 7D8C9269E635832AA92536D03F4EF6CCA1ACE30506515C47A53D8602AFA59A49 - 38: E58D99A9AB41802EECA223DEA94C1E4F93EC82D5E1CEF236E02FC19FDCCA1B12 - 39: 2A8E82DF55C7BDD4349506500250E40526982FDF8FBA5829CDDB6FCAE0E47F47 - 40: 5038B1E54401CAC2CBB9C2B7874E334675D4EC9C38A0196C4091CBF87221FFC9 - 41: B8256B74B9793FF4BE2B176985471A79E38F887AFB9FB45B4EC26F056EBE7B79 - 42: 18753FEA5879E456F1D29D053048E2988806F817E651450E263E4B5254938784 - 43: CBE7984EC0BBB8E68C714A83D3310B68675ABED5FA5108623E179CF1A2C1CBAE - 44: ABD2B8D87D11DA6A68B85F9E9FC5A84DB907D7B32B2BC13E3A549A83ABF53669 - 45: 5F3B48CBCD573FC33E87F67FF0D62D556DCA9F0B5D6B79293688BE766FA35B24 - 46: 205BBF9A799F4F97C0EDAAA5D5CE1DA42BAE5710A9B179B9D2D6AA7CDA09E546 - 47: 464A4CBB4F0DD2AEA7B9C290058A3FF8A7CC473B556A8526A2233B2ECC967180 - 48: F6C1AC7A589D49BACE7A2631D7FC9A815110CD7DCD4CC5EDC30CCFF4C5AE231E - 49: 8B17F095EC40CE055F508B28944A226487A2F2514700D040EFD9786681CCC5A8 - 50: C8AE6EB0D3B5480475CEFE5F27559E55A8CAF1DC84A0D19BCF96E5634C0520F9 - 51: 3896AA7B007182D0E747B371F36934E1B1E3520DB2153609D84112C05B02DF5B - 52: 1A0603F02690BB94368767BF1C5466DA04DC624C4B86576F68EB262015C77C52 - 53: 207BC2BB06651147C20FFC74285620D66AE274F969593FC9E5B04E00B1DA3F0C - 54: 8BC276BBDC88CB29152658079F5B8AB127494952B109983063A0CAA6FECF7FB8 - 55: 89B878FF7FDC22498E2C67C12B83216C0EE1CC981DBA52685F3469BD2BADD418 - 56: 0AA919F8DDB428CD042976922436755963956E560A9A95084D4AE0BA6DCD3AB9 - 57: A8809A0BCD68889E660262032594B2B0C1466023208EE585EAA3824361F52F3B - 58: EA994D64386E248FD101A71C44B208B6513EA339F132591085C503F7D1C6E992 - 59: 2F005083C2D224867A0D399AAB5842C97CB0F3A92A947D0102B7A50EB3EDB95E - 60: A326BFF4A13B37237C8E1EF2D7408BDB0C320654D81640A778A042249AD37F97 - 61: D66CA56ED0B3E49B64517FDF69FAE7BDF84460787792C365E4B5E646EB77BC20 - 62: 98B7D9CC0FFE8948D6C81CC1D35191F0C5543A265855F4D5380123A7868B6B5D - 63: ED9986E7B5ADBD2E942D2BEB6C72CE4328C87C35E69686BF33741F5022E9B337 - 64: FFB027F54A3271217F0BD0606138B8DB65710742088F583A9340C3940219BC32 - 65: F8AE6ACAFC700669A24EA64EC3DB8FA465E28DF91B933D5BEF0250A45A91B6B6 - 66: 0839A1BE1F4858E929C8A47281F6BC5D4F9BE467DABA74452A275E09157A52BE - 67: F60B5E6A29435A2BE9199149BBF4C9B2622A33DD7A9D8B478AAA372387D7B269 - 68: CACF3CCD926C87843E027F534A1B3CEDA46B3CA4B8BE5A8D88AF98F5A9CBF2BC - 69: 660343AFEF303EC0CD2B0A1AD6E2457CC4E4264BA58E382C10BD5F85C911FE46 - 70: E85DF68A067B98E3AACFEE097D2508BDFB9149B7E78E874AF665F846A4F64AA7 - 71: F4E8E257DB4D88B7F9885A5BAA227E89E7287254AA17EA8E076D6E5626B36EB1 - 72: F58638811703C9EEB401B4D4C2D8AF445E9D860B3A3468E9485A1B5D04BC17C6 - 73: A1E20FF0A1B916FD722303533635EBB6EF1A7B4BE3B010381E8AC06E98BFBA2E - 74: 14FA94D90F31EC5AB539CBC45BD7F8BC5D587BB69B8CD80B08418BF5CE17E4AE - 75: B6EFA204D16AD53C4547353640E9F6224A1E1F7555AEE65B9E83C901FBF0167B - 76: 3AF9CB9CB91DC73CBBD6659E9E972C5E0A58BB1796140287A6A4C41A6E107624 - 77: A4D4D4AB58D5DE34805980322BD75EE57BA9867E38B138FE80D0B6BA0B968868 - 78: 6C0DBE7844EF5E13720FD1DF1BF95F18FFA4F11E07E356334CFDF5041BA55F12 - 79: 28D85DE5BD8F1F691880F84538A8C63433E7CE59D5C050FC614273C7F4C86282 - 80: C4756DEDC866BCB689B991AF5BDF6D648D45C91615C3265A22C391CB1AF58ED1 - 81: BC6D69B89C938CF480DF2524A21346A330B24450FE0D3A59CFE0DB5402EEF903 - 82: 2FCA04F030A54A4A3B449FD0F31009A7013F71F4616D81410CC68ED18601321F - 83: DBD4D61D0923E1B1554C315E0452D6FC09520D5BAF79C6E562709E8E979B95BD - 84: 38D9DA39140099F940F6BB1E456424690296330DC306A1F88A5A937F78C7FC0F - 85: 42FB7444F0D74AD83FC40481F7ADBB4F7072334AF8E7B5CF1DA53B84F020C847 - 86: 36CB8249A1D4F589A96A419579445D2A94DCB3567D4C1590BC0816F57D4D643E - 87: E797CE1AA07CB411E6D6ABF2571C98565A89AA4DAA7A74CD57A0EF1801526B5D - 88: 2C182365F5AD9241CB18FAC1F14D833CC9A55924065C82E3EB7C26072116CEDC - 89: 967E777E24AEE0673821D51398C0F3D098E5AEE4F4C290F04AE6A53A9D93D371 - 90: AC89F0B40F52CD52587A49715810E5E73E8BEFCAFA069357A30D29545C4DB285 - 91: 5530557A5F73C024A403CAC5405BED6D7A0AC93C6EBF2AEF79C4DAF9B9B938E2 - 92: 8403E31A1244CC37DA6EC44A7959FACD4F12E1933A40DE18A4C4862E97EE8D31 - 93: E849298C206F76AC0BE8ACAA4030EB64EC509DE08DAB7BFADFC8D941E1FA5E0E - 94: D5B45A7F0E5874BFE2BBFDABF871663E4E6D8A6839BEF771DA848634E264B64C - 95: E0B37E2B91CF57E21213A3FC5C297F8A6868E80A7447165A55EE8612B86EC31A - 96: 2E864718D55766016739D612A50CDC188963D8B133680443BA4803806B513428 - 97: 99D7F26575E8CC6032AB17C3A42BE95E3BB78FEC080647721D1D03F8736F2A2C - 98: 98408351706E3612DF789DF17EA9F84F11E96E52849150D38630679C9BFF6245 - 99: 0D61444991088BD3FB631425DE9E0FDE8E0F948B007D57C2AC5FC8362601FBF2 -100: 5C34AE2761345B7F3E19EE9AC7CEDD6BEC66F81A795FB87B31B3DDE161BE1517 -101: 817DA201A7F9D50935242865DC7AD0BD529C58F3C02274F59860861B4187970D -102: 9E75CF39A6FE660AB151B3B80FE422CDDABDC2D79635CC37F505B0954BA81F97 -103: CC37709592DA35A973C21CC7A46B475508FA83784B74191CED57B2DA53077673 -104: 2A9B2B0C8FBA6B99BA2AE9D95B2362F22D1F92E868A8430607D7D113259953F6 -105: 6C8409E177663A626CEDA698C1D30252818F809AF444492A9B7868E7558F6EB1 -106: CFEFC7ABA6E2AFEC628CA547BAA2899EB093DC88763CB76B19074F36B377109E -107: 126EA51990C0EAB32314B6C4792AF2FC39036CBAF44CBE0C72B722F8A3D28B11 -108: 9F094FF97D9442DC2232E8C6B2163FACB7822FAF068863835141DC8477054C1B -109: B2469335C5E0DAFD06D6378F8FF33B63CAA660332F81F9152087059867C041C6 -110: 53A3A55A48EB5FBC8992EA8BF2075A661D37DBC01A5C36A2E31A96D42DE409FC -111: B26410F728E4674291FF92EFACD2249514B5B003D516D625DBF92EFE5FE3C36C -112: 83DAAB0BBE3ADEA5060998D0506144FFD3EB18EC019FB5250416C5A73041E793 -113: 264BFF6B70375F0C0F3F55E7FD83C32D619700D9883FB16A48C930E47F890E53 -114: BF3792940E59FBBA64673507F5A002CA00E3677A7A8036578BC98FFF2098572C -115: 8D07724295293A5DE51417FCC012DA81412906B4CBA1A131C40A73C155442332 -116: C01AD4C087F815A467D7D5778E436FC6ADD1A51125C5C10C1DC37FD763449A21 -117: C4B21D239172C0C9010AE728B5AB21A169A3A939859575605602AF764BACD700 -118: 98C3C91C8C3B805437B5F5B4CCAC02B2BFDACB5375CAFB68678390E534E45487 -119: F6CFA41BA662F9D111E8F50B6684120B1E7F06CA793235A5DDBB6C44A33D81F5 -120: 0B7F4897BFD8C77D93605EE2892D03D7C08EC9973D32B9B386F5FD74DEC1B420 -121: 5C8B70C53CAB849F8D8E72442816A29C46CC1662357A010B54D9C9391A5E7782 -122: 2E8360ECEEC700C58DA7F224078B4C84A0727AA6CDBD878805012816C4A02B77 -123: 5CBF14C05CD274F81602474E86C37CA3195998F4855CF64F2DF6C59656A13008 -124: 5A43F80424C82669FBC1F993C7DFF3E1DF17A65A1814D9BAB86F0545719AFF4F -125: 7F908DD70B5709BF5BE382811B7F044FD76B750F48A30AF87E77953B444D6E1F -126: 60E02FB02114D545F58B3E07A720E88D8872418EFE1872B275B8A3935966328F -127: 4B33496640014C275C8A533CE90B5C417B4AD083EB6AA698376A33F996AC9B88 -128: 344C7F49EFA5E705454578DF53E3C5C140B83B3A71B8F371FA8515FD943FEF9E - -HMAC-keccak224 - 0: 7A6078AD4088D4CEA8C8E76296ACF1119FD9FC36B1845B3831C3E870 - 1: 496659732FFA50DD3157DB556B8552FA6FDC19A9582764BFF56902B9 - 2: 67FCC1959F07B17410DB265382F94C192BE5A5EE87E6004DEB94031F - 3: 71EF8724D3A7427018EAE73DE3323F134A664ADC405B6045350EAFF9 - 4: 4E393BD00C69F1E66D7B23358FF6CDEA9951E12D5DAA80599B5DAF88 - 5: 804610DDB7CD5A760909997AD9EE7D5232BA1FD4E710C39BD428AE40 - 6: 20EED4A2A3B70CDD0F85C1CCC606695B182046FB10FE17C71ABB94B3 - 7: 8FE538BB296A610D57003C3E47657DEC7FDD83ECCAFA4762A53F3252 - 8: 52653B03AF41AAE2E88AE2887DC6C18DA4BD9ABD1B69A1049BAD26F8 - 9: 98CE540A35B9F50A55A36E7C944B9DB6A22222A494C0B1D304390DEF - 10: C764DCAF63AC226A5EA8E5475FC02A2BDEC2979571975680208476DA - 11: 563B3CC0B1AE0DFD612DEC528D659ECC8B6C8D7F15E7E1F0A47D80DD - 12: 7C74ECA898DF6E7EAD2EC2F2842AC732FA4458240A755355EEA002D8 - 13: E5578193975C02E11F87B29BEBB99397447B29DCA70226D0B7218C38 - 14: AE3F59753DA43B032BB585D7B5EEE591EC4672F66C212C2673AEC137 - 15: 3EC5BDDAE6EF70EB0ABECA41041F116D1B9F6A567A573CDBB42B14F1 - 16: 3ECB34BEA51F0B4AA9E7BE05809A6FC55C56F13DA6EBAAF0C7D9A7DF - 17: 7E4F6F5B0FA3CDFAA9DB2E18F5A391CAE4B9D02DB77E6E953ACF58AB - 18: 9035544AD7C2536801ADF3710C51BD5F7D63CCABB474F4763B9E6404 - 19: 2F1804FC654BEAD413E6E207E05376B4FC10518DDEA24190570AA80B - 20: 1AE46969E9DBF273AA6D2B4C0581CDD91B0F6E5D6C39DB965B3C6656 - 21: 4D9DECECF694096ADD9E8F2AB42C83DA3B2ADF649FABEB5AE4986AEC - 22: 61EC34938F18001D687F4214DFB927B932A02DF28F7785521FB28306 - 23: 27DD0DEBD39E456D13D89F2827BD6D38C6EA1A3A52F5165C067950AD - 24: 70895E62856D22D6172999B2B142A264964EB0FA611EBA398DE0DBC1 - 25: 228C73663FC4A08E9968731A4F2C3D79856D8BC7771A4CDF6AF67C7B - 26: F2B546AD18AF80B283D50BA1A323E42C4B99BFA1E77E78117C1E36AB - 27: 36BCB4136619E0B42909D4FDE7855F02A83D1BD63E6D6ACEA706FFB5 - 28: CC1F05E662EA999F0DFDD8C24FCBC7C361DB1D4C56CB93991439339E - 29: A1D44E389066E9E5D3B926AA99851863157D21F8AB88A92DDEBF2B8A - 30: CBC6AB12EFC4E21EC55DEC2114534263B6A03156BC69CFDECA651776 - 31: 9AA619B229AA2F55C288B36B94C48D08E186C2A49BF3C1945D7F6410 - 32: 357BFB2894EFEF79E5D0DF6E4B5AEF0886D1AC498CF500EF22978308 - 33: CD873E680F95664A402A20A041C0C6962E97BACEBE38846BC4F75BAC - 34: 2E682EB7542B235D7619FF517A9A3BB74B099C76FD2099A5025DDE4D - 35: B2C0ED311190FE53180D30062C1DF01001CEA2CFE39DA35C5E52ED5D - 36: 8CEA0863570CEC1E24628982213E350C395F907D06B57944402A87C8 - 37: 47E01F93B6B9C3254B05D589A8DE467E571400C97B4985A08E7AD1B3 - 38: D32772D4DC0F1379756811721523DD1423D20946279720AE361305DF - 39: ACA08A7AFFE0DA0E6C3E0EA62D1DE83AC010357022F56EA908BA30D4 - 40: EC745BD32AA4D54B6CB4F92F34A1E525B9B9DC4F447EDFF17C98D9DB - 41: 7935CFB1B9C3BE05C71FD94F826BB8F5C7A15264D2EB6B7FBB2DD49A - 42: 58BD16D10AB8A502CAED8B895DA866ECBE57E8F28A00479EFBD415D8 - 43: B3534CD5F3C7C9042A42F9DA3B9780839568B83CB3B417207DF3B9F2 - 44: 3A50838716DC683CF7C5771BD42FCD4EC67080856AA76B810A8280EA - 45: 1117717EB53ED15839829EA2329B62E0397D1815B64A6C37E9331F1B - 46: 7A002FE60C1DA753EC3C40A71D5A9ABF36E2FA886BA6C31FBDC9AEF4 - 47: DE30A42D4A765E0D7FD8315DF818C25D004743D5FFB5C5C37C7F94D9 - 48: 14A9C2A6F85EC028221A1E58054658952025F28C57C1172DDC637B85 - 49: 036B0E3AD81EDC03794258F1FEC045C4CCC7BC772AE066E34C7AA558 - 50: EE930BD5958B8D8FE89456B2AA8A1800D97A8C58AFBA5EAA034DB500 - 51: 30EE9F6E7BF6C7AFE1504DDCD0EF0C584C41080CC5BFC14C2E28DECD - 52: 6C35EA130C2BF7322C3312269E77FD4D672D5B70DFD9DE4C9AF86962 - 53: D6C6800EC76CAF0FB0BE73CF93E451C58380DA84AB418C2058FC1727 - 54: A133FD00542D90F2F456CAAEB3EF32A94BE7BC2437CB012CF41E3569 - 55: 889C11454E1D8AB6B81F966E6F97B8E3A0D3EC0E54117D4399FBAC53 - 56: 89C1142790753D5CFCD0AD833BBA6C3C1983E6C024C1244A7B065DF9 - 57: EDB4B311475DEE37EAC1E5BA67C538BD842E0E680E449CA664278A8C - 58: A0040391F7A79FF5E4BFDE676FF1333CBE48C53BDB39D1264A23526A - 59: 779D2AE9741CC575EFFD7B31CFCAA92742C9F9B466C6E22DE679C4FE - 60: 14AA9C6998217A9E790DFCE55E42BC4B812FF66321CDD1EDA59A1EF1 - 61: D7034625E4FA92A0A4E1F258496FD1FD125841D0BF28013D01A94BE1 - 62: BE29D536459C727776AB4557DA383F4178A2E0684B66267B156BC7B6 - 63: 41D1E3194D4933DCAC767005FC3834ECFF4FCEB1AF7702F5A10D9C61 - 64: AA88C05D3E03F64BD79E8EFEC38E5AE0B3FB3E4AEE401EF1029BFCB7 - 65: 7F1EFB532AB5849F491B95496B1604206A4712DFB2A68ACBEA02FF42 - 66: 249863D74E2B8A55BCC1810A3B24317E496C09AC21E064ED560CE64F - 67: FE2B51927C87D120D870C619AECD5FC52763F4C19B6010BF52838333 - 68: 3C75982ECBA93221912A18AD8BEB68364AEE71612D68B83B53F7DAD9 - 69: 47C24608E4DD39B0E6D817E375D89A168A7D137A951AFCA09BBD656E - 70: BEC4E8C805DAEABF6DF027010D665C20C4E2C2FDEDC08207F82E4E3E - 71: 86DE1DA6152EB3F33DD23FD3CABF41FD982317198F94447F29E0E926 - 72: 043E074FA8782101DBB20B115B05D96B6EEBB82429AE243C85A34937 - 73: 7E722662D44FDCF9F7C8C2E9E0E914FAC35AFFF67B66E9BE0460CB32 - 74: 5AC92ED4208EDCF662AD5C2D29B1F4DC74676CBD43C62E39B6B0F58B - 75: 708BAA2E0AC4C39984EB5FC57AFB5ED320FFFFB9DA5FFDB0C335267B - 76: CB64A273163F474E425140938C6E5BDE0B9C3DAAA0C80B30E6BEFA1C - 77: 2952CF60CA4868CAC63E010F5A946D84B9154791D76D248D4479AAF4 - 78: 10C4C363A9499A215766E2C0ACEC5D5DEAF486F38F82793B9E2FAB25 - 79: A8FB6051120AF94DDE5E3FA273B97A04D5F7F0428CA95503BD3C3CCE - 80: 7DD52E763BA5F4521922478BC44D9AB3908C6E2425823D8F7FD58253 - 81: BCAD80735B09ACF8B3FB19C15787BBEEDA2ED1BA5D7F576AFD3CBEFB - 82: B0DE870D73E083DE46749B57D4AD4AD516D6CC42E24D4E3106F11545 - 83: 0C3165B16106FEB7BF19797CC0F8A6E3105645C1C5C5CF054309E5A2 - 84: 49F21CC135DB3DF8F16AF481E3786EC5EE0DDBADBAF55998F188042C - 85: 964AF4CA81E22402951DE020BA041C64A5C062460C70841BA1E23462 - 86: 9F09B0EDDAB713171DD0A9F36EAF461D127D62A3552F422B31EF65FC - 87: 8C181F52238E426F31C1549D009C6B78679871C538B1A86BD638B8A1 - 88: 0CDDEC1988E4BC9E6259B67857C6087A88157508D1F7A54E16CA0FBF - 89: F725FA8A970B5649BC823F388F01EEAEE7D67951A8281CE92D36261D - 90: FB3EA894F7246217FDF1FD275ABE1D6966C12D6F80197C923F0BD185 - 91: 9BE3B7CFC9EFF2EF22C607C5031B6C1ABCDCE9BA526527CBDB4AE0DE - 92: 25FE8DD9501F37C5FE7CCCE654E5DA92C7ABFED991310911C5B32EEE - 93: 8F67FA99BED0A899DAE97510E4FD6317554DB07A665166BF5D58C9D6 - 94: AF6FBA571537393C523A4957C188912965F729FB0E84AD2181BCBEB0 - 95: 3C343C72E50DD23C152A055BFD05D373C4F482C17ADA84364030EAE4 - 96: 6D626F338DD15165A931D541025B38E974A3863D0CE704404039616D - 97: 225D5A7E26B77D61662F7C0E1ED7AB466E426DBB0E12D7FDBE12D5FE - 98: 00C44AE4D8DAAC8EE07ADFC610EA13E2B638F2AFBA82E21A8F2EB1EC - 99: 8EEC23796974D034A59D1724F0D62CBEC89DFD5656663C143F79913A -100: 8536BEA9D9D2F25DA3AA03D6129311E42ABA685A83F2345936A26D5A -101: 4E4972DE01B0CF83657D8981CC41BF82DC6BDE345E00E7A9671092CB -102: CEBA636E1B923F7E2BF86EDE18FD1DE475A2258F668478CBD93E65BA -103: D63D8746F5F8CEBA776CAD432E385B07F72D9A159383A5717651B87F -104: 780416216981D6BB52A44F49FB9DC35F84E48B281B87A859D1D86C95 -105: A6117A6A7F2BD61083AEA08BE9048BB025DA5993F62E49274DD58AA7 -106: 7A43295320ACE8905F1EF505A6FED98EB59A3D89EE20B5FBD7B064FE -107: C7D12FC149C70CDB612ADE9F072C8F73A580D5CA2710B8731870E6C2 -108: F96486A5B7064CB7F4815C77D31519A2E59E4253C505869508CA4893 -109: B34EA5EAE06CBBC97B437C728994200C5CF61E977EB3A79AB010FFE9 -110: 7A30D9A9B9F339DCD31638E033E5E077F4A93822064B855D8A0BC346 -111: 8BE8A285691F96427FC9EA9BABC15C745EECED82B4916C988B27CFF3 -112: EBB46DB7423203580C664260C4587B9FA02E9644604BEF274DC7BFFE -113: 9F4A1EE83D9029AAC335346BB7A561EAE40B2CB6174C2807EC44AB03 -114: E9E9CADFD4559E5A1B258CD5C46ED72F29FBFD885AE4F793FE4A2ED8 -115: F1611C2A6855F11469FFFA143BFD41A2FED4D618B507E293BAF910F6 -116: 26450ACC2A84AA61428F5819D4058F69C5CF2B88F13976CB4A4E49D6 -117: 777C9E9492024CE5A9F1F55470275A2A684B06652D40AA2367F994E8 -118: EA79BDA9517C7D118287AB5972CA654BD19E721C67096438679616A3 -119: 04E868A314B4A6DB57E5FC87E5D568223A75E7C7D60F97EE857FADF4 -120: 85AE938B313B7008B2591BDA70E2364CCB895974AE2BA151DAE8ED9D -121: 83A6D96C28733FC423FD122EAA6069FDD70A863C8D085A52B85A3BA6 -122: D0CA690E4BE5E442A1A05C11D9972FFDF2DF65ED641CC3E1F566F60C -123: 0A4199E477F161A5E608751ACF62132AEB9FB898BA22E8538208C560 -124: 0B3DAA03B8869802E1987F0F6B9712AD97E97025DC750A732A3AA34C -125: 2BE1D463737C3FFDD3720A15F7F9ED7B6D306CDE2DDAC7B256E95D06 -126: 6B4C401607E1CA75C70EF281885C7F504AABF267AD9D076CA5149E1C -127: B208996C9AB2C1B02BC592B299B8D720F5E59E99C9FF4E38CB6A1064 -128: 10AF2216BA78D350C34D875E1DF99EAD35C4A329752BA88905FE17DE -129: 4D0973BE35FEACB4FF1D004514A3C60482A4DECD30DD2709BB06EA82 -130: 9E40E124A0D779AF6BB32CE3D544FA98D511EEAD2141F494DCE57AED -131: 765632D433E783A7087598FB86C0C81E0E7497E56A5C7738E75AF1A7 -132: 10D925B7AF6019BCD0F388DB2A03F99191ADD6699F63334F7BE767A1 -133: 5B9CE7592787FB2C9AF6986FF3CAD8C89E64507BA4B990AE75A015E7 -134: 2A4D0E8346E668323D2ADDE443CBAFB5EE3AF1B7665EC1DE55CDE752 -135: ED74ED1AA65AB815F63042A6B8B3F6E91FBEEF4411DCA2FB9F9CD613 -136: B6E60627C03B5F6897C6CB80A96009F6E570CF416FF72CD9D786E084 -137: B867DB3D7DF1719BCD1AA669F698547EB8216E0C28893AEBFBA8702B -138: 9ACBF1BF38B8596EB156313E8E0A4BBD46EE0FA139BFF7EA97B9741F -139: 32C9E23E1CDBE87AB780AFCAB3FB41E78C012DEFC2F63802BAD418BE -140: 1682163548CF182BB84E663120D01AD49BBEFE6A01D073BFE47D26C0 -141: 5F97D2859DC40658EB5A65874CB15E521D3B6D58AE5BFF9C1EDCEC38 -142: 4BEDDD6F54F01C59F92FFEB9D2F59ED99B4891D23DAFFF81035521D0 -143: 3094F10E997DA0B9E53A2DF8BFF2F9C69F9CBCA9610ACB7FE7974B35 -144: 447C6609F95360884BC96C5027E0C63A1D8C0BD7CE336ED3D6279ECC -145: E2B9CFD5F64C6460753B1B123FE9AF2289B053D1B60CBD70D26946DE -146: 5870F43746CD612E962C3A1DCE02D6560166394617411A4431AD1ED1 -147: A92A1AF7F1B867AF12947C79957F2138BAFDBE0729BD5F2AEDFB30BC -148: 24813B3260B1F8D370C71DA37E984078CF261BA9788C3FA7545FC09E -149: 6BA93D47F4E4134954611F75E600C5C85AB3F3B3598FEB9C6B793747 -150: B00B6CBC07F0A4B3E869AD2B30A8DC7E48579DE5451B12C9250FE4B7 -151: CAEBDE3E5316F3024CD260218DFDC60763410645B3CB8DB9A805D322 -152: 1DBB6698C5AE0A7F3B5A88851953B31D3B63DF7B4CC415E03F6F8287 -153: 3F6A86F26BF02B3319BE8387CBA92764D3E36747FBD0394928861636 -154: 05AFEF08FD6E464138768CD84E75C79F430B93F2973D28F9ABC7EE29 -155: 284D70D80D7C6869F3322A6CDA80BE21F9D613F4D8271E4C9811E31E -156: CE98AD43D2C14C31D066940928B413702952F74FBC5EFA40C4394F7F -157: EF79D4E127109CE4C4B676DD6A3C150ECA380997351CE3A9A33B93DA -158: 0070B7589EFE22228087FDDAFCCC451B6A2216F196FA56625743FC8C -159: 323241BD8B649768DB32B386560A73CDEDDEC2F16C67031842B4CB47 -160: 8CD22800FF527020FCD44DE52E0E3ACA176AF4EAD3A5B07F896E8D82 -161: 565CB6AD811972339491A440D327E34CB8F1436B375944FF4E2FE03F -162: 6981EB9DFEF197B36F5F72CF4202F8725D0B5478D8E7D66027261FDD -163: 07774073FE7A0E9DA54D77EC04913580680A87968BD47F62C463CCCD -164: 8F7A7C89CEFE153B2C67AD87192C68475B4350C98AD6D5131D2C4032 -165: 073D87E694EB96A1F3D5DC1CD61A107943A8D11012F1382E8FB23F1D -166: A73B72DD9A58FB2AD3C6502A8CC9F57FFCDEE7437567B822F2341194 -167: 74B3326926EFBB9E2698320DDA4680FBB3EA8A1253738AB3298C802C -168: C665FABDA7465BFE4E72ED0654AEC4CFAE067A36EA65E4C2567DCEEF -169: C39B0E1FF9CC6B09C4B0081A3CDC9D4ADE9E3475DE9704EB85097094 -170: 2C212A821AEEE469CD1010EE73BA80CD7458541B66624B5FE9A82CC2 -171: 4C063CC7D0B015748560FF0C51A8B62C6B6F882A1FFEE51500074052 -172: 7D5147832ED79CD6F3B60B3A726AAE16D06214949427C5B88BEDEBA6 -173: A9CAD82C33E49955E7BAB7C1305E60BCC9F407D99E182129F1290939 -174: 183116B98230FE93B215EC2DA7EA79866437AF8F2DE757B649E31A61 -175: AC73D88A1375CE668A0FB6FB7AF3ACCCED20D7BD28D6CEE8BACE9A34 -176: 4F049ED26D543572A2AD43EA26EA22C42F61C15DA530C254EB861CFC -177: 6D67267F0B84EBD29A5BCB2720290AB1FF318074615E444593D5965B -178: 03E23AE9383747FB12435E0E6505EB991AC4991CCEBD3FDFE58E1394 -179: B6FBA5A7BAD8A0A67570C1B1725D0B9648ADC3E7E081712A8218AC99 -180: 4B719BB64808495229F7845EF3B21A92D819809AE990710167B6966B -181: 9A1B274B16216014337CC97733201060B31201E521D18188BA5AD4FF -182: 5984E4FA6E94F80653A923C02A0A22E956F9D08B58069FF9AAEA1A5A -183: E3A8731C062E24423A4C5BFF73B101E19358736A744AA6558F78AB6D -184: C1BB734527FBF94ED93D3318B8A08E8BDD3ED2A3CE0EC494411CFDA7 -185: DC0FCFD4730DFB32F2ACFBC41D491B0A75682457196ECE86F6D9088D -186: 9B9E65EC7BA40708DCCF5673C5C7441283863D77423EBE4604B18BDC -187: AD4CEEA54E7045028DF097C92721B0F814927B932AE3ABEBC0AB1E68 -188: 76BF0E11C9F8FDEB0DAC357643155C25D5F2C2DC8A92D7D0A4DBAA88 -189: 1C850FE82BF8E4DC28388D1168CA3AD30CBC5F1660829ECEF34E1119 -190: 2625DA691F316C6887C9219539885D642A6A1BE52C5AAAE9968D7B8A -191: 6F8AF84DD981DBE7C16D1EBBA9733052E0EE52839F2FB446B220833E -192: 38A3C4216022FF8F7403EB4988F4AAD78A82EDD6658562C9F8EC02EC -193: DCF0FB9E61D98A09D729F5E756CC99CA4236DB291FEA7C61B4039AD3 -194: 113CDA0151E85093E32077825DC010B54001624EC97FFFC340BCA53B -195: 8BB390D07EDFFD0EC868696AF4023DA33F893ECFC9C0328C6820DE25 -196: 9B69382EFADED73F1B47DA48E8C9390A459D40E0408343E3857663CE -197: 3EC0DDBC8F86A1F8DE39B40FA6546CE85EE9702713CAB2D38609769D -198: A4B838CA342842E5BCDD89B4BD9BA61AD55D57279E31F000715EB2A8 -199: D624C52F28ADC89C191307BA0B3760F95073682680C8BCC1AD811F09 -200: 43F454330753376BCCB9EDF4FFF46B05881D5843E7BADFA3F6104160 -201: 492E3EE08E611518EB8F88AC54A34C0065A13692F42D9673BBF869F3 -202: 85C09321D51DF1D7DD1930CF6DB7AC6D2BD328FBB2430B4E41470A07 -203: 65DD4839E83C6028969902BD63D8F7F22F87C368BDCFF85D3E0BFC6B -204: B0B34989C829F2DF3B160C5A35EB83D2FD95A18723D9703F45084778 -205: 2F6670E051DBA317AD06829625D4A683FF5F49CAB9695F72566C61C6 -206: 1C24900A57FB8BF0980109932EA7EEED8FCC23FFC2671CC1FADB9560 -207: A162138BB0773AAE4CE9358530B8FAB613073C7422BF66BF08CC0928 -208: 865CF59AB22E2AA32FDD4AEBE801B990C137DD5C5EFFB3F6054890A1 -209: 2247726F342980B3485CEB4A1C0A75317CAFC5C24955C140ED6F792E -210: 5BB503A5683BE9C93A49D6253376F7F02DA51552EEC850504CB95AC7 -211: 8C683B562A5F8E2CB05ACDA59C744016E363E4B56F01643D5F51E6E0 -212: B089BEB98A89F68BE22835B407F9AA731A6298BB47CC9E5AC0AF0B2F -213: C5317924D2875D9E5E2F08A1774C99DA5C11FDBD355426DF347EB818 -214: 10DAFCD5DADEABC57AE4CFB3ADAD42B5BBD1E715E2D3FB032BF245DC -215: FB6AFD05F5B823CE2759F853011A72F19DFB20571C6C255713858C00 -216: 7D12E7EB89936C56A05B2C920BFCE53B1990CF785390B8FCDC536F94 -217: 830B9B4D574D1EBDF23914D372DDCA319C7919B6C609F6BC691E0251 -218: 1E66F70D506DBD8A1D459468B3B887AC623E3E5955E1E8A217C98690 -219: FC61D8FABB2C57C46FEA8FC4DC7F4A6F182E2436218C3A42E62E461C -220: 2DC83C2FC07F5B56921045F298284B542A5338CE7D553B3D26C5BDFD -221: CC0032CDD635D5994401310FF04A53DAC869E26347D134AEE0CC0741 -222: 5D955384FA4FA639C806CE7CAC9611ED7C802A40F5DB0A0A6C626C08 -223: D589013862728C3EF6CA76575B9D1689C79176581CACE4168F40E2D2 -224: DD3FA6E4C28B348B3299745EDD15257C78FCD0F653E587491714B0CB -225: 73C30777FAA5C75B138C8A3EDAAEC7F9CDEA90EBBCA8FD5AE07AC704 -226: F4625718DCB8FADF4D5B751B66445B2B72E7614FF6746C7A07C4EF0A -227: 0A2DDD902E71EEC554AA6C3891284286B78A43D59FA952E63CF92EEC -228: 6F8C33960DBD5A127D102EE522B7A89E79091EE41ABEEF46895C3C4E -229: 7C2035C775D46616E2E511656E9215010E68ACAE87204E0926985EFD -230: 9E8F07E368AE2AFDF6AA64EA8049E35DFCE82587CEC0EC9E34938F65 -231: 52160459CE437FE4EEC03D6AB46C2E7FC91074B0FA33BA56DD6A6AEB -232: 47C3A195A4029CD783985E00747E610ED1D123C50F1D5742D973D00A -233: A68D5B7051760203A47075677A56D62891FEFD93043CD7E1C9771E3E -234: 4A2BAD246FAA6BD1C23FC063DF01B2B8368E2836725FD246414D346D -235: 0274985AF85E41C22D9D3A8867F91811E825F0C2AC428A306AEF64AC -236: 60255B4C40583FC581E76B7B0110C741F7BE1D612A06969BC9D84E57 -237: 4DCB357CC98367B39C989D11AF69ECDB8165C9D28E47114CB7EED3BA -238: ED7A71409F4B0CC47D66D1A06EFB03F9B84D70688CF50D6ECEB58BD1 -239: E976EDA7A4D8B3BF9D270A49006D3171DD2048325432CD8AC152700D -240: 69FDE662C99E2115CEA23EC32B3F8D164BE2B95E461B180858295E6B -241: 8814DCB885276AEE8FDAE5DF3FB0D969B377CAA973C2ED722A06E378 -242: AD9738930CC4E6FB0F9455D382CAA8003AFA8740B5434EC4C0111750 -243: 79F6FE79F14E9FF94EAAE75D497C66A0632B7D992D72F4955B0AE8C4 -244: CB371B18ED2B3703682ABB548302A87C3FA96AD169C016BA625FB91B -245: D488C66F73201383C2FFD9FE616686CD4F4856E031DA8FF5B0DB4D88 -246: 4C140A7621ACE5ED73C49E4CD65AF06C55EA929AD637CA123770B7A9 -247: 30E7D17D28B589443124E432B79E1DE86DF6F5F882117EDBEE917CF5 -248: 1D056DB634E8AEFA82823EB687092ABBF4BF6B4922F5C5E7D9A26B6A -249: FE652E1BC5728D82CBE24AB1396F6A0F86C189D3E215221B76D75DE2 -250: 349F3F287FCA54B92D96CCC657FA151B23F81DA9FD0CA088B15E00DF -251: 1BD53C9DA9B77288CDDE9026FE71C836B55ECA8874A3C7687BF4902F -252: 3E0C307096D6B55EFA6A4CAD468E9BF0BB6667E76CADA8BB96099169 -253: 5544F3D6FBAB18013E00458C3A6EC83B67785C492951B4C7EBFD5384 -254: 38338BE78FECC04CA6FB4F39A1C5429807A16E4DCD9D5B3D18EB99F4 -255: 058A093E2DED37EFF5109E5FEA99924DEE5964CFB793849057C91B9B -256: A7780C98A820ABA26930A507AC82524EAB2501C5132A236DC385C0D5 -257: 1D61D5AFF576958766326525CAFFF77676FF756BC98FE4CAC29D583C -258: 98ECA4D8AF8C9C7E39160932368BCFBE5B7D2EA443AD59337617C9B1 -259: 4EBDDA1E3120657C622B5C4D700D25FF4B3D8F43FD312101780B112F -260: 3E5CDC3E3F3689518AA08DE7518907D5A8C134F2BA4D028DD0A51A9D -261: E73E6232A46B2EBC30B68920ACD2B59CC35369923BA548AD0D7BB1B2 -262: E2E869FC6A121B2444060387D8DF29A99AA8297B3041E6D1794265BB -263: DC5C809BC571B581EBDB3A7B4CC8C2215C3CE4FCD67C15F1ECC87C1E -264: A3CECCE3855D23726EF818CD8F163F54680D2F54FA5821E8035B0A9E -265: 8E32A1DFD9A545E512F798095820C3FBE45561402565633FC0BD9DE9 -266: F79456852211B7DF53D8EF513CA93A425944B2BCE92A49436A1CDBFA -267: 87ACD3435897C6ECEE1A09243A64C0DEDBBDF569DBEFF3694333D9AE -268: 128F5937CF5FFF70FD527199AC2B7C847E3ED2F0F5829AE7ED23C9E3 -269: F0882EAA5C549EA11FE2577C2C9B16FB9F797C49505DAE70993AAB00 -270: 62C2C9DBC02201882E61C3EB7679AFE1AFAB7FBA63D21EEB04B3F5F3 -271: B814180A083BE44B7626956F705D43C791077264195F1AA5837DBBF3 -272: 1CA3C04A50B0565F57E1E4DDA9BA41E3DFABE41B02657E3AF4A9E537 -273: FBBB4CB8846385DF9F5EC6583AAB52CC6E4F33C75FE86D5C82D92E4F -274: AB7949B14EE0A40AB6329E62720BB0015985113B1320FA071429BAA4 -275: 2F237D499F6EC7E192A394CF9641581AF122CFB3CD04A63AD42D1728 -276: 54A17E501C75B4C93221D93358D56669E7690E190DB673134B3CDFD2 -277: B10691B4EAE7F554A5AE1B28AF383DFB43E570E36DC78996AC985B55 -278: 3D2B771F7BEAE28763009A529A8003A30FC259B79A6732E71F229954 -279: BAE487B8F43CC75F406E4748F6AEC58A11EC5C844320E34E62F1F033 -280: 1A978D3E3C1C204F95CCC9AE6F4188DC2714F388ADF0A6264070526E -281: 91F9532AAE430A3511E1178C6A9E0B44EB0F4963564C839E7ADA76CA -282: 4CDBEDACB3F273A7F56DCDDD6E5A904D9F300DB3FC5071F6A534E7AB -283: C9F592474051EF46A2AE5335A3921BB372FDE3F3490F86131C380EFD -284: 145E9E805BB0085B7E54706A46EA024E424680165D4F346AB2C0AB50 -285: 5181EC3B64A612AB4BD62C84C34CE0C90DE80BA9BD469BA2E6A151BD -286: BDC9007DA7C8B918CEB3BA17E14EB6FD1B6BC81AF29E2150BDD6FBFD -287: EAF2AAF16AA2B0C2B1DC66B498A23052C08D77F63C196819272231AA -288: 8A6FD696F0148879DDB5B279D30A0EBD657384166164A207E126C132 - -HMAC-keccak256 - 0: F66C07F7450293535B6F2D873A6FB9885A5576DBF07C23C9FDBF2F2A15280B64 - 1: 13FB8F6CB8399F5F5E3FDD4237EB3DBA70CC42AC9AE2B1FFE765363395A37A15 - 2: 985B26E5573AC34956AC3904818B7F143ED78872A0199FFBC7BFBDC363FE639B - 3: 397FFE9E9BFC9B97D213A636E198B685F8CE6D5A53B5723AF7E1F23BF7B50CEC - 4: BEF46E94D56DFFA5C9918383294A2D8048A4EF1C3AF795727BE32915AD396813 - 5: CA37F4B34AB410ACA053614FD01DF1CEACFF2A755EF368D7FFAE274B2A822F38 - 6: 378CF1884AA4D2CAEE23A370B2ACC9A63E50E72E4C27063B7D89C3481DC75A5C - 7: C7DABB8496126599D1BBE062F9E799922DF0622753D959426BCED3CE962EC4C9 - 8: 039C4C9CA6549DBACA89456069C22A93E7E01F6A0F58E2FC48E65C3C1576E60A - 9: 71ECAC7947FD7E698EEFDE32E7F8CDAEEB37CAAC5B12A11E6B442B6DB1559232 - 10: 29E6856DB4EF29A1C8ECBBE1238CF83C504AD45FBDCF7AA4C251855F4793CC26 - 11: B61B49872CF9BEFF27D72C4D3CB623021892356A4A1D98CFF1B38757FB0D3BA3 - 12: 6EA04B4BF06FC5DE6AEB90530FCC6BB5ED06AA21FA5DC2A876FFF6D60D094345 - 13: 0BB4E41D609565580E368CA8EF21A7CFB4082DD8EB82B254F6E3BB2F057CEBA4 - 14: EDDD7A3FEC223DD5B74988A0ED5F791C87B0A938B12C893AF78B3E77E97D3F47 - 15: DB6ABF552D19D5E76F93E2BE79DAF211398D3E4603D722D54B403FDDD975B736 - 16: D6BD1DDB9A5EE527222841CA26A39F10A670F289F0ED9C9F796A2520FEBADF24 - 17: E5B49CF7002982C196E8FEFFA3834BEEAC7B31271FB1C01024611B01ADC3D99A - 18: 36E0FAB8B68CA9EF168ED5FECAB49CA89542EE9321D0391D82F33B2629863CC8 - 19: EC188E1D60B6F001451FB51CAAD77FB231010D277B54BA25116D12B85D521096 - 20: 14E58C9F9D89DBC695960B628E88D3EEE97A3183883FDD03DC50FE03A83ED160 - 21: A8C7B1BBD218527F8C486B29610B9F96403876EAE3AB5EBF26E1AED8110B9C4C - 22: 44A5CD0F7D0C36A903F7DB83A5BC294332B00110518952E6C9FCE49B222ACBBD - 23: 7824E3AE2CC791FF705132CB2793643734BA1826CC2F250A21B2DE2FF3881886 - 24: 1DD8637BF0D73ADC8F549F29BA8A3DD0DEAC4062BED04360D69F854785193CFB - 25: 151B2D4B166F663E10846C65CCC8E2ED7945A5CD2697397313249080420CD8CB - 26: FF7A8C06BEACC035E9A747CA93171F9C0253912BE387C625D3C002EF0167CA4E - 27: F3AFC7E599566FED604B2DDDCDE22826D9949AC5A78B5EE9606AF818C16C18AD - 28: E31AE3667617C25B09AD51F1F0521B8A709576A0B97F2D9F022E4C10F2368D30 - 29: D1384115E256E9114AD36B2CA3C6901A278C4891E3D8FC15902AFDD36D27AF88 - 30: 99081754FFECFB750692AFF4047CBB93CFF83D700FF20B4E05ED0142F033761E - 31: D0E3B9E2850D2EDF70196EBFEDB70AE673777F65A235CC15A1CDBCF460040772 - 32: 1D6C398177140B4CA875B43686D7B1A0965B3F786E2CDA6336F284182D2DF1D8 - 33: 0D4D3DA8105D49180828AC6F818BBBC034C4882C72FDEE47FAB4444E532B13C2 - 34: E2DFEE930DB5340D988096AF8A2BAD6B77CC552E3978F7C919CA51DFDE931137 - 35: E990A89CD3757B9473A99F278EDD4B3A805014F59713A417F28B16CB457DF54B - 36: 9F23796504F1E6916EEE198185B46B0B4F4564D2611BFB942B90A7548B5825D2 - 37: 5BC4AE8EFB18EE12086CBEB3D82EF1D280435683CA7AF5EE11D1DD262A26A523 - 38: 2720C8FCE7CFC83E020E957BF5EC517BA56514FEB9CDC71A406C6C085FA4732A - 39: 817B502E6BB34FF53C5922D9E234C08A4EC9404D8E32BB23DF8BA0ECCB150A31 - 40: 8FC467A642C1966C7410A9FB02FF5A85CD58426C8EA9369E8515A117C850F861 - 41: C3F06397B7BFE78D20A8465342690D42959B1580ECEC5B9077B4A9D4F7DD69FE - 42: 8D957AF208C2A42930B5CE28391F195CF6CEB2A8CB6EDC0CB4A3CC49310A6651 - 43: 80EA000F7E4E3094D4727A0B964134B2CAF7F4A7C2BA2E326184B91BB2F9E5AF - 44: 35B5FA2B710CE1ED98E7319810EE758CD05B2062A01BAB8D6668502F8DE47897 - 45: AC5B7EDC24815B79869B2F1DF698070495C9AE9801C986F68B700375686D7D13 - 46: 9BFCF4094D9CD0C4584F777531D55E33FBBCC780CABD60FE392D81887EE4CDC7 - 47: D5AB69C8F66A12F4ACE44F820E79F294DAE51E44A5EA8B127D86B6F60E9DC26B - 48: 4646448FFF71714F058D5D26F1A627347748F24767076D28F00A9F0DA1C9539A - 49: EE084BF87A4AA64499FE189DA3F4C8E718C8993D4928F5F0839216302FBFA8C7 - 50: 0EAAA6CAC2B7F418F65EF3248EFE6A3DFB3B90AC02D90E80A100550906E151D3 - 51: 06D9E9F049259A2F01BD84B54260259AF97FC4598AA7A1511EA723A1331F059B - 52: E8CBA06640A5485FEE488A76785DF9A1A9E72FEBE16B45E42289E5917DEE2814 - 53: AB6FD5B3BA7F2176031D0A3A7135A1832B2F0E3C84128BAB9BF847B2DAFDA5BD - 54: D9D028C2CFFCFA6B402A7298374F1045A4C2886B0BBF45DA55750C58A8E227C4 - 55: 9789820E0F284E4FF109CFA8F99FA3E71CE7ABC30E2DC728948DAEC29F3437E2 - 56: 5373B7426BD65908F9DFABAD0D04058010876B6CE10F4EA36BC93750B87748B8 - 57: 995A78BCCF386D402DED0539D0C63A48CD30E3EE9109DA6E7ED0E93FA7D2BD3C - 58: DE63E992D45FA668B8174BA5F645BECD6C89E0D63A01D53DF2FE7C3A5D59C226 - 59: E037CAE77CD4DB32E4086DF8692784A632DD26A94A67984C00039F598BA0FD66 - 60: FCB247613CAC9819392F8A785F8AB4C55CB1B87359238B776DD337A0667BFE6E - 61: B0CA5019F7B6295FF31F07C9FABD5A720AF40459899C965C353D5D22CFA3D599 - 62: E3DF2B5EC466E76FD1527D35B818ED17E0E3ADEBE273B266C190A542E9B40062 - 63: 856D259F09C57A9319CA5B6DC1AC7109074CA52E8AF26105DE29C02593EEF861 - 64: 3ABAB778DF01F0B43570D6A4F2135AD1170F6704D6B428FE8D1549DFFBAB8830 - 65: 067530C9181CEDBFFFFA58DDC1DA6145FEAAB30DA2FA6DC603CA817FCE683B75 - 66: 4A879DD74FAFB822AD559D3C47E0929946ACD7A64937FDB2159E15C2B86646CE - 67: 9D16D3BBAFF7D5043523E8CB48F88BD88B01B4244C6EA0DFDA557A6A564E2408 - 68: C6B6AD41B5CA2EFBFF4853B97015D1F0D46276236C307EBA63EFE446E4A1F532 - 69: 27642D0A883A7717EFB1FAA769A5C29F117C45814C1A913D95C100936F96F083 - 70: 83306BFFC9E72EB99E890794B6273C110B341D64C2E16D9206650EB484A8971C - 71: CC44B1495AC462828920CCB572BA85BC8D56C37C6B3FA569C84AC53AECD9CF33 - 72: AE52BA595A82DB62922B2D348D00755ED7C685C33D7A0CFCB1E73C4F9A39E139 - 73: D47EE59AC1CDF2B61F8308053EB4DFC0E0F19F06F5FFE62103ABF64A81BFB750 - 74: 52F433CF9AB7112F3036844CC9C84C471E111FC56D96E9954A1C227EDC07C12E - 75: 6C54F6BEF7DCD62D26982C708AD8A890FA0AACE15C03AA9DA051C523EE5573A4 - 76: 4C7157D1564B9D68A59CAF495F98C66F99DE4C4CEDEE4A0B2AF22C53A9E6B962 - 77: 56D00A4AEF8E73D5524B79ECF28EACCC9351AD3A56DC4D63B8A167368D545473 - 78: 07DD3BF62280A7EB7E2911103DD0D9585D98D7FA5E3CD548363D5E5077373AA1 - 79: 83DE24EF9D108DB8D74B38CEDC1CB2219F0D7A6674016407AAF491B417CDDAAD - 80: 294F6EF6A0F092BD751084BF82141E3512FA891B69D42458374402ED22A67947 - 81: 8D3B8DF2EB37E9EF815912A0DD3A21FC3DF8D10AFF0B06682927CC0EE63101C0 - 82: 0B09F633C1D620AEC5ECE48AFEDD7D22178D42E774996EF5498307643DD93DE5 - 83: F48CB37A9241CC53FAC271B8B3C968804632FFBDBCA69611AD8A848A9E73B2EF - 84: 2280BC3BDC178C497AEF937079647623063A79B62E747BD2459B13AF6DAAFD23 - 85: 7E76B67F237FD3BDB963B9C50082BE774BDC6FEB8519D61D518DDA049FCF8269 - 86: 8C74A4366D37816ECDD374FD9A6C2DE0ECE896C5B2630FF09F39384E59D6BF49 - 87: A2F3ACBF65E3E4C70130EAC433D9304763467C25587FA24C657A8362F0D5CBE4 - 88: 6D8E43A6590358C9B835C71977342DD7CA1E7D4C49DD0F85B517ACF60DDBA264 - 89: 4599823C3DCEE8ED2AAECCEC2BE2BE1F4EEFFDEE9A1FAE014B1CD5DA3B3E5E57 - 90: 7408D03F365D26BD32BA2A5D7161439BF4461E2087F3F4538BEF75FEE49999F2 - 91: 41AAA22D7C91608992DAB9B75CA594F8F0FD7A666D46C73D0246910292A35840 - 92: 25BAAF961DF4EC5759CF8EA1F0CAAEB7778A88FD8481B5E69E20373067AB94E3 - 93: FBA8340A7E309D0A055C6274D5E2C4264E5DC19DF1E6127E4EEBF798BA48C965 - 94: 2649951DDB8D2680942CABDDC9E2E437B817EEA40099EB557BF7B182D916868C - 95: 05265C332BC2D4A78BA2475605CCBB122DC4EDD59945E2359599669D1DABB075 - 96: 576A31189680E4F705492FDB40D2BA15D6A21516A1BCFE43E3457C9CD9B3EEF6 - 97: F02FE86EBF9B5976520E05869238518A40A48DC4520DDB1A42EFA007735C9020 - 98: 9F89A485E1701D999EE1D9A154608F99859BD332CB0A020DCA734BA2B9DA32D6 - 99: C6B89AA7B76EED5E3860668239BB0A5EBDD09A5B2B52F4BF9536EC1F2D60EA11 -100: 7250906C6B6DFF9696BBA15E9762B465A75DBC2FB008EDFB14BB59C0BE368263 -101: 3025F5A4AACA5F0BF5C3E19179274296BE692BA1512E66D49604264401FB6EC6 -102: E48EA54A15A6E0A351F13F7BAA75A7391441F3DA35AC2AAADBB677E6D9B9771B -103: 43D0A355085AD6271968733189700FFBC383FD3B6C0CE1C926F9E9BCA365F4B3 -104: 1FB5C782929358E24A50CB8AD787AD826D6A435CAB1019E5E96CD07878F1D40A -105: F1010CA622DBBCBF50A5193848B065D78C35533FE5078647406611CD1DEC4769 -106: C4B1F49B59C8398F71A0C75AFDE5CD33988702BBC5C3C27AAE36F1AD5572EE1F -107: CC07091F69F2855B3F4F3A40DBC9E19770FAD67919AE03A4FAA4090C77B2A1E4 -108: 39E78E1C7D77FFFC90250D1F3362D9025E66F5EEDE69160CF0DAACF04B206C01 -109: 419239469B3F09EBE0C66DCA7B83603A9C6CD1606EEF90BE636E148997B8112B -110: AE807AF493805183A50135F48E5750DE6645B977DF16F76A00F320C9E7297A39 -111: 84485DF605CCF46B0345014B8C1C58025C19C89F31F9EFF84A71E2CDCFACC68A -112: 0F78A50484659D8F1B43E8F3274A15FDF1C005E17097CDB6B3D919E2623EA47F -113: 9BA73856231799891CA61E9DA53A225523F5C7C0E99677CF4E0C79869F36061D -114: AD671D374D44B79D079C66B3E53479100ECD2EA28CAA28F0C31AEF150C9D1144 -115: D03AAF46A160750C28D05D92D58B788550803CD9C74DFBD4871C6E862FDDC37A -116: FDFDFBF0137FD3BDAB7B4A10D7AF89325988F98AA9C4BA6B72E856951C094ABF -117: 8E20084C7DF2927C0022756C61D594DEB578AF39ACD63593CD05AC75F39B9530 -118: EEBA1271B29151178C6DEDE9F1A085D5BE0E1105236EB751AAFDE3F69CB0464F -119: C5609EE83FEE01D25542F9EDB2F25AC2C29A944CE09B657F30CF4BC30A9AE5C8 -120: 4235443224480892DEAC35052FC911610BBE6820D39ABB2D9E76490C01F4056D -121: 1471D061B1BB05178EE8229A182814BB4E7F06C60BDDB225087601F9DA8DBB4A -122: F8106C6129898F73532D6C02B0145CCB04AD3052AD35B0D61A457CCB6E1977DF -123: 0EE4C872EF5AEF3B716ED0F66DB7E9FFC8F616A830C5E7D7731482FFB793E2FC -124: 8DC7B03774C4D941D0CFE33FB6DFBB2FC354BEF63404120F61CFFC104029F8A7 -125: 3D8B5FE1A620B7C21AAC319F10313BE6D9F9BD3CC61D872A8308E898B831EBC8 -126: 50399CD3FDE09B7CA40801A23E21F9C928EB8A2E6D4A5B38CE0422E1CC6E84F6 -127: C527698E133BC42ACDA6F9C7AC773C7B0D36FB2D5929526B3994C98DDFE616A9 -128: E713C3118C397C8ECF747091EC01829F124D755BB0EDFD31AF6C036EEF7420F6 -129: AD37AEDC3FE3217AC4D463F3FC8A770B5859618060D2B9AF981194E2F59EEF4E -130: 08A6F82A79A76B6E2064C1237FC8954A10A7AF9556EE5A1D9BA702BEB27409A7 -131: B6012DAD6DAA679B2922ECF3F9BE71DC865CB3421D4921C7ABBC27C29AD94860 -132: 0235BE3F5DA08A7D1D35C7156E291D793B4D12D4CC6E221F7EDFCDA4FEFB99DD -133: D64A503A33A0D7A6713381B26869CE7FE182D0D4EBB6D04A1C703AFB5BC2F792 -134: E047453F9063E0CFF9EAA7750C3BF18C56456D11EB3993AF3EB528A1BFF436BF -135: 82927D4A9E75B94F4DD2292B21C5A56FA6EDE1A514BBFD694BC39330027E87CD -136: 343AB063C0FCF872479566E8689746811182C0F3C494B2220BEEC4E8AA7F06C7 -137: 45E723DF4B5AF47C4511713466B2245C6D3E9DA74C3174BBD120972C34DD714D -138: 7B58A6C64B64531E800D04CEF392474E7384837FA2F348F9F5CC181C854DD985 -139: 9CC5943B657E8DBAACA82D942E792D34E6E1B400DBAA0339EE140BA96BCE1809 -140: B27DFAD3D6C12176AE123EF09A84C5303B3B3C21368849426E283E4200364489 -141: E34FB56DA7EC005133B9C73567BAF2571A0E18B6201CD7C527DD3335777DAD1C -142: 7D39DC09AAA92B632342DCA7A7D75AE3E891F4618FD8259A18C43DA89DFDE1B8 -143: 806B2B0DC6467B4D588193BB589024403EF2A0E1A7D0BC084EDAA8E6132FAFE4 -144: CC5A8FAE9004AEB3C83EAB8B79A5756136843BAC8A2E4DF34D2BDAEF03C793B2 -145: 18E233DE803502539B47136562613C329BBCF62F24C2F66641F9E83C9E7CC75E -146: 2D8C203284EFCF4C05E46B3B940CF3C7ADB26969575C14E933B4C379CD495E9B -147: 3CFFCE4F5A3A8A456D631935F7E530FCB4B616EEDCE8CE422EE031DD7670D910 -148: 4189B7A92164B55969C94514E749372F7484ACF630FC1B5B456E5E0DE1933F1A -149: 89C1BFEAEF8E47A4B7325B9C2C12E0BDD208A8FB5B78E75C0FD0FDDF4B4BDFBC -150: 3C01873F787B8280E75F0B92A78F00EC607AF721FC2860E9BC930C58593BF1F0 -151: 39FB03BBE36A5CDD7F10F2F51073FFD66EE6A1CC71BBE7EB41B2DA640FAF8054 -152: 6BB624E9BE520138B4563B6D486ACE75D70AF009195BC6716277402CBBA8B132 -153: 38BB479A23C980D29BC5C62753A965136F6F41F0E6F07B14908BB76708AEE035 -154: 79C9B98B302605C017B3AA5B97D208CB026117DE964B65C07782E8EB97F4CA8A -155: 95FEACBA72080D00603DE1266F63EBB7CEA8EA02BB5700A75969497D10A2E2E4 -156: 2A47CD75BA1CD7E1A2D0A643F23A202280D188110C48581F923A7968786AD028 -157: A5972C94B55A5DF29B11DD3C5A30290611A4352717FD26DAE4C1DFC981C1F750 -158: 14F4B8CA8850C49CB8590A63E45ADE1BC382EAAC5C8CC99A20EA8A04DDCB5F61 -159: E912C1852DB8E5440F45205AAB126172FD40A14CF42422501666B471027CC4E8 -160: FCB04FBD345EB414A89DD72889CD879965C354756DF5D945202A8D65A24BB9A0 -161: 4E636BE405F761CF324637423E415A37CF2B0940CB47F3BC548F43AAE5D91C20 -162: 0D147CB9DF78299BF7FA711658E9D60CEA238C0B149A321D18AA56761AB79368 -163: B2E610A8405DAC11513EBB2EFA53A4546979A7CB6C847366E43941797A63ECED -164: 4AB6DE55F589DD34EE35ED3ED60F10B99D319B5A8262E20778D70D6D0B16A5CC -165: 9ED1844E400544F3A64A12CCD49E34C64D8C4F65F7CFD4252D338AE8AFF3493A -166: ABA6EA4FA02FE08B6EB294B7650B773EDC34384CE68A6C8EEB151CF3814D01EE -167: B9ED238AB5CF05E3142D6BD83F128F3D894DC6121D5EC918205E5FC34F382A8E -168: E0F3AEC701813B909FC088D42B73E52BF5C840DB835769FA9A3F901564642C3E -169: 1CB78627D2FFD3FB6A484A938669F0B5AE6A1A94EF674075DF4200F8B9D9091A -170: 6E6E225E50112BEC55F69A8EED634BE0E2EBA59B23B7CEBCC9E75FFA0664C1C0 -171: F72106C7D37A59468B0E192481417DB1BC206978F9631921C8DACE266142260B -172: 324FA373D384F30D1A5AB41C2EAF1658A7C4FD5FFB736BFF417A2A12D801F5A7 -173: B27BA8A697CB9880FC4C464EBAE583E78216DB1408AD02C97643581E21A0E99C -174: BC559070310E2EE8C420965A09F90386F43C06C61BC690A4C048C0D5CAD929F7 -175: AF55730C1621330FBADC1CBD17E7292C200664EE1E2218FEA976FE2787D23C4B -176: 640B8F08EE7D876B10EAE21CE861D0C675E81F33CDCABB2CC3A10BB7A79574F9 -177: 521ABE1DD601B92EAF80E9E62EB4AE582E2DF7993F3A2FF80B416ACF29A3D980 -178: 0BA3ED006717C17DFC808EFF118D2703B9CACD8AC0C01E0CEA2FEA3CEBCB3EDC -179: 049EADB8478ED6093C24A2CE365CD8CF0E89E0F7E76E5D0BE3876A853FB91149 -180: 8900BC27871D9CF3CA8F59294E3086BD412CE4EB77149850B7A79E562587CEF1 -181: E9776B2EC725FBACA405C384C7FFF5493D8249C12D65BC6726628437CE4E2492 -182: 3AFDA850F8F30D56FC928728485EE290A7354D6CA20968ECC57D2C838BD13CB9 -183: 14583190244A92F229B4C6FBDBA472C56F2A01298D8B1006B0D1DBF403EADE9A -184: 1D84E6765FB3124AA60CBF7D09E26C090079308CA78B41A9FDDD8675E39DA772 -185: B81218271EDFD5230C272E4C485E5512A60397AA78A46CF980FD354525DE52F8 -186: 9B071B01DE4559B82E87CE9157F2AC04B4B9CAD236EDE8B87F582D66D91262B0 -187: 60DA0AD231F874B3E663C0A9789D747EF4778082745B23951B12A9FED6B561E9 -188: FC8C0F9CBA1A3E9A6C7A8C356398EE5CC2470E53F38E2A17A366315347FE0AEC -189: 1B920B7C6F9DBE6EC9E3D231A3E8A235DFCC480F14E8994271DC60E573A18672 -190: 031BDDF28983EE6A51B2E94CD5E2429E8CFBDBCAF36B6E77706E280F0F908906 -191: 81A9CA543552D2703F0FFED5DEF0168371F416FB0032E81386A72C5727043F0D -192: 8FD0B59C372895F807AB1CE5BD724916773C54678BA76A1C7734D0AE090EE795 -193: 9C7F8B54A470937157A3CAD9A20C9A40D342958C1BF5C233AA328AB36F67595B -194: 77441CA8E55BD8234105C12BC3DB6B2E6E120253645117BF9B9EA21C4A694A49 -195: BA82B6E1128DC85392DEBDE87F4EA167D882F759CA5BCCA8F89122B2BCB1ED34 -196: DD15F1A918A4DCA98D7BE36755A7725E11B34A74233ABFE1633BF9754F67F2ED -197: D656F5098C36F848B8CF04650D66E016B48EA48243E3CF6FF310C08AE4BBC74B -198: B45A19D9161DC0B35F252E7A0BC495652E24712AA87F352DFA207C4453B71EC7 -199: B974A4D735D6289A6207216DF4323066651DEDECB7573C00044229CD5770991B -200: BD5948831ECDAECA7D5649933887587C9A3FC64D845BBE3C349E0A6C3FC8584A -201: 1E98FDFE08838E4719408300011E8C0C91FCCBE855B65CE1F17EC44C652689DE -202: 7F42533D336A19C548AF4A5711B85C312F679CE582AED0EAF1EFAC4182EBB867 -203: 55852458BFB093238798D549C6DE6474A2B6FDBFD82539EB1756EF23F736DE91 -204: 1EF9297B23757CA472FE7F7B2B258E5CE008C99B9B65F61C22D80F1A933FD5D8 -205: 74324999796FF02846BB5A206EDF438AE7DD06E58B7CC2154D100FC04F6C70E1 -206: E37A451660E233739B7020779830A81B0B1ACF4D5DBFB4BD5F30910220BF06B3 -207: 32BE16EE3DF3D35F1AFF2C26059AEEFEB49F464A2BF49FCD5B2AF3C15D71FCC5 -208: F9D4F7867A18584C59CE4271667BB48EF4DC2FFE69FB4FEA61C5AEA1352A5BB6 -209: 464B03062A0AF903E5A43EA6974743221B20C0DBEBA1F6152189915271BF0179 -210: 14E02F0A4921BEC34A51EB056045A1D01DA35A7A3DBBBBF6F334F1730CE04C8A -211: 3C76D5156636F8E47D28A382417C64C40C273EB70D8AD212461F9DCC5835FA95 -212: 22A9CE654C0E5445628980E3A3DD6B3182729C39E56F47BA64B20B00F61CF1F0 -213: BD57CF7765576A6BE165EB05E903548FD2CFC4D35A4856C8D3CAA4A4EEB949D7 -214: 4F0A6B31D46A6936268B40D6E7BBFCA68F191D9BB70107EC3C86BE2ED1A90B11 -215: E8E858592DAA5BB9D0B46DDCBB44A03EF1CA9AD0D28EB9BE8B9730A4D51B9457 -216: 3168F5CEE606E42029B5654764C34E6B17085718A4D8122541A7F1C8F30B943F -217: F4246F2D297E802988EA8FC4D9E78DFC4430EE6C30AB550909824B53D943BAFF -218: D5E347ACB5695B1F8A8DF484591648317D4A58862AA39CCB77C3CD93020BCECA -219: 41A2293E310AC6029CCA44633516597227CC3E98272B1000D20DDF6E634D5A35 -220: 1377DDD9EE153B4A4D9A0D150768B31558780DBF98F0CFCE0A78EC5F9F8FB0A4 -221: 7E854341A71ADF346694D82E4E0C49D36D41E6F6BF206AE4C75D5D88895CE8A3 -222: 38CF93C1E0DA52B24AF2EB8A84294BAD5D37C04E97A832E73D43D47BAC0155BA -223: C0A3714126648C0B09BA30F318068614AA26213F1F6E0C799AC4FDB073AC5CA3 -224: 3D832BDD895F49623F6F023496BE43E071BF436E6CD282385C1D77D5E66591F6 -225: 850968547DD5A2BC7937A9C46AA75E461BC9C6BBADB4432CA03C7D0C87F3A0AC -226: E8F9DCB0B1F8780B48BE95343DA5A29972617A57EF0C1C848268F7059376E712 -227: 4452AAE1B80CE72DD674FDD769A41C84D15AB5B3490D11B56AF5BE5956A9DD2C -228: 311A7FC7F2773690AE1193E1B7E6C4989551BADB0562B74EBD166EFF43EC5D01 -229: 9F12FE5E41876DF2FFC5A1F7DB879CF0E5CA2B3F7866613457795088B344575D -230: 9323DE930E6B6055CBAE9BF24C11F4F98FA5B4A96EA9DCFAB28763D428426FE4 -231: D14BC9409FDAC35F0F94A7D63A152FC669621690C789E8578FA17C42B939B35B -232: CD5A46A9A41973F8E7FDD46C61BD0222A5C829B323BFCEB2F59C0CE797DADC10 -233: FDF3D7ED52262A9D5E1B0F5FD39888350B03E7ED0EC9D6298BBBD9513793EB25 -234: 38245F1D43D39AC2363A5671D3B56C7DBEA35C66042F489C6BD975AE298DD75B -235: C10E093451923CFB38609AB46FAB1BB2FBE5AFCB84C8E3ADD270B3914249406B -236: 50340A7599EC64FC9BF69BB96168A8927374F898885F6F8E26FA5C39A94706CB -237: F31793BC621B3A8D4A815490E7CE8270958F8D0B4B999BDBB1FCAC194A8E6590 -238: D7CE2902CCF475FA92FD1FC0BFFAF08E8959E357D77FD14E26AEEF25CBB32748 -239: 1CB0B8F14F1FFA2081763E7CC32C311521EFD25A0EA15BDF4942BDC7FD56C843 -240: D0145346D3381F3BC2C4E0943786B6635C4F89AB74F34221125AED6E0EE66071 -241: 69385E8F0813AC9E137681C52A3F4666BECD6C5374D69270B6576C7C5B4D5B3B -242: 33CADDD0F153D080D59A1684BFE9F99797BA1D9D836F0EDEE4086E88104B4B46 -243: BE3E9016F716286395E692C8843DE9DD08BBDA7A5BA3E9B53B3B2ED6B95C405E -244: 6E743CDD4FF084506916F81EBD00ADC9D487F646160E4EB83421D0C6082F1EB0 -245: 3711B5275357FFF50C01F53C978A1FC554BE348595C5E2AA5DFDFC3917396299 -246: CBC0C42CEBE98DE8DEB3EC9C37326192EE22ED19B22AA4904DA8FB652B8192E3 -247: FB4F885C8A3972DE533EAF4883BB7C502C1119D4F5A94A48795BA16683C79A94 -248: DBA463E0146C27C350FB19F82CBE472D4743B0F6AB70C26CE1F7BF5D4F6FF6BE -249: 4AE1784CCD47D99051993DDB3E9325C60388658F265B08CB8DC5120571E22B1D -250: 00B91A614C6B5666FF4844AFB57F22CBDF77EBE00B4337C04CF5E20B2BA228FF -251: 31D931274EEAFE3118626EDDD16C6807ED637C2C274A15193CED6033E327AAD1 -252: 27D0931E3A54296063F34DCC3F1D81DD04D969BF7E910477C3734C22D6F44F10 -253: 4D861B7361F5EA87B10F8F8E4F0B89670CB55BA114DE9642AE45E8AE8DADBE07 -254: 39D7D3F82175B5F197757397D44DCD3782E874992C641410DBF8D0214C94CD08 -255: 2FA4B012BE983B686E8BD234E29AD864ACFA601F5CDBB3127891774C08B0E585 -256: 4A22BAEBD9DD0101274C0F5B7AC495934407C22B5E17730F7446FC359A1FC532 -257: 0782DFDE7C89EA765D783C8AC00C5454479404B3F6E39A175C2FBD99E82187BC -258: B34998A1CCEE4D390EB20AE35779C67FE544BDF3769C7F30F4805BA63A03347B -259: 9C33B5F0A056DF8AE7C44ADDA8B38CBA956727AD2FCC990F1EC257557E5341B4 -260: F23BA5F34D841FD44C6BF9EE52B5830255827B38ED55F731A8A3C0E8482BB9C1 -261: 04C2C09401E29C3B48A150E07DEC16577604461A64B7B454456103F294A72F58 -262: EEBEF2016AFE10F30B555CA67275C81DB4DECD507D4B65F481789E131972C00D -263: 6A1B1A1032429B0DA45CBD34402131F985052FD1063A5413DFA0199CFA7D735A -264: 37ED8FDE40D413AE608F5DC06E609FE2070CDD4BDAEAA69CF9CC3BE29027FB24 -265: 357A88CDF0EC50551342A6F1748D998303FDBB5A6BFF5655504E1EC07FC26977 -266: 11F769434097406BB50CAA14594DC5354BBBDB524F5B09B893F869D68A7878E1 -267: F9FDD0CA749AA8BE65336BD9C5CB4ACF235D997E5B4ADA6F02345830F485E02C -268: 9046A6645BABF562963F7CEFAD96423380D1259D9F9414EB6B0109168CC5FB1E -269: DD1B9C91F42490E7373FD79BB84CF701107F9864BD4192DCCDDA2A162B0225BD -270: 970F6F4C404A1C4281F217F611ED468B2CD78BD5F79BBA0CBECC256919CD62FD -271: 316177BCB8BA3FD2C86C1F6CCB19C5BC7E642A1A7182AB51CB85E99B3FC0094B -272: 4A583502F69702419FBCA1DAC63F6934BCE4FFEF7312BCEC609966BD5A65786F - -HMAC-keccak384 - 0: 0C91E6B676DFDC91209911A1C0E4583F99D4CDBD7926CF3D0C10605EC87BAD407497585FCB59FF7CD3463A382CC2E29F - 1: E16F1F2B0F216F31BD6002A045057973028B7564B048318D7E4ADC6320A5B963167EEF4EE34662EF3F5B001694CBA05F - 2: 0C9FA04340842F30C738625C0299636461DC29C5521FB482B5DE4B2BF3D50CFFFC2A2598362444BAA55A34DCD8D2CEC1 - 3: 03FA4F658D380A5E0FCD2C1A583A58616EB8E0AB774F904052AAA291A3F3959202F0BAB6ACF2EB5278AC323D85DB22C8 - 4: 94A14E26912A910B941EE921265CD8C2B5C23433847D43F566C951F2EF6375D13FBF1B3D65915F9FFC0322501A0433E3 - 5: F5B1B88DE056D12C6327D7DEFB448FC02DEAF91B37D41CD15DA3C925EEE87E1E9C3BBBD5B9959928509D89166FCF3A7A - 6: 75B203FEF832D040B5DAC56D464A18C6F31916D6B01063ECDB6D521970B54B9AAAC7B85093096EFEE1C68C8F11CD2A20 - 7: 863BB4DDFE6ABF1D55351C3420F779241B46A0ECDEEF41E34BDA387E08C76AA129186448A4CE7D842AB1BCF559A27995 - 8: E6AE7590857CF19B42E5E93F4CBEE00B309F12E690B7CDAA45A8649956545346CD0A0E4BDDF2DF429A77404A678C2886 - 9: 4529BE4FA9C9E0652DDB0D3C9921D912D4DC0EB55A7A23D61DC504AAE9FEA608B8A16E3740284F84EBD7B1D67C169D13 - 10: 8BF4FE08343E6723E559AEECA4B26DF13EACAC09EF4DA918E0C69BB6F5CF1E235CB93C563160B29D93C37F7F3CF50D72 - 11: 2211FDEC8434B69DEC14CEA3E103404913193B990B2CE0611F225873B185082ACFF625DDA29F4320F081F66BE3597350 - 12: 43D52BF174F715264DA4B08B9F6571FC44A9DD767D7133BECCF2C290640EC3AD3B4EC905B57C0F07267C1FE16F2E40C4 - 13: B9868D0467B169FBE44FA09946D1C55E49D289FEC4F2232D1C303B027735836F4DBAFD5ABB67C225A4F2199BA6C56566 - 14: 7D301BD9D170FF18B977CF59CB40B2BB82768CE14ADC8DE08615D74E491BA628E4B8D6AAF5B665D70D6CAFA10B7D5A4C - 15: 277B9C0C9B82B7C83091750F99C583B2EBA141E6D3C8964620C53AEB733C74CB391AF0B5AD8F2DCCEB57FCD520E0DA05 - 16: 96631CD63DFA36F2146D225D5F922820E8EBE8D9AFBDC4E17D62D95BB5ADB8732A84E2EF352F7D94A025D49E82D19EB9 - 17: 074AFC06E9B9356C8755C2798836D62261FCAA3F3408D80F18720AB09EA9C57070093F17D2036EA2952C6ADFBB0FB840 - 18: 861687A1A1983CC555DA1A41E5584B32F366221CD38B00AFF8564E633F3D789F1D4D33CCF8966D46FF0D9D7E14ED40D0 - 19: 1A272A2ED9EB660C978F2DC557BDE119049C0A9E10CD52C69572448B9A981FBD524EE811AEDA28BA83C7A3D8A2B2729E - 20: CEA5451492B5D9F7AD3642A490C6EBDFB9A8AEBBC7EB47F25CF97BACAD7E645B3051626102BE9700A3E3C8B7E7FFA3B4 - 21: AC198141BBD0C8F44D1E7F7767FD7DA548C4D5AA91A358283CCD9A2D564C60D4A0CF2FA9FFFB9D6C386E79E9FC272057 - 22: CE5A8EFEDCA166ED5D8577024A4BFC717D1283319242C24FF314228F730C817E1ABCA1E7D8AA1D2128A28F0F4BBB8617 - 23: 618B2707F36DC17A402E4420D1A81457F265271E1705C660C7D8574AB16E0DFB3BB9D1B320514EB8953130FA7A59A78D - 24: 58C667C09417F338B384C3A4B0CC8F336D4486CE3DC906A2EF17D8157A0DE653DAA687FCD9A0D1838C03D744B46FE2AF - 25: F0064A65CFE77B56D52F2309BA44EDFA6ED1CD1B009DE15DD0DC102E900FB96BA4BF719D6E982670CCE3E58FAA8FC246 - 26: CADB9AFD5FCF6CCDC2B0AFE2E81A8385F58774EBED3D34554460BEB9996FDFC1176FEB5070D27A013167AF809BBC0D91 - 27: 74785A9E8BA1CF7E9DA6AD663608A5354F2415E49494D17A50C6B08CC25E5F31635975FE8D40E7F6A9EC64845433F514 - 28: 0AE5A1B5DA776E54406BE968C4A0B58A5393119FB629B8A50AF036B64D401808A6F76EE6FE345C7272D37CF2264100B4 - 29: 5CB6A7519734312147371F36DAE1A45D3B447F8E3401A652C84CB7E94BF3903117046BAA69015A774E76187BCF542524 - 30: 79C2B189AC77096DF4638EAEFDF6DB2AD6575C6FAD35532BB09EE1A9A0FF5B3A9D28E06598C25E08040595E19B978A20 - 31: 62416742FBDAB8A523F7B440E4560B213F773DD999E646CC492A08EC36466C0AFBB381CEF17BD5B08B0F4E0CE73D4BC1 - 32: 1985B7E155DCEBB3D96DC5BB9C841C6341021B51C7185150213F0A4F627DC1635F47D51753DE337DAE4E48082AF81446 - 33: 2690FAF5156E73DFBB89CA12B69BB216B9B870D42261292D72ADBA9E5D9FC3C6A506F0C6E56C29A8BCE0D144050DFF94 - 34: 49EE682CE862A643FDF85EC8AB1D8C6BD6366B040208F4D0F5BA57B4D96E80965BB1FAFF5524259D98634A791989DB48 - 35: C2B1D2F349E9CFD6824B73695FDBBFFD6CB8DD3D62E3A1025762177E600F2F5CFD9E12AE62AE33699EC80CECDAD5C6EC - 36: B79C22A6F8045A5F13CFFA22F19C635D85853C2B76ADC8C12EACCF15E7A2D3039FE559C942BF78A0BA28D8367324D54C - 37: 1A7E4A433105DD1FE4E836C0274C654A3354781DFC670D667F60424E6FE700F6D937F1D0ED418BBAD9C17660514464BD - 38: 91089434133857E811E527594509EBF342E7645F5E57EA3563CA8CFC22982C5B13679CFB38DF904944225EF76F97BFA7 - 39: 59BEE013EA3C3CF0DF74298CDA1B75BB2D155B7E68FB5BE839636FA6CBE510A8ACBA9230348E0797AFFB4AC44E6531E0 - 40: A6E9FB7EC9765238307BBC4D715B39F14E8EE1131DCF597D297702A84BE579679DA1E3A81F38E1549E5A6FDD30E5A00A - 41: 3E459E5D277258581CA6733397C3F7E85CBD619E47CF14B4F579E38A88E5F00EEBF784FAAB0404ADD30B9A2ADB9C97E1 - 42: 0504A658C3190457AB60B57AC731A096231FA56538C9BF2D12DC30F9D3FBD6954488370CCDD02C4E0803331B14B88D6B - 43: EF6C6293B39D083E969EE8FB5D1A1A8193AE339B84F7967700545803FD35EDCFC4A5F9E400E5993195C9270391C0A07C - 44: B9E98D5E71528D021FFE25B6330995FA8D54095E620FE6EC7EC6537E76CB8A454EC66CA6CCB1D66FB1CA98C60BF3EBA2 - 45: DA59F0A1879FAA67B67AC521B53A7B599E4E4C36D2BCA4E02A4444C57DCF1CED332D4DE05C25817E80EB639FABE348AD - 46: 2C6BD28C87E77871AF755B511CFD8D9FC001F30465486C091CA3A49D4EE0A47987672E237CDD161B463A83215A4C2093 - 47: A4B629D476EF07357F13C76EEA78FBC28A4CA31286383BAEB275BD72DF877F1485B611F0FC449DDF0211614AA5C4024B - 48: A7998EEC3C81F272ED97D7B38FA5E8A8E8A79A1AA529C70513A7FDA4A408E4C2D7739AC1B27ECA31F1F2D8A28B65D99B - 49: 6EE63F93F7455B5D3666763BEFD3EC161A9E429BD65B610A46ED89F39693469BAEEB299E45AE70042C12BA80CCD88D33 - 50: E8987CB95703AFA43A78541B3C037986BF180BE1BA9622599E4941656996A1B48D9BF958153480F1B3389FA46B4D5DD4 - 51: 023D96FBDA0ACAE44E1DE01F7DFD30AF2D8F92484603B21321D4AD2296F6EB6BB351627855302261BBFE0F3C8FF0FA2E - 52: 9E0A4AC4D43C05C749D262FF917604AADFC3318FC708E6089E0630B2E8C9E3757D36B4138DED018A3D7C736A52E192E4 - 53: 5D1C36F53DE564B25704C826CF93230A00CE0A5CB6CDE5981C89D440733D27CC77A042E4B24F877E9A1A524525B0C6AC - 54: 71A651FF7BA9ABD3AA5170B31FC9A14A5F7DC6788B06DE05B7C2EACEBA2FDA56EEA9710585E370307B9682CFE208036F - 55: 54C7F09E09965F4D2FA0A92C7E16F21B5991541A0AAD5D7E4D99328579A1B3F136BB4E8486D9B28C31BD40E7EE50347F - 56: FF8DF9CD75166A404D31CF97555C4C449B31AB16B988ABEC8931FCEB84AA0CCABB95D519D015FF80E5CAC5799BCC911B - 57: 18260EAA23E5E5D9D30078B8BA607A1497B40F44D4C9C21A5AB86EAADA22BB3A01870E0023502BA40868461E0346FA48 - 58: 9036772DFC653CFFFCE576D7341FB9F9400AEACE6C1B9662DBB894DF35A7BE5AA4C6EE53160DA06F5BBFD20A3A4A071B - 59: 441A419D1F82A12A049C4903DDD335BBD3776FA0EB73A78FC1A889E3A28457327B20027AC40E6A9B7AE0422E2B520BA7 - 60: 314DE78360504B526E8107EADFC737C4CC6C8BB78E9C7D3B925B94D5285B04A24CAB6AA21006C58E779833A6C50F13A8 - 61: 7213D135B378F57A54E928E12CC3A07BB35B98A29907CD6764B23854E0163A22A05914A7C577F9B2C07F1073CE66CEEE - 62: 83D4EDC30417602F9BB40BAA56A213E2AF1382C0235FA0A5140241F9F55594C90EB0EF6BF2785CC8F4326423094AA6A6 - 63: 6E2E1F7297A989F2507533543794F3565A759909B5399E1A4D2C7B9F98205AC01775E3CEE16A9E4E750266F3BCBE0CEF - 64: ACF46D19A7FCF2B4C137690D8D9F9A71B716BE04E49432DB1F113EB684802EEDFC8E36CB169714FB6B47FF1595250757 - 65: AFD67AE2727DAC50DFF66D46F615196918DCD96D384EDD1EED314C626826AF5422A2B6F58A818147C4068776DD3FC2A2 - 66: 17830B9D244376D52D1539DA1E69C5653D796309DBB7B2FF33AAD7190715A978ED0A973C889305834C776ADFB6EE27AF - 67: 835A978064C0327749ED02A1C9A88499F2E12DA97118CA6E7CC5D8C79B770D8D7AD67B8D58FDBAE50840156B45FEF4A0 - 68: 91954F1AD60B6CAEF3A9CF37865FA01B51B00BEF701CFEE26899C1226520692CDF01C83FF914BD3B62C87D8DB0C1E57D - 69: AB677149B7E029224044AB2FCBE5F52C609769FBF60D7D69C01221CC2C4F5BB355CB804188A89636CD7756295A7487BB - 70: 41F2523369FD23FB541DC6A9940D7BA249B2CDFA98134E084A3B3E536813A78E357308B69C0CDF9B69B63E9345BB9BDF - 71: D4A61D2F9D9DED54295958BF45FBC37C8934EC5C2E361525B278DFFE6F9E148CF90F174DA0A52111B85CD33AF5C1B860 - 72: 91268C24F2A9A3C342C3D2DCCA3094C2661EEB03B7BEECDF350469AFFDF7F3974CA1577B22497EBA59DA794DDADFBB52 - 73: 2A82FC06BBD312C6E8A9CB997C0853A3091217A4CE30F40A3848126E07DA8879F34B00F783E7EE574DA7F580698E8D8F - 74: 1FCBBB435241D207A87E0C90AFEEE04485D43F9C8F24F04D549B8122F48072D1F5383B614CBB1ADF1FAF08C42CC05E72 - 75: 1FC6878DD6EF1EE848F2E2FFD348838D531C2E41C292320696A34BCD55322C7F13CA4E24A3F23916BB6E4E488493086C - 76: 539055E49608C02C09A54090DDFC17B4E7FAC51646DC7AA129D7CEA66AC17464355D711EED305FB784539C8C7E55F464 - 77: B369BF65036C111876F08337BCF18E92EBDE4CBC01D6C5AFCC2E36E3B64AB76A84907F3FA80D2305A43484B727191099 - 78: 7B378F2D185B965F910FABC021B183B42F3A1177BDAD8CB1E502AAB2BF22E88DC2842602C9F1C9F2C3F5B87A7A01BAC1 - 79: AB8D418A0FA651A999531AFE9C451C2250289E5DF505F4C6A4B912A1537C2CC2F51E98268D597937171A187A124250B4 - 80: 73C4390878E6C169946F9769F377135D1E785385493F8EEB0DFC2EE7795B97EB342CF13716C6F584730C3AECD32EF959 - 81: 69746047DB23703000B8312BC7EA2E62D8561EBEDAB41FAEC89E485B5D7EABFEF433EE4FDCD681B90CB7BD8597692653 - 82: F5C697B8F5FAF83E0307D899CBE67DDB0556659A9AF36EA6C4959BF425D0E18695F7EB10E0A794FDD701430AD6DF3FD4 - 83: DE825F226020603EA4DDD248F534F3133E891575B017D19446F746D3B32F79413BA39DFDA9BF76F5ABBF216E8CB43801 - 84: F7395738F9D5D40866115889C93F2200F2E74D1507C2E52B0F7EE1AD9497B57E46BE361E417B48616B6FA8841A4E437E - 85: 915EC381AD9CE91F292B9882CD35E181B0221CAD92CDE2EE176A2FF5CDA7E34B28564979585D31A77B8E54F994C0E747 - 86: B077C3A01F2E74C15DD465E6D9AA590CC82A895038792AD98D311391704C47DB0CF34A88114AF9BAD819052B6ADB6688 - 87: AB6E42CED9C9E2ECE91986ED2878B476DB92FFA935C65F1A4B9E365E08644926715F0687EFCA05528AE8C4FDDC2E6530 - 88: 663EB2BECEE5166708E8D276C85D38E3D4A4B501193AC1A923EF613AA4600918C9FB440485EFD8364B5BB32FC875418C - 89: 351D4C5DA2D149D75A90AE416B47A0F45E8607AF46349BD23AF36D3758EEC52A776A79D76B35BBA1EB010BA0F7435763 - 90: 9691EF20CC56AF9D81F59C32C405B1AF0A2DF76B6AF8EA94F2D447197A8E8D01816BFCB34D15D175317181AB632449C8 - 91: 8AD52B3BF140EE4981B91A58F124857F16FF2BF83EBC52DE92B4D0B4F9F6F4BC187B6C382106B1D6A957E308D93168F2 - 92: DE18989D6044F347B4E418BD820DC4E68FD4ED80ED4071BF2E2BB8A4447FCE770DC8A112D4E7FF1121AC77BE999078B0 - 93: 39B5D212D725A6EABD78E413E4AFE3F345886D07FB86444332FC44372D7CE8FC120D6A55E6AA19828C1BCB760705DF99 - 94: E9677161B1938173026335D42518497B7E3033C8E15C439D1E8A5328CB7370B4C02E2DCB5CF197E8B7DF0793068E2E9F - 95: C0E00AEEA4A4041393072A02A62FEDC30644D76D2611665CF5931AD060AB158BCBA6AAF3DAB81E758D618359BF56F752 - 96: A1B101B813F7DE7869BF3F700D078647291F44B48BE889071022099B6E96069E99B2775ACB214C920689F7E0950F77DE - 97: EBEED751DA64EA37276C617299F43672EC2A9535BB41B79AEBE195F2FE3BF4391187DD704310C06F6EDB46E59FB772D2 - 98: E80EDC3BD4A13DE5F2860E38ABCC7CB04EB813B4AB1091E7C63A54F30FE233750831A69859C8754C590F5CFF41BBF6C0 - 99: C8BC9600BF4AEBD24F9214A4E9B2536CD562BD69BFC458C263CB2586FB057AAB3553903519DBEE5C4A32D8B48AB9EBD9 -100: 8B9F34E185E24A74388F437337BC319CB453CAF0E25C9E6EBD48CCB8A1F63CB9FEA5B6C47D7F96F26440425773A0BE48 -101: 1B3A88B1AB0E59516BB24ED5D8A342850455677E1121247B5A56109010A2E24F7B105916CD1AC73DB78E14F16BAFEA92 -102: E3D3A997059EEBBE9FC92876DE302D38239C1BAE4CB7A66E365CA3220140FC5F53A94CA3D65B62EF965ADC9047E6DFD6 -103: 0951916458BE4F3FA98696818A397DF3727984D1C419F9AF0EA0EF65F95D82F4A6E499F6CD9AF809CAFCBF54BA083261 -104: D469126CE1A15EE3B68C07338C3C6409B330B5D680C5C6F3D0C376EF14B4F9ED3088A2AECCDCCDD43D8B924EEE12CBEB -105: D15D39F7690D4E17610FDD90B2EF77A9FD0A3B70E6ED972C7388866BD8D6154BAEBD2757EC987C65F75572F669D826F2 -106: 2702E474A871B2BC6FD437EC68A3464A518CC569C4F7E86825CDAA63FCA5074713C0E2E4A82DFB22194CF08C6C1F0D0A -107: F0FCFD2B8B94DE53716F07FCC6EB57515F8C024FECC46C1D781138239E24F7B89199955BCD45F409608128733ADE20ED -108: AE40DE36B86152194E10A6386369FA7EE713859BE9E40168E1D8BEA4BF6057A56DF9EA0C97C375C4324D1FA96AE12A4B -109: 8FFFED11382B4138CA51C5A18196C64CB335728A86D45A6679C9BB19128385DBA5293234F2AA4184EB1F926730421F94 -110: E778DE2CBE07A77CA2D3A44FE467774DC049F1583460E0FFAF57D5869A6D71F3547FBD5683D32FBB7F002865636661F7 -111: 9A27DFF2813612DE3F389AAA526C0CECD0D651329AC1F4F15C02FD321E6FF65434D3A79D7C3C09AA268D7FC10516408C -112: F7D4EFA866622ACF88C8FE4C8B0AA423AB57CAC63685E9E50E96ECA399CADB6ECC568FCD0F71A779C22B28961165C33A -113: 94072AD2331E43712DA457E728A5A4F351F51B0D9708BADA30637588C990EFD4A8BE70E1754BC62E79C13E429BB1E455 -114: BC990B36C5E33DA419E90F94D13159B497D86B569DCF7011AD2FBD3E55602768F42A17D2BDE9250738B6C689140E209C -115: B248BDAA352727C2B6E747644A3CB18BF2880962FCB454C41D7156FACC4E7BA3249E43EBA40E1EDEDEF598DB008CC64C -116: 9274CEC286E3D02717FB07D74FD57C1A8734B5CEC5B6734D6B4962ED9A97CD22FD798A423069A5CA6465EBD1BFC49387 -117: B30C8B34092E1889D760AD5885199B0F727106B980C8CDD72F956B65CA1C868FFDA4D3F62BDE80A42E7EC14898FD4766 -118: 4073759D043AFDC4601E5374817CE3C44CD5C208554D6AD1CBD3F2D757C3C2CCCB5A37494DD55CEA4D71C6568AF858AE -119: 9B2A431C6D1CE4D85F16D78E9D4D307AB225D6172FD82C5050CBDB089623285E3734DA0BE14B46C406995808141BFECE -120: EBDDD6138231C836D3D08F05839B3E04E39BB13FDBA4AB2A541DE7CD043513B3D924E665C1BA91466C1F94AA614BF4E1 -121: 116404E3D66CABB34DB49430717F8E1F83CAC45ED75E0E89EB2338E08D1BB3DE81A29738FBD80847897E7119082F18C9 -122: 3B5AA5FDA0837332521549990324668B2ED8E21609467C705C6998A9A1176877D30162C4E80C7E5E4A63C571905229A8 -123: CD35DE5E0D82E7152F4E3E9393EC4F4D7BA46505DC5BFD7E6BF537950D2D4D24C0F024365712287EB6376E1F6EF8CA4B -124: E95385285E3D959EA3FBB00CEE9F507D12D39E48843FA0DDE209E5F1BBCBDF4780045C112A58908955885E3552949100 -125: E92EE165F0AB2155F16E34E1FBEB9A0075AC7A1D1FC7137F6664C5C867250FCB877E4E120CE4619517CCDD45A85A20CB -126: 96700D29ACB1AA93FDFD2389FDD8CE8421E0838FD7D39BB6BC3CCB357D5EED4B645943F6D2E427D6FE874CFA97DDB613 -127: 0892B5F3FD0C9CD75C44BA4FF5F648E33E8FA3E00F89FE6A58D2E97C1BC3E7555C03589312514058CC6D0A703501881A -128: A3B70E4DE06FFC38D3F827995688417FD1D1F5214CDC1BFA49093D57D5C8146C2A616A09E642BAEBB6418C763AAEAB8A -129: A7936D49108145CF524C7448CD204FCF2AB6BE9A57DB243B6DEC0323855666F6A309D8B39E0044E6D8A5AC3AE3757591 -130: B784CA38EEBD2F43F84568F265E7A7098D9412630CA2E7A6E447C163C038DF0B35AAF04FE9D1F09226E1FB0D44424EB9 -131: ED1882B7BBAF1B9028FB9ECBC3A120E94429113DF01223D701C735184D2208ACCCF0C718FAE3C00BF18190FA904F77B3 -132: 19530A66164CEB265A71E32D74F9AC4233D5DF2DB1EC1203C909A4944BFB99D7D806A64D8A4535E266D7ED030C331C0F -133: 8107616E2EF60C7A15C3B356BAB0BA5DE600814ED3197A9D0FFAC30FCCB61824E920758160D6F1C0450BE0DCBA495146 -134: 16BCB12782EDB0F2B705F9E9B02934DAF28457826C852C46317C4D28FFD495184DA6E2202A277A646E2608CB9E9F4792 -135: 4FA2D849E2041CB017B0A30A0B6ED413EFA29DC57B717A71E744C8D4858F2284B412FB77F13021483CF6449CBF0D5254 -136: 79790C32A975EE625651C9725E8AECEFEBAB5E6714C84C3DC6E914637676A426DE45E32FD7F946B5DF8E9160A04D9534 -137: 35FAB116436ED1F78031065EFD398BC4DFF4A3FEAB439AB7E75A7D532F5F8746AA2809CB260AE3973F01CD5B5AE354B3 -138: CF8040692E1A6B80A5EBAD3F8171C5385F8E1EE4C31855044AAE7960046818E178255A31F3729AB9B9747DA5CB3BD66F -139: F8741BAF6F9180C0B2D710FB733AAB03A90437B005DA4977751B4917534CD26B5E71DD6FC67E00C703E7A35A2420B317 -140: 9A87CF4A5A63DF291437D8B79CF39A1292CBA5113552A6A9EF587FBEDAA0EBDD0C2C620384E5681FFF9674C54690FEAD -141: 1946E968FCA27DAE00206E8FE896EDDC3E13457F7C54CE93E08E6E16B5D0321BAF9D1EDD066644E28D38703AABC704F2 -142: 9D209F0C32D5C35DB902D8FE29437F51E381B6ECAF6F0185C4129798EAE5AA67E440B3E82B8134389BC88D7178DD2D98 -143: 43223C8D890CA39C87955F28FC216B233C0EDCA40D48EC0F2BA209133D725E2285413CA495C560C51655F14C68009AA9 -144: D846BE30FB8D6A0B9DD316639603C39D05CEEBA5FE768779C95F9740CAF875AA2CACE8C129F23991E3D63DECF67A8013 -145: 6686BC412F9DCAA48A3E1888D717E0FA7FB3EF89CFF418D7A39467340CBC090FF6763D41D2151370DF3B21CEC9985174 -146: 259744B2BD5C058C35178A5BD811CC891E89B5DA0C91DABE118D9BE4636B1CA0A14F338AF50E9366F29C5938CF9A73EB -147: 1699F4FE81104193868F5AFFB3A10590DC322DAD6B424FEC5092BA62A6C4DC16D96C9097C9FE20A54CB23E5D4D10FA46 -148: 2E16BA352C9B77933EA22E8F0BEF5AB11F622D6AE37E0197AFFE85EDA657E196B8DFFDD1DF675C92C138FF0E4CC52D41 -149: CC9D1DBC3DE2E151B3897D6E926356939E99E13E2FF27505FEAE6B8433A55B66E4A86FCDCFE02EBE2044AB63471BFC8F -150: 8A8A179BC312A69D5C5E4E7D421772C880B619D2D19244562933F5C399F14DDB22643565867C11E235CD6D9C1C8CB52B -151: 70EC6F3191E2A07A2A65CC69780278B935CB50168A95EE89D276DD2E36855C4A83A3FC0B6B1C8B95A5E6FC2F20C01661 -152: 48C09A8D4FDBC7269AE1FB14036A773B38420FDB30D31DC07AF6DD6518B5E93CF355465192C09D012B6FD8DFE7F4C3E1 -153: C053EB759EB09202E5A0ABD86821FCD516DC9F65F42C3D167EC0BECB1C8889D7169BD0E750DE5FAC44BFA752220FC0F1 -154: 735F9389DE76D8139CBA0AB0B45C35D42FF0427B71D0FCF38DAFB703F6EFEED09C98C020CC2DF2DB1A1D5A00A827F836 -155: 1266C5F62E5A3C6B9C79B976C4E44E8165B6ADD7C5F97E4084C591CC58EA695839A8C877B2B98E2FE79373FB7F66B68A -156: 58ED02C348A4FEF6BB0D9DE76D063F0C8D7957477AFE301E20B6878A72C3BAB4364B6402AAE8C8BD32591CA19EA8DC7F -157: 6DCE243A5A380CB62BC6D91EFDF8D8B89D7D4F40C5E9CCAE454771270F28C7A80F6844CE99A76142C42B5EC065E9A049 -158: A14B0CF2CEAA37183E1AC4323CFEA071EA73C5FDFC68A29830B802F7920CC0600963B4EE8E9F18D71AAE4213D5FB95B0 -159: 56DE5304BA07EBF47AD6C54BBF9AE3E8944E08A0C36ACCE2E2ED6647C8C34955BCF25222A35468AE71CB2E66DC623D51 -160: 0BE5D19EA41051CF794B3636880452DC2F316CAF8A2FD9A9F77AA692E2E06B0AFBF2D5A4D84E5AEA8188974C0477697F -161: 3F26DA10DED74121EE28DA4A34962DF06935B325963619C1BA820F2F051D22C573A4FD7657BDA3D55202DE4680B25755 -162: 5820F047AA8231D513DBAED9702459EDC68871214D1B2E513EC25ACF56E15B5AC9EF004EFB11D18B0E6911C5B1354E4B -163: D1ED088F6CA48A8F863B9A1C56165EF1F28F3A4819EC6A6AAB565FBB58D4134B657B4CA0176EEEA428DA59580B5C6209 -164: 118323CEBEA4344D8F37F44BCCEA99D2573E746FA6222254A2A906B01F84408D1177B67EFEA6F427235D4238FF2DCB51 -165: C46105FAEF0821E450330F2024FD93949C2B5CA9A84A769D250F8DD7F2B21373A1FE57DCA8D69B89EDD503AE8031143F -166: BD245A75A4ED24BCC98E707D0B202A6EDAE0BE7B2DBD3325D69A86A17CFC724B6FF87BED89F8562DC94B434096439C7C -167: 177114801ED245CD6D2D7E498DB9C6591B07B18647001611E0BD7438F295ABD1598EDB6162570632773D99EFA16D0CF6 -168: 3FF8ED3DAA4B3706383B6661C0D34DAF2AF605BC1BBA76805656D18AF0D39B42A5F2D1CFFF69337FAA3269081632B701 -169: 94F1191AF4BD9305B37E5205827196FCAD192E939417883575ADCCC888CE2E7BF2FC9BDC8F6531D190C061471964CB81 -170: E5FF806786D8D9D9D73414388536EF86C89FF2704F4853386EB97C58C81466F5833E0E339D27D2EDD8E7FD3A9AD8D8CE -171: 898AAB52079B5B194245DCD7FC7958A5B173ECDA8416ACD69358D452D1DA813819FB96E7D27E10D827B5F0FC8ED42BDE -172: F63AC3E8A93D1109C8A4134A209640633D0FD52F91043BBB7098837B0B277419334DE071EEFB078CC8A242C848AF0008 -173: 384F6BACAC287D2C17FCBFF4D92608639DB7AB9EAEEEBC99DE50ED1E14EFE6939954E0CDC905471D34CB97EC537809EB -174: C8893C2A8CF355E7A0761C7D63AE60D0862BE75E5B1FD2F6F68B134A73574D435406326B551F5BDA5A3BEE57FC08B07E -175: B1BB4FF3C8F5F2E833A3B9D0B8F32333F36FCA17D2E3C49E73469188295F30574CD381FD30FC3BF26CC0532C2E795A7D -176: 0AEEBBABFFD88C751FB29A416269859C89B256AA2425FCEA17BC7E684D6188A33FE05564DDFD960146B75B1F194AFF1A -177: BA67D584E7F7711F5159CBFE35AE5849B7A727E123A4BA0DFFCB54BF59E17254B01F85F7EB10602ABFBFFB9475EFEA37 -178: BB71ED4D47400B557E19AA00AFF41B24706AEA47FCC7D94E59C7FC64E7D80957E86EA92D463C8E8A534752C56CA47183 -179: CD16A329DDCDABA4A8934271958BF17D3967D4CDFA45E411B3E4AA5FD2CA892FDB3E1887516D0DF46E949329CE2EBAB8 -180: 8DF14A471610575ADDE7059FF5BD842C6697D38803C3AB6BF6B6B524FD88B5963F55F32AAA5B66946AB6652C0CE662BB -181: 325234459D8581870E72BC02562C3479DD47FBD291C74249004C6C683131D1F68F72CE24EC46C6DD95F41F4556EAD0F5 -182: DD06D5C10B3918DAA3493C07A81EC9ED08282859F2686844220C088A4A4DDAF579DBCD0F3355740ACDEAFA621BE00066 -183: 6595527D4246E59D04E5A164BCA88A51B80BF645010EA79CEA6EC5F6D0CA19414493E36BFD5DF1FD3A7D37F60CA3ECAA -184: 587147F248546C9FBD1D71FF316B89CF53218083D191D866BB41E0598D182212AC724E50A14B6EDCA3E1EE184ADCAC35 -185: ADE407368B49A7FF9335B6C8760D65D73A7F4722E04FAFDFD4EA41A9F3CF3D5CF34454E728F1034F8206216524F658E2 -186: 919B712604429ABAB4A244FB88B8197353301742CB8EE57ACD4C2FD42B7ED07E0A5D40878C5AFA63BB19CFCD889BA6B2 -187: 80345CAA65F35DD9A4D94251CD58768EE3F032437F30F5D96F41B9143712FB49E8D9E1F8D7A010436EC87501E3F76886 -188: E9AB01C34B622D9DECB212E2AFFA85334412F45E12439E02A36F0E8C94F8444678C00B2BEB3A642FBBCE61CA0F1874A5 -189: 94E2B474570E9A2194656DDB2E1E800C2952747B070D0FD99C783A98FA7566204830EE9C588BA4CCFFE2F4F148810079 -190: 33F5DB0206D0366D5D6EB8320AE19DA3173C62F9A6269AF178F76E077EDFD54D5A035A77FC637DD678654849211869AB -191: 4CE6DEC101AB81E4F963A8BBFC567CB2B3C1C1E0D49C76181915C1E2D40DD241B6C02D3F9CAE485D86F7DBEC286DE7B3 -192: 19ABB35EF9E0F02196AE59CFF31689F141305BC74902052F070799188BFBEF24F38299BE0DE218949AE814BC9E0F1BB1 -193: 7187437601BB820646DCE6248650785C5DE639AF612A5ED2D716F53F4ECFEEFF6F4EE0C9A16DA53C2444D13EE1B91367 -194: 5EEA752F35F8999BE4681491ACC79CF3130BD3574D70F6B50E39245800C010BAD08B0A943EBE51C8D66158E0122106D9 -195: E375837899DCCA9B50CA0D5DE5A2CE24C66CDFCA8CCBB12E5023290E16FF3EBA22C1675D7F83E48FC43954D8128C6015 -196: 8BB6EA7DBEC7520D2D4F4D392C36DB3591010257ACB4EFCC15DF43CE37F3F55CE09860CCAAFD492038268569BF5CDD2B -197: 7B5796A4C73C18B2B1550BA300AD30CEA08760A2927C5AC5D581878F6AF28C0649D8100CBA55AA9DE2CDE12669A0006C -198: 59399FCD802A6EA843C71314A0E208F2EA447C36A9FA41E49ECCF51E84948C2BA7C7DEDD66AA7044326BB7954FF21004 -199: 1DC6566968A1DB010573F84C62AE3938C2EE295C2C42600A654F4FC248222406E4162C79D55E61B5D7C413988B711517 -200: F6055A3D1E55781A988880DBDDC5D663602BF173147888892060C01B5648146DCF15CD85DF46CFD9C28B2A15EE2EF739 -201: 25F7956064C2D68C7ACD8D87C529F40218C01BB50A7859C4F0918B1C1B3489085B3EF9F32C4E478491EB4B05087A75B2 -202: A58EAF2C1791E2F9DB3BF58DBD7A5C36A0C2A6880635078FF6EFF13AE6EA317BA0BB57718BD7AFFFB92356C9C4FEB782 -203: B94A335DF1888ACBBA876712E0E3C981AF59AA5935DE891E6C86F081ED652F8421715A1E0B3BD5BC5CAD529DBD387652 -204: 1903B7D3FEB1A368E2B5DF378E525B5852D6ED9E438F0BA7A74AA8411B74205A439B4B9CEEEBED4346AF797759DC7BB2 -205: 2D4722E3CB466CF32190F6891D1A0A807796DBCDDF07B8D7BE8C3EFAEA31E7598E4420E3DF6618C10C0DD6E7DAF9680E -206: 3BC4A88C22DDA3EDE98EF082F91448DE9C206F5079E68E0021C079A445885E729FBF0BB93F2B07D9A17C2D40EAF2A8F9 -207: B60BAF3BE5A331693EB60B7C62D0530EF4345EDE75B57C125FF1BE44977096B80DAD017B67BA73EBC0ADF0FADA49D207 -208: 3C31C96FE6727BF63217D4D7E8F48E8CAA5AC1462BD2AE41380D0049A638A54F4B08130960B4F76B2EBBD44556F58640 - -HMAC-keccak512 - 0: EA47689C1671440874714E5C82DB727A4C24991FCF5814A1524F89504114FE53A7059F36EEEA4A8865BB2FFEF106CEC7890BD3693E5B2D6010027EF934B16813 - 1: 979E9BD8B2D4A3FF77426F35831A52F8434094A74DC2D491DB7E80B92720FBDB3D07C1761D5E9B1FA90F8CB2D86CF731DD1AFB325C25A888E9F6F5A3825ECF70 - 2: B9A5D93B8869EC8CC43490FF1532EBE6A467C99526804F4E06BAAD509F0BBC9101C30C7C059E30E50EDC623E835C4643904594DFA406A9E52C7084BF0E19F86B - 3: 8C627BB414D1B93C61B4607EAAC8DC4DD87729216DE32C5767F385C6A7FF3E9865CD1E71412D56AD63C190B7BD3F7574F7273FB6DE0403BA2B080298D84AFCC7 - 4: 7BEAB223FCEB5BBA527EFD61EAF296435FC732764F0F1AC402769FDAA1C2CF8E5718E9939A683BD3C65DEE27A15867431836109DA735AC95C044A484A7290362 - 5: F9D8FA890319ACB02631CA03D8B16AAF61F6D93E118864D10F95A576FD65518C6D8EF8430FE6A1D863A9099D99E44DEB32A31DFFA1EFD153430F76B3EE7648BE - 6: 8CC91D624EBCBCF9EA9646BA06C09BD9E264C14587BFD91BF8CB3A13D0D6CC1B8C534F460503BBA5B0DB212CC5B0BB05E0542CAB227E14B6E533EF39F57D5EAE - 7: D1330799B4561D8E786F5C9EFFBA2FD5DEC86EE213B3E496D24A6E7235457183AA7D2282E572792DD478F31221A5DD7315302B421B02E3D01A211475F587A46B - 8: 47731F8B666AC1D30BD16AE93552614510D09FA0E7C3726BBB40D61C505EE9D804E445C00D75D9004CFE22A7F2371C2FD7153DDEF1828B1089CB8BE083BE0948 - 9: E056642BA600560E667867098DA383594179C5B8E43244EE5C60A324180F05904C06235CD98B2F2577AB2DD69A3723105446870D1ACB7EF605C21071263B47D0 - 10: 6968201F8C206592141CBEB67C0A291B9C22693004BC405BA61B190886E43B238F72C684700F3DC0EF837DC2590D0E8F4E7917D43FE2DA126C01A35617945E9E - 11: EC5633064E527D4012116F90641FC7997E58D0901C70F10A2BC6BDD939F5D8F9250BEBCDFBCA9F52B39AC4CA525C30238860C4FB7EB2FBE5346EC7252967B3CF - 12: E87B0317A5B6D4B995442C1291996D8A532C5865BE479C57CA12791C1A411B6F6812326ACAEEF3F6F5B3C029EEB3DB2D8078F55B98BF7B7F1D2AD7CC405D2467 - 13: E1B93B6E86F40977818098DDEB1FCD955FED159CC9BFA10442D2F6F871C0F65F4CF82A0044EE81E34935B7A3FED23547FB821779259A30CD4CA156B013558BDB - 14: 65342A78899D45FDE89558B96960BADC466B64608E24931B923DB649376993E52E2A9774A30C9D49064FCE7C6DD6F462B888C9D3C1B4825C781F577FD7423AD4 - 15: 29425566C3789B3C1A532033CF850CF343F676A65D13549067DAFE27DF3E54BEC7EC273ACA83568B33BD31835F13AE4BA414482B1769A7202388C3ED4021B285 - 16: 2CC5535D03C2AD9A94B6F7282288ADD60167E6107B0AD09342C0503B3FB3872D22DC4CC4C23E7B82BB5EDD044B3976B467EF10A9D2C4166C94A2E1DB574D5473 - 17: 79B2A79CD9038ED363679E874BBD3C46E14E0A82CFD22E3018E9411920BA556E388F0A0541B8FB39E2A37BC9110EEBCB4674914DF978A6FB0ACBC0DD852EEDB4 - 18: 68965BF75256628F21E7100D0C17B31D83F16A6485059D860312330F4D5907034995195852FE53ACBBDAD51F48724A28A07CDD41CEABFA913B25E4EC1FB1399E - 19: BFFAB267535ADC549EC804DAD19533D6CC33B5487015197078BA8C18AD04193A7C0F2A8A5905DA2E3EE88D678AFE285D4815C6BDD907DD4D01EBC6992E69F125 - 20: 372042B2317C7ACA5066FC3759276A218AEB5CBED134AEDE3A93D4383B2FC47EB6EC5A7FD018470C29D52A07E2C9578451BE808C1C166A71D6706B14D117A37D - 21: 2EAF468C5292920E3CD6238FF1CDE771CDD84A7F5086BEEF8453D75EF1B08348FB4F81E79D37A8176206753517B43D328C5F66C7B6D5E10B0D34BF3E8CA49F13 - 22: A255E18DDFE28C90D2324B7C301F7951A7396169F00137C6CD28E14ECFDBF6A7D6997AA30ED2E11512236A6A68381E333F46765128C0B297918B230A1980B5D4 - 23: 516C742F280905E41C49FBEA3FFFDD100B6B9D6BCB13B6B94BB22DE726395690DE51A21930E99DC417B5AD95FB4A75CD6FE61B5FA8DCAD2FF56A2E6A1664F919 - 24: 9BE3FFA11F44E1D3977D3237F29959FA8CC48498504B8FE28ED3E0E5553531A682317AE9F31F5360DF8BCF89B8DA2E8B7FFAEEBC5354917B1C0DA62DC016DB4A - 25: FA28A848F0AB205965042888A64038B010B20CE5AAC93C00E9FFA0483FDBD70313FB16A1D0F687735457347F7DD5BCCE78B056C38DE35B73D662124409A83EB6 - 26: C2AFEB77AC0830E95B3D96A5B060DAC9FD4CFFB60007A08D5EB5B52FC15B1A85B65BAAA811CB7C1B42575C5163F08ED4E8BCA2B4BF540B1DC26724DC932EF502 - 27: FC5CB3C10A78BF9BE61A5028C1B28749122654E32DEA659940465E5E873D263D298DE2840E47AEACF1516B3DB2B77A7945B6D34958864F4A5016736BC735B5AA - 28: 77B75017AE75AF164B618D1A62EC8CE4D36C0916A567F204230D6C0568C133F1BC3F1FE86B8D0F0892CD52F1815973B30BFD4685E89399213AEAF7AB916073C9 - 29: 2EDDD1A6236810D633B1237CFAF86F8AC9AC01289A710B265B8D0FC8B6ACE1592C1A836079F51566E5CE9DC9C9C1DE0F226E8948A8B94A4AF64D21B883F0F3E2 - 30: 1B75449718EB026B8E57373F8517D3BA103B77BDC74C7D9087B3E7DF34DBD4771C8C74CED72FF2BEAD3330C7DC60F9751B5FB18B57489C6E2B5D874A28B7AD71 - 31: 58560B7D2D4FE9FD94EAC872806F8D667B6A758183012DC73DAAC4F3B72CE8FC2F0AE76556FE6AE0BFA710BC87515CEC108A879863DA16A677F70A4B2B7DCA5F - 32: 484B0A9D67D0B1F6E68D546EF6EECACFB9C2C0925129224A9414EDB67AE4E1A184845E088B885598E08ED5F964A8A44411DB85A7D27455F319D3EBAF4F9FC6E9 - 33: 1013EA6C1C603B55EFFA9F6439540AB345456DF86CB88CBCC79903F58C23340EE2BAEC32FA266894F686040877E55A6E3373ADB9F14172D005BA8D2F25426451 - 34: 1EEB73A4661F4A215E9D44ED68079C0BDE7281571FD568404E7B8293FFAF5D4889626D7B661FCDFA52425DC78072CEA95A92DCF1ED18A55E1676AF56DC726114 - 35: D60A8C519C1FBC186E90BE1D2EAD95EAD79B3192E87FAC4959EEAF9A0D9D8BB3B301BF9A776699F5D9A9CB4DFF64B73CB8252DE9D8D840C25B1E7A6D2046C911 - 36: AEFFA3BD68FA3DD485BA56C17A92D6BBF34B16ED6A7C78B136008EE88BC509491F3C4CA89C3AF1FC9FC90C6E5D9D072787E9650AE7446BB88BAD4282C9807946 - 37: 98DA931FBD0C4A19A157CA9A4FBAFF2E38BBF6AD48F59B2D438C5D77D5513D2AAD2FC242D267C4264B453CD2395FFB65F16FC445EAE17B0FCB89EE92B934173F - 38: 6E2341D63E9967CC0AA44AFD1BBCCE1B763D5CE0DF5AA69B6EBF781277EF5C2F75A6F5CB72519CCD77D6E8B6313DC0552D68F44BE953D46F32DE48B1A838B9DB - 39: 5752EAB9823EDD99463E57E81436540CCBDE88DAC30B1FB78A6357480A323D446C8F0C2E7DE28C1D894CE9CB250BA5388CBE69FA6F9A0ABF52E8E1EE7D6EFD97 - 40: DE0C84F87C42B8294A4FC281BF0A9311F919E6FF9E1CFEB88CA69FECFB89A8929104339B3077D142D18DF5A5F21B24D147EBFFFDC6E89905AC7BBB67177C3255 - 41: CD42E8C4742E7F3884DA7D7A8659541EB9DDC9386F734D2D9BC9E2B1B000E428F2A233E23E152A8E77042F20A571E56D1BC96863222F11A4A41FAD7EBB144554 - 42: 0FF9412653D25B3E3B7CB5D34F4AB74D67C694282601BFF226AC108E6F56675CCA27B7AA9310531DC2ACA4C23C76EFC6D3463776B1B23ACA8935F5B10E4ED540 - 43: DFCF8D5A582B631AD9CE6B9E205F9D235CEB4B6F6AE6AE153DBE6AF0E8F65F83767C2580C6C2A83959D2DE864211F0253B65EF5D0DC62DDA0C229ED6BAD6A741 - 44: E7BE002AD7B60054F20D5C0A5AFADC83987B3FBA2748495F67828E0BCE1F26653750533C3EC357740B849E761DC550956D2F6A0422E03B1DDB9934DE1A9561C9 - 45: D323AE22886F27344904E939E6E61331D8579BA86227D1DF572CF9098E99B51C9F96423900DEF6F4579E1855B1515C35264735D81558C07B092AED9777A9BA9A - 46: F77F2CF738DB0772B82EF2A3986BFF7D3A80182200E1D7787A426DD0CBB05CA135F2578C54B4141D1FB262A99BE22B8A246A77ED54A92512B7C8B427A872AA9E - 47: C6A94751E817101BB991D590EE0C73D33AFFFA7652C3190CF0096DCC2B00943721E52DE2211AA3D29ABD1BBA047A616121BBB48EB42BF9A8D8417A60BDF35A5E - 48: 88F7A998755FBE1763223B81B9C2E8A9AF7BC5D2C2FBFBC4983090E7B0AD621FF6D5D531AF88F9BD1A80F91257923900BD9F243A28796CFA20EED4259C030B43 - 49: D35275611162E80DD9521864BB299BDE3785ADB56F1CE622457AC5192B2AA29FE46E79318FF5A259654C88028E937D520544BCEBDC3C6989DEE0C1FE5EB646B8 - 50: 604348495BA29AC464994A40EF2F78CA333A5FF5035846AC3F48839D1A101D7A0B72A747B909E1E9F3D2A2AF82FCFF24664A8AA435BFA2A8273A86965A2075A5 - 51: C9A2CD2369BEF90FEF9A5D4DA31D3F7C7B911F0CBC27C7AE9DCDD2049664078387BE40B2E952AF916B5F61782FAF7E787F5B5CF710A5ED95C7187A0706B0CC62 - 52: 00660B5A2DE291F5E75ECCC62686BCBB648BE8ABB2B84D3F70246F4FDCEE77A21F433F84698B7637F1E41E526BEF572625B1D6B499039B294E8AC3E4D5B32AD1 - 53: 88EC6B4FE297870A4B081F935799A4043DA603F6577F01B5544240D8C4FE6E728146F4A4410F738A7E488F3C65F1F0E10C1DA1A52F41CC91CBCCC86CE7D62C5E - 54: 5DEC5BFED7FCE4061D3ADBFD5C2BAA5EEA63F87CB964101CB3589FF59AC9B35CA568BEA8C37A4E8AE26B50A1BA43C4B2A443F7B3D33CEB3FCCAE100238BA6478 - 55: 8048D101BFF3CA2D4F5E9A4233B66D4CCFB34E26D9DFF565FB2C8F027A83B04573498DE4F7FE6596B1D8330385AB7C9874C36A923D1F55B51BCDFB0738678688 - 56: 45AF08C31170330E7FD1390826A4048B1785935B12E231C5D893B8D6A8636180D96D8A23455822843C8A0B90811DDADF90DCA686E1BC4684DF6E7183FD8DC07A - 57: 3556615DC87E3D681132D88FED9A78751C86D09E80F57B950DF75174D0DA21C92F3BE9F193242F3E6EA4DFF3BDBA3B80531211787441395F3976D2B7FA704CE6 - 58: E184AF014CA346531AA3B7A5778513E8923E0BA03AEA38EC73C248A6A6B2772FB585344595111C9A4FE6AD2698308659AEF1CFA8456FD3F81AE7A1CB54329291 - 59: 7C9C2A0F8F590C0768E45E4E1E480B3F88B182693EA0B9C204665A7C6232C2ADE8140F7CDE11D7D1B1B13E0FE1F95BD7A9450A6EB16BDF498ADF3B7AB9E06E84 - 60: 1A5AF3DA8CF3DCA419E77A79F885F198437B9C820A181FE4108F978FEC2E6273A0DCE0E920ACEE9C2846AAB2AC17416D375964CAD72B861D1FBD49D473C16DD9 - 61: DC00377D3759AB2E00C46BC6DC313B939A8945FEE559F01546724869B762402B7688521C3B5327F8DA3E02826B6D7F69D4AF67982FAE473D52D984AAF9271072 - 62: DBD0896EB60CB1900C62594C5B1402D41A41B2F4584334CD71BB3D48BC808B860044760F9487FB023C1BC653B67D795FEF76E0970DB5D427A6F0302F409B34CF - 63: B780D10EFEBBA30C50BA022B293A5695D1AD69983A329CDDFFA34E2FD04FED6686F7BE16596F7E729692B46D2D14BBC3AE03FFB71E6B519CE2761DADD55D80B2 - 64: 692558A67C0A682C294C5496D2CE65BA1373008A88AE0E5ECE480D97F22CC6E70DD353A0512A01E3302229B03D1308661EAFAD84F99AF72F8B334E0136E8CC1A - 65: 24C121C9827AF368CC982E2026A2B01780EAC658DC3ECAB900E6A8B1976E819E0D632B3782E3DF07D64CC6A46F990F8A9B6434829A7F8170D3D7F7A435E567A3 - 66: E0CEE61FFBE6642B00C55D7BA2B13648F0744DB8ED2CC8FB0DB3D1C86803AF6C218CCDA6947C554717A17B766AAB250B7BEF55F87DA374A545235533E35FB89C - 67: EBA1E5F2CAC4AC2FE86B8FB088CF0BD8C19C0AF5FE8BCED31F5C62BFFF577E8E833206B345AC0A496518A1C26D546F80281F18CF64246B20DE5D242591151BCA - 68: D84E97188932CD84D1EAECD9C5489408581321899C435C007F8A071CE0B6C075683F238CAC4703C10F356B5AEA447BA400FA1A2BE6C19C19CD9AB054D55D58EB - 69: C2982D6F8A1F15286120CC700CCD444B98406A5E41D30F39825AD4BB63577B40ACFDD90F4C35EBBEDCF4B656279ABECF06C20472FD459B656523FF46A9BEBB76 - 70: 84C6DAB3CD0AC39A59CAE4BEBB31FCBFD4046AABB710622CFEF6BEF56B0F5DDA9550E9AB1B73D9458AF0F895432715855ABF389C233B38F87EE0730CC1D5C674 - 71: 1BADD0BC4AA8922FA0A5420C308A32870D4B691508A7E29A3095FE85E57C5B9A6F0D2FF6495CA5BD59E66668975F968D86BB4157B82758FDBE571ECB0585A6A3 - 72: 31D1193794DF557FEE8F68755BFAB4D1D45107248997E1929BA0346E4F33ED13B08DCC66306E5A9AA94CAECE0F240C9C596D50C48FA7F7C5C2DDABE0651B5C23 - 73: 3B519D37B7D13ED45394B1C81A55498B3311378C640E1A2B77D4A4E97BA36AA80423DB72253B4694D6F3E156714975BD5D384C1ACCFCED981476626F4FF15673 - 74: 7E3AAECBC4B252AF198E339B2CCD3703805A27D532BD822C9A33EA9B2B5C661E62A0B1AB96A8C51577C28343C0AB72603A66A60B760508479E5F15BA86864467 - 75: 390AFB428FBE0768C4E42237B6F5C2466D0BF7CC77C3397B02D99ACC8F00070433D9E06EFCAB1FEF51A14997DC7E73F07D90B4EBD37E381EFD7BACDBAB047753 - 76: 434AFFF38665D59774C655CD039190F57C57FB3E86109602AA38692D9A9B262915BA26BBFBB7794AFA0258D41AB771B6EC4CC466DC589C9DE9126DBE753356B3 - 77: 462DEC441618146A36E13DE114C1CE16AAA6D56382DBDAC64956AEA310C4E5F968FD337F51EF2FFD800DF0490240316767A9C8615B345E2DD4023732992F6433 - 78: 9B6504B8E902C1BE56E19F57934A996691B3A718B8B43FBD36F3F2C7F22A0AC9A622D4F8659139BAB6183D9F2A5E0F98E3DDE9101C6E20D5D082D7030EB28320 - 79: F082BBCE5715433EAB2CAD0E978355CE70783612490ED8446EBAE632007A8D109B1EAF3C9AAC4DDE938F105EBB93A431C7FFE1D78B9E5F0CDAEA53828B32E216 - 80: D9519157DE1700952319029B0B9B591C8284E12E27A027ED18D688B6A7181B9EC6E0C36DAA58B32D503301DAA9A5C06B7862BB428A390F51C74E6B808A3B7ACC - 81: E5E407E5A6E63DBF9BB67CB330F1D8EAA8F72EF79909FA57D4F2BF50E5AACDA3736FC00DE3D4079DBB56E8B0D779444F44279E9CED8B8FE083BE8B6B0F311B81 - 82: 5A37595D5FB1B89E6A42163D6F491D260CF1A3291D24802938FCF28F62ECE5F0E3AC9C482DF7FD3A8B64DB7E8B01030359177AC35ECA1ECFE23145A27BDC421B - 83: CA702895BDDF10C02220B914FA15C6A4F9A0B21F2CBFFDC0FD2C561C2A3C423D6FBBA6C2A4C55E41AFF636E725B1D052A3D02CB314077942A107B189030D89D2 - 84: F006ACA611F021EE80B7CBD5220064181E82B0572D3122E5A29899E8EFDB5FAEEA3F3129082CE21DA9ED534BC59EDB058AE8356629EA260254279939B22C1E29 - 85: 15D95007AFD22DE5FC83C8B9493EAF0FE882CFDD128E33D771137B78DF887C0BD809B6A9533140CFE24BA13217C1B20EDF38001251AA904A1501AE9044DBCCD7 - 86: 9CE98CC9A48488F4A6D0BDBF88FCF7D670C9F96CD1B60B16787C9B32AC1F4FE181C814389FECE0E4144BAD2FED8FF5B43A53889402EF76DE24F7B0A89EE2E32D - 87: 8A700551C08F625E52378A2634B77D564D321DAB6905F18C62F1B5BB7A903A0A2AA58B1C73FD46A67A495F12D8B81764DB4BDCBB789E8BCD8BAD069284A5D748 - 88: 0466362776EBC0665CA805AF8F488D4AC4087C9C8B2B7A8AF579E673BCF56A6339ED26B9608FA1011E6E9B2E4907F12FBC290DF761618E9F7DC3D1988371F452 - 89: B2DD9812A701C0242C883A3971BB71D86CC971F6C9A15759291B7417EAD34FD2541F0D5B5D6E43C391DBA067240F0C101AC2C9E83236DB7F36DC13B39804C279 - 90: 05BDAD2C7B66250D588F2CA2FA1BC3F8E2B23A1E05979EAABC88614BA16C23C16901276180421613ED3B61BF79F56694AC0F9C2D9F148B60284E4448507C2B00 - 91: CEB270D807DD20C8D257C23C8AEB0A33B3F55C64F7FF1A9C751BF35FE7DB3F15A2B43600FC8C9952C1D8D5A5D572321348F67D5F799978900B2C538602B74D9B - 92: 1FC351F568B150C16C345D364ADB39C6B3884AA48803375CF97632061A9D51778D34DCE71F57F6FAFD615FCE0FA9D5E6DD36D827A78CD12150C01E4C903021EA - 93: B3EFB5D6F37A2C01975BE912D516AEE7479A6C5306A6A6CA0DBB6AC28513360779BE5AFFF2EEEFB45362E2AD7A7983C26FCA053114C8D3309FE9FF5269707CDD - 94: 388853448872C2E94C1F8EC0217AC0B75C5C83110457B8BC368813B4B4BCE54A731DDE2E83218E402A0F2FA2D9F13B57A6E386ADB4BE36C7351A711878F3BB0B - 95: 1E7C7A4527FE640E5502B827044DA0DC3DF7C9F9FEF495AED80C540D3441223E90878B6C95BE47F6B21EEDEB3CF0101D9AB47656DB519EB13F803FDED9C60107 - 96: 7B05A399D8B59A599F8EF9C188FD541D610E3A7DA9C7249350A60C06B91EC3B1DE00D51E66008CBF1354E1FD44637B821A8741A50074304F89E4DDCD9468F348 - 97: 1E8E7919F36D427DCF10307BD255B725181EA1B6B317F71EEBCB97DEF28712A508705409EBCE4F320734C61AD6D25C8BA85B4E4C8FD3DB2E22AA42BE8C67C25B - 98: 21B78CD6A6B31AE9770E7278307D3311C37E7244FCDEF139BCD450ACC42E842D2E7BD50535116D5ED8FF8F73C7BAB6C759B72B6091AAC9BBBB59C6F2CF91E0E3 - 99: E3B918E61FBF68D87D3A6B6C37CB763C0E3690146B50A7631683AFFB2AD7C2339601894051F7DE95CF2E7C485094AFBC615399863E4EE1DA43305EFBD5A876FE -100: E27E249FF3AD0582A96422C72E15219842DE4E38DBCD74C96FB4B77697E1FF4A94AA3F4BEBFB084DF5FFEE3BB023DFC414C701F56190EDEB9E2D601AFF874395 -101: 46FA356819E422D92EDFC05138E83EF08640C52C29485507D7A3A8F3056C90DCCBF1CE32E673F37676FAAB85214C7001B828116B9DE47F3D3DF91F0FC43BE8E1 -102: CE1079451244EB5425B6D3353DFC6F72DA2BE4D34A4AB729A3FD4CCFAA7DC3322502FEE334DC57A2072492C9423BD52ACA8B09AC26F4424F3D193ABBA5029D78 -103: 0605CB26C3AD598BB282610AD9B97F8CB23806EEED05284EC196A1520AB65596A9A3FD9B556750986FB2A99D1322D1B6AEBC9CEA9D6D66C4B44C842D49FA7BA5 -104: 82E82C9E6F2671F9EFF2C7254E1209C96481629667A027B6F2521C8A63229DA0C591C15E92DD369072B4EE21FC0FAFA4B6ACBFCCEB99938E68804D94F1F14926 -105: 0F450A969FF55360F811CB85992CFD57A900A275E65F21850B3235E7E90B716A6FC7D8AADA4ADBE5D3B58A3D2959EDEAE78653A8289B85F99119C0DB37B5B946 -106: 54571CA84E80425EF39537C68BFC076F73F3366E56716E87630520C2BEB20DFF38E612FC7CC7AB3D3DD580656DA629B6FB3B6A5E14CF9BD239035A9C872B7F79 -107: 541C02CD5CA627FA870A1FF0950CE415A3DFFB55D7ACF3FAB64893FA49DD9E46777B314087EE02E051B5120065302FCD732E4E2127D900A333372CD14F85E0A8 -108: 7401A90712A99354A2A68FE95DDA7F51E67B4610F15B8B2324A5C0888BCB3AC223ABF8BD68F41A55093FCF08088B35EBE657D08B86FC60EB705893D311B875D9 -109: 2D58A2FA7020D27369F7D9F6B9C0A3B31DE873DE34167146E88EAB9511EA2EDD5C8952793524F1FB3E0CFCFCAE91B575016B69D7355E833D481F1830928AED22 -110: D6D9A5EE7704DE26F35EC3296C6D542783FA12C10E4F11B99D60B8A31C3B8F62ED5CAE40313535B589862FAFB56E7DD44791C4890472CECBE364559CB194F59C -111: 1DD16B0A3D8990B64CB425016DC5B91DFD2F8C53048FF136B1EDC9204A06EB85C054425E7881F2095DAA9800FEB7278DE201DBF67C4893833BA637E92D99D4B7 -112: B0884C9F2EDF73619F0C5CF38FC356FF70D803331591AA1F2AAE0BBBD501C889C458ABD0D03BA870EAABEA274DEDAEB0A02FAEF1679AF00FC25FF009C9C21DA4 -113: 9EF9C3EBD2AC379AF7DD05EE1B3A969D55BED7431FED73EE1DD17AB453C56DA96B0977CCFB408E22315F3A54A469614BFB3120160591F83D31420250CCE772EE -114: BD763D4A8EA95F624A51F49320093FC93519983879DA3A37A82D414D76A2ECDD014B7743CE1C9364643E786E43EC2211B9F0D72404A08341004F24C6B6D67E19 -115: 212BCAA19366080EC2981F394C187624015015AF75C79586CB87C614201AC7BE57548703E7D23AE340D7225E77F7261C95D75EBECD41E4634321598CF3245DBD -116: 0D713F6DBD23CA09ED9983F5AD47C7C65FEA22B153736CCB58962253247CDDB2F04DD967099E976717A5836937ECE155EAD1C3211ACFF9C7FB439D528DBF2694 -117: 1D92A21787CE14990846729497A14BA2B0E7332EAA7F76A01C7C64B4B0E1647FB2988DF44D0E1719E44D3A63C9C77A04DAA3BCF6FD14C4218F372A6C83D693A3 -118: DB66F6C8D90EDA013A6CA7F57D612A642FFEE1B4715DC798AF551B19E3A1877C83648B450B8FADAEADF597325BC50F6553DDF77958ADC25C9992845240C49993 -119: ADF7BFA93C3AA7EA18D69206EBEDD572891D893637000C74398F095E12D5AEE2CA39AA4E8B938877A3FA94590F76D8D0622E4584154EE9C14B1C418154B403A1 -120: 09FC16835C92B8E22A72BADB074F6240CC9C0EF1FB416BA44DB3CBC2C2C1584D9B62EEA5907992F3A8FD81EFAB60FCA9068E982A3AD372B272FF9243663FD453 -121: 14D83F490828651ADC86B7A300371C532C884AA5293E7B64E067681E78DC0BB535FA01CC7D62A7316A650849A9EFFCF6448C82B2E7554DFD0AA7C00FAE3EEC37 -122: D4DB52EEBAEA65C715FA42EF56B8D4BB582504A69C67E718078024DE9932370F5AC525C41343A4AFC104FAD2DAD793751C32CD215EC3A389F11B5868749ADD61 -123: D34F081DF0733B87AC7ECB401B55621C506FC3F503A15C0FC9698D186E701BF034F9803D02E550DA6A9D722F45298E57E46351C738FFFFBA60C7FC4CB5C82E55 -124: CFB808349B8BAA7BB9029A22639289F23EC57B07A0F072CA7F0BB6585F865BCEF31DE161FF1714D75273F1AAB33E49A97DE376707A4DF02423A2B31C6719637F -125: EBC31BC239B208210B853EF2B7F1E4DFE52988F8DE15662663905BE45075E117D03B8687C0CFBD180F5D825F9FE2D625CBB9AA944D3CB5601180D07E955E5A85 -126: FF44A050FC1246AE115A44A1AD9CB8FF3BB20BF9130F011F4F98D713F79FD6B7DF8633D8CDE87A556BD89D7CB635FE0BB8990F1E8602767C7E190F5E7ADC43FA -127: C77CDA8946AF424DB1CEE323ECFA33F1B81BD6EABC795FF57ED2DE5AE7F00475A0BAF75AB315E858818ACFB9F2818D080A65A69969E253228EC317AC173139B1 -128: DBBD7E64C915593AC6B16377B64E4A3F3C0A5110BA9AEFD96CABAF58C8D7918BB62FC6A37F4FE4EA7A05516D0F65AB8180DA3E58729A83083D02313C2BEE6EB2 -129: 4590376230B48C05BD03E0148EFD40B431C6EA80BAE9DF0CA8F81B73D6CDF7BCEF0B8BA8D92B15A077A0E4E0F2F0E257851859A02187C28BBEDC9944F8F88AE6 -130: 8829185FCD3C5B56898CBD293444E8D80E1FF6F0BF81677E26D0989DE7F387713F2F87115E3D3AEB2C12C887FBF82B4C9ACF202ED279DC50E78EA537DB124139 -131: FCE192273155258FEF4AF185ABDCEE2A307AC4A429A4838FF0015C6A4E7E146DB78027EDEDCD48635138E79972CAE4DB6393271D667E0C6C3EDFC0EB2EEE115A -132: 7F7134D66974195D402F64C7C6722FDB33E612DD18A7052DA11657BA36FC4B7FDA095AE5955F67E1BB67B76BE567194173A70A9FA0CABC638D3CDF0E6F0A0FA8 -133: 4F1D34321B45F0B8C9D9F5070F44C14BFC7E57B8A9C13D486C715ADE2DBBFFF618DCAE9C4FFEC06EDE1A7CE8FC0B93DDE531A52BF15028FDB45B879E4EB65D73 -134: F8A691ABC7F7727DE2AA86B1BBFF8448757360A56808FFE6DAB2A5C7B6079343B55771E34F84AA7BD6BDAF72C912BCA254170EF838D40819BF28A578B0F42252 -135: 705F653CC0017ACC31DA4974CF1CA0C718436052B8E6E0CA5059D9581F7F5EE48BECADC03EFF3C33707F6C36FE9320A45EB2DA24C1E82A2A1D768DD691CD3470 -136: 00523693CE704DB06CAA7E44283E5D5A5E1D2098034158BEA7C3A07741B6DE679BFB80D7BC112F9D90A0B7837102BFEAAFB67F264F2EE5E1632DDD4BC1CA787C -137: 637857E399C927AD5603D80F31E72E0CDF35D586FC8C880D76EDA024D1ED3491B5E9C1C689CF64CB1B5EA2311E6D198559C27711B99CBE00E5CFBD265C713232 -138: 67968600ADC72E0DC83D4856EBC5BB47369CF5CDDC719BA8EC8B2C855530B9DF3153E2EB6419D7CC83ABD80C798EA54297C53D86FF01DEA3BF25260FF284D0B3 -139: 0E8BD3B14AA28EE8DC61E617AF4D1C0AE9FEDE201006CFF0A3BA459E52CB2DAF37898BB6BFA09302D503489B74713CACFE15740A81983E55BCE4384E7E553B24 -140: 1EECAA433296C7F36DA248F27DEE73528D2FB8572830EBD1358E95987C228F0E04F959A845025606A77DF45FA264DD1F2CE6732CC431F1A5AEB2DD075F63EDBD -141: 7E4728358EA1F10D7BC32D94848710A6E92D5A7E4D94A5C51FB0CC382BB7424A65FB7E7E38D0CE4399BFE7AB91C872BE4A139F8A604C5D440582FBAE3E21DFF3 -142: 99DD1B4028D5A82A42ED4F14F242695D487890441EB5A8ED14145AAABF74101C5C2254B2ADF3B6B280B96B9D2739E9C8286353B28DDDD063A43B24B525D198C4 -143: 935DDB67ED51839CCB930BED9E8ED523E3711F3FCE37F59E457EFCE24EAEC2B298844B06AA99262762AA75109C7C36226ACC03271D953548EE128C2FCAA3427E -144: B790562312EACD645C718B3142F0B4C349A83749B646C7F09129C2E7FCE4B3A305EDCBB03C5415204F97CC8BB268A3CAB3ABCDE1B3B5D3F49684DCE015ACFAFD +HMAC-sha512 + 0: D29B9E3F87809686F34109FBC718D6ABBB09C278CF05A206ADF21463E1170362122E58272A31679720B254CBD63A7C6D696BF9283F9C6897E7D792483BB0388C + 1: 5EC18FCA20788348244720D58E9532B4B699E78D48CF7D7BDD1A4E5C61CD09C075EA7F112DE379FBE953332C6A7D6273B3F6360BC07203A5175FAE618E4A2F55 + 2: 293D275FDD5021716117D2B85E6D38F8D60D4984BC73E2D8D7EF5942CF1287B65C0675E566794786FEA18AED1192A024FC4B3E0505D91E1F91833B210590BFDF + 3: 8D9E222D6B16C58B3862D6BFA556BDFC2A4A152BB2574C2294D5381F6E38FB681500A6A19D55525B337A467A2FC30DD1684832FFF92AD071EEF05BC4F4399FE9 + 4: 71E7028F8C4CE9C1EAEFE459771528D26993E180E616D68355B9C618153AFF2C0E9620B151C8F733E71180EB87BD773A512B945AA353029A8F807FB2A8FF2264 + 5: 589F462D37095693ED0C1F3E0DCB892BD19086FE033718911931509EF6195AD17C79939A87665889EFA6DC19A69BEC6E7058531552832CCBBC06F1BEC70D1736 + 6: D94FC6BDAB3613271522BA05C998A6D1C57CAF0E6EE929651762F257E7EEBC07F5CC7CD3D4064A2755E408B347939B3927434556B4ED49CA406C21D1024E6D80 + 7: 4D8A886A89E9C60EDA3BF0BC512A295196C3F62018936DDB24BE9F6AEC7AA9511B33CBEC8A22309B6389417F4E7FB0489981CACF03DFECF7D9FE5B91D62BB719 + 8: D0E00955F0FFF98ABE885970EE44F1B5D4C23C205C64B681381FA13C543106B2AB4E762FD71F47008B4C429C39ED3D66B3EAEA946674F08684AC99F957F50416 + 9: 4F623E52B5FA2D556D25754FD00BB8429356FD75FE2EC57EB4BA4E25CE03C5332D3A632179C9FCFFF140E6B443A4285F4A7CE881E6D3EEC4FB0DB26C0E2DCDC1 + 10: 5196EE8D442E5308F9D8911C87050DD3C4842D0CDCF55AC554412CF096EDA94BE1A251743AD5BC5F8AC902A38B66D7D57C90C29200984572D57C04F64166B803 + 11: EF77019B0F93B1598E38D3B1B703B52660192547353E7FCD5A7C8525DBB516970D3A6F2A94729D90A5A34CEA255F310C1F46546C2A08975AF477DA2F3689F17E + 12: 0A77531D7081095AC0D0ADF2B379D3F820DD20CD89610917E287FF57BCA5DEABA750E1E075DAACA9CC4DDC74732E6F7BCCCD3671B6DD27503CA855EACC63FFB1 + 13: F1E04B1F7B09DA270A44B62DBAD2FC0160BA1D144D7721010D77ED250A00986932CB6652D95B4A977494F11AF7E7FC82A70DFDACFA11232D653B1A052820185A + 14: 7BE1855550A49FF66D6D395DA7DEBDEAF674F1AB192DF82D74F6BAE8088F83EF1471F413CE00A404486213E41B42CF6C4F7FF1BFA17A1E28928B7179F0A966EE + 15: DFF2CDE8856D811494F559E9F4159065A50B1E82961628E95F04D595F670249A2B71C2625CC1CC2B1F85829255DA007F0374363EB749E935BB72BDA24B8A3F70 + 16: D2F7FE57D9583EC1AA733403527DFBB118DFE07B2A60C43039FB238A7205A053E0496AD0F3C1896090AEAB3088283C8FAF272D1D53B5F9F88281E0A53FE7F8DB + 17: 963F629ED8F0E7D6D4CA4DC8A8B57C825F726380D0BA9A9857459491BA82F64A929EC4ABFCF79374CA68BA812E3A83A643D05454E146E9F4103D17E20B8350F5 + 18: 1FDAE69CA4A9FAACDDF30A56B23F14768EB7D5616F6666B6F01FE5E216825CD4201A69CE3D2D1D2C3D03246BA7D32ADCAAA4A7D03B9AE6AF4CFBB474E1717BCA + 19: 2532E98B6D91D8D658BC1A1FE41AC719D648D47BACB423C031A8E2E9C25CC6650D3E5DF8046BC3532875F0C8DADB38AA911F216E6741E9FAD700D31269EE5D46 + 20: C81E6E9F4B75A4EB2B903C4DE28CC437CD87BF789F6BE60EF521491CC7E44AF26E9EFAC55961135F79B3591F5F7B92ECDC9917641BDC34943C6759AAD9437498 + 21: C0C2B9478F956800B64FA408BB0E077FEF48DE4B146926B3C577C00688829FFA6540AD7C211A807286C546F7D146F95989E77B62F5E14D62FE0C77C85FCB6CC3 + 22: 980D06C1B27EB2EB15069566BD1BD838FD3DA453751BEC564C05941C9BFB9EE8443EECF84CBF8AA7DECAA294C7D1A3FA4A39C20A4659DF332CAFFCB2863A769B + 23: 70FB10E482AD19447CFAF10EB9FCFEE67F9DF7164B2647F19CB220E7D83BF892AB7B5C5ABB73B779522012BFD464D9D1B18C37C3F6CB70EC4106FA94F8CEFECC + 24: 7AB19BF67380012D3A53B93AC15E353D477FDD1E2E8851CD5AB5F36EA0C8B128D3193934F837D23D232F44009AC60DDD358AFC8D3A201BED3EAEEF74C03617A0 + 25: AAFC1227AC42CC27BBF78FE26B3FACBB7B15360891C8EAA8C737AD42C00971D02B3A07CA751774D02F402F7E76BE08E2C1241EB66242DB5E11B342C22AAB9FEB + 26: D8CC3BE5B48C7BEE8522BD8872419932907B78392B7F2546788477C858D0C7BD772985C0B0D202AB7E69AB5F4E1A0BC848A512FDD79EC29F19BC4BA6D28DEB07 + 27: 6133D836D68C82658F6263F794073CAD9029F20CC11D0A6CF589335B023CFD66D708F09136546C6C08769139363AE5CB4CC2CC86EC6911237ACBFD8B0423E377 + 28: 833DAC9CFFBD62FF0749391A42324E2848670913890754E24ECC29D4738AF00A78134660A20078FE59C66113787F4A3E6C0E783740B2F2B2BC8D36FE4EDE39ED + 29: A2F3BC0DF058506805DCF5CC3006CC4FC4085FD846C7A7A7DD3A06CD6DF635359F4FBE90A676DABD7F9AAF42577C8E3B07B63B9CEC8A9AD05B38D16F56214E8F + 30: A49C3BB487C561E5AADA4FBA2D9F5B42681486AE2DF56087DD65B3D5E03C625F709299C84C64A68D87C92A4CC90246D608E692D1FFCE2C099348CD0A19407C2B + 31: C8D7B7A7FFAEDE88963B09A09ECCCB4CAE77DF9D8D242BA19F6485BC7775308E5D11C78FE9C46E609F3AF070F3DA8ED929C103DA1F25BE7867FD4D3E4F2757C9 + 32: AD4627AFB02DECFF956E612537F011E82CB0C202A5A11AB7AFF55A201016C02CD21EFB4EB197BC2D13D272C6A830FD77F534E800B0AF1E79FCFB626ED6A0D6B8 + 33: 8D4E232D9614EA1194E60748496CFD32A4AC249BB8F08E55A7C9DFDA708DE90D067FC433EB9DA2A6833D43BBA8E8DBF31137A3C9B26903060EF9217471E9F945 + 34: 4CE5E4055F10F1D2182A7892F98206D9A120FBDA3251036B7EFEC835C95B4D1FE0BE3892E2363087D01948AA426AA403ABE1CD79F0AA851E2D1195511C7A85AC + 35: ABD65F8E9A2B39BFEF6EFC9A9EDEF6572489AE82034EF3BF2AE5F380026FF4CC40AF093F0408445735C0E6EBEF5D7E7ECC13C98B59807AE01FFE1BAB040FD14D + 36: E8C687D7AF785B1E547307875682ACD82FB58A8259551D81F309C923C2B1FBAF5935EE059B89070B8420F71EEE3BE7B1E3B55B196872F06DD1FB890F6FED11CA + 37: A344BE73E6585E0CC31525BD6D4EC3345D7780CF180D0D5C2D5FBDEDCBEA050A958FEB13C21924E311F57FD6A498756146AAC58412B98E4D2A3B29D9B77A9F53 + 38: F0A088CC818F76A1FD6B5D707B114BDE24245CD55E48611ACC6AA497A0CEF93768501B5F280AC518CEE48C15373118BE7B72F8ABB2E9FD3526DD1C18D9CB2545 + 39: 4D56D5C9222BB78E04DC9346FA9C4ADC27AE08DA3E34F490A13F674264896E58F9E9839715F633C7195B40DF722441275C84AEF162B513E673809F7874E7A124 + 40: C4B3C9E8140F0D5589E326916462354827E491F3444E0C361512E6E761F5E24AE1873B238B73F32F6BF8F1D1D8FF9437A01DACCB749282E776FF66151A4F7E19 + 41: 7B4E07BAF338DF6479E169EB6CC64CFF88167958D44C5CB6606964B7F9ECF5F3F1B1F695C63F2BD66354722F81EE4BC90B9FCF5345642E264C66F6950CC8C481 + 42: 8571A8F76A1D5DAA0900A03E236FE965D085BE6035B7C0601EAD338106BE7DAFAEC82F7C3D8AD346FF749B6DAFC69901A6072CA089B7A5724C75CB0818640F7D + 43: DF516D84392E571C3FE39F4A0BA5D16D866553644B4C4627D3513F0A1C60D22FC5AA4276A71CB37BD6D6AD05A12BF812A2D5388A606583B78372B84DC567431E + 44: 535AF3C73B479B61B8B70E590E335DC4C1E22DCA656454213E1FDD46D026B6D36133BDD372FBFBB27B6DCA8E487F4A54BDA8C5F67B37C871653C656DDE9524EA + 45: DBFA27964DC6A80FF76112FC6CC02C87811DF1ECA3A8620A5030C600561032FC374A6B060FEBE0ED67421D9217D2719F5A55621736FFFC6F4F26DD4C6049FC09 + 46: 6F69BFD2C60AB1554023A6A2094D30CA78D364501F7813A2CB73DEA94AD4B94A0EDF3A3698D6A30C8A5E764B81F51CD0CAEF0F996B8C685A345AA630CD10570A + 47: 2769DDB3AF3DD650BC381D7B10CBC4353699A2A352E57FA5D5CC4FB610E498767F49104ED0F4E06E2BD563F7F8045212F5B9C49CBE050A1662F2262BAC4053CE + 48: E50169B15772017CD9FF93D1B46AF273B375A39D174E3B8621EAC8EF968BD967E1448DC3B2C72A667EFAEBF2B90D4E6640698CB866075E95817719E0EE61DF30 + 49: 4212648E8F9ACBDC16D48CD7B355884E0817A95DB03BD9B8AC5B28BE6371D8AF83546DC82550B8B23DC77F6D06211E3AF3B25528BE686CCA1672C91117DF9762 + 50: 33C71EECDBE503A6AF72EBA8D2B9AA7AB8FA8DE536C87643ABF1BC3EDA535BBA64A8A7F4BAC90ADB7D8C926DCAB1D7DCE15D356C5074BB3EBC7B17516671EC8F + 51: C8EE9E57EFA859DC5553D03402AE80B84B1E0032CE3F2CAC43F8422A80E3EF59126AE7AB4893735F9C948CD9FA8793571E4582908DA19FC723A93C7C36F79F9C + 52: 7CABE0F83E90CF9A497DCE45F14F9926DC714DEEF05A1A0603F6436E134FC7C8346A19CB92DCDE69D794B38FB22233577BA3905C94A7020841224DA888B9BE1F + 53: FDC20554A15B71BA62F896DDC4F8B354E5D2434B0AF719CCA7DC56FBC9BD280B0F80136C4336D605C7C26208649F38C1DD0004C6E0E787A91FAA6075051FFDCF + 54: 87387F89646B4068038E011D7E02C353BD5649F6DA1C4C46CD9F7D69EB3A2F6EE84DD42D25B67BB81666CE8F92A5B1A0F3EA58D4F0B5B6E59EDEC86B43BA0CA6 + 55: 6D0210417671B66D59B8F28CA0EAFDB493C30A7D7329DF29194C53887F05EDC2C3F35853898ED77394CCC650E8D350F69598E3AEF3DDF540DACCED5BBCBAF6AA + 56: F14085036C69398BC7E0CD8A9D4451A10B080E7CEDA5582ED396E5D54441125EB3EF6EDE4534E788DFE6DD3DAAA204814097987981EC8BD8E39E8E8B35AD8FAA + 57: BA67FB4D7D137531D3F4CD3D91975255FCF8EABBEB97EF0FC7C21C4E25FD034658C63881B0AEBEECD2B7D15357C14542D26EBA3ACCA944EB4C4D7E44E9899D42 + 58: 4546585669E343AD40792308AB456DF623A6A23CCBE64B26B953D6C461460BBA7A3FB444481BDB3F7FC8D5E825F2527D2DFF193356CB3171CFBB56C679AD1BB9 + 59: 210F8AD68FCD10BDB8773194FE57EFF566C7E65BCD82BE6196DECB40BF39774691AC6BA718E4B5FF0DDCF2C0510182B9A114C6F0117A0BB0E1AD585C69D38D0B + 60: 29003A048ECAC0613CFAE8EC8757F5E5CF80E9B0BBF538D7460765FE2D6B56D6251ABCFD42B56D64B56D8F219868DEB42B968E88D3F3BE3A161DCB43EA98349A + 61: A308F9E2B60D0093A7278B0645A471408F58B45B3683531179F34931D06A15F4A502F2F7E1DF8B47830F65387BB9F102646058AB456045267F2DC403A1D9A6DD + 62: AD484DDC270FE74E68620AEC882E86320D0D0753E713D9D5C9C7FEEB894DD3FD5FDF4995DDEF87B1126B36E92618331126F5852AA8C0D44404BF9F77B780595D + 63: B4BA7B2F08BC0FC901188B50493FD165F659D3226227E2E9892BD70B02312C12D195A73AED3A4009618E6E74799DB158D9AC27FCCA9BC682B09ECF53BD368C46 + 64: 0AF65ED93646AE826C79BB6E8CD193D5246BD00B0BABF8425ACE03C845B9AEE428045D5F8267F3EA86C433F1A9DBF4AD1883AF164EAFE02C07CE43079668A248 + 65: 65F899BE2C5E9879F6A3BF7B60E62591B5DC5398283229E4FADB1EE78FFBF962295C427BA0D50BBCB9E2F1DD9694BD36CA598BAE7C2EF1F4D0700DC95BB66C37 + 66: FA9ACC46F0841962D6DDCBF5D47BBEC43A0E1E9B2A8F8B7970E2E73C06612FD95044B8BEB58C71B19AF4169B7E6500500445490F80EA4E305B6BB00C7181810D + 67: E9AEA6E12F881A7AEC3AAF428BBF0DA3138EBF69C6B8E52621609AD340D6537E4A03E2B099B735FA82A3D300F782606EF58598683D4ACB0870D5130B4B3142FB + 68: 3558ADBFD411DB8436A1A8B40420EE9C274FA153AEF891290F79DE5714130A50C70EB87E8A901D540ADCFC37E40EF44592822F6ADBBE8E5CB4EC89909633DD7C + 69: AF3852A0B4E846B59A4EAEB7A7A451311B1E8F554042CEB2D253F10FCB3067F9CA927C7DA3E57BC9C99E4E7997856B35DAB0645C194AE9F1FA0A92BC218CC9BC + 70: 6BD90F0F8FFA39C2A483E8349D2A29A96AA7F3CB4B4C1325FE5162988C9DEE849B8E56BF1423B6905ED3FC6A82A067F850372414E2A4A7E5CA379AB80F1C4F23 + 71: 6433885A8A39F2E4CBB36191A038EC3E3227BDDDAEAE24FD396481332A9AD7BECCC4E9BDEA0C8A7F33180ECB1EC1DB49218D17C4325B661967ADCBA25B341649 + 72: C3235054A1FDFF2C0D218C3B54EE6A58FA5AE99040A64A90B9C8DE601B80A7C130168FE7484CE1FD9FBE22E6E794161826730B63DE794EC4ED1D653E40B27F7A + 73: 89F4DF5AC626665D9791A1E1C30D1F206D89C4B0C59916DA295931539B0A607A1261B4EF022CCDA6ECE02E99449E252EAFC8929F5074866C3FF59CC58268E2B8 + 74: 3F1AC15A90C38AA964518F176016FDC73A85B096EFD1FCDCCF38F3EC692635BD4E610F1B3314E068164D02168F73A307AD549E1E7EF07DD374F9697DB6A17447 + 75: 4FE16A3BF0534DD2E4DACC43E221179C9B61D7D50DAEDA4DA9C45CCFDC76D6FA96EB3CC1C184DD5DDF7DAAA413D05B2FE518117E2C9A880726148C7AE6052160 + 76: 1EA870E13B7E59B97045F662682F29DAEC4413566DA341468CC9F5CAB733D1897BBAD8E9520B85C43DE33B9B70880AB774EA636248CD0A1626C9CDFEC3F1835F + 77: 37AE3A9828B08A055B2E47A613D25A8D43D5A456BF741E7964C0DF4AEC6D8E5F3EF874F2B20606A38AFCBD307C104DFA5BF40BFBB3078771436276E777F645DF + 78: 48CB9B779D37299162D2674CE2C2595B2422071917C28AB48781DED5060E76EDABA56E7C538C3182F9D960DC21928E6B3069D510046608C976D7A113DE54DCEB + 79: A565459CED6C996C04A21FF0DA10A7F24B1DE22EEAD7FA7FD2CEEAF522A42E29395F771140573D684C94F61F19C771DF68FF8EA0FF727C55294C70E701C8E426 + 80: 3A0ADB5479E65BE1F00462E60C8F7F74FF5C996680A2A4CF787B5DF65BB2E82264004E396AD7EAFCF8A201E03AA950D42B9A26EF2D24FD2AD7CF57CBD08AFFAC + 81: 6FFC799781B2E9F3F573651EB2DCB0771073DA1875CCC3D2B4C6C06F43161195610617007CA9A943B1F2B001E62518EBABD4542E73CA131E20A167FA6E8CAE44 + 82: 79C9E349F1216FCB295FFFE5771EF54A024306CED9CA111DA3DC629722DF7FA5F0927152E4401E0358BDC16D9ABFA02C709B1C21F6D86905B0CF0D6EC9FD1952 + 83: 6876CC513300CC83BAFCAAE5DFE4C4A0CB962079523ED475B19568243A63B208301335BDDE10CEC90CA816960013E08271F02111BD18FD03C1B941543FF4A579 + 84: FB5392BCB60C1329D3FBEDB4DE1131E7B89326A34F34BB099A7EBEE42B985682F52412D3F0628AA72A8C2C46BA3FEA08D5765264E48DDDBB96CB598C9C0BA93C + 85: FAE655D7CC2FDB54349870B199FA54CF47BEF2AD98021FA27B968AD4C3AE477C6B2DFA9A10C75FE275D5A32C5E9FA06B03D4C908184F49FCF15ABC409106E951 + 86: 9B15DD192392017E2F4DDFCD30B7AE58546AB71EC44DB94EE66CA3419D580AA05B5F10E5D36D9E60465FB8F56665366824B5B6E9A63A13F6E83A026F5A8E0911 + 87: 1A0EC6F024130D24D9740E8037C78A176D9C5933C4073DE3C6B0536E9F7CD20E0E89705953DAC9CD44C85EA059ADC496A7A0EFC40F187DF676D2BC83F80BE983 + 88: 5E9683BD68FA16BE904FF617510AE99249ED3477276A0B410B269EB2E03A3505EDF653C725811AD9DCD7FCCF6F2411980784F4BE7407D68C02CF6ACD21FA1B52 + 89: 47CE3079037E396A5B5A1A3FFFC3C60A138AA2C6BF4FFF26D846C7E1E84E31A26270AAC5C688DA7A29DED589018BC349E3247B073B765FDBA4C8BB271CC6E233 + 90: 280FE2B5B0B72FEFA48A9B6A1B0A3529CAC9D6338E2083816930B14FEA5B21088B1009DE147D81FC7F29B00BADAB32B57E15322A6180D713411F559658FAC715 + 91: 527C2E33018CE9895C3F84BA5C072055730AAF767DC82AE236F1F7C5511FBF2CFCBE32AAEEFEADE38EED4C0895290D0EAAB38E3A5CF7B2462675D1E6B26CE814 + 92: 8C0E22F5BE099CEE31C816A0F5DCF9A548B0EAB55AE7CC127D172AA5243A5C73B5BD3AFD77C89370D51460CB7E84F1DD15774D1B8442C07AD21A3B128688E1E0 + 93: 6CF00F05A9DD7EBA5F1A755987F5678F80AAAF9B5FC44D6199100C062DB50D2DA89096389DB94A6D68BD8337640BAB60AFC8793E1A909624A4E149AECBE415C5 + 94: 8452FD4AAEB1AF4ACA8192DD59926E7B0D7B295B8FE18DF4DD21E7C7ABE8F4ADE7391753E533EDA2EFA13CBCD96948ACF26B658F1E72390BBCD7C1BDCE8FD650 + 95: C4DBE8DC875D00FFAE2AAEB3E0BF1F01529A364454D56D329FD493D327287F3E34DBDF2AD54C5BAC5E6059F5897D18157C7DC846F15F2CDA1B2F0A6EEAAE58D5 + 96: 6C88BBBAD961E9DD1418E9F8EC69FEB443176108F56FA2B0B686E93B0E5F505E56302994FB190787EBA7CED5EAB69DD24CEC39BD566D18ABE337A31414991735 + 97: 439ACC720E8CD0C4A119B9C318FBC543CB7B35FF12DA190D82A951970248BB47D0DA2171A7BF850A881E8767FBCD542039E483974F18532FDB57DF23CD18B1D3 + 98: D71EF6284984442D05E8B6B1AB636E0BA013A8D70029F9F1B9BA7927A582D5AC6899B9C8EB990CA93B49E460AE140564D40467A1368FB4A9EFFED4A467E174CD + 99: 8B5AD2DDB4F8C044AFE2B0216B7E7D830EBDD285E4D992CA022CA2F59644806D8B7599CEC51DC73786D98B7B6F7C10C3BB7D4CEE3740FA42DB21BB51A1269611 +100: 28CA7AF155E9E7E1F5EB64F211F254D624C6C42935E27A91745F2AF2EECFDCF1DBD5896F60520A527499432DD3D0F3981F0E5BA72EF113231A0319467BF5271A +101: 45B69480A77AEE3D83D39A38717EC1CAE1634D2D50D05FD78F70309DDA566DFC160FDA967EA6ADEA8BF45B74557DBCAE4D6187DE1BB82A053CF84B4217F9CCA6 +102: BF46E03CEAE3211FEAED2147B3F2909D406A767005F9C8A5CE6139133D41C2812D3225123B3BF0792288E4BB5C8B5ECE9BDFE0F8FF097DD64FB2CCB964FC9862 +103: 3CA25AE24E0D847D9552FD74E1D6FAAF91736603DEE98E51922A2923630D7CF35917916A1DB23A758E7F067F26A5DE9135871B3DE508CE4ECFEBCBBA1A958C78 +104: 2C4380BB9F29041388A0F8292D97482E1E96429B79162A19F01918DBC2DF0B36244ED9E7D015A20290877ACC4D2FFB14D236CE7FC92ED16C7C57012B0CF6DF70 +105: A0020193ADA7F57DA648C1474731F145E6A8E9E7F9550ECE1A841E2D735B18769738AEA78E7AABB8ABB51EF08A34C187478B4C5AB5BFF4932E97F4E246C60C6A +106: 60E81090C365DA5E69E2FC12256131F134F561C7A411F51F72B7649727C9D7E99795D18D1AA54D09F6B2DD7FC556512F49D582BA6006D951D474039095F3ED07 +107: B213DA3FB3ABD16B1CF5CA81574D78649382A6CFEBA5A88C0B8DD40B1C6E18520F145968C342DB13A2B4B2659F4F865E8CF50BCF2138A7B09A1FC190676E1895 +108: 6862BF8F73054DEF42EF38C4A362ECC8F13BE7E705573D8E9AC6B347EFE6A218950A5AB5ACAC3607C0C94301E0A085BFAE7DAD5E1863D469C113B790C234A947 +109: 2D7D3040A495F8C089C67FEE236A07C7D3361D35271B4DFEA5F17C7E80B888EA339B936C4475194BBE35DD9AF3BE112201AC21C9F5858E4F4C39A0FCFF0EB31C +110: 1F995515755C98C5EB95818DAF0C55B51192BD8D752FA35EBBF51176F05ADFDC32E2FA845C1821B6110F7EC1F1D1EA963433194BB978285CA4344A5F989113EF +111: 3F5855B07A4288497533924165E7EAD3D91A16F5E832FB341F5373C118D5ED7E0EF8D837FEF594C2039F08A7870EC1C2770B7C4E7185246908976B62A416DE5B +112: 1541B5A9C84B684BBDB543F77CF384473D007992F37498F07709EE68033E41829E29109E7C77E252C241C78AF41C790E40696206D58B2FDEE768E5B321362F4E +113: 6DA9AC8390F4264064947684F53A1ADB49314E0619509298CFFEA1729A944990BE2D4C0988BD6E8BD1062D574879218ED8FC4801877D637ED3B5383C069A29D9 +114: BA0A194D5078019B21910C37AFB81A890C4FECE7B1F4E722CF855A6F2F8B82E4EAD37B7B58C07ACEF1EA2B76B146811732EBE1BC0F76A146207B8213802DFB28 +115: 20631BF1D6555C7BA761B0581BBCDCA5A7B1BAACA1B3D3E5B4D70D0C9B0A279BAF00DE093AB1334ED5994FC17386D0B2BE9E0FB67AC1038704891769AE530BB6 +116: F31F66E176DF632694A6F7E16ED8F15CE88908EF1D1F0067CC8A5C805370B9CACE0BDC78B1CEF06630012B3A35D129C4E2AA4F7302E1A122C7E53C51DA7F795D +117: 18B5417DC4CEE4387338C63156C34BBAFF19A2BB962E4248B1A1AFF1FF145BA47D84C6C8570D072BBC57D912C8048E0ED50060CA33408A00722A65C194178387 +118: 2AE09DC52D7BB9E692822A6FB3D582B805E5ECD2C1C4813F94F555BA2210429B615A2301B3EB7C491153D68AE33AD9D28F2FC11B6C61700D79BC7DDB251BD15F +119: 534390ED2DA55D45402F828D6035819C4528768DBFFAE1039CF0D18F89BEAA867589F78871FBC746E43B59E7886FDF734364DEC4193AABF56E8BEDD801E60D89 +120: 231597B2B71E6BE567C86DFE31ADD7B31332BEDA930C4921C4817B7DEBB0282A12D23B076F4783EA840D890F6C571760E70E143F8565561062877D95BD0FF941 +121: D60A1481686AB8F889EACF2E9F66BC32271E70E3E04B91ACA6CFB90375860E0BFC5AD9A627BA0C763CD7576811CDE2921E9A63C0F0A7A26E763F7EC7902308E7 +122: BA65BE7D1EF697281736B3AFA97FF675CD776C125CB01028EC2894EC2EFB9908835A3882E5E57BD44ACA09DC3B0580145EB2265E1724DA6F01AF5F93022D5774 +123: 0DEE2EBEBAA770891C14346A26834CF40212531EDDD64A21EF9FBD62F4728A16E18C673DC8CE3883156F51854A0ACC341DDEE6A0B71C4CBF797CD5327056AAD9 +124: 0717C9EDCC2FAEE525A684EAAB79653DD83BF46ECB285E6B154DFCB8A0C9F8D4B28FA200A6C224B4620CB0AB5B33B9C8BE77B2B5A04DB1A3EF8A5951EC46607C +125: BADCAAE4F76006290B9090AC81B807E7251EAC041E6CB10A2C5B58C4F4B2386E065E6D55C46CD888396C86606FACC82DE2F3F88904E15D549101AC7FFBA057D3 +126: 751F6366EFC97218AC2E0675E7F375444C8D82AE7A139E78305E14148E07100F5B7EF93B576DCE546A7BAFCE24FE148B248BE072031F89B6AE7BA9CC559E9C9B +127: EC0FCB3E124C482CC8D86BA2CDDE931E521F0B6F3E7F333C4388E7448A7F196D95766CEB8A49A90E46B592958BB85BD7495747E71508877975EB1454A4EBD57E +128: CDEEE6EC4D67DD8698B72C13735657EE9F78BB0E1DD37D0CF06063717DA9DCD617C5F4FF7656AA48CB3F697E36B3904F496136A2B04E19726DEF9D3406F8A84A +129: 81BB692EAF7F5176B6A0E5F2DFC01A045A917649D0B23B22C180BD78672F37F8E562FD006A00AF2D7AF0AFE15C8D191339AE28FF2797E64A3809400E2E73A785 +130: 04A8456D131499586CF7B9FC45C2EC96859F3F4BB8240ECD93E439EFD5DDE1DE7B67B688B583598D7FD50CB179D318D4C05EDE04F6FA318AA1E9DD7D4E279307 +131: E5C9D55B686DD9D7B1819A6144F6272B1FB5BB3B3034AB9D1BF34391283BA614D57894925C3D589A7FAC0CA1B1E98A12E9DFDDC2BCD85D1E7F2980709EF25719 +132: 2C6EF2E1C179BFA8295197371C474081790A63AFAA194E459CDC27AD4453B3A8C0110F9229BBDD4BBA5D6E80F2CEA71059334A97EA34F96810A2EBFCC3B177B8 +133: AAD54FE02E67080851DC84E20F7661E42ADB610D0B105B3EA6EB6654DAF64458B7E0F756392196AE2B40626CC2B0D82E47D74D3C50A607F4402C6C6A62999324 +134: CF210EE9A800943EAAF4EFE15DB7DEB696233A4DD62206D46BD9C84A7EB13B5EA43FF3CE15ADD8FC4BCFF022196197D1D097B7A893A79C6640135929FCEF10F6 +135: C81761EBF3235F4D56697B19F62B4F7445C8FDCE3D7999F3249493D50C19CA57C5FC84CD35CF794F58DDB6AC86E8BD53350BA9676AB63B88214162C8E11C16AF +136: 8E56EB131EFA286A92078F5A3667BC6669D6A7FD9746CA5F208EE38D5265CF27076C1624ED0F98D486C55C28A4FB89C7B667AAC505CA1CFE1E841184615B7602 +137: B6CAF44F87688E9E3651C2C98E840264464DE9DFE1F3E4CE5C1BEAD46C7D9D747DFFE282D775E101591A7254112C2DFD543E44B41E72EFEE30B032E5E015150A +138: 8E7851F56585595ABD2B3EBA5AE713672093A3120798506ADD1ACAA3ADD92D737F9AE155B8A5166C0F047801A93731D4B807DFE15F08D67DEF31A7B808601D6E +139: B36B6689A5F391688DA3A0756A15AF15E6E66701E2132CF6F06326AE9C91A0BBAA35664B28BC5B936D2BF1E6653848C5DB57654685124A08C79FD03ACC0681D1 +140: 24A23CE3A90C8EC3D10330EBDA47763B1B03035F9E4AAE0AD336169A2F464E067B026D94ED4B9723E969C8AAE7F404F7B4481C48EF7545EAAE4E648525A68751 +141: C7ADE61F21133886EE0E0B14438F070DA398B3A5387CABF98B0802662F3BD3AAA8738D36CCC0D3EA25BBE9DD3B59062BDF4BE2740482BF6D4C21D0E0FD7B0679 +142: 17EEAD5930DB3A1F8E123AD2E72C38209824F977674A52F380843442F0A5C82B55F8A362527BF5324124401648BEF5E9E26E08050B1FE80886E3856F98AC1EF8 +143: 9DE4F43CA8F7E528FFF9F4EF5897652323AEB95DF80049AFBA189C3D142CFF55AE340358A71B01797A8B72F478276E6353421E1C0C22EBDEA0C044EA60865784 +144: E259BE34C467B471C94B612EA6BD99A3F7EDE58E237DABA6A6656F7F7EB5466DAF908B7759027C277BD9234ECBB23C5C62DD2C9D248C1AE52865D66B5C256756 +145: E49099FC970994F8293E71467BFB1D241FE99322075795FCACFDBFAB396392E37BA09E66BF492684642FF2A03F8CF92E0ACF4677C21AC1C236DDCA103F0B5A69 +146: 4338E438D419D8694FC40383EB1045FD9DFEBC6F18A9A03B4914687A8639322E3B050F48E872BB7E2AD9013D374D68BDBBDD0B177024C1185320D04598515ADF +147: A36238A5C795B23F42D0833A5152770A4B0094BC19DFA72C935D32D02FAF5D136BF55D92B022D01949FF04B78507FB203302833AA7103729771A112E4FD1584F +148: 47180F9E838B129A7732A8DAD763B8CC5437BAEF77EFD34D3B33C63C09F6314B87B3A1436C6866614C3B3A693BC7926E9AE876C7BDE9D712FB5198D6417FCEF6 +149: A87064FF5DA177F3651488A139E568F6C75722ECF97507316BDAC36393724525291682776843B8563A6B014646F6B19F040B17B62BEE4A0711A7B06A67DF75C3 +150: F358321DC6A376ED500A2DABA60096B817D13B59AA02B56C1F51E2C6804F5D2DE2028409964D5755BFC6424287504994C7605749A5E5D9D802BB42922F444D76 +151: AC4A9999133546B8452047EE31B398F623E01DCACED7BAE4CB0B4DF0DD53B8E4921109308DE53C0924E0006361BC8A480AACF798D6B403F338357E8DB676AFBA +152: 0E73ABBEB68982F163257C1145FA2E465FD6E720EEAF5E532DDD1ACCC690B37A8FAEFF8D7D41564A9C86C2F185E0FBD0FCE75259D34A5E96B8C514EC83CA1382 +153: 094503A1B90D71960F83C91D76754BA6B05D670EC6A8EEE1D3CDC652DA6E52B196E155F3BCB62A9E4EF8C507F377AC1321C4C0D7A03F7D8A5286C0019C358E92 +154: 12803349F15FCBD53F2FE11B67DABCF3F470B8E3AFE8A855D7A918E611A2D5F4DAE8FE847ED1FAF834BB3678C6253111636100A991A80C1EAD0D35E28DB3AC85 +155: F489665F4D8A4AAA679D5E5A1B7C501DECE2E0B228630AEEAA1F5643FC4BCCB9E2F018FC2D7C44ABC4AC0861EBA8B7700A49B42486DD13263D978F8A7C9CA306 +156: D9DFBC3DBF0E3D247C95E16D376E7098A92EC59A54FAB482C330139EC6E06ED514D5C74F9604D1171A127502811A16D1D3039BD03C4DBED20BB765EFD34C5F0F +157: BA56A64D01FCF392A6E2F73D791D6C5A57AB40A376E73388CECBFDB910402043B4DB2F2D2B86E3510986CF1DEC3880E3C739175D5C0AA1DCEA18959135E2CF48 +158: F4B07B0A063AB240E5A64F1C494FCD9839276FD9689AA6720A94B83E579EF1044997F6506C1AD82C2CABB9384CEEA0B77D3970C1B7E13F8DE98AFA869F1F4D2A +159: CB4F232024B2D0C48E415D73193CD83C1A6BB9806CA336AC4F3B8FF7BF992B200504ED5E539CAAE68B1E47D4D8ACFD2E6B4BBC1B518689BBB5BB4311C96FE06A +160: 1E67E36D2EC5D0591C0171E7426A88919EA5A17470DA305CBA7BAEE90002E23043FAE1F4BE003EDDC2520A404E639B03880E3CCC68243C60E243A0E7A02E2CA0 +161: 40E46A8F257265A1E57A09B43890FEEFA57F56BB47551BAB38BE2BA8D143C176749484ADEB2D833EC9D6B70FBE872FA53618E64CF0AED24D51BA982D29E730C8 +162: F399712E5EFBA3FDF6B7D04600C16F69260179AB79545F44EF5849308E6FA589721CF7E6FE384461D05EF02BE51E50FA93C5FEEE9279A953C57EC07CFBE53E1D +163: 58DEEE13BF73ADD8B49EBBA90A8EDCE7030C17D6E6C449726D094F90A35A07759A3BEA031EEAF963C4753522EBBED1482789833D15D6EED7F5214E1AB93C174B +164: 13B2F766E6B796C44429A747CB46D99A9866115C78D2E94DAB52BBC9269B6584D26676CFECC2A9F026AE8E0162B6BB8DCB2242659EDA67CF793BF66963C69021 +165: 992B995865F57633665483C7C3ACD34BD108B5DDF151CED97C0D7AD134A8D9250CA8DC17C5C2A76C1C07989228F8B474814FB116C98D25D8F291D10CE259570E +166: 1C5D5E9C29DD91877E279DB679ACF0EFD8464B0A58EC9A3036EDB2621E8106FCF2A81719FDD1B89F13FCBD20960387754DD0F12876DAA911E793DF8F1991C043 +167: FE7F98A1D7839BB417CFF65A45E2DE806C74ADF2636385FEB16A34C890B524A75452EC096849EF0F905FFB38A0319D31A886DD840FE2FA66E16AC7C68B0D7FCC +168: EC67530458F01366BE95049FCFBF65465CEC9AD7D12332CF898DD72ED4D275F9C9EE96AD02603E8032F9B3B12615329CF0FEA564D278B1DC3B47EF304BF901B7 +169: 77BB3F5E58AF174DED0B31627648A1C7B5B8092C829020A6FE4CFD42CB51143E9DE20E3D827FB070DEDDA94D39BD0D330604DCB190E7252B12B03F48072B7E27 +170: CF33E5358E518807B70D6DCFBFB1CBAFBA7B2BDD20931B2A3B08BF8C6755367AB3BBB2FDCAE305F04812460FAD37E9AF70F1905D2F0D3E7628DD1FA453E5AE63 +171: 0739D32112107994BF3E6EC3A107AE3BDB9E2BBDA1D7C10D9AD6AE32952649007F68D28BA0DDD1F1C45F7128C1D3C42EBFDB1975A143A42949C7D97D9F9D3BA1 +172: A4F0B775988038E50429428C8526793AD8B6EC1F0F3AB7F6B33F716C61B7DFC49E254EAA01FFA422A31D30A8268E1BE99D385907479C7E2E0492681B6851DE1B +173: D2472E93989E1F29BE0DCF991A65BFE0E772CE77850A2F96FC6114EBCD78252DFC17712AF193FC5ECBA371B8FD27B0DAC44AFF6140923885F403904F1664AAD4 +174: 6696E09A153B0077D3586705E4A19FA6B3B2DD8621F5D13D7003017A0C569B7483C8CD9218ED1A252EB160C3620FE96A00E267DA0FA8996B417F64DD4A22153B +175: 2337E38B460CDDB026CB81B59B99572D45BCA4A43949440AA5C9F2502DBD8906453FEE23AC0AE47AB77214E52E7CF06ACE73DD8565BDD315F49A460996E08DE9 +176: 068CAEDFA329C1FB00BA02C80877E0E2B1CB6127FA2224BD14FAE5AD0AAE6FBAE052A145F5A8340B446F54AC9BB2108CF6582AFA0FADE91CD3568B604F68F470 +177: EBD69C96F4F2DB05350B74A475CA8C1FDC671B018A47072A11A8DC082C418EB20466720AF12E113C2D507F02596CB022D2BECC4EF8486CB54260020EB6C36481 +178: DB0770922005DE66FBC2B05B1F863ADA569B76DA9B8CA433C99C2F2B4AD60BD28B19A5B3820C0D8B6B2E443CF54A942B961E5EF1D53BAC4CA379964D701070D3 +179: D435D7240B8C6A6AABCB026EA53BB8DE58C5DB471EDD8173AE30C81BEFA9CCDE8E30758CBD7DED822410576115C2415D9DA7FD8A83CBEAE337E5908A012AE1E7 +180: 838AFEF97BBCFF7692C731D55442140D58CABFBE81BE76D41652106E215AF4E934691DC20F181C2123CF091B6D7552115F59937E165F1645CE0E14DEDB864B11 +181: 771815708A3D7BBE5E00FD677E4EB76B2B9A03A09412284A236401E7FCB19B340782C81D1A49371609DDCD7E38F9448FA657533D53280B3D6B492984E9C9CBC3 +182: 649EAB3244AEDAA18CF0A1FFF6619D63BBB66955C5D58E3A592E53F537FA74C60616B9E4483BCBB08AD7D1F5B6B91ED3176E89C03C224F94E5D3893FB6D01CFB +183: B4B6C653D90EDFEC3BEA0FE1FD766D5736DAFA184C360C8B036B7CC842E8C76BECFBAA7046AF087831E322FFC181073C19360A269851FF4DFFB4712E68560C3A +184: B0C0061EC50BBC67DA4765FEBD4033B8A204260177F9CFD451E97B93F19736D4B0B7478E29FBE76BE17AA6B0DFE9C4CB9C6E4734DCC8AA5EA825F101E5C9B02C +185: 54EB4D2C9B26B8B17818AD702E065407A19A711E22C8E66163E7311D8ECFA54448453890194C3EE892A599125AAFE1CB230C6EA268ED68ACD86DBBD17432352C +186: C049743F49D57D9226AFD26B94BFE9165BE5A8CEA9DCCD101F837F29C63A4201B1D4478EB5C4CE9D8F5D6E91BF89D09E6A0D918EE7A6D58CCD0A46D36963BCAB +187: F11AED8EC2B1C003B8E35F8F2A05861D9DD6B7DED02E28EFA4EDBB0BDA0DAA76EAD810CF1C78F50668D50DBE2AE65009C2E12504DFCE9F9BFA9A14969E1D0622 +188: 1CEB4106BC700F76F4825E6790959CC6EC85AD93D6FBB9783098E367E5C9676AA0D6B8CF9A7DCC67565284E71205551650557D556870B421273772524463245B +189: 9711275100A787D9678CEB38981A2246112C2FB1F0EEC1F844DF1703DE5B0FAD995FAC983526E7E3336B8CDC9DCE56FD66B73811201A2DA6783309AB6B9C0546 +190: 81E9DC0CBF71797104A44E72841FAF7F9CCF35C18EFEEF873450A25AE56564B0E9DA98598C527D5629EEF7F0571D9AD929BAB87A27539CE9898ABF4C57C9EBB5 +191: 28F4214D1C8C5B9291F2E1F7FCE732C3290A691432A65A01F7EAB1A313B83936DC98A3B39B5F7712DDEEB8968001C93A102C7FCFB8AD7D49B29661C9A9867109 +192: 78C7A025ADB85145CA8C6E417C4E68A9DB83FA78A23D0CC3DF20AD1409B936686FF756EB51BD8901157B1D031DE6848D97DC2E0F137BCA1D49EE3FB2D5A5E83F +193: E2C25FC61AFC794F65AA57DCCC4111D4B15331842493F93E9500AF01E2017CB226444E208BA9C841DF6D7ED28955B318511335F842AF3C2C0573227AFD790739 +194: 50D768C744CDD318B950986E305BF74B77396FDABCAF63AB786893B5F4104C2525F2F69905955A35234BD6BD85DB17B94AE7008F2E2C368E9639ABE8BAFEE4CA +195: C4F1BF6C56C494351A880172B9CBB59BB0D1A5955352E10A868D3C33BFEA0484EDF6ADDD009A20C8D7B59B7ABD5115D595B026CCA6442921038D9BE860C44CBE +196: C782CE6A141EF9E6CAA61853588B8C75B3A39CE191C161F43D7C5F88FB77BD5055B21F37D4A49D65CCDBD0E6BFD98193FC0092A34C21D5ED0CAA5F129D462073 +197: 1B2F68D7DC7563C286612B3D708AA725923FC9A2FEDCD4B1F1E2557CC70F3BF65944A2BAD9705303207B00F6DBCCE245C6E653C38EA0896DEF4150DA118A699E +198: C1248D0A6B75BEFFFD70EF17F2D0F3CE3628BCFB6A634C93E8F0ED97BBFDB48F6E5608511AD7091D7B062B795EBEDEC67696679EA092F7B84A64C99BB224D387 +199: 20A3D3F3676947173C7FB824B40069A202ED3A5637DB41C97ABFE9E7036D6C009BDDD5BFFF97FE80EBC40355A535D7D3A4B2FDC09B809D3BAE2DC31803413B27 +200: B85500CB777B14592A4562A26B13AF3F08CE74E03372D9622E29C1FB7988A86B8C00DDB2049C1395B43B17CD5C415A5AEDD71E05CC0980EB9520D4CAABBD6FDC +201: DB553A36A3EAABF7BE6FAF85DB96D3D0F207EA1E5B55DE589A116DB80C21AE5B1826A5FF3BB9D84C26A403A1E5C00BC7D2F6DE3F6A9661899D6D75373ED76B71 +202: 5580422E6393475B7C1F5010FA7F4395B969E190AEA056ECC88783A8B5FAB8ACF130DFF39DC0175E9BA8B63B4FABA7E4A36FC55FA1504468727086B2D26B5818 +203: 1CA3DD194E7BCA2591AD1B95D0CD4CF7938334C95A1EBE2C8C1A9B75E6A85F534C094E652248048923CBAB97CB1581E9A2D1AB8375C506159B724F74447A3201 +204: DC525D0EC1E62EA68C013470D77B61377398EDCA82A91C1C3E4D7E5D910A9D556B3AC810FB1457BDD70A18B063523C39BD806A2227C7E057CC6B018DDABFF73E +205: 2F0B9523725B27245D2A1B635DB5A3A3800099546ABFDD95C8E86C67C378D91E4711AD1927E90CC9B50A1A7BE3D60414E487E72445936FD0FA2BBF541F1394EC +206: AB6EB21BC802EB0854F61346F7BFCFFF738EA39829AB2785976D869830DBAC367D59D50C3873B960AC5185F3DBCEABD4E4E594C5C2916A8DC304207E887473C5 +207: 8E1C160A334D41F08918EC084BE12872DE79D00473D1B6ACADABD67E2A6827FB1DDDACAD9BFCF27430AA84F3F7A0D6CF2FFC91E7758F471F2739D51B60125D46 +208: C135532CFE84849FE9F40799E1F2CA05568868C0D44E6832A05C29ED17C5F6D0FB844485CBAE5E50A67F2319C30526DB444F4B45CDAE01A9D0542427731DC175 +209: B1FBEE68843D42FB558D1D9E0B759C168D6F84D07B2E90B646F45F1708B0D6AFF7BA8959EBB6AE4D5DF9A9951D139C81BBE602671CFDC618AA1EB63288DAD72D +210: DC11C3D993F59473F64F16F87D5F085E834306FC1C40D12CE7D6E44C59C31318C694282B0FE53B4B60E1E5DB546D930AB741A8DAAB8ED67C3D87E8E76B8C025C +211: 85BFAE07EEA80F939D52CB18C970C8ED9D4035B57391739C44D7973223C51344B9BE28C16EA29B35AF74A2F8F7581C766D61525DE5922A83A1BB600D97F7A3F2 +212: 26E52AFEE0F11DD79061EA3E4F97205729E6B61E50B69CC2894CABB08CFD3A10C41662CA6F6FEC9B5B80ACACBF968C5B75BB8CFA31D06C82D9CFE97F6E1F43FD +213: 74F18E92D85D9AE79BD62C4B8FFB2116DA8157E17A6927BE2B2D0D79CA101F7CAD6A25CD623C8756D49B9CBB903477B9CAC67734F84F0915ACA9025A9D5C6DD2 +214: A51B45BC09382F85334EA58CF7E7747457B517118042D53D773C66668CD6D5059B9997DB183B1C0F2900AC9949028D8F76DD8B7259149388FBF340834A3BF4FA +215: 59DC88A518FE44A7FD0F316BC8B5C865D370A8BC82533037C9872B24390F7969ECA530911463520218D00B415409AFA90A63F88EE729A252F1B747C414414091 +216: 146FBF362ACCEB8DF79A761285A0653484C38585817E26A7B8906FBBEAD70031160C7B924D3BD3A9ACE28A5712ED0E6E89CE4E71493B27F87BF73BF592D80600 +217: 74B6738B2F0904FD59F3A680CFBFE4E466FB5094037AA1942DB3A0017260D75AC5916E044CAC6BD0E25D176FDA267542B2C7EA201F7237E18B9D00723E98A239 +218: E821A4033FAF0FEFE525115109D0B836A22C287E3B157EC302768BEF7989AACE853218E5AF7DEE9F6E234AD50ABCC8A9658A0EE4D9FE050235341C94308D7A4D +219: C3EDD652D2F831B1C783CE1B8BB8CEF9453FC71F519A4800EC2362ECDBE9EC142F768185D55E322A32AF421DC84EF84615F7F3DBE6BC6E702B4BC8625CEB5BF3 +220: 6A3CA0B5A43EF42A1D6526C2F1507785248374C7D2602079A923C841F775A652724C29E788695B52387778CF2E2BBE2213B2FE212D729E3718D946238FF0E57E +221: C425148335AF813E36D072DC64C7EF6782D7DB981C5142B5D32D6D4338E06AC64363E86E88DF018968FD659DBF50A4B77BE2A02E71B243D65024B36CD71C1796 +222: B796D1F5AB11389EC7EC8DD4D1D5AAF17262C8522A4AACF454B44A7ED71E20F7028169F3164AABEE4C716B38271D72D7ACA3E54B30B9E05616AC51594995F61D +223: 113A56E96ED6F8613705B5CCA6CC4F2138204D7BC0C8965162597C1FD2F6E8143F57FF1160F4B482F7430536A349D20918064AAD2BB38A9D4403C16977B9616D +224: 9590A3BD7A0613381159E1E26342C150DD9B0A937855BF78FBF625648448B540158196A2855E7FCB967F22F5AE927D60E97D0C1C17A01E8D07284FF985F54B8A +225: 74B11968CC7CD925E21037DF011F1C93B2EC34C34A3224AA281ACE7D6F1B10F2A755DD6DDF33F1A4630123BC1CF875894FBD8D8B70AC05F8C3C1076E346A45B6 +226: 85A08D6993B7E5C014C3CA957D6B53EC1B8A5CEADD5060BBCC350915D3278F28E238425DA3A95AEF725A23B1BBD43E5D8832382BF76603F7E2E4FF711D540980 +227: BEFB08F621281473943AF153124256386570261916E5238FAFE44A72801D7C204A974B38696C102748CD1DF65BE3EA8C45A40021C28C7E4BB143800A3F38A93F +228: AFB97494318F31A4C6813246D125217242247D4EB6CF884B244E59655DF866B2820A8E1A7123DCCDE98ECBDF1F6125EC5B95A0D9F85F05CB09537B3FCFC2CF3D +229: E8C2E1D342E6503D77328A2C1336F95939B0E8855F75CFC61D4B03F4AF2305AB57C7DB383055A51E61AFB75494C222B01967BC74B4574B8208FC337E09E57075 +230: 0B396D0F15F49E60994DF4FB1E7E526A272A5B41FAB67EB8A41547CA6CE5B7F3FCE404B6A46BE79AAE37B4DF2C2EF68EAB71F39D5908760FB2124C7C83B0AAFA +231: FE86580438E8EE3459A62E73AF0E14F00F4F0FAD0447921FAEB2B77A0D8786784659B1F6D3044538300C759EBEF7066F9218F9386FF6C8099E6C71B5EC6B721B +232: C7E45B1737EBCA62C87A8F0C46F661BF7D3FC020C3B4B91988FC36C38BBC8DE05A22D4BF148F96D31115605D7B04D4CC8AB3F8738B652E933D76CD6966604CAE +233: 2C43F84381FB618512EDA0278FD382AABBA41FCF5546312DA565F4503CACB86B8A704B3B49C0C86B2207E4641F71FB5E72654B0AEE705C52ECB2E8FAF109FDF0 +234: ABC4EED8635DDFFD9900F5DF8C6246CAF12D8CD9333F38647255DCC52A20B6DE8D4109957CBCC2F48F52346579E008091628FD7CAFA092F2568828F424EABF26 +235: 14672F19BEEF8896F751B0BCF40FEED78A8093AA4DCB590D7AA588DDEB3170460381FDEF3CFB608D55F9E8A295A36DD64DE058C9EFF30B1D1F1A3671388B0AB8 +236: DB87424F975B03F925D8B99A1DD0967D2283E408B6B0155851DCFD53C0C00B05A42CFE14B10408E0F5985809813D35D7AA7C70C1A7BC852C7F254F0303103628 +237: 095D34066A6E202C896EF29F3481EFACBBFA622676F58E90FCD5A0591124E489BE3804AFA9BD3E4C92A9653EBE878A88B275BF9B5C8EF8EA0F01C89CF40E5FE0 +238: BB5BC80C718B85BB3C3DCE95D186711D5B90827B2097DE63C647E5B6C14B4766BF8EE8ED395103030F72ADF0C8992AE836086571908DB4A6258616EDB4BDA878 +239: 9A18D6DD0F97B7407DB0F17896DB2A2751B76C69B6F91E821A0DD717DFDEF630EEC1427C2D190C095DDB07601DC0EC8687B7411D735A9A6EF0EEB84A60948BAC +240: 60A614BC40A7DE580B6ADD05279A68DDCAE79EC3DDDD2C6FFF7B77BE9DD0260DA5241660982B77BA9C4B904075F39612F514BC86DF6F68E189FAE2C84A32CCE7 +241: 5CFCD44DECBE3D74708C620C70DA807C5AD58072F7558D950F519691FC96F98B760B02897C3A85F68EE37B2735931660106670C4DC7FA98EE2E18B6DED532A9F +242: AFBE6D9871AFFE6D201E2E61435703856424301ADD5152DC745D96D1BAA3ADD4C78F2D7C5057F1AE8B21FB91879562050C84144A2042AB2CD273025FA03839F5 +243: CE9C1B19D0E0FFD3085D28C5B2176A741A3034C1B76C54740AAC3470C1C8C6E77BA765AC4D6D90D4DAB0A89AFB17A8863A2917674F5A189A5CBF721C14F5D637 +244: F2F065927839C22DF56960845E27868BA8F272A464619EFFD9AEBAF1E40A72DDA81CFC67DEE13C351736C407F59DAE8EE6F2BDA17521CF66F10C73566B7DA891 +245: 24CD3AFA2218863437C5518021D1B96E0A80EBD14EBF2FA161A5E7032FD985BF71EA59DC5E35DEDE5EEE3098EAF6A16698F5BD5903C4ED218868D1E96E4B8096 +246: 1C6AC311730640FE427C1F23B60E817C25E1318109643A8AB51DA74995FFC3F156F098AEF97F37CD9746002DAD22FBED1A1F222511B92AB5F39DA9B53BD62AF2 +247: 37609371EB63AEF0CA6EACED8388D187203A88C379F24970434D87950C9B7DF9A68B618E9E83E3EB10376504F8FEE2505830EFE3FFBD23EFBE081325AA171482 +248: F0C06F6A2C7AC3F0EE428D7D1BA893E73D4D2F417999043BEFBB3CED51F95F7EA3CA882B9E8C1C973DD8A7F450CD60BB5A0B30D44A574E43E71D2533EFAEC6B5 +249: 3A9D1BD43CB3B7D3E9364F05987DF4CD99D573C036BF1337988751658EAF2896244DF5E4DD8984DD494709E587A75EA8AFF93681787AD738A95C5E98616115F6 +250: D42E2D57B36095F0CFE8F771A9B198C7B7E0433763341D35033F32D21C638CD948D8DBE75F533391347C440F208D17F20614309DBF1091DCA10801E16F5D03B5 +251: FBB964B7865A889433E99C4B61D3CD069DEB99E44673068771030EB1B8F1FD3B3ECAED1DCE8ADFA44F9A625472CD4D987EC7ED7FDA0DA912C8AFF5B20BED7F04 +252: 13F67CAD96C3304FF3C2E45D71A2D69301695516EA384F6001850A46A7F93CB74C5A4CBC1C56544166ABB6C9BBF90B9559320F5F75ABBBDE34C7B8B45C783BC1 +253: 78A609196BB40EEEBEBC04A8794C840A6F831680864D65FAAB093A499A3CF152EAC96865747ACA28392E9F102962C49247E0EDA424A345C4AC6F4B60CC3D2597 +254: F199515CF806EA25237EB93D658BEDC994E61EF70F5665CC2F230E7A40EADA14BFA00D56C1249F2E5C8920977A6C85017F8663BE9422762CF88487B76EE7EF9B +255: E8702ADD4B9034BCA0590FF897C10022C56D08FC4EEE0A43BA85E9E9C2086616B1BE7B6F928A3C53755506ED2D9D62DF5BA4A1862FBCDBA20683931A2244AFBE +256: 6E6A3CDE12F2CB3A42EC8A5D21B435C4DA4DF6CA7E41537D361D8169158287BF1D2241581DE07F88FE92F5AE4E96EB9C489FC3B258EA3842EA2D511CE883883E HMAC-rmd128 0: E9BF401EB338AE9ECE9F2DE9CC104A5C @@ -5977,268 +1603,6 @@ HMAC-rmd160 127: B107A8B0C7B68581969A0F6DB95DB2F790098F1D 128: AD090CC9A6B381C0B3D87035274FBC056012A4E6 -HMAC-rmd256 - 0: 59D94522E81F74D4C37E3C514CE2477617E7ED8CC7133305D285327765C89A0E - 1: 75980FB31DA5B955AB7EF6FAB481CED360AA322D71CDAA64179251A17CB0358E - 2: BFF0C3DA5DFBB29CC1313FAE9EE58C0E8FDD3E3A2EE3FB374CFFA9E498787CB5 - 3: E98081F243E53171F2C9562ADF1E53D1F322C8D76CC7086F90F9CE0AF9E319DA - 4: A60C1EF331862AAA1F47D6A6377696AAEF2828465D18019FC582B6110073FB0C - 5: 491B655A0FD121CD87F950AFCA83C3DED05DF39E747372E4B9C5271552D4DCA7 - 6: 7FA04715742FFE61A4ED085A21A1BA9A63E17D3E33E2D8006E6C4BF4D9BB9EC2 - 7: 6398A004C0F89F0A52D4180C49DD394B6BD37FBF3CB259DB5C450192DA639DBE - 8: 93BEBF56DAD2FF3ABF415541A809FF7DAC28040E4F656AC2B14298DC66ED04DF - 9: 676A915B47F3DB14B35F405940A11AC1CADE15CAE594A40F0F9A29E7C92AE9B5 - 10: 51C880C47FDE7D78D5523F950C2EE332C0CBE566C95A407222A3A01A982D13F5 - 11: 5593F9026A907782C798DFE13F7E573A2DB5DE41522A0475396CFC07DFC8EBD6 - 12: 38332F721A408B59D5B9A85637281A96FC0C7AE266393C09BAF5541955F47AAB - 13: 22BFC946B9671CEAD2C66C1C478067623119E300AAFD0E142D7DF0A259A617FE - 14: 24035649A8956EBA507AB486C1BBB1F1398D1D876EA2686ABA27BA547F7A4435 - 15: 5DDE881A48F95FB52D1FD5EE45ABF2B25B80891C4D036342DEF2122FC0746775 - 16: 6DD359B22FD77402923F8E92B1D2E9B119D8A894834CDC13DC966F45A906A0EF - 17: E2F50D31A720D286DEAA3E598051B205CFD623A80EBB4CB6042B8A610E9CCB5A - 18: C4E50900A180457BF1C6E75F414688480B634B52646527FAE04088883D7FFDD4 - 19: F1EFD15C461DBA0C4B417C7C09E4D56612917611684094BF5F61A945ECE5E0C0 - 20: 3CB5B196F02A9537BA5808FA7EB151596F0992741F637AFC28AA4B4AD2E52B7A - 21: 6BA6B2F421EA4192ABEB66C8A38354014431EA15D0BDD20F83DBC491E13539AC - 22: 922B2DF01EA6C2ACE9BA72E7FBE2AD77760F0DC33ACE013585D1FD5372BD0142 - 23: 04C6EA875E83A76BDE1A324C593CC17548B142051A8E266E55F6FFCB5D7B2ED9 - 24: 34CA6F4642FE68DEB9A3EB9A301F8CB401A486AAA5A0A1099664B60168DC805D - 25: 6176A9B45D37B3A4F919D4393CFAA20D289A011261D6B43A171D739248E6E4B8 - 26: 8A6DB176856A5F056CC519BCE162E0B64530BA97948FF91F364DF1F761372545 - 27: 8E3844CF5864EF0B8C417597EB761D5D9DEF6F1784AC88E6A52C4FFCC7A06DCB - 28: FBE4E41F7C1746FEADD678FD8C456116CC2FE7F41B24D8005E6699C99B8C95C6 - 29: 0FF3C4A9932270DC01A218B4D5EBE0EAC1189830CE0AAAC7FC1EF67C7E3725C1 - 30: 11B971796B7DCDD1F9E3D4641223B44F411C63288C1F85416D36632D0C25E792 - 31: 483736D5568DA459557B8384CC21C59FDAF4489F51E7A816F6E4ADC3D7331EA4 - 32: AA78DB7F399A3326F62A7AF0EC199A4CF1B6CE52B608FBBFC2584CABF8E46701 - 33: 15F3DCBDF7C97406C479D71FD2798C14C6892A1BA7B7C5EDD83D7CA52D14A4A3 - 34: 34E93739BCA8932A7CCB757C023ABE537F537449D278C8106746A737563CC4CA - 35: A9388CB84641DA774B18429786542D4DF82335832F942500260A51C2BB90D4EE - 36: 5E569935BAF5DB6C44092A5D4870DD9C69484510443683A5B590F7AD02D26F77 - 37: 3C55225603F73D1A135D2143286A239C38F94659D0E28A53DFB097E131298855 - 38: 4B7A827E471A17844360BD522CFD4455F47AF5CD63FE575DC1559E6E0C814D66 - 39: 00DA43B21187235560EE862252E2C7497E93192A51B430D2ED9F604D2905FE6D - 40: 509E9AA816CCB27C4754F90321A9E09F967BB93E8E4205616E7F972F7950FCBC - 41: 643DA409BAB43312B22B6A56D529B0C665DE4688565A3F01FE4157E060315645 - 42: 25FAA6FA3896C1BADEC9FDCA8FCCB33AFD9B9A8653CAC3C3F5135D5B5043FCC0 - 43: C6E25EE5372792571917815AA36D7FDE94DB57DBA3AB6876E1F887E33D298AFA - 44: AB3DDFD7E4EA3F200633AEE0B187AB99E8795B50077B589FE531D0CBCEBB33C6 - 45: 4B495DE93E9531F6EAD6BD4AE86BE1DCB0BE281297EC093D470FE0BE5EB26BF7 - 46: 3CF453F7D39D4AAF5B492117CCBAFE34226B377923A6E7634BCBE4DF9C0AEC38 - 47: 7C3DEF494B0BE7E4C5ACBC50AC970BD39757C0D4207767E89528BBA7F3CB69C4 - 48: A5976310EC943895C4A87C6EC1250F370470271A67980A9B604DD1FF6A7C4087 - 49: 21447E7DCF689F222AB2BC32D10791CFCA3A2F56FAD95270E68062F68DDB2864 - 50: 150B6DFF8E507BCF77057F8691AB415EABE640C3E3FDD1DD1E6C1E8C83ABC766 - 51: 1D39B1B97F6B39D084B0F0A6F6596D981BE9B6CAED9E0D49C288C99895953AAA - 52: 33343026C17653A14110FC9327CEE22BA1851D8DEDFEBA4DDECF776ABB275BB0 - 53: D1C7141769B2B1F5B822DA545AC3690E309E496C8DDAEB9263FC703F43A8CEC2 - 54: 296903ED4C460C34EF5AF4DC27BAFC3CE27E0B737DF3654ED1E2F55205AD54A5 - 55: DDEC62CCCAEC19389F4B06813E8079CBE26BDC17548D61EE6A3B066A929D3227 - 56: 2311552BEBC2A60BB449326AF743EEE659F4208459880E4070BBD9DB52C2DA27 - 57: 2CA872DC8158C404FB906F14082AD79F00B4C9344ABDDF214AE8819D3D66138A - 58: 9A722F58F6F78A51DACD98FD80E339CB31F80A2A52821F3BBE3EC99CD3DCB8D3 - 59: C37F6C6838DB764C27679C1A6F9CD95CB3A8527AEE7D7A92E7B5CEFF7F6AB0DD - 60: 553C9F658CBE292BDEC762F92E931F7B0E29EFEF2089A598B251BA9CACAA9DF0 - 61: EFC42E9A5DF177057708A364A996EA959211228B1E10C814960C5BAE25AC79CA - 62: 64B282D748E22535180011D1E18817073BF2735ABE2DB39DAE23DB1DF40F1900 - 63: 993222620F8ABE4B5285EE4B75F5F6970B9D1B5DCFE758A57650CAA413299D62 - 64: BA9A74F29B76CEA63D4535E5AF807B1D8A8FBD105B9A6D6ADD424193B0B033C2 - 65: 621EF37F2FCFE2AC7363224B28871D2F28431D1621353AB07E18DDE5EF482ED6 - 66: B2CF89D5896A1A754E2BFA2A313D2F2FEF4FA871D5424090108F5E2C92DCC489 - 67: F591B64DCE89C0E785EF9BC286D6D7C9D34EC413110DD6B7A7A55D6C9F11ABEE - 68: 5A5037CEE64C29FFCBE51C0F9A4F1A9B8F5BF3B96844F66FFC6E91EAC6ED4196 - 69: A5CD484B9FEB758550A2AD0606439A5497845A65D409EA6EB013581B7399B83C - 70: A467C992FE57B26E79B2797BBF1B8AF1B823967C78D34C4B87DC5B73635CFDB4 - 71: ACAFC2F7508FA9480740B82A1559EA9920C620E1F13885D7B20F4E0A07D24DA0 - 72: 542150A182052AD17AE6750A7F65A1CB30CC1CA0E2828B5AF578FC7D94176808 - 73: 2DBAEC413AD340511269F2E5D875AD94E416FE4F8E207E8CA9A9AF3A9B7CE37D - 74: A0A8C9BD72C37C79DDE4158812ECBE8C967A95DC24E90492C2F69311E93C224A - 75: 0A8A77A972DD2E6D4456478877E6B79C39EAB34D353C0CC61C28B2802B81767B - 76: B602FA82C2B8D5CD187CDB4F35979D2E5D62BA25F34ADEC877A647259C870DAF - 77: BD9C07ACEF9235F011E6A73B3A15778B3B94CCAC18D2656239588C666ACF9D49 - 78: 53BBC0CE653A0C9A1D0CC9050B04C7D9988E009BDE2A68DC7A4B463F09BBF7F6 - 79: 0AA89E39EE1F29F5AA38BED023DE510DDA2F647A166ABD42E4B457BB7C850A59 - 80: 66D14665A97D848892318A7353A931464731AABAF79BFABA31C7A376A377C259 - 81: BD5F75E35938B891C9E049DC8A24C8E20920AE8703C2D65541C67C469DB9CE31 - 82: DCD90C771CD1586F58A9C3B0CAE4031B1827CDBBF8F8BA1E6BF4428F60A8439B - 83: 3DA4EC80ED0DC078AA082332F9258638D80D806453ADE1E5065FFCCD929B5C0C - 84: B6601F93B52F406FEC2ABA78D67DBD464499D255DB3FAC26923E80916B633D33 - 85: E83A6830308DBB72FCBE0936409C6BF556937A3A19D45BDF1EA61F8E4FD88A28 - 86: C06C09A0C727566B81D8858A489F23386DB036E67383DAEDB4F07973779B8BF6 - 87: 973271C0A71C38D1059A2E67D8F01D88C3DA8857A130E8F8537CBA7FB123540E - 88: A394A56C69C8B02F18F62FE7B6D7771B14CDF962B871BBA164811519E11850DB - 89: 3EC44F2894C6170D0995AEBFC43D182F7C4F45A39EC9CE28FC8032DC3AAAA7C7 - 90: 186EAC056FABC2F88F2AD2152A30994DC3CAB6C90545CA662B7FF59F57E73EA8 - 91: 03B9DAA373AA3C9BEF969C64DD0A54A512AAE317385E956F8C14A078201F9C69 - 92: 46EEA803CD185BBFF9A621176EA362A89D9BA277B5845703FCA216A3D09F7CDA - 93: EA58A619E011F8FB240F7949B3BD72A4D74DDDDD39848A1F8721C7D7F72F77FE - 94: 3D21A5B4EE13A362D4191D7126D62290F516DDF8D5A0F10BD130BE19A0808F25 - 95: 4C7444891287880768F84925F262EA12A01C659B635ECFCA3FD91C6EE36E0838 - 96: 27EA80057F0101DEF3355C97864AC92449DECFCC49EB4082174106B91CFC027F - 97: 9268A7E69417810E40B589A92899FD38818C0A1C95C45FA211A3AF03F155C09A - 98: 1E48B801D8107593C2BF886EBDDD19EF03DA463C2C0BB3F517530B025115A710 - 99: DE025B408B848ABE14FEF508D2F9DA921B8E9168BADB3B09B104B2426BA2DD36 -100: 42854A2F179C5A23B8347210C027E87E2943438220A6EC50AED23848D5AB8B21 -101: 265527373FD4F600EA78CE9D7B4D11E5168B7A10D091D827495F0D58572D36D5 -102: 64DE6A36BBCB296C7D216F8D003E206B5A612AC919B4255DD2D63AE65EB7F024 -103: B3FBB1442BBE6178079BC275F7FA9805C52734B90901834EF98536F22F80926F -104: 92A8C765207FE0DCA22D251A7570642A28F0BD5502311352F6E9A9CA75BD2AC6 -105: EBB7E317B38BA41012B872342610FBC1EA6DB09409A46C64C61F3677A5B78F25 -106: B43AA7CDBD939977AB7C8FED49E40D9AAC21CEB98049F316CCC7DC04893B6199 -107: C07639CF7817F04B7728AF815E04BA0C331E79CDD7B292DE7C4AF1ADF90DC636 -108: 134AE721E2094F9E4FA953B53A680D61603CB9963C20930DA027D0AF0E4FAD9F -109: 128A649C96B60203F0EC2C3A996628702F776763CDB22877E7B0B907729AC848 -110: BBCE42FDCF9A8D8D04D1EF37CBE4F9042A5691F429FC6C39C2755D060009E2BE -111: 3AF2C22079E6E52FA0BDE3B80F57FB0D1550DEEB2AB369F5D02D8C432D8CCFFB -112: A84361A8796B82E8E2B30A2D933A45011090180C07D42BBCC9E72395EF7EB140 -113: 89C12CE213A67AD8661A720749A61550CB059B885D22CB4177663420624E4D71 -114: 2F22F53A1D44F6B867A7C6417525A914E05C50996F64542FFBF37D8AE4807E19 -115: DE5A4C424E20D3C318EDE55409E1C85464F8D7D003F9E35E5B7B5A768C79AE3D -116: 9E87ECD7C672F00B59FF568B8AA9FD56539E46EEDDE94436083AB6DEB83AA199 -117: E12433F1D81F60189C50FDCE7FD53D0C819DB533A5EADD0F1E1FD521E4BB3B42 -118: 4C7CDB3FB90E745D83FA08D726AA2F7E2E31B2A501C9E7BB47CA8163DA5FF74B -119: DAAE1C5FE8CAAC347D7B054D3D9F9EC7C4D454D5E119E014EB0298978385ABE8 -120: E4BCE53EB683B770AB162A3AD630E3A7A689DB1DD27AD3877C7994DE337FDD83 -121: 410EAEC6033749B341FDB60305174E7F462315AAC28FBE05EBEA2A2A03A34EA7 -122: 3AFF9691776D8C1CE721E03EB46A3DCDED894F3624CD992778DBB91F148E6E97 -123: E10A1376446F2906B28922CA87427246B6F04CF15F4700A13CF6C487E14875D7 -124: 72ED1CE89A1BC850EDB6CCFA7551B09CCD5707CB3C0DA787FEEC08DACF35EBF8 -125: 2F2BA57B7232266F6E673866EEDC6CA1D07BC00F20D0145D59D121508233ED90 -126: 051374EBC0F6BE3AC550E7B7EC8903972EA87762479A5C112D80BF0E3843AB9E -127: 75BEC020ABA76ECAB07C5B4A8BE94DA2A42958AAE79D3E2799CF1D748724AF3D -128: 774E9572A3D3C3F96BB90D2FB91941B34AEAEB5548AE9F6CE41A63EE8F0553B5 - -HMAC-rmd320 - 0: 6BB314BEC5001997F31DE90C60F79399239D990B45372225929B434D5B696EC48F6EC2C4735F372A - 1: 798E82821DBBFD7B34F53B8407C1330E7CA0CBB66C99CCD513E0DD5A08AA0D380D16A78ADB0271BF - 2: E4D7BC694B251914E631112D6CEA4B29271B83109D7E8DA8E03A92A49A9F055A017FD30EEE186FF4 - 3: 2D947F3147ED5A68480D0A565CCBFB1DA181B04B7FB3BFC8A74275D235BDD9A1BCB465CC54460D64 - 4: B79D315D272E933DB98666C192F860A20B8471D449A4745489EED72617163A1E8F727F56F876889A - 5: A417489F3F98D5D8A408B7789D2F8457110E0AB95358C27CD9C81D7774F31952F1B4BACB26F5374F - 6: 7BB776ED9A6022839A3037FB70741D9406B3C50ED0BA73F9E762561E398C67C6B45975B0DE85B5EC - 7: 7E375E18F2F29FE221B262D1E8A0726748CD1E199257186A896E0A7B1E0FFD75AE5357104A179088 - 8: 60BD273642B504D1F31E7C5C3A6D6ACA22C7ABAC992E51595588F116B87DB81331185195F34C99BB - 9: 4EDDD02A8CF75B93C07A1FA732AF3DE3027FEE6BDD8564A03222269AD2C2FA327FDF7D59D8AD5856 - 10: 1AE3C26098F28EC4D5A3440B35CA1A45A104606DF34B98D15E8BBF95A6BAEC4C9723292DE1EA5834 - 11: 589D63167C20AD3DEB5766F7EE04B164F23DDC49F7B4A2F1C9892CB50AABD7998F22A0002012B719 - 12: 8A465B4BA95E864304D58D9693156FCE2452FF5F51D13862FF73D021E42D49B86AAE2AAE4D767468 - 13: 93FDF311E9A19571F56C729C9927EB26426B2A5451F6992918A9D2089AD1F77E08140DAFB20A88BC - 14: 761DB9147A2B72C9EA422164DC50945CFBC32BF1A04901CA19FB5E2A5FA564CC3FAD559FC0E3FD03 - 15: F1DDE31A584036312AF2EDCC7D0D03D25884C4A2BF681D2CBEF82CE669F826DCA47DEBA37558B83C - 16: 39E5ECBA876455DAA4A3D40488F0AAF07AF70B17600E79070FF95E208CB4F951D33550461EB613F6 - 17: CA1A452109245FB116C6266FF690AC37DA25CD57CD0E2E75F1A8B5547781860FA7E73FFEF75DF136 - 18: 94A5EF723D68468030C880B61BDBC7255F69B507D0CDB6B2FB21BDEE95D6B7C0A957922875FBE848 - 19: E041DDB6B8AF59697C14AF917CDF6B58C22F056D09F975408714E279ED203533D027B3562FF038F5 - 20: DC76B8F8C10BC843BB72E2A81A13EC96B40AC4922B3E18EC6DA326D8B3B88D5363F14B8181296023 - 21: 81E86006B92EB73887118394828F35923E5BB8A56D78A90BA69A157B6C1CEFFDDB5D0AA37477520D - 22: 67F975C805364CC898C90A4B080D2A99CDBAB174E572900A1B16AE3B0D6371247C81A216F295803D - 23: 4B60A0A089776065C394553B0A656577E28C7C8A3B91CFBD8A77382FD6ED9878C1ACB44E8407DB1F - 24: D042070EEC507747301CC94F3946C20B06E2393E9E390B22A219618A916435F441010FA41DD928D7 - 25: 085C7DF0D8EF339C86362BA78D9E57BE4FDE0391075E4279271355E14E3001953D3A3514D551F269 - 26: FCC923DACCB76AEFB583A4DE84C494AF5116A39CC14ADC7355EC42AA4349928C906CD205F56DF3CB - 27: F544AA58C8216300BEFD81DD33B583082C10EB4E7C50DE319330359835BC0F25646CDB413D64A668 - 28: B90B4C339ED9C060BFDA64C34435E47B7C35F8DCB2F1B3330C40D7DFD10A01FF23E37DA2B995C7FE - 29: 085C91FE6DA876348A67857D87A28759262015BF4F5ABD44CF24FA1392F12D34DF61110317945D6A - 30: AB770E7FB347BAA164C66A2CE4D884554E23DDA0B51C75C7E1EB277AC0771757C7EA27EDC0D769F3 - 31: 2D0DA3F543CF787F01F52BCF02A534032E536444253F50B5553EC959D73E111B592E48628F9C255E - 32: 7FADB0E3D3053BDD762EDA1876471BC98E0E7CD50BB72F05FDFB5BE7D9703CE2909060159B4E48C2 - 33: 8BAAD87A1D5E786B57BC03B50F93ADD6C470BF113A4D6019E59AE9EC8CE0616F0D9C5145A3A2550E - 34: 885B843E252E320D55CCE929CA160DB74E5FE3221385CE6DAD3138648BBB2B593153468570675C2F - 35: 0D0592EADC5E67CCF74CC21C7277C1212DB2ACF02FB3A508C77E1A2DD58B77F195BDA70DC5E29DAB - 36: 4798AB6C9B0840B17B12E20F3212DC92655F365905A563B1027C6699A745D6E063491CB9D7F4A571 - 37: 20318E2FED8E7885005DAC59811AEECF1E1BDB2DBA9C14599903AA484C033C9E54EAFFE042E9C0FE - 38: B01B287BA0808277512D8FB2461AC19A9093C497543B58757946B0873C0C5FD2D144A3E70D9DA1D6 - 39: 267A806596127FD0175E96BF26704F07C220014AB64D430BB379B315B953CB46D5136D2E6D1F52E3 - 40: AB4230A4D10BDA68F3B66FD95B151367DD5D3CB2179FAD56B857BB16AFCAAE72FCAF0D5032A4656E - 41: 029490B3A1D5B12A9C500B30DFF6BE09A85F232681E9F90FAE22341FED751141D15427C428FF8B27 - 42: 1EED80F1774A580A4D5E3BED52FB8C0C8E5AD1E3EF242F0C4050AA10A269B010A4E48DD9CFE49099 - 43: F85C413166FAF8F0093DB7D3933A2292DE0F33BCFCD3A98EC32BD8E9DB53B0FC524603AAD42F0D64 - 44: 4A38A4345E6308ECB0151B09B53EC23E0759353AE0ACE5D64074F3C8230E712CDD2EE5DDCEC2BF6A - 45: 269621A01A6529C8907A8087D404A93511F41EA3B9FCC29B2009F2225F19A56345B54B2D75D534EB - 46: F1A6B2F6C73293AD7B96A34A9A05D0BB2A2B0CD00F35318AFA0CFCC0DEFEAA7991B250C153A8FA31 - 47: 7C70C8A59BE27854F6A10423DB923AEFB1ECAF1EC79C7A27DBE7D21D7A799B16E8518B457968F727 - 48: 78432BA93CE7919435DF8BBF67D38CA0B593958A78F9CC9D62251C21D7C887AF610D4F6C6CE184C0 - 49: 30879619A02379E089099887B60C62919A8466669B18669CA4C15DE6B2FCD86C26AC9AE81B46DD8F - 50: 79E029F4F43548FE2812B40EC820B8976BB4B8E28847B2BB6B4E7A8D2B1C88E3A8068071526C551B - 51: 171D1DB475617F58229CE6F1C47E3DA6089712EA53FCF083EC3FCBA5082CA4127FE5459311C791B4 - 52: 0BDE5B4882677F6A9FA7649FE011EBED390BBC3E97234A5584161D529388E624E7640F7CF58C9DC1 - 53: 06229FBC2766AF708181DE0EA6AFAED25FDFDC72569CB7B40A83FA7A762E24A4CC9A37CAD39A4BF3 - 54: 1D1ACA8D58D2AFA6AD8A255E8207318B72EDEF9A90CFB6AA6E26EB0265D3F26B6446DECA46BAFE1B - 55: 6D11997DBBBC11DE6911FAA890223D0E7A8C715405F39295A0E07E2E34327AF22950E20232DE1FC1 - 56: F8867E791006CEE84BDF1B8D2C2B697AA7065209D38B3F60011EA83A2F9C770F21EA57698059DF88 - 57: B06A67F93CB85A2D65FD549EECA5E13299B209E077CA5DBDA6E7D3027A4AC1DB58CE2EA131849C2C - 58: AB600BD8835C2F98C1AE73D52F2C188AA2F2BB33DAB1114843D414C202516287E7C3E023B7CC5CD9 - 59: E3117F1AF08AB8690D112D8C53A683CF8117D9ED594AEE69E54447D5DE852EFF0EF0D71C5BD22900 - 60: 424D992BAFDA125B094064336CE620F8F9C8154185580019A1B581E5187C1058B6A61A65F2FFDE92 - 61: 58BB0D6634024C18BFA08A45C5382E6151A26EECFC8D8B16A4440E32055E9249F5B2829D972A2C35 - 62: 219085E65E688663849B415B335BB7628B1EA4EB04AECEB41A9F09C59A5D1BB737BF1D899A9F7A7B - 63: 98D900253BB8EF2D886B5C71F5B2AE5229FB68818BF58FDFAF75191DD9942D15738EDDC975B4034A - 64: 7032D6661227095A6A7E6B5F1AC45675FB2F0347A8597A58B715C99CD2441E2857A32E1017C1C7D8 - 65: C6DE00BD52E2FE7DAEFAB1E3410556AAD23D5FB43C86105BD928C2FC68405EDC5AB2A74A17C9C32A - 66: C50B407AE3D9FABF9E185881B89F94638B067EFAECDDE349A5024217BF6A00B48AFFC85736CAC75C - 67: 9A4D2FEDC6F9BC6C322E2CDE21605CD9D8CCF1B87FE27B1361E1916EC443077B6DC751F2CF677682 - 68: 224A1604745BE2D9E451CF3A90831EBFC3167E8D581CBA8FFA37A3A65363FA8399D72974730EF213 - 69: 19E7D976BE38FE1A3A9842C0A453BCB79242A5E0CB7514BF23942606278993EA31C31D6EE422AD98 - 70: 8514F6461280FE7EBBE1ECCDF08CCC1238CF0A2F0D248987D52C9565FAB8DC359217DC27AAF33038 - 71: 73CAD4AC2B14B27F35F65876DEDDC68837743DE3D7DA16EE546D166EDFCAAF0CFAD4313A4ED3BE20 - 72: 4B394CA698A8BBA23C9058BE76E41B9EBBDC199B1F586A0C0D2823E954C1C0AD393B8175D1043987 - 73: A104492FAD9FEC60F46EC4CDB8A76548254F60EF8F527D642DF4C8FCD0657D593A2EA0D68B491929 - 74: 95DBD131492620169B931F3380CE81CA21B8B7A24FFDE14BEB138EF37E3E82682F7C43C28CE69FA8 - 75: 2118E9456D6FFB475BAB84A45A77E1146DCC29EAE15BE88D282A9FB6D8C0D276FB46145367F578C5 - 76: EF61D525B9F715071307E135259E5BA8E19ABF8BF7E7025BD2180B263E1BC9C805FDE5013BD04278 - 77: 98B374C8CB3EF9FAB79E5C1442B210AD11B294C7904E2A48CFC3B71065CE6124D8FAD2C6A59167B1 - 78: C4238927DFF50B42A232D5FCD5B6C3937F2DFB2172A5C8830CAED90F0F3F7A3E9AEC16BDF6250ABB - 79: 85116B15837AFF5C066124B962FDEE740271D5B78C13D7B26070920BBD6C6F86F8068F5751C376B5 - 80: 9C10D8274E4C24E39F755BD9A8932DA00FC07855ECA01A1443D915221C1ACCF669EF5B59030C32E0 - 81: 8DA2CC33EA181D2DC917AB2A83C91EF35748A8DFE4CC49813B79A57A1C3DB777E9FB544EE9A97F12 - 82: 3D97C075746C74D2EE5DFBDBBEFED73D5C0F45D533D41EA71014604D066F11543F3ADBBB0F5914BC - 83: 9CDDB4D0A43995EEEB7E3BE7C8F6B00F89CEBB82FD29684AC53588FF463DB62BB7B3364D43BC55A0 - 84: 8AD4FE46CFD443AC7CF50EE17B59EEB31356CC286E6FA58943884942B8C72A21F47DEF8DC6570B21 - 85: 7BF233C1100766FA2C2E4DFA60634720E48DF93D0A309CB91E2827EB375E2DE6714BBE6D5400B100 - 86: 6FC30072CE402DA07F48CBFB6666E4332CDE4E91A9D2703BEC137337E1BA573E3FD11C662F022A70 - 87: BBFB1B50F80FD8FF1F0AC361FC7D18F798D162B09538E8954EC5F976C2021757FC377534E83A96F3 - 88: 0CBA5096A62AFA90AABB8C96CE685E38A556BD3BA605E128B3A38CE4573F182B9C3687362EB9B624 - 89: E8899744EA6EBC9D4E7219CB44AFD8338773848129058DE95F0845C9A8A80B8B2FDC281B2415F492 - 90: 97CF03B2F452319AF31F703EAA3D35EC25C4AF324526ADCAAD9C2994B8EE53C710FF2526B34FA1E2 - 91: 3F471E6848B2D18A6BC714F18C28A306CB0AF5BD4CFE60CD02F59D9587F9127DB68170A11E1119D0 - 92: CB39FF820CBAE0A0B633FA81CC0D57E88AF717AC7C86D3908052E8BE9EDAA546661A88ED8DEB2EE7 - 93: B675B7B8E056F246FE9B8258CCB96C0BAFF1E6F4EEF43003EB6463FD027B9EBDB4875B56022ADB3A - 94: B94A823E0C2A1C4317F81239A5D8BD59BC995EF5D69AA1BF402BED31A7FDCA92F54C2F7BF43429E6 - 95: F066FFC74CFF306E79226BFE333B518745D93F770620BCFE0CDF901317810EDC70E112C7E88BD815 - 96: A9E94157D8D4761A70C5F6FD1D0455785A4A9A110F935765B8ACD2831177305B04556B17D12D01F3 - 97: EB5E300BE6D90DF92E0BC094202485AF4EB26CE0B8DB98D3044F76D47ED312454F20AE14FB68C12B - 98: F9C8B99A97F9987B64816CA6CC00203D186CAD4AC2C3661C114242BCDE403BB3F3E7A706515DFAB6 - 99: C9970011DFF67A72D5FF5E0F60218D2E98F35030DBE72D435FF1F9159C78C7544E07EFE655593854 -100: 17C3BA5BA65214182BBC95BB8D4E07D02EB7A37DF36DAE715EC6FB8D3D4690EC8BD02A7A57E8AB19 -101: A7227681F0D673E7126CD8253A7378002FA25E5392A9E24579F3767AB35D4C8831B9209142E6E776 -102: 8D28CF4BDF88665DD6BC35D7E9535341822298C1CC62E9733668B471CE5FF2ACFA19DB59D089AC43 -103: F8E1AAF0F8D39E35C8C84D89751D79296DBCCB7B3FCBA5CB56DB2392E9F10ABA6218BEE5A9F174FD -104: 4111B0C5067C81391C32E3E8BD91408A88C3C6C793B60688180ECAD3D7141C477BEE20D1E3D2EC90 -105: DBC4B2C5E17CA81888B674C7420955827A415C840FB23EE559A49667081555429C16FB5CCD86552F -106: EE4FC2FBC4F9C83E2C7E953B4A886EB5F8DEEBE999A9C2BACF2BDB06C667B9DD85AEBA24A6C8F0C4 -107: FE6E3C557695182C187DD32E72DCD9026E234C9DC4AD5839D586633B207F9D4B2C8547A48D93B929 -108: 51354C2EDB9BE21E6CC36740846D68E46E7E7C4F760A8F9AA05D5C4A949A87EF23D710E2BF3FA87A -109: 134A2795887A51348B9506790B97DC5670AAA2AD8F9A41AB6AB03CBE4C5BAEFFA4B643EDFD2E0181 -110: 6A31F6F9BEAEFEF32C5BDF790423699FCB7B2D819A24BE4FE3F54AD95F7A41F1FCB0B79AF0A5EBCA -111: 234236F8CD036E05CA2B6852350B819447E3F983F20879E94FFEF7AE6D28EFB984B67F6E0A4ED39E -112: F152513EA12A563C4076A2458F661A19945664852936C68FDC3385DD11141405581FF0C097C58023 -113: 7A81F710EA1DCAB08636B33CE8C8B960902F32CB278A142385D4BCAE50F636AEB24A83FE9DB13361 -114: DFC9843B0614466312DC05C5834A1A8EBA0C95A2525E780ABADFF7232BF283FB0B71DB29F6061E59 -115: 6C11CEA5DCD9CA78955B65F3382115922D0A43D4DE81BA38C3A57D652A7F94CD521E65585B19C147 -116: 58D2C0B7F570BB389C196895FB966B74CDBD52DA42F11D11003C2D37B44E188003A4EC5A43E53C1C -117: 46149B68DCC3BC2CCDF7793022EFDFA7AF4FDDC23EFC067201D04841E2A7B9B682B60C4E5884C706 -118: D41A6E7699735ECC2FC0024CE6B3A61B06451A8998238C7F9797BEA77D80C3A435D5F6F940DF08DB -119: 23E219B422EFF356426CD7B4D175F8FD3E52310C09949157F404FB62EB37A139CA1E074BE140ECBD -120: 490D9B7A0D2CA906A329559958538B1DBE8DA8BEF33F943F79C8F2ED79126918664268A7AD48B6E6 -121: 6AD73A16893954259ECA9913AC83B80DB1815B7037438C6D885321531B97C40AB6DACC25155FE05E -122: 2760B5EECD5D7E53366CF55E7F4A19BA06FE50BD2DD03B78D0160162C24916960615AC25918DC030 -123: C751EB15AFA4119BFE84FF425BD38108257DDCC50AAC93DBA73C4051D6243A50D02BE0F3B930422C -124: F6C5CDA89B7111614B439578B9650EA676DBC9C67AB5197998F195320AA6EAEA80C97DA35ACB79E4 -125: 9B63CC8479312BC44FBEF8B39A7B73B30E19303EC352488DB3ECED0EAE7A0E64D0E013DDEAB7D97F -126: 3C2FA4A747A64F5DE9461C04A30BF2C56145A90964C65B1F3B25AA6A360734291ACC10A4B20EC283 -127: 74519D4C3430C954CF68C916BE147CEF18B8AEB730BF6F9E01EC3E3254D20F37C01E8AA30A2242E1 -128: ED76E76F98E7BE04796DE0797E60C6E0659A274C7A9804358FE40804E2BC68D88E60ADC29D40592F - HMAC-whirlpool 0: 5C36BE24B458FD3713761955F28353E433B1B818C8EF90F5B7582E249ED0F8C7C518ECF713410885E3FA2B1987B5DEE0FBAC210A007DA0FE995717F8FEA98995 1: 30C66EA7CE95764F4CFCFBBE4C166E80A1F23E8C88D2DB7FAC118BCA9EE28299778610D94CD545C18C114A2A144F9E933CD80238E9F1AC737F7149BA232FB846 @@ -6370,597 +1734,3 @@ HMAC-whirlpool 127: 1D8B2525E519A3FF8BDAAF31E80EE695F5914B78E7DAB801729B5D84C3A7A2B36A33803F5E0723981CF8A9586EC1BEABC58154EFD919AFF08935FBD756327AAB 128: 4AABF1C3F24C20FFAA61D6106E32EF1BB7CDEB607354BD4B6251893941730054244E198EECD4943C77082CC9B406A2E12271BCA455DF15D3613336615C36B22E -HMAC-tiger - 0: 2EF793765716EE48A671BDB5F002103C43734304C8717C85 - 1: AE61B56C82BE9FF96DCFBC20DD02B4BEA4FC6B6D5F4EC412 - 2: B54ADBFB404457E6C5AFCCEC27199D1F259EE1994FFFE99F - 3: 08AEEC38E88403BB854935EB6F1464CE95B044F4B4202524 - 4: 4C9DAEDC1929E22128F2A7ED5F3556D8A6D3A8315A7B556A - 5: 764794ED9EE1F94891835CC3A361FE75C600C7951A07F450 - 6: 1A4C447A0FB8826A0881ED2E7BD89499EACA4B6C49F96060 - 7: 1396A21D8B465C6B898511DF94846588EE8E35C0095AD90A - 8: 7552EB03CE26A8F079AC96B42F556FEAEB756014B8FDE622 - 9: 835B7CCA9D9F13BA2A36CBD746E5C92D5B2D123CA2EC848E - 10: 7CF4EA88FF8B9A5A57E5ABB6B35278EE9D8653F624D662FE - 11: D588D953C6F438D077A1E302F84E25EF31AD99B9C5FC9DB4 - 12: 86EC62CF1A08CEA9171AC742E8E615B3F0C7B6FBC95DC3C8 - 13: 6EE7C51E26187F86370A26811C75136E28B0C39A113D80F8 - 14: E1326D54123BC26CF41B30F9F2BA2E732203836AF8A74273 - 15: F211E4C46862E3AC8B8E69976A705582CF6D1B34A6D342B7 - 16: 0C6160FEFE70C81C71B7465F42F070F30808CDAE448D1974 - 17: 492FC6BC091489F926F0F54CBF3E3F6C8CEC6ED14DF2DF8C - 18: FD166027ABD1BD9DBA13E3908D16C403E1691FF173328CA4 - 19: 28D99C64CDFFAC1E6F7B33C8E675E49749CE835A177A1C63 - 20: FD7BD55BC2A684F4875C811143A2997356AA87A300345843 - 21: DB8968E787BF65C00992ED9DDE974EA71BA947395111FFB3 - 22: 4C31B2FA4E6F7F40DECA589F85BB69BFAD1815A73CF9EB23 - 23: B4D8D7FCB314942F171F85EA0953F7816DA9F07D72AF48B5 - 24: 9A6A70BAD76203A7A1F64D1EE34375EC8BCB21810ECE0B68 - 25: D21D7E5EF6F1579C84428AB5D574468933BA037C9B0C34B6 - 26: 3C5292C87B24626241693F0EBE20A96800905691C5945E65 - 27: 350BEEC075258BA7FE0314E6803152B021570F067AE0D4D4 - 28: 6881F892886F9D66E68B937BB3A71FF5CB064611C722996E - 29: 07831F1B2D00108386339F192729687B2F57B9DAB2B1210B - 30: 38DE8DE8398EEC32939A239BC0198B0CFB18D12E4F2A3023 - 31: 5B683578F81867054089AE2E1B20E02B3BD92334CBB01FA9 - 32: E30A80BE07651BA17E2DF0D43A583A9DB268DFF3AB7393ED - 33: 42341B1EC4F61E90571188F5599FBA9ACF884B1E15694921 - 34: 7D98297D65F5FEA85CB967F22AE0707E03F305BF1D2249DD - 35: BC8EE5CE0FA8F9E6694406009EC9358BC420B7E5DE07B6F8 - 36: B8095DE6770CB4CC2127FA672F93F39CA4AF0CCBB9805DDB - 37: 20C0E981DF1B763B6BB47D43F66765AD434127C1FC55F829 - 38: 59795328D40D2CE6CFDED8DD5089F2D5B796C9438E7646CA - 39: 0789CAB229AD54416C82CA5A2E667EC7CE66019FCACF766D - 40: F7C81B1AE705019FF9A9905972AFD72484A70E11FB81B278 - 41: E72F52644BF5EE59BE87DF692EF0070D095115B7664BB53A - 42: B9A5DD984358D0B0F3C2781BA60E9BD3473C1C89C7982F23 - 43: F7BA22269249759F1A87AEA0A125D4DF9B58E93714449008 - 44: 5D2257317F8978576CD7D2CCD346E861A59FE949F74A3D82 - 45: 199D8D5B0B5C5B61E046F50E0E389DA6F19CB3A7A37C8588 - 46: F489CC6CB2D3E9F741D6C9008265CCA97E7E54D62F5EB85F - 47: A5E7CB0787EB7E62A9CFD8486390A6628C9876654B9E85E4 - 48: 22FA78EA17F0D29E16276C70A564D234BC4ECA7302301528 - 49: 4422534FB9EEC601CE7662345D6B6FF932E54BB0483C2F62 - 50: 5D2E2B90B460D393F36BF32B2F491E224EF388FA72A48501 - 51: EA5287BCBB856BF04FC785541079087CE24783E9310F3090 - 52: DEDA3920899FA69F913AE50A4F0D7119C9D3CE8F4E6D5BB2 - 53: B2F55D8EA64C9842BFEA4FADFE616664CD44C57D53998C58 - 54: 3D2C72F26188E1EF5C0F0FC8B541224066C4DF455FEE78FF - 55: 50BB36BD8A8D97E4D6CA78DDCDAD0690FBBC93DC9A66BF18 - 56: 48140E192FF8AB74FC22676AAAA186C1A7E2FA0166E986AC - 57: 40AFD540C40EE7E598D26AE3FE5A47939299B5DD46B0B4FE - 58: CEBBBD763B077342BA16D4B20412C9EDE0F0508ABCE3501B - 59: 0FE4DFE539160F5924C324B8B43DACB4F220195D286C6FA1 - 60: A06D135075F943CEE74AAB1B8DE08B772055551B1E73ED48 - 61: D4E1B5EBBDA5CDA5040DD697BB96DD702C6730CFCC012992 - 62: BD5E77B67B42C507C4912130C8880A9DBD66431DCA0C0038 - 63: D81F583A9B4DD1F48028CA602CC0F131D60561FA34F7B3B4 - 64: A41F0481EE52842CDF676177F8E43BC1F1B00A5682C63E15 - 65: CDB29E274ABEB20EECC8378D5BD806997502E4271AB56708 - 66: B8366ABD45565BB3D26CE46B6F419F74B34851863FF4C336 - 67: 5AD2C193D6D51C9C7E56C5BFF55C1D61E045366B51E7F619 - 68: 9948E3AB7D121B15A6CA8DFDF4EE5377C957F0DE891C3575 - 69: 095676D61096853635128A80570BD1CE803AC7249C0A0F57 - 70: 354F4CCC1E5112770B2AB035AE07200A6CDC0280AD088AFB - 71: A8723395E80BED25DFE8F9ACEDA942A77D225D00440302D2 - 72: 0D2BCE0F8CF396FD8277C8BD9B19D54965308D3ED04D2F27 - 73: 54B1939E9944F499798B3DCE3479AC315F2C42A1EF231984 - 74: 5CFF726EE4B2596240E6CBBC66D7C737A4D12A702B40E81E - 75: 82996D7F3F27B473BDA647BBBA7230DF217288F2D1A38B99 - 76: CB95F63E0E7A2EC4F26E94B81A3C8C757E04EEEAB35A8C2A - 77: 057DEDF45207EA885A0BAC5B64240DD21CB9D99CD8F38FEA - 78: 27DCDD1ABA459506EF98E5C8D567692264C4153F91FDB269 - 79: 911C83660F7EE8CFB5F54890AE98CCA36C4C12B8CC771DF8 - 80: 67CD07209988C517FAEE01E64AC4B5CF261B6035069508FA - 81: D9A40C407E2BA852684770A5EB08D8502DFD264F2DE5A5FC - 82: 9AAC50A2BCFD74BE3DF85237478AAA833484FA3DF912A3AC - 83: 38078488F6183B5A94B655F24212FC9769450D93986C9208 - 84: 2EFFCBFA4CCCAFCA66BF8B368FB1FEFAC280C20416BB90EC - 85: D626FD6D285C49F20E99B88B9F82640D93D9E765CA55B5B0 - 86: B1DD178943B26AA241D34031D3128344C6955F6A942CC5D3 - 87: DA0C850E2067F9FDAE433C1230E0F629700FC8896ADDBDE9 - 88: 58E393E353BD7DF75A591904AA99526E94FA45C98D095E21 - 89: 323D0E04D239BD70192B2ACCB9ACF06E2F8C3B07565893AE - 90: F9C4147C6921640C097534BB08020540B420AD569D03665B - 91: 5171DB964AC815B3A6D058419FD47833DDAED71039966E6D - 92: E7DC7C574AFC2C9A59E46CB8ADBD03330A5321B237DF7899 - 93: 97074CDA9FF8D40B0501E9F632ED7335D6A7926101A34C0C - 94: BDDCD4D007DE39680B80F9AF9803A9F21C836EA971250CD4 - 95: 0DBFF45E3155098D4B4C13815FB461D3C4BE41E9E1A68757 - 96: FC16CB95478E4D23A7AD15CCAE3C24BBB3D0FBDC8A00A144 - 97: 93A7CB506481D6A72EAB14A2BA544F8631542B55903CCAAE - 98: 9CC1FFA19736AB6EB36EB4A2C1624FCB6913B255D2346795 - 99: CE3526A088FFEDEA4345AB221707848823B16DADD19AB487 -100: 1E1D790323586DB8A306EDCCAC8C64A6F29A36F772B8D61D -101: 8C403515F2B9014E9519EC04769ACCF23E522D3E22DE7F41 -102: 6B6A634607634804988301240CA5AB029A9E86E51281D64E -103: C7C3483CC8E6B58520B554259EB08866AA7980B53FFB6B86 -104: 96E429611C9E411321947469E2095CD9B0EF29578030E40F -105: 5C5A7F2B7F1F9BCE730BE2779304A443188FD3B31DD2BF19 -106: 70933F999325353277E0AA1F543B5CBED3F28DAF4FC70A57 -107: 5CD6D136FDDF4AE9CE42F008301FB6647096D5007E79973F -108: 1162BA742AD199AC17FC707285301A82BA9CB12C09BA229D -109: C36615F6D5E29E6CABB7EBC44A6D3F7B024DAFBD338FEFFA -110: C29FEF051D1606CEFCE3417BD571CB9188BBF0FA8AB98679 -111: F925144EDDD27244E19E4B6E433F312C6CDE43EF4F9B84B5 -112: C4230A59E54A34D0709F3F1DB02C18EC8AA270078DE424D5 -113: EB1699CAEC36681CCF8A9144DFB5050566042977D15FD1F9 -114: 9FBF0D9B2DD9A6E87240E538590E9799B76E22604D22AB75 -115: 2657EA06D69A78A5895A9169F849B3DE111B31E5673A8E17 -116: D1F9E1BA4F4E52CDAAFC388FA4C366EF4BD5F440608D86B0 -117: 049196BFFD9F77175FA936066C3119293EAB79D1E0028C8F -118: 9CC1BD2CADDEC1D82FFAFA7031F2E5C9B6765CF1727A0ACB -119: ED00438670D68A70CE2E0729997CC9648947EEA35809B8C7 -120: A520A0089BC16C84CB8E05425B330C6D261108EE3049FACF -121: A55B470483E547D2752EDC3C4FDCF3B4C48A1990AD857941 -122: 46A78E772C533EC8EDA60EB4A127FCEBD35E7D0E7F183241 -123: 5EB9A774124D571FCCC83D1F36C603D9C387390DFB3928B2 -124: E904066FC77F73CA41166297A8FC631FF59634B659F0AED0 -125: B85B66AEF7D9904356F1CAA5583757D1D69EEBB8AB1D1420 -126: 6639F85214BC798D71B757FCD480CB78D325881781A3A073 -127: C5B72BBE80917B55036A9AD6908D59293C49373F0BDD104B -128: C0BD695F6B9B42DAB543C31BA73C9497A6AA6419A007A9F6 - -HMAC-tiger2 - 0: 4B2654CC4D9D8E5CDF34DCF670279B0CAF5067BCA2B7D9A8 - 1: 6A4DE03B3A76A5776C69E307A20A5EB9A52C28E6CA09A108 - 2: DE423A47DF06D63D818572A39F7BDBE0E8CBD4821570705A - 3: CCDD9C6BFBFE85DCE4667F79C8E59DBE6EB1CA17AC6FD2D8 - 4: 86940595125EB8DD8F382113BE6028D454E593002BD8E60D - 5: A9F291F23B02781B5CF250867A6ADD1E77982A6328FC1A06 - 6: 38DE90FDAC4C1D54832F17602E36CF1EEC5F12B7ACA3DE54 - 7: B8C7EB0B8BC8FAE49798C2DAC86404172BF3892CDC1CCF89 - 8: D598E17D19BDAA6B89A3C3069813F0109C54C733D3A7DBF2 - 9: BBB1EE89364CD09FB1A1D435E67E66FBFB6DEC583483D03C - 10: 46CD01EB0BEEF872FF78A457EAF3D73B4CEC7D564EDADC5A - 11: B728CBF491A0F9694552A7DD2D11BE590F325D82CC8A3F78 - 12: 8FF9F333A6F556BA4817A4C8F1105349D584FD1212F58AE9 - 13: F5CB2A2758B32AC9F98E9DFFC180AA76DD4EF54EC4729215 - 14: 0238F00B9B749F480CA06A5B00B33F17C0372DC17BD94FDC - 15: B0953C194702C3242850D141F9C84FC5D65C67D6DDF257B8 - 16: A0C1EE78009DADD325ADD8D0DB34E20FE45C63BFB24A47B7 - 17: FA135B67DB9B8787F59D4FB0DA89CCB3A0F672E06BE1B122 - 18: 5D1D820FDB807A133C651426773F7C07E8762323402321B2 - 19: 4C872518F9A291F26FB40ABA09A4F7A105DD741939644F50 - 20: B168363ACBA1A14FCC5D8005314EB8E6881EE8F7F6C206CE - 21: 65639F063DC936CEA9F32BBDF84F3F22352E3A5780E9BCFF - 22: 1ED38E6A93A9AED1DDBF2A5624BAA97FBA5B9375E47088FD - 23: C9A8A38D29D4F3664FB425B73EAB2669BBA2DD6D67409E5C - 24: 86CF42CFF6B093580EAC3FF068537891330710589B7E2F5D - 25: 9B58623323AFAE5E57DB0A183BCFF0093D55A6252556E66A - 26: 1FFC82B7224B5BAD2859903B23387970DBD89E434D829057 - 27: 617C19076821ED43D0EC17B4DED868977E5EF52532F7A1A5 - 28: CED7CC6DBE3F6D6CB66AA31C6725DABD6F82C7A153C1306A - 29: D4F1096951A1B82B0C893122BC9B378DFC9CF6261569B036 - 30: F5761E2048FEFA80E0A3DEBF064ADF91143EE8E494741D5E - 31: D57233CF1F35A3B64B6E2654B36EE4699D934F44E7259C8A - 32: 7FB35F882E8DE4153BBEDAF28C3A1AE9763C38EE7F726A66 - 33: FF513C527AD10137987773862AC8328DAF99AFC4EDD3C326 - 34: 2528CCAD54BA18D1E67C1C87F1A3122FD731D3D7A7605340 - 35: 30D3AB0A8B2B291C1A99E8EC49172AC88A823B23617BA866 - 36: 6D8C803B6A428274C7BC37DF713E4548D054B770A9B977AE - 37: 20372A49ABD3AB29DBE20726CFCD2FFFD2A9320EA300DD95 - 38: F03368637D44B367CD9FA73298858CD6D4CE6826A0A52CBB - 39: 2E3E6C99B4F1570F02E27922C681166B4F71A129E8D03ADC - 40: 3518E8C1ACA94F7C1A251CAF5881653725C69154A307E13C - 41: E6BDE29863C0616BACF1B2429AB06F7E42630CA77334C7B0 - 42: EB0D4F19028852C0B5DB21F1B0FF151F2A584D8039A9863B - 43: 1DE2E3A818FC0FEA8CF5D55F685661462AA0CABAF826570A - 44: D6C0FC83DC11504E47DC15AE8233C659205733AC4D0E67AE - 45: 937CD1B88CE1AA2E3E3D324BA4A3B4BC44D6B9143789363E - 46: 339970A774609B87A476FADB93764F3E99522CDEF0B2E09E - 47: 032E9074BF0146582175806D804AB611C552DFE1270751D0 - 48: 9853B244C9AD49B62D4EEBF166F8239C093540CEFEAF8888 - 49: 0F46C3C319B1A04AEB7E84D78E4B901213369968DAED38EB - 50: DD92FEBDB86136F1CEE80BB786B904B9022DF9ADD7BD76B0 - 51: B08956B59160859B0773990AA5D355D56B630DD40973E5B7 - 52: 02E060EDDDD670C9202B06EA431A974B625CA39969E9E939 - 53: 4DAAD5AEF34982F889D405540C165E7447A5B3C995E98383 - 54: ECEE8F8EBA4C7BBF2E2814F0D17BC9BEEE19E43AC9E2B342 - 55: B8328156D9101787E5CC080877727D4B8407D690D8751C8E - 56: 8EE93333E0579C8DDEBACD6326F15DBA2F1AEACA49380938 - 57: C333CB9031703F32C274CC488CA09B3DE60269D179F64DA6 - 58: 79A215B6162CF63F4632D8F9D38730941F446BF594B17556 - 59: 3A3D3F305F26D1D6696DBFB9A1004A681EB2F62FCB9CF6B2 - 60: 2DD3CC48A7E2D35DD3F437DA1A8D72154DE3B1C75FFABBC8 - 61: 29086C39A04D00BDE82C212A8E74A7759B00DDE352C3FADC - 62: CB1E788B784A6BE53AB2509A0315504E46D38753DC37A72F - 63: 5F7D94DE430CDF36C9CAF432F810787E1ED85E515F35423D - 64: 3F50DA41470989AA861511964AA075BECBEAD17870FAFABD - 65: 62CE5C9CD41D99B33FE074A0D879933DCF476418D8A409F4 - 66: CEC4518F2423AE43E9964D2B3F0DF096BC5961150A1F627D - 67: A0585B6A79B338549BB80530DFEC07D8651BAC80193230B4 - 68: 41EF4BBC67F666440A347DB5617DF591F5E8E050C7C68DC5 - 69: 9519F5DEBD840FAAFD86CDC222A1704D432935E8ED81E2EE - 70: 316C82BC0E10E35BB5F6E0EF0454F1B255099B0E019E5DCA - 71: 733FBF4A10E247A0195D3141D843D5D22C534DD6FE2F5B96 - 72: A05E3C456E22A2D16A0521A3043752C32906E1CF0FC39CEB - 73: 7640C03B8154E28126925A165FECDE1FCB7EBD62EE3E6249 - 74: D08BDE42F0E296E510B1C05BF51EE3FC4E20B7715A5B8C0C - 75: A194063DA61C6DB770A7C5E85BE7E24699395E41DA87DBF4 - 76: A99BC961193CEFA422AB1EBA6C4DFF29D05EAAC718AEE16C - 77: C46A18C6EC220C89C4918C61C5C21E4A7C511FC2AAB3B966 - 78: 21E034CFB8528153AEEBBE45819515E6D045AF7AB29D05A2 - 79: 1A2B135C10E7A86EC0093B98DF2457A34572093FE2F3B872 - 80: 7EE6CF7EB06C8A95B05E0C780D4C50A47EBF41A4386E2A87 - 81: D5FDD5BED43BA202CA01AC4D5FF13237078FA02A0C188BDE - 82: 435370F2F686CC6BEC2B1306FA414AA77D06F09A45A6AB9D - 83: 98AFE9D1722FA044DDA4C8C4308FFBE89588EDC60C02EEDF - 84: AD3F9927883D07140939E8C140DB4BFCD3EAFB5235829D3C - 85: 4E831237FA94ED333567AD16681ADDBA69BE215B09046014 - 86: 1318B479683D8C321A7180654F61DDF5BD15D86CEE47621B - 87: 87C90A8A7534C412819216B2FFCAC2BF53F517D504A3527A - 88: DEFE3CC4F5D24972DA51C46037B245CFE8BC0CDCC7A84BB2 - 89: CF23ABB3DB48C22C34DD91570C0912ACCE1661817E78AA4D - 90: 3A93480EE3330C348C66120AC8F25190902E7C00838C1299 - 91: 5200537B57872B600C21E3724DE8B2139CD712C9674398D9 - 92: 589D84622E8A1921179C68B8E6E6B89E484BE385AD63D166 - 93: 89EBBD088BD4D517166C4DC2319C88C0ABC5F04B32EAF539 - 94: 10A760CB415248FF2140762B285082D5008AAC08611540BA - 95: 4E83F77E0F0A98BE6AB6ADCEF416D94015B6DE7EBF57E659 - 96: D8ABB13EBF7E2D9F91DB0F732ECCEE9DAB141F82B47FA256 - 97: 5061DE8B61830573BCA2C4B87B078078918625B52BF439FA - 98: 596408C287BA0C1AAB8A31DEA77ED20D7604BAE6610B34EB - 99: 37D018DC7B83BFF2B0F72F72CE58D1EACD8B7F094A67E02F -100: DB89119904ED7A9B756A98E6F2AB529C5B92B5B43C3A0677 -101: 712DF1C234694E6D120ABD1908B1325225C729AE100BDE78 -102: 32501D9D9FFD57D5490B14CDDCF0095EC94FC7894F2D1403 -103: C7804BF8F5B289D43578D5881E536FCE5DD1A17035FA8469 -104: EEA51C718E136459BE0440D8C87F6C973B5F6D1DE587358E -105: 36B44080084A94DB6F2BDDC2D9144D178645C530CCA5D986 -106: 30418C50462422AD509D26DF8607A1BAFFE54AD6AB7D78D2 -107: BB2C01B4E739DAC6CF22F0971B32E07E438BC82470A6DB9B -108: 2CBA4A4A771334892F9C12ECF0E86FAF22C4017711771D20 -109: 2CA9B5DC8F0D1F1F25C4C7C8A3B1E76BC5399AECE66011AC -110: A5D48D3B930FE95D5B050FA6CD62BD02E27D6DA01AAB3DD7 -111: BA477FA5FAF019F6DAF6CB4833E59A689A37E8B24A275DD3 -112: 1F86A12C662C6309EF602B6FC014B3CB2C18B977D4E5725D -113: AF4470A72EFAE66B1BDCFF1B8E31232C18A6E17D7F3F67B8 -114: EFE7704C17F7B268D9B226A55DA82F7D523DA5830D07BD09 -115: A84207033240FA7CEC68BFDD9A9CA4F8EF918B2FFF6E1B1F -116: AE9C316E61DB29107ADF6D694CF49E2F603461BB49E2C71C -117: 89361D5A122E68BE665640CA9C666649BB544C48B1EA9406 -118: 68CD95493256C3DA5A541132A2FD302804F45032574D6BE1 -119: D15621BD9BFFE8699AD40C99BBD4138271F3F013FA2C7CB7 -120: B78D1401112D4D17E24666248EEC0F4B4824FF4E4B52EB0F -121: 76605587B0F2AEEE3E45501ABD5F374D62BBB63B3E5D21D9 -122: 6A234995E565921D056D114F01FD59E789302B580DEB6C5A -123: 3A0C9801C7B7183D0D35ABEEB54C89DABE2322CBD6D8960B -124: 4B07F61884D01AC9CFC615D51849723A13CDE2E4B7667F86 -125: BC2245620EDB653ECC0C2C84638ED6CCFFED0FC86D7851B8 -126: B427067F44858723D1A998FCF7C92FCCFBCBF3F736D3DBF8 -127: 1A75D81EB5E19084095E65006F97A0ACD1D0BDB8F69C7DDF -128: C56A45AC44703A544F143432D9219506046668ADCBAB345D - -HMAC-md2 - 0: D39AD9DDE006587A8BE949B11B9288F8 - 1: FCB21B5348C95E8A8DCBEE50A80302CA - 2: 2F26B6ACCD0E03FE9B21A1B0E75FF665 - 3: 17CF85D985D0D85F545897CD42C6EFE5 - 4: 1537A6943B4F5AC1272E4161225D987B - 5: 83E17165D62CA6E4B9ED67DF1E599954 - 6: 7A3195C863DFF86A98968F254E128E61 - 7: BD05057AEBFCB92FA4B07456085EC6C2 - 8: 23AC0D307BFC2E87760F8BDB21851DF8 - 9: 2CD26A2F2994106A375BEB0433575BDE - 10: 1F63BFC44FDBE9A966CD90DF82265EFD - 11: 72735FAADC3819CC24CFCE1D589BA311 - 12: 28B589C3C8078B8FFEF1C8297E33C1E6 - 13: 70A6DC014CAD2752931A47C0879D2371 - 14: 81694317A37FFBA816504974F38B4829 - 15: 72F26208B3051F1B938EA7E03DD8C107 - 16: F945F57FE0696A4C81EC59AE69384FAB - 17: 54D8DFCEE33969486956698495B4BFD0 - 18: 508B82F88A234E753A9E305E15A14D82 - 19: 527D77D2AB25131693B02F653ACBD90E - 20: 4868AC540FCC3A896D5A89F7A0444D36 - 21: 6189807C5FDDDD68D20356ADF3B90DC2 - 22: 0356362F2BC4206F2B930C4282213758 - 23: 2F59956F19B3CAD687C66C4EC3CC916D - 24: E30CEFBDA3FA1A8EDDE3B72614ADDEDF - 25: 33E0E6BFCBC9581BBCDF13F4D3F26724 - 26: B11C6476F9775219A9F18B5E88857790 - 27: 49C7A9D7F56344BD405E53BE927E3A58 - 28: 99A06874B0F0CA45C9F29E05D213195F - 29: D21A60A18F061FC453AD5AC2A519071A - 30: 2F735E82090144C036E3D12DEF2E0030 - 31: F9539EAC81BBCD0069A31E2A3C43769D - 32: EDCAA9C85A614AB6A620B25AF955D66A - -HMAC-md4 - 0: 752E874F35085E497D5032112CC65131 - 1: 6B2CAAEE210F970AB481D6D8EE753114 - 2: 2162A41522C2DB0B8AF1F0C712C19A22 - 3: 7C2106C3CB687F35FE2658BEEFB497A5 - 4: 3715333CA3EB74A15B4B1802A1A78921 - 5: 403D9A691A130AFFFB81A655AAE1D956 - 6: E697C3CB42716CA1973DE0D15486068E - 7: 99676F34E42C61E396F0E76BCB77BEAB - 8: A2B2CE8CF8AC151C5556A36D58894C61 - 9: B8614BFF1DAAEA90BF319F333024976C - 10: B8759E8B97DFCBB2DB94D8CBE2C96B20 - 11: CFFE6119EB0C649831459339C1B0C82A - 12: B2FC0DBA9C4830CA66423728599D3660 - 13: 454749F1DE579F1918FF046FC1CAE7F6 - 14: CC625178FEFD46481B7D02618AF6194E - 15: C26D523EFCC42C4AF7EEC2EA4B45B719 - 16: C352DA2D077FA3F493A5CE0E9A79CB87 - 17: 570DDE9FD220F59867F17484605D2061 - 18: FF5954A163CBA61CD3C8424CC71682C8 - 19: 1240D12E3D6C07F6FE1CD595C847C038 - 20: E87A4D7958C43CA71791B13E16301036 - 21: B2CEDE4A15F8D64C53D243F8C5763C05 - 22: 54A9E9EAE155E7AFA6FC8A7E05D7FA9B - 23: DF0E79F27CE25E56ABCFF5E74D1212CA - 24: D9BE454A95E5D9127990577F7EB7183E - 25: 26F9221A8B854767861BF0281303B89E - 26: 92BD4CC81A673B254A4AB493864BB014 - 27: EBC3851E0AD28BE9876BEFD6B0A88B44 - 28: 1134BC8A40E1D2FB038B67548AC2040B - 29: 954700135C4E7F232337C84130B43360 - 30: 8C3EF2D8F896C8D252851A1543F72493 - 31: 52817E79D2B0B3A37DC08D18D3519F92 - 32: DA661A428B9659DD59545E3B09162F8F - 33: 3FF5BB67B48F87B4B642DACCD2E4001E - 34: C674F95BB622D7B8281FFF34E9EF3E7B - 35: 3A4D25E3BCABAD8CD4918CE650EF00E9 - 36: 2D91248C51837A8B80898E2CE42CBCB4 - 37: C0B3BD2B36493F0EAF9AAFEFDC37064F - 38: 9B4723B091102B480B2B59069317F292 - 39: 0F8EABB489254491FE19AD0E328A483C - 40: 25469BD482E1405E51AA021752394C4C - 41: DF1DF50EF9D95892D08DFEFB79D6552B - 42: 707A546964CB22710482C478E58C2E0F - 43: D1E243DB14E2F946D650C811030ADE9A - 44: 11A1AEA678E98A65420747DD6CF9293F - 45: 66E735F658BD689A9F1BA0B526827CF9 - 46: 98170734E67F576CCC3D01D83965A6C9 - 47: 399D99CB7979E80F6D3B5D5BBA5871CA - 48: C26651C32EABC76289CD0843D3BCDD92 - 49: AE0F50954C90E8897BCF504592D0626C - 50: EA3AB701136862428EC326D2551F8AC8 - 51: 4AE98E5A1E6B1BA8CEAE844E34934039 - 52: 7C9826187053186DDC2760AE6FB56DC7 - 53: FE0F555B851CAD830BAC9FBB40705671 - 54: 221BB509584BCC7E10F3B4FAB2AEB1F3 - 55: DD93EAFE25EE27C6FDC2CCDE7D273267 - 56: 535472E1ECD49FAA75CC6621BE7E6210 - 57: DA4554FF7D5B289A03D195F94154AF47 - 58: F15A3F547B5A3844BFF713CBCEF701A1 - 59: 279DE06FD5644C520BADD3B97D96274D - 60: B933E929073492EC1E2AEB78071C7B83 - 61: D1DA2335654AB4CEBAE5C2E78CF27553 - 62: 06FC50285F4BA5C8B5A478E9C02D6434 - 63: DB66A5D55224DDB50337B7FEF9A808A7 - 64: ECFCD0385FB49553EC89DD94AB084D23 - 65: 4187B0B79E6CB916F747B857AB2F75D3 - 66: E03E14F5E00B2DFC0614308608B929B9 - 67: 5F61FC3005167EB3256DB549DA8BA562 - 68: 21A4D14DF8E934A858569D8BA7F151E8 - 69: 5955DDA4CEF16ABADE2B551841C69B8B - 70: 8E77066A973B60DF64C27DBB93EF204A - 71: 2101EE9DC8221FF17D9D887FC39F41BA - 72: 6574A9DE32B7A673B5BA20FF18EF8C93 - 73: F571B14C9F5C5C1858D48AA944A13050 - 74: 0BA4BE0A5E853D07F79B2D29BCF046B5 - 75: F240C8C38D71131F510369D79FA32208 - 76: 920C294DE37C28803FF3C49A4135CD65 - 77: 38796D25822AD8F2AB4D64E4A65626A0 - 78: 65A203170FDF794397FD1090E318C5DA - 79: 965A767FE4A75BEECE26BAA79D816AD7 - 80: 0F4B30947B790C47924657648FA1D88C - 81: 74B05F7B7D006F7DDAB31DAE251C3BB3 - 82: 61B0366B57A8F46C2F6C16F935DA768F - 83: D4CB13CA922B542980F854C9780A1951 - 84: 039B2F23A1CE410FF4696D9C35C40C08 - 85: 2D734E28F995C2AA2A7AE2412EB99A10 - 86: 1A55FE47703ECDBE446033F492412812 - 87: 6AF4CED86D0181D6E99EE6AE57F295EC - 88: 69C239A875E0352D20BCFBCF8D5CA19F - 89: 62723FBBF0AC6F397438589AF06625A1 - 90: 424EC9353901795251AEF7D7BCFEB8BE - 91: 9BBE4ED6C8BD14F85BA86E553B1B8152 - 92: D7840AA82F788B7D58712E29003D1239 - 93: 4AA55512DCAF770FE4D9428FB318B0B0 - 94: D040BA08BEDFFB20D2C499FEB35EE12A - 95: 0F295EDEFC85546547860B7F7CDFB1AE - 96: 720FCD871B7D8824EE6A7DE9FF1A62BE - 97: 2FE3AD14E24C441C36186673A0D60767 - 98: 943FD502136B66D0313951198680F746 - 99: 4EE6829F3EFFD0A87115512ED28C85BA -100: 6EE1AC28A320246CA5C37F981E22D294 -101: 36BC623D6573C3ADB164F8A6F02315AB -102: 08B3AAED34FB0A0F99C4B22714B9CEAD -103: BDCD10B66096AB992DEC5539773EAF23 -104: 6DA36A53A79FA2C68E5060C0D2D43E13 -105: A3E886199532C025074D4646113F9C23 -106: 00D67A1D2ADCA77A20441CBF593FDEE5 -107: 2E4399F5FB44FF5573B73D01C5B248E2 -108: ED22A18A8824A30B68EE0EF9907B2B91 -109: 36166824634304417BECCC9519899CDD -110: 0757DB01193BEEE90617AA8CAD0360A8 -111: F7691CBEF4ED2E9FE4EB992CB3939970 -112: 09DC2FA975CBE8CE828919957D110EC2 -113: 7DDB74DEC57AE8C318AA5CCFB53872F6 -114: A26B7DD0AA30EAAF1F4F8314AB7DF16A -115: 088855527BEBCDB67A40FEA4FDDCC061 -116: D0F8ECC0C32B7060CB6128279F57FD80 -117: DF5B79D3671CA5E5B44CD395F6FFA551 -118: DA8999EA059C463D5F05D04020EE867D -119: C0EE404DD8447AA70D3725D5634E2B53 -120: D19D1A725F5E9F0DF21871B31900CA73 -121: EC202984BE149C93CC1D440CF6D29E1F -122: 422DB7C21B1348983B75498E270FE6C1 -123: EF136334BC30C92DB9082A9654B391E4 -124: 0B3526430AE734054873B14DD696CB3E -125: 3BEB77C0F85F8C6F21790ADF30EBB812 -126: 4376F8C8EAF5A94871822DBDFBB5F88D -127: F7DEAF52378FF735B2D171B17EF573D8 -128: B4FA8DFD3AD4C88EABC8505D4901B057 - -HMAC-sm3 - 0: FDA7C78D15984D8771F59F20A69D195C6E237070D37EC962E167326E517433DB - 1: 617D49CB0D2E65E6D40338631AA35620A150669B14D3B36BECFA3B4A04610EA9 - 2: F0F69EBA9D1F9F0A76F9C7B2E690BDE43DDC49009B820D8E0126C2ECFAE426AB - 3: 43D562376EBACD17A91696FEA0FD06D7AB5B88A8845208B7405797469AF4E9C0 - 4: 6F9776F31DAEA542D1FE17D9E8F03B22F420C71506E048C97E11C61270B092E8 - 5: 1C99064F49994C32ADAAAB111B0F537EB892449065B47E10B6B4B4CE8D58051E - 6: 321DC2AF96E4B6C90FD2924E9436CAAFB13FF98FD7C00F32D66F6A99E256F7C7 - 7: 21AB9DC39C31DDFD06D8A6A4120A022BEC1B9FF85C7BA5982A12C540558D7843 - 8: 2220C299409746CE30B3BB1E15022ABB72B1519D5F20B7AB3FF3D861E0503BCD - 9: 8EDEA1BD3178A5B23013A603F518EF883C9E3F3C8B427B0DA59865072841557B - 10: F0F23D78EB6D6052EA520D40BF8634EB3F4CE9AE505D0B61232B97DF61264CAC - 11: 352E0D68D3D30E799BE200EA8B2DAF47278292C45D1787BCFCA1BEDEF8986DF4 - 12: 7A0C0AD88D42EFF62A705D52EAE0967DD1FCCC12D97F1D7F7B4F024E90847E38 - 13: D6B74CEAF3A49AB888C874352051DC9B84020DF8EFBC8C16C2AB3410C5DF17E2 - 14: B8CFEC6CBDD7C6E40EEFABADFC535B2AC371D80FB7EAAC58A6AD1A741A5F94FA - 15: B4D0E042DBFEAED267D122A725D9AD0AE1C0811F27941854CC24FE87F8BB3122 - 16: 87FA1B3991FDCDDBAE670776DD787424923047CCA18F5908F0DBC11A8032DDF5 - 17: DC56D1C961A832B23691D0017FD0F25E9239643AFE9F168483EB3750FEDD2268 - 18: E232D251E702732F4AB7D698A157E398078835E8E5FD30D14A54E5BC46E8F292 - 19: 4D7F888B9E635C1189AF264004D442FDA65A4C40E461AEE8E5ABD4DFE6EC0B9F - 20: 55CBB73B388DC86C1831A37093967FF15D986D8DDD0CA61189D80D6D8A87A667 - 21: 04FD2A4221EE565012A39216A66DCBC50FA259BFA470C89388EDFD3B8F6C21EA - 22: 7662B2B11A159E3C453D1A96C3EB60BC92CFC9F34E08BF5EE017A2517BB9CC02 - 23: 0F954E8B243AED1DCEC72E563B02CBFFC032F91C613010332CD7BAC1D1E3D24E - 24: 4030CA3461619B9D8A5F38B20CD2D29458A3F036FD274056027B3645DF858F63 - 25: 2123F1819732FA2A6785DA76D304764AEBC15CE5C1C4F4FBE441EDE7F23D821B - 26: 7CA7D551BDFDE5CC42A4BA2EDEAA493753AEECE03730364B1B977CB2654B9C67 - 27: 27A57C09732E9B727848CD085098BE3E4AC6B8C94EF424384B4CB1E8DAE3EC41 - 28: 7AA2574C5CEA298E2F62D1E555B3995AD94A33C0D6B4ED1E0A5F4491C4BB8D9B - 29: 96204A4D5C49A08E6DF8C586837A5FBE84C524145DF28461158CF8ED16DC49D0 - 30: 797F92BA0573B7B50D79B74A5918927DA02A13E45B8BF2C40824852417743503 - 31: 95A1E1510DD9F71E9CC5D9E98A5605B106C0B2E700E4DF30C753F2C01C702191 - 32: 627D1EC821E89223D52ED8160606118712F9ED8157348726625F6395AA35346F - 33: A77D4DDC40FF552F6DB39B8907AF3C548ACF9D32D6A809E34E9A554802D0D15C - 34: 2AB412A14044430F4680FD090881CDAF0DE6FD2D3D60A925A8C3DD0662D8E30C - 35: FDEC326A6197D103C445940DB1FB7AA2BC7D6F92B2685139BBDB4B915FF141F5 - 36: C026D1871252E156F29689F10586BFC3E0EE3F93FFEE580010BC4A4AE1880961 - 37: 708E875DF37FE36144A46C623A36FD24018078F6585ABF4F09C0326C8B18C253 - 38: DEB6B61641523D57335E5F66B5B324F6649B86119A7D7C5E6603DE55D5D6BB30 - 39: 70F97D866A1183ED59E38D866B28BC570B9AD2A40A2EDF39464A32B10D474F40 - 40: B790F4A66BED45EA332BD096F68FE8F63B5B0ECD2FAA247B0636A7F62574D7D1 - 41: 2D938A0D7F1E9309AB1A519BCD57AC206063738CD4EED18332505D8849CFC356 - 42: 366C9828FA31E8B4F5691ADAA1E72AC80B8463A3E374A5087EB29ECE18761EF8 - 43: 0B95346AD2C489A79BF7275CA27E57A59CCF925B8D7D6455C00725A6A091E5BB - 44: 84A7E62264AA7750E3C01D737015493A00090DE9EAA1100BD23B70586FE89BF5 - 45: 2382C631C93761326B36061BA2320AAE3AE86DF1C6971D5CA0346BBCAA133DA8 - 46: 2A1174BD21D53783B778F74BCDD9F7E23D3756C0ABC04A82510C9FBAEA2C972C - 47: 8FEF6E55EC97B90C32E369C6C3BE9FBB67BA161D586AD22C91A59EF37B53D33C - 48: 8196E30D810E3B8572DC442176983E91F2FCAF6B30EF7DE43509709C699CA901 - 49: 6CE3EEA9753B3494ECE17A04C2078F87172A6630DA80C50E3927BCE9754523B6 - 50: 38483A4449FDA7DED6CCE12AA646189805EA24789512653A1D6A6C9B0519F9A8 - 51: 34F239065041B4A0D8C0B322761D9B10AEE2564C34D4873B0E679EB4A6CF6461 - 52: 67DE337F86BC9F19D0EC034188932CDCFDB9A558130D5FE6DB4043725A8D3EDA - 53: 7127E9B9B4B72B7DB676D89584EBE27D7393F3FCAB96E52FBFF7ACF0E1B638A2 - 54: 1F595D3EC2CBB70548146D06B23094247D5FD21A85ABC61368321D9656481E3F - 55: 8747F4684BF950AF1C6C9C91927108E7F28D6A0CF85E6B9CF7A579356C89C10E - 56: 75F5648852677892870B21D7CFCD1F99F6C3DB24EFA44D5B9271525D8BF6A2AF - 57: 1827E88B3FD984B7C527A6E38CB775BD088478BF89B76C6C4670E24D550500A5 - 58: FDC378293FF9CD28E26409E228F8E2FEDCD2FE103B2664F66698438B90E24344 - 59: A5919F1DC6D328B7E91F57EEF4AE1806EDC2EC39980642C32B5DBB7FED341A13 - 60: FB5CAB3098A9C9464A86C529F83FC55029478AEFFCB2747E81071DBDCBD8CB07 - 61: BBB3D6EFCD7024C4B5EBC8E6E1462888CCD05C6A5D54FDA480E3E4DC70E697F7 - 62: 45024D25E0B4BE45704B0BB0FA75DF3D35912F9E9851D8F4EC6152C8B7329AE6 - 63: 77A369C752335EE25F1CEFB5CCFEA5338832059E9C973868EABA30B238A49138 - 64: E29DD2084287275FED87809068165B3BCA7DC3C40E74BD77E862079AA7134426 - 65: 82CAAD784EB51C22E1275B653E88C4A0E54CC32B071553612718C5897D5F5BC7 - 66: F5B374CF37D8880594F6B6193D0732309E55E68EAD7A1526BD275FD2B705CBE1 - 67: EFF15666D4E39457C611B2BBF569F74056594778E4F812D51F9E8E74439F35BF - 68: 66E16B57F8279454B3F7DD44970E8DDCF6560F3066117E13CD1C2A1D771F1E87 - 69: 4B9D7831322C1238BA57B6774359A22D2C69F646CFC5BE66E8943EFFF2287889 - 70: 6CAA665C55B0D237AA647A499A82C7334F551B456F5841884CFFBCAF60F3A036 - 71: EF5CE22D8AB45A933631EDAA542D568D83780169808C954E052D810FB3E33330 - 72: 9B64571987EDC852F762B0B7D182F5F0253B3B52BC639C16B6121E96FD578E67 - 73: 076B0DF0333BB5EC7AE694EF1B803700A27A1B59DBDB9A429E91EFB4EBB0DE1F - 74: 8C9CAA85D262C2BD03126B60161EE34B7DF152314ACAE843EB50D85870DAFE9F - 75: 81C4B1DB61FECE8691E6C7C7C8EAF540BB96589D90DFE1AC1553F7C70F0127DC - 76: F0CBC76277EF1E2A80A30081F5B96EE1E671986B52FD8E0A7EDB6059E210D7A0 - 77: 2815C4A53030ED946006FA06C1E2B8111D434BFF9ABFD18B8C76DBE51511A3C1 - 78: A87B8819CDC21A993C1D456878F7A402BF8FC517F0C8784CB882C4E6E2245413 - 79: B014D6565ED29088B5AEB1323DD08BDA6776695B1800878C91FAEAEB05EB2A1A - 80: 7F472FA85204CF5F484DF4D5C52CC391BD4DBA24DA07BFC82C3F870796C2B795 - 81: 8DE428F49F03F0F6BACF0EBCA947FAF916B2466061D6EC1898316E0AD2716D40 - 82: F1F807A356C9209CF2649E5DEB6A4C357841548AD82B239617A11D94EF6261F3 - 83: FC1FC2303153AC696E88FEEDA6879C4DD104DE2E7174599A21BE594896F30714 - 84: 197F79D306A358927A78F0D71C85B9295071385B7CDD96A8034BF4FEDED9DE25 - 85: 99DB23774C0D04F81F2E9188DCE28628BF3BC5B04610AC56CC6B116042DD0794 - 86: 158A3B8B4C3EF4E80971CCD6BD2F013042C263407691A2BAC357158797466F00 - 87: 77DF54967B43EDEE572BFE345CD9257A525D81F27AC15F0D7821E8FE7A9A30E9 - 88: 4D699FA49D84CC0C4B99052108575AFCA5E392D120CFE3703C39436EAED5A171 - 89: 90E4507A00187A72752E87ACD68665A90EBD1D1B6B01DEC924A25270EEB7C39D - 90: ADB4298548F9F99CCCFB2ECB31A6A843A74361FF48B1C60D2733EDB8B7962B21 - 91: A6AF395014B32E38E8412C242FDF2F680C5CDA058750027B23F52492615E54C7 - 92: E4A454D0A5AC0003D5EF4FC924890AF27DFBE5B882ADD8AD0F8CEB1422EED0EE - 93: BC79E235F3176A7DE9A1D7CF7363FCF8C92F42B520F613F4E8E613F914B90CCC - 94: 7CFEF638B210C64DB3D4AF304BE75699236E4706933A17B33EB19B74AB071638 - 95: 9B1B80D29662A927AA6E18C29CB7C4C344C252D9BA5C524B1E8801F8F3BD7E27 - 96: DABDF3450AC41C3FF33B2F8673372C06F52FBB5DF164B96C5A32F8C06EF14158 - 97: A2BAD8C4A44D1731C9DC610518628BA43EBE49540C5F72D74C0FBA3B534486C7 - 98: FFBF8FB40057112AA05D84FBACF2105A92F9CDCA5AA39E8CB91F68936F8B9292 - 99: AA92083B20D9DC114CFB154384926BAF36BF435AFA037C5687AE4B26589E57BF -100: D9F588A127C332A147B24A7D4A207ACE3C7B2BB01F136ACE869525803404F8E1 -101: 1EDC2C83147428DB0C0C226B0A92901DAD66B8D1C1E995C7AFE16CD328BE1D50 -102: 91C72518543373893805E3B9974315D0728476C5E5D551FC909BD2A32F96F9E5 -103: 73DA6EB942A9146992F089BBA9167D9D175E6A7E9705FD40841F23BEBA923E37 -104: 7F477EF5C2CCDBDE7257EB670BE18B943FBB8CDEC0C681C02575FD9477566862 -105: 4ACB9C29DEEF8B5058582CAC99C8106686DC8B14D3DD4D8CD057B5CDE3182416 -106: 6806370A302599727B3B2C93EDEAE06155568F82FDAA6A768776B382887ADDBA -107: 35B38613156EF52C643A4CCD427DA0415563C481ED1933F6A08D19B9F3E4965F -108: D7EF3FFBB64D1EDA0E052505C88340D5488D60EE8F877A1ED65C01C3FFF88838 -109: 3D486B2407C38F60D40866C6FE2BC6FFAA2778297BD2442488F9FFC323051E1E -110: 3777FDD5F2F2E9A8B0053AF2573AE885ACEBAE28F24F3A56777FF877716AD7DF -111: EF076FD597E88ECB8A6E535D3DFABF2B4D13B34AF0DDA28AD89EFDD1618B9D66 -112: 19D6FFFAE75E20781CA08F3E5351C77826C6DC298AAC96D4124C3A488565E4B5 -113: F10FDDF2236CF7CD9E32FBC3C4E44664AC855CE42D5676D46BCF21507C7FD7A4 -114: D5873662FDF61D85D14D7E74B6B7779EDC9236DD774EA8FE60561944F593E48E -115: 3ED1A43C031FF6A991FF1FB3F5196C41D131B0387D70789DC4B5ED32956CB258 -116: 7E4DEF340CFC9BC59FDD03D8AE55EAC078726CAE561403CED0227C184E6667F7 -117: 3E72B9A2835309A6556D275F4E9AB6F3C35657B451FB9670D10CB7288F55BB89 -118: 6242C423C03C058C5294ADCB959F0FF62FC0819696EF7F2AEE0A93A57FA934D8 -119: 1B6C1DAB2B50E92A74D016CD136CE4B2B8BA6EC0DA8AB97CA7F16FAFA914F8D0 -120: E511EA25C6C73696889E5480BEFBAA2401DECBEDDC1F87BED9EC48808C8AC003 -121: FD59BDB6357F877EB28500E09AD721B65ADEEC4854522E7A1288E90D95DB146E -122: A772599D4F1EBE527D80C1132589F0E9C1B8649C60CB551B126DD7772B537E8B -123: 28D3590C54883B8D8ED6707486D209AB1A2A25411E30D128FC1A43F6119C54DF -124: C9838385D4E9DAC898798E08F96367E0190FAF240EB3AAA8E1989A06FD55229D -125: 10B281D771D85DC89B766FBE9AF19B1584F6A2214E5A5B8D682299648C53F7D3 -126: DAF8137A6A6EF0827838570D4A48A75C02246C9BCA6E94B19CB5737BBC7B0367 -127: CD2986F99AEC715AA580BE75AD1735C985506247A57C5FC51C03E60B3631D4C9 -128: 2762E9366F3C017AE2AC0ED01ECEDCFD6907A3BCEE9B00A8458FB5833225FCCA - -HMAC-chc_hash - 0: 0607F24D43AA98A86FCC45B53DA04F9D - 1: BE4FB5E0BC4BD8132DB14BCBD7E4CD10 - 2: A3246C609FE39D7C9F7CFCF16185FB48 - 3: 3C7EA951205937240F0756BC0F2F4D1B - 4: 7F69A5DD411DFE6BB99D1B8391B31272 - 5: DCB4D4D7F3B9AF6F51F30DCF733068CC - 6: 1363B27E6B28BCD8AE3DCD0F55B387D7 - 7: BB525342845B1253CFE98F00237A85F3 - 8: 89FB247A36A9926FDA10F2013119151B - 9: 54EB023EF9CE37EDC986373E23A9ED16 - 10: 2358D8884471CB1D9E233107C7A7A4A0 - 11: 94BAB092B00574C5FBEB1D7E54B684C4 - 12: DF1819707621B8A66D9709397E92DC2F - 13: 3044DFFC7947787FDB12F62141B9E4FB - 14: 9EA9943FC2635AD852D1C5699234915D - 15: 1CC75C985BE6EDD3AD5907ED72ECE05E - 16: 1A826C4817FF59E686A59B0B96C9A619 - 17: 44DB2A64264B125DE535A182CB7B2B2C - 18: 4741D46F73F2A860F95751E7E14CC244 - 19: 13FDD4463084FEEB24F713DD9858E7F4 - 20: D3308382E65E588D576D970A792BAC61 - 21: 38E04BD5885FEA9E140F065F37DD09FC - 22: 5C309499657F24C1812FD8B926A419E2 - 23: D1FDB9E8AC245737DA836D68FA507736 - 24: F6924085988770FCC3BC9EEA8F72604E - 25: C72B261A79411F74D707C6B6F45823BD - 26: 2ED2333EBAC77F291FC6E844F2A7E42D - 27: CE0D3EF674917CEA5171F1A52EA62AAE - 28: 55EDEAC9F935ABEAF2956C8E83F3E447 - 29: 820B799CB66DC9763FFD9AB634D971EC - 30: E14B18AB25025BF5DF2C1A73C235AD8B - 31: DE9F394575B9F525A734F302F0DB0A42 - 32: 625ED3B09144ADFF57B6659BB2044FBE - diff --git a/notes/lrw_tv.txt b/notes/lrw_tv.txt deleted file mode 100644 index 24532502..00000000 --- a/notes/lrw_tv.txt +++ /dev/null @@ -1,126 +0,0 @@ -16:931b40b97cd1d1338d4a4abdf96d1f45 -16:000102030405060708090a0b0c0d0e0f -32:85e82fe5e8b426cf04bd96d9aed318fb5dae89a1dfb854a09f556b61c5ac918b -32:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f -48:dd7aad6c6d10176e25eb97e165ba612a2b6275d97667102f20af20ec2630c7ccb4f5772a3e009948f1ea91f3bbaf7e04 -48:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f -64:338509ed021eecd249cb15cdd440a84ff9d6704b99e8e52e9d057f152b742a5e3b9c314574026c76fc887fb404a12d669eea9460c1fa08e1867c2c0274408b9e -64:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f -80:8a9cbff36874de7da3e20e9a26691eef944ff78a72341515ae20c2199688ff92f039a19dc6d517e017ef36647834debee90bf80ba20a7caf24964bcb0bb3a621f8203ce5428461d3ee72ead7aeb201a9 -80:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f -96:06eb66a88b9667296b8644cda3464a27e3e2d8b6b3d0a9ffbebfd48f3967952ce161d8867900b0a7a44638a6e41b9a9dc53bf183a85a4ee33bb6f6c2d64b8cb54bfbb8625ff5cd3965aa08b460737b575da0b8f4123751cf8f0ae801c5856712 -96:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f -112:7af5a2b1381a8bc5aa2bdd4370b88d680c34ba9332d1d9f6e203c4d9fdbf5ece39fe5afb5871490a180c4b102665823dabe1079656f24969bf84267d3264f92cbbc610f26203536d387333938d1a52f4076df1aa0a114f3b0182da12c3a5d87bdc8eff54f80b0d56f7044ba372ee6366 -112:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f -128:814fe82674b98d54671869e3fd705f76e353761bf61cfc635fbb23037d8a0e0dfc13c6c0e34f8c79d4444ac314d4918773265b3fb5866a997e270d5ea8891f0217ec6749df281d790dfbbec8adc504404cc0a6f11e91d0ee6c19abdc67b0c22ea4d9fa218320a694dca53cf522c761e426e0cd57e49b73a5d765cb4bc571e888 -128:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f -144:9fab9584b0dd87df42f07513edad3b5e3a35b8871323eed63a48ded1efe4308a9883579f3a7ab830277bda59b1f1c2614a2cabe11cdd87689c0bae80ebad02b76d9300703d0268e0eb052d9956c5648912843b16be988134cfaf65fa87013ab960b190afea879897f1fdd00b360b6bfc6cc3531285682894b707af5914d2d1a136407f869ae6672e096ad7e95f380d53 -144:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f -160:95aa16e637f1449d9012237f5fd95a57c5a9e203ca0a9393975e5991cc568f7ad2af3266ab605915af277f4395aa312586fb28a18f22d1644963233e1121472980229a3941c2f24758a51c48aa22b61fa4310ed2e6175a71bd4058cdb070f2b8289a46a39636dbe259eeff3c87f96fc8d46961aac54d7a8491b5d713e6cc0d6551b9e90911947d9fd15051badf67420188c450f9916c2edae245f1f6a67e4f5c -160:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f -176:5cb782dd9e2391ab54378121d0766afe6d35ecef7a2cbd85ab04ea82b06b56ddabd311917093ff16bc1857480f84049d89ec6694414617b1cf3a11778c1ccbf22b81be5f07ed6f978df5089e54561fec53de95205ffa7d573092688fce92cae228f342f77c50df87404d502a9b274bbf3cfcaf4e94a1e8401630e18b79d048a5f3901abe82493d911d385890405bcaf4d5981def670955e95c546da8939aa68aefda56b37abd3bdcd466605f9bcc5931 -176:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf -192:e9a7781c750910f265e72edf0659d76a0db2dab863f43ca313b9e67e8f9f97a1ad8ced641c6d8d889ed2d38caa7887ec2eb9242093b39d4633702731b96e11da52b1a9a584d2367e6a0e759baf902eb908b4432ffecd367ff1fde454d4af844e9a10cb260ae222446c179dcc82b5f767b941f75196e8c4b210315d01b006fa6b5f1faf931549044b17b33f567b729ddea115c7b11c90982e1480101e98aab23da6533b40777971b4afc3815d063ef175419dd72bddcdc6bb187b3512c3bff56e -192:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf -208:8fd33ac16f8d9bd2ab24d1d26b267f67222b9309d697502bd001bb48b8c3206bd5c98cc1cff788633cda4edb5aaed2055435c2c092a7c655455d1d01a6d7a449df870dd559e9bae1e0fb0d6e5a98679402c288b87cbda569c3503b4aa9403f80c835c995e3b47e33c1c5b8321e8db1b72955ccbdf640c78aac376ec449396b163b8d16b51b0749fab6ba71d0b563fef6e94702f35ff2ed180f0de1f86679d8f2a26b2b9d8adffc7ad11c5944118e30025c9be26431f130aa2bc238e4b0104ddf9f82630ab7eea590bd7eabb2da745ffa -208:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf -224:ac2daa6b330224b6f146ad67edebacd98cd2269d0cb313fde49d85ad60f9b21c9926d411fd435be8bd073d294e905acfccea2708f98e05cc9ded3c77e684b671bdc59deff3b43fb931381b12133ce386a0314a939d6c4855bbb7765adf955f4e587bebaf6d3b8cf547b2feda60c326e3409833665f61d91a2451ca2693bad6779094e010a3804993d6078c1ac3c2d26d589a8b3376dd06241b3139d2ae603ae5c4829c297f09a5c535c37998f571b0e96855e7a708d7b2ac42659050547c7bd447bbebad92e98b203ce6e83bab8e94f232417152ac6bfe8f9982012c8f83c674 -224:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf -240:5c4d34448cf5b5b385a8aa9e504d724e6e689a35ff36143c20fa16df16f74347df6b65ef354c094732fe1b31e454e319a7be20dc6df4b900dd6527feb5b7c81a7a40df73d513cd40a5e1acfda4ba9e4fed784bb26b2719899c60a54bd8c772f17c95e6100c6def216c9c612a10db62a576cf45392c68736466305f6cb86f218f57b033c3773d0cdd9827f822cd480b60f94d32b28f536e6f0464e63e84294f0c3ab088dbf0efcf95b020f4c2ddc72c5823c2182025cfda510e1a944ac9316f0ceaba7dbd116cef95e051ca9143eebd575ce53c26cab9aa897167d500fcbe229560a85c98e83385ca6befa90726e768b4 -240:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef -256:46d31a1a6fccbff0435e1811a4851746df2af5772dd0408fbca2b3603cc4f92f778dec8f14daaa6f081500de55d036b3680a8a9b6c50bc20eebf09e35036bdef9b3751167e807cd1aa70385ea9f4be42ef4de6211079eb0cd6c3810404a60f09dd4e98cccb09c356e6b4c4cc1da036bc82023b075011cad2d01bf95fc45829c7af484f92562c2579bd3b4dba3967d5c6bfdb3e2236c2b43655e6393cdce8a2cca0affb8e45e8545aaf04049c2789108ac5bc6bceba18bcb9d4944ed81a64ab43e28e28207268464b99dad7328db0059defa25a722cbfaf89e93a20768bbce91b64f395a379ba5580a2ca4ab2d978c6ed3aedc9f53896bdc28aa5f1300473a3df -256:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff -272:96a46190ac8c56cb272488d1db3a6153a4be7a298f200eecd42b0657e7110e879ddaf12a782d3f946a283f23fd5fd98ddce5874ea645e6581284d94c5437a4737921fd1504fded721d9a12c9bac8d8feda0b1a32a5a04e3602dd3befaebb161af6df1590d280ce09fd99e551ab39351dff8cd85dc084920a21f49e726bafdfc75e1cd2c42fc8789edf52adcb8b8f87b0b7c89c7e80fb8a14807c96912fa125395d71f631cc3181cccbf435da014e47c4dd25640cf7953787c3fa2e9de4a867d61cc398724a94b584ed336715ec92a562215bf36c193cf2356973e60b858d3f97a944d12a40173218f0bd2e565833581e51bee580e3b3430b3d41d6d6788b73ebb45a22a548456f393f24999c40136688 -272:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f -288:4ea9644990536525105792b735e1a9adaabf7542f8d30f41553f756b33fa90051352939fe2693be9e5e482f9a2fd0ea00ec85abb01a56780b61609ac1364b22b2a1f7b061317995c1d2a8bdd280a7735d1191aa6c546516713577093f17b5696c9f2a2b94b766b5a9d2551891a5c17530bf953aa1dbec6a9560054534163c26973399b128156af6a257e0c591b279ff376d0e2464b06a464bc5e5f3d4ca309ddb9fc96d8c59efe0027389e25aca9106b4a6c0e8e3726e26470f0aa59ecbb1022953312bf5a09db75728ce455f63bd328437622bc61dc5f703e7e0d49a27ccc1fa25439848a1349c7790d1920f465151318c3d27855bd953231981eb903bde19906667d26900e2c233330fa0b6c157db37d5b7c76fdfa7a7e1606045e9a18a0b9 -288:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f -304:53ef1d7350ca9c52f3d53b1f3097919a4e49bc48d2e63c571abac2f19f16084b16308dd8cf96f374fafbd1ac7b3f9cf3b9c62af25563ff09f419c94f0530d43ddda8396d99010c861c92d59b3d03bb8423eea55044053b06be07fdab392cff5f85be8119ce3e3783cd03923d28bd6cbecd5620fc2465a9f2b1a0850e4a6f35c1893819b689387e5bd2449aaf8b1497a598a48595030a00b92ce357509f259690823c0d1b710edb36cae8b7653afc183f54b1955a56db65929df6b29880e99eb68581f1e41141ee697c1fa565f0d674a2b9f1e88c3f370d1d5c564547370e73e2f475f52eda167bccbcc19405e1cdd24c13ac25bcfa3f7dd65e233e059b18fb420bdb52969816548bca83ae9d392b8ba1eece0faea2a4d965e46e38c3acdb00466892c1be69ed0e73ad80beee0cbe6d2b -304:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f -320:577d305d82d993adb3fbf1e91bbfcd6d9fd9b7872420dc418825ff0bc791b12dcc5fb56f0a4396131f989cebb7b07b67f6365bf120b15cdf7c856e4ffdecff571bc8b04a10328811401ced98c14b92d667d89ef0f413d2472d039931c33570bef3db3485b4f018bdc771ecad8cdca1ace0ec948591e98ce1e037d33ce00326452fddfc70a340c73b0886b43dd0e9203c11c025af0aa2ef3e3538893d6716574f242657cf1bfdf6d8ca3fabb982866d04554d74a9495f178b5bb68d2c2d026b82a1d65a2a63a5527710c305d6b54e830baa18f692dc0f29815b7eeb717c08d49b696af80db2c05481aa077e52420cbd1ec47c99aa82a0bb730a85bff1a8000c1735af09ac45ad3d0088eaf52f5d42ba1337dfe3ae956d6d7899ac949028ec0f5884ae58d949099505dc9576d204702d9b25a172f81a041fea4e8744605ff0dcb5 -320:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f -336:cf3c36fbf2b8d72b6e9e8e9ec871117b2d4dc814e3204a5aa223136f8fb8218245dcf03cd81de80a4d35fc5d0a4f8a31a2872d3c1acdab0846c89bbc8db6f31436741f6e3f21cc1f783bf4eeea9b29415eab9c1d6ed94dbd391a13ba98a851ee0646a378a8d1b25d56de83049fa5ffb33ed2c5f60c6588eaf8e6b374c43cf1aac153dd63951aab2ef10923889af3192bf2adf9eaad048eb8ee3f81916eb589974b5152226c5d1e6f516a82e8acfccbb46ab14d5b901a4b9ad23c3310b0a2d30f0d88d0852e67fd7391c64b9e57800d62d81695d9450e135c9d193fc0efcc8f774e0fab020dff5d0a28390dd4d629f5492a544fcf04811f2b0e3a64d33c5eabc43a22a97c698390d53789935aab90808b091211609a5834ee60da7af6cce5cfe9dcdb438b9e8bf60706696d0a95c5e6bfd25921dee98c47de5d7e4cf5101fc994b062fd2dd01a176358113bafa404bbc8 -336:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f -352:7dfc531b8d9b4f8a084ef0f6bca81ccedb88d13f899c64ddae54611d76a0f77ca27d3745860c79bc944eb854738a1c5a1d23491d19a20f7fef3ac6391798360eb210874cec1cedeef549726e533b223a3f3b14d4bdad059920910279ceb49e70c87a84f1901125327a9929f238f5361099425afa5d826c82253d94d83cd291947a7d54dde88aac734d1df8de1f125fa02b6b0983cd8674bf529c97929b56a5ba681c7279461575a7568c7b9518d95e6ea8faa6ab6b4dca7874dda2c8d2cc72577dd67744873da145bce25593511d0bc3d67bf5cb61f9ac53e04701a1a448e80d692fb46651e45b65dae90994c91b83ba4c1ec9f7945187b9e7c31e870401f5ec8322d0a686fc2f9559279de992171957719004de602a7da9ab63a902fad8313b60fd883781aeb1c8d5b99c73e417c821f75859bbaafad40ab85098dae356c996f4274b198536262b2d26b22216e79ff3fc707fd197e1f39bdfb9acb6214d9196 -352:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f -368:100e6e817ed865757039f75eb6d15c16c5478784eb9dc70f60e3b900f60fa925404e09e2cfc0450bc89bce115fef62de782a2d7725970e7fe8226122c1ff9ccf142275d4f37d011ca3aad5700e2e8a8d27c7553e59f8173c8117d813e4d237bf906e3499306fd5bee0fbae137a372807caae0619caee51039049a09066b62953fc5bf1213dac7da86b4418cf3bbfe046c1b9fedb6045ccbf25617ea52e2b6fe2cf9a52ed371f864197fbb3ccd27ff2d0e2e7285e29b21632111d2ebea0c8f1a216779aaef98346b84f54fafe46ee3128020434d0fb1291e07c53bdb236e3f476199647bd7366a72dcdb5484e2439257ddc5b2d77b3c033e068c32288d94a72f2c6562c7e1727e4f60fa41a75f5561c4c15d5997db99471ff68b085b39d5107003927dce0060b1926ed8e9144a6ba6d907ecf037f8006936ba536513fb8122b82214162b7735a16f72ffc4773c32c9d694827c3c2ecddf742766d2b742ffba674a04c3700ea52988f6e265925cdcf4ef5 -368:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f -384:0e2a132eca216076665bab6f3d1f222a9b502a4830e7a67be3330fb4a4cbc1f2ba2c3891ffd67cca8514739848cd90354e99e489235f380b3727e74467b5579ab2c3661054eac7f9413fe1f5f9b8b54f25b9eec5f693025d300bc70c607f074b640764d91230a6a9753bc403a17009e201cb96b57020b527d48943436e4fb717a5c5ab027e239cb508115244f1ba975861c0beebbfa6a7ff1e47ae135eb2cefdd8976c48ad71ff19549164d22df54044abb8cf86c7281035c00f471514762b6224b2c06cd496e149fe43262c554ba04735df40ae8946a59d87d7bfc4573e5a1cc4bee53a4d33d301503955e405c47cce974a8844ad1990c568dd07dcc1a240dd1dba5f4ce864321967870acf941535926e5d3b511a97924350c9019313a56816a1abc5c51aa96bbfdd2c7837a43320ba964d047fe5d2db2800471679663dbc8afd4fb8ca4d39c5735281b9a668b9dcc46c4f45881a2c9f841dc52f354d706cd32ef5dcb4a9f2cb5c1c7b4fc9e2b56e14fe10a8492f7137e580b6f117d1cae58c -384:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f -400:0195b4bd24e6a6295a3a6ea05ee7717ec07eb6eab50bbac751f66f6a79fc564f7aa1bce8b62b87dc25e7b45d52ff34f4f9d30afd0eb33eedac4eb19241fd80dc05ed8265974d1ed3df48c2e027b77866dbc235536b48ab50f628635a95c4430f8c237d647fd588e0318a5370ee6342eb802c6e584983ec6aace4f486aa05e4ae68da28307cd64f1b9572ba59c0c59ecd198dcae3d6d36e09c80d10c877a88b8779b934c6e39dfe0123c922be796a5d962586b54f6e9fbb467f72534be73c4374a7ec7c34cc1eb3e3934505d9edde91c210697b2e550569bf6a3e1adfc2db5d364336c19ac4dc17e3270601ac88f996a5efbcb2d241a1c7acc8ab4a354533f912c9e51ba898bd41f43486290fa32b36a760de5df0c25d5914f3d56004920c6dc2e1724a95eab88f61cfd154dd47fc8b62702e7780522938fb9c035b494a0ace5a21c09f0cd465a834a61c4c979b093a5d780141cca82324f3dde77f45efbe46d3772831cfa93869d144740bc4d0948bd60df373ea24e4be876b6dc8a338e1853cce36b9415ee9aa9077c4cf9b2d482f70 -400:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f -416:5c3985f375cf6cca081dfc118d4460208446d21d3f3d100e883222cabddda538115ccfc37f68739fb6a1649c55fd36412579ad1c66908b87f252cde8ab32386ef68c6205c8994bb7d0f9e0fa5e1e6d8aef7064b0432b1a03b3dd4fea645aea15216c03f58658df21ca8792fd2253a2a889d1b223efbd60e10890676291fedbdc91aff403cb98fcd96de1d1481bb8103f157780ca09ab5490c79fc9c60fe91d5325103441b986af5e9a0e323bdc98150e45a2e7cd20997c58a561c8698a64e7734ada60ad1669160f92c07e56360113adf699c25990d0172cf67fa8e0e4a3687ac23801badd498c7a1a411ffb1f96bdfa5de99d5a4d6faa8feff99f624c396029c5605927ae0b7315dda77d092d6e37ff885669e7e60a823fd06a457785be0a151786fb0a7a3a8b67a4cf47788ff8768e24b38df7338c87c2fe3919e74e923cc8a4a3ab7a21db18ff4672a25d3652be23b4ef02e958a77d7df0254d7d54f6ce0f3a4572ef675782d0a9083c6549304cb302a03b5692137a2fd65f0b5a21eeae19c6535836844445afbbe2a236ec3fe26b7d7615a4171a6900620376bf27db1479 -416:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f -432:de81559812d2938cba8075ee1cfb7313173305486f59e53abc00efa276653d6cf200828615a9f51a045ee94017723aa431e0d4252205f8b45afce15d3654fc638bc32744488e97f4f7b9958694d40403bec42a1ca97011cc166580737b6fdd71843b8e9e876793858d5b7a06da8cd7bcaad4ab2db8a5635f3643263c9881a9157e1ad82c2832e5894630dd36cb9c65dd7faf147b57e230b5b94417aa962a3f63bf1594a99adbbedb9c03bb9d1a728614032946ad9743c514948b3e01ba8099954dd5e3a0c157eee3e0038c8254fbedb10c685d89cb0555ea7d3f7bd5bce22431bb274ca8421af1fd9842cc9d8094f2289b6e0f4eaa183f316a203b1aa4e6f8008d8576b5936f715ccc584e4ccf1ae81ba5954ee4f5d78ed17135cb13af0484f3664a6f9639a7440ceffd5ea60cc5f391b7cd7201b0059e3391eab6cee0e9ae0ab7c4b7e6480ce7f315b84d8321ec4d1a33cce3ff8dfcf9b1299cbbfee9a5874ce5a1c1dd89710a3119c1d73bd9795d85ff3a01d88066a7b2377738a2247f3cc02072f0f3ea2e3adf463c157e9d662167422db3824df31c592891474fd4d0268e0c64ee9117f6fa02acbbec532d4f9801 -432:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf -448:957c2adc952b9187cc7da773714fcb6fe574a07684c3d5d1e2d633354cfe248406b95f0e9714f276f156d97014cfb35991c359e07464b55ebf67f745168b386bda72f0c2df5a7f830a5e4629303443181cd43cd8d30a415cbce0f503d10a0f63a34eaa3a7ae962111caff5fc33d012549eac997290ee78f4c9cf95c148138b60734cef0612983eb27a160bcf5434bb1e3e6a6c100dd55dff25b04d738bfcedb84ae2a168f3be9711bf74c0c61925b61b321f90bed4018f0798b6aeb99975d26244606e1b5632ad1c1019d0ed0f254273cb6a48494b92e516dd1c90b6e48b407179fb20426ee46a8a0771f1bd67b153bd7625e76ebe052d33137ed1cb8b0574eb7c93176d6ad88c5e4bc47c8c9ef4bd54a46fa8ff32ed284339982a1aafe3752648c55f01f5ea80c419aee39b0590de39f0e34f382e3463bad7b42aa17b5eeb2e5a4ca06e9dc3c254cceb5567acc56fd6848d5d6b259e79452423d1a541c6cbaff928039186f51bf1800d859ed932977df30fe28e00117c1e6e8e77a0bf7ca69e264fcc96c1f75ca677554e9aefd06ce97ce5f0edacd50ef8af9653ec3650dc78693a483cb9686015565ea96fd0c36c13d51af320fb8ca900802ae94fdbcd560e -448:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf -464:1b30a6f0f8275f186d7dc2686794411242cd55389a35c2a8f0d276138b9c1bbd2e12c152def0bcbdc323bd3e3b43fab29cbb67f5ffdf7450acbd8c4844e17b196d68f0ca6c0075bf06b1561432435687a998658d62d2f9945ab9d2a2b9cfd7d4f67bbf4c536ea589faa7a438e3cb0c006a2bbf2f90c139793c6cb41be18b4948841a2d31cff96b25ad0f1377563a4acb28f64efa006834c3335e604d94873e7b8eab583f87c5f4e096bb27f1c1af45eb906953acfd7558c978032624355fb2421a636ac6433e7459b61b0706dac2f4bbcaf18727dea1f6100d34eeed31d2ea2672f9dfc853e408736b1cc03a6485496b6cfccc6f3481b2cd05f5569bb36456970d0289aee8c0442cb85b0659efe9872d5e7eee0218d9da684ed0f11c489b49f5b974d1a397bb31e15a9556dc1447018a4cb40f1e13db643a8769e4be78e22f354390563a7a7334445adc5e70ad26623d248721a0e3b8354e526f573f8a292e7d568e63fa38b48e0a4ce7431e890ed19b3f824cedc84a050d4d2a7818ee26b8ea804700ac840eb4bd3a4c1cc9655380d13a86a69f03f642e7b2337d21116aa7510761704098bde0cd6136cf47858a26e4a11649920fc2cb21a51f2f9330095d9de06b5d72b93a67a59ae3fbaa4652b82c -464:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf -480:8140b529f455d70afc9ee6018a2e59a1ae060ccc18908f3b0ee9e8efcbd3f0124123252c5a62401b3c30ae2843f4565f19d6f4af186dc35ce11fc8d0d23bde67ac133dea138a5c27712381f148f1756228e0ae06a0795e8fa3e8437f87a6f34db3edd5a679d8b93442e9129ccb3bbd2e79d4e01d57caeeb085b5cf24200150bfa76047b850e96818faabd768ac5e2dfe210846008bd76d956352bcc5600fa77c044ec582c17b8bacbef9075e9f99a2f58fbf8f102825786b6785428f4ac15756c7190ba822ce5c0c571940bf77a22474f8eb6692469a3faf69694301d5c14d92d9995d20afe38b9e58aa6c0bb59dfabdb2aebb0e7b11bd2eba1cfa05ded46cf1dd1cb174dc76ff6784d06f6062fb58a7760284e051cc1ce1144643d902881f1a435130d3a5d7b2442fc03db9896d6d552afc14be38263c63b24659fff6e115b795aa1e1d6415e67637b0bc095de9dc4d464b9cc00dc47cbb55b3b73f3ac03a8ab933be81986e9739c79169e51bb90b1664320193df2368697afc9e02b9d9ca09d7e8710535f512c17ff24e3bfafec233f799999d8be0bc8f460fea79d8459ba17d4efef64cfd90624864fb5b220bc3b77d21a3db10fb626cd8539245398b008c93205254a60c73f9c19f0ed4f4152311ab1743762d859b29af7807fafa815fe9 -480:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf -496:569e7fa1c3fb86f2f88b26de0fbbe7332900ef284696d3b04800b0d81d09eaffece090063c472a180f237b2d4e51b2be3f29c361fad95789ef5f1fbb07059133ed74c3cc544032021d98894be3202af6c77e43f55755afe31ac5b9e5d73d1aa8ad059a4efb9fa10f76d88ad0bd792c96f804254566d4c86949027fff96a5d05c673eecb52436737d329298922ebd45d77789104c6b0885e742e45c4d2fd283768377c09a9925b3984828d1a4fc9bc2bc256b28a2aff31a1ead319897441fccc4b8f3f2c82e5c64cd82111de146cdf7652a8147076d828f1c50b67e2d060deecb9bd2b84a8ba13f0a65fea79a0f47af74d3f03207a191e3a5c9087994846cf176063c196b77271c7e8560ab28084fd1e394d9c43b07deab40c48c05eecfc5ba42ec6d36724eb30ffa5e9904318c1242b0b113cf0c7a168da9197abc2a083f371c526b4afdfe1f1424b290fb2bccf48a426c8f321663c767e3708f37fda56968f0b5e787b67d366828a3cc16266268d92c8afdced356463dcaff0ef568c87653a308c12b69649235f7b2eb391f6c54df1e96451419bf412d2ca0f6d34ec92e04b7bc618ccbff4433e687dd147c5b3fdcf4705078adf5d7e370ee992e021329bed281d0c086930a3661541d67d4af188d882ddd020cdb7bd0c65743ff41b6fc7fd75237e02e7d6dd8083afb544080620c41 -496:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef -512:9821b3449869f2cb0ef0a24ecbff9b33a73b3cd54bde63d343c426a36c68d1d166c13d02ca4d65cf78e953361a4d2a4035fcade9f3d35d0ae1cff5b85f1fe5c9f3a9db9dab6c10b8ee7542944c84815ca990bf4bcd7062a8013bf852ff3b781f60e29eb9196f31b0e9cd566b7c906b8d930c4d4f410793c1fdf7c8c8ed913469c2506ccfa1c029f383a9eee5a95f18ffeb1f25084c62d6c9fab1d67213efc1ff08f2a33a20eabb520d6997803ffe382ec2f1879465c8b166b045e8ef6fc27c8182d8969419291fa5641afb45ba1600f512a612e7dfca4f71cd63c5fae50a53fb305650e3805428bfb6689813e342425ac6d5d13c9575b629b9430cbb21bfc41c026fa3f8fcd9677bf9bb7cc14c447706a455e2d5fc90a80ee635fbaa589e2f50d35d1a1d5ded77bd970a1fe32f92fccae831c8e540c5cfbad2162dd0683160f0d614fef933207b4ecb51465ec0063ab31243c9a23a07cf0952b81eb02e628b9e53ed0c27d720f65be8f38b960c0286b8dc58aa11905f3d3c694d364ac0997e6b2e3886a1a11b357ef0b75cadbf77acf015b4cf6bce508f4c27f01048d2f4d811e39ee8501d4fb6d69fbb6159a6ba56629e54e798e872be33c191750168af7a47dfefd989c65f6b2ef8064aef83e2e902f68aa9e10a7d6ac4a2680dd0913aad62b5dbbe2f51b46bf64c950caee3b66f6e7857a64d9ccd4518d955f24a23819615 -512:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff -528:f02604963d9dc47382d2b835494b8591deeee437c38d4d23e643ef3d3d3d3d87a6ac3475667a749ee84cac055aa47b531eb22d58cfdcdb395fccd9e34e88ec8dd6d4bdff940e321899b700572badb5e44675f7b425a9c1c1969df684a25ee0974c8a9d5e801b5cd70976a6c5af27937c784f4f8d1c86ae1c265c5cb38ea1ee18bca93ff6019f1927ebe203514bf20548c7efc13cd91fc292e2c9ab9fc014d8371d85a2efae108b2afb8bbafab75e7361c99925a19d83f3d7fa51c0274a7a9796aee7451e783976e679db97baadc4aecbc9d120e01719592e007195dcb7b42439c5403ccdde0ed0ad21a7c5a2798919abe81ff72a2baa033002fe25070e14f3417e7076847e90d21ca9a7fa82b45f62d2340bc2aa729616c83bbbf2a6505f860ceca837c479eead3b18f50f88a63f9582e517b4bf51703e42c3f473f901702d3eb4dc25097169a2fa95729f295200e13d05567e5132268b3939250b8bec170a90bf842c8f2b680fb7dd6bb63bcc1ade151944030c0a58b278d700e3460e9d9a7453f0698de6fe4b3104f048d0d3c2bfd6d71c86d8460b95568df8a493f6e77e1d64b158329bec6ec126a24a1d3cec3beb2749c0d2f2d1c9d03708d0f0a4faf81ab0cc31e31dadba6e7f453f35978d49bd026c145188b042da98795d884256fb7b25f5d6e8ef42c927bb39c921d1e634bc94539076986afc5973e98bbd0e466b2b7e4cfc7831fb0d4da70ab31dd9e1584d -528:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f -544:ab5530701149690a9f3157b9718fb392d2d2c38e57b588c652a9af8580750ef2da9ac7f28442a1a3acc2ddc06e0cca15a6ad8c5a253c0cbb307e7d89ecd6a9d5e72c76f2589e11706713bd0cc4bf524fb5ef3c410eb88e52ec0e52d822f6fe14d744a09ec110171af24ce27a8f116688092d7a7123c2ae144fef01f277876e85bf0bf774350c92c7bfee5977d71f52a0d395003adecddcd92ce6e3a6c73b07786db829396479b10b92938c7b788b897695f74b61bec738526c02865b15ddb8d6a927840fabac0fc2ccbca815ab58689eb73adfb08d6148d9a98e8a5388aa6502458ebf02592178527681a12afacb0e0e1b861347dca374eb38f31d86761b5d933f182cfb3aa48cdcf17f08cb9563ab8928e6472fdf43143454f66b626d4e69b1ea0698a4571387e99fd4ee16faf826c3a5c1110522236345948c594c20e3a61e530dee291b79b7cd0e2b0fe7d0180ba1162bc4b3b1b3280dca81fd5a9ca8a227f77cef89896e5c664a75b787f45e9693147776ca8ec8ed99ced39920b813ae9e1e93214d8cfe5c168ec5f07fca092f6368fd952d0d48a49600fc0b3905486140be1fdbf142d0cc8da446d2ed4b1b42f09f09d3cccb95b50ebbfeff60a1f5bc44a9161ec3bebb94504b70fef1c36035a89a866fb96b12f122d2e5ee5fe85b371223f95664b7737784c0cecea980fa711cc263446be48c07e6da223c4ec856004f99b0b195180187aa73ad3318b7b23c9002590d6b42fc57e9b0891e70406387ed -544:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f -560:dee4d7750f0870bcd16faff4d65a5593f5d86f32a6ad7a519d6b2333e522dccadfab7890d02a6499d6487302aeddf9c52c929486ffb44b9ea9409a940d4486a379b0ed04e00421f6e43e7393f75963e68422ebcb2b87eca211f671dd713d59a6034576a4feb356eff67f33081f7889c684f971a22be68adaceb35d24d1947d7f5a5c03f66f3152dc3bd70f59e172879f50da9038a115986ada1277014958b2b19d8a158c097c3212eab6c6c0e97948ae15f146a245bda2495a5a860da0dea32b7794f77aa4bc91268076649255fb138a4ed831e659a1ab9761e37bc13839d1f419d7cecbb12bfa67c53fde957ef5f5cdf43157517f8021e89eb46df4762cdb992a9285c36b6361561dc469c2e9b5bbf79fdc8779627971e6d6a74e40fb1961933f182a1b270910d7604a680d5bfc2e5f66b6e4098a0b13d4c9b923bb56713012bb63b7a5cd1f9f1a7b42a4e28278e5766a3e484da08a7538fb1b27a15f7eefdb5fe28cf6297d81ce7c464b6f7373783c7d344334beed713e325e1429bd7bfdd1610efa551f0c16a6eee5b787f973a0110754bb681de8d17830996e993a360e1585b12ea8720fdb3227f193a1963f0afa7d59e303c27c70d37392fcdaefd5b85d52c2bbb7f19b3146c2165e35bda3b6c23f16e469281e10bd351a533edc370388a07e63f02b07db8569b8760b7c091529907893133685aec1cabbb8e06752f90490ed49fe4cf5d580c0007ea7e902a71923029237fbcf965859abb2d14f6c89548017eeed6d0d5614d131b6512c74b407 -560:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f -576:a1d36653fed5f5d40d1dd0873a07b82e673c63f30f6d7c895ec6eec7fb1e9fce1f3ecc41032c94b3fefa4fe98f66baa353939c796be30cc1668d195eaf5c8556c1a00c4dc0d6ab65919a1d72950231c8969c5b02b7f22b70cc03fceaa39a5adca0c9ba1cfd9bfbbef5d4dbe74d3596659658cc5aa1709e4d60469600324514517e90d203aa7eb44612e58870e3acec3b8c969f47f90c2142128a2a47ac3d3247c67fcb051c82f3bcfc98dc5fdf5bef407e369d02f23d690f62cc5e41aeb2298bf2c971a66744bdaeb9832650edc25d09fbd1314a5d84477d7e552b81b3c5731b420eab4d679bb84e765ffc5bf9b4d19df96b22342ec09d808d509fe8c4d0d40c3ab9b1d40040b4443555d9ce9aa04e216567f05ee286c811c9daa6c1dab198bce81e03d171305f1423626132210f0143a514daa926edbfce9a234b3100590196c424fffe738d0137fba0532a7b9b4dc162b9b406fa06840e49b0b9cad3ef7d71aa767b8b2fbf9780f1369d6c5b34361f403a3516ceb2fa0a89bf1821574439dcf42fb1328415e363d9a306a3f720e23eb5041199edcfa10b865a9f5a32009906512202bb4ed532616b956d0308a0d713c6adf20dc03da7c9b29c9d409b2fbe3c7f30376bace8a3156fcb384a62b93c50561776fc6cf16ded8e968b27391af2b767ac890b57fdbb7d3a3fcdee5467badc7c0d8ce59a17129a3672c37259874b85202902b11a3261ce7a16b3f830d36a173a8dd3623db5f45c233c6456b8a2d0fdadb16356e5c37afeb7f473cb4a55f39b9ffb0e4fd96952b75edb5c7f4648250e -576:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f -592:4231efb1fe07daf9ef1a69137769cce0731aac9aef27cfae5b60094e8e8550cc5b83c31efee907f5aa9fc51fbffe785d7d70ed0b93e918b4d771c7b22dd72b3d78e7eedaba9689eafd5d440897a339a2fd814651166f74636518affd53d96ce9b6b2727cf3b87c1a7e5ad7cf839b244bb2561fb3955d848131efa937cc8f61fa8820496b779498ecb3a3ea1cb573d55c11bcfe1f21ca95110012be5f35ee2d224cc284062b27b5ef85abe933f8bc5f1acb40b2f42b24db4dddaaae33b67653145a2c20ec0b308cb7f2e1a4110033776cdca32115a2022b3427d73d1e3895c9b6f337c6ba7efffc63bfde50b2c43cb6741650a4ec6a742019c65581a6d45f8d62f62d3da161211e414eb6af9894383615b4df3d1ac5d5d878ba72087ae03530013b21d56130782acfe0a9605466085a8c8b8db96827ea4039a77b1d7b95aca25167d37e6d6ca8880da08588ec7c613f06d24f69c3e8bc1f0b9b8bf589b7010671a9737f57eb59e76523b9df0a94edbb85a5ad91a7bc58ac0df86e6fa68b36eac485b497a170bfdd798e1032376906d0b77dfe9335fe47ae4142dfe9da9b3d946af220715dfa7adcb0c7789e4566fb9acad513c054d859ef309cec2a196a5407902ae929aab826cdd056f70a8957e7e001a63522e579986f542297fe07226c946e832554cb4d8a0f579891abd54b7ed12247ed880574eb62f823b42cca3418fd03b9efbd6e490e92dcca2409c1e5530b9a02529fef02114f96bc0ee7739507b22e48510221e218c0bad525dec6a2da81b834134ebf0bbad4638d6e3d781db3335883256d1964bcfd37391e84d128c5c7fd -592:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f -608:7cff31eeaa23800d7147e8746ad4e2b2e041a68804786f51539d19c040c4529d2c8f3a9eb917505eaf9fa09c8ae6e0d8d8f5c341e4f35f0b0f9b4ad99d7996c140abe8adcb81b6c96459f62b7e24e580614f6320b9d9a2f791b7c2aa9de02f0450819411e80cd62d67ab56f207441f823e8a40bb89f41fbbe95e26359f738ec2c7e418acd5c054c18631d573aec346915979d8eda7ef287b96053e6b9ad1ea683624fd02b3ae6ecf0db342a7e5c46b4b39f5fb16a52237689977c1f2d310fa7e940b9a7c6e20beb9e7a8c0727f0c7461dcb6fee73b4444822776345d7db060c7ff761e2246250b2d7a48e4ebd1f084fae6906c3120f59b740ac6bfda70ac6e1168d4572ca2912f6891d33a128e439bda816691e519bef01660a80df5d6e7108b7789950ee523b9b2ac8d998dcd276ad09c479265fc9679008174cac18ab8ba38f0ea3384f3e623daf1fa7081d042203a4777e5a245540bfb1cda88445f056d4668256e719352a4cd9d02cc3f0a3bf24153aeca33ed0df4ba73d5453a40e79a4a1ff462b6c9b3f3a129be2d27f1ee31b5675ad4d9c1a4567c57d039badc19676a6a029881c6c30616a8d32b6af83c6a3fa412a6a383af1f6cd38366c1475670dc15a9406a22e33ca2e149bb7141b8e39f1e437a13cb0ea27a9f73f7f01a02ceb8ef6a70de8a33e68c6f5495058a0b5af933bbcda9451e93f6e8877938ec67728d48fce408e803351928ea05f2d0d53ead088eaa84c2ec158ac9c036ba602399d542b687e8e0c80f7ea642b09abb61798e54c54886c88eeca627a8012254bdecd763c906e4dc7c31249830278dc4ac6a08cb22eb2aca2cc1bd54da06376e741149 -608:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f -624:d49acd3a39ebf5002de6a7e435cddbc5df1ee700d41c4f8ae145882f005aa149edbb81506056755bc660208b79ce20927d17f8246689174e22c9e5dc225d86924de4ab1073d6f9762931ecf002c9149d05c715b05d7b56dd0c2d715aef361084073d55b126a9e34390f49cf66fa1deabe9c1191478659be5509462b2bf5c0c6490c4a97aa9343403b5056de209afe24ad277e68bfe19c11e4b99d70bd7f1f0abcdd80ec552392b4e5b385c25e9703c992a340927fe1271dcae11fc44a1060b77bbb42fe8fbe92cee73fb6231e0c66747c5dcd0e407958707745d7a969605c5308ca858641863c8546039bbf78e54178dc3445285f6c4cfa1264ec44e76946b16c7d1fb40370bb7681cc5bd08f1f325517c076b83a0fbc9dd82cc6b4a5fe145df1d206934333f04940bf403f6a0ae6bf2dacd9d240f73d20ae6aa24bf6b8ae918bdaff2615eb6fe2de197420e085ded829a2bcd194043d2c7f4da31acb04a84123ee75cdb611618667b6adcc3677f0c5203cfb9b18d6994e1a3b05b01f97471c374facd2a380c8770f1baeb09a0d9b45ab4e32ded8ae5292c307a8f83352757dbb797c8a7dbac6d2f2c54bf86055e08cc59db82c083d2a4ee16c57127d335dc07a895ceeccc8a8c268873cad5b3b3f9318e5e1b46f1e603596abed2332e79cc8d9835e0d67b9bc9c3192671a812bb80d3d09a95110dd4191bbf76c0eb6665326c753dfa9047dedfb91bf6258e575c0305a46b8f27847f74020fd5cb6306b32f526286d2f69d3c1f7c77071ce622b809ff9706eec156ac3c6b31dc3fc112c6fbfee7e40a86a1bb634dd2f62cf3e7b9885fe6a24db8204e1424bcb996f53ca5a5fb823263e564cc08d0194ef39500c81568 -624:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f -640:34aa7620dd642155a71ef5f64dbb6e226780c86774d9892d7cfc2f11876d05a4e51cf71d01479119ee35ba690debba287a0a8a2a5f984eacf6623db41cc5f8f8028cabbb1377d010effcb8cdfad1a9f583e2b8357760ebe68e4d8727844ff55277713d27e1c98290b4d83cdf71a577de138daec9dbe03fa7637e5a42c39fce6540f921c2248c28cea6787f23fc8046fb6efd9b3a1ffc3fc335f130bc0b4cca337dcd8ba050d8d87bc8da7c0e286503526e46385c85a6c8bd36ea803f3bff5d37dc29dd39429a84c6f35e83a3192db15a3bece1fa7648002ebf8feb5a158859831f10946c94a834ebe3922a71bb424e681a18fbd7feb27cbf889443f6ad1a94a0e48ef3ce6378f123acd41abf79621663a75e5f14dacd0e590fd9cb9f50daff9f9f109959474c9841d9fbfc538947dc98221df050732084f672daf8ae517fc9b59617c5667c946f3837a21a1c60707c8f086d27e856df624bd7972aa9149d2d588dcf4cdb66b78b257387d28985e9e518631aa1b4c9e272eec70ee9b2b58e98983aa14461bb6a468c6976620ff76855570ac7a7894199de1240ebabc8d5dd6aa261bfe09d8bf711f2175977d241e5a32bb99f4486a7e023e5c587eb952ae908bf48125a74ed8a675e801151bef8b226d10cd1cb0981697b67fda8064385b3867232071123128619c05f64fdab86fa6903c2651674fc225855317f7bc47a0018db70dad91b08164bef0a2de82e62d6592b42d8e303aea2974ddacec20efa9cebf99ed23a93582388bb75ea7bb93d2447079b8968644747ab32b3ac10f6445d585eb3011e1dc12fa65863e616c0e44fb36a978852a10e913aba4239ce369ea1358f32130aac17be13af5ccb31e404fbb916a2ca902b6c84c2b7b369747454db4844 -640:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f -656:f7ed0e6e0ef7d5fa1d23f895db539ad14e024902f30d899dd592a64a4a044b191f545c72734b2ecc70a1a752d7e55acb2f28503e3e9e06569faeb1bec2b6e7f4b9064aeaef41bcfa097ba3cc416505dee7e2840128cb1abef3e4106be9add513c3d22646211de6dd6fa7c7e2a40a2ac70b3724d1e5875c59ad004d82c2d3fda06d9f5dada4345d2f945f0a7c3036ba290b4dfed691688140b9af1b82274ba844a3d03b86556b67babd856e6c812a4c2521ce629596f28267e7d3cb7fe30bd1d693927b4c85fd50445a1c4753ecce75035996f38684685211e5b43ea5d32e54c5db286a70c573681d386480a499488502be1f51bf205ab3ffbc61a86765835d748e6e2a81410389ec98eeeb2bcb2c16cd9d3514e542021ed1bd9a41b3775cee0af410c6e3a29db39ab9a8913d7b72ceedee6f06bcd17178974d93a037ff303ac8a58b50787067ace9ed15d12417964230712cf154d881968ace0cec64721370864714739670441fc421185c2fa57a2a0bf9bc43a1e4cb78c0964ae06789af36cca8f7f85364c6d4be28fd7f275050b0e3b88b3a46739cb5ab2bd6d301c03dfae838b3137d085ff8bcdc593b8f790d6c3b56c8c4901ab23e5fe4f5fbe9b6cceb4beb06e8bdf1d6e8df98b6e4b3c96f2555431f1e634e8b7cd7919d489188c792b89b538e4fd8334fa28bd45bfcfa9dd9796ce0849f99b4c1c915f73ec0e0d59859f3100892f9c9f5793e5d0e908546eaaeb8bf4a8629386b1b28eb94d4b03dedff7b101a22f219a989285cd657fcfd3b5eeea8151e31ab11e38bad33bc40e519a8450b5929779aa90fb0c28ffd45df929c962faa2a342c5d6c7170af7213019e92d84758e41a4545dced705a21b6c857e4a2aa6176e21933626f363ac758b566278016e7088741cb3776ebe0530e26fda6 -656:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f -672:c324cc370a3ac69bcd8312a091b00dea07de0b5f3d4335ef68b596926fad005df403820803a80934f87d0ae02bc5ef9c25caf162d5b0638d0ce61b79bc0e0105d3c2df29015dee30fa123be4c5ca9e4ed4f9388bab22e2b7602a7a76206a311d5bb1f609ef60b777227326efe17a648f3b6febe3c64e8160070d5b8f5f81a5820af7b69486051e65779481e7edd4a0326b72d9292bfa5c553384f66c18ac573e848e1e69d9288cb52ab7bba98cadc6be8a71f5cb6ef23baafca64e91e0b451f2fb32479653a4f54e790dd7ba625713a2d3fc8d0c54d2dada99bd4e78e819ea0dab2586fad553dc4d87e8f45c85d1efb0f9d7a8da57184a2daaaad2d174c912e79997269f5e5a1a9c10f644e2280956f4836e8feea9b39557f7a928bbc6641fc61b613afefe04d35feb60fe33d03ed772fda778fa8c6fbc568a3ce516d1d7a731bb4cd3428caaeb2fb72fbd3e320b868dffc0794a0749c7ff42699c07dbc576d6e52105ceb16478683818e6207bbd02b268c45496e7841df2bb49faca2e45aa6cc5f50e8c845fe19faf6e4d79ca84d1437529be69ab32ee97c21e0002426098b9ab6c043f3fca03379d3d047701c43127ffc5d49543435c3c21fc9bcf798dde20b764040061f89293d9f2cf793e6e2afe443b423168a8fa9bc0484bdec7949e6a4be68a7f1afe8e6256b55a49827f18054a3c09dd3bc8c7676e86b1786e04d279ee61faa805d9e574e17d8a0d366f127784cad553fd038e237f6c5e8fb2c94817bb76cf954eb5195ede1ff597690239be6e0f6ceac8107ac4b5c843e4c2edadc7754a55ec64a59c7d88122a8a353bf8b75c56ed1aecb6d3454bc352088ce570bd066afd2402e8da33d4ec1d670a06030165fbd1f25407eee55b554848d0923f77b9a263af75f83b5bf702dc733686d9cdcd977da36d321844ec1e5fbd38c3db11 -672:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f -688:d4f095f98c6f6d5e536668ef67014b1cfaae8410377f67505c1fbac8f1d5a9b08e117348803c9dc1a06faa05527d6c9962611aa80a027ba9ab90f4bda65f4ca70dfc0008b18229b4c7e5b8970feac4f5f0b2012f7acde2dd835dcc94175ed97ca691f66ba1e86e86db2e1b546d24b44166061327e5e872829e1693671c42fead9921bfc9a10eb16dac02ab725ed48b34c153716c897ba91e1d55d53e6954bdcb2653f49a5bdd6f25b2ba109ee0f9ccffdde38e7bb5b6bb23ee4aa062e3148ff5e11fca8a484be29849aafc41dd8d23c6d051f58a998717a96c32aef897f80f5143a8d9140965544926540f6a9f33762a97ace2a127839c193aa643d9e7277854f362e4149b39688af16767f20cb3340df8a61a1c850d1c79d5408762985341fa62f2863ff650cbf1676f6e247987e317691dc8b77647db6d26e9ddd53923508343f1404e16e2e13da4dc1bf51c9c2ad2e604d6843f2a506ab32dc893c9f6e392917d04b4b3f18e7cd0e60d170987a2a479570bdfc4a933579a19daea628e3966df59285775da8ed1ef1c60888c7f65f8ccaa21fe4196d638ff5ab9e0948b2b7d6ecbe98f38a22bf9cfac14d5a277c16b6c4b43999c092d0fcd0b6f4d4bd0b7cbe05d03ddac0e2e8cc70d8627a97e2ffe0f7d7d5e82a1a59fa190bf798531de3c130a92cfe737f3d41ae67ff9040ea86bae64f0035765577326e595d08fa90b6490a8960cf636be26f21cf15f9628554e0c55132274a7acf6cb738ad535e872e591daa602b17c64f296950b2f6978f5edb11063d5d838418e6aa960fd09f713426ac4d522fc3ebe1a440c04de7398e9d787a5209d5720e17946543a0251921d1e61cd51a1b71d83cd40a4b190ff58668a90d264576ee675110e17aadb765d4e8bdea5d6f8bb87d558ceaec33f81facfe0b2cc78b37335b91aa6cb7f4d749302df73ee9e01a936c78b2b1a8a3d2e949b48 -688:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf -704:52aa88885c8189072ed6fba7972b92b32544c1ffae641cd7704987d5661338d5a86f45540abd8fa9b36df2a74ac0e7fde18a9b863e689ac6c50ec81cdea4ff74ebba9b4a5bf401479e3c7b4c444616f1b385e0b335c26b9ec89ef10fa2f5e6e7b13c7c4ef9b88bb9ba10a8715886d6b0e598dd5a2e8b5ab98f6f5a6855bda241beeb0fbf53869254a39c250395b75ee8c6cde6e911f9d110c19759ee93e90f741b4620b008c9c54cbaf10d9cd39855f6493a612e9fdaf8709552c4f36eae6831edba0bbdec5cde5193e0ca24c7afdcd66ec6d3d94ff2fb1d0a9b71da4f0d6638fa924f780b3cd6c271685d23d6018bd7e87a565ac9cfda02c5d0fda60b2c076ffae6aa94f73a58526c6b7e1c08384cb0aa660c6a8b939f7d7ac7ca57b7c18b9be7e496fa0b94771a8918a57a3fa5dc03ca5b3f47b8cd99ce97d9d01c27cd97050602238ec7fac872c1e9b280dd551ae59734ee935f4c1257e067f5de2b6f2ff532cb5f45e228a6a961d2107835874aa307d7d9e495eefc7cc1039745a478a61eff60083689828f225304bc3a22524a6ff3849ef260c84458884c9b011b5660988de0e8ef47ced9cb5ce31b684c22156ca0ec1c60c2b09d487e5672e5a7ba98a1a4c8d0390420190bf2a3d4d5191f164b248297bec98e656742770849e9abc22156a8a214c464ebcdcc0db0a6b77ad29987b6ffa23cf1281a5316c2db1e8a712ace87d6023f1252ccdda51722dbd47b758dd12c44c4c356cd005d42e1a7f1bbfa5b4b57a0fedbbdce6e0ce0fc69d92417aecb8e7d7c593a1d1e74e58273072da7e4bce4f4bd94a03f1dd87d3a7089079ae6caa80a835109d984b19aa30f3e50db4fc91ea93182418ab500a44f521f8ebf7e202388da49472e7442fa407bc6604b8c0954a40f9c543a55a436a2eac98dd454755137602021130a9e13cc5107a9f23fbf9d1d1448a60d09fbaeb7472ff3d227df70964cbbf9bb0a35780cf7917e54 -704:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf -720:17d8ac181eb03a99368dc6cb4a8e3b6ed3b8ebfa2ac6e0f988243b96066031261827c3964295c33a20e45ec4529509e8dfb754c69e5988e7b67a737365980184e935fc8fe51b8e5b9514e2b61283872320e75a43aaf92bb9ac44dc0774068d3be4a1497616d5867321e03ad9e440545b82a48bf5a185701f9683ce291757e398e9f4dec98182493d977dbf57529c88e6c88ba9c92cd6c5af668d9d37c99d85cd11e58dcd6b159dcd1c699c302df95fc9e60b651bed0e571ee6db8e711d0bc7c69e52706be5a181fe213b28c70d2ec92d45056e29ff2314367c1695737e73e75b7be408cb3287cdca8b592f83fb03870ea88343331c3b02f0d91552d673d41c2957be143bd9dae64eed6c71ac8d4a8f627112720b1c5b95c2555bcc4fe8727fdb650f3db80a9c18bb8fdf885efa2cfeb4b56a1f1e78bc670c44fbcf49f84daaa1b9b1c943de2068364674b51a389dced863c8b4950bbf1e706b9d5132319697da0f5714e0380d8d7411e650df78f2e875c2178105f86dd0b7ff49f98bc61115e6231f01954c3c73957d8f26469b9b12232aeec1a592fb1fee638e02c1ac8c795a986734e896e79ebb510d9956e6fdc2421dd304c7fa11db82dc05f053d7fb0b9b77c368379245c2ebc3ff9573548985eead364f65d7737c84444b020b6875b0c845caf9e521500143f732cf13dd493a7fcad33299cec6ef50a088a1ba6aa42b9fa1bcbae6068debf5a0751785ff646bf79454242f784b70b6b36f8c7fa12469faea65dcf2fb8ab7548893c725c139514c0a317dcc6aa76241cb76230e9daeba2853d3aeebd02901038c53c08769abf5d3738750c6f2854071713ea513838d4efdea23f13ce194ab3e3adcb5e66504714ca084198c4fac1ed59e0e112030142aae46f89772a2440555990d659bac5c05c4bd6f7be52de389cb581f7a381759749e103fc184ef880bf6d170beeb5c931ac02ecfa92321013da446d89d6ab564da6d7865cda50677ce5d352ca93bdf702736 -720:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf -736:7d25eb22236666c1574748f0fd631c8694d573df66e16bde87491efaba83b36d389ff10fedf3a8fe4689d57826f47c5e0eb47119f8f6e61c589602762a6c3a7c3be980b9a271f721483ada30887e5dd6d75d906511b6cf422d41aa7adf1d1254fe299aa5faa1be4b95e63f235e26fe10dcb60a189ae415016c5484989a7d32f51494d9ac28c81822eb2760ea734da2320f083d3c2a708b4a68569073b11e634977b2aaa053b08c4ef1c11bf92d4cd9dac7ecd913bdc4ce70a5c9f0d559cfd98cca12c43c8102a9c89349702c173defef8222b486c2fb63e2b0ea9b1a103550cad8719883f349c9b21c135df1cb84d3f5ece4f153dbb661abaed30574c53eb7922a72737a92d4baba008bdf983a56bd58789242f4176e3c65031dc2a418b32a7ff53f4557cda34583b70710c6feec420938087728f9692c21edf00c6a8cb6487d8f51dede758835cb716b383dbe90fdd90478687b1da45905f0ce5f0cc2765c0737da9810c7ebc698bd2f00d0e905fd86bdf9bac5ac7ce4af90cf87242356fdbf3ba0cf19e82daf21d2261363e8b30187edd9b1339f8f48afc8880f71c06bd59ff7906e2847c5129ac20d2e68622b34eb29657fe949ab4953232efac5eb83efc010aada059a5073d8dad10037fd586ac93dc5417c916073765d7e1eacb3dd076f22809d06dd6b0c90bd776015a8d769ee82e9963c6153030a845131c9ce8f8642dee4fc878c7d727ab3982c8c3394482124a32ff12684991fb2114f7256eb3421273129905abc87de9b27a34009440f8d4537c8e6df11209b7289b84ace6f5d63677fda318c8f55f6535c270bc0a39b9a1d05f459db316415021cd90a476e10a342499b88181c2e5985902f761654380c59cafa90c0ca056c058daada2de18fe6860a4a5bd860bb50b348418f668266d73551d38c771266edf1466dd52989f3551f45e3075d9bbb8c95d8c8bd0f062534bca370c0ddafeb08c51781126b785a176e9410b054f66b584c4da0777970a141598adb1826d6f5038da6f25f013fbfa7 -736:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf -752:0c2ace6d4227b0314c8c9b39c2090541759f40f9d5d0523b25f081436b9982bd8b2fd7db50b6e6e8cf5ed828854f549c6d6f7b768372e73dbf7c834759b0f01d3a1ecfbb6d19b3ace85cb643e7d69a9af7d591608f266cb347298eb3756da5b92188c6d9e1dab31cee666b5dd06b3077a21bbd14479a35701bb5a21f80417a49cf36333b4da1a7a1871424cf6c3b90a0530c9746d75977b585d6a621d08161a3695e56b569184f8bc7b26519505422f220a4f2e20d5b5dafbe24a0811b675d0d5c85e2180ba194490f9ac758006f23886abce9e06d42b8b7519eb2c77f2a0545fd7b36ff0f15544b15ce100ac7a96ccda5b0a9d7b657f93407c86a9c58e08aa9ad13fec40601d9f7c79225ef8b8b4029f4d470d606b3e30acd463dcdb45c50a8b1dca6063d56fdbd05326a75e6a16e8b6fb41c3030b8b0e613694e8b877662a3361c95f0534599fbfc9a623fae8a119e98cb8068a911cca7c4edc105d65b5395d9ec3b75cf73fa4b371e3319f241f060b84c9760403395913abdd74bb75fbe4693232a853ace148248f218e5e0c175ba82196fd26f4c478014ec08e5bc47b599b6f42483668925d7e45eeb59026a2589d76dd2a6bdc23c292162355938f4f7440ff5eba65c946adb900f1dde05a85b0d82a84a2ae9585695cbcce85a88d99c5f4fff8e153d947b973766c9120b5d1fe2d6e3ea9fad4cd732e3aa869d0a721c188fdead76d98d37a4696bd968e23f069506c525f46362acd222e845cf4c0665e6369c4ca0822eb89d3711b070172485d8447d203f80cc82a174945c094f5e9659fc7e3069c8848efebef09dd3495b06d10a659abbb363b78a79bd8bc2de1beecee979d2b3b504a054c66a98393ab0549311337fc121f3728e6e8821be49820755ff578b3763643dd7f3b54b4ba694609017849c0bda642a49e4a85b8eed67cd9daff10c980869d8e1edf95476e79c5475110d16cad3c271b42d4809c658c2a0cbbc5394fc83dc416d255f814301b8711b91605e73b744db9edcb87fc6b14cca8ffe14d00719b00c4f8f53b4e825acd6b9 -752:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef -768:a96c69c3bf2a4bfe67bc553c6028bb5f42ee4178f87aee7535aada824b72716a40af3bb5bf039f6cee5e4524c424b15dccd1ae02981ab382a6070fc739d8fd5666e097ddf40b0142a9ffcf069445cf50db8c08087d5a78421f526922e7e79bc2a149e585075720c51be341d083e9dcd51aaa6aeb69fb08346e58269cd895ac0bc2fb3291f74a6d71155150b5bbcee52ada0d08fe6e4afd2d7e5bc7c4e18846edf2be939bc46815b68ced4532136bffdd890a83393f75653bd983f1ce52ab699b75d0b7c3293e398c38048e778f42aa988b51fba10b6aa379cc1abd12291eb11a910f927d13b7a74b725c27db8c9f4499f3d3b0d25f2d8738280b73ebb29790ada6e95ff7933a189e34532e3124027e9fccabf23ec6469b425c62ba4e0cd68177c555af0e49bc3d48f4b8c43328b57bdd47cc2c1a87df7764e25d49395c6f353a66b42f41e3bd1bc9f6ba84724990d1978b34d740e0bb84a8dd46edb245259cea37aa1f46cb8fe54802b65c98986fe9dc61a03aec493ecc2b263682d585cbf4162d6a9a7da7660fbe37a2e89cf1d4dac38211cf3cdc0554676e18c1a43e93e90c969da7c1e5265238d55c9cbb1563b07a77535ae14b895c5b020f3bdd7cbea272f79e5a42e23025cb25aef30a7e0cd43d01d93f6dae36c5ccc52d16e9abbbb65928e0eb97d83c184a8e181c9d8430f3d198dc024d757ebca4dd2f011863af893d4b25a434e304f6db5b5d46e193fd83404bd97216c314b9cdf59b68eb3272789472f0e0f077e98fcf53a9979fd08ae339598d57a0e59c0bfb7c6898c042634ee7e32f889eb07f5b17b568c007ba55d05cb33f554bec6f7dfdf165f49b659d3e3af859fcb3024f6610b5db6b176f250e838fe4ba8c21cc5ea2472851853702cba5ba99b17df0a47ae3fa0ecb36099c22df6782f8d45d910ebb2aa701c60af0d55da51659da3bd6054afe5413036532741aeb808932d10a4e5af32ee9b28b6c39a5c91371a58de8c4220f8c65b0458e764dea847b07be78c41610e02588f604733701255b26a5e9ca572c16f32bb92115c078bd76cf270aca1a56b283fb9a67f2f8 -768:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff -784:21278770ac93e98b0d7a4a5a2fc7014e8cebba97b575c45dc3beb9edd7e8a07448639bc285c9e7a98014d2b40c2cd33ac6f14d18ad1ffa5d12dae454527ca8d4a832e27e0c94d6b870f77e3c11cf54bcd8a8e49a2edc6ce8e19bea61c7bb5ef4f75342d3f2dc5e694df575ca778c0246da3669553eb58c7da006e4faa9f58d530da166a051cc4bb1ca70092bc58a07fc0cf668558e28471f6f83bb2667e6b131a4ec76c291a027b7a563dcb373ae1de152c17865e254699f5a88662621cbbfae892309cc2f06eca8c2a6275c7a65277b63266b36a8eaeb31a3b76e0cac01b155eb0e7998c30f3c7cb9556cdf1496108fbc6592c2ef7a3bd57a559ce9d9f8dd30e39e223a8090919c302a6d703600ec053f505178e83af97259a5eff1b222ceacc74ba6ac3e46097bb62cdf8ced6b027c68e60f76c222a6957284912ebcbbdb74585c03e8867bea69de6bdd68566873e743eae0857448b03b191890e791529e4e2149f88130ab912bbeba27ecd75ae44d6554e33bcca80e9161b285329694dd246d0b146d8a8918ef68ba5dd49aea22adea00b4dd0167b9a4a4b5f18fa684bec7c7f628ea7832ee6fea16b20ac303fec7a8df1bb39dd8448d192c19e686f90fbc7493898a801f0f231603592caa5fc5e562b737f82b89de49ee5f2cf7ec5be61ad8b145da0f9dd2fa0e6bc6a0dc17613c48f5e1ca260d35fb9c807e244dda3372d61f0f5988b4f2cdf703fe507cd932ea0d0833481d2bca2dfdbad4ab50efd08e2e63a29eaf1e4155d6bc80f1a665c4237cf40d331ac1d52f29667c9581d5a66b7b6c629956553aed47dde70ef3492be6b4a9728f57469db1d3e830a6719533d757f69b6f400c7f6636ee699f0dc06273d70b40335792aabdf8101952f9eaccd40ded5cb911bd3e55d698b7ae4937a619dbb67c7b02fdf67a97253d0e0e3ab0a9e24bde2046ba82a69b7e1bf32bab2fbbbc2b02680e1c2b08c1099b661f5bdb2ebc58fd39e82c5d4ba199efcd73f8a1843fea9c84c083aee456aa811c9d6072aac9868d61f3bccc40c7b1a3aa470296c4ee7525ff29854484a05485c327186394dcab0a9b6fea8a00bdfc5ad667b85c66 -784:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f -800:09a0113a78cf09a4a7e8ca519b63004d62f50d84c9570e7431e4a9dc1e7f9b2943374fc3a83961efd9b43c6967d9d3655dad2a1edc70b948c3ff10621aa60d6739da0bb75d434f46e251963be90121c802eb02b78560a0fa57eb0f8b7592caf2a91928c874573da9b859c85c3b82b93bd427a2e1a98ea8fd5337da73f456041a01f824bc3d1042f3dcf73f9c8809aedfabcc982087efa1953bc95d3b33a4627695839badb2ef5b70353e1ec2992b07089c747dd4614de1b1f273e8a22a5002b87d7dd2b92f7c9c5fa3b2c33e4e027e6bd93ca5072de8f918bd49ef3a8191030e83f104ddbdcc0e4f98783397c4e1d2c6fe009c4f2b0042e1c16dbdbb35f689dff9e793496ac33f6c96f70740a2bdb18688fd9b9b2865cbd4344c2a54ddc033a83ef3d134d5c8ee785f9697dbe28de6fa034caff78919b32af62e7cae90cb5b709e07a6ca844959fd5e015daed3d8cee560c1dc95dd5a4e1b30c03569fe3d9262078cbc48c294ac0603325bde7cbb9def6a4d828eaaf68059eaa27b50edfe83545fc7d2e008c046b912719fc7d72622fd73b0744ea4e023206f54797e7b36bee14a4f669226349d6cc2b5550f4543bbbe76e43b1746f52cec2cd735723538a34c9ab54db2edd22e6b163a4c5dbe7cea900b6f1cdb8be7ff25d3f18f2eec7929a4dd3d475d6e526c8644430106d02ffeb300d4dbb19f1f806c750f1838663ba70def27ed20f16515308ce942fa1ad2e8516f5df37751339f6a9a5835e8e848c257d25f806c5d5e0562ef2c96a541a8cda5950d107c23fbfd6947d68256fcba0098591b6b57418919c23d0ba37b2368669fe2701c4d58b629be2661b5f27d2b3de75fbd274c2d626350ee6da7861e5d033fd1905da0c1c72ddfebe92af2e6a6c7881f6a98c4b62057478d4173c6ac8d31a50ef01fed21177bea97cbf382bfd0ad1e5fb5b4a931f62dd2948c3a2b94ea5b4ff55e80187ad453c5b8c430494651f09acb764b8c44d47305ee22dc1289377481cdfd2a8664cc764b0982ac2923a485db4e8f7ad35cd08820f5bf854dc5089a077aa92a2f175c3f1771b14102c52bb2720619ffa98ebd94ff15ed62b8d24f9e02dd8b8f454e0d8c74f133df512cdbbae7 -800:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f -816:3563439e39e10a74a84b204c7e3aa88695514c2c2b4575058999b0b2acf7221ebc0efafca23fee6dfec9640a6711d1c5fc903c99df596f43c8ddb919116c3a301a8f526d87b94b41c674093527db68aeb63d1705015d4c5f14099e258791ceea5bbd1369ae632cfa42f5c6d85520a5b8e3bf9691ac41bbb7569d44ab7af84eff60f633fc2be1601778ddb4f8481f940ddd8432d1aa898d2841aeea92dd4ae3b83a2e736454a8e779ee7b27778fc80b35a2c23d87e4b9e3db21cd549fb46fd8d37a883d4d210cc4336dd2aba0501db3c7ec53c5fce208b67b236ce3a446c036872ffe4251d455a444c00c62672b100de3e40118115b82ad2c516c30e49ebf2c3e8b16e1ed575e1c6c200c95a1482d89f769f14a2ad11877cadb3cd8d8ac0e26de638295a4d19d900d0ec6f24d97035e61dc8f4a5026269e205ba1b3bde1c431d56de4dfe0dcb979018ebb0e075fc712bf0114e3788a7cdc7ba93ade53a0e08dee265ae8ed1d6345cc2d5fa931c53e14dfcf3bc61c4803b3e86b702cda53efe0f6f0c9c2e1dc6e754736a276dabd46217b98ba1063a7b041d8d2685d9b36fdb441d3a23c60af648ad504e8c00301eda5b65696cde206d549fcd9822745aab3079d116905652052993e28b89e01a53db7ad3ab4756b33a024930a2b8e4fd39dfff919e8a3ff69d1f09453e0e9662b9a86e9956b65cc1e0ad33ebfddf19d13cc9e2aaf8e6d2c416975ab56f6b2e38c3bc00b31643e9062dd18a39888ebacc284ae73b6b9aac6e6b41e4fc4aa2f0a3c8a5c89e40278ec0649187e8a27b6240f8b68b67c84dc085cbdeaaa0e98b18c97785e8924d6b15899496c1079368dfce78b4e1321cb5b223ebf963231dda79a9c3b2c6f4c84c8b8f6420f474eeac754eaddd8c2b403b5ec2ba9bf133da6319e2a9a33813b94db2d4dadce0c2843a32ea06f75fa9e73752c179d8014def50b102e2018f3e46d00373660a2beb7abbc1c73d352d8e163a0f6cfdbbbeb82634bea3992efc2bc402a8383df91f7fb2ff0b7e5b87ba90ae76f920c7028cbd77fbfbcb6feb1cbb8656e0271223034edcc711a37a5e3d0ea3fb4383a5c2654bac15ce4fd97caa0552673a7b7409ed209ea47e13995467573dd8da2245a5d53223cbf3a1645a0de -816:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f -832:5d06971e1b3999c61b8c2ad2f6c69cdc1c07f5dc736daa78838c68127564bc8925ba600e892c04045667448c9be6101dbcc99b28d8fd809d31c2c0f2a0ce9ee430754588703eb7ed65dfd24f316710267885dd6cbace7d6636d3ac7e4d654b7fba954f2b4dc5164f21e6ccc3cffb9f430e3b673a7c64088adc8e841ee3d1d83b475808992588660e8756f438065f9a93b3de2e3ee0a5229df17c830d4c1a1e3d72e829eb8d77fca6b4cabdf16d0dd00862a08d899062b9e201b38dc0f755f08658a85ad83cd5dcfb289cd2ed3e2c5e4f2fc1097d5748e6e5be88df37f58696d69673408b21b8ee1fabbc63332053c206e54209aeff02bf2c7aa39634791c5d44b9ef2fe117dc9835dd0fef1e18dddfb03ba8f1819983fc7bbd9176e663bfe291c0b655b64d6d520901806a44c670e16bdb551bde314212ea306f440cc3c1ae5fe18dff4d58c595fbcf2abee582344f334eaf7c0d06faa39c6ff9219677675c857254644060f3117cdc9e9574c4af13d2b91103f92fe8aa66874680be0e31f52f7df722523068e5120c6061b50a84599c29fa33403c1853e393b7f971cd94633b9808e9b2b487d2f818dab80399d74dc40d6a5a9f9f0ae86e6b3a404010755b6d91b283bf96eddaac4f6cd918d37e13813b1b9d5fc56d9f6c6b704e845e443f2c7ff15197bf3ad8780a53a45dfd434cec61d6fdb148d3001f6d4d1da11b2440cda7cfc4ecb8a4dda37647b638eed69d15292d4af489bc7207fc562627a2bc47f30a1723a19b956a6747bbe5fef13fb83980730599adf1c8c79f3eb8f8bd16f8872e3d011d24967d5b4df53058bf6d850ea352823cad19a0b1e60c0c2430b899530a593d02721b1015cd334356291ac48bb34b840c8eb2eaa8490e31f0fbb40c405cad0a4a7abb1969a4781d45b39ddf470719909cf853ce0854e4ea742bee2434c49c82cbec4f4ffd6d417751acf04c7aa3cf806a33dbfdbd4b622945eb65eaa698e2ed6e648e068bb6ee917d72f7e1f0c50a96b9f139925ecacf07d5823772f79ef5a0bbe3ea5030b48a6d45a96cce9112ca45632c58629dc7765402d180b7ad3b88e72e59398e0256ed406b5ae58fb91d7263064b78667e37f1bae38d4565d90005d29c2dda4d8421f46671a83e6d457f4843b1c3a40468fb92271f1b085629 -832:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f -848:7425c506e34c1f7f41351e6a836d712e308fee8e9b07b0ea43fe7c91aff8b9d2ff367a0e7427d06ca131e396ad7d8bee4d92849deb3fbed9d3b4c69553a85b537b10f671fb5bb18e2c0b81cf3d8c42511db6f70cf8339462d19e0f17872ba0264ebf4ca34e87ab2e633e63f88f8fc69be8bed9638f5e8a33b4ff4b50408c5b640505069e862d3f43ef3ed5fc691b9e2076c378c32a3d92668d169aa44be6ad4259601528fbcea5fa5d48fba49f830f6084481b920e9b9c60bfb1d36c92f8bfba1cd03f75d77c1e20af32457d64a148bd0509fc25b9e50739183346a1e7012d9dec8e9f7f83a48a745e483889c20fc88974cb2cfea5a271a3a48155e23d2f27ff0b9cf92df0bfe67af2e0948355206f2a28b6e984a211d6e2d9d4b4dc1dbecceb26cfb8d61bdd439fa7908c8377e75e3ef38caae86b49978d287463d139459da625f80e5f90b4b210095b29ef9eb54744f9c0e1b409d3105b5583c0774af8a1a496559527b0d6181fb539a1ea5799e5e7b36264024983803fa1c22d5f9fb69ddaabe3b86b67f1a1e28ac4f54bce5095c62c34cf44eb9b4c7dace34efbf79bc064fae5cac01a3f2ff0f175aa44b0207b29e4404f058b633f994d6fa2d87302b0454deed9305b9c6a5dca4413deed61b3d0c13c23b69c291a5197842dce0b787361440b9b8f687284cc923fd3c50c1be290927386b757f9aaeb318a878296c95a243affecf5387b6d2bcf7f68f407dcb2b775262acc0460e516d84f3a46fac4f3a2b6f413d57a9e865a01d9cfb1395742d05cd9932169de4ca1d242e6a1cf5c6b230031ceb0a1bfc09fd3520528f11109bed15ff9fb011b13d956b34c06e7ce5f28693f8a4ab93df6f11e6945b56d32bea6ab4754be8c951abf74833c91e362b50efd26a0787b09c5ccd9386d79c7c2c6eb2da20e873108c16a7658f8b765fcdb6480071a0b8624fb0ca5ee081bc2407586aa6bf5b285da6c10070a068e1daed4502fade3ee5aef733fff590d906cb0aee09061fc8033dfbb6f8e52d98223320c17ae6ac86e1ebfac3beb758b80d0818a02d335544c372f70fb7a602668ab163ec0b9ec5d00cf637ed1aa4e6d8e76668d7ca75a418a71f57c90679af483758cbf5940272a901eaf1ca9aa7335c6ccc1399c8d7f829eb7bc9011c9bc71920d5d80efbea91a2f8d94b3389478a81293e7193b -848:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f -864:764b92fd61e99249b6fb085b02c3b204dca2858aac1b419d9ae16dc7e927aa5ba4971a1a4ebbc54236a86f4372043162ddc4b9c35f4ee43a1cba3f090470e80f5dd1aaad578c518da3fa5fec78d464e74b2acde84e5641b1074868356cf1afed14271eaf705ebdb94234e4c9b00b4f88fcb409b2066ec82f954def23a153b95231d03bb4a1c8fde19187b997555026e19542427f757fd7283716bc0e8d0a4e78c8861e7f49733e89d28179508bb5bf1d03d8ccec34225fe5bf26803456f5210b4a009570d5683a83c0f8ff480b4a4f454edcc2cce8abc112fda27595eba8f3a101597dd2c2d53b073816aff654c35de769b6396429bb9a1b4395d08229968e57666832356f43d61b9132d752e9839659d286dd75667eb320e90b0e6352e0834fb7b18c658ca5472ac0909e018f7f4953affd3529154ad883d2e91d56c41ef85ab7a49a49aac116d0051d8e0f4e091ad6f5ac4273e5e56d8dcb3ee0e6e759eb2a7f54d71f20b7d0250056c6eb02b8a05d812f449cf47ed191196156b2e061098205a9eab3fe510c3691b439835dbb62705553f0edd6fe643fb54a273ab3b7bcb37b9a46a6d5b508f0a42679cf11ed4057c87928018d72222b14a38a1d1e1744eb79ba7d7271403b1fe3ee39d76d94665a313f5932795cf66fa08a5b0e61cd6b32648c628ec0ef0079ca74cb84ba96627e349892636f0783976d16e1aeaa21bd20b8b0c642fc73caa1e5d92fa1b412f94ed3e08e21755d608f5e62e38726785daf73306c082a5ac13690a82465babdf8f154f0096736780136856c86c5c63d95172dbac86476275387658e28f612acbf0ac9d44dbb015d339cc05517f5a0c0bc7c7e7748b91df87b6f8d48b8a8921a7d8737da324767390846b70ef4f5aa81a1df8e16c1effbfd8610fd5f815ae42aae521181b716f42a24e601ebb9b95358a77a80ed2e7da8b54ab9359f9f15c9628eec00b38cc2134a671f11ae7bc96da59da73ef278338716dd85a67bbb507b0600f26186dec8c6ab4e5a68b31c0d0501c69a4964644dc0e4f611b603b4accc295c7be7d6372871a5bcc5be78e6f53689c50a20f0cc1b4cade5c3c3f465337fe7ca320eab9f2e6b4fb81897f2fbdd79f2af5641c41f8efb1c6bd7829c2959946a7671ad4e62916378ee220c9356d54205d88d0f32f128bb80824f2f88506c590eb4faf8fcc9cf28afbd391ecce6bc538a5b66 -864:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f -880:29c2f3b2c6bdd1209c76fb6b483a0fea5b269ddce36ca90008cf2cc52cc1e3b382f3fe445523997c1318f50014ce000de365dbaab930c4a8ad0743ba4f8c9fb4540c5ba1296cff579a64b964efd3f62e481944a5c475af35c51394383c80fd5cf37eb969e97f53afcdb4a2914473523a61e8239fd8e441cbb028c23b9a837fd05824972fd9e2cf92876d2dc93641e3500f52be33ca5f646c8013c04a256a71bbb4ca3e4c8ffba6113e34ff2423ee5c623902b47f2a1d8f51bf5f0b33d3c8d948859c9a0787101e126dc8e5e2b5bab6f125605f7b1a3ed85e1484bb6380bb01b44d3b18db78d904fb9f239222926893314d85591c5970f2c287dc78827c3895385c306a6dfe05000f7f01bcabc0e7ea14edf019f20c01f3732e4bebef395834d069582f685157f93e7924fcb0fa4898662fd67144f5b5bd07f8ae60d820a4305151a29e9306762914b579a52ea1b8d6b06e50e039a6b2148dd063c3781db0ce2c0e46f054f41329b57c07e5f571356a29587905be947cea7cb38a1a190a2cdf443514e09fb429a5e8c56a8774ec2344edfebc4aa4088725e7083b9d0908f5b0fbb71876dfd8fa69a0c1ea5cac706c6063c7ec9a2ce986e8ebe5f3cfab9a7bc636666b627d5338d48bae45016c6c98748f852554fff47b0b46f4d2951df9422f839ada5b10aa5c471f359ae1e462a839bad79af26322893533ba119fe5fad16d2cabbbc07210d2cb6eab815a4a74e8aa60332da45a8eeb37916365cf4435aa5b5df3686b299c846bd33412b7f8535e470074a9440702d9f98bf9dfcbaec7c356d8c61077235dfdb66e3493724e93be78c5c114c9e7996733f1c6c618d960b779263c1473b7c0eb6831bdbccccae88a287ab9096f5003a28f9d9026366554177954ab34ac940e33d14e2c61c74628fd617dbb4bd037c5763edfc5243f1c7cd98bed9718e8560c1ede47c5b3201fc47a2ed5507697633fe34bfcb9e40827989378a85f3e4c476f2b1c210cd0940703637ab728614e98f603a46cf5e830ac644c848a5e233349c5d5178c67f51261d1d7ca4aa36e293ef771b61bb81303b4546f1d6c7b84d9e1d47121990c3a7b819d53195b7ece7bc6bb517948cc44778200a7a53b083b1de133e8fbf1e51da9cf49cfbd04773654149bdbd679ed72acab26f301d895b1bd8c045fec96768ba49021fe380ec68ad1d143f26b8d2e873fc8295bba799c953d8b9e0857df2fea790f0d753432 -880:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f -896:b3807844dbb30365e6f40f56e7b1f075d50762f12c64d7a7afdaa7da9b9eb80e90bd263a5977f9ce2fc761627fe447780f59fd6f452c0688f5ace451c9d583111523558b007e17db611961a6956e7d778c74384f427eb54ac2321041e1baa70119c81978a751392b4f49704f14c9fdd7f423b7c0c9b6f8e89c25999d7ef008f5397968e26a769bc172b50974f6988d6d92cf783634c79cf804d59c8e9225a17e7c6fe42179f52239ccb1b865c8d4ed5ec8bd7bd63f8cc1a05d6d652f26841937f794b2c0c8c4903e0b8935b1868363798da983541807debf9996bb6cd5f61974e06953c3b72ec70c6b5c69181e2745033b3d7aabf40d84845aa6a33bdedcd6383f7a19506e65ca18a38777768b1e229a13da5c054a585d1ed83d7a7839b780db663b634132d90fd1c3941f095282c760b21889438acb47ae02b9c2f3058f13186b16cf9c374545c804807ce2ddf590e038633619b50bf2b78a55f6c08483563d267ae84924f8b1b6a94572e782c4f86605446d0650556ec5ffcdcb92b33a9c983b2e4360f9887db8312ff2eface3fd92a2b8bf034bc720ec832252a5eb9d81732ca31a926955ba01e2f28699913a4961a26aceee382e3ca742f1b9fe3f53f71ff12f3bf12d9ee7e0f0de6ee089568da0511562813edaef60f429beb76626814d40854dc91fdf6c27831407113074c1661feed01c7a222c2c468c6f4207f625d0a09e5a4ad07f12388cfce72c4b05ba1d6c07c3c60c7c744509777b7e6feb085a33bad2df5538b4683976d3208be57c217eb5de4a5b5844e4ee877381ebf08f975b47ed1d17ba2c541146802658a14641376c13459764e018d7e6320f52c6cd2c7804d78d1b74e860e134b36628b423bc0ab8e45b7db1cd1f4609ab93878c05ea070cf2d5998cdbb8dbd87f1226b24029b53471f68439601e04b658f4269ffe58b070251b2864298adfc6be0a3df6d1c94ad25ac27aefa0cedd1473e9a3808877e1fa65f6411f82c67f42c94c655f3e2e9215ccb082d171feccc6ea0688d29051d6a80ebd36382131933d5d9f9538c35a489446fc8bb2748dfaf232d51bd4986c3dd5df2427696fde8761c695c12d0d291099e38c7abf0cf2e25fd9523f8dd0ef226d23cf69f23db15e46bbc30cc652ab7140f3ed4caf39d26df35d6628cd39bfd4493d535533a61bfe210dc929e8a6f50db5f0222355ed2ba3f6e945ec86c740648bcef4c9576c327f9cb3ca52612c5b72d8f4b152805e6cbf83593153ea0f0b -896:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f -912:b690948e6fbb6d5065e1f143bd8413a18f1762ae4301c9467f31bb75fc73cad9ef44a6f5d22d9813d068b555bb4949faa007568c86f63663a14df9d36c40e329435ac5baa656796e9b92ba26247a266a9d6cef4618ec1fafb730fdb5e417503a1bd061ccda2f93bcab6c8d0b1e11d9f29781c2ae361774b82b0b097be4a6c0494dfdee31d97591c22422a09418082d1c3689fd8b72828ea1730531665ca7264e75aed3b4f22845cb813bc525d877dfe616278e2041505c8bcc0b3d52bc8ef7335ef655733f263413f5493cd65d233c3f0e276881dcb13b27760b2694375502d9de447501dcbdb380e8fb3d554fa2cc771a38ef927cfd4cc3879e497e86006f4aa3b0e9ba3de6844cbdb0e63e04d83bb124ccbeb91aabb4c6df567ff4c4302a9e8ed13c5932e1c8ab03d3d0d6c6e4715a641e82d15f08de55a818b82c437ac039616499da2c3afc9c50e85e7af23801516961d2f4460ff425b10228c42594e78e05a68f238be3957d15e2ba3a227499ff30564f7c2a11ba00fe05505d0664462e301738f37b59bbb43bf44e3afc41e789211b97005898f8edb18231afc26ef98965df9e38a2306c14b82bd995184bcc1078b36cdcba476980a50252447a4f2a5925e311a2f21067b80b35031d677bf3560d5d5435c1131d0eb9863eedc06095c0ae8a4e6b13e9fefad3a9c9b35bd6adbc4db04ada77e3af55181cb17aff5aef861bd05d7ead1f42554a5bac36cd5b2b89cc10cf2b09072d13e517411235ff0a348894df3dc8d37a1828a5ff5dd31c9d04205ba0cb98a51394359e202dbdfda332185ccced81f451e7a7b79576be0bd5ab571c82c5763fca0ca66527dd9f524c85dd06f522d85de846c111ece570d1072dece75853d72d8d2b76677b53877b9586473795ce9d7b59e612023fd08a163d2897b35480b4f3e2d4daa092daf321031878e5432197133ae6a763e336e570f6e0428ea6a2501aee160b3b9ea2e0caa101927b93edc6dcf92cc38c4688989ede312fba3ae35ccb8056eef57668dd46f2f0ed9ba2d35ad450caa945baf34b8f254a3e0afbc3bdd37869f13745622f30c35f380d62990bb5c40a0dcbf6e13ec0cfb569c2581ee68e16d1cdcadf77a15d166c59b7f154aaaea4bd4287c31f2683013facb53bfc69998d5d35a58c4cd90a3aa3a049e06cc63a6d7181a2c38817be9c4721e346667557bd8d076c1224392d039ae243724dc495fe2ec3f2be06107bb91475f23bdd70b91f86c5f42711509222f29783ff066ea43cfb2933ff327ba83918 -912:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f -928:bc5df364add8c8b84b3cd442f0cc09d2ac092ab25a81c6c57a5a13f62d9fea43c0fbf314d71e05c4eb01158aea19309efb4a5f32de5f311db43f568b6ec9d54383738ce402eb66a16129c4ab14f01ba81bba99ceae83b1e126f89125dbca89be178c23a5a1a8cdb287369321b95986aeec02c74a63fc32d7364e2e49382d440156be2428a3082c14dd482374a8ede2b3756a49725ae7e3148e8cdff15e8f2c8287d3fd7933e88b1c2439c6b8a0147d14c4bcf39a718ce38f2d42108282fe6ff236957fe5396362eb0e0dfd53e25d7b38e14de45ff451f1b56ec05e5d1a74d3aef5f2c0acd4662b5010af266fd653f3d99ea6e0a538655f1709e221392a7c450cdda6adebbd0f13fd3eb85520a7b8b5ed07926a09b763c6075fe6343d2fda48805d9345a3bff442b607e7d1417ef044d82f32e4fc2f8370fc36eee84854c63d4b4869a5b14874f03bad28b1fd9228f2eb648ae562763582dfe198d1a817ba42e2d9e7785cd54cc934045ac9985c9ae3d5b54dc61ffe99646a7f041a5a424ef909d68b1d8c042952f70533d8ae85e677d20554566dff1097d70780da80f5e6061ca27cfed9365c51a2db775be2e145fef14b2cf9bf671110be653f0781ee8d2b77f40e7d52f6928aa6e3f6dbb4462b0707afb354b2d88f1f6e0a9a687c63e2b0275e9309930956e310e37935c8b142af786bfaef99ef4786b0347c2238d8c468a77724b963b9bd04b85766bf358b44835a765ef105a4f71352f00d53aead6b98799c36dba4f73f6ffff880ffeabbb4c7bc97b61d3c8cdb757459f70a800e68980f120c1c5e9c4fd87d6b8d797bf3474744e42d5075a903d7ec24841b6d317d0e266e96b7fe40c1c65e90b65ae6476fbf4db5afa20d930ea00a5ff117766f300497b64edff10fbfcdb2a5b389c6ad4f1a4dc7338b6aab66f3b1c914b64c980572fb858eeb2364001271f7b3d9230faef634455753123766f14bcd0567905a121009dfdd6648b37a4012c5c534fa097f9e5e043a4dc18e924131cba32cbe91beeee1dbe8be95a91e3dbcb3eacdac1c6ae914cf50df6913f8dec3b17b6536df1fcf276b241f8e3ca34ee37f9182ec7beb3965f809780226c19da869a42aeb0ca0f75d6c8e61cc5241b48d1d0896db21ff6dc242604ecb003d6dfd3d04ff9b3ef1262c5c8a39ee525e642577019d69c5c2d0be5872b85fdab68769bc55658a553d1448918124284ee1a32961f0c6e4ef97ad1c19a5f7e75e254f837560b3c25c31c774248d1e48a5f7effcf96abf9774dcec13e732bfbe0a812ce2a4a9b4a08bf80fc0 -928:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f -944:62e7a2ef1ec0ee486b1de8c2d10232ebc0615252f48dc33b7700b64c262849098660a89d87747d7970a029c15fbfc980dc2f780ccf1f3c35283ecdc690412debb3466da444dcc5658b025bbc34fdee1bdd6058064b42ae92fa228f576337e2cb01bd062e5f8a353b027881e5b95aa153128a3a3092a4dcaa6395c59cadfcfc44fcb368c1809cd8f18817c8920e02f18ca7bdd9bd441f4d7a5ba3e3801ca1ab16b16742a77d459055b7fc755e74e525e8d21a1bdc6105c726d5aec9595cbc3b2ec95643739c49678e177165c15a5f7252020e48225bd5b61c0a3021e4811ee6d14a5a3cba357f429d5593a55a58e6b13cb105c9434049b1e86432926efddecfca063e1502ecf33915e00e7e4a03dddfd64ddeec5aeb18a4c6dd054495fe05e0bf83d4d8fddbaf11799fff54fdafd5562d0f0abf1f3bfd67813425b9568c05cb70bae4c1bbd888d3d5d79322127deae89003f857b66d2e623eaa7ca28e75012c669d28a438f1b47d71dc03539f273969017f033cb4037bed293e227fc3d745b26727bffdb313713ad08de751bd9135e8f2e463a1d8b8b8b2ffdb023cc5af4497b0e8dfd19ecb29684a15e5167d9bbc0bcf674a0c9bb454c6e31c81605776af4b640ff35d7a011ed5658df6b7157acd8f87fa505195b5524f3283f4c4e8bffeb7af66cdc233f1af1d9b81c63601eb5863de6d2d7ca892207c20ae6078dd347f9c1464d92f39f55b7a62caa2913bea8e8893f76e92fc1408b4f76412ff5baf04d62766282c23588eae49908c856ed4eece4ede57dca9e745cf4838fd3c7aef6a857a9d9826db5b571928ca1d614467225deb510f4aa24955a00755c64e49d3183715a34f7ab2069e6fa864e5cefcc706633d4543d448ec7a18779cda8e6116bdd4120c0a1f653161adba4c1abca388ae6f40c96d853793e5aef469ca3c57f57f19c09f2eecad6ac0bb687fbb0c71a932fdd80483b85759ba661d3a9747c5131cdfcd7c1b46ab719a0fd2f0a7c1b41fa043177d5187f1cfe9f870a36d7e71f080a286aec0a2c6771e629944551f3692fe91beb59c3fff95470dc42ad077260f0f20912c394e2e04baac2363d3e056d589d763b5963642decd3ff5e345377574e24b87405ca7179e2d6a278089cf89dfe726a3639e4820ba48cf264717343dfa7e0b82a3928fcca98f3e1129837f2bfbd732664583354e71ac115009f3e8a9499694af02edef9d25c95291f206bd931a5d43227e1d0fa1de8ce06f88fc33e70ecbe1b17c5b43a716211f6a26b1fb28a431f3c2ed6b106ada51add23e4eb690a23a91d2db355c880c441390d06a9de6022e499c -944:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf -960:b8616d0a83c9aae9f1ac8ba538c43eae3f5861843787aec8b1189d7c32e072d79fe1f08fe0291740ef058d53e52c08f41cfca7b8d8eed4404a24dab6816003828c083f57152cbcefa411d213211e828efef1669cbec96fbff2f691ae78aebb5ddccf87684cf08d1c243ea7b3c6bac1b11ebe02ff7e1c342e825670ae7b88bcf31c3850f94dc540e6bb9be4ed8fd08113799c539eb97c1342a23448cea9d81a188974d47b6bca7c37dd19b413746f7feb2e49e1f7a61a3e6516b4bd49a2b02a73c27bbcd95b262e57986905eea78a7579b0a01a98269264a5fd2f1297cff5d109c4014c07bb3a98de6ba4490dbaf81ed8c62a6942d7295815f97fac618b3533e8c3d1ffb7f047004ad18cf0278d3d0cc046f67e64914eae29589381ab9b14781c4cf801579d01c5d5472816a6826982d5a626ca4d4404a10bb882b34083b4d2a1be756ded346c2300705c27d517cd2bb607a7e2c2f1b209a3c0ae4dffff1de98f7e64848ad865354919ec5efa517cab15b5f109d2264fe98b019b01665d5e4a73e98afa189699cece78b2ec97925ce99e2a2e195858f7487a199d55eb8ff9a69b11cf958b5d522a23c0bd30e6092e191ca4ae702d21ca3fb0823c57de653a93d7942c7731ae7a530c74fcc18f064f53fa507cc13608625d723ce39bf937a969c68f20c4b8aaba3869e12dfe4fe887d7cdec7d0c6efa9bfa11a949ceea5e16c353ea4f3c834161d3cf991a73d750e32ea75cbf15674a488028c4967569534cf17f587b5cde13d0e39614c46150d48572522fbd1dc4f4e7671b40b9a9c2bffa40084791211dd9e4fda25aa547ca27d6f68569e1cee1333b6fa3ebf7937aa6765a3421a3bfafbb605f95eb5bac77df9530a6a75f87c8463ef1733167316b4339ab8e41d3fd7dd518ae7c28c043fa802924b854ad01e6b2e7166e3f1966bd352943a794b6f4752beb8122103913a0f1a88d2f3cd8a210a54a81b991b3f566b912fc03d133c4fc55537bd0c9095678f7558b400500060f01c179bb9e998361a6c4c140be88070bdad79d40984579cf663db9e5de3d29274f1897d4d576ac3b593343e6d618e0747664429e7c087ce1eeac4e5aab827e24f21ec8a1bea9c0da9c41859ad2b09e9cfbdb88f426c66bb5dcfac33aae44976b8c567fecd0ec0549612d74f1932a571649198c736a602abf02bdf48bdd1fb7677e9aba0dab07b8afa973e1bd50eb9977f6d4779c24ae085ece616dcac3a0c8d6923aed9dc256e48a08dd33369e6bb9d619a3410ca5766b6cacb1cce1fe5dd2119beca4af02889721b0e28b3ce2c14a746a84155cd66408bcdc9d62fc7999eed86d1138aa4bdb5e8639ac2492 -960:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf -976:fe8a924f6b473e4252e8306238646b383cb6cc6adeb6c472314b1c21b0d651e2864e875d4f5c47b9c8b74493b153f6795fd0265e9022f93ed363e9e4439e233f4298d859620eb269663a3094ef87a65b8568e8f646bb7a94a9bfb666c416486492bc14783cc1d32a6def86aacd4fb3e808785f796cdb3c67333d14dc611b043ad8d5dbd9ebad1b18f3f243bc67d4578077872de81f660d01a9a0d289d24d224ee33852ba898da68b74612f7140d3151f6d1dcc4304b1677a46f623589d3a1ccf61434dfc23d0fc2e31cb118ba4d02550b0057a261e736d8cdfac1f33373d2ee932bb6c07d3420f5c1791faab4e61ae17f857d716b93ff583883a834e6d878db98fb9f2abd0b1641a8f3904406d536c480f1c6be78083b745f1d8cb103700911a4c8d5b9b8f5a1dc5dcf5cbb021ed9f035ffba62f2bb1ea524e4fd999aa226980633853ff20b4b7094f3e8fe5913b7bd36259bb531ec1a4a41336a855cd8d8712480b380af3e66f8eae13b964fca9b1e1593ecb904cd6b8e1daff2296c268954bb6baf1211e35280c3d0115374055e0dda8a48486f45d1236c04d3e3d24f4aed948bd5467df2468929840ba0af1487e96f8883846fb02a6a20cdb3ffdd280a534c0f4d88743694b8abd71b24ad4dcb7ca7563f01971815b785b4d29c91994776b8a4fac9da0f9fc76488d8016bcb77d927125bd86f2127b85dbae52b0712358908a75f545c83ef81ce34a5f931504ab75b0d1aa12814f176ecec759e9cc8e21b2e92a3e2e6fcca56f8e0c6423e1a93e4c856316d7a6a2cb9ac4400538cecaa9ac7868ce99de9a50dc7b5bb7707c959ab0291708e83395bd142225261ea222b9ef58614f5208848dee2c97baa86ab3e390658803e0483968d6f2a067fbaeba311983066b9032f99cdbfb4d767729bf7d9148345724462fb868297e6b325f289f00bc151110f89d5ea758e9484eb26ba3eaeab7156308740ac499414b5d75d07fdec78843ba261a8c58d03609668fbf55d4ad2eed5b0ea4eca805d633541bcd6e93020003c6ad2cf360b03c71c32673cb34130f7634f8eaa459fa8bcb56f4476738b49aa9c7569672f0a7e58874e8d2b78373150faea04648c08873afd27530b04f9882f9921306fddea77a186605390f40de81efe5cdb48d6a25efbac6f6badfe7e2a7eea7d204151febdad5687c228f22ca4fed8b456cd5a7eeadb750ff29cff75016d8e5a439b735aa9586244300f6f78164b10f27cf311e46ce86e4a387ccf72e277ec6eff71ea62e783bbdf20a4f234d54c0e3d8c24d1fc3c9f27bb5c160d92cfd4b5e789a0f54335f7b16b7226877ff142e7a396f087422c41ea1424c7b89f7b05ac5f16b15ebf37ae8718b511b72 -976:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf -992:af755a7fd216598bcfec0d1398921f87ad8f9a4aa4418a5bfccf00bc9a710a0669ea2cb17cae99ad9a87b731236847bd642a3598c7e590e0135d0aae144d288fa1426ab6c50bbe70a27b72c793dcfddd118373e22ae8f680b0e8b10a3cda8a334a0faa389f56b7807c05d6cefa9560b0467c1ad10d29f83a5c07d6c69e8917a4aa4520cf42c7156ccf114781ee80bf2f1558fd9efdc9f9ef369b219ca8106408d24b6bbf851816e8e0c989615fb2d4c0854072ab3758ffa22c69185d5ff6920cb62fbf786b054353940081a55fd81979b73f5808a9cd29b8d3e4c75a622561375e95d50c2ffd61bc967b1295c70d8c8163c80cea6d6982f9a72db09495414a99247b24bbb64511ddaddb8fae455816d7c12880442001e8d0588180ed69a9a84e975b93659389c986653e8bbee4332b748ee40d8e1b556d05da8a3aa1348972036fb2657f29d044ca0ed4d8ea4030a1b23d0e973958806d8dc806430deabb64d5bd75dbcf2641a6d2ce92f297a8598c7aab436c1485074f244b609aca470151e8f3d54102f0d4290ba5b7722758a363c873fbc88e43afb2437f79ebd38990f72238bb865261bd434f9da58c0a54048494f0746b9690a69510361a02d934b14ff0589353828d375741236f1b45497d8afc1b479779e4f724edae20e2609764fb9613305d370f16afe452be289f595941981b451b4180c7b4b65843c2d99a75e4332f1ab83f8ef22827f94c6ecff6b3ec136033d4839e3518e1f76d734910556bccc0394bf619e209d92275862ebcc19d8be4a68ba52b6ef05db9ce497853bdb31764a351d2d6b91e0f1680b84d154e7f3404b97a0e9643188e27268e73f0740e9ac3c4461c9be061970a7b4a77db5bab38450b4fd0af274fa8c4283b2e95776c63d023991c8b02da1aff122eb9e661bcb1239d67e516500ce626e2000ef9767e75843c5e90679beee9aac3328defc89dcc5da2b7dbb76ab1dd6d84ac22f7e05d9e515b827824482c115d7180cc1b9378fe0eafbe34b545fa52b3fb9a9bdce1e41a80b2f911747f6bdb279b140cf12507fd33ef9eadcafc7ea5dc107a3ff6745a30c12d8ded824580aaa274e49495f017435979940c3a0035be77f29e099f44e1ee82b00a13729b2b90addc549d6799c388630ce7c42691b888380ccdf5cf7a701ccdc3f3422a677dc7f7891140c7fbb5093626349066a7720a4c696ec590fb74a5ca7f6b6774811af33eed78198d5b8de2371a9aa768b789cc0ca1c381cf4b70104204fba70b140a87e6093f15b02625c7b90ac215c3b318c2efc85c5e9baa06b52e426e2d3207b638f28af2814d8bc6dd29204e1d45823e6bca114acc39bae9293bb4b292bdddc457502b6dca9a7a80ba45f528a2234a166924d62b09cbbab14f -992:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf -1008:425b0a3543b047574d63f3513c2fc330437067ea9e14c24487e0fed0a5e5ca8c1e92d8c5015e4d25fb6bb9e7a16b6f0fd54782f84499ea944ef01b05053c004c730c5e229523bd7e017dabb49487f4aa6d93e580d7d5d6f05316f39a2f3fbaed95b615a83b39a4106dbf127e9d1a134cd65780cd9507723e876ff82a63d96c16a50ec0412f977b038e0efae2fcc1203da3ea4feb029a5be2bfd502e58d1f753fefd49bd3c67ed0d79d99618efbafadef0b47327803ea099247f8fb17f7ac8cc7ca37a32f5d1ee27f637db36d3c171af5549f554b4b9422f8bfad644ef9dbd47fc868ce4ba9342888ebc8c69728902565f1b520528fc73dc2bcd7d516d0a4ff9eee95069f487c810efc38bda54933f41ef69b3a39f28a19afaf758a5abf173f7544dea90596ac9eaf6194f26f444ad6f0feaf9c6cf1827a35eab9e4a44f7bcfa085dafd83f5a2ff66b73f58e7415d906312749427ac5625bc70f7b58dc78f2b0153c83f2d2503d670b9da82df1ae7ff567f80464f1a7a7ffc2e69ccbd507fdce91714691582800a07694969536d86f1acaa4bf4517fcfb631f08732a9234e17154ad807d0308aca397fdb648dc49164cfaec222f6a911c4deefa790738aaa7a5c94f1668441c20bfbf7e1a72f9f45b7e62e87214194c9b4e9a4e68702f91d797076c9268dff2fb1bd84b4bfab3af92bc7fbf21610be8819bdee42cb40515676c4d82561a41d930b34790a6f744d05c599256bbc94adeca9be462ee24fce633eac239ff0d1423a51c475f4a51ca51c570293988113c64b921b7496e5a9f0013578bb206819574ee4fc80067ce33df536a8a7fb6b54b16b719c547257cfabeed00c18eb120e019c09e7d275feae4076a1957035e05f9649dd93bec3e56a9aabdaebbe9bc53af637004f35f029e75b44a40989885c7913574fbe040ba059524044f00da3f29d0f6eab71b8508c5693a8401fd0bd0d4312d018b9b26cd2633ee477585affb5a2be73f156285bd93905a227f6794138e18ecc0fedc9814ba806c0bb2087653e02295aa13807908d968d6966c7ec21c936c877b8ba6a76f2dc367dd1b538c0045d211ea81d286a8afa147eabea42802fe01891012a1766551abcdbffdab8191b630c6a98ba91cd9dee647091838cf31454fa7c877418fb10b19ef905408c47ba1115394fbd5af5ce362b1f888124043a5fd3fc78a041fd7240396d61d2fe3fceea37488065b23d9b7745cc46b1769aad936ded16a4fb73b982d24959ea0ec38f6d0673b1e4272f0da01512cca7d2e14bf2481c5fcb37cbae35a95fa417b18b1173413a0d6ca1e548bcdc09b070656b98b0d6a05fac98c986ccad9c6bbd17881412adcef7d041550c753f26320a6e296ac0059ba1b91015bce4a73a7749a3dc02efab9668503d20f492d78be481 -1008:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef diff --git a/notes/ocb3_tv.txt b/notes/ocb3_tv.txt deleted file mode 100644 index 36d8693b..00000000 --- a/notes/ocb3_tv.txt +++ /dev/null @@ -1,389 +0,0 @@ -OCB3 Test Vectors. Uses the 00010203...NN-1 pattern for nonce/plaintext/key. The outputs -are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous -step repeated sufficiently. The nonce is fixed throughout. AAD is fixed to 3 bytes (ASCII) 'AAD'. - -OCB3-aes (16 byte key) - 0: , B314B579B54365D9094A8A7544FECFA7 - 1: F9, 3E49FF310B88634BACA91D55DFBAA185 - 2: 04B6, E13FBD06086CAEF7AD042C93D7BB6FB0 - 3: 5E9389, 04216D3227A79ED90D60637AACA49318 - 4: AD4A090A, 71FF49510C87EE5FC004162F146D4C1E - 5: A3D8218932, 5AA9FE79861F6B5BC8F3E238D0221388 - 6: F8FADE0FFCCD, 04FB1C91F3B23E58F6B9614648B1A653 - 7: 92C4F8CC40044E, 232C049DA70A9AB4B6B3A03B286180C1 - 8: F93B1744D7C77AA0, 21FBF572E7FE551ECB5025BDE9ED5984 - 9: BA51E012FF90E40800, 117280C3D04F2376D4B2F020AA661146 - 10: 71CE4295BF396C6B2338, BE21F998166D7EB96285884217FA8086 - 11: E8BD27F4EE71D7C8B92B32, D6004359B714792C44B1EF5F9CA04F3D - 12: 44F561EA59DD0DC2A2FFF982, 6AAE8B19D5D6FE35A510E53C35C74AE8 - 13: 644B54237E20C68249B4FCE531, 806FA9F25EA420A8B4CAFA7620C7256A - 14: 2AC152EA88E036E58667960CAA99, 04351AF74BC428C37282EF2A85C85B08 - 15: DBB19579CA7E525544CA6893556BE0, 6847407644710A2DDDC128E4C7223FBF - 16: 457557479FDC7F70CCDFDDD53EC950CC, 8B9C8D93E60A881F625B82E200B021BD - 17: C07EAF5328D338CA4601560F513A2A4AC7, E882049660635CF0D13F6058773141DA - 18: BDEAE23389E05F719CCD723DC972F2C884D3, 0E40806F30CF1F788C3C6D10B89096A2 - 19: D5F334BC7A5196E460D52F89E129F33D2C9F91, 00C4EF195CB474CD880DF1B6915EA357 - 20: 74435B9ACFB72DF8D67DE0BBB2F18F34EF1C5962, B33A91F1AFEE65F56C781AD7047E55C4 - 21: 31618C38EEB4A77E0769131E91F4814C7DFB825409, 8307F47A53FD8CB7B82211E8121738DE - 22: 45ADEBF8F29313F13C3919A4246C96142485B58D074C, 268C4072B1FB58F0491EFF34756C1250 - 23: 2E11364612BE88875F506FD6603CBDCCA10188B3F6BD79, B782DB9E311FA0C3F1489DA839CF37CD - 24: 565DB17A001D87FF3B432D80CB6DCF84A389E306845D4BAB, FE514CA6EACFC08D6CA02D4F34CA223B - 25: 7819A4A63E4ECE3FB6DBC5208A5E0ECC5803E22F28C083C6B8, FA00969B7C91711E0E70027D13FF0407 - 26: 27186491315F2F00D125C1266C442FB3C7B6FC824DE4A30B3EAB, 084DA787A8AA2D108B95F3A5B69BFA52 - 27: 3545DE774BF9CFC3AF51602CCEAFDAD54302C8FC75C3FC1794C6CD, 68A18C2F767BDADD023D85B722BE8D6D - 28: 73AB104D83AE82A4D0AF53065D488EEA47C05E201A667581BB046E98, E65DAFCC4DD662232C895602DD8C7582 - 29: B7B26992F361B7D9CE2782304C6C62495E46216304075A787395948752, 38F99FA3C086CE6B2620302931DB0BC8 - 30: ADB1E4FC3217F82C2851122B8EEACCFB1C731565AFF856E201E8EEE702D1, 615A3A991F4BA240768FDCB4D9CF16DD - 31: F2CF0958F00F11E8564CFFD9AEC71451344E2A35DE7D82D1AAC14649BCD34C, 04E97E02B50CFCC86EC0B9A958057F66 - 32: 914755B90B12CF5720CC0176AED145ADEC862E51B237AFE862477CF91D729768, EEDA6BE8E7875AA7E1E3393DE81FBAF7 - -OCB3-rc6 (16 byte key) - 0: , E55863F7B850CEA28023BA8E2AB1F4FD - 1: E5, C1F5CEA421F84AECACF622BCE507BD21 - 2: 6443, FB3B7992E057AA4A0E31E8718093740B - 3: A1E36C, 0BE1B8CC538E60FDC36165AF5D273F41 - 4: 4891FC23, C6ADA69F1A613830CFF5E564F01FEA93 - 5: 6AAFA8549C, 6DDA8C3720633B9E83BBF2DB356EEBCA - 6: 254EBFFB3C60, F092EA5FE0DA6B90DD5F2FB75FF92960 - 7: 1DA9F258ACA84E, 762E38C6545C3ED4AF970B09C6747CFB - 8: 289067E54AF4FFC9, C04CFAAC0D919AD6027A7D923705443B - 9: 65E083C54F9CC7C228, D6A4A1AC4144217BC07329BCDDD6F27F - 10: F78CE1BEE4471E9830FE, A503FBBE2378505EFDD50AD4FEE587E4 - 11: 31874B00827B810588A635, 287CE2ECEF9247BCBF7537DA052E6A86 - 12: AC8CB1138A4BC5A19BA96DC3, F443C67A2CC51FE2DF38A8B6C0F08220 - 13: EFBFF1BCDF7B3F66A402A01459, 274A2DA9F33DB5203A1EBF90366E5064 - 14: 7A47F5FBA688594319CC14B33458, 9107C62E140339F3FAB445113331DE4C - 15: 69957805FC3C51C59F9149306CCED0, C887CB0B1D880BE0ACA16AC513019721 - 16: 6735D0D5D2ECFB68B718B8A95AFB8922, C97E9187ED00C6D9FAFC76511BE46AD5 - 17: 00F51550A1875A3517FDE2A3038E1CCDAB, CDA7AE39A8B8708E91A3EB7C94FA7BD6 - 18: 85184BEF9A31A8F4CBB5CAA56FF5C63845EE, 5BFA7FFF2072E7B4D9AFEA21D23755CE - 19: 025F6ACB1A85173A639D8FB24ED4B1E08339B8, BAB248C26F24FCAA94328C9BB0821E55 - 20: E18DA8E16897E888C73743E0BE165A6F8CC94A04, D759682D03ECE0888B07915D6E3F5FC6 - 21: 6B94BCF8DE2F326BC7D6BBE1FE7B744E25E717CDC3, A69D284CB8B279297A4FEA3B6561171A - 22: B9AEBFF5E08E82451A486BFFAAAAA2564F36BEB8B00D, B0F0B98B97DADF33B25AACE289D8BF9B - 23: 5F3C5797CC821B3A3B8559C5A5AF422F85B2803B7A4D9E, E01492AC89D7CB9F87FB8B23B6E55152 - 24: 2760B653AE34625A78ECC775BF4584DDE6B2D0A1063C7B8C, 2FDB63B68839C6250E0C5F16351C31BF - 25: A5CD59CCA78AA4A95B1C1CAFABF90230FBC9F6BE66E1AE7575, 0EE3390FF12980B9C3DBA27802FA7F01 - 26: 4E9D19900631CBBF3F2326C129C90AC6B5BC3889E1392A05E542, 3CE0EC540949EBF4D70E98B17BC37D58 - 27: 5448E01EF054DC8B4B6C148CB05D5A20F50EBDFA42E59FAE178058, BD64C93FDE56099E206AD57958A259C4 - 28: 9D62242B65C51F9BCF41177BE9E992AAB7721A6EB3584CCB25FE13C1, C93E44C0AF6559D8045D89B98CFF59D4 - 29: B72E80500D0ECA63727E82569B3BCE66F11DADBE374BD0672D0880645F, 8419544A26D030E30085ECF8F97896F1 - 30: 28F27958226709140EA0867D285376E1B14890F44A18A219E1CAB02FF62D, 77CA96AB5A1F36E7564B7010ED08E540 - 31: 80F7CA76B988519731D76C4D60DA0E5C77BEC17368C9B237AE60A910312334, 962C1F0C4E7C8137863A48E6E5BFA44B - 32: 1B43CDD2D0E13ECAE95F2DE4782760679CDCCE5E74A3C3E6614BAD86DFE073EE, B5A6A14CA26E60AAC3B5C9DB0723ACE5 - -OCB3-safer+ (16 byte key) - 0: , 8F56A79150DEFC6B2CBB3FB6E359FBD2 - 1: C9, 8E316BB1D0C29B6D7A5A87099B85B72A - 2: 2060, BC6DEBA562045204F685BD4AD1095614 - 3: 0CB79E, FF5C3DD5E0D3C587F73B79871E18D92D - 4: EB055446, 68712BEFD76001DEBEB0D49FB45753C9 - 5: E936796698, DACC5325D10076E3454EA244FDE2C446 - 6: E64E038A3E72, C790A04E48892CD267FC323EC8606BE6 - 7: 3530F74D417ACC, F0383D56F2FF810F37DFEC884A7F0189 - 8: 2B616C4A95A3C681, C2D5793720F925F74693C7A8E117860C - 9: CE0C99100C05C3BB31, B1F94A461CD2F81E31AABB949E2B2866 - 10: 2F4556261D59FB7104EF, F061D0F70B0984C57651ADC2C500FB90 - 11: B0DC48C26496AF66330E6C, 68276FCFD1C9AC88C54429CA7714662E - 12: 5F2ABA85E68BE0FBCB8127A4, C1FF0E5E54CFCB1109E8707E6EFC5548 - 13: 52560F88ABD9EF2BE8F5693CC9, FDC0F5DEE4C0739869C8D310EDE6D8CB - 14: 3FB7DFB38F9CB53B932C09BB4953, 156BFBDE08F2665A3F7C79F711042B40 - 15: 09031E49212D7F8706DB42929EE5FE, 8A0F8A6634EFA7E56471178F6F906CED - 16: CED816F12E02E14B312C6DD520BDD936, 4FE5C914D17C426A3BCF5799A4BE0FA8 - 17: 30180417B91D913762B8066964F01F7050, F9FF5A968C3B5D6F6F8ABD5BF23461F5 - 18: 9135A4CE4F8DC27758B9F158F515F89C8B9C, 7B3E446236E33F999D7B586205B55D33 - 19: FE2BC52A5AD051401471D2487803E2F70679E9, 902CB619F522AC61EE70C5407E23441C - 20: 7FD71CB30B9836C6CABAC78AC336BD5775EF3027, 7E6419511E3886BD3736D1BE13FB8599 - 21: A946EBC8A4F779A6FF805B2B4F9D166479A25C71BB, 850E57C9BD78774FC4CF5BB1A956BD4D - 22: 1F3101AB8B7FA06DC3194D66F3997C990C79DD69669F, AC4962DAACEC80D993E52A2170ACF145 - 23: F8BA79427B329475C7374CD1F48518C5064D3796683978, 39D4EE512DA456B0E6EBE7680766756B - 24: 52CD976F3DE59CCAA8E352161BD7867C026D39142FDFADC4, 7BF77402B6CDC953487A1A4C87AE4ED7 - 25: 1A1D64F1B73C52B698FFED8DCED76292807AB3676004B63064, 6E16BCC6F312A92E80FCB10DB8BC659C - 26: 171AF49F6816848A355D92E7DBFD769587EA2B988076BA5D5918, 9F821AC305325BDB9B12B44F82882C63 - 27: 025152E05F44E7F05C2B4BA3B0023544CFBBEC8F9A98C13E931E2D, C8E3228E2B74FCC935BE1802E092C346 - 28: 96B96648528B740D15504E299E619A6D0B129407DEFD04C1BF405AA6, D0721CC578C44EF15FAC882A8F49617B - 29: 9136905B84ED8A403CA83DC0DE081CAAA0F8E4F775FE0EA1E3E20BF223, EB474F78BFB6BAC8E1B1867ED405DC38 - 30: D65A403FB587A6839C071167ED096B46FB480468F7C1F702F1B2479CDA5C, 8E82A3BA76E1AFCD82E324FEAC9E3084 - 31: 017E3A54463EDC279879A07FD7BFF1225CEE307BD8741B6013FE4C9A454EB8, 10449A44C1F90C64CCCA5D808AC705A5 - 32: DB9C895FF4A59D407344B8254FCD416F0D5EDB2ECB639CF226DEAA76370FB79D, CFE8C49CF0E323F694FAB1805A85DC93 - -OCB3-twofish (16 byte key) - 0: , 924B3293251DA82CC6843F4616DAA68D - 1: 01, 4B07AF17FF5D6C2477E90B7843F19D1B - 2: 5CFF, 75BF06BF38FA2BEC8A3A546B9E29741E - 3: B31197, 0923C75169AAFCA604EDEFB93E7C5D83 - 4: 8AF83046, 29C744B4A6A1DB80CF625B490FD25A60 - 5: 0D0AF40357, 477754E1995FC70B3D4D7E6D6DDDA77F - 6: 9E6765559AED, 389733D5DCAD65971EDB674B2479F13E - 7: 113AD2738DB565, 366AE5F327EE4BDF2CA04A3B82FA3A3F - 8: F2235181D51EB014, 3418DCFFEB24E4D94DC72F7F3876A978 - 9: 303087A4458E3063AE, F3E6B83CAA0A07261BA9D384087D6D5A - 10: 98FF08F0E42331B68492, E532298F60E06BB72C57596957400E16 - 11: CD40F0F4D8000E5096262D, 8AF824C0EC17FF0F88371BF3E05AF7BD - 12: A7EE8BD81168FBDC359375E9, E20FD7E1914136C94223F6DF67386099 - 13: 8BFD44C8A327E7835A9D43A52B, 7AF41E1B25A7BF4D1F5868F0E047E2DF - 14: 8DAF93847C1B3D8220B7748A9823, 9787A3B32FD7EE08835DD7A9277F5A4F - 15: C602FD9F13259C4D3E3700F89CDDBF, 5711A41B4666248FC3FAE3FE8FB9E861 - 16: 972734035B0C78BF774279BA3DB7CB0A, 23E96A558B3A64D95FE1669923E10CC5 - 17: 9D8B4DD8259B51DAC20C4C64693E20AEC0, 66E07F2BF239C0541DF19254F53820CC - 18: 4F76EDFD8C101BF1A20B9D337724BE0019A7, E046081F3CBD112CFAD56D9A32FDC6F1 - 19: 59B667CDFCCC1634C9891DD0D3809A682EDA2C, A0F8E38B41BD82E8010F917F4629184B - 20: 0DBF3DD74E0D165C095468824E431B8B5650EB5F, DB7B71633206184ECD6157060DB2E443 - 21: F5A457AA7ED8C131ABE99EC2C1008DA022D27908F0, 794C3E20F41E7D32B70BF043DBD0D86E - 22: ACABF3932E154342873B1EB770A3E5E31C629090EE8B, 4D998537CAFD3453A5D748EF09C81B69 - 23: 850CA96B3B1287A8726E2B11B7B17EE321CF7D65481F73, D78C52190C81FCCAD299DDBCA72D95BF - 24: 5060CD915C916D082579B571FCF340E82224A9704398E033, 30EE449934C54F531D2702F8F1B9F510 - 25: 0C47F5CAA3F2E8ED47F016918B634474B004B357A35337F14B, 9D749132486F07B06D25428B592CD767 - 26: F01B95D67392793ED557D2C7289CF899C053ECC5E8BD28BA662B, 3760662B33EAFF659DEDD2AD6E7B32A5 - 27: BF8B0FB0B069978F0EEE2120F61B6437969C0BDBA700AE279B3239, EF2A1D664F26DAB4F9E8142730C2942F - 28: 64E68C83E76FECF44BE02B2E44F182C1F6A08B8DAF396BFA3B395A18, 55AEE32957B9B15AD35F172849308919 - 29: B594643A43A91DD34A75D30B259EEAFB75145C91D8A862F2526CF47A35, 0E60E4118213E89C28BB71A8003A94FC - 30: 5D2E20D31A1F6C48EBF52B63FAE1CC09C85F2307E509CBDD4E8771B65787, 11D347399697D4955028F7B08EE32B93 - 31: 8726247FAEB21D7F8927DC3E90267ECD744A8452C64B9EBE08D1A590BFA1F9, 8D75DAEC7E4438E7C701A392346EBBF6 - 32: 0DC0EE528456FEC203AFB12A55A4D3A901B9408958E5387EB42E75730D98B6A6, D7D682F57C1E1671BE459EE33BEA6B26 - -OCB3-sm4 (16 byte key) - 0: , 5AE4874946EAB321286A5C30AA6B4B12 - 1: FE, EAFB170A60CCAFC101780C51A35A77D7 - 2: C914, 36606CD5546032064EBB2B2EFB962442 - 3: 6CDDD3, D7DF2794D1169B1097701EC7EAC97ADC - 4: B9EF5F04, 6CEC2C898116792A42E3C823C1274A2A - 5: 77201EA353, 40B522CEDB325AC6684F6560C0282555 - 6: 5A5A86063B5E, 9EAF522E35E9AC2D2AE6F50F707FE8A6 - 7: B04D78AD924054, 4CA7F758F395154EBD95BF0BC8B28618 - 8: C089204BEC680CFE, 4DF7DD68E7F468FD070CA876949BE593 - 9: 4F368531FC342799C5, CAD9C6A6AB8DC5445C8D48BE005819D0 - 10: EA61FEF7AEA9EEC392AF, 9FAA6F9A39CC88F9F4423534104E26E6 - 11: 55A79A6EF7F1F75C42B172, 4C8D817200E7A9368866D5DC9619ACE1 - 12: F0D1A7080D89189D052C7DC1, 7903ED2CCED2DA132DC480EDA4178650 - 13: 7D55F3544210EBFD2BAC6BB18E, 903AAE3C64CD8993711BADACD2014BB9 - 14: E8FB86041ABB30374C19B1FBC542, 03ED4A92F7CA8F280F6148E48D2483F4 - 15: 5DAEBCDE1C64601175B5A6E446C9B9, 1240BA45F11091457D66FA5C58C08D6D - 16: 2A4F6718D7333C9415AE69CE5CEC431F, AF79781109795D4BBCBC3C55327C60C4 - 17: 2FA374A6724EF7CADB0896A3BEBDD1661D, 0105D0D05BFB6E1D1990A20D9294FCD1 - 18: 9FF356181B833CEA5A0903D3373A8C310B0D, 82AAF55237C5D3D587CA3188B6B57CBB - 19: 13CA7A42D6E55A7A03AA09BB77F234DA876A7A, 914B59E12935290A8D68D0F27762D745 - 20: EB94DEC2EBAB6A8C2D1E412E4F3F337048B3B301, F43394E403FD4F7EE07CF59D4A6ECAF7 - 21: 8BDDCE25D442F0BDAC4CD1F0FAAB6B0B6D049734AA, 6CAFB1D636A6112402477DE93B853AAE - 22: E2298B85A6A6E7271857851EA90E584743B7A0A029FB, 64105E77B6A8C5A4739A1393ADD6E37D - 23: ABB540427006B696F59666612E5D123A02CC3C0F908867, 35430C4394E6A7128FA4CD0AA66BBE9C - 24: 8B048DB31FDABF2746CF664ACE1B8B138937BCAD03612FBF, CFB7FD35560F1D0E3EC488B799471544 - 25: 6936BCB5A10B52D27FD13D259D166C415689E1D7BB2F669EAE, FA4BFD853500C958DECF8D77A31A8F46 - 26: 7C0415C2C28D6F9895755EF3E1214FCC96F3AF2C70DBF6948031, F6D370B244D7F5A6F301BCB5CED7DEDC - 27: 195B75E3D72FF9AA5492EBAC7638A8AD551EA9E6B541D9689A5465, 1D8A1BB3A38ECA89ADF8F3B48F34682F - 28: 70522F78E5DB3829D61540C641A6C2FCA75BEAD1BC7DC6C3D15C2E2A, DD5072319ED0E24E4D3EE931CB82B3BE - 29: FCB983E8F38EFF1931A01E7CEB5AAAF15AD969C84DA1BBCC39E4F45D68, ED463576EFD354B7FCBAC13EC8DC0708 - 30: CD507929D9E5025781958420C66B1EA4F5397C2F467764591805AEB2A095, 6E0B6BEF6C38D4424926B6DE1B4C315E - 31: 782FD749F729A1546E3C105DA7AA2CC6541ABE4192443D3D400C4D6B88A78B, 207918EAC7F7B92C29D5DFB9C3779DA5 - 32: 4E23AE32EF1C9877F43C0FC3C285B422387EA18BD30F7F8BCD1DE64B9BF7221F, FF6F490EA358433EC439AB1954C6D473 - -OCB3-noekeon (16 byte key) - 0: , B23A40302652E204B694EA78AF5A8FCC - 1: B1, 5245C8680A6F4520168B173A39661249 - 2: CE8C, 05763A489DF8B88DF01862007B2D6655 - 3: CB7D55, E14463F2230FD60AC779B5608F708A13 - 4: B4E9D036, 78A9A918D7CC6E742F22BBAB7781CC7F - 5: 0CB35CAD63, 1A010E65263EDB85039E81B8BF88B978 - 6: 7094335707F5, 8EC8C49EFBB77AEF2B443855760CF5D2 - 7: 734E7D94C8BD6C, 5E701C5886A72499A79B3DB6A6F865A7 - 8: 5375C12BD7B724F8, 3C12E52B9E0DB5967AA09C84DC4D48BA - 9: AE56D9F446D45EF168, 297EED4ED9671F7D9E6433E189C754AB - 10: 203F357C80E760BB0D47, AEB8CCB8AA3D0752266E9BFF4B501832 - 11: 12A9F075BF911C0691338A, 317824AEDC90F284C3702A651BA50488 - 12: A4F167C8D051DC582892E5B0, CCB64B2CD8CB62212003A4E0A4065B23 - 13: 42B2F2B5E43D407E2E2E047957, B81F80502CEE49C84BCE21A942BD6206 - 14: BA5562041E71339AA676E1BFBE07, 7C0920E33B1AD9257FC6FF8732EE4BBA - 15: 1D1DE906DDBB4C3FB367DD7FB59622, 10D4E97FF5495A4250B60A1238D21B3D - 16: A06A25AFEC795738D0ED17542EF1E691, 1D31E82501E1779FC62E8A2847D89631 - 17: F7BAFF86763A1BE37F6ABCAEB2E8A64411, 4F3E5E7009B8A09CE47ED7E67D9B6B0C - 18: 15A97D2BEA9DA105282144776C710A047F1C, 79406BCFE7C9E8283AA851ACE9D40AB6 - 19: 80FD02BBAD283477394A3DF93FD6323AB2718C, 30FB621D3A41DD01BF8F4E7EFFE93C22 - 20: E091A9D6C14A60627FF6BDC59DFE85E9528AF3A6, E8D5A085BC63B7AA48761FE4431A7966 - 21: 76FC712E7BE90A93015045E96DC102FFC2DAF113AD, D563F913F2A90D653C0764F276F8D0D8 - 22: D4A6E1FD6DC7504CE40F4A1A7B9342ECCC03CD3788F6, E6C45E97B3B2E00C2DD0C639EC056485 - 23: 7DB75AADBA75F026F430C7B9A59E4E0F228770990512B1, 09BAFFCA7F69156C6ABD5FA7A8F1F39C - 24: 18AF0400D1FCC74AFFD5D2FE4F8224A29BD17DB2294F89DC, BAB2E20E100E6292658A7BBE67F96E13 - 25: DE47E5BD43101F0688D7149811511E549C8846AB71B35A12F8, AFD0DF5FAF7821759DE3AD928B239570 - 26: 1826EEBA81A57174214F9953BA88F4324456127D7F7ADDCA8036, A03FF1F7B71611D8E9B41DA61E191A90 - 27: 73D79CFEC44F7274720BC73B7F2422BDB79A9DE6245B08B006F654, 00F66AADBB4110E77A7A788A1B0CB4B2 - 28: BA5F0C34A1DF413378C6F49E09BEDE1ED757935934C1FDCD978C2B3D, AC286CAE6E7C3DC2CEE3B6019F5A1662 - 29: 231AB287C2156BD0E590632E057D7EE92B6DD7976AFB75540FB04FC84C, 12420BEED7F377C4792A0940EA91C34D - 30: 7B06F611F07763C65EA542EAF679DDBCADDA4B61238F489331184FAF764D, 56FCBC05F1E3B57286B1AE881FF04BF4 - 31: 17C5B1127E3D08737590EFB2FEB17562E7FDB4B21A768595ADDD9697CF9B46, 6F4BC0A033BE040350FF4958866BDEA0 - 32: 4667525E9B39821CF08E6C7A7E37A5020CE23F81DEF05932113E9A6B5B3F9BCF, 5C0350C6F7299192947EB22ED415B05C - -OCB3-anubis (16 byte key) - 0: , BAF3C352341E4E8F5E1FE11C9CB3E151 - 1: 1E, 01BAEEA2431B9106129937F135D46215 - 2: B586, AC89B511AC5F80B2E6F9E6BC96DDCE15 - 3: F28FB1, EFF43DCF8C909D51ABD58CE44461C35F - 4: 2AE6B0DC, 36A21C9193BDB12FCACA73E756C6D75F - 5: 4A37080738, F90B5BBA5A103EAF4ED01FF845F7F6C3 - 6: 369B9FDCA431, 85C530F58C7DB80C6E8B1F3A9A593C69 - 7: DF0388D34583E9, 4EEF27EABC10A78488F82E8105C52C2C - 8: E63011F0E310F68A, 8AC5A7B20B6F4E160EEFA6D16DD868DA - 9: 93FBDAD02B07A03C8D, 2C968FA16435934EB40F27019AE00F87 - 10: 6D91E68224DEAD679298, 2AE270894D8618D4D92485B51B7B5658 - 11: 53B08EE1F8FFF2590B7CF5, FC9A33C9221C06ED7EBB1D3C33BB0FE9 - 12: AFE762CDB97A411E0F6D8422, A9A1028C6055FA627007E65CAFE5618C - 13: 781464F6A0739FB8EFD8C6130F, 1DBCCACDDC218B76FC27F444FC0CCDB8 - 14: 1F9AEFACB5D87693CCBB9D173529, EE13B9890D0E05EAF61E1BBE8B0ED0F9 - 15: 107248D8D565CDBD520E50A139531B, CD7220BB19B95C496FC901C831AB7CAE - 16: 1045F21485E1C4FB812D9428C4D29D7C, 08035EF80327E3D238D98A09E3B48542 - 17: 68E48C74D09B7D07F38BFD1722F6DAF18D, 9D94E4B7CC4F00F1716D830D953E1DC4 - 18: BF9D274E7DD49FA2ACEE1D65DEB0A5A74D2D, BB841A83356BED14D2A06B5D7F5F8556 - 19: 4586B730D46E9BEBE34EB52242DE954CD39B90, 40981229C0DC8D47C69AA261D2BC960A - 20: 11038CE2E4AB2D2F8258D4DEF25F102352468350, 1EC047D2BD87BDDF02068BFD5742688E - 21: 25E4D441758E4953D463D0BB63CAE2B8D5F78B7968, B548855DEC4C11C10F74983D6B426A41 - 22: 1711526E226559666D2439881650AEED6DA12EA01A72, EE6D4D29BDC8EC975ED90340910EF829 - 23: A70447A0317930D20C5EBB0841528802B948DA7E437EED, CCB551453425652D6535DAD0A5890431 - 24: 57D82A93F29B4B2C2CE4D2326D2E224836F0857EC8035972, 87E1F70A7D4140A58851A2C4F0E39F0F - 25: 5F065C6406B07A8CA35AE0F05D0D48C631C6FB3D7655D5F6BE, 2E3EE16DFA370D0F988615CA063DD62F - 26: 3DE835DAF81C17F45DE11431A6F8294FBDFC062F237A7DF30E1E, 401F8841A7D97F84438B905D2C03A416 - 27: ABDF9D5E996364C628D4DCF67ECC870117E8CC5A6C52E4663C26C4, 05996C80448BCB0C4B311E05AD0B4C5E - 28: 1C2401BB1DA2CEBA1BB56C69728FDAEE42FBFA374E57DE1C593494E6, 8491B62BBF372C671C311A97C173BBE3 - 29: E504321BA399FFB6E3187B645635273A92C63D014E337EC266334BEC7C, 026444BAAD6C4EF67C660180CCC6E7B4 - 30: A61D3FCC22988166F57F4585E936CB8CD714713355593780F54EED1681E7, 3507D5E0185318CC4577C5FECB3A348D - 31: 55AFBFA3A57B960AC0F8B3DAE6EA60165FF7D5A77731B05BCB7E8C647487AA, E25444D551A823650757DAAD8ED6B588 - 32: 5553F81F123EC0697C26B00BF20BE287C0A1E9C4035C8EB3036F6D58C8A3B83B, B7349CE03F264F816305A6D46C274980 - -OCB3-seed (16 byte key) - 0: , A7D37A371F0B3596ACF3856B5D18B45E - 1: 49, 3C671A1AFA5B253DD8FF67FFED9C33E4 - 2: B986, 2A069C4C6FF67FA6880D6EDA8490A3C6 - 3: F78307, AB6D00AB217E62E1C2863A63E7E805FF - 4: C43CDED4, 9332E6E78B574354B866EB49B951AD6E - 5: 47FBFDFF71, 14B3A25479FC36C71C837680871855C9 - 6: 4662362F3992, 28B8B162DDEAECC2AFD92C343C49D986 - 7: 64BE9B49D4E3F2, 6DD06663768ECDEBC64980E0FE11BA9C - 8: DC6F456F02349DDD, D4CBE9414C65BEA4F1340707410A8D6F - 9: E0C1166D7CA0A919B2, E7B742D40ACECC618A9012DA72C0DBB5 - 10: 1E9B38CA4B1D2E41173F, 6F87E9D8B7EA96249B533FFB626773BB - 11: 7598A106F4A42DC2EBCEAA, 8A1358443F492C6996ECA14D41FCD91A - 12: 79C43C511A13395E5F1D259B, 0955EC3B5D6999D1DACA88E4B4B0EE77 - 13: 39DD979B5CDC450D7E7D49136B, 78E5E86F6FE3EFC5827BF7F088EC8FF0 - 14: A1C18979318C625FA4FCB0D40FC0, 6F9508959B87F510F3E7B39FF3237B7E - 15: D3A55B637FAF068BC97C52265B7DFC, 8C940DFDC990CAD1A08179784E668012 - 16: DC120E50B38579CB4A45DC7D45C29AE6, 2E0939B538B26E0009B198D5C3E6DE17 - 17: 266CD82BBCA8FBC6D146CD10DB417685F9, 0AE1614717E23EEFD5F9BE7916494A71 - 18: 00741031BC893E10F6B86698B4B3787FA14A, C297ED582832F4B77C7AD820F5637EA7 - 19: FFCF3CF4B06AA83E05E5C049DA2A4F1AB4843A, F2FB3E63B88B56E9D680560F346C6144 - 20: 381DDB2637F17F8FFC619AF59A4DCAEA227E95A5, 82D692BD1F86AFD28EE140D021E69532 - 21: 6267EDEE16E3FD95356079CC4366BCAA0739C5831B, 9D4F17B8A5E85E5CDD18FE16D6BE29F7 - 22: 0B79A1E9B3EE98DD6EF57E4F23171D84D7250562B4C6, D76DB52F53F51553C604FF17E23253B4 - 23: 1DED7558063E2F8B18514B8F5A3446981D6CD648ED098B, 0B209EE39335BD6336309D1DE1EBC379 - 24: E3E3CF278C9FB18005A468674E1EC0CDB5DB5B42ED1CA4D3, 772C852C854303FED2DE41F8437E81C7 - 25: 8D0F93686527DD62C4101B213B88930E375167E48B04446B90, 11BA6E13F45B82FD916644F859689AE6 - 26: 1B45865FB91DB5E93D87569DDB8A1CC395381E875E5CA6EAC1F1, 8BCB49BD6D413542DC88156758EF8CBD - 27: 06C381B8028DAC54D785CABF55B47AD7BD2CFC6D66C4B538F287F4, DEBFCDB4E6C7A43B7D7E0983D4FC0C87 - 28: D71A0CE6A88F80CC922189EFCA5696FE5C8F6557AB744698E4A65222, 4DCB5B5B0F9794D776C4C63C3E00C78C - 29: 23099CF8578E878B58589D6FFCAC8E6A74B373074D90E0F38ACCFB6117, A5B2C145ECF768842A957E47A8511D2F - 30: EC19652D148810E8C714D184263FE7E961FECE4C9CFD30D6921C32D2D4A9, 74B900BA5F4AE547C19221081DDC1F91 - 31: 9DB58E1FEF922A4A1F99602710ABCA029E8A10383465C62967EB0A466F11AD, 08D4FF277C8DA53A2598201B255B7FD7 - 32: 1BD03BAB70BE842FDB12E49DEB04AE477335B0B3930E75A27C37EBB1594099E7, 3A6DEAE1C289763C4405DE86544DF401 - -OCB3-camellia (16 byte key) - 0: , DFF7EA9ECD4E2AD37B9838E85F9D36EB - 1: 1B, D5D37222F530EA2C282A4D8BC55A08EA - 2: B73C, 5163F4BD7CBC03DA1B31C7C1105B5511 - 3: 42B8CB, 997087C18C191D560E3FCF70E77A3C15 - 4: F533FD5E, 15275FBDDED6459BFD8FBB8FA08DDD3F - 5: CA7A675DD6, 11604097A97E10A4724799DC6A349F34 - 6: 00F4D4CAC81D, 9165C7B49928D47A8F3C17C0B029F44E - 7: 8751CBEEC4D29C, F541920B2E92DE956B6468EF83DFECB0 - 8: B851DACF29824BF3, C16660EB40CF830FFD263C52C1FA8C97 - 9: 8646C3D808426E03E8, DB30D0CE9F7DA93162D69D42F0B4C644 - 10: 0715BC4E51EAF610956D, 2475EAB0B92533BD574550F316C86746 - 11: 12F6C6BE1A4AAD391BCDB4, F1F387AB03A4E36965CF41C6842950C4 - 12: 4F85DAC1AB5B6D48CFA75266, 57B3ACD0FB6D2F8B672BF097E7C559A9 - 13: FCD56B0CAF30F6A29324AA3067, 437461CFA9DE7562A572085439CE5B5D - 14: 612BD3BDAA826CCCC76722699D51, 90863205C506D85FEE095B32F3E1DF93 - 15: 5C85AFD2B6A6FC85B282B57D48642E, C59DBD94D744A6F3745EBD9D4EBAE0F4 - 16: 64173080FB3CB43EA8FD41F23DB88587, D80103E4C578DD4B79A23372E34ED967 - 17: DBA50DDBF3B3F064F8E40967EB53769FB3, 4751B6EEAA9B2E49BF8B23A3BA13807D - 18: 04B8D0D351F3FA3B3B3F641A244EF7036825, 6BB18750DCEBD39DC25E42233475BE7E - 19: A15A0C3E91CE8AC01C8A5291D24FA0514453A8, 5DDC4FB9D6C7AAF7660B763EADAAD969 - 20: 6E223B742F768FA57651AD90B6BDFAA772E6AC04, C987C8A3A27605B6CE04B25777286875 - 21: 1FBFEA7AB374D972FBF76456048F77745D8E7B64C1, C301981D5C17473953B00818967E9230 - 22: D642F5D05092443C776E53D6FCF2B65F6D25E8E98F89, 5E87E6BFA1EBD436909126197B2CCAA5 - 23: A8270C56D2A0084670A0C5D8DA2B495A849D1BFC571912, C4D32192AC893C87C900EE2F80443789 - 24: 431ED5C50F16D509C8229156E9BF0A7E1998F48F0032D91C, 960F4467E129A002CAC3F75EACCC7D73 - 25: DB57EDEBCAA10C4B8E0194CEE7E778FDEFA88424883DC476DC, 069F456F5AF43492AEDC7FC24A0ED875 - 26: DC8AF80FE840605041638184A00F683FB0AB86C4067550B4DB49, 862057189AC987639992EA9F49C7158E - 27: 6A67318A81F95E33F741C95BCBCD8623CBF26D2D8801D0E745DFB6, 22DA5E8C63CEBC5A6957FB1A01AC7571 - 28: 70587F34F31CF711F2558C7DB1B04334DD58D850930ACDD5825EE131, D2436CA4FC757B16509CECA1272A2955 - 29: 736DF200A877930DA3EC2FD0AF53F08285E02EFB519A443F50B9E2F1F1, 22607EA2C6F1AE1B73785554F9440F2B - 30: 62248D90EA60163F9CBDFAEC498802AA816915273093D375B02BBE22241B, BFADB3689B3863AB997D101380F7156A - 31: 41C092516DC494E4E165EABAF939858EDAE3D3DAE488D14EFDB0E850675565, F45307A495AFE24E29E2AB744311F07C - 32: EFFEAF5A73C2A825AFEE12A2BE80406937C75D4264FD937A310FA57C7D5D01CB, 3B430C0DA47DAA069FCC5C92C5427396 - -OCB3-serpent (16 byte key) - 0: , 41644B8EC26D2E17704E9672E35B7680 - 1: CB, C2A63BA8383D6B7715F9F9537832AB3A - 2: CF55, 05C93C786C5690D7263D1E8A2000FD60 - 3: C2DC71, C5DD3ADFC37AE996864C668A4FA79661 - 4: 70B3C079, 196DC9A8BE594ACE825F71BE8ABDC5A4 - 5: C546167392, 8BFF55BAAEFDA76EC8DE7E5B301C1B78 - 6: 8F6B6E1C7DA4, F9C28EB7BC64C26F3C862AE5315C9C70 - 7: BEF54F32A4E502, D931EC6EA9165E4A23DE6531D728F79D - 8: 862DA6C6C4C6864A, 8D087F4E192AA08AC14CC0E8FE735A33 - 9: 5336AB6945FAA347B8, 9CAD11FBE86011F872C68D85B7003DB3 - 10: F4950C42B79374E4C0D2, 775ADDAD869DD3B912444D33B8B98AE6 - 11: E445E8B46DA8623E3F6960, AD253749B2453F1D86D5D4CE91C3A11E - 12: A9B21268031B0DBC8D091FB4, 11CF154818B007F9E2335DC2CE3692AB - 13: 5DDD737D9CAAECA39E9A282CE2, DA8E7275360A6099A5FCD3EE4D65C30F - 14: 66631DA582F7A1E8C35ABBB869A5, 71927DD54E189F5C43B68B675F00CCE0 - 15: 3475EBEF7803C8D3CDB8774FF7AED2, EE2D9370434B6CDC2DAD922265AD0E53 - 16: 732536E50C887334D05DB25F2ECC6ED3, 9233CF71135D979C27E79FD6AB7DAF25 - 17: AE5BCDA23B70894E1192ADDA30A10FE30A, D05D97B23D3F813622DE7A7EFC67BF8B - 18: 65F2023E4DF6006180709A239A5A9387D649, EDA9F67ABB96AC268E23BFA1F07192F9 - 19: 837A31A15D3562C99C1A108CE27F81CDEB1245, 91DBA8ADA9BAC949B22B86C08E04C27E - 20: EED3C97EE7CBA13815E6EF5E22C75A7D486BF274, 714DE1E7163934419D650D99F1FECB77 - 21: 59E589AF5ACD014D4AB450490287E7BF766CBDD131, 914DA019D53052AF65BC066112FE7CCD - 22: 9F8AB009C4A3E849C8055ECBD7AEDD6A1F70426385C1, 6654B56A1D589EA5486BFE902C355FA2 - 23: 532438DBE6E47A8729EE02E8C47111E4D7B90A7B098499, 34F3A82F9D7E6BADB6F8CE7193D81663 - 24: 2FD29C61D3A70C9EDA7EB42CA3DBDB1ED24E20DBD5710F4E, 4CB52CF090FFF15974236428DC0D321F - 25: E3E404730231203895EFFDD83495AEFE265D4B4F122EF32894, 3739208F2E9D9AD3FCA138E8BC399A65 - 26: 2FB6945DFC9144D25C505F991C154243B5BBEE43BEDC3C9F3978, 2C291D274D751C93DA3168A45DF7FF2C - 27: 11F244A9265C3D0FF8DE581F28002434C395458143F94C02BD7A55, 8B73783A1BEE7CC879C8944BA15E033E - 28: 7AA49DCBC09E877CC91714FE6CE2CADECAF9DF771197DF0EAA2B5B20, 7DFFABCC40089E828F3C1A4DBBE28A68 - 29: C05269D72B17120FBE86397D655279F7C198467567F0B1FA24BBB077DF, E5487A7BCAFDBC08342369DA09FABF12 - 30: 7F97808D172665B399495FCAA6A673010E98EB6ADB25C1A41CF0F957B958, 33E6CA26292F6E9F55EBC6BFB3694E89 - 31: F7435456F02EE5ACE92F7E1F29D239A09AEB487BDA78B08A40837547CBFDC7, 86E15E8711A93AE7F89808D21BD69AD6 - 32: 9D49A127710AE66D612C8E7089CB254523109DFBB0ED2A3E44412C3BD81326FA, 624FA0DF639EB14A5A337273886E6CE5 - -OCB3-aria (16 byte key) - 0: , 9A8EA3D2791D38324C9BACC96BCF82CE - 1: 19, 446F5F8D49C6BAC154EA8384E64A1D48 - 2: 5A83, C90961D9AB29CECAA99F951A95D23F22 - 3: 807DDC, 3BA6934C1CCE61E9EDA066E41EFF0AD7 - 4: 327F5BEE, 0318AF9016A92112CC543E031A1A51A2 - 5: FFF8DC35BA, A026C07E6DE112EE2B8498A8F396042D - 6: 5B5F1FE15EE7, 0318F0DCDF6E9773AE2E37D5C5DB5A99 - 7: F2C6EB3475234A, 9D6110EC3D8B616F374EC39F6C275D49 - 8: 4AA76358FB75F90F, CE3863400E138EFC71FD4205CBCA5D77 - 9: EC82D7475865843ADE, CF515D04E6739F3A0A8B819BA3515A33 - 10: 19C4E18F818398446949, EEAA0AC20B13766BA15D95CC9464097F - 11: 86F1E3908368E3084DB6D0, 9C00BEE8D20E35EA3EE3F81FB474EF42 - 12: BAF2D547F49B43A60418357B, C2C9BCF9F1B5CAB46DE38E175592BA3C - 13: 5BE6212E3764AE40213683EB13, 861258B08C082561494E73768222ABC9 - 14: 4C17C291FDE263C277FB559D262E, 6E605A88B38F7E5306E1DEB145970F4C - 15: 6ACF32B0ADF1AB382DBCB3F8ED4EE3, BF32F0C42281A24024E0BDA55F67F649 - 16: 42DEF2781B15E36A450A4764841EC4AD, 787EEFFD05338B32935225CD9844EC5D - 17: DBF633AEADBB9005FA8A21310AD91C7EC7, AC70191276E1E5032FBF0BB14E51F68F - 18: C22A89EC15DCB4B5B3E168B2A424FF4D30E6, E4DD5206C09735952CDD742D889B4815 - 19: 88146C16D2B00FFEA71408F72093290406AF1A, 51DCCA474F2AE7D311537B0D8ECCC061 - 20: 796C82E676AB7954CDFE20CB7CA708EAF78D3884, 09730904D0C499AB8CF493A0B02E438D - 21: CFD3CBE0AEAA34880FD193D5F4DC4F6102AB55C93A, C5FD5C351C0345225B7EC8D8D50AA580 - 22: 2318BB06AEC36FDA7827BE179C75E5874CBA42FB9F02, C4A2C3EFC2E443A8E13C73BD5F8B7A38 - 23: 5FE4AFB1E643F87CCC1E82118843B116BD6A3CF0096666, 77840F0DCE8A8C51F2D77B2634C71302 - 24: E25A2D277F5A592901159534E947F0D20F448FE5F5E938E0, 1966E0C0E2DAFE83C904B34389922564 - 25: 67F94D9AC1D7B65630E24D4CEDB286CF8B6C0BCE9B750BDF4C, B1D1E6C0E7FB73F65FD8D1C96A3741EA - 26: A22F24E4543CCE061DFCE9AF3B8A1330C6B5FE47B0D16AC272A3, 1C1F0D79857F79A6A8B9433992E8D959 - 27: 83AC68A0B2D52C850FE35E88215042C69EBFBAA1BB778BA6D7BF84, 2B496731C5EAEAECB8600B9E92A9544A - 28: 106FDE139F9930C3F5AC457D22B11F779D971BB24DDB34DD602B1364, 56B7B8B59AE5F2AC8F9F31296082AC09 - 29: CD4AB7BD24BE095D9503EBCF54A338F4D85A9F7932D97DA006C82491ED, B7DA2A86C88D7EB2580D65F30D15E546 - 30: B5173B221C65F10D09F2EBD46B7F0CD06E8D75EEF0FC06800BFD68A656D5, 174B7440789F41C7882A3D8C4F988FF7 - 31: ACFE0D3632331B2295274A572631E9A592554B01B24146175000C00DA69348, 97C729946ADC709ED269C1829E53109C - 32: A9981E51A873F0E175591974DF9EF7079FFE785F7EF7ACFE76618533C0FB490E, 827005A3E65F0E018308B32CFEEB5AA9 - diff --git a/notes/ocb_tv.txt b/notes/ocb_tv.txt new file mode 100644 index 00000000..aefd8fd0 --- /dev/null +++ b/notes/ocb_tv.txt @@ -0,0 +1,331 @@ +OCB Test Vectors. Uses the 00010203...NN-1 pattern for nonce/plaintext/key. The outputs +are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag of the previous +step repeated sufficiently. The nonce is fixed throughout. + +OCB-aes (16 byte key) + 0: , 04ADA45E947BC5B6E00F4C8B8053902D + 1: 07, 987354C062CD6251CAA6D93280EFE9BE + 2: 1CB7, B9F1620EA8374E1C2D05110878D93069 + 3: B98C59, 3793FB737C2DFB29E73DD1AD8B8F71C7 + 4: 8978F240, 5E25316ED13D3300F2EC12D718A0BA8E + 5: CB4D261594, EDA252A1A5C7D0A4AB4620F771446DD3 + 6: 30D6B6688D59, 684037DE07832C6FC38CA42BDF2A7D53 + 7: D0583F9741BFA4, 3DF53DFF73431C0245982F4EEEAD432F + 8: EE3B9596CBEFF520, D283D1B9D990739EA05F4BAE2E96BE4E + 9: 6570FC25E6103AC125, 90D3F1FA6595B775749FAE7B00A8E5B1 + 10: F56750C98C370DFDC4A0, 19389A6875FAB432B72D64BCDD6BD26C + 11: 3344AE6D9528603CC1E4E1, 87AB6FBC7F919125A7DB0D17D19056B8 + 12: F3D9D816A727D3E67330C779, 07AC0F3841DFCFEC58A5AAC22270538C + 13: 976651E63ABC3B276799BC1FE4, EE603A8C66099AD6FF8667B3F34ABF29 + 14: A48E3ABC31336C6B717A96170A9B, A9D1B973D84D3125F5F9D7923BA0A8FF + 15: F60E9B2A911FAFB0080FAA3ECDEE42, 4902F8AEB7685F7B255ECC45B5B7D3D4 + 16: 0855DE488940144AF18C65A9966DDB66, A66B3E7A75D394273AC196FFD062F9DD + 17: 172DC1740F75AB2A27B2B80895961A69AB, D6986BB95F7E4137430CAC67F773623B + 18: A414234DCCC61B65A79B7C618A6B91ACA410, 6CE32E55E158BC3E51E94116A615F3A2 + 19: 16A1B16BC0F63D63179901F1CBC772D612C102, 54007EF9822E0E4A4F953838577C76FA + 20: 539788EBF85C15B3A638017B4054D71315BFF25F, 9B2511322E16CECD53E3241F3D51EB97 + 21: 7E74595A3DCFE1EA2C91B67738765463D50A22924A, AC9C9B526251C16F112E769F9FBE74E4 + 22: A2B61792102B2E44F1DC0E48B40472CE883730504FEB, 76452A49C2524404C8A4B098D6390F98 + 23: F58174BC06A022AB7D81991E9346F5E4B0AEC535D93473, 47F96374BC094BB2C1A5D1D291806912 + 24: A3A7713895D178A85D9092EA6138323DC2FF9090D7F01AC5, 3814208FA7009A2934F9A172D029667D + 25: 385525DAF9949DCDEB22F7518AF96438E40F7D94933706A9F2, 1249F3DF50084A6D1A76AA350FD85B0B + 26: 6838E207D98A5BF8D8E41454CF51663D8F8B76FD26092D45D1D9, 301723D0F49BF8CF37828340B894689C + 27: 736413C025A549CB2550E93139DFD5DC3CE241C296C9FE641FF520, BE07259963F251743A85DF51EB1B47FB + 28: 7F2CD26367A885BD9E2B515D4E871272AC1BEA1C650B530E5616B2D3, EEB37E8451597E5A53CB49072EDA9346 + 29: 68F23DCDEF223B60B46E3D724A93BEEF8B110D4394C990AC3D0E34E1B6, 9A60344982F852EFE02CBE9CBBAB60F1 + 30: 66C5DE3EB27139983D48BED81D0E5FCE6BA1AB402C357062FE989D31C69C, BAFA0A7997A529039F0CE8528E670415 + 31: D3B9009C1A930EE288C61B0B15C7E92CB73484C345594DC5A3F377147981DB, 1EDAACF7F1F3AC7EA613F94DA4DEF930 + 32: F7818DF15FE6FBC42A28FDE1D55A2C07EC8D82AA0E7A680DBD3CF26C13448F9B, 67FEB344108008A88067E92B210766D5 + +OCB-blowfish (8 byte key) + 0: , 07B7752047F9E0AE + 1: CE, 7D69017C42B06204 + 2: 1D6F, 4DFD4BD58439062F + 3: 30A011, DB49D988798F8842 + 4: B71C8951, AA3261584B0C20FD + 5: 06F89957DA, 88BFA80D36427F64 + 6: 45BC4CE5FABD, 4CAF71136ED166A7 + 7: A7405F124D0296, 5D8993CE64FFF0E7 + 8: ECABEFD9E6574E4D, B69349673CF86E41 + 9: F7D26A7E82A34ACC71, AFFDEE843ABEA68A + 10: E225C5F0FA1D649F81A3, 03AC1D5DF1323EF8 + 11: 58722FBFB86C2697061217, CE731D80E6355710 + 12: E577EB8FA70225C5A18D31DC, 2F08B140F0D3A255 + 13: 92154A94CD7D42EBADB6CFEE14, DC949170E84D3CA2 + 14: 5A3C08744FD85CA262D51AC6CD25, E83CE45547403BAD + 15: 8B2E4980ABA10A20573A402D89AD12, E3D978611DD831D0 + 16: 3EDC4A0FA95BD8F944BCE4F252B6470C, 87B54BBEA86A5B5C + +OCB-xtea (16 byte key) + 0: , 56722ECFE6ED1300 + 1: CA, DF53479333DB86AA + 2: 9529, D0B5A859106FCC9B + 3: DDBAB2, 3B31FFDA57CF51C8 + 4: 22EB7DD4, 2BB34D04FFF810CB + 5: 108693761A, 7AFF6F52574A019A + 6: 391FB7C61E76, 616C5E66297F2CCE + 7: 3E22E4A4A0BD13, E84C385ABE25C8D8 + 8: 94FA11D5243EE34F, 8F017DE96049D0F9 + 9: DADB6B5D27049240A7, CA69E14047C6BBA7 + 10: F79C8EA83C69DE914DAC, 1EF042DA68106C64 + 11: C5B6E04AB8B9491E6A99F8, 143515779A55C972 + 12: 33F493AB7AE62DADA38C5B24, 531BF7799A778620 + 13: 6DAA66BF02E66DF8C0B6C1CC24, 6CDF72786C5EC761 + 14: 4940E22F083A0F3EC01B3D468928, 185EE9CD2D7521AB + 15: 5D100BF55708147A9537C7DB6E42A6, 78984C682124E904 + 16: 744033532DDB372BA4AFADEA1959251E, 438EB9F6B939844C + +OCB-rc5 (8 byte key) + 0: , E7462C3C0C95A73E + 1: C5, 83CB00E780937259 + 2: 1533, 022FF70566E0BA87 + 3: 57543B, AC4EF15FC83BDF2D + 4: 01E4474B, BD817C06AC2141E0 + 5: 4CD7E850EE, 7BB6B3BDA5373422 + 6: 489C0CD1502A, 23DD4406F87EB164 + 7: 0CBAAE08E07EFF, 92569C958B722413 + 8: 073612F283F8A6E4, 1DD978D01CE8D1DF + 9: CDE676B1A3AC98B00E, C033F099E2620668 + 10: AD3BC88EEEDA40A83685, 36DA44E13C0C8A4D + 11: CA60E8B918F73E99986021, 45634CA0E43E4B13 + 12: 3B3CF82157ECEACAD8658EF5, E681F57616146CC7 + 13: EBC1A7068346EC1B7EB815A7DC, 2C806D2A909CCAF1 + 14: 97CDB3EF8276F1E7D6B6677DA2DB, 53F00B9A2E43DE08 + 15: 44169B3EDAD9506C51A6DA055EF9C2, 5BB6DD996130896B + 16: 35EC29065B1FC640015B0F779E7A358A, 867EBD0E86823F09 + +OCB-rc6 (16 byte key) + 0: , 27B9E3F544B8F567EEBF98ED5FD55C76 + 1: 92, 219FD2D74D7E3F21AA6C2A507C0A546B + 2: BECF, 96A656A16FB3C4579E6955D592AECAE1 + 3: 4DDE09, 7D1882879B5D6FD8C151502BD8AB220A + 4: 0D6B4FCC, E01FBD1ECA2A6A8DC6697A06AB12BDB0 + 5: E5E19C973B, E5A86AADF2F333D5DEDCE410688CC6A4 + 6: 90BA7D2A6965, 80523A2CAB2A7BB2E90B121DE80F46A9 + 7: 6FE258148EC8D0, B7254B11276A77C5F99FE5EC91D81F57 + 8: D887080095DF8817, F3FB938068A01EF89DE0F1226C544362 + 9: D9823313289D597614, A547764EF20BD4B4B303882B64FAF2C5 + 10: FF68942112CF01701E86, 94F3860D4438428EE296CEACB3EB67F5 + 11: FFD390D3E0B64F64D3192F, 99D2E424C67EBACCD4E2EB9A0CDB8CDD + 12: 3162235748BDDECC84FC8C94, BDD400A58AF59100A731DD5B4386444E + 13: D2A0EC8B1F20672289F7236C56, B245CF42644BDAC5F077143AF2A57BA7 + 14: 830929B2850E22F6C1BA2027248C, B6B522F7D6BA3CFFA92D093B383542FE + 15: 2A5FCCCCF43F845AA77750D3BC6B1E, 53A0A0882C7844636900509921661FCA + 16: 8480234796F9EAC313140CE014B0265C, 0656CA8D851B53FD5C1AAC303B264E43 + 17: F011A67C22F16A42CEA5E493CB766964AA, 830B8158B7A96224A53FB7F3A08CD128 + 18: F76274A730A608C2AB37497A049C3699882E, 4DC4DD4DF39D0E68D6169F9DC7F4A6D5 + 19: 7B38DD237DE552A72E4369A81C30AFEA5E5063, 01A62CBD30153702A5B29FB2A1683899 + 20: 58EB866F1FCB060ACC821D776AAC4AD9E87C326A, 25AFB8FC48605E1396EA8471F55C1294 + 21: A25F2C0FAD66B3580627498EC66C994B49C5445911, 0182A951D9A3DA53675612DE8EED1FB9 + 22: 8813977F092F07F251A1497C898967F3F98F5CB878CB, 80BC353E310880A83DD4DE4FE96AB6F0 + 23: 52DC8B76F5A6F78D51FB7DB51048E2663563335EC876A5, DC3689AA079C04C19D83646B272F9DEC + 24: 965437D3FDF91784B63C73C8CD001BD9372167963DF36B89, 9FF84E2845E3C1E3E6711D1646B18F21 + 25: ADD40F674BD56FFC8F9B4047FAAD2471F0A48F4544C894F806, 9D684F74F9734F1C497E33D96A27E00C + 26: 7B049B688839BC62785082397DEC7AA94B837D094AECA4B14571, EE711DF1C15B5C9E36B6E38B6F7152D2 + 27: DD4681F9C498A3CF69A9AC876E02BD9CDC4FB1F6798F772013B62D, C5A50676EFAA2A56CBDBE55CFED3050D + 28: 471B5E89A1337E75E88AFBAACA1C011790F1657425483229E55C34EE, 20F73F2AC452FFEA423BE2EBDF33CFA1 + 29: 71812C83DE34DB329C8DCD98890AFB1F7719E890DAE5CEB7AC9668CAD0, 6FAA03E10C6FB67D425C683C6D85FD76 + 30: 4BC2DB33786CFD29B5CA5B804454169906138E90E29E7BE9197971027AF7, 75053C433EF5572A70C58EEC96F56C53 + 31: 5E3A0AB41264AB65365458ED3B7E6A25827E50075A9E347F1622ED0723E229, C8F1ECD19AD5FC970CF0D31BF46B0F2B + 32: 2E48DEE4B379CD59F5367D17DC397C1BFD53B8C4CE46A8202518614076174EB6, EFCE758ECCB6BE875D16B7E03A498D31 + +OCB-safer+ (16 byte key) + 0: , 88618DEF98FE588E23107E9A5D89C26B + 1: 39, 2B01B202E751F957E331ECD1CEDE3456 + 2: 13CB, 17071E5AFD5D8CE953A73F49412BE8C4 + 3: DC4428, 4B0B1881C2540FF92E7DE63C479A7750 + 4: 120382B0, 0BB11D57B5BD9D846CF31033CD4CCB92 + 5: 97F332F95B, 335E0424D0A820F60DBB968B8B5AA057 + 6: 3C7AAE72037B, C8034C2C76C1CCD7C1B3F36DD8907E1D + 7: 8A99E4A1B89B6D, 06A8165DFADF1EA5ABD89E574422DF7F + 8: 676587065F0342B8, 93ADE63994DF2189079234DC204BF92B + 9: 8EC394CBC6877B245A, 1A89F0AB0B44BC708EBD9DE489E2EEB8 + 10: 5FB5366E5CAE4DB72411, 5CA5881A5805D53ACA4904A5EEC01550 + 11: 72A1994028F09ED6A4E45C, 0FFC0052996CE45DF4A28F7A6E9CFEA6 + 12: 1D5EF20F52A9B72386D1A601, A697DF1179628DE1120D5E8D9F39DA6E + 13: 79BD002AA59D74F125AD9E32DE, 2F02CB6F70BF57BBA0DF100DE503F633 + 14: 442C6F9016DF4C090056258756A9, 58C6FD3180B9B74459D70B5684BE3F4C + 15: 4FC5543D9A892B44ED04EE8B25E232, B8B858B3D3EB4B26E867E429F88A56B4 + 16: F06E7503167C2210AB332259BAFD6AB4, 73CE2589D1DF34CA3DC2B14CC9FA6276 + 17: BCCC260BD4823B64090FB33E6816F9C330, 81ABBDC83B2544907840FEB5AF4479EC + 18: 450C1105B76F960D1A5F33D7F9D37DAE20C3, C41DDC8980E88E3986D9C84857BBE1E7 + 19: C9F36EF3A990E0554EDB59E6788F8E9BF1DBC7, 90DD543E148D9A0B79A8B376C5509E09 + 20: 3666FEEA98A4FC434EDB7517E7FCEE2320C69BCB, 99F11B360DDB3A15C42110831CCBF21C + 21: 126F39C19D1E0B87F1180F6589A75712B66209E2CE, B4D268FB8EF5C048CA9A35337D57828A + 22: C1B6D14EE8B6D0A653BFCC295D5F94E6BCA09E181D8A, 4B4883B614D5CC412B53ED4203EA93B7 + 23: D1F2A10F1A9DAB738C61CD0EF66FE5F6D1DA95DC671128, 3F1EFDA55EFEF1A0B24708E132BC4D25 + 24: 9D457216C584F43DBA1DD55C54822A8B6A86D22DBFFA14D4, 53402970B128E98A5F0D62476A38F959 + 25: 012828614B5D67C9A1EE24A1EBCD322FE9C8BE0C3F20A53714, 2BFF288D90DBDC638084F80F3F7AADF3 + 26: B1904AECF599F6C74557475E409E75E646271DEDEC7A830260DB, BF119BDBDA27773E038B7067D2B0EECD + 27: ED831771C4346FC19435354AE29F7A9436D6E8D4D42CFF26207DBD, C3F029FC8AE690E84FBD0EF806B801F3 + 28: E051B958601223FECEADF932A277BCF18C25025AE4DA791155B85035, EB75E56BE7856F1B5ED3D125C092D38A + 29: AB3449537C5E22125BC32D483F74C3A3DBDBD5232839A85D300F65B4FD, 851B0FBABD080F783BDE4F47ADCD6D76 + 30: 4E68550837130652795A8C9D68530717D2B0AA5A17F3AEF92FFB502E46AC, 10E222706527A64E757EDE4B9EFC09DD + 31: C2D7033DA7A1857D79497EA6C64779EB969046CCEE6C74E6592FEE6E7C94C4, 2015674ECA80AC9B67AE854E18A7D56E + 32: 2F3F0374DDC24AE21F02D4DA74D46C71F0CD2269A68F32F7FAA0BAB64AA8E9BC, 737C8BA1677A8CE97D42FBB07530EE99 + +OCB-twofish (16 byte key) + 0: , 2CD8EF22E5457C7FE4016B0FB82FD204 + 1: 64, EB7BB60E4932C0E97A7A5906BD044ACF + 2: 3A59, E3D2024241666369BB542ED096F20C71 + 3: 67C038, 7E6F1EB3F2088F6416BB675DCAC0D484 + 4: BB36BF02, BDEEEF07EBB7A50A5201C8A2D72C0036 + 5: 6F06C0E293, C63557681D84ACCFFBFEE87D82EF1D3C + 6: 2015F94CC5AA, EF1DEAD4134D2A1A47A20F26FAA3554D + 7: A5F8CDD07964B0, 672B74D88C8AA7567C6AC4A896E0F6D1 + 8: 5EFC9D8C3B9E7F3F, DB9160C53AD429D4C22BC0E2E6C509C5 + 9: B62CB80F75594BC54F, 20020A798FF59F0472E750C796B5CC94 + 10: 970983B0F889760EEEF0, 360AE43CEBCC27755548D4984CEEA10C + 11: 75C3A8CCB30A94CD57D1F8, 79820F3B1625E216B5BC1D1A22B198F9 + 12: 033DA41CCBFE3C6897230FCE, CFE3EDD11627270CD63916508B058B7A + 13: 15358032F30043A66F49D3F76A, 98B8056A7991D5EF498E7C09DAC7B25D + 14: 71FBA7D6C2C8DC4A0E2773766F26, 22BA0ECEF19532554335D8F1A1C7DEFC + 15: BD761CD92C6F9FB651B38555CDFDC7, 8E3C7E1D8C4702B85C6FCD04184739E4 + 16: EB6D310E2B7F84C24872EC48BFAA6BD7, 12DE548D982A122716CEDF5B5D2176D9 + 17: 8DDF6CE25A67B409D3FB42A25C3AA7A842, 3E9FA2C6C65341A8E1101C15E1BBD936 + 18: 5563DFC29B750FBC647E427C5480B65846DB, 90881C6820901BD41F7B3C2DF529B8A9 + 19: 93343C1E9624321C2A0A155BA8B4E66FD92BE2, 71A641DDCD49825E10880D54BEF30E91 + 20: C256BCA0CF0ACCEEC1AA4B9372AF27D2C3C65AFC, 91D45C4DA49BBAD1809A11F4041C7D09 + 21: 3DE69FDB72C93518A3E317F7B26C425EE3DD42DA7E, 85E37B3E8EC3AF476DB7819D739D07D5 + 22: 676AC7885C7C8FBE9862242FCCC46C181440EE49AE59, BCDB42B53AC4FDDF9C3BF8849AB96EEC + 23: D71B98B88F46CC47D90BB931564CDF0157F0ABCB5E6954, 289CD5799D9E49F36D70F67726A59610 + 24: 669C16DB9DC175200C08476832155DAA52F1F8969DF3B79A, 835B210EBBE5C9D34C2E052E1843C1F8 + 25: 2F39346E14A34BBED0491929CD9F1FB3CEC412C25AB703372A, DC4B42E8BA676BA100B87BEE328C5229 + 26: 1FD0F8BD0AC95E91881635EB0CF0E4FB099CBB214CE556422E2D, 898CEB3CA8FCA565CE5B01EF932FD391 + 27: 7FBD32B3D88B7E002BA6055585B5D0E1CC648315A81CFECA363CC8, 804820B1E3813D244164F778B9C2A8C8 + 28: 877A5F336A1D33AB94751A33E285C21666F0D8F103AC1187FC205372, AF9F0AC165EAFCEE8C2A831608F166B4 + 29: ECCA297705B0395E71B9E4263343D486B29207DA188C2F1BA626EDBF46, A05DC873406B236E4DDBC038DC4D2627 + 30: FF3BD8D4E1108E98FBAE2E28BC12819CD7956BC491C0B3A291FBEE739599, 68DFE58473BA2818A23095D1D6EC065C + 31: F175230606040ADACEBAFE4D58BBD140B2D45E8BF7E5C904510B58E4B53D3F, DAF579E1A12481D39F4DCFB7C28794B1 + 32: 261388D491EF1CB92C261FD9B91CAD5B95440DE0A747144EB8697699F600801D, 749056EBEAF4F20CD8746AA8C8846C47 + +OCB-rc2 (8 byte key) + 0: , 1A073F25FF5690BE + 1: F4, 3D3221E92E40F634 + 2: 2C76, C22C20B7231A0DB9 + 3: C647CB, 3E6348D996399629 + 4: 2021891A, 8EF76B24E9D55FDA + 5: 1966CBCBBF, 310D24024D573E8D + 6: 42C15AC9AAF0, 217E83C0CDE4F077 + 7: AB70F3F73DF0B6, 16AB2679D96A591B + 8: B7C7DD845D7E76DD, F33065EA531545CA + 9: 468CC16A37CF63EA73, 88879733F70AE3D3 + 10: 4F769E25A7346E22A932, 26E1A92FEDEE0597 + 11: 304A8B53B1CD24C6C27C17, 48B46E9F091B0B2E + 12: 4E3DF867FEFF0B8E06D5FA70, 53BB48BFB8AB4750 + 13: 2BAB3F0A8C38A3BD3C49DBBA5A, 52303CADCBB6D312 + 14: 3D04A29924589AAEF93A29003EE7, 120EF9364B83748F + 15: 486127A80E4EC599C461451CF1D79B, 2245D51599CAD629 + 16: AF8FB3FD2DB343F1AFF564FCBEA58785, 805BF441E660B0B0 + +OCB-des (8 byte key) + 0: , 8A65BD7DE54082AD + 1: A8, 3A83897CC8EC7CF6 + 2: 9256, DC66C39C7DD87D93 + 3: C145A0, 45967F3764F62F48 + 4: CD314BAB, EF38B0213259C3D4 + 5: 7074014741, 6748F4BAF06DD7BD + 6: 9A874CAE01F1, E382DB7235624104 + 7: DFA0D86DC4CA84, 627ABB432E50455E + 8: 685C2B2CBDD8D144, D166082E085063BA + 9: 53515DAAC7F7B8CE1D, 6680B6C26E1B0994 + 10: 2B3967812BF4155A8D36, AFED7F38AFEFC543 + 11: F4E5AC3CC5913B8A7F35FB, 6181DD3C46A6C24F + 12: F3EC89AD4235287D53715A81, 12CC354833FE5BD8 + 13: 66D554AC2CA85C079F051B8459, 097F31088CFBA239 + 14: 8746061C26D72771A7586949A3E4, 6CEF3565D0E45C6B + 15: FB3BCC650B29F418930A467EA4FB73, 64D12723E100F08B + 16: DE1C27E9B3C391AF5DF403291F2C084A, 6BADE4638AE46BE2 + +OCB-3des (24 byte key) + 0: , 9CB7074F93CD37DD + 1: 4D, 51541A838A154E0B + 2: 5C77, 60E86F2F1F4C6F96 + 3: B3D2F0, 7D74A9E6A061457D + 4: B3556075, EAF7A89A07453460 + 5: 1B61CE7230, F90D18620E1AB877 + 6: 3987FEC8D0D7, B5EF04DEE2E528F9 + 7: EBD0A7EBEEFF3B, A72CA24DD77A5DDA + 8: 429FB38DDABF76D4, D0578484C37227C8 + 9: F8DF28BF5C4CD28B1B, 5E7C4DC8E694E3B4 + 10: 2BF436BBE063F7E830C2, 8D919637C973C71B + 11: ED21656C8878319F1B7D29, 8813280C1277DF26 + 12: F45F90980D38EDF5D0FEC926, F9619341E273A31F + 13: 52F2D3CACC294B141B35D73BBF, 7BBC3F1A0D38F61F + 14: 2E6DA0FB55962F79B8E890E8DD8D, 8060799DCAB802E4 + 15: D6F9A6B2420174C499F9FE91178784, D3AAF969ED2F7215 + 16: 4F1CF285B8748C4F8F4D201C06B343CA, 203A2692C077F1B5 + +OCB-cast5 (8 byte key) + 0: , 77E8002236021687 + 1: 52, D57DF1037B6A799D + 2: 31C9, 7E781759B057D695 + 3: 5C8324, 56965D6CB2C97C0C + 4: 17D99099, 7C52B5D09475F5D3 + 5: 400082C475, 3CA5CDB9B4A0FAE9 + 6: 4DF0E4000C24, DCFEE2C3384F9731 + 7: 10004C3CE32255, 0A6832F985F61658 + 8: FFA6EA76B346893C, 6202693B153254D6 + 9: E96378C94D246AB51C, 5B259FEB715B9159 + 10: A9BED2D59A92D3D9418A, 1E7E066C098A023D + 11: 4EF144B7D4622BAD4DC840, 5DAB2C1D0DF56B08 + 12: 6DBCDF56E57CE47DD3D0CF44, 2A24F2A224368F55 + 13: 43241A0AD933635D7C8EAD47DC, 86B4B5AC22177F19 + 14: 920D6BDBE073F3C75052420C883D, 10943DBB23BD894D + 15: B2C75DF024269833B039CAB19EC865, 84B7DBB425E45855 + 16: 6A9424B6A873BB7155C01DC87E23EC52, 82C5047655952B01 + +OCB-noekeon (16 byte key) + 0: , 72751E743D0B7A07EFB23444F1492DDC + 1: 61, 41BDE9478A47B2B612A23752B5A42915 + 2: F4EB, 90EF542D89F867CDFB1A0807F8AA3CC6 + 3: F5A59B, 1BED873B613096546D4C201347CC3858 + 4: F454610B, FB4035F28AA75221F599668ABBE21782 + 5: 382FC932F1, B40270E2084E8DCEB14C6603D080D7C2 + 6: 18F921441119, 47F1F889B307298150750E81E94AB360 + 7: EF01C70C9D1810, AE0439DBB3825F27CF846B43E4C3AA80 + 8: 89863EDCAD471C3A, F4E8AF73BFC4CB79AECBBB3774DAF8C2 + 9: A6F494092E066A70F6, F73D3B04752B7D913420C17E656C7F86 + 10: 342459682E0A8D53AF4F, 61E7CF14E9878E0726C64B1E8CA08BFF + 11: 65E520D5A99825DE2441D1, 7A2AA740D786EB7015C61B31959E55D9 + 12: 2F96D0BB72E37DA202410302, 1A313242527FB522289094B9AFDB5F7B + 13: 3E8F8A1FCEE3F866EC29128BA0, B8065DA2DABF04129E5AE28ECC11A15B + 14: C2C15976D3C2499ACB9454878131, 372CAD486E104098EB1AA78A2922A1BE + 15: 1F12CADABAEE80E448B7EDCB42F8FE, 86A38DE5363787F55B16462C684E08DC + 16: 3B9ABB3304E75BF5B63E7F5B5A3F3980, 1FBD6B93E457B9779E2D12D78301EFA9 + 17: DC0CD805E43675A4317452E378AD48AC4C, 40AE4AFA4B3E580EFDB4AD0AF5BC4E4A + 18: E9DD52EA7264C6C7BBA39B761B6E87B65687, 4061DD65D5E7FFFE8D3D4261494D4F8C + 19: 80A9735CA1175072823828123413CCE772D521, D3378A12E79C49A37378DF527A460AB2 + 20: 09AD495AFFBF7CB8841262E7E5E8952878D4391A, C25D7A98C6F260B5FBCA3B8B5F7F33C1 + 21: 3925615707CC40C351D4A49794778545BC1F683175, 97622437A7208383A4A8D276D5551876 + 22: 5BB0D41ECD7BD2CF0B12A933255D95A3FE35E4C896BB, 4B8AD84EEA3156765A46AC19C68B6F88 + 23: 1EE71FE23CBFD5683AB1B391FC12B4E5952E4E6AA3D189, B0FD75996F28E071EB6C86BD7102BAA5 + 24: 0AA3D8C98AADEEE1867B13B017DD263BD16E960DA64FD071, 5204780963A62C2F4F7B3555BFF73836 + 25: 3A88B6F2AE321B226DA90B98E04A6A1589411BEDBE994632D5, 5638AF04EACF1EB986AC0702B4373A22 + 26: C2731661AC634A4DC0345F040DA7AEE507A3B9D019B5958543BA, 4C67D3FE37ABEE928B3BB812E7346823 + 27: D3E7651AA6DA035D05D599EFB806E8FD45177224593B5974758419, 5814E84258E1B9BD56A188AAE6F25138 + 28: 17818E7102B8C123230C5D64F18BE94C3159B85C8F7B64A7D4712CDA, FAA905B587A93DCF600BA8589A985432 + 29: BCA4335C6C29D978032C216114D39C01C6F161BF69D5A1CE55FBA8C575, BE24424A162E43A19755E2EFD274DBED + 30: 24C33CEE022F8A633DE9DFD009F535B52BCF64F390D2375E5BED65B70D08, 138F21D54B6B7E34628397DCDE0D33BF + 31: 838FE950C8165ADBBD6B61E9732F9A727CA7AE74376981382F0C531C331915, 0742E769CCBA2D1CAC7CAD4E0F012810 + 32: 57CD778DAD477271794FBF763662D97F8A10B17D70A69FDCB974FFE67E558519, 942C7D1C200C3845748F8131DF71AE26 + +OCB-skipjack (10 byte key) + 0: , 90EAAB5131AEB43B + 1: 2F, 6274B82063314006 + 2: DAF6, 6A6BCCE84FD4EF02 + 3: 5C2A88, C83D54C562A62852 + 4: B6E8FB5E, C44459EF41C8F296 + 5: 6C0888C119, 269DD7657BD0225F + 6: 1FD9AD7ECCC3, 3CA090F46B107839 + 7: 1EDBFF8AE458A3, 440380BF9745132B + 8: 04DBECC1F31F9F96, 2653620A4877B0E6 + 9: 908AE5648AF988A896, 00180FF33C1DD249 + 10: 53E63E0C297C1FC7859B, 36616209504C4230 + 11: 407BE16144187B4BEBD3A3, 4754B7DD4DB2927B + 12: 9961D87CFEDDF9CC22F2C806, 5947FC41E6B9CEC9 + 13: 9F5254962E4D210ED8AC301252, 97A392BEAF9B3B04 + 14: 379FDA76ECCFDAAC10F67FBF624C, 1D895ABD932BD5EC + 15: 1D5A7AD556FF3078284BB21A536DAA, 01FAE2F4936ED9D2 + 16: 4B8B71396924880CB33EA6EC6593F969, A0F4B1BE3B9B4CCE + diff --git a/notes/omac_tv.txt b/notes/omac_tv.txt index 5a11a86e..e74f76f3 100644 --- a/notes/omac_tv.txt +++ b/notes/omac_tv.txt @@ -57,23 +57,23 @@ OMAC-blowfish (8 byte key) 16: 8E6831D5370678EF OMAC-xtea (16 byte key) - 0: A821403929958A1A - 1: 68C4A02D47C2E7C0 - 2: 7D37358141506DC1 - 3: 9BEA3AAE55B75F52 - 4: 884D053D05CC8DE4 - 5: E953747483FF4E0D - 6: B6E77E72C9738E4F - 7: 8AB67D2B24E3D512 - 8: 329C0B9D504A0D41 - 9: 50323DA8ACEF4164 - 10: FA3239C668C34DA3 - 11: B5A12FC81FC24084 - 12: 71A01A3ED3936934 - 13: F29B630CEB6AEDDB - 14: F8802F0D4504D55E - 15: F844B92162038F99 - 16: 99AECD7CA69F0465 + 0: 4A0B6160602E6C69 + 1: 1B797D5E14237F21 + 2: 938300C83B99D0AC + 3: F989B99B3DE563C6 + 4: F65DEA2A6AD45D1E + 5: 1DB329F0239E162E + 6: C0C148C4EE8B4E1F + 7: D82B387D5DFFE1FB + 8: 1D027A4493898DF2 + 9: 196369F6B0AF971A + 10: 2A37A2655191D10A + 11: BD514BE32718EB4A + 12: B4DBC978F8EE74ED + 13: 8ACCAD35C3D436AE + 14: 73ABDC1956630C9B + 15: 73410D3D169373CE + 16: 23D797B3C7919374 OMAC-rc5 (8 byte key) 0: E374E40562C3CB23 @@ -199,82 +199,6 @@ OMAC-twofish (16 byte key) 31: C24FCA5DD4AE0DF2BFF17364D17D6743 32: DC6738080478AF9AF7CA833295031E06 -OMAC-safer-k64 (8 byte key) - 0: 726FE2DD40A43924 - 1: 2A138B65EB352621 - 2: 9588A1B53E29616C - 3: C025DEFDE1A59850 - 4: 73D062F1B6D8E003 - 5: 944598A2FC8A2D76 - 6: B176C25D8CAFFC98 - 7: 14F05014DE6A090A - 8: A7B9847B2CE22D0F - 9: FCD71310CBAA3A62 - 10: BFF00CE5D4A20331 - 11: BEE12A2171333ED5 - 12: 333FD849BEB4A64A - 13: D048EC7E93B90435 - 14: F04960356689CFEF - 15: 9E63D9744BF1B61A - 16: 7C744982F32F8889 - -OMAC-safer-sk64 (8 byte key) - 0: E96711BA37D53743 - 1: 7DCFF26A03509FE1 - 2: 0A20EF19C8EE9BF2 - 3: FE2883748A6963CF - 4: 557060195B820A18 - 5: 771A7931FBBE5C0F - 6: 6BDBCE5F96CF91D8 - 7: F3B924CCE8724595 - 8: EC7191286D83C2C3 - 9: 94F55B19BB7A8AC1 - 10: 2189F4F2B06A8CA4 - 11: 99853DAEBCA33A46 - 12: 66EAC37A033802D7 - 13: 845D7AA866F8A8AD - 14: 33A874DFECAC22AC - 15: 63DD9F7A7F3683DF - 16: EAC277D951676C44 - -OMAC-safer-k128 (16 byte key) - 0: 8037B89AF193F129 - 1: FF2314E87BA6AFE1 - 2: C3243DF896B61D85 - 3: 0F61C715CE821AB8 - 4: EBFDC6A9CFD2F5A4 - 5: AB6497D7AF2C7FFF - 6: C920CEEB7C1819C2 - 7: 3E186951B545A7E5 - 8: 5EA36A93C94AF4AC - 9: 6A2C59FAE33709BE - 10: BF1BAFAF9FC39C19 - 11: 69EB6EF046677B7C - 12: CDDCEE6B20453094 - 13: A3833BD3FED6895C - 14: B6C05E51F01E049B - 15: 90A2D0EAB739D39B - 16: 07BF607A161D0A66 - -OMAC-safer-sk128 (16 byte key) - 0: 5E8B137A3946A557 - 1: 0228FA66B13F3C7E - 2: A6F9BBAFF050DCDD - 3: F75880F684A796CE - 4: E0AEFB8E32040EBD - 5: 9F65D658B86D310F - 6: 3FA52804FB46CCAA - 7: 2F6D12D199FCD2FB - 8: CB56AF60AFB4D2BB - 9: 8E6F0FF6FDD262FD - 10: 490245BE3CCCEDE2 - 11: EFD319AE46C73005 - 12: 43E00E545C848995 - 13: 10444B41ECA15EBE - 14: 521775C389D5BE71 - 15: 9B683EF8B097FEBA - 16: 3C5D746EED09530A - OMAC-rc2 (8 byte key) 0: F001FE9BBC3A97B0 1: 8F8DC9C952897FBD @@ -313,25 +237,6 @@ OMAC-des (8 byte key) 15: 7FB7CE0862958B37 16: 55097816B10C549B -OMAC-desx (24 byte key) - 0: 3DCD366D8E4D6EB8 - 1: AD1DF426B344F922 - 2: C50DD51B953E37EF - 3: F732DD355496D72F - 4: B8A9D3819024AD6E - 5: 7C4624125A33C0DF - 6: 378D83372E82296F - 7: 974C7613AF191E95 - 8: C856C3F7B1A944FA - 9: F7898CFD34AFECE2 - 10: 9B5B09251EB0F44B - 11: 369D0AC2E71641E8 - 12: B798AFD13EDFD831 - 13: 066207F46EA9B6F2 - 14: 4083189F5CE42C5F - 15: 6D04E4B9E2ECA8DB - 16: 9D9EE9A8B5AC27C2 - OMAC-3des (24 byte key) 0: 7F07A9EA8ECEDF9E 1: 4E2A652EB5FBF5F8 @@ -351,41 +256,6 @@ OMAC-3des (24 byte key) 15: F8637AEEFF10F470 16: 0EA19531D42706EA -OMAC-sm4 (16 byte key) - 0: 4DCF78C73B13A3B9494DE1152E66E9EF - 1: D969654F96D6A5888051528E4B417231 - 2: E90E3429E81886D1C31C5B0076DD6967 - 3: 0200C38838F6AC2547B57CAFB68197FE - 4: 7675C0168A1E04AAD697D52B74F354ED - 5: F3235CD0A674C4BE3DE00A59C59047B9 - 6: BDD7ACCEC9155E657BDBC36DF69AD7E7 - 7: DB9B8E833FED5FC7D5FFE00526DDD6AA - 8: 83DBBE2766B9BDB59146CB3CEA4A0AD7 - 9: 95D3B45E49B41F5EF0D661DC62054A8B - 10: CF88F8DFAB57F5966ADBE703EB12A3F1 - 11: 7BC575121B4F37E7A7BFD22F1B78685C - 12: 43DD61A4A29D22970F51DF0573A92670 - 13: 305B1ADF8D5E5787CE7DAF41A1D383B9 - 14: B9CB5438AC40D45B15D438A97CA56C3C - 15: EA698BFB6B673D2DB6A44CCF45B359A2 - 16: 6C5F95BFAC3303A1EC872B01453AB9FB - 17: C5E8C622028131DDC11EA51AD38CB12A - 18: 0D306885AA1E6AC9B4A1F257AFF4F8A2 - 19: FB942DA9F2BF3A42A48D4F3704F9E4D9 - 20: 164E103E28C7BF2897212C45465E6BE4 - 21: 29A8D843431D5383BEF4618186244A88 - 22: E5198A53CA4D07C652A43F5F9F1284CE - 23: 7D7EE2E1992B09A10BFBE257E0965426 - 24: DB01EACF33255EEC1B91124D20C00EA8 - 25: 5BC1F4E148752FEB8FFA54638EA34E2A - 26: 908D641E82579034EF63BC715E8340BB - 27: D22784953DA497AEB56D795FC1576D48 - 28: 2C5332E28F42758FBC3B35B430B54CFC - 29: EAA87F4C87BE3AD58927E556502D68FA - 30: 130EE9E3DE2AA6EBC5FC5CF0247D0FDA - 31: 8B08E2E6106B8454F2180AEAB5034D65 - 32: ADF8EE93CC8DC3FC007EA2C361FA995A - OMAC-cast5 (8 byte key) 0: 7413DCDB9F0C3100 1: 423799EDF1472B79 @@ -406,39 +276,39 @@ OMAC-cast5 (8 byte key) 16: E8B0B219D4CB699B OMAC-noekeon (16 byte key) - 0: A9F50A6567FAD338AB5727B3B94DEB82 - 1: C9EC17EF3656C9056E64E692A449AD24 - 2: 7D1F6A3373BF20D4E65804B745D40855 - 3: FE3484F11C338721F3FCB4DCC608BD6E - 4: C45670D31D48CE9AD70BADE9F7A6A5B3 - 5: 6AF86480F1AE638DCAC40939B864D4DE - 6: CBBAFED3A5891A7BD8692055E4C59444 - 7: B23439FC6D1CF0E3B04BE5201CAF9283 - 8: 385D2C64F55B3FE976E660155FAC4C90 - 9: 239D4B8F663248076E64CF743AC14EC0 - 10: B942C5E06C6E68866440EB10747643B6 - 11: 9B591FA2FD9A20C367FB03366150D1E7 - 12: F90183F872D062AB4642DCDCED399970 - 13: 86003C2F260EAFC81BC45A0614F88381 - 14: C80F88A148FF906D42E6D75A50049468 - 15: 0A81478238ED815D7CB04C0DC5A4A4D5 - 16: DFE74730DB9CF4F994084C88923A8931 - 17: 91194DAAAB458B5B34E991EF534D4BD8 - 18: DAA1CCA0B644AB9F8B4D889D7F1268FB - 19: A93AE4F41DFB6CA311FAAA148A9D53D9 - 20: 6FFD47B80A991A6C09775060E4A4B13E - 21: 4BE3101511BCA3251559ED6D3BFCC304 - 22: 3C1AA3485241175A9A17F440A1F2FF5F - 23: 11D2C5E4FC75639CC61C8FE66C2F5135 - 24: 3EDBF9F32259650ABC2C835301FA6556 - 25: 56FA9AA43C01CA5BA798780D3BF40FA1 - 26: 40AE1F352003026C6D4C5F44430DD5ED - 27: 264E11C88266029588A1B8369F0C5B73 - 28: 60CE0E6D2C2C74D122DBDE57B3EA44AB - 29: 5E4078E7CEFA94886E9CF0D083C4B468 - 30: CEC169560600ECEED6E5C8F06C76E702 - 31: B4209736F08EAAE6D5B4923D83EB3EE2 - 32: 5DC8D45C9954B82864F1C2388858D97B + 0: EC61647B281C47C1B43F9815064BF953 + 1: B100B1B6CD96DCED8F47A77E70670A92 + 2: A96CDE3C48831A6B0A5ADFECA6399BDB + 3: 14E75E7CAD840208834918B29A5D4430 + 4: 9577083713AE6E44EEC987C77C93C072 + 5: 2A738C02841E461238C02F5CFC8E66A6 + 6: A901327E451BE0D2D9DEC83DEEA9A022 + 7: 5ED7EE1BE04A64A689D15F6970A821A6 + 8: BA053E24FCFD02C731A8CFCA19EE66A0 + 9: 57139CA8C91072555B29F85A19E2C84D + 10: 4585EAC7EFB84869FD96EE7A5FDD350B + 11: 62AF6C415CA73E54E82EA306254C1BDE + 12: 75304F9724BD364F84371EE154F5210E + 13: 7FE5DBCEE826760434745D417453182B + 14: EC98DA2A580E9131218D1CDE835423D4 + 15: 631BD9EAFD1AE445F2C1C35E2B4416ED + 16: CA2D902A1D83388FE35BAB7C29F359BA + 17: 0DBF0AF7FCBEEE21FB6159C0A2FFCD4C + 18: BD7CD2C49241032DA33B1975EE2EE982 + 19: B30B090EE8626D77D310EDB957552D46 + 20: 64F608AC5707C381AC6878AA38345144 + 21: 28513CA7795B23A02B37DC3732413D23 + 22: 9F440700094517847E9E013C8915C433 + 23: 8CA483F313D20BFE7E0C089DAA4145BD + 24: FA44872743E20E5E0A069B3C4578DB50 + 25: F6DE8FFBECD52CC1F213CD9E406DF3BC + 26: B9702B7E846735A3DCC0724255F88FEC + 27: A1DDAFED2B1732C7BA89C2F194AF039E + 28: 2549C5F0E30F8F4002431D2C098805B8 + 29: 52E3836181BF5C9B09A507D5330CD14F + 30: 01C55DCBCCFD9D7A4D27BDE2A89AA8EF + 31: 3CF721A0CF006702CDA91F2FF3E4D5E3 + 32: 6D264B9065BE98C170E68E9D2A4DE86E OMAC-skipjack (10 byte key) 0: 84EDFA769040603C @@ -459,273 +329,3 @@ OMAC-skipjack (10 byte key) 15: ED91F98DA98F42C4 16: D8D0FA5CE96B08BF -OMAC-anubis (16 byte key) - 0: E672617CAA1E641C0E7B4B4CC4787455 - 1: C0C16E8FD63907C08A8ABBB7B73376D3 - 2: 23F97CED54939361830396224A7BDD91 - 3: 7FD87DEA9F05E07212DDF61292D9E13D - 4: 929A11A4D0991A6446B1051926A6048D - 5: 4EB74F1CC0150D86126BC6FE1FC8253D - 6: 33C2C3C072D05BB6D54F87579C23B116 - 7: DE350181C9E90A79879813A609BE77E2 - 8: DB519EB9EF0E154D9D248734FD3D3724 - 9: 4F7F2E6D3FC72BA94FE24EC0ABBF4E66 - 10: D646389DBCEEDD59EBB6E8F09C422930 - 11: 8547658AE1CE6A8B8D010A1E1FEA7AF4 - 12: C9BE2B7F3630EFDFBD3AEA6A108C86EA - 13: 290417C57096B8B9A1BA3C20FD91285B - 14: 9AF60E99692C5F911CBF969A6E11DC14 - 15: CDA433BE58C98E49EBA8A7108E50DE2B - 16: 7430D0EE631A4659351B8A4489A78D46 - 17: DCC74C0FD0415768FE00225CA14B7DC2 - 18: 0CF2432B1B465F2A8C5FACAAF2FEF619 - 19: DA020680C64E93AE5FCA3D71466D01C1 - 20: B9C33A86E6ED9FCCDCD973382DD1B6A3 - 21: 6631236B9F2F810DD4D97E6046F41AF2 - 22: 0312C322F4D634CF4FBC0C2624E3E9F2 - 23: 111E3E9F8FBDC1E4364622723F1CB524 - 24: 6D2608D7AAF243D5219E14513895BFF6 - 25: 683BD01B43CBC0430A007ACBAB357DC9 - 26: 01B8FC65C56B0F1A5BFEBEDCCF6748D9 - 27: 4D6298D63A80D55491697A6DD8E3694C - 28: 6F0205E4E083CAB00747D723300510DF - 29: 5183BAEEF05E9402A935EB9AFF0AA2A9 - 30: 1E673BFAD4944643A740C59D96A5925C - 31: 940FB4000E34EEE78E8DB402E4A76502 - 32: 87B0C48F3D155AD85D0502D94A4572DE - -OMAC-khazad (16 byte key) - 0: 4EBEFA460499424F - 1: 97AEEAD51E541D16 - 2: 29A35212910C9595 - 3: ABD1577D622074EA - 4: 70A537DE14DD765C - 5: 240A19016DE99C51 - 6: 4D42C10A9F803177 - 7: F464BC3E0DB5A909 - 8: 1C65A01A7C08DAC7 - 9: E49A1428C230C209 - 10: 16DD0FEB7A6505B8 - 11: 2DDDB3E35A05C220 - 12: EC88910C799AC6CC - 13: B2A65C9EF39BEC8A - 14: F0D2366BA91DFFD5 - 15: BCAB623CAB7AAA23 - 16: 9BCEAB857596E478 - -OMAC-seed (16 byte key) - 0: F184C3569AE39C95609E878E8E69D276 - 1: 6B94C6CEB7347C7E478D33FD1892032B - 2: 9FA405B299D5887181C5F09A27AF9F76 - 3: 7457B824FA672F0D939B3CD161A3D229 - 4: EF164E3F30058EA7BA10B1D7ABD945F8 - 5: 22FAD3E42EB96A6E6A66FA73FC96A9E4 - 6: 9BE414C3CD92860A67AFB7C45D0E0EEE - 7: 40DA2A768F6593E45214CB7F054A9BAA - 8: 9AFBBEEC8EFAFA7A22752F3BEE055811 - 9: 45EBA2A3EE9276A90FE7FC705086F59B - 10: 9FE7E1DE176065440B45B1F8F012B8E7 - 11: 5D45CE9EFB14AE973C6567E804492D4A - 12: BB37B25C98998B0CBDF7AA2BF86FBF3B - 13: D68EA4AD5B7C3E243872F5BCF7F24EE2 - 14: E880AEA09E328C58ED99928C7BB97DEE - 15: 4A9EBD30EAB684544D79A066545B100A - 16: CEFD858C3179B39BADA7EA0F6D3AB150 - 17: BD3336CB8C5AC6D327B310C2093FD087 - 18: ACB4B352003B45FE5E872647ACD2C945 - 19: 74FF04F0ED7ACBDFC2B8EDB0193312BF - 20: 950B9587B448A73F0566B6E5D30BD85E - 21: A1CEB1E515BEE6C0C2253415CEDB7F54 - 22: 5E3B9B8F983B882D48853403152BBD09 - 23: E7BB12680BFDC81851D08870862F5F70 - 24: C89D50E7BC1692A3EE29585F4C2861DB - 25: 1ACBB14354F3A1E002BBD065930F56B8 - 26: AECF4E3972E26A862DC9A0D0F78F4A75 - 27: 4E8663B1FD460CC7B6CA7D6D880209C8 - 28: 0350DFE2A107BB68BAD09A9461EE5E64 - 29: 89B70BBAF6E7F4E7E37F40D122588B0A - 30: EB0B22BCD7D61272372502B7EADA68A7 - 31: CC4FB973D094008F4B90D687CD91B4C9 - 32: C7162431A53216C22D47FA511B0A619E - -OMAC-kasumi (16 byte key) - 0: AF4289889D9AD5A1 - 1: C58E7863B4E8CE54 - 2: 2927047C455329BD - 3: 62905068423B826C - 4: 0BC0C92B5162FA20 - 5: 03E6D71DE770BB3A - 6: 6D48AB1CE5EC49FB - 7: 338597E9545657E8 - 8: 418BAF4EFB83DD50 - 9: A47BA8181D187753 - 10: 76FAA6B0FF3B9D4D - 11: C540C8A06345FAAE - 12: 67E454776D871265 - 13: D4E0ABD317993766 - 14: BD328F89D3C1FEA5 - 15: 580E74CB054A9F7D - 16: 121002BF94F18D90 - -OMAC-multi2 (40 byte key) - 0: 3A06523F10C9F2C5 - 1: 310F665F3A12E82A - 2: 459FB6A9AC69FE27 - 3: DEB259E248440826 - 4: 6598F16BC1BFB8C8 - 5: B37DFDF8DD61D479 - 6: 0CE3BD7843FC83C4 - 7: 3BB7880A7E8D6C9E - 8: 74BAA5B4EEFCFDB5 - 9: B71CC55A72D4BB4F - 10: BEF0C7D0781B368B - 11: 0CA0D02961398164 - 12: CF3848FA94C45657 - 13: 57EA86B185A210D3 - 14: 05887EB7679F4B62 - 15: F6A007FF4A175F82 - 16: 57E61B59AC9F3240 - -OMAC-camellia (16 byte key) - 0: B5664C5148FFB45297703BCC46C19E4E - 1: 126EC31A554E8B3B635DE4617092ECE8 - 2: FD57148685F4AA85AF48017AFD72B410 - 3: 1427607464A408C1775B4036509E9659 - 4: D8F5A7112CC8A9DF28B331FE7184BF08 - 5: 0E29B0F09409DABECF645F05C4A5717C - 6: C4155442FDC29685028AF4AADEDCC266 - 7: 92356ACB98AE2EDAABE0D3ED0C90772B - 8: AA3C828618F72258D91BC391876776C3 - 9: 189458BA4D98E85802E7028E5C57A25F - 10: EE652D70328DA00D63B42A5E85D70E63 - 11: F9D1E5F8E1539F2D657A047755CD232E - 12: 56FF5979FD3DEAD90EAAAF79A9AF1DCD - 13: 7E8B39D459D5AB449A8C5917B0CD0C4E - 14: 822D9B9C434C6FF7F0E5A25281740A91 - 15: 654909D2836CCB06501CB359C717C1B9 - 16: E8996FC89D47C91543B7BA3DC1C34B73 - 17: DC29D51B2372DD7564CF56AF8702924F - 18: AD74D081197644DFE2723CABC991B1AC - 19: 26145C6DF074CA53125F6F386FBEA373 - 20: 72C6C760A70FE410FAD113D8BE711D75 - 21: 099D3B5802D7FB699B6B8F031BE10B3F - 22: A9D5DD3988A18AA7BC6F9C050BDBE8D2 - 23: F7E99E4C3C7D127FF04FF325F7B06997 - 24: E99A2F7547B5C6EDF3BC2EC2B8F05198 - 25: 46C42FF49FCCFC49FBC99FEB08FEF10A - 26: DC349D600A754F73ACE6A7D2D00D3551 - 27: FC2E5434ABBA44ABD9D724A9BB6CA2A6 - 28: BA923927BF0074AD73BA8A6914194297 - 29: 7DAB39F8D7E5CB93265568E6713C7CCD - 30: 9F60259B759B68E1C8F89CC36C7E170E - 31: 7D611F8BFEF0491CED8815C0E3D4CAFF - 32: 31E04DE5F9D1403C660E39891DE0D8DE - -OMAC-idea (16 byte key) - 0: B821849AF0FBE074 - 1: F686CE9F4D057023 - 2: A76370E35B3F4AF2 - 3: 77553E49EAA385F2 - 4: EC535FA524C96DEB - 5: 2C0D343664AFFC4E - 6: 42CD72FF061B53FF - 7: 7FA04FA032DAAC2B - 8: 9C9390E1F70D50BC - 9: 30CAF924369C5249 - 10: 9FBB0EFC020AAC6E - 11: 131B42C7B807BE1A - 12: D2B7B9B0C6DB4EEE - 13: AEC00D350FE9B72C - 14: 046985BB876162E8 - 15: 2650AF8B3983AE0D - 16: 50F09209EB28179E - -OMAC-serpent (16 byte key) - 0: 32B85B2D0F6A080E75F1FFE3A9FB5FFB - 1: F64B8FE18564E74DCBD49F773D7979CA - 2: E3C48FFF5808AA7945481908FC717548 - 3: E0C62FF36F4B4EA65E1AF2D09039CFE3 - 4: AB03CE05922E2B6AF001B267DBE31BB1 - 5: E4064DD1F7B97BB930F38C601375A6ED - 6: DC0E7B1BA3CDBD7E12EE7925937551CC - 7: 57339E1EF4A9E91D10C3FBE6FE93CC93 - 8: 85DF3A320B77510535723BDB885C6471 - 9: 15E3F593D2200F27DEF08CEFE763CBC6 - 10: FEA659B89FD367CB508411FFED43F1B8 - 11: 4B7C3776A1520E31A5BC80EBE3470276 - 12: 425FC3093FEEB420672EA70A71D7C7BC - 13: EDE32E118616A02F3E43E1607D5E715E - 14: 00ABB127256308E517C12D41D72C6F53 - 15: 2AC61ED0CE3393129EA22A6715536334 - 16: 01175B1577CE91E81C27B51372617995 - 17: ECE4166171B912D090AB134875C7249C - 18: 481E14C574AA8AB6DFBDFA81B3B6F298 - 19: 2CC33E74FC8FF36A268D25E28610B46E - 20: 270735B926CE2F9AD7DEC785D4B4F8E3 - 21: 5A47B86DBF557698B37025A70417FCFF - 22: 19130FFE070FD9C2546C98B76D447104 - 23: C6BC0BED4C8CF5E182F69DAA13AFA47C - 24: BC33925A9EFE64C20B24278663C7FBB0 - 25: 1552EB3F1396031C7306B2D34EEEC01A - 26: 8C0BFE93E9FCF490CA4B4254CFD2C24D - 27: 3F570BD03EA24C72CF6CC740B4EA2652 - 28: C34DAA57DED46E788573472F4DAA1743 - 29: EA26F5DAC00DEC6BC7F5DA35902DB020 - 30: 71573E129764A4C1B8F8A2D1BF2013CF - 31: C7E18CC108DF3FF1E3A024A1B0B928E0 - 32: 6E458187EC664A776005EA140154ACBF - -OMAC-tea (16 byte key) - 0: AFFFFA671072AA14 - 1: 4F2113632BD0300F - 2: EA885545F0601DC4 - 3: 04EE4A961B57D587 - 4: 7B3CE6D2F53EBA2D - 5: 5589B7ABDFA45D88 - 6: F0932A9958090A36 - 7: C82ADECA3A6D8FEC - 8: 53DEE813EA84E8EB - 9: 268DC8EA239A3FBC - 10: E716FC17E51609A6 - 11: 5F0564D9A8F877F5 - 12: D3F25DE735A5085B - 13: 4A125CAA16ADCDE9 - 14: DCEE8CB047957FAC - 15: 33F078C713C6DA61 - 16: BB936D1B0427DD4F - -OMAC-aria (16 byte key) - 0: 67A59B2EB6F1FCBE11D03B919CE21D74 - 1: 217E6B5334A102372909BE481A40096B - 2: 62717F16F92963789D11578B85F0DE38 - 3: 5DD6246AA71A202591FB0F71F7768B13 - 4: 254F7E8EB8E07CB75FF2652CC8B7BB99 - 5: 96FF1A46353CCD4384BA76C394A32AB9 - 6: B879A9845200C450633F7F08E1825463 - 7: 2E8A63D5EEDE87C132953B6DD5E6D1DF - 8: A9E9B43F84B32897843B941FB73858E1 - 9: 45F43AFB9D05DD69C12965A073EC3C24 - 10: DF03CD63C572DF4CD5537F528D0163A1 - 11: 300F0A6287C0F502F1C61E93262AD5B9 - 12: E01203F8B448F38C11DF3D185ECB9098 - 13: 824CEE843D99CCD59BADB05B1094D5ED - 14: 2C30622B448B6D29BD4712BB8C0EF9D1 - 15: AA4AACCFC4C831482C1E03180AAE849C - 16: 56098D3E4A8E4A5DBD8813E1CBCE7C10 - 17: 299E1DD62ABC03BEF1F4B16DB6EE5DA2 - 18: 0E4A1C1FA5168D5EE11958CB239FAE3C - 19: 347675845EE92E88B2F3CA39D83913C4 - 20: 277EA996C0644D9160C19A0A110F2F26 - 21: 9EF273E90ECF4B64AD341007F7665004 - 22: 72665C1EC2D1ED3D388DF9FCB52C1548 - 23: 8A286DE26FBEE852CA9EF042E090E33D - 24: E20999726B222B05267291BB0753B4DA - 25: 4724172D40E10BFA4E459C3BF2B34250 - 26: 352854D9F47B1EC253400A31B87A2F82 - 27: BFBBCDCEBA180255FB2591CEF984A919 - 28: CCCDFA6C6BE9F12E50855EBE11A99993 - 29: F247E6AF74BF433C992C376B61C94B22 - 30: 7D76C11A122437CC5A839D85B11DF173 - 31: 3485958402AF7C6A606BE91F45734EF8 - 32: B66E63BC0D9523C93FD5D89E716008B5 - diff --git a/notes/pmac_tv.txt b/notes/pmac_tv.txt index d1d4e2bb..6a920cb3 100644 --- a/notes/pmac_tv.txt +++ b/notes/pmac_tv.txt @@ -1,5 +1,5 @@ -PMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are PMAC'ed. The initial key is -of the same format (length specified per cipher). The PMAC key in step N+1 is the PMAC output of +PMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are OMAC'ed. The initial key is +of the same format (length specified per cipher). The OMAC key in step N+1 is the OMAC output of step N (repeated as required to fill the array). PMAC-aes (16 byte key) @@ -57,23 +57,23 @@ PMAC-blowfish (8 byte key) 16: BDFE0C7F0254BAD5 PMAC-xtea (16 byte key) - 0: F5E28630DFDE34E0 - 1: FFCC52D905DA5198 - 2: 25198AB18B2B290D - 3: 18914E50791161E9 - 4: 200F832212AD6747 - 5: A9D09C41D734DDF7 - 6: 32D7CCA3F4BD8215 - 7: 91A1AA9389CD5D02 - 8: 35CB1F77D7C25E2F - 9: D91EEE6D0A3874F3 - 10: A42872686A8FF6F2 - 11: 7568908634A79CBD - 12: 5B91A633D919BC34 - 13: 32DCD17176896F1D - 14: 2BBBA64F30E672B6 - 15: AFEB07DBC636AEED - 16: 7A417347CA03C598 + 0: A7EF6BB667216DDA + 1: B039E53812C4ABDC + 2: 87D2F8EA5FB6864D + 3: F85E3F4C1D9F5EFC + 4: 4EB749D982FB5FE2 + 5: 0BFA0F172027441A + 6: FF82D01F36A6EC91 + 7: 3BC2AA2028EBBD7A + 8: 15AA03A97A971E2A + 9: C974691F5D66B835 + 10: 4FC7AA8F399A79ED + 11: 2633DA9E94673BAE + 12: 82A9FD48C5B60902 + 13: 31BF6DA9EE0CE7E4 + 14: 26B2538601B7620E + 15: D103F3C0B4579BE5 + 16: 031346BA20CD87BC PMAC-rc5 (8 byte key) 0: C6B48F8DEC631F7C @@ -199,82 +199,6 @@ PMAC-twofish (16 byte key) 31: 0D06F2FAEC5AA404A4087AAEBC4DBB36 32: 0F396FE9E3D9D74D17EB7A0BF603AB51 -PMAC-safer-k64 (8 byte key) - 0: 2E49792C78C1DA52 - 1: 7A5136F4FE617C57 - 2: 6FC8575F6F3D78EC - 3: 7C0373CAEAAA640B - 4: 9D469E7FF6C35D31 - 5: 7755D62DD7D88112 - 6: ADD9E7855A958C9F - 7: 752D29BA8150F18E - 8: 0954649A99596104 - 9: 05D4D75A9FAE233D - 10: 1AADAFD7B4B250DA - 11: E7A8F31ED74DA32B - 12: 1A74DF61BDB9DF94 - 13: C38A67B1955C4E0D - 14: EBADAA44746ADF16 - 15: C0BFBB092CE81D8E - 16: 984975657F3FF2B0 - -PMAC-safer-sk64 (8 byte key) - 0: E8917E1629E7403E - 1: AE8061A5E412A647 - 2: C969771CE5A9B0C6 - 3: 78159C01D0A3A5CB - 4: 1DD4382A8FC81921 - 5: 4086880FD863C048 - 6: A520B45600A3FA1D - 7: 0F0AB5118D7506C4 - 8: 22E315F2DD03BCC6 - 9: 5ECB5561EE372016 - 10: 446A9B2BCB367AD6 - 11: B2107FE2EB411AE9 - 12: 5A539B62FB5893DF - 13: F44EE1EB3278C2BA - 14: 293FEA56D1F6EA81 - 15: F38F614D2B5F81C4 - 16: AB23F7F8F4C12A7E - -PMAC-safer-k128 (16 byte key) - 0: 7E0BDE11EC82FDE6 - 1: 8942FB017A135520 - 2: 0B073E6D0F037A02 - 3: DBF88439D671ED4F - 4: B89427ED1121069A - 5: AA8573DAC66D2315 - 6: 12DA3144BEF13FF2 - 7: EF80413CBA281B3A - 8: DFA7114D8505EEBD - 9: AE53607F3E6F4A54 - 10: 3F2C9395CFB9F78F - 11: 67EB7C5F02760AED - 12: 3EF4CBB4AB5B8D1F - 13: 83B63AFA78795A92 - 14: 5DE400951766992A - 15: AA8791A45237CF83 - 16: 7743B18704B037CF - -PMAC-safer-sk128 (16 byte key) - 0: 8F1597FFCF6FB7C1 - 1: AFF8BD8FF9F3888A - 2: 65F89D82869D8B42 - 3: CBE1F06476B2D5BD - 4: 4878D47FDFECE23E - 5: 4751A9E6D61AB2A2 - 6: 003AC162AED4DED8 - 7: 1F617A5555092C22 - 8: 088EE0C35B607153 - 9: F840B485086F9908 - 10: BA99E0FB5D7D0976 - 11: F04AF6DC4BAF6887 - 12: 5DBBE40AF2F67E4E - 13: 7F52A93E87E29C9D - 14: 7B26A14A4BD5B709 - 15: C34F26E08C64F26B - 16: 291A41D479EC1D2A - PMAC-rc2 (8 byte key) 0: E5AF80FAC4580444 1: 6A15D6211EB4FF99 @@ -313,25 +237,6 @@ PMAC-des (8 byte key) 15: FCE22E6CAD528B49 16: 993884FB9B3FB620 -PMAC-desx (24 byte key) - 0: CFC3AC7F6B9BC6C4 - 1: 15F83A2E582CA5DB - 2: 648B0A54C2A44D96 - 3: 76BD5FCA60D3E0D8 - 4: 59E994CED4C82509 - 5: 15B6B80165023A25 - 6: 095AEDA02E235237 - 7: FDEEF329DD64EE7D - 8: 1FE317FD5338ADEF - 9: 0E0530FC5984E574 - 10: 7D670A434BDF5E6E - 11: AD0C2D07F449969F - 12: 023D921C2523A41D - 13: E98F2BE666A5749D - 14: FA9DB0029446CA31 - 15: AF3350DCF2A5D6AC - 16: E72861AE67EF88E2 - PMAC-3des (24 byte key) 0: E42CCBC9C9457DF6 1: FE766F7930557708 @@ -351,41 +256,6 @@ PMAC-3des (24 byte key) 15: B13BFD07E7A202CB 16: 58A6931335B4B2C2 -PMAC-sm4 (16 byte key) - 0: 69265690FA00C7D1E2AD63F9C01C56CC - 1: E63B0AEECB1D62691A360E78ECAD7B73 - 2: B8B95E753F7016CCCCB0BCC8536D2DE9 - 3: 22F61907C271F6B779AFC0EEDE1E0AB3 - 4: 8A31DAB6D0F493058328FFE0A6349CF1 - 5: 6760AA80889EC043BD944A4F18FD2D0F - 6: F50F83052E6AF271787815E01DFB4E8A - 7: 4F552D36BC345805EC9FCFCE5E54153F - 8: AEF8016C64F27C79562C50C335AA3A10 - 9: C306E855A485ECC4969F66218705CCEF - 10: 7FA21114DC4C11212AD1DEABB8BD8AD6 - 11: 322BD6CE62C0608438C1715F5871308A - 12: 4F5A19156E62660043C12FFDE62D9755 - 13: EA1D701763EA97753EF54C9AA45F8678 - 14: 64CAFE7A3C93A469D3A37B3C86A75AF2 - 15: C8E6F0C75A3829EDB9C3570DCA18126D - 16: 1140368A72A1EC6AF8A5449924A76AE1 - 17: B8EAD770AF3070B3712040E35E297D45 - 18: 3E862A7270F6EFBB54E56B38E226E349 - 19: BC80B79D95E6B30F33A1FAC0311835BA - 20: 292696B550C240DCFEBA46CD94D6B368 - 21: 22C4BAA7FC406BCD7C67DDB1D4628185 - 22: E500A8794059239A63169E62E7F13F9A - 23: A756B798A6DD9219D57A488AC32C8682 - 24: 83A8F58D0FFB75A007CB99CAFFE650BC - 25: 99827ACA1F014860E687D0EA721657ED - 26: 6AF8CC23F2E4B9777BD171812BBA688F - 27: 0F31384898582A32808A66D8E986278F - 28: 8C36AD9C3CDA4DE1386CDFD6864C5DBC - 29: 0CC3D0BFCA51A052D807396B7160A33B - 30: 4E6A494B9C6CF7E4C540AB1CB84F5BE3 - 31: B0FE54FBC1FDFC468419079DF58C74AC - 32: AD881C8EE04209E68E31B66458377848 - PMAC-cast5 (8 byte key) 0: 0654F2F4BC1F7470 1: 3F725B162A1C8E6B @@ -406,39 +276,39 @@ PMAC-cast5 (8 byte key) 16: 87D907CACA80A138 PMAC-noekeon (16 byte key) - 0: 276019CC8E43A1B3F300C47B55B7AA22 - 1: B93E353A2CC21CEAD81C91EC2FCD348E - 2: E8B9737CAD705C499F246744DCFE9641 - 3: EF36B0FFB5439FF8668F35FD1822D0EA - 4: B7F5AD89538FC3F03923E98ADF95D0CC - 5: 558FCA30F602B4BC6697F44053875204 - 6: 6B2D6D5A1CF670BE80E4BBB945CD3871 - 7: 9CFA28FCA22EA12A13AC1093EF5D5EB9 - 8: 04EDA6C71B9F1177F4A5368684FBBAFB - 9: 43C56B31D440EBECE4C74B90750A4653 - 10: 23D5FA9AFFB2DC3DD372F22690487BAC - 11: FD61731F27CF8E791535AAB579A018B4 - 12: 502D3A64FDED3CA2A2C8A5E986B27E03 - 13: 1EABBC65B0A08F6CB15218E7153A6003 - 14: B05DBC66CF92B045FC99395E9D405C4F - 15: EE841A0BF2C91C1E2078F06D022F2E6C - 16: EA749FBAC6BA9F672796C9D58A8C3294 - 17: BBEF3CDFB93E5F462773579986F08374 - 18: B17F7645F80BF5A2817C228987B43C03 - 19: C995A102DFBB38FA397A4E508B85093D - 20: 9011CA395AC3FCD8594C13E67C22E95B - 21: 364BF53974D68B8BCF53CAADC5469DEC - 22: 5BAD7041372F28DE28BAAAC1A89C10A8 - 23: 77874E908BFCE6F5E36888A484A754C0 - 24: 9BDA525416A3129C55886134B79BAEDE - 25: 84E3201FA7958223B302D1BC2AC57D55 - 26: 2B8FA1A95DADB4DC2F7A308D8E3D8C81 - 27: F74EBF0ACCC187569BDE549F5FC96C36 - 28: 7023D209F1965EC32253D11835CDFFA5 - 29: C3C6397D9B0A1D741335882ACDFAC20D - 30: 7BC92905F2AF6754256BE087CC4F54DB - 31: 0BBA0A507767530F26C3A465DAB11359 - 32: D2891C8EA1F574A6B2AB091057E0FB2C + 0: A1E4C84B5958726557DF0855B37AA551 + 1: 5DE20299CA919D3365B493D3D4895F92 + 2: AF7E70C336571A857F62A18649EDB197 + 3: C5F55CFE1AA119C352B64252AD246CBD + 4: FEF68A0CE08E8BA315B73B62F861824F + 5: 8321C2958DE4903DC12C42A8845ECC20 + 6: 370466D1324AECF1F5B42E0E01381613 + 7: 5CB900190F5CACBACFE5EAB0CC289D87 + 8: A13C043E6CAAA1E34601A93C497446A4 + 9: 865E11622A4CC8A9E1408E00F56C4543 + 10: 9DC42C26868374649BD17D69D025CA1B + 11: 37D33C11B433C91DA09925CA9E86757A + 12: 1373D769C270E7137C953AC0F8F37941 + 13: 7E81DEC583348B1E2F6267ECF82CB994 + 14: 505B6329338556518FF364CAA730F5E8 + 15: 0C085AEEB315968B0BDE904E8BBC6FD0 + 16: 5FED63259364BE7E5133FF0507DD2D4C + 17: F7EE5C80A99AAEADB49E7CC69BFFF679 + 18: 4388FA5E763A641130940EB705BEFD08 + 19: 1BC31CA79EBE1674CEBE01BC9988267B + 20: BE88961637EFFE2D6905D104FEDD51A4 + 21: 9C341004FB22AFCC496094E3207CA761 + 22: B9DAA3620E38FFC7C5D5E7D2D8FE3DE4 + 23: A38D2E571F037061B4400F1131FDBDEA + 24: 61DB71AE77A6EB47F2E9E14E8CBF2F4B + 25: 9903A072274CC048EF2C51493266D9ED + 26: 1EBEA421DD08859C17DDF39B20A82102 + 27: F425858618E1A86F4912E4714EFB9E75 + 28: 3B3D4EA07F7FE6DDFDD02D624ACDFC9F + 29: CEEE256591D701514EB17DF73B08A970 + 30: 5CC56D5D46120C530A23B6C511C685FC + 31: 68E484CE18BE28EADD0BBF23291B8237 + 32: ABD58A9CDF8AA68168A1A402074CF520 PMAC-skipjack (10 byte key) 0: 9CD94B75BC43B647 @@ -459,273 +329,3 @@ PMAC-skipjack (10 byte key) 15: 2C5BD475AAC44C77 16: FEB892DA66D31A84 -PMAC-anubis (16 byte key) - 0: DF33EE541FFEE6A97FE3A1F72F7A38FC - 1: 0AB28675AC3923C6DD9F5A8E1E2928D0 - 2: 2DABF75D6403E1E1CFAB3E6869FB1088 - 3: 95835D49E09740180B79E394FC2AA744 - 4: F364D6DC2C2078A519E5BAEFE858AFCA - 5: DA4C66A4805FC91FABAECC0D3AEAD850 - 6: 487660FADCAC7B326C492AA051A1DF49 - 7: BF07835AA1A548FA7312509AF35CE3F3 - 8: 3CE8A8B1F324A700923AC0B830D53D99 - 9: 3C54D99AACFAB26E34FC1B0B6BB9EB22 - 10: 0A559F9D107ED76FD19227FDD0752B8A - 11: BFD9E74ADC40B9C7446FDD09558FA584 - 12: F1130F663BC0FA3B1066129E0D1910E9 - 13: 535EAD786F0D211DE7AA78F3CB480803 - 14: CDF5855F00A4C310D95B26751B01A28B - 15: EF6686E999D5A9C35A96D25BB9DBBF57 - 16: E795733AA0AAF16D8F7AB1A8E9C55E54 - 17: E03CA85727D5CF06F56BB6465BB3E5C5 - 18: 6EDDDB6D2292EFF584E382E1BACD1A49 - 19: 7B7FE0D8821836C1AA95578071FF2FD2 - 20: 5F8CC568338400746B61A9286B7CF262 - 21: 32DEE5A11E9EDB04BDF911837CE0FA4D - 22: F1A99914F13B17ABF383F36157FEB170 - 23: 99F541647F382390043CAE5332E3114D - 24: 34C5EBB85693A1979F8CFDF8B431A5BB - 25: 1BA7266568F1E7B4A77A869D3021AC0F - 26: 0FC675C99C24E859F8CE714E86BF5289 - 27: CBFAB21F5ABC47356A43BED806D873C0 - 28: 9659AB1A4D334B622629721F98EECE3A - 29: 644C8BEE41F03BDE7652B03CAEA31E37 - 30: 5B3447AFAD934B4D1E4910A8DFD588E7 - 31: BFF403342E8D50D0447627AEA2F56B23 - 32: 19F468F0FB05184D00FABD40A18DB7B2 - -PMAC-khazad (16 byte key) - 0: F40CEF2E392BEAEB - 1: C6E086BD1CFA0992 - 2: 513F2851583AD69A - 3: 07279D57695D78FF - 4: 051E94FE4CC847B6 - 5: 5E9AAA5989D5C951 - 6: 310D5D740143369A - 7: 9BB1EA8ECD4AF34B - 8: CF886800AF0526C8 - 9: 0B03E2C94729E643 - 10: 42815B308A900EC7 - 11: 9A38A58C438D26DD - 12: 044BFF68FD2BFF76 - 13: 7F5ABBDC29852729 - 14: F81A7D6F7B788A5D - 15: 93098DA8A180AA35 - 16: BACE2F4DA8A89E32 - -PMAC-seed (16 byte key) - 0: 58844BC0C53AACF808587A7C35C37DE2 - 1: 481E3E0831DF5AED135C71BBBD075F4A - 2: 11355F9D42E7BAD967DF90E9088D45A7 - 3: 5E3F82EF0B3CA70DCB614C1016DDB052 - 4: 35E283B0E6C538ED5F2DF4E004324865 - 5: 56467B8BA87BDE89DF4A64DC9B9409CF - 6: 9315AAAE6CA0868FDCBC397B7DC2DF84 - 7: A265D861DCE6C9B80CCFF92463DB27D3 - 8: 196A0813E4EB49F47A1C3713950B194E - 9: 261372868D259E609BE5080F282B361A - 10: DFDC55CDF60A0CB6A33BC6F4B5E5A481 - 11: 0BD99E075BC93386CDB40C2AAF8E8918 - 12: CA1B80D0088D7267C9AFB037DCD8FA56 - 13: 8EDBC9F77D4DAB3DFABEAB0891622F1C - 14: D1A8F869C961739ABFE7F401FA41D6F6 - 15: 653041670E0BAD5D1FE77A19D9439CEE - 16: 440EF361908A528B2A3ED7C50C1A47AB - 17: DCE2613438A5DC42AC8F5CE753DDF01D - 18: F9E313156CA5345CECB1A5F963E9B201 - 19: 34D72FB89BA3C41E1D0597531849C6C9 - 20: 7ED20B28067BA27E37606387D641B75F - 21: 933A2E06DA91C208297305FFF4F7795B - 22: CC455E1FB196CF5B233921AA6A048B81 - 23: 613AC1EE5B8D0C3123A18BED9A352980 - 24: 00A2BBEEB98DB190A694B67EF85A65A4 - 25: 1A7D50E6051D85CA81D9DD7DE81BF02E - 26: A7F948B36D7AF08FB405A1B8C8C6AC6D - 27: 967DC3981E7C718B562A93E5292B872F - 28: 2674544D8D3E3F750590992C0AFB36AF - 29: 193A2CC794CB285B4CB87197EE3550ED - 30: 312AAC97C92279428FB1AA0882DB7088 - 31: 3B9CBA2FF7FF4113BB2DC0DF6BCADDD0 - 32: 45C5C71122C70F4337F5EC74BA6B446D - -PMAC-kasumi (16 byte key) - 0: 52DF2D9A9EB4816A - 1: 201C1024E6D2AF23 - 2: 04E7B341BFC96D1A - 3: CC11D07594C50F31 - 4: EE27EAEED00E2F97 - 5: 51DB73EC42ADB789 - 6: 097A5F01A90BFE7F - 7: 7FD121FD6B504A9D - 8: 8A09BC5C1E7FA48C - 9: B7A88328D7D84C9E - 10: 1D34173FA9F1DFCD - 11: 129AC84C0429E80E - 12: 81D236AC427123E4 - 13: 72D4EFEDD56F6253 - 14: ACFC8D6AF30F8B64 - 15: C7F75094394C1765 - 16: D95208BCB48FAA38 - -PMAC-multi2 (40 byte key) - 0: 4799ECD07D95FF68 - 1: 5B94DBFD53C531D7 - 2: DF09EDE792536619 - 3: 01FB72E4EE79DFEF - 4: 4159642D6ED0D4D8 - 5: B6909A449A0A85BB - 6: 20B167D3AA349DEA - 7: E550AAB246D99D92 - 8: 5E1042397C86B08C - 9: 3789D96B64C85AC0 - 10: 72C0921EF5B5DEDE - 11: 5923493300FA910E - 12: B589609B09B4D12F - 13: 5EA42FE501CD696D - 14: 4413763D2689108B - 15: 07207040BAFC8E6D - 16: 4E80F408AA6F1DD9 - -PMAC-camellia (16 byte key) - 0: 33C03F6AA205F3816A17DA92BEE0BAD2 - 1: AD1EC293DD032511579235B2F29CC909 - 2: E71363EAF5A311DCFB035C69BBCE5DC0 - 3: 22661D6CD3496FB5C9B3D89FC62E3981 - 4: B142A96AF9C481B61E55B7B5896847C4 - 5: A286C0769989120F8A31A8DAD7574F22 - 6: 09E711382FDB6B938C802D11A66EF657 - 7: DF9ABA4F5CF5B0647F045C3AA631BB62 - 8: 499A8F68DAEC7FE56E64DB59B0993741 - 9: AFFDA4F40A1BDF673EE9123CAE321F16 - 10: B6F2E39D0126AA85D9152C4457365235 - 11: 2922AAC2FF4F0B77DEE4B3E28EF5094F - 12: 369D18F985D18B5ADDFFFC1151DE6BBA - 13: 1B7641D1A38C4114EE829B7D25BF0EFF - 14: DEF9092BA185FD5238A25C6FCF410C52 - 15: D59FEE8047D64032329318DC7A2277B8 - 16: B4561A4A092E031F8FE998FAC87F9BFB - 17: F27EF7D0823B056F692BA369D1B2E7B4 - 18: F62C4F7B749CF31A6F5485BFDED7EEBD - 19: 22BD3AB334BE6E04C84D6197FF69CAE3 - 20: E617D108BED8E9ACBA55FAF60863F8C3 - 21: 0DB60AE0725D37855F3AF1DDF78E98EB - 22: C76DD5A075AB30AB66FC448BD19B6588 - 23: 60231366598BEB2D16D33A1A8019B9A1 - 24: 247E925C96064801490A1D062A0C1F18 - 25: 1C1081E20DE3BE26FF24BEC3DFBA9BF2 - 26: 3B16562B3CD862C00A03B7ADC99E46C5 - 27: C1E8BA560851254640D523A0CEE846AF - 28: C36E8CF324A0A4EBC6C76EA01CDFD158 - 29: EAED84E721777F5E30184E496DA2C0FA - 30: 6655CA0D8741440212AA0DB218E5C7FE - 31: D5C0143E1BA233BA5F862EE6E11A8F58 - 32: C8DAF08BD68F4AE401C6663393C257CB - -PMAC-idea (16 byte key) - 0: 1B010822EBB2E3F0 - 1: 943AA2133BD2CAE7 - 2: 6AB636AFF380D7E1 - 3: 9F5CA3037C13D0A9 - 4: 8EBB7A3E8757A414 - 5: C01F7BF5986987D7 - 6: FA9C1B62100EF6C7 - 7: F69FC035FD89BDB9 - 8: FA5C607B2D97FD7D - 9: A112CDFAFF150870 - 10: ABBFD9DC6D530842 - 11: 6FF72677F0A845D2 - 12: A6803A517E9F1C34 - 13: A5A45E3AD8300F30 - 14: 3854B6FABF268B8A - 15: DD3E679D6387A082 - 16: 872DDF68887A9606 - -PMAC-serpent (16 byte key) - 0: F339DEF404209BCB165EB7BCFD992CBE - 1: 4AC8EFF62CBCF0DF5EED09C481DAEC02 - 2: 8D89B71DE01632A07641FA5A92DB8F3F - 3: CD3BA1D7DD7ABE17BFBD48E1B391EB77 - 4: 579BF88799B0B67F2E1B12D34B20DF9C - 5: 56C6AACC2B142F18A680B6AAA5AA82A4 - 6: 082EFD0AA9B9BA02132F2B74B748E243 - 7: 6B800A69716D6FFF5C9836176F724AA3 - 8: FF406270AED77526DC8E84FEFC7A57C2 - 9: C2E5741342F888E4CE0D661986388FEE - 10: 47AB010F388A9E10017155D88F35F20B - 11: A5623D8A148DF62024F2C621DE0C4E2A - 12: C6B47AAAF01A7E4683C461D119288354 - 13: FB7274149DB6E4E2CC757E8A95EBE335 - 14: FE74C4559520165DABCB75942C333950 - 15: EFD0DEBF6304F04C6CFAD4B6A4DF6C58 - 16: 89BDE6A86A4A14ED553732CF979F9599 - 17: AEB77664F24297E6471218B2F68A5BFD - 18: 1AD0F4ED52FDEF747BF3E3C8DF7334DE - 19: 16273AD4918181B8E183F661D1EE7991 - 20: 061DBAABEA31DFBD68A57151633FEDF5 - 21: 2206B89F47FA497C506B25736B672F70 - 22: 86F3809E186C70B2FD7B0BC88A0A81F6 - 23: 193CD2D4777DAE6FD7EF176EA9065C81 - 24: 9274BBB50D1CB86C39CA0AC0A5224A9E - 25: F7BD94AB66D03AA22CB41F72874316DE - 26: 1E48C30E5502E98B7F7038BEE7BC658A - 27: AB7E6F468283DA5219CC76D83915CA63 - 28: 54CBD6BB08511366E56EA95414766D97 - 29: 73E91132A2B53930D4415A5B4F7BD523 - 30: 67E45427A9CCFAB9A11BD6AF2C4E9A80 - 31: 11F399978DB69A7957F2DF1A44206841 - 32: D6C0DE7EEB98DA9EB0F800D2734B100A - -PMAC-tea (16 byte key) - 0: 9C47729C9C2F4813 - 1: 1E9EDE66951A751E - 2: 5F0FF355F5C067AB - 3: EDE26E1BF7FF7662 - 4: 9C2D4A377660E475 - 5: C9A605E660C8E954 - 6: 578873E2BF4CCC0B - 7: 1D888213B1AA95DB - 8: A6631112C99F4E47 - 9: 02312F3A134B9DCA - 10: 35D9138A4B5ABA96 - 11: A21B17E07D6E3F9B - 12: DC6D9724BF55DE13 - 13: 87E31C1EFD9D35E9 - 14: 38DCBC571E62088A - 15: B63413E18BEC7ABE - 16: 200DA2D5CD5B9AA9 - -PMAC-aria (16 byte key) - 0: 2CE69C7A23FC33E16BCE520FF817A5B1 - 1: 3A0A6074E3A355AF2B01EC6E2A9D1743 - 2: DE301897CB79D1433F1EF129A7095D7E - 3: 42D58203CE8A9156CA2AF2DA8E73E9A7 - 4: 3FE6DA83BDFF1BCBACD774378B240A00 - 5: A41049220180391995DF4A1F5012537F - 6: E7F61B5FB93FCA8CBF7444BB13169DFB - 7: 818876083F41B10D64CA019C573835BA - 8: 7B85D7BDFBD58647DD1D3AA70CDBF37A - 9: E52F9631A00AC724B4F9F6F10E0C827A - 10: 060AC14DE545A11A54F891C628974FCD - 11: E3C2BA3377011C4F7460DDCAF2B09B75 - 12: 15D1FAA72C1D6343CEC360A79A28BC4C - 13: F31CF0E65EBFE9E03C3AA5855BB0FEB8 - 14: 317B7B98E32E92290E1796C2F2DE8E99 - 15: FAC6AB8267C4E86917111C26A0F4AC6D - 16: F4E050290E133AF04F6738E2DE072186 - 17: C21EC6D64D24E1F4E6C2C0C39684FF32 - 18: 1DD883F28421077EC104706AF0A19C8B - 19: 362762240DFBB8AB8F23C3E3FBC64551 - 20: 61BCBB5E7AD28BF7639E34523194D886 - 21: FB033E6D2C3889DCBFC8C1A56B22EDD2 - 22: E548BD72650272DB7190E0AF423CCA6B - 23: 590E55E4F78FA503A0139A0A7197086B - 24: F6EF0C277329C94B04C6083712E12E28 - 25: 6D09C97F3FD331E5E010EC0239A6A701 - 26: EEEAA8881DD36342D614054FC74BF97F - 27: 30F84E0E94898C3898065A1B4935C183 - 28: 73D68BCD84986788AF945A03CD186B01 - 29: 8B7A7DE1F289245E8F0E41D61B98C246 - 30: 5509778C82C66012D90F6B0C801835D0 - 31: 09D6855B8081BF8D6F5E9736A5A0D4DA - 32: FE18CE0DCDC76D00452F1568A2F6D0D9 - diff --git a/notes/rsa-testvectors/makefile b/notes/rsa-testvectors/makefile deleted file mode 100644 index dd84f472..00000000 --- a/notes/rsa-testvectors/makefile +++ /dev/null @@ -1,11 +0,0 @@ -default: regen - -clean: - rm -f *.c - -regen: - python rt.py pss-vect.txt pss > pss-vect.c - python rt.py oaep-vect.txt oaep > oaep-vect.c - python rt.py pkcs1v15sign-vectors.txt emsa > pkcs1v15sign-vectors.c - python rt.py pkcs1v15crypt-vectors.txt eme > pkcs1v15crypt-vectors.c - diff --git a/notes/rsa-testvectors/oaep-int.txt b/notes/rsa-testvectors/oaep-int.txt deleted file mode 100644 index b76b5dd7..00000000 --- a/notes/rsa-testvectors/oaep-int.txt +++ /dev/null @@ -1,369 +0,0 @@ -# ================================= -# WORKED-OUT EXAMPLE FOR RSAES-OAEP -# ================================= -# -# This file gives an example of the process of -# encrypting and decrypting a message with -# RSAES-OAEP as specified in PKCS #1 v2.1. -# -# The message is a bit string of length 128, -# while the size of the modulus in the public -# key is 1024 bits. The second representation -# of the private key is used, which means that -# CRT is applied in the decryption process. -# -# The underlying hash function is SHA-1; the -# mask generation function is MGF1 with SHA-1 -# as specified in PKCS #1 v2.1. -# -# This file also contains a demonstration of -# the RSADP decryption primitive with CRT. -# Finally, DER encodings of the RSA keys are -# given at the end of the file. -# -# -# Integers are represented by strings of octets -# with the leftmost octet being the most -# significant octet. For example, -# -# 9,202,000 = (0x)8c 69 50. -# -# ============================================= - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -bb f8 2f 09 06 82 ce 9c 23 38 ac 2b 9d a8 71 f7 -36 8d 07 ee d4 10 43 a4 40 d6 b6 f0 74 54 f5 1f -b8 df ba af 03 5c 02 ab 61 ea 48 ce eb 6f cd 48 -76 ed 52 0d 60 e1 ec 46 19 71 9d 8a 5b 8b 80 7f -af b8 e0 a3 df c7 37 72 3e e6 b4 b7 d9 3a 25 84 -ee 6a 64 9d 06 09 53 74 88 34 b2 45 45 98 39 4e -e0 aa b1 2d 7b 61 a5 1f 52 7a 9a 41 f6 c1 68 7f -e2 53 72 98 ca 2a 8f 59 46 f8 e5 fd 09 1d bd cb - -# RSA public exponent e: -(0x)11 - -# Prime p: -ee cf ae 81 b1 b9 b3 c9 08 81 0b 10 a1 b5 60 01 -99 eb 9f 44 ae f4 fd a4 93 b8 1a 9e 3d 84 f6 32 -12 4e f0 23 6e 5d 1e 3b 7e 28 fa e7 aa 04 0a 2d -5b 25 21 76 45 9d 1f 39 75 41 ba 2a 58 fb 65 99 - -# Prime q: -c9 7f b1 f0 27 f4 53 f6 34 12 33 ea aa d1 d9 35 -3f 6c 42 d0 88 66 b1 d0 5a 0f 20 35 02 8b 9d 86 -98 40 b4 16 66 b4 2e 92 ea 0d a3 b4 32 04 b5 cf -ce 33 52 52 4d 04 16 a5 a4 41 e7 00 af 46 15 03 - -# p's CRT exponent dP: -54 49 4c a6 3e ba 03 37 e4 e2 40 23 fc d6 9a 5a -eb 07 dd dc 01 83 a4 d0 ac 9b 54 b0 51 f2 b1 3e -d9 49 09 75 ea b7 74 14 ff 59 c1 f7 69 2e 9a 2e -20 2b 38 fc 91 0a 47 41 74 ad c9 3c 1f 67 c9 81 - -# q's CRT exponent dQ: -47 1e 02 90 ff 0a f0 75 03 51 b7 f8 78 86 4c a9 -61 ad bd 3a 8a 7e 99 1c 5c 05 56 a9 4c 31 46 a7 -f9 80 3f 8f 6f 8a e3 42 e9 31 fd 8a e4 7a 22 0d -1b 99 a4 95 84 98 07 fe 39 f9 24 5a 98 36 da 3d - -# CRT coefficient qInv: -b0 6c 4f da bb 63 01 19 8d 26 5b db ae 94 23 b3 -80 f2 71 f7 34 53 88 50 93 07 7f cd 39 e2 11 9f -c9 86 32 15 4f 58 83 b1 67 a9 67 bf 40 2b 4e 9e -2e 0f 96 56 e6 98 ea 36 66 ed fb 25 79 80 39 f7 - -# ---------------------------------- -# Step-by-step RSAES-OAEP Encryption -# ---------------------------------- - -# Message M to be encrypted: -d4 36 e9 95 69 fd 32 a7 c8 a0 5b bc 90 d3 2c 49 - -# Label L: -(the empty string) - -# lHash = Hash(L) -# DB = lHash || Padding || M -# seed = random string of octets -# dbMask = MGF(seed, length(DB)) -# maskedDB = DB xor dbMask -# seedMask = MGF(maskedDB, length(seed)) -# maskedSeed = seed xor seedMask -# EM = 0x00 || maskedSeed || maskedDB - -# lHash: -da 39 a3 ee 5e 6b 4b 0d 32 55 bf ef 95 60 18 90 -af d8 07 09 - -# DB: -da 39 a3 ee 5e 6b 4b 0d 32 55 bf ef 95 60 18 90 -af d8 07 09 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 00 00 00 00 00 00 01 d4 36 e9 95 69 -fd 32 a7 c8 a0 5b bc 90 d3 2c 49 - -# seed: -aa fd 12 f6 59 ca e6 34 89 b4 79 e5 07 6d de c2 -f0 6c b5 8f - -# dbMask: -06 e1 de b2 36 9a a5 a5 c7 07 d8 2c 8e 4e 93 24 -8a c7 83 de e0 b2 c0 46 26 f5 af f9 3e dc fb 25 -c9 c2 b3 ff 8a e1 0e 83 9a 2d db 4c dc fe 4f f4 -77 28 b4 a1 b7 c1 36 2b aa d2 9a b4 8d 28 69 d5 -02 41 21 43 58 11 59 1b e3 92 f9 82 fb 3e 87 d0 -95 ae b4 04 48 db 97 2f 3a c1 4e af f4 9c 8c 3b -7c fc 95 1a 51 ec d1 dd e6 12 64 - -# maskedDB: -dc d8 7d 5c 68 f1 ee a8 f5 52 67 c3 1b 2e 8b b4 -25 1f 84 d7 e0 b2 c0 46 26 f5 af f9 3e dc fb 25 -c9 c2 b3 ff 8a e1 0e 83 9a 2d db 4c dc fe 4f f4 -77 28 b4 a1 b7 c1 36 2b aa d2 9a b4 8d 28 69 d5 -02 41 21 43 58 11 59 1b e3 92 f9 82 fb 3e 87 d0 -95 ae b4 04 48 db 97 2f 3a c1 4f 7b c2 75 19 52 -81 ce 32 d2 f1 b7 6d 4d 35 3e 2d - -# seedMask: -41 87 0b 5a b0 29 e6 57 d9 57 50 b5 4c 28 3c 08 -72 5d be a9 - -# maskedSeed: -eb 7a 19 ac e9 e3 00 63 50 e3 29 50 4b 45 e2 ca -82 31 0b 26 - -# EM = 00 || maskedSeed || maskedDB: -00 eb 7a 19 ac e9 e3 00 63 50 e3 29 50 4b 45 e2 -ca 82 31 0b 26 dc d8 7d 5c 68 f1 ee a8 f5 52 67 -c3 1b 2e 8b b4 25 1f 84 d7 e0 b2 c0 46 26 f5 af -f9 3e dc fb 25 c9 c2 b3 ff 8a e1 0e 83 9a 2d db -4c dc fe 4f f4 77 28 b4 a1 b7 c1 36 2b aa d2 9a -b4 8d 28 69 d5 02 41 21 43 58 11 59 1b e3 92 f9 -82 fb 3e 87 d0 95 ae b4 04 48 db 97 2f 3a c1 4f -7b c2 75 19 52 81 ce 32 d2 f1 b7 6d 4d 35 3e 2d - -# Ciphertext, the RSA encryption of EM: -12 53 e0 4d c0 a5 39 7b b4 4a 7a b8 7e 9b f2 a0 -39 a3 3d 1e 99 6f c8 2a 94 cc d3 00 74 c9 5d f7 -63 72 20 17 06 9e 52 68 da 5d 1c 0b 4f 87 2c f6 -53 c1 1d f8 23 14 a6 79 68 df ea e2 8d ef 04 bb -6d 84 b1 c3 1d 65 4a 19 70 e5 78 3b d6 eb 96 a0 -24 c2 ca 2f 4a 90 fe 9f 2e f5 c9 c1 40 e5 bb 48 -da 95 36 ad 87 00 c8 4f c9 13 0a de a7 4e 55 8d -51 a7 4d df 85 d8 b5 0d e9 68 38 d6 06 3e 09 55 - -# -------------------------------------------- -# Step-by-step RSAES-OAEP Decryption Using CRT -# -------------------------------------------- - -# c = the integer value of C above -# m1 = c^dP mod p = (c mod p)^dP mod p -# m2 = c^dQ mod q = (c mod q)^dQ mod q -# h = (m1-m2)*qInv mod p -# m = m2 + q*h = the integer value of EM above - -# c mod p: -de 63 d4 72 35 66 fa a7 59 bf e4 08 82 1d d5 25 -72 ec 92 85 4d df 87 a2 b6 64 d4 4d aa 37 ca 34 -6a 05 20 3d 82 ff 2d e8 e3 6c ec 1d 34 f9 8e b6 -05 e2 a7 d2 6d e7 af 36 9c e4 ec ae 14 e3 56 33 - -# c mod q: -a2 d9 24 de d9 c3 6d 62 3e d9 a6 5b 5d 86 2c fb -ec 8b 19 9c 64 27 9c 54 14 e6 41 19 6e f1 c9 3c -50 7a 9b 52 13 88 1a ad 05 b4 cc fa 02 8a c1 ec -61 42 09 74 bf 16 25 83 6b 0b 7d 05 fb b7 53 36 - -# m1: -89 6c a2 6c d7 e4 87 1c 7f c9 68 a8 ed ea 11 e2 -71 82 4f 0e 03 65 52 17 94 f1 e9 e9 43 b4 a4 4b -57 c9 e3 95 a1 46 74 78 f5 26 49 6b 4b b9 1f 1c -ba ea 90 0f fc 60 2c f0 c6 63 6e ba 84 fc 9f f7 - -# m2: -4e bb 22 75 85 f0 c1 31 2d ca 19 e0 b5 41 db 14 -99 fb f1 4e 27 0e 69 8e 23 9a 8c 27 a9 6c da 9a -74 09 74 de 93 7b 5c 9c 93 ea d9 46 2c 65 75 02 -1a 23 d4 64 99 dc 9f 6b 35 89 75 59 60 8f 19 be - -# h: -01 2b 2b 24 15 0e 76 e1 59 bd 8d db 42 76 e0 7b -fa c1 88 e0 8d 60 47 cf 0e fb 8a e2 ae bd f2 51 -c4 0e bc 23 dc fd 4a 34 42 43 94 ad a9 2c fc be -1b 2e ff bb 60 fd fb 03 35 9a 95 36 8d 98 09 25 - -# m: -00 eb 7a 19 ac e9 e3 00 63 50 e3 29 50 4b 45 e2 -ca 82 31 0b 26 dc d8 7d 5c 68 f1 ee a8 f5 52 67 -c3 1b 2e 8b b4 25 1f 84 d7 e0 b2 c0 46 26 f5 af -f9 3e dc fb 25 c9 c2 b3 ff 8a e1 0e 83 9a 2d db -4c dc fe 4f f4 77 28 b4 a1 b7 c1 36 2b aa d2 9a -b4 8d 28 69 d5 02 41 21 43 58 11 59 1b e3 92 f9 -82 fb 3e 87 d0 95 ae b4 04 48 db 97 2f 3a c1 4f -7b c2 75 19 52 81 ce 32 d2 f1 b7 6d 4d 35 3e 2d - -# The intermediate values in the remaining -# decryption process are the same as during -# RSAES-OAEP encryption of M. - -# ============================================= - -# ======================== -# DER Encoding of RSA Keys -# ======================== - -# ------------ -# RSAPublicKey -# ------------ -30 81 87 -# modulus - 02 81 81 - 00 bb f8 2f 09 06 82 ce - 9c 23 38 ac 2b 9d a8 71 - f7 36 8d 07 ee d4 10 43 - a4 40 d6 b6 f0 74 54 f5 - 1f b8 df ba af 03 5c 02 - ab 61 ea 48 ce eb 6f cd - 48 76 ed 52 0d 60 e1 ec - 46 19 71 9d 8a 5b 8b 80 - 7f af b8 e0 a3 df c7 37 - 72 3e e6 b4 b7 d9 3a 25 - 84 ee 6a 64 9d 06 09 53 - 74 88 34 b2 45 45 98 39 - 4e e0 aa b1 2d 7b 61 a5 - 1f 52 7a 9a 41 f6 c1 68 - 7f e2 53 72 98 ca 2a 8f - 59 46 f8 e5 fd 09 1d bd - cb -# publicExponent - 02 01 - 11 - -# ------------- -# RSAPrivateKey -# ------------- -30 82 02 5b -# version - 02 01 - 00 -# modulus - 02 81 81 - 00 bb f8 2f 09 06 82 ce - 9c 23 38 ac 2b 9d a8 71 - f7 36 8d 07 ee d4 10 43 - a4 40 d6 b6 f0 74 54 f5 - 1f b8 df ba af 03 5c 02 - ab 61 ea 48 ce eb 6f cd - 48 76 ed 52 0d 60 e1 ec - 46 19 71 9d 8a 5b 8b 80 - 7f af b8 e0 a3 df c7 37 - 72 3e e6 b4 b7 d9 3a 25 - 84 ee 6a 64 9d 06 09 53 - 74 88 34 b2 45 45 98 39 - 4e e0 aa b1 2d 7b 61 a5 - 1f 52 7a 9a 41 f6 c1 68 - 7f e2 53 72 98 ca 2a 8f - 59 46 f8 e5 fd 09 1d bd - cb -# publicExponent - 02 01 - 11 -# privateExponent - 02 81 81 - 00 a5 da fc 53 41 fa f2 - 89 c4 b9 88 db 30 c1 cd - f8 3f 31 25 1e 06 68 b4 - 27 84 81 38 01 57 96 41 - b2 94 10 b3 c7 99 8d 6b - c4 65 74 5e 5c 39 26 69 - d6 87 0d a2 c0 82 a9 39 - e3 7f dc b8 2e c9 3e da - c9 7f f3 ad 59 50 ac cf - bc 11 1c 76 f1 a9 52 94 - 44 e5 6a af 68 c5 6c 09 - 2c d3 8d c3 be f5 d2 0a - 93 99 26 ed 4f 74 a1 3e - dd fb e1 a1 ce cc 48 94 - af 94 28 c2 b7 b8 88 3f - e4 46 3a 4b c8 5b 1c b3 - c1 -# prime1 - 02 41 - 00 ee cf ae 81 b1 b9 b3 - c9 08 81 0b 10 a1 b5 60 - 01 99 eb 9f 44 ae f4 fd - a4 93 b8 1a 9e 3d 84 f6 - 32 12 4e f0 23 6e 5d 1e - 3b 7e 28 fa e7 aa 04 0a - 2d 5b 25 21 76 45 9d 1f - 39 75 41 ba 2a 58 fb 65 - 99 -# prime2 - 02 41 - 00 c9 7f b1 f0 27 f4 53 - f6 34 12 33 ea aa d1 d9 - 35 3f 6c 42 d0 88 66 b1 - d0 5a 0f 20 35 02 8b 9d - 86 98 40 b4 16 66 b4 2e - 92 ea 0d a3 b4 32 04 b5 - cf ce 33 52 52 4d 04 16 - a5 a4 41 e7 00 af 46 15 - 03 -# exponent1 - 02 40 - 54 49 4c a6 3e ba 03 37 - e4 e2 40 23 fc d6 9a 5a - eb 07 dd dc 01 83 a4 d0 - ac 9b 54 b0 51 f2 b1 3e - d9 49 09 75 ea b7 74 14 - ff 59 c1 f7 69 2e 9a 2e - 20 2b 38 fc 91 0a 47 41 - 74 ad c9 3c 1f 67 c9 81 -# exponent2 - 02 40 - 47 1e 02 90 ff 0a f0 75 - 03 51 b7 f8 78 86 4c a9 - 61 ad bd 3a 8a 7e 99 1c - 5c 05 56 a9 4c 31 46 a7 - f9 80 3f 8f 6f 8a e3 42 - e9 31 fd 8a e4 7a 22 0d - 1b 99 a4 95 84 98 07 fe - 39 f9 24 5a 98 36 da 3d -# coefficient - 02 41 - 00 b0 6c 4f da bb 63 01 - 19 8d 26 5b db ae 94 23 - b3 80 f2 71 f7 34 53 88 - 50 93 07 7f cd 39 e2 11 - 9f c9 86 32 15 4f 58 83 - b1 67 a9 67 bf 40 2b 4e - 9e 2e 0f 96 56 e6 98 ea - 36 66 ed fb 25 79 80 39 - f7 - -# ------------------------ -# PrivateKeyInfo (PKCS #8) -# ------------------------ -30 82 02 75 -# version - 02 01 - 00 -# privateKeyAlgorithmIdentifier - 30 0d - 06 09 - 2a 86 48 86 f7 0d 01 01 01 -# parameters - 05 00 -# privateKey = RSAPrivateKey encoding - 04 82 02 5f -# DER encoding of RSAPrivateKey structure - 30 82 02 5b ... 79 80 39 f7 - -# ============================================= diff --git a/notes/rsa-testvectors/oaep-vect.c b/notes/rsa-testvectors/oaep-vect.c deleted file mode 100644 index 87ef9616..00000000 --- a/notes/rsa-testvectors/oaep-vect.c +++ /dev/null @@ -1,1418 +0,0 @@ -/* Generated from file: oaep-vect.txt - * with md5 hash: 9c79a5465c35222512ed3e7ac1ad3190 - */ - - -typedef struct rsaKey { - int n_l; - unsigned char n[256]; - int e_l; - unsigned char e[256]; - int d_l; - unsigned char d[256]; - int p_l; - unsigned char p[256]; - int q_l; - unsigned char q[256]; - int dP_l; - unsigned char dP[256]; - int dQ_l; - unsigned char dQ[256]; - int qInv_l; - unsigned char qInv[256]; -} rsaKey_t; - -typedef struct rsaData { - const char* name; - int o1_l; - unsigned char o1[256]; - int o2_l; - unsigned char o2[256]; - int o3_l; - unsigned char o3[256]; -} rsaData_t; - -typedef struct testcase { - const char* name; - rsaKey_t rsa; -#ifdef LTC_TEST_EXT - rsaData_t data[6]; -#else - rsaData_t data[1]; -#endif /* LTC_TEST_EXT */ -} testcase_t; - -static testcase_t testcases_oaep[] = - { -{ - "Example 1: A 1024-bit RSA Key Pair", -{ - /* RSA modulus n */ - 128, - { 0xa8, 0xb3, 0xb2, 0x84, 0xaf, 0x8e, 0xb5, 0x0b, 0x38, 0x70, 0x34, 0xa8, 0x60, 0xf1, 0x46, 0xc4, 0x91, 0x9f, 0x31, 0x87, 0x63, 0xcd, 0x6c, 0x55, 0x98, 0xc8, 0xae, 0x48, 0x11, 0xa1, 0xe0, 0xab, 0xc4, 0xc7, 0xe0, 0xb0, 0x82, 0xd6, 0x93, 0xa5, 0xe7, 0xfc, 0xed, 0x67, 0x5c, 0xf4, 0x66, 0x85, 0x12, 0x77, 0x2c, 0x0c, 0xbc, 0x64, 0xa7, 0x42, 0xc6, 0xc6, 0x30, 0xf5, 0x33, 0xc8, 0xcc, 0x72, 0xf6, 0x2a, 0xe8, 0x33, 0xc4, 0x0b, 0xf2, 0x58, 0x42, 0xe9, 0x84, 0xbb, 0x78, 0xbd, 0xbf, 0x97, 0xc0, 0x10, 0x7d, 0x55, 0xbd, 0xb6, 0x62, 0xf5, 0xc4, 0xe0, 0xfa, 0xb9, 0x84, 0x5c, 0xb5, 0x14, 0x8e, 0xf7, 0x39, 0x2d, 0xd3, 0xaa, 0xff, 0x93, 0xae, 0x1e, 0x6b, 0x66, 0x7b, 0xb3, 0xd4, 0x24, 0x76, 0x16, 0xd4, 0xf5, 0xba, 0x10, 0xd4, 0xcf, 0xd2, 0x26, 0xde, 0x88, 0xd3, 0x9f, 0x16, 0xfb } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 128, - { 0x53, 0x33, 0x9c, 0xfd, 0xb7, 0x9f, 0xc8, 0x46, 0x6a, 0x65, 0x5c, 0x73, 0x16, 0xac, 0xa8, 0x5c, 0x55, 0xfd, 0x8f, 0x6d, 0xd8, 0x98, 0xfd, 0xaf, 0x11, 0x95, 0x17, 0xef, 0x4f, 0x52, 0xe8, 0xfd, 0x8e, 0x25, 0x8d, 0xf9, 0x3f, 0xee, 0x18, 0x0f, 0xa0, 0xe4, 0xab, 0x29, 0x69, 0x3c, 0xd8, 0x3b, 0x15, 0x2a, 0x55, 0x3d, 0x4a, 0xc4, 0xd1, 0x81, 0x2b, 0x8b, 0x9f, 0xa5, 0xaf, 0x0e, 0x7f, 0x55, 0xfe, 0x73, 0x04, 0xdf, 0x41, 0x57, 0x09, 0x26, 0xf3, 0x31, 0x1f, 0x15, 0xc4, 0xd6, 0x5a, 0x73, 0x2c, 0x48, 0x31, 0x16, 0xee, 0x3d, 0x3d, 0x2d, 0x0a, 0xf3, 0x54, 0x9a, 0xd9, 0xbf, 0x7c, 0xbf, 0xb7, 0x8a, 0xd8, 0x84, 0xf8, 0x4d, 0x5b, 0xeb, 0x04, 0x72, 0x4d, 0xc7, 0x36, 0x9b, 0x31, 0xde, 0xf3, 0x7d, 0x0c, 0xf5, 0x39, 0xe9, 0xcf, 0xcd, 0xd3, 0xde, 0x65, 0x37, 0x29, 0xea, 0xd5, 0xd1 } -, - /* Prime p */ - 64, - { 0xd3, 0x27, 0x37, 0xe7, 0x26, 0x7f, 0xfe, 0x13, 0x41, 0xb2, 0xd5, 0xc0, 0xd1, 0x50, 0xa8, 0x1b, 0x58, 0x6f, 0xb3, 0x13, 0x2b, 0xed, 0x2f, 0x8d, 0x52, 0x62, 0x86, 0x4a, 0x9c, 0xb9, 0xf3, 0x0a, 0xf3, 0x8b, 0xe4, 0x48, 0x59, 0x8d, 0x41, 0x3a, 0x17, 0x2e, 0xfb, 0x80, 0x2c, 0x21, 0xac, 0xf1, 0xc1, 0x1c, 0x52, 0x0c, 0x2f, 0x26, 0xa4, 0x71, 0xdc, 0xad, 0x21, 0x2e, 0xac, 0x7c, 0xa3, 0x9d } -, - /* Prime q */ - 64, - { 0xcc, 0x88, 0x53, 0xd1, 0xd5, 0x4d, 0xa6, 0x30, 0xfa, 0xc0, 0x04, 0xf4, 0x71, 0xf2, 0x81, 0xc7, 0xb8, 0x98, 0x2d, 0x82, 0x24, 0xa4, 0x90, 0xed, 0xbe, 0xb3, 0x3d, 0x3e, 0x3d, 0x5c, 0xc9, 0x3c, 0x47, 0x65, 0x70, 0x3d, 0x1d, 0xd7, 0x91, 0x64, 0x2f, 0x1f, 0x11, 0x6a, 0x0d, 0xd8, 0x52, 0xbe, 0x24, 0x19, 0xb2, 0xaf, 0x72, 0xbf, 0xe9, 0xa0, 0x30, 0xe8, 0x60, 0xb0, 0x28, 0x8b, 0x5d, 0x77 } -, - /* p's CRT exponent dP */ - 64, - { 0x0e, 0x12, 0xbf, 0x17, 0x18, 0xe9, 0xce, 0xf5, 0x59, 0x9b, 0xa1, 0xc3, 0x88, 0x2f, 0xe8, 0x04, 0x6a, 0x90, 0x87, 0x4e, 0xef, 0xce, 0x8f, 0x2c, 0xcc, 0x20, 0xe4, 0xf2, 0x74, 0x1f, 0xb0, 0xa3, 0x3a, 0x38, 0x48, 0xae, 0xc9, 0xc9, 0x30, 0x5f, 0xbe, 0xcb, 0xd2, 0xd7, 0x68, 0x19, 0x96, 0x7d, 0x46, 0x71, 0xac, 0xc6, 0x43, 0x1e, 0x40, 0x37, 0x96, 0x8d, 0xb3, 0x78, 0x78, 0xe6, 0x95, 0xc1 } -, - /* q's CRT exponent dQ */ - 64, - { 0x95, 0x29, 0x7b, 0x0f, 0x95, 0xa2, 0xfa, 0x67, 0xd0, 0x07, 0x07, 0xd6, 0x09, 0xdf, 0xd4, 0xfc, 0x05, 0xc8, 0x9d, 0xaf, 0xc2, 0xef, 0x6d, 0x6e, 0xa5, 0x5b, 0xec, 0x77, 0x1e, 0xa3, 0x33, 0x73, 0x4d, 0x92, 0x51, 0xe7, 0x90, 0x82, 0xec, 0xda, 0x86, 0x6e, 0xfe, 0xf1, 0x3c, 0x45, 0x9e, 0x1a, 0x63, 0x13, 0x86, 0xb7, 0xe3, 0x54, 0xc8, 0x99, 0xf5, 0xf1, 0x12, 0xca, 0x85, 0xd7, 0x15, 0x83 } -, - /* CRT coefficient qInv */ - 64, - { 0x4f, 0x45, 0x6c, 0x50, 0x24, 0x93, 0xbd, 0xc0, 0xed, 0x2a, 0xb7, 0x56, 0xa3, 0xa6, 0xed, 0x4d, 0x67, 0x35, 0x2a, 0x69, 0x7d, 0x42, 0x16, 0xe9, 0x32, 0x12, 0xb1, 0x27, 0xa6, 0x3d, 0x54, 0x11, 0xce, 0x6f, 0xa9, 0x8d, 0x5d, 0xbe, 0xfd, 0x73, 0x26, 0x3e, 0x37, 0x28, 0x14, 0x27, 0x43, 0x81, 0x81, 0x66, 0xed, 0x7d, 0xd6, 0x36, 0x87, 0xdd, 0x2a, 0x8c, 0xa1, 0xd2, 0xf4, 0xfb, 0xd8, 0xe1 } - -} -, -{{ - "RSAES-OAEP Encryption Example 1.1", - /* Message to be encrypted */ - 28, - { 0x66, 0x28, 0x19, 0x4e, 0x12, 0x07, 0x3d, 0xb0, 0x3b, 0xa9, 0x4c, 0xda, 0x9e, 0xf9, 0x53, 0x23, 0x97, 0xd5, 0x0d, 0xba, 0x79, 0xb9, 0x87, 0x00, 0x4a, 0xfe, 0xfe, 0x34 } -, - /* Seed */ - 20, - { 0x18, 0xb7, 0x76, 0xea, 0x21, 0x06, 0x9d, 0x69, 0x77, 0x6a, 0x33, 0xe9, 0x6b, 0xad, 0x48, 0xe1, 0xdd, 0xa0, 0xa5, 0xef } -, - /* Encryption */ - 128, - { 0x35, 0x4f, 0xe6, 0x7b, 0x4a, 0x12, 0x6d, 0x5d, 0x35, 0xfe, 0x36, 0xc7, 0x77, 0x79, 0x1a, 0x3f, 0x7b, 0xa1, 0x3d, 0xef, 0x48, 0x4e, 0x2d, 0x39, 0x08, 0xaf, 0xf7, 0x22, 0xfa, 0xd4, 0x68, 0xfb, 0x21, 0x69, 0x6d, 0xe9, 0x5d, 0x0b, 0xe9, 0x11, 0xc2, 0xd3, 0x17, 0x4f, 0x8a, 0xfc, 0xc2, 0x01, 0x03, 0x5f, 0x7b, 0x6d, 0x8e, 0x69, 0x40, 0x2d, 0xe5, 0x45, 0x16, 0x18, 0xc2, 0x1a, 0x53, 0x5f, 0xa9, 0xd7, 0xbf, 0xc5, 0xb8, 0xdd, 0x9f, 0xc2, 0x43, 0xf8, 0xcf, 0x92, 0x7d, 0xb3, 0x13, 0x22, 0xd6, 0xe8, 0x81, 0xea, 0xa9, 0x1a, 0x99, 0x61, 0x70, 0xe6, 0x57, 0xa0, 0x5a, 0x26, 0x64, 0x26, 0xd9, 0x8c, 0x88, 0x00, 0x3f, 0x84, 0x77, 0xc1, 0x22, 0x70, 0x94, 0xa0, 0xd9, 0xfa, 0x1e, 0x8c, 0x40, 0x24, 0x30, 0x9c, 0xe1, 0xec, 0xcc, 0xb5, 0x21, 0x00, 0x35, 0xd4, 0x7a, 0xc7, 0x2e, 0x8a } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSAES-OAEP Encryption Example 1.2", - /* Message to be encrypted */ - 28, - { 0x75, 0x0c, 0x40, 0x47, 0xf5, 0x47, 0xe8, 0xe4, 0x14, 0x11, 0x85, 0x65, 0x23, 0x29, 0x8a, 0xc9, 0xba, 0xe2, 0x45, 0xef, 0xaf, 0x13, 0x97, 0xfb, 0xe5, 0x6f, 0x9d, 0xd5 } -, - /* Seed */ - 20, - { 0x0c, 0xc7, 0x42, 0xce, 0x4a, 0x9b, 0x7f, 0x32, 0xf9, 0x51, 0xbc, 0xb2, 0x51, 0xef, 0xd9, 0x25, 0xfe, 0x4f, 0xe3, 0x5f } -, - /* Encryption */ - 128, - { 0x64, 0x0d, 0xb1, 0xac, 0xc5, 0x8e, 0x05, 0x68, 0xfe, 0x54, 0x07, 0xe5, 0xf9, 0xb7, 0x01, 0xdf, 0xf8, 0xc3, 0xc9, 0x1e, 0x71, 0x6c, 0x53, 0x6f, 0xc7, 0xfc, 0xec, 0x6c, 0xb5, 0xb7, 0x1c, 0x11, 0x65, 0x98, 0x8d, 0x4a, 0x27, 0x9e, 0x15, 0x77, 0xd7, 0x30, 0xfc, 0x7a, 0x29, 0x93, 0x2e, 0x3f, 0x00, 0xc8, 0x15, 0x15, 0x23, 0x6d, 0x8d, 0x8e, 0x31, 0x01, 0x7a, 0x7a, 0x09, 0xdf, 0x43, 0x52, 0xd9, 0x04, 0xcd, 0xeb, 0x79, 0xaa, 0x58, 0x3a, 0xdc, 0xc3, 0x1e, 0xa6, 0x98, 0xa4, 0xc0, 0x52, 0x83, 0xda, 0xba, 0x90, 0x89, 0xbe, 0x54, 0x91, 0xf6, 0x7c, 0x1a, 0x4e, 0xe4, 0x8d, 0xc7, 0x4b, 0xbb, 0xe6, 0x64, 0x3a, 0xef, 0x84, 0x66, 0x79, 0xb4, 0xcb, 0x39, 0x5a, 0x35, 0x2d, 0x5e, 0xd1, 0x15, 0x91, 0x2d, 0xf6, 0x96, 0xff, 0xe0, 0x70, 0x29, 0x32, 0x94, 0x6d, 0x71, 0x49, 0x2b, 0x44 } - -} -, -{ - "RSAES-OAEP Encryption Example 1.3", - /* Message to be encrypted */ - 55, - { 0xd9, 0x4a, 0xe0, 0x83, 0x2e, 0x64, 0x45, 0xce, 0x42, 0x33, 0x1c, 0xb0, 0x6d, 0x53, 0x1a, 0x82, 0xb1, 0xdb, 0x4b, 0xaa, 0xd3, 0x0f, 0x74, 0x6d, 0xc9, 0x16, 0xdf, 0x24, 0xd4, 0xe3, 0xc2, 0x45, 0x1f, 0xff, 0x59, 0xa6, 0x42, 0x3e, 0xb0, 0xe1, 0xd0, 0x2d, 0x4f, 0xe6, 0x46, 0xcf, 0x69, 0x9d, 0xfd, 0x81, 0x8c, 0x6e, 0x97, 0xb0, 0x51 } -, - /* Seed */ - 20, - { 0x25, 0x14, 0xdf, 0x46, 0x95, 0x75, 0x5a, 0x67, 0xb2, 0x88, 0xea, 0xf4, 0x90, 0x5c, 0x36, 0xee, 0xc6, 0x6f, 0xd2, 0xfd } -, - /* Encryption */ - 128, - { 0x42, 0x37, 0x36, 0xed, 0x03, 0x5f, 0x60, 0x26, 0xaf, 0x27, 0x6c, 0x35, 0xc0, 0xb3, 0x74, 0x1b, 0x36, 0x5e, 0x5f, 0x76, 0xca, 0x09, 0x1b, 0x4e, 0x8c, 0x29, 0xe2, 0xf0, 0xbe, 0xfe, 0xe6, 0x03, 0x59, 0x5a, 0xa8, 0x32, 0x2d, 0x60, 0x2d, 0x2e, 0x62, 0x5e, 0x95, 0xeb, 0x81, 0xb2, 0xf1, 0xc9, 0x72, 0x4e, 0x82, 0x2e, 0xca, 0x76, 0xdb, 0x86, 0x18, 0xcf, 0x09, 0xc5, 0x34, 0x35, 0x03, 0xa4, 0x36, 0x08, 0x35, 0xb5, 0x90, 0x3b, 0xc6, 0x37, 0xe3, 0x87, 0x9f, 0xb0, 0x5e, 0x0e, 0xf3, 0x26, 0x85, 0xd5, 0xae, 0xc5, 0x06, 0x7c, 0xd7, 0xcc, 0x96, 0xfe, 0x4b, 0x26, 0x70, 0xb6, 0xea, 0xc3, 0x06, 0x6b, 0x1f, 0xcf, 0x56, 0x86, 0xb6, 0x85, 0x89, 0xaa, 0xfb, 0x7d, 0x62, 0x9b, 0x02, 0xd8, 0xf8, 0x62, 0x5c, 0xa3, 0x83, 0x36, 0x24, 0xd4, 0x80, 0x0f, 0xb0, 0x81, 0xb1, 0xcf, 0x94, 0xeb } - -} -, -{ - "RSAES-OAEP Encryption Example 1.4", - /* Message to be encrypted */ - 26, - { 0x52, 0xe6, 0x50, 0xd9, 0x8e, 0x7f, 0x2a, 0x04, 0x8b, 0x4f, 0x86, 0x85, 0x21, 0x53, 0xb9, 0x7e, 0x01, 0xdd, 0x31, 0x6f, 0x34, 0x6a, 0x19, 0xf6, 0x7a, 0x85 } -, - /* Seed */ - 20, - { 0xc4, 0x43, 0x5a, 0x3e, 0x1a, 0x18, 0xa6, 0x8b, 0x68, 0x20, 0x43, 0x62, 0x90, 0xa3, 0x7c, 0xef, 0xb8, 0x5d, 0xb3, 0xfb } -, - /* Encryption */ - 128, - { 0x45, 0xea, 0xd4, 0xca, 0x55, 0x1e, 0x66, 0x2c, 0x98, 0x00, 0xf1, 0xac, 0xa8, 0x28, 0x3b, 0x05, 0x25, 0xe6, 0xab, 0xae, 0x30, 0xbe, 0x4b, 0x4a, 0xba, 0x76, 0x2f, 0xa4, 0x0f, 0xd3, 0xd3, 0x8e, 0x22, 0xab, 0xef, 0xc6, 0x97, 0x94, 0xf6, 0xeb, 0xbb, 0xc0, 0x5d, 0xdb, 0xb1, 0x12, 0x16, 0x24, 0x7d, 0x2f, 0x41, 0x2f, 0xd0, 0xfb, 0xa8, 0x7c, 0x6e, 0x3a, 0xcd, 0x88, 0x88, 0x13, 0x64, 0x6f, 0xd0, 0xe4, 0x8e, 0x78, 0x52, 0x04, 0xf9, 0xc3, 0xf7, 0x3d, 0x6d, 0x82, 0x39, 0x56, 0x27, 0x22, 0xdd, 0xdd, 0x87, 0x71, 0xfe, 0xc4, 0x8b, 0x83, 0xa3, 0x1e, 0xe6, 0xf5, 0x92, 0xc4, 0xcf, 0xd4, 0xbc, 0x88, 0x17, 0x4f, 0x3b, 0x13, 0xa1, 0x12, 0xaa, 0xe3, 0xb9, 0xf7, 0xb8, 0x0e, 0x0f, 0xc6, 0xf7, 0x25, 0x5b, 0xa8, 0x80, 0xdc, 0x7d, 0x80, 0x21, 0xe2, 0x2a, 0xd6, 0xa8, 0x5f, 0x07, 0x55 } - -} -, -{ - "RSAES-OAEP Encryption Example 1.5", - /* Message to be encrypted */ - 20, - { 0x8d, 0xa8, 0x9f, 0xd9, 0xe5, 0xf9, 0x74, 0xa2, 0x9f, 0xef, 0xfb, 0x46, 0x2b, 0x49, 0x18, 0x0f, 0x6c, 0xf9, 0xe8, 0x02 } -, - /* Seed */ - 20, - { 0xb3, 0x18, 0xc4, 0x2d, 0xf3, 0xbe, 0x0f, 0x83, 0xfe, 0xa8, 0x23, 0xf5, 0xa7, 0xb4, 0x7e, 0xd5, 0xe4, 0x25, 0xa3, 0xb5 } -, - /* Encryption */ - 128, - { 0x36, 0xf6, 0xe3, 0x4d, 0x94, 0xa8, 0xd3, 0x4d, 0xaa, 0xcb, 0xa3, 0x3a, 0x21, 0x39, 0xd0, 0x0a, 0xd8, 0x5a, 0x93, 0x45, 0xa8, 0x60, 0x51, 0xe7, 0x30, 0x71, 0x62, 0x00, 0x56, 0xb9, 0x20, 0xe2, 0x19, 0x00, 0x58, 0x55, 0xa2, 0x13, 0xa0, 0xf2, 0x38, 0x97, 0xcd, 0xcd, 0x73, 0x1b, 0x45, 0x25, 0x7c, 0x77, 0x7f, 0xe9, 0x08, 0x20, 0x2b, 0xef, 0xdd, 0x0b, 0x58, 0x38, 0x6b, 0x12, 0x44, 0xea, 0x0c, 0xf5, 0x39, 0xa0, 0x5d, 0x5d, 0x10, 0x32, 0x9d, 0xa4, 0x4e, 0x13, 0x03, 0x0f, 0xd7, 0x60, 0xdc, 0xd6, 0x44, 0xcf, 0xef, 0x20, 0x94, 0xd1, 0x91, 0x0d, 0x3f, 0x43, 0x3e, 0x1c, 0x7c, 0x6d, 0xd1, 0x8b, 0xc1, 0xf2, 0xdf, 0x7f, 0x64, 0x3d, 0x66, 0x2f, 0xb9, 0xdd, 0x37, 0xea, 0xd9, 0x05, 0x91, 0x90, 0xf4, 0xfa, 0x66, 0xca, 0x39, 0xe8, 0x69, 0xc4, 0xeb, 0x44, 0x9c, 0xbd, 0xc4, 0x39 } - -} -, -{ - "RSAES-OAEP Encryption Example 1.6", - /* Message to be encrypted */ - 7, - { 0x26, 0x52, 0x10, 0x50, 0x84, 0x42, 0x71 } -, - /* Seed */ - 20, - { 0xe4, 0xec, 0x09, 0x82, 0xc2, 0x33, 0x6f, 0x3a, 0x67, 0x7f, 0x6a, 0x35, 0x61, 0x74, 0xeb, 0x0c, 0xe8, 0x87, 0xab, 0xc2 } -, - /* Encryption */ - 128, - { 0x42, 0xce, 0xe2, 0x61, 0x7b, 0x1e, 0xce, 0xa4, 0xdb, 0x3f, 0x48, 0x29, 0x38, 0x6f, 0xbd, 0x61, 0xda, 0xfb, 0xf0, 0x38, 0xe1, 0x80, 0xd8, 0x37, 0xc9, 0x63, 0x66, 0xdf, 0x24, 0xc0, 0x97, 0xb4, 0xab, 0x0f, 0xac, 0x6b, 0xdf, 0x59, 0x0d, 0x82, 0x1c, 0x9f, 0x10, 0x64, 0x2e, 0x68, 0x1a, 0xd0, 0x5b, 0x8d, 0x78, 0xb3, 0x78, 0xc0, 0xf4, 0x6c, 0xe2, 0xfa, 0xd6, 0x3f, 0x74, 0xe0, 0xad, 0x3d, 0xf0, 0x6b, 0x07, 0x5d, 0x7e, 0xb5, 0xf5, 0x63, 0x6f, 0x8d, 0x40, 0x3b, 0x90, 0x59, 0xca, 0x76, 0x1b, 0x5c, 0x62, 0xbb, 0x52, 0xaa, 0x45, 0x00, 0x2e, 0xa7, 0x0b, 0xaa, 0xce, 0x08, 0xde, 0xd2, 0x43, 0xb9, 0xd8, 0xcb, 0xd6, 0x2a, 0x68, 0xad, 0xe2, 0x65, 0x83, 0x2b, 0x56, 0x56, 0x4e, 0x43, 0xa6, 0xfa, 0x42, 0xed, 0x19, 0x9a, 0x09, 0x97, 0x69, 0x74, 0x2d, 0xf1, 0x53, 0x9e, 0x82, 0x55 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 2: A 1025-bit RSA Key Pair", -{ - /* RSA modulus n */ - 129, - { 0x01, 0x94, 0x7c, 0x7f, 0xce, 0x90, 0x42, 0x5f, 0x47, 0x27, 0x9e, 0x70, 0x85, 0x1f, 0x25, 0xd5, 0xe6, 0x23, 0x16, 0xfe, 0x8a, 0x1d, 0xf1, 0x93, 0x71, 0xe3, 0xe6, 0x28, 0xe2, 0x60, 0x54, 0x3e, 0x49, 0x01, 0xef, 0x60, 0x81, 0xf6, 0x8c, 0x0b, 0x81, 0x41, 0x19, 0x0d, 0x2a, 0xe8, 0xda, 0xba, 0x7d, 0x12, 0x50, 0xec, 0x6d, 0xb6, 0x36, 0xe9, 0x44, 0xec, 0x37, 0x22, 0x87, 0x7c, 0x7c, 0x1d, 0x0a, 0x67, 0xf1, 0x4b, 0x16, 0x94, 0xc5, 0xf0, 0x37, 0x94, 0x51, 0xa4, 0x3e, 0x49, 0xa3, 0x2d, 0xde, 0x83, 0x67, 0x0b, 0x73, 0xda, 0x91, 0xa1, 0xc9, 0x9b, 0xc2, 0x3b, 0x43, 0x6a, 0x60, 0x05, 0x5c, 0x61, 0x0f, 0x0b, 0xaf, 0x99, 0xc1, 0xa0, 0x79, 0x56, 0x5b, 0x95, 0xa3, 0xf1, 0x52, 0x66, 0x32, 0xd1, 0xd4, 0xda, 0x60, 0xf2, 0x0e, 0xda, 0x25, 0xe6, 0x53, 0xc4, 0xf0, 0x02, 0x76, 0x6f, 0x45 } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 128, - { 0x08, 0x23, 0xf2, 0x0f, 0xad, 0xb5, 0xda, 0x89, 0x08, 0x8a, 0x9d, 0x00, 0x89, 0x3e, 0x21, 0xfa, 0x4a, 0x1b, 0x11, 0xfb, 0xc9, 0x3c, 0x64, 0xa3, 0xbe, 0x0b, 0xaa, 0xea, 0x97, 0xfb, 0x3b, 0x93, 0xc3, 0xff, 0x71, 0x37, 0x04, 0xc1, 0x9c, 0x96, 0x3c, 0x1d, 0x10, 0x7a, 0xae, 0x99, 0x05, 0x47, 0x39, 0xf7, 0x9e, 0x02, 0xe1, 0x86, 0xde, 0x86, 0xf8, 0x7a, 0x6d, 0xde, 0xfe, 0xa6, 0xd8, 0xcc, 0xd1, 0xd3, 0xc8, 0x1a, 0x47, 0xbf, 0xa7, 0x25, 0x5b, 0xe2, 0x06, 0x01, 0xa4, 0xa4, 0xb2, 0xf0, 0x8a, 0x16, 0x7b, 0x5e, 0x27, 0x9d, 0x71, 0x5b, 0x1b, 0x45, 0x5b, 0xdd, 0x7e, 0xab, 0x24, 0x59, 0x41, 0xd9, 0x76, 0x8b, 0x9a, 0xce, 0xfb, 0x3c, 0xcd, 0xa5, 0x95, 0x2d, 0xa3, 0xce, 0xe7, 0x25, 0x25, 0xb4, 0x50, 0x16, 0x63, 0xa8, 0xee, 0x15, 0xc9, 0xe9, 0x92, 0xd9, 0x24, 0x62, 0xfe, 0x39 } -, - /* Prime p */ - 65, - { 0x01, 0x59, 0xdb, 0xde, 0x04, 0xa3, 0x3e, 0xf0, 0x6f, 0xb6, 0x08, 0xb8, 0x0b, 0x19, 0x0f, 0x4d, 0x3e, 0x22, 0xbc, 0xc1, 0x3a, 0xc8, 0xe4, 0xa0, 0x81, 0x03, 0x3a, 0xbf, 0xa4, 0x16, 0xed, 0xb0, 0xb3, 0x38, 0xaa, 0x08, 0xb5, 0x73, 0x09, 0xea, 0x5a, 0x52, 0x40, 0xe7, 0xdc, 0x6e, 0x54, 0x37, 0x8c, 0x69, 0x41, 0x4c, 0x31, 0xd9, 0x7d, 0xdb, 0x1f, 0x40, 0x6d, 0xb3, 0x76, 0x9c, 0xc4, 0x1a, 0x43 } -, - /* Prime q */ - 65, - { 0x01, 0x2b, 0x65, 0x2f, 0x30, 0x40, 0x3b, 0x38, 0xb4, 0x09, 0x95, 0xfd, 0x6f, 0xf4, 0x1a, 0x1a, 0xcc, 0x8a, 0xda, 0x70, 0x37, 0x32, 0x36, 0xb7, 0x20, 0x2d, 0x39, 0xb2, 0xee, 0x30, 0xcf, 0xb4, 0x6d, 0xb0, 0x95, 0x11, 0xf6, 0xf3, 0x07, 0xcc, 0x61, 0xcc, 0x21, 0x60, 0x6c, 0x18, 0xa7, 0x5b, 0x8a, 0x62, 0xf8, 0x22, 0xdf, 0x03, 0x1b, 0xa0, 0xdf, 0x0d, 0xaf, 0xd5, 0x50, 0x6f, 0x56, 0x8b, 0xd7 } -, - /* p's CRT exponent dP */ - 64, - { 0x43, 0x6e, 0xf5, 0x08, 0xde, 0x73, 0x65, 0x19, 0xc2, 0xda, 0x4c, 0x58, 0x0d, 0x98, 0xc8, 0x2c, 0xb7, 0x45, 0x2a, 0x3f, 0xb5, 0xef, 0xad, 0xc3, 0xb9, 0xc7, 0x78, 0x9a, 0x1b, 0xc6, 0x58, 0x4f, 0x79, 0x5a, 0xdd, 0xbb, 0xd3, 0x24, 0x39, 0xc7, 0x46, 0x86, 0x55, 0x2e, 0xcb, 0x6c, 0x2c, 0x30, 0x7a, 0x4d, 0x3a, 0xf7, 0xf5, 0x39, 0xee, 0xc1, 0x57, 0x24, 0x8c, 0x7b, 0x31, 0xf1, 0xa2, 0x55 } -, - /* q's CRT exponent dQ */ - 65, - { 0x01, 0x2b, 0x15, 0xa8, 0x9f, 0x3d, 0xfb, 0x2b, 0x39, 0x07, 0x3e, 0x73, 0xf0, 0x2b, 0xdd, 0x0c, 0x1a, 0x7b, 0x37, 0x9d, 0xd4, 0x35, 0xf0, 0x5c, 0xdd, 0xe2, 0xef, 0xf9, 0xe4, 0x62, 0x94, 0x8b, 0x7c, 0xec, 0x62, 0xee, 0x90, 0x50, 0xd5, 0xe0, 0x81, 0x6e, 0x07, 0x85, 0xa8, 0x56, 0xb4, 0x91, 0x08, 0xdc, 0xb7, 0x5f, 0x36, 0x83, 0x87, 0x4d, 0x1c, 0xa6, 0x32, 0x9a, 0x19, 0x01, 0x30, 0x66, 0xff } -, - /* CRT coefficient qInv */ - 64, - { 0x02, 0x70, 0xdb, 0x17, 0xd5, 0x91, 0x4b, 0x01, 0x8d, 0x76, 0x11, 0x8b, 0x24, 0x38, 0x9a, 0x73, 0x50, 0xec, 0x83, 0x6b, 0x00, 0x63, 0xa2, 0x17, 0x21, 0x23, 0x6f, 0xd8, 0xed, 0xb6, 0xd8, 0x9b, 0x51, 0xe7, 0xee, 0xb8, 0x7b, 0x61, 0x1b, 0x71, 0x32, 0xcb, 0x7e, 0xa7, 0x35, 0x6c, 0x23, 0x15, 0x1c, 0x1e, 0x77, 0x51, 0x50, 0x7c, 0x78, 0x6d, 0x9e, 0xe1, 0x79, 0x41, 0x70, 0xa8, 0xc8, 0xe8 } - -} -, -{{ - "RSAES-OAEP Encryption Example 2.1", - /* Message to be encrypted */ - 27, - { 0x8f, 0xf0, 0x0c, 0xaa, 0x60, 0x5c, 0x70, 0x28, 0x30, 0x63, 0x4d, 0x9a, 0x6c, 0x3d, 0x42, 0xc6, 0x52, 0xb5, 0x8c, 0xf1, 0xd9, 0x2f, 0xec, 0x57, 0x0b, 0xee, 0xe7 } -, - /* Seed */ - 20, - { 0x8c, 0x40, 0x7b, 0x5e, 0xc2, 0x89, 0x9e, 0x50, 0x99, 0xc5, 0x3e, 0x8c, 0xe7, 0x93, 0xbf, 0x94, 0xe7, 0x1b, 0x17, 0x82 } -, - /* Encryption */ - 129, - { 0x01, 0x81, 0xaf, 0x89, 0x22, 0xb9, 0xfc, 0xb4, 0xd7, 0x9d, 0x92, 0xeb, 0xe1, 0x98, 0x15, 0x99, 0x2f, 0xc0, 0xc1, 0x43, 0x9d, 0x8b, 0xcd, 0x49, 0x13, 0x98, 0xa0, 0xf4, 0xad, 0x3a, 0x32, 0x9a, 0x5b, 0xd9, 0x38, 0x55, 0x60, 0xdb, 0x53, 0x26, 0x83, 0xc8, 0xb7, 0xda, 0x04, 0xe4, 0xb1, 0x2a, 0xed, 0x6a, 0xac, 0xdf, 0x47, 0x1c, 0x34, 0xc9, 0xcd, 0xa8, 0x91, 0xad, 0xdc, 0xc2, 0xdf, 0x34, 0x56, 0x65, 0x3a, 0xa6, 0x38, 0x2e, 0x9a, 0xe5, 0x9b, 0x54, 0x45, 0x52, 0x57, 0xeb, 0x09, 0x9d, 0x56, 0x2b, 0xbe, 0x10, 0x45, 0x3f, 0x2b, 0x6d, 0x13, 0xc5, 0x9c, 0x02, 0xe1, 0x0f, 0x1f, 0x8a, 0xbb, 0x5d, 0xa0, 0xd0, 0x57, 0x09, 0x32, 0xda, 0xcf, 0x2d, 0x09, 0x01, 0xdb, 0x72, 0x9d, 0x0f, 0xef, 0xcc, 0x05, 0x4e, 0x70, 0x96, 0x8e, 0xa5, 0x40, 0xc8, 0x1b, 0x04, 0xbc, 0xae, 0xfe, 0x72, 0x0e } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSAES-OAEP Encryption Example 2.2", - /* Message to be encrypted */ - 1, - { 0x2d } -, - /* Seed */ - 20, - { 0xb6, 0x00, 0xcf, 0x3c, 0x2e, 0x50, 0x6d, 0x7f, 0x16, 0x77, 0x8c, 0x91, 0x0d, 0x3a, 0x8b, 0x00, 0x3e, 0xee, 0x61, 0xd5 } -, - /* Encryption */ - 129, - { 0x01, 0x87, 0x59, 0xff, 0x1d, 0xf6, 0x3b, 0x27, 0x92, 0x41, 0x05, 0x62, 0x31, 0x44, 0x16, 0xa8, 0xae, 0xaf, 0x2a, 0xc6, 0x34, 0xb4, 0x6f, 0x94, 0x0a, 0xb8, 0x2d, 0x64, 0xdb, 0xf1, 0x65, 0xee, 0xe3, 0x30, 0x11, 0xda, 0x74, 0x9d, 0x4b, 0xab, 0x6e, 0x2f, 0xcd, 0x18, 0x12, 0x9c, 0x9e, 0x49, 0x27, 0x7d, 0x84, 0x53, 0x11, 0x2b, 0x42, 0x9a, 0x22, 0x2a, 0x84, 0x71, 0xb0, 0x70, 0x99, 0x39, 0x98, 0xe7, 0x58, 0x86, 0x1c, 0x4d, 0x3f, 0x6d, 0x74, 0x9d, 0x91, 0xc4, 0x29, 0x0d, 0x33, 0x2c, 0x7a, 0x4a, 0xb3, 0xf7, 0xea, 0x35, 0xff, 0x3a, 0x07, 0xd4, 0x97, 0xc9, 0x55, 0xff, 0x0f, 0xfc, 0x95, 0x00, 0x6b, 0x62, 0xc6, 0xd2, 0x96, 0x81, 0x0d, 0x9b, 0xfa, 0xb0, 0x24, 0x19, 0x6c, 0x79, 0x34, 0x01, 0x2c, 0x2d, 0xf9, 0x78, 0xef, 0x29, 0x9a, 0xba, 0x23, 0x99, 0x40, 0xcb, 0xa1, 0x02, 0x45 } - -} -, -{ - "RSAES-OAEP Encryption Example 2.3", - /* Message to be encrypted */ - 26, - { 0x74, 0xfc, 0x88, 0xc5, 0x1b, 0xc9, 0x0f, 0x77, 0xaf, 0x9d, 0x5e, 0x9a, 0x4a, 0x70, 0x13, 0x3d, 0x4b, 0x4e, 0x0b, 0x34, 0xda, 0x3c, 0x37, 0xc7, 0xef, 0x8e } -, - /* Seed */ - 20, - { 0xa7, 0x37, 0x68, 0xae, 0xea, 0xa9, 0x1f, 0x9d, 0x8c, 0x1e, 0xd6, 0xf9, 0xd2, 0xb6, 0x34, 0x67, 0xf0, 0x7c, 0xca, 0xe3 } -, - /* Encryption */ - 129, - { 0x01, 0x88, 0x02, 0xba, 0xb0, 0x4c, 0x60, 0x32, 0x5e, 0x81, 0xc4, 0x96, 0x23, 0x11, 0xf2, 0xbe, 0x7c, 0x2a, 0xdc, 0xe9, 0x30, 0x41, 0xa0, 0x07, 0x19, 0xc8, 0x8f, 0x95, 0x75, 0x75, 0xf2, 0xc7, 0x9f, 0x1b, 0x7b, 0xc8, 0xce, 0xd1, 0x15, 0xc7, 0x06, 0xb3, 0x11, 0xc0, 0x8a, 0x2d, 0x98, 0x6c, 0xa3, 0xb6, 0xa9, 0x33, 0x6b, 0x14, 0x7c, 0x29, 0xc6, 0xf2, 0x29, 0x40, 0x9d, 0xde, 0xc6, 0x51, 0xbd, 0x1f, 0xdd, 0x5a, 0x0b, 0x7f, 0x61, 0x0c, 0x99, 0x37, 0xfd, 0xb4, 0xa3, 0xa7, 0x62, 0x36, 0x4b, 0x8b, 0x32, 0x06, 0xb4, 0xea, 0x48, 0x5f, 0xd0, 0x98, 0xd0, 0x8f, 0x63, 0xd4, 0xaa, 0x8b, 0xb2, 0x69, 0x7d, 0x02, 0x7b, 0x75, 0x0c, 0x32, 0xd7, 0xf7, 0x4e, 0xaf, 0x51, 0x80, 0xd2, 0xe9, 0xb6, 0x6b, 0x17, 0xcb, 0x2f, 0xa5, 0x55, 0x23, 0xbc, 0x28, 0x0d, 0xa1, 0x0d, 0x14, 0xbe, 0x20, 0x53 } - -} -, -{ - "RSAES-OAEP Encryption Example 2.4", - /* Message to be encrypted */ - 53, - { 0xa7, 0xeb, 0x2a, 0x50, 0x36, 0x93, 0x1d, 0x27, 0xd4, 0xe8, 0x91, 0x32, 0x6d, 0x99, 0x69, 0x2f, 0xfa, 0xdd, 0xa9, 0xbf, 0x7e, 0xfd, 0x3e, 0x34, 0xe6, 0x22, 0xc4, 0xad, 0xc0, 0x85, 0xf7, 0x21, 0xdf, 0xe8, 0x85, 0x07, 0x2c, 0x78, 0xa2, 0x03, 0xb1, 0x51, 0x73, 0x9b, 0xe5, 0x40, 0xfa, 0x8c, 0x15, 0x3a, 0x10, 0xf0, 0x0a } -, - /* Seed */ - 20, - { 0x9a, 0x7b, 0x3b, 0x0e, 0x70, 0x8b, 0xd9, 0x6f, 0x81, 0x90, 0xec, 0xab, 0x4f, 0xb9, 0xb2, 0xb3, 0x80, 0x5a, 0x81, 0x56 } -, - /* Encryption */ - 129, - { 0x00, 0xa4, 0x57, 0x8c, 0xbc, 0x17, 0x63, 0x18, 0xa6, 0x38, 0xfb, 0xa7, 0xd0, 0x1d, 0xf1, 0x57, 0x46, 0xaf, 0x44, 0xd4, 0xf6, 0xcd, 0x96, 0xd7, 0xe7, 0xc4, 0x95, 0xcb, 0xf4, 0x25, 0xb0, 0x9c, 0x64, 0x9d, 0x32, 0xbf, 0x88, 0x6d, 0xa4, 0x8f, 0xba, 0xf9, 0x89, 0xa2, 0x11, 0x71, 0x87, 0xca, 0xfb, 0x1f, 0xb5, 0x80, 0x31, 0x76, 0x90, 0xe3, 0xcc, 0xd4, 0x46, 0x92, 0x0b, 0x7a, 0xf8, 0x2b, 0x31, 0xdb, 0x58, 0x04, 0xd8, 0x7d, 0x01, 0x51, 0x4a, 0xcb, 0xfa, 0x91, 0x56, 0xe7, 0x82, 0xf8, 0x67, 0xf6, 0xbe, 0xd9, 0x44, 0x9e, 0x0e, 0x9a, 0x2c, 0x09, 0xbc, 0xec, 0xc6, 0xaa, 0x08, 0x76, 0x36, 0x96, 0x5e, 0x34, 0xb3, 0xec, 0x76, 0x6f, 0x2f, 0xe2, 0xe4, 0x30, 0x18, 0xa2, 0xfd, 0xde, 0xb1, 0x40, 0x61, 0x6a, 0x0e, 0x9d, 0x82, 0xe5, 0x33, 0x10, 0x24, 0xee, 0x06, 0x52, 0xfc, 0x76, 0x41 } - -} -, -{ - "RSAES-OAEP Encryption Example 2.5", - /* Message to be encrypted */ - 19, - { 0x2e, 0xf2, 0xb0, 0x66, 0xf8, 0x54, 0xc3, 0x3f, 0x3b, 0xdc, 0xbb, 0x59, 0x94, 0xa4, 0x35, 0xe7, 0x3d, 0x6c, 0x6c } -, - /* Seed */ - 20, - { 0xeb, 0x3c, 0xeb, 0xbc, 0x4a, 0xdc, 0x16, 0xbb, 0x48, 0xe8, 0x8c, 0x8a, 0xec, 0x0e, 0x34, 0xaf, 0x7f, 0x42, 0x7f, 0xd3 } -, - /* Encryption */ - 129, - { 0x00, 0xeb, 0xc5, 0xf5, 0xfd, 0xa7, 0x7c, 0xfd, 0xad, 0x3c, 0x83, 0x64, 0x1a, 0x90, 0x25, 0xe7, 0x7d, 0x72, 0xd8, 0xa6, 0xfb, 0x33, 0xa8, 0x10, 0xf5, 0x95, 0x0f, 0x8d, 0x74, 0xc7, 0x3e, 0x8d, 0x93, 0x1e, 0x86, 0x34, 0xd8, 0x6a, 0xb1, 0x24, 0x62, 0x56, 0xae, 0x07, 0xb6, 0x00, 0x5b, 0x71, 0xb7, 0xf2, 0xfb, 0x98, 0x35, 0x12, 0x18, 0x33, 0x1c, 0xe6, 0x9b, 0x8f, 0xfb, 0xdc, 0x9d, 0xa0, 0x8b, 0xbc, 0x9c, 0x70, 0x4f, 0x87, 0x6d, 0xeb, 0x9d, 0xf9, 0xfc, 0x2e, 0xc0, 0x65, 0xca, 0xd8, 0x7f, 0x90, 0x90, 0xb0, 0x7a, 0xcc, 0x17, 0xaa, 0x7f, 0x99, 0x7b, 0x27, 0xac, 0xa4, 0x88, 0x06, 0xe8, 0x97, 0xf7, 0x71, 0xd9, 0x51, 0x41, 0xfe, 0x45, 0x26, 0xd8, 0xa5, 0x30, 0x1b, 0x67, 0x86, 0x27, 0xef, 0xab, 0x70, 0x7f, 0xd4, 0x0f, 0xbe, 0xbd, 0x6e, 0x79, 0x2a, 0x25, 0x61, 0x3e, 0x7a, 0xec } - -} -, -{ - "RSAES-OAEP Encryption Example 2.6", - /* Message to be encrypted */ - 22, - { 0x8a, 0x7f, 0xb3, 0x44, 0xc8, 0xb6, 0xcb, 0x2c, 0xf2, 0xef, 0x1f, 0x64, 0x3f, 0x9a, 0x32, 0x18, 0xf6, 0xe1, 0x9b, 0xba, 0x89, 0xc0 } -, - /* Seed */ - 20, - { 0x4c, 0x45, 0xcf, 0x4d, 0x57, 0xc9, 0x8e, 0x3d, 0x6d, 0x20, 0x95, 0xad, 0xc5, 0x1c, 0x48, 0x9e, 0xb5, 0x0d, 0xff, 0x84 } -, - /* Encryption */ - 129, - { 0x01, 0x08, 0x39, 0xec, 0x20, 0xc2, 0x7b, 0x90, 0x52, 0xe5, 0x5b, 0xef, 0xb9, 0xb7, 0x7e, 0x6f, 0xc2, 0x6e, 0x90, 0x75, 0xd7, 0xa5, 0x43, 0x78, 0xc6, 0x46, 0xab, 0xdf, 0x51, 0xe4, 0x45, 0xbd, 0x57, 0x15, 0xde, 0x81, 0x78, 0x9f, 0x56, 0xf1, 0x80, 0x3d, 0x91, 0x70, 0x76, 0x4a, 0x9e, 0x93, 0xcb, 0x78, 0x79, 0x86, 0x94, 0x02, 0x3e, 0xe7, 0x39, 0x3c, 0xe0, 0x4b, 0xc5, 0xd8, 0xf8, 0xc5, 0xa5, 0x2c, 0x17, 0x1d, 0x43, 0x83, 0x7e, 0x3a, 0xca, 0x62, 0xf6, 0x09, 0xeb, 0x0a, 0xa5, 0xff, 0xb0, 0x96, 0x0e, 0xf0, 0x41, 0x98, 0xdd, 0x75, 0x4f, 0x57, 0xf7, 0xfb, 0xe6, 0xab, 0xf7, 0x65, 0xcf, 0x11, 0x8b, 0x4c, 0xa4, 0x43, 0xb2, 0x3b, 0x5a, 0xab, 0x26, 0x6f, 0x95, 0x23, 0x26, 0xac, 0x45, 0x81, 0x10, 0x06, 0x44, 0x32, 0x5f, 0x8b, 0x72, 0x1a, 0xcd, 0x5d, 0x04, 0xff, 0x14, 0xef, 0x3a } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 3: A 1026-bit RSA Key Pair", -{ - /* RSA modulus n */ - 129, - { 0x02, 0xb5, 0x8f, 0xec, 0x03, 0x9a, 0x86, 0x07, 0x00, 0xa4, 0xd7, 0xb6, 0x46, 0x2f, 0x93, 0xe6, 0xcd, 0xd4, 0x91, 0x16, 0x1d, 0xdd, 0x74, 0xf4, 0xe8, 0x10, 0xb4, 0x0e, 0x3c, 0x16, 0x52, 0x00, 0x6a, 0x5c, 0x27, 0x7b, 0x27, 0x74, 0xc1, 0x13, 0x05, 0xa4, 0xcb, 0xab, 0x5a, 0x78, 0xef, 0xa5, 0x7e, 0x17, 0xa8, 0x6d, 0xf7, 0xa3, 0xfa, 0x36, 0xfc, 0x4b, 0x1d, 0x22, 0x49, 0xf2, 0x2e, 0xc7, 0xc2, 0xdd, 0x6a, 0x46, 0x32, 0x32, 0xac, 0xce, 0xa9, 0x06, 0xd6, 0x6e, 0xbe, 0x80, 0xb5, 0x70, 0x4b, 0x10, 0x72, 0x9d, 0xa6, 0xf8, 0x33, 0x23, 0x4a, 0xbb, 0x5e, 0xfd, 0xd4, 0xa2, 0x92, 0xcb, 0xfa, 0xd3, 0x3b, 0x4d, 0x33, 0xfa, 0x7a, 0x14, 0xb8, 0xc3, 0x97, 0xb5, 0x6e, 0x3a, 0xcd, 0x21, 0x20, 0x34, 0x28, 0xb7, 0x7c, 0xdf, 0xa3, 0x3a, 0x6d, 0xa7, 0x06, 0xb3, 0xd8, 0xb0, 0xfc, 0x43, 0xe9 } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 128, - { 0x15, 0xb4, 0x8a, 0x5b, 0x56, 0x83, 0xa9, 0x46, 0x70, 0xe2, 0x3b, 0x57, 0x18, 0xf8, 0x14, 0xfa, 0x0e, 0x13, 0xf8, 0x50, 0x38, 0xf5, 0x07, 0x11, 0x18, 0x2c, 0xba, 0x61, 0x51, 0x05, 0x81, 0xf3, 0xd2, 0x2c, 0x7e, 0x23, 0x2e, 0xf9, 0x37, 0xe2, 0x2e, 0x55, 0x1d, 0x68, 0xb8, 0x6e, 0x2f, 0x8c, 0xb1, 0xaa, 0xd8, 0xbe, 0x2e, 0x48, 0x8f, 0x5d, 0xf7, 0xef, 0xd2, 0x79, 0xe3, 0xf5, 0x68, 0xd4, 0xea, 0xf3, 0x6f, 0x80, 0xcf, 0x71, 0x41, 0xac, 0xe6, 0x0f, 0xcc, 0x91, 0x13, 0xfb, 0x6c, 0x4a, 0x84, 0x1f, 0xd5, 0x0b, 0xbc, 0x7c, 0x51, 0x2f, 0xfc, 0xbe, 0xff, 0x21, 0x48, 0x7a, 0xa8, 0x11, 0xeb, 0x3c, 0xa8, 0xc6, 0x20, 0x05, 0x34, 0x6a, 0x86, 0xde, 0x86, 0xbf, 0xa1, 0xd8, 0xa9, 0x48, 0xfd, 0x3f, 0x34, 0x8c, 0x22, 0xea, 0xad, 0xf3, 0x33, 0xc3, 0xce, 0x6c, 0xe1, 0x32, 0x08, 0xfd } -, - /* Prime p */ - 65, - { 0x01, 0xbf, 0x01, 0xd2, 0x16, 0xd7, 0x35, 0x95, 0xcf, 0x02, 0x70, 0xc2, 0xbe, 0xb7, 0x8d, 0x40, 0xa0, 0xd8, 0x44, 0x7d, 0x31, 0xda, 0x91, 0x9a, 0x98, 0x3f, 0x7e, 0xea, 0x78, 0x1b, 0x77, 0xd8, 0x5f, 0xe3, 0x71, 0xb3, 0xe9, 0x37, 0x3e, 0x7b, 0x69, 0x21, 0x7d, 0x31, 0x50, 0xa0, 0x2d, 0x89, 0x58, 0xde, 0x7f, 0xad, 0x9d, 0x55, 0x51, 0x60, 0x95, 0x8b, 0x44, 0x54, 0x12, 0x7e, 0x0e, 0x7e, 0xaf } -, - /* Prime q */ - 65, - { 0x01, 0x8d, 0x33, 0x99, 0x65, 0x81, 0x66, 0xdb, 0x38, 0x29, 0x81, 0x6d, 0x7b, 0x29, 0x54, 0x16, 0x75, 0x9e, 0x9c, 0x91, 0x98, 0x7f, 0x5b, 0x2d, 0x8a, 0xec, 0xd6, 0x3b, 0x04, 0xb4, 0x8b, 0xd7, 0xb2, 0xfc, 0xf2, 0x29, 0xbb, 0x7f, 0x8a, 0x6d, 0xc8, 0x8b, 0xa1, 0x3d, 0xd2, 0xe3, 0x9a, 0xd5, 0x5b, 0x6d, 0x1a, 0x06, 0x16, 0x07, 0x08, 0xf9, 0x70, 0x0b, 0xe8, 0x0b, 0x8f, 0xd3, 0x74, 0x4c, 0xe7 } -, - /* p's CRT exponent dP */ - 64, - { 0x06, 0xc0, 0xa2, 0x49, 0xd2, 0x0a, 0x6f, 0x2e, 0xe7, 0x5c, 0x88, 0xb4, 0x94, 0xd5, 0x3f, 0x6a, 0xae, 0x99, 0xaa, 0x42, 0x7c, 0x88, 0xc2, 0x8b, 0x16, 0x3a, 0x76, 0x94, 0x45, 0xe5, 0xf3, 0x90, 0xcf, 0x40, 0xc2, 0x74, 0xfd, 0x6e, 0xa6, 0x32, 0x9a, 0x5c, 0xe7, 0xc7, 0xce, 0x03, 0xa2, 0x15, 0x83, 0x96, 0xee, 0x2a, 0x78, 0x45, 0x78, 0x6e, 0x09, 0xe2, 0x88, 0x5a, 0x97, 0x28, 0xe4, 0xe5 } -, - /* q's CRT exponent dQ */ - 64, - { 0xd1, 0xd2, 0x7c, 0x29, 0xfe, 0xdd, 0x92, 0xd8, 0x6c, 0x34, 0x8e, 0xdd, 0x0c, 0xcb, 0xfa, 0xc1, 0x4f, 0x74, 0x6e, 0x05, 0x1c, 0xe1, 0xd1, 0x81, 0x1d, 0xf3, 0x5d, 0x61, 0xf2, 0xee, 0x1c, 0x97, 0xd4, 0xbf, 0x28, 0x04, 0x80, 0x2f, 0x64, 0x27, 0x18, 0x7b, 0xa8, 0xe9, 0x0a, 0x8a, 0xf4, 0x42, 0x43, 0xb4, 0x07, 0x9b, 0x03, 0x44, 0x5e, 0x60, 0x2e, 0x29, 0xfa, 0x51, 0x93, 0xe6, 0x4f, 0xe9 } -, - /* CRT coefficient qInv */ - 64, - { 0x8c, 0xb2, 0xf7, 0x56, 0xbd, 0x89, 0x41, 0xb1, 0xd3, 0xb7, 0x70, 0xe5, 0xad, 0x31, 0xee, 0x37, 0x3b, 0x28, 0xac, 0xda, 0x69, 0xff, 0x9b, 0x6f, 0x40, 0xfe, 0x57, 0x8b, 0x9f, 0x1a, 0xfb, 0x85, 0x83, 0x6f, 0x96, 0x27, 0xd3, 0x7a, 0xcf, 0xf7, 0x3c, 0x27, 0x79, 0xe6, 0x34, 0xbb, 0x26, 0x01, 0x1c, 0x2c, 0x8f, 0x7f, 0x33, 0x61, 0xae, 0x2a, 0x9e, 0xa6, 0x5e, 0xd6, 0x89, 0xe3, 0x63, 0x9a } - -} -, -{{ - "RSAES-OAEP Encryption Example 3.1", - /* Message to be encrypted */ - 8, - { 0x08, 0x78, 0x20, 0xb5, 0x69, 0xe8, 0xfa, 0x8d } -, - /* Seed */ - 20, - { 0x8c, 0xed, 0x6b, 0x19, 0x62, 0x90, 0x80, 0x57, 0x90, 0xe9, 0x09, 0x07, 0x40, 0x15, 0xe6, 0xa2, 0x0b, 0x0c, 0x48, 0x94 } -, - /* Encryption */ - 129, - { 0x02, 0x6a, 0x04, 0x85, 0xd9, 0x6a, 0xeb, 0xd9, 0x6b, 0x43, 0x82, 0x08, 0x50, 0x99, 0xb9, 0x62, 0xe6, 0xa2, 0xbd, 0xec, 0x3d, 0x90, 0xc8, 0xdb, 0x62, 0x5e, 0x14, 0x37, 0x2d, 0xe8, 0x5e, 0x2d, 0x5b, 0x7b, 0xaa, 0xb6, 0x5c, 0x8f, 0xaf, 0x91, 0xbb, 0x55, 0x04, 0xfb, 0x49, 0x5a, 0xfc, 0xe5, 0xc9, 0x88, 0xb3, 0xf6, 0xa5, 0x2e, 0x20, 0xe1, 0xd6, 0xcb, 0xd3, 0x56, 0x6c, 0x5c, 0xd1, 0xf2, 0xb8, 0x31, 0x8b, 0xb5, 0x42, 0xcc, 0x0e, 0xa2, 0x5c, 0x4a, 0xab, 0x99, 0x32, 0xaf, 0xa2, 0x07, 0x60, 0xea, 0xdd, 0xec, 0x78, 0x43, 0x96, 0xa0, 0x7e, 0xa0, 0xef, 0x24, 0xd4, 0xe6, 0xf4, 0xd3, 0x7e, 0x50, 0x52, 0xa7, 0xa3, 0x1e, 0x14, 0x6a, 0xa4, 0x80, 0xa1, 0x11, 0xbb, 0xe9, 0x26, 0x40, 0x13, 0x07, 0xe0, 0x0f, 0x41, 0x00, 0x33, 0x84, 0x2b, 0x6d, 0x82, 0xfe, 0x5c, 0xe4, 0xdf, 0xae, 0x80 } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSAES-OAEP Encryption Example 3.2", - /* Message to be encrypted */ - 28, - { 0x46, 0x53, 0xac, 0xaf, 0x17, 0x19, 0x60, 0xb0, 0x1f, 0x52, 0xa7, 0xbe, 0x63, 0xa3, 0xab, 0x21, 0xdc, 0x36, 0x8e, 0xc4, 0x3b, 0x50, 0xd8, 0x2e, 0xc3, 0x78, 0x1e, 0x04 } -, - /* Seed */ - 20, - { 0xb4, 0x29, 0x1d, 0x65, 0x67, 0x55, 0x08, 0x48, 0xcc, 0x15, 0x69, 0x67, 0xc8, 0x09, 0xba, 0xab, 0x6c, 0xa5, 0x07, 0xf0 } -, - /* Encryption */ - 129, - { 0x02, 0x4d, 0xb8, 0x9c, 0x78, 0x02, 0x98, 0x9b, 0xe0, 0x78, 0x38, 0x47, 0x86, 0x30, 0x84, 0x94, 0x1b, 0xf2, 0x09, 0xd7, 0x61, 0x98, 0x7e, 0x38, 0xf9, 0x7c, 0xb5, 0xf6, 0xf1, 0xbc, 0x88, 0xda, 0x72, 0xa5, 0x0b, 0x73, 0xeb, 0xaf, 0x11, 0xc8, 0x79, 0xc4, 0xf9, 0x5d, 0xf3, 0x7b, 0x85, 0x0b, 0x8f, 0x65, 0xd7, 0x62, 0x2e, 0x25, 0xb1, 0xb8, 0x89, 0xe8, 0x0f, 0xe8, 0x0b, 0xac, 0xa2, 0x06, 0x9d, 0x6e, 0x0e, 0x1d, 0x82, 0x99, 0x53, 0xfc, 0x45, 0x90, 0x69, 0xde, 0x98, 0xea, 0x97, 0x98, 0xb4, 0x51, 0xe5, 0x57, 0xe9, 0x9a, 0xbf, 0x8f, 0xe3, 0xd9, 0xcc, 0xf9, 0x09, 0x6e, 0xbb, 0xf3, 0xe5, 0x25, 0x5d, 0x3b, 0x4e, 0x1c, 0x6d, 0x2e, 0xca, 0xdf, 0x06, 0x7a, 0x35, 0x9e, 0xea, 0x86, 0x40, 0x5a, 0xcd, 0x47, 0xd5, 0xe1, 0x65, 0x51, 0x7c, 0xca, 0xfd, 0x47, 0xd6, 0xdb, 0xee, 0x4b, 0xf5 } - -} -, -{ - "RSAES-OAEP Encryption Example 3.3", - /* Message to be encrypted */ - 9, - { 0xd9, 0x4c, 0xd0, 0xe0, 0x8f, 0xa4, 0x04, 0xed, 0x89 } -, - /* Seed */ - 20, - { 0xce, 0x89, 0x28, 0xf6, 0x05, 0x95, 0x58, 0x25, 0x40, 0x08, 0xba, 0xdd, 0x97, 0x94, 0xfa, 0xdc, 0xd2, 0xfd, 0x1f, 0x65 } -, - /* Encryption */ - 129, - { 0x02, 0x39, 0xbc, 0xe6, 0x81, 0x03, 0x24, 0x41, 0x52, 0x88, 0x77, 0xd6, 0xd1, 0xc8, 0xbb, 0x28, 0xaa, 0x3b, 0xc9, 0x7f, 0x1d, 0xf5, 0x84, 0x56, 0x36, 0x18, 0x99, 0x57, 0x97, 0x68, 0x38, 0x44, 0xca, 0x86, 0x66, 0x47, 0x32, 0xf4, 0xbe, 0xd7, 0xa0, 0xaa, 0xb0, 0x83, 0xaa, 0xab, 0xfb, 0x72, 0x38, 0xf5, 0x82, 0xe3, 0x09, 0x58, 0xc2, 0x02, 0x4e, 0x44, 0xe5, 0x70, 0x43, 0xb9, 0x79, 0x50, 0xfd, 0x54, 0x3d, 0xa9, 0x77, 0xc9, 0x0c, 0xdd, 0xe5, 0x33, 0x7d, 0x61, 0x84, 0x42, 0xf9, 0x9e, 0x60, 0xd7, 0x78, 0x3a, 0xb5, 0x9c, 0xe6, 0xdd, 0x9d, 0x69, 0xc4, 0x7a, 0xd1, 0xe9, 0x62, 0xbe, 0xc2, 0x2d, 0x05, 0x89, 0x5c, 0xff, 0x8d, 0x3f, 0x64, 0xed, 0x52, 0x61, 0xd9, 0x2b, 0x26, 0x78, 0x51, 0x03, 0x93, 0x48, 0x49, 0x90, 0xba, 0x3f, 0x7f, 0x06, 0x81, 0x8a, 0xe6, 0xff, 0xce, 0x8a, 0x3a } - -} -, -{ - "RSAES-OAEP Encryption Example 3.4", - /* Message to be encrypted */ - 18, - { 0x6c, 0xc6, 0x41, 0xb6, 0xb6, 0x1e, 0x6f, 0x96, 0x39, 0x74, 0xda, 0xd2, 0x3a, 0x90, 0x13, 0x28, 0x4e, 0xf1 } -, - /* Seed */ - 20, - { 0x6e, 0x29, 0x79, 0xf5, 0x2d, 0x68, 0x14, 0xa5, 0x7d, 0x83, 0xb0, 0x90, 0x05, 0x48, 0x88, 0xf1, 0x19, 0xa5, 0xb9, 0xa3 } -, - /* Encryption */ - 129, - { 0x02, 0x99, 0x4c, 0x62, 0xaf, 0xd7, 0x6f, 0x49, 0x8b, 0xa1, 0xfd, 0x2c, 0xf6, 0x42, 0x85, 0x7f, 0xca, 0x81, 0xf4, 0x37, 0x3c, 0xb0, 0x8f, 0x1c, 0xba, 0xee, 0x6f, 0x02, 0x5c, 0x3b, 0x51, 0x2b, 0x42, 0xc3, 0xe8, 0x77, 0x91, 0x13, 0x47, 0x66, 0x48, 0x03, 0x9d, 0xbe, 0x04, 0x93, 0xf9, 0x24, 0x62, 0x92, 0xfa, 0xc2, 0x89, 0x50, 0x60, 0x0e, 0x7c, 0x0f, 0x32, 0xed, 0xf9, 0xc8, 0x1b, 0x9d, 0xec, 0x45, 0xc3, 0xbd, 0xe0, 0xcc, 0x8d, 0x88, 0x47, 0x59, 0x01, 0x69, 0x90, 0x7b, 0x7d, 0xc5, 0x99, 0x1c, 0xeb, 0x29, 0xbb, 0x07, 0x14, 0xd6, 0x13, 0xd9, 0x6d, 0xf0, 0xf1, 0x2e, 0xc5, 0xd8, 0xd3, 0x50, 0x7c, 0x8e, 0xe7, 0xae, 0x78, 0xdd, 0x83, 0xf2, 0x16, 0xfa, 0x61, 0xde, 0x10, 0x03, 0x63, 0xac, 0xa4, 0x8a, 0x7e, 0x91, 0x4a, 0xe9, 0xf4, 0x2d, 0xdf, 0xbe, 0x94, 0x3b, 0x09, 0xd9, 0xa0 } - -} -, -{ - "RSAES-OAEP Encryption Example 3.5", - /* Message to be encrypted */ - 46, - { 0xdf, 0x51, 0x51, 0x83, 0x2b, 0x61, 0xf4, 0xf2, 0x58, 0x91, 0xfb, 0x41, 0x72, 0xf3, 0x28, 0xd2, 0xed, 0xdf, 0x83, 0x71, 0xff, 0xcf, 0xdb, 0xe9, 0x97, 0x93, 0x92, 0x95, 0xf3, 0x0e, 0xca, 0x69, 0x18, 0x01, 0x7c, 0xfd, 0xa1, 0x15, 0x3b, 0xf7, 0xa6, 0xaf, 0x87, 0x59, 0x32, 0x23 } -, - /* Seed */ - 20, - { 0x2d, 0x76, 0x0b, 0xfe, 0x38, 0xc5, 0x9d, 0xe3, 0x4c, 0xdc, 0x8b, 0x8c, 0x78, 0xa3, 0x8e, 0x66, 0x28, 0x4a, 0x2d, 0x27 } -, - /* Encryption */ - 129, - { 0x01, 0x62, 0x04, 0x2f, 0xf6, 0x96, 0x95, 0x92, 0xa6, 0x16, 0x70, 0x31, 0x81, 0x1a, 0x23, 0x98, 0x34, 0xce, 0x63, 0x8a, 0xbf, 0x54, 0xfe, 0xc8, 0xb9, 0x94, 0x78, 0x12, 0x2a, 0xfe, 0x2e, 0xe6, 0x7f, 0x8c, 0x5b, 0x18, 0xb0, 0x33, 0x98, 0x05, 0xbf, 0xdb, 0xc5, 0xa4, 0xe6, 0x72, 0x0b, 0x37, 0xc5, 0x9c, 0xfb, 0xa9, 0x42, 0x46, 0x4c, 0x59, 0x7f, 0xf5, 0x32, 0xa1, 0x19, 0x82, 0x15, 0x45, 0xfd, 0x2e, 0x59, 0xb1, 0x14, 0xe6, 0x1d, 0xaf, 0x71, 0x82, 0x05, 0x29, 0xf5, 0x02, 0x9c, 0xf5, 0x24, 0x95, 0x43, 0x27, 0xc3, 0x4e, 0xc5, 0xe6, 0xf5, 0xba, 0x7e, 0xfc, 0xc4, 0xde, 0x94, 0x3a, 0xb8, 0xad, 0x4e, 0xd7, 0x87, 0xb1, 0x45, 0x43, 0x29, 0xf7, 0x0d, 0xb7, 0x98, 0xa3, 0xa8, 0xf4, 0xd9, 0x2f, 0x82, 0x74, 0xe2, 0xb2, 0x94, 0x8a, 0xde, 0x62, 0x7c, 0xe8, 0xee, 0x33, 0xe4, 0x3c, 0x60 } - -} -, -{ - "RSAES-OAEP Encryption Example 3.6", - /* Message to be encrypted */ - 56, - { 0x3c, 0x3b, 0xad, 0x89, 0x3c, 0x54, 0x4a, 0x6d, 0x52, 0x0a, 0xb0, 0x22, 0x31, 0x91, 0x88, 0xc8, 0xd5, 0x04, 0xb7, 0xa7, 0x88, 0xb8, 0x50, 0x90, 0x3b, 0x85, 0x97, 0x2e, 0xaa, 0x18, 0x55, 0x2e, 0x11, 0x34, 0xa7, 0xad, 0x60, 0x98, 0x82, 0x62, 0x54, 0xff, 0x7a, 0xb6, 0x72, 0xb3, 0xd8, 0xeb, 0x31, 0x58, 0xfa, 0xc6, 0xd4, 0xcb, 0xae, 0xf1 } -, - /* Seed */ - 20, - { 0xf1, 0x74, 0x77, 0x9c, 0x5f, 0xd3, 0xcf, 0xe0, 0x07, 0xba, 0xdc, 0xb7, 0xa3, 0x6c, 0x9b, 0x55, 0xbf, 0xcf, 0xbf, 0x0e } -, - /* Encryption */ - 129, - { 0x00, 0x11, 0x20, 0x51, 0xe7, 0x5d, 0x06, 0x49, 0x43, 0xbc, 0x44, 0x78, 0x07, 0x5e, 0x43, 0x48, 0x2f, 0xd5, 0x9c, 0xee, 0x06, 0x79, 0xde, 0x68, 0x93, 0xee, 0xc3, 0xa9, 0x43, 0xda, 0xa4, 0x90, 0xb9, 0x69, 0x1c, 0x93, 0xdf, 0xc0, 0x46, 0x4b, 0x66, 0x23, 0xb9, 0xf3, 0xdb, 0xd3, 0xe7, 0x00, 0x83, 0x26, 0x4f, 0x03, 0x4b, 0x37, 0x4f, 0x74, 0x16, 0x4e, 0x1a, 0x00, 0x76, 0x37, 0x25, 0xe5, 0x74, 0x74, 0x4b, 0xa0, 0xb9, 0xdb, 0x83, 0x43, 0x4f, 0x31, 0xdf, 0x96, 0xf6, 0xe2, 0xa2, 0x6f, 0x6d, 0x8e, 0xba, 0x34, 0x8b, 0xd4, 0x68, 0x6c, 0x22, 0x38, 0xac, 0x07, 0xc3, 0x7a, 0xac, 0x37, 0x85, 0xd1, 0xc7, 0xee, 0xa2, 0xf8, 0x19, 0xfd, 0x91, 0x49, 0x17, 0x98, 0xed, 0x8e, 0x9c, 0xef, 0x5e, 0x43, 0xb7, 0x81, 0xb0, 0xe0, 0x27, 0x6e, 0x37, 0xc4, 0x3f, 0xf9, 0x49, 0x2d, 0x00, 0x57, 0x30 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 4: A 1027-bit RSA Key Pair", -{ - /* RSA modulus n */ - 129, - { 0x05, 0x12, 0x40, 0xb6, 0xcc, 0x00, 0x04, 0xfa, 0x48, 0xd0, 0x13, 0x46, 0x71, 0xc0, 0x78, 0xc7, 0xc8, 0xde, 0xc3, 0xb3, 0xe2, 0xf2, 0x5b, 0xc2, 0x56, 0x44, 0x67, 0x33, 0x9d, 0xb3, 0x88, 0x53, 0xd0, 0x6b, 0x85, 0xee, 0xa5, 0xb2, 0xde, 0x35, 0x3b, 0xff, 0x42, 0xac, 0x2e, 0x46, 0xbc, 0x97, 0xfa, 0xe6, 0xac, 0x96, 0x18, 0xda, 0x95, 0x37, 0xa5, 0xc8, 0xf5, 0x53, 0xc1, 0xe3, 0x57, 0x62, 0x59, 0x91, 0xd6, 0x10, 0x8d, 0xcd, 0x78, 0x85, 0xfb, 0x3a, 0x25, 0x41, 0x3f, 0x53, 0xef, 0xca, 0xd9, 0x48, 0xcb, 0x35, 0xcd, 0x9b, 0x9a, 0xe9, 0xc1, 0xc6, 0x76, 0x26, 0xd1, 0x13, 0xd5, 0x7d, 0xde, 0x4c, 0x5b, 0xea, 0x76, 0xbb, 0x5b, 0xb7, 0xde, 0x96, 0xc0, 0x0d, 0x07, 0x37, 0x2e, 0x96, 0x85, 0xa6, 0xd7, 0x5c, 0xf9, 0xd2, 0x39, 0xfa, 0x14, 0x8d, 0x70, 0x93, 0x1b, 0x5f, 0x3f, 0xb0, 0x39 } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 128, - { 0x04, 0x11, 0xff, 0xca, 0x3b, 0x7c, 0xa5, 0xe9, 0xe9, 0xbe, 0x7f, 0xe3, 0x8a, 0x85, 0x10, 0x5e, 0x35, 0x38, 0x96, 0xdb, 0x05, 0xc5, 0x79, 0x6a, 0xec, 0xd2, 0xa7, 0x25, 0x16, 0x1e, 0xb3, 0x65, 0x1c, 0x86, 0x29, 0xa9, 0xb8, 0x62, 0xb9, 0x04, 0xd7, 0xb0, 0xc7, 0xb3, 0x7f, 0x8c, 0xb5, 0xa1, 0xc2, 0xb5, 0x40, 0x01, 0x01, 0x8a, 0x00, 0xa1, 0xeb, 0x2c, 0xaf, 0xe4, 0xee, 0x4e, 0x94, 0x92, 0xc3, 0x48, 0xbc, 0x2b, 0xed, 0xab, 0x4b, 0x9e, 0xbb, 0xf0, 0x64, 0xe8, 0xef, 0xf3, 0x22, 0xb9, 0x00, 0x9f, 0x8e, 0xec, 0x65, 0x39, 0x05, 0xf4, 0x0d, 0xf8, 0x8a, 0x3c, 0xdc, 0x49, 0xd4, 0x56, 0x7f, 0x75, 0x62, 0x7d, 0x41, 0xac, 0xa6, 0x24, 0x12, 0x9b, 0x46, 0xa0, 0xb7, 0xc6, 0x98, 0xe5, 0xe6, 0x5f, 0x2b, 0x7b, 0xa1, 0x02, 0xc7, 0x49, 0xa1, 0x01, 0x35, 0xb6, 0x54, 0x0d, 0x04, 0x01 } -, - /* Prime p */ - 65, - { 0x02, 0x74, 0x58, 0xc1, 0x9e, 0xc1, 0x63, 0x69, 0x19, 0xe7, 0x36, 0xc9, 0xaf, 0x25, 0xd6, 0x09, 0xa5, 0x1b, 0x8f, 0x56, 0x1d, 0x19, 0xc6, 0xbf, 0x69, 0x43, 0xdd, 0x1e, 0xe1, 0xab, 0x8a, 0x4a, 0x3f, 0x23, 0x21, 0x00, 0xbd, 0x40, 0xb8, 0x8d, 0xec, 0xc6, 0xba, 0x23, 0x55, 0x48, 0xb6, 0xef, 0x79, 0x2a, 0x11, 0xc9, 0xde, 0x82, 0x3d, 0x0a, 0x79, 0x22, 0xc7, 0x09, 0x5b, 0x6e, 0xba, 0x57, 0x01 } -, - /* Prime q */ - 65, - { 0x02, 0x10, 0xee, 0x9b, 0x33, 0xab, 0x61, 0x71, 0x6e, 0x27, 0xd2, 0x51, 0xbd, 0x46, 0x5f, 0x4b, 0x35, 0xa1, 0xa2, 0x32, 0xe2, 0xda, 0x00, 0x90, 0x1c, 0x29, 0x4b, 0xf2, 0x23, 0x50, 0xce, 0x49, 0x0d, 0x09, 0x9f, 0x64, 0x2b, 0x53, 0x75, 0x61, 0x2d, 0xb6, 0x3b, 0xa1, 0xf2, 0x03, 0x86, 0x49, 0x2b, 0xf0, 0x4d, 0x34, 0xb3, 0xc2, 0x2b, 0xce, 0xb9, 0x09, 0xd1, 0x34, 0x41, 0xb5, 0x3b, 0x51, 0x39 } -, - /* p's CRT exponent dP */ - 64, - { 0x39, 0xfa, 0x02, 0x8b, 0x82, 0x6e, 0x88, 0xc1, 0x12, 0x1b, 0x75, 0x0a, 0x8b, 0x24, 0x2f, 0xa9, 0xa3, 0x5c, 0x5b, 0x66, 0xbd, 0xfd, 0x1f, 0xa6, 0x37, 0xd3, 0xcc, 0x48, 0xa8, 0x4a, 0x4f, 0x45, 0x7a, 0x19, 0x4e, 0x77, 0x27, 0xe4, 0x9f, 0x7b, 0xcc, 0x6e, 0x5a, 0x5a, 0x41, 0x26, 0x57, 0xfc, 0x47, 0x0c, 0x73, 0x22, 0xeb, 0xc3, 0x74, 0x16, 0xef, 0x45, 0x8c, 0x30, 0x7a, 0x8c, 0x09, 0x01 } -, - /* q's CRT exponent dQ */ - 65, - { 0x01, 0x5d, 0x99, 0xa8, 0x41, 0x95, 0x94, 0x39, 0x79, 0xfa, 0x9e, 0x1b, 0xe2, 0xc3, 0xc1, 0xb6, 0x9f, 0x43, 0x2f, 0x46, 0xfd, 0x03, 0xe4, 0x7d, 0x5b, 0xef, 0xbb, 0xbf, 0xd6, 0xb1, 0xd1, 0x37, 0x1d, 0x83, 0xef, 0xb3, 0x30, 0xa3, 0xe0, 0x20, 0x94, 0x2b, 0x2f, 0xed, 0x11, 0x5e, 0x5d, 0x02, 0xbe, 0x24, 0xfd, 0x92, 0xc9, 0x01, 0x9d, 0x1c, 0xec, 0xd6, 0xdd, 0x4c, 0xf1, 0xe5, 0x4c, 0xc8, 0x99 } -, - /* CRT coefficient qInv */ - 65, - { 0x01, 0xf0, 0xb7, 0x01, 0x51, 0x70, 0xb3, 0xf5, 0xe4, 0x22, 0x23, 0xba, 0x30, 0x30, 0x1c, 0x41, 0xa6, 0xd8, 0x7c, 0xbb, 0x70, 0xe3, 0x0c, 0xb7, 0xd3, 0xc6, 0x7d, 0x25, 0x47, 0x3d, 0xb1, 0xf6, 0xcb, 0xf0, 0x3e, 0x3f, 0x91, 0x26, 0xe3, 0xe9, 0x79, 0x68, 0x27, 0x9a, 0x86, 0x5b, 0x2c, 0x2b, 0x42, 0x65, 0x24, 0xcf, 0xc5, 0x2a, 0x68, 0x3d, 0x31, 0xed, 0x30, 0xeb, 0x98, 0x4b, 0xe4, 0x12, 0xba } - -} -, -{{ - "RSAES-OAEP Encryption Example 4.1", - /* Message to be encrypted */ - 56, - { 0x4a, 0x86, 0x60, 0x95, 0x34, 0xee, 0x43, 0x4a, 0x6c, 0xbc, 0xa3, 0xf7, 0xe9, 0x62, 0xe7, 0x6d, 0x45, 0x5e, 0x32, 0x64, 0xc1, 0x9f, 0x60, 0x5f, 0x6e, 0x5f, 0xf6, 0x13, 0x7c, 0x65, 0xc5, 0x6d, 0x7f, 0xb3, 0x44, 0xcd, 0x52, 0xbc, 0x93, 0x37, 0x4f, 0x3d, 0x16, 0x6c, 0x9f, 0x0c, 0x6f, 0x9c, 0x50, 0x6b, 0xad, 0x19, 0x33, 0x09, 0x72, 0xd2 } -, - /* Seed */ - 20, - { 0x1c, 0xac, 0x19, 0xce, 0x99, 0x3d, 0xef, 0x55, 0xf9, 0x82, 0x03, 0xf6, 0x85, 0x28, 0x96, 0xc9, 0x5c, 0xcc, 0xa1, 0xf3 } -, - /* Encryption */ - 129, - { 0x04, 0xcc, 0xe1, 0x96, 0x14, 0x84, 0x5e, 0x09, 0x41, 0x52, 0xa3, 0xfe, 0x18, 0xe5, 0x4e, 0x33, 0x30, 0xc4, 0x4e, 0x5e, 0xfb, 0xc6, 0x4a, 0xe1, 0x68, 0x86, 0xcb, 0x18, 0x69, 0x01, 0x4c, 0xc5, 0x78, 0x1b, 0x1f, 0x8f, 0x9e, 0x04, 0x53, 0x84, 0xd0, 0x11, 0x2a, 0x13, 0x5c, 0xa0, 0xd1, 0x2e, 0x9c, 0x88, 0xa8, 0xe4, 0x06, 0x34, 0x16, 0xde, 0xaa, 0xe3, 0x84, 0x4f, 0x60, 0xd6, 0xe9, 0x6f, 0xe1, 0x55, 0x14, 0x5f, 0x45, 0x25, 0xb9, 0xa3, 0x44, 0x31, 0xca, 0x37, 0x66, 0x18, 0x0f, 0x70, 0xe1, 0x5a, 0x5e, 0x5d, 0x8e, 0x8b, 0x1a, 0x51, 0x6f, 0xf8, 0x70, 0x60, 0x9f, 0x13, 0xf8, 0x96, 0x93, 0x5c, 0xed, 0x18, 0x82, 0x79, 0xa5, 0x8e, 0xd1, 0x3d, 0x07, 0x11, 0x42, 0x77, 0xd7, 0x5c, 0x65, 0x68, 0x60, 0x7e, 0x0a, 0xb0, 0x92, 0xfd, 0x80, 0x3a, 0x22, 0x3e, 0x4a, 0x8e, 0xe0, 0xb1, 0xa8 } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSAES-OAEP Encryption Example 4.2", - /* Message to be encrypted */ - 64, - { 0xb0, 0xad, 0xc4, 0xf3, 0xfe, 0x11, 0xda, 0x59, 0xce, 0x99, 0x27, 0x73, 0xd9, 0x05, 0x99, 0x43, 0xc0, 0x30, 0x46, 0x49, 0x7e, 0xe9, 0xd9, 0xf9, 0xa0, 0x6d, 0xf1, 0x16, 0x6d, 0xb4, 0x6d, 0x98, 0xf5, 0x8d, 0x27, 0xec, 0x07, 0x4c, 0x02, 0xee, 0xe6, 0xcb, 0xe2, 0x44, 0x9c, 0x8b, 0x9f, 0xc5, 0x08, 0x0c, 0x5c, 0x3f, 0x44, 0x33, 0x09, 0x25, 0x12, 0xec, 0x46, 0xaa, 0x79, 0x37, 0x43, 0xc8 } -, - /* Seed */ - 20, - { 0xf5, 0x45, 0xd5, 0x89, 0x75, 0x85, 0xe3, 0xdb, 0x71, 0xaa, 0x0c, 0xb8, 0xda, 0x76, 0xc5, 0x1d, 0x03, 0x2a, 0xe9, 0x63 } -, - /* Encryption */ - 129, - { 0x00, 0x97, 0xb6, 0x98, 0xc6, 0x16, 0x56, 0x45, 0xb3, 0x03, 0x48, 0x6f, 0xbf, 0x5a, 0x2a, 0x44, 0x79, 0xc0, 0xee, 0x85, 0x88, 0x9b, 0x54, 0x1a, 0x6f, 0x0b, 0x85, 0x8d, 0x6b, 0x65, 0x97, 0xb1, 0x3b, 0x85, 0x4e, 0xb4, 0xf8, 0x39, 0xaf, 0x03, 0x39, 0x9a, 0x80, 0xd7, 0x9b, 0xda, 0x65, 0x78, 0xc8, 0x41, 0xf9, 0x0d, 0x64, 0x57, 0x15, 0xb2, 0x80, 0xd3, 0x71, 0x43, 0x99, 0x2d, 0xd1, 0x86, 0xc8, 0x0b, 0x94, 0x9b, 0x77, 0x5c, 0xae, 0x97, 0x37, 0x0e, 0x4e, 0xc9, 0x74, 0x43, 0x13, 0x6c, 0x6d, 0xa4, 0x84, 0xe9, 0x70, 0xff, 0xdb, 0x13, 0x23, 0xa2, 0x08, 0x47, 0x82, 0x1d, 0x3b, 0x18, 0x38, 0x1d, 0xe1, 0x3b, 0xb4, 0x9a, 0xae, 0xa6, 0x65, 0x30, 0xc4, 0xa4, 0xb8, 0x27, 0x1f, 0x3e, 0xae, 0x17, 0x2c, 0xd3, 0x66, 0xe0, 0x7e, 0x66, 0x36, 0xf1, 0x01, 0x9d, 0x2a, 0x28, 0xae, 0xd1, 0x5e } - -} -, -{ - "RSAES-OAEP Encryption Example 4.3", - /* Message to be encrypted */ - 62, - { 0xbf, 0x6d, 0x42, 0xe7, 0x01, 0x70, 0x7b, 0x1d, 0x02, 0x06, 0xb0, 0xc8, 0xb4, 0x5a, 0x1c, 0x72, 0x64, 0x1f, 0xf1, 0x28, 0x89, 0x21, 0x9a, 0x82, 0xbd, 0xea, 0x96, 0x5b, 0x5e, 0x79, 0xa9, 0x6b, 0x0d, 0x01, 0x63, 0xed, 0x9d, 0x57, 0x8e, 0xc9, 0xad, 0xa2, 0x0f, 0x2f, 0xbc, 0xf1, 0xea, 0x3c, 0x40, 0x89, 0xd8, 0x34, 0x19, 0xba, 0x81, 0xb0, 0xc6, 0x0f, 0x36, 0x06, 0xda, 0x99 } -, - /* Seed */ - 20, - { 0xad, 0x99, 0x7f, 0xee, 0xf7, 0x30, 0xd6, 0xea, 0x7b, 0xe6, 0x0d, 0x0d, 0xc5, 0x2e, 0x72, 0xea, 0xcb, 0xfd, 0xd2, 0x75 } -, - /* Encryption */ - 129, - { 0x03, 0x01, 0xf9, 0x35, 0xe9, 0xc4, 0x7a, 0xbc, 0xb4, 0x8a, 0xcb, 0xbe, 0x09, 0x89, 0x5d, 0x9f, 0x59, 0x71, 0xaf, 0x14, 0x83, 0x9d, 0xa4, 0xff, 0x95, 0x41, 0x7e, 0xe4, 0x53, 0xd1, 0xfd, 0x77, 0x31, 0x90, 0x72, 0xbb, 0x72, 0x97, 0xe1, 0xb5, 0x5d, 0x75, 0x61, 0xcd, 0x9d, 0x1b, 0xb2, 0x4c, 0x1a, 0x9a, 0x37, 0xc6, 0x19, 0x86, 0x43, 0x08, 0x24, 0x28, 0x04, 0x87, 0x9d, 0x86, 0xeb, 0xd0, 0x01, 0xdc, 0xe5, 0x18, 0x39, 0x75, 0xe1, 0x50, 0x69, 0x89, 0xb7, 0x0e, 0x5a, 0x83, 0x43, 0x41, 0x54, 0xd5, 0xcb, 0xfd, 0x6a, 0x24, 0x78, 0x7e, 0x60, 0xeb, 0x0c, 0x65, 0x8d, 0x2a, 0xc1, 0x93, 0x30, 0x2d, 0x11, 0x92, 0xc6, 0xe6, 0x22, 0xd4, 0xa1, 0x2a, 0xd4, 0xb5, 0x39, 0x23, 0xbc, 0xa2, 0x46, 0xdf, 0x31, 0xc6, 0x39, 0x5e, 0x37, 0x70, 0x2c, 0x6a, 0x78, 0xae, 0x08, 0x1f, 0xb9, 0xd0, 0x65 } - -} -, -{ - "RSAES-OAEP Encryption Example 4.4", - /* Message to be encrypted */ - 22, - { 0xfb, 0x2e, 0xf1, 0x12, 0xf5, 0xe7, 0x66, 0xeb, 0x94, 0x01, 0x92, 0x97, 0x93, 0x47, 0x94, 0xf7, 0xbe, 0x2f, 0x6f, 0xc1, 0xc5, 0x8e } -, - /* Seed */ - 20, - { 0x13, 0x64, 0x54, 0xdf, 0x57, 0x30, 0xf7, 0x3c, 0x80, 0x7a, 0x7e, 0x40, 0xd8, 0xc1, 0xa3, 0x12, 0xac, 0x5b, 0x9d, 0xd3 } -, - /* Encryption */ - 129, - { 0x02, 0xd1, 0x10, 0xad, 0x30, 0xaf, 0xb7, 0x27, 0xbe, 0xb6, 0x91, 0xdd, 0x0c, 0xf1, 0x7d, 0x0a, 0xf1, 0xa1, 0xe7, 0xfa, 0x0c, 0xc0, 0x40, 0xec, 0x1a, 0x4b, 0xa2, 0x6a, 0x42, 0xc5, 0x9d, 0x0a, 0x79, 0x6a, 0x2e, 0x22, 0xc8, 0xf3, 0x57, 0xcc, 0xc9, 0x8b, 0x65, 0x19, 0xac, 0xeb, 0x68, 0x2e, 0x94, 0x5e, 0x62, 0xcb, 0x73, 0x46, 0x14, 0xa5, 0x29, 0x40, 0x7c, 0xd4, 0x52, 0xbe, 0xe3, 0xe4, 0x4f, 0xec, 0xe8, 0x42, 0x3c, 0xc1, 0x9e, 0x55, 0x54, 0x8b, 0x8b, 0x99, 0x4b, 0x84, 0x9c, 0x7e, 0xcd, 0xe4, 0x93, 0x3e, 0x76, 0x03, 0x7e, 0x1d, 0x0c, 0xe4, 0x42, 0x75, 0xb0, 0x87, 0x10, 0xc6, 0x8e, 0x43, 0x01, 0x30, 0xb9, 0x29, 0x73, 0x0e, 0xd7, 0x7e, 0x09, 0xb0, 0x15, 0x64, 0x2c, 0x55, 0x93, 0xf0, 0x4e, 0x4f, 0xfb, 0x94, 0x10, 0x79, 0x81, 0x02, 0xa8, 0xe9, 0x6f, 0xfd, 0xfe, 0x11, 0xe4 } - -} -, -{ - "RSAES-OAEP Encryption Example 4.5", - /* Message to be encrypted */ - 34, - { 0x28, 0xcc, 0xd4, 0x47, 0xbb, 0x9e, 0x85, 0x16, 0x6d, 0xab, 0xb9, 0xe5, 0xb7, 0xd1, 0xad, 0xad, 0xc4, 0xb9, 0xd3, 0x9f, 0x20, 0x4e, 0x96, 0xd5, 0xe4, 0x40, 0xce, 0x9a, 0xd9, 0x28, 0xbc, 0x1c, 0x22, 0x84 } -, - /* Seed */ - 20, - { 0xbc, 0xa8, 0x05, 0x7f, 0x82, 0x4b, 0x2e, 0xa2, 0x57, 0xf2, 0x86, 0x14, 0x07, 0xee, 0xf6, 0x3d, 0x33, 0x20, 0x86, 0x81 } -, - /* Encryption */ - 129, - { 0x00, 0xdb, 0xb8, 0xa7, 0x43, 0x9d, 0x90, 0xef, 0xd9, 0x19, 0xa3, 0x77, 0xc5, 0x4f, 0xae, 0x8f, 0xe1, 0x1e, 0xc5, 0x8c, 0x3b, 0x85, 0x83, 0x62, 0xe2, 0x3a, 0xd1, 0xb8, 0xa4, 0x43, 0x10, 0x79, 0x90, 0x66, 0xb9, 0x93, 0x47, 0xaa, 0x52, 0x56, 0x91, 0xd2, 0xad, 0xc5, 0x8d, 0x9b, 0x06, 0xe3, 0x4f, 0x28, 0x8c, 0x17, 0x03, 0x90, 0xc5, 0xf0, 0xe1, 0x1c, 0x0a, 0xa3, 0x64, 0x59, 0x59, 0xf1, 0x8e, 0xe7, 0x9e, 0x8f, 0x2b, 0xe8, 0xd7, 0xac, 0x5c, 0x23, 0xd0, 0x61, 0xf1, 0x8d, 0xd7, 0x4b, 0x8c, 0x5f, 0x2a, 0x58, 0xfc, 0xb5, 0xeb, 0x0c, 0x54, 0xf9, 0x9f, 0x01, 0xa8, 0x32, 0x47, 0x56, 0x82, 0x92, 0x53, 0x65, 0x83, 0x34, 0x09, 0x48, 0xd7, 0xa8, 0xc9, 0x7c, 0x4a, 0xcd, 0x1e, 0x98, 0xd1, 0xe2, 0x9d, 0xc3, 0x20, 0xe9, 0x7a, 0x26, 0x05, 0x32, 0xa8, 0xaa, 0x7a, 0x75, 0x8a, 0x1e, 0xc2 } - -} -, -{ - "RSAES-OAEP Encryption Example 4.6", - /* Message to be encrypted */ - 7, - { 0xf2, 0x22, 0x42, 0x75, 0x1e, 0xc6, 0xb1 } -, - /* Seed */ - 20, - { 0x2e, 0x7e, 0x1e, 0x17, 0xf6, 0x47, 0xb5, 0xdd, 0xd0, 0x33, 0xe1, 0x54, 0x72, 0xf9, 0x0f, 0x68, 0x12, 0xf3, 0xac, 0x4e } -, - /* Encryption */ - 129, - { 0x00, 0xa5, 0xff, 0xa4, 0x76, 0x8c, 0x8b, 0xbe, 0xca, 0xee, 0x2d, 0xb7, 0x7e, 0x8f, 0x2e, 0xec, 0x99, 0x59, 0x59, 0x33, 0x54, 0x55, 0x20, 0x83, 0x5e, 0x5b, 0xa7, 0xdb, 0x94, 0x93, 0xd3, 0xe1, 0x7c, 0xdd, 0xef, 0xe6, 0xa5, 0xf5, 0x67, 0x62, 0x44, 0x71, 0x90, 0x8d, 0xb4, 0xe2, 0xd8, 0x3a, 0x0f, 0xbe, 0xe6, 0x06, 0x08, 0xfc, 0x84, 0x04, 0x95, 0x03, 0xb2, 0x23, 0x4a, 0x07, 0xdc, 0x83, 0xb2, 0x7b, 0x22, 0x84, 0x7a, 0xd8, 0x92, 0x0f, 0xf4, 0x2f, 0x67, 0x4e, 0xf7, 0x9b, 0x76, 0x28, 0x0b, 0x00, 0x23, 0x3d, 0x2b, 0x51, 0xb8, 0xcb, 0x27, 0x03, 0xa9, 0xd4, 0x2b, 0xfb, 0xc8, 0x25, 0x0c, 0x96, 0xec, 0x32, 0xc0, 0x51, 0xe5, 0x7f, 0x1b, 0x4b, 0xa5, 0x28, 0xdb, 0x89, 0xc3, 0x7e, 0x4c, 0x54, 0xe2, 0x7e, 0x6e, 0x64, 0xac, 0x69, 0x63, 0x5a, 0xe8, 0x87, 0xd9, 0x54, 0x16, 0x19, 0xa9 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 5: A 1028-bit RSA Key Pair", -{ - /* RSA modulus n */ - 129, - { 0x0a, 0xad, 0xf3, 0xf9, 0xc1, 0x25, 0xe5, 0xd8, 0x91, 0xf3, 0x1a, 0xc4, 0x48, 0xe9, 0x93, 0xde, 0xfe, 0x58, 0x0f, 0x80, 0x2b, 0x45, 0xf9, 0xd7, 0xf2, 0x2b, 0xa5, 0x02, 0x1e, 0x9c, 0x47, 0x57, 0x6b, 0x5a, 0x1e, 0x68, 0x03, 0x1b, 0xa9, 0xdb, 0x4e, 0x6d, 0xab, 0xe4, 0xd9, 0x6a, 0x1d, 0x6f, 0x3d, 0x26, 0x72, 0x68, 0xcf, 0xf4, 0x08, 0x00, 0x5f, 0x11, 0x8e, 0xfc, 0xad, 0xb9, 0x98, 0x88, 0xd1, 0xc2, 0x34, 0x46, 0x71, 0x66, 0xb2, 0xa2, 0xb8, 0x49, 0xa0, 0x5a, 0x88, 0x9c, 0x06, 0x0a, 0xc0, 0xda, 0x0c, 0x5f, 0xae, 0x8b, 0x55, 0xf3, 0x09, 0xba, 0x62, 0xe7, 0x03, 0x74, 0x2f, 0xa0, 0x32, 0x6f, 0x2d, 0x10, 0xb0, 0x11, 0x02, 0x14, 0x89, 0xff, 0x49, 0x77, 0x70, 0x19, 0x0d, 0x89, 0x5f, 0xd3, 0x9f, 0x52, 0x29, 0x3c, 0x39, 0xef, 0xd7, 0x3a, 0x69, 0x8b, 0xda, 0xb9, 0xf1, 0x0e, 0xd9 } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 129, - { 0x02, 0x56, 0xeb, 0x4c, 0xba, 0x70, 0x67, 0xf2, 0xd2, 0xbe, 0x54, 0x0d, 0xcd, 0xff, 0x45, 0x82, 0xa3, 0x6b, 0x7d, 0x31, 0xd1, 0xc9, 0x09, 0x9b, 0xb2, 0x14, 0xb7, 0x98, 0x48, 0x46, 0x6a, 0x26, 0x8f, 0x80, 0xf5, 0x8a, 0x49, 0xac, 0x04, 0xc0, 0xe3, 0x64, 0x89, 0x34, 0xa0, 0x20, 0x6c, 0x04, 0x53, 0x7c, 0x19, 0xb2, 0x36, 0x64, 0x3a, 0x60, 0x82, 0x73, 0x21, 0x44, 0xdf, 0x75, 0xfa, 0x21, 0x75, 0x88, 0xf7, 0x94, 0x68, 0x2b, 0xe8, 0x91, 0x68, 0x27, 0x6d, 0xc7, 0x26, 0xc5, 0xc0, 0xcb, 0xdb, 0x84, 0xd3, 0x1b, 0xbf, 0x26, 0xd0, 0xa4, 0x3a, 0xf4, 0x95, 0x71, 0x7f, 0x7d, 0x52, 0x8a, 0xcf, 0xee, 0x34, 0x15, 0x61, 0xf6, 0xff, 0x3c, 0xae, 0x05, 0xc5, 0x78, 0xf8, 0x47, 0x0d, 0x96, 0x82, 0xf9, 0xc0, 0xd0, 0x72, 0xf9, 0xf6, 0x06, 0x8b, 0x56, 0xd5, 0x88, 0x0f, 0x68, 0x2b, 0xe2, 0xc5 } -, - /* Prime p */ - 65, - { 0x03, 0xb0, 0xd3, 0x96, 0x2f, 0x6d, 0x17, 0x54, 0x9c, 0xbf, 0xca, 0x11, 0x29, 0x43, 0x48, 0xdc, 0xf0, 0xe7, 0xe3, 0x9f, 0x8c, 0x2b, 0xc6, 0x82, 0x4f, 0x21, 0x64, 0xb6, 0x06, 0xd6, 0x87, 0x86, 0x0d, 0xae, 0x1e, 0x63, 0x23, 0x93, 0xcf, 0xed, 0xf5, 0x13, 0x22, 0x82, 0x29, 0x06, 0x9e, 0x2f, 0x60, 0xe4, 0xac, 0xd7, 0xe6, 0x33, 0xa4, 0x36, 0x06, 0x3f, 0x82, 0x38, 0x5f, 0x48, 0x99, 0x37, 0x07 } -, - /* Prime q */ - 65, - { 0x02, 0xe4, 0xc3, 0x2e, 0x2f, 0x51, 0x72, 0x69, 0xb7, 0x07, 0x23, 0x09, 0xf0, 0x0c, 0x0e, 0x31, 0x36, 0x5f, 0x7c, 0xe2, 0x8b, 0x23, 0x6b, 0x82, 0x91, 0x2d, 0xf2, 0x39, 0xab, 0xf3, 0x95, 0x72, 0xcf, 0x0e, 0xd6, 0x04, 0xb0, 0x29, 0x82, 0xe5, 0x35, 0x64, 0xc5, 0x2d, 0x6a, 0x05, 0x39, 0x7d, 0xe5, 0xc0, 0x52, 0xa2, 0xfd, 0xdc, 0x14, 0x1e, 0xf7, 0x18, 0x98, 0x36, 0x34, 0x6a, 0xeb, 0x33, 0x1f } -, - /* p's CRT exponent dP */ - 65, - { 0x01, 0xe8, 0x4b, 0x11, 0x9d, 0x25, 0x16, 0x1f, 0xa6, 0x7b, 0x00, 0x25, 0x6a, 0x5b, 0xd9, 0xb6, 0x45, 0xd2, 0xb2, 0x32, 0xec, 0xb0, 0x5b, 0x01, 0x51, 0x80, 0x02, 0x9a, 0x88, 0x62, 0x2a, 0xdc, 0x3f, 0x09, 0xb3, 0xae, 0xac, 0xde, 0x61, 0x61, 0xab, 0x7c, 0xde, 0x22, 0xc2, 0xad, 0x26, 0xe7, 0x79, 0x7d, 0xf5, 0x4e, 0x07, 0x2c, 0xbd, 0x3b, 0x26, 0x73, 0x80, 0x0b, 0x3e, 0x43, 0x38, 0xdb, 0xd5 } -, - /* q's CRT exponent dQ */ - 64, - { 0xeb, 0x90, 0xaa, 0x1a, 0x40, 0x13, 0x5b, 0x4c, 0xea, 0x07, 0x19, 0x7c, 0xed, 0xc8, 0x81, 0x9b, 0xe1, 0xe7, 0xcb, 0xff, 0x25, 0x47, 0x66, 0x21, 0x16, 0xf4, 0x65, 0xa4, 0xa9, 0xf4, 0x87, 0xab, 0x12, 0xf3, 0xba, 0x4f, 0xef, 0x13, 0x82, 0x22, 0x65, 0xa6, 0x52, 0x97, 0xd9, 0x8b, 0x7b, 0xde, 0xd9, 0x37, 0x2e, 0x3f, 0xfe, 0x81, 0xa3, 0x8b, 0x3e, 0x96, 0x00, 0xfe, 0xd0, 0x55, 0x75, 0x4f } -, - /* CRT coefficient qInv */ - 65, - { 0x01, 0x2f, 0x7f, 0x81, 0x38, 0xf9, 0x40, 0x40, 0x62, 0xeb, 0x85, 0xa4, 0x29, 0x24, 0x52, 0x0b, 0x38, 0xf5, 0xbb, 0x88, 0x6a, 0x01, 0x96, 0xf4, 0x8b, 0xb8, 0xdc, 0xea, 0x60, 0xfd, 0x92, 0xcc, 0x02, 0x7f, 0x18, 0xe7, 0x81, 0x58, 0xa3, 0x4a, 0x5c, 0x5d, 0x5f, 0x86, 0x0a, 0x0f, 0x6c, 0x04, 0x07, 0x1a, 0x7d, 0x01, 0x31, 0x2c, 0x06, 0x50, 0x62, 0xf1, 0xeb, 0x48, 0xb7, 0x9d, 0x1c, 0x83, 0xcb } - -} -, -{{ - "RSAES-OAEP Encryption Example 5.1", - /* Message to be encrypted */ - 31, - { 0xaf, 0x71, 0xa9, 0x01, 0xe3, 0xa6, 0x1d, 0x31, 0x32, 0xf0, 0xfc, 0x1f, 0xdb, 0x47, 0x4f, 0x9e, 0xa6, 0x57, 0x92, 0x57, 0xff, 0xc2, 0x4d, 0x16, 0x41, 0x70, 0x14, 0x5b, 0x3d, 0xbd, 0xe8 } -, - /* Seed */ - 20, - { 0x44, 0xc9, 0x2e, 0x28, 0x3f, 0x77, 0xb9, 0x49, 0x9c, 0x60, 0x3d, 0x96, 0x36, 0x60, 0xc8, 0x7d, 0x2f, 0x93, 0x94, 0x61 } -, - /* Encryption */ - 129, - { 0x03, 0x60, 0x46, 0xa4, 0xa4, 0x7d, 0x9e, 0xd3, 0xba, 0x9a, 0x89, 0x13, 0x9c, 0x10, 0x50, 0x38, 0xeb, 0x74, 0x92, 0xb0, 0x5a, 0x5d, 0x68, 0xbf, 0xd5, 0x3a, 0xcc, 0xff, 0x45, 0x97, 0xf7, 0xa6, 0x86, 0x51, 0xb4, 0x7b, 0x4a, 0x46, 0x27, 0xd9, 0x27, 0xe4, 0x85, 0xee, 0xd7, 0xb4, 0x56, 0x64, 0x20, 0xe8, 0xb4, 0x09, 0x87, 0x9e, 0x5d, 0x60, 0x6e, 0xae, 0x25, 0x1d, 0x22, 0xa5, 0xdf, 0x79, 0x9f, 0x79, 0x20, 0xbf, 0xc1, 0x17, 0xb9, 0x92, 0x57, 0x2a, 0x53, 0xb1, 0x26, 0x31, 0x46, 0xbc, 0xea, 0x03, 0x38, 0x5c, 0xc5, 0xe8, 0x53, 0xc9, 0xa1, 0x01, 0xc8, 0xc3, 0xe1, 0xbd, 0xa3, 0x1a, 0x51, 0x98, 0x07, 0x49, 0x6c, 0x6c, 0xb5, 0xe5, 0xef, 0xb4, 0x08, 0x82, 0x3a, 0x35, 0x2b, 0x8f, 0xa0, 0x66, 0x1f, 0xb6, 0x64, 0xef, 0xad, 0xd5, 0x93, 0xde, 0xb9, 0x9f, 0xff, 0x5e, 0xd0, 0x00, 0xe5 } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSAES-OAEP Encryption Example 5.2", - /* Message to be encrypted */ - 44, - { 0xa3, 0xb8, 0x44, 0xa0, 0x82, 0x39, 0xa8, 0xac, 0x41, 0x60, 0x5a, 0xf1, 0x7a, 0x6c, 0xfd, 0xa4, 0xd3, 0x50, 0x13, 0x65, 0x85, 0x90, 0x3a, 0x41, 0x7a, 0x79, 0x26, 0x87, 0x60, 0x51, 0x9a, 0x4b, 0x4a, 0xc3, 0x30, 0x3e, 0xc7, 0x3f, 0x0f, 0x87, 0xcf, 0xb3, 0x23, 0x99 } -, - /* Seed */ - 20, - { 0xcb, 0x28, 0xf5, 0x86, 0x06, 0x59, 0xfc, 0xee, 0xe4, 0x9c, 0x3e, 0xea, 0xfc, 0xe6, 0x25, 0xa7, 0x08, 0x03, 0xbd, 0x32 } -, - /* Encryption */ - 129, - { 0x03, 0xd6, 0xeb, 0x65, 0x4e, 0xdc, 0xe6, 0x15, 0xbc, 0x59, 0xf4, 0x55, 0x26, 0x5e, 0xd4, 0xe5, 0xa1, 0x82, 0x23, 0xcb, 0xb9, 0xbe, 0x4e, 0x40, 0x69, 0xb4, 0x73, 0x80, 0x4d, 0x5d, 0xe9, 0x6f, 0x54, 0xdc, 0xaa, 0xa6, 0x03, 0xd0, 0x49, 0xc5, 0xd9, 0x4a, 0xa1, 0x47, 0x0d, 0xfc, 0xd2, 0x25, 0x40, 0x66, 0xb7, 0xc7, 0xb6, 0x1f, 0xf1, 0xf6, 0xf6, 0x77, 0x0e, 0x32, 0x15, 0xc5, 0x13, 0x99, 0xfd, 0x4e, 0x34, 0xec, 0x50, 0x82, 0xbc, 0x48, 0xf0, 0x89, 0x84, 0x0a, 0xd0, 0x43, 0x54, 0xae, 0x66, 0xdc, 0x0f, 0x1b, 0xd1, 0x8e, 0x46, 0x1a, 0x33, 0xcc, 0x12, 0x58, 0xb4, 0x43, 0xa2, 0x83, 0x7a, 0x6d, 0xf2, 0x67, 0x59, 0xaa, 0x23, 0x02, 0x33, 0x49, 0x86, 0xf8, 0x73, 0x80, 0xc9, 0xcc, 0x9d, 0x53, 0xbe, 0x9f, 0x99, 0x60, 0x5d, 0x2c, 0x9a, 0x97, 0xda, 0x7b, 0x09, 0x15, 0xa4, 0xa7, 0xad } - -} -, -{ - "RSAES-OAEP Encryption Example 5.3", - /* Message to be encrypted */ - 63, - { 0x30, 0x8b, 0x0e, 0xcb, 0xd2, 0xc7, 0x6c, 0xb7, 0x7f, 0xc6, 0xf7, 0x0c, 0x5e, 0xdd, 0x23, 0x3f, 0xd2, 0xf2, 0x09, 0x29, 0xd6, 0x29, 0xf0, 0x26, 0x95, 0x3b, 0xb6, 0x2a, 0x8f, 0x4a, 0x3a, 0x31, 0x4b, 0xde, 0x19, 0x5d, 0xe8, 0x5b, 0x5f, 0x81, 0x6d, 0xa2, 0xaa, 0xb0, 0x74, 0xd2, 0x6c, 0xb6, 0xac, 0xdd, 0xf3, 0x23, 0xae, 0x3b, 0x9c, 0x67, 0x8a, 0xc3, 0xcf, 0x12, 0xfb, 0xdd, 0xe7 } -, - /* Seed */ - 20, - { 0x22, 0x85, 0xf4, 0x0d, 0x77, 0x04, 0x82, 0xf9, 0xa9, 0xef, 0xa2, 0xc7, 0x2c, 0xb3, 0xac, 0x55, 0x71, 0x6d, 0xc0, 0xca } -, - /* Encryption */ - 129, - { 0x07, 0x70, 0x95, 0x21, 0x81, 0x64, 0x9f, 0x9f, 0x9f, 0x07, 0xff, 0x62, 0x6f, 0xf3, 0xa2, 0x2c, 0x35, 0xc4, 0x62, 0x44, 0x3d, 0x90, 0x5d, 0x45, 0x6a, 0x9f, 0xd0, 0xbf, 0xf4, 0x3c, 0xac, 0x2c, 0xa7, 0xa9, 0xf5, 0x54, 0xe9, 0x47, 0x8b, 0x9a, 0xcc, 0x3a, 0xc8, 0x38, 0xb0, 0x20, 0x40, 0xff, 0xd3, 0xe1, 0x84, 0x7d, 0xe2, 0xe4, 0x25, 0x39, 0x29, 0xf9, 0xdd, 0x9e, 0xe4, 0x04, 0x43, 0x25, 0xa9, 0xb0, 0x5c, 0xab, 0xb8, 0x08, 0xb2, 0xee, 0x84, 0x0d, 0x34, 0xe1, 0x5d, 0x10, 0x5a, 0x3f, 0x1f, 0x7b, 0x27, 0x69, 0x5a, 0x1a, 0x07, 0xa2, 0xd7, 0x3f, 0xe0, 0x8e, 0xca, 0xaa, 0x3c, 0x9c, 0x9d, 0x4d, 0x5a, 0x89, 0xff, 0x89, 0x0d, 0x54, 0x72, 0x7d, 0x7a, 0xe4, 0x0c, 0x0e, 0xc1, 0xa8, 0xdd, 0x86, 0x16, 0x5d, 0x8e, 0xe2, 0xc6, 0x36, 0x81, 0x41, 0x01, 0x6a, 0x48, 0xb5, 0x5b, 0x69, 0x67 } - -} -, -{ - "RSAES-OAEP Encryption Example 5.4", - /* Message to be encrypted */ - 6, - { 0x15, 0xc5, 0xb9, 0xee, 0x11, 0x85 } -, - /* Seed */ - 20, - { 0x49, 0xfa, 0x45, 0xd3, 0xa7, 0x8d, 0xd1, 0x0d, 0xfd, 0x57, 0x73, 0x99, 0xd1, 0xeb, 0x00, 0xaf, 0x7e, 0xed, 0x55, 0x13 } -, - /* Encryption */ - 129, - { 0x08, 0x12, 0xb7, 0x67, 0x68, 0xeb, 0xcb, 0x64, 0x2d, 0x04, 0x02, 0x58, 0xe5, 0xf4, 0x44, 0x1a, 0x01, 0x85, 0x21, 0xbd, 0x96, 0x68, 0x7e, 0x6c, 0x5e, 0x89, 0x9f, 0xcd, 0x6c, 0x17, 0x58, 0x8f, 0xf5, 0x9a, 0x82, 0xcc, 0x8a, 0xe0, 0x3a, 0x4b, 0x45, 0xb3, 0x12, 0x99, 0xaf, 0x17, 0x88, 0xc3, 0x29, 0xf7, 0xdc, 0xd2, 0x85, 0xf8, 0xcf, 0x4c, 0xed, 0x82, 0x60, 0x6b, 0x97, 0x61, 0x26, 0x71, 0xa4, 0x5b, 0xed, 0xca, 0x13, 0x34, 0x42, 0x14, 0x4d, 0x16, 0x17, 0xd1, 0x14, 0xf8, 0x02, 0x85, 0x7f, 0x0f, 0x9d, 0x73, 0x97, 0x51, 0xc5, 0x7a, 0x3f, 0x9e, 0xe4, 0x00, 0x91, 0x2c, 0x61, 0xe2, 0xe6, 0x99, 0x2b, 0xe0, 0x31, 0xa4, 0x3d, 0xd4, 0x8f, 0xa6, 0xba, 0x14, 0xee, 0xf7, 0xc4, 0x22, 0xb5, 0xed, 0xc4, 0xe7, 0xaf, 0xa0, 0x4f, 0xdd, 0x38, 0xf4, 0x02, 0xd1, 0xc8, 0xbb, 0x71, 0x9a, 0xbf } - -} -, -{ - "RSAES-OAEP Encryption Example 5.5", - /* Message to be encrypted */ - 45, - { 0x21, 0x02, 0x6e, 0x68, 0x00, 0xc7, 0xfa, 0x72, 0x8f, 0xca, 0xab, 0xa0, 0xd1, 0x96, 0xae, 0x28, 0xd7, 0xa2, 0xac, 0x4f, 0xfd, 0x8a, 0xbc, 0xe7, 0x94, 0xf0, 0x98, 0x5f, 0x60, 0xc8, 0xa6, 0x73, 0x72, 0x77, 0x36, 0x5d, 0x3f, 0xea, 0x11, 0xdb, 0x89, 0x23, 0xa2, 0x02, 0x9a } -, - /* Seed */ - 20, - { 0xf0, 0x28, 0x74, 0x13, 0x23, 0x4c, 0xc5, 0x03, 0x47, 0x24, 0xa0, 0x94, 0xc4, 0x58, 0x6b, 0x87, 0xaf, 0xf1, 0x33, 0xfc } -, - /* Encryption */ - 129, - { 0x07, 0xb6, 0x0e, 0x14, 0xec, 0x95, 0x4b, 0xfd, 0x29, 0xe6, 0x0d, 0x00, 0x47, 0xe7, 0x89, 0xf5, 0x1d, 0x57, 0x18, 0x6c, 0x63, 0x58, 0x99, 0x03, 0x30, 0x67, 0x93, 0xce, 0xd3, 0xf6, 0x82, 0x41, 0xc7, 0x43, 0x52, 0x9a, 0xba, 0x6a, 0x63, 0x74, 0xf9, 0x2e, 0x19, 0xe0, 0x16, 0x3e, 0xfa, 0x33, 0x69, 0x7e, 0x19, 0x6f, 0x76, 0x61, 0xdf, 0xaa, 0xa4, 0x7a, 0xac, 0x6b, 0xde, 0x5e, 0x51, 0xde, 0xb5, 0x07, 0xc7, 0x2c, 0x58, 0x9a, 0x2c, 0xa1, 0x69, 0x3d, 0x96, 0xb1, 0x46, 0x03, 0x81, 0x24, 0x9b, 0x2c, 0xdb, 0x9e, 0xac, 0x44, 0x76, 0x9f, 0x24, 0x89, 0xc5, 0xd3, 0xd2, 0xf9, 0x9f, 0x0e, 0xe3, 0xc7, 0xee, 0x5b, 0xf6, 0x4a, 0x5a, 0xc7, 0x9c, 0x42, 0xbd, 0x43, 0x3f, 0x14, 0x9b, 0xe8, 0xcb, 0x59, 0x54, 0x83, 0x61, 0x64, 0x05, 0x95, 0x51, 0x3c, 0x97, 0xaf, 0x7b, 0xc2, 0x50, 0x97, 0x23 } - -} -, -{ - "RSAES-OAEP Encryption Example 5.6", - /* Message to be encrypted */ - 11, - { 0x54, 0x1e, 0x37, 0xb6, 0x8b, 0x6c, 0x88, 0x72, 0xb8, 0x4c, 0x02 } -, - /* Seed */ - 20, - { 0xd9, 0xfb, 0xa4, 0x5c, 0x96, 0xf2, 0x1e, 0x6e, 0x26, 0xd2, 0x9e, 0xb2, 0xcd, 0xcb, 0x65, 0x85, 0xbe, 0x9c, 0xb3, 0x41 } -, - /* Encryption */ - 129, - { 0x08, 0xc3, 0x6d, 0x4d, 0xda, 0x33, 0x42, 0x3b, 0x2e, 0xd6, 0x83, 0x0d, 0x85, 0xf6, 0x41, 0x1b, 0xa1, 0xdc, 0xf4, 0x70, 0xa1, 0xfa, 0xe0, 0xeb, 0xef, 0xee, 0x7c, 0x08, 0x9f, 0x25, 0x6c, 0xef, 0x74, 0xcb, 0x96, 0xea, 0x69, 0xc3, 0x8f, 0x60, 0xf3, 0x9a, 0xbe, 0xe4, 0x41, 0x29, 0xbc, 0xb4, 0xc9, 0x2d, 0xe7, 0xf7, 0x97, 0x62, 0x3b, 0x20, 0x07, 0x4e, 0x3d, 0x9c, 0x28, 0x99, 0x70, 0x1e, 0xd9, 0x07, 0x1e, 0x1e, 0xfa, 0x0b, 0xdd, 0x84, 0xd4, 0xc3, 0xe5, 0x13, 0x03, 0x02, 0xd8, 0xf0, 0x24, 0x0b, 0xab, 0xa4, 0xb8, 0x4a, 0x71, 0xcc, 0x03, 0x2f, 0x22, 0x35, 0xa5, 0xff, 0x0f, 0xae, 0x27, 0x7c, 0x3e, 0x8f, 0x91, 0x12, 0xbe, 0xf4, 0x4c, 0x9a, 0xe2, 0x0d, 0x17, 0x5f, 0xc9, 0xa4, 0x05, 0x8b, 0xfc, 0x93, 0x0b, 0xa3, 0x1b, 0x02, 0xe2, 0xe4, 0xf4, 0x44, 0x48, 0x37, 0x10, 0xf2, 0x4a } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 6: A 1029-bit RSA Key Pair", -{ - /* RSA modulus n */ - 129, - { 0x12, 0xb1, 0x7f, 0x6d, 0xad, 0x2e, 0xcd, 0x19, 0xff, 0x46, 0xdc, 0x13, 0xf7, 0x86, 0x0f, 0x09, 0xe0, 0xe0, 0xcf, 0xb6, 0x77, 0xb3, 0x8a, 0x52, 0x59, 0x23, 0x05, 0xce, 0xaf, 0x02, 0x2c, 0x16, 0x6d, 0xb9, 0x0d, 0x04, 0xac, 0x29, 0xe3, 0x3f, 0x7d, 0xd1, 0x2d, 0x9f, 0xaf, 0x66, 0xe0, 0x81, 0x6b, 0xb6, 0x3e, 0xad, 0x26, 0x7c, 0xc7, 0xd4, 0x6c, 0x17, 0xc3, 0x7b, 0xe2, 0x14, 0xbc, 0xa2, 0xa2, 0x2d, 0x72, 0x3a, 0x64, 0xe4, 0x44, 0x07, 0x43, 0x6b, 0x6f, 0xc9, 0x65, 0x72, 0x9a, 0xef, 0xc2, 0x55, 0x4f, 0x37, 0x6c, 0xd5, 0xdc, 0xea, 0x68, 0x29, 0x37, 0x80, 0xa6, 0x2b, 0xf3, 0x9d, 0x00, 0x29, 0x48, 0x5a, 0x16, 0x0b, 0xbb, 0x9e, 0x5d, 0xc0, 0x97, 0x2d, 0x21, 0xa5, 0x04, 0xf5, 0x2e, 0x5e, 0xe0, 0x28, 0xaa, 0x41, 0x63, 0x32, 0xf5, 0x10, 0xb2, 0xe9, 0xcf, 0xf5, 0xf7, 0x22, 0xaf } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 129, - { 0x02, 0x95, 0xec, 0xa3, 0x56, 0x06, 0x18, 0x36, 0x95, 0x59, 0xce, 0xcd, 0x30, 0x3a, 0xa9, 0xcf, 0xda, 0xfc, 0x1d, 0x9f, 0x06, 0x95, 0x9d, 0xf7, 0x5f, 0xfe, 0xf9, 0x29, 0xaa, 0x89, 0x69, 0x61, 0xbc, 0xd1, 0x90, 0xdc, 0x69, 0x97, 0xed, 0xa7, 0xf5, 0x96, 0x3e, 0x72, 0x4d, 0x07, 0xb4, 0xdc, 0x11, 0xf3, 0x06, 0x5e, 0x5a, 0xe9, 0x7d, 0x96, 0x83, 0x51, 0x12, 0x28, 0x0b, 0x90, 0x84, 0xbb, 0x14, 0xf2, 0xa2, 0x1e, 0xbd, 0x4e, 0x88, 0x9d, 0x41, 0xb9, 0xc4, 0x13, 0x2e, 0xc1, 0x95, 0x6f, 0xca, 0xb8, 0xbb, 0x2f, 0xed, 0x05, 0x75, 0x88, 0x49, 0x36, 0x52, 0x2c, 0x5f, 0xf7, 0xd3, 0x32, 0x61, 0x90, 0x48, 0x24, 0xe7, 0xca, 0xde, 0xe4, 0xe0, 0xbb, 0x37, 0x2d, 0x24, 0x57, 0xcf, 0x78, 0xe2, 0xbd, 0x12, 0x86, 0x22, 0x8f, 0xf8, 0x3f, 0x10, 0x73, 0x1c, 0xe6, 0x3c, 0x90, 0xcf, 0xf3, 0xf9 } -, - /* Prime p */ - 65, - { 0x04, 0xa6, 0xce, 0x8b, 0x73, 0x58, 0xdf, 0xa6, 0x9b, 0xdc, 0xf7, 0x42, 0x61, 0x70, 0x05, 0xaf, 0xb5, 0x38, 0x5f, 0x5f, 0x3a, 0x58, 0xa2, 0x4e, 0xf7, 0x4a, 0x22, 0xa8, 0xc0, 0x5c, 0xb7, 0xcc, 0x38, 0xeb, 0xd4, 0xcc, 0x9d, 0x9a, 0x9d, 0x78, 0x9a, 0x62, 0xcd, 0x0f, 0x60, 0xf0, 0xcb, 0x94, 0x1d, 0x34, 0x23, 0xc9, 0x69, 0x2e, 0xfa, 0x4f, 0xe3, 0xad, 0xff, 0x29, 0x0c, 0x47, 0x49, 0xa3, 0x8b } -, - /* Prime q */ - 65, - { 0x04, 0x04, 0xc9, 0xa8, 0x03, 0x37, 0x1f, 0xed, 0xb4, 0xc5, 0xbe, 0x39, 0xf3, 0xc0, 0x0b, 0x00, 0x9e, 0x5e, 0x08, 0xa6, 0x3b, 0xe1, 0xe4, 0x00, 0x35, 0xcd, 0xac, 0xa5, 0x01, 0x1c, 0xc7, 0x01, 0xcf, 0x7e, 0xeb, 0xcb, 0x99, 0xf0, 0xff, 0xe1, 0x7c, 0xfd, 0x0a, 0x4b, 0xf7, 0xbe, 0xfd, 0x2d, 0xd5, 0x36, 0xac, 0x94, 0x6d, 0xb7, 0x97, 0xfd, 0xbc, 0x4a, 0xbe, 0x8f, 0x29, 0x34, 0x9b, 0x91, 0xed } -, - /* p's CRT exponent dP */ - 65, - { 0x03, 0x96, 0x1c, 0x8f, 0x76, 0x0a, 0xa2, 0xbd, 0x51, 0x54, 0xc7, 0xaa, 0xfd, 0x77, 0x22, 0x5b, 0x3b, 0xac, 0xd0, 0x13, 0x9a, 0xe7, 0xb5, 0x94, 0x8e, 0xa3, 0x31, 0x1f, 0xcc, 0xd8, 0x6f, 0xb9, 0x5c, 0x75, 0xaf, 0xa7, 0x67, 0x28, 0x4b, 0x9b, 0x2d, 0xe5, 0x59, 0x57, 0x2f, 0x15, 0xd8, 0xd0, 0x44, 0xc7, 0xeb, 0x83, 0xa1, 0xbe, 0x5f, 0xad, 0xf2, 0xcc, 0x37, 0x7c, 0x0d, 0x84, 0x75, 0x29, 0x4b } -, - /* q's CRT exponent dQ */ - 65, - { 0x02, 0x21, 0x97, 0xe0, 0x66, 0x74, 0x21, 0x96, 0xaa, 0xbc, 0x03, 0xfa, 0x2f, 0xee, 0xb4, 0xe7, 0x0b, 0x15, 0xcb, 0x78, 0x7d, 0x61, 0x7a, 0xcd, 0x31, 0xbb, 0x75, 0xc7, 0xbc, 0x23, 0x4a, 0xd7, 0x06, 0xf7, 0xc4, 0x8d, 0x21, 0x82, 0xd1, 0xf0, 0xff, 0x9c, 0x22, 0x8d, 0xcf, 0x41, 0x96, 0x7b, 0x6c, 0x0b, 0xa6, 0xd2, 0xc0, 0xad, 0x11, 0x0a, 0x1b, 0x85, 0x78, 0x31, 0xec, 0x24, 0x5e, 0x2c, 0xb1 } -, - /* CRT coefficient qInv */ - 65, - { 0x04, 0x01, 0xc4, 0xc0, 0xc5, 0x3d, 0x45, 0xdb, 0xdb, 0x5e, 0x9d, 0x96, 0xd0, 0xfe, 0xcf, 0x42, 0x75, 0xdf, 0x09, 0x74, 0xbc, 0x4a, 0x07, 0x36, 0xb4, 0xa7, 0x4c, 0x32, 0x69, 0x05, 0x3e, 0xfb, 0x68, 0x6a, 0xce, 0x24, 0x06, 0xe2, 0x2c, 0x9e, 0x05, 0x8d, 0xdb, 0x4a, 0xe5, 0x40, 0x62, 0x7a, 0xe2, 0xfd, 0xb0, 0x82, 0x61, 0xe8, 0xe7, 0xe4, 0xbc, 0xbc, 0x99, 0x4d, 0xaa, 0xfa, 0x30, 0x5c, 0x45 } - -} -, -{{ - "RSAES-OAEP Encryption Example 6.1", - /* Message to be encrypted */ - 22, - { 0x40, 0x46, 0xca, 0x8b, 0xaa, 0x33, 0x47, 0xca, 0x27, 0xf4, 0x9e, 0x0d, 0x81, 0xf9, 0xcc, 0x1d, 0x71, 0xbe, 0x9b, 0xa5, 0x17, 0xd4 } -, - /* Seed */ - 20, - { 0xdd, 0x0f, 0x6c, 0xfe, 0x41, 0x5e, 0x88, 0xe5, 0xa4, 0x69, 0xa5, 0x1f, 0xbb, 0xa6, 0xdf, 0xd4, 0x0a, 0xdb, 0x43, 0x84 } -, - /* Encryption */ - 129, - { 0x06, 0x30, 0xee, 0xbc, 0xd2, 0x85, 0x6c, 0x24, 0xf7, 0x98, 0x80, 0x6e, 0x41, 0xf9, 0xe6, 0x73, 0x45, 0xed, 0xa9, 0xce, 0xda, 0x38, 0x6a, 0xcc, 0x9f, 0xac, 0xae, 0xa1, 0xee, 0xed, 0x06, 0xac, 0xe5, 0x83, 0x70, 0x97, 0x18, 0xd9, 0xd1, 0x69, 0xfa, 0xdf, 0x41, 0x4d, 0x5c, 0x76, 0xf9, 0x29, 0x96, 0x83, 0x3e, 0xf3, 0x05, 0xb7, 0x5b, 0x1e, 0x4b, 0x95, 0xf6, 0x62, 0xa2, 0x0f, 0xae, 0xdc, 0x3b, 0xae, 0x0c, 0x48, 0x27, 0xa8, 0xbf, 0x8a, 0x88, 0xed, 0xbd, 0x57, 0xec, 0x20, 0x3a, 0x27, 0xa8, 0x41, 0xf0, 0x2e, 0x43, 0xa6, 0x15, 0xba, 0xb1, 0xa8, 0xca, 0xc0, 0x70, 0x1d, 0xe3, 0x4d, 0xeb, 0xde, 0xf6, 0x2a, 0x08, 0x80, 0x89, 0xb5, 0x5e, 0xc3, 0x6e, 0xa7, 0x52, 0x2f, 0xd3, 0xec, 0x8d, 0x06, 0xb6, 0xa0, 0x73, 0xe6, 0xdf, 0x83, 0x31, 0x53, 0xbc, 0x0a, 0xef, 0xd9, 0x3b, 0xd1, 0xa3 } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSAES-OAEP Encryption Example 6.2", - /* Message to be encrypted */ - 50, - { 0x5c, 0xc7, 0x2c, 0x60, 0x23, 0x1d, 0xf0, 0x3b, 0x3d, 0x40, 0xf9, 0xb5, 0x79, 0x31, 0xbc, 0x31, 0x10, 0x9f, 0x97, 0x25, 0x27, 0xf2, 0x8b, 0x19, 0xe7, 0x48, 0x0c, 0x72, 0x88, 0xcb, 0x3c, 0x92, 0xb2, 0x25, 0x12, 0x21, 0x4e, 0x4b, 0xe6, 0xc9, 0x14, 0x79, 0x2d, 0xda, 0xbd, 0xf5, 0x7f, 0xaa, 0x8a, 0xa7 } -, - /* Seed */ - 20, - { 0x8d, 0x14, 0xbd, 0x94, 0x6a, 0x13, 0x51, 0x14, 0x8f, 0x5c, 0xae, 0x2e, 0xd9, 0xa0, 0xc6, 0x53, 0xe8, 0x5e, 0xbd, 0x85 } -, - /* Encryption */ - 129, - { 0x0e, 0xbc, 0x37, 0x37, 0x61, 0x73, 0xa4, 0xfd, 0x2f, 0x89, 0xcc, 0x55, 0xc2, 0xca, 0x62, 0xb2, 0x6b, 0x11, 0xd5, 0x1c, 0x3c, 0x7c, 0xe4, 0x9e, 0x88, 0x45, 0xf7, 0x4e, 0x76, 0x07, 0x31, 0x7c, 0x43, 0x6b, 0xc8, 0xd2, 0x3b, 0x96, 0x67, 0xdf, 0xeb, 0x9d, 0x08, 0x72, 0x34, 0xb4, 0x7b, 0xc6, 0x83, 0x71, 0x75, 0xae, 0x5c, 0x05, 0x59, 0xf6, 0xb8, 0x1d, 0x7d, 0x22, 0x41, 0x6d, 0x3e, 0x50, 0xf4, 0xac, 0x53, 0x3d, 0x8f, 0x08, 0x12, 0xf2, 0xdb, 0x9e, 0x79, 0x1f, 0xe9, 0xc7, 0x75, 0xac, 0x8b, 0x6a, 0xd0, 0xf5, 0x35, 0xad, 0x9c, 0xeb, 0x23, 0xa4, 0xa0, 0x20, 0x14, 0xc5, 0x8a, 0xb3, 0xf8, 0xd3, 0x16, 0x14, 0x99, 0xa2, 0x60, 0xf3, 0x93, 0x48, 0xe7, 0x14, 0xae, 0x2a, 0x1d, 0x34, 0x43, 0x20, 0x8f, 0xd8, 0xb7, 0x22, 0xcc, 0xfd, 0xfb, 0x39, 0x3e, 0x98, 0x01, 0x1f, 0x99, 0xe6, 0x3f } - -} -, -{ - "RSAES-OAEP Encryption Example 6.3", - /* Message to be encrypted */ - 54, - { 0xb2, 0x0e, 0x65, 0x13, 0x03, 0x09, 0x2f, 0x4b, 0xcc, 0xb4, 0x30, 0x70, 0xc0, 0xf8, 0x6d, 0x23, 0x04, 0x93, 0x62, 0xed, 0x96, 0x64, 0x2f, 0xc5, 0x63, 0x2c, 0x27, 0xdb, 0x4a, 0x52, 0xe3, 0xd8, 0x31, 0xf2, 0xab, 0x06, 0x8b, 0x23, 0xb1, 0x49, 0x87, 0x9c, 0x00, 0x2f, 0x6b, 0xf3, 0xfe, 0xee, 0x97, 0x59, 0x11, 0x12, 0x56, 0x2c } -, - /* Seed */ - 20, - { 0x6c, 0x07, 0x5b, 0xc4, 0x55, 0x20, 0xf1, 0x65, 0xc0, 0xbf, 0x5e, 0xa4, 0xc5, 0xdf, 0x19, 0x1b, 0xc9, 0xef, 0x0e, 0x44 } -, - /* Encryption */ - 129, - { 0x0a, 0x98, 0xbf, 0x10, 0x93, 0x61, 0x93, 0x94, 0x43, 0x6c, 0xf6, 0x8d, 0x8f, 0x38, 0xe2, 0xf1, 0x58, 0xfd, 0xe8, 0xea, 0x54, 0xf3, 0x43, 0x5f, 0x23, 0x9b, 0x8d, 0x06, 0xb8, 0x32, 0x18, 0x44, 0x20, 0x24, 0x76, 0xae, 0xed, 0x96, 0x00, 0x94, 0x92, 0x48, 0x0c, 0xe3, 0xa8, 0xd7, 0x05, 0x49, 0x8c, 0x4c, 0x8c, 0x68, 0xf0, 0x15, 0x01, 0xdc, 0x81, 0xdb, 0x60, 0x8f, 0x60, 0x08, 0x73, 0x50, 0xc8, 0xc3, 0xb0, 0xbd, 0x2e, 0x9e, 0xf6, 0xa8, 0x14, 0x58, 0xb7, 0xc8, 0x01, 0xb8, 0x9f, 0x2e, 0x4f, 0xe9, 0x9d, 0x49, 0x00, 0xba, 0x6a, 0x4b, 0x5e, 0x5a, 0x96, 0xd8, 0x65, 0xdc, 0x67, 0x6c, 0x77, 0x55, 0x92, 0x87, 0x94, 0x13, 0x0d, 0x62, 0x80, 0xa8, 0x16, 0x0a, 0x19, 0x0f, 0x2d, 0xf3, 0xea, 0x7c, 0xf9, 0xaa, 0x02, 0x71, 0xd8, 0x8e, 0x9e, 0x69, 0x05, 0xec, 0xf1, 0xc5, 0x15, 0x2d, 0x65 } - -} -, -{ - "RSAES-OAEP Encryption Example 6.4", - /* Message to be encrypted */ - 8, - { 0x68, 0x4e, 0x30, 0x38, 0xc5, 0xc0, 0x41, 0xf7 } -, - /* Seed */ - 20, - { 0x3b, 0xbc, 0x3b, 0xd6, 0x63, 0x7d, 0xfe, 0x12, 0x84, 0x69, 0x01, 0x02, 0x9b, 0xf5, 0xb0, 0xc0, 0x71, 0x03, 0x43, 0x9c } -, - /* Encryption */ - 129, - { 0x00, 0x8e, 0x7a, 0x67, 0xca, 0xcf, 0xb5, 0xc4, 0xe2, 0x4b, 0xec, 0x7d, 0xee, 0x14, 0x91, 0x17, 0xf1, 0x95, 0x98, 0xce, 0x8c, 0x45, 0x80, 0x8f, 0xef, 0x88, 0xc6, 0x08, 0xff, 0x9c, 0xd6, 0xe6, 0x95, 0x26, 0x3b, 0x9a, 0x3c, 0x0a, 0xd4, 0xb8, 0xba, 0x4c, 0x95, 0x23, 0x8e, 0x96, 0xa8, 0x42, 0x2b, 0x85, 0x35, 0x62, 0x9c, 0x8d, 0x53, 0x82, 0x37, 0x44, 0x79, 0xad, 0x13, 0xfa, 0x39, 0x97, 0x4b, 0x24, 0x2f, 0x9a, 0x75, 0x9e, 0xea, 0xf9, 0xc8, 0x3a, 0xd5, 0xa8, 0xca, 0x18, 0x94, 0x0a, 0x01, 0x62, 0xba, 0x75, 0x58, 0x76, 0xdf, 0x26, 0x3f, 0x4b, 0xd5, 0x0c, 0x65, 0x25, 0xc5, 0x60, 0x90, 0x26, 0x7c, 0x1f, 0x0e, 0x09, 0xce, 0x08, 0x99, 0xa0, 0xcf, 0x35, 0x9e, 0x88, 0x12, 0x0a, 0xbd, 0x9b, 0xf8, 0x93, 0x44, 0x5b, 0x3c, 0xae, 0x77, 0xd3, 0x60, 0x73, 0x59, 0xae, 0x9a, 0x52, 0xf8 } - -} -, -{ - "RSAES-OAEP Encryption Example 6.5", - /* Message to be encrypted */ - 25, - { 0x32, 0x48, 0x8c, 0xb2, 0x62, 0xd0, 0x41, 0xd6, 0xe4, 0xdd, 0x35, 0xf9, 0x87, 0xbf, 0x3c, 0xa6, 0x96, 0xdb, 0x1f, 0x06, 0xac, 0x29, 0xa4, 0x46, 0x93 } -, - /* Seed */ - 20, - { 0xb4, 0x6b, 0x41, 0x89, 0x3e, 0x8b, 0xef, 0x32, 0x6f, 0x67, 0x59, 0x38, 0x3a, 0x83, 0x07, 0x1d, 0xae, 0x7f, 0xca, 0xbc } -, - /* Encryption */ - 129, - { 0x00, 0x00, 0x34, 0x74, 0x41, 0x6c, 0x7b, 0x68, 0xbd, 0xf9, 0x61, 0xc3, 0x85, 0x73, 0x79, 0x44, 0xd7, 0xf1, 0xf4, 0x0c, 0xb3, 0x95, 0x34, 0x3c, 0x69, 0x3c, 0xc0, 0xb4, 0xfe, 0x63, 0xb3, 0x1f, 0xed, 0xf1, 0xea, 0xee, 0xac, 0x9c, 0xcc, 0x06, 0x78, 0xb3, 0x1d, 0xc3, 0x2e, 0x09, 0x77, 0x48, 0x95, 0x14, 0xc4, 0xf0, 0x90, 0x85, 0xf6, 0x29, 0x8a, 0x96, 0x53, 0xf0, 0x1a, 0xea, 0x40, 0x45, 0xff, 0x58, 0x2e, 0xe8, 0x87, 0xbe, 0x26, 0xae, 0x57, 0x5b, 0x73, 0xee, 0xf7, 0xf3, 0x77, 0x49, 0x21, 0xe3, 0x75, 0xa3, 0xd1, 0x9a, 0xdd, 0xa0, 0xca, 0x31, 0xaa, 0x18, 0x49, 0x88, 0x7c, 0x1f, 0x42, 0xca, 0xc9, 0x67, 0x7f, 0x7a, 0x2f, 0x4e, 0x92, 0x3f, 0x6e, 0x5a, 0x86, 0x8b, 0x38, 0xc0, 0x84, 0xef, 0x18, 0x75, 0x94, 0xdc, 0x9f, 0x7f, 0x04, 0x8f, 0xea, 0x2e, 0x02, 0x95, 0x53, 0x84, 0xab } - -} -, -{ - "RSAES-OAEP Encryption Example 6.6", - /* Message to be encrypted */ - 12, - { 0x50, 0xba, 0x14, 0xbe, 0x84, 0x62, 0x72, 0x02, 0x79, 0xc3, 0x06, 0xba } -, - /* Seed */ - 20, - { 0x0a, 0x24, 0x03, 0x31, 0x2a, 0x41, 0xe3, 0xd5, 0x2f, 0x06, 0x0f, 0xbc, 0x13, 0xa6, 0x7d, 0xe5, 0xcf, 0x76, 0x09, 0xa7 } -, - /* Encryption */ - 129, - { 0x0a, 0x02, 0x6d, 0xda, 0x5f, 0xc8, 0x78, 0x5f, 0x7b, 0xd9, 0xbf, 0x75, 0x32, 0x7b, 0x63, 0xe8, 0x5e, 0x2c, 0x0f, 0xde, 0xe5, 0xda, 0xdb, 0x65, 0xeb, 0xdc, 0xac, 0x9a, 0xe1, 0xde, 0x95, 0xc9, 0x2c, 0x67, 0x2a, 0xb4, 0x33, 0xaa, 0x7a, 0x8e, 0x69, 0xce, 0x6a, 0x6d, 0x88, 0x97, 0xfa, 0xc4, 0xac, 0x4a, 0x54, 0xde, 0x84, 0x1a, 0xe5, 0xe5, 0xbb, 0xce, 0x76, 0x87, 0x87, 0x9d, 0x79, 0x63, 0x4c, 0xea, 0x7a, 0x30, 0x68, 0x40, 0x65, 0xc7, 0x14, 0xd5, 0x24, 0x09, 0xb9, 0x28, 0x25, 0x6b, 0xbf, 0x53, 0xea, 0xbc, 0xd5, 0x23, 0x1e, 0xb7, 0x25, 0x95, 0x04, 0x53, 0x73, 0x99, 0xbd, 0x29, 0x16, 0x4b, 0x72, 0x6d, 0x33, 0xa4, 0x6d, 0xa7, 0x01, 0x36, 0x0a, 0x41, 0x68, 0xa0, 0x91, 0xcc, 0xab, 0x72, 0xd4, 0x4a, 0x62, 0xfe, 0xd2, 0x46, 0xc0, 0xff, 0xea, 0x5b, 0x13, 0x48, 0xab, 0x54, 0x70 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 7: A 1030-bit RSA Key Pair", -{ - /* RSA modulus n */ - 129, - { 0x31, 0x11, 0x79, 0xf0, 0xbc, 0xfc, 0x9b, 0x9d, 0x3c, 0xa3, 0x15, 0xd0, 0x0e, 0xf3, 0x0d, 0x7b, 0xdd, 0x3a, 0x2c, 0xfa, 0xe9, 0x91, 0x1b, 0xfe, 0xdc, 0xb9, 0x48, 0xb3, 0xa4, 0x78, 0x2d, 0x07, 0x32, 0xb6, 0xab, 0x44, 0xaa, 0x4b, 0xf0, 0x37, 0x41, 0xa6, 0x44, 0xdc, 0x01, 0xbe, 0xc3, 0xe6, 0x9b, 0x01, 0xa0, 0x33, 0xe6, 0x75, 0xd8, 0xac, 0xd7, 0xc4, 0x92, 0x5c, 0x6b, 0x1a, 0xec, 0x31, 0x19, 0x05, 0x1d, 0xfd, 0x89, 0x76, 0x2d, 0x21, 0x5d, 0x45, 0x47, 0x5f, 0xfc, 0xb5, 0x9f, 0x90, 0x81, 0x48, 0x62, 0x3f, 0x37, 0x17, 0x71, 0x56, 0xf6, 0xae, 0x86, 0xdd, 0x7a, 0x7c, 0x5f, 0x43, 0xdc, 0x1e, 0x1f, 0x90, 0x82, 0x54, 0x05, 0x8a, 0x28, 0x4a, 0x5f, 0x06, 0xc0, 0x02, 0x17, 0x93, 0xa8, 0x7f, 0x1a, 0xc5, 0xfe, 0xff, 0x7d, 0xca, 0xee, 0x69, 0xc5, 0xe5, 0x1a, 0x37, 0x89, 0xe3, 0x73 } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 129, - { 0x07, 0x0c, 0xfc, 0xff, 0x2f, 0xeb, 0x82, 0x76, 0xe2, 0x74, 0x32, 0xc4, 0x5d, 0xfe, 0xe4, 0x8f, 0x49, 0xb7, 0x91, 0x7d, 0x65, 0x30, 0xe1, 0xf0, 0xca, 0x34, 0x60, 0xf3, 0x2e, 0x02, 0x76, 0x17, 0x44, 0x87, 0xc5, 0x6e, 0x22, 0xa4, 0x5d, 0x25, 0x00, 0xd7, 0x77, 0x54, 0x95, 0x21, 0x9d, 0x7d, 0x16, 0x5a, 0x9c, 0xf3, 0xbd, 0x92, 0xc3, 0x2a, 0xf9, 0xa9, 0x8d, 0x8d, 0xc9, 0xcc, 0x29, 0x68, 0x00, 0xad, 0xc9, 0x4a, 0x0a, 0x54, 0xfb, 0x40, 0xf3, 0x42, 0x91, 0xbf, 0x84, 0xee, 0x8e, 0xa1, 0x2b, 0x6f, 0x10, 0x93, 0x59, 0xc6, 0xd3, 0x54, 0x2a, 0x50, 0xf9, 0xc7, 0x67, 0xf5, 0xcf, 0xff, 0x05, 0xa6, 0x81, 0xc2, 0xe6, 0x56, 0xfb, 0x77, 0xca, 0xaa, 0xdb, 0x4b, 0xe9, 0x46, 0x8d, 0x8a, 0xbc, 0xd4, 0xdf, 0x98, 0xf5, 0x8e, 0x86, 0xd2, 0x05, 0x3f, 0xa1, 0x34, 0x9f, 0x74, 0x8e, 0x21, 0xb1 } -, - /* Prime p */ - 65, - { 0x07, 0x49, 0x26, 0x2c, 0x11, 0x1c, 0xd4, 0x70, 0xec, 0x25, 0x66, 0xe6, 0xb3, 0x73, 0x2f, 0xc0, 0x93, 0x29, 0x46, 0x9a, 0xa1, 0x90, 0x71, 0xd3, 0xb9, 0xc0, 0x19, 0x06, 0x51, 0x4c, 0x6f, 0x1d, 0x26, 0xba, 0xa1, 0x4b, 0xea, 0xb0, 0x97, 0x1c, 0x8b, 0x7e, 0x61, 0x1a, 0x4f, 0x79, 0x00, 0x9d, 0x6f, 0xea, 0x77, 0x69, 0x28, 0xca, 0x25, 0x28, 0x5b, 0x0d, 0xe3, 0x64, 0x3d, 0x1a, 0x3f, 0x8c, 0x71 } -, - /* Prime q */ - 65, - { 0x06, 0xbc, 0x1e, 0x50, 0xe9, 0x6c, 0x02, 0xbf, 0x63, 0x6e, 0x9e, 0xea, 0x8b, 0x89, 0x9b, 0xbe, 0xbf, 0x76, 0x51, 0xde, 0x77, 0xdd, 0x47, 0x4c, 0x3e, 0x9b, 0xc2, 0x3b, 0xad, 0x81, 0x82, 0xb6, 0x19, 0x04, 0xc7, 0xd9, 0x7d, 0xfb, 0xeb, 0xfb, 0x1e, 0x00, 0x10, 0x88, 0x78, 0xb6, 0xe6, 0x7e, 0x41, 0x53, 0x91, 0xd6, 0x79, 0x42, 0xc2, 0xb2, 0xbf, 0x9b, 0x44, 0x35, 0xf8, 0x8b, 0x0c, 0xb0, 0x23 } -, - /* p's CRT exponent dP */ - 65, - { 0x03, 0xbc, 0x7e, 0xa7, 0xf0, 0xaa, 0xb1, 0x43, 0xab, 0xc6, 0xce, 0x8b, 0x97, 0x11, 0x86, 0x36, 0xa3, 0x01, 0x72, 0xe4, 0xcf, 0xe0, 0x2c, 0x8f, 0xa0, 0xdd, 0xa3, 0xb7, 0xba, 0xaf, 0x90, 0xf8, 0x09, 0x29, 0x82, 0x98, 0x55, 0x25, 0xf4, 0x88, 0xbd, 0xfc, 0xb4, 0xbd, 0x72, 0x6e, 0x22, 0x63, 0x9a, 0xc6, 0x4a, 0x30, 0x92, 0xab, 0x7f, 0xfc, 0xbf, 0x1d, 0x53, 0x34, 0xcf, 0xa5, 0x0b, 0x5b, 0xf1 } -, - /* q's CRT exponent dQ */ - 65, - { 0x02, 0x62, 0xa6, 0xaa, 0x29, 0xc2, 0xa3, 0xc6, 0x7d, 0xc5, 0x34, 0x6c, 0x06, 0x38, 0x1a, 0xfd, 0x98, 0x7a, 0xa3, 0xcc, 0x93, 0xcf, 0xbf, 0xec, 0xf5, 0x4f, 0xdd, 0x9f, 0x9d, 0x78, 0x7d, 0x7f, 0x59, 0xa5, 0x23, 0xd3, 0x98, 0x97, 0x9d, 0xa1, 0x37, 0xa2, 0xf6, 0x38, 0x1f, 0xe9, 0x48, 0x01, 0xf7, 0xc9, 0x4d, 0xa2, 0x15, 0x18, 0xdc, 0x34, 0xcb, 0x40, 0x87, 0x0c, 0x46, 0x97, 0x99, 0x4a, 0xd9 } -, - /* CRT coefficient qInv */ - 64, - { 0x64, 0x9d, 0x4c, 0x17, 0xb6, 0xee, 0x17, 0x21, 0xe7, 0x72, 0xd0, 0x38, 0x9a, 0x55, 0x9c, 0x3d, 0x3c, 0xdf, 0x95, 0x50, 0xd4, 0x57, 0xc4, 0x6b, 0x03, 0x7b, 0x74, 0x64, 0x1b, 0x1d, 0x52, 0x16, 0x6a, 0xf8, 0xa2, 0x13, 0xc8, 0x39, 0x62, 0x06, 0xcd, 0xfb, 0xa4, 0x42, 0x2f, 0x18, 0xd6, 0xf6, 0x1d, 0xbc, 0xb5, 0xd2, 0x14, 0xc9, 0x71, 0xbf, 0x48, 0x2a, 0xeb, 0x97, 0x6a, 0x73, 0x70, 0xc2 } - -} -, -{{ - "RSAES-OAEP Encryption Example 7.1", - /* Message to be encrypted */ - 4, - { 0x47, 0xaa, 0xe9, 0x09 } -, - /* Seed */ - 20, - { 0x43, 0xdd, 0x09, 0xa0, 0x7f, 0xf4, 0xca, 0xc7, 0x1c, 0xaa, 0x46, 0x32, 0xee, 0x5e, 0x1c, 0x1d, 0xae, 0xe4, 0xcd, 0x8f } -, - /* Encryption */ - 129, - { 0x16, 0x88, 0xe4, 0xce, 0x77, 0x94, 0xbb, 0xa6, 0xcb, 0x70, 0x14, 0x16, 0x9e, 0xcd, 0x55, 0x9c, 0xed, 0xe2, 0xa3, 0x0b, 0x56, 0xa5, 0x2b, 0x68, 0xd9, 0xfe, 0x18, 0xcf, 0x19, 0x73, 0xef, 0x97, 0xb2, 0xa0, 0x31, 0x53, 0x95, 0x1c, 0x75, 0x5f, 0x62, 0x94, 0xaa, 0x49, 0xad, 0xbd, 0xb5, 0x58, 0x45, 0xab, 0x68, 0x75, 0xfb, 0x39, 0x86, 0xc9, 0x3e, 0xcf, 0x92, 0x79, 0x62, 0x84, 0x0d, 0x28, 0x2f, 0x9e, 0x54, 0xce, 0x8b, 0x69, 0x0f, 0x7c, 0x0c, 0xb8, 0xbb, 0xd7, 0x34, 0x40, 0xd9, 0x57, 0x1d, 0x1b, 0x16, 0xcd, 0x92, 0x60, 0xf9, 0xea, 0xb4, 0x78, 0x3c, 0xc4, 0x82, 0xe5, 0x22, 0x3d, 0xc6, 0x09, 0x73, 0x87, 0x17, 0x83, 0xec, 0x27, 0xb0, 0xae, 0x0f, 0xd4, 0x77, 0x32, 0xcb, 0xc2, 0x86, 0xa1, 0x73, 0xfc, 0x92, 0xb0, 0x0f, 0xb4, 0xba, 0x68, 0x24, 0x64, 0x7c, 0xd9, 0x3c, 0x85, 0xc1 } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSAES-OAEP Encryption Example 7.2", - /* Message to be encrypted */ - 31, - { 0x1d, 0x9b, 0x2e, 0x22, 0x23, 0xd9, 0xbc, 0x13, 0xbf, 0xb9, 0xf1, 0x62, 0xce, 0x73, 0x5d, 0xb4, 0x8b, 0xa7, 0xc6, 0x8f, 0x68, 0x22, 0xa0, 0xa1, 0xa7, 0xb6, 0xae, 0x16, 0x58, 0x34, 0xe7 } -, - /* Seed */ - 20, - { 0x3a, 0x9c, 0x3c, 0xec, 0x7b, 0x84, 0xf9, 0xbd, 0x3a, 0xde, 0xcb, 0xc6, 0x73, 0xec, 0x99, 0xd5, 0x4b, 0x22, 0xbc, 0x9b } -, - /* Encryption */ - 129, - { 0x10, 0x52, 0xed, 0x39, 0x7b, 0x2e, 0x01, 0xe1, 0xd0, 0xee, 0x1c, 0x50, 0xbf, 0x24, 0x36, 0x3f, 0x95, 0xe5, 0x04, 0xf4, 0xa0, 0x34, 0x34, 0xa0, 0x8f, 0xd8, 0x22, 0x57, 0x4e, 0xd6, 0xb9, 0x73, 0x6e, 0xdb, 0xb5, 0xf3, 0x90, 0xdb, 0x10, 0x32, 0x14, 0x79, 0xa8, 0xa1, 0x39, 0x35, 0x0e, 0x2b, 0xd4, 0x97, 0x7c, 0x37, 0x78, 0xef, 0x33, 0x1f, 0x3e, 0x78, 0xae, 0x11, 0x8b, 0x26, 0x84, 0x51, 0xf2, 0x0a, 0x2f, 0x01, 0xd4, 0x71, 0xf5, 0xd5, 0x3c, 0x56, 0x69, 0x37, 0x17, 0x1b, 0x2d, 0xbc, 0x2d, 0x4b, 0xde, 0x45, 0x9a, 0x57, 0x99, 0xf0, 0x37, 0x2d, 0x65, 0x74, 0x23, 0x9b, 0x23, 0x23, 0xd2, 0x45, 0xd0, 0xbb, 0x81, 0xc2, 0x86, 0xb6, 0x3c, 0x89, 0xa3, 0x61, 0x01, 0x73, 0x37, 0xe4, 0x90, 0x2f, 0x88, 0xa4, 0x67, 0xf4, 0xc7, 0xf2, 0x44, 0xbf, 0xd5, 0xab, 0x46, 0x43, 0x7f, 0xf3, 0xb6 } - -} -, -{ - "RSAES-OAEP Encryption Example 7.3", - /* Message to be encrypted */ - 3, - { 0xd9, 0x76, 0xfc } -, - /* Seed */ - 20, - { 0x76, 0xa7, 0x5e, 0x5b, 0x61, 0x57, 0xa5, 0x56, 0xcf, 0x88, 0x84, 0xbb, 0x2e, 0x45, 0xc2, 0x93, 0xdd, 0x54, 0x5c, 0xf5 } -, - /* Encryption */ - 129, - { 0x21, 0x55, 0xcd, 0x84, 0x3f, 0xf2, 0x4a, 0x4e, 0xe8, 0xba, 0xdb, 0x76, 0x94, 0x26, 0x00, 0x28, 0xa4, 0x90, 0x81, 0x3b, 0xa8, 0xb3, 0x69, 0xa4, 0xcb, 0xf1, 0x06, 0xec, 0x14, 0x8e, 0x52, 0x98, 0x70, 0x7f, 0x59, 0x65, 0xbe, 0x7d, 0x10, 0x1c, 0x10, 0x49, 0xea, 0x85, 0x84, 0xc2, 0x4c, 0xd6, 0x34, 0x55, 0xad, 0x9c, 0x10, 0x4d, 0x68, 0x62, 0x82, 0xd3, 0xfb, 0x80, 0x3a, 0x4c, 0x11, 0xc1, 0xc2, 0xe9, 0xb9, 0x1c, 0x71, 0x78, 0x80, 0x1d, 0x1b, 0x66, 0x40, 0xf0, 0x03, 0xf5, 0x72, 0x8d, 0xf0, 0x07, 0xb8, 0xa4, 0xcc, 0xc9, 0x2b, 0xce, 0x05, 0xe4, 0x1a, 0x27, 0x27, 0x8d, 0x7c, 0x85, 0x01, 0x8c, 0x52, 0x41, 0x43, 0x13, 0xa5, 0x07, 0x77, 0x89, 0x00, 0x1d, 0x4f, 0x01, 0x91, 0x0b, 0x72, 0xaa, 0xd0, 0x5d, 0x22, 0x0a, 0xa1, 0x4a, 0x58, 0x73, 0x3a, 0x74, 0x89, 0xbc, 0x54, 0x55, 0x6b } - -} -, -{ - "RSAES-OAEP Encryption Example 7.4", - /* Message to be encrypted */ - 62, - { 0xd4, 0x73, 0x86, 0x23, 0xdf, 0x22, 0x3a, 0xa4, 0x38, 0x43, 0xdf, 0x84, 0x67, 0x53, 0x4c, 0x41, 0xd0, 0x13, 0xe0, 0xc8, 0x03, 0xc6, 0x24, 0xe2, 0x63, 0x66, 0x6b, 0x23, 0x9b, 0xde, 0x40, 0xa5, 0xf2, 0x9a, 0xeb, 0x8d, 0xe7, 0x9e, 0x3d, 0xaa, 0x61, 0xdd, 0x03, 0x70, 0xf4, 0x9b, 0xd4, 0xb0, 0x13, 0x83, 0x4b, 0x98, 0x21, 0x2a, 0xef, 0x6b, 0x1c, 0x5e, 0xe3, 0x73, 0xb3, 0xcb } -, - /* Seed */ - 20, - { 0x78, 0x66, 0x31, 0x4a, 0x6a, 0xd6, 0xf2, 0xb2, 0x50, 0xa3, 0x59, 0x41, 0xdb, 0x28, 0xf5, 0x86, 0x4b, 0x58, 0x58, 0x59 } -, - /* Encryption */ - 129, - { 0x0a, 0xb1, 0x4c, 0x37, 0x3a, 0xeb, 0x7d, 0x43, 0x28, 0xd0, 0xaa, 0xad, 0x8c, 0x09, 0x4d, 0x88, 0xb9, 0xeb, 0x09, 0x8b, 0x95, 0xf2, 0x10, 0x54, 0xa2, 0x90, 0x82, 0x52, 0x2b, 0xe7, 0xc2, 0x7a, 0x31, 0x28, 0x78, 0xb6, 0x37, 0x91, 0x7e, 0x3d, 0x81, 0x9e, 0x6c, 0x3c, 0x56, 0x8d, 0xb5, 0xd8, 0x43, 0x80, 0x2b, 0x06, 0xd5, 0x1d, 0x9e, 0x98, 0xa2, 0xbe, 0x0b, 0xf4, 0x0c, 0x03, 0x14, 0x23, 0xb0, 0x0e, 0xdf, 0xbf, 0xf8, 0x32, 0x0e, 0xfb, 0x91, 0x71, 0xbd, 0x20, 0x44, 0x65, 0x3a, 0x4c, 0xb9, 0xc5, 0x12, 0x2f, 0x6c, 0x65, 0xe8, 0x3c, 0xda, 0x2e, 0xc3, 0xc1, 0x26, 0x02, 0x7a, 0x9c, 0x1a, 0x56, 0xba, 0x87, 0x4d, 0x0f, 0xea, 0x23, 0xf3, 0x80, 0xb8, 0x2c, 0xf2, 0x40, 0xb8, 0xcf, 0x54, 0x00, 0x04, 0x75, 0x8c, 0x4c, 0x77, 0xd9, 0x34, 0x15, 0x7a, 0x74, 0xf3, 0xfc, 0x12, 0xbf, 0xac } - -} -, -{ - "RSAES-OAEP Encryption Example 7.5", - /* Message to be encrypted */ - 16, - { 0xbb, 0x47, 0x23, 0x1c, 0xa5, 0xea, 0x1d, 0x3a, 0xd4, 0x6c, 0x99, 0x34, 0x5d, 0x9a, 0x8a, 0x61 } -, - /* Seed */ - 20, - { 0xb2, 0x16, 0x6e, 0xd4, 0x72, 0xd5, 0x8d, 0xb1, 0x0c, 0xab, 0x2c, 0x6b, 0x00, 0x0c, 0xcc, 0xf1, 0x0a, 0x7d, 0xc5, 0x09 } -, - /* Encryption */ - 129, - { 0x02, 0x83, 0x87, 0xa3, 0x18, 0x27, 0x74, 0x34, 0x79, 0x8b, 0x4d, 0x97, 0xf4, 0x60, 0x06, 0x8d, 0xf5, 0x29, 0x8f, 0xab, 0xa5, 0x04, 0x1b, 0xa1, 0x17, 0x61, 0xa1, 0xcb, 0x73, 0x16, 0xb2, 0x41, 0x84, 0x11, 0x4e, 0xc5, 0x00, 0x25, 0x7e, 0x25, 0x89, 0xed, 0x3b, 0x60, 0x7a, 0x1e, 0xbb, 0xe9, 0x7a, 0x6c, 0xc2, 0xe0, 0x2b, 0xf1, 0xb6, 0x81, 0xf4, 0x23, 0x12, 0xa3, 0x3b, 0x7a, 0x77, 0xd8, 0xe7, 0x85, 0x5c, 0x4a, 0x6d, 0xe0, 0x3e, 0x3c, 0x04, 0x64, 0x3f, 0x78, 0x6b, 0x91, 0xa2, 0x64, 0xa0, 0xd6, 0x80, 0x5e, 0x2c, 0xea, 0x91, 0xe6, 0x81, 0x77, 0xeb, 0x7a, 0x64, 0xd9, 0x25, 0x5e, 0x4f, 0x27, 0xe7, 0x13, 0xb7, 0xcc, 0xec, 0x00, 0xdc, 0x20, 0x0e, 0xbd, 0x21, 0xc2, 0xea, 0x2b, 0xb8, 0x90, 0xfe, 0xae, 0x49, 0x42, 0xdf, 0x94, 0x1d, 0xc3, 0xf9, 0x78, 0x90, 0xed, 0x34, 0x74, 0x78 } - -} -, -{ - "RSAES-OAEP Encryption Example 7.6", - /* Message to be encrypted */ - 18, - { 0x21, 0x84, 0x82, 0x70, 0x95, 0xd3, 0x5c, 0x3f, 0x86, 0xf6, 0x00, 0xe8, 0xe5, 0x97, 0x54, 0x01, 0x32, 0x96 } -, - /* Seed */ - 20, - { 0x52, 0x67, 0x3b, 0xde, 0x2c, 0xa1, 0x66, 0xc2, 0xaa, 0x46, 0x13, 0x1a, 0xc1, 0xdc, 0x80, 0x8d, 0x67, 0xd7, 0xd3, 0xb1 } -, - /* Encryption */ - 129, - { 0x14, 0xc6, 0x78, 0xa9, 0x4a, 0xd6, 0x05, 0x25, 0xef, 0x39, 0xe9, 0x59, 0xb2, 0xf3, 0xba, 0x5c, 0x09, 0x7a, 0x94, 0xff, 0x91, 0x2b, 0x67, 0xdb, 0xac, 0xe8, 0x05, 0x35, 0xc1, 0x87, 0xab, 0xd4, 0x7d, 0x07, 0x54, 0x20, 0xb1, 0x87, 0x21, 0x52, 0xbb, 0xa0, 0x8f, 0x7f, 0xc3, 0x1f, 0x31, 0x3b, 0xbf, 0x92, 0x73, 0xc9, 0x12, 0xfc, 0x4c, 0x01, 0x49, 0xa9, 0xb0, 0xcf, 0xb7, 0x98, 0x07, 0xe3, 0x46, 0xeb, 0x33, 0x20, 0x69, 0x61, 0x1b, 0xec, 0x0f, 0xf9, 0xbc, 0xd1, 0x68, 0xf1, 0xf7, 0xc3, 0x3e, 0x77, 0x31, 0x3c, 0xea, 0x45, 0x4b, 0x94, 0xe2, 0x54, 0x9e, 0xec, 0xf0, 0x02, 0xe2, 0xac, 0xf7, 0xf6, 0xf2, 0xd2, 0x84, 0x5d, 0x4f, 0xe0, 0xaa, 0xb2, 0xe5, 0xa9, 0x2d, 0xdf, 0x68, 0xc4, 0x80, 0xae, 0x11, 0x24, 0x79, 0x35, 0xd1, 0xf6, 0x25, 0x74, 0x84, 0x22, 0x16, 0xae, 0x67, 0x41, 0x15 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 8: A 1031-bit RSA Key Pair", -{ - /* RSA modulus n */ - 129, - { 0x5b, 0xdf, 0x0e, 0x30, 0xd3, 0x21, 0xdd, 0xa5, 0x14, 0x7f, 0x88, 0x24, 0x08, 0xfa, 0x69, 0x19, 0x54, 0x80, 0xdf, 0x8f, 0x80, 0xd3, 0xf6, 0xe8, 0xbf, 0x58, 0x18, 0x50, 0x4f, 0x36, 0x42, 0x7c, 0xa9, 0xb1, 0xf5, 0x54, 0x0b, 0x9c, 0x65, 0xa8, 0xf6, 0x97, 0x4c, 0xf8, 0x44, 0x7a, 0x24, 0x4d, 0x92, 0x80, 0x20, 0x1b, 0xb4, 0x9f, 0xcb, 0xbe, 0x63, 0x78, 0xd1, 0x94, 0x4c, 0xd2, 0x27, 0xe2, 0x30, 0xf9, 0x6e, 0x3d, 0x10, 0xf8, 0x19, 0xdc, 0xef, 0x27, 0x6c, 0x64, 0xa0, 0x0b, 0x2a, 0x4b, 0x67, 0x01, 0xe7, 0xd0, 0x1d, 0xe5, 0xfa, 0xbd, 0xe3, 0xb1, 0xe9, 0xa0, 0xdf, 0x82, 0xf4, 0x63, 0x13, 0x59, 0xcd, 0x22, 0x66, 0x96, 0x47, 0xfb, 0xb1, 0x71, 0x72, 0x46, 0x13, 0x4e, 0xd7, 0xb4, 0x97, 0xcf, 0xff, 0xbd, 0xc4, 0x2b, 0x59, 0xc7, 0x3a, 0x96, 0xed, 0x90, 0x16, 0x62, 0x12, 0xdf, 0xf7 } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 129, - { 0x0f, 0x7d, 0x1e, 0x9e, 0x5a, 0xaa, 0x25, 0xfd, 0x13, 0xe4, 0xa0, 0x66, 0x3a, 0xe1, 0x44, 0xe0, 0xd1, 0x5f, 0x5c, 0xd1, 0x8b, 0xcd, 0xb0, 0x9d, 0xf2, 0xcc, 0x7e, 0x64, 0xe3, 0xc5, 0xe9, 0x15, 0xad, 0x62, 0x64, 0x53, 0x04, 0x16, 0x1d, 0x09, 0x8c, 0x71, 0x5b, 0xb7, 0xab, 0x8b, 0xd0, 0x1d, 0x07, 0xea, 0xf3, 0xfe, 0xd7, 0xc7, 0xed, 0x08, 0xaf, 0x2a, 0x8a, 0x62, 0xef, 0x44, 0xab, 0x16, 0xb3, 0x20, 0xe1, 0x4a, 0xf7, 0x2a, 0x48, 0xf9, 0x6a, 0xfe, 0x26, 0x2a, 0x0a, 0xe4, 0xcf, 0x65, 0xe6, 0x35, 0xe9, 0x10, 0x79, 0x0c, 0xd4, 0xee, 0x5c, 0xea, 0x76, 0x8a, 0x4b, 0x26, 0x39, 0xf7, 0xe6, 0xf6, 0x77, 0xb3, 0xf0, 0xbb, 0x6b, 0xe3, 0x2b, 0x75, 0x74, 0x7d, 0x89, 0x09, 0x03, 0x6f, 0x02, 0x64, 0xf5, 0x8d, 0x40, 0x1c, 0xdb, 0xa1, 0x31, 0x71, 0x61, 0x57, 0xa7, 0x5e, 0xcf, 0x63, 0x31 } -, - /* Prime p */ - 65, - { 0x0a, 0x02, 0xef, 0x84, 0x48, 0xd9, 0xfa, 0xd8, 0xbb, 0xd0, 0xd0, 0x04, 0xc8, 0xc2, 0xaa, 0x97, 0x51, 0xef, 0x97, 0x21, 0xc1, 0xb0, 0xd0, 0x32, 0x36, 0xa5, 0x4b, 0x0d, 0xf9, 0x47, 0xcb, 0xae, 0xd5, 0xa2, 0x55, 0xee, 0x9e, 0x8e, 0x20, 0xd4, 0x91, 0xea, 0x17, 0x23, 0xfe, 0x09, 0x47, 0x04, 0xa9, 0x76, 0x2e, 0x88, 0xaf, 0xd1, 0x6e, 0xbb, 0x59, 0x94, 0x41, 0x2c, 0xa9, 0x66, 0xdc, 0x4f, 0x9f } -, - /* Prime q */ - 65, - { 0x09, 0x2d, 0x36, 0x2e, 0x7e, 0xd3, 0xa0, 0xbf, 0xd9, 0xe9, 0xfd, 0x0e, 0x6c, 0x03, 0x01, 0xb6, 0xdf, 0x29, 0x15, 0x9c, 0xf5, 0x0c, 0xc8, 0x3b, 0x9b, 0x0c, 0xf4, 0xd6, 0xee, 0xa7, 0x1a, 0x61, 0xe0, 0x02, 0xb4, 0x6e, 0x0a, 0xe9, 0xf2, 0xde, 0x62, 0xd2, 0x5b, 0x5d, 0x74, 0x52, 0xd4, 0x98, 0xb8, 0x1c, 0x9a, 0xc6, 0xfc, 0x58, 0x59, 0x3d, 0x4c, 0x3f, 0xb4, 0xf5, 0xd7, 0x2d, 0xfb, 0xb0, 0xa9 } -, - /* p's CRT exponent dP */ - 65, - { 0x07, 0xc7, 0x14, 0x10, 0xaf, 0x10, 0x39, 0x62, 0xdb, 0x36, 0x74, 0x04, 0xe3, 0x7a, 0xe8, 0x50, 0xba, 0xa4, 0xe9, 0xc2, 0x9d, 0xd9, 0x21, 0x45, 0x81, 0x52, 0x94, 0xa6, 0x7c, 0x7d, 0x1c, 0x6d, 0xed, 0x26, 0x3a, 0xa0, 0x30, 0xa9, 0xb6, 0x33, 0xae, 0x50, 0x30, 0x3e, 0x14, 0x03, 0x5d, 0x1a, 0xf0, 0x14, 0x12, 0x3e, 0xba, 0x68, 0x78, 0x20, 0x30, 0x8d, 0x8e, 0xbc, 0x85, 0xb6, 0x95, 0x7d, 0x7d } -, - /* q's CRT exponent dQ */ - 64, - { 0xae, 0x2c, 0x75, 0x38, 0x0c, 0x02, 0xc0, 0x16, 0xad, 0x05, 0x89, 0x1b, 0x33, 0x01, 0xde, 0x88, 0x1f, 0x28, 0xae, 0x11, 0x71, 0x18, 0x2b, 0x6b, 0x2c, 0x83, 0xbe, 0xa7, 0xc5, 0x15, 0xec, 0xa9, 0xca, 0x29, 0x8c, 0x7b, 0x1c, 0xab, 0x58, 0x17, 0xa5, 0x97, 0x06, 0x8f, 0xc8, 0x50, 0x60, 0xde, 0x4d, 0xa8, 0xa0, 0x16, 0x37, 0x8a, 0xae, 0x43, 0xc7, 0xf9, 0x67, 0xbc, 0xc3, 0x79, 0x04, 0xb9 } -, - /* CRT coefficient qInv */ - 65, - { 0x05, 0x98, 0xd1, 0x05, 0x9e, 0x3a, 0xda, 0x4f, 0x63, 0x20, 0x75, 0x2c, 0x09, 0xd8, 0x05, 0xff, 0x7d, 0x1f, 0x1a, 0xe0, 0xd0, 0x17, 0xae, 0xee, 0xe9, 0xce, 0xfa, 0x0d, 0x7d, 0xd7, 0xff, 0x77, 0x5e, 0x44, 0xb5, 0x78, 0x32, 0x2f, 0x64, 0x05, 0xd6, 0x21, 0x1d, 0xa1, 0x95, 0x19, 0x66, 0x6a, 0xa8, 0x7f, 0xdc, 0x4c, 0xd8, 0xc8, 0x8f, 0x6b, 0x6e, 0x3d, 0x67, 0xe9, 0x61, 0xdc, 0xbb, 0xa3, 0xd0 } - -} -, -{{ - "RSAES-OAEP Encryption Example 8.1", - /* Message to be encrypted */ - 54, - { 0x05, 0x0b, 0x75, 0x5e, 0x5e, 0x68, 0x80, 0xf7, 0xb9, 0xe9, 0xd6, 0x92, 0xa7, 0x4c, 0x37, 0xaa, 0xe4, 0x49, 0xb3, 0x1b, 0xfe, 0xa6, 0xde, 0xff, 0x83, 0x74, 0x7a, 0x89, 0x7f, 0x6c, 0x2c, 0x82, 0x5b, 0xb1, 0xad, 0xbf, 0x85, 0x0a, 0x3c, 0x96, 0x99, 0x4b, 0x5d, 0xe5, 0xb3, 0x3c, 0xbc, 0x7d, 0x4a, 0x17, 0x91, 0x3a, 0x79, 0x67 } -, - /* Seed */ - 20, - { 0x77, 0x06, 0xff, 0xca, 0x1e, 0xcf, 0xb1, 0xeb, 0xee, 0x2a, 0x55, 0xe5, 0xc6, 0xe2, 0x4c, 0xd2, 0x79, 0x7a, 0x41, 0x25 } -, - /* Encryption */ - 129, - { 0x09, 0xb3, 0x68, 0x3d, 0x8a, 0x2e, 0xb0, 0xfb, 0x29, 0x5b, 0x62, 0xed, 0x1f, 0xb9, 0x29, 0x0b, 0x71, 0x44, 0x57, 0xb7, 0x82, 0x53, 0x19, 0xf4, 0x64, 0x78, 0x72, 0xaf, 0x88, 0x9b, 0x30, 0x40, 0x94, 0x72, 0x02, 0x0a, 0xd1, 0x29, 0x12, 0xbf, 0x19, 0xb1, 0x1d, 0x48, 0x19, 0xf4, 0x96, 0x14, 0x82, 0x4f, 0xfd, 0x84, 0xd0, 0x9c, 0x0a, 0x17, 0xe7, 0xd1, 0x73, 0x09, 0xd1, 0x29, 0x19, 0x79, 0x04, 0x10, 0xaa, 0x29, 0x95, 0x69, 0x9f, 0x6a, 0x86, 0xdb, 0xe3, 0x24, 0x2b, 0x5a, 0xcc, 0x23, 0xaf, 0x45, 0x69, 0x10, 0x80, 0xd6, 0xb1, 0xae, 0x81, 0x0f, 0xb3, 0xe3, 0x05, 0x70, 0x87, 0xf0, 0x97, 0x00, 0x92, 0xce, 0x00, 0xbe, 0x95, 0x62, 0xff, 0x40, 0x53, 0xb6, 0x26, 0x2c, 0xe0, 0xca, 0xa9, 0x3e, 0x13, 0x72, 0x3d, 0x2e, 0x3a, 0x5b, 0xa0, 0x75, 0xd4, 0x5f, 0x0d, 0x61, 0xb5, 0x4b, 0x61 } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSAES-OAEP Encryption Example 8.2", - /* Message to be encrypted */ - 63, - { 0x4e, 0xb6, 0x8d, 0xcd, 0x93, 0xca, 0x9b, 0x19, 0xdf, 0x11, 0x1b, 0xd4, 0x36, 0x08, 0xf5, 0x57, 0x02, 0x6f, 0xe4, 0xaa, 0x1d, 0x5c, 0xfa, 0xc2, 0x27, 0xa3, 0xeb, 0x5a, 0xb9, 0x54, 0x8c, 0x18, 0xa0, 0x6d, 0xde, 0xd2, 0x3f, 0x81, 0x82, 0x59, 0x86, 0xb2, 0xfc, 0xd7, 0x11, 0x09, 0xec, 0xef, 0x7e, 0xff, 0x88, 0x87, 0x3f, 0x07, 0x5c, 0x2a, 0xa0, 0xc4, 0x69, 0xf6, 0x9c, 0x92, 0xbc } -, - /* Seed */ - 20, - { 0xa3, 0x71, 0x7d, 0xa1, 0x43, 0xb4, 0xdc, 0xff, 0xbc, 0x74, 0x26, 0x65, 0xa8, 0xfa, 0x95, 0x05, 0x85, 0x54, 0x83, 0x43 } -, - /* Encryption */ - 129, - { 0x2e, 0xcf, 0x15, 0xc9, 0x7c, 0x5a, 0x15, 0xb1, 0x47, 0x6a, 0xe9, 0x86, 0xb3, 0x71, 0xb5, 0x7a, 0x24, 0x28, 0x4f, 0x4a, 0x16, 0x2a, 0x8d, 0x0c, 0x81, 0x82, 0xe7, 0x90, 0x5e, 0x79, 0x22, 0x56, 0xf1, 0x81, 0x2b, 0xa5, 0xf8, 0x3f, 0x1f, 0x7a, 0x13, 0x0e, 0x42, 0xdc, 0xc0, 0x22, 0x32, 0x84, 0x4e, 0xdc, 0x14, 0xa3, 0x1a, 0x68, 0xee, 0x97, 0xae, 0x56, 0x4a, 0x38, 0x3a, 0x34, 0x11, 0x65, 0x64, 0x24, 0xc5, 0xf6, 0x2d, 0xdb, 0x64, 0x60, 0x93, 0xc3, 0x67, 0xbe, 0x1f, 0xcd, 0xa4, 0x26, 0xcf, 0x00, 0xa0, 0x6d, 0x8a, 0xcb, 0x7e, 0x57, 0x77, 0x6f, 0xbb, 0xd8, 0x55, 0xac, 0x3d, 0xf5, 0x06, 0xfc, 0x16, 0xb1, 0xd7, 0xc3, 0xf2, 0x11, 0x0f, 0x3d, 0x80, 0x68, 0xe9, 0x1e, 0x18, 0x63, 0x63, 0x83, 0x1c, 0x84, 0x09, 0x68, 0x0d, 0x8d, 0xa9, 0xec, 0xd8, 0xcf, 0x1f, 0xa2, 0x0e, 0xe3, 0x9d } - -} -, -{ - "RSAES-OAEP Encryption Example 8.3", - /* Message to be encrypted */ - 12, - { 0x86, 0x04, 0xac, 0x56, 0x32, 0x8c, 0x1a, 0xb5, 0xad, 0x91, 0x78, 0x61 } -, - /* Seed */ - 20, - { 0xee, 0x06, 0x20, 0x90, 0x73, 0xcc, 0xa0, 0x26, 0xbb, 0x26, 0x4e, 0x51, 0x85, 0xbf, 0x8c, 0x68, 0xb7, 0x73, 0x9f, 0x86 } -, - /* Encryption */ - 129, - { 0x4b, 0xc8, 0x91, 0x30, 0xa5, 0xb2, 0xda, 0xbb, 0x7c, 0x2f, 0xcf, 0x90, 0xeb, 0x5d, 0x0e, 0xaf, 0x9e, 0x68, 0x1b, 0x71, 0x46, 0xa3, 0x8f, 0x31, 0x73, 0xa3, 0xd9, 0xcf, 0xec, 0x52, 0xea, 0x9e, 0x0a, 0x41, 0x93, 0x2e, 0x64, 0x8a, 0x9d, 0x69, 0x34, 0x4c, 0x50, 0xda, 0x76, 0x3f, 0x51, 0xa0, 0x3c, 0x95, 0x76, 0x21, 0x31, 0xe8, 0x05, 0x22, 0x54, 0xdc, 0xd2, 0x24, 0x8c, 0xba, 0x40, 0xfd, 0x31, 0x66, 0x77, 0x86, 0xce, 0x05, 0xa2, 0xb7, 0xb5, 0x31, 0xac, 0x9d, 0xac, 0x9e, 0xd5, 0x84, 0xa5, 0x9b, 0x67, 0x7c, 0x1a, 0x8a, 0xed, 0x8c, 0x5d, 0x15, 0xd6, 0x8c, 0x05, 0x56, 0x9e, 0x2b, 0xe7, 0x80, 0xbf, 0x7d, 0xb6, 0x38, 0xfd, 0x2b, 0xfd, 0x2a, 0x85, 0xab, 0x27, 0x68, 0x60, 0xf3, 0x77, 0x73, 0x38, 0xfc, 0xa9, 0x89, 0xff, 0xd7, 0x43, 0xd1, 0x3e, 0xe0, 0x8e, 0x0c, 0xa9, 0x89, 0x3f } - -} -, -{ - "RSAES-OAEP Encryption Example 8.4", - /* Message to be encrypted */ - 34, - { 0xfd, 0xda, 0x5f, 0xbf, 0x6e, 0xc3, 0x61, 0xa9, 0xd9, 0xa4, 0xac, 0x68, 0xaf, 0x21, 0x6a, 0x06, 0x86, 0xf4, 0x38, 0xb1, 0xe0, 0xe5, 0xc3, 0x6b, 0x95, 0x5f, 0x74, 0xe1, 0x07, 0xf3, 0x9c, 0x0d, 0xdd, 0xcc } -, - /* Seed */ - 20, - { 0x99, 0x0a, 0xd5, 0x73, 0xdc, 0x48, 0xa9, 0x73, 0x23, 0x5b, 0x6d, 0x82, 0x54, 0x36, 0x18, 0xf2, 0xe9, 0x55, 0x10, 0x5d } -, - /* Encryption */ - 129, - { 0x2e, 0x45, 0x68, 0x47, 0xd8, 0xfc, 0x36, 0xff, 0x01, 0x47, 0xd6, 0x99, 0x35, 0x94, 0xb9, 0x39, 0x72, 0x27, 0xd5, 0x77, 0x75, 0x2c, 0x79, 0xd0, 0xf9, 0x04, 0xfc, 0xb0, 0x39, 0xd4, 0xd8, 0x12, 0xfe, 0xa6, 0x05, 0xa7, 0xb5, 0x74, 0xdd, 0x82, 0xca, 0x78, 0x6f, 0x93, 0x75, 0x23, 0x48, 0x43, 0x8e, 0xe9, 0xf5, 0xb5, 0x45, 0x49, 0x85, 0xd5, 0xf0, 0xe1, 0x69, 0x9e, 0x3e, 0x7a, 0xd1, 0x75, 0xa3, 0x2e, 0x15, 0xf0, 0x3d, 0xeb, 0x04, 0x2a, 0xb9, 0xfe, 0x1d, 0xd9, 0xdb, 0x1b, 0xb8, 0x6f, 0x8c, 0x08, 0x9c, 0xcb, 0x45, 0xe7, 0xef, 0x0c, 0x5e, 0xe7, 0xca, 0x9b, 0x72, 0x90, 0xca, 0x6b, 0x15, 0xbe, 0xd4, 0x70, 0x39, 0x78, 0x8a, 0x8a, 0x93, 0xff, 0x83, 0xe0, 0xe8, 0xd6, 0x24, 0x4c, 0x71, 0x00, 0x63, 0x62, 0xde, 0xef, 0x69, 0xb6, 0xf4, 0x16, 0xfb, 0x3c, 0x68, 0x43, 0x83, 0xfb, 0xd0 } - -} -, -{ - "RSAES-OAEP Encryption Example 8.5", - /* Message to be encrypted */ - 13, - { 0x4a, 0x5f, 0x49, 0x14, 0xbe, 0xe2, 0x5d, 0xe3, 0xc6, 0x93, 0x41, 0xde, 0x07 } -, - /* Seed */ - 20, - { 0xec, 0xc6, 0x3b, 0x28, 0xf0, 0x75, 0x6f, 0x22, 0xf5, 0x2a, 0xc8, 0xe6, 0xec, 0x12, 0x51, 0xa6, 0xec, 0x30, 0x47, 0x18 } -, - /* Encryption */ - 129, - { 0x1f, 0xb9, 0x35, 0x6f, 0xd5, 0xc4, 0xb1, 0x79, 0x6d, 0xb2, 0xeb, 0xf7, 0xd0, 0xd3, 0x93, 0xcc, 0x81, 0x0a, 0xdf, 0x61, 0x45, 0xde, 0xfc, 0x2f, 0xce, 0x71, 0x4f, 0x79, 0xd9, 0x38, 0x00, 0xd5, 0xe2, 0xac, 0x21, 0x1e, 0xa8, 0xbb, 0xec, 0xca, 0x4b, 0x65, 0x4b, 0x94, 0xc3, 0xb1, 0x8b, 0x30, 0xdd, 0x57, 0x6c, 0xe3, 0x4d, 0xc9, 0x54, 0x36, 0xef, 0x57, 0xa0, 0x94, 0x15, 0x64, 0x59, 0x23, 0x35, 0x9a, 0x5d, 0x7b, 0x41, 0x71, 0xef, 0x22, 0xc2, 0x46, 0x70, 0xf1, 0xb2, 0x29, 0xd3, 0x60, 0x3e, 0x91, 0xf7, 0x66, 0x71, 0xb7, 0xdf, 0x97, 0xe7, 0x31, 0x7c, 0x97, 0x73, 0x44, 0x76, 0xd5, 0xf3, 0xd1, 0x7d, 0x21, 0xcf, 0x82, 0xb5, 0xba, 0x9f, 0x83, 0xdf, 0x2e, 0x58, 0x8d, 0x36, 0x98, 0x4f, 0xd1, 0xb5, 0x84, 0x46, 0x8b, 0xd2, 0x3b, 0x2e, 0x87, 0x5f, 0x32, 0xf6, 0x89, 0x53, 0xf7, 0xb2 } - -} -, -{ - "RSAES-OAEP Encryption Example 8.6", - /* Message to be encrypted */ - 25, - { 0x8e, 0x07, 0xd6, 0x6f, 0x7b, 0x88, 0x0a, 0x72, 0x56, 0x3a, 0xbc, 0xd3, 0xf3, 0x50, 0x92, 0xbc, 0x33, 0x40, 0x9f, 0xb7, 0xf8, 0x8f, 0x24, 0x72, 0xbe } -, - /* Seed */ - 20, - { 0x39, 0x25, 0xc7, 0x1b, 0x36, 0x2d, 0x40, 0xa0, 0xa6, 0xde, 0x42, 0x14, 0x55, 0x79, 0xba, 0x1e, 0x7d, 0xd4, 0x59, 0xfc } -, - /* Encryption */ - 129, - { 0x3a, 0xfd, 0x9c, 0x66, 0x00, 0x14, 0x7b, 0x21, 0x79, 0x8d, 0x81, 0x8c, 0x65, 0x5a, 0x0f, 0x4c, 0x92, 0x12, 0xdb, 0x26, 0xd0, 0xb0, 0xdf, 0xdc, 0x2a, 0x75, 0x94, 0xcc, 0xb3, 0xd2, 0x2f, 0x5b, 0xf1, 0xd7, 0xc3, 0xe1, 0x12, 0xcd, 0x73, 0xfc, 0x7d, 0x50, 0x9c, 0x7a, 0x8b, 0xaf, 0xdd, 0x3c, 0x27, 0x4d, 0x13, 0x99, 0x00, 0x9f, 0x96, 0x09, 0xec, 0x4b, 0xe6, 0x47, 0x7e, 0x45, 0x3f, 0x07, 0x5a, 0xa3, 0x3d, 0xb3, 0x82, 0x87, 0x0c, 0x1c, 0x34, 0x09, 0xae, 0xf3, 0x92, 0xd7, 0x38, 0x6a, 0xe3, 0xa6, 0x96, 0xb9, 0x9a, 0x94, 0xb4, 0xda, 0x05, 0x89, 0x44, 0x7e, 0x95, 0x5d, 0x16, 0xc9, 0x8b, 0x17, 0x60, 0x2a, 0x59, 0xbd, 0x73, 0x62, 0x79, 0xfc, 0xd8, 0xfb, 0x28, 0x0c, 0x44, 0x62, 0xd5, 0x90, 0xbf, 0xa9, 0xbf, 0x13, 0xfe, 0xd5, 0x70, 0xea, 0xfd, 0xe9, 0x73, 0x30, 0xa2, 0xc2, 0x10 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 9: A 1536-bit RSA Key Pair", -{ - /* RSA modulus n */ - 192, - { 0xcf, 0x2c, 0xd4, 0x1e, 0x34, 0xca, 0x3a, 0x72, 0x8e, 0xa5, 0xcb, 0x8a, 0xff, 0x64, 0xc3, 0x6d, 0x27, 0xbd, 0xef, 0x53, 0x64, 0xe3, 0x36, 0xfd, 0x68, 0xd3, 0x12, 0x3c, 0x5a, 0x19, 0x6a, 0x8c, 0x28, 0x70, 0x13, 0xe8, 0x53, 0xd5, 0x15, 0x6d, 0x58, 0xd1, 0x51, 0x95, 0x45, 0x20, 0xfb, 0x4f, 0x6d, 0x7b, 0x17, 0xab, 0xb6, 0x81, 0x77, 0x65, 0x90, 0x9c, 0x57, 0x61, 0x19, 0x65, 0x9d, 0x90, 0x2b, 0x19, 0x06, 0xed, 0x8a, 0x2b, 0x10, 0xc1, 0x55, 0xc2, 0x4d, 0x12, 0x45, 0x28, 0xda, 0xb9, 0xee, 0xae, 0x37, 0x9b, 0xea, 0xc6, 0x6e, 0x4a, 0x41, 0x17, 0x86, 0xdc, 0xb8, 0xfd, 0x00, 0x62, 0xeb, 0xc0, 0x30, 0xde, 0x12, 0x19, 0xa0, 0x4c, 0x2a, 0x8c, 0x1b, 0x7d, 0xd3, 0x13, 0x1e, 0x4d, 0x6b, 0x6c, 0xae, 0xe2, 0xe3, 0x1a, 0x5e, 0xd4, 0x1a, 0xc1, 0x50, 0x9b, 0x2e, 0xf1, 0xee, 0x2a, 0xb1, 0x83, 0x64, 0xbe, 0x56, 0x8c, 0xa9, 0x41, 0xc2, 0x5e, 0xcc, 0x84, 0xff, 0x9d, 0x64, 0x3b, 0x5e, 0xc1, 0xaa, 0xae, 0x10, 0x2a, 0x20, 0xd7, 0x3f, 0x47, 0x9b, 0x78, 0x0f, 0xd6, 0xda, 0x91, 0x07, 0x52, 0x12, 0xd9, 0xea, 0xc0, 0x3a, 0x06, 0x74, 0xd8, 0x99, 0xeb, 0xa2, 0xe4, 0x31, 0xf4, 0xc4, 0x4b, 0x61, 0x5b, 0x6b, 0xa2, 0x23, 0x2b, 0xd4, 0xb3, 0x3b, 0xae, 0xd7, 0x3d, 0x62, 0x5d } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 192, - { 0x19, 0x8c, 0x14, 0x1e, 0x23, 0x71, 0x5a, 0x92, 0xbc, 0xcf, 0x6a, 0x11, 0x9a, 0x5b, 0xc1, 0x13, 0x89, 0x46, 0x8d, 0x28, 0x11, 0xf5, 0x48, 0xd7, 0x27, 0xe1, 0x7b, 0x4a, 0xb0, 0xeb, 0x98, 0x6d, 0x6f, 0x21, 0x1e, 0xfb, 0x53, 0xb7, 0x1f, 0x7c, 0xcb, 0xea, 0x87, 0xee, 0x69, 0xc7, 0x5e, 0xe6, 0x15, 0x00, 0x8c, 0x53, 0x32, 0xde, 0xb5, 0x2b, 0xf3, 0x90, 0xab, 0xdf, 0xbf, 0xe3, 0x7d, 0x72, 0x05, 0x36, 0x81, 0x59, 0xb2, 0x63, 0x8c, 0x1d, 0xe3, 0x26, 0xe2, 0x1d, 0x22, 0x25, 0x1f, 0x0f, 0xb5, 0x84, 0x8b, 0x3b, 0xf1, 0x50, 0x05, 0xd2, 0xa7, 0x43, 0x30, 0xf0, 0xaf, 0xe9, 0x16, 0xee, 0x62, 0xcc, 0xc1, 0x34, 0x4d, 0x1d, 0x83, 0xa7, 0x09, 0xe6, 0x06, 0x76, 0x27, 0x38, 0x40, 0xf7, 0xf3, 0x77, 0x42, 0x4a, 0x5e, 0x0a, 0x4d, 0xa7, 0x5f, 0x01, 0xb3, 0x1f, 0xf7, 0x68, 0x19, 0xcf, 0x9c, 0xbf, 0xdd, 0x21, 0x52, 0x43, 0xc3, 0x91, 0x7c, 0x03, 0xef, 0x38, 0x19, 0x93, 0x12, 0xe5, 0x67, 0xb3, 0xbf, 0x7a, 0xed, 0x3a, 0xb4, 0x57, 0xf3, 0x71, 0xef, 0x8a, 0x14, 0x23, 0xf4, 0x5b, 0x68, 0xc6, 0xe2, 0x82, 0xec, 0x11, 0x1b, 0xba, 0x28, 0x33, 0xb9, 0x87, 0xfd, 0x69, 0xfa, 0xd8, 0x3b, 0xc1, 0xb8, 0xc6, 0x13, 0xc5, 0xe1, 0xea, 0x16, 0xc1, 0x1e, 0xd1, 0x25, 0xea, 0x7e, 0xc1 } -, - /* Prime p */ - 96, - { 0xfc, 0x8d, 0x6c, 0x04, 0xbe, 0xc4, 0xeb, 0x9a, 0x81, 0x92, 0xca, 0x79, 0x00, 0xcb, 0xe5, 0x36, 0xe2, 0xe8, 0xb5, 0x19, 0xde, 0xcf, 0x33, 0xb2, 0x45, 0x97, 0x98, 0xc6, 0x90, 0x9d, 0xf4, 0xf1, 0x76, 0xdb, 0x7d, 0x23, 0x19, 0x0f, 0xc7, 0x2b, 0x88, 0x65, 0xa7, 0x18, 0xaf, 0x89, 0x5f, 0x1b, 0xcd, 0x91, 0x45, 0x29, 0x80, 0x27, 0x42, 0x3b, 0x60, 0x5e, 0x70, 0xa4, 0x7c, 0xf5, 0x83, 0x90, 0xa8, 0xc3, 0xe8, 0x8f, 0xc8, 0xc4, 0x8e, 0x8b, 0x32, 0xe3, 0xda, 0x21, 0x0d, 0xfb, 0xe3, 0xe8, 0x81, 0xea, 0x56, 0x74, 0xb6, 0xa3, 0x48, 0xc2, 0x1e, 0x93, 0xf9, 0xe5, 0x5e, 0xa6, 0x5e, 0xfd } -, - /* Prime q */ - 96, - { 0xd2, 0x00, 0xd4, 0x5e, 0x78, 0x8a, 0xac, 0xea, 0x60, 0x6a, 0x40, 0x1d, 0x04, 0x60, 0xf8, 0x7d, 0xd5, 0xc1, 0x02, 0x7e, 0x12, 0xdc, 0x1a, 0x0d, 0x75, 0x86, 0xe8, 0x93, 0x9d, 0x9c, 0xf7, 0x89, 0xb4, 0x0f, 0x51, 0xac, 0x04, 0x42, 0x96, 0x1d, 0xe7, 0xd2, 0x1c, 0xc2, 0x1e, 0x05, 0xc8, 0x31, 0x55, 0xc1, 0xf2, 0xaa, 0x91, 0x93, 0x38, 0x7c, 0xfd, 0xf9, 0x56, 0xcb, 0x48, 0xd1, 0x53, 0xba, 0x27, 0x04, 0x06, 0xf9, 0xbb, 0xba, 0x53, 0x7d, 0x49, 0x87, 0xd9, 0xe2, 0xf9, 0x94, 0x2d, 0x7a, 0x14, 0xcb, 0xff, 0xfe, 0xa7, 0x4f, 0xec, 0xdd, 0xa9, 0x28, 0xd2, 0x3e, 0x25, 0x9f, 0x5e, 0xe1 } -, - /* p's CRT exponent dP */ - 96, - { 0xdb, 0x16, 0x80, 0x2f, 0x79, 0xa2, 0xf0, 0xd4, 0x5f, 0x35, 0x8d, 0x69, 0xfd, 0x33, 0xe4, 0x4b, 0x81, 0xfa, 0xe8, 0x28, 0x62, 0x2e, 0x93, 0xa5, 0x42, 0x53, 0xe9, 0x97, 0xd0, 0x1b, 0x07, 0x43, 0x75, 0x9d, 0xa0, 0xe8, 0x12, 0xb4, 0xaa, 0x4e, 0x6c, 0x8b, 0xea, 0xb2, 0x32, 0x8d, 0x54, 0x31, 0x95, 0x5a, 0x41, 0x8a, 0x67, 0xff, 0x26, 0xa8, 0xc5, 0xc8, 0x07, 0xa5, 0xda, 0x35, 0x4e, 0x05, 0xef, 0x31, 0xcc, 0x8c, 0xf7, 0x58, 0xf4, 0x63, 0x73, 0x29, 0x50, 0xb0, 0x3e, 0x26, 0x57, 0x26, 0xfb, 0x94, 0xe3, 0x9d, 0x6a, 0x57, 0x2a, 0x26, 0x24, 0x4a, 0xb0, 0x8d, 0xb7, 0x57, 0x52, 0xad } -, - /* q's CRT exponent dQ */ - 96, - { 0xa0, 0xa3, 0x17, 0xcf, 0xe7, 0xdf, 0x14, 0x23, 0xf8, 0x7a, 0x6d, 0xee, 0x84, 0x51, 0xf4, 0xe2, 0xb4, 0xa6, 0x7e, 0x54, 0x97, 0xf2, 0x9b, 0x4f, 0x1e, 0x4e, 0x83, 0x0b, 0x9f, 0xad, 0xd9, 0x40, 0x11, 0x67, 0x02, 0x6f, 0x55, 0x96, 0xe5, 0xa3, 0x9c, 0x97, 0x81, 0x7e, 0x0f, 0x5f, 0x16, 0xe2, 0x7e, 0x19, 0xec, 0x99, 0x02, 0xe0, 0x1d, 0x7e, 0xa6, 0xfb, 0x9a, 0xa3, 0xc7, 0x60, 0xaf, 0xee, 0x1e, 0x38, 0x1b, 0x69, 0xde, 0x6a, 0xc9, 0xc0, 0x75, 0x85, 0xa0, 0x6a, 0xd9, 0xc4, 0xba, 0x00, 0xbf, 0x75, 0xc8, 0xad, 0x2f, 0xa8, 0x98, 0xa4, 0x79, 0xe8, 0x0a, 0xe2, 0x94, 0xfe, 0xd2, 0xa1 } -, - /* CRT coefficient qInv */ - 96, - { 0x0b, 0x21, 0xf3, 0x35, 0xc3, 0x53, 0x34, 0x2e, 0xb4, 0x4c, 0x3a, 0xa2, 0x44, 0x45, 0x78, 0x0c, 0x2d, 0x65, 0x5b, 0x94, 0x01, 0x74, 0xca, 0xe3, 0x8c, 0x7c, 0x8a, 0x4e, 0x64, 0x93, 0xc0, 0xba, 0x9f, 0xd3, 0x03, 0x74, 0x82, 0x67, 0xb0, 0x83, 0xb9, 0xa7, 0xa6, 0xcb, 0x61, 0xe4, 0x2d, 0xb3, 0x62, 0xb8, 0xc9, 0x89, 0x6d, 0xb7, 0x06, 0x4e, 0x02, 0xad, 0x5a, 0xe6, 0x15, 0x87, 0xda, 0x15, 0xb4, 0x64, 0x9c, 0x90, 0x59, 0x49, 0x09, 0xfe, 0xb3, 0x7d, 0xbc, 0xb6, 0x54, 0xbe, 0xb7, 0x26, 0x8e, 0xc8, 0x01, 0xe5, 0xa8, 0xb4, 0xaa, 0x39, 0x11, 0xbe, 0xbd, 0x88, 0x54, 0x2f, 0x05, 0xbe } - -} -, -{{ - "RSAES-OAEP Encryption Example 9.1", - /* Message to be encrypted */ - 61, - { 0xf7, 0x35, 0xfd, 0x55, 0xba, 0x92, 0x59, 0x2c, 0x3b, 0x52, 0xb8, 0xf9, 0xc4, 0xf6, 0x9a, 0xaa, 0x1c, 0xbe, 0xf8, 0xfe, 0x88, 0xad, 0xd0, 0x95, 0x59, 0x54, 0x12, 0x46, 0x7f, 0x9c, 0xf4, 0xec, 0x0b, 0x89, 0x6c, 0x59, 0xed, 0xa1, 0x62, 0x10, 0xe7, 0x54, 0x9c, 0x8a, 0xbb, 0x10, 0xcd, 0xbc, 0x21, 0xa1, 0x2e, 0xc9, 0xb6, 0xb5, 0xb8, 0xfd, 0x2f, 0x10, 0x39, 0x9e, 0xb6 } -, - /* Seed */ - 20, - { 0x8e, 0xc9, 0x65, 0xf1, 0x34, 0xa3, 0xec, 0x99, 0x31, 0xe9, 0x2a, 0x1c, 0xa0, 0xdc, 0x81, 0x69, 0xd5, 0xea, 0x70, 0x5c } -, - /* Encryption */ - 192, - { 0x26, 0x7b, 0xcd, 0x11, 0x8a, 0xca, 0xb1, 0xfc, 0x8b, 0xa8, 0x1c, 0x85, 0xd7, 0x30, 0x03, 0xcb, 0x86, 0x10, 0xfa, 0x55, 0xc1, 0xd9, 0x7d, 0xa8, 0xd4, 0x8a, 0x7c, 0x7f, 0x06, 0x89, 0x6a, 0x4d, 0xb7, 0x51, 0xaa, 0x28, 0x42, 0x55, 0xb9, 0xd3, 0x6a, 0xd6, 0x5f, 0x37, 0x65, 0x3d, 0x82, 0x9f, 0x1b, 0x37, 0xf9, 0x7b, 0x80, 0x01, 0x94, 0x25, 0x45, 0xb2, 0xfc, 0x2c, 0x55, 0xa7, 0x37, 0x6c, 0xa7, 0xa1, 0xbe, 0x4b, 0x17, 0x60, 0xc8, 0xe0, 0x5a, 0x33, 0xe5, 0xaa, 0x25, 0x26, 0xb8, 0xd9, 0x8e, 0x31, 0x70, 0x88, 0xe7, 0x83, 0x4c, 0x75, 0x5b, 0x2a, 0x59, 0xb1, 0x26, 0x31, 0xa1, 0x82, 0xc0, 0x5d, 0x5d, 0x43, 0xab, 0x17, 0x79, 0x26, 0x4f, 0x84, 0x56, 0xf5, 0x15, 0xce, 0x57, 0xdf, 0xdf, 0x51, 0x2d, 0x54, 0x93, 0xda, 0xb7, 0xb7, 0x33, 0x8d, 0xc4, 0xb7, 0xd7, 0x8d, 0xb9, 0xc0, 0x91, 0xac, 0x3b, 0xaf, 0x53, 0x7a, 0x69, 0xfc, 0x7f, 0x54, 0x9d, 0x97, 0x9f, 0x0e, 0xff, 0x9a, 0x94, 0xfd, 0xa4, 0x16, 0x9b, 0xd4, 0xd1, 0xd1, 0x9a, 0x69, 0xc9, 0x9e, 0x33, 0xc3, 0xb5, 0x54, 0x90, 0xd5, 0x01, 0xb3, 0x9b, 0x1e, 0xda, 0xe1, 0x18, 0xff, 0x67, 0x93, 0xa1, 0x53, 0x26, 0x15, 0x84, 0xd3, 0xa5, 0xf3, 0x9f, 0x6e, 0x68, 0x2e, 0x3d, 0x17, 0xc8, 0xcd, 0x12, 0x61, 0xfa, 0x72 } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSAES-OAEP Encryption Example 9.2", - /* Message to be encrypted */ - 39, - { 0x81, 0xb9, 0x06, 0x60, 0x50, 0x15, 0xa6, 0x3a, 0xab, 0xe4, 0x2d, 0xdf, 0x11, 0xe1, 0x97, 0x89, 0x12, 0xf5, 0x40, 0x4c, 0x74, 0x74, 0xb2, 0x6d, 0xce, 0x3e, 0xd4, 0x82, 0xbf, 0x96, 0x1e, 0xcc, 0x81, 0x8b, 0xf4, 0x20, 0xc5, 0x46, 0x59 } -, - /* Seed */ - 20, - { 0xec, 0xb1, 0xb8, 0xb2, 0x5f, 0xa5, 0x0c, 0xda, 0xb0, 0x8e, 0x56, 0x04, 0x28, 0x67, 0xf4, 0xaf, 0x58, 0x26, 0xd1, 0x6c } -, - /* Encryption */ - 192, - { 0x93, 0xac, 0x9f, 0x06, 0x71, 0xec, 0x29, 0xac, 0xbb, 0x44, 0x4e, 0xff, 0xc1, 0xa5, 0x74, 0x13, 0x51, 0xd6, 0x0f, 0xdb, 0x0e, 0x39, 0x3f, 0xbf, 0x75, 0x4a, 0xcf, 0x0d, 0xe4, 0x97, 0x61, 0xa1, 0x48, 0x41, 0xdf, 0x77, 0x72, 0xe9, 0xbc, 0x82, 0x77, 0x39, 0x66, 0xa1, 0x58, 0x4c, 0x4d, 0x72, 0xba, 0xea, 0x00, 0x11, 0x8f, 0x83, 0xf3, 0x5c, 0xca, 0x6e, 0x53, 0x7c, 0xbd, 0x4d, 0x81, 0x1f, 0x55, 0x83, 0xb2, 0x97, 0x83, 0xd8, 0xa6, 0xd9, 0x4c, 0xd3, 0x1b, 0xe7, 0x0d, 0x6f, 0x52, 0x6c, 0x10, 0xff, 0x09, 0xc6, 0xfa, 0x7c, 0xe0, 0x69, 0x79, 0x5a, 0x3f, 0xcd, 0x05, 0x11, 0xfd, 0x5f, 0xcb, 0x56, 0x4b, 0xcc, 0x80, 0xea, 0x9c, 0x78, 0xf3, 0x8b, 0x80, 0x01, 0x25, 0x39, 0xd8, 0xa4, 0xdd, 0xf6, 0xfe, 0x81, 0xe9, 0xcd, 0xdb, 0x7f, 0x50, 0xdb, 0xbb, 0xbc, 0xc7, 0xe5, 0xd8, 0x60, 0x97, 0xcc, 0xf4, 0xec, 0x49, 0x18, 0x9f, 0xb8, 0xbf, 0x31, 0x8b, 0xe6, 0xd5, 0xa0, 0x71, 0x5d, 0x51, 0x6b, 0x49, 0xaf, 0x19, 0x12, 0x58, 0xcd, 0x32, 0xdc, 0x83, 0x3c, 0xe6, 0xeb, 0x46, 0x73, 0xc0, 0x3a, 0x19, 0xbb, 0xac, 0xe8, 0x8c, 0xc5, 0x48, 0x95, 0xf6, 0x36, 0xcc, 0x0c, 0x1e, 0xc8, 0x90, 0x96, 0xd1, 0x1c, 0xe2, 0x35, 0xa2, 0x65, 0xca, 0x17, 0x64, 0x23, 0x2a, 0x68, 0x9a, 0xe8 } - -} -, -{ - "RSAES-OAEP Encryption Example 9.3", - /* Message to be encrypted */ - 17, - { 0xfd, 0x32, 0x64, 0x29, 0xdf, 0x9b, 0x89, 0x0e, 0x09, 0xb5, 0x4b, 0x18, 0xb8, 0xf3, 0x4f, 0x1e, 0x24 } -, - /* Seed */ - 20, - { 0xe8, 0x9b, 0xb0, 0x32, 0xc6, 0xce, 0x62, 0x2c, 0xbd, 0xb5, 0x3b, 0xc9, 0x46, 0x60, 0x14, 0xea, 0x77, 0xf7, 0x77, 0xc0 } -, - /* Encryption */ - 192, - { 0x81, 0xeb, 0xdd, 0x95, 0x05, 0x4b, 0x0c, 0x82, 0x2e, 0xf9, 0xad, 0x76, 0x93, 0xf5, 0xa8, 0x7a, 0xdf, 0xb4, 0xb4, 0xc4, 0xce, 0x70, 0xdf, 0x2d, 0xf8, 0x4e, 0xd4, 0x9c, 0x04, 0xda, 0x58, 0xba, 0x5f, 0xc2, 0x0a, 0x19, 0xe1, 0xa6, 0xe8, 0xb7, 0xa3, 0x90, 0x0b, 0x22, 0x79, 0x6d, 0xc4, 0xe8, 0x69, 0xee, 0x6b, 0x42, 0x79, 0x2d, 0x15, 0xa8, 0xec, 0xeb, 0x56, 0xc0, 0x9c, 0x69, 0x91, 0x4e, 0x81, 0x3c, 0xea, 0x8f, 0x69, 0x31, 0xe4, 0xb8, 0xed, 0x6f, 0x42, 0x1a, 0xf2, 0x98, 0xd5, 0x95, 0xc9, 0x7f, 0x47, 0x89, 0xc7, 0xca, 0xa6, 0x12, 0xc7, 0xef, 0x36, 0x09, 0x84, 0xc2, 0x1b, 0x93, 0xed, 0xc5, 0x40, 0x10, 0x68, 0xb5, 0xaf, 0x4c, 0x78, 0xa8, 0x77, 0x1b, 0x98, 0x4d, 0x53, 0xb8, 0xea, 0x8a, 0xdf, 0x2f, 0x6a, 0x7d, 0x4a, 0x0b, 0xa7, 0x6c, 0x75, 0xe1, 0xdd, 0x9f, 0x65, 0x8f, 0x20, 0xde, 0xd4, 0xa4, 0x60, 0x71, 0xd4, 0x6d, 0x77, 0x91, 0xb5, 0x68, 0x03, 0xd8, 0xfe, 0xa7, 0xf0, 0xb0, 0xf8, 0xe4, 0x1a, 0xe3, 0xf0, 0x93, 0x83, 0xa6, 0xf9, 0x58, 0x5f, 0xe7, 0x75, 0x3e, 0xaa, 0xff, 0xd2, 0xbf, 0x94, 0x56, 0x31, 0x08, 0xbe, 0xec, 0xc2, 0x07, 0xbb, 0xb5, 0x35, 0xf5, 0xfc, 0xc7, 0x05, 0xf0, 0xdd, 0xe9, 0xf7, 0x08, 0xc6, 0x2f, 0x49, 0xa9, 0xc9, 0x03, 0x71, 0xd3 } - -} -, -{ - "RSAES-OAEP Encryption Example 9.4", - /* Message to be encrypted */ - 62, - { 0xf1, 0x45, 0x9b, 0x5f, 0x0c, 0x92, 0xf0, 0x1a, 0x0f, 0x72, 0x3a, 0x2e, 0x56, 0x62, 0x48, 0x4d, 0x8f, 0x8c, 0x0a, 0x20, 0xfc, 0x29, 0xda, 0xd6, 0xac, 0xd4, 0x3b, 0xb5, 0xf3, 0xef, 0xfd, 0xf4, 0xe1, 0xb6, 0x3e, 0x07, 0xfd, 0xfe, 0x66, 0x28, 0xd0, 0xd7, 0x4c, 0xa1, 0x9b, 0xf2, 0xd6, 0x9e, 0x4a, 0x0a, 0xbf, 0x86, 0xd2, 0x93, 0x92, 0x5a, 0x79, 0x67, 0x72, 0xf8, 0x08, 0x8e } -, - /* Seed */ - 20, - { 0x60, 0x6f, 0x3b, 0x99, 0xc0, 0xb9, 0xcc, 0xd7, 0x71, 0xea, 0xa2, 0x9e, 0xa0, 0xe4, 0xc8, 0x84, 0xf3, 0x18, 0x9c, 0xcc } -, - /* Encryption */ - 192, - { 0xbc, 0xc3, 0x5f, 0x94, 0xcd, 0xe6, 0x6c, 0xb1, 0x13, 0x66, 0x25, 0xd6, 0x25, 0xb9, 0x44, 0x32, 0xa3, 0x5b, 0x22, 0xf3, 0xd2, 0xfa, 0x11, 0xa6, 0x13, 0xff, 0x0f, 0xca, 0x5b, 0xd5, 0x7f, 0x87, 0xb9, 0x02, 0xcc, 0xdc, 0x1c, 0xd0, 0xae, 0xbc, 0xb0, 0x71, 0x5e, 0xe8, 0x69, 0xd1, 0xd1, 0xfe, 0x39, 0x5f, 0x67, 0x93, 0x00, 0x3f, 0x5e, 0xca, 0x46, 0x50, 0x59, 0xc8, 0x86, 0x60, 0xd4, 0x46, 0xff, 0x5f, 0x08, 0x18, 0x55, 0x20, 0x22, 0x55, 0x7e, 0x38, 0xc0, 0x8a, 0x67, 0xea, 0xd9, 0x91, 0x26, 0x22, 0x54, 0xf1, 0x06, 0x82, 0x97, 0x5e, 0xc5, 0x63, 0x97, 0x76, 0x85, 0x37, 0xf4, 0x97, 0x7a, 0xf6, 0xd5, 0xf6, 0xaa, 0xce, 0xb7, 0xfb, 0x25, 0xde, 0xc5, 0x93, 0x72, 0x30, 0x23, 0x1f, 0xd8, 0x97, 0x8a, 0xf4, 0x91, 0x19, 0xa2, 0x9f, 0x29, 0xe4, 0x24, 0xab, 0x82, 0x72, 0xb4, 0x75, 0x62, 0x79, 0x2d, 0x5c, 0x94, 0xf7, 0x74, 0xb8, 0x82, 0x9d, 0x0b, 0x0d, 0x9f, 0x1a, 0x8c, 0x9e, 0xdd, 0xf3, 0x75, 0x74, 0xd5, 0xfa, 0x24, 0x8e, 0xef, 0xa9, 0xc5, 0x27, 0x1f, 0xc5, 0xec, 0x25, 0x79, 0xc8, 0x1b, 0xdd, 0x61, 0xb4, 0x10, 0xfa, 0x61, 0xfe, 0x36, 0xe4, 0x24, 0x22, 0x1c, 0x11, 0x3a, 0xdd, 0xb2, 0x75, 0x66, 0x4c, 0x80, 0x1d, 0x34, 0xca, 0x8c, 0x63, 0x51, 0xe4, 0xa8, 0x58 } - -} -, -{ - "RSAES-OAEP Encryption Example 9.5", - /* Message to be encrypted */ - 53, - { 0x53, 0xe6, 0xe8, 0xc7, 0x29, 0xd6, 0xf9, 0xc3, 0x19, 0xdd, 0x31, 0x7e, 0x74, 0xb0, 0xdb, 0x8e, 0x4c, 0xcc, 0xa2, 0x5f, 0x3c, 0x83, 0x05, 0x74, 0x6e, 0x13, 0x7a, 0xc6, 0x3a, 0x63, 0xef, 0x37, 0x39, 0xe7, 0xb5, 0x95, 0xab, 0xb9, 0x6e, 0x8d, 0x55, 0xe5, 0x4f, 0x7b, 0xd4, 0x1a, 0xb4, 0x33, 0x37, 0x8f, 0xfb, 0x91, 0x1d } -, - /* Seed */ - 20, - { 0xfc, 0xbc, 0x42, 0x14, 0x02, 0xe9, 0xec, 0xab, 0xc6, 0x08, 0x2a, 0xfa, 0x40, 0xba, 0x5f, 0x26, 0x52, 0x2c, 0x84, 0x0e } -, - /* Encryption */ - 192, - { 0x23, 0x2a, 0xfb, 0xc9, 0x27, 0xfa, 0x08, 0xc2, 0xf6, 0xa2, 0x7b, 0x87, 0xd4, 0xa5, 0xcb, 0x09, 0xc0, 0x7d, 0xc2, 0x6f, 0xae, 0x73, 0xd7, 0x3a, 0x90, 0x55, 0x88, 0x39, 0xf4, 0xfd, 0x66, 0xd2, 0x81, 0xb8, 0x7e, 0xc7, 0x34, 0xbc, 0xe2, 0x37, 0xba, 0x16, 0x66, 0x98, 0xed, 0x82, 0x91, 0x06, 0xa7, 0xde, 0x69, 0x42, 0xcd, 0x6c, 0xdc, 0xe7, 0x8f, 0xed, 0x8d, 0x2e, 0x4d, 0x81, 0x42, 0x8e, 0x66, 0x49, 0x0d, 0x03, 0x62, 0x64, 0xce, 0xf9, 0x2a, 0xf9, 0x41, 0xd3, 0xe3, 0x50, 0x55, 0xfe, 0x39, 0x81, 0xe1, 0x4d, 0x29, 0xcb, 0xb9, 0xa4, 0xf6, 0x74, 0x73, 0x06, 0x3b, 0xae, 0xc7, 0x9a, 0x11, 0x79, 0xf5, 0xa1, 0x7c, 0x9c, 0x18, 0x32, 0xf2, 0x83, 0x8f, 0xd7, 0xd5, 0xe5, 0x9b, 0xb9, 0x65, 0x9d, 0x56, 0xdc, 0xe8, 0xa0, 0x19, 0xed, 0xef, 0x1b, 0xb3, 0xac, 0xcc, 0x69, 0x7c, 0xc6, 0xcc, 0x7a, 0x77, 0x8f, 0x60, 0xa0, 0x64, 0xc7, 0xf6, 0xf5, 0xd5, 0x29, 0xc6, 0x21, 0x02, 0x62, 0xe0, 0x03, 0xde, 0x58, 0x3e, 0x81, 0xe3, 0x16, 0x7b, 0x89, 0x97, 0x1f, 0xb8, 0xc0, 0xe1, 0x5d, 0x44, 0xff, 0xfe, 0xf8, 0x9b, 0x53, 0xd8, 0xd6, 0x4d, 0xd7, 0x97, 0xd1, 0x59, 0xb5, 0x6d, 0x2b, 0x08, 0xea, 0x53, 0x07, 0xea, 0x12, 0xc2, 0x41, 0xbd, 0x58, 0xd4, 0xee, 0x27, 0x8a, 0x1f, 0x2e } - -} -, -{ - "RSAES-OAEP Encryption Example 9.6", - /* Message to be encrypted */ - 11, - { 0xb6, 0xb2, 0x8e, 0xa2, 0x19, 0x8d, 0x0c, 0x10, 0x08, 0xbc, 0x64 } -, - /* Seed */ - 20, - { 0x23, 0xaa, 0xde, 0x0e, 0x1e, 0x08, 0xbb, 0x9b, 0x9a, 0x78, 0xd2, 0x30, 0x2a, 0x52, 0xf9, 0xc2, 0x1b, 0x2e, 0x1b, 0xa2 } -, - /* Encryption */ - 192, - { 0x43, 0x8c, 0xc7, 0xdc, 0x08, 0xa6, 0x8d, 0xa2, 0x49, 0xe4, 0x25, 0x05, 0xf8, 0x57, 0x3b, 0xa6, 0x0e, 0x2c, 0x27, 0x73, 0xd5, 0xb2, 0x90, 0xf4, 0xcf, 0x9d, 0xff, 0x71, 0x8e, 0x84, 0x20, 0x81, 0xc3, 0x83, 0xe6, 0x70, 0x24, 0xa0, 0xf2, 0x95, 0x94, 0xea, 0x98, 0x7b, 0x9d, 0x25, 0xe4, 0xb7, 0x38, 0xf2, 0x85, 0x97, 0x0d, 0x19, 0x5a, 0xbb, 0x3a, 0x8c, 0x80, 0x54, 0xe3, 0xd7, 0x9d, 0x6b, 0x9c, 0x9a, 0x83, 0x27, 0xba, 0x59, 0x6f, 0x12, 0x59, 0xe2, 0x71, 0x26, 0x67, 0x47, 0x66, 0x90, 0x7d, 0x8d, 0x58, 0x2f, 0xf3, 0xa8, 0x47, 0x61, 0x54, 0x92, 0x9a, 0xdb, 0x1e, 0x6d, 0x12, 0x35, 0xb2, 0xcc, 0xb4, 0xec, 0x8f, 0x66, 0x3b, 0xa9, 0xcc, 0x67, 0x0a, 0x92, 0xbe, 0xbd, 0x85, 0x3c, 0x8d, 0xbf, 0x69, 0xc6, 0x43, 0x6d, 0x01, 0x6f, 0x61, 0xad, 0xd8, 0x36, 0xe9, 0x47, 0x32, 0x45, 0x04, 0x34, 0x20, 0x7f, 0x9f, 0xd4, 0xc4, 0x3d, 0xec, 0x2a, 0x12, 0xa9, 0x58, 0xef, 0xa0, 0x1e, 0xfe, 0x26, 0x69, 0x89, 0x9b, 0x5e, 0x60, 0x4c, 0x25, 0x5c, 0x55, 0xfb, 0x71, 0x66, 0xde, 0x55, 0x89, 0xe3, 0x69, 0x59, 0x7b, 0xb0, 0x91, 0x68, 0xc0, 0x6d, 0xd5, 0xdb, 0x17, 0x7e, 0x06, 0xa1, 0x74, 0x0e, 0xb2, 0xd5, 0xc8, 0x2f, 0xae, 0xca, 0x6d, 0x92, 0xfc, 0xee, 0x99, 0x31, 0xba, 0x9f } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 10: A 2048-bit RSA Key Pair", -{ - /* RSA modulus n */ - 256, - { 0xae, 0x45, 0xed, 0x56, 0x01, 0xce, 0xc6, 0xb8, 0xcc, 0x05, 0xf8, 0x03, 0x93, 0x5c, 0x67, 0x4d, 0xdb, 0xe0, 0xd7, 0x5c, 0x4c, 0x09, 0xfd, 0x79, 0x51, 0xfc, 0x6b, 0x0c, 0xae, 0xc3, 0x13, 0xa8, 0xdf, 0x39, 0x97, 0x0c, 0x51, 0x8b, 0xff, 0xba, 0x5e, 0xd6, 0x8f, 0x3f, 0x0d, 0x7f, 0x22, 0xa4, 0x02, 0x9d, 0x41, 0x3f, 0x1a, 0xe0, 0x7e, 0x4e, 0xbe, 0x9e, 0x41, 0x77, 0xce, 0x23, 0xe7, 0xf5, 0x40, 0x4b, 0x56, 0x9e, 0x4e, 0xe1, 0xbd, 0xcf, 0x3c, 0x1f, 0xb0, 0x3e, 0xf1, 0x13, 0x80, 0x2d, 0x4f, 0x85, 0x5e, 0xb9, 0xb5, 0x13, 0x4b, 0x5a, 0x7c, 0x80, 0x85, 0xad, 0xca, 0xe6, 0xfa, 0x2f, 0xa1, 0x41, 0x7e, 0xc3, 0x76, 0x3b, 0xe1, 0x71, 0xb0, 0xc6, 0x2b, 0x76, 0x0e, 0xde, 0x23, 0xc1, 0x2a, 0xd9, 0x2b, 0x98, 0x08, 0x84, 0xc6, 0x41, 0xf5, 0xa8, 0xfa, 0xc2, 0x6b, 0xda, 0xd4, 0xa0, 0x33, 0x81, 0xa2, 0x2f, 0xe1, 0xb7, 0x54, 0x88, 0x50, 0x94, 0xc8, 0x25, 0x06, 0xd4, 0x01, 0x9a, 0x53, 0x5a, 0x28, 0x6a, 0xfe, 0xb2, 0x71, 0xbb, 0x9b, 0xa5, 0x92, 0xde, 0x18, 0xdc, 0xf6, 0x00, 0xc2, 0xae, 0xea, 0xe5, 0x6e, 0x02, 0xf7, 0xcf, 0x79, 0xfc, 0x14, 0xcf, 0x3b, 0xdc, 0x7c, 0xd8, 0x4f, 0xeb, 0xbb, 0xf9, 0x50, 0xca, 0x90, 0x30, 0x4b, 0x22, 0x19, 0xa7, 0xaa, 0x06, 0x3a, 0xef, 0xa2, 0xc3, 0xc1, 0x98, 0x0e, 0x56, 0x0c, 0xd6, 0x4a, 0xfe, 0x77, 0x95, 0x85, 0xb6, 0x10, 0x76, 0x57, 0xb9, 0x57, 0x85, 0x7e, 0xfd, 0xe6, 0x01, 0x09, 0x88, 0xab, 0x7d, 0xe4, 0x17, 0xfc, 0x88, 0xd8, 0xf3, 0x84, 0xc4, 0xe6, 0xe7, 0x2c, 0x3f, 0x94, 0x3e, 0x0c, 0x31, 0xc0, 0xc4, 0xa5, 0xcc, 0x36, 0xf8, 0x79, 0xd8, 0xa3, 0xac, 0x9d, 0x7d, 0x59, 0x86, 0x0e, 0xaa, 0xda, 0x6b, 0x83, 0xbb } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 256, - { 0x05, 0x6b, 0x04, 0x21, 0x6f, 0xe5, 0xf3, 0x54, 0xac, 0x77, 0x25, 0x0a, 0x4b, 0x6b, 0x0c, 0x85, 0x25, 0xa8, 0x5c, 0x59, 0xb0, 0xbd, 0x80, 0xc5, 0x64, 0x50, 0xa2, 0x2d, 0x5f, 0x43, 0x8e, 0x59, 0x6a, 0x33, 0x3a, 0xa8, 0x75, 0xe2, 0x91, 0xdd, 0x43, 0xf4, 0x8c, 0xb8, 0x8b, 0x9d, 0x5f, 0xc0, 0xd4, 0x99, 0xf9, 0xfc, 0xd1, 0xc3, 0x97, 0xf9, 0xaf, 0xc0, 0x70, 0xcd, 0x9e, 0x39, 0x8c, 0x8d, 0x19, 0xe6, 0x1d, 0xb7, 0xc7, 0x41, 0x0a, 0x6b, 0x26, 0x75, 0xdf, 0xbf, 0x5d, 0x34, 0x5b, 0x80, 0x4d, 0x20, 0x1a, 0xdd, 0x50, 0x2d, 0x5c, 0xe2, 0xdf, 0xcb, 0x09, 0x1c, 0xe9, 0x99, 0x7b, 0xbe, 0xbe, 0x57, 0x30, 0x6f, 0x38, 0x3e, 0x4d, 0x58, 0x81, 0x03, 0xf0, 0x36, 0xf7, 0xe8, 0x5d, 0x19, 0x34, 0xd1, 0x52, 0xa3, 0x23, 0xe4, 0xa8, 0xdb, 0x45, 0x1d, 0x6f, 0x4a, 0x5b, 0x1b, 0x0f, 0x10, 0x2c, 0xc1, 0x50, 0xe0, 0x2f, 0xee, 0xe2, 0xb8, 0x8d, 0xea, 0x4a, 0xd4, 0xc1, 0xba, 0xcc, 0xb2, 0x4d, 0x84, 0x07, 0x2d, 0x14, 0xe1, 0xd2, 0x4a, 0x67, 0x71, 0xf7, 0x40, 0x8e, 0xe3, 0x05, 0x64, 0xfb, 0x86, 0xd4, 0x39, 0x3a, 0x34, 0xbc, 0xf0, 0xb7, 0x88, 0x50, 0x1d, 0x19, 0x33, 0x03, 0xf1, 0x3a, 0x22, 0x84, 0xb0, 0x01, 0xf0, 0xf6, 0x49, 0xea, 0xf7, 0x93, 0x28, 0xd4, 0xac, 0x5c, 0x43, 0x0a, 0xb4, 0x41, 0x49, 0x20, 0xa9, 0x46, 0x0e, 0xd1, 0xb7, 0xbc, 0x40, 0xec, 0x65, 0x3e, 0x87, 0x6d, 0x09, 0xab, 0xc5, 0x09, 0xae, 0x45, 0xb5, 0x25, 0x19, 0x01, 0x16, 0xa0, 0xc2, 0x61, 0x01, 0x84, 0x82, 0x98, 0x50, 0x9c, 0x1c, 0x3b, 0xf3, 0xa4, 0x83, 0xe7, 0x27, 0x40, 0x54, 0xe1, 0x5e, 0x97, 0x07, 0x50, 0x36, 0xe9, 0x89, 0xf6, 0x09, 0x32, 0x80, 0x7b, 0x52, 0x57, 0x75, 0x1e, 0x79 } -, - /* Prime p */ - 128, - { 0xec, 0xf5, 0xae, 0xcd, 0x1e, 0x55, 0x15, 0xff, 0xfa, 0xcb, 0xd7, 0x5a, 0x28, 0x16, 0xc6, 0xeb, 0xf4, 0x90, 0x18, 0xcd, 0xfb, 0x46, 0x38, 0xe1, 0x85, 0xd6, 0x6a, 0x73, 0x96, 0xb6, 0xf8, 0x09, 0x0f, 0x80, 0x18, 0xc7, 0xfd, 0x95, 0xcc, 0x34, 0xb8, 0x57, 0xdc, 0x17, 0xf0, 0xcc, 0x65, 0x16, 0xbb, 0x13, 0x46, 0xab, 0x4d, 0x58, 0x2c, 0xad, 0xad, 0x7b, 0x41, 0x03, 0x35, 0x23, 0x87, 0xb7, 0x03, 0x38, 0xd0, 0x84, 0x04, 0x7c, 0x9d, 0x95, 0x39, 0xb6, 0x49, 0x62, 0x04, 0xb3, 0xdd, 0x6e, 0xa4, 0x42, 0x49, 0x92, 0x07, 0xbe, 0xc0, 0x1f, 0x96, 0x42, 0x87, 0xff, 0x63, 0x36, 0xc3, 0x98, 0x46, 0x58, 0x33, 0x68, 0x46, 0xf5, 0x6e, 0x46, 0x86, 0x18, 0x81, 0xc1, 0x02, 0x33, 0xd2, 0x17, 0x6b, 0xf1, 0x5a, 0x5e, 0x96, 0xdd, 0xc7, 0x80, 0xbc, 0x86, 0x8a, 0xa7, 0x7d, 0x3c, 0xe7, 0x69 } -, - /* Prime q */ - 128, - { 0xbc, 0x46, 0xc4, 0x64, 0xfc, 0x6a, 0xc4, 0xca, 0x78, 0x3b, 0x0e, 0xb0, 0x8a, 0x3c, 0x84, 0x1b, 0x77, 0x2f, 0x7e, 0x9b, 0x2f, 0x28, 0xba, 0xbd, 0x58, 0x8a, 0xe8, 0x85, 0xe1, 0xa0, 0xc6, 0x1e, 0x48, 0x58, 0xa0, 0xfb, 0x25, 0xac, 0x29, 0x99, 0x90, 0xf3, 0x5b, 0xe8, 0x51, 0x64, 0xc2, 0x59, 0xba, 0x11, 0x75, 0xcd, 0xd7, 0x19, 0x27, 0x07, 0x13, 0x51, 0x84, 0x99, 0x2b, 0x6c, 0x29, 0xb7, 0x46, 0xdd, 0x0d, 0x2c, 0xab, 0xe1, 0x42, 0x83, 0x5f, 0x7d, 0x14, 0x8c, 0xc1, 0x61, 0x52, 0x4b, 0x4a, 0x09, 0x94, 0x6d, 0x48, 0xb8, 0x28, 0x47, 0x3f, 0x1c, 0xe7, 0x6b, 0x6c, 0xb6, 0x88, 0x6c, 0x34, 0x5c, 0x03, 0xe0, 0x5f, 0x41, 0xd5, 0x1b, 0x5c, 0x3a, 0x90, 0xa3, 0xf2, 0x40, 0x73, 0xc7, 0xd7, 0x4a, 0x4f, 0xe2, 0x5d, 0x9c, 0xf2, 0x1c, 0x75, 0x96, 0x0f, 0x3f, 0xc3, 0x86, 0x31, 0x83 } -, - /* p's CRT exponent dP */ - 128, - { 0xc7, 0x35, 0x64, 0x57, 0x1d, 0x00, 0xfb, 0x15, 0xd0, 0x8a, 0x3d, 0xe9, 0x95, 0x7a, 0x50, 0x91, 0x5d, 0x71, 0x26, 0xe9, 0x44, 0x2d, 0xac, 0xf4, 0x2b, 0xc8, 0x2e, 0x86, 0x2e, 0x56, 0x73, 0xff, 0x6a, 0x00, 0x8e, 0xd4, 0xd2, 0xe3, 0x74, 0x61, 0x7d, 0xf8, 0x9f, 0x17, 0xa1, 0x60, 0xb4, 0x3b, 0x7f, 0xda, 0x9c, 0xb6, 0xb6, 0xb7, 0x42, 0x18, 0x60, 0x98, 0x15, 0xf7, 0xd4, 0x5c, 0xa2, 0x63, 0xc1, 0x59, 0xaa, 0x32, 0xd2, 0x72, 0xd1, 0x27, 0xfa, 0xf4, 0xbc, 0x8c, 0xa2, 0xd7, 0x73, 0x78, 0xe8, 0xae, 0xb1, 0x9b, 0x0a, 0xd7, 0xda, 0x3c, 0xb3, 0xde, 0x0a, 0xe7, 0x31, 0x49, 0x80, 0xf6, 0x2b, 0x6d, 0x4b, 0x0a, 0x87, 0x5d, 0x1d, 0xf0, 0x3c, 0x1b, 0xae, 0x39, 0xcc, 0xd8, 0x33, 0xef, 0x6c, 0xd7, 0xe2, 0xd9, 0x52, 0x8b, 0xf0, 0x84, 0xd1, 0xf9, 0x69, 0xe7, 0x94, 0xe9, 0xf6, 0xc1 } -, - /* q's CRT exponent dQ */ - 128, - { 0x26, 0x58, 0xb3, 0x7f, 0x6d, 0xf9, 0xc1, 0x03, 0x0b, 0xe1, 0xdb, 0x68, 0x11, 0x7f, 0xa9, 0xd8, 0x7e, 0x39, 0xea, 0x2b, 0x69, 0x3b, 0x7e, 0x6d, 0x3a, 0x2f, 0x70, 0x94, 0x74, 0x13, 0xee, 0xc6, 0x14, 0x2e, 0x18, 0xfb, 0x8d, 0xfc, 0xb6, 0xac, 0x54, 0x5d, 0x7c, 0x86, 0xa0, 0xad, 0x48, 0xf8, 0x45, 0x71, 0x70, 0xf0, 0xef, 0xb2, 0x6b, 0xc4, 0x81, 0x26, 0xc5, 0x3e, 0xfd, 0x1d, 0x16, 0x92, 0x01, 0x98, 0xdc, 0x2a, 0x11, 0x07, 0xdc, 0x28, 0x2d, 0xb6, 0xa8, 0x0c, 0xd3, 0x06, 0x23, 0x60, 0xba, 0x3f, 0xa1, 0x3f, 0x70, 0xe4, 0x31, 0x2f, 0xf1, 0xa6, 0xcd, 0x6b, 0x8f, 0xc4, 0xcd, 0x9c, 0x5c, 0x3d, 0xb1, 0x7c, 0x6d, 0x6a, 0x57, 0x21, 0x2f, 0x73, 0xae, 0x29, 0xf6, 0x19, 0x32, 0x7b, 0xad, 0x59, 0xb1, 0x53, 0x85, 0x85, 0x85, 0xba, 0x4e, 0x28, 0xb6, 0x0a, 0x62, 0xa4, 0x5e, 0x49 } -, - /* CRT coefficient qInv */ - 128, - { 0x6f, 0x38, 0x52, 0x6b, 0x39, 0x25, 0x08, 0x55, 0x34, 0xef, 0x3e, 0x41, 0x5a, 0x83, 0x6e, 0xde, 0x8b, 0x86, 0x15, 0x8a, 0x2c, 0x7c, 0xbf, 0xec, 0xcb, 0x0b, 0xd8, 0x34, 0x30, 0x4f, 0xec, 0x68, 0x3b, 0xa8, 0xd4, 0xf4, 0x79, 0xc4, 0x33, 0xd4, 0x34, 0x16, 0xe6, 0x32, 0x69, 0x62, 0x3c, 0xea, 0x10, 0x07, 0x76, 0xd8, 0x5a, 0xff, 0x40, 0x1d, 0x3f, 0xff, 0x61, 0x0e, 0xe6, 0x54, 0x11, 0xce, 0x3b, 0x13, 0x63, 0xd6, 0x3a, 0x97, 0x09, 0xee, 0xde, 0x42, 0x64, 0x7c, 0xea, 0x56, 0x14, 0x93, 0xd5, 0x45, 0x70, 0xa8, 0x79, 0xc1, 0x86, 0x82, 0xcd, 0x97, 0x71, 0x0b, 0x96, 0x20, 0x5e, 0xc3, 0x11, 0x17, 0xd7, 0x3b, 0x5f, 0x36, 0x22, 0x3f, 0xad, 0xd6, 0xe8, 0xba, 0x90, 0xdd, 0x7c, 0x0e, 0xe6, 0x1d, 0x44, 0xe1, 0x63, 0x25, 0x1e, 0x20, 0xc7, 0xf6, 0x6e, 0xb3, 0x05, 0x11, 0x7c, 0xb8 } - -} -, -{{ - "RSAES-OAEP Encryption Example 10.1", - /* Message to be encrypted */ - 28, - { 0x8b, 0xba, 0x6b, 0xf8, 0x2a, 0x6c, 0x0f, 0x86, 0xd5, 0xf1, 0x75, 0x6e, 0x97, 0x95, 0x68, 0x70, 0xb0, 0x89, 0x53, 0xb0, 0x6b, 0x4e, 0xb2, 0x05, 0xbc, 0x16, 0x94, 0xee } -, - /* Seed */ - 20, - { 0x47, 0xe1, 0xab, 0x71, 0x19, 0xfe, 0xe5, 0x6c, 0x95, 0xee, 0x5e, 0xaa, 0xd8, 0x6f, 0x40, 0xd0, 0xaa, 0x63, 0xbd, 0x33 } -, - /* Encryption */ - 256, - { 0x53, 0xea, 0x5d, 0xc0, 0x8c, 0xd2, 0x60, 0xfb, 0x3b, 0x85, 0x85, 0x67, 0x28, 0x7f, 0xa9, 0x15, 0x52, 0xc3, 0x0b, 0x2f, 0xeb, 0xfb, 0xa2, 0x13, 0xf0, 0xae, 0x87, 0x70, 0x2d, 0x06, 0x8d, 0x19, 0xba, 0xb0, 0x7f, 0xe5, 0x74, 0x52, 0x3d, 0xfb, 0x42, 0x13, 0x9d, 0x68, 0xc3, 0xc5, 0xaf, 0xee, 0xe0, 0xbf, 0xe4, 0xcb, 0x79, 0x69, 0xcb, 0xf3, 0x82, 0xb8, 0x04, 0xd6, 0xe6, 0x13, 0x96, 0x14, 0x4e, 0x2d, 0x0e, 0x60, 0x74, 0x1f, 0x89, 0x93, 0xc3, 0x01, 0x4b, 0x58, 0xb9, 0xb1, 0x95, 0x7a, 0x8b, 0xab, 0xcd, 0x23, 0xaf, 0x85, 0x4f, 0x4c, 0x35, 0x6f, 0xb1, 0x66, 0x2a, 0xa7, 0x2b, 0xfc, 0xc7, 0xe5, 0x86, 0x55, 0x9d, 0xc4, 0x28, 0x0d, 0x16, 0x0c, 0x12, 0x67, 0x85, 0xa7, 0x23, 0xeb, 0xee, 0xbe, 0xff, 0x71, 0xf1, 0x15, 0x94, 0x44, 0x0a, 0xae, 0xf8, 0x7d, 0x10, 0x79, 0x3a, 0x87, 0x74, 0xa2, 0x39, 0xd4, 0xa0, 0x4c, 0x87, 0xfe, 0x14, 0x67, 0xb9, 0xda, 0xf8, 0x52, 0x08, 0xec, 0x6c, 0x72, 0x55, 0x79, 0x4a, 0x96, 0xcc, 0x29, 0x14, 0x2f, 0x9a, 0x8b, 0xd4, 0x18, 0xe3, 0xc1, 0xfd, 0x67, 0x34, 0x4b, 0x0c, 0xd0, 0x82, 0x9d, 0xf3, 0xb2, 0xbe, 0xc6, 0x02, 0x53, 0x19, 0x62, 0x93, 0xc6, 0xb3, 0x4d, 0x3f, 0x75, 0xd3, 0x2f, 0x21, 0x3d, 0xd4, 0x5c, 0x62, 0x73, 0xd5, 0x05, 0xad, 0xf4, 0xcc, 0xed, 0x10, 0x57, 0xcb, 0x75, 0x8f, 0xc2, 0x6a, 0xee, 0xfa, 0x44, 0x12, 0x55, 0xed, 0x4e, 0x64, 0xc1, 0x99, 0xee, 0x07, 0x5e, 0x7f, 0x16, 0x64, 0x61, 0x82, 0xfd, 0xb4, 0x64, 0x73, 0x9b, 0x68, 0xab, 0x5d, 0xaf, 0xf0, 0xe6, 0x3e, 0x95, 0x52, 0x01, 0x68, 0x24, 0xf0, 0x54, 0xbf, 0x4d, 0x3c, 0x8c, 0x90, 0xa9, 0x7b, 0xb6, 0xb6, 0x55, 0x32, 0x84, 0xeb, 0x42, 0x9f, 0xcc } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSAES-OAEP Encryption Example 10.2", - /* Message to be encrypted */ - 16, - { 0xe6, 0xad, 0x18, 0x1f, 0x05, 0x3b, 0x58, 0xa9, 0x04, 0xf2, 0x45, 0x75, 0x10, 0x37, 0x3e, 0x57 } -, - /* Seed */ - 20, - { 0x6d, 0x17, 0xf5, 0xb4, 0xc1, 0xff, 0xac, 0x35, 0x1d, 0x19, 0x5b, 0xf7, 0xb0, 0x9d, 0x09, 0xf0, 0x9a, 0x40, 0x79, 0xcf } -, - /* Encryption */ - 256, - { 0xa2, 0xb1, 0xa4, 0x30, 0xa9, 0xd6, 0x57, 0xe2, 0xfa, 0x1c, 0x2b, 0xb5, 0xed, 0x43, 0xff, 0xb2, 0x5c, 0x05, 0xa3, 0x08, 0xfe, 0x90, 0x93, 0xc0, 0x10, 0x31, 0x79, 0x5f, 0x58, 0x74, 0x40, 0x01, 0x10, 0x82, 0x8a, 0xe5, 0x8f, 0xb9, 0xb5, 0x81, 0xce, 0x9d, 0xdd, 0xd3, 0xe5, 0x49, 0xae, 0x04, 0xa0, 0x98, 0x54, 0x59, 0xbd, 0xe6, 0xc6, 0x26, 0x59, 0x4e, 0x7b, 0x05, 0xdc, 0x42, 0x78, 0xb2, 0xa1, 0x46, 0x5c, 0x13, 0x68, 0x40, 0x88, 0x23, 0xc8, 0x5e, 0x96, 0xdc, 0x66, 0xc3, 0xa3, 0x09, 0x83, 0xc6, 0x39, 0x66, 0x4f, 0xc4, 0x56, 0x9a, 0x37, 0xfe, 0x21, 0xe5, 0xa1, 0x95, 0xb5, 0x77, 0x6e, 0xed, 0x2d, 0xf8, 0xd8, 0xd3, 0x61, 0xaf, 0x68, 0x6e, 0x75, 0x02, 0x29, 0xbb, 0xd6, 0x63, 0xf1, 0x61, 0x86, 0x8a, 0x50, 0x61, 0x5e, 0x0c, 0x33, 0x7b, 0xec, 0x0c, 0xa3, 0x5f, 0xec, 0x0b, 0xb1, 0x9c, 0x36, 0xeb, 0x2e, 0x0b, 0xbc, 0xc0, 0x58, 0x2f, 0xa1, 0xd9, 0x3a, 0xac, 0xdb, 0x06, 0x10, 0x63, 0xf5, 0x9f, 0x2c, 0xe1, 0xee, 0x43, 0x60, 0x5e, 0x5d, 0x89, 0xec, 0xa1, 0x83, 0xd2, 0xac, 0xdf, 0xe9, 0xf8, 0x10, 0x11, 0x02, 0x2a, 0xd3, 0xb4, 0x3a, 0x3d, 0xd4, 0x17, 0xda, 0xc9, 0x4b, 0x4e, 0x11, 0xea, 0x81, 0xb1, 0x92, 0x96, 0x6e, 0x96, 0x6b, 0x18, 0x20, 0x82, 0xe7, 0x19, 0x64, 0x60, 0x7b, 0x4f, 0x80, 0x02, 0xf3, 0x62, 0x99, 0x84, 0x4a, 0x11, 0xf2, 0xae, 0x0f, 0xae, 0xac, 0x2e, 0xae, 0x70, 0xf8, 0xf4, 0xf9, 0x80, 0x88, 0xac, 0xdc, 0xd0, 0xac, 0x55, 0x6e, 0x9f, 0xcc, 0xc5, 0x11, 0x52, 0x19, 0x08, 0xfa, 0xd2, 0x6f, 0x04, 0xc6, 0x42, 0x01, 0x45, 0x03, 0x05, 0x77, 0x87, 0x58, 0xb0, 0x53, 0x8b, 0xf8, 0xb5, 0xbb, 0x14, 0x4a, 0x82, 0x8e, 0x62, 0x97, 0x95 } - -} -, -{ - "RSAES-OAEP Encryption Example 10.3", - /* Message to be encrypted */ - 26, - { 0x51, 0x0a, 0x2c, 0xf6, 0x0e, 0x86, 0x6f, 0xa2, 0x34, 0x05, 0x53, 0xc9, 0x4e, 0xa3, 0x9f, 0xbc, 0x25, 0x63, 0x11, 0xe8, 0x3e, 0x94, 0x45, 0x4b, 0x41, 0x24 } -, - /* Seed */ - 20, - { 0x38, 0x53, 0x87, 0x51, 0x4d, 0xec, 0xcc, 0x7c, 0x74, 0x0d, 0xd8, 0xcd, 0xf9, 0xda, 0xee, 0x49, 0xa1, 0xcb, 0xfd, 0x54 } -, - /* Encryption */ - 256, - { 0x98, 0x86, 0xc3, 0xe6, 0x76, 0x4a, 0x8b, 0x9a, 0x84, 0xe8, 0x41, 0x48, 0xeb, 0xd8, 0xc3, 0xb1, 0xaa, 0x80, 0x50, 0x38, 0x1a, 0x78, 0xf6, 0x68, 0x71, 0x4c, 0x16, 0xd9, 0xcf, 0xd2, 0xa6, 0xed, 0xc5, 0x69, 0x79, 0xc5, 0x35, 0xd9, 0xde, 0xe3, 0xb4, 0x4b, 0x85, 0xc1, 0x8b, 0xe8, 0x92, 0x89, 0x92, 0x37, 0x17, 0x11, 0x47, 0x22, 0x16, 0xd9, 0x5d, 0xda, 0x98, 0xd2, 0xee, 0x83, 0x47, 0xc9, 0xb1, 0x4d, 0xff, 0xdf, 0xf8, 0x4a, 0xa4, 0x8d, 0x25, 0xac, 0x06, 0xf7, 0xd7, 0xe6, 0x53, 0x98, 0xac, 0x96, 0x7b, 0x1c, 0xe9, 0x09, 0x25, 0xf6, 0x7d, 0xce, 0x04, 0x9b, 0x7f, 0x81, 0x2d, 0xb0, 0x74, 0x29, 0x97, 0xa7, 0x4d, 0x44, 0xfe, 0x81, 0xdb, 0xe0, 0xe7, 0xa3, 0xfe, 0xaf, 0x2e, 0x5c, 0x40, 0xaf, 0x88, 0x8d, 0x55, 0x0d, 0xdb, 0xbe, 0x3b, 0xc2, 0x06, 0x57, 0xa2, 0x95, 0x43, 0xf8, 0xfc, 0x29, 0x13, 0xb9, 0xbd, 0x1a, 0x61, 0xb2, 0xab, 0x22, 0x56, 0xec, 0x40, 0x9b, 0xbd, 0x7d, 0xc0, 0xd1, 0x77, 0x17, 0xea, 0x25, 0xc4, 0x3f, 0x42, 0xed, 0x27, 0xdf, 0x87, 0x38, 0xbf, 0x4a, 0xfc, 0x67, 0x66, 0xff, 0x7a, 0xff, 0x08, 0x59, 0x55, 0x5e, 0xe2, 0x83, 0x92, 0x0f, 0x4c, 0x8a, 0x63, 0xc4, 0xa7, 0x34, 0x0c, 0xba, 0xfd, 0xdc, 0x33, 0x9e, 0xcd, 0xb4, 0xb0, 0x51, 0x50, 0x02, 0xf9, 0x6c, 0x93, 0x2b, 0x5b, 0x79, 0x16, 0x7a, 0xf6, 0x99, 0xc0, 0xad, 0x3f, 0xcc, 0xfd, 0xf0, 0xf4, 0x4e, 0x85, 0xa7, 0x02, 0x62, 0xbf, 0x2e, 0x18, 0xfe, 0x34, 0xb8, 0x50, 0x58, 0x99, 0x75, 0xe8, 0x67, 0xff, 0x96, 0x9d, 0x48, 0xea, 0xbf, 0x21, 0x22, 0x71, 0x54, 0x6c, 0xdc, 0x05, 0xa6, 0x9e, 0xcb, 0x52, 0x6e, 0x52, 0x87, 0x0c, 0x83, 0x6f, 0x30, 0x7b, 0xd7, 0x98, 0x78, 0x0e, 0xde } - -} -, -{ - "RSAES-OAEP Encryption Example 10.4", - /* Message to be encrypted */ - 36, - { 0xbc, 0xdd, 0x19, 0x0d, 0xa3, 0xb7, 0xd3, 0x00, 0xdf, 0x9a, 0x06, 0xe2, 0x2c, 0xaa, 0xe2, 0xa7, 0x5f, 0x10, 0xc9, 0x1f, 0xf6, 0x67, 0xb7, 0xc1, 0x6b, 0xde, 0x8b, 0x53, 0x06, 0x4a, 0x26, 0x49, 0xa9, 0x40, 0x45, 0xc9 } -, - /* Seed */ - 20, - { 0x5c, 0xac, 0xa6, 0xa0, 0xf7, 0x64, 0x16, 0x1a, 0x96, 0x84, 0xf8, 0x5d, 0x92, 0xb6, 0xe0, 0xef, 0x37, 0xca, 0x8b, 0x65 } -, - /* Encryption */ - 256, - { 0x63, 0x18, 0xe9, 0xfb, 0x5c, 0x0d, 0x05, 0xe5, 0x30, 0x7e, 0x16, 0x83, 0x43, 0x6e, 0x90, 0x32, 0x93, 0xac, 0x46, 0x42, 0x35, 0x8a, 0xaa, 0x22, 0x3d, 0x71, 0x63, 0x01, 0x3a, 0xba, 0x87, 0xe2, 0xdf, 0xda, 0x8e, 0x60, 0xc6, 0x86, 0x0e, 0x29, 0xa1, 0xe9, 0x26, 0x86, 0x16, 0x3e, 0xa0, 0xb9, 0x17, 0x5f, 0x32, 0x9c, 0xa3, 0xb1, 0x31, 0xa1, 0xed, 0xd3, 0xa7, 0x77, 0x59, 0xa8, 0xb9, 0x7b, 0xad, 0x6a, 0x4f, 0x8f, 0x43, 0x96, 0xf2, 0x8c, 0xf6, 0xf3, 0x9c, 0xa5, 0x81, 0x12, 0xe4, 0x81, 0x60, 0xd6, 0xe2, 0x03, 0xda, 0xa5, 0x85, 0x6f, 0x3a, 0xca, 0x5f, 0xfe, 0xd5, 0x77, 0xaf, 0x49, 0x94, 0x08, 0xe3, 0xdf, 0xd2, 0x33, 0xe3, 0xe6, 0x04, 0xdb, 0xe3, 0x4a, 0x9c, 0x4c, 0x90, 0x82, 0xde, 0x65, 0x52, 0x7c, 0xac, 0x63, 0x31, 0xd2, 0x9d, 0xc8, 0x0e, 0x05, 0x08, 0xa0, 0xfa, 0x71, 0x22, 0xe7, 0xf3, 0x29, 0xf6, 0xcc, 0xa5, 0xcf, 0xa3, 0x4d, 0x4d, 0x1d, 0xa4, 0x17, 0x80, 0x54, 0x57, 0xe0, 0x08, 0xbe, 0xc5, 0x49, 0xe4, 0x78, 0xff, 0x9e, 0x12, 0xa7, 0x63, 0xc4, 0x77, 0xd1, 0x5b, 0xbb, 0x78, 0xf5, 0xb6, 0x9b, 0xd5, 0x78, 0x30, 0xfc, 0x2c, 0x4e, 0xd6, 0x86, 0xd7, 0x9b, 0xc7, 0x2a, 0x95, 0xd8, 0x5f, 0x88, 0x13, 0x4c, 0x6b, 0x0a, 0xfe, 0x56, 0xa8, 0xcc, 0xfb, 0xc8, 0x55, 0x82, 0x8b, 0xb3, 0x39, 0xbd, 0x17, 0x90, 0x9c, 0xf1, 0xd7, 0x0d, 0xe3, 0x33, 0x5a, 0xe0, 0x70, 0x39, 0x09, 0x3e, 0x60, 0x6d, 0x65, 0x53, 0x65, 0xde, 0x65, 0x50, 0xb8, 0x72, 0xcd, 0x6d, 0xe1, 0xd4, 0x40, 0xee, 0x03, 0x1b, 0x61, 0x94, 0x5f, 0x62, 0x9a, 0xd8, 0xa3, 0x53, 0xb0, 0xd4, 0x09, 0x39, 0xe9, 0x6a, 0x3c, 0x45, 0x0d, 0x2a, 0x8d, 0x5e, 0xee, 0x9f, 0x67, 0x80, 0x93, 0xc8 } - -} -, -{ - "RSAES-OAEP Encryption Example 10.5", - /* Message to be encrypted */ - 23, - { 0xa7, 0xdd, 0x6c, 0x7d, 0xc2, 0x4b, 0x46, 0xf9, 0xdd, 0x5f, 0x1e, 0x91, 0xad, 0xa4, 0xc3, 0xb3, 0xdf, 0x94, 0x7e, 0x87, 0x72, 0x32, 0xa9 } -, - /* Seed */ - 20, - { 0x95, 0xbc, 0xa9, 0xe3, 0x85, 0x98, 0x94, 0xb3, 0xdd, 0x86, 0x9f, 0xa7, 0xec, 0xd5, 0xbb, 0xc6, 0x40, 0x1b, 0xf3, 0xe4 } -, - /* Encryption */ - 256, - { 0x75, 0x29, 0x08, 0x72, 0xcc, 0xfd, 0x4a, 0x45, 0x05, 0x66, 0x0d, 0x65, 0x1f, 0x56, 0xda, 0x6d, 0xaa, 0x09, 0xca, 0x13, 0x01, 0xd8, 0x90, 0x63, 0x2f, 0x6a, 0x99, 0x2f, 0x3d, 0x56, 0x5c, 0xee, 0x46, 0x4a, 0xfd, 0xed, 0x40, 0xed, 0x3b, 0x5b, 0xe9, 0x35, 0x67, 0x14, 0xea, 0x5a, 0xa7, 0x65, 0x5f, 0x4a, 0x13, 0x66, 0xc2, 0xf1, 0x7c, 0x72, 0x8f, 0x6f, 0x2c, 0x5a, 0x5d, 0x1f, 0x8e, 0x28, 0x42, 0x9b, 0xc4, 0xe6, 0xf8, 0xf2, 0xcf, 0xf8, 0xda, 0x8d, 0xc0, 0xe0, 0xa9, 0x80, 0x8e, 0x45, 0xfd, 0x09, 0xea, 0x2f, 0xa4, 0x0c, 0xb2, 0xb6, 0xce, 0x6f, 0xff, 0xf5, 0xc0, 0xe1, 0x59, 0xd1, 0x1b, 0x68, 0xd9, 0x0a, 0x85, 0xf7, 0xb8, 0x4e, 0x10, 0x3b, 0x09, 0xe6, 0x82, 0x66, 0x64, 0x80, 0xc6, 0x57, 0x50, 0x5c, 0x09, 0x29, 0x25, 0x94, 0x68, 0xa3, 0x14, 0x78, 0x6d, 0x74, 0xea, 0xb1, 0x31, 0x57, 0x3c, 0xf2, 0x34, 0xbf, 0x57, 0xdb, 0x7d, 0x9e, 0x66, 0xcc, 0x67, 0x48, 0x19, 0x2e, 0x00, 0x2d, 0xc0, 0xde, 0xea, 0x93, 0x05, 0x85, 0xf0, 0x83, 0x1f, 0xdc, 0xd9, 0xbc, 0x33, 0xd5, 0x1f, 0x79, 0xed, 0x2f, 0xfc, 0x16, 0xbc, 0xf4, 0xd5, 0x98, 0x12, 0xfc, 0xeb, 0xca, 0xa3, 0xf9, 0x06, 0x9b, 0x0e, 0x44, 0x56, 0x86, 0xd6, 0x44, 0xc2, 0x5c, 0xcf, 0x63, 0xb4, 0x56, 0xee, 0x5f, 0xa6, 0xff, 0xe9, 0x6f, 0x19, 0xcd, 0xf7, 0x51, 0xfe, 0xd9, 0xea, 0xf3, 0x59, 0x57, 0x75, 0x4d, 0xbf, 0x4b, 0xfe, 0xa5, 0x21, 0x6a, 0xa1, 0x84, 0x4d, 0xc5, 0x07, 0xcb, 0x2d, 0x08, 0x0e, 0x72, 0x2e, 0xba, 0x15, 0x03, 0x08, 0xc2, 0xb5, 0xff, 0x11, 0x93, 0x62, 0x0f, 0x17, 0x66, 0xec, 0xf4, 0x48, 0x1b, 0xaf, 0xb9, 0x43, 0xbd, 0x29, 0x28, 0x77, 0xf2, 0x13, 0x6c, 0xa4, 0x94, 0xab, 0xa0 } - -} -, -{ - "RSAES-OAEP Encryption Example 10.6", - /* Message to be encrypted */ - 45, - { 0xea, 0xf1, 0xa7, 0x3a, 0x1b, 0x0c, 0x46, 0x09, 0x53, 0x7d, 0xe6, 0x9c, 0xd9, 0x22, 0x8b, 0xbc, 0xfb, 0x9a, 0x8c, 0xa8, 0xc6, 0xc3, 0xef, 0xaf, 0x05, 0x6f, 0xe4, 0xa7, 0xf4, 0x63, 0x4e, 0xd0, 0x0b, 0x7c, 0x39, 0xec, 0x69, 0x22, 0xd7, 0xb8, 0xea, 0x2c, 0x04, 0xeb, 0xac } -, - /* Seed */ - 20, - { 0x9f, 0x47, 0xdd, 0xf4, 0x2e, 0x97, 0xee, 0xa8, 0x56, 0xa9, 0xbd, 0xbc, 0x71, 0x4e, 0xb3, 0xac, 0x22, 0xf6, 0xeb, 0x32 } -, - /* Encryption */ - 256, - { 0x2d, 0x20, 0x7a, 0x73, 0x43, 0x2a, 0x8f, 0xb4, 0xc0, 0x30, 0x51, 0xb3, 0xf7, 0x3b, 0x28, 0xa6, 0x17, 0x64, 0x09, 0x8d, 0xfa, 0x34, 0xc4, 0x7a, 0x20, 0x99, 0x5f, 0x81, 0x15, 0xaa, 0x68, 0x16, 0x67, 0x9b, 0x55, 0x7e, 0x82, 0xdb, 0xee, 0x58, 0x49, 0x08, 0xc6, 0xe6, 0x97, 0x82, 0xd7, 0xde, 0xb3, 0x4d, 0xbd, 0x65, 0xaf, 0x06, 0x3d, 0x57, 0xfc, 0xa7, 0x6a, 0x5f, 0xd0, 0x69, 0x49, 0x2f, 0xd6, 0x06, 0x8d, 0x99, 0x84, 0xd2, 0x09, 0x35, 0x05, 0x65, 0xa6, 0x2e, 0x5c, 0x77, 0xf2, 0x30, 0x38, 0xc1, 0x2c, 0xb1, 0x0c, 0x66, 0x34, 0x70, 0x9b, 0x54, 0x7c, 0x46, 0xf6, 0xb4, 0xa7, 0x09, 0xbd, 0x85, 0xca, 0x12, 0x2d, 0x74, 0x46, 0x5e, 0xf9, 0x77, 0x62, 0xc2, 0x97, 0x63, 0xe0, 0x6d, 0xbc, 0x7a, 0x9e, 0x73, 0x8c, 0x78, 0xbf, 0xca, 0x01, 0x02, 0xdc, 0x5e, 0x79, 0xd6, 0x5b, 0x97, 0x3f, 0x28, 0x24, 0x0c, 0xaa, 0xb2, 0xe1, 0x61, 0xa7, 0x8b, 0x57, 0xd2, 0x62, 0x45, 0x7e, 0xd8, 0x19, 0x5d, 0x53, 0xe3, 0xc7, 0xae, 0x9d, 0xa0, 0x21, 0x88, 0x3c, 0x6d, 0xb7, 0xc2, 0x4a, 0xfd, 0xd2, 0x32, 0x2e, 0xac, 0x97, 0x2a, 0xd3, 0xc3, 0x54, 0xc5, 0xfc, 0xef, 0x1e, 0x14, 0x6c, 0x3a, 0x02, 0x90, 0xfb, 0x67, 0xad, 0xf0, 0x07, 0x06, 0x6e, 0x00, 0x42, 0x8d, 0x2c, 0xec, 0x18, 0xce, 0x58, 0xf9, 0x32, 0x86, 0x98, 0xde, 0xfe, 0xf4, 0xb2, 0xeb, 0x5e, 0xc7, 0x69, 0x18, 0xfd, 0xe1, 0xc1, 0x98, 0xcb, 0xb3, 0x8b, 0x7a, 0xfc, 0x67, 0x62, 0x6a, 0x9a, 0xef, 0xec, 0x43, 0x22, 0xbf, 0xd9, 0x0d, 0x25, 0x63, 0x48, 0x1c, 0x9a, 0x22, 0x1f, 0x78, 0xc8, 0x27, 0x2c, 0x82, 0xd1, 0xb6, 0x2a, 0xb9, 0x14, 0xe1, 0xc6, 0x9f, 0x6a, 0xf6, 0xef, 0x30, 0xca, 0x52, 0x60, 0xdb, 0x4a, 0x46 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -}; - diff --git a/notes/rsa-testvectors/oaep-vect.txt b/notes/rsa-testvectors/oaep-vect.txt deleted file mode 100644 index e92120ce..00000000 --- a/notes/rsa-testvectors/oaep-vect.txt +++ /dev/null @@ -1,2212 +0,0 @@ -========================= -TEST VECTORS FOR RSA-OAEP -========================= - -# This file contains test vectors for the -# RSAES-OAEP encryption scheme as defined in -# PKCS #1 v2.1. 10 RSA keys of different sizes -# have been generated. For each key, 6 random -# messages of length between 1 and 64 octets -# have been RSAES-OAEP encrypted via a random -# seed of length 20 octets. -# -# The underlying hash function is SHA-1; the -# mask generation function is MGF1 with SHA-1 -# as specified in PKCS #1 v2.1. -# -# Integers are represented by strings of octets -# with the leftmost octet being the most -# significant octet. For example, -# -# 9,202,000 = (0x)8c 69 50. -# -# Key lengths: -# -# Key 1: 1024 bits -# Key 2: 1025 bits -# Key 3: 1026 bits -# Key 4: 1027 bits -# Key 5: 1028 bits -# Key 6: 1029 bits -# Key 7: 1030 bits -# Key 8: 1031 bits -# Key 9: 1536 bits -# Key 10: 2048 bits -# ============================================= - -# ================================== -# Example 1: A 1024-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -a8 b3 b2 84 af 8e b5 0b 38 70 34 a8 60 f1 46 c4 -91 9f 31 87 63 cd 6c 55 98 c8 ae 48 11 a1 e0 ab -c4 c7 e0 b0 82 d6 93 a5 e7 fc ed 67 5c f4 66 85 -12 77 2c 0c bc 64 a7 42 c6 c6 30 f5 33 c8 cc 72 -f6 2a e8 33 c4 0b f2 58 42 e9 84 bb 78 bd bf 97 -c0 10 7d 55 bd b6 62 f5 c4 e0 fa b9 84 5c b5 14 -8e f7 39 2d d3 aa ff 93 ae 1e 6b 66 7b b3 d4 24 -76 16 d4 f5 ba 10 d4 cf d2 26 de 88 d3 9f 16 fb - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -53 33 9c fd b7 9f c8 46 6a 65 5c 73 16 ac a8 5c -55 fd 8f 6d d8 98 fd af 11 95 17 ef 4f 52 e8 fd -8e 25 8d f9 3f ee 18 0f a0 e4 ab 29 69 3c d8 3b -15 2a 55 3d 4a c4 d1 81 2b 8b 9f a5 af 0e 7f 55 -fe 73 04 df 41 57 09 26 f3 31 1f 15 c4 d6 5a 73 -2c 48 31 16 ee 3d 3d 2d 0a f3 54 9a d9 bf 7c bf -b7 8a d8 84 f8 4d 5b eb 04 72 4d c7 36 9b 31 de -f3 7d 0c f5 39 e9 cf cd d3 de 65 37 29 ea d5 d1 - -# Prime p: -d3 27 37 e7 26 7f fe 13 41 b2 d5 c0 d1 50 a8 1b -58 6f b3 13 2b ed 2f 8d 52 62 86 4a 9c b9 f3 0a -f3 8b e4 48 59 8d 41 3a 17 2e fb 80 2c 21 ac f1 -c1 1c 52 0c 2f 26 a4 71 dc ad 21 2e ac 7c a3 9d - -# Prime q: -cc 88 53 d1 d5 4d a6 30 fa c0 04 f4 71 f2 81 c7 -b8 98 2d 82 24 a4 90 ed be b3 3d 3e 3d 5c c9 3c -47 65 70 3d 1d d7 91 64 2f 1f 11 6a 0d d8 52 be -24 19 b2 af 72 bf e9 a0 30 e8 60 b0 28 8b 5d 77 - -# p's CRT exponent dP: -0e 12 bf 17 18 e9 ce f5 59 9b a1 c3 88 2f e8 04 -6a 90 87 4e ef ce 8f 2c cc 20 e4 f2 74 1f b0 a3 -3a 38 48 ae c9 c9 30 5f be cb d2 d7 68 19 96 7d -46 71 ac c6 43 1e 40 37 96 8d b3 78 78 e6 95 c1 - -# q's CRT exponent dQ: -95 29 7b 0f 95 a2 fa 67 d0 07 07 d6 09 df d4 fc -05 c8 9d af c2 ef 6d 6e a5 5b ec 77 1e a3 33 73 -4d 92 51 e7 90 82 ec da 86 6e fe f1 3c 45 9e 1a -63 13 86 b7 e3 54 c8 99 f5 f1 12 ca 85 d7 15 83 - -# CRT coefficient qInv: -4f 45 6c 50 24 93 bd c0 ed 2a b7 56 a3 a6 ed 4d -67 35 2a 69 7d 42 16 e9 32 12 b1 27 a6 3d 54 11 -ce 6f a9 8d 5d be fd 73 26 3e 37 28 14 27 43 81 -81 66 ed 7d d6 36 87 dd 2a 8c a1 d2 f4 fb d8 e1 - -# --------------------------------- -# RSAES-OAEP Encryption Example 1.1 -# --------------------------------- - -# Message to be encrypted: -66 28 19 4e 12 07 3d b0 3b a9 4c da 9e f9 53 23 -97 d5 0d ba 79 b9 87 00 4a fe fe 34 - -# Seed: -18 b7 76 ea 21 06 9d 69 77 6a 33 e9 6b ad 48 e1 -dd a0 a5 ef - -# Encryption: -35 4f e6 7b 4a 12 6d 5d 35 fe 36 c7 77 79 1a 3f -7b a1 3d ef 48 4e 2d 39 08 af f7 22 fa d4 68 fb -21 69 6d e9 5d 0b e9 11 c2 d3 17 4f 8a fc c2 01 -03 5f 7b 6d 8e 69 40 2d e5 45 16 18 c2 1a 53 5f -a9 d7 bf c5 b8 dd 9f c2 43 f8 cf 92 7d b3 13 22 -d6 e8 81 ea a9 1a 99 61 70 e6 57 a0 5a 26 64 26 -d9 8c 88 00 3f 84 77 c1 22 70 94 a0 d9 fa 1e 8c -40 24 30 9c e1 ec cc b5 21 00 35 d4 7a c7 2e 8a - -# --------------------------------- -# RSAES-OAEP Encryption Example 1.2 -# --------------------------------- - -# Message to be encrypted: -75 0c 40 47 f5 47 e8 e4 14 11 85 65 23 29 8a c9 -ba e2 45 ef af 13 97 fb e5 6f 9d d5 - -# Seed: -0c c7 42 ce 4a 9b 7f 32 f9 51 bc b2 51 ef d9 25 -fe 4f e3 5f - -# Encryption: -64 0d b1 ac c5 8e 05 68 fe 54 07 e5 f9 b7 01 df -f8 c3 c9 1e 71 6c 53 6f c7 fc ec 6c b5 b7 1c 11 -65 98 8d 4a 27 9e 15 77 d7 30 fc 7a 29 93 2e 3f -00 c8 15 15 23 6d 8d 8e 31 01 7a 7a 09 df 43 52 -d9 04 cd eb 79 aa 58 3a dc c3 1e a6 98 a4 c0 52 -83 da ba 90 89 be 54 91 f6 7c 1a 4e e4 8d c7 4b -bb e6 64 3a ef 84 66 79 b4 cb 39 5a 35 2d 5e d1 -15 91 2d f6 96 ff e0 70 29 32 94 6d 71 49 2b 44 - -# --------------------------------- -# RSAES-OAEP Encryption Example 1.3 -# --------------------------------- - -# Message to be encrypted: -d9 4a e0 83 2e 64 45 ce 42 33 1c b0 6d 53 1a 82 -b1 db 4b aa d3 0f 74 6d c9 16 df 24 d4 e3 c2 45 -1f ff 59 a6 42 3e b0 e1 d0 2d 4f e6 46 cf 69 9d -fd 81 8c 6e 97 b0 51 - -# Seed: -25 14 df 46 95 75 5a 67 b2 88 ea f4 90 5c 36 ee -c6 6f d2 fd - -# Encryption: -42 37 36 ed 03 5f 60 26 af 27 6c 35 c0 b3 74 1b -36 5e 5f 76 ca 09 1b 4e 8c 29 e2 f0 be fe e6 03 -59 5a a8 32 2d 60 2d 2e 62 5e 95 eb 81 b2 f1 c9 -72 4e 82 2e ca 76 db 86 18 cf 09 c5 34 35 03 a4 -36 08 35 b5 90 3b c6 37 e3 87 9f b0 5e 0e f3 26 -85 d5 ae c5 06 7c d7 cc 96 fe 4b 26 70 b6 ea c3 -06 6b 1f cf 56 86 b6 85 89 aa fb 7d 62 9b 02 d8 -f8 62 5c a3 83 36 24 d4 80 0f b0 81 b1 cf 94 eb - -# --------------------------------- -# RSAES-OAEP Encryption Example 1.4 -# --------------------------------- - -# Message to be encrypted: -52 e6 50 d9 8e 7f 2a 04 8b 4f 86 85 21 53 b9 7e -01 dd 31 6f 34 6a 19 f6 7a 85 - -# Seed: -c4 43 5a 3e 1a 18 a6 8b 68 20 43 62 90 a3 7c ef -b8 5d b3 fb - -# Encryption: -45 ea d4 ca 55 1e 66 2c 98 00 f1 ac a8 28 3b 05 -25 e6 ab ae 30 be 4b 4a ba 76 2f a4 0f d3 d3 8e -22 ab ef c6 97 94 f6 eb bb c0 5d db b1 12 16 24 -7d 2f 41 2f d0 fb a8 7c 6e 3a cd 88 88 13 64 6f -d0 e4 8e 78 52 04 f9 c3 f7 3d 6d 82 39 56 27 22 -dd dd 87 71 fe c4 8b 83 a3 1e e6 f5 92 c4 cf d4 -bc 88 17 4f 3b 13 a1 12 aa e3 b9 f7 b8 0e 0f c6 -f7 25 5b a8 80 dc 7d 80 21 e2 2a d6 a8 5f 07 55 - -# --------------------------------- -# RSAES-OAEP Encryption Example 1.5 -# --------------------------------- - -# Message to be encrypted: -8d a8 9f d9 e5 f9 74 a2 9f ef fb 46 2b 49 18 0f -6c f9 e8 02 - -# Seed: -b3 18 c4 2d f3 be 0f 83 fe a8 23 f5 a7 b4 7e d5 -e4 25 a3 b5 - -# Encryption: -36 f6 e3 4d 94 a8 d3 4d aa cb a3 3a 21 39 d0 0a -d8 5a 93 45 a8 60 51 e7 30 71 62 00 56 b9 20 e2 -19 00 58 55 a2 13 a0 f2 38 97 cd cd 73 1b 45 25 -7c 77 7f e9 08 20 2b ef dd 0b 58 38 6b 12 44 ea -0c f5 39 a0 5d 5d 10 32 9d a4 4e 13 03 0f d7 60 -dc d6 44 cf ef 20 94 d1 91 0d 3f 43 3e 1c 7c 6d -d1 8b c1 f2 df 7f 64 3d 66 2f b9 dd 37 ea d9 05 -91 90 f4 fa 66 ca 39 e8 69 c4 eb 44 9c bd c4 39 - -# --------------------------------- -# RSAES-OAEP Encryption Example 1.6 -# --------------------------------- - -# Message to be encrypted: -26 52 10 50 84 42 71 - -# Seed: -e4 ec 09 82 c2 33 6f 3a 67 7f 6a 35 61 74 eb 0c -e8 87 ab c2 - -# Encryption: -42 ce e2 61 7b 1e ce a4 db 3f 48 29 38 6f bd 61 -da fb f0 38 e1 80 d8 37 c9 63 66 df 24 c0 97 b4 -ab 0f ac 6b df 59 0d 82 1c 9f 10 64 2e 68 1a d0 -5b 8d 78 b3 78 c0 f4 6c e2 fa d6 3f 74 e0 ad 3d -f0 6b 07 5d 7e b5 f5 63 6f 8d 40 3b 90 59 ca 76 -1b 5c 62 bb 52 aa 45 00 2e a7 0b aa ce 08 de d2 -43 b9 d8 cb d6 2a 68 ad e2 65 83 2b 56 56 4e 43 -a6 fa 42 ed 19 9a 09 97 69 74 2d f1 53 9e 82 55 - -# ============================================= - -# ================================== -# Example 2: A 1025-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -01 94 7c 7f ce 90 42 5f 47 27 9e 70 85 1f 25 d5 -e6 23 16 fe 8a 1d f1 93 71 e3 e6 28 e2 60 54 3e -49 01 ef 60 81 f6 8c 0b 81 41 19 0d 2a e8 da ba -7d 12 50 ec 6d b6 36 e9 44 ec 37 22 87 7c 7c 1d -0a 67 f1 4b 16 94 c5 f0 37 94 51 a4 3e 49 a3 2d -de 83 67 0b 73 da 91 a1 c9 9b c2 3b 43 6a 60 05 -5c 61 0f 0b af 99 c1 a0 79 56 5b 95 a3 f1 52 66 -32 d1 d4 da 60 f2 0e da 25 e6 53 c4 f0 02 76 6f -45 - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -08 23 f2 0f ad b5 da 89 08 8a 9d 00 89 3e 21 fa -4a 1b 11 fb c9 3c 64 a3 be 0b aa ea 97 fb 3b 93 -c3 ff 71 37 04 c1 9c 96 3c 1d 10 7a ae 99 05 47 -39 f7 9e 02 e1 86 de 86 f8 7a 6d de fe a6 d8 cc -d1 d3 c8 1a 47 bf a7 25 5b e2 06 01 a4 a4 b2 f0 -8a 16 7b 5e 27 9d 71 5b 1b 45 5b dd 7e ab 24 59 -41 d9 76 8b 9a ce fb 3c cd a5 95 2d a3 ce e7 25 -25 b4 50 16 63 a8 ee 15 c9 e9 92 d9 24 62 fe 39 - -# Prime p: -01 59 db de 04 a3 3e f0 6f b6 08 b8 0b 19 0f 4d -3e 22 bc c1 3a c8 e4 a0 81 03 3a bf a4 16 ed b0 -b3 38 aa 08 b5 73 09 ea 5a 52 40 e7 dc 6e 54 37 -8c 69 41 4c 31 d9 7d db 1f 40 6d b3 76 9c c4 1a -43 - -# Prime q: -01 2b 65 2f 30 40 3b 38 b4 09 95 fd 6f f4 1a 1a -cc 8a da 70 37 32 36 b7 20 2d 39 b2 ee 30 cf b4 -6d b0 95 11 f6 f3 07 cc 61 cc 21 60 6c 18 a7 5b -8a 62 f8 22 df 03 1b a0 df 0d af d5 50 6f 56 8b -d7 - -# p's CRT exponent dP: -43 6e f5 08 de 73 65 19 c2 da 4c 58 0d 98 c8 2c -b7 45 2a 3f b5 ef ad c3 b9 c7 78 9a 1b c6 58 4f -79 5a dd bb d3 24 39 c7 46 86 55 2e cb 6c 2c 30 -7a 4d 3a f7 f5 39 ee c1 57 24 8c 7b 31 f1 a2 55 - -# q's CRT exponent dQ: -01 2b 15 a8 9f 3d fb 2b 39 07 3e 73 f0 2b dd 0c -1a 7b 37 9d d4 35 f0 5c dd e2 ef f9 e4 62 94 8b -7c ec 62 ee 90 50 d5 e0 81 6e 07 85 a8 56 b4 91 -08 dc b7 5f 36 83 87 4d 1c a6 32 9a 19 01 30 66 -ff - -# CRT coefficient qInv: -02 70 db 17 d5 91 4b 01 8d 76 11 8b 24 38 9a 73 -50 ec 83 6b 00 63 a2 17 21 23 6f d8 ed b6 d8 9b -51 e7 ee b8 7b 61 1b 71 32 cb 7e a7 35 6c 23 15 -1c 1e 77 51 50 7c 78 6d 9e e1 79 41 70 a8 c8 e8 - -# --------------------------------- -# RSAES-OAEP Encryption Example 2.1 -# --------------------------------- - -# Message to be encrypted: -8f f0 0c aa 60 5c 70 28 30 63 4d 9a 6c 3d 42 c6 -52 b5 8c f1 d9 2f ec 57 0b ee e7 - -# Seed: -8c 40 7b 5e c2 89 9e 50 99 c5 3e 8c e7 93 bf 94 -e7 1b 17 82 - -# Encryption: -01 81 af 89 22 b9 fc b4 d7 9d 92 eb e1 98 15 99 -2f c0 c1 43 9d 8b cd 49 13 98 a0 f4 ad 3a 32 9a -5b d9 38 55 60 db 53 26 83 c8 b7 da 04 e4 b1 2a -ed 6a ac df 47 1c 34 c9 cd a8 91 ad dc c2 df 34 -56 65 3a a6 38 2e 9a e5 9b 54 45 52 57 eb 09 9d -56 2b be 10 45 3f 2b 6d 13 c5 9c 02 e1 0f 1f 8a -bb 5d a0 d0 57 09 32 da cf 2d 09 01 db 72 9d 0f -ef cc 05 4e 70 96 8e a5 40 c8 1b 04 bc ae fe 72 -0e - -# --------------------------------- -# RSAES-OAEP Encryption Example 2.2 -# --------------------------------- - -# Message to be encrypted: -2d - -# Seed: -b6 00 cf 3c 2e 50 6d 7f 16 77 8c 91 0d 3a 8b 00 -3e ee 61 d5 - -# Encryption: -01 87 59 ff 1d f6 3b 27 92 41 05 62 31 44 16 a8 -ae af 2a c6 34 b4 6f 94 0a b8 2d 64 db f1 65 ee -e3 30 11 da 74 9d 4b ab 6e 2f cd 18 12 9c 9e 49 -27 7d 84 53 11 2b 42 9a 22 2a 84 71 b0 70 99 39 -98 e7 58 86 1c 4d 3f 6d 74 9d 91 c4 29 0d 33 2c -7a 4a b3 f7 ea 35 ff 3a 07 d4 97 c9 55 ff 0f fc -95 00 6b 62 c6 d2 96 81 0d 9b fa b0 24 19 6c 79 -34 01 2c 2d f9 78 ef 29 9a ba 23 99 40 cb a1 02 -45 - -# --------------------------------- -# RSAES-OAEP Encryption Example 2.3 -# --------------------------------- - -# Message to be encrypted: -74 fc 88 c5 1b c9 0f 77 af 9d 5e 9a 4a 70 13 3d -4b 4e 0b 34 da 3c 37 c7 ef 8e - -# Seed: -a7 37 68 ae ea a9 1f 9d 8c 1e d6 f9 d2 b6 34 67 -f0 7c ca e3 - -# Encryption: -01 88 02 ba b0 4c 60 32 5e 81 c4 96 23 11 f2 be -7c 2a dc e9 30 41 a0 07 19 c8 8f 95 75 75 f2 c7 -9f 1b 7b c8 ce d1 15 c7 06 b3 11 c0 8a 2d 98 6c -a3 b6 a9 33 6b 14 7c 29 c6 f2 29 40 9d de c6 51 -bd 1f dd 5a 0b 7f 61 0c 99 37 fd b4 a3 a7 62 36 -4b 8b 32 06 b4 ea 48 5f d0 98 d0 8f 63 d4 aa 8b -b2 69 7d 02 7b 75 0c 32 d7 f7 4e af 51 80 d2 e9 -b6 6b 17 cb 2f a5 55 23 bc 28 0d a1 0d 14 be 20 -53 - -# --------------------------------- -# RSAES-OAEP Encryption Example 2.4 -# --------------------------------- - -# Message to be encrypted: -a7 eb 2a 50 36 93 1d 27 d4 e8 91 32 6d 99 69 2f -fa dd a9 bf 7e fd 3e 34 e6 22 c4 ad c0 85 f7 21 -df e8 85 07 2c 78 a2 03 b1 51 73 9b e5 40 fa 8c -15 3a 10 f0 0a - -# Seed: -9a 7b 3b 0e 70 8b d9 6f 81 90 ec ab 4f b9 b2 b3 -80 5a 81 56 - -# Encryption: -00 a4 57 8c bc 17 63 18 a6 38 fb a7 d0 1d f1 57 -46 af 44 d4 f6 cd 96 d7 e7 c4 95 cb f4 25 b0 9c -64 9d 32 bf 88 6d a4 8f ba f9 89 a2 11 71 87 ca -fb 1f b5 80 31 76 90 e3 cc d4 46 92 0b 7a f8 2b -31 db 58 04 d8 7d 01 51 4a cb fa 91 56 e7 82 f8 -67 f6 be d9 44 9e 0e 9a 2c 09 bc ec c6 aa 08 76 -36 96 5e 34 b3 ec 76 6f 2f e2 e4 30 18 a2 fd de -b1 40 61 6a 0e 9d 82 e5 33 10 24 ee 06 52 fc 76 -41 - -# --------------------------------- -# RSAES-OAEP Encryption Example 2.5 -# --------------------------------- - -# Message to be encrypted: -2e f2 b0 66 f8 54 c3 3f 3b dc bb 59 94 a4 35 e7 -3d 6c 6c - -# Seed: -eb 3c eb bc 4a dc 16 bb 48 e8 8c 8a ec 0e 34 af -7f 42 7f d3 - -# Encryption: -00 eb c5 f5 fd a7 7c fd ad 3c 83 64 1a 90 25 e7 -7d 72 d8 a6 fb 33 a8 10 f5 95 0f 8d 74 c7 3e 8d -93 1e 86 34 d8 6a b1 24 62 56 ae 07 b6 00 5b 71 -b7 f2 fb 98 35 12 18 33 1c e6 9b 8f fb dc 9d a0 -8b bc 9c 70 4f 87 6d eb 9d f9 fc 2e c0 65 ca d8 -7f 90 90 b0 7a cc 17 aa 7f 99 7b 27 ac a4 88 06 -e8 97 f7 71 d9 51 41 fe 45 26 d8 a5 30 1b 67 86 -27 ef ab 70 7f d4 0f be bd 6e 79 2a 25 61 3e 7a -ec - -# --------------------------------- -# RSAES-OAEP Encryption Example 2.6 -# --------------------------------- - -# Message to be encrypted: -8a 7f b3 44 c8 b6 cb 2c f2 ef 1f 64 3f 9a 32 18 -f6 e1 9b ba 89 c0 - -# Seed: -4c 45 cf 4d 57 c9 8e 3d 6d 20 95 ad c5 1c 48 9e -b5 0d ff 84 - -# Encryption: -01 08 39 ec 20 c2 7b 90 52 e5 5b ef b9 b7 7e 6f -c2 6e 90 75 d7 a5 43 78 c6 46 ab df 51 e4 45 bd -57 15 de 81 78 9f 56 f1 80 3d 91 70 76 4a 9e 93 -cb 78 79 86 94 02 3e e7 39 3c e0 4b c5 d8 f8 c5 -a5 2c 17 1d 43 83 7e 3a ca 62 f6 09 eb 0a a5 ff -b0 96 0e f0 41 98 dd 75 4f 57 f7 fb e6 ab f7 65 -cf 11 8b 4c a4 43 b2 3b 5a ab 26 6f 95 23 26 ac -45 81 10 06 44 32 5f 8b 72 1a cd 5d 04 ff 14 ef -3a - -# ============================================= - -# ================================== -# Example 3: A 1026-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -02 b5 8f ec 03 9a 86 07 00 a4 d7 b6 46 2f 93 e6 -cd d4 91 16 1d dd 74 f4 e8 10 b4 0e 3c 16 52 00 -6a 5c 27 7b 27 74 c1 13 05 a4 cb ab 5a 78 ef a5 -7e 17 a8 6d f7 a3 fa 36 fc 4b 1d 22 49 f2 2e c7 -c2 dd 6a 46 32 32 ac ce a9 06 d6 6e be 80 b5 70 -4b 10 72 9d a6 f8 33 23 4a bb 5e fd d4 a2 92 cb -fa d3 3b 4d 33 fa 7a 14 b8 c3 97 b5 6e 3a cd 21 -20 34 28 b7 7c df a3 3a 6d a7 06 b3 d8 b0 fc 43 -e9 - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -15 b4 8a 5b 56 83 a9 46 70 e2 3b 57 18 f8 14 fa -0e 13 f8 50 38 f5 07 11 18 2c ba 61 51 05 81 f3 -d2 2c 7e 23 2e f9 37 e2 2e 55 1d 68 b8 6e 2f 8c -b1 aa d8 be 2e 48 8f 5d f7 ef d2 79 e3 f5 68 d4 -ea f3 6f 80 cf 71 41 ac e6 0f cc 91 13 fb 6c 4a -84 1f d5 0b bc 7c 51 2f fc be ff 21 48 7a a8 11 -eb 3c a8 c6 20 05 34 6a 86 de 86 bf a1 d8 a9 48 -fd 3f 34 8c 22 ea ad f3 33 c3 ce 6c e1 32 08 fd - -# Prime p: -01 bf 01 d2 16 d7 35 95 cf 02 70 c2 be b7 8d 40 -a0 d8 44 7d 31 da 91 9a 98 3f 7e ea 78 1b 77 d8 -5f e3 71 b3 e9 37 3e 7b 69 21 7d 31 50 a0 2d 89 -58 de 7f ad 9d 55 51 60 95 8b 44 54 12 7e 0e 7e -af - -# Prime q: -01 8d 33 99 65 81 66 db 38 29 81 6d 7b 29 54 16 -75 9e 9c 91 98 7f 5b 2d 8a ec d6 3b 04 b4 8b d7 -b2 fc f2 29 bb 7f 8a 6d c8 8b a1 3d d2 e3 9a d5 -5b 6d 1a 06 16 07 08 f9 70 0b e8 0b 8f d3 74 4c -e7 - -# p's CRT exponent dP: -06 c0 a2 49 d2 0a 6f 2e e7 5c 88 b4 94 d5 3f 6a -ae 99 aa 42 7c 88 c2 8b 16 3a 76 94 45 e5 f3 90 -cf 40 c2 74 fd 6e a6 32 9a 5c e7 c7 ce 03 a2 15 -83 96 ee 2a 78 45 78 6e 09 e2 88 5a 97 28 e4 e5 - -# q's CRT exponent dQ: -d1 d2 7c 29 fe dd 92 d8 6c 34 8e dd 0c cb fa c1 -4f 74 6e 05 1c e1 d1 81 1d f3 5d 61 f2 ee 1c 97 -d4 bf 28 04 80 2f 64 27 18 7b a8 e9 0a 8a f4 42 -43 b4 07 9b 03 44 5e 60 2e 29 fa 51 93 e6 4f e9 - -# CRT coefficient qInv: -8c b2 f7 56 bd 89 41 b1 d3 b7 70 e5 ad 31 ee 37 -3b 28 ac da 69 ff 9b 6f 40 fe 57 8b 9f 1a fb 85 -83 6f 96 27 d3 7a cf f7 3c 27 79 e6 34 bb 26 01 -1c 2c 8f 7f 33 61 ae 2a 9e a6 5e d6 89 e3 63 9a - -# --------------------------------- -# RSAES-OAEP Encryption Example 3.1 -# --------------------------------- - -# Message to be encrypted: -08 78 20 b5 69 e8 fa 8d - -# Seed: -8c ed 6b 19 62 90 80 57 90 e9 09 07 40 15 e6 a2 -0b 0c 48 94 - -# Encryption: -02 6a 04 85 d9 6a eb d9 6b 43 82 08 50 99 b9 62 -e6 a2 bd ec 3d 90 c8 db 62 5e 14 37 2d e8 5e 2d -5b 7b aa b6 5c 8f af 91 bb 55 04 fb 49 5a fc e5 -c9 88 b3 f6 a5 2e 20 e1 d6 cb d3 56 6c 5c d1 f2 -b8 31 8b b5 42 cc 0e a2 5c 4a ab 99 32 af a2 07 -60 ea dd ec 78 43 96 a0 7e a0 ef 24 d4 e6 f4 d3 -7e 50 52 a7 a3 1e 14 6a a4 80 a1 11 bb e9 26 40 -13 07 e0 0f 41 00 33 84 2b 6d 82 fe 5c e4 df ae -80 - -# --------------------------------- -# RSAES-OAEP Encryption Example 3.2 -# --------------------------------- - -# Message to be encrypted: -46 53 ac af 17 19 60 b0 1f 52 a7 be 63 a3 ab 21 -dc 36 8e c4 3b 50 d8 2e c3 78 1e 04 - -# Seed: -b4 29 1d 65 67 55 08 48 cc 15 69 67 c8 09 ba ab -6c a5 07 f0 - -# Encryption: -02 4d b8 9c 78 02 98 9b e0 78 38 47 86 30 84 94 -1b f2 09 d7 61 98 7e 38 f9 7c b5 f6 f1 bc 88 da -72 a5 0b 73 eb af 11 c8 79 c4 f9 5d f3 7b 85 0b -8f 65 d7 62 2e 25 b1 b8 89 e8 0f e8 0b ac a2 06 -9d 6e 0e 1d 82 99 53 fc 45 90 69 de 98 ea 97 98 -b4 51 e5 57 e9 9a bf 8f e3 d9 cc f9 09 6e bb f3 -e5 25 5d 3b 4e 1c 6d 2e ca df 06 7a 35 9e ea 86 -40 5a cd 47 d5 e1 65 51 7c ca fd 47 d6 db ee 4b -f5 - -# --------------------------------- -# RSAES-OAEP Encryption Example 3.3 -# --------------------------------- - -# Message to be encrypted: -d9 4c d0 e0 8f a4 04 ed 89 - -# Seed: -ce 89 28 f6 05 95 58 25 40 08 ba dd 97 94 fa dc -d2 fd 1f 65 - -# Encryption: -02 39 bc e6 81 03 24 41 52 88 77 d6 d1 c8 bb 28 -aa 3b c9 7f 1d f5 84 56 36 18 99 57 97 68 38 44 -ca 86 66 47 32 f4 be d7 a0 aa b0 83 aa ab fb 72 -38 f5 82 e3 09 58 c2 02 4e 44 e5 70 43 b9 79 50 -fd 54 3d a9 77 c9 0c dd e5 33 7d 61 84 42 f9 9e -60 d7 78 3a b5 9c e6 dd 9d 69 c4 7a d1 e9 62 be -c2 2d 05 89 5c ff 8d 3f 64 ed 52 61 d9 2b 26 78 -51 03 93 48 49 90 ba 3f 7f 06 81 8a e6 ff ce 8a -3a - -# --------------------------------- -# RSAES-OAEP Encryption Example 3.4 -# --------------------------------- - -# Message to be encrypted: -6c c6 41 b6 b6 1e 6f 96 39 74 da d2 3a 90 13 28 -4e f1 - -# Seed: -6e 29 79 f5 2d 68 14 a5 7d 83 b0 90 05 48 88 f1 -19 a5 b9 a3 - -# Encryption: -02 99 4c 62 af d7 6f 49 8b a1 fd 2c f6 42 85 7f -ca 81 f4 37 3c b0 8f 1c ba ee 6f 02 5c 3b 51 2b -42 c3 e8 77 91 13 47 66 48 03 9d be 04 93 f9 24 -62 92 fa c2 89 50 60 0e 7c 0f 32 ed f9 c8 1b 9d -ec 45 c3 bd e0 cc 8d 88 47 59 01 69 90 7b 7d c5 -99 1c eb 29 bb 07 14 d6 13 d9 6d f0 f1 2e c5 d8 -d3 50 7c 8e e7 ae 78 dd 83 f2 16 fa 61 de 10 03 -63 ac a4 8a 7e 91 4a e9 f4 2d df be 94 3b 09 d9 -a0 - -# --------------------------------- -# RSAES-OAEP Encryption Example 3.5 -# --------------------------------- - -# Message to be encrypted: -df 51 51 83 2b 61 f4 f2 58 91 fb 41 72 f3 28 d2 -ed df 83 71 ff cf db e9 97 93 92 95 f3 0e ca 69 -18 01 7c fd a1 15 3b f7 a6 af 87 59 32 23 - -# Seed: -2d 76 0b fe 38 c5 9d e3 4c dc 8b 8c 78 a3 8e 66 -28 4a 2d 27 - -# Encryption: -01 62 04 2f f6 96 95 92 a6 16 70 31 81 1a 23 98 -34 ce 63 8a bf 54 fe c8 b9 94 78 12 2a fe 2e e6 -7f 8c 5b 18 b0 33 98 05 bf db c5 a4 e6 72 0b 37 -c5 9c fb a9 42 46 4c 59 7f f5 32 a1 19 82 15 45 -fd 2e 59 b1 14 e6 1d af 71 82 05 29 f5 02 9c f5 -24 95 43 27 c3 4e c5 e6 f5 ba 7e fc c4 de 94 3a -b8 ad 4e d7 87 b1 45 43 29 f7 0d b7 98 a3 a8 f4 -d9 2f 82 74 e2 b2 94 8a de 62 7c e8 ee 33 e4 3c -60 - -# --------------------------------- -# RSAES-OAEP Encryption Example 3.6 -# --------------------------------- - -# Message to be encrypted: -3c 3b ad 89 3c 54 4a 6d 52 0a b0 22 31 91 88 c8 -d5 04 b7 a7 88 b8 50 90 3b 85 97 2e aa 18 55 2e -11 34 a7 ad 60 98 82 62 54 ff 7a b6 72 b3 d8 eb -31 58 fa c6 d4 cb ae f1 - -# Seed: -f1 74 77 9c 5f d3 cf e0 07 ba dc b7 a3 6c 9b 55 -bf cf bf 0e - -# Encryption: -00 11 20 51 e7 5d 06 49 43 bc 44 78 07 5e 43 48 -2f d5 9c ee 06 79 de 68 93 ee c3 a9 43 da a4 90 -b9 69 1c 93 df c0 46 4b 66 23 b9 f3 db d3 e7 00 -83 26 4f 03 4b 37 4f 74 16 4e 1a 00 76 37 25 e5 -74 74 4b a0 b9 db 83 43 4f 31 df 96 f6 e2 a2 6f -6d 8e ba 34 8b d4 68 6c 22 38 ac 07 c3 7a ac 37 -85 d1 c7 ee a2 f8 19 fd 91 49 17 98 ed 8e 9c ef -5e 43 b7 81 b0 e0 27 6e 37 c4 3f f9 49 2d 00 57 -30 - -# ============================================= - -# ================================== -# Example 4: A 1027-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -05 12 40 b6 cc 00 04 fa 48 d0 13 46 71 c0 78 c7 -c8 de c3 b3 e2 f2 5b c2 56 44 67 33 9d b3 88 53 -d0 6b 85 ee a5 b2 de 35 3b ff 42 ac 2e 46 bc 97 -fa e6 ac 96 18 da 95 37 a5 c8 f5 53 c1 e3 57 62 -59 91 d6 10 8d cd 78 85 fb 3a 25 41 3f 53 ef ca -d9 48 cb 35 cd 9b 9a e9 c1 c6 76 26 d1 13 d5 7d -de 4c 5b ea 76 bb 5b b7 de 96 c0 0d 07 37 2e 96 -85 a6 d7 5c f9 d2 39 fa 14 8d 70 93 1b 5f 3f b0 -39 - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -04 11 ff ca 3b 7c a5 e9 e9 be 7f e3 8a 85 10 5e -35 38 96 db 05 c5 79 6a ec d2 a7 25 16 1e b3 65 -1c 86 29 a9 b8 62 b9 04 d7 b0 c7 b3 7f 8c b5 a1 -c2 b5 40 01 01 8a 00 a1 eb 2c af e4 ee 4e 94 92 -c3 48 bc 2b ed ab 4b 9e bb f0 64 e8 ef f3 22 b9 -00 9f 8e ec 65 39 05 f4 0d f8 8a 3c dc 49 d4 56 -7f 75 62 7d 41 ac a6 24 12 9b 46 a0 b7 c6 98 e5 -e6 5f 2b 7b a1 02 c7 49 a1 01 35 b6 54 0d 04 01 - -# Prime p: -02 74 58 c1 9e c1 63 69 19 e7 36 c9 af 25 d6 09 -a5 1b 8f 56 1d 19 c6 bf 69 43 dd 1e e1 ab 8a 4a -3f 23 21 00 bd 40 b8 8d ec c6 ba 23 55 48 b6 ef -79 2a 11 c9 de 82 3d 0a 79 22 c7 09 5b 6e ba 57 -01 - -# Prime q: -02 10 ee 9b 33 ab 61 71 6e 27 d2 51 bd 46 5f 4b -35 a1 a2 32 e2 da 00 90 1c 29 4b f2 23 50 ce 49 -0d 09 9f 64 2b 53 75 61 2d b6 3b a1 f2 03 86 49 -2b f0 4d 34 b3 c2 2b ce b9 09 d1 34 41 b5 3b 51 -39 - -# p's CRT exponent dP: -39 fa 02 8b 82 6e 88 c1 12 1b 75 0a 8b 24 2f a9 -a3 5c 5b 66 bd fd 1f a6 37 d3 cc 48 a8 4a 4f 45 -7a 19 4e 77 27 e4 9f 7b cc 6e 5a 5a 41 26 57 fc -47 0c 73 22 eb c3 74 16 ef 45 8c 30 7a 8c 09 01 - -# q's CRT exponent dQ: -01 5d 99 a8 41 95 94 39 79 fa 9e 1b e2 c3 c1 b6 -9f 43 2f 46 fd 03 e4 7d 5b ef bb bf d6 b1 d1 37 -1d 83 ef b3 30 a3 e0 20 94 2b 2f ed 11 5e 5d 02 -be 24 fd 92 c9 01 9d 1c ec d6 dd 4c f1 e5 4c c8 -99 - -# CRT coefficient qInv: -01 f0 b7 01 51 70 b3 f5 e4 22 23 ba 30 30 1c 41 -a6 d8 7c bb 70 e3 0c b7 d3 c6 7d 25 47 3d b1 f6 -cb f0 3e 3f 91 26 e3 e9 79 68 27 9a 86 5b 2c 2b -42 65 24 cf c5 2a 68 3d 31 ed 30 eb 98 4b e4 12 -ba - -# --------------------------------- -# RSAES-OAEP Encryption Example 4.1 -# --------------------------------- - -# Message to be encrypted: -4a 86 60 95 34 ee 43 4a 6c bc a3 f7 e9 62 e7 6d -45 5e 32 64 c1 9f 60 5f 6e 5f f6 13 7c 65 c5 6d -7f b3 44 cd 52 bc 93 37 4f 3d 16 6c 9f 0c 6f 9c -50 6b ad 19 33 09 72 d2 - -# Seed: -1c ac 19 ce 99 3d ef 55 f9 82 03 f6 85 28 96 c9 -5c cc a1 f3 - -# Encryption: -04 cc e1 96 14 84 5e 09 41 52 a3 fe 18 e5 4e 33 -30 c4 4e 5e fb c6 4a e1 68 86 cb 18 69 01 4c c5 -78 1b 1f 8f 9e 04 53 84 d0 11 2a 13 5c a0 d1 2e -9c 88 a8 e4 06 34 16 de aa e3 84 4f 60 d6 e9 6f -e1 55 14 5f 45 25 b9 a3 44 31 ca 37 66 18 0f 70 -e1 5a 5e 5d 8e 8b 1a 51 6f f8 70 60 9f 13 f8 96 -93 5c ed 18 82 79 a5 8e d1 3d 07 11 42 77 d7 5c -65 68 60 7e 0a b0 92 fd 80 3a 22 3e 4a 8e e0 b1 -a8 - -# --------------------------------- -# RSAES-OAEP Encryption Example 4.2 -# --------------------------------- - -# Message to be encrypted: -b0 ad c4 f3 fe 11 da 59 ce 99 27 73 d9 05 99 43 -c0 30 46 49 7e e9 d9 f9 a0 6d f1 16 6d b4 6d 98 -f5 8d 27 ec 07 4c 02 ee e6 cb e2 44 9c 8b 9f c5 -08 0c 5c 3f 44 33 09 25 12 ec 46 aa 79 37 43 c8 - -# Seed: -f5 45 d5 89 75 85 e3 db 71 aa 0c b8 da 76 c5 1d -03 2a e9 63 - -# Encryption: -00 97 b6 98 c6 16 56 45 b3 03 48 6f bf 5a 2a 44 -79 c0 ee 85 88 9b 54 1a 6f 0b 85 8d 6b 65 97 b1 -3b 85 4e b4 f8 39 af 03 39 9a 80 d7 9b da 65 78 -c8 41 f9 0d 64 57 15 b2 80 d3 71 43 99 2d d1 86 -c8 0b 94 9b 77 5c ae 97 37 0e 4e c9 74 43 13 6c -6d a4 84 e9 70 ff db 13 23 a2 08 47 82 1d 3b 18 -38 1d e1 3b b4 9a ae a6 65 30 c4 a4 b8 27 1f 3e -ae 17 2c d3 66 e0 7e 66 36 f1 01 9d 2a 28 ae d1 -5e - -# --------------------------------- -# RSAES-OAEP Encryption Example 4.3 -# --------------------------------- - -# Message to be encrypted: -bf 6d 42 e7 01 70 7b 1d 02 06 b0 c8 b4 5a 1c 72 -64 1f f1 28 89 21 9a 82 bd ea 96 5b 5e 79 a9 6b -0d 01 63 ed 9d 57 8e c9 ad a2 0f 2f bc f1 ea 3c -40 89 d8 34 19 ba 81 b0 c6 0f 36 06 da 99 - -# Seed: -ad 99 7f ee f7 30 d6 ea 7b e6 0d 0d c5 2e 72 ea -cb fd d2 75 - -# Encryption: -03 01 f9 35 e9 c4 7a bc b4 8a cb be 09 89 5d 9f -59 71 af 14 83 9d a4 ff 95 41 7e e4 53 d1 fd 77 -31 90 72 bb 72 97 e1 b5 5d 75 61 cd 9d 1b b2 4c -1a 9a 37 c6 19 86 43 08 24 28 04 87 9d 86 eb d0 -01 dc e5 18 39 75 e1 50 69 89 b7 0e 5a 83 43 41 -54 d5 cb fd 6a 24 78 7e 60 eb 0c 65 8d 2a c1 93 -30 2d 11 92 c6 e6 22 d4 a1 2a d4 b5 39 23 bc a2 -46 df 31 c6 39 5e 37 70 2c 6a 78 ae 08 1f b9 d0 -65 - -# --------------------------------- -# RSAES-OAEP Encryption Example 4.4 -# --------------------------------- - -# Message to be encrypted: -fb 2e f1 12 f5 e7 66 eb 94 01 92 97 93 47 94 f7 -be 2f 6f c1 c5 8e - -# Seed: -13 64 54 df 57 30 f7 3c 80 7a 7e 40 d8 c1 a3 12 -ac 5b 9d d3 - -# Encryption: -02 d1 10 ad 30 af b7 27 be b6 91 dd 0c f1 7d 0a -f1 a1 e7 fa 0c c0 40 ec 1a 4b a2 6a 42 c5 9d 0a -79 6a 2e 22 c8 f3 57 cc c9 8b 65 19 ac eb 68 2e -94 5e 62 cb 73 46 14 a5 29 40 7c d4 52 be e3 e4 -4f ec e8 42 3c c1 9e 55 54 8b 8b 99 4b 84 9c 7e -cd e4 93 3e 76 03 7e 1d 0c e4 42 75 b0 87 10 c6 -8e 43 01 30 b9 29 73 0e d7 7e 09 b0 15 64 2c 55 -93 f0 4e 4f fb 94 10 79 81 02 a8 e9 6f fd fe 11 -e4 - -# --------------------------------- -# RSAES-OAEP Encryption Example 4.5 -# --------------------------------- - -# Message to be encrypted: -28 cc d4 47 bb 9e 85 16 6d ab b9 e5 b7 d1 ad ad -c4 b9 d3 9f 20 4e 96 d5 e4 40 ce 9a d9 28 bc 1c -22 84 - -# Seed: -bc a8 05 7f 82 4b 2e a2 57 f2 86 14 07 ee f6 3d -33 20 86 81 - -# Encryption: -00 db b8 a7 43 9d 90 ef d9 19 a3 77 c5 4f ae 8f -e1 1e c5 8c 3b 85 83 62 e2 3a d1 b8 a4 43 10 79 -90 66 b9 93 47 aa 52 56 91 d2 ad c5 8d 9b 06 e3 -4f 28 8c 17 03 90 c5 f0 e1 1c 0a a3 64 59 59 f1 -8e e7 9e 8f 2b e8 d7 ac 5c 23 d0 61 f1 8d d7 4b -8c 5f 2a 58 fc b5 eb 0c 54 f9 9f 01 a8 32 47 56 -82 92 53 65 83 34 09 48 d7 a8 c9 7c 4a cd 1e 98 -d1 e2 9d c3 20 e9 7a 26 05 32 a8 aa 7a 75 8a 1e -c2 - -# --------------------------------- -# RSAES-OAEP Encryption Example 4.6 -# --------------------------------- - -# Message to be encrypted: -f2 22 42 75 1e c6 b1 - -# Seed: -2e 7e 1e 17 f6 47 b5 dd d0 33 e1 54 72 f9 0f 68 -12 f3 ac 4e - -# Encryption: -00 a5 ff a4 76 8c 8b be ca ee 2d b7 7e 8f 2e ec -99 59 59 33 54 55 20 83 5e 5b a7 db 94 93 d3 e1 -7c dd ef e6 a5 f5 67 62 44 71 90 8d b4 e2 d8 3a -0f be e6 06 08 fc 84 04 95 03 b2 23 4a 07 dc 83 -b2 7b 22 84 7a d8 92 0f f4 2f 67 4e f7 9b 76 28 -0b 00 23 3d 2b 51 b8 cb 27 03 a9 d4 2b fb c8 25 -0c 96 ec 32 c0 51 e5 7f 1b 4b a5 28 db 89 c3 7e -4c 54 e2 7e 6e 64 ac 69 63 5a e8 87 d9 54 16 19 -a9 - -# ============================================= - -# ================================== -# Example 5: A 1028-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -0a ad f3 f9 c1 25 e5 d8 91 f3 1a c4 48 e9 93 de -fe 58 0f 80 2b 45 f9 d7 f2 2b a5 02 1e 9c 47 57 -6b 5a 1e 68 03 1b a9 db 4e 6d ab e4 d9 6a 1d 6f -3d 26 72 68 cf f4 08 00 5f 11 8e fc ad b9 98 88 -d1 c2 34 46 71 66 b2 a2 b8 49 a0 5a 88 9c 06 0a -c0 da 0c 5f ae 8b 55 f3 09 ba 62 e7 03 74 2f a0 -32 6f 2d 10 b0 11 02 14 89 ff 49 77 70 19 0d 89 -5f d3 9f 52 29 3c 39 ef d7 3a 69 8b da b9 f1 0e -d9 - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -02 56 eb 4c ba 70 67 f2 d2 be 54 0d cd ff 45 82 -a3 6b 7d 31 d1 c9 09 9b b2 14 b7 98 48 46 6a 26 -8f 80 f5 8a 49 ac 04 c0 e3 64 89 34 a0 20 6c 04 -53 7c 19 b2 36 64 3a 60 82 73 21 44 df 75 fa 21 -75 88 f7 94 68 2b e8 91 68 27 6d c7 26 c5 c0 cb -db 84 d3 1b bf 26 d0 a4 3a f4 95 71 7f 7d 52 8a -cf ee 34 15 61 f6 ff 3c ae 05 c5 78 f8 47 0d 96 -82 f9 c0 d0 72 f9 f6 06 8b 56 d5 88 0f 68 2b e2 -c5 - -# Prime p: -03 b0 d3 96 2f 6d 17 54 9c bf ca 11 29 43 48 dc -f0 e7 e3 9f 8c 2b c6 82 4f 21 64 b6 06 d6 87 86 -0d ae 1e 63 23 93 cf ed f5 13 22 82 29 06 9e 2f -60 e4 ac d7 e6 33 a4 36 06 3f 82 38 5f 48 99 37 -07 - -# Prime q: -02 e4 c3 2e 2f 51 72 69 b7 07 23 09 f0 0c 0e 31 -36 5f 7c e2 8b 23 6b 82 91 2d f2 39 ab f3 95 72 -cf 0e d6 04 b0 29 82 e5 35 64 c5 2d 6a 05 39 7d -e5 c0 52 a2 fd dc 14 1e f7 18 98 36 34 6a eb 33 -1f - -# p's CRT exponent dP: -01 e8 4b 11 9d 25 16 1f a6 7b 00 25 6a 5b d9 b6 -45 d2 b2 32 ec b0 5b 01 51 80 02 9a 88 62 2a dc -3f 09 b3 ae ac de 61 61 ab 7c de 22 c2 ad 26 e7 -79 7d f5 4e 07 2c bd 3b 26 73 80 0b 3e 43 38 db -d5 - -# q's CRT exponent dQ: -eb 90 aa 1a 40 13 5b 4c ea 07 19 7c ed c8 81 9b -e1 e7 cb ff 25 47 66 21 16 f4 65 a4 a9 f4 87 ab -12 f3 ba 4f ef 13 82 22 65 a6 52 97 d9 8b 7b de -d9 37 2e 3f fe 81 a3 8b 3e 96 00 fe d0 55 75 4f - -# CRT coefficient qInv: -01 2f 7f 81 38 f9 40 40 62 eb 85 a4 29 24 52 0b -38 f5 bb 88 6a 01 96 f4 8b b8 dc ea 60 fd 92 cc -02 7f 18 e7 81 58 a3 4a 5c 5d 5f 86 0a 0f 6c 04 -07 1a 7d 01 31 2c 06 50 62 f1 eb 48 b7 9d 1c 83 -cb - -# --------------------------------- -# RSAES-OAEP Encryption Example 5.1 -# --------------------------------- - -# Message to be encrypted: -af 71 a9 01 e3 a6 1d 31 32 f0 fc 1f db 47 4f 9e -a6 57 92 57 ff c2 4d 16 41 70 14 5b 3d bd e8 - -# Seed: -44 c9 2e 28 3f 77 b9 49 9c 60 3d 96 36 60 c8 7d -2f 93 94 61 - -# Encryption: -03 60 46 a4 a4 7d 9e d3 ba 9a 89 13 9c 10 50 38 -eb 74 92 b0 5a 5d 68 bf d5 3a cc ff 45 97 f7 a6 -86 51 b4 7b 4a 46 27 d9 27 e4 85 ee d7 b4 56 64 -20 e8 b4 09 87 9e 5d 60 6e ae 25 1d 22 a5 df 79 -9f 79 20 bf c1 17 b9 92 57 2a 53 b1 26 31 46 bc -ea 03 38 5c c5 e8 53 c9 a1 01 c8 c3 e1 bd a3 1a -51 98 07 49 6c 6c b5 e5 ef b4 08 82 3a 35 2b 8f -a0 66 1f b6 64 ef ad d5 93 de b9 9f ff 5e d0 00 -e5 - -# --------------------------------- -# RSAES-OAEP Encryption Example 5.2 -# --------------------------------- - -# Message to be encrypted: -a3 b8 44 a0 82 39 a8 ac 41 60 5a f1 7a 6c fd a4 -d3 50 13 65 85 90 3a 41 7a 79 26 87 60 51 9a 4b -4a c3 30 3e c7 3f 0f 87 cf b3 23 99 - -# Seed: -cb 28 f5 86 06 59 fc ee e4 9c 3e ea fc e6 25 a7 -08 03 bd 32 - -# Encryption: -03 d6 eb 65 4e dc e6 15 bc 59 f4 55 26 5e d4 e5 -a1 82 23 cb b9 be 4e 40 69 b4 73 80 4d 5d e9 6f -54 dc aa a6 03 d0 49 c5 d9 4a a1 47 0d fc d2 25 -40 66 b7 c7 b6 1f f1 f6 f6 77 0e 32 15 c5 13 99 -fd 4e 34 ec 50 82 bc 48 f0 89 84 0a d0 43 54 ae -66 dc 0f 1b d1 8e 46 1a 33 cc 12 58 b4 43 a2 83 -7a 6d f2 67 59 aa 23 02 33 49 86 f8 73 80 c9 cc -9d 53 be 9f 99 60 5d 2c 9a 97 da 7b 09 15 a4 a7 -ad - -# --------------------------------- -# RSAES-OAEP Encryption Example 5.3 -# --------------------------------- - -# Message to be encrypted: -30 8b 0e cb d2 c7 6c b7 7f c6 f7 0c 5e dd 23 3f -d2 f2 09 29 d6 29 f0 26 95 3b b6 2a 8f 4a 3a 31 -4b de 19 5d e8 5b 5f 81 6d a2 aa b0 74 d2 6c b6 -ac dd f3 23 ae 3b 9c 67 8a c3 cf 12 fb dd e7 - -# Seed: -22 85 f4 0d 77 04 82 f9 a9 ef a2 c7 2c b3 ac 55 -71 6d c0 ca - -# Encryption: -07 70 95 21 81 64 9f 9f 9f 07 ff 62 6f f3 a2 2c -35 c4 62 44 3d 90 5d 45 6a 9f d0 bf f4 3c ac 2c -a7 a9 f5 54 e9 47 8b 9a cc 3a c8 38 b0 20 40 ff -d3 e1 84 7d e2 e4 25 39 29 f9 dd 9e e4 04 43 25 -a9 b0 5c ab b8 08 b2 ee 84 0d 34 e1 5d 10 5a 3f -1f 7b 27 69 5a 1a 07 a2 d7 3f e0 8e ca aa 3c 9c -9d 4d 5a 89 ff 89 0d 54 72 7d 7a e4 0c 0e c1 a8 -dd 86 16 5d 8e e2 c6 36 81 41 01 6a 48 b5 5b 69 -67 - -# --------------------------------- -# RSAES-OAEP Encryption Example 5.4 -# --------------------------------- - -# Message to be encrypted: -15 c5 b9 ee 11 85 - -# Seed: -49 fa 45 d3 a7 8d d1 0d fd 57 73 99 d1 eb 00 af -7e ed 55 13 - -# Encryption: -08 12 b7 67 68 eb cb 64 2d 04 02 58 e5 f4 44 1a -01 85 21 bd 96 68 7e 6c 5e 89 9f cd 6c 17 58 8f -f5 9a 82 cc 8a e0 3a 4b 45 b3 12 99 af 17 88 c3 -29 f7 dc d2 85 f8 cf 4c ed 82 60 6b 97 61 26 71 -a4 5b ed ca 13 34 42 14 4d 16 17 d1 14 f8 02 85 -7f 0f 9d 73 97 51 c5 7a 3f 9e e4 00 91 2c 61 e2 -e6 99 2b e0 31 a4 3d d4 8f a6 ba 14 ee f7 c4 22 -b5 ed c4 e7 af a0 4f dd 38 f4 02 d1 c8 bb 71 9a -bf - -# --------------------------------- -# RSAES-OAEP Encryption Example 5.5 -# --------------------------------- - -# Message to be encrypted: -21 02 6e 68 00 c7 fa 72 8f ca ab a0 d1 96 ae 28 -d7 a2 ac 4f fd 8a bc e7 94 f0 98 5f 60 c8 a6 73 -72 77 36 5d 3f ea 11 db 89 23 a2 02 9a - -# Seed: -f0 28 74 13 23 4c c5 03 47 24 a0 94 c4 58 6b 87 -af f1 33 fc - -# Encryption: -07 b6 0e 14 ec 95 4b fd 29 e6 0d 00 47 e7 89 f5 -1d 57 18 6c 63 58 99 03 30 67 93 ce d3 f6 82 41 -c7 43 52 9a ba 6a 63 74 f9 2e 19 e0 16 3e fa 33 -69 7e 19 6f 76 61 df aa a4 7a ac 6b de 5e 51 de -b5 07 c7 2c 58 9a 2c a1 69 3d 96 b1 46 03 81 24 -9b 2c db 9e ac 44 76 9f 24 89 c5 d3 d2 f9 9f 0e -e3 c7 ee 5b f6 4a 5a c7 9c 42 bd 43 3f 14 9b e8 -cb 59 54 83 61 64 05 95 51 3c 97 af 7b c2 50 97 -23 - -# --------------------------------- -# RSAES-OAEP Encryption Example 5.6 -# --------------------------------- - -# Message to be encrypted: -54 1e 37 b6 8b 6c 88 72 b8 4c 02 - -# Seed: -d9 fb a4 5c 96 f2 1e 6e 26 d2 9e b2 cd cb 65 85 -be 9c b3 41 - -# Encryption: -08 c3 6d 4d da 33 42 3b 2e d6 83 0d 85 f6 41 1b -a1 dc f4 70 a1 fa e0 eb ef ee 7c 08 9f 25 6c ef -74 cb 96 ea 69 c3 8f 60 f3 9a be e4 41 29 bc b4 -c9 2d e7 f7 97 62 3b 20 07 4e 3d 9c 28 99 70 1e -d9 07 1e 1e fa 0b dd 84 d4 c3 e5 13 03 02 d8 f0 -24 0b ab a4 b8 4a 71 cc 03 2f 22 35 a5 ff 0f ae -27 7c 3e 8f 91 12 be f4 4c 9a e2 0d 17 5f c9 a4 -05 8b fc 93 0b a3 1b 02 e2 e4 f4 44 48 37 10 f2 -4a - -# ============================================= - -# ================================== -# Example 6: A 1029-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -12 b1 7f 6d ad 2e cd 19 ff 46 dc 13 f7 86 0f 09 -e0 e0 cf b6 77 b3 8a 52 59 23 05 ce af 02 2c 16 -6d b9 0d 04 ac 29 e3 3f 7d d1 2d 9f af 66 e0 81 -6b b6 3e ad 26 7c c7 d4 6c 17 c3 7b e2 14 bc a2 -a2 2d 72 3a 64 e4 44 07 43 6b 6f c9 65 72 9a ef -c2 55 4f 37 6c d5 dc ea 68 29 37 80 a6 2b f3 9d -00 29 48 5a 16 0b bb 9e 5d c0 97 2d 21 a5 04 f5 -2e 5e e0 28 aa 41 63 32 f5 10 b2 e9 cf f5 f7 22 -af - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -02 95 ec a3 56 06 18 36 95 59 ce cd 30 3a a9 cf -da fc 1d 9f 06 95 9d f7 5f fe f9 29 aa 89 69 61 -bc d1 90 dc 69 97 ed a7 f5 96 3e 72 4d 07 b4 dc -11 f3 06 5e 5a e9 7d 96 83 51 12 28 0b 90 84 bb -14 f2 a2 1e bd 4e 88 9d 41 b9 c4 13 2e c1 95 6f -ca b8 bb 2f ed 05 75 88 49 36 52 2c 5f f7 d3 32 -61 90 48 24 e7 ca de e4 e0 bb 37 2d 24 57 cf 78 -e2 bd 12 86 22 8f f8 3f 10 73 1c e6 3c 90 cf f3 -f9 - -# Prime p: -04 a6 ce 8b 73 58 df a6 9b dc f7 42 61 70 05 af -b5 38 5f 5f 3a 58 a2 4e f7 4a 22 a8 c0 5c b7 cc -38 eb d4 cc 9d 9a 9d 78 9a 62 cd 0f 60 f0 cb 94 -1d 34 23 c9 69 2e fa 4f e3 ad ff 29 0c 47 49 a3 -8b - -# Prime q: -04 04 c9 a8 03 37 1f ed b4 c5 be 39 f3 c0 0b 00 -9e 5e 08 a6 3b e1 e4 00 35 cd ac a5 01 1c c7 01 -cf 7e eb cb 99 f0 ff e1 7c fd 0a 4b f7 be fd 2d -d5 36 ac 94 6d b7 97 fd bc 4a be 8f 29 34 9b 91 -ed - -# p's CRT exponent dP: -03 96 1c 8f 76 0a a2 bd 51 54 c7 aa fd 77 22 5b -3b ac d0 13 9a e7 b5 94 8e a3 31 1f cc d8 6f b9 -5c 75 af a7 67 28 4b 9b 2d e5 59 57 2f 15 d8 d0 -44 c7 eb 83 a1 be 5f ad f2 cc 37 7c 0d 84 75 29 -4b - -# q's CRT exponent dQ: -02 21 97 e0 66 74 21 96 aa bc 03 fa 2f ee b4 e7 -0b 15 cb 78 7d 61 7a cd 31 bb 75 c7 bc 23 4a d7 -06 f7 c4 8d 21 82 d1 f0 ff 9c 22 8d cf 41 96 7b -6c 0b a6 d2 c0 ad 11 0a 1b 85 78 31 ec 24 5e 2c -b1 - -# CRT coefficient qInv: -04 01 c4 c0 c5 3d 45 db db 5e 9d 96 d0 fe cf 42 -75 df 09 74 bc 4a 07 36 b4 a7 4c 32 69 05 3e fb -68 6a ce 24 06 e2 2c 9e 05 8d db 4a e5 40 62 7a -e2 fd b0 82 61 e8 e7 e4 bc bc 99 4d aa fa 30 5c -45 - -# --------------------------------- -# RSAES-OAEP Encryption Example 6.1 -# --------------------------------- - -# Message to be encrypted: -40 46 ca 8b aa 33 47 ca 27 f4 9e 0d 81 f9 cc 1d -71 be 9b a5 17 d4 - -# Seed: -dd 0f 6c fe 41 5e 88 e5 a4 69 a5 1f bb a6 df d4 -0a db 43 84 - -# Encryption: -06 30 ee bc d2 85 6c 24 f7 98 80 6e 41 f9 e6 73 -45 ed a9 ce da 38 6a cc 9f ac ae a1 ee ed 06 ac -e5 83 70 97 18 d9 d1 69 fa df 41 4d 5c 76 f9 29 -96 83 3e f3 05 b7 5b 1e 4b 95 f6 62 a2 0f ae dc -3b ae 0c 48 27 a8 bf 8a 88 ed bd 57 ec 20 3a 27 -a8 41 f0 2e 43 a6 15 ba b1 a8 ca c0 70 1d e3 4d -eb de f6 2a 08 80 89 b5 5e c3 6e a7 52 2f d3 ec -8d 06 b6 a0 73 e6 df 83 31 53 bc 0a ef d9 3b d1 -a3 - -# --------------------------------- -# RSAES-OAEP Encryption Example 6.2 -# --------------------------------- - -# Message to be encrypted: -5c c7 2c 60 23 1d f0 3b 3d 40 f9 b5 79 31 bc 31 -10 9f 97 25 27 f2 8b 19 e7 48 0c 72 88 cb 3c 92 -b2 25 12 21 4e 4b e6 c9 14 79 2d da bd f5 7f aa -8a a7 - -# Seed: -8d 14 bd 94 6a 13 51 14 8f 5c ae 2e d9 a0 c6 53 -e8 5e bd 85 - -# Encryption: -0e bc 37 37 61 73 a4 fd 2f 89 cc 55 c2 ca 62 b2 -6b 11 d5 1c 3c 7c e4 9e 88 45 f7 4e 76 07 31 7c -43 6b c8 d2 3b 96 67 df eb 9d 08 72 34 b4 7b c6 -83 71 75 ae 5c 05 59 f6 b8 1d 7d 22 41 6d 3e 50 -f4 ac 53 3d 8f 08 12 f2 db 9e 79 1f e9 c7 75 ac -8b 6a d0 f5 35 ad 9c eb 23 a4 a0 20 14 c5 8a b3 -f8 d3 16 14 99 a2 60 f3 93 48 e7 14 ae 2a 1d 34 -43 20 8f d8 b7 22 cc fd fb 39 3e 98 01 1f 99 e6 -3f - -# --------------------------------- -# RSAES-OAEP Encryption Example 6.3 -# --------------------------------- - -# Message to be encrypted: -b2 0e 65 13 03 09 2f 4b cc b4 30 70 c0 f8 6d 23 -04 93 62 ed 96 64 2f c5 63 2c 27 db 4a 52 e3 d8 -31 f2 ab 06 8b 23 b1 49 87 9c 00 2f 6b f3 fe ee -97 59 11 12 56 2c - -# Seed: -6c 07 5b c4 55 20 f1 65 c0 bf 5e a4 c5 df 19 1b -c9 ef 0e 44 - -# Encryption: -0a 98 bf 10 93 61 93 94 43 6c f6 8d 8f 38 e2 f1 -58 fd e8 ea 54 f3 43 5f 23 9b 8d 06 b8 32 18 44 -20 24 76 ae ed 96 00 94 92 48 0c e3 a8 d7 05 49 -8c 4c 8c 68 f0 15 01 dc 81 db 60 8f 60 08 73 50 -c8 c3 b0 bd 2e 9e f6 a8 14 58 b7 c8 01 b8 9f 2e -4f e9 9d 49 00 ba 6a 4b 5e 5a 96 d8 65 dc 67 6c -77 55 92 87 94 13 0d 62 80 a8 16 0a 19 0f 2d f3 -ea 7c f9 aa 02 71 d8 8e 9e 69 05 ec f1 c5 15 2d -65 - -# --------------------------------- -# RSAES-OAEP Encryption Example 6.4 -# --------------------------------- - -# Message to be encrypted: -68 4e 30 38 c5 c0 41 f7 - -# Seed: -3b bc 3b d6 63 7d fe 12 84 69 01 02 9b f5 b0 c0 -71 03 43 9c - -# Encryption: -00 8e 7a 67 ca cf b5 c4 e2 4b ec 7d ee 14 91 17 -f1 95 98 ce 8c 45 80 8f ef 88 c6 08 ff 9c d6 e6 -95 26 3b 9a 3c 0a d4 b8 ba 4c 95 23 8e 96 a8 42 -2b 85 35 62 9c 8d 53 82 37 44 79 ad 13 fa 39 97 -4b 24 2f 9a 75 9e ea f9 c8 3a d5 a8 ca 18 94 0a -01 62 ba 75 58 76 df 26 3f 4b d5 0c 65 25 c5 60 -90 26 7c 1f 0e 09 ce 08 99 a0 cf 35 9e 88 12 0a -bd 9b f8 93 44 5b 3c ae 77 d3 60 73 59 ae 9a 52 -f8 - -# --------------------------------- -# RSAES-OAEP Encryption Example 6.5 -# --------------------------------- - -# Message to be encrypted: -32 48 8c b2 62 d0 41 d6 e4 dd 35 f9 87 bf 3c a6 -96 db 1f 06 ac 29 a4 46 93 - -# Seed: -b4 6b 41 89 3e 8b ef 32 6f 67 59 38 3a 83 07 1d -ae 7f ca bc - -# Encryption: -00 00 34 74 41 6c 7b 68 bd f9 61 c3 85 73 79 44 -d7 f1 f4 0c b3 95 34 3c 69 3c c0 b4 fe 63 b3 1f -ed f1 ea ee ac 9c cc 06 78 b3 1d c3 2e 09 77 48 -95 14 c4 f0 90 85 f6 29 8a 96 53 f0 1a ea 40 45 -ff 58 2e e8 87 be 26 ae 57 5b 73 ee f7 f3 77 49 -21 e3 75 a3 d1 9a dd a0 ca 31 aa 18 49 88 7c 1f -42 ca c9 67 7f 7a 2f 4e 92 3f 6e 5a 86 8b 38 c0 -84 ef 18 75 94 dc 9f 7f 04 8f ea 2e 02 95 53 84 -ab - -# --------------------------------- -# RSAES-OAEP Encryption Example 6.6 -# --------------------------------- - -# Message to be encrypted: -50 ba 14 be 84 62 72 02 79 c3 06 ba - -# Seed: -0a 24 03 31 2a 41 e3 d5 2f 06 0f bc 13 a6 7d e5 -cf 76 09 a7 - -# Encryption: -0a 02 6d da 5f c8 78 5f 7b d9 bf 75 32 7b 63 e8 -5e 2c 0f de e5 da db 65 eb dc ac 9a e1 de 95 c9 -2c 67 2a b4 33 aa 7a 8e 69 ce 6a 6d 88 97 fa c4 -ac 4a 54 de 84 1a e5 e5 bb ce 76 87 87 9d 79 63 -4c ea 7a 30 68 40 65 c7 14 d5 24 09 b9 28 25 6b -bf 53 ea bc d5 23 1e b7 25 95 04 53 73 99 bd 29 -16 4b 72 6d 33 a4 6d a7 01 36 0a 41 68 a0 91 cc -ab 72 d4 4a 62 fe d2 46 c0 ff ea 5b 13 48 ab 54 -70 - -# ============================================= - -# ================================== -# Example 7: A 1030-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -31 11 79 f0 bc fc 9b 9d 3c a3 15 d0 0e f3 0d 7b -dd 3a 2c fa e9 91 1b fe dc b9 48 b3 a4 78 2d 07 -32 b6 ab 44 aa 4b f0 37 41 a6 44 dc 01 be c3 e6 -9b 01 a0 33 e6 75 d8 ac d7 c4 92 5c 6b 1a ec 31 -19 05 1d fd 89 76 2d 21 5d 45 47 5f fc b5 9f 90 -81 48 62 3f 37 17 71 56 f6 ae 86 dd 7a 7c 5f 43 -dc 1e 1f 90 82 54 05 8a 28 4a 5f 06 c0 02 17 93 -a8 7f 1a c5 fe ff 7d ca ee 69 c5 e5 1a 37 89 e3 -73 - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -07 0c fc ff 2f eb 82 76 e2 74 32 c4 5d fe e4 8f -49 b7 91 7d 65 30 e1 f0 ca 34 60 f3 2e 02 76 17 -44 87 c5 6e 22 a4 5d 25 00 d7 77 54 95 21 9d 7d -16 5a 9c f3 bd 92 c3 2a f9 a9 8d 8d c9 cc 29 68 -00 ad c9 4a 0a 54 fb 40 f3 42 91 bf 84 ee 8e a1 -2b 6f 10 93 59 c6 d3 54 2a 50 f9 c7 67 f5 cf ff -05 a6 81 c2 e6 56 fb 77 ca aa db 4b e9 46 8d 8a -bc d4 df 98 f5 8e 86 d2 05 3f a1 34 9f 74 8e 21 -b1 - -# Prime p: -07 49 26 2c 11 1c d4 70 ec 25 66 e6 b3 73 2f c0 -93 29 46 9a a1 90 71 d3 b9 c0 19 06 51 4c 6f 1d -26 ba a1 4b ea b0 97 1c 8b 7e 61 1a 4f 79 00 9d -6f ea 77 69 28 ca 25 28 5b 0d e3 64 3d 1a 3f 8c -71 - -# Prime q: -06 bc 1e 50 e9 6c 02 bf 63 6e 9e ea 8b 89 9b be -bf 76 51 de 77 dd 47 4c 3e 9b c2 3b ad 81 82 b6 -19 04 c7 d9 7d fb eb fb 1e 00 10 88 78 b6 e6 7e -41 53 91 d6 79 42 c2 b2 bf 9b 44 35 f8 8b 0c b0 -23 - -# p's CRT exponent dP: -03 bc 7e a7 f0 aa b1 43 ab c6 ce 8b 97 11 86 36 -a3 01 72 e4 cf e0 2c 8f a0 dd a3 b7 ba af 90 f8 -09 29 82 98 55 25 f4 88 bd fc b4 bd 72 6e 22 63 -9a c6 4a 30 92 ab 7f fc bf 1d 53 34 cf a5 0b 5b -f1 - -# q's CRT exponent dQ: -02 62 a6 aa 29 c2 a3 c6 7d c5 34 6c 06 38 1a fd -98 7a a3 cc 93 cf bf ec f5 4f dd 9f 9d 78 7d 7f -59 a5 23 d3 98 97 9d a1 37 a2 f6 38 1f e9 48 01 -f7 c9 4d a2 15 18 dc 34 cb 40 87 0c 46 97 99 4a -d9 - -# CRT coefficient qInv: -64 9d 4c 17 b6 ee 17 21 e7 72 d0 38 9a 55 9c 3d -3c df 95 50 d4 57 c4 6b 03 7b 74 64 1b 1d 52 16 -6a f8 a2 13 c8 39 62 06 cd fb a4 42 2f 18 d6 f6 -1d bc b5 d2 14 c9 71 bf 48 2a eb 97 6a 73 70 c2 - -# --------------------------------- -# RSAES-OAEP Encryption Example 7.1 -# --------------------------------- - -# Message to be encrypted: -47 aa e9 09 - -# Seed: -43 dd 09 a0 7f f4 ca c7 1c aa 46 32 ee 5e 1c 1d -ae e4 cd 8f - -# Encryption: -16 88 e4 ce 77 94 bb a6 cb 70 14 16 9e cd 55 9c -ed e2 a3 0b 56 a5 2b 68 d9 fe 18 cf 19 73 ef 97 -b2 a0 31 53 95 1c 75 5f 62 94 aa 49 ad bd b5 58 -45 ab 68 75 fb 39 86 c9 3e cf 92 79 62 84 0d 28 -2f 9e 54 ce 8b 69 0f 7c 0c b8 bb d7 34 40 d9 57 -1d 1b 16 cd 92 60 f9 ea b4 78 3c c4 82 e5 22 3d -c6 09 73 87 17 83 ec 27 b0 ae 0f d4 77 32 cb c2 -86 a1 73 fc 92 b0 0f b4 ba 68 24 64 7c d9 3c 85 -c1 - -# --------------------------------- -# RSAES-OAEP Encryption Example 7.2 -# --------------------------------- - -# Message to be encrypted: -1d 9b 2e 22 23 d9 bc 13 bf b9 f1 62 ce 73 5d b4 -8b a7 c6 8f 68 22 a0 a1 a7 b6 ae 16 58 34 e7 - -# Seed: -3a 9c 3c ec 7b 84 f9 bd 3a de cb c6 73 ec 99 d5 -4b 22 bc 9b - -# Encryption: -10 52 ed 39 7b 2e 01 e1 d0 ee 1c 50 bf 24 36 3f -95 e5 04 f4 a0 34 34 a0 8f d8 22 57 4e d6 b9 73 -6e db b5 f3 90 db 10 32 14 79 a8 a1 39 35 0e 2b -d4 97 7c 37 78 ef 33 1f 3e 78 ae 11 8b 26 84 51 -f2 0a 2f 01 d4 71 f5 d5 3c 56 69 37 17 1b 2d bc -2d 4b de 45 9a 57 99 f0 37 2d 65 74 23 9b 23 23 -d2 45 d0 bb 81 c2 86 b6 3c 89 a3 61 01 73 37 e4 -90 2f 88 a4 67 f4 c7 f2 44 bf d5 ab 46 43 7f f3 -b6 - -# --------------------------------- -# RSAES-OAEP Encryption Example 7.3 -# --------------------------------- - -# Message to be encrypted: -d9 76 fc - -# Seed: -76 a7 5e 5b 61 57 a5 56 cf 88 84 bb 2e 45 c2 93 -dd 54 5c f5 - -# Encryption: -21 55 cd 84 3f f2 4a 4e e8 ba db 76 94 26 00 28 -a4 90 81 3b a8 b3 69 a4 cb f1 06 ec 14 8e 52 98 -70 7f 59 65 be 7d 10 1c 10 49 ea 85 84 c2 4c d6 -34 55 ad 9c 10 4d 68 62 82 d3 fb 80 3a 4c 11 c1 -c2 e9 b9 1c 71 78 80 1d 1b 66 40 f0 03 f5 72 8d -f0 07 b8 a4 cc c9 2b ce 05 e4 1a 27 27 8d 7c 85 -01 8c 52 41 43 13 a5 07 77 89 00 1d 4f 01 91 0b -72 aa d0 5d 22 0a a1 4a 58 73 3a 74 89 bc 54 55 -6b - -# --------------------------------- -# RSAES-OAEP Encryption Example 7.4 -# --------------------------------- - -# Message to be encrypted: -d4 73 86 23 df 22 3a a4 38 43 df 84 67 53 4c 41 -d0 13 e0 c8 03 c6 24 e2 63 66 6b 23 9b de 40 a5 -f2 9a eb 8d e7 9e 3d aa 61 dd 03 70 f4 9b d4 b0 -13 83 4b 98 21 2a ef 6b 1c 5e e3 73 b3 cb - -# Seed: -78 66 31 4a 6a d6 f2 b2 50 a3 59 41 db 28 f5 86 -4b 58 58 59 - -# Encryption: -0a b1 4c 37 3a eb 7d 43 28 d0 aa ad 8c 09 4d 88 -b9 eb 09 8b 95 f2 10 54 a2 90 82 52 2b e7 c2 7a -31 28 78 b6 37 91 7e 3d 81 9e 6c 3c 56 8d b5 d8 -43 80 2b 06 d5 1d 9e 98 a2 be 0b f4 0c 03 14 23 -b0 0e df bf f8 32 0e fb 91 71 bd 20 44 65 3a 4c -b9 c5 12 2f 6c 65 e8 3c da 2e c3 c1 26 02 7a 9c -1a 56 ba 87 4d 0f ea 23 f3 80 b8 2c f2 40 b8 cf -54 00 04 75 8c 4c 77 d9 34 15 7a 74 f3 fc 12 bf -ac - -# --------------------------------- -# RSAES-OAEP Encryption Example 7.5 -# --------------------------------- - -# Message to be encrypted: -bb 47 23 1c a5 ea 1d 3a d4 6c 99 34 5d 9a 8a 61 - -# Seed: -b2 16 6e d4 72 d5 8d b1 0c ab 2c 6b 00 0c cc f1 -0a 7d c5 09 - -# Encryption: -02 83 87 a3 18 27 74 34 79 8b 4d 97 f4 60 06 8d -f5 29 8f ab a5 04 1b a1 17 61 a1 cb 73 16 b2 41 -84 11 4e c5 00 25 7e 25 89 ed 3b 60 7a 1e bb e9 -7a 6c c2 e0 2b f1 b6 81 f4 23 12 a3 3b 7a 77 d8 -e7 85 5c 4a 6d e0 3e 3c 04 64 3f 78 6b 91 a2 64 -a0 d6 80 5e 2c ea 91 e6 81 77 eb 7a 64 d9 25 5e -4f 27 e7 13 b7 cc ec 00 dc 20 0e bd 21 c2 ea 2b -b8 90 fe ae 49 42 df 94 1d c3 f9 78 90 ed 34 74 -78 - -# --------------------------------- -# RSAES-OAEP Encryption Example 7.6 -# --------------------------------- - -# Message to be encrypted: -21 84 82 70 95 d3 5c 3f 86 f6 00 e8 e5 97 54 01 -32 96 - -# Seed: -52 67 3b de 2c a1 66 c2 aa 46 13 1a c1 dc 80 8d -67 d7 d3 b1 - -# Encryption: -14 c6 78 a9 4a d6 05 25 ef 39 e9 59 b2 f3 ba 5c -09 7a 94 ff 91 2b 67 db ac e8 05 35 c1 87 ab d4 -7d 07 54 20 b1 87 21 52 bb a0 8f 7f c3 1f 31 3b -bf 92 73 c9 12 fc 4c 01 49 a9 b0 cf b7 98 07 e3 -46 eb 33 20 69 61 1b ec 0f f9 bc d1 68 f1 f7 c3 -3e 77 31 3c ea 45 4b 94 e2 54 9e ec f0 02 e2 ac -f7 f6 f2 d2 84 5d 4f e0 aa b2 e5 a9 2d df 68 c4 -80 ae 11 24 79 35 d1 f6 25 74 84 22 16 ae 67 41 -15 - -# ============================================= - -# ================================== -# Example 8: A 1031-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -5b df 0e 30 d3 21 dd a5 14 7f 88 24 08 fa 69 19 -54 80 df 8f 80 d3 f6 e8 bf 58 18 50 4f 36 42 7c -a9 b1 f5 54 0b 9c 65 a8 f6 97 4c f8 44 7a 24 4d -92 80 20 1b b4 9f cb be 63 78 d1 94 4c d2 27 e2 -30 f9 6e 3d 10 f8 19 dc ef 27 6c 64 a0 0b 2a 4b -67 01 e7 d0 1d e5 fa bd e3 b1 e9 a0 df 82 f4 63 -13 59 cd 22 66 96 47 fb b1 71 72 46 13 4e d7 b4 -97 cf ff bd c4 2b 59 c7 3a 96 ed 90 16 62 12 df -f7 - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -0f 7d 1e 9e 5a aa 25 fd 13 e4 a0 66 3a e1 44 e0 -d1 5f 5c d1 8b cd b0 9d f2 cc 7e 64 e3 c5 e9 15 -ad 62 64 53 04 16 1d 09 8c 71 5b b7 ab 8b d0 1d -07 ea f3 fe d7 c7 ed 08 af 2a 8a 62 ef 44 ab 16 -b3 20 e1 4a f7 2a 48 f9 6a fe 26 2a 0a e4 cf 65 -e6 35 e9 10 79 0c d4 ee 5c ea 76 8a 4b 26 39 f7 -e6 f6 77 b3 f0 bb 6b e3 2b 75 74 7d 89 09 03 6f -02 64 f5 8d 40 1c db a1 31 71 61 57 a7 5e cf 63 -31 - -# Prime p: -0a 02 ef 84 48 d9 fa d8 bb d0 d0 04 c8 c2 aa 97 -51 ef 97 21 c1 b0 d0 32 36 a5 4b 0d f9 47 cb ae -d5 a2 55 ee 9e 8e 20 d4 91 ea 17 23 fe 09 47 04 -a9 76 2e 88 af d1 6e bb 59 94 41 2c a9 66 dc 4f -9f - -# Prime q: -09 2d 36 2e 7e d3 a0 bf d9 e9 fd 0e 6c 03 01 b6 -df 29 15 9c f5 0c c8 3b 9b 0c f4 d6 ee a7 1a 61 -e0 02 b4 6e 0a e9 f2 de 62 d2 5b 5d 74 52 d4 98 -b8 1c 9a c6 fc 58 59 3d 4c 3f b4 f5 d7 2d fb b0 -a9 - -# p's CRT exponent dP: -07 c7 14 10 af 10 39 62 db 36 74 04 e3 7a e8 50 -ba a4 e9 c2 9d d9 21 45 81 52 94 a6 7c 7d 1c 6d -ed 26 3a a0 30 a9 b6 33 ae 50 30 3e 14 03 5d 1a -f0 14 12 3e ba 68 78 20 30 8d 8e bc 85 b6 95 7d -7d - -# q's CRT exponent dQ: -ae 2c 75 38 0c 02 c0 16 ad 05 89 1b 33 01 de 88 -1f 28 ae 11 71 18 2b 6b 2c 83 be a7 c5 15 ec a9 -ca 29 8c 7b 1c ab 58 17 a5 97 06 8f c8 50 60 de -4d a8 a0 16 37 8a ae 43 c7 f9 67 bc c3 79 04 b9 - -# CRT coefficient qInv: -05 98 d1 05 9e 3a da 4f 63 20 75 2c 09 d8 05 ff -7d 1f 1a e0 d0 17 ae ee e9 ce fa 0d 7d d7 ff 77 -5e 44 b5 78 32 2f 64 05 d6 21 1d a1 95 19 66 6a -a8 7f dc 4c d8 c8 8f 6b 6e 3d 67 e9 61 dc bb a3 -d0 - -# --------------------------------- -# RSAES-OAEP Encryption Example 8.1 -# --------------------------------- - -# Message to be encrypted: -05 0b 75 5e 5e 68 80 f7 b9 e9 d6 92 a7 4c 37 aa -e4 49 b3 1b fe a6 de ff 83 74 7a 89 7f 6c 2c 82 -5b b1 ad bf 85 0a 3c 96 99 4b 5d e5 b3 3c bc 7d -4a 17 91 3a 79 67 - -# Seed: -77 06 ff ca 1e cf b1 eb ee 2a 55 e5 c6 e2 4c d2 -79 7a 41 25 - -# Encryption: -09 b3 68 3d 8a 2e b0 fb 29 5b 62 ed 1f b9 29 0b -71 44 57 b7 82 53 19 f4 64 78 72 af 88 9b 30 40 -94 72 02 0a d1 29 12 bf 19 b1 1d 48 19 f4 96 14 -82 4f fd 84 d0 9c 0a 17 e7 d1 73 09 d1 29 19 79 -04 10 aa 29 95 69 9f 6a 86 db e3 24 2b 5a cc 23 -af 45 69 10 80 d6 b1 ae 81 0f b3 e3 05 70 87 f0 -97 00 92 ce 00 be 95 62 ff 40 53 b6 26 2c e0 ca -a9 3e 13 72 3d 2e 3a 5b a0 75 d4 5f 0d 61 b5 4b -61 - -# --------------------------------- -# RSAES-OAEP Encryption Example 8.2 -# --------------------------------- - -# Message to be encrypted: -4e b6 8d cd 93 ca 9b 19 df 11 1b d4 36 08 f5 57 -02 6f e4 aa 1d 5c fa c2 27 a3 eb 5a b9 54 8c 18 -a0 6d de d2 3f 81 82 59 86 b2 fc d7 11 09 ec ef -7e ff 88 87 3f 07 5c 2a a0 c4 69 f6 9c 92 bc - -# Seed: -a3 71 7d a1 43 b4 dc ff bc 74 26 65 a8 fa 95 05 -85 54 83 43 - -# Encryption: -2e cf 15 c9 7c 5a 15 b1 47 6a e9 86 b3 71 b5 7a -24 28 4f 4a 16 2a 8d 0c 81 82 e7 90 5e 79 22 56 -f1 81 2b a5 f8 3f 1f 7a 13 0e 42 dc c0 22 32 84 -4e dc 14 a3 1a 68 ee 97 ae 56 4a 38 3a 34 11 65 -64 24 c5 f6 2d db 64 60 93 c3 67 be 1f cd a4 26 -cf 00 a0 6d 8a cb 7e 57 77 6f bb d8 55 ac 3d f5 -06 fc 16 b1 d7 c3 f2 11 0f 3d 80 68 e9 1e 18 63 -63 83 1c 84 09 68 0d 8d a9 ec d8 cf 1f a2 0e e3 -9d - -# --------------------------------- -# RSAES-OAEP Encryption Example 8.3 -# --------------------------------- - -# Message to be encrypted: -86 04 ac 56 32 8c 1a b5 ad 91 78 61 - -# Seed: -ee 06 20 90 73 cc a0 26 bb 26 4e 51 85 bf 8c 68 -b7 73 9f 86 - -# Encryption: -4b c8 91 30 a5 b2 da bb 7c 2f cf 90 eb 5d 0e af -9e 68 1b 71 46 a3 8f 31 73 a3 d9 cf ec 52 ea 9e -0a 41 93 2e 64 8a 9d 69 34 4c 50 da 76 3f 51 a0 -3c 95 76 21 31 e8 05 22 54 dc d2 24 8c ba 40 fd -31 66 77 86 ce 05 a2 b7 b5 31 ac 9d ac 9e d5 84 -a5 9b 67 7c 1a 8a ed 8c 5d 15 d6 8c 05 56 9e 2b -e7 80 bf 7d b6 38 fd 2b fd 2a 85 ab 27 68 60 f3 -77 73 38 fc a9 89 ff d7 43 d1 3e e0 8e 0c a9 89 -3f - -# --------------------------------- -# RSAES-OAEP Encryption Example 8.4 -# --------------------------------- - -# Message to be encrypted: -fd da 5f bf 6e c3 61 a9 d9 a4 ac 68 af 21 6a 06 -86 f4 38 b1 e0 e5 c3 6b 95 5f 74 e1 07 f3 9c 0d -dd cc - -# Seed: -99 0a d5 73 dc 48 a9 73 23 5b 6d 82 54 36 18 f2 -e9 55 10 5d - -# Encryption: -2e 45 68 47 d8 fc 36 ff 01 47 d6 99 35 94 b9 39 -72 27 d5 77 75 2c 79 d0 f9 04 fc b0 39 d4 d8 12 -fe a6 05 a7 b5 74 dd 82 ca 78 6f 93 75 23 48 43 -8e e9 f5 b5 45 49 85 d5 f0 e1 69 9e 3e 7a d1 75 -a3 2e 15 f0 3d eb 04 2a b9 fe 1d d9 db 1b b8 6f -8c 08 9c cb 45 e7 ef 0c 5e e7 ca 9b 72 90 ca 6b -15 be d4 70 39 78 8a 8a 93 ff 83 e0 e8 d6 24 4c -71 00 63 62 de ef 69 b6 f4 16 fb 3c 68 43 83 fb -d0 - -# --------------------------------- -# RSAES-OAEP Encryption Example 8.5 -# --------------------------------- - -# Message to be encrypted: -4a 5f 49 14 be e2 5d e3 c6 93 41 de 07 - -# Seed: -ec c6 3b 28 f0 75 6f 22 f5 2a c8 e6 ec 12 51 a6 -ec 30 47 18 - -# Encryption: -1f b9 35 6f d5 c4 b1 79 6d b2 eb f7 d0 d3 93 cc -81 0a df 61 45 de fc 2f ce 71 4f 79 d9 38 00 d5 -e2 ac 21 1e a8 bb ec ca 4b 65 4b 94 c3 b1 8b 30 -dd 57 6c e3 4d c9 54 36 ef 57 a0 94 15 64 59 23 -35 9a 5d 7b 41 71 ef 22 c2 46 70 f1 b2 29 d3 60 -3e 91 f7 66 71 b7 df 97 e7 31 7c 97 73 44 76 d5 -f3 d1 7d 21 cf 82 b5 ba 9f 83 df 2e 58 8d 36 98 -4f d1 b5 84 46 8b d2 3b 2e 87 5f 32 f6 89 53 f7 -b2 - -# --------------------------------- -# RSAES-OAEP Encryption Example 8.6 -# --------------------------------- - -# Message to be encrypted: -8e 07 d6 6f 7b 88 0a 72 56 3a bc d3 f3 50 92 bc -33 40 9f b7 f8 8f 24 72 be - -# Seed: -39 25 c7 1b 36 2d 40 a0 a6 de 42 14 55 79 ba 1e -7d d4 59 fc - -# Encryption: -3a fd 9c 66 00 14 7b 21 79 8d 81 8c 65 5a 0f 4c -92 12 db 26 d0 b0 df dc 2a 75 94 cc b3 d2 2f 5b -f1 d7 c3 e1 12 cd 73 fc 7d 50 9c 7a 8b af dd 3c -27 4d 13 99 00 9f 96 09 ec 4b e6 47 7e 45 3f 07 -5a a3 3d b3 82 87 0c 1c 34 09 ae f3 92 d7 38 6a -e3 a6 96 b9 9a 94 b4 da 05 89 44 7e 95 5d 16 c9 -8b 17 60 2a 59 bd 73 62 79 fc d8 fb 28 0c 44 62 -d5 90 bf a9 bf 13 fe d5 70 ea fd e9 73 30 a2 c2 -10 - -# ============================================= - -# ================================== -# Example 9: A 1536-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -cf 2c d4 1e 34 ca 3a 72 8e a5 cb 8a ff 64 c3 6d -27 bd ef 53 64 e3 36 fd 68 d3 12 3c 5a 19 6a 8c -28 70 13 e8 53 d5 15 6d 58 d1 51 95 45 20 fb 4f -6d 7b 17 ab b6 81 77 65 90 9c 57 61 19 65 9d 90 -2b 19 06 ed 8a 2b 10 c1 55 c2 4d 12 45 28 da b9 -ee ae 37 9b ea c6 6e 4a 41 17 86 dc b8 fd 00 62 -eb c0 30 de 12 19 a0 4c 2a 8c 1b 7d d3 13 1e 4d -6b 6c ae e2 e3 1a 5e d4 1a c1 50 9b 2e f1 ee 2a -b1 83 64 be 56 8c a9 41 c2 5e cc 84 ff 9d 64 3b -5e c1 aa ae 10 2a 20 d7 3f 47 9b 78 0f d6 da 91 -07 52 12 d9 ea c0 3a 06 74 d8 99 eb a2 e4 31 f4 -c4 4b 61 5b 6b a2 23 2b d4 b3 3b ae d7 3d 62 5d - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -19 8c 14 1e 23 71 5a 92 bc cf 6a 11 9a 5b c1 13 -89 46 8d 28 11 f5 48 d7 27 e1 7b 4a b0 eb 98 6d -6f 21 1e fb 53 b7 1f 7c cb ea 87 ee 69 c7 5e e6 -15 00 8c 53 32 de b5 2b f3 90 ab df bf e3 7d 72 -05 36 81 59 b2 63 8c 1d e3 26 e2 1d 22 25 1f 0f -b5 84 8b 3b f1 50 05 d2 a7 43 30 f0 af e9 16 ee -62 cc c1 34 4d 1d 83 a7 09 e6 06 76 27 38 40 f7 -f3 77 42 4a 5e 0a 4d a7 5f 01 b3 1f f7 68 19 cf -9c bf dd 21 52 43 c3 91 7c 03 ef 38 19 93 12 e5 -67 b3 bf 7a ed 3a b4 57 f3 71 ef 8a 14 23 f4 5b -68 c6 e2 82 ec 11 1b ba 28 33 b9 87 fd 69 fa d8 -3b c1 b8 c6 13 c5 e1 ea 16 c1 1e d1 25 ea 7e c1 - -# Prime p: -fc 8d 6c 04 be c4 eb 9a 81 92 ca 79 00 cb e5 36 -e2 e8 b5 19 de cf 33 b2 45 97 98 c6 90 9d f4 f1 -76 db 7d 23 19 0f c7 2b 88 65 a7 18 af 89 5f 1b -cd 91 45 29 80 27 42 3b 60 5e 70 a4 7c f5 83 90 -a8 c3 e8 8f c8 c4 8e 8b 32 e3 da 21 0d fb e3 e8 -81 ea 56 74 b6 a3 48 c2 1e 93 f9 e5 5e a6 5e fd - -# Prime q: -d2 00 d4 5e 78 8a ac ea 60 6a 40 1d 04 60 f8 7d -d5 c1 02 7e 12 dc 1a 0d 75 86 e8 93 9d 9c f7 89 -b4 0f 51 ac 04 42 96 1d e7 d2 1c c2 1e 05 c8 31 -55 c1 f2 aa 91 93 38 7c fd f9 56 cb 48 d1 53 ba -27 04 06 f9 bb ba 53 7d 49 87 d9 e2 f9 94 2d 7a -14 cb ff fe a7 4f ec dd a9 28 d2 3e 25 9f 5e e1 - -# p's CRT exponent dP: -db 16 80 2f 79 a2 f0 d4 5f 35 8d 69 fd 33 e4 4b -81 fa e8 28 62 2e 93 a5 42 53 e9 97 d0 1b 07 43 -75 9d a0 e8 12 b4 aa 4e 6c 8b ea b2 32 8d 54 31 -95 5a 41 8a 67 ff 26 a8 c5 c8 07 a5 da 35 4e 05 -ef 31 cc 8c f7 58 f4 63 73 29 50 b0 3e 26 57 26 -fb 94 e3 9d 6a 57 2a 26 24 4a b0 8d b7 57 52 ad - -# q's CRT exponent dQ: -a0 a3 17 cf e7 df 14 23 f8 7a 6d ee 84 51 f4 e2 -b4 a6 7e 54 97 f2 9b 4f 1e 4e 83 0b 9f ad d9 40 -11 67 02 6f 55 96 e5 a3 9c 97 81 7e 0f 5f 16 e2 -7e 19 ec 99 02 e0 1d 7e a6 fb 9a a3 c7 60 af ee -1e 38 1b 69 de 6a c9 c0 75 85 a0 6a d9 c4 ba 00 -bf 75 c8 ad 2f a8 98 a4 79 e8 0a e2 94 fe d2 a1 - -# CRT coefficient qInv: -0b 21 f3 35 c3 53 34 2e b4 4c 3a a2 44 45 78 0c -2d 65 5b 94 01 74 ca e3 8c 7c 8a 4e 64 93 c0 ba -9f d3 03 74 82 67 b0 83 b9 a7 a6 cb 61 e4 2d b3 -62 b8 c9 89 6d b7 06 4e 02 ad 5a e6 15 87 da 15 -b4 64 9c 90 59 49 09 fe b3 7d bc b6 54 be b7 26 -8e c8 01 e5 a8 b4 aa 39 11 be bd 88 54 2f 05 be - -# --------------------------------- -# RSAES-OAEP Encryption Example 9.1 -# --------------------------------- - -# Message to be encrypted: -f7 35 fd 55 ba 92 59 2c 3b 52 b8 f9 c4 f6 9a aa -1c be f8 fe 88 ad d0 95 59 54 12 46 7f 9c f4 ec -0b 89 6c 59 ed a1 62 10 e7 54 9c 8a bb 10 cd bc -21 a1 2e c9 b6 b5 b8 fd 2f 10 39 9e b6 - -# Seed: -8e c9 65 f1 34 a3 ec 99 31 e9 2a 1c a0 dc 81 69 -d5 ea 70 5c - -# Encryption: -26 7b cd 11 8a ca b1 fc 8b a8 1c 85 d7 30 03 cb -86 10 fa 55 c1 d9 7d a8 d4 8a 7c 7f 06 89 6a 4d -b7 51 aa 28 42 55 b9 d3 6a d6 5f 37 65 3d 82 9f -1b 37 f9 7b 80 01 94 25 45 b2 fc 2c 55 a7 37 6c -a7 a1 be 4b 17 60 c8 e0 5a 33 e5 aa 25 26 b8 d9 -8e 31 70 88 e7 83 4c 75 5b 2a 59 b1 26 31 a1 82 -c0 5d 5d 43 ab 17 79 26 4f 84 56 f5 15 ce 57 df -df 51 2d 54 93 da b7 b7 33 8d c4 b7 d7 8d b9 c0 -91 ac 3b af 53 7a 69 fc 7f 54 9d 97 9f 0e ff 9a -94 fd a4 16 9b d4 d1 d1 9a 69 c9 9e 33 c3 b5 54 -90 d5 01 b3 9b 1e da e1 18 ff 67 93 a1 53 26 15 -84 d3 a5 f3 9f 6e 68 2e 3d 17 c8 cd 12 61 fa 72 - -# --------------------------------- -# RSAES-OAEP Encryption Example 9.2 -# --------------------------------- - -# Message to be encrypted: -81 b9 06 60 50 15 a6 3a ab e4 2d df 11 e1 97 89 -12 f5 40 4c 74 74 b2 6d ce 3e d4 82 bf 96 1e cc -81 8b f4 20 c5 46 59 - -# Seed: -ec b1 b8 b2 5f a5 0c da b0 8e 56 04 28 67 f4 af -58 26 d1 6c - -# Encryption: -93 ac 9f 06 71 ec 29 ac bb 44 4e ff c1 a5 74 13 -51 d6 0f db 0e 39 3f bf 75 4a cf 0d e4 97 61 a1 -48 41 df 77 72 e9 bc 82 77 39 66 a1 58 4c 4d 72 -ba ea 00 11 8f 83 f3 5c ca 6e 53 7c bd 4d 81 1f -55 83 b2 97 83 d8 a6 d9 4c d3 1b e7 0d 6f 52 6c -10 ff 09 c6 fa 7c e0 69 79 5a 3f cd 05 11 fd 5f -cb 56 4b cc 80 ea 9c 78 f3 8b 80 01 25 39 d8 a4 -dd f6 fe 81 e9 cd db 7f 50 db bb bc c7 e5 d8 60 -97 cc f4 ec 49 18 9f b8 bf 31 8b e6 d5 a0 71 5d -51 6b 49 af 19 12 58 cd 32 dc 83 3c e6 eb 46 73 -c0 3a 19 bb ac e8 8c c5 48 95 f6 36 cc 0c 1e c8 -90 96 d1 1c e2 35 a2 65 ca 17 64 23 2a 68 9a e8 - -# --------------------------------- -# RSAES-OAEP Encryption Example 9.3 -# --------------------------------- - -# Message to be encrypted: -fd 32 64 29 df 9b 89 0e 09 b5 4b 18 b8 f3 4f 1e -24 - -# Seed: -e8 9b b0 32 c6 ce 62 2c bd b5 3b c9 46 60 14 ea -77 f7 77 c0 - -# Encryption: -81 eb dd 95 05 4b 0c 82 2e f9 ad 76 93 f5 a8 7a -df b4 b4 c4 ce 70 df 2d f8 4e d4 9c 04 da 58 ba -5f c2 0a 19 e1 a6 e8 b7 a3 90 0b 22 79 6d c4 e8 -69 ee 6b 42 79 2d 15 a8 ec eb 56 c0 9c 69 91 4e -81 3c ea 8f 69 31 e4 b8 ed 6f 42 1a f2 98 d5 95 -c9 7f 47 89 c7 ca a6 12 c7 ef 36 09 84 c2 1b 93 -ed c5 40 10 68 b5 af 4c 78 a8 77 1b 98 4d 53 b8 -ea 8a df 2f 6a 7d 4a 0b a7 6c 75 e1 dd 9f 65 8f -20 de d4 a4 60 71 d4 6d 77 91 b5 68 03 d8 fe a7 -f0 b0 f8 e4 1a e3 f0 93 83 a6 f9 58 5f e7 75 3e -aa ff d2 bf 94 56 31 08 be ec c2 07 bb b5 35 f5 -fc c7 05 f0 dd e9 f7 08 c6 2f 49 a9 c9 03 71 d3 - -# --------------------------------- -# RSAES-OAEP Encryption Example 9.4 -# --------------------------------- - -# Message to be encrypted: -f1 45 9b 5f 0c 92 f0 1a 0f 72 3a 2e 56 62 48 4d -8f 8c 0a 20 fc 29 da d6 ac d4 3b b5 f3 ef fd f4 -e1 b6 3e 07 fd fe 66 28 d0 d7 4c a1 9b f2 d6 9e -4a 0a bf 86 d2 93 92 5a 79 67 72 f8 08 8e - -# Seed: -60 6f 3b 99 c0 b9 cc d7 71 ea a2 9e a0 e4 c8 84 -f3 18 9c cc - -# Encryption: -bc c3 5f 94 cd e6 6c b1 13 66 25 d6 25 b9 44 32 -a3 5b 22 f3 d2 fa 11 a6 13 ff 0f ca 5b d5 7f 87 -b9 02 cc dc 1c d0 ae bc b0 71 5e e8 69 d1 d1 fe -39 5f 67 93 00 3f 5e ca 46 50 59 c8 86 60 d4 46 -ff 5f 08 18 55 20 22 55 7e 38 c0 8a 67 ea d9 91 -26 22 54 f1 06 82 97 5e c5 63 97 76 85 37 f4 97 -7a f6 d5 f6 aa ce b7 fb 25 de c5 93 72 30 23 1f -d8 97 8a f4 91 19 a2 9f 29 e4 24 ab 82 72 b4 75 -62 79 2d 5c 94 f7 74 b8 82 9d 0b 0d 9f 1a 8c 9e -dd f3 75 74 d5 fa 24 8e ef a9 c5 27 1f c5 ec 25 -79 c8 1b dd 61 b4 10 fa 61 fe 36 e4 24 22 1c 11 -3a dd b2 75 66 4c 80 1d 34 ca 8c 63 51 e4 a8 58 - -# --------------------------------- -# RSAES-OAEP Encryption Example 9.5 -# --------------------------------- - -# Message to be encrypted: -53 e6 e8 c7 29 d6 f9 c3 19 dd 31 7e 74 b0 db 8e -4c cc a2 5f 3c 83 05 74 6e 13 7a c6 3a 63 ef 37 -39 e7 b5 95 ab b9 6e 8d 55 e5 4f 7b d4 1a b4 33 -37 8f fb 91 1d - -# Seed: -fc bc 42 14 02 e9 ec ab c6 08 2a fa 40 ba 5f 26 -52 2c 84 0e - -# Encryption: -23 2a fb c9 27 fa 08 c2 f6 a2 7b 87 d4 a5 cb 09 -c0 7d c2 6f ae 73 d7 3a 90 55 88 39 f4 fd 66 d2 -81 b8 7e c7 34 bc e2 37 ba 16 66 98 ed 82 91 06 -a7 de 69 42 cd 6c dc e7 8f ed 8d 2e 4d 81 42 8e -66 49 0d 03 62 64 ce f9 2a f9 41 d3 e3 50 55 fe -39 81 e1 4d 29 cb b9 a4 f6 74 73 06 3b ae c7 9a -11 79 f5 a1 7c 9c 18 32 f2 83 8f d7 d5 e5 9b b9 -65 9d 56 dc e8 a0 19 ed ef 1b b3 ac cc 69 7c c6 -cc 7a 77 8f 60 a0 64 c7 f6 f5 d5 29 c6 21 02 62 -e0 03 de 58 3e 81 e3 16 7b 89 97 1f b8 c0 e1 5d -44 ff fe f8 9b 53 d8 d6 4d d7 97 d1 59 b5 6d 2b -08 ea 53 07 ea 12 c2 41 bd 58 d4 ee 27 8a 1f 2e - -# --------------------------------- -# RSAES-OAEP Encryption Example 9.6 -# --------------------------------- - -# Message to be encrypted: -b6 b2 8e a2 19 8d 0c 10 08 bc 64 - -# Seed: -23 aa de 0e 1e 08 bb 9b 9a 78 d2 30 2a 52 f9 c2 -1b 2e 1b a2 - -# Encryption: -43 8c c7 dc 08 a6 8d a2 49 e4 25 05 f8 57 3b a6 -0e 2c 27 73 d5 b2 90 f4 cf 9d ff 71 8e 84 20 81 -c3 83 e6 70 24 a0 f2 95 94 ea 98 7b 9d 25 e4 b7 -38 f2 85 97 0d 19 5a bb 3a 8c 80 54 e3 d7 9d 6b -9c 9a 83 27 ba 59 6f 12 59 e2 71 26 67 47 66 90 -7d 8d 58 2f f3 a8 47 61 54 92 9a db 1e 6d 12 35 -b2 cc b4 ec 8f 66 3b a9 cc 67 0a 92 be bd 85 3c -8d bf 69 c6 43 6d 01 6f 61 ad d8 36 e9 47 32 45 -04 34 20 7f 9f d4 c4 3d ec 2a 12 a9 58 ef a0 1e -fe 26 69 89 9b 5e 60 4c 25 5c 55 fb 71 66 de 55 -89 e3 69 59 7b b0 91 68 c0 6d d5 db 17 7e 06 a1 -74 0e b2 d5 c8 2f ae ca 6d 92 fc ee 99 31 ba 9f - -# ============================================= - -# =================================== -# Example 10: A 2048-bit RSA Key Pair -# =================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -ae 45 ed 56 01 ce c6 b8 cc 05 f8 03 93 5c 67 4d -db e0 d7 5c 4c 09 fd 79 51 fc 6b 0c ae c3 13 a8 -df 39 97 0c 51 8b ff ba 5e d6 8f 3f 0d 7f 22 a4 -02 9d 41 3f 1a e0 7e 4e be 9e 41 77 ce 23 e7 f5 -40 4b 56 9e 4e e1 bd cf 3c 1f b0 3e f1 13 80 2d -4f 85 5e b9 b5 13 4b 5a 7c 80 85 ad ca e6 fa 2f -a1 41 7e c3 76 3b e1 71 b0 c6 2b 76 0e de 23 c1 -2a d9 2b 98 08 84 c6 41 f5 a8 fa c2 6b da d4 a0 -33 81 a2 2f e1 b7 54 88 50 94 c8 25 06 d4 01 9a -53 5a 28 6a fe b2 71 bb 9b a5 92 de 18 dc f6 00 -c2 ae ea e5 6e 02 f7 cf 79 fc 14 cf 3b dc 7c d8 -4f eb bb f9 50 ca 90 30 4b 22 19 a7 aa 06 3a ef -a2 c3 c1 98 0e 56 0c d6 4a fe 77 95 85 b6 10 76 -57 b9 57 85 7e fd e6 01 09 88 ab 7d e4 17 fc 88 -d8 f3 84 c4 e6 e7 2c 3f 94 3e 0c 31 c0 c4 a5 cc -36 f8 79 d8 a3 ac 9d 7d 59 86 0e aa da 6b 83 bb - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -05 6b 04 21 6f e5 f3 54 ac 77 25 0a 4b 6b 0c 85 -25 a8 5c 59 b0 bd 80 c5 64 50 a2 2d 5f 43 8e 59 -6a 33 3a a8 75 e2 91 dd 43 f4 8c b8 8b 9d 5f c0 -d4 99 f9 fc d1 c3 97 f9 af c0 70 cd 9e 39 8c 8d -19 e6 1d b7 c7 41 0a 6b 26 75 df bf 5d 34 5b 80 -4d 20 1a dd 50 2d 5c e2 df cb 09 1c e9 99 7b be -be 57 30 6f 38 3e 4d 58 81 03 f0 36 f7 e8 5d 19 -34 d1 52 a3 23 e4 a8 db 45 1d 6f 4a 5b 1b 0f 10 -2c c1 50 e0 2f ee e2 b8 8d ea 4a d4 c1 ba cc b2 -4d 84 07 2d 14 e1 d2 4a 67 71 f7 40 8e e3 05 64 -fb 86 d4 39 3a 34 bc f0 b7 88 50 1d 19 33 03 f1 -3a 22 84 b0 01 f0 f6 49 ea f7 93 28 d4 ac 5c 43 -0a b4 41 49 20 a9 46 0e d1 b7 bc 40 ec 65 3e 87 -6d 09 ab c5 09 ae 45 b5 25 19 01 16 a0 c2 61 01 -84 82 98 50 9c 1c 3b f3 a4 83 e7 27 40 54 e1 5e -97 07 50 36 e9 89 f6 09 32 80 7b 52 57 75 1e 79 - -# Prime p: -ec f5 ae cd 1e 55 15 ff fa cb d7 5a 28 16 c6 eb -f4 90 18 cd fb 46 38 e1 85 d6 6a 73 96 b6 f8 09 -0f 80 18 c7 fd 95 cc 34 b8 57 dc 17 f0 cc 65 16 -bb 13 46 ab 4d 58 2c ad ad 7b 41 03 35 23 87 b7 -03 38 d0 84 04 7c 9d 95 39 b6 49 62 04 b3 dd 6e -a4 42 49 92 07 be c0 1f 96 42 87 ff 63 36 c3 98 -46 58 33 68 46 f5 6e 46 86 18 81 c1 02 33 d2 17 -6b f1 5a 5e 96 dd c7 80 bc 86 8a a7 7d 3c e7 69 - -# Prime q: -bc 46 c4 64 fc 6a c4 ca 78 3b 0e b0 8a 3c 84 1b -77 2f 7e 9b 2f 28 ba bd 58 8a e8 85 e1 a0 c6 1e -48 58 a0 fb 25 ac 29 99 90 f3 5b e8 51 64 c2 59 -ba 11 75 cd d7 19 27 07 13 51 84 99 2b 6c 29 b7 -46 dd 0d 2c ab e1 42 83 5f 7d 14 8c c1 61 52 4b -4a 09 94 6d 48 b8 28 47 3f 1c e7 6b 6c b6 88 6c -34 5c 03 e0 5f 41 d5 1b 5c 3a 90 a3 f2 40 73 c7 -d7 4a 4f e2 5d 9c f2 1c 75 96 0f 3f c3 86 31 83 - -# p's CRT exponent dP: -c7 35 64 57 1d 00 fb 15 d0 8a 3d e9 95 7a 50 91 -5d 71 26 e9 44 2d ac f4 2b c8 2e 86 2e 56 73 ff -6a 00 8e d4 d2 e3 74 61 7d f8 9f 17 a1 60 b4 3b -7f da 9c b6 b6 b7 42 18 60 98 15 f7 d4 5c a2 63 -c1 59 aa 32 d2 72 d1 27 fa f4 bc 8c a2 d7 73 78 -e8 ae b1 9b 0a d7 da 3c b3 de 0a e7 31 49 80 f6 -2b 6d 4b 0a 87 5d 1d f0 3c 1b ae 39 cc d8 33 ef -6c d7 e2 d9 52 8b f0 84 d1 f9 69 e7 94 e9 f6 c1 - -# q's CRT exponent dQ: -26 58 b3 7f 6d f9 c1 03 0b e1 db 68 11 7f a9 d8 -7e 39 ea 2b 69 3b 7e 6d 3a 2f 70 94 74 13 ee c6 -14 2e 18 fb 8d fc b6 ac 54 5d 7c 86 a0 ad 48 f8 -45 71 70 f0 ef b2 6b c4 81 26 c5 3e fd 1d 16 92 -01 98 dc 2a 11 07 dc 28 2d b6 a8 0c d3 06 23 60 -ba 3f a1 3f 70 e4 31 2f f1 a6 cd 6b 8f c4 cd 9c -5c 3d b1 7c 6d 6a 57 21 2f 73 ae 29 f6 19 32 7b -ad 59 b1 53 85 85 85 ba 4e 28 b6 0a 62 a4 5e 49 - -# CRT coefficient qInv: -6f 38 52 6b 39 25 08 55 34 ef 3e 41 5a 83 6e de -8b 86 15 8a 2c 7c bf ec cb 0b d8 34 30 4f ec 68 -3b a8 d4 f4 79 c4 33 d4 34 16 e6 32 69 62 3c ea -10 07 76 d8 5a ff 40 1d 3f ff 61 0e e6 54 11 ce -3b 13 63 d6 3a 97 09 ee de 42 64 7c ea 56 14 93 -d5 45 70 a8 79 c1 86 82 cd 97 71 0b 96 20 5e c3 -11 17 d7 3b 5f 36 22 3f ad d6 e8 ba 90 dd 7c 0e -e6 1d 44 e1 63 25 1e 20 c7 f6 6e b3 05 11 7c b8 - -# ---------------------------------- -# RSAES-OAEP Encryption Example 10.1 -# ---------------------------------- - -# Message to be encrypted: -8b ba 6b f8 2a 6c 0f 86 d5 f1 75 6e 97 95 68 70 -b0 89 53 b0 6b 4e b2 05 bc 16 94 ee - -# Seed: -47 e1 ab 71 19 fe e5 6c 95 ee 5e aa d8 6f 40 d0 -aa 63 bd 33 - -# Encryption: -53 ea 5d c0 8c d2 60 fb 3b 85 85 67 28 7f a9 15 -52 c3 0b 2f eb fb a2 13 f0 ae 87 70 2d 06 8d 19 -ba b0 7f e5 74 52 3d fb 42 13 9d 68 c3 c5 af ee -e0 bf e4 cb 79 69 cb f3 82 b8 04 d6 e6 13 96 14 -4e 2d 0e 60 74 1f 89 93 c3 01 4b 58 b9 b1 95 7a -8b ab cd 23 af 85 4f 4c 35 6f b1 66 2a a7 2b fc -c7 e5 86 55 9d c4 28 0d 16 0c 12 67 85 a7 23 eb -ee be ff 71 f1 15 94 44 0a ae f8 7d 10 79 3a 87 -74 a2 39 d4 a0 4c 87 fe 14 67 b9 da f8 52 08 ec -6c 72 55 79 4a 96 cc 29 14 2f 9a 8b d4 18 e3 c1 -fd 67 34 4b 0c d0 82 9d f3 b2 be c6 02 53 19 62 -93 c6 b3 4d 3f 75 d3 2f 21 3d d4 5c 62 73 d5 05 -ad f4 cc ed 10 57 cb 75 8f c2 6a ee fa 44 12 55 -ed 4e 64 c1 99 ee 07 5e 7f 16 64 61 82 fd b4 64 -73 9b 68 ab 5d af f0 e6 3e 95 52 01 68 24 f0 54 -bf 4d 3c 8c 90 a9 7b b6 b6 55 32 84 eb 42 9f cc - -# ---------------------------------- -# RSAES-OAEP Encryption Example 10.2 -# ---------------------------------- - -# Message to be encrypted: -e6 ad 18 1f 05 3b 58 a9 04 f2 45 75 10 37 3e 57 - -# Seed: -6d 17 f5 b4 c1 ff ac 35 1d 19 5b f7 b0 9d 09 f0 -9a 40 79 cf - -# Encryption: -a2 b1 a4 30 a9 d6 57 e2 fa 1c 2b b5 ed 43 ff b2 -5c 05 a3 08 fe 90 93 c0 10 31 79 5f 58 74 40 01 -10 82 8a e5 8f b9 b5 81 ce 9d dd d3 e5 49 ae 04 -a0 98 54 59 bd e6 c6 26 59 4e 7b 05 dc 42 78 b2 -a1 46 5c 13 68 40 88 23 c8 5e 96 dc 66 c3 a3 09 -83 c6 39 66 4f c4 56 9a 37 fe 21 e5 a1 95 b5 77 -6e ed 2d f8 d8 d3 61 af 68 6e 75 02 29 bb d6 63 -f1 61 86 8a 50 61 5e 0c 33 7b ec 0c a3 5f ec 0b -b1 9c 36 eb 2e 0b bc c0 58 2f a1 d9 3a ac db 06 -10 63 f5 9f 2c e1 ee 43 60 5e 5d 89 ec a1 83 d2 -ac df e9 f8 10 11 02 2a d3 b4 3a 3d d4 17 da c9 -4b 4e 11 ea 81 b1 92 96 6e 96 6b 18 20 82 e7 19 -64 60 7b 4f 80 02 f3 62 99 84 4a 11 f2 ae 0f ae -ac 2e ae 70 f8 f4 f9 80 88 ac dc d0 ac 55 6e 9f -cc c5 11 52 19 08 fa d2 6f 04 c6 42 01 45 03 05 -77 87 58 b0 53 8b f8 b5 bb 14 4a 82 8e 62 97 95 - -# ---------------------------------- -# RSAES-OAEP Encryption Example 10.3 -# ---------------------------------- - -# Message to be encrypted: -51 0a 2c f6 0e 86 6f a2 34 05 53 c9 4e a3 9f bc -25 63 11 e8 3e 94 45 4b 41 24 - -# Seed: -38 53 87 51 4d ec cc 7c 74 0d d8 cd f9 da ee 49 -a1 cb fd 54 - -# Encryption: -98 86 c3 e6 76 4a 8b 9a 84 e8 41 48 eb d8 c3 b1 -aa 80 50 38 1a 78 f6 68 71 4c 16 d9 cf d2 a6 ed -c5 69 79 c5 35 d9 de e3 b4 4b 85 c1 8b e8 92 89 -92 37 17 11 47 22 16 d9 5d da 98 d2 ee 83 47 c9 -b1 4d ff df f8 4a a4 8d 25 ac 06 f7 d7 e6 53 98 -ac 96 7b 1c e9 09 25 f6 7d ce 04 9b 7f 81 2d b0 -74 29 97 a7 4d 44 fe 81 db e0 e7 a3 fe af 2e 5c -40 af 88 8d 55 0d db be 3b c2 06 57 a2 95 43 f8 -fc 29 13 b9 bd 1a 61 b2 ab 22 56 ec 40 9b bd 7d -c0 d1 77 17 ea 25 c4 3f 42 ed 27 df 87 38 bf 4a -fc 67 66 ff 7a ff 08 59 55 5e e2 83 92 0f 4c 8a -63 c4 a7 34 0c ba fd dc 33 9e cd b4 b0 51 50 02 -f9 6c 93 2b 5b 79 16 7a f6 99 c0 ad 3f cc fd f0 -f4 4e 85 a7 02 62 bf 2e 18 fe 34 b8 50 58 99 75 -e8 67 ff 96 9d 48 ea bf 21 22 71 54 6c dc 05 a6 -9e cb 52 6e 52 87 0c 83 6f 30 7b d7 98 78 0e de - -# ---------------------------------- -# RSAES-OAEP Encryption Example 10.4 -# ---------------------------------- - -# Message to be encrypted: -bc dd 19 0d a3 b7 d3 00 df 9a 06 e2 2c aa e2 a7 -5f 10 c9 1f f6 67 b7 c1 6b de 8b 53 06 4a 26 49 -a9 40 45 c9 - -# Seed: -5c ac a6 a0 f7 64 16 1a 96 84 f8 5d 92 b6 e0 ef -37 ca 8b 65 - -# Encryption: -63 18 e9 fb 5c 0d 05 e5 30 7e 16 83 43 6e 90 32 -93 ac 46 42 35 8a aa 22 3d 71 63 01 3a ba 87 e2 -df da 8e 60 c6 86 0e 29 a1 e9 26 86 16 3e a0 b9 -17 5f 32 9c a3 b1 31 a1 ed d3 a7 77 59 a8 b9 7b -ad 6a 4f 8f 43 96 f2 8c f6 f3 9c a5 81 12 e4 81 -60 d6 e2 03 da a5 85 6f 3a ca 5f fe d5 77 af 49 -94 08 e3 df d2 33 e3 e6 04 db e3 4a 9c 4c 90 82 -de 65 52 7c ac 63 31 d2 9d c8 0e 05 08 a0 fa 71 -22 e7 f3 29 f6 cc a5 cf a3 4d 4d 1d a4 17 80 54 -57 e0 08 be c5 49 e4 78 ff 9e 12 a7 63 c4 77 d1 -5b bb 78 f5 b6 9b d5 78 30 fc 2c 4e d6 86 d7 9b -c7 2a 95 d8 5f 88 13 4c 6b 0a fe 56 a8 cc fb c8 -55 82 8b b3 39 bd 17 90 9c f1 d7 0d e3 33 5a e0 -70 39 09 3e 60 6d 65 53 65 de 65 50 b8 72 cd 6d -e1 d4 40 ee 03 1b 61 94 5f 62 9a d8 a3 53 b0 d4 -09 39 e9 6a 3c 45 0d 2a 8d 5e ee 9f 67 80 93 c8 - -# ---------------------------------- -# RSAES-OAEP Encryption Example 10.5 -# ---------------------------------- - -# Message to be encrypted: -a7 dd 6c 7d c2 4b 46 f9 dd 5f 1e 91 ad a4 c3 b3 -df 94 7e 87 72 32 a9 - -# Seed: -95 bc a9 e3 85 98 94 b3 dd 86 9f a7 ec d5 bb c6 -40 1b f3 e4 - -# Encryption: -75 29 08 72 cc fd 4a 45 05 66 0d 65 1f 56 da 6d -aa 09 ca 13 01 d8 90 63 2f 6a 99 2f 3d 56 5c ee -46 4a fd ed 40 ed 3b 5b e9 35 67 14 ea 5a a7 65 -5f 4a 13 66 c2 f1 7c 72 8f 6f 2c 5a 5d 1f 8e 28 -42 9b c4 e6 f8 f2 cf f8 da 8d c0 e0 a9 80 8e 45 -fd 09 ea 2f a4 0c b2 b6 ce 6f ff f5 c0 e1 59 d1 -1b 68 d9 0a 85 f7 b8 4e 10 3b 09 e6 82 66 64 80 -c6 57 50 5c 09 29 25 94 68 a3 14 78 6d 74 ea b1 -31 57 3c f2 34 bf 57 db 7d 9e 66 cc 67 48 19 2e -00 2d c0 de ea 93 05 85 f0 83 1f dc d9 bc 33 d5 -1f 79 ed 2f fc 16 bc f4 d5 98 12 fc eb ca a3 f9 -06 9b 0e 44 56 86 d6 44 c2 5c cf 63 b4 56 ee 5f -a6 ff e9 6f 19 cd f7 51 fe d9 ea f3 59 57 75 4d -bf 4b fe a5 21 6a a1 84 4d c5 07 cb 2d 08 0e 72 -2e ba 15 03 08 c2 b5 ff 11 93 62 0f 17 66 ec f4 -48 1b af b9 43 bd 29 28 77 f2 13 6c a4 94 ab a0 - -# ---------------------------------- -# RSAES-OAEP Encryption Example 10.6 -# ---------------------------------- - -# Message to be encrypted: -ea f1 a7 3a 1b 0c 46 09 53 7d e6 9c d9 22 8b bc -fb 9a 8c a8 c6 c3 ef af 05 6f e4 a7 f4 63 4e d0 -0b 7c 39 ec 69 22 d7 b8 ea 2c 04 eb ac - -# Seed: -9f 47 dd f4 2e 97 ee a8 56 a9 bd bc 71 4e b3 ac -22 f6 eb 32 - -# Encryption: -2d 20 7a 73 43 2a 8f b4 c0 30 51 b3 f7 3b 28 a6 -17 64 09 8d fa 34 c4 7a 20 99 5f 81 15 aa 68 16 -67 9b 55 7e 82 db ee 58 49 08 c6 e6 97 82 d7 de -b3 4d bd 65 af 06 3d 57 fc a7 6a 5f d0 69 49 2f -d6 06 8d 99 84 d2 09 35 05 65 a6 2e 5c 77 f2 30 -38 c1 2c b1 0c 66 34 70 9b 54 7c 46 f6 b4 a7 09 -bd 85 ca 12 2d 74 46 5e f9 77 62 c2 97 63 e0 6d -bc 7a 9e 73 8c 78 bf ca 01 02 dc 5e 79 d6 5b 97 -3f 28 24 0c aa b2 e1 61 a7 8b 57 d2 62 45 7e d8 -19 5d 53 e3 c7 ae 9d a0 21 88 3c 6d b7 c2 4a fd -d2 32 2e ac 97 2a d3 c3 54 c5 fc ef 1e 14 6c 3a -02 90 fb 67 ad f0 07 06 6e 00 42 8d 2c ec 18 ce -58 f9 32 86 98 de fe f4 b2 eb 5e c7 69 18 fd e1 -c1 98 cb b3 8b 7a fc 67 62 6a 9a ef ec 43 22 bf -d9 0d 25 63 48 1c 9a 22 1f 78 c8 27 2c 82 d1 b6 -2a b9 14 e1 c6 9f 6a f6 ef 30 ca 52 60 db 4a 46 - -# ============================================= diff --git a/notes/rsa-testvectors/pkcs1v15crypt-vectors.c b/notes/rsa-testvectors/pkcs1v15crypt-vectors.c deleted file mode 100644 index 5be21f75..00000000 --- a/notes/rsa-testvectors/pkcs1v15crypt-vectors.c +++ /dev/null @@ -1,5463 +0,0 @@ -/* Generated from file: pkcs1v15crypt-vectors.txt - * with md5 hash: 120f611de26e7eb0f0e16da16639539c - */ - - -typedef struct rsaKey { - int n_l; - unsigned char n[256]; - int e_l; - unsigned char e[256]; - int d_l; - unsigned char d[256]; - int p_l; - unsigned char p[256]; - int q_l; - unsigned char q[256]; - int dP_l; - unsigned char dP[256]; - int dQ_l; - unsigned char dQ[256]; - int qInv_l; - unsigned char qInv[256]; -} rsaKey_t; - -typedef struct rsaData { - const char* name; - int o1_l; - unsigned char o1[256]; - int o2_l; - unsigned char o2[256]; - int o3_l; - unsigned char o3[256]; -} rsaData_t; - -typedef struct testcase { - const char* name; - rsaKey_t rsa; -#ifdef LTC_TEST_EXT - rsaData_t data[20]; -#else - rsaData_t data[1]; -#endif /* LTC_TEST_EXT */ -} testcase_t; - -static testcase_t testcases_eme[] = - { -{ - "Example 1: A 1024-bit RSA key pair", -{ - /* Modulus */ - 128, - { 0xa8, 0xb3, 0xb2, 0x84, 0xaf, 0x8e, 0xb5, 0x0b, 0x38, 0x70, 0x34, 0xa8, 0x60, 0xf1, 0x46, 0xc4, 0x91, 0x9f, 0x31, 0x87, 0x63, 0xcd, 0x6c, 0x55, 0x98, 0xc8, 0xae, 0x48, 0x11, 0xa1, 0xe0, 0xab, 0xc4, 0xc7, 0xe0, 0xb0, 0x82, 0xd6, 0x93, 0xa5, 0xe7, 0xfc, 0xed, 0x67, 0x5c, 0xf4, 0x66, 0x85, 0x12, 0x77, 0x2c, 0x0c, 0xbc, 0x64, 0xa7, 0x42, 0xc6, 0xc6, 0x30, 0xf5, 0x33, 0xc8, 0xcc, 0x72, 0xf6, 0x2a, 0xe8, 0x33, 0xc4, 0x0b, 0xf2, 0x58, 0x42, 0xe9, 0x84, 0xbb, 0x78, 0xbd, 0xbf, 0x97, 0xc0, 0x10, 0x7d, 0x55, 0xbd, 0xb6, 0x62, 0xf5, 0xc4, 0xe0, 0xfa, 0xb9, 0x84, 0x5c, 0xb5, 0x14, 0x8e, 0xf7, 0x39, 0x2d, 0xd3, 0xaa, 0xff, 0x93, 0xae, 0x1e, 0x6b, 0x66, 0x7b, 0xb3, 0xd4, 0x24, 0x76, 0x16, 0xd4, 0xf5, 0xba, 0x10, 0xd4, 0xcf, 0xd2, 0x26, 0xde, 0x88, 0xd3, 0x9f, 0x16, 0xfb } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x53, 0x33, 0x9c, 0xfd, 0xb7, 0x9f, 0xc8, 0x46, 0x6a, 0x65, 0x5c, 0x73, 0x16, 0xac, 0xa8, 0x5c, 0x55, 0xfd, 0x8f, 0x6d, 0xd8, 0x98, 0xfd, 0xaf, 0x11, 0x95, 0x17, 0xef, 0x4f, 0x52, 0xe8, 0xfd, 0x8e, 0x25, 0x8d, 0xf9, 0x3f, 0xee, 0x18, 0x0f, 0xa0, 0xe4, 0xab, 0x29, 0x69, 0x3c, 0xd8, 0x3b, 0x15, 0x2a, 0x55, 0x3d, 0x4a, 0xc4, 0xd1, 0x81, 0x2b, 0x8b, 0x9f, 0xa5, 0xaf, 0x0e, 0x7f, 0x55, 0xfe, 0x73, 0x04, 0xdf, 0x41, 0x57, 0x09, 0x26, 0xf3, 0x31, 0x1f, 0x15, 0xc4, 0xd6, 0x5a, 0x73, 0x2c, 0x48, 0x31, 0x16, 0xee, 0x3d, 0x3d, 0x2d, 0x0a, 0xf3, 0x54, 0x9a, 0xd9, 0xbf, 0x7c, 0xbf, 0xb7, 0x8a, 0xd8, 0x84, 0xf8, 0x4d, 0x5b, 0xeb, 0x04, 0x72, 0x4d, 0xc7, 0x36, 0x9b, 0x31, 0xde, 0xf3, 0x7d, 0x0c, 0xf5, 0x39, 0xe9, 0xcf, 0xcd, 0xd3, 0xde, 0x65, 0x37, 0x29, 0xea, 0xd5, 0xd1 } -, - /* Prime 1 */ - 64, - { 0xd3, 0x27, 0x37, 0xe7, 0x26, 0x7f, 0xfe, 0x13, 0x41, 0xb2, 0xd5, 0xc0, 0xd1, 0x50, 0xa8, 0x1b, 0x58, 0x6f, 0xb3, 0x13, 0x2b, 0xed, 0x2f, 0x8d, 0x52, 0x62, 0x86, 0x4a, 0x9c, 0xb9, 0xf3, 0x0a, 0xf3, 0x8b, 0xe4, 0x48, 0x59, 0x8d, 0x41, 0x3a, 0x17, 0x2e, 0xfb, 0x80, 0x2c, 0x21, 0xac, 0xf1, 0xc1, 0x1c, 0x52, 0x0c, 0x2f, 0x26, 0xa4, 0x71, 0xdc, 0xad, 0x21, 0x2e, 0xac, 0x7c, 0xa3, 0x9d } -, - /* Prime 2 */ - 64, - { 0xcc, 0x88, 0x53, 0xd1, 0xd5, 0x4d, 0xa6, 0x30, 0xfa, 0xc0, 0x04, 0xf4, 0x71, 0xf2, 0x81, 0xc7, 0xb8, 0x98, 0x2d, 0x82, 0x24, 0xa4, 0x90, 0xed, 0xbe, 0xb3, 0x3d, 0x3e, 0x3d, 0x5c, 0xc9, 0x3c, 0x47, 0x65, 0x70, 0x3d, 0x1d, 0xd7, 0x91, 0x64, 0x2f, 0x1f, 0x11, 0x6a, 0x0d, 0xd8, 0x52, 0xbe, 0x24, 0x19, 0xb2, 0xaf, 0x72, 0xbf, 0xe9, 0xa0, 0x30, 0xe8, 0x60, 0xb0, 0x28, 0x8b, 0x5d, 0x77 } -, - /* Prime exponent 1 */ - 64, - { 0x0e, 0x12, 0xbf, 0x17, 0x18, 0xe9, 0xce, 0xf5, 0x59, 0x9b, 0xa1, 0xc3, 0x88, 0x2f, 0xe8, 0x04, 0x6a, 0x90, 0x87, 0x4e, 0xef, 0xce, 0x8f, 0x2c, 0xcc, 0x20, 0xe4, 0xf2, 0x74, 0x1f, 0xb0, 0xa3, 0x3a, 0x38, 0x48, 0xae, 0xc9, 0xc9, 0x30, 0x5f, 0xbe, 0xcb, 0xd2, 0xd7, 0x68, 0x19, 0x96, 0x7d, 0x46, 0x71, 0xac, 0xc6, 0x43, 0x1e, 0x40, 0x37, 0x96, 0x8d, 0xb3, 0x78, 0x78, 0xe6, 0x95, 0xc1 } -, - /* Prime exponent 2 */ - 64, - { 0x95, 0x29, 0x7b, 0x0f, 0x95, 0xa2, 0xfa, 0x67, 0xd0, 0x07, 0x07, 0xd6, 0x09, 0xdf, 0xd4, 0xfc, 0x05, 0xc8, 0x9d, 0xaf, 0xc2, 0xef, 0x6d, 0x6e, 0xa5, 0x5b, 0xec, 0x77, 0x1e, 0xa3, 0x33, 0x73, 0x4d, 0x92, 0x51, 0xe7, 0x90, 0x82, 0xec, 0xda, 0x86, 0x6e, 0xfe, 0xf1, 0x3c, 0x45, 0x9e, 0x1a, 0x63, 0x13, 0x86, 0xb7, 0xe3, 0x54, 0xc8, 0x99, 0xf5, 0xf1, 0x12, 0xca, 0x85, 0xd7, 0x15, 0x83 } -, - /* Coefficient */ - 64, - { 0x4f, 0x45, 0x6c, 0x50, 0x24, 0x93, 0xbd, 0xc0, 0xed, 0x2a, 0xb7, 0x56, 0xa3, 0xa6, 0xed, 0x4d, 0x67, 0x35, 0x2a, 0x69, 0x7d, 0x42, 0x16, 0xe9, 0x32, 0x12, 0xb1, 0x27, 0xa6, 0x3d, 0x54, 0x11, 0xce, 0x6f, 0xa9, 0x8d, 0x5d, 0xbe, 0xfd, 0x73, 0x26, 0x3e, 0x37, 0x28, 0x14, 0x27, 0x43, 0x81, 0x81, 0x66, 0xed, 0x7d, 0xd6, 0x36, 0x87, 0xdd, 0x2a, 0x8c, 0xa1, 0xd2, 0xf4, 0xfb, 0xd8, 0xe1 } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 1.1", - /* Message */ - 28, - { 0x66, 0x28, 0x19, 0x4e, 0x12, 0x07, 0x3d, 0xb0, 0x3b, 0xa9, 0x4c, 0xda, 0x9e, 0xf9, 0x53, 0x23, 0x97, 0xd5, 0x0d, 0xba, 0x79, 0xb9, 0x87, 0x00, 0x4a, 0xfe, 0xfe, 0x34 } -, - /* Seed */ - 97, - { 0x01, 0x73, 0x41, 0xae, 0x38, 0x75, 0xd5, 0xf8, 0x71, 0x01, 0xf8, 0xcc, 0x4f, 0xa9, 0xb9, 0xbc, 0x15, 0x6b, 0xb0, 0x46, 0x28, 0xfc, 0xcd, 0xb2, 0xf4, 0xf1, 0x1e, 0x90, 0x5b, 0xd3, 0xa1, 0x55, 0xd3, 0x76, 0xf5, 0x93, 0xbd, 0x73, 0x04, 0x21, 0x08, 0x74, 0xeb, 0xa0, 0x8a, 0x5e, 0x22, 0xbc, 0xcc, 0xb4, 0xc9, 0xd3, 0x88, 0x2a, 0x93, 0xa5, 0x4d, 0xb0, 0x22, 0xf5, 0x03, 0xd1, 0x63, 0x38, 0xb6, 0xb7, 0xce, 0x16, 0xdc, 0x7f, 0x4b, 0xbf, 0x9a, 0x96, 0xb5, 0x97, 0x72, 0xd6, 0x60, 0x6e, 0x97, 0x47, 0xc7, 0x64, 0x9b, 0xf9, 0xe0, 0x83, 0xdb, 0x98, 0x18, 0x84, 0xa9, 0x54, 0xab, 0x3c, 0x6f } -, - /* Encryption */ - 128, - { 0x50, 0xb4, 0xc1, 0x41, 0x36, 0xbd, 0x19, 0x8c, 0x2f, 0x3c, 0x3e, 0xd2, 0x43, 0xfc, 0xe0, 0x36, 0xe1, 0x68, 0xd5, 0x65, 0x17, 0x98, 0x4a, 0x26, 0x3c, 0xd6, 0x64, 0x92, 0xb8, 0x08, 0x04, 0xf1, 0x69, 0xd2, 0x10, 0xf2, 0xb9, 0xbd, 0xfb, 0x48, 0xb1, 0x2f, 0x9e, 0xa0, 0x50, 0x09, 0xc7, 0x7d, 0xa2, 0x57, 0xcc, 0x60, 0x0c, 0xce, 0xfe, 0x3a, 0x62, 0x83, 0x78, 0x9d, 0x8e, 0xa0, 0xe6, 0x07, 0xac, 0x58, 0xe2, 0x69, 0x0e, 0xc4, 0xeb, 0xc1, 0x01, 0x46, 0xe8, 0xcb, 0xaa, 0x5e, 0xd4, 0xd5, 0xcc, 0xe6, 0xfe, 0x7b, 0x0f, 0xf9, 0xef, 0xc1, 0xea, 0xbb, 0x56, 0x4d, 0xbf, 0x49, 0x82, 0x85, 0xf4, 0x49, 0xee, 0x61, 0xdd, 0x7b, 0x42, 0xee, 0x5b, 0x58, 0x92, 0xcb, 0x90, 0x60, 0x1f, 0x30, 0xcd, 0xa0, 0x7b, 0xf2, 0x64, 0x89, 0x31, 0x0b, 0xcd, 0x23, 0xb5, 0x28, 0xce, 0xab, 0x3c, 0x31 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 1.2", - /* Message */ - 28, - { 0x75, 0x0c, 0x40, 0x47, 0xf5, 0x47, 0xe8, 0xe4, 0x14, 0x11, 0x85, 0x65, 0x23, 0x29, 0x8a, 0xc9, 0xba, 0xe2, 0x45, 0xef, 0xaf, 0x13, 0x97, 0xfb, 0xe5, 0x6f, 0x9d, 0xd5 } -, - /* Seed */ - 97, - { 0xac, 0x47, 0x28, 0xa8, 0x42, 0x8c, 0x1e, 0x52, 0x24, 0x71, 0xa8, 0xdf, 0x73, 0x5a, 0x8e, 0x92, 0x92, 0xaf, 0x0d, 0x55, 0xbc, 0xb7, 0x3a, 0x12, 0xac, 0x32, 0xc2, 0x64, 0xf3, 0x88, 0x1c, 0x7c, 0x8a, 0x71, 0x0f, 0x70, 0xfe, 0xb1, 0x04, 0x85, 0xc8, 0x37, 0x0f, 0x78, 0x1f, 0xff, 0xd0, 0x21, 0x81, 0x6f, 0x05, 0x87, 0x39, 0x76, 0x6d, 0xa0, 0xa9, 0xc9, 0xdb, 0x0e, 0xae, 0x7e, 0x9a, 0x25, 0xb6, 0xc4, 0x33, 0x18, 0xd0, 0xca, 0xac, 0x23, 0x65, 0x22, 0xca, 0x31, 0x0f, 0x17, 0xfc, 0x52, 0xad, 0x42, 0x29, 0xc8, 0x3a, 0x24, 0xe9, 0xe5, 0x45, 0xeb, 0x35, 0xe9, 0x82, 0x6d, 0x55, 0x9f, 0x57 } -, - /* Encryption */ - 128, - { 0x68, 0x42, 0xe5, 0xe2, 0xcc, 0x00, 0x41, 0xd6, 0xb0, 0xc8, 0x1a, 0x56, 0x2c, 0x39, 0xa6, 0x17, 0x37, 0x9a, 0x51, 0x5c, 0xab, 0x74, 0xab, 0xcb, 0x26, 0x19, 0xc7, 0x74, 0x0a, 0x54, 0x1d, 0x95, 0x55, 0xdd, 0x91, 0x65, 0x97, 0x5b, 0xf8, 0xa3, 0xeb, 0xd0, 0xd0, 0x45, 0x66, 0x61, 0xdf, 0xb1, 0xa6, 0x86, 0x1b, 0xa2, 0x33, 0x22, 0x69, 0x93, 0x0e, 0x0d, 0xb5, 0x14, 0xfc, 0xa0, 0x73, 0x3e, 0xeb, 0x9c, 0x40, 0x57, 0x13, 0xeb, 0x1f, 0x9d, 0x76, 0x80, 0x33, 0xed, 0x29, 0x3e, 0x1e, 0x08, 0x1a, 0x12, 0x5f, 0x32, 0xdd, 0xb9, 0xea, 0x52, 0xed, 0xbe, 0x27, 0x5c, 0x4a, 0xf6, 0x0f, 0x8a, 0x7b, 0xf8, 0x32, 0xbd, 0x22, 0x75, 0x61, 0xc2, 0x08, 0xdc, 0x00, 0x31, 0xa8, 0x4b, 0x50, 0x12, 0xc9, 0xdd, 0x9f, 0x74, 0x45, 0x9d, 0xcb, 0x07, 0x0b, 0xdb, 0xe1, 0x3c, 0xfa, 0x8c, 0x2d, 0x50 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.3", - /* Message */ - 55, - { 0xd9, 0x4a, 0xe0, 0x83, 0x2e, 0x64, 0x45, 0xce, 0x42, 0x33, 0x1c, 0xb0, 0x6d, 0x53, 0x1a, 0x82, 0xb1, 0xdb, 0x4b, 0xaa, 0xd3, 0x0f, 0x74, 0x6d, 0xc9, 0x16, 0xdf, 0x24, 0xd4, 0xe3, 0xc2, 0x45, 0x1f, 0xff, 0x59, 0xa6, 0x42, 0x3e, 0xb0, 0xe1, 0xd0, 0x2d, 0x4f, 0xe6, 0x46, 0xcf, 0x69, 0x9d, 0xfd, 0x81, 0x8c, 0x6e, 0x97, 0xb0, 0x51 } -, - /* Seed */ - 70, - { 0xdd, 0x2d, 0x60, 0xa5, 0xe0, 0x08, 0xeb, 0xe1, 0xd0, 0xbe, 0x6f, 0x60, 0xdb, 0xc4, 0x3f, 0x29, 0x62, 0xef, 0x50, 0xbf, 0xde, 0x54, 0x2b, 0xbb, 0xe9, 0x8f, 0xed, 0xd1, 0xfe, 0xac, 0x05, 0x7e, 0x77, 0x1c, 0xf1, 0x5f, 0xc6, 0x32, 0xc8, 0xdb, 0x27, 0x2e, 0x28, 0xd2, 0x9b, 0x57, 0x93, 0xea, 0x6a, 0xb8, 0x06, 0x21, 0x8c, 0x53, 0x82, 0x39, 0xb9, 0x3a, 0x93, 0x5e, 0x65, 0xd2, 0x44, 0x16, 0xec, 0x6c, 0x6e, 0x99, 0xae, 0x04 } -, - /* Encryption */ - 128, - { 0x70, 0x9c, 0x7d, 0x2d, 0x45, 0x98, 0xc9, 0x60, 0x65, 0xb6, 0x58, 0x8d, 0xa2, 0xf8, 0x9f, 0xa8, 0x7f, 0x06, 0x2d, 0x72, 0x41, 0xef, 0x65, 0x95, 0x89, 0x8f, 0x63, 0x7a, 0xda, 0x57, 0xea, 0xe9, 0x01, 0x73, 0xf0, 0xfb, 0x4b, 0xf6, 0xa9, 0x1e, 0xbd, 0x96, 0x50, 0x69, 0x07, 0xc8, 0x53, 0xda, 0xcf, 0x20, 0x84, 0x94, 0xbe, 0x94, 0xd3, 0x13, 0xa0, 0x41, 0x85, 0xd4, 0x74, 0xa9, 0x07, 0x41, 0x2e, 0xff, 0xc3, 0xe0, 0x24, 0xd0, 0x7e, 0x4d, 0x09, 0xaa, 0x24, 0x5f, 0xbc, 0xb1, 0x30, 0x21, 0x9b, 0xfa, 0x5d, 0xe0, 0x2d, 0x4f, 0x7e, 0x2e, 0xc9, 0xe6, 0x2e, 0x8a, 0xd3, 0x2d, 0xee, 0x5f, 0xf4, 0xd8, 0xe4, 0xcf, 0xec, 0xbc, 0x50, 0x33, 0xa1, 0xc2, 0xc6, 0x1c, 0x52, 0x33, 0xae, 0x16, 0x19, 0x2a, 0x48, 0x1d, 0x00, 0x75, 0xbf, 0xc7, 0xce, 0x02, 0x82, 0x12, 0xcd, 0x27, 0xbe, 0xbe } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.4", - /* Message */ - 26, - { 0x52, 0xe6, 0x50, 0xd9, 0x8e, 0x7f, 0x2a, 0x04, 0x8b, 0x4f, 0x86, 0x85, 0x21, 0x53, 0xb9, 0x7e, 0x01, 0xdd, 0x31, 0x6f, 0x34, 0x6a, 0x19, 0xf6, 0x7a, 0x85 } -, - /* Seed */ - 99, - { 0x26, 0x29, 0xa7, 0xaa, 0xc0, 0xc3, 0x90, 0x5e, 0x83, 0x1e, 0xb6, 0x02, 0x38, 0x8c, 0x54, 0x5a, 0xf5, 0x54, 0xb9, 0x6b, 0x2a, 0xe5, 0x15, 0x32, 0xe9, 0xcc, 0xdb, 0x89, 0x72, 0xef, 0x30, 0xb6, 0x4a, 0x2f, 0x98, 0xc6, 0x95, 0x29, 0x7a, 0x01, 0xc5, 0x81, 0x2a, 0x2c, 0x40, 0x15, 0x82, 0xf3, 0x7b, 0x14, 0x4a, 0x3e, 0x90, 0xe5, 0x9d, 0x81, 0xb6, 0x90, 0x39, 0xc6, 0x4b, 0x84, 0x4b, 0x02, 0x8c, 0x10, 0x5c, 0x8e, 0x68, 0x36, 0x15, 0xaf, 0xb6, 0x58, 0xb6, 0xc4, 0xd9, 0xf3, 0x82, 0x38, 0xa7, 0x63, 0x01, 0xbb, 0x14, 0x44, 0x91, 0x13, 0xb6, 0x9d, 0xe1, 0x26, 0x04, 0x5e, 0x26, 0xf1, 0x3e, 0xe6, 0xd7 } -, - /* Encryption */ - 128, - { 0x54, 0xdd, 0xb7, 0x84, 0x26, 0x8e, 0xad, 0xb3, 0x95, 0x5b, 0xd9, 0xf9, 0x49, 0x88, 0x42, 0x59, 0x5a, 0xd2, 0x9f, 0xf8, 0xa6, 0x67, 0xfe, 0xb4, 0x1f, 0x6f, 0x53, 0x0c, 0xb6, 0x0b, 0xc9, 0x26, 0xac, 0x6c, 0x71, 0xc7, 0x72, 0xf8, 0x03, 0xd0, 0x22, 0xb4, 0x1c, 0xa5, 0x72, 0x04, 0x22, 0x3b, 0x27, 0xca, 0x79, 0xec, 0x5b, 0x72, 0x65, 0x2c, 0xa9, 0xaf, 0xbf, 0x40, 0xdc, 0x2f, 0x6a, 0x0e, 0x13, 0xbc, 0xd6, 0x0d, 0x37, 0xf7, 0x95, 0x04, 0xb0, 0xff, 0xcc, 0x01, 0xcf, 0x53, 0x42, 0xd6, 0xd3, 0x4a, 0xc6, 0xf1, 0xf2, 0xf9, 0xf2, 0xf4, 0x87, 0x46, 0x25, 0xb9, 0xfd, 0xbb, 0x7d, 0xda, 0x2e, 0xc8, 0x7d, 0xf0, 0xcf, 0x87, 0x25, 0x97, 0x98, 0xdf, 0x86, 0xa0, 0x6b, 0xd5, 0xae, 0xf7, 0x35, 0x4b, 0x8c, 0xb1, 0xcb, 0x13, 0x75, 0x75, 0xf4, 0xcf, 0xbc, 0x46, 0x28, 0x1b, 0xb3, 0x31 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.5", - /* Message */ - 20, - { 0x8d, 0xa8, 0x9f, 0xd9, 0xe5, 0xf9, 0x74, 0xa2, 0x9f, 0xef, 0xfb, 0x46, 0x2b, 0x49, 0x18, 0x0f, 0x6c, 0xf9, 0xe8, 0x02 } -, - /* Seed */ - 105, - { 0xc3, 0xca, 0x84, 0x60, 0x0f, 0x35, 0xc8, 0x65, 0x5f, 0xc7, 0xc6, 0x4c, 0x75, 0xc5, 0x87, 0x38, 0x53, 0xd3, 0xaa, 0x8a, 0x94, 0x26, 0xa5, 0x1b, 0x63, 0xd7, 0xe7, 0x5d, 0xcf, 0x6c, 0xae, 0x97, 0xa4, 0x25, 0x3f, 0xba, 0x87, 0x1d, 0x6f, 0x96, 0x89, 0x97, 0x19, 0x9b, 0xf0, 0x1b, 0x6a, 0x4d, 0x34, 0x28, 0xce, 0x4c, 0x96, 0xd1, 0xc4, 0x87, 0xb2, 0x83, 0x0c, 0xb9, 0xe3, 0x5d, 0x64, 0x05, 0x56, 0x23, 0x69, 0x9a, 0xb4, 0x97, 0x9a, 0x02, 0x58, 0x4b, 0x92, 0xe6, 0xba, 0x39, 0xe7, 0x57, 0x28, 0x40, 0x79, 0xab, 0xf1, 0x33, 0xa7, 0xda, 0x54, 0xe5, 0x42, 0x52, 0x17, 0xa2, 0x10, 0xf6, 0x7c, 0x18, 0x26, 0x9b, 0x51, 0x1f, 0x61, 0xf8, 0xc5 } -, - /* Encryption */ - 128, - { 0xa8, 0x55, 0x48, 0x01, 0x3b, 0xd0, 0xe2, 0x0e, 0xe0, 0xeb, 0xd3, 0x6f, 0xb7, 0x48, 0x97, 0x7f, 0x98, 0x58, 0x46, 0xd7, 0x61, 0x0e, 0xed, 0x24, 0xc3, 0x6c, 0xd8, 0x30, 0x33, 0xdd, 0x2a, 0xa4, 0x58, 0x0b, 0xd1, 0x53, 0x35, 0x20, 0x9d, 0xcf, 0x78, 0x2e, 0xe2, 0x6c, 0x48, 0xc3, 0x06, 0x44, 0xb0, 0xb5, 0xcc, 0x86, 0xc8, 0xcd, 0x16, 0x5a, 0xe2, 0x1e, 0xad, 0xf5, 0x78, 0x04, 0x18, 0x67, 0x76, 0x07, 0x03, 0x18, 0x75, 0xe2, 0x21, 0xec, 0xdf, 0x3b, 0x10, 0x57, 0x31, 0x6f, 0x3f, 0x12, 0xa4, 0x7d, 0x5d, 0xa4, 0x0c, 0x41, 0x53, 0x9b, 0x63, 0x64, 0x30, 0xda, 0x2e, 0x54, 0x21, 0x90, 0x11, 0x9e, 0x42, 0x9c, 0x53, 0xc2, 0x22, 0x6f, 0x95, 0x9b, 0x19, 0xcc, 0xf4, 0x8a, 0x3d, 0x24, 0x02, 0x17, 0xc4, 0xde, 0x70, 0xd7, 0x07, 0x2a, 0x7e, 0x0d, 0x95, 0xb6, 0x16, 0xd1, 0x15, 0xa8 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.6", - /* Message */ - 7, - { 0x26, 0x52, 0x10, 0x50, 0x84, 0x42, 0x71 } -, - /* Seed */ - 118, - { 0x3c, 0x6a, 0x04, 0x71, 0xda, 0xf0, 0x0b, 0x7c, 0x2e, 0xfc, 0x9e, 0xe8, 0x80, 0x41, 0x65, 0x4f, 0x87, 0x62, 0x90, 0x07, 0xc1, 0x24, 0x32, 0x22, 0x11, 0xa5, 0xf4, 0xea, 0x3c, 0x58, 0x23, 0x85, 0x7b, 0xc8, 0xfc, 0x7e, 0x21, 0xc9, 0x45, 0x48, 0xb0, 0xee, 0xbd, 0xcf, 0xf7, 0x91, 0x60, 0xe1, 0x12, 0x46, 0x1e, 0x40, 0x50, 0x91, 0x10, 0xcf, 0xdc, 0x4f, 0x0f, 0x13, 0xc7, 0xfb, 0x92, 0x1a, 0xba, 0xc8, 0xdf, 0xaa, 0xc2, 0x1a, 0xcb, 0x0f, 0x7b, 0x8a, 0x13, 0xa4, 0xb5, 0xcc, 0xa5, 0x23, 0xd5, 0xc7, 0xdd, 0xf7, 0x05, 0x23, 0xeb, 0x57, 0x0c, 0x59, 0xb6, 0xc7, 0xae, 0x97, 0x67, 0xe4, 0xec, 0x9a, 0x63, 0xd1, 0x13, 0x6d, 0x10, 0x23, 0x1b, 0x40, 0x1e, 0x20, 0xe7, 0x41, 0x02, 0x84, 0x83, 0x48, 0x01, 0x7a, 0x16, 0x16 } -, - /* Encryption */ - 128, - { 0x5e, 0x51, 0x43, 0x63, 0x28, 0x7d, 0xe9, 0xb3, 0x80, 0x04, 0x8c, 0xc4, 0x43, 0x5d, 0x53, 0x29, 0x4a, 0xd5, 0x94, 0x1c, 0x55, 0x1a, 0x97, 0xe1, 0x3c, 0x16, 0xdc, 0x13, 0x98, 0xde, 0x61, 0x0d, 0xc7, 0x33, 0x7b, 0xc6, 0xbd, 0xe5, 0x78, 0xe9, 0xe9, 0xf5, 0x6a, 0xf1, 0x44, 0x54, 0xf2, 0xe8, 0x31, 0xbe, 0xef, 0x32, 0x31, 0xa8, 0x50, 0x68, 0xe8, 0xfe, 0xf7, 0x2c, 0x89, 0xe1, 0xdf, 0x1c, 0x99, 0x43, 0x0a, 0x60, 0xf6, 0xd9, 0x42, 0x89, 0xcf, 0xba, 0x87, 0xb2, 0xb4, 0x32, 0xa4, 0x0b, 0x88, 0xdb, 0x61, 0xda, 0xe0, 0x88, 0xf9, 0xed, 0x4e, 0x28, 0x4a, 0x21, 0x63, 0xaf, 0x65, 0xbf, 0x2b, 0x43, 0x55, 0x9a, 0x5d, 0xa2, 0xae, 0xc5, 0xbb, 0x8f, 0x43, 0xf9, 0x2c, 0x1b, 0x04, 0xa5, 0x14, 0x6a, 0x65, 0xb6, 0xe0, 0x19, 0xb4, 0xcd, 0xd2, 0x94, 0x0c, 0x35, 0xd9, 0x64, 0x5b, 0x2d } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.7", - /* Message */ - 5, - { 0x8a, 0x84, 0x7d, 0xd9, 0xe2 } -, - /* Seed */ - 120, - { 0xa1, 0x3d, 0xff, 0x8a, 0x48, 0xe8, 0x04, 0x94, 0xae, 0x66, 0xe6, 0xba, 0x9f, 0x17, 0x9a, 0x01, 0x0d, 0x9e, 0x6d, 0x40, 0x31, 0x87, 0x96, 0x7f, 0x99, 0xfd, 0xd9, 0x0e, 0xf9, 0x0e, 0x0a, 0x94, 0x07, 0x3f, 0xf0, 0xe4, 0xd0, 0xe6, 0x66, 0x4f, 0xf3, 0x73, 0xb5, 0x09, 0x95, 0x3e, 0x04, 0xef, 0x77, 0x83, 0xbe, 0x0f, 0xb4, 0x6c, 0x8a, 0x9f, 0xc0, 0xed, 0x8c, 0x1f, 0x33, 0xcb, 0x4d, 0x0d, 0x2f, 0x1d, 0x0d, 0x5c, 0xdb, 0xa1, 0x4d, 0xca, 0x50, 0x8c, 0xa1, 0xd7, 0x3d, 0x20, 0x80, 0x18, 0x63, 0x9b, 0xc8, 0xe1, 0x65, 0x86, 0x23, 0xde, 0x1e, 0x5b, 0xa3, 0xf0, 0x5e, 0xd0, 0x91, 0x4d, 0x2f, 0x96, 0x90, 0x2f, 0x25, 0x20, 0x33, 0x2d, 0x84, 0x92, 0xd3, 0x73, 0x4a, 0xcd, 0xeb, 0xbd, 0xf4, 0x3e, 0x50, 0xa4, 0x3e, 0x7a, 0xa8, 0x72 } -, - /* Encryption */ - 128, - { 0x82, 0x7a, 0x67, 0xe8, 0x15, 0x78, 0x1c, 0x4d, 0x4e, 0x2b, 0x2e, 0x16, 0x9d, 0x80, 0xca, 0xe9, 0x36, 0x68, 0x72, 0xa7, 0x92, 0xaf, 0xbf, 0x3c, 0x0c, 0xd5, 0x1c, 0xe2, 0x8c, 0x70, 0xe8, 0x6d, 0x41, 0xeb, 0xb9, 0x75, 0x2f, 0x3f, 0x92, 0xdb, 0xa5, 0x1a, 0xdb, 0xb6, 0x85, 0x1b, 0x1f, 0x78, 0x45, 0x61, 0xa8, 0xf1, 0x97, 0x20, 0x8f, 0xde, 0x02, 0x97, 0x0b, 0x38, 0xf2, 0xa9, 0x74, 0x22, 0xec, 0x7f, 0x4f, 0xc8, 0xa1, 0x06, 0x75, 0xa9, 0xdb, 0xde, 0x10, 0x9e, 0xed, 0x0c, 0xe0, 0x65, 0x27, 0x70, 0x3e, 0xe0, 0x5b, 0x65, 0x7d, 0x34, 0x08, 0xf7, 0xfd, 0xdb, 0x1e, 0xec, 0xcf, 0xfa, 0xe1, 0x6b, 0x1d, 0xa1, 0x07, 0x30, 0x7a, 0x2c, 0xf2, 0x56, 0xfa, 0x60, 0xe8, 0x15, 0x21, 0x72, 0xde, 0x9f, 0x95, 0x27, 0xfe, 0x92, 0x0a, 0x90, 0x1d, 0x93, 0xc4, 0xf4, 0xd5, 0x7e, 0x54, 0x6e } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.8", - /* Message */ - 49, - { 0x37, 0x32, 0x36, 0xb7, 0x20, 0x2d, 0x39, 0xb2, 0xee, 0x30, 0xcf, 0xb4, 0x6d, 0xb0, 0x95, 0x11, 0xf6, 0xf3, 0x07, 0xcc, 0x61, 0xcc, 0x21, 0x60, 0x6c, 0x18, 0xa7, 0x5b, 0x8a, 0x62, 0xf8, 0x22, 0xdf, 0x03, 0x1b, 0xa0, 0xe0, 0xe8, 0x2d, 0xd2, 0xf3, 0xe5, 0xd3, 0x1e, 0x4e, 0xa2, 0x57, 0xb1, 0x5b } -, - /* Seed */ - 76, - { 0x21, 0x99, 0x74, 0xa0, 0x87, 0xf0, 0xa2, 0x81, 0x93, 0xe6, 0x49, 0xa0, 0x4a, 0xe9, 0xd8, 0x4c, 0xf2, 0xc8, 0xa9, 0xa4, 0x6c, 0xdf, 0xd8, 0xf1, 0xac, 0x62, 0xc7, 0xe0, 0xf2, 0x0f, 0x4e, 0x27, 0x03, 0x0c, 0x72, 0xb2, 0x0a, 0x5d, 0xb7, 0x25, 0xb4, 0xa8, 0x68, 0x3d, 0xf5, 0x55, 0x6e, 0xe7, 0x94, 0x7f, 0xa0, 0xa7, 0x66, 0x1b, 0x6d, 0x99, 0xdc, 0xb7, 0x9e, 0x49, 0x4f, 0x46, 0x73, 0xf0, 0x73, 0xa0, 0x41, 0xdd, 0x90, 0x7c, 0x87, 0x32, 0x4e, 0x86, 0x25, 0xdd } -, - /* Encryption */ - 128, - { 0x1a, 0x6d, 0xf5, 0x75, 0x99, 0x84, 0xf2, 0xc4, 0x11, 0x93, 0x55, 0xc5, 0xdb, 0x35, 0xc8, 0xa4, 0x78, 0x16, 0x4d, 0x5e, 0x5e, 0xe7, 0x7b, 0x49, 0x91, 0xf1, 0x04, 0xba, 0x91, 0xb9, 0x87, 0x0f, 0x15, 0x91, 0xbe, 0x1f, 0x19, 0xf5, 0x5a, 0x80, 0x51, 0xa6, 0x2c, 0x0e, 0x59, 0x49, 0x3d, 0xf6, 0xf0, 0x0f, 0xe5, 0x0e, 0xf7, 0x3a, 0x6c, 0xf0, 0xc4, 0x35, 0x41, 0xf5, 0x32, 0x0d, 0xab, 0x7b, 0x2f, 0xc6, 0x7c, 0x93, 0x22, 0x5c, 0xcc, 0xd6, 0xd5, 0x03, 0x47, 0xaa, 0x96, 0x9a, 0xd8, 0x7b, 0xd3, 0xd8, 0x20, 0x81, 0x45, 0x4f, 0xea, 0xd8, 0x10, 0xdc, 0x1a, 0xb8, 0xc2, 0x17, 0x81, 0xf7, 0x61, 0x2e, 0x64, 0x06, 0x72, 0x9b, 0x32, 0x2e, 0x04, 0xb1, 0x62, 0x4f, 0x85, 0x38, 0x98, 0x56, 0x59, 0xae, 0x34, 0xd9, 0x93, 0x1e, 0x01, 0x9f, 0x76, 0x2c, 0x79, 0x7d, 0x5c, 0xbf, 0xa3, 0x2d } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.9", - /* Message */ - 33, - { 0x97, 0xe0, 0xb6, 0x36, 0xbf, 0xdd, 0xb8, 0xe1, 0xc8, 0xa9, 0xcf, 0x5b, 0x30, 0x5c, 0xef, 0x3a, 0x8f, 0x47, 0xf9, 0xa8, 0xb3, 0x34, 0x4f, 0x13, 0x55, 0xfa, 0x3d, 0xba, 0xb6, 0x7b, 0xb9, 0x72, 0x10 } -, - /* Seed */ - 92, - { 0xc1, 0xf8, 0x9b, 0xcd, 0xc5, 0x60, 0x40, 0xd5, 0xe6, 0x63, 0xb7, 0x4b, 0xfd, 0xe2, 0x39, 0x7b, 0x58, 0x46, 0x08, 0xcd, 0xf3, 0x2d, 0x5a, 0x58, 0x44, 0x72, 0x4a, 0xc7, 0xe5, 0x98, 0xa8, 0x6e, 0xf7, 0x11, 0x4b, 0x1b, 0xe0, 0x87, 0x30, 0xcb, 0x10, 0xf6, 0x61, 0xfb, 0xfb, 0x86, 0x09, 0xf7, 0xc6, 0xc3, 0x74, 0x42, 0xa1, 0xb1, 0x1e, 0x04, 0xa6, 0x11, 0xff, 0x8c, 0xa5, 0xce, 0x9a, 0xfc, 0x1e, 0xb3, 0xaa, 0xa9, 0x2c, 0x9f, 0x28, 0xba, 0xe2, 0x20, 0x44, 0x05, 0x78, 0x99, 0x02, 0x26, 0x07, 0x83, 0x78, 0xc4, 0x93, 0x41, 0x13, 0x74, 0xc5, 0x3e, 0x3d, 0xdc } -, - /* Encryption */ - 128, - { 0x87, 0x3c, 0xc4, 0xdc, 0xa4, 0x27, 0x97, 0x2b, 0x63, 0xc6, 0xcc, 0x8a, 0xc1, 0x1c, 0xcc, 0x33, 0xc9, 0x59, 0xf7, 0xfc, 0xfe, 0x4b, 0x45, 0xbb, 0xd4, 0x7b, 0x29, 0xd9, 0xc9, 0x88, 0xc0, 0x1a, 0x96, 0xbc, 0x1e, 0xae, 0x0e, 0xf9, 0xb1, 0x94, 0x8d, 0xce, 0x2c, 0xc9, 0xf0, 0xaa, 0x91, 0x7e, 0x86, 0xa6, 0xc1, 0x1f, 0x8d, 0xa3, 0xda, 0x29, 0xdf, 0x90, 0x59, 0x01, 0xf1, 0x91, 0x8a, 0x76, 0x16, 0x8d, 0xe1, 0x17, 0x5e, 0x27, 0x35, 0x12, 0x8c, 0x09, 0x72, 0x99, 0xd6, 0x6e, 0xa5, 0xcc, 0xf9, 0xb9, 0x5b, 0x36, 0x92, 0xee, 0xbf, 0xc6, 0xea, 0x11, 0xbc, 0x37, 0x09, 0x1b, 0x79, 0x5f, 0x18, 0x80, 0x3d, 0x70, 0xe7, 0x95, 0x58, 0xe1, 0x25, 0x16, 0x23, 0x0f, 0xed, 0x55, 0x15, 0xe5, 0x1b, 0x45, 0xae, 0x86, 0xce, 0xfe, 0x47, 0xb9, 0x37, 0x90, 0xe4, 0x99, 0x4d, 0xc4, 0x1e, 0x05 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.10", - /* Message */ - 55, - { 0x82, 0xb5, 0x07, 0x5b, 0xfc, 0x88, 0xf4, 0x00, 0x65, 0x76, 0xaa, 0x80, 0xa0, 0x00, 0x7a, 0x74, 0x51, 0x18, 0x4d, 0x4f, 0x76, 0x0c, 0xf9, 0x24, 0x28, 0x04, 0x22, 0x2b, 0x0e, 0x07, 0x26, 0xf5, 0x55, 0x03, 0x0e, 0x4e, 0x6b, 0x01, 0xf7, 0x93, 0xb0, 0x97, 0x01, 0x81, 0x27, 0x82, 0x4a, 0x3e, 0x40, 0x24, 0x57, 0xd8, 0x49, 0x5f, 0xc0 } -, - /* Seed */ - 70, - { 0xd5, 0x5e, 0x3d, 0x48, 0x97, 0xe9, 0xd8, 0x65, 0x01, 0x4c, 0xb1, 0x5d, 0x3e, 0xe3, 0xf9, 0xfb, 0xd2, 0x9c, 0x92, 0xe5, 0xc2, 0x37, 0xdc, 0xae, 0x46, 0x67, 0x2a, 0x46, 0x3e, 0xaa, 0xa4, 0xf7, 0xdd, 0x09, 0x86, 0x1e, 0x94, 0x6a, 0xc6, 0x5b, 0x85, 0x62, 0x50, 0x63, 0x93, 0xb8, 0x51, 0x92, 0xad, 0x41, 0xfb, 0x0c, 0x48, 0xc8, 0xc0, 0x52, 0x98, 0x1b, 0xdd, 0xcd, 0x5f, 0x1f, 0xc8, 0xb1, 0x39, 0xcd, 0x47, 0xca, 0xcf, 0xfc } -, - /* Encryption */ - 128, - { 0x2e, 0x83, 0xc3, 0xd2, 0x88, 0x01, 0x5a, 0x5f, 0x50, 0x3d, 0x3e, 0x5d, 0xe7, 0xd2, 0xad, 0x91, 0x06, 0x54, 0x5e, 0xf9, 0x7d, 0x63, 0xe4, 0xd0, 0x6a, 0x5a, 0x0d, 0x9d, 0xbc, 0x29, 0xf6, 0xba, 0xfb, 0x93, 0xa5, 0x17, 0x3f, 0xa5, 0x06, 0x3a, 0x69, 0x39, 0xdb, 0xa6, 0xc7, 0xa4, 0x28, 0xc3, 0x5e, 0x7d, 0xbe, 0x6a, 0x95, 0x93, 0xfe, 0x5e, 0xc4, 0xc1, 0x98, 0x78, 0x89, 0x3f, 0x31, 0x37, 0x09, 0xc8, 0x76, 0x02, 0x72, 0x6c, 0xb3, 0x25, 0x5b, 0xe7, 0x5a, 0xdc, 0x7f, 0x2f, 0x27, 0xe6, 0xdb, 0x91, 0xc3, 0xa3, 0x43, 0xea, 0xff, 0x1c, 0x28, 0xd9, 0xd5, 0xf7, 0xcb, 0x65, 0x74, 0xe6, 0x31, 0x06, 0x90, 0x03, 0xcd, 0xcf, 0xa0, 0x77, 0x43, 0xa7, 0x34, 0x0d, 0x58, 0x83, 0x9e, 0x70, 0x8b, 0xf3, 0x6a, 0xf6, 0x34, 0x2d, 0xb8, 0xdf, 0xa4, 0x1f, 0xea, 0xda, 0xfc, 0x69, 0x53, 0xac } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.11", - /* Message */ - 34, - { 0x36, 0x48, 0xc3, 0x6f, 0x85, 0x1f, 0x52, 0xf2, 0x32, 0x87, 0x79, 0x09, 0x19, 0x85, 0xa3, 0xc8, 0x12, 0xe1, 0x8a, 0x70, 0x55, 0xd0, 0x90, 0xbb, 0xf0, 0x32, 0x4c, 0x13, 0x79, 0x3b, 0xb8, 0x22, 0x1a, 0x57 } -, - /* Seed */ - 91, - { 0xc1, 0x27, 0x71, 0x85, 0xc3, 0x59, 0x55, 0xca, 0xed, 0xfd, 0xf9, 0xde, 0x55, 0xd5, 0xd9, 0x5a, 0x39, 0x8d, 0x58, 0xf5, 0xf3, 0x33, 0x19, 0x1f, 0xc0, 0x29, 0x45, 0xef, 0xdf, 0xad, 0xfb, 0x6d, 0xb0, 0x5e, 0xe2, 0xa2, 0xd3, 0x41, 0x83, 0xed, 0xf8, 0x9a, 0x1a, 0x4d, 0xcc, 0xc4, 0x65, 0x91, 0xb3, 0x53, 0x2b, 0xa7, 0x03, 0x93, 0x62, 0xc7, 0x5d, 0xf1, 0x94, 0xec, 0x10, 0x64, 0x48, 0xaf, 0xb7, 0xf6, 0xbf, 0xb2, 0x80, 0x7e, 0x38, 0x3e, 0x15, 0x99, 0x54, 0x25, 0x5e, 0x82, 0x7c, 0xb9, 0xda, 0xdc, 0x8d, 0x9b, 0x7e, 0x68, 0xa1, 0xaa, 0x09, 0x76, 0x35 } -, - /* Encryption */ - 128, - { 0x88, 0x62, 0xf1, 0x97, 0x3f, 0xef, 0xe0, 0xaf, 0x02, 0xd9, 0x6c, 0xc4, 0x58, 0x33, 0x4d, 0xed, 0x6c, 0x02, 0xd8, 0xd7, 0xea, 0xf5, 0x93, 0x77, 0x9c, 0x5d, 0x38, 0x6c, 0x4e, 0x49, 0xf7, 0x68, 0xf1, 0x30, 0xb4, 0x87, 0xb3, 0xc9, 0x1e, 0x32, 0x3a, 0x47, 0x7e, 0x4c, 0x11, 0x0a, 0x33, 0x41, 0xff, 0x46, 0xee, 0xe3, 0x7c, 0x77, 0x3e, 0x5c, 0x0a, 0xc8, 0x39, 0xbc, 0x55, 0xcc, 0x0c, 0x07, 0x0c, 0xac, 0x01, 0xcd, 0x45, 0x18, 0x3c, 0xfe, 0xe6, 0xb8, 0x8b, 0xfb, 0x82, 0x36, 0x1d, 0x35, 0x60, 0x19, 0x7c, 0xde, 0xab, 0x42, 0xe5, 0xc7, 0x55, 0xd2, 0x37, 0x97, 0x1a, 0x88, 0xda, 0xf6, 0x10, 0xcb, 0x39, 0x52, 0x61, 0x4b, 0x36, 0x40, 0x56, 0xcd, 0x49, 0x14, 0x20, 0xef, 0xfe, 0x3a, 0x0b, 0x8c, 0xe3, 0x1f, 0x2e, 0x3e, 0x49, 0xca, 0xd6, 0xf3, 0xb0, 0x64, 0x0f, 0x44, 0x91, 0xde } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.12", - /* Message */ - 20, - { 0x94, 0xf7, 0x8c, 0xf4, 0x5c, 0x53, 0xfc, 0x46, 0xe7, 0xeb, 0x1b, 0x26, 0x61, 0x8a, 0x29, 0xe9, 0x48, 0x50, 0x12, 0xc1 } -, - /* Seed */ - 105, - { 0xe6, 0xde, 0x9e, 0x9b, 0x90, 0x22, 0xa5, 0x5f, 0x56, 0x12, 0x1d, 0x5a, 0xc0, 0x0a, 0xa6, 0xdf, 0x29, 0x9c, 0x8a, 0x36, 0x94, 0x22, 0xe7, 0x54, 0x29, 0x56, 0xb6, 0xda, 0x2e, 0x0d, 0xcd, 0xee, 0x96, 0x8d, 0xb0, 0x7d, 0x99, 0x5a, 0x7b, 0xb8, 0x76, 0xf7, 0xf8, 0xcd, 0x66, 0xb2, 0xf5, 0x42, 0xc0, 0x53, 0x08, 0xf7, 0x49, 0x83, 0xa3, 0xf8, 0x36, 0x0c, 0x6b, 0x89, 0x47, 0xf8, 0x7d, 0x60, 0x8b, 0x03, 0x1a, 0x2c, 0x68, 0xdd, 0xe1, 0x47, 0x1a, 0xe4, 0x96, 0xae, 0x9b, 0x16, 0xe2, 0xa8, 0x11, 0x81, 0xeb, 0x6f, 0xc2, 0xf6, 0x5b, 0xaa, 0xad, 0xda, 0x64, 0x22, 0xa9, 0x34, 0x31, 0xf6, 0xf3, 0xb0, 0x7b, 0x5b, 0x46, 0xa3, 0xcf, 0x89, 0x48 } -, - /* Encryption */ - 128, - { 0x3c, 0x6d, 0x3b, 0x43, 0xd2, 0x3a, 0xdb, 0x79, 0xd6, 0x97, 0x23, 0x38, 0x08, 0xb0, 0x74, 0x48, 0x76, 0x97, 0xf3, 0x35, 0xfd, 0x99, 0xcd, 0xe8, 0x65, 0x41, 0x1f, 0xb1, 0x82, 0x28, 0x92, 0x56, 0x1f, 0xdc, 0x24, 0xa8, 0xb8, 0xbb, 0x2c, 0x4f, 0x65, 0x3c, 0x4d, 0x15, 0x6c, 0x77, 0xa7, 0x5d, 0xe3, 0x16, 0x00, 0xb5, 0x70, 0x9e, 0x8d, 0x50, 0x6e, 0x98, 0xe1, 0xd3, 0x73, 0xcb, 0xda, 0x01, 0xf4, 0xd9, 0xfe, 0xb0, 0x29, 0x71, 0x98, 0xca, 0xd0, 0xca, 0x2a, 0x7e, 0x3b, 0x1e, 0x63, 0x90, 0x3b, 0x10, 0x43, 0xce, 0x79, 0x49, 0x4c, 0x57, 0x54, 0xf7, 0xf9, 0x0f, 0xc1, 0xf0, 0x73, 0xa6, 0x19, 0x92, 0x9e, 0xf1, 0x26, 0x39, 0x4b, 0x06, 0x24, 0xf3, 0xb8, 0xba, 0x6d, 0x56, 0x45, 0xe9, 0x90, 0xe7, 0xc0, 0x13, 0x2c, 0xe2, 0x12, 0x31, 0x46, 0xfd, 0x9c, 0xad, 0xf7, 0x45, 0xec, 0x61 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.13", - /* Message */ - 35, - { 0x77, 0x9d, 0x1e, 0xb8, 0x4f, 0xa2, 0x84, 0xc3, 0x7d, 0x29, 0xd5, 0xe1, 0x79, 0xd0, 0x03, 0x06, 0xb4, 0x13, 0xc4, 0x4a, 0x80, 0x0a, 0x07, 0x7e, 0x59, 0x85, 0x3f, 0x63, 0x05, 0xf9, 0x2e, 0x59, 0xfb, 0x7f, 0x81 } -, - /* Seed */ - 90, - { 0xc3, 0xe6, 0xd1, 0x8b, 0xda, 0x97, 0x78, 0x2c, 0xa7, 0x81, 0xfa, 0x76, 0xd9, 0x7a, 0x6c, 0x94, 0xd8, 0x54, 0xd1, 0x41, 0x99, 0xb4, 0xea, 0x7d, 0x82, 0xc5, 0xbc, 0xbb, 0xe6, 0xcd, 0xaa, 0xb5, 0x25, 0x57, 0x47, 0x44, 0x3c, 0x59, 0xbf, 0x8c, 0x77, 0xec, 0xda, 0xa6, 0x4a, 0xe7, 0xce, 0x61, 0xe2, 0xc7, 0x30, 0x01, 0x32, 0xb7, 0x54, 0xe9, 0x16, 0x2f, 0x7c, 0xde, 0x75, 0x8f, 0x48, 0x0a, 0xe5, 0x88, 0xcf, 0xd4, 0x4a, 0x94, 0x6d, 0x64, 0xe2, 0x72, 0x0a, 0x2d, 0x17, 0x52, 0x55, 0x45, 0x22, 0x04, 0x84, 0x83, 0x81, 0x18, 0xad, 0x6e, 0x6b, 0x54 } -, - /* Encryption */ - 128, - { 0x72, 0x2c, 0xa9, 0x25, 0x66, 0xc7, 0x3c, 0xc8, 0x5d, 0x19, 0xce, 0x3f, 0xaa, 0x14, 0xcb, 0x2e, 0x79, 0x84, 0x9f, 0x20, 0x50, 0x92, 0xd1, 0x58, 0x92, 0x82, 0x31, 0x3c, 0x04, 0x27, 0xf0, 0x67, 0x79, 0x8a, 0xfa, 0xe3, 0xe3, 0xf0, 0xa5, 0x61, 0xf3, 0x99, 0x34, 0x6e, 0x9d, 0x10, 0x7d, 0xa0, 0x4a, 0xf4, 0x4b, 0x0c, 0x6f, 0x04, 0x4a, 0xde, 0xfe, 0x09, 0x7a, 0x0c, 0xd1, 0x4a, 0x47, 0xa9, 0x9c, 0xd9, 0x81, 0x9a, 0x98, 0x41, 0x37, 0x06, 0x30, 0x7c, 0xbd, 0x0d, 0xa0, 0x16, 0x97, 0x46, 0x9e, 0xff, 0x71, 0xd3, 0x14, 0x41, 0x63, 0x94, 0x93, 0xfb, 0xed, 0x8e, 0xee, 0x1b, 0xa3, 0x9f, 0xdd, 0x07, 0xfc, 0x0e, 0xa0, 0x82, 0x30, 0x18, 0x61, 0x79, 0xf9, 0x0e, 0x7e, 0xf1, 0x3c, 0x61, 0xee, 0x56, 0xf1, 0x67, 0xfc, 0x2f, 0x6b, 0x15, 0x79, 0x3e, 0x1a, 0x32, 0x24, 0xff, 0xa2, 0x9e } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.14", - /* Message */ - 1, - { 0x88 } -, - /* Seed */ - 124, - { 0xc0, 0x16, 0x9d, 0x76, 0xe4, 0xea, 0x45, 0x45, 0x41, 0x0d, 0xdf, 0x66, 0x46, 0xc1, 0xba, 0x7d, 0xd2, 0x72, 0xd7, 0xc3, 0x49, 0x8b, 0xa6, 0xb0, 0x80, 0x4b, 0x42, 0x61, 0x30, 0xa8, 0x0f, 0xbf, 0xff, 0x4b, 0xb7, 0xb5, 0xf5, 0x59, 0xb0, 0xa9, 0x09, 0x0e, 0x4a, 0xd9, 0xb9, 0xf4, 0x16, 0xa6, 0xdf, 0xdc, 0x15, 0x01, 0xb1, 0xba, 0x46, 0x87, 0x7b, 0x1a, 0x96, 0xfa, 0x84, 0x91, 0xdc, 0xfd, 0xde, 0x50, 0xeb, 0xee, 0xd2, 0x4d, 0x3f, 0x98, 0x96, 0x24, 0x13, 0x34, 0x6e, 0xd4, 0xa3, 0x39, 0x3e, 0x23, 0x5b, 0x77, 0xbc, 0x1e, 0xd6, 0x74, 0x68, 0xec, 0xe2, 0x79, 0x2a, 0x2f, 0xd3, 0xa8, 0x34, 0x8f, 0xc5, 0x50, 0x9b, 0x59, 0x06, 0xf2, 0x88, 0x56, 0x15, 0xdf, 0x8c, 0x14, 0x61, 0x37, 0x7a, 0x74, 0x1d, 0x59, 0x52, 0xfb, 0x36, 0xea, 0xc0, 0x20, 0x1e, 0x27 } -, - /* Encryption */ - 128, - { 0x4e, 0xd7, 0xd1, 0x29, 0x1a, 0x03, 0x36, 0x65, 0x4d, 0x5c, 0xa2, 0xb1, 0xf9, 0xd2, 0x0c, 0xb2, 0xda, 0x72, 0x26, 0xf7, 0x11, 0x6b, 0x93, 0x09, 0x88, 0x43, 0x9b, 0x44, 0x63, 0x98, 0x11, 0x04, 0xbd, 0x63, 0xc2, 0xce, 0x2b, 0x77, 0xd6, 0x26, 0xb3, 0x10, 0x9c, 0x93, 0x14, 0x03, 0xac, 0x5b, 0x49, 0xb4, 0x24, 0x7c, 0x4f, 0x69, 0x67, 0xb8, 0xc0, 0xdb, 0x06, 0x3c, 0x99, 0x95, 0xaf, 0x9d, 0x36, 0x54, 0x06, 0x50, 0x93, 0x8b, 0x01, 0xf9, 0x39, 0x06, 0xf9, 0x83, 0x89, 0x07, 0xed, 0x59, 0x36, 0xab, 0xb3, 0x43, 0xb0, 0xe2, 0x55, 0x09, 0xa1, 0xd2, 0xd4, 0xc5, 0xc8, 0xb9, 0x58, 0x06, 0x50, 0xda, 0x2c, 0xe1, 0x1f, 0xa3, 0xcf, 0x3e, 0x64, 0x07, 0x23, 0xea, 0xcb, 0xee, 0x87, 0xfa, 0xd3, 0xee, 0x35, 0x95, 0x8b, 0x45, 0x07, 0x5d, 0xf7, 0x81, 0xc4, 0x13, 0x46, 0x6a, 0xf1, 0x39 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.15", - /* Message */ - 51, - { 0xa2, 0xdc, 0x08, 0x77, 0x78, 0xd5, 0x43, 0x40, 0x8e, 0x89, 0x73, 0xf1, 0x36, 0x31, 0x59, 0xed, 0xb8, 0xf0, 0x78, 0x3c, 0x45, 0x70, 0x89, 0x07, 0x2d, 0xce, 0x66, 0xd3, 0x10, 0x2b, 0xb4, 0xfa, 0xe6, 0x0a, 0xa6, 0x0e, 0x41, 0x93, 0x3c, 0x48, 0xa1, 0xbe, 0x39, 0x53, 0xec, 0x2f, 0x80, 0x4c, 0x0c, 0xc9, 0x6c } -, - /* Seed */ - 74, - { 0x18, 0x11, 0x20, 0x14, 0x06, 0x53, 0x29, 0xd0, 0x4b, 0xfb, 0x0c, 0xf5, 0x44, 0xdd, 0x38, 0xd7, 0xbe, 0xf1, 0x54, 0x9b, 0x4a, 0x49, 0xa1, 0x67, 0x76, 0xdd, 0xa7, 0x4d, 0x0a, 0x7e, 0xdc, 0x49, 0x67, 0xb4, 0x24, 0x0c, 0x37, 0x14, 0x2f, 0xa3, 0xf6, 0x63, 0x9c, 0x26, 0x96, 0xcd, 0x7d, 0x4b, 0x18, 0xa1, 0x1e, 0x2f, 0xb5, 0x40, 0x81, 0xf2, 0xde, 0x5b, 0xd7, 0xbd, 0x15, 0xcd, 0xda, 0x92, 0xc9, 0x4c, 0x3a, 0x47, 0x18, 0x7b, 0x5f, 0xf4, 0x3b, 0x53 } -, - /* Encryption */ - 128, - { 0x71, 0x15, 0x19, 0x0a, 0x21, 0x04, 0x88, 0xf0, 0x4f, 0xa0, 0xc0, 0x0c, 0x93, 0xa4, 0x68, 0xa8, 0x03, 0x0b, 0x7b, 0x9f, 0xc1, 0x00, 0x20, 0xd8, 0x31, 0x0b, 0xcb, 0x01, 0xa5, 0xc8, 0xdd, 0xa1, 0xd0, 0x6c, 0xe2, 0x41, 0xdc, 0x77, 0x5b, 0x43, 0xe6, 0xf1, 0x3b, 0x19, 0xab, 0xfc, 0xbf, 0x36, 0x16, 0xe8, 0x4f, 0x10, 0x7c, 0x9e, 0xd8, 0x0d, 0x1b, 0x86, 0xbf, 0x87, 0xc9, 0x8c, 0x2b, 0x62, 0x9f, 0xfa, 0xda, 0xa6, 0xec, 0x01, 0xf4, 0xe6, 0x75, 0x55, 0x8e, 0xf5, 0x26, 0x06, 0xea, 0xf1, 0x26, 0x06, 0x8f, 0xa7, 0x53, 0x4d, 0xd1, 0x3b, 0x92, 0x0d, 0x23, 0x81, 0x69, 0x5a, 0xd7, 0x75, 0xff, 0xf0, 0xbb, 0x7c, 0xec, 0x46, 0x90, 0x90, 0x1d, 0x6f, 0x1e, 0x17, 0x36, 0xb8, 0x2c, 0xfe, 0x3a, 0x0c, 0x22, 0x4d, 0x18, 0xf1, 0x29, 0x15, 0xfd, 0xc9, 0x5c, 0x18, 0x39, 0x7c, 0x35, 0x70 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.16", - /* Message */ - 36, - { 0x11, 0x0b, 0xf2, 0xb1, 0xd0, 0xdd, 0x81, 0x2f, 0x2a, 0x5a, 0x21, 0xf3, 0x40, 0x4f, 0xa2, 0xf2, 0xc4, 0x54, 0xc4, 0x43, 0x2f, 0xdf, 0xa7, 0x0f, 0x1b, 0x0f, 0x23, 0xec, 0x69, 0xc1, 0x02, 0x37, 0x73, 0xa7, 0x3a, 0xba } -, - /* Seed */ - 89, - { 0x17, 0xb8, 0x5f, 0x76, 0x53, 0xff, 0x0e, 0xf5, 0xde, 0x7f, 0x25, 0x69, 0x6c, 0xd4, 0x90, 0x23, 0xad, 0x8e, 0xac, 0x94, 0x8a, 0x83, 0xe2, 0x24, 0x58, 0xec, 0xd5, 0xd1, 0x0a, 0x43, 0x86, 0x6d, 0xc7, 0x91, 0x55, 0x5e, 0x64, 0xf0, 0x78, 0xc3, 0x8c, 0x75, 0x2b, 0x6e, 0x9c, 0x6e, 0xee, 0xb3, 0x39, 0xee, 0xc9, 0x10, 0x16, 0xd2, 0x58, 0x88, 0x6d, 0x01, 0x27, 0x75, 0xad, 0x64, 0x36, 0x02, 0xa0, 0xf0, 0xd1, 0x79, 0x34, 0x54, 0xa0, 0x60, 0x94, 0x71, 0x16, 0x22, 0x88, 0x22, 0x39, 0x50, 0x82, 0x6e, 0xd8, 0xe2, 0x02, 0x5d, 0xa9, 0xa4, 0xe9 } -, - /* Encryption */ - 128, - { 0x5d, 0x0f, 0x2f, 0xd8, 0x5e, 0x6f, 0x9d, 0x9e, 0x43, 0x2f, 0xad, 0x86, 0x0f, 0xdc, 0x49, 0x96, 0x96, 0x24, 0xff, 0x4f, 0xa0, 0x71, 0x5d, 0x36, 0x1e, 0x9f, 0x00, 0xb0, 0x5b, 0x3a, 0xa0, 0xba, 0x9e, 0xb2, 0x7b, 0xae, 0x61, 0x0e, 0xfd, 0xe1, 0x14, 0x3c, 0xbc, 0x93, 0x3b, 0x52, 0xde, 0xa7, 0x01, 0x87, 0x60, 0xbb, 0x25, 0x1b, 0xe0, 0xe1, 0xe3, 0x0c, 0xd1, 0xc5, 0x99, 0x1a, 0xef, 0x74, 0x4d, 0xb8, 0x2f, 0x16, 0x6b, 0x90, 0x63, 0xef, 0xb7, 0xe3, 0x38, 0x40, 0xa2, 0x56, 0x90, 0x05, 0x65, 0x4b, 0x14, 0x0e, 0x11, 0x5f, 0xa5, 0x6c, 0x30, 0x40, 0x6e, 0x45, 0x65, 0x6e, 0x81, 0x99, 0xaf, 0x39, 0x4f, 0x63, 0x86, 0x34, 0x6d, 0x5f, 0x1a, 0x30, 0x0b, 0x95, 0xba, 0x48, 0xfc, 0x08, 0x73, 0xd6, 0x18, 0xd6, 0x92, 0xbb, 0x02, 0x5b, 0xf1, 0x5e, 0x9d, 0x23, 0x2c, 0x64, 0x1a, 0xda } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.17", - /* Message */ - 60, - { 0xd9, 0xd9, 0x37, 0x13, 0x1f, 0xf1, 0x94, 0x0a, 0x86, 0xbf, 0x71, 0x39, 0xb4, 0x81, 0x14, 0x36, 0x41, 0x95, 0xb4, 0x00, 0x52, 0x22, 0xa8, 0xbb, 0xbc, 0x26, 0x1a, 0x7f, 0x2e, 0x21, 0x2b, 0x8d, 0xd0, 0x35, 0xe5, 0x3f, 0x91, 0x44, 0xf5, 0x61, 0x0b, 0x4c, 0xec, 0x32, 0xea, 0x01, 0xbd, 0xa9, 0xd3, 0xc8, 0x0c, 0xf2, 0x94, 0x64, 0xf8, 0x0f, 0x5f, 0x56, 0x56, 0xc8 } -, - /* Seed */ - 65, - { 0x33, 0x05, 0xe1, 0xda, 0x60, 0xe5, 0x86, 0x73, 0xfc, 0x46, 0xcd, 0x33, 0xbe, 0x2a, 0x66, 0xd3, 0xa1, 0x02, 0xc3, 0xdb, 0x16, 0x1e, 0xf4, 0x8c, 0x0d, 0x60, 0xef, 0x25, 0x03, 0x1b, 0x40, 0x14, 0x16, 0x78, 0x26, 0x24, 0x6a, 0xa5, 0x28, 0xa3, 0xa3, 0xe5, 0xb0, 0xab, 0x95, 0x07, 0x8d, 0x84, 0x01, 0xd9, 0x29, 0x03, 0x59, 0x5a, 0xfc, 0x1a, 0xa8, 0x54, 0xe6, 0x04, 0x4e, 0x5e, 0xb5, 0xf5, 0xbe } -, - /* Encryption */ - 128, - { 0x0e, 0x12, 0x16, 0x74, 0x89, 0xf0, 0xba, 0xef, 0xca, 0xd6, 0x39, 0x34, 0xbc, 0x15, 0x9f, 0x1b, 0xbd, 0x9e, 0x9b, 0x28, 0x7e, 0x50, 0x0f, 0x49, 0x09, 0x23, 0xc1, 0x6a, 0x85, 0x56, 0x4a, 0x1d, 0xa6, 0x36, 0x59, 0x37, 0x5f, 0x22, 0xaf, 0x7b, 0xa4, 0x97, 0x98, 0xe1, 0x57, 0x8c, 0xf3, 0x15, 0xfa, 0xe3, 0xe9, 0xed, 0x56, 0x99, 0xc6, 0x91, 0xe3, 0xc1, 0xd0, 0xbb, 0x46, 0xda, 0x49, 0x2d, 0x01, 0x34, 0x9e, 0x93, 0x29, 0x59, 0x3d, 0x43, 0x81, 0xd0, 0x74, 0xa0, 0xa5, 0x31, 0xdf, 0x92, 0x1b, 0x31, 0x31, 0x6f, 0x7e, 0x2b, 0x4f, 0xe9, 0x15, 0x34, 0x72, 0x83, 0x24, 0x23, 0x35, 0xf0, 0xb0, 0xb2, 0x31, 0x92, 0xc7, 0x21, 0x02, 0xf2, 0xc6, 0x36, 0x24, 0xb1, 0xe7, 0x89, 0x65, 0x45, 0x0e, 0x82, 0x30, 0xd4, 0x87, 0x7e, 0x46, 0x17, 0xb0, 0x3d, 0x44, 0x83, 0x13, 0x98, 0xdd, 0xbf } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.18", - /* Message */ - 8, - { 0x81, 0xb3, 0x4a, 0xeb, 0x8a, 0xfb, 0x8a, 0x3f } -, - /* Seed */ - 117, - { 0x02, 0xf7, 0x48, 0x34, 0x2d, 0x01, 0x0f, 0xb5, 0x6a, 0x6f, 0x69, 0xf2, 0x1f, 0x8c, 0x6a, 0x63, 0x16, 0x79, 0xc8, 0xc4, 0xb8, 0xf6, 0xfe, 0xb5, 0x25, 0xcf, 0x8e, 0x72, 0xfd, 0xa8, 0xef, 0x8d, 0xf6, 0x62, 0x31, 0x28, 0xc0, 0xfe, 0x74, 0xbc, 0x59, 0x0c, 0xaa, 0x34, 0xf1, 0xee, 0xd1, 0xad, 0x2d, 0x61, 0x42, 0xdc, 0xc5, 0xbc, 0xae, 0x84, 0xef, 0x31, 0x37, 0x62, 0xf2, 0xe4, 0xe7, 0x03, 0x03, 0xd2, 0x09, 0xc8, 0xd9, 0x57, 0x7a, 0x7c, 0x84, 0x3d, 0x2b, 0x91, 0x72, 0xed, 0x4e, 0xfe, 0x2a, 0xd6, 0x29, 0x61, 0x4b, 0x99, 0xa9, 0x1a, 0x4c, 0xc8, 0x32, 0x5b, 0xa3, 0x24, 0x11, 0x6e, 0xcf, 0x0c, 0x5e, 0x29, 0x09, 0x49, 0x38, 0xae, 0x49, 0x89, 0x84, 0xf4, 0xf4, 0xcb, 0xb1, 0x62, 0x38, 0x86, 0xe0, 0x39, 0x73 } -, - /* Encryption */ - 128, - { 0x43, 0xb2, 0x76, 0xc7, 0xd3, 0x68, 0xea, 0x21, 0xc6, 0x80, 0x71, 0x16, 0xcd, 0xe8, 0x60, 0x82, 0x98, 0xf2, 0x40, 0x02, 0x07, 0x2d, 0x77, 0x6e, 0x56, 0xe6, 0x2c, 0x35, 0x72, 0xbf, 0xb9, 0x9d, 0xa4, 0xc5, 0x6e, 0x93, 0x8a, 0x47, 0xdc, 0x07, 0x5f, 0xa1, 0xff, 0x7a, 0x61, 0x8f, 0xb5, 0xfa, 0xed, 0x3e, 0xe3, 0x7b, 0x91, 0xdf, 0xc3, 0x91, 0x53, 0x49, 0x5a, 0xeb, 0xa9, 0xdf, 0x6d, 0x45, 0xdf, 0x94, 0xb0, 0xe8, 0xa8, 0xad, 0x2d, 0xb3, 0x7a, 0x9f, 0xe4, 0x6d, 0x0f, 0xdf, 0x15, 0x42, 0x31, 0xfd, 0x6f, 0x32, 0x21, 0x47, 0x4e, 0x8f, 0x5c, 0x19, 0x1f, 0xdb, 0x85, 0x38, 0xe1, 0xa6, 0x03, 0xe5, 0x98, 0x97, 0xe1, 0x50, 0xfa, 0xf9, 0x5b, 0x65, 0xda, 0x14, 0x06, 0x67, 0xed, 0xb1, 0x98, 0x09, 0xeb, 0x4a, 0x16, 0xac, 0xd0, 0x1e, 0xcc, 0x60, 0x4b, 0xda, 0x57, 0xf2, 0x0e, 0xf2 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.19", - /* Message */ - 10, - { 0x7b, 0xf9, 0xfa, 0xd8, 0x89, 0xde, 0x73, 0xed, 0x87, 0x3d } -, - /* Seed */ - 115, - { 0xfa, 0x5d, 0xad, 0x45, 0xa4, 0xbb, 0x5e, 0x74, 0xc4, 0xcf, 0x2e, 0x21, 0x3e, 0xd4, 0x0a, 0xa9, 0x61, 0x75, 0x98, 0xd1, 0x1d, 0x49, 0xae, 0x1c, 0x32, 0xd7, 0x94, 0xe0, 0x9c, 0xd0, 0xe5, 0xc7, 0xaa, 0xae, 0x81, 0xb9, 0x55, 0x4d, 0xde, 0x31, 0x08, 0xd6, 0x0a, 0x9a, 0x82, 0xf4, 0x2c, 0xc6, 0xc2, 0xa6, 0x89, 0xf4, 0x60, 0xff, 0x1d, 0x53, 0xad, 0x85, 0xbf, 0x83, 0x83, 0x11, 0xe7, 0x58, 0x9e, 0x19, 0x67, 0x95, 0x7b, 0x51, 0x56, 0x7a, 0xa0, 0xd3, 0x3a, 0xfa, 0x37, 0x52, 0xcd, 0xe6, 0xc5, 0x66, 0x1d, 0x4f, 0x27, 0xae, 0xd3, 0xdf, 0x52, 0x90, 0x5f, 0x1c, 0xf2, 0x25, 0x33, 0x04, 0x61, 0x8e, 0x07, 0x86, 0x04, 0x1e, 0x70, 0xb4, 0xdc, 0xba, 0xc8, 0xc1, 0x08, 0xba, 0x34, 0xac, 0x39, 0x39, 0xf4 } -, - /* Encryption */ - 128, - { 0x61, 0xc2, 0x55, 0x0e, 0x0b, 0x36, 0xa6, 0x79, 0x7f, 0xf8, 0x64, 0x93, 0x80, 0x1b, 0x11, 0x46, 0xd8, 0x90, 0x59, 0x49, 0x83, 0x52, 0xe4, 0xc2, 0x62, 0x27, 0x5b, 0x14, 0x04, 0xb1, 0x33, 0x15, 0xe9, 0x56, 0xbb, 0x3d, 0x31, 0x21, 0x85, 0xb5, 0x21, 0xb3, 0xc7, 0x08, 0xe9, 0xd9, 0x54, 0x02, 0x17, 0x19, 0xa0, 0x59, 0xd9, 0x84, 0x72, 0x4c, 0x53, 0xc0, 0x4f, 0x5a, 0xd2, 0x74, 0xbe, 0xf9, 0xff, 0x0a, 0x79, 0x50, 0xb2, 0xfd, 0xec, 0xc5, 0x29, 0x0c, 0xd5, 0xf3, 0xbc, 0x26, 0x52, 0x4c, 0xd1, 0x34, 0x20, 0x48, 0x18, 0x4b, 0x0e, 0x2c, 0xdf, 0x94, 0x06, 0xa4, 0x53, 0xa2, 0xef, 0x9f, 0x3b, 0xb2, 0x3c, 0x4e, 0x7c, 0x1c, 0x8b, 0x29, 0x52, 0xa0, 0x20, 0x2b, 0xcc, 0x23, 0x82, 0x47, 0xea, 0x32, 0x7b, 0x8c, 0x07, 0x00, 0xc8, 0x00, 0x3f, 0xd6, 0x34, 0xec, 0x1e, 0xd9, 0xbf, 0x30 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 1.20", - /* Message */ - 31, - { 0xb6, 0xa3, 0x50, 0x9b, 0xb3, 0xb9, 0xb0, 0xb5, 0x7c, 0xd5, 0x8d, 0xe4, 0x09, 0xd9, 0x53, 0x20, 0x1a, 0x04, 0x2f, 0x94, 0x92, 0xdc, 0x1d, 0x7e, 0x34, 0xa7, 0xd0, 0x94, 0x1a, 0x1a, 0x1b } -, - /* Seed */ - 94, - { 0x3a, 0x9e, 0x15, 0x06, 0x57, 0x86, 0xb3, 0xe0, 0x1d, 0x82, 0x6b, 0x86, 0x2a, 0x8f, 0x70, 0x2b, 0x5c, 0xac, 0x8c, 0x16, 0x62, 0xee, 0x7d, 0x15, 0xff, 0x32, 0x3c, 0xdf, 0xe7, 0x1e, 0xbf, 0x4a, 0xd1, 0xb1, 0xf3, 0xa6, 0xbc, 0xbd, 0xd4, 0xb0, 0x01, 0x08, 0x77, 0xec, 0xac, 0x09, 0x1f, 0x61, 0x59, 0x08, 0xe2, 0xbe, 0x40, 0x0b, 0xb0, 0xc4, 0x98, 0xe3, 0x55, 0xd5, 0x71, 0xfd, 0x10, 0x89, 0x5b, 0x8e, 0xe9, 0xc3, 0xa9, 0xc3, 0x1e, 0x4b, 0x11, 0x03, 0x89, 0xc3, 0xd5, 0xc4, 0x6e, 0xbf, 0x76, 0xb3, 0xb3, 0x5a, 0xd1, 0xf4, 0x79, 0x1b, 0x6d, 0x20, 0x97, 0xf1, 0x09, 0xf2 } -, - /* Encryption */ - 128, - { 0x6b, 0x4b, 0x6d, 0x7b, 0xab, 0xfe, 0x4d, 0x64, 0x17, 0xac, 0xad, 0xfb, 0x78, 0x57, 0x2e, 0x7c, 0x87, 0xe3, 0xfe, 0x1b, 0xd5, 0x8e, 0xef, 0xb0, 0xd4, 0xb1, 0x27, 0x9c, 0x7b, 0x7c, 0x83, 0x26, 0xa6, 0x8b, 0xb2, 0x87, 0x95, 0xe0, 0x9f, 0x9b, 0x1c, 0xe2, 0xe2, 0x4a, 0x53, 0x9f, 0x4b, 0x0d, 0x93, 0xb2, 0x92, 0x74, 0xce, 0xcf, 0x7c, 0xd9, 0xf0, 0xb7, 0x32, 0xae, 0xbe, 0xda, 0x91, 0x11, 0xbd, 0xfe, 0x25, 0xe2, 0x68, 0xa8, 0x8e, 0x34, 0x22, 0xe2, 0x9b, 0x52, 0xbd, 0x4b, 0x7a, 0x05, 0x47, 0xdb, 0x8f, 0xe1, 0x2a, 0x6f, 0xcf, 0x1a, 0x3c, 0x06, 0xa0, 0x02, 0xbf, 0x87, 0x0a, 0x2f, 0xab, 0xb7, 0xc4, 0x57, 0xe4, 0xbb, 0xce, 0x3e, 0x31, 0x6f, 0x72, 0x32, 0x44, 0x9f, 0x87, 0xa9, 0xd7, 0x02, 0xb1, 0x2d, 0x19, 0xbd, 0xe7, 0xf9, 0x59, 0x0f, 0x94, 0x67, 0xb0, 0x6b, 0xd5, 0x8a } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 2: A 1024-bit RSA key pair", -{ - /* Modulus */ - 128, - { 0x98, 0xb7, 0x05, 0x82, 0xca, 0x80, 0x8f, 0xd1, 0xd3, 0x50, 0x95, 0x62, 0xa0, 0xef, 0x30, 0x5a, 0xf6, 0xd9, 0x87, 0x54, 0x43, 0xb3, 0x5b, 0xdf, 0x24, 0xd5, 0x36, 0x35, 0x3e, 0x3f, 0x12, 0x28, 0xdc, 0xd1, 0x2a, 0x78, 0x56, 0x83, 0x56, 0xc6, 0xff, 0x32, 0x3a, 0xbf, 0x72, 0xac, 0x1c, 0xdb, 0xfe, 0x71, 0x2f, 0xb4, 0x9f, 0xe5, 0x94, 0xa5, 0xa2, 0x17, 0x5d, 0x48, 0xb6, 0x73, 0x25, 0x38, 0xd8, 0xdf, 0x37, 0xcb, 0x97, 0x0b, 0xe4, 0xa5, 0xb5, 0x62, 0xc3, 0xf2, 0x98, 0xdb, 0x9d, 0xdf, 0x75, 0x60, 0x78, 0x77, 0x91, 0x8c, 0xce, 0xd1, 0xd0, 0xd1, 0xf3, 0x77, 0x33, 0x8c, 0x0d, 0x3d, 0x32, 0x07, 0x79, 0x7e, 0x86, 0x2c, 0x65, 0xd1, 0x14, 0x39, 0xe5, 0x88, 0x17, 0x75, 0x27, 0xa7, 0xde, 0xd9, 0x19, 0x71, 0xad, 0xcf, 0x91, 0xe2, 0xe8, 0x34, 0xe3, 0x7f, 0x05, 0xa7, 0x36, 0x55 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x06, 0x14, 0xa7, 0x86, 0x05, 0x2d, 0x28, 0x4c, 0xd9, 0x06, 0xa8, 0xe4, 0x13, 0xf7, 0x62, 0x2c, 0x05, 0x0f, 0x35, 0x49, 0xc0, 0x26, 0x58, 0x9e, 0xa2, 0x77, 0x50, 0xe0, 0xbe, 0xd9, 0x41, 0x0e, 0x5a, 0x78, 0x83, 0xa1, 0xe6, 0x03, 0xf5, 0xc5, 0x17, 0xad, 0x36, 0xd4, 0x9f, 0xaa, 0xc5, 0xbd, 0x66, 0xbc, 0xb8, 0x03, 0x0f, 0xa8, 0xd3, 0x09, 0xe3, 0x51, 0xdd, 0xd7, 0x82, 0xd8, 0x43, 0xdf, 0x97, 0x56, 0x80, 0xae, 0x73, 0xee, 0xa9, 0xaa, 0xb2, 0x89, 0xb7, 0x57, 0x20, 0x5d, 0xad, 0xb8, 0xfd, 0xfb, 0x98, 0x9e, 0xc8, 0xdb, 0x8e, 0x70, 0x95, 0xf5, 0x1f, 0x24, 0x52, 0x9f, 0x56, 0x37, 0xaa, 0x66, 0x93, 0x31, 0xe2, 0x56, 0x9f, 0x8b, 0x85, 0x4a, 0xbe, 0xce, 0xc9, 0x9a, 0xa2, 0x64, 0xc3, 0xda, 0x7c, 0xc6, 0x86, 0x6f, 0x0c, 0x0e, 0x1f, 0xb8, 0x46, 0x98, 0x48, 0x58, 0x1c, 0x73 } -, - /* Prime 1 */ - 64, - { 0xcb, 0x61, 0xa8, 0x8c, 0x8c, 0x30, 0x5a, 0xd9, 0xa8, 0xfb, 0xec, 0x2b, 0xa4, 0xc8, 0x6c, 0xcc, 0xc2, 0x02, 0x80, 0x24, 0xaa, 0x16, 0x90, 0xc2, 0x9b, 0xc8, 0x26, 0x4d, 0x2f, 0xeb, 0xe8, 0x7e, 0x4f, 0x86, 0xe9, 0x12, 0xef, 0x0f, 0x5c, 0x18, 0x53, 0xd7, 0x1c, 0xbc, 0x9b, 0x14, 0xba, 0xed, 0x3c, 0x37, 0xce, 0xf6, 0xc7, 0xa3, 0x59, 0x8b, 0x6f, 0xbe, 0x06, 0x48, 0x10, 0x90, 0x5b, 0x57 } -, - /* Prime 2 */ - 64, - { 0xc0, 0x39, 0x9f, 0x0b, 0x93, 0x80, 0xfa, 0xba, 0x38, 0xff, 0x80, 0xd2, 0xff, 0xf6, 0xed, 0xe7, 0x9c, 0xfd, 0xab, 0xf6, 0x58, 0x97, 0x20, 0x77, 0xa5, 0xe2, 0xb2, 0x95, 0x69, 0x3e, 0xa5, 0x10, 0x72, 0x26, 0x8b, 0x91, 0x74, 0x6e, 0xea, 0x9b, 0xe0, 0x4a, 0xd6, 0x61, 0x00, 0xeb, 0xed, 0x73, 0x3d, 0xb4, 0xcd, 0x01, 0x47, 0xa1, 0x8d, 0x6d, 0xe8, 0xc0, 0xcd, 0x8f, 0xbf, 0x24, 0x9c, 0x33 } -, - /* Prime exponent 1 */ - 64, - { 0x94, 0x4c, 0x3a, 0x65, 0x79, 0x57, 0x4c, 0xf7, 0x87, 0x33, 0x62, 0xab, 0x14, 0x35, 0x9c, 0xb7, 0xd5, 0x03, 0x93, 0xc2, 0xa8, 0x4f, 0x59, 0xf0, 0xbd, 0x3c, 0xbd, 0x48, 0xed, 0x17, 0x7c, 0x68, 0x95, 0xbe, 0x8e, 0xb6, 0xe2, 0x9f, 0xf5, 0x8c, 0x3b, 0x9e, 0x0f, 0xf3, 0x2a, 0xb5, 0x7b, 0xf3, 0xbe, 0x44, 0x07, 0x62, 0x84, 0x81, 0x84, 0xaa, 0x9a, 0xa9, 0x19, 0xd5, 0x74, 0x56, 0x7e, 0x73 } -, - /* Prime exponent 2 */ - 64, - { 0x45, 0xeb, 0xef, 0xd5, 0x87, 0x27, 0x30, 0x8c, 0xd2, 0xb4, 0xe6, 0x08, 0x5a, 0x81, 0x58, 0xd2, 0x9a, 0x41, 0x8f, 0xee, 0xc1, 0x14, 0xe0, 0x03, 0x85, 0xbc, 0xeb, 0x96, 0xfb, 0xbc, 0x84, 0xd0, 0x71, 0xa5, 0x61, 0xb9, 0x5c, 0x30, 0x08, 0x79, 0x00, 0xe2, 0x58, 0x0e, 0xdb, 0x05, 0xf6, 0xce, 0xa7, 0x90, 0x7f, 0xcd, 0xca, 0x5f, 0x92, 0x91, 0x7b, 0x4b, 0xbe, 0xba, 0x5e, 0x1e, 0x14, 0x0f } -, - /* Coefficient */ - 64, - { 0xc5, 0x24, 0x68, 0xc8, 0xfd, 0x15, 0xe5, 0xda, 0x2f, 0x6c, 0x8e, 0xba, 0x4e, 0x97, 0xba, 0xeb, 0xe9, 0x95, 0xb6, 0x7a, 0x1a, 0x7a, 0xd7, 0x19, 0xdd, 0x9f, 0xff, 0x36, 0x6b, 0x18, 0x4d, 0x5a, 0xb4, 0x55, 0x07, 0x59, 0x09, 0x29, 0x20, 0x44, 0xec, 0xb3, 0x45, 0xcf, 0x2c, 0xdd, 0x26, 0x22, 0x8e, 0x21, 0xf8, 0x51, 0x83, 0x25, 0x5f, 0x4a, 0x9e, 0x69, 0xf4, 0xc7, 0x15, 0x2e, 0xbb, 0x0f } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 2.1", - /* Message */ - 17, - { 0xe9, 0xa7, 0x71, 0xe0, 0xa6, 0x5f, 0x28, 0x70, 0x8e, 0x83, 0xd5, 0xe6, 0xcc, 0x89, 0x8a, 0x41, 0xd7 } -, - /* Seed */ - 108, - { 0x16, 0x8e, 0x3e, 0xb5, 0x80, 0x9b, 0x08, 0x70, 0xe1, 0xf2, 0x48, 0x7e, 0x1b, 0xe7, 0x7a, 0x17, 0x6b, 0x34, 0x71, 0x6d, 0xe1, 0x41, 0xba, 0x4c, 0x90, 0x59, 0xda, 0x90, 0xe5, 0xe5, 0x1a, 0x36, 0x94, 0xe8, 0x58, 0xfe, 0xd1, 0x0b, 0x92, 0x6c, 0x02, 0x52, 0x39, 0x80, 0xa8, 0x90, 0x9d, 0xa9, 0x96, 0xc6, 0x43, 0x33, 0xea, 0x67, 0x67, 0x87, 0xbc, 0xe6, 0x77, 0xf1, 0x1f, 0xda, 0x77, 0xdb, 0xb1, 0xa9, 0x51, 0x6e, 0xdd, 0xa9, 0xb1, 0x29, 0x4f, 0xc2, 0xe4, 0x50, 0x52, 0x22, 0x88, 0xe9, 0x30, 0xbe, 0x7f, 0xa7, 0x29, 0xb2, 0x50, 0xe3, 0xaa, 0xc5, 0x20, 0x51, 0x1e, 0x95, 0x16, 0xaa, 0x86, 0x3a, 0xf6, 0xbc, 0x07, 0x5c, 0xbd, 0xbf, 0xf4, 0x30, 0x46, 0x70 } -, - /* Encryption */ - 128, - { 0x71, 0xc2, 0xb8, 0xfb, 0x38, 0x19, 0xf1, 0x34, 0xc2, 0x24, 0x7c, 0x6b, 0xab, 0xb4, 0xcf, 0xbe, 0x17, 0xd7, 0xb2, 0x64, 0x3f, 0x87, 0xac, 0xe5, 0xc5, 0x71, 0x27, 0x7b, 0xe1, 0x90, 0x8e, 0xf3, 0xa5, 0x28, 0x8e, 0x34, 0x38, 0x4e, 0x46, 0x0a, 0x70, 0x38, 0x6e, 0x7e, 0xa1, 0xd1, 0x9d, 0x3d, 0xca, 0x1c, 0xe1, 0x5b, 0xa9, 0x32, 0x39, 0xa8, 0xcd, 0xda, 0x18, 0xe3, 0x17, 0xfe, 0x07, 0x96, 0x80, 0xce, 0x7e, 0x6a, 0xc6, 0xd9, 0xbd, 0xaf, 0x86, 0xcb, 0x9a, 0xeb, 0xf1, 0xcf, 0x46, 0xcd, 0x10, 0xef, 0x6a, 0x68, 0x8b, 0x0c, 0xb2, 0xce, 0x76, 0x5d, 0xd0, 0xb3, 0x25, 0x20, 0x42, 0x39, 0x66, 0xee, 0xe1, 0xaa, 0x05, 0xc6, 0xc2, 0x8c, 0x6f, 0x35, 0x24, 0xfb, 0x68, 0x6b, 0x5f, 0xb1, 0x58, 0x53, 0x65, 0x9e, 0x58, 0x3a, 0xc4, 0x37, 0x21, 0x9d, 0xef, 0x8e, 0xdc, 0x58, 0xbe, 0x2d } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 2.2", - /* Message */ - 47, - { 0x66, 0x4b, 0xf0, 0x5d, 0x61, 0x2b, 0xaf, 0x61, 0x52, 0x4c, 0x60, 0x8e, 0xda, 0x36, 0xfc, 0x6e, 0xa2, 0xc9, 0x3c, 0x14, 0x31, 0x53, 0x22, 0x1b, 0xcf, 0xd6, 0xba, 0x0c, 0xfb, 0xbd, 0x6b, 0x64, 0x14, 0x47, 0xe4, 0x78, 0x8b, 0x0a, 0x46, 0x2c, 0xb5, 0xb3, 0xf9, 0xfa, 0xfc, 0x9a, 0x75 } -, - /* Seed */ - 78, - { 0xe7, 0xf0, 0xa2, 0x79, 0x18, 0xca, 0xd9, 0x15, 0xda, 0x28, 0x11, 0x36, 0x59, 0xff, 0xb5, 0xdf, 0xa0, 0xb5, 0x1b, 0x24, 0xd5, 0xa7, 0x1c, 0x20, 0x27, 0xf8, 0xe4, 0xd9, 0x40, 0x9e, 0x8c, 0x64, 0x72, 0xf0, 0xc5, 0x4b, 0x5c, 0x08, 0x85, 0x8d, 0xa6, 0x3d, 0x4b, 0x81, 0x72, 0xb0, 0x7d, 0xcf, 0x8c, 0x5a, 0x7e, 0x8f, 0x9e, 0x90, 0xf0, 0x17, 0xc2, 0x4b, 0x44, 0xd1, 0x6b, 0x67, 0x0b, 0xdc, 0x96, 0x03, 0x0c, 0x83, 0x53, 0xa2, 0x83, 0x9b, 0xa4, 0xc0, 0x75, 0xd2, 0x4c, 0x20 } -, - /* Encryption */ - 128, - { 0x06, 0x86, 0x90, 0x18, 0x13, 0xdb, 0x05, 0x3a, 0xc7, 0x08, 0xe3, 0xfc, 0xec, 0x6b, 0xae, 0x03, 0x60, 0x08, 0x8f, 0xd3, 0x44, 0xe9, 0xd7, 0xea, 0x11, 0x8b, 0xb3, 0xf5, 0x37, 0x53, 0x14, 0x25, 0x1e, 0x60, 0x67, 0x37, 0xf5, 0x82, 0x4b, 0x36, 0x28, 0xf6, 0x65, 0x03, 0x48, 0xf6, 0xab, 0x55, 0x3b, 0x27, 0x7d, 0xa0, 0x15, 0x44, 0xd0, 0x56, 0x73, 0xba, 0xed, 0xf4, 0x55, 0xcc, 0x03, 0x32, 0xf6, 0x13, 0xf6, 0x54, 0x78, 0xfc, 0xfe, 0x06, 0x67, 0x34, 0xc4, 0x65, 0x58, 0xbc, 0x23, 0x3b, 0x4b, 0x6f, 0x52, 0x41, 0xe4, 0xf4, 0xac, 0x53, 0xfc, 0x18, 0xc5, 0x53, 0x84, 0xc8, 0xfd, 0x96, 0x18, 0x3f, 0x0b, 0xb5, 0x51, 0x5e, 0x89, 0x31, 0x14, 0xf9, 0xc6, 0x1c, 0xcc, 0x11, 0xfc, 0x19, 0x83, 0xde, 0x74, 0x46, 0x92, 0x64, 0xdb, 0xdb, 0xb0, 0xc7, 0x49, 0x17, 0x4e, 0xcd, 0xfb, 0xe3 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.3", - /* Message */ - 52, - { 0x5e, 0x76, 0xe6, 0x6e, 0xd5, 0x75, 0x41, 0xfc, 0x23, 0xd3, 0x59, 0xf4, 0xad, 0xbf, 0x3f, 0x56, 0x82, 0x01, 0xd3, 0xc6, 0xf0, 0xe0, 0x26, 0xaa, 0xa5, 0x67, 0x63, 0x56, 0xcc, 0x98, 0x66, 0xf1, 0x75, 0x5d, 0xe9, 0x8c, 0xb3, 0x9f, 0x23, 0x6d, 0xaf, 0xa9, 0xe6, 0xbc, 0x79, 0x4b, 0x74, 0x43, 0xb5, 0x3a, 0x2d, 0x85 } -, - /* Seed */ - 73, - { 0x5c, 0x65, 0x68, 0xb6, 0xe3, 0x3b, 0xc1, 0x3a, 0xd2, 0xdc, 0xd6, 0x01, 0x2d, 0x17, 0xda, 0x81, 0xb1, 0x3d, 0xbd, 0x62, 0xaa, 0xe4, 0x0a, 0x64, 0xaf, 0x97, 0xe2, 0x19, 0xe7, 0x5d, 0xc1, 0x81, 0x12, 0x60, 0x77, 0xd1, 0x20, 0xdd, 0xa1, 0x9d, 0x63, 0x12, 0xcf, 0x1e, 0x98, 0x71, 0xc1, 0x15, 0xf0, 0x86, 0x7f, 0xe6, 0x62, 0xd7, 0x8a, 0x40, 0x31, 0x97, 0x6b, 0xdd, 0xef, 0x68, 0xf5, 0x2b, 0x68, 0x99, 0x58, 0x67, 0xcd, 0x80, 0x95, 0x05, 0xdd } -, - /* Encryption */ - 128, - { 0x19, 0xe7, 0x99, 0x66, 0xff, 0x1f, 0xbc, 0x10, 0x07, 0x3d, 0xe7, 0x3d, 0xf3, 0xa5, 0x31, 0x63, 0x78, 0x74, 0xe4, 0x7d, 0xf6, 0x39, 0x25, 0x6c, 0x51, 0xd0, 0xbb, 0xa9, 0x35, 0x61, 0x0b, 0x46, 0x34, 0xf9, 0xe5, 0xb4, 0x68, 0x9b, 0xd9, 0x21, 0x73, 0x5b, 0x32, 0x23, 0x6e, 0xfc, 0xc6, 0xe7, 0xcc, 0x49, 0xa9, 0xe0, 0x6a, 0x25, 0xac, 0x96, 0x59, 0xb7, 0xfe, 0x82, 0x9c, 0xb3, 0xe8, 0xb0, 0x1f, 0x10, 0x31, 0x79, 0x42, 0x23, 0x65, 0x74, 0x1b, 0x76, 0xc8, 0x34, 0x21, 0x49, 0xce, 0xdc, 0x76, 0xeb, 0x0a, 0xd0, 0x18, 0xed, 0x42, 0x35, 0xfb, 0xd5, 0x24, 0xfd, 0x87, 0xc9, 0x54, 0x9a, 0xb3, 0x3f, 0xf2, 0x3e, 0xe4, 0xf8, 0x20, 0x0e, 0xfa, 0x33, 0x02, 0x7e, 0x9d, 0xee, 0xc6, 0x0f, 0xac, 0x01, 0x3d, 0x1e, 0x56, 0xe6, 0xe3, 0x33, 0xd4, 0x93, 0xa4, 0xa9, 0x46, 0x0f, 0xe5, 0x8a } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.4", - /* Message */ - 9, - { 0x5b, 0x19, 0x50, 0x48, 0xeb, 0x90, 0xeb, 0x47, 0x93 } -, - /* Seed */ - 116, - { 0xbb, 0xbd, 0x49, 0x55, 0x0e, 0xd1, 0xea, 0x1b, 0x6b, 0xc7, 0x20, 0x6c, 0xe0, 0xb0, 0x03, 0xa6, 0x32, 0xa5, 0x2b, 0x0b, 0xac, 0x5f, 0x32, 0x71, 0x0b, 0x39, 0xfa, 0x64, 0xb3, 0x55, 0x6a, 0xd6, 0xf6, 0xc8, 0x2b, 0xd9, 0xd5, 0x31, 0xb3, 0x07, 0x46, 0x9e, 0x86, 0x3f, 0x54, 0xb5, 0xfe, 0x21, 0x83, 0x05, 0x69, 0x54, 0xf2, 0xa9, 0x67, 0xe4, 0xdc, 0x2b, 0x32, 0x6e, 0x41, 0xdd, 0xdf, 0x74, 0x3a, 0x76, 0x4f, 0x7e, 0x82, 0x88, 0x68, 0x29, 0xa8, 0xfa, 0xb2, 0x77, 0x2a, 0x34, 0x97, 0x70, 0x6b, 0x95, 0x38, 0xa9, 0xf8, 0x42, 0x96, 0xc8, 0x2d, 0x9b, 0xaf, 0xc2, 0x9c, 0x39, 0xd4, 0x68, 0x4f, 0x75, 0xff, 0x6b, 0xb1, 0xc1, 0x2e, 0x39, 0xbb, 0x80, 0x56, 0xaf, 0x2d, 0x24, 0x34, 0x4b, 0x2c, 0xae, 0x46, 0x29 } -, - /* Encryption */ - 128, - { 0x42, 0xc9, 0xcb, 0x68, 0x21, 0xb5, 0x5d, 0xae, 0x30, 0xd9, 0x00, 0x25, 0x75, 0x31, 0x12, 0xe6, 0xee, 0x02, 0xf4, 0xad, 0x6f, 0x0f, 0x5b, 0x3c, 0xc4, 0x95, 0x2a, 0x12, 0x7c, 0x8a, 0x16, 0xf6, 0x64, 0x79, 0xb8, 0x14, 0x4f, 0x3c, 0xf2, 0x9d, 0x84, 0xe4, 0x3d, 0x67, 0xd6, 0x77, 0x12, 0xc7, 0xf5, 0xb7, 0x6d, 0xa2, 0xc6, 0x6b, 0xa0, 0xe9, 0x0c, 0xd4, 0xb1, 0xfc, 0x1c, 0x1b, 0x3f, 0x17, 0xa3, 0x92, 0xe7, 0x04, 0x08, 0x28, 0x8a, 0xf6, 0x9b, 0x50, 0xfe, 0x8a, 0x50, 0xb3, 0x29, 0x6a, 0x0d, 0xab, 0xd7, 0xc8, 0xdc, 0x39, 0x84, 0xa1, 0x94, 0x06, 0x88, 0xbe, 0x70, 0x98, 0x25, 0x16, 0x20, 0x25, 0x6c, 0xc2, 0x1b, 0x7c, 0x76, 0xed, 0x29, 0xd8, 0x6f, 0xf7, 0xc0, 0x1e, 0xc2, 0x87, 0xdf, 0x47, 0x38, 0xbe, 0x34, 0x69, 0xb3, 0x0a, 0x3f, 0x8f, 0xb7, 0xbe, 0x83, 0xd9, 0x36, 0x1a } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.5", - /* Message */ - 61, - { 0x66, 0x0b, 0xbd, 0x40, 0x06, 0x9c, 0xc6, 0x7b, 0xad, 0xe4, 0x1a, 0x09, 0xec, 0xf4, 0x3c, 0xc4, 0x51, 0x3f, 0x7c, 0x7c, 0xc0, 0x2d, 0xde, 0x97, 0x2d, 0x2b, 0x1f, 0x29, 0x29, 0x5e, 0x09, 0xb9, 0x91, 0x0c, 0x59, 0xed, 0xba, 0x0e, 0xd2, 0xdd, 0xf1, 0x1a, 0x6d, 0x41, 0x69, 0x35, 0x1f, 0x97, 0x24, 0x07, 0x33, 0x52, 0x8f, 0x91, 0xb2, 0x68, 0xfa, 0xa7, 0xaf, 0x90, 0x6e } -, - /* Seed */ - 64, - { 0x30, 0x7f, 0x61, 0xb1, 0x83, 0xa8, 0xdc, 0xf9, 0x15, 0x5a, 0xb2, 0x35, 0xe6, 0x1f, 0xb5, 0x6b, 0xa2, 0xb8, 0x79, 0x5d, 0xc4, 0x23, 0x53, 0x85, 0xe8, 0xac, 0xf3, 0x66, 0xd2, 0x52, 0x33, 0xb4, 0x70, 0xe0, 0x5d, 0x70, 0x11, 0xb6, 0xfc, 0x53, 0x2f, 0x0a, 0x65, 0x8a, 0xd1, 0x3a, 0xfd, 0x29, 0x0c, 0x6f, 0x30, 0xe2, 0x79, 0x5e, 0xe3, 0xd3, 0x9d, 0xbd, 0xc8, 0x0f, 0x56, 0x0e, 0xce, 0x2f } -, - /* Encryption */ - 128, - { 0x04, 0x9b, 0x26, 0x05, 0x0a, 0x3a, 0xbe, 0xf8, 0x3e, 0xc2, 0x77, 0x61, 0x11, 0xe3, 0xb7, 0x2f, 0xb9, 0xa2, 0xd6, 0xa8, 0x01, 0x05, 0x5d, 0x6b, 0x5e, 0x0d, 0xa4, 0xe9, 0x5c, 0xcf, 0x2e, 0xbd, 0x0a, 0x78, 0x6a, 0x97, 0x21, 0xaa, 0x79, 0x25, 0xbf, 0x15, 0xbe, 0xb6, 0x27, 0x13, 0xa3, 0x13, 0x87, 0x7d, 0xd8, 0x5d, 0x26, 0x58, 0xb2, 0x08, 0xe8, 0x8e, 0x64, 0x45, 0xfc, 0x35, 0x01, 0x9b, 0x0c, 0xad, 0x6b, 0xf4, 0xd0, 0x6e, 0x2c, 0xa5, 0xf1, 0x19, 0x49, 0xee, 0xee, 0x7e, 0xe4, 0x7f, 0x1d, 0x5b, 0x4c, 0x88, 0x24, 0x1f, 0x50, 0xe4, 0xd6, 0xed, 0xf0, 0x18, 0x3d, 0x4f, 0xa3, 0x5a, 0x37, 0x1f, 0xc4, 0x07, 0x36, 0x4f, 0x2d, 0xca, 0xa4, 0xcd, 0xae, 0xce, 0xfc, 0xea, 0x6d, 0xfa, 0xc1, 0xd5, 0x13, 0xf9, 0x05, 0xe7, 0x47, 0x94, 0x47, 0x44, 0xbb, 0x64, 0x57, 0x6b, 0xa1, 0xc8 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.6", - /* Message */ - 11, - { 0x81, 0xcb, 0x0a, 0x97, 0x69, 0x8f, 0x82, 0x3b, 0x56, 0xb4, 0x5f } -, - /* Seed */ - 114, - { 0x93, 0x8c, 0x8d, 0xfd, 0xa0, 0x8b, 0x89, 0x05, 0x5b, 0x68, 0xaf, 0x01, 0x1f, 0x24, 0x6c, 0xec, 0x1f, 0x93, 0xa2, 0x77, 0x1d, 0xa9, 0x7d, 0xba, 0x20, 0x95, 0x4c, 0x90, 0x09, 0x12, 0x28, 0x5e, 0x5d, 0xb1, 0x87, 0xb2, 0x9e, 0x32, 0x72, 0xe9, 0x9e, 0x69, 0x4e, 0x12, 0x14, 0x17, 0x25, 0x28, 0x45, 0x30, 0x84, 0x06, 0x4e, 0x5c, 0x60, 0xf0, 0x1e, 0x78, 0x6f, 0xc5, 0xd0, 0xd9, 0xaf, 0x06, 0x39, 0xa4, 0x98, 0xc5, 0x7a, 0xde, 0x93, 0x77, 0x60, 0xae, 0x51, 0x74, 0x84, 0xaf, 0xd7, 0x02, 0x5e, 0xa0, 0xd5, 0x5a, 0x62, 0xb1, 0x1f, 0x9a, 0xab, 0x7f, 0xa5, 0xdd, 0xd0, 0x93, 0xe5, 0xea, 0xba, 0xd6, 0x1b, 0x67, 0xa2, 0x95, 0xa7, 0x75, 0xbe, 0x96, 0xc6, 0xb7, 0x6e, 0xc3, 0xfe, 0x47, 0x29, 0x50 } -, - /* Encryption */ - 128, - { 0x7f, 0xb8, 0xf3, 0x35, 0xee, 0xdc, 0x4a, 0xf6, 0xaf, 0x44, 0x07, 0x3d, 0xa1, 0x96, 0x45, 0x7d, 0x04, 0x61, 0x45, 0x03, 0x01, 0x47, 0xf8, 0x42, 0x0f, 0xc7, 0x9b, 0xd5, 0x89, 0x77, 0x4a, 0x73, 0x0a, 0x6d, 0x94, 0xfb, 0x7e, 0xfa, 0xdc, 0x5a, 0xee, 0xa7, 0xc0, 0x70, 0xf1, 0x89, 0x24, 0x91, 0x25, 0xe1, 0x66, 0xc6, 0xd3, 0x01, 0x29, 0xec, 0xf2, 0xc4, 0x82, 0x2a, 0x50, 0x49, 0x6b, 0xc2, 0xf2, 0x1e, 0x79, 0xac, 0x57, 0xdb, 0xfb, 0xdd, 0x71, 0xa6, 0x8b, 0x58, 0xd9, 0x05, 0x1b, 0x48, 0x0b, 0xf4, 0x77, 0x48, 0xa1, 0x3d, 0xfb, 0x67, 0x3e, 0xae, 0xd7, 0x71, 0x0a, 0x46, 0x8f, 0xe7, 0x2f, 0x7d, 0x74, 0xe6, 0xf4, 0xa2, 0x89, 0x44, 0x04, 0x3a, 0x52, 0xd9, 0x30, 0xde, 0x68, 0xdb, 0xcb, 0x6e, 0xe7, 0xfb, 0x8b, 0x69, 0x64, 0x05, 0x41, 0xe3, 0xed, 0x5b, 0x75, 0x4e, 0x65, 0xfe } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.7", - /* Message */ - 45, - { 0x05, 0xf7, 0x83, 0x56, 0x23, 0xc8, 0xcf, 0xaa, 0xe4, 0x82, 0xa9, 0x10, 0x85, 0xb9, 0x7f, 0x6b, 0x95, 0x92, 0x8b, 0xb9, 0x74, 0xac, 0xad, 0x02, 0x36, 0x4a, 0xaf, 0x13, 0x17, 0xed, 0x53, 0xc9, 0xdb, 0x2f, 0xfb, 0xc8, 0xa3, 0xcb, 0x3a, 0x00, 0xf4, 0x4d, 0xac, 0xef, 0x78 } -, - /* Seed */ - 80, - { 0x80, 0xc8, 0x3d, 0x25, 0x47, 0xbe, 0x41, 0xba, 0xf2, 0x32, 0x1b, 0xd3, 0x0a, 0x9a, 0xb7, 0x74, 0x9c, 0x5e, 0xeb, 0xb5, 0xa1, 0xff, 0xf0, 0xb3, 0x1d, 0x6b, 0xdb, 0x0a, 0xd1, 0x6d, 0xd0, 0xc0, 0xfb, 0x3e, 0xc1, 0x57, 0xe7, 0x8b, 0x09, 0x86, 0x60, 0x20, 0x41, 0xcd, 0xe8, 0x89, 0x57, 0xa5, 0x53, 0x29, 0xe3, 0xe2, 0xcf, 0xe8, 0x5a, 0x59, 0x44, 0x74, 0x94, 0x5e, 0xfa, 0x33, 0x35, 0x85, 0xff, 0xfd, 0x41, 0xeb, 0xb8, 0xe7, 0xc5, 0x18, 0xc3, 0xc9, 0x25, 0x9a, 0xea, 0x8d, 0xe6, 0x35 } -, - /* Encryption */ - 128, - { 0x87, 0xf9, 0xce, 0x05, 0xf0, 0xac, 0x9c, 0x05, 0xe4, 0x5f, 0xb7, 0xbb, 0x55, 0x5a, 0x7a, 0x18, 0xa9, 0xcd, 0xc5, 0x5f, 0x54, 0x4a, 0x54, 0x21, 0x01, 0xe9, 0xa7, 0x1c, 0xd2, 0x03, 0x66, 0x82, 0x0e, 0x7f, 0xf6, 0xdc, 0xa3, 0x46, 0x75, 0x22, 0x9d, 0x86, 0xe4, 0xfb, 0x58, 0x71, 0xf9, 0x31, 0x0b, 0x12, 0xbb, 0x74, 0xe2, 0x86, 0x18, 0xd6, 0xd6, 0x58, 0x65, 0x87, 0xf6, 0x6a, 0xcc, 0x89, 0x68, 0xa8, 0x3c, 0xd8, 0x07, 0xf4, 0xd2, 0x12, 0x97, 0x73, 0x1d, 0x7c, 0x22, 0xc1, 0x45, 0x99, 0xe7, 0x57, 0x19, 0xfd, 0x23, 0x05, 0x2b, 0x8a, 0xa6, 0x5b, 0x7e, 0x9c, 0x5c, 0x02, 0x00, 0x38, 0x2d, 0x35, 0xd5, 0x60, 0xf2, 0xd3, 0x3d, 0xd0, 0x49, 0xe0, 0x6a, 0xc8, 0x27, 0xcb, 0xdd, 0x9a, 0xf5, 0x81, 0xa6, 0xb2, 0x6d, 0xb6, 0x1d, 0x43, 0xd7, 0x12, 0x4b, 0x34, 0x72, 0x1d, 0xf1, 0x42 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.8", - /* Message */ - 59, - { 0xe2, 0xe0, 0xf6, 0xb3, 0x28, 0xd9, 0xbb, 0xe9, 0xfd, 0x66, 0xcd, 0x87, 0x98, 0x7c, 0x11, 0x60, 0xed, 0x23, 0x7b, 0x1c, 0x7c, 0x65, 0x6a, 0x89, 0xfb, 0x1f, 0x21, 0xd7, 0x09, 0x40, 0x3b, 0x04, 0x10, 0xf8, 0xe4, 0xe1, 0x2e, 0xb9, 0x69, 0x0a, 0xeb, 0xeb, 0x38, 0x07, 0x31, 0x9a, 0x93, 0x65, 0x64, 0xf6, 0x67, 0x17, 0xa7, 0x1c, 0x48, 0x62, 0xcc, 0xc5, 0x6e } -, - /* Seed */ - 66, - { 0xcf, 0x18, 0xe6, 0x08, 0xb1, 0x56, 0x14, 0x5c, 0x44, 0xde, 0x31, 0x49, 0x66, 0xcb, 0xcc, 0x66, 0x74, 0xa4, 0x5a, 0xe0, 0xdf, 0x90, 0x04, 0x06, 0xe4, 0x0d, 0x3d, 0xfc, 0x32, 0x2f, 0x39, 0x40, 0x4c, 0xee, 0xb6, 0xdc, 0x58, 0xf8, 0x01, 0xbb, 0xf2, 0xac, 0x4f, 0x47, 0x84, 0x1a, 0xbd, 0x79, 0x61, 0x79, 0xd0, 0x82, 0x4f, 0x3b, 0xf5, 0x51, 0x8d, 0x78, 0xcc, 0x66, 0xad, 0x8d, 0xfb, 0xed, 0xb1, 0x17 } -, - /* Encryption */ - 128, - { 0x14, 0x01, 0xaa, 0x21, 0xec, 0x6e, 0xba, 0xa7, 0xe3, 0xa9, 0xf7, 0x13, 0xc8, 0x6b, 0x50, 0x8e, 0x37, 0x5f, 0x6c, 0x12, 0x5b, 0x29, 0x62, 0x6e, 0xbd, 0x34, 0x9f, 0x64, 0xe2, 0x0f, 0xa4, 0x8a, 0x1b, 0x06, 0x84, 0x79, 0xff, 0xf3, 0x30, 0x22, 0xf6, 0x6f, 0x86, 0xe9, 0x7d, 0x9c, 0x5e, 0xdd, 0x90, 0x26, 0xe3, 0x18, 0x3c, 0xe0, 0x86, 0x41, 0x57, 0x06, 0x59, 0x35, 0x2f, 0x87, 0xa6, 0x18, 0x91, 0xf3, 0xd8, 0x6a, 0x3d, 0x24, 0x5f, 0x02, 0x45, 0xe3, 0x9d, 0x99, 0x89, 0x2c, 0x67, 0xfa, 0x2b, 0xed, 0x8e, 0x37, 0x54, 0x8d, 0xe2, 0x3d, 0xef, 0xdd, 0x1e, 0x43, 0xd5, 0xd7, 0xe3, 0xd9, 0xa3, 0xc2, 0x2c, 0xe6, 0xa3, 0x68, 0xd8, 0x4c, 0x5a, 0xfa, 0x1c, 0xc5, 0xbf, 0x49, 0xb6, 0x8f, 0xe5, 0xc2, 0x5a, 0x32, 0x6b, 0x0e, 0xec, 0x5e, 0x44, 0xc5, 0xe2, 0xff, 0x5a, 0x35, 0x9d, 0xd1 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.9", - /* Message */ - 17, - { 0xc6, 0x95, 0x78, 0xea, 0x03, 0xe2, 0x69, 0xb1, 0xb9, 0x16, 0x33, 0xa7, 0x2f, 0x9f, 0xb4, 0xd1, 0x0c } -, - /* Seed */ - 108, - { 0xe0, 0xa1, 0xa9, 0xba, 0xe3, 0x0a, 0x7a, 0xc6, 0x6c, 0xab, 0x3d, 0x86, 0x43, 0x3c, 0x1c, 0xa5, 0xe8, 0xac, 0x2b, 0x74, 0xe4, 0x83, 0xca, 0x7f, 0x34, 0x59, 0x77, 0x16, 0xee, 0x16, 0x18, 0x90, 0x6c, 0x97, 0x77, 0x2f, 0x28, 0x86, 0xf4, 0x6d, 0x78, 0x31, 0x21, 0xb7, 0xfe, 0x1b, 0x8f, 0xa5, 0xfb, 0xec, 0x09, 0xc0, 0x68, 0xe5, 0x63, 0x5c, 0x89, 0xe6, 0xa0, 0xa9, 0xac, 0xcf, 0x2b, 0x12, 0xc6, 0x47, 0x06, 0xb6, 0xae, 0x9a, 0x5a, 0x74, 0xab, 0xb8, 0x3f, 0x64, 0xe1, 0x3a, 0x8c, 0x53, 0xf9, 0x26, 0x76, 0x04, 0x66, 0xb6, 0x45, 0xe2, 0x8e, 0x9a, 0xd6, 0x46, 0x1a, 0xe7, 0xb8, 0x9d, 0x5e, 0xfc, 0xcf, 0x7d, 0x89, 0x14, 0x9a, 0xa2, 0xe6, 0x9f, 0x0d, 0x25 } -, - /* Encryption */ - 128, - { 0x78, 0xf8, 0x7d, 0x6b, 0x06, 0x76, 0x1b, 0xd7, 0xe7, 0x17, 0xe0, 0xc5, 0xeb, 0x40, 0xe1, 0xfb, 0x80, 0x89, 0x9c, 0x7b, 0xe4, 0x01, 0x7c, 0x2e, 0xfb, 0x07, 0x59, 0x78, 0xee, 0x38, 0xd0, 0xf9, 0x5e, 0x98, 0x03, 0xdc, 0xd4, 0x0f, 0xee, 0x97, 0x92, 0xc6, 0x1d, 0x4a, 0x2d, 0x85, 0xda, 0xbd, 0xea, 0x96, 0xca, 0x29, 0xf3, 0xca, 0x1e, 0x8b, 0xcf, 0x81, 0x76, 0x55, 0xd0, 0xc0, 0x94, 0x74, 0xd9, 0x80, 0x94, 0xeb, 0x6a, 0x7e, 0xf0, 0x33, 0x3d, 0x69, 0x71, 0xc9, 0x38, 0x36, 0xfe, 0x02, 0x32, 0xf7, 0x18, 0x46, 0x3d, 0xc9, 0x54, 0x18, 0x53, 0x46, 0x3b, 0xc1, 0xcf, 0x03, 0x67, 0x7e, 0x78, 0x6e, 0xe5, 0x2e, 0x72, 0x71, 0xc3, 0xc1, 0x1a, 0xc0, 0x05, 0x53, 0xc6, 0x75, 0x27, 0x07, 0xe0, 0xdf, 0x92, 0x80, 0xc4, 0xf2, 0xb7, 0xd1, 0x9f, 0xd6, 0xf3, 0xd8, 0xbb, 0xcc, 0x7b, 0xe6 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.10", - /* Message */ - 20, - { 0x76, 0x72, 0xcf, 0xc2, 0x7a, 0x41, 0xd5, 0x01, 0xaa, 0x4c, 0x41, 0xba, 0xab, 0xf4, 0x52, 0x5a, 0x7c, 0x45, 0x5f, 0xc8 } -, - /* Seed */ - 105, - { 0x4c, 0xee, 0xa1, 0xa8, 0x94, 0x64, 0xa5, 0xd2, 0xf8, 0x9e, 0x07, 0x89, 0x53, 0xca, 0xf7, 0x76, 0x36, 0x58, 0x98, 0xa5, 0xbd, 0x5e, 0x8e, 0x44, 0x8c, 0x65, 0xda, 0x26, 0xff, 0x98, 0x90, 0x0c, 0xd0, 0x80, 0x61, 0xef, 0x44, 0x6c, 0x69, 0xb4, 0x8d, 0xc4, 0x60, 0x9e, 0xd8, 0x65, 0x4a, 0x64, 0x6d, 0x70, 0x82, 0x62, 0xcb, 0x84, 0x09, 0xac, 0x27, 0xc4, 0xa4, 0x9a, 0xdf, 0xed, 0x47, 0xa8, 0x5a, 0xd4, 0x29, 0xed, 0x75, 0x07, 0x75, 0x78, 0xe4, 0xc2, 0x73, 0xc6, 0x1e, 0x2c, 0x3b, 0x46, 0xbe, 0xb4, 0x72, 0xf0, 0xa3, 0x45, 0xa0, 0x5d, 0x61, 0xa7, 0xea, 0xaa, 0xd8, 0xa6, 0x3e, 0x0b, 0x3d, 0x49, 0x52, 0xf2, 0x7c, 0x40, 0x81, 0x32, 0x9e } -, - /* Encryption */ - 128, - { 0x25, 0x2b, 0x14, 0x13, 0x3f, 0x1d, 0xb2, 0x50, 0x13, 0x29, 0x35, 0x01, 0xe3, 0x56, 0x53, 0x4f, 0x26, 0xaf, 0xe3, 0x34, 0x68, 0x8e, 0x68, 0xd7, 0x91, 0x83, 0x3a, 0x0d, 0x82, 0x56, 0x05, 0x70, 0xbb, 0xb3, 0xce, 0x2b, 0x16, 0xd8, 0xb5, 0xf7, 0xf8, 0x9e, 0x7e, 0xbc, 0x7c, 0xf9, 0xc2, 0x94, 0xab, 0x34, 0x16, 0xb7, 0xc2, 0x11, 0x87, 0x70, 0x7f, 0xe5, 0xe7, 0x99, 0x2e, 0x72, 0x0f, 0xf9, 0x58, 0xda, 0xa4, 0x0f, 0x5a, 0xd4, 0x5b, 0xc7, 0x47, 0x47, 0x96, 0x39, 0xa5, 0x37, 0xfe, 0x0a, 0x4a, 0x75, 0xfc, 0xfb, 0x45, 0xa5, 0x3f, 0x01, 0x73, 0xaf, 0xc0, 0xf3, 0xcc, 0x91, 0x0b, 0x86, 0xae, 0x31, 0x37, 0x62, 0x8d, 0x90, 0xff, 0x67, 0x5a, 0xe1, 0xae, 0x31, 0xe1, 0x64, 0x05, 0x37, 0xea, 0x1a, 0x7c, 0xcc, 0xfb, 0x73, 0xf8, 0xbe, 0x5a, 0xec, 0xa0, 0x3b, 0xab, 0x19, 0x3b, 0xb0 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.11", - /* Message */ - 32, - { 0xa1, 0x6a, 0xd8, 0xf2, 0xe0, 0x93, 0x23, 0x42, 0xed, 0x21, 0xe1, 0x37, 0x77, 0xf4, 0x65, 0x2a, 0x35, 0x50, 0xdd, 0xb4, 0x36, 0x8b, 0x5e, 0xa7, 0x1c, 0x66, 0xdb, 0xc3, 0xbb, 0xfe, 0xb7, 0xdb } -, - /* Seed */ - 93, - { 0x55, 0x88, 0x4c, 0x83, 0x0d, 0x4a, 0x80, 0xb7, 0x9f, 0x08, 0x9d, 0xa7, 0x4d, 0xc2, 0x5a, 0xe0, 0xc4, 0x82, 0x46, 0x21, 0x45, 0xe1, 0xd0, 0x95, 0x23, 0xda, 0x3c, 0x93, 0x44, 0xbb, 0x97, 0xb0, 0x52, 0xfb, 0xdc, 0x15, 0x43, 0xdf, 0xb5, 0x3c, 0xf2, 0x37, 0x82, 0x59, 0x68, 0x7c, 0x7b, 0x1b, 0x35, 0xca, 0xf2, 0xf9, 0x19, 0x99, 0xed, 0x4a, 0xce, 0x39, 0xaf, 0x10, 0xd6, 0xbe, 0xd0, 0xfa, 0x22, 0x44, 0x4c, 0x12, 0x9d, 0x90, 0x74, 0x1c, 0xfc, 0xda, 0x90, 0x19, 0x8e, 0x27, 0x82, 0xfb, 0x03, 0xbd, 0xcc, 0x7c, 0xfa, 0xfd, 0x89, 0xdb, 0x6f, 0xb0, 0xfe, 0xd2, 0x24 } -, - /* Encryption */ - 128, - { 0x08, 0x32, 0x6a, 0xff, 0x6d, 0x03, 0xcc, 0x4e, 0x26, 0x10, 0xdd, 0x53, 0x6a, 0xf7, 0xf2, 0x1d, 0x76, 0x22, 0x7d, 0x82, 0x7d, 0x52, 0x80, 0xd8, 0xb8, 0x3a, 0xb9, 0xeb, 0x30, 0xe0, 0x76, 0x9c, 0xfa, 0x02, 0xb5, 0xc1, 0x35, 0x2b, 0xf4, 0xd1, 0x70, 0xce, 0xb6, 0x6f, 0x8b, 0xe6, 0x98, 0x78, 0x4e, 0x1a, 0x6c, 0x20, 0x3f, 0xa5, 0xab, 0x90, 0x07, 0xa6, 0xf7, 0xfc, 0x20, 0x65, 0x20, 0x4b, 0x98, 0x2f, 0xa5, 0x61, 0xfb, 0xb3, 0x61, 0xaf, 0x2b, 0x8e, 0xea, 0x42, 0xab, 0x3f, 0xec, 0x0e, 0xd0, 0x86, 0x22, 0xe5, 0xf2, 0x89, 0x80, 0x52, 0x75, 0x38, 0x0b, 0x69, 0x34, 0x2a, 0x96, 0xf7, 0x6a, 0x99, 0x04, 0x87, 0x68, 0x90, 0xd9, 0x2f, 0x24, 0x00, 0x20, 0x32, 0x35, 0x1d, 0x8a, 0x1c, 0xbc, 0x3d, 0x27, 0xb2, 0x46, 0x48, 0x21, 0xbb, 0xfb, 0xfb, 0xb9, 0xa6, 0x78, 0x51, 0x96, 0x10 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.12", - /* Message */ - 1, - { 0x4a } -, - /* Seed */ - 124, - { 0x8a, 0xa0, 0xce, 0xd1, 0x7f, 0x09, 0xad, 0xae, 0x61, 0x0a, 0x46, 0x03, 0x0d, 0xad, 0x40, 0x31, 0x1b, 0xf1, 0x46, 0x9c, 0x27, 0x37, 0x41, 0x1e, 0x40, 0xf9, 0x23, 0x96, 0x75, 0x1d, 0xd5, 0x66, 0x37, 0xc9, 0x58, 0xdb, 0xc5, 0x8a, 0x17, 0xfd, 0xbd, 0xdd, 0xdb, 0xbf, 0x79, 0x75, 0x18, 0x78, 0x98, 0xbe, 0x1a, 0xa6, 0x3c, 0x5e, 0xee, 0x5f, 0x9a, 0x19, 0x02, 0x98, 0x0f, 0x59, 0x51, 0x84, 0xb9, 0xb5, 0xb4, 0x65, 0xb9, 0x2e, 0x20, 0xf7, 0xae, 0x8b, 0x5a, 0x5c, 0xee, 0x7f, 0x3b, 0x57, 0xd9, 0x97, 0xa0, 0x6a, 0x70, 0x2d, 0x23, 0x83, 0x50, 0xa9, 0x26, 0x98, 0xef, 0x27, 0x5d, 0xff, 0x52, 0x77, 0xbd, 0x2c, 0x99, 0x96, 0x47, 0x40, 0x5a, 0xdb, 0xe4, 0xfb, 0x3f, 0x1b, 0xe7, 0x5e, 0x15, 0x9a, 0x4c, 0x43, 0x83, 0x13, 0xb7, 0xfd, 0x8a, 0xca, 0x9d, 0xea } -, - /* Encryption */ - 128, - { 0x4c, 0x4e, 0x5a, 0xb6, 0x2d, 0x0c, 0x96, 0x7a, 0xb8, 0x29, 0x21, 0x42, 0x9f, 0xfe, 0x50, 0xd2, 0x24, 0x0e, 0x7e, 0x0a, 0x18, 0x75, 0x48, 0x87, 0x55, 0xbb, 0x7f, 0xf6, 0x15, 0xa8, 0xc9, 0x9a, 0xbc, 0x37, 0xb2, 0xe4, 0x71, 0x47, 0xa9, 0x27, 0xd7, 0xb9, 0x8c, 0x30, 0xdb, 0x24, 0xda, 0x8c, 0xd3, 0x5e, 0x13, 0xd7, 0xb7, 0x14, 0x14, 0xd0, 0x32, 0xbd, 0x0c, 0x3c, 0xe3, 0x8b, 0x89, 0xb1, 0x1b, 0x2c, 0x3f, 0x9d, 0x83, 0x08, 0x16, 0x71, 0x6a, 0x2e, 0x8c, 0xcd, 0x8c, 0x79, 0xe9, 0xc7, 0x49, 0x31, 0xa7, 0xb8, 0xa8, 0xdb, 0x13, 0x12, 0x8c, 0xe4, 0x0b, 0x21, 0x59, 0xe4, 0x98, 0xda, 0x98, 0xf2, 0xaa, 0x35, 0x2f, 0x23, 0x85, 0x31, 0x06, 0xb6, 0x61, 0xd8, 0x8e, 0xd0, 0x6f, 0xf6, 0x6a, 0x56, 0xe7, 0x56, 0x59, 0x72, 0x20, 0xbd, 0x10, 0x15, 0x81, 0x53, 0xce, 0x5c, 0x02, 0x63 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.13", - /* Message */ - 11, - { 0xbf, 0xfc, 0x42, 0x08, 0x73, 0xf5, 0xaf, 0x5d, 0xd2, 0x3b, 0xb0 } -, - /* Seed */ - 114, - { 0xdd, 0x31, 0xcc, 0xd4, 0x7d, 0x4e, 0x31, 0x02, 0xdf, 0x0f, 0xc5, 0x9b, 0x1b, 0x84, 0x77, 0xaf, 0x3a, 0x78, 0xc2, 0xfa, 0x9c, 0x8e, 0xcb, 0x4f, 0x0b, 0x3b, 0xde, 0x23, 0x50, 0x04, 0x36, 0x55, 0x03, 0x64, 0x66, 0x5f, 0x81, 0xc0, 0x35, 0x6a, 0xbc, 0x0b, 0x78, 0xe9, 0x73, 0x19, 0x11, 0x14, 0x02, 0x75, 0xc8, 0x66, 0xf7, 0x5a, 0xd0, 0xcb, 0xbc, 0x88, 0xad, 0x6b, 0x5d, 0x4d, 0xa5, 0x2d, 0x08, 0xe2, 0x2e, 0xe5, 0x39, 0xb5, 0x8e, 0x92, 0xc6, 0x19, 0x63, 0x87, 0xe2, 0x21, 0xa0, 0x87, 0x39, 0x6c, 0xbe, 0x57, 0xec, 0x56, 0x03, 0xf6, 0x16, 0x26, 0x27, 0x98, 0x3e, 0xff, 0x82, 0xde, 0x04, 0x8b, 0xdc, 0x1b, 0x5e, 0xdb, 0xb5, 0xd4, 0xea, 0x84, 0xf5, 0x02, 0x24, 0xbd, 0x88, 0xa9, 0x05, 0xda } -, - /* Encryption */ - 128, - { 0x0d, 0xa2, 0xd6, 0xf7, 0xbc, 0xb5, 0x0a, 0x47, 0x2e, 0xda, 0x24, 0x60, 0x9d, 0xa6, 0x77, 0x28, 0xe5, 0x3c, 0x98, 0x80, 0xaa, 0x5f, 0xb6, 0xfb, 0xe6, 0x0d, 0x83, 0xc1, 0x1e, 0x6b, 0xb3, 0xcf, 0xdb, 0x17, 0xd1, 0x4d, 0xbc, 0xe8, 0xec, 0x55, 0xc7, 0x3a, 0xb0, 0x14, 0x3e, 0x9b, 0x27, 0x56, 0xbb, 0x69, 0x68, 0xe5, 0xaf, 0x1a, 0xed, 0xcf, 0x6a, 0x80, 0xc2, 0x6d, 0x49, 0x0e, 0x47, 0x18, 0x7e, 0xa5, 0xd8, 0xcd, 0x2f, 0xac, 0xb8, 0x1c, 0xe6, 0x4a, 0x72, 0x3c, 0x40, 0xf0, 0xba, 0x4c, 0x69, 0x3e, 0x1b, 0x11, 0x43, 0xdf, 0x15, 0xa4, 0x20, 0x91, 0x70, 0x9a, 0xb4, 0xc7, 0xcd, 0x9d, 0x47, 0x07, 0x9e, 0xcd, 0x68, 0xf6, 0xa1, 0x96, 0x44, 0x8a, 0x44, 0x67, 0x9a, 0x04, 0x14, 0x10, 0x41, 0x8f, 0x11, 0xa1, 0xe1, 0xbc, 0xe7, 0x8e, 0x77, 0x26, 0x04, 0xa2, 0xf2, 0x77, 0x81, 0x95 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.14", - /* Message */ - 40, - { 0x1a, 0x9b, 0x87, 0x29, 0x21, 0x0a, 0x84, 0x71, 0xfc, 0x5c, 0xd7, 0x09, 0xf2, 0xed, 0xd3, 0x24, 0x01, 0x50, 0x24, 0x4b, 0xec, 0x96, 0xa9, 0x2f, 0xf8, 0x07, 0xe3, 0xb3, 0x0d, 0x29, 0x5d, 0x3c, 0x34, 0x5c, 0x04, 0x4f, 0x2e, 0x95, 0x60, 0x37 } -, - /* Seed */ - 85, - { 0x58, 0x78, 0xc9, 0x1b, 0x16, 0x6e, 0x90, 0xc3, 0x4e, 0x6e, 0x66, 0x56, 0x8c, 0x15, 0x1f, 0x4d, 0x44, 0x43, 0x40, 0xb5, 0xf1, 0xd7, 0x30, 0x52, 0xcc, 0x56, 0x33, 0xea, 0x2e, 0x47, 0xac, 0xed, 0x7b, 0x17, 0x8a, 0x64, 0xfb, 0x09, 0xa5, 0xad, 0x08, 0x46, 0xae, 0xe4, 0x11, 0x6d, 0x67, 0x80, 0xee, 0x75, 0xeb, 0x20, 0x85, 0x16, 0x68, 0x82, 0x0c, 0xde, 0xc0, 0xf2, 0xc4, 0x96, 0xe4, 0xc2, 0x88, 0xd8, 0x27, 0x9c, 0x1c, 0x5d, 0x4e, 0xc0, 0x0d, 0x98, 0x0c, 0x27, 0x2e, 0x87, 0x05, 0x18, 0x48, 0x6d, 0xca, 0xea, 0x85 } -, - /* Encryption */ - 128, - { 0x37, 0x00, 0xac, 0x36, 0x2c, 0xf6, 0x0e, 0x16, 0x39, 0x47, 0xa1, 0x98, 0xd0, 0x0f, 0x3b, 0x3b, 0x26, 0xe0, 0x3e, 0xe2, 0xfb, 0x78, 0x2b, 0x42, 0x88, 0xb8, 0xc1, 0xde, 0x76, 0xe9, 0xe8, 0x99, 0x46, 0xc9, 0x80, 0x7c, 0x56, 0xe0, 0x9c, 0x7b, 0x52, 0xbe, 0x00, 0x78, 0xac, 0xf6, 0x92, 0x96, 0x4a, 0xcb, 0x97, 0xd1, 0xfa, 0x5c, 0xeb, 0x57, 0x76, 0xa1, 0xd5, 0x56, 0xb4, 0xbc, 0x9d, 0xb0, 0x0b, 0xda, 0x25, 0x23, 0x7a, 0x75, 0x1b, 0x7c, 0x22, 0x9b, 0x6b, 0x57, 0xf7, 0xff, 0x75, 0x1c, 0x12, 0xd1, 0xf2, 0x2a, 0x4f, 0xb0, 0xe9, 0x0b, 0x63, 0xd0, 0x42, 0xd9, 0x49, 0x9e, 0x0f, 0x7e, 0xfe, 0xad, 0xd3, 0xc5, 0x88, 0xf2, 0xc7, 0x43, 0xa1, 0x2c, 0x56, 0x7c, 0x81, 0x57, 0x8d, 0xbe, 0xeb, 0xfd, 0x37, 0x74, 0xda, 0x34, 0xad, 0x09, 0xee, 0xbe, 0x90, 0x17, 0x89, 0x02, 0x14, 0xb5 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.15", - /* Message */ - 64, - { 0xa6, 0xd0, 0xe8, 0xc1, 0xea, 0x4a, 0xb4, 0xec, 0xc8, 0x95, 0x7d, 0x62, 0x28, 0x15, 0x79, 0x67, 0x5a, 0x64, 0x8d, 0x62, 0xb7, 0xf2, 0x2b, 0x2b, 0x08, 0xd1, 0x31, 0x3f, 0x40, 0x6f, 0x13, 0x7e, 0x99, 0x42, 0x67, 0x35, 0xcd, 0xb9, 0x37, 0x2f, 0xec, 0xa1, 0xee, 0x78, 0x46, 0x3f, 0xa5, 0xde, 0x9c, 0xdd, 0x84, 0x75, 0x6c, 0x68, 0xbd, 0x1d, 0x92, 0xba, 0x96, 0x5f, 0x50, 0x64, 0x10, 0xb1 } -, - /* Seed */ - 61, - { 0x1c, 0x25, 0xc9, 0xb8, 0x32, 0x16, 0x9a, 0x1f, 0xdb, 0x6c, 0x14, 0x8e, 0x47, 0xe6, 0x6c, 0x3c, 0xc8, 0x21, 0x41, 0xe6, 0x11, 0xa6, 0xf3, 0x0c, 0xc9, 0x0c, 0x50, 0x49, 0xe8, 0xc5, 0x02, 0xb3, 0x1c, 0xad, 0xc7, 0x62, 0x39, 0xb7, 0xbd, 0xaf, 0x93, 0xfa, 0x97, 0x34, 0x3e, 0x7e, 0xe5, 0x51, 0xbc, 0x52, 0xfd, 0xb5, 0xec, 0x9e, 0x40, 0x0a, 0xf0, 0x5d, 0xbe, 0xac, 0xda } -, - /* Encryption */ - 128, - { 0x00, 0xe8, 0xb2, 0xfc, 0x76, 0xdf, 0xb4, 0xa6, 0xcc, 0x43, 0x64, 0xde, 0x8f, 0x68, 0x3c, 0x3f, 0xcd, 0x0a, 0x9e, 0xcf, 0xbd, 0x4a, 0x5a, 0x72, 0x24, 0xf4, 0x9a, 0xe9, 0xb4, 0xf3, 0xb5, 0xcd, 0xc7, 0x1c, 0xbb, 0x8c, 0x66, 0xfd, 0x35, 0xf3, 0xd1, 0x8e, 0xca, 0x98, 0x96, 0x7b, 0xd4, 0x00, 0x5d, 0xf7, 0x91, 0x52, 0x41, 0x6f, 0xd4, 0x7e, 0x56, 0x2c, 0x55, 0xed, 0xc6, 0xd6, 0x12, 0x12, 0x28, 0x6e, 0xf9, 0x75, 0xbc, 0xc8, 0x02, 0x69, 0x25, 0x92, 0x65, 0x39, 0x00, 0x97, 0x3c, 0x72, 0xe0, 0x1a, 0x69, 0x3b, 0x05, 0xfc, 0x2d, 0x58, 0x56, 0xea, 0xef, 0x7a, 0xc0, 0x8f, 0xf5, 0xec, 0xd5, 0x31, 0xe2, 0xc2, 0xce, 0x92, 0x77, 0x45, 0xa1, 0x16, 0x5a, 0x51, 0xaa, 0x66, 0x98, 0xa1, 0xff, 0xcb, 0x87, 0xf8, 0x1e, 0xf6, 0x51, 0x0b, 0xca, 0xf9, 0xcb, 0x76, 0x1e, 0x9e, 0x1f, 0x0f } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.16", - /* Message */ - 63, - { 0xf3, 0x40, 0x5b, 0x21, 0x8f, 0x3e, 0xc6, 0x03, 0xa9, 0x80, 0x69, 0x00, 0x99, 0xc2, 0xcf, 0x5c, 0xbe, 0x0b, 0x2b, 0x05, 0x96, 0x79, 0xc4, 0x6b, 0x7e, 0x48, 0xf6, 0xfd, 0xc4, 0xda, 0x40, 0x92, 0xd8, 0x31, 0xc8, 0xb5, 0x2b, 0x2c, 0xc7, 0x9b, 0xd2, 0xbb, 0xf6, 0xe9, 0xf5, 0x7b, 0x4e, 0x8c, 0xaa, 0x94, 0xb5, 0x81, 0xf9, 0xf2, 0x31, 0x26, 0x1f, 0x0e, 0x2b, 0xbb, 0xf5, 0x3d, 0xbb } -, - /* Seed */ - 62, - { 0xf4, 0x70, 0x7f, 0x58, 0x64, 0x2b, 0x54, 0xcb, 0xf8, 0x0a, 0x9b, 0x50, 0x48, 0xa6, 0xec, 0x0b, 0xd3, 0x5d, 0x09, 0x57, 0x16, 0xdb, 0x12, 0x06, 0x0c, 0xbf, 0x50, 0x58, 0x5f, 0xb9, 0x23, 0x79, 0x81, 0x05, 0x2f, 0x7b, 0xb1, 0x58, 0x3c, 0xd8, 0x7b, 0xc8, 0xbf, 0xb5, 0x5b, 0x73, 0x3e, 0x89, 0x0e, 0xb9, 0xc0, 0x8e, 0xf0, 0xe8, 0x80, 0xe9, 0xba, 0x0d, 0x50, 0xec, 0x95, 0x41 } -, - /* Encryption */ - 128, - { 0x6d, 0x9d, 0x39, 0x19, 0x8b, 0x5f, 0xcb, 0x13, 0x2d, 0x93, 0x15, 0x11, 0x49, 0xd7, 0x59, 0x91, 0x02, 0x4a, 0xc2, 0x2e, 0xb6, 0xeb, 0x2d, 0xc7, 0xc6, 0x05, 0x8f, 0x64, 0x87, 0x56, 0x45, 0x10, 0x2b, 0x95, 0x25, 0x4e, 0x25, 0xe9, 0xf0, 0xae, 0x45, 0x06, 0xd4, 0x3c, 0x60, 0x1c, 0x18, 0x8a, 0x31, 0x4f, 0x4b, 0xb4, 0xe0, 0x38, 0xc8, 0x15, 0x39, 0x41, 0x6e, 0x10, 0x5e, 0x80, 0x97, 0xfb, 0x69, 0x5a, 0xab, 0x36, 0xfe, 0xf5, 0x16, 0xe6, 0xa3, 0x3f, 0x36, 0xf7, 0xf9, 0x5a, 0xd1, 0xff, 0x15, 0x88, 0x90, 0x25, 0xb1, 0xb2, 0xe8, 0x1e, 0x1b, 0xf3, 0xb2, 0xde, 0x5b, 0xa9, 0x18, 0x7c, 0xa9, 0x6c, 0xeb, 0xa9, 0xfc, 0xec, 0xef, 0x9c, 0x53, 0xe4, 0x94, 0x34, 0x86, 0x18, 0x59, 0x67, 0xcf, 0x7a, 0x64, 0x77, 0xc3, 0x29, 0xf0, 0x0e, 0xa6, 0x95, 0x52, 0x5b, 0xca, 0x99, 0xf2, 0xc7 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.17", - /* Message */ - 52, - { 0x6a, 0xfa, 0xdb, 0xe3, 0xda, 0x68, 0xd9, 0x02, 0x85, 0xbb, 0x8f, 0x1e, 0x21, 0x29, 0xff, 0xeb, 0xb1, 0xc6, 0x5b, 0x95, 0x88, 0xd6, 0xc2, 0xc0, 0x40, 0x24, 0xc2, 0x38, 0xb2, 0x0c, 0x65, 0xd2, 0xac, 0xa5, 0xe3, 0x82, 0x76, 0x00, 0x0a, 0x0e, 0x6a, 0x0d, 0x05, 0x37, 0xef, 0xee, 0xf6, 0xd3, 0xe3, 0xd9, 0x4f, 0xb9 } -, - /* Seed */ - 73, - { 0xee, 0x17, 0x6e, 0xa3, 0xcf, 0xd4, 0x90, 0xb6, 0xc0, 0x49, 0xd2, 0xe7, 0x4c, 0x90, 0xc0, 0xee, 0x74, 0x68, 0x52, 0x03, 0x49, 0xb8, 0x51, 0x65, 0x3d, 0xb0, 0x58, 0xa1, 0xc3, 0xe9, 0x56, 0xe0, 0x88, 0x5f, 0x26, 0x1b, 0x6e, 0x71, 0xcf, 0x1e, 0x62, 0x3d, 0x3b, 0x9d, 0x1d, 0x56, 0xfa, 0x13, 0x67, 0xe4, 0x7f, 0xf3, 0x74, 0xad, 0x39, 0x30, 0x9f, 0xfa, 0x2e, 0x67, 0x11, 0x28, 0xd5, 0xab, 0xb4, 0xa6, 0x1a, 0x5b, 0x0d, 0xc2, 0xdb, 0x2c, 0x08 } -, - /* Encryption */ - 128, - { 0x67, 0x2f, 0xe9, 0x51, 0x59, 0xa9, 0x89, 0x3f, 0x34, 0x98, 0xb6, 0x16, 0xc1, 0x7b, 0x59, 0xda, 0x71, 0xda, 0x80, 0x2f, 0xeb, 0xf7, 0xcd, 0x38, 0x11, 0x06, 0x14, 0xa1, 0xb2, 0x5d, 0x96, 0xaa, 0x8a, 0x74, 0xaa, 0xaa, 0x2a, 0x0f, 0x00, 0x0e, 0xf8, 0xac, 0xa3, 0xb4, 0x1a, 0xd1, 0x61, 0xb6, 0x26, 0x33, 0xf2, 0x41, 0x31, 0x9c, 0x33, 0xe4, 0xec, 0xb7, 0x70, 0x6a, 0xb3, 0xad, 0xc6, 0xa3, 0xef, 0xea, 0x22, 0x43, 0x0f, 0x3f, 0x5c, 0x9c, 0x4c, 0xe5, 0x40, 0x4e, 0xb8, 0xe7, 0x5a, 0x10, 0x93, 0x69, 0xc0, 0xaa, 0x0b, 0x7d, 0xd7, 0x13, 0xbd, 0x8b, 0x77, 0xcc, 0xa5, 0xf7, 0x4b, 0xca, 0x5b, 0xc5, 0x55, 0x69, 0x6b, 0x68, 0xe1, 0x17, 0x2d, 0xb4, 0x02, 0x50, 0x1d, 0xcd, 0x26, 0x49, 0x68, 0x5d, 0xb0, 0xfd, 0x88, 0xc8, 0x83, 0x60, 0xda, 0xcc, 0x65, 0x09, 0xff, 0xa8, 0xdf, 0xc2 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.18", - /* Message */ - 48, - { 0x6d, 0x9f, 0x9b, 0x4b, 0xb1, 0x23, 0xba, 0x90, 0x95, 0x53, 0xa7, 0x57, 0x3a, 0x97, 0x1f, 0x64, 0xb7, 0x25, 0x24, 0xcf, 0xeb, 0x04, 0x2d, 0xe3, 0x92, 0x15, 0xf6, 0x50, 0xdb, 0x61, 0x2d, 0x66, 0xd7, 0xae, 0x86, 0x05, 0xd0, 0x44, 0x19, 0x54, 0x62, 0x5f, 0xa9, 0x81, 0x22, 0x33, 0x0e, 0x92 } -, - /* Seed */ - 77, - { 0x7f, 0xf8, 0x68, 0x5a, 0xec, 0xf3, 0x40, 0x26, 0x13, 0x90, 0xad, 0x07, 0x42, 0x73, 0x0c, 0xb6, 0x39, 0x28, 0x30, 0x14, 0xab, 0x37, 0x73, 0x55, 0x6c, 0x69, 0x7f, 0x97, 0xef, 0x62, 0x1a, 0x4d, 0xcb, 0xf8, 0xec, 0x6e, 0xde, 0xc5, 0x0d, 0x8e, 0xc9, 0x59, 0x0a, 0xdb, 0xaf, 0x23, 0x51, 0xdd, 0xfa, 0x0e, 0x52, 0xea, 0x6e, 0xd1, 0x8e, 0xb6, 0xc3, 0x78, 0xf3, 0x80, 0x85, 0xae, 0x5e, 0xe4, 0xcc, 0x48, 0xc1, 0x89, 0x1b, 0xa4, 0x7b, 0x20, 0x10, 0xd5, 0xd4, 0x35, 0x39 } -, - /* Encryption */ - 128, - { 0x8d, 0x30, 0x65, 0x5c, 0xf1, 0x5b, 0xf1, 0x0a, 0x46, 0x97, 0x87, 0xc6, 0xa1, 0x0e, 0x79, 0x25, 0x4f, 0xf0, 0xbd, 0x11, 0x93, 0x8b, 0xc6, 0x0a, 0x81, 0xa7, 0x58, 0xd9, 0x3c, 0xf2, 0xa0, 0x30, 0x24, 0x59, 0xfc, 0x2f, 0x0d, 0x77, 0x00, 0xb8, 0x6d, 0xd6, 0xed, 0x61, 0x83, 0x83, 0xb4, 0x4b, 0x45, 0x87, 0x04, 0xca, 0x11, 0x92, 0x8e, 0x50, 0x4f, 0x02, 0x8e, 0xfe, 0x50, 0x37, 0x17, 0x2c, 0x3e, 0x51, 0xb8, 0x37, 0xbe, 0x61, 0x56, 0xde, 0x6a, 0x09, 0xc5, 0x55, 0x97, 0xbe, 0x74, 0xc9, 0x7c, 0xaa, 0x1d, 0xeb, 0xf3, 0x14, 0xcd, 0x94, 0xb9, 0x1b, 0x9f, 0x94, 0xcb, 0xf7, 0x64, 0x0f, 0x86, 0xc2, 0x6d, 0x1d, 0x6a, 0x0b, 0x10, 0x46, 0x28, 0xb5, 0x87, 0x11, 0x4a, 0xa3, 0x1d, 0x99, 0xf6, 0x9c, 0xf9, 0x57, 0x37, 0x93, 0x2c, 0x0c, 0xb5, 0x33, 0x33, 0x74, 0xde, 0xa0, 0x7f, 0xac } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.19", - /* Message */ - 23, - { 0x33, 0xcc, 0xcb, 0x59, 0x7d, 0xe9, 0x5c, 0xed, 0xb8, 0xb6, 0x57, 0xfc, 0xd8, 0xf8, 0x88, 0x86, 0xda, 0x04, 0xc7, 0x57, 0x93, 0x53, 0x14 } -, - /* Seed */ - 102, - { 0x53, 0x42, 0xf4, 0x68, 0x43, 0x91, 0xcd, 0x74, 0xf5, 0x28, 0x2d, 0xb8, 0x31, 0x41, 0xff, 0xf6, 0x78, 0xf2, 0x3a, 0x3e, 0xa6, 0x52, 0xe0, 0xd4, 0x27, 0xfb, 0x6a, 0xd9, 0x76, 0xc5, 0xa7, 0x10, 0xa6, 0x37, 0x95, 0x77, 0x71, 0x89, 0x47, 0xac, 0x72, 0x7b, 0x4d, 0x58, 0xa0, 0xb0, 0xbd, 0x20, 0x7a, 0xe3, 0x73, 0xa8, 0xb9, 0x9a, 0xc8, 0xe2, 0x51, 0xeb, 0x02, 0x45, 0x8a, 0x9e, 0xdc, 0x39, 0x52, 0xfb, 0x28, 0x42, 0x6d, 0x18, 0xfd, 0xa1, 0x8a, 0x80, 0x2b, 0xbf, 0x0a, 0x0b, 0x8b, 0x2c, 0xf2, 0x5c, 0xa3, 0xa0, 0x22, 0xf7, 0x78, 0xc7, 0xf4, 0x7f, 0xc5, 0x30, 0xd0, 0xb7, 0xa5, 0xbc, 0x84, 0x6e, 0xea, 0x91, 0x80, 0xf2 } -, - /* Encryption */ - 128, - { 0x8c, 0x4a, 0x63, 0xd0, 0x73, 0x1e, 0x2e, 0x71, 0xeb, 0x46, 0x15, 0x18, 0x9a, 0x96, 0x8b, 0x3e, 0x4a, 0x24, 0x28, 0x56, 0xb2, 0x09, 0x02, 0x45, 0x23, 0x8b, 0x66, 0x45, 0x97, 0x8f, 0x1e, 0xe8, 0xd7, 0x98, 0x11, 0x06, 0x2e, 0xbd, 0x2d, 0x1f, 0x3d, 0x52, 0x3a, 0xe6, 0x00, 0xe0, 0xe5, 0xa6, 0xe4, 0x05, 0xc4, 0xe4, 0xb5, 0xa1, 0x6e, 0x8d, 0xfb, 0x49, 0x24, 0x30, 0x4b, 0x0d, 0x1f, 0xf4, 0xd6, 0x41, 0xbf, 0x98, 0x7f, 0xc6, 0xd4, 0x1d, 0x3e, 0xb7, 0xcd, 0xc5, 0x31, 0x34, 0xd0, 0x06, 0x9c, 0xdb, 0x5a, 0xfe, 0xf7, 0xf8, 0xf9, 0xca, 0xc0, 0xee, 0x52, 0x30, 0xb6, 0xf8, 0x86, 0x22, 0xa8, 0x4d, 0xe5, 0x2a, 0xd6, 0xf7, 0x50, 0x47, 0x84, 0x37, 0x06, 0xca, 0x96, 0x97, 0x42, 0xc5, 0x8d, 0xa7, 0x72, 0x62, 0xff, 0x1f, 0x12, 0x8a, 0x66, 0x4e, 0x51, 0xcd, 0x63, 0x5e, 0x71, 0x15 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 2.20", - /* Message */ - 2, - { 0x19, 0xd6 } -, - /* Seed */ - 123, - { 0xea, 0xac, 0xb5, 0x78, 0xae, 0xab, 0xf6, 0x9d, 0x4e, 0xae, 0xeb, 0x36, 0xd0, 0x4c, 0xd8, 0xa2, 0x2e, 0x8f, 0xd7, 0xa2, 0x5f, 0x04, 0x43, 0xa1, 0x1e, 0x4e, 0x08, 0xb3, 0xff, 0xac, 0x1e, 0x05, 0x42, 0x1a, 0x87, 0x6c, 0xca, 0x91, 0x31, 0x82, 0x50, 0xbe, 0xfa, 0xff, 0xef, 0x9b, 0x27, 0x49, 0xdc, 0x40, 0x2f, 0xad, 0x4f, 0xdb, 0x7c, 0x1b, 0x66, 0xaa, 0x5e, 0x08, 0x9f, 0xf9, 0x9f, 0x8b, 0x30, 0x0c, 0xdc, 0x46, 0xf4, 0x8f, 0x56, 0x48, 0xc9, 0x40, 0x8b, 0x5f, 0x8b, 0x3f, 0x5a, 0x12, 0xe6, 0x50, 0x50, 0xdc, 0xbc, 0x0d, 0x53, 0x43, 0xd6, 0x3d, 0x58, 0x08, 0x19, 0x21, 0x65, 0x2d, 0x5b, 0xc8, 0x2d, 0xd3, 0xd7, 0x0e, 0x07, 0x5d, 0x32, 0xd8, 0x02, 0xc2, 0x97, 0x64, 0x78, 0xfc, 0x9f, 0x09, 0x93, 0xdd, 0x08, 0x59, 0xc9, 0x0e, 0x22, 0x8e, 0x87 } -, - /* Encryption */ - 128, - { 0x61, 0x3b, 0xba, 0x5c, 0x19, 0x0a, 0xd7, 0x72, 0xe0, 0x8c, 0x29, 0x07, 0x6e, 0x2e, 0x9e, 0x5f, 0x12, 0xef, 0xc9, 0x29, 0x2e, 0x3b, 0x5c, 0xee, 0x52, 0xc2, 0x69, 0x7f, 0xb7, 0xb6, 0x07, 0xdc, 0x72, 0xe8, 0x25, 0x78, 0xe8, 0xb7, 0x53, 0xba, 0xca, 0xdf, 0x23, 0xb4, 0x77, 0x25, 0x21, 0x3d, 0xb8, 0x9f, 0x88, 0x73, 0xfa, 0x79, 0xb9, 0x14, 0xa4, 0xb5, 0x16, 0x1e, 0xfd, 0x9e, 0x15, 0xcf, 0xa8, 0xdd, 0x1e, 0xff, 0xe8, 0x9f, 0x89, 0x47, 0xa6, 0xf3, 0x82, 0x6d, 0xc6, 0xbf, 0x53, 0xbe, 0xca, 0x36, 0x5b, 0x93, 0x81, 0x18, 0x45, 0x62, 0xa7, 0x9e, 0x21, 0xca, 0x0e, 0x68, 0xeb, 0xf0, 0xab, 0x82, 0xae, 0x76, 0x2b, 0x28, 0xc1, 0x43, 0x65, 0x15, 0x2a, 0xe0, 0xf5, 0x4f, 0x2e, 0x9d, 0x14, 0x43, 0x9a, 0x84, 0x6b, 0x38, 0x3f, 0x5e, 0x2c, 0x55, 0xef, 0xa7, 0x00, 0x85, 0x97, 0xb5 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 3: A 1024-bit RSA key pair", -{ - /* Modulus */ - 128, - { 0xb9, 0x30, 0x96, 0xd0, 0x26, 0x1e, 0xfe, 0x00, 0x0b, 0x3d, 0x17, 0x04, 0xf5, 0x04, 0x31, 0x60, 0xab, 0xd3, 0xeb, 0x56, 0x6c, 0x61, 0xe5, 0x3c, 0x76, 0xc4, 0x01, 0xe2, 0xb6, 0x55, 0x21, 0xbc, 0x12, 0xd4, 0x81, 0x21, 0x51, 0x83, 0xe8, 0xf4, 0x6c, 0x2c, 0xa8, 0xd0, 0x0a, 0xda, 0x5d, 0xfd, 0x04, 0xdc, 0xf7, 0xcf, 0x36, 0xcc, 0x58, 0x11, 0x05, 0xd9, 0x9d, 0x2a, 0x7d, 0xd9, 0x4b, 0x56, 0x76, 0x0a, 0x65, 0x64, 0xfe, 0xe5, 0xe8, 0xaa, 0xeb, 0x06, 0x07, 0xe1, 0x45, 0x19, 0x62, 0x10, 0xa3, 0x1b, 0x7e, 0xd8, 0xdd, 0x2a, 0xf3, 0x2d, 0x29, 0xd2, 0xba, 0xd6, 0xf1, 0x5f, 0xfa, 0x5a, 0x11, 0xdc, 0x73, 0x5c, 0xc3, 0x62, 0x19, 0x02, 0x1e, 0xe8, 0xd1, 0xee, 0xed, 0x34, 0x63, 0x9b, 0x5a, 0x91, 0xac, 0x6a, 0x92, 0x67, 0x4e, 0x18, 0x39, 0x70, 0xc5, 0x9d, 0x5b, 0x19, 0x6d, 0x4b } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x01, 0x07, 0xea, 0x61, 0xad, 0xec, 0xa5, 0xe9, 0x00, 0x7c, 0x59, 0x13, 0x4a, 0x7d, 0x38, 0xfc, 0x7a, 0xf3, 0x10, 0x3a, 0xd2, 0xc4, 0xa2, 0xbe, 0xe3, 0x97, 0x08, 0xbe, 0xfc, 0x83, 0xdc, 0x79, 0xb7, 0x0d, 0xc9, 0x75, 0x92, 0xdb, 0x6d, 0xf7, 0x0f, 0xb3, 0xc4, 0x9c, 0x25, 0x35, 0xfc, 0xfd, 0x9f, 0xc2, 0xce, 0x7b, 0x05, 0x53, 0x92, 0xe3, 0xee, 0xb3, 0xe7, 0x97, 0x93, 0xcc, 0x1b, 0x60, 0x15, 0x3f, 0x4a, 0x0b, 0xff, 0x26, 0xbe, 0x66, 0x7b, 0xbc, 0xdb, 0xbf, 0x6e, 0x32, 0xaf, 0xa6, 0xfd, 0x14, 0x83, 0x7f, 0x3c, 0x79, 0xbe, 0x44, 0xcb, 0x1c, 0x63, 0x8f, 0xfa, 0x5c, 0x6b, 0x17, 0x70, 0x9a, 0x96, 0xe1, 0x27, 0x03, 0x0b, 0xb1, 0x11, 0x6d, 0xec, 0xfd, 0xe5, 0x2b, 0xb0, 0x40, 0x84, 0x2a, 0x94, 0xd2, 0xe6, 0x74, 0xf1, 0x17, 0x51, 0xec, 0xb9, 0x03, 0xee, 0x10, 0x48, 0x45 } -, - /* Prime 1 */ - 64, - { 0xe7, 0xfe, 0xc4, 0x74, 0xe0, 0xeb, 0x31, 0x2d, 0x1d, 0x76, 0xcb, 0xb2, 0x72, 0x2e, 0xfa, 0x42, 0x10, 0x68, 0xb1, 0x91, 0xe2, 0x33, 0xb6, 0x4e, 0x46, 0x08, 0x7f, 0xdd, 0x45, 0x76, 0xd3, 0x85, 0x55, 0x07, 0x19, 0x35, 0x2e, 0x10, 0x9f, 0xe4, 0x33, 0xac, 0x4e, 0x35, 0x8e, 0x7c, 0x28, 0x59, 0xeb, 0xa7, 0xe4, 0x3a, 0x04, 0xee, 0x85, 0x9a, 0x46, 0x35, 0x2c, 0x12, 0x43, 0xa1, 0xcc, 0x6f } -, - /* Prime 2 */ - 64, - { 0xcc, 0x5a, 0x02, 0xf9, 0x55, 0x7a, 0x63, 0x5c, 0xf5, 0xe6, 0x9b, 0x0f, 0x2b, 0x3f, 0x2e, 0x61, 0x2e, 0x1f, 0x0a, 0xbb, 0xd4, 0xbc, 0xf1, 0x69, 0xca, 0xc0, 0x84, 0xdc, 0xf4, 0xb9, 0xb4, 0x34, 0x43, 0xa7, 0x85, 0x23, 0x90, 0xf8, 0x19, 0x41, 0x9e, 0xc1, 0xa8, 0x38, 0x7e, 0xf0, 0x4d, 0xd2, 0xdb, 0x7d, 0x60, 0xb4, 0x0a, 0x21, 0xf9, 0x4f, 0x46, 0xd2, 0x27, 0x87, 0x4b, 0x3e, 0x52, 0xe5 } -, - /* Prime exponent 1 */ - 64, - { 0xab, 0x92, 0x8b, 0x10, 0x35, 0x57, 0x3b, 0x23, 0x36, 0x6b, 0x28, 0xf2, 0x6b, 0xe7, 0xba, 0x45, 0x29, 0x85, 0x83, 0xed, 0x73, 0xf0, 0xf2, 0x9e, 0xa8, 0xc4, 0x98, 0x6b, 0xb8, 0x77, 0xcc, 0xaf, 0x0a, 0xd7, 0x19, 0x19, 0x6f, 0x5b, 0xf4, 0x23, 0xfc, 0xe3, 0x2d, 0x64, 0x06, 0x60, 0x64, 0x27, 0x3c, 0x55, 0x0a, 0x40, 0xae, 0x6d, 0x08, 0x79, 0xb3, 0xfa, 0x97, 0x01, 0x5a, 0xeb, 0x4a, 0x19 } -, - /* Prime exponent 2 */ - 63, - { 0x8c, 0x7d, 0x55, 0x8e, 0x15, 0x36, 0x0f, 0x19, 0xd9, 0xf4, 0xb0, 0xa5, 0xbd, 0x15, 0xb2, 0xcd, 0x1c, 0xe8, 0x3a, 0x78, 0xe7, 0xc8, 0xfe, 0x2f, 0xbd, 0x34, 0x9e, 0x23, 0x4a, 0x1c, 0x61, 0xc7, 0x8c, 0xbb, 0x9e, 0xcc, 0xd4, 0xdd, 0xbc, 0x7f, 0x60, 0xa5, 0xc3, 0x01, 0x14, 0x44, 0x21, 0x3c, 0xd5, 0xa9, 0x5c, 0xd2, 0x6a, 0x24, 0xf1, 0x41, 0x8f, 0x6e, 0xeb, 0xbe, 0x17, 0xfc, 0xc1 } -, - /* Coefficient */ - 64, - { 0xb0, 0xb1, 0xb9, 0xcb, 0x23, 0xac, 0x2a, 0x8a, 0x56, 0x36, 0x66, 0x69, 0x9a, 0x52, 0x40, 0x54, 0xbe, 0xf3, 0x81, 0xaa, 0xbd, 0x75, 0x55, 0x31, 0xa1, 0xdf, 0xa8, 0x85, 0xdc, 0x8f, 0x98, 0x86, 0xa5, 0x5a, 0xf0, 0xe3, 0x68, 0x63, 0x91, 0xc7, 0x97, 0x68, 0x1a, 0x8f, 0xef, 0xcf, 0x24, 0xdb, 0xd8, 0x1e, 0x03, 0x13, 0x16, 0x99, 0x8f, 0x5d, 0x81, 0x8d, 0x24, 0x76, 0xda, 0xd0, 0x6d, 0xe8 } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 3.1", - /* Message */ - 17, - { 0x44, 0xe5, 0x6a, 0xa7, 0x7b, 0xd9, 0x35, 0xac, 0x59, 0xa9, 0xbd, 0x32, 0x37, 0x83, 0xe1, 0x27, 0x42 } -, - /* Seed */ - 108, - { 0x92, 0xee, 0xf6, 0x19, 0xf0, 0x4f, 0x52, 0x02, 0x8f, 0x4c, 0xc3, 0xe5, 0x24, 0x1f, 0x0a, 0xa0, 0x92, 0x1b, 0x4d, 0x18, 0x3c, 0x1f, 0x5b, 0xd6, 0x8d, 0x86, 0xfb, 0xe9, 0xe7, 0xb7, 0xd0, 0xbb, 0x10, 0x4e, 0xd1, 0xca, 0xe0, 0x7a, 0xc7, 0xd8, 0x0b, 0xfd, 0x9c, 0x1c, 0xef, 0xf8, 0xdc, 0xda, 0x1d, 0xcc, 0x69, 0x30, 0xf4, 0xc5, 0x51, 0x37, 0x34, 0x6b, 0xfd, 0x68, 0xc1, 0x9d, 0x87, 0x97, 0x2f, 0x7f, 0x34, 0xcb, 0xae, 0x56, 0x63, 0x26, 0x0f, 0xeb, 0x79, 0xf7, 0x60, 0x22, 0x1c, 0xd6, 0x7b, 0xe0, 0x66, 0xd5, 0xaf, 0x0f, 0x07, 0x3c, 0x0f, 0x2c, 0x43, 0x9e, 0x8b, 0xcb, 0x74, 0x63, 0xed, 0xe4, 0x4c, 0x8b, 0x15, 0x0e, 0xba, 0xf3, 0x29, 0x87, 0x26, 0xc3 } -, - /* Encryption */ - 128, - { 0x15, 0x91, 0xd1, 0xce, 0x0f, 0xad, 0x66, 0xd8, 0x6f, 0xd4, 0x2e, 0xfd, 0xb3, 0x1e, 0x9a, 0x02, 0x8a, 0x31, 0x57, 0xfb, 0x09, 0x14, 0xb2, 0x47, 0xeb, 0x3d, 0x22, 0xd7, 0x6f, 0x97, 0x69, 0xb0, 0xe1, 0x9f, 0x6c, 0x06, 0x4c, 0xa1, 0xb9, 0x89, 0x06, 0x39, 0xee, 0x6e, 0x37, 0xb7, 0x09, 0x22, 0x4d, 0x6b, 0x58, 0xeb, 0xb6, 0x55, 0xae, 0x4b, 0x69, 0xed, 0x4c, 0xd7, 0x5d, 0x81, 0x29, 0x21, 0x17, 0xc0, 0x69, 0x30, 0xd4, 0x2a, 0xc4, 0xd4, 0x2e, 0xa7, 0x35, 0x14, 0x21, 0x8f, 0x49, 0xea, 0x07, 0xca, 0x97, 0x43, 0x67, 0x09, 0x68, 0x3d, 0x67, 0xa8, 0xe9, 0xe8, 0x08, 0xda, 0x69, 0xa5, 0x0b, 0x73, 0x9c, 0x42, 0xeb, 0x0d, 0xeb, 0x94, 0xa3, 0x49, 0x8f, 0xc5, 0x45, 0x0e, 0xb6, 0x9a, 0xce, 0x23, 0x76, 0x76, 0x61, 0xfe, 0xdf, 0x34, 0x18, 0x3a, 0x1b, 0x6f, 0x42, 0x5d, 0xd6, 0xa0 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 3.2", - /* Message */ - 18, - { 0xa7, 0x57, 0x38, 0x29, 0x1f, 0xad, 0x54, 0x13, 0x95, 0x7f, 0xa3, 0xb9, 0xf3, 0xb2, 0xca, 0xac, 0x9f, 0x5a } -, - /* Seed */ - 107, - { 0x3a, 0x19, 0x1a, 0xaf, 0x45, 0xed, 0x4c, 0x25, 0x89, 0x20, 0x5d, 0x9c, 0xf6, 0xa3, 0x0f, 0x07, 0x70, 0x0e, 0x38, 0xbe, 0x06, 0x25, 0x62, 0x43, 0x01, 0x8d, 0x23, 0xc6, 0x84, 0xda, 0xec, 0xe7, 0xe8, 0x67, 0xe3, 0x9d, 0x76, 0xc6, 0xb6, 0xf0, 0x35, 0x43, 0xfc, 0x15, 0xaf, 0x81, 0xbf, 0x84, 0xf9, 0x64, 0xea, 0xf3, 0xa9, 0x5a, 0x4b, 0x80, 0x86, 0x28, 0xfd, 0x51, 0x55, 0x38, 0x99, 0xf8, 0x11, 0xc0, 0x8c, 0x62, 0x60, 0x9c, 0x51, 0x4c, 0xfa, 0x1d, 0xbb, 0x78, 0xd5, 0xa5, 0xb3, 0x3c, 0xc0, 0xb8, 0x57, 0xfc, 0xb1, 0xee, 0xcc, 0x53, 0x1b, 0x13, 0x26, 0x34, 0x43, 0x90, 0x59, 0xf5, 0x5a, 0x73, 0x3e, 0x14, 0x6e, 0x1c, 0xa1, 0xeb, 0x5a, 0x97, 0xf4 } -, - /* Encryption */ - 128, - { 0x70, 0xaa, 0xf7, 0x24, 0x39, 0x6c, 0x1a, 0xc5, 0x0e, 0xdb, 0xbf, 0xe8, 0x34, 0x1b, 0x08, 0x7b, 0xa0, 0xff, 0xe2, 0x87, 0x60, 0x5a, 0x8c, 0x3a, 0x8c, 0xcf, 0x85, 0xab, 0x2e, 0xd2, 0xfe, 0x22, 0x15, 0x9d, 0x62, 0xaa, 0x02, 0x74, 0x76, 0xeb, 0xbf, 0x07, 0x70, 0x02, 0x6d, 0x2d, 0x3b, 0x0c, 0x0d, 0x77, 0x34, 0xfa, 0xaa, 0xa8, 0xd1, 0x5e, 0x2c, 0xe5, 0x1c, 0x85, 0x53, 0x5c, 0x26, 0xb4, 0x15, 0x0a, 0xd6, 0x34, 0x6e, 0x3b, 0xfd, 0x38, 0xdb, 0x5d, 0xac, 0xf7, 0x52, 0xe7, 0x5d, 0x75, 0x31, 0x40, 0x54, 0xd1, 0x67, 0xa9, 0x6d, 0x81, 0x9f, 0x34, 0x38, 0xa7, 0xbe, 0xc4, 0x46, 0x7f, 0xc5, 0x60, 0xa6, 0x94, 0x46, 0x94, 0x85, 0xe8, 0xe7, 0x8e, 0x47, 0xe4, 0xe8, 0x27, 0x7c, 0xa7, 0xd3, 0xfd, 0x2a, 0xd9, 0x4a, 0x30, 0x46, 0x4c, 0x24, 0x57, 0x85, 0x47, 0x25, 0xc6, 0x16, 0x15 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.3", - /* Message */ - 14, - { 0x87, 0x31, 0x2f, 0x78, 0x7d, 0xe0, 0x65, 0x97, 0x50, 0xd6, 0x02, 0xac, 0x11, 0x02 } -, - /* Seed */ - 111, - { 0xa2, 0x29, 0xe3, 0xe8, 0xef, 0x1c, 0xaa, 0x66, 0xca, 0xf0, 0xd8, 0xac, 0xd8, 0xd6, 0x6b, 0x9e, 0x41, 0xcc, 0x77, 0x1f, 0x26, 0xe2, 0x0f, 0x12, 0xec, 0xc6, 0xe2, 0xaa, 0x38, 0x45, 0x51, 0x3d, 0xd1, 0x34, 0xf7, 0xc6, 0xe5, 0x74, 0xf4, 0x1b, 0x21, 0x5d, 0x1d, 0x11, 0x17, 0x56, 0xda, 0xf9, 0x71, 0xcc, 0xf3, 0x9c, 0xcd, 0xce, 0x78, 0x16, 0x19, 0xd7, 0x97, 0x20, 0xdf, 0x91, 0x8d, 0x33, 0x9c, 0x82, 0x6d, 0xc0, 0x49, 0xb3, 0x90, 0x91, 0x7c, 0x17, 0xba, 0x0f, 0xb1, 0x30, 0x2f, 0xff, 0x11, 0x0a, 0x14, 0xdd, 0x23, 0x84, 0x90, 0x27, 0x41, 0xf9, 0x12, 0xb2, 0x6a, 0x1a, 0xdb, 0xe0, 0xed, 0x1e, 0x8f, 0xd9, 0x89, 0x71, 0x0b, 0x40, 0x3d, 0x27, 0xc4, 0xe0, 0x18, 0xfb, 0x9b } -, - /* Encryption */ - 128, - { 0x03, 0x38, 0x46, 0xd7, 0x66, 0x4c, 0x8f, 0x92, 0x62, 0x57, 0xc7, 0xfd, 0x32, 0x64, 0x48, 0x47, 0x92, 0xac, 0x7f, 0x9b, 0xc8, 0x75, 0x8a, 0x7a, 0x16, 0xab, 0xb8, 0x9f, 0xa3, 0xcc, 0xc4, 0xd1, 0x3a, 0x1e, 0xed, 0x88, 0xaf, 0x73, 0x23, 0xbc, 0x3c, 0x74, 0xe2, 0x3f, 0xda, 0xb5, 0x03, 0x81, 0x89, 0x4c, 0x86, 0x26, 0xdf, 0xd0, 0xac, 0x85, 0x89, 0xd4, 0x62, 0x34, 0xd3, 0xc3, 0x5f, 0x18, 0x99, 0x81, 0x79, 0x44, 0x84, 0x31, 0xdc, 0x81, 0x6f, 0xb6, 0x3e, 0x55, 0xcf, 0x26, 0xd7, 0x4a, 0x9d, 0x2a, 0x09, 0x32, 0x67, 0x3c, 0xb4, 0xbe, 0xb8, 0x29, 0xcd, 0x7d, 0x49, 0x50, 0x88, 0x48, 0xc6, 0xd0, 0xc0, 0x0d, 0x5c, 0x70, 0xf7, 0xfb, 0x47, 0x67, 0x70, 0xe4, 0x03, 0x19, 0x23, 0x7c, 0x78, 0x6b, 0xf4, 0xe2, 0x6c, 0x48, 0xd2, 0xcf, 0xd9, 0x6e, 0xe3, 0x62, 0xbf, 0x29, 0x28, 0x25 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.4", - /* Message */ - 54, - { 0x9a, 0x2b, 0xca, 0x75, 0xe3, 0x26, 0x49, 0x77, 0x7b, 0x9f, 0x13, 0xec, 0x30, 0xfe, 0x16, 0xbb, 0x8a, 0xb4, 0x6d, 0x6d, 0x5e, 0x0c, 0x64, 0x63, 0xa7, 0x3d, 0x8c, 0x36, 0x63, 0xad, 0xab, 0xc7, 0x23, 0xbd, 0xe7, 0x2a, 0x50, 0x76, 0x5e, 0x7b, 0x30, 0x0e, 0xf6, 0xb5, 0x61, 0xde, 0xe8, 0x84, 0x84, 0x88, 0x0e, 0x4d, 0x61, 0x2c } -, - /* Seed */ - 71, - { 0x8b, 0xfa, 0xe9, 0x22, 0x2f, 0x75, 0xa0, 0x69, 0x98, 0xed, 0x6d, 0x9b, 0x14, 0x9e, 0x89, 0x05, 0xcf, 0xc8, 0xdb, 0x05, 0x5a, 0x0e, 0x32, 0xac, 0xed, 0xf8, 0x24, 0xd2, 0xf6, 0xb5, 0xb4, 0x2b, 0x3a, 0xea, 0xc6, 0xa7, 0x10, 0x4e, 0x14, 0x4d, 0x5e, 0x48, 0x34, 0x28, 0x0e, 0x36, 0x44, 0x5a, 0xb8, 0x50, 0xf3, 0xa6, 0xde, 0x16, 0x4c, 0x2c, 0x79, 0x0f, 0xe7, 0xd9, 0xd7, 0xbc, 0x7f, 0x9b, 0xdb, 0xe2, 0x52, 0x17, 0xda, 0x2d, 0xed } -, - /* Encryption */ - 128, - { 0x6e, 0xc5, 0xf5, 0x59, 0xc8, 0xa3, 0x20, 0xd9, 0x0d, 0x1e, 0xb5, 0xef, 0x09, 0x1c, 0x4d, 0x12, 0x55, 0xa2, 0x4a, 0x69, 0x19, 0x41, 0x0e, 0xb1, 0xdf, 0x65, 0xa9, 0x7b, 0x30, 0xcd, 0xd7, 0xfa, 0xe1, 0x8e, 0x65, 0x12, 0xa0, 0x27, 0xe9, 0x76, 0x70, 0x4b, 0x4f, 0xa0, 0x44, 0x37, 0x43, 0x93, 0xd5, 0x01, 0xe2, 0xba, 0x46, 0x18, 0x62, 0x00, 0xef, 0x0d, 0xdd, 0xf1, 0x9c, 0x75, 0x77, 0x58, 0xe4, 0x67, 0x94, 0x30, 0xbc, 0xd9, 0xfd, 0x11, 0x9e, 0xa2, 0x43, 0xb3, 0x49, 0xdc, 0xf8, 0x1c, 0x34, 0x32, 0xd3, 0x1f, 0xba, 0x91, 0x1e, 0xc6, 0xfc, 0x68, 0x6e, 0xaa, 0xdf, 0xf6, 0xb9, 0xfd, 0xf5, 0x3a, 0xa4, 0xc8, 0x5a, 0x49, 0xa2, 0x2a, 0x05, 0x1c, 0x5f, 0x18, 0x07, 0xf3, 0x08, 0x3b, 0x1b, 0x3e, 0x61, 0x17, 0xb4, 0xef, 0x12, 0x08, 0xde, 0x0a, 0x80, 0x01, 0xdc, 0x29, 0x1c, 0x4e } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.5", - /* Message */ - 48, - { 0xdf, 0xd6, 0x3e, 0x6e, 0xc6, 0x1e, 0x07, 0x27, 0x5b, 0x8e, 0x37, 0xcc, 0x63, 0x69, 0xe1, 0xf3, 0xec, 0x0b, 0xfc, 0x57, 0xa2, 0x98, 0xb9, 0x05, 0xae, 0x5d, 0x07, 0x74, 0xe0, 0xf5, 0x22, 0xe6, 0x75, 0x9c, 0x7d, 0x11, 0x6f, 0x8e, 0x8e, 0xfe, 0x69, 0x45, 0x0f, 0xa7, 0xa8, 0x38, 0x9f, 0x81 } -, - /* Seed */ - 77, - { 0xc4, 0x22, 0x37, 0x7b, 0x89, 0x86, 0x4b, 0x0d, 0xf3, 0x8b, 0x4f, 0x9c, 0x15, 0xf9, 0x8a, 0x05, 0x96, 0x55, 0xe1, 0xc9, 0xb0, 0xc7, 0x09, 0x63, 0x5c, 0xa6, 0x06, 0x49, 0xd8, 0xd2, 0x47, 0x5e, 0xe1, 0x6c, 0xb1, 0x27, 0xf6, 0x76, 0x39, 0x12, 0x96, 0x4e, 0x19, 0x84, 0xd6, 0xda, 0xad, 0x4d, 0x6a, 0xbd, 0x04, 0xb0, 0x46, 0x18, 0xb3, 0x2e, 0x53, 0x25, 0xba, 0x95, 0xeb, 0x5e, 0x76, 0xdb, 0xd4, 0x6d, 0x9f, 0xb5, 0x9d, 0xf0, 0x7a, 0x08, 0x1e, 0x95, 0x6c, 0xb0, 0x73 } -, - /* Encryption */ - 128, - { 0x9e, 0x06, 0xcd, 0x91, 0xa4, 0x4a, 0x9a, 0xde, 0xa6, 0xa7, 0x98, 0x03, 0xd3, 0xe6, 0xbb, 0xab, 0x17, 0xdb, 0x10, 0x62, 0xb6, 0x51, 0x0b, 0xed, 0x40, 0x07, 0x55, 0x66, 0x74, 0x95, 0x44, 0xc0, 0x3d, 0x7a, 0x78, 0xb1, 0x37, 0xb0, 0xdc, 0x1e, 0x66, 0x26, 0x32, 0x1f, 0xed, 0xaf, 0xc2, 0x0d, 0xcd, 0xbf, 0x70, 0x80, 0xf7, 0xf5, 0xbd, 0xd5, 0x67, 0x44, 0xce, 0x99, 0x9f, 0x76, 0x70, 0x5c, 0x4f, 0x5e, 0x6f, 0xa1, 0x5f, 0x46, 0xc5, 0xae, 0x50, 0x80, 0x90, 0xdb, 0xbc, 0x85, 0xfb, 0x86, 0x89, 0x9c, 0x95, 0x78, 0x60, 0x8d, 0xfd, 0x77, 0x8a, 0xa4, 0xa7, 0x9d, 0x3d, 0x73, 0x63, 0x54, 0xcc, 0xfb, 0xfa, 0x2c, 0x86, 0xf2, 0x9a, 0x7a, 0x58, 0x45, 0x3d, 0x75, 0x7f, 0xd5, 0x22, 0xf7, 0x84, 0x08, 0xd9, 0x91, 0x6b, 0x1b, 0xd0, 0x65, 0x4b, 0xff, 0xe6, 0xe0, 0x66, 0xba, 0xeb, 0x50 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.6", - /* Message */ - 35, - { 0x5d, 0x91, 0xfb, 0xc1, 0xa7, 0xba, 0x79, 0x93, 0x9b, 0x89, 0xa2, 0x40, 0x8c, 0xce, 0x8e, 0xd4, 0xbb, 0x26, 0x66, 0xdd, 0xfe, 0x09, 0xd9, 0x19, 0x21, 0xa0, 0xaa, 0x69, 0x09, 0x6a, 0x95, 0x69, 0x92, 0xc2, 0x1c } -, - /* Seed */ - 90, - { 0xaf, 0x07, 0xfe, 0xa3, 0x21, 0xea, 0xa2, 0x67, 0xaf, 0x7f, 0x09, 0x80, 0x6f, 0x9e, 0xa8, 0xb4, 0xcf, 0x13, 0x5e, 0xd6, 0xf1, 0x43, 0x2d, 0x51, 0xb2, 0x8f, 0x92, 0x44, 0x87, 0x09, 0xc2, 0xee, 0x8a, 0xed, 0x7f, 0x73, 0xb6, 0x28, 0x2c, 0xbf, 0xd3, 0x7f, 0x82, 0xdb, 0xa8, 0x72, 0x3e, 0x5e, 0x5e, 0x0a, 0x81, 0xf5, 0x90, 0xf8, 0x2e, 0x2f, 0xa8, 0x4c, 0x3b, 0xc0, 0x0c, 0x9b, 0x9f, 0x91, 0xaa, 0x55, 0x3b, 0x8b, 0x2c, 0x07, 0x4b, 0xfe, 0xca, 0xc2, 0xf5, 0x52, 0x37, 0xf4, 0xcb, 0x70, 0x54, 0x3a, 0xba, 0x49, 0x94, 0x68, 0xcf, 0x68, 0x44, 0xc3 } -, - /* Encryption */ - 128, - { 0x76, 0x05, 0x0e, 0x22, 0x64, 0x22, 0x0e, 0x10, 0x05, 0x2c, 0x49, 0xb9, 0x6c, 0xc8, 0x41, 0x1e, 0x39, 0x6a, 0x7a, 0x6e, 0x4a, 0xed, 0xb0, 0x6b, 0x48, 0xfd, 0xb0, 0x71, 0xde, 0x83, 0x9b, 0x40, 0x1c, 0xac, 0x0c, 0x46, 0x8d, 0xe8, 0xd1, 0xed, 0x0b, 0x56, 0x8c, 0xe6, 0x90, 0xe8, 0x03, 0x7a, 0xf5, 0xde, 0xf6, 0xb3, 0xd2, 0xdb, 0xc7, 0xb5, 0xf2, 0xfa, 0xde, 0x35, 0x6c, 0x26, 0xcf, 0xfc, 0xdd, 0x33, 0x40, 0x33, 0xea, 0x2c, 0x99, 0x77, 0x92, 0xd9, 0x30, 0xa7, 0x26, 0x46, 0x12, 0x5c, 0x0e, 0xe8, 0x6a, 0x4d, 0xd8, 0x43, 0xc8, 0x24, 0xc7, 0xa5, 0x2a, 0xc9, 0x88, 0xc9, 0x2e, 0x6c, 0x69, 0xb5, 0x80, 0x76, 0x1c, 0x49, 0x88, 0x1f, 0x29, 0xdd, 0x8a, 0x76, 0xda, 0x79, 0x3f, 0x43, 0x2e, 0x7d, 0x5d, 0xc7, 0x31, 0xa2, 0x5e, 0x5b, 0xb5, 0x02, 0x58, 0xd0, 0x27, 0x39, 0x5f, 0xbd } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.7", - /* Message */ - 8, - { 0x04, 0xed, 0xd8, 0x3c, 0x65, 0x65, 0x6a, 0x01 } -, - /* Seed */ - 117, - { 0x88, 0xf9, 0xa2, 0x71, 0x97, 0xf9, 0xf2, 0x57, 0xfa, 0x81, 0xc0, 0xe3, 0x05, 0x90, 0xb7, 0x3e, 0x9e, 0x11, 0xc7, 0x6b, 0xc8, 0x9e, 0x08, 0x53, 0x6b, 0x4b, 0x64, 0xa2, 0x50, 0x6a, 0xeb, 0x33, 0xb4, 0x50, 0x74, 0x73, 0x08, 0x09, 0xa0, 0x5c, 0x45, 0xb9, 0xbc, 0x95, 0x71, 0x73, 0x69, 0xcf, 0x92, 0xc1, 0xbf, 0x98, 0x6e, 0x53, 0xba, 0x11, 0x23, 0x83, 0x30, 0xfd, 0xc4, 0xe0, 0x5e, 0xa1, 0x07, 0x33, 0x4a, 0xb3, 0x11, 0x06, 0xae, 0xbd, 0x9c, 0x6c, 0x29, 0xe5, 0x01, 0xa5, 0x7d, 0x99, 0x7c, 0x01, 0xbb, 0xc1, 0x01, 0x0b, 0xd5, 0x2f, 0x05, 0x38, 0xb9, 0x51, 0x59, 0xf3, 0x91, 0x32, 0x0d, 0xe6, 0xdb, 0x23, 0xd8, 0x16, 0x2c, 0xf1, 0x46, 0x58, 0x4c, 0x6e, 0x07, 0x6c, 0x4e, 0xae, 0x86, 0x20, 0x72, 0xeb, 0x5b } -, - /* Encryption */ - 128, - { 0x79, 0x1b, 0x37, 0x91, 0x48, 0xa8, 0x3a, 0x03, 0x4d, 0x31, 0x2a, 0x82, 0xbb, 0xb3, 0x7b, 0x11, 0x1b, 0x40, 0xbc, 0xf6, 0xa3, 0x37, 0xfd, 0xe2, 0x89, 0xb0, 0x8e, 0x07, 0x2e, 0x44, 0x03, 0x19, 0x73, 0xff, 0x9d, 0x0c, 0x27, 0xf7, 0x0d, 0x64, 0xa8, 0xea, 0xfc, 0x6e, 0xb5, 0xf8, 0xeb, 0x4e, 0x52, 0xe2, 0xc4, 0x19, 0x7e, 0xcf, 0xa5, 0x45, 0xed, 0x63, 0xae, 0x9a, 0x12, 0x83, 0x79, 0xd3, 0xf5, 0x62, 0xa1, 0x8f, 0xe3, 0xad, 0x14, 0x05, 0x27, 0x67, 0xf0, 0x54, 0x1b, 0x90, 0x16, 0x81, 0x85, 0xcb, 0xb7, 0x8d, 0xb6, 0x03, 0x81, 0xc0, 0x92, 0xbc, 0x23, 0xe1, 0xaa, 0x05, 0xb4, 0x08, 0x92, 0xf9, 0xa1, 0x16, 0xe6, 0x25, 0xcb, 0x14, 0x8b, 0x56, 0x07, 0x42, 0xcc, 0x12, 0x78, 0xc4, 0xd2, 0x1a, 0x4a, 0x7d, 0x37, 0xf6, 0x98, 0x2a, 0xee, 0x27, 0xf2, 0xa4, 0xc0, 0xc5, 0x73, 0xd2 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.8", - /* Message */ - 25, - { 0x3f, 0x7e, 0xea, 0x78, 0x1b, 0x77, 0xd8, 0x5f, 0xe3, 0x71, 0xb3, 0xe9, 0x37, 0x3e, 0x7b, 0x69, 0x21, 0x7d, 0x31, 0x50, 0xa0, 0x2d, 0x89, 0x58, 0xde } -, - /* Seed */ - 100, - { 0x49, 0x99, 0xc6, 0x4c, 0xbf, 0xa3, 0x85, 0x24, 0xad, 0xca, 0xb6, 0x6f, 0x64, 0x45, 0x4d, 0x36, 0xfb, 0xfc, 0xb2, 0x98, 0x6e, 0x1f, 0xa4, 0x75, 0x3a, 0x0e, 0x03, 0x88, 0x9f, 0xf0, 0x6e, 0xe1, 0x60, 0x0e, 0xee, 0x23, 0xbe, 0x53, 0xa9, 0x74, 0x42, 0xb4, 0x2c, 0x69, 0x62, 0x18, 0x66, 0x63, 0x2e, 0x4a, 0x6b, 0x6a, 0x1c, 0x71, 0x05, 0x73, 0x26, 0x1d, 0x71, 0xf3, 0x8a, 0xbf, 0x9e, 0x52, 0x49, 0xdd, 0xc8, 0xe1, 0xb7, 0x7b, 0x3f, 0x12, 0x6b, 0xa0, 0x88, 0x15, 0xc4, 0xfe, 0x63, 0x31, 0x4f, 0x9b, 0x9e, 0x8e, 0x7a, 0x40, 0xc7, 0xfc, 0x72, 0x86, 0x25, 0x20, 0xed, 0x49, 0xd4, 0x12, 0x59, 0xab, 0x2e, 0x0c } -, - /* Encryption */ - 128, - { 0x74, 0xfd, 0x8b, 0x98, 0x56, 0xd7, 0x57, 0x6e, 0x0f, 0x12, 0x87, 0xe0, 0xe9, 0x08, 0x5a, 0x38, 0x01, 0xe6, 0xb6, 0x77, 0x4d, 0xb7, 0x33, 0x54, 0x1d, 0xeb, 0xd3, 0x9e, 0x72, 0xcf, 0xa8, 0x29, 0x1f, 0xec, 0x27, 0x01, 0x8c, 0x9f, 0x53, 0x05, 0xa4, 0x4c, 0xcb, 0x5a, 0x3c, 0xb5, 0x91, 0xfe, 0xd2, 0xe6, 0xa1, 0xd1, 0xd8, 0x5c, 0xaa, 0xa7, 0x4d, 0xc2, 0x37, 0x59, 0xd6, 0x66, 0x5a, 0x45, 0x70, 0xa6, 0x37, 0xf3, 0xab, 0x30, 0x4b, 0x76, 0x61, 0x31, 0x3b, 0x96, 0x71, 0x3c, 0x7b, 0x7e, 0x49, 0x77, 0x31, 0x33, 0xdd, 0x5d, 0x4e, 0xf9, 0xd2, 0x9a, 0x1a, 0xf7, 0x12, 0x00, 0x15, 0x02, 0x8d, 0xaa, 0xb3, 0xdf, 0x04, 0x2c, 0x56, 0x26, 0x20, 0xaa, 0x49, 0xd2, 0xc0, 0x14, 0x41, 0x4d, 0xfb, 0x15, 0x77, 0xd7, 0x19, 0xa9, 0x58, 0x82, 0x64, 0x71, 0x2d, 0xe3, 0xbf, 0x4a, 0x76, 0x79 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.9", - /* Message */ - 47, - { 0xa3, 0x85, 0x08, 0xd9, 0x46, 0x0c, 0x63, 0xf4, 0x15, 0x81, 0xa8, 0x86, 0x9a, 0x75, 0x82, 0x4b, 0x14, 0xf5, 0xc6, 0x50, 0x32, 0x29, 0x99, 0xdc, 0x41, 0x13, 0x50, 0xd0, 0xd4, 0xe8, 0x62, 0x4f, 0xf0, 0x9c, 0xeb, 0x00, 0xd3, 0xbe, 0xdc, 0x5d, 0x76, 0x2a, 0x40, 0xc9, 0x39, 0x80, 0x04 } -, - /* Seed */ - 78, - { 0x6a, 0x0a, 0x28, 0x8a, 0x1e, 0x67, 0x43, 0x0c, 0x66, 0x6a, 0xeb, 0xea, 0x44, 0xb5, 0x82, 0xa9, 0x09, 0x69, 0xcc, 0x01, 0xe9, 0x0a, 0xae, 0x10, 0x53, 0xce, 0x55, 0xee, 0xb9, 0x87, 0x9b, 0xcc, 0x62, 0x25, 0x39, 0x15, 0xe9, 0x22, 0xf1, 0x09, 0x66, 0x67, 0xbd, 0xa0, 0x2a, 0x14, 0xe7, 0x07, 0x47, 0xb3, 0x59, 0x35, 0x24, 0xc2, 0x84, 0x85, 0x47, 0xd2, 0x11, 0x4d, 0x1d, 0x0c, 0xdc, 0xb9, 0x7e, 0xb4, 0xdf, 0x45, 0x5b, 0xba, 0xc9, 0xb0, 0xcc, 0x29, 0x08, 0x39, 0xb7, 0x3a } -, - /* Encryption */ - 128, - { 0xa6, 0x77, 0x57, 0x80, 0x8f, 0x5a, 0xbd, 0xc8, 0x1e, 0xdb, 0x7f, 0x69, 0x2f, 0x9f, 0xb8, 0x52, 0xf1, 0xa1, 0x66, 0x1c, 0x4a, 0x00, 0x98, 0x05, 0xc4, 0x4b, 0x21, 0x6c, 0xd3, 0xb1, 0x32, 0x2b, 0xbb, 0x25, 0xd1, 0x45, 0x8e, 0x31, 0xb0, 0xf0, 0x7d, 0x65, 0x50, 0x57, 0x59, 0xc4, 0xb4, 0x14, 0x7f, 0x23, 0xcb, 0xee, 0x2a, 0xf4, 0xa1, 0xa5, 0x93, 0x8a, 0x06, 0x8c, 0xe9, 0xc5, 0x32, 0x3f, 0xf5, 0x3f, 0x4b, 0x39, 0x2e, 0x12, 0x50, 0xd0, 0x37, 0xb3, 0x1e, 0x62, 0x81, 0xdc, 0xdf, 0xb9, 0x6b, 0xf4, 0xbf, 0xea, 0xa1, 0x47, 0xf0, 0x96, 0xc7, 0x84, 0xc9, 0x2f, 0x4a, 0xc5, 0x70, 0x91, 0x12, 0x28, 0x02, 0x50, 0x29, 0xc3, 0xb5, 0x23, 0x30, 0x3f, 0xe8, 0x22, 0x7e, 0x8b, 0x2c, 0xc0, 0xef, 0x15, 0x70, 0x14, 0xcb, 0x67, 0x31, 0xaa, 0xc0, 0x9b, 0xfe, 0x6f, 0xfa, 0x18, 0xea, 0xf6 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.10", - /* Message */ - 28, - { 0xf7, 0x84, 0x05, 0x23, 0x6a, 0x9e, 0xb5, 0x57, 0xaa, 0xce, 0xc6, 0x00, 0x7d, 0xbc, 0x4c, 0x0e, 0xde, 0x78, 0xed, 0x12, 0xb0, 0x4c, 0x82, 0x88, 0x8a, 0x82, 0xc2, 0x13 } -, - /* Seed */ - 97, - { 0x86, 0xf0, 0x72, 0x3b, 0x31, 0x68, 0xe2, 0xae, 0xac, 0xe9, 0xec, 0x2e, 0x95, 0xfd, 0xa6, 0xe6, 0xd6, 0xfc, 0x8d, 0x62, 0x94, 0x55, 0x65, 0x66, 0x39, 0x9d, 0x73, 0x11, 0xe7, 0x99, 0xfa, 0xa9, 0xb1, 0xee, 0x1f, 0x03, 0x2a, 0xb2, 0xe5, 0x34, 0xa9, 0x1f, 0xbc, 0xd0, 0x7c, 0x8a, 0x7d, 0x04, 0xa9, 0xb4, 0x85, 0xf3, 0x1e, 0x07, 0x23, 0xfd, 0x29, 0xeb, 0x21, 0x88, 0x06, 0x9d, 0x9b, 0xbd, 0x76, 0x29, 0xdc, 0x6e, 0x3f, 0xc8, 0x9b, 0xe6, 0x04, 0xbc, 0xf0, 0x0c, 0x52, 0xfa, 0x8e, 0x1d, 0x6c, 0x62, 0x55, 0x5f, 0xd1, 0xf6, 0x0c, 0xec, 0x02, 0xd4, 0xd9, 0x61, 0xd8, 0x28, 0xda, 0xbc, 0x4a } -, - /* Encryption */ - 128, - { 0x6e, 0x8d, 0x2f, 0xb0, 0xb2, 0xee, 0xf8, 0x2f, 0xc1, 0x10, 0xce, 0xe0, 0xa9, 0xd3, 0x84, 0x2f, 0x2a, 0x05, 0x8a, 0x24, 0x40, 0x7f, 0xa1, 0x1b, 0xa9, 0x05, 0xd1, 0xaa, 0x50, 0xe8, 0xcc, 0x12, 0xde, 0xcc, 0x07, 0x3d, 0xbd, 0x08, 0xa8, 0xc7, 0x05, 0x18, 0xef, 0x25, 0xdb, 0x96, 0xfd, 0xa2, 0x41, 0x1c, 0xca, 0x08, 0x72, 0x87, 0x88, 0x95, 0x6f, 0x73, 0xdf, 0xa1, 0x20, 0xe0, 0xea, 0x60, 0x5b, 0xff, 0xc9, 0x3b, 0x43, 0xa4, 0x41, 0xa4, 0x3d, 0x0e, 0xaa, 0x3f, 0xf0, 0x73, 0xe6, 0x98, 0x2e, 0xef, 0x52, 0x96, 0x39, 0x06, 0x07, 0xe2, 0x5a, 0x58, 0x8a, 0x39, 0x82, 0x55, 0xba, 0x00, 0x5a, 0x48, 0x5e, 0x6e, 0x73, 0x2e, 0x3a, 0x19, 0x20, 0xcd, 0x43, 0xa3, 0x90, 0xfb, 0x66, 0xd5, 0x42, 0x8d, 0xfd, 0x62, 0x89, 0x74, 0xb8, 0xaf, 0xf2, 0xf0, 0x60, 0x2d, 0xa5, 0x78, 0xd6, 0x25 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.11", - /* Message */ - 40, - { 0x56, 0x1d, 0x27, 0xc1, 0xd3, 0xf6, 0xd5, 0xd1, 0xa6, 0x43, 0xaa, 0x47, 0xe5, 0x5d, 0x78, 0xeb, 0x00, 0xf3, 0x2d, 0x42, 0x89, 0x6a, 0x34, 0xe0, 0xc1, 0xd7, 0x1b, 0xc3, 0xa5, 0x45, 0x7c, 0x92, 0x05, 0xbe, 0xd1, 0x3b, 0x98, 0x4c, 0x52, 0x59 } -, - /* Seed */ - 85, - { 0x98, 0x17, 0x6e, 0x1d, 0x67, 0xa2, 0x46, 0x2f, 0x5d, 0xc1, 0xbf, 0xa6, 0xe0, 0x75, 0x95, 0x42, 0x10, 0x4a, 0xc1, 0x48, 0x11, 0xd3, 0x18, 0x79, 0x38, 0x25, 0x04, 0x55, 0xc6, 0x5e, 0x4a, 0xaa, 0x76, 0x32, 0xbd, 0x2d, 0x1d, 0x75, 0x2e, 0x1f, 0x34, 0xc5, 0x3c, 0xab, 0x26, 0x76, 0x76, 0xa7, 0x8c, 0x10, 0xc9, 0x98, 0xe7, 0x73, 0xfd, 0x8f, 0xfe, 0x35, 0xc8, 0x67, 0xc4, 0x43, 0xbe, 0xf7, 0x98, 0x65, 0xaa, 0x2d, 0xa2, 0x91, 0x5a, 0x85, 0xc7, 0x02, 0x63, 0x23, 0x69, 0x3e, 0x45, 0x4d, 0x8a, 0xb3, 0x2a, 0x77, 0x15 } -, - /* Encryption */ - 128, - { 0x0b, 0xc0, 0x47, 0x83, 0xc6, 0x92, 0x44, 0x7a, 0x3d, 0xe6, 0x1f, 0x53, 0xb7, 0x2f, 0x7a, 0xa4, 0x10, 0x31, 0x6d, 0xd5, 0x09, 0xa6, 0xf4, 0x9e, 0x3a, 0xba, 0x56, 0xad, 0x1f, 0xf8, 0x6e, 0xbe, 0x9e, 0x63, 0x66, 0xe1, 0x7e, 0x51, 0x45, 0x00, 0x76, 0xbe, 0xa3, 0x71, 0xd4, 0xc6, 0x89, 0xcd, 0x61, 0x49, 0x5c, 0xd8, 0xfa, 0x29, 0xc0, 0xe8, 0x7b, 0x6d, 0xbf, 0xa8, 0xe3, 0x86, 0xc2, 0xe8, 0x20, 0xe4, 0xc7, 0x42, 0xa4, 0x87, 0xe8, 0x9b, 0x27, 0x5a, 0x21, 0x86, 0xe2, 0x38, 0x40, 0xbe, 0x9c, 0x02, 0x52, 0x7b, 0xa7, 0x17, 0xe9, 0xe6, 0x0b, 0x5b, 0xf4, 0x17, 0x71, 0x1d, 0xf3, 0x4d, 0x7b, 0x8e, 0x2d, 0x12, 0xbc, 0xeb, 0x85, 0x93, 0x85, 0xfa, 0x00, 0x1d, 0x4b, 0x4b, 0xff, 0xbb, 0xc0, 0xed, 0xef, 0xbd, 0x40, 0x02, 0x41, 0x84, 0x68, 0xc5, 0x66, 0xfd, 0xf6, 0xb8, 0x35, 0x09 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.12", - /* Message */ - 45, - { 0xeb, 0x5f, 0x8c, 0x0d, 0xc9, 0xd9, 0x01, 0x06, 0x1b, 0x82, 0xae, 0xff, 0x8d, 0x67, 0xd8, 0xbf, 0xfc, 0x0c, 0x04, 0x7e, 0xcc, 0x4a, 0xa3, 0x46, 0xb2, 0x3b, 0xdb, 0xa6, 0x2a, 0x87, 0xe9, 0xdc, 0x77, 0x0b, 0x11, 0x69, 0x5f, 0xbf, 0x19, 0x02, 0xf2, 0x4b, 0x66, 0xce, 0xab } -, - /* Seed */ - 80, - { 0x74, 0x82, 0x77, 0x0f, 0x3c, 0xf5, 0x7e, 0xdb, 0x81, 0x40, 0xeb, 0xc3, 0x3a, 0x02, 0x82, 0x45, 0xee, 0x06, 0x48, 0x52, 0x06, 0x89, 0xa5, 0x0e, 0x33, 0xf5, 0xf4, 0x67, 0xf6, 0xd1, 0xe4, 0x32, 0x4e, 0x1c, 0x50, 0xc8, 0x99, 0xe5, 0xad, 0x2c, 0x46, 0xc9, 0x7f, 0x81, 0x20, 0xd1, 0xc7, 0x22, 0x39, 0xd6, 0xa8, 0x2d, 0x8f, 0x8e, 0xbc, 0x80, 0xb9, 0x73, 0xee, 0xa8, 0xc5, 0x45, 0x69, 0x29, 0x50, 0x45, 0x14, 0xb4, 0xb1, 0x56, 0x62, 0x84, 0x4f, 0x29, 0x50, 0x62, 0xf2, 0x1e, 0xbd, 0x92 } -, - /* Encryption */ - 128, - { 0xb8, 0x40, 0x43, 0x54, 0xa3, 0x81, 0xb7, 0xc2, 0xab, 0xe5, 0xf7, 0x28, 0x25, 0xf3, 0xd3, 0x15, 0xbd, 0xac, 0xe6, 0xc3, 0xcf, 0xbd, 0x88, 0xb8, 0x97, 0x68, 0x61, 0x20, 0x05, 0x19, 0x7c, 0x61, 0x66, 0x38, 0x83, 0xf2, 0xc2, 0x57, 0x4f, 0x99, 0x5e, 0xa6, 0xf9, 0x4e, 0xb3, 0x4f, 0x27, 0x68, 0x62, 0xb3, 0x3f, 0x58, 0xa8, 0x83, 0x92, 0x23, 0x70, 0x6b, 0xe1, 0xc1, 0xff, 0x47, 0x23, 0x05, 0xf1, 0x1b, 0xa9, 0x56, 0x2a, 0x0e, 0xb0, 0x12, 0xf1, 0xaa, 0xf8, 0x5c, 0x22, 0xe8, 0x8f, 0x2f, 0xdf, 0xea, 0xff, 0x86, 0x33, 0xd3, 0xcf, 0xeb, 0x5f, 0x76, 0x4f, 0x42, 0x28, 0x92, 0x0d, 0xe3, 0x0c, 0x6b, 0xde, 0x2c, 0xb4, 0xe8, 0xf0, 0x3d, 0x90, 0xed, 0x54, 0x8f, 0x64, 0x85, 0x00, 0x35, 0x1a, 0x5f, 0x41, 0xdf, 0x74, 0xad, 0x65, 0xe8, 0xc3, 0xbe, 0xe9, 0x50, 0x5a, 0x7d, 0x70, 0xe1 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.13", - /* Message */ - 48, - { 0x5a, 0x7f, 0x0e, 0xae, 0xba, 0xe4, 0x9c, 0xf5, 0x7c, 0x47, 0x5a, 0x6d, 0xa6, 0x79, 0x43, 0xa7, 0xd3, 0x04, 0x6e, 0x3f, 0x7c, 0x7d, 0x50, 0xb0, 0x9a, 0x80, 0x98, 0xb5, 0x44, 0x69, 0x39, 0x68, 0x93, 0xcf, 0xc0, 0xb2, 0xf0, 0x8f, 0x6c, 0x2b, 0xff, 0x23, 0x50, 0x51, 0x57, 0x5e, 0x6e, 0x56 } -, - /* Seed */ - 77, - { 0xfb, 0x08, 0x48, 0x86, 0xdb, 0x37, 0x98, 0xd2, 0xb5, 0xbb, 0x35, 0xa3, 0xb1, 0xd3, 0xaf, 0x4f, 0xdf, 0xc0, 0x45, 0x6c, 0xbc, 0x79, 0x7b, 0x96, 0x40, 0xd8, 0xc4, 0x4a, 0x0e, 0x03, 0x4e, 0x40, 0x37, 0x2b, 0x34, 0xfc, 0x7c, 0x1e, 0x8b, 0x66, 0x01, 0x1b, 0x4e, 0xcd, 0xfa, 0xec, 0x6e, 0xe4, 0xcd, 0xc8, 0x28, 0xcb, 0x1a, 0xb4, 0x91, 0x27, 0x4a, 0xc1, 0xe3, 0x9f, 0x67, 0x58, 0x7a, 0x55, 0x47, 0x67, 0x09, 0xb4, 0x02, 0x3f, 0xc5, 0x69, 0xcb, 0xe8, 0xb4, 0xfd, 0x4b } -, - /* Encryption */ - 128, - { 0x07, 0x78, 0x4e, 0xcb, 0x8c, 0xc5, 0xba, 0x02, 0xd2, 0x07, 0xba, 0xb0, 0x55, 0xc0, 0xe5, 0x5d, 0x10, 0xa9, 0xb9, 0x42, 0x70, 0xcc, 0xa2, 0x50, 0xee, 0x75, 0xfa, 0x1b, 0x5a, 0xe1, 0x90, 0xb3, 0x3b, 0x96, 0x96, 0xeb, 0x2e, 0xc9, 0x72, 0xb2, 0x6a, 0x0e, 0x94, 0x23, 0xaf, 0x16, 0xaa, 0x37, 0x89, 0x17, 0x62, 0x76, 0x06, 0x0a, 0x76, 0x40, 0x03, 0x21, 0x11, 0x74, 0x82, 0x96, 0x34, 0x03, 0x4f, 0x97, 0x12, 0xc9, 0x17, 0x10, 0x17, 0xf2, 0xfb, 0x21, 0x3f, 0x25, 0xc1, 0x46, 0xc2, 0x65, 0x1f, 0x89, 0x44, 0x0c, 0xa5, 0x36, 0xe5, 0x33, 0xe3, 0x05, 0xcc, 0x6b, 0x01, 0x13, 0x39, 0x8f, 0x61, 0xb4, 0x63, 0xb0, 0x73, 0xe1, 0xbe, 0x05, 0x07, 0x3e, 0x9d, 0x64, 0xbc, 0xae, 0xea, 0x54, 0x44, 0xb8, 0x20, 0xc6, 0xab, 0xf3, 0x46, 0x54, 0x30, 0xff, 0x4d, 0xe4, 0xa8, 0xbc, 0x0e, 0x75 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.14", - /* Message */ - 47, - { 0xf9, 0x1c, 0x71, 0xaf, 0x5a, 0xea, 0xca, 0xe1, 0x79, 0xe1, 0x6e, 0x87, 0xc9, 0x02, 0x3b, 0xa9, 0x4d, 0x84, 0xd7, 0x51, 0x6c, 0xec, 0x6c, 0x39, 0x89, 0x80, 0x1f, 0xb3, 0xe7, 0xad, 0xd0, 0x64, 0xbd, 0xdf, 0x92, 0x8b, 0x50, 0x00, 0x94, 0x0b, 0xbd, 0xe5, 0x39, 0xd6, 0x23, 0x37, 0x9c } -, - /* Seed */ - 78, - { 0xde, 0xb2, 0x60, 0x25, 0x8b, 0xe2, 0xc8, 0x53, 0x35, 0x21, 0x57, 0xb0, 0x65, 0x26, 0xb1, 0x43, 0xba, 0x13, 0x3c, 0x4f, 0x49, 0xbf, 0x3d, 0xf2, 0xc0, 0x50, 0xec, 0xb2, 0xc9, 0xca, 0x32, 0x53, 0x11, 0xb3, 0xc3, 0xe3, 0xd8, 0x8d, 0xf6, 0xc2, 0x4a, 0x89, 0x4e, 0xab, 0x63, 0x74, 0x5b, 0x62, 0x53, 0xe3, 0xc4, 0x6b, 0xca, 0x17, 0x1a, 0x26, 0xa4, 0xf2, 0xfc, 0x0a, 0xb6, 0x2b, 0x8a, 0x2e, 0x63, 0xa0, 0x18, 0xeb, 0x47, 0x01, 0x8c, 0xab, 0x95, 0x1f, 0x59, 0xf0, 0x20, 0x3a } -, - /* Encryption */ - 128, - { 0x0d, 0xff, 0xff, 0x51, 0x97, 0x10, 0xc9, 0xea, 0xdc, 0x53, 0x3b, 0x10, 0x8a, 0x4c, 0x29, 0x74, 0xfe, 0x53, 0x18, 0x91, 0xa3, 0x41, 0x07, 0xa6, 0x74, 0x27, 0x93, 0x5b, 0xa7, 0x20, 0xcd, 0xc6, 0xf6, 0xee, 0x02, 0x9a, 0x1b, 0x03, 0x68, 0x61, 0xdb, 0x14, 0x04, 0xc5, 0x86, 0x49, 0x90, 0x54, 0x1f, 0xa2, 0x42, 0x13, 0x01, 0xa7, 0xb2, 0x48, 0xcb, 0x11, 0xf3, 0x65, 0xb6, 0xa4, 0xaa, 0x94, 0x6f, 0x22, 0x31, 0xcb, 0xb1, 0x47, 0x32, 0xb0, 0x1a, 0xa4, 0xa6, 0x0b, 0xcb, 0xe5, 0x20, 0xec, 0x6c, 0x38, 0x53, 0xa6, 0x95, 0x8a, 0x93, 0xc5, 0xb6, 0x8b, 0x85, 0xd4, 0xbc, 0x3d, 0x84, 0x15, 0xef, 0x8b, 0x1d, 0x4f, 0x63, 0x03, 0x8f, 0x4d, 0x94, 0x2c, 0xa6, 0xbc, 0x7a, 0x38, 0x25, 0x1f, 0x15, 0xa4, 0xe3, 0x3b, 0x18, 0x9c, 0x25, 0x0b, 0xcf, 0xbc, 0x03, 0x15, 0x6e, 0x4f, 0x92, 0x11 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.15", - /* Message */ - 28, - { 0x07, 0x90, 0xc0, 0x81, 0xf3, 0x61, 0xc9, 0x5b, 0x59, 0xd5, 0x27, 0xd3, 0xcb, 0x50, 0x71, 0x0e, 0x66, 0xe2, 0x72, 0x59, 0x50, 0x10, 0x25, 0xed, 0x3f, 0x20, 0xf3, 0x0c } -, - /* Seed */ - 97, - { 0xfc, 0xfc, 0x2d, 0x56, 0xcb, 0x92, 0x6d, 0x90, 0x5d, 0xb3, 0x6e, 0x1e, 0x2e, 0xff, 0x1f, 0xbb, 0x75, 0xd6, 0x53, 0x51, 0x7f, 0x59, 0xe8, 0x6f, 0x71, 0xbc, 0x4b, 0xc5, 0x57, 0x26, 0xf0, 0x88, 0xb8, 0x21, 0x62, 0x44, 0x83, 0xb3, 0xe2, 0x9a, 0xc2, 0x1a, 0x49, 0xbd, 0x85, 0x91, 0x34, 0x90, 0x8e, 0x6c, 0x0e, 0xc1, 0xa0, 0xdc, 0x80, 0x79, 0x93, 0x01, 0x44, 0x12, 0x0d, 0x1f, 0x6b, 0xf9, 0x3b, 0xc6, 0x27, 0xb9, 0x99, 0x69, 0xb2, 0xaf, 0xe2, 0x1a, 0x7d, 0xe1, 0x0d, 0x96, 0xf6, 0xef, 0x43, 0xc5, 0x67, 0xb5, 0xe2, 0x38, 0x38, 0x5c, 0xc1, 0x1a, 0x5a, 0x2a, 0x13, 0xe1, 0x78, 0x55, 0x8b } -, - /* Encryption */ - 128, - { 0x7f, 0x0e, 0x6b, 0x34, 0x2d, 0x6a, 0x13, 0x54, 0x66, 0xbe, 0x41, 0x73, 0x38, 0x1a, 0xc0, 0x4a, 0xba, 0xab, 0x7e, 0x14, 0xfd, 0xcf, 0x51, 0x01, 0x89, 0x87, 0xe9, 0x69, 0x67, 0x16, 0x9a, 0xea, 0x97, 0x78, 0x03, 0xeb, 0xb3, 0x24, 0x2a, 0xe9, 0xad, 0xb4, 0x6f, 0xf5, 0x11, 0x20, 0x93, 0x4b, 0x39, 0x21, 0x46, 0x31, 0xb0, 0x3f, 0x5a, 0xf5, 0xbd, 0xea, 0x1c, 0xac, 0xd3, 0x28, 0xad, 0xdc, 0xd4, 0x0a, 0x3a, 0x29, 0x96, 0x6b, 0xf9, 0x8b, 0xd7, 0xc8, 0xc6, 0xfd, 0x0f, 0x4e, 0x8b, 0x97, 0x2e, 0x2d, 0xa1, 0x0c, 0x6c, 0xc5, 0x52, 0x05, 0x86, 0x7f, 0x39, 0x04, 0xed, 0x60, 0xf5, 0xb5, 0xbe, 0xdf, 0x7c, 0x3b, 0x3c, 0x7d, 0xd5, 0xf3, 0x87, 0x54, 0x8f, 0x40, 0x05, 0x67, 0x02, 0xea, 0x72, 0x01, 0x76, 0xdc, 0xe2, 0x06, 0xd4, 0x13, 0xd7, 0x42, 0x3f, 0x94, 0x3f, 0xcd, 0xf6, 0x39 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.16", - /* Message */ - 64, - { 0x93, 0xc4, 0x1a, 0x1a, 0xdd, 0xa8, 0xf6, 0x93, 0x60, 0xf4, 0x1a, 0x58, 0xec, 0xa0, 0xb5, 0x5e, 0xcb, 0x37, 0xa6, 0xa9, 0x00, 0xfb, 0xc7, 0xda, 0xcd, 0x9c, 0xa3, 0x99, 0xc2, 0x3d, 0x31, 0x72, 0x61, 0x53, 0x77, 0xac, 0x0c, 0xc6, 0xb0, 0xed, 0x43, 0xbf, 0x59, 0x7f, 0x21, 0xcd, 0x25, 0x9d, 0x8f, 0x80, 0x88, 0x7b, 0x15, 0x9d, 0x96, 0xd6, 0x61, 0x61, 0xd5, 0x58, 0x9b, 0x95, 0xf1, 0xfe } -, - /* Seed */ - 61, - { 0x99, 0x1a, 0x2a, 0x7c, 0x06, 0x1c, 0x23, 0xa8, 0xeb, 0xc9, 0x48, 0x9a, 0xbc, 0x1b, 0x4a, 0x64, 0xa5, 0xd4, 0xe8, 0x38, 0xd9, 0xfc, 0xba, 0x42, 0x88, 0xc0, 0x1f, 0xea, 0xd6, 0x6d, 0x59, 0xf4, 0x96, 0x36, 0xe4, 0xa8, 0xd7, 0x52, 0x4c, 0xb8, 0x9d, 0x7a, 0xdc, 0x7a, 0xf3, 0xf6, 0x1a, 0xe6, 0xb3, 0x9b, 0x58, 0x8f, 0xb7, 0x7e, 0xb7, 0x02, 0x23, 0x62, 0xff, 0xd2, 0x6b } -, - /* Encryption */ - 128, - { 0x7e, 0x54, 0xa4, 0x32, 0xf5, 0x25, 0xc5, 0x23, 0x33, 0xab, 0xe3, 0xbb, 0x45, 0x48, 0x7e, 0x03, 0x9a, 0xf9, 0x4d, 0xd3, 0xef, 0xc3, 0x58, 0x44, 0xdd, 0x8e, 0x83, 0x5e, 0xe1, 0x00, 0x61, 0x78, 0xe2, 0x4d, 0xcd, 0x19, 0xfc, 0x07, 0x66, 0x7b, 0x4a, 0x34, 0xf3, 0xbd, 0x77, 0x1d, 0x09, 0xa7, 0xe2, 0x9f, 0x8c, 0xa1, 0x7e, 0x88, 0xd0, 0x29, 0xb9, 0x0d, 0xdb, 0x5f, 0x28, 0x13, 0xbe, 0x99, 0x00, 0x0d, 0x59, 0xf5, 0x43, 0x2c, 0x46, 0x6a, 0x84, 0x28, 0x75, 0x77, 0x20, 0x4b, 0xf7, 0x65, 0x97, 0x39, 0x27, 0x69, 0x98, 0x30, 0x57, 0x47, 0x66, 0x7f, 0xaf, 0xd8, 0x02, 0x9c, 0xdc, 0xbb, 0x59, 0x18, 0x39, 0x3c, 0x2c, 0xfc, 0xe4, 0xd8, 0x4a, 0x92, 0x20, 0xea, 0x3e, 0x38, 0x19, 0x72, 0x53, 0x36, 0xf2, 0x5f, 0xee, 0x8e, 0x08, 0x5d, 0xeb, 0xed, 0x33, 0x32, 0xd5, 0xdd, 0xf1, 0xee } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.17", - /* Message */ - 60, - { 0x9e, 0x2a, 0x7b, 0x37, 0x74, 0xb1, 0x1e, 0x62, 0xb6, 0x49, 0x0b, 0x56, 0x51, 0xa0, 0xc1, 0x8e, 0x09, 0x2e, 0x9f, 0xab, 0x8b, 0x22, 0x84, 0xae, 0x46, 0x43, 0xbe, 0xc3, 0x6b, 0x26, 0x5e, 0x5b, 0xa3, 0xc5, 0x1a, 0xc3, 0x85, 0xb2, 0xc7, 0x3d, 0x22, 0x0b, 0x2d, 0xc2, 0xe1, 0x0b, 0x0d, 0x69, 0x0f, 0x67, 0x94, 0x5a, 0x0c, 0x42, 0xb3, 0xbd, 0x09, 0xd0, 0xa8, 0xa7 } -, - /* Seed */ - 65, - { 0xa1, 0x8b, 0xfb, 0x74, 0xf6, 0xde, 0xbc, 0xed, 0xcf, 0xb4, 0x7c, 0x7d, 0x5d, 0xbf, 0x10, 0x6e, 0x77, 0x4d, 0x7e, 0xf6, 0x63, 0x8e, 0xc3, 0x82, 0x18, 0x69, 0xcd, 0x2e, 0xd6, 0x2d, 0xd5, 0x32, 0x5f, 0x4e, 0x57, 0x33, 0xb8, 0xbf, 0xd5, 0xfa, 0xfc, 0x43, 0xe4, 0x16, 0x4e, 0x78, 0xd4, 0x38, 0x99, 0x4d, 0x85, 0x33, 0x7d, 0x7f, 0x0d, 0x38, 0xf0, 0xea, 0x3b, 0xa3, 0x7f, 0x4f, 0x41, 0xb6, 0xa7 } -, - /* Encryption */ - 128, - { 0x18, 0xc8, 0x8a, 0xee, 0x25, 0x36, 0xd9, 0x42, 0xf7, 0x62, 0x2a, 0x64, 0x4f, 0xad, 0x6f, 0xec, 0xd3, 0x32, 0x28, 0xc7, 0xae, 0xa0, 0xca, 0xda, 0x0e, 0x53, 0x1f, 0x4c, 0xcb, 0xf1, 0xc1, 0xf2, 0x69, 0xcc, 0x95, 0x86, 0x29, 0xa4, 0x3b, 0x97, 0x52, 0xfc, 0xaf, 0x2b, 0xf9, 0x53, 0xec, 0x9f, 0x7e, 0xf4, 0xbb, 0x0e, 0x62, 0xd1, 0x28, 0xe0, 0xcf, 0x4b, 0xab, 0xe9, 0x2c, 0x6d, 0x92, 0x84, 0x9e, 0x98, 0x38, 0xdd, 0x88, 0xe2, 0xb4, 0x68, 0xbd, 0xce, 0xfc, 0x04, 0xa9, 0xe4, 0xcb, 0x55, 0xe2, 0xa5, 0x18, 0xca, 0x25, 0x9f, 0x9e, 0x81, 0xa4, 0x9f, 0x28, 0xdf, 0x34, 0x76, 0x1f, 0x9d, 0xea, 0x2e, 0x70, 0x59, 0x56, 0x62, 0x62, 0x6c, 0xf9, 0x6a, 0xc0, 0x5a, 0x7c, 0x8b, 0x10, 0x33, 0x33, 0xe9, 0x06, 0xe1, 0x32, 0x63, 0x9b, 0x65, 0xa7, 0x66, 0xf4, 0x09, 0x2c, 0x8c, 0xa0, 0x78 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.18", - /* Message */ - 61, - { 0x0a, 0xc5, 0x2d, 0x40, 0x01, 0xf2, 0x5c, 0x2c, 0x9d, 0xb9, 0x1c, 0xe5, 0x0b, 0xdd, 0xf0, 0xd5, 0x91, 0x9e, 0x19, 0x96, 0x2e, 0x83, 0xb0, 0x7c, 0xb7, 0x9a, 0xdb, 0x00, 0x43, 0x6e, 0x13, 0x66, 0xb0, 0xaa, 0x8f, 0x3f, 0xd1, 0xee, 0x79, 0x6b, 0x23, 0xc8, 0xbc, 0x56, 0x0c, 0xcf, 0xa4, 0xbc, 0xbd, 0xb1, 0xf8, 0x40, 0x4d, 0xd6, 0xf7, 0x55, 0x15, 0x20, 0xd7, 0xd9, 0xe2 } -, - /* Seed */ - 64, - { 0x22, 0xff, 0xdc, 0xfe, 0xc6, 0xf0, 0x6b, 0x1b, 0xbd, 0x14, 0x53, 0x97, 0x70, 0x43, 0xa3, 0x4e, 0xdd, 0xf8, 0x59, 0x4d, 0xa0, 0x22, 0x13, 0x09, 0x14, 0x97, 0x55, 0x42, 0xf2, 0xf0, 0x0e, 0x98, 0xf3, 0x1e, 0x0d, 0xd0, 0xc4, 0x8f, 0x7e, 0xe5, 0xf0, 0x9d, 0x6a, 0x52, 0x71, 0x21, 0xad, 0x23, 0x37, 0x1c, 0x6c, 0xd0, 0xe0, 0x79, 0x0e, 0xb7, 0x30, 0x8b, 0xbb, 0x08, 0x96, 0xdd, 0x59, 0x0d } -, - /* Encryption */ - 128, - { 0xb2, 0x69, 0x57, 0xc5, 0x62, 0x29, 0x4d, 0xe1, 0xf3, 0x93, 0x24, 0xb1, 0xcd, 0x80, 0x3c, 0xfc, 0x39, 0xfc, 0xee, 0x2d, 0x3c, 0x9d, 0x13, 0x79, 0xf8, 0xa1, 0x12, 0x07, 0x9d, 0x69, 0x43, 0x68, 0xf5, 0x55, 0x03, 0xc2, 0x09, 0x4d, 0x98, 0x8a, 0x8a, 0x5b, 0x5a, 0xc5, 0x49, 0xbe, 0x1c, 0xf5, 0x53, 0x16, 0x04, 0x5d, 0xf5, 0xb6, 0xf6, 0x33, 0xa4, 0xef, 0x1e, 0x1f, 0x01, 0x9b, 0xa1, 0xb5, 0x42, 0xbf, 0x0a, 0x87, 0xfa, 0x3e, 0x5c, 0xa3, 0xf6, 0xb6, 0x1c, 0xc8, 0x56, 0x61, 0x28, 0xa0, 0xfa, 0x41, 0x8b, 0x08, 0x25, 0xc9, 0x0e, 0xc2, 0xf1, 0xec, 0x74, 0xe5, 0x87, 0xcd, 0x80, 0x57, 0xd9, 0x52, 0x96, 0x7a, 0xc4, 0x52, 0x1c, 0xcd, 0xbf, 0x63, 0x26, 0xf3, 0x50, 0x93, 0x00, 0x93, 0x82, 0x6d, 0x2e, 0xfa, 0x05, 0x8e, 0xd6, 0x44, 0x15, 0x37, 0x4d, 0xb3, 0x20, 0x48, 0x85, 0xca } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.19", - /* Message */ - 13, - { 0xa8, 0x00, 0x34, 0x62, 0xf8, 0x06, 0xb7, 0xf6, 0x61, 0xfb, 0x66, 0x46, 0x32 } -, - /* Seed */ - 112, - { 0xc7, 0x43, 0xf4, 0xa6, 0xda, 0x03, 0xab, 0x2d, 0xe5, 0xa7, 0x31, 0xcb, 0x88, 0xd8, 0xca, 0x9b, 0x61, 0xc7, 0x31, 0x9a, 0x5f, 0x8b, 0xf9, 0xd2, 0x37, 0x87, 0x7a, 0x05, 0xd0, 0xf3, 0x68, 0xc3, 0x60, 0x8a, 0x05, 0x2a, 0xc6, 0xce, 0x13, 0x73, 0x17, 0x95, 0x47, 0x55, 0x42, 0xea, 0x16, 0xa8, 0x62, 0x91, 0x3d, 0x04, 0x32, 0xf0, 0x8b, 0xd8, 0xc8, 0xb6, 0xff, 0x81, 0x95, 0x69, 0x1f, 0xee, 0x5e, 0xd1, 0x42, 0xfb, 0x9e, 0xca, 0x94, 0x67, 0x52, 0x4b, 0xd3, 0xb5, 0xfa, 0x5a, 0x4a, 0xc6, 0x14, 0x3b, 0x0d, 0x38, 0x25, 0x0a, 0xe6, 0x21, 0xd4, 0x39, 0x90, 0x9c, 0xbe, 0x3a, 0x6b, 0x5c, 0x01, 0xfb, 0xea, 0x2d, 0x7a, 0x3f, 0x1a, 0xe4, 0x1d, 0x61, 0xfd, 0xd6, 0x47, 0x64, 0x14, 0x9f } -, - /* Encryption */ - 128, - { 0xb7, 0x38, 0xe1, 0xc4, 0x29, 0xf8, 0xfc, 0x06, 0x82, 0xfa, 0xad, 0xc8, 0xca, 0x87, 0xed, 0x8f, 0x16, 0xdf, 0x93, 0x0f, 0xaf, 0x43, 0xb1, 0x99, 0x1a, 0xac, 0x71, 0xd8, 0x8f, 0x26, 0x4c, 0x0d, 0x82, 0x9a, 0xc0, 0x3d, 0x23, 0xc2, 0x5f, 0xc5, 0xf3, 0xe8, 0x5d, 0xd3, 0x02, 0xcb, 0x7b, 0x15, 0x33, 0xe6, 0x8c, 0x24, 0x16, 0xc5, 0x1a, 0x79, 0xbb, 0xcc, 0x7c, 0x29, 0xb0, 0x7e, 0x2e, 0x0e, 0x23, 0xc6, 0xf2, 0xdf, 0x0d, 0x07, 0x81, 0x91, 0x7e, 0xba, 0x1a, 0x57, 0x08, 0x62, 0x8e, 0xed, 0x8a, 0x15, 0xb3, 0xb1, 0x84, 0xaf, 0x70, 0x0d, 0x0d, 0xab, 0xb1, 0x4d, 0xf6, 0x0b, 0x09, 0xba, 0xd2, 0x12, 0x7d, 0xf1, 0x80, 0xf4, 0xd6, 0xf7, 0x29, 0x65, 0x87, 0x60, 0xd6, 0x33, 0xc7, 0x77, 0x5a, 0x7b, 0x59, 0x6d, 0x09, 0xd9, 0x03, 0x49, 0x1f, 0x21, 0x09, 0x6c, 0x34, 0xc3, 0x95, 0x3b } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 3.20", - /* Message */ - 2, - { 0xef, 0x32 } -, - /* Seed */ - 123, - { 0x43, 0x99, 0xcb, 0x04, 0x4a, 0x60, 0x07, 0x6d, 0x18, 0xcc, 0xb3, 0x4e, 0x8b, 0x07, 0x8c, 0x81, 0x8e, 0xa7, 0x7f, 0x63, 0xb0, 0xa4, 0x3a, 0xbd, 0xec, 0xc5, 0x77, 0x81, 0x93, 0xa8, 0xbb, 0xba, 0x5d, 0x56, 0xd0, 0xfc, 0x4e, 0x82, 0xa2, 0x11, 0x51, 0x6b, 0xbd, 0xef, 0x44, 0xe7, 0xf4, 0xe7, 0xfe, 0xbb, 0xe1, 0xe1, 0x92, 0x3c, 0x99, 0x9a, 0x7e, 0x96, 0x1c, 0xd6, 0xee, 0x1c, 0x41, 0x6a, 0x85, 0x96, 0xe2, 0x4b, 0x63, 0x83, 0xa4, 0x69, 0x93, 0x5f, 0x33, 0xd1, 0x56, 0xfd, 0x5b, 0xcf, 0xdb, 0xd4, 0x27, 0x46, 0x0d, 0x48, 0x66, 0x83, 0x06, 0x1e, 0x41, 0x05, 0xf3, 0x5b, 0x5e, 0x75, 0x23, 0x20, 0x15, 0x5c, 0x7f, 0x69, 0xad, 0x8e, 0xb4, 0x02, 0xcc, 0x11, 0x06, 0xe0, 0x28, 0x9a, 0x9b, 0x49, 0x65, 0x82, 0x3e, 0x7a, 0x51, 0xcf, 0xe4, 0xd2, 0x6d } -, - /* Encryption */ - 128, - { 0x13, 0x1b, 0x62, 0x5e, 0x86, 0xe6, 0xcd, 0x1e, 0x08, 0xac, 0xf1, 0x95, 0xd9, 0x3c, 0xd3, 0xa0, 0xdc, 0x8b, 0xa9, 0xe2, 0xdc, 0xd6, 0xfc, 0x99, 0x6b, 0xe2, 0x17, 0x24, 0xaf, 0x17, 0x90, 0xb6, 0x88, 0xd7, 0x9d, 0x3e, 0xa9, 0xa9, 0x50, 0x98, 0xca, 0xbb, 0xe8, 0xa5, 0xd4, 0x85, 0x92, 0xe4, 0x74, 0x6b, 0x0e, 0xd2, 0xaf, 0x7c, 0xaf, 0x89, 0xb7, 0xb6, 0x15, 0x2e, 0x38, 0x24, 0xd9, 0x15, 0x89, 0xee, 0xec, 0x33, 0x75, 0xc7, 0x1a, 0x89, 0x97, 0x48, 0x70, 0x3a, 0xcc, 0x1e, 0x8d, 0x1d, 0xe4, 0x71, 0xea, 0x75, 0x28, 0x04, 0x0b, 0x79, 0x5f, 0x29, 0x9e, 0x66, 0x8c, 0xec, 0x9f, 0x5a, 0xf3, 0xeb, 0x48, 0xf9, 0x8c, 0x0d, 0x85, 0x20, 0x67, 0x77, 0x3e, 0x10, 0x1f, 0xa2, 0x4a, 0xeb, 0x6b, 0x40, 0x4d, 0xaf, 0xb4, 0x2e, 0x7a, 0x63, 0xb0, 0x4a, 0x66, 0xbd, 0x0e, 0x9f, 0x9c, 0x94 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 4: A 1024-bit RSA key pair", -{ - /* Modulus */ - 128, - { 0xe9, 0xf2, 0x5e, 0x48, 0x14, 0x0b, 0x5d, 0xcf, 0x46, 0x99, 0xe3, 0x03, 0x7f, 0xa8, 0x34, 0xf0, 0xc7, 0x8b, 0x16, 0x73, 0x5f, 0xf7, 0x9f, 0x6b, 0x18, 0xae, 0x60, 0xb5, 0x18, 0x48, 0xd3, 0x06, 0x99, 0xec, 0x64, 0x6d, 0x85, 0x7f, 0x15, 0x77, 0x0e, 0x2c, 0x7a, 0x0c, 0x0c, 0x90, 0x0f, 0xb6, 0x04, 0x0b, 0x5f, 0x34, 0x48, 0x4e, 0x9c, 0xf5, 0xce, 0xda, 0x23, 0xd5, 0xb2, 0x50, 0xef, 0x93, 0x28, 0x6f, 0x01, 0x1e, 0x9a, 0x5b, 0xf9, 0xe5, 0x42, 0xe5, 0xc9, 0xf4, 0x42, 0xde, 0x54, 0x58, 0xe2, 0x3e, 0x41, 0xd1, 0xd9, 0xcd, 0x9f, 0x0c, 0xe1, 0xcf, 0x20, 0x08, 0xd3, 0xea, 0x4d, 0x80, 0x32, 0xe8, 0x54, 0xcf, 0xfc, 0xdf, 0x5f, 0x69, 0x8d, 0x13, 0x16, 0xe0, 0x29, 0xc4, 0x88, 0xfc, 0xbb, 0x2b, 0xe2, 0x9a, 0x4e, 0x7b, 0xfb, 0x8e, 0x6e, 0x81, 0xd3, 0x42, 0x12, 0x3e, 0xe7, 0x5b } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x45, 0x45, 0x88, 0x68, 0x44, 0x53, 0x27, 0x48, 0x60, 0x49, 0xe1, 0xbf, 0xdf, 0xf5, 0x61, 0x13, 0xa8, 0xaa, 0x45, 0x10, 0x0d, 0xab, 0x07, 0x4f, 0xd1, 0x63, 0x94, 0xec, 0x1a, 0x90, 0x39, 0xb8, 0x1b, 0x2c, 0xb5, 0x81, 0xfe, 0x84, 0xe6, 0x48, 0xb5, 0xf0, 0x32, 0x85, 0x4d, 0xd4, 0xfc, 0x69, 0xf3, 0x61, 0xa0, 0xa3, 0x9d, 0x03, 0x76, 0x13, 0x8c, 0xd7, 0xe7, 0xc3, 0x77, 0x84, 0xe2, 0xa2, 0xf9, 0xd4, 0xf2, 0x66, 0x84, 0xcc, 0x5c, 0xc9, 0xf5, 0x12, 0xba, 0x62, 0x15, 0xeb, 0xd2, 0x32, 0xf9, 0xaa, 0x3d, 0xa4, 0x69, 0xdb, 0x43, 0xda, 0x1c, 0x06, 0x46, 0xe7, 0x5b, 0x33, 0xaa, 0xc5, 0x70, 0x08, 0x1b, 0x5b, 0x2e, 0x96, 0xea, 0xb7, 0x54, 0x6a, 0xcf, 0x93, 0x17, 0x85, 0xaa, 0x2f, 0xd1, 0x82, 0x4c, 0xbe, 0x2c, 0x5f, 0x9b, 0xf5, 0x63, 0x34, 0xec, 0x15, 0x66, 0xd1, 0xcf, 0x45 } -, - /* Prime 1 */ - 64, - { 0xfc, 0xdf, 0x1c, 0x49, 0x35, 0x8a, 0x1a, 0xac, 0x93, 0x88, 0xc4, 0x6c, 0xaa, 0x04, 0x72, 0xfa, 0x35, 0xb2, 0x1b, 0xdf, 0x99, 0xa2, 0x7b, 0xc2, 0xac, 0x65, 0x46, 0x7b, 0x88, 0xd0, 0x16, 0x1f, 0xbc, 0x70, 0xf3, 0xf4, 0xfa, 0x13, 0xa5, 0xf3, 0xa9, 0x8b, 0x59, 0xc0, 0x67, 0xea, 0xbf, 0x19, 0x62, 0x16, 0xa1, 0xb8, 0x9e, 0x20, 0xaf, 0xb2, 0xe5, 0xe5, 0xed, 0xde, 0xae, 0x8e, 0xe1, 0xef } -, - /* Prime 2 */ - 64, - { 0xec, 0xd7, 0x51, 0xd3, 0xd3, 0xf3, 0xb2, 0x08, 0xbd, 0x71, 0x8a, 0xe4, 0x35, 0x5d, 0x23, 0xf9, 0x16, 0xfa, 0x8f, 0xf6, 0x7d, 0xf0, 0x36, 0x61, 0x6b, 0xfd, 0xa7, 0xcb, 0xc8, 0x7a, 0xeb, 0xef, 0xaa, 0x7e, 0xda, 0x69, 0x1f, 0xb9, 0x8f, 0xbb, 0x03, 0x8a, 0x02, 0x07, 0x22, 0x01, 0x3c, 0xa8, 0xee, 0x3d, 0x04, 0x8f, 0x97, 0xba, 0xd2, 0xa2, 0x93, 0x0b, 0xe4, 0xb9, 0x6f, 0xb7, 0x4d, 0x55 } -, - /* Prime exponent 1 */ - 64, - { 0x1d, 0x2f, 0x73, 0x08, 0x50, 0x11, 0x9c, 0x7a, 0x86, 0x9c, 0xa6, 0x6f, 0x14, 0x40, 0x67, 0x34, 0xd1, 0xb5, 0xb8, 0xd9, 0xd9, 0xd5, 0x93, 0x0b, 0x28, 0xf2, 0x97, 0x6b, 0xf2, 0xa2, 0x71, 0xab, 0x40, 0x08, 0x99, 0x5f, 0x90, 0xed, 0x6b, 0x9d, 0xef, 0xd7, 0x91, 0x88, 0x4f, 0x76, 0x1c, 0x90, 0x45, 0x6d, 0xef, 0x44, 0x6b, 0x9b, 0xc2, 0x2b, 0x97, 0xb5, 0x2d, 0xfb, 0x21, 0x92, 0x84, 0x29 } -, - /* Prime exponent 2 */ - 64, - { 0x4d, 0x50, 0x95, 0x03, 0xc3, 0x83, 0x20, 0x31, 0x3e, 0x36, 0x9c, 0x92, 0x96, 0xe1, 0x0a, 0xe7, 0x3b, 0x9b, 0x1b, 0xf7, 0xe9, 0x70, 0xcb, 0x2f, 0xce, 0x63, 0x05, 0xad, 0xbe, 0x8a, 0x72, 0x0e, 0xd0, 0xe7, 0x8c, 0x41, 0x18, 0xfc, 0x28, 0x71, 0x72, 0x5c, 0x51, 0x01, 0x27, 0x16, 0xa4, 0x48, 0xb9, 0x4c, 0xed, 0xfa, 0x3a, 0x1b, 0xe0, 0xba, 0xf5, 0xa9, 0xc2, 0x46, 0xce, 0xb3, 0x55, 0xe9 } -, - /* Coefficient */ - 64, - { 0xbc, 0x15, 0xf4, 0x7c, 0x0b, 0xb6, 0xde, 0x6a, 0x7a, 0x3a, 0x1f, 0xe9, 0x28, 0x89, 0x80, 0x9b, 0x4a, 0x3c, 0x0c, 0xfa, 0x65, 0x0c, 0x2f, 0xec, 0x36, 0xb8, 0x92, 0x85, 0x14, 0x65, 0x47, 0xa5, 0x7d, 0x2b, 0x15, 0x71, 0xac, 0xb9, 0xd3, 0x0a, 0xa7, 0x91, 0xec, 0x97, 0xfd, 0x51, 0xfd, 0xe1, 0xec, 0x26, 0xf5, 0x6b, 0x32, 0x63, 0xda, 0xec, 0x9e, 0x29, 0x2e, 0x9c, 0x17, 0x37, 0x36, 0x4b } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 4.1", - /* Message */ - 29, - { 0xca, 0x24, 0x72, 0x1c, 0x88, 0xe0, 0x47, 0x74, 0xf4, 0x15, 0xb4, 0xc4, 0x6c, 0xa0, 0xfc, 0x26, 0xd5, 0xbb, 0x53, 0xaa, 0xfb, 0x19, 0x92, 0xf6, 0xde, 0x78, 0x5c, 0x76, 0x3a } -, - /* Seed */ - 96, - { 0xfc, 0x7f, 0x85, 0xc1, 0x38, 0x6d, 0xc4, 0x3c, 0x3a, 0x28, 0x46, 0xe4, 0xda, 0xe4, 0xd9, 0x54, 0x80, 0x54, 0x45, 0x9d, 0xa2, 0x31, 0x82, 0xf9, 0x84, 0x07, 0x9b, 0x07, 0x1f, 0xdb, 0x5e, 0x6d, 0x9d, 0x0f, 0xa0, 0xb2, 0x2e, 0x3d, 0xe6, 0x36, 0xee, 0x5b, 0x25, 0x3a, 0x42, 0xf9, 0x5e, 0xed, 0x44, 0x22, 0x95, 0x6c, 0x70, 0xf4, 0x8d, 0xfe, 0xcf, 0x0e, 0x55, 0x5b, 0x05, 0x15, 0x7b, 0x15, 0x6a, 0x55, 0xc8, 0xbc, 0x65, 0x8c, 0xd3, 0xb5, 0x39, 0x7f, 0xab, 0x78, 0xd7, 0x11, 0x56, 0x4e, 0x89, 0xc7, 0xe6, 0x24, 0x8a, 0xa0, 0x6a, 0xd1, 0x05, 0xc4, 0x0c, 0x31, 0xc4, 0xb1, 0x99, 0x7d } -, - /* Encryption */ - 128, - { 0xe3, 0x95, 0xff, 0x1f, 0xa5, 0x52, 0xfc, 0x2e, 0x79, 0xc4, 0xa5, 0x35, 0x58, 0xdf, 0x14, 0x00, 0xf8, 0x70, 0x4e, 0xb3, 0x6c, 0xf7, 0xcb, 0x05, 0x1b, 0xab, 0x93, 0x15, 0x0a, 0xc6, 0x39, 0x6a, 0xdd, 0x63, 0x66, 0x9b, 0x04, 0x24, 0x8b, 0x9d, 0xb3, 0x6a, 0x9c, 0x94, 0xf5, 0x19, 0x8c, 0x6e, 0x5d, 0x9a, 0x17, 0xd4, 0x74, 0xed, 0xb2, 0x03, 0x45, 0xfd, 0x6a, 0x78, 0xb5, 0x1d, 0xe8, 0x16, 0x6e, 0x98, 0xca, 0xb5, 0xb6, 0xd1, 0x65, 0x68, 0xb4, 0x1a, 0x8e, 0x93, 0xe4, 0x83, 0x88, 0x65, 0xd4, 0xbd, 0x9c, 0x51, 0xcd, 0xe8, 0xdf, 0xbe, 0xee, 0xa5, 0x88, 0x2b, 0x09, 0xdc, 0x70, 0xbc, 0x9f, 0xe7, 0x49, 0xb5, 0xd2, 0x4b, 0xb7, 0xca, 0x51, 0x1d, 0xb2, 0xc2, 0xb8, 0x29, 0xa7, 0xc9, 0x14, 0x6c, 0x77, 0x4e, 0xb0, 0xbd, 0x7a, 0xaf, 0xdc, 0x5c, 0x38, 0xd3, 0xd7, 0xcd, 0x58, 0x27 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 4.2", - /* Message */ - 40, - { 0x25, 0xc7, 0xbc, 0x4c, 0xb2, 0x43, 0xac, 0x1f, 0x07, 0x40, 0x86, 0x9c, 0xd2, 0x6b, 0xa8, 0x26, 0xf3, 0x55, 0xd4, 0x77, 0xc4, 0xaa, 0x6c, 0xbe, 0x54, 0x3a, 0xdd, 0xea, 0x84, 0x44, 0x44, 0xf4, 0x1c, 0x35, 0x92, 0xbb, 0x3d, 0xa7, 0xd4, 0x21 } -, - /* Seed */ - 85, - { 0x27, 0x2b, 0xe3, 0xfb, 0xcc, 0x76, 0x14, 0x99, 0x6f, 0x1a, 0xc0, 0xe0, 0xa5, 0xe2, 0x69, 0x06, 0x23, 0xbb, 0x0b, 0x69, 0x70, 0xfc, 0xde, 0x0b, 0x6f, 0x45, 0x58, 0xee, 0x62, 0x34, 0x26, 0xfa, 0x60, 0xad, 0xd6, 0xc5, 0xa8, 0xa1, 0x0d, 0x4a, 0x37, 0x51, 0x50, 0x15, 0x36, 0xfe, 0x8a, 0x45, 0xc5, 0x42, 0xf6, 0x27, 0xf4, 0x22, 0x9f, 0xa1, 0x24, 0x57, 0xc1, 0x13, 0x31, 0x13, 0x72, 0x05, 0x55, 0x2b, 0x01, 0x4c, 0x91, 0xb1, 0xc4, 0xe0, 0x9e, 0x45, 0x96, 0x78, 0x34, 0x0a, 0x74, 0xc2, 0x85, 0xe2, 0x6a, 0xef, 0xb9 } -, - /* Encryption */ - 128, - { 0x76, 0x50, 0xd6, 0xf8, 0x1a, 0xef, 0x5c, 0x0e, 0x32, 0x0e, 0xc7, 0x7f, 0xc8, 0x9b, 0x7c, 0x3e, 0x61, 0x83, 0x85, 0x0d, 0x10, 0xc9, 0x8a, 0xd7, 0xe9, 0xfe, 0xea, 0x47, 0xe3, 0x8c, 0xfb, 0x37, 0xa0, 0x25, 0xdb, 0x42, 0x1f, 0xb6, 0xd0, 0x05, 0x80, 0x9e, 0x38, 0xbb, 0x3c, 0x51, 0x95, 0x1d, 0xa9, 0xd9, 0x43, 0x3b, 0xa7, 0xef, 0xb1, 0x7d, 0xe7, 0xd8, 0xfe, 0x3e, 0x9b, 0x9c, 0xe4, 0x55, 0x53, 0x74, 0xea, 0x66, 0x3a, 0x1b, 0x5d, 0xa4, 0xa0, 0x92, 0x29, 0x4c, 0xe9, 0x66, 0x98, 0x56, 0x55, 0xe2, 0xdd, 0xd2, 0x0d, 0x7d, 0xe3, 0xaa, 0x35, 0x37, 0x05, 0x8c, 0xfd, 0x7e, 0x7a, 0x7b, 0x97, 0xfc, 0xdd, 0x98, 0x53, 0x79, 0x2b, 0xa8, 0x3f, 0xcc, 0x89, 0x07, 0x4a, 0x8d, 0x0f, 0x3c, 0xef, 0xdf, 0x98, 0x5b, 0x9e, 0x78, 0xae, 0xbf, 0xb0, 0x59, 0x67, 0x36, 0x4f, 0x24, 0x11, 0xcd } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.3", - /* Message */ - 20, - { 0xcf, 0x00, 0x7e, 0xbd, 0x23, 0xda, 0x06, 0x97, 0x1a, 0xf7, 0x9a, 0xa6, 0x34, 0xd5, 0xd2, 0x55, 0x05, 0xbd, 0x52, 0x29 } -, - /* Seed */ - 105, - { 0x9c, 0xf7, 0x23, 0x7e, 0x28, 0xa8, 0x6e, 0x41, 0x8d, 0x66, 0x4f, 0xe3, 0xbe, 0x7a, 0xe3, 0x0e, 0xeb, 0x95, 0x5a, 0x3f, 0x71, 0x02, 0xb2, 0x7d, 0x5f, 0xa0, 0x96, 0x74, 0x9c, 0x7f, 0xc2, 0x06, 0x4c, 0x88, 0x0b, 0xf3, 0xd3, 0x0e, 0xaa, 0x98, 0x1f, 0xce, 0x39, 0x86, 0xa9, 0x10, 0xfe, 0xea, 0xe1, 0x84, 0xc0, 0x10, 0x25, 0x04, 0x8b, 0xa6, 0x79, 0x48, 0x96, 0xfc, 0xcf, 0xf7, 0x4a, 0x59, 0x42, 0xf9, 0x62, 0xf3, 0xe3, 0x63, 0x71, 0xf6, 0xb3, 0x55, 0x18, 0x29, 0x43, 0x4a, 0xd8, 0xd0, 0x0a, 0x2c, 0x59, 0x7c, 0xf6, 0xd4, 0x51, 0xea, 0xce, 0x88, 0x86, 0x85, 0x38, 0xa4, 0x80, 0xf6, 0x8c, 0xe6, 0x8f, 0xc6, 0x85, 0x6e, 0xbb, 0x57, 0xdc } -, - /* Encryption */ - 128, - { 0xb6, 0x32, 0x52, 0xaf, 0x2e, 0x8e, 0xa2, 0x71, 0xe7, 0x06, 0xfd, 0x68, 0x3d, 0x0f, 0x8c, 0x10, 0xb3, 0xf4, 0xa3, 0x45, 0xc4, 0xf5, 0xb6, 0x78, 0x5b, 0xa9, 0x32, 0x9f, 0x44, 0x62, 0x43, 0xc6, 0xf3, 0x69, 0xe3, 0x0e, 0xa8, 0xfb, 0x11, 0x08, 0x4d, 0xb9, 0x79, 0x88, 0xe9, 0xc3, 0x87, 0x4b, 0x34, 0xd6, 0xfd, 0x08, 0x71, 0x7d, 0x9e, 0x81, 0x0e, 0x9c, 0x22, 0x43, 0x60, 0x34, 0x6b, 0xec, 0xcd, 0x3e, 0x0e, 0x53, 0xd1, 0x0b, 0x1e, 0xd4, 0x58, 0xe6, 0x4f, 0x3f, 0xb0, 0x92, 0xf4, 0x8c, 0xb6, 0x6a, 0xe0, 0x3b, 0x64, 0xf6, 0xaa, 0x9c, 0x63, 0xbd, 0x27, 0x9f, 0xae, 0x4c, 0x33, 0xf4, 0x2a, 0x9d, 0x73, 0xbb, 0x39, 0x11, 0x8e, 0xb8, 0x7d, 0x25, 0x12, 0xb9, 0xd9, 0x36, 0xa2, 0x7e, 0xd2, 0xe4, 0x49, 0x60, 0x7d, 0xbf, 0x0e, 0x3e, 0x22, 0x3a, 0x53, 0x95, 0x26, 0x35, 0x59, 0x9c } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.4", - /* Message */ - 34, - { 0xef, 0xda, 0x79, 0xe9, 0xc3, 0x36, 0xc2, 0x34, 0xff, 0x37, 0xb4, 0xf5, 0x8f, 0xdb, 0xd3, 0x1a, 0xf3, 0x67, 0x5b, 0x3d, 0x2b, 0x10, 0x5e, 0xaf, 0xbe, 0xad, 0x4b, 0xbb, 0xff, 0xf5, 0x4e, 0x68, 0x6a, 0xb5 } -, - /* Seed */ - 91, - { 0x30, 0xc2, 0x09, 0x43, 0xf1, 0xbf, 0xc4, 0x23, 0x61, 0xd4, 0xd2, 0x2f, 0x51, 0xa8, 0xd7, 0x86, 0xcb, 0x2d, 0x0d, 0xd5, 0xff, 0x7d, 0x70, 0x5b, 0x30, 0x28, 0x60, 0x18, 0x11, 0x29, 0x3d, 0xbe, 0x5d, 0x72, 0xc3, 0x55, 0x97, 0x10, 0xce, 0x0a, 0xe9, 0x5d, 0x2f, 0x16, 0xb2, 0x39, 0xa4, 0xac, 0x84, 0x45, 0x53, 0x7d, 0x48, 0x8e, 0x3e, 0x6d, 0x2c, 0xf5, 0xb7, 0xa6, 0x4c, 0x06, 0xc3, 0x75, 0x6e, 0x11, 0x60, 0x67, 0x63, 0x63, 0x3e, 0xdb, 0xdd, 0xbf, 0x26, 0xbe, 0xe6, 0x51, 0x18, 0x42, 0xd2, 0x75, 0x2d, 0xcd, 0x88, 0x89, 0x6c, 0xb8, 0x55, 0x8a, 0x87 } -, - /* Encryption */ - 128, - { 0xbb, 0x91, 0xb2, 0xf6, 0xf4, 0x33, 0x1d, 0x64, 0xd0, 0x73, 0x6a, 0x2e, 0xa6, 0x03, 0x29, 0xaa, 0x16, 0xc2, 0xed, 0x7a, 0x4d, 0x5c, 0xa8, 0xd7, 0x84, 0xe6, 0x30, 0x4c, 0xe4, 0x84, 0x4c, 0x71, 0x58, 0xf8, 0x22, 0xd2, 0xaf, 0x29, 0xc8, 0x90, 0x97, 0x7d, 0x75, 0xa9, 0x35, 0xe4, 0x3d, 0x93, 0xb5, 0xbe, 0x10, 0xc1, 0xd4, 0x4f, 0xa0, 0x0c, 0xe2, 0x8e, 0x75, 0xf5, 0x27, 0xbd, 0x84, 0xa3, 0xbe, 0x5a, 0xf5, 0xbe, 0xe9, 0x45, 0x67, 0xc5, 0x5e, 0x15, 0xee, 0x3e, 0x93, 0x42, 0x6a, 0xd8, 0xd5, 0x0f, 0x06, 0x4c, 0x57, 0x93, 0xca, 0x38, 0xc4, 0x3a, 0x70, 0xc5, 0xf5, 0x60, 0x74, 0x0b, 0x16, 0xee, 0xa1, 0x6b, 0x7f, 0x13, 0x41, 0x5f, 0x75, 0x1b, 0x3f, 0xdb, 0x87, 0x7a, 0x88, 0x29, 0x33, 0x21, 0xf5, 0x0f, 0xff, 0xa6, 0xf1, 0x24, 0x94, 0x96, 0xc2, 0xb0, 0x27, 0xa2, 0x18, 0xed } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.5", - /* Message */ - 52, - { 0x4a, 0x01, 0xfc, 0x13, 0xc1, 0xd8, 0x6f, 0xe7, 0xb2, 0xfd, 0xc7, 0x92, 0xf5, 0x28, 0x0f, 0x87, 0x5a, 0xdc, 0x5a, 0xe9, 0x9f, 0xf9, 0x11, 0xd0, 0x2c, 0x8c, 0x00, 0x3d, 0x39, 0xbb, 0xee, 0x54, 0xb8, 0x51, 0xef, 0xa3, 0x4b, 0x41, 0x31, 0xbe, 0x52, 0x0d, 0x81, 0x00, 0xef, 0x62, 0xc2, 0x5a, 0x4b, 0x51, 0x7e, 0x9b } -, - /* Seed */ - 73, - { 0xbe, 0x6b, 0xa5, 0xd1, 0x1d, 0xf1, 0xbf, 0xcb, 0x2b, 0x84, 0x67, 0x71, 0xb6, 0xc9, 0xdf, 0xc9, 0x33, 0x4d, 0xa8, 0x6c, 0x4b, 0x7c, 0x25, 0x43, 0x93, 0x18, 0xe8, 0xba, 0x8e, 0x47, 0x49, 0x2b, 0xcd, 0x51, 0x1b, 0xd4, 0xca, 0xe1, 0x67, 0x7d, 0x31, 0x2c, 0xa2, 0x2a, 0x94, 0x57, 0xcc, 0x81, 0xd9, 0x0e, 0x4d, 0x52, 0x4b, 0xa2, 0x26, 0x5f, 0x0f, 0xbc, 0xa1, 0x8e, 0x3c, 0x3f, 0x48, 0x2d, 0xca, 0xa7, 0x88, 0x33, 0x22, 0x39, 0x34, 0x6d, 0x6f } -, - /* Encryption */ - 128, - { 0x16, 0xbf, 0xcf, 0xb4, 0x2d, 0x28, 0xb9, 0xd1, 0x62, 0x70, 0xcd, 0x13, 0x8d, 0xc3, 0xca, 0x64, 0x42, 0x95, 0x6a, 0x41, 0x82, 0x5e, 0xd0, 0x23, 0x0b, 0x71, 0x09, 0x16, 0x13, 0x33, 0x3a, 0x9e, 0x7c, 0x52, 0xce, 0x8c, 0xc4, 0xb0, 0xbf, 0x29, 0x10, 0x79, 0x41, 0xa0, 0xd7, 0x2c, 0xc3, 0x4a, 0xfd, 0x00, 0x48, 0xbb, 0xf4, 0xc7, 0x16, 0xc7, 0x3a, 0xa9, 0xb0, 0xc7, 0x8d, 0x37, 0xc1, 0x93, 0x71, 0x9e, 0xbe, 0x03, 0xa9, 0x31, 0x74, 0x53, 0xb5, 0x53, 0xd4, 0xf5, 0xb3, 0x85, 0xd1, 0x41, 0xfc, 0x3b, 0x0e, 0xd1, 0x9b, 0x96, 0xdc, 0x35, 0x0d, 0xfd, 0x4d, 0x12, 0xe3, 0xdd, 0x03, 0xff, 0x18, 0x39, 0xd4, 0x78, 0x2c, 0x6d, 0xfd, 0x5f, 0xdf, 0x59, 0x71, 0xf3, 0xdd, 0xb0, 0xe3, 0x12, 0xa9, 0x16, 0x06, 0xf3, 0x13, 0x73, 0x02, 0x0d, 0xb3, 0xa7, 0x6d, 0x04, 0xfd, 0x6d, 0x65, 0xd6 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.6", - /* Message */ - 7, - { 0x7a, 0xb0, 0x6e, 0x19, 0x69, 0x22, 0xc0 } -, - /* Seed */ - 118, - { 0xde, 0x0d, 0x60, 0x33, 0xc1, 0xe9, 0x6b, 0x5f, 0xd8, 0x31, 0x21, 0x4f, 0x30, 0xd8, 0x1b, 0x8f, 0xd9, 0xa2, 0x69, 0x3e, 0x5e, 0x8a, 0x36, 0xea, 0xff, 0xd0, 0x39, 0xe7, 0x47, 0x3c, 0x28, 0xee, 0x43, 0xa3, 0x91, 0x6c, 0x78, 0xc9, 0xa1, 0x12, 0x95, 0x8a, 0x94, 0xce, 0x67, 0x1c, 0xcc, 0x40, 0xd9, 0x7e, 0xd4, 0x18, 0x7a, 0x3f, 0xff, 0xa0, 0xdc, 0x12, 0x9d, 0x88, 0xa8, 0xb8, 0xc4, 0x96, 0x6e, 0xa3, 0x94, 0xa9, 0x10, 0x89, 0x61, 0x25, 0xf5, 0x4d, 0xaf, 0xbb, 0x3b, 0x17, 0xb9, 0xfa, 0x10, 0xc4, 0x82, 0x20, 0x09, 0x64, 0x90, 0xc6, 0xf7, 0x5b, 0xe2, 0x51, 0x83, 0xe9, 0x98, 0x4d, 0xf5, 0xe4, 0xd7, 0xeb, 0xf9, 0x47, 0x5d, 0x11, 0xea, 0x39, 0x33, 0x5a, 0xc7, 0x2f, 0x93, 0xd3, 0x33, 0xbd, 0x74, 0x22, 0x19, 0x42 } -, - /* Encryption */ - 128, - { 0x54, 0x18, 0x23, 0xf9, 0x05, 0x57, 0x6d, 0xa1, 0x42, 0xe2, 0x65, 0xd8, 0x90, 0x45, 0xab, 0x66, 0x20, 0xfd, 0x1a, 0x74, 0xc9, 0x53, 0x3a, 0xda, 0x4b, 0xc7, 0xb4, 0x3d, 0x95, 0x62, 0x9a, 0x31, 0x18, 0x6f, 0x4e, 0x89, 0x89, 0x20, 0x83, 0xd2, 0x54, 0x9b, 0x0e, 0x63, 0x8b, 0xdf, 0xc0, 0xd2, 0x7e, 0x14, 0xec, 0x18, 0xc4, 0x5c, 0xa3, 0x58, 0x61, 0xdf, 0xe6, 0x12, 0xa3, 0xa1, 0xed, 0xaa, 0xfc, 0x72, 0xfb, 0x46, 0x81, 0xa9, 0x9e, 0xa6, 0xe6, 0x48, 0xbe, 0x89, 0x62, 0xf1, 0x56, 0x1e, 0x75, 0x0d, 0x14, 0x49, 0xf2, 0x3f, 0x43, 0x0a, 0xf9, 0x30, 0x72, 0x25, 0x54, 0x4d, 0x8a, 0x8b, 0x89, 0x65, 0xaf, 0x5d, 0xd1, 0x8c, 0xb7, 0x89, 0x53, 0xce, 0x6d, 0x16, 0xd8, 0x5e, 0xb2, 0x11, 0xaf, 0x0c, 0x64, 0x68, 0xa2, 0xaf, 0x9f, 0x72, 0xe7, 0x86, 0x61, 0xb0, 0xfc, 0xaa, 0x48, 0x15 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.7", - /* Message */ - 7, - { 0x9a, 0xda, 0x9c, 0x10, 0xb8, 0xae, 0x22 } -, - /* Seed */ - 118, - { 0xcc, 0x23, 0x43, 0x72, 0x4a, 0xc5, 0x0e, 0xe5, 0x47, 0x08, 0xfc, 0x5f, 0xd0, 0x3f, 0x09, 0xa1, 0xcc, 0x12, 0x22, 0xa4, 0x4b, 0xcd, 0x44, 0x03, 0x87, 0x7c, 0x6b, 0xde, 0x86, 0xbf, 0x43, 0xe4, 0x2c, 0x10, 0x84, 0xf6, 0xef, 0xff, 0x20, 0xfa, 0xc0, 0xac, 0xc3, 0x1e, 0xca, 0x17, 0xc7, 0x38, 0xd4, 0x68, 0x68, 0x73, 0x65, 0x52, 0xfd, 0x2f, 0x7e, 0x93, 0xb8, 0x22, 0x25, 0x61, 0x05, 0x4e, 0x6d, 0xad, 0xc3, 0x15, 0x60, 0x4e, 0xaf, 0x8f, 0x77, 0xf0, 0x5d, 0xd8, 0x58, 0x3a, 0x93, 0xbf, 0x03, 0xcb, 0x9c, 0xc2, 0x13, 0x9b, 0xc4, 0x19, 0xbb, 0x10, 0xe9, 0xb2, 0x01, 0xb2, 0xa7, 0xe1, 0x8b, 0x03, 0x79, 0x0c, 0xc8, 0x3e, 0xd6, 0x05, 0xd6, 0xd5, 0x66, 0x33, 0x05, 0x34, 0x71, 0x39, 0xc7, 0x5e, 0x1a, 0xe2, 0xa5, 0x6a } -, - /* Encryption */ - 128, - { 0x9f, 0x54, 0xd0, 0xde, 0xa0, 0x5a, 0x5d, 0x00, 0x72, 0x23, 0x5b, 0xc4, 0x67, 0x93, 0xcf, 0xc4, 0x7b, 0x00, 0x6d, 0xaa, 0xac, 0x02, 0x41, 0xc7, 0xe6, 0x6d, 0x33, 0x3e, 0x23, 0xc3, 0xcf, 0x97, 0x63, 0xb6, 0x1d, 0x9e, 0xea, 0xdd, 0xd8, 0x3f, 0x5d, 0x7f, 0x0a, 0xa9, 0x7d, 0x16, 0xc7, 0x69, 0x92, 0x55, 0xcf, 0x7e, 0x48, 0x72, 0xb6, 0xa0, 0x07, 0x95, 0x62, 0xd2, 0x60, 0x7d, 0x64, 0x40, 0xd7, 0xed, 0x37, 0xc6, 0x71, 0x3c, 0xe9, 0x66, 0x43, 0xa4, 0x41, 0xf8, 0x39, 0x55, 0x64, 0xd2, 0x6a, 0xde, 0xa5, 0x82, 0x3a, 0x49, 0x42, 0xda, 0x4a, 0xb8, 0xe4, 0x7b, 0xed, 0x58, 0x81, 0xb9, 0xd1, 0x84, 0x05, 0x79, 0x57, 0xdf, 0x65, 0x39, 0xe4, 0x36, 0xda, 0x35, 0xe3, 0x0a, 0x25, 0x3a, 0xf1, 0x2d, 0x54, 0x1d, 0x4b, 0x0e, 0xf8, 0x3c, 0x5e, 0xf3, 0xc1, 0x35, 0xab, 0x95, 0x94, 0x9a } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.8", - /* Message */ - 19, - { 0xd8, 0x12, 0x6f, 0x4a, 0x88, 0x78, 0x97, 0x82, 0x93, 0x11, 0x76, 0x51, 0xb3, 0x0e, 0x79, 0x22, 0xd1, 0x4a, 0xcf } -, - /* Seed */ - 106, - { 0xad, 0xf9, 0xb0, 0xa9, 0x15, 0x2f, 0x0e, 0x6e, 0xc6, 0xf4, 0x39, 0x59, 0x71, 0xad, 0x40, 0x3f, 0x02, 0xe7, 0xfa, 0x98, 0xf8, 0x15, 0x56, 0x0a, 0xfa, 0xff, 0xa7, 0xca, 0xd5, 0xb4, 0x47, 0x4b, 0x6e, 0xce, 0x65, 0xed, 0xab, 0xe2, 0x7e, 0xc2, 0x4a, 0x0a, 0xa4, 0x73, 0xed, 0x75, 0xa6, 0x1f, 0x5c, 0x24, 0x90, 0xa5, 0x36, 0xb1, 0xa4, 0xdf, 0x7b, 0x03, 0x41, 0x77, 0x37, 0xc5, 0x34, 0xe1, 0xd4, 0x5b, 0xf7, 0x26, 0x94, 0x38, 0x6b, 0xee, 0x82, 0x0c, 0x48, 0xdb, 0xd1, 0x83, 0x17, 0xbd, 0x61, 0x7c, 0x04, 0xb6, 0xa4, 0x17, 0xe3, 0x0e, 0xed, 0x79, 0x58, 0x8d, 0xc2, 0x3f, 0xd4, 0xdb, 0xa1, 0x37, 0x44, 0xb4, 0xb2, 0xaa, 0x5a, 0xf8, 0x0a, 0x8a } -, - /* Encryption */ - 128, - { 0x3b, 0x2b, 0x85, 0xed, 0xfc, 0xd7, 0xc7, 0xc2, 0x7b, 0xde, 0xde, 0xe1, 0xc2, 0x8a, 0xb6, 0x18, 0x7a, 0xbf, 0x1c, 0x96, 0xd9, 0x45, 0x30, 0x07, 0x92, 0xcf, 0x8a, 0xf1, 0x97, 0xc2, 0xf9, 0xa3, 0x91, 0xb4, 0x8b, 0x83, 0x32, 0xcf, 0xde, 0x7e, 0x4c, 0x7d, 0xc3, 0x4c, 0x42, 0x30, 0x29, 0x56, 0x92, 0xce, 0xfd, 0xa5, 0xef, 0xb2, 0x57, 0x35, 0x49, 0x2b, 0x9f, 0xf7, 0x84, 0xc7, 0xba, 0xe7, 0x35, 0x11, 0xc6, 0x18, 0xe3, 0xaa, 0x7b, 0xc8, 0x7b, 0xc3, 0x13, 0xf2, 0x67, 0x09, 0xa8, 0xea, 0x4a, 0xd7, 0x3a, 0x34, 0x9a, 0xb9, 0xe5, 0xad, 0x82, 0x6c, 0x96, 0xad, 0x0e, 0xca, 0x97, 0xe3, 0x13, 0x28, 0x6b, 0xcc, 0xbf, 0x8e, 0x33, 0xc9, 0x1f, 0x03, 0x68, 0x39, 0xb9, 0x94, 0x8b, 0x4e, 0xb0, 0xc3, 0x8e, 0x21, 0x3e, 0xf4, 0x7f, 0x77, 0x66, 0x1a, 0x27, 0xf8, 0xcf, 0xe4, 0x99, 0x03 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.9", - /* Message */ - 58, - { 0xf5, 0xdf, 0x01, 0xaf, 0xe6, 0xa9, 0x22, 0x51, 0x8b, 0x3f, 0x4b, 0x80, 0xcd, 0x4f, 0xca, 0x73, 0xb9, 0x7b, 0xab, 0x61, 0x71, 0x6e, 0x27, 0xd2, 0x51, 0xbd, 0x46, 0x5f, 0x4b, 0x35, 0xa1, 0xa2, 0x32, 0xe2, 0xda, 0x00, 0x90, 0x1c, 0x29, 0x4b, 0xf2, 0x23, 0x50, 0xce, 0x49, 0x0d, 0x09, 0x9f, 0x64, 0x2b, 0x53, 0x75, 0x61, 0x2d, 0xb6, 0x3b, 0xa1, 0xf2 } -, - /* Seed */ - 67, - { 0x6b, 0xf2, 0x81, 0x0d, 0xb8, 0xfb, 0x26, 0x93, 0x98, 0x41, 0x2d, 0xbb, 0x88, 0x06, 0x02, 0x82, 0xd4, 0x5f, 0xbe, 0x96, 0x27, 0x33, 0x7e, 0x54, 0x34, 0x26, 0x1a, 0x5d, 0xbc, 0x19, 0x3a, 0xd6, 0x18, 0xc1, 0x1f, 0x7b, 0xde, 0xc1, 0xde, 0x25, 0x05, 0xf8, 0x60, 0x37, 0xfc, 0x18, 0x51, 0xbf, 0x6f, 0xb4, 0x9d, 0x23, 0x60, 0x62, 0x73, 0x47, 0x49, 0x9e, 0xfc, 0x98, 0xe2, 0x92, 0x05, 0xda, 0x90, 0x6d, 0x32 } -, - /* Encryption */ - 128, - { 0x40, 0x12, 0xfc, 0xc5, 0xcf, 0xb9, 0x78, 0xde, 0xf8, 0x8f, 0xb8, 0xf8, 0x17, 0x4a, 0xa5, 0xb4, 0xa3, 0x07, 0x75, 0xac, 0x45, 0x59, 0xf0, 0xb2, 0xf3, 0xd3, 0xb4, 0x38, 0x9b, 0x82, 0x8a, 0x79, 0xd1, 0x40, 0x25, 0x10, 0xc9, 0xa0, 0x33, 0x7d, 0x48, 0x9d, 0x11, 0x82, 0xab, 0x31, 0xc8, 0x38, 0xac, 0x7c, 0x80, 0xb7, 0x48, 0x60, 0x9a, 0x2a, 0xa5, 0x37, 0xda, 0x7a, 0xcc, 0x3a, 0x4a, 0x7a, 0x31, 0xd2, 0xad, 0x25, 0x2b, 0xfd, 0x59, 0x28, 0x0b, 0x3d, 0x18, 0x13, 0xa2, 0x6f, 0x93, 0xc5, 0x9e, 0xe8, 0xc5, 0xee, 0x68, 0x87, 0x18, 0xf4, 0x27, 0x83, 0x93, 0xfe, 0xce, 0x32, 0x3a, 0x9d, 0xff, 0x83, 0x37, 0x55, 0xe8, 0x9a, 0xc8, 0xee, 0x1f, 0xa2, 0x90, 0x4b, 0xf2, 0x4c, 0xdf, 0x4f, 0x01, 0xe6, 0xea, 0xed, 0xb6, 0xa8, 0xef, 0x01, 0xf4, 0x07, 0xbe, 0xf3, 0x30, 0x9f, 0x03, 0x39 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.10", - /* Message */ - 4, - { 0xa3, 0x82, 0x3f, 0xaf } -, - /* Seed */ - 121, - { 0x94, 0xf6, 0x70, 0xfd, 0x82, 0xf6, 0x91, 0x32, 0x75, 0xee, 0xa4, 0xc6, 0x71, 0x16, 0xca, 0xaa, 0xbd, 0x33, 0x57, 0x8c, 0xf8, 0x4d, 0x22, 0x63, 0x64, 0x38, 0xa6, 0xfd, 0x7e, 0xcf, 0xee, 0xfc, 0x0b, 0x18, 0x7d, 0xec, 0xf7, 0x93, 0x89, 0x1c, 0x6e, 0x4c, 0xfc, 0x52, 0xb5, 0x67, 0xd8, 0x72, 0xbf, 0xfb, 0xee, 0x0a, 0x67, 0x47, 0x2a, 0x1a, 0x48, 0xc0, 0xf1, 0xba, 0x59, 0x8a, 0xd8, 0x25, 0x89, 0x01, 0xc5, 0x6a, 0x55, 0x92, 0xf1, 0x41, 0x14, 0x7e, 0x81, 0x33, 0x9d, 0x74, 0x7e, 0x06, 0x32, 0xde, 0xf0, 0x0d, 0x3d, 0xbe, 0xe9, 0x5c, 0x4e, 0x43, 0x21, 0xcc, 0x25, 0xb5, 0x31, 0x14, 0x47, 0xa3, 0x02, 0xc5, 0x34, 0x92, 0x9c, 0xf7, 0xe5, 0x34, 0xf9, 0xae, 0x67, 0xf4, 0x1e, 0x01, 0xe2, 0x2a, 0x3d, 0x7c, 0xe4, 0x1b, 0x3b, 0x31, 0x35 } -, - /* Encryption */ - 128, - { 0x7b, 0x60, 0x25, 0x42, 0xb6, 0x4f, 0x0a, 0x1e, 0x0e, 0xc2, 0xaa, 0x01, 0xcb, 0xed, 0x37, 0x7e, 0x33, 0x1e, 0xa3, 0xff, 0x86, 0xf3, 0x56, 0xfb, 0x7a, 0x58, 0x83, 0x76, 0x4b, 0xe4, 0xcb, 0xf7, 0xd0, 0x75, 0x4c, 0x58, 0x29, 0x64, 0x31, 0x36, 0xf2, 0x57, 0x23, 0x36, 0xa2, 0x3f, 0x15, 0x41, 0x1d, 0x83, 0x85, 0x14, 0xa1, 0x43, 0x87, 0x24, 0xad, 0x74, 0x09, 0xe8, 0xec, 0x8f, 0xe2, 0x63, 0x41, 0xae, 0xea, 0x56, 0x68, 0x34, 0x5d, 0x0d, 0x82, 0x3f, 0xb5, 0xc2, 0x1d, 0xf4, 0x59, 0xe8, 0xbf, 0x7c, 0x15, 0xb8, 0x0b, 0x07, 0x2e, 0x5f, 0x8a, 0x84, 0x65, 0xa4, 0x4a, 0xa9, 0xd0, 0x9d, 0x82, 0x5c, 0x03, 0x15, 0xa0, 0xec, 0xd2, 0xd6, 0x49, 0x70, 0x2b, 0x10, 0x9b, 0xe8, 0xfe, 0x35, 0xeb, 0x22, 0x84, 0x3a, 0x20, 0xe7, 0xfd, 0x87, 0x4f, 0x1c, 0x6b, 0x46, 0xa8, 0x0b, 0x68, 0xdf } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.11", - /* Message */ - 62, - { 0x75, 0xb9, 0xa4, 0xa0, 0xbb, 0x2d, 0x46, 0x43, 0xe4, 0x78, 0xf6, 0x54, 0xf2, 0xcc, 0x1a, 0x8c, 0x1b, 0xb4, 0x67, 0x19, 0x76, 0x0d, 0x45, 0x41, 0xa8, 0xa7, 0x33, 0xf3, 0x3b, 0x71, 0x3d, 0x32, 0xc6, 0x0b, 0xfd, 0x35, 0xf1, 0x61, 0x74, 0x83, 0x48, 0x47, 0xe8, 0x81, 0x2c, 0xbd, 0x7f, 0x06, 0xce, 0x72, 0x89, 0xf3, 0x72, 0xc5, 0x82, 0x30, 0xf2, 0xb0, 0x01, 0x45, 0x9b, 0x5d } -, - /* Seed */ - 63, - { 0x49, 0xa7, 0x3d, 0xeb, 0x93, 0xe3, 0xf1, 0xbe, 0xaa, 0xad, 0x3a, 0x19, 0x9a, 0x70, 0x56, 0x9e, 0x09, 0x9a, 0xfa, 0xca, 0xf7, 0xa7, 0x5f, 0xc4, 0xce, 0x64, 0x8f, 0xa8, 0x2e, 0xaf, 0x2a, 0x0f, 0xe4, 0x11, 0xd2, 0x64, 0xfe, 0x45, 0xf7, 0x45, 0x25, 0xc9, 0x1f, 0x3c, 0x75, 0x10, 0x17, 0xf8, 0x0a, 0x02, 0xba, 0xbf, 0xf3, 0x57, 0x99, 0x62, 0x6f, 0x2b, 0x8d, 0xdb, 0x9f, 0x36, 0x91 } -, - /* Encryption */ - 128, - { 0xe5, 0xae, 0xe7, 0x0d, 0xe8, 0x62, 0x72, 0x3c, 0x51, 0x73, 0xdf, 0xfb, 0xf6, 0x92, 0x6c, 0x3d, 0x33, 0x16, 0xd5, 0x90, 0x9c, 0xf5, 0xa1, 0xd6, 0x63, 0xe6, 0x80, 0xab, 0x2b, 0xb5, 0x76, 0xe3, 0x5b, 0x93, 0xfd, 0x43, 0x27, 0x43, 0xa1, 0x8e, 0x8d, 0xb4, 0xfa, 0xa3, 0x32, 0xf4, 0x46, 0x68, 0xa3, 0xd1, 0x9e, 0x5e, 0x69, 0x57, 0x32, 0xf8, 0x4b, 0xbd, 0x86, 0xd0, 0xdd, 0xed, 0x76, 0x65, 0xb7, 0x0b, 0x97, 0x63, 0x2e, 0xab, 0xe2, 0x36, 0x4c, 0xaf, 0xef, 0x7b, 0x74, 0xdc, 0xd1, 0xbf, 0xbd, 0x62, 0x5e, 0x2b, 0xbb, 0xf6, 0x65, 0x4c, 0xc0, 0x26, 0x61, 0x81, 0xac, 0x0a, 0x75, 0x7c, 0x3f, 0xba, 0xbd, 0x43, 0x0a, 0xe8, 0x63, 0x71, 0xeb, 0x56, 0xaf, 0x61, 0x0f, 0x77, 0xcf, 0x2f, 0xff, 0x6e, 0x24, 0x8f, 0x8c, 0x57, 0x91, 0x60, 0xb9, 0x1d, 0xce, 0xcc, 0x0d, 0x20, 0x2b, 0x50 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.12", - /* Message */ - 52, - { 0x15, 0x06, 0xeb, 0x34, 0x91, 0x78, 0x5a, 0xa7, 0x21, 0x06, 0xbf, 0x6c, 0x85, 0xd0, 0x10, 0x02, 0x04, 0x6d, 0x1c, 0x16, 0xd4, 0x35, 0xdd, 0x4e, 0x7c, 0x4b, 0x7e, 0x8e, 0x90, 0xdd, 0xdf, 0x16, 0x33, 0x2f, 0x94, 0xf4, 0xb8, 0x35, 0xd0, 0xe4, 0xad, 0x55, 0xd8, 0x3a, 0x81, 0xb3, 0x5c, 0x54, 0xb6, 0x79, 0xd3, 0xcf } -, - /* Seed */ - 73, - { 0xf6, 0x6e, 0x6a, 0x84, 0x75, 0x84, 0x40, 0x86, 0xe2, 0x84, 0x77, 0x22, 0x97, 0x46, 0x80, 0x1d, 0x43, 0x50, 0xd9, 0xad, 0x07, 0x68, 0xf3, 0xc3, 0xd8, 0xfa, 0xa8, 0x10, 0x7d, 0x95, 0xfb, 0x20, 0x5e, 0x4b, 0xa8, 0xc6, 0x4b, 0x73, 0x8e, 0x54, 0xe5, 0xac, 0x0d, 0xfe, 0xab, 0x99, 0x6d, 0x61, 0x12, 0x5c, 0x26, 0x79, 0x80, 0x72, 0x59, 0xbc, 0x9e, 0x47, 0xd8, 0xbd, 0xd2, 0xc0, 0x40, 0x95, 0x05, 0x44, 0x8b, 0xbf, 0x87, 0x2b, 0xf6, 0x64, 0x7a } -, - /* Encryption */ - 128, - { 0xd1, 0xfa, 0x39, 0x52, 0xcc, 0x61, 0x45, 0xff, 0x77, 0x1b, 0x6c, 0x5a, 0x68, 0x27, 0x5b, 0xbc, 0x22, 0xd0, 0x03, 0x92, 0x03, 0x66, 0x17, 0x37, 0x5f, 0x0c, 0x2b, 0xec, 0x3e, 0x28, 0x85, 0x83, 0xec, 0xfd, 0xc6, 0xdf, 0x6a, 0x82, 0x8d, 0xe3, 0x7f, 0x77, 0xc5, 0x56, 0xa8, 0xcb, 0xc4, 0xd4, 0x43, 0x36, 0xe8, 0xd2, 0xe3, 0x05, 0x87, 0xe3, 0x31, 0x58, 0x73, 0x17, 0xe9, 0x7b, 0x05, 0xa3, 0xfd, 0x78, 0x02, 0x5b, 0x2d, 0x49, 0x6b, 0x3b, 0xbe, 0xeb, 0x6c, 0x72, 0x5d, 0x9e, 0xa5, 0x61, 0xa7, 0x32, 0x28, 0x82, 0x33, 0xd6, 0x8b, 0x79, 0x49, 0x7f, 0xb0, 0xb6, 0xfe, 0xe0, 0xa6, 0xb6, 0x8a, 0xc3, 0x13, 0x66, 0x1b, 0x4b, 0x65, 0x47, 0x39, 0xf9, 0x18, 0xf6, 0xfd, 0x3b, 0xff, 0xc1, 0x7c, 0x1d, 0xf4, 0x1f, 0x01, 0x44, 0x95, 0xd5, 0x5f, 0x95, 0x90, 0x14, 0x7b, 0x82, 0xd1, 0x5d } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.13", - /* Message */ - 2, - { 0x9e, 0x3e } -, - /* Seed */ - 123, - { 0x9b, 0x3d, 0xdf, 0x17, 0xcd, 0x74, 0xe7, 0x6c, 0x69, 0xb5, 0xca, 0x3a, 0x01, 0x0a, 0x0e, 0x0f, 0xbd, 0x17, 0x05, 0xd6, 0x9c, 0x30, 0x74, 0x35, 0x3b, 0xe7, 0xd3, 0xc0, 0xc2, 0x05, 0xf0, 0x99, 0xc7, 0xa8, 0x10, 0xb7, 0xa1, 0xad, 0xe0, 0x9f, 0x5a, 0x03, 0x6b, 0xb7, 0x69, 0xef, 0xf5, 0x3a, 0x53, 0xd4, 0xc6, 0xf8, 0x71, 0x52, 0x92, 0x2d, 0x9a, 0x7b, 0x86, 0xed, 0xeb, 0xa3, 0x72, 0x37, 0xd7, 0xf1, 0x73, 0x4d, 0x9d, 0x97, 0x39, 0x38, 0x3f, 0x48, 0x80, 0xaf, 0x3a, 0xd6, 0x88, 0x87, 0xe0, 0xfe, 0x7c, 0x87, 0xa1, 0x74, 0xfb, 0x32, 0x38, 0xb1, 0xe5, 0x1e, 0xad, 0x2a, 0x84, 0x34, 0x40, 0xc2, 0xb2, 0x7f, 0x22, 0xdd, 0xa4, 0x22, 0x8d, 0xce, 0x70, 0xf9, 0x1c, 0x98, 0xd4, 0x71, 0xa8, 0x74, 0x4d, 0x27, 0x65, 0x55, 0x79, 0x58, 0x81, 0x02, 0x44 } -, - /* Encryption */ - 128, - { 0x42, 0x12, 0x6b, 0x49, 0x2a, 0x1e, 0x7c, 0xc0, 0x33, 0x95, 0xb2, 0xac, 0x70, 0x33, 0xcf, 0x6a, 0x67, 0x36, 0xb1, 0x2e, 0x76, 0x82, 0x5a, 0x17, 0x3b, 0x9e, 0x01, 0x1a, 0xe8, 0xbf, 0xed, 0x44, 0xfe, 0xcb, 0x8d, 0x9f, 0x58, 0xcc, 0xe1, 0x99, 0x11, 0xfe, 0x42, 0xd4, 0x55, 0xe2, 0x49, 0x20, 0x09, 0x32, 0xa9, 0xb6, 0x8f, 0xe2, 0xe4, 0x19, 0xbc, 0x63, 0x9c, 0x11, 0x78, 0xd1, 0x1f, 0xfb, 0xdb, 0xd9, 0x95, 0x5d, 0x45, 0x9f, 0x5e, 0xcf, 0xe0, 0x90, 0x20, 0x09, 0x8e, 0x29, 0x7b, 0x8e, 0x91, 0x48, 0x5e, 0x94, 0xbf, 0x11, 0xe7, 0xbf, 0x77, 0xed, 0xf5, 0xa2, 0x70, 0x11, 0xc8, 0x2b, 0x92, 0x73, 0x65, 0xa1, 0x2c, 0x9c, 0x77, 0xc7, 0xe4, 0x9b, 0xb7, 0xfe, 0x2f, 0x61, 0x33, 0x39, 0xde, 0x3f, 0x51, 0x20, 0x87, 0x79, 0x53, 0x86, 0xca, 0x58, 0x5a, 0x70, 0x24, 0x78, 0x27, 0x90 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.14", - /* Message */ - 28, - { 0x70, 0xaa, 0x78, 0xa4, 0xd3, 0x7f, 0x74, 0xc1, 0x81, 0xaa, 0x27, 0x40, 0x7f, 0x2f, 0x9f, 0xe6, 0x63, 0xa9, 0x1b, 0x16, 0xbe, 0x9b, 0xea, 0x6f, 0xc6, 0x12, 0x88, 0x7f } -, - /* Seed */ - 97, - { 0xd0, 0xfd, 0x16, 0xc0, 0xf0, 0xd7, 0x90, 0x9a, 0x38, 0x86, 0x17, 0x08, 0x11, 0xe4, 0x4f, 0x24, 0xfa, 0xdf, 0x94, 0xff, 0x17, 0x03, 0x9a, 0x56, 0x84, 0xa0, 0x9b, 0x24, 0xe1, 0x93, 0x3f, 0xa0, 0xc4, 0x71, 0x51, 0x63, 0x5d, 0x75, 0x7b, 0x73, 0xc2, 0x3f, 0xf3, 0x91, 0x01, 0xcb, 0xe2, 0x52, 0x9a, 0x63, 0xa7, 0xf3, 0xa0, 0x19, 0x5b, 0x6e, 0x47, 0x51, 0x07, 0x11, 0xde, 0x17, 0x1a, 0x16, 0x56, 0xc9, 0xea, 0xb3, 0xcf, 0x82, 0xd1, 0xc6, 0x52, 0x26, 0xb5, 0x8f, 0xd0, 0xfe, 0x58, 0xec, 0x31, 0x96, 0x24, 0x7f, 0x34, 0xb1, 0xa0, 0x55, 0x27, 0x02, 0xdc, 0x03, 0x75, 0x12, 0xc6, 0x81, 0x04 } -, - /* Encryption */ - 128, - { 0x95, 0x36, 0xd4, 0x7e, 0x1d, 0x68, 0x7f, 0x1f, 0x24, 0x99, 0x6c, 0xb4, 0x6c, 0xe9, 0x46, 0xae, 0x54, 0xd4, 0xa1, 0x49, 0xb3, 0x4b, 0x5b, 0xc3, 0x44, 0x43, 0xa2, 0x01, 0x51, 0x83, 0x87, 0xf4, 0xb6, 0x38, 0x18, 0x37, 0xcb, 0x7e, 0x4b, 0x0a, 0x44, 0x75, 0x13, 0x70, 0x42, 0xf1, 0x44, 0x8c, 0x1e, 0xa4, 0x15, 0x15, 0xef, 0x31, 0xc2, 0xfc, 0xbf, 0x62, 0xe7, 0xe9, 0x58, 0x67, 0xb6, 0x74, 0xac, 0x23, 0x0a, 0xed, 0x9c, 0x7d, 0x8d, 0x61, 0xc5, 0x27, 0x52, 0xb2, 0xfc, 0x2a, 0x0b, 0xba, 0xfc, 0x77, 0xb3, 0x1c, 0x51, 0x49, 0x30, 0xde, 0x98, 0x23, 0xb4, 0x38, 0xb6, 0xfa, 0xaa, 0x40, 0xd2, 0x55, 0x31, 0x03, 0x3c, 0x66, 0x48, 0x3f, 0xa0, 0x02, 0x3a, 0xf2, 0x1d, 0xa6, 0x4f, 0xcc, 0x8b, 0xb8, 0xc5, 0xd5, 0x2d, 0x3f, 0x6c, 0x43, 0x80, 0xf1, 0xd6, 0x08, 0xd8, 0xc0, 0x11, 0x8f } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.15", - /* Message */ - 59, - { 0x01, 0x16, 0xa4, 0x61, 0x77, 0x73, 0xb6, 0xdd, 0xb2, 0x19, 0x16, 0x1c, 0x4f, 0xd0, 0x71, 0x93, 0x7b, 0xbb, 0x07, 0x15, 0xcc, 0x62, 0x7c, 0x17, 0xb8, 0xe7, 0x52, 0x80, 0xd9, 0x9c, 0xdd, 0x41, 0x6e, 0xa5, 0xcd, 0xfa, 0x09, 0x06, 0xb9, 0xaf, 0x0a, 0x20, 0xcd, 0x47, 0x7f, 0xdc, 0xad, 0x14, 0x15, 0xa1, 0x9a, 0x9d, 0x1b, 0x96, 0xfd, 0xc3, 0xc0, 0xed, 0xb9 } -, - /* Seed */ - 66, - { 0x86, 0xb1, 0x58, 0x60, 0x9b, 0xfa, 0x08, 0xa8, 0xed, 0xe4, 0xef, 0x3f, 0x23, 0xe1, 0x2e, 0xb5, 0x0d, 0x24, 0x55, 0x74, 0x26, 0x4d, 0x76, 0x4d, 0x87, 0x12, 0x67, 0xdb, 0x8a, 0x95, 0x24, 0xea, 0x3f, 0xa2, 0xe3, 0x84, 0x5f, 0xfc, 0x29, 0x1b, 0xda, 0x98, 0x99, 0x89, 0xbf, 0x71, 0x5a, 0xa2, 0xb0, 0x8c, 0x49, 0x79, 0x8a, 0x81, 0x9f, 0x68, 0x58, 0xd9, 0xfa, 0x35, 0xf9, 0x4d, 0xf3, 0xc7, 0xe0, 0x86 } -, - /* Encryption */ - 128, - { 0x74, 0xa3, 0xdf, 0x38, 0x5d, 0x20, 0x87, 0x7b, 0xca, 0x9d, 0xbc, 0xeb, 0xca, 0x2e, 0x53, 0x2c, 0x6a, 0xbe, 0x95, 0x62, 0xd6, 0x81, 0x7b, 0xe1, 0x6e, 0x11, 0x8a, 0x60, 0xf4, 0xab, 0x0a, 0x1a, 0xc0, 0xa8, 0x46, 0x66, 0x53, 0xa8, 0xf8, 0x17, 0x0e, 0x35, 0xfc, 0xe1, 0x4b, 0x44, 0x9c, 0xd5, 0x9f, 0x55, 0x8e, 0x02, 0x0a, 0x89, 0x88, 0x94, 0xbd, 0x2a, 0x71, 0x75, 0x58, 0xe6, 0x65, 0x0f, 0x3a, 0x12, 0x85, 0x70, 0xd8, 0xc1, 0x69, 0xa7, 0x74, 0x66, 0x63, 0xc1, 0xd7, 0xef, 0x62, 0x14, 0x5f, 0x4b, 0x75, 0xc5, 0xfe, 0xb6, 0x38, 0x6f, 0xdb, 0x85, 0x33, 0x94, 0xc6, 0x59, 0xa9, 0x1a, 0xa2, 0xaa, 0xe0, 0x3b, 0xef, 0x91, 0x13, 0xdd, 0x49, 0x28, 0xff, 0x28, 0xb3, 0x80, 0x92, 0x7a, 0xd1, 0xba, 0x4e, 0x8a, 0x37, 0xed, 0xd1, 0x72, 0xef, 0xe8, 0xe9, 0xea, 0xbb, 0x61, 0x4d, 0x83 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.16", - /* Message */ - 63, - { 0x15, 0xc5, 0xfc, 0xc7, 0x54, 0x7d, 0x63, 0x76, 0x1f, 0x6a, 0xf1, 0xf2, 0x6e, 0xed, 0x9b, 0xe8, 0x13, 0x4f, 0x9f, 0x92, 0x12, 0x7e, 0x76, 0xb0, 0x3a, 0x33, 0xa9, 0x7b, 0x9b, 0xe3, 0xf7, 0x8b, 0x2e, 0x22, 0xfc, 0x7c, 0x85, 0x06, 0x99, 0xa1, 0x5c, 0x0e, 0x0e, 0xce, 0xbe, 0x2a, 0x71, 0x80, 0x5f, 0x02, 0x4b, 0x93, 0x88, 0xa3, 0xbd, 0xb2, 0xb3, 0x60, 0xd6, 0x9c, 0x5c, 0x0c, 0x46 } -, - /* Seed */ - 62, - { 0x5b, 0x4f, 0x17, 0xa9, 0xde, 0x91, 0x73, 0x7a, 0x7f, 0xe8, 0x54, 0xe8, 0xa1, 0x76, 0xbe, 0x5a, 0x0a, 0x16, 0xfc, 0x10, 0x42, 0xcb, 0x87, 0x0c, 0xc0, 0x18, 0x92, 0xfc, 0xd3, 0x8e, 0xa7, 0x5b, 0x07, 0x3c, 0x0f, 0xfa, 0x01, 0x4f, 0x96, 0xa3, 0x58, 0xe3, 0xaa, 0x5e, 0x73, 0xea, 0xf8, 0xa9, 0x1f, 0xce, 0x75, 0x47, 0x0b, 0xde, 0x64, 0xe8, 0x7a, 0xb8, 0x91, 0xba, 0x3b, 0xf2 } -, - /* Encryption */ - 128, - { 0x73, 0x62, 0xd7, 0x39, 0x8d, 0x0c, 0x25, 0x1f, 0x83, 0x58, 0x17, 0xe4, 0x79, 0x37, 0xa9, 0x25, 0x58, 0x36, 0xca, 0x02, 0x30, 0x45, 0x7f, 0xf6, 0x08, 0xb0, 0x78, 0xd5, 0x09, 0x31, 0xa8, 0x80, 0x33, 0xea, 0x76, 0x50, 0x81, 0x12, 0x65, 0xf8, 0xe2, 0x68, 0xb5, 0x33, 0x15, 0xd8, 0x43, 0x8e, 0x52, 0xa6, 0xa4, 0xb1, 0xb3, 0x89, 0x5d, 0x30, 0xc3, 0xda, 0xe1, 0x1a, 0x3b, 0x8e, 0xa8, 0xc3, 0x0f, 0x05, 0xe9, 0xd7, 0x1d, 0xef, 0x46, 0xd4, 0x51, 0x11, 0x92, 0xa1, 0x0f, 0x54, 0x21, 0x8d, 0x39, 0x36, 0xcb, 0x17, 0x98, 0x3a, 0x1e, 0x7a, 0xff, 0x18, 0x18, 0x89, 0x39, 0xb9, 0x46, 0x92, 0x76, 0x49, 0xb0, 0xfc, 0x4f, 0x7b, 0xbf, 0xcb, 0xfc, 0x14, 0xe1, 0xc0, 0xec, 0xa0, 0x7d, 0x00, 0xc9, 0x03, 0xdb, 0x78, 0x16, 0x9c, 0x50, 0xef, 0x0a, 0x38, 0xf1, 0xda, 0x19, 0xae, 0x44, 0x59 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.17", - /* Message */ - 29, - { 0x7c, 0xad, 0x18, 0xf1, 0x75, 0x13, 0x87, 0x42, 0x28, 0x5e, 0x90, 0x35, 0xd1, 0x3a, 0xd4, 0x1f, 0xc3, 0xa8, 0x52, 0x10, 0xe1, 0x54, 0x4e, 0x24, 0xde, 0xa3, 0xfc, 0xfe, 0x66 } -, - /* Seed */ - 96, - { 0x9a, 0x06, 0xca, 0x10, 0xfc, 0xc6, 0x61, 0x0e, 0x77, 0xdf, 0xf9, 0x0d, 0xd1, 0x76, 0xf8, 0x2e, 0x3f, 0x96, 0xe4, 0xa9, 0xd7, 0xab, 0x87, 0x2c, 0x74, 0x8e, 0xd4, 0x22, 0xf3, 0x4b, 0x33, 0x48, 0x61, 0x94, 0x40, 0xf0, 0xaa, 0xa2, 0x2a, 0x66, 0x98, 0x51, 0xda, 0xc8, 0x89, 0x4a, 0x8e, 0xfa, 0x34, 0xea, 0x2c, 0x2d, 0xa5, 0xe9, 0x58, 0x69, 0xe0, 0xad, 0xc0, 0x05, 0xa4, 0x9b, 0xa4, 0x58, 0x18, 0xca, 0xa4, 0x74, 0x11, 0x5c, 0x34, 0x49, 0x96, 0x6a, 0x85, 0xc4, 0x18, 0xfc, 0xaa, 0x8f, 0x45, 0x63, 0x0e, 0xfe, 0x0b, 0x1b, 0x4d, 0x3d, 0x69, 0xbe, 0x1b, 0xc0, 0x06, 0x8a, 0xa7, 0x99 } -, - /* Encryption */ - 128, - { 0x1e, 0xfa, 0xd4, 0x14, 0x46, 0xb9, 0x1f, 0xda, 0xdd, 0x8b, 0x80, 0x61, 0x9f, 0x68, 0x27, 0x36, 0x68, 0xb7, 0x58, 0x5f, 0xd9, 0x1f, 0x34, 0x49, 0xec, 0x85, 0xc2, 0x42, 0xd0, 0x84, 0x9e, 0x4a, 0x53, 0xa5, 0x97, 0x7b, 0x61, 0xaa, 0x40, 0xd1, 0x2c, 0xc4, 0x85, 0xec, 0x7e, 0x4f, 0xf2, 0x0f, 0x98, 0x86, 0x91, 0xcb, 0x9d, 0x73, 0xaf, 0x46, 0xea, 0x37, 0x6a, 0xfc, 0x69, 0xba, 0x22, 0x33, 0x86, 0xe9, 0xf1, 0x5d, 0x03, 0x26, 0x97, 0xda, 0x75, 0xe2, 0xf9, 0x52, 0xbe, 0x2a, 0xf0, 0x62, 0xe8, 0x24, 0x6c, 0xf7, 0x49, 0xb8, 0x9c, 0x4c, 0xbc, 0xd6, 0x4e, 0x23, 0xf8, 0x82, 0xbb, 0x55, 0x3c, 0x3c, 0xe3, 0x05, 0x20, 0x36, 0x22, 0xb5, 0xa7, 0x39, 0x77, 0x35, 0xa6, 0x34, 0xaa, 0xb0, 0xd1, 0x7e, 0xf9, 0xb5, 0x55, 0x9d, 0xdd, 0x34, 0xf4, 0x87, 0x2b, 0x56, 0xe7, 0x98, 0x6e, 0xfc } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.18", - /* Message */ - 18, - { 0xfd, 0x98, 0xc3, 0x8b, 0xe3, 0x19, 0x30, 0x70, 0xb5, 0xc4, 0x33, 0x4b, 0x11, 0xc2, 0x5b, 0x33, 0x4a, 0x44 } -, - /* Seed */ - 107, - { 0xf3, 0x57, 0x91, 0x11, 0x03, 0xe9, 0x87, 0xd1, 0xa9, 0xf1, 0x5c, 0xc2, 0xe5, 0x2f, 0x42, 0x39, 0x0e, 0x0f, 0xaa, 0x50, 0x02, 0xc4, 0xf1, 0x7d, 0x40, 0xa4, 0xaf, 0x50, 0xf3, 0x1a, 0x23, 0x17, 0x50, 0xe7, 0xaf, 0x61, 0xd9, 0xaf, 0xdf, 0x9c, 0xaa, 0x38, 0x61, 0xa2, 0x0d, 0xc7, 0x21, 0x89, 0x58, 0x61, 0xfb, 0x11, 0x8e, 0x08, 0x8d, 0x32, 0x18, 0xe6, 0xfb, 0x35, 0x56, 0xb1, 0x62, 0xd6, 0xbd, 0x67, 0x91, 0x1d, 0xbc, 0x94, 0x21, 0x98, 0x42, 0x65, 0x82, 0x72, 0xa5, 0xd4, 0x9b, 0xf5, 0xab, 0xb4, 0xa0, 0x87, 0x94, 0x95, 0xc5, 0xe6, 0xe6, 0x86, 0x28, 0x59, 0x29, 0xa5, 0x5a, 0x36, 0x8f, 0x52, 0x4c, 0x14, 0xa4, 0x0b, 0x0c, 0x61, 0x38, 0x0d, 0x0e } -, - /* Encryption */ - 128, - { 0xde, 0xae, 0x18, 0x3b, 0x56, 0xc3, 0xfb, 0x38, 0x41, 0xea, 0x57, 0x42, 0x34, 0xac, 0xd3, 0x0a, 0xff, 0x00, 0xd0, 0x05, 0x1f, 0x57, 0x80, 0x37, 0x58, 0xa4, 0x71, 0x4a, 0xbc, 0xbe, 0xdc, 0xda, 0x8b, 0xd1, 0xa4, 0x8a, 0x98, 0x01, 0x53, 0xdf, 0x89, 0x6b, 0x13, 0x76, 0xaa, 0x4b, 0x45, 0x95, 0x80, 0x13, 0xd6, 0x19, 0xbe, 0x7e, 0xaf, 0xf6, 0xc1, 0xa6, 0x75, 0xe2, 0x92, 0xef, 0xc3, 0xf4, 0x39, 0x3d, 0xdb, 0xde, 0xab, 0x47, 0xe8, 0x90, 0xa7, 0x8c, 0xef, 0x69, 0x00, 0x24, 0x49, 0x57, 0x87, 0x48, 0x90, 0x6c, 0x10, 0x21, 0xb8, 0x91, 0xb9, 0x43, 0xd8, 0x18, 0xd3, 0xa6, 0x1e, 0x67, 0xa3, 0x15, 0x61, 0x2d, 0x4c, 0xb1, 0xcf, 0x19, 0x7c, 0xe5, 0xdf, 0xab, 0xef, 0xda, 0xeb, 0x59, 0x0b, 0x8e, 0x8c, 0x73, 0x68, 0x5e, 0x74, 0x7e, 0x59, 0xa3, 0x95, 0xc8, 0x45, 0xc5, 0xd0, 0xc3 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.19", - /* Message */ - 54, - { 0x96, 0x53, 0xd7, 0x94, 0x69, 0xf0, 0x5d, 0x40, 0x19, 0x65, 0xa9, 0x5c, 0xe8, 0x74, 0xfa, 0x22, 0x5e, 0xc4, 0x79, 0x74, 0xe8, 0xd0, 0x68, 0x41, 0xc1, 0x3b, 0x47, 0x85, 0xe0, 0x0d, 0x54, 0x7f, 0x9d, 0x31, 0x44, 0xc3, 0x87, 0x9e, 0x6c, 0xcd, 0xaf, 0x78, 0x7a, 0xef, 0xc2, 0xf8, 0x45, 0x2a, 0x4a, 0x3c, 0x88, 0x4e, 0x38, 0xee } -, - /* Seed */ - 71, - { 0x85, 0x5d, 0x6d, 0x15, 0x12, 0xe5, 0x43, 0xa4, 0x5d, 0x3a, 0x9a, 0xa9, 0x68, 0x5d, 0x5d, 0xfd, 0xa7, 0x04, 0x79, 0xba, 0x39, 0x52, 0x63, 0x64, 0x14, 0x1b, 0xb6, 0x36, 0x27, 0x45, 0x89, 0x85, 0x71, 0x20, 0x01, 0x22, 0xf4, 0xbc, 0x82, 0xc6, 0x22, 0x43, 0x45, 0xc6, 0x9d, 0x3e, 0xf5, 0x42, 0xf1, 0x23, 0xbd, 0xe3, 0x01, 0x5b, 0x60, 0xc4, 0xc0, 0xff, 0xb9, 0x8d, 0x63, 0x01, 0x31, 0xae, 0xe8, 0x1f, 0xe4, 0xa0, 0xb0, 0x15, 0x38 } -, - /* Encryption */ - 128, - { 0x69, 0xca, 0x62, 0xe2, 0x9a, 0x5b, 0xdb, 0x4b, 0x04, 0xe2, 0x40, 0x16, 0x21, 0x2c, 0x25, 0x91, 0x40, 0xa6, 0x0c, 0xfa, 0x81, 0xeb, 0x66, 0x93, 0xbf, 0xfa, 0xfc, 0x9f, 0x60, 0x0d, 0xce, 0x10, 0x82, 0x2a, 0x00, 0x7b, 0x6a, 0xde, 0x93, 0xfa, 0xcd, 0xa1, 0xb2, 0xb1, 0x65, 0xb5, 0x57, 0x76, 0x0f, 0x0a, 0x67, 0x5a, 0xc9, 0xbc, 0xb2, 0x06, 0xb9, 0x64, 0xfb, 0x90, 0xcf, 0x6a, 0x2c, 0xf9, 0x9f, 0x18, 0x6b, 0x36, 0xd2, 0xeb, 0x99, 0x1d, 0x82, 0x53, 0xa0, 0x75, 0x4f, 0x9c, 0xc2, 0xd7, 0x2d, 0xe5, 0x49, 0xab, 0xae, 0x90, 0x94, 0xf5, 0xa8, 0x6c, 0xe1, 0xdb, 0x49, 0x4d, 0xbb, 0x6e, 0x51, 0x62, 0x86, 0x71, 0x5b, 0x3d, 0xd4, 0x05, 0x59, 0xb3, 0x10, 0x7b, 0x95, 0x24, 0xb7, 0x29, 0xac, 0x65, 0x4c, 0xfb, 0x40, 0xf9, 0xab, 0x35, 0xd0, 0x34, 0xe0, 0x27, 0x19, 0x7c, 0xbc, 0x36 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 4.20", - /* Message */ - 41, - { 0x0b, 0xdf, 0x3f, 0xce, 0x8e, 0x48, 0x7d, 0xb2, 0x2d, 0x07, 0x60, 0xab, 0x71, 0x15, 0x86, 0xca, 0x8e, 0x45, 0x9c, 0x39, 0x4f, 0xf8, 0xb1, 0xa1, 0x86, 0x70, 0x67, 0xa9, 0x31, 0x51, 0x99, 0xa8, 0x01, 0x24, 0x74, 0xb0, 0xf9, 0x0d, 0xcc, 0x87, 0xcb } -, - /* Seed */ - 84, - { 0xc9, 0xb7, 0x8d, 0xce, 0x9d, 0xfd, 0x7f, 0x04, 0x04, 0xff, 0x98, 0x2e, 0x06, 0xb5, 0x96, 0x50, 0xba, 0xfe, 0x31, 0xea, 0x19, 0xbc, 0x1f, 0x2e, 0x1f, 0x39, 0x89, 0xf4, 0xce, 0xfc, 0xe4, 0x6f, 0xc6, 0x52, 0x42, 0x3d, 0xb3, 0xc9, 0x9d, 0x92, 0xa8, 0xfb, 0x58, 0xf3, 0xee, 0x39, 0x3d, 0x55, 0x5b, 0x76, 0x84, 0x88, 0x9a, 0x4b, 0xf8, 0x15, 0xa1, 0x3e, 0x3b, 0x9b, 0xf2, 0x43, 0x71, 0x40, 0x66, 0xb9, 0x07, 0x58, 0x90, 0x67, 0x50, 0x47, 0xf1, 0x7e, 0x93, 0x5b, 0xdc, 0xf0, 0xe6, 0x6f, 0xcf, 0xe3, 0x9b, 0xcf } -, - /* Encryption */ - 128, - { 0x43, 0xad, 0x3e, 0x62, 0x5f, 0xb1, 0x72, 0x15, 0x57, 0x8b, 0xef, 0x2f, 0x46, 0x5f, 0xaa, 0x72, 0xae, 0x69, 0x43, 0x83, 0x36, 0x9f, 0xf7, 0xaa, 0x15, 0x12, 0x01, 0xa3, 0xf2, 0x59, 0xc8, 0xd8, 0xce, 0x8c, 0x16, 0xbd, 0x25, 0x52, 0x21, 0x49, 0xf6, 0x66, 0xe8, 0xd6, 0x92, 0xa0, 0x79, 0x5e, 0xa7, 0x15, 0x69, 0xd2, 0x88, 0x1f, 0x97, 0x07, 0x08, 0x5d, 0x3f, 0x59, 0xbd, 0xfa, 0x28, 0x73, 0x66, 0xd7, 0xf5, 0xa3, 0xf7, 0x6e, 0xa5, 0xdc, 0x10, 0x9f, 0xcb, 0x03, 0x30, 0x2d, 0xa0, 0xb7, 0x86, 0x99, 0x71, 0x3e, 0x0d, 0x30, 0x09, 0x58, 0x4f, 0x97, 0x17, 0x6c, 0x1b, 0x9b, 0xa6, 0x3e, 0x80, 0xcf, 0xa8, 0xfd, 0x4c, 0x01, 0x3d, 0x74, 0xb5, 0xfa, 0xde, 0x84, 0x72, 0xd5, 0x2c, 0x11, 0xe2, 0xe9, 0x36, 0x81, 0xba, 0x19, 0xd3, 0x53, 0xd3, 0x1c, 0xe6, 0xfa, 0x3c, 0x0a, 0xb6, 0x0d } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 5: A 1024-bit RSA key pair", -{ - /* Modulus */ - 128, - { 0xab, 0x29, 0xd4, 0x9c, 0xdc, 0x92, 0x5c, 0x69, 0xca, 0xe7, 0x52, 0x92, 0xfc, 0x03, 0x62, 0x03, 0x73, 0xc6, 0xfb, 0x36, 0xd3, 0xc2, 0x49, 0xdd, 0x5b, 0xb5, 0x0f, 0x88, 0x1a, 0x4c, 0x93, 0x89, 0xaf, 0xe7, 0x3e, 0x8c, 0x56, 0xb8, 0xd6, 0x67, 0xa5, 0xea, 0xf2, 0xb5, 0x71, 0x4a, 0xda, 0xf4, 0xca, 0xa0, 0x06, 0xa4, 0x9a, 0xc4, 0xbd, 0x4b, 0x91, 0xd5, 0x45, 0xcf, 0x3c, 0x10, 0x00, 0x9d, 0x31, 0x8a, 0x9d, 0xe0, 0xf3, 0xbb, 0xd8, 0x38, 0x4e, 0x8c, 0x7e, 0x96, 0xca, 0x15, 0x95, 0xe3, 0x2a, 0x70, 0x41, 0xd1, 0x68, 0xca, 0xa7, 0x34, 0x43, 0xb8, 0x85, 0xbf, 0x7f, 0x61, 0x4a, 0xe1, 0x21, 0x2e, 0x3b, 0x5a, 0xdd, 0xa2, 0x9d, 0xfa, 0xd5, 0x01, 0xb8, 0xb1, 0xa8, 0x1c, 0x3f, 0x48, 0xa4, 0x56, 0xe1, 0x33, 0xad, 0x52, 0xda, 0x2a, 0xbc, 0xe5, 0xd6, 0xe7, 0x82, 0xf2, 0x75, 0xc9 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x07, 0x7b, 0xb2, 0x73, 0x32, 0x34, 0x86, 0xec, 0x4c, 0x25, 0xed, 0x67, 0x06, 0x34, 0x1a, 0xa8, 0xa6, 0x7a, 0xec, 0x58, 0x43, 0x0d, 0x53, 0x3f, 0xe5, 0x86, 0xc6, 0xb9, 0x4f, 0x57, 0x0a, 0x3b, 0x42, 0x90, 0xc4, 0x5c, 0x0b, 0xdd, 0x94, 0x68, 0x1f, 0x29, 0xa4, 0xb7, 0x58, 0x8e, 0xea, 0x80, 0x39, 0xcc, 0xa1, 0xc5, 0xb8, 0x0b, 0x82, 0x70, 0x27, 0x9d, 0xd0, 0xa9, 0xc5, 0x09, 0x39, 0x11, 0x93, 0xe3, 0xd5, 0xc2, 0x5c, 0x10, 0x75, 0xc4, 0xa1, 0xd3, 0xdc, 0x32, 0x74, 0x06, 0x6d, 0xab, 0x81, 0x7f, 0xb5, 0x1b, 0x16, 0xbc, 0x26, 0x7e, 0xd9, 0xa9, 0x98, 0x0f, 0xfb, 0xc0, 0x92, 0x85, 0xd9, 0x7f, 0x11, 0x2f, 0x15, 0x26, 0x95, 0xe6, 0xe0, 0x9c, 0xae, 0x72, 0xbb, 0x55, 0x06, 0x6c, 0xb9, 0xdb, 0xd0, 0x98, 0xa7, 0x5c, 0xeb, 0x47, 0xb4, 0x62, 0x72, 0x00, 0x5c, 0x6b, 0xd2, 0x15 } -, - /* Prime 1 */ - 64, - { 0xe9, 0x4e, 0xa6, 0xb6, 0x19, 0xbe, 0xc3, 0xe4, 0x78, 0x87, 0x8e, 0x87, 0x8c, 0xf1, 0x23, 0xb7, 0xa9, 0xf1, 0x2c, 0xab, 0xb1, 0x95, 0xe0, 0xaa, 0xe0, 0x22, 0xf3, 0x17, 0x73, 0x46, 0x69, 0x31, 0x38, 0xb1, 0x1a, 0x86, 0xfa, 0x5c, 0xb7, 0x55, 0x5a, 0x10, 0xb8, 0xe4, 0x62, 0x2c, 0xe9, 0x52, 0x0c, 0x57, 0x2b, 0xef, 0x29, 0x1d, 0xf7, 0x0a, 0x16, 0xd8, 0x85, 0xf5, 0x97, 0xe5, 0x90, 0x4d } -, - /* Prime 2 */ - 64, - { 0xbb, 0xcf, 0xcc, 0x5a, 0x60, 0x95, 0x34, 0xee, 0x43, 0x4a, 0x6c, 0xbc, 0xa3, 0xf7, 0xe9, 0x62, 0xe7, 0x6d, 0x45, 0x5e, 0x32, 0x64, 0xc1, 0x9f, 0x60, 0x5f, 0x6e, 0x5f, 0xf6, 0x13, 0x7c, 0x65, 0xc5, 0x6d, 0x7f, 0xb3, 0x44, 0xcd, 0x52, 0xbc, 0x93, 0x37, 0x4f, 0x3d, 0x16, 0x6c, 0x9f, 0x0c, 0x6f, 0x9c, 0x50, 0x6b, 0xad, 0x19, 0x33, 0x09, 0x72, 0xd2, 0x1c, 0xac, 0x19, 0xce, 0x99, 0x6d } -, - /* Prime exponent 1 */ - 64, - { 0xe8, 0xa6, 0x0d, 0x88, 0x39, 0x54, 0x09, 0x73, 0xa2, 0xdd, 0x4a, 0x3b, 0xd1, 0x48, 0x05, 0x1d, 0xf8, 0xd1, 0x0e, 0x82, 0x87, 0xab, 0xb5, 0x45, 0xb0, 0x0c, 0x29, 0xec, 0x90, 0x7e, 0xfe, 0x16, 0x9f, 0x39, 0xbc, 0x02, 0x2d, 0x56, 0x97, 0x5a, 0xfd, 0x5c, 0xff, 0x82, 0x7e, 0x83, 0xda, 0x86, 0x7e, 0xd7, 0xce, 0x6f, 0xc6, 0xc8, 0xa2, 0xb7, 0xe4, 0xe0, 0x35, 0x75, 0x19, 0xeb, 0x49, 0x61 } -, - /* Prime exponent 2 */ - 64, - { 0x8f, 0xf2, 0xe2, 0x27, 0x37, 0x35, 0xc5, 0x5f, 0x05, 0x56, 0x6a, 0xe7, 0x5f, 0x29, 0xa9, 0xc9, 0x33, 0xa6, 0x2d, 0xef, 0xd7, 0xe2, 0x20, 0x01, 0x7f, 0x05, 0x45, 0xfc, 0xe9, 0x07, 0xe0, 0x65, 0xc4, 0x9f, 0x7b, 0xac, 0x34, 0x84, 0xc6, 0xf0, 0x60, 0x49, 0x99, 0x43, 0x32, 0x07, 0xc9, 0x13, 0xe8, 0x0b, 0xc0, 0x1b, 0xf7, 0x8d, 0x83, 0xef, 0xaf, 0x00, 0xda, 0x17, 0x12, 0xa4, 0xa6, 0x35 } -, - /* Coefficient */ - 64, - { 0x5f, 0x1f, 0xf9, 0x6a, 0x8a, 0x90, 0x19, 0x78, 0x4f, 0x92, 0x26, 0xe2, 0x5c, 0x9b, 0xfe, 0x25, 0x08, 0x02, 0x39, 0x43, 0x73, 0x90, 0x25, 0xdd, 0x6b, 0xab, 0x03, 0x7f, 0xf4, 0x7d, 0xc6, 0x42, 0x49, 0x85, 0x15, 0xc2, 0xf9, 0xe6, 0xff, 0x60, 0x60, 0xc5, 0xb7, 0xd2, 0x34, 0x30, 0xd8, 0xd5, 0x0f, 0x1c, 0x0f, 0x6d, 0x50, 0xc1, 0x80, 0xb4, 0xae, 0xa8, 0xa4, 0xa8, 0x2f, 0xcd, 0x2b, 0x74 } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 5.1", - /* Message */ - 53, - { 0x5d, 0xc9, 0xf8, 0xb1, 0x2d, 0xc8, 0x12, 0xa0, 0x9a, 0xa4, 0xb0, 0x6d, 0xfc, 0xb5, 0x7e, 0x1d, 0x2e, 0x8d, 0x1c, 0x7d, 0x2c, 0x07, 0x6b, 0x25, 0xd5, 0xc1, 0x8e, 0xdb, 0xc0, 0x46, 0xbd, 0x63, 0xc7, 0xca, 0x4a, 0x59, 0x9f, 0x18, 0xde, 0x26, 0xf3, 0xbe, 0x73, 0x8c, 0xc2, 0x8d, 0x16, 0x67, 0x2c, 0x00, 0x6e, 0x4d, 0x9c } -, - /* Seed */ - 72, - { 0x43, 0xd6, 0x05, 0xa5, 0x74, 0x0a, 0x97, 0x0b, 0x32, 0x37, 0x27, 0xaf, 0x35, 0x2a, 0x1b, 0xd4, 0x8d, 0xe6, 0x9d, 0x95, 0x05, 0xe2, 0x2c, 0x2f, 0xad, 0x03, 0x0c, 0x3b, 0x84, 0xb6, 0xde, 0xa2, 0xd2, 0x2f, 0x91, 0x64, 0x06, 0xa7, 0x69, 0x3c, 0xf5, 0x06, 0xc2, 0xd2, 0x51, 0x88, 0x6f, 0x02, 0x20, 0x3e, 0x3f, 0x76, 0x55, 0xa3, 0x0a, 0x68, 0x37, 0xaf, 0x8a, 0x8c, 0xbe, 0xc7, 0xb5, 0xc9, 0x2f, 0xc0, 0x4c, 0x8c, 0x18, 0xdf, 0xe9, 0xd3 } -, - /* Encryption */ - 128, - { 0x21, 0x5a, 0x35, 0xf4, 0xc0, 0x43, 0x5b, 0x07, 0xed, 0x5d, 0x2c, 0x4b, 0x68, 0x65, 0xbc, 0x28, 0x1c, 0xea, 0x70, 0x50, 0xcf, 0xea, 0x7a, 0x7e, 0x86, 0xe0, 0x3f, 0x8a, 0xcb, 0x28, 0xb5, 0x8d, 0xbe, 0xe6, 0x54, 0x58, 0x91, 0x9c, 0xea, 0xa5, 0xa3, 0x3e, 0xdd, 0x98, 0x20, 0x1e, 0xa6, 0xe7, 0x63, 0x2d, 0x76, 0x22, 0xd5, 0xa5, 0x1d, 0x35, 0xa3, 0x5f, 0xed, 0xe8, 0x6e, 0xf2, 0x03, 0xee, 0xf6, 0xeb, 0x34, 0x75, 0xec, 0x8f, 0x19, 0xe6, 0x9c, 0x0e, 0xd5, 0x2c, 0x05, 0xdd, 0x7d, 0x59, 0xe3, 0x53, 0xf5, 0x2b, 0x67, 0x10, 0xaf, 0x40, 0x26, 0x65, 0x55, 0x04, 0x10, 0x7d, 0xdb, 0x86, 0xf9, 0x57, 0xe6, 0xc0, 0x6b, 0xa6, 0x7b, 0x1f, 0x4f, 0xc9, 0xf1, 0x21, 0xe1, 0x5f, 0x82, 0x73, 0x67, 0x09, 0xd2, 0xde, 0x8d, 0x77, 0x43, 0x2d, 0xf0, 0x8d, 0xcc, 0xd2, 0xa0, 0xcc, 0x77, 0x04 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 5.2", - /* Message */ - 16, - { 0xd7, 0x74, 0x07, 0xd8, 0xf6, 0x9f, 0x80, 0xdc, 0x08, 0xeb, 0xa5, 0xf4, 0x26, 0x28, 0x2d, 0xe7 } -, - /* Seed */ - 109, - { 0xb8, 0x29, 0xc7, 0x89, 0xbe, 0x38, 0x1c, 0xd5, 0x9d, 0xe2, 0x14, 0x89, 0xdb, 0xa1, 0x41, 0xe0, 0xbd, 0x1f, 0xa8, 0xa3, 0xc3, 0x82, 0x6d, 0x59, 0xc6, 0xd1, 0x10, 0xe7, 0xdf, 0x72, 0x42, 0xba, 0x98, 0xc4, 0x7a, 0x43, 0x92, 0xc7, 0xf2, 0xac, 0x1c, 0x6e, 0x9d, 0xae, 0x22, 0xb9, 0xeb, 0x74, 0xa7, 0x64, 0x36, 0x08, 0x8b, 0xd0, 0xba, 0x6e, 0x19, 0x91, 0xe1, 0x9e, 0x3a, 0xf7, 0x9c, 0xf3, 0xf7, 0xde, 0xfb, 0x6a, 0x11, 0x61, 0x80, 0x25, 0x34, 0xba, 0x0e, 0x7e, 0xd1, 0x65, 0x34, 0x93, 0x88, 0x72, 0xec, 0xa6, 0x77, 0x05, 0x8a, 0xc7, 0x34, 0x67, 0xd4, 0x9e, 0xd1, 0x12, 0x5b, 0x50, 0xdf, 0xe5, 0xd6, 0xd6, 0x5a, 0x5d, 0x24, 0x53, 0x99, 0xb6, 0xbf, 0x1b, 0xf1 } -, - /* Encryption */ - 128, - { 0x2d, 0x48, 0x06, 0xcf, 0xaf, 0xe4, 0xaf, 0x36, 0xbd, 0x02, 0xf6, 0x2d, 0x6a, 0x43, 0xb0, 0x0b, 0x41, 0x6f, 0x70, 0x8e, 0x96, 0x85, 0xb1, 0x7a, 0xc8, 0xe3, 0xa4, 0xd8, 0xc2, 0x91, 0x80, 0x93, 0x05, 0x76, 0x9d, 0x78, 0x98, 0xf6, 0xfc, 0x85, 0x91, 0x7b, 0xa2, 0xfd, 0x8e, 0x58, 0x9f, 0xf7, 0xa8, 0xbb, 0x84, 0xbb, 0x7c, 0x12, 0x20, 0x2e, 0xd2, 0x79, 0xe0, 0x64, 0x09, 0xa5, 0xc0, 0xa7, 0xd3, 0x24, 0xbc, 0x46, 0xae, 0x4f, 0x92, 0x82, 0xc9, 0x02, 0x3d, 0x3d, 0xfb, 0x3a, 0x79, 0x15, 0xde, 0xfc, 0x16, 0x4b, 0x3f, 0x08, 0x26, 0x6a, 0xcf, 0x12, 0x41, 0xf8, 0x26, 0x24, 0x98, 0x15, 0x07, 0x41, 0x4e, 0x56, 0x29, 0x78, 0x35, 0x1d, 0xc8, 0xb7, 0xa7, 0x9e, 0xf5, 0x31, 0x40, 0x21, 0x01, 0xa8, 0xd3, 0xd3, 0xea, 0xa3, 0x53, 0x9b, 0xbf, 0x62, 0xaa, 0xd9, 0x9a, 0x3b, 0xb1, 0x1e } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.3", - /* Message */ - 2, - { 0x23, 0x8a } -, - /* Seed */ - 123, - { 0xa5, 0x88, 0x1a, 0xcf, 0xf3, 0x52, 0x9f, 0x25, 0x1b, 0x1b, 0x9c, 0x61, 0x9c, 0xe9, 0xf9, 0xdf, 0x91, 0xe0, 0xa0, 0x3d, 0xd8, 0x89, 0x16, 0x36, 0x46, 0x87, 0x1a, 0x62, 0x72, 0x07, 0xee, 0xf1, 0x47, 0x68, 0x0c, 0x32, 0xf4, 0x50, 0xa7, 0x76, 0xe1, 0x9f, 0x54, 0xec, 0x05, 0x5d, 0xc6, 0x8b, 0x04, 0xbd, 0x4d, 0x89, 0x37, 0x6d, 0xf3, 0xea, 0xfa, 0x6f, 0xca, 0xf6, 0x0e, 0xb8, 0x31, 0x84, 0x39, 0x10, 0xb6, 0x25, 0xb6, 0x4f, 0x25, 0xd9, 0x29, 0x9a, 0xfc, 0x30, 0x6a, 0x23, 0x76, 0x53, 0x80, 0x45, 0x51, 0x94, 0xb7, 0x5d, 0xc0, 0x13, 0x5d, 0x27, 0xc3, 0xb7, 0xd7, 0x2d, 0xf9, 0x08, 0x77, 0x5c, 0x7e, 0x90, 0xbe, 0xfc, 0x0c, 0x5a, 0xdf, 0x74, 0xa1, 0x69, 0xed, 0x58, 0x68, 0xf3, 0xd6, 0x34, 0x32, 0x7a, 0x05, 0x78, 0x18, 0x92, 0x54, 0x45, 0x43 } -, - /* Encryption */ - 128, - { 0x77, 0x10, 0xee, 0xa8, 0x65, 0x7d, 0xfd, 0x15, 0x65, 0x16, 0x65, 0x62, 0xdf, 0x0e, 0x2e, 0x84, 0x0e, 0xc3, 0xe3, 0xde, 0xdc, 0x0b, 0x80, 0x2b, 0xb0, 0x21, 0x3e, 0x47, 0xa5, 0xce, 0x97, 0xf4, 0xb8, 0x5b, 0xa9, 0xba, 0x14, 0x19, 0x77, 0x36, 0x3d, 0x8f, 0x54, 0xb0, 0x6d, 0x57, 0x8d, 0x5b, 0x2a, 0x96, 0xe9, 0x69, 0xcf, 0xa9, 0x15, 0xdf, 0x21, 0x9f, 0x00, 0x2a, 0x85, 0xd0, 0x32, 0x57, 0x04, 0x7b, 0x31, 0x16, 0xa1, 0xc4, 0xdd, 0xaf, 0x79, 0x1d, 0x93, 0x98, 0x2d, 0x1b, 0x9f, 0xfa, 0x24, 0x31, 0x86, 0xe9, 0xe2, 0xb1, 0x9e, 0xf0, 0x74, 0x1c, 0xe9, 0x8d, 0xe2, 0xa4, 0xa1, 0x58, 0x6e, 0x50, 0x12, 0xc4, 0x81, 0xde, 0x23, 0xa0, 0xef, 0xf8, 0x82, 0xfd, 0x62, 0x38, 0x38, 0xd2, 0x01, 0x1f, 0x4f, 0x63, 0x73, 0x8a, 0xff, 0xd7, 0xef, 0xb8, 0xc5, 0x0f, 0x46, 0xa6, 0xc2, 0x0e } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.4", - /* Message */ - 33, - { 0x25, 0xa2, 0x7e, 0xb1, 0xb2, 0x1f, 0x10, 0xcf, 0x9d, 0x57, 0x1c, 0x33, 0x05, 0x61, 0x0b, 0x97, 0xf0, 0xda, 0xee, 0x39, 0x90, 0x5c, 0x65, 0x94, 0xbf, 0xbf, 0x45, 0x2a, 0x9a, 0x00, 0xd9, 0xe8, 0x2b } -, - /* Seed */ - 92, - { 0x25, 0x04, 0x61, 0x80, 0x11, 0xc6, 0x73, 0xdb, 0x3c, 0x41, 0x22, 0x79, 0xdc, 0x8a, 0xd1, 0x65, 0xab, 0x7b, 0x64, 0x73, 0xae, 0x19, 0x5e, 0x8d, 0x6d, 0x41, 0x21, 0x49, 0x18, 0x19, 0x8b, 0x34, 0x51, 0xa6, 0x50, 0x8d, 0x61, 0x38, 0xce, 0xdc, 0x51, 0x8d, 0x80, 0x12, 0xba, 0x0e, 0xc7, 0x9b, 0x38, 0x6a, 0xf8, 0xfa, 0x40, 0xb0, 0x34, 0x78, 0xbb, 0xf2, 0xba, 0x06, 0x5e, 0x58, 0x2d, 0x61, 0x95, 0xcc, 0xbe, 0x15, 0x8f, 0x11, 0x78, 0x1e, 0xae, 0xb1, 0xb1, 0x72, 0x0b, 0x72, 0xd9, 0xb5, 0x21, 0x27, 0xde, 0xb9, 0x55, 0x17, 0x11, 0xe8, 0x87, 0xdb, 0xd0, 0xb8 } -, - /* Encryption */ - 128, - { 0x35, 0x72, 0xbd, 0xea, 0x23, 0x05, 0xe1, 0x78, 0x5c, 0x75, 0x4d, 0xe7, 0x44, 0xc4, 0xfa, 0x3f, 0xa2, 0xcb, 0x75, 0x71, 0x60, 0xe5, 0xcb, 0x39, 0xa3, 0x14, 0x97, 0xe1, 0x48, 0x5b, 0xbd, 0x7c, 0x08, 0x99, 0xc5, 0x35, 0x85, 0xb2, 0xbb, 0xbb, 0xd9, 0x90, 0x81, 0xb4, 0x16, 0xef, 0xc6, 0x85, 0x78, 0xdb, 0x78, 0xe0, 0xec, 0xd0, 0x8d, 0xa7, 0xa3, 0x95, 0x3e, 0x38, 0x6b, 0xb2, 0x5c, 0x12, 0xbb, 0xb8, 0x7c, 0x78, 0x94, 0x42, 0x83, 0xa8, 0xc8, 0x01, 0x87, 0xb4, 0x50, 0x8d, 0xab, 0xbc, 0x76, 0x97, 0xf4, 0x3a, 0x8a, 0xe7, 0x8a, 0x33, 0xfe, 0xbb, 0x15, 0xf3, 0xcd, 0x58, 0x1c, 0x80, 0xd4, 0x9b, 0x97, 0x1b, 0xcb, 0xd4, 0x8e, 0x44, 0x14, 0x2f, 0x58, 0xc2, 0xc9, 0x1a, 0xdb, 0x1a, 0xe1, 0x45, 0xaa, 0x9a, 0x83, 0xb3, 0xc5, 0x81, 0x5a, 0xa1, 0xa8, 0xff, 0x8d, 0xd2, 0x31, 0xfe } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.5", - /* Message */ - 6, - { 0x59, 0xcf, 0x0b, 0x6b, 0x50, 0xea } -, - /* Seed */ - 119, - { 0x2b, 0xf1, 0x91, 0x60, 0xdf, 0x69, 0x88, 0x93, 0x5b, 0xd2, 0x46, 0x10, 0x6b, 0x89, 0x09, 0xdd, 0x7b, 0xb3, 0xe5, 0x16, 0x90, 0xdf, 0x84, 0xd7, 0x6e, 0x4d, 0x31, 0xac, 0x82, 0x10, 0x44, 0x56, 0x34, 0x6b, 0x4c, 0x3c, 0x9b, 0xa7, 0xb5, 0xe9, 0xe6, 0x8e, 0xe2, 0x08, 0x6c, 0x84, 0x73, 0xc6, 0x83, 0x02, 0xe2, 0x59, 0x9a, 0xbf, 0x6b, 0x31, 0xce, 0xb3, 0xf7, 0x81, 0xad, 0x6b, 0x56, 0x89, 0x86, 0xf2, 0x1c, 0xd6, 0xd7, 0x55, 0x32, 0x8f, 0xb8, 0x3a, 0xfd, 0x55, 0x48, 0x50, 0x1d, 0x07, 0x0a, 0xc2, 0xdd, 0x8f, 0x5c, 0xdf, 0xb6, 0x2c, 0xef, 0x54, 0x5e, 0x81, 0x5f, 0xe3, 0x82, 0xbc, 0x0c, 0x67, 0xb6, 0x76, 0xe5, 0x45, 0x6e, 0xbb, 0x9a, 0xb6, 0x7d, 0xf4, 0x77, 0x40, 0xc6, 0xa4, 0x3d, 0xe3, 0xf9, 0xa2, 0x47, 0x7a, 0x9b } -, - /* Encryption */ - 128, - { 0x2e, 0xd5, 0x91, 0xfd, 0x4b, 0x35, 0x7e, 0x94, 0xf4, 0x81, 0xba, 0x84, 0xff, 0x4e, 0xbe, 0x7a, 0xe4, 0x31, 0x05, 0x4e, 0x5c, 0xd9, 0x8a, 0x99, 0x58, 0x96, 0x48, 0xe6, 0x16, 0xcd, 0x68, 0xe0, 0xd4, 0x72, 0x4f, 0xa8, 0xa6, 0xc5, 0x99, 0x68, 0x6b, 0xfe, 0xe1, 0x74, 0x7a, 0xd0, 0x77, 0xdb, 0xed, 0xad, 0x45, 0xf1, 0x24, 0x4d, 0x7f, 0x8e, 0x00, 0xda, 0x3a, 0x3a, 0x06, 0xd2, 0x31, 0x32, 0xd3, 0x17, 0x1d, 0x74, 0x4e, 0xf1, 0x4e, 0x1e, 0x97, 0xcd, 0xda, 0x10, 0x9b, 0xd2, 0xe5, 0x56, 0xa5, 0xfc, 0x7b, 0xbc, 0x60, 0x9a, 0x7f, 0xf2, 0x4c, 0xfa, 0xbe, 0xf4, 0xb5, 0x6c, 0xbb, 0xb7, 0x0e, 0x05, 0x06, 0x53, 0xb6, 0x98, 0x48, 0xd7, 0x11, 0x30, 0x75, 0xa5, 0xde, 0xbe, 0x7a, 0x46, 0x82, 0x15, 0xf8, 0xdc, 0x08, 0xe7, 0xef, 0x84, 0xfd, 0x55, 0x77, 0x8c, 0xd5, 0xb5, 0x96, 0xe5 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.6", - /* Message */ - 57, - { 0xe9, 0x44, 0x52, 0xf5, 0x0a, 0x5e, 0xdb, 0xe6, 0x75, 0x73, 0xab, 0x22, 0x30, 0x9f, 0xa2, 0x1b, 0xab, 0xc6, 0xd2, 0x25, 0x20, 0xe6, 0xe8, 0x3b, 0xf7, 0x2e, 0x7a, 0xfa, 0x6d, 0x71, 0xe2, 0x02, 0x96, 0xda, 0xea, 0xf5, 0x4a, 0x60, 0xc8, 0x03, 0x63, 0x04, 0x87, 0x9a, 0x21, 0x31, 0xd1, 0x78, 0x78, 0x0e, 0x34, 0x8e, 0xe0, 0x12, 0x0b, 0x99, 0x7c } -, - /* Seed */ - 68, - { 0xc5, 0x30, 0x44, 0x3a, 0x16, 0xef, 0xd8, 0xd6, 0xd7, 0x2a, 0xb4, 0x44, 0x3f, 0x8d, 0xb2, 0x44, 0x91, 0xde, 0x99, 0xd5, 0xaa, 0xbe, 0x51, 0x88, 0xb3, 0xf6, 0x1d, 0xc0, 0x48, 0x3b, 0x7e, 0xe0, 0x0b, 0x1c, 0x13, 0x25, 0x9b, 0x8a, 0xe2, 0x40, 0x9f, 0x1a, 0xe6, 0x2d, 0x99, 0x30, 0xc1, 0x1a, 0x4d, 0xde, 0xf3, 0xe8, 0x35, 0x82, 0x93, 0x88, 0x93, 0xf9, 0xac, 0x66, 0x8f, 0x79, 0xc6, 0x4c, 0x7f, 0x5d, 0x79, 0x6d } -, - /* Encryption */ - 128, - { 0x0e, 0xee, 0x90, 0xc7, 0x08, 0x18, 0x22, 0x1a, 0xe2, 0x70, 0x4b, 0xbe, 0x38, 0xd6, 0x8f, 0x8e, 0x15, 0x4c, 0x6e, 0xe7, 0xad, 0xe5, 0x3e, 0x2a, 0x1f, 0x4d, 0x1d, 0xba, 0xac, 0x98, 0xc5, 0x75, 0x91, 0xeb, 0xb6, 0xc6, 0x38, 0xbc, 0xb6, 0x8e, 0x18, 0x14, 0x35, 0xb7, 0x00, 0x01, 0xba, 0xd1, 0x80, 0x19, 0x2b, 0xfd, 0xa0, 0x57, 0x32, 0xc0, 0x5e, 0x7f, 0xb5, 0xaf, 0x22, 0xaa, 0x89, 0xd2, 0xa8, 0xff, 0x80, 0xcf, 0x9f, 0x08, 0x62, 0xf0, 0x4c, 0x05, 0xca, 0xca, 0x3d, 0x2a, 0x3a, 0x5b, 0x07, 0x79, 0x94, 0x6c, 0x6d, 0xdf, 0xa0, 0x4c, 0xd7, 0x9f, 0xa1, 0x64, 0xd6, 0x02, 0xf1, 0xb7, 0xde, 0x5c, 0x95, 0xbe, 0x85, 0xe9, 0x60, 0x84, 0x67, 0xe2, 0x5c, 0x29, 0xd0, 0x35, 0xc4, 0x66, 0x09, 0x06, 0x26, 0x9f, 0x6d, 0xc0, 0x0a, 0x47, 0x2b, 0x04, 0x46, 0xea, 0x56, 0xe7, 0x2a, 0x59 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.7", - /* Message */ - 44, - { 0x1c, 0xbf, 0xa0, 0xe7, 0xb1, 0xa1, 0x0c, 0x13, 0xd7, 0x50, 0x77, 0xb1, 0xcb, 0xd8, 0x03, 0x10, 0xcd, 0x24, 0x10, 0x34, 0x0d, 0x5f, 0x53, 0x72, 0x93, 0x46, 0x4a, 0x67, 0x81, 0xa9, 0xcc, 0x30, 0x2c, 0xb5, 0x38, 0x0e, 0xd9, 0x26, 0x7b, 0x3e, 0xb2, 0x3c, 0xdb, 0x13 } -, - /* Seed */ - 81, - { 0xd3, 0x6b, 0x7e, 0x17, 0x99, 0x05, 0x9d, 0x1e, 0xd1, 0x34, 0x7b, 0x0b, 0xf8, 0x24, 0x7c, 0x6b, 0xe5, 0x18, 0x7d, 0x8f, 0x15, 0x21, 0x9e, 0x3c, 0xb6, 0x6e, 0xc6, 0x2e, 0x1a, 0xc4, 0x1f, 0xf7, 0xed, 0x35, 0x7e, 0xd7, 0xca, 0x03, 0x84, 0xe3, 0x1d, 0x39, 0x94, 0x85, 0x61, 0xfc, 0x16, 0xcb, 0xd9, 0x6b, 0x7e, 0x70, 0x42, 0x79, 0xe5, 0x72, 0xbf, 0x56, 0x4e, 0x06, 0xc3, 0xa3, 0x40, 0x1a, 0x27, 0x14, 0xdd, 0x51, 0xd7, 0x21, 0x5b, 0xeb, 0xa1, 0xc6, 0x61, 0x54, 0xf6, 0x0d, 0xd0, 0xcd, 0x4d } -, - /* Encryption */ - 128, - { 0x9c, 0x03, 0xdc, 0x01, 0x33, 0xa6, 0xe6, 0xaa, 0xba, 0x92, 0x05, 0x9b, 0xdf, 0x5a, 0x6c, 0xc1, 0xb1, 0x44, 0xb9, 0x0d, 0x2a, 0x94, 0xa4, 0x8e, 0x7b, 0x3c, 0xb9, 0x0b, 0x0b, 0xb6, 0xf6, 0x24, 0xc7, 0xb1, 0xd1, 0x72, 0x33, 0x1e, 0x43, 0x23, 0xd0, 0x8d, 0x2e, 0x8e, 0x09, 0x95, 0x32, 0xdc, 0xb3, 0xb2, 0xa8, 0x7c, 0xa4, 0x20, 0x74, 0x9f, 0xc6, 0x34, 0x5c, 0x0d, 0x86, 0xe9, 0xab, 0xca, 0x71, 0xaf, 0x09, 0xa0, 0x92, 0x9e, 0xde, 0xee, 0xde, 0x83, 0xe7, 0x22, 0x44, 0x20, 0x3b, 0x2b, 0xf4, 0x5c, 0xeb, 0x18, 0x7e, 0x9d, 0xb3, 0xc7, 0xd3, 0xad, 0x05, 0xb2, 0x3b, 0x59, 0x62, 0x4c, 0x24, 0x66, 0x96, 0xcf, 0xc7, 0x58, 0x06, 0x39, 0x14, 0x02, 0xe4, 0x44, 0xe3, 0x97, 0x49, 0x69, 0x88, 0xe1, 0xe1, 0xf4, 0x2c, 0x6a, 0xde, 0xd3, 0x0c, 0xdc, 0x93, 0x79, 0x37, 0xf3, 0x00, 0x54 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.8", - /* Message */ - 64, - { 0xe1, 0x72, 0xa6, 0xb8, 0xb4, 0x96, 0xf0, 0x77, 0x73, 0x8b, 0x74, 0xf6, 0xd8, 0xb2, 0x92, 0xdd, 0xa6, 0x07, 0xf2, 0xad, 0xbf, 0xb3, 0x72, 0xbe, 0x37, 0xee, 0x00, 0x08, 0x88, 0xbe, 0xa3, 0x1f, 0x99, 0xcb, 0xa1, 0xcf, 0x39, 0x32, 0xe4, 0xbe, 0x37, 0x17, 0xc9, 0xe1, 0x68, 0x90, 0x1a, 0x32, 0xd1, 0xb8, 0x20, 0xbe, 0x4f, 0xb0, 0x13, 0x75, 0x27, 0xa2, 0x48, 0x18, 0x77, 0xfe, 0x01, 0xee } -, - /* Seed */ - 61, - { 0x84, 0x0c, 0xe1, 0x3b, 0xbc, 0x96, 0x17, 0xdc, 0x9f, 0x3f, 0x26, 0xb1, 0x47, 0x30, 0x1a, 0x6f, 0x46, 0x30, 0x0d, 0x77, 0x81, 0xa5, 0xd9, 0x81, 0x16, 0x2f, 0x86, 0x92, 0x87, 0x37, 0x1f, 0x1d, 0x59, 0x58, 0x76, 0x4f, 0xb0, 0x0b, 0x05, 0x53, 0x70, 0xec, 0x71, 0x1b, 0xba, 0x52, 0x83, 0xfc, 0xb0, 0x0b, 0x83, 0xbc, 0x02, 0x17, 0x5e, 0xa1, 0x01, 0x7b, 0xcc, 0x83, 0x53 } -, - /* Encryption */ - 128, - { 0x99, 0x3e, 0x39, 0x6f, 0xb5, 0x7b, 0x2e, 0xa6, 0xa1, 0xa3, 0xfc, 0xed, 0x9a, 0x69, 0xd3, 0x61, 0xcb, 0xb6, 0x26, 0x5b, 0x26, 0x50, 0x3c, 0x17, 0x5f, 0x84, 0xc6, 0x1a, 0x41, 0xea, 0x3e, 0x1c, 0xe4, 0xfb, 0xb6, 0x2e, 0x01, 0xd6, 0x42, 0x0e, 0x22, 0xfe, 0xf1, 0xd9, 0xe2, 0x8a, 0x58, 0x83, 0xe2, 0xea, 0xc8, 0x2e, 0x05, 0xf3, 0x58, 0xea, 0x75, 0xf7, 0x7d, 0xa4, 0x89, 0x7b, 0x6b, 0x64, 0x9a, 0xa4, 0x74, 0x28, 0x39, 0x41, 0x93, 0xdd, 0xec, 0x64, 0x8c, 0x3a, 0x7f, 0xb8, 0x1c, 0xfc, 0xf4, 0xb5, 0x1c, 0xe3, 0xeb, 0xba, 0x78, 0xae, 0xdc, 0xa7, 0xbb, 0x91, 0x7b, 0x35, 0xb3, 0xe2, 0x2a, 0xeb, 0x20, 0x1c, 0xea, 0x96, 0x59, 0x2e, 0x50, 0xe0, 0xd2, 0x84, 0x1e, 0x7d, 0x2c, 0xe0, 0xd6, 0x9f, 0xf3, 0x03, 0x9d, 0xc0, 0x1e, 0x96, 0x4a, 0x97, 0x7a, 0x01, 0x76, 0x83, 0xb3, 0x87 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.9", - /* Message */ - 55, - { 0xc8, 0xf0, 0xea, 0x23, 0xe0, 0x66, 0x11, 0xe4, 0xfd, 0x27, 0xb6, 0x1d, 0xb7, 0x92, 0x0c, 0x55, 0xf3, 0xc0, 0xa2, 0x22, 0x12, 0x88, 0x38, 0xe4, 0xcd, 0xb0, 0x62, 0xe1, 0x76, 0xb2, 0x1f, 0xc2, 0x32, 0x53, 0x55, 0x8c, 0x5d, 0x40, 0xde, 0x2d, 0xfd, 0x62, 0x0f, 0xb7, 0xcd, 0xf1, 0x39, 0x9c, 0x2a, 0xf8, 0xfc, 0x77, 0xca, 0x33, 0x35 } -, - /* Seed */ - 70, - { 0x16, 0x4d, 0x77, 0xb5, 0xd2, 0x6a, 0xe6, 0xd7, 0xab, 0xe7, 0xca, 0xed, 0x62, 0x5d, 0x87, 0xc2, 0x11, 0xcc, 0x50, 0x9a, 0xd0, 0x17, 0x2c, 0x20, 0x83, 0x3d, 0x8f, 0x98, 0xca, 0xe3, 0x8a, 0x2c, 0x37, 0x0e, 0xf2, 0x1d, 0x40, 0x96, 0xda, 0x84, 0x1d, 0xbe, 0xee, 0x94, 0x8e, 0xc6, 0x34, 0x03, 0xca, 0xbd, 0x4a, 0x5f, 0x71, 0xac, 0xe4, 0x93, 0x64, 0xaa, 0x7d, 0xe2, 0x0f, 0x32, 0xc9, 0x88, 0x33, 0x7a, 0x11, 0x5f, 0x83, 0x46 } -, - /* Encryption */ - 128, - { 0x7a, 0x8f, 0x15, 0xee, 0xf5, 0x10, 0xad, 0xe8, 0xd5, 0xc3, 0x17, 0xf9, 0x06, 0x4a, 0xd7, 0xda, 0xe6, 0xc9, 0x3e, 0x7c, 0xf1, 0x56, 0xa7, 0x37, 0x22, 0x02, 0x32, 0x58, 0xf8, 0xb5, 0x74, 0x47, 0x34, 0x70, 0x00, 0x34, 0xa3, 0xde, 0x6f, 0x13, 0x7a, 0xf6, 0xe9, 0x00, 0x46, 0xd8, 0x6e, 0x9b, 0x90, 0x59, 0x0f, 0xa5, 0xa6, 0x50, 0xce, 0xf4, 0xfd, 0xb4, 0xd3, 0x36, 0x02, 0x33, 0xaf, 0x86, 0xf4, 0xa7, 0xa2, 0x3c, 0x24, 0x3d, 0x19, 0x51, 0xc6, 0x66, 0xb6, 0x73, 0xc3, 0x3c, 0x7d, 0xec, 0x4f, 0x51, 0xac, 0xe3, 0x4b, 0x80, 0x5c, 0x0a, 0x9e, 0x67, 0xe2, 0x09, 0xcc, 0x7f, 0x9e, 0xd6, 0x9b, 0x8f, 0x5e, 0xb5, 0xc5, 0x53, 0xe0, 0xf1, 0x5c, 0x10, 0x30, 0x4b, 0xf5, 0x6d, 0x7b, 0xe1, 0x71, 0xf3, 0x1c, 0xce, 0x88, 0xf3, 0x7d, 0x1f, 0xb4, 0xa2, 0xa0, 0x04, 0x18, 0x89, 0x75, 0x76 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.10", - /* Message */ - 49, - { 0x19, 0xdb, 0x24, 0x22, 0x05, 0xc0, 0x3d, 0x7f, 0xa9, 0x93, 0x5d, 0x9e, 0x04, 0xfa, 0x6e, 0xcf, 0x38, 0xa5, 0x1e, 0xa9, 0x98, 0xac, 0x8e, 0x4b, 0xac, 0xa6, 0xcd, 0xfd, 0x6a, 0x0a, 0xce, 0x1d, 0xf3, 0x67, 0xe7, 0x3d, 0x23, 0xc2, 0x40, 0xaf, 0x76, 0xb6, 0x2e, 0x9f, 0xe9, 0x21, 0x5f, 0xe9, 0x43 } -, - /* Seed */ - 76, - { 0xbe, 0x49, 0x52, 0x05, 0x55, 0x69, 0x56, 0xfa, 0xe2, 0xa2, 0x2e, 0xa7, 0x0c, 0xe1, 0x02, 0xde, 0x06, 0x6c, 0x9e, 0x58, 0x95, 0x96, 0x06, 0x21, 0x74, 0x84, 0xa5, 0xb1, 0x50, 0x36, 0xff, 0xa1, 0xd4, 0x61, 0x23, 0x9d, 0xd4, 0x7b, 0x4f, 0x38, 0x1c, 0xea, 0x71, 0x51, 0x6e, 0x2d, 0xb0, 0xfc, 0x36, 0x9d, 0x72, 0xb4, 0x40, 0x69, 0x65, 0x12, 0xa9, 0x72, 0x88, 0xf0, 0x6f, 0xc0, 0xbc, 0xeb, 0x96, 0x82, 0x86, 0xe9, 0x95, 0xe0, 0x2d, 0x21, 0x8d, 0x9c, 0x26, 0x62 } -, - /* Encryption */ - 128, - { 0x55, 0x12, 0xb3, 0x99, 0x9b, 0x30, 0xc9, 0xc1, 0x44, 0x0e, 0x59, 0x75, 0x93, 0x1d, 0x55, 0xf2, 0x1e, 0x9e, 0xb4, 0x22, 0xb6, 0x2d, 0xaf, 0xcd, 0xab, 0x5d, 0x50, 0x03, 0xa7, 0x5e, 0xb1, 0x24, 0x81, 0x99, 0x86, 0x36, 0x19, 0x13, 0x36, 0x1d, 0xfc, 0x46, 0xac, 0x29, 0xaa, 0xba, 0x8e, 0x1a, 0xa0, 0x2e, 0x1b, 0xa4, 0x44, 0x67, 0x16, 0x2d, 0x20, 0xf6, 0x3a, 0xd1, 0x70, 0xfe, 0x0d, 0x87, 0xa5, 0x3d, 0x93, 0xc6, 0x4e, 0x02, 0x6b, 0x12, 0xbe, 0x6b, 0xc2, 0xb8, 0xeb, 0x0e, 0x57, 0xc0, 0x39, 0xeb, 0x60, 0xf3, 0x2c, 0x4b, 0x52, 0x70, 0x35, 0xf7, 0x03, 0xa7, 0xa8, 0x37, 0x4b, 0xd7, 0xfa, 0xa7, 0xb5, 0x40, 0x4a, 0x3c, 0x5a, 0xad, 0xb7, 0x92, 0xe2, 0x5f, 0xf9, 0x28, 0x76, 0xb2, 0x3d, 0xd3, 0xa7, 0x42, 0x2c, 0x45, 0x26, 0x6c, 0x6d, 0x98, 0x6e, 0xec, 0x53, 0x34, 0xb9, 0xba } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.11", - /* Message */ - 35, - { 0x49, 0xa7, 0x61, 0xf8, 0xc1, 0x8e, 0xf9, 0x23, 0x62, 0xd6, 0xab, 0xb2, 0x4c, 0x07, 0xfc, 0x72, 0x82, 0x55, 0x84, 0x24, 0x53, 0x69, 0x4e, 0x17, 0x60, 0x58, 0x99, 0xf4, 0x37, 0xb3, 0x1a, 0xc9, 0x8d, 0xb5, 0x16 } -, - /* Seed */ - 90, - { 0xd8, 0xcd, 0x85, 0xed, 0xfa, 0x0a, 0x84, 0xd0, 0x76, 0xa9, 0xf8, 0xb2, 0xf9, 0x3d, 0xaa, 0xeb, 0xa9, 0xae, 0x37, 0x43, 0x81, 0xea, 0x4f, 0x8c, 0xea, 0xbc, 0x14, 0xf6, 0x2a, 0x4e, 0xd7, 0x63, 0x8c, 0x1e, 0x39, 0x67, 0x57, 0xde, 0x3a, 0xe2, 0xb7, 0xef, 0xa3, 0xa1, 0x7c, 0x9a, 0x55, 0x86, 0xda, 0x84, 0xa5, 0xe5, 0x0e, 0xcd, 0xed, 0x61, 0x08, 0x7f, 0xa6, 0xf0, 0xce, 0x93, 0x82, 0x87, 0x99, 0x8a, 0xc1, 0xb9, 0xbc, 0x33, 0x21, 0xa7, 0xed, 0x16, 0x0d, 0x28, 0x67, 0x04, 0xe0, 0x52, 0x6e, 0xce, 0x7b, 0x30, 0xb4, 0x68, 0x14, 0x64, 0x9f, 0xec } -, - /* Encryption */ - 128, - { 0x9b, 0x47, 0x82, 0x68, 0x40, 0x62, 0x12, 0xca, 0x05, 0x30, 0xf4, 0x31, 0xbd, 0xb2, 0x63, 0x72, 0x61, 0x50, 0x84, 0xca, 0x48, 0x8d, 0xa4, 0x34, 0x51, 0xd2, 0x5a, 0x22, 0xb3, 0x5a, 0xc6, 0xfc, 0x61, 0xe3, 0x70, 0x74, 0xa5, 0xc2, 0x2b, 0xc1, 0xc7, 0x01, 0xdb, 0x19, 0x32, 0xb8, 0xc5, 0x57, 0xb8, 0x48, 0x7c, 0xea, 0x56, 0x60, 0x50, 0xe4, 0x8a, 0xd6, 0xe0, 0x37, 0x6f, 0x8d, 0xb4, 0x19, 0x8c, 0x4d, 0x27, 0xdb, 0x2e, 0x6b, 0x28, 0xc2, 0x5a, 0xed, 0x83, 0x7e, 0xf4, 0x77, 0x42, 0xd5, 0xeb, 0x8e, 0xb1, 0xd8, 0xb4, 0x32, 0xc9, 0xd5, 0x73, 0xcd, 0x4b, 0x86, 0xfd, 0xf3, 0x2c, 0x52, 0xa3, 0xd0, 0xf6, 0xcf, 0x92, 0xcf, 0x3c, 0xd9, 0x51, 0x96, 0x77, 0xa5, 0x8b, 0x1d, 0x1d, 0x99, 0x4f, 0xc1, 0xc9, 0x05, 0x7a, 0xc1, 0x06, 0xe8, 0x16, 0x04, 0x59, 0x26, 0xb4, 0x5b, 0x00, 0xe5 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.12", - /* Message */ - 10, - { 0x84, 0xe8, 0x28, 0xf7, 0x15, 0xf2, 0x28, 0xa6, 0x02, 0x65 } -, - /* Seed */ - 115, - { 0xf7, 0xf2, 0x75, 0xa8, 0x53, 0xd4, 0xe1, 0x26, 0xd7, 0xd0, 0xc3, 0x8e, 0xf7, 0x03, 0xf3, 0xfb, 0xda, 0x7a, 0x95, 0x20, 0x78, 0x8d, 0x7a, 0x81, 0xa3, 0x1b, 0x05, 0x30, 0xd4, 0x3f, 0xe6, 0xc9, 0x4b, 0x1b, 0x1b, 0xb1, 0x08, 0x51, 0x20, 0x9d, 0xb2, 0x6a, 0xc4, 0xb8, 0x88, 0xae, 0xce, 0xea, 0x77, 0x13, 0x82, 0x4c, 0x29, 0x38, 0xb4, 0xc6, 0x43, 0x1b, 0x2b, 0x03, 0xc6, 0x93, 0xab, 0x7b, 0x54, 0x63, 0x15, 0x41, 0x54, 0x6a, 0xc4, 0x03, 0x94, 0x79, 0x85, 0x48, 0xfb, 0xba, 0x95, 0x88, 0x2d, 0x91, 0xa1, 0x7c, 0x27, 0xe7, 0xdd, 0x53, 0x02, 0x6c, 0x96, 0x79, 0x1e, 0xe5, 0x5f, 0x24, 0x7d, 0x7f, 0x89, 0x8f, 0xea, 0xb3, 0x70, 0x9a, 0x13, 0x2a, 0x78, 0x26, 0x66, 0xa1, 0x4d, 0x0d, 0xf1, 0xa8, 0x4e } -, - /* Encryption */ - 128, - { 0x4e, 0x3f, 0xe9, 0x6e, 0x8f, 0x96, 0xe5, 0xb3, 0xc6, 0x11, 0xca, 0xdb, 0x96, 0xed, 0x51, 0x04, 0x20, 0x98, 0xec, 0xc5, 0x47, 0xbe, 0x7b, 0x88, 0xf8, 0xde, 0xa7, 0x65, 0xae, 0x14, 0xe8, 0x35, 0x0c, 0xfe, 0x39, 0xdc, 0xb1, 0xc1, 0xd6, 0xe4, 0x17, 0x9c, 0xa4, 0x04, 0xd5, 0x38, 0x4d, 0x87, 0xb0, 0x66, 0x50, 0x75, 0xee, 0xd7, 0xda, 0x7a, 0xaf, 0x71, 0x00, 0x8e, 0x24, 0x67, 0xd7, 0x0b, 0xff, 0xf6, 0x23, 0xb4, 0x59, 0x4b, 0x6d, 0xff, 0xf9, 0x0e, 0x3d, 0x84, 0x85, 0xf9, 0x41, 0x89, 0x48, 0x6c, 0xa0, 0xca, 0x9e, 0x72, 0x2b, 0x2a, 0x77, 0x7e, 0x25, 0xb5, 0x82, 0xf7, 0xad, 0x4e, 0xc5, 0x10, 0x3a, 0xd7, 0x67, 0x85, 0x9a, 0xc5, 0x9a, 0x1b, 0x8c, 0x5c, 0x19, 0x71, 0x30, 0x17, 0x48, 0xfc, 0xc2, 0x64, 0xf6, 0xc9, 0x29, 0x36, 0x4a, 0x8d, 0x9a, 0xf4, 0x22, 0x55, 0xc0, 0xf6 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.13", - /* Message */ - 51, - { 0xc4, 0x79, 0x7e, 0x8a, 0x6f, 0x26, 0x9b, 0xf2, 0x5d, 0x4c, 0xb4, 0xec, 0x3f, 0xa4, 0x6f, 0x8f, 0x11, 0xe6, 0xb3, 0x69, 0xfb, 0xda, 0xec, 0x1e, 0x51, 0x97, 0x83, 0x58, 0xd4, 0x6f, 0x3c, 0xf3, 0xb8, 0x42, 0x91, 0x7d, 0x96, 0x7a, 0xa9, 0xd3, 0x0b, 0x18, 0x34, 0x53, 0x93, 0x7a, 0x68, 0x26, 0x56, 0xb2, 0x7b } -, - /* Seed */ - 74, - { 0x17, 0x77, 0x42, 0x19, 0x7f, 0x04, 0x11, 0x44, 0x3b, 0xd8, 0x7e, 0x28, 0xea, 0x88, 0xd5, 0x4b, 0x4f, 0x2c, 0x7a, 0xb1, 0xdc, 0xae, 0xd8, 0x1a, 0x56, 0xf8, 0xd7, 0x87, 0x91, 0x12, 0x44, 0x54, 0x02, 0x85, 0x04, 0xd3, 0x22, 0xe1, 0xde, 0x34, 0x60, 0x47, 0xa4, 0x93, 0x93, 0x3e, 0x87, 0x62, 0x8c, 0xe0, 0x8b, 0x06, 0xc0, 0x17, 0x08, 0x2d, 0xcc, 0xd3, 0x8b, 0x48, 0x94, 0x65, 0x14, 0xea, 0x37, 0x7c, 0x2d, 0xfc, 0x75, 0x2a, 0xdc, 0x24, 0xfb, 0x57 } -, - /* Encryption */ - 128, - { 0x79, 0x84, 0xc3, 0xba, 0xd8, 0x6a, 0x54, 0x79, 0x90, 0xe0, 0x47, 0x5a, 0x48, 0x4f, 0x8d, 0xba, 0x5d, 0x4d, 0xce, 0xb0, 0xd3, 0xe3, 0xfc, 0xe0, 0x71, 0xd6, 0xf8, 0x71, 0x76, 0xb7, 0xcb, 0xe6, 0xf8, 0x11, 0x2d, 0x81, 0xd7, 0xcd, 0xaa, 0xd7, 0x7e, 0xd0, 0xd5, 0x78, 0x8e, 0x65, 0xf8, 0xbf, 0x5f, 0x0c, 0x2a, 0xd0, 0xdf, 0x07, 0xcc, 0xdf, 0x54, 0xb2, 0xda, 0xce, 0xfc, 0x19, 0xba, 0x65, 0x20, 0x1c, 0xcf, 0xd3, 0x61, 0xd1, 0x86, 0xb7, 0xd9, 0xe2, 0x69, 0xaa, 0x1e, 0x6a, 0xd2, 0xc7, 0x2b, 0xd2, 0x3f, 0x58, 0x08, 0x4f, 0xdb, 0xc3, 0xbc, 0x60, 0xe1, 0x7a, 0x33, 0xe3, 0xc5, 0x5a, 0x95, 0xeb, 0x0c, 0x38, 0xa0, 0x81, 0xbc, 0x0d, 0x39, 0x81, 0xdb, 0x26, 0xa7, 0x21, 0x2d, 0x6f, 0x69, 0x1b, 0x33, 0x6d, 0xac, 0x46, 0xb6, 0x4a, 0xe2, 0x25, 0x38, 0xa7, 0xb0, 0x08, 0x7f, 0x25 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.14", - /* Message */ - 20, - { 0xa5, 0xe9, 0xde, 0xb1, 0xc2, 0x0f, 0x98, 0x2d, 0x5b, 0x7d, 0x4b, 0x87, 0xd7, 0x99, 0x46, 0x1f, 0x05, 0x3d, 0x91, 0x9e } -, - /* Seed */ - 105, - { 0x59, 0x75, 0x9c, 0xf5, 0xf8, 0x38, 0xd9, 0x52, 0x49, 0x3d, 0x0f, 0x42, 0x81, 0xe3, 0xea, 0x0f, 0xe2, 0x16, 0x97, 0x1c, 0x0a, 0x2e, 0x24, 0x54, 0xb9, 0x6c, 0x8a, 0x11, 0xb4, 0xc6, 0x91, 0x27, 0x15, 0x90, 0x24, 0xdb, 0x6e, 0xc5, 0xc3, 0x36, 0x40, 0xd1, 0x20, 0x29, 0x58, 0x99, 0xf6, 0x66, 0x6c, 0x94, 0x17, 0xb2, 0x02, 0xa8, 0x6c, 0x26, 0xef, 0xd7, 0xc6, 0x13, 0x4c, 0x92, 0xfd, 0x86, 0xb8, 0x32, 0x3d, 0x17, 0x4a, 0x62, 0x53, 0x48, 0x81, 0x38, 0x2d, 0x7c, 0x6c, 0x9e, 0x1b, 0x8c, 0x1e, 0x95, 0xda, 0xf2, 0x10, 0xc3, 0xe9, 0xba, 0x43, 0xe5, 0x88, 0x79, 0xf3, 0x4f, 0x2f, 0xa7, 0x1e, 0xf6, 0xae, 0x4b, 0x68, 0xd6, 0x41, 0x47, 0xbe } -, - /* Encryption */ - 128, - { 0x70, 0xac, 0x10, 0x2d, 0x07, 0x1e, 0x3d, 0x90, 0x22, 0x81, 0x83, 0x62, 0x16, 0xe0, 0x81, 0x29, 0x0b, 0xb5, 0xdf, 0xcd, 0x56, 0x68, 0xd1, 0x1d, 0xae, 0xfa, 0x0a, 0xb0, 0x64, 0x59, 0x9d, 0x0f, 0x91, 0x4b, 0x47, 0x29, 0x61, 0x37, 0x5b, 0xbf, 0x5f, 0x2a, 0x66, 0x6f, 0xae, 0x0f, 0x6a, 0x25, 0xba, 0xfd, 0x44, 0xf6, 0x65, 0xc1, 0x7c, 0x14, 0x4d, 0xc4, 0xd4, 0xcc, 0x0a, 0x5d, 0x5b, 0xa5, 0x5c, 0x47, 0xa4, 0xcd, 0xe9, 0x59, 0xb3, 0x2b, 0xaa, 0x52, 0x32, 0xa0, 0x7f, 0xbf, 0x93, 0x78, 0xc9, 0xc5, 0x3c, 0xa2, 0xb3, 0x77, 0x81, 0xc9, 0x3a, 0x1c, 0xc8, 0xd6, 0x52, 0x94, 0x78, 0xa1, 0xc6, 0x73, 0x03, 0x4d, 0xda, 0x7f, 0xf3, 0x35, 0x60, 0x78, 0x6a, 0x46, 0x4f, 0x5b, 0x4a, 0x55, 0x9c, 0x62, 0x6a, 0xe2, 0x95, 0xbc, 0x91, 0xd0, 0xee, 0xd9, 0x37, 0x5f, 0x49, 0xe3, 0xe4, 0xaa } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.15", - /* Message */ - 63, - { 0x73, 0x9f, 0xa7, 0x6d, 0xbd, 0x12, 0x73, 0x03, 0xb7, 0xab, 0xf9, 0x3e, 0x1d, 0x7b, 0xa7, 0x29, 0x75, 0x5d, 0x6c, 0x81, 0x1b, 0x5e, 0x93, 0x35, 0x5e, 0x0c, 0x01, 0x1f, 0x74, 0x46, 0x4c, 0x7d, 0xb4, 0x79, 0x19, 0x3c, 0x3f, 0xb7, 0x38, 0x0a, 0x62, 0xa0, 0xc0, 0x06, 0xa2, 0xd1, 0xdc, 0x49, 0xa7, 0x66, 0xaf, 0x63, 0xfb, 0xa4, 0x52, 0x7c, 0xd1, 0x57, 0x50, 0x6d, 0x62, 0xc2, 0x1a } -, - /* Seed */ - 62, - { 0xa0, 0xb4, 0xda, 0xff, 0x3e, 0x26, 0xce, 0xbb, 0x3e, 0x4e, 0x3a, 0x43, 0xdb, 0x36, 0xc4, 0x66, 0xfb, 0x8c, 0xe6, 0x05, 0xb2, 0x5a, 0xf4, 0xc9, 0xda, 0x74, 0x4b, 0x62, 0xd4, 0x1f, 0x9e, 0x62, 0xc2, 0x28, 0x5c, 0x39, 0x0d, 0x60, 0xd1, 0x8e, 0x3d, 0x7e, 0x67, 0x5b, 0x4a, 0xc3, 0x19, 0x67, 0x24, 0x45, 0x19, 0x46, 0xbc, 0x1c, 0xcf, 0x2a, 0x9b, 0x56, 0x2c, 0x45, 0x33, 0xc9 } -, - /* Encryption */ - 128, - { 0x2b, 0x79, 0x80, 0x91, 0xb3, 0xa3, 0x91, 0x53, 0x3d, 0x62, 0xdc, 0x0e, 0x41, 0x7b, 0xa6, 0xde, 0xda, 0x00, 0x5b, 0xfc, 0x30, 0xab, 0x7d, 0xc8, 0x2e, 0x8f, 0x9b, 0xcc, 0x74, 0x17, 0xbc, 0xb0, 0x04, 0x34, 0x8c, 0x6d, 0x00, 0xe5, 0x37, 0xd2, 0x72, 0x2b, 0x84, 0x38, 0x61, 0x48, 0x92, 0x45, 0xab, 0x0d, 0x51, 0xf2, 0x11, 0x44, 0x7d, 0xac, 0x33, 0xa3, 0xf9, 0xdd, 0x6f, 0x3c, 0xa6, 0x6b, 0xbf, 0xa0, 0xd1, 0xad, 0xf9, 0x8b, 0xc9, 0x09, 0x95, 0x15, 0x92, 0x69, 0x76, 0xb9, 0x25, 0x8a, 0xab, 0x63, 0x20, 0x4a, 0xd8, 0x91, 0x65, 0xc8, 0x7b, 0xbe, 0xfd, 0x8d, 0x98, 0x85, 0x34, 0xb3, 0x74, 0x07, 0xdf, 0x7d, 0x43, 0xad, 0x39, 0x1e, 0xed, 0x99, 0x82, 0x47, 0x28, 0xef, 0xc3, 0xa5, 0x33, 0xb7, 0x89, 0xb4, 0x7e, 0x8a, 0xa7, 0x12, 0x16, 0x17, 0x47, 0x4f, 0x33, 0x25, 0xc5, 0x1a } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.16", - /* Message */ - 21, - { 0x5a, 0x44, 0xb5, 0x47, 0xbd, 0xa1, 0x9e, 0xcc, 0xa1, 0xdc, 0x7b, 0xc0, 0x45, 0x50, 0x20, 0x5f, 0x66, 0xc5, 0xde, 0x0a, 0xcb } -, - /* Seed */ - 104, - { 0x2f, 0x54, 0x85, 0xd2, 0x5f, 0xe5, 0xce, 0x40, 0xae, 0x62, 0xa1, 0x12, 0x97, 0x6c, 0xb4, 0xa5, 0x39, 0xb7, 0x4d, 0x96, 0xef, 0x8b, 0xe8, 0x73, 0x32, 0x5e, 0x20, 0x4b, 0xb3, 0xf8, 0x66, 0x07, 0xa1, 0x6a, 0x2c, 0x2a, 0xb5, 0x0f, 0x69, 0x78, 0x09, 0xed, 0x03, 0x01, 0x72, 0x70, 0xef, 0x20, 0xa1, 0x02, 0xc4, 0x3a, 0x2c, 0x4c, 0x3b, 0xe6, 0xab, 0x7a, 0x8a, 0xe2, 0xdc, 0xb5, 0x69, 0x84, 0xd5, 0xe0, 0x65, 0x52, 0x45, 0x93, 0xeb, 0x70, 0x70, 0x83, 0x4c, 0xe5, 0x53, 0xf1, 0x75, 0x69, 0x20, 0xbb, 0xcb, 0xbe, 0x4f, 0xb2, 0x6d, 0x35, 0xd4, 0xad, 0xcb, 0x59, 0xdf, 0x52, 0x46, 0x35, 0x6f, 0xf1, 0x2e, 0x7a, 0xa9, 0xee, 0x6d, 0xef } -, - /* Encryption */ - 128, - { 0x62, 0xd1, 0x48, 0x9a, 0x40, 0x3a, 0x90, 0xfa, 0xac, 0x67, 0x7a, 0xbc, 0x17, 0x4a, 0xa7, 0x24, 0x3b, 0xc7, 0x51, 0xa9, 0x64, 0x69, 0x5f, 0x6c, 0x32, 0xb3, 0x9d, 0xe0, 0x18, 0xfe, 0x46, 0x43, 0x44, 0x20, 0xea, 0x76, 0x59, 0xbe, 0x2c, 0x41, 0x0b, 0xc5, 0x6c, 0x4e, 0x3e, 0x7a, 0x1b, 0x16, 0x77, 0xfd, 0xf4, 0xad, 0xfb, 0x23, 0x24, 0xf0, 0x41, 0xed, 0xd5, 0x79, 0x0c, 0x4c, 0xdf, 0xab, 0x36, 0x55, 0xe0, 0x7e, 0x41, 0xfe, 0x9d, 0x73, 0x29, 0x21, 0x51, 0xb0, 0xdd, 0x5b, 0x96, 0xfc, 0x84, 0xa6, 0xb2, 0x0f, 0x6f, 0x3b, 0xc0, 0xf6, 0x0e, 0xae, 0xa8, 0xd8, 0x29, 0x17, 0xb2, 0x10, 0x83, 0x05, 0x59, 0x40, 0xfc, 0x02, 0xee, 0x3e, 0x17, 0xc3, 0x78, 0xbd, 0x4d, 0x85, 0x06, 0xd0, 0x8e, 0xc4, 0x5f, 0x33, 0xde, 0x57, 0x80, 0xf0, 0x1b, 0xd3, 0x18, 0xa9, 0xa1, 0x67, 0x87, 0xad } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.17", - /* Message */ - 5, - { 0x16, 0x80, 0x2d, 0x80, 0x3c } -, - /* Seed */ - 120, - { 0x02, 0xf0, 0xe7, 0x62, 0xc3, 0x39, 0x17, 0xbf, 0x6a, 0x4d, 0xf1, 0x1f, 0xa2, 0x84, 0x73, 0x54, 0x7a, 0x5a, 0xb0, 0x76, 0x7d, 0xd3, 0xa6, 0x1a, 0x8d, 0x05, 0xcc, 0x1e, 0x6f, 0x98, 0x34, 0x5a, 0xf1, 0xa0, 0x0e, 0x42, 0xf6, 0x2b, 0xd8, 0xec, 0xca, 0xcb, 0xd3, 0x7f, 0x4c, 0xcb, 0x80, 0x9e, 0x9e, 0x05, 0x5f, 0x73, 0xd3, 0x37, 0x5a, 0x60, 0x41, 0xd9, 0x78, 0x2c, 0xcd, 0x85, 0xd5, 0x9d, 0x14, 0xf4, 0x3e, 0x5c, 0x94, 0x10, 0x25, 0x7b, 0x90, 0x6e, 0x41, 0xcc, 0x8b, 0x97, 0x35, 0x47, 0xd0, 0x62, 0x2b, 0xd2, 0x1d, 0xb2, 0x9a, 0x91, 0x38, 0xd3, 0xb1, 0xbe, 0xde, 0x38, 0xce, 0x5c, 0x94, 0xc4, 0xe1, 0xd2, 0xa0, 0xa8, 0x40, 0x0b, 0x45, 0xba, 0xcd, 0x42, 0x69, 0x79, 0x7c, 0x38, 0x5a, 0xa3, 0x06, 0x6e, 0x65, 0x80, 0x72, 0x99 } -, - /* Encryption */ - 128, - { 0x75, 0x3b, 0x9c, 0xee, 0x70, 0xd4, 0x18, 0x1f, 0x95, 0x63, 0x87, 0x80, 0xdb, 0x7a, 0x04, 0xf9, 0xb1, 0x2e, 0xa3, 0x8e, 0x5d, 0xae, 0xe4, 0xf2, 0x89, 0x4c, 0x02, 0x67, 0x3a, 0x53, 0xf4, 0x85, 0x30, 0x74, 0x6f, 0xf2, 0x85, 0x8b, 0x78, 0x7e, 0xfc, 0xb4, 0x2d, 0x45, 0xe5, 0x31, 0xbe, 0xa1, 0xc8, 0xda, 0xe9, 0x48, 0x77, 0x15, 0x3b, 0x95, 0x6a, 0xc7, 0xb2, 0x87, 0x46, 0xee, 0x21, 0xc6, 0x31, 0xbf, 0x9a, 0x3b, 0xa7, 0x9d, 0x2b, 0xa8, 0x13, 0x21, 0xb7, 0x96, 0x03, 0xb1, 0xd0, 0x1a, 0x4e, 0x90, 0x9e, 0xd5, 0xa2, 0x7c, 0xbf, 0x27, 0xc9, 0x57, 0x78, 0x3d, 0x3f, 0x79, 0x50, 0xe0, 0x1d, 0xd8, 0xf4, 0x47, 0xf1, 0x0e, 0xce, 0xd3, 0x6f, 0x2d, 0x19, 0x35, 0x86, 0xf5, 0xcc, 0x17, 0xfb, 0x62, 0x2a, 0x05, 0xfa, 0xa1, 0xfb, 0x5c, 0xd2, 0xaa, 0x06, 0x4c, 0x08, 0x67, 0xb1, 0xca } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.18", - /* Message */ - 48, - { 0xd6, 0xd0, 0xf6, 0x03, 0x85, 0x97, 0x9c, 0xa5, 0x06, 0xfc, 0x83, 0x34, 0x21, 0xbc, 0xd2, 0x2d, 0xa6, 0xa0, 0x6a, 0x8f, 0x37, 0x0a, 0x7f, 0x02, 0xfe, 0xf4, 0x7c, 0x1c, 0xb2, 0x19, 0x9f, 0x26, 0x45, 0xc7, 0x54, 0x90, 0xfb, 0xf7, 0x89, 0xad, 0x52, 0x47, 0x04, 0xda, 0x8a, 0x27, 0x66, 0xc6 } -, - /* Seed */ - 77, - { 0xa0, 0x3c, 0x05, 0x67, 0x2e, 0xfe, 0x23, 0xb4, 0x4b, 0x26, 0xc7, 0x93, 0xe7, 0x05, 0x3a, 0x77, 0x04, 0x8b, 0xa2, 0xdb, 0xb4, 0xb5, 0x3a, 0xe9, 0x75, 0x18, 0x54, 0xe7, 0xad, 0xd7, 0xd6, 0x7c, 0x12, 0xcb, 0xd1, 0x6c, 0x0b, 0x19, 0x34, 0xd2, 0xc2, 0x3e, 0x77, 0xcd, 0xcc, 0x89, 0xce, 0x1d, 0x45, 0xc7, 0x61, 0x15, 0x8a, 0xa8, 0x61, 0x31, 0x71, 0xa7, 0x39, 0x01, 0xac, 0x1f, 0x61, 0xc6, 0x57, 0x05, 0x53, 0x3d, 0x3e, 0x63, 0x9b, 0x57, 0xa2, 0x48, 0x92, 0x91, 0x79 } -, - /* Encryption */ - 128, - { 0x00, 0x78, 0xdc, 0x48, 0xa6, 0x61, 0x58, 0x99, 0x2a, 0xaa, 0x68, 0xfc, 0x3c, 0xcc, 0x62, 0x8f, 0x92, 0xa7, 0x08, 0xd0, 0xb1, 0xd4, 0x38, 0x37, 0x20, 0x8d, 0x53, 0x4b, 0xc3, 0xf9, 0xbe, 0x1c, 0x14, 0x12, 0xed, 0x0f, 0x9f, 0x7b, 0xef, 0x49, 0x43, 0x0d, 0xc9, 0xe9, 0x98, 0xf7, 0x52, 0xe0, 0x74, 0x77, 0x68, 0xb4, 0xae, 0x38, 0x14, 0x46, 0x96, 0xc0, 0x03, 0xd6, 0xd2, 0x5e, 0xa1, 0xa6, 0xca, 0x6a, 0xec, 0x92, 0x4a, 0x9f, 0x4d, 0x9b, 0x57, 0x5a, 0x8f, 0x13, 0x6b, 0xba, 0x29, 0xbf, 0x31, 0xc1, 0x3b, 0x70, 0x50, 0xbd, 0x55, 0xd1, 0x00, 0x0d, 0x43, 0x3d, 0xaa, 0x6c, 0xf1, 0x0b, 0x49, 0x11, 0x6c, 0x80, 0x63, 0x10, 0x7f, 0xd3, 0xa5, 0xbd, 0xf6, 0x15, 0x45, 0xc5, 0xd8, 0x63, 0xf6, 0xa7, 0x88, 0x81, 0x78, 0x6c, 0xc8, 0xdc, 0x37, 0x6d, 0x36, 0xc9, 0x11, 0x36, 0x82, 0x25 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.19", - /* Message */ - 34, - { 0xb0, 0x38, 0x1c, 0xac, 0x04, 0xf3, 0x10, 0x15, 0x04, 0x96, 0x8f, 0x26, 0xd6, 0x55, 0x47, 0x45, 0x38, 0x3b, 0xd1, 0x71, 0xd3, 0x61, 0x56, 0xdd, 0x36, 0x80, 0xb3, 0xdb, 0x6f, 0xad, 0x7f, 0x77, 0x1f, 0x7d } -, - /* Seed */ - 91, - { 0xcc, 0x54, 0x8a, 0x67, 0x77, 0xcd, 0xe9, 0x53, 0xc1, 0x5a, 0x71, 0xfc, 0x49, 0x7c, 0x0c, 0x36, 0x17, 0xb1, 0xbb, 0x05, 0x6b, 0x03, 0x28, 0x8d, 0x9a, 0x54, 0x8b, 0x69, 0x3b, 0xb4, 0x30, 0x8b, 0x67, 0xc1, 0xda, 0xc3, 0x8b, 0xb9, 0xb8, 0xc9, 0xcc, 0x89, 0x6a, 0xc2, 0x44, 0xa9, 0xe3, 0x0d, 0x13, 0x24, 0x30, 0xf4, 0xce, 0xae, 0x57, 0x90, 0x34, 0x3d, 0xbc, 0xe3, 0x8d, 0x05, 0x6f, 0x27, 0xb8, 0x6b, 0xdd, 0x9d, 0x32, 0xa8, 0x17, 0x1f, 0x3b, 0x3c, 0xc2, 0xfd, 0x14, 0x22, 0x65, 0xac, 0x9a, 0x68, 0xdc, 0x35, 0x36, 0x27, 0x33, 0x9c, 0xd8, 0x83, 0x03 } -, - /* Encryption */ - 128, - { 0x45, 0x6f, 0x7c, 0x3e, 0x3b, 0xe8, 0x5f, 0xf7, 0xbd, 0xd6, 0xb5, 0xb2, 0x50, 0xbf, 0xb8, 0x1c, 0xd6, 0xfb, 0xb1, 0x86, 0xd2, 0x5e, 0x0c, 0x1c, 0x52, 0x59, 0xd6, 0x78, 0x87, 0x93, 0xc5, 0x41, 0xed, 0xac, 0xb4, 0xec, 0xde, 0xdb, 0x8a, 0x89, 0x29, 0x01, 0x34, 0xa6, 0x06, 0xf4, 0x6a, 0x81, 0x99, 0x1c, 0x13, 0xb1, 0x20, 0xe3, 0x30, 0x56, 0xbc, 0x0f, 0xc7, 0xe9, 0x7b, 0x34, 0x2d, 0x0f, 0x20, 0x05, 0x18, 0x13, 0xdd, 0xe4, 0x5e, 0x0b, 0x59, 0x6a, 0x7d, 0xcd, 0x69, 0x04, 0x90, 0x3b, 0x8f, 0xc0, 0x76, 0xa6, 0xe2, 0x4b, 0x3a, 0xd8, 0x01, 0x34, 0x16, 0xd9, 0xfd, 0x18, 0x48, 0x30, 0x55, 0x4a, 0xd5, 0x4d, 0x55, 0x48, 0xbc, 0xad, 0xda, 0xf5, 0x92, 0x0a, 0x02, 0x49, 0x55, 0x88, 0x78, 0x25, 0xdd, 0x37, 0x1a, 0xe4, 0xef, 0x90, 0x06, 0x9a, 0x4f, 0x31, 0x1c, 0x5a, 0x17, 0x29 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 5.20", - /* Message */ - 1, - { 0xe5 } -, - /* Seed */ - 124, - { 0xfe, 0x0b, 0xc7, 0xac, 0xb5, 0x6c, 0xe1, 0x4b, 0x4e, 0x2f, 0x55, 0xfb, 0xa0, 0xe2, 0xb1, 0x71, 0x54, 0x90, 0x7b, 0xe9, 0x4c, 0xe4, 0x85, 0xc6, 0x98, 0x4d, 0x61, 0xf6, 0x7c, 0x04, 0xa7, 0x40, 0xa2, 0x8d, 0x60, 0x94, 0xae, 0xae, 0x33, 0xb3, 0xea, 0x0d, 0x58, 0x18, 0x3e, 0x1e, 0xc7, 0xf6, 0x01, 0xb2, 0xab, 0x82, 0x0f, 0xb8, 0xa7, 0xff, 0xac, 0x0b, 0x4f, 0x96, 0x0e, 0x1b, 0x4a, 0xcb, 0xe5, 0x7c, 0xdc, 0x35, 0xb2, 0x25, 0xc4, 0x97, 0xfc, 0xac, 0xa0, 0x30, 0x19, 0xa2, 0x95, 0xb3, 0xe6, 0x6d, 0xa9, 0x6f, 0x53, 0x79, 0xcc, 0xd1, 0xda, 0x44, 0x47, 0x9a, 0x4f, 0x21, 0x35, 0xe1, 0x06, 0x3d, 0x71, 0xa2, 0x82, 0xc1, 0xe6, 0x6f, 0xdb, 0xd5, 0xd9, 0x53, 0xf5, 0x71, 0x8c, 0x25, 0x39, 0xd0, 0x0c, 0xe4, 0x9b, 0x45, 0x18, 0x20, 0x45, 0x4d, 0x2d, 0x49 } -, - /* Encryption */ - 128, - { 0x5c, 0x53, 0x36, 0x77, 0xa1, 0xdc, 0xb3, 0x63, 0x95, 0xda, 0x9a, 0x6d, 0x34, 0x77, 0xbf, 0xbf, 0x71, 0x51, 0x2c, 0x6a, 0x93, 0x3d, 0x04, 0x1c, 0xa3, 0x13, 0x44, 0xe1, 0xcb, 0xe1, 0xe5, 0x55, 0x88, 0xa1, 0x14, 0x6e, 0x3d, 0xec, 0x46, 0x10, 0xef, 0xac, 0x41, 0xb5, 0xf8, 0x02, 0x66, 0x02, 0x66, 0x52, 0xb3, 0xd7, 0xaa, 0x59, 0x42, 0x74, 0xd9, 0xd9, 0x20, 0xd3, 0x3a, 0xa0, 0xad, 0x9b, 0x4e, 0xc5, 0x9a, 0xa8, 0x80, 0x71, 0x2a, 0x1d, 0x1c, 0x36, 0x8a, 0x45, 0x7f, 0x35, 0xc7, 0x43, 0x88, 0xb0, 0x42, 0xf2, 0x49, 0x8e, 0x9f, 0x4b, 0xd4, 0x5a, 0x26, 0xf3, 0x21, 0xdd, 0x9e, 0xb3, 0x33, 0xef, 0x80, 0xaf, 0xe3, 0xaf, 0x9f, 0x72, 0x9c, 0xa1, 0x8f, 0x42, 0xc8, 0x8a, 0x71, 0x73, 0x85, 0x8c, 0x54, 0x20, 0x66, 0xf8, 0xa2, 0x52, 0xcc, 0xf0, 0xfe, 0xaf, 0xe6, 0xb5, 0xa9, 0x24 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 6: A 1024-bit RSA key pair", -{ - /* Modulus */ - 128, - { 0xdd, 0xca, 0xd6, 0xa3, 0x8b, 0x37, 0x04, 0xcb, 0xe0, 0x6b, 0xb1, 0xb5, 0x1d, 0x11, 0x62, 0x58, 0x49, 0x78, 0xa4, 0x29, 0x1f, 0xb6, 0x73, 0xb4, 0xea, 0x30, 0xed, 0x8b, 0x51, 0xa4, 0xbf, 0x26, 0x1d, 0xc9, 0xf0, 0xf4, 0x69, 0xce, 0x99, 0x88, 0xa0, 0x89, 0xf0, 0x84, 0x36, 0x64, 0x64, 0xa1, 0x80, 0xcf, 0xd7, 0x17, 0x10, 0x69, 0xa6, 0xf6, 0x36, 0xd7, 0x5f, 0x23, 0x40, 0x1b, 0x30, 0xcf, 0x43, 0xad, 0xcf, 0x87, 0x0e, 0xcd, 0x24, 0x58, 0x2f, 0x4d, 0xa2, 0x95, 0x22, 0x91, 0x51, 0xdd, 0xcf, 0xc7, 0xc9, 0x91, 0x86, 0xb2, 0x45, 0x88, 0x5c, 0xb6, 0x31, 0x96, 0xc4, 0xa5, 0x72, 0x6f, 0x20, 0x7e, 0xe3, 0x60, 0xaf, 0x3a, 0xd8, 0xc4, 0x83, 0x85, 0xa4, 0xe0, 0x84, 0x1d, 0x7d, 0x85, 0x1d, 0x54, 0x54, 0x5d, 0xe7, 0x67, 0xd8, 0xf9, 0x99, 0xdc, 0x17, 0xeb, 0x0c, 0x57, 0x11, 0x89 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x5e, 0x48, 0xe0, 0x3d, 0xdd, 0xec, 0xa1, 0xa9, 0x59, 0xd9, 0xee, 0x4d, 0xa3, 0xf1, 0xc3, 0xf0, 0xec, 0x2a, 0xd0, 0xfe, 0x7a, 0x70, 0xc1, 0x77, 0x63, 0x27, 0x31, 0x94, 0x4c, 0x3c, 0xd0, 0xd5, 0x8f, 0x4c, 0x4d, 0x96, 0x59, 0x74, 0x6e, 0x68, 0x5a, 0x76, 0xc9, 0x3c, 0x2b, 0x33, 0x3a, 0x64, 0x3d, 0xb2, 0x1d, 0x29, 0xbc, 0xdc, 0x6d, 0x11, 0xb5, 0xf6, 0x90, 0x87, 0x17, 0xb5, 0x77, 0x65, 0x99, 0xff, 0x30, 0x88, 0xb2, 0x01, 0x4f, 0xfc, 0x51, 0xf1, 0x8d, 0x93, 0x22, 0x24, 0xf1, 0x05, 0x9b, 0x22, 0x39, 0xea, 0x56, 0x44, 0xe8, 0x06, 0x9a, 0x5c, 0xc4, 0x31, 0xae, 0xf6, 0x07, 0x38, 0x0a, 0xa9, 0x24, 0xc1, 0x58, 0xab, 0xcb, 0xdd, 0x97, 0x51, 0xf5, 0x4e, 0x67, 0x79, 0xc4, 0xec, 0x23, 0x21, 0x68, 0xb0, 0x01, 0x4f, 0x4c, 0x8b, 0x49, 0x7b, 0xe9, 0x49, 0xae, 0xe6, 0x57, 0x51 } -, - /* Prime 1 */ - 64, - { 0xf9, 0x47, 0x1f, 0x2d, 0x22, 0x13, 0xa9, 0x2c, 0xf0, 0xa7, 0xc3, 0x84, 0x04, 0xd4, 0x0e, 0x32, 0x2f, 0x14, 0xf4, 0x39, 0x61, 0xf0, 0x1e, 0x92, 0x33, 0x63, 0xcf, 0x66, 0x53, 0xe8, 0x98, 0x4f, 0xb6, 0xe6, 0x8d, 0x66, 0xe6, 0xf1, 0x59, 0x80, 0x3a, 0x44, 0xbc, 0xdd, 0x09, 0xe0, 0x56, 0x19, 0x6d, 0xa4, 0x00, 0x7a, 0xe2, 0xa3, 0x7f, 0x40, 0x57, 0xbf, 0x7e, 0x3b, 0x5e, 0x4a, 0x80, 0x23 } -, - /* Prime 2 */ - 64, - { 0xe3, 0xc5, 0xf8, 0xcb, 0xfd, 0x51, 0xc6, 0xc2, 0x66, 0xb1, 0xa3, 0x2f, 0xb2, 0xf6, 0xfa, 0x48, 0x9b, 0x97, 0x54, 0xb2, 0x27, 0xc7, 0x7f, 0x53, 0x59, 0xc5, 0x5d, 0xfa, 0x03, 0x80, 0xfe, 0x9a, 0x02, 0xb4, 0xd3, 0x95, 0x05, 0xf3, 0xab, 0x36, 0x95, 0x7c, 0xeb, 0xfa, 0xd5, 0x34, 0xd7, 0xf9, 0xa2, 0x67, 0xeb, 0xee, 0x19, 0xaf, 0xe5, 0xc6, 0x24, 0x04, 0x3e, 0x30, 0x19, 0xd0, 0xac, 0x63 } -, - /* Prime exponent 1 */ - 64, - { 0x2c, 0xf4, 0x79, 0x97, 0xdf, 0x1c, 0x62, 0x97, 0x1b, 0x33, 0x76, 0x1c, 0x19, 0xee, 0xd0, 0x3c, 0x96, 0xa7, 0x15, 0xc0, 0x3f, 0x7c, 0x59, 0x57, 0x0e, 0x73, 0x82, 0x94, 0xb6, 0xaf, 0x2c, 0xc0, 0xbb, 0x80, 0x6a, 0xa1, 0xd3, 0x26, 0x55, 0x78, 0xbd, 0x89, 0x65, 0xf2, 0x0a, 0xf4, 0xed, 0x32, 0x1a, 0xc6, 0xc7, 0xdb, 0x61, 0x82, 0x10, 0xd1, 0xde, 0xc1, 0x47, 0x17, 0x97, 0xd2, 0xa1, 0xb7 } -, - /* Prime exponent 2 */ - 64, - { 0xa6, 0xc0, 0x29, 0xbb, 0xd5, 0x91, 0xc7, 0xcc, 0x4c, 0x78, 0x61, 0xfa, 0xaa, 0xaf, 0x8b, 0x5e, 0x1a, 0xa2, 0x78, 0x7c, 0x11, 0x09, 0x49, 0x5a, 0xd1, 0x0e, 0xe0, 0x15, 0x07, 0xf9, 0xa8, 0xeb, 0x41, 0x6d, 0xf6, 0xb4, 0x53, 0xee, 0x26, 0xfb, 0x48, 0x07, 0x73, 0x8f, 0x68, 0x05, 0x4e, 0xd4, 0x50, 0x24, 0x7a, 0xa2, 0x0e, 0xa6, 0x2a, 0xb6, 0x9b, 0x69, 0x8b, 0xc9, 0x95, 0x2c, 0xa2, 0xf7 } -, - /* Coefficient */ - 64, - { 0xaa, 0xd0, 0x60, 0xde, 0x5e, 0xdb, 0x35, 0x81, 0x8b, 0xd6, 0x3e, 0x85, 0xd4, 0x2e, 0xee, 0x55, 0xe4, 0xcf, 0x8f, 0xa4, 0x2d, 0x4e, 0xa5, 0x92, 0x83, 0xce, 0xf9, 0x6a, 0xca, 0xad, 0x55, 0x5d, 0x47, 0x8d, 0x2f, 0xd7, 0xc3, 0x8f, 0xa9, 0x31, 0xfa, 0x1a, 0xeb, 0x6d, 0xe5, 0x66, 0x55, 0x3d, 0x08, 0xf1, 0xcb, 0xc0, 0x6a, 0x51, 0x0f, 0xc2, 0xe5, 0x69, 0xb5, 0xa8, 0x22, 0x67, 0xac, 0x91 } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 6.1", - /* Message */ - 19, - { 0xa3, 0xe1, 0x52, 0x75, 0xfb, 0x33, 0xae, 0xc3, 0x7b, 0xd3, 0xdd, 0x58, 0x2e, 0x19, 0xf5, 0xd3, 0x8b, 0x9d, 0x0d } -, - /* Seed */ - 106, - { 0x78, 0xda, 0xa6, 0x1c, 0x07, 0xf9, 0x41, 0xb4, 0xb4, 0x40, 0xe7, 0x38, 0x33, 0x8d, 0x06, 0xcc, 0x15, 0x7a, 0x01, 0x57, 0x4a, 0x72, 0xfa, 0x78, 0xd3, 0x63, 0xdc, 0xe9, 0x94, 0x09, 0x04, 0x22, 0x0a, 0x71, 0x32, 0x35, 0x69, 0x96, 0xf0, 0x7c, 0x01, 0xd5, 0x4e, 0xe5, 0x4f, 0xa3, 0x2c, 0x5f, 0xaa, 0x1b, 0x90, 0xd2, 0x43, 0x0c, 0x80, 0xa2, 0x32, 0x17, 0xe0, 0x6b, 0xb1, 0xc8, 0x04, 0x3d, 0x61, 0xff, 0xa1, 0x8a, 0xa1, 0xd1, 0x8e, 0x15, 0xe4, 0x30, 0xaa, 0x12, 0x1c, 0xdf, 0xf4, 0x3f, 0xab, 0x2b, 0xb0, 0xde, 0xbf, 0x73, 0xe3, 0xd5, 0xa7, 0x5b, 0x46, 0xf9, 0x0d, 0xf7, 0x3d, 0x65, 0x6b, 0xb0, 0x66, 0xac, 0x1c, 0x76, 0x8f, 0xa3, 0x83, 0xe4 } -, - /* Encryption */ - 128, - { 0x9b, 0xf1, 0xdc, 0xfc, 0x65, 0x4c, 0xa7, 0xa2, 0x3d, 0x80, 0xa1, 0x2c, 0x09, 0xc2, 0x59, 0xd0, 0x4b, 0xae, 0x07, 0xe8, 0x31, 0xf6, 0x09, 0xe9, 0xf0, 0x35, 0xd3, 0x56, 0x41, 0x4e, 0xd1, 0x06, 0xf9, 0xb4, 0x62, 0x35, 0xfa, 0x3d, 0xa9, 0x1a, 0x32, 0xb8, 0xfd, 0xc8, 0xfb, 0x88, 0x30, 0xc9, 0x65, 0x23, 0xdc, 0xaa, 0x9b, 0x25, 0x38, 0xfc, 0x01, 0x02, 0xdc, 0x0f, 0x7a, 0x5f, 0xae, 0x86, 0x35, 0xb3, 0xb1, 0x23, 0x14, 0xc3, 0x90, 0x55, 0xfa, 0xac, 0xfb, 0xe0, 0x0a, 0x15, 0x16, 0x34, 0x24, 0x14, 0x8c, 0xc9, 0xe0, 0xf0, 0xab, 0x42, 0xdf, 0x09, 0x02, 0x3c, 0x05, 0x2a, 0x46, 0xae, 0x3f, 0x86, 0xa1, 0x8d, 0xcc, 0x53, 0x80, 0xce, 0x39, 0x06, 0x2e, 0x36, 0x23, 0x75, 0xd3, 0xa5, 0xf9, 0xe3, 0xb3, 0x4a, 0x5d, 0xa2, 0x5c, 0xf0, 0xde, 0x9c, 0xc1, 0x9c, 0x4d, 0x04, 0xf6, 0x3f } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 6.2", - /* Message */ - 50, - { 0x44, 0x3a, 0xb0, 0x3c, 0x46, 0x04, 0xdb, 0xd8, 0xbf, 0x80, 0x06, 0xae, 0xcc, 0x2a, 0xa8, 0xde, 0x64, 0xa1, 0x55, 0xb4, 0xf9, 0x0c, 0xdb, 0x08, 0x59, 0x98, 0x6d, 0x5c, 0xa3, 0x60, 0x66, 0x03, 0x59, 0x80, 0x8c, 0x59, 0xbd, 0x9c, 0x2d, 0xe7, 0x75, 0xfc, 0x18, 0x52, 0x02, 0x24, 0xb6, 0x69, 0xc3, 0x25 } -, - /* Seed */ - 75, - { 0x3a, 0x6a, 0x60, 0x89, 0xf7, 0x27, 0xdd, 0x16, 0x92, 0x97, 0xa5, 0x79, 0xfc, 0xaf, 0x8e, 0xa7, 0xf8, 0xe1, 0x2d, 0x54, 0x27, 0xf1, 0xf7, 0x90, 0x1a, 0x90, 0x22, 0xa2, 0x1e, 0x2d, 0x82, 0xd2, 0xf0, 0x8e, 0x63, 0xba, 0xca, 0x26, 0x7b, 0x65, 0x3a, 0xaf, 0x89, 0xde, 0x23, 0x2b, 0xa3, 0xd3, 0x92, 0xd1, 0xcb, 0x49, 0xdd, 0x76, 0xb3, 0x88, 0xb2, 0xda, 0xdf, 0xb0, 0x09, 0x4f, 0xda, 0x97, 0x18, 0xf1, 0x78, 0x37, 0x38, 0xd1, 0x8f, 0xa7, 0xaa, 0xa6, 0x29 } -, - /* Encryption */ - 128, - { 0x5a, 0x0a, 0xe0, 0xde, 0x28, 0xfd, 0x33, 0xcc, 0x98, 0x01, 0xbf, 0x4d, 0xd3, 0x06, 0x71, 0x23, 0x74, 0x53, 0x63, 0xca, 0xce, 0x4d, 0xd8, 0xb7, 0xb8, 0xb8, 0x11, 0xd6, 0x48, 0x2f, 0x59, 0x12, 0x0c, 0x0d, 0x65, 0x3e, 0xee, 0x86, 0xa6, 0x1a, 0x01, 0x2a, 0x18, 0x0e, 0xc5, 0xd1, 0x7e, 0x99, 0x14, 0x6d, 0x0c, 0xca, 0x0a, 0x58, 0x7c, 0x85, 0xcf, 0x01, 0xdc, 0x7a, 0xdd, 0x84, 0x23, 0x0d, 0x91, 0x80, 0xbd, 0xdf, 0x5a, 0x77, 0x19, 0xf6, 0x9d, 0x1f, 0xc4, 0x81, 0xaf, 0x6f, 0x47, 0xdb, 0x8c, 0xbd, 0x4e, 0xe1, 0x87, 0x1a, 0x57, 0x3f, 0xc8, 0x76, 0x7c, 0xe8, 0xbe, 0xed, 0xb5, 0xc7, 0x3f, 0xa9, 0x3f, 0x0c, 0x53, 0x80, 0x4a, 0xfe, 0x2e, 0x76, 0xcc, 0xeb, 0xb8, 0x7c, 0xba, 0x00, 0xcd, 0xac, 0x94, 0xde, 0x40, 0xe2, 0xb0, 0xbe, 0xaa, 0x8e, 0x2e, 0x41, 0x58, 0xc7, 0x78, 0x50 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.3", - /* Message */ - 57, - { 0xd1, 0xba, 0x30, 0xe8, 0x8c, 0xdd, 0xa3, 0x3d, 0x2b, 0x41, 0x89, 0x6f, 0x43, 0xdf, 0x08, 0x1e, 0xef, 0x20, 0xca, 0xf7, 0x8d, 0x7c, 0x1b, 0x97, 0x0c, 0x6a, 0x61, 0x72, 0xe8, 0x38, 0x39, 0xdc, 0x43, 0xd4, 0xbe, 0x29, 0xf9, 0xa7, 0x72, 0xba, 0x41, 0x59, 0x73, 0x8b, 0xc6, 0x13, 0x29, 0x68, 0x61, 0x8d, 0xc7, 0x19, 0x7c, 0x0e, 0xdc, 0x57, 0xa1 } -, - /* Seed */ - 68, - { 0x9b, 0xb6, 0x2b, 0xf9, 0xa7, 0x51, 0xfe, 0x41, 0x81, 0x66, 0x43, 0x68, 0x98, 0xed, 0xe8, 0x35, 0xcf, 0xae, 0xe2, 0xf5, 0x0e, 0xfc, 0xad, 0x60, 0x94, 0x2f, 0x2f, 0xb2, 0xda, 0x1a, 0x20, 0x38, 0x03, 0xf0, 0xbe, 0x80, 0xbe, 0xb1, 0x7f, 0xfa, 0xd0, 0xda, 0xb2, 0x18, 0xb1, 0x28, 0x02, 0x7f, 0x34, 0x97, 0xa4, 0xf8, 0xd4, 0x1a, 0xb9, 0xa1, 0xbe, 0x26, 0x4e, 0x96, 0xb4, 0x45, 0x48, 0x76, 0x7b, 0xe8, 0xd4, 0xa7 } -, - /* Encryption */ - 128, - { 0x81, 0x19, 0x1c, 0x54, 0x75, 0x27, 0x3d, 0xe6, 0x6a, 0x41, 0xbf, 0x56, 0x04, 0xf3, 0x2b, 0x58, 0xb7, 0x59, 0xa1, 0x4e, 0x74, 0x26, 0xc7, 0x46, 0xde, 0x4b, 0x53, 0xba, 0xf7, 0x80, 0xbb, 0xa4, 0x2b, 0x42, 0xe9, 0x27, 0x8a, 0xa9, 0x45, 0x27, 0xf0, 0xee, 0xbf, 0x85, 0x5f, 0x46, 0x2d, 0x6f, 0xbb, 0x29, 0x78, 0xa4, 0x65, 0x30, 0x37, 0xd8, 0xb4, 0x48, 0xe1, 0xb8, 0x07, 0xa1, 0x83, 0x1d, 0xbc, 0x53, 0x22, 0xd0, 0x66, 0x98, 0x4e, 0xec, 0x28, 0x11, 0x4f, 0xb7, 0x20, 0x1c, 0x79, 0x6b, 0x57, 0x3a, 0xdc, 0xc5, 0xcc, 0x92, 0x7f, 0x3a, 0x58, 0x97, 0xb2, 0x00, 0x55, 0x64, 0xef, 0x1a, 0x2c, 0x01, 0x67, 0xf5, 0x43, 0x65, 0x51, 0x18, 0x34, 0xac, 0x6f, 0x49, 0x58, 0xb8, 0x31, 0x8d, 0x09, 0xe6, 0x78, 0x54, 0xd6, 0x31, 0xca, 0x52, 0x80, 0x76, 0x86, 0xab, 0x70, 0x5d, 0x71, 0xa3 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.4", - /* Message */ - 47, - { 0xa5, 0x4b, 0xc2, 0x27, 0x8b, 0x56, 0x76, 0x85, 0xc9, 0xb5, 0x68, 0x54, 0xe4, 0xc1, 0xc4, 0x06, 0xd9, 0x16, 0x17, 0x47, 0xc6, 0x81, 0x34, 0x80, 0x16, 0x3e, 0xe3, 0xaf, 0x23, 0xb2, 0x1e, 0xd1, 0x99, 0x83, 0xe0, 0xf4, 0x2b, 0xfc, 0x93, 0x25, 0xcb, 0x5c, 0x82, 0xe1, 0xa4, 0x7b, 0x8f } -, - /* Seed */ - 78, - { 0xcc, 0xba, 0x5f, 0xa5, 0xc9, 0x4e, 0x79, 0x83, 0x2a, 0xb0, 0x46, 0xc9, 0x77, 0x74, 0x95, 0xb1, 0x63, 0xbd, 0x3a, 0xf2, 0x17, 0x59, 0x0f, 0xec, 0x5a, 0xc4, 0x8c, 0x62, 0x78, 0x6a, 0x27, 0xf3, 0x70, 0xd2, 0x85, 0x99, 0x55, 0xe4, 0x5a, 0xfb, 0x2b, 0x79, 0xf1, 0x2d, 0xe4, 0x16, 0x11, 0x45, 0xbe, 0x62, 0xac, 0x13, 0xa0, 0x3b, 0xf4, 0x81, 0x95, 0xfb, 0x9e, 0x5a, 0x18, 0xb8, 0x2d, 0xeb, 0xbf, 0x3d, 0xdf, 0xc8, 0x08, 0x25, 0xd5, 0x93, 0xfc, 0xd4, 0x02, 0xe7, 0x4e, 0xef } -, - /* Encryption */ - 128, - { 0x3d, 0xe4, 0xc3, 0xe0, 0x59, 0x35, 0x7b, 0x8a, 0x54, 0x83, 0x7e, 0xa1, 0x59, 0x62, 0xcf, 0xe2, 0x00, 0x7c, 0x5e, 0xa8, 0x98, 0x5c, 0x93, 0x51, 0x91, 0x64, 0xa6, 0x89, 0xb7, 0x55, 0xb6, 0x1c, 0x8b, 0xd2, 0x73, 0x96, 0x9d, 0x33, 0x3c, 0x4b, 0xcd, 0x9b, 0x06, 0x03, 0x53, 0xc3, 0x7b, 0xaf, 0x13, 0xeb, 0x42, 0x2f, 0x1c, 0xb9, 0x77, 0x56, 0xe6, 0xb4, 0x94, 0x6a, 0xdf, 0xe1, 0xaf, 0x75, 0xe9, 0xfe, 0x2d, 0x95, 0xb4, 0xb1, 0x3d, 0xa1, 0x73, 0x2b, 0xd8, 0xb8, 0xbe, 0x11, 0x97, 0x02, 0x79, 0x19, 0x53, 0x0c, 0x34, 0x7f, 0x3d, 0xd1, 0x03, 0x9e, 0x34, 0x8a, 0x53, 0xb1, 0x16, 0xf9, 0xf8, 0xfe, 0x89, 0x36, 0xa8, 0x4a, 0xcc, 0x39, 0xf2, 0xe0, 0x69, 0x56, 0xb6, 0x78, 0xd2, 0x0f, 0xdf, 0x95, 0x17, 0x07, 0x2e, 0x02, 0xf5, 0x70, 0x78, 0xfd, 0xc0, 0x46, 0x59, 0x40, 0x0c, 0x5c } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.5", - /* Message */ - 58, - { 0xf3, 0xc0, 0x0b, 0x00, 0x9e, 0x5e, 0x08, 0xa6, 0x3b, 0xe1, 0xe4, 0x00, 0x35, 0xcd, 0xac, 0xa5, 0x01, 0x1c, 0xc7, 0x01, 0xcf, 0x7e, 0xeb, 0xcb, 0x99, 0xf0, 0xff, 0xe1, 0x7c, 0xfd, 0x0a, 0x4b, 0xf7, 0xbe, 0xfd, 0x2d, 0xd5, 0x36, 0xac, 0x94, 0x6d, 0xb7, 0x97, 0xfd, 0xbc, 0x67, 0x9c, 0xbe, 0x68, 0xf1, 0xa2, 0xf3, 0x62, 0x59, 0xc5, 0x58, 0xf0, 0x4d } -, - /* Seed */ - 67, - { 0xe2, 0x2d, 0x5e, 0x43, 0xb1, 0xeb, 0xa1, 0xac, 0x0c, 0xe6, 0x5c, 0x32, 0x70, 0x51, 0x0e, 0x0f, 0x13, 0xc9, 0x4e, 0x96, 0x24, 0xee, 0x52, 0x56, 0x59, 0xef, 0x4d, 0x57, 0x37, 0x88, 0x20, 0xc9, 0x35, 0x22, 0x9b, 0x30, 0x99, 0xaa, 0x2b, 0x23, 0x50, 0x61, 0x4f, 0x8c, 0xc4, 0x29, 0x58, 0x15, 0xa2, 0xc9, 0xed, 0xb2, 0xd9, 0xc5, 0x9c, 0x73, 0xd1, 0xaa, 0x90, 0x0c, 0x21, 0x34, 0xc0, 0xa7, 0xd0, 0x90, 0x9c } -, - /* Encryption */ - 128, - { 0x53, 0x3e, 0x67, 0xa2, 0xbc, 0x5b, 0x3f, 0x01, 0x34, 0x2d, 0x8c, 0xb8, 0xd9, 0x25, 0xd7, 0x3b, 0x4d, 0xb3, 0x4c, 0xb6, 0x75, 0xda, 0x90, 0x39, 0x22, 0x6a, 0x98, 0xe4, 0xd8, 0x13, 0xc6, 0x20, 0x11, 0x09, 0x90, 0xa8, 0xe6, 0xac, 0xba, 0x50, 0xfd, 0x04, 0xf3, 0x30, 0x7d, 0xeb, 0xaf, 0x20, 0xd4, 0xf3, 0x74, 0xcf, 0x6d, 0xe0, 0xd9, 0xb2, 0x1d, 0x86, 0xe2, 0x66, 0x07, 0x9c, 0xf2, 0xf1, 0x8b, 0x45, 0x03, 0x20, 0x8a, 0x21, 0x5d, 0xe2, 0xb1, 0x1c, 0xca, 0x9e, 0x34, 0x64, 0xfc, 0x5a, 0xc1, 0xdd, 0x7e, 0x96, 0xb2, 0xfc, 0x04, 0x09, 0xe4, 0x2f, 0x46, 0xa5, 0x06, 0x12, 0xa6, 0xb2, 0x06, 0x1e, 0xd1, 0x61, 0x9a, 0x7f, 0xe4, 0x67, 0x96, 0xed, 0x8f, 0x52, 0x06, 0x9a, 0x5b, 0xfc, 0x84, 0x08, 0xd5, 0x58, 0xf5, 0x2a, 0x03, 0x33, 0x2e, 0xe8, 0xed, 0xde, 0xf8, 0xf7, 0x45, 0xd9 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.6", - /* Message */ - 53, - { 0xaa, 0xfe, 0x5b, 0x27, 0x11, 0x11, 0xef, 0xb8, 0x79, 0x2f, 0x5a, 0xa9, 0x23, 0x83, 0x07, 0x29, 0x76, 0xb7, 0x2a, 0x0a, 0x27, 0x2f, 0x90, 0xc5, 0x24, 0x61, 0xf8, 0x8a, 0xfb, 0x1b, 0xb6, 0xb7, 0xec, 0x26, 0x38, 0x1c, 0x65, 0x76, 0xa4, 0x10, 0x87, 0xa0, 0x39, 0x80, 0x9d, 0x14, 0xf6, 0x11, 0x60, 0x67, 0x59, 0x4e, 0xbb } -, - /* Seed */ - 72, - { 0x75, 0x0e, 0xf0, 0x86, 0x9f, 0x8c, 0x75, 0x7e, 0xf4, 0x31, 0x57, 0x8b, 0x45, 0xa6, 0xe7, 0x41, 0xbd, 0x1d, 0x96, 0x0e, 0xfc, 0x37, 0x89, 0xb1, 0x0d, 0x2b, 0xde, 0x27, 0x38, 0x18, 0x07, 0x4e, 0xbf, 0xe5, 0xfa, 0xae, 0x10, 0xac, 0x24, 0x4f, 0x89, 0xf6, 0xc0, 0x2d, 0xe5, 0xd1, 0xad, 0xae, 0xfc, 0x7a, 0x8f, 0xd2, 0x4d, 0x7b, 0xc3, 0x76, 0xfd, 0x65, 0xd3, 0x5e, 0x39, 0x50, 0x8c, 0x42, 0x36, 0xac, 0xbe, 0x2d, 0x5c, 0xa7, 0x69, 0x4b } -, - /* Encryption */ - 128, - { 0x34, 0x4d, 0x43, 0x37, 0x61, 0x2b, 0x22, 0xdd, 0x40, 0x2b, 0xe3, 0x79, 0xe6, 0xb2, 0x65, 0x0b, 0x51, 0x9e, 0xf3, 0x7b, 0x7a, 0xb4, 0x85, 0x81, 0x94, 0x52, 0xd1, 0x67, 0xc1, 0xb2, 0x15, 0xdb, 0xd3, 0xfb, 0x24, 0xf9, 0xb2, 0xf9, 0x29, 0x86, 0x69, 0xcb, 0x1a, 0xee, 0x14, 0x1a, 0x7d, 0x89, 0x01, 0x64, 0x20, 0x43, 0x11, 0x1f, 0xc3, 0x8b, 0x3f, 0x40, 0xef, 0x0b, 0x7f, 0xfd, 0x7d, 0xf7, 0x6c, 0x2d, 0x92, 0xe3, 0x29, 0x41, 0x1c, 0x75, 0xe0, 0xf1, 0x72, 0x85, 0xbb, 0x6b, 0xb8, 0x26, 0x88, 0x12, 0x8e, 0xd9, 0xbb, 0x95, 0x1c, 0xae, 0xdd, 0x7d, 0x06, 0x7e, 0xdd, 0x0b, 0x13, 0xe8, 0x27, 0x5a, 0xc8, 0x86, 0x25, 0xd9, 0x7c, 0xe8, 0xd2, 0x0b, 0x69, 0xb3, 0x57, 0x38, 0xb2, 0xf4, 0x72, 0x6e, 0x29, 0x84, 0xb8, 0xdf, 0xa8, 0x66, 0x95, 0xaa, 0xe8, 0x8d, 0x9e, 0x17, 0x6d, 0xf6 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.7", - /* Message */ - 37, - { 0xa1, 0x22, 0x4d, 0xf9, 0xaa, 0xb6, 0x58, 0x78, 0x45, 0xb2, 0xa3, 0x93, 0xa5, 0xa8, 0x76, 0xc1, 0x7d, 0x95, 0x9d, 0x53, 0x5b, 0x54, 0x19, 0xd4, 0x12, 0xa9, 0xa5, 0x31, 0xbb, 0x43, 0x7e, 0x1d, 0xac, 0x1b, 0x54, 0x6d, 0x62 } -, - /* Seed */ - 88, - { 0x76, 0x1d, 0xc4, 0xf5, 0x1b, 0xc8, 0x51, 0x8d, 0x62, 0x7c, 0x45, 0xb3, 0xe9, 0x81, 0x8b, 0x85, 0x42, 0xa0, 0x6f, 0xfe, 0x17, 0x2b, 0xe3, 0xaf, 0x5c, 0xe7, 0xa9, 0x05, 0x3f, 0xe5, 0x4e, 0x69, 0x70, 0x12, 0x49, 0x73, 0x37, 0x4d, 0xfc, 0xc1, 0xf4, 0x9f, 0xcf, 0xfe, 0x95, 0x7a, 0xae, 0x8c, 0x9c, 0x3b, 0x13, 0x0f, 0x46, 0x05, 0xd2, 0xc3, 0xef, 0xa2, 0x93, 0x2a, 0xd0, 0x83, 0xde, 0xc5, 0x8e, 0x70, 0xd4, 0xf6, 0x92, 0x6c, 0x80, 0xb5, 0xd4, 0x89, 0x1a, 0x1a, 0x55, 0x9e, 0xdb, 0x0c, 0xaf, 0xfa, 0xca, 0xd7, 0x5e, 0xb2, 0x64, 0x83 } -, - /* Encryption */ - 128, - { 0x78, 0x5f, 0x6a, 0xaa, 0xb4, 0xd2, 0xf3, 0x18, 0xd4, 0xaf, 0x37, 0xb6, 0xe0, 0x07, 0x4e, 0xd5, 0xa4, 0x19, 0x4f, 0xa6, 0x05, 0xa7, 0xec, 0x87, 0xd0, 0x5a, 0x07, 0xf3, 0x34, 0x9b, 0x5b, 0x92, 0xf5, 0xfc, 0x47, 0x90, 0xea, 0xb1, 0x37, 0x86, 0xcb, 0xf0, 0x35, 0xc7, 0x8f, 0xfc, 0xf1, 0x34, 0x4d, 0x1f, 0x3e, 0xcd, 0xaa, 0xe0, 0x16, 0x72, 0x22, 0x2e, 0x6d, 0x4a, 0x96, 0x55, 0x59, 0xe2, 0xc0, 0x82, 0x91, 0xcb, 0x1d, 0x4c, 0x2d, 0x4e, 0x68, 0xff, 0x8e, 0xe7, 0x15, 0x23, 0xf6, 0xdd, 0xae, 0xc5, 0x0a, 0x4a, 0xb2, 0x2e, 0xdc, 0xa2, 0x47, 0x36, 0x4c, 0x92, 0xd8, 0x73, 0x99, 0xe8, 0xa7, 0x1d, 0xf7, 0x43, 0x6b, 0x62, 0xd8, 0xba, 0x8a, 0xd2, 0x02, 0x94, 0xcb, 0xc6, 0x0d, 0xca, 0xe0, 0x30, 0x5c, 0x79, 0x73, 0xf7, 0xfc, 0xb4, 0xa5, 0xcb, 0xed, 0x15, 0x71, 0x3a, 0x7a, 0x16 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.8", - /* Message */ - 48, - { 0x1e, 0x0e, 0x3f, 0x65, 0x0c, 0x32, 0xdb, 0xb2, 0xf6, 0x91, 0x6f, 0x36, 0xf1, 0x35, 0xbc, 0xae, 0x88, 0x1d, 0x54, 0x55, 0x07, 0x40, 0x2d, 0x6a, 0xfd, 0x3d, 0x5b, 0x3b, 0xd8, 0x38, 0x5a, 0x50, 0xb4, 0xfa, 0xd6, 0xf7, 0x89, 0x49, 0xfd, 0xe6, 0x21, 0x64, 0xed, 0x76, 0x89, 0xe5, 0xf9, 0xa4 } -, - /* Seed */ - 77, - { 0xee, 0xa9, 0x0a, 0x54, 0xd0, 0x16, 0xda, 0x7e, 0x8f, 0x08, 0x76, 0xa7, 0x33, 0xb0, 0xf2, 0xa0, 0x6f, 0x90, 0xa7, 0x3c, 0x1a, 0x3c, 0xd6, 0x39, 0xb6, 0xcf, 0xa9, 0x06, 0xce, 0x08, 0xef, 0x78, 0x8b, 0xb6, 0xfe, 0xa7, 0x4f, 0x22, 0xeb, 0x91, 0xa6, 0xab, 0x32, 0x84, 0xcd, 0xfc, 0x1e, 0x72, 0xe6, 0x3e, 0x78, 0xd1, 0x8a, 0x64, 0xd6, 0x7f, 0x9d, 0x1a, 0x29, 0x19, 0x49, 0xed, 0x2e, 0x32, 0x3e, 0x91, 0xdc, 0x03, 0x38, 0x76, 0xee, 0xeb, 0x09, 0xff, 0xa7, 0x1f, 0x59 } -, - /* Encryption */ - 128, - { 0x6b, 0xbd, 0xae, 0x20, 0xf9, 0x89, 0xbf, 0xaa, 0x5d, 0x65, 0xda, 0xdc, 0xd6, 0x1a, 0x86, 0xb6, 0x63, 0x07, 0xa0, 0x60, 0x2f, 0xb5, 0x51, 0xa7, 0x38, 0x06, 0x12, 0x2d, 0xb1, 0x88, 0xec, 0x1d, 0x41, 0xe8, 0x4d, 0xaa, 0x2c, 0xc7, 0xd6, 0xbe, 0x54, 0x1e, 0x12, 0x28, 0x88, 0x09, 0xa1, 0x7e, 0x08, 0x5f, 0x2c, 0xaf, 0xa8, 0xae, 0x13, 0x67, 0x0e, 0x0f, 0x33, 0x65, 0xa1, 0x47, 0x1c, 0xb3, 0x15, 0x7c, 0x06, 0xe0, 0xf6, 0x3b, 0x82, 0x00, 0xf3, 0x16, 0x0c, 0x16, 0x3f, 0xde, 0x7c, 0x90, 0x1e, 0xf3, 0x26, 0xe5, 0x70, 0x0c, 0x9f, 0x5e, 0x07, 0xfe, 0x01, 0x98, 0x81, 0x0f, 0xa8, 0x0c, 0x8c, 0x5d, 0xc5, 0x3a, 0x50, 0xbc, 0xe2, 0x54, 0xf7, 0xd1, 0x99, 0x01, 0xcf, 0x6c, 0xbb, 0x60, 0x34, 0x13, 0xe4, 0x1f, 0x90, 0x30, 0xe7, 0x39, 0xc8, 0xba, 0x96, 0x49, 0x97, 0x84, 0x74, 0x99 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.9", - /* Message */ - 32, - { 0x73, 0xdd, 0xf0, 0xa1, 0x4d, 0x57, 0xba, 0x65, 0xb4, 0xf6, 0x93, 0xac, 0x76, 0x1e, 0x20, 0x2b, 0x1e, 0x5b, 0x85, 0x7c, 0x8b, 0x34, 0x04, 0xe1, 0x41, 0x85, 0xdf, 0xa8, 0xaa, 0xf0, 0x49, 0x89 } -, - /* Seed */ - 93, - { 0xfd, 0x43, 0x3d, 0x7b, 0x01, 0x76, 0xb7, 0x31, 0xd7, 0x80, 0xdd, 0x6c, 0x58, 0x51, 0xb8, 0x2f, 0x17, 0x6d, 0x62, 0xb8, 0x0d, 0x96, 0xae, 0xb6, 0x31, 0xd7, 0xfb, 0x8a, 0xc5, 0xbe, 0x55, 0xac, 0x21, 0x7f, 0x4e, 0x08, 0xbc, 0x7e, 0xcf, 0x81, 0xf8, 0xe3, 0xf5, 0xdd, 0xaa, 0xcd, 0xc6, 0xc2, 0x17, 0x8d, 0xf7, 0x81, 0x88, 0x23, 0x97, 0x53, 0x3a, 0x63, 0x8e, 0x62, 0xf0, 0x74, 0xac, 0x48, 0x8f, 0x4c, 0x12, 0xaa, 0x57, 0xbe, 0x2e, 0xce, 0x5b, 0xb6, 0xe9, 0x09, 0x6c, 0xd9, 0x22, 0x59, 0xa4, 0x5b, 0x0b, 0x03, 0x2f, 0x10, 0x14, 0x31, 0xa2, 0x8b, 0x86, 0x40, 0xfb } -, - /* Encryption */ - 128, - { 0xae, 0x97, 0xff, 0x43, 0x4e, 0x9a, 0x5e, 0xe4, 0x87, 0x76, 0x1d, 0xb3, 0x56, 0x90, 0x0b, 0x06, 0x37, 0x37, 0x46, 0x5b, 0xe5, 0x05, 0x8d, 0xc0, 0x3a, 0x28, 0xa3, 0x22, 0xe5, 0xc0, 0xe0, 0x91, 0xb7, 0x99, 0xbf, 0x65, 0x94, 0x55, 0xcf, 0xbe, 0x05, 0x42, 0x7a, 0xc4, 0xd0, 0x44, 0x05, 0xe5, 0x6e, 0xe0, 0x4e, 0x06, 0x3a, 0x23, 0x73, 0xdb, 0xcb, 0x9b, 0x4f, 0xa1, 0x6e, 0x43, 0x07, 0x94, 0x6a, 0x49, 0xb3, 0x56, 0x34, 0x52, 0x0d, 0x41, 0x6f, 0x65, 0xc3, 0xc3, 0x22, 0xed, 0xc5, 0x46, 0x71, 0x56, 0x91, 0x28, 0xa2, 0xa1, 0x52, 0xa7, 0x6f, 0xe4, 0x44, 0xc4, 0x30, 0xaa, 0x6f, 0x03, 0xc4, 0x12, 0x9c, 0x6e, 0x21, 0x31, 0x75, 0x5d, 0x76, 0x4c, 0xec, 0x4a, 0x14, 0x86, 0xa8, 0x1b, 0xa8, 0xa3, 0x16, 0x8d, 0x16, 0xe7, 0x4d, 0xca, 0x8e, 0x77, 0xbb, 0xfd, 0x67, 0xea, 0x37, 0x2b } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.10", - /* Message */ - 29, - { 0xef, 0x3e, 0x76, 0x98, 0xe7, 0xd9, 0xcc, 0x86, 0x3b, 0x46, 0x6b, 0xb2, 0x88, 0x55, 0x6e, 0x4a, 0xc2, 0x52, 0x82, 0xe0, 0x94, 0xfb, 0x5b, 0x57, 0xc1, 0x76, 0x17, 0xbb, 0x98 } -, - /* Seed */ - 96, - { 0xdb, 0x90, 0xa7, 0x58, 0x0d, 0x8d, 0x42, 0x9e, 0x22, 0xbd, 0x7e, 0xa5, 0xc7, 0xb4, 0xcd, 0x0c, 0x65, 0xad, 0x0e, 0x2e, 0x27, 0xf5, 0x33, 0x41, 0xbc, 0x23, 0xa8, 0xb1, 0x35, 0x8a, 0x76, 0xa0, 0xb5, 0xe9, 0x4f, 0xc5, 0xb4, 0x2a, 0x9f, 0x75, 0x6c, 0xc6, 0x3b, 0x9d, 0x62, 0x3f, 0x55, 0x17, 0x67, 0xfb, 0xc6, 0xf7, 0x11, 0x4e, 0x40, 0xba, 0x73, 0x61, 0xfd, 0x32, 0xd6, 0xf8, 0xd7, 0x72, 0x34, 0x37, 0x43, 0x6d, 0xf7, 0x24, 0xb1, 0x32, 0x7a, 0xae, 0xf7, 0xb9, 0x57, 0x56, 0x27, 0x68, 0xf8, 0xfa, 0xdd, 0x57, 0x86, 0x2b, 0xa0, 0xb3, 0x14, 0x09, 0x6a, 0x3b, 0x38, 0x77, 0x0e, 0x31 } -, - /* Encryption */ - 128, - { 0x43, 0xf8, 0xcc, 0xce, 0xa8, 0x12, 0xd3, 0x38, 0x5f, 0x43, 0xfa, 0x83, 0x7c, 0xb5, 0xe6, 0xfa, 0x59, 0x0f, 0x1a, 0xff, 0xb8, 0x62, 0xd2, 0xca, 0xcc, 0xc6, 0xd8, 0xe8, 0xbb, 0x5d, 0x5c, 0x0d, 0x50, 0xff, 0xb9, 0xf8, 0xf8, 0x09, 0x89, 0x00, 0xc1, 0x2e, 0x77, 0x2a, 0x84, 0x7b, 0x37, 0x81, 0x57, 0x78, 0x2b, 0x0a, 0x90, 0x40, 0xf7, 0xa6, 0x16, 0xc2, 0xeb, 0x05, 0x8e, 0x44, 0xd4, 0xa7, 0xe2, 0x0b, 0x48, 0x5a, 0xc2, 0x9f, 0x40, 0xd6, 0x8e, 0x03, 0xc3, 0x9d, 0xdc, 0x8d, 0xae, 0x7e, 0x7e, 0x09, 0xe2, 0x8f, 0x9d, 0xd2, 0x19, 0x0f, 0x3a, 0x9f, 0x35, 0x74, 0xb2, 0xf6, 0x34, 0x00, 0x15, 0x44, 0x36, 0x3c, 0x86, 0x1f, 0xe2, 0x7f, 0x7a, 0x39, 0x23, 0x66, 0x92, 0xfe, 0x35, 0x82, 0x14, 0x0b, 0x21, 0x72, 0xce, 0x64, 0x7e, 0xed, 0x41, 0x76, 0x85, 0xc6, 0xe1, 0xdb, 0x85, 0x6c } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.11", - /* Message */ - 31, - { 0xf8, 0x69, 0x18, 0x47, 0x4f, 0x88, 0x16, 0x97, 0x11, 0x1b, 0xdd, 0xdc, 0x1f, 0x00, 0x61, 0x3e, 0xb2, 0xc3, 0xd9, 0xc1, 0x78, 0x76, 0x68, 0x35, 0x3e, 0xbb, 0x02, 0xb3, 0x20, 0xa3, 0x26 } -, - /* Seed */ - 94, - { 0xcb, 0x7d, 0x99, 0xda, 0x9b, 0x11, 0xea, 0x57, 0xf6, 0x40, 0x55, 0x43, 0x44, 0x7d, 0xd1, 0x5f, 0xb5, 0xcc, 0xa0, 0xa1, 0x0f, 0x3b, 0x69, 0xb4, 0xd2, 0x33, 0x09, 0xef, 0xf2, 0x75, 0x0c, 0x48, 0x6c, 0xa6, 0x55, 0x32, 0x5b, 0x55, 0xa3, 0x27, 0xff, 0xe8, 0xbd, 0x6d, 0xca, 0x99, 0xbc, 0x8e, 0xfb, 0x5b, 0xc2, 0x94, 0x2e, 0xc0, 0x39, 0xe2, 0x84, 0x25, 0xe4, 0xa5, 0x6a, 0x07, 0xd3, 0x80, 0x12, 0xf1, 0x0d, 0x21, 0x5a, 0x22, 0xd6, 0x37, 0x68, 0x59, 0x43, 0xd3, 0x64, 0x72, 0x53, 0x01, 0xdd, 0x40, 0xe2, 0x17, 0x22, 0x8a, 0xb7, 0x91, 0x59, 0x89, 0x98, 0x83, 0x6b, 0xbf } -, - /* Encryption */ - 128, - { 0x2a, 0x40, 0x87, 0x80, 0xad, 0x51, 0x4e, 0x56, 0x71, 0xfe, 0x1d, 0xfc, 0x36, 0x7d, 0x7a, 0xa4, 0x65, 0xfc, 0x34, 0x69, 0xf1, 0xc1, 0x52, 0xae, 0xe1, 0x81, 0x45, 0xe0, 0xf5, 0xf0, 0x75, 0x9f, 0x44, 0x69, 0xb4, 0x3d, 0x55, 0x12, 0x3f, 0x5d, 0xc9, 0xff, 0xc6, 0x17, 0xf2, 0x3f, 0xa4, 0x9b, 0x78, 0x96, 0x02, 0x19, 0x66, 0x0e, 0xc6, 0x22, 0x74, 0xd6, 0xc5, 0x9b, 0xa3, 0x14, 0x60, 0xbd, 0x10, 0x94, 0x1e, 0xbb, 0x5e, 0x05, 0x69, 0x41, 0x51, 0xc5, 0x7b, 0x5b, 0x95, 0x88, 0xca, 0xf0, 0x9f, 0x45, 0x50, 0x20, 0xa5, 0x4e, 0x97, 0x7c, 0x3c, 0xc0, 0x27, 0xda, 0xe3, 0x1f, 0x2c, 0xe4, 0x42, 0x17, 0x02, 0x3e, 0x10, 0xad, 0xb6, 0xf2, 0xd8, 0xaa, 0x0f, 0x80, 0x84, 0xfc, 0x45, 0x86, 0x05, 0x80, 0x3f, 0xd4, 0x4b, 0x21, 0xab, 0xc2, 0x7b, 0xdb, 0x8d, 0x4c, 0x56, 0x17, 0x84, 0xcf } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.12", - /* Message */ - 22, - { 0x6a, 0x40, 0xbb, 0x60, 0x70, 0x8c, 0x5a, 0x99, 0x2e, 0xcf, 0xdc, 0x7e, 0xe5, 0x3f, 0x54, 0x08, 0x4d, 0x19, 0xaf, 0xfd, 0x4d, 0x21 } -, - /* Seed */ - 103, - { 0xc3, 0xf4, 0xfa, 0xca, 0x56, 0xc1, 0xff, 0x07, 0xd1, 0xad, 0x10, 0x37, 0x07, 0xd1, 0xb6, 0x68, 0x20, 0x47, 0xb4, 0xd9, 0xd6, 0x24, 0x6c, 0x2e, 0x5c, 0x4b, 0x0c, 0xe6, 0x55, 0x3d, 0x55, 0x31, 0x3f, 0x8f, 0x38, 0xae, 0xe5, 0xe4, 0xd8, 0x07, 0x3a, 0x55, 0xd2, 0x4a, 0xd7, 0x96, 0xc4, 0xb7, 0x61, 0x26, 0xc8, 0xaa, 0x61, 0xc4, 0x6a, 0x4e, 0xe8, 0x5f, 0xa9, 0x05, 0x7a, 0x52, 0x6c, 0xd0, 0xaa, 0x24, 0x5e, 0x58, 0x28, 0xf2, 0x18, 0x1b, 0x4a, 0x64, 0x79, 0x86, 0x87, 0x48, 0xe7, 0x47, 0x9f, 0x40, 0x34, 0x53, 0x3c, 0x0f, 0x3e, 0x1e, 0xb4, 0x35, 0xfa, 0x47, 0xd5, 0x3b, 0x58, 0xe4, 0x2c, 0x96, 0x17, 0xbf, 0x7e, 0x77, 0x7e } -, - /* Encryption */ - 128, - { 0xc4, 0x64, 0x11, 0xc7, 0x11, 0x6f, 0xe6, 0xf4, 0x6f, 0x1c, 0xa0, 0xf7, 0x4c, 0x60, 0x81, 0xa5, 0x5d, 0xf4, 0x1d, 0x2c, 0x0b, 0x8f, 0xc5, 0xd3, 0x8f, 0xaa, 0x34, 0x0b, 0x5e, 0xcf, 0x71, 0x83, 0xf8, 0x5f, 0x88, 0xc4, 0xfb, 0x28, 0xac, 0x5f, 0xb1, 0xf1, 0x8a, 0xeb, 0xfc, 0xfc, 0x10, 0xbf, 0xdd, 0x3a, 0x19, 0x00, 0x2c, 0x6b, 0x52, 0x24, 0x14, 0x92, 0x70, 0x4b, 0x6f, 0xe6, 0x3d, 0x61, 0xa7, 0x30, 0x10, 0xc1, 0x49, 0xff, 0x63, 0x03, 0x28, 0x3e, 0x99, 0x78, 0xcd, 0x84, 0x54, 0x04, 0xfa, 0x06, 0xb8, 0xc6, 0x98, 0xaa, 0xea, 0x8f, 0x86, 0x13, 0x61, 0xd8, 0x86, 0xb2, 0xc0, 0xf0, 0x1b, 0x47, 0xa1, 0xa9, 0xa3, 0xdd, 0x90, 0x3f, 0x8a, 0x58, 0xae, 0xd6, 0x6a, 0xfc, 0x85, 0xe9, 0xb7, 0x1e, 0xfc, 0x3f, 0x55, 0xa1, 0x21, 0x66, 0x74, 0x16, 0xa3, 0x00, 0x00, 0x13, 0x13, 0xe8 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.13", - /* Message */ - 13, - { 0x32, 0x52, 0xfe, 0x99, 0x62, 0x09, 0x74, 0xe0, 0x77, 0xd6, 0xeb, 0x55, 0x75 } -, - /* Seed */ - 112, - { 0xbf, 0x06, 0x9b, 0x4b, 0xcf, 0x15, 0x44, 0x8b, 0xc3, 0x9e, 0x45, 0xf4, 0x42, 0x6a, 0xad, 0x0d, 0x5d, 0x82, 0xb7, 0x4e, 0x93, 0xae, 0x1c, 0xdd, 0x71, 0xf7, 0x1b, 0xb9, 0xbe, 0xb9, 0xb2, 0x3d, 0x59, 0x73, 0x2f, 0x9c, 0x8b, 0xc6, 0x34, 0x3d, 0x13, 0x02, 0x31, 0xde, 0x18, 0xf7, 0xc8, 0x9f, 0xc2, 0xf4, 0x22, 0x18, 0x9c, 0xd9, 0x27, 0xe5, 0x09, 0xb1, 0x31, 0x97, 0xaa, 0x56, 0xd8, 0x1a, 0x73, 0x76, 0xf8, 0x33, 0x3e, 0x47, 0x42, 0x44, 0x8c, 0xc8, 0x92, 0xde, 0x40, 0x44, 0x97, 0x2c, 0x7f, 0x67, 0xdc, 0xbe, 0x85, 0x44, 0xa9, 0x0e, 0xec, 0x59, 0xe7, 0x95, 0xae, 0x59, 0x64, 0x08, 0x39, 0x2a, 0xf5, 0x77, 0x6d, 0xa0, 0xd6, 0xcb, 0x29, 0xc7, 0xe0, 0xa7, 0x86, 0x81, 0x30, 0xa7 } -, - /* Encryption */ - 128, - { 0x76, 0x53, 0xcb, 0xff, 0x58, 0x68, 0x92, 0xcd, 0xd2, 0x58, 0xbf, 0xe6, 0xba, 0xeb, 0xd9, 0x91, 0x45, 0xeb, 0x1b, 0x22, 0x89, 0x4e, 0x1a, 0x76, 0x4d, 0x02, 0xb2, 0xba, 0x99, 0x59, 0x52, 0xa0, 0x12, 0x58, 0x20, 0x8d, 0xe1, 0xa0, 0x1d, 0x8e, 0x8c, 0xbb, 0x5c, 0xda, 0xf0, 0xd6, 0x03, 0x69, 0x4f, 0x88, 0x25, 0x5e, 0x80, 0x90, 0x97, 0xb7, 0x0e, 0x9d, 0x79, 0xe6, 0x2b, 0xd5, 0xc0, 0xd8, 0x36, 0xdc, 0xc2, 0x9d, 0xd1, 0x9b, 0x05, 0xa1, 0x60, 0x26, 0x90, 0x42, 0x05, 0xb6, 0x0c, 0x45, 0x03, 0xd4, 0xfb, 0xe9, 0x93, 0x38, 0x55, 0xe8, 0x68, 0x02, 0xc7, 0x54, 0x28, 0xd9, 0xa6, 0x34, 0x73, 0x03, 0x16, 0x76, 0x32, 0xd3, 0x3c, 0x5d, 0x9e, 0xcc, 0x8a, 0xe2, 0x49, 0x3b, 0x58, 0xc3, 0x6b, 0x2a, 0x65, 0x53, 0xa7, 0xb9, 0xe2, 0xb1, 0x35, 0x8a, 0xe2, 0x8d, 0xad, 0x50, 0x28, 0x0d } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.14", - /* Message */ - 2, - { 0xdc, 0x94 } -, - /* Seed */ - 123, - { 0x05, 0xe8, 0x05, 0xbf, 0xfb, 0xd1, 0xb7, 0x4d, 0x1a, 0x5a, 0x83, 0x8d, 0x85, 0x71, 0x67, 0xb4, 0xc7, 0xd4, 0x0a, 0x6c, 0xd3, 0xe6, 0x8f, 0x31, 0xbe, 0x46, 0x93, 0xb9, 0x8c, 0xec, 0x6d, 0x75, 0x89, 0x49, 0x19, 0xab, 0x18, 0x57, 0x2c, 0x75, 0x82, 0x2e, 0x75, 0xe9, 0xde, 0xd7, 0x2d, 0xa0, 0x67, 0x97, 0x83, 0xa7, 0x72, 0x18, 0x14, 0xe1, 0x99, 0x16, 0x0b, 0x75, 0x07, 0xf6, 0x7f, 0x4e, 0xde, 0x58, 0x7c, 0x88, 0xbe, 0x76, 0x81, 0x5c, 0x50, 0xb2, 0x61, 0xdf, 0x30, 0x8b, 0x31, 0x43, 0x23, 0x73, 0x0c, 0x1e, 0x07, 0x3a, 0xa7, 0x29, 0x98, 0xcc, 0x2f, 0x8e, 0x0a, 0x8a, 0x5b, 0xd6, 0x5b, 0xf9, 0x34, 0xac, 0xa8, 0xa6, 0x48, 0x59, 0xe2, 0x5f, 0x02, 0xc5, 0xa2, 0x71, 0x39, 0x41, 0xc8, 0xc8, 0xe6, 0x27, 0x20, 0x84, 0x6d, 0xfb, 0x51, 0xc2, 0xff } -, - /* Encryption */ - 128, - { 0x6a, 0xdd, 0xe2, 0x44, 0xf0, 0x63, 0x8c, 0x5a, 0xb7, 0x45, 0xff, 0xba, 0xb5, 0xab, 0xe1, 0xfe, 0x80, 0x0b, 0x0e, 0xee, 0x15, 0x35, 0x50, 0xc4, 0x8c, 0x36, 0xf4, 0x24, 0x9f, 0x9d, 0x5d, 0x36, 0xb4, 0x7b, 0x28, 0xcc, 0xda, 0x71, 0xa7, 0xdd, 0x83, 0x2e, 0x64, 0x35, 0xad, 0x0e, 0xb8, 0x5e, 0xf7, 0x55, 0x6b, 0xb8, 0x4b, 0xf9, 0x5a, 0x59, 0xcc, 0xc9, 0xc2, 0x07, 0x51, 0xed, 0x3e, 0x1a, 0xd0, 0xde, 0x10, 0x29, 0x94, 0xa7, 0x12, 0xc5, 0x14, 0x01, 0x46, 0x92, 0xa6, 0x7f, 0x1d, 0x87, 0xca, 0x2e, 0x4f, 0xef, 0x29, 0xec, 0x83, 0xe0, 0x1e, 0x29, 0xad, 0x0c, 0x97, 0x8a, 0xcc, 0xa4, 0xd5, 0xc5, 0x02, 0x74, 0x5a, 0x6c, 0x50, 0x0d, 0xf2, 0x00, 0x04, 0xbc, 0x9b, 0xf1, 0x6f, 0x5f, 0xcc, 0x69, 0xbf, 0x52, 0x70, 0x9e, 0x31, 0xcf, 0x6a, 0x2b, 0x9f, 0xe6, 0x24, 0xd9, 0xa3, 0x64 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.15", - /* Message */ - 8, - { 0x4f, 0xae, 0x6c, 0xf3, 0x7e, 0x9d, 0x5f, 0x59 } -, - /* Seed */ - 117, - { 0xe7, 0xf9, 0xed, 0x4a, 0x0c, 0x3a, 0x64, 0x66, 0x69, 0x03, 0x9b, 0xd0, 0x1f, 0x24, 0x9f, 0x32, 0xbe, 0xa1, 0xe6, 0x57, 0x6c, 0x21, 0xd4, 0x51, 0x89, 0xd0, 0xf8, 0x91, 0xcf, 0x4a, 0xfd, 0x62, 0x32, 0x08, 0x3a, 0x32, 0x1e, 0xd2, 0xd3, 0x4d, 0x07, 0x09, 0x84, 0xf5, 0xe9, 0x45, 0x78, 0x39, 0xb2, 0xeb, 0xc1, 0xe0, 0x3a, 0x2c, 0x0d, 0x8d, 0xd7, 0x09, 0x73, 0x1e, 0x95, 0xb2, 0xe6, 0x94, 0x1c, 0xa0, 0x90, 0x71, 0x87, 0xaf, 0xfd, 0xcf, 0x5a, 0x87, 0xf5, 0xcb, 0xea, 0xd2, 0xf9, 0x05, 0x2c, 0x38, 0xd0, 0xee, 0x54, 0xe1, 0xf1, 0x28, 0xff, 0xc3, 0x37, 0xde, 0x45, 0x66, 0xa5, 0x92, 0x5e, 0x1e, 0x94, 0x7a, 0xef, 0x50, 0x88, 0x1c, 0xbd, 0xae, 0xd9, 0x9b, 0x1b, 0xbc, 0x1a, 0xf5, 0x13, 0x23, 0x2c, 0x0f, 0xf4 } -, - /* Encryption */ - 128, - { 0x46, 0xe6, 0x70, 0x5e, 0xb1, 0x25, 0x2d, 0xeb, 0xf8, 0xec, 0x67, 0x2c, 0x4f, 0xde, 0xaf, 0x69, 0x88, 0x26, 0x84, 0x59, 0xf9, 0x95, 0x89, 0xbb, 0xd3, 0x05, 0x41, 0x33, 0xd4, 0x83, 0xab, 0xe1, 0xe2, 0x7c, 0xaa, 0xb0, 0xa7, 0xf0, 0x22, 0x1b, 0x1b, 0x67, 0xa1, 0x4e, 0xbf, 0x45, 0x12, 0x6e, 0x60, 0x13, 0x48, 0xb0, 0x43, 0x44, 0x06, 0xda, 0x3a, 0x8c, 0x76, 0xd4, 0xf1, 0xe3, 0xf1, 0xa0, 0xe0, 0x6d, 0x0d, 0xb8, 0x23, 0xda, 0x51, 0x17, 0xb9, 0x2a, 0x40, 0xb6, 0xf3, 0x9f, 0x57, 0xe4, 0x83, 0xa7, 0xda, 0x36, 0xe9, 0x9b, 0x67, 0x7b, 0xb3, 0xf7, 0x6e, 0x6c, 0x5d, 0xb0, 0x3f, 0x3c, 0xe4, 0x45, 0x04, 0xeb, 0xd4, 0x5e, 0x9f, 0x14, 0xfe, 0x0f, 0x61, 0x3a, 0x2e, 0xb7, 0x95, 0x47, 0xab, 0x57, 0x8c, 0x58, 0x6d, 0x3b, 0x65, 0x4a, 0x06, 0xfe, 0x1e, 0xf3, 0x7a, 0x22, 0x10, 0x66 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.16", - /* Message */ - 14, - { 0xcd, 0xfd, 0xfd, 0xaa, 0xbc, 0xa3, 0x76, 0x7e, 0x70, 0xbb, 0xc5, 0xe9, 0xab, 0xf6 } -, - /* Seed */ - 111, - { 0xac, 0x77, 0x7f, 0x67, 0x29, 0x9d, 0xe4, 0xc1, 0xc4, 0xc5, 0x74, 0xf3, 0x1f, 0x67, 0x4f, 0x6f, 0xaa, 0xbd, 0xe0, 0x31, 0xf8, 0xec, 0x33, 0xe8, 0x26, 0x76, 0xeb, 0x32, 0xa9, 0x3f, 0x65, 0x79, 0xaa, 0xc3, 0xe9, 0x59, 0x35, 0x9f, 0xc5, 0x73, 0xee, 0x5c, 0x0e, 0x3e, 0x07, 0x76, 0x53, 0xef, 0xf9, 0xd5, 0xf8, 0xdb, 0x4b, 0x1e, 0x7a, 0xca, 0xdb, 0x05, 0x99, 0x71, 0x53, 0x1f, 0x49, 0xb0, 0x7c, 0x93, 0xeb, 0x9f, 0xde, 0xdc, 0xf0, 0x90, 0x3a, 0x7d, 0x50, 0xb4, 0x79, 0x67, 0x6f, 0xcd, 0xe8, 0x74, 0x0a, 0xfb, 0xd7, 0xd3, 0x7c, 0x3a, 0x21, 0x02, 0x41, 0x2b, 0xde, 0x1d, 0x3a, 0x82, 0x44, 0x15, 0x6a, 0xd8, 0x08, 0x9d, 0x45, 0xdf, 0xdc, 0x91, 0xcd, 0xe6, 0xc3, 0xa1, 0x59 } -, - /* Encryption */ - 128, - { 0x51, 0x3c, 0x76, 0x1e, 0xb1, 0x92, 0x9a, 0xff, 0x79, 0x77, 0xa9, 0xff, 0x0e, 0x61, 0xb7, 0xa1, 0xd5, 0x11, 0xc8, 0xcb, 0x25, 0x39, 0x24, 0x33, 0x24, 0x25, 0x56, 0x9a, 0x07, 0xe2, 0x29, 0xcb, 0x39, 0x01, 0x71, 0x53, 0x90, 0xf7, 0xde, 0x37, 0xbd, 0x36, 0x2c, 0x96, 0xfc, 0x0b, 0x0d, 0x79, 0x81, 0x0c, 0x1e, 0x8b, 0x15, 0xe1, 0x3b, 0x00, 0x32, 0x73, 0x47, 0x78, 0xcf, 0x96, 0x4e, 0x6f, 0x6d, 0x17, 0xfc, 0x41, 0xc7, 0x86, 0x76, 0x72, 0xb2, 0x54, 0x0f, 0x56, 0x9d, 0x0a, 0x46, 0x0a, 0x80, 0xfa, 0xd5, 0x6b, 0x5f, 0x05, 0x4a, 0xb8, 0xe4, 0x9e, 0x40, 0x9e, 0x9e, 0x0b, 0x86, 0x13, 0xcb, 0x3d, 0xa2, 0x0c, 0x35, 0xc3, 0xe1, 0xbb, 0x99, 0xb7, 0xec, 0xab, 0x7a, 0x00, 0xfc, 0x1f, 0xc2, 0x37, 0x0f, 0x9c, 0x80, 0x85, 0x67, 0xdf, 0x89, 0xbe, 0x2e, 0xdd, 0xbd, 0xb6, 0xb1, 0x10 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.17", - /* Message */ - 18, - { 0xb8, 0x20, 0xc3, 0x2e, 0x73, 0x7d, 0xaa, 0x23, 0x4f, 0x29, 0xba, 0x90, 0x64, 0x7f, 0xc3, 0xbf, 0x0a, 0x8e } -, - /* Seed */ - 107, - { 0xf5, 0xca, 0xf8, 0xfe, 0xb4, 0x2d, 0xf7, 0xb6, 0xb3, 0x89, 0xf5, 0x05, 0x99, 0xa4, 0xec, 0x20, 0xe6, 0x19, 0xca, 0x22, 0xd2, 0xbf, 0xc9, 0x1b, 0xc7, 0xf1, 0x4a, 0xe9, 0xf1, 0x22, 0x9e, 0x07, 0xc8, 0x88, 0xed, 0x57, 0xaa, 0x6a, 0xd3, 0xc1, 0x04, 0x10, 0x44, 0xc5, 0x1a, 0xfb, 0x55, 0x21, 0x7b, 0x0c, 0xaa, 0x23, 0x34, 0xad, 0x79, 0xf4, 0x7a, 0xbb, 0xf9, 0xb4, 0x20, 0x83, 0x33, 0xb7, 0x2b, 0x4b, 0xa4, 0xbb, 0x5f, 0xd0, 0x37, 0x98, 0x1d, 0xd8, 0x01, 0x70, 0xc8, 0x03, 0x60, 0xc1, 0x4d, 0x5a, 0xf5, 0x1e, 0x5f, 0x82, 0xab, 0xf5, 0x1f, 0xd3, 0x6f, 0x02, 0x18, 0x67, 0xa6, 0xec, 0x09, 0x7b, 0xc3, 0x39, 0x22, 0xac, 0xea, 0xd9, 0xe3, 0x35, 0x58 } -, - /* Encryption */ - 128, - { 0x3e, 0x23, 0x25, 0x18, 0x41, 0xdb, 0x2e, 0x20, 0x7a, 0x27, 0x10, 0x1f, 0x13, 0x29, 0x19, 0x1a, 0xb7, 0xfa, 0x6a, 0x70, 0x1a, 0x52, 0x62, 0x61, 0x48, 0x23, 0x53, 0xa1, 0xa2, 0x21, 0xef, 0xa9, 0xd3, 0xa9, 0xd4, 0x59, 0xcd, 0x2a, 0x2d, 0x86, 0x68, 0x90, 0x8b, 0x78, 0x3b, 0xb0, 0x9c, 0x87, 0x9a, 0x21, 0x7f, 0x1e, 0x40, 0x0f, 0x95, 0xb2, 0x17, 0xb0, 0x40, 0xa5, 0x3e, 0x34, 0x1c, 0x17, 0xb9, 0x3d, 0x3c, 0x3d, 0x65, 0x46, 0x0c, 0x5c, 0x7f, 0x2b, 0x4d, 0x79, 0xa3, 0x4b, 0x5a, 0x96, 0x11, 0x7a, 0xa3, 0x67, 0x51, 0xd9, 0xea, 0xf2, 0x33, 0xb0, 0x3f, 0x68, 0xdb, 0xa6, 0xa4, 0x57, 0x1b, 0x90, 0x71, 0x77, 0xf8, 0x28, 0x33, 0x6e, 0x82, 0x5a, 0x92, 0x26, 0x1b, 0x62, 0x36, 0x39, 0xbe, 0xc9, 0x8d, 0x3a, 0x09, 0xf8, 0x72, 0xc2, 0xec, 0x59, 0x1b, 0x4c, 0x38, 0x3a, 0x69, 0xc7 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.18", - /* Message */ - 43, - { 0x60, 0x6b, 0xbd, 0x61, 0x37, 0x15, 0xdd, 0xcd, 0x92, 0xc7, 0xb6, 0xdf, 0x04, 0xb3, 0x60, 0x72, 0xf0, 0x11, 0x62, 0xd0, 0x08, 0x76, 0x63, 0x12, 0xca, 0x69, 0x77, 0xdd, 0x3a, 0x06, 0xeb, 0x95, 0xe1, 0xba, 0xc7, 0xbc, 0x1b, 0xc6, 0x60, 0x2c, 0x9e, 0xe6, 0x44 } -, - /* Seed */ - 82, - { 0x51, 0x3a, 0x5c, 0x95, 0x68, 0xe8, 0x9b, 0x9a, 0x53, 0xd5, 0xaf, 0x71, 0x6e, 0x55, 0xfb, 0x34, 0x0f, 0x8a, 0x39, 0x23, 0x70, 0xe8, 0x88, 0xa8, 0x0c, 0xae, 0xda, 0x50, 0x2e, 0x7f, 0x9d, 0xfc, 0x17, 0x51, 0x95, 0xa5, 0x0e, 0x47, 0x07, 0x13, 0x96, 0xd6, 0xec, 0x55, 0x4e, 0xb7, 0x2f, 0x18, 0x3b, 0xe1, 0x8f, 0x3b, 0xf4, 0xec, 0x73, 0xb3, 0x05, 0x92, 0xfa, 0xef, 0x2f, 0xb5, 0x14, 0xde, 0xbe, 0xfc, 0xc6, 0x5c, 0x8d, 0x23, 0xc4, 0xad, 0x25, 0x94, 0x56, 0xc1, 0xe8, 0x0b, 0x36, 0x0a, 0xd4, 0x59 } -, - /* Encryption */ - 128, - { 0x47, 0x21, 0xa2, 0x39, 0x40, 0x18, 0x87, 0x30, 0xf5, 0xde, 0xac, 0x85, 0x00, 0x2e, 0x38, 0x31, 0xb1, 0x49, 0xae, 0x57, 0xaf, 0xc6, 0x97, 0x35, 0xa0, 0x45, 0xee, 0x3f, 0xc3, 0x53, 0x64, 0x72, 0xfc, 0x83, 0x3c, 0x27, 0xc8, 0x7e, 0xab, 0x6f, 0xc9, 0x05, 0xe3, 0x67, 0x96, 0x1b, 0x31, 0x24, 0x98, 0x63, 0x6b, 0xe6, 0xc7, 0x7a, 0xa8, 0x0b, 0x8d, 0xa2, 0xf5, 0xd9, 0x48, 0xaa, 0xa7, 0x7b, 0x5f, 0xab, 0x72, 0x4b, 0xbf, 0x64, 0xee, 0x89, 0xd2, 0x81, 0xee, 0xd4, 0x7b, 0x21, 0x2c, 0x32, 0x95, 0x26, 0x65, 0x77, 0xf4, 0xfd, 0x93, 0xa2, 0x22, 0x39, 0xde, 0xe5, 0x40, 0xc9, 0x40, 0x0f, 0xe5, 0x6d, 0x7a, 0xef, 0x51, 0xdf, 0x36, 0xa8, 0x9a, 0xe9, 0x2f, 0x92, 0x6f, 0x55, 0x83, 0x31, 0xe4, 0x1b, 0xfd, 0xfe, 0xfe, 0x35, 0x75, 0x8b, 0x93, 0xce, 0x11, 0x40, 0xac, 0x9b, 0x6a, 0x54 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.19", - /* Message */ - 36, - { 0x1d, 0x82, 0xde, 0xf8, 0xc5, 0x92, 0x87, 0x50, 0x08, 0xa5, 0xf8, 0x9e, 0x7e, 0xb6, 0x4e, 0x25, 0x2e, 0xdd, 0xe9, 0xdd, 0xb8, 0x81, 0xd3, 0x73, 0x62, 0x31, 0x7f, 0x6e, 0x6e, 0x6e, 0x99, 0x3c, 0x60, 0x23, 0x3b, 0x0f } -, - /* Seed */ - 89, - { 0x87, 0x5e, 0x07, 0x5e, 0xf1, 0xb0, 0x54, 0xb5, 0x84, 0x1e, 0x08, 0x45, 0x0d, 0x78, 0xeb, 0x54, 0xa5, 0x5c, 0x88, 0xb6, 0xd0, 0x18, 0x13, 0xc1, 0x07, 0xa0, 0x9b, 0x74, 0x54, 0x3b, 0x3f, 0x9f, 0xe1, 0xb7, 0xc9, 0x02, 0x11, 0xc6, 0x2e, 0xa7, 0x33, 0x81, 0x20, 0xd4, 0xae, 0x0f, 0x73, 0xba, 0x82, 0xc0, 0x1d, 0x28, 0xf8, 0x19, 0x4b, 0x3a, 0x39, 0x6b, 0xdf, 0x50, 0xf9, 0x41, 0x3a, 0x7f, 0xb0, 0x3b, 0xe2, 0x25, 0xfe, 0x05, 0x45, 0xdb, 0x80, 0xcd, 0xf0, 0xf6, 0x10, 0xa9, 0x5f, 0xd9, 0x03, 0x76, 0xe0, 0x39, 0xe3, 0x83, 0x1f, 0xf9, 0x9e } -, - /* Encryption */ - 128, - { 0x8f, 0xb5, 0x46, 0x26, 0x3c, 0x1d, 0x18, 0x75, 0xc7, 0x43, 0xf5, 0x2f, 0x02, 0x67, 0xb2, 0xf2, 0xfe, 0x68, 0x8d, 0x25, 0x42, 0x02, 0x10, 0x49, 0xf5, 0x34, 0x89, 0xce, 0x7c, 0x35, 0x91, 0x30, 0xf8, 0xe1, 0x1e, 0x3c, 0x46, 0x1c, 0x5e, 0x86, 0x3e, 0x4d, 0xc1, 0x9f, 0x07, 0xa1, 0x3a, 0x4c, 0x1a, 0x88, 0x22, 0x4b, 0x26, 0xc5, 0xc0, 0xcb, 0xe2, 0x02, 0x02, 0x45, 0xd9, 0x1e, 0x1b, 0x83, 0x42, 0x42, 0x52, 0x52, 0xf5, 0x3f, 0xc4, 0x0e, 0x4b, 0x14, 0xfa, 0x02, 0xbb, 0xd7, 0x47, 0x37, 0xd4, 0x02, 0x2c, 0xc5, 0x4f, 0xe3, 0x8f, 0x0d, 0x27, 0xd8, 0xfe, 0xa5, 0x0f, 0x2f, 0xdd, 0x84, 0x65, 0xd4, 0xf3, 0x2f, 0x8a, 0xc0, 0x3e, 0xe0, 0x06, 0xbe, 0x62, 0x33, 0xe4, 0xd1, 0xa3, 0xc1, 0x6e, 0xb1, 0x44, 0xb5, 0xd8, 0xbe, 0x72, 0x9a, 0xd3, 0x04, 0xf8, 0x23, 0x61, 0xe0, 0x7c, 0xfb } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 6.20", - /* Message */ - 28, - { 0x8a, 0x8a, 0x3e, 0xab, 0xdc, 0xa7, 0xca, 0xb0, 0xcc, 0x29, 0x6a, 0x29, 0x1e, 0xa8, 0xa9, 0x3d, 0xa4, 0xd2, 0xd2, 0xa1, 0x96, 0xff, 0x2f, 0x8d, 0x18, 0x1f, 0xee, 0x1f } -, - /* Seed */ - 97, - { 0x2e, 0x47, 0x36, 0xe4, 0x29, 0x6a, 0xb4, 0x66, 0x18, 0xb1, 0xef, 0x34, 0xda, 0x26, 0x77, 0x6e, 0x92, 0xef, 0x66, 0xf7, 0xcd, 0x17, 0x4e, 0xf9, 0x47, 0x69, 0x72, 0x42, 0x23, 0xa7, 0x65, 0xb4, 0xeb, 0xef, 0x08, 0xa8, 0x8f, 0xed, 0xbe, 0x27, 0x05, 0x60, 0xe5, 0xf6, 0x74, 0x37, 0xcf, 0x49, 0xd5, 0x7e, 0xa6, 0x62, 0x0a, 0xca, 0x59, 0x89, 0x8a, 0xfd, 0x52, 0xcd, 0xef, 0x30, 0xa8, 0xb0, 0xd9, 0x85, 0x5e, 0x5d, 0xfb, 0xe3, 0x47, 0xde, 0x77, 0xc4, 0xc0, 0x28, 0x0b, 0x0f, 0x1f, 0xd4, 0x4d, 0x4f, 0xe6, 0x89, 0x06, 0xbe, 0x8a, 0x4f, 0x12, 0xc5, 0x33, 0x08, 0x7b, 0xf5, 0xbc, 0xea, 0xfb } -, - /* Encryption */ - 128, - { 0x03, 0xf3, 0xe4, 0xba, 0x03, 0x48, 0x31, 0xa0, 0xe3, 0x0a, 0x4a, 0x33, 0x44, 0xce, 0xad, 0x61, 0xb2, 0x8b, 0x43, 0xbe, 0x31, 0x53, 0x2c, 0x2d, 0x76, 0x37, 0x53, 0x9b, 0x90, 0x13, 0x83, 0x7e, 0xdc, 0xb1, 0xf2, 0x16, 0xd3, 0x2f, 0xdf, 0xae, 0x73, 0x32, 0x36, 0x74, 0xa2, 0x81, 0x45, 0x65, 0xdb, 0xf2, 0x9e, 0x71, 0x2d, 0x18, 0xc4, 0x37, 0x39, 0x64, 0xdf, 0x60, 0xc9, 0x39, 0x9f, 0xda, 0x54, 0x14, 0xa0, 0xeb, 0x45, 0xbd, 0xe8, 0x66, 0x1a, 0x89, 0x09, 0x12, 0x95, 0xa1, 0xef, 0x71, 0x61, 0x6a, 0x3c, 0xd1, 0x45, 0xe9, 0xb3, 0x18, 0xb6, 0x51, 0xaf, 0x17, 0x5d, 0x4e, 0xc3, 0x50, 0x1d, 0x5e, 0xb7, 0x63, 0xe8, 0xd3, 0x5a, 0x2b, 0x72, 0x74, 0x6e, 0x02, 0x0b, 0x4b, 0xa5, 0x99, 0x73, 0x83, 0x4b, 0x21, 0x50, 0x02, 0x6b, 0x43, 0x2b, 0x17, 0x9a, 0x9a, 0xe8, 0x17, 0x2b, 0x7b } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 7: A 1025-bit RSA key pair", -{ - /* Modulus */ - 129, - { 0x01, 0x70, 0x93, 0x41, 0xd2, 0xec, 0x08, 0x04, 0xa7, 0x40, 0x34, 0xe8, 0xfa, 0x72, 0x86, 0x42, 0x98, 0x3d, 0x16, 0x50, 0xd7, 0x46, 0xe4, 0x49, 0xc9, 0xee, 0x40, 0x79, 0xaa, 0x15, 0xe5, 0x1f, 0x1f, 0xc1, 0x34, 0x24, 0x2e, 0x52, 0x4b, 0x0d, 0x3d, 0x0d, 0xbf, 0x5a, 0x51, 0x21, 0x93, 0x9b, 0x12, 0x5f, 0xcc, 0x86, 0x3e, 0x51, 0x41, 0x60, 0xb6, 0x34, 0xe3, 0x7a, 0xa6, 0x98, 0x94, 0x77, 0x6c, 0x7d, 0x33, 0xe1, 0xe7, 0xc6, 0x19, 0x52, 0x1d, 0xe4, 0x82, 0xa0, 0xae, 0xa4, 0x5c, 0x3c, 0x6a, 0xbc, 0x3f, 0x33, 0xe2, 0x5d, 0x86, 0xff, 0xa1, 0x39, 0x33, 0x25, 0x65, 0x9b, 0xf2, 0xd4, 0x09, 0x8d, 0xf1, 0x69, 0xb4, 0x07, 0x21, 0x87, 0x66, 0x0e, 0x27, 0x77, 0x00, 0x19, 0x9b, 0x7a, 0x3e, 0x34, 0x84, 0xb3, 0x84, 0x5f, 0x6f, 0xbf, 0x31, 0x98, 0x65, 0x7d, 0xf8, 0xcb, 0xf3, 0xa8, 0x1b } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x6f, 0xeb, 0xf7, 0x98, 0x12, 0x1e, 0x99, 0x33, 0x24, 0x97, 0x2c, 0x8c, 0x28, 0xcc, 0xc6, 0x5a, 0x2e, 0x6a, 0xa1, 0x5f, 0xcd, 0xe2, 0x32, 0xda, 0x03, 0xe4, 0x46, 0x4d, 0xb4, 0xda, 0x5f, 0xaa, 0x27, 0xe4, 0x2a, 0x7c, 0x7a, 0x76, 0xd9, 0xed, 0x49, 0x48, 0x6b, 0x27, 0xa9, 0xd7, 0x85, 0xc6, 0x7d, 0x9a, 0xc0, 0xc5, 0x19, 0xad, 0x8d, 0xad, 0xa6, 0xbf, 0xd1, 0x15, 0xd7, 0xcd, 0x75, 0xb9, 0x9c, 0x4b, 0x59, 0xc7, 0x69, 0x83, 0xa7, 0x01, 0x5b, 0x0d, 0xa6, 0x97, 0x3c, 0x69, 0xfa, 0x95, 0x08, 0x10, 0xae, 0x27, 0x68, 0xd9, 0x75, 0x88, 0x90, 0x05, 0x62, 0xe8, 0x6a, 0x6d, 0xf7, 0xc7, 0x14, 0xb8, 0x44, 0xb1, 0xe0, 0x46, 0x68, 0x6a, 0x5a, 0xfc, 0x66, 0x7b, 0x13, 0x57, 0x3a, 0x55, 0xbe, 0x9b, 0x5b, 0x38, 0xb9, 0x9b, 0xd3, 0xcf, 0x54, 0xe4, 0x34, 0x4a, 0x2f, 0x2d, 0x0e, 0x21 } -, - /* Prime 1 */ - 65, - { 0x01, 0x40, 0xef, 0x5b, 0x50, 0x70, 0x54, 0xd5, 0xa6, 0x94, 0x46, 0x4e, 0xf4, 0x7e, 0x49, 0x86, 0x8c, 0xb3, 0x3c, 0x97, 0xe0, 0xe3, 0xed, 0xd7, 0x7b, 0xf4, 0x5a, 0x52, 0x5e, 0x60, 0x8d, 0x7e, 0x21, 0x5f, 0x91, 0x33, 0x48, 0xa9, 0xb8, 0x27, 0xc8, 0x39, 0x73, 0x7a, 0x42, 0xb6, 0xad, 0xfb, 0xb2, 0xbb, 0x49, 0x7e, 0x14, 0x78, 0x92, 0x2f, 0x71, 0x88, 0x97, 0xd9, 0xfe, 0xed, 0x27, 0x7a, 0x6b } -, - /* Prime 2 */ - 65, - { 0x01, 0x26, 0x00, 0x4b, 0xbe, 0x2d, 0xf7, 0x6b, 0x6f, 0x38, 0xae, 0xa1, 0x64, 0xb1, 0xfd, 0x0f, 0x97, 0x61, 0x2b, 0x2d, 0xb9, 0x6c, 0xed, 0xe2, 0x8a, 0x3a, 0x91, 0xce, 0x0d, 0x74, 0x25, 0x3b, 0xb3, 0xf9, 0x55, 0x9b, 0x89, 0xf4, 0x81, 0x33, 0x75, 0x65, 0x2a, 0x50, 0x70, 0x06, 0xce, 0x99, 0x95, 0xa9, 0x8f, 0x0e, 0x6e, 0xf3, 0xbc, 0x22, 0xe5, 0x51, 0x9b, 0x61, 0x3b, 0xfb, 0xcd, 0x55, 0x11 } -, - /* Prime exponent 1 */ - 64, - { 0x98, 0x14, 0xd4, 0xe0, 0xb9, 0x5a, 0x7a, 0x24, 0x05, 0xff, 0x8b, 0x4a, 0xb0, 0xcd, 0x86, 0xc5, 0x05, 0xea, 0xa0, 0xce, 0x21, 0x34, 0x83, 0xf8, 0x69, 0x42, 0xa3, 0xe5, 0xb5, 0x3b, 0x57, 0x99, 0xd8, 0xff, 0xa5, 0x9d, 0xb9, 0x4f, 0x5b, 0x0a, 0xb6, 0xae, 0xd2, 0x30, 0xeb, 0x00, 0x67, 0x55, 0xbb, 0x0a, 0x88, 0x84, 0x8a, 0xde, 0x3b, 0x3d, 0x41, 0xcd, 0x33, 0xb0, 0x6a, 0x11, 0x5b, 0x21 } -, - /* Prime exponent 2 */ - 64, - { 0x1c, 0x4b, 0x1c, 0xfe, 0xf1, 0x67, 0x85, 0x34, 0x4f, 0xed, 0x26, 0x65, 0x0d, 0x68, 0x00, 0x2f, 0x1e, 0x4f, 0xcc, 0x77, 0xb2, 0xce, 0xf5, 0xe5, 0x3d, 0x9b, 0xb8, 0x8b, 0xbc, 0xe8, 0xb4, 0x65, 0x2e, 0x92, 0x99, 0x84, 0x5e, 0x3e, 0x6c, 0xd8, 0x58, 0x63, 0x09, 0x18, 0xae, 0xdf, 0x05, 0x12, 0xcd, 0x1d, 0x92, 0x53, 0x05, 0x2b, 0xce, 0xe3, 0xe8, 0xc5, 0x9e, 0x46, 0xea, 0x85, 0xa9, 0x31 } -, - /* Coefficient */ - 64, - { 0xfd, 0xc5, 0x10, 0xc4, 0xd9, 0x79, 0x07, 0x30, 0xb0, 0xfd, 0x47, 0xd3, 0x13, 0xab, 0xd4, 0x08, 0x58, 0xc7, 0xdf, 0xd5, 0x8f, 0x4b, 0x37, 0x91, 0x5f, 0x7a, 0x4b, 0x1d, 0xb3, 0xd7, 0xd8, 0xab, 0xd0, 0x6d, 0x3d, 0xa0, 0x02, 0xde, 0x98, 0x4a, 0x76, 0x09, 0xcc, 0x18, 0xa9, 0x44, 0x86, 0x46, 0x0a, 0x61, 0x74, 0x6c, 0x7e, 0xa6, 0x31, 0x17, 0xa6, 0x8a, 0xa2, 0x82, 0x59, 0x74, 0x4f, 0x49 } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 7.1", - /* Message */ - 58, - { 0xda, 0x50, 0x9d, 0xce, 0x45, 0xe2, 0x47, 0x00, 0x37, 0x9b, 0xfe, 0x5a, 0xa1, 0xa8, 0x1c, 0x24, 0x70, 0x6c, 0x18, 0x42, 0xd9, 0xb1, 0x3e, 0x7a, 0x2e, 0x0a, 0x15, 0xd3, 0xa4, 0xaf, 0x8e, 0x6d, 0x08, 0x61, 0x2d, 0xca, 0xa1, 0x5d, 0x46, 0x0e, 0xce, 0x87, 0x29, 0x88, 0xe3, 0xe9, 0x0f, 0xb2, 0x7e, 0x5c, 0xa5, 0xc1, 0x0f, 0xa1, 0xfa, 0xcd, 0xcb, 0x0e } -, - /* Seed */ - 68, - { 0x80, 0x8c, 0x20, 0x46, 0xfb, 0x50, 0x5c, 0x37, 0x69, 0x5c, 0x8d, 0xc3, 0x5c, 0x38, 0xf9, 0xf9, 0x90, 0x5a, 0xb4, 0x8a, 0x2b, 0x8a, 0x14, 0x6e, 0x8e, 0x8e, 0xda, 0x33, 0x85, 0xce, 0xd9, 0x5a, 0x31, 0x3b, 0x2d, 0xc6, 0xeb, 0x41, 0x83, 0x67, 0xfe, 0xef, 0xf7, 0x9a, 0x02, 0xad, 0x74, 0x64, 0x6d, 0xf7, 0xa5, 0xd8, 0x70, 0x54, 0xac, 0xdd, 0xaf, 0x34, 0xea, 0xfd, 0x5c, 0x1d, 0xb5, 0x8e, 0x5d, 0xec, 0x04, 0x81 } -, - /* Encryption */ - 129, - { 0x00, 0xfc, 0x3d, 0x0a, 0xaa, 0xf2, 0x6c, 0xdf, 0x25, 0xa1, 0xa8, 0xdf, 0xcb, 0x71, 0x70, 0x0f, 0xb6, 0x5e, 0x2a, 0xb5, 0x55, 0x1a, 0xe5, 0xf4, 0x19, 0xb2, 0xd2, 0xf9, 0x4c, 0xef, 0x01, 0x73, 0x02, 0xb0, 0x0a, 0xbd, 0x9e, 0x6c, 0x6e, 0xfa, 0xe9, 0x44, 0x74, 0xd1, 0x8e, 0x68, 0xda, 0x0a, 0x7c, 0x17, 0xef, 0x2c, 0x5f, 0xcc, 0x89, 0x07, 0x1d, 0x3b, 0x07, 0x12, 0x1b, 0x9c, 0x01, 0xe3, 0x0f, 0xf0, 0x53, 0x66, 0x3f, 0x61, 0xf8, 0x9f, 0xdb, 0xc4, 0x9b, 0xdc, 0xf8, 0xe6, 0x71, 0x66, 0x94, 0x43, 0x91, 0x9d, 0x41, 0x34, 0x28, 0x45, 0xe3, 0xe9, 0x9e, 0x46, 0xa8, 0xa3, 0xb4, 0x8e, 0x23, 0x98, 0xa8, 0x8e, 0x5b, 0x45, 0xd9, 0x9a, 0x17, 0xdd, 0x1f, 0x21, 0x2e, 0xda, 0xbc, 0xbc, 0xd3, 0x00, 0xa8, 0x4d, 0x39, 0x8e, 0xf5, 0x79, 0x35, 0xbd, 0xae, 0x95, 0x9e, 0x60, 0x54, 0xe7, 0x3a } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 7.2", - /* Message */ - 12, - { 0xce, 0x0a, 0x79, 0x47, 0x49, 0x87, 0x41, 0x60, 0xe5, 0xd2, 0xe4, 0xff } -, - /* Seed */ - 114, - { 0xf4, 0xb2, 0xc9, 0xf3, 0x11, 0xc1, 0xfd, 0x41, 0xd4, 0x79, 0x44, 0xb5, 0x0e, 0x17, 0x55, 0xd4, 0xea, 0xc5, 0xee, 0x65, 0x08, 0x7c, 0x9f, 0xc6, 0xd2, 0xf0, 0x75, 0xb7, 0x38, 0xc6, 0x49, 0x26, 0xea, 0xf7, 0xd4, 0x31, 0x6b, 0xcd, 0xb6, 0x36, 0x54, 0xd5, 0x42, 0x0d, 0xa6, 0x1e, 0x02, 0x45, 0xf1, 0x95, 0xb9, 0xe8, 0x24, 0xaa, 0x0b, 0x06, 0xc8, 0x87, 0x99, 0xb1, 0x27, 0xfe, 0x9b, 0x03, 0x6d, 0xf3, 0x61, 0x75, 0xc0, 0xa6, 0xbd, 0x80, 0xe4, 0xe0, 0xaf, 0x6e, 0xbc, 0x2f, 0x42, 0x70, 0xb0, 0x4c, 0xe3, 0x0b, 0x9f, 0xa2, 0x7f, 0x04, 0x35, 0x86, 0x0f, 0xcc, 0xf4, 0x0b, 0x3d, 0xc7, 0xea, 0xef, 0xfd, 0xba, 0xb9, 0xe1, 0x76, 0x66, 0x19, 0xbb, 0x01, 0x6c, 0x17, 0x90, 0x26, 0x63, 0xcb, 0x24 } -, - /* Encryption */ - 129, - { 0x01, 0x0c, 0xf7, 0x4b, 0xeb, 0xc2, 0x63, 0x6d, 0x2c, 0x49, 0xd9, 0xc6, 0x22, 0xbd, 0x76, 0xcc, 0x0b, 0x1d, 0x02, 0xeb, 0xb5, 0x2f, 0xdf, 0xae, 0xc0, 0x1c, 0x4a, 0xc1, 0xe7, 0x56, 0x07, 0x1a, 0x8e, 0xf7, 0x6e, 0x12, 0x2a, 0x4c, 0x62, 0xc6, 0xba, 0x32, 0x65, 0xfa, 0x4c, 0x90, 0x56, 0x26, 0xd1, 0x13, 0xd5, 0x9d, 0xb7, 0x9a, 0xd6, 0x5f, 0x86, 0x40, 0xb3, 0xc4, 0x34, 0x4d, 0x73, 0x40, 0xc1, 0x6e, 0x38, 0xde, 0xb1, 0x89, 0xe3, 0xa1, 0xb1, 0x1e, 0xaa, 0xb0, 0xb2, 0x60, 0x6a, 0x7f, 0x82, 0xf5, 0x94, 0x6d, 0x41, 0x9a, 0xce, 0xbb, 0xbb, 0x3a, 0x93, 0x7d, 0x41, 0xe2, 0x9b, 0x33, 0xed, 0xd3, 0xad, 0x15, 0xf1, 0xe7, 0x77, 0x0f, 0xcf, 0xc3, 0x0a, 0xe0, 0x6a, 0xa0, 0x1b, 0xcd, 0x03, 0xd5, 0xdf, 0xb1, 0x62, 0xf8, 0x7a, 0x18, 0x39, 0x67, 0x55, 0x3c, 0x25, 0x02, 0xcb, 0x5f, 0xfe } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.3", - /* Message */ - 2, - { 0x41, 0xd6 } -, - /* Seed */ - 124, - { 0x55, 0x6e, 0x59, 0xb2, 0xc1, 0x89, 0x58, 0x75, 0x08, 0xe2, 0x08, 0x92, 0xfa, 0x56, 0x02, 0xd2, 0x49, 0xfb, 0xfb, 0x71, 0xa1, 0x09, 0x05, 0xed, 0x5a, 0xf7, 0xb7, 0x9b, 0xe8, 0x71, 0x11, 0xa0, 0xc6, 0x9a, 0xdd, 0xb1, 0x9e, 0xef, 0x31, 0x6d, 0x7c, 0x0b, 0x21, 0x81, 0x79, 0x90, 0xdc, 0x3e, 0xd8, 0xc7, 0x6c, 0xb2, 0x3e, 0x83, 0x0e, 0x17, 0xc0, 0xf4, 0x38, 0x73, 0x15, 0x9f, 0xab, 0x7c, 0x5c, 0x4a, 0x6c, 0xf2, 0x19, 0xcb, 0x1d, 0xc5, 0xc5, 0xda, 0x45, 0x53, 0xa3, 0xe0, 0xbf, 0x18, 0x3b, 0x8e, 0x11, 0x2b, 0x61, 0xf6, 0x92, 0xa7, 0xdd, 0xf0, 0x04, 0xbd, 0xbf, 0xdc, 0xc8, 0xd6, 0x65, 0x9c, 0x3d, 0xd8, 0x0c, 0xb2, 0x3a, 0xab, 0xe8, 0xc6, 0xfd, 0xf2, 0x67, 0x5d, 0x07, 0x3b, 0x66, 0x23, 0x12, 0xe4, 0xac, 0xcd, 0xe9, 0x1c, 0x12, 0x25, 0xe6, 0xd1 } -, - /* Encryption */ - 129, - { 0x00, 0x2a, 0x10, 0x04, 0x95, 0x59, 0x66, 0x55, 0x30, 0x4b, 0xdd, 0xf9, 0x09, 0x7f, 0x78, 0xd9, 0xdd, 0xb5, 0xeb, 0x42, 0x9b, 0x66, 0x63, 0x5a, 0x58, 0xa2, 0x98, 0xf1, 0x92, 0x8e, 0xed, 0x61, 0x53, 0x4f, 0x80, 0xb4, 0xea, 0x05, 0xee, 0x39, 0xb0, 0x2a, 0x64, 0x56, 0x6f, 0x6c, 0x45, 0x6e, 0x3b, 0x58, 0x6e, 0x7c, 0xb4, 0x3a, 0x88, 0x94, 0x0e, 0xe1, 0x29, 0x34, 0x0f, 0x57, 0x8e, 0x56, 0xe7, 0x2d, 0x8b, 0x27, 0x83, 0x36, 0x10, 0x06, 0xd9, 0x71, 0x29, 0xab, 0xef, 0x02, 0xcf, 0x1c, 0x19, 0x12, 0xe1, 0x7f, 0x0c, 0xd1, 0xd7, 0x1c, 0x0b, 0x32, 0x8d, 0x0b, 0x48, 0xa4, 0xac, 0x7a, 0xec, 0xe3, 0xc0, 0x05, 0xa6, 0x19, 0x0e, 0xac, 0x22, 0xc1, 0x99, 0x10, 0x41, 0x15, 0x9a, 0x2a, 0xd1, 0xdb, 0x08, 0x96, 0x01, 0x5c, 0x4f, 0xf1, 0xd7, 0xb3, 0x54, 0x47, 0xcf, 0xc1, 0x0a, 0x24, 0xbe } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.4", - /* Message */ - 62, - { 0x0b, 0xb4, 0xab, 0xc7, 0xdc, 0x6c, 0xa4, 0x23, 0x5c, 0x29, 0xed, 0x0a, 0x2c, 0xb6, 0x3f, 0xd1, 0x41, 0x34, 0x1e, 0x2c, 0x4c, 0x90, 0x1e, 0x6d, 0xc9, 0x5d, 0xa9, 0xf0, 0x01, 0x0f, 0xa2, 0xe0, 0x22, 0xcc, 0xfe, 0x8a, 0xdf, 0xdb, 0x6e, 0xcf, 0x4d, 0x89, 0xf5, 0x79, 0xa1, 0x0a, 0x51, 0x70, 0xbe, 0x18, 0xc4, 0x6a, 0x24, 0x1c, 0xa7, 0xee, 0xd1, 0x07, 0xca, 0xfe, 0x4a, 0x9d } -, - /* Seed */ - 64, - { 0xbb, 0x80, 0xbe, 0x78, 0x02, 0xdd, 0x8b, 0xf5, 0xfb, 0x5b, 0x1b, 0x86, 0x39, 0x66, 0x54, 0xf4, 0x73, 0x9f, 0x5d, 0x43, 0x51, 0xf1, 0x9c, 0xe3, 0x1b, 0x72, 0xc2, 0x10, 0xae, 0xa1, 0xa2, 0xed, 0x21, 0x42, 0xd8, 0xd6, 0xf7, 0xae, 0x37, 0x4f, 0x06, 0x13, 0x3a, 0x31, 0x5c, 0x62, 0x64, 0xda, 0x65, 0xce, 0xf2, 0x33, 0xed, 0x3d, 0xcc, 0x81, 0x59, 0xd7, 0x6c, 0x3a, 0x17, 0xf3, 0x6d, 0x0c } -, - /* Encryption */ - 129, - { 0x00, 0x6f, 0x1b, 0x6c, 0x1f, 0xb3, 0x7a, 0xe5, 0xc8, 0xc0, 0x24, 0x44, 0x9a, 0xbc, 0x38, 0x40, 0xe8, 0xe5, 0x09, 0x71, 0x43, 0xee, 0xd1, 0x6b, 0xea, 0xf6, 0x7b, 0x6c, 0x7a, 0x48, 0x24, 0xac, 0x38, 0xb6, 0xf8, 0xc3, 0x53, 0xb6, 0x45, 0xc8, 0xce, 0xa4, 0xfa, 0xb0, 0x9c, 0x02, 0xfa, 0x6c, 0x32, 0x5a, 0x50, 0x74, 0x38, 0xb9, 0x64, 0x5e, 0xc8, 0x23, 0x00, 0x86, 0xb3, 0x15, 0xe3, 0x4e, 0x7a, 0x56, 0xad, 0xb0, 0xec, 0xd8, 0x9f, 0xd0, 0x7b, 0x98, 0x73, 0x9c, 0x24, 0xdb, 0x6f, 0xe1, 0x1f, 0xf2, 0xe5, 0xad, 0x38, 0x31, 0x8e, 0xc3, 0x1d, 0xf2, 0xed, 0x25, 0x08, 0xde, 0xbc, 0xa7, 0xa6, 0x7e, 0x24, 0x01, 0x96, 0xaa, 0x9a, 0xcd, 0x80, 0x32, 0x9f, 0x4c, 0x43, 0x43, 0xc1, 0x0b, 0x72, 0x69, 0x9f, 0x9d, 0x6b, 0x5b, 0xc2, 0x43, 0x99, 0x5b, 0x09, 0xc4, 0x6d, 0xd3, 0xd8, 0x03, 0xce } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.5", - /* Message */ - 15, - { 0xed, 0x26, 0xec, 0x20, 0x2d, 0x5e, 0x69, 0x74, 0x0d, 0xa3, 0x48, 0x84, 0x06, 0xbb, 0xbd } -, - /* Seed */ - 111, - { 0xf2, 0xfd, 0x08, 0xcc, 0x0d, 0xb9, 0xa5, 0x5a, 0xbf, 0xeb, 0xd9, 0x2e, 0x2a, 0x9d, 0x75, 0x87, 0x2a, 0xb7, 0xdf, 0xfb, 0x0b, 0x4d, 0xa1, 0x36, 0x06, 0xe1, 0x52, 0x75, 0x9f, 0x86, 0x6f, 0x22, 0xeb, 0x87, 0x29, 0xfb, 0x8c, 0x9a, 0x5c, 0x45, 0xba, 0x2f, 0x4a, 0xca, 0xe4, 0x31, 0x59, 0xa7, 0xad, 0x3c, 0xf7, 0x8e, 0x81, 0xfd, 0x09, 0x54, 0x90, 0x9b, 0x1f, 0x0e, 0x70, 0x89, 0xca, 0x86, 0xa4, 0x58, 0x8d, 0x8c, 0x87, 0xa1, 0xa6, 0x1f, 0x1a, 0x48, 0x39, 0x82, 0x36, 0xde, 0xf9, 0xb4, 0x97, 0x5e, 0x25, 0x49, 0x57, 0x3f, 0x60, 0xad, 0xb5, 0xe8, 0x61, 0xb7, 0xc3, 0xb2, 0xdf, 0xeb, 0x81, 0x0d, 0x13, 0xe2, 0x97, 0xa6, 0xcd, 0x3f, 0x2a, 0xfe, 0xcb, 0x0e, 0x4f, 0x14, 0x7c } -, - /* Encryption */ - 129, - { 0x00, 0x93, 0x3c, 0x58, 0xa5, 0x0c, 0x70, 0x15, 0x0d, 0xa0, 0x82, 0x3a, 0x7c, 0x1e, 0x36, 0x7d, 0x36, 0xe5, 0x21, 0x3f, 0x66, 0xa3, 0x00, 0x50, 0xfd, 0xed, 0x72, 0xd5, 0x75, 0x5b, 0x5f, 0x9c, 0x24, 0x05, 0x0b, 0x41, 0x14, 0xf5, 0x35, 0x09, 0x98, 0x8b, 0x62, 0x54, 0x20, 0xcf, 0xd0, 0x0a, 0xc1, 0xc8, 0xcd, 0x84, 0x48, 0x9c, 0xa2, 0x6b, 0x74, 0x3f, 0xb4, 0x7d, 0x1b, 0x64, 0xd0, 0xa8, 0x80, 0x8e, 0xe3, 0x21, 0x27, 0xc7, 0x71, 0x22, 0x4a, 0x0d, 0xd5, 0xa5, 0x64, 0xe6, 0x36, 0xad, 0xd7, 0x3b, 0xcf, 0xf7, 0xb4, 0x73, 0xe9, 0xa1, 0x2b, 0x7d, 0x46, 0x4d, 0x7d, 0xd4, 0xa7, 0x52, 0x04, 0x86, 0x61, 0xa8, 0xb0, 0x74, 0xb9, 0xfa, 0x15, 0x06, 0xfe, 0xf6, 0x03, 0xdd, 0x96, 0xd1, 0x19, 0x96, 0xa7, 0xd9, 0xe7, 0x48, 0x79, 0xf9, 0x9b, 0xb2, 0xd9, 0x1c, 0x37, 0xaa, 0xb1, 0x35, 0x72 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.6", - /* Message */ - 33, - { 0xdc, 0x28, 0x5a, 0x26, 0x39, 0x59, 0x39, 0xe7, 0x99, 0x72, 0x04, 0xc7, 0x1a, 0x93, 0x2f, 0x79, 0x5b, 0x4d, 0xe4, 0x01, 0xe9, 0x6f, 0x34, 0xe1, 0x89, 0x36, 0x32, 0x37, 0xe9, 0xcf, 0xda, 0xdc, 0x61 } -, - /* Seed */ - 93, - { 0xd8, 0x0b, 0xfc, 0xc2, 0x91, 0xce, 0x51, 0x8c, 0xe0, 0xbb, 0x6a, 0xe9, 0x34, 0xdf, 0xd8, 0x56, 0x58, 0xb2, 0x39, 0xfb, 0x45, 0x39, 0xcb, 0xe0, 0x5d, 0xa1, 0x26, 0xa8, 0x98, 0xb7, 0xf3, 0x64, 0x88, 0x7c, 0x0d, 0xdf, 0xb1, 0xea, 0xea, 0x1d, 0x5a, 0x90, 0xde, 0x76, 0x95, 0x66, 0x5c, 0x55, 0x82, 0x2a, 0x11, 0x72, 0xcb, 0x5b, 0xe8, 0xa1, 0x12, 0xd2, 0x8c, 0x86, 0x02, 0xc5, 0x13, 0xbe, 0x48, 0xc2, 0x92, 0xf0, 0x59, 0x72, 0xe6, 0x71, 0x1a, 0x44, 0xcb, 0xc7, 0x28, 0x17, 0x15, 0x09, 0x4b, 0x49, 0x0f, 0xde, 0x29, 0x16, 0x5a, 0x6b, 0x6b, 0x7d, 0x99, 0xdb, 0xed } -, - /* Encryption */ - 129, - { 0x01, 0x57, 0xe7, 0xb5, 0x4a, 0x34, 0x1b, 0x8d, 0xf8, 0xbd, 0x9b, 0x99, 0xfc, 0x2e, 0x6c, 0x58, 0xd8, 0x86, 0xfc, 0x79, 0xe7, 0x44, 0x2a, 0x9e, 0x76, 0xd0, 0xd6, 0x7e, 0x48, 0x58, 0xc4, 0xab, 0xf0, 0xed, 0x25, 0xc3, 0x3d, 0xf6, 0x2e, 0x2a, 0xad, 0xa3, 0x99, 0xdf, 0xea, 0xdc, 0x7f, 0xf6, 0x89, 0x28, 0xe6, 0xb9, 0x00, 0x71, 0x02, 0xdd, 0xf8, 0x09, 0xf5, 0x90, 0x8e, 0xef, 0xc1, 0x0f, 0x2a, 0x73, 0x71, 0x06, 0x09, 0x23, 0x1f, 0x5d, 0x45, 0xe0, 0x0a, 0xdd, 0xa1, 0x34, 0xb6, 0x02, 0xdd, 0x0e, 0xee, 0x0f, 0x67, 0x22, 0x49, 0x4b, 0x7e, 0x4f, 0x7b, 0x40, 0x57, 0x72, 0xc8, 0x31, 0xb6, 0x37, 0x29, 0xbe, 0x0f, 0x1c, 0x4b, 0x6d, 0x2a, 0x54, 0x2c, 0x15, 0x65, 0xc7, 0xdf, 0x23, 0x1d, 0x9e, 0x89, 0x2e, 0x58, 0x6a, 0x18, 0xec, 0x54, 0x37, 0x73, 0x76, 0xdb, 0x77, 0xf8, 0x13, 0x84 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.7", - /* Message */ - 55, - { 0x46, 0x47, 0xd8, 0x41, 0xc5, 0xa0, 0xb9, 0x97, 0x3a, 0x91, 0x45, 0x4d, 0xd1, 0xa0, 0x5e, 0xc0, 0xe5, 0x75, 0x03, 0xed, 0x99, 0x67, 0x2a, 0xc0, 0x02, 0xdf, 0xee, 0x77, 0x7f, 0x7f, 0xa5, 0x06, 0xfb, 0x41, 0xb2, 0xec, 0x8b, 0x8d, 0x2c, 0xdb, 0x9b, 0xef, 0x01, 0x33, 0xbd, 0x5e, 0x3a, 0x7d, 0x0c, 0x43, 0x44, 0xb2, 0x8f, 0xa8, 0xdb } -, - /* Seed */ - 71, - { 0xf5, 0x27, 0xa1, 0x4e, 0x2e, 0x06, 0xe7, 0x3f, 0x1c, 0x24, 0x5d, 0x19, 0x0d, 0x02, 0xcc, 0xed, 0x01, 0x1e, 0x46, 0x84, 0x87, 0xac, 0xfa, 0x5e, 0x0b, 0xce, 0x39, 0x78, 0x6b, 0x46, 0xa9, 0xa8, 0xc7, 0x51, 0xa8, 0xb4, 0x40, 0x6c, 0xcf, 0xa1, 0xfc, 0x5b, 0x7a, 0xb9, 0xba, 0xda, 0x7b, 0x4a, 0xd4, 0x52, 0x46, 0x7e, 0x50, 0xb7, 0xfc, 0x41, 0x31, 0x8e, 0xdc, 0x73, 0xdc, 0x2d, 0x84, 0xa2, 0x8a, 0x08, 0x1f, 0xa1, 0x79, 0x05, 0xbc } -, - /* Encryption */ - 129, - { 0x00, 0x4e, 0x03, 0xca, 0xa9, 0x48, 0x1d, 0x7f, 0x96, 0x78, 0x20, 0x7c, 0x17, 0xb6, 0x82, 0x2a, 0x5f, 0x69, 0x17, 0xed, 0x01, 0xeb, 0x40, 0x2e, 0x7f, 0x23, 0x01, 0x35, 0xa1, 0x23, 0xcd, 0x9b, 0x6d, 0xe3, 0xbe, 0xc3, 0xb9, 0xbf, 0x33, 0x8a, 0xde, 0xf8, 0x07, 0x6f, 0xb7, 0x65, 0x2f, 0xc7, 0xe3, 0xa3, 0x73, 0xfc, 0x16, 0x22, 0xf1, 0xdc, 0x67, 0x9d, 0x41, 0x5c, 0x32, 0x00, 0x02, 0x6d, 0x8a, 0x8a, 0x50, 0xf8, 0xdb, 0x6a, 0x58, 0x3f, 0x66, 0x69, 0x29, 0xd0, 0x31, 0x8e, 0xbf, 0x91, 0xd9, 0x59, 0x12, 0xfc, 0x06, 0x10, 0x2d, 0x9b, 0xe8, 0x75, 0x25, 0xa7, 0x36, 0xb5, 0xaf, 0x21, 0xe1, 0x6d, 0xe3, 0xef, 0xaa, 0x66, 0xe9, 0xcf, 0x41, 0xca, 0x73, 0x48, 0x23, 0x23, 0xdd, 0xe8, 0x0e, 0xec, 0x30, 0x85, 0x81, 0xa4, 0x4c, 0xa3, 0xaa, 0xbf, 0x76, 0xdd, 0x48, 0x1d, 0xe6, 0x52, 0x9a } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.8", - /* Message */ - 8, - { 0xba, 0x10, 0xd4, 0x7a, 0x9f, 0x62, 0x42, 0x81 } -, - /* Seed */ - 118, - { 0x37, 0x9f, 0xdc, 0xfa, 0x5d, 0x8c, 0x61, 0x37, 0xc3, 0x6b, 0xad, 0x14, 0x3f, 0xd9, 0xb1, 0xf7, 0xe8, 0x94, 0xfa, 0x0e, 0x9a, 0xc0, 0xfb, 0x9c, 0xec, 0x60, 0xe8, 0x6c, 0x82, 0x53, 0x97, 0x5d, 0x8e, 0x78, 0x74, 0x21, 0x08, 0x49, 0x5e, 0x59, 0x4a, 0xd0, 0x89, 0x8f, 0xd0, 0x4c, 0x91, 0xe4, 0x01, 0xe7, 0xc8, 0x80, 0x89, 0xa8, 0x7b, 0x4a, 0x4a, 0x82, 0xe8, 0x34, 0xcd, 0x37, 0x77, 0xa7, 0xd3, 0xf8, 0x0e, 0x64, 0x86, 0x81, 0x2d, 0x4a, 0xb0, 0xd3, 0x37, 0x23, 0x16, 0x2b, 0xcb, 0xc7, 0xe0, 0x81, 0xa9, 0x9d, 0x3f, 0x9b, 0x5c, 0x3b, 0xa4, 0x4b, 0x19, 0xbd, 0xf8, 0x84, 0xa4, 0x62, 0x6f, 0xd7, 0xde, 0xf7, 0x67, 0x40, 0x57, 0xbe, 0xa0, 0x82, 0xe0, 0x0d, 0xb4, 0xb7, 0x61, 0xad, 0x75, 0x3a, 0xb5, 0x98, 0x5a, 0x94 } -, - /* Encryption */ - 129, - { 0x00, 0xc4, 0x96, 0x5e, 0x29, 0x63, 0xd7, 0xbc, 0x5b, 0x10, 0x44, 0xd8, 0xfc, 0x75, 0xeb, 0x33, 0x82, 0xce, 0xdd, 0x99, 0x07, 0x41, 0x97, 0x92, 0xef, 0xc8, 0x8c, 0x92, 0xb1, 0xd5, 0xc3, 0x90, 0xfa, 0xb1, 0x90, 0x01, 0x1c, 0x51, 0x8a, 0xc9, 0xce, 0x45, 0xc1, 0xb8, 0xe7, 0x27, 0x6b, 0xff, 0xc7, 0xc7, 0xe0, 0x5c, 0x25, 0x37, 0x08, 0x91, 0x37, 0xa9, 0x8d, 0xf6, 0xe0, 0xc6, 0x92, 0x02, 0x0e, 0xd6, 0x54, 0xaf, 0x83, 0x33, 0x9b, 0xab, 0x11, 0x92, 0x71, 0x77, 0xf2, 0xf5, 0x23, 0x22, 0x6b, 0x4f, 0xe6, 0x4b, 0x99, 0xc1, 0x72, 0x9f, 0x6c, 0x92, 0x29, 0x06, 0xbc, 0x16, 0xd3, 0x1f, 0x0c, 0x94, 0xdc, 0x2e, 0xa4, 0x13, 0x81, 0x0d, 0x55, 0x94, 0x0c, 0x97, 0xaf, 0xdd, 0x48, 0x29, 0xfb, 0xf1, 0x61, 0x8a, 0x8c, 0x9d, 0xe8, 0x9d, 0xc2, 0x40, 0x06, 0xe7, 0xe4, 0x21, 0xa5, 0x8d, 0x38 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.9", - /* Message */ - 38, - { 0xef, 0xc7, 0x48, 0x9f, 0xec, 0x77, 0x9e, 0x05, 0x2e, 0x37, 0x9c, 0x1a, 0xd9, 0x04, 0x59, 0x03, 0xb6, 0x84, 0x2a, 0x9c, 0xa4, 0x1b, 0x48, 0xbd, 0xdc, 0xe5, 0x80, 0x80, 0xa5, 0xed, 0xec, 0x63, 0xf3, 0x6e, 0xe1, 0x15, 0x60, 0xfd } -, - /* Seed */ - 88, - { 0xc8, 0xec, 0xba, 0x62, 0x72, 0x14, 0xc4, 0x14, 0xd7, 0xc3, 0xfd, 0xd3, 0x16, 0xc2, 0xd8, 0x2a, 0x98, 0x53, 0x57, 0x28, 0xb9, 0xa9, 0x37, 0x6f, 0x69, 0xa9, 0x53, 0xd7, 0xcd, 0x1c, 0xea, 0xd7, 0x10, 0x53, 0xdb, 0xe0, 0x14, 0x0c, 0x7f, 0x02, 0xbd, 0x71, 0xe0, 0x13, 0x7f, 0xea, 0x29, 0xcd, 0x4c, 0x21, 0xa5, 0x8b, 0xde, 0xc6, 0x66, 0x40, 0x99, 0x0d, 0x28, 0xc1, 0x0b, 0x70, 0x17, 0x59, 0x3c, 0x1d, 0x11, 0xfe, 0x9a, 0xbe, 0xbd, 0x71, 0x24, 0xe1, 0xd9, 0x85, 0x63, 0x1e, 0x94, 0xe9, 0xe5, 0x12, 0x41, 0x26, 0x0f, 0x9e, 0xf1, 0xf1 } -, - /* Encryption */ - 129, - { 0x00, 0x32, 0x18, 0x4e, 0xf2, 0x88, 0xfa, 0x0a, 0xaa, 0x0c, 0x2c, 0x1a, 0x19, 0xe7, 0xc2, 0x9f, 0x81, 0xc7, 0x01, 0x2f, 0x45, 0x29, 0xeb, 0x9e, 0xeb, 0x53, 0x68, 0x1f, 0x62, 0x47, 0xf8, 0xd4, 0x35, 0x69, 0x13, 0x45, 0xa5, 0x14, 0x8a, 0x2c, 0x87, 0x7b, 0x2b, 0x18, 0x92, 0x6b, 0xae, 0x9d, 0xe5, 0xb3, 0x17, 0xba, 0xc0, 0xe9, 0x02, 0xc9, 0x60, 0x25, 0xee, 0xc2, 0xf9, 0xea, 0xbd, 0x0f, 0x9e, 0x88, 0x86, 0xef, 0x95, 0x19, 0xc8, 0x24, 0x9f, 0xeb, 0x83, 0x46, 0x65, 0xc1, 0x01, 0x0d, 0xb7, 0x62, 0x4f, 0x48, 0x7e, 0x16, 0x1f, 0x89, 0xf6, 0xae, 0x00, 0x18, 0xc1, 0xf4, 0xe0, 0xab, 0x54, 0x72, 0xf7, 0xf0, 0x99, 0x35, 0x61, 0xcd, 0x59, 0x85, 0xf3, 0x83, 0xd0, 0x49, 0xdd, 0x83, 0x2b, 0x82, 0xc8, 0x37, 0x48, 0xb2, 0x28, 0x1b, 0xfb, 0x99, 0xd9, 0xd5, 0x00, 0x8d, 0xc8, 0x07, 0xde } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.10", - /* Message */ - 19, - { 0x5b, 0x26, 0x4f, 0xf8, 0x8d, 0xef, 0xd3, 0xc2, 0x99, 0x99, 0x3d, 0x81, 0x12, 0x9a, 0x6e, 0x5d, 0xd2, 0xb5, 0x7b } -, - /* Seed */ - 107, - { 0x0b, 0xe7, 0xab, 0x5b, 0x29, 0x70, 0x48, 0x43, 0xc1, 0xc0, 0xd7, 0xe4, 0xef, 0x5e, 0x93, 0xf3, 0xba, 0x71, 0x7d, 0xb7, 0x81, 0x5a, 0xf5, 0x72, 0xe3, 0xa9, 0xab, 0x3f, 0x99, 0xb1, 0xac, 0x9a, 0x22, 0xb9, 0x2d, 0x9b, 0x43, 0xda, 0x2b, 0x99, 0x65, 0xc7, 0x97, 0x70, 0x57, 0x17, 0x3c, 0x03, 0x57, 0x3f, 0x32, 0x48, 0x0a, 0x92, 0x70, 0x19, 0xaf, 0xff, 0x0e, 0x0e, 0x34, 0xe4, 0x09, 0x5e, 0x4a, 0x4d, 0x39, 0x2d, 0xcd, 0x1b, 0xd9, 0xf2, 0x7d, 0x32, 0xfd, 0xe7, 0x15, 0x9f, 0x02, 0x3c, 0x83, 0x08, 0x9e, 0x88, 0xa7, 0x1f, 0x24, 0x33, 0x64, 0x8e, 0xf8, 0xc8, 0x40, 0x45, 0xb9, 0xc3, 0x6d, 0x8e, 0x5f, 0x6e, 0xff, 0x03, 0x4b, 0x91, 0xb7, 0x02, 0x34 } -, - /* Encryption */ - 129, - { 0x00, 0x4c, 0x65, 0x29, 0x35, 0x56, 0xf2, 0xfd, 0x15, 0xab, 0x90, 0xeb, 0x22, 0xe0, 0x75, 0x33, 0xb3, 0xdc, 0x17, 0x33, 0x4f, 0x5e, 0xed, 0x27, 0xa3, 0x99, 0x31, 0x80, 0xc5, 0x6c, 0x8e, 0x3d, 0x8f, 0x51, 0xee, 0xb2, 0x75, 0x95, 0xf8, 0x78, 0xd2, 0x36, 0x65, 0xba, 0x3a, 0xb0, 0xe7, 0x28, 0xa5, 0xae, 0xf7, 0x23, 0x4f, 0x60, 0x36, 0xb0, 0x23, 0xf8, 0x71, 0xc2, 0xd6, 0x55, 0x2a, 0x18, 0xad, 0x5a, 0x25, 0xbe, 0xc5, 0x5b, 0xc7, 0x6b, 0xee, 0x63, 0x83, 0x46, 0x12, 0x81, 0xd3, 0x9a, 0x30, 0xf6, 0xd6, 0x60, 0x92, 0xe0, 0xcf, 0xf6, 0x92, 0x32, 0x68, 0xfc, 0x04, 0x3c, 0xdf, 0x74, 0x7e, 0x8d, 0x54, 0x89, 0x50, 0x4e, 0x7d, 0xb3, 0x0a, 0x7b, 0xd9, 0x1a, 0x2b, 0xfc, 0x6c, 0x1b, 0x34, 0x14, 0x40, 0x57, 0x01, 0x75, 0x3d, 0x5b, 0x85, 0xff, 0x73, 0x52, 0x01, 0x2d, 0x55, 0xe9, 0x23 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.11", - /* Message */ - 37, - { 0x72, 0xe2, 0x09, 0x00, 0xe5, 0xbc, 0xc2, 0x3c, 0xf8, 0x79, 0xed, 0x35, 0x31, 0x88, 0x9a, 0x1e, 0xd5, 0xaa, 0x3d, 0x5c, 0x79, 0x2e, 0x34, 0xe3, 0xb1, 0x26, 0x90, 0xd9, 0xac, 0x24, 0x03, 0xd0, 0xf6, 0xf7, 0x8f, 0x59, 0x23 } -, - /* Seed */ - 89, - { 0x11, 0x62, 0x75, 0xe9, 0xbe, 0x1b, 0xd4, 0xe6, 0xf2, 0x03, 0xff, 0xe4, 0xf0, 0xab, 0x9a, 0x32, 0x73, 0x84, 0x10, 0xe9, 0x23, 0xe8, 0x39, 0x71, 0xee, 0x9a, 0x6b, 0x99, 0x2c, 0x65, 0x0a, 0x03, 0x1f, 0x94, 0x0f, 0x6e, 0xf3, 0x3d, 0x61, 0x50, 0xdf, 0xf8, 0xb3, 0x9d, 0xcf, 0x22, 0x50, 0xd5, 0x66, 0x5c, 0x04, 0x27, 0x3b, 0x2b, 0xe2, 0xde, 0xc9, 0x97, 0x12, 0xbb, 0xc0, 0x12, 0xf7, 0x5a, 0x31, 0xb3, 0x0b, 0xa0, 0x6f, 0xf9, 0xeb, 0xe3, 0xb8, 0x9f, 0x58, 0xa6, 0x8f, 0x26, 0x85, 0xe3, 0x38, 0xff, 0x6c, 0xb8, 0xd4, 0x18, 0x1a, 0x8a, 0x14 } -, - /* Encryption */ - 129, - { 0x00, 0x21, 0x4a, 0x83, 0xbe, 0x45, 0x3a, 0x75, 0xbc, 0xda, 0x94, 0x33, 0xa7, 0xb9, 0x51, 0x43, 0x34, 0x39, 0x98, 0x30, 0x72, 0x07, 0x1c, 0xc8, 0x21, 0x12, 0xb7, 0x77, 0x42, 0xbe, 0x0c, 0x38, 0x22, 0x6c, 0xa3, 0xc6, 0xf3, 0x8d, 0x55, 0xb9, 0xca, 0x3f, 0x08, 0xc8, 0x79, 0x37, 0x89, 0x79, 0x6e, 0x6c, 0xde, 0x67, 0x37, 0x6d, 0x67, 0x3f, 0x5e, 0xc5, 0x7d, 0xac, 0xc3, 0x74, 0xc4, 0xc3, 0x17, 0x34, 0x44, 0xdd, 0x8a, 0x63, 0x76, 0xde, 0x8f, 0x9d, 0xdc, 0x31, 0xa4, 0xc0, 0x60, 0xd7, 0x72, 0xf0, 0x2e, 0xb7, 0x49, 0x51, 0x2d, 0xcd, 0x04, 0x02, 0x31, 0x17, 0x5d, 0x0b, 0x69, 0x42, 0xa9, 0x47, 0xb2, 0xc8, 0x2f, 0x7c, 0x19, 0xe2, 0xce, 0x87, 0x50, 0x00, 0xaf, 0x84, 0x27, 0x4c, 0xbe, 0x2a, 0xdb, 0xf2, 0xfb, 0xfb, 0x53, 0x7c, 0xcb, 0xe2, 0xfb, 0xd0, 0x72, 0x87, 0x13, 0x78, 0x75 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.12", - /* Message */ - 21, - { 0x16, 0xb1, 0x10, 0xe2, 0x90, 0x9b, 0x11, 0xb0, 0xcf, 0x36, 0xb0, 0x52, 0xc6, 0xf3, 0x93, 0x6a, 0x2c, 0xa1, 0x3f, 0xc3, 0xa5 } -, - /* Seed */ - 105, - { 0xc2, 0xbf, 0x9e, 0x4f, 0xb1, 0xed, 0x70, 0xca, 0x21, 0x2d, 0x15, 0xee, 0x8e, 0xb3, 0xcd, 0x66, 0x0e, 0xb6, 0x5c, 0x52, 0x78, 0xe0, 0x3a, 0x3b, 0x10, 0xeb, 0x12, 0xb2, 0x53, 0x34, 0xa4, 0x72, 0x8b, 0x94, 0x99, 0x20, 0x12, 0x2f, 0xb9, 0x92, 0xbf, 0x2c, 0xe4, 0x30, 0x10, 0x3d, 0x74, 0xab, 0x74, 0xe6, 0xd6, 0xe7, 0x62, 0xb8, 0x5d, 0x6e, 0xf9, 0xbe, 0xb7, 0xd7, 0x25, 0x98, 0xf2, 0x93, 0xa4, 0x35, 0x62, 0xe9, 0x06, 0x89, 0x54, 0x11, 0x11, 0x51, 0x1d, 0x31, 0x4a, 0x9c, 0x46, 0x02, 0x23, 0x76, 0xad, 0x05, 0x5d, 0x54, 0xce, 0xd6, 0xac, 0x1f, 0x36, 0xe9, 0x8c, 0x2b, 0x25, 0xa0, 0xac, 0xde, 0x64, 0xdc, 0xf6, 0x52, 0x2c, 0x3d, 0x22 } -, - /* Encryption */ - 129, - { 0x01, 0x6a, 0xa9, 0x5a, 0x08, 0x23, 0x82, 0xc1, 0x0c, 0x04, 0x53, 0x10, 0xfe, 0xfe, 0xcc, 0x8d, 0x17, 0xdb, 0xf2, 0x16, 0xd8, 0xed, 0xc0, 0x4b, 0xda, 0xcd, 0x4f, 0x52, 0x4d, 0xe4, 0x85, 0xb7, 0xfe, 0x8a, 0x26, 0xf1, 0x4c, 0xab, 0xd2, 0x97, 0xe7, 0xf0, 0x3b, 0x3c, 0x85, 0x08, 0x6a, 0x16, 0x14, 0x7d, 0x5f, 0x61, 0x93, 0x91, 0x9b, 0xb9, 0x5a, 0x53, 0xc1, 0x46, 0xc7, 0x84, 0xc0, 0x0b, 0x53, 0x32, 0xe0, 0x18, 0xf6, 0x43, 0xcf, 0x95, 0x87, 0x24, 0xcd, 0x08, 0x07, 0x5e, 0xb6, 0x4c, 0xa5, 0x68, 0x0c, 0x27, 0xc7, 0x05, 0xd4, 0x0d, 0x88, 0xb9, 0xd7, 0xf4, 0x26, 0xb7, 0x36, 0xe3, 0xc5, 0xf6, 0x39, 0x4e, 0xa6, 0x83, 0xb6, 0x5c, 0x23, 0x73, 0xa6, 0xfc, 0xeb, 0x14, 0xf2, 0xea, 0x85, 0x1c, 0xa8, 0xe0, 0x00, 0xe2, 0x4d, 0xc8, 0xf7, 0xe7, 0xc8, 0x1b, 0x1d, 0x4e, 0x72, 0x0c, 0x36 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.13", - /* Message */ - 17, - { 0x3c, 0x86, 0x0a, 0x28, 0xfa, 0xe8, 0xda, 0x2a, 0xc0, 0xd9, 0xa3, 0x39, 0x89, 0x97, 0x7f, 0xfa, 0x04 } -, - /* Seed */ - 109, - { 0x7c, 0x96, 0x99, 0x90, 0x6c, 0x9f, 0x16, 0x65, 0x12, 0x5c, 0x0b, 0x10, 0x67, 0x3f, 0x3d, 0xad, 0x98, 0xc9, 0x1a, 0x4f, 0xf0, 0xfa, 0xaa, 0x64, 0x7d, 0xb5, 0x54, 0xfd, 0x62, 0x27, 0xef, 0x50, 0x90, 0x9c, 0x97, 0xb7, 0x06, 0x09, 0x2b, 0xe2, 0x10, 0xdb, 0x2c, 0x24, 0xba, 0x9e, 0x8e, 0x6a, 0x87, 0xf9, 0xdd, 0xd9, 0xf3, 0xf4, 0x91, 0x29, 0x10, 0x29, 0xac, 0x6e, 0xe4, 0x6e, 0x08, 0xd0, 0xd7, 0xa5, 0x3c, 0x46, 0x2d, 0xb4, 0xf0, 0xfd, 0x1c, 0xc2, 0x3e, 0xc8, 0xf5, 0x5e, 0xda, 0x07, 0xf4, 0xca, 0x0d, 0x3e, 0x3c, 0xd3, 0x76, 0x22, 0x85, 0x5b, 0x4d, 0xb0, 0x8f, 0x64, 0xbe, 0x3e, 0x26, 0xc3, 0xe9, 0x78, 0x75, 0x17, 0x12, 0x94, 0xea, 0xdf, 0x86, 0xfc, 0xd6 } -, - /* Encryption */ - 129, - { 0x01, 0x0c, 0x1e, 0x04, 0xa8, 0x58, 0xc6, 0x15, 0xee, 0x96, 0x95, 0xf6, 0x4a, 0xb2, 0xdb, 0x99, 0x80, 0x6d, 0xa4, 0x82, 0xd2, 0xb4, 0x60, 0x29, 0x3c, 0x46, 0xdc, 0x7b, 0x71, 0x7a, 0x59, 0x76, 0xa3, 0xc7, 0xe3, 0x6d, 0x8d, 0x47, 0xa8, 0x4a, 0x34, 0xd6, 0x3c, 0xdf, 0xca, 0x2c, 0x1e, 0x38, 0x45, 0x25, 0x73, 0xed, 0x44, 0xc3, 0xa0, 0x40, 0x40, 0x5e, 0xcf, 0x3f, 0xbf, 0x36, 0x83, 0x41, 0xc4, 0xa1, 0xfc, 0x90, 0x83, 0xa8, 0xf5, 0x52, 0x93, 0x67, 0xb9, 0x9c, 0xb8, 0x9f, 0xc5, 0xa0, 0x8b, 0x8f, 0x34, 0x75, 0xa0, 0xd5, 0x5e, 0x3e, 0x42, 0xcc, 0xcb, 0xeb, 0x20, 0xd0, 0x4a, 0x19, 0x97, 0xee, 0xda, 0x4e, 0x3c, 0xc9, 0xe9, 0x92, 0xd2, 0x37, 0xec, 0x7d, 0x32, 0xfe, 0x25, 0x84, 0x5a, 0xb0, 0x24, 0xd5, 0x88, 0x28, 0x05, 0xed, 0x52, 0xf1, 0x0e, 0xd7, 0xd2, 0x5d, 0x62, 0xd0, 0xaf } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.14", - /* Message */ - 30, - { 0x4e, 0xdf, 0x4a, 0xd3, 0x44, 0x0f, 0x17, 0xb1, 0x0d, 0x26, 0xaf, 0xcd, 0xf4, 0xe4, 0x44, 0xd2, 0xaa, 0x61, 0xa1, 0x97, 0x55, 0xa6, 0x21, 0x07, 0x98, 0x3f, 0x01, 0x22, 0xfb, 0x2a } -, - /* Seed */ - 96, - { 0xe0, 0x20, 0x09, 0x39, 0x39, 0xb4, 0x18, 0x9e, 0x93, 0x4c, 0xb6, 0x2d, 0x27, 0xca, 0x5e, 0x97, 0x19, 0x65, 0x2c, 0x13, 0x7f, 0xc4, 0x9e, 0x72, 0x1c, 0x4a, 0xb9, 0xe9, 0xf3, 0x98, 0xb0, 0xa6, 0x12, 0xde, 0x8a, 0x8a, 0x89, 0x99, 0xaf, 0x0d, 0xbc, 0x1c, 0xea, 0x0b, 0x61, 0x63, 0xda, 0x42, 0x61, 0x23, 0x28, 0x14, 0xed, 0x92, 0xeb, 0x21, 0x60, 0xcf, 0x4b, 0x26, 0xd0, 0x55, 0x1b, 0x1b, 0xdd, 0x91, 0x9d, 0x49, 0x47, 0x93, 0x78, 0x6e, 0x1b, 0x86, 0xf7, 0x9d, 0x64, 0x16, 0x61, 0x2a, 0x28, 0x22, 0x61, 0x36, 0x3d, 0x6c, 0x9b, 0x7a, 0x0d, 0x92, 0xad, 0x17, 0x58, 0xea, 0xad, 0x51 } -, - /* Encryption */ - 129, - { 0x00, 0x8c, 0xf9, 0xb3, 0xf3, 0xe7, 0x60, 0x90, 0xd1, 0x01, 0x17, 0x4e, 0xcd, 0x97, 0xd1, 0x0b, 0xff, 0x6d, 0xe4, 0xd4, 0x64, 0x40, 0x00, 0x3f, 0xc0, 0xd4, 0x28, 0xf1, 0x9b, 0x85, 0x58, 0xf3, 0x13, 0x74, 0xa5, 0xfa, 0x28, 0x3d, 0x03, 0xd4, 0xdd, 0x43, 0xf9, 0x3a, 0x4d, 0x9f, 0x14, 0xca, 0x00, 0x68, 0xdc, 0x2c, 0xf3, 0xe2, 0x54, 0x37, 0xb0, 0x5a, 0xb1, 0xd4, 0x06, 0x21, 0xee, 0xbd, 0x84, 0x16, 0xf5, 0x82, 0x8a, 0xe7, 0xc6, 0xcf, 0xd2, 0x97, 0xb4, 0x51, 0x8f, 0x79, 0x94, 0x2b, 0x91, 0x43, 0x23, 0x28, 0x4e, 0x29, 0x76, 0xa5, 0x4d, 0x3c, 0xd9, 0x11, 0x63, 0x3a, 0x30, 0x7e, 0xda, 0xf1, 0xed, 0xb6, 0x74, 0x98, 0x46, 0x6b, 0x3e, 0x98, 0x91, 0x6f, 0x99, 0x04, 0xf4, 0xa0, 0xea, 0x9b, 0x87, 0xa9, 0x83, 0x44, 0xf0, 0x73, 0x83, 0x3e, 0xdf, 0x9b, 0x2b, 0x53, 0x94, 0xcf, 0xd7 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.15", - /* Message */ - 22, - { 0x8a, 0x6d, 0x53, 0xb0, 0xad, 0xa1, 0x85, 0x4e, 0x23, 0x13, 0x69, 0x1a, 0xab, 0x23, 0x06, 0x3d, 0xe1, 0x31, 0xbc, 0x36, 0xc7, 0x64 } -, - /* Seed */ - 104, - { 0x26, 0x85, 0x45, 0x8a, 0xeb, 0xfb, 0xd6, 0x07, 0x4e, 0xbe, 0xb0, 0xfc, 0x0c, 0xc4, 0x92, 0x1c, 0x27, 0x3e, 0x8c, 0x0a, 0x88, 0x15, 0x51, 0x50, 0x2e, 0x4c, 0x29, 0x9f, 0x33, 0x4d, 0xd5, 0x67, 0xf5, 0x16, 0x75, 0xb0, 0xff, 0x30, 0xf2, 0xc4, 0x82, 0x63, 0x20, 0x03, 0x64, 0x99, 0x66, 0x99, 0xf9, 0xb1, 0x72, 0xaf, 0xfe, 0xc0, 0xe7, 0x9e, 0x5c, 0x52, 0x3d, 0x1e, 0x77, 0x9e, 0xc0, 0x6d, 0xec, 0xd4, 0x76, 0xa5, 0x74, 0x30, 0x78, 0x1e, 0x2d, 0xc8, 0x1f, 0x25, 0xd6, 0x0d, 0x3a, 0x73, 0x97, 0x65, 0x79, 0xa2, 0xf0, 0x1f, 0x07, 0x58, 0x4c, 0xf8, 0xe5, 0xfb, 0x3e, 0xbd, 0x8d, 0x5a, 0x93, 0x2d, 0x57, 0xaa, 0x8a, 0x18, 0x0a, 0xaa } -, - /* Encryption */ - 129, - { 0x01, 0x3a, 0x3d, 0x32, 0xee, 0xc7, 0x35, 0xeb, 0xda, 0x13, 0xf8, 0xbe, 0x76, 0x02, 0xa0, 0x47, 0x5c, 0xf3, 0xcf, 0x28, 0x5b, 0x42, 0x86, 0xad, 0x93, 0xd6, 0x12, 0xc3, 0xad, 0x91, 0x72, 0x48, 0x80, 0x9d, 0x1c, 0x4c, 0x18, 0x0b, 0x36, 0x70, 0x15, 0xcc, 0x66, 0xc4, 0xd8, 0xe7, 0x86, 0x73, 0x84, 0x16, 0x8c, 0xf4, 0xcb, 0x71, 0x9b, 0xd5, 0x93, 0x35, 0x53, 0x55, 0xcd, 0xd7, 0xd7, 0x53, 0x0c, 0x80, 0xc8, 0x67, 0x74, 0x5f, 0x96, 0x61, 0xc6, 0xc3, 0x3b, 0xcb, 0x97, 0xf2, 0xcf, 0x75, 0xa4, 0xc2, 0x7c, 0x3c, 0xbb, 0xdb, 0xbe, 0x7e, 0xaf, 0x4f, 0x82, 0x34, 0xf2, 0x12, 0xe3, 0x05, 0x82, 0x56, 0xd4, 0x43, 0x9a, 0x9f, 0x97, 0x81, 0xdf, 0x48, 0xef, 0xdb, 0x02, 0x35, 0x68, 0xf9, 0x4a, 0xe4, 0x59, 0x46, 0x54, 0xa0, 0xf9, 0xba, 0xf6, 0xea, 0x30, 0xb7, 0xd8, 0xd9, 0x48, 0x0a, 0xd3 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.16", - /* Message */ - 17, - { 0x20, 0xf0, 0x20, 0x44, 0xe6, 0x3a, 0xc9, 0x2e, 0xb9, 0xfa, 0xf1, 0xa0, 0xce, 0x35, 0xba, 0x72, 0x09 } -, - /* Seed */ - 109, - { 0x2d, 0xe1, 0xfc, 0xc1, 0x17, 0xf8, 0x21, 0xf1, 0xde, 0xa7, 0x94, 0xb5, 0xee, 0xb3, 0x13, 0xf4, 0x29, 0xe0, 0x0b, 0x97, 0x6b, 0x53, 0x41, 0x9d, 0x3d, 0x03, 0xec, 0xaa, 0x1b, 0x50, 0x76, 0x88, 0x77, 0xe8, 0xb7, 0xfb, 0xd6, 0xc3, 0x63, 0x04, 0x7e, 0x15, 0xc2, 0x55, 0x79, 0x3b, 0x3c, 0xbe, 0x0f, 0x58, 0x84, 0xf0, 0xa5, 0x11, 0x25, 0x4d, 0x31, 0xbf, 0xb2, 0x37, 0x41, 0x02, 0x3c, 0x1f, 0x88, 0x1f, 0xe0, 0x16, 0xa1, 0x2e, 0xef, 0x1b, 0x8a, 0xf2, 0x2b, 0x93, 0x68, 0x20, 0x7e, 0x7b, 0x16, 0x39, 0xf7, 0x27, 0x1d, 0xeb, 0xe3, 0xc8, 0xdf, 0x52, 0x93, 0xee, 0xc3, 0xa0, 0x32, 0xf1, 0xce, 0x55, 0x9c, 0x0a, 0x04, 0x77, 0x1b, 0xbf, 0x88, 0x98, 0x94, 0x7c, 0xa4 } -, - /* Encryption */ - 129, - { 0x01, 0x70, 0x06, 0xe8, 0x6f, 0x6c, 0x58, 0x58, 0xfe, 0x5a, 0xde, 0x0d, 0xcb, 0xfa, 0x9c, 0xcd, 0x11, 0xc0, 0x2d, 0x4e, 0x7d, 0x0d, 0xe6, 0xc1, 0x58, 0xad, 0xf9, 0xee, 0xf1, 0x01, 0x07, 0xe7, 0xa4, 0xc3, 0x6b, 0xd3, 0xd9, 0x29, 0xea, 0x6a, 0x47, 0x6e, 0xcf, 0xa0, 0xb6, 0xec, 0xd0, 0x51, 0x49, 0xb5, 0x12, 0x15, 0x95, 0x48, 0x93, 0xa1, 0xab, 0x26, 0x69, 0xc0, 0x42, 0xda, 0x83, 0xe8, 0xc8, 0x18, 0xb0, 0x0a, 0xe7, 0x34, 0xde, 0x5f, 0x9e, 0x0b, 0x97, 0xba, 0x1f, 0xe3, 0xe9, 0xc4, 0x6a, 0xe9, 0x81, 0x6b, 0x63, 0xb1, 0x5c, 0x2d, 0xcc, 0x61, 0xcb, 0x3b, 0x8b, 0x2c, 0x23, 0xdd, 0xb9, 0x9f, 0xcd, 0x54, 0xe9, 0x55, 0x60, 0x91, 0x8b, 0x9a, 0x0f, 0xa3, 0xc4, 0xb6, 0x27, 0x3d, 0x1b, 0x28, 0xa2, 0x13, 0xe1, 0x20, 0xb4, 0xf2, 0x42, 0x86, 0x96, 0x5e, 0xbe, 0xe9, 0x4f, 0xf8, 0x96 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.17", - /* Message */ - 3, - { 0xd3, 0x88, 0x3b } -, - /* Seed */ - 123, - { 0x5c, 0xa3, 0xbb, 0xf9, 0x92, 0xd7, 0xae, 0x35, 0x94, 0xc6, 0x05, 0xc3, 0x9c, 0x3e, 0x97, 0x90, 0x25, 0xcc, 0xb0, 0xa3, 0x5c, 0x6e, 0xf0, 0xfa, 0x57, 0x4a, 0x98, 0xbe, 0x05, 0xef, 0x7c, 0x32, 0x8a, 0x19, 0xa2, 0x77, 0x5b, 0xa0, 0x6f, 0x2d, 0xd1, 0xe0, 0xff, 0x6f, 0x0f, 0x1f, 0x6a, 0x3b, 0x20, 0xfb, 0xda, 0x21, 0x62, 0xd0, 0x92, 0x4f, 0xf5, 0x5b, 0x70, 0xeb, 0xfe, 0x2b, 0x16, 0xd4, 0xff, 0x6a, 0xef, 0x8d, 0x47, 0xeb, 0xe5, 0x96, 0x38, 0xe5, 0x81, 0x0f, 0xfd, 0xb5, 0x8d, 0xb0, 0x5f, 0x4d, 0x9b, 0x4a, 0x3a, 0x42, 0x3f, 0x96, 0x7f, 0xe5, 0x79, 0xf8, 0x73, 0x78, 0x36, 0x9d, 0x5c, 0x5c, 0x07, 0xe5, 0xe3, 0xcb, 0x5d, 0xdd, 0xf3, 0x89, 0x62, 0x11, 0x80, 0x27, 0x0a, 0x21, 0xe0, 0x10, 0x78, 0xc8, 0x9a, 0xfb, 0xab, 0x18, 0x9e, 0x87, 0xf7 } -, - /* Encryption */ - 129, - { 0x01, 0x6f, 0x55, 0x05, 0xf7, 0x4f, 0xf1, 0x10, 0x4d, 0xa1, 0xf8, 0xa5, 0x2e, 0x50, 0xbf, 0xe2, 0x9c, 0x99, 0x87, 0x10, 0xc5, 0x7d, 0xe4, 0x40, 0x98, 0xa9, 0x57, 0x9e, 0x7a, 0x33, 0x13, 0xb6, 0x29, 0x60, 0x31, 0x02, 0xf0, 0x8d, 0x2d, 0x91, 0x1f, 0x91, 0x7a, 0x9c, 0x96, 0x62, 0x60, 0x8c, 0x97, 0xa1, 0xea, 0x37, 0x17, 0x34, 0xf6, 0x7c, 0xbf, 0x70, 0x03, 0xd9, 0x3c, 0x4c, 0x31, 0x4c, 0x3a, 0x0e, 0x77, 0xf3, 0x65, 0x8f, 0xa4, 0xd0, 0x72, 0x25, 0x62, 0xc4, 0xe1, 0x3e, 0x85, 0xa7, 0xc8, 0xd0, 0xd9, 0xd4, 0xfb, 0xf7, 0x12, 0x58, 0x84, 0xba, 0x62, 0xad, 0x28, 0x59, 0xb4, 0xd9, 0x61, 0x36, 0xf7, 0xa2, 0x45, 0x54, 0x69, 0xce, 0xb6, 0x0b, 0x63, 0xba, 0x84, 0x74, 0xe6, 0x16, 0x0c, 0x83, 0x17, 0x92, 0x1a, 0x07, 0xb4, 0xb6, 0x43, 0x6f, 0x37, 0x6c, 0x5f, 0x98, 0x25, 0x7b, 0x17 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.18", - /* Message */ - 11, - { 0x06, 0xa2, 0xae, 0x82, 0xa4, 0x85, 0x32, 0x07, 0xc9, 0xf9, 0x75 } -, - /* Seed */ - 115, - { 0xe2, 0xc3, 0x36, 0x33, 0xd5, 0x47, 0x54, 0xad, 0xdd, 0x24, 0xc8, 0x5c, 0x32, 0xd2, 0x8a, 0xd8, 0x70, 0xf1, 0x60, 0x3d, 0x44, 0x44, 0x60, 0xa0, 0x3a, 0xac, 0xad, 0x7d, 0xcb, 0x80, 0x96, 0x01, 0x56, 0xbb, 0xb2, 0x59, 0xca, 0xd3, 0x46, 0xbe, 0x90, 0xc0, 0xd4, 0xf3, 0xfb, 0x18, 0xac, 0x6e, 0x9d, 0x5a, 0x9a, 0xe2, 0xa5, 0xab, 0x98, 0xa1, 0xf8, 0x4b, 0x8e, 0x70, 0xc7, 0x1d, 0x0c, 0xcc, 0x0a, 0x1a, 0x2a, 0xa3, 0x99, 0x70, 0xd9, 0xc8, 0x3b, 0x4b, 0x0c, 0x25, 0xae, 0xa4, 0x3a, 0x5a, 0x5d, 0xea, 0xdf, 0x9d, 0xc6, 0x11, 0xb9, 0x6d, 0x11, 0x33, 0x4e, 0xf9, 0x43, 0x09, 0x03, 0x89, 0xa8, 0xd3, 0xc6, 0x6c, 0xf3, 0x18, 0x77, 0xaa, 0x2c, 0xdf, 0xf1, 0x11, 0x99, 0x43, 0x27, 0x8a, 0xdd, 0xff, 0x5e } -, - /* Encryption */ - 129, - { 0x01, 0x22, 0x41, 0x0e, 0x76, 0x5b, 0x2c, 0x9e, 0x90, 0xbd, 0xac, 0xbc, 0xff, 0x1b, 0xca, 0x8a, 0xe6, 0x4b, 0xe9, 0x9c, 0xf0, 0x13, 0x29, 0x74, 0x85, 0x72, 0x17, 0x68, 0x37, 0x0c, 0x36, 0xf8, 0xc0, 0xd9, 0xdb, 0x8d, 0x79, 0x37, 0x62, 0x54, 0xb9, 0xc6, 0x91, 0x52, 0x72, 0x0e, 0x05, 0xca, 0xef, 0xd4, 0xce, 0x7e, 0xae, 0x08, 0xb3, 0xdf, 0xe3, 0xea, 0xa9, 0x1c, 0x46, 0x02, 0xef, 0xf3, 0x8e, 0x4d, 0x81, 0xbc, 0xd3, 0x78, 0x7a, 0x14, 0xd6, 0x22, 0xdb, 0xb7, 0x9c, 0xe8, 0x64, 0x4c, 0x4f, 0xd1, 0xd2, 0xe4, 0x1f, 0x7c, 0x1c, 0x97, 0x27, 0x96, 0x11, 0x74, 0x0f, 0xc5, 0x00, 0x00, 0x31, 0x78, 0xb3, 0x7b, 0xbd, 0x81, 0xc5, 0xa5, 0x82, 0x9b, 0x5c, 0x14, 0xbf, 0x45, 0x9c, 0x42, 0x38, 0xb0, 0x3b, 0xee, 0xf7, 0x3e, 0x49, 0x8f, 0x86, 0x5f, 0x6c, 0xa7, 0x9a, 0x9e, 0xd6, 0x0f, 0x65 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.19", - /* Message */ - 6, - { 0xad, 0x8b, 0x11, 0xa9, 0x27, 0xde } -, - /* Seed */ - 120, - { 0x5e, 0xca, 0xcf, 0xf6, 0x3a, 0x79, 0x38, 0xe9, 0x98, 0x06, 0x8a, 0x2f, 0x4b, 0xa6, 0xbc, 0xc1, 0x02, 0x0e, 0x1f, 0x28, 0xc7, 0x34, 0xe4, 0x34, 0xe8, 0x86, 0x3c, 0x48, 0xe6, 0xdf, 0xfa, 0xe2, 0x8d, 0x18, 0x52, 0x72, 0x7f, 0xfa, 0x7f, 0x2e, 0xfa, 0x3d, 0xe7, 0x01, 0x3b, 0x81, 0x2a, 0x02, 0xb2, 0x17, 0x1a, 0x0f, 0x94, 0x0b, 0x36, 0xd9, 0x28, 0xdb, 0xdb, 0x96, 0x0a, 0x6b, 0x22, 0x03, 0x0c, 0x89, 0x37, 0x89, 0xcb, 0xfd, 0xea, 0x97, 0x35, 0xe9, 0xad, 0x10, 0x94, 0xa6, 0x84, 0x61, 0xc2, 0xeb, 0x6f, 0x71, 0x8b, 0xe4, 0x74, 0xd9, 0x3a, 0x51, 0x93, 0x0e, 0x3c, 0xda, 0x02, 0xc2, 0x1f, 0x63, 0x63, 0x91, 0x4e, 0x7e, 0xda, 0x54, 0x84, 0x03, 0x7a, 0x76, 0xad, 0xc5, 0x33, 0x12, 0xeb, 0x9d, 0xbb, 0xe4, 0x5e, 0x23, 0xa1, 0x4b } -, - /* Encryption */ - 129, - { 0x01, 0x1f, 0xa4, 0x3f, 0x5f, 0x4f, 0xbb, 0x98, 0x30, 0x11, 0x81, 0x4d, 0x4a, 0xf5, 0x45, 0x52, 0x1d, 0xf0, 0xb5, 0x9e, 0x9b, 0x6f, 0xfd, 0x71, 0x33, 0x3b, 0x8f, 0x9b, 0xba, 0xaa, 0x0f, 0xcd, 0xc1, 0x42, 0x1c, 0xe4, 0xbf, 0x31, 0xbf, 0x99, 0x59, 0xfd, 0xc6, 0xb0, 0x9b, 0x4f, 0x42, 0x51, 0xdd, 0xee, 0xe8, 0x21, 0x0f, 0xc3, 0xa5, 0x2f, 0xe7, 0xc7, 0x1a, 0x87, 0x6e, 0x6d, 0xde, 0x1d, 0xfb, 0x59, 0xa4, 0xda, 0xb2, 0x7d, 0x34, 0xfd, 0xce, 0x5b, 0xbf, 0xc6, 0xed, 0x62, 0x3e, 0x89, 0x96, 0x7f, 0xb6, 0xfe, 0x73, 0x16, 0x20, 0x15, 0x28, 0x2c, 0x5f, 0x45, 0x01, 0x38, 0xf2, 0x50, 0x4a, 0xb6, 0x1c, 0x1f, 0x12, 0xd2, 0x64, 0x9d, 0x81, 0x5d, 0x6e, 0x81, 0x38, 0x43, 0x8f, 0x8a, 0x80, 0x46, 0xc4, 0xe8, 0x40, 0xcb, 0x71, 0x85, 0x98, 0xe1, 0xe4, 0xa9, 0xfc, 0x25, 0xa9, 0x45, 0x64 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 7.20", - /* Message */ - 44, - { 0xbe, 0xe2, 0x94, 0x36, 0xc2, 0xa0, 0xde, 0x16, 0xf6, 0x60, 0x42, 0x91, 0x70, 0x07, 0xfb, 0x51, 0x30, 0xf3, 0xc1, 0xaa, 0x7d, 0xf2, 0xc7, 0xc3, 0xbd, 0x99, 0xfb, 0xc1, 0xb4, 0x13, 0xaf, 0x4f, 0x96, 0xa6, 0x5b, 0x0e, 0x54, 0x3e, 0xc6, 0xa5, 0x0b, 0xe8, 0x3a, 0x9f } -, - /* Seed */ - 82, - { 0x23, 0x91, 0xa6, 0x84, 0x25, 0xdd, 0x8f, 0x0b, 0x83, 0xc9, 0xb3, 0x61, 0x24, 0x67, 0xa7, 0x79, 0xcf, 0x92, 0xf5, 0xff, 0x96, 0x11, 0xc0, 0x14, 0x93, 0xbc, 0xbe, 0xf8, 0x65, 0xe1, 0x5b, 0xba, 0x5e, 0x8f, 0xcf, 0x74, 0xbe, 0xb9, 0xea, 0x25, 0x73, 0xa9, 0xfc, 0xe5, 0x41, 0x64, 0xd0, 0x6b, 0xaa, 0x8b, 0x6d, 0xf3, 0x67, 0xcc, 0x4c, 0x6a, 0x11, 0x4a, 0xa0, 0x34, 0x6c, 0x45, 0x4a, 0x2a, 0x9e, 0x60, 0x53, 0x59, 0x18, 0xd3, 0x66, 0x0c, 0x66, 0x48, 0x4e, 0xd9, 0x53, 0x72, 0x7a, 0x9c, 0x9a, 0x25 } -, - /* Encryption */ - 129, - { 0x00, 0x98, 0x9d, 0xdb, 0xd2, 0x8d, 0x60, 0x95, 0xad, 0xa6, 0x88, 0x1e, 0x28, 0x34, 0x1c, 0xe7, 0xa0, 0xa1, 0xca, 0x6b, 0xf7, 0xf3, 0x1f, 0x77, 0x2f, 0x91, 0x04, 0x93, 0xaf, 0xdb, 0xa2, 0xd6, 0x35, 0x9d, 0x50, 0xb9, 0x83, 0x3f, 0x83, 0xd0, 0xab, 0x87, 0x13, 0xab, 0xe8, 0xe2, 0x10, 0x2a, 0x27, 0xab, 0x2a, 0x60, 0x1f, 0xb7, 0x7b, 0x9a, 0x25, 0xd6, 0xa0, 0xaf, 0xf4, 0x0c, 0xfd, 0xcf, 0x9e, 0x12, 0xc4, 0x28, 0x43, 0xeb, 0xad, 0x32, 0x83, 0x24, 0xa7, 0x19, 0xf2, 0x9e, 0x8d, 0x79, 0xea, 0x9e, 0x5d, 0x0d, 0x98, 0x86, 0x95, 0x73, 0x60, 0x34, 0xdb, 0x5f, 0xea, 0x73, 0xdd, 0x36, 0x00, 0x13, 0x6f, 0x57, 0xa3, 0x98, 0xfe, 0x35, 0x2b, 0x27, 0x8c, 0x60, 0xcb, 0x74, 0xec, 0x98, 0xad, 0x57, 0xa3, 0xe1, 0xd8, 0xc4, 0x47, 0x8c, 0xa6, 0x17, 0x9f, 0x4d, 0x04, 0x26, 0xf0, 0xf4, 0x20 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 8: A 1026-bit RSA key pair", -{ - /* Modulus */ - 129, - { 0x02, 0x52, 0xe9, 0x5b, 0xb1, 0x1b, 0xa1, 0xe1, 0xc7, 0xc9, 0x5b, 0x68, 0x53, 0xf8, 0xde, 0x0b, 0xfe, 0x2b, 0x64, 0x03, 0xac, 0x1b, 0xde, 0x81, 0x9d, 0x91, 0x89, 0x07, 0x74, 0x7b, 0x01, 0x99, 0xfa, 0xdb, 0x80, 0x59, 0xc2, 0x5a, 0xaf, 0x1a, 0xc5, 0x65, 0xa7, 0x49, 0x29, 0xd0, 0x15, 0xa2, 0x01, 0xf8, 0x97, 0xa9, 0xba, 0xfe, 0x75, 0x41, 0x68, 0x95, 0x5b, 0x35, 0x5b, 0xb0, 0x09, 0xce, 0x16, 0x14, 0x93, 0x12, 0x28, 0x3c, 0x39, 0xce, 0xe2, 0x20, 0xd0, 0xf0, 0x85, 0x8b, 0x13, 0x81, 0x2e, 0x86, 0xa7, 0xd4, 0xe5, 0x38, 0x8b, 0x7e, 0xae, 0x5a, 0xca, 0x7c, 0x88, 0x6a, 0x76, 0xd3, 0xb1, 0xe6, 0xdd, 0x67, 0x92, 0x68, 0xa8, 0x23, 0x11, 0xe2, 0x82, 0x03, 0x18, 0xcb, 0x8f, 0x0f, 0x7e, 0x85, 0xf0, 0xe6, 0x69, 0x2e, 0xb0, 0xde, 0xdf, 0x30, 0x88, 0x1c, 0xaf, 0x73, 0x15, 0xd2, 0x7d } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 129, - { 0x01, 0x04, 0xc8, 0x5f, 0xd5, 0xd8, 0xd7, 0x93, 0x2a, 0x29, 0x85, 0xc4, 0xcb, 0x7e, 0x9e, 0x13, 0xa2, 0xc4, 0xf1, 0x90, 0x3c, 0x8b, 0x70, 0xf3, 0xdf, 0x97, 0x12, 0xfa, 0xee, 0x20, 0x17, 0xb9, 0x20, 0x82, 0xc5, 0x16, 0x53, 0xc0, 0xbd, 0xde, 0x9d, 0xe6, 0x6c, 0x39, 0x01, 0xb7, 0xc2, 0x2b, 0xe4, 0xf2, 0x4c, 0xc5, 0x6d, 0xff, 0xaa, 0x75, 0xd4, 0x3b, 0x18, 0xa2, 0xe0, 0xc0, 0xdf, 0xe3, 0x72, 0x6b, 0x19, 0x8c, 0xaa, 0x0c, 0x96, 0x65, 0x26, 0x3a, 0x93, 0x79, 0x6a, 0x27, 0xd3, 0x29, 0x84, 0x46, 0x5f, 0x4b, 0x4a, 0xff, 0xca, 0x0d, 0x92, 0xf4, 0xe5, 0x1a, 0x37, 0xe4, 0x1a, 0xb1, 0x55, 0x07, 0x66, 0xd5, 0xca, 0x7e, 0x90, 0xd4, 0xde, 0x90, 0x9b, 0xbd, 0x79, 0x4e, 0x8b, 0xc5, 0x2b, 0x74, 0x99, 0xa7, 0x3e, 0x46, 0x8a, 0xb4, 0x42, 0x13, 0xcb, 0x3a, 0x3b, 0x54, 0x52, 0xd2, 0xff } -, - /* Prime 1 */ - 65, - { 0x01, 0x93, 0x3f, 0x8f, 0x85, 0x82, 0xb8, 0xff, 0xf3, 0xe6, 0xbd, 0x30, 0x42, 0x81, 0x97, 0xf0, 0xac, 0xec, 0x63, 0xe6, 0x91, 0xf7, 0x9b, 0x91, 0xfb, 0xd4, 0xd4, 0xc4, 0x94, 0x2b, 0x8a, 0xe9, 0x13, 0xa4, 0x01, 0xf0, 0xe1, 0x7b, 0xa7, 0x66, 0xd0, 0xa8, 0xee, 0xec, 0x4c, 0xb0, 0xe3, 0xda, 0x17, 0xb6, 0xd9, 0x1f, 0x1a, 0x74, 0x24, 0x88, 0x09, 0x20, 0x1e, 0x37, 0x30, 0x15, 0x18, 0x61, 0x8f } -, - /* Prime 2 */ - 65, - { 0x01, 0x79, 0xad, 0x28, 0x3c, 0xac, 0x68, 0xaf, 0x21, 0x6a, 0x06, 0x86, 0xf4, 0x38, 0xb1, 0xe0, 0xe5, 0xc3, 0x6b, 0x95, 0x5f, 0x74, 0xe1, 0x07, 0xf3, 0x9c, 0x0d, 0xdd, 0xcc, 0x99, 0x0a, 0xd5, 0x73, 0xdc, 0x48, 0xa9, 0x73, 0x23, 0x5b, 0x6d, 0x82, 0x54, 0x36, 0x18, 0xf2, 0xe9, 0x55, 0x10, 0x5d, 0x8c, 0x4a, 0x5f, 0x49, 0x14, 0xbe, 0xe2, 0x5d, 0xe3, 0xc6, 0x93, 0x41, 0xde, 0x07, 0xed, 0x33 } -, - /* Prime exponent 1 */ - 65, - { 0x01, 0x6e, 0xf5, 0x3d, 0x6f, 0x3a, 0xd9, 0x8d, 0x9a, 0x6f, 0xd4, 0xa4, 0x71, 0x31, 0x2b, 0x8a, 0x8a, 0x62, 0x88, 0x3a, 0xcf, 0x84, 0x6b, 0x5e, 0xfa, 0xb3, 0xe0, 0x77, 0x8f, 0x7a, 0xdc, 0x6b, 0x64, 0x43, 0x30, 0xbc, 0xfb, 0x04, 0xa2, 0xff, 0x0e, 0x4d, 0x5d, 0x37, 0x4e, 0x46, 0xfe, 0xe2, 0x7e, 0x08, 0x18, 0x27, 0x94, 0xd4, 0x32, 0x56, 0x55, 0x2f, 0x94, 0x2f, 0x96, 0xa2, 0xeb, 0xd0, 0x03 } -, - /* Prime exponent 2 */ - 64, - { 0xe6, 0xc6, 0xe6, 0x25, 0x5c, 0xfc, 0x82, 0xb7, 0x1a, 0x40, 0x6e, 0xca, 0x60, 0xb2, 0x60, 0xc8, 0x45, 0x07, 0x42, 0x39, 0x18, 0x04, 0x41, 0x85, 0x9c, 0x3f, 0xe4, 0xde, 0x16, 0x4e, 0x46, 0x6c, 0x0b, 0x98, 0xe2, 0xe2, 0x16, 0x22, 0xd1, 0xe1, 0xa7, 0x6f, 0x7f, 0x03, 0x3f, 0x8c, 0xd8, 0xf9, 0x30, 0xb6, 0x69, 0x4f, 0x10, 0xbc, 0x2b, 0x3a, 0x4f, 0xea, 0x91, 0x24, 0xd8, 0x75, 0x63, 0x7d } -, - /* Coefficient */ - 64, - { 0x35, 0x42, 0x45, 0x2e, 0x83, 0x2c, 0x16, 0xac, 0xf9, 0xc3, 0xf4, 0x13, 0x49, 0x23, 0x5e, 0xdd, 0xd2, 0x75, 0xc7, 0x05, 0x3c, 0x55, 0x3b, 0xf8, 0x9e, 0x1a, 0x84, 0x57, 0x12, 0x48, 0x33, 0x3a, 0xad, 0x52, 0x0e, 0x3a, 0x34, 0x46, 0xc4, 0xc5, 0xe3, 0xfd, 0xd9, 0xba, 0xec, 0xd9, 0x29, 0x48, 0x0e, 0xb5, 0xb8, 0xfb, 0xef, 0x8e, 0x03, 0xad, 0xe9, 0xe3, 0x9a, 0x28, 0xfd, 0x8e, 0x75, 0x6c } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 8.1", - /* Message */ - 34, - { 0xf7, 0x26, 0x37, 0xae, 0xc2, 0x8d, 0x2b, 0x6e, 0xbf, 0x8f, 0x73, 0xd7, 0x48, 0x75, 0xdf, 0x01, 0xcd, 0x12, 0x24, 0x8f, 0x00, 0x20, 0x60, 0x8e, 0x61, 0xc7, 0x3d, 0x1a, 0x01, 0xf9, 0x72, 0xf7, 0x4d, 0xee } -, - /* Seed */ - 92, - { 0xcc, 0x20, 0x77, 0xa2, 0x40, 0x01, 0xf3, 0xe3, 0x86, 0x96, 0x94, 0xe4, 0xfe, 0x27, 0x72, 0xbf, 0x93, 0x8f, 0x76, 0x27, 0x66, 0x7b, 0x62, 0xd5, 0x90, 0xf9, 0xee, 0x4f, 0xcf, 0xff, 0xbb, 0xb4, 0x7a, 0xfd, 0x5f, 0xed, 0x6a, 0x18, 0x08, 0x44, 0xa9, 0x12, 0x1a, 0x32, 0xed, 0x7c, 0xbc, 0x56, 0xcd, 0x28, 0x70, 0xa2, 0xd6, 0x96, 0xb9, 0x43, 0xd6, 0xfd, 0xe9, 0x76, 0x7c, 0x1b, 0x96, 0x48, 0x61, 0x6c, 0x32, 0xed, 0x6c, 0x40, 0x0d, 0x42, 0x3d, 0xd4, 0xab, 0x72, 0x16, 0xaf, 0xad, 0xa0, 0x28, 0x40, 0x2e, 0xb2, 0xa1, 0xc3, 0xeb, 0xcc, 0x24, 0x5a, 0xfc, 0x7f } -, - /* Encryption */ - 129, - { 0x00, 0x72, 0x57, 0x5d, 0x3b, 0x11, 0xc5, 0xff, 0xd6, 0xae, 0x24, 0xf3, 0x53, 0xff, 0x74, 0x99, 0x27, 0xb4, 0xae, 0x5d, 0xf4, 0x63, 0xf7, 0x0c, 0x5f, 0x3e, 0xf5, 0x49, 0x6b, 0x0d, 0x14, 0x5e, 0xb2, 0xb8, 0xa5, 0x3c, 0x28, 0xd5, 0x3e, 0xfe, 0x8b, 0xf9, 0xf2, 0x7b, 0x2e, 0xf4, 0xce, 0xea, 0x48, 0x31, 0x05, 0x77, 0xc3, 0xd2, 0xb4, 0xb9, 0x49, 0xa1, 0x2e, 0x3d, 0xf3, 0xf5, 0x67, 0x76, 0x82, 0x88, 0x18, 0x45, 0x2d, 0x81, 0xbd, 0x45, 0xaf, 0x15, 0x8c, 0x87, 0xbb, 0x57, 0x74, 0x5b, 0x8a, 0x10, 0xfc, 0x1a, 0x92, 0xa0, 0xea, 0x55, 0xc8, 0x51, 0x39, 0xf8, 0x42, 0xf7, 0x3f, 0x1d, 0x61, 0x3b, 0x9a, 0x96, 0x4a, 0xf8, 0xed, 0x72, 0x0d, 0x0e, 0x08, 0x47, 0xf7, 0xae, 0x5b, 0x30, 0x5c, 0x05, 0xf1, 0x2c, 0xbc, 0x4c, 0x9c, 0x16, 0x84, 0xac, 0xf9, 0x02, 0x97, 0x0d, 0x82, 0x09, 0x49 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 8.2", - /* Message */ - 60, - { 0x2a, 0x8e, 0x3e, 0xe7, 0xea, 0xc6, 0xb2, 0x2e, 0xc6, 0x58, 0xad, 0x44, 0xd6, 0x66, 0xc8, 0xcd, 0x3f, 0x57, 0xec, 0xea, 0x29, 0x9b, 0x5c, 0xb7, 0xbf, 0x9a, 0x37, 0x3d, 0xfa, 0x66, 0x97, 0x2f, 0x13, 0xe5, 0xf3, 0xa3, 0x00, 0xe8, 0x0e, 0x6d, 0xbf, 0x74, 0x15, 0x68, 0x0d, 0x0d, 0x24, 0x90, 0x1a, 0xd6, 0xb1, 0x40, 0xb0, 0x00, 0xaa, 0xb8, 0x53, 0x51, 0xf9, 0x2f } -, - /* Seed */ - 66, - { 0xfb, 0x19, 0x20, 0x9d, 0x8a, 0x29, 0xaf, 0xaf, 0xbc, 0x05, 0x3a, 0xc1, 0xf3, 0x20, 0xba, 0x60, 0xfc, 0x1f, 0xe1, 0x04, 0xaa, 0x78, 0x39, 0xc8, 0x4c, 0x9b, 0x3e, 0xaa, 0x18, 0xa8, 0xf9, 0x43, 0xbb, 0x21, 0x9f, 0x59, 0xcc, 0x16, 0x7a, 0x38, 0x4b, 0xac, 0x7b, 0xd3, 0x65, 0x82, 0x4e, 0x10, 0x36, 0x31, 0xb9, 0x7b, 0xb9, 0xa6, 0xd1, 0x18, 0xf4, 0xf0, 0xa9, 0x51, 0xfa, 0x47, 0x8a, 0x05, 0xea, 0x09 } -, - /* Encryption */ - 129, - { 0x02, 0x1b, 0x54, 0x64, 0x65, 0x71, 0xa9, 0xa9, 0x3f, 0x0b, 0x0a, 0x03, 0x82, 0xe5, 0x40, 0xa8, 0xc3, 0x97, 0x4c, 0xb3, 0x1c, 0x87, 0xeb, 0xf1, 0x7b, 0x3b, 0xa6, 0x2a, 0x1c, 0x95, 0x21, 0xc5, 0x0d, 0x7f, 0x90, 0x70, 0x2e, 0x13, 0xae, 0x0e, 0x22, 0x26, 0x38, 0x34, 0xe7, 0x64, 0x60, 0x35, 0x15, 0x94, 0x45, 0xa0, 0x87, 0x7d, 0x9a, 0x4f, 0x5b, 0x16, 0x17, 0x7f, 0x7f, 0xe0, 0x52, 0xbb, 0xd0, 0x23, 0xd0, 0x81, 0x89, 0x4f, 0x2d, 0x97, 0xca, 0xc2, 0x45, 0x20, 0x76, 0xca, 0x11, 0x91, 0xa1, 0x71, 0xa4, 0x8f, 0xa1, 0xcb, 0xbb, 0xc3, 0xf0, 0xf6, 0xf3, 0xbc, 0x1a, 0x44, 0x78, 0x40, 0x3a, 0x5a, 0x48, 0x8f, 0xeb, 0xb3, 0xa4, 0x13, 0x80, 0x16, 0x3d, 0x94, 0x2c, 0x97, 0x7b, 0xb8, 0xec, 0xd2, 0x86, 0x6c, 0x5f, 0x5d, 0x91, 0x9e, 0xd2, 0x0c, 0x0d, 0xb3, 0xee, 0x31, 0xef, 0x2f, 0x51 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.3", - /* Message */ - 24, - { 0xd9, 0x9b, 0x4f, 0x10, 0xd9, 0xf3, 0x2e, 0x12, 0xec, 0xfa, 0xe2, 0x63, 0x0b, 0x22, 0xac, 0x02, 0x6a, 0xf9, 0x64, 0xb9, 0xc7, 0x15, 0xd2, 0x07 } -, - /* Seed */ - 102, - { 0xe0, 0xaf, 0x8b, 0x7e, 0xab, 0x36, 0xa6, 0xee, 0x31, 0x6d, 0x78, 0x13, 0x67, 0xf0, 0x9e, 0xa1, 0x1e, 0x31, 0xfd, 0xc1, 0xef, 0x2c, 0xf9, 0xc9, 0x7c, 0x37, 0x9e, 0xaa, 0xcf, 0x68, 0x72, 0xa8, 0x21, 0x3c, 0xbe, 0x4c, 0xe2, 0xe2, 0x9c, 0x77, 0x8b, 0x35, 0x95, 0x40, 0x10, 0x06, 0x3f, 0x17, 0x76, 0xab, 0x5b, 0x17, 0x2d, 0xa6, 0x24, 0xb4, 0x06, 0xa1, 0xc5, 0x8e, 0x0b, 0x57, 0x4a, 0x03, 0xb1, 0xb1, 0xb2, 0xcd, 0x7d, 0x3a, 0x9e, 0x50, 0x35, 0xa9, 0xa9, 0x73, 0x05, 0x8f, 0x04, 0x97, 0x65, 0x2d, 0x2f, 0x73, 0xb1, 0xdc, 0x8f, 0x48, 0x7c, 0x09, 0xcf, 0xe7, 0x1d, 0x8f, 0xf8, 0xf1, 0x45, 0x8c, 0x79, 0x0e, 0xe0, 0xc5 } -, - /* Encryption */ - 129, - { 0x01, 0x02, 0x3b, 0xbe, 0x85, 0x57, 0xc2, 0x63, 0x0a, 0x26, 0x22, 0x46, 0xdb, 0x7a, 0xbc, 0x54, 0x03, 0x43, 0x88, 0x70, 0x38, 0xf6, 0x4c, 0x64, 0x1f, 0xd7, 0x4e, 0xe8, 0x74, 0xae, 0x96, 0x70, 0xfb, 0x28, 0x62, 0xd4, 0x24, 0x70, 0x3d, 0xa2, 0x0b, 0xe4, 0xf4, 0x8b, 0x23, 0x9c, 0xd0, 0x60, 0x43, 0x81, 0x9d, 0x8f, 0x61, 0x51, 0x44, 0xe2, 0xb1, 0xf0, 0x0c, 0x8f, 0x88, 0x49, 0x2e, 0x62, 0xf6, 0xe0, 0x73, 0x16, 0xf8, 0x49, 0x05, 0x35, 0x3b, 0x0b, 0x18, 0x80, 0xed, 0x77, 0xda, 0x2b, 0x62, 0xd3, 0xa9, 0x3b, 0xb7, 0x0f, 0xf6, 0xa5, 0x00, 0x79, 0x38, 0xb9, 0x73, 0xb4, 0xcd, 0x5a, 0xbf, 0xee, 0x0c, 0xf1, 0x3f, 0x5d, 0x4a, 0xb2, 0x16, 0x01, 0x02, 0x68, 0x5c, 0xac, 0x80, 0x81, 0x83, 0x4f, 0x95, 0x55, 0x80, 0x6b, 0xb3, 0x22, 0xd0, 0xdc, 0x5b, 0x8a, 0x2b, 0xf1, 0x28, 0x45, 0x62 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.4", - /* Message */ - 25, - { 0xca, 0xec, 0xa8, 0xe5, 0x9b, 0x81, 0x0c, 0xf7, 0x51, 0x12, 0xf7, 0xed, 0x04, 0x7a, 0x46, 0x69, 0x2c, 0xa0, 0xb7, 0xa8, 0x6e, 0x18, 0x41, 0xd7, 0x19 } -, - /* Seed */ - 101, - { 0x76, 0x1f, 0x68, 0x64, 0xdc, 0xeb, 0xc9, 0x5a, 0x77, 0x9b, 0xc0, 0xb1, 0x6a, 0x95, 0x86, 0x6c, 0x33, 0xdc, 0x8d, 0xca, 0xce, 0x61, 0xcd, 0x7b, 0xf9, 0x01, 0x72, 0xd9, 0x9a, 0xa4, 0x57, 0xdb, 0x6d, 0x90, 0x88, 0x7d, 0x84, 0xc4, 0x73, 0x8d, 0x25, 0xcd, 0xf0, 0xe8, 0x95, 0x69, 0xae, 0x47, 0xd3, 0x07, 0x3e, 0xc4, 0x46, 0xee, 0xed, 0xd5, 0x2d, 0x57, 0x20, 0x8b, 0xdb, 0x69, 0x45, 0x57, 0x03, 0x46, 0x57, 0xa7, 0x03, 0x78, 0x49, 0x37, 0xba, 0x69, 0x4d, 0x42, 0x51, 0x21, 0x38, 0x53, 0x2b, 0x8a, 0xd1, 0xd9, 0x86, 0xfe, 0x47, 0x31, 0x8b, 0x28, 0x23, 0xde, 0x82, 0xce, 0x27, 0x6f, 0xa6, 0xf0, 0xd3, 0xc8, 0xef } -, - /* Encryption */ - 129, - { 0x01, 0x1c, 0x0c, 0x03, 0xf7, 0xb6, 0xe1, 0xc1, 0xa8, 0x41, 0x17, 0x40, 0xa6, 0xe5, 0xb4, 0x73, 0xc2, 0x8d, 0x62, 0x21, 0x17, 0x6c, 0x9d, 0x4f, 0x68, 0x02, 0x4c, 0xa5, 0x7c, 0xda, 0x27, 0x3a, 0xf5, 0x54, 0x74, 0x03, 0x60, 0x99, 0x0a, 0x1b, 0x74, 0xde, 0x34, 0xbc, 0xea, 0x10, 0x3c, 0x2d, 0x0c, 0x36, 0x57, 0x60, 0x02, 0x08, 0x0b, 0x30, 0xbd, 0x28, 0xf0, 0x76, 0xfb, 0x75, 0xfc, 0x9b, 0xeb, 0x9e, 0x05, 0xd1, 0x98, 0x9a, 0x31, 0x1d, 0x12, 0xc1, 0xf2, 0x8f, 0xd6, 0x93, 0x92, 0xad, 0x4b, 0xe5, 0x2c, 0xe3, 0x89, 0xde, 0xc1, 0x1e, 0xba, 0x94, 0x6b, 0xe0, 0x59, 0x91, 0xda, 0x7f, 0xd8, 0x87, 0xa8, 0xd8, 0x76, 0x8d, 0xe7, 0x36, 0xb9, 0x05, 0xbf, 0x4b, 0xdb, 0xe8, 0x8b, 0x85, 0xdf, 0xc3, 0xb2, 0x5a, 0xea, 0x30, 0xfe, 0x90, 0xdf, 0x1d, 0x22, 0xd8, 0xa8, 0xd6, 0x15, 0x65, 0x1c } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.5", - /* Message */ - 39, - { 0x10, 0x12, 0x12, 0x85, 0x6e, 0x60, 0xcd, 0x27, 0x2f, 0xb1, 0x69, 0xcf, 0x62, 0xcf, 0x47, 0xf1, 0xbc, 0x50, 0xef, 0x9f, 0x1f, 0xcf, 0xd2, 0x14, 0x81, 0x6c, 0x80, 0x7f, 0x18, 0x4a, 0x90, 0x3f, 0x16, 0xf0, 0xe8, 0x09, 0xac, 0xf5, 0xe0 } -, - /* Seed */ - 87, - { 0x60, 0x43, 0xc8, 0xdf, 0x6a, 0x7f, 0x4a, 0xb8, 0x3e, 0x31, 0x97, 0xe8, 0xcd, 0x02, 0x25, 0xdc, 0x38, 0x66, 0xb5, 0xd8, 0xe6, 0x99, 0x3c, 0x2c, 0xc5, 0xb8, 0x76, 0x35, 0x1e, 0xe3, 0x3c, 0x71, 0xc1, 0xa4, 0xcc, 0xdc, 0xe4, 0x5f, 0x3e, 0x9d, 0xc7, 0xb7, 0xe5, 0x1b, 0x52, 0xee, 0xbe, 0x0e, 0x27, 0x0e, 0x71, 0x62, 0x07, 0xca, 0x14, 0x03, 0xe1, 0x3e, 0x72, 0x3c, 0xe7, 0x3f, 0x10, 0x45, 0x5e, 0xdb, 0xde, 0x85, 0xb0, 0x82, 0x90, 0x52, 0xed, 0xaf, 0xe5, 0x6e, 0x9a, 0x22, 0x02, 0x4d, 0x40, 0x68, 0x37, 0x1d, 0x36, 0xc9, 0x1f } -, - /* Encryption */ - 129, - { 0x00, 0x05, 0xc5, 0xcf, 0xf8, 0x9b, 0x93, 0x3d, 0x8b, 0x65, 0x23, 0xb3, 0x59, 0x06, 0xbb, 0x3a, 0x71, 0x1a, 0x0f, 0x7f, 0x50, 0x3f, 0x92, 0x14, 0x74, 0x66, 0x59, 0x85, 0x03, 0x91, 0x27, 0x30, 0x3b, 0x00, 0x11, 0xe7, 0xa4, 0x2b, 0x41, 0xc3, 0x3b, 0xd2, 0x0d, 0xb3, 0x1b, 0x15, 0x60, 0xc9, 0xb5, 0x22, 0x20, 0x89, 0xcd, 0xcf, 0x53, 0xb8, 0x2c, 0x95, 0xf8, 0xc1, 0xad, 0xcd, 0x8b, 0x78, 0x3f, 0xd4, 0xb4, 0x8a, 0x45, 0x40, 0x20, 0x66, 0x8e, 0x0b, 0x62, 0x52, 0x0e, 0x52, 0x58, 0x52, 0x09, 0xdb, 0x52, 0x9f, 0x38, 0x70, 0x86, 0x49, 0xd8, 0xe0, 0x64, 0x89, 0x0b, 0x22, 0x8f, 0xb3, 0xc1, 0x98, 0x1b, 0x2a, 0xef, 0x3a, 0x54, 0x65, 0xce, 0xb1, 0x30, 0x21, 0xeb, 0xe0, 0x8d, 0x02, 0xe3, 0x3a, 0xa2, 0xdc, 0x3c, 0x39, 0x28, 0x4e, 0xf7, 0xa8, 0x58, 0xdc, 0xce, 0xb2, 0x8f, 0xfa, 0x28 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.6", - /* Message */ - 17, - { 0x6f, 0x03, 0xb5, 0x72, 0x52, 0x30, 0xde, 0x7f, 0x99, 0x63, 0x69, 0x8e, 0xdb, 0x79, 0x75, 0xec, 0xe8 } -, - /* Seed */ - 109, - { 0xa3, 0x0e, 0xe5, 0xae, 0xab, 0x59, 0x31, 0x03, 0x3e, 0xfb, 0x70, 0xaf, 0xbc, 0x2d, 0x3d, 0x11, 0xa6, 0x33, 0x84, 0xcb, 0x8c, 0xb3, 0x3a, 0x8f, 0xca, 0xe6, 0x14, 0x66, 0x84, 0xe6, 0x3f, 0x0c, 0xc3, 0x2e, 0x89, 0xa7, 0xe4, 0xea, 0x43, 0x32, 0x7b, 0xf0, 0x35, 0x66, 0x95, 0x43, 0x19, 0x28, 0x86, 0xde, 0xc3, 0xfb, 0x4e, 0x2d, 0x08, 0x11, 0xef, 0xa9, 0xae, 0xc5, 0x10, 0x9e, 0x31, 0xb6, 0xa0, 0x56, 0xe5, 0x3e, 0x31, 0x7f, 0x6a, 0x90, 0x4b, 0x13, 0xa7, 0x35, 0x6f, 0x5e, 0x7a, 0xe6, 0x0b, 0x97, 0x21, 0x5e, 0xd1, 0x48, 0x17, 0xd2, 0x8f, 0x74, 0xb1, 0x64, 0x0b, 0x1f, 0x2e, 0x42, 0xef, 0x0d, 0x38, 0xca, 0x35, 0xa3, 0x54, 0xa0, 0xaf, 0xef, 0xa8, 0x03, 0xa4 } -, - /* Encryption */ - 129, - { 0x00, 0x10, 0xbd, 0x2b, 0x35, 0x6f, 0x9e, 0xab, 0xc2, 0x2f, 0x7e, 0x68, 0xf7, 0x2f, 0x61, 0x75, 0xf9, 0xab, 0x9d, 0xed, 0xa9, 0x64, 0x23, 0xb7, 0x4b, 0x11, 0xde, 0x82, 0xc6, 0x07, 0xa1, 0x38, 0x86, 0x3e, 0x17, 0x96, 0x6c, 0x07, 0xf5, 0x6c, 0xde, 0x9e, 0xd6, 0xbc, 0x42, 0x2e, 0xd9, 0xfe, 0xaa, 0x1f, 0x65, 0x36, 0x7c, 0xcf, 0x91, 0xcd, 0x4c, 0x91, 0x58, 0xa7, 0x49, 0x57, 0x1a, 0x0e, 0x9f, 0x96, 0x07, 0xcb, 0x48, 0xcd, 0x00, 0xa4, 0x48, 0xde, 0x03, 0x64, 0x91, 0x06, 0xce, 0x0c, 0x24, 0x06, 0xaa, 0x50, 0xaa, 0x12, 0x17, 0x17, 0x8c, 0xdb, 0x06, 0x80, 0x1c, 0x70, 0xa8, 0x9a, 0x7a, 0x1a, 0x83, 0x06, 0x8e, 0x68, 0xdb, 0x95, 0xd2, 0x4c, 0xa3, 0xdb, 0x33, 0xa7, 0xe5, 0xe4, 0x3a, 0x68, 0x15, 0x22, 0x74, 0xbb, 0xbf, 0x40, 0x06, 0xd9, 0xfb, 0x69, 0xf0, 0x51, 0x4c, 0xc9, 0xe2 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.7", - /* Message */ - 9, - { 0x87, 0x99, 0x13, 0x04, 0x54, 0x61, 0xbc, 0x0e, 0xac } -, - /* Seed */ - 117, - { 0xc3, 0xc6, 0xa2, 0x4a, 0xc3, 0x40, 0xa4, 0xa3, 0xff, 0x3b, 0x2c, 0x30, 0x2b, 0x56, 0xeb, 0x83, 0x91, 0xbb, 0xd9, 0x5f, 0xaf, 0xb6, 0x64, 0x78, 0x38, 0x44, 0x38, 0xab, 0xd8, 0xb4, 0x5d, 0x13, 0x2b, 0x26, 0x99, 0x09, 0xb1, 0x87, 0x84, 0x0a, 0x68, 0x44, 0xad, 0x39, 0x9f, 0xa8, 0x13, 0x72, 0x05, 0xe0, 0x2c, 0xca, 0xe7, 0x77, 0x5c, 0xe6, 0x66, 0x21, 0x20, 0xe1, 0x54, 0xb7, 0xbf, 0xd3, 0x0e, 0x8e, 0xa4, 0xd3, 0x4a, 0x7d, 0xb6, 0xa2, 0x34, 0x88, 0xa5, 0xda, 0xea, 0x38, 0x08, 0x5b, 0xed, 0x56, 0x78, 0x0c, 0xff, 0x87, 0x27, 0x12, 0x5f, 0x1a, 0xd5, 0xf9, 0xd5, 0xa0, 0xbc, 0x3b, 0xe5, 0x80, 0xbc, 0x4f, 0xa0, 0x68, 0x26, 0x7b, 0x27, 0xde, 0x38, 0x3c, 0x55, 0xc7, 0xfc, 0x17, 0x64, 0xc8, 0x6a, 0xc2, 0x1a } -, - /* Encryption */ - 129, - { 0x01, 0xd2, 0x1e, 0xce, 0x33, 0xf4, 0x40, 0xc7, 0x2a, 0x11, 0x1d, 0x62, 0xef, 0x48, 0x6c, 0x77, 0xc6, 0xc8, 0x90, 0xcd, 0x81, 0xa4, 0xeb, 0x05, 0x32, 0xad, 0x2c, 0x0e, 0xc7, 0x68, 0xdd, 0x1d, 0xe5, 0xb2, 0x11, 0x2f, 0xdf, 0x04, 0xe2, 0x87, 0xa9, 0x5b, 0x95, 0x0b, 0x1f, 0xca, 0x5a, 0xe6, 0x93, 0xcf, 0x0e, 0x8a, 0xcc, 0x93, 0x6f, 0x37, 0x47, 0x14, 0xde, 0x74, 0x95, 0x90, 0x8c, 0x29, 0x15, 0xa7, 0x07, 0x21, 0x3a, 0xc3, 0xdb, 0xda, 0xba, 0xd8, 0x1b, 0x4b, 0xa1, 0xcb, 0x50, 0xb9, 0x5f, 0x93, 0x14, 0x53, 0x1f, 0xec, 0x83, 0x3f, 0x08, 0x21, 0xc0, 0x4b, 0x57, 0x40, 0xd7, 0x3b, 0x8c, 0xf1, 0xf9, 0xe3, 0xd7, 0xab, 0xc9, 0x74, 0x49, 0x26, 0x13, 0x8f, 0xb0, 0x15, 0xc0, 0xf0, 0x56, 0xcc, 0x4b, 0xa2, 0xf3, 0x16, 0x37, 0x34, 0xdb, 0x44, 0x3e, 0xbd, 0x68, 0x85, 0x8c, 0x4f, 0xa6 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.8", - /* Message */ - 1, - { 0x5b } -, - /* Seed */ - 125, - { 0x42, 0xb9, 0x99, 0xfb, 0x16, 0x3a, 0x6f, 0xfa, 0x67, 0xa9, 0xbc, 0x4e, 0x6b, 0xa1, 0x2f, 0x81, 0xb1, 0xd5, 0x6e, 0x54, 0xbf, 0x08, 0x66, 0x39, 0x7f, 0xd3, 0x14, 0xeb, 0x0c, 0xf9, 0x7f, 0x13, 0xb7, 0x80, 0x4f, 0x76, 0x8f, 0xba, 0x54, 0x06, 0x21, 0xf0, 0x5c, 0xd3, 0x72, 0x64, 0xd8, 0xe8, 0xf5, 0x82, 0x28, 0xfb, 0x6a, 0xb3, 0x0e, 0xf5, 0x4e, 0x30, 0xfa, 0x8c, 0xfc, 0xb5, 0xa8, 0x7e, 0x14, 0x8f, 0xba, 0xbf, 0x85, 0x88, 0x6a, 0xb1, 0xf0, 0xd5, 0x25, 0x49, 0x2f, 0x56, 0xc6, 0x47, 0xf7, 0x22, 0x9b, 0x2b, 0xf3, 0x94, 0xa0, 0xce, 0xab, 0xbd, 0x37, 0xc9, 0x3e, 0x6d, 0xa8, 0x09, 0x7e, 0x82, 0x72, 0x7b, 0x3d, 0x53, 0xe8, 0xc2, 0xad, 0x1f, 0x77, 0x13, 0xe3, 0x4e, 0xd1, 0x3b, 0xa5, 0x9e, 0x0a, 0x91, 0x4d, 0xb0, 0x6f, 0xaa, 0xe4, 0x9c, 0xb3, 0x79, 0x96 } -, - /* Encryption */ - 129, - { 0x00, 0x90, 0xe5, 0x35, 0x59, 0x47, 0x90, 0x2b, 0xc3, 0xfb, 0x58, 0x0a, 0x84, 0x77, 0x09, 0x03, 0xa3, 0x95, 0x5b, 0x3d, 0xd7, 0x19, 0x1c, 0x92, 0x8f, 0x74, 0x07, 0xba, 0x74, 0x72, 0x65, 0xdc, 0x8c, 0xbc, 0x1d, 0x22, 0xf9, 0x37, 0x72, 0x72, 0xb1, 0xa8, 0xc3, 0x5c, 0x23, 0x8f, 0x04, 0xa1, 0x19, 0x37, 0xd1, 0xb4, 0x35, 0x4f, 0x64, 0x37, 0x95, 0xe9, 0x86, 0xde, 0xe2, 0xe4, 0x0a, 0x40, 0x67, 0x41, 0xb0, 0x21, 0xfd, 0xf0, 0x5c, 0x4b, 0xa1, 0x15, 0x62, 0xe8, 0x3e, 0x9f, 0x28, 0x59, 0x2e, 0x0a, 0x79, 0x14, 0xfe, 0x88, 0xb2, 0xc0, 0xfe, 0x7a, 0x5e, 0xea, 0xf5, 0x00, 0xf7, 0xe9, 0x8a, 0x5b, 0xa9, 0x54, 0xf7, 0x50, 0x77, 0xbc, 0x8f, 0x65, 0x9f, 0x21, 0xbb, 0x22, 0x03, 0x31, 0x4b, 0xe0, 0xd6, 0xd2, 0x1e, 0x63, 0x20, 0xc0, 0x5e, 0x6e, 0x2d, 0x55, 0x79, 0x79, 0x22, 0x6b, 0x80 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.9", - /* Message */ - 50, - { 0xf6, 0x35, 0x29, 0x90, 0x13, 0x24, 0xa2, 0x0f, 0xe5, 0xe9, 0x25, 0x8a, 0xda, 0x2f, 0x95, 0x37, 0xb0, 0x1f, 0x58, 0x39, 0xb4, 0x45, 0x97, 0xe3, 0x29, 0x3a, 0x12, 0x25, 0xca, 0x3a, 0x2a, 0xdf, 0x68, 0x4a, 0x72, 0xa7, 0x93, 0xc6, 0x9c, 0x56, 0xaf, 0x2d, 0x34, 0x98, 0xd3, 0x2a, 0x09, 0x2e, 0x91, 0x4b } -, - /* Seed */ - 76, - { 0x7b, 0xfa, 0x85, 0x97, 0xa4, 0x34, 0xcd, 0xad, 0xfe, 0x15, 0x63, 0x14, 0x44, 0x95, 0x13, 0xd7, 0x6c, 0x10, 0x5d, 0xf1, 0xbf, 0xc4, 0x8c, 0x4d, 0x07, 0x6a, 0xbf, 0xc0, 0x5b, 0x5d, 0xda, 0x72, 0xe0, 0xdd, 0x15, 0xf9, 0xfe, 0x82, 0xa9, 0x95, 0x5b, 0xd5, 0x6d, 0x33, 0x43, 0xe7, 0xc6, 0xf2, 0x5a, 0x60, 0x74, 0x12, 0x07, 0xe7, 0x3a, 0x2d, 0x10, 0xbb, 0x95, 0xd1, 0xd7, 0x29, 0xa2, 0x27, 0x93, 0xe6, 0xc4, 0x55, 0xe9, 0x16, 0x23, 0x5a, 0x81, 0x16, 0x94, 0xdb } -, - /* Encryption */ - 129, - { 0x00, 0xad, 0xf4, 0x78, 0x74, 0x67, 0xea, 0xc2, 0xea, 0x61, 0xfe, 0x7e, 0xf8, 0x2f, 0xd8, 0x7c, 0x2d, 0xa5, 0x89, 0x9f, 0x30, 0x30, 0x2b, 0xbc, 0x11, 0x27, 0x86, 0xd2, 0xfb, 0x11, 0xc1, 0x42, 0xf3, 0xf1, 0xd8, 0xcf, 0x37, 0x16, 0x0d, 0x2e, 0x4a, 0x43, 0x98, 0x3f, 0xfb, 0xd3, 0x93, 0xa4, 0x1b, 0x59, 0x9e, 0xe6, 0xa2, 0x7e, 0x24, 0x64, 0x25, 0x50, 0x2d, 0x46, 0x90, 0x20, 0x2f, 0xe5, 0xf8, 0xee, 0x1b, 0xc6, 0xc1, 0xd5, 0xd1, 0x6b, 0xe2, 0x3b, 0x97, 0x3a, 0xed, 0xf7, 0xf9, 0x11, 0x1b, 0xd8, 0xb1, 0x42, 0x84, 0x42, 0x65, 0xfd, 0x93, 0x57, 0x7a, 0x43, 0xc3, 0xac, 0xc6, 0xe2, 0xaf, 0x20, 0x89, 0xd9, 0xd2, 0xf3, 0xf3, 0x1a, 0x5c, 0x24, 0x7a, 0x7b, 0x68, 0x31, 0x5b, 0xae, 0x25, 0xd5, 0xae, 0x81, 0x40, 0xa5, 0x1f, 0xfc, 0x00, 0x97, 0x10, 0x7e, 0xc1, 0x62, 0x0a, 0xb3, 0xb5 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.10", - /* Message */ - 32, - { 0xc6, 0xd1, 0x4b, 0x04, 0x71, 0x45, 0xf3, 0x17, 0x78, 0x1d, 0xd7, 0x38, 0x2d, 0xc0, 0xa9, 0x72, 0x57, 0xd5, 0x54, 0xbb, 0x53, 0x53, 0x9e, 0xe9, 0xa2, 0x92, 0xe7, 0xda, 0x5c, 0xb6, 0x42, 0x6f } -, - /* Seed */ - 94, - { 0x01, 0xff, 0x38, 0xd5, 0xde, 0xd6, 0xc4, 0x3d, 0xc1, 0xdc, 0x5c, 0x27, 0xa7, 0xe4, 0x81, 0x3f, 0x44, 0x8f, 0x45, 0xc9, 0x6e, 0xdf, 0x4b, 0xd9, 0x3e, 0x96, 0xfa, 0xda, 0x9b, 0xc8, 0xec, 0x5b, 0x43, 0x4f, 0x06, 0x19, 0xa3, 0x8e, 0x04, 0x35, 0x6e, 0x06, 0x27, 0x85, 0x51, 0x40, 0x7b, 0x7f, 0x37, 0xe4, 0x2d, 0x91, 0x45, 0x62, 0x0a, 0x81, 0x98, 0x18, 0x50, 0xa4, 0x9e, 0x28, 0x51, 0x17, 0x2d, 0x23, 0x0b, 0x37, 0x82, 0x41, 0x10, 0xf8, 0xff, 0xdb, 0x84, 0x77, 0x94, 0x63, 0x9d, 0x26, 0x50, 0xcb, 0xed, 0x36, 0x26, 0x01, 0x05, 0xf1, 0xf1, 0x29, 0x6e, 0x52, 0xa7, 0xd4 } -, - /* Encryption */ - 129, - { 0x00, 0x5e, 0xdc, 0x93, 0x97, 0x89, 0xcf, 0xbf, 0xaa, 0xff, 0x28, 0x2b, 0xaf, 0x97, 0x01, 0xd6, 0x1f, 0x9d, 0xbe, 0xe6, 0xf2, 0xd2, 0x06, 0xcf, 0xab, 0x77, 0x57, 0x61, 0xf4, 0x2c, 0xb2, 0x74, 0xec, 0xba, 0x31, 0xc7, 0xcd, 0x2f, 0xe6, 0x03, 0x1a, 0xba, 0x0b, 0x84, 0xd4, 0x62, 0x7d, 0x30, 0x37, 0xe3, 0x1c, 0xe7, 0xe1, 0x56, 0x23, 0xba, 0x7c, 0xb7, 0x69, 0x02, 0x51, 0xc0, 0x63, 0x27, 0xa4, 0x31, 0x37, 0x12, 0x98, 0xdf, 0x29, 0x21, 0x95, 0xb6, 0x45, 0x11, 0x62, 0xd2, 0xda, 0x92, 0xa7, 0x07, 0x8e, 0x2d, 0x07, 0xc9, 0xf5, 0x6a, 0x07, 0x06, 0x8a, 0x9a, 0x3e, 0x17, 0x3e, 0x4a, 0xae, 0x25, 0xa5, 0xd1, 0xc6, 0x8e, 0x68, 0x20, 0x8c, 0xb5, 0x25, 0x3a, 0x0a, 0x53, 0xaa, 0x6e, 0x2e, 0xf6, 0xc2, 0x95, 0xd1, 0x51, 0x65, 0x69, 0xb8, 0x62, 0xcb, 0x92, 0xca, 0x82, 0x3c, 0xcb, 0xab } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.11", - /* Message */ - 63, - { 0xc1, 0x16, 0x53, 0xe8, 0x10, 0xb5, 0x3e, 0x65, 0x11, 0xf1, 0x33, 0x23, 0xfe, 0x52, 0x26, 0xa1, 0x70, 0xc2, 0x1f, 0x6d, 0xaa, 0x44, 0x29, 0xd9, 0x68, 0xef, 0xda, 0x05, 0x29, 0xd7, 0xb6, 0xe1, 0x0d, 0xce, 0xd8, 0x0c, 0x6b, 0x63, 0x01, 0xde, 0xd2, 0x2f, 0x52, 0x91, 0x1c, 0x0f, 0x7f, 0xf4, 0x53, 0x5b, 0xd5, 0xe2, 0x0f, 0xf5, 0x35, 0x88, 0xcd, 0x3d, 0xe6, 0x64, 0x8a, 0xc0, 0x2d } -, - /* Seed */ - 63, - { 0x85, 0xfa, 0x7c, 0x6c, 0xe9, 0x6d, 0x0a, 0x8a, 0x1f, 0xba, 0x75, 0x04, 0x71, 0x7c, 0xcb, 0xe1, 0x37, 0x13, 0x80, 0x93, 0x95, 0x6e, 0xff, 0x06, 0x3f, 0xc2, 0xef, 0xd4, 0xa4, 0x6d, 0x7d, 0xc7, 0x4e, 0x90, 0xf1, 0xda, 0x9e, 0x43, 0xdb, 0xa9, 0x12, 0x9f, 0x14, 0xec, 0x55, 0x9a, 0x4d, 0x2d, 0x6c, 0x5a, 0x19, 0xcb, 0xf3, 0xa6, 0x8c, 0x62, 0xd0, 0x98, 0x34, 0x52, 0xa9, 0xee, 0x0c } -, - /* Encryption */ - 129, - { 0x01, 0xb0, 0x8d, 0x49, 0x83, 0x13, 0xa7, 0xd7, 0x4a, 0x05, 0x53, 0x14, 0xeb, 0x43, 0x15, 0xba, 0x02, 0x87, 0x60, 0xda, 0xd4, 0x11, 0x14, 0xd5, 0x94, 0x2d, 0x63, 0xbf, 0x8d, 0x27, 0xbe, 0x3f, 0x49, 0xcc, 0xd9, 0x4a, 0xcf, 0x9d, 0x3a, 0xa2, 0x2d, 0x09, 0xb9, 0x9b, 0xf9, 0x74, 0x09, 0xbc, 0xf3, 0x32, 0x13, 0xc0, 0x99, 0x67, 0x07, 0x86, 0x82, 0x03, 0xa9, 0xab, 0x27, 0x70, 0x8d, 0x3f, 0xff, 0x69, 0xb8, 0x9d, 0x02, 0xe3, 0x6e, 0x01, 0x21, 0xa1, 0x19, 0xb8, 0xd4, 0xd9, 0xbf, 0xd4, 0xfe, 0x8b, 0x16, 0x8f, 0xd7, 0xc1, 0x2a, 0x24, 0x3f, 0x7a, 0x00, 0x0b, 0x39, 0xbf, 0x8d, 0x56, 0x48, 0x17, 0x24, 0x20, 0x80, 0x23, 0xbb, 0x60, 0x7b, 0x30, 0x50, 0x5d, 0xd1, 0x74, 0x2f, 0x87, 0x9f, 0x16, 0xc1, 0x0c, 0xe4, 0x90, 0xd3, 0x4a, 0x68, 0x0d, 0x27, 0xac, 0x39, 0x60, 0x7d, 0xa2, 0x4e } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.12", - /* Message */ - 50, - { 0x09, 0x5b, 0x77, 0xc9, 0x4d, 0xc1, 0xb1, 0x87, 0x88, 0xe4, 0x00, 0xe6, 0x91, 0x6a, 0x4b, 0x4c, 0xfd, 0x73, 0xac, 0xe0, 0xdf, 0x9a, 0x3a, 0xc1, 0x31, 0xbd, 0xf9, 0xad, 0x0a, 0x12, 0xdb, 0x76, 0x6d, 0xeb, 0x22, 0x53, 0x59, 0xd9, 0x01, 0xcd, 0x56, 0xed, 0x88, 0xcd, 0xa3, 0xd3, 0x28, 0x56, 0x54, 0x02 } -, - /* Seed */ - 76, - { 0xa3, 0x4a, 0x68, 0x05, 0x55, 0x71, 0x09, 0xc2, 0x61, 0xdd, 0xdf, 0x5f, 0x85, 0xd3, 0x71, 0xae, 0x65, 0x20, 0xf4, 0x5a, 0xdf, 0x46, 0x96, 0x01, 0xb5, 0xc3, 0x59, 0xfe, 0xc7, 0x44, 0xcb, 0x2a, 0xae, 0x80, 0x98, 0x3c, 0x73, 0x2d, 0xb6, 0xc5, 0x45, 0xdf, 0x55, 0xe0, 0x20, 0x8a, 0xcf, 0xbb, 0xf1, 0xc2, 0xc5, 0xe7, 0x99, 0x88, 0xf3, 0x4e, 0xcd, 0x6e, 0x5b, 0xb4, 0xb5, 0x25, 0xc1, 0xb8, 0xbc, 0xb0, 0x70, 0xd0, 0xd8, 0x42, 0x48, 0xb1, 0xf8, 0xe7, 0x48, 0x0e } -, - /* Encryption */ - 129, - { 0x00, 0x39, 0x56, 0x36, 0xa8, 0x26, 0x67, 0xdc, 0xf0, 0x0d, 0x5d, 0xbd, 0xd8, 0x54, 0x12, 0x06, 0x94, 0x8d, 0x49, 0x36, 0x89, 0x17, 0xec, 0x0e, 0x00, 0xfd, 0x7a, 0xc5, 0xca, 0x8b, 0xf4, 0x4e, 0xc5, 0x83, 0x78, 0x38, 0x6e, 0x59, 0x4b, 0xc0, 0x65, 0xa9, 0xa6, 0x3c, 0xf2, 0xa3, 0x55, 0xa6, 0x08, 0xb6, 0xf0, 0xba, 0xcb, 0xa5, 0x60, 0x08, 0xbb, 0xa4, 0x72, 0x2a, 0x7c, 0x47, 0x05, 0x45, 0xa2, 0x0f, 0x38, 0x78, 0x53, 0xd4, 0x60, 0x31, 0x3b, 0x2e, 0x86, 0x4e, 0x17, 0xb2, 0x33, 0xe5, 0x96, 0x35, 0x41, 0x32, 0xaf, 0x17, 0x3b, 0x4d, 0x04, 0x49, 0x26, 0x47, 0x79, 0x02, 0x62, 0xd3, 0xa4, 0x3f, 0x84, 0x27, 0x37, 0x88, 0x37, 0x46, 0x6b, 0x06, 0x73, 0xa8, 0x15, 0x27, 0xe6, 0xbe, 0x10, 0x45, 0x80, 0x32, 0x6f, 0xec, 0x84, 0xba, 0x37, 0x1e, 0xa6, 0x10, 0x91, 0xfa, 0x40, 0x33, 0xa4 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.13", - /* Message */ - 1, - { 0x38 } -, - /* Seed */ - 125, - { 0x54, 0x7c, 0x91, 0x75, 0x19, 0x05, 0xd5, 0xa2, 0x84, 0xac, 0x3f, 0xe4, 0x32, 0xcb, 0xe0, 0x30, 0x55, 0xb2, 0x85, 0x06, 0x58, 0x96, 0x11, 0x0e, 0xa3, 0x6d, 0x05, 0xa1, 0x40, 0x08, 0x3c, 0xe3, 0x95, 0x5f, 0xa8, 0x28, 0x41, 0xea, 0xf6, 0xdb, 0x4a, 0x50, 0xd1, 0x2c, 0x07, 0x4f, 0x45, 0xa6, 0x88, 0xb5, 0x57, 0x6d, 0x6e, 0x61, 0x68, 0x07, 0x54, 0x0a, 0xc1, 0x17, 0x58, 0x5c, 0x5b, 0xc3, 0xbe, 0x52, 0x60, 0x72, 0x7c, 0xdf, 0x12, 0x3c, 0x77, 0x4d, 0xb4, 0x0c, 0xff, 0x29, 0x70, 0x88, 0x62, 0x48, 0x53, 0xe4, 0x69, 0x51, 0x36, 0xb9, 0x31, 0x16, 0x15, 0x17, 0xa7, 0xb9, 0xb5, 0xdd, 0xcd, 0x9d, 0x32, 0xde, 0x3d, 0xfe, 0x3e, 0xe2, 0xea, 0x68, 0x8c, 0xf7, 0xbf, 0x88, 0x2c, 0xcf, 0x7b, 0x9c, 0x48, 0xd5, 0xe1, 0x9e, 0xff, 0xa6, 0x50, 0x4a, 0x42, 0x62, 0x0b } -, - /* Encryption */ - 129, - { 0x00, 0x89, 0xe3, 0x9d, 0xcf, 0xdf, 0x91, 0x69, 0x3d, 0xef, 0xe3, 0x9d, 0x12, 0xbb, 0x25, 0xf8, 0x0a, 0x76, 0x8d, 0x44, 0x1b, 0x48, 0x1d, 0x6a, 0x75, 0x48, 0x69, 0x50, 0x42, 0x48, 0x0c, 0xd4, 0xa0, 0xba, 0x97, 0x83, 0xd5, 0xc5, 0xbd, 0x38, 0x89, 0x6d, 0xce, 0x06, 0xac, 0xb1, 0x77, 0xa4, 0xac, 0x59, 0x68, 0xe6, 0x55, 0xa7, 0xaa, 0xf5, 0x0d, 0x69, 0x4a, 0x64, 0x97, 0x13, 0xb7, 0xa4, 0xbd, 0xd1, 0x4c, 0x81, 0x9f, 0x83, 0xb2, 0x04, 0x7d, 0xe2, 0x19, 0x5f, 0x73, 0x03, 0x66, 0x54, 0x53, 0xa8, 0xa1, 0x11, 0x5e, 0x5b, 0x48, 0xac, 0x0e, 0x9a, 0x65, 0xed, 0xdb, 0x31, 0x89, 0x51, 0x7b, 0x04, 0x6f, 0xcb, 0xc2, 0xd1, 0x43, 0x81, 0x77, 0x6a, 0x77, 0xfb, 0x46, 0x8e, 0x11, 0x29, 0x3c, 0x78, 0xc8, 0x37, 0x4c, 0x8f, 0x46, 0x60, 0x35, 0x1a, 0xc2, 0xb2, 0xc7, 0x84, 0x5a, 0x25, 0xfe } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.14", - /* Message */ - 42, - { 0x80, 0x64, 0x6b, 0x3c, 0x4d, 0xf0, 0xeb, 0x79, 0x1b, 0xda, 0x0c, 0xcc, 0x4d, 0x97, 0xd8, 0x1e, 0xa8, 0xf6, 0xf7, 0x4e, 0xb2, 0x45, 0xe2, 0xc7, 0xc3, 0x48, 0xfd, 0x7f, 0xb9, 0x90, 0x16, 0xa9, 0xd4, 0x0a, 0x60, 0x5a, 0xc7, 0x42, 0xb2, 0x7a, 0xd2, 0x48 } -, - /* Seed */ - 84, - { 0x11, 0xb8, 0xe7, 0x98, 0xd7, 0xa1, 0x42, 0xd0, 0x82, 0xe0, 0x59, 0x8a, 0x8c, 0xb4, 0xf8, 0xc2, 0xaa, 0x87, 0x5d, 0x5b, 0x65, 0x17, 0x8c, 0x4e, 0xe6, 0x7a, 0x5c, 0xb8, 0x41, 0xd1, 0xcd, 0xa3, 0x04, 0x31, 0xd0, 0x20, 0xdf, 0x28, 0x80, 0xd7, 0x93, 0x58, 0x15, 0xd5, 0x9d, 0x91, 0xb9, 0x99, 0x3e, 0x53, 0xac, 0x34, 0x1c, 0x97, 0x28, 0x61, 0xea, 0xa2, 0x66, 0x97, 0xcf, 0x10, 0xca, 0x8b, 0x27, 0x94, 0xb4, 0x53, 0x03, 0xbe, 0x03, 0x48, 0x9e, 0xbe, 0x07, 0x4d, 0x8f, 0x23, 0x98, 0x54, 0xc3, 0xa6, 0x06, 0xfb } -, - /* Encryption */ - 129, - { 0x01, 0xf1, 0xe5, 0xa3, 0xdb, 0xd8, 0x24, 0x75, 0x2d, 0x2f, 0xba, 0x3c, 0x32, 0x42, 0xe9, 0xd9, 0x96, 0xe6, 0x27, 0x43, 0x0d, 0x49, 0x3e, 0x1b, 0x44, 0x6a, 0x2d, 0xbc, 0xd8, 0x6a, 0x48, 0x09, 0x3e, 0x37, 0xa2, 0xe1, 0x28, 0xb2, 0x8c, 0x49, 0xd2, 0xd1, 0x72, 0xbf, 0x5a, 0x97, 0x7c, 0x36, 0x9b, 0xaa, 0x9f, 0xfb, 0x83, 0x9b, 0xd2, 0xfd, 0xf0, 0x0b, 0xd3, 0x0f, 0xf5, 0x22, 0x8b, 0x57, 0x6b, 0x94, 0xe6, 0xd8, 0xec, 0xf9, 0x44, 0x24, 0x7a, 0xda, 0xd0, 0x19, 0xf2, 0x1d, 0x06, 0xfb, 0xe4, 0x18, 0xd3, 0xa6, 0xd5, 0x4c, 0xdf, 0x11, 0x3e, 0x8d, 0x14, 0xf6, 0xea, 0x06, 0xd8, 0xdb, 0x79, 0x64, 0x93, 0xbc, 0xb1, 0x89, 0x6f, 0xc4, 0xf3, 0xf3, 0x03, 0x86, 0xc5, 0xc8, 0xba, 0xb7, 0x03, 0x7c, 0x87, 0x9a, 0xfe, 0xa4, 0x7c, 0x8f, 0xb7, 0xa3, 0xc5, 0xb5, 0x0b, 0x29, 0x18, 0x66, 0xb9 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.15", - /* Message */ - 9, - { 0x6b, 0x63, 0x1c, 0x7c, 0x35, 0xea, 0x75, 0xa1, 0xb0 } -, - /* Seed */ - 117, - { 0x3e, 0x42, 0x40, 0xc3, 0xe0, 0x9e, 0xa7, 0x83, 0x55, 0x35, 0x8c, 0xda, 0x61, 0x29, 0x53, 0x47, 0x30, 0xf4, 0x8a, 0x9c, 0x9a, 0x1a, 0x52, 0x13, 0x28, 0x4b, 0xfd, 0x07, 0x71, 0x21, 0x6a, 0xd4, 0xca, 0x23, 0x3d, 0x99, 0x3e, 0xe6, 0x35, 0x7f, 0x4b, 0x1b, 0x12, 0xa6, 0xba, 0xa1, 0x77, 0x43, 0x13, 0x4a, 0x85, 0x7f, 0xd7, 0x69, 0xa8, 0xbc, 0x78, 0xd6, 0x1f, 0xb1, 0x4f, 0xea, 0x05, 0x22, 0x1d, 0xcf, 0x5a, 0xeb, 0x1a, 0xff, 0xd4, 0x0d, 0x8b, 0xc6, 0x94, 0x5c, 0x30, 0x10, 0x45, 0xb6, 0x86, 0xc6, 0x11, 0xfa, 0x43, 0x7e, 0x30, 0xca, 0x0f, 0xab, 0x5a, 0x4c, 0xde, 0xf5, 0x20, 0x5b, 0xaf, 0x99, 0x26, 0xc6, 0x07, 0xbe, 0x96, 0x37, 0xb1, 0x50, 0x7f, 0x50, 0x83, 0xe9, 0x40, 0xcc, 0xfa, 0x2f, 0xb3, 0x86, 0x19 } -, - /* Encryption */ - 129, - { 0x00, 0x47, 0xcb, 0x9a, 0x91, 0x98, 0xd9, 0x83, 0xb3, 0x22, 0x24, 0xcf, 0x27, 0xfc, 0x72, 0x99, 0xbb, 0xd4, 0xae, 0x07, 0x78, 0xa8, 0x3f, 0xc5, 0x9c, 0x47, 0x45, 0xfa, 0x99, 0xe9, 0x17, 0xbb, 0x74, 0xf8, 0xbd, 0x4e, 0xf1, 0x3f, 0x14, 0x0c, 0xa9, 0xb7, 0x2e, 0x2a, 0xa1, 0x74, 0xce, 0xea, 0x26, 0x48, 0x94, 0xe2, 0x15, 0xf4, 0x1c, 0x36, 0xd4, 0xe6, 0xf3, 0x46, 0xf6, 0x9b, 0x4f, 0x85, 0x50, 0x5c, 0x54, 0xcd, 0x46, 0x25, 0x9c, 0x71, 0x2e, 0x30, 0xc4, 0x92, 0x94, 0xba, 0xdb, 0x1c, 0x47, 0x16, 0x85, 0x1f, 0x2b, 0x75, 0xe3, 0x96, 0x12, 0xcd, 0x54, 0x66, 0xba, 0x56, 0xe3, 0xf3, 0x15, 0x99, 0xc2, 0xdc, 0xe2, 0x3d, 0x04, 0xc9, 0x3a, 0x64, 0x40, 0x22, 0x27, 0xdf, 0x40, 0xb5, 0x14, 0xc7, 0x4d, 0x0a, 0xa3, 0x6e, 0x1e, 0x86, 0x58, 0xe2, 0x92, 0x77, 0xb3, 0x05, 0xaf, 0x35, 0x15 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.16", - /* Message */ - 53, - { 0x40, 0x08, 0x55, 0xda, 0x54, 0xa6, 0xd1, 0xfe, 0x5f, 0xb5, 0x8a, 0x73, 0xd2, 0xa5, 0xe5, 0x58, 0x38, 0x70, 0xfb, 0xd5, 0x25, 0xd2, 0xf5, 0x72, 0xad, 0xb5, 0x96, 0x30, 0x06, 0xd0, 0xa1, 0x33, 0x9b, 0xea, 0x88, 0x9d, 0x6d, 0x46, 0xa4, 0x37, 0x62, 0xf5, 0x13, 0xbb, 0x7c, 0xc0, 0x36, 0x22, 0xbf, 0x85, 0x92, 0x44, 0xd6 } -, - /* Seed */ - 73, - { 0x49, 0x6e, 0x50, 0xba, 0xb5, 0xef, 0x18, 0xf2, 0x2c, 0x3f, 0x62, 0xb9, 0x21, 0x14, 0x8d, 0x36, 0xc1, 0x01, 0xad, 0x0a, 0x9a, 0x20, 0x38, 0x67, 0x58, 0x08, 0xce, 0x8b, 0x62, 0xf8, 0xa6, 0xa0, 0xba, 0x8d, 0x91, 0x05, 0xf9, 0x2e, 0xd8, 0xa0, 0x2b, 0x31, 0x2f, 0x32, 0x4f, 0x3f, 0xd3, 0x91, 0x92, 0xbd, 0x41, 0x53, 0x78, 0x4f, 0xb5, 0x59, 0x05, 0xc3, 0xb6, 0x69, 0x30, 0x7b, 0xad, 0xa8, 0x27, 0xaf, 0xa1, 0xb5, 0xcb, 0x3d, 0xc1, 0x1d, 0xc4 } -, - /* Encryption */ - 129, - { 0x00, 0xd3, 0xa8, 0x5d, 0xec, 0x97, 0xd3, 0x44, 0x88, 0xee, 0x33, 0xc6, 0x58, 0xba, 0x18, 0x8e, 0x64, 0xcb, 0x57, 0x83, 0x7d, 0x2e, 0xdd, 0xbc, 0xba, 0x8e, 0xe5, 0x2f, 0x13, 0xf1, 0xe4, 0xfe, 0x9b, 0xec, 0x2f, 0x92, 0xe7, 0x21, 0x09, 0x87, 0xe1, 0xc3, 0xfe, 0x34, 0x5d, 0x40, 0x19, 0x77, 0x0b, 0x07, 0x74, 0x94, 0x51, 0xb0, 0x4d, 0x67, 0x30, 0xd5, 0x3a, 0x91, 0x01, 0x5b, 0x25, 0x7e, 0x81, 0x0d, 0xae, 0x0a, 0x0c, 0x11, 0x6a, 0x4f, 0x22, 0x45, 0x14, 0xed, 0xbd, 0x39, 0xb2, 0xc6, 0x5e, 0x15, 0x2d, 0x3b, 0x97, 0x89, 0xdd, 0xa4, 0xf0, 0xd4, 0x5b, 0xf9, 0x83, 0x2d, 0x27, 0x9d, 0x34, 0x31, 0x06, 0x2b, 0x4d, 0xe1, 0xb0, 0x67, 0x7e, 0xf5, 0x9c, 0x6c, 0x33, 0x27, 0x68, 0xec, 0xda, 0x3a, 0xa6, 0xbc, 0xd1, 0x0f, 0x70, 0xbd, 0x06, 0x03, 0x0a, 0x76, 0x65, 0xed, 0x3f, 0x20, 0x79 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.17", - /* Message */ - 48, - { 0xb8, 0x7e, 0xdb, 0x45, 0x5a, 0x7e, 0x85, 0x53, 0x9f, 0x92, 0x8e, 0xda, 0xe9, 0x09, 0xfb, 0xf8, 0xf7, 0xa1, 0x99, 0xc0, 0x3a, 0x94, 0xa9, 0xa4, 0x5a, 0xca, 0xb2, 0x5e, 0xfa, 0xee, 0xcc, 0x26, 0x29, 0x74, 0xca, 0xe0, 0xbb, 0x72, 0x24, 0x3a, 0x99, 0xc6, 0x47, 0x20, 0x79, 0xf1, 0x97, 0x38 } -, - /* Seed */ - 78, - { 0x03, 0x5e, 0x31, 0x59, 0x4a, 0x56, 0x65, 0x60, 0x5b, 0x84, 0xfe, 0xc9, 0x3a, 0xdf, 0x92, 0x58, 0x50, 0x85, 0x1d, 0xf7, 0xb3, 0x94, 0xe9, 0xbb, 0xec, 0xbe, 0x4d, 0x72, 0xc9, 0x2f, 0x27, 0x03, 0xb6, 0xd6, 0x08, 0x96, 0xe0, 0x05, 0x4c, 0x59, 0xca, 0xfa, 0x5e, 0x0d, 0x28, 0x6c, 0x81, 0x2b, 0x23, 0xe5, 0x37, 0x88, 0x5e, 0x4c, 0x34, 0x38, 0xa7, 0x72, 0xa1, 0x61, 0x0a, 0xe9, 0xfa, 0xe9, 0x18, 0xe3, 0x4d, 0x49, 0x92, 0xc7, 0xf2, 0x63, 0xf3, 0xe8, 0xe2, 0xf9, 0x80, 0xb8 } -, - /* Encryption */ - 129, - { 0x02, 0x1c, 0x8c, 0x95, 0x9a, 0xec, 0x47, 0x29, 0x68, 0x87, 0x68, 0x93, 0x0d, 0x67, 0xe2, 0x02, 0x99, 0xdd, 0x47, 0x90, 0x2d, 0xb0, 0x79, 0xf2, 0x39, 0xb8, 0xc2, 0x88, 0xb0, 0xa7, 0x04, 0x47, 0xc7, 0x19, 0x6b, 0x84, 0x91, 0x2e, 0xaa, 0x5b, 0xc3, 0xaf, 0xf6, 0xba, 0x63, 0x0c, 0x2e, 0xaa, 0x3f, 0xcb, 0xb2, 0x4b, 0xe4, 0x63, 0x83, 0x65, 0x31, 0x25, 0x0b, 0xd4, 0xc4, 0xf2, 0xa1, 0xda, 0x68, 0xc8, 0xbf, 0x4f, 0x40, 0xcf, 0x5c, 0x98, 0xb6, 0x85, 0xeb, 0xec, 0xa4, 0xd0, 0x3e, 0x76, 0xb3, 0x34, 0xaf, 0x0b, 0x1b, 0x34, 0x48, 0x8b, 0x58, 0x2e, 0x29, 0x35, 0x25, 0x35, 0x72, 0xf7, 0xfc, 0xfa, 0xa8, 0x35, 0x44, 0xe7, 0xfd, 0x52, 0xef, 0x45, 0x8a, 0xcc, 0xcb, 0x19, 0x30, 0x1a, 0x4d, 0xdd, 0x50, 0x51, 0x6f, 0x16, 0xa5, 0xfb, 0x78, 0xf3, 0x95, 0x99, 0x00, 0xdb, 0xcc, 0xa1, 0xf2 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.18", - /* Message */ - 38, - { 0x30, 0x2a, 0xc8, 0x0e, 0x30, 0xc6, 0x55, 0x3e, 0x93, 0x59, 0xdf, 0x85, 0xb1, 0xe2, 0x4a, 0x16, 0xc8, 0x62, 0xa2, 0x0f, 0xf4, 0xfd, 0x9d, 0x5f, 0x14, 0x6b, 0xe2, 0x81, 0xdc, 0x30, 0x66, 0xae, 0xb8, 0xfa, 0x00, 0xb5, 0x2a, 0x99 } -, - /* Seed */ - 88, - { 0x32, 0x6c, 0x99, 0x35, 0x8c, 0x4e, 0x5f, 0xa4, 0xd2, 0xc0, 0x43, 0xf0, 0x2f, 0x92, 0x70, 0x5f, 0x79, 0x1c, 0xf7, 0x12, 0xbc, 0x01, 0x04, 0x5b, 0x4c, 0xf3, 0x49, 0xb4, 0x2a, 0xe5, 0xac, 0xfa, 0xc3, 0x78, 0x38, 0x11, 0xbb, 0xf0, 0x7f, 0x34, 0xbd, 0x6c, 0x85, 0x19, 0x55, 0xcb, 0xa4, 0xa8, 0xb2, 0xa7, 0xd1, 0x39, 0xa7, 0x8b, 0xc4, 0xd8, 0x8e, 0x3a, 0x88, 0xe6, 0xc4, 0xcf, 0x49, 0x4e, 0x6a, 0x4a, 0x52, 0x35, 0x41, 0x45, 0xe1, 0x18, 0x83, 0xcb, 0x5c, 0x78, 0xb5, 0x72, 0xf3, 0x0a, 0x51, 0xed, 0x23, 0xf2, 0x56, 0x4b, 0x69, 0x60 } -, - /* Encryption */ - 129, - { 0x02, 0x03, 0x29, 0x87, 0xcc, 0xf7, 0x5a, 0x63, 0x86, 0x24, 0x17, 0x80, 0x64, 0xdb, 0xa4, 0xb7, 0x2b, 0xe5, 0x39, 0xe0, 0x7e, 0xcd, 0xf5, 0x30, 0x03, 0x56, 0xcc, 0x43, 0xd7, 0x29, 0xfe, 0x34, 0xfb, 0x35, 0xbb, 0xbf, 0x5a, 0x32, 0x17, 0x2c, 0xe3, 0x9e, 0xa1, 0xfb, 0x47, 0xd3, 0x8e, 0x49, 0x7a, 0x03, 0xb6, 0x01, 0xee, 0xaf, 0xda, 0xaf, 0x99, 0xa3, 0x4f, 0xd7, 0x21, 0x18, 0x4a, 0xf2, 0xe1, 0x8e, 0x83, 0xd0, 0x50, 0xa4, 0x10, 0x8b, 0x15, 0xe5, 0xe3, 0xa2, 0x7e, 0x0e, 0x63, 0x6d, 0xf8, 0xd9, 0x4f, 0x98, 0x16, 0x58, 0xeb, 0xde, 0xcd, 0xab, 0x0d, 0xef, 0xcc, 0x0d, 0xaf, 0x3a, 0xc9, 0xa2, 0x7b, 0x3f, 0x22, 0xa0, 0x54, 0x1d, 0x35, 0x00, 0x27, 0x52, 0xe9, 0xcc, 0x4f, 0xb2, 0x58, 0x2f, 0xae, 0x25, 0x11, 0xa1, 0x32, 0xec, 0x5c, 0x22, 0x8a, 0x88, 0x72, 0xbd, 0xba, 0xd6, 0x87 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.19", - /* Message */ - 43, - { 0x00, 0xb3, 0x82, 0x01, 0x74, 0x6d, 0xca, 0xf4, 0x03, 0x48, 0xaf, 0x57, 0xba, 0xd7, 0x25, 0x70, 0xca, 0xf5, 0xa2, 0x85, 0x5f, 0xec, 0x6c, 0x42, 0xee, 0x22, 0xdc, 0xfe, 0x64, 0xc9, 0x97, 0xec, 0x62, 0xa5, 0xc9, 0x75, 0x62, 0x4b, 0xbd, 0x1f, 0x8e, 0xc9, 0x16 } -, - /* Seed */ - 83, - { 0x93, 0x91, 0x05, 0xc0, 0x04, 0xc0, 0x1a, 0xa9, 0xf4, 0x74, 0x46, 0xd3, 0xcc, 0xf5, 0x30, 0xe9, 0xb2, 0x17, 0x4c, 0x50, 0xae, 0xbc, 0xa0, 0xa9, 0x5c, 0xb7, 0xa4, 0xd8, 0x39, 0x54, 0xef, 0xb8, 0x03, 0x9e, 0x59, 0x1c, 0x19, 0x71, 0xd7, 0x76, 0xce, 0xc7, 0x61, 0x12, 0x92, 0x06, 0xdb, 0x7a, 0xd3, 0xdd, 0x87, 0x16, 0x68, 0x25, 0x5a, 0x55, 0x50, 0xac, 0x4e, 0x94, 0x8b, 0xe0, 0x5c, 0x16, 0x22, 0x20, 0xdc, 0xef, 0xec, 0x13, 0xff, 0x1f, 0xd8, 0xa5, 0xa7, 0xf7, 0x8b, 0xf7, 0x15, 0xb4, 0x9d, 0x03, 0xba } -, - /* Encryption */ - 129, - { 0x01, 0x2b, 0xa8, 0x7d, 0xc0, 0x3a, 0x1a, 0x38, 0xbf, 0xed, 0xf1, 0x21, 0xed, 0x87, 0x22, 0x82, 0x7b, 0xd9, 0x7d, 0xd6, 0x3f, 0xdd, 0xfd, 0xd5, 0x90, 0x50, 0xc5, 0x3c, 0x5e, 0x7b, 0x49, 0xfb, 0x7a, 0xe6, 0x03, 0x84, 0x87, 0x82, 0x0e, 0xfd, 0x5f, 0xb9, 0x71, 0x43, 0x81, 0xce, 0x8d, 0xae, 0xb5, 0x6d, 0x13, 0x50, 0xbf, 0xc6, 0x7d, 0xf0, 0x91, 0xbe, 0xa2, 0xac, 0xdf, 0xfd, 0xe9, 0x29, 0x2a, 0xb1, 0x29, 0x1c, 0xc9, 0x75, 0x1d, 0x9e, 0x39, 0xa8, 0x26, 0xf0, 0x54, 0xad, 0x1f, 0x33, 0xa2, 0xb7, 0x94, 0xda, 0x50, 0xef, 0x80, 0x67, 0x29, 0x17, 0xe0, 0xb3, 0x81, 0x40, 0x45, 0xd2, 0x3d, 0xf4, 0x5d, 0xba, 0x3f, 0xdc, 0x6f, 0x09, 0xab, 0x0a, 0x01, 0x8b, 0x06, 0x0a, 0xa9, 0xfa, 0xfc, 0x3a, 0x5d, 0x19, 0xd5, 0xeb, 0x64, 0x31, 0x0b, 0xd6, 0x02, 0xa9, 0x91, 0x1d, 0xcb, 0x7f, 0x24 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 8.20", - /* Message */ - 26, - { 0xba, 0x28, 0x33, 0x66, 0x04, 0x76, 0xd8, 0x73, 0x15, 0x07, 0x66, 0x9f, 0x50, 0x29, 0x8c, 0x2c, 0x68, 0xd4, 0x4c, 0x53, 0xe3, 0xd0, 0xa8, 0x03, 0x78, 0x6e } -, - /* Seed */ - 100, - { 0x86, 0xce, 0x8e, 0x92, 0xad, 0x88, 0xb1, 0x46, 0x2a, 0x17, 0x1a, 0xf2, 0x8b, 0x4e, 0x99, 0x08, 0x8c, 0x04, 0x98, 0xa2, 0x9b, 0x4c, 0xa5, 0xe6, 0x6f, 0x64, 0xf8, 0x6a, 0xde, 0xc7, 0xf9, 0x64, 0xe8, 0xeb, 0x82, 0x57, 0xc5, 0xc0, 0x1c, 0xda, 0x16, 0x5e, 0x0f, 0x75, 0x11, 0xdb, 0x14, 0x7c, 0x10, 0xbc, 0x07, 0x51, 0x5f, 0x04, 0xf0, 0x5f, 0x52, 0xd2, 0xbc, 0x89, 0x22, 0x83, 0x57, 0xc6, 0x61, 0xb4, 0x3f, 0x43, 0xd5, 0x42, 0xdb, 0xe7, 0x78, 0x34, 0x09, 0x1c, 0x7c, 0xe7, 0x0b, 0x18, 0x2e, 0x19, 0xbc, 0x93, 0x6c, 0x30, 0x68, 0x4a, 0x83, 0x1e, 0x2c, 0x3b, 0x8a, 0x4a, 0x74, 0x46, 0x3f, 0x0c, 0x9f, 0x1b } -, - /* Encryption */ - 129, - { 0x01, 0x12, 0xac, 0x28, 0x98, 0xa2, 0x5c, 0x13, 0x28, 0x79, 0x1f, 0xc9, 0x6a, 0x82, 0xb7, 0x29, 0x18, 0xb5, 0x1a, 0x66, 0x8c, 0x54, 0x0b, 0xcf, 0xfc, 0x8e, 0x0b, 0x3a, 0xaf, 0xe2, 0x05, 0xee, 0x87, 0x1f, 0x5e, 0xb7, 0x6a, 0xd1, 0x16, 0xd3, 0x04, 0xcc, 0x04, 0x42, 0xbd, 0xb1, 0xaf, 0x5b, 0x9a, 0x63, 0x45, 0x82, 0x7e, 0x67, 0x8e, 0x40, 0xe3, 0x3f, 0xc8, 0x58, 0xef, 0x6c, 0x45, 0x6b, 0xe4, 0x36, 0x52, 0xbb, 0x2e, 0xbc, 0x39, 0x64, 0xb4, 0xbf, 0x4a, 0x93, 0xa8, 0xee, 0xef, 0x84, 0x04, 0xae, 0xf1, 0xa0, 0x44, 0x41, 0x5a, 0x15, 0x6f, 0x7c, 0xfd, 0x79, 0x95, 0xac, 0x25, 0xe7, 0xb0, 0x30, 0x26, 0x69, 0x8e, 0x14, 0x48, 0x9e, 0xfc, 0xc1, 0xae, 0x92, 0x96, 0x58, 0xbb, 0x66, 0x3d, 0xe0, 0xac, 0x44, 0xa7, 0xa5, 0x5c, 0xaa, 0x0b, 0x0b, 0x20, 0x34, 0xc2, 0xaa, 0xec, 0x13, 0x4e } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 9: A 1027-bit RSA key pair", -{ - /* Modulus */ - 129, - { 0x06, 0x8e, 0xf0, 0xb2, 0x74, 0x15, 0x7d, 0x7b, 0x5e, 0xc7, 0x29, 0x03, 0x86, 0x59, 0x56, 0x18, 0x3e, 0x0e, 0x34, 0x62, 0xec, 0xd2, 0x21, 0x14, 0xca, 0xd4, 0xc7, 0xba, 0xac, 0x94, 0xc7, 0xc2, 0xc5, 0xe6, 0xcb, 0xdf, 0xa2, 0xab, 0xfe, 0xaf, 0x8d, 0x23, 0x18, 0x2e, 0x9c, 0x08, 0x81, 0x5d, 0x10, 0x0d, 0x8e, 0x8f, 0x62, 0x1d, 0x3c, 0xd4, 0xaf, 0xbb, 0x99, 0x85, 0x96, 0x6f, 0xd6, 0xa4, 0x18, 0x2b, 0x59, 0x90, 0x88, 0xa3, 0x5d, 0x77, 0xfe, 0x01, 0x78, 0xac, 0xf7, 0x53, 0x1c, 0x70, 0xd8, 0x96, 0xff, 0x78, 0x8e, 0xdc, 0x82, 0x06, 0x05, 0x40, 0xef, 0xef, 0xd9, 0xf3, 0xc2, 0x4d, 0x5b, 0xe6, 0x9a, 0xf7, 0xf2, 0xf4, 0x44, 0x85, 0xb1, 0x91, 0x18, 0xa4, 0x68, 0x81, 0x4f, 0xc5, 0x13, 0xe3, 0xa1, 0xce, 0xd6, 0x77, 0x91, 0xf9, 0x03, 0x6e, 0xee, 0x56, 0xfa, 0x9e, 0x20, 0x60, 0x2b } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x71, 0x94, 0x0b, 0xe6, 0x79, 0x7b, 0xb3, 0x28, 0x5e, 0xbd, 0xc2, 0x0c, 0xc9, 0x27, 0x5f, 0x5d, 0x77, 0x55, 0x88, 0xe9, 0xaf, 0x6f, 0x68, 0x7a, 0x2e, 0x39, 0xd2, 0xc1, 0x91, 0x11, 0x10, 0x76, 0x95, 0xdd, 0xed, 0xe3, 0x91, 0xd2, 0x19, 0x6b, 0x29, 0x58, 0x1d, 0xf3, 0x15, 0x4a, 0x37, 0x12, 0xfa, 0x6f, 0xcd, 0xf8, 0x5b, 0xb4, 0xfd, 0x48, 0x64, 0x1f, 0x07, 0x1f, 0xfd, 0xb1, 0xde, 0x08, 0xa1, 0xd5, 0x92, 0x1c, 0xa1, 0x0e, 0x68, 0xdc, 0x04, 0x13, 0x13, 0xc9, 0xbb, 0xcb, 0x80, 0x81, 0xbd, 0xb5, 0xd4, 0x60, 0x42, 0x27, 0xcb, 0xe5, 0x78, 0x07, 0x41, 0x65, 0x74, 0xd1, 0xa3, 0x8d, 0xa0, 0xb2, 0x34, 0x4b, 0xb2, 0x15, 0xb4, 0x18, 0x2b, 0x10, 0x6b, 0x2b, 0x53, 0x4a, 0x8d, 0x32, 0x06, 0xf2, 0xd7, 0xd3, 0x03, 0xb8, 0xdd, 0x5b, 0xce, 0x29, 0x2a, 0xbf, 0x75, 0xcd, 0x76, 0x49 } -, - /* Prime 1 */ - 65, - { 0x02, 0x95, 0x10, 0xb9, 0x33, 0xb7, 0xc8, 0x4e, 0x41, 0xff, 0xcc, 0x72, 0x2e, 0x32, 0x38, 0x60, 0xc9, 0xb2, 0xd0, 0x88, 0x3c, 0x68, 0x33, 0x62, 0x4b, 0xa5, 0xbb, 0xb8, 0x97, 0x53, 0xd7, 0x60, 0x3a, 0x7d, 0xcf, 0x26, 0x6c, 0xc8, 0xf4, 0xbb, 0x07, 0x48, 0x48, 0x26, 0x0f, 0x68, 0xdd, 0x82, 0x6b, 0x63, 0x8a, 0x8d, 0xd2, 0xef, 0xaf, 0x68, 0xaa, 0xee, 0x26, 0x5a, 0xe8, 0x98, 0x39, 0xb1, 0x63 } -, - /* Prime 2 */ - 65, - { 0x02, 0x8a, 0x2d, 0x03, 0x34, 0x49, 0x44, 0x62, 0xf6, 0x11, 0xf3, 0x60, 0x3e, 0x0d, 0x37, 0x4f, 0x3e, 0x32, 0xd2, 0xfa, 0xb5, 0xe9, 0xd6, 0x97, 0x2d, 0xfd, 0x70, 0x79, 0x64, 0x46, 0xa4, 0x8b, 0xc3, 0x03, 0xee, 0x25, 0x8b, 0x75, 0xa1, 0xb7, 0xac, 0xe7, 0x0d, 0x48, 0x58, 0x51, 0x79, 0x4e, 0x42, 0x84, 0xf2, 0xdc, 0x51, 0xd3, 0x97, 0x8d, 0x55, 0x53, 0x7b, 0xea, 0x22, 0x55, 0x11, 0xf4, 0x99 } -, - /* Prime exponent 1 */ - 65, - { 0x01, 0xb9, 0x55, 0x0d, 0xdf, 0xda, 0x3d, 0x6f, 0x09, 0x9e, 0xe5, 0xf6, 0x00, 0xa3, 0x64, 0x82, 0x31, 0x86, 0x20, 0xb4, 0x23, 0x68, 0x09, 0x8e, 0x01, 0x24, 0xe7, 0x5b, 0x88, 0x23, 0xe0, 0x31, 0x0d, 0x3b, 0xba, 0xd5, 0x53, 0x61, 0x22, 0x09, 0xcf, 0x05, 0xd1, 0xad, 0x1f, 0x32, 0x8a, 0x57, 0xac, 0xac, 0x2a, 0xef, 0x1e, 0x39, 0x08, 0x69, 0x1f, 0x5c, 0x98, 0xdc, 0xae, 0x56, 0x1a, 0x86, 0x33 } -, - /* Prime exponent 2 */ - 64, - { 0xe8, 0xff, 0xa4, 0x8c, 0x52, 0x4d, 0x5d, 0xa1, 0x8d, 0x61, 0x48, 0x76, 0x34, 0x4a, 0x43, 0xed, 0xa8, 0x4d, 0x0f, 0x67, 0xad, 0xbb, 0x27, 0x46, 0x65, 0xf2, 0xae, 0xae, 0x0e, 0xda, 0xdc, 0xf3, 0x30, 0x2f, 0x61, 0xe9, 0x0e, 0x68, 0xbb, 0xe8, 0x0c, 0x8d, 0x28, 0x05, 0xee, 0x7c, 0xa8, 0x5d, 0x12, 0x43, 0xee, 0x4c, 0xac, 0xa5, 0x3d, 0x12, 0xfc, 0xee, 0x05, 0x43, 0xf4, 0x74, 0x90, 0xd1 } -, - /* Coefficient */ - 65, - { 0x01, 0x98, 0x4a, 0x81, 0x5c, 0xdb, 0x46, 0xad, 0x81, 0xcd, 0x82, 0x10, 0xaa, 0x07, 0x22, 0x70, 0x0c, 0x59, 0x90, 0x9d, 0xdc, 0x9c, 0x4a, 0x49, 0xf1, 0x9b, 0xe1, 0x5d, 0xa6, 0x04, 0x47, 0x8c, 0x21, 0x88, 0x81, 0xd5, 0x43, 0xa7, 0x54, 0x6b, 0xf7, 0x75, 0x69, 0x4c, 0x2b, 0xd1, 0x3d, 0xda, 0x69, 0x2c, 0xd0, 0xbc, 0x24, 0x39, 0xef, 0x22, 0xef, 0xb6, 0x7f, 0xfc, 0x5d, 0x46, 0x95, 0x21, 0xb2 } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 9.1", - /* Message */ - 61, - { 0x96, 0xad, 0x3b, 0xa4, 0xd2, 0x9b, 0xdd, 0x35, 0x25, 0xbb, 0xc5, 0xd0, 0x2e, 0x88, 0xc0, 0x13, 0x3f, 0xfd, 0xea, 0x40, 0x94, 0x74, 0xdb, 0x34, 0xdf, 0x73, 0x3c, 0xa5, 0x9c, 0x3a, 0x23, 0x2f, 0x6a, 0x64, 0xc2, 0x14, 0x3c, 0xa1, 0x31, 0xa7, 0xf1, 0x8d, 0x00, 0x5b, 0xb3, 0xaa, 0x6c, 0xa1, 0xea, 0xbe, 0xaa, 0x13, 0x6b, 0xec, 0x37, 0xdb, 0x11, 0x1d, 0x4d, 0x8f, 0x61 } -, - /* Seed */ - 65, - { 0x10, 0xe9, 0xf5, 0x09, 0x3c, 0xec, 0x87, 0x2e, 0xdb, 0x16, 0x16, 0x2b, 0x6b, 0xbd, 0x52, 0x12, 0xf6, 0x10, 0x1a, 0x71, 0xd5, 0x1d, 0xc1, 0x42, 0x0c, 0xad, 0xd1, 0xd5, 0x50, 0xfa, 0xf9, 0xaf, 0x40, 0xf5, 0x73, 0xd3, 0xe3, 0xab, 0x68, 0x91, 0xd8, 0xa8, 0x82, 0xef, 0x06, 0x56, 0xbc, 0x30, 0x06, 0x2a, 0x05, 0xb1, 0xcc, 0x27, 0x7a, 0x11, 0xc9, 0xba, 0x2e, 0xfd, 0x51, 0x03, 0xc5, 0x6e, 0x23 } -, - /* Encryption */ - 129, - { 0x04, 0xde, 0xc0, 0x1b, 0xbf, 0x8e, 0x0c, 0x22, 0x96, 0xd9, 0xf5, 0xbc, 0x2d, 0x2b, 0xa8, 0x95, 0x34, 0x3e, 0xc3, 0x0e, 0xc5, 0x44, 0x13, 0x57, 0x6d, 0x80, 0x84, 0xb9, 0x31, 0x43, 0xcf, 0xa2, 0xd2, 0x03, 0x3b, 0xf4, 0xc2, 0xc2, 0xe0, 0x3f, 0x5b, 0x02, 0x59, 0xed, 0xf1, 0x4a, 0x8f, 0x3e, 0x11, 0x69, 0x85, 0x77, 0x65, 0x2a, 0x2a, 0xb9, 0xf5, 0x1a, 0xb0, 0x18, 0x7c, 0xc7, 0x51, 0x75, 0xc8, 0x6d, 0xfc, 0x9a, 0x45, 0xb1, 0xe4, 0xeb, 0x8b, 0x54, 0x47, 0xa9, 0x4a, 0xb9, 0xb5, 0x17, 0x7a, 0x04, 0x04, 0xba, 0x49, 0xe5, 0x7f, 0x83, 0xc9, 0x3f, 0x7f, 0xe2, 0xde, 0x24, 0x18, 0x45, 0xf5, 0x81, 0xf6, 0x42, 0x12, 0x43, 0x7e, 0x0c, 0x04, 0xff, 0x34, 0xea, 0x1d, 0xee, 0x6d, 0xd2, 0x8f, 0x6f, 0xf3, 0x36, 0x72, 0x35, 0x44, 0x13, 0x74, 0xf0, 0xf2, 0xef, 0x71, 0xa9, 0xcd, 0xae, 0x9e } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 9.2", - /* Message */ - 37, - { 0x7f, 0x92, 0xab, 0xb6, 0xe5, 0x2e, 0xd5, 0xd4, 0x20, 0x84, 0x9e, 0xd6, 0xcc, 0xab, 0x36, 0xc3, 0xd0, 0x84, 0x92, 0x55, 0x43, 0x1e, 0x19, 0x3d, 0x67, 0xbd, 0x94, 0x4b, 0x6c, 0x0f, 0xce, 0xfb, 0x77, 0x29, 0xcf, 0x5a, 0x31 } -, - /* Seed */ - 89, - { 0xce, 0xa9, 0x68, 0xbe, 0x78, 0xab, 0x5f, 0xaa, 0xc2, 0x27, 0xdc, 0x3c, 0x6f, 0xc9, 0xce, 0xd4, 0x9f, 0x85, 0x1e, 0xd5, 0x8b, 0x08, 0xd5, 0xca, 0x37, 0x54, 0x28, 0x48, 0x9a, 0xfb, 0xef, 0x3b, 0xf5, 0xed, 0x83, 0x74, 0x6d, 0x95, 0x9a, 0x0a, 0x56, 0xe9, 0xac, 0x66, 0xff, 0x2e, 0x7c, 0x8b, 0x8c, 0x3a, 0xda, 0x97, 0xfa, 0x15, 0xdd, 0x7f, 0x99, 0x13, 0x41, 0x74, 0x70, 0x70, 0xcc, 0xad, 0x65, 0x42, 0xbd, 0x7f, 0x4b, 0x33, 0xf5, 0x56, 0x04, 0x45, 0x8b, 0x91, 0x03, 0xae, 0x13, 0xdc, 0x89, 0xb4, 0xe6, 0x2c, 0xcb, 0xf8, 0x4f, 0xf7, 0x3b } -, - /* Encryption */ - 129, - { 0x02, 0x5a, 0x1e, 0x65, 0xeb, 0x37, 0xf4, 0xb3, 0x28, 0xcc, 0x31, 0xb0, 0x17, 0x24, 0xf8, 0x3c, 0x26, 0xed, 0x8d, 0x18, 0xa6, 0x51, 0x65, 0x21, 0x3b, 0xa0, 0xef, 0xf7, 0xae, 0x76, 0x7e, 0xe6, 0x0b, 0x99, 0x27, 0x76, 0x1a, 0x06, 0x94, 0xb5, 0xc3, 0xbb, 0x64, 0xb7, 0xe0, 0x39, 0x96, 0xa3, 0x56, 0x8d, 0x6f, 0xd1, 0xac, 0x6b, 0x7a, 0x8b, 0x71, 0x97, 0x5b, 0xb0, 0x71, 0x6d, 0x94, 0x5c, 0x02, 0xd4, 0x73, 0x68, 0x96, 0x6f, 0xff, 0xb1, 0xd4, 0x49, 0xfc, 0x6e, 0xd7, 0x3e, 0x2d, 0x19, 0x83, 0x1b, 0x86, 0xd1, 0x87, 0x67, 0x51, 0x29, 0x36, 0x69, 0xe7, 0x7d, 0x6e, 0x12, 0xa0, 0xf0, 0xc9, 0x62, 0xdf, 0xcd, 0x40, 0x0f, 0xb8, 0x3c, 0xe8, 0x26, 0x07, 0x16, 0x31, 0x7a, 0xd5, 0xfd, 0xe2, 0x18, 0x49, 0xaa, 0x6f, 0x68, 0xe7, 0x0c, 0xe0, 0xb5, 0xb3, 0x11, 0x42, 0x89, 0x8a, 0xd1, 0xa2 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.3", - /* Message */ - 61, - { 0xf5, 0xb5, 0x35, 0xb6, 0x3d, 0x53, 0x5e, 0x21, 0x37, 0x73, 0x2c, 0x30, 0x13, 0x37, 0xc9, 0x53, 0xea, 0x2e, 0xdd, 0x58, 0xa7, 0x8c, 0x20, 0x25, 0x83, 0x2d, 0xca, 0x9d, 0x6b, 0xcd, 0xad, 0x87, 0xc9, 0x97, 0xc9, 0x06, 0x83, 0x6b, 0x2b, 0xf9, 0x5c, 0x83, 0xf0, 0x3f, 0x7a, 0xfa, 0x29, 0x01, 0x34, 0x6d, 0x67, 0x4a, 0xa6, 0x9a, 0x1b, 0x47, 0xf6, 0xb9, 0x16, 0xfd, 0x4b } -, - /* Seed */ - 65, - { 0xc8, 0x9e, 0xfd, 0xb2, 0x34, 0xe0, 0x1a, 0x2f, 0x07, 0x76, 0x29, 0x57, 0xe8, 0xc0, 0xa4, 0xf9, 0x1a, 0xba, 0xe6, 0xd4, 0xf3, 0x60, 0xe8, 0x9a, 0x7c, 0x48, 0x6c, 0x55, 0x49, 0xf3, 0xd0, 0xad, 0x75, 0x77, 0x7f, 0x0c, 0xcd, 0x97, 0xa0, 0x97, 0x5e, 0x98, 0x44, 0xd9, 0x86, 0x87, 0x02, 0x76, 0xc9, 0x82, 0x5f, 0x5d, 0x1e, 0xef, 0x3d, 0x1b, 0x48, 0x7a, 0xbc, 0xd1, 0x9b, 0x51, 0x2d, 0x08, 0xbe } -, - /* Encryption */ - 129, - { 0x03, 0x9a, 0x1c, 0xe8, 0xc0, 0x91, 0x62, 0x51, 0xa0, 0x1e, 0x5f, 0xb6, 0x61, 0x5d, 0x2e, 0x11, 0x98, 0x2f, 0x4f, 0xae, 0x7d, 0x46, 0xdf, 0x21, 0xda, 0xa2, 0x98, 0xf2, 0xc7, 0x46, 0x11, 0xb5, 0x58, 0x16, 0xcc, 0x27, 0xfa, 0x37, 0x27, 0x9a, 0xaf, 0x59, 0x02, 0xec, 0xb6, 0xc8, 0x39, 0xfa, 0x90, 0x0c, 0xf3, 0xaf, 0x86, 0xff, 0x40, 0xa4, 0x47, 0xdc, 0x40, 0x22, 0x35, 0xf9, 0x06, 0x67, 0x91, 0x23, 0xf3, 0xcd, 0x38, 0x19, 0x04, 0xf3, 0x3e, 0xee, 0x35, 0x3a, 0xc9, 0x0d, 0x5f, 0x7f, 0x20, 0x3a, 0x6e, 0xa8, 0x91, 0x35, 0x1a, 0xdb, 0x11, 0x60, 0x1b, 0xd9, 0xd6, 0xb0, 0xa0, 0x24, 0x33, 0x3a, 0x24, 0x55, 0xbe, 0x1c, 0xa6, 0x2e, 0xd8, 0x2c, 0xf3, 0x7c, 0xf8, 0xde, 0x4e, 0x23, 0x92, 0xdd, 0x54, 0xe7, 0x75, 0x03, 0x3c, 0x56, 0x99, 0x0b, 0xae, 0x5c, 0x43, 0x91, 0xb6, 0x65, 0x3a } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.4", - /* Message */ - 47, - { 0xa7, 0xcf, 0x29, 0x82, 0x03, 0x47, 0xa5, 0x2a, 0xb9, 0xcc, 0x42, 0x04, 0xbb, 0x6a, 0xc1, 0xbd, 0x7f, 0xd9, 0x0a, 0x75, 0x8a, 0x15, 0x6d, 0xfa, 0x9c, 0xe7, 0x19, 0x27, 0xe7, 0x4e, 0xe2, 0x15, 0x98, 0x70, 0x8c, 0xf6, 0x9c, 0xfd, 0x79, 0x85, 0x74, 0x2f, 0x50, 0x27, 0xff, 0xa7, 0x10 } -, - /* Seed */ - 79, - { 0x10, 0x9f, 0x0d, 0x6c, 0xa0, 0xe1, 0x3f, 0x50, 0x4c, 0x07, 0xd8, 0x4a, 0x5b, 0xbe, 0x43, 0xed, 0x6a, 0x94, 0xac, 0xba, 0xfa, 0xb0, 0x48, 0x89, 0x36, 0x05, 0xd3, 0x41, 0xc5, 0xd2, 0x8d, 0x85, 0x44, 0xc3, 0xfd, 0x28, 0x43, 0x50, 0xf2, 0xc2, 0x2d, 0x1f, 0x36, 0x7d, 0xfb, 0x9b, 0x6a, 0x67, 0x51, 0xd0, 0x6a, 0xae, 0xb1, 0x7c, 0x3c, 0x0a, 0x10, 0x11, 0xae, 0x38, 0xfb, 0xa4, 0xe4, 0x6d, 0x4e, 0x44, 0xc4, 0x82, 0x87, 0x9e, 0xba, 0x06, 0x44, 0x37, 0x48, 0x71, 0xb5, 0xc5, 0x3b } -, - /* Encryption */ - 129, - { 0x04, 0x48, 0xc3, 0x9c, 0xc4, 0x57, 0xd6, 0xcc, 0xc3, 0x0b, 0x0d, 0x76, 0xff, 0x5a, 0x13, 0x2e, 0x00, 0xc7, 0x5d, 0x53, 0x36, 0x46, 0xb8, 0x44, 0x0b, 0x13, 0xce, 0x73, 0x0e, 0x1b, 0x7a, 0xd8, 0x3b, 0xb2, 0xba, 0x4a, 0x08, 0x2b, 0xb5, 0xa3, 0x3c, 0xf4, 0x14, 0x66, 0xe0, 0x67, 0xfc, 0xf1, 0x6c, 0x6a, 0x29, 0xf1, 0x87, 0x9f, 0x77, 0xe9, 0xb0, 0xdb, 0xf3, 0xec, 0x08, 0x05, 0x75, 0xbe, 0xba, 0xc0, 0xc5, 0x67, 0x6b, 0xae, 0xe0, 0x02, 0xd5, 0x73, 0xd1, 0xbc, 0xc8, 0xa7, 0x0f, 0xed, 0x2a, 0xb6, 0x79, 0x43, 0xef, 0xc9, 0xbc, 0x13, 0x13, 0x9e, 0x5d, 0x8d, 0xde, 0x2c, 0xb3, 0x0e, 0x1b, 0x93, 0x4f, 0x50, 0xcf, 0x6c, 0x45, 0x73, 0x92, 0x3f, 0x73, 0x98, 0xde, 0x66, 0x70, 0xcc, 0x26, 0x34, 0x1f, 0x3e, 0x35, 0xa4, 0x19, 0x36, 0x1e, 0x59, 0xf6, 0x08, 0x98, 0xf2, 0x69, 0x2b, 0x94 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.5", - /* Message */ - 10, - { 0xb8, 0x03, 0xc7, 0xef, 0x5f, 0x9a, 0x9b, 0xd5, 0x84, 0x01 } -, - /* Seed */ - 116, - { 0x8e, 0x77, 0x58, 0xed, 0x4d, 0x1b, 0xa4, 0xdc, 0xe0, 0x88, 0x92, 0x6c, 0x10, 0xb2, 0xf3, 0xd4, 0xc1, 0xe2, 0x67, 0x1a, 0xe7, 0x2e, 0x65, 0x9f, 0x72, 0x1f, 0xf7, 0xbe, 0x6f, 0xc0, 0x35, 0xe3, 0x85, 0xd5, 0x12, 0xd0, 0x7a, 0x38, 0xdc, 0xca, 0x1e, 0xb8, 0x31, 0xfe, 0xf9, 0x06, 0x10, 0x04, 0x44, 0xee, 0x99, 0x5c, 0xb0, 0x7b, 0xc2, 0x6a, 0x5d, 0xc9, 0x2b, 0x27, 0x2a, 0x74, 0xa9, 0x2d, 0x21, 0x49, 0x73, 0x25, 0x22, 0xd5, 0x39, 0x43, 0x4f, 0xa4, 0xd0, 0x3b, 0x07, 0xcf, 0x96, 0x99, 0x95, 0x8c, 0x19, 0x89, 0x1d, 0x1d, 0x59, 0x06, 0xaa, 0x36, 0xd0, 0xa8, 0xd0, 0x6c, 0x6f, 0xc8, 0x7a, 0x45, 0x51, 0xbf, 0x18, 0x58, 0xbd, 0xfe, 0xd5, 0xf8, 0x86, 0xcc, 0x8d, 0x31, 0xee, 0x4c, 0x16, 0x4e, 0x98, 0x1d } -, - /* Encryption */ - 129, - { 0x04, 0xb6, 0x2d, 0x4d, 0x4b, 0x9c, 0x1c, 0x3e, 0x05, 0x13, 0x09, 0x79, 0x5c, 0x69, 0x24, 0x8a, 0xed, 0x38, 0x9d, 0xe2, 0x4a, 0x6c, 0x79, 0x53, 0x8a, 0x2d, 0x51, 0xd5, 0xd0, 0x37, 0x19, 0xa8, 0xa5, 0x28, 0x75, 0x0d, 0x5d, 0x25, 0x4a, 0x1b, 0x91, 0x40, 0x96, 0xdb, 0x96, 0xd8, 0x3d, 0x2d, 0x9a, 0xaa, 0x2a, 0x16, 0x5b, 0xb1, 0x34, 0x6e, 0x44, 0xc3, 0x57, 0x27, 0x56, 0xc3, 0x8d, 0x52, 0xf8, 0xd3, 0x07, 0xc0, 0x4e, 0x1e, 0xfe, 0xe5, 0x84, 0x78, 0x22, 0x31, 0x7a, 0xb4, 0x69, 0x34, 0x5b, 0x86, 0xc7, 0xb8, 0x5b, 0x54, 0x15, 0x41, 0xc9, 0x92, 0xab, 0xea, 0x98, 0xd1, 0x08, 0xa7, 0xdf, 0xc7, 0x09, 0x1c, 0x30, 0xc6, 0x68, 0x5a, 0xf0, 0xe3, 0x3d, 0x04, 0x66, 0xac, 0xe4, 0xcc, 0xcc, 0xb3, 0x4e, 0x5b, 0x26, 0x6d, 0x3d, 0x6b, 0x94, 0x7b, 0xc7, 0xc0, 0xae, 0x34, 0xd5, 0xe2, 0x64 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.6", - /* Message */ - 49, - { 0x61, 0x7e, 0xa9, 0xe4, 0xa5, 0x6c, 0x4e, 0xc1, 0xd3, 0xd7, 0xfd, 0x7f, 0x32, 0x81, 0xae, 0x7f, 0xa9, 0x32, 0xb2, 0xa0, 0xa6, 0xcf, 0x55, 0xeb, 0x60, 0x48, 0x14, 0x56, 0x81, 0xb3, 0x58, 0x8e, 0xdf, 0x70, 0x12, 0x69, 0xf8, 0x9f, 0xe6, 0x4a, 0xa1, 0x4a, 0xd8, 0xdf, 0x0d, 0x46, 0x79, 0x61, 0x31 } -, - /* Seed */ - 77, - { 0x64, 0xd7, 0xeb, 0xd0, 0x48, 0x50, 0xeb, 0x6f, 0x7a, 0xe1, 0xaf, 0x48, 0x12, 0x0a, 0x80, 0x13, 0x0f, 0x32, 0xed, 0xb5, 0x03, 0x69, 0x64, 0x0b, 0x22, 0x2b, 0x8d, 0x63, 0xef, 0xf6, 0x57, 0x12, 0x70, 0xdc, 0xab, 0x31, 0x76, 0xd0, 0x24, 0x72, 0x28, 0xdc, 0xd1, 0xc3, 0xf3, 0xcf, 0xd5, 0x13, 0x31, 0xb7, 0x56, 0xa8, 0x65, 0x2a, 0x14, 0xdd, 0xaa, 0xb9, 0x93, 0x96, 0xb9, 0x19, 0x9a, 0x73, 0x87, 0x50, 0xd6, 0x9e, 0xfc, 0xd3, 0x77, 0xf1, 0x84, 0xae, 0x19, 0xb5, 0xa9 } -, - /* Encryption */ - 129, - { 0x02, 0xdf, 0xe7, 0x29, 0x58, 0x59, 0x58, 0x81, 0xd8, 0x07, 0x56, 0x6d, 0x3e, 0x36, 0x07, 0xc0, 0x22, 0xe4, 0x61, 0xfe, 0x1d, 0xbe, 0xd3, 0xcc, 0x6d, 0x63, 0xde, 0xdc, 0xb7, 0x19, 0x0f, 0x06, 0xc7, 0xd2, 0x4b, 0x4f, 0x03, 0x26, 0x4c, 0xaf, 0xbb, 0x74, 0x82, 0xec, 0x28, 0xb9, 0xba, 0x48, 0x9d, 0x03, 0x11, 0x5a, 0xf5, 0x8f, 0xde, 0x47, 0x5e, 0xda, 0x58, 0xbf, 0x01, 0x55, 0xcd, 0xf1, 0xaf, 0x16, 0xdf, 0x20, 0x6b, 0xcd, 0x12, 0x57, 0x04, 0xc3, 0xe3, 0x15, 0xad, 0x3d, 0x95, 0x44, 0xb9, 0xe2, 0xc2, 0xfe, 0xa8, 0x10, 0xce, 0x48, 0x45, 0x56, 0xd2, 0x9e, 0x07, 0xad, 0xbf, 0x0f, 0xf4, 0x61, 0xcc, 0xbc, 0xf6, 0x62, 0xbd, 0x74, 0x95, 0x9a, 0x43, 0x7d, 0x4c, 0x80, 0x11, 0xce, 0xad, 0xa5, 0x50, 0x2a, 0xf7, 0x67, 0x6d, 0x9a, 0x15, 0x21, 0xe3, 0x18, 0x9d, 0xaf, 0xde, 0x00, 0xdd } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.7", - /* Message */ - 60, - { 0xc9, 0x1f, 0x2c, 0x98, 0xc7, 0x5b, 0x2f, 0xd4, 0xcd, 0x8d, 0x5c, 0x7f, 0xf2, 0xe7, 0x69, 0xb1, 0x2f, 0x28, 0xf3, 0x13, 0xfb, 0xac, 0xb5, 0x1b, 0x5e, 0x50, 0x14, 0xdf, 0xce, 0x9d, 0x63, 0x5e, 0x7c, 0x6b, 0x2d, 0x88, 0xaf, 0x5e, 0xac, 0x30, 0xd1, 0x62, 0xb8, 0xdd, 0xc2, 0x2e, 0xd8, 0xbc, 0x7b, 0xee, 0x50, 0x6b, 0xfb, 0xf3, 0x1e, 0x51, 0xba, 0x48, 0xf4, 0x26 } -, - /* Seed */ - 66, - { 0x6c, 0x44, 0x59, 0x61, 0xf8, 0x6f, 0xa2, 0x98, 0xd7, 0x64, 0x7c, 0x22, 0x24, 0xd9, 0x5b, 0xc1, 0x27, 0xda, 0xfc, 0xbd, 0x5b, 0x90, 0x21, 0xec, 0x7e, 0x9e, 0xbd, 0xe9, 0x6f, 0x5d, 0x7a, 0x76, 0xf4, 0xee, 0xd0, 0xac, 0x92, 0x2a, 0x6e, 0x93, 0xeb, 0x3b, 0x4c, 0x3c, 0x43, 0xf8, 0xa5, 0x7e, 0x18, 0x29, 0x4e, 0x1a, 0x51, 0x73, 0xb0, 0xf7, 0xe2, 0xdd, 0x2c, 0x4e, 0x57, 0x7a, 0x4b, 0xec, 0xe7, 0x14 } -, - /* Encryption */ - 129, - { 0x03, 0xa8, 0x85, 0xaa, 0xf7, 0xb7, 0xd9, 0x4f, 0xda, 0xe3, 0x4b, 0x41, 0xc3, 0x74, 0x17, 0x66, 0xa4, 0x09, 0xc1, 0xee, 0x02, 0x32, 0xb1, 0xc5, 0x3e, 0x5f, 0x6c, 0x5a, 0xa5, 0x4a, 0xc1, 0xef, 0x0e, 0x5b, 0xf9, 0x9b, 0x9f, 0x7d, 0xf3, 0xe9, 0xb0, 0x0c, 0xed, 0x94, 0x76, 0xee, 0x1a, 0xdb, 0x8f, 0xc5, 0x71, 0x68, 0x91, 0xf5, 0x4d, 0x45, 0xce, 0xda, 0x70, 0xb9, 0xdb, 0x3b, 0x8f, 0xad, 0x25, 0xe7, 0x77, 0x95, 0xaf, 0x14, 0x81, 0xec, 0x49, 0x21, 0x84, 0xc4, 0x9e, 0x9d, 0xf8, 0x23, 0xee, 0x64, 0x66, 0x41, 0x0f, 0x65, 0x01, 0x3c, 0xe3, 0xc5, 0x79, 0x16, 0x63, 0x5d, 0xa8, 0x30, 0x67, 0x7f, 0x93, 0x2b, 0xda, 0xba, 0xb5, 0xc0, 0xa2, 0x08, 0xd7, 0xf4, 0x36, 0x7a, 0x7e, 0xab, 0xa7, 0x5b, 0x04, 0x5d, 0x25, 0xac, 0xfd, 0xb4, 0x15, 0xfe, 0xe0, 0x52, 0x19, 0xa5, 0x84, 0x23, 0x7a } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.8", - /* Message */ - 51, - { 0x7b, 0x1c, 0x31, 0x51, 0xa3, 0x8d, 0x32, 0xec, 0x7b, 0x82, 0xc4, 0x8c, 0x00, 0x0a, 0xa4, 0x81, 0xde, 0x41, 0x8e, 0x80, 0x3b, 0x67, 0x3d, 0x2e, 0x9a, 0x0f, 0xc3, 0xd5, 0xe9, 0x74, 0xad, 0xcd, 0xce, 0xbd, 0x3c, 0x2a, 0x8f, 0x41, 0x14, 0x21, 0x18, 0xa5, 0x5e, 0x87, 0xd0, 0x4b, 0xba, 0xd5, 0xb3, 0x64, 0x25 } -, - /* Seed */ - 75, - { 0xb0, 0xf5, 0xbe, 0x9b, 0x3f, 0x23, 0x7c, 0xc5, 0xaf, 0xca, 0x5a, 0x99, 0xfc, 0xcb, 0x77, 0xb6, 0xef, 0xd8, 0x68, 0x94, 0x7f, 0x98, 0x55, 0x4f, 0xbe, 0xce, 0xac, 0xfa, 0x88, 0x4c, 0x15, 0x15, 0x39, 0xd7, 0xcf, 0x42, 0x3e, 0x72, 0x60, 0x31, 0xbf, 0xeb, 0x8d, 0xd2, 0xd4, 0xf3, 0x01, 0xda, 0x6b, 0xdf, 0xca, 0xd6, 0xe5, 0x81, 0x65, 0x82, 0xad, 0xdc, 0xe1, 0x0d, 0x85, 0xd5, 0xee, 0x1d, 0x04, 0x46, 0xf3, 0x73, 0xb9, 0x5e, 0xe1, 0x60, 0xbc, 0xf0, 0x35 } -, - /* Encryption */ - 129, - { 0x06, 0x6c, 0x30, 0x09, 0xdc, 0x6c, 0xba, 0xc7, 0xb8, 0xbd, 0x51, 0x41, 0xc5, 0x5c, 0xf8, 0x6a, 0x3d, 0x79, 0x69, 0xd5, 0x85, 0x45, 0x2e, 0x3a, 0x66, 0x54, 0x0f, 0x94, 0x02, 0xdb, 0xa2, 0x15, 0xe3, 0xfb, 0x3a, 0x27, 0x7f, 0x0d, 0x33, 0x96, 0xc8, 0xc0, 0x08, 0xaf, 0x19, 0x91, 0x3e, 0x3d, 0x91, 0xe4, 0x0f, 0x86, 0x76, 0x06, 0xb5, 0xbf, 0x54, 0x30, 0x4c, 0x04, 0x71, 0xda, 0xdd, 0x64, 0x04, 0xb6, 0x7a, 0x48, 0x57, 0xbf, 0x52, 0x24, 0x6c, 0x0d, 0x60, 0x18, 0x23, 0xdd, 0x03, 0x80, 0xc6, 0x60, 0x9d, 0xac, 0xb9, 0x2d, 0xb6, 0x02, 0xe5, 0x57, 0x64, 0xae, 0x46, 0x50, 0xdf, 0x1a, 0xdb, 0xb4, 0xb9, 0x5f, 0xa5, 0xaf, 0x4b, 0xcd, 0x11, 0x21, 0xf1, 0x3c, 0x0a, 0x73, 0x23, 0xad, 0xa8, 0xc6, 0x0d, 0xe3, 0xd0, 0x81, 0x72, 0x9d, 0x19, 0x7f, 0x9c, 0xf8, 0xe2, 0x7c, 0xde, 0x80, 0xb1 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.9", - /* Message */ - 58, - { 0xb2, 0x93, 0xc6, 0xf6, 0xd0, 0x5d, 0x1f, 0x38, 0xb5, 0x61, 0xea, 0x3d, 0x0d, 0x0a, 0xd6, 0xa2, 0xaf, 0x83, 0x09, 0xbb, 0x9a, 0xde, 0xfa, 0x77, 0x8f, 0xd6, 0xbb, 0x9f, 0xff, 0x3e, 0x01, 0x0c, 0x40, 0x4c, 0x53, 0x39, 0x97, 0xcc, 0xfe, 0xd7, 0xe1, 0x91, 0x7a, 0x66, 0x92, 0x61, 0xcf, 0xcc, 0xa4, 0xe3, 0x70, 0x29, 0x99, 0x1d, 0x2d, 0xe9, 0xb2, 0x99 } -, - /* Seed */ - 68, - { 0x87, 0xbd, 0x2f, 0x6b, 0xb4, 0x82, 0x45, 0x59, 0x1d, 0x65, 0xf0, 0x23, 0xa6, 0x5b, 0x63, 0xbb, 0xba, 0x84, 0x19, 0x79, 0x2c, 0x01, 0x41, 0x09, 0x2b, 0x1d, 0xb1, 0xbe, 0x53, 0xe8, 0xc9, 0xb4, 0xdf, 0x95, 0xf0, 0xad, 0x55, 0xb9, 0x6e, 0x5e, 0x57, 0x61, 0x5d, 0x21, 0x4b, 0x49, 0x77, 0x87, 0x0a, 0x27, 0x2f, 0x72, 0x31, 0x66, 0xc6, 0x20, 0x45, 0x76, 0x5e, 0x6b, 0x4a, 0x73, 0xa7, 0xc9, 0xeb, 0xe1, 0x1d, 0x24 } -, - /* Encryption */ - 129, - { 0x03, 0x10, 0x4e, 0xc6, 0xc4, 0xab, 0x9d, 0xac, 0xae, 0x42, 0x7f, 0xb1, 0x06, 0x99, 0xbc, 0xae, 0x00, 0x3d, 0xa5, 0x6f, 0x6d, 0x07, 0x50, 0x95, 0x87, 0x14, 0x5b, 0x73, 0x3e, 0xdb, 0x53, 0x23, 0x9a, 0x6f, 0x42, 0x22, 0x86, 0x83, 0x9c, 0xac, 0x06, 0x4a, 0xdf, 0xee, 0xe5, 0xdc, 0x89, 0x78, 0x0c, 0xdd, 0xad, 0xcc, 0x80, 0x72, 0x19, 0xd6, 0xa9, 0x7b, 0x85, 0xc1, 0x3f, 0x27, 0x93, 0x7d, 0x70, 0x32, 0x7f, 0x82, 0xcc, 0x36, 0xa5, 0xda, 0x8e, 0x45, 0x63, 0x77, 0xfc, 0xa2, 0x3a, 0xee, 0x51, 0x4e, 0x04, 0x4a, 0xbf, 0x1f, 0x66, 0xc3, 0xe7, 0xbd, 0xeb, 0xc2, 0xcf, 0xf6, 0x28, 0xbd, 0x52, 0x4a, 0x09, 0x66, 0xe2, 0x63, 0x8d, 0x28, 0x33, 0xbf, 0xa3, 0x43, 0xeb, 0xc7, 0x41, 0xf7, 0x6b, 0x5b, 0x70, 0xa1, 0x13, 0x6f, 0x4a, 0xbc, 0x60, 0x28, 0x64, 0xa2, 0xad, 0x43, 0xa7, 0x91, 0xbd } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.10", - /* Message */ - 5, - { 0x08, 0x38, 0xf4, 0xa5, 0x92 } -, - /* Seed */ - 121, - { 0x89, 0xc5, 0x89, 0x8c, 0x6c, 0x3d, 0xc6, 0xcb, 0xdb, 0x1a, 0xcb, 0x28, 0x05, 0xdf, 0x53, 0x98, 0xf0, 0xb3, 0x35, 0x8a, 0x18, 0xe5, 0xe6, 0x3c, 0x14, 0xd2, 0x0c, 0x98, 0xd2, 0x1d, 0x9f, 0xd8, 0xb2, 0xec, 0xc9, 0xa0, 0xe8, 0x3d, 0xaf, 0x0c, 0x06, 0x92, 0x68, 0xbb, 0xe8, 0x6f, 0xee, 0xa5, 0x1c, 0x93, 0x79, 0x1b, 0x68, 0xe5, 0xd9, 0x3b, 0x74, 0x5f, 0xea, 0xf6, 0xad, 0xc4, 0x2b, 0x83, 0xc3, 0x09, 0xc9, 0xcd, 0x3d, 0xfe, 0x1c, 0x06, 0x15, 0x3a, 0xb8, 0x80, 0x85, 0x56, 0x18, 0x98, 0x90, 0xbe, 0x05, 0x3a, 0x92, 0x54, 0x88, 0xd0, 0x29, 0xfe, 0x50, 0x40, 0xe3, 0xe7, 0xd5, 0xd5, 0x31, 0xb3, 0x2e, 0xb9, 0xd2, 0xf4, 0xee, 0xa2, 0x21, 0x11, 0xb3, 0x8a, 0x65, 0x53, 0xf0, 0x0e, 0xdd, 0x23, 0x65, 0x57, 0x5b, 0xb9, 0x49, 0xf3, 0x63 } -, - /* Encryption */ - 129, - { 0x01, 0x4f, 0x27, 0x97, 0xdd, 0xe8, 0xd4, 0x60, 0x18, 0xff, 0x23, 0xd8, 0x9b, 0xe2, 0xe3, 0xae, 0x04, 0x6e, 0xed, 0x31, 0x97, 0xc8, 0x79, 0xc6, 0x0e, 0x26, 0xf3, 0xd2, 0x40, 0x08, 0x66, 0xeb, 0x50, 0xd7, 0xb4, 0x5f, 0x6b, 0x01, 0xae, 0x9c, 0xa0, 0x06, 0x84, 0x7e, 0xfb, 0xe9, 0xab, 0xcc, 0x9b, 0xc3, 0xe3, 0x56, 0x90, 0x07, 0x2b, 0x68, 0xdb, 0x9e, 0xcd, 0x92, 0x6d, 0x94, 0x5f, 0x78, 0x7b, 0x27, 0xc3, 0x75, 0x3b, 0xf9, 0x6b, 0x2d, 0x49, 0x98, 0x30, 0x84, 0x14, 0x2c, 0x42, 0xa1, 0x26, 0x1a, 0xff, 0x7b, 0x17, 0xff, 0x4b, 0x20, 0xde, 0x9b, 0xff, 0xa5, 0x86, 0x24, 0xab, 0x37, 0x1d, 0x4c, 0xe2, 0xf9, 0x64, 0x69, 0xa8, 0xe1, 0x03, 0x8d, 0x57, 0x20, 0xb8, 0x1c, 0xf0, 0x42, 0xdc, 0x78, 0xbf, 0xda, 0x9a, 0x3c, 0xcb, 0x61, 0x60, 0x81, 0x2d, 0xde, 0xa1, 0x58, 0xbd, 0x2f, 0x5c } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.11", - /* Message */ - 60, - { 0x12, 0x38, 0x0c, 0x5e, 0x80, 0xbb, 0x95, 0xbb, 0xc8, 0x85, 0x73, 0x57, 0xfe, 0xfd, 0x17, 0xbf, 0x9e, 0x50, 0x96, 0x27, 0xd2, 0x8c, 0xdf, 0xcd, 0x12, 0xbb, 0x13, 0x16, 0x61, 0xb3, 0x42, 0xdf, 0xa6, 0xca, 0x67, 0x2e, 0x13, 0xa8, 0x85, 0x1f, 0xce, 0x19, 0xb1, 0xa8, 0xca, 0xf0, 0xe3, 0x3c, 0xd6, 0xef, 0x53, 0x8a, 0x05, 0xfa, 0x54, 0x26, 0x9a, 0x13, 0x78, 0xe7 } -, - /* Seed */ - 66, - { 0x88, 0x03, 0x31, 0xeb, 0xe9, 0x1a, 0xb6, 0xce, 0x16, 0x84, 0xd9, 0xaf, 0x5d, 0x97, 0x7e, 0xb4, 0x26, 0xca, 0x71, 0x56, 0xe0, 0xb6, 0xf4, 0x33, 0x6c, 0x6e, 0x09, 0x33, 0xd6, 0xfa, 0x48, 0x78, 0x2c, 0x0a, 0xc9, 0x69, 0xf3, 0xdd, 0xe6, 0x1d, 0x8f, 0xd7, 0x4c, 0x47, 0xfe, 0x9e, 0x30, 0x61, 0x71, 0x0d, 0x24, 0x5b, 0x1d, 0x38, 0x11, 0x04, 0x28, 0x60, 0xc1, 0xf4, 0x8d, 0x2b, 0x8f, 0xfd, 0x80, 0x9e } -, - /* Encryption */ - 129, - { 0x04, 0x6c, 0x54, 0x5f, 0xf4, 0x96, 0xc2, 0x1f, 0x69, 0x01, 0x27, 0x24, 0x54, 0x18, 0xcc, 0x5f, 0xb1, 0x8f, 0x09, 0x10, 0x2e, 0x7a, 0xca, 0x87, 0xe2, 0x6e, 0x20, 0x82, 0xfc, 0x16, 0xf6, 0x2f, 0xe9, 0xf4, 0x2a, 0x72, 0x22, 0x71, 0xa7, 0x9e, 0xae, 0xe9, 0x62, 0x5a, 0x7e, 0x63, 0x2c, 0x19, 0x36, 0x40, 0x4c, 0xec, 0x62, 0x11, 0xd8, 0x23, 0x86, 0x3b, 0xa0, 0x2c, 0x6b, 0x0a, 0x83, 0x19, 0x58, 0xb4, 0xed, 0x8f, 0xc6, 0x25, 0xa2, 0xe5, 0x2a, 0x05, 0x4f, 0x8f, 0x18, 0x1f, 0x13, 0x0f, 0x8b, 0xc4, 0xb1, 0xdf, 0xbd, 0x44, 0xb7, 0x0a, 0x35, 0xb3, 0x5e, 0x9c, 0x7f, 0x4a, 0xc5, 0x5e, 0xe5, 0xe2, 0xcb, 0x06, 0x8b, 0x75, 0x86, 0x39, 0xb2, 0xcd, 0x64, 0x3d, 0xbf, 0xa8, 0x2e, 0x2d, 0x97, 0x20, 0xe4, 0x89, 0xf5, 0xc8, 0x21, 0xd8, 0xeb, 0xdc, 0x13, 0x68, 0xa9, 0xd3, 0x46, 0x8a, 0x37 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.12", - /* Message */ - 40, - { 0xee, 0xe1, 0xe4, 0x5d, 0x18, 0xb1, 0x47, 0xc2, 0x69, 0xa6, 0x0a, 0x9c, 0x64, 0x20, 0x18, 0xed, 0x6c, 0xd1, 0x15, 0x7c, 0xd0, 0xce, 0x2b, 0x29, 0x68, 0xdf, 0xa4, 0xb4, 0x97, 0xfc, 0x40, 0xb2, 0x24, 0xbd, 0x86, 0x1e, 0x25, 0x35, 0x12, 0x2b } -, - /* Seed */ - 86, - { 0x5c, 0x51, 0x3e, 0x51, 0x44, 0x52, 0xb1, 0x4a, 0xee, 0x33, 0xb6, 0x17, 0x60, 0xb8, 0x58, 0xc5, 0x35, 0x7c, 0x7d, 0x7f, 0x20, 0xe4, 0xa3, 0x7c, 0x7e, 0xef, 0xe4, 0x19, 0xca, 0xe3, 0xfd, 0x16, 0xf9, 0xd8, 0x3e, 0x5e, 0xcd, 0xe1, 0x9e, 0xe6, 0x32, 0x85, 0xdd, 0xce, 0x66, 0x80, 0xee, 0x94, 0x64, 0xfe, 0x83, 0x75, 0x6e, 0x90, 0x31, 0xd6, 0x37, 0x9e, 0x6a, 0x6b, 0x38, 0x4c, 0xe2, 0x77, 0xbc, 0x64, 0x2c, 0xed, 0x83, 0xb2, 0x9c, 0xf7, 0x4b, 0x72, 0xce, 0xff, 0xf5, 0x30, 0x71, 0x04, 0xe1, 0x83, 0xde, 0x2c, 0xe6, 0xa1 } -, - /* Encryption */ - 129, - { 0x03, 0xa8, 0x64, 0x83, 0xcb, 0xb7, 0x2c, 0x15, 0xf5, 0xa6, 0x93, 0x2b, 0x01, 0x2f, 0x40, 0xc4, 0xb1, 0x73, 0x33, 0x3b, 0x26, 0x86, 0xf4, 0x98, 0x4b, 0xa6, 0x6e, 0x24, 0xc7, 0xcf, 0x44, 0x41, 0x23, 0xba, 0x2e, 0xa6, 0x66, 0xa1, 0x75, 0x5d, 0x09, 0x35, 0x7b, 0xee, 0xa4, 0x37, 0x9c, 0xe3, 0xcd, 0xb0, 0xa7, 0x7a, 0x6e, 0xe3, 0xb7, 0xca, 0x60, 0xdb, 0x68, 0x24, 0x17, 0xf7, 0x16, 0x3d, 0x7d, 0x3a, 0xc7, 0x35, 0x28, 0x11, 0xbb, 0x94, 0xc5, 0xb7, 0x71, 0xf3, 0xd3, 0xfd, 0xa7, 0x73, 0xe5, 0xce, 0xbc, 0x8b, 0xc6, 0x60, 0x11, 0x55, 0xb3, 0xf4, 0xe4, 0xb4, 0xca, 0x85, 0xd9, 0xba, 0xb8, 0xec, 0x25, 0x8c, 0xec, 0xff, 0x44, 0x33, 0xc9, 0x2e, 0x8f, 0x86, 0x3d, 0x96, 0xfc, 0xc7, 0x94, 0x29, 0x49, 0x8a, 0x9e, 0x17, 0x90, 0x33, 0x0b, 0xc4, 0x87, 0xc0, 0x10, 0xd7, 0x99, 0x24, 0x5d } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.13", - /* Message */ - 28, - { 0x55, 0x09, 0xa5, 0xc1, 0xac, 0x54, 0x89, 0xdc, 0xb7, 0x65, 0xf3, 0x7c, 0xeb, 0xbe, 0x7d, 0x81, 0xcf, 0x02, 0x76, 0xb1, 0xf2, 0xcf, 0xf9, 0x5d, 0x27, 0x4b, 0xbd, 0x04 } -, - /* Seed */ - 98, - { 0x76, 0xe8, 0x1a, 0x51, 0x37, 0x1f, 0xb5, 0x07, 0x41, 0x14, 0x1d, 0xcb, 0x31, 0xd5, 0x1d, 0x1c, 0x46, 0x1f, 0xcc, 0x02, 0x6a, 0xea, 0x85, 0x20, 0x15, 0xd4, 0x68, 0x74, 0x0b, 0x45, 0x23, 0x40, 0x5f, 0x95, 0xba, 0x87, 0x9b, 0x08, 0x69, 0xbf, 0x03, 0x1a, 0x60, 0x65, 0x4f, 0xc4, 0xe5, 0x68, 0xc1, 0x95, 0x7c, 0xe4, 0xe4, 0x2a, 0x35, 0x0a, 0x95, 0xbf, 0x8c, 0xb2, 0xa8, 0xb5, 0xfd, 0xe6, 0xdc, 0xfd, 0x25, 0x05, 0xc0, 0x37, 0xa2, 0x9e, 0xde, 0x68, 0x9c, 0x53, 0xd8, 0x32, 0x19, 0xe7, 0x3e, 0x64, 0x08, 0x17, 0xbf, 0x8a, 0xfc, 0x9a, 0xb0, 0x04, 0xec, 0xae, 0xc8, 0x43, 0xe4, 0xfe, 0x4e, 0x38 } -, - /* Encryption */ - 129, - { 0x02, 0x55, 0xde, 0x28, 0x0b, 0x71, 0xaf, 0xef, 0xaf, 0xa2, 0x0f, 0x24, 0x1e, 0x08, 0x1b, 0x7e, 0xc6, 0xc1, 0x62, 0xdd, 0xda, 0x18, 0x84, 0xfa, 0x9f, 0x82, 0x5c, 0x4c, 0xe7, 0x63, 0x6e, 0xfb, 0xc1, 0x1b, 0x84, 0xa6, 0xeb, 0xea, 0x35, 0x89, 0x25, 0x71, 0xac, 0x9e, 0x6b, 0x1a, 0xd8, 0x47, 0x3f, 0xa5, 0x73, 0xc8, 0x83, 0xc9, 0xf2, 0x15, 0xa1, 0x95, 0x80, 0xc3, 0xea, 0x30, 0x2f, 0x88, 0xf4, 0x4f, 0x48, 0xe4, 0xd9, 0x5c, 0x34, 0x40, 0xd4, 0x93, 0x1f, 0x17, 0x66, 0xa1, 0xfe, 0x7e, 0x79, 0x0e, 0x5d, 0x38, 0xe8, 0x5d, 0x1f, 0x63, 0x85, 0x0a, 0x3c, 0x70, 0x7a, 0xd8, 0x97, 0x7b, 0x88, 0xc3, 0x8c, 0xb9, 0xed, 0x98, 0x34, 0x5c, 0xd3, 0x50, 0xc3, 0xdd, 0x45, 0x30, 0x9f, 0xc8, 0x1c, 0xb4, 0x62, 0x76, 0xe4, 0xad, 0x64, 0x7f, 0xa8, 0x4c, 0x14, 0x12, 0x5e, 0xfd, 0x67, 0xd8, 0xba } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.14", - /* Message */ - 58, - { 0x02, 0x53, 0x81, 0xa5, 0x5c, 0x8e, 0x48, 0x7d, 0x7f, 0x4f, 0xf7, 0xc3, 0x6c, 0xfb, 0x37, 0x50, 0x07, 0xd1, 0x9f, 0x93, 0x71, 0x13, 0x6e, 0x2b, 0x3d, 0xf4, 0x42, 0x5e, 0xee, 0xee, 0x5d, 0x79, 0xc3, 0x52, 0x61, 0xfb, 0xb4, 0xea, 0x68, 0xbd, 0x91, 0xe8, 0xed, 0xab, 0xa2, 0x32, 0x9e, 0x29, 0x31, 0x53, 0x06, 0xc7, 0xd7, 0x18, 0x33, 0x15, 0x5b, 0x88 } -, - /* Seed */ - 68, - { 0xaa, 0x31, 0x0f, 0x62, 0xda, 0x90, 0xda, 0x4a, 0x20, 0x28, 0xb3, 0x81, 0x39, 0x9c, 0xb7, 0xe0, 0xed, 0x3b, 0xb5, 0x10, 0x57, 0x5c, 0x9b, 0xd0, 0xf6, 0x38, 0x21, 0x5b, 0xaf, 0x78, 0x08, 0xe3, 0x24, 0x5e, 0xaf, 0x38, 0xb7, 0x6e, 0x26, 0x52, 0x29, 0x0b, 0x7c, 0xc6, 0x20, 0x90, 0x7c, 0xda, 0x0c, 0xb7, 0xaf, 0x07, 0x3c, 0x12, 0x2f, 0xf8, 0x3d, 0xaa, 0xe1, 0x98, 0x6b, 0x43, 0xec, 0x1a, 0x14, 0x82, 0xdb, 0xa6 } -, - /* Encryption */ - 129, - { 0x04, 0x9b, 0xfa, 0xc6, 0x41, 0x0b, 0x77, 0x80, 0x39, 0x7a, 0x49, 0xfb, 0x88, 0x93, 0xb2, 0x4d, 0x90, 0x3b, 0x36, 0x00, 0xf3, 0x3c, 0x78, 0x2c, 0x14, 0x75, 0xb5, 0xd2, 0x4b, 0x4f, 0x4e, 0x88, 0xfd, 0x11, 0x24, 0xef, 0x06, 0x45, 0xf3, 0xd3, 0x91, 0xed, 0x31, 0x00, 0x6d, 0xd1, 0xb7, 0xc2, 0x64, 0x12, 0x8d, 0x0d, 0xb9, 0xaa, 0x0d, 0x65, 0xa0, 0x9f, 0xfb, 0xe2, 0x9a, 0x94, 0xcc, 0xa3, 0x58, 0xda, 0x64, 0xbd, 0x1b, 0x72, 0xff, 0x55, 0x88, 0x88, 0x08, 0x10, 0x5b, 0xe0, 0x91, 0xae, 0x23, 0xea, 0x3f, 0x34, 0x75, 0x05, 0x17, 0x9e, 0xcc, 0xb2, 0x41, 0x0d, 0x89, 0xde, 0xcb, 0x62, 0x33, 0x0f, 0x36, 0xc7, 0x44, 0x26, 0x2e, 0xb2, 0xb0, 0x78, 0xb4, 0x25, 0x4b, 0xcd, 0xce, 0xce, 0x21, 0x1c, 0xf0, 0x57, 0x4a, 0x24, 0x68, 0xe2, 0xa1, 0xe0, 0x18, 0xbc, 0x31, 0xf5, 0x02, 0x22, 0x35 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.15", - /* Message */ - 38, - { 0x07, 0x3c, 0x43, 0x67, 0xba, 0xfd, 0x48, 0x10, 0xd7, 0x70, 0x44, 0x60, 0xc7, 0x83, 0xd3, 0x50, 0xf7, 0xcc, 0xd0, 0x99, 0x47, 0x2f, 0x79, 0xf7, 0xfd, 0xf2, 0x3e, 0xf0, 0xcf, 0xaa, 0xcc, 0xab, 0x95, 0x71, 0xdf, 0x53, 0xfd, 0xe4 } -, - /* Seed */ - 88, - { 0xf9, 0x5a, 0x39, 0x96, 0xde, 0xf1, 0xca, 0xfc, 0x1a, 0x4a, 0x0b, 0x34, 0x14, 0x6b, 0x73, 0xde, 0x6b, 0x5a, 0x92, 0xcb, 0x81, 0x2e, 0x20, 0xb2, 0x0c, 0x12, 0x2a, 0x25, 0x1e, 0x6b, 0x22, 0xe0, 0x46, 0x9c, 0x98, 0xdb, 0x12, 0x8d, 0x43, 0xce, 0xfc, 0xdd, 0x80, 0xc7, 0xff, 0x36, 0x99, 0x80, 0x16, 0xa8, 0x92, 0xa8, 0xb6, 0x34, 0xb3, 0x6b, 0x9b, 0x0c, 0xe8, 0x7e, 0xa8, 0x0b, 0x5d, 0xd9, 0xfd, 0x7a, 0x08, 0x29, 0x14, 0xe7, 0x3b, 0x83, 0xa3, 0x84, 0x1d, 0xe5, 0x1b, 0x71, 0xb1, 0xa6, 0xb7, 0xef, 0x7d, 0xe4, 0xe4, 0xb8, 0x8e, 0xdc } -, - /* Encryption */ - 129, - { 0x02, 0xde, 0xe4, 0x8b, 0x0f, 0x99, 0x53, 0xee, 0x12, 0xc7, 0x18, 0xb3, 0x03, 0xb0, 0xc8, 0x9d, 0x61, 0x50, 0xeb, 0xbe, 0x83, 0xad, 0x62, 0x4e, 0x11, 0x7e, 0x3f, 0x27, 0x04, 0xa0, 0xb1, 0x7a, 0x2e, 0xbe, 0xe8, 0x38, 0x52, 0x56, 0xf0, 0xe6, 0x42, 0x80, 0xfb, 0x06, 0xc3, 0xb1, 0x46, 0xc0, 0x99, 0xaf, 0x23, 0xa9, 0xf2, 0x47, 0x93, 0x39, 0x37, 0x81, 0xa5, 0x55, 0xac, 0x4e, 0xa2, 0xd8, 0x8d, 0x78, 0x5d, 0x8c, 0xdb, 0x6e, 0x7a, 0x2f, 0x89, 0x52, 0xd2, 0x50, 0x3c, 0xcf, 0x90, 0x1f, 0x12, 0x39, 0xf6, 0xf7, 0xb1, 0xac, 0xd4, 0x41, 0x21, 0xc3, 0x65, 0xfd, 0xae, 0x37, 0x07, 0x46, 0xde, 0x45, 0x26, 0xe7, 0xc6, 0x56, 0x0f, 0x87, 0x54, 0x6e, 0xd5, 0x77, 0xcf, 0x97, 0x98, 0xbe, 0xf4, 0x7e, 0x49, 0x20, 0x65, 0x50, 0x9c, 0x49, 0x21, 0x2d, 0x37, 0x0d, 0xea, 0x05, 0x22, 0xd7, 0x94 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.16", - /* Message */ - 42, - { 0xba, 0xb2, 0x0b, 0x9a, 0x6a, 0x53, 0x2e, 0x6f, 0x8a, 0xf0, 0x78, 0xb3, 0xa1, 0x85, 0xe0, 0xaa, 0x86, 0xe6, 0x16, 0x81, 0xbd, 0x1b, 0xd7, 0x75, 0x04, 0x4a, 0x2c, 0x95, 0x8d, 0x61, 0xed, 0xc2, 0x51, 0x60, 0x7c, 0xd9, 0xf3, 0x11, 0x48, 0xf5, 0xa9, 0x11 } -, - /* Seed */ - 84, - { 0x37, 0x6c, 0xf0, 0x18, 0x14, 0x3b, 0x0c, 0xe6, 0x70, 0x21, 0x68, 0x4c, 0xbb, 0x36, 0xe4, 0xaf, 0xe2, 0xff, 0x9d, 0xe1, 0x8b, 0xc7, 0xf0, 0x2b, 0xed, 0x86, 0x3b, 0xf1, 0xbc, 0x34, 0x66, 0x31, 0x9e, 0x72, 0x0f, 0xee, 0xf1, 0x9d, 0x38, 0xe2, 0x6b, 0xca, 0x7e, 0x99, 0xd4, 0x09, 0x6a, 0x9e, 0xed, 0x8d, 0xe5, 0xbf, 0x20, 0x3f, 0xc7, 0xdd, 0x9c, 0x84, 0x85, 0xdf, 0xa5, 0xb6, 0x90, 0x75, 0xef, 0x0c, 0xc0, 0x37, 0xfc, 0xdf, 0xb5, 0x5a, 0x0c, 0x92, 0x8c, 0xda, 0xc0, 0xcb, 0xa0, 0x49, 0x7e, 0xb6, 0x0e, 0x3f } -, - /* Encryption */ - 129, - { 0x04, 0x8d, 0xd7, 0x50, 0x99, 0x18, 0x43, 0x0e, 0xda, 0xbc, 0x01, 0x46, 0x8d, 0xb7, 0xe2, 0x87, 0xa7, 0x38, 0x1e, 0x42, 0x8b, 0x5f, 0xc9, 0x3c, 0xe8, 0xde, 0xfd, 0x7f, 0x49, 0xd5, 0xe9, 0x34, 0x15, 0x30, 0x43, 0xd1, 0x37, 0xac, 0xa9, 0xf7, 0xb9, 0x75, 0x77, 0xb7, 0x0d, 0xc0, 0x16, 0x80, 0xf2, 0xdb, 0xa9, 0x1e, 0x93, 0x2b, 0x53, 0xac, 0xf2, 0xa7, 0xf3, 0x34, 0x8f, 0x56, 0x54, 0xb2, 0xcf, 0xcf, 0xe7, 0x5d, 0x48, 0xf0, 0xfa, 0x45, 0x00, 0xd1, 0xba, 0x5d, 0x29, 0x24, 0x7f, 0xf1, 0x42, 0xd6, 0xb9, 0x80, 0xe1, 0x1b, 0x9d, 0xba, 0x68, 0x83, 0xf7, 0x3b, 0xb8, 0x55, 0xa2, 0x4c, 0xc4, 0xeb, 0x90, 0x68, 0x23, 0x6d, 0xaa, 0x0f, 0x2f, 0x93, 0x45, 0x8d, 0x72, 0x72, 0x6c, 0x2d, 0x8e, 0x31, 0x25, 0x9a, 0xcd, 0x3a, 0x7f, 0xde, 0xb6, 0xfe, 0xb5, 0xc6, 0xd2, 0xed, 0x17, 0x8d, 0xdb } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.17", - /* Message */ - 63, - { 0x19, 0xb1, 0xf4, 0xcd, 0x3d, 0xbd, 0xf0, 0x5b, 0x3d, 0x5f, 0x16, 0x80, 0x85, 0x6c, 0x5a, 0x74, 0x4f, 0x51, 0x62, 0xb5, 0x20, 0xbf, 0xcd, 0xfc, 0x98, 0x87, 0xdd, 0x92, 0xbe, 0x9d, 0x8c, 0xb6, 0x25, 0xc7, 0x25, 0xad, 0x75, 0xf4, 0xf2, 0xca, 0xa5, 0xef, 0x51, 0xfa, 0xca, 0x71, 0xb5, 0xe6, 0x6f, 0x84, 0xf2, 0xfc, 0x6f, 0x67, 0x8a, 0xce, 0x80, 0x9d, 0x76, 0xb8, 0x42, 0xea, 0xfe } -, - /* Seed */ - 63, - { 0x78, 0xa7, 0x18, 0x82, 0x85, 0x3d, 0x85, 0xaf, 0x16, 0x5c, 0xc0, 0xb2, 0x2f, 0xfd, 0xc8, 0x87, 0x3d, 0xf4, 0x9e, 0x2d, 0x6c, 0xc0, 0xad, 0x0b, 0x0a, 0x99, 0x5b, 0x4a, 0x25, 0x9c, 0x86, 0x7d, 0xc1, 0xaa, 0xb6, 0x42, 0x8a, 0x5b, 0x8e, 0x9f, 0x3b, 0xe8, 0x7d, 0x87, 0xf9, 0xe6, 0xea, 0xc5, 0x50, 0xf4, 0xdf, 0x11, 0x36, 0x8e, 0x7f, 0x6c, 0xfd, 0x7d, 0x0e, 0x47, 0x6a, 0x45, 0x9b } -, - /* Encryption */ - 129, - { 0x06, 0x2a, 0x78, 0xdb, 0x5c, 0xa6, 0x9a, 0x30, 0x48, 0x10, 0x78, 0x94, 0x93, 0xdb, 0x8c, 0xd6, 0x44, 0xfb, 0x29, 0x4e, 0x17, 0xfd, 0x36, 0x45, 0x32, 0xb8, 0xec, 0x17, 0xce, 0x3f, 0xda, 0x70, 0x47, 0x64, 0x65, 0x62, 0x4a, 0x60, 0xa6, 0xec, 0xdb, 0xd5, 0xd9, 0x72, 0x40, 0xc8, 0xd8, 0x9d, 0xea, 0xc1, 0x1d, 0xc3, 0x0d, 0x7b, 0x85, 0x14, 0x41, 0x40, 0x8e, 0xdd, 0x64, 0x28, 0x81, 0xa0, 0x11, 0x2b, 0x62, 0xf8, 0xcf, 0xde, 0x34, 0xd9, 0xc1, 0x13, 0x85, 0xc2, 0x91, 0x89, 0xbf, 0x38, 0x93, 0xa6, 0xab, 0xac, 0xe0, 0x4a, 0x10, 0xaa, 0x68, 0x0c, 0xd3, 0xa6, 0xee, 0x00, 0x2c, 0x30, 0x70, 0x35, 0xd2, 0x39, 0x9a, 0x2a, 0x60, 0xb5, 0xa7, 0xf1, 0xca, 0xaf, 0x05, 0x84, 0xd1, 0x0f, 0xd0, 0x6d, 0x6e, 0xfd, 0x56, 0x11, 0x4c, 0x05, 0xe4, 0x3d, 0x42, 0xd8, 0x34, 0xf0, 0x3e, 0x3f, 0xe9 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.18", - /* Message */ - 32, - { 0x8c, 0xb7, 0x3b, 0xc4, 0x78, 0x50, 0xc1, 0x7f, 0xeb, 0xd3, 0x4f, 0xf4, 0xb7, 0x32, 0x3b, 0x50, 0x53, 0x03, 0x0b, 0x96, 0x22, 0x14, 0x03, 0xcd, 0xef, 0x45, 0xde, 0xc6, 0x5b, 0xa6, 0x0e, 0xa3 } -, - /* Seed */ - 94, - { 0xed, 0x64, 0x78, 0x61, 0x48, 0x81, 0xeb, 0xe3, 0xfd, 0xd6, 0xd9, 0xee, 0x05, 0xf2, 0x76, 0x5f, 0xc8, 0xa3, 0xea, 0xa5, 0x80, 0x31, 0x23, 0x5a, 0xf9, 0x6f, 0x86, 0xe7, 0xf2, 0xc8, 0x13, 0xec, 0x04, 0x80, 0x66, 0x1d, 0x1c, 0x2b, 0x4d, 0xef, 0x74, 0x2b, 0x2e, 0x41, 0x41, 0x9d, 0xf2, 0x88, 0x3e, 0xd5, 0x86, 0x79, 0xcb, 0x9a, 0xda, 0xe4, 0xde, 0xc4, 0xcf, 0x77, 0xf8, 0xbc, 0x29, 0x41, 0xd0, 0x33, 0xf8, 0x87, 0x7a, 0x90, 0x6d, 0xdc, 0x88, 0xd6, 0xdd, 0x3c, 0x53, 0x96, 0xad, 0xaa, 0xc0, 0x3e, 0xb2, 0xa7, 0x09, 0x4c, 0x0f, 0xdf, 0x0a, 0x44, 0xa6, 0xb9, 0x23, 0xab } -, - /* Encryption */ - 129, - { 0x03, 0x97, 0x8d, 0x4e, 0xff, 0xc6, 0xd6, 0x2f, 0x23, 0x2b, 0xf4, 0x6b, 0x42, 0x90, 0xc5, 0x01, 0x1d, 0x73, 0x28, 0x0a, 0xb0, 0xe8, 0x0a, 0xb9, 0xd6, 0x05, 0x0a, 0x85, 0x2a, 0x66, 0x79, 0xe0, 0x17, 0xe1, 0x70, 0xd9, 0xe7, 0x15, 0x6c, 0x8d, 0xcb, 0xd4, 0x6c, 0xde, 0xda, 0x70, 0xff, 0x9a, 0x55, 0x16, 0x8b, 0x9f, 0xdc, 0x03, 0x65, 0xb8, 0xaa, 0xbb, 0x90, 0x9a, 0xad, 0x40, 0xd5, 0x95, 0xc9, 0x0b, 0x9f, 0x00, 0xc1, 0xe0, 0x0a, 0xd6, 0xf0, 0x1d, 0x54, 0x43, 0x07, 0xb2, 0x54, 0xea, 0xf4, 0x25, 0x5d, 0xe6, 0x2b, 0xfd, 0x8a, 0x5f, 0x7e, 0x79, 0xdc, 0xfc, 0x74, 0x45, 0xce, 0xc6, 0x3d, 0xf0, 0xc2, 0xbd, 0x0a, 0xd9, 0x6c, 0xb7, 0x02, 0x42, 0xb3, 0x0b, 0x32, 0x42, 0x07, 0x88, 0x16, 0xb5, 0x8b, 0x0a, 0x9f, 0xfa, 0x16, 0xf1, 0xd8, 0x63, 0x15, 0xf8, 0xa1, 0xcb, 0x2f, 0x8f, 0x6b } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.19", - /* Message */ - 56, - { 0x8e, 0xa5, 0x56, 0x43, 0xdf, 0xe7, 0xcb, 0xe0, 0x75, 0xc1, 0x7b, 0x93, 0xc6, 0xba, 0x6b, 0x5a, 0x74, 0xea, 0x8d, 0x1a, 0xba, 0xb9, 0xc7, 0x28, 0xae, 0x5b, 0x00, 0x86, 0x6c, 0x62, 0x88, 0x0d, 0x3c, 0x00, 0x05, 0x20, 0x37, 0xcf, 0x80, 0x2d, 0x2c, 0xf2, 0xa8, 0xe1, 0xbe, 0xa5, 0x8c, 0x7b, 0xa6, 0x04, 0x77, 0x4d, 0x4f, 0x80, 0xbc, 0x04 } -, - /* Seed */ - 70, - { 0xaf, 0x9d, 0x9d, 0x31, 0x2e, 0x22, 0x57, 0x0f, 0xbc, 0x4b, 0xc8, 0x5a, 0x44, 0x5e, 0xd8, 0xd8, 0x99, 0x66, 0x0e, 0xd2, 0x4c, 0xf0, 0x30, 0x15, 0x33, 0x94, 0x6e, 0x5c, 0xb9, 0x47, 0x1a, 0x27, 0xc5, 0x10, 0xcd, 0x17, 0x55, 0x91, 0xd2, 0x3d, 0x36, 0x3d, 0xc4, 0xe3, 0xe6, 0x9c, 0x7b, 0xb4, 0x65, 0x51, 0x7a, 0x4c, 0xd1, 0xd1, 0xce, 0x41, 0x3e, 0x10, 0x16, 0xae, 0xaf, 0xd5, 0x5d, 0x2c, 0xb9, 0xde, 0xbc, 0xfe, 0x4b, 0x1d } -, - /* Encryption */ - 129, - { 0x05, 0x87, 0x11, 0x19, 0x16, 0xbb, 0x42, 0xf8, 0x47, 0x57, 0x69, 0x1e, 0xfe, 0xde, 0x7e, 0xb7, 0x79, 0x6a, 0x5c, 0xf8, 0x87, 0xc3, 0x7c, 0xa9, 0xf6, 0x1b, 0x45, 0x1f, 0xb1, 0xba, 0xde, 0x38, 0x9c, 0xfc, 0x5f, 0xdc, 0x21, 0x98, 0x41, 0xbb, 0x41, 0xda, 0x82, 0x74, 0x52, 0x72, 0x5f, 0xc8, 0x2b, 0x4d, 0x1a, 0xde, 0x56, 0x9c, 0xee, 0xc8, 0x05, 0x79, 0xed, 0xb1, 0xb4, 0xb1, 0x5b, 0x46, 0xad, 0x7d, 0x45, 0xb2, 0x45, 0x98, 0x80, 0x23, 0xea, 0x0d, 0xfc, 0xb3, 0x74, 0x4a, 0x69, 0x2e, 0xb9, 0xac, 0xa8, 0x5f, 0x21, 0x10, 0x10, 0xaf, 0xb1, 0xe9, 0x89, 0x4f, 0x85, 0x4a, 0x5e, 0x34, 0xfe, 0x89, 0xaa, 0x05, 0x19, 0x68, 0xa3, 0xb2, 0x36, 0x2c, 0x15, 0x0c, 0x6d, 0x97, 0x0e, 0xdd, 0x82, 0xb9, 0xe2, 0xd1, 0x3b, 0x38, 0xc3, 0xc2, 0x95, 0x6d, 0x91, 0x50, 0x08, 0x86, 0x41, 0xd5, 0x30 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 9.20", - /* Message */ - 4, - { 0x52, 0x5c, 0xff, 0xa3 } -, - /* Seed */ - 122, - { 0x0c, 0x99, 0x30, 0x4c, 0xc6, 0x26, 0x3d, 0x1e, 0xe2, 0x44, 0x6e, 0x24, 0x8c, 0x27, 0x11, 0x2c, 0x8f, 0x96, 0xda, 0x82, 0x51, 0x5f, 0x06, 0xf8, 0x12, 0x39, 0x8a, 0x88, 0x81, 0x1f, 0x39, 0xfb, 0x05, 0x62, 0x05, 0xc4, 0x4d, 0x6b, 0xd4, 0x85, 0x5a, 0x62, 0xc2, 0x1c, 0x60, 0x1b, 0x88, 0xf8, 0x02, 0x34, 0xe2, 0x32, 0x41, 0xf7, 0x16, 0x32, 0x2d, 0x80, 0x54, 0xa8, 0x4a, 0x1f, 0xc3, 0xc8, 0x46, 0xde, 0xfb, 0x61, 0x76, 0x7c, 0xc4, 0xd8, 0x16, 0xfa, 0x7b, 0x37, 0x47, 0xf8, 0x72, 0x9b, 0xf3, 0x37, 0x2a, 0xc2, 0xc2, 0x29, 0xd0, 0x52, 0xf4, 0x5b, 0xc4, 0x2f, 0xc3, 0x80, 0x50, 0xdc, 0xa3, 0xf2, 0x63, 0x2e, 0x60, 0x07, 0xb6, 0x08, 0x53, 0xb7, 0xe0, 0xcc, 0xb3, 0xda, 0xa4, 0x94, 0xe5, 0x53, 0x35, 0xfd, 0x04, 0xf1, 0x3d, 0x5f, 0xad, 0xa7 } -, - /* Encryption */ - 129, - { 0x06, 0x3e, 0x45, 0x08, 0xe5, 0x31, 0x2b, 0x5c, 0x38, 0x69, 0x4d, 0xe8, 0x2a, 0x71, 0xed, 0xa3, 0x12, 0xe9, 0xae, 0xd0, 0x5b, 0xc1, 0x43, 0xd3, 0x38, 0xf7, 0xf2, 0x28, 0x12, 0xd9, 0x3c, 0x28, 0x65, 0x12, 0x6a, 0x9b, 0x3a, 0x42, 0xc3, 0xca, 0x19, 0xed, 0xb3, 0x46, 0x01, 0xc0, 0xb2, 0x8a, 0x75, 0x66, 0x3b, 0x18, 0xf2, 0x39, 0xf5, 0xad, 0xca, 0xa4, 0xe9, 0xfa, 0x9f, 0x61, 0x18, 0x04, 0x72, 0x6f, 0xa1, 0x29, 0x62, 0xbb, 0xa3, 0x23, 0x0c, 0xb8, 0x86, 0xd6, 0x67, 0x82, 0xa4, 0x7e, 0xa9, 0x50, 0x2a, 0x83, 0x71, 0xe7, 0x57, 0x3b, 0xb6, 0xb0, 0x26, 0x6c, 0x33, 0x64, 0x6b, 0xdf, 0x53, 0xf8, 0xde, 0x36, 0x8e, 0xf2, 0x05, 0xb1, 0x1a, 0x85, 0xba, 0xf2, 0x1d, 0xaf, 0x3c, 0xe7, 0xa2, 0x59, 0x9f, 0x00, 0x8b, 0x99, 0x45, 0xee, 0xb1, 0x86, 0xec, 0x19, 0x2c, 0x54, 0x0a, 0xc2, 0x3c } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 10: A 1028-bit RSA key pair", -{ - /* Modulus */ - 129, - { 0x0b, 0x52, 0xcb, 0x6b, 0x5c, 0x3b, 0x9e, 0xc5, 0xaa, 0xad, 0x89, 0x4e, 0x51, 0x77, 0xf7, 0xf4, 0x5b, 0x8d, 0x33, 0xdc, 0xbb, 0xe9, 0x6a, 0x5b, 0x26, 0xf3, 0x00, 0x72, 0xbf, 0x15, 0x73, 0xa6, 0xc4, 0x1f, 0xb0, 0xa9, 0x7a, 0xe1, 0xe5, 0x2e, 0xd8, 0xc2, 0x5c, 0x62, 0xb9, 0x8b, 0xf5, 0x9d, 0xe7, 0xb6, 0x8a, 0xb9, 0x8c, 0x2d, 0x8b, 0x93, 0xc4, 0x94, 0x27, 0x23, 0xcc, 0x4b, 0xae, 0xd2, 0xb3, 0x93, 0xc0, 0x7b, 0x2b, 0x11, 0x90, 0x9c, 0x73, 0x2d, 0xf7, 0xc1, 0xdc, 0xbb, 0x43, 0x3a, 0x83, 0x9d, 0x46, 0xf4, 0x28, 0xe9, 0xdd, 0xc8, 0xd3, 0x5f, 0xd3, 0x3e, 0xed, 0x29, 0x81, 0x80, 0xf7, 0x5f, 0x2d, 0x5c, 0x9f, 0xe8, 0x53, 0x4f, 0x03, 0x47, 0xf8, 0x68, 0x5c, 0x28, 0xc4, 0x37, 0xea, 0x5b, 0x81, 0x1a, 0x28, 0x6e, 0x81, 0x0c, 0x69, 0x7a, 0x88, 0xcd, 0x7e, 0x45, 0x36, 0x4c, 0x1f } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x45, 0xcc, 0x14, 0x17, 0xb2, 0x6f, 0xce, 0x3e, 0x9f, 0xd3, 0x10, 0x89, 0xb1, 0xa3, 0xcc, 0xc4, 0x6f, 0x8f, 0xf2, 0x1e, 0xac, 0x2e, 0x1d, 0x67, 0xc0, 0xae, 0x20, 0x15, 0x2d, 0xc5, 0x0d, 0x1c, 0xe7, 0xce, 0x6f, 0x26, 0x40, 0x4e, 0x2e, 0x64, 0x95, 0xb9, 0x77, 0xbf, 0x13, 0xf9, 0xa4, 0x05, 0xb2, 0x45, 0x80, 0xd6, 0x39, 0x3a, 0x85, 0x22, 0x54, 0x96, 0xe4, 0xab, 0xc4, 0x9e, 0xbe, 0xff, 0xde, 0x70, 0xcf, 0x26, 0x76, 0x68, 0x66, 0xf2, 0x76, 0xe1, 0x5b, 0x49, 0x2a, 0xf8, 0x03, 0x3f, 0x1b, 0xac, 0x7f, 0x66, 0xb7, 0x1a, 0x3b, 0xaf, 0x57, 0x1f, 0xfc, 0xcc, 0x03, 0x8a, 0x48, 0x86, 0x93, 0x94, 0xcc, 0xa3, 0xfa, 0x00, 0x49, 0x85, 0xb4, 0x34, 0xa5, 0x15, 0x17, 0x87, 0x7e, 0xae, 0x97, 0xa3, 0x84, 0x94, 0x7f, 0x01, 0xa7, 0x2c, 0xf4, 0xb2, 0x01, 0x93, 0xdd, 0x27, 0x64, 0x81 } -, - /* Prime 1 */ - 65, - { 0x03, 0x5f, 0xed, 0xee, 0x7e, 0x64, 0xfd, 0x68, 0x65, 0x79, 0x31, 0xa9, 0xdf, 0x9d, 0x55, 0x62, 0x28, 0xdf, 0xc6, 0x33, 0xa7, 0x50, 0x02, 0x76, 0x8f, 0x65, 0xd7, 0x15, 0xf0, 0x44, 0xf2, 0x3b, 0x3f, 0xe7, 0x88, 0xbb, 0x17, 0x86, 0x4d, 0x61, 0xdf, 0x57, 0x9e, 0x68, 0xdf, 0x80, 0xde, 0xa3, 0xa6, 0x31, 0x90, 0x62, 0x9d, 0xac, 0x7d, 0xe6, 0x29, 0xef, 0x9a, 0xb8, 0xf4, 0xdf, 0x0b, 0x27, 0x7f } -, - /* Prime 2 */ - 65, - { 0x03, 0x5a, 0xf8, 0xe6, 0xfe, 0x2f, 0x84, 0x61, 0xfc, 0x89, 0xa6, 0x45, 0x00, 0xf8, 0x19, 0x9c, 0xcb, 0xd3, 0xf4, 0x69, 0x07, 0x85, 0x96, 0x15, 0x56, 0x03, 0xd3, 0xf0, 0x88, 0x08, 0x33, 0xc3, 0x77, 0xdb, 0x07, 0x8e, 0x43, 0x7e, 0x35, 0x60, 0x00, 0x4a, 0xd1, 0xd6, 0xf8, 0xd3, 0x47, 0x88, 0x3f, 0x3e, 0xb0, 0x1d, 0x18, 0x9d, 0x52, 0xef, 0xf6, 0xe2, 0x60, 0xe5, 0x2f, 0xba, 0xa6, 0x2b, 0x61 } -, - /* Prime exponent 1 */ - 64, - { 0xb2, 0x43, 0xb3, 0x49, 0x8b, 0x67, 0x2a, 0xaa, 0x7d, 0x96, 0x7c, 0xd9, 0xf2, 0x6a, 0x12, 0xe6, 0x22, 0x3e, 0x90, 0x9b, 0xfe, 0x8b, 0x73, 0x91, 0x65, 0x4f, 0x3b, 0x6c, 0xa7, 0x9d, 0x60, 0x12, 0x70, 0xa1, 0x2b, 0x11, 0xd0, 0x99, 0x99, 0x0f, 0x6f, 0xd1, 0xf5, 0x0b, 0xe1, 0x58, 0x8f, 0x66, 0x14, 0xa6, 0x19, 0x63, 0x35, 0x9b, 0x88, 0xe9, 0xb0, 0x52, 0x39, 0xc5, 0xf5, 0x5c, 0x24, 0xdb } -, - /* Prime exponent 2 */ - 65, - { 0x01, 0x35, 0x25, 0xad, 0xe5, 0x3f, 0xee, 0xd2, 0x61, 0x54, 0x9d, 0x3d, 0xea, 0x8a, 0x60, 0x95, 0x79, 0x1a, 0x90, 0xb5, 0x98, 0x5a, 0x70, 0xd8, 0xbe, 0xfb, 0x63, 0xb5, 0x07, 0x10, 0x84, 0xa8, 0xce, 0x23, 0x4b, 0x85, 0xdd, 0x2e, 0xb8, 0x41, 0x13, 0xf9, 0xd9, 0xaa, 0x18, 0x25, 0xda, 0x71, 0xe3, 0xe9, 0x48, 0xf3, 0x3f, 0xdf, 0xa7, 0x70, 0xec, 0x17, 0x2f, 0xae, 0x6c, 0xce, 0x2d, 0x6e, 0x21 } -, - /* Coefficient */ - 64, - { 0x1c, 0x52, 0x92, 0x93, 0x3c, 0x58, 0xd0, 0x22, 0x59, 0x2f, 0xc0, 0x03, 0x38, 0xbf, 0x22, 0xed, 0xfc, 0xba, 0x33, 0x16, 0x16, 0xb7, 0x9f, 0x8d, 0x2e, 0xfd, 0x1f, 0xa2, 0x4c, 0x64, 0xf5, 0xdc, 0xfa, 0xd9, 0xaa, 0x52, 0xba, 0xa4, 0x6e, 0x86, 0x59, 0xdd, 0xa9, 0xea, 0xb3, 0xa7, 0x86, 0x3e, 0x61, 0x37, 0x4a, 0xc0, 0xda, 0xe0, 0x18, 0x5f, 0xb5, 0x8e, 0xcb, 0x0b, 0x74, 0x65, 0xee, 0x07 } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 10.1", - /* Message */ - 46, - { 0x59, 0x22, 0xd0, 0x9f, 0xdf, 0x65, 0x22, 0x80, 0x2f, 0xbc, 0xf7, 0xa2, 0x8e, 0xc3, 0xd9, 0xfa, 0xdf, 0x60, 0x72, 0x03, 0xa3, 0x1b, 0xd0, 0xda, 0x96, 0x3a, 0xa0, 0x31, 0x5f, 0x35, 0xe1, 0xa0, 0xa3, 0x74, 0xd4, 0x87, 0xdd, 0x08, 0x62, 0xa6, 0xf6, 0xbe, 0xc9, 0x32, 0xb7, 0xdb } -, - /* Seed */ - 80, - { 0x61, 0x39, 0x5a, 0x0f, 0xa1, 0x2e, 0x1e, 0xc2, 0xff, 0xea, 0x2a, 0x88, 0x90, 0x65, 0x3e, 0x8f, 0x37, 0x8d, 0xc4, 0x6c, 0xe2, 0xb8, 0xaa, 0x4a, 0x0a, 0x1c, 0x56, 0x7b, 0x30, 0xe5, 0x9c, 0x3a, 0x33, 0xa6, 0x68, 0x98, 0x97, 0x14, 0xfc, 0x3d, 0x45, 0xac, 0x88, 0x63, 0x27, 0xe3, 0x6c, 0x34, 0x5d, 0xa8, 0x58, 0xf9, 0x03, 0xd1, 0xe6, 0x06, 0x74, 0x03, 0x14, 0xcb, 0x80, 0x8d, 0x86, 0xab, 0xc3, 0x1b, 0x49, 0xb3, 0x5b, 0x3f, 0x20, 0xe3, 0x79, 0x29, 0xdc, 0xc8, 0x59, 0xd5, 0x91, 0x41 } -, - /* Encryption */ - 129, - { 0x04, 0x39, 0xe7, 0xdd, 0x09, 0xaf, 0x61, 0xc0, 0xee, 0x25, 0xf3, 0xe5, 0xc2, 0x95, 0x1d, 0xa4, 0x9d, 0x3f, 0xd7, 0x08, 0xb2, 0x97, 0xa3, 0x05, 0x5f, 0xf9, 0x98, 0x3a, 0x9e, 0xa5, 0x38, 0xb8, 0x3d, 0x59, 0xda, 0xbd, 0xb8, 0x5d, 0xaf, 0x82, 0xae, 0x7b, 0xb1, 0x97, 0x8e, 0x7d, 0xa2, 0xa6, 0xdc, 0x05, 0x87, 0xef, 0x9c, 0x73, 0x2e, 0xe6, 0x88, 0x37, 0x3f, 0xbc, 0xbf, 0xa2, 0xda, 0xcf, 0xf9, 0xb3, 0xc1, 0x2f, 0x70, 0x4e, 0xe1, 0x4f, 0x83, 0x24, 0xbd, 0x4c, 0xc6, 0xbf, 0x9d, 0xcd, 0x3f, 0x05, 0x33, 0xc3, 0xb1, 0x1a, 0x0d, 0x38, 0xdb, 0xcc, 0x7b, 0xb7, 0xef, 0x9a, 0x72, 0x29, 0x6b, 0x6c, 0x13, 0xdc, 0x42, 0xd7, 0xec, 0x17, 0xf8, 0x51, 0xa5, 0x16, 0x12, 0xc7, 0x49, 0x4c, 0x63, 0x68, 0xa7, 0xfb, 0xec, 0x93, 0xd2, 0x2e, 0x8f, 0x9b, 0x72, 0xbd, 0xc0, 0x44, 0x9f, 0xb4, 0x30 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 10.2", - /* Message */ - 62, - { 0x5f, 0xba, 0xd4, 0x3a, 0x91, 0x0a, 0x29, 0x0e, 0x50, 0x55, 0xd5, 0x14, 0xe7, 0x1c, 0x8e, 0xab, 0xf1, 0xf9, 0x33, 0x20, 0xeb, 0xd0, 0xda, 0x8f, 0x90, 0xd1, 0x46, 0xa8, 0xf3, 0xdd, 0x5c, 0x1a, 0x2c, 0x72, 0x0b, 0x93, 0x21, 0x1e, 0x48, 0x29, 0x34, 0x14, 0x9f, 0x1d, 0x21, 0xb9, 0x78, 0xf4, 0x8a, 0x0b, 0xb8, 0xe4, 0xcc, 0xa3, 0xf5, 0xd4, 0x5d, 0x3f, 0x3e, 0x3b, 0xa8, 0xe1 } -, - /* Seed */ - 64, - { 0x21, 0x04, 0x52, 0x61, 0x80, 0x4b, 0xf7, 0x54, 0xbc, 0xb8, 0xbf, 0x34, 0x98, 0xb1, 0xad, 0x10, 0xaf, 0xf3, 0x3d, 0xa1, 0xf2, 0x25, 0xed, 0xa5, 0x64, 0x65, 0x90, 0x45, 0x8b, 0x20, 0x70, 0x9f, 0xc8, 0xd0, 0xb4, 0x98, 0x90, 0x7a, 0x83, 0x64, 0xce, 0x1c, 0x43, 0x6b, 0x6b, 0x1e, 0x73, 0x18, 0x1c, 0x86, 0xc6, 0x77, 0xaf, 0x45, 0xc1, 0x7f, 0x9e, 0x4a, 0xf3, 0x75, 0x9c, 0xad, 0x24, 0x87 } -, - /* Encryption */ - 129, - { 0x02, 0x9f, 0x64, 0xac, 0x33, 0x01, 0x34, 0x00, 0x7f, 0x77, 0xf7, 0x2c, 0x37, 0xf4, 0x17, 0x7c, 0x24, 0xd6, 0x60, 0xbe, 0x4e, 0xba, 0xc1, 0x86, 0x8a, 0xd1, 0x1f, 0x9e, 0x30, 0x51, 0xb8, 0xcd, 0x77, 0xc4, 0x69, 0x11, 0x99, 0xac, 0x49, 0x19, 0xdb, 0x2e, 0xd3, 0x63, 0x74, 0x0d, 0x2d, 0xde, 0x32, 0x91, 0xf1, 0x0d, 0x92, 0x68, 0xe7, 0xc7, 0xde, 0x37, 0xea, 0x42, 0x1e, 0xbb, 0x1f, 0xad, 0x65, 0x29, 0xf2, 0x92, 0x19, 0x2a, 0x96, 0x80, 0xba, 0x96, 0x3e, 0xda, 0x93, 0x74, 0x03, 0x7a, 0xb9, 0x52, 0x9a, 0x48, 0x6f, 0x35, 0xcb, 0xd2, 0x9e, 0x09, 0xea, 0x98, 0xa5, 0x04, 0x5d, 0x9e, 0x16, 0xbb, 0x87, 0x70, 0x15, 0x5d, 0x70, 0xaf, 0xd2, 0x17, 0xa1, 0x46, 0x86, 0x27, 0x49, 0xec, 0x1a, 0xd1, 0x59, 0xcf, 0x6e, 0x6a, 0x63, 0xdf, 0x14, 0x2b, 0x82, 0x46, 0xd8, 0x44, 0xa7, 0x37, 0x2d } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.3", - /* Message */ - 62, - { 0x22, 0xbb, 0xc6, 0x16, 0xec, 0x6e, 0xf3, 0x57, 0x31, 0x56, 0xb4, 0x17, 0x61, 0xac, 0x3b, 0xdb, 0x57, 0xbd, 0x9b, 0x70, 0x36, 0xed, 0xc9, 0xa6, 0x97, 0x88, 0x75, 0xe2, 0xa6, 0x14, 0xcd, 0xe3, 0xef, 0xed, 0xaf, 0xd3, 0x88, 0x9a, 0x5d, 0xbd, 0xcc, 0x5f, 0xad, 0x9e, 0x9b, 0xec, 0xf8, 0xa8, 0xbb, 0x80, 0x33, 0xff, 0x91, 0xdf, 0xed, 0x60, 0x4b, 0xf8, 0xc6, 0xe9, 0xbb, 0xc7 } -, - /* Seed */ - 64, - { 0x3b, 0x47, 0xd2, 0xca, 0x95, 0x54, 0xb3, 0x4f, 0x94, 0x29, 0x57, 0x8d, 0x4f, 0xde, 0xc5, 0xd9, 0x6e, 0xca, 0x89, 0xb6, 0x81, 0x72, 0xd1, 0xdb, 0x13, 0x56, 0xb3, 0xda, 0x7a, 0x69, 0xf1, 0x58, 0x4d, 0x4c, 0x84, 0x6b, 0x18, 0x43, 0x2f, 0x02, 0xf2, 0x59, 0xca, 0xdc, 0x24, 0xe1, 0x54, 0xff, 0x15, 0xf8, 0x06, 0xf2, 0x53, 0x43, 0x50, 0x0e, 0x13, 0xb5, 0xbe, 0x43, 0xc7, 0xb5, 0xae, 0x7e } -, - /* Encryption */ - 129, - { 0x00, 0xc4, 0xe6, 0xc1, 0x0c, 0x25, 0x5e, 0x4b, 0xeb, 0x2b, 0x31, 0xc1, 0x65, 0x68, 0x46, 0xb9, 0x7c, 0xa2, 0x3a, 0x3b, 0xa3, 0x2a, 0xb1, 0x9c, 0x64, 0x85, 0x20, 0x11, 0x3d, 0x70, 0x34, 0xdf, 0xa4, 0x6b, 0x0c, 0xd2, 0x3d, 0x73, 0x99, 0xa9, 0x3c, 0xb0, 0x2f, 0x1e, 0xba, 0x94, 0x83, 0x18, 0xe3, 0x79, 0x1c, 0x30, 0x6a, 0x2e, 0xb9, 0xc0, 0xc5, 0x6d, 0x8f, 0x7e, 0x83, 0x25, 0x0f, 0x83, 0xad, 0x49, 0x2f, 0xad, 0xf7, 0x83, 0x17, 0x69, 0xf0, 0x2e, 0x18, 0x24, 0x34, 0x74, 0x45, 0xd0, 0x41, 0x9b, 0x98, 0xb8, 0xe7, 0x95, 0x45, 0x65, 0x32, 0x30, 0x0b, 0x92, 0xd6, 0xe4, 0x55, 0xb5, 0xa4, 0xeb, 0xa8, 0x53, 0xd6, 0xf7, 0x45, 0x92, 0x90, 0xab, 0x02, 0x31, 0x99, 0x48, 0x53, 0xa8, 0xc0, 0x7e, 0x54, 0xf5, 0x9c, 0x62, 0x45, 0x37, 0x08, 0x02, 0x89, 0xf9, 0x31, 0x43, 0xeb, 0xc6, 0x61 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.4", - /* Message */ - 50, - { 0x31, 0x6c, 0xc4, 0x45, 0x0a, 0x53, 0x70, 0x3c, 0x05, 0x8c, 0x90, 0x1f, 0x50, 0x7d, 0x7a, 0xd0, 0xcb, 0x63, 0x96, 0xc5, 0x51, 0xd4, 0xf0, 0x61, 0x82, 0xab, 0xd3, 0xa4, 0x3a, 0xac, 0xba, 0xbb, 0x31, 0x59, 0xc0, 0x26, 0xb3, 0xe7, 0xdb, 0xc1, 0x60, 0xf4, 0x19, 0x53, 0x31, 0x7e, 0x0f, 0x20, 0x80, 0x8c } -, - /* Seed */ - 76, - { 0xc1, 0xec, 0xb1, 0x16, 0x4b, 0x3e, 0x66, 0x23, 0xf0, 0xd9, 0xb9, 0xc5, 0xeb, 0xf9, 0x9e, 0x78, 0x8b, 0x7b, 0xd9, 0x4e, 0xb7, 0x43, 0x74, 0xf6, 0x1e, 0xd3, 0x14, 0x30, 0x4c, 0xaf, 0x46, 0xf8, 0x4a, 0x3f, 0xea, 0x1b, 0xa0, 0xe4, 0x7f, 0xc8, 0xbe, 0x41, 0x97, 0xd1, 0xd2, 0xcd, 0x41, 0x41, 0xcb, 0x9a, 0x61, 0x5d, 0x89, 0xc4, 0xbd, 0x91, 0x10, 0xca, 0x6a, 0xc9, 0xa5, 0x60, 0xf0, 0x76, 0xeb, 0xe6, 0x9b, 0x74, 0xa1, 0x0f, 0xe9, 0xcc, 0xdb, 0x76, 0xda, 0xbd } -, - /* Encryption */ - 129, - { 0x06, 0x16, 0xb8, 0xbc, 0x77, 0x2c, 0x55, 0x64, 0xd4, 0x51, 0xb1, 0x28, 0xd9, 0xb1, 0x36, 0x4c, 0x9e, 0x33, 0xb6, 0xe5, 0x58, 0xec, 0x67, 0xf2, 0x10, 0x5c, 0x98, 0x00, 0x11, 0x7d, 0x0b, 0x73, 0xcc, 0xab, 0x9d, 0xb5, 0x1d, 0x96, 0x7a, 0x9d, 0x66, 0x32, 0x2c, 0xbc, 0x5a, 0x01, 0x74, 0x6e, 0x47, 0x31, 0xdd, 0x7d, 0x04, 0xe6, 0x36, 0xe6, 0x4d, 0x35, 0xf2, 0xc8, 0x6c, 0xa3, 0x9d, 0x26, 0x14, 0x92, 0x17, 0x6b, 0x8d, 0xab, 0xdb, 0x13, 0x4b, 0xe9, 0x4b, 0xe5, 0x1b, 0x6c, 0x02, 0x3a, 0x0d, 0x55, 0xfc, 0xc1, 0xf0, 0x4c, 0x94, 0xc8, 0x6d, 0x47, 0x7d, 0xb4, 0x03, 0xb0, 0x4f, 0xb6, 0xc0, 0x28, 0x50, 0x57, 0x24, 0x79, 0x38, 0x40, 0xcb, 0xf4, 0x68, 0xaa, 0xaa, 0x91, 0xbc, 0x54, 0xe0, 0xd6, 0x47, 0x7c, 0xe6, 0x48, 0xce, 0xdd, 0x12, 0x76, 0xf2, 0xad, 0x2d, 0x4d, 0x42, 0x3b, 0x6c } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.5", - /* Message */ - 51, - { 0xd5, 0x4e, 0xa3, 0x7c, 0xbf, 0xbd, 0xb8, 0x18, 0x3b, 0x3b, 0x54, 0x7f, 0x6d, 0xf2, 0xd5, 0xd6, 0x3c, 0x41, 0x5b, 0x1c, 0x44, 0xed, 0x63, 0x93, 0xc6, 0x97, 0xb4, 0xd9, 0x3a, 0x97, 0xfa, 0x0d, 0x2f, 0x4d, 0x30, 0x0a, 0x68, 0xe9, 0x8f, 0x7f, 0xd0, 0x46, 0x07, 0x01, 0xd1, 0x57, 0x9d, 0x96, 0x83, 0x61, 0x2b } -, - /* Seed */ - 75, - { 0xd1, 0xce, 0xb0, 0xc0, 0x72, 0xd6, 0x88, 0x8f, 0xa9, 0x1a, 0x75, 0x7c, 0xbf, 0x50, 0xd6, 0x69, 0x76, 0xbb, 0xb7, 0x2e, 0x61, 0x94, 0x62, 0x61, 0x4d, 0x5d, 0xec, 0x0f, 0xc0, 0xbb, 0xca, 0xbb, 0x07, 0x07, 0x89, 0xc2, 0xb0, 0x89, 0x50, 0x91, 0xb8, 0xfa, 0x9c, 0x7e, 0x75, 0xab, 0x20, 0xb8, 0x97, 0x58, 0xf9, 0x7f, 0xd0, 0x47, 0xbc, 0x44, 0xa5, 0x68, 0xa2, 0x61, 0x2d, 0x0d, 0x50, 0x1d, 0x15, 0xd4, 0xfb, 0x82, 0xe7, 0x75, 0x28, 0x79, 0x69, 0x49, 0xf3 } -, - /* Encryption */ - 129, - { 0x03, 0xc1, 0x38, 0xc7, 0x91, 0x99, 0xb0, 0xb1, 0x70, 0x0b, 0xab, 0x2e, 0x63, 0xe1, 0xd2, 0xa0, 0x03, 0x1e, 0xf6, 0x02, 0xf7, 0xdd, 0xf1, 0xed, 0x3a, 0x16, 0x1a, 0x5e, 0x70, 0xf1, 0x64, 0x51, 0xda, 0xa1, 0x01, 0xf7, 0x4c, 0xdd, 0x65, 0x47, 0xa7, 0xc6, 0x52, 0xc7, 0x32, 0x9b, 0xb1, 0x73, 0x7f, 0xb1, 0x4c, 0x1c, 0xc0, 0xc0, 0xc3, 0xe7, 0x61, 0x2a, 0xe2, 0x0e, 0xe0, 0x21, 0xab, 0x21, 0xd7, 0x0b, 0xf9, 0x51, 0x7b, 0x4d, 0x33, 0xa9, 0xd8, 0x09, 0x61, 0x2e, 0x7f, 0x42, 0x68, 0x85, 0xb7, 0x9b, 0x31, 0x2e, 0x26, 0x6e, 0x42, 0xb2, 0x02, 0xb5, 0x71, 0xc6, 0x6f, 0x9a, 0x10, 0x7b, 0x8f, 0xd7, 0xc5, 0x6c, 0x05, 0x0a, 0x8e, 0x1e, 0xb1, 0x89, 0x56, 0xdb, 0x06, 0xa0, 0x20, 0x9d, 0xd1, 0x6e, 0xf2, 0xd9, 0x05, 0x24, 0xdb, 0x87, 0x91, 0x7f, 0x34, 0x00, 0x6b, 0xe6, 0xb1, 0x5a, 0x13 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.6", - /* Message */ - 9, - { 0xf6, 0x4b, 0x25, 0x11, 0xcb, 0xe3, 0xcc, 0x65, 0x81 } -, - /* Seed */ - 117, - { 0xda, 0xca, 0x19, 0x63, 0xcb, 0x3d, 0xe5, 0x24, 0x57, 0x79, 0xe9, 0x64, 0x77, 0xff, 0xda, 0x27, 0x7f, 0x4b, 0x92, 0x3f, 0xa9, 0xa8, 0xd9, 0x38, 0x5d, 0x52, 0x31, 0x69, 0x23, 0x3f, 0x58, 0x79, 0xa3, 0xc9, 0xfc, 0x7a, 0x38, 0xe1, 0xb2, 0x08, 0xc3, 0x2d, 0xe4, 0x0b, 0xbe, 0x1d, 0xa0, 0x77, 0x47, 0x1e, 0x61, 0xc8, 0xb9, 0xb7, 0x09, 0x3c, 0x41, 0xb0, 0xa6, 0x5c, 0x99, 0x64, 0x32, 0xd6, 0x45, 0x52, 0x11, 0x84, 0xa6, 0x6a, 0xfc, 0xb9, 0x6f, 0x07, 0xa8, 0xf8, 0xee, 0xbb, 0x6e, 0xf8, 0x17, 0xe0, 0x27, 0xee, 0x2f, 0x37, 0x95, 0x45, 0x23, 0x9e, 0xf6, 0xf9, 0xc1, 0xd0, 0xd8, 0x60, 0xe8, 0x21, 0x44, 0xec, 0x71, 0x59, 0x7f, 0x24, 0x6a, 0x83, 0xcc, 0xf6, 0x60, 0xea, 0x4c, 0x70, 0xee, 0x1d, 0xf0, 0x14, 0xef } -, - /* Encryption */ - 129, - { 0x05, 0x08, 0xed, 0x84, 0x5c, 0x96, 0x23, 0x8e, 0x3a, 0x07, 0xe8, 0xec, 0x02, 0x7f, 0x7b, 0x09, 0x8a, 0x83, 0xf0, 0x3e, 0xac, 0x1f, 0xec, 0x42, 0x6f, 0x4d, 0x60, 0x05, 0xb6, 0x0d, 0x07, 0x35, 0xdb, 0x05, 0x37, 0x08, 0x2f, 0x23, 0xb7, 0x50, 0xf6, 0xdb, 0x54, 0x88, 0x21, 0x41, 0x81, 0xe1, 0x14, 0xcf, 0x1f, 0x72, 0x07, 0x41, 0x9c, 0xa2, 0x93, 0x75, 0x0a, 0xa7, 0x66, 0xfa, 0x7a, 0x5b, 0x9b, 0xe0, 0x0e, 0x37, 0x29, 0x2c, 0x23, 0x23, 0x1c, 0x6a, 0xb3, 0xbe, 0x2d, 0xed, 0xee, 0xd3, 0x21, 0xb0, 0xf9, 0xcd, 0x83, 0x2c, 0x5e, 0xdb, 0x41, 0x67, 0x7c, 0x1a, 0xb9, 0x83, 0xe7, 0xe3, 0xeb, 0xc8, 0xb5, 0x19, 0x93, 0x82, 0x1d, 0x76, 0xdf, 0x2a, 0xc2, 0x29, 0x8d, 0x8b, 0x80, 0xab, 0x17, 0xc3, 0x8b, 0x38, 0x53, 0xf1, 0x8f, 0xe3, 0x09, 0xcc, 0x7b, 0xf7, 0xc4, 0xa2, 0xc2, 0x7d, 0x63 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.7", - /* Message */ - 16, - { 0x85, 0x26, 0x49, 0x01, 0x52, 0x06, 0xe2, 0xa4, 0x09, 0x78, 0x76, 0xf8, 0xab, 0xb9, 0xb8, 0x46 } -, - /* Seed */ - 110, - { 0x03, 0x4f, 0xe3, 0x4e, 0x20, 0xe6, 0x06, 0xa8, 0xdc, 0x7c, 0xbc, 0xd0, 0xd6, 0xab, 0x3e, 0x07, 0x97, 0xc5, 0xdc, 0x4e, 0xd7, 0x86, 0x8e, 0xdc, 0x79, 0x59, 0x89, 0x3e, 0x58, 0x13, 0x7d, 0x26, 0x32, 0xb2, 0xc5, 0xa2, 0x9a, 0x81, 0x35, 0xc2, 0x4a, 0xf6, 0x99, 0xb5, 0x9d, 0x68, 0x10, 0x3a, 0x1f, 0x42, 0x33, 0x93, 0xe3, 0x88, 0x6e, 0x3f, 0xa8, 0x54, 0xe3, 0x97, 0x21, 0x50, 0x19, 0x41, 0x3a, 0xf0, 0xb0, 0xd4, 0xfb, 0x1b, 0xd6, 0x9b, 0xd4, 0x93, 0x4d, 0x4d, 0x1e, 0x2e, 0x9f, 0x3b, 0x9e, 0x7c, 0x46, 0xd4, 0x98, 0x4f, 0xe9, 0xe7, 0xa3, 0x7a, 0xb2, 0xf1, 0xc7, 0x8b, 0x0b, 0x8d, 0x9c, 0xd8, 0xfa, 0xbb, 0x3d, 0x18, 0xd4, 0xc5, 0x06, 0xe2, 0xfd, 0x3f, 0x85, 0xae } -, - /* Encryption */ - 129, - { 0x01, 0x6f, 0xbf, 0x2a, 0x7d, 0x36, 0x80, 0x71, 0xcc, 0x7b, 0xe5, 0x94, 0x49, 0x35, 0x4b, 0x9d, 0xe0, 0x5a, 0x85, 0xe1, 0xbb, 0x97, 0xb2, 0x51, 0x4b, 0x52, 0xb8, 0xd1, 0xf3, 0xe2, 0x69, 0x94, 0xe1, 0x2c, 0xfe, 0xda, 0x59, 0xe0, 0x58, 0xa2, 0xf3, 0xc8, 0x79, 0x23, 0x50, 0xc0, 0x68, 0x41, 0x7f, 0x99, 0x44, 0x1b, 0xfe, 0x74, 0x17, 0xe0, 0xb5, 0x31, 0x6e, 0x16, 0x3b, 0xa8, 0xd1, 0xf9, 0xe3, 0x2c, 0x59, 0xa4, 0x44, 0x98, 0x82, 0xf4, 0x7a, 0xd9, 0xb2, 0x4f, 0x68, 0x76, 0xd4, 0x78, 0xd3, 0xf5, 0xb7, 0xd2, 0x75, 0x35, 0x73, 0xe3, 0xf6, 0x97, 0xbf, 0x64, 0xc7, 0xb3, 0xac, 0x22, 0x28, 0xce, 0x69, 0xe7, 0x5e, 0x8e, 0x14, 0xab, 0x93, 0xf2, 0x19, 0x78, 0x05, 0x9a, 0x14, 0x3b, 0x87, 0x7c, 0x6d, 0xd4, 0x21, 0xb6, 0xe2, 0x0b, 0x07, 0x35, 0xa5, 0x36, 0x05, 0x55, 0x2a, 0xb0, 0xa8 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.8", - /* Message */ - 58, - { 0xf4, 0xfb, 0x50, 0xbe, 0xab, 0xec, 0xba, 0x77, 0xe7, 0x1d, 0xd8, 0xd1, 0x6c, 0x97, 0x5a, 0x86, 0xf6, 0x19, 0xea, 0x7d, 0xbf, 0x41, 0x96, 0x9a, 0x24, 0xba, 0xe2, 0xb8, 0x42, 0xc2, 0x69, 0xe0, 0xb4, 0xd6, 0xa2, 0x9e, 0x82, 0x9d, 0xbe, 0x2e, 0x49, 0x79, 0x9c, 0x9e, 0xd9, 0x71, 0xa3, 0x03, 0x35, 0xe6, 0xed, 0x9b, 0xf3, 0x9d, 0x12, 0x4b, 0xe0, 0xf8 } -, - /* Seed */ - 68, - { 0x9d, 0xbd, 0x92, 0xda, 0xee, 0xb8, 0x2b, 0xde, 0x81, 0x6c, 0x59, 0x3f, 0x70, 0x6b, 0x15, 0x92, 0x56, 0x85, 0x22, 0xbc, 0xa0, 0x79, 0x7f, 0x9e, 0x81, 0x1d, 0xd9, 0xdc, 0x0e, 0x89, 0x6e, 0x98, 0x4a, 0x4a, 0x9a, 0xce, 0x77, 0xde, 0xf5, 0xa9, 0x25, 0x0d, 0xb7, 0x95, 0x81, 0xaf, 0x33, 0xfb, 0x6d, 0xe2, 0x42, 0x7d, 0x1a, 0xf6, 0xa5, 0xf6, 0x92, 0x9f, 0xa8, 0xb6, 0x7b, 0xad, 0x02, 0x3f, 0x04, 0xb3, 0xff, 0xd2 } -, - /* Encryption */ - 129, - { 0x02, 0x92, 0xed, 0xfb, 0xac, 0x38, 0xe2, 0x22, 0x45, 0x45, 0xaf, 0x82, 0x86, 0x23, 0x27, 0x63, 0xbc, 0xb1, 0x8b, 0xae, 0x13, 0x70, 0x97, 0x99, 0xe3, 0x50, 0x77, 0x58, 0xd0, 0x14, 0x1a, 0xc2, 0x97, 0x6f, 0x30, 0xb8, 0x54, 0x67, 0xd7, 0x83, 0xab, 0xf6, 0xfc, 0x71, 0xdf, 0x61, 0x9e, 0x1a, 0x59, 0xe6, 0x23, 0x4f, 0x27, 0xb6, 0x32, 0xfe, 0xaa, 0xbf, 0xd9, 0x85, 0x33, 0x77, 0x35, 0x4d, 0x93, 0x3e, 0xf4, 0xec, 0x59, 0x94, 0xc0, 0xd5, 0x0d, 0x95, 0x2e, 0x0e, 0xce, 0x0b, 0xe1, 0xbe, 0x4d, 0x38, 0xf1, 0x1f, 0x66, 0xe7, 0xc3, 0xda, 0x88, 0xc8, 0x3b, 0x4b, 0xed, 0xcc, 0x06, 0x2e, 0x09, 0xf9, 0xaf, 0x95, 0xea, 0xca, 0xc0, 0x09, 0x9c, 0x52, 0x5f, 0x24, 0x1e, 0xa7, 0xd5, 0x65, 0xe1, 0xb7, 0x68, 0xcb, 0x97, 0x08, 0xf3, 0xbc, 0xd5, 0x91, 0x77, 0xb6, 0x76, 0x6a, 0x37, 0x34, 0x88 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.9", - /* Message */ - 56, - { 0x76, 0x91, 0x3e, 0x84, 0x8f, 0xb7, 0xb9, 0xfa, 0xca, 0x91, 0xba, 0xf4, 0xf4, 0x42, 0x01, 0x06, 0xa9, 0x4d, 0x6c, 0xe2, 0x5d, 0x14, 0x97, 0xfc, 0x4e, 0x7f, 0x85, 0x96, 0x54, 0x79, 0x5d, 0x7f, 0x24, 0x39, 0x9f, 0x3a, 0x12, 0x08, 0xaf, 0x02, 0x8e, 0x61, 0x67, 0x8a, 0x6d, 0x19, 0xa1, 0x86, 0x40, 0xb4, 0xd5, 0x0f, 0x75, 0x55, 0x86, 0x00 } -, - /* Seed */ - 70, - { 0x9c, 0xee, 0xaa, 0x26, 0x09, 0xba, 0x90, 0xeb, 0x61, 0xe4, 0xf7, 0x49, 0xc4, 0xcd, 0xa0, 0x1a, 0xea, 0x23, 0x68, 0x81, 0x76, 0x2d, 0xfc, 0x15, 0x0d, 0x97, 0xc1, 0x1e, 0xb6, 0x44, 0x0c, 0xb0, 0x57, 0xe5, 0x3c, 0x3f, 0xd9, 0xb3, 0x9e, 0x56, 0x0a, 0x46, 0xe9, 0xd3, 0xfa, 0x3a, 0xf3, 0xfe, 0xe5, 0xee, 0x2d, 0x02, 0xfa, 0x42, 0x49, 0xaf, 0x99, 0x98, 0xf5, 0x3e, 0xd0, 0x4d, 0xb0, 0x10, 0xe9, 0x6d, 0x8a, 0x01, 0xff, 0x6b } -, - /* Encryption */ - 129, - { 0x01, 0x96, 0x30, 0x89, 0xc3, 0x43, 0xed, 0x88, 0xb5, 0x6d, 0x6a, 0xcf, 0xef, 0xbc, 0x65, 0x5a, 0x37, 0xcc, 0xfd, 0x96, 0x20, 0x3f, 0x21, 0x87, 0x64, 0x69, 0x5a, 0xd3, 0x10, 0xc0, 0xb2, 0x66, 0x65, 0xee, 0x74, 0x5e, 0xb0, 0x10, 0xfc, 0x83, 0xbe, 0x8c, 0x20, 0x64, 0x5c, 0x43, 0x47, 0xdc, 0xd9, 0x44, 0x65, 0x5d, 0x9f, 0xe6, 0xcd, 0x98, 0x77, 0xdc, 0x70, 0xe5, 0xc1, 0x88, 0xcf, 0xc9, 0xa6, 0x6e, 0x71, 0xda, 0x74, 0x5c, 0xd3, 0xe1, 0xa7, 0xb7, 0xf5, 0xa1, 0xb2, 0x5b, 0x4f, 0xc1, 0x47, 0x0a, 0xdf, 0xbf, 0x7d, 0x8e, 0x45, 0xfb, 0x10, 0x7c, 0x5a, 0xeb, 0x50, 0xea, 0x8b, 0x56, 0xe0, 0x4c, 0xa5, 0x5b, 0x9b, 0x65, 0x2a, 0xd8, 0x34, 0xd9, 0xc9, 0x65, 0x77, 0xb6, 0x42, 0xef, 0x33, 0xf1, 0x64, 0xd4, 0x93, 0x1f, 0xb8, 0x9e, 0x0c, 0x8c, 0x6b, 0xf9, 0x17, 0x08, 0xfd, 0xa6, 0xdb } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.10", - /* Message */ - 44, - { 0xc3, 0x39, 0xf8, 0x57, 0xe4, 0xd0, 0x23, 0x1f, 0xa3, 0x7c, 0x06, 0xf0, 0x95, 0x6b, 0x4d, 0x53, 0xa6, 0xc5, 0x8e, 0x06, 0x10, 0xd8, 0xda, 0x43, 0x17, 0xdc, 0x84, 0x11, 0xd3, 0xa0, 0xf8, 0x98, 0x49, 0xb9, 0x4e, 0x8d, 0x7c, 0xcd, 0xb0, 0xc7, 0xd5, 0x33, 0x0c, 0x25 } -, - /* Seed */ - 82, - { 0x24, 0x90, 0x81, 0x6a, 0xc9, 0x69, 0x76, 0xca, 0x72, 0x5e, 0xb4, 0x98, 0xe2, 0xff, 0x04, 0x0a, 0xfe, 0x3d, 0x64, 0x17, 0xd3, 0x2e, 0x4f, 0xfb, 0xd9, 0xfc, 0x9e, 0x3f, 0xa6, 0x8c, 0xe8, 0x49, 0xc8, 0x81, 0xbe, 0x37, 0x9f, 0x17, 0x50, 0x4b, 0x97, 0xe1, 0xe0, 0xd2, 0x2d, 0x32, 0xff, 0x8d, 0xfe, 0x76, 0xbb, 0x45, 0x49, 0xf7, 0x13, 0xb5, 0xb8, 0xd8, 0x70, 0xed, 0x36, 0x59, 0xdd, 0xd3, 0x98, 0x4b, 0x6f, 0xb3, 0x9f, 0x6e, 0xbd, 0xdc, 0x11, 0x77, 0xad, 0x69, 0x8d, 0x90, 0x44, 0x39, 0x68, 0xab } -, - /* Encryption */ - 129, - { 0x00, 0xb5, 0xfb, 0x7b, 0x1e, 0x9d, 0x71, 0xdf, 0x8b, 0x16, 0xc6, 0x3a, 0x1a, 0x49, 0x6e, 0x6f, 0x7b, 0xf7, 0x72, 0x86, 0x4c, 0xb4, 0x11, 0x55, 0x2b, 0x50, 0xe0, 0xb7, 0xf1, 0x5e, 0x45, 0x97, 0x16, 0xf5, 0x64, 0x62, 0x43, 0x68, 0x76, 0x33, 0xa9, 0x10, 0x6c, 0x34, 0x6c, 0x8c, 0x6b, 0x7c, 0xfa, 0xc7, 0x50, 0xb4, 0x56, 0x6b, 0x1b, 0x88, 0xaa, 0xc0, 0xac, 0xb9, 0x16, 0xc0, 0x7a, 0x78, 0x0b, 0xe0, 0x6d, 0xf7, 0x97, 0x5c, 0xcd, 0x8b, 0x72, 0x60, 0x78, 0x68, 0x7a, 0x8e, 0xa5, 0xd3, 0x90, 0x3e, 0x04, 0xab, 0x1d, 0x23, 0xdc, 0x9b, 0x1e, 0xd3, 0x60, 0x00, 0xc9, 0xbb, 0xc3, 0xdc, 0x81, 0x61, 0xe9, 0x48, 0x3a, 0x18, 0xab, 0xb8, 0x64, 0x1e, 0xbb, 0x1f, 0xdd, 0x02, 0x66, 0xc0, 0x84, 0xbf, 0x0b, 0xd0, 0x9c, 0xc9, 0x4e, 0xeb, 0xb9, 0x28, 0x3c, 0x5a, 0x5f, 0x74, 0xe3, 0x60, 0x13 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.11", - /* Message */ - 30, - { 0x47, 0x58, 0x65, 0xa5, 0x7b, 0xdb, 0x91, 0xad, 0xdf, 0x77, 0x7c, 0xc9, 0xd0, 0xa1, 0x7a, 0x71, 0xa9, 0xf9, 0x71, 0x0a, 0x93, 0x1b, 0xd0, 0xc3, 0x14, 0x9b, 0x23, 0x91, 0xa3, 0x53 } -, - /* Seed */ - 96, - { 0x56, 0x2f, 0x79, 0x70, 0x94, 0x6a, 0xc4, 0xcf, 0x05, 0xed, 0xfb, 0x26, 0x34, 0x16, 0x7e, 0x14, 0xd6, 0x65, 0x8d, 0x24, 0xcd, 0xae, 0xf7, 0x5b, 0x40, 0x7c, 0x90, 0x04, 0x81, 0x8e, 0xfa, 0x75, 0xd1, 0x64, 0x5e, 0x81, 0x52, 0xd1, 0xfc, 0x80, 0xd6, 0x99, 0xdf, 0xe9, 0x9a, 0x27, 0xa7, 0xdf, 0x99, 0x7a, 0x8a, 0x66, 0x47, 0x5a, 0xaf, 0xce, 0x41, 0x95, 0x98, 0xe2, 0xa1, 0x91, 0x99, 0xfc, 0x20, 0x53, 0xe3, 0xac, 0xdd, 0x07, 0xfe, 0xc8, 0xba, 0x61, 0xf2, 0xb0, 0x3e, 0xfc, 0x7d, 0xee, 0xd8, 0x15, 0xcd, 0xa8, 0x95, 0x2e, 0x21, 0xe3, 0xc0, 0xb9, 0xa9, 0x35, 0x2a, 0xb3, 0x6f, 0x5e } -, - /* Encryption */ - 129, - { 0x03, 0xe2, 0x68, 0xd7, 0xd1, 0x80, 0xd0, 0x3c, 0x7c, 0xbc, 0x85, 0x07, 0xed, 0x1f, 0x83, 0x0e, 0xd3, 0x7a, 0x79, 0x95, 0x71, 0x2d, 0x7d, 0x91, 0x57, 0x32, 0x24, 0x3d, 0xe6, 0x85, 0xd5, 0xbd, 0x99, 0xa1, 0x4a, 0x8e, 0x86, 0xa6, 0x7c, 0xdd, 0x60, 0xdc, 0xd9, 0x0c, 0x33, 0x92, 0x10, 0x83, 0x5a, 0x46, 0xce, 0xac, 0x19, 0x36, 0xab, 0x3a, 0xa9, 0xc3, 0x81, 0x88, 0x2d, 0x76, 0x94, 0xa8, 0x38, 0x3d, 0x68, 0x98, 0xe2, 0x73, 0x44, 0xbd, 0x15, 0x6f, 0xe9, 0x28, 0x2c, 0x71, 0x32, 0x26, 0x25, 0xd6, 0x8d, 0x30, 0x70, 0xef, 0xf0, 0x1a, 0xc8, 0xd5, 0x95, 0xf6, 0x48, 0x6d, 0x79, 0xb7, 0x88, 0xe3, 0x69, 0x12, 0xfd, 0x3c, 0xcf, 0x28, 0x4e, 0xdd, 0x5f, 0xce, 0xe2, 0x40, 0x9d, 0xca, 0x7d, 0x4f, 0x29, 0xcc, 0x18, 0x2a, 0x78, 0x47, 0x8b, 0xd3, 0xea, 0x23, 0x62, 0x11, 0x25, 0x10, 0xa5 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.12", - /* Message */ - 26, - { 0x9e, 0x1e, 0x53, 0xf9, 0x86, 0x59, 0x9d, 0xa8, 0x98, 0xd5, 0x6d, 0xc1, 0xc7, 0x55, 0x6f, 0xef, 0xca, 0xa3, 0x39, 0x5d, 0x84, 0x50, 0xd5, 0x2b, 0x3b, 0xa7 } -, - /* Seed */ - 100, - { 0x0b, 0x17, 0x63, 0xcc, 0x34, 0x0e, 0x6e, 0x39, 0x78, 0x62, 0x6a, 0x06, 0xd6, 0xef, 0xc4, 0x0d, 0xed, 0x73, 0xdb, 0x53, 0x5a, 0x82, 0x2e, 0xc0, 0x4c, 0x99, 0x24, 0xd9, 0xec, 0x40, 0xd3, 0x85, 0x20, 0x15, 0xd7, 0xe1, 0x02, 0x9c, 0x13, 0x93, 0xad, 0xcf, 0x01, 0x50, 0x30, 0x8a, 0xcb, 0x27, 0x3c, 0x36, 0x35, 0x68, 0x28, 0xa4, 0x77, 0xfc, 0xf9, 0xa2, 0x9a, 0xca, 0xb9, 0x09, 0x35, 0x70, 0x42, 0x50, 0x26, 0xda, 0xc1, 0x4d, 0xa6, 0xcd, 0x30, 0x4c, 0xda, 0xa5, 0x4c, 0x9a, 0x4c, 0x5a, 0x99, 0x4e, 0xd6, 0x8a, 0x5c, 0xea, 0xc7, 0xe0, 0x81, 0xde, 0xc4, 0x64, 0x6e, 0x23, 0x7e, 0x47, 0x1e, 0x52, 0x5e, 0xf8 } -, - /* Encryption */ - 129, - { 0x06, 0xd5, 0x19, 0xa7, 0x30, 0xea, 0x5f, 0x54, 0x9f, 0xe1, 0x9e, 0x30, 0x1b, 0xa5, 0x15, 0x2d, 0x10, 0x3a, 0x3e, 0xad, 0x3f, 0x89, 0xab, 0x35, 0x16, 0xff, 0x7b, 0x34, 0x4c, 0x4f, 0x72, 0xa1, 0xc2, 0x6a, 0xa9, 0x0d, 0x5a, 0x01, 0xa2, 0xa6, 0x51, 0x93, 0xd3, 0xcf, 0x63, 0x41, 0xe5, 0x9a, 0x31, 0xfd, 0x2d, 0x7d, 0xfe, 0x43, 0x5c, 0x09, 0x84, 0xd1, 0xbb, 0xe8, 0x11, 0x32, 0x01, 0x0f, 0x43, 0x58, 0xee, 0xbf, 0xe8, 0x3f, 0xaf, 0x24, 0x1e, 0x7f, 0x35, 0xaf, 0x98, 0xb7, 0xc7, 0xab, 0x91, 0xe4, 0xf0, 0xe8, 0xa3, 0x2a, 0x2f, 0x57, 0xf0, 0x7f, 0x49, 0xd5, 0xc2, 0x1f, 0x1e, 0x13, 0x80, 0xba, 0x0e, 0x17, 0x9a, 0x38, 0xd3, 0xa2, 0xca, 0x46, 0x4f, 0xc1, 0x4d, 0x2b, 0x74, 0xa0, 0x3a, 0x88, 0x84, 0xaa, 0x85, 0x7b, 0x66, 0x01, 0x47, 0x02, 0xb1, 0xbc, 0x4e, 0x7c, 0xc5, 0xe1, 0xeb } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.13", - /* Message */ - 25, - { 0x1a, 0xe3, 0x1e, 0x0c, 0xbe, 0x44, 0x97, 0xba, 0x43, 0xc5, 0xd1, 0x5f, 0x53, 0x5f, 0xe0, 0x18, 0x84, 0x1c, 0x73, 0x14, 0x57, 0x67, 0xa6, 0xa4, 0xc8 } -, - /* Seed */ - 101, - { 0x8f, 0xf0, 0xfa, 0xa7, 0xa2, 0xb4, 0xff, 0x55, 0x3c, 0xcb, 0xb2, 0x0f, 0xf3, 0x10, 0xac, 0x5e, 0x0e, 0xa9, 0x28, 0x18, 0x56, 0x2e, 0xc9, 0xa0, 0x60, 0x64, 0xf5, 0xde, 0x79, 0x86, 0xb4, 0xf6, 0xc9, 0xae, 0xa2, 0xb9, 0xf0, 0x11, 0x42, 0x38, 0xe5, 0xa4, 0x99, 0xa8, 0xae, 0x20, 0xea, 0xe4, 0x02, 0x1f, 0xcd, 0xd8, 0xf0, 0x60, 0xc9, 0x93, 0xa9, 0xbf, 0x64, 0x2d, 0xa0, 0x25, 0x67, 0x39, 0x33, 0x48, 0x08, 0xe3, 0x88, 0xe1, 0xda, 0x82, 0x37, 0x27, 0x8b, 0xf4, 0xf4, 0x7e, 0x05, 0x01, 0x5a, 0x8b, 0x88, 0xc5, 0x42, 0x0c, 0xeb, 0xc8, 0xbb, 0x37, 0xee, 0x43, 0x52, 0x83, 0x7a, 0xf7, 0x64, 0x70, 0x18, 0x41, 0x97 } -, - /* Encryption */ - 129, - { 0x04, 0xa2, 0x10, 0xf7, 0x6c, 0x0f, 0x84, 0x93, 0x99, 0x09, 0x53, 0x58, 0x98, 0x86, 0xf6, 0x2c, 0x1c, 0x48, 0x25, 0x01, 0x2a, 0xf4, 0x4b, 0xdc, 0xf2, 0xc9, 0x9b, 0x32, 0xa7, 0x0a, 0x17, 0xf7, 0x64, 0xa3, 0xa9, 0x7b, 0x2b, 0x04, 0x7e, 0x39, 0xd8, 0x0c, 0xde, 0x15, 0x4e, 0xbe, 0xd5, 0xd2, 0x81, 0x3e, 0xe8, 0x4a, 0xc9, 0xc8, 0xd6, 0xec, 0x6a, 0x96, 0xf4, 0x02, 0xdb, 0xb3, 0x26, 0xd5, 0xa6, 0xe9, 0xc0, 0xf7, 0x87, 0xc1, 0x5e, 0x98, 0x23, 0xc5, 0x08, 0xb3, 0x23, 0x5f, 0x3a, 0x00, 0x8d, 0xdd, 0xcd, 0xdb, 0x07, 0x9e, 0x80, 0xff, 0x50, 0xfe, 0x37, 0x25, 0x4a, 0x0c, 0xc4, 0x68, 0x29, 0x7e, 0xe3, 0x32, 0x53, 0xa7, 0x4c, 0x1e, 0x03, 0x70, 0x26, 0x05, 0x69, 0x58, 0xad, 0x07, 0x78, 0xe0, 0xaa, 0x12, 0x50, 0xdf, 0x1c, 0x14, 0x85, 0x7c, 0xb0, 0xd7, 0x1a, 0xa6, 0x93, 0x7e, 0x31 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.14", - /* Message */ - 17, - { 0xa6, 0xe3, 0xd1, 0x07, 0x03, 0x21, 0xd8, 0xff, 0x76, 0xb8, 0x5c, 0x70, 0x93, 0xfa, 0xa0, 0x42, 0x83 } -, - /* Seed */ - 109, - { 0xd1, 0x60, 0xb1, 0x2c, 0x76, 0x62, 0x2c, 0x3d, 0x34, 0xd8, 0x55, 0x87, 0xe6, 0xe8, 0x1c, 0xf0, 0x54, 0x61, 0x8a, 0x34, 0x6b, 0x67, 0x52, 0xd5, 0x36, 0x9a, 0x71, 0xc4, 0x92, 0x35, 0x7a, 0x13, 0x4b, 0x7f, 0x67, 0xf3, 0x34, 0xa4, 0xf3, 0xb3, 0x28, 0xba, 0xa9, 0xf0, 0x07, 0x18, 0x47, 0xd0, 0xda, 0xfd, 0xac, 0x22, 0x5d, 0x7b, 0x7f, 0x07, 0x16, 0x18, 0xea, 0x86, 0x81, 0xfc, 0xd2, 0xd2, 0x30, 0x5c, 0x2f, 0x64, 0x63, 0x1e, 0x62, 0x31, 0x85, 0xfc, 0x09, 0x96, 0xe6, 0x1c, 0x84, 0xf4, 0x18, 0x0c, 0x63, 0x7b, 0xf6, 0xea, 0x2d, 0x06, 0x03, 0x75, 0xf1, 0x6a, 0x65, 0xe5, 0xb1, 0xe2, 0xb8, 0x65, 0x28, 0x5d, 0xa3, 0xd8, 0xfb, 0x1b, 0x6a, 0x60, 0xea, 0x36, 0xe1 } -, - /* Encryption */ - 129, - { 0x0a, 0x70, 0x03, 0xb5, 0x86, 0x1a, 0x85, 0xa8, 0xf7, 0x2f, 0x19, 0x9d, 0xc6, 0x5c, 0x17, 0xfc, 0x58, 0xa9, 0x24, 0xbc, 0xc4, 0x08, 0x19, 0xe2, 0x8c, 0x95, 0x83, 0xe8, 0x21, 0x03, 0x8c, 0x00, 0x05, 0x36, 0x5e, 0x90, 0x9e, 0xee, 0x4f, 0x32, 0x66, 0xf5, 0x9a, 0x84, 0xe3, 0x25, 0xb1, 0xbe, 0xa9, 0xd2, 0x81, 0xb4, 0x82, 0x3f, 0x2f, 0xce, 0x44, 0x15, 0x3f, 0x03, 0x17, 0x0f, 0xad, 0xcb, 0x16, 0xa2, 0x79, 0xb2, 0xc9, 0x58, 0x7f, 0x6b, 0x79, 0xef, 0xfc, 0x55, 0xa3, 0xc4, 0x34, 0xe0, 0xbc, 0x5d, 0xaf, 0xe9, 0xd4, 0x03, 0x26, 0x48, 0xaa, 0xe7, 0xe4, 0xed, 0x1d, 0x7f, 0x14, 0x1b, 0xfe, 0x72, 0x26, 0x83, 0xfa, 0x32, 0xc8, 0x9d, 0xdd, 0x67, 0x3c, 0x3f, 0x0c, 0x03, 0xc8, 0x54, 0x59, 0x89, 0x0a, 0xb7, 0xfb, 0xc1, 0xd9, 0xa8, 0x14, 0xbf, 0xe9, 0xb0, 0xd1, 0x2a, 0xb1, 0x7f, 0x51 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.15", - /* Message */ - 40, - { 0xd0, 0xbc, 0x89, 0x03, 0x9b, 0xa1, 0x9e, 0xe5, 0x0a, 0x73, 0x82, 0x98, 0x4e, 0x42, 0x8a, 0xed, 0x88, 0x61, 0x4f, 0x78, 0x98, 0x13, 0x01, 0x89, 0x16, 0xe2, 0xe7, 0xeb, 0x0d, 0xb8, 0x3d, 0xa2, 0x8e, 0xc2, 0x3c, 0x04, 0xa0, 0xc2, 0xf7, 0x6a } -, - /* Seed */ - 86, - { 0xc6, 0x4d, 0x10, 0xa4, 0xb5, 0x2f, 0x49, 0x0a, 0xb6, 0x2a, 0x60, 0x38, 0xb3, 0x2b, 0x23, 0xc6, 0x3a, 0x1c, 0x85, 0x97, 0x0d, 0x93, 0x45, 0x14, 0x83, 0x94, 0xcd, 0x35, 0xcf, 0xd6, 0xf6, 0xb1, 0x59, 0x0f, 0xce, 0x8c, 0x67, 0x5b, 0xee, 0xf8, 0x7c, 0xd0, 0x34, 0x5e, 0x5c, 0xad, 0xe8, 0x95, 0x09, 0x45, 0x56, 0x54, 0x26, 0xb6, 0xb2, 0x83, 0x03, 0xb0, 0xb0, 0x39, 0x32, 0x98, 0xcd, 0xd9, 0x5c, 0x88, 0x1f, 0xa0, 0x65, 0x33, 0xca, 0x9d, 0x2d, 0x27, 0x14, 0xd0, 0xf1, 0x37, 0x85, 0xa6, 0x1b, 0x3a, 0x17, 0xa7, 0x81, 0x40 } -, - /* Encryption */ - 129, - { 0x00, 0x8b, 0x19, 0x75, 0x58, 0xca, 0x4c, 0xe5, 0x90, 0x14, 0x58, 0xab, 0xd8, 0xe8, 0xfd, 0x52, 0xd9, 0x89, 0x96, 0x0f, 0x01, 0xc2, 0x16, 0xef, 0xb5, 0x81, 0xf8, 0x61, 0x14, 0x8d, 0x1a, 0x2b, 0x44, 0xeb, 0x0b, 0x7c, 0x15, 0xdd, 0xc3, 0x45, 0xdc, 0x83, 0xf9, 0x03, 0x7d, 0xdb, 0x8f, 0xe2, 0xea, 0xa2, 0xcb, 0xed, 0x9b, 0x1c, 0x1e, 0xee, 0xae, 0xb8, 0x65, 0xbd, 0x29, 0xf4, 0x4e, 0xe1, 0x47, 0x8c, 0x95, 0xe9, 0xfb, 0xf4, 0x44, 0x82, 0x8e, 0xed, 0xcb, 0xc0, 0x17, 0x02, 0x00, 0xde, 0x35, 0x49, 0xb2, 0x2c, 0x11, 0xe4, 0xb4, 0x33, 0x79, 0x8b, 0x9d, 0x63, 0xbb, 0x49, 0xf0, 0xb0, 0x2d, 0xaf, 0x56, 0x58, 0xce, 0xed, 0xea, 0xa9, 0x3c, 0x0f, 0xae, 0xb9, 0x44, 0x65, 0x38, 0xba, 0x92, 0xeb, 0x17, 0xc8, 0x5d, 0xb5, 0xee, 0xa2, 0x04, 0xba, 0x2f, 0x49, 0xc3, 0xce, 0x65, 0xbf, 0x13 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.16", - /* Message */ - 43, - { 0xce, 0x0a, 0x4a, 0x59, 0x39, 0xf6, 0xaa, 0x26, 0x3b, 0xbf, 0x8e, 0x1e, 0x5e, 0x94, 0x31, 0x03, 0x56, 0xab, 0xa5, 0x75, 0x59, 0xc4, 0x1b, 0x39, 0x44, 0x27, 0x70, 0xb6, 0x1f, 0x6b, 0x3c, 0x9b, 0x5f, 0xe7, 0x27, 0xf3, 0x19, 0x52, 0x28, 0x08, 0xd5, 0x80, 0x19 } -, - /* Seed */ - 83, - { 0x27, 0xcc, 0xe2, 0xd4, 0x3c, 0x71, 0x31, 0x8e, 0xd4, 0xfc, 0x8c, 0x0b, 0xdb, 0x9b, 0x79, 0x13, 0x53, 0x19, 0x9f, 0x3d, 0x89, 0xfc, 0x12, 0xac, 0x47, 0xfd, 0xb6, 0xd8, 0x8b, 0x44, 0xc6, 0x54, 0x5e, 0x9e, 0xee, 0xd9, 0xf4, 0xc6, 0x85, 0x15, 0xd4, 0xf5, 0x30, 0xb8, 0x13, 0x7d, 0x77, 0x45, 0x71, 0x3b, 0xad, 0x0e, 0xbb, 0x70, 0x52, 0x23, 0x1f, 0x6b, 0x4c, 0xed, 0x18, 0x7a, 0xec, 0xd1, 0xe7, 0xa1, 0x69, 0xd8, 0x6c, 0xbd, 0x13, 0xd5, 0x0b, 0x78, 0xbe, 0x27, 0xc6, 0x54, 0x5d, 0x81, 0x92, 0xe0, 0xec } -, - /* Encryption */ - 129, - { 0x0a, 0xd3, 0xae, 0x7e, 0x5a, 0x98, 0x65, 0x2c, 0x1b, 0xf3, 0x45, 0xc4, 0x91, 0x90, 0x3f, 0x55, 0x17, 0xc6, 0x11, 0xac, 0x31, 0x00, 0x05, 0x87, 0x7f, 0xa9, 0x1a, 0xbc, 0xee, 0x64, 0x85, 0xf2, 0x77, 0x8a, 0xbf, 0x0a, 0x6c, 0x73, 0x87, 0x87, 0x37, 0x63, 0x9b, 0x26, 0x72, 0xfd, 0xd0, 0x0a, 0x39, 0x65, 0xd7, 0xd3, 0xd8, 0xd7, 0x68, 0x8e, 0x77, 0xb5, 0x45, 0x9e, 0x14, 0x5e, 0xce, 0x64, 0xa9, 0xa5, 0x2c, 0x37, 0x97, 0xf3, 0x61, 0x07, 0xc9, 0x36, 0x8b, 0xdf, 0x79, 0x90, 0xf3, 0xfb, 0x6c, 0x5c, 0xff, 0x59, 0xf4, 0xf8, 0xa3, 0xd4, 0x90, 0x93, 0xdf, 0xfe, 0x74, 0x06, 0xc9, 0x10, 0xaa, 0x57, 0x23, 0x22, 0x8d, 0xae, 0x5a, 0x9b, 0x29, 0xa4, 0xcc, 0x47, 0x69, 0xaf, 0x8b, 0xd5, 0xfd, 0x6e, 0xce, 0x88, 0x58, 0xa2, 0x9d, 0xb1, 0xb1, 0x9c, 0x08, 0x1b, 0xf0, 0xd6, 0xb0, 0xdc, 0x78 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.17", - /* Message */ - 40, - { 0x03, 0xbf, 0xb2, 0x59, 0xbd, 0x92, 0x46, 0xde, 0x3f, 0x71, 0xc3, 0x13, 0x9c, 0x72, 0x85, 0x74, 0xb4, 0x4d, 0x97, 0xad, 0x57, 0xbb, 0xdd, 0x67, 0x01, 0x94, 0x95, 0xc2, 0xa2, 0x00, 0x41, 0x39, 0x26, 0x34, 0xe3, 0x1a, 0xad, 0x63, 0xf6, 0x3b } -, - /* Seed */ - 86, - { 0x5f, 0xa4, 0xbb, 0xb7, 0x0e, 0x1f, 0x9e, 0xcb, 0x5e, 0xb2, 0x14, 0x7b, 0xf4, 0x59, 0xd1, 0xd0, 0x64, 0x43, 0xf0, 0x25, 0xc0, 0x8e, 0x36, 0x4c, 0xcc, 0x1b, 0x16, 0x0c, 0x16, 0x41, 0x6f, 0xb1, 0x74, 0xb4, 0x4b, 0x95, 0x36, 0x38, 0xa9, 0x68, 0x8c, 0x5e, 0xa2, 0xd0, 0x60, 0x17, 0x1f, 0x30, 0x54, 0xf3, 0xca, 0x3f, 0xe0, 0x13, 0xb9, 0xe3, 0x18, 0x8e, 0xe3, 0x9d, 0xa9, 0x1f, 0x80, 0x16, 0xd4, 0xb7, 0x33, 0x18, 0x79, 0x35, 0x1f, 0x32, 0x2a, 0xe5, 0x29, 0x86, 0x4d, 0x90, 0x74, 0x09, 0x8a, 0xa2, 0x51, 0x6b, 0x44, 0xca } -, - /* Encryption */ - 129, - { 0x01, 0x78, 0xe3, 0xa0, 0x17, 0xed, 0x2f, 0xc1, 0x18, 0xbb, 0x2e, 0x03, 0x28, 0xbe, 0xb2, 0x8a, 0x98, 0xc8, 0x53, 0xb9, 0xe5, 0xa5, 0xf8, 0x30, 0x80, 0xc0, 0xf1, 0x01, 0x7f, 0xdc, 0xa8, 0x37, 0x92, 0x07, 0x72, 0x2c, 0x25, 0x73, 0x7a, 0x89, 0x15, 0xe0, 0xeb, 0x72, 0xc5, 0x22, 0x85, 0xe8, 0x8f, 0x61, 0x30, 0xa1, 0xcf, 0x56, 0xad, 0x1d, 0x96, 0xca, 0x2c, 0xe4, 0xb7, 0x1e, 0xc3, 0x68, 0x94, 0x7b, 0xd0, 0x71, 0xf8, 0x36, 0x59, 0x10, 0xc7, 0x92, 0x57, 0x5b, 0x8c, 0xd6, 0xfd, 0x27, 0xe5, 0x23, 0xe8, 0x59, 0x65, 0xdd, 0xa9, 0x22, 0x82, 0xd5, 0xdf, 0xd1, 0xc0, 0x64, 0xea, 0xab, 0x6a, 0xbe, 0xac, 0x65, 0xe1, 0x6a, 0xe0, 0x4f, 0x0d, 0x40, 0xb3, 0xbb, 0x68, 0x41, 0x0b, 0x92, 0x74, 0xdf, 0xee, 0xa3, 0x2a, 0x43, 0xf9, 0x40, 0x83, 0xc1, 0x07, 0x80, 0x35, 0x3f, 0x43, 0xe4, 0x3c } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.18", - /* Message */ - 37, - { 0x16, 0x2c, 0xca, 0x9e, 0xd4, 0x70, 0x8d, 0xd1, 0x03, 0x40, 0xe1, 0x94, 0xc3, 0x5c, 0x0a, 0x5f, 0xa4, 0x9a, 0x5c, 0x3b, 0x5b, 0x24, 0x71, 0x71, 0x20, 0x3c, 0xa4, 0x8a, 0x79, 0xe5, 0x2d, 0xff, 0x40, 0xf2, 0xbc, 0xa9, 0x9a } -, - /* Seed */ - 89, - { 0x4d, 0x73, 0xff, 0xcd, 0xc2, 0x69, 0x43, 0xa8, 0x70, 0x78, 0x23, 0x47, 0x8d, 0xa3, 0x1a, 0xac, 0x01, 0x27, 0x4b, 0x17, 0x17, 0xc5, 0x0c, 0x6a, 0xd0, 0xc6, 0x2e, 0xe2, 0xbc, 0xd5, 0x57, 0x95, 0x2e, 0xf1, 0x3f, 0x15, 0xff, 0xaf, 0x66, 0xbb, 0x4f, 0x45, 0x39, 0x99, 0x11, 0xc6, 0xd6, 0x5a, 0xd1, 0x87, 0x57, 0x2b, 0xc1, 0xeb, 0xa0, 0xd2, 0x86, 0xcc, 0x45, 0xaa, 0x49, 0x32, 0xe7, 0x3e, 0x47, 0x0c, 0x5d, 0xc8, 0x29, 0x39, 0x04, 0x02, 0x5c, 0x86, 0x3f, 0xbc, 0x96, 0x22, 0x37, 0x04, 0x90, 0xc9, 0x1c, 0x87, 0x40, 0xb0, 0x94, 0xd8, 0xf0 } -, - /* Encryption */ - 129, - { 0x04, 0x2b, 0xce, 0x0d, 0xfc, 0xec, 0xa9, 0xff, 0x05, 0xa6, 0xe3, 0xf7, 0x4a, 0x6a, 0x70, 0xcd, 0xcb, 0xe0, 0xde, 0xc8, 0x1e, 0xdd, 0xc8, 0x8e, 0x46, 0x7f, 0x47, 0xbb, 0x76, 0x0d, 0xa4, 0x4c, 0x79, 0x4d, 0x3c, 0xdc, 0xab, 0x93, 0x92, 0x49, 0xf8, 0x49, 0xd1, 0xd4, 0x39, 0x56, 0x64, 0x1b, 0x0b, 0x79, 0xc6, 0x86, 0x1c, 0x5f, 0x71, 0x5b, 0x9d, 0x8d, 0x8b, 0xe9, 0xf0, 0x76, 0x6a, 0xdb, 0x3f, 0x18, 0xaf, 0x7d, 0xb3, 0x6a, 0xd9, 0x5f, 0xfc, 0xd7, 0xe0, 0xfa, 0xc1, 0x62, 0x85, 0x23, 0xe8, 0xf6, 0x9a, 0xde, 0xb7, 0xff, 0x50, 0x94, 0xa2, 0xb5, 0xbf, 0x92, 0xb9, 0xd0, 0xef, 0xb1, 0x11, 0x8b, 0x85, 0x39, 0x26, 0x25, 0xfd, 0x56, 0xf8, 0x8f, 0xaa, 0x0a, 0x16, 0xd5, 0x47, 0x30, 0xfb, 0xc5, 0xca, 0xf1, 0x66, 0x82, 0xe9, 0xe4, 0x1b, 0x7e, 0x79, 0xd2, 0x02, 0x2f, 0x7c, 0xcf, 0x96 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.19", - /* Message */ - 58, - { 0x8e, 0x1b, 0x52, 0xcb, 0x4e, 0x00, 0x77, 0x27, 0xc4, 0xb5, 0xf6, 0x5d, 0x78, 0x47, 0xf3, 0x49, 0x16, 0x89, 0x1e, 0xf9, 0xc7, 0x3a, 0xd1, 0x8c, 0xf2, 0x71, 0xf8, 0x9f, 0x18, 0x2c, 0x69, 0x3e, 0x52, 0x89, 0xdc, 0x31, 0xda, 0xbc, 0x34, 0xcf, 0x7f, 0x44, 0xfb, 0xde, 0x57, 0x9e, 0x64, 0x51, 0x69, 0xec, 0xba, 0x6e, 0x4e, 0x87, 0x7f, 0x7d, 0xef, 0x44 } -, - /* Seed */ - 68, - { 0xba, 0x14, 0x74, 0x8e, 0x6d, 0xa7, 0xb6, 0xac, 0x18, 0x33, 0x32, 0x32, 0x95, 0xad, 0xb5, 0x42, 0x2d, 0xbd, 0x19, 0xe2, 0xec, 0x72, 0xdf, 0xd0, 0xaa, 0xfd, 0x7b, 0xd0, 0x7b, 0xfb, 0x97, 0xe7, 0xdb, 0x10, 0x8a, 0x3e, 0xaa, 0xdc, 0xff, 0x67, 0xb6, 0x7e, 0xc7, 0xe4, 0xc6, 0x70, 0x04, 0xc1, 0x78, 0x34, 0x6a, 0x12, 0x5d, 0xd3, 0xb6, 0xca, 0x55, 0x23, 0x70, 0x59, 0x4f, 0x7f, 0x42, 0xcb, 0x33, 0x4b, 0x44, 0x85 } -, - /* Encryption */ - 129, - { 0x09, 0x4b, 0x40, 0x30, 0xe3, 0x0c, 0x8b, 0x46, 0x2e, 0xca, 0x00, 0xf1, 0x6b, 0xb1, 0x70, 0x19, 0xd1, 0xea, 0x31, 0x25, 0xf1, 0xc6, 0x4c, 0x67, 0x1c, 0xb0, 0x0d, 0x46, 0xe3, 0xad, 0x87, 0x84, 0x28, 0x52, 0xb2, 0x01, 0x49, 0x6e, 0xe2, 0xb3, 0xd5, 0x42, 0x28, 0x93, 0xa8, 0x0c, 0x66, 0xa3, 0x0d, 0xa2, 0xc9, 0xf1, 0xa3, 0x2a, 0xd4, 0xd4, 0xe7, 0x73, 0x77, 0x43, 0xca, 0x1b, 0x78, 0xef, 0x7d, 0x4a, 0x63, 0xc5, 0xe1, 0xe0, 0xbe, 0x7e, 0x51, 0x88, 0xcc, 0xe9, 0x42, 0x95, 0x69, 0x74, 0xff, 0xd4, 0x81, 0xe6, 0x47, 0x83, 0x44, 0x23, 0x0c, 0x37, 0xda, 0x5b, 0x25, 0xf6, 0xb5, 0x99, 0xa5, 0x9a, 0x05, 0x80, 0xf1, 0xa0, 0x00, 0xc2, 0x59, 0x54, 0xf3, 0xa4, 0x63, 0xf2, 0x89, 0x5f, 0x32, 0xb0, 0x5c, 0xc0, 0x88, 0x21, 0xb1, 0xa0, 0x23, 0x60, 0x9f, 0x18, 0xca, 0x7d, 0x44, 0x9c, 0xb4 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 10.20", - /* Message */ - 12, - { 0x82, 0xff, 0x62, 0xaf, 0xfa, 0xd8, 0x00, 0x30, 0x94, 0xcc, 0x65, 0x35 } -, - /* Seed */ - 114, - { 0x1c, 0x7f, 0x21, 0xfd, 0x02, 0x09, 0x79, 0x07, 0x40, 0x5e, 0xaa, 0x77, 0xae, 0x72, 0x88, 0x65, 0x72, 0x1d, 0x93, 0x86, 0xf5, 0xaa, 0xbc, 0x2e, 0x0a, 0x95, 0xf3, 0xed, 0xb0, 0x5d, 0x46, 0xe2, 0x33, 0x79, 0x3b, 0xa1, 0xa3, 0x88, 0xe4, 0xb0, 0xdd, 0xa0, 0x0c, 0xc3, 0x2b, 0x94, 0x8a, 0xc2, 0x65, 0xae, 0x6a, 0x2b, 0xf2, 0xc3, 0x90, 0xa4, 0xdc, 0xce, 0x11, 0x0d, 0x5e, 0x86, 0x64, 0x47, 0x28, 0xf5, 0x37, 0x81, 0x36, 0x47, 0x6c, 0xf7, 0x1d, 0xc7, 0xba, 0xac, 0x50, 0xcc, 0x41, 0xc2, 0x01, 0x48, 0xdd, 0x37, 0xd5, 0xf7, 0x0a, 0x81, 0x2a, 0x29, 0x4e, 0x24, 0x2d, 0xe8, 0x03, 0xb4, 0x8b, 0x63, 0x40, 0xf4, 0x28, 0xd3, 0xc9, 0xbc, 0xa9, 0x6f, 0x76, 0x6f, 0xc4, 0xf4, 0x41, 0x67, 0xe0, 0x4a } -, - /* Encryption */ - 129, - { 0x00, 0x30, 0x3c, 0x35, 0x2e, 0x1f, 0xdd, 0x2a, 0xf8, 0xa8, 0xe3, 0xa1, 0x69, 0xb5, 0xda, 0xc5, 0x43, 0x45, 0xca, 0xa3, 0x35, 0xa7, 0x1a, 0x37, 0xe9, 0x38, 0xbf, 0x98, 0x47, 0x08, 0x86, 0x56, 0x84, 0x18, 0xae, 0x98, 0xd0, 0xaa, 0xdf, 0xe7, 0x9d, 0x0c, 0x65, 0x1b, 0x3f, 0x51, 0x6e, 0x70, 0xf1, 0x01, 0x74, 0xfe, 0x63, 0x22, 0xcd, 0x37, 0x6d, 0xa0, 0x2f, 0x22, 0x6d, 0x15, 0xb3, 0x6a, 0xbf, 0x6d, 0x1c, 0xbd, 0xab, 0x6d, 0xd5, 0x65, 0x4d, 0x99, 0x25, 0xf7, 0x25, 0x3c, 0xe9, 0x91, 0x51, 0x2a, 0x44, 0xe9, 0xfa, 0x15, 0x27, 0x12, 0xd7, 0xb8, 0xdb, 0x7f, 0x18, 0x33, 0x75, 0x80, 0xfe, 0x51, 0xdc, 0x32, 0xa0, 0x58, 0x2c, 0xe2, 0x60, 0x53, 0xf1, 0xb9, 0x49, 0x28, 0x69, 0xb9, 0xc4, 0x7d, 0xf9, 0x28, 0x39, 0xc0, 0x50, 0x2f, 0x2d, 0xb4, 0xcc, 0x4d, 0x0b, 0x20, 0x4f, 0x6f, 0xd1 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 11: A 1029-bit RSA key pair", -{ - /* Modulus */ - 129, - { 0x11, 0x65, 0x47, 0x94, 0xf4, 0x64, 0x9a, 0x97, 0xac, 0x87, 0xef, 0x67, 0x94, 0xf6, 0xa6, 0xff, 0xb5, 0xcd, 0xab, 0x87, 0x02, 0xc2, 0x32, 0x54, 0xfd, 0xe0, 0x34, 0xf3, 0x12, 0x9a, 0xad, 0x82, 0x5c, 0xf3, 0xc0, 0xcc, 0x38, 0x80, 0xa9, 0x6f, 0xb6, 0x4e, 0x48, 0xd7, 0x59, 0x5e, 0xde, 0x06, 0xc3, 0x1d, 0x0a, 0xcb, 0xd1, 0xf8, 0xef, 0x9c, 0xd1, 0xf9, 0xf6, 0xf0, 0x0b, 0x24, 0xba, 0x53, 0x45, 0xab, 0xa1, 0x46, 0xd4, 0x1c, 0x56, 0x3b, 0xae, 0xce, 0x3b, 0x25, 0x23, 0xdf, 0x6a, 0x9f, 0x43, 0x01, 0x8a, 0x5f, 0x08, 0x69, 0xb6, 0xec, 0x99, 0x34, 0x69, 0x88, 0x6b, 0x5d, 0x23, 0x17, 0xd5, 0x9c, 0xff, 0xd4, 0xed, 0xe9, 0x46, 0x6a, 0x03, 0xf6, 0xdf, 0xec, 0x17, 0x5c, 0xad, 0x5a, 0x85, 0x44, 0x30, 0x95, 0xc7, 0x30, 0xb9, 0x8b, 0xbf, 0xa0, 0x48, 0x9b, 0x91, 0xbb, 0x27, 0x39, 0x9d } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x1d, 0x4c, 0x4c, 0x6e, 0x13, 0xda, 0xb2, 0x84, 0x6c, 0xe6, 0x85, 0xd0, 0xc4, 0x93, 0x52, 0x5b, 0xb0, 0xad, 0x35, 0x62, 0x59, 0x6d, 0xb9, 0xad, 0x16, 0x94, 0x5d, 0x44, 0x5c, 0xe6, 0x7c, 0x54, 0xe9, 0x38, 0xf6, 0x54, 0x54, 0x2b, 0x09, 0x34, 0x48, 0x02, 0x91, 0xac, 0x21, 0xae, 0xd0, 0x98, 0xe8, 0x5a, 0xd6, 0xfe, 0xc6, 0xd0, 0xfe, 0x15, 0x4c, 0x3c, 0x34, 0x2b, 0x16, 0x99, 0x9a, 0x8c, 0xec, 0xe7, 0xfa, 0xf9, 0x90, 0xb7, 0xc8, 0xce, 0x87, 0xb6, 0x6f, 0xe3, 0x27, 0xfb, 0x35, 0x2e, 0xd0, 0x11, 0x32, 0x3d, 0x2b, 0x81, 0x9a, 0x36, 0xca, 0xbe, 0xcc, 0x5a, 0xae, 0x72, 0x30, 0xd3, 0xf8, 0xe0, 0x02, 0x45, 0xaf, 0x35, 0xaf, 0x80, 0x88, 0x62, 0xe5, 0x4d, 0x92, 0x56, 0x07, 0xee, 0x8b, 0x58, 0xe6, 0xa9, 0xf3, 0xad, 0x8f, 0xa7, 0x28, 0xfc, 0xe2, 0x68, 0x56, 0xc3, 0x67, 0xb1 } -, - /* Prime 1 */ - 65, - { 0x04, 0x41, 0x0a, 0xb5, 0x54, 0x60, 0x2d, 0x7e, 0xfb, 0x0c, 0xce, 0x92, 0x71, 0xa5, 0x22, 0x20, 0xf2, 0x52, 0x50, 0x02, 0x34, 0xb3, 0x82, 0x02, 0xfa, 0xfc, 0x94, 0xaa, 0x26, 0xb4, 0xfb, 0x04, 0xe5, 0xf5, 0x08, 0x74, 0x9a, 0x44, 0xef, 0xb8, 0x9b, 0x75, 0x78, 0xdb, 0x00, 0x7e, 0x03, 0x06, 0x23, 0x89, 0x48, 0x69, 0x12, 0x80, 0xf7, 0x3c, 0x12, 0x7a, 0x49, 0x30, 0xb4, 0x63, 0x39, 0xba, 0xd9 } -, - /* Prime 2 */ - 65, - { 0x04, 0x16, 0xd3, 0xfd, 0xed, 0x8f, 0x9e, 0x7b, 0x01, 0x9f, 0x67, 0x12, 0x32, 0x0e, 0xec, 0x11, 0xd8, 0xcc, 0x83, 0x81, 0xea, 0x86, 0x26, 0x6e, 0xe0, 0x3f, 0x00, 0x72, 0xe9, 0xa2, 0xfc, 0xdd, 0x80, 0x81, 0xae, 0x74, 0xfe, 0x27, 0x88, 0x70, 0xf4, 0xfd, 0xa2, 0xa0, 0x00, 0x6c, 0x4f, 0x54, 0x23, 0x9e, 0x24, 0xa1, 0x5d, 0x1a, 0xeb, 0xc6, 0x7d, 0x90, 0xd8, 0x18, 0x4d, 0x29, 0x5f, 0x52, 0x65 } -, - /* Prime exponent 1 */ - 65, - { 0x04, 0x06, 0x7b, 0x98, 0x7b, 0x5f, 0x8a, 0x8d, 0x56, 0x06, 0x97, 0x4d, 0x11, 0x06, 0x1d, 0x96, 0x29, 0x55, 0x63, 0xe9, 0xc2, 0x6e, 0x7d, 0x3e, 0x4e, 0xba, 0x43, 0xfe, 0x01, 0x24, 0x4d, 0x46, 0x24, 0x46, 0x49, 0x1a, 0xf4, 0x82, 0xf8, 0x86, 0xa9, 0x6b, 0x6d, 0xd1, 0x64, 0xd4, 0xd8, 0x0d, 0xae, 0x00, 0x90, 0x29, 0x04, 0x5e, 0x4e, 0x13, 0x64, 0xb4, 0x9b, 0x9e, 0xdf, 0x81, 0xe8, 0xb5, 0x79 } -, - /* Prime exponent 2 */ - 64, - { 0xe1, 0x38, 0x72, 0xe5, 0x6d, 0x84, 0xd7, 0x4a, 0x1e, 0x15, 0x7a, 0xe0, 0xb2, 0x3d, 0x30, 0x09, 0xc8, 0xd6, 0x72, 0x59, 0x16, 0xcb, 0xa6, 0x07, 0x31, 0x06, 0xd3, 0xb2, 0x58, 0x92, 0xb6, 0xc5, 0x33, 0x21, 0x69, 0xa2, 0x54, 0xb7, 0x12, 0x36, 0x63, 0x6b, 0x5d, 0xa9, 0x39, 0xa4, 0x47, 0xa1, 0xf2, 0x20, 0x47, 0x67, 0x54, 0xa7, 0x6d, 0x69, 0x0e, 0x84, 0xaf, 0x95, 0xca, 0x54, 0xeb, 0xd1 } -, - /* Coefficient */ - 65, - { 0x02, 0x51, 0x37, 0xae, 0x5d, 0x25, 0xfe, 0x1d, 0xaf, 0x9b, 0x38, 0x32, 0xf8, 0x07, 0x56, 0xb8, 0x6d, 0xb5, 0xca, 0x0e, 0x37, 0x2e, 0x51, 0x63, 0x03, 0x4e, 0xa3, 0x39, 0x1f, 0x5e, 0x54, 0x58, 0x2a, 0x1d, 0xd0, 0x47, 0x58, 0xb9, 0x92, 0xa5, 0xa8, 0xe4, 0x6e, 0xe1, 0x6f, 0x8a, 0xd3, 0x8c, 0xa6, 0x52, 0x27, 0x45, 0xaa, 0x7d, 0xf5, 0x1d, 0xf8, 0x9f, 0xc2, 0x21, 0x08, 0x01, 0x0e, 0x00, 0x4e } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 11.1", - /* Message */ - 15, - { 0x4e, 0xa8, 0xdf, 0xda, 0x3a, 0x9c, 0x26, 0x70, 0xca, 0x9b, 0x80, 0xfa, 0x89, 0x71, 0x0a } -, - /* Seed */ - 111, - { 0x96, 0x06, 0x42, 0x1b, 0x97, 0x3a, 0xb4, 0xba, 0x2a, 0xe2, 0x2f, 0xf5, 0x38, 0x70, 0x7d, 0x7d, 0x4e, 0x56, 0x3e, 0x8f, 0x05, 0xf2, 0x0b, 0xc3, 0x38, 0x1f, 0xf4, 0x5b, 0x0c, 0x29, 0x19, 0xa1, 0xb3, 0x46, 0xb0, 0x76, 0x03, 0x5a, 0xe7, 0x74, 0xb3, 0x2a, 0xf8, 0xee, 0x56, 0x6c, 0x73, 0xe2, 0x09, 0x49, 0x68, 0x4e, 0x44, 0x74, 0x80, 0xdf, 0xa3, 0x4d, 0xbb, 0x0c, 0x22, 0x66, 0x61, 0x50, 0x90, 0x9a, 0x59, 0xe1, 0xbb, 0x22, 0xd0, 0x95, 0xab, 0xe5, 0x02, 0x5a, 0x76, 0xd6, 0x0e, 0xc1, 0x01, 0xc7, 0x80, 0xe8, 0x3a, 0x0f, 0xf1, 0x59, 0x46, 0x5c, 0x3e, 0x7a, 0xc0, 0x21, 0x2b, 0xb3, 0x8b, 0x2f, 0x1e, 0x0e, 0x6e, 0x0b, 0x54, 0xd3, 0x5f, 0x4c, 0x76, 0x04, 0xc2, 0xd0, 0x93 } -, - /* Encryption */ - 129, - { 0x09, 0xbb, 0xcd, 0x8b, 0x63, 0xb2, 0x9c, 0xe9, 0x52, 0x26, 0xec, 0x1d, 0x51, 0x91, 0x2a, 0xf3, 0x97, 0x89, 0xfc, 0xe5, 0xe7, 0x7e, 0x7b, 0xe6, 0x78, 0x96, 0xc2, 0xc4, 0xe4, 0xc4, 0x37, 0x6f, 0xa4, 0x28, 0xec, 0x5d, 0x8a, 0x49, 0x7a, 0xcc, 0xa9, 0xe0, 0x82, 0x1e, 0x1f, 0x6d, 0xe1, 0x06, 0x78, 0x19, 0xc4, 0x8a, 0x51, 0x6f, 0x06, 0x91, 0xcb, 0xea, 0xcb, 0xb1, 0x9d, 0x1b, 0xa5, 0x09, 0xf0, 0x4f, 0xc0, 0x13, 0x36, 0xd9, 0x0f, 0x73, 0x96, 0xb4, 0x3a, 0xa2, 0xf2, 0xb5, 0x15, 0x0c, 0x28, 0xa4, 0x5f, 0x35, 0xa9, 0xde, 0x1a, 0x29, 0x73, 0xea, 0x10, 0x28, 0x67, 0x94, 0x94, 0x0a, 0xb7, 0x9f, 0x12, 0x9e, 0x31, 0x8c, 0xf9, 0x7a, 0x5f, 0xd7, 0x2b, 0x04, 0x5b, 0x46, 0x6d, 0x66, 0x6e, 0x5d, 0xe0, 0xb7, 0x14, 0xf2, 0x12, 0xa0, 0xb9, 0x05, 0x2a, 0x0c, 0x91, 0x44, 0x8e, 0x52, 0x0d } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 11.2", - /* Message */ - 27, - { 0xc6, 0xe2, 0x57, 0xf3, 0xa1, 0xb3, 0x5b, 0xbd, 0xc5, 0xcf, 0x42, 0x0b, 0xd7, 0x65, 0x4c, 0x52, 0xb2, 0x52, 0xdf, 0x32, 0xc5, 0x70, 0xd4, 0x28, 0xe6, 0x3e, 0xa2 } -, - /* Seed */ - 99, - { 0x77, 0xbb, 0xd7, 0x2b, 0x7b, 0x8f, 0xd2, 0x85, 0x02, 0xec, 0xf7, 0x9f, 0xd1, 0xc8, 0xaf, 0x8e, 0xbf, 0xe2, 0x44, 0x32, 0x70, 0x93, 0xb8, 0x24, 0x79, 0x5e, 0x95, 0xc0, 0xb4, 0x36, 0xeb, 0x41, 0xe5, 0xf0, 0xf2, 0xae, 0xc4, 0x33, 0x63, 0xaa, 0x2c, 0x08, 0xfc, 0x33, 0xf2, 0x87, 0xe6, 0x53, 0x80, 0x40, 0xe4, 0x28, 0x0d, 0xba, 0x47, 0x23, 0xe5, 0x32, 0x92, 0xe0, 0xa6, 0x7b, 0x21, 0xef, 0x77, 0x70, 0x79, 0x85, 0xb7, 0x2b, 0x2e, 0xca, 0xde, 0x28, 0x0a, 0x61, 0xfa, 0x73, 0xd7, 0x3d, 0xbb, 0x2f, 0xdb, 0x17, 0xf7, 0x75, 0xf4, 0x5f, 0xa1, 0x75, 0xb7, 0x7c, 0xb1, 0x06, 0x7d, 0x6f, 0x93, 0xa4, 0x37 } -, - /* Encryption */ - 129, - { 0x0d, 0x21, 0x49, 0x5c, 0x49, 0x28, 0xc2, 0x6a, 0x92, 0xc1, 0x6a, 0x90, 0x7f, 0x08, 0x33, 0x35, 0xad, 0xe8, 0xeb, 0x0c, 0x20, 0xb0, 0xb4, 0x5f, 0xe0, 0xe0, 0x8e, 0xf3, 0x9a, 0xe2, 0x4e, 0xc0, 0xb5, 0x05, 0x7e, 0x60, 0x78, 0xdd, 0x7a, 0x1b, 0x9d, 0x10, 0x2c, 0x24, 0x81, 0x85, 0x57, 0xe9, 0x0b, 0x83, 0xff, 0xda, 0x14, 0xf3, 0xcc, 0x37, 0x3c, 0x84, 0xc1, 0x05, 0xce, 0xee, 0x71, 0xbc, 0x73, 0x1a, 0x7f, 0x35, 0x71, 0xbd, 0x7b, 0xbb, 0xa1, 0xd4, 0xf2, 0x3f, 0xf4, 0xdf, 0x0a, 0x84, 0xf3, 0x12, 0x99, 0x0f, 0xf7, 0x71, 0xff, 0x11, 0x8f, 0x05, 0xbc, 0xfa, 0x22, 0x2f, 0x11, 0xc1, 0xea, 0x01, 0xf6, 0xa4, 0x68, 0xca, 0x5a, 0x87, 0x50, 0x80, 0x40, 0x98, 0xf8, 0x46, 0xa8, 0x64, 0x30, 0xea, 0x23, 0xe9, 0xf0, 0x7e, 0x23, 0x48, 0x46, 0x1e, 0xf0, 0x0b, 0xa6, 0x25, 0x34, 0xfc, 0xe7 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.3", - /* Message */ - 41, - { 0x2d, 0x30, 0x7f, 0x44, 0xdd, 0xff, 0x9c, 0x45, 0x35, 0xa0, 0x6e, 0xda, 0x01, 0x4a, 0x19, 0x13, 0x04, 0xfb, 0x3f, 0xa8, 0xe3, 0xa2, 0xbe, 0x88, 0xbb, 0x3b, 0x7b, 0xe9, 0x9f, 0x94, 0xd1, 0x33, 0x9c, 0x21, 0x9a, 0x51, 0xff, 0x5c, 0xad, 0xda, 0x93 } -, - /* Seed */ - 85, - { 0x5f, 0xab, 0x24, 0x2d, 0xd9, 0xf2, 0x92, 0x4b, 0x20, 0xd3, 0x78, 0xa8, 0x87, 0xb5, 0xde, 0x21, 0xd1, 0x95, 0x76, 0x9c, 0x3b, 0x53, 0x71, 0xc0, 0x0f, 0x4c, 0x3f, 0x1b, 0x63, 0x26, 0x8b, 0x01, 0x0c, 0x31, 0xf3, 0x2b, 0xb8, 0x7c, 0x9a, 0x52, 0x29, 0xe0, 0xd9, 0x30, 0x5f, 0x5f, 0xc8, 0x3b, 0x89, 0x34, 0xb9, 0x98, 0xd8, 0xce, 0xdf, 0x91, 0x6f, 0x7a, 0x4d, 0x72, 0x68, 0xfe, 0x3b, 0xe5, 0x12, 0x35, 0xf8, 0xbe, 0xac, 0x80, 0x0d, 0x4f, 0xff, 0xca, 0x6f, 0xfd, 0xdb, 0x29, 0xda, 0x4f, 0xa1, 0xc7, 0x76, 0x9d, 0x51 } -, - /* Encryption */ - 129, - { 0x0f, 0xaf, 0xb6, 0x1c, 0x37, 0x16, 0xc7, 0x96, 0x69, 0xfc, 0xd1, 0x64, 0x52, 0x46, 0xa0, 0xd3, 0xb0, 0x75, 0xb2, 0x8b, 0x73, 0x82, 0x20, 0x15, 0xa8, 0xca, 0xdc, 0x88, 0xa2, 0x2b, 0x7d, 0xa5, 0x39, 0x43, 0xe2, 0x54, 0x4d, 0xe3, 0x96, 0xbe, 0xee, 0xd3, 0xb0, 0xa9, 0x89, 0xad, 0x20, 0xa7, 0x3d, 0xdc, 0xd1, 0x91, 0xe8, 0xaa, 0x5c, 0xae, 0xb6, 0xe9, 0x08, 0x8a, 0x4a, 0x3a, 0xe8, 0x40, 0x67, 0xf9, 0x19, 0x8e, 0x92, 0x4a, 0x9c, 0xfe, 0x14, 0x50, 0xb0, 0x18, 0xa6, 0xb6, 0x9d, 0xd2, 0x37, 0x58, 0xe9, 0x25, 0x1c, 0x76, 0xcc, 0xea, 0xe8, 0x40, 0xda, 0x2c, 0xc6, 0x25, 0x17, 0x39, 0xe2, 0x3b, 0x9a, 0x42, 0xb6, 0x34, 0x46, 0xec, 0xa0, 0xd6, 0x15, 0x99, 0xa1, 0x46, 0xb7, 0x41, 0xfd, 0x43, 0x51, 0x1c, 0x73, 0x66, 0x3a, 0x92, 0x3e, 0x37, 0x57, 0xf1, 0x8a, 0x17, 0x1c, 0x3b, 0x12 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.4", - /* Message */ - 10, - { 0x1f, 0x03, 0x33, 0x88, 0x55, 0x4b, 0xeb, 0xfa, 0xa0, 0x1c } -, - /* Seed */ - 116, - { 0x9d, 0x81, 0x57, 0x56, 0x74, 0x66, 0x3b, 0x3d, 0x87, 0x7d, 0x4b, 0x0a, 0xa4, 0xfd, 0xc6, 0x05, 0x47, 0x0a, 0xbc, 0x55, 0x0b, 0x53, 0x52, 0x72, 0xc8, 0x23, 0x70, 0x18, 0x86, 0x7c, 0x50, 0x22, 0xca, 0xfe, 0x6a, 0x4a, 0xc8, 0x37, 0x37, 0xe9, 0x9c, 0x6e, 0xba, 0xfe, 0x69, 0xca, 0xa7, 0xfd, 0xca, 0x70, 0x27, 0xc8, 0xfb, 0xc4, 0x37, 0xec, 0x52, 0x32, 0xce, 0x2e, 0x25, 0x29, 0xa0, 0xf7, 0x03, 0xe2, 0x01, 0xf7, 0xe5, 0x10, 0x32, 0x35, 0xba, 0x65, 0xa6, 0x47, 0x94, 0xf1, 0x90, 0xef, 0x42, 0x54, 0x93, 0xb6, 0x48, 0xed, 0x24, 0xa2, 0x19, 0x7d, 0x0a, 0xb0, 0x4d, 0x81, 0xc7, 0xb3, 0x35, 0xa2, 0xda, 0xfd, 0x6b, 0x59, 0xc9, 0x43, 0xa0, 0x9b, 0x48, 0xea, 0xc3, 0x5e, 0x35, 0x59, 0x62, 0x91, 0xf5, 0xf7 } -, - /* Encryption */ - 129, - { 0x00, 0x1b, 0xdf, 0x33, 0x93, 0x34, 0x2c, 0x38, 0x13, 0xee, 0x3b, 0x87, 0x07, 0xea, 0xf5, 0x46, 0x47, 0xba, 0xde, 0x4c, 0x71, 0x8a, 0x4b, 0x64, 0x54, 0x78, 0x12, 0xe0, 0x10, 0xc2, 0xb7, 0x46, 0xc8, 0x8c, 0xda, 0xfd, 0xc3, 0x16, 0xf0, 0x36, 0x9a, 0x6c, 0x43, 0x0a, 0xe7, 0xe6, 0xc5, 0x0f, 0x05, 0xd5, 0x45, 0xc3, 0xf7, 0x98, 0xde, 0xb1, 0xd9, 0xa5, 0xbb, 0x69, 0xc5, 0x91, 0x39, 0x33, 0xc2, 0xd7, 0x79, 0x2f, 0xae, 0x9d, 0x42, 0xad, 0x76, 0x49, 0x4d, 0xc9, 0xa3, 0xe2, 0x7c, 0x21, 0x1d, 0xb4, 0xef, 0x19, 0x85, 0x18, 0x7a, 0x6c, 0x4d, 0x28, 0x1c, 0x47, 0x72, 0x17, 0x74, 0xa7, 0xa1, 0x1c, 0x12, 0x18, 0xd4, 0xdd, 0x26, 0x7b, 0x57, 0x48, 0x58, 0x77, 0xaa, 0x75, 0x1f, 0x6c, 0x28, 0x19, 0xf8, 0x1b, 0x50, 0x54, 0xa2, 0x8a, 0x26, 0xa5, 0x3d, 0xf3, 0xea, 0x34, 0x82, 0xb3, 0x40 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.5", - /* Message */ - 43, - { 0xf7, 0x1b, 0xc7, 0x37, 0x4b, 0xd5, 0x9c, 0x37, 0x77, 0x59, 0x76, 0xf3, 0x35, 0x24, 0x4a, 0x36, 0x84, 0x3c, 0x59, 0xe7, 0x48, 0x9a, 0xd2, 0x8b, 0x1a, 0x82, 0x2d, 0x2d, 0x7d, 0x0b, 0x9a, 0x6f, 0xe9, 0xac, 0x5b, 0xf4, 0x36, 0x82, 0xd6, 0x3d, 0x63, 0x6e, 0xf6 } -, - /* Seed */ - 83, - { 0xa1, 0xff, 0x98, 0x44, 0xa7, 0x3e, 0xc4, 0xb3, 0xbe, 0xfb, 0x1a, 0x86, 0x03, 0x52, 0xcf, 0x9b, 0x75, 0xfc, 0x66, 0xff, 0x47, 0x9a, 0x2d, 0xed, 0x59, 0x98, 0x84, 0x5a, 0x79, 0x77, 0x3a, 0x8c, 0x62, 0x06, 0xa3, 0x64, 0x36, 0xc8, 0x80, 0xa5, 0x5e, 0x18, 0x71, 0x18, 0x35, 0x45, 0x6d, 0x91, 0x45, 0x4b, 0x5b, 0xa1, 0x32, 0x07, 0x8f, 0x20, 0x37, 0xfb, 0xda, 0x72, 0x86, 0x25, 0x1b, 0xad, 0xd1, 0x2d, 0x0a, 0x97, 0x81, 0xaf, 0x3f, 0x58, 0x97, 0xcd, 0x94, 0x7b, 0x1e, 0x14, 0x25, 0xf9, 0x70, 0x55, 0x09 } -, - /* Encryption */ - 129, - { 0x09, 0x3f, 0xb6, 0x85, 0x26, 0xce, 0xad, 0x01, 0x0a, 0x54, 0xd1, 0x16, 0xcd, 0x7d, 0x60, 0x35, 0x09, 0x9b, 0xf1, 0xab, 0xff, 0xe9, 0x33, 0x1d, 0xe3, 0x64, 0x86, 0xf0, 0x53, 0xa8, 0x02, 0x98, 0xe4, 0xab, 0xfa, 0xb4, 0x0d, 0x3b, 0x03, 0xa3, 0xe7, 0xe9, 0x25, 0x59, 0x73, 0x38, 0xf1, 0x70, 0x3b, 0x04, 0x53, 0x5a, 0x9c, 0x87, 0xc6, 0x58, 0x36, 0xf1, 0x61, 0x11, 0xaa, 0xe8, 0x89, 0xe6, 0xc8, 0xd9, 0x0a, 0x24, 0x07, 0xd4, 0x41, 0xa1, 0xc2, 0xa3, 0x11, 0xcb, 0xd9, 0x46, 0x11, 0xa4, 0x2e, 0x93, 0xc7, 0x3a, 0x3d, 0x21, 0x48, 0x3f, 0xad, 0xb8, 0xf4, 0xe2, 0x46, 0xd0, 0x89, 0xf1, 0xcf, 0xd7, 0x08, 0x52, 0xb4, 0xdc, 0x77, 0x8a, 0x60, 0xd1, 0x52, 0xd3, 0xfc, 0xa7, 0x5f, 0xd6, 0x06, 0x67, 0x04, 0xe9, 0x33, 0xbf, 0x99, 0xf5, 0xbb, 0x77, 0xaf, 0xc9, 0xa9, 0xcb, 0x3b, 0x8c, 0xb5 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.6", - /* Message */ - 25, - { 0x46, 0x87, 0x83, 0xd4, 0xea, 0xc8, 0x81, 0x34, 0x32, 0x04, 0x85, 0x47, 0xce, 0x24, 0x1f, 0x72, 0xdb, 0x1c, 0x85, 0xce, 0x4a, 0xdb, 0xe3, 0xee, 0x2c } -, - /* Seed */ - 101, - { 0xc6, 0xe3, 0x26, 0x30, 0xed, 0x90, 0xd0, 0xaf, 0xb1, 0x68, 0xc0, 0x8b, 0x75, 0x22, 0x59, 0xef, 0x4b, 0x9e, 0x81, 0x17, 0x62, 0xf7, 0xcf, 0x4c, 0x53, 0x5c, 0xb4, 0xa0, 0xa0, 0x4b, 0x1d, 0x43, 0x65, 0x4e, 0xd4, 0xfa, 0xdf, 0xc7, 0xdd, 0xbc, 0x3a, 0xad, 0x03, 0x14, 0x07, 0x8b, 0x22, 0x6c, 0x4f, 0x3e, 0x97, 0x84, 0x45, 0x7c, 0x91, 0xc7, 0x76, 0x8c, 0x5c, 0x37, 0xb7, 0x60, 0x08, 0x93, 0x2e, 0x8d, 0x04, 0x57, 0x85, 0x05, 0x73, 0xce, 0x6b, 0x41, 0xa4, 0x3c, 0xdd, 0xa9, 0x70, 0x03, 0x18, 0x36, 0x84, 0x0e, 0x4e, 0x60, 0xa3, 0x48, 0x7b, 0x47, 0xa1, 0x85, 0xc8, 0x6f, 0x8a, 0x16, 0xf6, 0xf2, 0x21, 0xd0, 0xa0 } -, - /* Encryption */ - 129, - { 0x01, 0x71, 0xa1, 0x2b, 0x00, 0xcf, 0xd1, 0x09, 0x67, 0x4e, 0x5b, 0xf7, 0xf8, 0x43, 0x47, 0xfd, 0xa3, 0xfe, 0x4a, 0x8e, 0xa2, 0xf4, 0x8e, 0x0d, 0x6b, 0x6d, 0x94, 0xb4, 0x9f, 0xd7, 0xbd, 0xfb, 0x26, 0xe3, 0x24, 0x00, 0xa7, 0x12, 0x51, 0xab, 0x84, 0x22, 0x06, 0x92, 0x1d, 0x83, 0x72, 0x3a, 0x89, 0xea, 0x09, 0x93, 0x00, 0x25, 0x92, 0x0e, 0x3e, 0xf8, 0xa8, 0x87, 0xd2, 0xbc, 0x24, 0x15, 0xa7, 0xf1, 0xed, 0x37, 0xba, 0x8a, 0x5d, 0x03, 0xef, 0x92, 0x6a, 0xce, 0xf6, 0x11, 0x90, 0x00, 0x1c, 0x5e, 0xa0, 0xf8, 0xcd, 0x92, 0x02, 0x0c, 0xd8, 0x96, 0x67, 0xe9, 0xea, 0x5f, 0x7f, 0x2b, 0x15, 0x37, 0x8a, 0x21, 0x0b, 0x8a, 0xe9, 0x14, 0x81, 0x90, 0x98, 0xda, 0x1c, 0xbe, 0xc9, 0xc5, 0x43, 0xa2, 0x63, 0x30, 0x0f, 0x99, 0x4f, 0xb0, 0xb4, 0x92, 0x85, 0x71, 0x40, 0x1c, 0x20, 0x2b, 0xd6 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.7", - /* Message */ - 26, - { 0xaf, 0x63, 0x1d, 0x76, 0xc9, 0x7f, 0xd9, 0x95, 0xe4, 0x94, 0xaa, 0x9b, 0x4b, 0xd7, 0x58, 0xc5, 0xc6, 0x72, 0xc5, 0xe4, 0x15, 0x8f, 0x3a, 0xaf, 0x87, 0x4b } -, - /* Seed */ - 100, - { 0x40, 0x6e, 0x1e, 0x23, 0xf9, 0x92, 0xbb, 0x07, 0x62, 0x12, 0x5c, 0xa4, 0x63, 0xbd, 0x0f, 0x2e, 0xfd, 0xf1, 0xbf, 0xcb, 0x08, 0x2a, 0x8d, 0xf5, 0x06, 0xaf, 0x5f, 0x72, 0x70, 0xc3, 0x9f, 0xde, 0x01, 0xd9, 0xee, 0xd3, 0x22, 0x66, 0x61, 0xdb, 0x22, 0xa9, 0xc4, 0x04, 0xb7, 0xd7, 0x65, 0xfa, 0x38, 0x4f, 0x9a, 0xd4, 0xf5, 0x1b, 0x93, 0x69, 0xd7, 0x4b, 0x0e, 0x37, 0x70, 0x66, 0x31, 0xbc, 0x65, 0x36, 0xf6, 0x55, 0x5e, 0xc7, 0xfd, 0xeb, 0xd3, 0x48, 0xef, 0x3c, 0xf5, 0xf8, 0xa8, 0x77, 0xf6, 0x06, 0x43, 0x7c, 0x27, 0x8c, 0xb8, 0x16, 0x3a, 0xd3, 0x49, 0x38, 0x4b, 0xaa, 0xe3, 0x2f, 0x31, 0xb6, 0x86, 0xe0 } -, - /* Encryption */ - 129, - { 0x01, 0xff, 0x8f, 0xe7, 0x9a, 0xf3, 0x18, 0xd7, 0x56, 0xf2, 0x84, 0x08, 0x3b, 0x51, 0xb4, 0x3b, 0x66, 0xaa, 0xe8, 0x3c, 0x6a, 0xa9, 0x1a, 0x99, 0x93, 0x4b, 0x4d, 0xe8, 0x4b, 0xd5, 0xfd, 0x24, 0xfa, 0x8d, 0x07, 0xc7, 0x55, 0x14, 0x74, 0x66, 0x5e, 0x62, 0x36, 0x0a, 0x65, 0x98, 0x4e, 0x67, 0xa4, 0x85, 0x6c, 0x3d, 0xbd, 0x2c, 0x75, 0xf2, 0x46, 0xe2, 0x22, 0x22, 0xe9, 0xf4, 0xb9, 0x69, 0x51, 0x67, 0x26, 0xed, 0x28, 0x7f, 0x42, 0x3a, 0x67, 0x47, 0x82, 0x1f, 0xbb, 0xb7, 0xfa, 0x17, 0x62, 0x35, 0xc8, 0x50, 0xa8, 0x61, 0xf2, 0x99, 0xf7, 0x39, 0x4c, 0x2c, 0x43, 0x07, 0xb1, 0x02, 0x59, 0x09, 0x40, 0xfe, 0xd1, 0x20, 0x6a, 0xd5, 0x9b, 0x9d, 0xd6, 0x44, 0x4e, 0x1e, 0x19, 0x6e, 0x94, 0x73, 0x25, 0x22, 0x4f, 0xfa, 0xca, 0x06, 0x9e, 0x9c, 0xdf, 0x8c, 0x62, 0x02, 0x69, 0x07, 0x7d } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.8", - /* Message */ - 56, - { 0x73, 0xcb, 0x53, 0x90, 0x82, 0xfb, 0x06, 0xdc, 0xae, 0x3c, 0x20, 0x68, 0xe9, 0x89, 0xe7, 0xc0, 0xd8, 0xff, 0xf0, 0xfb, 0x34, 0x0b, 0x6d, 0xe8, 0x0d, 0x0b, 0xa5, 0xd1, 0xe0, 0x06, 0x4f, 0x22, 0x13, 0x92, 0x8a, 0x4b, 0xaf, 0x20, 0xa8, 0x03, 0x48, 0xaf, 0x3c, 0xde, 0x9d, 0xe6, 0x3f, 0x88, 0x6d, 0x63, 0xe5, 0x6a, 0x3e, 0x32, 0xcd, 0x8e } -, - /* Seed */ - 70, - { 0x28, 0xe2, 0xa9, 0x7c, 0x7e, 0x9e, 0x03, 0x3b, 0x49, 0xaa, 0xdc, 0xee, 0x8f, 0xdc, 0x07, 0xed, 0xfd, 0xfd, 0xb9, 0x50, 0x35, 0x4b, 0x70, 0x8c, 0xe5, 0xdf, 0x84, 0x8d, 0x1b, 0x51, 0xaa, 0x2f, 0x4a, 0xff, 0x99, 0x74, 0x16, 0x01, 0x81, 0x42, 0x29, 0x47, 0xb1, 0x33, 0x76, 0x4c, 0x5a, 0x40, 0x06, 0x57, 0x04, 0x6a, 0x49, 0x36, 0x3f, 0xfd, 0xf1, 0xf9, 0x3c, 0xa4, 0x8b, 0x3e, 0x52, 0x93, 0x7e, 0x1f, 0x38, 0xfb, 0x50, 0xfb } -, - /* Encryption */ - 129, - { 0x0c, 0x72, 0xe6, 0x95, 0x48, 0xc3, 0x4e, 0xca, 0xf2, 0x48, 0xb2, 0xdc, 0x6b, 0xb6, 0x43, 0x87, 0xf4, 0xf3, 0x35, 0x0f, 0x66, 0x8e, 0x59, 0x01, 0x35, 0x60, 0x80, 0x8c, 0x41, 0x3f, 0xa8, 0x35, 0xfd, 0x36, 0x0e, 0x04, 0xe4, 0x74, 0x7a, 0x00, 0x31, 0xc8, 0xa6, 0x4a, 0x9d, 0x7a, 0x07, 0xb3, 0x63, 0xfa, 0xd2, 0x93, 0xb7, 0x03, 0xa7, 0xdc, 0x99, 0x0f, 0x80, 0x6f, 0xb9, 0x0e, 0x39, 0x12, 0x21, 0xa1, 0x16, 0xdf, 0x10, 0x8f, 0x54, 0x6e, 0xae, 0x51, 0x71, 0x6b, 0xa0, 0x45, 0x01, 0xab, 0x77, 0x7b, 0x0c, 0x2a, 0x17, 0x71, 0x2f, 0x71, 0xe4, 0x06, 0x27, 0x5f, 0x01, 0x73, 0x77, 0xcf, 0x24, 0x88, 0xc4, 0x35, 0xef, 0x6c, 0x6e, 0x7c, 0x45, 0xcd, 0xb9, 0x8f, 0x24, 0x47, 0x7c, 0xed, 0x18, 0x0e, 0xb3, 0xef, 0xc8, 0x70, 0x3e, 0x96, 0x38, 0x26, 0xbf, 0xb3, 0x44, 0xf1, 0x6e, 0xb4, 0xa1 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.9", - /* Message */ - 38, - { 0xf2, 0xf9, 0x85, 0xb8, 0x03, 0x12, 0x73, 0xcb, 0x5f, 0xc8, 0x9a, 0x31, 0xdd, 0xeb, 0x4c, 0x67, 0xa4, 0xe4, 0xf3, 0x8c, 0x09, 0xd3, 0x02, 0x87, 0x42, 0x09, 0xb3, 0x9c, 0x69, 0xb7, 0x1f, 0x84, 0x95, 0x88, 0x86, 0x8f, 0xa5, 0xf8 } -, - /* Seed */ - 88, - { 0xc1, 0x20, 0x44, 0x6f, 0x5b, 0xdd, 0xa0, 0x6c, 0x63, 0x73, 0x8f, 0x18, 0x15, 0x55, 0x95, 0xf6, 0x2b, 0xc2, 0x65, 0x67, 0x28, 0x4c, 0x35, 0x03, 0x65, 0x91, 0xcd, 0x5d, 0x75, 0x3e, 0x4e, 0xf7, 0x90, 0x0d, 0xff, 0x33, 0xbf, 0xdd, 0x3b, 0x10, 0x8c, 0x10, 0x2d, 0x08, 0x98, 0x80, 0xc7, 0xb6, 0x9d, 0x86, 0xe9, 0xce, 0x3d, 0x68, 0x8c, 0xda, 0x15, 0x6f, 0xd6, 0xa9, 0x92, 0x31, 0x05, 0x8c, 0xc3, 0x18, 0x33, 0x96, 0x38, 0x09, 0x46, 0xe8, 0xa9, 0x69, 0xa7, 0xfc, 0xbe, 0x9e, 0xdc, 0x95, 0x9a, 0x0e, 0x50, 0x45, 0x32, 0xba, 0xb8, 0xea } -, - /* Encryption */ - 129, - { 0x10, 0xe0, 0xbc, 0x14, 0xba, 0x16, 0x01, 0x26, 0x98, 0xcc, 0x76, 0xcb, 0x82, 0x04, 0x5e, 0x2b, 0xfd, 0xbc, 0xb2, 0xb1, 0x18, 0xf1, 0x83, 0x06, 0x79, 0x59, 0xd7, 0x13, 0x7f, 0xd5, 0x0f, 0xa8, 0x8f, 0xe4, 0xf9, 0xce, 0xcf, 0x66, 0x31, 0xa9, 0x9c, 0xcc, 0xab, 0x76, 0xcd, 0xb7, 0x74, 0x4b, 0xab, 0xd0, 0x6b, 0x2b, 0xed, 0xfb, 0xca, 0x77, 0x24, 0xda, 0xfd, 0x91, 0xe6, 0xdf, 0xa8, 0x8b, 0xea, 0x2b, 0x44, 0xa8, 0xcb, 0xb0, 0x62, 0x19, 0xb1, 0x5c, 0x2a, 0xe7, 0x68, 0x72, 0xfa, 0xd2, 0x88, 0xe8, 0x43, 0x8a, 0xcd, 0x39, 0x5c, 0xe5, 0xcb, 0xe2, 0x8a, 0x71, 0x2b, 0x67, 0xf5, 0x61, 0xa1, 0x78, 0x6d, 0x75, 0x34, 0x3e, 0xd9, 0xad, 0x0d, 0x0a, 0x5e, 0xb6, 0xfa, 0xed, 0x07, 0xb0, 0x6a, 0xef, 0x03, 0x31, 0x8f, 0xf1, 0xaf, 0xe4, 0x72, 0xdb, 0x4e, 0xe3, 0xe2, 0x1e, 0xc1, 0x29, 0x33 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.10", - /* Message */ - 36, - { 0x39, 0x87, 0x2c, 0xfd, 0x6c, 0xf7, 0x4b, 0x4c, 0xcc, 0x1a, 0x70, 0xd9, 0x73, 0xb3, 0x18, 0x99, 0xa6, 0x7a, 0xee, 0xde, 0xe5, 0xd6, 0x71, 0xe0, 0x5b, 0xd6, 0x01, 0x12, 0xe6, 0x45, 0x12, 0xbb, 0xe4, 0x3b, 0xb8, 0x40 } -, - /* Seed */ - 90, - { 0x68, 0xac, 0x3f, 0x96, 0x97, 0xb7, 0x50, 0x75, 0x4f, 0xa7, 0x53, 0x2e, 0x41, 0x61, 0xc1, 0x20, 0x18, 0xe0, 0x33, 0xa6, 0x02, 0x51, 0xc8, 0xdc, 0xa8, 0x38, 0x78, 0x16, 0xf4, 0x23, 0x79, 0xab, 0x97, 0x8e, 0x15, 0x57, 0x8a, 0xe2, 0xe9, 0x4c, 0x17, 0x76, 0x48, 0x8b, 0x0c, 0xfd, 0xff, 0x18, 0x6f, 0xa6, 0xd7, 0x98, 0x88, 0xf8, 0x16, 0x9e, 0xe4, 0x49, 0xea, 0xdd, 0xc8, 0xe7, 0xf5, 0xa6, 0x58, 0xd0, 0x99, 0x7a, 0x93, 0x4f, 0x58, 0x6e, 0x31, 0xf7, 0x47, 0x30, 0xbe, 0x60, 0x3f, 0x1e, 0xe6, 0x2f, 0xa6, 0xc0, 0x8b, 0x0b, 0xff, 0xae, 0x6b, 0x88 } -, - /* Encryption */ - 129, - { 0x09, 0xb7, 0x70, 0x07, 0xf1, 0x5d, 0x65, 0x9e, 0xfc, 0xca, 0xca, 0x66, 0xc1, 0xe7, 0xd9, 0x62, 0xe0, 0x47, 0xa1, 0xe1, 0x49, 0xe5, 0x2d, 0xcc, 0x0e, 0x1a, 0xdc, 0x9e, 0x18, 0x3b, 0xf7, 0x3b, 0x5f, 0x23, 0x48, 0xd3, 0x43, 0x28, 0x24, 0x1b, 0x40, 0x7f, 0x61, 0x82, 0x2f, 0x6d, 0x57, 0xe1, 0xab, 0xb3, 0x22, 0xd3, 0x02, 0xf4, 0x53, 0x0d, 0x2c, 0xb9, 0xa4, 0x1a, 0x27, 0x70, 0x23, 0x8a, 0x1b, 0xdf, 0x87, 0x5e, 0xdd, 0x79, 0x78, 0x10, 0xd9, 0x04, 0xe9, 0x7a, 0x4d, 0x7c, 0x51, 0x51, 0x32, 0xd6, 0xab, 0xbf, 0x3a, 0x4a, 0x40, 0x74, 0x86, 0xdd, 0x00, 0x4e, 0xa3, 0x8a, 0xff, 0x8d, 0x4e, 0xd3, 0x82, 0x5f, 0xe1, 0x31, 0x42, 0xf1, 0x36, 0xfd, 0x1d, 0x71, 0x3e, 0x80, 0xe0, 0xcf, 0x22, 0x57, 0x69, 0xb4, 0x19, 0xcc, 0xa5, 0x4c, 0x15, 0x6e, 0x54, 0x66, 0x8b, 0x30, 0x6b, 0x5f, 0x2a } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.11", - /* Message */ - 14, - { 0x74, 0xd5, 0x6b, 0xf8, 0xd9, 0xc1, 0x80, 0xdc, 0x09, 0x93, 0x71, 0xa5, 0xaf, 0x72 } -, - /* Seed */ - 112, - { 0x33, 0x78, 0x70, 0xf0, 0x47, 0x9c, 0xf1, 0x28, 0x3a, 0x0c, 0x87, 0xc9, 0xc4, 0xaf, 0x54, 0xba, 0x8f, 0x85, 0x06, 0x44, 0xd5, 0x9a, 0x20, 0x25, 0x26, 0x3d, 0x2b, 0xdc, 0x49, 0xbf, 0xa6, 0x63, 0x6e, 0x75, 0x18, 0xf9, 0x4b, 0x6a, 0xb1, 0x8f, 0x85, 0xb1, 0x93, 0x21, 0x20, 0x9b, 0x76, 0x9f, 0x0c, 0x19, 0x75, 0xd1, 0xd5, 0xad, 0xa0, 0x6f, 0xd2, 0xa7, 0x6c, 0x82, 0x45, 0x0e, 0x4e, 0x09, 0xcd, 0xad, 0xb7, 0x83, 0x2f, 0xfb, 0x8a, 0xe7, 0xdc, 0xb4, 0x74, 0x10, 0xb2, 0x87, 0x80, 0x4d, 0xdd, 0xc7, 0x49, 0x3d, 0x61, 0x0a, 0x81, 0x39, 0x9b, 0x6d, 0xf6, 0xdf, 0x5e, 0xf1, 0x52, 0x09, 0x29, 0x84, 0xfe, 0x27, 0x76, 0xa4, 0xf9, 0x30, 0x54, 0x6b, 0xe1, 0xdc, 0x18, 0x31, 0x3c, 0x14 } -, - /* Encryption */ - 129, - { 0x07, 0x61, 0xeb, 0xaa, 0xd8, 0xff, 0x1c, 0x3d, 0xbe, 0x71, 0x0f, 0x60, 0xe3, 0xbe, 0x9f, 0x28, 0x9f, 0xb2, 0x7a, 0x6b, 0x53, 0x77, 0x75, 0x5b, 0x71, 0xfb, 0x38, 0x4c, 0x5f, 0xac, 0xb1, 0x60, 0x3c, 0x95, 0x3e, 0x1e, 0x2c, 0xa1, 0x1e, 0x78, 0x43, 0x25, 0xae, 0x42, 0xf3, 0x21, 0xae, 0x5c, 0x58, 0x64, 0x8c, 0x84, 0xf5, 0x24, 0xdf, 0x9d, 0xe9, 0xf9, 0x3f, 0xb4, 0xb0, 0xc2, 0xe0, 0x97, 0x97, 0xff, 0x2d, 0x11, 0x40, 0x70, 0x73, 0xb9, 0x5a, 0x78, 0x6d, 0xf5, 0x1a, 0x43, 0xf7, 0x99, 0x82, 0xd8, 0x6c, 0x49, 0xfb, 0x9e, 0x50, 0x14, 0xb1, 0xb7, 0x68, 0x76, 0x0a, 0x51, 0x30, 0x26, 0x6d, 0x06, 0x99, 0x30, 0x6a, 0x90, 0x4e, 0xd2, 0xdf, 0xe2, 0x01, 0x38, 0xd5, 0x31, 0xc5, 0xdc, 0x4b, 0xbf, 0x4d, 0xcc, 0xf1, 0x02, 0x49, 0xa6, 0xe2, 0xb3, 0x55, 0xf7, 0xcc, 0xb3, 0x26, 0xa4, 0x8a } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.12", - /* Message */ - 35, - { 0x61, 0x10, 0x63, 0xb5, 0xda, 0x12, 0x3c, 0xe2, 0x12, 0x96, 0x17, 0xdf, 0x38, 0x59, 0x95, 0x57, 0xb9, 0x5d, 0x1b, 0x05, 0xe6, 0xb6, 0x6b, 0xcd, 0x49, 0xaf, 0xe9, 0x83, 0x1a, 0x04, 0x21, 0xa5, 0xbe, 0x4e, 0x48 } -, - /* Seed */ - 91, - { 0x10, 0xf9, 0xdf, 0x30, 0xec, 0x97, 0x77, 0xfc, 0xab, 0x5a, 0x92, 0x4d, 0xed, 0x36, 0xfd, 0xfd, 0x6e, 0x1f, 0x38, 0x14, 0x49, 0xad, 0x99, 0xd2, 0x0a, 0xea, 0x0e, 0x39, 0x72, 0xea, 0x60, 0x4e, 0xa2, 0x27, 0x50, 0xd0, 0x60, 0x1d, 0x10, 0xa3, 0x77, 0xda, 0xd1, 0xa9, 0x4f, 0x9b, 0x02, 0x73, 0x40, 0x94, 0x81, 0x23, 0x82, 0x73, 0x98, 0xbb, 0x22, 0xb1, 0x44, 0x5f, 0x71, 0xc5, 0x05, 0xc6, 0x23, 0xaa, 0xf5, 0x16, 0xcd, 0x9f, 0xb3, 0xe9, 0x77, 0xf7, 0x78, 0xcf, 0xdd, 0x3a, 0x5d, 0x28, 0xc2, 0x29, 0x9e, 0x4b, 0x2a, 0xbd, 0x9f, 0x98, 0xc4, 0x35, 0x5a } -, - /* Encryption */ - 129, - { 0x07, 0xf2, 0xd5, 0x8b, 0xc4, 0x16, 0x39, 0x94, 0xd7, 0x6f, 0x49, 0x1e, 0xdd, 0x69, 0x74, 0x3c, 0x45, 0xdd, 0xa0, 0xc3, 0x8c, 0xcb, 0x07, 0x69, 0xde, 0x9c, 0xf9, 0xf4, 0xfd, 0x00, 0x55, 0xd3, 0x0a, 0x0c, 0xf0, 0x02, 0x80, 0x0d, 0x76, 0xed, 0x8c, 0x12, 0xcb, 0xd3, 0x6a, 0xf0, 0x51, 0xa9, 0xd7, 0x33, 0x7b, 0x29, 0xbc, 0x77, 0x4d, 0xc3, 0xc4, 0x01, 0x2b, 0xf5, 0xc2, 0x8a, 0xea, 0xd8, 0xc3, 0xe0, 0x36, 0xaa, 0x41, 0x39, 0x8a, 0x8b, 0x0f, 0xe9, 0x91, 0xc0, 0xbf, 0x66, 0xb5, 0x34, 0x1c, 0x99, 0xd9, 0x37, 0x7d, 0x94, 0x70, 0x4a, 0xd4, 0x90, 0xa9, 0xf8, 0x74, 0x6f, 0xc5, 0xce, 0xf7, 0x26, 0xe1, 0x96, 0xf3, 0x41, 0xf9, 0x3a, 0x1f, 0x1e, 0xae, 0x2c, 0x13, 0xe0, 0x0c, 0xfd, 0x22, 0x06, 0x2f, 0x8e, 0xb3, 0xda, 0x9d, 0xaf, 0xb9, 0x5a, 0x1e, 0x7b, 0x81, 0xb1, 0xfd, 0xb6, 0x56 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.13", - /* Message */ - 36, - { 0x80, 0x76, 0x4f, 0x78, 0x5f, 0xd4, 0x17, 0x6e, 0x16, 0x41, 0xe1, 0x29, 0xa3, 0x5a, 0x9b, 0x31, 0xb3, 0xa8, 0x9a, 0x75, 0x67, 0xad, 0x6c, 0x1f, 0x0d, 0x65, 0xec, 0x8a, 0xf9, 0x5f, 0xc1, 0x6e, 0x15, 0x28, 0x14, 0x09 } -, - /* Seed */ - 90, - { 0x20, 0x36, 0xd0, 0x98, 0xa6, 0xe9, 0x35, 0xf9, 0xa4, 0x11, 0x20, 0x1d, 0x2b, 0xcb, 0x62, 0x9f, 0x79, 0x0a, 0x94, 0xdb, 0x2e, 0xc6, 0x98, 0x67, 0x43, 0x3b, 0x17, 0x61, 0xd7, 0xc6, 0x95, 0x4b, 0xe9, 0x1a, 0x9f, 0xc7, 0x19, 0x19, 0x0e, 0x10, 0x86, 0x13, 0xcd, 0x58, 0x4c, 0xbb, 0x97, 0x76, 0x87, 0x04, 0x69, 0x24, 0xbc, 0xa6, 0xb2, 0xfe, 0x1a, 0x54, 0xbf, 0x76, 0xac, 0xf7, 0x7b, 0x36, 0x8c, 0x39, 0x65, 0x0f, 0x6d, 0x0a, 0x49, 0x8d, 0xbd, 0xed, 0xae, 0x3f, 0x4c, 0x21, 0x04, 0x0a, 0x8a, 0xed, 0x63, 0x4d, 0xe4, 0xed, 0x8a, 0xf1, 0x34, 0x6e } -, - /* Encryption */ - 129, - { 0x04, 0x9c, 0x61, 0x44, 0x4e, 0x92, 0x47, 0x72, 0xf9, 0x4a, 0x79, 0x5c, 0xcd, 0x99, 0xeb, 0x2f, 0xe4, 0x30, 0x99, 0x7b, 0x91, 0xb4, 0x2d, 0xe6, 0x16, 0x36, 0x29, 0xab, 0x98, 0xd2, 0x5a, 0x71, 0xe7, 0xf9, 0x68, 0x86, 0xa5, 0x7e, 0x97, 0x9d, 0x9c, 0x94, 0xc9, 0x62, 0x20, 0x9c, 0x1f, 0x71, 0x2c, 0x70, 0x57, 0x1a, 0x81, 0xf3, 0x77, 0xea, 0xf7, 0x4e, 0x80, 0xe7, 0x07, 0x22, 0xe1, 0xbe, 0x3d, 0x13, 0x37, 0xc5, 0x04, 0x5f, 0x79, 0x7b, 0xd5, 0x7d, 0xf2, 0xf5, 0xae, 0x5e, 0xf3, 0x3a, 0xe5, 0x79, 0xe9, 0x3b, 0x38, 0xfb, 0x25, 0x0d, 0xf0, 0xc2, 0xbc, 0x59, 0xb3, 0x3a, 0x74, 0x86, 0x7b, 0x8f, 0x3d, 0xfe, 0x5b, 0xa7, 0x85, 0xd7, 0x28, 0xb8, 0x9d, 0x96, 0xb3, 0x00, 0x2b, 0xc0, 0x05, 0x4d, 0xb5, 0xbb, 0x0d, 0x84, 0xfd, 0xa4, 0x5d, 0xb4, 0xa1, 0xf2, 0x62, 0x8a, 0xb1, 0x12, 0x30 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.14", - /* Message */ - 18, - { 0x0a, 0xbc, 0x2b, 0xc5, 0xfc, 0xd0, 0x40, 0x18, 0x9f, 0x84, 0x22, 0xf1, 0xca, 0x04, 0x50, 0x21, 0xda, 0x95 } -, - /* Seed */ - 108, - { 0xe4, 0x73, 0x2e, 0x49, 0x90, 0x69, 0x9f, 0xd7, 0x47, 0x40, 0xc8, 0x52, 0xae, 0x8d, 0x4d, 0x70, 0x7f, 0xbd, 0x79, 0x46, 0x0f, 0x88, 0x74, 0x09, 0x84, 0xae, 0x53, 0xff, 0xb9, 0xfc, 0x39, 0x62, 0x68, 0x3e, 0xad, 0x0d, 0x14, 0x04, 0xf5, 0x31, 0x51, 0xd1, 0xae, 0xe8, 0x0f, 0xcd, 0x6a, 0x1f, 0xf6, 0x5f, 0xc8, 0x8e, 0xf0, 0x8f, 0xd7, 0x6d, 0x9f, 0xdc, 0xa8, 0xf9, 0xe3, 0xac, 0x7d, 0x8d, 0x82, 0xb8, 0x2e, 0xce, 0x78, 0x9c, 0x66, 0xc5, 0x40, 0x22, 0x80, 0xb3, 0xe5, 0x68, 0x10, 0x1c, 0xe2, 0xa2, 0xa7, 0xb2, 0xb2, 0xf1, 0xe9, 0x65, 0x19, 0xcf, 0xb4, 0x1e, 0x60, 0x49, 0x3d, 0x76, 0x8e, 0xb5, 0xb9, 0x6c, 0xcc, 0x49, 0xbb, 0x0f, 0x6e, 0xc7, 0x11, 0xfd } -, - /* Encryption */ - 129, - { 0x03, 0xd8, 0xae, 0x60, 0x4f, 0x92, 0x95, 0x31, 0x73, 0xc7, 0x7a, 0x01, 0xff, 0xa0, 0x90, 0xaa, 0x0e, 0x37, 0xa3, 0x8a, 0x47, 0xc9, 0x72, 0x19, 0xc0, 0xb9, 0xf8, 0x64, 0xd3, 0x48, 0x74, 0x6a, 0xf7, 0xf4, 0xa6, 0x32, 0x11, 0x29, 0xc6, 0x04, 0x6a, 0x99, 0x4c, 0xed, 0x1c, 0xcf, 0x33, 0x24, 0xda, 0x93, 0x71, 0x53, 0x88, 0x8d, 0xd6, 0xc6, 0x70, 0x19, 0xa7, 0xca, 0xa7, 0x65, 0x5a, 0x36, 0x42, 0x83, 0x8e, 0xdf, 0xa0, 0xe2, 0xed, 0x8d, 0xc2, 0x5c, 0x14, 0xbf, 0xf8, 0xbf, 0xf5, 0x65, 0xc7, 0x18, 0xf8, 0xb6, 0xc9, 0x20, 0x56, 0xc9, 0xbb, 0xe8, 0xd9, 0x30, 0x83, 0x70, 0xc7, 0xcd, 0x75, 0xa0, 0x4e, 0x11, 0xb6, 0xe2, 0x5a, 0xa6, 0xc3, 0xc2, 0xcd, 0xdd, 0x17, 0x2a, 0x4b, 0x6a, 0xee, 0xf0, 0x4f, 0xb8, 0x35, 0xb6, 0x86, 0x37, 0xcf, 0x0c, 0xa0, 0xb9, 0xa9, 0x11, 0xb8, 0xb8, 0x74 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.15", - /* Message */ - 24, - { 0x8f, 0x98, 0x35, 0xef, 0xb6, 0x9c, 0xca, 0x8c, 0x07, 0xbf, 0xef, 0x4d, 0x8f, 0x53, 0x5d, 0x0c, 0xbd, 0xa5, 0x36, 0x7b, 0xbd, 0x41, 0x08, 0x0a } -, - /* Seed */ - 102, - { 0x32, 0xd4, 0xbe, 0x07, 0xe6, 0xc7, 0xfb, 0x81, 0xd5, 0x20, 0x8c, 0x25, 0x01, 0xc5, 0xdf, 0x7c, 0x56, 0xd1, 0x98, 0x6d, 0xc6, 0xd6, 0x31, 0x10, 0xad, 0x21, 0xd8, 0x1e, 0x57, 0xce, 0x11, 0x3f, 0x3d, 0xbb, 0xfe, 0xbe, 0x0f, 0x80, 0xc0, 0x16, 0xb7, 0x19, 0xe9, 0xd5, 0xc3, 0xd9, 0xa3, 0xbb, 0xbb, 0x2f, 0x35, 0xbe, 0x95, 0xd4, 0x56, 0x22, 0x2b, 0x51, 0xc3, 0xd6, 0x5b, 0x38, 0x8e, 0x7a, 0xda, 0xf6, 0xb9, 0xce, 0xae, 0x1f, 0xd4, 0x6a, 0x6e, 0x05, 0xca, 0x1b, 0xb1, 0x99, 0xc2, 0x7b, 0xac, 0xdc, 0x8b, 0x5f, 0xd1, 0x4f, 0x03, 0x51, 0xae, 0xb3, 0xfd, 0xd6, 0xdc, 0x1d, 0x93, 0xf3, 0xb5, 0x31, 0x56, 0xef, 0xa3, 0xc6 } -, - /* Encryption */ - 129, - { 0x0e, 0x47, 0xad, 0x4d, 0x92, 0xd1, 0x9a, 0x1e, 0xbc, 0xac, 0xbf, 0x87, 0x5d, 0x80, 0x19, 0x27, 0xd4, 0xfe, 0x5a, 0xfa, 0xf6, 0x6e, 0xd8, 0x01, 0x5c, 0x55, 0x9b, 0x56, 0x6a, 0x9f, 0x3c, 0xbf, 0x0a, 0xbe, 0x8a, 0x76, 0xfe, 0x73, 0x24, 0xf6, 0x28, 0xc2, 0xe4, 0xf3, 0x45, 0x84, 0xa5, 0x0f, 0xf7, 0x7e, 0x82, 0x2a, 0x54, 0x11, 0x8e, 0xfa, 0x9b, 0xae, 0x9d, 0x0f, 0xa5, 0x02, 0x94, 0xc6, 0x18, 0x0b, 0xaf, 0x3a, 0x8b, 0x0c, 0x7e, 0x45, 0x3a, 0x74, 0x37, 0xab, 0x1a, 0x19, 0xcc, 0x00, 0x30, 0x7a, 0x8c, 0x6a, 0xed, 0x95, 0xc3, 0x15, 0xb2, 0x4b, 0x47, 0x90, 0x07, 0x24, 0x56, 0xc9, 0x44, 0x60, 0x99, 0x5d, 0xbb, 0x1f, 0xe5, 0xa1, 0x2b, 0x4c, 0xf4, 0x45, 0x42, 0x96, 0xf7, 0x40, 0x02, 0x83, 0xce, 0xfd, 0xce, 0x6b, 0x00, 0xcc, 0x80, 0x49, 0xdd, 0x5d, 0xd8, 0xcb, 0x2a, 0xf3, 0x6f } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.16", - /* Message */ - 47, - { 0x6d, 0xfb, 0xd9, 0x3b, 0x00, 0x78, 0xd4, 0x9a, 0xe4, 0xfe, 0x1e, 0x24, 0xcc, 0xa9, 0x7d, 0x0a, 0x9a, 0xff, 0xd7, 0xbe, 0xe0, 0x62, 0xae, 0xd2, 0x9d, 0xef, 0x0b, 0x1c, 0x0b, 0x3a, 0xef, 0xad, 0x81, 0x1d, 0x6e, 0x7a, 0xce, 0x8b, 0x49, 0xd7, 0x24, 0x2a, 0x9f, 0xe6, 0xe2, 0x3c, 0x22 } -, - /* Seed */ - 79, - { 0x31, 0x9f, 0x9c, 0xda, 0x2c, 0x93, 0x38, 0x8e, 0xbe, 0x1a, 0x50, 0xe7, 0x6c, 0x93, 0x97, 0x55, 0x9d, 0xca, 0xf1, 0x4f, 0xe1, 0x03, 0x52, 0xaa, 0x51, 0x1d, 0xc5, 0xba, 0xa6, 0x4d, 0xc1, 0x52, 0xfc, 0xc7, 0x9c, 0xbb, 0x23, 0xd4, 0xe6, 0x9b, 0x12, 0xb9, 0xf2, 0x7a, 0x79, 0x09, 0x15, 0x98, 0x87, 0xbb, 0x04, 0x12, 0x9a, 0xd6, 0x35, 0x16, 0x81, 0x33, 0x86, 0x37, 0x4f, 0x31, 0x89, 0x2d, 0x4c, 0xdc, 0x4f, 0xe6, 0x39, 0x69, 0xb5, 0xbf, 0xdd, 0xc6, 0x67, 0xf9, 0x46, 0x89, 0x7d } -, - /* Encryption */ - 129, - { 0x01, 0xc5, 0xce, 0x83, 0x6b, 0xe2, 0x20, 0x8a, 0x3d, 0x81, 0x4e, 0x7e, 0x60, 0xc2, 0x76, 0x74, 0xac, 0xb7, 0xcd, 0x3e, 0x31, 0xc0, 0x24, 0xd9, 0xd3, 0x8f, 0xc2, 0x29, 0x53, 0xaa, 0xfe, 0x73, 0xaf, 0x52, 0x40, 0x43, 0x4d, 0xcf, 0x54, 0xa3, 0x88, 0x99, 0x2e, 0xac, 0x36, 0xec, 0x84, 0x64, 0xd9, 0xa0, 0x42, 0xac, 0x58, 0xd1, 0x8a, 0x70, 0x39, 0x8b, 0x8a, 0x77, 0x3e, 0x66, 0x69, 0xbb, 0x3d, 0x76, 0xee, 0xac, 0xdf, 0x1f, 0xd1, 0x52, 0x47, 0x40, 0x99, 0xbf, 0xa6, 0x62, 0xa4, 0x81, 0xdb, 0xab, 0x4c, 0xa4, 0x67, 0x14, 0x95, 0x87, 0x45, 0xe2, 0xb7, 0x83, 0x2a, 0x59, 0xcc, 0xb0, 0x05, 0x36, 0x49, 0xb7, 0xe0, 0x95, 0x07, 0x43, 0x33, 0x3f, 0x5f, 0xcd, 0x6f, 0x65, 0x19, 0x7d, 0xdc, 0xb4, 0xe1, 0xbc, 0x12, 0xa6, 0x6e, 0x8e, 0x92, 0xa8, 0x65, 0x9f, 0xae, 0xe5, 0x71, 0x31, 0xe2 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.17", - /* Message */ - 31, - { 0xe5, 0x87, 0x9f, 0xfc, 0xe0, 0xb6, 0x29, 0xb8, 0x85, 0x7c, 0x19, 0x5c, 0xf5, 0xd0, 0x9f, 0x7b, 0x93, 0xbf, 0xf1, 0xf7, 0xa9, 0xf2, 0xd8, 0xa4, 0x5a, 0x56, 0x3b, 0xbb, 0xe9, 0xe6, 0x2d } -, - /* Seed */ - 95, - { 0xba, 0xce, 0x2c, 0xea, 0x0b, 0xfe, 0xc2, 0x5a, 0x2d, 0x34, 0xd7, 0x29, 0x92, 0xc2, 0xb8, 0xea, 0x0a, 0xea, 0x17, 0xb7, 0xa3, 0xa8, 0xbe, 0xd6, 0x0d, 0x1b, 0xb5, 0x10, 0x13, 0x34, 0x7b, 0x2d, 0x03, 0x6a, 0x75, 0xa4, 0xec, 0x3e, 0xb2, 0xc1, 0x78, 0x8d, 0x44, 0xa9, 0xe1, 0xc5, 0xc8, 0x8d, 0x04, 0x1e, 0x82, 0xaf, 0x87, 0x81, 0x55, 0xdd, 0xc7, 0xd8, 0x1b, 0x3e, 0x27, 0xcd, 0xdd, 0x20, 0x40, 0x9d, 0xbd, 0xda, 0x4a, 0x64, 0xbf, 0x83, 0x11, 0xa7, 0xb7, 0xeb, 0x77, 0x29, 0x93, 0x12, 0x66, 0x1a, 0x6e, 0x37, 0xdf, 0x35, 0x02, 0xf8, 0x6a, 0x22, 0x49, 0x2b, 0xef, 0xac, 0xf4 } -, - /* Encryption */ - 129, - { 0x01, 0xe4, 0xfa, 0xeb, 0xca, 0xb8, 0x9d, 0x7b, 0xaa, 0x3e, 0x03, 0x93, 0xf7, 0x16, 0x84, 0xb0, 0xae, 0x53, 0xdf, 0x8e, 0xb9, 0x87, 0x3e, 0x65, 0xa7, 0x16, 0xec, 0x2f, 0x41, 0x74, 0x1f, 0x8b, 0x78, 0x16, 0xd2, 0xe1, 0x97, 0xd9, 0x76, 0xfd, 0x53, 0xa8, 0xee, 0x7f, 0x92, 0x4b, 0xf4, 0xbf, 0xd4, 0x10, 0x42, 0xe1, 0x64, 0x45, 0xe9, 0x06, 0x0b, 0x55, 0xa0, 0xb6, 0xdc, 0x16, 0xaa, 0xf3, 0x06, 0x44, 0x91, 0xd1, 0x89, 0x28, 0x22, 0x39, 0x50, 0x39, 0x33, 0x28, 0xc1, 0x47, 0xdb, 0xd0, 0x35, 0x31, 0xec, 0x01, 0x2d, 0x8c, 0x52, 0x75, 0x02, 0xe7, 0xeb, 0x3d, 0xca, 0x50, 0x9b, 0x7d, 0xe1, 0x69, 0x95, 0x92, 0x46, 0x07, 0xc8, 0xb2, 0x8a, 0x2b, 0xda, 0x9b, 0xcb, 0x2c, 0x77, 0x81, 0x46, 0x1c, 0x76, 0x66, 0x3b, 0x88, 0x7b, 0x96, 0x43, 0xe2, 0x31, 0x7f, 0x0e, 0xa1, 0xd1, 0xbb, 0x14 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.18", - /* Message */ - 62, - { 0x0a, 0x2e, 0x24, 0x13, 0x0e, 0x8a, 0x9d, 0x28, 0xdf, 0xcb, 0x9d, 0xf9, 0x76, 0x5f, 0x46, 0x83, 0xe9, 0xda, 0x78, 0x42, 0x5a, 0x28, 0x19, 0x98, 0x06, 0xa9, 0x3b, 0x32, 0x2e, 0xfa, 0x88, 0x49, 0x3a, 0xc3, 0x72, 0x52, 0xc2, 0x9a, 0x26, 0x4f, 0x3e, 0x85, 0xae, 0x56, 0x53, 0x8e, 0x80, 0x8d, 0xc5, 0x56, 0x42, 0xa4, 0x88, 0x5f, 0x05, 0x46, 0x40, 0xf6, 0x9c, 0x89, 0x81, 0xfe } -, - /* Seed */ - 64, - { 0x20, 0x43, 0x1e, 0xf3, 0x1f, 0xce, 0x19, 0x93, 0x9d, 0xa5, 0x45, 0xa0, 0x85, 0x30, 0x11, 0x2d, 0xb0, 0xfa, 0x07, 0x13, 0x8d, 0xd8, 0x6d, 0xb1, 0xcc, 0x65, 0xe2, 0xb0, 0x3f, 0xc2, 0xbe, 0x60, 0x7c, 0x3e, 0x60, 0x38, 0xeb, 0xb7, 0x89, 0x17, 0x55, 0xb2, 0x31, 0x29, 0xfb, 0x96, 0x9a, 0x7f, 0xe1, 0x06, 0x10, 0xf2, 0xeb, 0xc3, 0xf0, 0x77, 0xb2, 0xc8, 0xf4, 0x60, 0x1e, 0x09, 0xab, 0x4c } -, - /* Encryption */ - 129, - { 0x0c, 0x14, 0xb7, 0xd3, 0x2d, 0x3d, 0x4c, 0xe2, 0xb0, 0x8e, 0xe4, 0x4f, 0x51, 0x6a, 0xee, 0x29, 0x90, 0xb6, 0x30, 0x52, 0x40, 0xb2, 0x5d, 0x23, 0x34, 0xaa, 0x31, 0x75, 0x2a, 0xef, 0x28, 0x02, 0x16, 0x39, 0xf7, 0x6a, 0x4c, 0x47, 0x19, 0x56, 0x9b, 0x30, 0x05, 0x2d, 0x4b, 0xd0, 0x8b, 0x3a, 0x07, 0xf2, 0x3b, 0xe6, 0x86, 0x23, 0x7e, 0x48, 0x1e, 0x67, 0xbf, 0x3f, 0x5a, 0x01, 0xad, 0xd7, 0x56, 0xda, 0x77, 0x2c, 0x7d, 0xc1, 0x3d, 0x32, 0x29, 0x8b, 0x9b, 0xbc, 0x3d, 0x33, 0xe6, 0xdf, 0x82, 0xd8, 0x5c, 0x08, 0x9d, 0x34, 0x76, 0x00, 0x49, 0x7a, 0x8b, 0x8e, 0xa4, 0xde, 0x68, 0xab, 0xb9, 0x0e, 0x5c, 0x6a, 0xeb, 0x26, 0x9a, 0x97, 0xbe, 0x42, 0x6c, 0xef, 0xac, 0xde, 0xbb, 0xcc, 0x0c, 0x1f, 0x2c, 0x40, 0x9b, 0xbc, 0x7c, 0x72, 0xd9, 0x0b, 0xdb, 0x42, 0x6b, 0x13, 0xcc, 0xc1, 0x9a } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.19", - /* Message */ - 63, - { 0x7e, 0xfc, 0x62, 0x7b, 0xa5, 0xfa, 0x28, 0x25, 0xaa, 0xe0, 0xca, 0x94, 0x03, 0x0e, 0x70, 0x47, 0x08, 0xd3, 0x5f, 0x92, 0x23, 0x98, 0x26, 0xb4, 0x2e, 0x2d, 0x4d, 0xbb, 0xe4, 0x02, 0xab, 0x7d, 0x19, 0x6a, 0x7f, 0x54, 0x88, 0x0c, 0xf2, 0xc5, 0xa4, 0xd0, 0xfc, 0xe5, 0x3a, 0x20, 0xa3, 0x2b, 0x68, 0x30, 0xe6, 0x2d, 0xcd, 0x00, 0xdb, 0xcb, 0xf3, 0x3b, 0x5c, 0x0c, 0x70, 0x44, 0x01 } -, - /* Seed */ - 63, - { 0xf0, 0x49, 0x79, 0x19, 0xc1, 0x42, 0xf3, 0xa9, 0x8e, 0xf5, 0x5b, 0xcd, 0x59, 0x88, 0x23, 0x4f, 0xdc, 0x8a, 0xeb, 0xf7, 0x36, 0xd4, 0x7a, 0xf9, 0x70, 0x90, 0xa7, 0xa9, 0xdd, 0xe0, 0xa7, 0x35, 0x09, 0xf9, 0xcd, 0x41, 0x36, 0x26, 0xbb, 0x8b, 0xa7, 0x67, 0xc9, 0xd6, 0x38, 0x49, 0x1c, 0x28, 0x6e, 0x67, 0xbf, 0x22, 0xd6, 0x70, 0xd5, 0x6b, 0x24, 0xc1, 0x5b, 0xad, 0x70, 0x35, 0x1e } -, - /* Encryption */ - 129, - { 0x01, 0xdb, 0xce, 0x3b, 0x3f, 0x84, 0xb2, 0xda, 0x06, 0xb1, 0x67, 0xe2, 0x06, 0x64, 0x9d, 0x42, 0x4a, 0x42, 0xb8, 0xe9, 0xea, 0x54, 0x53, 0xa1, 0x6b, 0x5f, 0xc6, 0xc2, 0xe9, 0xcb, 0x17, 0xed, 0xa1, 0xef, 0xfe, 0x4e, 0x78, 0x36, 0xa5, 0xe5, 0x8f, 0x99, 0xe5, 0x31, 0x53, 0x0b, 0x40, 0x17, 0x1e, 0x4b, 0x51, 0xfc, 0x0b, 0x92, 0xde, 0x30, 0x31, 0x30, 0x09, 0x36, 0xd2, 0x59, 0x5e, 0x39, 0x10, 0x09, 0xe2, 0xe5, 0x3c, 0x32, 0xf7, 0x59, 0x60, 0x4a, 0x6d, 0xba, 0xd9, 0xc9, 0x70, 0x90, 0x0f, 0xa6, 0xe4, 0x1a, 0x35, 0x08, 0x3f, 0x78, 0x7b, 0x9b, 0xf3, 0xbe, 0xbc, 0xea, 0xa1, 0xa7, 0x71, 0x84, 0x1b, 0x5e, 0x6e, 0x4c, 0x8b, 0x50, 0x96, 0x29, 0x00, 0x7b, 0x46, 0x7e, 0x3c, 0xec, 0x8a, 0x1d, 0x03, 0x23, 0xc3, 0xc5, 0xdb, 0xc3, 0x4d, 0x8d, 0x41, 0x25, 0xa3, 0x98, 0xc9, 0xd5, 0x3d } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 11.20", - /* Message */ - 15, - { 0x59, 0x3d, 0x3f, 0xcd, 0x05, 0xac, 0xee, 0x30, 0x29, 0x81, 0x5e, 0x1e, 0x76, 0xa8, 0x90 } -, - /* Seed */ - 111, - { 0x12, 0x35, 0xee, 0x3e, 0x7a, 0x9d, 0xf5, 0x96, 0x7f, 0xe9, 0x8d, 0x97, 0x10, 0xff, 0xdd, 0x5f, 0x7e, 0xb2, 0x2d, 0xc0, 0x71, 0x47, 0xaf, 0x43, 0x6f, 0xe2, 0x0a, 0xa5, 0x26, 0xbf, 0x0b, 0x94, 0x19, 0x0c, 0xab, 0xb5, 0x21, 0x3d, 0xe9, 0x8a, 0x23, 0xf5, 0xef, 0x27, 0x50, 0x22, 0xa2, 0xf7, 0x3e, 0x60, 0xe9, 0xef, 0xe2, 0xc0, 0x34, 0xc5, 0x5c, 0xeb, 0x26, 0xaa, 0x80, 0x6c, 0xde, 0xd6, 0x73, 0x9d, 0xdb, 0x2c, 0xbd, 0x3e, 0xc3, 0xb5, 0x55, 0x20, 0x4a, 0x79, 0x84, 0x65, 0xc3, 0x7c, 0x67, 0x57, 0x19, 0x56, 0x86, 0xa3, 0xea, 0x3c, 0x56, 0x57, 0xc3, 0x60, 0xa0, 0x15, 0x8d, 0x99, 0x2d, 0x4f, 0xeb, 0xfa, 0x04, 0x29, 0xee, 0xb7, 0xc9, 0x2a, 0x46, 0x84, 0x34, 0xc5, 0xb7 } -, - /* Encryption */ - 129, - { 0x0f, 0x69, 0x98, 0x81, 0xa1, 0x52, 0x46, 0x18, 0xbc, 0x25, 0xd4, 0xe5, 0x14, 0xe2, 0x07, 0x30, 0x68, 0xea, 0x7d, 0x35, 0x38, 0x4b, 0xaf, 0xd4, 0x6f, 0xc2, 0x82, 0xe1, 0xd8, 0x55, 0x11, 0x9e, 0xe9, 0x69, 0xf2, 0x11, 0xc7, 0x18, 0x4a, 0x07, 0x03, 0x06, 0x47, 0xfc, 0x40, 0x99, 0x0e, 0xcf, 0x2e, 0xa4, 0x05, 0x22, 0x86, 0x5d, 0x91, 0x77, 0x8a, 0x62, 0x7e, 0xca, 0x8e, 0x50, 0xc2, 0xbb, 0x97, 0x60, 0xb0, 0x45, 0xda, 0xaf, 0x12, 0x77, 0xa4, 0xfa, 0x98, 0x35, 0x76, 0xca, 0x8c, 0xfa, 0xd7, 0x60, 0x83, 0x29, 0xc1, 0x88, 0x15, 0x88, 0x01, 0x7d, 0x63, 0x72, 0x2b, 0x70, 0xe9, 0x8b, 0xe5, 0x24, 0xe0, 0x03, 0x39, 0x95, 0x98, 0x25, 0x73, 0xd3, 0x38, 0x70, 0x78, 0xc8, 0xb7, 0xc1, 0xc5, 0xf9, 0xae, 0xf2, 0x64, 0xa0, 0x48, 0x46, 0x84, 0xb3, 0x42, 0x66, 0x43, 0x73, 0x7d, 0x34, 0xbb } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 12: A 1030-bit RSA key pair", -{ - /* Modulus */ - 129, - { 0x26, 0x1f, 0xe0, 0x28, 0x44, 0x59, 0xc2, 0xfa, 0x6f, 0x05, 0x54, 0x6b, 0xed, 0x58, 0x5e, 0x1e, 0xe0, 0xa1, 0x30, 0xb7, 0x1c, 0x2b, 0x8a, 0x6f, 0xbb, 0x3b, 0xdc, 0x75, 0x78, 0x7b, 0x26, 0x55, 0xd0, 0xed, 0x4e, 0x32, 0x5b, 0x54, 0xc7, 0xb3, 0x71, 0xa6, 0xfc, 0xf2, 0xb6, 0x78, 0x82, 0x77, 0xa5, 0x0d, 0x47, 0x05, 0xba, 0x23, 0xc5, 0x96, 0x28, 0x5d, 0xa7, 0xe3, 0xc9, 0x30, 0x4a, 0x41, 0xe7, 0xcc, 0x48, 0x8b, 0x44, 0x92, 0x2f, 0x7b, 0xe2, 0xb4, 0x7c, 0x16, 0x31, 0x9e, 0x33, 0x74, 0x51, 0x17, 0x3d, 0x40, 0xb1, 0xea, 0x48, 0x1d, 0x1a, 0x9c, 0x11, 0x29, 0xb1, 0xfe, 0xb7, 0xd0, 0x9f, 0x67, 0x49, 0x7a, 0xeb, 0x98, 0x94, 0x8f, 0x1a, 0xbf, 0x3b, 0x77, 0x86, 0xbd, 0x3b, 0x87, 0x04, 0x71, 0x87, 0xc8, 0xf3, 0x70, 0x15, 0x68, 0x2b, 0x3f, 0x2d, 0xe5, 0x0e, 0x07, 0x8e, 0x8d, 0x0f } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 129, - { 0x05, 0xdf, 0x76, 0x83, 0x72, 0xcc, 0x0a, 0x64, 0xd3, 0xc2, 0x14, 0x18, 0x30, 0x24, 0x23, 0x13, 0x9f, 0x47, 0x95, 0x73, 0xe5, 0x0b, 0x5c, 0x09, 0xb6, 0xe3, 0xbe, 0x23, 0xfb, 0xc9, 0xaa, 0x1a, 0x76, 0xd3, 0x27, 0x99, 0xa0, 0x47, 0x76, 0x1f, 0xfc, 0x21, 0x07, 0x94, 0x48, 0x17, 0x01, 0x04, 0xcc, 0xa5, 0xe2, 0xa1, 0x4c, 0xe4, 0x57, 0xd0, 0x0d, 0x80, 0x7d, 0x42, 0xc7, 0x6a, 0x55, 0xf6, 0x16, 0x87, 0x4b, 0xa7, 0xf7, 0xea, 0xa1, 0xce, 0x63, 0xcb, 0xf1, 0x32, 0xde, 0xb0, 0x81, 0xaa, 0xd2, 0xfd, 0x80, 0xd1, 0x24, 0xc4, 0xda, 0x86, 0xec, 0x6c, 0x02, 0x0e, 0x8c, 0xa8, 0x2d, 0xcd, 0xcd, 0x35, 0x54, 0xe6, 0x9b, 0xb1, 0x98, 0x72, 0x26, 0x2a, 0x50, 0x31, 0xab, 0x5d, 0xb7, 0xcc, 0x8c, 0x92, 0x59, 0xa1, 0x46, 0xd5, 0x8b, 0x1d, 0xb9, 0x4c, 0xc7, 0xe7, 0x56, 0x25, 0x3d, 0x5a, 0xa1 } -, - /* Prime 1 */ - 65, - { 0x06, 0x77, 0x25, 0xab, 0x55, 0x34, 0x18, 0xe1, 0xeb, 0x8a, 0x41, 0xf4, 0xfd, 0x92, 0xd2, 0x80, 0xb6, 0x9f, 0x85, 0xb0, 0x8c, 0xb4, 0x02, 0xf0, 0x1a, 0xa4, 0x96, 0x92, 0xc7, 0x20, 0x9b, 0x36, 0x42, 0x98, 0xee, 0xf4, 0xe3, 0x3d, 0xc4, 0x22, 0xbb, 0xa3, 0x35, 0x03, 0xd1, 0x1a, 0x12, 0x7d, 0xd2, 0x86, 0x43, 0xf7, 0xe7, 0x75, 0x58, 0x97, 0xe2, 0xeb, 0x96, 0xc4, 0xdd, 0xbb, 0x91, 0x12, 0xf1 } -, - /* Prime 2 */ - 65, - { 0x05, 0xe5, 0x8c, 0xeb, 0xd4, 0x7d, 0x87, 0xb1, 0xe7, 0x8d, 0xa2, 0xfe, 0xee, 0x6d, 0xc5, 0xf9, 0xbf, 0xa2, 0x20, 0xc3, 0x55, 0xe8, 0x20, 0xc8, 0xfb, 0xaa, 0x88, 0x46, 0xdf, 0x11, 0x00, 0x36, 0x2c, 0xd1, 0x69, 0x1f, 0x5c, 0xbf, 0x5c, 0x78, 0x68, 0xc4, 0x72, 0xd0, 0x28, 0x2a, 0xbe, 0x01, 0x03, 0x16, 0x1f, 0x4d, 0x8c, 0x62, 0xaf, 0xf3, 0x5b, 0xb1, 0xfb, 0x7c, 0xc6, 0x99, 0xd9, 0x9f, 0xff } -, - /* Prime exponent 1 */ - 65, - { 0x01, 0x6c, 0xc9, 0x14, 0x95, 0xd6, 0xc1, 0x95, 0x29, 0x40, 0x73, 0x80, 0xf7, 0x52, 0x20, 0xaa, 0xd5, 0x95, 0x1a, 0xf5, 0xea, 0x4c, 0xd2, 0x48, 0xf0, 0xd6, 0x4d, 0x89, 0x53, 0xf1, 0xcf, 0xc3, 0x89, 0xb2, 0x03, 0x18, 0x5d, 0xed, 0x03, 0x09, 0x54, 0xa9, 0x87, 0xc9, 0xab, 0x90, 0x3f, 0x7b, 0x13, 0xa7, 0x1b, 0xdb, 0xcb, 0x5b, 0x85, 0x87, 0x14, 0x30, 0x30, 0x2e, 0x7b, 0x60, 0x17, 0x7d, 0x41 } -, - /* Prime exponent 2 */ - 64, - { 0xf9, 0xcc, 0x89, 0x15, 0xff, 0xb3, 0xdd, 0xc7, 0xc0, 0x93, 0x71, 0x76, 0x49, 0x2a, 0x12, 0xbb, 0x18, 0x7c, 0x2d, 0x76, 0xe0, 0xd3, 0xd4, 0x0e, 0x79, 0x58, 0xd5, 0xc9, 0x82, 0x09, 0xb3, 0xed, 0x54, 0xb5, 0xfd, 0x9f, 0x9e, 0x77, 0x11, 0xe1, 0xdc, 0x68, 0x57, 0x73, 0xde, 0x26, 0xd5, 0x0a, 0x0a, 0xb6, 0x21, 0x62, 0x12, 0xce, 0xa5, 0x09, 0xce, 0x79, 0x1c, 0x5b, 0xcd, 0x07, 0xcb, 0x47 } -, - /* Coefficient */ - 65, - { 0x05, 0xfe, 0x93, 0x3b, 0x87, 0x3f, 0x1d, 0x68, 0xf6, 0xbe, 0x2d, 0x4d, 0x5a, 0xa2, 0x2d, 0x96, 0x8f, 0x2b, 0x7a, 0xf5, 0x41, 0xa2, 0xdc, 0xd6, 0x4e, 0x09, 0xc0, 0x30, 0xb1, 0x50, 0x35, 0x8a, 0x98, 0x02, 0xae, 0x86, 0x59, 0x95, 0xd7, 0x6a, 0x50, 0x03, 0x7d, 0x19, 0x8d, 0x7e, 0x70, 0x4d, 0x26, 0x84, 0x7a, 0xda, 0x8a, 0xe3, 0xd3, 0x85, 0xc2, 0x96, 0x5f, 0xb1, 0x7f, 0xcf, 0x15, 0x2f, 0x77 } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 12.1", - /* Message */ - 20, - { 0x7d, 0xe6, 0x9c, 0xd9, 0x22, 0x8b, 0xbc, 0xfb, 0x9a, 0x8c, 0xa8, 0xc6, 0xc3, 0xef, 0xaf, 0x05, 0x6f, 0xe4, 0xa7, 0xf4 } -, - /* Seed */ - 106, - { 0x33, 0xd6, 0x2c, 0xd6, 0x67, 0x82, 0x3f, 0xbf, 0x13, 0xd5, 0x92, 0xae, 0x4d, 0x02, 0xa2, 0x37, 0x0d, 0x1d, 0x99, 0xdb, 0x06, 0xc7, 0x25, 0x42, 0x5e, 0x0d, 0x12, 0xfc, 0xb4, 0x83, 0x4e, 0xf9, 0xe5, 0x49, 0x9d, 0x60, 0x7e, 0x8a, 0xae, 0xfe, 0xba, 0x81, 0x96, 0x49, 0xfb, 0x3d, 0x61, 0xc7, 0x05, 0xf5, 0xe9, 0xa3, 0xa2, 0xf8, 0x96, 0x27, 0x61, 0x89, 0xa3, 0x20, 0x0d, 0x2f, 0xaf, 0xf7, 0x76, 0x79, 0xe0, 0x56, 0x34, 0x9a, 0x5b, 0x9b, 0x7b, 0x44, 0x49, 0xb6, 0x75, 0xcd, 0x48, 0xb6, 0x98, 0x09, 0x32, 0xc2, 0xcf, 0xc4, 0x6b, 0xf8, 0x9a, 0x77, 0x34, 0xf6, 0x8d, 0xd9, 0xf4, 0xfe, 0x77, 0xe1, 0xd9, 0xcf, 0x1f, 0x31, 0xb2, 0x1c, 0x4c, 0x61 } -, - /* Encryption */ - 129, - { 0x04, 0xca, 0xef, 0xfc, 0xd5, 0x1c, 0x3f, 0xc9, 0x23, 0x63, 0x46, 0x77, 0x4d, 0xa0, 0xcf, 0xa7, 0x7e, 0x9e, 0x64, 0x65, 0xf6, 0x43, 0x7f, 0xf4, 0x6d, 0x9f, 0xa4, 0x58, 0xb3, 0x62, 0x34, 0x12, 0xc3, 0x10, 0x30, 0x09, 0xfb, 0xfe, 0x20, 0x31, 0x96, 0xdf, 0x72, 0x96, 0x26, 0xe0, 0xee, 0x3a, 0xfb, 0x6b, 0x10, 0xa5, 0xac, 0xd7, 0x2e, 0x84, 0x28, 0x1d, 0x9d, 0x9b, 0xcb, 0xa3, 0xe0, 0xef, 0x77, 0xdd, 0x84, 0xf3, 0xdb, 0x19, 0x2d, 0x31, 0xb5, 0xb6, 0x66, 0xf7, 0x6c, 0x93, 0x81, 0x06, 0x81, 0x37, 0x3b, 0xaa, 0x58, 0xe6, 0xda, 0xdb, 0x01, 0xfa, 0x5c, 0x65, 0xec, 0x89, 0xfa, 0x51, 0xcc, 0x24, 0x74, 0x61, 0x1b, 0x9a, 0x7c, 0xb0, 0x0e, 0x86, 0x2f, 0xd3, 0xd4, 0x9b, 0x1c, 0xd3, 0x1a, 0xfc, 0x2d, 0xb4, 0x49, 0xe0, 0x9d, 0xae, 0x2d, 0x0a, 0x7d, 0x4d, 0xf0, 0xbc, 0x32, 0x0b, 0x5a } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 12.2", - /* Message */ - 47, - { 0x97, 0xee, 0xa8, 0x56, 0xa9, 0xbd, 0xbc, 0x71, 0x4e, 0xb3, 0xac, 0x22, 0xf6, 0xeb, 0x32, 0x71, 0x96, 0x69, 0xc4, 0x2f, 0x94, 0x30, 0xc5, 0x89, 0x50, 0xc6, 0x4c, 0x0d, 0xab, 0xff, 0x3a, 0x9e, 0x20, 0x43, 0x41, 0x6c, 0x67, 0xca, 0xaa, 0xab, 0x7c, 0x68, 0xcc, 0xb3, 0xca, 0x99, 0xa3 } -, - /* Seed */ - 79, - { 0x9f, 0x14, 0x12, 0x61, 0xce, 0xc4, 0xf2, 0xc5, 0x2f, 0x96, 0x91, 0x25, 0xa3, 0x6f, 0x14, 0x10, 0x27, 0x08, 0x82, 0x50, 0xd3, 0x6b, 0x17, 0x42, 0x1c, 0xd0, 0x96, 0x14, 0x76, 0x19, 0x06, 0x46, 0x8a, 0xfa, 0xb7, 0x62, 0x2c, 0x0d, 0x02, 0x19, 0x36, 0x91, 0x74, 0x47, 0x91, 0xe0, 0xd3, 0x5b, 0x6b, 0xc9, 0xf3, 0x37, 0x7e, 0x10, 0xb2, 0x85, 0x6c, 0x8e, 0xd9, 0x19, 0x9c, 0x89, 0xf4, 0xa4, 0x16, 0x13, 0xd3, 0xc4, 0x0c, 0xca, 0x37, 0x3a, 0x7c, 0xc6, 0x3c, 0x52, 0x60, 0xfe, 0x5a } -, - /* Encryption */ - 129, - { 0x0d, 0x26, 0xa0, 0x5d, 0xe9, 0x3b, 0x70, 0x7b, 0x85, 0x40, 0xfd, 0xc1, 0x98, 0x89, 0xd2, 0xd1, 0xe7, 0x93, 0x71, 0x57, 0xd3, 0x2d, 0x30, 0x3c, 0x52, 0x8d, 0xe3, 0x5e, 0x55, 0x3f, 0x94, 0x20, 0x28, 0x74, 0x4a, 0xf6, 0xa0, 0x40, 0x2e, 0xca, 0x0f, 0xcf, 0x5a, 0x85, 0x26, 0x1a, 0xd4, 0x75, 0xd8, 0x71, 0x0c, 0xc9, 0xf8, 0xb1, 0x1b, 0xa2, 0xc6, 0xda, 0xf1, 0xd6, 0x72, 0x69, 0x0c, 0x68, 0xed, 0x11, 0xe0, 0x35, 0xe9, 0xc6, 0x60, 0xec, 0xe1, 0xd8, 0x0c, 0xda, 0xb8, 0x00, 0xea, 0xd3, 0xc6, 0xe0, 0x78, 0x61, 0x7a, 0x1b, 0x0d, 0x27, 0x3d, 0xed, 0xd8, 0xd6, 0x57, 0x49, 0x16, 0x6b, 0xd0, 0x77, 0x74, 0xfb, 0x4c, 0x14, 0x86, 0xaa, 0x8a, 0x0a, 0xdf, 0x59, 0x5d, 0xbc, 0x3d, 0x10, 0xff, 0xae, 0xf1, 0x83, 0x84, 0x98, 0xa6, 0x75, 0x55, 0xc7, 0x7b, 0x6e, 0xd9, 0x83, 0xd5, 0xb9, 0xde } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.3", - /* Message */ - 5, - { 0x8e, 0x3e, 0x77, 0x2f, 0x39 } -, - /* Seed */ - 121, - { 0x9e, 0xb7, 0x31, 0xfa, 0x6d, 0x8d, 0x5b, 0x75, 0x81, 0xf8, 0xfa, 0xd2, 0xc8, 0x22, 0x5b, 0xc9, 0x68, 0x34, 0xaf, 0x61, 0xdb, 0x3d, 0x40, 0x9d, 0xd5, 0x63, 0x04, 0xae, 0x23, 0xea, 0x62, 0x69, 0x63, 0xa4, 0xd8, 0x04, 0x40, 0xc2, 0x4e, 0x43, 0x1e, 0x41, 0x97, 0x60, 0x90, 0x3a, 0xc4, 0x4b, 0xfe, 0x41, 0xa7, 0x50, 0x81, 0xa5, 0x46, 0x2b, 0xae, 0x65, 0x47, 0xc0, 0xe7, 0xa0, 0x6e, 0x91, 0x60, 0xdf, 0x9c, 0x01, 0xfa, 0x6c, 0x53, 0x54, 0xc8, 0x33, 0x18, 0xdb, 0x65, 0x6d, 0xee, 0x0a, 0x43, 0x77, 0x87, 0xfa, 0x46, 0x39, 0x4e, 0x55, 0x2e, 0xa5, 0x33, 0x15, 0x59, 0xb4, 0x01, 0x7b, 0xb6, 0xa0, 0xe1, 0xd6, 0xfc, 0x8a, 0x65, 0xb4, 0x5d, 0xa0, 0xc4, 0x5d, 0x88, 0x95, 0x48, 0x61, 0xcd, 0x6e, 0x7a, 0x41, 0x7e, 0x03, 0x7b, 0x1b, 0x05 } -, - /* Encryption */ - 129, - { 0x24, 0x4a, 0x86, 0x34, 0x51, 0x9a, 0xf4, 0x9f, 0x56, 0x9b, 0x69, 0x86, 0xab, 0x47, 0x79, 0x64, 0xa6, 0xb2, 0x92, 0x0d, 0x84, 0x3a, 0x1d, 0x97, 0xef, 0xd7, 0xfe, 0xf8, 0x3e, 0x81, 0xba, 0xda, 0x4c, 0x4b, 0x56, 0x29, 0x61, 0xef, 0x4e, 0x1f, 0xc3, 0x33, 0x46, 0x4b, 0x92, 0x6b, 0xd7, 0x4b, 0x07, 0xad, 0x50, 0xc6, 0x5b, 0x68, 0x16, 0x83, 0xd3, 0x89, 0xfe, 0x41, 0xd6, 0xd2, 0x13, 0xb6, 0x46, 0x9f, 0x18, 0x2b, 0x14, 0xb4, 0x62, 0xd7, 0x2c, 0x1c, 0xe3, 0x92, 0x8c, 0xa8, 0x06, 0xd9, 0x66, 0xb5, 0x2d, 0x42, 0xd0, 0xbf, 0xd6, 0x0c, 0x9d, 0x04, 0x91, 0x4d, 0x50, 0x83, 0x7c, 0xda, 0xe0, 0x9b, 0x33, 0x0e, 0x37, 0x27, 0x44, 0xdc, 0xe1, 0x7f, 0x18, 0xe9, 0x4d, 0x71, 0x1c, 0x8b, 0x58, 0xea, 0x44, 0x9f, 0x14, 0x49, 0xd3, 0x69, 0xfa, 0xef, 0x51, 0x46, 0x83, 0xd3, 0x01, 0x60, 0x79 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.4", - /* Message */ - 20, - { 0xdc, 0xfa, 0xe7, 0x71, 0x8c, 0x24, 0x7c, 0x40, 0xf9, 0xa2, 0xa3, 0xc3, 0x53, 0x5c, 0x50, 0x92, 0x80, 0xc8, 0x73, 0xc3 } -, - /* Seed */ - 106, - { 0xb9, 0x3b, 0xbe, 0xa6, 0xc1, 0x85, 0x3f, 0x15, 0x3b, 0x5e, 0x01, 0xe7, 0xe4, 0xe5, 0xd0, 0xc6, 0x3d, 0x9d, 0xfb, 0x24, 0x5f, 0xc6, 0xcf, 0x64, 0x04, 0x3d, 0x7a, 0x92, 0x20, 0xb0, 0xb8, 0x1a, 0xc2, 0xaf, 0x65, 0x6b, 0x99, 0x71, 0x4b, 0xa4, 0x30, 0xe0, 0xa3, 0x96, 0x95, 0xd2, 0x5f, 0xf2, 0x69, 0xb0, 0xb9, 0xb8, 0x65, 0xfc, 0x4d, 0x4e, 0xee, 0x5e, 0x07, 0xa5, 0xb5, 0xbe, 0x35, 0x43, 0x82, 0xaa, 0xa4, 0x14, 0xbc, 0x62, 0x08, 0x54, 0x5c, 0x86, 0xce, 0x02, 0x38, 0x8c, 0x07, 0xb3, 0x76, 0xfb, 0x02, 0x98, 0xc3, 0x7d, 0x1a, 0xc3, 0x9e, 0xa1, 0x89, 0xb0, 0xad, 0xf7, 0x80, 0xf6, 0xe8, 0x30, 0xbc, 0xe9, 0x17, 0xb5, 0x0a, 0xdb, 0x7a, 0x31 } -, - /* Encryption */ - 129, - { 0x0c, 0x41, 0x20, 0x52, 0xd4, 0xef, 0x4a, 0xb5, 0x1b, 0x2f, 0x62, 0x37, 0x05, 0xf0, 0x7f, 0x41, 0xfa, 0xd6, 0x4d, 0xaf, 0xfd, 0xba, 0x62, 0x44, 0xef, 0xd4, 0x7f, 0x51, 0x9d, 0xe2, 0xe7, 0x1a, 0x01, 0xa6, 0xc5, 0x7d, 0x1f, 0x28, 0xb6, 0xbf, 0x7b, 0x5c, 0x8d, 0xbb, 0x9f, 0xe7, 0xb1, 0x49, 0xb0, 0xeb, 0xaa, 0x53, 0x59, 0x61, 0x99, 0x37, 0x6d, 0xf4, 0x90, 0x32, 0x3d, 0x25, 0xc2, 0x17, 0xbc, 0x71, 0xbe, 0x37, 0xf1, 0x81, 0x03, 0x5c, 0xf4, 0x57, 0xeb, 0x5c, 0x06, 0xd6, 0xa3, 0xde, 0xd3, 0xd6, 0x6d, 0x5b, 0x35, 0xf0, 0x61, 0x81, 0xbf, 0x94, 0xd0, 0xec, 0x13, 0xec, 0x44, 0x7c, 0x70, 0x82, 0x33, 0x49, 0x1c, 0x55, 0x4f, 0x9e, 0x99, 0x1f, 0x6b, 0xcb, 0x8b, 0x78, 0xd3, 0x3c, 0x9c, 0x36, 0x95, 0x5b, 0x8d, 0xce, 0x51, 0x79, 0xff, 0x8b, 0xc5, 0x92, 0x44, 0xf6, 0x67, 0x90, 0x87 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.5", - /* Message */ - 42, - { 0xd7, 0x1d, 0xd8, 0x7a, 0x13, 0x99, 0x1a, 0x0d, 0xa2, 0xc7, 0x4a, 0x58, 0xb0, 0x48, 0x56, 0x34, 0xb3, 0xe0, 0x4f, 0xec, 0x9e, 0x3f, 0x1c, 0xf2, 0x60, 0x4a, 0x93, 0xbe, 0xd7, 0x96, 0x96, 0xfa, 0x63, 0x78, 0xeb, 0x1b, 0xa0, 0xe5, 0xd2, 0x04, 0x70, 0xa4 } -, - /* Seed */ - 84, - { 0x09, 0x90, 0x59, 0x92, 0x58, 0xe9, 0x7a, 0x2e, 0xbf, 0xbe, 0x10, 0x97, 0x72, 0x25, 0xc4, 0x16, 0x76, 0x2e, 0x95, 0xd2, 0x55, 0x3a, 0x80, 0x1f, 0x72, 0x6c, 0xc2, 0x49, 0xbc, 0xdf, 0x32, 0x21, 0x32, 0x58, 0x57, 0x19, 0xfc, 0x12, 0x39, 0x9a, 0xcd, 0x72, 0x54, 0xae, 0x77, 0xda, 0x34, 0x3f, 0xe2, 0xa9, 0xa3, 0xac, 0xb1, 0x1c, 0x14, 0xe2, 0x14, 0xe2, 0xd8, 0x5a, 0x76, 0x70, 0x8c, 0x3e, 0x72, 0x17, 0x3d, 0xa5, 0xd9, 0x90, 0x58, 0xe0, 0xc8, 0x70, 0x9e, 0xdf, 0x28, 0xc3, 0x69, 0x38, 0x76, 0x9f, 0x1f, 0x22 } -, - /* Encryption */ - 129, - { 0x0f, 0xf9, 0xcc, 0xe7, 0xb6, 0x9d, 0x7f, 0xca, 0x48, 0xd7, 0xc4, 0xf6, 0xcc, 0xff, 0x24, 0x8c, 0x3d, 0xb8, 0x8b, 0xf1, 0xb7, 0x85, 0x2c, 0xd9, 0xd8, 0x52, 0x5c, 0x3b, 0x41, 0xe4, 0x4a, 0x9b, 0x54, 0x0f, 0x20, 0x8f, 0xfb, 0xb8, 0xc8, 0x5b, 0xfa, 0x89, 0x0a, 0xc0, 0x2e, 0x99, 0x49, 0x59, 0xd6, 0xb0, 0x7f, 0x64, 0x81, 0x40, 0x78, 0x55, 0x6f, 0x8e, 0xc6, 0x0d, 0xb3, 0x57, 0xac, 0xea, 0xf8, 0x39, 0x11, 0x5f, 0xad, 0x41, 0xf8, 0x91, 0x8d, 0x69, 0xc2, 0x1a, 0x3a, 0xff, 0xef, 0x6e, 0xb1, 0x4a, 0x5d, 0x2c, 0xd0, 0x64, 0x5c, 0xd7, 0x06, 0xb5, 0x81, 0x43, 0x39, 0x4a, 0x27, 0x35, 0x36, 0x82, 0xe3, 0xba, 0xa1, 0x98, 0x00, 0x2e, 0x16, 0x80, 0xf2, 0x8f, 0x34, 0xbe, 0x08, 0x9a, 0x57, 0x84, 0xac, 0xe5, 0xca, 0x6b, 0x11, 0x08, 0x99, 0xdf, 0xb9, 0x58, 0x2f, 0x2e, 0x4b, 0x2a, 0x40 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.6", - /* Message */ - 58, - { 0x5e, 0x4b, 0x15, 0x8f, 0x8d, 0xcb, 0xcd, 0xd7, 0xe3, 0x08, 0x38, 0x5b, 0x40, 0x19, 0x0f, 0x5d, 0xef, 0x8c, 0xf3, 0x30, 0x5f, 0xc4, 0x9d, 0xe6, 0x3c, 0x9e, 0x35, 0xb4, 0x02, 0x36, 0xae, 0xe1, 0xf4, 0x56, 0x20, 0x5a, 0x52, 0x67, 0xa2, 0xaa, 0x7d, 0x88, 0xcb, 0x2c, 0x11, 0xaf, 0x7f, 0x28, 0x99, 0xd0, 0x1d, 0xa1, 0xb2, 0xc7, 0x46, 0x6f, 0xfe, 0xf7 } -, - /* Seed */ - 68, - { 0xa5, 0x22, 0xf9, 0x80, 0x8d, 0x9c, 0x01, 0xd8, 0xff, 0x79, 0x77, 0x5f, 0x7b, 0x22, 0x09, 0x8f, 0xc5, 0xfe, 0x32, 0x54, 0xe1, 0xb0, 0x4e, 0xb1, 0xcb, 0x85, 0x0e, 0x10, 0xe2, 0xc5, 0x06, 0x5e, 0x23, 0x27, 0x4d, 0xc0, 0xa0, 0x55, 0x87, 0x43, 0x6d, 0xa3, 0x75, 0x59, 0x33, 0x5f, 0xe7, 0x09, 0x3f, 0xa5, 0xe7, 0xa2, 0xa9, 0xc9, 0xa4, 0xdc, 0xaf, 0x23, 0x51, 0x79, 0xd0, 0xe9, 0x8f, 0xa3, 0x3e, 0x34, 0xb6, 0x16 } -, - /* Encryption */ - 129, - { 0x1c, 0x0e, 0x86, 0xa6, 0x36, 0x6b, 0xeb, 0x1e, 0x12, 0xd6, 0xbc, 0xfa, 0x6a, 0xd4, 0x94, 0x06, 0xc8, 0xb7, 0xe4, 0x8d, 0x1d, 0x5b, 0xe4, 0x5c, 0xbd, 0x83, 0x19, 0x49, 0x87, 0x49, 0x6f, 0xaa, 0x3e, 0x21, 0x92, 0x7e, 0xc6, 0x62, 0xf5, 0x02, 0xac, 0x3f, 0x91, 0xa4, 0xb4, 0xb9, 0x1d, 0x16, 0x0c, 0x19, 0x86, 0xa5, 0xed, 0x09, 0x27, 0x66, 0x88, 0x3b, 0x85, 0x55, 0xe3, 0xc9, 0x31, 0x4b, 0x44, 0xba, 0x33, 0x83, 0xdb, 0x28, 0x74, 0x23, 0xaf, 0x91, 0xb4, 0x13, 0x91, 0x8c, 0x08, 0x02, 0xc7, 0x77, 0x8e, 0x46, 0xc2, 0x96, 0xdc, 0x9f, 0x04, 0xcd, 0xb8, 0xb0, 0x6a, 0xdc, 0x7c, 0x53, 0xd8, 0x59, 0xf4, 0x42, 0xcc, 0xbd, 0x5f, 0xfa, 0xb5, 0xaf, 0x75, 0x2b, 0x97, 0x9b, 0xf5, 0x23, 0xa4, 0x0a, 0x1d, 0x08, 0xd7, 0x60, 0x63, 0xff, 0xb3, 0xd5, 0xcf, 0xc8, 0x2f, 0x15, 0xeb, 0xd6, 0xd4 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.7", - /* Message */ - 58, - { 0x35, 0x9b, 0xa5, 0x07, 0x56, 0xa8, 0x03, 0x30, 0x40, 0x9d, 0x3f, 0x23, 0x6a, 0x34, 0x0b, 0x90, 0xf4, 0x2f, 0x73, 0x2a, 0x87, 0x71, 0x1f, 0xe2, 0x23, 0x52, 0xd4, 0xc8, 0x25, 0x0d, 0x45, 0x47, 0x5e, 0x32, 0xb9, 0x58, 0x83, 0xe1, 0x60, 0x97, 0x55, 0xa1, 0x3c, 0xdf, 0xc1, 0xbf, 0x39, 0x4c, 0x5c, 0x67, 0x36, 0x9e, 0xca, 0x1f, 0x9a, 0x33, 0xe8, 0xba } -, - /* Seed */ - 68, - { 0xf9, 0xeb, 0xdd, 0xac, 0x9d, 0xe1, 0x70, 0x9a, 0x06, 0xbf, 0x6b, 0xbd, 0xdf, 0x58, 0x94, 0xe2, 0x3b, 0x96, 0x2b, 0xa0, 0xc0, 0x64, 0xbf, 0xcd, 0x7c, 0xc5, 0x76, 0x60, 0x3b, 0x0a, 0x1a, 0x1f, 0xf3, 0x5d, 0x64, 0x5e, 0xe8, 0x7a, 0xc6, 0xf8, 0x21, 0xa6, 0xa1, 0x51, 0xe6, 0xbb, 0xb0, 0x5b, 0xf3, 0xe0, 0x5c, 0xd9, 0xa6, 0xe2, 0xcd, 0x9c, 0x6c, 0xf5, 0x53, 0xbf, 0xb0, 0x7b, 0xd2, 0xfd, 0xa0, 0x40, 0xdf, 0xb6 } -, - /* Encryption */ - 129, - { 0x08, 0x33, 0x60, 0xe6, 0x49, 0x05, 0x9d, 0x00, 0x65, 0x8d, 0xba, 0x21, 0xf2, 0xdf, 0x28, 0xa2, 0x76, 0x4c, 0x45, 0x89, 0xf7, 0xa7, 0x7d, 0x5a, 0xf9, 0x95, 0x79, 0xa8, 0xab, 0x44, 0x80, 0xc8, 0x26, 0xa7, 0x7c, 0x2f, 0xb7, 0x95, 0x4f, 0x4f, 0x31, 0xfe, 0x1d, 0x9e, 0xb1, 0xbf, 0x40, 0xe8, 0x09, 0x57, 0x7f, 0x39, 0x30, 0x1a, 0xd3, 0xab, 0x95, 0xb3, 0x81, 0x6c, 0x90, 0xec, 0x3f, 0x1c, 0xd6, 0x29, 0xc4, 0x39, 0x61, 0x74, 0xbe, 0xd9, 0xfe, 0x1e, 0x0f, 0x47, 0x68, 0x23, 0xe5, 0x3b, 0x41, 0xd1, 0x35, 0xb4, 0x9a, 0x02, 0xb0, 0x0e, 0xff, 0xc7, 0x61, 0xec, 0x90, 0x94, 0x23, 0xaf, 0x15, 0x85, 0x52, 0x37, 0xb7, 0x7e, 0xe0, 0x7d, 0xf2, 0x5a, 0xb4, 0xe8, 0x58, 0x46, 0x7d, 0x4c, 0xcf, 0xe8, 0x08, 0x43, 0x24, 0x1b, 0xbf, 0x88, 0xeb, 0x4f, 0x85, 0x3e, 0xf4, 0xb4, 0x3b, 0xa3, 0xac } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.8", - /* Message */ - 25, - { 0xa9, 0xf3, 0x9f, 0x8b, 0xa0, 0x64, 0x66, 0x25, 0x0c, 0x26, 0x5d, 0xf0, 0xca, 0x46, 0x57, 0x0a, 0x16, 0x01, 0x12, 0xcf, 0x38, 0xfd, 0x74, 0x59, 0x99 } -, - /* Seed */ - 101, - { 0x88, 0xb3, 0xc2, 0x8b, 0xd3, 0x99, 0x9a, 0x86, 0x0b, 0x8d, 0xe7, 0x75, 0x93, 0x5b, 0x8e, 0xd7, 0x8f, 0xa2, 0xf2, 0x7c, 0x26, 0x8b, 0x24, 0x3a, 0x02, 0x45, 0xaf, 0x86, 0x72, 0x25, 0x47, 0x19, 0xf2, 0x3a, 0x4b, 0x7f, 0xed, 0xc0, 0x0d, 0x54, 0xe1, 0x2e, 0x9d, 0x70, 0x1f, 0x64, 0x69, 0x94, 0x24, 0xb6, 0xb8, 0x7d, 0x14, 0xd9, 0x67, 0x6e, 0xfa, 0x95, 0x9b, 0xe2, 0x1a, 0x04, 0xb6, 0x43, 0x5d, 0x25, 0x10, 0x03, 0xdd, 0x15, 0x3d, 0x7d, 0x08, 0xff, 0x28, 0xd9, 0x3a, 0x93, 0x20, 0xdc, 0x1b, 0xbc, 0x3d, 0xb3, 0x97, 0xa5, 0x48, 0x94, 0xf2, 0x05, 0x79, 0xf9, 0x3e, 0x4e, 0xad, 0x65, 0xc3, 0x1a, 0x40, 0x7e, 0xb4 } -, - /* Encryption */ - 129, - { 0x19, 0x83, 0x96, 0x50, 0xb9, 0x25, 0xf1, 0xf9, 0x6d, 0x61, 0x1e, 0x4d, 0xbb, 0x91, 0x49, 0x93, 0x54, 0x5c, 0x67, 0x39, 0x0c, 0x32, 0x93, 0x5f, 0xbf, 0x82, 0x25, 0x9d, 0xad, 0x10, 0xf2, 0x37, 0x30, 0xeb, 0x48, 0xf3, 0x42, 0x00, 0x46, 0x5a, 0x20, 0x38, 0x72, 0x77, 0xe2, 0xb9, 0x61, 0xe0, 0x83, 0x18, 0xd2, 0x07, 0x74, 0x47, 0xc9, 0x10, 0x92, 0x71, 0xe4, 0xde, 0xd8, 0xff, 0x3d, 0xc4, 0xf3, 0x79, 0xee, 0xe4, 0x55, 0xae, 0x96, 0x08, 0x1a, 0x1a, 0xe2, 0x4b, 0x96, 0xca, 0x73, 0x0a, 0x62, 0xf7, 0xac, 0xc5, 0xa5, 0xea, 0x52, 0x28, 0xe3, 0xa4, 0x8e, 0xa6, 0x74, 0x1c, 0xb3, 0x0e, 0x82, 0x9d, 0x55, 0x09, 0xcc, 0xc6, 0xc2, 0x87, 0xc7, 0x29, 0x1f, 0x3a, 0x1d, 0x89, 0xd6, 0x26, 0xbc, 0x98, 0x15, 0x77, 0xde, 0x52, 0xa1, 0x1f, 0x12, 0xae, 0x21, 0x43, 0xd3, 0xb0, 0xb5, 0x2f, 0x86 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.9", - /* Message */ - 1, - { 0x68 } -, - /* Seed */ - 125, - { 0x53, 0x8b, 0x09, 0x5e, 0x4f, 0x2a, 0xd6, 0x77, 0x30, 0x68, 0x74, 0x21, 0x91, 0x52, 0x42, 0x25, 0x1d, 0x07, 0xf6, 0x61, 0xed, 0xac, 0x7f, 0xe7, 0x9e, 0x31, 0xd6, 0xc3, 0x45, 0xaf, 0xf5, 0x9d, 0xf3, 0x88, 0xc7, 0x18, 0x2f, 0xff, 0x0c, 0x04, 0x27, 0xb5, 0x99, 0x35, 0xc6, 0x91, 0xda, 0xb8, 0xbc, 0x42, 0xbe, 0x47, 0xd7, 0x69, 0x11, 0x88, 0x0d, 0x91, 0x7b, 0x86, 0x27, 0x18, 0xb4, 0xc1, 0xc1, 0x88, 0x8d, 0x42, 0x20, 0xb9, 0xf8, 0x23, 0x1a, 0xcd, 0xf1, 0x2d, 0x9b, 0x85, 0x18, 0x6b, 0xe0, 0x95, 0x0c, 0x1a, 0xff, 0x84, 0xcd, 0x0f, 0xe3, 0x65, 0x86, 0xa5, 0x0e, 0x7e, 0x04, 0xb1, 0x72, 0xca, 0x9c, 0x85, 0x9e, 0x2d, 0xed, 0x6b, 0x8e, 0xa5, 0x79, 0xdd, 0x5e, 0x6e, 0xee, 0x77, 0x2c, 0xca, 0xa6, 0xb4, 0xa5, 0xd8, 0xab, 0x17, 0x31, 0xa8, 0x35, 0xd6, 0xa8 } -, - /* Encryption */ - 129, - { 0x1e, 0x86, 0x8a, 0xdb, 0x0e, 0x65, 0x32, 0x80, 0x60, 0x4e, 0x8d, 0x3b, 0xc4, 0xd9, 0x69, 0x84, 0xa2, 0x0a, 0xa0, 0x9d, 0x48, 0x0b, 0x4d, 0xff, 0xac, 0x62, 0xba, 0x78, 0xcb, 0xb7, 0xee, 0xd0, 0x64, 0x5a, 0x6d, 0x94, 0xd9, 0xd2, 0xf2, 0xd1, 0xe9, 0x17, 0xc1, 0x46, 0xb4, 0x1f, 0xaa, 0x3d, 0x1d, 0x2c, 0x19, 0x01, 0x05, 0x36, 0x8f, 0xb4, 0x84, 0x06, 0xa1, 0xd2, 0x42, 0x6a, 0xf3, 0xdc, 0xc8, 0x5b, 0xd0, 0x2d, 0x5c, 0x26, 0xc8, 0x97, 0xcc, 0xb2, 0x2e, 0x57, 0x59, 0x12, 0x64, 0x1a, 0x18, 0x8e, 0xf4, 0xac, 0x47, 0xa0, 0xa9, 0xfe, 0x9a, 0xa2, 0x70, 0x6d, 0x8e, 0x10, 0x61, 0xf5, 0xd9, 0x30, 0x63, 0xf4, 0x90, 0x17, 0x00, 0x3b, 0x23, 0x09, 0xca, 0x7d, 0x8d, 0x36, 0x70, 0x3b, 0xfd, 0xda, 0x3f, 0x7f, 0x43, 0xdf, 0x15, 0x8a, 0x15, 0xbb, 0x22, 0x13, 0x9a, 0xae, 0x15, 0x10, 0x77 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.10", - /* Message */ - 23, - { 0x35, 0x65, 0x87, 0xe6, 0xc6, 0xc0, 0xb4, 0x6c, 0x24, 0x45, 0xe0, 0x18, 0x63, 0x52, 0x76, 0xab, 0x84, 0x5f, 0xd1, 0x07, 0x6d, 0x10, 0x7f } -, - /* Seed */ - 103, - { 0xe5, 0xd3, 0x3e, 0x4d, 0x93, 0xc7, 0x08, 0x44, 0xee, 0x4a, 0x01, 0x65, 0x56, 0x24, 0x2d, 0x08, 0xe8, 0xe6, 0x2f, 0x1a, 0x7f, 0x79, 0x47, 0x79, 0xe2, 0x23, 0xee, 0x9d, 0xfb, 0x23, 0x1c, 0x3a, 0x52, 0x0f, 0x29, 0x7e, 0x50, 0x73, 0xe4, 0xf9, 0x2f, 0x53, 0x5c, 0xf1, 0x44, 0x55, 0x7f, 0x94, 0xee, 0x1e, 0x1e, 0x5c, 0xc6, 0xbf, 0x4c, 0x0c, 0x0c, 0x8e, 0x5e, 0xd4, 0x0d, 0x06, 0x63, 0x56, 0x06, 0xf7, 0x54, 0xcc, 0x2d, 0xd8, 0x3f, 0xe0, 0x2c, 0x57, 0x6c, 0xcd, 0x2b, 0x83, 0x5f, 0xd0, 0xf5, 0x3a, 0x99, 0x08, 0x3f, 0x4d, 0x15, 0xbf, 0xe9, 0x26, 0x88, 0x99, 0xef, 0x09, 0xff, 0x5f, 0x2f, 0x3c, 0xec, 0x9f, 0x9b, 0x8a, 0x7e } -, - /* Encryption */ - 129, - { 0x15, 0xd3, 0x64, 0xa4, 0x49, 0x9b, 0x30, 0xa5, 0xf7, 0x8b, 0x6d, 0x7d, 0x4f, 0x66, 0x7a, 0x1f, 0x76, 0xd7, 0x15, 0x15, 0x8f, 0x28, 0x01, 0x19, 0xb0, 0x55, 0xe1, 0xf2, 0x66, 0x3f, 0xc7, 0x96, 0xe3, 0x3c, 0x0e, 0xb6, 0x4e, 0x34, 0xa8, 0xda, 0xda, 0x5c, 0x81, 0x75, 0x42, 0x57, 0xa8, 0xbd, 0xf0, 0xed, 0x81, 0x15, 0xf6, 0x07, 0xb7, 0xc9, 0xcc, 0xa4, 0x81, 0xf7, 0x45, 0x20, 0xb6, 0xd9, 0xac, 0x98, 0xf5, 0xe7, 0x2c, 0x2b, 0xaf, 0x3c, 0xbb, 0x6b, 0xd9, 0xba, 0xea, 0x5d, 0x75, 0x86, 0x0c, 0xbd, 0xae, 0x34, 0x03, 0xfd, 0x5c, 0x37, 0x96, 0x4a, 0xae, 0x64, 0x36, 0x6a, 0xb0, 0x9b, 0xc9, 0xc6, 0x72, 0x76, 0x95, 0x14, 0x48, 0x19, 0x3b, 0xb4, 0xb1, 0xaf, 0xa2, 0x70, 0x79, 0xc3, 0x41, 0x70, 0xa2, 0x69, 0x56, 0x51, 0x0d, 0x44, 0x27, 0x64, 0x22, 0x99, 0x08, 0x42, 0x0f, 0xe8, 0x0a } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.11", - /* Message */ - 64, - { 0xe1, 0x53, 0x27, 0x6a, 0x68, 0x79, 0x67, 0x8f, 0xee, 0x19, 0x89, 0x48, 0x28, 0xd6, 0x26, 0x2e, 0xa3, 0x9a, 0xd0, 0x54, 0xc8, 0x9e, 0xdc, 0xb2, 0x3f, 0x72, 0xdc, 0xda, 0x1b, 0x00, 0x73, 0xc2, 0x87, 0x62, 0x02, 0x18, 0xd9, 0x2d, 0x0e, 0xb3, 0x0c, 0x62, 0xaf, 0xbf, 0x2b, 0x45, 0xdf, 0x62, 0xd0, 0x66, 0x65, 0xf8, 0x05, 0x25, 0xb6, 0x72, 0x7f, 0x95, 0xe3, 0x42, 0x29, 0xe6, 0x82, 0xa8 } -, - /* Seed */ - 62, - { 0x2a, 0xd7, 0x14, 0x2f, 0xcf, 0xa3, 0xbd, 0xbe, 0xb7, 0x55, 0xb2, 0xc5, 0xb5, 0xcf, 0x13, 0xe6, 0x96, 0x9e, 0xb7, 0x3b, 0x7a, 0x06, 0xbc, 0x29, 0xbc, 0xad, 0x7e, 0x75, 0x30, 0xa5, 0x90, 0x23, 0x0f, 0x6a, 0x43, 0xfc, 0x03, 0xd6, 0xc3, 0xa9, 0xc6, 0x41, 0xe5, 0x3a, 0x41, 0x77, 0xd5, 0x75, 0x02, 0x91, 0xec, 0x6d, 0x4b, 0x33, 0xf8, 0x71, 0x66, 0x8a, 0xd8, 0x56, 0x90, 0x77 } -, - /* Encryption */ - 129, - { 0x17, 0x8e, 0x49, 0x77, 0x0a, 0x4c, 0x8f, 0xfb, 0x7f, 0x65, 0xf3, 0x82, 0xcd, 0xb5, 0x76, 0xe6, 0x08, 0xe9, 0x75, 0xc4, 0x37, 0x13, 0x39, 0x10, 0x2b, 0x95, 0x2a, 0x1e, 0x71, 0xcb, 0xcb, 0x91, 0xfd, 0xcd, 0x0c, 0x0e, 0xd5, 0xa8, 0x5f, 0xbd, 0x26, 0x3d, 0xa6, 0xa7, 0x4e, 0x49, 0x1f, 0xb0, 0x4b, 0x60, 0xa5, 0x96, 0x1d, 0x8e, 0x6a, 0xc7, 0x24, 0xec, 0x8a, 0x81, 0x61, 0xc2, 0x2a, 0xe3, 0x10, 0x40, 0x7f, 0x59, 0xf7, 0xe6, 0x02, 0xda, 0x48, 0xaa, 0x2d, 0xad, 0x68, 0x3e, 0x88, 0xdb, 0x1d, 0x84, 0x29, 0x5e, 0x0f, 0xba, 0x5f, 0xf2, 0xf6, 0x73, 0xdf, 0x32, 0x85, 0x4d, 0x01, 0xb7, 0x1a, 0x89, 0x46, 0x0f, 0xf0, 0xe6, 0xe1, 0xbe, 0x98, 0xae, 0xbf, 0xa2, 0x27, 0xe3, 0x97, 0xea, 0xcc, 0x8b, 0x23, 0x17, 0x41, 0x47, 0xc4, 0x4e, 0x16, 0x20, 0x1e, 0xc6, 0xba, 0xbd, 0x16, 0x5b, 0xa4 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.12", - /* Message */ - 15, - { 0xfa, 0x4e, 0xb9, 0x31, 0xa7, 0xe2, 0x09, 0x0f, 0x31, 0xed, 0xb1, 0xff, 0x7d, 0x83, 0x61 } -, - /* Seed */ - 111, - { 0x43, 0x7f, 0xa1, 0x51, 0xf4, 0x34, 0x05, 0xdb, 0x22, 0x42, 0x2c, 0xb3, 0x5d, 0x1c, 0x57, 0x61, 0x16, 0x1c, 0xb9, 0xa7, 0x8a, 0xbc, 0xb6, 0xf0, 0x6d, 0xc4, 0xe7, 0xa8, 0x69, 0x48, 0x1f, 0x40, 0xb2, 0x1a, 0xe1, 0xd3, 0x3e, 0x07, 0x5c, 0x48, 0x5c, 0xd8, 0x50, 0x1a, 0x3c, 0xaa, 0x60, 0x18, 0x32, 0x5b, 0x7f, 0x85, 0x0d, 0x4d, 0x8f, 0x6d, 0xcf, 0xd2, 0xaf, 0xfe, 0x19, 0xd3, 0xe6, 0xc7, 0x08, 0x74, 0xe7, 0x10, 0x11, 0x14, 0xf0, 0xfb, 0xb9, 0x82, 0x25, 0x81, 0xba, 0xe6, 0xba, 0x2b, 0xa1, 0xe7, 0x49, 0x88, 0x81, 0xa5, 0xdc, 0x5b, 0xb8, 0x85, 0x27, 0x38, 0xa8, 0x2f, 0xb0, 0x6d, 0x15, 0x27, 0xb4, 0x33, 0x44, 0x87, 0xb3, 0x24, 0x01, 0x3e, 0x32, 0xbc, 0xf1, 0x7b, 0xab } -, - /* Encryption */ - 129, - { 0x22, 0x6d, 0x77, 0x67, 0x00, 0xc5, 0xe1, 0xdd, 0xb9, 0x99, 0x4b, 0x32, 0x91, 0xf1, 0xd3, 0x34, 0xb6, 0x9d, 0xd8, 0x63, 0x06, 0x5f, 0xa8, 0x34, 0x21, 0xe0, 0x1d, 0x52, 0x06, 0xec, 0x2c, 0xdb, 0x89, 0x90, 0xcf, 0x78, 0x97, 0x31, 0x09, 0xdc, 0x9f, 0x12, 0x6b, 0x60, 0x33, 0xd6, 0xd5, 0xd6, 0x91, 0x8e, 0xc8, 0x50, 0xd6, 0x9c, 0x71, 0x3c, 0xb5, 0xbb, 0xe3, 0x2e, 0xe5, 0x9e, 0x44, 0x5b, 0xcb, 0x4e, 0x50, 0xc6, 0xf1, 0x64, 0x43, 0x4d, 0x2a, 0x6c, 0xa6, 0x39, 0x69, 0xa2, 0x9b, 0x25, 0x03, 0x64, 0x15, 0xb0, 0xf7, 0xcb, 0x21, 0xb4, 0xf8, 0xb3, 0x4a, 0x8d, 0x9b, 0x74, 0x65, 0x3f, 0xff, 0x4f, 0x5d, 0xb9, 0xd1, 0xa6, 0xb5, 0x15, 0x2a, 0x64, 0x48, 0x36, 0xb6, 0x8b, 0x8e, 0xde, 0x9d, 0xc5, 0xa1, 0x69, 0xdc, 0x60, 0xdc, 0x5f, 0xac, 0x46, 0x8f, 0x24, 0x27, 0x84, 0x58, 0x10, 0x62 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.13", - /* Message */ - 49, - { 0x58, 0x81, 0x15, 0xe5, 0x37, 0x09, 0xeb, 0x15, 0xa3, 0x37, 0x4c, 0x25, 0x32, 0x9e, 0x88, 0x38, 0x26, 0xe3, 0x21, 0x3f, 0x37, 0xa1, 0xb7, 0xa6, 0x5d, 0xe1, 0x2d, 0xf2, 0x31, 0x72, 0xf1, 0x7f, 0xa4, 0x96, 0xff, 0x49, 0x2b, 0x09, 0x17, 0x3b, 0xa0, 0xc6, 0xf5, 0x8c, 0x29, 0x3d, 0x47, 0xf1, 0x48 } -, - /* Seed */ - 77, - { 0x07, 0x81, 0x85, 0xe0, 0x83, 0xcb, 0xb0, 0x6f, 0xe1, 0xa7, 0x49, 0x74, 0x35, 0x15, 0xf3, 0xa0, 0xb4, 0xb2, 0x6f, 0x85, 0x3b, 0x10, 0xe5, 0x68, 0xe8, 0x70, 0x82, 0xce, 0x44, 0x41, 0x2c, 0xa6, 0x7e, 0x59, 0x88, 0x8c, 0xcc, 0x0f, 0x50, 0x31, 0x01, 0x52, 0x1a, 0xca, 0xbf, 0xd9, 0x8f, 0xb7, 0xb5, 0xc1, 0x1d, 0x8a, 0x94, 0x1b, 0xa0, 0x3c, 0x49, 0x5a, 0xa0, 0x3e, 0x13, 0x52, 0x2f, 0x48, 0x7f, 0x6e, 0x16, 0x16, 0xbe, 0xc2, 0x07, 0x2b, 0x39, 0x96, 0xfa, 0xee, 0x29 } -, - /* Encryption */ - 129, - { 0x0e, 0x7e, 0x50, 0xa7, 0xb2, 0x47, 0xb0, 0x29, 0x7d, 0xec, 0x65, 0xc9, 0x52, 0x3f, 0x67, 0xca, 0xb6, 0xb5, 0x2a, 0x02, 0x5f, 0x53, 0x32, 0x0e, 0x94, 0x86, 0xcd, 0x20, 0x74, 0x10, 0xca, 0xdc, 0x74, 0xe4, 0xb0, 0x3f, 0xc0, 0x6b, 0xbe, 0xd5, 0x98, 0xb0, 0x22, 0xb6, 0x3b, 0x37, 0x76, 0x2a, 0x65, 0xfd, 0x35, 0x1c, 0xb2, 0x72, 0x7f, 0x3d, 0x80, 0x35, 0xa4, 0xcd, 0xba, 0x9c, 0x6a, 0x31, 0xe4, 0xed, 0x6b, 0xeb, 0x4f, 0xed, 0x31, 0x34, 0xeb, 0x63, 0xdf, 0xce, 0xab, 0x4f, 0x5f, 0x24, 0x59, 0xe5, 0x9f, 0xca, 0x01, 0x74, 0x75, 0x8a, 0xab, 0x37, 0x53, 0xb5, 0xc1, 0x93, 0xc8, 0x1e, 0x11, 0x49, 0x0f, 0x97, 0xb6, 0x22, 0xb7, 0x3f, 0xa7, 0x3f, 0x8e, 0xae, 0x7d, 0xa8, 0x39, 0x34, 0x84, 0xb8, 0x29, 0x79, 0x71, 0xa3, 0xe9, 0x23, 0x12, 0x9c, 0xe4, 0x35, 0x7b, 0x64, 0x5c, 0xc6, 0x38 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.14", - /* Message */ - 11, - { 0x20, 0xf1, 0xcf, 0xaa, 0x63, 0x67, 0xc7, 0xc3, 0x9b, 0x54, 0xa0 } -, - /* Seed */ - 115, - { 0x4a, 0x1c, 0x7b, 0x70, 0xf7, 0x83, 0xba, 0x0d, 0x5a, 0x26, 0xd4, 0x64, 0x5c, 0xf0, 0x5f, 0xa6, 0x10, 0xf5, 0xbe, 0x01, 0x77, 0xfd, 0xde, 0x9f, 0x2c, 0x34, 0x50, 0x57, 0xdb, 0x42, 0x44, 0x57, 0xfa, 0xa4, 0x30, 0xc9, 0x42, 0x4a, 0x54, 0xf7, 0xe5, 0x5f, 0xcf, 0xee, 0x6f, 0xae, 0xa4, 0x24, 0x4c, 0x03, 0x97, 0x74, 0x81, 0xed, 0xfc, 0xbb, 0x28, 0x88, 0x37, 0xc6, 0xa4, 0x8d, 0xbd, 0x72, 0x96, 0x67, 0x7a, 0x24, 0xe0, 0x6c, 0xc9, 0xd8, 0x5e, 0x68, 0x8c, 0x14, 0x09, 0x0f, 0xa2, 0x83, 0x0f, 0xf4, 0x96, 0x79, 0x33, 0xea, 0xf0, 0xdb, 0x69, 0x4b, 0x6a, 0xe4, 0x02, 0xca, 0xf9, 0xc2, 0xbe, 0xff, 0x04, 0xa5, 0x2a, 0x2f, 0x84, 0x7f, 0xe4, 0x0f, 0x4f, 0xfb, 0xdf, 0x3d, 0x58, 0xb7, 0xc4, 0xfd, 0xa8 } -, - /* Encryption */ - 129, - { 0x1e, 0x52, 0x84, 0x20, 0xbc, 0xbb, 0xa7, 0xd5, 0x9c, 0x6c, 0x40, 0xd4, 0x46, 0xd1, 0xaa, 0x95, 0x6a, 0xff, 0x03, 0x05, 0x36, 0x5b, 0x4d, 0x7c, 0xe9, 0x81, 0x0f, 0x22, 0xc3, 0x4f, 0x09, 0xa5, 0x55, 0xe5, 0xff, 0xbe, 0x51, 0x75, 0x03, 0x7f, 0x90, 0x3e, 0xaa, 0x6c, 0x40, 0x56, 0x36, 0x36, 0xd3, 0x81, 0xf4, 0x53, 0x25, 0xb5, 0xe6, 0x1a, 0x2c, 0x70, 0x51, 0x12, 0x55, 0x64, 0x02, 0xa7, 0xdc, 0xbe, 0x86, 0xcf, 0xa5, 0x4a, 0x6e, 0x6a, 0x50, 0x37, 0x8d, 0x05, 0xe2, 0x1c, 0x95, 0xcc, 0x6c, 0x45, 0xff, 0xdd, 0x05, 0x17, 0xf7, 0x7a, 0x36, 0xb2, 0x24, 0xd1, 0x70, 0x0a, 0x1f, 0x3e, 0xbb, 0x81, 0xd3, 0x67, 0x8a, 0x66, 0xe1, 0x45, 0x34, 0xa8, 0x0a, 0x59, 0x8b, 0xd7, 0x17, 0x26, 0xfe, 0x32, 0x2e, 0x73, 0x9c, 0x17, 0xeb, 0xa5, 0x08, 0xda, 0x8a, 0x03, 0x1a, 0x27, 0xf6, 0xbb, 0x28 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.15", - /* Message */ - 33, - { 0x73, 0x60, 0xcd, 0xb6, 0xc1, 0x59, 0x96, 0xb0, 0x60, 0x33, 0x1e, 0x9f, 0x2a, 0x36, 0x89, 0x95, 0xc0, 0x64, 0xad, 0xda, 0x56, 0x55, 0x95, 0x27, 0x78, 0x2c, 0x17, 0x0c, 0x69, 0x1b, 0xb3, 0xbd, 0x3b } -, - /* Seed */ - 93, - { 0x58, 0xdd, 0x80, 0xf4, 0xfd, 0xc5, 0xc9, 0x5d, 0xd9, 0xeb, 0x56, 0xac, 0x80, 0xa0, 0x2d, 0x53, 0xe8, 0xcc, 0x2e, 0xfb, 0x3c, 0xba, 0xc6, 0x72, 0x7d, 0x75, 0xb1, 0xe7, 0xb3, 0x5e, 0x05, 0x42, 0x19, 0x43, 0x3a, 0xf5, 0xaa, 0xe1, 0x98, 0xfd, 0x62, 0xf2, 0xec, 0xd2, 0xab, 0x8e, 0x26, 0x38, 0x77, 0xb5, 0xc9, 0x1e, 0xd5, 0x13, 0xe2, 0x35, 0x49, 0x7a, 0x63, 0x19, 0x2d, 0xb9, 0xa9, 0xbc, 0xb3, 0xbc, 0xa9, 0x7a, 0xe9, 0xbf, 0xce, 0xdf, 0x93, 0x56, 0x44, 0xb2, 0xd3, 0xbc, 0x20, 0xe0, 0x2a, 0xe5, 0xe7, 0x42, 0x4e, 0x81, 0x2a, 0x29, 0x49, 0x61, 0x6b, 0x82, 0x01 } -, - /* Encryption */ - 129, - { 0x20, 0x3b, 0xcd, 0xe1, 0xb4, 0x12, 0xe3, 0xce, 0xa2, 0x5b, 0x86, 0x30, 0xb2, 0x08, 0xf9, 0x78, 0xab, 0x22, 0xc1, 0xda, 0x81, 0x25, 0x07, 0x6e, 0x10, 0xff, 0x91, 0xd7, 0xbc, 0xfa, 0xef, 0xd7, 0xdc, 0xd8, 0x39, 0x16, 0x55, 0xc8, 0x86, 0xe8, 0xa9, 0x45, 0xa7, 0xf5, 0x7a, 0x74, 0xce, 0x2d, 0xc0, 0xe8, 0xec, 0x7f, 0xdb, 0x17, 0xcf, 0x19, 0x57, 0x80, 0xd3, 0xce, 0x80, 0xe0, 0xdd, 0xe7, 0x63, 0x9c, 0x67, 0x72, 0x05, 0xb8, 0xf9, 0xec, 0xea, 0x11, 0x54, 0x68, 0x97, 0x7b, 0xde, 0xa3, 0x50, 0x0b, 0x23, 0x9f, 0xce, 0x0d, 0x7a, 0x94, 0xbe, 0x6d, 0xe3, 0x33, 0xea, 0x7e, 0xcc, 0x22, 0xc0, 0x7e, 0x65, 0xd0, 0xeb, 0xd6, 0x5a, 0x39, 0x0a, 0x18, 0x5f, 0x18, 0x17, 0x89, 0xe7, 0xca, 0x8c, 0x1a, 0xc2, 0xfc, 0xa8, 0x28, 0xbb, 0x8d, 0x28, 0x22, 0x7e, 0x38, 0xc9, 0x88, 0x9c, 0xe0, 0x08 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.16", - /* Message */ - 29, - { 0x31, 0x9b, 0x82, 0x94, 0xbd, 0xf0, 0x7c, 0xd4, 0x06, 0x85, 0xe8, 0x80, 0x09, 0xfa, 0x7b, 0x3f, 0x12, 0x90, 0x16, 0x0e, 0xf3, 0x30, 0x67, 0xad, 0xd5, 0xef, 0x4d, 0x80, 0xfd } -, - /* Seed */ - 97, - { 0x4e, 0x07, 0xd7, 0xf9, 0x63, 0xbe, 0x24, 0xee, 0x6d, 0x8b, 0xd4, 0xdd, 0x95, 0xe9, 0xe3, 0x33, 0x49, 0x30, 0xe0, 0x3e, 0x65, 0x8d, 0x29, 0x6b, 0xb7, 0x95, 0x48, 0x6d, 0x72, 0x4e, 0x07, 0x41, 0xdd, 0x50, 0x73, 0x47, 0xa5, 0xb5, 0x7b, 0x79, 0xc9, 0x0d, 0x3c, 0x90, 0xc1, 0xae, 0xa7, 0x16, 0x19, 0x09, 0x1a, 0xcc, 0x81, 0x98, 0xb5, 0x51, 0x22, 0xda, 0x50, 0x99, 0x58, 0x2e, 0x0d, 0xb7, 0xda, 0x3c, 0xbd, 0x3c, 0xfd, 0x85, 0x29, 0x8f, 0x31, 0x55, 0x4e, 0x29, 0xcb, 0xcb, 0xa1, 0x19, 0x9c, 0xe4, 0x70, 0x16, 0x3c, 0xa0, 0x33, 0x7c, 0xc4, 0x14, 0xad, 0x32, 0x76, 0x70, 0x81, 0x11, 0xd6 } -, - /* Encryption */ - 129, - { 0x04, 0xfc, 0x7b, 0xb6, 0xfb, 0x64, 0x19, 0x61, 0x2b, 0x6e, 0xf5, 0x4b, 0x3c, 0xa0, 0x0a, 0x87, 0x46, 0x51, 0x95, 0xc3, 0x7f, 0x7f, 0x94, 0x0c, 0x23, 0x3e, 0xcb, 0x1d, 0x4a, 0x50, 0x5d, 0x3c, 0x56, 0xed, 0x23, 0xe0, 0x9e, 0x03, 0xf1, 0x45, 0x4f, 0x04, 0xb5, 0x6f, 0x6d, 0xa2, 0x5d, 0x0a, 0x6f, 0xca, 0xb0, 0xc4, 0x00, 0x87, 0x4a, 0xe9, 0x80, 0x6e, 0xe1, 0x87, 0x80, 0xb7, 0x5c, 0x6c, 0xa5, 0x66, 0x29, 0xe5, 0x77, 0xe8, 0xe7, 0xb5, 0xd2, 0xfc, 0x2c, 0x44, 0x0b, 0x98, 0x00, 0x19, 0x5b, 0x58, 0x51, 0x1b, 0xc3, 0xa7, 0x95, 0x44, 0x12, 0xc8, 0xf2, 0x73, 0xcc, 0x0e, 0x9d, 0x97, 0x1a, 0xbb, 0xdd, 0xd7, 0x02, 0x8e, 0x6f, 0x84, 0x87, 0x6a, 0x30, 0x58, 0xa4, 0x54, 0xfe, 0x2f, 0x33, 0xc7, 0x5e, 0x3d, 0xd0, 0x62, 0xf1, 0x19, 0xcd, 0x3e, 0xca, 0x81, 0x06, 0xb6, 0xbf, 0xbe, 0xa4 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.17", - /* Message */ - 26, - { 0x79, 0xc6, 0x82, 0xa2, 0xb9, 0x79, 0xfe, 0x5c, 0x96, 0x32, 0xaf, 0x18, 0x31, 0xc2, 0xaa, 0xcf, 0x0c, 0x6b, 0xf5, 0x66, 0x88, 0x5b, 0xf5, 0x25, 0x62, 0x50 } -, - /* Seed */ - 100, - { 0x5c, 0x2a, 0x95, 0x6d, 0x4b, 0x5f, 0x06, 0xf7, 0x50, 0x83, 0x5a, 0xb8, 0xb2, 0x9c, 0xf7, 0xc6, 0x41, 0xd7, 0x93, 0xc5, 0x56, 0xe1, 0x2a, 0xab, 0xa9, 0x56, 0xdf, 0xde, 0x46, 0x32, 0xd5, 0xe5, 0x02, 0xd5, 0x90, 0x41, 0x78, 0x3a, 0xfd, 0x1d, 0xa7, 0xb2, 0xe2, 0xd2, 0x4e, 0x22, 0xd6, 0x44, 0x78, 0x35, 0xbf, 0x6d, 0x77, 0xc6, 0xee, 0xbc, 0x0d, 0x2d, 0x64, 0xe7, 0xed, 0x2c, 0x14, 0x17, 0x18, 0xad, 0x86, 0x87, 0xc5, 0x97, 0xb7, 0x71, 0x8f, 0x38, 0xbf, 0x1a, 0x33, 0x16, 0xed, 0xef, 0xf6, 0xb7, 0x2e, 0x28, 0x51, 0x82, 0x88, 0x07, 0xbc, 0xff, 0xa9, 0xb8, 0xe1, 0xa8, 0x52, 0xf3, 0xfa, 0xa8, 0x07, 0xf6 } -, - /* Encryption */ - 129, - { 0x25, 0x1d, 0x48, 0x56, 0xb7, 0xa7, 0x58, 0x0d, 0x53, 0x88, 0x01, 0x62, 0x28, 0x1b, 0xb4, 0xe4, 0x1b, 0xde, 0xb2, 0xa8, 0x7d, 0xdb, 0xd5, 0xae, 0x1b, 0x30, 0x7d, 0x44, 0x48, 0xbe, 0x1f, 0x11, 0x69, 0x5f, 0xf7, 0x22, 0xc4, 0x32, 0x41, 0x5d, 0x0c, 0x74, 0xba, 0xa3, 0xfc, 0x0d, 0xd5, 0x11, 0x66, 0xac, 0x86, 0x5b, 0x31, 0x0c, 0x4f, 0x5c, 0x87, 0x07, 0x98, 0x62, 0x54, 0xc8, 0x96, 0x04, 0xcc, 0xda, 0xbc, 0xe6, 0xc6, 0x92, 0x44, 0x66, 0x21, 0x89, 0x8b, 0x4f, 0x5a, 0x08, 0xbc, 0xdf, 0x64, 0x62, 0xe5, 0x18, 0xee, 0x3a, 0xeb, 0x75, 0xe2, 0x6d, 0x8f, 0x63, 0xa0, 0x6f, 0xcb, 0xb3, 0xdf, 0x09, 0x8c, 0xee, 0xbb, 0x0f, 0xd2, 0xf6, 0x37, 0xe3, 0xa7, 0x93, 0x7f, 0x4d, 0x19, 0xe3, 0xa1, 0x92, 0x4c, 0x16, 0x08, 0x2e, 0xdc, 0x33, 0x3c, 0xb6, 0xde, 0x37, 0x63, 0x72, 0x46, 0xe4, 0x98 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.18", - /* Message */ - 63, - { 0x1e, 0x0d, 0x18, 0x07, 0xa2, 0xbd, 0x49, 0x6b, 0xb0, 0xcb, 0xa8, 0x41, 0xc7, 0x71, 0x58, 0xbf, 0xa5, 0xf8, 0xaa, 0x77, 0xd0, 0x56, 0x75, 0xc6, 0x4a, 0x5e, 0xb1, 0x85, 0x65, 0x91, 0xd3, 0x48, 0x54, 0xf8, 0x65, 0x92, 0x5b, 0x37, 0x1b, 0x68, 0x6a, 0xaa, 0xb4, 0x45, 0x98, 0xb4, 0xa1, 0x6a, 0xb6, 0xb7, 0x93, 0x44, 0xd3, 0xc2, 0x3f, 0x7d, 0x5b, 0xf1, 0x73, 0xb8, 0x42, 0xd7, 0x8c } -, - /* Seed */ - 63, - { 0xdb, 0xaf, 0xa5, 0x33, 0x2f, 0x0b, 0x55, 0x27, 0x96, 0x63, 0x6d, 0x8a, 0x09, 0x28, 0xb7, 0xd8, 0x7d, 0x9c, 0xee, 0x3d, 0x4b, 0xe6, 0xa3, 0x1c, 0x77, 0xe1, 0x4e, 0x0e, 0x5d, 0xfd, 0xd4, 0x03, 0xef, 0xb9, 0x8f, 0xa3, 0x38, 0x81, 0x6e, 0x12, 0x62, 0xc0, 0x64, 0x96, 0xfd, 0xe9, 0xd5, 0x57, 0xc0, 0x0c, 0xc0, 0xdd, 0x35, 0xfc, 0x33, 0xac, 0xcd, 0x79, 0xa3, 0x15, 0x06, 0x90, 0xeb } -, - /* Encryption */ - 129, - { 0x1b, 0x2e, 0xce, 0xa5, 0xfa, 0x90, 0x03, 0xfa, 0xb6, 0x55, 0x98, 0x57, 0xc6, 0xd9, 0x4f, 0x95, 0x70, 0x03, 0xf4, 0xe4, 0x1c, 0x09, 0x45, 0x64, 0x80, 0x4f, 0xe6, 0x96, 0x39, 0xe5, 0x40, 0xb6, 0x8f, 0x26, 0x3f, 0xaa, 0xec, 0xa1, 0x99, 0x69, 0x7a, 0x48, 0x85, 0x8b, 0x8a, 0x0f, 0xce, 0xa4, 0x91, 0x05, 0x7d, 0xf2, 0xfb, 0x8b, 0x35, 0xd0, 0x93, 0xd8, 0x94, 0xae, 0xc1, 0x7c, 0x5c, 0xde, 0x5d, 0xfd, 0x8f, 0x33, 0x51, 0x2b, 0xcc, 0x66, 0xcd, 0xe7, 0x6d, 0xa0, 0x73, 0x36, 0x98, 0x5a, 0x97, 0x43, 0x5b, 0x6e, 0xfe, 0xe4, 0xee, 0x09, 0xd3, 0xa2, 0x8a, 0xff, 0x34, 0xce, 0x6a, 0xe8, 0x75, 0x0d, 0xa4, 0x1e, 0x16, 0xca, 0x47, 0xe9, 0x38, 0x81, 0x8e, 0x44, 0xa9, 0xb4, 0x1f, 0xe9, 0x1a, 0x6a, 0x80, 0x1d, 0x35, 0x5e, 0xe8, 0xd6, 0x60, 0xe2, 0x7e, 0x4f, 0xe2, 0xce, 0x7f, 0x32, 0x5b } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.19", - /* Message */ - 15, - { 0x1c, 0x10, 0x5d, 0x5e, 0xbe, 0xa3, 0x66, 0x46, 0xa9, 0x72, 0x84, 0xc1, 0x7a, 0x86, 0xc4 } -, - /* Seed */ - 111, - { 0xc6, 0xf8, 0x03, 0x40, 0xa6, 0x55, 0x7e, 0x07, 0x53, 0xa9, 0x57, 0x3f, 0xe4, 0xf5, 0x21, 0x49, 0x77, 0xef, 0xdb, 0x08, 0x2a, 0x50, 0xeb, 0x5d, 0x5c, 0x51, 0x7d, 0x46, 0x72, 0x9f, 0xd2, 0xa3, 0x4a, 0xf7, 0xce, 0xe1, 0xaa, 0x46, 0xb7, 0x9d, 0x47, 0xe2, 0x5d, 0x83, 0x09, 0x0a, 0xeb, 0x4f, 0x50, 0x22, 0x98, 0xc0, 0x31, 0x37, 0x24, 0xfa, 0xb5, 0x4e, 0x54, 0xbe, 0xbb, 0x48, 0xd6, 0xcd, 0x9b, 0xeb, 0xdd, 0xcb, 0xee, 0x0f, 0x07, 0x53, 0x77, 0x27, 0xd6, 0x5c, 0x50, 0xe7, 0xd4, 0xcc, 0x0c, 0x6d, 0x19, 0xfc, 0x48, 0x0b, 0xa5, 0x78, 0x67, 0x26, 0x2c, 0xf2, 0xee, 0xdd, 0x9c, 0xfa, 0xba, 0x60, 0x7d, 0x65, 0x82, 0x87, 0xeb, 0xa4, 0x2b, 0x46, 0x99, 0x44, 0xcc, 0xb6, 0x12 } -, - /* Encryption */ - 129, - { 0x05, 0xb2, 0x3d, 0xc0, 0xc6, 0x2d, 0x90, 0xc1, 0x77, 0x1e, 0xba, 0x37, 0x8e, 0x43, 0x17, 0x9d, 0x7c, 0xa6, 0xaf, 0x51, 0x5e, 0x26, 0x19, 0xae, 0x4d, 0x7c, 0x8f, 0xc8, 0xbd, 0xa3, 0x78, 0xcb, 0xf7, 0xa1, 0xdb, 0xba, 0x1a, 0x14, 0xf4, 0x94, 0xc4, 0xe0, 0xd7, 0x13, 0x38, 0x79, 0x7c, 0x7e, 0xe0, 0x6e, 0x1a, 0x79, 0xe9, 0xff, 0x28, 0x56, 0xfb, 0xf7, 0x4f, 0xe6, 0xf1, 0xa7, 0xca, 0x6e, 0x5b, 0x9c, 0xa2, 0x83, 0xc4, 0xc9, 0x7e, 0x61, 0xcf, 0x9f, 0x40, 0x73, 0xe0, 0x32, 0xca, 0x27, 0xd6, 0x9b, 0x1b, 0x4e, 0xeb, 0xea, 0x77, 0xcc, 0x95, 0xa9, 0x28, 0x1f, 0x26, 0xb6, 0x4a, 0x05, 0xa9, 0x39, 0x44, 0xc8, 0x2c, 0x5a, 0x13, 0x42, 0x8e, 0xce, 0x21, 0xfb, 0x44, 0x01, 0xad, 0x42, 0x6e, 0x7a, 0xc1, 0xf0, 0x5b, 0xff, 0x84, 0xb3, 0x47, 0xcd, 0xc4, 0xdb, 0xe5, 0x2e, 0x67, 0x8a, 0xed } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 12.20", - /* Message */ - 12, - { 0xf1, 0x04, 0x02, 0xf0, 0x02, 0x05, 0xc5, 0x27, 0x57, 0xed, 0x6e, 0x9d } -, - /* Seed */ - 114, - { 0xe2, 0xae, 0xe7, 0xfc, 0xf4, 0x3c, 0xed, 0xe0, 0x75, 0x52, 0xa2, 0xdf, 0xe5, 0xb5, 0xa9, 0xef, 0x80, 0x82, 0x76, 0xd8, 0xf1, 0x0e, 0xb3, 0xf9, 0xbc, 0x50, 0xf1, 0xbd, 0x94, 0x0a, 0xaa, 0xe6, 0x34, 0xc9, 0xd8, 0xa0, 0x78, 0x8d, 0x44, 0xd4, 0x1e, 0x8a, 0x5c, 0x60, 0x36, 0x49, 0xef, 0xea, 0x83, 0x03, 0x32, 0x31, 0x51, 0x6c, 0x69, 0xd3, 0x3e, 0x12, 0xf1, 0xf5, 0xd3, 0xf0, 0xac, 0x1f, 0xc2, 0x3a, 0x9b, 0x3f, 0x5d, 0xa4, 0xe0, 0xef, 0x6e, 0x45, 0x50, 0xcb, 0x43, 0xfd, 0xff, 0x02, 0xb2, 0x5d, 0xac, 0x86, 0x27, 0x2d, 0x66, 0xdb, 0x59, 0xcd, 0xd6, 0x35, 0xf9, 0xc0, 0xdd, 0x0d, 0xaa, 0x08, 0x57, 0x91, 0x0c, 0x15, 0x88, 0x1b, 0x16, 0x0d, 0x70, 0xea, 0x53, 0x40, 0x5a, 0xa9, 0x59, 0xf4 } -, - /* Encryption */ - 129, - { 0x0b, 0x96, 0x56, 0x31, 0x78, 0x32, 0xa9, 0x40, 0xc7, 0x95, 0xbb, 0xa5, 0x8d, 0xaa, 0x15, 0x9a, 0x4f, 0x73, 0x3e, 0x82, 0x6c, 0xe5, 0x5a, 0x4e, 0xc5, 0x64, 0x33, 0xc5, 0x16, 0x84, 0x44, 0x4c, 0x78, 0xe2, 0xe2, 0xfc, 0xb3, 0x7f, 0x85, 0xad, 0x87, 0x79, 0x16, 0x52, 0x2d, 0x8a, 0x35, 0xa4, 0x3f, 0x53, 0xc5, 0x95, 0x17, 0xa8, 0x18, 0xe5, 0x21, 0xe1, 0x98, 0x2a, 0x50, 0x91, 0xbf, 0x2c, 0x68, 0xb0, 0x0e, 0xe4, 0x9a, 0xbd, 0x90, 0xdd, 0x77, 0x6c, 0x02, 0xf6, 0x4f, 0x34, 0xf6, 0x80, 0xa8, 0x8e, 0xee, 0x05, 0xec, 0x08, 0x88, 0x92, 0xbc, 0x0a, 0x95, 0x55, 0xb3, 0xf2, 0x0c, 0x8b, 0xee, 0x57, 0x9c, 0x0d, 0xdd, 0xe1, 0x51, 0x1a, 0x18, 0xaf, 0x98, 0xbc, 0x1d, 0x9c, 0xf9, 0x0b, 0x81, 0xbf, 0x13, 0x2a, 0xbd, 0x58, 0x97, 0x0b, 0x3e, 0x84, 0xd8, 0x14, 0xe2, 0x7d, 0x02, 0x5b, 0x73 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 13: A 1031-bit RSA key pair", -{ - /* Modulus */ - 129, - { 0x55, 0x5d, 0xc2, 0xba, 0xf0, 0x41, 0xb7, 0xf0, 0x9a, 0x04, 0x78, 0x42, 0x3a, 0xeb, 0xcb, 0x5f, 0x49, 0xb9, 0x5d, 0xbe, 0x15, 0x70, 0xe9, 0xa5, 0x42, 0x12, 0x8d, 0x33, 0x22, 0x87, 0x86, 0x6a, 0xc4, 0xcc, 0x63, 0xe7, 0x6f, 0x8e, 0x3a, 0xef, 0x22, 0xc9, 0x75, 0x3a, 0x54, 0x51, 0x99, 0x94, 0x24, 0x52, 0x41, 0x8a, 0x67, 0xd1, 0xa2, 0x23, 0x0d, 0xdb, 0x6f, 0x42, 0x22, 0xc6, 0x63, 0xd3, 0x8e, 0x80, 0x05, 0x0e, 0xeb, 0x67, 0x95, 0x6e, 0xc5, 0xf5, 0x49, 0x94, 0xa0, 0xbe, 0xa6, 0x95, 0xfa, 0x59, 0xfa, 0xdf, 0x2d, 0xcf, 0xe7, 0xac, 0xb5, 0x4e, 0xd9, 0xda, 0x3d, 0x0b, 0xeb, 0x12, 0x2c, 0x8a, 0x69, 0x1b, 0x0b, 0xb5, 0x1a, 0xe6, 0x5a, 0x77, 0x4d, 0x75, 0xb1, 0xb3, 0x49, 0xcb, 0x68, 0xc5, 0x17, 0xcb, 0xd3, 0x86, 0xae, 0x48, 0x2f, 0x05, 0xee, 0x46, 0x03, 0xec, 0xf2, 0x95, 0x5d } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 129, - { 0x05, 0x97, 0x87, 0xbb, 0x01, 0x23, 0xfc, 0xed, 0x98, 0xd9, 0x34, 0x1b, 0x7a, 0x8a, 0x99, 0x9e, 0xdb, 0x50, 0x76, 0x30, 0x8e, 0x6d, 0x00, 0x11, 0x20, 0x3b, 0xe0, 0xdd, 0xf9, 0xa4, 0x11, 0x0d, 0x0b, 0x69, 0x2c, 0x1e, 0x2b, 0xf3, 0x90, 0x2e, 0xbc, 0x03, 0xa0, 0x57, 0x3a, 0xd0, 0xc1, 0x93, 0xaf, 0xb1, 0x67, 0xb3, 0xae, 0x4b, 0x50, 0x28, 0xa5, 0xae, 0xbb, 0x22, 0x04, 0xef, 0x23, 0xf8, 0xe5, 0x83, 0x60, 0xbe, 0x94, 0x84, 0x95, 0x1e, 0x34, 0x71, 0x11, 0x76, 0x06, 0x2e, 0x53, 0xe3, 0xf6, 0x38, 0x74, 0xfc, 0x9e, 0x35, 0x91, 0xa9, 0xd9, 0x06, 0x8a, 0xa5, 0xe6, 0xc8, 0xc7, 0xa9, 0xab, 0x08, 0xe9, 0x79, 0x24, 0x70, 0x06, 0x6d, 0x71, 0xa0, 0x7c, 0x34, 0x33, 0xdd, 0x70, 0x3a, 0x42, 0xa6, 0xb3, 0xa9, 0xb1, 0xbf, 0xfb, 0x31, 0x49, 0x49, 0x8d, 0xcf, 0xf8, 0xb3, 0x57, 0x56, 0xed } -, - /* Prime 1 */ - 65, - { 0x0a, 0x7d, 0xbd, 0x7e, 0xe6, 0xde, 0xf3, 0x87, 0x5b, 0x4c, 0x55, 0x9f, 0x56, 0x69, 0x30, 0x7d, 0x17, 0x6b, 0xc1, 0x25, 0xb0, 0x9f, 0x5e, 0xb8, 0x26, 0x01, 0xb8, 0x13, 0x48, 0x57, 0x6c, 0x1c, 0xa7, 0xdc, 0xf4, 0xc2, 0xbd, 0x7f, 0x2b, 0x42, 0xa2, 0xc5, 0x46, 0x00, 0x02, 0xfc, 0xe0, 0xa9, 0xa2, 0x1d, 0xac, 0x5a, 0x97, 0x97, 0xdb, 0x23, 0x3d, 0x9d, 0x4a, 0x92, 0x93, 0xad, 0xd3, 0xdf, 0x73 } -, - /* Prime 2 */ - 65, - { 0x08, 0x23, 0x0f, 0xcf, 0x26, 0xfd, 0xc5, 0x75, 0x11, 0x9c, 0xf9, 0x05, 0x78, 0xd3, 0x66, 0x56, 0x4c, 0xfd, 0xa8, 0x65, 0xa2, 0x82, 0x0f, 0x38, 0xbc, 0xd6, 0x3e, 0xca, 0xa0, 0x95, 0x57, 0x65, 0x77, 0x2a, 0x88, 0x32, 0xfb, 0x31, 0x69, 0x7f, 0xd0, 0xdd, 0x45, 0xbb, 0xec, 0xc0, 0x4d, 0xd6, 0xa5, 0x9e, 0xc1, 0x1c, 0x1d, 0x5c, 0x6e, 0x87, 0x7c, 0x6b, 0x9d, 0x77, 0xc6, 0xa2, 0x76, 0xe3, 0xef } -, - /* Prime exponent 1 */ - 65, - { 0x08, 0xd1, 0xc7, 0xd9, 0xc4, 0xd0, 0x2c, 0xbd, 0xdf, 0x7c, 0x7e, 0x86, 0x62, 0xa8, 0x2f, 0x41, 0x19, 0xcd, 0x56, 0x24, 0x0f, 0x25, 0x0b, 0x05, 0x97, 0xbd, 0xde, 0x37, 0x27, 0x9b, 0x86, 0xa1, 0x58, 0x64, 0xa1, 0xc6, 0x8c, 0x73, 0x39, 0xb4, 0xdd, 0x0d, 0x26, 0x59, 0xa0, 0x29, 0x61, 0xdc, 0x79, 0x12, 0xa4, 0xef, 0xcb, 0x7c, 0xb7, 0x96, 0x1a, 0x97, 0xfe, 0x36, 0xd6, 0xbb, 0x4c, 0xe0, 0x0d } -, - /* Prime exponent 2 */ - 65, - { 0x01, 0xd4, 0x91, 0x3b, 0xd1, 0xd3, 0x87, 0xd5, 0x3b, 0xaf, 0x09, 0xbd, 0x17, 0x5e, 0xc6, 0x48, 0x67, 0x6d, 0x2f, 0xb2, 0x1d, 0x0a, 0x10, 0x8e, 0x7c, 0xbb, 0xdc, 0xc8, 0x0b, 0xb3, 0x4c, 0x43, 0x80, 0xb8, 0xca, 0x86, 0x5d, 0x46, 0xd2, 0x2a, 0x74, 0x3b, 0x31, 0xf2, 0x81, 0xe1, 0x08, 0x21, 0x5e, 0x84, 0x05, 0x80, 0x63, 0x82, 0x65, 0x42, 0x88, 0xd4, 0x54, 0x49, 0x9b, 0x1e, 0xf4, 0x8b, 0x75 } -, - /* Coefficient */ - 65, - { 0x08, 0x7b, 0x2e, 0xf2, 0x11, 0x44, 0x8e, 0x5c, 0x96, 0x1c, 0x9f, 0x6d, 0xfe, 0xe6, 0xaa, 0x26, 0x8e, 0xe8, 0x97, 0x7e, 0x31, 0x1c, 0x07, 0xcc, 0x8d, 0xb4, 0x72, 0xda, 0x6c, 0x49, 0x86, 0x3f, 0xaa, 0xf3, 0x3b, 0xf5, 0x05, 0xdc, 0xfd, 0x81, 0xf5, 0x3a, 0x53, 0xbe, 0x12, 0x1e, 0x44, 0x5e, 0x89, 0xd7, 0xe0, 0x38, 0xef, 0x27, 0xf3, 0x72, 0x7b, 0x51, 0x2a, 0x2b, 0x80, 0x94, 0x41, 0x20, 0xea } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 13.1", - /* Message */ - 7, - { 0x7b, 0xc8, 0x1d, 0x81, 0x46, 0xe3, 0x59 } -, - /* Seed */ - 119, - { 0x76, 0x65, 0x5e, 0x4a, 0xd8, 0xfb, 0x99, 0x34, 0xd1, 0x84, 0x7c, 0xc9, 0x0c, 0x02, 0x47, 0x3c, 0x57, 0x2b, 0x5f, 0xdf, 0xd1, 0x64, 0xa9, 0x70, 0xa3, 0xcd, 0x96, 0xbc, 0x8c, 0xd7, 0x96, 0xac, 0x80, 0x2c, 0x50, 0x28, 0x22, 0x90, 0xea, 0xd4, 0xc7, 0x7a, 0xa5, 0xcc, 0x2a, 0x7e, 0x34, 0x34, 0x18, 0xc9, 0xdf, 0x47, 0xef, 0xb8, 0x87, 0x86, 0xaf, 0x4c, 0xc8, 0xd1, 0x82, 0x1c, 0x50, 0x07, 0x39, 0x09, 0xe8, 0x4f, 0x7b, 0x45, 0x1a, 0xf4, 0xa3, 0x2a, 0xee, 0x6c, 0x7c, 0xc8, 0x97, 0xee, 0xf7, 0x66, 0x0e, 0x1c, 0x4c, 0x53, 0x5d, 0x10, 0x03, 0x9d, 0x3a, 0xa2, 0x03, 0x5c, 0x98, 0x51, 0x01, 0x25, 0xec, 0x5f, 0x2a, 0x2e, 0x9d, 0xac, 0x63, 0x95, 0x89, 0xff, 0x8b, 0xb3, 0x9f, 0x07, 0x43, 0x8d, 0xef, 0xb7, 0xd1, 0x33, 0x77 } -, - /* Encryption */ - 129, - { 0x14, 0x6d, 0x65, 0x12, 0xdf, 0xdf, 0xfb, 0xc0, 0x2d, 0x5d, 0x54, 0xbf, 0xf3, 0xe0, 0x36, 0xa3, 0x5b, 0x4c, 0x2a, 0xa9, 0x44, 0xd6, 0xf6, 0x72, 0x47, 0x93, 0x30, 0x65, 0x37, 0x08, 0x1b, 0xd1, 0x1e, 0xe5, 0x68, 0xa4, 0xe9, 0x71, 0x9f, 0x1e, 0x31, 0xf2, 0xd1, 0x4e, 0x18, 0xc2, 0xda, 0x62, 0x44, 0x70, 0xc5, 0xb0, 0xff, 0xab, 0x39, 0x7f, 0x92, 0x31, 0xb6, 0xef, 0x46, 0x34, 0xf6, 0x3a, 0x18, 0x28, 0x5d, 0xf3, 0x41, 0x45, 0x17, 0xa5, 0x1f, 0x93, 0x58, 0x6d, 0x66, 0xb0, 0x3c, 0xab, 0x1e, 0x78, 0xa4, 0xeb, 0x94, 0x1b, 0x9d, 0x3d, 0x7f, 0x92, 0x03, 0xb5, 0x9e, 0x1c, 0xb3, 0xbb, 0x48, 0x64, 0xb6, 0x46, 0xdc, 0x17, 0xa0, 0x64, 0x11, 0xeb, 0xd5, 0xff, 0x03, 0x37, 0x20, 0x58, 0x88, 0x1b, 0x4a, 0x24, 0xb2, 0x4f, 0x4c, 0x2d, 0xcd, 0x5c, 0xb4, 0x4c, 0x2e, 0xea, 0xbe, 0x6f, 0x72 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 13.2", - /* Message */ - 52, - { 0x68, 0x6a, 0x81, 0x0a, 0x03, 0x1d, 0x80, 0x61, 0xe4, 0x1a, 0x77, 0x6a, 0x7d, 0xfb, 0xdb, 0x3a, 0xf6, 0x26, 0xfe, 0x97, 0x69, 0xde, 0xee, 0xa4, 0x60, 0xba, 0x28, 0x67, 0xac, 0xf0, 0x3d, 0x9f, 0x92, 0x4d, 0x32, 0x1e, 0x8a, 0x8f, 0x42, 0x5c, 0x28, 0x51, 0x92, 0x98, 0x67, 0xa3, 0x26, 0xae, 0x27, 0x5b, 0x49, 0xd2 } -, - /* Seed */ - 74, - { 0xf7, 0x9b, 0x49, 0xf6, 0xa6, 0xbe, 0x3e, 0x68, 0x88, 0x4c, 0x80, 0xdf, 0xe1, 0xe8, 0x50, 0x1e, 0x54, 0x4c, 0xa7, 0x82, 0x23, 0x88, 0x43, 0xd4, 0x19, 0x76, 0x41, 0x12, 0x25, 0x0e, 0xdc, 0x1b, 0x69, 0xc7, 0xd1, 0xc3, 0x58, 0x7f, 0xdc, 0x75, 0x98, 0x7c, 0x62, 0xcb, 0x4c, 0x33, 0xbb, 0x81, 0x20, 0x2f, 0x72, 0xdb, 0xa7, 0xee, 0xe2, 0x4b, 0xfc, 0xf8, 0x9d, 0x4d, 0xae, 0x15, 0x0c, 0x07, 0x27, 0x24, 0x58, 0xfb, 0x01, 0xb6, 0xcd, 0x27, 0x09, 0x25 } -, - /* Encryption */ - 129, - { 0x08, 0x8a, 0x47, 0xf1, 0x1c, 0xb1, 0x34, 0xde, 0xc4, 0xb5, 0x08, 0x77, 0x25, 0xe8, 0xa5, 0xbd, 0x04, 0xf7, 0xfe, 0x58, 0x2a, 0x69, 0x91, 0x4f, 0x68, 0x3e, 0xe6, 0xde, 0x7c, 0x32, 0x4f, 0xed, 0x7e, 0x07, 0xf5, 0x70, 0x05, 0xc0, 0xe0, 0xdf, 0x75, 0x00, 0xe3, 0x70, 0xa4, 0x2e, 0xfd, 0x6f, 0xe5, 0xb2, 0x90, 0x19, 0x95, 0x19, 0xb1, 0x98, 0x06, 0xb6, 0xe6, 0x91, 0x69, 0x8a, 0xfd, 0x95, 0x17, 0xd7, 0x80, 0xda, 0x0b, 0xeb, 0xf7, 0x0a, 0x26, 0xd6, 0x5c, 0x5b, 0x64, 0xe3, 0x40, 0xa6, 0x40, 0x5e, 0x88, 0x95, 0x55, 0xdf, 0xa0, 0xa9, 0x2c, 0x42, 0x9a, 0xe9, 0xc3, 0xec, 0x88, 0xe8, 0x88, 0xee, 0xda, 0x04, 0x5e, 0x41, 0x0e, 0x3a, 0x9e, 0x61, 0x99, 0xab, 0x39, 0xeb, 0x1a, 0xc8, 0x64, 0xe2, 0x28, 0xc2, 0xcc, 0x1b, 0x64, 0xe3, 0x36, 0x16, 0x95, 0xb5, 0xaa, 0x11, 0x3d, 0xc5, 0xa7 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.3", - /* Message */ - 9, - { 0x18, 0x54, 0x4a, 0xad, 0x24, 0xab, 0x07, 0x5d, 0x3a } -, - /* Seed */ - 117, - { 0x23, 0x20, 0x4b, 0x8a, 0xd9, 0x45, 0x75, 0xf6, 0xe2, 0xf4, 0x6c, 0x79, 0x7b, 0xb8, 0x73, 0xaa, 0x3f, 0x46, 0x1a, 0xcd, 0x05, 0xe7, 0xdb, 0x78, 0x46, 0xa2, 0x31, 0x57, 0x59, 0x2d, 0x52, 0xe9, 0xa9, 0xa7, 0x04, 0x38, 0x19, 0xc4, 0x88, 0x96, 0x27, 0x5e, 0xd9, 0xdf, 0x0b, 0x1e, 0x54, 0x04, 0x93, 0xc0, 0x77, 0xea, 0x15, 0x41, 0x9a, 0xfa, 0x87, 0xdc, 0x35, 0xf9, 0xfd, 0xf7, 0xab, 0x8a, 0xaf, 0x47, 0xee, 0xe1, 0xd3, 0x3e, 0xcc, 0x28, 0x95, 0x06, 0x45, 0xf1, 0xb6, 0x91, 0x38, 0x2d, 0x87, 0x54, 0x1e, 0xd0, 0x64, 0x06, 0x93, 0x0c, 0x7e, 0xe1, 0x10, 0x9a, 0xa5, 0xca, 0x75, 0xa4, 0x90, 0x93, 0x4e, 0xa8, 0xd3, 0xb2, 0xa0, 0x4b, 0xa1, 0x52, 0x1b, 0xe0, 0x92, 0xc8, 0x68, 0xf7, 0xea, 0x5b, 0xe3, 0x78, 0xea } -, - /* Encryption */ - 129, - { 0x34, 0xd6, 0xe5, 0x46, 0xd6, 0x9e, 0x27, 0x06, 0xcd, 0xfc, 0x6d, 0x9e, 0x74, 0x18, 0xf8, 0xbe, 0x03, 0xe4, 0x57, 0x56, 0xa8, 0xb1, 0x9b, 0x60, 0xc2, 0x1d, 0x27, 0x34, 0x20, 0xaa, 0x7d, 0x5e, 0xbb, 0xbf, 0x46, 0x0e, 0xf4, 0xc8, 0x4f, 0x6d, 0x47, 0x77, 0xe6, 0xbf, 0x20, 0x3f, 0xf9, 0x18, 0x5f, 0xd5, 0x7d, 0xc7, 0x23, 0xb5, 0x8f, 0x35, 0xc1, 0xe9, 0xb5, 0xff, 0xf4, 0x7c, 0xf9, 0x5a, 0xe5, 0x69, 0xa5, 0xcb, 0x64, 0xdd, 0x9c, 0xb8, 0xd6, 0x40, 0x7c, 0x0b, 0xa5, 0xef, 0xd1, 0x48, 0xf1, 0x8b, 0x56, 0x96, 0xb0, 0x47, 0xda, 0xaa, 0xa2, 0x77, 0xed, 0x8d, 0x45, 0x28, 0x61, 0x4e, 0xe3, 0xda, 0x52, 0x38, 0x71, 0x32, 0xb7, 0xa9, 0xcc, 0xfe, 0x07, 0x3b, 0xe5, 0x03, 0x32, 0xc9, 0xe2, 0x83, 0x73, 0x53, 0xc6, 0x7d, 0xaa, 0x0f, 0xdf, 0xef, 0xc3, 0xb6, 0x52, 0xcf, 0x7d, 0x79, 0xfd } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.4", - /* Message */ - 4, - { 0xd9, 0x0f, 0xa3, 0x8f } -, - /* Seed */ - 122, - { 0x3e, 0x09, 0xf6, 0x50, 0x6f, 0x7f, 0x71, 0x91, 0x47, 0xae, 0x21, 0xe3, 0x94, 0x53, 0xae, 0x0b, 0x41, 0x60, 0x98, 0xda, 0x10, 0x3a, 0xf8, 0x4c, 0x0f, 0x7c, 0xef, 0xae, 0x50, 0x01, 0x99, 0xc9, 0x85, 0x59, 0x67, 0xa8, 0x30, 0x0a, 0x1a, 0x7f, 0x8d, 0x2c, 0xc1, 0x3b, 0x91, 0x72, 0x7e, 0xeb, 0xd9, 0x3c, 0xf7, 0x7d, 0x3f, 0xac, 0xb1, 0x9e, 0x83, 0xa8, 0x40, 0xeb, 0x58, 0x3b, 0xce, 0xa6, 0xc6, 0x11, 0x3a, 0x9c, 0x6f, 0x6f, 0x1f, 0xb5, 0xa0, 0xb3, 0x32, 0x55, 0x9a, 0x6b, 0x43, 0x15, 0x47, 0x45, 0x7c, 0xda, 0x1d, 0x3d, 0xce, 0xe3, 0x41, 0xd1, 0x71, 0xc6, 0x2e, 0x95, 0xe7, 0xea, 0xae, 0x16, 0xae, 0x0e, 0xaf, 0x1c, 0x1f, 0xe8, 0x10, 0xfb, 0xb0, 0xb7, 0x13, 0x8c, 0xfa, 0x3d, 0x66, 0xc6, 0x38, 0x50, 0xf3, 0x81, 0xe4, 0x9a, 0x2d, 0xad } -, - /* Encryption */ - 129, - { 0x27, 0x13, 0x3f, 0x43, 0x79, 0x1b, 0x39, 0x22, 0x7c, 0x8e, 0x95, 0x4e, 0x1c, 0xaa, 0x83, 0x0f, 0xa6, 0x59, 0x95, 0xf8, 0xa9, 0xf8, 0x8e, 0x0d, 0x1f, 0x75, 0x67, 0x85, 0xed, 0x5c, 0x8c, 0x78, 0x54, 0xfb, 0x1a, 0x9d, 0xc4, 0xa9, 0x5f, 0xa4, 0x4d, 0xbd, 0xf0, 0xf2, 0x85, 0x99, 0xc4, 0x72, 0x84, 0x93, 0x79, 0x75, 0x0a, 0x6a, 0x1b, 0xcb, 0x42, 0xca, 0xfb, 0x5b, 0xbf, 0xe0, 0x8c, 0x65, 0x10, 0x6d, 0xc8, 0x40, 0xcb, 0xec, 0x8e, 0xe2, 0xcb, 0x5a, 0x20, 0x6c, 0x81, 0x18, 0xaa, 0x06, 0x1d, 0xa4, 0xd2, 0x1d, 0x1b, 0x5c, 0x46, 0x11, 0x7f, 0x77, 0xc8, 0x96, 0xbc, 0x71, 0xce, 0xe2, 0xf8, 0x75, 0x7a, 0xff, 0x5c, 0xb2, 0xb3, 0xc3, 0x47, 0x74, 0x55, 0x8e, 0x8b, 0x82, 0xed, 0xb4, 0xef, 0x9b, 0xf2, 0xd4, 0xf2, 0xca, 0x4f, 0xc5, 0x97, 0xfa, 0xb4, 0x0a, 0x2d, 0x74, 0xe5, 0x23, 0x3a } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.5", - /* Message */ - 47, - { 0xfc, 0xbd, 0xd0, 0x24, 0x8d, 0xf8, 0x57, 0xaf, 0x17, 0x5b, 0x43, 0x96, 0x87, 0x5c, 0x00, 0x6d, 0x51, 0x14, 0xcc, 0x11, 0x16, 0x42, 0x80, 0x04, 0x38, 0x08, 0xaa, 0x79, 0x88, 0x6c, 0x4c, 0xaa, 0x29, 0x11, 0x7b, 0xf3, 0xce, 0x45, 0xa9, 0xbe, 0x55, 0x07, 0xc6, 0xb8, 0xbf, 0x0d, 0x30 } -, - /* Seed */ - 79, - { 0x2c, 0x9d, 0x14, 0x57, 0xba, 0x44, 0x50, 0xdf, 0x40, 0x21, 0xe4, 0xe5, 0x11, 0x83, 0xf7, 0x95, 0xd0, 0x91, 0xc0, 0x7f, 0x6a, 0xe0, 0xdd, 0x96, 0x2d, 0x57, 0x28, 0xc5, 0x4b, 0x7f, 0xc3, 0xc7, 0x72, 0xd7, 0x9d, 0x7b, 0xec, 0xe1, 0xbb, 0x0c, 0x99, 0x6c, 0x9a, 0xc0, 0x7f, 0x99, 0x54, 0xdd, 0xa7, 0x68, 0x7b, 0xec, 0x86, 0xbc, 0xdb, 0x31, 0x40, 0xb2, 0x45, 0xbb, 0x5e, 0x01, 0x27, 0x5b, 0x38, 0xd1, 0xf2, 0x52, 0x33, 0x5e, 0x36, 0xc6, 0x8c, 0x0e, 0x58, 0xf4, 0xce, 0x11, 0x7e } -, - /* Encryption */ - 129, - { 0x2c, 0xed, 0xde, 0xf2, 0x02, 0x69, 0x1a, 0xae, 0x42, 0x71, 0x85, 0x2a, 0x89, 0x83, 0xde, 0x7c, 0x21, 0x4c, 0xee, 0x00, 0xdb, 0xe1, 0xa1, 0x58, 0x84, 0xf4, 0xc3, 0xc1, 0xde, 0x7a, 0x3e, 0xa0, 0x1e, 0xcc, 0xf4, 0x7a, 0xe8, 0x6c, 0x26, 0x93, 0x24, 0xae, 0x52, 0x37, 0x73, 0x37, 0xb6, 0xca, 0x82, 0xe8, 0x5d, 0x55, 0x3f, 0xbb, 0x2e, 0xe5, 0xf9, 0x77, 0xdc, 0x66, 0x4e, 0x14, 0x2f, 0x1b, 0x54, 0x53, 0x8f, 0xaf, 0x85, 0xca, 0xc2, 0x7c, 0x29, 0xf2, 0xed, 0x0c, 0x40, 0x42, 0x67, 0x33, 0x5d, 0x48, 0xea, 0x40, 0xe8, 0xa3, 0xdd, 0xd8, 0x96, 0xbb, 0xb3, 0xe0, 0xed, 0xf0, 0xe1, 0x6f, 0x9e, 0x89, 0x44, 0x68, 0x3b, 0x8c, 0xfb, 0xaa, 0xb5, 0xea, 0xf2, 0x25, 0x30, 0xf1, 0x58, 0xc4, 0x88, 0x0b, 0xc3, 0xe4, 0x60, 0xc0, 0x6a, 0x24, 0x03, 0x42, 0x21, 0x0a, 0xa8, 0x7b, 0x79, 0x09, 0x68 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.6", - /* Message */ - 34, - { 0x25, 0xf2, 0xa3, 0x06, 0xea, 0xbe, 0x6e, 0x3a, 0x18, 0x30, 0xdc, 0x93, 0x6b, 0xfa, 0x41, 0xcd, 0xeb, 0xb8, 0x80, 0x05, 0x17, 0x5d, 0xf4, 0xa3, 0xc9, 0xc4, 0x64, 0x23, 0x01, 0x45, 0x61, 0x11, 0x5a, 0xa8 } -, - /* Seed */ - 92, - { 0xcb, 0x8e, 0x0f, 0xf4, 0x1b, 0xab, 0x01, 0xa1, 0x42, 0xf9, 0x6e, 0x7d, 0x7c, 0xd3, 0x92, 0x82, 0x0a, 0x82, 0xa1, 0x73, 0x66, 0x74, 0xb9, 0x21, 0x35, 0xef, 0x33, 0x08, 0x96, 0x88, 0xdd, 0x30, 0xb2, 0xc2, 0xf7, 0xba, 0x11, 0x1a, 0xf7, 0x8d, 0x3f, 0x76, 0xa3, 0x7f, 0x66, 0x7d, 0xb3, 0x97, 0x5f, 0xce, 0x64, 0xec, 0x9a, 0xfb, 0x09, 0x68, 0x50, 0x7f, 0x7b, 0x31, 0x09, 0x7e, 0xaa, 0xe4, 0x88, 0x1b, 0x36, 0x24, 0x06, 0x56, 0x16, 0xca, 0x09, 0x0c, 0x20, 0x4c, 0x1f, 0xa4, 0xbe, 0x13, 0x48, 0x50, 0xea, 0x5e, 0x90, 0xfe, 0xcd, 0xc8, 0x45, 0xb9, 0xd8, 0x39 } -, - /* Encryption */ - 129, - { 0x4c, 0x7a, 0xc8, 0x12, 0x45, 0xe7, 0xd4, 0xde, 0x3c, 0x4d, 0xbf, 0xb3, 0x15, 0xc4, 0x68, 0x34, 0x1c, 0xbf, 0x22, 0x87, 0x57, 0x35, 0xc5, 0xf8, 0x05, 0x90, 0x50, 0x58, 0x53, 0x06, 0x8d, 0x6b, 0xe7, 0x03, 0x9b, 0x1c, 0xee, 0x6d, 0x07, 0xec, 0xb7, 0x66, 0x9c, 0x42, 0xf6, 0xb9, 0x2f, 0x2a, 0x71, 0xf6, 0x45, 0xf7, 0x2c, 0xba, 0xff, 0x76, 0x34, 0x16, 0x37, 0xd2, 0xf1, 0xd6, 0xb1, 0xfe, 0xce, 0xb0, 0x7f, 0x21, 0xe1, 0x4c, 0x70, 0xfb, 0x77, 0xbc, 0x7f, 0x87, 0xb0, 0x31, 0xc2, 0xc8, 0xf2, 0xad, 0xa4, 0xec, 0x43, 0xe9, 0x12, 0x68, 0x2c, 0x2f, 0x49, 0x63, 0x9e, 0x75, 0x71, 0x57, 0x18, 0x77, 0xfc, 0x48, 0x1c, 0xbf, 0x26, 0x98, 0xb3, 0x73, 0x15, 0xbd, 0x4b, 0x93, 0x07, 0x83, 0xf4, 0x79, 0x45, 0x64, 0x2b, 0x7d, 0x81, 0x5e, 0x04, 0x32, 0xd4, 0x5d, 0xd1, 0xd0, 0xd3, 0xb2, 0xa5 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.7", - /* Message */ - 51, - { 0xa0, 0xda, 0xab, 0x4f, 0x9f, 0xe0, 0x4a, 0x2a, 0x51, 0xbf, 0x08, 0x32, 0x70, 0x11, 0x5d, 0x0d, 0x06, 0xdc, 0x29, 0x21, 0xcf, 0x8d, 0xd1, 0x3f, 0x5c, 0xff, 0x26, 0x04, 0xbc, 0x55, 0x1e, 0xfd, 0x98, 0x3d, 0x9b, 0x25, 0xb7, 0x27, 0x4f, 0x3c, 0xcb, 0x0a, 0xdc, 0xc1, 0x1b, 0x1a, 0x39, 0x54, 0xab, 0x9d, 0xb4 } -, - /* Seed */ - 75, - { 0xc8, 0x1d, 0x1c, 0x02, 0xf0, 0x6e, 0x7f, 0xfd, 0x6e, 0x03, 0xb8, 0x1b, 0x71, 0x93, 0xaa, 0xbd, 0xac, 0x56, 0x63, 0xab, 0x14, 0x25, 0xa6, 0x7d, 0x1a, 0x29, 0x50, 0x88, 0x5f, 0x5d, 0x1c, 0x4b, 0x72, 0x5e, 0x20, 0x9d, 0xcb, 0xce, 0x9f, 0x7b, 0xf2, 0x96, 0x75, 0x23, 0x42, 0xf1, 0x84, 0xfe, 0xa0, 0x6a, 0x7d, 0x6c, 0xb2, 0xbd, 0x39, 0xb2, 0xa3, 0x18, 0x07, 0x51, 0x64, 0xa2, 0xe7, 0x61, 0xb7, 0x02, 0x70, 0x2b, 0x01, 0x92, 0x46, 0xc1, 0xe5, 0x0e, 0x6e } -, - /* Encryption */ - 129, - { 0x06, 0xc0, 0x6c, 0x97, 0x5f, 0xc6, 0xb9, 0xc2, 0x60, 0xd3, 0xd8, 0x81, 0x3b, 0x57, 0x14, 0x24, 0x8b, 0xeb, 0x39, 0x9b, 0x7d, 0x68, 0xfc, 0xac, 0x25, 0x03, 0x38, 0xca, 0xc5, 0x4c, 0x40, 0x72, 0x95, 0x9f, 0x62, 0x03, 0x84, 0x44, 0xe9, 0xe6, 0x66, 0xba, 0xb5, 0xf9, 0x36, 0x06, 0x70, 0x47, 0xbc, 0xaf, 0x4b, 0xa4, 0xed, 0x68, 0xc6, 0xc8, 0x18, 0x57, 0x46, 0x29, 0x32, 0x56, 0xe7, 0xc7, 0x24, 0x16, 0x65, 0x81, 0x54, 0xde, 0xc0, 0x67, 0xf4, 0x25, 0x0d, 0xc6, 0xb2, 0x9b, 0xba, 0xc1, 0x8e, 0x82, 0x1e, 0x49, 0xa4, 0xc9, 0xb1, 0x63, 0x83, 0x1f, 0x7b, 0xb3, 0x83, 0x92, 0x32, 0x6c, 0x6b, 0x46, 0x85, 0x46, 0x4f, 0xe4, 0xf0, 0x26, 0xc9, 0xae, 0x4d, 0xbc, 0x58, 0x49, 0x47, 0x7b, 0x4c, 0x26, 0x0a, 0xa4, 0xac, 0x02, 0xd2, 0x1a, 0x26, 0x40, 0x20, 0xf1, 0x0c, 0xa1, 0x1b, 0x4b, 0x0e } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.8", - /* Message */ - 51, - { 0x74, 0x3c, 0xdd, 0xb3, 0x61, 0xc0, 0xbb, 0x32, 0x47, 0x64, 0x95, 0xad, 0x5d, 0xc6, 0x3a, 0x2b, 0xce, 0x5f, 0xba, 0xc1, 0xc8, 0xc2, 0x03, 0x93, 0x69, 0x32, 0x67, 0xd8, 0x43, 0xf2, 0x8b, 0x8c, 0xf3, 0xea, 0x13, 0xe3, 0x74, 0xe0, 0x9d, 0x0a, 0xa3, 0xf7, 0xae, 0x5d, 0x8f, 0x72, 0xd8, 0xe6, 0xcb, 0x9d, 0xbd } -, - /* Seed */ - 75, - { 0xf7, 0x2e, 0xd2, 0xd0, 0x69, 0xb8, 0xae, 0x50, 0x27, 0x04, 0x6e, 0x03, 0x27, 0xb9, 0x87, 0x84, 0x58, 0x09, 0xb4, 0xe8, 0x16, 0xc8, 0x86, 0x58, 0x24, 0xfc, 0x4a, 0x23, 0x01, 0xb4, 0x56, 0x80, 0x2b, 0x18, 0x9c, 0xbb, 0x43, 0xf0, 0x48, 0x32, 0xac, 0x25, 0xc8, 0x48, 0xd7, 0x4f, 0xbe, 0x1d, 0x62, 0x5a, 0xa9, 0x8a, 0xe0, 0x5e, 0xb6, 0x25, 0x47, 0x76, 0x1c, 0x78, 0xb8, 0x17, 0x61, 0xc3, 0x03, 0xf9, 0x3d, 0xf3, 0xfc, 0x0f, 0xea, 0x3c, 0x5a, 0x7b, 0xb1 } -, - /* Encryption */ - 129, - { 0x38, 0x3e, 0xbb, 0xf1, 0x59, 0xe1, 0xd0, 0xa2, 0x1c, 0x74, 0xeb, 0x61, 0xe3, 0x64, 0x3c, 0xb6, 0x31, 0xbe, 0x18, 0xc7, 0xa2, 0xa5, 0x4e, 0x24, 0x89, 0x33, 0x58, 0x7d, 0x34, 0x5e, 0x99, 0x52, 0x72, 0x46, 0x6d, 0xc1, 0xbd, 0x61, 0x3a, 0xdd, 0xb4, 0xcd, 0x7b, 0xa5, 0x01, 0x92, 0xfc, 0x2d, 0x89, 0x4d, 0x7f, 0xda, 0xf7, 0x83, 0x63, 0xb0, 0x79, 0xd9, 0x98, 0x01, 0x9f, 0x16, 0x42, 0x31, 0xcc, 0x2d, 0x75, 0x2d, 0xb7, 0x6a, 0x9f, 0x9d, 0x0c, 0x52, 0x04, 0xbf, 0xb0, 0xf9, 0x93, 0x05, 0x53, 0x09, 0x6b, 0x5b, 0x76, 0x80, 0xb0, 0x89, 0x4f, 0xb9, 0x9c, 0x11, 0x42, 0x5c, 0x67, 0xd6, 0x5d, 0x96, 0x5e, 0x35, 0x12, 0x8e, 0x15, 0x47, 0x46, 0xb3, 0xfe, 0xd8, 0xd0, 0x16, 0x99, 0x30, 0x70, 0xa7, 0x0e, 0x07, 0xeb, 0xeb, 0xe0, 0x6f, 0x2f, 0x4e, 0x97, 0x6c, 0x9a, 0x63, 0xfb, 0xe3, 0x20 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.9", - /* Message */ - 58, - { 0xe5, 0x31, 0x92, 0xfe, 0xbc, 0xd3, 0x69, 0x58, 0xbd, 0x08, 0x03, 0xf2, 0xea, 0x0a, 0xfd, 0xbf, 0xdf, 0x99, 0x3b, 0x58, 0xa9, 0xe4, 0xee, 0x70, 0xdf, 0x95, 0xb0, 0x6d, 0x4e, 0x7d, 0x74, 0xb6, 0x74, 0x5b, 0x87, 0xf5, 0x81, 0xf3, 0x42, 0xf8, 0xae, 0xf9, 0xae, 0x4c, 0x31, 0x82, 0xc4, 0x19, 0x9b, 0x65, 0x51, 0xfe, 0x18, 0xf8, 0xd3, 0xb9, 0xff, 0xe4 } -, - /* Seed */ - 68, - { 0xad, 0x98, 0x2f, 0xa7, 0x29, 0xf2, 0x7f, 0xce, 0x8a, 0x67, 0x49, 0x03, 0xec, 0xac, 0x69, 0x4d, 0xd3, 0x34, 0x13, 0xc7, 0x8e, 0x34, 0x28, 0xae, 0xed, 0x46, 0x9f, 0x84, 0xd9, 0x57, 0x5c, 0x6d, 0xa2, 0x75, 0x29, 0xf2, 0xc1, 0x4b, 0x53, 0xb7, 0x58, 0xd2, 0x0f, 0xb6, 0xb2, 0x47, 0xc8, 0x29, 0xc5, 0xfb, 0x1a, 0x16, 0xaf, 0x55, 0x07, 0x9a, 0x70, 0x73, 0xcc, 0xa0, 0x56, 0x25, 0x96, 0x2b, 0x6d, 0x1a, 0x6b, 0xef } -, - /* Encryption */ - 129, - { 0x22, 0x1d, 0x88, 0xa8, 0x6c, 0x9e, 0xd3, 0x7a, 0xa0, 0x9c, 0xf5, 0x72, 0x54, 0x97, 0x82, 0xe5, 0x8c, 0xa8, 0xd4, 0x85, 0x1f, 0x01, 0x6a, 0xcf, 0x28, 0x9e, 0xe8, 0xbf, 0x23, 0x79, 0x0b, 0x1a, 0x8f, 0x14, 0x8c, 0x16, 0x55, 0x08, 0xbc, 0x3f, 0xdb, 0x1e, 0xf9, 0xc9, 0x01, 0x16, 0x27, 0x42, 0x7c, 0x5f, 0x32, 0xe5, 0xca, 0xb8, 0x50, 0xcb, 0x6b, 0xc0, 0xbc, 0x04, 0xa1, 0x1d, 0xa2, 0xf0, 0x18, 0x13, 0xf3, 0x41, 0x41, 0x7b, 0x3e, 0x63, 0x2b, 0xca, 0xe0, 0x02, 0x97, 0x7d, 0x64, 0xff, 0xc9, 0x62, 0xc7, 0xfa, 0x75, 0x72, 0xf5, 0x6d, 0x26, 0x17, 0xe2, 0xa5, 0x2d, 0x3e, 0xf9, 0x17, 0xc4, 0x4a, 0x33, 0xb7, 0x15, 0x82, 0xaf, 0xf1, 0x39, 0x0b, 0x7c, 0x77, 0x4d, 0x60, 0x7c, 0x8d, 0x57, 0x8f, 0x7b, 0xc9, 0x0b, 0x35, 0x80, 0xd7, 0x7b, 0x03, 0x73, 0x19, 0x14, 0x77, 0xbc, 0x14, 0x26 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.10", - /* Message */ - 25, - { 0xd0, 0xeb, 0x48, 0x0e, 0x27, 0x45, 0x77, 0x9c, 0x8a, 0x30, 0xfe, 0x82, 0x0a, 0xef, 0x56, 0xd4, 0xce, 0x39, 0xef, 0x84, 0xea, 0x40, 0xc7, 0xdf, 0x0c } -, - /* Seed */ - 101, - { 0x46, 0x5f, 0x91, 0xe3, 0xf0, 0x7c, 0xb7, 0x22, 0x83, 0xbc, 0x2b, 0xbe, 0x52, 0x8b, 0x9a, 0xb3, 0x68, 0x16, 0x54, 0xfe, 0x20, 0xb6, 0x1a, 0x33, 0xf1, 0x23, 0xad, 0xe5, 0x2e, 0x83, 0x2f, 0xfa, 0x8a, 0x1b, 0x74, 0xa4, 0x44, 0x3c, 0xc8, 0x92, 0x95, 0xa2, 0x1a, 0x2a, 0xac, 0x98, 0x74, 0xda, 0x0a, 0x56, 0x79, 0xd1, 0x8c, 0xb5, 0xc4, 0xcd, 0x69, 0x0b, 0xd0, 0xa2, 0x0c, 0xbd, 0x9e, 0x9a, 0xa0, 0x72, 0xaa, 0x87, 0x13, 0x44, 0x8f, 0x95, 0xe5, 0xd6, 0xa6, 0xe6, 0x24, 0xd5, 0xb9, 0x08, 0x5c, 0xfc, 0xec, 0xb7, 0x99, 0x2f, 0x10, 0xea, 0x2d, 0xa6, 0xd6, 0x26, 0xeb, 0xe5, 0x43, 0xd8, 0x70, 0x22, 0x36, 0xee, 0x6c } -, - /* Encryption */ - 129, - { 0x06, 0xf3, 0xf8, 0xc7, 0x0d, 0x0f, 0xc4, 0xe7, 0x44, 0x73, 0xe6, 0x8f, 0xd2, 0x3c, 0xc9, 0xdf, 0x1e, 0xdd, 0x42, 0x35, 0xb4, 0x28, 0xb7, 0x72, 0xa0, 0x83, 0xb4, 0x1c, 0x34, 0x51, 0x62, 0x5a, 0x6f, 0x15, 0xde, 0xa4, 0xbf, 0x31, 0x3b, 0xf4, 0xf0, 0x3f, 0xdc, 0x4f, 0xe9, 0xf6, 0xa2, 0x07, 0x1a, 0xc6, 0x9a, 0xa3, 0xf0, 0xfc, 0x41, 0x57, 0xef, 0xc6, 0x21, 0xf9, 0x59, 0x40, 0x61, 0xf6, 0xc1, 0x98, 0x06, 0xbd, 0x5d, 0x75, 0x9a, 0xd0, 0x23, 0xca, 0xd1, 0x48, 0xe4, 0x47, 0xd2, 0x59, 0xb6, 0x2b, 0xf7, 0x34, 0x25, 0x91, 0xbe, 0x83, 0xba, 0xec, 0x77, 0x71, 0x4c, 0xfe, 0x2b, 0x90, 0x1f, 0x36, 0x9a, 0xea, 0x68, 0x02, 0x48, 0xba, 0xbf, 0x06, 0x87, 0x10, 0xcb, 0xb9, 0x70, 0x48, 0x4f, 0x32, 0x4a, 0x23, 0x52, 0x53, 0xa3, 0x1e, 0x02, 0x25, 0x34, 0xab, 0xec, 0x7b, 0x39, 0x96, 0x06 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.11", - /* Message */ - 27, - { 0x1c, 0x42, 0x97, 0xf6, 0xdf, 0xc0, 0x7f, 0xfe, 0x57, 0x59, 0xaa, 0x1e, 0xaa, 0x5b, 0x79, 0x37, 0x8a, 0xfc, 0xdd, 0x1a, 0x9a, 0x33, 0xa2, 0x13, 0x3a, 0x39, 0xac } -, - /* Seed */ - 99, - { 0xa7, 0xaf, 0x2a, 0x86, 0x01, 0xe4, 0x08, 0xc3, 0x18, 0xfd, 0x1e, 0x0f, 0x82, 0x44, 0x5b, 0x50, 0x95, 0x44, 0xd5, 0xec, 0x97, 0xa7, 0x95, 0x8f, 0x59, 0x4b, 0x20, 0x54, 0xc5, 0x09, 0xf7, 0xef, 0xfd, 0xd4, 0x16, 0x30, 0x6b, 0x2b, 0x2c, 0x91, 0xb5, 0xa6, 0x37, 0xa1, 0x56, 0x82, 0x0d, 0x60, 0x1a, 0x23, 0xff, 0xdb, 0x31, 0xfb, 0x35, 0xd3, 0x05, 0xaa, 0x93, 0x74, 0x57, 0x8e, 0xef, 0xb8, 0x10, 0x2e, 0x8b, 0x72, 0x44, 0x19, 0x1f, 0x4e, 0xc7, 0x4a, 0xa2, 0x6a, 0x0b, 0x7d, 0xb3, 0x6c, 0xab, 0x44, 0x99, 0x9c, 0x81, 0xb3, 0x61, 0x57, 0x01, 0x6b, 0x55, 0x89, 0x06, 0xe5, 0xd7, 0x08, 0x8d, 0x51, 0x32 } -, - /* Encryption */ - 129, - { 0x3c, 0xdf, 0x2d, 0xc6, 0x7a, 0x4a, 0xa5, 0x31, 0xcf, 0xa1, 0x42, 0x80, 0x08, 0xbd, 0x05, 0x44, 0xab, 0xbd, 0x03, 0x29, 0x22, 0xdc, 0xc2, 0x43, 0x6d, 0xa0, 0xb5, 0xd7, 0xef, 0x9a, 0x70, 0x17, 0xe6, 0x19, 0x3a, 0x8b, 0xaf, 0x38, 0xc5, 0x8e, 0x91, 0x96, 0x2d, 0x65, 0xa3, 0x75, 0xf0, 0x8c, 0x1d, 0x55, 0x57, 0x9c, 0xf9, 0x4a, 0x79, 0x5c, 0x9c, 0x70, 0xb6, 0xe4, 0x2e, 0x16, 0x43, 0xce, 0xf5, 0x40, 0xdc, 0xe1, 0xe9, 0x86, 0xdd, 0x99, 0x88, 0x87, 0xb6, 0x95, 0x52, 0x44, 0x4b, 0x6d, 0xe9, 0x3b, 0xa7, 0xd5, 0xf7, 0x64, 0x83, 0x54, 0xbf, 0xcb, 0x70, 0x21, 0x39, 0xed, 0x39, 0x54, 0x94, 0x7d, 0x7b, 0x18, 0x0b, 0x6c, 0x02, 0xbc, 0xad, 0x82, 0x43, 0xa0, 0xab, 0x27, 0xca, 0x66, 0x52, 0x76, 0x29, 0x1b, 0x46, 0xcc, 0x31, 0x8d, 0xa9, 0xb5, 0xf6, 0x0a, 0x04, 0xaf, 0xfe, 0xbc, 0xb0 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.12", - /* Message */ - 16, - { 0x00, 0x92, 0x7f, 0xca, 0x7f, 0x5e, 0xc7, 0x6f, 0x54, 0x8d, 0xd4, 0x82, 0x63, 0xe3, 0x39, 0xbe } -, - /* Seed */ - 110, - { 0xde, 0xbc, 0x2c, 0x1f, 0x22, 0xd9, 0x32, 0xff, 0xcb, 0x89, 0x7c, 0xf1, 0x0a, 0xe6, 0x2c, 0x3e, 0x05, 0x1e, 0x3f, 0x78, 0x46, 0x3a, 0xe6, 0x7d, 0x95, 0x61, 0xcf, 0x1a, 0x73, 0xd5, 0x5c, 0x4b, 0x14, 0xac, 0xa6, 0xc2, 0x1d, 0x83, 0xba, 0xf9, 0x76, 0xcd, 0x8b, 0xf2, 0x46, 0xc2, 0x29, 0x78, 0x61, 0xa6, 0xb1, 0xe9, 0xc9, 0xef, 0x30, 0x81, 0xc5, 0x1c, 0x4b, 0x68, 0x7c, 0x67, 0xb5, 0xdd, 0x0f, 0xe0, 0xf7, 0x55, 0x3f, 0x73, 0x8c, 0x2c, 0x8a, 0x5f, 0x81, 0xd1, 0x26, 0x8a, 0x0c, 0x2d, 0x4a, 0x46, 0x1d, 0x63, 0x5b, 0x0e, 0x59, 0xd2, 0x3b, 0xa4, 0x17, 0xab, 0xb8, 0x04, 0x5e, 0x9c, 0x10, 0xd6, 0x6b, 0x0e, 0xc8, 0x92, 0xf9, 0x53, 0xc6, 0xf2, 0x11, 0xf0, 0x2f, 0xf0 } -, - /* Encryption */ - 129, - { 0x49, 0xb9, 0x20, 0x89, 0xb5, 0x2a, 0xb7, 0x8c, 0x33, 0xb5, 0xbb, 0x30, 0x32, 0xcf, 0x70, 0x24, 0x94, 0x4a, 0xc6, 0x8e, 0x13, 0x9d, 0x2d, 0x56, 0x06, 0x8c, 0x7a, 0x26, 0x2a, 0x53, 0xe7, 0x80, 0x9f, 0xb5, 0xb0, 0x15, 0x65, 0xcc, 0x65, 0x61, 0xd7, 0x13, 0x30, 0x46, 0x87, 0x52, 0x30, 0xac, 0x21, 0x75, 0x64, 0x72, 0x96, 0xcf, 0x2b, 0x48, 0x47, 0xe1, 0x2b, 0x73, 0x63, 0x19, 0x72, 0x53, 0x21, 0xbe, 0xa2, 0x64, 0x75, 0x7d, 0xe0, 0xeb, 0x49, 0x88, 0x72, 0xd8, 0x9a, 0x4d, 0x7c, 0xe4, 0xa1, 0xbd, 0xb7, 0x33, 0x5d, 0xae, 0xa7, 0x8b, 0xa1, 0x96, 0xfd, 0x50, 0xd9, 0x03, 0x82, 0xe6, 0xd6, 0x2f, 0x8d, 0xf7, 0xae, 0x68, 0x5a, 0x1d, 0xfc, 0x84, 0x9e, 0x11, 0x99, 0x7d, 0xee, 0x88, 0x60, 0xd1, 0x0f, 0x70, 0x7b, 0x0d, 0x35, 0x36, 0x5a, 0x81, 0x24, 0x30, 0x73, 0x1e, 0x7a, 0x50, 0x8d } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.13", - /* Message */ - 26, - { 0x8b, 0x6d, 0xf2, 0xd6, 0xda, 0x63, 0x1a, 0xc8, 0xd5, 0x55, 0x6a, 0x26, 0x97, 0x54, 0x28, 0xfc, 0x4d, 0x20, 0xef, 0x5b, 0x4a, 0x1f, 0x06, 0x8e, 0xd2, 0xe5 } -, - /* Seed */ - 100, - { 0xff, 0x2c, 0x06, 0x98, 0x85, 0x2d, 0x1b, 0x0a, 0xe3, 0xc5, 0xc5, 0xc9, 0xbe, 0x26, 0xe8, 0x3c, 0x90, 0x44, 0x84, 0x2c, 0x16, 0x07, 0xf5, 0xf4, 0x08, 0x6a, 0x6d, 0x6c, 0xf1, 0x08, 0xad, 0xca, 0x61, 0xea, 0xf6, 0x65, 0x40, 0x0d, 0x7c, 0xff, 0x2a, 0x3a, 0xda, 0xdf, 0xaf, 0xd8, 0x0c, 0x64, 0x95, 0x6d, 0xa2, 0xd7, 0xd7, 0xc1, 0x35, 0xab, 0xf5, 0xa0, 0xd1, 0x76, 0x06, 0x25, 0x56, 0xeb, 0x4d, 0x8b, 0x75, 0xb9, 0x5c, 0xd1, 0x1e, 0xa9, 0xc0, 0x44, 0x2f, 0x84, 0x6f, 0x03, 0x7d, 0xa8, 0x77, 0x29, 0x02, 0xbf, 0xfc, 0xde, 0x65, 0x59, 0xe1, 0xb5, 0x9e, 0x60, 0xc6, 0xd0, 0xf9, 0x89, 0x6b, 0xa5, 0xc3, 0xc4 } -, - /* Encryption */ - 129, - { 0x41, 0x52, 0x76, 0x69, 0x80, 0x33, 0x39, 0xeb, 0xd8, 0xf2, 0xd1, 0xcc, 0x18, 0x6c, 0x7e, 0x8e, 0xbb, 0x80, 0xcf, 0x4b, 0x94, 0x9d, 0x8a, 0x28, 0x43, 0x65, 0x32, 0x9f, 0x3c, 0xe4, 0x6e, 0xbd, 0xac, 0x0a, 0x96, 0x9f, 0x67, 0x61, 0x90, 0x0c, 0xfe, 0x34, 0x2b, 0xc8, 0x4c, 0x7d, 0x69, 0x51, 0xac, 0xcf, 0x45, 0x28, 0x0b, 0xaf, 0x24, 0xa0, 0xcb, 0xb2, 0x42, 0xa9, 0x42, 0x18, 0xef, 0x9f, 0xd3, 0x71, 0xb1, 0xe0, 0x08, 0x24, 0x62, 0x62, 0x07, 0x0b, 0xf5, 0x54, 0xed, 0x57, 0x00, 0x7b, 0x97, 0x39, 0x79, 0x16, 0x35, 0x86, 0x1d, 0x86, 0xc6, 0x5b, 0x1a, 0x82, 0x56, 0xf4, 0x25, 0xf9, 0xf3, 0xae, 0x51, 0x9e, 0x1b, 0x1b, 0xdc, 0x58, 0x75, 0xb8, 0x78, 0xdd, 0xcf, 0xc1, 0x47, 0x0f, 0xee, 0xf2, 0xae, 0xeb, 0x01, 0x4b, 0x7e, 0x33, 0xef, 0xb9, 0xf4, 0xdd, 0x07, 0x83, 0xd1, 0x71, 0x23 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.14", - /* Message */ - 44, - { 0xea, 0x03, 0x96, 0x69, 0xbc, 0xd7, 0xa8, 0xcd, 0xce, 0xab, 0x58, 0x55, 0x91, 0xb5, 0x63, 0x61, 0xe9, 0x0b, 0xda, 0x0e, 0xa4, 0x40, 0x10, 0x49, 0x64, 0xe8, 0x89, 0xec, 0xe1, 0x8a, 0xeb, 0x04, 0xce, 0x0a, 0xb5, 0xb1, 0xcc, 0xb2, 0x30, 0xae, 0x03, 0x25, 0x5a, 0x39 } -, - /* Seed */ - 82, - { 0x20, 0x4f, 0xae, 0xb3, 0x13, 0x96, 0x5c, 0xc1, 0xa1, 0x8f, 0xaf, 0x10, 0x39, 0xfd, 0xde, 0x68, 0x1b, 0xc4, 0x3b, 0x22, 0x3e, 0x28, 0xbc, 0x47, 0x1c, 0x50, 0x42, 0x3d, 0xa0, 0xbd, 0x79, 0x7d, 0x6a, 0x8c, 0x73, 0x8c, 0x54, 0x03, 0x3c, 0x8e, 0x55, 0x9e, 0xa2, 0xd1, 0x0c, 0x3b, 0x79, 0xb8, 0x0e, 0x2e, 0xfd, 0xec, 0xfe, 0x89, 0x1c, 0xea, 0x2e, 0xcb, 0x34, 0x51, 0xa1, 0xa8, 0xe2, 0xec, 0x2f, 0x44, 0x7b, 0x79, 0x8d, 0x7d, 0xe5, 0x64, 0x1b, 0xda, 0x4a, 0xa9, 0x90, 0xb3, 0x01, 0xe1, 0xdd, 0xe7 } -, - /* Encryption */ - 129, - { 0x4c, 0xa1, 0xc8, 0x5c, 0xe3, 0xc6, 0x20, 0xd4, 0x29, 0x91, 0xcf, 0x41, 0x73, 0x3e, 0xad, 0x26, 0xa0, 0x93, 0x11, 0x18, 0x5f, 0xff, 0xe5, 0x8f, 0x41, 0x28, 0x8f, 0x6d, 0x0b, 0xb6, 0x84, 0x5b, 0x2d, 0x5a, 0xcf, 0x1a, 0xa0, 0x6c, 0x78, 0xd7, 0x1f, 0x76, 0x93, 0x96, 0xa9, 0x43, 0x42, 0x03, 0xe3, 0x8b, 0xb0, 0x1f, 0xd8, 0x8e, 0xb2, 0x3e, 0x6b, 0xc5, 0x1b, 0xa0, 0xc5, 0xf3, 0xee, 0xb3, 0x27, 0x13, 0xca, 0xd4, 0xd0, 0x87, 0x80, 0x50, 0x61, 0xab, 0x47, 0x3a, 0x15, 0x67, 0xe7, 0x9b, 0xbf, 0x4e, 0xae, 0x49, 0x36, 0xf1, 0x8d, 0x02, 0x05, 0xb3, 0x74, 0x6a, 0x17, 0xe0, 0x64, 0x8c, 0x52, 0x22, 0x3d, 0xd9, 0xf9, 0x99, 0x72, 0x81, 0xb5, 0x35, 0xab, 0x2f, 0xb3, 0xcf, 0xf0, 0x3c, 0xa8, 0x90, 0xf7, 0x10, 0xaa, 0x88, 0xfd, 0x2d, 0x0f, 0x39, 0x2f, 0xf4, 0xa8, 0x8d, 0x31, 0x1a, 0xa1 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.15", - /* Message */ - 5, - { 0x0f, 0x46, 0x2b, 0xeb, 0xc6 } -, - /* Seed */ - 121, - { 0x4e, 0xae, 0x5d, 0x54, 0x92, 0xd9, 0x44, 0xff, 0xdb, 0x04, 0x2a, 0xd9, 0x50, 0x16, 0x81, 0xad, 0xb3, 0xeb, 0x6a, 0xb5, 0x28, 0xb6, 0xe8, 0x13, 0x53, 0x55, 0xb6, 0x23, 0xab, 0x55, 0xa7, 0x40, 0x87, 0xb1, 0x9f, 0xc5, 0x9b, 0x85, 0x34, 0xda, 0x9a, 0x88, 0xda, 0x29, 0xf6, 0x6f, 0x71, 0xf9, 0x45, 0x2a, 0xed, 0xe0, 0xe3, 0xe9, 0x39, 0x07, 0x70, 0x9c, 0x34, 0x49, 0x56, 0x72, 0x85, 0x74, 0xb6, 0x6f, 0xb9, 0xa6, 0xf3, 0x38, 0x3d, 0x58, 0xa0, 0x13, 0x6f, 0x94, 0xc4, 0xed, 0x86, 0xca, 0x9d, 0xd3, 0x8b, 0xff, 0x07, 0x0f, 0xcc, 0x2d, 0xef, 0x29, 0xbd, 0xd6, 0xfc, 0x98, 0x59, 0x70, 0x96, 0x7f, 0x02, 0xfd, 0x6f, 0x93, 0x01, 0xcd, 0x56, 0xd0, 0x48, 0xa4, 0x42, 0xd7, 0x02, 0x40, 0x9a, 0x98, 0xa1, 0x32, 0xab, 0x6b, 0xed, 0xd4, 0xfe } -, - /* Encryption */ - 129, - { 0x29, 0x36, 0x9e, 0xb0, 0x0a, 0x3f, 0x87, 0x84, 0x38, 0xc9, 0x38, 0xf9, 0xd7, 0xbd, 0xa3, 0x85, 0x6c, 0x45, 0xa6, 0xd7, 0x7c, 0x17, 0x88, 0x51, 0x1b, 0x98, 0x2c, 0x58, 0xf6, 0x3d, 0xbe, 0xa3, 0x3e, 0x63, 0xae, 0x1d, 0x45, 0xc2, 0xdf, 0x6b, 0xa8, 0x0f, 0x0d, 0xe9, 0x97, 0x59, 0x2e, 0x1f, 0x8a, 0x3b, 0x3a, 0x09, 0xed, 0x76, 0x06, 0x51, 0x45, 0x3e, 0x10, 0x99, 0x78, 0xcf, 0xde, 0x3a, 0x60, 0x0a, 0x74, 0xfa, 0xa8, 0xa9, 0x1b, 0x7c, 0x72, 0x4f, 0x97, 0x3c, 0xb8, 0x0b, 0x96, 0x83, 0x5f, 0x05, 0x0b, 0x7d, 0xc0, 0x9d, 0x2f, 0x15, 0x74, 0x76, 0xc5, 0xb7, 0x05, 0x1f, 0x94, 0xd9, 0xc0, 0xf3, 0x17, 0xe1, 0xf1, 0x88, 0xe3, 0x09, 0x80, 0x79, 0x5b, 0x09, 0x6c, 0xf9, 0xbb, 0xce, 0xb5, 0x63, 0x6b, 0x3d, 0xb9, 0x87, 0x05, 0x4a, 0x56, 0x08, 0x75, 0x22, 0x75, 0x96, 0x29, 0x97, 0xe7 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.16", - /* Message */ - 45, - { 0x51, 0x4d, 0x3b, 0x38, 0x00, 0x22, 0xb3, 0x78, 0x2e, 0x8a, 0x77, 0xd7, 0x7b, 0xf2, 0x4a, 0xfd, 0xf9, 0x2f, 0x33, 0x97, 0x47, 0x4d, 0xae, 0x0d, 0x4b, 0xd6, 0xe4, 0xfa, 0x31, 0xca, 0x60, 0x83, 0xdf, 0x49, 0x6b, 0x36, 0x62, 0x6e, 0x7f, 0x8e, 0x1c, 0x91, 0x9f, 0x9f, 0x2e } -, - /* Seed */ - 81, - { 0xd4, 0xd3, 0xa9, 0xe8, 0xfb, 0xeb, 0x1d, 0xc6, 0x07, 0xb4, 0xdd, 0x78, 0x87, 0xba, 0x25, 0xc3, 0xd0, 0xbd, 0x81, 0x34, 0x84, 0xbd, 0x53, 0x76, 0xdc, 0x83, 0xef, 0xb5, 0x8e, 0xc5, 0xb2, 0x56, 0x2c, 0xb4, 0x4f, 0x98, 0x5e, 0x59, 0xf5, 0x0b, 0x9a, 0xde, 0x3c, 0x66, 0x71, 0x6c, 0xc6, 0xf4, 0x2e, 0x51, 0xc6, 0x0a, 0x2f, 0x4d, 0x8d, 0x75, 0xbf, 0xb9, 0xb8, 0x24, 0x10, 0x5d, 0x1e, 0xe1, 0x58, 0x35, 0xf5, 0xf5, 0xf2, 0x54, 0xfc, 0x6f, 0x68, 0x0e, 0xee, 0x0b, 0x85, 0xaf, 0x54, 0x7c, 0x17 } -, - /* Encryption */ - 129, - { 0x19, 0xfb, 0x39, 0x1a, 0x31, 0x00, 0x87, 0xbc, 0x3d, 0x08, 0x79, 0x1f, 0xd5, 0x99, 0x94, 0xbe, 0x80, 0x12, 0xdf, 0xfd, 0x76, 0xa0, 0x2a, 0xdb, 0xd4, 0x79, 0xcc, 0x0c, 0x15, 0x56, 0x60, 0x5d, 0x4d, 0xa2, 0xa3, 0x46, 0x1c, 0x7c, 0x71, 0xa8, 0x5e, 0xd8, 0xcf, 0x85, 0xe0, 0x8f, 0x45, 0xda, 0xde, 0x51, 0x8c, 0x00, 0xaf, 0x09, 0xf4, 0x93, 0xee, 0x8a, 0x55, 0x46, 0xff, 0xbe, 0xfb, 0x05, 0x3c, 0xca, 0x2e, 0xef, 0x06, 0x84, 0x76, 0x3c, 0xf7, 0x80, 0xf2, 0xe0, 0x97, 0xbd, 0x8e, 0x5c, 0x2e, 0xa8, 0x4c, 0xb1, 0xa8, 0xb8, 0xf8, 0x49, 0x6c, 0xc9, 0x18, 0x16, 0x7f, 0x65, 0x6c, 0xdc, 0x9e, 0x1d, 0x3b, 0x2a, 0x23, 0x38, 0xb6, 0x4c, 0x61, 0xe9, 0x0e, 0xcc, 0x27, 0x4a, 0x12, 0x10, 0xe3, 0xdb, 0x57, 0x83, 0xae, 0x3c, 0x00, 0xab, 0xd3, 0x74, 0x8a, 0x81, 0x0f, 0xd9, 0x14, 0x91, 0x14 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.17", - /* Message */ - 55, - { 0xfb, 0xa1, 0x63, 0x17, 0xb0, 0x93, 0x08, 0x3e, 0x37, 0x20, 0xaa, 0x06, 0x48, 0x17, 0xe7, 0x4c, 0xa7, 0x51, 0xa5, 0x17, 0x87, 0x4b, 0x69, 0x26, 0x50, 0xc4, 0x14, 0x7f, 0x11, 0x9f, 0x68, 0x90, 0x70, 0x2c, 0xf8, 0xb1, 0x4f, 0x0c, 0x18, 0x82, 0x21, 0x2d, 0x72, 0x40, 0x6c, 0x3a, 0x45, 0xd7, 0xd9, 0xff, 0xa4, 0x31, 0x24, 0x10, 0xa6 } -, - /* Seed */ - 71, - { 0x9c, 0xc9, 0xa4, 0xbf, 0x8c, 0xc2, 0x75, 0xa6, 0xb9, 0xb1, 0x35, 0x10, 0x31, 0x91, 0x10, 0x91, 0x7a, 0xd8, 0x53, 0x24, 0xc5, 0xa4, 0x34, 0x5e, 0x58, 0xf1, 0xfa, 0x47, 0x27, 0x5e, 0xe5, 0x92, 0x15, 0x69, 0xdc, 0xbc, 0xbd, 0x72, 0x36, 0x70, 0xcf, 0x4a, 0x24, 0xeb, 0xcd, 0x57, 0xf5, 0x7e, 0x99, 0x8c, 0x4b, 0xbd, 0x4a, 0x95, 0x67, 0x9d, 0x60, 0xba, 0xa0, 0xab, 0xe8, 0x79, 0x66, 0x8a, 0x2c, 0xb6, 0xed, 0x0f, 0xb9, 0x4e, 0x4a } -, - /* Encryption */ - 129, - { 0x4c, 0x41, 0xb9, 0xcb, 0xcc, 0x6f, 0xa8, 0x7f, 0x23, 0xf1, 0x7a, 0x36, 0xd0, 0x51, 0xe7, 0x78, 0x0a, 0x07, 0x06, 0x56, 0xca, 0xe7, 0xbe, 0xba, 0x14, 0xfa, 0x91, 0xc5, 0x55, 0xb8, 0x58, 0x8e, 0x88, 0x09, 0xe7, 0xd3, 0x35, 0x4e, 0x7e, 0xf5, 0xe0, 0xfa, 0xef, 0xe1, 0xcf, 0x39, 0x2e, 0x6f, 0xda, 0xd4, 0x04, 0x4a, 0xef, 0x08, 0xe3, 0x3e, 0x6f, 0xc2, 0x01, 0xc5, 0x47, 0xfd, 0xbd, 0xf7, 0xc7, 0x3d, 0x3b, 0xe0, 0x96, 0xed, 0x25, 0x3f, 0x9d, 0xf4, 0xaf, 0x52, 0xe1, 0x3b, 0x9a, 0x19, 0x25, 0xaa, 0x73, 0x93, 0xa6, 0x42, 0x95, 0x30, 0x20, 0x92, 0x01, 0xe5, 0x5b, 0x20, 0xe5, 0x1d, 0x50, 0x05, 0xd0, 0x6b, 0x58, 0x35, 0x3b, 0xfa, 0xfc, 0xee, 0xc3, 0x7d, 0x60, 0xe1, 0xca, 0x0d, 0x9d, 0xdd, 0xd8, 0x68, 0x0b, 0xd0, 0xa5, 0xd6, 0x92, 0xe7, 0x4f, 0x2d, 0xbd, 0xfc, 0xe2, 0x66, 0x02 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.18", - /* Message */ - 53, - { 0x5f, 0xfe, 0x82, 0xe0, 0x33, 0x54, 0x42, 0x45, 0xb8, 0x49, 0x62, 0xd3, 0x92, 0x7c, 0x2f, 0xa5, 0x99, 0x72, 0xef, 0x59, 0xc2, 0x37, 0xa3, 0x86, 0xa5, 0x1b, 0xd0, 0xba, 0x1f, 0x2c, 0x1f, 0x8e, 0x45, 0xb4, 0x6a, 0x05, 0xad, 0x97, 0xdb, 0x49, 0xd3, 0xac, 0xc6, 0x34, 0x4f, 0x1e, 0xda, 0xdf, 0x65, 0x64, 0xc2, 0x8c, 0xe1 } -, - /* Seed */ - 73, - { 0xcc, 0x23, 0x59, 0xbf, 0xd0, 0xd5, 0x7b, 0xce, 0xbf, 0x07, 0x5b, 0x87, 0xa5, 0x85, 0xa9, 0xbd, 0xe6, 0x59, 0x3e, 0xb2, 0x49, 0x61, 0xef, 0xf1, 0x98, 0x7e, 0x73, 0x56, 0x05, 0xd4, 0xe3, 0x0e, 0x97, 0x19, 0x37, 0xf6, 0xf3, 0xf5, 0xbe, 0x52, 0x78, 0xfd, 0x47, 0x6d, 0xc6, 0x60, 0xee, 0x07, 0x30, 0xcd, 0x07, 0xe5, 0xd1, 0xf4, 0x20, 0x09, 0xa3, 0x33, 0x31, 0x2d, 0x93, 0x28, 0xf3, 0xb0, 0x08, 0x5c, 0x40, 0x75, 0xbc, 0x70, 0x9a, 0x10, 0xf1 } -, - /* Encryption */ - 129, - { 0x05, 0x8b, 0x50, 0xe0, 0xbc, 0xa6, 0xb9, 0x34, 0xc0, 0x1b, 0xf7, 0xc3, 0x3b, 0xb6, 0x15, 0xb7, 0x22, 0xea, 0x41, 0x80, 0x7a, 0x7d, 0x2c, 0x7c, 0xb3, 0xd4, 0x38, 0xe2, 0x8d, 0xbe, 0x33, 0x3e, 0xd6, 0xd8, 0x37, 0x47, 0x7a, 0xf8, 0x4b, 0xb0, 0x06, 0xbb, 0xb1, 0x0b, 0x36, 0x94, 0x4f, 0x15, 0xd4, 0xf6, 0xd2, 0x8b, 0x5e, 0xd2, 0x49, 0xd5, 0x69, 0x0c, 0x08, 0x37, 0xa1, 0x6e, 0x15, 0x7b, 0xa8, 0x80, 0x22, 0x74, 0x10, 0x1c, 0xd4, 0x4e, 0x7f, 0xed, 0x72, 0xa7, 0x59, 0x81, 0xc9, 0x75, 0x66, 0xbc, 0x70, 0xe5, 0x55, 0x97, 0x02, 0xbf, 0x5b, 0x62, 0xfb, 0x09, 0xb2, 0x13, 0x60, 0x56, 0x73, 0xaa, 0xeb, 0xb7, 0xfe, 0x9b, 0x1a, 0xe6, 0xd8, 0x04, 0x03, 0xa2, 0x01, 0x33, 0x80, 0x3e, 0x1e, 0xd2, 0x35, 0x0b, 0x8e, 0x15, 0xff, 0x01, 0x9a, 0x70, 0x0f, 0x2a, 0xbe, 0x87, 0xd6, 0xe7, 0x33 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.19", - /* Message */ - 49, - { 0x22, 0x63, 0x3c, 0xc3, 0xfe, 0x7a, 0x7b, 0x4f, 0x00, 0xfa, 0x99, 0x9c, 0x4f, 0xe0, 0xd8, 0x82, 0xc3, 0x1b, 0xdc, 0x0d, 0x67, 0x0c, 0x0c, 0xc3, 0xd2, 0x88, 0x96, 0x1f, 0xbe, 0x63, 0x72, 0xe0, 0xe5, 0x32, 0x46, 0x42, 0xc7, 0xb1, 0xfa, 0x85, 0x2e, 0x1b, 0x4f, 0x69, 0x6f, 0x12, 0xf5, 0x58, 0x66 } -, - /* Seed */ - 77, - { 0x3e, 0xdf, 0xca, 0xf4, 0x88, 0x71, 0xd2, 0x91, 0xd5, 0xb7, 0xf7, 0x72, 0x3d, 0x92, 0xd9, 0x51, 0x51, 0x52, 0xb6, 0xbf, 0x52, 0xb8, 0x23, 0x69, 0x9c, 0x58, 0x8f, 0x75, 0xf3, 0x4e, 0x37, 0x95, 0x55, 0x0d, 0x07, 0x81, 0x18, 0xe2, 0x86, 0xc9, 0x6e, 0x90, 0x07, 0xae, 0xe1, 0x54, 0xf5, 0x7c, 0xe7, 0xf1, 0xd4, 0x60, 0x39, 0x47, 0x3a, 0x4a, 0x37, 0xa9, 0xb5, 0x90, 0xa3, 0x7e, 0xea, 0x59, 0x94, 0x7f, 0xe8, 0x58, 0x7c, 0x95, 0x69, 0x88, 0xbc, 0xb1, 0x74, 0xe9, 0x7c } -, - /* Encryption */ - 129, - { 0x3d, 0xeb, 0xbc, 0x6c, 0xfb, 0x0e, 0xed, 0x87, 0x16, 0x6b, 0xcc, 0xd5, 0x4c, 0x75, 0x97, 0xad, 0x36, 0xca, 0x0a, 0xc9, 0x6c, 0xf1, 0x66, 0x76, 0xe1, 0x87, 0x4b, 0xf5, 0xf1, 0x0a, 0x0e, 0xc6, 0x9c, 0x3b, 0xe2, 0x25, 0x96, 0x78, 0xee, 0xa6, 0x3a, 0x18, 0x08, 0xd9, 0x06, 0x65, 0xff, 0xce, 0x9a, 0xf0, 0x82, 0x7e, 0xe6, 0x29, 0xed, 0xd6, 0x59, 0x43, 0x43, 0x7f, 0x8c, 0xa0, 0xa6, 0x71, 0x17, 0x2c, 0x52, 0x1c, 0xc0, 0xd1, 0xdd, 0x01, 0xe2, 0x2f, 0x20, 0xa6, 0xc7, 0x9c, 0x42, 0x7a, 0xda, 0x88, 0x56, 0x00, 0x0c, 0x4e, 0x03, 0x5d, 0x9c, 0x5e, 0xf2, 0xe1, 0x05, 0xf2, 0xc9, 0xf6, 0x45, 0x7d, 0x9e, 0xe9, 0x5b, 0x43, 0xbc, 0x4b, 0xe3, 0x29, 0x4a, 0x0e, 0xe1, 0xd5, 0xc8, 0x33, 0xae, 0x91, 0x07, 0x8a, 0xed, 0x09, 0xe7, 0x92, 0xbb, 0x42, 0xc2, 0x5e, 0x00, 0xb0, 0x87, 0xe5, 0x61 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 13.20", - /* Message */ - 63, - { 0x55, 0x2b, 0x38, 0x4c, 0x5e, 0x51, 0x74, 0xf5, 0x1f, 0x38, 0x0d, 0x8b, 0x53, 0xe3, 0xc8, 0x97, 0xb4, 0x8c, 0x66, 0x9a, 0x9c, 0x2d, 0x11, 0x98, 0x5b, 0x86, 0x54, 0xde, 0x7f, 0x76, 0xd9, 0x62, 0x39, 0x6a, 0x37, 0xb9, 0x53, 0x41, 0xf9, 0x9d, 0xec, 0xe4, 0xaf, 0xd7, 0x1d, 0x3c, 0x84, 0xe1, 0x28, 0x7b, 0x0f, 0x0f, 0x86, 0xee, 0xff, 0xcf, 0xd9, 0x7b, 0xa1, 0x88, 0xe3, 0x79, 0x9e } -, - /* Seed */ - 63, - { 0x2e, 0x2f, 0x3e, 0x3f, 0x46, 0xd4, 0x74, 0x0c, 0xb2, 0x6c, 0xbc, 0x65, 0xaa, 0xe2, 0xaf, 0xe4, 0x9d, 0x0b, 0xe6, 0x66, 0x39, 0xd0, 0xdb, 0x10, 0xdf, 0xd6, 0xaf, 0x60, 0x64, 0x46, 0xf3, 0xb7, 0xde, 0x98, 0x21, 0x2f, 0x86, 0x17, 0x4b, 0xdf, 0xa5, 0xb2, 0xe2, 0x35, 0x85, 0x07, 0x45, 0x3c, 0x20, 0xad, 0xa6, 0x9a, 0x4f, 0xfe, 0x0a, 0x35, 0xe1, 0x2e, 0xfb, 0xab, 0x3b, 0xb4, 0x4c } -, - /* Encryption */ - 129, - { 0x14, 0x92, 0x91, 0xee, 0xb5, 0x36, 0xfc, 0x07, 0x03, 0xf7, 0xbd, 0xf1, 0xf0, 0x31, 0xa4, 0x30, 0xcc, 0x83, 0xad, 0xc4, 0x3e, 0x09, 0x68, 0x64, 0x91, 0x26, 0x69, 0x34, 0xef, 0x37, 0xea, 0xea, 0xb1, 0x1b, 0xc7, 0xf3, 0x91, 0x49, 0xab, 0x33, 0x43, 0x66, 0x94, 0x59, 0x36, 0x73, 0xcc, 0xc6, 0x39, 0x0b, 0x52, 0x9e, 0x64, 0xd3, 0x42, 0xe9, 0xf2, 0x1d, 0x17, 0x6d, 0xa2, 0x1f, 0xa6, 0x5a, 0xbd, 0x57, 0xee, 0xc6, 0x0d, 0xde, 0xc7, 0xd1, 0xa0, 0x93, 0xdb, 0xa3, 0x76, 0x44, 0x5f, 0x1b, 0xcf, 0xe5, 0xa6, 0xaa, 0xce, 0x9f, 0x13, 0x42, 0xaf, 0x39, 0xdb, 0x8a, 0xd4, 0x85, 0xba, 0x22, 0x2d, 0x39, 0x12, 0x62, 0x28, 0xfa, 0xee, 0xb4, 0x9b, 0xb3, 0xb2, 0x71, 0xfd, 0x38, 0xe1, 0x15, 0x25, 0xd8, 0x03, 0x15, 0x4e, 0x74, 0x08, 0x4b, 0x75, 0xc3, 0xdb, 0xcd, 0xff, 0x2e, 0x3d, 0x10, 0x42 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 14: A 1536-bit RSA key pair", -{ - /* Modulus */ - 192, - { 0xbe, 0x0c, 0xa0, 0x1f, 0x9c, 0x17, 0x21, 0x66, 0xf9, 0x12, 0x39, 0x1e, 0x5d, 0x58, 0xdd, 0xc3, 0x0d, 0x5d, 0xd0, 0x27, 0x9a, 0x49, 0xbb, 0x31, 0x2a, 0x31, 0xe4, 0xc8, 0xa6, 0x6a, 0x52, 0xfb, 0x4e, 0x8b, 0x67, 0x42, 0xfa, 0xac, 0xb2, 0x24, 0xc3, 0x03, 0x9f, 0x1e, 0x19, 0x8f, 0x33, 0x23, 0xb8, 0x88, 0xba, 0x0e, 0x35, 0xbb, 0x94, 0xc5, 0x11, 0xbd, 0x22, 0xb8, 0x86, 0x40, 0x5a, 0x71, 0x5e, 0x40, 0x9d, 0xe3, 0xbc, 0xeb, 0x4f, 0xc9, 0x91, 0x1b, 0x0e, 0x9c, 0x3b, 0x1e, 0x42, 0xe2, 0x57, 0xd5, 0xbb, 0xea, 0x07, 0x22, 0xb5, 0xd5, 0xdd, 0x35, 0x37, 0x56, 0x9d, 0xc7, 0x56, 0x06, 0x46, 0xa7, 0x50, 0xb8, 0x7e, 0xaa, 0x6f, 0x3a, 0x40, 0x5a, 0x94, 0xbf, 0x2a, 0xda, 0x72, 0xb5, 0x0a, 0x4b, 0x01, 0x87, 0xbb, 0x9d, 0x00, 0xec, 0x45, 0x1d, 0x50, 0xa6, 0xa9, 0x1a, 0x1e, 0x2a, 0x91, 0x19, 0x2a, 0x7f, 0xd7, 0x56, 0xb9, 0x00, 0x14, 0x1f, 0xe8, 0x8f, 0x96, 0xe2, 0x08, 0x0d, 0xfd, 0xd8, 0x01, 0x66, 0xa7, 0xbf, 0x67, 0xe3, 0x71, 0x44, 0xd0, 0x9e, 0x3a, 0xf8, 0x99, 0x74, 0xe5, 0x7c, 0x72, 0xb0, 0x3a, 0x2b, 0x88, 0xfd, 0x29, 0x95, 0x25, 0x2a, 0xce, 0x4f, 0x30, 0xe2, 0xe4, 0x7c, 0x28, 0x18, 0x05, 0x72, 0x40, 0x53, 0x6b, 0x58, 0xdb, 0x42, 0x07, 0x50, 0x9e, 0x59 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 191, - { 0xf3, 0x7d, 0x28, 0xd6, 0x1f, 0x28, 0x99, 0xa5, 0xc0, 0xe0, 0xa0, 0x74, 0x9d, 0x13, 0x89, 0x38, 0x7c, 0x64, 0xc8, 0xc3, 0x58, 0xa9, 0x71, 0xda, 0xd1, 0x3c, 0xff, 0x85, 0xc5, 0x9a, 0x62, 0xdd, 0xa7, 0xbb, 0xc0, 0xf7, 0xe5, 0xbd, 0xc6, 0x5d, 0xff, 0x9d, 0xe9, 0xc7, 0x45, 0x40, 0x46, 0x31, 0x75, 0x81, 0x48, 0x16, 0x8d, 0xfe, 0x6a, 0xc0, 0xa2, 0x87, 0x6a, 0x56, 0x05, 0x3b, 0xab, 0x2a, 0x2a, 0x9f, 0xf2, 0x72, 0x79, 0x4d, 0xd5, 0xd8, 0x13, 0x9e, 0xed, 0x10, 0xbc, 0xfb, 0x4d, 0xf3, 0x30, 0x20, 0xd5, 0x9e, 0x30, 0x48, 0xfd, 0x2f, 0x0c, 0x43, 0x14, 0x26, 0x14, 0x5e, 0x36, 0xa1, 0xd0, 0xa6, 0xbf, 0xce, 0x44, 0x43, 0xef, 0x3c, 0x7e, 0x31, 0xd4, 0xa9, 0x2f, 0xb8, 0x51, 0x7a, 0x49, 0xf7, 0x88, 0xc3, 0xb4, 0xe1, 0x37, 0x39, 0x5a, 0x4b, 0xee, 0xea, 0x63, 0xe0, 0xe0, 0xad, 0xc3, 0x22, 0x4f, 0x98, 0x09, 0x25, 0x03, 0x7d, 0xf6, 0xf5, 0xb2, 0x6c, 0x00, 0x72, 0x39, 0xb4, 0xf0, 0x1f, 0x8a, 0x9a, 0x61, 0xea, 0x0b, 0x51, 0x19, 0xbc, 0x9d, 0x54, 0x96, 0xa9, 0x5b, 0x60, 0xea, 0x76, 0x6c, 0xcb, 0xad, 0xe0, 0x37, 0xe3, 0x40, 0x32, 0x4f, 0x25, 0xf0, 0x2e, 0x72, 0x45, 0xc2, 0x36, 0xea, 0xe4, 0x36, 0x7a, 0x64, 0x68, 0xa7, 0xa0, 0x93, 0x8d, 0x85, 0xc0, 0xa1 } -, - /* Prime 1 */ - 96, - { 0xdf, 0xcc, 0x92, 0x74, 0x2c, 0x48, 0xd3, 0x34, 0xc6, 0x6f, 0xca, 0xa6, 0xd8, 0xa7, 0xe4, 0x22, 0x54, 0x43, 0x0f, 0x80, 0xa8, 0x35, 0x9e, 0xa2, 0x3b, 0x9a, 0x83, 0xb2, 0x41, 0xe4, 0x7f, 0x39, 0x9b, 0x3f, 0xfe, 0x3d, 0xab, 0x3f, 0x15, 0xbe, 0x8f, 0xa5, 0xc9, 0xe6, 0x46, 0xdf, 0xf9, 0x7c, 0xcf, 0x9b, 0x43, 0x17, 0x61, 0x07, 0x80, 0xad, 0x44, 0xcb, 0x1f, 0xbc, 0xef, 0xbd, 0x6e, 0xba, 0x05, 0x5d, 0x96, 0x94, 0x3c, 0x02, 0x47, 0xe0, 0xc8, 0x76, 0x78, 0xeb, 0x0b, 0xf7, 0x6c, 0x88, 0x76, 0xc3, 0xab, 0xb9, 0xef, 0x72, 0xcf, 0x01, 0x8f, 0x58, 0x11, 0xa6, 0xbe, 0xe0, 0x4f, 0x09 } -, - /* Prime 2 */ - 96, - { 0xd9, 0x64, 0xe9, 0x6e, 0xa6, 0xfa, 0x43, 0x70, 0xb5, 0x91, 0xee, 0x79, 0xe7, 0xe7, 0x2e, 0xcc, 0x21, 0x81, 0x53, 0x78, 0x7a, 0x60, 0xe2, 0xf7, 0xae, 0x94, 0xfa, 0x95, 0xb9, 0xbd, 0x68, 0x69, 0xd2, 0x81, 0xac, 0x3c, 0xcf, 0xb6, 0x57, 0x24, 0x7c, 0x58, 0x3e, 0xaf, 0xdc, 0x13, 0xd4, 0xd7, 0xa7, 0xd7, 0x76, 0x5e, 0x44, 0x67, 0xdf, 0x76, 0xb5, 0x28, 0xbf, 0x94, 0xbd, 0x03, 0xa3, 0xea, 0x73, 0xb8, 0x1b, 0xe2, 0x6c, 0xca, 0xd9, 0x89, 0xb9, 0xf0, 0x77, 0x28, 0xda, 0xd5, 0x3b, 0x38, 0xef, 0x7f, 0xe9, 0xeb, 0xe9, 0x11, 0x40, 0xcb, 0xad, 0x17, 0xdc, 0x7e, 0xcb, 0x1d, 0x58, 0xd1 } -, - /* Prime exponent 1 */ - 96, - { 0x9e, 0x79, 0xf6, 0x9b, 0x5d, 0x60, 0x94, 0x6f, 0x22, 0xb5, 0xb7, 0x03, 0x3f, 0x18, 0x64, 0x6c, 0x0a, 0xcf, 0x12, 0x03, 0x41, 0x19, 0xf7, 0x23, 0x5a, 0xa1, 0xa7, 0xf0, 0x6a, 0xc8, 0xab, 0x6e, 0xd7, 0x89, 0x11, 0x38, 0x0a, 0x33, 0xb9, 0xea, 0x1f, 0x3e, 0x7f, 0x22, 0x19, 0xbe, 0x30, 0xa5, 0x39, 0x3d, 0xf0, 0xdc, 0x75, 0x51, 0x22, 0xc5, 0x8f, 0x99, 0x66, 0xf8, 0x1b, 0xac, 0x40, 0xe4, 0x69, 0x38, 0x44, 0x90, 0xe3, 0x8d, 0x99, 0xe8, 0x8b, 0x0b, 0x99, 0xc4, 0x97, 0xcc, 0xb5, 0x86, 0x4c, 0xd3, 0x72, 0x9f, 0x4f, 0xf8, 0x34, 0xae, 0x1e, 0x1b, 0x77, 0x24, 0x64, 0xb5, 0xe2, 0x41 } -, - /* Prime exponent 2 */ - 96, - { 0x3a, 0x05, 0xe9, 0x18, 0x13, 0x91, 0x30, 0x76, 0xe0, 0xbf, 0x76, 0x7b, 0x2b, 0x1e, 0x55, 0x2b, 0x3e, 0xb6, 0x19, 0xe5, 0x4a, 0x24, 0x99, 0xef, 0xa9, 0xb5, 0x31, 0xbc, 0xcc, 0xba, 0x75, 0x27, 0xe9, 0x7b, 0x9a, 0xd1, 0x10, 0x4f, 0x86, 0xaa, 0xc2, 0x55, 0x7b, 0x45, 0xcc, 0xe3, 0xae, 0x27, 0x71, 0x30, 0xdc, 0xf3, 0x04, 0x27, 0x05, 0x49, 0xd5, 0xc8, 0x6e, 0x79, 0xf0, 0x89, 0x0c, 0x33, 0x03, 0x77, 0xdc, 0x59, 0x6e, 0xd8, 0x25, 0x7f, 0xd1, 0x15, 0x11, 0x78, 0xe2, 0x0f, 0x8f, 0xa2, 0xfe, 0xa9, 0x91, 0x71, 0xd9, 0xdf, 0x35, 0x00, 0x27, 0xce, 0xfa, 0x97, 0x0c, 0xf7, 0x64, 0x41 } -, - /* Coefficient */ - 96, - { 0x18, 0xb1, 0x0d, 0xd7, 0x3b, 0x14, 0x7d, 0x86, 0xb6, 0x0c, 0xf7, 0xfe, 0xbf, 0x46, 0x35, 0x93, 0xc0, 0xbd, 0xd6, 0xbc, 0x83, 0xa8, 0x39, 0x57, 0x3b, 0x4b, 0x3f, 0xe6, 0x5c, 0x0b, 0x13, 0xe7, 0xb6, 0x94, 0xb8, 0x1a, 0x56, 0x57, 0x21, 0x0b, 0xe9, 0x47, 0x01, 0x1d, 0x8d, 0x49, 0x29, 0xc1, 0x27, 0xfd, 0x2f, 0x3e, 0x31, 0x06, 0xc2, 0x53, 0x38, 0x3b, 0xe6, 0x35, 0x41, 0xd1, 0x23, 0x5b, 0xd7, 0x9c, 0x57, 0x2e, 0x92, 0xe2, 0x36, 0x34, 0x28, 0x20, 0x98, 0xbe, 0xe9, 0x4d, 0x48, 0xbd, 0x62, 0x8a, 0x0e, 0xb2, 0x1e, 0xd2, 0x61, 0xcf, 0xa3, 0x5b, 0x69, 0xb9, 0x77, 0x70, 0xe2, 0x93 } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 14.1", - /* Message */ - 9, - { 0x2b, 0xd6, 0xe3, 0xc1, 0xde, 0xfd, 0xdd, 0x5a, 0x43 } -, - /* Seed */ - 180, - { 0xe7, 0x84, 0xd5, 0x25, 0x03, 0xe6, 0x29, 0x1f, 0x25, 0x8e, 0x44, 0x2d, 0xb5, 0x77, 0xf9, 0x91, 0x63, 0x82, 0xa0, 0xd1, 0x4c, 0x7b, 0x9d, 0xcc, 0xbd, 0xb6, 0x07, 0xaf, 0x01, 0xf0, 0x25, 0x8f, 0xdc, 0x97, 0x23, 0x97, 0xda, 0x12, 0x39, 0xd4, 0x44, 0x9a, 0x58, 0x28, 0x6e, 0xce, 0x20, 0x08, 0xf7, 0x18, 0xf6, 0x90, 0xce, 0xe7, 0x3a, 0x02, 0x7f, 0xab, 0xf8, 0x4b, 0xdf, 0x7a, 0xce, 0x45, 0xf7, 0xed, 0x2d, 0x77, 0x32, 0x4c, 0xbe, 0xe9, 0x0e, 0xcc, 0x6f, 0x1e, 0x7b, 0x86, 0xcc, 0x29, 0x35, 0xa4, 0x7b, 0xa1, 0x56, 0x65, 0x0b, 0x42, 0xfc, 0x71, 0xaa, 0xd0, 0x70, 0x99, 0xa2, 0x7e, 0x97, 0xfe, 0x5a, 0x3f, 0x25, 0xfe, 0x13, 0x48, 0xe4, 0x42, 0x39, 0x12, 0x12, 0xa5, 0xcf, 0x1b, 0x44, 0x5a, 0x1e, 0x70, 0x19, 0x1f, 0xfa, 0x8f, 0xca, 0xde, 0x63, 0x5d, 0x2e, 0x44, 0x65, 0xf5, 0xf9, 0x13, 0xc5, 0x3e, 0x33, 0xb5, 0x91, 0x52, 0xcd, 0x8a, 0x14, 0x97, 0x84, 0xf2, 0x7d, 0x83, 0x18, 0x28, 0xaf, 0x2d, 0x66, 0x6a, 0x5c, 0x30, 0x9b, 0x56, 0xd0, 0x71, 0x9c, 0xfd, 0x80, 0x73, 0x40, 0x69, 0xa2, 0x3e, 0x09, 0x2d, 0x83, 0x15, 0x39, 0x9f, 0x95, 0xc4, 0x0a, 0xd7, 0xfd, 0x0b, 0xb5, 0xf9, 0x43, 0x77 } -, - /* Encryption */ - 192, - { 0x85, 0xef, 0x3e, 0x47, 0x76, 0x77, 0xbf, 0x76, 0x07, 0x1a, 0x27, 0xbb, 0xc7, 0x39, 0x57, 0x15, 0xcb, 0x35, 0x07, 0x96, 0xe4, 0x4f, 0x1b, 0x52, 0xa0, 0x8e, 0x90, 0x5e, 0x08, 0xff, 0x12, 0x56, 0x70, 0x5a, 0x9b, 0xf0, 0x15, 0x2e, 0x87, 0x2b, 0xdc, 0x74, 0xbb, 0x1f, 0x2f, 0xc8, 0x63, 0x1e, 0xf8, 0x81, 0x2d, 0x16, 0x94, 0x6a, 0x30, 0xb5, 0x8f, 0x44, 0x64, 0xd6, 0xe7, 0xb2, 0x45, 0x0b, 0xe4, 0x5b, 0x48, 0xcc, 0xff, 0x5d, 0x8e, 0xcf, 0x7a, 0x00, 0xb1, 0xb7, 0x8f, 0xc8, 0xfa, 0x54, 0x71, 0x3d, 0xd6, 0x96, 0xa1, 0x4a, 0xcb, 0x68, 0x00, 0xc0, 0xd3, 0xb6, 0x9a, 0x0b, 0x44, 0x43, 0x77, 0xfa, 0x30, 0x3a, 0x7d, 0x66, 0xdb, 0x49, 0x27, 0x91, 0x8a, 0x4b, 0xfb, 0x0f, 0xd4, 0x93, 0xbf, 0xaa, 0x01, 0x6a, 0xeb, 0xff, 0x99, 0x53, 0x30, 0xa6, 0xdc, 0xb6, 0x21, 0x5d, 0xd3, 0xbd, 0xb3, 0x5d, 0x7c, 0xd6, 0x1c, 0xcf, 0x0e, 0x9c, 0xcc, 0xbf, 0x51, 0xe9, 0xea, 0x65, 0x8e, 0xa3, 0x1d, 0x12, 0x43, 0x44, 0x4c, 0x4b, 0x72, 0xff, 0xf0, 0x1a, 0xc9, 0x3f, 0x28, 0xeb, 0x7f, 0x67, 0xc1, 0x83, 0x2e, 0x56, 0x8e, 0xd7, 0x2f, 0xd9, 0x57, 0xd5, 0xb4, 0xfd, 0x2f, 0x00, 0xb6, 0x02, 0x31, 0x71, 0xb8, 0x5a, 0xb0, 0xca, 0xa1, 0x03, 0x0e, 0xd3, 0xe3, 0xed, 0xc9, 0x50, 0x31, 0x45 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 14.2", - /* Message */ - 43, - { 0x10, 0x47, 0x35, 0xd9, 0xad, 0x72, 0x60, 0x46, 0x47, 0x3d, 0xf4, 0xb1, 0x3b, 0x2f, 0x5f, 0xa2, 0x85, 0xc3, 0xd2, 0x33, 0xec, 0xd4, 0x61, 0x70, 0x58, 0x2d, 0xd2, 0x28, 0xcd, 0xee, 0x46, 0x4d, 0xa5, 0x09, 0x5e, 0x20, 0x8c, 0xf8, 0xfb, 0xca, 0x05, 0x38, 0x8b } -, - /* Seed */ - 146, - { 0xdc, 0x6a, 0x63, 0x1e, 0x29, 0x75, 0x45, 0xd2, 0xf6, 0xfe, 0x9c, 0x69, 0xa5, 0xd3, 0x06, 0xa1, 0x09, 0x16, 0xd7, 0xe7, 0xef, 0x0d, 0xc9, 0x53, 0xf2, 0x1b, 0x6a, 0x04, 0x14, 0x31, 0xec, 0x8b, 0xa5, 0xce, 0x1c, 0x13, 0x87, 0x43, 0xfa, 0xac, 0x54, 0x97, 0xd6, 0x99, 0xf2, 0xff, 0x1d, 0x4a, 0x44, 0xa3, 0xe0, 0x63, 0x7c, 0xc5, 0xe5, 0xe6, 0x38, 0xcd, 0x73, 0x67, 0x7d, 0x09, 0xaf, 0xee, 0x3e, 0xc9, 0xfe, 0x80, 0x52, 0x94, 0x7a, 0x73, 0x33, 0x4c, 0x32, 0x70, 0x47, 0x28, 0x56, 0xf3, 0x07, 0x24, 0x3a, 0xc5, 0x8b, 0xf8, 0x63, 0x80, 0x74, 0x66, 0x7d, 0x7f, 0x7c, 0x18, 0xe3, 0xab, 0x32, 0x7e, 0xa3, 0xfc, 0x78, 0x91, 0xf1, 0xc5, 0x8a, 0xb4, 0x7e, 0x4f, 0xfa, 0x6e, 0x7d, 0x90, 0x11, 0xa3, 0x3d, 0x9b, 0x40, 0xa2, 0xd7, 0x89, 0xee, 0x42, 0x21, 0x25, 0x62, 0x30, 0xca, 0x8a, 0x61, 0x81, 0x1b, 0x09, 0x72, 0xcf, 0xd9, 0x86, 0x01, 0x75, 0x26, 0x18, 0x1d, 0x24, 0xee, 0xbb, 0x32, 0xcc } -, - /* Encryption */ - 192, - { 0x92, 0x1d, 0x2b, 0x02, 0x6d, 0x6b, 0x7e, 0x22, 0x20, 0x1d, 0xe7, 0x7f, 0xbf, 0x67, 0x99, 0x90, 0xf9, 0xaf, 0xf4, 0xea, 0x7f, 0xe7, 0xce, 0x45, 0x02, 0x21, 0x5f, 0x9e, 0x7a, 0xa4, 0x18, 0xb8, 0x5f, 0x72, 0xea, 0xdb, 0x6b, 0x69, 0x42, 0xbb, 0x08, 0xa0, 0x8b, 0xe7, 0xda, 0x66, 0x19, 0xaa, 0x5f, 0x1d, 0x2f, 0xf9, 0x61, 0xc9, 0xdc, 0x2c, 0x34, 0x1a, 0xe3, 0x2a, 0x25, 0x4f, 0xde, 0xab, 0xa2, 0xf6, 0x45, 0x0a, 0xc4, 0x47, 0x4b, 0x62, 0x74, 0xf0, 0xc3, 0x46, 0xf2, 0x6d, 0xa4, 0xed, 0x55, 0x5a, 0x8c, 0x95, 0x11, 0x89, 0xdc, 0x83, 0x69, 0xf3, 0x4d, 0x76, 0xd8, 0x37, 0xd6, 0xf3, 0x8a, 0x95, 0x18, 0xa6, 0x27, 0x1c, 0x5b, 0x56, 0x34, 0x62, 0x25, 0xa5, 0xab, 0x8d, 0xa6, 0x03, 0x2a, 0x59, 0x30, 0xfd, 0x5b, 0x77, 0x72, 0x9d, 0xe6, 0x32, 0xe1, 0x75, 0x2f, 0xc7, 0x2a, 0x0c, 0x34, 0xae, 0xce, 0x25, 0x65, 0x7b, 0x28, 0x1b, 0xe8, 0x93, 0x2c, 0x56, 0x50, 0xc9, 0x82, 0xfa, 0x14, 0x5f, 0xde, 0x0b, 0xcd, 0xd4, 0x8a, 0x73, 0xaa, 0x02, 0x88, 0xb4, 0xde, 0x46, 0x11, 0x33, 0xf2, 0x7d, 0x51, 0xe3, 0x86, 0x01, 0x6a, 0x72, 0x72, 0x6a, 0x9e, 0xde, 0x1d, 0x32, 0xdf, 0xc7, 0xe6, 0xf9, 0x78, 0x0c, 0x04, 0xeb, 0x70, 0xff, 0xff, 0xc2, 0x68, 0x82, 0x95, 0x66, 0x73, 0x33 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.3", - /* Message */ - 25, - { 0x31, 0x7e, 0x6f, 0x5e, 0x17, 0x50, 0x0f, 0xe9, 0x4f, 0xdf, 0xf2, 0x84, 0xbb, 0xe5, 0x03, 0x01, 0x04, 0x4d, 0x14, 0x22, 0xd3, 0xca, 0x70, 0x05, 0x98 } -, - /* Seed */ - 164, - { 0x46, 0x6d, 0x53, 0xc8, 0xd0, 0xbb, 0x9e, 0xd4, 0x60, 0xca, 0xa6, 0x3d, 0x79, 0xbf, 0xb8, 0x77, 0xbc, 0x4e, 0xa3, 0x45, 0xca, 0xb4, 0x35, 0x7e, 0x63, 0x9a, 0x95, 0xdc, 0xae, 0x37, 0x9d, 0xdc, 0xea, 0x5d, 0x64, 0xfe, 0xe9, 0x9f, 0xb6, 0xf7, 0x5f, 0xf2, 0x4e, 0xb7, 0x4d, 0x44, 0x03, 0x44, 0xd1, 0x47, 0xe4, 0x33, 0x14, 0xa0, 0xf8, 0x9f, 0x8b, 0x96, 0x14, 0x82, 0x15, 0x36, 0x8e, 0xb8, 0x65, 0x1f, 0x6d, 0x3c, 0xa0, 0xd0, 0x8d, 0x0b, 0x4c, 0x73, 0xe6, 0xd1, 0xa7, 0x68, 0x40, 0x98, 0x26, 0xd4, 0x3c, 0x2f, 0x81, 0xf3, 0x08, 0x40, 0x60, 0x5c, 0x43, 0xd0, 0xfe, 0x67, 0x1d, 0x3f, 0x02, 0x4c, 0x70, 0xd0, 0xb8, 0x99, 0x23, 0xcf, 0x90, 0x4e, 0x39, 0x97, 0x99, 0x62, 0xcd, 0x51, 0x5c, 0x16, 0x74, 0x29, 0x2a, 0xa3, 0x0d, 0xac, 0x70, 0x0d, 0xb4, 0xeb, 0x7e, 0x63, 0xd5, 0x6f, 0xdf, 0x08, 0xc2, 0x24, 0x70, 0xf2, 0x43, 0x86, 0x19, 0x45, 0xd0, 0x0f, 0xa4, 0xe2, 0x79, 0x90, 0x21, 0x2c, 0xfe, 0xd4, 0x28, 0x5d, 0xf1, 0xed, 0xda, 0x4b, 0x0a, 0xec, 0x91, 0x35, 0x59, 0xf5, 0x9d, 0x12, 0x55, 0x90 } -, - /* Encryption */ - 192, - { 0x14, 0x1f, 0xca, 0x68, 0xdd, 0x2e, 0x4d, 0x1d, 0xe5, 0x08, 0x6d, 0xbb, 0x78, 0x5f, 0xf4, 0x7d, 0x81, 0xe3, 0x9c, 0x31, 0x1d, 0x91, 0x7a, 0x99, 0x39, 0xa6, 0xff, 0x5b, 0x13, 0x43, 0x9c, 0xa9, 0x56, 0xc9, 0x74, 0x2b, 0xcf, 0xe4, 0x50, 0xb5, 0xbd, 0x03, 0x5b, 0x54, 0x1f, 0xab, 0x30, 0x7f, 0x24, 0xfb, 0xfb, 0x3f, 0x8b, 0x90, 0x21, 0x5b, 0x56, 0x04, 0x67, 0x6e, 0x56, 0x96, 0xf3, 0xba, 0x95, 0xfd, 0xb8, 0xd0, 0x90, 0xa6, 0xc2, 0x4a, 0x29, 0xd9, 0x90, 0xfb, 0xff, 0x1d, 0xa2, 0x02, 0x81, 0x42, 0x55, 0x8f, 0x0a, 0xd7, 0x53, 0x43, 0xc7, 0x2f, 0x38, 0x82, 0x3d, 0xb7, 0x66, 0x7b, 0x05, 0xe1, 0x6b, 0x51, 0x92, 0xb9, 0x33, 0x60, 0x07, 0xf7, 0x58, 0x10, 0x6c, 0x32, 0x8b, 0xd4, 0x76, 0x11, 0x8d, 0xf8, 0x2a, 0xd0, 0x75, 0x48, 0xa7, 0x26, 0x92, 0x1f, 0xb2, 0xe1, 0x92, 0xb4, 0x3c, 0x8c, 0x30, 0xcc, 0x9b, 0x84, 0x34, 0x63, 0x0e, 0x27, 0xfd, 0x8b, 0x23, 0xef, 0x8d, 0x8f, 0x22, 0xbe, 0x7f, 0x73, 0xae, 0xcd, 0xcb, 0x2b, 0x1e, 0xc5, 0x53, 0x9d, 0x5f, 0xbb, 0x2c, 0xff, 0x9e, 0xd5, 0xe7, 0xf1, 0x9b, 0x49, 0x18, 0x3d, 0x22, 0x1d, 0xfd, 0x53, 0x7d, 0x4f, 0x37, 0x03, 0x2e, 0xf3, 0x2f, 0x63, 0xb6, 0xff, 0x74, 0xee, 0x24, 0xa0, 0x96, 0xcf, 0x45, 0x59, 0x27, 0x09 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.4", - /* Message */ - 29, - { 0x90, 0x96, 0x3d, 0xda, 0xb3, 0x78, 0x91, 0xe7, 0x28, 0x8b, 0x53, 0xbe, 0x5d, 0x9d, 0xc5, 0x67, 0xb1, 0xa0, 0x7a, 0x15, 0x66, 0xc2, 0xaf, 0xdd, 0xd7, 0x72, 0x73, 0x24, 0xba } -, - /* Seed */ - 160, - { 0xa4, 0x9f, 0x12, 0x15, 0x17, 0x5b, 0xa0, 0x4c, 0x27, 0x4a, 0xbc, 0x05, 0x1f, 0x0c, 0x17, 0xa0, 0x8a, 0x63, 0x64, 0x89, 0x43, 0xdb, 0x2e, 0x8c, 0x76, 0x22, 0xbc, 0xbb, 0x1d, 0xcc, 0x56, 0x7e, 0xbe, 0x6a, 0xdd, 0x8c, 0x44, 0x48, 0x16, 0xc9, 0xd4, 0x36, 0xee, 0x93, 0xce, 0xfe, 0x23, 0xec, 0x41, 0xdd, 0xfc, 0xb0, 0xa4, 0x03, 0xbb, 0x6d, 0xbf, 0xf0, 0xae, 0x5d, 0x6f, 0xcd, 0xd7, 0x64, 0xda, 0xc1, 0xa7, 0x2a, 0x48, 0x4f, 0x36, 0x47, 0x1f, 0x4f, 0x3b, 0xd7, 0x25, 0xb2, 0xdb, 0x5a, 0xfa, 0x6a, 0xcf, 0x53, 0x0e, 0x4e, 0x4e, 0x86, 0xb4, 0xfd, 0xa8, 0x78, 0x20, 0x47, 0x87, 0x1c, 0xb0, 0x55, 0xad, 0x68, 0xc8, 0x41, 0xde, 0x54, 0x5a, 0x55, 0x40, 0xc8, 0xcc, 0x12, 0xe7, 0xe3, 0xf1, 0x58, 0x14, 0xa0, 0x03, 0x9a, 0x81, 0x03, 0x4b, 0xde, 0x9c, 0x68, 0xae, 0x22, 0x85, 0xe6, 0x16, 0xb7, 0xb5, 0x55, 0x5f, 0x98, 0xc6, 0x13, 0xce, 0x2e, 0xf6, 0x66, 0xa0, 0x22, 0x46, 0x5c, 0x63, 0x67, 0xd0, 0xbd, 0xa4, 0x0c, 0x12, 0xe9, 0x41, 0xf6, 0x99, 0x8a, 0x14, 0xa2, 0xb5, 0xe3 } -, - /* Encryption */ - 192, - { 0x8a, 0xd5, 0xbf, 0x78, 0x23, 0x2a, 0xa3, 0x6f, 0xb7, 0x83, 0x58, 0x3e, 0x71, 0xbc, 0x13, 0x93, 0x03, 0x7d, 0x13, 0xe7, 0x74, 0x54, 0xa9, 0xdc, 0x11, 0x11, 0x43, 0x4e, 0x75, 0xdd, 0x80, 0x20, 0x46, 0xba, 0xb4, 0x20, 0x25, 0x42, 0x0c, 0x63, 0x96, 0x1e, 0xa0, 0x06, 0x26, 0x57, 0xca, 0x50, 0x65, 0xde, 0xb6, 0x53, 0xac, 0x78, 0xeb, 0x64, 0x98, 0xcf, 0x14, 0xd1, 0x70, 0x4c, 0xec, 0x59, 0x11, 0x69, 0x60, 0x8d, 0xb0, 0x1f, 0xc9, 0x3d, 0x0d, 0x68, 0xe6, 0x28, 0x01, 0xb4, 0x65, 0xa3, 0x87, 0xa9, 0xc7, 0x2f, 0x7e, 0xb3, 0x5b, 0x0b, 0xa5, 0x3a, 0x5e, 0xfa, 0x98, 0xc9, 0xf0, 0xcb, 0x7c, 0x7c, 0xba, 0x18, 0x04, 0xcd, 0x70, 0x1d, 0x02, 0x97, 0xb6, 0x60, 0x05, 0xae, 0x25, 0xec, 0x3b, 0x6c, 0xd4, 0xcf, 0x31, 0x94, 0xa3, 0xfa, 0x65, 0xd9, 0x8c, 0x4b, 0x95, 0x33, 0x30, 0x79, 0x0e, 0xfd, 0xe7, 0x4f, 0xa2, 0x75, 0xd2, 0xa7, 0x9d, 0x33, 0x10, 0xa5, 0xbc, 0xc2, 0xc8, 0x1c, 0x91, 0xfc, 0x25, 0x56, 0x2c, 0xa9, 0x39, 0xf8, 0xd9, 0xc1, 0x75, 0xed, 0xf4, 0xb0, 0x76, 0x73, 0xd5, 0x39, 0x24, 0xe2, 0x7b, 0x15, 0x52, 0x88, 0x1c, 0x10, 0x83, 0x19, 0x23, 0x71, 0x5d, 0x14, 0x9f, 0x1f, 0x31, 0x9e, 0x38, 0xe9, 0x1d, 0xfa, 0x56, 0x6c, 0x54, 0x53, 0xba, 0xcc, 0x14, 0x8b } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.5", - /* Message */ - 11, - { 0x3d, 0x81, 0x02, 0x1f, 0xf6, 0x47, 0x33, 0x37, 0xe0, 0x4b, 0x92 } -, - /* Seed */ - 178, - { 0x9b, 0x70, 0x29, 0x73, 0x13, 0x77, 0xe8, 0x26, 0x97, 0xfa, 0x56, 0xb0, 0x86, 0xce, 0x49, 0xd3, 0xc4, 0xb1, 0x54, 0x9d, 0xe8, 0x1e, 0x3e, 0x99, 0xe1, 0x6c, 0xd9, 0x72, 0x29, 0x7a, 0x56, 0x0f, 0xf4, 0x83, 0xf2, 0xef, 0x5b, 0x71, 0xb0, 0x0f, 0xc6, 0x84, 0x74, 0x4f, 0x22, 0x4e, 0x85, 0x7e, 0x6d, 0x72, 0x39, 0xf1, 0x56, 0xd7, 0xb6, 0x10, 0x2f, 0x23, 0x04, 0xf8, 0xa5, 0x50, 0x50, 0xb3, 0x75, 0x6c, 0x54, 0x8f, 0x6e, 0xa2, 0x6e, 0xa6, 0xf7, 0x39, 0x4d, 0x2b, 0xb3, 0x79, 0x33, 0x35, 0x84, 0xe3, 0xb4, 0x81, 0xd0, 0x73, 0xc0, 0xa5, 0x8a, 0x0a, 0xd7, 0x87, 0xad, 0xb4, 0x80, 0xe1, 0xf2, 0x0a, 0x1a, 0x59, 0x0e, 0x03, 0x1e, 0x6b, 0x2b, 0xb7, 0xf3, 0x6a, 0x93, 0x61, 0x0d, 0xdf, 0x70, 0x83, 0xa5, 0x07, 0x68, 0xc9, 0x98, 0x62, 0x3f, 0x6e, 0x64, 0x37, 0x6a, 0x29, 0xb4, 0xa4, 0x18, 0x03, 0x2d, 0x27, 0x39, 0xbd, 0x4e, 0x74, 0x7d, 0xdf, 0xc7, 0x7f, 0xe3, 0xcf, 0x27, 0x93, 0xa2, 0x9b, 0xc7, 0x67, 0xbf, 0xac, 0xc7, 0x13, 0xe5, 0xf1, 0x0e, 0x53, 0x1b, 0x4c, 0x71, 0x89, 0x97, 0xb9, 0xbb, 0x6b, 0x65, 0x15, 0xe0, 0x71, 0x13, 0x28, 0x89, 0x74, 0x7e, 0x54, 0x6b, 0x13, 0x46, 0x8d } -, - /* Encryption */ - 192, - { 0x1b, 0x88, 0x4b, 0x06, 0x7d, 0x0b, 0xb1, 0x59, 0x7f, 0x5f, 0xab, 0x93, 0x30, 0x95, 0x75, 0x5a, 0x53, 0x0d, 0x9d, 0x04, 0xe2, 0x75, 0x4a, 0x57, 0x97, 0xff, 0xff, 0x5e, 0xf9, 0xce, 0xf1, 0x89, 0x54, 0x99, 0x98, 0x23, 0x00, 0x50, 0x3b, 0x3f, 0xeb, 0xcb, 0xaa, 0x09, 0xd3, 0x6b, 0x7d, 0xac, 0xc3, 0x0d, 0xf3, 0xc8, 0x68, 0xf0, 0x1a, 0x5f, 0x17, 0xed, 0x4a, 0x72, 0xa8, 0x5b, 0x6a, 0xdc, 0x80, 0xa2, 0x6a, 0x1b, 0x81, 0x97, 0x6b, 0x39, 0x3c, 0xba, 0x9b, 0x0c, 0x82, 0xcb, 0x1e, 0x2c, 0x58, 0x3a, 0xb6, 0xf3, 0x14, 0xed, 0xa2, 0x9a, 0x43, 0x32, 0x21, 0xb6, 0xe3, 0xed, 0x53, 0x51, 0x53, 0x74, 0xbb, 0xcd, 0x2b, 0x96, 0xf5, 0xcb, 0x5b, 0xd5, 0x81, 0x5d, 0x1a, 0x5d, 0xcb, 0xf0, 0x80, 0xd2, 0xd3, 0x7c, 0xb9, 0x6c, 0x4d, 0x96, 0x1d, 0xc4, 0x7e, 0x13, 0x0d, 0xb7, 0xb8, 0xd0, 0x18, 0x2e, 0x33, 0x69, 0xde, 0xf4, 0xc0, 0xf6, 0xc4, 0x2c, 0x6c, 0x20, 0x53, 0x1a, 0xf1, 0xa1, 0x90, 0x36, 0xde, 0xf0, 0x8d, 0x4b, 0xac, 0xa7, 0x1b, 0x99, 0xaf, 0x3c, 0x4e, 0x1e, 0xd5, 0x27, 0xd5, 0x1f, 0x37, 0xd0, 0xee, 0x1e, 0xa2, 0xc8, 0xb8, 0xeb, 0xf4, 0xfd, 0x52, 0x79, 0x85, 0x1d, 0xc3, 0x20, 0xe7, 0x42, 0x00, 0x8e, 0x04, 0x04, 0x4d, 0x0d, 0xa0, 0x64, 0x36, 0x61, 0x3d, 0x1b } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.6", - /* Message */ - 20, - { 0x5c, 0x74, 0x5d, 0xd4, 0xa8, 0xc5, 0x92, 0x93, 0x4e, 0xd1, 0x5e, 0x22, 0xfa, 0x9d, 0xec, 0x4a, 0x4d, 0xc2, 0x0a, 0x9f } -, - /* Seed */ - 169, - { 0x0e, 0x6a, 0xbb, 0x82, 0x9a, 0x3b, 0x16, 0xd0, 0x8b, 0x0b, 0xd4, 0x3e, 0xb9, 0x5c, 0x79, 0x1a, 0xf2, 0xa3, 0x39, 0x12, 0xea, 0x83, 0x3e, 0xe6, 0x89, 0x3e, 0xd5, 0xad, 0x3e, 0xe7, 0x44, 0xc8, 0xb2, 0xdd, 0x28, 0xfc, 0xee, 0x80, 0x8d, 0x3f, 0x01, 0x49, 0x58, 0x25, 0xbe, 0x0f, 0xe6, 0x37, 0x32, 0x07, 0xa8, 0x78, 0xd4, 0xa5, 0x25, 0xea, 0x72, 0xcf, 0xb0, 0xbb, 0x58, 0xa2, 0x67, 0x76, 0xfb, 0x39, 0xee, 0xbd, 0x33, 0x5f, 0x04, 0xcf, 0x71, 0x86, 0xbe, 0x61, 0xc5, 0x63, 0x5d, 0x95, 0xe5, 0x60, 0xed, 0xdf, 0xd4, 0x5d, 0xd8, 0x6a, 0x4e, 0x67, 0x0d, 0x33, 0x56, 0x8d, 0x83, 0xd2, 0xca, 0x20, 0x3e, 0xd2, 0x8d, 0x90, 0xe4, 0x8b, 0x06, 0x4d, 0x09, 0xa7, 0x5f, 0x82, 0x8d, 0xea, 0xcd, 0x5b, 0x37, 0xef, 0xcf, 0x78, 0x4f, 0xb1, 0x1b, 0x17, 0xd6, 0xd9, 0xf2, 0x31, 0x52, 0x24, 0xf8, 0xe7, 0x63, 0x79, 0x1b, 0xac, 0x6c, 0xf4, 0x6e, 0x1c, 0x23, 0xb0, 0xb0, 0x25, 0x2c, 0x19, 0xed, 0xf0, 0x40, 0xd3, 0x5f, 0x59, 0x25, 0x53, 0x26, 0x5b, 0x88, 0x6b, 0x29, 0xca, 0x56, 0xeb, 0xc5, 0x38, 0x63, 0x71, 0x41, 0x4d, 0x82, 0xa3, 0x40 } -, - /* Encryption */ - 192, - { 0x2b, 0x0a, 0x43, 0xb3, 0xcd, 0xc9, 0x9d, 0x6c, 0xfc, 0x74, 0xda, 0x2a, 0x86, 0xec, 0xd7, 0xd5, 0x76, 0x24, 0x75, 0xd1, 0x43, 0xe5, 0x48, 0x6f, 0xa9, 0xcb, 0xeb, 0xbf, 0x27, 0xd8, 0xe4, 0x14, 0x1e, 0xf7, 0x2b, 0x6d, 0x4f, 0x13, 0xf6, 0x64, 0xb3, 0xd2, 0xe9, 0xec, 0x32, 0x22, 0x7c, 0x1a, 0xd5, 0xb7, 0x6c, 0x0d, 0x1b, 0xef, 0xbd, 0x65, 0x89, 0x68, 0xc7, 0xdb, 0x14, 0x95, 0x23, 0x82, 0x49, 0xbc, 0xd9, 0x5e, 0x75, 0x40, 0x25, 0x4e, 0x65, 0x74, 0x98, 0x23, 0xb8, 0xa3, 0x4b, 0xf6, 0xa1, 0x41, 0x07, 0x21, 0xdf, 0x34, 0xf3, 0xc8, 0xd5, 0x79, 0xf3, 0x6a, 0xed, 0x9e, 0x0b, 0xac, 0x23, 0x1e, 0x54, 0xc2, 0x7f, 0x76, 0x73, 0x19, 0x7d, 0x19, 0xf5, 0x1c, 0xe6, 0xac, 0xbb, 0xcb, 0x7b, 0x1a, 0x55, 0xe3, 0x8e, 0xde, 0xbe, 0xed, 0x34, 0x61, 0x07, 0x3e, 0x80, 0xc7, 0x9a, 0x4f, 0xc3, 0x09, 0x31, 0x30, 0x69, 0x6b, 0xff, 0xf2, 0xbb, 0xcb, 0x74, 0x90, 0x5f, 0x2d, 0x34, 0x44, 0x33, 0x80, 0x57, 0xfd, 0xfa, 0xcb, 0xc4, 0xdb, 0x81, 0x93, 0x5b, 0x29, 0xe9, 0x9e, 0x55, 0xcc, 0xc1, 0xd4, 0x8d, 0x89, 0xe9, 0xdc, 0x4a, 0x63, 0xa0, 0x11, 0xa6, 0x23, 0x32, 0xcf, 0x57, 0x02, 0x62, 0xa0, 0x63, 0x59, 0xcc, 0x36, 0xc0, 0x5a, 0x6f, 0xe1, 0x8a, 0xfb, 0x78, 0x32, 0xb3, 0x2e } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.7", - /* Message */ - 45, - { 0xb0, 0xe7, 0x7f, 0x42, 0xc1, 0xa1, 0xe3, 0xf4, 0x15, 0x57, 0x23, 0xa9, 0x0d, 0xb8, 0x8e, 0xb1, 0x53, 0xcb, 0x3d, 0x3a, 0x28, 0xed, 0xdf, 0x25, 0x9c, 0x47, 0x05, 0x6a, 0x47, 0x0c, 0x91, 0x5e, 0xc9, 0x55, 0xf8, 0x31, 0x89, 0xf7, 0x1a, 0xea, 0xcd, 0xd5, 0x5c, 0x33, 0x5f } -, - /* Seed */ - 144, - { 0xfb, 0x36, 0x01, 0x10, 0x5c, 0xaa, 0x9a, 0x2f, 0xdd, 0x6d, 0xd6, 0xc5, 0x74, 0x6f, 0x4f, 0xca, 0xfe, 0xf4, 0x41, 0xbc, 0xb0, 0xfb, 0x8a, 0x2c, 0xc0, 0x3d, 0x0b, 0x57, 0x34, 0x9f, 0x93, 0x21, 0xaf, 0x9d, 0x99, 0x84, 0xe6, 0x4e, 0x2e, 0xc4, 0x85, 0xc9, 0xad, 0x75, 0x5f, 0x14, 0x0c, 0x0b, 0x66, 0xdb, 0x1c, 0xfc, 0x26, 0x69, 0x1c, 0x26, 0x77, 0x31, 0xd1, 0xa3, 0xaf, 0xe6, 0x87, 0x20, 0x2a, 0x96, 0x77, 0xe4, 0x2e, 0x84, 0x4d, 0x47, 0x7b, 0x75, 0xbc, 0xbb, 0x8c, 0x97, 0xd9, 0x9f, 0xcf, 0x72, 0xb3, 0xfb, 0x6d, 0x34, 0x9f, 0xa9, 0xc4, 0x76, 0x61, 0x91, 0x47, 0x21, 0x7a, 0x04, 0xdc, 0x06, 0xaa, 0x3c, 0x3c, 0x17, 0x64, 0x95, 0x38, 0x0c, 0xb9, 0x2c, 0x0a, 0x7e, 0x09, 0x7b, 0x4b, 0x4c, 0x5f, 0xfe, 0x04, 0x63, 0x1a, 0xb1, 0xd1, 0xbf, 0xea, 0x03, 0x67, 0x86, 0x50, 0xc8, 0x5c, 0x17, 0x0f, 0xa4, 0xa1, 0xd6, 0x4a, 0x4c, 0x13, 0x5e, 0x61, 0x48, 0x14, 0x90, 0xb6, 0x2b } -, - /* Encryption */ - 192, - { 0xa4, 0xbd, 0xd4, 0x92, 0xfe, 0xc7, 0x9c, 0x3a, 0x79, 0x09, 0x3a, 0x44, 0x33, 0x42, 0x72, 0xd9, 0xd1, 0x7f, 0x54, 0x3d, 0x02, 0x02, 0xc3, 0x9e, 0x40, 0x8b, 0xfb, 0x39, 0x36, 0x6b, 0xe2, 0xde, 0x61, 0xdf, 0x50, 0xac, 0x45, 0x8c, 0xae, 0xdd, 0xef, 0xfb, 0x69, 0xe2, 0x13, 0xca, 0x92, 0xb7, 0x49, 0x53, 0x66, 0x34, 0x7e, 0xde, 0x73, 0x3f, 0xf3, 0x99, 0xae, 0xc7, 0x96, 0xc3, 0xc3, 0xb1, 0xdf, 0x34, 0x9f, 0x01, 0x1d, 0xa0, 0x1f, 0xee, 0x7d, 0x21, 0xc1, 0xc2, 0x61, 0x84, 0x3d, 0xe8, 0x82, 0x08, 0x56, 0x0c, 0x0e, 0x89, 0x84, 0xb9, 0x52, 0x23, 0xea, 0x37, 0x31, 0xdb, 0x91, 0xc5, 0x93, 0x7a, 0x79, 0xb0, 0xdb, 0x93, 0x87, 0x59, 0x1c, 0xe3, 0x2e, 0xc7, 0xf5, 0x83, 0xe6, 0x00, 0xf5, 0x24, 0x44, 0xdf, 0xa7, 0x67, 0x1c, 0xe8, 0x27, 0x38, 0x98, 0xfb, 0xbc, 0xa3, 0xa4, 0xaa, 0x68, 0x32, 0xcb, 0xb3, 0x54, 0x3a, 0xbe, 0x96, 0x47, 0xe5, 0xf8, 0xc1, 0x37, 0x72, 0x82, 0x52, 0xce, 0x54, 0x40, 0xfc, 0xe1, 0x0e, 0x4d, 0x4e, 0xf7, 0x5d, 0x56, 0xb8, 0x14, 0xd5, 0x19, 0x64, 0x44, 0x41, 0x41, 0x1c, 0x10, 0xa2, 0xa1, 0x4c, 0x35, 0x04, 0x72, 0x82, 0x7c, 0x99, 0xea, 0x3e, 0xe5, 0xfd, 0xa3, 0x88, 0x0f, 0x34, 0x1d, 0xca, 0x8d, 0x3d, 0x3a, 0x4e, 0x5e, 0x05, 0xba, 0x42 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.8", - /* Message */ - 44, - { 0xb8, 0x7f, 0x04, 0xb3, 0x35, 0x0e, 0x12, 0x63, 0xda, 0xa3, 0xf9, 0x40, 0x5e, 0x6f, 0xd3, 0xd2, 0x5d, 0x8e, 0xfa, 0x13, 0x25, 0x56, 0xa4, 0x95, 0x71, 0xf5, 0x70, 0x8a, 0x42, 0x52, 0x7a, 0xf3, 0x1d, 0xb0, 0x1e, 0xdf, 0x79, 0x82, 0x0f, 0x93, 0x26, 0x64, 0x5f, 0xb1 } -, - /* Seed */ - 145, - { 0xec, 0x8d, 0x01, 0x4d, 0x6e, 0xb8, 0xd0, 0x23, 0x9a, 0x97, 0x73, 0xbd, 0xd3, 0x20, 0xbf, 0xb3, 0xf2, 0xee, 0x8f, 0xc2, 0x7d, 0x5f, 0xdd, 0x91, 0xf3, 0xf3, 0x90, 0x5d, 0xc8, 0xa4, 0xc5, 0xff, 0x13, 0x52, 0x9a, 0xee, 0xe4, 0x61, 0x85, 0x4c, 0xcc, 0xd4, 0xe0, 0x9b, 0x62, 0x4a, 0xfa, 0x64, 0x7a, 0x7c, 0x04, 0x81, 0x4e, 0xb1, 0xe5, 0x7b, 0xa1, 0x4d, 0xf4, 0xc7, 0x95, 0xb4, 0x2e, 0x84, 0xc4, 0xd0, 0x86, 0x29, 0x24, 0x5d, 0xac, 0xbb, 0xed, 0x27, 0x39, 0x9a, 0x72, 0x5a, 0x94, 0x8f, 0x3b, 0xa2, 0xf8, 0xb6, 0x4d, 0x26, 0x02, 0xdd, 0x0d, 0x5f, 0x55, 0xcb, 0x23, 0xea, 0xaf, 0xfb, 0x3a, 0x66, 0x50, 0x8e, 0x4a, 0x68, 0x9a, 0xd9, 0xee, 0xe6, 0x44, 0xe6, 0xa2, 0x6d, 0x43, 0x8f, 0x36, 0x63, 0xfe, 0xa9, 0xbd, 0x03, 0x12, 0xbb, 0x0e, 0x7e, 0x5a, 0x6d, 0xee, 0x04, 0xbb, 0xe8, 0xa0, 0x74, 0x5a, 0x73, 0xd5, 0xac, 0x89, 0xfa, 0xa0, 0x96, 0xa5, 0x2e, 0xd3, 0x04, 0x6d, 0x77, 0xde } -, - /* Encryption */ - 192, - { 0x77, 0x5d, 0xc3, 0x24, 0xfe, 0x9d, 0x5e, 0x05, 0xad, 0x01, 0x50, 0x13, 0xd6, 0x5f, 0x0e, 0xba, 0x0d, 0xcd, 0x52, 0xff, 0x9d, 0xfc, 0x17, 0x95, 0xea, 0x93, 0xd0, 0xf4, 0x33, 0x57, 0x98, 0x96, 0x86, 0xfe, 0x3f, 0x8b, 0x04, 0x62, 0x23, 0xbb, 0xa5, 0xc7, 0x84, 0x9a, 0xca, 0xc3, 0x12, 0x35, 0x43, 0x43, 0x26, 0x16, 0xc3, 0x10, 0x3a, 0xc2, 0xba, 0x8d, 0xb0, 0xa1, 0xd2, 0x99, 0x40, 0xbb, 0xa2, 0x62, 0x47, 0x0e, 0x5e, 0x53, 0xbe, 0x60, 0xe0, 0xeb, 0x72, 0x4d, 0x07, 0xcd, 0x91, 0x2a, 0xef, 0xbb, 0x87, 0xfb, 0x51, 0x98, 0x0e, 0x9e, 0x1a, 0xc1, 0x94, 0xda, 0x31, 0x92, 0x95, 0x41, 0xca, 0x43, 0x22, 0x4b, 0x15, 0x2b, 0xe6, 0xf2, 0xdf, 0x6c, 0x5f, 0x04, 0x42, 0xb4, 0xf4, 0xd2, 0xcc, 0x2f, 0xb0, 0x27, 0x39, 0xd4, 0x85, 0xa0, 0x11, 0x62, 0xbc, 0x8d, 0xbb, 0xad, 0x14, 0x76, 0xeb, 0x06, 0xe2, 0x45, 0xab, 0x36, 0xc4, 0xc7, 0x2d, 0x3f, 0x36, 0x07, 0xd0, 0x50, 0x84, 0xa0, 0xf6, 0xb7, 0x2d, 0xc8, 0xba, 0xc3, 0x46, 0xbd, 0x19, 0x09, 0x1b, 0x02, 0xf5, 0x98, 0x2c, 0x91, 0x45, 0x7c, 0x7b, 0x10, 0xf4, 0x47, 0x2b, 0x57, 0x18, 0x45, 0x24, 0x21, 0x4b, 0x23, 0x82, 0x5b, 0x59, 0xf4, 0x34, 0xcc, 0x48, 0xa2, 0xb8, 0x54, 0xca, 0xb5, 0x0f, 0xf7, 0x9e, 0x59, 0x09, 0x1c } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.9", - /* Message */ - 33, - { 0xe1, 0x95, 0xa0, 0x36, 0xa5, 0x30, 0xe1, 0xc2, 0xa9, 0xd7, 0xa1, 0x03, 0x35, 0x8d, 0xc2, 0xbd, 0x25, 0xb1, 0x01, 0xbf, 0x70, 0x44, 0x50, 0xab, 0x8e, 0x50, 0x62, 0xcb, 0x63, 0xdf, 0x56, 0x10, 0x35 } -, - /* Seed */ - 156, - { 0x0e, 0xf8, 0x81, 0xde, 0xfc, 0x45, 0xad, 0x3f, 0x3e, 0x58, 0xb1, 0x10, 0x5e, 0x49, 0xb4, 0x23, 0xab, 0x89, 0x12, 0x4a, 0x65, 0xb5, 0x2c, 0xfd, 0x81, 0xcf, 0xd5, 0x42, 0xb9, 0x1e, 0x7c, 0x4c, 0x1a, 0x60, 0x71, 0xa2, 0xcf, 0x12, 0xb4, 0x82, 0x7e, 0xd5, 0xd1, 0x9c, 0xba, 0xf8, 0xfe, 0xea, 0x54, 0xbb, 0x3d, 0x73, 0x85, 0x7e, 0xe8, 0x7c, 0x71, 0x5c, 0x71, 0xb9, 0xed, 0x1c, 0x07, 0xc3, 0xaf, 0xd9, 0x0f, 0xce, 0x40, 0x44, 0x8b, 0xb5, 0x7e, 0x35, 0x24, 0xd0, 0x38, 0x80, 0x98, 0x39, 0xe3, 0x6a, 0x4f, 0x55, 0x44, 0xc3, 0xe1, 0x81, 0xe8, 0xc2, 0xe2, 0x93, 0xcd, 0x57, 0x54, 0xc8, 0x65, 0x74, 0xad, 0xe6, 0xdf, 0xce, 0x0a, 0xb3, 0x4a, 0x80, 0xb4, 0xd4, 0x8a, 0x9d, 0x42, 0xe7, 0x11, 0x5d, 0x8c, 0xbc, 0xb1, 0xfa, 0x28, 0xc8, 0xa2, 0x65, 0x01, 0xdb, 0x7d, 0x0b, 0xb4, 0x96, 0xd0, 0x1d, 0xd6, 0x92, 0x65, 0xa0, 0x26, 0xe1, 0xa9, 0x7e, 0x9d, 0x3a, 0x1a, 0x65, 0xa8, 0xaa, 0x8e, 0xc2, 0xdf, 0x06, 0x34, 0xe6, 0xf2, 0x65, 0x1e, 0xf4, 0x35, 0x40 } -, - /* Encryption */ - 192, - { 0x1a, 0xd7, 0x7a, 0x00, 0x7c, 0xa4, 0x37, 0xab, 0xd0, 0x15, 0x9e, 0xd4, 0xb0, 0xb6, 0x81, 0x54, 0x16, 0xf9, 0xf0, 0x9d, 0x1b, 0x12, 0x15, 0xfb, 0x7c, 0xff, 0x11, 0x52, 0x97, 0x60, 0x1a, 0x88, 0x30, 0xf2, 0x09, 0x17, 0x86, 0x35, 0x63, 0x85, 0x3e, 0xd7, 0x8e, 0x9c, 0x3d, 0x7b, 0xa4, 0xc9, 0x7a, 0x05, 0xcf, 0x19, 0xdd, 0x32, 0x92, 0x48, 0x47, 0x1a, 0x47, 0x03, 0xa4, 0x65, 0x17, 0x8b, 0x85, 0xd4, 0xec, 0xd5, 0x42, 0x24, 0x12, 0x98, 0xc2, 0xfe, 0xcd, 0x41, 0x3e, 0x23, 0xa7, 0x0c, 0x8a, 0x5d, 0x47, 0xc2, 0x0e, 0x31, 0xc2, 0xda, 0xbe, 0x3c, 0x82, 0xa9, 0x54, 0x50, 0x27, 0x27, 0x49, 0xae, 0x2e, 0xbb, 0x89, 0x98, 0x5d, 0x00, 0xb6, 0x3d, 0xed, 0xd9, 0x59, 0x6d, 0x05, 0x16, 0xd1, 0x2a, 0x78, 0xc3, 0x74, 0xb7, 0xed, 0xdc, 0x7d, 0xce, 0xe8, 0xe4, 0xfd, 0xd1, 0x6c, 0x1d, 0xfa, 0xbf, 0xf7, 0xff, 0xd4, 0xc1, 0xfd, 0x61, 0xce, 0x04, 0xbe, 0x8e, 0x49, 0x75, 0xc5, 0xcd, 0x71, 0xe2, 0xcb, 0x0e, 0x54, 0x1b, 0x84, 0x61, 0xbb, 0x81, 0xfb, 0x28, 0xcc, 0xe7, 0x73, 0x65, 0x3e, 0x8b, 0x16, 0xb2, 0x8a, 0x8c, 0x20, 0x74, 0x28, 0x89, 0x5f, 0x28, 0x53, 0x55, 0x87, 0xa5, 0xc9, 0x9d, 0x46, 0xba, 0x4d, 0xf9, 0xae, 0x08, 0x50, 0x18, 0x51, 0x3d, 0x69, 0xab, 0xa3, 0xf6 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.10", - /* Message */ - 25, - { 0x04, 0x2a, 0x39, 0x22, 0xaa, 0x87, 0x1e, 0xea, 0x0d, 0x78, 0x42, 0x2c, 0xe7, 0x85, 0x66, 0xab, 0xbb, 0x5b, 0x08, 0xc2, 0xdd, 0xf1, 0xee, 0x30, 0xcf } -, - /* Seed */ - 164, - { 0x5a, 0xe8, 0x51, 0x14, 0xb0, 0x02, 0x7a, 0x23, 0xc7, 0x2b, 0xdb, 0x46, 0xae, 0x7b, 0xb8, 0x87, 0xbe, 0xc5, 0xba, 0xd7, 0xa9, 0x88, 0x4e, 0x93, 0xf6, 0xf4, 0xfd, 0x0b, 0xc9, 0x38, 0xbc, 0x72, 0x41, 0x0c, 0xce, 0x96, 0xa1, 0x4f, 0x4d, 0xe1, 0x99, 0x19, 0x77, 0x35, 0x05, 0x1e, 0xfc, 0xdc, 0xc1, 0x96, 0xf3, 0xad, 0xbf, 0xaa, 0x06, 0x3c, 0xb3, 0xf7, 0xa2, 0x34, 0xc6, 0xcf, 0x99, 0xd7, 0x0f, 0xbb, 0x7e, 0x35, 0xb6, 0xae, 0xc6, 0x64, 0x14, 0x66, 0x93, 0x91, 0xe3, 0xcb, 0xe7, 0x21, 0xec, 0x99, 0x1a, 0x1e, 0x5d, 0xfb, 0xb0, 0x38, 0xf2, 0x70, 0x36, 0x85, 0x93, 0x74, 0x9b, 0x20, 0x8d, 0x08, 0x9a, 0xae, 0xe2, 0xef, 0x35, 0xc3, 0xda, 0xf6, 0x23, 0x8b, 0x5f, 0xe4, 0x2d, 0x13, 0xdd, 0xe4, 0x07, 0xdf, 0x14, 0xf2, 0xd6, 0x18, 0xc9, 0x79, 0xc9, 0x7d, 0x2d, 0xe0, 0x29, 0x33, 0xb5, 0x7f, 0xe8, 0x81, 0x22, 0x04, 0x86, 0x2b, 0x2f, 0x1d, 0xee, 0x98, 0x3f, 0x24, 0xc2, 0xc5, 0x96, 0xea, 0x66, 0x8e, 0x63, 0x7d, 0x0a, 0x6a, 0xe6, 0xdc, 0x52, 0x65, 0x27, 0x69, 0x94, 0xe7, 0xe4, 0xf0, 0x2b, 0x6e } -, - /* Encryption */ - 192, - { 0x12, 0x44, 0xde, 0x88, 0x0e, 0x0f, 0x78, 0x52, 0xe9, 0x96, 0x95, 0x9d, 0x76, 0x2f, 0xca, 0xd9, 0x15, 0x65, 0xa4, 0xd0, 0xad, 0x3b, 0xc5, 0x27, 0x50, 0xd4, 0xa0, 0x44, 0x0f, 0x0b, 0x5c, 0x65, 0x1a, 0xa0, 0xe6, 0xf4, 0x92, 0x06, 0x1b, 0x2c, 0x86, 0x24, 0xc5, 0x2e, 0xde, 0x68, 0x58, 0xfa, 0x25, 0x18, 0xae, 0x8e, 0x8b, 0x11, 0x65, 0x58, 0xb2, 0xc8, 0x07, 0x6c, 0x17, 0xae, 0x78, 0x3d, 0x8d, 0xb2, 0x5f, 0x0d, 0x8f, 0xb1, 0xf2, 0x75, 0x8a, 0x82, 0xab, 0x97, 0x1f, 0xa7, 0x28, 0x3e, 0xf0, 0x74, 0x9a, 0x37, 0xbe, 0x28, 0x93, 0xf8, 0x94, 0x37, 0xfb, 0x8e, 0xa9, 0x00, 0x72, 0xb5, 0x85, 0x5a, 0x26, 0x08, 0xfc, 0x54, 0x2f, 0x5d, 0x2e, 0x0c, 0xb5, 0x43, 0xf4, 0xfa, 0xc5, 0x28, 0xf9, 0x43, 0x52, 0xd0, 0x16, 0x40, 0xfc, 0x2c, 0x53, 0x1b, 0x79, 0x81, 0x0c, 0x00, 0x77, 0x7b, 0xc9, 0xe1, 0x0d, 0xd9, 0xea, 0x99, 0x96, 0xe7, 0x40, 0x87, 0xfa, 0xdc, 0xb7, 0x1a, 0xa1, 0x43, 0x00, 0x67, 0x65, 0x71, 0x61, 0x48, 0x82, 0x94, 0x3f, 0x4a, 0x56, 0x14, 0x12, 0xc0, 0x54, 0x67, 0xdc, 0xa6, 0x6c, 0xa4, 0x9f, 0x82, 0x29, 0x35, 0x18, 0x23, 0xdb, 0x8a, 0x6b, 0x9f, 0x80, 0x3d, 0x70, 0x9c, 0x11, 0x87, 0xed, 0x74, 0x10, 0xcf, 0x91, 0x00, 0x15, 0x59, 0x5c, 0xea, 0xb6, 0x3e } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.11", - /* Message */ - 52, - { 0xf3, 0x1d, 0x3d, 0x0c, 0x30, 0xfd, 0x65, 0xd7, 0xb9, 0x8b, 0x70, 0x99, 0x44, 0x78, 0x2e, 0x20, 0x52, 0x5c, 0xa7, 0xc1, 0xf4, 0x2d, 0x5d, 0x03, 0xa0, 0xf6, 0xd2, 0x75, 0x9d, 0xf1, 0x91, 0x9e, 0xea, 0x82, 0xf8, 0x0f, 0x10, 0x00, 0xfd, 0x5c, 0xf8, 0x59, 0xdf, 0x59, 0x87, 0x1b, 0xac, 0x82, 0xdd, 0x90, 0x76, 0xcf } -, - /* Seed */ - 137, - { 0x04, 0x4b, 0xc3, 0x77, 0xe8, 0x58, 0x9f, 0xa5, 0xaf, 0x1c, 0x17, 0x34, 0x7d, 0x50, 0xe0, 0xcb, 0xbf, 0x90, 0x15, 0x76, 0xf2, 0x41, 0xde, 0x69, 0x0c, 0x88, 0x16, 0xc1, 0x29, 0xcd, 0x9f, 0x2f, 0xb0, 0x83, 0x1a, 0x01, 0x7b, 0xec, 0x30, 0xb8, 0x2b, 0x68, 0xf6, 0x98, 0x31, 0x1a, 0xf6, 0xe0, 0x77, 0x72, 0xbc, 0xd8, 0x98, 0xfa, 0x0c, 0x27, 0xf6, 0x2a, 0xfd, 0xe8, 0x95, 0x89, 0x77, 0x84, 0x46, 0x25, 0x55, 0x2d, 0x9b, 0xcb, 0x5a, 0x81, 0xaa, 0x3d, 0x74, 0x15, 0xb2, 0x42, 0xa0, 0x3b, 0x12, 0xfc, 0x1d, 0x3f, 0xe2, 0xd2, 0xce, 0x6e, 0x5f, 0x71, 0xc4, 0xa4, 0xa4, 0xc7, 0xca, 0x83, 0xe0, 0x65, 0x6f, 0x50, 0x02, 0xac, 0x36, 0xd8, 0xd0, 0x2b, 0x69, 0xae, 0x65, 0x73, 0x44, 0x98, 0xf1, 0x31, 0x95, 0x2c, 0xea, 0x48, 0x1f, 0xa2, 0xc2, 0x96, 0x5b, 0x6e, 0xf0, 0x51, 0x7e, 0xde, 0x50, 0xdd, 0xb0, 0x9b, 0x3e, 0xa7, 0x02, 0x6d, 0x06 } -, - /* Encryption */ - 192, - { 0x86, 0xf6, 0x6f, 0x0c, 0x25, 0x05, 0x85, 0x06, 0x59, 0x43, 0xde, 0x2f, 0x71, 0x1f, 0xae, 0x4f, 0xf2, 0x62, 0x70, 0x0e, 0x0d, 0x33, 0x06, 0xa2, 0x4c, 0x94, 0x30, 0xf8, 0x7c, 0xfd, 0x93, 0xde, 0xf4, 0xc3, 0x44, 0x7c, 0xc7, 0x21, 0x0f, 0xd9, 0x4a, 0x14, 0x33, 0x62, 0xf4, 0xf9, 0x45, 0xc6, 0xdb, 0xe2, 0x80, 0xbd, 0xef, 0x5d, 0x14, 0xf7, 0x5e, 0xb7, 0xbb, 0x31, 0x32, 0x0b, 0xcb, 0xd0, 0xd8, 0x8f, 0x0c, 0xcf, 0x2c, 0x95, 0xa7, 0x4c, 0xb4, 0x58, 0xc6, 0x27, 0x2b, 0x58, 0xbf, 0x74, 0x30, 0x93, 0xc4, 0xbb, 0xa2, 0xd7, 0xbe, 0xe9, 0xea, 0x2d, 0xd3, 0x0c, 0xf7, 0x2f, 0xe2, 0x93, 0xc9, 0x0c, 0x97, 0x43, 0x0a, 0x04, 0x7b, 0x17, 0x26, 0x63, 0x91, 0xc5, 0x1f, 0x5c, 0x39, 0x8b, 0xa3, 0xdf, 0x8c, 0xb7, 0x4b, 0xa3, 0xe3, 0x72, 0xf9, 0x55, 0x5c, 0xcc, 0x97, 0xd6, 0xdb, 0x76, 0x14, 0xea, 0x06, 0xd5, 0xc4, 0x8c, 0x1c, 0x60, 0x06, 0x13, 0x3d, 0x0e, 0x9d, 0x69, 0x95, 0x79, 0x93, 0x85, 0x92, 0x0a, 0xd8, 0xaf, 0xc3, 0xde, 0xad, 0xf6, 0x31, 0xce, 0xcc, 0x55, 0x9c, 0xaf, 0xf4, 0x95, 0xb0, 0x8d, 0x68, 0x3f, 0xb2, 0x2a, 0xa6, 0x97, 0xd7, 0x1c, 0x69, 0x6e, 0x46, 0xb1, 0xbf, 0x4f, 0xd7, 0x6b, 0x8d, 0x0b, 0x39, 0xf1, 0x79, 0xbf, 0x66, 0x84, 0x1b, 0xbb, 0x97, 0x07 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.12", - /* Message */ - 29, - { 0x6a, 0x35, 0x55, 0x57, 0x9d, 0xad, 0x03, 0x94, 0x35, 0x43, 0xff, 0x74, 0xe1, 0x74, 0x7c, 0x25, 0x7a, 0x83, 0xd3, 0x52, 0x94, 0xc2, 0x53, 0x93, 0x83, 0xe2, 0x35, 0xde, 0x69 } -, - /* Seed */ - 160, - { 0x5d, 0x92, 0x43, 0x4e, 0xdb, 0xd4, 0xf5, 0xbd, 0x27, 0x19, 0x71, 0x71, 0xf8, 0x53, 0xce, 0xb7, 0x26, 0x30, 0x30, 0x83, 0xad, 0x45, 0x67, 0xa1, 0xd7, 0xc6, 0x10, 0x4d, 0x19, 0x2b, 0x9b, 0xcc, 0xdf, 0xd0, 0xda, 0xed, 0xa2, 0x74, 0xe5, 0xcd, 0xfb, 0x3d, 0x0c, 0x5d, 0x19, 0xc9, 0x68, 0x25, 0x81, 0xec, 0x7a, 0xdc, 0x1a, 0x87, 0xe0, 0x81, 0x51, 0x41, 0x5d, 0x5a, 0x9a, 0xdc, 0x1a, 0xf4, 0x50, 0xb1, 0xba, 0x88, 0xd0, 0xef, 0x32, 0xac, 0x2d, 0x1f, 0x8a, 0xe3, 0x45, 0x95, 0x28, 0x14, 0x75, 0x3a, 0xf3, 0x8e, 0x12, 0x63, 0x5c, 0xff, 0x8c, 0x09, 0x21, 0x59, 0xb4, 0xe7, 0x5d, 0xee, 0xa1, 0x98, 0x3e, 0xd3, 0xd2, 0xd9, 0xec, 0x2f, 0xe7, 0xb9, 0xa2, 0xe1, 0x6a, 0x14, 0x1e, 0x81, 0x8b, 0x84, 0xcd, 0x9b, 0x71, 0xc1, 0x29, 0xa8, 0xb3, 0xc6, 0xdb, 0x62, 0x02, 0x32, 0xdc, 0x03, 0xa2, 0x40, 0x1f, 0x73, 0x1f, 0xf8, 0xa6, 0x3d, 0xa4, 0x58, 0xa7, 0xd8, 0x78, 0x90, 0x56, 0x25, 0xae, 0xe1, 0xfc, 0x09, 0x4d, 0xfb, 0x07, 0xb4, 0x57, 0x5a, 0x7f, 0x0a, 0xad, 0x23, 0x3e, 0x82 } -, - /* Encryption */ - 192, - { 0x93, 0x10, 0x27, 0x2d, 0x12, 0x4b, 0xc5, 0xcd, 0xb7, 0x21, 0x88, 0x98, 0x40, 0xaa, 0x77, 0x15, 0xe7, 0x67, 0x32, 0x17, 0x00, 0xcb, 0x39, 0xb2, 0xb8, 0xa5, 0xa8, 0x2a, 0xe3, 0xf0, 0x2e, 0xb9, 0x67, 0xe8, 0xdb, 0x46, 0x84, 0x3b, 0xc1, 0xbf, 0x62, 0xed, 0x8b, 0xd2, 0xab, 0xe8, 0x14, 0x34, 0x49, 0x7f, 0x99, 0x00, 0x64, 0x02, 0x53, 0x98, 0x2d, 0x37, 0x2b, 0x2b, 0xf7, 0xc1, 0xb0, 0x9b, 0xd5, 0x01, 0x96, 0x74, 0xa8, 0x34, 0xfb, 0xbd, 0xff, 0x35, 0x68, 0xa2, 0x82, 0x4a, 0xed, 0x4a, 0x80, 0x48, 0xd2, 0xb8, 0x61, 0x36, 0x27, 0x75, 0xbd, 0x5f, 0x0d, 0x63, 0xb3, 0x48, 0x36, 0x3d, 0x13, 0x78, 0x69, 0x1f, 0x5d, 0xd1, 0xd7, 0x96, 0x10, 0x74, 0xed, 0x95, 0xfc, 0x90, 0x07, 0xbd, 0x5f, 0x5c, 0x29, 0x23, 0xc1, 0x7c, 0x42, 0x90, 0x4e, 0x2b, 0xf9, 0xd2, 0x48, 0x77, 0x9f, 0xdf, 0xb2, 0x03, 0x97, 0x38, 0x41, 0xa1, 0x12, 0x90, 0xc7, 0xe9, 0xe9, 0x35, 0x6d, 0x4e, 0xab, 0x17, 0x0e, 0x43, 0x1b, 0xfe, 0x45, 0x4a, 0x88, 0x01, 0x0d, 0x9a, 0xff, 0x33, 0x70, 0x0c, 0xee, 0x55, 0xc7, 0x04, 0xc8, 0x2a, 0x7f, 0xfb, 0x15, 0xe2, 0x53, 0xef, 0x84, 0xf4, 0x01, 0x9e, 0x12, 0x43, 0x8f, 0x7c, 0x73, 0x86, 0xdc, 0x53, 0x5b, 0x19, 0xca, 0x86, 0xaf, 0x71, 0xd4, 0x77, 0x60, 0x8e } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.13", - /* Message */ - 47, - { 0xcb, 0x79, 0xaf, 0x5a, 0xea, 0xfd, 0xf2, 0xba, 0xd2, 0x1d, 0xfe, 0x62, 0x92, 0x66, 0x42, 0xcb, 0xa8, 0x04, 0xec, 0x7f, 0xd0, 0xea, 0x5d, 0x54, 0x08, 0xac, 0xe9, 0xed, 0xff, 0x28, 0xe7, 0xe8, 0xdf, 0xff, 0x6d, 0xf3, 0x83, 0xaf, 0x14, 0x40, 0x21, 0x46, 0x04, 0x76, 0xc0, 0xc8, 0x2c } -, - /* Seed */ - 142, - { 0x5f, 0xce, 0xa2, 0x57, 0xcf, 0xa9, 0x2c, 0x84, 0xf0, 0xb8, 0x93, 0x7d, 0x17, 0x3f, 0xae, 0xcf, 0x75, 0x03, 0xab, 0x16, 0x2e, 0x0b, 0xae, 0xef, 0x7e, 0x4c, 0x51, 0x1f, 0x3e, 0x32, 0xa3, 0x24, 0xed, 0x40, 0xe2, 0x42, 0xa8, 0x52, 0xba, 0x57, 0x89, 0x5b, 0x7c, 0xfe, 0x4d, 0x61, 0x79, 0x61, 0xe0, 0x36, 0xf6, 0x63, 0xe0, 0x22, 0x8a, 0x29, 0xcd, 0x1a, 0x95, 0xac, 0xac, 0x08, 0xa2, 0x55, 0x26, 0xd1, 0xeb, 0xff, 0x0a, 0xb3, 0xf0, 0x33, 0xed, 0xbf, 0x1a, 0xe2, 0x76, 0xa8, 0xd2, 0x36, 0x73, 0x6c, 0xc7, 0xaf, 0x51, 0xb5, 0xd2, 0xbd, 0xc8, 0x3d, 0xcc, 0x7d, 0x7d, 0x3b, 0xf5, 0xb8, 0x22, 0xaf, 0x2e, 0xff, 0xed, 0x7e, 0xfc, 0xb6, 0x17, 0xe0, 0x83, 0xe5, 0x1b, 0xe9, 0x94, 0xae, 0xd6, 0x56, 0x9b, 0x23, 0x83, 0xb9, 0x41, 0xae, 0xe5, 0x94, 0xc7, 0xb0, 0x12, 0xe6, 0x75, 0x1c, 0x37, 0xb7, 0xa5, 0x4e, 0x2a, 0x19, 0x18, 0x24, 0xa1, 0x30, 0xd5, 0x5c, 0xf8, 0x45 } -, - /* Encryption */ - 192, - { 0x11, 0xfa, 0x81, 0x9d, 0x3a, 0x63, 0x88, 0x04, 0xee, 0xf1, 0xd9, 0x56, 0x0a, 0x11, 0xf5, 0x23, 0x0a, 0x0b, 0xad, 0xfd, 0x66, 0xeb, 0x68, 0x4e, 0x7d, 0x69, 0xdf, 0xa2, 0x89, 0x8c, 0x8e, 0x0b, 0x6e, 0x04, 0xaf, 0x8e, 0xfc, 0x70, 0x61, 0x08, 0x1e, 0xc5, 0x9e, 0x45, 0x85, 0x76, 0x42, 0xe8, 0xb2, 0x00, 0x41, 0xaf, 0x50, 0x8d, 0x9d, 0x4e, 0x28, 0x82, 0x20, 0xf9, 0xfd, 0x38, 0x9d, 0xe8, 0xb2, 0x91, 0x24, 0xce, 0x74, 0x7e, 0xb6, 0x8e, 0x2e, 0xaa, 0x8c, 0x8f, 0x6f, 0xb4, 0x93, 0xf6, 0x11, 0xac, 0x09, 0xb7, 0x23, 0x09, 0x5d, 0x07, 0xee, 0xd9, 0x24, 0xf6, 0xab, 0x8e, 0x09, 0xff, 0x93, 0xc5, 0x51, 0x6d, 0x1f, 0x0e, 0xbf, 0x62, 0xc5, 0xf0, 0x22, 0xf5, 0xbb, 0x4f, 0x4c, 0xb5, 0xb8, 0xf5, 0xd4, 0x87, 0xa1, 0x7d, 0xf7, 0xd0, 0x12, 0xd7, 0x04, 0x35, 0x7a, 0xbf, 0x17, 0x48, 0x67, 0xce, 0x40, 0xcd, 0xc5, 0x50, 0x11, 0xb0, 0x71, 0x39, 0xbe, 0xa4, 0x5c, 0xa0, 0xe5, 0x81, 0x78, 0x0d, 0xe6, 0x54, 0x17, 0xcc, 0x83, 0x5f, 0xf2, 0x69, 0x84, 0xfd, 0x0f, 0xeb, 0xa1, 0x87, 0x69, 0xc3, 0x94, 0xa2, 0xe4, 0x85, 0x02, 0x3e, 0x31, 0xd3, 0xb0, 0xa8, 0x88, 0xa7, 0xb1, 0x4c, 0x78, 0x1d, 0xd8, 0x5b, 0xab, 0x40, 0x86, 0x74, 0xf5, 0xf5, 0x7e, 0x4b, 0x76, 0x3d, 0x84, 0x35 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.14", - /* Message */ - 19, - { 0xd1, 0x62, 0x33, 0xfc, 0x77, 0x5c, 0x31, 0x9f, 0x15, 0x7a, 0xa2, 0x00, 0x47, 0x6c, 0xd6, 0xed, 0x64, 0xa1, 0xea } -, - /* Seed */ - 170, - { 0xbb, 0x33, 0xb2, 0x2b, 0x5f, 0x46, 0x79, 0x4b, 0xe8, 0x3e, 0x6a, 0xff, 0x34, 0xa0, 0xe4, 0x11, 0xd1, 0xf3, 0xf4, 0xb8, 0xda, 0xf9, 0xb5, 0x85, 0x87, 0x24, 0xef, 0xfd, 0xb9, 0x69, 0xc9, 0x55, 0x25, 0xc6, 0x2d, 0xc4, 0x4b, 0xb2, 0xb0, 0x83, 0x38, 0x60, 0x03, 0x05, 0x4b, 0xbd, 0x36, 0x66, 0xb7, 0x82, 0x82, 0x60, 0x6f, 0xe6, 0xea, 0x17, 0x27, 0x31, 0xbe, 0xe1, 0x16, 0x72, 0xd6, 0x01, 0xde, 0x32, 0x42, 0x3d, 0x83, 0xf4, 0x63, 0xcc, 0x29, 0x30, 0xf5, 0xfb, 0x79, 0xda, 0x15, 0x34, 0xc4, 0x15, 0xc9, 0x65, 0x82, 0x75, 0x65, 0x94, 0xa9, 0x99, 0xb2, 0x26, 0x35, 0x42, 0x48, 0xa0, 0x9f, 0x14, 0x1c, 0xae, 0xcf, 0x88, 0x83, 0x90, 0x78, 0xf7, 0x7f, 0x40, 0xbd, 0x48, 0x51, 0x34, 0x9c, 0x1f, 0xc7, 0x5e, 0x1e, 0xce, 0x6f, 0xd6, 0x96, 0x6b, 0xc9, 0xc9, 0xd5, 0xec, 0x12, 0x09, 0x6e, 0xd5, 0x04, 0x35, 0x46, 0x85, 0x9e, 0x4f, 0x95, 0x7d, 0x31, 0x88, 0xe1, 0xd9, 0x06, 0x0b, 0x59, 0xc1, 0xf7, 0xf6, 0x2e, 0xfb, 0xfe, 0x82, 0x5d, 0xda, 0x45, 0x35, 0x3e, 0x6f, 0xd4, 0xfa, 0xba, 0xc9, 0x83, 0xf9, 0x44, 0xf4, 0xc2, 0xc7, 0x9c, 0xbb } -, - /* Encryption */ - 192, - { 0x10, 0xc2, 0x0c, 0x0c, 0x71, 0xb1, 0x1b, 0xbe, 0xce, 0x14, 0xc8, 0x14, 0x83, 0xdc, 0xfa, 0x73, 0x0c, 0x23, 0xd4, 0xdd, 0x61, 0xb8, 0x75, 0x5b, 0x39, 0x94, 0x9d, 0xfd, 0x4a, 0x3c, 0x50, 0x33, 0x21, 0x60, 0xee, 0xc6, 0xf7, 0x71, 0x0e, 0x09, 0xc7, 0xa9, 0x7a, 0xf9, 0x3f, 0x70, 0x44, 0xb9, 0x2f, 0x41, 0xd0, 0x9f, 0xa3, 0xe6, 0xc6, 0xce, 0x1f, 0x64, 0x11, 0x48, 0x4e, 0xd4, 0x75, 0x40, 0xa1, 0xb5, 0x9e, 0x23, 0xc1, 0x93, 0x34, 0xb6, 0x6d, 0x68, 0x20, 0xc2, 0xd4, 0x4d, 0xb0, 0xf6, 0xaa, 0xf8, 0x5a, 0xa2, 0x7f, 0x53, 0xa4, 0x1f, 0x85, 0x6b, 0xf6, 0xa5, 0x91, 0x36, 0x59, 0x86, 0x9b, 0xa4, 0xab, 0xdd, 0xec, 0xbe, 0x87, 0x41, 0x3a, 0xc9, 0x5b, 0xe6, 0x40, 0x09, 0x59, 0x3b, 0x5c, 0xa2, 0xd0, 0x78, 0x3a, 0x16, 0xf6, 0x08, 0x66, 0x57, 0x55, 0x24, 0x53, 0x93, 0xfc, 0x14, 0x4f, 0xe3, 0xea, 0x5e, 0x9a, 0xac, 0x9f, 0x1f, 0x99, 0x1a, 0x92, 0x85, 0x38, 0xb4, 0x69, 0x97, 0xd3, 0x06, 0x3c, 0xc1, 0xa6, 0x9a, 0xdc, 0x19, 0x2a, 0x40, 0xc7, 0x6f, 0x92, 0xd4, 0x7a, 0x05, 0x80, 0xe3, 0xc0, 0x21, 0x20, 0x02, 0x3e, 0xce, 0x70, 0x32, 0x80, 0x7b, 0x7c, 0x09, 0x13, 0x43, 0xaa, 0x87, 0x3f, 0x6a, 0x4d, 0xdd, 0xe4, 0x3f, 0xb2, 0xdc, 0xc3, 0x79, 0xae, 0xee, 0xf6, 0x54 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.15", - /* Message */ - 17, - { 0xd2, 0xf3, 0xc2, 0xe6, 0xf4, 0x3b, 0x0f, 0xc9, 0xfc, 0x22, 0x93, 0xb8, 0x45, 0x88, 0xe6, 0x61, 0x15 } -, - /* Seed */ - 172, - { 0xb9, 0x81, 0x64, 0x89, 0x52, 0x5c, 0xd0, 0x26, 0x15, 0x6f, 0xb4, 0xe8, 0xa4, 0xa8, 0xf3, 0x4a, 0xea, 0x8a, 0x3a, 0xa1, 0xa6, 0x34, 0xcc, 0xcb, 0x32, 0x58, 0x91, 0x8f, 0xe8, 0x5c, 0xb8, 0xd4, 0xaa, 0x02, 0xa5, 0x28, 0x52, 0xa8, 0x94, 0x1d, 0x3e, 0xa6, 0xc0, 0x48, 0xb5, 0x8c, 0xc6, 0xc7, 0x56, 0x85, 0x67, 0x56, 0x25, 0xe5, 0xe4, 0xdd, 0x7d, 0xf9, 0x3b, 0x8a, 0xce, 0xc0, 0x79, 0x67, 0x0b, 0x49, 0xf3, 0xdc, 0x6e, 0x07, 0x63, 0xed, 0x4c, 0x8e, 0x2d, 0x0e, 0xe9, 0xb5, 0xca, 0x5b, 0xb6, 0x2d, 0xe0, 0x06, 0x91, 0x98, 0x38, 0xe4, 0xb6, 0x9b, 0xa1, 0x05, 0xd4, 0xc5, 0xa4, 0xcc, 0x6d, 0xca, 0x67, 0xb1, 0x21, 0x93, 0xa0, 0x32, 0xb6, 0x92, 0x73, 0x96, 0x44, 0xcc, 0xcf, 0x72, 0x3f, 0x9f, 0x69, 0xe4, 0x8b, 0x94, 0xc0, 0xbd, 0xce, 0x5a, 0xa3, 0x5f, 0x75, 0xdc, 0x53, 0x92, 0x7b, 0x81, 0xe3, 0x42, 0xce, 0x72, 0xc6, 0xb6, 0x5c, 0xf7, 0x5e, 0xae, 0xca, 0xc5, 0xfe, 0x0d, 0xea, 0x93, 0x88, 0x5b, 0xa4, 0x20, 0xaf, 0x99, 0x32, 0xd8, 0x4c, 0xa4, 0xb5, 0x0e, 0x07, 0xe3, 0x28, 0xec, 0x5f, 0x81, 0x6d, 0x2d, 0x86, 0x96, 0xb2, 0x0d, 0xf7, 0x5f } -, - /* Encryption */ - 192, - { 0x80, 0xf1, 0xdf, 0x25, 0xf3, 0x6f, 0x31, 0x4b, 0x98, 0x2c, 0x9c, 0x8a, 0xaf, 0xc0, 0xb8, 0xa1, 0xa2, 0xf1, 0x74, 0xab, 0xb2, 0x98, 0x08, 0x69, 0xc2, 0x9d, 0x19, 0xbe, 0x1d, 0x2d, 0x93, 0xb4, 0xfb, 0x42, 0x99, 0x90, 0x6c, 0x35, 0x7f, 0xdd, 0x40, 0xe8, 0x9a, 0x19, 0x54, 0x92, 0xa9, 0x79, 0x76, 0x61, 0xf0, 0x5d, 0x38, 0x71, 0xd1, 0xbd, 0x0a, 0x5c, 0x45, 0xd8, 0xf9, 0xb0, 0xfe, 0xe5, 0x65, 0xb0, 0x00, 0x4f, 0xf5, 0xaf, 0xc5, 0xa6, 0xf8, 0x9a, 0xd6, 0x03, 0xe8, 0x22, 0x83, 0x57, 0x0b, 0xdb, 0x4c, 0x6e, 0x0c, 0xfc, 0x31, 0x3e, 0x4e, 0x66, 0x5a, 0x94, 0x34, 0xb3, 0x2f, 0xcc, 0x77, 0x3d, 0x6e, 0xda, 0xbc, 0xe8, 0x5f, 0xe7, 0xc8, 0x0f, 0x03, 0x30, 0x2a, 0x84, 0xe2, 0x08, 0xb5, 0xbd, 0x0a, 0xad, 0x91, 0xce, 0x62, 0xfb, 0x8c, 0x2b, 0xf5, 0x4b, 0xa6, 0x6f, 0x7e, 0x8d, 0x00, 0x21, 0x92, 0x16, 0x29, 0x20, 0xa4, 0x6e, 0x36, 0xde, 0xa5, 0x66, 0x1f, 0xdd, 0x75, 0x81, 0x53, 0x56, 0x40, 0x74, 0xb8, 0x55, 0x9f, 0x88, 0x93, 0x62, 0x42, 0xfc, 0x09, 0x98, 0x14, 0x8f, 0x19, 0xeb, 0x50, 0xfc, 0x11, 0xfb, 0x24, 0xa7, 0xed, 0x8c, 0x83, 0x49, 0x65, 0x8f, 0xe9, 0xd3, 0x1e, 0x62, 0x74, 0xd4, 0x5d, 0x6f, 0x2b, 0x60, 0x9b, 0xb5, 0xcc, 0xd1, 0x7e, 0x28, 0x4c, 0x99 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.16", - /* Message */ - 50, - { 0x21, 0xee, 0x58, 0x12, 0xe3, 0x24, 0x6d, 0xab, 0x9c, 0x3c, 0x25, 0x9b, 0x21, 0x37, 0xd6, 0x5f, 0x98, 0xa0, 0x5e, 0x57, 0x40, 0x46, 0x5c, 0xa2, 0x2c, 0x69, 0x34, 0x97, 0x00, 0xa4, 0x2c, 0xbe, 0x4f, 0xfb, 0x39, 0x3f, 0xe2, 0x81, 0x99, 0x33, 0x9c, 0x51, 0x03, 0x1c, 0xd3, 0xb2, 0x2f, 0x2f, 0x0a, 0x83 } -, - /* Seed */ - 139, - { 0xe9, 0xde, 0x5b, 0xd3, 0x55, 0xe6, 0xaf, 0xf1, 0x9f, 0xa1, 0x1a, 0x2d, 0x0d, 0x3e, 0xdc, 0x3f, 0x64, 0x69, 0xbd, 0x3c, 0x75, 0x72, 0x06, 0xd6, 0x6b, 0x3f, 0x09, 0x90, 0x8f, 0xf6, 0x18, 0xaf, 0x48, 0x01, 0xac, 0x77, 0xb5, 0x2c, 0xde, 0x03, 0xd4, 0xae, 0x74, 0x9d, 0x02, 0x15, 0x5e, 0x5c, 0x70, 0xfc, 0x99, 0x5f, 0x48, 0x76, 0x72, 0xd2, 0x80, 0x63, 0x58, 0x55, 0xdb, 0x4b, 0x64, 0xa2, 0x26, 0x09, 0xb0, 0xc1, 0x60, 0x67, 0x16, 0x3c, 0x51, 0x90, 0x42, 0x05, 0x7c, 0xb3, 0x67, 0x12, 0xc7, 0xc2, 0xfe, 0xfe, 0xd1, 0x1f, 0x73, 0xc2, 0x8b, 0xdb, 0x9d, 0x25, 0xf0, 0x63, 0x6a, 0x4c, 0xaa, 0x11, 0x26, 0x9e, 0x5f, 0xe6, 0x5a, 0x2b, 0x17, 0x56, 0x86, 0xa1, 0x5f, 0x1e, 0x48, 0xd2, 0x8d, 0x34, 0x5d, 0xd9, 0xa1, 0xb2, 0x90, 0x0a, 0x24, 0xf9, 0xdd, 0xda, 0x3d, 0xf3, 0xa6, 0x9f, 0xfb, 0x9c, 0xf5, 0x04, 0x5a, 0xc4, 0xa1, 0x93, 0xae, 0x90, 0x2f } -, - /* Encryption */ - 192, - { 0x7d, 0x8c, 0x53, 0x1d, 0x4d, 0x35, 0x49, 0xe0, 0xbd, 0x2e, 0xe1, 0x62, 0xb6, 0x82, 0x53, 0x9d, 0xa6, 0x17, 0x22, 0xb8, 0x8e, 0xcf, 0x8c, 0x7d, 0xf6, 0xd6, 0xb8, 0x1f, 0xef, 0x50, 0x18, 0xbc, 0x4e, 0xa1, 0x0a, 0x7e, 0x1a, 0x4e, 0xaa, 0x02, 0x15, 0xd9, 0xb3, 0xcd, 0xf4, 0x13, 0x47, 0x92, 0x9e, 0xac, 0x27, 0x48, 0xeb, 0xd7, 0x79, 0x94, 0x5c, 0x9b, 0xc4, 0x61, 0xdc, 0x51, 0xf4, 0x8d, 0xf6, 0x52, 0x75, 0x53, 0xf0, 0x70, 0x37, 0xe5, 0x33, 0xce, 0xb1, 0x34, 0x8a, 0x46, 0xa7, 0xea, 0x79, 0x7d, 0x85, 0xa2, 0x6a, 0x9f, 0x44, 0xc5, 0x88, 0x69, 0x99, 0x6e, 0xf1, 0x14, 0x69, 0xbc, 0xc1, 0x0b, 0x75, 0x6c, 0x02, 0xd5, 0xc0, 0xe6, 0x18, 0x83, 0x68, 0x5c, 0xc3, 0x7d, 0x75, 0x8d, 0xfd, 0xe4, 0xc9, 0xb7, 0x35, 0x4e, 0x3b, 0x4f, 0x31, 0x6c, 0xa7, 0xf7, 0xfd, 0xe6, 0x59, 0xc3, 0xfd, 0x5e, 0x33, 0x2e, 0x1b, 0x63, 0x92, 0xa2, 0x92, 0x9e, 0x13, 0x17, 0x66, 0xce, 0x9b, 0xa1, 0xd9, 0x71, 0xad, 0x24, 0x6f, 0x3d, 0xf0, 0x22, 0x43, 0x38, 0x63, 0x8b, 0xb6, 0x53, 0x45, 0x8c, 0xd4, 0xb5, 0x26, 0xd9, 0x61, 0x74, 0x4d, 0xaf, 0xec, 0xd5, 0x99, 0x8a, 0xd7, 0x2a, 0xed, 0x3c, 0x34, 0x59, 0x9f, 0x7a, 0x40, 0x98, 0xe3, 0xd2, 0xdf, 0x9d, 0x13, 0xa2, 0x1c, 0xe2, 0x37, 0x0c } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.17", - /* Message */ - 56, - { 0xa0, 0x34, 0xa6, 0xc1, 0x66, 0xcf, 0x0b, 0x25, 0xd2, 0xdd, 0xe5, 0x3a, 0xf4, 0xb8, 0x33, 0xb4, 0x78, 0xc6, 0xb0, 0xd2, 0xfb, 0x0c, 0xef, 0x13, 0x7f, 0xbf, 0x5c, 0x27, 0x12, 0x70, 0x64, 0x91, 0x23, 0x7f, 0x7b, 0x28, 0x6d, 0x12, 0x11, 0xd5, 0x73, 0x10, 0xf8, 0xa7, 0x62, 0xb1, 0xb3, 0xbf, 0xe1, 0x9c, 0x9a, 0x4b, 0x16, 0xd3, 0xe0, 0xa8 } -, - /* Seed */ - 133, - { 0xd8, 0x44, 0x17, 0x97, 0x22, 0x87, 0x13, 0x0a, 0x24, 0xa6, 0x06, 0xf5, 0x83, 0x29, 0x7a, 0xc9, 0x11, 0x52, 0x8a, 0xdc, 0xdb, 0xbd, 0x7d, 0xe1, 0x4a, 0x5b, 0x48, 0x9b, 0x67, 0x86, 0xf9, 0xf6, 0xf7, 0xe0, 0xb7, 0x3b, 0xab, 0x53, 0x8e, 0xb6, 0xc4, 0x5f, 0xf3, 0x4b, 0xd5, 0xdc, 0x43, 0xea, 0xe8, 0xd8, 0xc4, 0x3f, 0x71, 0x65, 0x16, 0xa6, 0x0d, 0xa2, 0x47, 0x53, 0x6f, 0x63, 0x4b, 0xe0, 0x65, 0xd9, 0x4e, 0x7f, 0x92, 0xad, 0xf5, 0x2a, 0x96, 0x7e, 0xe0, 0x5f, 0xd9, 0xaf, 0xd7, 0x32, 0x33, 0x3f, 0x99, 0xad, 0x05, 0x82, 0x97, 0xb2, 0x8f, 0x8e, 0xc6, 0xfe, 0xff, 0x80, 0x28, 0x44, 0xa0, 0x09, 0x7d, 0xf9, 0x1a, 0x97, 0x70, 0x2c, 0x48, 0x3a, 0xa1, 0xc7, 0x89, 0x2c, 0x7d, 0x43, 0xb6, 0xb9, 0x1c, 0xd4, 0xd8, 0x5d, 0x3e, 0xd2, 0xf1, 0xe9, 0x55, 0x39, 0x57, 0x06, 0xc3, 0xb3, 0x39, 0xba, 0xf2, 0xa0, 0xe0 } -, - /* Encryption */ - 192, - { 0x90, 0x4e, 0x04, 0x07, 0x23, 0xab, 0x97, 0x88, 0xa5, 0xed, 0x03, 0x52, 0xeb, 0x96, 0xc7, 0xf3, 0xd7, 0x07, 0xcf, 0x0d, 0xbc, 0x25, 0x8c, 0x51, 0xdc, 0xf6, 0x24, 0x34, 0x06, 0xf0, 0xc7, 0x42, 0xc6, 0xcd, 0xf2, 0x07, 0x67, 0x13, 0x2c, 0x09, 0x5e, 0x6c, 0x82, 0xa5, 0x02, 0x5b, 0xe7, 0xb4, 0x13, 0x4d, 0x8f, 0xa4, 0xde, 0x18, 0x7f, 0x8e, 0xcf, 0x12, 0xfd, 0xd3, 0xbe, 0xab, 0xdb, 0x06, 0x15, 0x8a, 0xef, 0x46, 0xc3, 0xfe, 0xd2, 0xd1, 0x83, 0x34, 0x06, 0xec, 0xa7, 0xa6, 0x9e, 0xb2, 0xd2, 0x08, 0xa2, 0xf6, 0xf4, 0x40, 0xd5, 0x4f, 0x6b, 0xe5, 0xdd, 0x56, 0x47, 0x09, 0xed, 0xa8, 0x12, 0xac, 0x06, 0x29, 0xa9, 0x4c, 0x7f, 0x8a, 0xee, 0x78, 0xbe, 0xaf, 0x9e, 0x93, 0x78, 0xc8, 0xdd, 0x9c, 0x62, 0x03, 0x74, 0xbb, 0xac, 0xa3, 0x94, 0x18, 0x59, 0xdd, 0x70, 0x2f, 0x6f, 0x7b, 0x25, 0xa2, 0x38, 0x45, 0x9e, 0xe8, 0x97, 0x59, 0xde, 0x94, 0x22, 0xb5, 0xbb, 0x6d, 0x28, 0x57, 0x16, 0x6c, 0xa2, 0x12, 0x0e, 0x63, 0x47, 0x74, 0xa0, 0xd1, 0xd4, 0x2e, 0xb8, 0xd9, 0x48, 0x15, 0xa1, 0x04, 0x4b, 0xea, 0x8b, 0xfb, 0x02, 0xda, 0x58, 0x62, 0xcd, 0x9a, 0x74, 0x5f, 0x15, 0x92, 0x47, 0x8c, 0x6f, 0x57, 0xbf, 0xd1, 0x3a, 0x5f, 0xdf, 0x4b, 0x8f, 0xaa, 0xe8, 0xa4, 0xbf, 0xc4 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.18", - /* Message */ - 35, - { 0x8f, 0xc6, 0x39, 0x4c, 0xd6, 0xe1, 0x75, 0x33, 0xd1, 0xff, 0x8e, 0xbb, 0xf3, 0xe1, 0xae, 0xae, 0xa3, 0x30, 0xed, 0x9f, 0x5a, 0x6e, 0x1e, 0xfb, 0x83, 0x45, 0x42, 0x94, 0xc6, 0xce, 0x24, 0xf6, 0x90, 0x4a, 0x0e } -, - /* Seed */ - 154, - { 0xbe, 0x1c, 0x18, 0x02, 0xdb, 0x44, 0x68, 0x2e, 0x58, 0xc6, 0x1f, 0xe3, 0x87, 0x57, 0xea, 0x0e, 0x38, 0x4e, 0xba, 0xdd, 0x79, 0x59, 0x48, 0x4b, 0x38, 0xbb, 0x23, 0x57, 0x55, 0xc4, 0x61, 0x77, 0xe6, 0x71, 0x76, 0x9f, 0x36, 0x57, 0x3d, 0x7c, 0xb0, 0xee, 0x7e, 0x82, 0x08, 0x7b, 0x58, 0x4b, 0x58, 0xbb, 0x30, 0x05, 0x30, 0x33, 0x68, 0xc6, 0x59, 0x0a, 0xd9, 0xf2, 0x88, 0x2c, 0xfa, 0x74, 0x0d, 0x51, 0xdc, 0x55, 0xeb, 0x0c, 0x79, 0x0f, 0x5b, 0xb6, 0xb6, 0xa3, 0xbd, 0x71, 0xf8, 0xb2, 0x14, 0x6b, 0xb9, 0xe8, 0x03, 0x4c, 0x35, 0xb7, 0xca, 0xbc, 0xbe, 0x10, 0x93, 0x6f, 0xfc, 0x5f, 0x0a, 0x8d, 0x7b, 0x30, 0x47, 0x6a, 0xb9, 0x16, 0x85, 0xae, 0xd8, 0xfa, 0x95, 0x8e, 0x73, 0xc1, 0xee, 0xa3, 0x04, 0x4c, 0x56, 0xb4, 0xb8, 0x70, 0xda, 0x89, 0x37, 0x1a, 0x93, 0xb8, 0x96, 0x52, 0x79, 0xb5, 0x5b, 0xb9, 0x2c, 0xc3, 0x16, 0xc2, 0x3e, 0xf0, 0x97, 0x53, 0x51, 0xc7, 0x49, 0x81, 0x7d, 0xb5, 0xdc, 0xd8, 0x6b, 0x94, 0xad, 0xf6, 0x03, 0xbd } -, - /* Encryption */ - 192, - { 0xb8, 0x3c, 0x71, 0x8c, 0xe5, 0xc6, 0xab, 0x1e, 0x40, 0xff, 0xa5, 0x67, 0x0a, 0xc1, 0x66, 0x66, 0x4d, 0x3a, 0x68, 0x33, 0xcb, 0x3b, 0xde, 0xf4, 0x62, 0x79, 0x4a, 0x25, 0xd5, 0x3e, 0x17, 0x04, 0x60, 0x06, 0x85, 0x8e, 0x63, 0xf8, 0x8a, 0xb9, 0x5d, 0x04, 0xf4, 0xfb, 0x67, 0x74, 0xf7, 0x00, 0x5d, 0xbb, 0x2e, 0x22, 0xd5, 0x19, 0x36, 0x0d, 0x5e, 0x13, 0x38, 0xad, 0x15, 0x30, 0x8f, 0x6c, 0x64, 0x12, 0x54, 0x95, 0x67, 0x00, 0x7e, 0x02, 0x1c, 0xb2, 0x37, 0xed, 0x4a, 0xf5, 0xee, 0xf3, 0xbc, 0xf9, 0xb7, 0x31, 0x59, 0x9f, 0x72, 0x53, 0xce, 0xba, 0x83, 0x04, 0xf4, 0xee, 0x8c, 0x34, 0x33, 0x39, 0xd0, 0xa0, 0x64, 0xeb, 0x77, 0xf1, 0xe9, 0x3f, 0xd1, 0xcc, 0x7b, 0xa5, 0xfc, 0x3b, 0xb8, 0x18, 0x4c, 0xed, 0x0e, 0x86, 0x97, 0xac, 0x47, 0xb7, 0x46, 0x20, 0xc4, 0x94, 0xea, 0xb5, 0x86, 0xed, 0x9f, 0xe7, 0x6e, 0x07, 0xe4, 0xbd, 0x2a, 0x2d, 0x1b, 0x95, 0x59, 0x5b, 0x69, 0xc6, 0x46, 0x77, 0xa8, 0x83, 0x5d, 0x56, 0xac, 0x63, 0x9d, 0xf8, 0xf6, 0x43, 0x24, 0x1b, 0x3e, 0x2c, 0x46, 0x88, 0xd2, 0xad, 0xf2, 0x28, 0xde, 0x2d, 0xa9, 0xbb, 0x0a, 0x36, 0x34, 0x38, 0xe7, 0x51, 0xb5, 0x25, 0x0d, 0xea, 0xe3, 0x05, 0xa3, 0x90, 0x5e, 0x7e, 0x07, 0x7a, 0x4e, 0x8c, 0x74, 0x66 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.19", - /* Message */ - 33, - { 0x89, 0xa1, 0x2d, 0x22, 0xbf, 0x87, 0x7d, 0x44, 0x0a, 0x2e, 0x03, 0xae, 0xa9, 0x32, 0xeb, 0x51, 0x83, 0x37, 0x9b, 0x3c, 0x8b, 0x90, 0xbe, 0xe8, 0xfe, 0xd6, 0xfc, 0x6d, 0xaf, 0xb0, 0xcf, 0x05, 0x27 } -, - /* Seed */ - 156, - { 0x60, 0x72, 0x89, 0x5e, 0x47, 0x80, 0xc8, 0xf7, 0x7e, 0x0b, 0x19, 0x5f, 0xc9, 0xf5, 0xdb, 0x78, 0x33, 0xf7, 0xb6, 0xf5, 0xc8, 0x1c, 0x1d, 0x30, 0xcb, 0xe9, 0xe8, 0x0c, 0xcb, 0x38, 0x66, 0x06, 0x9f, 0x8d, 0xb6, 0x96, 0x3a, 0xd4, 0x6d, 0x52, 0x94, 0x2a, 0x5a, 0x73, 0xf6, 0xa3, 0x27, 0xa9, 0x4e, 0xd1, 0x19, 0xdf, 0xce, 0x4c, 0x37, 0x65, 0x84, 0x37, 0x13, 0xb6, 0x19, 0xf9, 0xc4, 0x38, 0x32, 0x03, 0xd5, 0x5e, 0x2a, 0xb6, 0x1d, 0xa8, 0x96, 0x1a, 0x81, 0x03, 0x7f, 0x11, 0x18, 0xa7, 0x82, 0x97, 0xeb, 0x36, 0x6a, 0x1c, 0x51, 0xd9, 0xf9, 0x46, 0x6b, 0x71, 0x5b, 0xb6, 0x29, 0x99, 0xe0, 0xa9, 0xd6, 0xe0, 0x25, 0x01, 0xd4, 0x7f, 0x97, 0xdb, 0x40, 0x9e, 0x38, 0x86, 0xe1, 0x36, 0x6c, 0x3e, 0xff, 0x2b, 0xa7, 0x90, 0xe2, 0x62, 0x43, 0x22, 0x7a, 0xa1, 0x58, 0x80, 0x82, 0xbc, 0xe6, 0xd5, 0xcd, 0xe3, 0xea, 0x7e, 0xfb, 0xf1, 0x5c, 0x6c, 0x7d, 0xfa, 0x54, 0x54, 0x72, 0xfa, 0x9e, 0x93, 0x95, 0x6a, 0x45, 0x51, 0xd5, 0xa7, 0x7c, 0xa0, 0x0e, 0x26 } -, - /* Encryption */ - 192, - { 0xb7, 0xac, 0xbb, 0xcf, 0xf0, 0xfa, 0x9f, 0xca, 0x6f, 0x0b, 0xbd, 0xe5, 0xa2, 0xf0, 0xa1, 0xe6, 0xa0, 0xab, 0xad, 0xb3, 0x2c, 0x89, 0xe3, 0x17, 0x25, 0x5b, 0xd1, 0x8d, 0x12, 0xe1, 0xa6, 0x0b, 0x3e, 0x00, 0x2c, 0x1d, 0x69, 0x35, 0x64, 0x48, 0x32, 0x9a, 0x49, 0xb5, 0xbd, 0x24, 0x19, 0x10, 0xfa, 0x0c, 0xe0, 0x3b, 0x3e, 0x68, 0xa5, 0x90, 0x50, 0x75, 0x99, 0x39, 0x1e, 0xd1, 0x53, 0x97, 0x92, 0x29, 0x3f, 0xef, 0x13, 0x17, 0x4d, 0xac, 0xea, 0x6d, 0x2a, 0x05, 0xb3, 0x9f, 0x68, 0x48, 0x28, 0xa5, 0xd6, 0xd2, 0x17, 0xf8, 0x4b, 0x78, 0x2c, 0x8f, 0xc9, 0x84, 0x3c, 0xaf, 0x6a, 0xeb, 0x17, 0x8f, 0x0e, 0x2c, 0x6b, 0xd2, 0xa0, 0xe6, 0xf7, 0xb8, 0x09, 0x29, 0x61, 0x17, 0xcc, 0x8a, 0x6b, 0xf7, 0x37, 0x35, 0x84, 0x64, 0x24, 0xad, 0xeb, 0xa1, 0xab, 0x31, 0x14, 0x5f, 0xca, 0x3b, 0x8a, 0xf7, 0x68, 0xc9, 0xd0, 0xa2, 0x8e, 0x09, 0xd5, 0x8a, 0xd4, 0x96, 0x42, 0x31, 0x08, 0xf0, 0x8c, 0xaa, 0xc1, 0x74, 0xac, 0xd1, 0xf3, 0xac, 0x43, 0x48, 0x69, 0x61, 0xc5, 0xc9, 0x0e, 0x1e, 0xfb, 0x89, 0xbd, 0xdb, 0x7b, 0xb3, 0x9f, 0x4c, 0xa3, 0xaf, 0x57, 0x12, 0xf5, 0x53, 0xaf, 0x59, 0x4c, 0xd5, 0xd3, 0x64, 0x13, 0x29, 0x14, 0x26, 0x10, 0x07, 0xaa, 0x1d, 0x5f, 0x21, 0x6b, 0x8e } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 14.20", - /* Message */ - 54, - { 0x09, 0xd6, 0x94, 0x8c, 0xe1, 0xc1, 0xf2, 0x4c, 0x6d, 0x52, 0x9c, 0xbc, 0x5d, 0x6d, 0x6c, 0x1b, 0xea, 0xab, 0x56, 0x95, 0xb3, 0x0c, 0xaa, 0xb7, 0x44, 0x96, 0x9b, 0xf7, 0xf9, 0xdb, 0xd2, 0x83, 0x33, 0x5e, 0x98, 0xa9, 0xbc, 0xd6, 0x5d, 0xad, 0x2b, 0x4f, 0x0e, 0x3c, 0xec, 0x89, 0x0b, 0x05, 0xe6, 0x7f, 0xe9, 0x78, 0x23, 0xd4 } -, - /* Seed */ - 135, - { 0xed, 0xed, 0x62, 0xa6, 0x50, 0xf7, 0xde, 0x3b, 0x12, 0x80, 0x22, 0x9d, 0x5f, 0xb1, 0xc4, 0x40, 0x8e, 0x82, 0xdf, 0xe0, 0x31, 0x7e, 0x64, 0x30, 0xfc, 0xf4, 0x71, 0xb1, 0xe2, 0x8d, 0xa8, 0xcf, 0x6b, 0x4b, 0xf4, 0xc5, 0xd0, 0x31, 0xe3, 0xee, 0x68, 0x8b, 0x64, 0x07, 0x72, 0xaa, 0x50, 0x08, 0xe5, 0x86, 0x3c, 0x70, 0x7a, 0x40, 0x22, 0xc3, 0x29, 0xa6, 0x66, 0x4e, 0x71, 0x10, 0x12, 0x06, 0xb5, 0x4d, 0xb5, 0x40, 0x6e, 0x7f, 0xa9, 0xc8, 0x22, 0x6f, 0x42, 0x93, 0x11, 0x19, 0x62, 0x0c, 0xa3, 0x0d, 0xe7, 0xd0, 0x3b, 0xe1, 0x43, 0x94, 0x0c, 0xbb, 0x4d, 0x1a, 0x9c, 0x86, 0xe9, 0x86, 0x3c, 0x98, 0x7b, 0xff, 0x07, 0x02, 0x3d, 0xe1, 0x98, 0x64, 0xf7, 0x33, 0xda, 0x0c, 0x89, 0xbd, 0x03, 0x9f, 0x19, 0xf4, 0xd8, 0xed, 0x61, 0x6f, 0x7c, 0x6e, 0x94, 0x94, 0x18, 0x5b, 0x60, 0x4a, 0x1a, 0x7b, 0xf7, 0x49, 0x0f, 0xd0, 0xd8 } -, - /* Encryption */ - 192, - { 0x7a, 0xdd, 0xb0, 0x5c, 0xbf, 0x0b, 0x17, 0xaa, 0x50, 0x8a, 0x0b, 0x17, 0x0c, 0x4c, 0x5a, 0xee, 0x84, 0xce, 0x06, 0x65, 0x0d, 0x08, 0xc9, 0x96, 0x6d, 0x95, 0xd3, 0x07, 0x1a, 0x9a, 0x8f, 0x3a, 0x93, 0xf9, 0x6a, 0x87, 0x53, 0x99, 0xb4, 0x78, 0xc2, 0x56, 0xd0, 0x41, 0x5e, 0x74, 0x84, 0x95, 0x98, 0x21, 0x1f, 0x9f, 0x9d, 0x0b, 0x89, 0x36, 0x7b, 0xaa, 0xaf, 0x17, 0x4b, 0x7f, 0x13, 0xd8, 0x49, 0x0b, 0xaa, 0xa7, 0x40, 0x96, 0x1f, 0x52, 0xd7, 0xe3, 0x53, 0xc5, 0x04, 0x81, 0x8a, 0x00, 0x0b, 0x03, 0x67, 0x4d, 0x9c, 0xe4, 0x93, 0xdc, 0x3a, 0x4e, 0xe9, 0x16, 0x13, 0x01, 0xf6, 0x1d, 0xe5, 0x21, 0xae, 0xf3, 0xf6, 0xd4, 0x1d, 0x82, 0xe1, 0xc5, 0xdc, 0xe0, 0x2e, 0x63, 0x6e, 0x77, 0x40, 0xa1, 0x83, 0xf8, 0x02, 0x3a, 0xd2, 0x61, 0x49, 0x41, 0xd9, 0xb1, 0x61, 0xcd, 0xbd, 0xf4, 0x8f, 0x8a, 0x56, 0x2c, 0x8f, 0xfe, 0x44, 0xf5, 0x7a, 0x74, 0x6f, 0x26, 0x39, 0xe5, 0xe8, 0x3b, 0xcf, 0xd3, 0x92, 0xd2, 0x3e, 0x1f, 0xb4, 0xa8, 0xd8, 0x5e, 0x3b, 0xa5, 0xe1, 0xcb, 0x9c, 0x0e, 0x53, 0xf0, 0xd9, 0x1b, 0x01, 0xce, 0xc0, 0xf0, 0xef, 0x9d, 0xfe, 0x3f, 0x2b, 0x30, 0x65, 0xbd, 0x55, 0xb7, 0x2f, 0xb1, 0x70, 0x60, 0xab, 0xe8, 0x83, 0x0a, 0xca, 0x00, 0x44, 0x64, 0xfe, 0x7d } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 15: A 2048-bit RSA key pair", -{ - /* Modulus */ - 256, - { 0xdc, 0xfa, 0x10, 0xff, 0xa7, 0x46, 0x65, 0xae, 0xef, 0x87, 0x09, 0x74, 0xea, 0x99, 0xb2, 0xce, 0x54, 0x54, 0x7c, 0x67, 0xf4, 0x2a, 0xaa, 0x6d, 0xd0, 0x1a, 0x2e, 0xd3, 0x1f, 0xd2, 0xc2, 0x42, 0xaf, 0x5d, 0x96, 0x0b, 0x1f, 0x89, 0x6e, 0xfb, 0xa3, 0x54, 0x3d, 0x65, 0x54, 0xb7, 0xb1, 0x26, 0x87, 0xa5, 0xc6, 0x88, 0x56, 0x8f, 0x32, 0xe0, 0x26, 0xc5, 0x32, 0xd2, 0x59, 0x93, 0xb9, 0x7a, 0x7c, 0x28, 0x42, 0xec, 0x2b, 0x8e, 0x12, 0x35, 0xee, 0xe2, 0x41, 0x4d, 0x25, 0x80, 0x6c, 0x6f, 0xba, 0xe4, 0x38, 0x95, 0x4e, 0xba, 0x9d, 0x27, 0x55, 0xdf, 0xfe, 0xeb, 0x1b, 0x47, 0x70, 0x09, 0x57, 0x81, 0x5a, 0x8a, 0x23, 0x3f, 0x97, 0xb1, 0xa2, 0xc7, 0x14, 0xb3, 0xe2, 0xbe, 0x2e, 0x42, 0xd8, 0xbe, 0x30, 0xb1, 0x96, 0x15, 0x82, 0xea, 0x99, 0x48, 0x91, 0x0e, 0x0c, 0x79, 0x7c, 0x50, 0xfc, 0x4b, 0xb4, 0x55, 0xf0, 0xfc, 0x45, 0xe5, 0xe3, 0x4e, 0x63, 0x96, 0xac, 0x5b, 0x2d, 0x46, 0x23, 0x93, 0x65, 0xc7, 0xf3, 0xda, 0xaf, 0x09, 0x09, 0x40, 0x0d, 0x61, 0xcf, 0x9e, 0x0c, 0xa8, 0x08, 0x3e, 0xaf, 0x33, 0x5a, 0x6f, 0xce, 0xb6, 0x86, 0x3c, 0x1c, 0xc0, 0xcf, 0x5a, 0x17, 0x1a, 0xff, 0x35, 0xd9, 0x7e, 0xcb, 0x60, 0xef, 0x25, 0x1c, 0x7e, 0xc2, 0xc8, 0xa5, 0x88, 0x36, 0x1d, 0xc4, 0x12, 0x66, 0xa4, 0xb7, 0xed, 0x38, 0xb0, 0x26, 0xce, 0x0d, 0x53, 0x78, 0x64, 0x49, 0xdb, 0xb1, 0x1a, 0x06, 0xea, 0x33, 0xcc, 0xf1, 0xec, 0xa5, 0x75, 0x20, 0x1e, 0xd1, 0xaa, 0x47, 0x3e, 0xd1, 0x18, 0x7e, 0xc1, 0xd8, 0xa7, 0x44, 0xea, 0x34, 0x5b, 0xed, 0x7e, 0xa0, 0x0e, 0xe4, 0xe8, 0x1b, 0xba, 0x46, 0x48, 0x60, 0x1d, 0xd5, 0x37, 0xdc, 0x91, 0x01, 0x5d, 0x31, 0xf0, 0xc2, 0xc1 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 256, - { 0x21, 0x95, 0x08, 0x51, 0xcd, 0xf2, 0x53, 0x20, 0x31, 0x8b, 0x30, 0x5a, 0xfa, 0x0f, 0x37, 0x1f, 0x07, 0xae, 0x5a, 0x44, 0xb3, 0x14, 0xeb, 0xd7, 0x29, 0xf5, 0xdc, 0xb1, 0x5d, 0xa7, 0xfa, 0x39, 0x47, 0xac, 0xdd, 0x91, 0x5d, 0xae, 0xd5, 0x74, 0xbd, 0x16, 0xdf, 0x88, 0xbf, 0x85, 0xf6, 0x10, 0x60, 0xb3, 0x87, 0x17, 0x2f, 0xae, 0x6e, 0x01, 0x26, 0x2b, 0x38, 0x64, 0xc2, 0xd3, 0xc2, 0x2f, 0x94, 0xe0, 0x4a, 0x81, 0x59, 0x42, 0x2b, 0x4e, 0xd2, 0x79, 0xc4, 0x8a, 0x4c, 0x9d, 0x76, 0x7d, 0x49, 0x66, 0x07, 0x1a, 0x5b, 0xbf, 0x5d, 0x04, 0x3e, 0x16, 0xff, 0x46, 0xec, 0x1b, 0xa0, 0x71, 0x6f, 0x00, 0xbb, 0xc9, 0x7b, 0xff, 0x5d, 0x56, 0x93, 0xe2, 0x14, 0xe9, 0x9c, 0x97, 0x21, 0xf1, 0x2b, 0x3e, 0xc6, 0x28, 0x2a, 0xe2, 0xa4, 0x85, 0x72, 0x1b, 0x96, 0xdd, 0xcf, 0x74, 0x03, 0xfa, 0x03, 0x7d, 0x0c, 0x57, 0xab, 0x46, 0x3c, 0x44, 0x8d, 0xe5, 0xcc, 0x12, 0x26, 0x5a, 0xdd, 0x88, 0x6d, 0x31, 0x1e, 0xa8, 0xd8, 0xa5, 0x90, 0x3f, 0xa5, 0x6c, 0x5f, 0x1c, 0x9c, 0xf2, 0xeb, 0x11, 0xcb, 0x65, 0x7a, 0x1a, 0x7d, 0x3e, 0x41, 0x35, 0x2d, 0xc3, 0xe6, 0x86, 0x89, 0x8c, 0x4c, 0xe4, 0x30, 0x5e, 0x8b, 0x63, 0x8e, 0x1b, 0x08, 0xa2, 0xa8, 0x6c, 0xc9, 0xeb, 0x98, 0x66, 0xf3, 0x49, 0x9a, 0xc7, 0x7b, 0x61, 0x36, 0xb8, 0x1c, 0xb2, 0x76, 0xd6, 0x14, 0xcf, 0xeb, 0x7b, 0x6e, 0xd3, 0xf3, 0xbc, 0x77, 0x5e, 0x46, 0xc0, 0x00, 0x66, 0xeb, 0xee, 0xe2, 0xcf, 0xf7, 0x16, 0x6b, 0x57, 0x52, 0x05, 0x98, 0x94, 0x7f, 0xf6, 0x21, 0x03, 0x20, 0xb2, 0x88, 0xfb, 0x4f, 0x2c, 0x3f, 0x8f, 0xe9, 0x7b, 0x27, 0x94, 0x14, 0xeb, 0xf7, 0x20, 0x30, 0x00, 0xa1, 0x9f, 0xc0, 0x42, 0x48, 0x75 } -, - /* Prime 1 */ - 128, - { 0xf1, 0x23, 0xbf, 0xe5, 0x3d, 0xe9, 0x7a, 0x56, 0x9d, 0x91, 0xad, 0xcf, 0x55, 0x6f, 0xa6, 0x25, 0xad, 0x30, 0xf3, 0xfd, 0x3d, 0x81, 0x1f, 0x9e, 0x91, 0xe6, 0xaf, 0x44, 0xb6, 0xe7, 0x80, 0xcb, 0x0f, 0x32, 0x78, 0x29, 0xfb, 0x21, 0x19, 0x0a, 0xe2, 0x80, 0x66, 0x46, 0xd7, 0x28, 0xcd, 0x9b, 0x65, 0x31, 0x13, 0x2b, 0x1e, 0xbf, 0xef, 0x12, 0x72, 0x99, 0x30, 0x60, 0xf1, 0xce, 0x70, 0xb1, 0x24, 0x39, 0x30, 0x91, 0xee, 0x85, 0x93, 0xb7, 0x27, 0x36, 0x7e, 0xdb, 0xba, 0x00, 0x9e, 0xc5, 0xbe, 0x17, 0xc4, 0xac, 0xee, 0x12, 0x0c, 0x84, 0x12, 0x67, 0xd4, 0x76, 0x31, 0xa1, 0x6c, 0x36, 0xa6, 0xd1, 0xc9, 0x99, 0x73, 0xc1, 0xb0, 0xb5, 0xa8, 0x35, 0xbf, 0x39, 0xfe, 0xaf, 0xe8, 0xf6, 0x42, 0x1f, 0xd9, 0xc2, 0xa9, 0x0b, 0xc2, 0x79, 0x76, 0x65, 0x9e, 0x67, 0xbc, 0x83, 0x12, 0x4d } -, - /* Prime 2 */ - 128, - { 0xea, 0x98, 0x39, 0xb7, 0xe3, 0x7e, 0xa8, 0x9b, 0xbd, 0xa2, 0x7e, 0x4c, 0x93, 0x47, 0x1c, 0xb4, 0xfd, 0x92, 0x18, 0x9a, 0x0a, 0x96, 0xbc, 0xb4, 0xd7, 0x56, 0x93, 0xf1, 0x8a, 0x5c, 0x2f, 0x74, 0x2a, 0xf9, 0xe3, 0x6f, 0xde, 0x67, 0x9f, 0xbd, 0x9e, 0xae, 0x34, 0x5f, 0xa2, 0x69, 0x52, 0x7b, 0x69, 0x65, 0x02, 0x1c, 0x4b, 0xdf, 0x54, 0xd6, 0x85, 0xbf, 0x08, 0x96, 0x0c, 0xc9, 0x76, 0xf6, 0x8d, 0xca, 0x21, 0xce, 0xbf, 0x44, 0xf2, 0x68, 0xa5, 0x9d, 0xab, 0x8d, 0x1a, 0x25, 0xe5, 0x19, 0xf5, 0x14, 0x7e, 0x1f, 0x45, 0xfe, 0x28, 0x7d, 0x74, 0xcf, 0x72, 0x5b, 0xec, 0x13, 0x26, 0xd3, 0x42, 0x12, 0xc5, 0x6c, 0xf4, 0xff, 0xfa, 0x20, 0x2f, 0x57, 0xb6, 0x8e, 0xe8, 0xcc, 0xa9, 0x43, 0xf3, 0xc1, 0x38, 0xc4, 0xcd, 0xe3, 0x3b, 0xdf, 0x2c, 0x94, 0x40, 0xdf, 0x65, 0x32, 0x24, 0x45 } -, - /* Prime exponent 1 */ - 128, - { 0xca, 0x0c, 0x9b, 0x60, 0xb8, 0xe4, 0xa6, 0x06, 0x67, 0x56, 0xc6, 0x5d, 0x20, 0x88, 0x41, 0x9d, 0xf6, 0x25, 0x3b, 0x7b, 0x68, 0x8a, 0x85, 0xf4, 0xf6, 0xe9, 0x64, 0xd8, 0x5d, 0xad, 0x52, 0xa4, 0x52, 0x62, 0x86, 0x7f, 0x1e, 0x96, 0x18, 0x06, 0x9f, 0xcc, 0xd8, 0x65, 0xe9, 0x28, 0x9e, 0x46, 0xe3, 0x9e, 0x20, 0x22, 0x94, 0x4c, 0x5c, 0x44, 0x87, 0xd3, 0x45, 0xcf, 0x25, 0x2d, 0x46, 0x0d, 0x97, 0x7d, 0x77, 0xed, 0xfe, 0xfe, 0xdb, 0xcb, 0xae, 0x46, 0xa2, 0x3a, 0xf7, 0xfa, 0x47, 0x0f, 0x07, 0x7d, 0xa0, 0xe5, 0x09, 0x42, 0x04, 0x4c, 0xb1, 0xa3, 0x60, 0x49, 0x7c, 0xc2, 0x76, 0x0a, 0xc0, 0xf2, 0xad, 0x4a, 0x2f, 0xcd, 0x0e, 0x84, 0xd7, 0xa1, 0xd9, 0x4d, 0xfd, 0xd2, 0x65, 0x8f, 0xd9, 0xce, 0x18, 0x47, 0x5c, 0x1f, 0xa7, 0x5e, 0xe0, 0xce, 0xba, 0xd0, 0xcf, 0x0a, 0xc0, 0x4d } -, - /* Prime exponent 2 */ - 128, - { 0x52, 0x81, 0x71, 0x23, 0x3c, 0x4e, 0x4a, 0x6c, 0x63, 0xb8, 0x67, 0x64, 0xf5, 0x13, 0x38, 0x84, 0x6a, 0xfd, 0xdb, 0xcb, 0x29, 0x58, 0x34, 0x4c, 0x01, 0xc4, 0x00, 0x4a, 0x1d, 0xd8, 0x28, 0x14, 0x5a, 0x1d, 0x02, 0xa1, 0x50, 0x7d, 0xef, 0x4f, 0x58, 0x24, 0x7a, 0x64, 0xfc, 0x10, 0xc0, 0xa2, 0x88, 0xc1, 0xae, 0x89, 0x57, 0x21, 0xd7, 0x8b, 0x8f, 0x04, 0x4d, 0xb7, 0xc0, 0x0d, 0x86, 0xda, 0x55, 0xa9, 0xb6, 0x54, 0x29, 0x2e, 0xcd, 0x76, 0x82, 0x70, 0xbe, 0x69, 0xe4, 0xbd, 0x59, 0x22, 0xd4, 0xef, 0xfd, 0x1f, 0x70, 0x95, 0x5f, 0x96, 0x27, 0xe3, 0xe1, 0x9b, 0x74, 0x9e, 0x93, 0xb4, 0x0e, 0xf3, 0xdd, 0x1d, 0x61, 0xd9, 0x39, 0x15, 0xe2, 0xb0, 0x9d, 0x93, 0x0b, 0x4b, 0x17, 0x68, 0xbf, 0xac, 0xc0, 0x13, 0x6f, 0x39, 0xb0, 0xcf, 0xdf, 0xb4, 0xd0, 0x50, 0x01, 0x1e, 0x2e, 0x65 } -, - /* Coefficient */ - 128, - { 0xdf, 0x2e, 0xb2, 0x32, 0x2c, 0xc2, 0xda, 0xab, 0xf4, 0xd1, 0x46, 0x55, 0x08, 0xf4, 0x15, 0x21, 0xcd, 0xa7, 0xce, 0xff, 0x23, 0xeb, 0xe6, 0x1d, 0x00, 0xd4, 0x41, 0xee, 0x72, 0x8d, 0xda, 0x5d, 0x16, 0xc7, 0xbf, 0x92, 0x0c, 0xd9, 0x5f, 0x34, 0xbe, 0xb4, 0xfe, 0x32, 0xee, 0x81, 0x7e, 0xf3, 0x36, 0x2e, 0x0b, 0xcd, 0x1d, 0x12, 0x45, 0xf7, 0xb0, 0x77, 0x93, 0xea, 0xa1, 0x90, 0xdc, 0x5a, 0x37, 0xfd, 0xaf, 0x4c, 0x68, 0xe2, 0xca, 0x13, 0x97, 0x2d, 0x7f, 0x51, 0x48, 0xb7, 0x96, 0xb6, 0xfb, 0x6d, 0x7a, 0xdd, 0xa0, 0x7b, 0xd2, 0xcd, 0x13, 0xbe, 0x98, 0xce, 0xbe, 0xd1, 0xed, 0xc6, 0xca, 0x41, 0x2e, 0x39, 0x53, 0x50, 0xc5, 0x9a, 0x1d, 0x84, 0x2b, 0xc4, 0xaa, 0x2f, 0x3c, 0x0b, 0x24, 0x3f, 0xde, 0x7d, 0xfd, 0x95, 0x35, 0x6f, 0x24, 0x39, 0x25, 0x1a, 0x11, 0x72, 0xc4, 0x5e } - -} -, -{{ - "PKCS#1 v1.5 Encryption Example 15.1", - /* Message */ - 19, - { 0x2a, 0xac, 0xec, 0x86, 0xf4, 0x23, 0xdd, 0x92, 0x5e, 0xc1, 0x58, 0x82, 0x2a, 0x74, 0x8c, 0xbe, 0x6c, 0x31, 0xa0 } -, - /* Seed */ - 234, - { 0xcc, 0x4b, 0x87, 0xf6, 0x74, 0x49, 0x7b, 0xb0, 0xe3, 0x3d, 0x9e, 0x2a, 0x4a, 0x80, 0x70, 0xb7, 0xd7, 0x8b, 0x5f, 0xd2, 0xc4, 0xb4, 0xf6, 0xeb, 0xac, 0xcd, 0x4e, 0xe5, 0x05, 0xb7, 0x1f, 0xca, 0xfe, 0x21, 0x56, 0x33, 0x7d, 0xdf, 0x27, 0xb4, 0x75, 0xaf, 0x33, 0xf6, 0xc3, 0x40, 0x5b, 0x8e, 0x3c, 0x0c, 0x20, 0x6e, 0xc2, 0x81, 0x29, 0x22, 0xfc, 0xd8, 0xa3, 0x66, 0x1b, 0x86, 0x19, 0xbb, 0xc1, 0x82, 0xf8, 0x07, 0xf3, 0xa1, 0x07, 0x2e, 0x62, 0xca, 0x2b, 0xf1, 0xfa, 0x8b, 0x94, 0x4e, 0x58, 0xa0, 0xe2, 0x03, 0xdb, 0xb7, 0x53, 0xf9, 0xf1, 0xb6, 0xef, 0x62, 0x7e, 0xbe, 0xe5, 0x98, 0x96, 0x7b, 0x38, 0x7a, 0x5f, 0x96, 0x36, 0xd8, 0xb6, 0x41, 0xb3, 0x89, 0x84, 0xb1, 0xca, 0x03, 0x7e, 0x3a, 0xae, 0xaa, 0x17, 0x10, 0xf5, 0x16, 0x25, 0xea, 0x85, 0xf8, 0xfb, 0x9a, 0x6e, 0x02, 0x9e, 0x64, 0x57, 0x58, 0x14, 0xd5, 0x30, 0xfc, 0x14, 0x6b, 0x34, 0x45, 0xac, 0x42, 0x01, 0xb4, 0xe4, 0x08, 0xad, 0xf6, 0x55, 0xf6, 0x78, 0x43, 0xd8, 0x87, 0x1c, 0xac, 0xe5, 0xd9, 0x06, 0xd7, 0xfc, 0x03, 0x8f, 0xea, 0x88, 0x5b, 0x96, 0xfb, 0x8e, 0xb1, 0xa7, 0x21, 0xc6, 0xc1, 0x4a, 0xbb, 0xeb, 0x78, 0xfb, 0x4c, 0x79, 0x8a, 0x19, 0x58, 0x99, 0x59, 0x89, 0x84, 0x55, 0xa3, 0x16, 0x84, 0x3c, 0x6c, 0xd9, 0x9e, 0xf5, 0x8c, 0x2b, 0x0b, 0x49, 0xb8, 0xab, 0x41, 0x91, 0xb4, 0x02, 0xa5, 0x4c, 0x92, 0x97, 0x31, 0x0c, 0xd2, 0x24, 0xb1, 0x7f, 0x21, 0x41, 0x67, 0x72, 0x5c, 0x48, 0xfc, 0xc6, 0x1b, 0xc4, 0x7c, 0xfa, 0xcc, 0xf1, 0x5e, 0xb3, 0xb0 } -, - /* Encryption */ - 256, - { 0x60, 0x42, 0xe7, 0x45, 0x58, 0x9a, 0xf0, 0x3a, 0xf8, 0x75, 0x20, 0xf9, 0x3c, 0x45, 0xd8, 0xc3, 0x59, 0x85, 0xad, 0xa1, 0x16, 0x1a, 0x37, 0xd8, 0x22, 0xe9, 0xf9, 0x46, 0x0f, 0xc7, 0x5f, 0xcf, 0x01, 0x79, 0xd8, 0x49, 0x1b, 0x8f, 0x5d, 0x1e, 0x4d, 0xe8, 0xce, 0xb3, 0x1e, 0x07, 0xc4, 0x86, 0x5c, 0x5a, 0x3e, 0xfd, 0xbb, 0xb6, 0x9a, 0x88, 0x03, 0xb8, 0x9e, 0xe6, 0x5a, 0x43, 0x0a, 0x58, 0x09, 0xc7, 0x07, 0x56, 0x91, 0x50, 0xb5, 0x80, 0xbb, 0x68, 0x6a, 0x94, 0xc5, 0x54, 0x1c, 0x46, 0xad, 0xcd, 0x82, 0x79, 0x60, 0xce, 0x24, 0x4f, 0xf6, 0x88, 0x38, 0x7d, 0x16, 0x16, 0xe8, 0x5b, 0x4d, 0x17, 0x80, 0xc6, 0x48, 0x36, 0x06, 0xcf, 0x92, 0x4b, 0x54, 0xf0, 0x80, 0xcf, 0x41, 0x54, 0xe6, 0x68, 0x29, 0xbf, 0x6e, 0x53, 0x24, 0x81, 0x04, 0x8e, 0xc4, 0x1f, 0xad, 0xc0, 0x7d, 0x75, 0x5b, 0xb3, 0x4b, 0xb2, 0x81, 0x45, 0x21, 0x9c, 0xb3, 0x0d, 0x47, 0xd0, 0xd6, 0x18, 0x70, 0x91, 0x80, 0xe9, 0x03, 0x03, 0xff, 0x9e, 0xf0, 0x90, 0x18, 0xbe, 0xd3, 0xda, 0x75, 0x76, 0x1d, 0xa7, 0x94, 0x81, 0x1f, 0x96, 0xbc, 0x9e, 0x8d, 0x7c, 0x4b, 0xa1, 0xb5, 0x94, 0x6b, 0xda, 0x0b, 0xd3, 0x13, 0xfa, 0xec, 0x4c, 0x99, 0x3e, 0xd2, 0x74, 0x8e, 0xed, 0x8c, 0xce, 0x4b, 0xdb, 0x52, 0x0b, 0xa7, 0xdb, 0x16, 0x5f, 0x9f, 0xe5, 0x6a, 0xa8, 0x45, 0x4d, 0x6f, 0xf3, 0x38, 0x74, 0xfe, 0xee, 0xbf, 0x29, 0xde, 0x2d, 0xf5, 0xb7, 0xf0, 0x0a, 0xa1, 0xd9, 0xfb, 0x07, 0x3f, 0xc4, 0x06, 0x7b, 0x58, 0xdc, 0x50, 0x62, 0x4e, 0x12, 0x7f, 0x71, 0x1d, 0xde, 0x2c, 0xc2, 0xcf, 0xda, 0xb4, 0x91, 0x9c, 0xcf, 0x28, 0xc8, 0x36, 0x60, 0xdf, 0xc2, 0x27, 0xb0, 0xf5, 0x00, 0xec, 0x1f, 0x90, 0x4f } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Encryption Example 15.2", - /* Message */ - 21, - { 0x5c, 0x8b, 0xf2, 0xac, 0xab, 0x08, 0xbf, 0xfe, 0xfa, 0x64, 0x80, 0x95, 0x2b, 0x24, 0xda, 0xa5, 0x01, 0x9d, 0x12, 0x5f, 0xee } -, - /* Seed */ - 232, - { 0x5e, 0x16, 0x30, 0x70, 0xef, 0xdd, 0xb7, 0x9f, 0x47, 0x64, 0xf8, 0xa8, 0x1d, 0x44, 0x46, 0x0b, 0x5c, 0x40, 0x0b, 0xec, 0x70, 0x37, 0x52, 0x29, 0x20, 0xf7, 0x72, 0x95, 0x9f, 0xd4, 0xcf, 0x3a, 0xef, 0x2f, 0x14, 0x45, 0x4d, 0xcd, 0x9e, 0x86, 0x25, 0x12, 0xca, 0x69, 0xdb, 0x83, 0x68, 0xa4, 0xcd, 0x8d, 0x1a, 0x44, 0xda, 0x59, 0x5d, 0x6b, 0x43, 0x93, 0x91, 0xc9, 0x31, 0x46, 0xb1, 0x23, 0xf1, 0x86, 0x08, 0x3c, 0x4b, 0x64, 0x47, 0xbf, 0x7e, 0x20, 0x81, 0x51, 0x46, 0xac, 0x75, 0x49, 0xef, 0xb6, 0x74, 0x60, 0xe8, 0xff, 0x1b, 0x2b, 0xba, 0x5c, 0x95, 0xa5, 0x1e, 0xf8, 0x13, 0xd5, 0xdc, 0x4e, 0x6c, 0x38, 0x92, 0xbc, 0x4f, 0x43, 0x9c, 0x99, 0x11, 0x7e, 0xd0, 0x6c, 0x14, 0xa6, 0xc5, 0x40, 0xfd, 0x4c, 0x65, 0xd1, 0x95, 0xd8, 0xc6, 0x1e, 0xa7, 0x79, 0x68, 0x38, 0xe5, 0xa5, 0xdf, 0xaf, 0x11, 0xd0, 0x71, 0x3c, 0x19, 0x1e, 0x8a, 0x0b, 0x80, 0x80, 0xf7, 0xa7, 0x7e, 0x70, 0x3a, 0xb3, 0x66, 0x22, 0xf1, 0xc6, 0x48, 0xb7, 0x65, 0x43, 0x5b, 0x90, 0x27, 0x97, 0x18, 0x11, 0xb1, 0x15, 0x2d, 0x97, 0x2f, 0xb7, 0x6a, 0xa8, 0x92, 0x05, 0x03, 0x3d, 0x95, 0x78, 0x18, 0x7a, 0xe6, 0x34, 0x88, 0xfd, 0xa3, 0xc8, 0x6b, 0x2f, 0x28, 0xe7, 0x79, 0xac, 0x4c, 0x89, 0xcd, 0x25, 0x20, 0x17, 0xd1, 0xa9, 0x95, 0x8a, 0x52, 0xc5, 0xb8, 0x7e, 0xc1, 0xbf, 0x9c, 0xbd, 0xf7, 0xde, 0x0e, 0x97, 0xc5, 0x8b, 0xa1, 0x1b, 0xa3, 0xa3, 0x37, 0x05, 0xf3, 0xf4, 0x99, 0x58, 0x9a, 0x3a, 0x72, 0xe2, 0xc0, 0xfc, 0x5b, 0x16, 0xfc, 0xa2 } -, - /* Encryption */ - 256, - { 0x44, 0xe6, 0x71, 0xe0, 0x3b, 0xb6, 0x67, 0x80, 0xec, 0x05, 0x86, 0xd5, 0x6f, 0x8f, 0x6a, 0x49, 0x41, 0x5a, 0xd4, 0xbb, 0xce, 0x22, 0x6d, 0x75, 0xd7, 0x0f, 0x06, 0xce, 0x29, 0xde, 0xea, 0x7d, 0xa1, 0xaf, 0xa8, 0x28, 0x7e, 0x44, 0x36, 0x3c, 0x51, 0x0f, 0x34, 0xeb, 0x8b, 0xf3, 0x1c, 0xa2, 0x47, 0x29, 0x59, 0x26, 0x9c, 0x18, 0xdf, 0x09, 0x36, 0xff, 0x12, 0xc6, 0x16, 0x6f, 0x4f, 0x45, 0x96, 0xcb, 0x1c, 0xae, 0xc4, 0x1d, 0xed, 0xa8, 0xc5, 0x09, 0x99, 0xbf, 0x4c, 0x94, 0x4d, 0x21, 0x37, 0x5b, 0x36, 0x75, 0x31, 0x91, 0xb4, 0xcb, 0x7c, 0xaa, 0x1b, 0x43, 0xe9, 0x11, 0x6c, 0xbf, 0x1d, 0xa8, 0xb2, 0x01, 0xd2, 0x97, 0xa4, 0xd0, 0x8b, 0xb0, 0xe5, 0xbd, 0xc8, 0x95, 0x32, 0x70, 0xf7, 0xc2, 0x80, 0x96, 0x78, 0xc4, 0x4b, 0xea, 0x75, 0xe8, 0x1f, 0xac, 0x22, 0xd2, 0x71, 0x06, 0x30, 0x2b, 0xb6, 0x9d, 0xa0, 0x74, 0xb6, 0xef, 0xa6, 0x68, 0x8c, 0xf8, 0x35, 0xc8, 0x0b, 0xf5, 0xe4, 0x55, 0x35, 0x28, 0xec, 0xe0, 0xb7, 0xc1, 0xb7, 0x7b, 0x66, 0x6e, 0xa3, 0x45, 0x23, 0xec, 0x1f, 0xcb, 0x3e, 0x25, 0x05, 0x4e, 0x0b, 0xb8, 0xe4, 0xba, 0x02, 0x7e, 0x5c, 0x21, 0xbf, 0x7a, 0x51, 0x43, 0xbf, 0x04, 0x1c, 0xe9, 0xcc, 0xbc, 0xfa, 0xfa, 0x87, 0x80, 0x82, 0xfe, 0x41, 0xf7, 0x8c, 0x70, 0xbf, 0x4e, 0x53, 0xcf, 0x48, 0x7c, 0x1a, 0xad, 0xb0, 0x19, 0x15, 0xce, 0xdd, 0xe8, 0xcd, 0x9f, 0xb8, 0x4e, 0xfd, 0x98, 0x1a, 0xc9, 0x8c, 0xd5, 0x7a, 0x82, 0x56, 0xd4, 0xe9, 0xe2, 0xd0, 0x86, 0x2d, 0xab, 0x04, 0x54, 0xd3, 0xff, 0x4f, 0xb9, 0x85, 0x26, 0x4a, 0x46, 0x99, 0x5a, 0xb0, 0x68, 0xa7, 0x4e, 0xdc, 0x7e, 0xd8, 0xae, 0xff, 0x5f, 0xa3, 0x0f, 0x3a, 0x7d, 0x75, 0x94 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.3", - /* Message */ - 13, - { 0xe2, 0x00, 0x4b, 0x31, 0x07, 0x39, 0x98, 0x2c, 0xfa, 0x9e, 0x95, 0x45, 0x3a } -, - /* Seed */ - 240, - { 0xe9, 0x3e, 0x64, 0x12, 0x33, 0x7a, 0xb7, 0xb0, 0xf1, 0xb5, 0x69, 0x80, 0x1a, 0x3c, 0x16, 0x4a, 0x6f, 0x23, 0xe3, 0xc2, 0x7c, 0x7c, 0x55, 0xa8, 0xc5, 0xac, 0x9e, 0xaf, 0x31, 0x88, 0x55, 0xf8, 0x32, 0x8b, 0x5d, 0x7a, 0xb4, 0xcb, 0x86, 0x19, 0xa0, 0x0e, 0x99, 0x41, 0xcc, 0xaa, 0x94, 0x85, 0x70, 0x52, 0x71, 0x82, 0x61, 0x74, 0x43, 0xc1, 0xd2, 0x1e, 0x4a, 0x6e, 0x21, 0xb3, 0xf6, 0xd4, 0xf6, 0x98, 0xa6, 0x1a, 0xe0, 0x29, 0x17, 0x2c, 0xf4, 0xda, 0x03, 0x9d, 0x91, 0x58, 0x5a, 0x87, 0xda, 0xd1, 0x28, 0xc2, 0xfa, 0xc5, 0x53, 0x1b, 0x2f, 0x45, 0xdc, 0xef, 0x9b, 0x9f, 0xc3, 0x31, 0xc8, 0x04, 0x48, 0x85, 0x28, 0x84, 0x7c, 0x90, 0x87, 0x5d, 0x19, 0x07, 0x5f, 0xff, 0xb0, 0x05, 0x76, 0x3d, 0x88, 0xe0, 0x81, 0x47, 0x66, 0x92, 0x28, 0xa9, 0xaa, 0xd0, 0x16, 0x25, 0xbc, 0x61, 0x11, 0x2c, 0xc7, 0xb7, 0x72, 0xf3, 0x21, 0xd4, 0x33, 0xd4, 0xf2, 0x69, 0x78, 0x20, 0x9d, 0x0e, 0x79, 0x67, 0x6a, 0xf3, 0xb8, 0xa7, 0x4b, 0x97, 0x3f, 0x52, 0xab, 0x91, 0x90, 0x85, 0xf3, 0x52, 0x35, 0x5f, 0x85, 0x6a, 0xa4, 0x0f, 0xfa, 0xbc, 0xe5, 0x43, 0xd4, 0xe7, 0x6d, 0x45, 0x48, 0x92, 0x98, 0x9c, 0xb3, 0x83, 0xf3, 0xe6, 0x6b, 0xbb, 0x0e, 0x8f, 0xee, 0xbf, 0xf7, 0xc6, 0xa5, 0x4e, 0xf2, 0x62, 0x5f, 0xc4, 0x05, 0x0e, 0x6f, 0x87, 0xa3, 0x23, 0x13, 0x2a, 0x4e, 0x67, 0x12, 0x68, 0xfb, 0x83, 0xcf, 0xf2, 0xd8, 0x22, 0x51, 0xb7, 0x9c, 0xbe, 0x32, 0xda, 0xa8, 0xe5, 0x53, 0x20, 0x2f, 0xe8, 0x87, 0x22, 0x61, 0xf6, 0x0d, 0x5b, 0xb5, 0x11, 0xf2, 0xfa, 0x2f, 0x14, 0x21, 0xa3 } -, - /* Encryption */ - 256, - { 0x2b, 0xbf, 0x6b, 0x0c, 0x5c, 0xf2, 0x0e, 0xf2, 0xf6, 0xc5, 0xa0, 0xaa, 0x48, 0x45, 0x4f, 0x85, 0x0a, 0xa5, 0xf6, 0xbb, 0xeb, 0x03, 0x0d, 0xb4, 0xe2, 0xbe, 0xc1, 0x1f, 0xb2, 0x00, 0xf0, 0x1e, 0x4e, 0xae, 0xf0, 0x44, 0xd8, 0x14, 0x33, 0x33, 0x33, 0x8e, 0x5e, 0x66, 0x38, 0x00, 0x87, 0x66, 0x0e, 0xd0, 0x17, 0x3a, 0x76, 0x82, 0x12, 0x85, 0x67, 0x7e, 0x37, 0x1f, 0x28, 0xec, 0x45, 0x00, 0xf4, 0xd5, 0x9f, 0xab, 0xab, 0x20, 0x73, 0xe7, 0x34, 0x36, 0x5f, 0xc6, 0xb0, 0x94, 0xee, 0x0a, 0xdb, 0xce, 0xac, 0xcf, 0xe2, 0x49, 0x88, 0xce, 0x61, 0x5d, 0x60, 0x5f, 0xc3, 0x40, 0x8c, 0x03, 0xbe, 0x22, 0x1c, 0x99, 0x3f, 0x61, 0xaa, 0x72, 0x4f, 0xc8, 0x71, 0x4a, 0x8a, 0x4a, 0x18, 0x15, 0xf9, 0xe9, 0xa9, 0x98, 0x82, 0xaa, 0x46, 0x88, 0x3e, 0x70, 0x47, 0x4e, 0x33, 0x29, 0xb9, 0x91, 0xe6, 0xd5, 0x3d, 0xc6, 0xb5, 0x00, 0x86, 0x19, 0x92, 0x34, 0x3a, 0x6d, 0xa8, 0x9a, 0x8b, 0xd6, 0xf3, 0x7f, 0x34, 0xe5, 0xde, 0xee, 0xf8, 0x0e, 0x7d, 0x56, 0xb9, 0x3a, 0x45, 0x17, 0x60, 0x66, 0x36, 0x50, 0xfa, 0x45, 0x5d, 0x55, 0x41, 0x89, 0x9a, 0x76, 0xaa, 0xd1, 0xc6, 0x27, 0x5e, 0xc8, 0x2c, 0x46, 0x07, 0x12, 0x26, 0x59, 0xb5, 0x08, 0xcb, 0x5d, 0xc0, 0x26, 0xac, 0xf9, 0x3f, 0xa0, 0x1a, 0x5f, 0xca, 0x3d, 0x81, 0xc1, 0xbb, 0x20, 0xa5, 0xa5, 0xcf, 0x35, 0x7a, 0x23, 0xc9, 0x56, 0x88, 0xea, 0x42, 0xeb, 0x1e, 0xf2, 0xc9, 0xd4, 0x6a, 0xe3, 0x7f, 0x8c, 0xbe, 0x61, 0x5c, 0x20, 0x84, 0xd9, 0x89, 0xb8, 0x92, 0xf0, 0x16, 0x7b, 0x23, 0xbe, 0x33, 0x62, 0xfa, 0xce, 0x80, 0x8d, 0x6a, 0x5e, 0xb8, 0x96, 0x19, 0x44, 0x08, 0xdb, 0x7c, 0x01, 0x63, 0x9c, 0x58, 0x62, 0x30, 0x4c } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.4", - /* Message */ - 53, - { 0xdb, 0x6a, 0xf1, 0x29, 0x23, 0x05, 0x27, 0x8c, 0x5b, 0x33, 0x83, 0xf8, 0xa4, 0x1d, 0x6c, 0x83, 0x52, 0x21, 0x14, 0xc9, 0x88, 0x85, 0x50, 0x74, 0x06, 0x5b, 0x23, 0xf9, 0xfe, 0xae, 0x8e, 0xa4, 0x31, 0xfd, 0x5d, 0xa3, 0x6f, 0x9b, 0xab, 0xf9, 0xdc, 0x61, 0xdf, 0x2e, 0x39, 0x23, 0x47, 0x83, 0x04, 0x73, 0x38, 0xec, 0x4f } -, - /* Seed */ - 200, - { 0xcb, 0x85, 0x1f, 0xb2, 0x76, 0xa7, 0x49, 0x1c, 0xd3, 0xef, 0xe4, 0xd3, 0x39, 0x50, 0x16, 0xc1, 0xec, 0x2b, 0x15, 0x09, 0x4a, 0x1e, 0xc6, 0xd9, 0x30, 0xd4, 0xca, 0x21, 0xb4, 0x20, 0xf8, 0x47, 0xff, 0x68, 0x68, 0xf0, 0x14, 0xd2, 0x09, 0xff, 0x80, 0x7e, 0x8b, 0x1f, 0x71, 0x67, 0x0b, 0x32, 0x50, 0x94, 0xc0, 0xf6, 0xe3, 0x2f, 0x84, 0xf7, 0x68, 0x22, 0x22, 0x02, 0xb2, 0x1b, 0xe3, 0x6a, 0x28, 0x6b, 0x30, 0xe0, 0x82, 0xef, 0x3b, 0xba, 0x64, 0x7c, 0xeb, 0xee, 0xaf, 0xe3, 0x10, 0x69, 0x44, 0x18, 0xd7, 0x0a, 0x67, 0x9e, 0xb2, 0x01, 0x07, 0x80, 0xdd, 0x0e, 0x96, 0x55, 0x3c, 0x43, 0xcb, 0xc6, 0xd0, 0x0e, 0xac, 0x22, 0xaa, 0x71, 0xf2, 0x48, 0x21, 0xc4, 0xd6, 0xc1, 0x77, 0x8e, 0x78, 0x6c, 0xd8, 0xc7, 0xbf, 0x2c, 0xbb, 0xf2, 0x14, 0xe2, 0x03, 0xe2, 0xef, 0x2f, 0x33, 0x35, 0x78, 0xcf, 0x1a, 0x94, 0x7e, 0x27, 0xe5, 0x99, 0x96, 0x29, 0x0c, 0xbc, 0xd6, 0xca, 0x3f, 0x8f, 0x96, 0xba, 0x67, 0xe0, 0xe3, 0x41, 0x30, 0xcf, 0xdf, 0x86, 0xef, 0x48, 0xe6, 0x7c, 0x90, 0xb8, 0xb7, 0x2e, 0x6f, 0x42, 0x55, 0x01, 0x7d, 0xa2, 0xd1, 0xf3, 0xae, 0xdd, 0x7f, 0xb1, 0xd9, 0xde, 0x42, 0xef, 0xc0, 0x37, 0xab, 0xe6, 0x61, 0x6e, 0xbd, 0xa8, 0xd0, 0xb4, 0x0b, 0xd7, 0x80, 0xcb, 0xdb, 0x68, 0xce, 0x54, 0x31, 0x8f, 0xda, 0xfd } -, - /* Encryption */ - 256, - { 0xc9, 0x9a, 0x9a, 0xb6, 0x7c, 0xad, 0x0c, 0x41, 0xec, 0x84, 0x7b, 0xc2, 0x74, 0x67, 0xfd, 0xf5, 0xbf, 0x61, 0xed, 0x6d, 0x04, 0xc6, 0x5f, 0x7d, 0x9d, 0xd8, 0xbb, 0x70, 0x07, 0xa8, 0xa9, 0xb8, 0x3a, 0x3c, 0x38, 0xa9, 0xcb, 0x92, 0x5e, 0x3e, 0x7b, 0x3c, 0x40, 0x7d, 0x64, 0x66, 0x93, 0x15, 0xb3, 0x54, 0x49, 0xe7, 0x54, 0x28, 0xae, 0x96, 0x19, 0x14, 0xb0, 0xb9, 0x10, 0x23, 0xe7, 0x83, 0x19, 0x1f, 0x95, 0x41, 0xb6, 0x78, 0x65, 0x97, 0x1c, 0x95, 0xb0, 0xbe, 0x18, 0x93, 0x1e, 0xb1, 0xc8, 0x47, 0xc2, 0x6a, 0x29, 0x83, 0xc0, 0x58, 0x4e, 0xb2, 0x17, 0xc9, 0x9c, 0x70, 0x5f, 0x5a, 0xd8, 0xcb, 0xb0, 0x9f, 0x99, 0xb0, 0x6b, 0xdf, 0x7b, 0xd1, 0x26, 0x28, 0xae, 0x36, 0x67, 0xc1, 0x2c, 0x72, 0x27, 0xd9, 0x6f, 0xf9, 0xc1, 0x08, 0xdc, 0xe3, 0x22, 0x51, 0x06, 0xf6, 0x2f, 0x9a, 0x4a, 0x3a, 0x81, 0x17, 0xa9, 0x92, 0xf2, 0x88, 0xc3, 0xb5, 0x97, 0x91, 0x09, 0x87, 0x8f, 0xcd, 0x59, 0xc6, 0x79, 0x6b, 0x19, 0x98, 0x48, 0x2e, 0xa8, 0x2f, 0x30, 0x1c, 0x93, 0x91, 0x83, 0xb2, 0xdd, 0x47, 0x88, 0x04, 0x48, 0x67, 0x8a, 0xcb, 0xa1, 0x2d, 0x7b, 0xc8, 0xa5, 0x52, 0xeb, 0x32, 0x76, 0x34, 0xe9, 0x2d, 0x0c, 0xdc, 0xf7, 0x1e, 0xff, 0xb6, 0x66, 0xad, 0x90, 0x2d, 0x9e, 0x26, 0xad, 0x18, 0x60, 0xe2, 0x92, 0x81, 0xd0, 0x2f, 0xb0, 0xc5, 0x49, 0x3b, 0xf7, 0x4a, 0xc0, 0x2c, 0x94, 0x40, 0x43, 0x6e, 0x0d, 0x75, 0x32, 0x28, 0x92, 0x77, 0x7d, 0x32, 0x5e, 0xc8, 0x45, 0x2d, 0xe7, 0x58, 0xcc, 0x6a, 0x5c, 0xbb, 0x02, 0xd3, 0x41, 0xf4, 0x5c, 0x9a, 0xc8, 0xed, 0xf1, 0x50, 0xda, 0xd7, 0x15, 0x82, 0xdc, 0x77, 0x95, 0x8a, 0x85, 0x44, 0xb0, 0xb5, 0x58, 0xee, 0x2a, 0x0b } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.5", - /* Message */ - 11, - { 0xe7, 0x99, 0xe4, 0xeb, 0xc8, 0x69, 0x31, 0x9e, 0xe2, 0x25, 0x80 } -, - /* Seed */ - 242, - { 0x3a, 0x07, 0x57, 0xcb, 0x49, 0xa3, 0xfe, 0x6a, 0xe8, 0x0d, 0x37, 0x42, 0x06, 0x8b, 0x5c, 0x80, 0x68, 0xb8, 0xc5, 0x88, 0x54, 0x20, 0x01, 0x10, 0x93, 0xc2, 0x20, 0x99, 0xed, 0xaa, 0xdb, 0x49, 0x1f, 0x22, 0x6f, 0x85, 0x60, 0x66, 0x16, 0x3a, 0xb5, 0x10, 0x5e, 0x78, 0x79, 0xc7, 0x49, 0x1c, 0x18, 0x35, 0x98, 0x5d, 0xc4, 0x94, 0x21, 0x0e, 0xf7, 0x8b, 0xad, 0x48, 0x16, 0xd9, 0xb6, 0x94, 0xc9, 0xc8, 0xbe, 0x46, 0x6a, 0x4d, 0x17, 0x8a, 0x7d, 0xde, 0xcb, 0xce, 0x53, 0x65, 0x40, 0x0d, 0x68, 0x21, 0xb6, 0xe9, 0xae, 0x0e, 0x03, 0xbb, 0x69, 0xad, 0xc4, 0xec, 0x73, 0x4a, 0xfd, 0xcd, 0xea, 0x6d, 0xc0, 0xc4, 0x85, 0x96, 0xc4, 0x8b, 0x27, 0x35, 0xef, 0x70, 0xf3, 0x73, 0x4c, 0x18, 0x6d, 0x03, 0x18, 0x37, 0x8d, 0x2b, 0xf8, 0x09, 0x96, 0x88, 0x67, 0x2f, 0xa3, 0x85, 0x91, 0xda, 0x4a, 0xe6, 0xfc, 0x11, 0x2b, 0x72, 0x7e, 0xc8, 0x19, 0x84, 0xdf, 0x7b, 0x56, 0xc9, 0x84, 0x4e, 0x25, 0xb0, 0xfc, 0xd8, 0x1d, 0x2b, 0xe7, 0xd1, 0x8d, 0x01, 0x64, 0x6a, 0x6d, 0x9f, 0xe2, 0x25, 0xd3, 0x69, 0x7c, 0x34, 0xed, 0x2e, 0x33, 0x6c, 0xc0, 0x37, 0x3d, 0xaa, 0x28, 0xd8, 0x82, 0xe4, 0x97, 0x75, 0x7b, 0x0a, 0x65, 0x10, 0x86, 0x2e, 0xac, 0x10, 0xd3, 0xb2, 0x4a, 0xdb, 0x25, 0x2f, 0x30, 0xd4, 0x34, 0xe3, 0x0a, 0x63, 0x76, 0x46, 0x9d, 0x80, 0xb9, 0x57, 0x11, 0x16, 0x17, 0x78, 0xdf, 0x35, 0x88, 0x9b, 0x3a, 0xcf, 0xb1, 0xf6, 0x53, 0xea, 0x63, 0x07, 0x2f, 0x35, 0xa3, 0xc8, 0x9f, 0x6b, 0xa5, 0x2a, 0xfb, 0xbd, 0xc2, 0x8f, 0x23, 0xd3, 0x8f, 0x4d, 0x4e, 0x79, 0xfc, 0x39, 0x7c, 0x10 } -, - /* Encryption */ - 256, - { 0x3a, 0x3e, 0x72, 0x5c, 0x6e, 0x4b, 0xb0, 0x06, 0x12, 0x69, 0x61, 0x8c, 0xbb, 0x8a, 0x62, 0x67, 0xd9, 0x55, 0x83, 0xab, 0xaa, 0x03, 0xd8, 0xdf, 0x85, 0xa4, 0xf6, 0xa5, 0xcc, 0x35, 0x9b, 0xf1, 0x15, 0x26, 0x0d, 0xdb, 0x70, 0xae, 0x7c, 0x66, 0xbb, 0x8d, 0x87, 0xd6, 0x33, 0x1f, 0xf1, 0xb0, 0xb5, 0x4b, 0xe5, 0x64, 0x8e, 0x83, 0xe8, 0x3a, 0x91, 0xc5, 0x4c, 0xf3, 0x71, 0x49, 0x6e, 0xe5, 0xca, 0x02, 0x73, 0xb1, 0x9f, 0x70, 0x03, 0x70, 0xc2, 0xc8, 0xcd, 0xf4, 0x28, 0x13, 0x38, 0xa6, 0xe7, 0x2f, 0x66, 0x32, 0x41, 0x68, 0xea, 0x8c, 0xdb, 0xc6, 0x4c, 0x60, 0x9b, 0xa9, 0x67, 0x91, 0xc7, 0x91, 0xb5, 0xac, 0x84, 0x00, 0x99, 0x2a, 0x8c, 0x66, 0xfb, 0x09, 0xf4, 0xe3, 0x13, 0x07, 0x49, 0x12, 0xaf, 0x0c, 0xb7, 0x41, 0x5f, 0xb2, 0x15, 0xeb, 0x97, 0xfa, 0xeb, 0xbe, 0xf1, 0xa4, 0x47, 0x23, 0x9a, 0x91, 0xdb, 0x4a, 0x34, 0xfc, 0xa4, 0xd8, 0x43, 0x46, 0x25, 0x9e, 0xe0, 0xa1, 0xda, 0xdd, 0x10, 0xb7, 0xf0, 0x1f, 0xc8, 0xc5, 0x3e, 0x42, 0x0f, 0x88, 0xcd, 0xfa, 0x0c, 0xbc, 0xf6, 0x2b, 0xe4, 0x4b, 0x8a, 0x79, 0x40, 0x86, 0x4f, 0xf8, 0x13, 0x7e, 0xdb, 0x12, 0x2a, 0xc2, 0xda, 0xe5, 0x41, 0x0a, 0x47, 0xcf, 0x07, 0x62, 0xe2, 0x0f, 0x20, 0x86, 0xcb, 0xf6, 0x6f, 0xf4, 0xd1, 0xa9, 0xf7, 0x27, 0x0f, 0x00, 0x9c, 0xb2, 0xe0, 0x7d, 0x90, 0x20, 0xb4, 0x8a, 0x76, 0xd2, 0x41, 0x08, 0xe9, 0x98, 0x9b, 0xf9, 0x04, 0xe4, 0xa7, 0x1d, 0xdb, 0x91, 0x74, 0x0a, 0xd7, 0xe5, 0xd1, 0xb6, 0x8e, 0xc6, 0x4e, 0x3e, 0x66, 0xcd, 0x0e, 0x89, 0x7d, 0xcc, 0x66, 0x57, 0x39, 0xeb, 0xac, 0x45, 0x19, 0x93, 0xf0, 0x2c, 0xc5, 0xbf, 0xc6, 0x3a, 0x60, 0x2f, 0x55, 0x83, 0x81, 0xda } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.6", - /* Message */ - 55, - { 0x09, 0x97, 0x12, 0xb8, 0x26, 0xba, 0x67, 0xcf, 0x92, 0x92, 0x25, 0xbd, 0x61, 0x2e, 0xc0, 0x65, 0xd4, 0x51, 0xed, 0xe2, 0x31, 0xc8, 0xd5, 0xc2, 0x04, 0x04, 0xd4, 0x70, 0xe7, 0x9a, 0x7a, 0x1f, 0x24, 0x6e, 0x3e, 0xec, 0xdc, 0xc7, 0x5f, 0x08, 0x53, 0x29, 0xf8, 0xf1, 0x7b, 0x81, 0xd1, 0x30, 0x30, 0x0f, 0xc3, 0xb9, 0xf0, 0x93, 0xa2 } -, - /* Seed */ - 198, - { 0x81, 0xcd, 0x64, 0xc8, 0x4d, 0x77, 0x65, 0xfc, 0x60, 0xe4, 0xde, 0x3b, 0xa9, 0xb4, 0xdd, 0x21, 0xdd, 0xfb, 0x74, 0xfe, 0x2d, 0xfb, 0x7c, 0xf6, 0x19, 0xdb, 0xa4, 0xcb, 0xcc, 0x17, 0x6e, 0xd9, 0x4e, 0x6f, 0x37, 0xed, 0x1a, 0x97, 0xe3, 0xbf, 0xd3, 0x63, 0x65, 0xd2, 0x64, 0x4d, 0x3b, 0x6e, 0xe6, 0xc7, 0x71, 0x09, 0xfa, 0x18, 0x41, 0x2e, 0xe7, 0xcd, 0xdd, 0x3b, 0xe8, 0xd4, 0xbd, 0xee, 0x94, 0xc0, 0x96, 0xf0, 0x72, 0xca, 0xb6, 0xf1, 0x88, 0x6e, 0x3a, 0x84, 0xa7, 0xfd, 0xb5, 0xaf, 0xf3, 0xdd, 0x83, 0xf7, 0xe5, 0xc5, 0xb4, 0x9b, 0xb1, 0xb3, 0x8f, 0x8f, 0xaa, 0x75, 0x25, 0x31, 0xd8, 0x9c, 0x88, 0x39, 0x3e, 0x9e, 0xb8, 0xf5, 0x7e, 0xdc, 0x5b, 0x9f, 0xe6, 0xed, 0x2b, 0xc9, 0x5d, 0x27, 0x2c, 0xa9, 0x95, 0xf7, 0xe2, 0x59, 0xb0, 0x08, 0x32, 0xd9, 0x8b, 0x87, 0x23, 0x12, 0xcb, 0xef, 0x8a, 0x04, 0x8f, 0x6e, 0xb7, 0x91, 0x97, 0x84, 0xae, 0xd3, 0xd3, 0x1e, 0xb4, 0xb1, 0x2f, 0xd8, 0x07, 0x60, 0xa1, 0x34, 0xc9, 0xd6, 0xc3, 0x34, 0xc2, 0xdd, 0x3d, 0xfd, 0xf4, 0x97, 0x5c, 0xf1, 0xb5, 0x1e, 0x87, 0x12, 0x2b, 0x97, 0x33, 0x33, 0x44, 0x96, 0x08, 0xff, 0xbb, 0x2c, 0xf3, 0x0a, 0x02, 0xbc, 0x46, 0xea, 0x24, 0x7b, 0x45, 0x39, 0xb1, 0x86, 0x07, 0xbd, 0x47, 0xd3, 0xcd, 0xf0, 0x87, 0x72, 0x14, 0xba } -, - /* Encryption */ - 256, - { 0x78, 0x6b, 0x3f, 0x59, 0x9d, 0x1b, 0x74, 0x3e, 0x23, 0x58, 0x26, 0x24, 0xfa, 0x2c, 0x94, 0xa3, 0x6f, 0xb6, 0xbd, 0x33, 0xfd, 0xdd, 0x57, 0x64, 0x08, 0xcc, 0x85, 0x4a, 0xd7, 0xcf, 0x66, 0x7f, 0x17, 0x38, 0x0a, 0xf2, 0x0b, 0x0b, 0x73, 0x0c, 0x6b, 0xe9, 0x8c, 0x01, 0x80, 0x76, 0xb9, 0xb5, 0x04, 0x1d, 0xaf, 0x2e, 0xeb, 0x02, 0x54, 0x69, 0x30, 0x0a, 0xa4, 0x36, 0x43, 0x35, 0xbe, 0x26, 0x7d, 0x33, 0xb0, 0x6b, 0x4a, 0x7a, 0x79, 0x7a, 0x3c, 0x0a, 0xa5, 0xfd, 0x3f, 0x91, 0x6a, 0x55, 0xdc, 0x27, 0x4c, 0x0a, 0x24, 0x87, 0xf1, 0x25, 0xf9, 0xda, 0x82, 0x59, 0x6f, 0x43, 0x4c, 0x7f, 0xba, 0xc7, 0xec, 0xe2, 0xef, 0x6c, 0x83, 0xe0, 0x34, 0x8b, 0xf4, 0xf2, 0xc0, 0x83, 0x05, 0x07, 0x55, 0xb5, 0x6a, 0x9c, 0x63, 0x47, 0xf3, 0x9c, 0x76, 0xb0, 0xe0, 0xee, 0xdc, 0x61, 0x54, 0x10, 0x25, 0xc2, 0x3a, 0xa1, 0x85, 0x5c, 0x0b, 0x22, 0xb4, 0x46, 0xfe, 0x1e, 0xc5, 0xf1, 0x11, 0x2c, 0x5a, 0x7f, 0xc2, 0x85, 0xef, 0xdc, 0x84, 0x20, 0xec, 0x01, 0xa3, 0xa7, 0xc3, 0x3f, 0x73, 0x5b, 0x45, 0x55, 0x09, 0x2a, 0x9e, 0x8d, 0xe1, 0x6f, 0x3f, 0x7d, 0x46, 0x9f, 0x88, 0xcd, 0x75, 0xc0, 0x1c, 0x7f, 0x2e, 0x7d, 0x54, 0x6a, 0x1b, 0x9e, 0x7f, 0x49, 0x84, 0xfa, 0x29, 0xa2, 0xcc, 0x80, 0xd3, 0x10, 0xf9, 0xd7, 0x81, 0x8d, 0xf6, 0xd9, 0xad, 0x6c, 0xc2, 0x05, 0x37, 0x4d, 0x52, 0xe8, 0xe1, 0x73, 0x90, 0xbd, 0xe7, 0x2f, 0x25, 0xb7, 0x12, 0xa4, 0x26, 0x9f, 0x23, 0xae, 0xb2, 0x41, 0xa6, 0x66, 0xe9, 0x64, 0x96, 0xcd, 0x84, 0xb8, 0x33, 0xfb, 0x53, 0xd0, 0x57, 0x1f, 0x7a, 0xc2, 0xd1, 0x96, 0x4b, 0x8f, 0x2a, 0x7e, 0x13, 0x33, 0x6d, 0x9a, 0x7e, 0x03, 0x04, 0x1d, 0xcf, 0xcb } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.7", - /* Message */ - 41, - { 0x5f, 0x2a, 0x5c, 0x7f, 0x93, 0xe7, 0x14, 0xee, 0xca, 0xb3, 0xa5, 0x5a, 0x69, 0xc7, 0x9a, 0x3c, 0xbc, 0x15, 0xbd, 0x19, 0xdf, 0x27, 0x98, 0x9a, 0x9b, 0xab, 0x59, 0xfb, 0xbe, 0xa9, 0xff, 0xcc, 0x66, 0x3b, 0xf8, 0xe1, 0xe7, 0x40, 0x7d, 0xc2, 0x73 } -, - /* Seed */ - 212, - { 0xe0, 0x19, 0x60, 0x82, 0x6d, 0x1a, 0x69, 0xf6, 0x84, 0xc9, 0xc0, 0xb8, 0x5d, 0x84, 0xdc, 0xa5, 0x81, 0x1c, 0x89, 0xa2, 0xc0, 0x74, 0x2f, 0x33, 0xa2, 0xad, 0x19, 0x9f, 0xb6, 0x57, 0xa1, 0xaa, 0x98, 0x13, 0x60, 0x1d, 0x29, 0x93, 0x6a, 0x43, 0xd9, 0xb9, 0xeb, 0x4d, 0x32, 0x89, 0xcd, 0x7d, 0x37, 0x06, 0xab, 0x86, 0xb4, 0xd6, 0x6a, 0xda, 0xa7, 0xe0, 0xa1, 0x34, 0x51, 0xb2, 0xed, 0xb2, 0xbc, 0x77, 0x10, 0x91, 0x11, 0x0c, 0xda, 0xdd, 0x7e, 0xe2, 0xe6, 0xaa, 0xea, 0x2b, 0x35, 0xcf, 0xae, 0x4c, 0xe3, 0xb1, 0xda, 0x18, 0x16, 0x68, 0x4c, 0x89, 0xc0, 0xb3, 0xfb, 0x2f, 0x87, 0x79, 0xb2, 0x5c, 0xe0, 0xc1, 0x2d, 0x42, 0xb1, 0xd3, 0xd3, 0x0b, 0x8f, 0x20, 0xbe, 0xb8, 0x99, 0x91, 0x6e, 0x4f, 0xd0, 0xa1, 0x58, 0x86, 0x37, 0x19, 0x2e, 0x05, 0x28, 0xce, 0x6e, 0xa5, 0x4c, 0x8e, 0xb7, 0x54, 0xfd, 0x7f, 0xf0, 0x03, 0x25, 0x81, 0xa9, 0x50, 0x59, 0x98, 0xe6, 0x9e, 0x14, 0xf0, 0x72, 0xbf, 0x95, 0xdf, 0xef, 0xf0, 0x14, 0xdf, 0x99, 0xed, 0x78, 0x53, 0xb9, 0x82, 0xe8, 0x89, 0x41, 0x29, 0xa1, 0xd2, 0x7c, 0x53, 0xea, 0xaa, 0x23, 0x4c, 0x8d, 0x14, 0xa7, 0xff, 0xc5, 0xf5, 0xe2, 0x18, 0x7c, 0xef, 0x79, 0xeb, 0xf5, 0x2b, 0x3d, 0x6c, 0x06, 0x65, 0x89, 0x5b, 0xfb, 0x87, 0xe4, 0xbd, 0x61, 0x0e, 0x35, 0x8f, 0x35, 0x26, 0xda, 0x05, 0x92, 0xc9, 0xe5, 0x02, 0xb7, 0x2b, 0x76, 0xe4, 0x65, 0x66 } -, - /* Encryption */ - 256, - { 0x77, 0xd9, 0x07, 0x18, 0x1c, 0xc3, 0xb1, 0xbb, 0x19, 0x81, 0xe8, 0xcb, 0x22, 0xf7, 0xad, 0x75, 0xf8, 0x82, 0xe2, 0x6a, 0xfd, 0x28, 0x1b, 0x64, 0xdb, 0x70, 0xc8, 0x4c, 0x6a, 0x50, 0xfe, 0x74, 0x24, 0x9e, 0x22, 0xfb, 0xee, 0x90, 0xe3, 0x0d, 0x0b, 0x70, 0xae, 0x2f, 0x7e, 0x12, 0xac, 0xdd, 0xf6, 0x78, 0xf0, 0x0d, 0x22, 0x7e, 0x53, 0x61, 0x54, 0x26, 0x62, 0x43, 0x02, 0x69, 0xfe, 0xea, 0x34, 0x12, 0x47, 0x92, 0xaf, 0xb3, 0xf8, 0x7b, 0x30, 0xf9, 0x50, 0xf4, 0xed, 0xf2, 0x2c, 0x44, 0x04, 0xc9, 0x68, 0x8d, 0xec, 0x38, 0xea, 0x0b, 0x99, 0xcb, 0x3d, 0xc3, 0x84, 0xbd, 0x88, 0xfa, 0x31, 0x83, 0xd7, 0xe0, 0x7a, 0x20, 0x54, 0xd7, 0x3e, 0xa5, 0x1d, 0x42, 0x86, 0xbb, 0x39, 0xda, 0xe3, 0xae, 0x6d, 0x0b, 0x96, 0x51, 0xf1, 0xea, 0x48, 0x8f, 0x80, 0x5f, 0x2a, 0x21, 0x6e, 0xa2, 0x1a, 0x56, 0x76, 0xb9, 0x7d, 0x1b, 0x11, 0xd3, 0xb4, 0x03, 0x6c, 0xe1, 0x67, 0xfe, 0xf6, 0x4e, 0x0e, 0xba, 0x41, 0x9a, 0xf6, 0x73, 0x98, 0x3f, 0xc6, 0xee, 0x01, 0xc6, 0x37, 0xb1, 0x64, 0xe5, 0xaa, 0xac, 0xc9, 0x9a, 0xde, 0xe9, 0xf4, 0x7d, 0x21, 0x92, 0x54, 0x69, 0x6c, 0x8f, 0xce, 0xec, 0x6c, 0x74, 0xac, 0x4e, 0x39, 0x05, 0x1e, 0x15, 0x26, 0x94, 0x01, 0x73, 0x82, 0x64, 0xf0, 0xca, 0x5b, 0xf1, 0x22, 0xc5, 0x5c, 0x9e, 0x5d, 0xd8, 0x47, 0xb1, 0xd5, 0x77, 0x4e, 0x74, 0x08, 0xc3, 0x68, 0x4a, 0xa9, 0x74, 0xb0, 0xba, 0xaf, 0x40, 0xed, 0xc2, 0x2a, 0x03, 0x57, 0xaf, 0x72, 0xc8, 0x16, 0xcf, 0x73, 0x1f, 0xcb, 0x63, 0x96, 0x53, 0x60, 0x69, 0x9f, 0x26, 0x99, 0x97, 0xb8, 0x48, 0x0f, 0x30, 0xa6, 0xb5, 0xd5, 0x7e, 0x12, 0xa5, 0xcc, 0x54, 0xec, 0x0c, 0x80, 0x5f, 0xdc, 0xf6 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.8", - /* Message */ - 9, - { 0x55, 0x61, 0x39, 0x59, 0x3e, 0xee, 0x8b, 0x6e, 0x87 } -, - /* Seed */ - 244, - { 0x2d, 0xe2, 0xa5, 0x72, 0x24, 0xf5, 0xf5, 0xb1, 0x2e, 0x22, 0x3e, 0xb5, 0xf8, 0x2b, 0x9f, 0x47, 0x24, 0x9d, 0x25, 0x55, 0x93, 0x79, 0x13, 0x6e, 0xaf, 0x18, 0xe2, 0xf6, 0xc8, 0x33, 0xe3, 0xf0, 0x1b, 0xde, 0xea, 0x9c, 0x30, 0x3b, 0xd9, 0x67, 0x7c, 0x2a, 0x85, 0x71, 0x7d, 0x59, 0x3a, 0x28, 0x02, 0xae, 0xcb, 0xc6, 0xb3, 0xb7, 0x1f, 0x2c, 0x79, 0x03, 0xff, 0x69, 0x0e, 0x3f, 0x3c, 0x49, 0x57, 0xdd, 0x74, 0xcc, 0x9c, 0x2a, 0x68, 0xdc, 0x1d, 0x31, 0x9c, 0x1e, 0x17, 0x87, 0xbb, 0xb7, 0xf0, 0xe6, 0xe5, 0x1e, 0x39, 0xa5, 0xba, 0xdb, 0xba, 0x9f, 0xd4, 0x67, 0x66, 0x19, 0x74, 0x31, 0x2b, 0x55, 0x7a, 0xf1, 0x89, 0x52, 0x54, 0x9f, 0x6e, 0xba, 0x9d, 0xf4, 0x9f, 0x70, 0xea, 0xb3, 0x68, 0x9f, 0x9f, 0xa8, 0xfb, 0xea, 0x1c, 0x97, 0xe1, 0xbb, 0x2f, 0x09, 0x3e, 0x6a, 0xca, 0x9c, 0x38, 0x0e, 0xdc, 0x54, 0x6a, 0x19, 0xc4, 0x4f, 0x91, 0xf6, 0xdc, 0xaa, 0x28, 0x9b, 0xd1, 0x14, 0xfe, 0xa1, 0xb0, 0x36, 0xf9, 0x9b, 0x1a, 0x57, 0xf8, 0x61, 0x43, 0xd8, 0x67, 0x5b, 0xd0, 0x7d, 0x4d, 0xea, 0xbc, 0x9d, 0x51, 0x0c, 0x61, 0x70, 0x99, 0x44, 0x9c, 0xcc, 0xed, 0x5c, 0x45, 0x07, 0xb7, 0x9e, 0x85, 0x1e, 0xfe, 0xb1, 0x8d, 0x06, 0xb1, 0x99, 0x81, 0x0b, 0xb6, 0xb3, 0xcb, 0xe4, 0x12, 0x73, 0xba, 0xa7, 0x35, 0x16, 0x02, 0xe5, 0xf9, 0x52, 0x13, 0xf9, 0x69, 0x55, 0xad, 0x5f, 0xdd, 0x3a, 0x20, 0x52, 0xdb, 0xc7, 0x5f, 0xcf, 0x60, 0xaa, 0x22, 0x47, 0xf2, 0xd4, 0xe6, 0x03, 0xda, 0x45, 0x37, 0x0d, 0xe1, 0xc1, 0xda, 0x68, 0x7e, 0x26, 0x8e, 0xe4, 0x46, 0x67, 0xf9, 0x4d, 0xad, 0x13, 0xbc, 0x9b } -, - /* Encryption */ - 256, - { 0x4a, 0xce, 0x54, 0xa7, 0x52, 0xf5, 0x56, 0xe3, 0x6e, 0xab, 0xb1, 0x19, 0x48, 0x95, 0x84, 0x12, 0x14, 0x0c, 0x80, 0xc3, 0x1b, 0x61, 0xdc, 0x40, 0xf8, 0x1a, 0x6b, 0x12, 0x17, 0xa0, 0x1c, 0xe0, 0x67, 0xab, 0x37, 0xf5, 0x3d, 0xf4, 0xc7, 0x7d, 0x9e, 0xa9, 0xc2, 0xd7, 0x95, 0x0c, 0x8c, 0xd4, 0x97, 0x00, 0xb8, 0xcd, 0x24, 0xd4, 0xe7, 0x8f, 0x7f, 0xa3, 0x46, 0x29, 0x62, 0xcb, 0xfd, 0xe6, 0xd0, 0x2f, 0xb0, 0xe5, 0x03, 0x65, 0x64, 0x93, 0x25, 0x05, 0xae, 0x1c, 0x85, 0x1a, 0xa6, 0xd1, 0xd8, 0x4e, 0xfd, 0x04, 0xd5, 0x78, 0xad, 0x68, 0x27, 0x3a, 0x36, 0xa8, 0xae, 0x23, 0xd1, 0x45, 0x2f, 0x94, 0xa9, 0x37, 0x88, 0x17, 0x71, 0x3e, 0x76, 0x4a, 0x09, 0x17, 0x45, 0x26, 0x29, 0xb5, 0xdc, 0x75, 0xb5, 0x7b, 0x0d, 0x5e, 0x6a, 0x72, 0x8c, 0x83, 0x69, 0x11, 0x72, 0xd2, 0xcd, 0x95, 0xf8, 0xba, 0xd0, 0x7d, 0xb4, 0x68, 0xeb, 0xf5, 0x45, 0xb7, 0xf3, 0xf2, 0xc8, 0x63, 0xb6, 0xe2, 0x0c, 0x67, 0xc4, 0x76, 0x9d, 0xed, 0x03, 0x91, 0xa3, 0x36, 0xf3, 0xa5, 0xd8, 0x7e, 0x24, 0xfc, 0xf9, 0x1a, 0xaf, 0x77, 0x4b, 0xee, 0x77, 0xa7, 0x89, 0xa5, 0x90, 0x80, 0x09, 0xc7, 0xa5, 0x5e, 0xac, 0x92, 0xaf, 0x4c, 0x3d, 0x46, 0x1e, 0x7b, 0x40, 0x61, 0x6c, 0xe8, 0x06, 0x19, 0x4b, 0xfc, 0x20, 0x74, 0xc3, 0xf4, 0xf1, 0x35, 0x59, 0x70, 0x0b, 0x27, 0x08, 0xa0, 0xb7, 0x55, 0x78, 0x96, 0x70, 0xa3, 0x62, 0x6a, 0x14, 0x63, 0x88, 0x11, 0xbb, 0x18, 0xe1, 0x5b, 0x10, 0x25, 0xc3, 0xb9, 0xbe, 0xf1, 0x11, 0x17, 0x6b, 0xc1, 0xf2, 0x46, 0x9e, 0xa9, 0x9a, 0xad, 0x20, 0x86, 0x05, 0x73, 0xd6, 0xc6, 0xa1, 0xfe, 0x40, 0xdb, 0x51, 0xe3, 0x6f, 0xe3, 0x38, 0x00, 0x10, 0x1b, 0xda, 0x20 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.9", - /* Message */ - 49, - { 0x9a, 0x13, 0x96, 0x62, 0x2d, 0x06, 0x6c, 0x10, 0x56, 0x08, 0x58, 0xc2, 0xc4, 0xcd, 0x5c, 0x04, 0x44, 0x9e, 0x2b, 0x95, 0x50, 0xc5, 0xbc, 0x92, 0x93, 0x76, 0x1a, 0x91, 0x04, 0x41, 0x1d, 0xa1, 0x8a, 0x57, 0xd9, 0xb6, 0xa9, 0x97, 0x33, 0x3c, 0xdb, 0xce, 0x77, 0xe9, 0xfd, 0xbe, 0x6b, 0xb8, 0x31 } -, - /* Seed */ - 204, - { 0xf1, 0x78, 0x61, 0xac, 0xff, 0xb2, 0x4c, 0xac, 0xed, 0x90, 0xba, 0x38, 0xaa, 0x7e, 0xa0, 0xf2, 0xe5, 0x4e, 0xea, 0xa6, 0x2a, 0xe6, 0x64, 0x98, 0xf3, 0xc2, 0x8f, 0x99, 0x6b, 0xce, 0xe2, 0x53, 0xbe, 0xe8, 0x19, 0x9e, 0x3e, 0xb8, 0x0d, 0x62, 0x7f, 0xee, 0xb6, 0xe0, 0xb3, 0x94, 0x90, 0xed, 0xf7, 0x6d, 0x16, 0xa2, 0xa0, 0xbc, 0x20, 0x09, 0x32, 0x52, 0xa9, 0xd7, 0xf1, 0xf9, 0x38, 0x8b, 0x06, 0x19, 0x44, 0x85, 0x2a, 0xfb, 0xe7, 0x3c, 0xe4, 0x13, 0xa3, 0xfc, 0xa5, 0x21, 0xb9, 0x47, 0x4e, 0x67, 0x81, 0x29, 0x46, 0x4d, 0x91, 0xb8, 0x2b, 0xca, 0xa5, 0x9f, 0x56, 0xec, 0xfb, 0x12, 0x4f, 0x61, 0xf5, 0x04, 0x67, 0x13, 0x01, 0x05, 0xb2, 0xcb, 0xc6, 0x94, 0x3b, 0x95, 0x36, 0x95, 0xcf, 0xcd, 0x20, 0xc9, 0xb6, 0xef, 0x53, 0xf3, 0xf2, 0x10, 0x33, 0x1d, 0x39, 0x32, 0xdc, 0x01, 0x0c, 0x73, 0x59, 0x29, 0x09, 0x6b, 0x2e, 0x68, 0xff, 0x16, 0x66, 0x4b, 0x0b, 0x90, 0xa0, 0xfa, 0x1b, 0xe4, 0x60, 0x57, 0x85, 0x92, 0xb0, 0xcb, 0x4d, 0x6c, 0xa4, 0x5e, 0xa0, 0x6b, 0xde, 0x3e, 0x8a, 0x1e, 0xbf, 0xef, 0x70, 0xd8, 0x3e, 0xf7, 0x9b, 0x3a, 0x74, 0xdb, 0x06, 0x0f, 0xc0, 0x20, 0x3b, 0x74, 0x80, 0x7f, 0x40, 0x70, 0x01, 0xf4, 0xb4, 0xd9, 0x9e, 0xc5, 0x15, 0x8e, 0x8e, 0x7e, 0x4b, 0x10, 0x2a, 0x51, 0x5d, 0xe9, 0x5d, 0x2b, 0x70, 0xfe, 0x1f, 0xb4 } -, - /* Encryption */ - 256, - { 0x10, 0x0e, 0xce, 0x63, 0x45, 0x25, 0xd4, 0x67, 0xf6, 0xd4, 0xa6, 0xb6, 0x6e, 0xde, 0x1c, 0xc2, 0x37, 0xf6, 0x1f, 0xb2, 0xb6, 0x70, 0x23, 0xa8, 0x3d, 0xc4, 0x56, 0xb9, 0x2c, 0xda, 0x18, 0x3e, 0xd6, 0x62, 0x0f, 0xe5, 0x7d, 0x5a, 0x67, 0x33, 0x2c, 0x77, 0x23, 0x3a, 0xc1, 0xe8, 0x72, 0x5b, 0x36, 0xf8, 0xe1, 0xb1, 0x08, 0x41, 0x2c, 0xa6, 0xfb, 0x35, 0xdc, 0xd4, 0xd8, 0x16, 0x77, 0xa2, 0xb3, 0x0d, 0x5e, 0xaf, 0x25, 0xe0, 0xb9, 0x19, 0x1b, 0x38, 0xf7, 0xee, 0xf8, 0x3f, 0x91, 0x21, 0xa8, 0x08, 0x43, 0x8c, 0x92, 0xab, 0x03, 0xf5, 0x20, 0x80, 0x7b, 0xc9, 0xa8, 0x94, 0x70, 0x5e, 0xaf, 0x4e, 0xed, 0x06, 0x68, 0x23, 0xa6, 0x7a, 0xa2, 0xa5, 0x59, 0x9c, 0xd9, 0x5e, 0x58, 0xda, 0x7c, 0x09, 0x48, 0x36, 0xd2, 0xaf, 0xeb, 0xa3, 0x9d, 0xd0, 0x09, 0xa6, 0x4a, 0xde, 0x03, 0x05, 0x33, 0x76, 0xf0, 0x29, 0x36, 0xcf, 0x3f, 0x56, 0xbf, 0x64, 0xc1, 0xf3, 0xbd, 0xc0, 0x7c, 0x45, 0xa9, 0x5b, 0x9f, 0xcd, 0x93, 0x96, 0xcd, 0x9a, 0x8d, 0x41, 0xbc, 0xc5, 0x64, 0x24, 0x93, 0x7a, 0x13, 0x71, 0xb3, 0x84, 0x7c, 0x90, 0x5b, 0x9a, 0xb5, 0x84, 0x02, 0x39, 0x3d, 0x40, 0x46, 0xe4, 0xa0, 0x15, 0xc1, 0x47, 0x08, 0xf7, 0x4c, 0xe7, 0x79, 0x0e, 0xba, 0x8a, 0xf7, 0x92, 0x07, 0x24, 0x40, 0xbc, 0xaf, 0xb1, 0x4c, 0x0f, 0x81, 0x08, 0x97, 0x11, 0x87, 0xc8, 0x0f, 0x46, 0x3a, 0x1f, 0xff, 0x25, 0x86, 0x46, 0xea, 0x16, 0xe5, 0x1c, 0x6e, 0xe3, 0x61, 0xb6, 0x61, 0xa1, 0x4f, 0x07, 0xcd, 0x4f, 0x5a, 0x82, 0xc7, 0x09, 0xf4, 0x94, 0xf1, 0xdf, 0x0f, 0x80, 0x3b, 0x6f, 0x64, 0xa7, 0x2f, 0xb9, 0xc4, 0x50, 0xff, 0xe2, 0x68, 0xfc, 0xab, 0x48, 0x7d, 0x4d, 0x63, 0x01, 0x3e, 0x41 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.10", - /* Message */ - 53, - { 0xb3, 0x82, 0x4f, 0xb5, 0x45, 0xa8, 0x3f, 0x82, 0xef, 0x82, 0x23, 0x11, 0x82, 0x84, 0xc5, 0x45, 0x6b, 0xab, 0x60, 0x0a, 0xdf, 0x79, 0xf5, 0x07, 0x33, 0xb6, 0x66, 0x8f, 0xbc, 0x51, 0x5d, 0xa5, 0x96, 0x31, 0x62, 0xa6, 0xd7, 0xd7, 0xe9, 0x6f, 0xf9, 0x1a, 0xff, 0x12, 0xeb, 0x3e, 0x93, 0x11, 0xe2, 0x21, 0xe7, 0x0b, 0xc0 } -, - /* Seed */ - 200, - { 0xb8, 0x26, 0x8e, 0x4b, 0xce, 0x7e, 0x53, 0xf2, 0xe8, 0xbe, 0x98, 0xb1, 0x92, 0xd6, 0x3a, 0xd0, 0x65, 0x44, 0xa8, 0x0d, 0x6e, 0x62, 0xd6, 0x32, 0x48, 0x6e, 0x15, 0xe5, 0x75, 0xba, 0x70, 0x6e, 0x3e, 0x76, 0x89, 0x30, 0xdc, 0x8e, 0x41, 0x1f, 0x8e, 0xeb, 0x0b, 0x6e, 0x8f, 0x06, 0x06, 0x29, 0xda, 0x8a, 0x24, 0x23, 0x68, 0xe4, 0x79, 0xcc, 0xb3, 0x31, 0x69, 0x70, 0x70, 0xb4, 0xb3, 0x52, 0x4e, 0x69, 0x16, 0x92, 0x76, 0xba, 0xb0, 0xa9, 0x45, 0x14, 0xcc, 0xd6, 0x60, 0x70, 0x25, 0x28, 0xed, 0x20, 0xb5, 0xd1, 0xdf, 0x07, 0x77, 0x9a, 0x62, 0xc6, 0x56, 0x86, 0xe7, 0xd6, 0x68, 0x46, 0x6f, 0xfc, 0x74, 0x8e, 0xb3, 0x43, 0x44, 0xca, 0x6f, 0x30, 0x5c, 0xda, 0x3d, 0xc3, 0xe8, 0xf0, 0x1c, 0x43, 0xea, 0x91, 0x79, 0xda, 0x46, 0x21, 0x47, 0xf4, 0xd3, 0xec, 0x92, 0xf8, 0x88, 0xb7, 0xee, 0xaa, 0x41, 0x0e, 0x12, 0xc8, 0x6d, 0x89, 0x42, 0xc7, 0xd0, 0x12, 0xf4, 0x5c, 0x61, 0xff, 0xa6, 0xe2, 0xb7, 0x8f, 0x84, 0x3e, 0x9a, 0x75, 0xd9, 0x67, 0x32, 0x14, 0xd5, 0x58, 0xca, 0xf0, 0x1b, 0x45, 0xf9, 0x36, 0x86, 0xee, 0xda, 0x54, 0x79, 0xdb, 0x80, 0x52, 0x79, 0x25, 0x59, 0xcc, 0x23, 0x6a, 0x4a, 0x1e, 0xe6, 0x5d, 0x3c, 0xa6, 0x0e, 0x09, 0xa3, 0xc1, 0x84, 0xd4, 0xb3, 0x95, 0xd7, 0x0b, 0x8e, 0xf8, 0x8d, 0x78, 0x09, 0x1a } -, - /* Encryption */ - 256, - { 0xc0, 0xe9, 0x8d, 0x50, 0x89, 0x4a, 0xda, 0x84, 0x9f, 0xce, 0x89, 0x83, 0xf6, 0xf8, 0x95, 0x74, 0x03, 0x4d, 0x6c, 0xf3, 0xb8, 0x35, 0x2b, 0xfc, 0x50, 0x72, 0x4a, 0x70, 0x3d, 0xd4, 0xf4, 0x2f, 0x40, 0x06, 0xae, 0x00, 0x8a, 0xd9, 0x72, 0x33, 0xce, 0xf6, 0xf1, 0x6c, 0xe1, 0xb4, 0x23, 0xf5, 0x2c, 0x6b, 0x67, 0x7e, 0xf0, 0x05, 0x13, 0x1b, 0xa9, 0x87, 0xf9, 0x8c, 0x72, 0x2f, 0xaa, 0x49, 0x42, 0xec, 0xce, 0x2c, 0x99, 0x66, 0x37, 0x40, 0xa1, 0xa1, 0xe9, 0x81, 0x20, 0xfa, 0xed, 0x97, 0xfd, 0x03, 0xff, 0x36, 0xfe, 0x73, 0x75, 0x8e, 0x70, 0xdf, 0x17, 0xf3, 0x1f, 0x1f, 0x39, 0x41, 0x81, 0x2d, 0x34, 0xca, 0xe6, 0xc3, 0x9d, 0xe7, 0x87, 0xef, 0x57, 0x04, 0xbc, 0x39, 0xc9, 0x20, 0xea, 0x5b, 0x0e, 0xb1, 0x83, 0x3e, 0x83, 0xb4, 0x57, 0x94, 0xfd, 0xe0, 0xff, 0x00, 0x05, 0xc6, 0x27, 0x33, 0xc7, 0x0a, 0x29, 0x6c, 0xa0, 0xbd, 0x47, 0xf0, 0x65, 0x50, 0x3d, 0xdc, 0xe2, 0xd6, 0x49, 0xde, 0x1c, 0x32, 0x8d, 0xdf, 0x60, 0x32, 0xa3, 0x3f, 0xad, 0x46, 0xba, 0x04, 0x1d, 0xc0, 0xa9, 0x94, 0xbf, 0x0f, 0x56, 0xa4, 0x65, 0xf1, 0x62, 0x5f, 0xcb, 0x81, 0xce, 0x01, 0xfa, 0x29, 0x9f, 0xc2, 0xb3, 0xc8, 0x09, 0x39, 0xeb, 0xe6, 0xa6, 0x73, 0x82, 0x6e, 0x2b, 0x2f, 0x12, 0xec, 0xdd, 0xa5, 0x03, 0x5c, 0x95, 0x09, 0x31, 0x2d, 0xd1, 0x9f, 0x10, 0xc3, 0x5c, 0x8a, 0x8b, 0x0d, 0xa6, 0x3c, 0x08, 0x51, 0x97, 0x00, 0x6a, 0x9b, 0xe2, 0x36, 0x10, 0x8e, 0xb9, 0x87, 0x91, 0xb2, 0x6e, 0x28, 0x08, 0xb5, 0xcc, 0xd5, 0xac, 0xec, 0x73, 0x8b, 0xca, 0x02, 0x5b, 0x24, 0x18, 0x2e, 0xf4, 0xab, 0x9c, 0xcc, 0xb1, 0x71, 0xa6, 0x9f, 0xb4, 0x23, 0xa4, 0x6e, 0x03, 0x7a, 0x4d, 0x0a } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.11", - /* Message */ - 43, - { 0xa3, 0xa7, 0xda, 0x1b, 0xed, 0xb2, 0xca, 0x99, 0xfc, 0xde, 0xb7, 0xa4, 0x6d, 0x63, 0x3e, 0xca, 0x35, 0x06, 0x2d, 0xf2, 0x89, 0x6b, 0x69, 0x59, 0x07, 0xa7, 0xf9, 0x71, 0xd2, 0xcc, 0x50, 0xb6, 0xe3, 0xd2, 0xa3, 0x67, 0xd1, 0x6e, 0x72, 0x7f, 0x56, 0x97, 0xc0 } -, - /* Seed */ - 210, - { 0xf0, 0x18, 0xa9, 0xb1, 0x3f, 0xbe, 0x56, 0x0b, 0xfe, 0x95, 0x52, 0xed, 0x8a, 0x86, 0x06, 0xbe, 0xea, 0x90, 0x05, 0x5e, 0xd3, 0xf6, 0x2b, 0xb2, 0xaf, 0x07, 0xf6, 0x92, 0xcb, 0x60, 0xac, 0xfb, 0x6d, 0x59, 0x07, 0xd6, 0x0e, 0x0a, 0x59, 0x7a, 0x54, 0xca, 0xea, 0xf8, 0x44, 0x91, 0x1c, 0xdc, 0x87, 0x4f, 0xaf, 0x95, 0x69, 0x53, 0xa2, 0x7d, 0x30, 0x0e, 0x9b, 0x71, 0x5b, 0x10, 0x4d, 0xf3, 0xc2, 0x32, 0xc3, 0xc9, 0x63, 0x82, 0xcf, 0x5b, 0x5f, 0x3d, 0x07, 0xb2, 0x30, 0xb5, 0x25, 0xbb, 0x33, 0x0e, 0x31, 0x9d, 0x1a, 0x7c, 0x82, 0xd1, 0x53, 0xaf, 0x81, 0x7e, 0xf1, 0x1c, 0xf7, 0x2e, 0x76, 0xdd, 0x50, 0xb0, 0xd7, 0xe5, 0x56, 0x22, 0x65, 0xc8, 0x34, 0x5d, 0xa8, 0x29, 0xf5, 0x60, 0xd6, 0xa5, 0x4e, 0x6f, 0x1e, 0x28, 0x8a, 0x3d, 0xc2, 0x17, 0x6d, 0x19, 0xa6, 0x8a, 0x0b, 0x1c, 0x5c, 0x92, 0xb1, 0x6b, 0x8b, 0xb2, 0x9e, 0x4d, 0x01, 0xdf, 0xbd, 0x0b, 0x18, 0x07, 0x9b, 0xd4, 0x0c, 0xfc, 0xd5, 0x23, 0x35, 0xb3, 0xa1, 0x8b, 0xc4, 0xee, 0x92, 0x44, 0x76, 0x0e, 0xb4, 0x94, 0xf5, 0xbe, 0x5b, 0x19, 0x71, 0x88, 0x6c, 0xa2, 0xbe, 0xec, 0xe0, 0xa3, 0x94, 0x4f, 0xff, 0x8b, 0xe6, 0xb4, 0x2d, 0x96, 0xe1, 0xc2, 0xc7, 0x2e, 0x4e, 0x90, 0xf8, 0x7e, 0xd1, 0x36, 0x15, 0x46, 0x7c, 0xfc, 0x91, 0xc2, 0x6e, 0xb3, 0x8a, 0x7a, 0xf9, 0xf5, 0x66, 0x86, 0x93, 0x1a, 0x47, 0x26, 0xda, 0x04 } -, - /* Encryption */ - 256, - { 0x25, 0x17, 0x7b, 0xfe, 0x12, 0x61, 0x9b, 0x44, 0xf4, 0xa4, 0xfe, 0x7c, 0xb7, 0x6d, 0xe9, 0x3d, 0x4e, 0xd4, 0xa0, 0x5a, 0x31, 0xe5, 0xbe, 0x8c, 0xc4, 0xe5, 0x60, 0x66, 0x1d, 0xe9, 0xa3, 0x4a, 0xe3, 0x17, 0xcc, 0x02, 0xff, 0x63, 0x10, 0x67, 0x08, 0x32, 0x8b, 0xd3, 0xf7, 0x87, 0x63, 0xab, 0x3e, 0x57, 0x65, 0x2c, 0x63, 0xf1, 0x05, 0xf7, 0x97, 0x1d, 0x2d, 0x8d, 0x70, 0x1e, 0x62, 0x97, 0xa7, 0x9c, 0x78, 0x7b, 0x7c, 0xcd, 0x62, 0xa5, 0x3b, 0x39, 0xd9, 0xc0, 0x39, 0x46, 0xe6, 0x6f, 0x48, 0x8a, 0x92, 0xe8, 0xe1, 0x7d, 0xc6, 0xec, 0xb0, 0xf6, 0x5b, 0xf0, 0x1e, 0x3a, 0xff, 0xee, 0x99, 0x76, 0x87, 0x31, 0x1b, 0xe0, 0xe9, 0x45, 0xad, 0xd6, 0x3f, 0xa3, 0xf4, 0x00, 0x38, 0x2c, 0xb8, 0xff, 0xd8, 0x91, 0x57, 0x54, 0x01, 0x8c, 0xc7, 0x5e, 0x82, 0x82, 0x26, 0xb5, 0x03, 0x9c, 0xd9, 0xc5, 0x7f, 0xc6, 0xd9, 0x9c, 0xbe, 0x8e, 0xa4, 0xa3, 0xd2, 0x9c, 0xbd, 0x09, 0xd5, 0x4d, 0x95, 0xcc, 0x07, 0x34, 0xc2, 0x35, 0x44, 0xf8, 0xe1, 0xfb, 0xc7, 0x49, 0x3e, 0x06, 0xd1, 0x6c, 0x0a, 0x0a, 0xc1, 0x53, 0x0d, 0x21, 0xf0, 0x33, 0x7e, 0x26, 0x2f, 0xd9, 0xd2, 0x7f, 0xcc, 0x4a, 0xfe, 0xb5, 0x74, 0xd6, 0x68, 0x66, 0xd4, 0xca, 0x84, 0xcf, 0xd6, 0xe0, 0xaf, 0x2b, 0xb9, 0x77, 0xa5, 0xd9, 0x9a, 0x5b, 0x0b, 0x37, 0x44, 0x04, 0x2d, 0x33, 0x2b, 0x93, 0x6b, 0xbd, 0xd8, 0x69, 0xe5, 0xf2, 0xc8, 0x83, 0xb4, 0x00, 0xac, 0x8b, 0xc0, 0x68, 0x3e, 0x67, 0x90, 0x63, 0x42, 0x9d, 0x98, 0xd4, 0x94, 0xf3, 0x18, 0x04, 0xd6, 0x5b, 0xb3, 0xc9, 0x74, 0xaa, 0x72, 0xe6, 0x65, 0x7d, 0x4c, 0x16, 0x38, 0xc6, 0x79, 0xc8, 0x1a, 0x16, 0x45, 0x3f, 0x6b, 0x0b, 0xaa, 0x3f, 0x05, 0x17 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.12", - /* Message */ - 28, - { 0x49, 0xf6, 0xf8, 0xa4, 0xa8, 0x6a, 0x8a, 0xa0, 0x97, 0x63, 0xaa, 0xc8, 0x55, 0x72, 0xb0, 0xe7, 0xee, 0x77, 0x6a, 0xef, 0xf8, 0xa8, 0x29, 0x00, 0x07, 0x76, 0xff, 0xa6 } -, - /* Seed */ - 225, - { 0x6d, 0xb6, 0xa8, 0x27, 0xac, 0x2a, 0x5e, 0x06, 0x16, 0xc0, 0xf4, 0x43, 0xb2, 0x34, 0x58, 0xe1, 0x75, 0xac, 0xf9, 0xa3, 0xb2, 0x55, 0xf5, 0xc8, 0x52, 0x5e, 0x72, 0x53, 0x42, 0x4f, 0xaa, 0x91, 0x38, 0x05, 0x4c, 0x3d, 0xba, 0xa4, 0x71, 0xf2, 0x7f, 0xe8, 0x55, 0xc1, 0xc0, 0xce, 0xc3, 0x62, 0x59, 0x7a, 0x1a, 0x1e, 0x6e, 0xb4, 0xf2, 0x98, 0xac, 0x3e, 0xb7, 0x34, 0xd3, 0x1f, 0xf0, 0xef, 0x10, 0x08, 0xc0, 0xe0, 0x2b, 0x9b, 0x06, 0xe2, 0x93, 0x15, 0xfc, 0x09, 0x4a, 0x7e, 0xd2, 0x6b, 0x11, 0xea, 0x55, 0x27, 0x0a, 0x3d, 0xcb, 0x67, 0x06, 0xf4, 0x6a, 0x94, 0x50, 0xbf, 0x83, 0x12, 0x88, 0x10, 0x65, 0x13, 0x02, 0x48, 0xd2, 0x64, 0x47, 0x66, 0xa7, 0x99, 0x66, 0xef, 0xda, 0xdb, 0xaa, 0xf5, 0x75, 0xef, 0x4d, 0xd3, 0x5a, 0x93, 0x7f, 0xf0, 0xbf, 0xbf, 0x3d, 0x95, 0x61, 0xc7, 0x54, 0x40, 0x9b, 0xe7, 0xb8, 0x84, 0x7a, 0x60, 0x8d, 0x79, 0x1f, 0xb9, 0x87, 0xee, 0xd4, 0x6a, 0xfe, 0xb0, 0xdb, 0x1c, 0xa9, 0x75, 0xc0, 0x5f, 0x61, 0x57, 0x0d, 0xd0, 0x70, 0x98, 0x5f, 0x13, 0xe4, 0xe0, 0xed, 0x7a, 0x8c, 0xb3, 0x91, 0xce, 0x4d, 0x42, 0x08, 0x32, 0xb4, 0x5a, 0x8b, 0x7e, 0x9f, 0x90, 0x88, 0x4e, 0x61, 0x18, 0x98, 0xf4, 0x72, 0xa0, 0xac, 0x46, 0xc5, 0x7a, 0xa7, 0xf8, 0x46, 0x8a, 0xa1, 0x9d, 0x9c, 0x7b, 0x31, 0x2f, 0x13, 0x43, 0x22, 0x99, 0x03, 0x93, 0x88, 0x1d, 0x32, 0xaa, 0x14, 0x68, 0xf6, 0xe5, 0xf8, 0xeb, 0x85, 0xa2, 0xc3, 0xc2, 0xda, 0xed, 0x92, 0xb9, 0x3c } -, - /* Encryption */ - 256, - { 0x0f, 0xf9, 0x5f, 0x4a, 0x2a, 0x07, 0x18, 0xd6, 0x73, 0xf9, 0x20, 0x2c, 0x80, 0x9f, 0x10, 0x45, 0x10, 0x1f, 0x52, 0xb9, 0xdb, 0xa7, 0x72, 0x88, 0xfe, 0x28, 0x8c, 0xb2, 0x77, 0xc4, 0xdb, 0xaa, 0x35, 0xdb, 0x93, 0x27, 0xec, 0xee, 0xc3, 0x76, 0x5a, 0xe0, 0x33, 0xe0, 0xb6, 0xb7, 0x77, 0xb2, 0x2c, 0xa6, 0xbe, 0x66, 0x20, 0x03, 0xea, 0xfa, 0x2b, 0xfb, 0xda, 0x60, 0x6f, 0xd8, 0xce, 0xe7, 0xee, 0xe0, 0x6c, 0x6a, 0x00, 0xc9, 0x45, 0xa6, 0x55, 0x6c, 0x60, 0xb0, 0x08, 0x69, 0xf9, 0x99, 0x97, 0x1a, 0x8c, 0x57, 0xaf, 0xe1, 0xdd, 0xee, 0x7a, 0x75, 0x77, 0x04, 0x7a, 0x0d, 0xb9, 0x0f, 0x62, 0xcd, 0x24, 0x7a, 0x88, 0x7f, 0x32, 0x27, 0xef, 0x6d, 0xa9, 0x07, 0xa7, 0x5b, 0xcf, 0xf1, 0x9a, 0xa3, 0x0c, 0x90, 0x8f, 0x58, 0x35, 0xef, 0x10, 0x10, 0x0a, 0xdc, 0x7f, 0x6a, 0xd6, 0xfb, 0x31, 0x99, 0x79, 0x0b, 0x3f, 0x4d, 0x6a, 0xd1, 0x9a, 0x0d, 0xf5, 0x02, 0x7f, 0xdb, 0x8f, 0x84, 0x66, 0x04, 0xe0, 0x2d, 0xaf, 0x33, 0x55, 0xd9, 0x56, 0x40, 0x77, 0x79, 0xaf, 0x15, 0x5a, 0xcf, 0xa5, 0xa3, 0x2e, 0x6d, 0x61, 0x74, 0xdc, 0x90, 0x13, 0x1d, 0xbd, 0x7a, 0xbe, 0x58, 0x5d, 0xd7, 0x59, 0xfa, 0x3c, 0xb7, 0xe9, 0xf7, 0x21, 0x45, 0x3f, 0x3e, 0x35, 0x4f, 0xe7, 0xbe, 0x0b, 0x11, 0x8e, 0xf5, 0xb8, 0x79, 0x42, 0xb5, 0xfe, 0xd4, 0xc3, 0x0d, 0x7a, 0x08, 0xfe, 0x24, 0x64, 0xeb, 0x79, 0xa3, 0xde, 0xba, 0xb3, 0x7b, 0x6d, 0x3a, 0x0a, 0xb3, 0x15, 0x77, 0xde, 0x7e, 0x93, 0x22, 0x9b, 0x49, 0xd1, 0xe8, 0xfd, 0x56, 0x32, 0xd0, 0x26, 0xd8, 0x3e, 0xe0, 0x6a, 0xa7, 0x85, 0x34, 0xce, 0xe3, 0x08, 0x1b, 0x22, 0x2e, 0xc4, 0xcd, 0x94, 0x88, 0xcc, 0xde, 0x4e, 0x15, 0x29, 0x05 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.13", - /* Message */ - 5, - { 0x12, 0x97, 0x5d, 0xb7, 0x3d } -, - /* Seed */ - 248, - { 0x6a, 0x4b, 0x4f, 0xb8, 0x05, 0x80, 0x72, 0x72, 0x96, 0x5b, 0xff, 0x2f, 0x4c, 0x80, 0x0f, 0x96, 0x4f, 0xa3, 0xae, 0xb9, 0xfb, 0x43, 0x3b, 0x40, 0xc8, 0xac, 0xc5, 0x98, 0xb4, 0x84, 0x02, 0x98, 0x93, 0xa2, 0x19, 0xc9, 0x53, 0x21, 0x34, 0xc0, 0x6a, 0xc8, 0x42, 0x5c, 0x28, 0xa5, 0xf0, 0x63, 0xc2, 0x84, 0x20, 0x0a, 0x04, 0x56, 0x43, 0x48, 0x97, 0x16, 0x51, 0x6a, 0x98, 0x7b, 0xf8, 0x1b, 0xa1, 0x86, 0xf4, 0xce, 0xb8, 0xd8, 0xd9, 0xdc, 0x1d, 0x73, 0xf2, 0x26, 0x7f, 0xd1, 0x98, 0x8d, 0x6a, 0x2f, 0xfd, 0x68, 0xcd, 0x36, 0x69, 0xde, 0x2b, 0x04, 0x70, 0x09, 0x43, 0xd0, 0xd4, 0x44, 0xae, 0x3d, 0xa8, 0xf0, 0x59, 0x4e, 0x62, 0x61, 0xe5, 0xff, 0xf6, 0x07, 0xf0, 0x4d, 0xf3, 0x1e, 0x3d, 0x9c, 0x91, 0x22, 0xd7, 0x6f, 0xb9, 0x0f, 0x3f, 0x82, 0xc3, 0x93, 0x25, 0x3b, 0x75, 0x20, 0x16, 0x5b, 0xd1, 0xf3, 0x19, 0xab, 0x3b, 0x87, 0x5e, 0xcc, 0x6a, 0xb3, 0xed, 0x02, 0x47, 0xd0, 0x37, 0x70, 0xf8, 0xd6, 0x47, 0x1d, 0x69, 0xcd, 0x13, 0xee, 0x25, 0x7c, 0x1f, 0xc8, 0xb3, 0x0f, 0x19, 0xb9, 0x3f, 0xe4, 0xf2, 0xfc, 0x9c, 0x21, 0x49, 0x28, 0x13, 0xd1, 0xfc, 0x85, 0x2a, 0xf7, 0x0c, 0xdc, 0x63, 0x84, 0xd2, 0xae, 0x55, 0xb9, 0x1e, 0x39, 0xae, 0x6c, 0x3b, 0x19, 0xfd, 0x1a, 0x7d, 0xea, 0xf7, 0x18, 0xc0, 0x5d, 0x57, 0x80, 0x95, 0x96, 0xa2, 0x88, 0xfc, 0x9a, 0xef, 0xb8, 0x15, 0xae, 0xa2, 0x9f, 0xaf, 0x67, 0x83, 0xc0, 0x05, 0x35, 0xfd, 0x71, 0xd6, 0x25, 0x49, 0x40, 0xb7, 0x62, 0xf5, 0x07, 0x26, 0x1f, 0x20, 0x9b, 0xc8, 0xba, 0x94, 0x79, 0xbb, 0x3f, 0x5d, 0x64, 0x64, 0x23, 0x19, 0xcc, 0x31, 0x86, 0x85, 0x9c } -, - /* Encryption */ - 256, - { 0x27, 0x15, 0xd6, 0xeb, 0x53, 0xae, 0xe6, 0xd4, 0xbd, 0xdd, 0x3b, 0xe9, 0xb6, 0x63, 0x14, 0x4a, 0x41, 0x0d, 0x03, 0x81, 0x77, 0x9f, 0x79, 0x9d, 0xca, 0x88, 0x07, 0x92, 0xab, 0x43, 0x1a, 0xf9, 0x98, 0x9d, 0xeb, 0x17, 0x36, 0x9d, 0xc6, 0x74, 0x38, 0xad, 0xd8, 0x2b, 0xdf, 0x0a, 0x59, 0xdd, 0x3b, 0xc2, 0x78, 0x01, 0x02, 0x58, 0xc7, 0xdf, 0x87, 0x69, 0x84, 0xff, 0x52, 0x76, 0x78, 0xbf, 0x9b, 0x34, 0xc0, 0x77, 0x43, 0xb5, 0xd2, 0x2f, 0x4f, 0x30, 0xcb, 0x5d, 0x7d, 0x8a, 0x6c, 0xfd, 0x50, 0x58, 0x24, 0xf2, 0xe0, 0x94, 0x02, 0x4f, 0xb0, 0x43, 0x30, 0xf6, 0x6d, 0xa7, 0xcb, 0xc0, 0x1d, 0x5e, 0xcc, 0x8d, 0xfc, 0xa1, 0xca, 0x9e, 0x50, 0x91, 0xb9, 0xd9, 0xc8, 0xe3, 0x8d, 0x0a, 0xc3, 0x93, 0x1d, 0xe5, 0xd1, 0xfd, 0xc8, 0x33, 0x73, 0x84, 0x82, 0xa7, 0xfd, 0x15, 0x2c, 0x1d, 0x24, 0xe6, 0x9e, 0xa0, 0x1d, 0xd3, 0xe1, 0xfa, 0x77, 0x23, 0x54, 0xa6, 0x07, 0xd6, 0x2c, 0x60, 0xb5, 0x61, 0xdc, 0x5c, 0xcb, 0x01, 0x2b, 0x71, 0x2f, 0x5c, 0x2d, 0xa1, 0x89, 0x2c, 0x31, 0x20, 0xef, 0x99, 0x0d, 0x74, 0x61, 0x1d, 0xdd, 0x35, 0x66, 0xaf, 0x1a, 0xcd, 0x8b, 0x48, 0x50, 0x06, 0x1c, 0x91, 0x28, 0xf8, 0x2a, 0xd1, 0x12, 0xda, 0x9f, 0x68, 0xac, 0x88, 0x39, 0x3f, 0x9a, 0x5c, 0x2c, 0x10, 0x20, 0xaa, 0x77, 0xe9, 0xb6, 0x2e, 0x2d, 0x1e, 0x98, 0x5f, 0xef, 0x86, 0x4c, 0xc1, 0xae, 0xb4, 0x51, 0xac, 0x83, 0x9c, 0x72, 0x0c, 0xb9, 0x73, 0xe7, 0xb5, 0xdf, 0x24, 0xa9, 0x8c, 0xcb, 0x6e, 0x67, 0x72, 0x66, 0x29, 0xa3, 0x66, 0xfe, 0xa3, 0xf9, 0xa9, 0x52, 0x1d, 0xaa, 0x19, 0xb0, 0x44, 0x30, 0xe8, 0x10, 0xf2, 0xc4, 0x5a, 0x57, 0xd4, 0x25, 0x3b, 0xed, 0xb9, 0x1d, 0xa0 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.14", - /* Message */ - 46, - { 0x8d, 0xe0, 0xf5, 0xa4, 0x13, 0xa7, 0xf7, 0x86, 0x39, 0x6f, 0x09, 0xa4, 0x5e, 0x5e, 0x77, 0x4f, 0x3c, 0x60, 0x9c, 0xe6, 0xf1, 0xb4, 0x90, 0xdd, 0xe2, 0x22, 0xb3, 0x22, 0xd5, 0x34, 0x0e, 0x9b, 0x10, 0x55, 0x81, 0xf4, 0xc5, 0xbe, 0x44, 0xea, 0xbb, 0x3d, 0x1b, 0x23, 0xf8, 0x45 } -, - /* Seed */ - 207, - { 0xf8, 0x71, 0xa8, 0x97, 0xae, 0xe8, 0x45, 0xc3, 0xbb, 0x82, 0x69, 0x90, 0xb7, 0x31, 0xd2, 0x77, 0x7c, 0xf4, 0x76, 0xb5, 0xcf, 0xc5, 0x59, 0x6d, 0xf3, 0xa5, 0x23, 0xba, 0x69, 0x79, 0xc7, 0xa4, 0x51, 0x79, 0xda, 0x5f, 0xd6, 0x0f, 0x81, 0x0b, 0xf4, 0x14, 0xc5, 0x4e, 0x18, 0x2f, 0x26, 0x01, 0x72, 0x0f, 0xfe, 0x8a, 0x50, 0xd7, 0xd9, 0xd1, 0x1e, 0x56, 0x43, 0x18, 0xe9, 0x02, 0x6f, 0x07, 0xc5, 0xaa, 0xa1, 0x3e, 0xf8, 0x91, 0x28, 0x3a, 0x96, 0x63, 0xc1, 0xe3, 0xd2, 0x7b, 0x93, 0x81, 0x7d, 0x01, 0xa5, 0x6f, 0xce, 0x33, 0xd5, 0x16, 0x9b, 0xfe, 0xa6, 0x2a, 0x8e, 0xe6, 0xc3, 0x70, 0xa3, 0xaa, 0x8c, 0x71, 0x94, 0xd9, 0xd3, 0x53, 0xd0, 0x98, 0x16, 0x61, 0xfe, 0x85, 0x81, 0x62, 0x50, 0xe0, 0x32, 0x4e, 0xae, 0x1b, 0x84, 0x7f, 0xc7, 0x32, 0x91, 0x91, 0x60, 0xd0, 0x1e, 0x11, 0x92, 0xac, 0x16, 0xbe, 0x0e, 0xb8, 0xe9, 0x95, 0xe4, 0x86, 0x40, 0x27, 0x6a, 0x2d, 0xb7, 0xb8, 0x7f, 0x84, 0xb3, 0xfa, 0xc0, 0x4c, 0xe8, 0x62, 0xf0, 0x22, 0x38, 0x62, 0x3f, 0x62, 0xb9, 0x2a, 0x2e, 0x32, 0x7b, 0x01, 0xb8, 0xc7, 0xb9, 0xe5, 0xec, 0x87, 0x05, 0x5c, 0x6c, 0xb7, 0xb5, 0x56, 0x51, 0xab, 0x5a, 0xc9, 0x89, 0x83, 0x3b, 0x03, 0x4f, 0x8b, 0xe0, 0x11, 0x6f, 0x28, 0xb1, 0xe8, 0x86, 0xa2, 0xce, 0xd1, 0x23, 0x29, 0x8e, 0xb0, 0x04, 0x07, 0x5a, 0x6b, 0x5b, 0x71, 0xb1 } -, - /* Encryption */ - 256, - { 0xd3, 0x67, 0xac, 0xa8, 0xd4, 0xf1, 0x74, 0x14, 0xe9, 0xbf, 0x09, 0xad, 0x81, 0x1d, 0x78, 0xdb, 0x0e, 0x85, 0x0c, 0x45, 0xc8, 0xf9, 0xd7, 0x02, 0x44, 0x75, 0xd3, 0xe5, 0x6e, 0x3c, 0xbf, 0xbe, 0x6e, 0xe8, 0xab, 0xbf, 0xd7, 0x74, 0x58, 0x26, 0x41, 0x7c, 0xc8, 0xed, 0x52, 0xf5, 0x4e, 0x00, 0xa9, 0x2f, 0x81, 0x7e, 0xf9, 0x83, 0xe9, 0x8d, 0x10, 0x0a, 0x1f, 0x99, 0x0d, 0xb1, 0xe2, 0x90, 0xa8, 0x51, 0x6d, 0x60, 0x9b, 0xb3, 0x2e, 0x50, 0x2a, 0x77, 0xe1, 0x1f, 0x76, 0x20, 0x0b, 0x00, 0x25, 0x76, 0x5e, 0x9b, 0xd2, 0x85, 0x9b, 0xa9, 0x4a, 0x69, 0x63, 0x33, 0xa5, 0xeb, 0xe2, 0xeb, 0x25, 0xba, 0x9d, 0x19, 0x00, 0x7f, 0x64, 0x36, 0x0c, 0xc0, 0x75, 0xca, 0xd7, 0xf0, 0x99, 0x50, 0xe4, 0xb7, 0xaf, 0xcb, 0xac, 0x36, 0xe6, 0xec, 0xb0, 0x17, 0xcf, 0x4a, 0x1f, 0x25, 0xa4, 0xd2, 0xb9, 0x51, 0xbb, 0x85, 0xe8, 0x1c, 0xb2, 0xb4, 0xeb, 0x6f, 0x45, 0xcd, 0xd4, 0x00, 0xd2, 0xac, 0x4e, 0x21, 0x69, 0x89, 0x6d, 0x94, 0x15, 0x82, 0x44, 0x9c, 0xe3, 0x0f, 0x69, 0xc1, 0x7c, 0xb4, 0x49, 0x32, 0x1f, 0x65, 0xe4, 0x4d, 0xf3, 0x03, 0x87, 0x86, 0x27, 0x62, 0x13, 0x51, 0xf5, 0x2e, 0x5a, 0x07, 0x52, 0xe3, 0xb5, 0xeb, 0x12, 0x63, 0x61, 0x69, 0x7f, 0x53, 0xcf, 0x24, 0x66, 0x16, 0x5c, 0x3f, 0xbd, 0x66, 0x2b, 0x83, 0x75, 0x80, 0xb7, 0x6d, 0x45, 0x9f, 0xf0, 0x44, 0x97, 0xe5, 0xfe, 0x1b, 0x3c, 0xd1, 0x8c, 0x4d, 0x58, 0xff, 0xed, 0xab, 0xdd, 0x04, 0xa8, 0xc1, 0x08, 0xd8, 0x59, 0xb6, 0x52, 0x98, 0x63, 0x9c, 0x3a, 0xf8, 0x0c, 0xd9, 0x4e, 0x23, 0x87, 0xa8, 0x69, 0x44, 0x09, 0xef, 0x9e, 0x0b, 0x78, 0xb6, 0xf4, 0x67, 0x39, 0x0b, 0xe1, 0x08, 0x57, 0x9c, 0x9b, 0x2c } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.15", - /* Message */ - 32, - { 0x9e, 0x78, 0xc8, 0x2b, 0xfd, 0x0f, 0x23, 0xd3, 0x91, 0xe7, 0x60, 0x01, 0x64, 0x01, 0x9a, 0xad, 0x28, 0xf5, 0x9b, 0x14, 0x15, 0x44, 0x04, 0xd9, 0xe9, 0x66, 0x13, 0x3c, 0x10, 0x3f, 0xc3, 0x7c } -, - /* Seed */ - 221, - { 0xbb, 0x42, 0x24, 0x7d, 0xb2, 0x40, 0xba, 0xca, 0xcb, 0xcb, 0xe8, 0xc6, 0x8c, 0xb0, 0xf7, 0x0e, 0x46, 0x0a, 0x49, 0x73, 0xda, 0xe6, 0x56, 0x99, 0x35, 0x8f, 0xef, 0x82, 0x70, 0xd6, 0x5c, 0x3d, 0x0c, 0x45, 0x5a, 0x37, 0x9c, 0x56, 0x3c, 0x59, 0x7b, 0x28, 0xf4, 0xff, 0xa0, 0x70, 0xe0, 0xec, 0x1e, 0xbb, 0x9e, 0xd4, 0x27, 0xfe, 0x89, 0xab, 0xcd, 0x47, 0x93, 0xc4, 0x22, 0xc3, 0x38, 0x87, 0x8c, 0x8b, 0x14, 0x5b, 0x46, 0xc4, 0xf7, 0x13, 0x78, 0xa0, 0xfd, 0x7d, 0x50, 0x53, 0xb8, 0x67, 0x98, 0xbc, 0x02, 0xd9, 0x32, 0x93, 0xfe, 0xd8, 0x47, 0xf1, 0x8f, 0xe0, 0x61, 0x59, 0x07, 0x4a, 0xc1, 0x89, 0xd9, 0x56, 0x23, 0x20, 0x74, 0xdb, 0x6d, 0xdc, 0xf9, 0x94, 0x1a, 0x70, 0xf2, 0x8b, 0x60, 0xe4, 0x83, 0x39, 0x5a, 0x2d, 0x21, 0x01, 0x54, 0xb6, 0x2a, 0xba, 0xb8, 0x75, 0x0f, 0x5a, 0xeb, 0xf1, 0xac, 0xef, 0xe2, 0x05, 0x6f, 0x5a, 0xbd, 0x2f, 0x0e, 0x0e, 0xc4, 0x94, 0xaf, 0xa8, 0x2f, 0xc5, 0x9b, 0xb3, 0x57, 0xf1, 0x16, 0xa9, 0x4e, 0xc1, 0xcd, 0x06, 0x03, 0xb5, 0x2f, 0xe5, 0x6d, 0x31, 0xa4, 0x3b, 0x87, 0xaa, 0x63, 0x77, 0x88, 0xc7, 0x24, 0xcb, 0x6f, 0x88, 0x37, 0x3c, 0x92, 0xf6, 0x07, 0x11, 0xbf, 0x3f, 0x35, 0x94, 0xe2, 0x3d, 0xee, 0x2f, 0xec, 0xed, 0xfe, 0x6f, 0x5f, 0xc8, 0x86, 0xe9, 0x6a, 0xee, 0x7c, 0x74, 0x68, 0x22, 0xe5, 0x6c, 0xba, 0x7e, 0xbd, 0xaa, 0x2a, 0x92, 0x10, 0xea, 0x81, 0x98, 0xe4, 0xc2, 0x2d, 0xe9, 0x29, 0x89, 0x45 } -, - /* Encryption */ - 256, - { 0x81, 0x8d, 0xcb, 0xba, 0x98, 0xc3, 0x46, 0x79, 0x3c, 0x79, 0xd4, 0xbb, 0x78, 0x5a, 0xa6, 0x40, 0x19, 0x1b, 0x05, 0xf8, 0x83, 0x5f, 0xf7, 0x39, 0x74, 0x44, 0x3b, 0xce, 0x35, 0x7a, 0x26, 0x9d, 0x44, 0x64, 0x6e, 0x8c, 0x79, 0x10, 0x2d, 0xce, 0x22, 0x92, 0x39, 0x78, 0xa3, 0x94, 0x1e, 0xbc, 0xb9, 0x90, 0x4f, 0xc1, 0xbb, 0x1f, 0xb4, 0x3f, 0x11, 0x27, 0x5e, 0x71, 0xeb, 0x7a, 0x84, 0xd2, 0x74, 0xbe, 0x10, 0x4b, 0x00, 0xaf, 0x92, 0x25, 0xe2, 0xa4, 0xf7, 0xf5, 0xa0, 0x48, 0xab, 0xb6, 0x6c, 0xba, 0xb6, 0x52, 0x5d, 0x1b, 0x11, 0x5d, 0xa8, 0xc0, 0xbb, 0x08, 0xde, 0xea, 0xec, 0x7f, 0x80, 0xeb, 0x6c, 0x39, 0x50, 0x4d, 0xc4, 0xeb, 0x38, 0x15, 0x4c, 0xe4, 0xb6, 0x91, 0xb4, 0x06, 0x93, 0x19, 0xb2, 0x93, 0xc2, 0x5d, 0xc3, 0x0b, 0x8f, 0xb3, 0x8b, 0xca, 0x15, 0x3e, 0x2f, 0xa6, 0x1b, 0x33, 0x76, 0xdd, 0xc3, 0xc5, 0x3a, 0x57, 0x93, 0x21, 0xd9, 0x10, 0xa1, 0x71, 0xfc, 0x42, 0xaa, 0xf1, 0x70, 0x50, 0xed, 0x6d, 0x31, 0x1a, 0x7d, 0xf5, 0xb9, 0xa5, 0xcf, 0x3a, 0x98, 0xfd, 0x69, 0xaa, 0x85, 0xac, 0x23, 0x46, 0xc1, 0x6f, 0xa0, 0x3b, 0x1e, 0x53, 0xd1, 0x03, 0xd6, 0xf5, 0xa0, 0x4b, 0x0d, 0x9d, 0x3f, 0x18, 0x83, 0x53, 0x1e, 0x2f, 0x63, 0x41, 0xfd, 0x91, 0xbd, 0x63, 0xa5, 0xaa, 0x99, 0x3b, 0x6e, 0xdb, 0x99, 0x92, 0xe5, 0xdb, 0x17, 0xa7, 0xbe, 0x55, 0x5e, 0xaf, 0xa3, 0xbb, 0xab, 0x32, 0x08, 0x6e, 0x92, 0xb8, 0xb7, 0x91, 0x06, 0x69, 0x68, 0xe0, 0x0f, 0x8a, 0x17, 0x71, 0x61, 0x44, 0x0c, 0xe5, 0x38, 0x57, 0x97, 0x89, 0xc2, 0x91, 0x2e, 0xbd, 0x7a, 0xd0, 0x19, 0xbe, 0x29, 0x37, 0x6c, 0xad, 0xee, 0xc2, 0x99, 0x21, 0x07, 0xc9, 0xdb, 0x07, 0x60, 0x49 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.16", - /* Message */ - 47, - { 0x6d, 0x72, 0x08, 0xb2, 0xff, 0xb0, 0x1a, 0xd2, 0x36, 0x0c, 0x46, 0x09, 0xf3, 0xba, 0xd3, 0x15, 0x79, 0xc8, 0xd4, 0x00, 0x5c, 0xc9, 0x60, 0x14, 0x2e, 0x2b, 0x69, 0x6b, 0x26, 0xe9, 0x4f, 0x2d, 0x99, 0x98, 0x0b, 0xad, 0x38, 0x41, 0x05, 0xb1, 0x89, 0x95, 0x57, 0xaf, 0x89, 0x05, 0x25 } -, - /* Seed */ - 206, - { 0x72, 0xae, 0x49, 0x97, 0x18, 0x28, 0xba, 0x54, 0x23, 0xab, 0x96, 0x3c, 0xdb, 0x18, 0xf4, 0xbd, 0xfd, 0xbc, 0x74, 0x73, 0xcf, 0x70, 0xfb, 0x77, 0x21, 0x34, 0x41, 0xf1, 0xd4, 0x46, 0xae, 0x48, 0x10, 0x93, 0x03, 0xa2, 0x60, 0xc0, 0x91, 0xab, 0x51, 0x99, 0xd9, 0x64, 0xe6, 0x21, 0x63, 0xc2, 0x46, 0x57, 0x24, 0x71, 0x73, 0xcb, 0x05, 0x11, 0xb9, 0xcb, 0xb1, 0x63, 0x45, 0x9c, 0x95, 0x6f, 0x9c, 0x0b, 0x18, 0x83, 0xb6, 0x91, 0xb5, 0xe4, 0xea, 0xe0, 0x4f, 0x0a, 0xf2, 0x4e, 0xa3, 0x28, 0xc6, 0xde, 0x88, 0x2c, 0xeb, 0xc4, 0xf8, 0x9a, 0x56, 0x37, 0x32, 0x82, 0xd6, 0x0a, 0xf2, 0xba, 0x96, 0x7e, 0x25, 0x7a, 0xc4, 0x01, 0xa3, 0x7f, 0x94, 0x41, 0xc1, 0x1f, 0x2e, 0x0e, 0x42, 0x1b, 0x2d, 0x15, 0x1e, 0xb2, 0x43, 0xa9, 0x7e, 0xae, 0x5a, 0xaa, 0x86, 0xcd, 0x38, 0xdf, 0x43, 0xc2, 0x6a, 0x1d, 0x6e, 0x3b, 0x12, 0xc1, 0x3f, 0xa3, 0x59, 0x7b, 0x85, 0xbb, 0xaa, 0x13, 0x09, 0x45, 0x2c, 0x7e, 0x9b, 0x32, 0x5d, 0x8c, 0x73, 0xfa, 0x79, 0x9c, 0x57, 0x56, 0x52, 0x73, 0x7b, 0x92, 0xa2, 0x47, 0xd2, 0x3c, 0x4c, 0x70, 0x12, 0x40, 0xc5, 0x3d, 0xcf, 0xe2, 0xea, 0x69, 0x7a, 0xf6, 0x1c, 0x07, 0x2f, 0xa7, 0x6b, 0xdb, 0x05, 0x2a, 0x58, 0xc9, 0x19, 0xe6, 0x9e, 0xc5, 0x7b, 0x39, 0xa2, 0xa6, 0xc4, 0x7d, 0x77, 0x0e, 0xde, 0x67, 0x10, 0xfc, 0x7b, 0xdd, 0xe6, 0x01 } -, - /* Encryption */ - 256, - { 0x4b, 0x56, 0xdc, 0xd3, 0x04, 0xbd, 0xc7, 0xf0, 0xcc, 0xb7, 0x0d, 0x2c, 0x58, 0x6f, 0x52, 0x74, 0x60, 0x1e, 0xe6, 0x05, 0x36, 0xbb, 0x21, 0x80, 0x61, 0x67, 0x13, 0x50, 0xd6, 0xd3, 0xae, 0x2e, 0x28, 0x4f, 0x07, 0xb5, 0xed, 0x63, 0x01, 0x79, 0x26, 0x94, 0x13, 0x12, 0x2b, 0x98, 0x37, 0x60, 0x90, 0xf7, 0xa4, 0xa4, 0xf6, 0x43, 0x4a, 0xf7, 0x3a, 0xc4, 0x0c, 0x7a, 0xf4, 0xb6, 0xd7, 0xa3, 0xe3, 0x14, 0x70, 0x2a, 0xb9, 0xb8, 0x5e, 0x08, 0x73, 0x1d, 0xa0, 0xd1, 0x2e, 0xd3, 0xf0, 0x07, 0x0b, 0x0d, 0x20, 0x95, 0x05, 0x3b, 0x3f, 0x0d, 0x09, 0xd6, 0xc2, 0xcd, 0x8f, 0x98, 0xba, 0xde, 0xd9, 0x11, 0x48, 0xc3, 0x5b, 0x7b, 0x33, 0xc5, 0x43, 0x65, 0x3c, 0xcc, 0x32, 0xd8, 0x36, 0xf5, 0xf7, 0xf2, 0xee, 0x39, 0xca, 0xbd, 0x0b, 0xd8, 0x9d, 0xd9, 0xa4, 0xa9, 0x4e, 0x91, 0x2b, 0x4c, 0xa9, 0x7f, 0x18, 0x51, 0xd0, 0x17, 0x45, 0x1f, 0x60, 0x96, 0xac, 0xbf, 0x20, 0xa6, 0x5e, 0xc5, 0xa2, 0x9f, 0x08, 0xf8, 0x13, 0x5c, 0x73, 0x18, 0xa2, 0x21, 0x6d, 0x1b, 0x7d, 0x10, 0x37, 0x95, 0xc7, 0xec, 0x8e, 0xe5, 0x7a, 0x79, 0x28, 0x0f, 0x9a, 0x84, 0x4b, 0xd6, 0xab, 0x71, 0x28, 0x82, 0x0e, 0x1f, 0xb5, 0xe8, 0x25, 0x54, 0xfe, 0xc0, 0x2a, 0x78, 0xaa, 0x8d, 0x3f, 0xd6, 0xa1, 0x3e, 0x0f, 0xad, 0x0e, 0xce, 0xe7, 0xab, 0x61, 0x1d, 0xe4, 0xb0, 0xa0, 0x48, 0x1f, 0x42, 0xb8, 0xd0, 0xb5, 0x5c, 0xb8, 0x81, 0x3d, 0x1c, 0xa6, 0xe2, 0x61, 0x5c, 0xf5, 0xae, 0x8a, 0xe8, 0x6d, 0x0b, 0x5d, 0x46, 0x95, 0x50, 0x75, 0x49, 0xf7, 0xa3, 0x73, 0x66, 0xa4, 0x45, 0xfb, 0x55, 0xb7, 0xc4, 0xb6, 0xb5, 0x8e, 0xa6, 0x99, 0xdb, 0xe5, 0xdd, 0xc8, 0x19, 0x3e, 0x2b, 0xf3, 0xd5, 0xb8, 0x40 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.17", - /* Message */ - 15, - { 0x7d, 0xeb, 0x6d, 0x40, 0x41, 0x48, 0x23, 0x2c, 0x48, 0x21, 0x63, 0x4d, 0x3d, 0xf9, 0xbc } -, - /* Seed */ - 238, - { 0xe6, 0xf8, 0x3c, 0x8c, 0x99, 0x3e, 0x60, 0x15, 0xaf, 0x43, 0x04, 0x09, 0x68, 0x4e, 0x62, 0x7f, 0x3d, 0x9b, 0x84, 0xad, 0x05, 0x55, 0xc6, 0xa6, 0xc0, 0x91, 0x13, 0xa7, 0x12, 0x47, 0x2a, 0xbb, 0x36, 0xf6, 0x11, 0x92, 0x32, 0x6c, 0xf8, 0x40, 0x82, 0xaa, 0xbd, 0x1e, 0xc9, 0x5f, 0x4d, 0x1a, 0x92, 0xd9, 0x10, 0x7e, 0x30, 0x61, 0x0c, 0x8d, 0x27, 0x59, 0x55, 0x6d, 0x5d, 0x61, 0x47, 0x5c, 0xa3, 0xf3, 0xcb, 0xd9, 0x49, 0xfa, 0xc2, 0x20, 0x3c, 0x42, 0x3d, 0x56, 0xc2, 0x75, 0x58, 0xe6, 0x11, 0x8f, 0xaa, 0x0f, 0x6f, 0x68, 0x4a, 0xda, 0x13, 0xc3, 0x15, 0x3f, 0x6d, 0x25, 0x53, 0x38, 0xbf, 0xf7, 0x34, 0xe9, 0x5f, 0x60, 0xad, 0x29, 0x19, 0xab, 0xf2, 0x88, 0x15, 0xd3, 0xcc, 0x0b, 0x1e, 0xfd, 0x38, 0x5d, 0x0d, 0x45, 0x81, 0xb0, 0xee, 0x84, 0x94, 0xf2, 0xbb, 0xe2, 0x99, 0x59, 0x91, 0xac, 0x1e, 0xa8, 0x15, 0x40, 0xcb, 0x7e, 0x88, 0x56, 0x68, 0xe5, 0xa5, 0x2e, 0xca, 0x90, 0x57, 0xed, 0x9a, 0x1f, 0xb2, 0x3f, 0xdf, 0x83, 0xb5, 0x75, 0x51, 0x35, 0x8c, 0x23, 0xcd, 0x43, 0xce, 0x0e, 0x7a, 0x33, 0xc7, 0x25, 0x66, 0xb8, 0x8f, 0xe5, 0x93, 0x43, 0xf1, 0x87, 0x24, 0x46, 0xd3, 0x2c, 0x44, 0xb3, 0x99, 0x0a, 0xa4, 0xdb, 0x3e, 0xe5, 0x93, 0x42, 0x4c, 0x8e, 0x09, 0x46, 0xd2, 0x61, 0xe3, 0x27, 0x0e, 0xf4, 0x07, 0x6b, 0xb3, 0x5d, 0xf3, 0xc3, 0xc6, 0xda, 0x4b, 0xbe, 0x42, 0x3f, 0x59, 0x1b, 0x5c, 0x93, 0xba, 0x56, 0xc5, 0xcf, 0x01, 0xd4, 0xf0, 0xa9, 0x40, 0x96, 0x71, 0x09, 0xd3, 0x9b, 0x93, 0x9d, 0xf2, 0x82, 0x53, 0x2e, 0x54, 0x83, 0x10, 0x8b } -, - /* Encryption */ - 256, - { 0xaa, 0x6e, 0x6e, 0x4a, 0xf6, 0x89, 0x26, 0x4d, 0x61, 0xbf, 0xa8, 0xf5, 0x08, 0x6d, 0x82, 0x79, 0xdd, 0xc2, 0x28, 0x9c, 0x55, 0x41, 0xaf, 0x45, 0x35, 0x19, 0xc4, 0x4b, 0x95, 0xea, 0xe6, 0xa1, 0x5e, 0x7e, 0x7b, 0xd1, 0x5f, 0xd3, 0x1a, 0x4f, 0xad, 0x5f, 0x7c, 0x85, 0x90, 0x5e, 0xfc, 0xa2, 0x26, 0x93, 0x0d, 0x67, 0xda, 0xf5, 0x58, 0xb7, 0x15, 0xb2, 0x1f, 0x36, 0x28, 0xf6, 0x1a, 0x3b, 0x04, 0x2c, 0x1a, 0x38, 0xf9, 0xaf, 0x3a, 0xda, 0x82, 0xec, 0x44, 0x88, 0xc8, 0xad, 0xe5, 0xf1, 0xda, 0x81, 0xe1, 0xa8, 0xab, 0x90, 0xe1, 0xb3, 0x12, 0xdc, 0xda, 0x83, 0x5f, 0x9e, 0x92, 0x5f, 0x2e, 0x72, 0x46, 0x3f, 0xa8, 0x33, 0xa0, 0x8b, 0x93, 0x25, 0x3f, 0xdf, 0xe8, 0xcf, 0x4e, 0x5f, 0x3c, 0xfa, 0x91, 0x10, 0x77, 0x19, 0xa6, 0xa9, 0x46, 0x9a, 0xcd, 0x71, 0x25, 0xae, 0x67, 0xb2, 0xbd, 0x75, 0x85, 0x7c, 0x59, 0xbe, 0x0a, 0xbe, 0x98, 0x40, 0x74, 0xe2, 0x95, 0x47, 0x8a, 0xf2, 0x74, 0x0e, 0x25, 0x89, 0x4e, 0x56, 0xa6, 0x25, 0x0e, 0xf7, 0x36, 0x21, 0x94, 0x13, 0x81, 0x03, 0x74, 0x3c, 0xa9, 0x54, 0x47, 0x33, 0xd2, 0x50, 0x55, 0x71, 0xbe, 0xe0, 0x0f, 0x17, 0x8a, 0x2c, 0xfa, 0x38, 0xe1, 0xf8, 0xf2, 0x2f, 0xb2, 0x39, 0x30, 0xd6, 0xa7, 0x5d, 0xd1, 0x7c, 0x68, 0x9a, 0x47, 0x6d, 0x87, 0x15, 0x31, 0x85, 0x95, 0x10, 0x8f, 0xcc, 0xe8, 0x95, 0xe3, 0x44, 0x9e, 0xca, 0x97, 0xa7, 0xdd, 0xba, 0xe3, 0xe6, 0xd6, 0xf0, 0xe3, 0x5e, 0x66, 0x6d, 0x6f, 0xbd, 0x78, 0x78, 0x48, 0xf8, 0x68, 0x13, 0x37, 0xb1, 0xd4, 0xc5, 0x23, 0x8b, 0x1c, 0x24, 0xde, 0x77, 0xa7, 0xe6, 0x75, 0xe7, 0xae, 0xd8, 0xdc, 0x13, 0xdd, 0x9e, 0xb1, 0x06, 0x87, 0x98, 0x51, 0x7c, 0x0b, 0x6e } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.18", - /* Message */ - 30, - { 0x03, 0x1f, 0xc3, 0xa3, 0xea, 0xa4, 0x2b, 0x0d, 0x9f, 0x6d, 0x7d, 0xd5, 0x99, 0x3d, 0x61, 0x89, 0xcb, 0xb2, 0xe0, 0xe9, 0x6f, 0xaa, 0x33, 0xd6, 0x1f, 0x31, 0x7b, 0x6b, 0x3c, 0x00 } -, - /* Seed */ - 223, - { 0x16, 0xab, 0x64, 0x85, 0xca, 0xc0, 0x39, 0x71, 0x14, 0x88, 0x0e, 0x6f, 0x72, 0xbc, 0x1f, 0x1e, 0xf3, 0x4b, 0xa2, 0x7d, 0x1c, 0x43, 0x3d, 0x77, 0xf3, 0x37, 0x2b, 0x1f, 0xd5, 0xb2, 0x1b, 0xa5, 0x7a, 0x50, 0x5c, 0xd8, 0xf3, 0x5b, 0x75, 0x24, 0x2c, 0xf1, 0xb7, 0x6d, 0x38, 0x1c, 0x68, 0x34, 0x24, 0x01, 0xee, 0xef, 0xc8, 0x42, 0x53, 0xa2, 0xde, 0x1a, 0x19, 0x13, 0xe4, 0x38, 0x77, 0x3b, 0x7b, 0xcb, 0x31, 0xcb, 0xab, 0x25, 0x8f, 0x72, 0x6a, 0xc9, 0x34, 0xa8, 0x71, 0x26, 0x96, 0x9a, 0xdb, 0x7f, 0x76, 0x8c, 0x1b, 0xab, 0x87, 0x54, 0xa1, 0x3a, 0x3c, 0xcb, 0xba, 0x6f, 0x3d, 0xd8, 0xd0, 0xec, 0x6a, 0x7c, 0x6d, 0x68, 0x7d, 0x04, 0x95, 0xb6, 0xe2, 0x2c, 0x9a, 0xe7, 0x67, 0xaf, 0xc9, 0xd9, 0x4f, 0x2e, 0x45, 0xa1, 0x06, 0x13, 0x3c, 0x42, 0xc7, 0x9b, 0x52, 0xc2, 0x6a, 0xd4, 0xb6, 0x7b, 0xd8, 0xec, 0xe5, 0x5e, 0x84, 0x32, 0x5c, 0xa6, 0xf4, 0x9c, 0x8e, 0x95, 0x31, 0xf5, 0xf6, 0xb9, 0xca, 0xc3, 0x5c, 0x93, 0x3e, 0xeb, 0xe3, 0xb9, 0xa1, 0x1b, 0x9b, 0xb1, 0xc9, 0xea, 0x8c, 0xe6, 0xd2, 0x28, 0x5d, 0xa9, 0x08, 0xe5, 0x91, 0x97, 0x82, 0xb5, 0xb3, 0x08, 0xfe, 0x47, 0x8d, 0x98, 0xe4, 0x9a, 0xea, 0x54, 0x3b, 0xf8, 0xca, 0x1b, 0x22, 0xed, 0xf4, 0x3f, 0xdb, 0xf6, 0xaf, 0x31, 0xcc, 0x8c, 0xd4, 0xfb, 0x7d, 0xe2, 0xd8, 0x19, 0xaf, 0xa5, 0x48, 0x3e, 0xac, 0xdd, 0x56, 0xd7, 0x78, 0x7b, 0xc8, 0xbb, 0x16, 0x22, 0x38, 0x40, 0x49, 0xbc, 0x30, 0x9a, 0x66 } -, - /* Encryption */ - 256, - { 0x61, 0xc7, 0x54, 0x76, 0x30, 0x43, 0xb5, 0x84, 0xe4, 0xa8, 0x54, 0x6b, 0x79, 0xf0, 0xa3, 0xe2, 0xe0, 0xf3, 0xb3, 0xe2, 0xdb, 0x6c, 0x94, 0xad, 0x81, 0x7e, 0x92, 0x81, 0xf4, 0x85, 0xc0, 0x82, 0x08, 0xfe, 0xd4, 0xf4, 0xd7, 0xd0, 0xa7, 0x8c, 0x6c, 0x31, 0x1a, 0x07, 0xc7, 0x5b, 0x9b, 0xbe, 0x85, 0x04, 0xf4, 0xb7, 0xa6, 0x92, 0x99, 0x02, 0x16, 0xde, 0x12, 0x58, 0x5c, 0x00, 0x9a, 0xe5, 0x8c, 0x26, 0xf0, 0x85, 0x07, 0x1f, 0x39, 0x5e, 0x5a, 0xf8, 0x92, 0x5f, 0x39, 0x33, 0xf6, 0xd9, 0xf4, 0x12, 0xd4, 0x25, 0x54, 0x64, 0x54, 0xe8, 0x00, 0xb7, 0xe3, 0xaa, 0xc7, 0x8b, 0x7a, 0x08, 0xb9, 0x2e, 0x79, 0x8b, 0xb8, 0x34, 0xeb, 0xea, 0xdc, 0x4b, 0x4a, 0x63, 0x56, 0xaf, 0x1c, 0xa0, 0x9b, 0xf5, 0x86, 0x74, 0x5f, 0x61, 0x6d, 0x51, 0x74, 0x8c, 0xc7, 0xa3, 0x7b, 0x48, 0xcb, 0x10, 0x97, 0x7e, 0x30, 0x3b, 0xbe, 0x10, 0xbf, 0x27, 0xc6, 0x9b, 0xdf, 0xf0, 0xba, 0x5c, 0xab, 0x8f, 0x62, 0xd0, 0x58, 0x7a, 0x09, 0xd6, 0xe0, 0x22, 0x82, 0x32, 0x33, 0xc8, 0xc7, 0xaa, 0x41, 0x87, 0x22, 0x23, 0xed, 0x15, 0xa7, 0x4a, 0xcc, 0xb0, 0xf1, 0xf8, 0x22, 0xf2, 0x4d, 0x75, 0x94, 0xed, 0x99, 0x25, 0xa1, 0xc6, 0xc0, 0xc0, 0xf9, 0xad, 0x0e, 0x07, 0x1e, 0xb6, 0xb5, 0xeb, 0xe1, 0xba, 0xb6, 0xba, 0x3b, 0x6d, 0x99, 0xa3, 0x16, 0x52, 0x04, 0x7f, 0x46, 0x92, 0x60, 0xbe, 0xe8, 0x71, 0x0e, 0x37, 0x0f, 0x04, 0xed, 0x70, 0x75, 0x93, 0x93, 0x7a, 0x08, 0xdd, 0x82, 0x26, 0x49, 0x92, 0x31, 0x1f, 0x4a, 0xf9, 0x88, 0x4c, 0xf8, 0xad, 0x34, 0xaf, 0xb9, 0xf6, 0x75, 0x99, 0x3c, 0x8a, 0xbf, 0x41, 0x51, 0x98, 0x39, 0xf7, 0x6f, 0xa1, 0xe9, 0x31, 0xbd, 0xae, 0x1d, 0x08, 0xa6, 0x34 } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.19", - /* Message */ - 43, - { 0xc9, 0xc9, 0x3a, 0xfe, 0xa9, 0x97, 0xb1, 0xee, 0x36, 0xfa, 0x72, 0x72, 0x03, 0x54, 0xc7, 0x04, 0x64, 0x9b, 0xc6, 0xef, 0x44, 0xf5, 0x18, 0x7c, 0x6c, 0x28, 0x54, 0x2b, 0x9a, 0xe9, 0x55, 0xa7, 0x19, 0x3f, 0xff, 0xec, 0x86, 0x7b, 0xb6, 0x2e, 0x21, 0x9e, 0x68 } -, - /* Seed */ - 210, - { 0x52, 0xd4, 0xc3, 0xbf, 0x0c, 0x77, 0x2c, 0x02, 0xd3, 0xbb, 0x71, 0x1d, 0x7f, 0x14, 0x6d, 0x8c, 0x49, 0x76, 0xf8, 0x30, 0x81, 0xbe, 0x49, 0x53, 0xd4, 0xaf, 0xeb, 0x07, 0x8e, 0x54, 0x12, 0xa3, 0x2c, 0x3d, 0xc7, 0x37, 0xb5, 0x9b, 0xc4, 0x54, 0xc3, 0xde, 0x93, 0xa1, 0xae, 0xd0, 0x7c, 0x1b, 0xa6, 0x4d, 0x1d, 0xe4, 0x36, 0x80, 0x14, 0xd0, 0x4f, 0x64, 0x40, 0x55, 0x6a, 0x4a, 0x16, 0x97, 0x9d, 0x08, 0x03, 0xcc, 0x29, 0x22, 0xda, 0x97, 0xed, 0x67, 0x61, 0x90, 0x12, 0xf8, 0xf7, 0xd3, 0xb1, 0xa4, 0x55, 0x84, 0xb0, 0x94, 0x6a, 0xf6, 0xdb, 0xd4, 0xa0, 0x85, 0x7d, 0x4c, 0x2d, 0xb9, 0x9a, 0x17, 0xbb, 0xd2, 0x7a, 0xcd, 0x9a, 0x62, 0xe6, 0x7f, 0x88, 0x79, 0xdb, 0xef, 0x27, 0xf1, 0x04, 0x6a, 0x86, 0x7e, 0x69, 0x95, 0x16, 0x2b, 0x2a, 0x1a, 0x1c, 0xcc, 0xdc, 0xea, 0xf4, 0x5b, 0xe1, 0x33, 0x7e, 0x5f, 0xa8, 0xf8, 0x5e, 0xda, 0xad, 0xf7, 0x50, 0x8d, 0x58, 0xf3, 0x26, 0xaa, 0x7c, 0xf3, 0x01, 0xf4, 0x41, 0xba, 0x55, 0x8b, 0x60, 0xe0, 0xfa, 0xc6, 0xe0, 0xd1, 0x99, 0x20, 0x61, 0xa0, 0xa4, 0x69, 0xbe, 0x02, 0x16, 0x26, 0x89, 0x0e, 0xe8, 0x7e, 0x68, 0x13, 0x9b, 0xd5, 0x19, 0xae, 0x77, 0x3e, 0x3e, 0xc4, 0x81, 0xb7, 0xf2, 0xb3, 0x77, 0x33, 0x1f, 0x52, 0xf2, 0xe3, 0x86, 0x88, 0x4f, 0x76, 0x57, 0x23, 0xe2, 0x6c, 0xd4, 0xa8, 0xd9, 0x68, 0x61, 0x4c, 0x9c, 0x33, 0xdc, 0xdb } -, - /* Encryption */ - 256, - { 0xd0, 0x68, 0x67, 0x02, 0x2a, 0x0f, 0xaf, 0x57, 0x3d, 0x62, 0xcc, 0x24, 0xa6, 0xe0, 0x6a, 0x44, 0xcd, 0x3d, 0x83, 0xea, 0xc5, 0xd0, 0x80, 0x9e, 0xbf, 0x91, 0x30, 0x45, 0x68, 0xcb, 0x1b, 0x27, 0x56, 0x1b, 0xb2, 0x92, 0xe8, 0x77, 0x6e, 0x21, 0x6d, 0x1d, 0x02, 0x3e, 0x75, 0x3c, 0x12, 0x4b, 0x51, 0x86, 0x7b, 0x94, 0xdc, 0x60, 0x89, 0x4d, 0x62, 0xc7, 0xda, 0xe5, 0xfa, 0x1a, 0x9f, 0xaf, 0x03, 0x76, 0xe1, 0x75, 0x8c, 0xb6, 0xad, 0xc7, 0x14, 0x17, 0xe8, 0x31, 0x02, 0x52, 0x8f, 0x23, 0xf4, 0xc5, 0xe5, 0xb5, 0x03, 0x62, 0xa3, 0x9e, 0x2a, 0xa9, 0x76, 0x8b, 0x10, 0x62, 0x08, 0x6f, 0xa8, 0xc5, 0x3f, 0xf1, 0xc3, 0x9a, 0x0e, 0xe0, 0x3d, 0x38, 0x3d, 0x24, 0xbf, 0x49, 0x07, 0x22, 0xb7, 0x86, 0xda, 0xec, 0x90, 0x8c, 0xd7, 0x15, 0x1e, 0x18, 0x5d, 0xdd, 0x17, 0x88, 0x26, 0x78, 0x02, 0x7e, 0x36, 0x8b, 0x05, 0x12, 0xcf, 0x98, 0x41, 0x3f, 0x3e, 0x59, 0x6f, 0xa3, 0xdb, 0x4e, 0xc1, 0x96, 0xae, 0x5f, 0xf5, 0x24, 0xa8, 0x26, 0x6d, 0x76, 0x0e, 0x00, 0x51, 0x43, 0x3d, 0x18, 0x98, 0xff, 0xc2, 0x30, 0xe9, 0x6a, 0x2f, 0x0b, 0xfd, 0xf2, 0xb2, 0x44, 0x29, 0xad, 0xfa, 0x91, 0x8a, 0xba, 0x1a, 0x45, 0x0f, 0x76, 0x78, 0x34, 0x72, 0x30, 0x12, 0x93, 0x84, 0x8b, 0xd8, 0x2d, 0x5a, 0x33, 0x84, 0x31, 0xd6, 0xcb, 0x1c, 0x10, 0x6d, 0xc7, 0x41, 0xd2, 0x34, 0xbf, 0x5a, 0x80, 0xdb, 0xd3, 0x25, 0xda, 0x64, 0xa3, 0x94, 0xa0, 0x06, 0x5f, 0x22, 0x02, 0x8d, 0x0f, 0xdc, 0x5a, 0xdf, 0x0d, 0x0d, 0xe2, 0x9f, 0x22, 0xfb, 0x8c, 0x2a, 0x41, 0x33, 0x1f, 0xe1, 0xfc, 0xb6, 0x15, 0x89, 0xe0, 0xec, 0x75, 0x00, 0xed, 0x84, 0x42, 0xd6, 0x18, 0x46, 0xdf, 0x6c, 0xca, 0x46, 0xcc } - -} -, -{ - "PKCS#1 v1.5 Encryption Example 15.20", - /* Message */ - 22, - { 0x69, 0xb7, 0x64, 0x48, 0x55, 0xf9, 0x1d, 0x1c, 0x61, 0xc8, 0x49, 0x8e, 0x4b, 0xa1, 0xba, 0x4d, 0x84, 0x5b, 0xa8, 0x82, 0xb1, 0x73 } -, - /* Seed */ - 231, - { 0xb2, 0x2f, 0xc7, 0xde, 0x85, 0xc5, 0xf7, 0x5a, 0x2f, 0x32, 0xaf, 0x1b, 0xfb, 0xcd, 0x57, 0x89, 0x71, 0x56, 0x87, 0xde, 0x06, 0xe6, 0x6d, 0x06, 0x4a, 0xe3, 0xeb, 0x8d, 0xfb, 0x07, 0xa2, 0x57, 0x5b, 0xe0, 0xe9, 0xe6, 0xf2, 0x9f, 0x50, 0xd7, 0x39, 0x6d, 0x07, 0x8b, 0x36, 0xef, 0x80, 0x2f, 0x75, 0x1a, 0x77, 0xcc, 0x92, 0xd7, 0x61, 0x4c, 0x91, 0xdd, 0x27, 0x99, 0x31, 0xfc, 0xe0, 0x07, 0xeb, 0xf9, 0x15, 0xa0, 0xf1, 0x4e, 0x31, 0x2c, 0xe9, 0x1f, 0xe5, 0xaa, 0x6f, 0xb3, 0x74, 0x51, 0x61, 0x4f, 0xe3, 0x7c, 0x73, 0xfc, 0x6f, 0x6d, 0x6f, 0x8e, 0x52, 0x78, 0x9b, 0x5d, 0x88, 0xe8, 0x6b, 0xeb, 0x16, 0x33, 0xf5, 0xdd, 0xd5, 0xc0, 0x70, 0xf1, 0x4f, 0xd3, 0xcf, 0xee, 0x97, 0xdd, 0x4a, 0x64, 0x3d, 0x35, 0xd4, 0x5d, 0xd9, 0xbf, 0x34, 0xdf, 0x8c, 0x31, 0x0b, 0x48, 0x59, 0x2e, 0x94, 0x68, 0x31, 0xb3, 0x4e, 0xf3, 0xc0, 0xb9, 0x16, 0xf1, 0x7c, 0xb0, 0xac, 0xb2, 0xcf, 0xc1, 0xc2, 0x5d, 0x03, 0x09, 0xac, 0xc1, 0x12, 0x4f, 0x26, 0x5c, 0x1a, 0x83, 0xed, 0x88, 0x5c, 0x87, 0xfa, 0x82, 0x6f, 0xda, 0x57, 0x10, 0xb5, 0x4e, 0x16, 0xec, 0x0f, 0x44, 0x8c, 0xdb, 0x7e, 0xe0, 0x58, 0x0f, 0xf7, 0x38, 0x65, 0x30, 0xea, 0x46, 0x1e, 0x04, 0x2a, 0x0b, 0x77, 0x42, 0xc4, 0x61, 0x97, 0x6b, 0xb5, 0xa3, 0x80, 0xad, 0xbc, 0xb0, 0x01, 0x06, 0xf2, 0x67, 0x1b, 0x6c, 0xce, 0x4f, 0x72, 0x67, 0x75, 0x2f, 0x80, 0x66, 0x80, 0x42, 0x78, 0x35, 0x0b, 0x01, 0x75, 0x3e, 0x31, 0xb3, 0x8e, 0xcc, 0xfb, 0xe9, 0x05, 0x69, 0xf6 } -, - /* Encryption */ - 256, - { 0xab, 0x42, 0x67, 0x97, 0x2c, 0x77, 0x96, 0x83, 0x93, 0x88, 0xd4, 0xad, 0x87, 0xde, 0xd7, 0x4b, 0xb6, 0x53, 0xe9, 0xa7, 0x05, 0x0e, 0x28, 0x2e, 0x82, 0x19, 0x28, 0x75, 0x68, 0x9f, 0x70, 0xee, 0x1d, 0xa1, 0x8a, 0x1f, 0x73, 0x22, 0x09, 0x2c, 0xd2, 0x9f, 0xd0, 0x01, 0x19, 0x92, 0x2a, 0x6d, 0xe1, 0x26, 0x01, 0x98, 0x0a, 0xa9, 0xfa, 0x6e, 0x61, 0x9e, 0x27, 0x75, 0xe8, 0x7a, 0xda, 0xe3, 0x16, 0x95, 0xc1, 0x30, 0x4e, 0x77, 0xf5, 0x2c, 0xce, 0x01, 0x66, 0x65, 0xf2, 0x26, 0x7c, 0x20, 0x76, 0x26, 0x43, 0xc6, 0x00, 0x3c, 0x01, 0x6d, 0x84, 0x80, 0x44, 0x3c, 0x70, 0x1d, 0xf6, 0xc1, 0xd8, 0xd6, 0x55, 0x54, 0x96, 0x00, 0xee, 0x45, 0x5b, 0x70, 0xe4, 0x73, 0x31, 0x9b, 0x0d, 0x44, 0x45, 0xe0, 0xb7, 0x55, 0x2a, 0x1f, 0x80, 0x8e, 0x88, 0xf3, 0x26, 0x48, 0x42, 0x73, 0x5a, 0xe6, 0x1d, 0xf0, 0x32, 0x5e, 0xd0, 0x36, 0x90, 0xd6, 0xd5, 0xd6, 0x93, 0xad, 0x1f, 0xed, 0x22, 0x66, 0x84, 0x50, 0x37, 0x9d, 0xb5, 0x32, 0x3d, 0xc0, 0x1c, 0x89, 0xaf, 0xfa, 0xe3, 0x69, 0xb9, 0xc3, 0x01, 0xc3, 0x19, 0xc3, 0x7d, 0xdf, 0x51, 0xed, 0xf4, 0x6e, 0x09, 0xb2, 0x1e, 0x5d, 0xe9, 0x14, 0x83, 0xe8, 0xe3, 0xcb, 0x21, 0xee, 0xb7, 0x05, 0x7b, 0xc2, 0xeb, 0xdc, 0x3a, 0xaa, 0x3d, 0x65, 0x00, 0xc9, 0x2f, 0x99, 0xb1, 0x7b, 0x31, 0x80, 0xbb, 0xa0, 0x47, 0xd7, 0x60, 0x73, 0x77, 0x63, 0x36, 0xb1, 0x5d, 0x05, 0x4d, 0x79, 0xa4, 0x40, 0xcc, 0x5e, 0x98, 0x5e, 0xa5, 0x43, 0xfc, 0xaa, 0x25, 0xdb, 0x1d, 0xd8, 0x92, 0xb7, 0x1b, 0xb7, 0x4a, 0x5c, 0xf6, 0x82, 0x63, 0xd8, 0xfd, 0x58, 0xf1, 0xa4, 0x8e, 0x6c, 0x2f, 0xcb, 0x8c, 0x0b, 0x71, 0xa2, 0x51, 0xcf, 0xc1, 0xa2, 0x01, 0x57 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -}; - diff --git a/notes/rsa-testvectors/pkcs1v15crypt-vectors.txt b/notes/rsa-testvectors/pkcs1v15crypt-vectors.txt deleted file mode 100644 index 515e6e96..00000000 --- a/notes/rsa-testvectors/pkcs1v15crypt-vectors.txt +++ /dev/null @@ -1,9709 +0,0 @@ -Test vectors for RSA PKCS#1 v1.5 Encryption -=========================================== - -This file contains test vectors for the PKCS#1 v1.5 -encryption scheme. 15 RSA keys of different sizes have -been generated. For each key, 20 random messages of length -between 1 and 64 octets have been PKCS#1 v1.5 encrypted. -As specified in PKCS#1, the block type for this operation is 2. -The seed value of each example provides the pseudo random bytes -to be used for padding. This makes the result predictable. -Note that each example can be used to test encryption and -decryption. - -Key lengths: - -Key 1: 1024 bits -Key 2: 1024 bits -Key 3: 1024 bits -Key 4: 1024 bits -Key 5: 1024 bits -Key 6: 1024 bits -Key 7: 1025 bits -Key 8: 1026 bits -Key 9: 1027 bits -Key 10: 1028 bits -Key 11: 1029 bits -Key 12: 1030 bits -Key 13: 1031 bits -Key 14: 1536 bits -Key 15: 2048 bits - -These test vectors have been derived from the OAEP test vectors. -============================================================================ -# Thirteen RSA keys with bit sizes between 1024 and 1031, one 1536-bit key, -# and one 2048-bit key are generated. - -# For each key, 20 random messages are PKCS#1 v1.5 encrypted with random seeds. - -# Example 1: A 1024-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -a8 b3 b2 84 af 8e b5 0b 38 70 34 a8 60 f1 46 c4 -91 9f 31 87 63 cd 6c 55 98 c8 ae 48 11 a1 e0 ab -c4 c7 e0 b0 82 d6 93 a5 e7 fc ed 67 5c f4 66 85 -12 77 2c 0c bc 64 a7 42 c6 c6 30 f5 33 c8 cc 72 -f6 2a e8 33 c4 0b f2 58 42 e9 84 bb 78 bd bf 97 -c0 10 7d 55 bd b6 62 f5 c4 e0 fa b9 84 5c b5 14 -8e f7 39 2d d3 aa ff 93 ae 1e 6b 66 7b b3 d4 24 -76 16 d4 f5 ba 10 d4 cf d2 26 de 88 d3 9f 16 fb - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -a8 b3 b2 84 af 8e b5 0b 38 70 34 a8 60 f1 46 c4 -91 9f 31 87 63 cd 6c 55 98 c8 ae 48 11 a1 e0 ab -c4 c7 e0 b0 82 d6 93 a5 e7 fc ed 67 5c f4 66 85 -12 77 2c 0c bc 64 a7 42 c6 c6 30 f5 33 c8 cc 72 -f6 2a e8 33 c4 0b f2 58 42 e9 84 bb 78 bd bf 97 -c0 10 7d 55 bd b6 62 f5 c4 e0 fa b9 84 5c b5 14 -8e f7 39 2d d3 aa ff 93 ae 1e 6b 66 7b b3 d4 24 -76 16 d4 f5 ba 10 d4 cf d2 26 de 88 d3 9f 16 fb - -# Public exponent: -01 00 01 - -# Exponent: -53 33 9c fd b7 9f c8 46 6a 65 5c 73 16 ac a8 5c -55 fd 8f 6d d8 98 fd af 11 95 17 ef 4f 52 e8 fd -8e 25 8d f9 3f ee 18 0f a0 e4 ab 29 69 3c d8 3b -15 2a 55 3d 4a c4 d1 81 2b 8b 9f a5 af 0e 7f 55 -fe 73 04 df 41 57 09 26 f3 31 1f 15 c4 d6 5a 73 -2c 48 31 16 ee 3d 3d 2d 0a f3 54 9a d9 bf 7c bf -b7 8a d8 84 f8 4d 5b eb 04 72 4d c7 36 9b 31 de -f3 7d 0c f5 39 e9 cf cd d3 de 65 37 29 ea d5 d1 - -# Prime 1: -d3 27 37 e7 26 7f fe 13 41 b2 d5 c0 d1 50 a8 1b -58 6f b3 13 2b ed 2f 8d 52 62 86 4a 9c b9 f3 0a -f3 8b e4 48 59 8d 41 3a 17 2e fb 80 2c 21 ac f1 -c1 1c 52 0c 2f 26 a4 71 dc ad 21 2e ac 7c a3 9d - -# Prime 2: -cc 88 53 d1 d5 4d a6 30 fa c0 04 f4 71 f2 81 c7 -b8 98 2d 82 24 a4 90 ed be b3 3d 3e 3d 5c c9 3c -47 65 70 3d 1d d7 91 64 2f 1f 11 6a 0d d8 52 be -24 19 b2 af 72 bf e9 a0 30 e8 60 b0 28 8b 5d 77 - -# Prime exponent 1: -0e 12 bf 17 18 e9 ce f5 59 9b a1 c3 88 2f e8 04 -6a 90 87 4e ef ce 8f 2c cc 20 e4 f2 74 1f b0 a3 -3a 38 48 ae c9 c9 30 5f be cb d2 d7 68 19 96 7d -46 71 ac c6 43 1e 40 37 96 8d b3 78 78 e6 95 c1 - -# Prime exponent 2: -95 29 7b 0f 95 a2 fa 67 d0 07 07 d6 09 df d4 fc -05 c8 9d af c2 ef 6d 6e a5 5b ec 77 1e a3 33 73 -4d 92 51 e7 90 82 ec da 86 6e fe f1 3c 45 9e 1a -63 13 86 b7 e3 54 c8 99 f5 f1 12 ca 85 d7 15 83 - -# Coefficient: -4f 45 6c 50 24 93 bd c0 ed 2a b7 56 a3 a6 ed 4d -67 35 2a 69 7d 42 16 e9 32 12 b1 27 a6 3d 54 11 -ce 6f a9 8d 5d be fd 73 26 3e 37 28 14 27 43 81 -81 66 ed 7d d6 36 87 dd 2a 8c a1 d2 f4 fb d8 e1 - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# PKCS#1 v1.5 Encryption Example 1.1 -# ---------------------------------- - -# Message: -66 28 19 4e 12 07 3d b0 3b a9 4c da 9e f9 53 23 -97 d5 0d ba 79 b9 87 00 4a fe fe 34 - -# Seed: -01 73 41 ae 38 75 d5 f8 71 01 f8 cc 4f a9 b9 bc -15 6b b0 46 28 fc cd b2 f4 f1 1e 90 5b d3 a1 55 -d3 76 f5 93 bd 73 04 21 08 74 eb a0 8a 5e 22 bc -cc b4 c9 d3 88 2a 93 a5 4d b0 22 f5 03 d1 63 38 -b6 b7 ce 16 dc 7f 4b bf 9a 96 b5 97 72 d6 60 6e -97 47 c7 64 9b f9 e0 83 db 98 18 84 a9 54 ab 3c -6f - -# Encryption: -50 b4 c1 41 36 bd 19 8c 2f 3c 3e d2 43 fc e0 36 -e1 68 d5 65 17 98 4a 26 3c d6 64 92 b8 08 04 f1 -69 d2 10 f2 b9 bd fb 48 b1 2f 9e a0 50 09 c7 7d -a2 57 cc 60 0c ce fe 3a 62 83 78 9d 8e a0 e6 07 -ac 58 e2 69 0e c4 eb c1 01 46 e8 cb aa 5e d4 d5 -cc e6 fe 7b 0f f9 ef c1 ea bb 56 4d bf 49 82 85 -f4 49 ee 61 dd 7b 42 ee 5b 58 92 cb 90 60 1f 30 -cd a0 7b f2 64 89 31 0b cd 23 b5 28 ce ab 3c 31 - -# PKCS#1 v1.5 Encryption Example 1.2 -# ---------------------------------- - -# Message: -75 0c 40 47 f5 47 e8 e4 14 11 85 65 23 29 8a c9 -ba e2 45 ef af 13 97 fb e5 6f 9d d5 - -# Seed: -ac 47 28 a8 42 8c 1e 52 24 71 a8 df 73 5a 8e 92 -92 af 0d 55 bc b7 3a 12 ac 32 c2 64 f3 88 1c 7c -8a 71 0f 70 fe b1 04 85 c8 37 0f 78 1f ff d0 21 -81 6f 05 87 39 76 6d a0 a9 c9 db 0e ae 7e 9a 25 -b6 c4 33 18 d0 ca ac 23 65 22 ca 31 0f 17 fc 52 -ad 42 29 c8 3a 24 e9 e5 45 eb 35 e9 82 6d 55 9f -57 - -# Encryption: -68 42 e5 e2 cc 00 41 d6 b0 c8 1a 56 2c 39 a6 17 -37 9a 51 5c ab 74 ab cb 26 19 c7 74 0a 54 1d 95 -55 dd 91 65 97 5b f8 a3 eb d0 d0 45 66 61 df b1 -a6 86 1b a2 33 22 69 93 0e 0d b5 14 fc a0 73 3e -eb 9c 40 57 13 eb 1f 9d 76 80 33 ed 29 3e 1e 08 -1a 12 5f 32 dd b9 ea 52 ed be 27 5c 4a f6 0f 8a -7b f8 32 bd 22 75 61 c2 08 dc 00 31 a8 4b 50 12 -c9 dd 9f 74 45 9d cb 07 0b db e1 3c fa 8c 2d 50 - -# PKCS#1 v1.5 Encryption Example 1.3 -# ---------------------------------- - -# Message: -d9 4a e0 83 2e 64 45 ce 42 33 1c b0 6d 53 1a 82 -b1 db 4b aa d3 0f 74 6d c9 16 df 24 d4 e3 c2 45 -1f ff 59 a6 42 3e b0 e1 d0 2d 4f e6 46 cf 69 9d -fd 81 8c 6e 97 b0 51 - -# Seed: -dd 2d 60 a5 e0 08 eb e1 d0 be 6f 60 db c4 3f 29 -62 ef 50 bf de 54 2b bb e9 8f ed d1 fe ac 05 7e -77 1c f1 5f c6 32 c8 db 27 2e 28 d2 9b 57 93 ea -6a b8 06 21 8c 53 82 39 b9 3a 93 5e 65 d2 44 16 -ec 6c 6e 99 ae 04 - -# Encryption: -70 9c 7d 2d 45 98 c9 60 65 b6 58 8d a2 f8 9f a8 -7f 06 2d 72 41 ef 65 95 89 8f 63 7a da 57 ea e9 -01 73 f0 fb 4b f6 a9 1e bd 96 50 69 07 c8 53 da -cf 20 84 94 be 94 d3 13 a0 41 85 d4 74 a9 07 41 -2e ff c3 e0 24 d0 7e 4d 09 aa 24 5f bc b1 30 21 -9b fa 5d e0 2d 4f 7e 2e c9 e6 2e 8a d3 2d ee 5f -f4 d8 e4 cf ec bc 50 33 a1 c2 c6 1c 52 33 ae 16 -19 2a 48 1d 00 75 bf c7 ce 02 82 12 cd 27 be be - -# PKCS#1 v1.5 Encryption Example 1.4 -# ---------------------------------- - -# Message: -52 e6 50 d9 8e 7f 2a 04 8b 4f 86 85 21 53 b9 7e -01 dd 31 6f 34 6a 19 f6 7a 85 - -# Seed: -26 29 a7 aa c0 c3 90 5e 83 1e b6 02 38 8c 54 5a -f5 54 b9 6b 2a e5 15 32 e9 cc db 89 72 ef 30 b6 -4a 2f 98 c6 95 29 7a 01 c5 81 2a 2c 40 15 82 f3 -7b 14 4a 3e 90 e5 9d 81 b6 90 39 c6 4b 84 4b 02 -8c 10 5c 8e 68 36 15 af b6 58 b6 c4 d9 f3 82 38 -a7 63 01 bb 14 44 91 13 b6 9d e1 26 04 5e 26 f1 -3e e6 d7 - -# Encryption: -54 dd b7 84 26 8e ad b3 95 5b d9 f9 49 88 42 59 -5a d2 9f f8 a6 67 fe b4 1f 6f 53 0c b6 0b c9 26 -ac 6c 71 c7 72 f8 03 d0 22 b4 1c a5 72 04 22 3b -27 ca 79 ec 5b 72 65 2c a9 af bf 40 dc 2f 6a 0e -13 bc d6 0d 37 f7 95 04 b0 ff cc 01 cf 53 42 d6 -d3 4a c6 f1 f2 f9 f2 f4 87 46 25 b9 fd bb 7d da -2e c8 7d f0 cf 87 25 97 98 df 86 a0 6b d5 ae f7 -35 4b 8c b1 cb 13 75 75 f4 cf bc 46 28 1b b3 31 - -# PKCS#1 v1.5 Encryption Example 1.5 -# ---------------------------------- - -# Message: -8d a8 9f d9 e5 f9 74 a2 9f ef fb 46 2b 49 18 0f -6c f9 e8 02 - -# Seed: -c3 ca 84 60 0f 35 c8 65 5f c7 c6 4c 75 c5 87 38 -53 d3 aa 8a 94 26 a5 1b 63 d7 e7 5d cf 6c ae 97 -a4 25 3f ba 87 1d 6f 96 89 97 19 9b f0 1b 6a 4d -34 28 ce 4c 96 d1 c4 87 b2 83 0c b9 e3 5d 64 05 -56 23 69 9a b4 97 9a 02 58 4b 92 e6 ba 39 e7 57 -28 40 79 ab f1 33 a7 da 54 e5 42 52 17 a2 10 f6 -7c 18 26 9b 51 1f 61 f8 c5 - -# Encryption: -a8 55 48 01 3b d0 e2 0e e0 eb d3 6f b7 48 97 7f -98 58 46 d7 61 0e ed 24 c3 6c d8 30 33 dd 2a a4 -58 0b d1 53 35 20 9d cf 78 2e e2 6c 48 c3 06 44 -b0 b5 cc 86 c8 cd 16 5a e2 1e ad f5 78 04 18 67 -76 07 03 18 75 e2 21 ec df 3b 10 57 31 6f 3f 12 -a4 7d 5d a4 0c 41 53 9b 63 64 30 da 2e 54 21 90 -11 9e 42 9c 53 c2 22 6f 95 9b 19 cc f4 8a 3d 24 -02 17 c4 de 70 d7 07 2a 7e 0d 95 b6 16 d1 15 a8 - -# PKCS#1 v1.5 Encryption Example 1.6 -# ---------------------------------- - -# Message: -26 52 10 50 84 42 71 - -# Seed: -3c 6a 04 71 da f0 0b 7c 2e fc 9e e8 80 41 65 4f -87 62 90 07 c1 24 32 22 11 a5 f4 ea 3c 58 23 85 -7b c8 fc 7e 21 c9 45 48 b0 ee bd cf f7 91 60 e1 -12 46 1e 40 50 91 10 cf dc 4f 0f 13 c7 fb 92 1a -ba c8 df aa c2 1a cb 0f 7b 8a 13 a4 b5 cc a5 23 -d5 c7 dd f7 05 23 eb 57 0c 59 b6 c7 ae 97 67 e4 -ec 9a 63 d1 13 6d 10 23 1b 40 1e 20 e7 41 02 84 -83 48 01 7a 16 16 - -# Encryption: -5e 51 43 63 28 7d e9 b3 80 04 8c c4 43 5d 53 29 -4a d5 94 1c 55 1a 97 e1 3c 16 dc 13 98 de 61 0d -c7 33 7b c6 bd e5 78 e9 e9 f5 6a f1 44 54 f2 e8 -31 be ef 32 31 a8 50 68 e8 fe f7 2c 89 e1 df 1c -99 43 0a 60 f6 d9 42 89 cf ba 87 b2 b4 32 a4 0b -88 db 61 da e0 88 f9 ed 4e 28 4a 21 63 af 65 bf -2b 43 55 9a 5d a2 ae c5 bb 8f 43 f9 2c 1b 04 a5 -14 6a 65 b6 e0 19 b4 cd d2 94 0c 35 d9 64 5b 2d - -# PKCS#1 v1.5 Encryption Example 1.7 -# ---------------------------------- - -# Message: -8a 84 7d d9 e2 - -# Seed: -a1 3d ff 8a 48 e8 04 94 ae 66 e6 ba 9f 17 9a 01 -0d 9e 6d 40 31 87 96 7f 99 fd d9 0e f9 0e 0a 94 -07 3f f0 e4 d0 e6 66 4f f3 73 b5 09 95 3e 04 ef -77 83 be 0f b4 6c 8a 9f c0 ed 8c 1f 33 cb 4d 0d -2f 1d 0d 5c db a1 4d ca 50 8c a1 d7 3d 20 80 18 -63 9b c8 e1 65 86 23 de 1e 5b a3 f0 5e d0 91 4d -2f 96 90 2f 25 20 33 2d 84 92 d3 73 4a cd eb bd -f4 3e 50 a4 3e 7a a8 72 - -# Encryption: -82 7a 67 e8 15 78 1c 4d 4e 2b 2e 16 9d 80 ca e9 -36 68 72 a7 92 af bf 3c 0c d5 1c e2 8c 70 e8 6d -41 eb b9 75 2f 3f 92 db a5 1a db b6 85 1b 1f 78 -45 61 a8 f1 97 20 8f de 02 97 0b 38 f2 a9 74 22 -ec 7f 4f c8 a1 06 75 a9 db de 10 9e ed 0c e0 65 -27 70 3e e0 5b 65 7d 34 08 f7 fd db 1e ec cf fa -e1 6b 1d a1 07 30 7a 2c f2 56 fa 60 e8 15 21 72 -de 9f 95 27 fe 92 0a 90 1d 93 c4 f4 d5 7e 54 6e - -# PKCS#1 v1.5 Encryption Example 1.8 -# ---------------------------------- - -# Message: -37 32 36 b7 20 2d 39 b2 ee 30 cf b4 6d b0 95 11 -f6 f3 07 cc 61 cc 21 60 6c 18 a7 5b 8a 62 f8 22 -df 03 1b a0 e0 e8 2d d2 f3 e5 d3 1e 4e a2 57 b1 -5b - -# Seed: -21 99 74 a0 87 f0 a2 81 93 e6 49 a0 4a e9 d8 4c -f2 c8 a9 a4 6c df d8 f1 ac 62 c7 e0 f2 0f 4e 27 -03 0c 72 b2 0a 5d b7 25 b4 a8 68 3d f5 55 6e e7 -94 7f a0 a7 66 1b 6d 99 dc b7 9e 49 4f 46 73 f0 -73 a0 41 dd 90 7c 87 32 4e 86 25 dd - -# Encryption: -1a 6d f5 75 99 84 f2 c4 11 93 55 c5 db 35 c8 a4 -78 16 4d 5e 5e e7 7b 49 91 f1 04 ba 91 b9 87 0f -15 91 be 1f 19 f5 5a 80 51 a6 2c 0e 59 49 3d f6 -f0 0f e5 0e f7 3a 6c f0 c4 35 41 f5 32 0d ab 7b -2f c6 7c 93 22 5c cc d6 d5 03 47 aa 96 9a d8 7b -d3 d8 20 81 45 4f ea d8 10 dc 1a b8 c2 17 81 f7 -61 2e 64 06 72 9b 32 2e 04 b1 62 4f 85 38 98 56 -59 ae 34 d9 93 1e 01 9f 76 2c 79 7d 5c bf a3 2d - -# PKCS#1 v1.5 Encryption Example 1.9 -# ---------------------------------- - -# Message: -97 e0 b6 36 bf dd b8 e1 c8 a9 cf 5b 30 5c ef 3a -8f 47 f9 a8 b3 34 4f 13 55 fa 3d ba b6 7b b9 72 -10 - -# Seed: -c1 f8 9b cd c5 60 40 d5 e6 63 b7 4b fd e2 39 7b -58 46 08 cd f3 2d 5a 58 44 72 4a c7 e5 98 a8 6e -f7 11 4b 1b e0 87 30 cb 10 f6 61 fb fb 86 09 f7 -c6 c3 74 42 a1 b1 1e 04 a6 11 ff 8c a5 ce 9a fc -1e b3 aa a9 2c 9f 28 ba e2 20 44 05 78 99 02 26 -07 83 78 c4 93 41 13 74 c5 3e 3d dc - -# Encryption: -87 3c c4 dc a4 27 97 2b 63 c6 cc 8a c1 1c cc 33 -c9 59 f7 fc fe 4b 45 bb d4 7b 29 d9 c9 88 c0 1a -96 bc 1e ae 0e f9 b1 94 8d ce 2c c9 f0 aa 91 7e -86 a6 c1 1f 8d a3 da 29 df 90 59 01 f1 91 8a 76 -16 8d e1 17 5e 27 35 12 8c 09 72 99 d6 6e a5 cc -f9 b9 5b 36 92 ee bf c6 ea 11 bc 37 09 1b 79 5f -18 80 3d 70 e7 95 58 e1 25 16 23 0f ed 55 15 e5 -1b 45 ae 86 ce fe 47 b9 37 90 e4 99 4d c4 1e 05 - -# PKCS#1 v1.5 Encryption Example 1.10 -# ---------------------------------- - -# Message: -82 b5 07 5b fc 88 f4 00 65 76 aa 80 a0 00 7a 74 -51 18 4d 4f 76 0c f9 24 28 04 22 2b 0e 07 26 f5 -55 03 0e 4e 6b 01 f7 93 b0 97 01 81 27 82 4a 3e -40 24 57 d8 49 5f c0 - -# Seed: -d5 5e 3d 48 97 e9 d8 65 01 4c b1 5d 3e e3 f9 fb -d2 9c 92 e5 c2 37 dc ae 46 67 2a 46 3e aa a4 f7 -dd 09 86 1e 94 6a c6 5b 85 62 50 63 93 b8 51 92 -ad 41 fb 0c 48 c8 c0 52 98 1b dd cd 5f 1f c8 b1 -39 cd 47 ca cf fc - -# Encryption: -2e 83 c3 d2 88 01 5a 5f 50 3d 3e 5d e7 d2 ad 91 -06 54 5e f9 7d 63 e4 d0 6a 5a 0d 9d bc 29 f6 ba -fb 93 a5 17 3f a5 06 3a 69 39 db a6 c7 a4 28 c3 -5e 7d be 6a 95 93 fe 5e c4 c1 98 78 89 3f 31 37 -09 c8 76 02 72 6c b3 25 5b e7 5a dc 7f 2f 27 e6 -db 91 c3 a3 43 ea ff 1c 28 d9 d5 f7 cb 65 74 e6 -31 06 90 03 cd cf a0 77 43 a7 34 0d 58 83 9e 70 -8b f3 6a f6 34 2d b8 df a4 1f ea da fc 69 53 ac - -# PKCS#1 v1.5 Encryption Example 1.11 -# ---------------------------------- - -# Message: -36 48 c3 6f 85 1f 52 f2 32 87 79 09 19 85 a3 c8 -12 e1 8a 70 55 d0 90 bb f0 32 4c 13 79 3b b8 22 -1a 57 - -# Seed: -c1 27 71 85 c3 59 55 ca ed fd f9 de 55 d5 d9 5a -39 8d 58 f5 f3 33 19 1f c0 29 45 ef df ad fb 6d -b0 5e e2 a2 d3 41 83 ed f8 9a 1a 4d cc c4 65 91 -b3 53 2b a7 03 93 62 c7 5d f1 94 ec 10 64 48 af -b7 f6 bf b2 80 7e 38 3e 15 99 54 25 5e 82 7c b9 -da dc 8d 9b 7e 68 a1 aa 09 76 35 - -# Encryption: -88 62 f1 97 3f ef e0 af 02 d9 6c c4 58 33 4d ed -6c 02 d8 d7 ea f5 93 77 9c 5d 38 6c 4e 49 f7 68 -f1 30 b4 87 b3 c9 1e 32 3a 47 7e 4c 11 0a 33 41 -ff 46 ee e3 7c 77 3e 5c 0a c8 39 bc 55 cc 0c 07 -0c ac 01 cd 45 18 3c fe e6 b8 8b fb 82 36 1d 35 -60 19 7c de ab 42 e5 c7 55 d2 37 97 1a 88 da f6 -10 cb 39 52 61 4b 36 40 56 cd 49 14 20 ef fe 3a -0b 8c e3 1f 2e 3e 49 ca d6 f3 b0 64 0f 44 91 de - -# PKCS#1 v1.5 Encryption Example 1.12 -# ---------------------------------- - -# Message: -94 f7 8c f4 5c 53 fc 46 e7 eb 1b 26 61 8a 29 e9 -48 50 12 c1 - -# Seed: -e6 de 9e 9b 90 22 a5 5f 56 12 1d 5a c0 0a a6 df -29 9c 8a 36 94 22 e7 54 29 56 b6 da 2e 0d cd ee -96 8d b0 7d 99 5a 7b b8 76 f7 f8 cd 66 b2 f5 42 -c0 53 08 f7 49 83 a3 f8 36 0c 6b 89 47 f8 7d 60 -8b 03 1a 2c 68 dd e1 47 1a e4 96 ae 9b 16 e2 a8 -11 81 eb 6f c2 f6 5b aa ad da 64 22 a9 34 31 f6 -f3 b0 7b 5b 46 a3 cf 89 48 - -# Encryption: -3c 6d 3b 43 d2 3a db 79 d6 97 23 38 08 b0 74 48 -76 97 f3 35 fd 99 cd e8 65 41 1f b1 82 28 92 56 -1f dc 24 a8 b8 bb 2c 4f 65 3c 4d 15 6c 77 a7 5d -e3 16 00 b5 70 9e 8d 50 6e 98 e1 d3 73 cb da 01 -f4 d9 fe b0 29 71 98 ca d0 ca 2a 7e 3b 1e 63 90 -3b 10 43 ce 79 49 4c 57 54 f7 f9 0f c1 f0 73 a6 -19 92 9e f1 26 39 4b 06 24 f3 b8 ba 6d 56 45 e9 -90 e7 c0 13 2c e2 12 31 46 fd 9c ad f7 45 ec 61 - -# PKCS#1 v1.5 Encryption Example 1.13 -# ---------------------------------- - -# Message: -77 9d 1e b8 4f a2 84 c3 7d 29 d5 e1 79 d0 03 06 -b4 13 c4 4a 80 0a 07 7e 59 85 3f 63 05 f9 2e 59 -fb 7f 81 - -# Seed: -c3 e6 d1 8b da 97 78 2c a7 81 fa 76 d9 7a 6c 94 -d8 54 d1 41 99 b4 ea 7d 82 c5 bc bb e6 cd aa b5 -25 57 47 44 3c 59 bf 8c 77 ec da a6 4a e7 ce 61 -e2 c7 30 01 32 b7 54 e9 16 2f 7c de 75 8f 48 0a -e5 88 cf d4 4a 94 6d 64 e2 72 0a 2d 17 52 55 45 -22 04 84 83 81 18 ad 6e 6b 54 - -# Encryption: -72 2c a9 25 66 c7 3c c8 5d 19 ce 3f aa 14 cb 2e -79 84 9f 20 50 92 d1 58 92 82 31 3c 04 27 f0 67 -79 8a fa e3 e3 f0 a5 61 f3 99 34 6e 9d 10 7d a0 -4a f4 4b 0c 6f 04 4a de fe 09 7a 0c d1 4a 47 a9 -9c d9 81 9a 98 41 37 06 30 7c bd 0d a0 16 97 46 -9e ff 71 d3 14 41 63 94 93 fb ed 8e ee 1b a3 9f -dd 07 fc 0e a0 82 30 18 61 79 f9 0e 7e f1 3c 61 -ee 56 f1 67 fc 2f 6b 15 79 3e 1a 32 24 ff a2 9e - -# PKCS#1 v1.5 Encryption Example 1.14 -# ---------------------------------- - -# Message: -88 - -# Seed: -c0 16 9d 76 e4 ea 45 45 41 0d df 66 46 c1 ba 7d -d2 72 d7 c3 49 8b a6 b0 80 4b 42 61 30 a8 0f bf -ff 4b b7 b5 f5 59 b0 a9 09 0e 4a d9 b9 f4 16 a6 -df dc 15 01 b1 ba 46 87 7b 1a 96 fa 84 91 dc fd -de 50 eb ee d2 4d 3f 98 96 24 13 34 6e d4 a3 39 -3e 23 5b 77 bc 1e d6 74 68 ec e2 79 2a 2f d3 a8 -34 8f c5 50 9b 59 06 f2 88 56 15 df 8c 14 61 37 -7a 74 1d 59 52 fb 36 ea c0 20 1e 27 - -# Encryption: -4e d7 d1 29 1a 03 36 65 4d 5c a2 b1 f9 d2 0c b2 -da 72 26 f7 11 6b 93 09 88 43 9b 44 63 98 11 04 -bd 63 c2 ce 2b 77 d6 26 b3 10 9c 93 14 03 ac 5b -49 b4 24 7c 4f 69 67 b8 c0 db 06 3c 99 95 af 9d -36 54 06 50 93 8b 01 f9 39 06 f9 83 89 07 ed 59 -36 ab b3 43 b0 e2 55 09 a1 d2 d4 c5 c8 b9 58 06 -50 da 2c e1 1f a3 cf 3e 64 07 23 ea cb ee 87 fa -d3 ee 35 95 8b 45 07 5d f7 81 c4 13 46 6a f1 39 - -# PKCS#1 v1.5 Encryption Example 1.15 -# ---------------------------------- - -# Message: -a2 dc 08 77 78 d5 43 40 8e 89 73 f1 36 31 59 ed -b8 f0 78 3c 45 70 89 07 2d ce 66 d3 10 2b b4 fa -e6 0a a6 0e 41 93 3c 48 a1 be 39 53 ec 2f 80 4c -0c c9 6c - -# Seed: -18 11 20 14 06 53 29 d0 4b fb 0c f5 44 dd 38 d7 -be f1 54 9b 4a 49 a1 67 76 dd a7 4d 0a 7e dc 49 -67 b4 24 0c 37 14 2f a3 f6 63 9c 26 96 cd 7d 4b -18 a1 1e 2f b5 40 81 f2 de 5b d7 bd 15 cd da 92 -c9 4c 3a 47 18 7b 5f f4 3b 53 - -# Encryption: -71 15 19 0a 21 04 88 f0 4f a0 c0 0c 93 a4 68 a8 -03 0b 7b 9f c1 00 20 d8 31 0b cb 01 a5 c8 dd a1 -d0 6c e2 41 dc 77 5b 43 e6 f1 3b 19 ab fc bf 36 -16 e8 4f 10 7c 9e d8 0d 1b 86 bf 87 c9 8c 2b 62 -9f fa da a6 ec 01 f4 e6 75 55 8e f5 26 06 ea f1 -26 06 8f a7 53 4d d1 3b 92 0d 23 81 69 5a d7 75 -ff f0 bb 7c ec 46 90 90 1d 6f 1e 17 36 b8 2c fe -3a 0c 22 4d 18 f1 29 15 fd c9 5c 18 39 7c 35 70 - -# PKCS#1 v1.5 Encryption Example 1.16 -# ---------------------------------- - -# Message: -11 0b f2 b1 d0 dd 81 2f 2a 5a 21 f3 40 4f a2 f2 -c4 54 c4 43 2f df a7 0f 1b 0f 23 ec 69 c1 02 37 -73 a7 3a ba - -# Seed: -17 b8 5f 76 53 ff 0e f5 de 7f 25 69 6c d4 90 23 -ad 8e ac 94 8a 83 e2 24 58 ec d5 d1 0a 43 86 6d -c7 91 55 5e 64 f0 78 c3 8c 75 2b 6e 9c 6e ee b3 -39 ee c9 10 16 d2 58 88 6d 01 27 75 ad 64 36 02 -a0 f0 d1 79 34 54 a0 60 94 71 16 22 88 22 39 50 -82 6e d8 e2 02 5d a9 a4 e9 - -# Encryption: -5d 0f 2f d8 5e 6f 9d 9e 43 2f ad 86 0f dc 49 96 -96 24 ff 4f a0 71 5d 36 1e 9f 00 b0 5b 3a a0 ba -9e b2 7b ae 61 0e fd e1 14 3c bc 93 3b 52 de a7 -01 87 60 bb 25 1b e0 e1 e3 0c d1 c5 99 1a ef 74 -4d b8 2f 16 6b 90 63 ef b7 e3 38 40 a2 56 90 05 -65 4b 14 0e 11 5f a5 6c 30 40 6e 45 65 6e 81 99 -af 39 4f 63 86 34 6d 5f 1a 30 0b 95 ba 48 fc 08 -73 d6 18 d6 92 bb 02 5b f1 5e 9d 23 2c 64 1a da - -# PKCS#1 v1.5 Encryption Example 1.17 -# ---------------------------------- - -# Message: -d9 d9 37 13 1f f1 94 0a 86 bf 71 39 b4 81 14 36 -41 95 b4 00 52 22 a8 bb bc 26 1a 7f 2e 21 2b 8d -d0 35 e5 3f 91 44 f5 61 0b 4c ec 32 ea 01 bd a9 -d3 c8 0c f2 94 64 f8 0f 5f 56 56 c8 - -# Seed: -33 05 e1 da 60 e5 86 73 fc 46 cd 33 be 2a 66 d3 -a1 02 c3 db 16 1e f4 8c 0d 60 ef 25 03 1b 40 14 -16 78 26 24 6a a5 28 a3 a3 e5 b0 ab 95 07 8d 84 -01 d9 29 03 59 5a fc 1a a8 54 e6 04 4e 5e b5 f5 -be - -# Encryption: -0e 12 16 74 89 f0 ba ef ca d6 39 34 bc 15 9f 1b -bd 9e 9b 28 7e 50 0f 49 09 23 c1 6a 85 56 4a 1d -a6 36 59 37 5f 22 af 7b a4 97 98 e1 57 8c f3 15 -fa e3 e9 ed 56 99 c6 91 e3 c1 d0 bb 46 da 49 2d -01 34 9e 93 29 59 3d 43 81 d0 74 a0 a5 31 df 92 -1b 31 31 6f 7e 2b 4f e9 15 34 72 83 24 23 35 f0 -b0 b2 31 92 c7 21 02 f2 c6 36 24 b1 e7 89 65 45 -0e 82 30 d4 87 7e 46 17 b0 3d 44 83 13 98 dd bf - -# PKCS#1 v1.5 Encryption Example 1.18 -# ---------------------------------- - -# Message: -81 b3 4a eb 8a fb 8a 3f - -# Seed: -02 f7 48 34 2d 01 0f b5 6a 6f 69 f2 1f 8c 6a 63 -16 79 c8 c4 b8 f6 fe b5 25 cf 8e 72 fd a8 ef 8d -f6 62 31 28 c0 fe 74 bc 59 0c aa 34 f1 ee d1 ad -2d 61 42 dc c5 bc ae 84 ef 31 37 62 f2 e4 e7 03 -03 d2 09 c8 d9 57 7a 7c 84 3d 2b 91 72 ed 4e fe -2a d6 29 61 4b 99 a9 1a 4c c8 32 5b a3 24 11 6e -cf 0c 5e 29 09 49 38 ae 49 89 84 f4 f4 cb b1 62 -38 86 e0 39 73 - -# Encryption: -43 b2 76 c7 d3 68 ea 21 c6 80 71 16 cd e8 60 82 -98 f2 40 02 07 2d 77 6e 56 e6 2c 35 72 bf b9 9d -a4 c5 6e 93 8a 47 dc 07 5f a1 ff 7a 61 8f b5 fa -ed 3e e3 7b 91 df c3 91 53 49 5a eb a9 df 6d 45 -df 94 b0 e8 a8 ad 2d b3 7a 9f e4 6d 0f df 15 42 -31 fd 6f 32 21 47 4e 8f 5c 19 1f db 85 38 e1 a6 -03 e5 98 97 e1 50 fa f9 5b 65 da 14 06 67 ed b1 -98 09 eb 4a 16 ac d0 1e cc 60 4b da 57 f2 0e f2 - -# PKCS#1 v1.5 Encryption Example 1.19 -# ---------------------------------- - -# Message: -7b f9 fa d8 89 de 73 ed 87 3d - -# Seed: -fa 5d ad 45 a4 bb 5e 74 c4 cf 2e 21 3e d4 0a a9 -61 75 98 d1 1d 49 ae 1c 32 d7 94 e0 9c d0 e5 c7 -aa ae 81 b9 55 4d de 31 08 d6 0a 9a 82 f4 2c c6 -c2 a6 89 f4 60 ff 1d 53 ad 85 bf 83 83 11 e7 58 -9e 19 67 95 7b 51 56 7a a0 d3 3a fa 37 52 cd e6 -c5 66 1d 4f 27 ae d3 df 52 90 5f 1c f2 25 33 04 -61 8e 07 86 04 1e 70 b4 dc ba c8 c1 08 ba 34 ac -39 39 f4 - -# Encryption: -61 c2 55 0e 0b 36 a6 79 7f f8 64 93 80 1b 11 46 -d8 90 59 49 83 52 e4 c2 62 27 5b 14 04 b1 33 15 -e9 56 bb 3d 31 21 85 b5 21 b3 c7 08 e9 d9 54 02 -17 19 a0 59 d9 84 72 4c 53 c0 4f 5a d2 74 be f9 -ff 0a 79 50 b2 fd ec c5 29 0c d5 f3 bc 26 52 4c -d1 34 20 48 18 4b 0e 2c df 94 06 a4 53 a2 ef 9f -3b b2 3c 4e 7c 1c 8b 29 52 a0 20 2b cc 23 82 47 -ea 32 7b 8c 07 00 c8 00 3f d6 34 ec 1e d9 bf 30 - -# PKCS#1 v1.5 Encryption Example 1.20 -# ---------------------------------- - -# Message: -b6 a3 50 9b b3 b9 b0 b5 7c d5 8d e4 09 d9 53 20 -1a 04 2f 94 92 dc 1d 7e 34 a7 d0 94 1a 1a 1b - -# Seed: -3a 9e 15 06 57 86 b3 e0 1d 82 6b 86 2a 8f 70 2b -5c ac 8c 16 62 ee 7d 15 ff 32 3c df e7 1e bf 4a -d1 b1 f3 a6 bc bd d4 b0 01 08 77 ec ac 09 1f 61 -59 08 e2 be 40 0b b0 c4 98 e3 55 d5 71 fd 10 89 -5b 8e e9 c3 a9 c3 1e 4b 11 03 89 c3 d5 c4 6e bf -76 b3 b3 5a d1 f4 79 1b 6d 20 97 f1 09 f2 - -# Encryption: -6b 4b 6d 7b ab fe 4d 64 17 ac ad fb 78 57 2e 7c -87 e3 fe 1b d5 8e ef b0 d4 b1 27 9c 7b 7c 83 26 -a6 8b b2 87 95 e0 9f 9b 1c e2 e2 4a 53 9f 4b 0d -93 b2 92 74 ce cf 7c d9 f0 b7 32 ae be da 91 11 -bd fe 25 e2 68 a8 8e 34 22 e2 9b 52 bd 4b 7a 05 -47 db 8f e1 2a 6f cf 1a 3c 06 a0 02 bf 87 0a 2f -ab b7 c4 57 e4 bb ce 3e 31 6f 72 32 44 9f 87 a9 -d7 02 b1 2d 19 bd e7 f9 59 0f 94 67 b0 6b d5 8a - -# ============================================= - -# Example 2: A 1024-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -98 b7 05 82 ca 80 8f d1 d3 50 95 62 a0 ef 30 5a -f6 d9 87 54 43 b3 5b df 24 d5 36 35 3e 3f 12 28 -dc d1 2a 78 56 83 56 c6 ff 32 3a bf 72 ac 1c db -fe 71 2f b4 9f e5 94 a5 a2 17 5d 48 b6 73 25 38 -d8 df 37 cb 97 0b e4 a5 b5 62 c3 f2 98 db 9d df -75 60 78 77 91 8c ce d1 d0 d1 f3 77 33 8c 0d 3d -32 07 79 7e 86 2c 65 d1 14 39 e5 88 17 75 27 a7 -de d9 19 71 ad cf 91 e2 e8 34 e3 7f 05 a7 36 55 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -98 b7 05 82 ca 80 8f d1 d3 50 95 62 a0 ef 30 5a -f6 d9 87 54 43 b3 5b df 24 d5 36 35 3e 3f 12 28 -dc d1 2a 78 56 83 56 c6 ff 32 3a bf 72 ac 1c db -fe 71 2f b4 9f e5 94 a5 a2 17 5d 48 b6 73 25 38 -d8 df 37 cb 97 0b e4 a5 b5 62 c3 f2 98 db 9d df -75 60 78 77 91 8c ce d1 d0 d1 f3 77 33 8c 0d 3d -32 07 79 7e 86 2c 65 d1 14 39 e5 88 17 75 27 a7 -de d9 19 71 ad cf 91 e2 e8 34 e3 7f 05 a7 36 55 - -# Public exponent: -01 00 01 - -# Exponent: -06 14 a7 86 05 2d 28 4c d9 06 a8 e4 13 f7 62 2c -05 0f 35 49 c0 26 58 9e a2 77 50 e0 be d9 41 0e -5a 78 83 a1 e6 03 f5 c5 17 ad 36 d4 9f aa c5 bd -66 bc b8 03 0f a8 d3 09 e3 51 dd d7 82 d8 43 df -97 56 80 ae 73 ee a9 aa b2 89 b7 57 20 5d ad b8 -fd fb 98 9e c8 db 8e 70 95 f5 1f 24 52 9f 56 37 -aa 66 93 31 e2 56 9f 8b 85 4a be ce c9 9a a2 64 -c3 da 7c c6 86 6f 0c 0e 1f b8 46 98 48 58 1c 73 - -# Prime 1: -cb 61 a8 8c 8c 30 5a d9 a8 fb ec 2b a4 c8 6c cc -c2 02 80 24 aa 16 90 c2 9b c8 26 4d 2f eb e8 7e -4f 86 e9 12 ef 0f 5c 18 53 d7 1c bc 9b 14 ba ed -3c 37 ce f6 c7 a3 59 8b 6f be 06 48 10 90 5b 57 - -# Prime 2: -c0 39 9f 0b 93 80 fa ba 38 ff 80 d2 ff f6 ed e7 -9c fd ab f6 58 97 20 77 a5 e2 b2 95 69 3e a5 10 -72 26 8b 91 74 6e ea 9b e0 4a d6 61 00 eb ed 73 -3d b4 cd 01 47 a1 8d 6d e8 c0 cd 8f bf 24 9c 33 - -# Prime exponent 1: -94 4c 3a 65 79 57 4c f7 87 33 62 ab 14 35 9c b7 -d5 03 93 c2 a8 4f 59 f0 bd 3c bd 48 ed 17 7c 68 -95 be 8e b6 e2 9f f5 8c 3b 9e 0f f3 2a b5 7b f3 -be 44 07 62 84 81 84 aa 9a a9 19 d5 74 56 7e 73 - -# Prime exponent 2: -45 eb ef d5 87 27 30 8c d2 b4 e6 08 5a 81 58 d2 -9a 41 8f ee c1 14 e0 03 85 bc eb 96 fb bc 84 d0 -71 a5 61 b9 5c 30 08 79 00 e2 58 0e db 05 f6 ce -a7 90 7f cd ca 5f 92 91 7b 4b be ba 5e 1e 14 0f - -# Coefficient: -c5 24 68 c8 fd 15 e5 da 2f 6c 8e ba 4e 97 ba eb -e9 95 b6 7a 1a 7a d7 19 dd 9f ff 36 6b 18 4d 5a -b4 55 07 59 09 29 20 44 ec b3 45 cf 2c dd 26 22 -8e 21 f8 51 83 25 5f 4a 9e 69 f4 c7 15 2e bb 0f - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# PKCS#1 v1.5 Encryption Example 2.1 -# ---------------------------------- - -# Message: -e9 a7 71 e0 a6 5f 28 70 8e 83 d5 e6 cc 89 8a 41 -d7 - -# Seed: -16 8e 3e b5 80 9b 08 70 e1 f2 48 7e 1b e7 7a 17 -6b 34 71 6d e1 41 ba 4c 90 59 da 90 e5 e5 1a 36 -94 e8 58 fe d1 0b 92 6c 02 52 39 80 a8 90 9d a9 -96 c6 43 33 ea 67 67 87 bc e6 77 f1 1f da 77 db -b1 a9 51 6e dd a9 b1 29 4f c2 e4 50 52 22 88 e9 -30 be 7f a7 29 b2 50 e3 aa c5 20 51 1e 95 16 aa -86 3a f6 bc 07 5c bd bf f4 30 46 70 - -# Encryption: -71 c2 b8 fb 38 19 f1 34 c2 24 7c 6b ab b4 cf be -17 d7 b2 64 3f 87 ac e5 c5 71 27 7b e1 90 8e f3 -a5 28 8e 34 38 4e 46 0a 70 38 6e 7e a1 d1 9d 3d -ca 1c e1 5b a9 32 39 a8 cd da 18 e3 17 fe 07 96 -80 ce 7e 6a c6 d9 bd af 86 cb 9a eb f1 cf 46 cd -10 ef 6a 68 8b 0c b2 ce 76 5d d0 b3 25 20 42 39 -66 ee e1 aa 05 c6 c2 8c 6f 35 24 fb 68 6b 5f b1 -58 53 65 9e 58 3a c4 37 21 9d ef 8e dc 58 be 2d - -# PKCS#1 v1.5 Encryption Example 2.2 -# ---------------------------------- - -# Message: -66 4b f0 5d 61 2b af 61 52 4c 60 8e da 36 fc 6e -a2 c9 3c 14 31 53 22 1b cf d6 ba 0c fb bd 6b 64 -14 47 e4 78 8b 0a 46 2c b5 b3 f9 fa fc 9a 75 - -# Seed: -e7 f0 a2 79 18 ca d9 15 da 28 11 36 59 ff b5 df -a0 b5 1b 24 d5 a7 1c 20 27 f8 e4 d9 40 9e 8c 64 -72 f0 c5 4b 5c 08 85 8d a6 3d 4b 81 72 b0 7d cf -8c 5a 7e 8f 9e 90 f0 17 c2 4b 44 d1 6b 67 0b dc -96 03 0c 83 53 a2 83 9b a4 c0 75 d2 4c 20 - -# Encryption: -06 86 90 18 13 db 05 3a c7 08 e3 fc ec 6b ae 03 -60 08 8f d3 44 e9 d7 ea 11 8b b3 f5 37 53 14 25 -1e 60 67 37 f5 82 4b 36 28 f6 65 03 48 f6 ab 55 -3b 27 7d a0 15 44 d0 56 73 ba ed f4 55 cc 03 32 -f6 13 f6 54 78 fc fe 06 67 34 c4 65 58 bc 23 3b -4b 6f 52 41 e4 f4 ac 53 fc 18 c5 53 84 c8 fd 96 -18 3f 0b b5 51 5e 89 31 14 f9 c6 1c cc 11 fc 19 -83 de 74 46 92 64 db db b0 c7 49 17 4e cd fb e3 - -# PKCS#1 v1.5 Encryption Example 2.3 -# ---------------------------------- - -# Message: -5e 76 e6 6e d5 75 41 fc 23 d3 59 f4 ad bf 3f 56 -82 01 d3 c6 f0 e0 26 aa a5 67 63 56 cc 98 66 f1 -75 5d e9 8c b3 9f 23 6d af a9 e6 bc 79 4b 74 43 -b5 3a 2d 85 - -# Seed: -5c 65 68 b6 e3 3b c1 3a d2 dc d6 01 2d 17 da 81 -b1 3d bd 62 aa e4 0a 64 af 97 e2 19 e7 5d c1 81 -12 60 77 d1 20 dd a1 9d 63 12 cf 1e 98 71 c1 15 -f0 86 7f e6 62 d7 8a 40 31 97 6b dd ef 68 f5 2b -68 99 58 67 cd 80 95 05 dd - -# Encryption: -19 e7 99 66 ff 1f bc 10 07 3d e7 3d f3 a5 31 63 -78 74 e4 7d f6 39 25 6c 51 d0 bb a9 35 61 0b 46 -34 f9 e5 b4 68 9b d9 21 73 5b 32 23 6e fc c6 e7 -cc 49 a9 e0 6a 25 ac 96 59 b7 fe 82 9c b3 e8 b0 -1f 10 31 79 42 23 65 74 1b 76 c8 34 21 49 ce dc -76 eb 0a d0 18 ed 42 35 fb d5 24 fd 87 c9 54 9a -b3 3f f2 3e e4 f8 20 0e fa 33 02 7e 9d ee c6 0f -ac 01 3d 1e 56 e6 e3 33 d4 93 a4 a9 46 0f e5 8a - -# PKCS#1 v1.5 Encryption Example 2.4 -# ---------------------------------- - -# Message: -5b 19 50 48 eb 90 eb 47 93 - -# Seed: -bb bd 49 55 0e d1 ea 1b 6b c7 20 6c e0 b0 03 a6 -32 a5 2b 0b ac 5f 32 71 0b 39 fa 64 b3 55 6a d6 -f6 c8 2b d9 d5 31 b3 07 46 9e 86 3f 54 b5 fe 21 -83 05 69 54 f2 a9 67 e4 dc 2b 32 6e 41 dd df 74 -3a 76 4f 7e 82 88 68 29 a8 fa b2 77 2a 34 97 70 -6b 95 38 a9 f8 42 96 c8 2d 9b af c2 9c 39 d4 68 -4f 75 ff 6b b1 c1 2e 39 bb 80 56 af 2d 24 34 4b -2c ae 46 29 - -# Encryption: -42 c9 cb 68 21 b5 5d ae 30 d9 00 25 75 31 12 e6 -ee 02 f4 ad 6f 0f 5b 3c c4 95 2a 12 7c 8a 16 f6 -64 79 b8 14 4f 3c f2 9d 84 e4 3d 67 d6 77 12 c7 -f5 b7 6d a2 c6 6b a0 e9 0c d4 b1 fc 1c 1b 3f 17 -a3 92 e7 04 08 28 8a f6 9b 50 fe 8a 50 b3 29 6a -0d ab d7 c8 dc 39 84 a1 94 06 88 be 70 98 25 16 -20 25 6c c2 1b 7c 76 ed 29 d8 6f f7 c0 1e c2 87 -df 47 38 be 34 69 b3 0a 3f 8f b7 be 83 d9 36 1a - -# PKCS#1 v1.5 Encryption Example 2.5 -# ---------------------------------- - -# Message: -66 0b bd 40 06 9c c6 7b ad e4 1a 09 ec f4 3c c4 -51 3f 7c 7c c0 2d de 97 2d 2b 1f 29 29 5e 09 b9 -91 0c 59 ed ba 0e d2 dd f1 1a 6d 41 69 35 1f 97 -24 07 33 52 8f 91 b2 68 fa a7 af 90 6e - -# Seed: -30 7f 61 b1 83 a8 dc f9 15 5a b2 35 e6 1f b5 6b -a2 b8 79 5d c4 23 53 85 e8 ac f3 66 d2 52 33 b4 -70 e0 5d 70 11 b6 fc 53 2f 0a 65 8a d1 3a fd 29 -0c 6f 30 e2 79 5e e3 d3 9d bd c8 0f 56 0e ce 2f - -# Encryption: -04 9b 26 05 0a 3a be f8 3e c2 77 61 11 e3 b7 2f -b9 a2 d6 a8 01 05 5d 6b 5e 0d a4 e9 5c cf 2e bd -0a 78 6a 97 21 aa 79 25 bf 15 be b6 27 13 a3 13 -87 7d d8 5d 26 58 b2 08 e8 8e 64 45 fc 35 01 9b -0c ad 6b f4 d0 6e 2c a5 f1 19 49 ee ee 7e e4 7f -1d 5b 4c 88 24 1f 50 e4 d6 ed f0 18 3d 4f a3 5a -37 1f c4 07 36 4f 2d ca a4 cd ae ce fc ea 6d fa -c1 d5 13 f9 05 e7 47 94 47 44 bb 64 57 6b a1 c8 - -# PKCS#1 v1.5 Encryption Example 2.6 -# ---------------------------------- - -# Message: -81 cb 0a 97 69 8f 82 3b 56 b4 5f - -# Seed: -93 8c 8d fd a0 8b 89 05 5b 68 af 01 1f 24 6c ec -1f 93 a2 77 1d a9 7d ba 20 95 4c 90 09 12 28 5e -5d b1 87 b2 9e 32 72 e9 9e 69 4e 12 14 17 25 28 -45 30 84 06 4e 5c 60 f0 1e 78 6f c5 d0 d9 af 06 -39 a4 98 c5 7a de 93 77 60 ae 51 74 84 af d7 02 -5e a0 d5 5a 62 b1 1f 9a ab 7f a5 dd d0 93 e5 ea -ba d6 1b 67 a2 95 a7 75 be 96 c6 b7 6e c3 fe 47 -29 50 - -# Encryption: -7f b8 f3 35 ee dc 4a f6 af 44 07 3d a1 96 45 7d -04 61 45 03 01 47 f8 42 0f c7 9b d5 89 77 4a 73 -0a 6d 94 fb 7e fa dc 5a ee a7 c0 70 f1 89 24 91 -25 e1 66 c6 d3 01 29 ec f2 c4 82 2a 50 49 6b c2 -f2 1e 79 ac 57 db fb dd 71 a6 8b 58 d9 05 1b 48 -0b f4 77 48 a1 3d fb 67 3e ae d7 71 0a 46 8f e7 -2f 7d 74 e6 f4 a2 89 44 04 3a 52 d9 30 de 68 db -cb 6e e7 fb 8b 69 64 05 41 e3 ed 5b 75 4e 65 fe - -# PKCS#1 v1.5 Encryption Example 2.7 -# ---------------------------------- - -# Message: -05 f7 83 56 23 c8 cf aa e4 82 a9 10 85 b9 7f 6b -95 92 8b b9 74 ac ad 02 36 4a af 13 17 ed 53 c9 -db 2f fb c8 a3 cb 3a 00 f4 4d ac ef 78 - -# Seed: -80 c8 3d 25 47 be 41 ba f2 32 1b d3 0a 9a b7 74 -9c 5e eb b5 a1 ff f0 b3 1d 6b db 0a d1 6d d0 c0 -fb 3e c1 57 e7 8b 09 86 60 20 41 cd e8 89 57 a5 -53 29 e3 e2 cf e8 5a 59 44 74 94 5e fa 33 35 85 -ff fd 41 eb b8 e7 c5 18 c3 c9 25 9a ea 8d e6 35 - -# Encryption: -87 f9 ce 05 f0 ac 9c 05 e4 5f b7 bb 55 5a 7a 18 -a9 cd c5 5f 54 4a 54 21 01 e9 a7 1c d2 03 66 82 -0e 7f f6 dc a3 46 75 22 9d 86 e4 fb 58 71 f9 31 -0b 12 bb 74 e2 86 18 d6 d6 58 65 87 f6 6a cc 89 -68 a8 3c d8 07 f4 d2 12 97 73 1d 7c 22 c1 45 99 -e7 57 19 fd 23 05 2b 8a a6 5b 7e 9c 5c 02 00 38 -2d 35 d5 60 f2 d3 3d d0 49 e0 6a c8 27 cb dd 9a -f5 81 a6 b2 6d b6 1d 43 d7 12 4b 34 72 1d f1 42 - -# PKCS#1 v1.5 Encryption Example 2.8 -# ---------------------------------- - -# Message: -e2 e0 f6 b3 28 d9 bb e9 fd 66 cd 87 98 7c 11 60 -ed 23 7b 1c 7c 65 6a 89 fb 1f 21 d7 09 40 3b 04 -10 f8 e4 e1 2e b9 69 0a eb eb 38 07 31 9a 93 65 -64 f6 67 17 a7 1c 48 62 cc c5 6e - -# Seed: -cf 18 e6 08 b1 56 14 5c 44 de 31 49 66 cb cc 66 -74 a4 5a e0 df 90 04 06 e4 0d 3d fc 32 2f 39 40 -4c ee b6 dc 58 f8 01 bb f2 ac 4f 47 84 1a bd 79 -61 79 d0 82 4f 3b f5 51 8d 78 cc 66 ad 8d fb ed -b1 17 - -# Encryption: -14 01 aa 21 ec 6e ba a7 e3 a9 f7 13 c8 6b 50 8e -37 5f 6c 12 5b 29 62 6e bd 34 9f 64 e2 0f a4 8a -1b 06 84 79 ff f3 30 22 f6 6f 86 e9 7d 9c 5e dd -90 26 e3 18 3c e0 86 41 57 06 59 35 2f 87 a6 18 -91 f3 d8 6a 3d 24 5f 02 45 e3 9d 99 89 2c 67 fa -2b ed 8e 37 54 8d e2 3d ef dd 1e 43 d5 d7 e3 d9 -a3 c2 2c e6 a3 68 d8 4c 5a fa 1c c5 bf 49 b6 8f -e5 c2 5a 32 6b 0e ec 5e 44 c5 e2 ff 5a 35 9d d1 - -# PKCS#1 v1.5 Encryption Example 2.9 -# ---------------------------------- - -# Message: -c6 95 78 ea 03 e2 69 b1 b9 16 33 a7 2f 9f b4 d1 -0c - -# Seed: -e0 a1 a9 ba e3 0a 7a c6 6c ab 3d 86 43 3c 1c a5 -e8 ac 2b 74 e4 83 ca 7f 34 59 77 16 ee 16 18 90 -6c 97 77 2f 28 86 f4 6d 78 31 21 b7 fe 1b 8f a5 -fb ec 09 c0 68 e5 63 5c 89 e6 a0 a9 ac cf 2b 12 -c6 47 06 b6 ae 9a 5a 74 ab b8 3f 64 e1 3a 8c 53 -f9 26 76 04 66 b6 45 e2 8e 9a d6 46 1a e7 b8 9d -5e fc cf 7d 89 14 9a a2 e6 9f 0d 25 - -# Encryption: -78 f8 7d 6b 06 76 1b d7 e7 17 e0 c5 eb 40 e1 fb -80 89 9c 7b e4 01 7c 2e fb 07 59 78 ee 38 d0 f9 -5e 98 03 dc d4 0f ee 97 92 c6 1d 4a 2d 85 da bd -ea 96 ca 29 f3 ca 1e 8b cf 81 76 55 d0 c0 94 74 -d9 80 94 eb 6a 7e f0 33 3d 69 71 c9 38 36 fe 02 -32 f7 18 46 3d c9 54 18 53 46 3b c1 cf 03 67 7e -78 6e e5 2e 72 71 c3 c1 1a c0 05 53 c6 75 27 07 -e0 df 92 80 c4 f2 b7 d1 9f d6 f3 d8 bb cc 7b e6 - -# PKCS#1 v1.5 Encryption Example 2.10 -# ---------------------------------- - -# Message: -76 72 cf c2 7a 41 d5 01 aa 4c 41 ba ab f4 52 5a -7c 45 5f c8 - -# Seed: -4c ee a1 a8 94 64 a5 d2 f8 9e 07 89 53 ca f7 76 -36 58 98 a5 bd 5e 8e 44 8c 65 da 26 ff 98 90 0c -d0 80 61 ef 44 6c 69 b4 8d c4 60 9e d8 65 4a 64 -6d 70 82 62 cb 84 09 ac 27 c4 a4 9a df ed 47 a8 -5a d4 29 ed 75 07 75 78 e4 c2 73 c6 1e 2c 3b 46 -be b4 72 f0 a3 45 a0 5d 61 a7 ea aa d8 a6 3e 0b -3d 49 52 f2 7c 40 81 32 9e - -# Encryption: -25 2b 14 13 3f 1d b2 50 13 29 35 01 e3 56 53 4f -26 af e3 34 68 8e 68 d7 91 83 3a 0d 82 56 05 70 -bb b3 ce 2b 16 d8 b5 f7 f8 9e 7e bc 7c f9 c2 94 -ab 34 16 b7 c2 11 87 70 7f e5 e7 99 2e 72 0f f9 -58 da a4 0f 5a d4 5b c7 47 47 96 39 a5 37 fe 0a -4a 75 fc fb 45 a5 3f 01 73 af c0 f3 cc 91 0b 86 -ae 31 37 62 8d 90 ff 67 5a e1 ae 31 e1 64 05 37 -ea 1a 7c cc fb 73 f8 be 5a ec a0 3b ab 19 3b b0 - -# PKCS#1 v1.5 Encryption Example 2.11 -# ---------------------------------- - -# Message: -a1 6a d8 f2 e0 93 23 42 ed 21 e1 37 77 f4 65 2a -35 50 dd b4 36 8b 5e a7 1c 66 db c3 bb fe b7 db - -# Seed: -55 88 4c 83 0d 4a 80 b7 9f 08 9d a7 4d c2 5a e0 -c4 82 46 21 45 e1 d0 95 23 da 3c 93 44 bb 97 b0 -52 fb dc 15 43 df b5 3c f2 37 82 59 68 7c 7b 1b -35 ca f2 f9 19 99 ed 4a ce 39 af 10 d6 be d0 fa -22 44 4c 12 9d 90 74 1c fc da 90 19 8e 27 82 fb -03 bd cc 7c fa fd 89 db 6f b0 fe d2 24 - -# Encryption: -08 32 6a ff 6d 03 cc 4e 26 10 dd 53 6a f7 f2 1d -76 22 7d 82 7d 52 80 d8 b8 3a b9 eb 30 e0 76 9c -fa 02 b5 c1 35 2b f4 d1 70 ce b6 6f 8b e6 98 78 -4e 1a 6c 20 3f a5 ab 90 07 a6 f7 fc 20 65 20 4b -98 2f a5 61 fb b3 61 af 2b 8e ea 42 ab 3f ec 0e -d0 86 22 e5 f2 89 80 52 75 38 0b 69 34 2a 96 f7 -6a 99 04 87 68 90 d9 2f 24 00 20 32 35 1d 8a 1c -bc 3d 27 b2 46 48 21 bb fb fb b9 a6 78 51 96 10 - -# PKCS#1 v1.5 Encryption Example 2.12 -# ---------------------------------- - -# Message: -4a - -# Seed: -8a a0 ce d1 7f 09 ad ae 61 0a 46 03 0d ad 40 31 -1b f1 46 9c 27 37 41 1e 40 f9 23 96 75 1d d5 66 -37 c9 58 db c5 8a 17 fd bd dd db bf 79 75 18 78 -98 be 1a a6 3c 5e ee 5f 9a 19 02 98 0f 59 51 84 -b9 b5 b4 65 b9 2e 20 f7 ae 8b 5a 5c ee 7f 3b 57 -d9 97 a0 6a 70 2d 23 83 50 a9 26 98 ef 27 5d ff -52 77 bd 2c 99 96 47 40 5a db e4 fb 3f 1b e7 5e -15 9a 4c 43 83 13 b7 fd 8a ca 9d ea - -# Encryption: -4c 4e 5a b6 2d 0c 96 7a b8 29 21 42 9f fe 50 d2 -24 0e 7e 0a 18 75 48 87 55 bb 7f f6 15 a8 c9 9a -bc 37 b2 e4 71 47 a9 27 d7 b9 8c 30 db 24 da 8c -d3 5e 13 d7 b7 14 14 d0 32 bd 0c 3c e3 8b 89 b1 -1b 2c 3f 9d 83 08 16 71 6a 2e 8c cd 8c 79 e9 c7 -49 31 a7 b8 a8 db 13 12 8c e4 0b 21 59 e4 98 da -98 f2 aa 35 2f 23 85 31 06 b6 61 d8 8e d0 6f f6 -6a 56 e7 56 59 72 20 bd 10 15 81 53 ce 5c 02 63 - -# PKCS#1 v1.5 Encryption Example 2.13 -# ---------------------------------- - -# Message: -bf fc 42 08 73 f5 af 5d d2 3b b0 - -# Seed: -dd 31 cc d4 7d 4e 31 02 df 0f c5 9b 1b 84 77 af -3a 78 c2 fa 9c 8e cb 4f 0b 3b de 23 50 04 36 55 -03 64 66 5f 81 c0 35 6a bc 0b 78 e9 73 19 11 14 -02 75 c8 66 f7 5a d0 cb bc 88 ad 6b 5d 4d a5 2d -08 e2 2e e5 39 b5 8e 92 c6 19 63 87 e2 21 a0 87 -39 6c be 57 ec 56 03 f6 16 26 27 98 3e ff 82 de -04 8b dc 1b 5e db b5 d4 ea 84 f5 02 24 bd 88 a9 -05 da - -# Encryption: -0d a2 d6 f7 bc b5 0a 47 2e da 24 60 9d a6 77 28 -e5 3c 98 80 aa 5f b6 fb e6 0d 83 c1 1e 6b b3 cf -db 17 d1 4d bc e8 ec 55 c7 3a b0 14 3e 9b 27 56 -bb 69 68 e5 af 1a ed cf 6a 80 c2 6d 49 0e 47 18 -7e a5 d8 cd 2f ac b8 1c e6 4a 72 3c 40 f0 ba 4c -69 3e 1b 11 43 df 15 a4 20 91 70 9a b4 c7 cd 9d -47 07 9e cd 68 f6 a1 96 44 8a 44 67 9a 04 14 10 -41 8f 11 a1 e1 bc e7 8e 77 26 04 a2 f2 77 81 95 - -# PKCS#1 v1.5 Encryption Example 2.14 -# ---------------------------------- - -# Message: -1a 9b 87 29 21 0a 84 71 fc 5c d7 09 f2 ed d3 24 -01 50 24 4b ec 96 a9 2f f8 07 e3 b3 0d 29 5d 3c -34 5c 04 4f 2e 95 60 37 - -# Seed: -58 78 c9 1b 16 6e 90 c3 4e 6e 66 56 8c 15 1f 4d -44 43 40 b5 f1 d7 30 52 cc 56 33 ea 2e 47 ac ed -7b 17 8a 64 fb 09 a5 ad 08 46 ae e4 11 6d 67 80 -ee 75 eb 20 85 16 68 82 0c de c0 f2 c4 96 e4 c2 -88 d8 27 9c 1c 5d 4e c0 0d 98 0c 27 2e 87 05 18 -48 6d ca ea 85 - -# Encryption: -37 00 ac 36 2c f6 0e 16 39 47 a1 98 d0 0f 3b 3b -26 e0 3e e2 fb 78 2b 42 88 b8 c1 de 76 e9 e8 99 -46 c9 80 7c 56 e0 9c 7b 52 be 00 78 ac f6 92 96 -4a cb 97 d1 fa 5c eb 57 76 a1 d5 56 b4 bc 9d b0 -0b da 25 23 7a 75 1b 7c 22 9b 6b 57 f7 ff 75 1c -12 d1 f2 2a 4f b0 e9 0b 63 d0 42 d9 49 9e 0f 7e -fe ad d3 c5 88 f2 c7 43 a1 2c 56 7c 81 57 8d be -eb fd 37 74 da 34 ad 09 ee be 90 17 89 02 14 b5 - -# PKCS#1 v1.5 Encryption Example 2.15 -# ---------------------------------- - -# Message: -a6 d0 e8 c1 ea 4a b4 ec c8 95 7d 62 28 15 79 67 -5a 64 8d 62 b7 f2 2b 2b 08 d1 31 3f 40 6f 13 7e -99 42 67 35 cd b9 37 2f ec a1 ee 78 46 3f a5 de -9c dd 84 75 6c 68 bd 1d 92 ba 96 5f 50 64 10 b1 - -# Seed: -1c 25 c9 b8 32 16 9a 1f db 6c 14 8e 47 e6 6c 3c -c8 21 41 e6 11 a6 f3 0c c9 0c 50 49 e8 c5 02 b3 -1c ad c7 62 39 b7 bd af 93 fa 97 34 3e 7e e5 51 -bc 52 fd b5 ec 9e 40 0a f0 5d be ac da - -# Encryption: -00 e8 b2 fc 76 df b4 a6 cc 43 64 de 8f 68 3c 3f -cd 0a 9e cf bd 4a 5a 72 24 f4 9a e9 b4 f3 b5 cd -c7 1c bb 8c 66 fd 35 f3 d1 8e ca 98 96 7b d4 00 -5d f7 91 52 41 6f d4 7e 56 2c 55 ed c6 d6 12 12 -28 6e f9 75 bc c8 02 69 25 92 65 39 00 97 3c 72 -e0 1a 69 3b 05 fc 2d 58 56 ea ef 7a c0 8f f5 ec -d5 31 e2 c2 ce 92 77 45 a1 16 5a 51 aa 66 98 a1 -ff cb 87 f8 1e f6 51 0b ca f9 cb 76 1e 9e 1f 0f - -# PKCS#1 v1.5 Encryption Example 2.16 -# ---------------------------------- - -# Message: -f3 40 5b 21 8f 3e c6 03 a9 80 69 00 99 c2 cf 5c -be 0b 2b 05 96 79 c4 6b 7e 48 f6 fd c4 da 40 92 -d8 31 c8 b5 2b 2c c7 9b d2 bb f6 e9 f5 7b 4e 8c -aa 94 b5 81 f9 f2 31 26 1f 0e 2b bb f5 3d bb - -# Seed: -f4 70 7f 58 64 2b 54 cb f8 0a 9b 50 48 a6 ec 0b -d3 5d 09 57 16 db 12 06 0c bf 50 58 5f b9 23 79 -81 05 2f 7b b1 58 3c d8 7b c8 bf b5 5b 73 3e 89 -0e b9 c0 8e f0 e8 80 e9 ba 0d 50 ec 95 41 - -# Encryption: -6d 9d 39 19 8b 5f cb 13 2d 93 15 11 49 d7 59 91 -02 4a c2 2e b6 eb 2d c7 c6 05 8f 64 87 56 45 10 -2b 95 25 4e 25 e9 f0 ae 45 06 d4 3c 60 1c 18 8a -31 4f 4b b4 e0 38 c8 15 39 41 6e 10 5e 80 97 fb -69 5a ab 36 fe f5 16 e6 a3 3f 36 f7 f9 5a d1 ff -15 88 90 25 b1 b2 e8 1e 1b f3 b2 de 5b a9 18 7c -a9 6c eb a9 fc ec ef 9c 53 e4 94 34 86 18 59 67 -cf 7a 64 77 c3 29 f0 0e a6 95 52 5b ca 99 f2 c7 - -# PKCS#1 v1.5 Encryption Example 2.17 -# ---------------------------------- - -# Message: -6a fa db e3 da 68 d9 02 85 bb 8f 1e 21 29 ff eb -b1 c6 5b 95 88 d6 c2 c0 40 24 c2 38 b2 0c 65 d2 -ac a5 e3 82 76 00 0a 0e 6a 0d 05 37 ef ee f6 d3 -e3 d9 4f b9 - -# Seed: -ee 17 6e a3 cf d4 90 b6 c0 49 d2 e7 4c 90 c0 ee -74 68 52 03 49 b8 51 65 3d b0 58 a1 c3 e9 56 e0 -88 5f 26 1b 6e 71 cf 1e 62 3d 3b 9d 1d 56 fa 13 -67 e4 7f f3 74 ad 39 30 9f fa 2e 67 11 28 d5 ab -b4 a6 1a 5b 0d c2 db 2c 08 - -# Encryption: -67 2f e9 51 59 a9 89 3f 34 98 b6 16 c1 7b 59 da -71 da 80 2f eb f7 cd 38 11 06 14 a1 b2 5d 96 aa -8a 74 aa aa 2a 0f 00 0e f8 ac a3 b4 1a d1 61 b6 -26 33 f2 41 31 9c 33 e4 ec b7 70 6a b3 ad c6 a3 -ef ea 22 43 0f 3f 5c 9c 4c e5 40 4e b8 e7 5a 10 -93 69 c0 aa 0b 7d d7 13 bd 8b 77 cc a5 f7 4b ca -5b c5 55 69 6b 68 e1 17 2d b4 02 50 1d cd 26 49 -68 5d b0 fd 88 c8 83 60 da cc 65 09 ff a8 df c2 - -# PKCS#1 v1.5 Encryption Example 2.18 -# ---------------------------------- - -# Message: -6d 9f 9b 4b b1 23 ba 90 95 53 a7 57 3a 97 1f 64 -b7 25 24 cf eb 04 2d e3 92 15 f6 50 db 61 2d 66 -d7 ae 86 05 d0 44 19 54 62 5f a9 81 22 33 0e 92 - -# Seed: -7f f8 68 5a ec f3 40 26 13 90 ad 07 42 73 0c b6 -39 28 30 14 ab 37 73 55 6c 69 7f 97 ef 62 1a 4d -cb f8 ec 6e de c5 0d 8e c9 59 0a db af 23 51 dd -fa 0e 52 ea 6e d1 8e b6 c3 78 f3 80 85 ae 5e e4 -cc 48 c1 89 1b a4 7b 20 10 d5 d4 35 39 - -# Encryption: -8d 30 65 5c f1 5b f1 0a 46 97 87 c6 a1 0e 79 25 -4f f0 bd 11 93 8b c6 0a 81 a7 58 d9 3c f2 a0 30 -24 59 fc 2f 0d 77 00 b8 6d d6 ed 61 83 83 b4 4b -45 87 04 ca 11 92 8e 50 4f 02 8e fe 50 37 17 2c -3e 51 b8 37 be 61 56 de 6a 09 c5 55 97 be 74 c9 -7c aa 1d eb f3 14 cd 94 b9 1b 9f 94 cb f7 64 0f -86 c2 6d 1d 6a 0b 10 46 28 b5 87 11 4a a3 1d 99 -f6 9c f9 57 37 93 2c 0c b5 33 33 74 de a0 7f ac - -# PKCS#1 v1.5 Encryption Example 2.19 -# ---------------------------------- - -# Message: -33 cc cb 59 7d e9 5c ed b8 b6 57 fc d8 f8 88 86 -da 04 c7 57 93 53 14 - -# Seed: -53 42 f4 68 43 91 cd 74 f5 28 2d b8 31 41 ff f6 -78 f2 3a 3e a6 52 e0 d4 27 fb 6a d9 76 c5 a7 10 -a6 37 95 77 71 89 47 ac 72 7b 4d 58 a0 b0 bd 20 -7a e3 73 a8 b9 9a c8 e2 51 eb 02 45 8a 9e dc 39 -52 fb 28 42 6d 18 fd a1 8a 80 2b bf 0a 0b 8b 2c -f2 5c a3 a0 22 f7 78 c7 f4 7f c5 30 d0 b7 a5 bc -84 6e ea 91 80 f2 - -# Encryption: -8c 4a 63 d0 73 1e 2e 71 eb 46 15 18 9a 96 8b 3e -4a 24 28 56 b2 09 02 45 23 8b 66 45 97 8f 1e e8 -d7 98 11 06 2e bd 2d 1f 3d 52 3a e6 00 e0 e5 a6 -e4 05 c4 e4 b5 a1 6e 8d fb 49 24 30 4b 0d 1f f4 -d6 41 bf 98 7f c6 d4 1d 3e b7 cd c5 31 34 d0 06 -9c db 5a fe f7 f8 f9 ca c0 ee 52 30 b6 f8 86 22 -a8 4d e5 2a d6 f7 50 47 84 37 06 ca 96 97 42 c5 -8d a7 72 62 ff 1f 12 8a 66 4e 51 cd 63 5e 71 15 - -# PKCS#1 v1.5 Encryption Example 2.20 -# ---------------------------------- - -# Message: -19 d6 - -# Seed: -ea ac b5 78 ae ab f6 9d 4e ae eb 36 d0 4c d8 a2 -2e 8f d7 a2 5f 04 43 a1 1e 4e 08 b3 ff ac 1e 05 -42 1a 87 6c ca 91 31 82 50 be fa ff ef 9b 27 49 -dc 40 2f ad 4f db 7c 1b 66 aa 5e 08 9f f9 9f 8b -30 0c dc 46 f4 8f 56 48 c9 40 8b 5f 8b 3f 5a 12 -e6 50 50 dc bc 0d 53 43 d6 3d 58 08 19 21 65 2d -5b c8 2d d3 d7 0e 07 5d 32 d8 02 c2 97 64 78 fc -9f 09 93 dd 08 59 c9 0e 22 8e 87 - -# Encryption: -61 3b ba 5c 19 0a d7 72 e0 8c 29 07 6e 2e 9e 5f -12 ef c9 29 2e 3b 5c ee 52 c2 69 7f b7 b6 07 dc -72 e8 25 78 e8 b7 53 ba ca df 23 b4 77 25 21 3d -b8 9f 88 73 fa 79 b9 14 a4 b5 16 1e fd 9e 15 cf -a8 dd 1e ff e8 9f 89 47 a6 f3 82 6d c6 bf 53 be -ca 36 5b 93 81 18 45 62 a7 9e 21 ca 0e 68 eb f0 -ab 82 ae 76 2b 28 c1 43 65 15 2a e0 f5 4f 2e 9d -14 43 9a 84 6b 38 3f 5e 2c 55 ef a7 00 85 97 b5 - -# ============================================= - -# Example 3: A 1024-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -b9 30 96 d0 26 1e fe 00 0b 3d 17 04 f5 04 31 60 -ab d3 eb 56 6c 61 e5 3c 76 c4 01 e2 b6 55 21 bc -12 d4 81 21 51 83 e8 f4 6c 2c a8 d0 0a da 5d fd -04 dc f7 cf 36 cc 58 11 05 d9 9d 2a 7d d9 4b 56 -76 0a 65 64 fe e5 e8 aa eb 06 07 e1 45 19 62 10 -a3 1b 7e d8 dd 2a f3 2d 29 d2 ba d6 f1 5f fa 5a -11 dc 73 5c c3 62 19 02 1e e8 d1 ee ed 34 63 9b -5a 91 ac 6a 92 67 4e 18 39 70 c5 9d 5b 19 6d 4b - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -b9 30 96 d0 26 1e fe 00 0b 3d 17 04 f5 04 31 60 -ab d3 eb 56 6c 61 e5 3c 76 c4 01 e2 b6 55 21 bc -12 d4 81 21 51 83 e8 f4 6c 2c a8 d0 0a da 5d fd -04 dc f7 cf 36 cc 58 11 05 d9 9d 2a 7d d9 4b 56 -76 0a 65 64 fe e5 e8 aa eb 06 07 e1 45 19 62 10 -a3 1b 7e d8 dd 2a f3 2d 29 d2 ba d6 f1 5f fa 5a -11 dc 73 5c c3 62 19 02 1e e8 d1 ee ed 34 63 9b -5a 91 ac 6a 92 67 4e 18 39 70 c5 9d 5b 19 6d 4b - -# Public exponent: -01 00 01 - -# Exponent: -01 07 ea 61 ad ec a5 e9 00 7c 59 13 4a 7d 38 fc -7a f3 10 3a d2 c4 a2 be e3 97 08 be fc 83 dc 79 -b7 0d c9 75 92 db 6d f7 0f b3 c4 9c 25 35 fc fd -9f c2 ce 7b 05 53 92 e3 ee b3 e7 97 93 cc 1b 60 -15 3f 4a 0b ff 26 be 66 7b bc db bf 6e 32 af a6 -fd 14 83 7f 3c 79 be 44 cb 1c 63 8f fa 5c 6b 17 -70 9a 96 e1 27 03 0b b1 11 6d ec fd e5 2b b0 40 -84 2a 94 d2 e6 74 f1 17 51 ec b9 03 ee 10 48 45 - -# Prime 1: -e7 fe c4 74 e0 eb 31 2d 1d 76 cb b2 72 2e fa 42 -10 68 b1 91 e2 33 b6 4e 46 08 7f dd 45 76 d3 85 -55 07 19 35 2e 10 9f e4 33 ac 4e 35 8e 7c 28 59 -eb a7 e4 3a 04 ee 85 9a 46 35 2c 12 43 a1 cc 6f - -# Prime 2: -cc 5a 02 f9 55 7a 63 5c f5 e6 9b 0f 2b 3f 2e 61 -2e 1f 0a bb d4 bc f1 69 ca c0 84 dc f4 b9 b4 34 -43 a7 85 23 90 f8 19 41 9e c1 a8 38 7e f0 4d d2 -db 7d 60 b4 0a 21 f9 4f 46 d2 27 87 4b 3e 52 e5 - -# Prime exponent 1: -ab 92 8b 10 35 57 3b 23 36 6b 28 f2 6b e7 ba 45 -29 85 83 ed 73 f0 f2 9e a8 c4 98 6b b8 77 cc af -0a d7 19 19 6f 5b f4 23 fc e3 2d 64 06 60 64 27 -3c 55 0a 40 ae 6d 08 79 b3 fa 97 01 5a eb 4a 19 - -# Prime exponent 2: -8c 7d 55 8e 15 36 0f 19 d9 f4 b0 a5 bd 15 b2 cd -1c e8 3a 78 e7 c8 fe 2f bd 34 9e 23 4a 1c 61 c7 -8c bb 9e cc d4 dd bc 7f 60 a5 c3 01 14 44 21 3c -d5 a9 5c d2 6a 24 f1 41 8f 6e eb be 17 fc c1 - -# Coefficient: -b0 b1 b9 cb 23 ac 2a 8a 56 36 66 69 9a 52 40 54 -be f3 81 aa bd 75 55 31 a1 df a8 85 dc 8f 98 86 -a5 5a f0 e3 68 63 91 c7 97 68 1a 8f ef cf 24 db -d8 1e 03 13 16 99 8f 5d 81 8d 24 76 da d0 6d e8 - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# PKCS#1 v1.5 Encryption Example 3.1 -# ---------------------------------- - -# Message: -44 e5 6a a7 7b d9 35 ac 59 a9 bd 32 37 83 e1 27 -42 - -# Seed: -92 ee f6 19 f0 4f 52 02 8f 4c c3 e5 24 1f 0a a0 -92 1b 4d 18 3c 1f 5b d6 8d 86 fb e9 e7 b7 d0 bb -10 4e d1 ca e0 7a c7 d8 0b fd 9c 1c ef f8 dc da -1d cc 69 30 f4 c5 51 37 34 6b fd 68 c1 9d 87 97 -2f 7f 34 cb ae 56 63 26 0f eb 79 f7 60 22 1c d6 -7b e0 66 d5 af 0f 07 3c 0f 2c 43 9e 8b cb 74 63 -ed e4 4c 8b 15 0e ba f3 29 87 26 c3 - -# Encryption: -15 91 d1 ce 0f ad 66 d8 6f d4 2e fd b3 1e 9a 02 -8a 31 57 fb 09 14 b2 47 eb 3d 22 d7 6f 97 69 b0 -e1 9f 6c 06 4c a1 b9 89 06 39 ee 6e 37 b7 09 22 -4d 6b 58 eb b6 55 ae 4b 69 ed 4c d7 5d 81 29 21 -17 c0 69 30 d4 2a c4 d4 2e a7 35 14 21 8f 49 ea -07 ca 97 43 67 09 68 3d 67 a8 e9 e8 08 da 69 a5 -0b 73 9c 42 eb 0d eb 94 a3 49 8f c5 45 0e b6 9a -ce 23 76 76 61 fe df 34 18 3a 1b 6f 42 5d d6 a0 - -# PKCS#1 v1.5 Encryption Example 3.2 -# ---------------------------------- - -# Message: -a7 57 38 29 1f ad 54 13 95 7f a3 b9 f3 b2 ca ac -9f 5a - -# Seed: -3a 19 1a af 45 ed 4c 25 89 20 5d 9c f6 a3 0f 07 -70 0e 38 be 06 25 62 43 01 8d 23 c6 84 da ec e7 -e8 67 e3 9d 76 c6 b6 f0 35 43 fc 15 af 81 bf 84 -f9 64 ea f3 a9 5a 4b 80 86 28 fd 51 55 38 99 f8 -11 c0 8c 62 60 9c 51 4c fa 1d bb 78 d5 a5 b3 3c -c0 b8 57 fc b1 ee cc 53 1b 13 26 34 43 90 59 f5 -5a 73 3e 14 6e 1c a1 eb 5a 97 f4 - -# Encryption: -70 aa f7 24 39 6c 1a c5 0e db bf e8 34 1b 08 7b -a0 ff e2 87 60 5a 8c 3a 8c cf 85 ab 2e d2 fe 22 -15 9d 62 aa 02 74 76 eb bf 07 70 02 6d 2d 3b 0c -0d 77 34 fa aa a8 d1 5e 2c e5 1c 85 53 5c 26 b4 -15 0a d6 34 6e 3b fd 38 db 5d ac f7 52 e7 5d 75 -31 40 54 d1 67 a9 6d 81 9f 34 38 a7 be c4 46 7f -c5 60 a6 94 46 94 85 e8 e7 8e 47 e4 e8 27 7c a7 -d3 fd 2a d9 4a 30 46 4c 24 57 85 47 25 c6 16 15 - -# PKCS#1 v1.5 Encryption Example 3.3 -# ---------------------------------- - -# Message: -87 31 2f 78 7d e0 65 97 50 d6 02 ac 11 02 - -# Seed: -a2 29 e3 e8 ef 1c aa 66 ca f0 d8 ac d8 d6 6b 9e -41 cc 77 1f 26 e2 0f 12 ec c6 e2 aa 38 45 51 3d -d1 34 f7 c6 e5 74 f4 1b 21 5d 1d 11 17 56 da f9 -71 cc f3 9c cd ce 78 16 19 d7 97 20 df 91 8d 33 -9c 82 6d c0 49 b3 90 91 7c 17 ba 0f b1 30 2f ff -11 0a 14 dd 23 84 90 27 41 f9 12 b2 6a 1a db e0 -ed 1e 8f d9 89 71 0b 40 3d 27 c4 e0 18 fb 9b - -# Encryption: -03 38 46 d7 66 4c 8f 92 62 57 c7 fd 32 64 48 47 -92 ac 7f 9b c8 75 8a 7a 16 ab b8 9f a3 cc c4 d1 -3a 1e ed 88 af 73 23 bc 3c 74 e2 3f da b5 03 81 -89 4c 86 26 df d0 ac 85 89 d4 62 34 d3 c3 5f 18 -99 81 79 44 84 31 dc 81 6f b6 3e 55 cf 26 d7 4a -9d 2a 09 32 67 3c b4 be b8 29 cd 7d 49 50 88 48 -c6 d0 c0 0d 5c 70 f7 fb 47 67 70 e4 03 19 23 7c -78 6b f4 e2 6c 48 d2 cf d9 6e e3 62 bf 29 28 25 - -# PKCS#1 v1.5 Encryption Example 3.4 -# ---------------------------------- - -# Message: -9a 2b ca 75 e3 26 49 77 7b 9f 13 ec 30 fe 16 bb -8a b4 6d 6d 5e 0c 64 63 a7 3d 8c 36 63 ad ab c7 -23 bd e7 2a 50 76 5e 7b 30 0e f6 b5 61 de e8 84 -84 88 0e 4d 61 2c - -# Seed: -8b fa e9 22 2f 75 a0 69 98 ed 6d 9b 14 9e 89 05 -cf c8 db 05 5a 0e 32 ac ed f8 24 d2 f6 b5 b4 2b -3a ea c6 a7 10 4e 14 4d 5e 48 34 28 0e 36 44 5a -b8 50 f3 a6 de 16 4c 2c 79 0f e7 d9 d7 bc 7f 9b -db e2 52 17 da 2d ed - -# Encryption: -6e c5 f5 59 c8 a3 20 d9 0d 1e b5 ef 09 1c 4d 12 -55 a2 4a 69 19 41 0e b1 df 65 a9 7b 30 cd d7 fa -e1 8e 65 12 a0 27 e9 76 70 4b 4f a0 44 37 43 93 -d5 01 e2 ba 46 18 62 00 ef 0d dd f1 9c 75 77 58 -e4 67 94 30 bc d9 fd 11 9e a2 43 b3 49 dc f8 1c -34 32 d3 1f ba 91 1e c6 fc 68 6e aa df f6 b9 fd -f5 3a a4 c8 5a 49 a2 2a 05 1c 5f 18 07 f3 08 3b -1b 3e 61 17 b4 ef 12 08 de 0a 80 01 dc 29 1c 4e - -# PKCS#1 v1.5 Encryption Example 3.5 -# ---------------------------------- - -# Message: -df d6 3e 6e c6 1e 07 27 5b 8e 37 cc 63 69 e1 f3 -ec 0b fc 57 a2 98 b9 05 ae 5d 07 74 e0 f5 22 e6 -75 9c 7d 11 6f 8e 8e fe 69 45 0f a7 a8 38 9f 81 - -# Seed: -c4 22 37 7b 89 86 4b 0d f3 8b 4f 9c 15 f9 8a 05 -96 55 e1 c9 b0 c7 09 63 5c a6 06 49 d8 d2 47 5e -e1 6c b1 27 f6 76 39 12 96 4e 19 84 d6 da ad 4d -6a bd 04 b0 46 18 b3 2e 53 25 ba 95 eb 5e 76 db -d4 6d 9f b5 9d f0 7a 08 1e 95 6c b0 73 - -# Encryption: -9e 06 cd 91 a4 4a 9a de a6 a7 98 03 d3 e6 bb ab -17 db 10 62 b6 51 0b ed 40 07 55 66 74 95 44 c0 -3d 7a 78 b1 37 b0 dc 1e 66 26 32 1f ed af c2 0d -cd bf 70 80 f7 f5 bd d5 67 44 ce 99 9f 76 70 5c -4f 5e 6f a1 5f 46 c5 ae 50 80 90 db bc 85 fb 86 -89 9c 95 78 60 8d fd 77 8a a4 a7 9d 3d 73 63 54 -cc fb fa 2c 86 f2 9a 7a 58 45 3d 75 7f d5 22 f7 -84 08 d9 91 6b 1b d0 65 4b ff e6 e0 66 ba eb 50 - -# PKCS#1 v1.5 Encryption Example 3.6 -# ---------------------------------- - -# Message: -5d 91 fb c1 a7 ba 79 93 9b 89 a2 40 8c ce 8e d4 -bb 26 66 dd fe 09 d9 19 21 a0 aa 69 09 6a 95 69 -92 c2 1c - -# Seed: -af 07 fe a3 21 ea a2 67 af 7f 09 80 6f 9e a8 b4 -cf 13 5e d6 f1 43 2d 51 b2 8f 92 44 87 09 c2 ee -8a ed 7f 73 b6 28 2c bf d3 7f 82 db a8 72 3e 5e -5e 0a 81 f5 90 f8 2e 2f a8 4c 3b c0 0c 9b 9f 91 -aa 55 3b 8b 2c 07 4b fe ca c2 f5 52 37 f4 cb 70 -54 3a ba 49 94 68 cf 68 44 c3 - -# Encryption: -76 05 0e 22 64 22 0e 10 05 2c 49 b9 6c c8 41 1e -39 6a 7a 6e 4a ed b0 6b 48 fd b0 71 de 83 9b 40 -1c ac 0c 46 8d e8 d1 ed 0b 56 8c e6 90 e8 03 7a -f5 de f6 b3 d2 db c7 b5 f2 fa de 35 6c 26 cf fc -dd 33 40 33 ea 2c 99 77 92 d9 30 a7 26 46 12 5c -0e e8 6a 4d d8 43 c8 24 c7 a5 2a c9 88 c9 2e 6c -69 b5 80 76 1c 49 88 1f 29 dd 8a 76 da 79 3f 43 -2e 7d 5d c7 31 a2 5e 5b b5 02 58 d0 27 39 5f bd - -# PKCS#1 v1.5 Encryption Example 3.7 -# ---------------------------------- - -# Message: -04 ed d8 3c 65 65 6a 01 - -# Seed: -88 f9 a2 71 97 f9 f2 57 fa 81 c0 e3 05 90 b7 3e -9e 11 c7 6b c8 9e 08 53 6b 4b 64 a2 50 6a eb 33 -b4 50 74 73 08 09 a0 5c 45 b9 bc 95 71 73 69 cf -92 c1 bf 98 6e 53 ba 11 23 83 30 fd c4 e0 5e a1 -07 33 4a b3 11 06 ae bd 9c 6c 29 e5 01 a5 7d 99 -7c 01 bb c1 01 0b d5 2f 05 38 b9 51 59 f3 91 32 -0d e6 db 23 d8 16 2c f1 46 58 4c 6e 07 6c 4e ae -86 20 72 eb 5b - -# Encryption: -79 1b 37 91 48 a8 3a 03 4d 31 2a 82 bb b3 7b 11 -1b 40 bc f6 a3 37 fd e2 89 b0 8e 07 2e 44 03 19 -73 ff 9d 0c 27 f7 0d 64 a8 ea fc 6e b5 f8 eb 4e -52 e2 c4 19 7e cf a5 45 ed 63 ae 9a 12 83 79 d3 -f5 62 a1 8f e3 ad 14 05 27 67 f0 54 1b 90 16 81 -85 cb b7 8d b6 03 81 c0 92 bc 23 e1 aa 05 b4 08 -92 f9 a1 16 e6 25 cb 14 8b 56 07 42 cc 12 78 c4 -d2 1a 4a 7d 37 f6 98 2a ee 27 f2 a4 c0 c5 73 d2 - -# PKCS#1 v1.5 Encryption Example 3.8 -# ---------------------------------- - -# Message: -3f 7e ea 78 1b 77 d8 5f e3 71 b3 e9 37 3e 7b 69 -21 7d 31 50 a0 2d 89 58 de - -# Seed: -49 99 c6 4c bf a3 85 24 ad ca b6 6f 64 45 4d 36 -fb fc b2 98 6e 1f a4 75 3a 0e 03 88 9f f0 6e e1 -60 0e ee 23 be 53 a9 74 42 b4 2c 69 62 18 66 63 -2e 4a 6b 6a 1c 71 05 73 26 1d 71 f3 8a bf 9e 52 -49 dd c8 e1 b7 7b 3f 12 6b a0 88 15 c4 fe 63 31 -4f 9b 9e 8e 7a 40 c7 fc 72 86 25 20 ed 49 d4 12 -59 ab 2e 0c - -# Encryption: -74 fd 8b 98 56 d7 57 6e 0f 12 87 e0 e9 08 5a 38 -01 e6 b6 77 4d b7 33 54 1d eb d3 9e 72 cf a8 29 -1f ec 27 01 8c 9f 53 05 a4 4c cb 5a 3c b5 91 fe -d2 e6 a1 d1 d8 5c aa a7 4d c2 37 59 d6 66 5a 45 -70 a6 37 f3 ab 30 4b 76 61 31 3b 96 71 3c 7b 7e -49 77 31 33 dd 5d 4e f9 d2 9a 1a f7 12 00 15 02 -8d aa b3 df 04 2c 56 26 20 aa 49 d2 c0 14 41 4d -fb 15 77 d7 19 a9 58 82 64 71 2d e3 bf 4a 76 79 - -# PKCS#1 v1.5 Encryption Example 3.9 -# ---------------------------------- - -# Message: -a3 85 08 d9 46 0c 63 f4 15 81 a8 86 9a 75 82 4b -14 f5 c6 50 32 29 99 dc 41 13 50 d0 d4 e8 62 4f -f0 9c eb 00 d3 be dc 5d 76 2a 40 c9 39 80 04 - -# Seed: -6a 0a 28 8a 1e 67 43 0c 66 6a eb ea 44 b5 82 a9 -09 69 cc 01 e9 0a ae 10 53 ce 55 ee b9 87 9b cc -62 25 39 15 e9 22 f1 09 66 67 bd a0 2a 14 e7 07 -47 b3 59 35 24 c2 84 85 47 d2 11 4d 1d 0c dc b9 -7e b4 df 45 5b ba c9 b0 cc 29 08 39 b7 3a - -# Encryption: -a6 77 57 80 8f 5a bd c8 1e db 7f 69 2f 9f b8 52 -f1 a1 66 1c 4a 00 98 05 c4 4b 21 6c d3 b1 32 2b -bb 25 d1 45 8e 31 b0 f0 7d 65 50 57 59 c4 b4 14 -7f 23 cb ee 2a f4 a1 a5 93 8a 06 8c e9 c5 32 3f -f5 3f 4b 39 2e 12 50 d0 37 b3 1e 62 81 dc df b9 -6b f4 bf ea a1 47 f0 96 c7 84 c9 2f 4a c5 70 91 -12 28 02 50 29 c3 b5 23 30 3f e8 22 7e 8b 2c c0 -ef 15 70 14 cb 67 31 aa c0 9b fe 6f fa 18 ea f6 - -# PKCS#1 v1.5 Encryption Example 3.10 -# ---------------------------------- - -# Message: -f7 84 05 23 6a 9e b5 57 aa ce c6 00 7d bc 4c 0e -de 78 ed 12 b0 4c 82 88 8a 82 c2 13 - -# Seed: -86 f0 72 3b 31 68 e2 ae ac e9 ec 2e 95 fd a6 e6 -d6 fc 8d 62 94 55 65 66 39 9d 73 11 e7 99 fa a9 -b1 ee 1f 03 2a b2 e5 34 a9 1f bc d0 7c 8a 7d 04 -a9 b4 85 f3 1e 07 23 fd 29 eb 21 88 06 9d 9b bd -76 29 dc 6e 3f c8 9b e6 04 bc f0 0c 52 fa 8e 1d -6c 62 55 5f d1 f6 0c ec 02 d4 d9 61 d8 28 da bc -4a - -# Encryption: -6e 8d 2f b0 b2 ee f8 2f c1 10 ce e0 a9 d3 84 2f -2a 05 8a 24 40 7f a1 1b a9 05 d1 aa 50 e8 cc 12 -de cc 07 3d bd 08 a8 c7 05 18 ef 25 db 96 fd a2 -41 1c ca 08 72 87 88 95 6f 73 df a1 20 e0 ea 60 -5b ff c9 3b 43 a4 41 a4 3d 0e aa 3f f0 73 e6 98 -2e ef 52 96 39 06 07 e2 5a 58 8a 39 82 55 ba 00 -5a 48 5e 6e 73 2e 3a 19 20 cd 43 a3 90 fb 66 d5 -42 8d fd 62 89 74 b8 af f2 f0 60 2d a5 78 d6 25 - -# PKCS#1 v1.5 Encryption Example 3.11 -# ---------------------------------- - -# Message: -56 1d 27 c1 d3 f6 d5 d1 a6 43 aa 47 e5 5d 78 eb -00 f3 2d 42 89 6a 34 e0 c1 d7 1b c3 a5 45 7c 92 -05 be d1 3b 98 4c 52 59 - -# Seed: -98 17 6e 1d 67 a2 46 2f 5d c1 bf a6 e0 75 95 42 -10 4a c1 48 11 d3 18 79 38 25 04 55 c6 5e 4a aa -76 32 bd 2d 1d 75 2e 1f 34 c5 3c ab 26 76 76 a7 -8c 10 c9 98 e7 73 fd 8f fe 35 c8 67 c4 43 be f7 -98 65 aa 2d a2 91 5a 85 c7 02 63 23 69 3e 45 4d -8a b3 2a 77 15 - -# Encryption: -0b c0 47 83 c6 92 44 7a 3d e6 1f 53 b7 2f 7a a4 -10 31 6d d5 09 a6 f4 9e 3a ba 56 ad 1f f8 6e be -9e 63 66 e1 7e 51 45 00 76 be a3 71 d4 c6 89 cd -61 49 5c d8 fa 29 c0 e8 7b 6d bf a8 e3 86 c2 e8 -20 e4 c7 42 a4 87 e8 9b 27 5a 21 86 e2 38 40 be -9c 02 52 7b a7 17 e9 e6 0b 5b f4 17 71 1d f3 4d -7b 8e 2d 12 bc eb 85 93 85 fa 00 1d 4b 4b ff bb -c0 ed ef bd 40 02 41 84 68 c5 66 fd f6 b8 35 09 - -# PKCS#1 v1.5 Encryption Example 3.12 -# ---------------------------------- - -# Message: -eb 5f 8c 0d c9 d9 01 06 1b 82 ae ff 8d 67 d8 bf -fc 0c 04 7e cc 4a a3 46 b2 3b db a6 2a 87 e9 dc -77 0b 11 69 5f bf 19 02 f2 4b 66 ce ab - -# Seed: -74 82 77 0f 3c f5 7e db 81 40 eb c3 3a 02 82 45 -ee 06 48 52 06 89 a5 0e 33 f5 f4 67 f6 d1 e4 32 -4e 1c 50 c8 99 e5 ad 2c 46 c9 7f 81 20 d1 c7 22 -39 d6 a8 2d 8f 8e bc 80 b9 73 ee a8 c5 45 69 29 -50 45 14 b4 b1 56 62 84 4f 29 50 62 f2 1e bd 92 - -# Encryption: -b8 40 43 54 a3 81 b7 c2 ab e5 f7 28 25 f3 d3 15 -bd ac e6 c3 cf bd 88 b8 97 68 61 20 05 19 7c 61 -66 38 83 f2 c2 57 4f 99 5e a6 f9 4e b3 4f 27 68 -62 b3 3f 58 a8 83 92 23 70 6b e1 c1 ff 47 23 05 -f1 1b a9 56 2a 0e b0 12 f1 aa f8 5c 22 e8 8f 2f -df ea ff 86 33 d3 cf eb 5f 76 4f 42 28 92 0d e3 -0c 6b de 2c b4 e8 f0 3d 90 ed 54 8f 64 85 00 35 -1a 5f 41 df 74 ad 65 e8 c3 be e9 50 5a 7d 70 e1 - -# PKCS#1 v1.5 Encryption Example 3.13 -# ---------------------------------- - -# Message: -5a 7f 0e ae ba e4 9c f5 7c 47 5a 6d a6 79 43 a7 -d3 04 6e 3f 7c 7d 50 b0 9a 80 98 b5 44 69 39 68 -93 cf c0 b2 f0 8f 6c 2b ff 23 50 51 57 5e 6e 56 - -# Seed: -fb 08 48 86 db 37 98 d2 b5 bb 35 a3 b1 d3 af 4f -df c0 45 6c bc 79 7b 96 40 d8 c4 4a 0e 03 4e 40 -37 2b 34 fc 7c 1e 8b 66 01 1b 4e cd fa ec 6e e4 -cd c8 28 cb 1a b4 91 27 4a c1 e3 9f 67 58 7a 55 -47 67 09 b4 02 3f c5 69 cb e8 b4 fd 4b - -# Encryption: -07 78 4e cb 8c c5 ba 02 d2 07 ba b0 55 c0 e5 5d -10 a9 b9 42 70 cc a2 50 ee 75 fa 1b 5a e1 90 b3 -3b 96 96 eb 2e c9 72 b2 6a 0e 94 23 af 16 aa 37 -89 17 62 76 06 0a 76 40 03 21 11 74 82 96 34 03 -4f 97 12 c9 17 10 17 f2 fb 21 3f 25 c1 46 c2 65 -1f 89 44 0c a5 36 e5 33 e3 05 cc 6b 01 13 39 8f -61 b4 63 b0 73 e1 be 05 07 3e 9d 64 bc ae ea 54 -44 b8 20 c6 ab f3 46 54 30 ff 4d e4 a8 bc 0e 75 - -# PKCS#1 v1.5 Encryption Example 3.14 -# ---------------------------------- - -# Message: -f9 1c 71 af 5a ea ca e1 79 e1 6e 87 c9 02 3b a9 -4d 84 d7 51 6c ec 6c 39 89 80 1f b3 e7 ad d0 64 -bd df 92 8b 50 00 94 0b bd e5 39 d6 23 37 9c - -# Seed: -de b2 60 25 8b e2 c8 53 35 21 57 b0 65 26 b1 43 -ba 13 3c 4f 49 bf 3d f2 c0 50 ec b2 c9 ca 32 53 -11 b3 c3 e3 d8 8d f6 c2 4a 89 4e ab 63 74 5b 62 -53 e3 c4 6b ca 17 1a 26 a4 f2 fc 0a b6 2b 8a 2e -63 a0 18 eb 47 01 8c ab 95 1f 59 f0 20 3a - -# Encryption: -0d ff ff 51 97 10 c9 ea dc 53 3b 10 8a 4c 29 74 -fe 53 18 91 a3 41 07 a6 74 27 93 5b a7 20 cd c6 -f6 ee 02 9a 1b 03 68 61 db 14 04 c5 86 49 90 54 -1f a2 42 13 01 a7 b2 48 cb 11 f3 65 b6 a4 aa 94 -6f 22 31 cb b1 47 32 b0 1a a4 a6 0b cb e5 20 ec -6c 38 53 a6 95 8a 93 c5 b6 8b 85 d4 bc 3d 84 15 -ef 8b 1d 4f 63 03 8f 4d 94 2c a6 bc 7a 38 25 1f -15 a4 e3 3b 18 9c 25 0b cf bc 03 15 6e 4f 92 11 - -# PKCS#1 v1.5 Encryption Example 3.15 -# ---------------------------------- - -# Message: -07 90 c0 81 f3 61 c9 5b 59 d5 27 d3 cb 50 71 0e -66 e2 72 59 50 10 25 ed 3f 20 f3 0c - -# Seed: -fc fc 2d 56 cb 92 6d 90 5d b3 6e 1e 2e ff 1f bb -75 d6 53 51 7f 59 e8 6f 71 bc 4b c5 57 26 f0 88 -b8 21 62 44 83 b3 e2 9a c2 1a 49 bd 85 91 34 90 -8e 6c 0e c1 a0 dc 80 79 93 01 44 12 0d 1f 6b f9 -3b c6 27 b9 99 69 b2 af e2 1a 7d e1 0d 96 f6 ef -43 c5 67 b5 e2 38 38 5c c1 1a 5a 2a 13 e1 78 55 -8b - -# Encryption: -7f 0e 6b 34 2d 6a 13 54 66 be 41 73 38 1a c0 4a -ba ab 7e 14 fd cf 51 01 89 87 e9 69 67 16 9a ea -97 78 03 eb b3 24 2a e9 ad b4 6f f5 11 20 93 4b -39 21 46 31 b0 3f 5a f5 bd ea 1c ac d3 28 ad dc -d4 0a 3a 29 96 6b f9 8b d7 c8 c6 fd 0f 4e 8b 97 -2e 2d a1 0c 6c c5 52 05 86 7f 39 04 ed 60 f5 b5 -be df 7c 3b 3c 7d d5 f3 87 54 8f 40 05 67 02 ea -72 01 76 dc e2 06 d4 13 d7 42 3f 94 3f cd f6 39 - -# PKCS#1 v1.5 Encryption Example 3.16 -# ---------------------------------- - -# Message: -93 c4 1a 1a dd a8 f6 93 60 f4 1a 58 ec a0 b5 5e -cb 37 a6 a9 00 fb c7 da cd 9c a3 99 c2 3d 31 72 -61 53 77 ac 0c c6 b0 ed 43 bf 59 7f 21 cd 25 9d -8f 80 88 7b 15 9d 96 d6 61 61 d5 58 9b 95 f1 fe - -# Seed: -99 1a 2a 7c 06 1c 23 a8 eb c9 48 9a bc 1b 4a 64 -a5 d4 e8 38 d9 fc ba 42 88 c0 1f ea d6 6d 59 f4 -96 36 e4 a8 d7 52 4c b8 9d 7a dc 7a f3 f6 1a e6 -b3 9b 58 8f b7 7e b7 02 23 62 ff d2 6b - -# Encryption: -7e 54 a4 32 f5 25 c5 23 33 ab e3 bb 45 48 7e 03 -9a f9 4d d3 ef c3 58 44 dd 8e 83 5e e1 00 61 78 -e2 4d cd 19 fc 07 66 7b 4a 34 f3 bd 77 1d 09 a7 -e2 9f 8c a1 7e 88 d0 29 b9 0d db 5f 28 13 be 99 -00 0d 59 f5 43 2c 46 6a 84 28 75 77 20 4b f7 65 -97 39 27 69 98 30 57 47 66 7f af d8 02 9c dc bb -59 18 39 3c 2c fc e4 d8 4a 92 20 ea 3e 38 19 72 -53 36 f2 5f ee 8e 08 5d eb ed 33 32 d5 dd f1 ee - -# PKCS#1 v1.5 Encryption Example 3.17 -# ---------------------------------- - -# Message: -9e 2a 7b 37 74 b1 1e 62 b6 49 0b 56 51 a0 c1 8e -09 2e 9f ab 8b 22 84 ae 46 43 be c3 6b 26 5e 5b -a3 c5 1a c3 85 b2 c7 3d 22 0b 2d c2 e1 0b 0d 69 -0f 67 94 5a 0c 42 b3 bd 09 d0 a8 a7 - -# Seed: -a1 8b fb 74 f6 de bc ed cf b4 7c 7d 5d bf 10 6e -77 4d 7e f6 63 8e c3 82 18 69 cd 2e d6 2d d5 32 -5f 4e 57 33 b8 bf d5 fa fc 43 e4 16 4e 78 d4 38 -99 4d 85 33 7d 7f 0d 38 f0 ea 3b a3 7f 4f 41 b6 -a7 - -# Encryption: -18 c8 8a ee 25 36 d9 42 f7 62 2a 64 4f ad 6f ec -d3 32 28 c7 ae a0 ca da 0e 53 1f 4c cb f1 c1 f2 -69 cc 95 86 29 a4 3b 97 52 fc af 2b f9 53 ec 9f -7e f4 bb 0e 62 d1 28 e0 cf 4b ab e9 2c 6d 92 84 -9e 98 38 dd 88 e2 b4 68 bd ce fc 04 a9 e4 cb 55 -e2 a5 18 ca 25 9f 9e 81 a4 9f 28 df 34 76 1f 9d -ea 2e 70 59 56 62 62 6c f9 6a c0 5a 7c 8b 10 33 -33 e9 06 e1 32 63 9b 65 a7 66 f4 09 2c 8c a0 78 - -# PKCS#1 v1.5 Encryption Example 3.18 -# ---------------------------------- - -# Message: -0a c5 2d 40 01 f2 5c 2c 9d b9 1c e5 0b dd f0 d5 -91 9e 19 96 2e 83 b0 7c b7 9a db 00 43 6e 13 66 -b0 aa 8f 3f d1 ee 79 6b 23 c8 bc 56 0c cf a4 bc -bd b1 f8 40 4d d6 f7 55 15 20 d7 d9 e2 - -# Seed: -22 ff dc fe c6 f0 6b 1b bd 14 53 97 70 43 a3 4e -dd f8 59 4d a0 22 13 09 14 97 55 42 f2 f0 0e 98 -f3 1e 0d d0 c4 8f 7e e5 f0 9d 6a 52 71 21 ad 23 -37 1c 6c d0 e0 79 0e b7 30 8b bb 08 96 dd 59 0d - -# Encryption: -b2 69 57 c5 62 29 4d e1 f3 93 24 b1 cd 80 3c fc -39 fc ee 2d 3c 9d 13 79 f8 a1 12 07 9d 69 43 68 -f5 55 03 c2 09 4d 98 8a 8a 5b 5a c5 49 be 1c f5 -53 16 04 5d f5 b6 f6 33 a4 ef 1e 1f 01 9b a1 b5 -42 bf 0a 87 fa 3e 5c a3 f6 b6 1c c8 56 61 28 a0 -fa 41 8b 08 25 c9 0e c2 f1 ec 74 e5 87 cd 80 57 -d9 52 96 7a c4 52 1c cd bf 63 26 f3 50 93 00 93 -82 6d 2e fa 05 8e d6 44 15 37 4d b3 20 48 85 ca - -# PKCS#1 v1.5 Encryption Example 3.19 -# ---------------------------------- - -# Message: -a8 00 34 62 f8 06 b7 f6 61 fb 66 46 32 - -# Seed: -c7 43 f4 a6 da 03 ab 2d e5 a7 31 cb 88 d8 ca 9b -61 c7 31 9a 5f 8b f9 d2 37 87 7a 05 d0 f3 68 c3 -60 8a 05 2a c6 ce 13 73 17 95 47 55 42 ea 16 a8 -62 91 3d 04 32 f0 8b d8 c8 b6 ff 81 95 69 1f ee -5e d1 42 fb 9e ca 94 67 52 4b d3 b5 fa 5a 4a c6 -14 3b 0d 38 25 0a e6 21 d4 39 90 9c be 3a 6b 5c -01 fb ea 2d 7a 3f 1a e4 1d 61 fd d6 47 64 14 9f - -# Encryption: -b7 38 e1 c4 29 f8 fc 06 82 fa ad c8 ca 87 ed 8f -16 df 93 0f af 43 b1 99 1a ac 71 d8 8f 26 4c 0d -82 9a c0 3d 23 c2 5f c5 f3 e8 5d d3 02 cb 7b 15 -33 e6 8c 24 16 c5 1a 79 bb cc 7c 29 b0 7e 2e 0e -23 c6 f2 df 0d 07 81 91 7e ba 1a 57 08 62 8e ed -8a 15 b3 b1 84 af 70 0d 0d ab b1 4d f6 0b 09 ba -d2 12 7d f1 80 f4 d6 f7 29 65 87 60 d6 33 c7 77 -5a 7b 59 6d 09 d9 03 49 1f 21 09 6c 34 c3 95 3b - -# PKCS#1 v1.5 Encryption Example 3.20 -# ---------------------------------- - -# Message: -ef 32 - -# Seed: -43 99 cb 04 4a 60 07 6d 18 cc b3 4e 8b 07 8c 81 -8e a7 7f 63 b0 a4 3a bd ec c5 77 81 93 a8 bb ba -5d 56 d0 fc 4e 82 a2 11 51 6b bd ef 44 e7 f4 e7 -fe bb e1 e1 92 3c 99 9a 7e 96 1c d6 ee 1c 41 6a -85 96 e2 4b 63 83 a4 69 93 5f 33 d1 56 fd 5b cf -db d4 27 46 0d 48 66 83 06 1e 41 05 f3 5b 5e 75 -23 20 15 5c 7f 69 ad 8e b4 02 cc 11 06 e0 28 9a -9b 49 65 82 3e 7a 51 cf e4 d2 6d - -# Encryption: -13 1b 62 5e 86 e6 cd 1e 08 ac f1 95 d9 3c d3 a0 -dc 8b a9 e2 dc d6 fc 99 6b e2 17 24 af 17 90 b6 -88 d7 9d 3e a9 a9 50 98 ca bb e8 a5 d4 85 92 e4 -74 6b 0e d2 af 7c af 89 b7 b6 15 2e 38 24 d9 15 -89 ee ec 33 75 c7 1a 89 97 48 70 3a cc 1e 8d 1d -e4 71 ea 75 28 04 0b 79 5f 29 9e 66 8c ec 9f 5a -f3 eb 48 f9 8c 0d 85 20 67 77 3e 10 1f a2 4a eb -6b 40 4d af b4 2e 7a 63 b0 4a 66 bd 0e 9f 9c 94 - -# ============================================= - -# Example 4: A 1024-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -e9 f2 5e 48 14 0b 5d cf 46 99 e3 03 7f a8 34 f0 -c7 8b 16 73 5f f7 9f 6b 18 ae 60 b5 18 48 d3 06 -99 ec 64 6d 85 7f 15 77 0e 2c 7a 0c 0c 90 0f b6 -04 0b 5f 34 48 4e 9c f5 ce da 23 d5 b2 50 ef 93 -28 6f 01 1e 9a 5b f9 e5 42 e5 c9 f4 42 de 54 58 -e2 3e 41 d1 d9 cd 9f 0c e1 cf 20 08 d3 ea 4d 80 -32 e8 54 cf fc df 5f 69 8d 13 16 e0 29 c4 88 fc -bb 2b e2 9a 4e 7b fb 8e 6e 81 d3 42 12 3e e7 5b - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -e9 f2 5e 48 14 0b 5d cf 46 99 e3 03 7f a8 34 f0 -c7 8b 16 73 5f f7 9f 6b 18 ae 60 b5 18 48 d3 06 -99 ec 64 6d 85 7f 15 77 0e 2c 7a 0c 0c 90 0f b6 -04 0b 5f 34 48 4e 9c f5 ce da 23 d5 b2 50 ef 93 -28 6f 01 1e 9a 5b f9 e5 42 e5 c9 f4 42 de 54 58 -e2 3e 41 d1 d9 cd 9f 0c e1 cf 20 08 d3 ea 4d 80 -32 e8 54 cf fc df 5f 69 8d 13 16 e0 29 c4 88 fc -bb 2b e2 9a 4e 7b fb 8e 6e 81 d3 42 12 3e e7 5b - -# Public exponent: -01 00 01 - -# Exponent: -45 45 88 68 44 53 27 48 60 49 e1 bf df f5 61 13 -a8 aa 45 10 0d ab 07 4f d1 63 94 ec 1a 90 39 b8 -1b 2c b5 81 fe 84 e6 48 b5 f0 32 85 4d d4 fc 69 -f3 61 a0 a3 9d 03 76 13 8c d7 e7 c3 77 84 e2 a2 -f9 d4 f2 66 84 cc 5c c9 f5 12 ba 62 15 eb d2 32 -f9 aa 3d a4 69 db 43 da 1c 06 46 e7 5b 33 aa c5 -70 08 1b 5b 2e 96 ea b7 54 6a cf 93 17 85 aa 2f -d1 82 4c be 2c 5f 9b f5 63 34 ec 15 66 d1 cf 45 - -# Prime 1: -fc df 1c 49 35 8a 1a ac 93 88 c4 6c aa 04 72 fa -35 b2 1b df 99 a2 7b c2 ac 65 46 7b 88 d0 16 1f -bc 70 f3 f4 fa 13 a5 f3 a9 8b 59 c0 67 ea bf 19 -62 16 a1 b8 9e 20 af b2 e5 e5 ed de ae 8e e1 ef - -# Prime 2: -ec d7 51 d3 d3 f3 b2 08 bd 71 8a e4 35 5d 23 f9 -16 fa 8f f6 7d f0 36 61 6b fd a7 cb c8 7a eb ef -aa 7e da 69 1f b9 8f bb 03 8a 02 07 22 01 3c a8 -ee 3d 04 8f 97 ba d2 a2 93 0b e4 b9 6f b7 4d 55 - -# Prime exponent 1: -1d 2f 73 08 50 11 9c 7a 86 9c a6 6f 14 40 67 34 -d1 b5 b8 d9 d9 d5 93 0b 28 f2 97 6b f2 a2 71 ab -40 08 99 5f 90 ed 6b 9d ef d7 91 88 4f 76 1c 90 -45 6d ef 44 6b 9b c2 2b 97 b5 2d fb 21 92 84 29 - -# Prime exponent 2: -4d 50 95 03 c3 83 20 31 3e 36 9c 92 96 e1 0a e7 -3b 9b 1b f7 e9 70 cb 2f ce 63 05 ad be 8a 72 0e -d0 e7 8c 41 18 fc 28 71 72 5c 51 01 27 16 a4 48 -b9 4c ed fa 3a 1b e0 ba f5 a9 c2 46 ce b3 55 e9 - -# Coefficient: -bc 15 f4 7c 0b b6 de 6a 7a 3a 1f e9 28 89 80 9b -4a 3c 0c fa 65 0c 2f ec 36 b8 92 85 14 65 47 a5 -7d 2b 15 71 ac b9 d3 0a a7 91 ec 97 fd 51 fd e1 -ec 26 f5 6b 32 63 da ec 9e 29 2e 9c 17 37 36 4b - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# PKCS#1 v1.5 Encryption Example 4.1 -# ---------------------------------- - -# Message: -ca 24 72 1c 88 e0 47 74 f4 15 b4 c4 6c a0 fc 26 -d5 bb 53 aa fb 19 92 f6 de 78 5c 76 3a - -# Seed: -fc 7f 85 c1 38 6d c4 3c 3a 28 46 e4 da e4 d9 54 -80 54 45 9d a2 31 82 f9 84 07 9b 07 1f db 5e 6d -9d 0f a0 b2 2e 3d e6 36 ee 5b 25 3a 42 f9 5e ed -44 22 95 6c 70 f4 8d fe cf 0e 55 5b 05 15 7b 15 -6a 55 c8 bc 65 8c d3 b5 39 7f ab 78 d7 11 56 4e -89 c7 e6 24 8a a0 6a d1 05 c4 0c 31 c4 b1 99 7d - -# Encryption: -e3 95 ff 1f a5 52 fc 2e 79 c4 a5 35 58 df 14 00 -f8 70 4e b3 6c f7 cb 05 1b ab 93 15 0a c6 39 6a -dd 63 66 9b 04 24 8b 9d b3 6a 9c 94 f5 19 8c 6e -5d 9a 17 d4 74 ed b2 03 45 fd 6a 78 b5 1d e8 16 -6e 98 ca b5 b6 d1 65 68 b4 1a 8e 93 e4 83 88 65 -d4 bd 9c 51 cd e8 df be ee a5 88 2b 09 dc 70 bc -9f e7 49 b5 d2 4b b7 ca 51 1d b2 c2 b8 29 a7 c9 -14 6c 77 4e b0 bd 7a af dc 5c 38 d3 d7 cd 58 27 - -# PKCS#1 v1.5 Encryption Example 4.2 -# ---------------------------------- - -# Message: -25 c7 bc 4c b2 43 ac 1f 07 40 86 9c d2 6b a8 26 -f3 55 d4 77 c4 aa 6c be 54 3a dd ea 84 44 44 f4 -1c 35 92 bb 3d a7 d4 21 - -# Seed: -27 2b e3 fb cc 76 14 99 6f 1a c0 e0 a5 e2 69 06 -23 bb 0b 69 70 fc de 0b 6f 45 58 ee 62 34 26 fa -60 ad d6 c5 a8 a1 0d 4a 37 51 50 15 36 fe 8a 45 -c5 42 f6 27 f4 22 9f a1 24 57 c1 13 31 13 72 05 -55 2b 01 4c 91 b1 c4 e0 9e 45 96 78 34 0a 74 c2 -85 e2 6a ef b9 - -# Encryption: -76 50 d6 f8 1a ef 5c 0e 32 0e c7 7f c8 9b 7c 3e -61 83 85 0d 10 c9 8a d7 e9 fe ea 47 e3 8c fb 37 -a0 25 db 42 1f b6 d0 05 80 9e 38 bb 3c 51 95 1d -a9 d9 43 3b a7 ef b1 7d e7 d8 fe 3e 9b 9c e4 55 -53 74 ea 66 3a 1b 5d a4 a0 92 29 4c e9 66 98 56 -55 e2 dd d2 0d 7d e3 aa 35 37 05 8c fd 7e 7a 7b -97 fc dd 98 53 79 2b a8 3f cc 89 07 4a 8d 0f 3c -ef df 98 5b 9e 78 ae bf b0 59 67 36 4f 24 11 cd - -# PKCS#1 v1.5 Encryption Example 4.3 -# ---------------------------------- - -# Message: -cf 00 7e bd 23 da 06 97 1a f7 9a a6 34 d5 d2 55 -05 bd 52 29 - -# Seed: -9c f7 23 7e 28 a8 6e 41 8d 66 4f e3 be 7a e3 0e -eb 95 5a 3f 71 02 b2 7d 5f a0 96 74 9c 7f c2 06 -4c 88 0b f3 d3 0e aa 98 1f ce 39 86 a9 10 fe ea -e1 84 c0 10 25 04 8b a6 79 48 96 fc cf f7 4a 59 -42 f9 62 f3 e3 63 71 f6 b3 55 18 29 43 4a d8 d0 -0a 2c 59 7c f6 d4 51 ea ce 88 86 85 38 a4 80 f6 -8c e6 8f c6 85 6e bb 57 dc - -# Encryption: -b6 32 52 af 2e 8e a2 71 e7 06 fd 68 3d 0f 8c 10 -b3 f4 a3 45 c4 f5 b6 78 5b a9 32 9f 44 62 43 c6 -f3 69 e3 0e a8 fb 11 08 4d b9 79 88 e9 c3 87 4b -34 d6 fd 08 71 7d 9e 81 0e 9c 22 43 60 34 6b ec -cd 3e 0e 53 d1 0b 1e d4 58 e6 4f 3f b0 92 f4 8c -b6 6a e0 3b 64 f6 aa 9c 63 bd 27 9f ae 4c 33 f4 -2a 9d 73 bb 39 11 8e b8 7d 25 12 b9 d9 36 a2 7e -d2 e4 49 60 7d bf 0e 3e 22 3a 53 95 26 35 59 9c - -# PKCS#1 v1.5 Encryption Example 4.4 -# ---------------------------------- - -# Message: -ef da 79 e9 c3 36 c2 34 ff 37 b4 f5 8f db d3 1a -f3 67 5b 3d 2b 10 5e af be ad 4b bb ff f5 4e 68 -6a b5 - -# Seed: -30 c2 09 43 f1 bf c4 23 61 d4 d2 2f 51 a8 d7 86 -cb 2d 0d d5 ff 7d 70 5b 30 28 60 18 11 29 3d be -5d 72 c3 55 97 10 ce 0a e9 5d 2f 16 b2 39 a4 ac -84 45 53 7d 48 8e 3e 6d 2c f5 b7 a6 4c 06 c3 75 -6e 11 60 67 63 63 3e db dd bf 26 be e6 51 18 42 -d2 75 2d cd 88 89 6c b8 55 8a 87 - -# Encryption: -bb 91 b2 f6 f4 33 1d 64 d0 73 6a 2e a6 03 29 aa -16 c2 ed 7a 4d 5c a8 d7 84 e6 30 4c e4 84 4c 71 -58 f8 22 d2 af 29 c8 90 97 7d 75 a9 35 e4 3d 93 -b5 be 10 c1 d4 4f a0 0c e2 8e 75 f5 27 bd 84 a3 -be 5a f5 be e9 45 67 c5 5e 15 ee 3e 93 42 6a d8 -d5 0f 06 4c 57 93 ca 38 c4 3a 70 c5 f5 60 74 0b -16 ee a1 6b 7f 13 41 5f 75 1b 3f db 87 7a 88 29 -33 21 f5 0f ff a6 f1 24 94 96 c2 b0 27 a2 18 ed - -# PKCS#1 v1.5 Encryption Example 4.5 -# ---------------------------------- - -# Message: -4a 01 fc 13 c1 d8 6f e7 b2 fd c7 92 f5 28 0f 87 -5a dc 5a e9 9f f9 11 d0 2c 8c 00 3d 39 bb ee 54 -b8 51 ef a3 4b 41 31 be 52 0d 81 00 ef 62 c2 5a -4b 51 7e 9b - -# Seed: -be 6b a5 d1 1d f1 bf cb 2b 84 67 71 b6 c9 df c9 -33 4d a8 6c 4b 7c 25 43 93 18 e8 ba 8e 47 49 2b -cd 51 1b d4 ca e1 67 7d 31 2c a2 2a 94 57 cc 81 -d9 0e 4d 52 4b a2 26 5f 0f bc a1 8e 3c 3f 48 2d -ca a7 88 33 22 39 34 6d 6f - -# Encryption: -16 bf cf b4 2d 28 b9 d1 62 70 cd 13 8d c3 ca 64 -42 95 6a 41 82 5e d0 23 0b 71 09 16 13 33 3a 9e -7c 52 ce 8c c4 b0 bf 29 10 79 41 a0 d7 2c c3 4a -fd 00 48 bb f4 c7 16 c7 3a a9 b0 c7 8d 37 c1 93 -71 9e be 03 a9 31 74 53 b5 53 d4 f5 b3 85 d1 41 -fc 3b 0e d1 9b 96 dc 35 0d fd 4d 12 e3 dd 03 ff -18 39 d4 78 2c 6d fd 5f df 59 71 f3 dd b0 e3 12 -a9 16 06 f3 13 73 02 0d b3 a7 6d 04 fd 6d 65 d6 - -# PKCS#1 v1.5 Encryption Example 4.6 -# ---------------------------------- - -# Message: -7a b0 6e 19 69 22 c0 - -# Seed: -de 0d 60 33 c1 e9 6b 5f d8 31 21 4f 30 d8 1b 8f -d9 a2 69 3e 5e 8a 36 ea ff d0 39 e7 47 3c 28 ee -43 a3 91 6c 78 c9 a1 12 95 8a 94 ce 67 1c cc 40 -d9 7e d4 18 7a 3f ff a0 dc 12 9d 88 a8 b8 c4 96 -6e a3 94 a9 10 89 61 25 f5 4d af bb 3b 17 b9 fa -10 c4 82 20 09 64 90 c6 f7 5b e2 51 83 e9 98 4d -f5 e4 d7 eb f9 47 5d 11 ea 39 33 5a c7 2f 93 d3 -33 bd 74 22 19 42 - -# Encryption: -54 18 23 f9 05 57 6d a1 42 e2 65 d8 90 45 ab 66 -20 fd 1a 74 c9 53 3a da 4b c7 b4 3d 95 62 9a 31 -18 6f 4e 89 89 20 83 d2 54 9b 0e 63 8b df c0 d2 -7e 14 ec 18 c4 5c a3 58 61 df e6 12 a3 a1 ed aa -fc 72 fb 46 81 a9 9e a6 e6 48 be 89 62 f1 56 1e -75 0d 14 49 f2 3f 43 0a f9 30 72 25 54 4d 8a 8b -89 65 af 5d d1 8c b7 89 53 ce 6d 16 d8 5e b2 11 -af 0c 64 68 a2 af 9f 72 e7 86 61 b0 fc aa 48 15 - -# PKCS#1 v1.5 Encryption Example 4.7 -# ---------------------------------- - -# Message: -9a da 9c 10 b8 ae 22 - -# Seed: -cc 23 43 72 4a c5 0e e5 47 08 fc 5f d0 3f 09 a1 -cc 12 22 a4 4b cd 44 03 87 7c 6b de 86 bf 43 e4 -2c 10 84 f6 ef ff 20 fa c0 ac c3 1e ca 17 c7 38 -d4 68 68 73 65 52 fd 2f 7e 93 b8 22 25 61 05 4e -6d ad c3 15 60 4e af 8f 77 f0 5d d8 58 3a 93 bf -03 cb 9c c2 13 9b c4 19 bb 10 e9 b2 01 b2 a7 e1 -8b 03 79 0c c8 3e d6 05 d6 d5 66 33 05 34 71 39 -c7 5e 1a e2 a5 6a - -# Encryption: -9f 54 d0 de a0 5a 5d 00 72 23 5b c4 67 93 cf c4 -7b 00 6d aa ac 02 41 c7 e6 6d 33 3e 23 c3 cf 97 -63 b6 1d 9e ea dd d8 3f 5d 7f 0a a9 7d 16 c7 69 -92 55 cf 7e 48 72 b6 a0 07 95 62 d2 60 7d 64 40 -d7 ed 37 c6 71 3c e9 66 43 a4 41 f8 39 55 64 d2 -6a de a5 82 3a 49 42 da 4a b8 e4 7b ed 58 81 b9 -d1 84 05 79 57 df 65 39 e4 36 da 35 e3 0a 25 3a -f1 2d 54 1d 4b 0e f8 3c 5e f3 c1 35 ab 95 94 9a - -# PKCS#1 v1.5 Encryption Example 4.8 -# ---------------------------------- - -# Message: -d8 12 6f 4a 88 78 97 82 93 11 76 51 b3 0e 79 22 -d1 4a cf - -# Seed: -ad f9 b0 a9 15 2f 0e 6e c6 f4 39 59 71 ad 40 3f -02 e7 fa 98 f8 15 56 0a fa ff a7 ca d5 b4 47 4b -6e ce 65 ed ab e2 7e c2 4a 0a a4 73 ed 75 a6 1f -5c 24 90 a5 36 b1 a4 df 7b 03 41 77 37 c5 34 e1 -d4 5b f7 26 94 38 6b ee 82 0c 48 db d1 83 17 bd -61 7c 04 b6 a4 17 e3 0e ed 79 58 8d c2 3f d4 db -a1 37 44 b4 b2 aa 5a f8 0a 8a - -# Encryption: -3b 2b 85 ed fc d7 c7 c2 7b de de e1 c2 8a b6 18 -7a bf 1c 96 d9 45 30 07 92 cf 8a f1 97 c2 f9 a3 -91 b4 8b 83 32 cf de 7e 4c 7d c3 4c 42 30 29 56 -92 ce fd a5 ef b2 57 35 49 2b 9f f7 84 c7 ba e7 -35 11 c6 18 e3 aa 7b c8 7b c3 13 f2 67 09 a8 ea -4a d7 3a 34 9a b9 e5 ad 82 6c 96 ad 0e ca 97 e3 -13 28 6b cc bf 8e 33 c9 1f 03 68 39 b9 94 8b 4e -b0 c3 8e 21 3e f4 7f 77 66 1a 27 f8 cf e4 99 03 - -# PKCS#1 v1.5 Encryption Example 4.9 -# ---------------------------------- - -# Message: -f5 df 01 af e6 a9 22 51 8b 3f 4b 80 cd 4f ca 73 -b9 7b ab 61 71 6e 27 d2 51 bd 46 5f 4b 35 a1 a2 -32 e2 da 00 90 1c 29 4b f2 23 50 ce 49 0d 09 9f -64 2b 53 75 61 2d b6 3b a1 f2 - -# Seed: -6b f2 81 0d b8 fb 26 93 98 41 2d bb 88 06 02 82 -d4 5f be 96 27 33 7e 54 34 26 1a 5d bc 19 3a d6 -18 c1 1f 7b de c1 de 25 05 f8 60 37 fc 18 51 bf -6f b4 9d 23 60 62 73 47 49 9e fc 98 e2 92 05 da -90 6d 32 - -# Encryption: -40 12 fc c5 cf b9 78 de f8 8f b8 f8 17 4a a5 b4 -a3 07 75 ac 45 59 f0 b2 f3 d3 b4 38 9b 82 8a 79 -d1 40 25 10 c9 a0 33 7d 48 9d 11 82 ab 31 c8 38 -ac 7c 80 b7 48 60 9a 2a a5 37 da 7a cc 3a 4a 7a -31 d2 ad 25 2b fd 59 28 0b 3d 18 13 a2 6f 93 c5 -9e e8 c5 ee 68 87 18 f4 27 83 93 fe ce 32 3a 9d -ff 83 37 55 e8 9a c8 ee 1f a2 90 4b f2 4c df 4f -01 e6 ea ed b6 a8 ef 01 f4 07 be f3 30 9f 03 39 - -# PKCS#1 v1.5 Encryption Example 4.10 -# ---------------------------------- - -# Message: -a3 82 3f af - -# Seed: -94 f6 70 fd 82 f6 91 32 75 ee a4 c6 71 16 ca aa -bd 33 57 8c f8 4d 22 63 64 38 a6 fd 7e cf ee fc -0b 18 7d ec f7 93 89 1c 6e 4c fc 52 b5 67 d8 72 -bf fb ee 0a 67 47 2a 1a 48 c0 f1 ba 59 8a d8 25 -89 01 c5 6a 55 92 f1 41 14 7e 81 33 9d 74 7e 06 -32 de f0 0d 3d be e9 5c 4e 43 21 cc 25 b5 31 14 -47 a3 02 c5 34 92 9c f7 e5 34 f9 ae 67 f4 1e 01 -e2 2a 3d 7c e4 1b 3b 31 35 - -# Encryption: -7b 60 25 42 b6 4f 0a 1e 0e c2 aa 01 cb ed 37 7e -33 1e a3 ff 86 f3 56 fb 7a 58 83 76 4b e4 cb f7 -d0 75 4c 58 29 64 31 36 f2 57 23 36 a2 3f 15 41 -1d 83 85 14 a1 43 87 24 ad 74 09 e8 ec 8f e2 63 -41 ae ea 56 68 34 5d 0d 82 3f b5 c2 1d f4 59 e8 -bf 7c 15 b8 0b 07 2e 5f 8a 84 65 a4 4a a9 d0 9d -82 5c 03 15 a0 ec d2 d6 49 70 2b 10 9b e8 fe 35 -eb 22 84 3a 20 e7 fd 87 4f 1c 6b 46 a8 0b 68 df - -# PKCS#1 v1.5 Encryption Example 4.11 -# ---------------------------------- - -# Message: -75 b9 a4 a0 bb 2d 46 43 e4 78 f6 54 f2 cc 1a 8c -1b b4 67 19 76 0d 45 41 a8 a7 33 f3 3b 71 3d 32 -c6 0b fd 35 f1 61 74 83 48 47 e8 81 2c bd 7f 06 -ce 72 89 f3 72 c5 82 30 f2 b0 01 45 9b 5d - -# Seed: -49 a7 3d eb 93 e3 f1 be aa ad 3a 19 9a 70 56 9e -09 9a fa ca f7 a7 5f c4 ce 64 8f a8 2e af 2a 0f -e4 11 d2 64 fe 45 f7 45 25 c9 1f 3c 75 10 17 f8 -0a 02 ba bf f3 57 99 62 6f 2b 8d db 9f 36 91 - -# Encryption: -e5 ae e7 0d e8 62 72 3c 51 73 df fb f6 92 6c 3d -33 16 d5 90 9c f5 a1 d6 63 e6 80 ab 2b b5 76 e3 -5b 93 fd 43 27 43 a1 8e 8d b4 fa a3 32 f4 46 68 -a3 d1 9e 5e 69 57 32 f8 4b bd 86 d0 dd ed 76 65 -b7 0b 97 63 2e ab e2 36 4c af ef 7b 74 dc d1 bf -bd 62 5e 2b bb f6 65 4c c0 26 61 81 ac 0a 75 7c -3f ba bd 43 0a e8 63 71 eb 56 af 61 0f 77 cf 2f -ff 6e 24 8f 8c 57 91 60 b9 1d ce cc 0d 20 2b 50 - -# PKCS#1 v1.5 Encryption Example 4.12 -# ---------------------------------- - -# Message: -15 06 eb 34 91 78 5a a7 21 06 bf 6c 85 d0 10 02 -04 6d 1c 16 d4 35 dd 4e 7c 4b 7e 8e 90 dd df 16 -33 2f 94 f4 b8 35 d0 e4 ad 55 d8 3a 81 b3 5c 54 -b6 79 d3 cf - -# Seed: -f6 6e 6a 84 75 84 40 86 e2 84 77 22 97 46 80 1d -43 50 d9 ad 07 68 f3 c3 d8 fa a8 10 7d 95 fb 20 -5e 4b a8 c6 4b 73 8e 54 e5 ac 0d fe ab 99 6d 61 -12 5c 26 79 80 72 59 bc 9e 47 d8 bd d2 c0 40 95 -05 44 8b bf 87 2b f6 64 7a - -# Encryption: -d1 fa 39 52 cc 61 45 ff 77 1b 6c 5a 68 27 5b bc -22 d0 03 92 03 66 17 37 5f 0c 2b ec 3e 28 85 83 -ec fd c6 df 6a 82 8d e3 7f 77 c5 56 a8 cb c4 d4 -43 36 e8 d2 e3 05 87 e3 31 58 73 17 e9 7b 05 a3 -fd 78 02 5b 2d 49 6b 3b be eb 6c 72 5d 9e a5 61 -a7 32 28 82 33 d6 8b 79 49 7f b0 b6 fe e0 a6 b6 -8a c3 13 66 1b 4b 65 47 39 f9 18 f6 fd 3b ff c1 -7c 1d f4 1f 01 44 95 d5 5f 95 90 14 7b 82 d1 5d - -# PKCS#1 v1.5 Encryption Example 4.13 -# ---------------------------------- - -# Message: -9e 3e - -# Seed: -9b 3d df 17 cd 74 e7 6c 69 b5 ca 3a 01 0a 0e 0f -bd 17 05 d6 9c 30 74 35 3b e7 d3 c0 c2 05 f0 99 -c7 a8 10 b7 a1 ad e0 9f 5a 03 6b b7 69 ef f5 3a -53 d4 c6 f8 71 52 92 2d 9a 7b 86 ed eb a3 72 37 -d7 f1 73 4d 9d 97 39 38 3f 48 80 af 3a d6 88 87 -e0 fe 7c 87 a1 74 fb 32 38 b1 e5 1e ad 2a 84 34 -40 c2 b2 7f 22 dd a4 22 8d ce 70 f9 1c 98 d4 71 -a8 74 4d 27 65 55 79 58 81 02 44 - -# Encryption: -42 12 6b 49 2a 1e 7c c0 33 95 b2 ac 70 33 cf 6a -67 36 b1 2e 76 82 5a 17 3b 9e 01 1a e8 bf ed 44 -fe cb 8d 9f 58 cc e1 99 11 fe 42 d4 55 e2 49 20 -09 32 a9 b6 8f e2 e4 19 bc 63 9c 11 78 d1 1f fb -db d9 95 5d 45 9f 5e cf e0 90 20 09 8e 29 7b 8e -91 48 5e 94 bf 11 e7 bf 77 ed f5 a2 70 11 c8 2b -92 73 65 a1 2c 9c 77 c7 e4 9b b7 fe 2f 61 33 39 -de 3f 51 20 87 79 53 86 ca 58 5a 70 24 78 27 90 - -# PKCS#1 v1.5 Encryption Example 4.14 -# ---------------------------------- - -# Message: -70 aa 78 a4 d3 7f 74 c1 81 aa 27 40 7f 2f 9f e6 -63 a9 1b 16 be 9b ea 6f c6 12 88 7f - -# Seed: -d0 fd 16 c0 f0 d7 90 9a 38 86 17 08 11 e4 4f 24 -fa df 94 ff 17 03 9a 56 84 a0 9b 24 e1 93 3f a0 -c4 71 51 63 5d 75 7b 73 c2 3f f3 91 01 cb e2 52 -9a 63 a7 f3 a0 19 5b 6e 47 51 07 11 de 17 1a 16 -56 c9 ea b3 cf 82 d1 c6 52 26 b5 8f d0 fe 58 ec -31 96 24 7f 34 b1 a0 55 27 02 dc 03 75 12 c6 81 -04 - -# Encryption: -95 36 d4 7e 1d 68 7f 1f 24 99 6c b4 6c e9 46 ae -54 d4 a1 49 b3 4b 5b c3 44 43 a2 01 51 83 87 f4 -b6 38 18 37 cb 7e 4b 0a 44 75 13 70 42 f1 44 8c -1e a4 15 15 ef 31 c2 fc bf 62 e7 e9 58 67 b6 74 -ac 23 0a ed 9c 7d 8d 61 c5 27 52 b2 fc 2a 0b ba -fc 77 b3 1c 51 49 30 de 98 23 b4 38 b6 fa aa 40 -d2 55 31 03 3c 66 48 3f a0 02 3a f2 1d a6 4f cc -8b b8 c5 d5 2d 3f 6c 43 80 f1 d6 08 d8 c0 11 8f - -# PKCS#1 v1.5 Encryption Example 4.15 -# ---------------------------------- - -# Message: -01 16 a4 61 77 73 b6 dd b2 19 16 1c 4f d0 71 93 -7b bb 07 15 cc 62 7c 17 b8 e7 52 80 d9 9c dd 41 -6e a5 cd fa 09 06 b9 af 0a 20 cd 47 7f dc ad 14 -15 a1 9a 9d 1b 96 fd c3 c0 ed b9 - -# Seed: -86 b1 58 60 9b fa 08 a8 ed e4 ef 3f 23 e1 2e b5 -0d 24 55 74 26 4d 76 4d 87 12 67 db 8a 95 24 ea -3f a2 e3 84 5f fc 29 1b da 98 99 89 bf 71 5a a2 -b0 8c 49 79 8a 81 9f 68 58 d9 fa 35 f9 4d f3 c7 -e0 86 - -# Encryption: -74 a3 df 38 5d 20 87 7b ca 9d bc eb ca 2e 53 2c -6a be 95 62 d6 81 7b e1 6e 11 8a 60 f4 ab 0a 1a -c0 a8 46 66 53 a8 f8 17 0e 35 fc e1 4b 44 9c d5 -9f 55 8e 02 0a 89 88 94 bd 2a 71 75 58 e6 65 0f -3a 12 85 70 d8 c1 69 a7 74 66 63 c1 d7 ef 62 14 -5f 4b 75 c5 fe b6 38 6f db 85 33 94 c6 59 a9 1a -a2 aa e0 3b ef 91 13 dd 49 28 ff 28 b3 80 92 7a -d1 ba 4e 8a 37 ed d1 72 ef e8 e9 ea bb 61 4d 83 - -# PKCS#1 v1.5 Encryption Example 4.16 -# ---------------------------------- - -# Message: -15 c5 fc c7 54 7d 63 76 1f 6a f1 f2 6e ed 9b e8 -13 4f 9f 92 12 7e 76 b0 3a 33 a9 7b 9b e3 f7 8b -2e 22 fc 7c 85 06 99 a1 5c 0e 0e ce be 2a 71 80 -5f 02 4b 93 88 a3 bd b2 b3 60 d6 9c 5c 0c 46 - -# Seed: -5b 4f 17 a9 de 91 73 7a 7f e8 54 e8 a1 76 be 5a -0a 16 fc 10 42 cb 87 0c c0 18 92 fc d3 8e a7 5b -07 3c 0f fa 01 4f 96 a3 58 e3 aa 5e 73 ea f8 a9 -1f ce 75 47 0b de 64 e8 7a b8 91 ba 3b f2 - -# Encryption: -73 62 d7 39 8d 0c 25 1f 83 58 17 e4 79 37 a9 25 -58 36 ca 02 30 45 7f f6 08 b0 78 d5 09 31 a8 80 -33 ea 76 50 81 12 65 f8 e2 68 b5 33 15 d8 43 8e -52 a6 a4 b1 b3 89 5d 30 c3 da e1 1a 3b 8e a8 c3 -0f 05 e9 d7 1d ef 46 d4 51 11 92 a1 0f 54 21 8d -39 36 cb 17 98 3a 1e 7a ff 18 18 89 39 b9 46 92 -76 49 b0 fc 4f 7b bf cb fc 14 e1 c0 ec a0 7d 00 -c9 03 db 78 16 9c 50 ef 0a 38 f1 da 19 ae 44 59 - -# PKCS#1 v1.5 Encryption Example 4.17 -# ---------------------------------- - -# Message: -7c ad 18 f1 75 13 87 42 28 5e 90 35 d1 3a d4 1f -c3 a8 52 10 e1 54 4e 24 de a3 fc fe 66 - -# Seed: -9a 06 ca 10 fc c6 61 0e 77 df f9 0d d1 76 f8 2e -3f 96 e4 a9 d7 ab 87 2c 74 8e d4 22 f3 4b 33 48 -61 94 40 f0 aa a2 2a 66 98 51 da c8 89 4a 8e fa -34 ea 2c 2d a5 e9 58 69 e0 ad c0 05 a4 9b a4 58 -18 ca a4 74 11 5c 34 49 96 6a 85 c4 18 fc aa 8f -45 63 0e fe 0b 1b 4d 3d 69 be 1b c0 06 8a a7 99 - -# Encryption: -1e fa d4 14 46 b9 1f da dd 8b 80 61 9f 68 27 36 -68 b7 58 5f d9 1f 34 49 ec 85 c2 42 d0 84 9e 4a -53 a5 97 7b 61 aa 40 d1 2c c4 85 ec 7e 4f f2 0f -98 86 91 cb 9d 73 af 46 ea 37 6a fc 69 ba 22 33 -86 e9 f1 5d 03 26 97 da 75 e2 f9 52 be 2a f0 62 -e8 24 6c f7 49 b8 9c 4c bc d6 4e 23 f8 82 bb 55 -3c 3c e3 05 20 36 22 b5 a7 39 77 35 a6 34 aa b0 -d1 7e f9 b5 55 9d dd 34 f4 87 2b 56 e7 98 6e fc - -# PKCS#1 v1.5 Encryption Example 4.18 -# ---------------------------------- - -# Message: -fd 98 c3 8b e3 19 30 70 b5 c4 33 4b 11 c2 5b 33 -4a 44 - -# Seed: -f3 57 91 11 03 e9 87 d1 a9 f1 5c c2 e5 2f 42 39 -0e 0f aa 50 02 c4 f1 7d 40 a4 af 50 f3 1a 23 17 -50 e7 af 61 d9 af df 9c aa 38 61 a2 0d c7 21 89 -58 61 fb 11 8e 08 8d 32 18 e6 fb 35 56 b1 62 d6 -bd 67 91 1d bc 94 21 98 42 65 82 72 a5 d4 9b f5 -ab b4 a0 87 94 95 c5 e6 e6 86 28 59 29 a5 5a 36 -8f 52 4c 14 a4 0b 0c 61 38 0d 0e - -# Encryption: -de ae 18 3b 56 c3 fb 38 41 ea 57 42 34 ac d3 0a -ff 00 d0 05 1f 57 80 37 58 a4 71 4a bc be dc da -8b d1 a4 8a 98 01 53 df 89 6b 13 76 aa 4b 45 95 -80 13 d6 19 be 7e af f6 c1 a6 75 e2 92 ef c3 f4 -39 3d db de ab 47 e8 90 a7 8c ef 69 00 24 49 57 -87 48 90 6c 10 21 b8 91 b9 43 d8 18 d3 a6 1e 67 -a3 15 61 2d 4c b1 cf 19 7c e5 df ab ef da eb 59 -0b 8e 8c 73 68 5e 74 7e 59 a3 95 c8 45 c5 d0 c3 - -# PKCS#1 v1.5 Encryption Example 4.19 -# ---------------------------------- - -# Message: -96 53 d7 94 69 f0 5d 40 19 65 a9 5c e8 74 fa 22 -5e c4 79 74 e8 d0 68 41 c1 3b 47 85 e0 0d 54 7f -9d 31 44 c3 87 9e 6c cd af 78 7a ef c2 f8 45 2a -4a 3c 88 4e 38 ee - -# Seed: -85 5d 6d 15 12 e5 43 a4 5d 3a 9a a9 68 5d 5d fd -a7 04 79 ba 39 52 63 64 14 1b b6 36 27 45 89 85 -71 20 01 22 f4 bc 82 c6 22 43 45 c6 9d 3e f5 42 -f1 23 bd e3 01 5b 60 c4 c0 ff b9 8d 63 01 31 ae -e8 1f e4 a0 b0 15 38 - -# Encryption: -69 ca 62 e2 9a 5b db 4b 04 e2 40 16 21 2c 25 91 -40 a6 0c fa 81 eb 66 93 bf fa fc 9f 60 0d ce 10 -82 2a 00 7b 6a de 93 fa cd a1 b2 b1 65 b5 57 76 -0f 0a 67 5a c9 bc b2 06 b9 64 fb 90 cf 6a 2c f9 -9f 18 6b 36 d2 eb 99 1d 82 53 a0 75 4f 9c c2 d7 -2d e5 49 ab ae 90 94 f5 a8 6c e1 db 49 4d bb 6e -51 62 86 71 5b 3d d4 05 59 b3 10 7b 95 24 b7 29 -ac 65 4c fb 40 f9 ab 35 d0 34 e0 27 19 7c bc 36 - -# PKCS#1 v1.5 Encryption Example 4.20 -# ---------------------------------- - -# Message: -0b df 3f ce 8e 48 7d b2 2d 07 60 ab 71 15 86 ca -8e 45 9c 39 4f f8 b1 a1 86 70 67 a9 31 51 99 a8 -01 24 74 b0 f9 0d cc 87 cb - -# Seed: -c9 b7 8d ce 9d fd 7f 04 04 ff 98 2e 06 b5 96 50 -ba fe 31 ea 19 bc 1f 2e 1f 39 89 f4 ce fc e4 6f -c6 52 42 3d b3 c9 9d 92 a8 fb 58 f3 ee 39 3d 55 -5b 76 84 88 9a 4b f8 15 a1 3e 3b 9b f2 43 71 40 -66 b9 07 58 90 67 50 47 f1 7e 93 5b dc f0 e6 6f -cf e3 9b cf - -# Encryption: -43 ad 3e 62 5f b1 72 15 57 8b ef 2f 46 5f aa 72 -ae 69 43 83 36 9f f7 aa 15 12 01 a3 f2 59 c8 d8 -ce 8c 16 bd 25 52 21 49 f6 66 e8 d6 92 a0 79 5e -a7 15 69 d2 88 1f 97 07 08 5d 3f 59 bd fa 28 73 -66 d7 f5 a3 f7 6e a5 dc 10 9f cb 03 30 2d a0 b7 -86 99 71 3e 0d 30 09 58 4f 97 17 6c 1b 9b a6 3e -80 cf a8 fd 4c 01 3d 74 b5 fa de 84 72 d5 2c 11 -e2 e9 36 81 ba 19 d3 53 d3 1c e6 fa 3c 0a b6 0d - -# ============================================= - -# Example 5: A 1024-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -ab 29 d4 9c dc 92 5c 69 ca e7 52 92 fc 03 62 03 -73 c6 fb 36 d3 c2 49 dd 5b b5 0f 88 1a 4c 93 89 -af e7 3e 8c 56 b8 d6 67 a5 ea f2 b5 71 4a da f4 -ca a0 06 a4 9a c4 bd 4b 91 d5 45 cf 3c 10 00 9d -31 8a 9d e0 f3 bb d8 38 4e 8c 7e 96 ca 15 95 e3 -2a 70 41 d1 68 ca a7 34 43 b8 85 bf 7f 61 4a e1 -21 2e 3b 5a dd a2 9d fa d5 01 b8 b1 a8 1c 3f 48 -a4 56 e1 33 ad 52 da 2a bc e5 d6 e7 82 f2 75 c9 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -ab 29 d4 9c dc 92 5c 69 ca e7 52 92 fc 03 62 03 -73 c6 fb 36 d3 c2 49 dd 5b b5 0f 88 1a 4c 93 89 -af e7 3e 8c 56 b8 d6 67 a5 ea f2 b5 71 4a da f4 -ca a0 06 a4 9a c4 bd 4b 91 d5 45 cf 3c 10 00 9d -31 8a 9d e0 f3 bb d8 38 4e 8c 7e 96 ca 15 95 e3 -2a 70 41 d1 68 ca a7 34 43 b8 85 bf 7f 61 4a e1 -21 2e 3b 5a dd a2 9d fa d5 01 b8 b1 a8 1c 3f 48 -a4 56 e1 33 ad 52 da 2a bc e5 d6 e7 82 f2 75 c9 - -# Public exponent: -01 00 01 - -# Exponent: -07 7b b2 73 32 34 86 ec 4c 25 ed 67 06 34 1a a8 -a6 7a ec 58 43 0d 53 3f e5 86 c6 b9 4f 57 0a 3b -42 90 c4 5c 0b dd 94 68 1f 29 a4 b7 58 8e ea 80 -39 cc a1 c5 b8 0b 82 70 27 9d d0 a9 c5 09 39 11 -93 e3 d5 c2 5c 10 75 c4 a1 d3 dc 32 74 06 6d ab -81 7f b5 1b 16 bc 26 7e d9 a9 98 0f fb c0 92 85 -d9 7f 11 2f 15 26 95 e6 e0 9c ae 72 bb 55 06 6c -b9 db d0 98 a7 5c eb 47 b4 62 72 00 5c 6b d2 15 - -# Prime 1: -e9 4e a6 b6 19 be c3 e4 78 87 8e 87 8c f1 23 b7 -a9 f1 2c ab b1 95 e0 aa e0 22 f3 17 73 46 69 31 -38 b1 1a 86 fa 5c b7 55 5a 10 b8 e4 62 2c e9 52 -0c 57 2b ef 29 1d f7 0a 16 d8 85 f5 97 e5 90 4d - -# Prime 2: -bb cf cc 5a 60 95 34 ee 43 4a 6c bc a3 f7 e9 62 -e7 6d 45 5e 32 64 c1 9f 60 5f 6e 5f f6 13 7c 65 -c5 6d 7f b3 44 cd 52 bc 93 37 4f 3d 16 6c 9f 0c -6f 9c 50 6b ad 19 33 09 72 d2 1c ac 19 ce 99 6d - -# Prime exponent 1: -e8 a6 0d 88 39 54 09 73 a2 dd 4a 3b d1 48 05 1d -f8 d1 0e 82 87 ab b5 45 b0 0c 29 ec 90 7e fe 16 -9f 39 bc 02 2d 56 97 5a fd 5c ff 82 7e 83 da 86 -7e d7 ce 6f c6 c8 a2 b7 e4 e0 35 75 19 eb 49 61 - -# Prime exponent 2: -8f f2 e2 27 37 35 c5 5f 05 56 6a e7 5f 29 a9 c9 -33 a6 2d ef d7 e2 20 01 7f 05 45 fc e9 07 e0 65 -c4 9f 7b ac 34 84 c6 f0 60 49 99 43 32 07 c9 13 -e8 0b c0 1b f7 8d 83 ef af 00 da 17 12 a4 a6 35 - -# Coefficient: -5f 1f f9 6a 8a 90 19 78 4f 92 26 e2 5c 9b fe 25 -08 02 39 43 73 90 25 dd 6b ab 03 7f f4 7d c6 42 -49 85 15 c2 f9 e6 ff 60 60 c5 b7 d2 34 30 d8 d5 -0f 1c 0f 6d 50 c1 80 b4 ae a8 a4 a8 2f cd 2b 74 - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# PKCS#1 v1.5 Encryption Example 5.1 -# ---------------------------------- - -# Message: -5d c9 f8 b1 2d c8 12 a0 9a a4 b0 6d fc b5 7e 1d -2e 8d 1c 7d 2c 07 6b 25 d5 c1 8e db c0 46 bd 63 -c7 ca 4a 59 9f 18 de 26 f3 be 73 8c c2 8d 16 67 -2c 00 6e 4d 9c - -# Seed: -43 d6 05 a5 74 0a 97 0b 32 37 27 af 35 2a 1b d4 -8d e6 9d 95 05 e2 2c 2f ad 03 0c 3b 84 b6 de a2 -d2 2f 91 64 06 a7 69 3c f5 06 c2 d2 51 88 6f 02 -20 3e 3f 76 55 a3 0a 68 37 af 8a 8c be c7 b5 c9 -2f c0 4c 8c 18 df e9 d3 - -# Encryption: -21 5a 35 f4 c0 43 5b 07 ed 5d 2c 4b 68 65 bc 28 -1c ea 70 50 cf ea 7a 7e 86 e0 3f 8a cb 28 b5 8d -be e6 54 58 91 9c ea a5 a3 3e dd 98 20 1e a6 e7 -63 2d 76 22 d5 a5 1d 35 a3 5f ed e8 6e f2 03 ee -f6 eb 34 75 ec 8f 19 e6 9c 0e d5 2c 05 dd 7d 59 -e3 53 f5 2b 67 10 af 40 26 65 55 04 10 7d db 86 -f9 57 e6 c0 6b a6 7b 1f 4f c9 f1 21 e1 5f 82 73 -67 09 d2 de 8d 77 43 2d f0 8d cc d2 a0 cc 77 04 - -# PKCS#1 v1.5 Encryption Example 5.2 -# ---------------------------------- - -# Message: -d7 74 07 d8 f6 9f 80 dc 08 eb a5 f4 26 28 2d e7 - -# Seed: -b8 29 c7 89 be 38 1c d5 9d e2 14 89 db a1 41 e0 -bd 1f a8 a3 c3 82 6d 59 c6 d1 10 e7 df 72 42 ba -98 c4 7a 43 92 c7 f2 ac 1c 6e 9d ae 22 b9 eb 74 -a7 64 36 08 8b d0 ba 6e 19 91 e1 9e 3a f7 9c f3 -f7 de fb 6a 11 61 80 25 34 ba 0e 7e d1 65 34 93 -88 72 ec a6 77 05 8a c7 34 67 d4 9e d1 12 5b 50 -df e5 d6 d6 5a 5d 24 53 99 b6 bf 1b f1 - -# Encryption: -2d 48 06 cf af e4 af 36 bd 02 f6 2d 6a 43 b0 0b -41 6f 70 8e 96 85 b1 7a c8 e3 a4 d8 c2 91 80 93 -05 76 9d 78 98 f6 fc 85 91 7b a2 fd 8e 58 9f f7 -a8 bb 84 bb 7c 12 20 2e d2 79 e0 64 09 a5 c0 a7 -d3 24 bc 46 ae 4f 92 82 c9 02 3d 3d fb 3a 79 15 -de fc 16 4b 3f 08 26 6a cf 12 41 f8 26 24 98 15 -07 41 4e 56 29 78 35 1d c8 b7 a7 9e f5 31 40 21 -01 a8 d3 d3 ea a3 53 9b bf 62 aa d9 9a 3b b1 1e - -# PKCS#1 v1.5 Encryption Example 5.3 -# ---------------------------------- - -# Message: -23 8a - -# Seed: -a5 88 1a cf f3 52 9f 25 1b 1b 9c 61 9c e9 f9 df -91 e0 a0 3d d8 89 16 36 46 87 1a 62 72 07 ee f1 -47 68 0c 32 f4 50 a7 76 e1 9f 54 ec 05 5d c6 8b -04 bd 4d 89 37 6d f3 ea fa 6f ca f6 0e b8 31 84 -39 10 b6 25 b6 4f 25 d9 29 9a fc 30 6a 23 76 53 -80 45 51 94 b7 5d c0 13 5d 27 c3 b7 d7 2d f9 08 -77 5c 7e 90 be fc 0c 5a df 74 a1 69 ed 58 68 f3 -d6 34 32 7a 05 78 18 92 54 45 43 - -# Encryption: -77 10 ee a8 65 7d fd 15 65 16 65 62 df 0e 2e 84 -0e c3 e3 de dc 0b 80 2b b0 21 3e 47 a5 ce 97 f4 -b8 5b a9 ba 14 19 77 36 3d 8f 54 b0 6d 57 8d 5b -2a 96 e9 69 cf a9 15 df 21 9f 00 2a 85 d0 32 57 -04 7b 31 16 a1 c4 dd af 79 1d 93 98 2d 1b 9f fa -24 31 86 e9 e2 b1 9e f0 74 1c e9 8d e2 a4 a1 58 -6e 50 12 c4 81 de 23 a0 ef f8 82 fd 62 38 38 d2 -01 1f 4f 63 73 8a ff d7 ef b8 c5 0f 46 a6 c2 0e - -# PKCS#1 v1.5 Encryption Example 5.4 -# ---------------------------------- - -# Message: -25 a2 7e b1 b2 1f 10 cf 9d 57 1c 33 05 61 0b 97 -f0 da ee 39 90 5c 65 94 bf bf 45 2a 9a 00 d9 e8 -2b - -# Seed: -25 04 61 80 11 c6 73 db 3c 41 22 79 dc 8a d1 65 -ab 7b 64 73 ae 19 5e 8d 6d 41 21 49 18 19 8b 34 -51 a6 50 8d 61 38 ce dc 51 8d 80 12 ba 0e c7 9b -38 6a f8 fa 40 b0 34 78 bb f2 ba 06 5e 58 2d 61 -95 cc be 15 8f 11 78 1e ae b1 b1 72 0b 72 d9 b5 -21 27 de b9 55 17 11 e8 87 db d0 b8 - -# Encryption: -35 72 bd ea 23 05 e1 78 5c 75 4d e7 44 c4 fa 3f -a2 cb 75 71 60 e5 cb 39 a3 14 97 e1 48 5b bd 7c -08 99 c5 35 85 b2 bb bb d9 90 81 b4 16 ef c6 85 -78 db 78 e0 ec d0 8d a7 a3 95 3e 38 6b b2 5c 12 -bb b8 7c 78 94 42 83 a8 c8 01 87 b4 50 8d ab bc -76 97 f4 3a 8a e7 8a 33 fe bb 15 f3 cd 58 1c 80 -d4 9b 97 1b cb d4 8e 44 14 2f 58 c2 c9 1a db 1a -e1 45 aa 9a 83 b3 c5 81 5a a1 a8 ff 8d d2 31 fe - -# PKCS#1 v1.5 Encryption Example 5.5 -# ---------------------------------- - -# Message: -59 cf 0b 6b 50 ea - -# Seed: -2b f1 91 60 df 69 88 93 5b d2 46 10 6b 89 09 dd -7b b3 e5 16 90 df 84 d7 6e 4d 31 ac 82 10 44 56 -34 6b 4c 3c 9b a7 b5 e9 e6 8e e2 08 6c 84 73 c6 -83 02 e2 59 9a bf 6b 31 ce b3 f7 81 ad 6b 56 89 -86 f2 1c d6 d7 55 32 8f b8 3a fd 55 48 50 1d 07 -0a c2 dd 8f 5c df b6 2c ef 54 5e 81 5f e3 82 bc -0c 67 b6 76 e5 45 6e bb 9a b6 7d f4 77 40 c6 a4 -3d e3 f9 a2 47 7a 9b - -# Encryption: -2e d5 91 fd 4b 35 7e 94 f4 81 ba 84 ff 4e be 7a -e4 31 05 4e 5c d9 8a 99 58 96 48 e6 16 cd 68 e0 -d4 72 4f a8 a6 c5 99 68 6b fe e1 74 7a d0 77 db -ed ad 45 f1 24 4d 7f 8e 00 da 3a 3a 06 d2 31 32 -d3 17 1d 74 4e f1 4e 1e 97 cd da 10 9b d2 e5 56 -a5 fc 7b bc 60 9a 7f f2 4c fa be f4 b5 6c bb b7 -0e 05 06 53 b6 98 48 d7 11 30 75 a5 de be 7a 46 -82 15 f8 dc 08 e7 ef 84 fd 55 77 8c d5 b5 96 e5 - -# PKCS#1 v1.5 Encryption Example 5.6 -# ---------------------------------- - -# Message: -e9 44 52 f5 0a 5e db e6 75 73 ab 22 30 9f a2 1b -ab c6 d2 25 20 e6 e8 3b f7 2e 7a fa 6d 71 e2 02 -96 da ea f5 4a 60 c8 03 63 04 87 9a 21 31 d1 78 -78 0e 34 8e e0 12 0b 99 7c - -# Seed: -c5 30 44 3a 16 ef d8 d6 d7 2a b4 44 3f 8d b2 44 -91 de 99 d5 aa be 51 88 b3 f6 1d c0 48 3b 7e e0 -0b 1c 13 25 9b 8a e2 40 9f 1a e6 2d 99 30 c1 1a -4d de f3 e8 35 82 93 88 93 f9 ac 66 8f 79 c6 4c -7f 5d 79 6d - -# Encryption: -0e ee 90 c7 08 18 22 1a e2 70 4b be 38 d6 8f 8e -15 4c 6e e7 ad e5 3e 2a 1f 4d 1d ba ac 98 c5 75 -91 eb b6 c6 38 bc b6 8e 18 14 35 b7 00 01 ba d1 -80 19 2b fd a0 57 32 c0 5e 7f b5 af 22 aa 89 d2 -a8 ff 80 cf 9f 08 62 f0 4c 05 ca ca 3d 2a 3a 5b -07 79 94 6c 6d df a0 4c d7 9f a1 64 d6 02 f1 b7 -de 5c 95 be 85 e9 60 84 67 e2 5c 29 d0 35 c4 66 -09 06 26 9f 6d c0 0a 47 2b 04 46 ea 56 e7 2a 59 - -# PKCS#1 v1.5 Encryption Example 5.7 -# ---------------------------------- - -# Message: -1c bf a0 e7 b1 a1 0c 13 d7 50 77 b1 cb d8 03 10 -cd 24 10 34 0d 5f 53 72 93 46 4a 67 81 a9 cc 30 -2c b5 38 0e d9 26 7b 3e b2 3c db 13 - -# Seed: -d3 6b 7e 17 99 05 9d 1e d1 34 7b 0b f8 24 7c 6b -e5 18 7d 8f 15 21 9e 3c b6 6e c6 2e 1a c4 1f f7 -ed 35 7e d7 ca 03 84 e3 1d 39 94 85 61 fc 16 cb -d9 6b 7e 70 42 79 e5 72 bf 56 4e 06 c3 a3 40 1a -27 14 dd 51 d7 21 5b eb a1 c6 61 54 f6 0d d0 cd -4d - -# Encryption: -9c 03 dc 01 33 a6 e6 aa ba 92 05 9b df 5a 6c c1 -b1 44 b9 0d 2a 94 a4 8e 7b 3c b9 0b 0b b6 f6 24 -c7 b1 d1 72 33 1e 43 23 d0 8d 2e 8e 09 95 32 dc -b3 b2 a8 7c a4 20 74 9f c6 34 5c 0d 86 e9 ab ca -71 af 09 a0 92 9e de ee de 83 e7 22 44 20 3b 2b -f4 5c eb 18 7e 9d b3 c7 d3 ad 05 b2 3b 59 62 4c -24 66 96 cf c7 58 06 39 14 02 e4 44 e3 97 49 69 -88 e1 e1 f4 2c 6a de d3 0c dc 93 79 37 f3 00 54 - -# PKCS#1 v1.5 Encryption Example 5.8 -# ---------------------------------- - -# Message: -e1 72 a6 b8 b4 96 f0 77 73 8b 74 f6 d8 b2 92 dd -a6 07 f2 ad bf b3 72 be 37 ee 00 08 88 be a3 1f -99 cb a1 cf 39 32 e4 be 37 17 c9 e1 68 90 1a 32 -d1 b8 20 be 4f b0 13 75 27 a2 48 18 77 fe 01 ee - -# Seed: -84 0c e1 3b bc 96 17 dc 9f 3f 26 b1 47 30 1a 6f -46 30 0d 77 81 a5 d9 81 16 2f 86 92 87 37 1f 1d -59 58 76 4f b0 0b 05 53 70 ec 71 1b ba 52 83 fc -b0 0b 83 bc 02 17 5e a1 01 7b cc 83 53 - -# Encryption: -99 3e 39 6f b5 7b 2e a6 a1 a3 fc ed 9a 69 d3 61 -cb b6 26 5b 26 50 3c 17 5f 84 c6 1a 41 ea 3e 1c -e4 fb b6 2e 01 d6 42 0e 22 fe f1 d9 e2 8a 58 83 -e2 ea c8 2e 05 f3 58 ea 75 f7 7d a4 89 7b 6b 64 -9a a4 74 28 39 41 93 dd ec 64 8c 3a 7f b8 1c fc -f4 b5 1c e3 eb ba 78 ae dc a7 bb 91 7b 35 b3 e2 -2a eb 20 1c ea 96 59 2e 50 e0 d2 84 1e 7d 2c e0 -d6 9f f3 03 9d c0 1e 96 4a 97 7a 01 76 83 b3 87 - -# PKCS#1 v1.5 Encryption Example 5.9 -# ---------------------------------- - -# Message: -c8 f0 ea 23 e0 66 11 e4 fd 27 b6 1d b7 92 0c 55 -f3 c0 a2 22 12 88 38 e4 cd b0 62 e1 76 b2 1f c2 -32 53 55 8c 5d 40 de 2d fd 62 0f b7 cd f1 39 9c -2a f8 fc 77 ca 33 35 - -# Seed: -16 4d 77 b5 d2 6a e6 d7 ab e7 ca ed 62 5d 87 c2 -11 cc 50 9a d0 17 2c 20 83 3d 8f 98 ca e3 8a 2c -37 0e f2 1d 40 96 da 84 1d be ee 94 8e c6 34 03 -ca bd 4a 5f 71 ac e4 93 64 aa 7d e2 0f 32 c9 88 -33 7a 11 5f 83 46 - -# Encryption: -7a 8f 15 ee f5 10 ad e8 d5 c3 17 f9 06 4a d7 da -e6 c9 3e 7c f1 56 a7 37 22 02 32 58 f8 b5 74 47 -34 70 00 34 a3 de 6f 13 7a f6 e9 00 46 d8 6e 9b -90 59 0f a5 a6 50 ce f4 fd b4 d3 36 02 33 af 86 -f4 a7 a2 3c 24 3d 19 51 c6 66 b6 73 c3 3c 7d ec -4f 51 ac e3 4b 80 5c 0a 9e 67 e2 09 cc 7f 9e d6 -9b 8f 5e b5 c5 53 e0 f1 5c 10 30 4b f5 6d 7b e1 -71 f3 1c ce 88 f3 7d 1f b4 a2 a0 04 18 89 75 76 - -# PKCS#1 v1.5 Encryption Example 5.10 -# ---------------------------------- - -# Message: -19 db 24 22 05 c0 3d 7f a9 93 5d 9e 04 fa 6e cf -38 a5 1e a9 98 ac 8e 4b ac a6 cd fd 6a 0a ce 1d -f3 67 e7 3d 23 c2 40 af 76 b6 2e 9f e9 21 5f e9 -43 - -# Seed: -be 49 52 05 55 69 56 fa e2 a2 2e a7 0c e1 02 de -06 6c 9e 58 95 96 06 21 74 84 a5 b1 50 36 ff a1 -d4 61 23 9d d4 7b 4f 38 1c ea 71 51 6e 2d b0 fc -36 9d 72 b4 40 69 65 12 a9 72 88 f0 6f c0 bc eb -96 82 86 e9 95 e0 2d 21 8d 9c 26 62 - -# Encryption: -55 12 b3 99 9b 30 c9 c1 44 0e 59 75 93 1d 55 f2 -1e 9e b4 22 b6 2d af cd ab 5d 50 03 a7 5e b1 24 -81 99 86 36 19 13 36 1d fc 46 ac 29 aa ba 8e 1a -a0 2e 1b a4 44 67 16 2d 20 f6 3a d1 70 fe 0d 87 -a5 3d 93 c6 4e 02 6b 12 be 6b c2 b8 eb 0e 57 c0 -39 eb 60 f3 2c 4b 52 70 35 f7 03 a7 a8 37 4b d7 -fa a7 b5 40 4a 3c 5a ad b7 92 e2 5f f9 28 76 b2 -3d d3 a7 42 2c 45 26 6c 6d 98 6e ec 53 34 b9 ba - -# PKCS#1 v1.5 Encryption Example 5.11 -# ---------------------------------- - -# Message: -49 a7 61 f8 c1 8e f9 23 62 d6 ab b2 4c 07 fc 72 -82 55 84 24 53 69 4e 17 60 58 99 f4 37 b3 1a c9 -8d b5 16 - -# Seed: -d8 cd 85 ed fa 0a 84 d0 76 a9 f8 b2 f9 3d aa eb -a9 ae 37 43 81 ea 4f 8c ea bc 14 f6 2a 4e d7 63 -8c 1e 39 67 57 de 3a e2 b7 ef a3 a1 7c 9a 55 86 -da 84 a5 e5 0e cd ed 61 08 7f a6 f0 ce 93 82 87 -99 8a c1 b9 bc 33 21 a7 ed 16 0d 28 67 04 e0 52 -6e ce 7b 30 b4 68 14 64 9f ec - -# Encryption: -9b 47 82 68 40 62 12 ca 05 30 f4 31 bd b2 63 72 -61 50 84 ca 48 8d a4 34 51 d2 5a 22 b3 5a c6 fc -61 e3 70 74 a5 c2 2b c1 c7 01 db 19 32 b8 c5 57 -b8 48 7c ea 56 60 50 e4 8a d6 e0 37 6f 8d b4 19 -8c 4d 27 db 2e 6b 28 c2 5a ed 83 7e f4 77 42 d5 -eb 8e b1 d8 b4 32 c9 d5 73 cd 4b 86 fd f3 2c 52 -a3 d0 f6 cf 92 cf 3c d9 51 96 77 a5 8b 1d 1d 99 -4f c1 c9 05 7a c1 06 e8 16 04 59 26 b4 5b 00 e5 - -# PKCS#1 v1.5 Encryption Example 5.12 -# ---------------------------------- - -# Message: -84 e8 28 f7 15 f2 28 a6 02 65 - -# Seed: -f7 f2 75 a8 53 d4 e1 26 d7 d0 c3 8e f7 03 f3 fb -da 7a 95 20 78 8d 7a 81 a3 1b 05 30 d4 3f e6 c9 -4b 1b 1b b1 08 51 20 9d b2 6a c4 b8 88 ae ce ea -77 13 82 4c 29 38 b4 c6 43 1b 2b 03 c6 93 ab 7b -54 63 15 41 54 6a c4 03 94 79 85 48 fb ba 95 88 -2d 91 a1 7c 27 e7 dd 53 02 6c 96 79 1e e5 5f 24 -7d 7f 89 8f ea b3 70 9a 13 2a 78 26 66 a1 4d 0d -f1 a8 4e - -# Encryption: -4e 3f e9 6e 8f 96 e5 b3 c6 11 ca db 96 ed 51 04 -20 98 ec c5 47 be 7b 88 f8 de a7 65 ae 14 e8 35 -0c fe 39 dc b1 c1 d6 e4 17 9c a4 04 d5 38 4d 87 -b0 66 50 75 ee d7 da 7a af 71 00 8e 24 67 d7 0b -ff f6 23 b4 59 4b 6d ff f9 0e 3d 84 85 f9 41 89 -48 6c a0 ca 9e 72 2b 2a 77 7e 25 b5 82 f7 ad 4e -c5 10 3a d7 67 85 9a c5 9a 1b 8c 5c 19 71 30 17 -48 fc c2 64 f6 c9 29 36 4a 8d 9a f4 22 55 c0 f6 - -# PKCS#1 v1.5 Encryption Example 5.13 -# ---------------------------------- - -# Message: -c4 79 7e 8a 6f 26 9b f2 5d 4c b4 ec 3f a4 6f 8f -11 e6 b3 69 fb da ec 1e 51 97 83 58 d4 6f 3c f3 -b8 42 91 7d 96 7a a9 d3 0b 18 34 53 93 7a 68 26 -56 b2 7b - -# Seed: -17 77 42 19 7f 04 11 44 3b d8 7e 28 ea 88 d5 4b -4f 2c 7a b1 dc ae d8 1a 56 f8 d7 87 91 12 44 54 -02 85 04 d3 22 e1 de 34 60 47 a4 93 93 3e 87 62 -8c e0 8b 06 c0 17 08 2d cc d3 8b 48 94 65 14 ea -37 7c 2d fc 75 2a dc 24 fb 57 - -# Encryption: -79 84 c3 ba d8 6a 54 79 90 e0 47 5a 48 4f 8d ba -5d 4d ce b0 d3 e3 fc e0 71 d6 f8 71 76 b7 cb e6 -f8 11 2d 81 d7 cd aa d7 7e d0 d5 78 8e 65 f8 bf -5f 0c 2a d0 df 07 cc df 54 b2 da ce fc 19 ba 65 -20 1c cf d3 61 d1 86 b7 d9 e2 69 aa 1e 6a d2 c7 -2b d2 3f 58 08 4f db c3 bc 60 e1 7a 33 e3 c5 5a -95 eb 0c 38 a0 81 bc 0d 39 81 db 26 a7 21 2d 6f -69 1b 33 6d ac 46 b6 4a e2 25 38 a7 b0 08 7f 25 - -# PKCS#1 v1.5 Encryption Example 5.14 -# ---------------------------------- - -# Message: -a5 e9 de b1 c2 0f 98 2d 5b 7d 4b 87 d7 99 46 1f -05 3d 91 9e - -# Seed: -59 75 9c f5 f8 38 d9 52 49 3d 0f 42 81 e3 ea 0f -e2 16 97 1c 0a 2e 24 54 b9 6c 8a 11 b4 c6 91 27 -15 90 24 db 6e c5 c3 36 40 d1 20 29 58 99 f6 66 -6c 94 17 b2 02 a8 6c 26 ef d7 c6 13 4c 92 fd 86 -b8 32 3d 17 4a 62 53 48 81 38 2d 7c 6c 9e 1b 8c -1e 95 da f2 10 c3 e9 ba 43 e5 88 79 f3 4f 2f a7 -1e f6 ae 4b 68 d6 41 47 be - -# Encryption: -70 ac 10 2d 07 1e 3d 90 22 81 83 62 16 e0 81 29 -0b b5 df cd 56 68 d1 1d ae fa 0a b0 64 59 9d 0f -91 4b 47 29 61 37 5b bf 5f 2a 66 6f ae 0f 6a 25 -ba fd 44 f6 65 c1 7c 14 4d c4 d4 cc 0a 5d 5b a5 -5c 47 a4 cd e9 59 b3 2b aa 52 32 a0 7f bf 93 78 -c9 c5 3c a2 b3 77 81 c9 3a 1c c8 d6 52 94 78 a1 -c6 73 03 4d da 7f f3 35 60 78 6a 46 4f 5b 4a 55 -9c 62 6a e2 95 bc 91 d0 ee d9 37 5f 49 e3 e4 aa - -# PKCS#1 v1.5 Encryption Example 5.15 -# ---------------------------------- - -# Message: -73 9f a7 6d bd 12 73 03 b7 ab f9 3e 1d 7b a7 29 -75 5d 6c 81 1b 5e 93 35 5e 0c 01 1f 74 46 4c 7d -b4 79 19 3c 3f b7 38 0a 62 a0 c0 06 a2 d1 dc 49 -a7 66 af 63 fb a4 52 7c d1 57 50 6d 62 c2 1a - -# Seed: -a0 b4 da ff 3e 26 ce bb 3e 4e 3a 43 db 36 c4 66 -fb 8c e6 05 b2 5a f4 c9 da 74 4b 62 d4 1f 9e 62 -c2 28 5c 39 0d 60 d1 8e 3d 7e 67 5b 4a c3 19 67 -24 45 19 46 bc 1c cf 2a 9b 56 2c 45 33 c9 - -# Encryption: -2b 79 80 91 b3 a3 91 53 3d 62 dc 0e 41 7b a6 de -da 00 5b fc 30 ab 7d c8 2e 8f 9b cc 74 17 bc b0 -04 34 8c 6d 00 e5 37 d2 72 2b 84 38 61 48 92 45 -ab 0d 51 f2 11 44 7d ac 33 a3 f9 dd 6f 3c a6 6b -bf a0 d1 ad f9 8b c9 09 95 15 92 69 76 b9 25 8a -ab 63 20 4a d8 91 65 c8 7b be fd 8d 98 85 34 b3 -74 07 df 7d 43 ad 39 1e ed 99 82 47 28 ef c3 a5 -33 b7 89 b4 7e 8a a7 12 16 17 47 4f 33 25 c5 1a - -# PKCS#1 v1.5 Encryption Example 5.16 -# ---------------------------------- - -# Message: -5a 44 b5 47 bd a1 9e cc a1 dc 7b c0 45 50 20 5f -66 c5 de 0a cb - -# Seed: -2f 54 85 d2 5f e5 ce 40 ae 62 a1 12 97 6c b4 a5 -39 b7 4d 96 ef 8b e8 73 32 5e 20 4b b3 f8 66 07 -a1 6a 2c 2a b5 0f 69 78 09 ed 03 01 72 70 ef 20 -a1 02 c4 3a 2c 4c 3b e6 ab 7a 8a e2 dc b5 69 84 -d5 e0 65 52 45 93 eb 70 70 83 4c e5 53 f1 75 69 -20 bb cb be 4f b2 6d 35 d4 ad cb 59 df 52 46 35 -6f f1 2e 7a a9 ee 6d ef - -# Encryption: -62 d1 48 9a 40 3a 90 fa ac 67 7a bc 17 4a a7 24 -3b c7 51 a9 64 69 5f 6c 32 b3 9d e0 18 fe 46 43 -44 20 ea 76 59 be 2c 41 0b c5 6c 4e 3e 7a 1b 16 -77 fd f4 ad fb 23 24 f0 41 ed d5 79 0c 4c df ab -36 55 e0 7e 41 fe 9d 73 29 21 51 b0 dd 5b 96 fc -84 a6 b2 0f 6f 3b c0 f6 0e ae a8 d8 29 17 b2 10 -83 05 59 40 fc 02 ee 3e 17 c3 78 bd 4d 85 06 d0 -8e c4 5f 33 de 57 80 f0 1b d3 18 a9 a1 67 87 ad - -# PKCS#1 v1.5 Encryption Example 5.17 -# ---------------------------------- - -# Message: -16 80 2d 80 3c - -# Seed: -02 f0 e7 62 c3 39 17 bf 6a 4d f1 1f a2 84 73 54 -7a 5a b0 76 7d d3 a6 1a 8d 05 cc 1e 6f 98 34 5a -f1 a0 0e 42 f6 2b d8 ec ca cb d3 7f 4c cb 80 9e -9e 05 5f 73 d3 37 5a 60 41 d9 78 2c cd 85 d5 9d -14 f4 3e 5c 94 10 25 7b 90 6e 41 cc 8b 97 35 47 -d0 62 2b d2 1d b2 9a 91 38 d3 b1 be de 38 ce 5c -94 c4 e1 d2 a0 a8 40 0b 45 ba cd 42 69 79 7c 38 -5a a3 06 6e 65 80 72 99 - -# Encryption: -75 3b 9c ee 70 d4 18 1f 95 63 87 80 db 7a 04 f9 -b1 2e a3 8e 5d ae e4 f2 89 4c 02 67 3a 53 f4 85 -30 74 6f f2 85 8b 78 7e fc b4 2d 45 e5 31 be a1 -c8 da e9 48 77 15 3b 95 6a c7 b2 87 46 ee 21 c6 -31 bf 9a 3b a7 9d 2b a8 13 21 b7 96 03 b1 d0 1a -4e 90 9e d5 a2 7c bf 27 c9 57 78 3d 3f 79 50 e0 -1d d8 f4 47 f1 0e ce d3 6f 2d 19 35 86 f5 cc 17 -fb 62 2a 05 fa a1 fb 5c d2 aa 06 4c 08 67 b1 ca - -# PKCS#1 v1.5 Encryption Example 5.18 -# ---------------------------------- - -# Message: -d6 d0 f6 03 85 97 9c a5 06 fc 83 34 21 bc d2 2d -a6 a0 6a 8f 37 0a 7f 02 fe f4 7c 1c b2 19 9f 26 -45 c7 54 90 fb f7 89 ad 52 47 04 da 8a 27 66 c6 - -# Seed: -a0 3c 05 67 2e fe 23 b4 4b 26 c7 93 e7 05 3a 77 -04 8b a2 db b4 b5 3a e9 75 18 54 e7 ad d7 d6 7c -12 cb d1 6c 0b 19 34 d2 c2 3e 77 cd cc 89 ce 1d -45 c7 61 15 8a a8 61 31 71 a7 39 01 ac 1f 61 c6 -57 05 53 3d 3e 63 9b 57 a2 48 92 91 79 - -# Encryption: -00 78 dc 48 a6 61 58 99 2a aa 68 fc 3c cc 62 8f -92 a7 08 d0 b1 d4 38 37 20 8d 53 4b c3 f9 be 1c -14 12 ed 0f 9f 7b ef 49 43 0d c9 e9 98 f7 52 e0 -74 77 68 b4 ae 38 14 46 96 c0 03 d6 d2 5e a1 a6 -ca 6a ec 92 4a 9f 4d 9b 57 5a 8f 13 6b ba 29 bf -31 c1 3b 70 50 bd 55 d1 00 0d 43 3d aa 6c f1 0b -49 11 6c 80 63 10 7f d3 a5 bd f6 15 45 c5 d8 63 -f6 a7 88 81 78 6c c8 dc 37 6d 36 c9 11 36 82 25 - -# PKCS#1 v1.5 Encryption Example 5.19 -# ---------------------------------- - -# Message: -b0 38 1c ac 04 f3 10 15 04 96 8f 26 d6 55 47 45 -38 3b d1 71 d3 61 56 dd 36 80 b3 db 6f ad 7f 77 -1f 7d - -# Seed: -cc 54 8a 67 77 cd e9 53 c1 5a 71 fc 49 7c 0c 36 -17 b1 bb 05 6b 03 28 8d 9a 54 8b 69 3b b4 30 8b -67 c1 da c3 8b b9 b8 c9 cc 89 6a c2 44 a9 e3 0d -13 24 30 f4 ce ae 57 90 34 3d bc e3 8d 05 6f 27 -b8 6b dd 9d 32 a8 17 1f 3b 3c c2 fd 14 22 65 ac -9a 68 dc 35 36 27 33 9c d8 83 03 - -# Encryption: -45 6f 7c 3e 3b e8 5f f7 bd d6 b5 b2 50 bf b8 1c -d6 fb b1 86 d2 5e 0c 1c 52 59 d6 78 87 93 c5 41 -ed ac b4 ec de db 8a 89 29 01 34 a6 06 f4 6a 81 -99 1c 13 b1 20 e3 30 56 bc 0f c7 e9 7b 34 2d 0f -20 05 18 13 dd e4 5e 0b 59 6a 7d cd 69 04 90 3b -8f c0 76 a6 e2 4b 3a d8 01 34 16 d9 fd 18 48 30 -55 4a d5 4d 55 48 bc ad da f5 92 0a 02 49 55 88 -78 25 dd 37 1a e4 ef 90 06 9a 4f 31 1c 5a 17 29 - -# PKCS#1 v1.5 Encryption Example 5.20 -# ---------------------------------- - -# Message: -e5 - -# Seed: -fe 0b c7 ac b5 6c e1 4b 4e 2f 55 fb a0 e2 b1 71 -54 90 7b e9 4c e4 85 c6 98 4d 61 f6 7c 04 a7 40 -a2 8d 60 94 ae ae 33 b3 ea 0d 58 18 3e 1e c7 f6 -01 b2 ab 82 0f b8 a7 ff ac 0b 4f 96 0e 1b 4a cb -e5 7c dc 35 b2 25 c4 97 fc ac a0 30 19 a2 95 b3 -e6 6d a9 6f 53 79 cc d1 da 44 47 9a 4f 21 35 e1 -06 3d 71 a2 82 c1 e6 6f db d5 d9 53 f5 71 8c 25 -39 d0 0c e4 9b 45 18 20 45 4d 2d 49 - -# Encryption: -5c 53 36 77 a1 dc b3 63 95 da 9a 6d 34 77 bf bf -71 51 2c 6a 93 3d 04 1c a3 13 44 e1 cb e1 e5 55 -88 a1 14 6e 3d ec 46 10 ef ac 41 b5 f8 02 66 02 -66 52 b3 d7 aa 59 42 74 d9 d9 20 d3 3a a0 ad 9b -4e c5 9a a8 80 71 2a 1d 1c 36 8a 45 7f 35 c7 43 -88 b0 42 f2 49 8e 9f 4b d4 5a 26 f3 21 dd 9e b3 -33 ef 80 af e3 af 9f 72 9c a1 8f 42 c8 8a 71 73 -85 8c 54 20 66 f8 a2 52 cc f0 fe af e6 b5 a9 24 - -# ============================================= - -# Example 6: A 1024-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -dd ca d6 a3 8b 37 04 cb e0 6b b1 b5 1d 11 62 58 -49 78 a4 29 1f b6 73 b4 ea 30 ed 8b 51 a4 bf 26 -1d c9 f0 f4 69 ce 99 88 a0 89 f0 84 36 64 64 a1 -80 cf d7 17 10 69 a6 f6 36 d7 5f 23 40 1b 30 cf -43 ad cf 87 0e cd 24 58 2f 4d a2 95 22 91 51 dd -cf c7 c9 91 86 b2 45 88 5c b6 31 96 c4 a5 72 6f -20 7e e3 60 af 3a d8 c4 83 85 a4 e0 84 1d 7d 85 -1d 54 54 5d e7 67 d8 f9 99 dc 17 eb 0c 57 11 89 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -dd ca d6 a3 8b 37 04 cb e0 6b b1 b5 1d 11 62 58 -49 78 a4 29 1f b6 73 b4 ea 30 ed 8b 51 a4 bf 26 -1d c9 f0 f4 69 ce 99 88 a0 89 f0 84 36 64 64 a1 -80 cf d7 17 10 69 a6 f6 36 d7 5f 23 40 1b 30 cf -43 ad cf 87 0e cd 24 58 2f 4d a2 95 22 91 51 dd -cf c7 c9 91 86 b2 45 88 5c b6 31 96 c4 a5 72 6f -20 7e e3 60 af 3a d8 c4 83 85 a4 e0 84 1d 7d 85 -1d 54 54 5d e7 67 d8 f9 99 dc 17 eb 0c 57 11 89 - -# Public exponent: -01 00 01 - -# Exponent: -5e 48 e0 3d dd ec a1 a9 59 d9 ee 4d a3 f1 c3 f0 -ec 2a d0 fe 7a 70 c1 77 63 27 31 94 4c 3c d0 d5 -8f 4c 4d 96 59 74 6e 68 5a 76 c9 3c 2b 33 3a 64 -3d b2 1d 29 bc dc 6d 11 b5 f6 90 87 17 b5 77 65 -99 ff 30 88 b2 01 4f fc 51 f1 8d 93 22 24 f1 05 -9b 22 39 ea 56 44 e8 06 9a 5c c4 31 ae f6 07 38 -0a a9 24 c1 58 ab cb dd 97 51 f5 4e 67 79 c4 ec -23 21 68 b0 01 4f 4c 8b 49 7b e9 49 ae e6 57 51 - -# Prime 1: -f9 47 1f 2d 22 13 a9 2c f0 a7 c3 84 04 d4 0e 32 -2f 14 f4 39 61 f0 1e 92 33 63 cf 66 53 e8 98 4f -b6 e6 8d 66 e6 f1 59 80 3a 44 bc dd 09 e0 56 19 -6d a4 00 7a e2 a3 7f 40 57 bf 7e 3b 5e 4a 80 23 - -# Prime 2: -e3 c5 f8 cb fd 51 c6 c2 66 b1 a3 2f b2 f6 fa 48 -9b 97 54 b2 27 c7 7f 53 59 c5 5d fa 03 80 fe 9a -02 b4 d3 95 05 f3 ab 36 95 7c eb fa d5 34 d7 f9 -a2 67 eb ee 19 af e5 c6 24 04 3e 30 19 d0 ac 63 - -# Prime exponent 1: -2c f4 79 97 df 1c 62 97 1b 33 76 1c 19 ee d0 3c -96 a7 15 c0 3f 7c 59 57 0e 73 82 94 b6 af 2c c0 -bb 80 6a a1 d3 26 55 78 bd 89 65 f2 0a f4 ed 32 -1a c6 c7 db 61 82 10 d1 de c1 47 17 97 d2 a1 b7 - -# Prime exponent 2: -a6 c0 29 bb d5 91 c7 cc 4c 78 61 fa aa af 8b 5e -1a a2 78 7c 11 09 49 5a d1 0e e0 15 07 f9 a8 eb -41 6d f6 b4 53 ee 26 fb 48 07 73 8f 68 05 4e d4 -50 24 7a a2 0e a6 2a b6 9b 69 8b c9 95 2c a2 f7 - -# Coefficient: -aa d0 60 de 5e db 35 81 8b d6 3e 85 d4 2e ee 55 -e4 cf 8f a4 2d 4e a5 92 83 ce f9 6a ca ad 55 5d -47 8d 2f d7 c3 8f a9 31 fa 1a eb 6d e5 66 55 3d -08 f1 cb c0 6a 51 0f c2 e5 69 b5 a8 22 67 ac 91 - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# PKCS#1 v1.5 Encryption Example 6.1 -# ---------------------------------- - -# Message: -a3 e1 52 75 fb 33 ae c3 7b d3 dd 58 2e 19 f5 d3 -8b 9d 0d - -# Seed: -78 da a6 1c 07 f9 41 b4 b4 40 e7 38 33 8d 06 cc -15 7a 01 57 4a 72 fa 78 d3 63 dc e9 94 09 04 22 -0a 71 32 35 69 96 f0 7c 01 d5 4e e5 4f a3 2c 5f -aa 1b 90 d2 43 0c 80 a2 32 17 e0 6b b1 c8 04 3d -61 ff a1 8a a1 d1 8e 15 e4 30 aa 12 1c df f4 3f -ab 2b b0 de bf 73 e3 d5 a7 5b 46 f9 0d f7 3d 65 -6b b0 66 ac 1c 76 8f a3 83 e4 - -# Encryption: -9b f1 dc fc 65 4c a7 a2 3d 80 a1 2c 09 c2 59 d0 -4b ae 07 e8 31 f6 09 e9 f0 35 d3 56 41 4e d1 06 -f9 b4 62 35 fa 3d a9 1a 32 b8 fd c8 fb 88 30 c9 -65 23 dc aa 9b 25 38 fc 01 02 dc 0f 7a 5f ae 86 -35 b3 b1 23 14 c3 90 55 fa ac fb e0 0a 15 16 34 -24 14 8c c9 e0 f0 ab 42 df 09 02 3c 05 2a 46 ae -3f 86 a1 8d cc 53 80 ce 39 06 2e 36 23 75 d3 a5 -f9 e3 b3 4a 5d a2 5c f0 de 9c c1 9c 4d 04 f6 3f - -# PKCS#1 v1.5 Encryption Example 6.2 -# ---------------------------------- - -# Message: -44 3a b0 3c 46 04 db d8 bf 80 06 ae cc 2a a8 de -64 a1 55 b4 f9 0c db 08 59 98 6d 5c a3 60 66 03 -59 80 8c 59 bd 9c 2d e7 75 fc 18 52 02 24 b6 69 -c3 25 - -# Seed: -3a 6a 60 89 f7 27 dd 16 92 97 a5 79 fc af 8e a7 -f8 e1 2d 54 27 f1 f7 90 1a 90 22 a2 1e 2d 82 d2 -f0 8e 63 ba ca 26 7b 65 3a af 89 de 23 2b a3 d3 -92 d1 cb 49 dd 76 b3 88 b2 da df b0 09 4f da 97 -18 f1 78 37 38 d1 8f a7 aa a6 29 - -# Encryption: -5a 0a e0 de 28 fd 33 cc 98 01 bf 4d d3 06 71 23 -74 53 63 ca ce 4d d8 b7 b8 b8 11 d6 48 2f 59 12 -0c 0d 65 3e ee 86 a6 1a 01 2a 18 0e c5 d1 7e 99 -14 6d 0c ca 0a 58 7c 85 cf 01 dc 7a dd 84 23 0d -91 80 bd df 5a 77 19 f6 9d 1f c4 81 af 6f 47 db -8c bd 4e e1 87 1a 57 3f c8 76 7c e8 be ed b5 c7 -3f a9 3f 0c 53 80 4a fe 2e 76 cc eb b8 7c ba 00 -cd ac 94 de 40 e2 b0 be aa 8e 2e 41 58 c7 78 50 - -# PKCS#1 v1.5 Encryption Example 6.3 -# ---------------------------------- - -# Message: -d1 ba 30 e8 8c dd a3 3d 2b 41 89 6f 43 df 08 1e -ef 20 ca f7 8d 7c 1b 97 0c 6a 61 72 e8 38 39 dc -43 d4 be 29 f9 a7 72 ba 41 59 73 8b c6 13 29 68 -61 8d c7 19 7c 0e dc 57 a1 - -# Seed: -9b b6 2b f9 a7 51 fe 41 81 66 43 68 98 ed e8 35 -cf ae e2 f5 0e fc ad 60 94 2f 2f b2 da 1a 20 38 -03 f0 be 80 be b1 7f fa d0 da b2 18 b1 28 02 7f -34 97 a4 f8 d4 1a b9 a1 be 26 4e 96 b4 45 48 76 -7b e8 d4 a7 - -# Encryption: -81 19 1c 54 75 27 3d e6 6a 41 bf 56 04 f3 2b 58 -b7 59 a1 4e 74 26 c7 46 de 4b 53 ba f7 80 bb a4 -2b 42 e9 27 8a a9 45 27 f0 ee bf 85 5f 46 2d 6f -bb 29 78 a4 65 30 37 d8 b4 48 e1 b8 07 a1 83 1d -bc 53 22 d0 66 98 4e ec 28 11 4f b7 20 1c 79 6b -57 3a dc c5 cc 92 7f 3a 58 97 b2 00 55 64 ef 1a -2c 01 67 f5 43 65 51 18 34 ac 6f 49 58 b8 31 8d -09 e6 78 54 d6 31 ca 52 80 76 86 ab 70 5d 71 a3 - -# PKCS#1 v1.5 Encryption Example 6.4 -# ---------------------------------- - -# Message: -a5 4b c2 27 8b 56 76 85 c9 b5 68 54 e4 c1 c4 06 -d9 16 17 47 c6 81 34 80 16 3e e3 af 23 b2 1e d1 -99 83 e0 f4 2b fc 93 25 cb 5c 82 e1 a4 7b 8f - -# Seed: -cc ba 5f a5 c9 4e 79 83 2a b0 46 c9 77 74 95 b1 -63 bd 3a f2 17 59 0f ec 5a c4 8c 62 78 6a 27 f3 -70 d2 85 99 55 e4 5a fb 2b 79 f1 2d e4 16 11 45 -be 62 ac 13 a0 3b f4 81 95 fb 9e 5a 18 b8 2d eb -bf 3d df c8 08 25 d5 93 fc d4 02 e7 4e ef - -# Encryption: -3d e4 c3 e0 59 35 7b 8a 54 83 7e a1 59 62 cf e2 -00 7c 5e a8 98 5c 93 51 91 64 a6 89 b7 55 b6 1c -8b d2 73 96 9d 33 3c 4b cd 9b 06 03 53 c3 7b af -13 eb 42 2f 1c b9 77 56 e6 b4 94 6a df e1 af 75 -e9 fe 2d 95 b4 b1 3d a1 73 2b d8 b8 be 11 97 02 -79 19 53 0c 34 7f 3d d1 03 9e 34 8a 53 b1 16 f9 -f8 fe 89 36 a8 4a cc 39 f2 e0 69 56 b6 78 d2 0f -df 95 17 07 2e 02 f5 70 78 fd c0 46 59 40 0c 5c - -# PKCS#1 v1.5 Encryption Example 6.5 -# ---------------------------------- - -# Message: -f3 c0 0b 00 9e 5e 08 a6 3b e1 e4 00 35 cd ac a5 -01 1c c7 01 cf 7e eb cb 99 f0 ff e1 7c fd 0a 4b -f7 be fd 2d d5 36 ac 94 6d b7 97 fd bc 67 9c be -68 f1 a2 f3 62 59 c5 58 f0 4d - -# Seed: -e2 2d 5e 43 b1 eb a1 ac 0c e6 5c 32 70 51 0e 0f -13 c9 4e 96 24 ee 52 56 59 ef 4d 57 37 88 20 c9 -35 22 9b 30 99 aa 2b 23 50 61 4f 8c c4 29 58 15 -a2 c9 ed b2 d9 c5 9c 73 d1 aa 90 0c 21 34 c0 a7 -d0 90 9c - -# Encryption: -53 3e 67 a2 bc 5b 3f 01 34 2d 8c b8 d9 25 d7 3b -4d b3 4c b6 75 da 90 39 22 6a 98 e4 d8 13 c6 20 -11 09 90 a8 e6 ac ba 50 fd 04 f3 30 7d eb af 20 -d4 f3 74 cf 6d e0 d9 b2 1d 86 e2 66 07 9c f2 f1 -8b 45 03 20 8a 21 5d e2 b1 1c ca 9e 34 64 fc 5a -c1 dd 7e 96 b2 fc 04 09 e4 2f 46 a5 06 12 a6 b2 -06 1e d1 61 9a 7f e4 67 96 ed 8f 52 06 9a 5b fc -84 08 d5 58 f5 2a 03 33 2e e8 ed de f8 f7 45 d9 - -# PKCS#1 v1.5 Encryption Example 6.6 -# ---------------------------------- - -# Message: -aa fe 5b 27 11 11 ef b8 79 2f 5a a9 23 83 07 29 -76 b7 2a 0a 27 2f 90 c5 24 61 f8 8a fb 1b b6 b7 -ec 26 38 1c 65 76 a4 10 87 a0 39 80 9d 14 f6 11 -60 67 59 4e bb - -# Seed: -75 0e f0 86 9f 8c 75 7e f4 31 57 8b 45 a6 e7 41 -bd 1d 96 0e fc 37 89 b1 0d 2b de 27 38 18 07 4e -bf e5 fa ae 10 ac 24 4f 89 f6 c0 2d e5 d1 ad ae -fc 7a 8f d2 4d 7b c3 76 fd 65 d3 5e 39 50 8c 42 -36 ac be 2d 5c a7 69 4b - -# Encryption: -34 4d 43 37 61 2b 22 dd 40 2b e3 79 e6 b2 65 0b -51 9e f3 7b 7a b4 85 81 94 52 d1 67 c1 b2 15 db -d3 fb 24 f9 b2 f9 29 86 69 cb 1a ee 14 1a 7d 89 -01 64 20 43 11 1f c3 8b 3f 40 ef 0b 7f fd 7d f7 -6c 2d 92 e3 29 41 1c 75 e0 f1 72 85 bb 6b b8 26 -88 12 8e d9 bb 95 1c ae dd 7d 06 7e dd 0b 13 e8 -27 5a c8 86 25 d9 7c e8 d2 0b 69 b3 57 38 b2 f4 -72 6e 29 84 b8 df a8 66 95 aa e8 8d 9e 17 6d f6 - -# PKCS#1 v1.5 Encryption Example 6.7 -# ---------------------------------- - -# Message: -a1 22 4d f9 aa b6 58 78 45 b2 a3 93 a5 a8 76 c1 -7d 95 9d 53 5b 54 19 d4 12 a9 a5 31 bb 43 7e 1d -ac 1b 54 6d 62 - -# Seed: -76 1d c4 f5 1b c8 51 8d 62 7c 45 b3 e9 81 8b 85 -42 a0 6f fe 17 2b e3 af 5c e7 a9 05 3f e5 4e 69 -70 12 49 73 37 4d fc c1 f4 9f cf fe 95 7a ae 8c -9c 3b 13 0f 46 05 d2 c3 ef a2 93 2a d0 83 de c5 -8e 70 d4 f6 92 6c 80 b5 d4 89 1a 1a 55 9e db 0c -af fa ca d7 5e b2 64 83 - -# Encryption: -78 5f 6a aa b4 d2 f3 18 d4 af 37 b6 e0 07 4e d5 -a4 19 4f a6 05 a7 ec 87 d0 5a 07 f3 34 9b 5b 92 -f5 fc 47 90 ea b1 37 86 cb f0 35 c7 8f fc f1 34 -4d 1f 3e cd aa e0 16 72 22 2e 6d 4a 96 55 59 e2 -c0 82 91 cb 1d 4c 2d 4e 68 ff 8e e7 15 23 f6 dd -ae c5 0a 4a b2 2e dc a2 47 36 4c 92 d8 73 99 e8 -a7 1d f7 43 6b 62 d8 ba 8a d2 02 94 cb c6 0d ca -e0 30 5c 79 73 f7 fc b4 a5 cb ed 15 71 3a 7a 16 - -# PKCS#1 v1.5 Encryption Example 6.8 -# ---------------------------------- - -# Message: -1e 0e 3f 65 0c 32 db b2 f6 91 6f 36 f1 35 bc ae -88 1d 54 55 07 40 2d 6a fd 3d 5b 3b d8 38 5a 50 -b4 fa d6 f7 89 49 fd e6 21 64 ed 76 89 e5 f9 a4 - -# Seed: -ee a9 0a 54 d0 16 da 7e 8f 08 76 a7 33 b0 f2 a0 -6f 90 a7 3c 1a 3c d6 39 b6 cf a9 06 ce 08 ef 78 -8b b6 fe a7 4f 22 eb 91 a6 ab 32 84 cd fc 1e 72 -e6 3e 78 d1 8a 64 d6 7f 9d 1a 29 19 49 ed 2e 32 -3e 91 dc 03 38 76 ee eb 09 ff a7 1f 59 - -# Encryption: -6b bd ae 20 f9 89 bf aa 5d 65 da dc d6 1a 86 b6 -63 07 a0 60 2f b5 51 a7 38 06 12 2d b1 88 ec 1d -41 e8 4d aa 2c c7 d6 be 54 1e 12 28 88 09 a1 7e -08 5f 2c af a8 ae 13 67 0e 0f 33 65 a1 47 1c b3 -15 7c 06 e0 f6 3b 82 00 f3 16 0c 16 3f de 7c 90 -1e f3 26 e5 70 0c 9f 5e 07 fe 01 98 81 0f a8 0c -8c 5d c5 3a 50 bc e2 54 f7 d1 99 01 cf 6c bb 60 -34 13 e4 1f 90 30 e7 39 c8 ba 96 49 97 84 74 99 - -# PKCS#1 v1.5 Encryption Example 6.9 -# ---------------------------------- - -# Message: -73 dd f0 a1 4d 57 ba 65 b4 f6 93 ac 76 1e 20 2b -1e 5b 85 7c 8b 34 04 e1 41 85 df a8 aa f0 49 89 - -# Seed: -fd 43 3d 7b 01 76 b7 31 d7 80 dd 6c 58 51 b8 2f -17 6d 62 b8 0d 96 ae b6 31 d7 fb 8a c5 be 55 ac -21 7f 4e 08 bc 7e cf 81 f8 e3 f5 dd aa cd c6 c2 -17 8d f7 81 88 23 97 53 3a 63 8e 62 f0 74 ac 48 -8f 4c 12 aa 57 be 2e ce 5b b6 e9 09 6c d9 22 59 -a4 5b 0b 03 2f 10 14 31 a2 8b 86 40 fb - -# Encryption: -ae 97 ff 43 4e 9a 5e e4 87 76 1d b3 56 90 0b 06 -37 37 46 5b e5 05 8d c0 3a 28 a3 22 e5 c0 e0 91 -b7 99 bf 65 94 55 cf be 05 42 7a c4 d0 44 05 e5 -6e e0 4e 06 3a 23 73 db cb 9b 4f a1 6e 43 07 94 -6a 49 b3 56 34 52 0d 41 6f 65 c3 c3 22 ed c5 46 -71 56 91 28 a2 a1 52 a7 6f e4 44 c4 30 aa 6f 03 -c4 12 9c 6e 21 31 75 5d 76 4c ec 4a 14 86 a8 1b -a8 a3 16 8d 16 e7 4d ca 8e 77 bb fd 67 ea 37 2b - -# PKCS#1 v1.5 Encryption Example 6.10 -# ---------------------------------- - -# Message: -ef 3e 76 98 e7 d9 cc 86 3b 46 6b b2 88 55 6e 4a -c2 52 82 e0 94 fb 5b 57 c1 76 17 bb 98 - -# Seed: -db 90 a7 58 0d 8d 42 9e 22 bd 7e a5 c7 b4 cd 0c -65 ad 0e 2e 27 f5 33 41 bc 23 a8 b1 35 8a 76 a0 -b5 e9 4f c5 b4 2a 9f 75 6c c6 3b 9d 62 3f 55 17 -67 fb c6 f7 11 4e 40 ba 73 61 fd 32 d6 f8 d7 72 -34 37 43 6d f7 24 b1 32 7a ae f7 b9 57 56 27 68 -f8 fa dd 57 86 2b a0 b3 14 09 6a 3b 38 77 0e 31 - -# Encryption: -43 f8 cc ce a8 12 d3 38 5f 43 fa 83 7c b5 e6 fa -59 0f 1a ff b8 62 d2 ca cc c6 d8 e8 bb 5d 5c 0d -50 ff b9 f8 f8 09 89 00 c1 2e 77 2a 84 7b 37 81 -57 78 2b 0a 90 40 f7 a6 16 c2 eb 05 8e 44 d4 a7 -e2 0b 48 5a c2 9f 40 d6 8e 03 c3 9d dc 8d ae 7e -7e 09 e2 8f 9d d2 19 0f 3a 9f 35 74 b2 f6 34 00 -15 44 36 3c 86 1f e2 7f 7a 39 23 66 92 fe 35 82 -14 0b 21 72 ce 64 7e ed 41 76 85 c6 e1 db 85 6c - -# PKCS#1 v1.5 Encryption Example 6.11 -# ---------------------------------- - -# Message: -f8 69 18 47 4f 88 16 97 11 1b dd dc 1f 00 61 3e -b2 c3 d9 c1 78 76 68 35 3e bb 02 b3 20 a3 26 - -# Seed: -cb 7d 99 da 9b 11 ea 57 f6 40 55 43 44 7d d1 5f -b5 cc a0 a1 0f 3b 69 b4 d2 33 09 ef f2 75 0c 48 -6c a6 55 32 5b 55 a3 27 ff e8 bd 6d ca 99 bc 8e -fb 5b c2 94 2e c0 39 e2 84 25 e4 a5 6a 07 d3 80 -12 f1 0d 21 5a 22 d6 37 68 59 43 d3 64 72 53 01 -dd 40 e2 17 22 8a b7 91 59 89 98 83 6b bf - -# Encryption: -2a 40 87 80 ad 51 4e 56 71 fe 1d fc 36 7d 7a a4 -65 fc 34 69 f1 c1 52 ae e1 81 45 e0 f5 f0 75 9f -44 69 b4 3d 55 12 3f 5d c9 ff c6 17 f2 3f a4 9b -78 96 02 19 66 0e c6 22 74 d6 c5 9b a3 14 60 bd -10 94 1e bb 5e 05 69 41 51 c5 7b 5b 95 88 ca f0 -9f 45 50 20 a5 4e 97 7c 3c c0 27 da e3 1f 2c e4 -42 17 02 3e 10 ad b6 f2 d8 aa 0f 80 84 fc 45 86 -05 80 3f d4 4b 21 ab c2 7b db 8d 4c 56 17 84 cf - -# PKCS#1 v1.5 Encryption Example 6.12 -# ---------------------------------- - -# Message: -6a 40 bb 60 70 8c 5a 99 2e cf dc 7e e5 3f 54 08 -4d 19 af fd 4d 21 - -# Seed: -c3 f4 fa ca 56 c1 ff 07 d1 ad 10 37 07 d1 b6 68 -20 47 b4 d9 d6 24 6c 2e 5c 4b 0c e6 55 3d 55 31 -3f 8f 38 ae e5 e4 d8 07 3a 55 d2 4a d7 96 c4 b7 -61 26 c8 aa 61 c4 6a 4e e8 5f a9 05 7a 52 6c d0 -aa 24 5e 58 28 f2 18 1b 4a 64 79 86 87 48 e7 47 -9f 40 34 53 3c 0f 3e 1e b4 35 fa 47 d5 3b 58 e4 -2c 96 17 bf 7e 77 7e - -# Encryption: -c4 64 11 c7 11 6f e6 f4 6f 1c a0 f7 4c 60 81 a5 -5d f4 1d 2c 0b 8f c5 d3 8f aa 34 0b 5e cf 71 83 -f8 5f 88 c4 fb 28 ac 5f b1 f1 8a eb fc fc 10 bf -dd 3a 19 00 2c 6b 52 24 14 92 70 4b 6f e6 3d 61 -a7 30 10 c1 49 ff 63 03 28 3e 99 78 cd 84 54 04 -fa 06 b8 c6 98 aa ea 8f 86 13 61 d8 86 b2 c0 f0 -1b 47 a1 a9 a3 dd 90 3f 8a 58 ae d6 6a fc 85 e9 -b7 1e fc 3f 55 a1 21 66 74 16 a3 00 00 13 13 e8 - -# PKCS#1 v1.5 Encryption Example 6.13 -# ---------------------------------- - -# Message: -32 52 fe 99 62 09 74 e0 77 d6 eb 55 75 - -# Seed: -bf 06 9b 4b cf 15 44 8b c3 9e 45 f4 42 6a ad 0d -5d 82 b7 4e 93 ae 1c dd 71 f7 1b b9 be b9 b2 3d -59 73 2f 9c 8b c6 34 3d 13 02 31 de 18 f7 c8 9f -c2 f4 22 18 9c d9 27 e5 09 b1 31 97 aa 56 d8 1a -73 76 f8 33 3e 47 42 44 8c c8 92 de 40 44 97 2c -7f 67 dc be 85 44 a9 0e ec 59 e7 95 ae 59 64 08 -39 2a f5 77 6d a0 d6 cb 29 c7 e0 a7 86 81 30 a7 - -# Encryption: -76 53 cb ff 58 68 92 cd d2 58 bf e6 ba eb d9 91 -45 eb 1b 22 89 4e 1a 76 4d 02 b2 ba 99 59 52 a0 -12 58 20 8d e1 a0 1d 8e 8c bb 5c da f0 d6 03 69 -4f 88 25 5e 80 90 97 b7 0e 9d 79 e6 2b d5 c0 d8 -36 dc c2 9d d1 9b 05 a1 60 26 90 42 05 b6 0c 45 -03 d4 fb e9 93 38 55 e8 68 02 c7 54 28 d9 a6 34 -73 03 16 76 32 d3 3c 5d 9e cc 8a e2 49 3b 58 c3 -6b 2a 65 53 a7 b9 e2 b1 35 8a e2 8d ad 50 28 0d - -# PKCS#1 v1.5 Encryption Example 6.14 -# ---------------------------------- - -# Message: -dc 94 - -# Seed: -05 e8 05 bf fb d1 b7 4d 1a 5a 83 8d 85 71 67 b4 -c7 d4 0a 6c d3 e6 8f 31 be 46 93 b9 8c ec 6d 75 -89 49 19 ab 18 57 2c 75 82 2e 75 e9 de d7 2d a0 -67 97 83 a7 72 18 14 e1 99 16 0b 75 07 f6 7f 4e -de 58 7c 88 be 76 81 5c 50 b2 61 df 30 8b 31 43 -23 73 0c 1e 07 3a a7 29 98 cc 2f 8e 0a 8a 5b d6 -5b f9 34 ac a8 a6 48 59 e2 5f 02 c5 a2 71 39 41 -c8 c8 e6 27 20 84 6d fb 51 c2 ff - -# Encryption: -6a dd e2 44 f0 63 8c 5a b7 45 ff ba b5 ab e1 fe -80 0b 0e ee 15 35 50 c4 8c 36 f4 24 9f 9d 5d 36 -b4 7b 28 cc da 71 a7 dd 83 2e 64 35 ad 0e b8 5e -f7 55 6b b8 4b f9 5a 59 cc c9 c2 07 51 ed 3e 1a -d0 de 10 29 94 a7 12 c5 14 01 46 92 a6 7f 1d 87 -ca 2e 4f ef 29 ec 83 e0 1e 29 ad 0c 97 8a cc a4 -d5 c5 02 74 5a 6c 50 0d f2 00 04 bc 9b f1 6f 5f -cc 69 bf 52 70 9e 31 cf 6a 2b 9f e6 24 d9 a3 64 - -# PKCS#1 v1.5 Encryption Example 6.15 -# ---------------------------------- - -# Message: -4f ae 6c f3 7e 9d 5f 59 - -# Seed: -e7 f9 ed 4a 0c 3a 64 66 69 03 9b d0 1f 24 9f 32 -be a1 e6 57 6c 21 d4 51 89 d0 f8 91 cf 4a fd 62 -32 08 3a 32 1e d2 d3 4d 07 09 84 f5 e9 45 78 39 -b2 eb c1 e0 3a 2c 0d 8d d7 09 73 1e 95 b2 e6 94 -1c a0 90 71 87 af fd cf 5a 87 f5 cb ea d2 f9 05 -2c 38 d0 ee 54 e1 f1 28 ff c3 37 de 45 66 a5 92 -5e 1e 94 7a ef 50 88 1c bd ae d9 9b 1b bc 1a f5 -13 23 2c 0f f4 - -# Encryption: -46 e6 70 5e b1 25 2d eb f8 ec 67 2c 4f de af 69 -88 26 84 59 f9 95 89 bb d3 05 41 33 d4 83 ab e1 -e2 7c aa b0 a7 f0 22 1b 1b 67 a1 4e bf 45 12 6e -60 13 48 b0 43 44 06 da 3a 8c 76 d4 f1 e3 f1 a0 -e0 6d 0d b8 23 da 51 17 b9 2a 40 b6 f3 9f 57 e4 -83 a7 da 36 e9 9b 67 7b b3 f7 6e 6c 5d b0 3f 3c -e4 45 04 eb d4 5e 9f 14 fe 0f 61 3a 2e b7 95 47 -ab 57 8c 58 6d 3b 65 4a 06 fe 1e f3 7a 22 10 66 - -# PKCS#1 v1.5 Encryption Example 6.16 -# ---------------------------------- - -# Message: -cd fd fd aa bc a3 76 7e 70 bb c5 e9 ab f6 - -# Seed: -ac 77 7f 67 29 9d e4 c1 c4 c5 74 f3 1f 67 4f 6f -aa bd e0 31 f8 ec 33 e8 26 76 eb 32 a9 3f 65 79 -aa c3 e9 59 35 9f c5 73 ee 5c 0e 3e 07 76 53 ef -f9 d5 f8 db 4b 1e 7a ca db 05 99 71 53 1f 49 b0 -7c 93 eb 9f de dc f0 90 3a 7d 50 b4 79 67 6f cd -e8 74 0a fb d7 d3 7c 3a 21 02 41 2b de 1d 3a 82 -44 15 6a d8 08 9d 45 df dc 91 cd e6 c3 a1 59 - -# Encryption: -51 3c 76 1e b1 92 9a ff 79 77 a9 ff 0e 61 b7 a1 -d5 11 c8 cb 25 39 24 33 24 25 56 9a 07 e2 29 cb -39 01 71 53 90 f7 de 37 bd 36 2c 96 fc 0b 0d 79 -81 0c 1e 8b 15 e1 3b 00 32 73 47 78 cf 96 4e 6f -6d 17 fc 41 c7 86 76 72 b2 54 0f 56 9d 0a 46 0a -80 fa d5 6b 5f 05 4a b8 e4 9e 40 9e 9e 0b 86 13 -cb 3d a2 0c 35 c3 e1 bb 99 b7 ec ab 7a 00 fc 1f -c2 37 0f 9c 80 85 67 df 89 be 2e dd bd b6 b1 10 - -# PKCS#1 v1.5 Encryption Example 6.17 -# ---------------------------------- - -# Message: -b8 20 c3 2e 73 7d aa 23 4f 29 ba 90 64 7f c3 bf -0a 8e - -# Seed: -f5 ca f8 fe b4 2d f7 b6 b3 89 f5 05 99 a4 ec 20 -e6 19 ca 22 d2 bf c9 1b c7 f1 4a e9 f1 22 9e 07 -c8 88 ed 57 aa 6a d3 c1 04 10 44 c5 1a fb 55 21 -7b 0c aa 23 34 ad 79 f4 7a bb f9 b4 20 83 33 b7 -2b 4b a4 bb 5f d0 37 98 1d d8 01 70 c8 03 60 c1 -4d 5a f5 1e 5f 82 ab f5 1f d3 6f 02 18 67 a6 ec -09 7b c3 39 22 ac ea d9 e3 35 58 - -# Encryption: -3e 23 25 18 41 db 2e 20 7a 27 10 1f 13 29 19 1a -b7 fa 6a 70 1a 52 62 61 48 23 53 a1 a2 21 ef a9 -d3 a9 d4 59 cd 2a 2d 86 68 90 8b 78 3b b0 9c 87 -9a 21 7f 1e 40 0f 95 b2 17 b0 40 a5 3e 34 1c 17 -b9 3d 3c 3d 65 46 0c 5c 7f 2b 4d 79 a3 4b 5a 96 -11 7a a3 67 51 d9 ea f2 33 b0 3f 68 db a6 a4 57 -1b 90 71 77 f8 28 33 6e 82 5a 92 26 1b 62 36 39 -be c9 8d 3a 09 f8 72 c2 ec 59 1b 4c 38 3a 69 c7 - -# PKCS#1 v1.5 Encryption Example 6.18 -# ---------------------------------- - -# Message: -60 6b bd 61 37 15 dd cd 92 c7 b6 df 04 b3 60 72 -f0 11 62 d0 08 76 63 12 ca 69 77 dd 3a 06 eb 95 -e1 ba c7 bc 1b c6 60 2c 9e e6 44 - -# Seed: -51 3a 5c 95 68 e8 9b 9a 53 d5 af 71 6e 55 fb 34 -0f 8a 39 23 70 e8 88 a8 0c ae da 50 2e 7f 9d fc -17 51 95 a5 0e 47 07 13 96 d6 ec 55 4e b7 2f 18 -3b e1 8f 3b f4 ec 73 b3 05 92 fa ef 2f b5 14 de -be fc c6 5c 8d 23 c4 ad 25 94 56 c1 e8 0b 36 0a -d4 59 - -# Encryption: -47 21 a2 39 40 18 87 30 f5 de ac 85 00 2e 38 31 -b1 49 ae 57 af c6 97 35 a0 45 ee 3f c3 53 64 72 -fc 83 3c 27 c8 7e ab 6f c9 05 e3 67 96 1b 31 24 -98 63 6b e6 c7 7a a8 0b 8d a2 f5 d9 48 aa a7 7b -5f ab 72 4b bf 64 ee 89 d2 81 ee d4 7b 21 2c 32 -95 26 65 77 f4 fd 93 a2 22 39 de e5 40 c9 40 0f -e5 6d 7a ef 51 df 36 a8 9a e9 2f 92 6f 55 83 31 -e4 1b fd fe fe 35 75 8b 93 ce 11 40 ac 9b 6a 54 - -# PKCS#1 v1.5 Encryption Example 6.19 -# ---------------------------------- - -# Message: -1d 82 de f8 c5 92 87 50 08 a5 f8 9e 7e b6 4e 25 -2e dd e9 dd b8 81 d3 73 62 31 7f 6e 6e 6e 99 3c -60 23 3b 0f - -# Seed: -87 5e 07 5e f1 b0 54 b5 84 1e 08 45 0d 78 eb 54 -a5 5c 88 b6 d0 18 13 c1 07 a0 9b 74 54 3b 3f 9f -e1 b7 c9 02 11 c6 2e a7 33 81 20 d4 ae 0f 73 ba -82 c0 1d 28 f8 19 4b 3a 39 6b df 50 f9 41 3a 7f -b0 3b e2 25 fe 05 45 db 80 cd f0 f6 10 a9 5f d9 -03 76 e0 39 e3 83 1f f9 9e - -# Encryption: -8f b5 46 26 3c 1d 18 75 c7 43 f5 2f 02 67 b2 f2 -fe 68 8d 25 42 02 10 49 f5 34 89 ce 7c 35 91 30 -f8 e1 1e 3c 46 1c 5e 86 3e 4d c1 9f 07 a1 3a 4c -1a 88 22 4b 26 c5 c0 cb e2 02 02 45 d9 1e 1b 83 -42 42 52 52 f5 3f c4 0e 4b 14 fa 02 bb d7 47 37 -d4 02 2c c5 4f e3 8f 0d 27 d8 fe a5 0f 2f dd 84 -65 d4 f3 2f 8a c0 3e e0 06 be 62 33 e4 d1 a3 c1 -6e b1 44 b5 d8 be 72 9a d3 04 f8 23 61 e0 7c fb - -# PKCS#1 v1.5 Encryption Example 6.20 -# ---------------------------------- - -# Message: -8a 8a 3e ab dc a7 ca b0 cc 29 6a 29 1e a8 a9 3d -a4 d2 d2 a1 96 ff 2f 8d 18 1f ee 1f - -# Seed: -2e 47 36 e4 29 6a b4 66 18 b1 ef 34 da 26 77 6e -92 ef 66 f7 cd 17 4e f9 47 69 72 42 23 a7 65 b4 -eb ef 08 a8 8f ed be 27 05 60 e5 f6 74 37 cf 49 -d5 7e a6 62 0a ca 59 89 8a fd 52 cd ef 30 a8 b0 -d9 85 5e 5d fb e3 47 de 77 c4 c0 28 0b 0f 1f d4 -4d 4f e6 89 06 be 8a 4f 12 c5 33 08 7b f5 bc ea -fb - -# Encryption: -03 f3 e4 ba 03 48 31 a0 e3 0a 4a 33 44 ce ad 61 -b2 8b 43 be 31 53 2c 2d 76 37 53 9b 90 13 83 7e -dc b1 f2 16 d3 2f df ae 73 32 36 74 a2 81 45 65 -db f2 9e 71 2d 18 c4 37 39 64 df 60 c9 39 9f da -54 14 a0 eb 45 bd e8 66 1a 89 09 12 95 a1 ef 71 -61 6a 3c d1 45 e9 b3 18 b6 51 af 17 5d 4e c3 50 -1d 5e b7 63 e8 d3 5a 2b 72 74 6e 02 0b 4b a5 99 -73 83 4b 21 50 02 6b 43 2b 17 9a 9a e8 17 2b 7b - -# ============================================= - -# Example 7: A 1025-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -01 70 93 41 d2 ec 08 04 a7 40 34 e8 fa 72 86 42 -98 3d 16 50 d7 46 e4 49 c9 ee 40 79 aa 15 e5 1f -1f c1 34 24 2e 52 4b 0d 3d 0d bf 5a 51 21 93 9b -12 5f cc 86 3e 51 41 60 b6 34 e3 7a a6 98 94 77 -6c 7d 33 e1 e7 c6 19 52 1d e4 82 a0 ae a4 5c 3c -6a bc 3f 33 e2 5d 86 ff a1 39 33 25 65 9b f2 d4 -09 8d f1 69 b4 07 21 87 66 0e 27 77 00 19 9b 7a -3e 34 84 b3 84 5f 6f bf 31 98 65 7d f8 cb f3 a8 -1b - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -01 70 93 41 d2 ec 08 04 a7 40 34 e8 fa 72 86 42 -98 3d 16 50 d7 46 e4 49 c9 ee 40 79 aa 15 e5 1f -1f c1 34 24 2e 52 4b 0d 3d 0d bf 5a 51 21 93 9b -12 5f cc 86 3e 51 41 60 b6 34 e3 7a a6 98 94 77 -6c 7d 33 e1 e7 c6 19 52 1d e4 82 a0 ae a4 5c 3c -6a bc 3f 33 e2 5d 86 ff a1 39 33 25 65 9b f2 d4 -09 8d f1 69 b4 07 21 87 66 0e 27 77 00 19 9b 7a -3e 34 84 b3 84 5f 6f bf 31 98 65 7d f8 cb f3 a8 -1b - -# Public exponent: -01 00 01 - -# Exponent: -6f eb f7 98 12 1e 99 33 24 97 2c 8c 28 cc c6 5a -2e 6a a1 5f cd e2 32 da 03 e4 46 4d b4 da 5f aa -27 e4 2a 7c 7a 76 d9 ed 49 48 6b 27 a9 d7 85 c6 -7d 9a c0 c5 19 ad 8d ad a6 bf d1 15 d7 cd 75 b9 -9c 4b 59 c7 69 83 a7 01 5b 0d a6 97 3c 69 fa 95 -08 10 ae 27 68 d9 75 88 90 05 62 e8 6a 6d f7 c7 -14 b8 44 b1 e0 46 68 6a 5a fc 66 7b 13 57 3a 55 -be 9b 5b 38 b9 9b d3 cf 54 e4 34 4a 2f 2d 0e 21 - -# Prime 1: -01 40 ef 5b 50 70 54 d5 a6 94 46 4e f4 7e 49 86 -8c b3 3c 97 e0 e3 ed d7 7b f4 5a 52 5e 60 8d 7e -21 5f 91 33 48 a9 b8 27 c8 39 73 7a 42 b6 ad fb -b2 bb 49 7e 14 78 92 2f 71 88 97 d9 fe ed 27 7a -6b - -# Prime 2: -01 26 00 4b be 2d f7 6b 6f 38 ae a1 64 b1 fd 0f -97 61 2b 2d b9 6c ed e2 8a 3a 91 ce 0d 74 25 3b -b3 f9 55 9b 89 f4 81 33 75 65 2a 50 70 06 ce 99 -95 a9 8f 0e 6e f3 bc 22 e5 51 9b 61 3b fb cd 55 -11 - -# Prime exponent 1: -98 14 d4 e0 b9 5a 7a 24 05 ff 8b 4a b0 cd 86 c5 -05 ea a0 ce 21 34 83 f8 69 42 a3 e5 b5 3b 57 99 -d8 ff a5 9d b9 4f 5b 0a b6 ae d2 30 eb 00 67 55 -bb 0a 88 84 8a de 3b 3d 41 cd 33 b0 6a 11 5b 21 - -# Prime exponent 2: -1c 4b 1c fe f1 67 85 34 4f ed 26 65 0d 68 00 2f -1e 4f cc 77 b2 ce f5 e5 3d 9b b8 8b bc e8 b4 65 -2e 92 99 84 5e 3e 6c d8 58 63 09 18 ae df 05 12 -cd 1d 92 53 05 2b ce e3 e8 c5 9e 46 ea 85 a9 31 - -# Coefficient: -fd c5 10 c4 d9 79 07 30 b0 fd 47 d3 13 ab d4 08 -58 c7 df d5 8f 4b 37 91 5f 7a 4b 1d b3 d7 d8 ab -d0 6d 3d a0 02 de 98 4a 76 09 cc 18 a9 44 86 46 -0a 61 74 6c 7e a6 31 17 a6 8a a2 82 59 74 4f 49 - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# PKCS#1 v1.5 Encryption Example 7.1 -# ---------------------------------- - -# Message: -da 50 9d ce 45 e2 47 00 37 9b fe 5a a1 a8 1c 24 -70 6c 18 42 d9 b1 3e 7a 2e 0a 15 d3 a4 af 8e 6d -08 61 2d ca a1 5d 46 0e ce 87 29 88 e3 e9 0f b2 -7e 5c a5 c1 0f a1 fa cd cb 0e - -# Seed: -80 8c 20 46 fb 50 5c 37 69 5c 8d c3 5c 38 f9 f9 -90 5a b4 8a 2b 8a 14 6e 8e 8e da 33 85 ce d9 5a -31 3b 2d c6 eb 41 83 67 fe ef f7 9a 02 ad 74 64 -6d f7 a5 d8 70 54 ac dd af 34 ea fd 5c 1d b5 8e -5d ec 04 81 - -# Encryption: -00 fc 3d 0a aa f2 6c df 25 a1 a8 df cb 71 70 0f -b6 5e 2a b5 55 1a e5 f4 19 b2 d2 f9 4c ef 01 73 -02 b0 0a bd 9e 6c 6e fa e9 44 74 d1 8e 68 da 0a -7c 17 ef 2c 5f cc 89 07 1d 3b 07 12 1b 9c 01 e3 -0f f0 53 66 3f 61 f8 9f db c4 9b dc f8 e6 71 66 -94 43 91 9d 41 34 28 45 e3 e9 9e 46 a8 a3 b4 8e -23 98 a8 8e 5b 45 d9 9a 17 dd 1f 21 2e da bc bc -d3 00 a8 4d 39 8e f5 79 35 bd ae 95 9e 60 54 e7 -3a - -# PKCS#1 v1.5 Encryption Example 7.2 -# ---------------------------------- - -# Message: -ce 0a 79 47 49 87 41 60 e5 d2 e4 ff - -# Seed: -f4 b2 c9 f3 11 c1 fd 41 d4 79 44 b5 0e 17 55 d4 -ea c5 ee 65 08 7c 9f c6 d2 f0 75 b7 38 c6 49 26 -ea f7 d4 31 6b cd b6 36 54 d5 42 0d a6 1e 02 45 -f1 95 b9 e8 24 aa 0b 06 c8 87 99 b1 27 fe 9b 03 -6d f3 61 75 c0 a6 bd 80 e4 e0 af 6e bc 2f 42 70 -b0 4c e3 0b 9f a2 7f 04 35 86 0f cc f4 0b 3d c7 -ea ef fd ba b9 e1 76 66 19 bb 01 6c 17 90 26 63 -cb 24 - -# Encryption: -01 0c f7 4b eb c2 63 6d 2c 49 d9 c6 22 bd 76 cc -0b 1d 02 eb b5 2f df ae c0 1c 4a c1 e7 56 07 1a -8e f7 6e 12 2a 4c 62 c6 ba 32 65 fa 4c 90 56 26 -d1 13 d5 9d b7 9a d6 5f 86 40 b3 c4 34 4d 73 40 -c1 6e 38 de b1 89 e3 a1 b1 1e aa b0 b2 60 6a 7f -82 f5 94 6d 41 9a ce bb bb 3a 93 7d 41 e2 9b 33 -ed d3 ad 15 f1 e7 77 0f cf c3 0a e0 6a a0 1b cd -03 d5 df b1 62 f8 7a 18 39 67 55 3c 25 02 cb 5f -fe - -# PKCS#1 v1.5 Encryption Example 7.3 -# ---------------------------------- - -# Message: -41 d6 - -# Seed: -55 6e 59 b2 c1 89 58 75 08 e2 08 92 fa 56 02 d2 -49 fb fb 71 a1 09 05 ed 5a f7 b7 9b e8 71 11 a0 -c6 9a dd b1 9e ef 31 6d 7c 0b 21 81 79 90 dc 3e -d8 c7 6c b2 3e 83 0e 17 c0 f4 38 73 15 9f ab 7c -5c 4a 6c f2 19 cb 1d c5 c5 da 45 53 a3 e0 bf 18 -3b 8e 11 2b 61 f6 92 a7 dd f0 04 bd bf dc c8 d6 -65 9c 3d d8 0c b2 3a ab e8 c6 fd f2 67 5d 07 3b -66 23 12 e4 ac cd e9 1c 12 25 e6 d1 - -# Encryption: -00 2a 10 04 95 59 66 55 30 4b dd f9 09 7f 78 d9 -dd b5 eb 42 9b 66 63 5a 58 a2 98 f1 92 8e ed 61 -53 4f 80 b4 ea 05 ee 39 b0 2a 64 56 6f 6c 45 6e -3b 58 6e 7c b4 3a 88 94 0e e1 29 34 0f 57 8e 56 -e7 2d 8b 27 83 36 10 06 d9 71 29 ab ef 02 cf 1c -19 12 e1 7f 0c d1 d7 1c 0b 32 8d 0b 48 a4 ac 7a -ec e3 c0 05 a6 19 0e ac 22 c1 99 10 41 15 9a 2a -d1 db 08 96 01 5c 4f f1 d7 b3 54 47 cf c1 0a 24 -be - -# PKCS#1 v1.5 Encryption Example 7.4 -# ---------------------------------- - -# Message: -0b b4 ab c7 dc 6c a4 23 5c 29 ed 0a 2c b6 3f d1 -41 34 1e 2c 4c 90 1e 6d c9 5d a9 f0 01 0f a2 e0 -22 cc fe 8a df db 6e cf 4d 89 f5 79 a1 0a 51 70 -be 18 c4 6a 24 1c a7 ee d1 07 ca fe 4a 9d - -# Seed: -bb 80 be 78 02 dd 8b f5 fb 5b 1b 86 39 66 54 f4 -73 9f 5d 43 51 f1 9c e3 1b 72 c2 10 ae a1 a2 ed -21 42 d8 d6 f7 ae 37 4f 06 13 3a 31 5c 62 64 da -65 ce f2 33 ed 3d cc 81 59 d7 6c 3a 17 f3 6d 0c - -# Encryption: -00 6f 1b 6c 1f b3 7a e5 c8 c0 24 44 9a bc 38 40 -e8 e5 09 71 43 ee d1 6b ea f6 7b 6c 7a 48 24 ac -38 b6 f8 c3 53 b6 45 c8 ce a4 fa b0 9c 02 fa 6c -32 5a 50 74 38 b9 64 5e c8 23 00 86 b3 15 e3 4e -7a 56 ad b0 ec d8 9f d0 7b 98 73 9c 24 db 6f e1 -1f f2 e5 ad 38 31 8e c3 1d f2 ed 25 08 de bc a7 -a6 7e 24 01 96 aa 9a cd 80 32 9f 4c 43 43 c1 0b -72 69 9f 9d 6b 5b c2 43 99 5b 09 c4 6d d3 d8 03 -ce - -# PKCS#1 v1.5 Encryption Example 7.5 -# ---------------------------------- - -# Message: -ed 26 ec 20 2d 5e 69 74 0d a3 48 84 06 bb bd - -# Seed: -f2 fd 08 cc 0d b9 a5 5a bf eb d9 2e 2a 9d 75 87 -2a b7 df fb 0b 4d a1 36 06 e1 52 75 9f 86 6f 22 -eb 87 29 fb 8c 9a 5c 45 ba 2f 4a ca e4 31 59 a7 -ad 3c f7 8e 81 fd 09 54 90 9b 1f 0e 70 89 ca 86 -a4 58 8d 8c 87 a1 a6 1f 1a 48 39 82 36 de f9 b4 -97 5e 25 49 57 3f 60 ad b5 e8 61 b7 c3 b2 df eb -81 0d 13 e2 97 a6 cd 3f 2a fe cb 0e 4f 14 7c - -# Encryption: -00 93 3c 58 a5 0c 70 15 0d a0 82 3a 7c 1e 36 7d -36 e5 21 3f 66 a3 00 50 fd ed 72 d5 75 5b 5f 9c -24 05 0b 41 14 f5 35 09 98 8b 62 54 20 cf d0 0a -c1 c8 cd 84 48 9c a2 6b 74 3f b4 7d 1b 64 d0 a8 -80 8e e3 21 27 c7 71 22 4a 0d d5 a5 64 e6 36 ad -d7 3b cf f7 b4 73 e9 a1 2b 7d 46 4d 7d d4 a7 52 -04 86 61 a8 b0 74 b9 fa 15 06 fe f6 03 dd 96 d1 -19 96 a7 d9 e7 48 79 f9 9b b2 d9 1c 37 aa b1 35 -72 - -# PKCS#1 v1.5 Encryption Example 7.6 -# ---------------------------------- - -# Message: -dc 28 5a 26 39 59 39 e7 99 72 04 c7 1a 93 2f 79 -5b 4d e4 01 e9 6f 34 e1 89 36 32 37 e9 cf da dc -61 - -# Seed: -d8 0b fc c2 91 ce 51 8c e0 bb 6a e9 34 df d8 56 -58 b2 39 fb 45 39 cb e0 5d a1 26 a8 98 b7 f3 64 -88 7c 0d df b1 ea ea 1d 5a 90 de 76 95 66 5c 55 -82 2a 11 72 cb 5b e8 a1 12 d2 8c 86 02 c5 13 be -48 c2 92 f0 59 72 e6 71 1a 44 cb c7 28 17 15 09 -4b 49 0f de 29 16 5a 6b 6b 7d 99 db ed - -# Encryption: -01 57 e7 b5 4a 34 1b 8d f8 bd 9b 99 fc 2e 6c 58 -d8 86 fc 79 e7 44 2a 9e 76 d0 d6 7e 48 58 c4 ab -f0 ed 25 c3 3d f6 2e 2a ad a3 99 df ea dc 7f f6 -89 28 e6 b9 00 71 02 dd f8 09 f5 90 8e ef c1 0f -2a 73 71 06 09 23 1f 5d 45 e0 0a dd a1 34 b6 02 -dd 0e ee 0f 67 22 49 4b 7e 4f 7b 40 57 72 c8 31 -b6 37 29 be 0f 1c 4b 6d 2a 54 2c 15 65 c7 df 23 -1d 9e 89 2e 58 6a 18 ec 54 37 73 76 db 77 f8 13 -84 - -# PKCS#1 v1.5 Encryption Example 7.7 -# ---------------------------------- - -# Message: -46 47 d8 41 c5 a0 b9 97 3a 91 45 4d d1 a0 5e c0 -e5 75 03 ed 99 67 2a c0 02 df ee 77 7f 7f a5 06 -fb 41 b2 ec 8b 8d 2c db 9b ef 01 33 bd 5e 3a 7d -0c 43 44 b2 8f a8 db - -# Seed: -f5 27 a1 4e 2e 06 e7 3f 1c 24 5d 19 0d 02 cc ed -01 1e 46 84 87 ac fa 5e 0b ce 39 78 6b 46 a9 a8 -c7 51 a8 b4 40 6c cf a1 fc 5b 7a b9 ba da 7b 4a -d4 52 46 7e 50 b7 fc 41 31 8e dc 73 dc 2d 84 a2 -8a 08 1f a1 79 05 bc - -# Encryption: -00 4e 03 ca a9 48 1d 7f 96 78 20 7c 17 b6 82 2a -5f 69 17 ed 01 eb 40 2e 7f 23 01 35 a1 23 cd 9b -6d e3 be c3 b9 bf 33 8a de f8 07 6f b7 65 2f c7 -e3 a3 73 fc 16 22 f1 dc 67 9d 41 5c 32 00 02 6d -8a 8a 50 f8 db 6a 58 3f 66 69 29 d0 31 8e bf 91 -d9 59 12 fc 06 10 2d 9b e8 75 25 a7 36 b5 af 21 -e1 6d e3 ef aa 66 e9 cf 41 ca 73 48 23 23 dd e8 -0e ec 30 85 81 a4 4c a3 aa bf 76 dd 48 1d e6 52 -9a - -# PKCS#1 v1.5 Encryption Example 7.8 -# ---------------------------------- - -# Message: -ba 10 d4 7a 9f 62 42 81 - -# Seed: -37 9f dc fa 5d 8c 61 37 c3 6b ad 14 3f d9 b1 f7 -e8 94 fa 0e 9a c0 fb 9c ec 60 e8 6c 82 53 97 5d -8e 78 74 21 08 49 5e 59 4a d0 89 8f d0 4c 91 e4 -01 e7 c8 80 89 a8 7b 4a 4a 82 e8 34 cd 37 77 a7 -d3 f8 0e 64 86 81 2d 4a b0 d3 37 23 16 2b cb c7 -e0 81 a9 9d 3f 9b 5c 3b a4 4b 19 bd f8 84 a4 62 -6f d7 de f7 67 40 57 be a0 82 e0 0d b4 b7 61 ad -75 3a b5 98 5a 94 - -# Encryption: -00 c4 96 5e 29 63 d7 bc 5b 10 44 d8 fc 75 eb 33 -82 ce dd 99 07 41 97 92 ef c8 8c 92 b1 d5 c3 90 -fa b1 90 01 1c 51 8a c9 ce 45 c1 b8 e7 27 6b ff -c7 c7 e0 5c 25 37 08 91 37 a9 8d f6 e0 c6 92 02 -0e d6 54 af 83 33 9b ab 11 92 71 77 f2 f5 23 22 -6b 4f e6 4b 99 c1 72 9f 6c 92 29 06 bc 16 d3 1f -0c 94 dc 2e a4 13 81 0d 55 94 0c 97 af dd 48 29 -fb f1 61 8a 8c 9d e8 9d c2 40 06 e7 e4 21 a5 8d -38 - -# PKCS#1 v1.5 Encryption Example 7.9 -# ---------------------------------- - -# Message: -ef c7 48 9f ec 77 9e 05 2e 37 9c 1a d9 04 59 03 -b6 84 2a 9c a4 1b 48 bd dc e5 80 80 a5 ed ec 63 -f3 6e e1 15 60 fd - -# Seed: -c8 ec ba 62 72 14 c4 14 d7 c3 fd d3 16 c2 d8 2a -98 53 57 28 b9 a9 37 6f 69 a9 53 d7 cd 1c ea d7 -10 53 db e0 14 0c 7f 02 bd 71 e0 13 7f ea 29 cd -4c 21 a5 8b de c6 66 40 99 0d 28 c1 0b 70 17 59 -3c 1d 11 fe 9a be bd 71 24 e1 d9 85 63 1e 94 e9 -e5 12 41 26 0f 9e f1 f1 - -# Encryption: -00 32 18 4e f2 88 fa 0a aa 0c 2c 1a 19 e7 c2 9f -81 c7 01 2f 45 29 eb 9e eb 53 68 1f 62 47 f8 d4 -35 69 13 45 a5 14 8a 2c 87 7b 2b 18 92 6b ae 9d -e5 b3 17 ba c0 e9 02 c9 60 25 ee c2 f9 ea bd 0f -9e 88 86 ef 95 19 c8 24 9f eb 83 46 65 c1 01 0d -b7 62 4f 48 7e 16 1f 89 f6 ae 00 18 c1 f4 e0 ab -54 72 f7 f0 99 35 61 cd 59 85 f3 83 d0 49 dd 83 -2b 82 c8 37 48 b2 28 1b fb 99 d9 d5 00 8d c8 07 -de - -# PKCS#1 v1.5 Encryption Example 7.10 -# ---------------------------------- - -# Message: -5b 26 4f f8 8d ef d3 c2 99 99 3d 81 12 9a 6e 5d -d2 b5 7b - -# Seed: -0b e7 ab 5b 29 70 48 43 c1 c0 d7 e4 ef 5e 93 f3 -ba 71 7d b7 81 5a f5 72 e3 a9 ab 3f 99 b1 ac 9a -22 b9 2d 9b 43 da 2b 99 65 c7 97 70 57 17 3c 03 -57 3f 32 48 0a 92 70 19 af ff 0e 0e 34 e4 09 5e -4a 4d 39 2d cd 1b d9 f2 7d 32 fd e7 15 9f 02 3c -83 08 9e 88 a7 1f 24 33 64 8e f8 c8 40 45 b9 c3 -6d 8e 5f 6e ff 03 4b 91 b7 02 34 - -# Encryption: -00 4c 65 29 35 56 f2 fd 15 ab 90 eb 22 e0 75 33 -b3 dc 17 33 4f 5e ed 27 a3 99 31 80 c5 6c 8e 3d -8f 51 ee b2 75 95 f8 78 d2 36 65 ba 3a b0 e7 28 -a5 ae f7 23 4f 60 36 b0 23 f8 71 c2 d6 55 2a 18 -ad 5a 25 be c5 5b c7 6b ee 63 83 46 12 81 d3 9a -30 f6 d6 60 92 e0 cf f6 92 32 68 fc 04 3c df 74 -7e 8d 54 89 50 4e 7d b3 0a 7b d9 1a 2b fc 6c 1b -34 14 40 57 01 75 3d 5b 85 ff 73 52 01 2d 55 e9 -23 - -# PKCS#1 v1.5 Encryption Example 7.11 -# ---------------------------------- - -# Message: -72 e2 09 00 e5 bc c2 3c f8 79 ed 35 31 88 9a 1e -d5 aa 3d 5c 79 2e 34 e3 b1 26 90 d9 ac 24 03 d0 -f6 f7 8f 59 23 - -# Seed: -11 62 75 e9 be 1b d4 e6 f2 03 ff e4 f0 ab 9a 32 -73 84 10 e9 23 e8 39 71 ee 9a 6b 99 2c 65 0a 03 -1f 94 0f 6e f3 3d 61 50 df f8 b3 9d cf 22 50 d5 -66 5c 04 27 3b 2b e2 de c9 97 12 bb c0 12 f7 5a -31 b3 0b a0 6f f9 eb e3 b8 9f 58 a6 8f 26 85 e3 -38 ff 6c b8 d4 18 1a 8a 14 - -# Encryption: -00 21 4a 83 be 45 3a 75 bc da 94 33 a7 b9 51 43 -34 39 98 30 72 07 1c c8 21 12 b7 77 42 be 0c 38 -22 6c a3 c6 f3 8d 55 b9 ca 3f 08 c8 79 37 89 79 -6e 6c de 67 37 6d 67 3f 5e c5 7d ac c3 74 c4 c3 -17 34 44 dd 8a 63 76 de 8f 9d dc 31 a4 c0 60 d7 -72 f0 2e b7 49 51 2d cd 04 02 31 17 5d 0b 69 42 -a9 47 b2 c8 2f 7c 19 e2 ce 87 50 00 af 84 27 4c -be 2a db f2 fb fb 53 7c cb e2 fb d0 72 87 13 78 -75 - -# PKCS#1 v1.5 Encryption Example 7.12 -# ---------------------------------- - -# Message: -16 b1 10 e2 90 9b 11 b0 cf 36 b0 52 c6 f3 93 6a -2c a1 3f c3 a5 - -# Seed: -c2 bf 9e 4f b1 ed 70 ca 21 2d 15 ee 8e b3 cd 66 -0e b6 5c 52 78 e0 3a 3b 10 eb 12 b2 53 34 a4 72 -8b 94 99 20 12 2f b9 92 bf 2c e4 30 10 3d 74 ab -74 e6 d6 e7 62 b8 5d 6e f9 be b7 d7 25 98 f2 93 -a4 35 62 e9 06 89 54 11 11 51 1d 31 4a 9c 46 02 -23 76 ad 05 5d 54 ce d6 ac 1f 36 e9 8c 2b 25 a0 -ac de 64 dc f6 52 2c 3d 22 - -# Encryption: -01 6a a9 5a 08 23 82 c1 0c 04 53 10 fe fe cc 8d -17 db f2 16 d8 ed c0 4b da cd 4f 52 4d e4 85 b7 -fe 8a 26 f1 4c ab d2 97 e7 f0 3b 3c 85 08 6a 16 -14 7d 5f 61 93 91 9b b9 5a 53 c1 46 c7 84 c0 0b -53 32 e0 18 f6 43 cf 95 87 24 cd 08 07 5e b6 4c -a5 68 0c 27 c7 05 d4 0d 88 b9 d7 f4 26 b7 36 e3 -c5 f6 39 4e a6 83 b6 5c 23 73 a6 fc eb 14 f2 ea -85 1c a8 e0 00 e2 4d c8 f7 e7 c8 1b 1d 4e 72 0c -36 - -# PKCS#1 v1.5 Encryption Example 7.13 -# ---------------------------------- - -# Message: -3c 86 0a 28 fa e8 da 2a c0 d9 a3 39 89 97 7f fa -04 - -# Seed: -7c 96 99 90 6c 9f 16 65 12 5c 0b 10 67 3f 3d ad -98 c9 1a 4f f0 fa aa 64 7d b5 54 fd 62 27 ef 50 -90 9c 97 b7 06 09 2b e2 10 db 2c 24 ba 9e 8e 6a -87 f9 dd d9 f3 f4 91 29 10 29 ac 6e e4 6e 08 d0 -d7 a5 3c 46 2d b4 f0 fd 1c c2 3e c8 f5 5e da 07 -f4 ca 0d 3e 3c d3 76 22 85 5b 4d b0 8f 64 be 3e -26 c3 e9 78 75 17 12 94 ea df 86 fc d6 - -# Encryption: -01 0c 1e 04 a8 58 c6 15 ee 96 95 f6 4a b2 db 99 -80 6d a4 82 d2 b4 60 29 3c 46 dc 7b 71 7a 59 76 -a3 c7 e3 6d 8d 47 a8 4a 34 d6 3c df ca 2c 1e 38 -45 25 73 ed 44 c3 a0 40 40 5e cf 3f bf 36 83 41 -c4 a1 fc 90 83 a8 f5 52 93 67 b9 9c b8 9f c5 a0 -8b 8f 34 75 a0 d5 5e 3e 42 cc cb eb 20 d0 4a 19 -97 ee da 4e 3c c9 e9 92 d2 37 ec 7d 32 fe 25 84 -5a b0 24 d5 88 28 05 ed 52 f1 0e d7 d2 5d 62 d0 -af - -# PKCS#1 v1.5 Encryption Example 7.14 -# ---------------------------------- - -# Message: -4e df 4a d3 44 0f 17 b1 0d 26 af cd f4 e4 44 d2 -aa 61 a1 97 55 a6 21 07 98 3f 01 22 fb 2a - -# Seed: -e0 20 09 39 39 b4 18 9e 93 4c b6 2d 27 ca 5e 97 -19 65 2c 13 7f c4 9e 72 1c 4a b9 e9 f3 98 b0 a6 -12 de 8a 8a 89 99 af 0d bc 1c ea 0b 61 63 da 42 -61 23 28 14 ed 92 eb 21 60 cf 4b 26 d0 55 1b 1b -dd 91 9d 49 47 93 78 6e 1b 86 f7 9d 64 16 61 2a -28 22 61 36 3d 6c 9b 7a 0d 92 ad 17 58 ea ad 51 - -# Encryption: -00 8c f9 b3 f3 e7 60 90 d1 01 17 4e cd 97 d1 0b -ff 6d e4 d4 64 40 00 3f c0 d4 28 f1 9b 85 58 f3 -13 74 a5 fa 28 3d 03 d4 dd 43 f9 3a 4d 9f 14 ca -00 68 dc 2c f3 e2 54 37 b0 5a b1 d4 06 21 ee bd -84 16 f5 82 8a e7 c6 cf d2 97 b4 51 8f 79 94 2b -91 43 23 28 4e 29 76 a5 4d 3c d9 11 63 3a 30 7e -da f1 ed b6 74 98 46 6b 3e 98 91 6f 99 04 f4 a0 -ea 9b 87 a9 83 44 f0 73 83 3e df 9b 2b 53 94 cf -d7 - -# PKCS#1 v1.5 Encryption Example 7.15 -# ---------------------------------- - -# Message: -8a 6d 53 b0 ad a1 85 4e 23 13 69 1a ab 23 06 3d -e1 31 bc 36 c7 64 - -# Seed: -26 85 45 8a eb fb d6 07 4e be b0 fc 0c c4 92 1c -27 3e 8c 0a 88 15 51 50 2e 4c 29 9f 33 4d d5 67 -f5 16 75 b0 ff 30 f2 c4 82 63 20 03 64 99 66 99 -f9 b1 72 af fe c0 e7 9e 5c 52 3d 1e 77 9e c0 6d -ec d4 76 a5 74 30 78 1e 2d c8 1f 25 d6 0d 3a 73 -97 65 79 a2 f0 1f 07 58 4c f8 e5 fb 3e bd 8d 5a -93 2d 57 aa 8a 18 0a aa - -# Encryption: -01 3a 3d 32 ee c7 35 eb da 13 f8 be 76 02 a0 47 -5c f3 cf 28 5b 42 86 ad 93 d6 12 c3 ad 91 72 48 -80 9d 1c 4c 18 0b 36 70 15 cc 66 c4 d8 e7 86 73 -84 16 8c f4 cb 71 9b d5 93 35 53 55 cd d7 d7 53 -0c 80 c8 67 74 5f 96 61 c6 c3 3b cb 97 f2 cf 75 -a4 c2 7c 3c bb db be 7e af 4f 82 34 f2 12 e3 05 -82 56 d4 43 9a 9f 97 81 df 48 ef db 02 35 68 f9 -4a e4 59 46 54 a0 f9 ba f6 ea 30 b7 d8 d9 48 0a -d3 - -# PKCS#1 v1.5 Encryption Example 7.16 -# ---------------------------------- - -# Message: -20 f0 20 44 e6 3a c9 2e b9 fa f1 a0 ce 35 ba 72 -09 - -# Seed: -2d e1 fc c1 17 f8 21 f1 de a7 94 b5 ee b3 13 f4 -29 e0 0b 97 6b 53 41 9d 3d 03 ec aa 1b 50 76 88 -77 e8 b7 fb d6 c3 63 04 7e 15 c2 55 79 3b 3c be -0f 58 84 f0 a5 11 25 4d 31 bf b2 37 41 02 3c 1f -88 1f e0 16 a1 2e ef 1b 8a f2 2b 93 68 20 7e 7b -16 39 f7 27 1d eb e3 c8 df 52 93 ee c3 a0 32 f1 -ce 55 9c 0a 04 77 1b bf 88 98 94 7c a4 - -# Encryption: -01 70 06 e8 6f 6c 58 58 fe 5a de 0d cb fa 9c cd -11 c0 2d 4e 7d 0d e6 c1 58 ad f9 ee f1 01 07 e7 -a4 c3 6b d3 d9 29 ea 6a 47 6e cf a0 b6 ec d0 51 -49 b5 12 15 95 48 93 a1 ab 26 69 c0 42 da 83 e8 -c8 18 b0 0a e7 34 de 5f 9e 0b 97 ba 1f e3 e9 c4 -6a e9 81 6b 63 b1 5c 2d cc 61 cb 3b 8b 2c 23 dd -b9 9f cd 54 e9 55 60 91 8b 9a 0f a3 c4 b6 27 3d -1b 28 a2 13 e1 20 b4 f2 42 86 96 5e be e9 4f f8 -96 - -# PKCS#1 v1.5 Encryption Example 7.17 -# ---------------------------------- - -# Message: -d3 88 3b - -# Seed: -5c a3 bb f9 92 d7 ae 35 94 c6 05 c3 9c 3e 97 90 -25 cc b0 a3 5c 6e f0 fa 57 4a 98 be 05 ef 7c 32 -8a 19 a2 77 5b a0 6f 2d d1 e0 ff 6f 0f 1f 6a 3b -20 fb da 21 62 d0 92 4f f5 5b 70 eb fe 2b 16 d4 -ff 6a ef 8d 47 eb e5 96 38 e5 81 0f fd b5 8d b0 -5f 4d 9b 4a 3a 42 3f 96 7f e5 79 f8 73 78 36 9d -5c 5c 07 e5 e3 cb 5d dd f3 89 62 11 80 27 0a 21 -e0 10 78 c8 9a fb ab 18 9e 87 f7 - -# Encryption: -01 6f 55 05 f7 4f f1 10 4d a1 f8 a5 2e 50 bf e2 -9c 99 87 10 c5 7d e4 40 98 a9 57 9e 7a 33 13 b6 -29 60 31 02 f0 8d 2d 91 1f 91 7a 9c 96 62 60 8c -97 a1 ea 37 17 34 f6 7c bf 70 03 d9 3c 4c 31 4c -3a 0e 77 f3 65 8f a4 d0 72 25 62 c4 e1 3e 85 a7 -c8 d0 d9 d4 fb f7 12 58 84 ba 62 ad 28 59 b4 d9 -61 36 f7 a2 45 54 69 ce b6 0b 63 ba 84 74 e6 16 -0c 83 17 92 1a 07 b4 b6 43 6f 37 6c 5f 98 25 7b -17 - -# PKCS#1 v1.5 Encryption Example 7.18 -# ---------------------------------- - -# Message: -06 a2 ae 82 a4 85 32 07 c9 f9 75 - -# Seed: -e2 c3 36 33 d5 47 54 ad dd 24 c8 5c 32 d2 8a d8 -70 f1 60 3d 44 44 60 a0 3a ac ad 7d cb 80 96 01 -56 bb b2 59 ca d3 46 be 90 c0 d4 f3 fb 18 ac 6e -9d 5a 9a e2 a5 ab 98 a1 f8 4b 8e 70 c7 1d 0c cc -0a 1a 2a a3 99 70 d9 c8 3b 4b 0c 25 ae a4 3a 5a -5d ea df 9d c6 11 b9 6d 11 33 4e f9 43 09 03 89 -a8 d3 c6 6c f3 18 77 aa 2c df f1 11 99 43 27 8a -dd ff 5e - -# Encryption: -01 22 41 0e 76 5b 2c 9e 90 bd ac bc ff 1b ca 8a -e6 4b e9 9c f0 13 29 74 85 72 17 68 37 0c 36 f8 -c0 d9 db 8d 79 37 62 54 b9 c6 91 52 72 0e 05 ca -ef d4 ce 7e ae 08 b3 df e3 ea a9 1c 46 02 ef f3 -8e 4d 81 bc d3 78 7a 14 d6 22 db b7 9c e8 64 4c -4f d1 d2 e4 1f 7c 1c 97 27 96 11 74 0f c5 00 00 -31 78 b3 7b bd 81 c5 a5 82 9b 5c 14 bf 45 9c 42 -38 b0 3b ee f7 3e 49 8f 86 5f 6c a7 9a 9e d6 0f -65 - -# PKCS#1 v1.5 Encryption Example 7.19 -# ---------------------------------- - -# Message: -ad 8b 11 a9 27 de - -# Seed: -5e ca cf f6 3a 79 38 e9 98 06 8a 2f 4b a6 bc c1 -02 0e 1f 28 c7 34 e4 34 e8 86 3c 48 e6 df fa e2 -8d 18 52 72 7f fa 7f 2e fa 3d e7 01 3b 81 2a 02 -b2 17 1a 0f 94 0b 36 d9 28 db db 96 0a 6b 22 03 -0c 89 37 89 cb fd ea 97 35 e9 ad 10 94 a6 84 61 -c2 eb 6f 71 8b e4 74 d9 3a 51 93 0e 3c da 02 c2 -1f 63 63 91 4e 7e da 54 84 03 7a 76 ad c5 33 12 -eb 9d bb e4 5e 23 a1 4b - -# Encryption: -01 1f a4 3f 5f 4f bb 98 30 11 81 4d 4a f5 45 52 -1d f0 b5 9e 9b 6f fd 71 33 3b 8f 9b ba aa 0f cd -c1 42 1c e4 bf 31 bf 99 59 fd c6 b0 9b 4f 42 51 -dd ee e8 21 0f c3 a5 2f e7 c7 1a 87 6e 6d de 1d -fb 59 a4 da b2 7d 34 fd ce 5b bf c6 ed 62 3e 89 -96 7f b6 fe 73 16 20 15 28 2c 5f 45 01 38 f2 50 -4a b6 1c 1f 12 d2 64 9d 81 5d 6e 81 38 43 8f 8a -80 46 c4 e8 40 cb 71 85 98 e1 e4 a9 fc 25 a9 45 -64 - -# PKCS#1 v1.5 Encryption Example 7.20 -# ---------------------------------- - -# Message: -be e2 94 36 c2 a0 de 16 f6 60 42 91 70 07 fb 51 -30 f3 c1 aa 7d f2 c7 c3 bd 99 fb c1 b4 13 af 4f -96 a6 5b 0e 54 3e c6 a5 0b e8 3a 9f - -# Seed: -23 91 a6 84 25 dd 8f 0b 83 c9 b3 61 24 67 a7 79 -cf 92 f5 ff 96 11 c0 14 93 bc be f8 65 e1 5b ba -5e 8f cf 74 be b9 ea 25 73 a9 fc e5 41 64 d0 6b -aa 8b 6d f3 67 cc 4c 6a 11 4a a0 34 6c 45 4a 2a -9e 60 53 59 18 d3 66 0c 66 48 4e d9 53 72 7a 9c -9a 25 - -# Encryption: -00 98 9d db d2 8d 60 95 ad a6 88 1e 28 34 1c e7 -a0 a1 ca 6b f7 f3 1f 77 2f 91 04 93 af db a2 d6 -35 9d 50 b9 83 3f 83 d0 ab 87 13 ab e8 e2 10 2a -27 ab 2a 60 1f b7 7b 9a 25 d6 a0 af f4 0c fd cf -9e 12 c4 28 43 eb ad 32 83 24 a7 19 f2 9e 8d 79 -ea 9e 5d 0d 98 86 95 73 60 34 db 5f ea 73 dd 36 -00 13 6f 57 a3 98 fe 35 2b 27 8c 60 cb 74 ec 98 -ad 57 a3 e1 d8 c4 47 8c a6 17 9f 4d 04 26 f0 f4 -20 - -# ============================================= - -# Example 8: A 1026-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -02 52 e9 5b b1 1b a1 e1 c7 c9 5b 68 53 f8 de 0b -fe 2b 64 03 ac 1b de 81 9d 91 89 07 74 7b 01 99 -fa db 80 59 c2 5a af 1a c5 65 a7 49 29 d0 15 a2 -01 f8 97 a9 ba fe 75 41 68 95 5b 35 5b b0 09 ce -16 14 93 12 28 3c 39 ce e2 20 d0 f0 85 8b 13 81 -2e 86 a7 d4 e5 38 8b 7e ae 5a ca 7c 88 6a 76 d3 -b1 e6 dd 67 92 68 a8 23 11 e2 82 03 18 cb 8f 0f -7e 85 f0 e6 69 2e b0 de df 30 88 1c af 73 15 d2 -7d - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -02 52 e9 5b b1 1b a1 e1 c7 c9 5b 68 53 f8 de 0b -fe 2b 64 03 ac 1b de 81 9d 91 89 07 74 7b 01 99 -fa db 80 59 c2 5a af 1a c5 65 a7 49 29 d0 15 a2 -01 f8 97 a9 ba fe 75 41 68 95 5b 35 5b b0 09 ce -16 14 93 12 28 3c 39 ce e2 20 d0 f0 85 8b 13 81 -2e 86 a7 d4 e5 38 8b 7e ae 5a ca 7c 88 6a 76 d3 -b1 e6 dd 67 92 68 a8 23 11 e2 82 03 18 cb 8f 0f -7e 85 f0 e6 69 2e b0 de df 30 88 1c af 73 15 d2 -7d - -# Public exponent: -01 00 01 - -# Exponent: -01 04 c8 5f d5 d8 d7 93 2a 29 85 c4 cb 7e 9e 13 -a2 c4 f1 90 3c 8b 70 f3 df 97 12 fa ee 20 17 b9 -20 82 c5 16 53 c0 bd de 9d e6 6c 39 01 b7 c2 2b -e4 f2 4c c5 6d ff aa 75 d4 3b 18 a2 e0 c0 df e3 -72 6b 19 8c aa 0c 96 65 26 3a 93 79 6a 27 d3 29 -84 46 5f 4b 4a ff ca 0d 92 f4 e5 1a 37 e4 1a b1 -55 07 66 d5 ca 7e 90 d4 de 90 9b bd 79 4e 8b c5 -2b 74 99 a7 3e 46 8a b4 42 13 cb 3a 3b 54 52 d2 -ff - -# Prime 1: -01 93 3f 8f 85 82 b8 ff f3 e6 bd 30 42 81 97 f0 -ac ec 63 e6 91 f7 9b 91 fb d4 d4 c4 94 2b 8a e9 -13 a4 01 f0 e1 7b a7 66 d0 a8 ee ec 4c b0 e3 da -17 b6 d9 1f 1a 74 24 88 09 20 1e 37 30 15 18 61 -8f - -# Prime 2: -01 79 ad 28 3c ac 68 af 21 6a 06 86 f4 38 b1 e0 -e5 c3 6b 95 5f 74 e1 07 f3 9c 0d dd cc 99 0a d5 -73 dc 48 a9 73 23 5b 6d 82 54 36 18 f2 e9 55 10 -5d 8c 4a 5f 49 14 be e2 5d e3 c6 93 41 de 07 ed -33 - -# Prime exponent 1: -01 6e f5 3d 6f 3a d9 8d 9a 6f d4 a4 71 31 2b 8a -8a 62 88 3a cf 84 6b 5e fa b3 e0 77 8f 7a dc 6b -64 43 30 bc fb 04 a2 ff 0e 4d 5d 37 4e 46 fe e2 -7e 08 18 27 94 d4 32 56 55 2f 94 2f 96 a2 eb d0 -03 - -# Prime exponent 2: -e6 c6 e6 25 5c fc 82 b7 1a 40 6e ca 60 b2 60 c8 -45 07 42 39 18 04 41 85 9c 3f e4 de 16 4e 46 6c -0b 98 e2 e2 16 22 d1 e1 a7 6f 7f 03 3f 8c d8 f9 -30 b6 69 4f 10 bc 2b 3a 4f ea 91 24 d8 75 63 7d - -# Coefficient: -35 42 45 2e 83 2c 16 ac f9 c3 f4 13 49 23 5e dd -d2 75 c7 05 3c 55 3b f8 9e 1a 84 57 12 48 33 3a -ad 52 0e 3a 34 46 c4 c5 e3 fd d9 ba ec d9 29 48 -0e b5 b8 fb ef 8e 03 ad e9 e3 9a 28 fd 8e 75 6c - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# PKCS#1 v1.5 Encryption Example 8.1 -# ---------------------------------- - -# Message: -f7 26 37 ae c2 8d 2b 6e bf 8f 73 d7 48 75 df 01 -cd 12 24 8f 00 20 60 8e 61 c7 3d 1a 01 f9 72 f7 -4d ee - -# Seed: -cc 20 77 a2 40 01 f3 e3 86 96 94 e4 fe 27 72 bf -93 8f 76 27 66 7b 62 d5 90 f9 ee 4f cf ff bb b4 -7a fd 5f ed 6a 18 08 44 a9 12 1a 32 ed 7c bc 56 -cd 28 70 a2 d6 96 b9 43 d6 fd e9 76 7c 1b 96 48 -61 6c 32 ed 6c 40 0d 42 3d d4 ab 72 16 af ad a0 -28 40 2e b2 a1 c3 eb cc 24 5a fc 7f - -# Encryption: -00 72 57 5d 3b 11 c5 ff d6 ae 24 f3 53 ff 74 99 -27 b4 ae 5d f4 63 f7 0c 5f 3e f5 49 6b 0d 14 5e -b2 b8 a5 3c 28 d5 3e fe 8b f9 f2 7b 2e f4 ce ea -48 31 05 77 c3 d2 b4 b9 49 a1 2e 3d f3 f5 67 76 -82 88 18 45 2d 81 bd 45 af 15 8c 87 bb 57 74 5b -8a 10 fc 1a 92 a0 ea 55 c8 51 39 f8 42 f7 3f 1d -61 3b 9a 96 4a f8 ed 72 0d 0e 08 47 f7 ae 5b 30 -5c 05 f1 2c bc 4c 9c 16 84 ac f9 02 97 0d 82 09 -49 - -# PKCS#1 v1.5 Encryption Example 8.2 -# ---------------------------------- - -# Message: -2a 8e 3e e7 ea c6 b2 2e c6 58 ad 44 d6 66 c8 cd -3f 57 ec ea 29 9b 5c b7 bf 9a 37 3d fa 66 97 2f -13 e5 f3 a3 00 e8 0e 6d bf 74 15 68 0d 0d 24 90 -1a d6 b1 40 b0 00 aa b8 53 51 f9 2f - -# Seed: -fb 19 20 9d 8a 29 af af bc 05 3a c1 f3 20 ba 60 -fc 1f e1 04 aa 78 39 c8 4c 9b 3e aa 18 a8 f9 43 -bb 21 9f 59 cc 16 7a 38 4b ac 7b d3 65 82 4e 10 -36 31 b9 7b b9 a6 d1 18 f4 f0 a9 51 fa 47 8a 05 -ea 09 - -# Encryption: -02 1b 54 64 65 71 a9 a9 3f 0b 0a 03 82 e5 40 a8 -c3 97 4c b3 1c 87 eb f1 7b 3b a6 2a 1c 95 21 c5 -0d 7f 90 70 2e 13 ae 0e 22 26 38 34 e7 64 60 35 -15 94 45 a0 87 7d 9a 4f 5b 16 17 7f 7f e0 52 bb -d0 23 d0 81 89 4f 2d 97 ca c2 45 20 76 ca 11 91 -a1 71 a4 8f a1 cb bb c3 f0 f6 f3 bc 1a 44 78 40 -3a 5a 48 8f eb b3 a4 13 80 16 3d 94 2c 97 7b b8 -ec d2 86 6c 5f 5d 91 9e d2 0c 0d b3 ee 31 ef 2f -51 - -# PKCS#1 v1.5 Encryption Example 8.3 -# ---------------------------------- - -# Message: -d9 9b 4f 10 d9 f3 2e 12 ec fa e2 63 0b 22 ac 02 -6a f9 64 b9 c7 15 d2 07 - -# Seed: -e0 af 8b 7e ab 36 a6 ee 31 6d 78 13 67 f0 9e a1 -1e 31 fd c1 ef 2c f9 c9 7c 37 9e aa cf 68 72 a8 -21 3c be 4c e2 e2 9c 77 8b 35 95 40 10 06 3f 17 -76 ab 5b 17 2d a6 24 b4 06 a1 c5 8e 0b 57 4a 03 -b1 b1 b2 cd 7d 3a 9e 50 35 a9 a9 73 05 8f 04 97 -65 2d 2f 73 b1 dc 8f 48 7c 09 cf e7 1d 8f f8 f1 -45 8c 79 0e e0 c5 - -# Encryption: -01 02 3b be 85 57 c2 63 0a 26 22 46 db 7a bc 54 -03 43 88 70 38 f6 4c 64 1f d7 4e e8 74 ae 96 70 -fb 28 62 d4 24 70 3d a2 0b e4 f4 8b 23 9c d0 60 -43 81 9d 8f 61 51 44 e2 b1 f0 0c 8f 88 49 2e 62 -f6 e0 73 16 f8 49 05 35 3b 0b 18 80 ed 77 da 2b -62 d3 a9 3b b7 0f f6 a5 00 79 38 b9 73 b4 cd 5a -bf ee 0c f1 3f 5d 4a b2 16 01 02 68 5c ac 80 81 -83 4f 95 55 80 6b b3 22 d0 dc 5b 8a 2b f1 28 45 -62 - -# PKCS#1 v1.5 Encryption Example 8.4 -# ---------------------------------- - -# Message: -ca ec a8 e5 9b 81 0c f7 51 12 f7 ed 04 7a 46 69 -2c a0 b7 a8 6e 18 41 d7 19 - -# Seed: -76 1f 68 64 dc eb c9 5a 77 9b c0 b1 6a 95 86 6c -33 dc 8d ca ce 61 cd 7b f9 01 72 d9 9a a4 57 db -6d 90 88 7d 84 c4 73 8d 25 cd f0 e8 95 69 ae 47 -d3 07 3e c4 46 ee ed d5 2d 57 20 8b db 69 45 57 -03 46 57 a7 03 78 49 37 ba 69 4d 42 51 21 38 53 -2b 8a d1 d9 86 fe 47 31 8b 28 23 de 82 ce 27 6f -a6 f0 d3 c8 ef - -# Encryption: -01 1c 0c 03 f7 b6 e1 c1 a8 41 17 40 a6 e5 b4 73 -c2 8d 62 21 17 6c 9d 4f 68 02 4c a5 7c da 27 3a -f5 54 74 03 60 99 0a 1b 74 de 34 bc ea 10 3c 2d -0c 36 57 60 02 08 0b 30 bd 28 f0 76 fb 75 fc 9b -eb 9e 05 d1 98 9a 31 1d 12 c1 f2 8f d6 93 92 ad -4b e5 2c e3 89 de c1 1e ba 94 6b e0 59 91 da 7f -d8 87 a8 d8 76 8d e7 36 b9 05 bf 4b db e8 8b 85 -df c3 b2 5a ea 30 fe 90 df 1d 22 d8 a8 d6 15 65 -1c - -# PKCS#1 v1.5 Encryption Example 8.5 -# ---------------------------------- - -# Message: -10 12 12 85 6e 60 cd 27 2f b1 69 cf 62 cf 47 f1 -bc 50 ef 9f 1f cf d2 14 81 6c 80 7f 18 4a 90 3f -16 f0 e8 09 ac f5 e0 - -# Seed: -60 43 c8 df 6a 7f 4a b8 3e 31 97 e8 cd 02 25 dc -38 66 b5 d8 e6 99 3c 2c c5 b8 76 35 1e e3 3c 71 -c1 a4 cc dc e4 5f 3e 9d c7 b7 e5 1b 52 ee be 0e -27 0e 71 62 07 ca 14 03 e1 3e 72 3c e7 3f 10 45 -5e db de 85 b0 82 90 52 ed af e5 6e 9a 22 02 4d -40 68 37 1d 36 c9 1f - -# Encryption: -00 05 c5 cf f8 9b 93 3d 8b 65 23 b3 59 06 bb 3a -71 1a 0f 7f 50 3f 92 14 74 66 59 85 03 91 27 30 -3b 00 11 e7 a4 2b 41 c3 3b d2 0d b3 1b 15 60 c9 -b5 22 20 89 cd cf 53 b8 2c 95 f8 c1 ad cd 8b 78 -3f d4 b4 8a 45 40 20 66 8e 0b 62 52 0e 52 58 52 -09 db 52 9f 38 70 86 49 d8 e0 64 89 0b 22 8f b3 -c1 98 1b 2a ef 3a 54 65 ce b1 30 21 eb e0 8d 02 -e3 3a a2 dc 3c 39 28 4e f7 a8 58 dc ce b2 8f fa -28 - -# PKCS#1 v1.5 Encryption Example 8.6 -# ---------------------------------- - -# Message: -6f 03 b5 72 52 30 de 7f 99 63 69 8e db 79 75 ec -e8 - -# Seed: -a3 0e e5 ae ab 59 31 03 3e fb 70 af bc 2d 3d 11 -a6 33 84 cb 8c b3 3a 8f ca e6 14 66 84 e6 3f 0c -c3 2e 89 a7 e4 ea 43 32 7b f0 35 66 95 43 19 28 -86 de c3 fb 4e 2d 08 11 ef a9 ae c5 10 9e 31 b6 -a0 56 e5 3e 31 7f 6a 90 4b 13 a7 35 6f 5e 7a e6 -0b 97 21 5e d1 48 17 d2 8f 74 b1 64 0b 1f 2e 42 -ef 0d 38 ca 35 a3 54 a0 af ef a8 03 a4 - -# Encryption: -00 10 bd 2b 35 6f 9e ab c2 2f 7e 68 f7 2f 61 75 -f9 ab 9d ed a9 64 23 b7 4b 11 de 82 c6 07 a1 38 -86 3e 17 96 6c 07 f5 6c de 9e d6 bc 42 2e d9 fe -aa 1f 65 36 7c cf 91 cd 4c 91 58 a7 49 57 1a 0e -9f 96 07 cb 48 cd 00 a4 48 de 03 64 91 06 ce 0c -24 06 aa 50 aa 12 17 17 8c db 06 80 1c 70 a8 9a -7a 1a 83 06 8e 68 db 95 d2 4c a3 db 33 a7 e5 e4 -3a 68 15 22 74 bb bf 40 06 d9 fb 69 f0 51 4c c9 -e2 - -# PKCS#1 v1.5 Encryption Example 8.7 -# ---------------------------------- - -# Message: -87 99 13 04 54 61 bc 0e ac - -# Seed: -c3 c6 a2 4a c3 40 a4 a3 ff 3b 2c 30 2b 56 eb 83 -91 bb d9 5f af b6 64 78 38 44 38 ab d8 b4 5d 13 -2b 26 99 09 b1 87 84 0a 68 44 ad 39 9f a8 13 72 -05 e0 2c ca e7 77 5c e6 66 21 20 e1 54 b7 bf d3 -0e 8e a4 d3 4a 7d b6 a2 34 88 a5 da ea 38 08 5b -ed 56 78 0c ff 87 27 12 5f 1a d5 f9 d5 a0 bc 3b -e5 80 bc 4f a0 68 26 7b 27 de 38 3c 55 c7 fc 17 -64 c8 6a c2 1a - -# Encryption: -01 d2 1e ce 33 f4 40 c7 2a 11 1d 62 ef 48 6c 77 -c6 c8 90 cd 81 a4 eb 05 32 ad 2c 0e c7 68 dd 1d -e5 b2 11 2f df 04 e2 87 a9 5b 95 0b 1f ca 5a e6 -93 cf 0e 8a cc 93 6f 37 47 14 de 74 95 90 8c 29 -15 a7 07 21 3a c3 db da ba d8 1b 4b a1 cb 50 b9 -5f 93 14 53 1f ec 83 3f 08 21 c0 4b 57 40 d7 3b -8c f1 f9 e3 d7 ab c9 74 49 26 13 8f b0 15 c0 f0 -56 cc 4b a2 f3 16 37 34 db 44 3e bd 68 85 8c 4f -a6 - -# PKCS#1 v1.5 Encryption Example 8.8 -# ---------------------------------- - -# Message: -5b - -# Seed: -42 b9 99 fb 16 3a 6f fa 67 a9 bc 4e 6b a1 2f 81 -b1 d5 6e 54 bf 08 66 39 7f d3 14 eb 0c f9 7f 13 -b7 80 4f 76 8f ba 54 06 21 f0 5c d3 72 64 d8 e8 -f5 82 28 fb 6a b3 0e f5 4e 30 fa 8c fc b5 a8 7e -14 8f ba bf 85 88 6a b1 f0 d5 25 49 2f 56 c6 47 -f7 22 9b 2b f3 94 a0 ce ab bd 37 c9 3e 6d a8 09 -7e 82 72 7b 3d 53 e8 c2 ad 1f 77 13 e3 4e d1 3b -a5 9e 0a 91 4d b0 6f aa e4 9c b3 79 96 - -# Encryption: -00 90 e5 35 59 47 90 2b c3 fb 58 0a 84 77 09 03 -a3 95 5b 3d d7 19 1c 92 8f 74 07 ba 74 72 65 dc -8c bc 1d 22 f9 37 72 72 b1 a8 c3 5c 23 8f 04 a1 -19 37 d1 b4 35 4f 64 37 95 e9 86 de e2 e4 0a 40 -67 41 b0 21 fd f0 5c 4b a1 15 62 e8 3e 9f 28 59 -2e 0a 79 14 fe 88 b2 c0 fe 7a 5e ea f5 00 f7 e9 -8a 5b a9 54 f7 50 77 bc 8f 65 9f 21 bb 22 03 31 -4b e0 d6 d2 1e 63 20 c0 5e 6e 2d 55 79 79 22 6b -80 - -# PKCS#1 v1.5 Encryption Example 8.9 -# ---------------------------------- - -# Message: -f6 35 29 90 13 24 a2 0f e5 e9 25 8a da 2f 95 37 -b0 1f 58 39 b4 45 97 e3 29 3a 12 25 ca 3a 2a df -68 4a 72 a7 93 c6 9c 56 af 2d 34 98 d3 2a 09 2e -91 4b - -# Seed: -7b fa 85 97 a4 34 cd ad fe 15 63 14 44 95 13 d7 -6c 10 5d f1 bf c4 8c 4d 07 6a bf c0 5b 5d da 72 -e0 dd 15 f9 fe 82 a9 95 5b d5 6d 33 43 e7 c6 f2 -5a 60 74 12 07 e7 3a 2d 10 bb 95 d1 d7 29 a2 27 -93 e6 c4 55 e9 16 23 5a 81 16 94 db - -# Encryption: -00 ad f4 78 74 67 ea c2 ea 61 fe 7e f8 2f d8 7c -2d a5 89 9f 30 30 2b bc 11 27 86 d2 fb 11 c1 42 -f3 f1 d8 cf 37 16 0d 2e 4a 43 98 3f fb d3 93 a4 -1b 59 9e e6 a2 7e 24 64 25 50 2d 46 90 20 2f e5 -f8 ee 1b c6 c1 d5 d1 6b e2 3b 97 3a ed f7 f9 11 -1b d8 b1 42 84 42 65 fd 93 57 7a 43 c3 ac c6 e2 -af 20 89 d9 d2 f3 f3 1a 5c 24 7a 7b 68 31 5b ae -25 d5 ae 81 40 a5 1f fc 00 97 10 7e c1 62 0a b3 -b5 - -# PKCS#1 v1.5 Encryption Example 8.10 -# ---------------------------------- - -# Message: -c6 d1 4b 04 71 45 f3 17 78 1d d7 38 2d c0 a9 72 -57 d5 54 bb 53 53 9e e9 a2 92 e7 da 5c b6 42 6f - -# Seed: -01 ff 38 d5 de d6 c4 3d c1 dc 5c 27 a7 e4 81 3f -44 8f 45 c9 6e df 4b d9 3e 96 fa da 9b c8 ec 5b -43 4f 06 19 a3 8e 04 35 6e 06 27 85 51 40 7b 7f -37 e4 2d 91 45 62 0a 81 98 18 50 a4 9e 28 51 17 -2d 23 0b 37 82 41 10 f8 ff db 84 77 94 63 9d 26 -50 cb ed 36 26 01 05 f1 f1 29 6e 52 a7 d4 - -# Encryption: -00 5e dc 93 97 89 cf bf aa ff 28 2b af 97 01 d6 -1f 9d be e6 f2 d2 06 cf ab 77 57 61 f4 2c b2 74 -ec ba 31 c7 cd 2f e6 03 1a ba 0b 84 d4 62 7d 30 -37 e3 1c e7 e1 56 23 ba 7c b7 69 02 51 c0 63 27 -a4 31 37 12 98 df 29 21 95 b6 45 11 62 d2 da 92 -a7 07 8e 2d 07 c9 f5 6a 07 06 8a 9a 3e 17 3e 4a -ae 25 a5 d1 c6 8e 68 20 8c b5 25 3a 0a 53 aa 6e -2e f6 c2 95 d1 51 65 69 b8 62 cb 92 ca 82 3c cb -ab - -# PKCS#1 v1.5 Encryption Example 8.11 -# ---------------------------------- - -# Message: -c1 16 53 e8 10 b5 3e 65 11 f1 33 23 fe 52 26 a1 -70 c2 1f 6d aa 44 29 d9 68 ef da 05 29 d7 b6 e1 -0d ce d8 0c 6b 63 01 de d2 2f 52 91 1c 0f 7f f4 -53 5b d5 e2 0f f5 35 88 cd 3d e6 64 8a c0 2d - -# Seed: -85 fa 7c 6c e9 6d 0a 8a 1f ba 75 04 71 7c cb e1 -37 13 80 93 95 6e ff 06 3f c2 ef d4 a4 6d 7d c7 -4e 90 f1 da 9e 43 db a9 12 9f 14 ec 55 9a 4d 2d -6c 5a 19 cb f3 a6 8c 62 d0 98 34 52 a9 ee 0c - -# Encryption: -01 b0 8d 49 83 13 a7 d7 4a 05 53 14 eb 43 15 ba -02 87 60 da d4 11 14 d5 94 2d 63 bf 8d 27 be 3f -49 cc d9 4a cf 9d 3a a2 2d 09 b9 9b f9 74 09 bc -f3 32 13 c0 99 67 07 86 82 03 a9 ab 27 70 8d 3f -ff 69 b8 9d 02 e3 6e 01 21 a1 19 b8 d4 d9 bf d4 -fe 8b 16 8f d7 c1 2a 24 3f 7a 00 0b 39 bf 8d 56 -48 17 24 20 80 23 bb 60 7b 30 50 5d d1 74 2f 87 -9f 16 c1 0c e4 90 d3 4a 68 0d 27 ac 39 60 7d a2 -4e - -# PKCS#1 v1.5 Encryption Example 8.12 -# ---------------------------------- - -# Message: -09 5b 77 c9 4d c1 b1 87 88 e4 00 e6 91 6a 4b 4c -fd 73 ac e0 df 9a 3a c1 31 bd f9 ad 0a 12 db 76 -6d eb 22 53 59 d9 01 cd 56 ed 88 cd a3 d3 28 56 -54 02 - -# Seed: -a3 4a 68 05 55 71 09 c2 61 dd df 5f 85 d3 71 ae -65 20 f4 5a df 46 96 01 b5 c3 59 fe c7 44 cb 2a -ae 80 98 3c 73 2d b6 c5 45 df 55 e0 20 8a cf bb -f1 c2 c5 e7 99 88 f3 4e cd 6e 5b b4 b5 25 c1 b8 -bc b0 70 d0 d8 42 48 b1 f8 e7 48 0e - -# Encryption: -00 39 56 36 a8 26 67 dc f0 0d 5d bd d8 54 12 06 -94 8d 49 36 89 17 ec 0e 00 fd 7a c5 ca 8b f4 4e -c5 83 78 38 6e 59 4b c0 65 a9 a6 3c f2 a3 55 a6 -08 b6 f0 ba cb a5 60 08 bb a4 72 2a 7c 47 05 45 -a2 0f 38 78 53 d4 60 31 3b 2e 86 4e 17 b2 33 e5 -96 35 41 32 af 17 3b 4d 04 49 26 47 79 02 62 d3 -a4 3f 84 27 37 88 37 46 6b 06 73 a8 15 27 e6 be -10 45 80 32 6f ec 84 ba 37 1e a6 10 91 fa 40 33 -a4 - -# PKCS#1 v1.5 Encryption Example 8.13 -# ---------------------------------- - -# Message: -38 - -# Seed: -54 7c 91 75 19 05 d5 a2 84 ac 3f e4 32 cb e0 30 -55 b2 85 06 58 96 11 0e a3 6d 05 a1 40 08 3c e3 -95 5f a8 28 41 ea f6 db 4a 50 d1 2c 07 4f 45 a6 -88 b5 57 6d 6e 61 68 07 54 0a c1 17 58 5c 5b c3 -be 52 60 72 7c df 12 3c 77 4d b4 0c ff 29 70 88 -62 48 53 e4 69 51 36 b9 31 16 15 17 a7 b9 b5 dd -cd 9d 32 de 3d fe 3e e2 ea 68 8c f7 bf 88 2c cf -7b 9c 48 d5 e1 9e ff a6 50 4a 42 62 0b - -# Encryption: -00 89 e3 9d cf df 91 69 3d ef e3 9d 12 bb 25 f8 -0a 76 8d 44 1b 48 1d 6a 75 48 69 50 42 48 0c d4 -a0 ba 97 83 d5 c5 bd 38 89 6d ce 06 ac b1 77 a4 -ac 59 68 e6 55 a7 aa f5 0d 69 4a 64 97 13 b7 a4 -bd d1 4c 81 9f 83 b2 04 7d e2 19 5f 73 03 66 54 -53 a8 a1 11 5e 5b 48 ac 0e 9a 65 ed db 31 89 51 -7b 04 6f cb c2 d1 43 81 77 6a 77 fb 46 8e 11 29 -3c 78 c8 37 4c 8f 46 60 35 1a c2 b2 c7 84 5a 25 -fe - -# PKCS#1 v1.5 Encryption Example 8.14 -# ---------------------------------- - -# Message: -80 64 6b 3c 4d f0 eb 79 1b da 0c cc 4d 97 d8 1e -a8 f6 f7 4e b2 45 e2 c7 c3 48 fd 7f b9 90 16 a9 -d4 0a 60 5a c7 42 b2 7a d2 48 - -# Seed: -11 b8 e7 98 d7 a1 42 d0 82 e0 59 8a 8c b4 f8 c2 -aa 87 5d 5b 65 17 8c 4e e6 7a 5c b8 41 d1 cd a3 -04 31 d0 20 df 28 80 d7 93 58 15 d5 9d 91 b9 99 -3e 53 ac 34 1c 97 28 61 ea a2 66 97 cf 10 ca 8b -27 94 b4 53 03 be 03 48 9e be 07 4d 8f 23 98 54 -c3 a6 06 fb - -# Encryption: -01 f1 e5 a3 db d8 24 75 2d 2f ba 3c 32 42 e9 d9 -96 e6 27 43 0d 49 3e 1b 44 6a 2d bc d8 6a 48 09 -3e 37 a2 e1 28 b2 8c 49 d2 d1 72 bf 5a 97 7c 36 -9b aa 9f fb 83 9b d2 fd f0 0b d3 0f f5 22 8b 57 -6b 94 e6 d8 ec f9 44 24 7a da d0 19 f2 1d 06 fb -e4 18 d3 a6 d5 4c df 11 3e 8d 14 f6 ea 06 d8 db -79 64 93 bc b1 89 6f c4 f3 f3 03 86 c5 c8 ba b7 -03 7c 87 9a fe a4 7c 8f b7 a3 c5 b5 0b 29 18 66 -b9 - -# PKCS#1 v1.5 Encryption Example 8.15 -# ---------------------------------- - -# Message: -6b 63 1c 7c 35 ea 75 a1 b0 - -# Seed: -3e 42 40 c3 e0 9e a7 83 55 35 8c da 61 29 53 47 -30 f4 8a 9c 9a 1a 52 13 28 4b fd 07 71 21 6a d4 -ca 23 3d 99 3e e6 35 7f 4b 1b 12 a6 ba a1 77 43 -13 4a 85 7f d7 69 a8 bc 78 d6 1f b1 4f ea 05 22 -1d cf 5a eb 1a ff d4 0d 8b c6 94 5c 30 10 45 b6 -86 c6 11 fa 43 7e 30 ca 0f ab 5a 4c de f5 20 5b -af 99 26 c6 07 be 96 37 b1 50 7f 50 83 e9 40 cc -fa 2f b3 86 19 - -# Encryption: -00 47 cb 9a 91 98 d9 83 b3 22 24 cf 27 fc 72 99 -bb d4 ae 07 78 a8 3f c5 9c 47 45 fa 99 e9 17 bb -74 f8 bd 4e f1 3f 14 0c a9 b7 2e 2a a1 74 ce ea -26 48 94 e2 15 f4 1c 36 d4 e6 f3 46 f6 9b 4f 85 -50 5c 54 cd 46 25 9c 71 2e 30 c4 92 94 ba db 1c -47 16 85 1f 2b 75 e3 96 12 cd 54 66 ba 56 e3 f3 -15 99 c2 dc e2 3d 04 c9 3a 64 40 22 27 df 40 b5 -14 c7 4d 0a a3 6e 1e 86 58 e2 92 77 b3 05 af 35 -15 - -# PKCS#1 v1.5 Encryption Example 8.16 -# ---------------------------------- - -# Message: -40 08 55 da 54 a6 d1 fe 5f b5 8a 73 d2 a5 e5 58 -38 70 fb d5 25 d2 f5 72 ad b5 96 30 06 d0 a1 33 -9b ea 88 9d 6d 46 a4 37 62 f5 13 bb 7c c0 36 22 -bf 85 92 44 d6 - -# Seed: -49 6e 50 ba b5 ef 18 f2 2c 3f 62 b9 21 14 8d 36 -c1 01 ad 0a 9a 20 38 67 58 08 ce 8b 62 f8 a6 a0 -ba 8d 91 05 f9 2e d8 a0 2b 31 2f 32 4f 3f d3 91 -92 bd 41 53 78 4f b5 59 05 c3 b6 69 30 7b ad a8 -27 af a1 b5 cb 3d c1 1d c4 - -# Encryption: -00 d3 a8 5d ec 97 d3 44 88 ee 33 c6 58 ba 18 8e -64 cb 57 83 7d 2e dd bc ba 8e e5 2f 13 f1 e4 fe -9b ec 2f 92 e7 21 09 87 e1 c3 fe 34 5d 40 19 77 -0b 07 74 94 51 b0 4d 67 30 d5 3a 91 01 5b 25 7e -81 0d ae 0a 0c 11 6a 4f 22 45 14 ed bd 39 b2 c6 -5e 15 2d 3b 97 89 dd a4 f0 d4 5b f9 83 2d 27 9d -34 31 06 2b 4d e1 b0 67 7e f5 9c 6c 33 27 68 ec -da 3a a6 bc d1 0f 70 bd 06 03 0a 76 65 ed 3f 20 -79 - -# PKCS#1 v1.5 Encryption Example 8.17 -# ---------------------------------- - -# Message: -b8 7e db 45 5a 7e 85 53 9f 92 8e da e9 09 fb f8 -f7 a1 99 c0 3a 94 a9 a4 5a ca b2 5e fa ee cc 26 -29 74 ca e0 bb 72 24 3a 99 c6 47 20 79 f1 97 38 - -# Seed: -03 5e 31 59 4a 56 65 60 5b 84 fe c9 3a df 92 58 -50 85 1d f7 b3 94 e9 bb ec be 4d 72 c9 2f 27 03 -b6 d6 08 96 e0 05 4c 59 ca fa 5e 0d 28 6c 81 2b -23 e5 37 88 5e 4c 34 38 a7 72 a1 61 0a e9 fa e9 -18 e3 4d 49 92 c7 f2 63 f3 e8 e2 f9 80 b8 - -# Encryption: -02 1c 8c 95 9a ec 47 29 68 87 68 93 0d 67 e2 02 -99 dd 47 90 2d b0 79 f2 39 b8 c2 88 b0 a7 04 47 -c7 19 6b 84 91 2e aa 5b c3 af f6 ba 63 0c 2e aa -3f cb b2 4b e4 63 83 65 31 25 0b d4 c4 f2 a1 da -68 c8 bf 4f 40 cf 5c 98 b6 85 eb ec a4 d0 3e 76 -b3 34 af 0b 1b 34 48 8b 58 2e 29 35 25 35 72 f7 -fc fa a8 35 44 e7 fd 52 ef 45 8a cc cb 19 30 1a -4d dd 50 51 6f 16 a5 fb 78 f3 95 99 00 db cc a1 -f2 - -# PKCS#1 v1.5 Encryption Example 8.18 -# ---------------------------------- - -# Message: -30 2a c8 0e 30 c6 55 3e 93 59 df 85 b1 e2 4a 16 -c8 62 a2 0f f4 fd 9d 5f 14 6b e2 81 dc 30 66 ae -b8 fa 00 b5 2a 99 - -# Seed: -32 6c 99 35 8c 4e 5f a4 d2 c0 43 f0 2f 92 70 5f -79 1c f7 12 bc 01 04 5b 4c f3 49 b4 2a e5 ac fa -c3 78 38 11 bb f0 7f 34 bd 6c 85 19 55 cb a4 a8 -b2 a7 d1 39 a7 8b c4 d8 8e 3a 88 e6 c4 cf 49 4e -6a 4a 52 35 41 45 e1 18 83 cb 5c 78 b5 72 f3 0a -51 ed 23 f2 56 4b 69 60 - -# Encryption: -02 03 29 87 cc f7 5a 63 86 24 17 80 64 db a4 b7 -2b e5 39 e0 7e cd f5 30 03 56 cc 43 d7 29 fe 34 -fb 35 bb bf 5a 32 17 2c e3 9e a1 fb 47 d3 8e 49 -7a 03 b6 01 ee af da af 99 a3 4f d7 21 18 4a f2 -e1 8e 83 d0 50 a4 10 8b 15 e5 e3 a2 7e 0e 63 6d -f8 d9 4f 98 16 58 eb de cd ab 0d ef cc 0d af 3a -c9 a2 7b 3f 22 a0 54 1d 35 00 27 52 e9 cc 4f b2 -58 2f ae 25 11 a1 32 ec 5c 22 8a 88 72 bd ba d6 -87 - -# PKCS#1 v1.5 Encryption Example 8.19 -# ---------------------------------- - -# Message: -00 b3 82 01 74 6d ca f4 03 48 af 57 ba d7 25 70 -ca f5 a2 85 5f ec 6c 42 ee 22 dc fe 64 c9 97 ec -62 a5 c9 75 62 4b bd 1f 8e c9 16 - -# Seed: -93 91 05 c0 04 c0 1a a9 f4 74 46 d3 cc f5 30 e9 -b2 17 4c 50 ae bc a0 a9 5c b7 a4 d8 39 54 ef b8 -03 9e 59 1c 19 71 d7 76 ce c7 61 12 92 06 db 7a -d3 dd 87 16 68 25 5a 55 50 ac 4e 94 8b e0 5c 16 -22 20 dc ef ec 13 ff 1f d8 a5 a7 f7 8b f7 15 b4 -9d 03 ba - -# Encryption: -01 2b a8 7d c0 3a 1a 38 bf ed f1 21 ed 87 22 82 -7b d9 7d d6 3f dd fd d5 90 50 c5 3c 5e 7b 49 fb -7a e6 03 84 87 82 0e fd 5f b9 71 43 81 ce 8d ae -b5 6d 13 50 bf c6 7d f0 91 be a2 ac df fd e9 29 -2a b1 29 1c c9 75 1d 9e 39 a8 26 f0 54 ad 1f 33 -a2 b7 94 da 50 ef 80 67 29 17 e0 b3 81 40 45 d2 -3d f4 5d ba 3f dc 6f 09 ab 0a 01 8b 06 0a a9 fa -fc 3a 5d 19 d5 eb 64 31 0b d6 02 a9 91 1d cb 7f -24 - -# PKCS#1 v1.5 Encryption Example 8.20 -# ---------------------------------- - -# Message: -ba 28 33 66 04 76 d8 73 15 07 66 9f 50 29 8c 2c -68 d4 4c 53 e3 d0 a8 03 78 6e - -# Seed: -86 ce 8e 92 ad 88 b1 46 2a 17 1a f2 8b 4e 99 08 -8c 04 98 a2 9b 4c a5 e6 6f 64 f8 6a de c7 f9 64 -e8 eb 82 57 c5 c0 1c da 16 5e 0f 75 11 db 14 7c -10 bc 07 51 5f 04 f0 5f 52 d2 bc 89 22 83 57 c6 -61 b4 3f 43 d5 42 db e7 78 34 09 1c 7c e7 0b 18 -2e 19 bc 93 6c 30 68 4a 83 1e 2c 3b 8a 4a 74 46 -3f 0c 9f 1b - -# Encryption: -01 12 ac 28 98 a2 5c 13 28 79 1f c9 6a 82 b7 29 -18 b5 1a 66 8c 54 0b cf fc 8e 0b 3a af e2 05 ee -87 1f 5e b7 6a d1 16 d3 04 cc 04 42 bd b1 af 5b -9a 63 45 82 7e 67 8e 40 e3 3f c8 58 ef 6c 45 6b -e4 36 52 bb 2e bc 39 64 b4 bf 4a 93 a8 ee ef 84 -04 ae f1 a0 44 41 5a 15 6f 7c fd 79 95 ac 25 e7 -b0 30 26 69 8e 14 48 9e fc c1 ae 92 96 58 bb 66 -3d e0 ac 44 a7 a5 5c aa 0b 0b 20 34 c2 aa ec 13 -4e - -# ============================================= - -# Example 9: A 1027-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -06 8e f0 b2 74 15 7d 7b 5e c7 29 03 86 59 56 18 -3e 0e 34 62 ec d2 21 14 ca d4 c7 ba ac 94 c7 c2 -c5 e6 cb df a2 ab fe af 8d 23 18 2e 9c 08 81 5d -10 0d 8e 8f 62 1d 3c d4 af bb 99 85 96 6f d6 a4 -18 2b 59 90 88 a3 5d 77 fe 01 78 ac f7 53 1c 70 -d8 96 ff 78 8e dc 82 06 05 40 ef ef d9 f3 c2 4d -5b e6 9a f7 f2 f4 44 85 b1 91 18 a4 68 81 4f c5 -13 e3 a1 ce d6 77 91 f9 03 6e ee 56 fa 9e 20 60 -2b - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -06 8e f0 b2 74 15 7d 7b 5e c7 29 03 86 59 56 18 -3e 0e 34 62 ec d2 21 14 ca d4 c7 ba ac 94 c7 c2 -c5 e6 cb df a2 ab fe af 8d 23 18 2e 9c 08 81 5d -10 0d 8e 8f 62 1d 3c d4 af bb 99 85 96 6f d6 a4 -18 2b 59 90 88 a3 5d 77 fe 01 78 ac f7 53 1c 70 -d8 96 ff 78 8e dc 82 06 05 40 ef ef d9 f3 c2 4d -5b e6 9a f7 f2 f4 44 85 b1 91 18 a4 68 81 4f c5 -13 e3 a1 ce d6 77 91 f9 03 6e ee 56 fa 9e 20 60 -2b - -# Public exponent: -01 00 01 - -# Exponent: -71 94 0b e6 79 7b b3 28 5e bd c2 0c c9 27 5f 5d -77 55 88 e9 af 6f 68 7a 2e 39 d2 c1 91 11 10 76 -95 dd ed e3 91 d2 19 6b 29 58 1d f3 15 4a 37 12 -fa 6f cd f8 5b b4 fd 48 64 1f 07 1f fd b1 de 08 -a1 d5 92 1c a1 0e 68 dc 04 13 13 c9 bb cb 80 81 -bd b5 d4 60 42 27 cb e5 78 07 41 65 74 d1 a3 8d -a0 b2 34 4b b2 15 b4 18 2b 10 6b 2b 53 4a 8d 32 -06 f2 d7 d3 03 b8 dd 5b ce 29 2a bf 75 cd 76 49 - -# Prime 1: -02 95 10 b9 33 b7 c8 4e 41 ff cc 72 2e 32 38 60 -c9 b2 d0 88 3c 68 33 62 4b a5 bb b8 97 53 d7 60 -3a 7d cf 26 6c c8 f4 bb 07 48 48 26 0f 68 dd 82 -6b 63 8a 8d d2 ef af 68 aa ee 26 5a e8 98 39 b1 -63 - -# Prime 2: -02 8a 2d 03 34 49 44 62 f6 11 f3 60 3e 0d 37 4f -3e 32 d2 fa b5 e9 d6 97 2d fd 70 79 64 46 a4 8b -c3 03 ee 25 8b 75 a1 b7 ac e7 0d 48 58 51 79 4e -42 84 f2 dc 51 d3 97 8d 55 53 7b ea 22 55 11 f4 -99 - -# Prime exponent 1: -01 b9 55 0d df da 3d 6f 09 9e e5 f6 00 a3 64 82 -31 86 20 b4 23 68 09 8e 01 24 e7 5b 88 23 e0 31 -0d 3b ba d5 53 61 22 09 cf 05 d1 ad 1f 32 8a 57 -ac ac 2a ef 1e 39 08 69 1f 5c 98 dc ae 56 1a 86 -33 - -# Prime exponent 2: -e8 ff a4 8c 52 4d 5d a1 8d 61 48 76 34 4a 43 ed -a8 4d 0f 67 ad bb 27 46 65 f2 ae ae 0e da dc f3 -30 2f 61 e9 0e 68 bb e8 0c 8d 28 05 ee 7c a8 5d -12 43 ee 4c ac a5 3d 12 fc ee 05 43 f4 74 90 d1 - -# Coefficient: -01 98 4a 81 5c db 46 ad 81 cd 82 10 aa 07 22 70 -0c 59 90 9d dc 9c 4a 49 f1 9b e1 5d a6 04 47 8c -21 88 81 d5 43 a7 54 6b f7 75 69 4c 2b d1 3d da -69 2c d0 bc 24 39 ef 22 ef b6 7f fc 5d 46 95 21 -b2 - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# PKCS#1 v1.5 Encryption Example 9.1 -# ---------------------------------- - -# Message: -96 ad 3b a4 d2 9b dd 35 25 bb c5 d0 2e 88 c0 13 -3f fd ea 40 94 74 db 34 df 73 3c a5 9c 3a 23 2f -6a 64 c2 14 3c a1 31 a7 f1 8d 00 5b b3 aa 6c a1 -ea be aa 13 6b ec 37 db 11 1d 4d 8f 61 - -# Seed: -10 e9 f5 09 3c ec 87 2e db 16 16 2b 6b bd 52 12 -f6 10 1a 71 d5 1d c1 42 0c ad d1 d5 50 fa f9 af -40 f5 73 d3 e3 ab 68 91 d8 a8 82 ef 06 56 bc 30 -06 2a 05 b1 cc 27 7a 11 c9 ba 2e fd 51 03 c5 6e -23 - -# Encryption: -04 de c0 1b bf 8e 0c 22 96 d9 f5 bc 2d 2b a8 95 -34 3e c3 0e c5 44 13 57 6d 80 84 b9 31 43 cf a2 -d2 03 3b f4 c2 c2 e0 3f 5b 02 59 ed f1 4a 8f 3e -11 69 85 77 65 2a 2a b9 f5 1a b0 18 7c c7 51 75 -c8 6d fc 9a 45 b1 e4 eb 8b 54 47 a9 4a b9 b5 17 -7a 04 04 ba 49 e5 7f 83 c9 3f 7f e2 de 24 18 45 -f5 81 f6 42 12 43 7e 0c 04 ff 34 ea 1d ee 6d d2 -8f 6f f3 36 72 35 44 13 74 f0 f2 ef 71 a9 cd ae -9e - -# PKCS#1 v1.5 Encryption Example 9.2 -# ---------------------------------- - -# Message: -7f 92 ab b6 e5 2e d5 d4 20 84 9e d6 cc ab 36 c3 -d0 84 92 55 43 1e 19 3d 67 bd 94 4b 6c 0f ce fb -77 29 cf 5a 31 - -# Seed: -ce a9 68 be 78 ab 5f aa c2 27 dc 3c 6f c9 ce d4 -9f 85 1e d5 8b 08 d5 ca 37 54 28 48 9a fb ef 3b -f5 ed 83 74 6d 95 9a 0a 56 e9 ac 66 ff 2e 7c 8b -8c 3a da 97 fa 15 dd 7f 99 13 41 74 70 70 cc ad -65 42 bd 7f 4b 33 f5 56 04 45 8b 91 03 ae 13 dc -89 b4 e6 2c cb f8 4f f7 3b - -# Encryption: -02 5a 1e 65 eb 37 f4 b3 28 cc 31 b0 17 24 f8 3c -26 ed 8d 18 a6 51 65 21 3b a0 ef f7 ae 76 7e e6 -0b 99 27 76 1a 06 94 b5 c3 bb 64 b7 e0 39 96 a3 -56 8d 6f d1 ac 6b 7a 8b 71 97 5b b0 71 6d 94 5c -02 d4 73 68 96 6f ff b1 d4 49 fc 6e d7 3e 2d 19 -83 1b 86 d1 87 67 51 29 36 69 e7 7d 6e 12 a0 f0 -c9 62 df cd 40 0f b8 3c e8 26 07 16 31 7a d5 fd -e2 18 49 aa 6f 68 e7 0c e0 b5 b3 11 42 89 8a d1 -a2 - -# PKCS#1 v1.5 Encryption Example 9.3 -# ---------------------------------- - -# Message: -f5 b5 35 b6 3d 53 5e 21 37 73 2c 30 13 37 c9 53 -ea 2e dd 58 a7 8c 20 25 83 2d ca 9d 6b cd ad 87 -c9 97 c9 06 83 6b 2b f9 5c 83 f0 3f 7a fa 29 01 -34 6d 67 4a a6 9a 1b 47 f6 b9 16 fd 4b - -# Seed: -c8 9e fd b2 34 e0 1a 2f 07 76 29 57 e8 c0 a4 f9 -1a ba e6 d4 f3 60 e8 9a 7c 48 6c 55 49 f3 d0 ad -75 77 7f 0c cd 97 a0 97 5e 98 44 d9 86 87 02 76 -c9 82 5f 5d 1e ef 3d 1b 48 7a bc d1 9b 51 2d 08 -be - -# Encryption: -03 9a 1c e8 c0 91 62 51 a0 1e 5f b6 61 5d 2e 11 -98 2f 4f ae 7d 46 df 21 da a2 98 f2 c7 46 11 b5 -58 16 cc 27 fa 37 27 9a af 59 02 ec b6 c8 39 fa -90 0c f3 af 86 ff 40 a4 47 dc 40 22 35 f9 06 67 -91 23 f3 cd 38 19 04 f3 3e ee 35 3a c9 0d 5f 7f -20 3a 6e a8 91 35 1a db 11 60 1b d9 d6 b0 a0 24 -33 3a 24 55 be 1c a6 2e d8 2c f3 7c f8 de 4e 23 -92 dd 54 e7 75 03 3c 56 99 0b ae 5c 43 91 b6 65 -3a - -# PKCS#1 v1.5 Encryption Example 9.4 -# ---------------------------------- - -# Message: -a7 cf 29 82 03 47 a5 2a b9 cc 42 04 bb 6a c1 bd -7f d9 0a 75 8a 15 6d fa 9c e7 19 27 e7 4e e2 15 -98 70 8c f6 9c fd 79 85 74 2f 50 27 ff a7 10 - -# Seed: -10 9f 0d 6c a0 e1 3f 50 4c 07 d8 4a 5b be 43 ed -6a 94 ac ba fa b0 48 89 36 05 d3 41 c5 d2 8d 85 -44 c3 fd 28 43 50 f2 c2 2d 1f 36 7d fb 9b 6a 67 -51 d0 6a ae b1 7c 3c 0a 10 11 ae 38 fb a4 e4 6d -4e 44 c4 82 87 9e ba 06 44 37 48 71 b5 c5 3b - -# Encryption: -04 48 c3 9c c4 57 d6 cc c3 0b 0d 76 ff 5a 13 2e -00 c7 5d 53 36 46 b8 44 0b 13 ce 73 0e 1b 7a d8 -3b b2 ba 4a 08 2b b5 a3 3c f4 14 66 e0 67 fc f1 -6c 6a 29 f1 87 9f 77 e9 b0 db f3 ec 08 05 75 be -ba c0 c5 67 6b ae e0 02 d5 73 d1 bc c8 a7 0f ed -2a b6 79 43 ef c9 bc 13 13 9e 5d 8d de 2c b3 0e -1b 93 4f 50 cf 6c 45 73 92 3f 73 98 de 66 70 cc -26 34 1f 3e 35 a4 19 36 1e 59 f6 08 98 f2 69 2b -94 - -# PKCS#1 v1.5 Encryption Example 9.5 -# ---------------------------------- - -# Message: -b8 03 c7 ef 5f 9a 9b d5 84 01 - -# Seed: -8e 77 58 ed 4d 1b a4 dc e0 88 92 6c 10 b2 f3 d4 -c1 e2 67 1a e7 2e 65 9f 72 1f f7 be 6f c0 35 e3 -85 d5 12 d0 7a 38 dc ca 1e b8 31 fe f9 06 10 04 -44 ee 99 5c b0 7b c2 6a 5d c9 2b 27 2a 74 a9 2d -21 49 73 25 22 d5 39 43 4f a4 d0 3b 07 cf 96 99 -95 8c 19 89 1d 1d 59 06 aa 36 d0 a8 d0 6c 6f c8 -7a 45 51 bf 18 58 bd fe d5 f8 86 cc 8d 31 ee 4c -16 4e 98 1d - -# Encryption: -04 b6 2d 4d 4b 9c 1c 3e 05 13 09 79 5c 69 24 8a -ed 38 9d e2 4a 6c 79 53 8a 2d 51 d5 d0 37 19 a8 -a5 28 75 0d 5d 25 4a 1b 91 40 96 db 96 d8 3d 2d -9a aa 2a 16 5b b1 34 6e 44 c3 57 27 56 c3 8d 52 -f8 d3 07 c0 4e 1e fe e5 84 78 22 31 7a b4 69 34 -5b 86 c7 b8 5b 54 15 41 c9 92 ab ea 98 d1 08 a7 -df c7 09 1c 30 c6 68 5a f0 e3 3d 04 66 ac e4 cc -cc b3 4e 5b 26 6d 3d 6b 94 7b c7 c0 ae 34 d5 e2 -64 - -# PKCS#1 v1.5 Encryption Example 9.6 -# ---------------------------------- - -# Message: -61 7e a9 e4 a5 6c 4e c1 d3 d7 fd 7f 32 81 ae 7f -a9 32 b2 a0 a6 cf 55 eb 60 48 14 56 81 b3 58 8e -df 70 12 69 f8 9f e6 4a a1 4a d8 df 0d 46 79 61 -31 - -# Seed: -64 d7 eb d0 48 50 eb 6f 7a e1 af 48 12 0a 80 13 -0f 32 ed b5 03 69 64 0b 22 2b 8d 63 ef f6 57 12 -70 dc ab 31 76 d0 24 72 28 dc d1 c3 f3 cf d5 13 -31 b7 56 a8 65 2a 14 dd aa b9 93 96 b9 19 9a 73 -87 50 d6 9e fc d3 77 f1 84 ae 19 b5 a9 - -# Encryption: -02 df e7 29 58 59 58 81 d8 07 56 6d 3e 36 07 c0 -22 e4 61 fe 1d be d3 cc 6d 63 de dc b7 19 0f 06 -c7 d2 4b 4f 03 26 4c af bb 74 82 ec 28 b9 ba 48 -9d 03 11 5a f5 8f de 47 5e da 58 bf 01 55 cd f1 -af 16 df 20 6b cd 12 57 04 c3 e3 15 ad 3d 95 44 -b9 e2 c2 fe a8 10 ce 48 45 56 d2 9e 07 ad bf 0f -f4 61 cc bc f6 62 bd 74 95 9a 43 7d 4c 80 11 ce -ad a5 50 2a f7 67 6d 9a 15 21 e3 18 9d af de 00 -dd - -# PKCS#1 v1.5 Encryption Example 9.7 -# ---------------------------------- - -# Message: -c9 1f 2c 98 c7 5b 2f d4 cd 8d 5c 7f f2 e7 69 b1 -2f 28 f3 13 fb ac b5 1b 5e 50 14 df ce 9d 63 5e -7c 6b 2d 88 af 5e ac 30 d1 62 b8 dd c2 2e d8 bc -7b ee 50 6b fb f3 1e 51 ba 48 f4 26 - -# Seed: -6c 44 59 61 f8 6f a2 98 d7 64 7c 22 24 d9 5b c1 -27 da fc bd 5b 90 21 ec 7e 9e bd e9 6f 5d 7a 76 -f4 ee d0 ac 92 2a 6e 93 eb 3b 4c 3c 43 f8 a5 7e -18 29 4e 1a 51 73 b0 f7 e2 dd 2c 4e 57 7a 4b ec -e7 14 - -# Encryption: -03 a8 85 aa f7 b7 d9 4f da e3 4b 41 c3 74 17 66 -a4 09 c1 ee 02 32 b1 c5 3e 5f 6c 5a a5 4a c1 ef -0e 5b f9 9b 9f 7d f3 e9 b0 0c ed 94 76 ee 1a db -8f c5 71 68 91 f5 4d 45 ce da 70 b9 db 3b 8f ad -25 e7 77 95 af 14 81 ec 49 21 84 c4 9e 9d f8 23 -ee 64 66 41 0f 65 01 3c e3 c5 79 16 63 5d a8 30 -67 7f 93 2b da ba b5 c0 a2 08 d7 f4 36 7a 7e ab -a7 5b 04 5d 25 ac fd b4 15 fe e0 52 19 a5 84 23 -7a - -# PKCS#1 v1.5 Encryption Example 9.8 -# ---------------------------------- - -# Message: -7b 1c 31 51 a3 8d 32 ec 7b 82 c4 8c 00 0a a4 81 -de 41 8e 80 3b 67 3d 2e 9a 0f c3 d5 e9 74 ad cd -ce bd 3c 2a 8f 41 14 21 18 a5 5e 87 d0 4b ba d5 -b3 64 25 - -# Seed: -b0 f5 be 9b 3f 23 7c c5 af ca 5a 99 fc cb 77 b6 -ef d8 68 94 7f 98 55 4f be ce ac fa 88 4c 15 15 -39 d7 cf 42 3e 72 60 31 bf eb 8d d2 d4 f3 01 da -6b df ca d6 e5 81 65 82 ad dc e1 0d 85 d5 ee 1d -04 46 f3 73 b9 5e e1 60 bc f0 35 - -# Encryption: -06 6c 30 09 dc 6c ba c7 b8 bd 51 41 c5 5c f8 6a -3d 79 69 d5 85 45 2e 3a 66 54 0f 94 02 db a2 15 -e3 fb 3a 27 7f 0d 33 96 c8 c0 08 af 19 91 3e 3d -91 e4 0f 86 76 06 b5 bf 54 30 4c 04 71 da dd 64 -04 b6 7a 48 57 bf 52 24 6c 0d 60 18 23 dd 03 80 -c6 60 9d ac b9 2d b6 02 e5 57 64 ae 46 50 df 1a -db b4 b9 5f a5 af 4b cd 11 21 f1 3c 0a 73 23 ad -a8 c6 0d e3 d0 81 72 9d 19 7f 9c f8 e2 7c de 80 -b1 - -# PKCS#1 v1.5 Encryption Example 9.9 -# ---------------------------------- - -# Message: -b2 93 c6 f6 d0 5d 1f 38 b5 61 ea 3d 0d 0a d6 a2 -af 83 09 bb 9a de fa 77 8f d6 bb 9f ff 3e 01 0c -40 4c 53 39 97 cc fe d7 e1 91 7a 66 92 61 cf cc -a4 e3 70 29 99 1d 2d e9 b2 99 - -# Seed: -87 bd 2f 6b b4 82 45 59 1d 65 f0 23 a6 5b 63 bb -ba 84 19 79 2c 01 41 09 2b 1d b1 be 53 e8 c9 b4 -df 95 f0 ad 55 b9 6e 5e 57 61 5d 21 4b 49 77 87 -0a 27 2f 72 31 66 c6 20 45 76 5e 6b 4a 73 a7 c9 -eb e1 1d 24 - -# Encryption: -03 10 4e c6 c4 ab 9d ac ae 42 7f b1 06 99 bc ae -00 3d a5 6f 6d 07 50 95 87 14 5b 73 3e db 53 23 -9a 6f 42 22 86 83 9c ac 06 4a df ee e5 dc 89 78 -0c dd ad cc 80 72 19 d6 a9 7b 85 c1 3f 27 93 7d -70 32 7f 82 cc 36 a5 da 8e 45 63 77 fc a2 3a ee -51 4e 04 4a bf 1f 66 c3 e7 bd eb c2 cf f6 28 bd -52 4a 09 66 e2 63 8d 28 33 bf a3 43 eb c7 41 f7 -6b 5b 70 a1 13 6f 4a bc 60 28 64 a2 ad 43 a7 91 -bd - -# PKCS#1 v1.5 Encryption Example 9.10 -# ---------------------------------- - -# Message: -08 38 f4 a5 92 - -# Seed: -89 c5 89 8c 6c 3d c6 cb db 1a cb 28 05 df 53 98 -f0 b3 35 8a 18 e5 e6 3c 14 d2 0c 98 d2 1d 9f d8 -b2 ec c9 a0 e8 3d af 0c 06 92 68 bb e8 6f ee a5 -1c 93 79 1b 68 e5 d9 3b 74 5f ea f6 ad c4 2b 83 -c3 09 c9 cd 3d fe 1c 06 15 3a b8 80 85 56 18 98 -90 be 05 3a 92 54 88 d0 29 fe 50 40 e3 e7 d5 d5 -31 b3 2e b9 d2 f4 ee a2 21 11 b3 8a 65 53 f0 0e -dd 23 65 57 5b b9 49 f3 63 - -# Encryption: -01 4f 27 97 dd e8 d4 60 18 ff 23 d8 9b e2 e3 ae -04 6e ed 31 97 c8 79 c6 0e 26 f3 d2 40 08 66 eb -50 d7 b4 5f 6b 01 ae 9c a0 06 84 7e fb e9 ab cc -9b c3 e3 56 90 07 2b 68 db 9e cd 92 6d 94 5f 78 -7b 27 c3 75 3b f9 6b 2d 49 98 30 84 14 2c 42 a1 -26 1a ff 7b 17 ff 4b 20 de 9b ff a5 86 24 ab 37 -1d 4c e2 f9 64 69 a8 e1 03 8d 57 20 b8 1c f0 42 -dc 78 bf da 9a 3c cb 61 60 81 2d de a1 58 bd 2f -5c - -# PKCS#1 v1.5 Encryption Example 9.11 -# ---------------------------------- - -# Message: -12 38 0c 5e 80 bb 95 bb c8 85 73 57 fe fd 17 bf -9e 50 96 27 d2 8c df cd 12 bb 13 16 61 b3 42 df -a6 ca 67 2e 13 a8 85 1f ce 19 b1 a8 ca f0 e3 3c -d6 ef 53 8a 05 fa 54 26 9a 13 78 e7 - -# Seed: -88 03 31 eb e9 1a b6 ce 16 84 d9 af 5d 97 7e b4 -26 ca 71 56 e0 b6 f4 33 6c 6e 09 33 d6 fa 48 78 -2c 0a c9 69 f3 dd e6 1d 8f d7 4c 47 fe 9e 30 61 -71 0d 24 5b 1d 38 11 04 28 60 c1 f4 8d 2b 8f fd -80 9e - -# Encryption: -04 6c 54 5f f4 96 c2 1f 69 01 27 24 54 18 cc 5f -b1 8f 09 10 2e 7a ca 87 e2 6e 20 82 fc 16 f6 2f -e9 f4 2a 72 22 71 a7 9e ae e9 62 5a 7e 63 2c 19 -36 40 4c ec 62 11 d8 23 86 3b a0 2c 6b 0a 83 19 -58 b4 ed 8f c6 25 a2 e5 2a 05 4f 8f 18 1f 13 0f -8b c4 b1 df bd 44 b7 0a 35 b3 5e 9c 7f 4a c5 5e -e5 e2 cb 06 8b 75 86 39 b2 cd 64 3d bf a8 2e 2d -97 20 e4 89 f5 c8 21 d8 eb dc 13 68 a9 d3 46 8a -37 - -# PKCS#1 v1.5 Encryption Example 9.12 -# ---------------------------------- - -# Message: -ee e1 e4 5d 18 b1 47 c2 69 a6 0a 9c 64 20 18 ed -6c d1 15 7c d0 ce 2b 29 68 df a4 b4 97 fc 40 b2 -24 bd 86 1e 25 35 12 2b - -# Seed: -5c 51 3e 51 44 52 b1 4a ee 33 b6 17 60 b8 58 c5 -35 7c 7d 7f 20 e4 a3 7c 7e ef e4 19 ca e3 fd 16 -f9 d8 3e 5e cd e1 9e e6 32 85 dd ce 66 80 ee 94 -64 fe 83 75 6e 90 31 d6 37 9e 6a 6b 38 4c e2 77 -bc 64 2c ed 83 b2 9c f7 4b 72 ce ff f5 30 71 04 -e1 83 de 2c e6 a1 - -# Encryption: -03 a8 64 83 cb b7 2c 15 f5 a6 93 2b 01 2f 40 c4 -b1 73 33 3b 26 86 f4 98 4b a6 6e 24 c7 cf 44 41 -23 ba 2e a6 66 a1 75 5d 09 35 7b ee a4 37 9c e3 -cd b0 a7 7a 6e e3 b7 ca 60 db 68 24 17 f7 16 3d -7d 3a c7 35 28 11 bb 94 c5 b7 71 f3 d3 fd a7 73 -e5 ce bc 8b c6 60 11 55 b3 f4 e4 b4 ca 85 d9 ba -b8 ec 25 8c ec ff 44 33 c9 2e 8f 86 3d 96 fc c7 -94 29 49 8a 9e 17 90 33 0b c4 87 c0 10 d7 99 24 -5d - -# PKCS#1 v1.5 Encryption Example 9.13 -# ---------------------------------- - -# Message: -55 09 a5 c1 ac 54 89 dc b7 65 f3 7c eb be 7d 81 -cf 02 76 b1 f2 cf f9 5d 27 4b bd 04 - -# Seed: -76 e8 1a 51 37 1f b5 07 41 14 1d cb 31 d5 1d 1c -46 1f cc 02 6a ea 85 20 15 d4 68 74 0b 45 23 40 -5f 95 ba 87 9b 08 69 bf 03 1a 60 65 4f c4 e5 68 -c1 95 7c e4 e4 2a 35 0a 95 bf 8c b2 a8 b5 fd e6 -dc fd 25 05 c0 37 a2 9e de 68 9c 53 d8 32 19 e7 -3e 64 08 17 bf 8a fc 9a b0 04 ec ae c8 43 e4 fe -4e 38 - -# Encryption: -02 55 de 28 0b 71 af ef af a2 0f 24 1e 08 1b 7e -c6 c1 62 dd da 18 84 fa 9f 82 5c 4c e7 63 6e fb -c1 1b 84 a6 eb ea 35 89 25 71 ac 9e 6b 1a d8 47 -3f a5 73 c8 83 c9 f2 15 a1 95 80 c3 ea 30 2f 88 -f4 4f 48 e4 d9 5c 34 40 d4 93 1f 17 66 a1 fe 7e -79 0e 5d 38 e8 5d 1f 63 85 0a 3c 70 7a d8 97 7b -88 c3 8c b9 ed 98 34 5c d3 50 c3 dd 45 30 9f c8 -1c b4 62 76 e4 ad 64 7f a8 4c 14 12 5e fd 67 d8 -ba - -# PKCS#1 v1.5 Encryption Example 9.14 -# ---------------------------------- - -# Message: -02 53 81 a5 5c 8e 48 7d 7f 4f f7 c3 6c fb 37 50 -07 d1 9f 93 71 13 6e 2b 3d f4 42 5e ee ee 5d 79 -c3 52 61 fb b4 ea 68 bd 91 e8 ed ab a2 32 9e 29 -31 53 06 c7 d7 18 33 15 5b 88 - -# Seed: -aa 31 0f 62 da 90 da 4a 20 28 b3 81 39 9c b7 e0 -ed 3b b5 10 57 5c 9b d0 f6 38 21 5b af 78 08 e3 -24 5e af 38 b7 6e 26 52 29 0b 7c c6 20 90 7c da -0c b7 af 07 3c 12 2f f8 3d aa e1 98 6b 43 ec 1a -14 82 db a6 - -# Encryption: -04 9b fa c6 41 0b 77 80 39 7a 49 fb 88 93 b2 4d -90 3b 36 00 f3 3c 78 2c 14 75 b5 d2 4b 4f 4e 88 -fd 11 24 ef 06 45 f3 d3 91 ed 31 00 6d d1 b7 c2 -64 12 8d 0d b9 aa 0d 65 a0 9f fb e2 9a 94 cc a3 -58 da 64 bd 1b 72 ff 55 88 88 08 10 5b e0 91 ae -23 ea 3f 34 75 05 17 9e cc b2 41 0d 89 de cb 62 -33 0f 36 c7 44 26 2e b2 b0 78 b4 25 4b cd ce ce -21 1c f0 57 4a 24 68 e2 a1 e0 18 bc 31 f5 02 22 -35 - -# PKCS#1 v1.5 Encryption Example 9.15 -# ---------------------------------- - -# Message: -07 3c 43 67 ba fd 48 10 d7 70 44 60 c7 83 d3 50 -f7 cc d0 99 47 2f 79 f7 fd f2 3e f0 cf aa cc ab -95 71 df 53 fd e4 - -# Seed: -f9 5a 39 96 de f1 ca fc 1a 4a 0b 34 14 6b 73 de -6b 5a 92 cb 81 2e 20 b2 0c 12 2a 25 1e 6b 22 e0 -46 9c 98 db 12 8d 43 ce fc dd 80 c7 ff 36 99 80 -16 a8 92 a8 b6 34 b3 6b 9b 0c e8 7e a8 0b 5d d9 -fd 7a 08 29 14 e7 3b 83 a3 84 1d e5 1b 71 b1 a6 -b7 ef 7d e4 e4 b8 8e dc - -# Encryption: -02 de e4 8b 0f 99 53 ee 12 c7 18 b3 03 b0 c8 9d -61 50 eb be 83 ad 62 4e 11 7e 3f 27 04 a0 b1 7a -2e be e8 38 52 56 f0 e6 42 80 fb 06 c3 b1 46 c0 -99 af 23 a9 f2 47 93 39 37 81 a5 55 ac 4e a2 d8 -8d 78 5d 8c db 6e 7a 2f 89 52 d2 50 3c cf 90 1f -12 39 f6 f7 b1 ac d4 41 21 c3 65 fd ae 37 07 46 -de 45 26 e7 c6 56 0f 87 54 6e d5 77 cf 97 98 be -f4 7e 49 20 65 50 9c 49 21 2d 37 0d ea 05 22 d7 -94 - -# PKCS#1 v1.5 Encryption Example 9.16 -# ---------------------------------- - -# Message: -ba b2 0b 9a 6a 53 2e 6f 8a f0 78 b3 a1 85 e0 aa -86 e6 16 81 bd 1b d7 75 04 4a 2c 95 8d 61 ed c2 -51 60 7c d9 f3 11 48 f5 a9 11 - -# Seed: -37 6c f0 18 14 3b 0c e6 70 21 68 4c bb 36 e4 af -e2 ff 9d e1 8b c7 f0 2b ed 86 3b f1 bc 34 66 31 -9e 72 0f ee f1 9d 38 e2 6b ca 7e 99 d4 09 6a 9e -ed 8d e5 bf 20 3f c7 dd 9c 84 85 df a5 b6 90 75 -ef 0c c0 37 fc df b5 5a 0c 92 8c da c0 cb a0 49 -7e b6 0e 3f - -# Encryption: -04 8d d7 50 99 18 43 0e da bc 01 46 8d b7 e2 87 -a7 38 1e 42 8b 5f c9 3c e8 de fd 7f 49 d5 e9 34 -15 30 43 d1 37 ac a9 f7 b9 75 77 b7 0d c0 16 80 -f2 db a9 1e 93 2b 53 ac f2 a7 f3 34 8f 56 54 b2 -cf cf e7 5d 48 f0 fa 45 00 d1 ba 5d 29 24 7f f1 -42 d6 b9 80 e1 1b 9d ba 68 83 f7 3b b8 55 a2 4c -c4 eb 90 68 23 6d aa 0f 2f 93 45 8d 72 72 6c 2d -8e 31 25 9a cd 3a 7f de b6 fe b5 c6 d2 ed 17 8d -db - -# PKCS#1 v1.5 Encryption Example 9.17 -# ---------------------------------- - -# Message: -19 b1 f4 cd 3d bd f0 5b 3d 5f 16 80 85 6c 5a 74 -4f 51 62 b5 20 bf cd fc 98 87 dd 92 be 9d 8c b6 -25 c7 25 ad 75 f4 f2 ca a5 ef 51 fa ca 71 b5 e6 -6f 84 f2 fc 6f 67 8a ce 80 9d 76 b8 42 ea fe - -# Seed: -78 a7 18 82 85 3d 85 af 16 5c c0 b2 2f fd c8 87 -3d f4 9e 2d 6c c0 ad 0b 0a 99 5b 4a 25 9c 86 7d -c1 aa b6 42 8a 5b 8e 9f 3b e8 7d 87 f9 e6 ea c5 -50 f4 df 11 36 8e 7f 6c fd 7d 0e 47 6a 45 9b - -# Encryption: -06 2a 78 db 5c a6 9a 30 48 10 78 94 93 db 8c d6 -44 fb 29 4e 17 fd 36 45 32 b8 ec 17 ce 3f da 70 -47 64 65 62 4a 60 a6 ec db d5 d9 72 40 c8 d8 9d -ea c1 1d c3 0d 7b 85 14 41 40 8e dd 64 28 81 a0 -11 2b 62 f8 cf de 34 d9 c1 13 85 c2 91 89 bf 38 -93 a6 ab ac e0 4a 10 aa 68 0c d3 a6 ee 00 2c 30 -70 35 d2 39 9a 2a 60 b5 a7 f1 ca af 05 84 d1 0f -d0 6d 6e fd 56 11 4c 05 e4 3d 42 d8 34 f0 3e 3f -e9 - -# PKCS#1 v1.5 Encryption Example 9.18 -# ---------------------------------- - -# Message: -8c b7 3b c4 78 50 c1 7f eb d3 4f f4 b7 32 3b 50 -53 03 0b 96 22 14 03 cd ef 45 de c6 5b a6 0e a3 - -# Seed: -ed 64 78 61 48 81 eb e3 fd d6 d9 ee 05 f2 76 5f -c8 a3 ea a5 80 31 23 5a f9 6f 86 e7 f2 c8 13 ec -04 80 66 1d 1c 2b 4d ef 74 2b 2e 41 41 9d f2 88 -3e d5 86 79 cb 9a da e4 de c4 cf 77 f8 bc 29 41 -d0 33 f8 87 7a 90 6d dc 88 d6 dd 3c 53 96 ad aa -c0 3e b2 a7 09 4c 0f df 0a 44 a6 b9 23 ab - -# Encryption: -03 97 8d 4e ff c6 d6 2f 23 2b f4 6b 42 90 c5 01 -1d 73 28 0a b0 e8 0a b9 d6 05 0a 85 2a 66 79 e0 -17 e1 70 d9 e7 15 6c 8d cb d4 6c de da 70 ff 9a -55 16 8b 9f dc 03 65 b8 aa bb 90 9a ad 40 d5 95 -c9 0b 9f 00 c1 e0 0a d6 f0 1d 54 43 07 b2 54 ea -f4 25 5d e6 2b fd 8a 5f 7e 79 dc fc 74 45 ce c6 -3d f0 c2 bd 0a d9 6c b7 02 42 b3 0b 32 42 07 88 -16 b5 8b 0a 9f fa 16 f1 d8 63 15 f8 a1 cb 2f 8f -6b - -# PKCS#1 v1.5 Encryption Example 9.19 -# ---------------------------------- - -# Message: -8e a5 56 43 df e7 cb e0 75 c1 7b 93 c6 ba 6b 5a -74 ea 8d 1a ba b9 c7 28 ae 5b 00 86 6c 62 88 0d -3c 00 05 20 37 cf 80 2d 2c f2 a8 e1 be a5 8c 7b -a6 04 77 4d 4f 80 bc 04 - -# Seed: -af 9d 9d 31 2e 22 57 0f bc 4b c8 5a 44 5e d8 d8 -99 66 0e d2 4c f0 30 15 33 94 6e 5c b9 47 1a 27 -c5 10 cd 17 55 91 d2 3d 36 3d c4 e3 e6 9c 7b b4 -65 51 7a 4c d1 d1 ce 41 3e 10 16 ae af d5 5d 2c -b9 de bc fe 4b 1d - -# Encryption: -05 87 11 19 16 bb 42 f8 47 57 69 1e fe de 7e b7 -79 6a 5c f8 87 c3 7c a9 f6 1b 45 1f b1 ba de 38 -9c fc 5f dc 21 98 41 bb 41 da 82 74 52 72 5f c8 -2b 4d 1a de 56 9c ee c8 05 79 ed b1 b4 b1 5b 46 -ad 7d 45 b2 45 98 80 23 ea 0d fc b3 74 4a 69 2e -b9 ac a8 5f 21 10 10 af b1 e9 89 4f 85 4a 5e 34 -fe 89 aa 05 19 68 a3 b2 36 2c 15 0c 6d 97 0e dd -82 b9 e2 d1 3b 38 c3 c2 95 6d 91 50 08 86 41 d5 -30 - -# PKCS#1 v1.5 Encryption Example 9.20 -# ---------------------------------- - -# Message: -52 5c ff a3 - -# Seed: -0c 99 30 4c c6 26 3d 1e e2 44 6e 24 8c 27 11 2c -8f 96 da 82 51 5f 06 f8 12 39 8a 88 81 1f 39 fb -05 62 05 c4 4d 6b d4 85 5a 62 c2 1c 60 1b 88 f8 -02 34 e2 32 41 f7 16 32 2d 80 54 a8 4a 1f c3 c8 -46 de fb 61 76 7c c4 d8 16 fa 7b 37 47 f8 72 9b -f3 37 2a c2 c2 29 d0 52 f4 5b c4 2f c3 80 50 dc -a3 f2 63 2e 60 07 b6 08 53 b7 e0 cc b3 da a4 94 -e5 53 35 fd 04 f1 3d 5f ad a7 - -# Encryption: -06 3e 45 08 e5 31 2b 5c 38 69 4d e8 2a 71 ed a3 -12 e9 ae d0 5b c1 43 d3 38 f7 f2 28 12 d9 3c 28 -65 12 6a 9b 3a 42 c3 ca 19 ed b3 46 01 c0 b2 8a -75 66 3b 18 f2 39 f5 ad ca a4 e9 fa 9f 61 18 04 -72 6f a1 29 62 bb a3 23 0c b8 86 d6 67 82 a4 7e -a9 50 2a 83 71 e7 57 3b b6 b0 26 6c 33 64 6b df -53 f8 de 36 8e f2 05 b1 1a 85 ba f2 1d af 3c e7 -a2 59 9f 00 8b 99 45 ee b1 86 ec 19 2c 54 0a c2 -3c - -# ============================================= - -# Example 10: A 1028-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -0b 52 cb 6b 5c 3b 9e c5 aa ad 89 4e 51 77 f7 f4 -5b 8d 33 dc bb e9 6a 5b 26 f3 00 72 bf 15 73 a6 -c4 1f b0 a9 7a e1 e5 2e d8 c2 5c 62 b9 8b f5 9d -e7 b6 8a b9 8c 2d 8b 93 c4 94 27 23 cc 4b ae d2 -b3 93 c0 7b 2b 11 90 9c 73 2d f7 c1 dc bb 43 3a -83 9d 46 f4 28 e9 dd c8 d3 5f d3 3e ed 29 81 80 -f7 5f 2d 5c 9f e8 53 4f 03 47 f8 68 5c 28 c4 37 -ea 5b 81 1a 28 6e 81 0c 69 7a 88 cd 7e 45 36 4c -1f - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -0b 52 cb 6b 5c 3b 9e c5 aa ad 89 4e 51 77 f7 f4 -5b 8d 33 dc bb e9 6a 5b 26 f3 00 72 bf 15 73 a6 -c4 1f b0 a9 7a e1 e5 2e d8 c2 5c 62 b9 8b f5 9d -e7 b6 8a b9 8c 2d 8b 93 c4 94 27 23 cc 4b ae d2 -b3 93 c0 7b 2b 11 90 9c 73 2d f7 c1 dc bb 43 3a -83 9d 46 f4 28 e9 dd c8 d3 5f d3 3e ed 29 81 80 -f7 5f 2d 5c 9f e8 53 4f 03 47 f8 68 5c 28 c4 37 -ea 5b 81 1a 28 6e 81 0c 69 7a 88 cd 7e 45 36 4c -1f - -# Public exponent: -01 00 01 - -# Exponent: -45 cc 14 17 b2 6f ce 3e 9f d3 10 89 b1 a3 cc c4 -6f 8f f2 1e ac 2e 1d 67 c0 ae 20 15 2d c5 0d 1c -e7 ce 6f 26 40 4e 2e 64 95 b9 77 bf 13 f9 a4 05 -b2 45 80 d6 39 3a 85 22 54 96 e4 ab c4 9e be ff -de 70 cf 26 76 68 66 f2 76 e1 5b 49 2a f8 03 3f -1b ac 7f 66 b7 1a 3b af 57 1f fc cc 03 8a 48 86 -93 94 cc a3 fa 00 49 85 b4 34 a5 15 17 87 7e ae -97 a3 84 94 7f 01 a7 2c f4 b2 01 93 dd 27 64 81 - -# Prime 1: -03 5f ed ee 7e 64 fd 68 65 79 31 a9 df 9d 55 62 -28 df c6 33 a7 50 02 76 8f 65 d7 15 f0 44 f2 3b -3f e7 88 bb 17 86 4d 61 df 57 9e 68 df 80 de a3 -a6 31 90 62 9d ac 7d e6 29 ef 9a b8 f4 df 0b 27 -7f - -# Prime 2: -03 5a f8 e6 fe 2f 84 61 fc 89 a6 45 00 f8 19 9c -cb d3 f4 69 07 85 96 15 56 03 d3 f0 88 08 33 c3 -77 db 07 8e 43 7e 35 60 00 4a d1 d6 f8 d3 47 88 -3f 3e b0 1d 18 9d 52 ef f6 e2 60 e5 2f ba a6 2b -61 - -# Prime exponent 1: -b2 43 b3 49 8b 67 2a aa 7d 96 7c d9 f2 6a 12 e6 -22 3e 90 9b fe 8b 73 91 65 4f 3b 6c a7 9d 60 12 -70 a1 2b 11 d0 99 99 0f 6f d1 f5 0b e1 58 8f 66 -14 a6 19 63 35 9b 88 e9 b0 52 39 c5 f5 5c 24 db - -# Prime exponent 2: -01 35 25 ad e5 3f ee d2 61 54 9d 3d ea 8a 60 95 -79 1a 90 b5 98 5a 70 d8 be fb 63 b5 07 10 84 a8 -ce 23 4b 85 dd 2e b8 41 13 f9 d9 aa 18 25 da 71 -e3 e9 48 f3 3f df a7 70 ec 17 2f ae 6c ce 2d 6e -21 - -# Coefficient: -1c 52 92 93 3c 58 d0 22 59 2f c0 03 38 bf 22 ed -fc ba 33 16 16 b7 9f 8d 2e fd 1f a2 4c 64 f5 dc -fa d9 aa 52 ba a4 6e 86 59 dd a9 ea b3 a7 86 3e -61 37 4a c0 da e0 18 5f b5 8e cb 0b 74 65 ee 07 - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# PKCS#1 v1.5 Encryption Example 10.1 -# ---------------------------------- - -# Message: -59 22 d0 9f df 65 22 80 2f bc f7 a2 8e c3 d9 fa -df 60 72 03 a3 1b d0 da 96 3a a0 31 5f 35 e1 a0 -a3 74 d4 87 dd 08 62 a6 f6 be c9 32 b7 db - -# Seed: -61 39 5a 0f a1 2e 1e c2 ff ea 2a 88 90 65 3e 8f -37 8d c4 6c e2 b8 aa 4a 0a 1c 56 7b 30 e5 9c 3a -33 a6 68 98 97 14 fc 3d 45 ac 88 63 27 e3 6c 34 -5d a8 58 f9 03 d1 e6 06 74 03 14 cb 80 8d 86 ab -c3 1b 49 b3 5b 3f 20 e3 79 29 dc c8 59 d5 91 41 - -# Encryption: -04 39 e7 dd 09 af 61 c0 ee 25 f3 e5 c2 95 1d a4 -9d 3f d7 08 b2 97 a3 05 5f f9 98 3a 9e a5 38 b8 -3d 59 da bd b8 5d af 82 ae 7b b1 97 8e 7d a2 a6 -dc 05 87 ef 9c 73 2e e6 88 37 3f bc bf a2 da cf -f9 b3 c1 2f 70 4e e1 4f 83 24 bd 4c c6 bf 9d cd -3f 05 33 c3 b1 1a 0d 38 db cc 7b b7 ef 9a 72 29 -6b 6c 13 dc 42 d7 ec 17 f8 51 a5 16 12 c7 49 4c -63 68 a7 fb ec 93 d2 2e 8f 9b 72 bd c0 44 9f b4 -30 - -# PKCS#1 v1.5 Encryption Example 10.2 -# ---------------------------------- - -# Message: -5f ba d4 3a 91 0a 29 0e 50 55 d5 14 e7 1c 8e ab -f1 f9 33 20 eb d0 da 8f 90 d1 46 a8 f3 dd 5c 1a -2c 72 0b 93 21 1e 48 29 34 14 9f 1d 21 b9 78 f4 -8a 0b b8 e4 cc a3 f5 d4 5d 3f 3e 3b a8 e1 - -# Seed: -21 04 52 61 80 4b f7 54 bc b8 bf 34 98 b1 ad 10 -af f3 3d a1 f2 25 ed a5 64 65 90 45 8b 20 70 9f -c8 d0 b4 98 90 7a 83 64 ce 1c 43 6b 6b 1e 73 18 -1c 86 c6 77 af 45 c1 7f 9e 4a f3 75 9c ad 24 87 - -# Encryption: -02 9f 64 ac 33 01 34 00 7f 77 f7 2c 37 f4 17 7c -24 d6 60 be 4e ba c1 86 8a d1 1f 9e 30 51 b8 cd -77 c4 69 11 99 ac 49 19 db 2e d3 63 74 0d 2d de -32 91 f1 0d 92 68 e7 c7 de 37 ea 42 1e bb 1f ad -65 29 f2 92 19 2a 96 80 ba 96 3e da 93 74 03 7a -b9 52 9a 48 6f 35 cb d2 9e 09 ea 98 a5 04 5d 9e -16 bb 87 70 15 5d 70 af d2 17 a1 46 86 27 49 ec -1a d1 59 cf 6e 6a 63 df 14 2b 82 46 d8 44 a7 37 -2d - -# PKCS#1 v1.5 Encryption Example 10.3 -# ---------------------------------- - -# Message: -22 bb c6 16 ec 6e f3 57 31 56 b4 17 61 ac 3b db -57 bd 9b 70 36 ed c9 a6 97 88 75 e2 a6 14 cd e3 -ef ed af d3 88 9a 5d bd cc 5f ad 9e 9b ec f8 a8 -bb 80 33 ff 91 df ed 60 4b f8 c6 e9 bb c7 - -# Seed: -3b 47 d2 ca 95 54 b3 4f 94 29 57 8d 4f de c5 d9 -6e ca 89 b6 81 72 d1 db 13 56 b3 da 7a 69 f1 58 -4d 4c 84 6b 18 43 2f 02 f2 59 ca dc 24 e1 54 ff -15 f8 06 f2 53 43 50 0e 13 b5 be 43 c7 b5 ae 7e - -# Encryption: -00 c4 e6 c1 0c 25 5e 4b eb 2b 31 c1 65 68 46 b9 -7c a2 3a 3b a3 2a b1 9c 64 85 20 11 3d 70 34 df -a4 6b 0c d2 3d 73 99 a9 3c b0 2f 1e ba 94 83 18 -e3 79 1c 30 6a 2e b9 c0 c5 6d 8f 7e 83 25 0f 83 -ad 49 2f ad f7 83 17 69 f0 2e 18 24 34 74 45 d0 -41 9b 98 b8 e7 95 45 65 32 30 0b 92 d6 e4 55 b5 -a4 eb a8 53 d6 f7 45 92 90 ab 02 31 99 48 53 a8 -c0 7e 54 f5 9c 62 45 37 08 02 89 f9 31 43 eb c6 -61 - -# PKCS#1 v1.5 Encryption Example 10.4 -# ---------------------------------- - -# Message: -31 6c c4 45 0a 53 70 3c 05 8c 90 1f 50 7d 7a d0 -cb 63 96 c5 51 d4 f0 61 82 ab d3 a4 3a ac ba bb -31 59 c0 26 b3 e7 db c1 60 f4 19 53 31 7e 0f 20 -80 8c - -# Seed: -c1 ec b1 16 4b 3e 66 23 f0 d9 b9 c5 eb f9 9e 78 -8b 7b d9 4e b7 43 74 f6 1e d3 14 30 4c af 46 f8 -4a 3f ea 1b a0 e4 7f c8 be 41 97 d1 d2 cd 41 41 -cb 9a 61 5d 89 c4 bd 91 10 ca 6a c9 a5 60 f0 76 -eb e6 9b 74 a1 0f e9 cc db 76 da bd - -# Encryption: -06 16 b8 bc 77 2c 55 64 d4 51 b1 28 d9 b1 36 4c -9e 33 b6 e5 58 ec 67 f2 10 5c 98 00 11 7d 0b 73 -cc ab 9d b5 1d 96 7a 9d 66 32 2c bc 5a 01 74 6e -47 31 dd 7d 04 e6 36 e6 4d 35 f2 c8 6c a3 9d 26 -14 92 17 6b 8d ab db 13 4b e9 4b e5 1b 6c 02 3a -0d 55 fc c1 f0 4c 94 c8 6d 47 7d b4 03 b0 4f b6 -c0 28 50 57 24 79 38 40 cb f4 68 aa aa 91 bc 54 -e0 d6 47 7c e6 48 ce dd 12 76 f2 ad 2d 4d 42 3b -6c - -# PKCS#1 v1.5 Encryption Example 10.5 -# ---------------------------------- - -# Message: -d5 4e a3 7c bf bd b8 18 3b 3b 54 7f 6d f2 d5 d6 -3c 41 5b 1c 44 ed 63 93 c6 97 b4 d9 3a 97 fa 0d -2f 4d 30 0a 68 e9 8f 7f d0 46 07 01 d1 57 9d 96 -83 61 2b - -# Seed: -d1 ce b0 c0 72 d6 88 8f a9 1a 75 7c bf 50 d6 69 -76 bb b7 2e 61 94 62 61 4d 5d ec 0f c0 bb ca bb -07 07 89 c2 b0 89 50 91 b8 fa 9c 7e 75 ab 20 b8 -97 58 f9 7f d0 47 bc 44 a5 68 a2 61 2d 0d 50 1d -15 d4 fb 82 e7 75 28 79 69 49 f3 - -# Encryption: -03 c1 38 c7 91 99 b0 b1 70 0b ab 2e 63 e1 d2 a0 -03 1e f6 02 f7 dd f1 ed 3a 16 1a 5e 70 f1 64 51 -da a1 01 f7 4c dd 65 47 a7 c6 52 c7 32 9b b1 73 -7f b1 4c 1c c0 c0 c3 e7 61 2a e2 0e e0 21 ab 21 -d7 0b f9 51 7b 4d 33 a9 d8 09 61 2e 7f 42 68 85 -b7 9b 31 2e 26 6e 42 b2 02 b5 71 c6 6f 9a 10 7b -8f d7 c5 6c 05 0a 8e 1e b1 89 56 db 06 a0 20 9d -d1 6e f2 d9 05 24 db 87 91 7f 34 00 6b e6 b1 5a -13 - -# PKCS#1 v1.5 Encryption Example 10.6 -# ---------------------------------- - -# Message: -f6 4b 25 11 cb e3 cc 65 81 - -# Seed: -da ca 19 63 cb 3d e5 24 57 79 e9 64 77 ff da 27 -7f 4b 92 3f a9 a8 d9 38 5d 52 31 69 23 3f 58 79 -a3 c9 fc 7a 38 e1 b2 08 c3 2d e4 0b be 1d a0 77 -47 1e 61 c8 b9 b7 09 3c 41 b0 a6 5c 99 64 32 d6 -45 52 11 84 a6 6a fc b9 6f 07 a8 f8 ee bb 6e f8 -17 e0 27 ee 2f 37 95 45 23 9e f6 f9 c1 d0 d8 60 -e8 21 44 ec 71 59 7f 24 6a 83 cc f6 60 ea 4c 70 -ee 1d f0 14 ef - -# Encryption: -05 08 ed 84 5c 96 23 8e 3a 07 e8 ec 02 7f 7b 09 -8a 83 f0 3e ac 1f ec 42 6f 4d 60 05 b6 0d 07 35 -db 05 37 08 2f 23 b7 50 f6 db 54 88 21 41 81 e1 -14 cf 1f 72 07 41 9c a2 93 75 0a a7 66 fa 7a 5b -9b e0 0e 37 29 2c 23 23 1c 6a b3 be 2d ed ee d3 -21 b0 f9 cd 83 2c 5e db 41 67 7c 1a b9 83 e7 e3 -eb c8 b5 19 93 82 1d 76 df 2a c2 29 8d 8b 80 ab -17 c3 8b 38 53 f1 8f e3 09 cc 7b f7 c4 a2 c2 7d -63 - -# PKCS#1 v1.5 Encryption Example 10.7 -# ---------------------------------- - -# Message: -85 26 49 01 52 06 e2 a4 09 78 76 f8 ab b9 b8 46 - -# Seed: -03 4f e3 4e 20 e6 06 a8 dc 7c bc d0 d6 ab 3e 07 -97 c5 dc 4e d7 86 8e dc 79 59 89 3e 58 13 7d 26 -32 b2 c5 a2 9a 81 35 c2 4a f6 99 b5 9d 68 10 3a -1f 42 33 93 e3 88 6e 3f a8 54 e3 97 21 50 19 41 -3a f0 b0 d4 fb 1b d6 9b d4 93 4d 4d 1e 2e 9f 3b -9e 7c 46 d4 98 4f e9 e7 a3 7a b2 f1 c7 8b 0b 8d -9c d8 fa bb 3d 18 d4 c5 06 e2 fd 3f 85 ae - -# Encryption: -01 6f bf 2a 7d 36 80 71 cc 7b e5 94 49 35 4b 9d -e0 5a 85 e1 bb 97 b2 51 4b 52 b8 d1 f3 e2 69 94 -e1 2c fe da 59 e0 58 a2 f3 c8 79 23 50 c0 68 41 -7f 99 44 1b fe 74 17 e0 b5 31 6e 16 3b a8 d1 f9 -e3 2c 59 a4 44 98 82 f4 7a d9 b2 4f 68 76 d4 78 -d3 f5 b7 d2 75 35 73 e3 f6 97 bf 64 c7 b3 ac 22 -28 ce 69 e7 5e 8e 14 ab 93 f2 19 78 05 9a 14 3b -87 7c 6d d4 21 b6 e2 0b 07 35 a5 36 05 55 2a b0 -a8 - -# PKCS#1 v1.5 Encryption Example 10.8 -# ---------------------------------- - -# Message: -f4 fb 50 be ab ec ba 77 e7 1d d8 d1 6c 97 5a 86 -f6 19 ea 7d bf 41 96 9a 24 ba e2 b8 42 c2 69 e0 -b4 d6 a2 9e 82 9d be 2e 49 79 9c 9e d9 71 a3 03 -35 e6 ed 9b f3 9d 12 4b e0 f8 - -# Seed: -9d bd 92 da ee b8 2b de 81 6c 59 3f 70 6b 15 92 -56 85 22 bc a0 79 7f 9e 81 1d d9 dc 0e 89 6e 98 -4a 4a 9a ce 77 de f5 a9 25 0d b7 95 81 af 33 fb -6d e2 42 7d 1a f6 a5 f6 92 9f a8 b6 7b ad 02 3f -04 b3 ff d2 - -# Encryption: -02 92 ed fb ac 38 e2 22 45 45 af 82 86 23 27 63 -bc b1 8b ae 13 70 97 99 e3 50 77 58 d0 14 1a c2 -97 6f 30 b8 54 67 d7 83 ab f6 fc 71 df 61 9e 1a -59 e6 23 4f 27 b6 32 fe aa bf d9 85 33 77 35 4d -93 3e f4 ec 59 94 c0 d5 0d 95 2e 0e ce 0b e1 be -4d 38 f1 1f 66 e7 c3 da 88 c8 3b 4b ed cc 06 2e -09 f9 af 95 ea ca c0 09 9c 52 5f 24 1e a7 d5 65 -e1 b7 68 cb 97 08 f3 bc d5 91 77 b6 76 6a 37 34 -88 - -# PKCS#1 v1.5 Encryption Example 10.9 -# ---------------------------------- - -# Message: -76 91 3e 84 8f b7 b9 fa ca 91 ba f4 f4 42 01 06 -a9 4d 6c e2 5d 14 97 fc 4e 7f 85 96 54 79 5d 7f -24 39 9f 3a 12 08 af 02 8e 61 67 8a 6d 19 a1 86 -40 b4 d5 0f 75 55 86 00 - -# Seed: -9c ee aa 26 09 ba 90 eb 61 e4 f7 49 c4 cd a0 1a -ea 23 68 81 76 2d fc 15 0d 97 c1 1e b6 44 0c b0 -57 e5 3c 3f d9 b3 9e 56 0a 46 e9 d3 fa 3a f3 fe -e5 ee 2d 02 fa 42 49 af 99 98 f5 3e d0 4d b0 10 -e9 6d 8a 01 ff 6b - -# Encryption: -01 96 30 89 c3 43 ed 88 b5 6d 6a cf ef bc 65 5a -37 cc fd 96 20 3f 21 87 64 69 5a d3 10 c0 b2 66 -65 ee 74 5e b0 10 fc 83 be 8c 20 64 5c 43 47 dc -d9 44 65 5d 9f e6 cd 98 77 dc 70 e5 c1 88 cf c9 -a6 6e 71 da 74 5c d3 e1 a7 b7 f5 a1 b2 5b 4f c1 -47 0a df bf 7d 8e 45 fb 10 7c 5a eb 50 ea 8b 56 -e0 4c a5 5b 9b 65 2a d8 34 d9 c9 65 77 b6 42 ef -33 f1 64 d4 93 1f b8 9e 0c 8c 6b f9 17 08 fd a6 -db - -# PKCS#1 v1.5 Encryption Example 10.10 -# ---------------------------------- - -# Message: -c3 39 f8 57 e4 d0 23 1f a3 7c 06 f0 95 6b 4d 53 -a6 c5 8e 06 10 d8 da 43 17 dc 84 11 d3 a0 f8 98 -49 b9 4e 8d 7c cd b0 c7 d5 33 0c 25 - -# Seed: -24 90 81 6a c9 69 76 ca 72 5e b4 98 e2 ff 04 0a -fe 3d 64 17 d3 2e 4f fb d9 fc 9e 3f a6 8c e8 49 -c8 81 be 37 9f 17 50 4b 97 e1 e0 d2 2d 32 ff 8d -fe 76 bb 45 49 f7 13 b5 b8 d8 70 ed 36 59 dd d3 -98 4b 6f b3 9f 6e bd dc 11 77 ad 69 8d 90 44 39 -68 ab - -# Encryption: -00 b5 fb 7b 1e 9d 71 df 8b 16 c6 3a 1a 49 6e 6f -7b f7 72 86 4c b4 11 55 2b 50 e0 b7 f1 5e 45 97 -16 f5 64 62 43 68 76 33 a9 10 6c 34 6c 8c 6b 7c -fa c7 50 b4 56 6b 1b 88 aa c0 ac b9 16 c0 7a 78 -0b e0 6d f7 97 5c cd 8b 72 60 78 68 7a 8e a5 d3 -90 3e 04 ab 1d 23 dc 9b 1e d3 60 00 c9 bb c3 dc -81 61 e9 48 3a 18 ab b8 64 1e bb 1f dd 02 66 c0 -84 bf 0b d0 9c c9 4e eb b9 28 3c 5a 5f 74 e3 60 -13 - -# PKCS#1 v1.5 Encryption Example 10.11 -# ---------------------------------- - -# Message: -47 58 65 a5 7b db 91 ad df 77 7c c9 d0 a1 7a 71 -a9 f9 71 0a 93 1b d0 c3 14 9b 23 91 a3 53 - -# Seed: -56 2f 79 70 94 6a c4 cf 05 ed fb 26 34 16 7e 14 -d6 65 8d 24 cd ae f7 5b 40 7c 90 04 81 8e fa 75 -d1 64 5e 81 52 d1 fc 80 d6 99 df e9 9a 27 a7 df -99 7a 8a 66 47 5a af ce 41 95 98 e2 a1 91 99 fc -20 53 e3 ac dd 07 fe c8 ba 61 f2 b0 3e fc 7d ee -d8 15 cd a8 95 2e 21 e3 c0 b9 a9 35 2a b3 6f 5e - -# Encryption: -03 e2 68 d7 d1 80 d0 3c 7c bc 85 07 ed 1f 83 0e -d3 7a 79 95 71 2d 7d 91 57 32 24 3d e6 85 d5 bd -99 a1 4a 8e 86 a6 7c dd 60 dc d9 0c 33 92 10 83 -5a 46 ce ac 19 36 ab 3a a9 c3 81 88 2d 76 94 a8 -38 3d 68 98 e2 73 44 bd 15 6f e9 28 2c 71 32 26 -25 d6 8d 30 70 ef f0 1a c8 d5 95 f6 48 6d 79 b7 -88 e3 69 12 fd 3c cf 28 4e dd 5f ce e2 40 9d ca -7d 4f 29 cc 18 2a 78 47 8b d3 ea 23 62 11 25 10 -a5 - -# PKCS#1 v1.5 Encryption Example 10.12 -# ---------------------------------- - -# Message: -9e 1e 53 f9 86 59 9d a8 98 d5 6d c1 c7 55 6f ef -ca a3 39 5d 84 50 d5 2b 3b a7 - -# Seed: -0b 17 63 cc 34 0e 6e 39 78 62 6a 06 d6 ef c4 0d -ed 73 db 53 5a 82 2e c0 4c 99 24 d9 ec 40 d3 85 -20 15 d7 e1 02 9c 13 93 ad cf 01 50 30 8a cb 27 -3c 36 35 68 28 a4 77 fc f9 a2 9a ca b9 09 35 70 -42 50 26 da c1 4d a6 cd 30 4c da a5 4c 9a 4c 5a -99 4e d6 8a 5c ea c7 e0 81 de c4 64 6e 23 7e 47 -1e 52 5e f8 - -# Encryption: -06 d5 19 a7 30 ea 5f 54 9f e1 9e 30 1b a5 15 2d -10 3a 3e ad 3f 89 ab 35 16 ff 7b 34 4c 4f 72 a1 -c2 6a a9 0d 5a 01 a2 a6 51 93 d3 cf 63 41 e5 9a -31 fd 2d 7d fe 43 5c 09 84 d1 bb e8 11 32 01 0f -43 58 ee bf e8 3f af 24 1e 7f 35 af 98 b7 c7 ab -91 e4 f0 e8 a3 2a 2f 57 f0 7f 49 d5 c2 1f 1e 13 -80 ba 0e 17 9a 38 d3 a2 ca 46 4f c1 4d 2b 74 a0 -3a 88 84 aa 85 7b 66 01 47 02 b1 bc 4e 7c c5 e1 -eb - -# PKCS#1 v1.5 Encryption Example 10.13 -# ---------------------------------- - -# Message: -1a e3 1e 0c be 44 97 ba 43 c5 d1 5f 53 5f e0 18 -84 1c 73 14 57 67 a6 a4 c8 - -# Seed: -8f f0 fa a7 a2 b4 ff 55 3c cb b2 0f f3 10 ac 5e -0e a9 28 18 56 2e c9 a0 60 64 f5 de 79 86 b4 f6 -c9 ae a2 b9 f0 11 42 38 e5 a4 99 a8 ae 20 ea e4 -02 1f cd d8 f0 60 c9 93 a9 bf 64 2d a0 25 67 39 -33 48 08 e3 88 e1 da 82 37 27 8b f4 f4 7e 05 01 -5a 8b 88 c5 42 0c eb c8 bb 37 ee 43 52 83 7a f7 -64 70 18 41 97 - -# Encryption: -04 a2 10 f7 6c 0f 84 93 99 09 53 58 98 86 f6 2c -1c 48 25 01 2a f4 4b dc f2 c9 9b 32 a7 0a 17 f7 -64 a3 a9 7b 2b 04 7e 39 d8 0c de 15 4e be d5 d2 -81 3e e8 4a c9 c8 d6 ec 6a 96 f4 02 db b3 26 d5 -a6 e9 c0 f7 87 c1 5e 98 23 c5 08 b3 23 5f 3a 00 -8d dd cd db 07 9e 80 ff 50 fe 37 25 4a 0c c4 68 -29 7e e3 32 53 a7 4c 1e 03 70 26 05 69 58 ad 07 -78 e0 aa 12 50 df 1c 14 85 7c b0 d7 1a a6 93 7e -31 - -# PKCS#1 v1.5 Encryption Example 10.14 -# ---------------------------------- - -# Message: -a6 e3 d1 07 03 21 d8 ff 76 b8 5c 70 93 fa a0 42 -83 - -# Seed: -d1 60 b1 2c 76 62 2c 3d 34 d8 55 87 e6 e8 1c f0 -54 61 8a 34 6b 67 52 d5 36 9a 71 c4 92 35 7a 13 -4b 7f 67 f3 34 a4 f3 b3 28 ba a9 f0 07 18 47 d0 -da fd ac 22 5d 7b 7f 07 16 18 ea 86 81 fc d2 d2 -30 5c 2f 64 63 1e 62 31 85 fc 09 96 e6 1c 84 f4 -18 0c 63 7b f6 ea 2d 06 03 75 f1 6a 65 e5 b1 e2 -b8 65 28 5d a3 d8 fb 1b 6a 60 ea 36 e1 - -# Encryption: -0a 70 03 b5 86 1a 85 a8 f7 2f 19 9d c6 5c 17 fc -58 a9 24 bc c4 08 19 e2 8c 95 83 e8 21 03 8c 00 -05 36 5e 90 9e ee 4f 32 66 f5 9a 84 e3 25 b1 be -a9 d2 81 b4 82 3f 2f ce 44 15 3f 03 17 0f ad cb -16 a2 79 b2 c9 58 7f 6b 79 ef fc 55 a3 c4 34 e0 -bc 5d af e9 d4 03 26 48 aa e7 e4 ed 1d 7f 14 1b -fe 72 26 83 fa 32 c8 9d dd 67 3c 3f 0c 03 c8 54 -59 89 0a b7 fb c1 d9 a8 14 bf e9 b0 d1 2a b1 7f -51 - -# PKCS#1 v1.5 Encryption Example 10.15 -# ---------------------------------- - -# Message: -d0 bc 89 03 9b a1 9e e5 0a 73 82 98 4e 42 8a ed -88 61 4f 78 98 13 01 89 16 e2 e7 eb 0d b8 3d a2 -8e c2 3c 04 a0 c2 f7 6a - -# Seed: -c6 4d 10 a4 b5 2f 49 0a b6 2a 60 38 b3 2b 23 c6 -3a 1c 85 97 0d 93 45 14 83 94 cd 35 cf d6 f6 b1 -59 0f ce 8c 67 5b ee f8 7c d0 34 5e 5c ad e8 95 -09 45 56 54 26 b6 b2 83 03 b0 b0 39 32 98 cd d9 -5c 88 1f a0 65 33 ca 9d 2d 27 14 d0 f1 37 85 a6 -1b 3a 17 a7 81 40 - -# Encryption: -00 8b 19 75 58 ca 4c e5 90 14 58 ab d8 e8 fd 52 -d9 89 96 0f 01 c2 16 ef b5 81 f8 61 14 8d 1a 2b -44 eb 0b 7c 15 dd c3 45 dc 83 f9 03 7d db 8f e2 -ea a2 cb ed 9b 1c 1e ee ae b8 65 bd 29 f4 4e e1 -47 8c 95 e9 fb f4 44 82 8e ed cb c0 17 02 00 de -35 49 b2 2c 11 e4 b4 33 79 8b 9d 63 bb 49 f0 b0 -2d af 56 58 ce ed ea a9 3c 0f ae b9 44 65 38 ba -92 eb 17 c8 5d b5 ee a2 04 ba 2f 49 c3 ce 65 bf -13 - -# PKCS#1 v1.5 Encryption Example 10.16 -# ---------------------------------- - -# Message: -ce 0a 4a 59 39 f6 aa 26 3b bf 8e 1e 5e 94 31 03 -56 ab a5 75 59 c4 1b 39 44 27 70 b6 1f 6b 3c 9b -5f e7 27 f3 19 52 28 08 d5 80 19 - -# Seed: -27 cc e2 d4 3c 71 31 8e d4 fc 8c 0b db 9b 79 13 -53 19 9f 3d 89 fc 12 ac 47 fd b6 d8 8b 44 c6 54 -5e 9e ee d9 f4 c6 85 15 d4 f5 30 b8 13 7d 77 45 -71 3b ad 0e bb 70 52 23 1f 6b 4c ed 18 7a ec d1 -e7 a1 69 d8 6c bd 13 d5 0b 78 be 27 c6 54 5d 81 -92 e0 ec - -# Encryption: -0a d3 ae 7e 5a 98 65 2c 1b f3 45 c4 91 90 3f 55 -17 c6 11 ac 31 00 05 87 7f a9 1a bc ee 64 85 f2 -77 8a bf 0a 6c 73 87 87 37 63 9b 26 72 fd d0 0a -39 65 d7 d3 d8 d7 68 8e 77 b5 45 9e 14 5e ce 64 -a9 a5 2c 37 97 f3 61 07 c9 36 8b df 79 90 f3 fb -6c 5c ff 59 f4 f8 a3 d4 90 93 df fe 74 06 c9 10 -aa 57 23 22 8d ae 5a 9b 29 a4 cc 47 69 af 8b d5 -fd 6e ce 88 58 a2 9d b1 b1 9c 08 1b f0 d6 b0 dc -78 - -# PKCS#1 v1.5 Encryption Example 10.17 -# ---------------------------------- - -# Message: -03 bf b2 59 bd 92 46 de 3f 71 c3 13 9c 72 85 74 -b4 4d 97 ad 57 bb dd 67 01 94 95 c2 a2 00 41 39 -26 34 e3 1a ad 63 f6 3b - -# Seed: -5f a4 bb b7 0e 1f 9e cb 5e b2 14 7b f4 59 d1 d0 -64 43 f0 25 c0 8e 36 4c cc 1b 16 0c 16 41 6f b1 -74 b4 4b 95 36 38 a9 68 8c 5e a2 d0 60 17 1f 30 -54 f3 ca 3f e0 13 b9 e3 18 8e e3 9d a9 1f 80 16 -d4 b7 33 18 79 35 1f 32 2a e5 29 86 4d 90 74 09 -8a a2 51 6b 44 ca - -# Encryption: -01 78 e3 a0 17 ed 2f c1 18 bb 2e 03 28 be b2 8a -98 c8 53 b9 e5 a5 f8 30 80 c0 f1 01 7f dc a8 37 -92 07 72 2c 25 73 7a 89 15 e0 eb 72 c5 22 85 e8 -8f 61 30 a1 cf 56 ad 1d 96 ca 2c e4 b7 1e c3 68 -94 7b d0 71 f8 36 59 10 c7 92 57 5b 8c d6 fd 27 -e5 23 e8 59 65 dd a9 22 82 d5 df d1 c0 64 ea ab -6a be ac 65 e1 6a e0 4f 0d 40 b3 bb 68 41 0b 92 -74 df ee a3 2a 43 f9 40 83 c1 07 80 35 3f 43 e4 -3c - -# PKCS#1 v1.5 Encryption Example 10.18 -# ---------------------------------- - -# Message: -16 2c ca 9e d4 70 8d d1 03 40 e1 94 c3 5c 0a 5f -a4 9a 5c 3b 5b 24 71 71 20 3c a4 8a 79 e5 2d ff -40 f2 bc a9 9a - -# Seed: -4d 73 ff cd c2 69 43 a8 70 78 23 47 8d a3 1a ac -01 27 4b 17 17 c5 0c 6a d0 c6 2e e2 bc d5 57 95 -2e f1 3f 15 ff af 66 bb 4f 45 39 99 11 c6 d6 5a -d1 87 57 2b c1 eb a0 d2 86 cc 45 aa 49 32 e7 3e -47 0c 5d c8 29 39 04 02 5c 86 3f bc 96 22 37 04 -90 c9 1c 87 40 b0 94 d8 f0 - -# Encryption: -04 2b ce 0d fc ec a9 ff 05 a6 e3 f7 4a 6a 70 cd -cb e0 de c8 1e dd c8 8e 46 7f 47 bb 76 0d a4 4c -79 4d 3c dc ab 93 92 49 f8 49 d1 d4 39 56 64 1b -0b 79 c6 86 1c 5f 71 5b 9d 8d 8b e9 f0 76 6a db -3f 18 af 7d b3 6a d9 5f fc d7 e0 fa c1 62 85 23 -e8 f6 9a de b7 ff 50 94 a2 b5 bf 92 b9 d0 ef b1 -11 8b 85 39 26 25 fd 56 f8 8f aa 0a 16 d5 47 30 -fb c5 ca f1 66 82 e9 e4 1b 7e 79 d2 02 2f 7c cf -96 - -# PKCS#1 v1.5 Encryption Example 10.19 -# ---------------------------------- - -# Message: -8e 1b 52 cb 4e 00 77 27 c4 b5 f6 5d 78 47 f3 49 -16 89 1e f9 c7 3a d1 8c f2 71 f8 9f 18 2c 69 3e -52 89 dc 31 da bc 34 cf 7f 44 fb de 57 9e 64 51 -69 ec ba 6e 4e 87 7f 7d ef 44 - -# Seed: -ba 14 74 8e 6d a7 b6 ac 18 33 32 32 95 ad b5 42 -2d bd 19 e2 ec 72 df d0 aa fd 7b d0 7b fb 97 e7 -db 10 8a 3e aa dc ff 67 b6 7e c7 e4 c6 70 04 c1 -78 34 6a 12 5d d3 b6 ca 55 23 70 59 4f 7f 42 cb -33 4b 44 85 - -# Encryption: -09 4b 40 30 e3 0c 8b 46 2e ca 00 f1 6b b1 70 19 -d1 ea 31 25 f1 c6 4c 67 1c b0 0d 46 e3 ad 87 84 -28 52 b2 01 49 6e e2 b3 d5 42 28 93 a8 0c 66 a3 -0d a2 c9 f1 a3 2a d4 d4 e7 73 77 43 ca 1b 78 ef -7d 4a 63 c5 e1 e0 be 7e 51 88 cc e9 42 95 69 74 -ff d4 81 e6 47 83 44 23 0c 37 da 5b 25 f6 b5 99 -a5 9a 05 80 f1 a0 00 c2 59 54 f3 a4 63 f2 89 5f -32 b0 5c c0 88 21 b1 a0 23 60 9f 18 ca 7d 44 9c -b4 - -# PKCS#1 v1.5 Encryption Example 10.20 -# ---------------------------------- - -# Message: -82 ff 62 af fa d8 00 30 94 cc 65 35 - -# Seed: -1c 7f 21 fd 02 09 79 07 40 5e aa 77 ae 72 88 65 -72 1d 93 86 f5 aa bc 2e 0a 95 f3 ed b0 5d 46 e2 -33 79 3b a1 a3 88 e4 b0 dd a0 0c c3 2b 94 8a c2 -65 ae 6a 2b f2 c3 90 a4 dc ce 11 0d 5e 86 64 47 -28 f5 37 81 36 47 6c f7 1d c7 ba ac 50 cc 41 c2 -01 48 dd 37 d5 f7 0a 81 2a 29 4e 24 2d e8 03 b4 -8b 63 40 f4 28 d3 c9 bc a9 6f 76 6f c4 f4 41 67 -e0 4a - -# Encryption: -00 30 3c 35 2e 1f dd 2a f8 a8 e3 a1 69 b5 da c5 -43 45 ca a3 35 a7 1a 37 e9 38 bf 98 47 08 86 56 -84 18 ae 98 d0 aa df e7 9d 0c 65 1b 3f 51 6e 70 -f1 01 74 fe 63 22 cd 37 6d a0 2f 22 6d 15 b3 6a -bf 6d 1c bd ab 6d d5 65 4d 99 25 f7 25 3c e9 91 -51 2a 44 e9 fa 15 27 12 d7 b8 db 7f 18 33 75 80 -fe 51 dc 32 a0 58 2c e2 60 53 f1 b9 49 28 69 b9 -c4 7d f9 28 39 c0 50 2f 2d b4 cc 4d 0b 20 4f 6f -d1 - -# ============================================= - -# Example 11: A 1029-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -11 65 47 94 f4 64 9a 97 ac 87 ef 67 94 f6 a6 ff -b5 cd ab 87 02 c2 32 54 fd e0 34 f3 12 9a ad 82 -5c f3 c0 cc 38 80 a9 6f b6 4e 48 d7 59 5e de 06 -c3 1d 0a cb d1 f8 ef 9c d1 f9 f6 f0 0b 24 ba 53 -45 ab a1 46 d4 1c 56 3b ae ce 3b 25 23 df 6a 9f -43 01 8a 5f 08 69 b6 ec 99 34 69 88 6b 5d 23 17 -d5 9c ff d4 ed e9 46 6a 03 f6 df ec 17 5c ad 5a -85 44 30 95 c7 30 b9 8b bf a0 48 9b 91 bb 27 39 -9d - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -11 65 47 94 f4 64 9a 97 ac 87 ef 67 94 f6 a6 ff -b5 cd ab 87 02 c2 32 54 fd e0 34 f3 12 9a ad 82 -5c f3 c0 cc 38 80 a9 6f b6 4e 48 d7 59 5e de 06 -c3 1d 0a cb d1 f8 ef 9c d1 f9 f6 f0 0b 24 ba 53 -45 ab a1 46 d4 1c 56 3b ae ce 3b 25 23 df 6a 9f -43 01 8a 5f 08 69 b6 ec 99 34 69 88 6b 5d 23 17 -d5 9c ff d4 ed e9 46 6a 03 f6 df ec 17 5c ad 5a -85 44 30 95 c7 30 b9 8b bf a0 48 9b 91 bb 27 39 -9d - -# Public exponent: -01 00 01 - -# Exponent: -1d 4c 4c 6e 13 da b2 84 6c e6 85 d0 c4 93 52 5b -b0 ad 35 62 59 6d b9 ad 16 94 5d 44 5c e6 7c 54 -e9 38 f6 54 54 2b 09 34 48 02 91 ac 21 ae d0 98 -e8 5a d6 fe c6 d0 fe 15 4c 3c 34 2b 16 99 9a 8c -ec e7 fa f9 90 b7 c8 ce 87 b6 6f e3 27 fb 35 2e -d0 11 32 3d 2b 81 9a 36 ca be cc 5a ae 72 30 d3 -f8 e0 02 45 af 35 af 80 88 62 e5 4d 92 56 07 ee -8b 58 e6 a9 f3 ad 8f a7 28 fc e2 68 56 c3 67 b1 - -# Prime 1: -04 41 0a b5 54 60 2d 7e fb 0c ce 92 71 a5 22 20 -f2 52 50 02 34 b3 82 02 fa fc 94 aa 26 b4 fb 04 -e5 f5 08 74 9a 44 ef b8 9b 75 78 db 00 7e 03 06 -23 89 48 69 12 80 f7 3c 12 7a 49 30 b4 63 39 ba -d9 - -# Prime 2: -04 16 d3 fd ed 8f 9e 7b 01 9f 67 12 32 0e ec 11 -d8 cc 83 81 ea 86 26 6e e0 3f 00 72 e9 a2 fc dd -80 81 ae 74 fe 27 88 70 f4 fd a2 a0 00 6c 4f 54 -23 9e 24 a1 5d 1a eb c6 7d 90 d8 18 4d 29 5f 52 -65 - -# Prime exponent 1: -04 06 7b 98 7b 5f 8a 8d 56 06 97 4d 11 06 1d 96 -29 55 63 e9 c2 6e 7d 3e 4e ba 43 fe 01 24 4d 46 -24 46 49 1a f4 82 f8 86 a9 6b 6d d1 64 d4 d8 0d -ae 00 90 29 04 5e 4e 13 64 b4 9b 9e df 81 e8 b5 -79 - -# Prime exponent 2: -e1 38 72 e5 6d 84 d7 4a 1e 15 7a e0 b2 3d 30 09 -c8 d6 72 59 16 cb a6 07 31 06 d3 b2 58 92 b6 c5 -33 21 69 a2 54 b7 12 36 63 6b 5d a9 39 a4 47 a1 -f2 20 47 67 54 a7 6d 69 0e 84 af 95 ca 54 eb d1 - -# Coefficient: -02 51 37 ae 5d 25 fe 1d af 9b 38 32 f8 07 56 b8 -6d b5 ca 0e 37 2e 51 63 03 4e a3 39 1f 5e 54 58 -2a 1d d0 47 58 b9 92 a5 a8 e4 6e e1 6f 8a d3 8c -a6 52 27 45 aa 7d f5 1d f8 9f c2 21 08 01 0e 00 -4e - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# PKCS#1 v1.5 Encryption Example 11.1 -# ---------------------------------- - -# Message: -4e a8 df da 3a 9c 26 70 ca 9b 80 fa 89 71 0a - -# Seed: -96 06 42 1b 97 3a b4 ba 2a e2 2f f5 38 70 7d 7d -4e 56 3e 8f 05 f2 0b c3 38 1f f4 5b 0c 29 19 a1 -b3 46 b0 76 03 5a e7 74 b3 2a f8 ee 56 6c 73 e2 -09 49 68 4e 44 74 80 df a3 4d bb 0c 22 66 61 50 -90 9a 59 e1 bb 22 d0 95 ab e5 02 5a 76 d6 0e c1 -01 c7 80 e8 3a 0f f1 59 46 5c 3e 7a c0 21 2b b3 -8b 2f 1e 0e 6e 0b 54 d3 5f 4c 76 04 c2 d0 93 - -# Encryption: -09 bb cd 8b 63 b2 9c e9 52 26 ec 1d 51 91 2a f3 -97 89 fc e5 e7 7e 7b e6 78 96 c2 c4 e4 c4 37 6f -a4 28 ec 5d 8a 49 7a cc a9 e0 82 1e 1f 6d e1 06 -78 19 c4 8a 51 6f 06 91 cb ea cb b1 9d 1b a5 09 -f0 4f c0 13 36 d9 0f 73 96 b4 3a a2 f2 b5 15 0c -28 a4 5f 35 a9 de 1a 29 73 ea 10 28 67 94 94 0a -b7 9f 12 9e 31 8c f9 7a 5f d7 2b 04 5b 46 6d 66 -6e 5d e0 b7 14 f2 12 a0 b9 05 2a 0c 91 44 8e 52 -0d - -# PKCS#1 v1.5 Encryption Example 11.2 -# ---------------------------------- - -# Message: -c6 e2 57 f3 a1 b3 5b bd c5 cf 42 0b d7 65 4c 52 -b2 52 df 32 c5 70 d4 28 e6 3e a2 - -# Seed: -77 bb d7 2b 7b 8f d2 85 02 ec f7 9f d1 c8 af 8e -bf e2 44 32 70 93 b8 24 79 5e 95 c0 b4 36 eb 41 -e5 f0 f2 ae c4 33 63 aa 2c 08 fc 33 f2 87 e6 53 -80 40 e4 28 0d ba 47 23 e5 32 92 e0 a6 7b 21 ef -77 70 79 85 b7 2b 2e ca de 28 0a 61 fa 73 d7 3d -bb 2f db 17 f7 75 f4 5f a1 75 b7 7c b1 06 7d 6f -93 a4 37 - -# Encryption: -0d 21 49 5c 49 28 c2 6a 92 c1 6a 90 7f 08 33 35 -ad e8 eb 0c 20 b0 b4 5f e0 e0 8e f3 9a e2 4e c0 -b5 05 7e 60 78 dd 7a 1b 9d 10 2c 24 81 85 57 e9 -0b 83 ff da 14 f3 cc 37 3c 84 c1 05 ce ee 71 bc -73 1a 7f 35 71 bd 7b bb a1 d4 f2 3f f4 df 0a 84 -f3 12 99 0f f7 71 ff 11 8f 05 bc fa 22 2f 11 c1 -ea 01 f6 a4 68 ca 5a 87 50 80 40 98 f8 46 a8 64 -30 ea 23 e9 f0 7e 23 48 46 1e f0 0b a6 25 34 fc -e7 - -# PKCS#1 v1.5 Encryption Example 11.3 -# ---------------------------------- - -# Message: -2d 30 7f 44 dd ff 9c 45 35 a0 6e da 01 4a 19 13 -04 fb 3f a8 e3 a2 be 88 bb 3b 7b e9 9f 94 d1 33 -9c 21 9a 51 ff 5c ad da 93 - -# Seed: -5f ab 24 2d d9 f2 92 4b 20 d3 78 a8 87 b5 de 21 -d1 95 76 9c 3b 53 71 c0 0f 4c 3f 1b 63 26 8b 01 -0c 31 f3 2b b8 7c 9a 52 29 e0 d9 30 5f 5f c8 3b -89 34 b9 98 d8 ce df 91 6f 7a 4d 72 68 fe 3b e5 -12 35 f8 be ac 80 0d 4f ff ca 6f fd db 29 da 4f -a1 c7 76 9d 51 - -# Encryption: -0f af b6 1c 37 16 c7 96 69 fc d1 64 52 46 a0 d3 -b0 75 b2 8b 73 82 20 15 a8 ca dc 88 a2 2b 7d a5 -39 43 e2 54 4d e3 96 be ee d3 b0 a9 89 ad 20 a7 -3d dc d1 91 e8 aa 5c ae b6 e9 08 8a 4a 3a e8 40 -67 f9 19 8e 92 4a 9c fe 14 50 b0 18 a6 b6 9d d2 -37 58 e9 25 1c 76 cc ea e8 40 da 2c c6 25 17 39 -e2 3b 9a 42 b6 34 46 ec a0 d6 15 99 a1 46 b7 41 -fd 43 51 1c 73 66 3a 92 3e 37 57 f1 8a 17 1c 3b -12 - -# PKCS#1 v1.5 Encryption Example 11.4 -# ---------------------------------- - -# Message: -1f 03 33 88 55 4b eb fa a0 1c - -# Seed: -9d 81 57 56 74 66 3b 3d 87 7d 4b 0a a4 fd c6 05 -47 0a bc 55 0b 53 52 72 c8 23 70 18 86 7c 50 22 -ca fe 6a 4a c8 37 37 e9 9c 6e ba fe 69 ca a7 fd -ca 70 27 c8 fb c4 37 ec 52 32 ce 2e 25 29 a0 f7 -03 e2 01 f7 e5 10 32 35 ba 65 a6 47 94 f1 90 ef -42 54 93 b6 48 ed 24 a2 19 7d 0a b0 4d 81 c7 b3 -35 a2 da fd 6b 59 c9 43 a0 9b 48 ea c3 5e 35 59 -62 91 f5 f7 - -# Encryption: -00 1b df 33 93 34 2c 38 13 ee 3b 87 07 ea f5 46 -47 ba de 4c 71 8a 4b 64 54 78 12 e0 10 c2 b7 46 -c8 8c da fd c3 16 f0 36 9a 6c 43 0a e7 e6 c5 0f -05 d5 45 c3 f7 98 de b1 d9 a5 bb 69 c5 91 39 33 -c2 d7 79 2f ae 9d 42 ad 76 49 4d c9 a3 e2 7c 21 -1d b4 ef 19 85 18 7a 6c 4d 28 1c 47 72 17 74 a7 -a1 1c 12 18 d4 dd 26 7b 57 48 58 77 aa 75 1f 6c -28 19 f8 1b 50 54 a2 8a 26 a5 3d f3 ea 34 82 b3 -40 - -# PKCS#1 v1.5 Encryption Example 11.5 -# ---------------------------------- - -# Message: -f7 1b c7 37 4b d5 9c 37 77 59 76 f3 35 24 4a 36 -84 3c 59 e7 48 9a d2 8b 1a 82 2d 2d 7d 0b 9a 6f -e9 ac 5b f4 36 82 d6 3d 63 6e f6 - -# Seed: -a1 ff 98 44 a7 3e c4 b3 be fb 1a 86 03 52 cf 9b -75 fc 66 ff 47 9a 2d ed 59 98 84 5a 79 77 3a 8c -62 06 a3 64 36 c8 80 a5 5e 18 71 18 35 45 6d 91 -45 4b 5b a1 32 07 8f 20 37 fb da 72 86 25 1b ad -d1 2d 0a 97 81 af 3f 58 97 cd 94 7b 1e 14 25 f9 -70 55 09 - -# Encryption: -09 3f b6 85 26 ce ad 01 0a 54 d1 16 cd 7d 60 35 -09 9b f1 ab ff e9 33 1d e3 64 86 f0 53 a8 02 98 -e4 ab fa b4 0d 3b 03 a3 e7 e9 25 59 73 38 f1 70 -3b 04 53 5a 9c 87 c6 58 36 f1 61 11 aa e8 89 e6 -c8 d9 0a 24 07 d4 41 a1 c2 a3 11 cb d9 46 11 a4 -2e 93 c7 3a 3d 21 48 3f ad b8 f4 e2 46 d0 89 f1 -cf d7 08 52 b4 dc 77 8a 60 d1 52 d3 fc a7 5f d6 -06 67 04 e9 33 bf 99 f5 bb 77 af c9 a9 cb 3b 8c -b5 - -# PKCS#1 v1.5 Encryption Example 11.6 -# ---------------------------------- - -# Message: -46 87 83 d4 ea c8 81 34 32 04 85 47 ce 24 1f 72 -db 1c 85 ce 4a db e3 ee 2c - -# Seed: -c6 e3 26 30 ed 90 d0 af b1 68 c0 8b 75 22 59 ef -4b 9e 81 17 62 f7 cf 4c 53 5c b4 a0 a0 4b 1d 43 -65 4e d4 fa df c7 dd bc 3a ad 03 14 07 8b 22 6c -4f 3e 97 84 45 7c 91 c7 76 8c 5c 37 b7 60 08 93 -2e 8d 04 57 85 05 73 ce 6b 41 a4 3c dd a9 70 03 -18 36 84 0e 4e 60 a3 48 7b 47 a1 85 c8 6f 8a 16 -f6 f2 21 d0 a0 - -# Encryption: -01 71 a1 2b 00 cf d1 09 67 4e 5b f7 f8 43 47 fd -a3 fe 4a 8e a2 f4 8e 0d 6b 6d 94 b4 9f d7 bd fb -26 e3 24 00 a7 12 51 ab 84 22 06 92 1d 83 72 3a -89 ea 09 93 00 25 92 0e 3e f8 a8 87 d2 bc 24 15 -a7 f1 ed 37 ba 8a 5d 03 ef 92 6a ce f6 11 90 00 -1c 5e a0 f8 cd 92 02 0c d8 96 67 e9 ea 5f 7f 2b -15 37 8a 21 0b 8a e9 14 81 90 98 da 1c be c9 c5 -43 a2 63 30 0f 99 4f b0 b4 92 85 71 40 1c 20 2b -d6 - -# PKCS#1 v1.5 Encryption Example 11.7 -# ---------------------------------- - -# Message: -af 63 1d 76 c9 7f d9 95 e4 94 aa 9b 4b d7 58 c5 -c6 72 c5 e4 15 8f 3a af 87 4b - -# Seed: -40 6e 1e 23 f9 92 bb 07 62 12 5c a4 63 bd 0f 2e -fd f1 bf cb 08 2a 8d f5 06 af 5f 72 70 c3 9f de -01 d9 ee d3 22 66 61 db 22 a9 c4 04 b7 d7 65 fa -38 4f 9a d4 f5 1b 93 69 d7 4b 0e 37 70 66 31 bc -65 36 f6 55 5e c7 fd eb d3 48 ef 3c f5 f8 a8 77 -f6 06 43 7c 27 8c b8 16 3a d3 49 38 4b aa e3 2f -31 b6 86 e0 - -# Encryption: -01 ff 8f e7 9a f3 18 d7 56 f2 84 08 3b 51 b4 3b -66 aa e8 3c 6a a9 1a 99 93 4b 4d e8 4b d5 fd 24 -fa 8d 07 c7 55 14 74 66 5e 62 36 0a 65 98 4e 67 -a4 85 6c 3d bd 2c 75 f2 46 e2 22 22 e9 f4 b9 69 -51 67 26 ed 28 7f 42 3a 67 47 82 1f bb b7 fa 17 -62 35 c8 50 a8 61 f2 99 f7 39 4c 2c 43 07 b1 02 -59 09 40 fe d1 20 6a d5 9b 9d d6 44 4e 1e 19 6e -94 73 25 22 4f fa ca 06 9e 9c df 8c 62 02 69 07 -7d - -# PKCS#1 v1.5 Encryption Example 11.8 -# ---------------------------------- - -# Message: -73 cb 53 90 82 fb 06 dc ae 3c 20 68 e9 89 e7 c0 -d8 ff f0 fb 34 0b 6d e8 0d 0b a5 d1 e0 06 4f 22 -13 92 8a 4b af 20 a8 03 48 af 3c de 9d e6 3f 88 -6d 63 e5 6a 3e 32 cd 8e - -# Seed: -28 e2 a9 7c 7e 9e 03 3b 49 aa dc ee 8f dc 07 ed -fd fd b9 50 35 4b 70 8c e5 df 84 8d 1b 51 aa 2f -4a ff 99 74 16 01 81 42 29 47 b1 33 76 4c 5a 40 -06 57 04 6a 49 36 3f fd f1 f9 3c a4 8b 3e 52 93 -7e 1f 38 fb 50 fb - -# Encryption: -0c 72 e6 95 48 c3 4e ca f2 48 b2 dc 6b b6 43 87 -f4 f3 35 0f 66 8e 59 01 35 60 80 8c 41 3f a8 35 -fd 36 0e 04 e4 74 7a 00 31 c8 a6 4a 9d 7a 07 b3 -63 fa d2 93 b7 03 a7 dc 99 0f 80 6f b9 0e 39 12 -21 a1 16 df 10 8f 54 6e ae 51 71 6b a0 45 01 ab -77 7b 0c 2a 17 71 2f 71 e4 06 27 5f 01 73 77 cf -24 88 c4 35 ef 6c 6e 7c 45 cd b9 8f 24 47 7c ed -18 0e b3 ef c8 70 3e 96 38 26 bf b3 44 f1 6e b4 -a1 - -# PKCS#1 v1.5 Encryption Example 11.9 -# ---------------------------------- - -# Message: -f2 f9 85 b8 03 12 73 cb 5f c8 9a 31 dd eb 4c 67 -a4 e4 f3 8c 09 d3 02 87 42 09 b3 9c 69 b7 1f 84 -95 88 86 8f a5 f8 - -# Seed: -c1 20 44 6f 5b dd a0 6c 63 73 8f 18 15 55 95 f6 -2b c2 65 67 28 4c 35 03 65 91 cd 5d 75 3e 4e f7 -90 0d ff 33 bf dd 3b 10 8c 10 2d 08 98 80 c7 b6 -9d 86 e9 ce 3d 68 8c da 15 6f d6 a9 92 31 05 8c -c3 18 33 96 38 09 46 e8 a9 69 a7 fc be 9e dc 95 -9a 0e 50 45 32 ba b8 ea - -# Encryption: -10 e0 bc 14 ba 16 01 26 98 cc 76 cb 82 04 5e 2b -fd bc b2 b1 18 f1 83 06 79 59 d7 13 7f d5 0f a8 -8f e4 f9 ce cf 66 31 a9 9c cc ab 76 cd b7 74 4b -ab d0 6b 2b ed fb ca 77 24 da fd 91 e6 df a8 8b -ea 2b 44 a8 cb b0 62 19 b1 5c 2a e7 68 72 fa d2 -88 e8 43 8a cd 39 5c e5 cb e2 8a 71 2b 67 f5 61 -a1 78 6d 75 34 3e d9 ad 0d 0a 5e b6 fa ed 07 b0 -6a ef 03 31 8f f1 af e4 72 db 4e e3 e2 1e c1 29 -33 - -# PKCS#1 v1.5 Encryption Example 11.10 -# ---------------------------------- - -# Message: -39 87 2c fd 6c f7 4b 4c cc 1a 70 d9 73 b3 18 99 -a6 7a ee de e5 d6 71 e0 5b d6 01 12 e6 45 12 bb -e4 3b b8 40 - -# Seed: -68 ac 3f 96 97 b7 50 75 4f a7 53 2e 41 61 c1 20 -18 e0 33 a6 02 51 c8 dc a8 38 78 16 f4 23 79 ab -97 8e 15 57 8a e2 e9 4c 17 76 48 8b 0c fd ff 18 -6f a6 d7 98 88 f8 16 9e e4 49 ea dd c8 e7 f5 a6 -58 d0 99 7a 93 4f 58 6e 31 f7 47 30 be 60 3f 1e -e6 2f a6 c0 8b 0b ff ae 6b 88 - -# Encryption: -09 b7 70 07 f1 5d 65 9e fc ca ca 66 c1 e7 d9 62 -e0 47 a1 e1 49 e5 2d cc 0e 1a dc 9e 18 3b f7 3b -5f 23 48 d3 43 28 24 1b 40 7f 61 82 2f 6d 57 e1 -ab b3 22 d3 02 f4 53 0d 2c b9 a4 1a 27 70 23 8a -1b df 87 5e dd 79 78 10 d9 04 e9 7a 4d 7c 51 51 -32 d6 ab bf 3a 4a 40 74 86 dd 00 4e a3 8a ff 8d -4e d3 82 5f e1 31 42 f1 36 fd 1d 71 3e 80 e0 cf -22 57 69 b4 19 cc a5 4c 15 6e 54 66 8b 30 6b 5f -2a - -# PKCS#1 v1.5 Encryption Example 11.11 -# ---------------------------------- - -# Message: -74 d5 6b f8 d9 c1 80 dc 09 93 71 a5 af 72 - -# Seed: -33 78 70 f0 47 9c f1 28 3a 0c 87 c9 c4 af 54 ba -8f 85 06 44 d5 9a 20 25 26 3d 2b dc 49 bf a6 63 -6e 75 18 f9 4b 6a b1 8f 85 b1 93 21 20 9b 76 9f -0c 19 75 d1 d5 ad a0 6f d2 a7 6c 82 45 0e 4e 09 -cd ad b7 83 2f fb 8a e7 dc b4 74 10 b2 87 80 4d -dd c7 49 3d 61 0a 81 39 9b 6d f6 df 5e f1 52 09 -29 84 fe 27 76 a4 f9 30 54 6b e1 dc 18 31 3c 14 - -# Encryption: -07 61 eb aa d8 ff 1c 3d be 71 0f 60 e3 be 9f 28 -9f b2 7a 6b 53 77 75 5b 71 fb 38 4c 5f ac b1 60 -3c 95 3e 1e 2c a1 1e 78 43 25 ae 42 f3 21 ae 5c -58 64 8c 84 f5 24 df 9d e9 f9 3f b4 b0 c2 e0 97 -97 ff 2d 11 40 70 73 b9 5a 78 6d f5 1a 43 f7 99 -82 d8 6c 49 fb 9e 50 14 b1 b7 68 76 0a 51 30 26 -6d 06 99 30 6a 90 4e d2 df e2 01 38 d5 31 c5 dc -4b bf 4d cc f1 02 49 a6 e2 b3 55 f7 cc b3 26 a4 -8a - -# PKCS#1 v1.5 Encryption Example 11.12 -# ---------------------------------- - -# Message: -61 10 63 b5 da 12 3c e2 12 96 17 df 38 59 95 57 -b9 5d 1b 05 e6 b6 6b cd 49 af e9 83 1a 04 21 a5 -be 4e 48 - -# Seed: -10 f9 df 30 ec 97 77 fc ab 5a 92 4d ed 36 fd fd -6e 1f 38 14 49 ad 99 d2 0a ea 0e 39 72 ea 60 4e -a2 27 50 d0 60 1d 10 a3 77 da d1 a9 4f 9b 02 73 -40 94 81 23 82 73 98 bb 22 b1 44 5f 71 c5 05 c6 -23 aa f5 16 cd 9f b3 e9 77 f7 78 cf dd 3a 5d 28 -c2 29 9e 4b 2a bd 9f 98 c4 35 5a - -# Encryption: -07 f2 d5 8b c4 16 39 94 d7 6f 49 1e dd 69 74 3c -45 dd a0 c3 8c cb 07 69 de 9c f9 f4 fd 00 55 d3 -0a 0c f0 02 80 0d 76 ed 8c 12 cb d3 6a f0 51 a9 -d7 33 7b 29 bc 77 4d c3 c4 01 2b f5 c2 8a ea d8 -c3 e0 36 aa 41 39 8a 8b 0f e9 91 c0 bf 66 b5 34 -1c 99 d9 37 7d 94 70 4a d4 90 a9 f8 74 6f c5 ce -f7 26 e1 96 f3 41 f9 3a 1f 1e ae 2c 13 e0 0c fd -22 06 2f 8e b3 da 9d af b9 5a 1e 7b 81 b1 fd b6 -56 - -# PKCS#1 v1.5 Encryption Example 11.13 -# ---------------------------------- - -# Message: -80 76 4f 78 5f d4 17 6e 16 41 e1 29 a3 5a 9b 31 -b3 a8 9a 75 67 ad 6c 1f 0d 65 ec 8a f9 5f c1 6e -15 28 14 09 - -# Seed: -20 36 d0 98 a6 e9 35 f9 a4 11 20 1d 2b cb 62 9f -79 0a 94 db 2e c6 98 67 43 3b 17 61 d7 c6 95 4b -e9 1a 9f c7 19 19 0e 10 86 13 cd 58 4c bb 97 76 -87 04 69 24 bc a6 b2 fe 1a 54 bf 76 ac f7 7b 36 -8c 39 65 0f 6d 0a 49 8d bd ed ae 3f 4c 21 04 0a -8a ed 63 4d e4 ed 8a f1 34 6e - -# Encryption: -04 9c 61 44 4e 92 47 72 f9 4a 79 5c cd 99 eb 2f -e4 30 99 7b 91 b4 2d e6 16 36 29 ab 98 d2 5a 71 -e7 f9 68 86 a5 7e 97 9d 9c 94 c9 62 20 9c 1f 71 -2c 70 57 1a 81 f3 77 ea f7 4e 80 e7 07 22 e1 be -3d 13 37 c5 04 5f 79 7b d5 7d f2 f5 ae 5e f3 3a -e5 79 e9 3b 38 fb 25 0d f0 c2 bc 59 b3 3a 74 86 -7b 8f 3d fe 5b a7 85 d7 28 b8 9d 96 b3 00 2b c0 -05 4d b5 bb 0d 84 fd a4 5d b4 a1 f2 62 8a b1 12 -30 - -# PKCS#1 v1.5 Encryption Example 11.14 -# ---------------------------------- - -# Message: -0a bc 2b c5 fc d0 40 18 9f 84 22 f1 ca 04 50 21 -da 95 - -# Seed: -e4 73 2e 49 90 69 9f d7 47 40 c8 52 ae 8d 4d 70 -7f bd 79 46 0f 88 74 09 84 ae 53 ff b9 fc 39 62 -68 3e ad 0d 14 04 f5 31 51 d1 ae e8 0f cd 6a 1f -f6 5f c8 8e f0 8f d7 6d 9f dc a8 f9 e3 ac 7d 8d -82 b8 2e ce 78 9c 66 c5 40 22 80 b3 e5 68 10 1c -e2 a2 a7 b2 b2 f1 e9 65 19 cf b4 1e 60 49 3d 76 -8e b5 b9 6c cc 49 bb 0f 6e c7 11 fd - -# Encryption: -03 d8 ae 60 4f 92 95 31 73 c7 7a 01 ff a0 90 aa -0e 37 a3 8a 47 c9 72 19 c0 b9 f8 64 d3 48 74 6a -f7 f4 a6 32 11 29 c6 04 6a 99 4c ed 1c cf 33 24 -da 93 71 53 88 8d d6 c6 70 19 a7 ca a7 65 5a 36 -42 83 8e df a0 e2 ed 8d c2 5c 14 bf f8 bf f5 65 -c7 18 f8 b6 c9 20 56 c9 bb e8 d9 30 83 70 c7 cd -75 a0 4e 11 b6 e2 5a a6 c3 c2 cd dd 17 2a 4b 6a -ee f0 4f b8 35 b6 86 37 cf 0c a0 b9 a9 11 b8 b8 -74 - -# PKCS#1 v1.5 Encryption Example 11.15 -# ---------------------------------- - -# Message: -8f 98 35 ef b6 9c ca 8c 07 bf ef 4d 8f 53 5d 0c -bd a5 36 7b bd 41 08 0a - -# Seed: -32 d4 be 07 e6 c7 fb 81 d5 20 8c 25 01 c5 df 7c -56 d1 98 6d c6 d6 31 10 ad 21 d8 1e 57 ce 11 3f -3d bb fe be 0f 80 c0 16 b7 19 e9 d5 c3 d9 a3 bb -bb 2f 35 be 95 d4 56 22 2b 51 c3 d6 5b 38 8e 7a -da f6 b9 ce ae 1f d4 6a 6e 05 ca 1b b1 99 c2 7b -ac dc 8b 5f d1 4f 03 51 ae b3 fd d6 dc 1d 93 f3 -b5 31 56 ef a3 c6 - -# Encryption: -0e 47 ad 4d 92 d1 9a 1e bc ac bf 87 5d 80 19 27 -d4 fe 5a fa f6 6e d8 01 5c 55 9b 56 6a 9f 3c bf -0a be 8a 76 fe 73 24 f6 28 c2 e4 f3 45 84 a5 0f -f7 7e 82 2a 54 11 8e fa 9b ae 9d 0f a5 02 94 c6 -18 0b af 3a 8b 0c 7e 45 3a 74 37 ab 1a 19 cc 00 -30 7a 8c 6a ed 95 c3 15 b2 4b 47 90 07 24 56 c9 -44 60 99 5d bb 1f e5 a1 2b 4c f4 45 42 96 f7 40 -02 83 ce fd ce 6b 00 cc 80 49 dd 5d d8 cb 2a f3 -6f - -# PKCS#1 v1.5 Encryption Example 11.16 -# ---------------------------------- - -# Message: -6d fb d9 3b 00 78 d4 9a e4 fe 1e 24 cc a9 7d 0a -9a ff d7 be e0 62 ae d2 9d ef 0b 1c 0b 3a ef ad -81 1d 6e 7a ce 8b 49 d7 24 2a 9f e6 e2 3c 22 - -# Seed: -31 9f 9c da 2c 93 38 8e be 1a 50 e7 6c 93 97 55 -9d ca f1 4f e1 03 52 aa 51 1d c5 ba a6 4d c1 52 -fc c7 9c bb 23 d4 e6 9b 12 b9 f2 7a 79 09 15 98 -87 bb 04 12 9a d6 35 16 81 33 86 37 4f 31 89 2d -4c dc 4f e6 39 69 b5 bf dd c6 67 f9 46 89 7d - -# Encryption: -01 c5 ce 83 6b e2 20 8a 3d 81 4e 7e 60 c2 76 74 -ac b7 cd 3e 31 c0 24 d9 d3 8f c2 29 53 aa fe 73 -af 52 40 43 4d cf 54 a3 88 99 2e ac 36 ec 84 64 -d9 a0 42 ac 58 d1 8a 70 39 8b 8a 77 3e 66 69 bb -3d 76 ee ac df 1f d1 52 47 40 99 bf a6 62 a4 81 -db ab 4c a4 67 14 95 87 45 e2 b7 83 2a 59 cc b0 -05 36 49 b7 e0 95 07 43 33 3f 5f cd 6f 65 19 7d -dc b4 e1 bc 12 a6 6e 8e 92 a8 65 9f ae e5 71 31 -e2 - -# PKCS#1 v1.5 Encryption Example 11.17 -# ---------------------------------- - -# Message: -e5 87 9f fc e0 b6 29 b8 85 7c 19 5c f5 d0 9f 7b -93 bf f1 f7 a9 f2 d8 a4 5a 56 3b bb e9 e6 2d - -# Seed: -ba ce 2c ea 0b fe c2 5a 2d 34 d7 29 92 c2 b8 ea -0a ea 17 b7 a3 a8 be d6 0d 1b b5 10 13 34 7b 2d -03 6a 75 a4 ec 3e b2 c1 78 8d 44 a9 e1 c5 c8 8d -04 1e 82 af 87 81 55 dd c7 d8 1b 3e 27 cd dd 20 -40 9d bd da 4a 64 bf 83 11 a7 b7 eb 77 29 93 12 -66 1a 6e 37 df 35 02 f8 6a 22 49 2b ef ac f4 - -# Encryption: -01 e4 fa eb ca b8 9d 7b aa 3e 03 93 f7 16 84 b0 -ae 53 df 8e b9 87 3e 65 a7 16 ec 2f 41 74 1f 8b -78 16 d2 e1 97 d9 76 fd 53 a8 ee 7f 92 4b f4 bf -d4 10 42 e1 64 45 e9 06 0b 55 a0 b6 dc 16 aa f3 -06 44 91 d1 89 28 22 39 50 39 33 28 c1 47 db d0 -35 31 ec 01 2d 8c 52 75 02 e7 eb 3d ca 50 9b 7d -e1 69 95 92 46 07 c8 b2 8a 2b da 9b cb 2c 77 81 -46 1c 76 66 3b 88 7b 96 43 e2 31 7f 0e a1 d1 bb -14 - -# PKCS#1 v1.5 Encryption Example 11.18 -# ---------------------------------- - -# Message: -0a 2e 24 13 0e 8a 9d 28 df cb 9d f9 76 5f 46 83 -e9 da 78 42 5a 28 19 98 06 a9 3b 32 2e fa 88 49 -3a c3 72 52 c2 9a 26 4f 3e 85 ae 56 53 8e 80 8d -c5 56 42 a4 88 5f 05 46 40 f6 9c 89 81 fe - -# Seed: -20 43 1e f3 1f ce 19 93 9d a5 45 a0 85 30 11 2d -b0 fa 07 13 8d d8 6d b1 cc 65 e2 b0 3f c2 be 60 -7c 3e 60 38 eb b7 89 17 55 b2 31 29 fb 96 9a 7f -e1 06 10 f2 eb c3 f0 77 b2 c8 f4 60 1e 09 ab 4c - -# Encryption: -0c 14 b7 d3 2d 3d 4c e2 b0 8e e4 4f 51 6a ee 29 -90 b6 30 52 40 b2 5d 23 34 aa 31 75 2a ef 28 02 -16 39 f7 6a 4c 47 19 56 9b 30 05 2d 4b d0 8b 3a -07 f2 3b e6 86 23 7e 48 1e 67 bf 3f 5a 01 ad d7 -56 da 77 2c 7d c1 3d 32 29 8b 9b bc 3d 33 e6 df -82 d8 5c 08 9d 34 76 00 49 7a 8b 8e a4 de 68 ab -b9 0e 5c 6a eb 26 9a 97 be 42 6c ef ac de bb cc -0c 1f 2c 40 9b bc 7c 72 d9 0b db 42 6b 13 cc c1 -9a - -# PKCS#1 v1.5 Encryption Example 11.19 -# ---------------------------------- - -# Message: -7e fc 62 7b a5 fa 28 25 aa e0 ca 94 03 0e 70 47 -08 d3 5f 92 23 98 26 b4 2e 2d 4d bb e4 02 ab 7d -19 6a 7f 54 88 0c f2 c5 a4 d0 fc e5 3a 20 a3 2b -68 30 e6 2d cd 00 db cb f3 3b 5c 0c 70 44 01 - -# Seed: -f0 49 79 19 c1 42 f3 a9 8e f5 5b cd 59 88 23 4f -dc 8a eb f7 36 d4 7a f9 70 90 a7 a9 dd e0 a7 35 -09 f9 cd 41 36 26 bb 8b a7 67 c9 d6 38 49 1c 28 -6e 67 bf 22 d6 70 d5 6b 24 c1 5b ad 70 35 1e - -# Encryption: -01 db ce 3b 3f 84 b2 da 06 b1 67 e2 06 64 9d 42 -4a 42 b8 e9 ea 54 53 a1 6b 5f c6 c2 e9 cb 17 ed -a1 ef fe 4e 78 36 a5 e5 8f 99 e5 31 53 0b 40 17 -1e 4b 51 fc 0b 92 de 30 31 30 09 36 d2 59 5e 39 -10 09 e2 e5 3c 32 f7 59 60 4a 6d ba d9 c9 70 90 -0f a6 e4 1a 35 08 3f 78 7b 9b f3 be bc ea a1 a7 -71 84 1b 5e 6e 4c 8b 50 96 29 00 7b 46 7e 3c ec -8a 1d 03 23 c3 c5 db c3 4d 8d 41 25 a3 98 c9 d5 -3d - -# PKCS#1 v1.5 Encryption Example 11.20 -# ---------------------------------- - -# Message: -59 3d 3f cd 05 ac ee 30 29 81 5e 1e 76 a8 90 - -# Seed: -12 35 ee 3e 7a 9d f5 96 7f e9 8d 97 10 ff dd 5f -7e b2 2d c0 71 47 af 43 6f e2 0a a5 26 bf 0b 94 -19 0c ab b5 21 3d e9 8a 23 f5 ef 27 50 22 a2 f7 -3e 60 e9 ef e2 c0 34 c5 5c eb 26 aa 80 6c de d6 -73 9d db 2c bd 3e c3 b5 55 20 4a 79 84 65 c3 7c -67 57 19 56 86 a3 ea 3c 56 57 c3 60 a0 15 8d 99 -2d 4f eb fa 04 29 ee b7 c9 2a 46 84 34 c5 b7 - -# Encryption: -0f 69 98 81 a1 52 46 18 bc 25 d4 e5 14 e2 07 30 -68 ea 7d 35 38 4b af d4 6f c2 82 e1 d8 55 11 9e -e9 69 f2 11 c7 18 4a 07 03 06 47 fc 40 99 0e cf -2e a4 05 22 86 5d 91 77 8a 62 7e ca 8e 50 c2 bb -97 60 b0 45 da af 12 77 a4 fa 98 35 76 ca 8c fa -d7 60 83 29 c1 88 15 88 01 7d 63 72 2b 70 e9 8b -e5 24 e0 03 39 95 98 25 73 d3 38 70 78 c8 b7 c1 -c5 f9 ae f2 64 a0 48 46 84 b3 42 66 43 73 7d 34 -bb - -# ============================================= - -# Example 12: A 1030-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -26 1f e0 28 44 59 c2 fa 6f 05 54 6b ed 58 5e 1e -e0 a1 30 b7 1c 2b 8a 6f bb 3b dc 75 78 7b 26 55 -d0 ed 4e 32 5b 54 c7 b3 71 a6 fc f2 b6 78 82 77 -a5 0d 47 05 ba 23 c5 96 28 5d a7 e3 c9 30 4a 41 -e7 cc 48 8b 44 92 2f 7b e2 b4 7c 16 31 9e 33 74 -51 17 3d 40 b1 ea 48 1d 1a 9c 11 29 b1 fe b7 d0 -9f 67 49 7a eb 98 94 8f 1a bf 3b 77 86 bd 3b 87 -04 71 87 c8 f3 70 15 68 2b 3f 2d e5 0e 07 8e 8d -0f - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -26 1f e0 28 44 59 c2 fa 6f 05 54 6b ed 58 5e 1e -e0 a1 30 b7 1c 2b 8a 6f bb 3b dc 75 78 7b 26 55 -d0 ed 4e 32 5b 54 c7 b3 71 a6 fc f2 b6 78 82 77 -a5 0d 47 05 ba 23 c5 96 28 5d a7 e3 c9 30 4a 41 -e7 cc 48 8b 44 92 2f 7b e2 b4 7c 16 31 9e 33 74 -51 17 3d 40 b1 ea 48 1d 1a 9c 11 29 b1 fe b7 d0 -9f 67 49 7a eb 98 94 8f 1a bf 3b 77 86 bd 3b 87 -04 71 87 c8 f3 70 15 68 2b 3f 2d e5 0e 07 8e 8d -0f - -# Public exponent: -01 00 01 - -# Exponent: -05 df 76 83 72 cc 0a 64 d3 c2 14 18 30 24 23 13 -9f 47 95 73 e5 0b 5c 09 b6 e3 be 23 fb c9 aa 1a -76 d3 27 99 a0 47 76 1f fc 21 07 94 48 17 01 04 -cc a5 e2 a1 4c e4 57 d0 0d 80 7d 42 c7 6a 55 f6 -16 87 4b a7 f7 ea a1 ce 63 cb f1 32 de b0 81 aa -d2 fd 80 d1 24 c4 da 86 ec 6c 02 0e 8c a8 2d cd -cd 35 54 e6 9b b1 98 72 26 2a 50 31 ab 5d b7 cc -8c 92 59 a1 46 d5 8b 1d b9 4c c7 e7 56 25 3d 5a -a1 - -# Prime 1: -06 77 25 ab 55 34 18 e1 eb 8a 41 f4 fd 92 d2 80 -b6 9f 85 b0 8c b4 02 f0 1a a4 96 92 c7 20 9b 36 -42 98 ee f4 e3 3d c4 22 bb a3 35 03 d1 1a 12 7d -d2 86 43 f7 e7 75 58 97 e2 eb 96 c4 dd bb 91 12 -f1 - -# Prime 2: -05 e5 8c eb d4 7d 87 b1 e7 8d a2 fe ee 6d c5 f9 -bf a2 20 c3 55 e8 20 c8 fb aa 88 46 df 11 00 36 -2c d1 69 1f 5c bf 5c 78 68 c4 72 d0 28 2a be 01 -03 16 1f 4d 8c 62 af f3 5b b1 fb 7c c6 99 d9 9f -ff - -# Prime exponent 1: -01 6c c9 14 95 d6 c1 95 29 40 73 80 f7 52 20 aa -d5 95 1a f5 ea 4c d2 48 f0 d6 4d 89 53 f1 cf c3 -89 b2 03 18 5d ed 03 09 54 a9 87 c9 ab 90 3f 7b -13 a7 1b db cb 5b 85 87 14 30 30 2e 7b 60 17 7d -41 - -# Prime exponent 2: -f9 cc 89 15 ff b3 dd c7 c0 93 71 76 49 2a 12 bb -18 7c 2d 76 e0 d3 d4 0e 79 58 d5 c9 82 09 b3 ed -54 b5 fd 9f 9e 77 11 e1 dc 68 57 73 de 26 d5 0a -0a b6 21 62 12 ce a5 09 ce 79 1c 5b cd 07 cb 47 - -# Coefficient: -05 fe 93 3b 87 3f 1d 68 f6 be 2d 4d 5a a2 2d 96 -8f 2b 7a f5 41 a2 dc d6 4e 09 c0 30 b1 50 35 8a -98 02 ae 86 59 95 d7 6a 50 03 7d 19 8d 7e 70 4d -26 84 7a da 8a e3 d3 85 c2 96 5f b1 7f cf 15 2f -77 - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# ---------------------------------- - -# PKCS#1 v1.5 Encryption Example 12.1 -# Message: -7d e6 9c d9 22 8b bc fb 9a 8c a8 c6 c3 ef af 05 -6f e4 a7 f4 - -# Seed: -33 d6 2c d6 67 82 3f bf 13 d5 92 ae 4d 02 a2 37 -0d 1d 99 db 06 c7 25 42 5e 0d 12 fc b4 83 4e f9 -e5 49 9d 60 7e 8a ae fe ba 81 96 49 fb 3d 61 c7 -05 f5 e9 a3 a2 f8 96 27 61 89 a3 20 0d 2f af f7 -76 79 e0 56 34 9a 5b 9b 7b 44 49 b6 75 cd 48 b6 -98 09 32 c2 cf c4 6b f8 9a 77 34 f6 8d d9 f4 fe -77 e1 d9 cf 1f 31 b2 1c 4c 61 - -# Encryption: -04 ca ef fc d5 1c 3f c9 23 63 46 77 4d a0 cf a7 -7e 9e 64 65 f6 43 7f f4 6d 9f a4 58 b3 62 34 12 -c3 10 30 09 fb fe 20 31 96 df 72 96 26 e0 ee 3a -fb 6b 10 a5 ac d7 2e 84 28 1d 9d 9b cb a3 e0 ef -77 dd 84 f3 db 19 2d 31 b5 b6 66 f7 6c 93 81 06 -81 37 3b aa 58 e6 da db 01 fa 5c 65 ec 89 fa 51 -cc 24 74 61 1b 9a 7c b0 0e 86 2f d3 d4 9b 1c d3 -1a fc 2d b4 49 e0 9d ae 2d 0a 7d 4d f0 bc 32 0b -5a - -# PKCS#1 v1.5 Encryption Example 12.2 -# ---------------------------------- - -# Message: -97 ee a8 56 a9 bd bc 71 4e b3 ac 22 f6 eb 32 71 -96 69 c4 2f 94 30 c5 89 50 c6 4c 0d ab ff 3a 9e -20 43 41 6c 67 ca aa ab 7c 68 cc b3 ca 99 a3 - -# Seed: -9f 14 12 61 ce c4 f2 c5 2f 96 91 25 a3 6f 14 10 -27 08 82 50 d3 6b 17 42 1c d0 96 14 76 19 06 46 -8a fa b7 62 2c 0d 02 19 36 91 74 47 91 e0 d3 5b -6b c9 f3 37 7e 10 b2 85 6c 8e d9 19 9c 89 f4 a4 -16 13 d3 c4 0c ca 37 3a 7c c6 3c 52 60 fe 5a - -# Encryption: -0d 26 a0 5d e9 3b 70 7b 85 40 fd c1 98 89 d2 d1 -e7 93 71 57 d3 2d 30 3c 52 8d e3 5e 55 3f 94 20 -28 74 4a f6 a0 40 2e ca 0f cf 5a 85 26 1a d4 75 -d8 71 0c c9 f8 b1 1b a2 c6 da f1 d6 72 69 0c 68 -ed 11 e0 35 e9 c6 60 ec e1 d8 0c da b8 00 ea d3 -c6 e0 78 61 7a 1b 0d 27 3d ed d8 d6 57 49 16 6b -d0 77 74 fb 4c 14 86 aa 8a 0a df 59 5d bc 3d 10 -ff ae f1 83 84 98 a6 75 55 c7 7b 6e d9 83 d5 b9 -de - -# PKCS#1 v1.5 Encryption Example 12.3 -# ---------------------------------- - -# Message: -8e 3e 77 2f 39 - -# Seed: -9e b7 31 fa 6d 8d 5b 75 81 f8 fa d2 c8 22 5b c9 -68 34 af 61 db 3d 40 9d d5 63 04 ae 23 ea 62 69 -63 a4 d8 04 40 c2 4e 43 1e 41 97 60 90 3a c4 4b -fe 41 a7 50 81 a5 46 2b ae 65 47 c0 e7 a0 6e 91 -60 df 9c 01 fa 6c 53 54 c8 33 18 db 65 6d ee 0a -43 77 87 fa 46 39 4e 55 2e a5 33 15 59 b4 01 7b -b6 a0 e1 d6 fc 8a 65 b4 5d a0 c4 5d 88 95 48 61 -cd 6e 7a 41 7e 03 7b 1b 05 - -# Encryption: -24 4a 86 34 51 9a f4 9f 56 9b 69 86 ab 47 79 64 -a6 b2 92 0d 84 3a 1d 97 ef d7 fe f8 3e 81 ba da -4c 4b 56 29 61 ef 4e 1f c3 33 46 4b 92 6b d7 4b -07 ad 50 c6 5b 68 16 83 d3 89 fe 41 d6 d2 13 b6 -46 9f 18 2b 14 b4 62 d7 2c 1c e3 92 8c a8 06 d9 -66 b5 2d 42 d0 bf d6 0c 9d 04 91 4d 50 83 7c da -e0 9b 33 0e 37 27 44 dc e1 7f 18 e9 4d 71 1c 8b -58 ea 44 9f 14 49 d3 69 fa ef 51 46 83 d3 01 60 -79 - -# PKCS#1 v1.5 Encryption Example 12.4 -# ---------------------------------- - -# Message: -dc fa e7 71 8c 24 7c 40 f9 a2 a3 c3 53 5c 50 92 -80 c8 73 c3 - -# Seed: -b9 3b be a6 c1 85 3f 15 3b 5e 01 e7 e4 e5 d0 c6 -3d 9d fb 24 5f c6 cf 64 04 3d 7a 92 20 b0 b8 1a -c2 af 65 6b 99 71 4b a4 30 e0 a3 96 95 d2 5f f2 -69 b0 b9 b8 65 fc 4d 4e ee 5e 07 a5 b5 be 35 43 -82 aa a4 14 bc 62 08 54 5c 86 ce 02 38 8c 07 b3 -76 fb 02 98 c3 7d 1a c3 9e a1 89 b0 ad f7 80 f6 -e8 30 bc e9 17 b5 0a db 7a 31 - -# Encryption: -0c 41 20 52 d4 ef 4a b5 1b 2f 62 37 05 f0 7f 41 -fa d6 4d af fd ba 62 44 ef d4 7f 51 9d e2 e7 1a -01 a6 c5 7d 1f 28 b6 bf 7b 5c 8d bb 9f e7 b1 49 -b0 eb aa 53 59 61 99 37 6d f4 90 32 3d 25 c2 17 -bc 71 be 37 f1 81 03 5c f4 57 eb 5c 06 d6 a3 de -d3 d6 6d 5b 35 f0 61 81 bf 94 d0 ec 13 ec 44 7c -70 82 33 49 1c 55 4f 9e 99 1f 6b cb 8b 78 d3 3c -9c 36 95 5b 8d ce 51 79 ff 8b c5 92 44 f6 67 90 -87 - -# PKCS#1 v1.5 Encryption Example 12.5 -# ---------------------------------- - -# Message: -d7 1d d8 7a 13 99 1a 0d a2 c7 4a 58 b0 48 56 34 -b3 e0 4f ec 9e 3f 1c f2 60 4a 93 be d7 96 96 fa -63 78 eb 1b a0 e5 d2 04 70 a4 - -# Seed: -09 90 59 92 58 e9 7a 2e bf be 10 97 72 25 c4 16 -76 2e 95 d2 55 3a 80 1f 72 6c c2 49 bc df 32 21 -32 58 57 19 fc 12 39 9a cd 72 54 ae 77 da 34 3f -e2 a9 a3 ac b1 1c 14 e2 14 e2 d8 5a 76 70 8c 3e -72 17 3d a5 d9 90 58 e0 c8 70 9e df 28 c3 69 38 -76 9f 1f 22 - -# Encryption: -0f f9 cc e7 b6 9d 7f ca 48 d7 c4 f6 cc ff 24 8c -3d b8 8b f1 b7 85 2c d9 d8 52 5c 3b 41 e4 4a 9b -54 0f 20 8f fb b8 c8 5b fa 89 0a c0 2e 99 49 59 -d6 b0 7f 64 81 40 78 55 6f 8e c6 0d b3 57 ac ea -f8 39 11 5f ad 41 f8 91 8d 69 c2 1a 3a ff ef 6e -b1 4a 5d 2c d0 64 5c d7 06 b5 81 43 39 4a 27 35 -36 82 e3 ba a1 98 00 2e 16 80 f2 8f 34 be 08 9a -57 84 ac e5 ca 6b 11 08 99 df b9 58 2f 2e 4b 2a -40 - -# PKCS#1 v1.5 Encryption Example 12.6 -# ---------------------------------- - -# Message: -5e 4b 15 8f 8d cb cd d7 e3 08 38 5b 40 19 0f 5d -ef 8c f3 30 5f c4 9d e6 3c 9e 35 b4 02 36 ae e1 -f4 56 20 5a 52 67 a2 aa 7d 88 cb 2c 11 af 7f 28 -99 d0 1d a1 b2 c7 46 6f fe f7 - -# Seed: -a5 22 f9 80 8d 9c 01 d8 ff 79 77 5f 7b 22 09 8f -c5 fe 32 54 e1 b0 4e b1 cb 85 0e 10 e2 c5 06 5e -23 27 4d c0 a0 55 87 43 6d a3 75 59 33 5f e7 09 -3f a5 e7 a2 a9 c9 a4 dc af 23 51 79 d0 e9 8f a3 -3e 34 b6 16 - -# Encryption: -1c 0e 86 a6 36 6b eb 1e 12 d6 bc fa 6a d4 94 06 -c8 b7 e4 8d 1d 5b e4 5c bd 83 19 49 87 49 6f aa -3e 21 92 7e c6 62 f5 02 ac 3f 91 a4 b4 b9 1d 16 -0c 19 86 a5 ed 09 27 66 88 3b 85 55 e3 c9 31 4b -44 ba 33 83 db 28 74 23 af 91 b4 13 91 8c 08 02 -c7 77 8e 46 c2 96 dc 9f 04 cd b8 b0 6a dc 7c 53 -d8 59 f4 42 cc bd 5f fa b5 af 75 2b 97 9b f5 23 -a4 0a 1d 08 d7 60 63 ff b3 d5 cf c8 2f 15 eb d6 -d4 - -# PKCS#1 v1.5 Encryption Example 12.7 -# ---------------------------------- - -# Message: -35 9b a5 07 56 a8 03 30 40 9d 3f 23 6a 34 0b 90 -f4 2f 73 2a 87 71 1f e2 23 52 d4 c8 25 0d 45 47 -5e 32 b9 58 83 e1 60 97 55 a1 3c df c1 bf 39 4c -5c 67 36 9e ca 1f 9a 33 e8 ba - -# Seed: -f9 eb dd ac 9d e1 70 9a 06 bf 6b bd df 58 94 e2 -3b 96 2b a0 c0 64 bf cd 7c c5 76 60 3b 0a 1a 1f -f3 5d 64 5e e8 7a c6 f8 21 a6 a1 51 e6 bb b0 5b -f3 e0 5c d9 a6 e2 cd 9c 6c f5 53 bf b0 7b d2 fd -a0 40 df b6 - -# Encryption: -08 33 60 e6 49 05 9d 00 65 8d ba 21 f2 df 28 a2 -76 4c 45 89 f7 a7 7d 5a f9 95 79 a8 ab 44 80 c8 -26 a7 7c 2f b7 95 4f 4f 31 fe 1d 9e b1 bf 40 e8 -09 57 7f 39 30 1a d3 ab 95 b3 81 6c 90 ec 3f 1c -d6 29 c4 39 61 74 be d9 fe 1e 0f 47 68 23 e5 3b -41 d1 35 b4 9a 02 b0 0e ff c7 61 ec 90 94 23 af -15 85 52 37 b7 7e e0 7d f2 5a b4 e8 58 46 7d 4c -cf e8 08 43 24 1b bf 88 eb 4f 85 3e f4 b4 3b a3 -ac - -# PKCS#1 v1.5 Encryption Example 12.8 -# ---------------------------------- - -# Message: -a9 f3 9f 8b a0 64 66 25 0c 26 5d f0 ca 46 57 0a -16 01 12 cf 38 fd 74 59 99 - -# Seed: -88 b3 c2 8b d3 99 9a 86 0b 8d e7 75 93 5b 8e d7 -8f a2 f2 7c 26 8b 24 3a 02 45 af 86 72 25 47 19 -f2 3a 4b 7f ed c0 0d 54 e1 2e 9d 70 1f 64 69 94 -24 b6 b8 7d 14 d9 67 6e fa 95 9b e2 1a 04 b6 43 -5d 25 10 03 dd 15 3d 7d 08 ff 28 d9 3a 93 20 dc -1b bc 3d b3 97 a5 48 94 f2 05 79 f9 3e 4e ad 65 -c3 1a 40 7e b4 - -# Encryption: -19 83 96 50 b9 25 f1 f9 6d 61 1e 4d bb 91 49 93 -54 5c 67 39 0c 32 93 5f bf 82 25 9d ad 10 f2 37 -30 eb 48 f3 42 00 46 5a 20 38 72 77 e2 b9 61 e0 -83 18 d2 07 74 47 c9 10 92 71 e4 de d8 ff 3d c4 -f3 79 ee e4 55 ae 96 08 1a 1a e2 4b 96 ca 73 0a -62 f7 ac c5 a5 ea 52 28 e3 a4 8e a6 74 1c b3 0e -82 9d 55 09 cc c6 c2 87 c7 29 1f 3a 1d 89 d6 26 -bc 98 15 77 de 52 a1 1f 12 ae 21 43 d3 b0 b5 2f -86 - -# PKCS#1 v1.5 Encryption Example 12.9 -# ---------------------------------- - -# Message: -68 - -# Seed: -53 8b 09 5e 4f 2a d6 77 30 68 74 21 91 52 42 25 -1d 07 f6 61 ed ac 7f e7 9e 31 d6 c3 45 af f5 9d -f3 88 c7 18 2f ff 0c 04 27 b5 99 35 c6 91 da b8 -bc 42 be 47 d7 69 11 88 0d 91 7b 86 27 18 b4 c1 -c1 88 8d 42 20 b9 f8 23 1a cd f1 2d 9b 85 18 6b -e0 95 0c 1a ff 84 cd 0f e3 65 86 a5 0e 7e 04 b1 -72 ca 9c 85 9e 2d ed 6b 8e a5 79 dd 5e 6e ee 77 -2c ca a6 b4 a5 d8 ab 17 31 a8 35 d6 a8 - -# Encryption: -1e 86 8a db 0e 65 32 80 60 4e 8d 3b c4 d9 69 84 -a2 0a a0 9d 48 0b 4d ff ac 62 ba 78 cb b7 ee d0 -64 5a 6d 94 d9 d2 f2 d1 e9 17 c1 46 b4 1f aa 3d -1d 2c 19 01 05 36 8f b4 84 06 a1 d2 42 6a f3 dc -c8 5b d0 2d 5c 26 c8 97 cc b2 2e 57 59 12 64 1a -18 8e f4 ac 47 a0 a9 fe 9a a2 70 6d 8e 10 61 f5 -d9 30 63 f4 90 17 00 3b 23 09 ca 7d 8d 36 70 3b -fd da 3f 7f 43 df 15 8a 15 bb 22 13 9a ae 15 10 -77 - -# PKCS#1 v1.5 Encryption Example 12.10 -# ---------------------------------- - -# Message: -35 65 87 e6 c6 c0 b4 6c 24 45 e0 18 63 52 76 ab -84 5f d1 07 6d 10 7f - -# Seed: -e5 d3 3e 4d 93 c7 08 44 ee 4a 01 65 56 24 2d 08 -e8 e6 2f 1a 7f 79 47 79 e2 23 ee 9d fb 23 1c 3a -52 0f 29 7e 50 73 e4 f9 2f 53 5c f1 44 55 7f 94 -ee 1e 1e 5c c6 bf 4c 0c 0c 8e 5e d4 0d 06 63 56 -06 f7 54 cc 2d d8 3f e0 2c 57 6c cd 2b 83 5f d0 -f5 3a 99 08 3f 4d 15 bf e9 26 88 99 ef 09 ff 5f -2f 3c ec 9f 9b 8a 7e - -# Encryption: -15 d3 64 a4 49 9b 30 a5 f7 8b 6d 7d 4f 66 7a 1f -76 d7 15 15 8f 28 01 19 b0 55 e1 f2 66 3f c7 96 -e3 3c 0e b6 4e 34 a8 da da 5c 81 75 42 57 a8 bd -f0 ed 81 15 f6 07 b7 c9 cc a4 81 f7 45 20 b6 d9 -ac 98 f5 e7 2c 2b af 3c bb 6b d9 ba ea 5d 75 86 -0c bd ae 34 03 fd 5c 37 96 4a ae 64 36 6a b0 9b -c9 c6 72 76 95 14 48 19 3b b4 b1 af a2 70 79 c3 -41 70 a2 69 56 51 0d 44 27 64 22 99 08 42 0f e8 -0a - -# PKCS#1 v1.5 Encryption Example 12.11 -# ---------------------------------- - -# Message: -e1 53 27 6a 68 79 67 8f ee 19 89 48 28 d6 26 2e -a3 9a d0 54 c8 9e dc b2 3f 72 dc da 1b 00 73 c2 -87 62 02 18 d9 2d 0e b3 0c 62 af bf 2b 45 df 62 -d0 66 65 f8 05 25 b6 72 7f 95 e3 42 29 e6 82 a8 - -# Seed: -2a d7 14 2f cf a3 bd be b7 55 b2 c5 b5 cf 13 e6 -96 9e b7 3b 7a 06 bc 29 bc ad 7e 75 30 a5 90 23 -0f 6a 43 fc 03 d6 c3 a9 c6 41 e5 3a 41 77 d5 75 -02 91 ec 6d 4b 33 f8 71 66 8a d8 56 90 77 - -# Encryption: -17 8e 49 77 0a 4c 8f fb 7f 65 f3 82 cd b5 76 e6 -08 e9 75 c4 37 13 39 10 2b 95 2a 1e 71 cb cb 91 -fd cd 0c 0e d5 a8 5f bd 26 3d a6 a7 4e 49 1f b0 -4b 60 a5 96 1d 8e 6a c7 24 ec 8a 81 61 c2 2a e3 -10 40 7f 59 f7 e6 02 da 48 aa 2d ad 68 3e 88 db -1d 84 29 5e 0f ba 5f f2 f6 73 df 32 85 4d 01 b7 -1a 89 46 0f f0 e6 e1 be 98 ae bf a2 27 e3 97 ea -cc 8b 23 17 41 47 c4 4e 16 20 1e c6 ba bd 16 5b -a4 - -# PKCS#1 v1.5 Encryption Example 12.12 -# ---------------------------------- - -# Message: -fa 4e b9 31 a7 e2 09 0f 31 ed b1 ff 7d 83 61 - -# Seed: -43 7f a1 51 f4 34 05 db 22 42 2c b3 5d 1c 57 61 -16 1c b9 a7 8a bc b6 f0 6d c4 e7 a8 69 48 1f 40 -b2 1a e1 d3 3e 07 5c 48 5c d8 50 1a 3c aa 60 18 -32 5b 7f 85 0d 4d 8f 6d cf d2 af fe 19 d3 e6 c7 -08 74 e7 10 11 14 f0 fb b9 82 25 81 ba e6 ba 2b -a1 e7 49 88 81 a5 dc 5b b8 85 27 38 a8 2f b0 6d -15 27 b4 33 44 87 b3 24 01 3e 32 bc f1 7b ab - -# Encryption: -22 6d 77 67 00 c5 e1 dd b9 99 4b 32 91 f1 d3 34 -b6 9d d8 63 06 5f a8 34 21 e0 1d 52 06 ec 2c db -89 90 cf 78 97 31 09 dc 9f 12 6b 60 33 d6 d5 d6 -91 8e c8 50 d6 9c 71 3c b5 bb e3 2e e5 9e 44 5b -cb 4e 50 c6 f1 64 43 4d 2a 6c a6 39 69 a2 9b 25 -03 64 15 b0 f7 cb 21 b4 f8 b3 4a 8d 9b 74 65 3f -ff 4f 5d b9 d1 a6 b5 15 2a 64 48 36 b6 8b 8e de -9d c5 a1 69 dc 60 dc 5f ac 46 8f 24 27 84 58 10 -62 - -# PKCS#1 v1.5 Encryption Example 12.13 -# ---------------------------------- - -# Message: -58 81 15 e5 37 09 eb 15 a3 37 4c 25 32 9e 88 38 -26 e3 21 3f 37 a1 b7 a6 5d e1 2d f2 31 72 f1 7f -a4 96 ff 49 2b 09 17 3b a0 c6 f5 8c 29 3d 47 f1 -48 - -# Seed: -07 81 85 e0 83 cb b0 6f e1 a7 49 74 35 15 f3 a0 -b4 b2 6f 85 3b 10 e5 68 e8 70 82 ce 44 41 2c a6 -7e 59 88 8c cc 0f 50 31 01 52 1a ca bf d9 8f b7 -b5 c1 1d 8a 94 1b a0 3c 49 5a a0 3e 13 52 2f 48 -7f 6e 16 16 be c2 07 2b 39 96 fa ee 29 - -# Encryption: -0e 7e 50 a7 b2 47 b0 29 7d ec 65 c9 52 3f 67 ca -b6 b5 2a 02 5f 53 32 0e 94 86 cd 20 74 10 ca dc -74 e4 b0 3f c0 6b be d5 98 b0 22 b6 3b 37 76 2a -65 fd 35 1c b2 72 7f 3d 80 35 a4 cd ba 9c 6a 31 -e4 ed 6b eb 4f ed 31 34 eb 63 df ce ab 4f 5f 24 -59 e5 9f ca 01 74 75 8a ab 37 53 b5 c1 93 c8 1e -11 49 0f 97 b6 22 b7 3f a7 3f 8e ae 7d a8 39 34 -84 b8 29 79 71 a3 e9 23 12 9c e4 35 7b 64 5c c6 -38 - -# PKCS#1 v1.5 Encryption Example 12.14 -# ---------------------------------- - -# Message: -20 f1 cf aa 63 67 c7 c3 9b 54 a0 - -# Seed: -4a 1c 7b 70 f7 83 ba 0d 5a 26 d4 64 5c f0 5f a6 -10 f5 be 01 77 fd de 9f 2c 34 50 57 db 42 44 57 -fa a4 30 c9 42 4a 54 f7 e5 5f cf ee 6f ae a4 24 -4c 03 97 74 81 ed fc bb 28 88 37 c6 a4 8d bd 72 -96 67 7a 24 e0 6c c9 d8 5e 68 8c 14 09 0f a2 83 -0f f4 96 79 33 ea f0 db 69 4b 6a e4 02 ca f9 c2 -be ff 04 a5 2a 2f 84 7f e4 0f 4f fb df 3d 58 b7 -c4 fd a8 - -# Encryption: -1e 52 84 20 bc bb a7 d5 9c 6c 40 d4 46 d1 aa 95 -6a ff 03 05 36 5b 4d 7c e9 81 0f 22 c3 4f 09 a5 -55 e5 ff be 51 75 03 7f 90 3e aa 6c 40 56 36 36 -d3 81 f4 53 25 b5 e6 1a 2c 70 51 12 55 64 02 a7 -dc be 86 cf a5 4a 6e 6a 50 37 8d 05 e2 1c 95 cc -6c 45 ff dd 05 17 f7 7a 36 b2 24 d1 70 0a 1f 3e -bb 81 d3 67 8a 66 e1 45 34 a8 0a 59 8b d7 17 26 -fe 32 2e 73 9c 17 eb a5 08 da 8a 03 1a 27 f6 bb -28 - -# PKCS#1 v1.5 Encryption Example 12.15 -# ---------------------------------- - -# Message: -73 60 cd b6 c1 59 96 b0 60 33 1e 9f 2a 36 89 95 -c0 64 ad da 56 55 95 27 78 2c 17 0c 69 1b b3 bd -3b - -# Seed: -58 dd 80 f4 fd c5 c9 5d d9 eb 56 ac 80 a0 2d 53 -e8 cc 2e fb 3c ba c6 72 7d 75 b1 e7 b3 5e 05 42 -19 43 3a f5 aa e1 98 fd 62 f2 ec d2 ab 8e 26 38 -77 b5 c9 1e d5 13 e2 35 49 7a 63 19 2d b9 a9 bc -b3 bc a9 7a e9 bf ce df 93 56 44 b2 d3 bc 20 e0 -2a e5 e7 42 4e 81 2a 29 49 61 6b 82 01 - -# Encryption: -20 3b cd e1 b4 12 e3 ce a2 5b 86 30 b2 08 f9 78 -ab 22 c1 da 81 25 07 6e 10 ff 91 d7 bc fa ef d7 -dc d8 39 16 55 c8 86 e8 a9 45 a7 f5 7a 74 ce 2d -c0 e8 ec 7f db 17 cf 19 57 80 d3 ce 80 e0 dd e7 -63 9c 67 72 05 b8 f9 ec ea 11 54 68 97 7b de a3 -50 0b 23 9f ce 0d 7a 94 be 6d e3 33 ea 7e cc 22 -c0 7e 65 d0 eb d6 5a 39 0a 18 5f 18 17 89 e7 ca -8c 1a c2 fc a8 28 bb 8d 28 22 7e 38 c9 88 9c e0 -08 - -# PKCS#1 v1.5 Encryption Example 12.16 -# ---------------------------------- - -# Message: -31 9b 82 94 bd f0 7c d4 06 85 e8 80 09 fa 7b 3f -12 90 16 0e f3 30 67 ad d5 ef 4d 80 fd - -# Seed: -4e 07 d7 f9 63 be 24 ee 6d 8b d4 dd 95 e9 e3 33 -49 30 e0 3e 65 8d 29 6b b7 95 48 6d 72 4e 07 41 -dd 50 73 47 a5 b5 7b 79 c9 0d 3c 90 c1 ae a7 16 -19 09 1a cc 81 98 b5 51 22 da 50 99 58 2e 0d b7 -da 3c bd 3c fd 85 29 8f 31 55 4e 29 cb cb a1 19 -9c e4 70 16 3c a0 33 7c c4 14 ad 32 76 70 81 11 -d6 - -# Encryption: -04 fc 7b b6 fb 64 19 61 2b 6e f5 4b 3c a0 0a 87 -46 51 95 c3 7f 7f 94 0c 23 3e cb 1d 4a 50 5d 3c -56 ed 23 e0 9e 03 f1 45 4f 04 b5 6f 6d a2 5d 0a -6f ca b0 c4 00 87 4a e9 80 6e e1 87 80 b7 5c 6c -a5 66 29 e5 77 e8 e7 b5 d2 fc 2c 44 0b 98 00 19 -5b 58 51 1b c3 a7 95 44 12 c8 f2 73 cc 0e 9d 97 -1a bb dd d7 02 8e 6f 84 87 6a 30 58 a4 54 fe 2f -33 c7 5e 3d d0 62 f1 19 cd 3e ca 81 06 b6 bf be -a4 - -# PKCS#1 v1.5 Encryption Example 12.17 -# ---------------------------------- - -# Message: -79 c6 82 a2 b9 79 fe 5c 96 32 af 18 31 c2 aa cf -0c 6b f5 66 88 5b f5 25 62 50 - -# Seed: -5c 2a 95 6d 4b 5f 06 f7 50 83 5a b8 b2 9c f7 c6 -41 d7 93 c5 56 e1 2a ab a9 56 df de 46 32 d5 e5 -02 d5 90 41 78 3a fd 1d a7 b2 e2 d2 4e 22 d6 44 -78 35 bf 6d 77 c6 ee bc 0d 2d 64 e7 ed 2c 14 17 -18 ad 86 87 c5 97 b7 71 8f 38 bf 1a 33 16 ed ef -f6 b7 2e 28 51 82 88 07 bc ff a9 b8 e1 a8 52 f3 -fa a8 07 f6 - -# Encryption: -25 1d 48 56 b7 a7 58 0d 53 88 01 62 28 1b b4 e4 -1b de b2 a8 7d db d5 ae 1b 30 7d 44 48 be 1f 11 -69 5f f7 22 c4 32 41 5d 0c 74 ba a3 fc 0d d5 11 -66 ac 86 5b 31 0c 4f 5c 87 07 98 62 54 c8 96 04 -cc da bc e6 c6 92 44 66 21 89 8b 4f 5a 08 bc df -64 62 e5 18 ee 3a eb 75 e2 6d 8f 63 a0 6f cb b3 -df 09 8c ee bb 0f d2 f6 37 e3 a7 93 7f 4d 19 e3 -a1 92 4c 16 08 2e dc 33 3c b6 de 37 63 72 46 e4 -98 - -# PKCS#1 v1.5 Encryption Example 12.18 -# ---------------------------------- - -# Message: -1e 0d 18 07 a2 bd 49 6b b0 cb a8 41 c7 71 58 bf -a5 f8 aa 77 d0 56 75 c6 4a 5e b1 85 65 91 d3 48 -54 f8 65 92 5b 37 1b 68 6a aa b4 45 98 b4 a1 6a -b6 b7 93 44 d3 c2 3f 7d 5b f1 73 b8 42 d7 8c - -# Seed: -db af a5 33 2f 0b 55 27 96 63 6d 8a 09 28 b7 d8 -7d 9c ee 3d 4b e6 a3 1c 77 e1 4e 0e 5d fd d4 03 -ef b9 8f a3 38 81 6e 12 62 c0 64 96 fd e9 d5 57 -c0 0c c0 dd 35 fc 33 ac cd 79 a3 15 06 90 eb - -# Encryption: -1b 2e ce a5 fa 90 03 fa b6 55 98 57 c6 d9 4f 95 -70 03 f4 e4 1c 09 45 64 80 4f e6 96 39 e5 40 b6 -8f 26 3f aa ec a1 99 69 7a 48 85 8b 8a 0f ce a4 -91 05 7d f2 fb 8b 35 d0 93 d8 94 ae c1 7c 5c de -5d fd 8f 33 51 2b cc 66 cd e7 6d a0 73 36 98 5a -97 43 5b 6e fe e4 ee 09 d3 a2 8a ff 34 ce 6a e8 -75 0d a4 1e 16 ca 47 e9 38 81 8e 44 a9 b4 1f e9 -1a 6a 80 1d 35 5e e8 d6 60 e2 7e 4f e2 ce 7f 32 -5b - -# PKCS#1 v1.5 Encryption Example 12.19 -# ---------------------------------- - -# Message: -1c 10 5d 5e be a3 66 46 a9 72 84 c1 7a 86 c4 - -# Seed: -c6 f8 03 40 a6 55 7e 07 53 a9 57 3f e4 f5 21 49 -77 ef db 08 2a 50 eb 5d 5c 51 7d 46 72 9f d2 a3 -4a f7 ce e1 aa 46 b7 9d 47 e2 5d 83 09 0a eb 4f -50 22 98 c0 31 37 24 fa b5 4e 54 be bb 48 d6 cd -9b eb dd cb ee 0f 07 53 77 27 d6 5c 50 e7 d4 cc -0c 6d 19 fc 48 0b a5 78 67 26 2c f2 ee dd 9c fa -ba 60 7d 65 82 87 eb a4 2b 46 99 44 cc b6 12 - -# Encryption: -05 b2 3d c0 c6 2d 90 c1 77 1e ba 37 8e 43 17 9d -7c a6 af 51 5e 26 19 ae 4d 7c 8f c8 bd a3 78 cb -f7 a1 db ba 1a 14 f4 94 c4 e0 d7 13 38 79 7c 7e -e0 6e 1a 79 e9 ff 28 56 fb f7 4f e6 f1 a7 ca 6e -5b 9c a2 83 c4 c9 7e 61 cf 9f 40 73 e0 32 ca 27 -d6 9b 1b 4e eb ea 77 cc 95 a9 28 1f 26 b6 4a 05 -a9 39 44 c8 2c 5a 13 42 8e ce 21 fb 44 01 ad 42 -6e 7a c1 f0 5b ff 84 b3 47 cd c4 db e5 2e 67 8a -ed - -# PKCS#1 v1.5 Encryption Example 12.20 -# ---------------------------------- - -# Message: -f1 04 02 f0 02 05 c5 27 57 ed 6e 9d - -# Seed: -e2 ae e7 fc f4 3c ed e0 75 52 a2 df e5 b5 a9 ef -80 82 76 d8 f1 0e b3 f9 bc 50 f1 bd 94 0a aa e6 -34 c9 d8 a0 78 8d 44 d4 1e 8a 5c 60 36 49 ef ea -83 03 32 31 51 6c 69 d3 3e 12 f1 f5 d3 f0 ac 1f -c2 3a 9b 3f 5d a4 e0 ef 6e 45 50 cb 43 fd ff 02 -b2 5d ac 86 27 2d 66 db 59 cd d6 35 f9 c0 dd 0d -aa 08 57 91 0c 15 88 1b 16 0d 70 ea 53 40 5a a9 -59 f4 - -# Encryption: -0b 96 56 31 78 32 a9 40 c7 95 bb a5 8d aa 15 9a -4f 73 3e 82 6c e5 5a 4e c5 64 33 c5 16 84 44 4c -78 e2 e2 fc b3 7f 85 ad 87 79 16 52 2d 8a 35 a4 -3f 53 c5 95 17 a8 18 e5 21 e1 98 2a 50 91 bf 2c -68 b0 0e e4 9a bd 90 dd 77 6c 02 f6 4f 34 f6 80 -a8 8e ee 05 ec 08 88 92 bc 0a 95 55 b3 f2 0c 8b -ee 57 9c 0d dd e1 51 1a 18 af 98 bc 1d 9c f9 0b -81 bf 13 2a bd 58 97 0b 3e 84 d8 14 e2 7d 02 5b -73 - -# ============================================= - -# Example 13: A 1031-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -55 5d c2 ba f0 41 b7 f0 9a 04 78 42 3a eb cb 5f -49 b9 5d be 15 70 e9 a5 42 12 8d 33 22 87 86 6a -c4 cc 63 e7 6f 8e 3a ef 22 c9 75 3a 54 51 99 94 -24 52 41 8a 67 d1 a2 23 0d db 6f 42 22 c6 63 d3 -8e 80 05 0e eb 67 95 6e c5 f5 49 94 a0 be a6 95 -fa 59 fa df 2d cf e7 ac b5 4e d9 da 3d 0b eb 12 -2c 8a 69 1b 0b b5 1a e6 5a 77 4d 75 b1 b3 49 cb -68 c5 17 cb d3 86 ae 48 2f 05 ee 46 03 ec f2 95 -5d - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -55 5d c2 ba f0 41 b7 f0 9a 04 78 42 3a eb cb 5f -49 b9 5d be 15 70 e9 a5 42 12 8d 33 22 87 86 6a -c4 cc 63 e7 6f 8e 3a ef 22 c9 75 3a 54 51 99 94 -24 52 41 8a 67 d1 a2 23 0d db 6f 42 22 c6 63 d3 -8e 80 05 0e eb 67 95 6e c5 f5 49 94 a0 be a6 95 -fa 59 fa df 2d cf e7 ac b5 4e d9 da 3d 0b eb 12 -2c 8a 69 1b 0b b5 1a e6 5a 77 4d 75 b1 b3 49 cb -68 c5 17 cb d3 86 ae 48 2f 05 ee 46 03 ec f2 95 -5d - -# Public exponent: -01 00 01 - -# Exponent: -05 97 87 bb 01 23 fc ed 98 d9 34 1b 7a 8a 99 9e -db 50 76 30 8e 6d 00 11 20 3b e0 dd f9 a4 11 0d -0b 69 2c 1e 2b f3 90 2e bc 03 a0 57 3a d0 c1 93 -af b1 67 b3 ae 4b 50 28 a5 ae bb 22 04 ef 23 f8 -e5 83 60 be 94 84 95 1e 34 71 11 76 06 2e 53 e3 -f6 38 74 fc 9e 35 91 a9 d9 06 8a a5 e6 c8 c7 a9 -ab 08 e9 79 24 70 06 6d 71 a0 7c 34 33 dd 70 3a -42 a6 b3 a9 b1 bf fb 31 49 49 8d cf f8 b3 57 56 -ed - -# Prime 1: -0a 7d bd 7e e6 de f3 87 5b 4c 55 9f 56 69 30 7d -17 6b c1 25 b0 9f 5e b8 26 01 b8 13 48 57 6c 1c -a7 dc f4 c2 bd 7f 2b 42 a2 c5 46 00 02 fc e0 a9 -a2 1d ac 5a 97 97 db 23 3d 9d 4a 92 93 ad d3 df -73 - -# Prime 2: -08 23 0f cf 26 fd c5 75 11 9c f9 05 78 d3 66 56 -4c fd a8 65 a2 82 0f 38 bc d6 3e ca a0 95 57 65 -77 2a 88 32 fb 31 69 7f d0 dd 45 bb ec c0 4d d6 -a5 9e c1 1c 1d 5c 6e 87 7c 6b 9d 77 c6 a2 76 e3 -ef - -# Prime exponent 1: -08 d1 c7 d9 c4 d0 2c bd df 7c 7e 86 62 a8 2f 41 -19 cd 56 24 0f 25 0b 05 97 bd de 37 27 9b 86 a1 -58 64 a1 c6 8c 73 39 b4 dd 0d 26 59 a0 29 61 dc -79 12 a4 ef cb 7c b7 96 1a 97 fe 36 d6 bb 4c e0 -0d - -# Prime exponent 2: -01 d4 91 3b d1 d3 87 d5 3b af 09 bd 17 5e c6 48 -67 6d 2f b2 1d 0a 10 8e 7c bb dc c8 0b b3 4c 43 -80 b8 ca 86 5d 46 d2 2a 74 3b 31 f2 81 e1 08 21 -5e 84 05 80 63 82 65 42 88 d4 54 49 9b 1e f4 8b -75 - -# Coefficient: -08 7b 2e f2 11 44 8e 5c 96 1c 9f 6d fe e6 aa 26 -8e e8 97 7e 31 1c 07 cc 8d b4 72 da 6c 49 86 3f -aa f3 3b f5 05 dc fd 81 f5 3a 53 be 12 1e 44 5e -89 d7 e0 38 ef 27 f3 72 7b 51 2a 2b 80 94 41 20 -ea - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# PKCS#1 v1.5 Encryption Example 13.1 -# ---------------------------------- - -# Message: -7b c8 1d 81 46 e3 59 - -# Seed: -76 65 5e 4a d8 fb 99 34 d1 84 7c c9 0c 02 47 3c -57 2b 5f df d1 64 a9 70 a3 cd 96 bc 8c d7 96 ac -80 2c 50 28 22 90 ea d4 c7 7a a5 cc 2a 7e 34 34 -18 c9 df 47 ef b8 87 86 af 4c c8 d1 82 1c 50 07 -39 09 e8 4f 7b 45 1a f4 a3 2a ee 6c 7c c8 97 ee -f7 66 0e 1c 4c 53 5d 10 03 9d 3a a2 03 5c 98 51 -01 25 ec 5f 2a 2e 9d ac 63 95 89 ff 8b b3 9f 07 -43 8d ef b7 d1 33 77 - -# Encryption: -14 6d 65 12 df df fb c0 2d 5d 54 bf f3 e0 36 a3 -5b 4c 2a a9 44 d6 f6 72 47 93 30 65 37 08 1b d1 -1e e5 68 a4 e9 71 9f 1e 31 f2 d1 4e 18 c2 da 62 -44 70 c5 b0 ff ab 39 7f 92 31 b6 ef 46 34 f6 3a -18 28 5d f3 41 45 17 a5 1f 93 58 6d 66 b0 3c ab -1e 78 a4 eb 94 1b 9d 3d 7f 92 03 b5 9e 1c b3 bb -48 64 b6 46 dc 17 a0 64 11 eb d5 ff 03 37 20 58 -88 1b 4a 24 b2 4f 4c 2d cd 5c b4 4c 2e ea be 6f -72 - -# PKCS#1 v1.5 Encryption Example 13.2 -# ---------------------------------- - -# Message: -68 6a 81 0a 03 1d 80 61 e4 1a 77 6a 7d fb db 3a -f6 26 fe 97 69 de ee a4 60 ba 28 67 ac f0 3d 9f -92 4d 32 1e 8a 8f 42 5c 28 51 92 98 67 a3 26 ae -27 5b 49 d2 - -# Seed: -f7 9b 49 f6 a6 be 3e 68 88 4c 80 df e1 e8 50 1e -54 4c a7 82 23 88 43 d4 19 76 41 12 25 0e dc 1b -69 c7 d1 c3 58 7f dc 75 98 7c 62 cb 4c 33 bb 81 -20 2f 72 db a7 ee e2 4b fc f8 9d 4d ae 15 0c 07 -27 24 58 fb 01 b6 cd 27 09 25 - -# Encryption: -08 8a 47 f1 1c b1 34 de c4 b5 08 77 25 e8 a5 bd -04 f7 fe 58 2a 69 91 4f 68 3e e6 de 7c 32 4f ed -7e 07 f5 70 05 c0 e0 df 75 00 e3 70 a4 2e fd 6f -e5 b2 90 19 95 19 b1 98 06 b6 e6 91 69 8a fd 95 -17 d7 80 da 0b eb f7 0a 26 d6 5c 5b 64 e3 40 a6 -40 5e 88 95 55 df a0 a9 2c 42 9a e9 c3 ec 88 e8 -88 ee da 04 5e 41 0e 3a 9e 61 99 ab 39 eb 1a c8 -64 e2 28 c2 cc 1b 64 e3 36 16 95 b5 aa 11 3d c5 -a7 - -# PKCS#1 v1.5 Encryption Example 13.3 -# ---------------------------------- - -# Message: -18 54 4a ad 24 ab 07 5d 3a - -# Seed: -23 20 4b 8a d9 45 75 f6 e2 f4 6c 79 7b b8 73 aa -3f 46 1a cd 05 e7 db 78 46 a2 31 57 59 2d 52 e9 -a9 a7 04 38 19 c4 88 96 27 5e d9 df 0b 1e 54 04 -93 c0 77 ea 15 41 9a fa 87 dc 35 f9 fd f7 ab 8a -af 47 ee e1 d3 3e cc 28 95 06 45 f1 b6 91 38 2d -87 54 1e d0 64 06 93 0c 7e e1 10 9a a5 ca 75 a4 -90 93 4e a8 d3 b2 a0 4b a1 52 1b e0 92 c8 68 f7 -ea 5b e3 78 ea - -# Encryption: -34 d6 e5 46 d6 9e 27 06 cd fc 6d 9e 74 18 f8 be -03 e4 57 56 a8 b1 9b 60 c2 1d 27 34 20 aa 7d 5e -bb bf 46 0e f4 c8 4f 6d 47 77 e6 bf 20 3f f9 18 -5f d5 7d c7 23 b5 8f 35 c1 e9 b5 ff f4 7c f9 5a -e5 69 a5 cb 64 dd 9c b8 d6 40 7c 0b a5 ef d1 48 -f1 8b 56 96 b0 47 da aa a2 77 ed 8d 45 28 61 4e -e3 da 52 38 71 32 b7 a9 cc fe 07 3b e5 03 32 c9 -e2 83 73 53 c6 7d aa 0f df ef c3 b6 52 cf 7d 79 -fd - -# PKCS#1 v1.5 Encryption Example 13.4 -# ---------------------------------- - -# Message: -d9 0f a3 8f - -# Seed: -3e 09 f6 50 6f 7f 71 91 47 ae 21 e3 94 53 ae 0b -41 60 98 da 10 3a f8 4c 0f 7c ef ae 50 01 99 c9 -85 59 67 a8 30 0a 1a 7f 8d 2c c1 3b 91 72 7e eb -d9 3c f7 7d 3f ac b1 9e 83 a8 40 eb 58 3b ce a6 -c6 11 3a 9c 6f 6f 1f b5 a0 b3 32 55 9a 6b 43 15 -47 45 7c da 1d 3d ce e3 41 d1 71 c6 2e 95 e7 ea -ae 16 ae 0e af 1c 1f e8 10 fb b0 b7 13 8c fa 3d -66 c6 38 50 f3 81 e4 9a 2d ad - -# Encryption: -27 13 3f 43 79 1b 39 22 7c 8e 95 4e 1c aa 83 0f -a6 59 95 f8 a9 f8 8e 0d 1f 75 67 85 ed 5c 8c 78 -54 fb 1a 9d c4 a9 5f a4 4d bd f0 f2 85 99 c4 72 -84 93 79 75 0a 6a 1b cb 42 ca fb 5b bf e0 8c 65 -10 6d c8 40 cb ec 8e e2 cb 5a 20 6c 81 18 aa 06 -1d a4 d2 1d 1b 5c 46 11 7f 77 c8 96 bc 71 ce e2 -f8 75 7a ff 5c b2 b3 c3 47 74 55 8e 8b 82 ed b4 -ef 9b f2 d4 f2 ca 4f c5 97 fa b4 0a 2d 74 e5 23 -3a - -# PKCS#1 v1.5 Encryption Example 13.5 -# ---------------------------------- - -# Message: -fc bd d0 24 8d f8 57 af 17 5b 43 96 87 5c 00 6d -51 14 cc 11 16 42 80 04 38 08 aa 79 88 6c 4c aa -29 11 7b f3 ce 45 a9 be 55 07 c6 b8 bf 0d 30 - -# Seed: -2c 9d 14 57 ba 44 50 df 40 21 e4 e5 11 83 f7 95 -d0 91 c0 7f 6a e0 dd 96 2d 57 28 c5 4b 7f c3 c7 -72 d7 9d 7b ec e1 bb 0c 99 6c 9a c0 7f 99 54 dd -a7 68 7b ec 86 bc db 31 40 b2 45 bb 5e 01 27 5b -38 d1 f2 52 33 5e 36 c6 8c 0e 58 f4 ce 11 7e - -# Encryption: -2c ed de f2 02 69 1a ae 42 71 85 2a 89 83 de 7c -21 4c ee 00 db e1 a1 58 84 f4 c3 c1 de 7a 3e a0 -1e cc f4 7a e8 6c 26 93 24 ae 52 37 73 37 b6 ca -82 e8 5d 55 3f bb 2e e5 f9 77 dc 66 4e 14 2f 1b -54 53 8f af 85 ca c2 7c 29 f2 ed 0c 40 42 67 33 -5d 48 ea 40 e8 a3 dd d8 96 bb b3 e0 ed f0 e1 6f -9e 89 44 68 3b 8c fb aa b5 ea f2 25 30 f1 58 c4 -88 0b c3 e4 60 c0 6a 24 03 42 21 0a a8 7b 79 09 -68 - -# PKCS#1 v1.5 Encryption Example 13.6 -# ---------------------------------- - -# Message: -25 f2 a3 06 ea be 6e 3a 18 30 dc 93 6b fa 41 cd -eb b8 80 05 17 5d f4 a3 c9 c4 64 23 01 45 61 11 -5a a8 - -# Seed: -cb 8e 0f f4 1b ab 01 a1 42 f9 6e 7d 7c d3 92 82 -0a 82 a1 73 66 74 b9 21 35 ef 33 08 96 88 dd 30 -b2 c2 f7 ba 11 1a f7 8d 3f 76 a3 7f 66 7d b3 97 -5f ce 64 ec 9a fb 09 68 50 7f 7b 31 09 7e aa e4 -88 1b 36 24 06 56 16 ca 09 0c 20 4c 1f a4 be 13 -48 50 ea 5e 90 fe cd c8 45 b9 d8 39 - -# Encryption: -4c 7a c8 12 45 e7 d4 de 3c 4d bf b3 15 c4 68 34 -1c bf 22 87 57 35 c5 f8 05 90 50 58 53 06 8d 6b -e7 03 9b 1c ee 6d 07 ec b7 66 9c 42 f6 b9 2f 2a -71 f6 45 f7 2c ba ff 76 34 16 37 d2 f1 d6 b1 fe -ce b0 7f 21 e1 4c 70 fb 77 bc 7f 87 b0 31 c2 c8 -f2 ad a4 ec 43 e9 12 68 2c 2f 49 63 9e 75 71 57 -18 77 fc 48 1c bf 26 98 b3 73 15 bd 4b 93 07 83 -f4 79 45 64 2b 7d 81 5e 04 32 d4 5d d1 d0 d3 b2 -a5 - -# PKCS#1 v1.5 Encryption Example 13.7 -# ---------------------------------- - -# Message: -a0 da ab 4f 9f e0 4a 2a 51 bf 08 32 70 11 5d 0d -06 dc 29 21 cf 8d d1 3f 5c ff 26 04 bc 55 1e fd -98 3d 9b 25 b7 27 4f 3c cb 0a dc c1 1b 1a 39 54 -ab 9d b4 - -# Seed: -c8 1d 1c 02 f0 6e 7f fd 6e 03 b8 1b 71 93 aa bd -ac 56 63 ab 14 25 a6 7d 1a 29 50 88 5f 5d 1c 4b -72 5e 20 9d cb ce 9f 7b f2 96 75 23 42 f1 84 fe -a0 6a 7d 6c b2 bd 39 b2 a3 18 07 51 64 a2 e7 61 -b7 02 70 2b 01 92 46 c1 e5 0e 6e - -# Encryption: -06 c0 6c 97 5f c6 b9 c2 60 d3 d8 81 3b 57 14 24 -8b eb 39 9b 7d 68 fc ac 25 03 38 ca c5 4c 40 72 -95 9f 62 03 84 44 e9 e6 66 ba b5 f9 36 06 70 47 -bc af 4b a4 ed 68 c6 c8 18 57 46 29 32 56 e7 c7 -24 16 65 81 54 de c0 67 f4 25 0d c6 b2 9b ba c1 -8e 82 1e 49 a4 c9 b1 63 83 1f 7b b3 83 92 32 6c -6b 46 85 46 4f e4 f0 26 c9 ae 4d bc 58 49 47 7b -4c 26 0a a4 ac 02 d2 1a 26 40 20 f1 0c a1 1b 4b -0e - -# PKCS#1 v1.5 Encryption Example 13.8 -# ---------------------------------- - -# Message: -74 3c dd b3 61 c0 bb 32 47 64 95 ad 5d c6 3a 2b -ce 5f ba c1 c8 c2 03 93 69 32 67 d8 43 f2 8b 8c -f3 ea 13 e3 74 e0 9d 0a a3 f7 ae 5d 8f 72 d8 e6 -cb 9d bd - -# Seed: -f7 2e d2 d0 69 b8 ae 50 27 04 6e 03 27 b9 87 84 -58 09 b4 e8 16 c8 86 58 24 fc 4a 23 01 b4 56 80 -2b 18 9c bb 43 f0 48 32 ac 25 c8 48 d7 4f be 1d -62 5a a9 8a e0 5e b6 25 47 76 1c 78 b8 17 61 c3 -03 f9 3d f3 fc 0f ea 3c 5a 7b b1 - -# Encryption: -38 3e bb f1 59 e1 d0 a2 1c 74 eb 61 e3 64 3c b6 -31 be 18 c7 a2 a5 4e 24 89 33 58 7d 34 5e 99 52 -72 46 6d c1 bd 61 3a dd b4 cd 7b a5 01 92 fc 2d -89 4d 7f da f7 83 63 b0 79 d9 98 01 9f 16 42 31 -cc 2d 75 2d b7 6a 9f 9d 0c 52 04 bf b0 f9 93 05 -53 09 6b 5b 76 80 b0 89 4f b9 9c 11 42 5c 67 d6 -5d 96 5e 35 12 8e 15 47 46 b3 fe d8 d0 16 99 30 -70 a7 0e 07 eb eb e0 6f 2f 4e 97 6c 9a 63 fb e3 -20 - -# PKCS#1 v1.5 Encryption Example 13.9 -# ---------------------------------- - -# Message: -e5 31 92 fe bc d3 69 58 bd 08 03 f2 ea 0a fd bf -df 99 3b 58 a9 e4 ee 70 df 95 b0 6d 4e 7d 74 b6 -74 5b 87 f5 81 f3 42 f8 ae f9 ae 4c 31 82 c4 19 -9b 65 51 fe 18 f8 d3 b9 ff e4 - -# Seed: -ad 98 2f a7 29 f2 7f ce 8a 67 49 03 ec ac 69 4d -d3 34 13 c7 8e 34 28 ae ed 46 9f 84 d9 57 5c 6d -a2 75 29 f2 c1 4b 53 b7 58 d2 0f b6 b2 47 c8 29 -c5 fb 1a 16 af 55 07 9a 70 73 cc a0 56 25 96 2b -6d 1a 6b ef - -# Encryption: -22 1d 88 a8 6c 9e d3 7a a0 9c f5 72 54 97 82 e5 -8c a8 d4 85 1f 01 6a cf 28 9e e8 bf 23 79 0b 1a -8f 14 8c 16 55 08 bc 3f db 1e f9 c9 01 16 27 42 -7c 5f 32 e5 ca b8 50 cb 6b c0 bc 04 a1 1d a2 f0 -18 13 f3 41 41 7b 3e 63 2b ca e0 02 97 7d 64 ff -c9 62 c7 fa 75 72 f5 6d 26 17 e2 a5 2d 3e f9 17 -c4 4a 33 b7 15 82 af f1 39 0b 7c 77 4d 60 7c 8d -57 8f 7b c9 0b 35 80 d7 7b 03 73 19 14 77 bc 14 -26 - -# PKCS#1 v1.5 Encryption Example 13.10 -# ---------------------------------- - -# Message: -d0 eb 48 0e 27 45 77 9c 8a 30 fe 82 0a ef 56 d4 -ce 39 ef 84 ea 40 c7 df 0c - -# Seed: -46 5f 91 e3 f0 7c b7 22 83 bc 2b be 52 8b 9a b3 -68 16 54 fe 20 b6 1a 33 f1 23 ad e5 2e 83 2f fa -8a 1b 74 a4 44 3c c8 92 95 a2 1a 2a ac 98 74 da -0a 56 79 d1 8c b5 c4 cd 69 0b d0 a2 0c bd 9e 9a -a0 72 aa 87 13 44 8f 95 e5 d6 a6 e6 24 d5 b9 08 -5c fc ec b7 99 2f 10 ea 2d a6 d6 26 eb e5 43 d8 -70 22 36 ee 6c - -# Encryption: -06 f3 f8 c7 0d 0f c4 e7 44 73 e6 8f d2 3c c9 df -1e dd 42 35 b4 28 b7 72 a0 83 b4 1c 34 51 62 5a -6f 15 de a4 bf 31 3b f4 f0 3f dc 4f e9 f6 a2 07 -1a c6 9a a3 f0 fc 41 57 ef c6 21 f9 59 40 61 f6 -c1 98 06 bd 5d 75 9a d0 23 ca d1 48 e4 47 d2 59 -b6 2b f7 34 25 91 be 83 ba ec 77 71 4c fe 2b 90 -1f 36 9a ea 68 02 48 ba bf 06 87 10 cb b9 70 48 -4f 32 4a 23 52 53 a3 1e 02 25 34 ab ec 7b 39 96 -06 - -# PKCS#1 v1.5 Encryption Example 13.11 -# ---------------------------------- - -# Message: -1c 42 97 f6 df c0 7f fe 57 59 aa 1e aa 5b 79 37 -8a fc dd 1a 9a 33 a2 13 3a 39 ac - -# Seed: -a7 af 2a 86 01 e4 08 c3 18 fd 1e 0f 82 44 5b 50 -95 44 d5 ec 97 a7 95 8f 59 4b 20 54 c5 09 f7 ef -fd d4 16 30 6b 2b 2c 91 b5 a6 37 a1 56 82 0d 60 -1a 23 ff db 31 fb 35 d3 05 aa 93 74 57 8e ef b8 -10 2e 8b 72 44 19 1f 4e c7 4a a2 6a 0b 7d b3 6c -ab 44 99 9c 81 b3 61 57 01 6b 55 89 06 e5 d7 08 -8d 51 32 - -# Encryption: -3c df 2d c6 7a 4a a5 31 cf a1 42 80 08 bd 05 44 -ab bd 03 29 22 dc c2 43 6d a0 b5 d7 ef 9a 70 17 -e6 19 3a 8b af 38 c5 8e 91 96 2d 65 a3 75 f0 8c -1d 55 57 9c f9 4a 79 5c 9c 70 b6 e4 2e 16 43 ce -f5 40 dc e1 e9 86 dd 99 88 87 b6 95 52 44 4b 6d -e9 3b a7 d5 f7 64 83 54 bf cb 70 21 39 ed 39 54 -94 7d 7b 18 0b 6c 02 bc ad 82 43 a0 ab 27 ca 66 -52 76 29 1b 46 cc 31 8d a9 b5 f6 0a 04 af fe bc -b0 - -# PKCS#1 v1.5 Encryption Example 13.12 -# ---------------------------------- - -# Message: -00 92 7f ca 7f 5e c7 6f 54 8d d4 82 63 e3 39 be - -# Seed: -de bc 2c 1f 22 d9 32 ff cb 89 7c f1 0a e6 2c 3e -05 1e 3f 78 46 3a e6 7d 95 61 cf 1a 73 d5 5c 4b -14 ac a6 c2 1d 83 ba f9 76 cd 8b f2 46 c2 29 78 -61 a6 b1 e9 c9 ef 30 81 c5 1c 4b 68 7c 67 b5 dd -0f e0 f7 55 3f 73 8c 2c 8a 5f 81 d1 26 8a 0c 2d -4a 46 1d 63 5b 0e 59 d2 3b a4 17 ab b8 04 5e 9c -10 d6 6b 0e c8 92 f9 53 c6 f2 11 f0 2f f0 - -# Encryption: -49 b9 20 89 b5 2a b7 8c 33 b5 bb 30 32 cf 70 24 -94 4a c6 8e 13 9d 2d 56 06 8c 7a 26 2a 53 e7 80 -9f b5 b0 15 65 cc 65 61 d7 13 30 46 87 52 30 ac -21 75 64 72 96 cf 2b 48 47 e1 2b 73 63 19 72 53 -21 be a2 64 75 7d e0 eb 49 88 72 d8 9a 4d 7c e4 -a1 bd b7 33 5d ae a7 8b a1 96 fd 50 d9 03 82 e6 -d6 2f 8d f7 ae 68 5a 1d fc 84 9e 11 99 7d ee 88 -60 d1 0f 70 7b 0d 35 36 5a 81 24 30 73 1e 7a 50 -8d - -# PKCS#1 v1.5 Encryption Example 13.13 -# ---------------------------------- - -# Message: -8b 6d f2 d6 da 63 1a c8 d5 55 6a 26 97 54 28 fc -4d 20 ef 5b 4a 1f 06 8e d2 e5 - -# Seed: -ff 2c 06 98 85 2d 1b 0a e3 c5 c5 c9 be 26 e8 3c -90 44 84 2c 16 07 f5 f4 08 6a 6d 6c f1 08 ad ca -61 ea f6 65 40 0d 7c ff 2a 3a da df af d8 0c 64 -95 6d a2 d7 d7 c1 35 ab f5 a0 d1 76 06 25 56 eb -4d 8b 75 b9 5c d1 1e a9 c0 44 2f 84 6f 03 7d a8 -77 29 02 bf fc de 65 59 e1 b5 9e 60 c6 d0 f9 89 -6b a5 c3 c4 - -# Encryption: -41 52 76 69 80 33 39 eb d8 f2 d1 cc 18 6c 7e 8e -bb 80 cf 4b 94 9d 8a 28 43 65 32 9f 3c e4 6e bd -ac 0a 96 9f 67 61 90 0c fe 34 2b c8 4c 7d 69 51 -ac cf 45 28 0b af 24 a0 cb b2 42 a9 42 18 ef 9f -d3 71 b1 e0 08 24 62 62 07 0b f5 54 ed 57 00 7b -97 39 79 16 35 86 1d 86 c6 5b 1a 82 56 f4 25 f9 -f3 ae 51 9e 1b 1b dc 58 75 b8 78 dd cf c1 47 0f -ee f2 ae eb 01 4b 7e 33 ef b9 f4 dd 07 83 d1 71 -23 - -# PKCS#1 v1.5 Encryption Example 13.14 -# ---------------------------------- - -# Message: -ea 03 96 69 bc d7 a8 cd ce ab 58 55 91 b5 63 61 -e9 0b da 0e a4 40 10 49 64 e8 89 ec e1 8a eb 04 -ce 0a b5 b1 cc b2 30 ae 03 25 5a 39 - -# Seed: -20 4f ae b3 13 96 5c c1 a1 8f af 10 39 fd de 68 -1b c4 3b 22 3e 28 bc 47 1c 50 42 3d a0 bd 79 7d -6a 8c 73 8c 54 03 3c 8e 55 9e a2 d1 0c 3b 79 b8 -0e 2e fd ec fe 89 1c ea 2e cb 34 51 a1 a8 e2 ec -2f 44 7b 79 8d 7d e5 64 1b da 4a a9 90 b3 01 e1 -dd e7 - -# Encryption: -4c a1 c8 5c e3 c6 20 d4 29 91 cf 41 73 3e ad 26 -a0 93 11 18 5f ff e5 8f 41 28 8f 6d 0b b6 84 5b -2d 5a cf 1a a0 6c 78 d7 1f 76 93 96 a9 43 42 03 -e3 8b b0 1f d8 8e b2 3e 6b c5 1b a0 c5 f3 ee b3 -27 13 ca d4 d0 87 80 50 61 ab 47 3a 15 67 e7 9b -bf 4e ae 49 36 f1 8d 02 05 b3 74 6a 17 e0 64 8c -52 22 3d d9 f9 99 72 81 b5 35 ab 2f b3 cf f0 3c -a8 90 f7 10 aa 88 fd 2d 0f 39 2f f4 a8 8d 31 1a -a1 - -# PKCS#1 v1.5 Encryption Example 13.15 -# ---------------------------------- - -# Message: -0f 46 2b eb c6 - -# Seed: -4e ae 5d 54 92 d9 44 ff db 04 2a d9 50 16 81 ad -b3 eb 6a b5 28 b6 e8 13 53 55 b6 23 ab 55 a7 40 -87 b1 9f c5 9b 85 34 da 9a 88 da 29 f6 6f 71 f9 -45 2a ed e0 e3 e9 39 07 70 9c 34 49 56 72 85 74 -b6 6f b9 a6 f3 38 3d 58 a0 13 6f 94 c4 ed 86 ca -9d d3 8b ff 07 0f cc 2d ef 29 bd d6 fc 98 59 70 -96 7f 02 fd 6f 93 01 cd 56 d0 48 a4 42 d7 02 40 -9a 98 a1 32 ab 6b ed d4 fe - -# Encryption: -29 36 9e b0 0a 3f 87 84 38 c9 38 f9 d7 bd a3 85 -6c 45 a6 d7 7c 17 88 51 1b 98 2c 58 f6 3d be a3 -3e 63 ae 1d 45 c2 df 6b a8 0f 0d e9 97 59 2e 1f -8a 3b 3a 09 ed 76 06 51 45 3e 10 99 78 cf de 3a -60 0a 74 fa a8 a9 1b 7c 72 4f 97 3c b8 0b 96 83 -5f 05 0b 7d c0 9d 2f 15 74 76 c5 b7 05 1f 94 d9 -c0 f3 17 e1 f1 88 e3 09 80 79 5b 09 6c f9 bb ce -b5 63 6b 3d b9 87 05 4a 56 08 75 22 75 96 29 97 -e7 - -# PKCS#1 v1.5 Encryption Example 13.16 -# ---------------------------------- - -# Message: -51 4d 3b 38 00 22 b3 78 2e 8a 77 d7 7b f2 4a fd -f9 2f 33 97 47 4d ae 0d 4b d6 e4 fa 31 ca 60 83 -df 49 6b 36 62 6e 7f 8e 1c 91 9f 9f 2e - -# Seed: -d4 d3 a9 e8 fb eb 1d c6 07 b4 dd 78 87 ba 25 c3 -d0 bd 81 34 84 bd 53 76 dc 83 ef b5 8e c5 b2 56 -2c b4 4f 98 5e 59 f5 0b 9a de 3c 66 71 6c c6 f4 -2e 51 c6 0a 2f 4d 8d 75 bf b9 b8 24 10 5d 1e e1 -58 35 f5 f5 f2 54 fc 6f 68 0e ee 0b 85 af 54 7c -17 - -# Encryption: -19 fb 39 1a 31 00 87 bc 3d 08 79 1f d5 99 94 be -80 12 df fd 76 a0 2a db d4 79 cc 0c 15 56 60 5d -4d a2 a3 46 1c 7c 71 a8 5e d8 cf 85 e0 8f 45 da -de 51 8c 00 af 09 f4 93 ee 8a 55 46 ff be fb 05 -3c ca 2e ef 06 84 76 3c f7 80 f2 e0 97 bd 8e 5c -2e a8 4c b1 a8 b8 f8 49 6c c9 18 16 7f 65 6c dc -9e 1d 3b 2a 23 38 b6 4c 61 e9 0e cc 27 4a 12 10 -e3 db 57 83 ae 3c 00 ab d3 74 8a 81 0f d9 14 91 -14 - -# PKCS#1 v1.5 Encryption Example 13.17 -# ---------------------------------- - -# Message: -fb a1 63 17 b0 93 08 3e 37 20 aa 06 48 17 e7 4c -a7 51 a5 17 87 4b 69 26 50 c4 14 7f 11 9f 68 90 -70 2c f8 b1 4f 0c 18 82 21 2d 72 40 6c 3a 45 d7 -d9 ff a4 31 24 10 a6 - -# Seed: -9c c9 a4 bf 8c c2 75 a6 b9 b1 35 10 31 91 10 91 -7a d8 53 24 c5 a4 34 5e 58 f1 fa 47 27 5e e5 92 -15 69 dc bc bd 72 36 70 cf 4a 24 eb cd 57 f5 7e -99 8c 4b bd 4a 95 67 9d 60 ba a0 ab e8 79 66 8a -2c b6 ed 0f b9 4e 4a - -# Encryption: -4c 41 b9 cb cc 6f a8 7f 23 f1 7a 36 d0 51 e7 78 -0a 07 06 56 ca e7 be ba 14 fa 91 c5 55 b8 58 8e -88 09 e7 d3 35 4e 7e f5 e0 fa ef e1 cf 39 2e 6f -da d4 04 4a ef 08 e3 3e 6f c2 01 c5 47 fd bd f7 -c7 3d 3b e0 96 ed 25 3f 9d f4 af 52 e1 3b 9a 19 -25 aa 73 93 a6 42 95 30 20 92 01 e5 5b 20 e5 1d -50 05 d0 6b 58 35 3b fa fc ee c3 7d 60 e1 ca 0d -9d dd d8 68 0b d0 a5 d6 92 e7 4f 2d bd fc e2 66 -02 - -# PKCS#1 v1.5 Encryption Example 13.18 -# ---------------------------------- - -# Message: -5f fe 82 e0 33 54 42 45 b8 49 62 d3 92 7c 2f a5 -99 72 ef 59 c2 37 a3 86 a5 1b d0 ba 1f 2c 1f 8e -45 b4 6a 05 ad 97 db 49 d3 ac c6 34 4f 1e da df -65 64 c2 8c e1 - -# Seed: -cc 23 59 bf d0 d5 7b ce bf 07 5b 87 a5 85 a9 bd -e6 59 3e b2 49 61 ef f1 98 7e 73 56 05 d4 e3 0e -97 19 37 f6 f3 f5 be 52 78 fd 47 6d c6 60 ee 07 -30 cd 07 e5 d1 f4 20 09 a3 33 31 2d 93 28 f3 b0 -08 5c 40 75 bc 70 9a 10 f1 - -# Encryption: -05 8b 50 e0 bc a6 b9 34 c0 1b f7 c3 3b b6 15 b7 -22 ea 41 80 7a 7d 2c 7c b3 d4 38 e2 8d be 33 3e -d6 d8 37 47 7a f8 4b b0 06 bb b1 0b 36 94 4f 15 -d4 f6 d2 8b 5e d2 49 d5 69 0c 08 37 a1 6e 15 7b -a8 80 22 74 10 1c d4 4e 7f ed 72 a7 59 81 c9 75 -66 bc 70 e5 55 97 02 bf 5b 62 fb 09 b2 13 60 56 -73 aa eb b7 fe 9b 1a e6 d8 04 03 a2 01 33 80 3e -1e d2 35 0b 8e 15 ff 01 9a 70 0f 2a be 87 d6 e7 -33 - -# PKCS#1 v1.5 Encryption Example 13.19 -# ---------------------------------- - -# Message: -22 63 3c c3 fe 7a 7b 4f 00 fa 99 9c 4f e0 d8 82 -c3 1b dc 0d 67 0c 0c c3 d2 88 96 1f be 63 72 e0 -e5 32 46 42 c7 b1 fa 85 2e 1b 4f 69 6f 12 f5 58 -66 - -# Seed: -3e df ca f4 88 71 d2 91 d5 b7 f7 72 3d 92 d9 51 -51 52 b6 bf 52 b8 23 69 9c 58 8f 75 f3 4e 37 95 -55 0d 07 81 18 e2 86 c9 6e 90 07 ae e1 54 f5 7c -e7 f1 d4 60 39 47 3a 4a 37 a9 b5 90 a3 7e ea 59 -94 7f e8 58 7c 95 69 88 bc b1 74 e9 7c - -# Encryption: -3d eb bc 6c fb 0e ed 87 16 6b cc d5 4c 75 97 ad -36 ca 0a c9 6c f1 66 76 e1 87 4b f5 f1 0a 0e c6 -9c 3b e2 25 96 78 ee a6 3a 18 08 d9 06 65 ff ce -9a f0 82 7e e6 29 ed d6 59 43 43 7f 8c a0 a6 71 -17 2c 52 1c c0 d1 dd 01 e2 2f 20 a6 c7 9c 42 7a -da 88 56 00 0c 4e 03 5d 9c 5e f2 e1 05 f2 c9 f6 -45 7d 9e e9 5b 43 bc 4b e3 29 4a 0e e1 d5 c8 33 -ae 91 07 8a ed 09 e7 92 bb 42 c2 5e 00 b0 87 e5 -61 - -# PKCS#1 v1.5 Encryption Example 13.20 -# ---------------------------------- - -# Message: -55 2b 38 4c 5e 51 74 f5 1f 38 0d 8b 53 e3 c8 97 -b4 8c 66 9a 9c 2d 11 98 5b 86 54 de 7f 76 d9 62 -39 6a 37 b9 53 41 f9 9d ec e4 af d7 1d 3c 84 e1 -28 7b 0f 0f 86 ee ff cf d9 7b a1 88 e3 79 9e - -# Seed: -2e 2f 3e 3f 46 d4 74 0c b2 6c bc 65 aa e2 af e4 -9d 0b e6 66 39 d0 db 10 df d6 af 60 64 46 f3 b7 -de 98 21 2f 86 17 4b df a5 b2 e2 35 85 07 45 3c -20 ad a6 9a 4f fe 0a 35 e1 2e fb ab 3b b4 4c - -# Encryption: -14 92 91 ee b5 36 fc 07 03 f7 bd f1 f0 31 a4 30 -cc 83 ad c4 3e 09 68 64 91 26 69 34 ef 37 ea ea -b1 1b c7 f3 91 49 ab 33 43 66 94 59 36 73 cc c6 -39 0b 52 9e 64 d3 42 e9 f2 1d 17 6d a2 1f a6 5a -bd 57 ee c6 0d de c7 d1 a0 93 db a3 76 44 5f 1b -cf e5 a6 aa ce 9f 13 42 af 39 db 8a d4 85 ba 22 -2d 39 12 62 28 fa ee b4 9b b3 b2 71 fd 38 e1 15 -25 d8 03 15 4e 74 08 4b 75 c3 db cd ff 2e 3d 10 -42 - -# ============================================= - -# Example 14: A 1536-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -be 0c a0 1f 9c 17 21 66 f9 12 39 1e 5d 58 dd c3 -0d 5d d0 27 9a 49 bb 31 2a 31 e4 c8 a6 6a 52 fb -4e 8b 67 42 fa ac b2 24 c3 03 9f 1e 19 8f 33 23 -b8 88 ba 0e 35 bb 94 c5 11 bd 22 b8 86 40 5a 71 -5e 40 9d e3 bc eb 4f c9 91 1b 0e 9c 3b 1e 42 e2 -57 d5 bb ea 07 22 b5 d5 dd 35 37 56 9d c7 56 06 -46 a7 50 b8 7e aa 6f 3a 40 5a 94 bf 2a da 72 b5 -0a 4b 01 87 bb 9d 00 ec 45 1d 50 a6 a9 1a 1e 2a -91 19 2a 7f d7 56 b9 00 14 1f e8 8f 96 e2 08 0d -fd d8 01 66 a7 bf 67 e3 71 44 d0 9e 3a f8 99 74 -e5 7c 72 b0 3a 2b 88 fd 29 95 25 2a ce 4f 30 e2 -e4 7c 28 18 05 72 40 53 6b 58 db 42 07 50 9e 59 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -be 0c a0 1f 9c 17 21 66 f9 12 39 1e 5d 58 dd c3 -0d 5d d0 27 9a 49 bb 31 2a 31 e4 c8 a6 6a 52 fb -4e 8b 67 42 fa ac b2 24 c3 03 9f 1e 19 8f 33 23 -b8 88 ba 0e 35 bb 94 c5 11 bd 22 b8 86 40 5a 71 -5e 40 9d e3 bc eb 4f c9 91 1b 0e 9c 3b 1e 42 e2 -57 d5 bb ea 07 22 b5 d5 dd 35 37 56 9d c7 56 06 -46 a7 50 b8 7e aa 6f 3a 40 5a 94 bf 2a da 72 b5 -0a 4b 01 87 bb 9d 00 ec 45 1d 50 a6 a9 1a 1e 2a -91 19 2a 7f d7 56 b9 00 14 1f e8 8f 96 e2 08 0d -fd d8 01 66 a7 bf 67 e3 71 44 d0 9e 3a f8 99 74 -e5 7c 72 b0 3a 2b 88 fd 29 95 25 2a ce 4f 30 e2 -e4 7c 28 18 05 72 40 53 6b 58 db 42 07 50 9e 59 - -# Public exponent: -01 00 01 - -# Exponent: -f3 7d 28 d6 1f 28 99 a5 c0 e0 a0 74 9d 13 89 38 -7c 64 c8 c3 58 a9 71 da d1 3c ff 85 c5 9a 62 dd -a7 bb c0 f7 e5 bd c6 5d ff 9d e9 c7 45 40 46 31 -75 81 48 16 8d fe 6a c0 a2 87 6a 56 05 3b ab 2a -2a 9f f2 72 79 4d d5 d8 13 9e ed 10 bc fb 4d f3 -30 20 d5 9e 30 48 fd 2f 0c 43 14 26 14 5e 36 a1 -d0 a6 bf ce 44 43 ef 3c 7e 31 d4 a9 2f b8 51 7a -49 f7 88 c3 b4 e1 37 39 5a 4b ee ea 63 e0 e0 ad -c3 22 4f 98 09 25 03 7d f6 f5 b2 6c 00 72 39 b4 -f0 1f 8a 9a 61 ea 0b 51 19 bc 9d 54 96 a9 5b 60 -ea 76 6c cb ad e0 37 e3 40 32 4f 25 f0 2e 72 45 -c2 36 ea e4 36 7a 64 68 a7 a0 93 8d 85 c0 a1 - -# Prime 1: -df cc 92 74 2c 48 d3 34 c6 6f ca a6 d8 a7 e4 22 -54 43 0f 80 a8 35 9e a2 3b 9a 83 b2 41 e4 7f 39 -9b 3f fe 3d ab 3f 15 be 8f a5 c9 e6 46 df f9 7c -cf 9b 43 17 61 07 80 ad 44 cb 1f bc ef bd 6e ba -05 5d 96 94 3c 02 47 e0 c8 76 78 eb 0b f7 6c 88 -76 c3 ab b9 ef 72 cf 01 8f 58 11 a6 be e0 4f 09 - -# Prime 2: -d9 64 e9 6e a6 fa 43 70 b5 91 ee 79 e7 e7 2e cc -21 81 53 78 7a 60 e2 f7 ae 94 fa 95 b9 bd 68 69 -d2 81 ac 3c cf b6 57 24 7c 58 3e af dc 13 d4 d7 -a7 d7 76 5e 44 67 df 76 b5 28 bf 94 bd 03 a3 ea -73 b8 1b e2 6c ca d9 89 b9 f0 77 28 da d5 3b 38 -ef 7f e9 eb e9 11 40 cb ad 17 dc 7e cb 1d 58 d1 - -# Prime exponent 1: -9e 79 f6 9b 5d 60 94 6f 22 b5 b7 03 3f 18 64 6c -0a cf 12 03 41 19 f7 23 5a a1 a7 f0 6a c8 ab 6e -d7 89 11 38 0a 33 b9 ea 1f 3e 7f 22 19 be 30 a5 -39 3d f0 dc 75 51 22 c5 8f 99 66 f8 1b ac 40 e4 -69 38 44 90 e3 8d 99 e8 8b 0b 99 c4 97 cc b5 86 -4c d3 72 9f 4f f8 34 ae 1e 1b 77 24 64 b5 e2 41 - -# Prime exponent 2: -3a 05 e9 18 13 91 30 76 e0 bf 76 7b 2b 1e 55 2b -3e b6 19 e5 4a 24 99 ef a9 b5 31 bc cc ba 75 27 -e9 7b 9a d1 10 4f 86 aa c2 55 7b 45 cc e3 ae 27 -71 30 dc f3 04 27 05 49 d5 c8 6e 79 f0 89 0c 33 -03 77 dc 59 6e d8 25 7f d1 15 11 78 e2 0f 8f a2 -fe a9 91 71 d9 df 35 00 27 ce fa 97 0c f7 64 41 - -# Coefficient: -18 b1 0d d7 3b 14 7d 86 b6 0c f7 fe bf 46 35 93 -c0 bd d6 bc 83 a8 39 57 3b 4b 3f e6 5c 0b 13 e7 -b6 94 b8 1a 56 57 21 0b e9 47 01 1d 8d 49 29 c1 -27 fd 2f 3e 31 06 c2 53 38 3b e6 35 41 d1 23 5b -d7 9c 57 2e 92 e2 36 34 28 20 98 be e9 4d 48 bd -62 8a 0e b2 1e d2 61 cf a3 5b 69 b9 77 70 e2 93 - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# PKCS#1 v1.5 Encryption Example 14.1 -# ---------------------------------- - -# Message: -2b d6 e3 c1 de fd dd 5a 43 - -# Seed: -e7 84 d5 25 03 e6 29 1f 25 8e 44 2d b5 77 f9 91 -63 82 a0 d1 4c 7b 9d cc bd b6 07 af 01 f0 25 8f -dc 97 23 97 da 12 39 d4 44 9a 58 28 6e ce 20 08 -f7 18 f6 90 ce e7 3a 02 7f ab f8 4b df 7a ce 45 -f7 ed 2d 77 32 4c be e9 0e cc 6f 1e 7b 86 cc 29 -35 a4 7b a1 56 65 0b 42 fc 71 aa d0 70 99 a2 7e -97 fe 5a 3f 25 fe 13 48 e4 42 39 12 12 a5 cf 1b -44 5a 1e 70 19 1f fa 8f ca de 63 5d 2e 44 65 f5 -f9 13 c5 3e 33 b5 91 52 cd 8a 14 97 84 f2 7d 83 -18 28 af 2d 66 6a 5c 30 9b 56 d0 71 9c fd 80 73 -40 69 a2 3e 09 2d 83 15 39 9f 95 c4 0a d7 fd 0b -b5 f9 43 77 - -# Encryption: -85 ef 3e 47 76 77 bf 76 07 1a 27 bb c7 39 57 15 -cb 35 07 96 e4 4f 1b 52 a0 8e 90 5e 08 ff 12 56 -70 5a 9b f0 15 2e 87 2b dc 74 bb 1f 2f c8 63 1e -f8 81 2d 16 94 6a 30 b5 8f 44 64 d6 e7 b2 45 0b -e4 5b 48 cc ff 5d 8e cf 7a 00 b1 b7 8f c8 fa 54 -71 3d d6 96 a1 4a cb 68 00 c0 d3 b6 9a 0b 44 43 -77 fa 30 3a 7d 66 db 49 27 91 8a 4b fb 0f d4 93 -bf aa 01 6a eb ff 99 53 30 a6 dc b6 21 5d d3 bd -b3 5d 7c d6 1c cf 0e 9c cc bf 51 e9 ea 65 8e a3 -1d 12 43 44 4c 4b 72 ff f0 1a c9 3f 28 eb 7f 67 -c1 83 2e 56 8e d7 2f d9 57 d5 b4 fd 2f 00 b6 02 -31 71 b8 5a b0 ca a1 03 0e d3 e3 ed c9 50 31 45 - -# PKCS#1 v1.5 Encryption Example 14.2 -# ---------------------------------- - -# Message: -10 47 35 d9 ad 72 60 46 47 3d f4 b1 3b 2f 5f a2 -85 c3 d2 33 ec d4 61 70 58 2d d2 28 cd ee 46 4d -a5 09 5e 20 8c f8 fb ca 05 38 8b - -# Seed: -dc 6a 63 1e 29 75 45 d2 f6 fe 9c 69 a5 d3 06 a1 -09 16 d7 e7 ef 0d c9 53 f2 1b 6a 04 14 31 ec 8b -a5 ce 1c 13 87 43 fa ac 54 97 d6 99 f2 ff 1d 4a -44 a3 e0 63 7c c5 e5 e6 38 cd 73 67 7d 09 af ee -3e c9 fe 80 52 94 7a 73 33 4c 32 70 47 28 56 f3 -07 24 3a c5 8b f8 63 80 74 66 7d 7f 7c 18 e3 ab -32 7e a3 fc 78 91 f1 c5 8a b4 7e 4f fa 6e 7d 90 -11 a3 3d 9b 40 a2 d7 89 ee 42 21 25 62 30 ca 8a -61 81 1b 09 72 cf d9 86 01 75 26 18 1d 24 ee bb -32 cc - -# Encryption: -92 1d 2b 02 6d 6b 7e 22 20 1d e7 7f bf 67 99 90 -f9 af f4 ea 7f e7 ce 45 02 21 5f 9e 7a a4 18 b8 -5f 72 ea db 6b 69 42 bb 08 a0 8b e7 da 66 19 aa -5f 1d 2f f9 61 c9 dc 2c 34 1a e3 2a 25 4f de ab -a2 f6 45 0a c4 47 4b 62 74 f0 c3 46 f2 6d a4 ed -55 5a 8c 95 11 89 dc 83 69 f3 4d 76 d8 37 d6 f3 -8a 95 18 a6 27 1c 5b 56 34 62 25 a5 ab 8d a6 03 -2a 59 30 fd 5b 77 72 9d e6 32 e1 75 2f c7 2a 0c -34 ae ce 25 65 7b 28 1b e8 93 2c 56 50 c9 82 fa -14 5f de 0b cd d4 8a 73 aa 02 88 b4 de 46 11 33 -f2 7d 51 e3 86 01 6a 72 72 6a 9e de 1d 32 df c7 -e6 f9 78 0c 04 eb 70 ff ff c2 68 82 95 66 73 33 - -# PKCS#1 v1.5 Encryption Example 14.3 -# ---------------------------------- - -# Message: -31 7e 6f 5e 17 50 0f e9 4f df f2 84 bb e5 03 01 -04 4d 14 22 d3 ca 70 05 98 - -# Seed: -46 6d 53 c8 d0 bb 9e d4 60 ca a6 3d 79 bf b8 77 -bc 4e a3 45 ca b4 35 7e 63 9a 95 dc ae 37 9d dc -ea 5d 64 fe e9 9f b6 f7 5f f2 4e b7 4d 44 03 44 -d1 47 e4 33 14 a0 f8 9f 8b 96 14 82 15 36 8e b8 -65 1f 6d 3c a0 d0 8d 0b 4c 73 e6 d1 a7 68 40 98 -26 d4 3c 2f 81 f3 08 40 60 5c 43 d0 fe 67 1d 3f -02 4c 70 d0 b8 99 23 cf 90 4e 39 97 99 62 cd 51 -5c 16 74 29 2a a3 0d ac 70 0d b4 eb 7e 63 d5 6f -df 08 c2 24 70 f2 43 86 19 45 d0 0f a4 e2 79 90 -21 2c fe d4 28 5d f1 ed da 4b 0a ec 91 35 59 f5 -9d 12 55 90 - -# Encryption: -14 1f ca 68 dd 2e 4d 1d e5 08 6d bb 78 5f f4 7d -81 e3 9c 31 1d 91 7a 99 39 a6 ff 5b 13 43 9c a9 -56 c9 74 2b cf e4 50 b5 bd 03 5b 54 1f ab 30 7f -24 fb fb 3f 8b 90 21 5b 56 04 67 6e 56 96 f3 ba -95 fd b8 d0 90 a6 c2 4a 29 d9 90 fb ff 1d a2 02 -81 42 55 8f 0a d7 53 43 c7 2f 38 82 3d b7 66 7b -05 e1 6b 51 92 b9 33 60 07 f7 58 10 6c 32 8b d4 -76 11 8d f8 2a d0 75 48 a7 26 92 1f b2 e1 92 b4 -3c 8c 30 cc 9b 84 34 63 0e 27 fd 8b 23 ef 8d 8f -22 be 7f 73 ae cd cb 2b 1e c5 53 9d 5f bb 2c ff -9e d5 e7 f1 9b 49 18 3d 22 1d fd 53 7d 4f 37 03 -2e f3 2f 63 b6 ff 74 ee 24 a0 96 cf 45 59 27 09 - -# PKCS#1 v1.5 Encryption Example 14.4 -# ---------------------------------- - -# Message: -90 96 3d da b3 78 91 e7 28 8b 53 be 5d 9d c5 67 -b1 a0 7a 15 66 c2 af dd d7 72 73 24 ba - -# Seed: -a4 9f 12 15 17 5b a0 4c 27 4a bc 05 1f 0c 17 a0 -8a 63 64 89 43 db 2e 8c 76 22 bc bb 1d cc 56 7e -be 6a dd 8c 44 48 16 c9 d4 36 ee 93 ce fe 23 ec -41 dd fc b0 a4 03 bb 6d bf f0 ae 5d 6f cd d7 64 -da c1 a7 2a 48 4f 36 47 1f 4f 3b d7 25 b2 db 5a -fa 6a cf 53 0e 4e 4e 86 b4 fd a8 78 20 47 87 1c -b0 55 ad 68 c8 41 de 54 5a 55 40 c8 cc 12 e7 e3 -f1 58 14 a0 03 9a 81 03 4b de 9c 68 ae 22 85 e6 -16 b7 b5 55 5f 98 c6 13 ce 2e f6 66 a0 22 46 5c -63 67 d0 bd a4 0c 12 e9 41 f6 99 8a 14 a2 b5 e3 - -# Encryption: -8a d5 bf 78 23 2a a3 6f b7 83 58 3e 71 bc 13 93 -03 7d 13 e7 74 54 a9 dc 11 11 43 4e 75 dd 80 20 -46 ba b4 20 25 42 0c 63 96 1e a0 06 26 57 ca 50 -65 de b6 53 ac 78 eb 64 98 cf 14 d1 70 4c ec 59 -11 69 60 8d b0 1f c9 3d 0d 68 e6 28 01 b4 65 a3 -87 a9 c7 2f 7e b3 5b 0b a5 3a 5e fa 98 c9 f0 cb -7c 7c ba 18 04 cd 70 1d 02 97 b6 60 05 ae 25 ec -3b 6c d4 cf 31 94 a3 fa 65 d9 8c 4b 95 33 30 79 -0e fd e7 4f a2 75 d2 a7 9d 33 10 a5 bc c2 c8 1c -91 fc 25 56 2c a9 39 f8 d9 c1 75 ed f4 b0 76 73 -d5 39 24 e2 7b 15 52 88 1c 10 83 19 23 71 5d 14 -9f 1f 31 9e 38 e9 1d fa 56 6c 54 53 ba cc 14 8b - -# PKCS#1 v1.5 Encryption Example 14.5 -# ---------------------------------- - -# Message: -3d 81 02 1f f6 47 33 37 e0 4b 92 - -# Seed: -9b 70 29 73 13 77 e8 26 97 fa 56 b0 86 ce 49 d3 -c4 b1 54 9d e8 1e 3e 99 e1 6c d9 72 29 7a 56 0f -f4 83 f2 ef 5b 71 b0 0f c6 84 74 4f 22 4e 85 7e -6d 72 39 f1 56 d7 b6 10 2f 23 04 f8 a5 50 50 b3 -75 6c 54 8f 6e a2 6e a6 f7 39 4d 2b b3 79 33 35 -84 e3 b4 81 d0 73 c0 a5 8a 0a d7 87 ad b4 80 e1 -f2 0a 1a 59 0e 03 1e 6b 2b b7 f3 6a 93 61 0d df -70 83 a5 07 68 c9 98 62 3f 6e 64 37 6a 29 b4 a4 -18 03 2d 27 39 bd 4e 74 7d df c7 7f e3 cf 27 93 -a2 9b c7 67 bf ac c7 13 e5 f1 0e 53 1b 4c 71 89 -97 b9 bb 6b 65 15 e0 71 13 28 89 74 7e 54 6b 13 -46 8d - -# Encryption: -1b 88 4b 06 7d 0b b1 59 7f 5f ab 93 30 95 75 5a -53 0d 9d 04 e2 75 4a 57 97 ff ff 5e f9 ce f1 89 -54 99 98 23 00 50 3b 3f eb cb aa 09 d3 6b 7d ac -c3 0d f3 c8 68 f0 1a 5f 17 ed 4a 72 a8 5b 6a dc -80 a2 6a 1b 81 97 6b 39 3c ba 9b 0c 82 cb 1e 2c -58 3a b6 f3 14 ed a2 9a 43 32 21 b6 e3 ed 53 51 -53 74 bb cd 2b 96 f5 cb 5b d5 81 5d 1a 5d cb f0 -80 d2 d3 7c b9 6c 4d 96 1d c4 7e 13 0d b7 b8 d0 -18 2e 33 69 de f4 c0 f6 c4 2c 6c 20 53 1a f1 a1 -90 36 de f0 8d 4b ac a7 1b 99 af 3c 4e 1e d5 27 -d5 1f 37 d0 ee 1e a2 c8 b8 eb f4 fd 52 79 85 1d -c3 20 e7 42 00 8e 04 04 4d 0d a0 64 36 61 3d 1b - -# PKCS#1 v1.5 Encryption Example 14.6 -# ---------------------------------- - -# Message: -5c 74 5d d4 a8 c5 92 93 4e d1 5e 22 fa 9d ec 4a -4d c2 0a 9f - -# Seed: -0e 6a bb 82 9a 3b 16 d0 8b 0b d4 3e b9 5c 79 1a -f2 a3 39 12 ea 83 3e e6 89 3e d5 ad 3e e7 44 c8 -b2 dd 28 fc ee 80 8d 3f 01 49 58 25 be 0f e6 37 -32 07 a8 78 d4 a5 25 ea 72 cf b0 bb 58 a2 67 76 -fb 39 ee bd 33 5f 04 cf 71 86 be 61 c5 63 5d 95 -e5 60 ed df d4 5d d8 6a 4e 67 0d 33 56 8d 83 d2 -ca 20 3e d2 8d 90 e4 8b 06 4d 09 a7 5f 82 8d ea -cd 5b 37 ef cf 78 4f b1 1b 17 d6 d9 f2 31 52 24 -f8 e7 63 79 1b ac 6c f4 6e 1c 23 b0 b0 25 2c 19 -ed f0 40 d3 5f 59 25 53 26 5b 88 6b 29 ca 56 eb -c5 38 63 71 41 4d 82 a3 40 - -# Encryption: -2b 0a 43 b3 cd c9 9d 6c fc 74 da 2a 86 ec d7 d5 -76 24 75 d1 43 e5 48 6f a9 cb eb bf 27 d8 e4 14 -1e f7 2b 6d 4f 13 f6 64 b3 d2 e9 ec 32 22 7c 1a -d5 b7 6c 0d 1b ef bd 65 89 68 c7 db 14 95 23 82 -49 bc d9 5e 75 40 25 4e 65 74 98 23 b8 a3 4b f6 -a1 41 07 21 df 34 f3 c8 d5 79 f3 6a ed 9e 0b ac -23 1e 54 c2 7f 76 73 19 7d 19 f5 1c e6 ac bb cb -7b 1a 55 e3 8e de be ed 34 61 07 3e 80 c7 9a 4f -c3 09 31 30 69 6b ff f2 bb cb 74 90 5f 2d 34 44 -33 80 57 fd fa cb c4 db 81 93 5b 29 e9 9e 55 cc -c1 d4 8d 89 e9 dc 4a 63 a0 11 a6 23 32 cf 57 02 -62 a0 63 59 cc 36 c0 5a 6f e1 8a fb 78 32 b3 2e - -# PKCS#1 v1.5 Encryption Example 14.7 -# ---------------------------------- - -# Message: -b0 e7 7f 42 c1 a1 e3 f4 15 57 23 a9 0d b8 8e b1 -53 cb 3d 3a 28 ed df 25 9c 47 05 6a 47 0c 91 5e -c9 55 f8 31 89 f7 1a ea cd d5 5c 33 5f - -# Seed: -fb 36 01 10 5c aa 9a 2f dd 6d d6 c5 74 6f 4f ca -fe f4 41 bc b0 fb 8a 2c c0 3d 0b 57 34 9f 93 21 -af 9d 99 84 e6 4e 2e c4 85 c9 ad 75 5f 14 0c 0b -66 db 1c fc 26 69 1c 26 77 31 d1 a3 af e6 87 20 -2a 96 77 e4 2e 84 4d 47 7b 75 bc bb 8c 97 d9 9f -cf 72 b3 fb 6d 34 9f a9 c4 76 61 91 47 21 7a 04 -dc 06 aa 3c 3c 17 64 95 38 0c b9 2c 0a 7e 09 7b -4b 4c 5f fe 04 63 1a b1 d1 bf ea 03 67 86 50 c8 -5c 17 0f a4 a1 d6 4a 4c 13 5e 61 48 14 90 b6 2b - -# Encryption: -a4 bd d4 92 fe c7 9c 3a 79 09 3a 44 33 42 72 d9 -d1 7f 54 3d 02 02 c3 9e 40 8b fb 39 36 6b e2 de -61 df 50 ac 45 8c ae dd ef fb 69 e2 13 ca 92 b7 -49 53 66 34 7e de 73 3f f3 99 ae c7 96 c3 c3 b1 -df 34 9f 01 1d a0 1f ee 7d 21 c1 c2 61 84 3d e8 -82 08 56 0c 0e 89 84 b9 52 23 ea 37 31 db 91 c5 -93 7a 79 b0 db 93 87 59 1c e3 2e c7 f5 83 e6 00 -f5 24 44 df a7 67 1c e8 27 38 98 fb bc a3 a4 aa -68 32 cb b3 54 3a be 96 47 e5 f8 c1 37 72 82 52 -ce 54 40 fc e1 0e 4d 4e f7 5d 56 b8 14 d5 19 64 -44 41 41 1c 10 a2 a1 4c 35 04 72 82 7c 99 ea 3e -e5 fd a3 88 0f 34 1d ca 8d 3d 3a 4e 5e 05 ba 42 - -# PKCS#1 v1.5 Encryption Example 14.8 -# ---------------------------------- - -# Message: -b8 7f 04 b3 35 0e 12 63 da a3 f9 40 5e 6f d3 d2 -5d 8e fa 13 25 56 a4 95 71 f5 70 8a 42 52 7a f3 -1d b0 1e df 79 82 0f 93 26 64 5f b1 - -# Seed: -ec 8d 01 4d 6e b8 d0 23 9a 97 73 bd d3 20 bf b3 -f2 ee 8f c2 7d 5f dd 91 f3 f3 90 5d c8 a4 c5 ff -13 52 9a ee e4 61 85 4c cc d4 e0 9b 62 4a fa 64 -7a 7c 04 81 4e b1 e5 7b a1 4d f4 c7 95 b4 2e 84 -c4 d0 86 29 24 5d ac bb ed 27 39 9a 72 5a 94 8f -3b a2 f8 b6 4d 26 02 dd 0d 5f 55 cb 23 ea af fb -3a 66 50 8e 4a 68 9a d9 ee e6 44 e6 a2 6d 43 8f -36 63 fe a9 bd 03 12 bb 0e 7e 5a 6d ee 04 bb e8 -a0 74 5a 73 d5 ac 89 fa a0 96 a5 2e d3 04 6d 77 -de - -# Encryption: -77 5d c3 24 fe 9d 5e 05 ad 01 50 13 d6 5f 0e ba -0d cd 52 ff 9d fc 17 95 ea 93 d0 f4 33 57 98 96 -86 fe 3f 8b 04 62 23 bb a5 c7 84 9a ca c3 12 35 -43 43 26 16 c3 10 3a c2 ba 8d b0 a1 d2 99 40 bb -a2 62 47 0e 5e 53 be 60 e0 eb 72 4d 07 cd 91 2a -ef bb 87 fb 51 98 0e 9e 1a c1 94 da 31 92 95 41 -ca 43 22 4b 15 2b e6 f2 df 6c 5f 04 42 b4 f4 d2 -cc 2f b0 27 39 d4 85 a0 11 62 bc 8d bb ad 14 76 -eb 06 e2 45 ab 36 c4 c7 2d 3f 36 07 d0 50 84 a0 -f6 b7 2d c8 ba c3 46 bd 19 09 1b 02 f5 98 2c 91 -45 7c 7b 10 f4 47 2b 57 18 45 24 21 4b 23 82 5b -59 f4 34 cc 48 a2 b8 54 ca b5 0f f7 9e 59 09 1c - -# PKCS#1 v1.5 Encryption Example 14.9 -# ---------------------------------- - -# Message: -e1 95 a0 36 a5 30 e1 c2 a9 d7 a1 03 35 8d c2 bd -25 b1 01 bf 70 44 50 ab 8e 50 62 cb 63 df 56 10 -35 - -# Seed: -0e f8 81 de fc 45 ad 3f 3e 58 b1 10 5e 49 b4 23 -ab 89 12 4a 65 b5 2c fd 81 cf d5 42 b9 1e 7c 4c -1a 60 71 a2 cf 12 b4 82 7e d5 d1 9c ba f8 fe ea -54 bb 3d 73 85 7e e8 7c 71 5c 71 b9 ed 1c 07 c3 -af d9 0f ce 40 44 8b b5 7e 35 24 d0 38 80 98 39 -e3 6a 4f 55 44 c3 e1 81 e8 c2 e2 93 cd 57 54 c8 -65 74 ad e6 df ce 0a b3 4a 80 b4 d4 8a 9d 42 e7 -11 5d 8c bc b1 fa 28 c8 a2 65 01 db 7d 0b b4 96 -d0 1d d6 92 65 a0 26 e1 a9 7e 9d 3a 1a 65 a8 aa -8e c2 df 06 34 e6 f2 65 1e f4 35 40 - -# Encryption: -1a d7 7a 00 7c a4 37 ab d0 15 9e d4 b0 b6 81 54 -16 f9 f0 9d 1b 12 15 fb 7c ff 11 52 97 60 1a 88 -30 f2 09 17 86 35 63 85 3e d7 8e 9c 3d 7b a4 c9 -7a 05 cf 19 dd 32 92 48 47 1a 47 03 a4 65 17 8b -85 d4 ec d5 42 24 12 98 c2 fe cd 41 3e 23 a7 0c -8a 5d 47 c2 0e 31 c2 da be 3c 82 a9 54 50 27 27 -49 ae 2e bb 89 98 5d 00 b6 3d ed d9 59 6d 05 16 -d1 2a 78 c3 74 b7 ed dc 7d ce e8 e4 fd d1 6c 1d -fa bf f7 ff d4 c1 fd 61 ce 04 be 8e 49 75 c5 cd -71 e2 cb 0e 54 1b 84 61 bb 81 fb 28 cc e7 73 65 -3e 8b 16 b2 8a 8c 20 74 28 89 5f 28 53 55 87 a5 -c9 9d 46 ba 4d f9 ae 08 50 18 51 3d 69 ab a3 f6 - -# PKCS#1 v1.5 Encryption Example 14.10 -# ---------------------------------- - -# Message: -04 2a 39 22 aa 87 1e ea 0d 78 42 2c e7 85 66 ab -bb 5b 08 c2 dd f1 ee 30 cf - -# Seed: -5a e8 51 14 b0 02 7a 23 c7 2b db 46 ae 7b b8 87 -be c5 ba d7 a9 88 4e 93 f6 f4 fd 0b c9 38 bc 72 -41 0c ce 96 a1 4f 4d e1 99 19 77 35 05 1e fc dc -c1 96 f3 ad bf aa 06 3c b3 f7 a2 34 c6 cf 99 d7 -0f bb 7e 35 b6 ae c6 64 14 66 93 91 e3 cb e7 21 -ec 99 1a 1e 5d fb b0 38 f2 70 36 85 93 74 9b 20 -8d 08 9a ae e2 ef 35 c3 da f6 23 8b 5f e4 2d 13 -dd e4 07 df 14 f2 d6 18 c9 79 c9 7d 2d e0 29 33 -b5 7f e8 81 22 04 86 2b 2f 1d ee 98 3f 24 c2 c5 -96 ea 66 8e 63 7d 0a 6a e6 dc 52 65 27 69 94 e7 -e4 f0 2b 6e - -# Encryption: -12 44 de 88 0e 0f 78 52 e9 96 95 9d 76 2f ca d9 -15 65 a4 d0 ad 3b c5 27 50 d4 a0 44 0f 0b 5c 65 -1a a0 e6 f4 92 06 1b 2c 86 24 c5 2e de 68 58 fa -25 18 ae 8e 8b 11 65 58 b2 c8 07 6c 17 ae 78 3d -8d b2 5f 0d 8f b1 f2 75 8a 82 ab 97 1f a7 28 3e -f0 74 9a 37 be 28 93 f8 94 37 fb 8e a9 00 72 b5 -85 5a 26 08 fc 54 2f 5d 2e 0c b5 43 f4 fa c5 28 -f9 43 52 d0 16 40 fc 2c 53 1b 79 81 0c 00 77 7b -c9 e1 0d d9 ea 99 96 e7 40 87 fa dc b7 1a a1 43 -00 67 65 71 61 48 82 94 3f 4a 56 14 12 c0 54 67 -dc a6 6c a4 9f 82 29 35 18 23 db 8a 6b 9f 80 3d -70 9c 11 87 ed 74 10 cf 91 00 15 59 5c ea b6 3e - -# PKCS#1 v1.5 Encryption Example 14.11 -# ---------------------------------- - -# Message: -f3 1d 3d 0c 30 fd 65 d7 b9 8b 70 99 44 78 2e 20 -52 5c a7 c1 f4 2d 5d 03 a0 f6 d2 75 9d f1 91 9e -ea 82 f8 0f 10 00 fd 5c f8 59 df 59 87 1b ac 82 -dd 90 76 cf - -# Seed: -04 4b c3 77 e8 58 9f a5 af 1c 17 34 7d 50 e0 cb -bf 90 15 76 f2 41 de 69 0c 88 16 c1 29 cd 9f 2f -b0 83 1a 01 7b ec 30 b8 2b 68 f6 98 31 1a f6 e0 -77 72 bc d8 98 fa 0c 27 f6 2a fd e8 95 89 77 84 -46 25 55 2d 9b cb 5a 81 aa 3d 74 15 b2 42 a0 3b -12 fc 1d 3f e2 d2 ce 6e 5f 71 c4 a4 a4 c7 ca 83 -e0 65 6f 50 02 ac 36 d8 d0 2b 69 ae 65 73 44 98 -f1 31 95 2c ea 48 1f a2 c2 96 5b 6e f0 51 7e de -50 dd b0 9b 3e a7 02 6d 06 - -# Encryption: -86 f6 6f 0c 25 05 85 06 59 43 de 2f 71 1f ae 4f -f2 62 70 0e 0d 33 06 a2 4c 94 30 f8 7c fd 93 de -f4 c3 44 7c c7 21 0f d9 4a 14 33 62 f4 f9 45 c6 -db e2 80 bd ef 5d 14 f7 5e b7 bb 31 32 0b cb d0 -d8 8f 0c cf 2c 95 a7 4c b4 58 c6 27 2b 58 bf 74 -30 93 c4 bb a2 d7 be e9 ea 2d d3 0c f7 2f e2 93 -c9 0c 97 43 0a 04 7b 17 26 63 91 c5 1f 5c 39 8b -a3 df 8c b7 4b a3 e3 72 f9 55 5c cc 97 d6 db 76 -14 ea 06 d5 c4 8c 1c 60 06 13 3d 0e 9d 69 95 79 -93 85 92 0a d8 af c3 de ad f6 31 ce cc 55 9c af -f4 95 b0 8d 68 3f b2 2a a6 97 d7 1c 69 6e 46 b1 -bf 4f d7 6b 8d 0b 39 f1 79 bf 66 84 1b bb 97 07 - -# PKCS#1 v1.5 Encryption Example 14.12 -# ---------------------------------- - -# Message: -6a 35 55 57 9d ad 03 94 35 43 ff 74 e1 74 7c 25 -7a 83 d3 52 94 c2 53 93 83 e2 35 de 69 - -# Seed: -5d 92 43 4e db d4 f5 bd 27 19 71 71 f8 53 ce b7 -26 30 30 83 ad 45 67 a1 d7 c6 10 4d 19 2b 9b cc -df d0 da ed a2 74 e5 cd fb 3d 0c 5d 19 c9 68 25 -81 ec 7a dc 1a 87 e0 81 51 41 5d 5a 9a dc 1a f4 -50 b1 ba 88 d0 ef 32 ac 2d 1f 8a e3 45 95 28 14 -75 3a f3 8e 12 63 5c ff 8c 09 21 59 b4 e7 5d ee -a1 98 3e d3 d2 d9 ec 2f e7 b9 a2 e1 6a 14 1e 81 -8b 84 cd 9b 71 c1 29 a8 b3 c6 db 62 02 32 dc 03 -a2 40 1f 73 1f f8 a6 3d a4 58 a7 d8 78 90 56 25 -ae e1 fc 09 4d fb 07 b4 57 5a 7f 0a ad 23 3e 82 - -# Encryption: -93 10 27 2d 12 4b c5 cd b7 21 88 98 40 aa 77 15 -e7 67 32 17 00 cb 39 b2 b8 a5 a8 2a e3 f0 2e b9 -67 e8 db 46 84 3b c1 bf 62 ed 8b d2 ab e8 14 34 -49 7f 99 00 64 02 53 98 2d 37 2b 2b f7 c1 b0 9b -d5 01 96 74 a8 34 fb bd ff 35 68 a2 82 4a ed 4a -80 48 d2 b8 61 36 27 75 bd 5f 0d 63 b3 48 36 3d -13 78 69 1f 5d d1 d7 96 10 74 ed 95 fc 90 07 bd -5f 5c 29 23 c1 7c 42 90 4e 2b f9 d2 48 77 9f df -b2 03 97 38 41 a1 12 90 c7 e9 e9 35 6d 4e ab 17 -0e 43 1b fe 45 4a 88 01 0d 9a ff 33 70 0c ee 55 -c7 04 c8 2a 7f fb 15 e2 53 ef 84 f4 01 9e 12 43 -8f 7c 73 86 dc 53 5b 19 ca 86 af 71 d4 77 60 8e - -# PKCS#1 v1.5 Encryption Example 14.13 -# ---------------------------------- - -# Message: -cb 79 af 5a ea fd f2 ba d2 1d fe 62 92 66 42 cb -a8 04 ec 7f d0 ea 5d 54 08 ac e9 ed ff 28 e7 e8 -df ff 6d f3 83 af 14 40 21 46 04 76 c0 c8 2c - -# Seed: -5f ce a2 57 cf a9 2c 84 f0 b8 93 7d 17 3f ae cf -75 03 ab 16 2e 0b ae ef 7e 4c 51 1f 3e 32 a3 24 -ed 40 e2 42 a8 52 ba 57 89 5b 7c fe 4d 61 79 61 -e0 36 f6 63 e0 22 8a 29 cd 1a 95 ac ac 08 a2 55 -26 d1 eb ff 0a b3 f0 33 ed bf 1a e2 76 a8 d2 36 -73 6c c7 af 51 b5 d2 bd c8 3d cc 7d 7d 3b f5 b8 -22 af 2e ff ed 7e fc b6 17 e0 83 e5 1b e9 94 ae -d6 56 9b 23 83 b9 41 ae e5 94 c7 b0 12 e6 75 1c -37 b7 a5 4e 2a 19 18 24 a1 30 d5 5c f8 45 - -# Encryption: -11 fa 81 9d 3a 63 88 04 ee f1 d9 56 0a 11 f5 23 -0a 0b ad fd 66 eb 68 4e 7d 69 df a2 89 8c 8e 0b -6e 04 af 8e fc 70 61 08 1e c5 9e 45 85 76 42 e8 -b2 00 41 af 50 8d 9d 4e 28 82 20 f9 fd 38 9d e8 -b2 91 24 ce 74 7e b6 8e 2e aa 8c 8f 6f b4 93 f6 -11 ac 09 b7 23 09 5d 07 ee d9 24 f6 ab 8e 09 ff -93 c5 51 6d 1f 0e bf 62 c5 f0 22 f5 bb 4f 4c b5 -b8 f5 d4 87 a1 7d f7 d0 12 d7 04 35 7a bf 17 48 -67 ce 40 cd c5 50 11 b0 71 39 be a4 5c a0 e5 81 -78 0d e6 54 17 cc 83 5f f2 69 84 fd 0f eb a1 87 -69 c3 94 a2 e4 85 02 3e 31 d3 b0 a8 88 a7 b1 4c -78 1d d8 5b ab 40 86 74 f5 f5 7e 4b 76 3d 84 35 - -# PKCS#1 v1.5 Encryption Example 14.14 -# ---------------------------------- - -# Message: -d1 62 33 fc 77 5c 31 9f 15 7a a2 00 47 6c d6 ed -64 a1 ea - -# Seed: -bb 33 b2 2b 5f 46 79 4b e8 3e 6a ff 34 a0 e4 11 -d1 f3 f4 b8 da f9 b5 85 87 24 ef fd b9 69 c9 55 -25 c6 2d c4 4b b2 b0 83 38 60 03 05 4b bd 36 66 -b7 82 82 60 6f e6 ea 17 27 31 be e1 16 72 d6 01 -de 32 42 3d 83 f4 63 cc 29 30 f5 fb 79 da 15 34 -c4 15 c9 65 82 75 65 94 a9 99 b2 26 35 42 48 a0 -9f 14 1c ae cf 88 83 90 78 f7 7f 40 bd 48 51 34 -9c 1f c7 5e 1e ce 6f d6 96 6b c9 c9 d5 ec 12 09 -6e d5 04 35 46 85 9e 4f 95 7d 31 88 e1 d9 06 0b -59 c1 f7 f6 2e fb fe 82 5d da 45 35 3e 6f d4 fa -ba c9 83 f9 44 f4 c2 c7 9c bb - -# Encryption: -10 c2 0c 0c 71 b1 1b be ce 14 c8 14 83 dc fa 73 -0c 23 d4 dd 61 b8 75 5b 39 94 9d fd 4a 3c 50 33 -21 60 ee c6 f7 71 0e 09 c7 a9 7a f9 3f 70 44 b9 -2f 41 d0 9f a3 e6 c6 ce 1f 64 11 48 4e d4 75 40 -a1 b5 9e 23 c1 93 34 b6 6d 68 20 c2 d4 4d b0 f6 -aa f8 5a a2 7f 53 a4 1f 85 6b f6 a5 91 36 59 86 -9b a4 ab dd ec be 87 41 3a c9 5b e6 40 09 59 3b -5c a2 d0 78 3a 16 f6 08 66 57 55 24 53 93 fc 14 -4f e3 ea 5e 9a ac 9f 1f 99 1a 92 85 38 b4 69 97 -d3 06 3c c1 a6 9a dc 19 2a 40 c7 6f 92 d4 7a 05 -80 e3 c0 21 20 02 3e ce 70 32 80 7b 7c 09 13 43 -aa 87 3f 6a 4d dd e4 3f b2 dc c3 79 ae ee f6 54 - -# PKCS#1 v1.5 Encryption Example 14.15 -# ---------------------------------- - -# Message: -d2 f3 c2 e6 f4 3b 0f c9 fc 22 93 b8 45 88 e6 61 -15 - -# Seed: -b9 81 64 89 52 5c d0 26 15 6f b4 e8 a4 a8 f3 4a -ea 8a 3a a1 a6 34 cc cb 32 58 91 8f e8 5c b8 d4 -aa 02 a5 28 52 a8 94 1d 3e a6 c0 48 b5 8c c6 c7 -56 85 67 56 25 e5 e4 dd 7d f9 3b 8a ce c0 79 67 -0b 49 f3 dc 6e 07 63 ed 4c 8e 2d 0e e9 b5 ca 5b -b6 2d e0 06 91 98 38 e4 b6 9b a1 05 d4 c5 a4 cc -6d ca 67 b1 21 93 a0 32 b6 92 73 96 44 cc cf 72 -3f 9f 69 e4 8b 94 c0 bd ce 5a a3 5f 75 dc 53 92 -7b 81 e3 42 ce 72 c6 b6 5c f7 5e ae ca c5 fe 0d -ea 93 88 5b a4 20 af 99 32 d8 4c a4 b5 0e 07 e3 -28 ec 5f 81 6d 2d 86 96 b2 0d f7 5f - -# Encryption: -80 f1 df 25 f3 6f 31 4b 98 2c 9c 8a af c0 b8 a1 -a2 f1 74 ab b2 98 08 69 c2 9d 19 be 1d 2d 93 b4 -fb 42 99 90 6c 35 7f dd 40 e8 9a 19 54 92 a9 79 -76 61 f0 5d 38 71 d1 bd 0a 5c 45 d8 f9 b0 fe e5 -65 b0 00 4f f5 af c5 a6 f8 9a d6 03 e8 22 83 57 -0b db 4c 6e 0c fc 31 3e 4e 66 5a 94 34 b3 2f cc -77 3d 6e da bc e8 5f e7 c8 0f 03 30 2a 84 e2 08 -b5 bd 0a ad 91 ce 62 fb 8c 2b f5 4b a6 6f 7e 8d -00 21 92 16 29 20 a4 6e 36 de a5 66 1f dd 75 81 -53 56 40 74 b8 55 9f 88 93 62 42 fc 09 98 14 8f -19 eb 50 fc 11 fb 24 a7 ed 8c 83 49 65 8f e9 d3 -1e 62 74 d4 5d 6f 2b 60 9b b5 cc d1 7e 28 4c 99 - -# PKCS#1 v1.5 Encryption Example 14.16 -# ---------------------------------- - -# Message: -21 ee 58 12 e3 24 6d ab 9c 3c 25 9b 21 37 d6 5f -98 a0 5e 57 40 46 5c a2 2c 69 34 97 00 a4 2c be -4f fb 39 3f e2 81 99 33 9c 51 03 1c d3 b2 2f 2f -0a 83 - -# Seed: -e9 de 5b d3 55 e6 af f1 9f a1 1a 2d 0d 3e dc 3f -64 69 bd 3c 75 72 06 d6 6b 3f 09 90 8f f6 18 af -48 01 ac 77 b5 2c de 03 d4 ae 74 9d 02 15 5e 5c -70 fc 99 5f 48 76 72 d2 80 63 58 55 db 4b 64 a2 -26 09 b0 c1 60 67 16 3c 51 90 42 05 7c b3 67 12 -c7 c2 fe fe d1 1f 73 c2 8b db 9d 25 f0 63 6a 4c -aa 11 26 9e 5f e6 5a 2b 17 56 86 a1 5f 1e 48 d2 -8d 34 5d d9 a1 b2 90 0a 24 f9 dd da 3d f3 a6 9f -fb 9c f5 04 5a c4 a1 93 ae 90 2f - -# Encryption: -7d 8c 53 1d 4d 35 49 e0 bd 2e e1 62 b6 82 53 9d -a6 17 22 b8 8e cf 8c 7d f6 d6 b8 1f ef 50 18 bc -4e a1 0a 7e 1a 4e aa 02 15 d9 b3 cd f4 13 47 92 -9e ac 27 48 eb d7 79 94 5c 9b c4 61 dc 51 f4 8d -f6 52 75 53 f0 70 37 e5 33 ce b1 34 8a 46 a7 ea -79 7d 85 a2 6a 9f 44 c5 88 69 99 6e f1 14 69 bc -c1 0b 75 6c 02 d5 c0 e6 18 83 68 5c c3 7d 75 8d -fd e4 c9 b7 35 4e 3b 4f 31 6c a7 f7 fd e6 59 c3 -fd 5e 33 2e 1b 63 92 a2 92 9e 13 17 66 ce 9b a1 -d9 71 ad 24 6f 3d f0 22 43 38 63 8b b6 53 45 8c -d4 b5 26 d9 61 74 4d af ec d5 99 8a d7 2a ed 3c -34 59 9f 7a 40 98 e3 d2 df 9d 13 a2 1c e2 37 0c - -# PKCS#1 v1.5 Encryption Example 14.17 -# ---------------------------------- - -# Message: -a0 34 a6 c1 66 cf 0b 25 d2 dd e5 3a f4 b8 33 b4 -78 c6 b0 d2 fb 0c ef 13 7f bf 5c 27 12 70 64 91 -23 7f 7b 28 6d 12 11 d5 73 10 f8 a7 62 b1 b3 bf -e1 9c 9a 4b 16 d3 e0 a8 - -# Seed: -d8 44 17 97 22 87 13 0a 24 a6 06 f5 83 29 7a c9 -11 52 8a dc db bd 7d e1 4a 5b 48 9b 67 86 f9 f6 -f7 e0 b7 3b ab 53 8e b6 c4 5f f3 4b d5 dc 43 ea -e8 d8 c4 3f 71 65 16 a6 0d a2 47 53 6f 63 4b e0 -65 d9 4e 7f 92 ad f5 2a 96 7e e0 5f d9 af d7 32 -33 3f 99 ad 05 82 97 b2 8f 8e c6 fe ff 80 28 44 -a0 09 7d f9 1a 97 70 2c 48 3a a1 c7 89 2c 7d 43 -b6 b9 1c d4 d8 5d 3e d2 f1 e9 55 39 57 06 c3 b3 -39 ba f2 a0 e0 - -# Encryption: -90 4e 04 07 23 ab 97 88 a5 ed 03 52 eb 96 c7 f3 -d7 07 cf 0d bc 25 8c 51 dc f6 24 34 06 f0 c7 42 -c6 cd f2 07 67 13 2c 09 5e 6c 82 a5 02 5b e7 b4 -13 4d 8f a4 de 18 7f 8e cf 12 fd d3 be ab db 06 -15 8a ef 46 c3 fe d2 d1 83 34 06 ec a7 a6 9e b2 -d2 08 a2 f6 f4 40 d5 4f 6b e5 dd 56 47 09 ed a8 -12 ac 06 29 a9 4c 7f 8a ee 78 be af 9e 93 78 c8 -dd 9c 62 03 74 bb ac a3 94 18 59 dd 70 2f 6f 7b -25 a2 38 45 9e e8 97 59 de 94 22 b5 bb 6d 28 57 -16 6c a2 12 0e 63 47 74 a0 d1 d4 2e b8 d9 48 15 -a1 04 4b ea 8b fb 02 da 58 62 cd 9a 74 5f 15 92 -47 8c 6f 57 bf d1 3a 5f df 4b 8f aa e8 a4 bf c4 - -# PKCS#1 v1.5 Encryption Example 14.18 -# ---------------------------------- - -# Message: -8f c6 39 4c d6 e1 75 33 d1 ff 8e bb f3 e1 ae ae -a3 30 ed 9f 5a 6e 1e fb 83 45 42 94 c6 ce 24 f6 -90 4a 0e - -# Seed: -be 1c 18 02 db 44 68 2e 58 c6 1f e3 87 57 ea 0e -38 4e ba dd 79 59 48 4b 38 bb 23 57 55 c4 61 77 -e6 71 76 9f 36 57 3d 7c b0 ee 7e 82 08 7b 58 4b -58 bb 30 05 30 33 68 c6 59 0a d9 f2 88 2c fa 74 -0d 51 dc 55 eb 0c 79 0f 5b b6 b6 a3 bd 71 f8 b2 -14 6b b9 e8 03 4c 35 b7 ca bc be 10 93 6f fc 5f -0a 8d 7b 30 47 6a b9 16 85 ae d8 fa 95 8e 73 c1 -ee a3 04 4c 56 b4 b8 70 da 89 37 1a 93 b8 96 52 -79 b5 5b b9 2c c3 16 c2 3e f0 97 53 51 c7 49 81 -7d b5 dc d8 6b 94 ad f6 03 bd - -# Encryption: -b8 3c 71 8c e5 c6 ab 1e 40 ff a5 67 0a c1 66 66 -4d 3a 68 33 cb 3b de f4 62 79 4a 25 d5 3e 17 04 -60 06 85 8e 63 f8 8a b9 5d 04 f4 fb 67 74 f7 00 -5d bb 2e 22 d5 19 36 0d 5e 13 38 ad 15 30 8f 6c -64 12 54 95 67 00 7e 02 1c b2 37 ed 4a f5 ee f3 -bc f9 b7 31 59 9f 72 53 ce ba 83 04 f4 ee 8c 34 -33 39 d0 a0 64 eb 77 f1 e9 3f d1 cc 7b a5 fc 3b -b8 18 4c ed 0e 86 97 ac 47 b7 46 20 c4 94 ea b5 -86 ed 9f e7 6e 07 e4 bd 2a 2d 1b 95 59 5b 69 c6 -46 77 a8 83 5d 56 ac 63 9d f8 f6 43 24 1b 3e 2c -46 88 d2 ad f2 28 de 2d a9 bb 0a 36 34 38 e7 51 -b5 25 0d ea e3 05 a3 90 5e 7e 07 7a 4e 8c 74 66 - -# PKCS#1 v1.5 Encryption Example 14.19 -# ---------------------------------- - -# Message: -89 a1 2d 22 bf 87 7d 44 0a 2e 03 ae a9 32 eb 51 -83 37 9b 3c 8b 90 be e8 fe d6 fc 6d af b0 cf 05 -27 - -# Seed: -60 72 89 5e 47 80 c8 f7 7e 0b 19 5f c9 f5 db 78 -33 f7 b6 f5 c8 1c 1d 30 cb e9 e8 0c cb 38 66 06 -9f 8d b6 96 3a d4 6d 52 94 2a 5a 73 f6 a3 27 a9 -4e d1 19 df ce 4c 37 65 84 37 13 b6 19 f9 c4 38 -32 03 d5 5e 2a b6 1d a8 96 1a 81 03 7f 11 18 a7 -82 97 eb 36 6a 1c 51 d9 f9 46 6b 71 5b b6 29 99 -e0 a9 d6 e0 25 01 d4 7f 97 db 40 9e 38 86 e1 36 -6c 3e ff 2b a7 90 e2 62 43 22 7a a1 58 80 82 bc -e6 d5 cd e3 ea 7e fb f1 5c 6c 7d fa 54 54 72 fa -9e 93 95 6a 45 51 d5 a7 7c a0 0e 26 - -# Encryption: -b7 ac bb cf f0 fa 9f ca 6f 0b bd e5 a2 f0 a1 e6 -a0 ab ad b3 2c 89 e3 17 25 5b d1 8d 12 e1 a6 0b -3e 00 2c 1d 69 35 64 48 32 9a 49 b5 bd 24 19 10 -fa 0c e0 3b 3e 68 a5 90 50 75 99 39 1e d1 53 97 -92 29 3f ef 13 17 4d ac ea 6d 2a 05 b3 9f 68 48 -28 a5 d6 d2 17 f8 4b 78 2c 8f c9 84 3c af 6a eb -17 8f 0e 2c 6b d2 a0 e6 f7 b8 09 29 61 17 cc 8a -6b f7 37 35 84 64 24 ad eb a1 ab 31 14 5f ca 3b -8a f7 68 c9 d0 a2 8e 09 d5 8a d4 96 42 31 08 f0 -8c aa c1 74 ac d1 f3 ac 43 48 69 61 c5 c9 0e 1e -fb 89 bd db 7b b3 9f 4c a3 af 57 12 f5 53 af 59 -4c d5 d3 64 13 29 14 26 10 07 aa 1d 5f 21 6b 8e - -# PKCS#1 v1.5 Encryption Example 14.20 -# ---------------------------------- - -# Message: -09 d6 94 8c e1 c1 f2 4c 6d 52 9c bc 5d 6d 6c 1b -ea ab 56 95 b3 0c aa b7 44 96 9b f7 f9 db d2 83 -33 5e 98 a9 bc d6 5d ad 2b 4f 0e 3c ec 89 0b 05 -e6 7f e9 78 23 d4 - -# Seed: -ed ed 62 a6 50 f7 de 3b 12 80 22 9d 5f b1 c4 40 -8e 82 df e0 31 7e 64 30 fc f4 71 b1 e2 8d a8 cf -6b 4b f4 c5 d0 31 e3 ee 68 8b 64 07 72 aa 50 08 -e5 86 3c 70 7a 40 22 c3 29 a6 66 4e 71 10 12 06 -b5 4d b5 40 6e 7f a9 c8 22 6f 42 93 11 19 62 0c -a3 0d e7 d0 3b e1 43 94 0c bb 4d 1a 9c 86 e9 86 -3c 98 7b ff 07 02 3d e1 98 64 f7 33 da 0c 89 bd -03 9f 19 f4 d8 ed 61 6f 7c 6e 94 94 18 5b 60 4a -1a 7b f7 49 0f d0 d8 - -# Encryption: -7a dd b0 5c bf 0b 17 aa 50 8a 0b 17 0c 4c 5a ee -84 ce 06 65 0d 08 c9 96 6d 95 d3 07 1a 9a 8f 3a -93 f9 6a 87 53 99 b4 78 c2 56 d0 41 5e 74 84 95 -98 21 1f 9f 9d 0b 89 36 7b aa af 17 4b 7f 13 d8 -49 0b aa a7 40 96 1f 52 d7 e3 53 c5 04 81 8a 00 -0b 03 67 4d 9c e4 93 dc 3a 4e e9 16 13 01 f6 1d -e5 21 ae f3 f6 d4 1d 82 e1 c5 dc e0 2e 63 6e 77 -40 a1 83 f8 02 3a d2 61 49 41 d9 b1 61 cd bd f4 -8f 8a 56 2c 8f fe 44 f5 7a 74 6f 26 39 e5 e8 3b -cf d3 92 d2 3e 1f b4 a8 d8 5e 3b a5 e1 cb 9c 0e -53 f0 d9 1b 01 ce c0 f0 ef 9d fe 3f 2b 30 65 bd -55 b7 2f b1 70 60 ab e8 83 0a ca 00 44 64 fe 7d - -# ============================================= - -# Example 15: A 2048-bit RSA key pair -# --------------------------------------------------- - - -# Public key -# ---------- - -# Modulus: -dc fa 10 ff a7 46 65 ae ef 87 09 74 ea 99 b2 ce -54 54 7c 67 f4 2a aa 6d d0 1a 2e d3 1f d2 c2 42 -af 5d 96 0b 1f 89 6e fb a3 54 3d 65 54 b7 b1 26 -87 a5 c6 88 56 8f 32 e0 26 c5 32 d2 59 93 b9 7a -7c 28 42 ec 2b 8e 12 35 ee e2 41 4d 25 80 6c 6f -ba e4 38 95 4e ba 9d 27 55 df fe eb 1b 47 70 09 -57 81 5a 8a 23 3f 97 b1 a2 c7 14 b3 e2 be 2e 42 -d8 be 30 b1 96 15 82 ea 99 48 91 0e 0c 79 7c 50 -fc 4b b4 55 f0 fc 45 e5 e3 4e 63 96 ac 5b 2d 46 -23 93 65 c7 f3 da af 09 09 40 0d 61 cf 9e 0c a8 -08 3e af 33 5a 6f ce b6 86 3c 1c c0 cf 5a 17 1a -ff 35 d9 7e cb 60 ef 25 1c 7e c2 c8 a5 88 36 1d -c4 12 66 a4 b7 ed 38 b0 26 ce 0d 53 78 64 49 db -b1 1a 06 ea 33 cc f1 ec a5 75 20 1e d1 aa 47 3e -d1 18 7e c1 d8 a7 44 ea 34 5b ed 7e a0 0e e4 e8 -1b ba 46 48 60 1d d5 37 dc 91 01 5d 31 f0 c2 c1 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -dc fa 10 ff a7 46 65 ae ef 87 09 74 ea 99 b2 ce -54 54 7c 67 f4 2a aa 6d d0 1a 2e d3 1f d2 c2 42 -af 5d 96 0b 1f 89 6e fb a3 54 3d 65 54 b7 b1 26 -87 a5 c6 88 56 8f 32 e0 26 c5 32 d2 59 93 b9 7a -7c 28 42 ec 2b 8e 12 35 ee e2 41 4d 25 80 6c 6f -ba e4 38 95 4e ba 9d 27 55 df fe eb 1b 47 70 09 -57 81 5a 8a 23 3f 97 b1 a2 c7 14 b3 e2 be 2e 42 -d8 be 30 b1 96 15 82 ea 99 48 91 0e 0c 79 7c 50 -fc 4b b4 55 f0 fc 45 e5 e3 4e 63 96 ac 5b 2d 46 -23 93 65 c7 f3 da af 09 09 40 0d 61 cf 9e 0c a8 -08 3e af 33 5a 6f ce b6 86 3c 1c c0 cf 5a 17 1a -ff 35 d9 7e cb 60 ef 25 1c 7e c2 c8 a5 88 36 1d -c4 12 66 a4 b7 ed 38 b0 26 ce 0d 53 78 64 49 db -b1 1a 06 ea 33 cc f1 ec a5 75 20 1e d1 aa 47 3e -d1 18 7e c1 d8 a7 44 ea 34 5b ed 7e a0 0e e4 e8 -1b ba 46 48 60 1d d5 37 dc 91 01 5d 31 f0 c2 c1 - -# Public exponent: -01 00 01 - -# Exponent: -21 95 08 51 cd f2 53 20 31 8b 30 5a fa 0f 37 1f -07 ae 5a 44 b3 14 eb d7 29 f5 dc b1 5d a7 fa 39 -47 ac dd 91 5d ae d5 74 bd 16 df 88 bf 85 f6 10 -60 b3 87 17 2f ae 6e 01 26 2b 38 64 c2 d3 c2 2f -94 e0 4a 81 59 42 2b 4e d2 79 c4 8a 4c 9d 76 7d -49 66 07 1a 5b bf 5d 04 3e 16 ff 46 ec 1b a0 71 -6f 00 bb c9 7b ff 5d 56 93 e2 14 e9 9c 97 21 f1 -2b 3e c6 28 2a e2 a4 85 72 1b 96 dd cf 74 03 fa -03 7d 0c 57 ab 46 3c 44 8d e5 cc 12 26 5a dd 88 -6d 31 1e a8 d8 a5 90 3f a5 6c 5f 1c 9c f2 eb 11 -cb 65 7a 1a 7d 3e 41 35 2d c3 e6 86 89 8c 4c e4 -30 5e 8b 63 8e 1b 08 a2 a8 6c c9 eb 98 66 f3 49 -9a c7 7b 61 36 b8 1c b2 76 d6 14 cf eb 7b 6e d3 -f3 bc 77 5e 46 c0 00 66 eb ee e2 cf f7 16 6b 57 -52 05 98 94 7f f6 21 03 20 b2 88 fb 4f 2c 3f 8f -e9 7b 27 94 14 eb f7 20 30 00 a1 9f c0 42 48 75 - -# Prime 1: -f1 23 bf e5 3d e9 7a 56 9d 91 ad cf 55 6f a6 25 -ad 30 f3 fd 3d 81 1f 9e 91 e6 af 44 b6 e7 80 cb -0f 32 78 29 fb 21 19 0a e2 80 66 46 d7 28 cd 9b -65 31 13 2b 1e bf ef 12 72 99 30 60 f1 ce 70 b1 -24 39 30 91 ee 85 93 b7 27 36 7e db ba 00 9e c5 -be 17 c4 ac ee 12 0c 84 12 67 d4 76 31 a1 6c 36 -a6 d1 c9 99 73 c1 b0 b5 a8 35 bf 39 fe af e8 f6 -42 1f d9 c2 a9 0b c2 79 76 65 9e 67 bc 83 12 4d - -# Prime 2: -ea 98 39 b7 e3 7e a8 9b bd a2 7e 4c 93 47 1c b4 -fd 92 18 9a 0a 96 bc b4 d7 56 93 f1 8a 5c 2f 74 -2a f9 e3 6f de 67 9f bd 9e ae 34 5f a2 69 52 7b -69 65 02 1c 4b df 54 d6 85 bf 08 96 0c c9 76 f6 -8d ca 21 ce bf 44 f2 68 a5 9d ab 8d 1a 25 e5 19 -f5 14 7e 1f 45 fe 28 7d 74 cf 72 5b ec 13 26 d3 -42 12 c5 6c f4 ff fa 20 2f 57 b6 8e e8 cc a9 43 -f3 c1 38 c4 cd e3 3b df 2c 94 40 df 65 32 24 45 - -# Prime exponent 1: -ca 0c 9b 60 b8 e4 a6 06 67 56 c6 5d 20 88 41 9d -f6 25 3b 7b 68 8a 85 f4 f6 e9 64 d8 5d ad 52 a4 -52 62 86 7f 1e 96 18 06 9f cc d8 65 e9 28 9e 46 -e3 9e 20 22 94 4c 5c 44 87 d3 45 cf 25 2d 46 0d -97 7d 77 ed fe fe db cb ae 46 a2 3a f7 fa 47 0f -07 7d a0 e5 09 42 04 4c b1 a3 60 49 7c c2 76 0a -c0 f2 ad 4a 2f cd 0e 84 d7 a1 d9 4d fd d2 65 8f -d9 ce 18 47 5c 1f a7 5e e0 ce ba d0 cf 0a c0 4d - -# Prime exponent 2: -52 81 71 23 3c 4e 4a 6c 63 b8 67 64 f5 13 38 84 -6a fd db cb 29 58 34 4c 01 c4 00 4a 1d d8 28 14 -5a 1d 02 a1 50 7d ef 4f 58 24 7a 64 fc 10 c0 a2 -88 c1 ae 89 57 21 d7 8b 8f 04 4d b7 c0 0d 86 da -55 a9 b6 54 29 2e cd 76 82 70 be 69 e4 bd 59 22 -d4 ef fd 1f 70 95 5f 96 27 e3 e1 9b 74 9e 93 b4 -0e f3 dd 1d 61 d9 39 15 e2 b0 9d 93 0b 4b 17 68 -bf ac c0 13 6f 39 b0 cf df b4 d0 50 01 1e 2e 65 - -# Coefficient: -df 2e b2 32 2c c2 da ab f4 d1 46 55 08 f4 15 21 -cd a7 ce ff 23 eb e6 1d 00 d4 41 ee 72 8d da 5d -16 c7 bf 92 0c d9 5f 34 be b4 fe 32 ee 81 7e f3 -36 2e 0b cd 1d 12 45 f7 b0 77 93 ea a1 90 dc 5a -37 fd af 4c 68 e2 ca 13 97 2d 7f 51 48 b7 96 b6 -fb 6d 7a dd a0 7b d2 cd 13 be 98 ce be d1 ed c6 -ca 41 2e 39 53 50 c5 9a 1d 84 2b c4 aa 2f 3c 0b -24 3f de 7d fd 95 35 6f 24 39 25 1a 11 72 c4 5e - -# PKCS#1 v1.5 encryption of 20 random messages with random seeds -# --------------------------------------------------------------------------- - -# PKCS#1 v1.5 Encryption Example 15.1 -# ---------------------------------- - -# Message: -2a ac ec 86 f4 23 dd 92 5e c1 58 82 2a 74 8c be -6c 31 a0 - -# Seed: -cc 4b 87 f6 74 49 7b b0 e3 3d 9e 2a 4a 80 70 b7 -d7 8b 5f d2 c4 b4 f6 eb ac cd 4e e5 05 b7 1f ca -fe 21 56 33 7d df 27 b4 75 af 33 f6 c3 40 5b 8e -3c 0c 20 6e c2 81 29 22 fc d8 a3 66 1b 86 19 bb -c1 82 f8 07 f3 a1 07 2e 62 ca 2b f1 fa 8b 94 4e -58 a0 e2 03 db b7 53 f9 f1 b6 ef 62 7e be e5 98 -96 7b 38 7a 5f 96 36 d8 b6 41 b3 89 84 b1 ca 03 -7e 3a ae aa 17 10 f5 16 25 ea 85 f8 fb 9a 6e 02 -9e 64 57 58 14 d5 30 fc 14 6b 34 45 ac 42 01 b4 -e4 08 ad f6 55 f6 78 43 d8 87 1c ac e5 d9 06 d7 -fc 03 8f ea 88 5b 96 fb 8e b1 a7 21 c6 c1 4a bb -eb 78 fb 4c 79 8a 19 58 99 59 89 84 55 a3 16 84 -3c 6c d9 9e f5 8c 2b 0b 49 b8 ab 41 91 b4 02 a5 -4c 92 97 31 0c d2 24 b1 7f 21 41 67 72 5c 48 fc -c6 1b c4 7c fa cc f1 5e b3 b0 - -# Encryption: -60 42 e7 45 58 9a f0 3a f8 75 20 f9 3c 45 d8 c3 -59 85 ad a1 16 1a 37 d8 22 e9 f9 46 0f c7 5f cf -01 79 d8 49 1b 8f 5d 1e 4d e8 ce b3 1e 07 c4 86 -5c 5a 3e fd bb b6 9a 88 03 b8 9e e6 5a 43 0a 58 -09 c7 07 56 91 50 b5 80 bb 68 6a 94 c5 54 1c 46 -ad cd 82 79 60 ce 24 4f f6 88 38 7d 16 16 e8 5b -4d 17 80 c6 48 36 06 cf 92 4b 54 f0 80 cf 41 54 -e6 68 29 bf 6e 53 24 81 04 8e c4 1f ad c0 7d 75 -5b b3 4b b2 81 45 21 9c b3 0d 47 d0 d6 18 70 91 -80 e9 03 03 ff 9e f0 90 18 be d3 da 75 76 1d a7 -94 81 1f 96 bc 9e 8d 7c 4b a1 b5 94 6b da 0b d3 -13 fa ec 4c 99 3e d2 74 8e ed 8c ce 4b db 52 0b -a7 db 16 5f 9f e5 6a a8 45 4d 6f f3 38 74 fe ee -bf 29 de 2d f5 b7 f0 0a a1 d9 fb 07 3f c4 06 7b -58 dc 50 62 4e 12 7f 71 1d de 2c c2 cf da b4 91 -9c cf 28 c8 36 60 df c2 27 b0 f5 00 ec 1f 90 4f - -# PKCS#1 v1.5 Encryption Example 15.2 -# ---------------------------------- - -# Message: -5c 8b f2 ac ab 08 bf fe fa 64 80 95 2b 24 da a5 -01 9d 12 5f ee - -# Seed: -5e 16 30 70 ef dd b7 9f 47 64 f8 a8 1d 44 46 0b -5c 40 0b ec 70 37 52 29 20 f7 72 95 9f d4 cf 3a -ef 2f 14 45 4d cd 9e 86 25 12 ca 69 db 83 68 a4 -cd 8d 1a 44 da 59 5d 6b 43 93 91 c9 31 46 b1 23 -f1 86 08 3c 4b 64 47 bf 7e 20 81 51 46 ac 75 49 -ef b6 74 60 e8 ff 1b 2b ba 5c 95 a5 1e f8 13 d5 -dc 4e 6c 38 92 bc 4f 43 9c 99 11 7e d0 6c 14 a6 -c5 40 fd 4c 65 d1 95 d8 c6 1e a7 79 68 38 e5 a5 -df af 11 d0 71 3c 19 1e 8a 0b 80 80 f7 a7 7e 70 -3a b3 66 22 f1 c6 48 b7 65 43 5b 90 27 97 18 11 -b1 15 2d 97 2f b7 6a a8 92 05 03 3d 95 78 18 7a -e6 34 88 fd a3 c8 6b 2f 28 e7 79 ac 4c 89 cd 25 -20 17 d1 a9 95 8a 52 c5 b8 7e c1 bf 9c bd f7 de -0e 97 c5 8b a1 1b a3 a3 37 05 f3 f4 99 58 9a 3a -72 e2 c0 fc 5b 16 fc a2 - -# Encryption: -44 e6 71 e0 3b b6 67 80 ec 05 86 d5 6f 8f 6a 49 -41 5a d4 bb ce 22 6d 75 d7 0f 06 ce 29 de ea 7d -a1 af a8 28 7e 44 36 3c 51 0f 34 eb 8b f3 1c a2 -47 29 59 26 9c 18 df 09 36 ff 12 c6 16 6f 4f 45 -96 cb 1c ae c4 1d ed a8 c5 09 99 bf 4c 94 4d 21 -37 5b 36 75 31 91 b4 cb 7c aa 1b 43 e9 11 6c bf -1d a8 b2 01 d2 97 a4 d0 8b b0 e5 bd c8 95 32 70 -f7 c2 80 96 78 c4 4b ea 75 e8 1f ac 22 d2 71 06 -30 2b b6 9d a0 74 b6 ef a6 68 8c f8 35 c8 0b f5 -e4 55 35 28 ec e0 b7 c1 b7 7b 66 6e a3 45 23 ec -1f cb 3e 25 05 4e 0b b8 e4 ba 02 7e 5c 21 bf 7a -51 43 bf 04 1c e9 cc bc fa fa 87 80 82 fe 41 f7 -8c 70 bf 4e 53 cf 48 7c 1a ad b0 19 15 ce dd e8 -cd 9f b8 4e fd 98 1a c9 8c d5 7a 82 56 d4 e9 e2 -d0 86 2d ab 04 54 d3 ff 4f b9 85 26 4a 46 99 5a -b0 68 a7 4e dc 7e d8 ae ff 5f a3 0f 3a 7d 75 94 - -# PKCS#1 v1.5 Encryption Example 15.3 -# ---------------------------------- - -# Message: -e2 00 4b 31 07 39 98 2c fa 9e 95 45 3a - -# Seed: -e9 3e 64 12 33 7a b7 b0 f1 b5 69 80 1a 3c 16 4a -6f 23 e3 c2 7c 7c 55 a8 c5 ac 9e af 31 88 55 f8 -32 8b 5d 7a b4 cb 86 19 a0 0e 99 41 cc aa 94 85 -70 52 71 82 61 74 43 c1 d2 1e 4a 6e 21 b3 f6 d4 -f6 98 a6 1a e0 29 17 2c f4 da 03 9d 91 58 5a 87 -da d1 28 c2 fa c5 53 1b 2f 45 dc ef 9b 9f c3 31 -c8 04 48 85 28 84 7c 90 87 5d 19 07 5f ff b0 05 -76 3d 88 e0 81 47 66 92 28 a9 aa d0 16 25 bc 61 -11 2c c7 b7 72 f3 21 d4 33 d4 f2 69 78 20 9d 0e -79 67 6a f3 b8 a7 4b 97 3f 52 ab 91 90 85 f3 52 -35 5f 85 6a a4 0f fa bc e5 43 d4 e7 6d 45 48 92 -98 9c b3 83 f3 e6 6b bb 0e 8f ee bf f7 c6 a5 4e -f2 62 5f c4 05 0e 6f 87 a3 23 13 2a 4e 67 12 68 -fb 83 cf f2 d8 22 51 b7 9c be 32 da a8 e5 53 20 -2f e8 87 22 61 f6 0d 5b b5 11 f2 fa 2f 14 21 a3 - -# Encryption: -2b bf 6b 0c 5c f2 0e f2 f6 c5 a0 aa 48 45 4f 85 -0a a5 f6 bb eb 03 0d b4 e2 be c1 1f b2 00 f0 1e -4e ae f0 44 d8 14 33 33 33 8e 5e 66 38 00 87 66 -0e d0 17 3a 76 82 12 85 67 7e 37 1f 28 ec 45 00 -f4 d5 9f ab ab 20 73 e7 34 36 5f c6 b0 94 ee 0a -db ce ac cf e2 49 88 ce 61 5d 60 5f c3 40 8c 03 -be 22 1c 99 3f 61 aa 72 4f c8 71 4a 8a 4a 18 15 -f9 e9 a9 98 82 aa 46 88 3e 70 47 4e 33 29 b9 91 -e6 d5 3d c6 b5 00 86 19 92 34 3a 6d a8 9a 8b d6 -f3 7f 34 e5 de ee f8 0e 7d 56 b9 3a 45 17 60 66 -36 50 fa 45 5d 55 41 89 9a 76 aa d1 c6 27 5e c8 -2c 46 07 12 26 59 b5 08 cb 5d c0 26 ac f9 3f a0 -1a 5f ca 3d 81 c1 bb 20 a5 a5 cf 35 7a 23 c9 56 -88 ea 42 eb 1e f2 c9 d4 6a e3 7f 8c be 61 5c 20 -84 d9 89 b8 92 f0 16 7b 23 be 33 62 fa ce 80 8d -6a 5e b8 96 19 44 08 db 7c 01 63 9c 58 62 30 4c - -# PKCS#1 v1.5 Encryption Example 15.4 -# ---------------------------------- - -# Message: -db 6a f1 29 23 05 27 8c 5b 33 83 f8 a4 1d 6c 83 -52 21 14 c9 88 85 50 74 06 5b 23 f9 fe ae 8e a4 -31 fd 5d a3 6f 9b ab f9 dc 61 df 2e 39 23 47 83 -04 73 38 ec 4f - -# Seed: -cb 85 1f b2 76 a7 49 1c d3 ef e4 d3 39 50 16 c1 -ec 2b 15 09 4a 1e c6 d9 30 d4 ca 21 b4 20 f8 47 -ff 68 68 f0 14 d2 09 ff 80 7e 8b 1f 71 67 0b 32 -50 94 c0 f6 e3 2f 84 f7 68 22 22 02 b2 1b e3 6a -28 6b 30 e0 82 ef 3b ba 64 7c eb ee af e3 10 69 -44 18 d7 0a 67 9e b2 01 07 80 dd 0e 96 55 3c 43 -cb c6 d0 0e ac 22 aa 71 f2 48 21 c4 d6 c1 77 8e -78 6c d8 c7 bf 2c bb f2 14 e2 03 e2 ef 2f 33 35 -78 cf 1a 94 7e 27 e5 99 96 29 0c bc d6 ca 3f 8f -96 ba 67 e0 e3 41 30 cf df 86 ef 48 e6 7c 90 b8 -b7 2e 6f 42 55 01 7d a2 d1 f3 ae dd 7f b1 d9 de -42 ef c0 37 ab e6 61 6e bd a8 d0 b4 0b d7 80 cb -db 68 ce 54 31 8f da fd - -# Encryption: -c9 9a 9a b6 7c ad 0c 41 ec 84 7b c2 74 67 fd f5 -bf 61 ed 6d 04 c6 5f 7d 9d d8 bb 70 07 a8 a9 b8 -3a 3c 38 a9 cb 92 5e 3e 7b 3c 40 7d 64 66 93 15 -b3 54 49 e7 54 28 ae 96 19 14 b0 b9 10 23 e7 83 -19 1f 95 41 b6 78 65 97 1c 95 b0 be 18 93 1e b1 -c8 47 c2 6a 29 83 c0 58 4e b2 17 c9 9c 70 5f 5a -d8 cb b0 9f 99 b0 6b df 7b d1 26 28 ae 36 67 c1 -2c 72 27 d9 6f f9 c1 08 dc e3 22 51 06 f6 2f 9a -4a 3a 81 17 a9 92 f2 88 c3 b5 97 91 09 87 8f cd -59 c6 79 6b 19 98 48 2e a8 2f 30 1c 93 91 83 b2 -dd 47 88 04 48 67 8a cb a1 2d 7b c8 a5 52 eb 32 -76 34 e9 2d 0c dc f7 1e ff b6 66 ad 90 2d 9e 26 -ad 18 60 e2 92 81 d0 2f b0 c5 49 3b f7 4a c0 2c -94 40 43 6e 0d 75 32 28 92 77 7d 32 5e c8 45 2d -e7 58 cc 6a 5c bb 02 d3 41 f4 5c 9a c8 ed f1 50 -da d7 15 82 dc 77 95 8a 85 44 b0 b5 58 ee 2a 0b - -# PKCS#1 v1.5 Encryption Example 15.5 -# ---------------------------------- - -# Message: -e7 99 e4 eb c8 69 31 9e e2 25 80 - -# Seed: -3a 07 57 cb 49 a3 fe 6a e8 0d 37 42 06 8b 5c 80 -68 b8 c5 88 54 20 01 10 93 c2 20 99 ed aa db 49 -1f 22 6f 85 60 66 16 3a b5 10 5e 78 79 c7 49 1c -18 35 98 5d c4 94 21 0e f7 8b ad 48 16 d9 b6 94 -c9 c8 be 46 6a 4d 17 8a 7d de cb ce 53 65 40 0d -68 21 b6 e9 ae 0e 03 bb 69 ad c4 ec 73 4a fd cd -ea 6d c0 c4 85 96 c4 8b 27 35 ef 70 f3 73 4c 18 -6d 03 18 37 8d 2b f8 09 96 88 67 2f a3 85 91 da -4a e6 fc 11 2b 72 7e c8 19 84 df 7b 56 c9 84 4e -25 b0 fc d8 1d 2b e7 d1 8d 01 64 6a 6d 9f e2 25 -d3 69 7c 34 ed 2e 33 6c c0 37 3d aa 28 d8 82 e4 -97 75 7b 0a 65 10 86 2e ac 10 d3 b2 4a db 25 2f -30 d4 34 e3 0a 63 76 46 9d 80 b9 57 11 16 17 78 -df 35 88 9b 3a cf b1 f6 53 ea 63 07 2f 35 a3 c8 -9f 6b a5 2a fb bd c2 8f 23 d3 8f 4d 4e 79 fc 39 -7c 10 - -# Encryption: -3a 3e 72 5c 6e 4b b0 06 12 69 61 8c bb 8a 62 67 -d9 55 83 ab aa 03 d8 df 85 a4 f6 a5 cc 35 9b f1 -15 26 0d db 70 ae 7c 66 bb 8d 87 d6 33 1f f1 b0 -b5 4b e5 64 8e 83 e8 3a 91 c5 4c f3 71 49 6e e5 -ca 02 73 b1 9f 70 03 70 c2 c8 cd f4 28 13 38 a6 -e7 2f 66 32 41 68 ea 8c db c6 4c 60 9b a9 67 91 -c7 91 b5 ac 84 00 99 2a 8c 66 fb 09 f4 e3 13 07 -49 12 af 0c b7 41 5f b2 15 eb 97 fa eb be f1 a4 -47 23 9a 91 db 4a 34 fc a4 d8 43 46 25 9e e0 a1 -da dd 10 b7 f0 1f c8 c5 3e 42 0f 88 cd fa 0c bc -f6 2b e4 4b 8a 79 40 86 4f f8 13 7e db 12 2a c2 -da e5 41 0a 47 cf 07 62 e2 0f 20 86 cb f6 6f f4 -d1 a9 f7 27 0f 00 9c b2 e0 7d 90 20 b4 8a 76 d2 -41 08 e9 98 9b f9 04 e4 a7 1d db 91 74 0a d7 e5 -d1 b6 8e c6 4e 3e 66 cd 0e 89 7d cc 66 57 39 eb -ac 45 19 93 f0 2c c5 bf c6 3a 60 2f 55 83 81 da - -# PKCS#1 v1.5 Encryption Example 15.6 -# ---------------------------------- - -# Message: -09 97 12 b8 26 ba 67 cf 92 92 25 bd 61 2e c0 65 -d4 51 ed e2 31 c8 d5 c2 04 04 d4 70 e7 9a 7a 1f -24 6e 3e ec dc c7 5f 08 53 29 f8 f1 7b 81 d1 30 -30 0f c3 b9 f0 93 a2 - -# Seed: -81 cd 64 c8 4d 77 65 fc 60 e4 de 3b a9 b4 dd 21 -dd fb 74 fe 2d fb 7c f6 19 db a4 cb cc 17 6e d9 -4e 6f 37 ed 1a 97 e3 bf d3 63 65 d2 64 4d 3b 6e -e6 c7 71 09 fa 18 41 2e e7 cd dd 3b e8 d4 bd ee -94 c0 96 f0 72 ca b6 f1 88 6e 3a 84 a7 fd b5 af -f3 dd 83 f7 e5 c5 b4 9b b1 b3 8f 8f aa 75 25 31 -d8 9c 88 39 3e 9e b8 f5 7e dc 5b 9f e6 ed 2b c9 -5d 27 2c a9 95 f7 e2 59 b0 08 32 d9 8b 87 23 12 -cb ef 8a 04 8f 6e b7 91 97 84 ae d3 d3 1e b4 b1 -2f d8 07 60 a1 34 c9 d6 c3 34 c2 dd 3d fd f4 97 -5c f1 b5 1e 87 12 2b 97 33 33 44 96 08 ff bb 2c -f3 0a 02 bc 46 ea 24 7b 45 39 b1 86 07 bd 47 d3 -cd f0 87 72 14 ba - -# Encryption: -78 6b 3f 59 9d 1b 74 3e 23 58 26 24 fa 2c 94 a3 -6f b6 bd 33 fd dd 57 64 08 cc 85 4a d7 cf 66 7f -17 38 0a f2 0b 0b 73 0c 6b e9 8c 01 80 76 b9 b5 -04 1d af 2e eb 02 54 69 30 0a a4 36 43 35 be 26 -7d 33 b0 6b 4a 7a 79 7a 3c 0a a5 fd 3f 91 6a 55 -dc 27 4c 0a 24 87 f1 25 f9 da 82 59 6f 43 4c 7f -ba c7 ec e2 ef 6c 83 e0 34 8b f4 f2 c0 83 05 07 -55 b5 6a 9c 63 47 f3 9c 76 b0 e0 ee dc 61 54 10 -25 c2 3a a1 85 5c 0b 22 b4 46 fe 1e c5 f1 11 2c -5a 7f c2 85 ef dc 84 20 ec 01 a3 a7 c3 3f 73 5b -45 55 09 2a 9e 8d e1 6f 3f 7d 46 9f 88 cd 75 c0 -1c 7f 2e 7d 54 6a 1b 9e 7f 49 84 fa 29 a2 cc 80 -d3 10 f9 d7 81 8d f6 d9 ad 6c c2 05 37 4d 52 e8 -e1 73 90 bd e7 2f 25 b7 12 a4 26 9f 23 ae b2 41 -a6 66 e9 64 96 cd 84 b8 33 fb 53 d0 57 1f 7a c2 -d1 96 4b 8f 2a 7e 13 33 6d 9a 7e 03 04 1d cf cb - -# PKCS#1 v1.5 Encryption Example 15.7 -# ---------------------------------- - -# Message: -5f 2a 5c 7f 93 e7 14 ee ca b3 a5 5a 69 c7 9a 3c -bc 15 bd 19 df 27 98 9a 9b ab 59 fb be a9 ff cc -66 3b f8 e1 e7 40 7d c2 73 - -# Seed: -e0 19 60 82 6d 1a 69 f6 84 c9 c0 b8 5d 84 dc a5 -81 1c 89 a2 c0 74 2f 33 a2 ad 19 9f b6 57 a1 aa -98 13 60 1d 29 93 6a 43 d9 b9 eb 4d 32 89 cd 7d -37 06 ab 86 b4 d6 6a da a7 e0 a1 34 51 b2 ed b2 -bc 77 10 91 11 0c da dd 7e e2 e6 aa ea 2b 35 cf -ae 4c e3 b1 da 18 16 68 4c 89 c0 b3 fb 2f 87 79 -b2 5c e0 c1 2d 42 b1 d3 d3 0b 8f 20 be b8 99 91 -6e 4f d0 a1 58 86 37 19 2e 05 28 ce 6e a5 4c 8e -b7 54 fd 7f f0 03 25 81 a9 50 59 98 e6 9e 14 f0 -72 bf 95 df ef f0 14 df 99 ed 78 53 b9 82 e8 89 -41 29 a1 d2 7c 53 ea aa 23 4c 8d 14 a7 ff c5 f5 -e2 18 7c ef 79 eb f5 2b 3d 6c 06 65 89 5b fb 87 -e4 bd 61 0e 35 8f 35 26 da 05 92 c9 e5 02 b7 2b -76 e4 65 66 - -# Encryption: -77 d9 07 18 1c c3 b1 bb 19 81 e8 cb 22 f7 ad 75 -f8 82 e2 6a fd 28 1b 64 db 70 c8 4c 6a 50 fe 74 -24 9e 22 fb ee 90 e3 0d 0b 70 ae 2f 7e 12 ac dd -f6 78 f0 0d 22 7e 53 61 54 26 62 43 02 69 fe ea -34 12 47 92 af b3 f8 7b 30 f9 50 f4 ed f2 2c 44 -04 c9 68 8d ec 38 ea 0b 99 cb 3d c3 84 bd 88 fa -31 83 d7 e0 7a 20 54 d7 3e a5 1d 42 86 bb 39 da -e3 ae 6d 0b 96 51 f1 ea 48 8f 80 5f 2a 21 6e a2 -1a 56 76 b9 7d 1b 11 d3 b4 03 6c e1 67 fe f6 4e -0e ba 41 9a f6 73 98 3f c6 ee 01 c6 37 b1 64 e5 -aa ac c9 9a de e9 f4 7d 21 92 54 69 6c 8f ce ec -6c 74 ac 4e 39 05 1e 15 26 94 01 73 82 64 f0 ca -5b f1 22 c5 5c 9e 5d d8 47 b1 d5 77 4e 74 08 c3 -68 4a a9 74 b0 ba af 40 ed c2 2a 03 57 af 72 c8 -16 cf 73 1f cb 63 96 53 60 69 9f 26 99 97 b8 48 -0f 30 a6 b5 d5 7e 12 a5 cc 54 ec 0c 80 5f dc f6 - -# PKCS#1 v1.5 Encryption Example 15.8 -# ---------------------------------- - -# Message: -55 61 39 59 3e ee 8b 6e 87 - -# Seed: -2d e2 a5 72 24 f5 f5 b1 2e 22 3e b5 f8 2b 9f 47 -24 9d 25 55 93 79 13 6e af 18 e2 f6 c8 33 e3 f0 -1b de ea 9c 30 3b d9 67 7c 2a 85 71 7d 59 3a 28 -02 ae cb c6 b3 b7 1f 2c 79 03 ff 69 0e 3f 3c 49 -57 dd 74 cc 9c 2a 68 dc 1d 31 9c 1e 17 87 bb b7 -f0 e6 e5 1e 39 a5 ba db ba 9f d4 67 66 19 74 31 -2b 55 7a f1 89 52 54 9f 6e ba 9d f4 9f 70 ea b3 -68 9f 9f a8 fb ea 1c 97 e1 bb 2f 09 3e 6a ca 9c -38 0e dc 54 6a 19 c4 4f 91 f6 dc aa 28 9b d1 14 -fe a1 b0 36 f9 9b 1a 57 f8 61 43 d8 67 5b d0 7d -4d ea bc 9d 51 0c 61 70 99 44 9c cc ed 5c 45 07 -b7 9e 85 1e fe b1 8d 06 b1 99 81 0b b6 b3 cb e4 -12 73 ba a7 35 16 02 e5 f9 52 13 f9 69 55 ad 5f -dd 3a 20 52 db c7 5f cf 60 aa 22 47 f2 d4 e6 03 -da 45 37 0d e1 c1 da 68 7e 26 8e e4 46 67 f9 4d -ad 13 bc 9b - -# Encryption: -4a ce 54 a7 52 f5 56 e3 6e ab b1 19 48 95 84 12 -14 0c 80 c3 1b 61 dc 40 f8 1a 6b 12 17 a0 1c e0 -67 ab 37 f5 3d f4 c7 7d 9e a9 c2 d7 95 0c 8c d4 -97 00 b8 cd 24 d4 e7 8f 7f a3 46 29 62 cb fd e6 -d0 2f b0 e5 03 65 64 93 25 05 ae 1c 85 1a a6 d1 -d8 4e fd 04 d5 78 ad 68 27 3a 36 a8 ae 23 d1 45 -2f 94 a9 37 88 17 71 3e 76 4a 09 17 45 26 29 b5 -dc 75 b5 7b 0d 5e 6a 72 8c 83 69 11 72 d2 cd 95 -f8 ba d0 7d b4 68 eb f5 45 b7 f3 f2 c8 63 b6 e2 -0c 67 c4 76 9d ed 03 91 a3 36 f3 a5 d8 7e 24 fc -f9 1a af 77 4b ee 77 a7 89 a5 90 80 09 c7 a5 5e -ac 92 af 4c 3d 46 1e 7b 40 61 6c e8 06 19 4b fc -20 74 c3 f4 f1 35 59 70 0b 27 08 a0 b7 55 78 96 -70 a3 62 6a 14 63 88 11 bb 18 e1 5b 10 25 c3 b9 -be f1 11 17 6b c1 f2 46 9e a9 9a ad 20 86 05 73 -d6 c6 a1 fe 40 db 51 e3 6f e3 38 00 10 1b da 20 - -# PKCS#1 v1.5 Encryption Example 15.9 -# ---------------------------------- - -# Message: -9a 13 96 62 2d 06 6c 10 56 08 58 c2 c4 cd 5c 04 -44 9e 2b 95 50 c5 bc 92 93 76 1a 91 04 41 1d a1 -8a 57 d9 b6 a9 97 33 3c db ce 77 e9 fd be 6b b8 -31 - -# Seed: -f1 78 61 ac ff b2 4c ac ed 90 ba 38 aa 7e a0 f2 -e5 4e ea a6 2a e6 64 98 f3 c2 8f 99 6b ce e2 53 -be e8 19 9e 3e b8 0d 62 7f ee b6 e0 b3 94 90 ed -f7 6d 16 a2 a0 bc 20 09 32 52 a9 d7 f1 f9 38 8b -06 19 44 85 2a fb e7 3c e4 13 a3 fc a5 21 b9 47 -4e 67 81 29 46 4d 91 b8 2b ca a5 9f 56 ec fb 12 -4f 61 f5 04 67 13 01 05 b2 cb c6 94 3b 95 36 95 -cf cd 20 c9 b6 ef 53 f3 f2 10 33 1d 39 32 dc 01 -0c 73 59 29 09 6b 2e 68 ff 16 66 4b 0b 90 a0 fa -1b e4 60 57 85 92 b0 cb 4d 6c a4 5e a0 6b de 3e -8a 1e bf ef 70 d8 3e f7 9b 3a 74 db 06 0f c0 20 -3b 74 80 7f 40 70 01 f4 b4 d9 9e c5 15 8e 8e 7e -4b 10 2a 51 5d e9 5d 2b 70 fe 1f b4 - -# Encryption: -10 0e ce 63 45 25 d4 67 f6 d4 a6 b6 6e de 1c c2 -37 f6 1f b2 b6 70 23 a8 3d c4 56 b9 2c da 18 3e -d6 62 0f e5 7d 5a 67 33 2c 77 23 3a c1 e8 72 5b -36 f8 e1 b1 08 41 2c a6 fb 35 dc d4 d8 16 77 a2 -b3 0d 5e af 25 e0 b9 19 1b 38 f7 ee f8 3f 91 21 -a8 08 43 8c 92 ab 03 f5 20 80 7b c9 a8 94 70 5e -af 4e ed 06 68 23 a6 7a a2 a5 59 9c d9 5e 58 da -7c 09 48 36 d2 af eb a3 9d d0 09 a6 4a de 03 05 -33 76 f0 29 36 cf 3f 56 bf 64 c1 f3 bd c0 7c 45 -a9 5b 9f cd 93 96 cd 9a 8d 41 bc c5 64 24 93 7a -13 71 b3 84 7c 90 5b 9a b5 84 02 39 3d 40 46 e4 -a0 15 c1 47 08 f7 4c e7 79 0e ba 8a f7 92 07 24 -40 bc af b1 4c 0f 81 08 97 11 87 c8 0f 46 3a 1f -ff 25 86 46 ea 16 e5 1c 6e e3 61 b6 61 a1 4f 07 -cd 4f 5a 82 c7 09 f4 94 f1 df 0f 80 3b 6f 64 a7 -2f b9 c4 50 ff e2 68 fc ab 48 7d 4d 63 01 3e 41 - -# PKCS#1 v1.5 Encryption Example 15.10 -# ---------------------------------- - -# Message: -b3 82 4f b5 45 a8 3f 82 ef 82 23 11 82 84 c5 45 -6b ab 60 0a df 79 f5 07 33 b6 66 8f bc 51 5d a5 -96 31 62 a6 d7 d7 e9 6f f9 1a ff 12 eb 3e 93 11 -e2 21 e7 0b c0 - -# Seed: -b8 26 8e 4b ce 7e 53 f2 e8 be 98 b1 92 d6 3a d0 -65 44 a8 0d 6e 62 d6 32 48 6e 15 e5 75 ba 70 6e -3e 76 89 30 dc 8e 41 1f 8e eb 0b 6e 8f 06 06 29 -da 8a 24 23 68 e4 79 cc b3 31 69 70 70 b4 b3 52 -4e 69 16 92 76 ba b0 a9 45 14 cc d6 60 70 25 28 -ed 20 b5 d1 df 07 77 9a 62 c6 56 86 e7 d6 68 46 -6f fc 74 8e b3 43 44 ca 6f 30 5c da 3d c3 e8 f0 -1c 43 ea 91 79 da 46 21 47 f4 d3 ec 92 f8 88 b7 -ee aa 41 0e 12 c8 6d 89 42 c7 d0 12 f4 5c 61 ff -a6 e2 b7 8f 84 3e 9a 75 d9 67 32 14 d5 58 ca f0 -1b 45 f9 36 86 ee da 54 79 db 80 52 79 25 59 cc -23 6a 4a 1e e6 5d 3c a6 0e 09 a3 c1 84 d4 b3 95 -d7 0b 8e f8 8d 78 09 1a - -# Encryption: -c0 e9 8d 50 89 4a da 84 9f ce 89 83 f6 f8 95 74 -03 4d 6c f3 b8 35 2b fc 50 72 4a 70 3d d4 f4 2f -40 06 ae 00 8a d9 72 33 ce f6 f1 6c e1 b4 23 f5 -2c 6b 67 7e f0 05 13 1b a9 87 f9 8c 72 2f aa 49 -42 ec ce 2c 99 66 37 40 a1 a1 e9 81 20 fa ed 97 -fd 03 ff 36 fe 73 75 8e 70 df 17 f3 1f 1f 39 41 -81 2d 34 ca e6 c3 9d e7 87 ef 57 04 bc 39 c9 20 -ea 5b 0e b1 83 3e 83 b4 57 94 fd e0 ff 00 05 c6 -27 33 c7 0a 29 6c a0 bd 47 f0 65 50 3d dc e2 d6 -49 de 1c 32 8d df 60 32 a3 3f ad 46 ba 04 1d c0 -a9 94 bf 0f 56 a4 65 f1 62 5f cb 81 ce 01 fa 29 -9f c2 b3 c8 09 39 eb e6 a6 73 82 6e 2b 2f 12 ec -dd a5 03 5c 95 09 31 2d d1 9f 10 c3 5c 8a 8b 0d -a6 3c 08 51 97 00 6a 9b e2 36 10 8e b9 87 91 b2 -6e 28 08 b5 cc d5 ac ec 73 8b ca 02 5b 24 18 2e -f4 ab 9c cc b1 71 a6 9f b4 23 a4 6e 03 7a 4d 0a - -# PKCS#1 v1.5 Encryption Example 15.11 -# ---------------------------------- - -# Message: -a3 a7 da 1b ed b2 ca 99 fc de b7 a4 6d 63 3e ca -35 06 2d f2 89 6b 69 59 07 a7 f9 71 d2 cc 50 b6 -e3 d2 a3 67 d1 6e 72 7f 56 97 c0 - -# Seed: -f0 18 a9 b1 3f be 56 0b fe 95 52 ed 8a 86 06 be -ea 90 05 5e d3 f6 2b b2 af 07 f6 92 cb 60 ac fb -6d 59 07 d6 0e 0a 59 7a 54 ca ea f8 44 91 1c dc -87 4f af 95 69 53 a2 7d 30 0e 9b 71 5b 10 4d f3 -c2 32 c3 c9 63 82 cf 5b 5f 3d 07 b2 30 b5 25 bb -33 0e 31 9d 1a 7c 82 d1 53 af 81 7e f1 1c f7 2e -76 dd 50 b0 d7 e5 56 22 65 c8 34 5d a8 29 f5 60 -d6 a5 4e 6f 1e 28 8a 3d c2 17 6d 19 a6 8a 0b 1c -5c 92 b1 6b 8b b2 9e 4d 01 df bd 0b 18 07 9b d4 -0c fc d5 23 35 b3 a1 8b c4 ee 92 44 76 0e b4 94 -f5 be 5b 19 71 88 6c a2 be ec e0 a3 94 4f ff 8b -e6 b4 2d 96 e1 c2 c7 2e 4e 90 f8 7e d1 36 15 46 -7c fc 91 c2 6e b3 8a 7a f9 f5 66 86 93 1a 47 26 -da 04 - -# Encryption: -25 17 7b fe 12 61 9b 44 f4 a4 fe 7c b7 6d e9 3d -4e d4 a0 5a 31 e5 be 8c c4 e5 60 66 1d e9 a3 4a -e3 17 cc 02 ff 63 10 67 08 32 8b d3 f7 87 63 ab -3e 57 65 2c 63 f1 05 f7 97 1d 2d 8d 70 1e 62 97 -a7 9c 78 7b 7c cd 62 a5 3b 39 d9 c0 39 46 e6 6f -48 8a 92 e8 e1 7d c6 ec b0 f6 5b f0 1e 3a ff ee -99 76 87 31 1b e0 e9 45 ad d6 3f a3 f4 00 38 2c -b8 ff d8 91 57 54 01 8c c7 5e 82 82 26 b5 03 9c -d9 c5 7f c6 d9 9c be 8e a4 a3 d2 9c bd 09 d5 4d -95 cc 07 34 c2 35 44 f8 e1 fb c7 49 3e 06 d1 6c -0a 0a c1 53 0d 21 f0 33 7e 26 2f d9 d2 7f cc 4a -fe b5 74 d6 68 66 d4 ca 84 cf d6 e0 af 2b b9 77 -a5 d9 9a 5b 0b 37 44 04 2d 33 2b 93 6b bd d8 69 -e5 f2 c8 83 b4 00 ac 8b c0 68 3e 67 90 63 42 9d -98 d4 94 f3 18 04 d6 5b b3 c9 74 aa 72 e6 65 7d -4c 16 38 c6 79 c8 1a 16 45 3f 6b 0b aa 3f 05 17 - -# PKCS#1 v1.5 Encryption Example 15.12 -# ---------------------------------- - -# Message: -49 f6 f8 a4 a8 6a 8a a0 97 63 aa c8 55 72 b0 e7 -ee 77 6a ef f8 a8 29 00 07 76 ff a6 - -# Seed: -6d b6 a8 27 ac 2a 5e 06 16 c0 f4 43 b2 34 58 e1 -75 ac f9 a3 b2 55 f5 c8 52 5e 72 53 42 4f aa 91 -38 05 4c 3d ba a4 71 f2 7f e8 55 c1 c0 ce c3 62 -59 7a 1a 1e 6e b4 f2 98 ac 3e b7 34 d3 1f f0 ef -10 08 c0 e0 2b 9b 06 e2 93 15 fc 09 4a 7e d2 6b -11 ea 55 27 0a 3d cb 67 06 f4 6a 94 50 bf 83 12 -88 10 65 13 02 48 d2 64 47 66 a7 99 66 ef da db -aa f5 75 ef 4d d3 5a 93 7f f0 bf bf 3d 95 61 c7 -54 40 9b e7 b8 84 7a 60 8d 79 1f b9 87 ee d4 6a -fe b0 db 1c a9 75 c0 5f 61 57 0d d0 70 98 5f 13 -e4 e0 ed 7a 8c b3 91 ce 4d 42 08 32 b4 5a 8b 7e -9f 90 88 4e 61 18 98 f4 72 a0 ac 46 c5 7a a7 f8 -46 8a a1 9d 9c 7b 31 2f 13 43 22 99 03 93 88 1d -32 aa 14 68 f6 e5 f8 eb 85 a2 c3 c2 da ed 92 b9 -3c - -# Encryption: -0f f9 5f 4a 2a 07 18 d6 73 f9 20 2c 80 9f 10 45 -10 1f 52 b9 db a7 72 88 fe 28 8c b2 77 c4 db aa -35 db 93 27 ec ee c3 76 5a e0 33 e0 b6 b7 77 b2 -2c a6 be 66 20 03 ea fa 2b fb da 60 6f d8 ce e7 -ee e0 6c 6a 00 c9 45 a6 55 6c 60 b0 08 69 f9 99 -97 1a 8c 57 af e1 dd ee 7a 75 77 04 7a 0d b9 0f -62 cd 24 7a 88 7f 32 27 ef 6d a9 07 a7 5b cf f1 -9a a3 0c 90 8f 58 35 ef 10 10 0a dc 7f 6a d6 fb -31 99 79 0b 3f 4d 6a d1 9a 0d f5 02 7f db 8f 84 -66 04 e0 2d af 33 55 d9 56 40 77 79 af 15 5a cf -a5 a3 2e 6d 61 74 dc 90 13 1d bd 7a be 58 5d d7 -59 fa 3c b7 e9 f7 21 45 3f 3e 35 4f e7 be 0b 11 -8e f5 b8 79 42 b5 fe d4 c3 0d 7a 08 fe 24 64 eb -79 a3 de ba b3 7b 6d 3a 0a b3 15 77 de 7e 93 22 -9b 49 d1 e8 fd 56 32 d0 26 d8 3e e0 6a a7 85 34 -ce e3 08 1b 22 2e c4 cd 94 88 cc de 4e 15 29 05 - -# PKCS#1 v1.5 Encryption Example 15.13 -# ---------------------------------- - -# Message: -12 97 5d b7 3d - -# Seed: -6a 4b 4f b8 05 80 72 72 96 5b ff 2f 4c 80 0f 96 -4f a3 ae b9 fb 43 3b 40 c8 ac c5 98 b4 84 02 98 -93 a2 19 c9 53 21 34 c0 6a c8 42 5c 28 a5 f0 63 -c2 84 20 0a 04 56 43 48 97 16 51 6a 98 7b f8 1b -a1 86 f4 ce b8 d8 d9 dc 1d 73 f2 26 7f d1 98 8d -6a 2f fd 68 cd 36 69 de 2b 04 70 09 43 d0 d4 44 -ae 3d a8 f0 59 4e 62 61 e5 ff f6 07 f0 4d f3 1e -3d 9c 91 22 d7 6f b9 0f 3f 82 c3 93 25 3b 75 20 -16 5b d1 f3 19 ab 3b 87 5e cc 6a b3 ed 02 47 d0 -37 70 f8 d6 47 1d 69 cd 13 ee 25 7c 1f c8 b3 0f -19 b9 3f e4 f2 fc 9c 21 49 28 13 d1 fc 85 2a f7 -0c dc 63 84 d2 ae 55 b9 1e 39 ae 6c 3b 19 fd 1a -7d ea f7 18 c0 5d 57 80 95 96 a2 88 fc 9a ef b8 -15 ae a2 9f af 67 83 c0 05 35 fd 71 d6 25 49 40 -b7 62 f5 07 26 1f 20 9b c8 ba 94 79 bb 3f 5d 64 -64 23 19 cc 31 86 85 9c - -# Encryption: -27 15 d6 eb 53 ae e6 d4 bd dd 3b e9 b6 63 14 4a -41 0d 03 81 77 9f 79 9d ca 88 07 92 ab 43 1a f9 -98 9d eb 17 36 9d c6 74 38 ad d8 2b df 0a 59 dd -3b c2 78 01 02 58 c7 df 87 69 84 ff 52 76 78 bf -9b 34 c0 77 43 b5 d2 2f 4f 30 cb 5d 7d 8a 6c fd -50 58 24 f2 e0 94 02 4f b0 43 30 f6 6d a7 cb c0 -1d 5e cc 8d fc a1 ca 9e 50 91 b9 d9 c8 e3 8d 0a -c3 93 1d e5 d1 fd c8 33 73 84 82 a7 fd 15 2c 1d -24 e6 9e a0 1d d3 e1 fa 77 23 54 a6 07 d6 2c 60 -b5 61 dc 5c cb 01 2b 71 2f 5c 2d a1 89 2c 31 20 -ef 99 0d 74 61 1d dd 35 66 af 1a cd 8b 48 50 06 -1c 91 28 f8 2a d1 12 da 9f 68 ac 88 39 3f 9a 5c -2c 10 20 aa 77 e9 b6 2e 2d 1e 98 5f ef 86 4c c1 -ae b4 51 ac 83 9c 72 0c b9 73 e7 b5 df 24 a9 8c -cb 6e 67 72 66 29 a3 66 fe a3 f9 a9 52 1d aa 19 -b0 44 30 e8 10 f2 c4 5a 57 d4 25 3b ed b9 1d a0 - -# PKCS#1 v1.5 Encryption Example 15.14 -# ---------------------------------- - -# Message: -8d e0 f5 a4 13 a7 f7 86 39 6f 09 a4 5e 5e 77 4f -3c 60 9c e6 f1 b4 90 dd e2 22 b3 22 d5 34 0e 9b -10 55 81 f4 c5 be 44 ea bb 3d 1b 23 f8 45 - -# Seed: -f8 71 a8 97 ae e8 45 c3 bb 82 69 90 b7 31 d2 77 -7c f4 76 b5 cf c5 59 6d f3 a5 23 ba 69 79 c7 a4 -51 79 da 5f d6 0f 81 0b f4 14 c5 4e 18 2f 26 01 -72 0f fe 8a 50 d7 d9 d1 1e 56 43 18 e9 02 6f 07 -c5 aa a1 3e f8 91 28 3a 96 63 c1 e3 d2 7b 93 81 -7d 01 a5 6f ce 33 d5 16 9b fe a6 2a 8e e6 c3 70 -a3 aa 8c 71 94 d9 d3 53 d0 98 16 61 fe 85 81 62 -50 e0 32 4e ae 1b 84 7f c7 32 91 91 60 d0 1e 11 -92 ac 16 be 0e b8 e9 95 e4 86 40 27 6a 2d b7 b8 -7f 84 b3 fa c0 4c e8 62 f0 22 38 62 3f 62 b9 2a -2e 32 7b 01 b8 c7 b9 e5 ec 87 05 5c 6c b7 b5 56 -51 ab 5a c9 89 83 3b 03 4f 8b e0 11 6f 28 b1 e8 -86 a2 ce d1 23 29 8e b0 04 07 5a 6b 5b 71 b1 - -# Encryption: -d3 67 ac a8 d4 f1 74 14 e9 bf 09 ad 81 1d 78 db -0e 85 0c 45 c8 f9 d7 02 44 75 d3 e5 6e 3c bf be -6e e8 ab bf d7 74 58 26 41 7c c8 ed 52 f5 4e 00 -a9 2f 81 7e f9 83 e9 8d 10 0a 1f 99 0d b1 e2 90 -a8 51 6d 60 9b b3 2e 50 2a 77 e1 1f 76 20 0b 00 -25 76 5e 9b d2 85 9b a9 4a 69 63 33 a5 eb e2 eb -25 ba 9d 19 00 7f 64 36 0c c0 75 ca d7 f0 99 50 -e4 b7 af cb ac 36 e6 ec b0 17 cf 4a 1f 25 a4 d2 -b9 51 bb 85 e8 1c b2 b4 eb 6f 45 cd d4 00 d2 ac -4e 21 69 89 6d 94 15 82 44 9c e3 0f 69 c1 7c b4 -49 32 1f 65 e4 4d f3 03 87 86 27 62 13 51 f5 2e -5a 07 52 e3 b5 eb 12 63 61 69 7f 53 cf 24 66 16 -5c 3f bd 66 2b 83 75 80 b7 6d 45 9f f0 44 97 e5 -fe 1b 3c d1 8c 4d 58 ff ed ab dd 04 a8 c1 08 d8 -59 b6 52 98 63 9c 3a f8 0c d9 4e 23 87 a8 69 44 -09 ef 9e 0b 78 b6 f4 67 39 0b e1 08 57 9c 9b 2c - -# PKCS#1 v1.5 Encryption Example 15.15 -# ---------------------------------- - -# Message: -9e 78 c8 2b fd 0f 23 d3 91 e7 60 01 64 01 9a ad -28 f5 9b 14 15 44 04 d9 e9 66 13 3c 10 3f c3 7c - -# Seed: -bb 42 24 7d b2 40 ba ca cb cb e8 c6 8c b0 f7 0e -46 0a 49 73 da e6 56 99 35 8f ef 82 70 d6 5c 3d -0c 45 5a 37 9c 56 3c 59 7b 28 f4 ff a0 70 e0 ec -1e bb 9e d4 27 fe 89 ab cd 47 93 c4 22 c3 38 87 -8c 8b 14 5b 46 c4 f7 13 78 a0 fd 7d 50 53 b8 67 -98 bc 02 d9 32 93 fe d8 47 f1 8f e0 61 59 07 4a -c1 89 d9 56 23 20 74 db 6d dc f9 94 1a 70 f2 8b -60 e4 83 39 5a 2d 21 01 54 b6 2a ba b8 75 0f 5a -eb f1 ac ef e2 05 6f 5a bd 2f 0e 0e c4 94 af a8 -2f c5 9b b3 57 f1 16 a9 4e c1 cd 06 03 b5 2f e5 -6d 31 a4 3b 87 aa 63 77 88 c7 24 cb 6f 88 37 3c -92 f6 07 11 bf 3f 35 94 e2 3d ee 2f ec ed fe 6f -5f c8 86 e9 6a ee 7c 74 68 22 e5 6c ba 7e bd aa -2a 92 10 ea 81 98 e4 c2 2d e9 29 89 45 - -# Encryption: -81 8d cb ba 98 c3 46 79 3c 79 d4 bb 78 5a a6 40 -19 1b 05 f8 83 5f f7 39 74 44 3b ce 35 7a 26 9d -44 64 6e 8c 79 10 2d ce 22 92 39 78 a3 94 1e bc -b9 90 4f c1 bb 1f b4 3f 11 27 5e 71 eb 7a 84 d2 -74 be 10 4b 00 af 92 25 e2 a4 f7 f5 a0 48 ab b6 -6c ba b6 52 5d 1b 11 5d a8 c0 bb 08 de ea ec 7f -80 eb 6c 39 50 4d c4 eb 38 15 4c e4 b6 91 b4 06 -93 19 b2 93 c2 5d c3 0b 8f b3 8b ca 15 3e 2f a6 -1b 33 76 dd c3 c5 3a 57 93 21 d9 10 a1 71 fc 42 -aa f1 70 50 ed 6d 31 1a 7d f5 b9 a5 cf 3a 98 fd -69 aa 85 ac 23 46 c1 6f a0 3b 1e 53 d1 03 d6 f5 -a0 4b 0d 9d 3f 18 83 53 1e 2f 63 41 fd 91 bd 63 -a5 aa 99 3b 6e db 99 92 e5 db 17 a7 be 55 5e af -a3 bb ab 32 08 6e 92 b8 b7 91 06 69 68 e0 0f 8a -17 71 61 44 0c e5 38 57 97 89 c2 91 2e bd 7a d0 -19 be 29 37 6c ad ee c2 99 21 07 c9 db 07 60 49 - -# PKCS#1 v1.5 Encryption Example 15.16 -# ---------------------------------- - -# Message: -6d 72 08 b2 ff b0 1a d2 36 0c 46 09 f3 ba d3 15 -79 c8 d4 00 5c c9 60 14 2e 2b 69 6b 26 e9 4f 2d -99 98 0b ad 38 41 05 b1 89 95 57 af 89 05 25 - -# Seed: -72 ae 49 97 18 28 ba 54 23 ab 96 3c db 18 f4 bd -fd bc 74 73 cf 70 fb 77 21 34 41 f1 d4 46 ae 48 -10 93 03 a2 60 c0 91 ab 51 99 d9 64 e6 21 63 c2 -46 57 24 71 73 cb 05 11 b9 cb b1 63 45 9c 95 6f -9c 0b 18 83 b6 91 b5 e4 ea e0 4f 0a f2 4e a3 28 -c6 de 88 2c eb c4 f8 9a 56 37 32 82 d6 0a f2 ba -96 7e 25 7a c4 01 a3 7f 94 41 c1 1f 2e 0e 42 1b -2d 15 1e b2 43 a9 7e ae 5a aa 86 cd 38 df 43 c2 -6a 1d 6e 3b 12 c1 3f a3 59 7b 85 bb aa 13 09 45 -2c 7e 9b 32 5d 8c 73 fa 79 9c 57 56 52 73 7b 92 -a2 47 d2 3c 4c 70 12 40 c5 3d cf e2 ea 69 7a f6 -1c 07 2f a7 6b db 05 2a 58 c9 19 e6 9e c5 7b 39 -a2 a6 c4 7d 77 0e de 67 10 fc 7b dd e6 01 - -# Encryption: -4b 56 dc d3 04 bd c7 f0 cc b7 0d 2c 58 6f 52 74 -60 1e e6 05 36 bb 21 80 61 67 13 50 d6 d3 ae 2e -28 4f 07 b5 ed 63 01 79 26 94 13 12 2b 98 37 60 -90 f7 a4 a4 f6 43 4a f7 3a c4 0c 7a f4 b6 d7 a3 -e3 14 70 2a b9 b8 5e 08 73 1d a0 d1 2e d3 f0 07 -0b 0d 20 95 05 3b 3f 0d 09 d6 c2 cd 8f 98 ba de -d9 11 48 c3 5b 7b 33 c5 43 65 3c cc 32 d8 36 f5 -f7 f2 ee 39 ca bd 0b d8 9d d9 a4 a9 4e 91 2b 4c -a9 7f 18 51 d0 17 45 1f 60 96 ac bf 20 a6 5e c5 -a2 9f 08 f8 13 5c 73 18 a2 21 6d 1b 7d 10 37 95 -c7 ec 8e e5 7a 79 28 0f 9a 84 4b d6 ab 71 28 82 -0e 1f b5 e8 25 54 fe c0 2a 78 aa 8d 3f d6 a1 3e -0f ad 0e ce e7 ab 61 1d e4 b0 a0 48 1f 42 b8 d0 -b5 5c b8 81 3d 1c a6 e2 61 5c f5 ae 8a e8 6d 0b -5d 46 95 50 75 49 f7 a3 73 66 a4 45 fb 55 b7 c4 -b6 b5 8e a6 99 db e5 dd c8 19 3e 2b f3 d5 b8 40 - -# PKCS#1 v1.5 Encryption Example 15.17 -# ---------------------------------- - -# Message: -7d eb 6d 40 41 48 23 2c 48 21 63 4d 3d f9 bc - -# Seed: -e6 f8 3c 8c 99 3e 60 15 af 43 04 09 68 4e 62 7f -3d 9b 84 ad 05 55 c6 a6 c0 91 13 a7 12 47 2a bb -36 f6 11 92 32 6c f8 40 82 aa bd 1e c9 5f 4d 1a -92 d9 10 7e 30 61 0c 8d 27 59 55 6d 5d 61 47 5c -a3 f3 cb d9 49 fa c2 20 3c 42 3d 56 c2 75 58 e6 -11 8f aa 0f 6f 68 4a da 13 c3 15 3f 6d 25 53 38 -bf f7 34 e9 5f 60 ad 29 19 ab f2 88 15 d3 cc 0b -1e fd 38 5d 0d 45 81 b0 ee 84 94 f2 bb e2 99 59 -91 ac 1e a8 15 40 cb 7e 88 56 68 e5 a5 2e ca 90 -57 ed 9a 1f b2 3f df 83 b5 75 51 35 8c 23 cd 43 -ce 0e 7a 33 c7 25 66 b8 8f e5 93 43 f1 87 24 46 -d3 2c 44 b3 99 0a a4 db 3e e5 93 42 4c 8e 09 46 -d2 61 e3 27 0e f4 07 6b b3 5d f3 c3 c6 da 4b be -42 3f 59 1b 5c 93 ba 56 c5 cf 01 d4 f0 a9 40 96 -71 09 d3 9b 93 9d f2 82 53 2e 54 83 10 8b - -# Encryption: -aa 6e 6e 4a f6 89 26 4d 61 bf a8 f5 08 6d 82 79 -dd c2 28 9c 55 41 af 45 35 19 c4 4b 95 ea e6 a1 -5e 7e 7b d1 5f d3 1a 4f ad 5f 7c 85 90 5e fc a2 -26 93 0d 67 da f5 58 b7 15 b2 1f 36 28 f6 1a 3b -04 2c 1a 38 f9 af 3a da 82 ec 44 88 c8 ad e5 f1 -da 81 e1 a8 ab 90 e1 b3 12 dc da 83 5f 9e 92 5f -2e 72 46 3f a8 33 a0 8b 93 25 3f df e8 cf 4e 5f -3c fa 91 10 77 19 a6 a9 46 9a cd 71 25 ae 67 b2 -bd 75 85 7c 59 be 0a be 98 40 74 e2 95 47 8a f2 -74 0e 25 89 4e 56 a6 25 0e f7 36 21 94 13 81 03 -74 3c a9 54 47 33 d2 50 55 71 be e0 0f 17 8a 2c -fa 38 e1 f8 f2 2f b2 39 30 d6 a7 5d d1 7c 68 9a -47 6d 87 15 31 85 95 10 8f cc e8 95 e3 44 9e ca -97 a7 dd ba e3 e6 d6 f0 e3 5e 66 6d 6f bd 78 78 -48 f8 68 13 37 b1 d4 c5 23 8b 1c 24 de 77 a7 e6 -75 e7 ae d8 dc 13 dd 9e b1 06 87 98 51 7c 0b 6e - -# PKCS#1 v1.5 Encryption Example 15.18 -# ---------------------------------- - -# Message: -03 1f c3 a3 ea a4 2b 0d 9f 6d 7d d5 99 3d 61 89 -cb b2 e0 e9 6f aa 33 d6 1f 31 7b 6b 3c 00 - -# Seed: -16 ab 64 85 ca c0 39 71 14 88 0e 6f 72 bc 1f 1e -f3 4b a2 7d 1c 43 3d 77 f3 37 2b 1f d5 b2 1b a5 -7a 50 5c d8 f3 5b 75 24 2c f1 b7 6d 38 1c 68 34 -24 01 ee ef c8 42 53 a2 de 1a 19 13 e4 38 77 3b -7b cb 31 cb ab 25 8f 72 6a c9 34 a8 71 26 96 9a -db 7f 76 8c 1b ab 87 54 a1 3a 3c cb ba 6f 3d d8 -d0 ec 6a 7c 6d 68 7d 04 95 b6 e2 2c 9a e7 67 af -c9 d9 4f 2e 45 a1 06 13 3c 42 c7 9b 52 c2 6a d4 -b6 7b d8 ec e5 5e 84 32 5c a6 f4 9c 8e 95 31 f5 -f6 b9 ca c3 5c 93 3e eb e3 b9 a1 1b 9b b1 c9 ea -8c e6 d2 28 5d a9 08 e5 91 97 82 b5 b3 08 fe 47 -8d 98 e4 9a ea 54 3b f8 ca 1b 22 ed f4 3f db f6 -af 31 cc 8c d4 fb 7d e2 d8 19 af a5 48 3e ac dd -56 d7 78 7b c8 bb 16 22 38 40 49 bc 30 9a 66 - -# Encryption: -61 c7 54 76 30 43 b5 84 e4 a8 54 6b 79 f0 a3 e2 -e0 f3 b3 e2 db 6c 94 ad 81 7e 92 81 f4 85 c0 82 -08 fe d4 f4 d7 d0 a7 8c 6c 31 1a 07 c7 5b 9b be -85 04 f4 b7 a6 92 99 02 16 de 12 58 5c 00 9a e5 -8c 26 f0 85 07 1f 39 5e 5a f8 92 5f 39 33 f6 d9 -f4 12 d4 25 54 64 54 e8 00 b7 e3 aa c7 8b 7a 08 -b9 2e 79 8b b8 34 eb ea dc 4b 4a 63 56 af 1c a0 -9b f5 86 74 5f 61 6d 51 74 8c c7 a3 7b 48 cb 10 -97 7e 30 3b be 10 bf 27 c6 9b df f0 ba 5c ab 8f -62 d0 58 7a 09 d6 e0 22 82 32 33 c8 c7 aa 41 87 -22 23 ed 15 a7 4a cc b0 f1 f8 22 f2 4d 75 94 ed -99 25 a1 c6 c0 c0 f9 ad 0e 07 1e b6 b5 eb e1 ba -b6 ba 3b 6d 99 a3 16 52 04 7f 46 92 60 be e8 71 -0e 37 0f 04 ed 70 75 93 93 7a 08 dd 82 26 49 92 -31 1f 4a f9 88 4c f8 ad 34 af b9 f6 75 99 3c 8a -bf 41 51 98 39 f7 6f a1 e9 31 bd ae 1d 08 a6 34 - -# PKCS#1 v1.5 Encryption Example 15.19 -# ---------------------------------- - -# Message: -c9 c9 3a fe a9 97 b1 ee 36 fa 72 72 03 54 c7 04 -64 9b c6 ef 44 f5 18 7c 6c 28 54 2b 9a e9 55 a7 -19 3f ff ec 86 7b b6 2e 21 9e 68 - -# Seed: -52 d4 c3 bf 0c 77 2c 02 d3 bb 71 1d 7f 14 6d 8c -49 76 f8 30 81 be 49 53 d4 af eb 07 8e 54 12 a3 -2c 3d c7 37 b5 9b c4 54 c3 de 93 a1 ae d0 7c 1b -a6 4d 1d e4 36 80 14 d0 4f 64 40 55 6a 4a 16 97 -9d 08 03 cc 29 22 da 97 ed 67 61 90 12 f8 f7 d3 -b1 a4 55 84 b0 94 6a f6 db d4 a0 85 7d 4c 2d b9 -9a 17 bb d2 7a cd 9a 62 e6 7f 88 79 db ef 27 f1 -04 6a 86 7e 69 95 16 2b 2a 1a 1c cc dc ea f4 5b -e1 33 7e 5f a8 f8 5e da ad f7 50 8d 58 f3 26 aa -7c f3 01 f4 41 ba 55 8b 60 e0 fa c6 e0 d1 99 20 -61 a0 a4 69 be 02 16 26 89 0e e8 7e 68 13 9b d5 -19 ae 77 3e 3e c4 81 b7 f2 b3 77 33 1f 52 f2 e3 -86 88 4f 76 57 23 e2 6c d4 a8 d9 68 61 4c 9c 33 -dc db - -# Encryption: -d0 68 67 02 2a 0f af 57 3d 62 cc 24 a6 e0 6a 44 -cd 3d 83 ea c5 d0 80 9e bf 91 30 45 68 cb 1b 27 -56 1b b2 92 e8 77 6e 21 6d 1d 02 3e 75 3c 12 4b -51 86 7b 94 dc 60 89 4d 62 c7 da e5 fa 1a 9f af -03 76 e1 75 8c b6 ad c7 14 17 e8 31 02 52 8f 23 -f4 c5 e5 b5 03 62 a3 9e 2a a9 76 8b 10 62 08 6f -a8 c5 3f f1 c3 9a 0e e0 3d 38 3d 24 bf 49 07 22 -b7 86 da ec 90 8c d7 15 1e 18 5d dd 17 88 26 78 -02 7e 36 8b 05 12 cf 98 41 3f 3e 59 6f a3 db 4e -c1 96 ae 5f f5 24 a8 26 6d 76 0e 00 51 43 3d 18 -98 ff c2 30 e9 6a 2f 0b fd f2 b2 44 29 ad fa 91 -8a ba 1a 45 0f 76 78 34 72 30 12 93 84 8b d8 2d -5a 33 84 31 d6 cb 1c 10 6d c7 41 d2 34 bf 5a 80 -db d3 25 da 64 a3 94 a0 06 5f 22 02 8d 0f dc 5a -df 0d 0d e2 9f 22 fb 8c 2a 41 33 1f e1 fc b6 15 -89 e0 ec 75 00 ed 84 42 d6 18 46 df 6c ca 46 cc - -# PKCS#1 v1.5 Encryption Example 15.20 -# ---------------------------------- - -# Message: -69 b7 64 48 55 f9 1d 1c 61 c8 49 8e 4b a1 ba 4d -84 5b a8 82 b1 73 - -# Seed: -b2 2f c7 de 85 c5 f7 5a 2f 32 af 1b fb cd 57 89 -71 56 87 de 06 e6 6d 06 4a e3 eb 8d fb 07 a2 57 -5b e0 e9 e6 f2 9f 50 d7 39 6d 07 8b 36 ef 80 2f -75 1a 77 cc 92 d7 61 4c 91 dd 27 99 31 fc e0 07 -eb f9 15 a0 f1 4e 31 2c e9 1f e5 aa 6f b3 74 51 -61 4f e3 7c 73 fc 6f 6d 6f 8e 52 78 9b 5d 88 e8 -6b eb 16 33 f5 dd d5 c0 70 f1 4f d3 cf ee 97 dd -4a 64 3d 35 d4 5d d9 bf 34 df 8c 31 0b 48 59 2e -94 68 31 b3 4e f3 c0 b9 16 f1 7c b0 ac b2 cf c1 -c2 5d 03 09 ac c1 12 4f 26 5c 1a 83 ed 88 5c 87 -fa 82 6f da 57 10 b5 4e 16 ec 0f 44 8c db 7e e0 -58 0f f7 38 65 30 ea 46 1e 04 2a 0b 77 42 c4 61 -97 6b b5 a3 80 ad bc b0 01 06 f2 67 1b 6c ce 4f -72 67 75 2f 80 66 80 42 78 35 0b 01 75 3e 31 b3 -8e cc fb e9 05 69 f6 - -# Encryption: -ab 42 67 97 2c 77 96 83 93 88 d4 ad 87 de d7 4b -b6 53 e9 a7 05 0e 28 2e 82 19 28 75 68 9f 70 ee -1d a1 8a 1f 73 22 09 2c d2 9f d0 01 19 92 2a 6d -e1 26 01 98 0a a9 fa 6e 61 9e 27 75 e8 7a da e3 -16 95 c1 30 4e 77 f5 2c ce 01 66 65 f2 26 7c 20 -76 26 43 c6 00 3c 01 6d 84 80 44 3c 70 1d f6 c1 -d8 d6 55 54 96 00 ee 45 5b 70 e4 73 31 9b 0d 44 -45 e0 b7 55 2a 1f 80 8e 88 f3 26 48 42 73 5a e6 -1d f0 32 5e d0 36 90 d6 d5 d6 93 ad 1f ed 22 66 -84 50 37 9d b5 32 3d c0 1c 89 af fa e3 69 b9 c3 -01 c3 19 c3 7d df 51 ed f4 6e 09 b2 1e 5d e9 14 -83 e8 e3 cb 21 ee b7 05 7b c2 eb dc 3a aa 3d 65 -00 c9 2f 99 b1 7b 31 80 bb a0 47 d7 60 73 77 63 -36 b1 5d 05 4d 79 a4 40 cc 5e 98 5e a5 43 fc aa -25 db 1d d8 92 b7 1b b7 4a 5c f6 82 63 d8 fd 58 -f1 a4 8e 6c 2f cb 8c 0b 71 a2 51 cf c1 a2 01 57 - -# ============================================= diff --git a/notes/rsa-testvectors/pkcs1v15sign-vectors.c b/notes/rsa-testvectors/pkcs1v15sign-vectors.c deleted file mode 100644 index e9b4a628..00000000 --- a/notes/rsa-testvectors/pkcs1v15sign-vectors.c +++ /dev/null @@ -1,4261 +0,0 @@ -/* Generated from file: pkcs1v15sign-vectors.txt - * with md5 hash: d799f020ab2fc966cae369de7ff62641 - */ - - -typedef struct rsaKey { - int n_l; - unsigned char n[256]; - int e_l; - unsigned char e[256]; - int d_l; - unsigned char d[256]; - int p_l; - unsigned char p[256]; - int q_l; - unsigned char q[256]; - int dP_l; - unsigned char dP[256]; - int dQ_l; - unsigned char dQ[256]; - int qInv_l; - unsigned char qInv[256]; -} rsaKey_t; - -typedef struct rsaData { - const char* name; - int o1_l; - unsigned char o1[256]; - int o2_l; - unsigned char o2[256]; -} rsaData_t; - -typedef struct testcase { - const char* name; - rsaKey_t rsa; -#ifdef LTC_TEST_EXT - rsaData_t data[20]; -#else - rsaData_t data[1]; -#endif /* LTC_TEST_EXT */ -} testcase_t; - -static testcase_t testcases_emsa[] = - { -{ - "Example 1: A 1024-bit RSA key pair", -{ - /* Modulus */ - 128, - { 0xa5, 0x6e, 0x4a, 0x0e, 0x70, 0x10, 0x17, 0x58, 0x9a, 0x51, 0x87, 0xdc, 0x7e, 0xa8, 0x41, 0xd1, 0x56, 0xf2, 0xec, 0x0e, 0x36, 0xad, 0x52, 0xa4, 0x4d, 0xfe, 0xb1, 0xe6, 0x1f, 0x7a, 0xd9, 0x91, 0xd8, 0xc5, 0x10, 0x56, 0xff, 0xed, 0xb1, 0x62, 0xb4, 0xc0, 0xf2, 0x83, 0xa1, 0x2a, 0x88, 0xa3, 0x94, 0xdf, 0xf5, 0x26, 0xab, 0x72, 0x91, 0xcb, 0xb3, 0x07, 0xce, 0xab, 0xfc, 0xe0, 0xb1, 0xdf, 0xd5, 0xcd, 0x95, 0x08, 0x09, 0x6d, 0x5b, 0x2b, 0x8b, 0x6d, 0xf5, 0xd6, 0x71, 0xef, 0x63, 0x77, 0xc0, 0x92, 0x1c, 0xb2, 0x3c, 0x27, 0x0a, 0x70, 0xe2, 0x59, 0x8e, 0x6f, 0xf8, 0x9d, 0x19, 0xf1, 0x05, 0xac, 0xc2, 0xd3, 0xf0, 0xcb, 0x35, 0xf2, 0x92, 0x80, 0xe1, 0x38, 0x6b, 0x6f, 0x64, 0xc4, 0xef, 0x22, 0xe1, 0xe1, 0xf2, 0x0d, 0x0c, 0xe8, 0xcf, 0xfb, 0x22, 0x49, 0xbd, 0x9a, 0x21, 0x37 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x33, 0xa5, 0x04, 0x2a, 0x90, 0xb2, 0x7d, 0x4f, 0x54, 0x51, 0xca, 0x9b, 0xbb, 0xd0, 0xb4, 0x47, 0x71, 0xa1, 0x01, 0xaf, 0x88, 0x43, 0x40, 0xae, 0xf9, 0x88, 0x5f, 0x2a, 0x4b, 0xbe, 0x92, 0xe8, 0x94, 0xa7, 0x24, 0xac, 0x3c, 0x56, 0x8c, 0x8f, 0x97, 0x85, 0x3a, 0xd0, 0x7c, 0x02, 0x66, 0xc8, 0xc6, 0xa3, 0xca, 0x09, 0x29, 0xf1, 0xe8, 0xf1, 0x12, 0x31, 0x88, 0x44, 0x29, 0xfc, 0x4d, 0x9a, 0xe5, 0x5f, 0xee, 0x89, 0x6a, 0x10, 0xce, 0x70, 0x7c, 0x3e, 0xd7, 0xe7, 0x34, 0xe4, 0x47, 0x27, 0xa3, 0x95, 0x74, 0x50, 0x1a, 0x53, 0x26, 0x83, 0x10, 0x9c, 0x2a, 0xba, 0xca, 0xba, 0x28, 0x3c, 0x31, 0xb4, 0xbd, 0x2f, 0x53, 0xc3, 0xee, 0x37, 0xe3, 0x52, 0xce, 0xe3, 0x4f, 0x9e, 0x50, 0x3b, 0xd8, 0x0c, 0x06, 0x22, 0xad, 0x79, 0xc6, 0xdc, 0xee, 0x88, 0x35, 0x47, 0xc6, 0xa3, 0xb3, 0x25 } -, - /* Prime 1 */ - 64, - { 0xe7, 0xe8, 0x94, 0x27, 0x20, 0xa8, 0x77, 0x51, 0x72, 0x73, 0xa3, 0x56, 0x05, 0x3e, 0xa2, 0xa1, 0xbc, 0x0c, 0x94, 0xaa, 0x72, 0xd5, 0x5c, 0x6e, 0x86, 0x29, 0x6b, 0x2d, 0xfc, 0x96, 0x79, 0x48, 0xc0, 0xa7, 0x2c, 0xbc, 0xcc, 0xa7, 0xea, 0xcb, 0x35, 0x70, 0x6e, 0x09, 0xa1, 0xdf, 0x55, 0xa1, 0x53, 0x5b, 0xd9, 0xb3, 0xcc, 0x34, 0x16, 0x0b, 0x3b, 0x6d, 0xcd, 0x3e, 0xda, 0x8e, 0x64, 0x43 } -, - /* Prime 2 */ - 64, - { 0xb6, 0x9d, 0xca, 0x1c, 0xf7, 0xd4, 0xd7, 0xec, 0x81, 0xe7, 0x5b, 0x90, 0xfc, 0xca, 0x87, 0x4a, 0xbc, 0xde, 0x12, 0x3f, 0xd2, 0x70, 0x01, 0x80, 0xaa, 0x90, 0x47, 0x9b, 0x6e, 0x48, 0xde, 0x8d, 0x67, 0xed, 0x24, 0xf9, 0xf1, 0x9d, 0x85, 0xba, 0x27, 0x58, 0x74, 0xf5, 0x42, 0xcd, 0x20, 0xdc, 0x72, 0x3e, 0x69, 0x63, 0x36, 0x4a, 0x1f, 0x94, 0x25, 0x45, 0x2b, 0x26, 0x9a, 0x67, 0x99, 0xfd } -, - /* Prime exponent 1 */ - 64, - { 0x28, 0xfa, 0x13, 0x93, 0x86, 0x55, 0xbe, 0x1f, 0x8a, 0x15, 0x9c, 0xba, 0xca, 0x5a, 0x72, 0xea, 0x19, 0x0c, 0x30, 0x08, 0x9e, 0x19, 0xcd, 0x27, 0x4a, 0x55, 0x6f, 0x36, 0xc4, 0xf6, 0xe1, 0x9f, 0x55, 0x4b, 0x34, 0xc0, 0x77, 0x79, 0x04, 0x27, 0xbb, 0xdd, 0x8d, 0xd3, 0xed, 0xe2, 0x44, 0x83, 0x28, 0xf3, 0x85, 0xd8, 0x1b, 0x30, 0xe8, 0xe4, 0x3b, 0x2f, 0xff, 0xa0, 0x27, 0x86, 0x19, 0x79 } -, - /* Prime exponent 2 */ - 64, - { 0x1a, 0x8b, 0x38, 0xf3, 0x98, 0xfa, 0x71, 0x20, 0x49, 0x89, 0x8d, 0x7f, 0xb7, 0x9e, 0xe0, 0xa7, 0x76, 0x68, 0x79, 0x12, 0x99, 0xcd, 0xfa, 0x09, 0xef, 0xc0, 0xe5, 0x07, 0xac, 0xb2, 0x1e, 0xd7, 0x43, 0x01, 0xef, 0x5b, 0xfd, 0x48, 0xbe, 0x45, 0x5e, 0xae, 0xb6, 0xe1, 0x67, 0x82, 0x55, 0x82, 0x75, 0x80, 0xa8, 0xe4, 0xe8, 0xe1, 0x41, 0x51, 0xd1, 0x51, 0x0a, 0x82, 0xa3, 0xf2, 0xe7, 0x29 } -, - /* Coefficient */ - 64, - { 0x27, 0x15, 0x6a, 0xba, 0x41, 0x26, 0xd2, 0x4a, 0x81, 0xf3, 0xa5, 0x28, 0xcb, 0xfb, 0x27, 0xf5, 0x68, 0x86, 0xf8, 0x40, 0xa9, 0xf6, 0xe8, 0x6e, 0x17, 0xa4, 0x4b, 0x94, 0xfe, 0x93, 0x19, 0x58, 0x4b, 0x8e, 0x22, 0xfd, 0xde, 0x1e, 0x5a, 0x2e, 0x3b, 0xd8, 0xaa, 0x5b, 0xa8, 0xd8, 0x58, 0x41, 0x94, 0xeb, 0x21, 0x90, 0xac, 0xf8, 0x32, 0xb8, 0x47, 0xf1, 0x3a, 0x3d, 0x24, 0xa7, 0x9f, 0x4d } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 1.1", - /* Message to be signed */ - 217, - { 0xcd, 0xc8, 0x7d, 0xa2, 0x23, 0xd7, 0x86, 0xdf, 0x3b, 0x45, 0xe0, 0xbb, 0xbc, 0x72, 0x13, 0x26, 0xd1, 0xee, 0x2a, 0xf8, 0x06, 0xcc, 0x31, 0x54, 0x75, 0xcc, 0x6f, 0x0d, 0x9c, 0x66, 0xe1, 0xb6, 0x23, 0x71, 0xd4, 0x5c, 0xe2, 0x39, 0x2e, 0x1a, 0xc9, 0x28, 0x44, 0xc3, 0x10, 0x10, 0x2f, 0x15, 0x6a, 0x0d, 0x8d, 0x52, 0xc1, 0xf4, 0xc4, 0x0b, 0xa3, 0xaa, 0x65, 0x09, 0x57, 0x86, 0xcb, 0x76, 0x97, 0x57, 0xa6, 0x56, 0x3b, 0xa9, 0x58, 0xfe, 0xd0, 0xbc, 0xc9, 0x84, 0xe8, 0xb5, 0x17, 0xa3, 0xd5, 0xf5, 0x15, 0xb2, 0x3b, 0x8a, 0x41, 0xe7, 0x4a, 0xa8, 0x67, 0x69, 0x3f, 0x90, 0xdf, 0xb0, 0x61, 0xa6, 0xe8, 0x6d, 0xfa, 0xae, 0xe6, 0x44, 0x72, 0xc0, 0x0e, 0x5f, 0x20, 0x94, 0x57, 0x29, 0xcb, 0xeb, 0xe7, 0x7f, 0x06, 0xce, 0x78, 0xe0, 0x8f, 0x40, 0x98, 0xfb, 0xa4, 0x1f, 0x9d, 0x61, 0x93, 0xc0, 0x31, 0x7e, 0x8b, 0x60, 0xd4, 0xb6, 0x08, 0x4a, 0xcb, 0x42, 0xd2, 0x9e, 0x38, 0x08, 0xa3, 0xbc, 0x37, 0x2d, 0x85, 0xe3, 0x31, 0x17, 0x0f, 0xcb, 0xf7, 0xcc, 0x72, 0xd0, 0xb7, 0x1c, 0x29, 0x66, 0x48, 0xb3, 0xa4, 0xd1, 0x0f, 0x41, 0x62, 0x95, 0xd0, 0x80, 0x7a, 0xa6, 0x25, 0xca, 0xb2, 0x74, 0x4f, 0xd9, 0xea, 0x8f, 0xd2, 0x23, 0xc4, 0x25, 0x37, 0x02, 0x98, 0x28, 0xbd, 0x16, 0xbe, 0x02, 0x54, 0x6f, 0x13, 0x0f, 0xd2, 0xe3, 0x3b, 0x93, 0x6d, 0x26, 0x76, 0xe0, 0x8a, 0xed, 0x1b, 0x73, 0x31, 0x8b, 0x75, 0x0a, 0x01, 0x67, 0xd0 } -, - /* Signature */ - 128, - { 0x6b, 0xc3, 0xa0, 0x66, 0x56, 0x84, 0x29, 0x30, 0xa2, 0x47, 0xe3, 0x0d, 0x58, 0x64, 0xb4, 0xd8, 0x19, 0x23, 0x6b, 0xa7, 0xc6, 0x89, 0x65, 0x86, 0x2a, 0xd7, 0xdb, 0xc4, 0xe2, 0x4a, 0xf2, 0x8e, 0x86, 0xbb, 0x53, 0x1f, 0x03, 0x35, 0x8b, 0xe5, 0xfb, 0x74, 0x77, 0x7c, 0x60, 0x86, 0xf8, 0x50, 0xca, 0xef, 0x89, 0x3f, 0x0d, 0x6f, 0xcc, 0x2d, 0x0c, 0x91, 0xec, 0x01, 0x36, 0x93, 0xb4, 0xea, 0x00, 0xb8, 0x0c, 0xd4, 0x9a, 0xac, 0x4e, 0xcb, 0x5f, 0x89, 0x11, 0xaf, 0xe5, 0x39, 0xad, 0xa4, 0xa8, 0xf3, 0x82, 0x3d, 0x1d, 0x13, 0xe4, 0x72, 0xd1, 0x49, 0x05, 0x47, 0xc6, 0x59, 0xc7, 0x61, 0x7f, 0x3d, 0x24, 0x08, 0x7d, 0xdb, 0x6f, 0x2b, 0x72, 0x09, 0x61, 0x67, 0xfc, 0x09, 0x7c, 0xab, 0x18, 0xe9, 0xa4, 0x58, 0xfc, 0xb6, 0x34, 0xcd, 0xce, 0x8e, 0xe3, 0x58, 0x94, 0xc4, 0x84, 0xd7 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 1.2", - /* Message to be signed */ - 51, - { 0x85, 0x13, 0x84, 0xcd, 0xfe, 0x81, 0x9c, 0x22, 0xed, 0x6c, 0x4c, 0xcb, 0x30, 0xda, 0xeb, 0x5c, 0xf0, 0x59, 0xbc, 0x8e, 0x11, 0x66, 0xb7, 0xe3, 0x53, 0x0c, 0x4c, 0x23, 0x3e, 0x2b, 0x5f, 0x8f, 0x71, 0xa1, 0xcc, 0xa5, 0x82, 0xd4, 0x3e, 0xcc, 0x72, 0xb1, 0xbc, 0xa1, 0x6d, 0xfc, 0x70, 0x13, 0x22, 0x6b, 0x9e } -, - /* Signature */ - 128, - { 0x84, 0xfd, 0x2c, 0xe7, 0x34, 0xec, 0x1d, 0xa8, 0x28, 0xd0, 0xf1, 0x5b, 0xf4, 0x9a, 0x87, 0x07, 0xc1, 0x5d, 0x05, 0x94, 0x81, 0x36, 0xde, 0x53, 0x7a, 0x3d, 0xb4, 0x21, 0x38, 0x41, 0x67, 0xc8, 0x6f, 0xae, 0x02, 0x25, 0x87, 0xee, 0x9e, 0x13, 0x7d, 0xae, 0xe7, 0x54, 0x73, 0x82, 0x62, 0x93, 0x2d, 0x27, 0x1c, 0x74, 0x4c, 0x6d, 0x3a, 0x18, 0x9a, 0xd4, 0x31, 0x1b, 0xdb, 0x02, 0x04, 0x92, 0xe3, 0x22, 0xfb, 0xdd, 0xc4, 0x04, 0x06, 0xea, 0x86, 0x0d, 0x4e, 0x8e, 0xa2, 0xa4, 0x08, 0x4a, 0xa9, 0x8b, 0x96, 0x22, 0xa4, 0x46, 0x75, 0x6f, 0xdb, 0x74, 0x0d, 0xdb, 0x3d, 0x91, 0xdb, 0x76, 0x70, 0xe2, 0x11, 0x66, 0x1b, 0xbf, 0x87, 0x09, 0xb1, 0x1c, 0x08, 0xa7, 0x07, 0x71, 0x42, 0x2d, 0x1a, 0x12, 0xde, 0xf2, 0x9f, 0x06, 0x88, 0xa1, 0x92, 0xae, 0xbd, 0x89, 0xe0, 0xf8, 0x96, 0xf8 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.3", - /* Message to be signed */ - 228, - { 0xa4, 0xb1, 0x59, 0x94, 0x17, 0x61, 0xc4, 0x0c, 0x6a, 0x82, 0xf2, 0xb8, 0x0d, 0x1b, 0x94, 0xf5, 0xaa, 0x26, 0x54, 0xfd, 0x17, 0xe1, 0x2d, 0x58, 0x88, 0x64, 0x67, 0x9b, 0x54, 0xcd, 0x04, 0xef, 0x8b, 0xd0, 0x30, 0x12, 0xbe, 0x8d, 0xc3, 0x7f, 0x4b, 0x83, 0xaf, 0x79, 0x63, 0xfa, 0xff, 0x0d, 0xfa, 0x22, 0x54, 0x77, 0x43, 0x7c, 0x48, 0x01, 0x7f, 0xf2, 0xbe, 0x81, 0x91, 0xcf, 0x39, 0x55, 0xfc, 0x07, 0x35, 0x6e, 0xab, 0x3f, 0x32, 0x2f, 0x7f, 0x62, 0x0e, 0x21, 0xd2, 0x54, 0xe5, 0xdb, 0x43, 0x24, 0x27, 0x9f, 0xe0, 0x67, 0xe0, 0x91, 0x0e, 0x2e, 0x81, 0xca, 0x2c, 0xab, 0x31, 0xc7, 0x45, 0xe6, 0x7a, 0x54, 0x05, 0x8e, 0xb5, 0x0d, 0x99, 0x3c, 0xdb, 0x9e, 0xd0, 0xb4, 0xd0, 0x29, 0xc0, 0x6d, 0x21, 0xa9, 0x4c, 0xa6, 0x61, 0xc3, 0xce, 0x27, 0xfa, 0xe1, 0xd6, 0xcb, 0x20, 0xf4, 0x56, 0x4d, 0x66, 0xce, 0x47, 0x67, 0x58, 0x3d, 0x0e, 0x5f, 0x06, 0x02, 0x15, 0xb5, 0x90, 0x17, 0xbe, 0x85, 0xea, 0x84, 0x89, 0x39, 0x12, 0x7b, 0xd8, 0xc9, 0xc4, 0xd4, 0x7b, 0x51, 0x05, 0x6c, 0x03, 0x1c, 0xf3, 0x36, 0xf1, 0x7c, 0x99, 0x80, 0xf3, 0xb8, 0xf5, 0xb9, 0xb6, 0x87, 0x8e, 0x8b, 0x79, 0x7a, 0xa4, 0x3b, 0x88, 0x26, 0x84, 0x33, 0x3e, 0x17, 0x89, 0x3f, 0xe9, 0xca, 0xa6, 0xaa, 0x29, 0x9f, 0x7e, 0xd1, 0xa1, 0x8e, 0xe2, 0xc5, 0x48, 0x64, 0xb7, 0xb2, 0xb9, 0x9b, 0x72, 0x61, 0x8f, 0xb0, 0x25, 0x74, 0xd1, 0x39, 0xef, 0x50, 0xf0, 0x19, 0xc9, 0xee, 0xf4, 0x16, 0x97, 0x13, 0x38, 0xe7, 0xd4, 0x70 } -, - /* Signature */ - 128, - { 0x0b, 0x1f, 0x2e, 0x51, 0x80, 0xe5, 0xc7, 0xb4, 0xb5, 0xe6, 0x72, 0x92, 0x9f, 0x66, 0x4c, 0x48, 0x96, 0xe5, 0x0c, 0x35, 0x13, 0x4b, 0x6d, 0xe4, 0xd5, 0xa9, 0x34, 0x25, 0x2a, 0x3a, 0x24, 0x5f, 0xf4, 0x83, 0x40, 0x92, 0x0e, 0x10, 0x34, 0xb7, 0xd5, 0xa5, 0xb5, 0x24, 0xeb, 0x0e, 0x1c, 0xf1, 0x2b, 0xef, 0xef, 0x49, 0xb2, 0x7b, 0x73, 0x2d, 0x2c, 0x19, 0xe1, 0xc4, 0x32, 0x17, 0xd6, 0xe1, 0x41, 0x73, 0x81, 0x11, 0x1a, 0x1d, 0x36, 0xde, 0x63, 0x75, 0xcf, 0x45, 0x5b, 0x3c, 0x98, 0x12, 0x63, 0x9d, 0xbc, 0x27, 0x60, 0x0c, 0x75, 0x19, 0x94, 0xfb, 0x61, 0x79, 0x9e, 0xcf, 0x7d, 0xa6, 0xbc, 0xf5, 0x15, 0x40, 0xaf, 0xd0, 0x17, 0x4d, 0xb4, 0x03, 0x31, 0x88, 0x55, 0x66, 0x75, 0xb1, 0xd7, 0x63, 0x36, 0x0a, 0xf4, 0x6f, 0xee, 0xca, 0x5b, 0x60, 0xf8, 0x82, 0x82, 0x9e, 0xe7, 0xb2 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.4", - /* Message to be signed */ - 9, - { 0xbc, 0x65, 0x67, 0x47, 0xfa, 0x9e, 0xaf, 0xb3, 0xf0 } -, - /* Signature */ - 128, - { 0x45, 0x60, 0x7a, 0xd6, 0x11, 0xcf, 0x57, 0x47, 0xa4, 0x1a, 0xc9, 0x4d, 0x0f, 0xfe, 0xc8, 0x78, 0xbd, 0xaf, 0x63, 0xf6, 0xb5, 0x7a, 0x4b, 0x08, 0x8b, 0xf3, 0x6e, 0x34, 0xe1, 0x09, 0xf8, 0x40, 0xf2, 0x4b, 0x74, 0x2a, 0xda, 0x16, 0x10, 0x2d, 0xab, 0xf9, 0x51, 0xcb, 0xc4, 0x4f, 0x89, 0x82, 0xe9, 0x4e, 0xd4, 0xcd, 0x09, 0x44, 0x8d, 0x20, 0xec, 0x0e, 0xfa, 0x73, 0x54, 0x5f, 0x80, 0xb6, 0x54, 0x06, 0xbe, 0xd6, 0x19, 0x4a, 0x61, 0xc3, 0x40, 0xb4, 0xad, 0x15, 0x68, 0xcb, 0xb7, 0x58, 0x51, 0x04, 0x9f, 0x11, 0xaf, 0x17, 0x34, 0x96, 0x40, 0x76, 0xe0, 0x20, 0x29, 0xae, 0xe2, 0x00, 0xe4, 0x0e, 0x80, 0xbe, 0x0f, 0x43, 0x61, 0xf6, 0x98, 0x41, 0xc4, 0xf9, 0x2a, 0x44, 0x50, 0xa2, 0x28, 0x6d, 0x43, 0x28, 0x9b, 0x40, 0x55, 0x54, 0xc5, 0x4d, 0x25, 0xc6, 0xec, 0xb5, 0x84, 0xf4 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.5", - /* Message to be signed */ - 149, - { 0xb4, 0x55, 0x81, 0x54, 0x7e, 0x54, 0x27, 0x77, 0x0c, 0x76, 0x8e, 0x8b, 0x82, 0xb7, 0x55, 0x64, 0xe0, 0xea, 0x4e, 0x9c, 0x32, 0x59, 0x4d, 0x6b, 0xff, 0x70, 0x65, 0x44, 0xde, 0x0a, 0x87, 0x76, 0xc7, 0xa8, 0x0b, 0x45, 0x76, 0x55, 0x0e, 0xee, 0x1b, 0x2a, 0xca, 0xbc, 0x7e, 0x8b, 0x7d, 0x3e, 0xf7, 0xbb, 0x5b, 0x03, 0xe4, 0x62, 0xc1, 0x10, 0x47, 0xea, 0xdd, 0x00, 0x62, 0x9a, 0xe5, 0x75, 0x48, 0x0a, 0xc1, 0x47, 0x0f, 0xe0, 0x46, 0xf1, 0x3a, 0x2b, 0xf5, 0xaf, 0x17, 0x92, 0x1d, 0xc4, 0xb0, 0xaa, 0x8b, 0x02, 0xbe, 0xe6, 0x33, 0x49, 0x11, 0x65, 0x1d, 0x7f, 0x85, 0x25, 0xd1, 0x0f, 0x32, 0xb5, 0x1d, 0x33, 0xbe, 0x52, 0x0d, 0x3d, 0xdf, 0x5a, 0x70, 0x99, 0x55, 0xa3, 0xdf, 0xe7, 0x82, 0x83, 0xb9, 0xe0, 0xab, 0x54, 0x04, 0x6d, 0x15, 0x0c, 0x17, 0x7f, 0x03, 0x7f, 0xdc, 0xcc, 0x5b, 0xe4, 0xea, 0x5f, 0x68, 0xb5, 0xe5, 0xa3, 0x8c, 0x9d, 0x7e, 0xdc, 0xcc, 0xc4, 0x97, 0x5f, 0x45, 0x5a, 0x69, 0x09, 0xb4 } -, - /* Signature */ - 128, - { 0x54, 0xbe, 0x9d, 0x90, 0x87, 0x75, 0x15, 0xf4, 0x50, 0x27, 0x9c, 0x15, 0xb5, 0xf6, 0x1a, 0xd6, 0xf1, 0x5e, 0xcc, 0x95, 0xf1, 0x8c, 0xbe, 0xd8, 0x2b, 0x65, 0xb1, 0x66, 0x7a, 0x57, 0x58, 0x09, 0x58, 0x79, 0x94, 0x66, 0x80, 0x44, 0xf3, 0xbc, 0x2a, 0xe7, 0xf8, 0x84, 0x50, 0x1f, 0x64, 0xf0, 0xb4, 0x3f, 0x58, 0x8c, 0xfa, 0x20, 0x5a, 0x6a, 0xb7, 0x04, 0x32, 0x8c, 0x2d, 0x4a, 0xb9, 0x2a, 0x7a, 0xe1, 0x34, 0x40, 0x61, 0x4d, 0x3e, 0x08, 0x5f, 0x40, 0x1d, 0xa9, 0xad, 0x28, 0xe2, 0x10, 0x5e, 0x4a, 0x0e, 0xdb, 0x68, 0x1a, 0x64, 0x24, 0xdf, 0x04, 0x73, 0x88, 0xce, 0x05, 0x1e, 0xe9, 0xdf, 0x7b, 0xc2, 0x16, 0x3f, 0xe3, 0x47, 0x52, 0x0a, 0xd5, 0x1c, 0xcd, 0x51, 0x80, 0x64, 0x38, 0x3e, 0x74, 0x1a, 0xca, 0xd3, 0xcb, 0xdc, 0x2c, 0xb5, 0xa7, 0xc6, 0x8e, 0x86, 0x84, 0x64, 0xc2 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.6", - /* Message to be signed */ - 233, - { 0x10, 0xaa, 0xe9, 0xa0, 0xab, 0x0b, 0x59, 0x5d, 0x08, 0x41, 0x20, 0x7b, 0x70, 0x0d, 0x48, 0xd7, 0x5f, 0xae, 0xdd, 0xe3, 0xb7, 0x75, 0xcd, 0x6b, 0x4c, 0xc8, 0x8a, 0xe0, 0x6e, 0x46, 0x94, 0xec, 0x74, 0xba, 0x18, 0xf8, 0x52, 0x0d, 0x4f, 0x5e, 0xa6, 0x9c, 0xbb, 0xe7, 0xcc, 0x2b, 0xeb, 0xa4, 0x3e, 0xfd, 0xc1, 0x02, 0x15, 0xac, 0x4e, 0xb3, 0x2d, 0xc3, 0x02, 0xa1, 0xf5, 0x3d, 0xc6, 0xc4, 0x35, 0x22, 0x67, 0xe7, 0x93, 0x6c, 0xfe, 0xbf, 0x7c, 0x8d, 0x67, 0x03, 0x57, 0x84, 0xa3, 0x90, 0x9f, 0xa8, 0x59, 0xc7, 0xb7, 0xb5, 0x9b, 0x8e, 0x39, 0xc5, 0xc2, 0x34, 0x9f, 0x18, 0x86, 0xb7, 0x05, 0xa3, 0x02, 0x67, 0xd4, 0x02, 0xf7, 0x48, 0x6a, 0xb4, 0xf5, 0x8c, 0xad, 0x5d, 0x69, 0xad, 0xb1, 0x7a, 0xb8, 0xcd, 0x0c, 0xe1, 0xca, 0xf5, 0x02, 0x5a, 0xf4, 0xae, 0x24, 0xb1, 0xfb, 0x87, 0x94, 0xc6, 0x07, 0x0c, 0xc0, 0x9a, 0x51, 0xe2, 0xf9, 0x91, 0x13, 0x11, 0xe3, 0x87, 0x7d, 0x00, 0x44, 0xc7, 0x1c, 0x57, 0xa9, 0x93, 0x39, 0x50, 0x08, 0x80, 0x6b, 0x72, 0x3a, 0xc3, 0x83, 0x73, 0xd3, 0x95, 0x48, 0x18, 0x18, 0x52, 0x8c, 0x1e, 0x70, 0x53, 0x73, 0x92, 0x82, 0x05, 0x35, 0x29, 0x51, 0x0e, 0x93, 0x5c, 0xd0, 0xfa, 0x77, 0xb8, 0xfa, 0x53, 0xcc, 0x2d, 0x47, 0x4b, 0xd4, 0xfb, 0x3c, 0xc5, 0xc6, 0x72, 0xd6, 0xff, 0xdc, 0x90, 0xa0, 0x0f, 0x98, 0x48, 0x71, 0x2c, 0x4b, 0xcf, 0xe4, 0x6c, 0x60, 0x57, 0x36, 0x59, 0xb1, 0x1e, 0x64, 0x57, 0xe8, 0x61, 0xf0, 0xf6, 0x04, 0xb6, 0x13, 0x8d, 0x14, 0x4f, 0x8c, 0xe4, 0xe2, 0xda, 0x73 } -, - /* Signature */ - 128, - { 0x0e, 0x6f, 0xf6, 0x3a, 0x85, 0x6b, 0x9c, 0xbd, 0x5d, 0xbe, 0x42, 0x31, 0x83, 0x12, 0x20, 0x47, 0xdd, 0x39, 0xd6, 0xf7, 0x6d, 0x1b, 0x23, 0x10, 0xe5, 0x46, 0xfe, 0x9e, 0xe7, 0x3b, 0x33, 0xef, 0xa7, 0xc7, 0x8f, 0x94, 0x74, 0x45, 0x5c, 0x9e, 0x5b, 0x88, 0xcb, 0x38, 0x3a, 0xaf, 0xc3, 0x69, 0x86, 0x68, 0xe7, 0xb7, 0xa5, 0x9a, 0x9c, 0xbb, 0x5b, 0x08, 0x97, 0xb6, 0xc5, 0xaf, 0xb7, 0xf8, 0xba, 0xc4, 0xb9, 0x24, 0xe9, 0x8d, 0x76, 0x0a, 0x15, 0xfc, 0x43, 0xd2, 0x81, 0x4a, 0xb2, 0xd5, 0x18, 0x7f, 0x79, 0xbe, 0xd9, 0x91, 0x5a, 0x93, 0x39, 0x7e, 0xbc, 0x22, 0xa7, 0x67, 0x75, 0x06, 0xa0, 0x2e, 0x07, 0x6d, 0x3f, 0xfd, 0xc0, 0x44, 0x1d, 0xbd, 0x4d, 0xb0, 0x04, 0x53, 0xdc, 0x28, 0xd8, 0x30, 0xe0, 0x57, 0x3f, 0x77, 0xb8, 0x17, 0xb5, 0x05, 0xc3, 0x8b, 0x4a, 0x4b, 0xb5, 0xd0 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.7", - /* Message to be signed */ - 127, - { 0xef, 0xb5, 0xda, 0x1b, 0x4d, 0x1e, 0x6d, 0x9a, 0x5d, 0xff, 0x92, 0xd0, 0x18, 0x4d, 0xa7, 0xe3, 0x1f, 0x87, 0x7d, 0x12, 0x81, 0xdd, 0xda, 0x62, 0x56, 0x64, 0x86, 0x9e, 0x83, 0x79, 0xe6, 0x7a, 0xd3, 0xb7, 0x5e, 0xae, 0x74, 0xa5, 0x80, 0xe9, 0x82, 0x7a, 0xbd, 0x6e, 0xb7, 0xa0, 0x02, 0xcb, 0x54, 0x11, 0xf5, 0x26, 0x67, 0x97, 0x76, 0x8f, 0xb8, 0xe9, 0x5a, 0xe4, 0x0e, 0x3e, 0x8b, 0x34, 0x66, 0xf5, 0xab, 0x15, 0xd6, 0x95, 0x53, 0x95, 0x29, 0x39, 0xec, 0x23, 0xe6, 0x1d, 0x58, 0x49, 0x7f, 0xac, 0x76, 0xaa, 0x1c, 0x0b, 0xb5, 0xa3, 0xcb, 0x4a, 0x54, 0x38, 0x35, 0x87, 0xc7, 0xbb, 0x78, 0xd1, 0x3e, 0xef, 0xda, 0x20, 0x54, 0x43, 0xe6, 0xce, 0x43, 0x65, 0x80, 0x2d, 0xf5, 0x5c, 0x64, 0x71, 0x34, 0x97, 0x98, 0x4e, 0x7c, 0xa9, 0x67, 0x22, 0xb3, 0xed, 0xf8, 0x4d, 0x56 } -, - /* Signature */ - 128, - { 0x83, 0x85, 0xd5, 0x85, 0x33, 0xa9, 0x95, 0xf7, 0x2d, 0xf2, 0x62, 0xb7, 0x0f, 0x40, 0xb3, 0x91, 0xdd, 0xf5, 0x15, 0xf4, 0x64, 0xb9, 0xd2, 0xcc, 0x2d, 0x66, 0x39, 0x8f, 0xc0, 0x56, 0x89, 0xd8, 0x11, 0x63, 0x29, 0x46, 0xd6, 0x2e, 0xab, 0xdc, 0xa7, 0xa3, 0x1f, 0xcf, 0x6c, 0xd6, 0xc9, 0x81, 0xd2, 0x8b, 0xbc, 0x29, 0x08, 0x3e, 0x4a, 0x6d, 0x5b, 0x2b, 0x37, 0x8c, 0xa4, 0xe5, 0x40, 0xf0, 0x60, 0xb9, 0x6d, 0x53, 0xad, 0x26, 0x93, 0xf8, 0x21, 0x78, 0xb9, 0x4e, 0x2e, 0x2f, 0x86, 0xb9, 0xac, 0xcf, 0xa0, 0x20, 0x25, 0x10, 0x7e, 0x06, 0x2a, 0xb7, 0x08, 0x01, 0x75, 0x68, 0x45, 0x01, 0x02, 0x8f, 0x67, 0x64, 0x61, 0xd8, 0x1c, 0x00, 0x8f, 0xe4, 0x75, 0x06, 0x71, 0x64, 0x99, 0x70, 0x87, 0x8f, 0xc1, 0x75, 0xcf, 0x98, 0xe9, 0x6b, 0x2e, 0xcb, 0xf6, 0x87, 0x4d, 0x77, 0xda, 0xcb } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.8", - /* Message to be signed */ - 232, - { 0x53, 0xbb, 0x58, 0xce, 0x42, 0xf1, 0x98, 0x49, 0x40, 0x55, 0x26, 0x57, 0x23, 0x3b, 0x14, 0x96, 0x9a, 0xf3, 0x65, 0xc0, 0xa5, 0x61, 0xa4, 0x13, 0x2a, 0xf1, 0x8a, 0xf3, 0x94, 0x32, 0x28, 0x0e, 0x3e, 0x43, 0x70, 0x82, 0x43, 0x4b, 0x19, 0x23, 0x18, 0x37, 0x18, 0x4f, 0x02, 0xcf, 0x2b, 0x2e, 0x72, 0x6b, 0xeb, 0xf7, 0x4d, 0x7a, 0xe3, 0x25, 0x6d, 0x8b, 0x72, 0xf3, 0xea, 0xfd, 0xb1, 0x34, 0xd3, 0x3d, 0xe0, 0x6f, 0x29, 0x91, 0xd2, 0x99, 0xd5, 0x9f, 0x54, 0x68, 0xd4, 0x3b, 0x99, 0x58, 0xd6, 0xa9, 0x68, 0xf5, 0x96, 0x9e, 0xdb, 0xbc, 0x6e, 0x71, 0x85, 0xcb, 0xc7, 0x16, 0xc7, 0xc9, 0x45, 0xda, 0xfa, 0x9c, 0xc7, 0x1d, 0xdf, 0xaa, 0xa0, 0x10, 0x94, 0xa4, 0x52, 0xdd, 0xf5, 0xe2, 0x40, 0x73, 0x20, 0x40, 0x0b, 0xf0, 0x5e, 0xa9, 0x72, 0x9c, 0xaf, 0xbf, 0x06, 0x00, 0xe7, 0x88, 0x07, 0xef, 0x94, 0x62, 0xe3, 0xfd, 0xe3, 0x2e, 0xd7, 0xd9, 0x81, 0xa5, 0x6f, 0x47, 0x51, 0xef, 0x64, 0xfb, 0x45, 0x49, 0x91, 0x0e, 0xcc, 0x91, 0x1d, 0x72, 0x80, 0x53, 0xb3, 0x99, 0x43, 0x00, 0x47, 0x40, 0xe6, 0xf5, 0x82, 0x1f, 0xe8, 0xd7, 0x5c, 0x06, 0x17, 0xbf, 0x2c, 0x6b, 0x24, 0xbb, 0xfc, 0x34, 0x01, 0x3f, 0xc9, 0x5f, 0x0d, 0xed, 0xf5, 0xba, 0x29, 0x7f, 0x50, 0x4f, 0xb8, 0x33, 0xda, 0x2a, 0x43, 0x6d, 0x1d, 0x8f, 0xf1, 0xcc, 0x51, 0x93, 0xe2, 0xa6, 0x43, 0x89, 0xfc, 0xed, 0x91, 0x8e, 0x7f, 0xeb, 0x67, 0x16, 0x33, 0x0f, 0x66, 0x80, 0x1d, 0xb9, 0x49, 0x75, 0x49, 0xcf, 0x1d, 0x3b, 0xd9, 0x7c, 0xf1, 0xbc, 0x62, 0x55 } -, - /* Signature */ - 128, - { 0x8e, 0x1f, 0x3d, 0x26, 0xec, 0x7c, 0x6b, 0xbb, 0x8c, 0x54, 0xc5, 0xd2, 0x5f, 0x31, 0x20, 0x58, 0x78, 0x03, 0xaf, 0x6d, 0x3c, 0x2b, 0x99, 0xa3, 0x7c, 0xed, 0x6a, 0x36, 0x57, 0xd4, 0xae, 0x54, 0x26, 0x6f, 0x63, 0xff, 0xfd, 0xe6, 0x60, 0xc8, 0x66, 0xd6, 0x5d, 0x0a, 0xb0, 0x58, 0x9e, 0x1d, 0x12, 0xd9, 0xce, 0x60, 0x54, 0xb0, 0x5c, 0x86, 0x68, 0xae, 0x12, 0x71, 0x71, 0xcc, 0xaa, 0xe7, 0xf1, 0xcd, 0x40, 0x96, 0x77, 0xf5, 0x21, 0x57, 0xb6, 0x12, 0x3a, 0xb2, 0x27, 0xf2, 0x7a, 0x00, 0x96, 0x6d, 0x14, 0x39, 0xb4, 0x2a, 0x32, 0x16, 0x9d, 0x10, 0x70, 0x39, 0x40, 0x26, 0xfc, 0x8b, 0xc9, 0x35, 0x45, 0xb1, 0xac, 0x25, 0x2d, 0x0f, 0x7d, 0xa7, 0x51, 0xc0, 0x2e, 0x33, 0xa4, 0x78, 0x31, 0xfb, 0xd7, 0x15, 0x14, 0xc2, 0xbb, 0xbd, 0x3a, 0xdb, 0x67, 0x40, 0xc0, 0xfd, 0x68, 0xad } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.9", - /* Message to be signed */ - 42, - { 0x27, 0xca, 0xdc, 0x69, 0x84, 0x50, 0x94, 0x5f, 0x20, 0x4e, 0xc3, 0xcf, 0x8c, 0x6c, 0xbd, 0x8c, 0xeb, 0x4c, 0xc0, 0xcb, 0xe3, 0x12, 0x27, 0x4f, 0xa9, 0x6b, 0x04, 0xde, 0xac, 0x85, 0x51, 0x60, 0xc0, 0xe0, 0x4e, 0x4a, 0xc5, 0xd3, 0x82, 0x10, 0xc2, 0x7c } -, - /* Signature */ - 128, - { 0x7b, 0x63, 0xf9, 0x22, 0x33, 0x56, 0xf3, 0x5f, 0x61, 0x17, 0xf6, 0x8c, 0x8f, 0x82, 0x20, 0x03, 0x4f, 0xc2, 0x38, 0x4a, 0xb5, 0xdc, 0x69, 0x04, 0x14, 0x1f, 0x13, 0x93, 0x14, 0xd6, 0xee, 0x89, 0xf5, 0x4e, 0xc6, 0xff, 0xd1, 0x8c, 0x41, 0x3a, 0x23, 0xc5, 0x93, 0x1c, 0x7f, 0xbb, 0x13, 0xc5, 0x55, 0xcc, 0xfd, 0x59, 0x0e, 0x0e, 0xaa, 0x85, 0x3c, 0x8c, 0x94, 0xd2, 0x52, 0x0c, 0xd4, 0x25, 0x0d, 0x9a, 0x05, 0xa1, 0x93, 0xb6, 0x5d, 0xc7, 0x49, 0xb8, 0x24, 0x78, 0xaf, 0x01, 0x56, 0xee, 0x1d, 0xe5, 0x5d, 0xda, 0xd3, 0x3e, 0xc1, 0xf0, 0x09, 0x9c, 0xad, 0x6c, 0x89, 0x1a, 0x36, 0x17, 0xc7, 0x39, 0x3d, 0x05, 0xfb, 0xfb, 0xbb, 0x00, 0x52, 0x8a, 0x00, 0x1d, 0xf0, 0xb2, 0x04, 0xeb, 0xdf, 0x1a, 0x34, 0x10, 0x90, 0xde, 0xa8, 0x9f, 0x87, 0x0a, 0x87, 0x74, 0x58, 0x42, 0x7f, 0x7b } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.10", - /* Message to be signed */ - 19, - { 0x71, 0x64, 0x07, 0xe9, 0x01, 0xb9, 0xef, 0x92, 0xd7, 0x61, 0xb0, 0x13, 0xfd, 0x13, 0xeb, 0x7a, 0xd7, 0x2a, 0xed } -, - /* Signature */ - 128, - { 0x2a, 0x22, 0xdb, 0xe3, 0x77, 0x4d, 0x5b, 0x29, 0x72, 0x01, 0xb5, 0x5a, 0x0f, 0x17, 0xf4, 0x2d, 0xce, 0x63, 0xb7, 0x84, 0x5c, 0xb3, 0x25, 0xcf, 0xe9, 0x51, 0xd0, 0xba, 0xdb, 0x5c, 0x5a, 0x14, 0x47, 0x21, 0x43, 0xd8, 0x96, 0xc8, 0x6c, 0xc3, 0x39, 0xf8, 0x36, 0x71, 0x16, 0x42, 0x15, 0xab, 0xc9, 0x78, 0x62, 0xf2, 0x15, 0x16, 0x54, 0xe7, 0x5a, 0x3b, 0x35, 0x7c, 0x37, 0x31, 0x1b, 0x3d, 0x72, 0x68, 0xca, 0xb5, 0x40, 0x20, 0x2e, 0x23, 0xbe, 0xe5, 0x27, 0x36, 0xf2, 0xcd, 0x86, 0xcc, 0xe0, 0xc7, 0xdb, 0xde, 0x95, 0xe1, 0xc6, 0x00, 0xa4, 0x73, 0x95, 0xdc, 0x5e, 0xb0, 0xa4, 0x72, 0x15, 0x3f, 0xbc, 0x4f, 0xb2, 0x1b, 0x64, 0x3e, 0x0c, 0x04, 0xae, 0x14, 0xdd, 0x37, 0xe9, 0x7e, 0x61, 0x7a, 0x75, 0x67, 0xc8, 0x96, 0x52, 0x21, 0x97, 0x81, 0x00, 0x1b, 0xa6, 0xf8, 0x32, 0x98 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.11", - /* Message to be signed */ - 206, - { 0x46, 0xc2, 0x4e, 0x41, 0x03, 0x00, 0x16, 0x29, 0xc7, 0x12, 0xdd, 0x4c, 0xe8, 0xd7, 0x47, 0xee, 0x59, 0x5d, 0x6c, 0x74, 0x4c, 0xcc, 0x4f, 0x71, 0x34, 0x7d, 0x9b, 0x8a, 0xbf, 0x49, 0xd1, 0xb8, 0xfb, 0x2e, 0xf9, 0x1b, 0x95, 0xdc, 0x89, 0x9d, 0x4c, 0x0e, 0x3d, 0x29, 0x97, 0xe6, 0x38, 0xf4, 0xcf, 0x3f, 0x68, 0xe0, 0x49, 0x8d, 0xe5, 0xaa, 0xbd, 0x13, 0xf0, 0xdf, 0xe0, 0x2f, 0xf2, 0x6b, 0xa4, 0x37, 0x91, 0x04, 0xe7, 0x8f, 0xfa, 0x95, 0xff, 0xbd, 0x15, 0x06, 0x7e, 0xf8, 0xcb, 0xd7, 0xeb, 0x78, 0x60, 0xfe, 0xcc, 0x71, 0xab, 0xe1, 0x3d, 0x5c, 0x72, 0x0a, 0x66, 0x85, 0x1f, 0x2d, 0xef, 0xd4, 0xe7, 0x95, 0x05, 0x4d, 0x7b, 0xec, 0x02, 0x4b, 0xb4, 0x22, 0xa4, 0x6a, 0x73, 0x68, 0xb5, 0x6d, 0x95, 0xb4, 0x7a, 0xeb, 0xaf, 0xbe, 0xad, 0xd6, 0x12, 0x81, 0x25, 0x93, 0xa7, 0x0d, 0xb9, 0xf9, 0x6d, 0x45, 0x1e, 0xe1, 0x5e, 0xdb, 0x29, 0x93, 0x08, 0xd7, 0x77, 0xf4, 0xbb, 0x68, 0xed, 0x33, 0x77, 0xc3, 0x21, 0x56, 0xb4, 0x1b, 0x7a, 0x9c, 0x92, 0xa1, 0x4c, 0x8b, 0x81, 0x14, 0x43, 0x99, 0xc5, 0x6a, 0x5a, 0x43, 0x2f, 0x4f, 0x77, 0x0a, 0xa9, 0x7d, 0xa8, 0x41, 0x5d, 0x0b, 0xda, 0x2e, 0x81, 0x32, 0x06, 0x03, 0x1e, 0x70, 0x62, 0x00, 0x31, 0xc8, 0x81, 0xd6, 0x16, 0xbf, 0xfd, 0x5f, 0x03, 0xbf, 0x14, 0x7c, 0x1e, 0x73, 0x76, 0x6c, 0x26, 0x24, 0x62, 0x08 } -, - /* Signature */ - 128, - { 0x12, 0x23, 0x5b, 0x0b, 0x40, 0x61, 0x26, 0xd9, 0xd2, 0x60, 0xd4, 0x47, 0xe9, 0x23, 0xa1, 0x10, 0x51, 0xfb, 0x24, 0x30, 0x79, 0xf4, 0x46, 0xfd, 0x73, 0xa7, 0x01, 0x81, 0xd5, 0x36, 0x34, 0xd7, 0xa0, 0x96, 0x8e, 0x4e, 0xe2, 0x77, 0x77, 0xed, 0xa6, 0x3f, 0x6e, 0x4a, 0x3a, 0x91, 0xad, 0x59, 0x85, 0x99, 0x8a, 0x48, 0x48, 0xda, 0x59, 0xce, 0x69, 0x7b, 0x24, 0xbb, 0x33, 0x2f, 0xa2, 0xad, 0x9c, 0xe4, 0x62, 0xca, 0x4a, 0xff, 0xdc, 0x21, 0xda, 0xb9, 0x08, 0xe8, 0xce, 0x15, 0xaf, 0x6e, 0xb9, 0x10, 0x5b, 0x1a, 0xbc, 0xf3, 0x91, 0x42, 0xaa, 0x17, 0xb3, 0x4c, 0x4c, 0x09, 0x23, 0x86, 0xa7, 0xab, 0xbf, 0xe0, 0x28, 0xaf, 0xdb, 0xeb, 0xc1, 0x4f, 0x2c, 0xe2, 0x6f, 0xbe, 0xe5, 0xed, 0xec, 0xa1, 0x15, 0x02, 0xd3, 0x9a, 0x6b, 0x74, 0x03, 0x15, 0x48, 0x43, 0xd9, 0x8a, 0x62, 0xa7 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.12", - /* Message to be signed */ - 107, - { 0xbc, 0x99, 0xa9, 0x32, 0xaa, 0x16, 0xd6, 0x22, 0xbf, 0xff, 0x79, 0xc5, 0x0b, 0x4c, 0x42, 0x35, 0x86, 0x73, 0x26, 0x11, 0x29, 0xe2, 0x8d, 0x6a, 0x91, 0x8f, 0xf1, 0xb0, 0xf1, 0xc4, 0xf4, 0x6a, 0xd8, 0xaf, 0xa9, 0x8b, 0x0c, 0xa0, 0xf5, 0x6f, 0x96, 0x79, 0x75, 0xb0, 0xa2, 0x9b, 0xe8, 0x82, 0xe9, 0x3b, 0x6c, 0xd3, 0xfc, 0x33, 0xe1, 0xfa, 0xef, 0x72, 0xe5, 0x2b, 0x2a, 0xe0, 0xa3, 0xf1, 0x20, 0x24, 0x50, 0x6e, 0x25, 0x69, 0x0e, 0x90, 0x2e, 0x78, 0x29, 0x82, 0x14, 0x55, 0x56, 0x53, 0x22, 0x84, 0xcf, 0x50, 0x57, 0x89, 0x73, 0x8f, 0x4d, 0xa3, 0x1f, 0xa1, 0x33, 0x3d, 0x3a, 0xf8, 0x62, 0xb2, 0xba, 0x6b, 0x6c, 0xe7, 0xab, 0x4c, 0xce, 0x6a, 0xba } -, - /* Signature */ - 128, - { 0x87, 0x2e, 0xc5, 0xad, 0x4f, 0x18, 0x46, 0x25, 0x6f, 0x17, 0xe9, 0x93, 0x6a, 0xc5, 0x0e, 0x43, 0xe9, 0x96, 0x3e, 0xa8, 0xc1, 0xe7, 0x6f, 0x15, 0x87, 0x9b, 0x78, 0x74, 0xd7, 0x7d, 0x12, 0x2a, 0x60, 0x9d, 0xc8, 0xc5, 0x61, 0x14, 0x5b, 0x94, 0xbf, 0x4f, 0xfd, 0xff, 0xde, 0xb1, 0x7e, 0x6e, 0x76, 0xff, 0xc6, 0xc1, 0x0c, 0x07, 0x47, 0xf5, 0xe3, 0x7a, 0x9f, 0x43, 0x4f, 0x56, 0x09, 0xe7, 0x9d, 0xa5, 0x25, 0x02, 0x15, 0xa4, 0x57, 0xaf, 0xdf, 0x12, 0xc6, 0x50, 0x7c, 0xc1, 0x55, 0x1f, 0x54, 0xa2, 0x80, 0x10, 0x59, 0x58, 0x26, 0xa2, 0xc9, 0xb9, 0x7f, 0xa0, 0xaa, 0x85, 0x1c, 0xc6, 0x8b, 0x70, 0x5d, 0x7a, 0x06, 0xd7, 0x20, 0xba, 0x02, 0x7e, 0x4a, 0x1c, 0x0b, 0x01, 0x95, 0x00, 0xfb, 0x63, 0xb7, 0x80, 0x71, 0x68, 0x4d, 0xcf, 0xa9, 0x77, 0x27, 0x00, 0xb9, 0x82, 0xdc, 0x66 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.13", - /* Message to be signed */ - 128, - { 0x73, 0x1e, 0x17, 0x2a, 0xc0, 0x63, 0x99, 0x2c, 0x5b, 0x11, 0xba, 0x17, 0x0d, 0xfb, 0x23, 0xbb, 0x00, 0x0d, 0x47, 0xba, 0x19, 0x53, 0x29, 0xcf, 0x27, 0x80, 0x61, 0x03, 0x73, 0x81, 0x51, 0x4c, 0x14, 0x60, 0x64, 0xc5, 0x28, 0x5d, 0xb1, 0x30, 0xdd, 0x5b, 0xae, 0x98, 0xb7, 0x72, 0x22, 0x59, 0x50, 0xea, 0xb0, 0x5d, 0x3e, 0xa9, 0x96, 0xf6, 0xff, 0xfb, 0x9a, 0x8c, 0x86, 0x22, 0x91, 0x3f, 0x27, 0x99, 0x14, 0xc8, 0x9a, 0xda, 0x4f, 0x3d, 0xd7, 0x76, 0x66, 0xa8, 0x68, 0xbf, 0xcb, 0xff, 0x2b, 0x95, 0xb7, 0xda, 0xf4, 0x53, 0xd4, 0xe2, 0xc9, 0xd7, 0x5b, 0xee, 0xe7, 0xf8, 0xe7, 0x09, 0x05, 0xe4, 0x06, 0x6a, 0x4f, 0x73, 0xae, 0xcc, 0x67, 0xf9, 0x56, 0xaa, 0x5a, 0x32, 0x92, 0xb8, 0x48, 0x8c, 0x91, 0x7d, 0x31, 0x7c, 0xfd, 0xc8, 0x62, 0x53, 0xe6, 0x90, 0x38, 0x1e, 0x15, 0xab } -, - /* Signature */ - 128, - { 0x76, 0x20, 0x4e, 0xac, 0xc1, 0xd6, 0x3e, 0xc1, 0xd6, 0xad, 0x5b, 0xd0, 0x69, 0x2e, 0x1a, 0x2f, 0x68, 0x6d, 0xf6, 0xe6, 0x4c, 0xa9, 0x45, 0xc7, 0x7a, 0x82, 0x4d, 0xe2, 0x12, 0xef, 0xa6, 0xd9, 0x78, 0x2d, 0x81, 0xb4, 0x59, 0x14, 0x03, 0xff, 0x40, 0x20, 0x62, 0x02, 0x98, 0xc0, 0x7e, 0xbd, 0x3a, 0x8a, 0x61, 0xc5, 0xbf, 0x4d, 0xad, 0x62, 0xcb, 0xfc, 0x4a, 0xe6, 0xa0, 0x39, 0x37, 0xbe, 0x4b, 0x49, 0xa2, 0x16, 0xd5, 0x70, 0xfc, 0x6e, 0x81, 0x87, 0x29, 0x37, 0x87, 0x6e, 0x27, 0xbd, 0x19, 0xcf, 0x60, 0x1e, 0xff, 0xc3, 0x0d, 0xdc, 0xa5, 0x73, 0xc9, 0xd5, 0x6c, 0xd4, 0x56, 0x9b, 0xdb, 0x48, 0x51, 0xc4, 0x50, 0xc4, 0x2c, 0xb2, 0x1e, 0x73, 0x8c, 0xdd, 0x61, 0x02, 0x7b, 0x8b, 0xe5, 0xe9, 0xb4, 0x10, 0xfc, 0x46, 0xaa, 0x3f, 0x29, 0xe4, 0xbe, 0x9e, 0x64, 0x45, 0x13, 0x46 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.14", - /* Message to be signed */ - 217, - { 0x02, 0x11, 0x38, 0x26, 0x83, 0xa7, 0x4d, 0x8d, 0x2a, 0x2c, 0xb6, 0xa0, 0x65, 0x50, 0x56, 0x3b, 0xe1, 0xc2, 0x6c, 0xa6, 0x28, 0x21, 0xe4, 0xff, 0x16, 0x3b, 0x72, 0x04, 0x64, 0xfc, 0x3a, 0x28, 0xd9, 0x1b, 0xed, 0xdd, 0xc6, 0x27, 0x49, 0xa5, 0x53, 0x8e, 0xaf, 0x41, 0xfb, 0xe0, 0xc8, 0x2a, 0x77, 0xe0, 0x6a, 0xd9, 0x93, 0x83, 0xc9, 0xe9, 0x85, 0xff, 0xb8, 0xa9, 0x3f, 0xd4, 0xd7, 0xc5, 0x8d, 0xb5, 0x1a, 0xd9, 0x1b, 0xa4, 0x61, 0xd6, 0x9a, 0x8f, 0xd7, 0xdd, 0xab, 0xe2, 0x49, 0x67, 0x57, 0xa0, 0xc4, 0x91, 0x22, 0xc1, 0xa7, 0x9a, 0x85, 0xcc, 0x05, 0x53, 0xe8, 0x21, 0x4d, 0x03, 0x6d, 0xfe, 0x01, 0x85, 0xef, 0xa0, 0xd0, 0x58, 0x60, 0xc6, 0x12, 0xfa, 0x08, 0x82, 0xc8, 0x2d, 0x24, 0x6e, 0x58, 0x30, 0xa6, 0x73, 0x55, 0xdf, 0xf1, 0x8a, 0x2c, 0x36, 0xb7, 0x32, 0xf9, 0x88, 0xcf, 0xed, 0xc5, 0x62, 0x26, 0x4c, 0x62, 0x54, 0xb4, 0x0f, 0xca, 0xbb, 0x97, 0xb7, 0x60, 0x94, 0x75, 0x68, 0xdc, 0xd6, 0xa1, 0x7c, 0xda, 0x6e, 0xe8, 0x85, 0x5b, 0xdd, 0xba, 0xb9, 0x37, 0x02, 0x47, 0x1a, 0xa0, 0xcf, 0xb1, 0xbe, 0xd2, 0xe1, 0x31, 0x18, 0xeb, 0xa1, 0x17, 0x5b, 0x73, 0xc9, 0x62, 0x53, 0xc1, 0x08, 0xd0, 0xb2, 0xab, 0xa0, 0x5a, 0xb8, 0xe1, 0x7e, 0x84, 0x39, 0x2e, 0x20, 0x08, 0x5f, 0x47, 0x40, 0x4d, 0x83, 0x65, 0x52, 0x7d, 0xc3, 0xfb, 0x8f, 0x2b, 0xb4, 0x8a, 0x50, 0x03, 0x8e, 0x71, 0x36, 0x1c, 0xcf, 0x97, 0x34, 0x07 } -, - /* Signature */ - 128, - { 0x52, 0x55, 0x00, 0x91, 0x83, 0x31, 0xf1, 0x04, 0x2e, 0xae, 0x0c, 0x5c, 0x20, 0x54, 0xaa, 0x7f, 0x92, 0xde, 0xb2, 0x69, 0x91, 0xb5, 0x79, 0x66, 0x34, 0xf2, 0x29, 0xda, 0xf9, 0xb4, 0x9e, 0xb2, 0x05, 0x4d, 0x87, 0x31, 0x9f, 0x3c, 0xfa, 0x9b, 0x46, 0x6b, 0xd0, 0x75, 0xef, 0x66, 0x99, 0xae, 0xa4, 0xbd, 0x4a, 0x19, 0x5a, 0x1c, 0x52, 0x96, 0x8b, 0x5e, 0x2b, 0x75, 0xe0, 0x92, 0xd8, 0x46, 0xea, 0x1b, 0x5c, 0xc2, 0x79, 0x05, 0xa8, 0xe1, 0xd5, 0xe5, 0xde, 0x0e, 0xdf, 0xdb, 0x21, 0x39, 0x1e, 0xbb, 0x95, 0x18, 0x64, 0xeb, 0xd9, 0xf0, 0xb0, 0xec, 0x35, 0xb6, 0x54, 0x28, 0x71, 0x36, 0x0a, 0x31, 0x7b, 0x7e, 0xf1, 0x3a, 0xe0, 0x6a, 0xf6, 0x84, 0xe3, 0x8e, 0x21, 0xb1, 0xe1, 0x9b, 0xc7, 0x29, 0x8e, 0x5d, 0x6f, 0xe0, 0x01, 0x3a, 0x16, 0x4b, 0xfa, 0x25, 0xd3, 0xe7, 0x31, 0x3d } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.15", - /* Message to be signed */ - 66, - { 0xfc, 0x6b, 0x70, 0x0d, 0x22, 0x58, 0x33, 0x88, 0xab, 0x2f, 0x8d, 0xaf, 0xca, 0xf1, 0xa0, 0x56, 0x20, 0x69, 0x80, 0x20, 0xda, 0x4b, 0xae, 0x44, 0xda, 0xfb, 0xd0, 0x87, 0x7b, 0x50, 0x12, 0x50, 0x6d, 0xc3, 0x18, 0x1d, 0x5c, 0x66, 0xbf, 0x02, 0x3f, 0x34, 0x8b, 0x41, 0xfd, 0x9f, 0x94, 0x79, 0x5a, 0xb9, 0x64, 0x52, 0xa4, 0x21, 0x9f, 0x2d, 0x39, 0xd7, 0x2a, 0xf3, 0x59, 0xcf, 0x19, 0x56, 0x51, 0xc7 } -, - /* Signature */ - 128, - { 0x44, 0x52, 0xa6, 0xcc, 0x26, 0x26, 0xb0, 0x1e, 0x95, 0xab, 0x30, 0x6d, 0xf0, 0xd0, 0xcc, 0x74, 0x84, 0xfb, 0xab, 0x3c, 0x22, 0xe9, 0x70, 0x32, 0x83, 0x56, 0x7f, 0x66, 0xea, 0xdc, 0x24, 0x8d, 0xbd, 0xa5, 0x8f, 0xce, 0x7d, 0xd0, 0xc7, 0x0c, 0xce, 0x3f, 0x15, 0x0f, 0xca, 0x4b, 0x36, 0x9d, 0xff, 0x3b, 0x62, 0x37, 0xe2, 0xb1, 0x62, 0x81, 0xab, 0x55, 0xb5, 0x3f, 0xb1, 0x30, 0x89, 0xc8, 0x5c, 0xd2, 0x65, 0x05, 0x6b, 0x3d, 0x62, 0xa8, 0x8b, 0xfc, 0x21, 0x35, 0xb1, 0x67, 0x91, 0xf7, 0xfb, 0xca, 0xb9, 0xfd, 0x2d, 0xc3, 0x3b, 0xec, 0xb6, 0x17, 0xbe, 0x41, 0x9d, 0x2c, 0x04, 0x61, 0x42, 0xa4, 0xd4, 0x7b, 0x33, 0x83, 0x14, 0x55, 0x2e, 0xdd, 0x4b, 0x6f, 0xe9, 0xce, 0x11, 0x04, 0xec, 0xec, 0x4a, 0x99, 0x58, 0xd7, 0x33, 0x1e, 0x93, 0x0f, 0xc0, 0x9b, 0xf0, 0x8a, 0x6e, 0x64 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.16", - /* Message to be signed */ - 169, - { 0x13, 0xba, 0x08, 0x6d, 0x70, 0x9c, 0xfa, 0x5f, 0xed, 0xaa, 0x55, 0x7a, 0x89, 0x18, 0x1a, 0x61, 0x40, 0xf2, 0x30, 0x0e, 0xd6, 0xd7, 0xc3, 0xfe, 0xbb, 0x6c, 0xf6, 0x8a, 0xbe, 0xbc, 0xbc, 0x67, 0x8f, 0x2b, 0xca, 0x3d, 0xc2, 0x33, 0x02, 0x95, 0xee, 0xc4, 0x5b, 0xb1, 0xc4, 0x07, 0x5f, 0x3a, 0xda, 0x98, 0x7e, 0xae, 0x88, 0xb3, 0x9c, 0x51, 0x60, 0x6c, 0xb8, 0x04, 0x29, 0xe6, 0x49, 0xd9, 0x8a, 0xcc, 0x84, 0x41, 0xb1, 0xf8, 0x89, 0x7d, 0xb8, 0x6c, 0x5a, 0x4c, 0xe0, 0xab, 0xf2, 0x8b, 0x1b, 0x81, 0xdc, 0xa3, 0x66, 0x76, 0x97, 0xb8, 0x50, 0x69, 0x6b, 0x74, 0xa5, 0xeb, 0xd8, 0x5d, 0xec, 0x56, 0xc9, 0x0f, 0x8a, 0xbe, 0x51, 0x3e, 0xfa, 0x85, 0x78, 0x53, 0x72, 0x0b, 0xe3, 0x19, 0x60, 0x79, 0x21, 0xbc, 0xa9, 0x47, 0x52, 0x2c, 0xd8, 0xfa, 0xc8, 0xca, 0xce, 0x5b, 0x82, 0x7c, 0x3e, 0x5a, 0x12, 0x9e, 0x7e, 0xe5, 0x7f, 0x6b, 0x84, 0x93, 0x2f, 0x14, 0x14, 0x1a, 0xc4, 0x27, 0x4e, 0x8c, 0xbb, 0x46, 0xe6, 0x91, 0x2b, 0x0d, 0x3e, 0x21, 0x77, 0xd4, 0x99, 0xd1, 0x84, 0x0c, 0xd4, 0x7d, 0x4d, 0x7a, 0xe0, 0xb4, 0xcd, 0xc4, 0xd3 } -, - /* Signature */ - 128, - { 0x1f, 0x3b, 0x5a, 0x87, 0xdb, 0x72, 0xa2, 0xc9, 0x7b, 0xb3, 0xef, 0xf2, 0xa6, 0x5a, 0x30, 0x12, 0x68, 0xea, 0xcd, 0x89, 0xf4, 0x2a, 0xbc, 0x10, 0x98, 0xc1, 0xf2, 0xde, 0x77, 0xb0, 0x83, 0x2a, 0x65, 0xd7, 0x81, 0x5f, 0xeb, 0x35, 0x07, 0x00, 0x63, 0xf2, 0x21, 0xbb, 0x34, 0x53, 0xbd, 0x43, 0x43, 0x86, 0xc9, 0xa3, 0xfd, 0xe1, 0x8e, 0x3c, 0xa1, 0x68, 0x7f, 0xb6, 0x49, 0xe8, 0x6c, 0x51, 0xd6, 0x58, 0x61, 0x9d, 0xde, 0x5d, 0xeb, 0xb8, 0x6f, 0xe1, 0x54, 0x91, 0xff, 0x77, 0xab, 0x74, 0x83, 0x73, 0xf1, 0xbe, 0x50, 0x88, 0x80, 0xd6, 0x6e, 0xa8, 0x1e, 0x87, 0x0e, 0x91, 0xcd, 0xf1, 0x70, 0x48, 0x75, 0xc1, 0x7f, 0x0b, 0x10, 0x10, 0x31, 0x88, 0xbc, 0x64, 0xee, 0xf5, 0xa3, 0x55, 0x1b, 0x41, 0x4c, 0x73, 0x36, 0x70, 0x21, 0x5b, 0x1a, 0x22, 0x70, 0x25, 0x62, 0x58, 0x1a, 0xb1 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.17", - /* Message to be signed */ - 4, - { 0xeb, 0x1e, 0x59, 0x35 } -, - /* Signature */ - 128, - { 0x37, 0x0c, 0xb9, 0x83, 0x9a, 0xe6, 0x07, 0x4f, 0x84, 0xb2, 0xac, 0xd6, 0xe6, 0xf6, 0xb7, 0x92, 0x1b, 0x4b, 0x52, 0x34, 0x63, 0x75, 0x7f, 0x64, 0x46, 0x71, 0x61, 0x40, 0xc4, 0xe6, 0xc0, 0xe7, 0x5b, 0xec, 0x6a, 0xd0, 0x19, 0x7e, 0xbf, 0xa8, 0x6b, 0xf4, 0x6d, 0x09, 0x4f, 0x5f, 0x6c, 0xd3, 0x6d, 0xca, 0x3a, 0x5c, 0xc7, 0x3c, 0x8b, 0xbb, 0x70, 0xe2, 0xc7, 0xc9, 0xab, 0x5d, 0x96, 0x4e, 0xc8, 0xe3, 0xdf, 0xde, 0x48, 0x1b, 0x4a, 0x1b, 0xef, 0xfd, 0x01, 0xb4, 0xad, 0x15, 0xb3, 0x1a, 0xe7, 0xae, 0xbb, 0x9b, 0x70, 0x34, 0x4a, 0x94, 0x11, 0x08, 0x31, 0x65, 0xfd, 0xf9, 0xc3, 0x75, 0x4b, 0xbb, 0x8b, 0x94, 0xdd, 0x34, 0xbd, 0x48, 0x13, 0xdf, 0xad, 0xa1, 0xf6, 0x93, 0x7d, 0xe4, 0x26, 0x7d, 0x55, 0x97, 0xca, 0x09, 0xa3, 0x1e, 0x83, 0xd7, 0xf1, 0xa7, 0x9d, 0xd1, 0x9b, 0x5e } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.18", - /* Message to be signed */ - 28, - { 0x63, 0x46, 0xb1, 0x53, 0xe8, 0x89, 0xc8, 0x22, 0x82, 0x09, 0x63, 0x00, 0x71, 0xc8, 0xa5, 0x77, 0x83, 0xf3, 0x68, 0x76, 0x0b, 0x8e, 0xb9, 0x08, 0xcf, 0xc2, 0xb2, 0x76 } -, - /* Signature */ - 128, - { 0x24, 0x79, 0xc9, 0x75, 0xc5, 0xb1, 0xae, 0x4c, 0x4e, 0x94, 0x0f, 0x47, 0x3a, 0x90, 0x45, 0xb8, 0xbf, 0x5b, 0x0b, 0xfc, 0xa7, 0x8e, 0xc2, 0x9a, 0x38, 0xdf, 0xbe, 0xdc, 0x8a, 0x74, 0x9b, 0x7a, 0x26, 0x92, 0xf7, 0xc5, 0x2d, 0x5b, 0xc7, 0xc8, 0x31, 0xc7, 0x23, 0x23, 0x72, 0xa0, 0x0f, 0xed, 0x3b, 0x6b, 0x49, 0xe7, 0x60, 0xec, 0x99, 0xe0, 0x74, 0xff, 0x2e, 0xea, 0xd5, 0x13, 0x4e, 0x83, 0x05, 0x72, 0x5d, 0xfa, 0x39, 0x21, 0x2b, 0x84, 0xbd, 0x4b, 0x8d, 0x80, 0xbc, 0x8b, 0xc1, 0x7a, 0x51, 0x28, 0x23, 0xa3, 0xbe, 0xb1, 0x8f, 0xc0, 0x8e, 0x45, 0xed, 0x19, 0xc2, 0x6c, 0x81, 0x77, 0x07, 0xd6, 0x7f, 0xb0, 0x58, 0x32, 0xef, 0x1f, 0x12, 0xa3, 0x3e, 0x90, 0xcd, 0x93, 0xb8, 0xa7, 0x80, 0x31, 0x9e, 0x29, 0x63, 0xca, 0x25, 0xa2, 0xaf, 0x7b, 0x09, 0xad, 0x8f, 0x59, 0x5c, 0x21 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.19", - /* Message to be signed */ - 50, - { 0x64, 0x70, 0x2d, 0xb9, 0xf8, 0x25, 0xa0, 0xf3, 0xab, 0xc3, 0x61, 0x97, 0x46, 0x59, 0xf5, 0xe9, 0xd3, 0x0c, 0x3a, 0xa4, 0xf5, 0x6f, 0xea, 0xc6, 0x90, 0x50, 0xc7, 0x29, 0x05, 0xe7, 0x7f, 0xe0, 0xc2, 0x2f, 0x88, 0xa3, 0x78, 0xc2, 0x1f, 0xcf, 0x45, 0xfe, 0x8a, 0x5c, 0x71, 0x73, 0x02, 0x09, 0x39, 0x29 } -, - /* Signature */ - 128, - { 0x15, 0x2f, 0x34, 0x51, 0xc8, 0x58, 0xd6, 0x95, 0x94, 0xe6, 0x56, 0x7d, 0xfb, 0x31, 0x29, 0x1c, 0x1e, 0xe7, 0x86, 0x0b, 0x9d, 0x15, 0xeb, 0xd5, 0xa5, 0xed, 0xd2, 0x76, 0xac, 0x3e, 0x6f, 0x7a, 0x8d, 0x14, 0x80, 0xe4, 0x2b, 0x33, 0x81, 0xd2, 0xbe, 0x02, 0x3a, 0xcf, 0x7e, 0xbb, 0xdb, 0x28, 0xde, 0x3d, 0x21, 0x63, 0xae, 0x44, 0x25, 0x9c, 0x6d, 0xf9, 0x8c, 0x33, 0x5d, 0x04, 0x5b, 0x61, 0xda, 0xc9, 0xdb, 0xa9, 0xdb, 0xbb, 0x4e, 0x6a, 0xb4, 0xa0, 0x83, 0xcd, 0x76, 0xb5, 0x80, 0xcb, 0xe4, 0x72, 0x20, 0x6a, 0x1a, 0x9f, 0xd6, 0x06, 0x80, 0xce, 0xea, 0x1a, 0x57, 0x0a, 0x29, 0xb0, 0x88, 0x1c, 0x77, 0x5e, 0xae, 0xf5, 0x52, 0x5d, 0x6d, 0x2f, 0x34, 0x4c, 0x28, 0x83, 0x7d, 0x0a, 0xca, 0x42, 0x2b, 0xbb, 0x0f, 0x1a, 0xba, 0x8f, 0x68, 0x61, 0xae, 0x18, 0xbd, 0x73, 0xfe, 0x44 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 1.20", - /* Message to be signed */ - 43, - { 0x94, 0x19, 0x21, 0xde, 0x4a, 0x1c, 0x9c, 0x16, 0x18, 0xd6, 0xf3, 0xca, 0x3c, 0x17, 0x9f, 0x6e, 0x29, 0xba, 0xe6, 0xdd, 0xf9, 0xa6, 0xa5, 0x64, 0xf9, 0x29, 0xe3, 0xce, 0x82, 0xcf, 0x32, 0x65, 0xd7, 0x83, 0x7d, 0x5e, 0x69, 0x2b, 0xe8, 0xdc, 0xc9, 0xe8, 0x6c } -, - /* Signature */ - 128, - { 0x70, 0x76, 0xc2, 0x87, 0xfc, 0x6f, 0xff, 0x2b, 0x20, 0x53, 0x74, 0x35, 0xe5, 0xa3, 0x10, 0x7c, 0xe4, 0xda, 0x10, 0x71, 0x61, 0x86, 0xd0, 0x15, 0x39, 0x41, 0x3e, 0x60, 0x9d, 0x27, 0xd1, 0xda, 0x6f, 0xd9, 0x52, 0xc6, 0x1f, 0x4b, 0xab, 0x91, 0xc0, 0x45, 0xfa, 0x4f, 0x86, 0x83, 0xec, 0xc4, 0xf8, 0xdd, 0xe7, 0x42, 0x27, 0xf7, 0x73, 0xcf, 0xf3, 0xd9, 0x6d, 0xb8, 0x47, 0x18, 0xc4, 0x94, 0x4b, 0x06, 0xaf, 0xfe, 0xba, 0x94, 0xb7, 0x25, 0xf1, 0xb0, 0x7d, 0x39, 0x28, 0xb2, 0x49, 0x0a, 0x85, 0xc2, 0xf1, 0xab, 0xf4, 0x92, 0xa9, 0x17, 0x7a, 0x7c, 0xd2, 0xea, 0x0c, 0x96, 0x68, 0x75, 0x6f, 0x82, 0x5b, 0xbe, 0xc9, 0x00, 0xfa, 0x8a, 0xc3, 0x82, 0x4e, 0x11, 0x43, 0x87, 0xef, 0x57, 0x37, 0x80, 0xca, 0x33, 0x48, 0x82, 0x38, 0x7b, 0x94, 0xe5, 0xaa, 0xd7, 0xa2, 0x7a, 0x28, 0xdc } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 2: A 1024-bit RSA key pair", -{ - /* Modulus */ - 128, - { 0xac, 0x13, 0xd9, 0xfd, 0xae, 0x7b, 0x73, 0x35, 0xb6, 0x9c, 0xd9, 0x85, 0x67, 0xe9, 0x64, 0x7d, 0x99, 0xbf, 0x37, 0x3a, 0x9e, 0x05, 0xce, 0x34, 0x35, 0xd6, 0x64, 0x65, 0xf3, 0x28, 0xb7, 0xf7, 0x33, 0x4b, 0x79, 0x2a, 0xee, 0x7e, 0xfa, 0x04, 0x4e, 0xbc, 0x4c, 0x7a, 0x30, 0xb2, 0x1a, 0x5d, 0x7a, 0x89, 0xcd, 0xb3, 0xa3, 0x0d, 0xfc, 0xd9, 0xfe, 0xe9, 0x99, 0x5e, 0x09, 0x41, 0x5e, 0xdc, 0x0b, 0xf9, 0xe5, 0xb4, 0xc3, 0xf7, 0x4f, 0xf5, 0x3f, 0xb4, 0xd2, 0x94, 0x41, 0xbf, 0x1b, 0x7e, 0xd6, 0xcb, 0xdd, 0x4a, 0x47, 0xf9, 0x25, 0x22, 0x69, 0xe1, 0x64, 0x6f, 0x6c, 0x1a, 0xee, 0x05, 0x14, 0xe9, 0x3f, 0x6c, 0xb9, 0xdf, 0x71, 0xd0, 0x6c, 0x06, 0x0a, 0x21, 0x04, 0xb4, 0x7b, 0x72, 0x60, 0xac, 0x37, 0xc1, 0x06, 0x86, 0x1d, 0xc7, 0x8c, 0xa5, 0xa2, 0x5f, 0xaa, 0x9c, 0xb2, 0xe3 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x04, 0x84, 0xcc, 0xef, 0xad, 0x7a, 0x4e, 0x6f, 0x35, 0xa9, 0x6e, 0xc8, 0xe3, 0x0e, 0xac, 0xf5, 0xe3, 0x68, 0xb3, 0x11, 0x95, 0xfe, 0xbf, 0x08, 0x7d, 0xf5, 0x70, 0x53, 0x81, 0x0c, 0x2b, 0xb0, 0x91, 0x27, 0x45, 0x3a, 0x4c, 0x63, 0x07, 0x3b, 0xbf, 0xb9, 0x90, 0x24, 0x91, 0x4c, 0xcc, 0x06, 0x72, 0x66, 0x56, 0x01, 0x86, 0xa1, 0xa2, 0x67, 0x33, 0x1b, 0x7d, 0x4c, 0x8b, 0xdf, 0xac, 0x96, 0xfd, 0xa9, 0xf3, 0xf7, 0x0b, 0xec, 0x4e, 0xea, 0xbc, 0xe7, 0xcd, 0x52, 0x19, 0x34, 0x3c, 0x2e, 0x49, 0x1c, 0xce, 0x82, 0x7e, 0x44, 0xee, 0x23, 0x0e, 0x4f, 0x69, 0x58, 0x9e, 0x57, 0x5a, 0xe9, 0x06, 0x30, 0x30, 0x44, 0x2a, 0x31, 0xc8, 0x2c, 0xde, 0x30, 0xdc, 0x9c, 0x79, 0xcf, 0x64, 0xe7, 0xa0, 0x97, 0x5e, 0x75, 0xe1, 0x6e, 0xa4, 0x58, 0x15, 0x48, 0x8b, 0x45, 0x52, 0x56, 0xee, 0xb1 } -, - /* Prime 1 */ - 64, - { 0xdf, 0x85, 0xf4, 0xa0, 0xb4, 0x33, 0xbd, 0x37, 0x43, 0x3c, 0xd7, 0x97, 0x8c, 0x9b, 0x37, 0xf9, 0xe4, 0x17, 0x29, 0xd8, 0x3a, 0x26, 0x2b, 0x98, 0x46, 0x53, 0x8e, 0x50, 0x39, 0xe6, 0x59, 0x68, 0xb5, 0x95, 0xa4, 0x62, 0x72, 0xbd, 0x5f, 0x4a, 0x2c, 0x3a, 0xbf, 0x89, 0x0a, 0x35, 0x50, 0x8a, 0x5b, 0xcb, 0x4c, 0x29, 0xef, 0xbd, 0x91, 0x02, 0x85, 0x03, 0x83, 0x4c, 0xfa, 0xb2, 0xc0, 0xf9 } -, - /* Prime 2 */ - 64, - { 0xc5, 0x14, 0x59, 0xa6, 0x72, 0xed, 0x8b, 0x72, 0x4c, 0x6a, 0x8f, 0x28, 0x5c, 0xbb, 0x8e, 0xa7, 0x6a, 0x23, 0x93, 0x91, 0x79, 0x28, 0xbe, 0x56, 0xc0, 0xdc, 0xdf, 0xc9, 0x43, 0xc3, 0x0b, 0xda, 0x3c, 0xee, 0xfb, 0x86, 0xdc, 0xc8, 0xc4, 0x55, 0x67, 0x8c, 0xfe, 0x88, 0x25, 0xf3, 0x88, 0x77, 0xa3, 0x72, 0x8a, 0x1f, 0x10, 0x29, 0x1f, 0x54, 0x7b, 0x1e, 0x8b, 0x16, 0x04, 0x83, 0xe5, 0xbb } -, - /* Prime exponent 1 */ - 64, - { 0xb6, 0xba, 0x83, 0xa9, 0x7c, 0xa7, 0x6f, 0x5f, 0xe6, 0x0f, 0xaf, 0x0f, 0xad, 0x5a, 0x97, 0x00, 0x2a, 0x7e, 0xe5, 0x2e, 0x67, 0x1b, 0x1d, 0x38, 0x77, 0x05, 0x87, 0xa9, 0xfe, 0x2b, 0x59, 0x9c, 0x48, 0x15, 0xf5, 0x34, 0xa6, 0x28, 0x39, 0xe6, 0x21, 0x12, 0x45, 0xd2, 0x7a, 0x0d, 0xeb, 0xb1, 0xb0, 0x29, 0x1a, 0x32, 0x8e, 0x52, 0xa2, 0x61, 0x34, 0xec, 0x12, 0x42, 0xb4, 0x0f, 0xbd, 0xc1 } -, - /* Prime exponent 2 */ - 64, - { 0xb9, 0xb1, 0xc6, 0x13, 0x2e, 0xe1, 0x22, 0x6e, 0x6d, 0x10, 0x4e, 0x99, 0x72, 0x5f, 0x0b, 0x38, 0x35, 0xab, 0x15, 0xe5, 0x91, 0x6a, 0xd1, 0x85, 0xbe, 0xad, 0x9f, 0x72, 0xed, 0x95, 0x3f, 0x7a, 0xbf, 0xc5, 0x52, 0x5c, 0xad, 0x75, 0xc2, 0x80, 0xd2, 0x54, 0x28, 0x94, 0xb2, 0x65, 0xb8, 0x65, 0x3a, 0x2d, 0xb7, 0x75, 0x33, 0x6d, 0xfb, 0xe6, 0x47, 0x27, 0xed, 0x57, 0xae, 0xa3, 0x74, 0xf7 } -, - /* Coefficient */ - 64, - { 0x7b, 0x8d, 0x15, 0xa5, 0xdd, 0x28, 0x90, 0xa6, 0x7d, 0x1b, 0x54, 0x9c, 0x93, 0x5f, 0x58, 0x5a, 0x38, 0xda, 0x56, 0xf7, 0xc8, 0x15, 0x5a, 0x51, 0x9d, 0xc8, 0xf1, 0xf6, 0xad, 0xe5, 0x53, 0xd6, 0x37, 0x93, 0xc7, 0x8a, 0x0e, 0xce, 0x8d, 0x53, 0x72, 0x4e, 0x62, 0xae, 0x50, 0x3a, 0xd5, 0x25, 0xbf, 0xaf, 0x10, 0xcf, 0x61, 0x6a, 0x47, 0x73, 0xce, 0x7c, 0xcd, 0x5c, 0x1b, 0x31, 0x51, 0xbd } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 2.1", - /* Message to be signed */ - 158, - { 0xe1, 0xc0, 0xf9, 0x8d, 0x53, 0xf8, 0xf8, 0xb1, 0x41, 0x90, 0x57, 0xd5, 0xb9, 0xb1, 0x0b, 0x07, 0xfe, 0xea, 0xec, 0x32, 0xc0, 0x46, 0x3a, 0x4d, 0x68, 0x38, 0x2f, 0x53, 0x1b, 0xa1, 0xd6, 0xcf, 0xe4, 0xed, 0x38, 0xa2, 0x69, 0x4a, 0x34, 0xb9, 0xc8, 0x05, 0xad, 0xf0, 0x72, 0xff, 0xbc, 0xeb, 0xe2, 0x1d, 0x8d, 0x4b, 0x5c, 0x0e, 0x8c, 0x33, 0x45, 0x2d, 0xd8, 0xf9, 0xc9, 0xbf, 0x45, 0xd1, 0xe6, 0x33, 0x75, 0x11, 0x33, 0x58, 0x82, 0x29, 0xd2, 0x93, 0xc6, 0x49, 0x6b, 0x7c, 0x98, 0x3c, 0x2c, 0x72, 0xbd, 0x21, 0xd3, 0x39, 0x27, 0x2d, 0x78, 0x28, 0xb0, 0xd0, 0x9d, 0x01, 0x0b, 0xba, 0xd3, 0x18, 0xd9, 0x98, 0xf7, 0x04, 0x79, 0x67, 0x33, 0x8a, 0xce, 0xfd, 0x01, 0xe8, 0x74, 0xac, 0xe5, 0xf8, 0x6d, 0x2a, 0x60, 0xf3, 0xb3, 0xca, 0xe1, 0x3f, 0xc5, 0xc6, 0x65, 0x08, 0xcf, 0xb7, 0x23, 0x78, 0xfd, 0xd6, 0xc8, 0xde, 0x24, 0x97, 0x65, 0x10, 0x3c, 0xe8, 0xfe, 0x7c, 0xd3, 0x3a, 0xd0, 0xef, 0x16, 0x86, 0xfe, 0xb2, 0x5e, 0x6a, 0x35, 0xfb, 0x64, 0xe0, 0x96, 0xa4 } -, - /* Signature */ - 128, - { 0x64, 0xac, 0x09, 0x39, 0x71, 0xf8, 0xf0, 0x96, 0xa4, 0xc1, 0xd4, 0xa5, 0x43, 0x66, 0x2a, 0x2e, 0x5a, 0x12, 0x81, 0xc9, 0x50, 0x98, 0x7d, 0xe8, 0x98, 0x70, 0x7f, 0x02, 0x9c, 0x15, 0x9b, 0xd8, 0x32, 0xca, 0xc5, 0x5d, 0x91, 0x36, 0xe0, 0xe9, 0xb4, 0xa8, 0x0b, 0xf6, 0xf2, 0x1b, 0x68, 0xcf, 0x97, 0x70, 0xa6, 0x34, 0x9a, 0xe5, 0x1e, 0x7f, 0x09, 0xdb, 0xda, 0x9d, 0x59, 0xc4, 0x58, 0x37, 0x37, 0x47, 0x2d, 0x4d, 0x65, 0x32, 0xc7, 0x17, 0x7e, 0xe9, 0x81, 0x08, 0xd2, 0xcf, 0x42, 0xcd, 0x08, 0x5a, 0xbb, 0x49, 0x22, 0xeb, 0x29, 0xd9, 0x6f, 0x3d, 0x0f, 0x6b, 0x1d, 0x0d, 0x43, 0xc7, 0x39, 0xcc, 0xf1, 0xba, 0x65, 0x16, 0x75, 0xe1, 0x96, 0x8b, 0x50, 0x7d, 0x51, 0x90, 0x2f, 0x38, 0xcd, 0xec, 0x0b, 0x61, 0x32, 0x72, 0x90, 0x45, 0x32, 0x5f, 0xc1, 0xfb, 0x8f, 0xd5, 0x58, 0xe8 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 2.2", - /* Message to be signed */ - 177, - { 0xc1, 0x11, 0x46, 0x4e, 0x00, 0x2e, 0x4e, 0xc6, 0x18, 0xa8, 0xe2, 0x63, 0xdb, 0xcc, 0xa9, 0x1f, 0xb1, 0x8a, 0x00, 0xa1, 0x8b, 0x44, 0x0c, 0x4b, 0x55, 0x97, 0xbe, 0xe7, 0xdb, 0x2a, 0xed, 0xa8, 0x31, 0xe6, 0x21, 0xfc, 0xac, 0x8d, 0xd8, 0x1c, 0xee, 0x35, 0x03, 0x24, 0x2b, 0x33, 0xb0, 0xda, 0xa9, 0x87, 0xfe, 0x2f, 0x54, 0x93, 0xad, 0x2d, 0x06, 0xa1, 0x50, 0x07, 0x59, 0x00, 0x40, 0xce, 0x3c, 0x22, 0x77, 0x64, 0x2f, 0xd2, 0x7f, 0x3f, 0x25, 0x5e, 0x3d, 0x98, 0xd8, 0x9d, 0xfa, 0xeb, 0x86, 0xbe, 0x34, 0xe0, 0xb8, 0xfb, 0xb9, 0x35, 0xfb, 0x92, 0x85, 0x60, 0xfa, 0x29, 0x2d, 0x26, 0x34, 0x62, 0x5a, 0x50, 0x7d, 0xd5, 0x80, 0xa8, 0x91, 0x24, 0xb9, 0x21, 0x29, 0x3e, 0x8d, 0xfe, 0xdd, 0xc2, 0x81, 0xd7, 0x9e, 0xb3, 0xa5, 0x69, 0xd5, 0x9e, 0x0d, 0xb8, 0x01, 0x3e, 0x53, 0xf7, 0xd4, 0xc2, 0xf9, 0x6e, 0x5f, 0x2e, 0xc2, 0x7f, 0xd8, 0xdd, 0xb0, 0x18, 0x25, 0xd1, 0x7f, 0xca, 0x40, 0x6d, 0xaa, 0x62, 0x24, 0xc7, 0x60, 0x6d, 0x2c, 0x91, 0x52, 0x82, 0x09, 0x6a, 0x78, 0x05, 0x5a, 0x49, 0x62, 0x15, 0x37, 0xb4, 0xf0, 0x25, 0xa6, 0xe5, 0xb2, 0x12, 0x9b, 0xc8, 0xc1, 0xa4, 0x07 } -, - /* Signature */ - 128, - { 0x6e, 0x7e, 0xaa, 0xd8, 0x04, 0x94, 0x5e, 0xb0, 0x46, 0x70, 0xdd, 0x86, 0x76, 0xb7, 0x05, 0x7d, 0x03, 0xac, 0x3e, 0x22, 0x64, 0x65, 0xb1, 0xfb, 0x84, 0x03, 0xe6, 0xae, 0x79, 0x83, 0xe0, 0xa4, 0x6a, 0x89, 0xa4, 0xeb, 0x32, 0xbd, 0xc8, 0xe7, 0xae, 0x5a, 0x53, 0xd4, 0x8a, 0xa6, 0x4b, 0xc9, 0xc3, 0xdb, 0xc8, 0xcf, 0x9c, 0xd6, 0xdc, 0x6a, 0x68, 0xfc, 0xea, 0xe9, 0xe2, 0x9f, 0x47, 0x45, 0xfa, 0x49, 0xe1, 0x8d, 0x18, 0x4d, 0xc5, 0xd2, 0x6c, 0x4f, 0xeb, 0x35, 0x1f, 0xb4, 0xb2, 0x28, 0xc4, 0xc1, 0x8c, 0xab, 0xdb, 0xde, 0x86, 0x01, 0x72, 0x4a, 0xe3, 0x80, 0x3d, 0xb3, 0x05, 0xf2, 0xa0, 0x76, 0xfa, 0x8a, 0x57, 0xf4, 0x61, 0x0b, 0x8a, 0x6e, 0x0e, 0xd4, 0x35, 0x75, 0xbe, 0x5d, 0x5b, 0xfc, 0x16, 0x30, 0x47, 0x9d, 0xf3, 0xbc, 0xbc, 0x51, 0x51, 0x77, 0xaf, 0xe4, 0x99, 0x4a } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.3", - /* Message to be signed */ - 65, - { 0x29, 0xb8, 0x5b, 0x14, 0xb2, 0xda, 0x94, 0x7a, 0x4c, 0x3a, 0xd1, 0xe5, 0x93, 0x7d, 0xa1, 0x92, 0xc6, 0x05, 0x08, 0x65, 0xaf, 0x95, 0x04, 0xa5, 0x44, 0x53, 0x70, 0xe4, 0x3d, 0x3a, 0x8d, 0xa5, 0xd3, 0x55, 0xfd, 0x58, 0x76, 0x6b, 0x25, 0x43, 0xac, 0x6f, 0x93, 0x10, 0x87, 0x83, 0xc1, 0x3f, 0xf2, 0x8b, 0x2b, 0xe5, 0x60, 0x83, 0xf0, 0x29, 0x82, 0x39, 0xe0, 0xee, 0x96, 0x81, 0xee, 0x47, 0xc6 } -, - /* Signature */ - 128, - { 0x80, 0xb3, 0x8c, 0xe7, 0x35, 0x12, 0x6c, 0x85, 0x45, 0xd9, 0x1d, 0x18, 0xec, 0x90, 0x37, 0x65, 0x4d, 0x46, 0xe4, 0xf3, 0xc5, 0x1a, 0x6b, 0x86, 0x18, 0xe1, 0x5f, 0x72, 0xcd, 0x20, 0x75, 0x00, 0xa4, 0x70, 0x01, 0x75, 0x77, 0xd0, 0xa8, 0xc5, 0x5a, 0x2b, 0xa3, 0x34, 0x38, 0x3f, 0x1f, 0x8d, 0x99, 0xfc, 0xe2, 0x46, 0x0b, 0x32, 0x97, 0xbc, 0x03, 0x7e, 0xf6, 0x4a, 0xc4, 0xa3, 0x09, 0x8c, 0x6a, 0xaa, 0x24, 0xa4, 0xd0, 0x14, 0x4a, 0xf1, 0x02, 0xd0, 0xdd, 0xa1, 0x7e, 0x07, 0xdc, 0x69, 0x59, 0x23, 0x93, 0x2e, 0x56, 0x8a, 0xda, 0x00, 0xdc, 0x4f, 0x7d, 0xbf, 0xbc, 0xde, 0xc4, 0x3c, 0xc9, 0x08, 0x38, 0x80, 0x17, 0xd2, 0xee, 0xf0, 0x4e, 0x60, 0xdf, 0xe4, 0xd5, 0x73, 0x40, 0xfa, 0xb9, 0x16, 0xe2, 0xb8, 0x11, 0x24, 0x4c, 0xb1, 0xe4, 0xa5, 0x52, 0x38, 0x6f, 0xe3, 0xed, 0x4c } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.4", - /* Message to be signed */ - 93, - { 0xd3, 0xb7, 0xaa, 0xd3, 0x7a, 0x48, 0x90, 0xe0, 0x36, 0x5b, 0x86, 0xc7, 0xda, 0x94, 0x91, 0xe7, 0x3c, 0xdf, 0x55, 0x5d, 0x1b, 0x02, 0xb4, 0x51, 0x81, 0x6d, 0xc5, 0x2f, 0x96, 0x30, 0xd5, 0x90, 0xde, 0x83, 0xa5, 0xc9, 0x39, 0x61, 0x01, 0x25, 0x22, 0xdf, 0xf6, 0xdb, 0xbb, 0x9c, 0xdb, 0x0e, 0x71, 0xae, 0x51, 0x40, 0x19, 0x64, 0xaf, 0x18, 0x90, 0xe8, 0x93, 0x25, 0xdb, 0xd6, 0x26, 0xf2, 0xda, 0x01, 0x34, 0x58, 0xe3, 0x9e, 0xec, 0xa5, 0x83, 0xe8, 0x9e, 0x4c, 0x08, 0xe5, 0xd4, 0x12, 0xbe, 0x49, 0x84, 0x95, 0x88, 0x6e, 0x05, 0x51, 0xcf, 0xe7, 0x42, 0xb8, 0xb5 } -, - /* Signature */ - 128, - { 0x9d, 0x8a, 0x88, 0x89, 0xa3, 0x11, 0xb4, 0x86, 0xcb, 0xe2, 0x22, 0x57, 0x03, 0xf5, 0xd4, 0xae, 0x2a, 0x54, 0xc2, 0xbc, 0xaa, 0xad, 0x06, 0xfe, 0x76, 0x48, 0xb9, 0xe2, 0xd8, 0x5e, 0xdd, 0xa1, 0xa0, 0x7d, 0x85, 0x6d, 0x6a, 0xe9, 0xbd, 0x5c, 0xc1, 0xe5, 0x15, 0x32, 0x66, 0xec, 0x7f, 0x1e, 0x1d, 0xf3, 0xd9, 0x29, 0xcc, 0x44, 0x70, 0x0f, 0xac, 0x92, 0x64, 0x58, 0x41, 0x4c, 0x28, 0x41, 0xda, 0x83, 0x32, 0x8e, 0x81, 0xe0, 0xb9, 0xd6, 0xc3, 0x88, 0x5e, 0x76, 0x73, 0x70, 0xad, 0x5c, 0xf1, 0xf5, 0x76, 0xd9, 0xdc, 0xe3, 0x48, 0xca, 0xec, 0x5e, 0x64, 0x43, 0xe0, 0xae, 0xb7, 0xc3, 0xf7, 0x2b, 0x7d, 0xd2, 0x53, 0x66, 0x70, 0x23, 0xb9, 0xa4, 0x77, 0xab, 0x34, 0xdf, 0x8f, 0x20, 0x67, 0xe2, 0x25, 0xad, 0xcb, 0x73, 0xee, 0x11, 0xe1, 0x59, 0xeb, 0x64, 0x91, 0x47, 0xd6, 0x02 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.5", - /* Message to be signed */ - 82, - { 0xf6, 0x58, 0x18, 0x8c, 0x8f, 0x9d, 0xe6, 0x0b, 0x5e, 0x99, 0xa2, 0x9f, 0x52, 0xd3, 0xb8, 0x89, 0x20, 0x1b, 0x30, 0xd4, 0x64, 0xc3, 0xb7, 0x27, 0x92, 0xa3, 0x02, 0x09, 0x5d, 0xc1, 0xe7, 0x7d, 0x45, 0xe9, 0x4f, 0x5d, 0xab, 0x73, 0xdb, 0xb3, 0x13, 0x54, 0x38, 0x57, 0xff, 0x91, 0xdb, 0xf4, 0x73, 0xdf, 0xc1, 0x45, 0xd7, 0x3b, 0xd5, 0x06, 0x20, 0x75, 0xd1, 0x92, 0xa3, 0xfb, 0xf4, 0xa1, 0x33, 0xe7, 0xe5, 0x68, 0xdf, 0x20, 0xb8, 0xcf, 0xf7, 0x7b, 0x3a, 0xf6, 0x87, 0xaa, 0x22, 0x55, 0x9e, 0xc1 } -, - /* Signature */ - 128, - { 0x0a, 0x95, 0xa4, 0x4f, 0x62, 0x74, 0xe7, 0x4c, 0xec, 0x45, 0x17, 0x96, 0xaf, 0x56, 0x88, 0xd4, 0xbe, 0x01, 0x08, 0x93, 0xfa, 0xae, 0x27, 0xd4, 0x90, 0xf4, 0x77, 0x1b, 0x00, 0x3f, 0x70, 0x46, 0xcc, 0xcd, 0x41, 0x9f, 0xc8, 0x19, 0xd7, 0x33, 0x19, 0x55, 0xf4, 0x1e, 0xac, 0x93, 0x39, 0xf5, 0x46, 0xc5, 0x84, 0xa8, 0xb4, 0x2a, 0x5a, 0xc6, 0x32, 0x90, 0x58, 0x3f, 0xf3, 0xeb, 0x6b, 0x29, 0xca, 0xdc, 0x75, 0x4a, 0xe5, 0x8d, 0x5a, 0x56, 0x37, 0xb6, 0x60, 0x97, 0x96, 0xe8, 0x05, 0x51, 0x73, 0xff, 0x20, 0xa9, 0xcc, 0xe4, 0x92, 0xfd, 0x78, 0x37, 0x46, 0x86, 0x15, 0xe8, 0x41, 0x08, 0x87, 0xf0, 0xb4, 0xa5, 0x9f, 0xf2, 0x52, 0xa8, 0x25, 0x97, 0x76, 0xc8, 0xff, 0xda, 0xa6, 0x7c, 0x87, 0xdf, 0xf8, 0x98, 0x3a, 0xe6, 0x79, 0xd1, 0xde, 0x22, 0xea, 0x15, 0x8d, 0x48, 0xf6, 0x8b } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.6", - /* Message to be signed */ - 128, - { 0x31, 0xae, 0x5f, 0x83, 0xa0, 0xfb, 0x3a, 0xc9, 0x25, 0x5f, 0xfa, 0x43, 0x5f, 0x70, 0xe2, 0xab, 0x65, 0x55, 0x66, 0xe5, 0xfb, 0x8b, 0x78, 0xb8, 0x02, 0xc1, 0x87, 0xcf, 0xf1, 0xc5, 0xe4, 0x0f, 0xed, 0x06, 0x97, 0x8c, 0x5d, 0x59, 0x76, 0xeb, 0x4c, 0xa7, 0x75, 0x80, 0x63, 0x99, 0xa6, 0xfc, 0x4d, 0xb5, 0x0c, 0x1f, 0x88, 0x66, 0x1b, 0xa6, 0x8a, 0xbc, 0x21, 0xfb, 0x2c, 0xcd, 0x53, 0x7f, 0x50, 0x18, 0xf3, 0x6e, 0xd1, 0xf7, 0xd4, 0x53, 0x83, 0xfd, 0x46, 0x9e, 0x77, 0xba, 0xb3, 0xe8, 0xa9, 0x5d, 0xfa, 0x1b, 0x94, 0x1e, 0x43, 0x0d, 0xde, 0xc5, 0x52, 0xdc, 0xd8, 0x2f, 0x5d, 0x10, 0xd2, 0x9c, 0xd1, 0x0a, 0x22, 0xd1, 0x7c, 0xe2, 0x42, 0x59, 0x28, 0xff, 0x5d, 0x07, 0x10, 0xdc, 0xe7, 0xd9, 0xf8, 0x3b, 0x12, 0xe0, 0x4c, 0x1a, 0x01, 0x59, 0xc2, 0x71, 0x76, 0xe0, 0x4a, 0xcc } -, - /* Signature */ - 128, - { 0x3f, 0x11, 0xea, 0x73, 0x9f, 0x32, 0x9c, 0x9d, 0x40, 0x04, 0x60, 0x34, 0xb6, 0xc0, 0xcf, 0xce, 0xb4, 0x9b, 0xc3, 0x20, 0x1a, 0x5f, 0x25, 0xea, 0xf5, 0x01, 0x5a, 0xed, 0xed, 0x02, 0x18, 0x9c, 0xe0, 0xb0, 0xcf, 0xde, 0x19, 0x12, 0x5b, 0xd2, 0x88, 0xb7, 0xd0, 0xc0, 0x62, 0x32, 0x1a, 0x5b, 0xdc, 0x2c, 0xfa, 0x42, 0x26, 0xf5, 0x10, 0x4a, 0x1f, 0xba, 0xeb, 0xbe, 0x7f, 0x72, 0xf5, 0xf7, 0x92, 0x7e, 0x1e, 0xae, 0x26, 0xfd, 0xc5, 0xba, 0x92, 0xf2, 0xd3, 0xf8, 0x69, 0xeb, 0xc3, 0x2d, 0x90, 0x18, 0xdd, 0x04, 0xed, 0xe8, 0x6d, 0xe5, 0xc4, 0x54, 0xf1, 0xf7, 0xa1, 0xb2, 0xe2, 0xd1, 0x94, 0x0a, 0xac, 0xae, 0x27, 0x79, 0x63, 0x55, 0xfe, 0x18, 0xac, 0x80, 0x97, 0x53, 0x53, 0x92, 0x9a, 0xc6, 0xa8, 0x38, 0x45, 0x8b, 0x5d, 0x9d, 0xc7, 0x57, 0x6e, 0x38, 0x87, 0xee, 0x7b, 0xca } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.7", - /* Message to be signed */ - 256, - { 0x96, 0xff, 0x99, 0xf1, 0x50, 0x60, 0xc9, 0x73, 0xa6, 0x5b, 0x69, 0xa8, 0xb5, 0xb6, 0x3a, 0xdb, 0x33, 0x25, 0x32, 0x0d, 0xa9, 0x37, 0x29, 0x75, 0x84, 0xad, 0x4f, 0xad, 0x5c, 0x3c, 0x74, 0x69, 0x01, 0x9e, 0x9c, 0xf7, 0x2a, 0xcb, 0x31, 0x5f, 0x1e, 0x49, 0x19, 0x27, 0xbb, 0xa1, 0x94, 0x87, 0x55, 0x82, 0x3e, 0xb0, 0x7e, 0x3f, 0x20, 0xac, 0xdf, 0x78, 0x65, 0x3c, 0xae, 0x45, 0x0e, 0x47, 0xbc, 0x54, 0xba, 0xf8, 0xca, 0x11, 0x67, 0xa5, 0x05, 0x08, 0x44, 0xe0, 0x22, 0x22, 0x0e, 0xe6, 0x65, 0x8a, 0x8d, 0xdd, 0x95, 0x63, 0x2e, 0x9a, 0xdc, 0x1a, 0x6c, 0x14, 0x37, 0x9c, 0x1c, 0x5a, 0xe5, 0xa0, 0xce, 0x5d, 0xc4, 0x02, 0x08, 0x09, 0x62, 0x2a, 0xfd, 0xec, 0xf8, 0x1f, 0x18, 0xa5, 0x1e, 0x28, 0x66, 0x6d, 0x02, 0xb1, 0xdc, 0xda, 0x0a, 0x27, 0xb8, 0xc3, 0xd2, 0xc2, 0x7b, 0x2c, 0x07, 0xb3, 0x80, 0x22, 0x00, 0x01, 0x7a, 0x7c, 0x12, 0x4a, 0x43, 0x37, 0xcc, 0x4b, 0x6e, 0xa2, 0xae, 0xa7, 0x5c, 0x68, 0xb4, 0x40, 0xe3, 0x79, 0x47, 0xe3, 0x61, 0x9b, 0xcf, 0xee, 0x05, 0x5b, 0xb2, 0xed, 0xab, 0xc4, 0x24, 0x49, 0x07, 0xe0, 0x48, 0x3d, 0xd3, 0xa1, 0x7d, 0x8e, 0xdf, 0xf3, 0xa6, 0x50, 0x29, 0x3f, 0xd4, 0xab, 0xf5, 0xc4, 0x5d, 0x1a, 0x5b, 0x6c, 0x54, 0x02, 0xba, 0x2b, 0x81, 0xb7, 0xb0, 0xe0, 0xc9, 0x5e, 0xe9, 0x49, 0xb2, 0xa2, 0x38, 0xc1, 0x99, 0x56, 0x20, 0x6c, 0x12, 0x4e, 0x0c, 0xd9, 0xc2, 0x46, 0x20, 0xb3, 0x6a, 0x83, 0xbf, 0x93, 0xb9, 0x6e, 0xf2, 0x04, 0xbd, 0xe5, 0x31, 0x6c, 0x1f, 0x53, 0x27, 0xc0, 0xa6, 0x21, 0xec, 0xce, 0x20, 0x93, 0xc0, 0x65, 0x2d, 0xdf, 0x32, 0x17, 0x68, 0xd7, 0x45, 0x02, 0xf1, 0x90, 0x85, 0x29, 0x62, 0x9b, 0xab, 0x68 } -, - /* Signature */ - 128, - { 0x18, 0x3f, 0x85, 0x3d, 0x0d, 0x03, 0x62, 0x18, 0x70, 0xe3, 0xba, 0x58, 0x68, 0x50, 0xc5, 0xea, 0x59, 0xfc, 0x4e, 0x9a, 0xcf, 0x37, 0x94, 0xb9, 0xad, 0x59, 0xa1, 0xbb, 0x80, 0x18, 0x1e, 0x77, 0xb1, 0x11, 0xd6, 0x64, 0x86, 0x47, 0xe1, 0x39, 0xa3, 0x9e, 0xc0, 0x4f, 0x86, 0x18, 0x74, 0x91, 0xe7, 0x7b, 0x4d, 0x75, 0xc0, 0x60, 0x79, 0x5b, 0xf7, 0x27, 0x08, 0x46, 0xd3, 0x96, 0xe0, 0xbf, 0xea, 0x83, 0x15, 0x79, 0x5e, 0x79, 0xd7, 0x6a, 0x91, 0x9e, 0xa7, 0x6b, 0x06, 0xee, 0xc1, 0x3b, 0xaf, 0x4c, 0xe8, 0xaf, 0xe1, 0xe3, 0x4b, 0xc2, 0x24, 0x57, 0xd7, 0xb7, 0x99, 0x2e, 0x08, 0x42, 0xef, 0xad, 0xe1, 0x79, 0xb0, 0xae, 0xda, 0xcc, 0xfb, 0xe2, 0xd2, 0x3d, 0x3e, 0xb3, 0x14, 0xe1, 0xde, 0x91, 0xc8, 0x71, 0xb9, 0xdb, 0x5a, 0xbf, 0xfb, 0x17, 0x47, 0x7f, 0xba, 0x23, 0x3a, 0x06 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.8", - /* Message to be signed */ - 179, - { 0x3a, 0x17, 0x6c, 0x79, 0x3a, 0x54, 0x6e, 0x2d, 0x27, 0x6f, 0xb8, 0xff, 0xc3, 0x28, 0x16, 0x3b, 0x49, 0x49, 0x97, 0xa5, 0x30, 0x2a, 0xae, 0x2e, 0x50, 0x45, 0xa2, 0xa2, 0x06, 0x87, 0xea, 0x6d, 0x1f, 0x18, 0x1c, 0x6a, 0xbf, 0xe6, 0x09, 0x0c, 0x8d, 0xc4, 0x02, 0x56, 0xdb, 0x3d, 0xe0, 0x83, 0x22, 0x64, 0x7f, 0xb7, 0x95, 0xbb, 0xa1, 0x71, 0x3f, 0xb5, 0x7e, 0x33, 0xd5, 0x3e, 0x0e, 0x13, 0xbe, 0xda, 0xc6, 0xa6, 0x58, 0xad, 0x4a, 0xb4, 0x91, 0x22, 0x38, 0x81, 0x19, 0x8d, 0xf2, 0x93, 0x67, 0xfa, 0xad, 0xe8, 0xbe, 0x9f, 0xca, 0xa4, 0xe4, 0x83, 0xf7, 0xb7, 0xf3, 0xdc, 0x7c, 0xbb, 0xf9, 0x7a, 0x17, 0xaa, 0xd8, 0x8c, 0x26, 0xcf, 0xc6, 0x41, 0x0f, 0x94, 0x5b, 0x54, 0xfc, 0x53, 0xdb, 0x55, 0xac, 0x80, 0x3d, 0x8b, 0x73, 0x69, 0x1b, 0x14, 0x84, 0x84, 0x7d, 0x7f, 0x3b, 0x7e, 0x93, 0x94, 0xe5, 0x5f, 0x0a, 0x51, 0xfe, 0x61, 0xae, 0x84, 0x52, 0x3c, 0x94, 0xb2, 0x2e, 0x82, 0x39, 0x6d, 0xb6, 0xcf, 0xac, 0xb7, 0x2e, 0x0e, 0xe4, 0x94, 0xaa, 0x0f, 0x1f, 0xa5, 0x93, 0x12, 0x54, 0x43, 0xae, 0x15, 0x55, 0xa6, 0xa9, 0x33, 0xfa, 0xce, 0x00, 0x74, 0x79, 0x1d, 0xc2, 0xc2, 0x92, 0x42, 0xeb } -, - /* Signature */ - 128, - { 0x41, 0x3c, 0x92, 0x23, 0xa2, 0xe9, 0xb1, 0x22, 0xcd, 0x87, 0x25, 0x77, 0xe5, 0x2f, 0x31, 0x3d, 0x41, 0xda, 0xc7, 0x9a, 0x26, 0xcb, 0x10, 0x33, 0xda, 0x0b, 0x6f, 0xcc, 0x4b, 0x48, 0x21, 0x07, 0x74, 0x4b, 0xf4, 0x90, 0xfa, 0x79, 0x8d, 0xcc, 0xd0, 0xcb, 0xd1, 0x18, 0xef, 0x39, 0xc0, 0xf5, 0x59, 0xd8, 0x7b, 0x89, 0x33, 0x5d, 0xb0, 0x9b, 0xe7, 0x70, 0x0f, 0xb0, 0x9f, 0xdb, 0xd3, 0x40, 0x40, 0xa0, 0x0b, 0xe5, 0xca, 0x42, 0x88, 0x34, 0x77, 0xb0, 0x6e, 0x4e, 0x10, 0xa7, 0xcb, 0x11, 0x76, 0x8f, 0xcb, 0x02, 0xc3, 0x4f, 0xb1, 0x06, 0xe5, 0x22, 0x86, 0x0d, 0x10, 0x69, 0x39, 0x06, 0x26, 0x0f, 0x43, 0xd9, 0x06, 0x12, 0x99, 0x03, 0x93, 0xa8, 0xff, 0xac, 0x9f, 0xd7, 0x0c, 0xa3, 0x78, 0x29, 0x11, 0x1e, 0xeb, 0xa6, 0xf3, 0xde, 0xe5, 0x4e, 0xf1, 0xc1, 0x62, 0x68, 0xb3, 0x3e } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.9", - /* Message to be signed */ - 197, - { 0x06, 0x8a, 0x99, 0x1b, 0x32, 0xb6, 0x76, 0xc6, 0x4b, 0x89, 0x8c, 0x67, 0xe1, 0x13, 0x72, 0x82, 0xb4, 0x37, 0x11, 0xb0, 0xd0, 0x67, 0x1c, 0x24, 0x7d, 0x9f, 0x7c, 0x48, 0xf5, 0x04, 0x3e, 0x4f, 0xc2, 0x06, 0xdc, 0x65, 0xaf, 0x89, 0x06, 0xf2, 0x52, 0xf0, 0x24, 0x52, 0x05, 0xea, 0x08, 0x43, 0x23, 0xd4, 0x27, 0x6b, 0xe5, 0xaa, 0x0f, 0xc5, 0xaf, 0x9c, 0x3f, 0x34, 0xb2, 0xfd, 0x66, 0x34, 0xdf, 0x57, 0x2f, 0xc3, 0x13, 0xd2, 0x73, 0xb5, 0x3e, 0x9e, 0x36, 0xb9, 0x46, 0xe7, 0xe6, 0x72, 0xf9, 0x8d, 0x85, 0x7d, 0x7e, 0xdd, 0xd3, 0xdd, 0x04, 0x39, 0x31, 0x32, 0xf4, 0x61, 0xf2, 0x2c, 0x99, 0x00, 0x26, 0x16, 0x6f, 0x38, 0x5b, 0xe1, 0x59, 0x5c, 0x7f, 0x23, 0xf8, 0x9f, 0xf5, 0x7e, 0x05, 0xa7, 0xbe, 0x28, 0x5d, 0x10, 0x56, 0x15, 0x48, 0x5f, 0x35, 0x6a, 0xba, 0xb1, 0xff, 0x2a, 0xb9, 0x27, 0xd6, 0x09, 0x95, 0x2a, 0x62, 0x7e, 0x46, 0x8c, 0xa7, 0x59, 0x0a, 0xcb, 0x52, 0x13, 0xf4, 0x31, 0x39, 0xf8, 0xe2, 0xc9, 0xd4, 0xd1, 0x7c, 0x6b, 0xd7, 0x91, 0x4e, 0x53, 0xf0, 0x2f, 0xd1, 0x9a, 0x13, 0x1f, 0xf4, 0x9c, 0xd2, 0x5e, 0xde, 0x8f, 0x41, 0x8a, 0x88, 0x53, 0x0a, 0x82, 0x39, 0x88, 0x7f, 0x0f, 0xc7, 0x97, 0xed, 0xb5, 0x04, 0x64, 0x79, 0x64, 0xbf, 0x31, 0xca, 0xaf, 0x08, 0x0d, 0x58, 0x17, 0xa0 } -, - /* Signature */ - 128, - { 0x57, 0x5d, 0xa9, 0xe9, 0xbe, 0xfc, 0xa1, 0x82, 0x95, 0x46, 0xe8, 0x29, 0x38, 0x15, 0x00, 0x11, 0x32, 0x03, 0x0e, 0x74, 0x9c, 0xa5, 0x10, 0x88, 0xf1, 0x68, 0xbd, 0x15, 0x0b, 0x13, 0x94, 0xc7, 0xac, 0xd5, 0x97, 0x8b, 0xca, 0x03, 0xf7, 0xb9, 0xd9, 0x2a, 0x29, 0xb8, 0xe2, 0x85, 0x6b, 0x0d, 0xa0, 0x7f, 0x0b, 0xb1, 0x5c, 0x0b, 0x33, 0xe0, 0x54, 0x87, 0x99, 0x1a, 0xd9, 0x7a, 0x81, 0x2d, 0xc9, 0x04, 0xaa, 0xf0, 0xfd, 0x1e, 0x38, 0x7e, 0xf1, 0xc2, 0x70, 0xc6, 0x86, 0x8d, 0x3e, 0xe1, 0xc6, 0x11, 0x57, 0x7b, 0xc4, 0xd0, 0x7f, 0xf4, 0x56, 0xb2, 0x43, 0x98, 0x32, 0x90, 0x8a, 0x3d, 0xcc, 0x4f, 0xc0, 0x99, 0x04, 0x72, 0xfd, 0xa3, 0xcc, 0x61, 0x11, 0x93, 0x0b, 0x99, 0x79, 0x5d, 0x60, 0xc0, 0xe3, 0x78, 0x88, 0xe8, 0x7c, 0xe0, 0x0b, 0xbf, 0x3c, 0x1c, 0xf3, 0x07, 0xf9, 0xe1 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.10", - /* Message to be signed */ - 88, - { 0xd6, 0x83, 0x9e, 0xe6, 0xd0, 0x74, 0x50, 0x32, 0x7e, 0x09, 0xa0, 0x3e, 0x1e, 0xc2, 0x80, 0xe1, 0xc8, 0xd1, 0x15, 0x00, 0xdc, 0x39, 0x0a, 0x49, 0xa9, 0xc9, 0x82, 0x87, 0x49, 0xc3, 0xe9, 0xa4, 0xbe, 0xe2, 0xba, 0x57, 0x6f, 0x6d, 0x12, 0x17, 0xa8, 0xe7, 0x85, 0x4a, 0x90, 0x7e, 0xeb, 0x93, 0xdf, 0xff, 0x92, 0x30, 0x8a, 0xd0, 0xd9, 0x4e, 0x2b, 0x38, 0x1f, 0x92, 0xb0, 0xe8, 0x4a, 0x47, 0x1b, 0xf1, 0xf3, 0x7a, 0x68, 0xe9, 0x65, 0xf6, 0x58, 0x59, 0xd1, 0xfd, 0xfd, 0x6f, 0xea, 0x84, 0x40, 0x79, 0xc4, 0x03, 0x70, 0xdc, 0xea, 0xe2 } -, - /* Signature */ - 128, - { 0xa7, 0xc5, 0xf6, 0xd0, 0xde, 0x9c, 0xf8, 0xf4, 0x17, 0x37, 0xf2, 0x3a, 0xe3, 0xe8, 0xcf, 0x60, 0x9a, 0xeb, 0xcf, 0x22, 0xd5, 0xde, 0x12, 0x13, 0xd9, 0x57, 0x3c, 0xb9, 0x44, 0x03, 0xf8, 0x9c, 0x0f, 0x70, 0x88, 0xff, 0xfc, 0x61, 0x10, 0x6f, 0xa6, 0x09, 0xc7, 0x37, 0x1a, 0x8d, 0x7e, 0x1b, 0xcd, 0x22, 0x1b, 0xc1, 0xad, 0x94, 0x91, 0x2f, 0xab, 0xf2, 0xff, 0xc0, 0x2f, 0x84, 0x84, 0x56, 0x4c, 0x22, 0x5c, 0x06, 0x9b, 0xfc, 0x6d, 0xa9, 0xf3, 0xf9, 0xf4, 0x97, 0x4e, 0x08, 0xe1, 0xfe, 0x56, 0xf7, 0x48, 0xff, 0x79, 0x05, 0x97, 0x90, 0x6a, 0x95, 0x4e, 0x38, 0x37, 0x43, 0xa3, 0x7e, 0x57, 0x5f, 0xef, 0x07, 0x4f, 0x06, 0x0f, 0x3d, 0xd1, 0x5b, 0x5e, 0xe0, 0xf9, 0x4d, 0xba, 0x69, 0xd8, 0x6c, 0x99, 0x22, 0x3f, 0xa9, 0xc3, 0xa6, 0x1a, 0x8c, 0xb2, 0xaf, 0x2f, 0xab, 0x1e, 0x04 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.11", - /* Message to be signed */ - 33, - { 0x33, 0x84, 0x9c, 0x67, 0xdf, 0x9a, 0x6f, 0xfa, 0xc3, 0xda, 0x90, 0xa8, 0xcd, 0x31, 0x73, 0x1a, 0x02, 0x97, 0xb9, 0xd6, 0x01, 0x0a, 0x03, 0x32, 0x0f, 0x88, 0x45, 0x03, 0x5f, 0xc3, 0x43, 0x09, 0xad } -, - /* Signature */ - 128, - { 0x1b, 0x87, 0x05, 0x1f, 0x15, 0x91, 0xc8, 0xae, 0x7e, 0xe3, 0xcb, 0x24, 0x26, 0x70, 0x39, 0xa7, 0x28, 0x40, 0x5d, 0xbf, 0x23, 0x1c, 0xaf, 0x21, 0xf3, 0x24, 0x7f, 0x05, 0x85, 0x8b, 0x2a, 0x51, 0x65, 0x0b, 0x81, 0xbc, 0x53, 0x77, 0x86, 0x5e, 0x4c, 0x1e, 0x8f, 0xd0, 0x36, 0x41, 0x52, 0xa1, 0x6b, 0xc5, 0x8f, 0x7d, 0x2a, 0xc0, 0x1c, 0xa6, 0x79, 0xcc, 0x49, 0xdd, 0x04, 0x89, 0x03, 0xd5, 0x5a, 0xd0, 0x5f, 0x10, 0x2c, 0x74, 0xb3, 0x60, 0x1f, 0x25, 0xad, 0x30, 0x62, 0x40, 0x25, 0xc3, 0x0b, 0x6f, 0x0f, 0x79, 0x11, 0xfc, 0x22, 0x45, 0x8e, 0x5d, 0x43, 0x5f, 0x38, 0x8e, 0x3f, 0xbc, 0x49, 0x5f, 0xa0, 0xc6, 0x10, 0xc1, 0x29, 0x8f, 0x82, 0x1d, 0xa5, 0x38, 0x40, 0x3a, 0x93, 0x36, 0x4d, 0x2e, 0xab, 0xf1, 0xe3, 0xb3, 0x2f, 0x81, 0x10, 0xa7, 0xe0, 0x3e, 0x37, 0x2e, 0xcb, 0xc5 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.12", - /* Message to be signed */ - 77, - { 0xb3, 0xda, 0xba, 0xca, 0x20, 0x59, 0xa7, 0x0e, 0x25, 0xcb, 0xdd, 0xf4, 0xaa, 0x59, 0x25, 0x99, 0x57, 0x54, 0xac, 0xe4, 0x3c, 0x5d, 0x60, 0x36, 0x40, 0x48, 0x9a, 0xf4, 0x8f, 0xea, 0x6e, 0xdc, 0x4e, 0x19, 0xcb, 0xee, 0xa2, 0xc0, 0xdb, 0x62, 0xae, 0x0a, 0x10, 0x4c, 0x72, 0xe4, 0xcd, 0x56, 0xcb, 0x53, 0x2f, 0x4f, 0xe5, 0x77, 0xb3, 0x6a, 0x81, 0x98, 0xb4, 0x87, 0x9d, 0x7f, 0xf8, 0x04, 0x26, 0x90, 0xf6, 0x62, 0x77, 0x3f, 0x3d, 0x63, 0x93, 0xf2, 0x58, 0x98, 0xd2 } -, - /* Signature */ - 128, - { 0x26, 0xf1, 0x37, 0x70, 0x26, 0x3f, 0xc5, 0xbd, 0xbe, 0xad, 0xf8, 0x8f, 0xb4, 0xdd, 0x30, 0x7a, 0x38, 0x95, 0x9b, 0x16, 0xf3, 0xdf, 0x94, 0x6a, 0xde, 0x86, 0x4b, 0x1e, 0x7e, 0x91, 0x4d, 0x36, 0x4e, 0xbf, 0x9a, 0xdf, 0xd8, 0x6a, 0x70, 0x02, 0x2d, 0xc6, 0x1b, 0x43, 0xfb, 0x1f, 0xdf, 0x86, 0x96, 0x97, 0x8e, 0x2d, 0x1f, 0x6a, 0x2d, 0xef, 0xee, 0x75, 0xad, 0xaa, 0x69, 0xa3, 0x95, 0x32, 0x07, 0x40, 0x50, 0xbe, 0x70, 0x8e, 0xaf, 0x03, 0x1d, 0x5f, 0xae, 0x0f, 0xfe, 0x24, 0x5b, 0xa4, 0xff, 0x3c, 0x5e, 0x34, 0x0a, 0xf5, 0xdf, 0xec, 0x6a, 0x4c, 0xce, 0x0e, 0x18, 0x87, 0x6c, 0xfc, 0x13, 0x66, 0xee, 0xed, 0xdf, 0xce, 0x0f, 0x83, 0x5b, 0x38, 0xe8, 0x18, 0x81, 0xb1, 0xfc, 0x58, 0x32, 0x93, 0x0f, 0xc7, 0x9b, 0x08, 0xf1, 0xfb, 0x34, 0xfb, 0x22, 0x42, 0x33, 0xf4, 0xc4, 0x68 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.13", - /* Message to be signed */ - 94, - { 0x09, 0x91, 0x12, 0xfa, 0xe7, 0x40, 0x88, 0x8c, 0xea, 0xac, 0x70, 0x54, 0xd5, 0x97, 0x35, 0x1d, 0x79, 0xe1, 0x59, 0xa9, 0x58, 0xd8, 0x12, 0x15, 0x78, 0xe5, 0x2c, 0x83, 0x7d, 0xb3, 0x54, 0x3c, 0xfa, 0x6f, 0x8e, 0x7f, 0x1d, 0xbd, 0x2a, 0x61, 0x97, 0x86, 0x45, 0xa4, 0xd3, 0x85, 0xb9, 0xbb, 0x1c, 0x60, 0xbf, 0xb1, 0x1b, 0xb3, 0xc8, 0x75, 0x2a, 0xe3, 0x1f, 0x99, 0x6d, 0xbb, 0x52, 0x62, 0x8f, 0x93, 0xd5, 0x26, 0x94, 0xf1, 0x82, 0xe6, 0x90, 0x35, 0xa5, 0xe5, 0x57, 0xec, 0x71, 0x82, 0x62, 0xf4, 0x03, 0xdf, 0x52, 0x11, 0xf7, 0x3c, 0x6d, 0xe0, 0xd5, 0x5a, 0x0b, 0xa7 } -, - /* Signature */ - 128, - { 0x8d, 0x8c, 0x8f, 0x3a, 0x86, 0xf4, 0x9e, 0xdb, 0xd1, 0x25, 0xc8, 0x3e, 0xbf, 0x6d, 0x52, 0xe7, 0x65, 0x16, 0x15, 0x01, 0x48, 0x21, 0x54, 0x59, 0x8c, 0x28, 0x3a, 0xbe, 0x94, 0x02, 0x77, 0x87, 0x2b, 0x00, 0xd0, 0x77, 0x7c, 0x2e, 0x69, 0x7b, 0x78, 0x83, 0xcc, 0x32, 0x1e, 0x15, 0x1c, 0x80, 0x11, 0x6f, 0x9f, 0xcd, 0x17, 0x7a, 0xc4, 0xc7, 0xde, 0xdd, 0xf0, 0x3c, 0xa1, 0xb2, 0xc5, 0x93, 0x31, 0xdc, 0x1c, 0x8e, 0x94, 0x7f, 0x1e, 0xb2, 0xaa, 0xee, 0x8c, 0xc9, 0x41, 0xdd, 0xc5, 0xf3, 0x74, 0xa6, 0x3d, 0x6c, 0x99, 0x38, 0xec, 0xd8, 0xe8, 0x8c, 0xbc, 0xec, 0x58, 0x92, 0x9c, 0xff, 0xdd, 0xef, 0x0b, 0xa2, 0x17, 0x58, 0x85, 0xa8, 0x0d, 0xc4, 0xcd, 0x92, 0xd6, 0xb7, 0x9d, 0x9c, 0x6a, 0x81, 0x69, 0x6e, 0x16, 0xf9, 0xa8, 0x3a, 0x10, 0xca, 0x8e, 0xfa, 0xf1, 0x97, 0x5f, 0x55 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.14", - /* Message to be signed */ - 194, - { 0xaa, 0x17, 0xe6, 0xbb, 0xd6, 0xdb, 0x19, 0xe5, 0x4b, 0xee, 0x1a, 0x7f, 0x0e, 0xdc, 0xca, 0xce, 0xab, 0x63, 0x5d, 0x76, 0x28, 0xfc, 0xaa, 0x18, 0xec, 0xfa, 0xfc, 0x40, 0x1c, 0xb3, 0xfe, 0xb5, 0x1f, 0x9a, 0x37, 0x31, 0xf3, 0x80, 0x2c, 0xbe, 0xa8, 0x1c, 0x73, 0x30, 0x28, 0xc9, 0x58, 0x4b, 0x6b, 0x78, 0xe2, 0x05, 0x59, 0x54, 0xcf, 0x91, 0x04, 0xda, 0xa6, 0x77, 0xaa, 0x40, 0xbe, 0x9b, 0x7c, 0x65, 0xb0, 0x7a, 0xc4, 0xa8, 0xbf, 0x25, 0xc1, 0x14, 0x9e, 0x05, 0x47, 0x35, 0xcf, 0x3c, 0xe3, 0x32, 0xd4, 0x29, 0xbc, 0x73, 0x80, 0x24, 0x45, 0xdf, 0xb3, 0x68, 0x8b, 0xb8, 0x19, 0x48, 0xb5, 0x7e, 0x27, 0x6a, 0xf3, 0x24, 0x62, 0xf7, 0xad, 0x80, 0x4d, 0x50, 0xc9, 0x3b, 0xc7, 0xe9, 0xef, 0x75, 0x37, 0x69, 0x5a, 0x27, 0x1a, 0xf7, 0x2e, 0x4b, 0xd4, 0x7c, 0xe5, 0xfa, 0x9d, 0x62, 0xf2, 0xda, 0xc0, 0x33, 0x36, 0x23, 0xf4, 0x9e, 0xb9, 0xd6, 0xd7, 0x80, 0x34, 0xed, 0x1d, 0xf6, 0xe1, 0x2b, 0xfd, 0x04, 0x26, 0x1b, 0xbe, 0x5c, 0xe0, 0x40, 0xe0, 0x3e, 0xbe, 0x25, 0x8d, 0x2d, 0x05, 0x2a, 0x12, 0xad, 0x4e, 0x3b, 0xf2, 0x53, 0x04, 0x23, 0x01, 0xc7, 0x64, 0x58, 0xed, 0x91, 0x0c, 0x5f, 0xfa, 0x70, 0x5c, 0x74, 0x7a, 0xd8, 0xca, 0x0c, 0x1c, 0x62, 0x28, 0xda, 0x2c, 0x97, 0xe1, 0x38 } -, - /* Signature */ - 128, - { 0x64, 0x4e, 0xa0, 0x76, 0x21, 0x4d, 0xbd, 0xdd, 0x30, 0x05, 0x5d, 0x7c, 0x56, 0x18, 0x92, 0x27, 0x9b, 0x46, 0xba, 0xb1, 0xe1, 0x22, 0x53, 0x42, 0x4c, 0x28, 0xf4, 0x49, 0xe1, 0x72, 0x64, 0x6a, 0xf3, 0x49, 0x8c, 0x7a, 0xfc, 0xbf, 0xf7, 0x68, 0xe0, 0x46, 0xa7, 0xc2, 0xe3, 0xd9, 0xc0, 0xe7, 0x12, 0x8f, 0x87, 0x7b, 0x92, 0x19, 0x5a, 0xa2, 0xbb, 0x9f, 0x1c, 0xfb, 0xdf, 0xd1, 0x5b, 0xb6, 0x5f, 0xbd, 0x23, 0xef, 0xb2, 0x94, 0xfb, 0xb1, 0x1a, 0x3c, 0x66, 0x05, 0x6d, 0x60, 0x63, 0x85, 0x3b, 0xb2, 0x3c, 0x27, 0x46, 0x65, 0xa1, 0x3e, 0xf4, 0xf3, 0xc1, 0x2f, 0x59, 0x21, 0xa4, 0x19, 0xe9, 0x49, 0xb3, 0x0c, 0x0b, 0xc0, 0xd7, 0x7d, 0x6b, 0x28, 0x69, 0x1d, 0x23, 0x64, 0xd9, 0x5b, 0xf6, 0x8b, 0xe8, 0xd5, 0x97, 0x8e, 0xf1, 0xbc, 0x98, 0x52, 0xa4, 0xf0, 0x66, 0x04, 0x47, 0x4a } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.15", - /* Message to be signed */ - 141, - { 0x28, 0x24, 0x9c, 0x38, 0x7a, 0x06, 0x14, 0x40, 0xe9, 0x86, 0x38, 0xe1, 0xed, 0x78, 0xa4, 0x86, 0x51, 0x30, 0xe5, 0x75, 0x33, 0xd7, 0x89, 0x10, 0x8c, 0x63, 0xe1, 0x5f, 0xd8, 0x01, 0x9b, 0xad, 0x2c, 0xd1, 0xa7, 0x55, 0x2b, 0xd8, 0xaf, 0xd2, 0x06, 0xd9, 0x78, 0xeb, 0x1f, 0x2c, 0xf3, 0xf2, 0x3a, 0xfc, 0x4b, 0x34, 0xe6, 0xdd, 0x7f, 0x69, 0xc1, 0xfd, 0xf4, 0xfe, 0xc2, 0x52, 0x68, 0xd1, 0x86, 0x55, 0x51, 0x94, 0x49, 0x22, 0x90, 0x6d, 0xce, 0x6d, 0xc4, 0x41, 0xf9, 0x4a, 0x46, 0x6b, 0xf8, 0x39, 0x1a, 0xd8, 0x2b, 0xf5, 0x94, 0x0e, 0x44, 0x71, 0x10, 0xf1, 0xd1, 0x5d, 0xe1, 0x29, 0x31, 0x29, 0xfb, 0x44, 0x24, 0xa1, 0x71, 0x75, 0x19, 0xd6, 0xd4, 0x28, 0xd6, 0x6b, 0x7a, 0x10, 0x91, 0x42, 0xac, 0xc9, 0x15, 0xf1, 0xea, 0xc9, 0x6d, 0xef, 0x2c, 0x32, 0x90, 0xb0, 0x1d, 0x05, 0x99, 0x0b, 0xf8, 0x02, 0x3a, 0x6a, 0x64, 0x71, 0x2f, 0x63, 0x13, 0x7a, 0x8e } -, - /* Signature */ - 128, - { 0x57, 0x02, 0x06, 0x06, 0x69, 0xed, 0x47, 0xbb, 0xca, 0x11, 0xb9, 0x16, 0x68, 0x28, 0x9e, 0xa3, 0xf5, 0xe7, 0x46, 0xad, 0x2e, 0x38, 0x6d, 0xd1, 0xbc, 0x2a, 0x8b, 0xab, 0x17, 0x46, 0xba, 0x2a, 0x64, 0xbf, 0x15, 0xb3, 0xfc, 0x2e, 0xc8, 0xb0, 0xcc, 0x99, 0xd8, 0x54, 0xfa, 0x32, 0x11, 0xc9, 0x55, 0xc4, 0x55, 0xd7, 0xff, 0x2e, 0x1e, 0xe2, 0x39, 0xf5, 0x4f, 0x38, 0x6a, 0x42, 0xbb, 0x25, 0x40, 0xa8, 0x75, 0x8f, 0x32, 0x97, 0xe5, 0x52, 0xde, 0x1e, 0xbe, 0x8e, 0xac, 0x70, 0xf3, 0x54, 0x87, 0x94, 0x2b, 0xba, 0xda, 0xd5, 0xbd, 0x95, 0x73, 0x90, 0xff, 0x17, 0x93, 0xaf, 0x3d, 0x30, 0xd9, 0x36, 0xb6, 0xf7, 0x9b, 0x44, 0xa9, 0xb6, 0x3c, 0xee, 0x62, 0xd5, 0x58, 0x4d, 0xa3, 0xa1, 0xfc, 0xff, 0xa5, 0xb6, 0xfe, 0xee, 0xc1, 0x1c, 0xd6, 0x3b, 0x18, 0x0f, 0x0b, 0xfc, 0x5b, 0x6b } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.16", - /* Message to be signed */ - 135, - { 0xe4, 0x91, 0xa1, 0x56, 0xfd, 0xba, 0x31, 0x6a, 0x2a, 0x20, 0xa1, 0x2e, 0xea, 0x50, 0xbe, 0x77, 0x4e, 0xc9, 0xaa, 0xbe, 0xb1, 0xc3, 0x98, 0xe9, 0x08, 0xbe, 0xa3, 0x29, 0x68, 0x21, 0x7e, 0xa4, 0x1e, 0x96, 0x6d, 0xb7, 0x27, 0x2f, 0x0e, 0xfa, 0x37, 0xc9, 0x0a, 0xe4, 0xe9, 0xf3, 0x86, 0x21, 0xa6, 0x27, 0xa9, 0xd1, 0x2c, 0x8b, 0x4e, 0x80, 0x60, 0xc5, 0x45, 0xc5, 0x60, 0x59, 0xe9, 0xe4, 0x8a, 0x7f, 0x16, 0x81, 0x36, 0x72, 0x47, 0x33, 0x58, 0x19, 0xba, 0x12, 0x7e, 0x65, 0x93, 0x1e, 0x1d, 0x9f, 0xb7, 0x0d, 0xfd, 0xdf, 0x4c, 0x99, 0x56, 0xa5, 0xb0, 0x4c, 0x52, 0xbc, 0xf8, 0xcb, 0xdf, 0xcd, 0xf2, 0x29, 0x19, 0x64, 0xda, 0xfa, 0xca, 0x7e, 0xe7, 0x0e, 0x80, 0xa2, 0x75, 0x9c, 0xec, 0x73, 0x5d, 0x01, 0xac, 0xa8, 0xff, 0x89, 0x4b, 0x68, 0x9b, 0x93, 0x78, 0x3d, 0xa8, 0x93, 0x9c, 0x62, 0x09, 0xdd, 0x68, 0x3c, 0x60 } -, - /* Signature */ - 128, - { 0x9f, 0x20, 0x5b, 0xa9, 0x0d, 0xf2, 0xd4, 0x01, 0x49, 0x26, 0x48, 0x1f, 0x9b, 0x3f, 0x45, 0xa8, 0x9d, 0x23, 0xec, 0xd8, 0x4f, 0x5f, 0x16, 0xe6, 0x73, 0x34, 0xc4, 0xca, 0xf3, 0xf3, 0xb9, 0xc2, 0x01, 0xa7, 0x98, 0xd4, 0xee, 0xc5, 0x62, 0x76, 0x59, 0x88, 0x23, 0x18, 0x0e, 0x07, 0x8d, 0x0a, 0xef, 0x4f, 0x8f, 0xba, 0x0b, 0x25, 0xc1, 0xfd, 0xa3, 0xe3, 0x36, 0x54, 0xc4, 0x74, 0xa9, 0xc1, 0x1a, 0x23, 0xb0, 0x87, 0x10, 0x91, 0x3d, 0xff, 0x76, 0x56, 0xf0, 0xe7, 0xee, 0x22, 0xcc, 0x44, 0xc9, 0x99, 0xc0, 0x95, 0xa6, 0x51, 0x4a, 0x9d, 0x2f, 0xc0, 0xca, 0x4e, 0xf2, 0x08, 0xde, 0x0d, 0x92, 0x93, 0xb0, 0xc5, 0x60, 0x8b, 0xae, 0xd1, 0x07, 0x4a, 0x0c, 0xfd, 0x57, 0xb9, 0x9e, 0xf8, 0xce, 0xab, 0xfd, 0x34, 0x72, 0xb7, 0xdb, 0x3a, 0xb9, 0x60, 0x6d, 0x13, 0xf9, 0xbb, 0x43, 0x9a } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.17", - /* Message to be signed */ - 62, - { 0x06, 0xad, 0xd7, 0x5a, 0xb6, 0x89, 0xde, 0x06, 0x77, 0x44, 0xe6, 0x9a, 0x2e, 0xbd, 0x4b, 0x90, 0xfa, 0x93, 0x83, 0x00, 0x3c, 0xd0, 0x5f, 0xf5, 0x36, 0xcb, 0xf2, 0x94, 0xcd, 0x21, 0x5f, 0x09, 0x23, 0xb7, 0xfc, 0x90, 0x04, 0xf0, 0xaa, 0x18, 0x52, 0x71, 0xa1, 0xd0, 0x06, 0x1f, 0xd0, 0xe9, 0x77, 0x7a, 0xd1, 0xec, 0x0c, 0x71, 0x59, 0x1f, 0x57, 0x8b, 0xf7, 0xb8, 0xe5, 0xa1 } -, - /* Signature */ - 128, - { 0x45, 0x14, 0x21, 0x0e, 0x54, 0x1d, 0x5b, 0xad, 0x7d, 0xd6, 0x0a, 0xe5, 0x49, 0xb9, 0x43, 0xac, 0xc4, 0x4f, 0x21, 0x39, 0x0d, 0xf5, 0xb6, 0x13, 0x18, 0x45, 0x5a, 0x17, 0x61, 0x0d, 0xf5, 0xb7, 0x4d, 0x84, 0xae, 0xd2, 0x32, 0xf1, 0x7e, 0x59, 0xd9, 0x1d, 0xd2, 0x65, 0x99, 0x22, 0xf8, 0x12, 0xdb, 0xd4, 0x96, 0x81, 0x69, 0x03, 0x84, 0xb9, 0x54, 0xe9, 0xad, 0xfb, 0x9b, 0x1a, 0x96, 0x8c, 0x0c, 0xbf, 0xf7, 0x63, 0xec, 0xee, 0xd6, 0x27, 0x50, 0xc5, 0x91, 0x64, 0xb5, 0xe0, 0x80, 0xa8, 0xfe, 0xf3, 0xd5, 0x5b, 0xfe, 0x2a, 0xcf, 0xad, 0x27, 0x52, 0xa6, 0xa8, 0x45, 0x9f, 0xa1, 0xfa, 0xb4, 0x9a, 0xd3, 0x78, 0xc6, 0x96, 0x4b, 0x23, 0xee, 0x97, 0xfd, 0x10, 0x34, 0x61, 0x0c, 0x5c, 0xc1, 0x4c, 0x61, 0xe0, 0xeb, 0xfb, 0x17, 0x11, 0xf8, 0xad, 0xe9, 0x6f, 0xe6, 0x55, 0x7b, 0x38 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.18", - /* Message to be signed */ - 78, - { 0x31, 0x1c, 0x88, 0x80, 0x05, 0x35, 0xd1, 0xb4, 0xe9, 0xbc, 0x78, 0x65, 0x18, 0x31, 0xa3, 0xe9, 0x67, 0xe7, 0x4b, 0x58, 0x28, 0xe0, 0x14, 0x11, 0x5f, 0xbe, 0x5f, 0x60, 0x9c, 0xe8, 0x65, 0xfe, 0xd2, 0x41, 0x97, 0x0f, 0x87, 0x2e, 0xc8, 0xf2, 0x3d, 0xc2, 0xbf, 0x61, 0x6b, 0x80, 0x20, 0xe4, 0x45, 0x64, 0xf9, 0x34, 0xdc, 0xbf, 0x72, 0x38, 0x61, 0x70, 0x07, 0x4d, 0x92, 0x0b, 0xa8, 0x95, 0xd3, 0x3d, 0xdf, 0x27, 0x93, 0x69, 0xf2, 0x36, 0xa1, 0x9a, 0xcd, 0x4f, 0xeb, 0x2b } -, - /* Signature */ - 128, - { 0x89, 0x46, 0x63, 0xe6, 0x3e, 0xc1, 0x9f, 0x56, 0x20, 0x3f, 0x4a, 0x44, 0x6b, 0x5e, 0x2b, 0x51, 0x74, 0xc8, 0x14, 0xa5, 0x4c, 0xbe, 0xa2, 0xc8, 0xe2, 0x98, 0xf9, 0x9b, 0x34, 0xc4, 0xbb, 0xc2, 0xc8, 0xb1, 0x77, 0xba, 0x98, 0x57, 0xd8, 0x1c, 0x85, 0x44, 0x36, 0xbd, 0x99, 0xaf, 0x58, 0xc0, 0x9d, 0xde, 0x5a, 0xca, 0xd2, 0xd6, 0x41, 0x50, 0x43, 0xfb, 0x40, 0xe7, 0x84, 0x75, 0xef, 0x74, 0x01, 0x2e, 0x4d, 0x4f, 0x75, 0xb2, 0xe9, 0x58, 0x85, 0xc8, 0x51, 0xa2, 0x3b, 0x4a, 0x25, 0x54, 0x93, 0xf3, 0x0c, 0x17, 0x2e, 0xae, 0x01, 0xd4, 0x79, 0x10, 0xfa, 0xbd, 0x26, 0x9f, 0x57, 0x94, 0x0b, 0xa4, 0x43, 0x50, 0x6c, 0x05, 0x22, 0xbf, 0x72, 0x8a, 0x25, 0x7a, 0xc1, 0x07, 0x3b, 0xdf, 0x99, 0xb4, 0x29, 0x56, 0xdb, 0x00, 0x2a, 0x30, 0xa5, 0x4d, 0xbd, 0xaf, 0x28, 0x4d, 0x8f, 0x69 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.19", - /* Message to be signed */ - 28, - { 0xb2, 0x65, 0xa9, 0x77, 0x7f, 0xaa, 0xf1, 0x58, 0xa8, 0x08, 0xaa, 0xe7, 0x08, 0x5a, 0x83, 0xe7, 0x07, 0x9c, 0xef, 0x80, 0xd5, 0xfc, 0x9d, 0x7c, 0xdc, 0x96, 0x3e, 0xc9 } -, - /* Signature */ - 128, - { 0x28, 0x1e, 0x88, 0xce, 0x19, 0x0e, 0x98, 0x62, 0x90, 0x34, 0x36, 0xa8, 0x6b, 0xa4, 0x37, 0x27, 0x16, 0x44, 0x9c, 0xc0, 0xce, 0x8d, 0x55, 0x4f, 0x70, 0x2d, 0x72, 0x52, 0xa0, 0x67, 0x60, 0xaf, 0x42, 0x12, 0x1d, 0xd0, 0x9b, 0xf6, 0xea, 0x13, 0xf0, 0xeb, 0x25, 0x2e, 0xcc, 0x76, 0x42, 0x10, 0x61, 0xf5, 0x74, 0x4b, 0xd8, 0xe3, 0x2c, 0x5a, 0x8c, 0x4f, 0xc1, 0xf9, 0x52, 0x1b, 0x3f, 0x5c, 0x29, 0x14, 0x6d, 0xd0, 0x59, 0x12, 0x91, 0xac, 0xbd, 0xc5, 0xb6, 0x3b, 0x55, 0x1d, 0x22, 0x8a, 0xe5, 0x38, 0x95, 0xb1, 0x97, 0xe6, 0xe2, 0x7a, 0x70, 0x68, 0xaa, 0x31, 0x03, 0xb7, 0x0c, 0xfb, 0x30, 0xf4, 0x15, 0x84, 0x5c, 0x7e, 0x52, 0x87, 0xf1, 0x11, 0x4e, 0x4c, 0xdf, 0xb4, 0x01, 0xed, 0x51, 0x98, 0x64, 0xcf, 0x61, 0xbc, 0x46, 0x9c, 0x66, 0x69, 0x9b, 0x29, 0x60, 0xa0, 0xaf, 0xf2 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 2.20", - /* Message to be signed */ - 102, - { 0x7c, 0x43, 0x9e, 0x7a, 0xb9, 0x90, 0xcd, 0xef, 0x95, 0x6c, 0x42, 0x39, 0x47, 0x9b, 0x49, 0xda, 0x84, 0x2f, 0x8b, 0x76, 0x76, 0x5a, 0x7a, 0xd4, 0x89, 0x7b, 0xc1, 0x6c, 0x61, 0xed, 0x3d, 0x09, 0x80, 0x5d, 0x76, 0xe8, 0xa5, 0xbe, 0x8b, 0x57, 0x8b, 0x95, 0x1f, 0x45, 0x45, 0xdf, 0x92, 0xa8, 0xa5, 0x37, 0xba, 0x3e, 0x2c, 0x13, 0xdc, 0xe0, 0xa0, 0x03, 0xe7, 0xb6, 0x24, 0x9e, 0x32, 0xbe, 0x94, 0x1f, 0x21, 0xcd, 0xa7, 0x25, 0xb8, 0x04, 0x07, 0xbe, 0x1e, 0x28, 0xbb, 0x9e, 0x39, 0x37, 0x38, 0x32, 0x53, 0x56, 0xec, 0x21, 0x74, 0x1d, 0x5c, 0x86, 0xf3, 0xc2, 0xb4, 0xf7, 0xb9, 0x47, 0xaf, 0xd5, 0x6b, 0x2d, 0x3a, 0xec } -, - /* Signature */ - 128, - { 0x6a, 0xfa, 0xd7, 0x7a, 0x05, 0x6d, 0x07, 0x29, 0x05, 0x86, 0xe9, 0x13, 0x80, 0x9a, 0x04, 0x37, 0xd3, 0x9a, 0xb3, 0x07, 0x32, 0x45, 0x12, 0xb2, 0xf5, 0xbc, 0x2b, 0xaf, 0x58, 0x0b, 0xf4, 0x55, 0x43, 0xeb, 0x04, 0xff, 0x83, 0xe9, 0x63, 0xa6, 0xd7, 0xf3, 0x3e, 0x9d, 0xff, 0xc1, 0xfc, 0xf4, 0x24, 0x48, 0xc5, 0xfc, 0xfa, 0x47, 0x27, 0x19, 0xc6, 0x51, 0xf8, 0x1f, 0x3c, 0x62, 0x22, 0x98, 0x3d, 0x38, 0x91, 0x7e, 0x29, 0xb4, 0x84, 0x85, 0x87, 0x9c, 0xeb, 0xb0, 0xa6, 0x1d, 0x38, 0x9e, 0x23, 0x8c, 0x9c, 0x71, 0xc3, 0x68, 0xed, 0xe4, 0x08, 0x3a, 0x94, 0x62, 0x97, 0xf7, 0x19, 0x0b, 0x4c, 0xef, 0x86, 0x7e, 0x9c, 0xcd, 0xa8, 0xf9, 0xff, 0xc6, 0x19, 0x84, 0xfc, 0xf0, 0x5d, 0x4f, 0xba, 0xfe, 0x10, 0x7d, 0xac, 0xf5, 0xb1, 0xdc, 0x8e, 0x2b, 0x14, 0x95, 0xb2, 0x44, 0xf8, 0xe7 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 3: A 1024-bit RSA key pair", -{ - /* Modulus */ - 128, - { 0xb5, 0xd7, 0x07, 0xb7, 0x92, 0xe0, 0x56, 0xf7, 0x2f, 0xd7, 0x6d, 0x8d, 0xa8, 0x89, 0xa5, 0x3c, 0xe4, 0xd8, 0xeb, 0xaa, 0x08, 0x2a, 0xee, 0xb2, 0x30, 0x32, 0xe3, 0xc5, 0xd8, 0xeb, 0xc4, 0xc1, 0x55, 0x61, 0x31, 0x9b, 0xe8, 0xdf, 0xe1, 0x88, 0x99, 0x1a, 0x89, 0x51, 0xd4, 0xb2, 0x3a, 0x51, 0xe8, 0xa9, 0x38, 0x2c, 0x80, 0x5e, 0x4c, 0xfd, 0x49, 0x0e, 0xbb, 0xce, 0xaa, 0x20, 0x80, 0x2a, 0xd6, 0x83, 0xb0, 0x5a, 0x10, 0x0f, 0x29, 0x98, 0x5f, 0x01, 0x1c, 0x3c, 0x8a, 0x44, 0x26, 0x25, 0x52, 0xd8, 0x3d, 0x9a, 0x1b, 0x7c, 0x27, 0x31, 0x5e, 0x14, 0x4a, 0xd8, 0xdf, 0x5c, 0xbe, 0x8b, 0xc6, 0x40, 0x0f, 0xd9, 0xcb, 0xe7, 0x6b, 0x74, 0x21, 0xd7, 0x08, 0xaa, 0x64, 0xf0, 0x40, 0xba, 0xe0, 0x7b, 0x7b, 0xd6, 0xf9, 0x22, 0x18, 0xf9, 0xa7, 0x29, 0x28, 0x4c, 0xc5, 0x98, 0xcd, 0xd1 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x45, 0x17, 0x92, 0xb5, 0x94, 0x47, 0xcc, 0x93, 0x78, 0xa8, 0xa4, 0xd6, 0x45, 0xfb, 0x22, 0xff, 0x4b, 0xbf, 0x06, 0x70, 0x61, 0x51, 0x1a, 0xc8, 0x36, 0xdb, 0x27, 0x43, 0xa6, 0x24, 0x13, 0x6b, 0x18, 0x6b, 0x69, 0x43, 0xa1, 0xcc, 0xeb, 0x6f, 0x91, 0x29, 0x0d, 0x93, 0x3b, 0xbb, 0x8a, 0xc0, 0x53, 0xa4, 0x74, 0x95, 0x28, 0x23, 0x6c, 0xa2, 0x72, 0xcf, 0x77, 0xd9, 0xd3, 0x37, 0xad, 0x2a, 0xb3, 0x6a, 0x87, 0xa9, 0x15, 0x3c, 0x5e, 0x16, 0x71, 0x6e, 0x09, 0xba, 0x0b, 0xea, 0xa6, 0x4b, 0x31, 0x25, 0x26, 0xd4, 0xa8, 0xc2, 0xdc, 0x68, 0xfe, 0x09, 0xe3, 0x7e, 0x50, 0x74, 0xa0, 0x90, 0x9d, 0x3f, 0x04, 0xab, 0x73, 0x90, 0x8a, 0x98, 0x0d, 0xec, 0x1d, 0xa7, 0xeb, 0x45, 0x05, 0xa4, 0x8b, 0xca, 0xd3, 0xb6, 0x0d, 0x01, 0x60, 0x84, 0x58, 0x64, 0xa6, 0x51, 0x1f, 0xf5, 0x59, 0xa7 } -, - /* Prime 1 */ - 64, - { 0xff, 0xa9, 0xf8, 0xe8, 0xb0, 0x82, 0x17, 0x0b, 0x63, 0x73, 0xf0, 0x0d, 0x73, 0xc4, 0x23, 0x86, 0xd4, 0x02, 0xf2, 0x80, 0x8b, 0x39, 0x3b, 0x32, 0xf7, 0x8f, 0x86, 0xea, 0xf6, 0x4b, 0x21, 0xbf, 0xdd, 0x33, 0x4f, 0xb9, 0xaa, 0xd1, 0x6b, 0xa6, 0xd9, 0xda, 0xdb, 0xc8, 0x94, 0x3a, 0x29, 0xe6, 0x63, 0xc8, 0xb3, 0x9c, 0x09, 0x59, 0x69, 0x02, 0x5b, 0xb9, 0xb2, 0xd9, 0xd6, 0xfe, 0x67, 0xb7 } -, - /* Prime 2 */ - 64, - { 0xb6, 0x14, 0x37, 0x8d, 0x5e, 0x3d, 0xa5, 0xa8, 0x0a, 0x6d, 0x73, 0x52, 0xfc, 0x66, 0xa5, 0x64, 0x59, 0x7b, 0x06, 0x8f, 0xc9, 0xd3, 0xaf, 0x5d, 0xb0, 0xe4, 0xe7, 0x35, 0xbe, 0xf8, 0x81, 0xdd, 0x40, 0x17, 0xee, 0x70, 0x82, 0x96, 0x19, 0x0b, 0x6f, 0xdc, 0x84, 0x04, 0xf0, 0x7b, 0xd9, 0xdc, 0x5c, 0xd5, 0xd2, 0xbe, 0x48, 0x86, 0xa7, 0xcb, 0xbc, 0xb2, 0x1d, 0x8c, 0x3d, 0x64, 0xa6, 0xb7 } -, - /* Prime exponent 1 */ - 64, - { 0x51, 0x0e, 0x68, 0x96, 0x0d, 0x70, 0x11, 0x32, 0x51, 0x23, 0xae, 0xd5, 0xf5, 0x00, 0x18, 0x6b, 0x64, 0xc8, 0x52, 0x6e, 0x22, 0xb5, 0xd0, 0x69, 0x06, 0x48, 0x00, 0xf4, 0x79, 0x85, 0xb4, 0x7b, 0x89, 0xfb, 0xfc, 0xa8, 0xd6, 0xd9, 0x72, 0x92, 0x01, 0xbb, 0xfb, 0xb6, 0x8a, 0x18, 0x2e, 0xb4, 0x96, 0xaa, 0x49, 0x17, 0x8d, 0x77, 0x45, 0x6d, 0xb3, 0xfb, 0x1a, 0x13, 0x2a, 0xb0, 0x99, 0xdd } -, - /* Prime exponent 2 */ - 64, - { 0x57, 0xeb, 0xbf, 0x3f, 0x76, 0x48, 0x52, 0x5b, 0xa8, 0x5d, 0x5d, 0x98, 0xae, 0xe4, 0x69, 0xec, 0xe1, 0x00, 0x75, 0x14, 0xad, 0xa2, 0x98, 0x45, 0xa7, 0x8b, 0x80, 0xd2, 0x05, 0x1b, 0x3e, 0xaa, 0x35, 0xae, 0xd8, 0xa6, 0x5f, 0x88, 0x57, 0x23, 0x9c, 0xaa, 0x60, 0xdd, 0x79, 0xba, 0x74, 0x62, 0xe2, 0x39, 0x26, 0x00, 0x58, 0x49, 0x1d, 0x71, 0x55, 0xf6, 0xb4, 0x29, 0xe9, 0xe3, 0x56, 0x55 } -, - /* Coefficient */ - 64, - { 0xee, 0x10, 0x7d, 0xc7, 0xef, 0xec, 0xe9, 0xa6, 0x5c, 0x0e, 0x87, 0x78, 0x9a, 0xf5, 0x59, 0x0c, 0x93, 0x83, 0x9d, 0xfe, 0x82, 0x85, 0x20, 0xda, 0x17, 0x74, 0xff, 0x80, 0xf7, 0xe5, 0x14, 0x55, 0x7f, 0xff, 0x10, 0xbd, 0x8c, 0xae, 0x18, 0x46, 0xef, 0xee, 0x7c, 0x10, 0xd7, 0xa1, 0x2c, 0x4a, 0x05, 0x5c, 0xc1, 0x36, 0xe4, 0xa4, 0xef, 0x25, 0xfd, 0x3e, 0xd9, 0xd0, 0xcd, 0xdf, 0x74, 0xf9 } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 3.1", - /* Message to be signed */ - 82, - { 0x98, 0x6e, 0x7c, 0x43, 0xdb, 0xb6, 0x71, 0xbd, 0x41, 0xb9, 0xa7, 0xf4, 0xb6, 0xaf, 0xc8, 0x0e, 0x80, 0x5f, 0x24, 0x23, 0x48, 0x8f, 0xb4, 0x31, 0xf5, 0xee, 0x79, 0x2b, 0x6c, 0x2a, 0xc7, 0xdb, 0x53, 0xcc, 0x42, 0x86, 0x55, 0xae, 0xb3, 0x2d, 0x03, 0xf4, 0xe8, 0x89, 0xc5, 0xc2, 0x5d, 0xe6, 0x83, 0xc4, 0x61, 0xb5, 0x3a, 0xcf, 0x89, 0xf9, 0xf8, 0xd3, 0xaa, 0xbd, 0xf6, 0xb9, 0xf0, 0xc2, 0xa1, 0xde, 0x12, 0xe1, 0x5b, 0x49, 0xed, 0xb3, 0x91, 0x9a, 0x65, 0x2f, 0xe9, 0x49, 0x1c, 0x25, 0xa7, 0xfc } -, - /* Signature */ - 128, - { 0x62, 0x75, 0xe8, 0x73, 0x97, 0xe3, 0x09, 0x2a, 0xab, 0x36, 0x98, 0xbb, 0x1b, 0x5c, 0xf2, 0x4b, 0x8c, 0xd7, 0x71, 0x2b, 0xec, 0xac, 0x35, 0xe3, 0x22, 0x03, 0xd5, 0x43, 0x14, 0xe5, 0x47, 0x0e, 0xa9, 0xaa, 0xbc, 0x86, 0x57, 0xf5, 0x64, 0x34, 0xe5, 0xaf, 0x9f, 0xae, 0x77, 0x8f, 0xf6, 0x04, 0x5c, 0x20, 0xe2, 0xe1, 0xef, 0x7c, 0xbd, 0xf8, 0x8f, 0x00, 0x75, 0xf3, 0x3e, 0xa9, 0x92, 0x77, 0x7c, 0xb7, 0xe9, 0x2f, 0x7d, 0xa1, 0x8a, 0x0f, 0xfd, 0x00, 0xaa, 0x46, 0x71, 0xed, 0x63, 0x91, 0x1f, 0xe9, 0xe9, 0x2f, 0xb4, 0xa7, 0x6e, 0x77, 0xdc, 0x6e, 0x0a, 0x91, 0x65, 0x76, 0x71, 0x6c, 0x15, 0xea, 0xef, 0x08, 0x9a, 0x71, 0xa0, 0xae, 0xa3, 0x5b, 0xed, 0x94, 0x47, 0xa6, 0xc1, 0x7f, 0x2a, 0xad, 0xb7, 0x27, 0xfd, 0x42, 0xf0, 0xac, 0xc8, 0x24, 0x62, 0x38, 0x1d, 0x9f, 0xa2, 0xef } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 3.2", - /* Message to be signed */ - 11, - { 0x4c, 0x7b, 0x98, 0x12, 0x0c, 0x87, 0x50, 0x90, 0x87, 0xc4, 0x78 } -, - /* Signature */ - 128, - { 0x59, 0xe5, 0xcb, 0xe7, 0x33, 0x1b, 0x92, 0xe0, 0xcb, 0x8f, 0x68, 0x9e, 0xae, 0xbb, 0x30, 0xf2, 0xb3, 0x34, 0xa7, 0x46, 0xa6, 0x57, 0x05, 0x59, 0x12, 0xff, 0x1c, 0x92, 0x76, 0x0b, 0x0b, 0x85, 0xbc, 0x42, 0x82, 0xf3, 0x18, 0x4b, 0x9a, 0x81, 0x4f, 0x44, 0x37, 0xf8, 0x25, 0xae, 0x07, 0xd3, 0x56, 0xba, 0xc6, 0x9e, 0x54, 0x0c, 0x90, 0x94, 0x2c, 0x7f, 0x7e, 0x6f, 0xf4, 0x4f, 0xe5, 0x74, 0xf1, 0x21, 0x25, 0x0a, 0xd2, 0x30, 0xf4, 0xb5, 0x0c, 0x78, 0x31, 0x1e, 0x4f, 0xd3, 0xc9, 0xe2, 0x65, 0xf5, 0x17, 0xce, 0x32, 0x97, 0xc3, 0xe1, 0xdd, 0xdb, 0x5c, 0x86, 0x9c, 0x69, 0x8f, 0x44, 0xaf, 0x52, 0x5e, 0x73, 0x64, 0x01, 0xa8, 0x1b, 0x45, 0x9f, 0x19, 0x8a, 0xd1, 0x80, 0x8c, 0xcd, 0x92, 0x9d, 0x49, 0x04, 0x74, 0xca, 0xf7, 0x00, 0x5f, 0x91, 0x0d, 0xac, 0xde, 0x21, 0xb0, 0x77 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.3", - /* Message to be signed */ - 233, - { 0x66, 0xf7, 0x07, 0x54, 0x22, 0xc8, 0xec, 0x42, 0x16, 0xa9, 0xc4, 0xff, 0x49, 0x42, 0x7d, 0x48, 0x3c, 0xae, 0x10, 0xc8, 0x53, 0x4a, 0x41, 0xb2, 0xfd, 0x15, 0xfe, 0xe0, 0x69, 0x60, 0xec, 0x6f, 0xb3, 0xf7, 0xa7, 0xe9, 0x4a, 0x2f, 0x8a, 0x2e, 0x3e, 0x43, 0xdc, 0x4a, 0x40, 0x57, 0x6c, 0x30, 0x97, 0xac, 0x95, 0x3b, 0x1d, 0xe8, 0x6f, 0x0b, 0x4e, 0xd3, 0x6d, 0x64, 0x4f, 0x23, 0xae, 0x14, 0x42, 0x55, 0x29, 0x62, 0x24, 0x64, 0xca, 0x0c, 0xbf, 0x0b, 0x17, 0x41, 0x34, 0x72, 0x38, 0x15, 0x7f, 0xab, 0x59, 0xe4, 0xde, 0x55, 0x24, 0x09, 0x6d, 0x62, 0xba, 0xec, 0x63, 0xac, 0x64, 0x50, 0x32, 0x7e, 0xfe, 0xc6, 0x29, 0x2f, 0x98, 0x01, 0x9f, 0xc6, 0x7a, 0x2a, 0x66, 0x38, 0x56, 0x3e, 0x9b, 0x6e, 0x2d, 0x15, 0xef, 0xd2, 0x37, 0xbb, 0x09, 0x8a, 0x44, 0x3a, 0xee, 0xb2, 0xbf, 0x6c, 0x3f, 0x8c, 0x81, 0xb8, 0xc0, 0x1b, 0x7f, 0xcb, 0x3f, 0xeb, 0xb0, 0xde, 0x3f, 0xc2, 0x5b, 0x65, 0xf5, 0xaf, 0x96, 0xb1, 0xd5, 0xcc, 0x3b, 0x27, 0xd0, 0xc6, 0x05, 0x30, 0x87, 0xb3, 0x96, 0x80, 0xe4, 0x92, 0xa4, 0xab, 0x23, 0x67, 0x47, 0x11, 0x69, 0xe5, 0x28, 0x38, 0x94, 0x5d, 0xba, 0x9d, 0xd7, 0x72, 0x3f, 0x4e, 0x62, 0x4a, 0x05, 0xf7, 0x37, 0x5b, 0x92, 0x7a, 0x87, 0xab, 0xe6, 0xa8, 0x93, 0xa1, 0x65, 0x8f, 0xd4, 0x9f, 0x47, 0xf6, 0xc7, 0xb0, 0xfa, 0x59, 0x6c, 0x65, 0xfa, 0x68, 0xa2, 0x3f, 0x0a, 0xb4, 0x32, 0x96, 0x2d, 0x18, 0xd4, 0x34, 0x3b, 0xd6, 0xfd, 0x67, 0xd0, 0x0b, 0x25, 0xb8, 0x1b, 0x09, 0xb5, 0x62, 0x03, 0x85, 0x64 } -, - /* Signature */ - 128, - { 0x59, 0x9e, 0x69, 0xc1, 0x54, 0xe4, 0xfe, 0x66, 0xb3, 0x6a, 0x69, 0x04, 0x92, 0xfa, 0xeb, 0xb2, 0xbb, 0xe7, 0x34, 0xe0, 0x41, 0x5d, 0x9f, 0x3c, 0xf7, 0xe3, 0x78, 0x28, 0xf5, 0x3e, 0x61, 0x13, 0x04, 0x49, 0x17, 0x3a, 0x33, 0x46, 0x0c, 0x6b, 0x4c, 0x8d, 0xc7, 0xd6, 0x81, 0xca, 0x6f, 0x4d, 0xaf, 0x1c, 0xb8, 0x16, 0xd4, 0x0a, 0xa9, 0x08, 0x2e, 0xe1, 0x93, 0x7b, 0xe4, 0xbc, 0x6a, 0x09, 0xc6, 0xde, 0x79, 0x8c, 0x82, 0x86, 0xfc, 0xd2, 0xa2, 0xb2, 0x19, 0x6c, 0x59, 0x99, 0x4c, 0x93, 0x7f, 0x37, 0x13, 0x07, 0x52, 0x61, 0x2c, 0x6b, 0xff, 0x6d, 0xbb, 0x53, 0xe0, 0x64, 0x7f, 0x88, 0x58, 0xbc, 0x38, 0x38, 0x64, 0x02, 0x1e, 0x6d, 0x56, 0x68, 0x19, 0x20, 0x24, 0x92, 0x97, 0x82, 0x22, 0x46, 0xa0, 0xf5, 0x28, 0xaa, 0xb3, 0xed, 0x18, 0x5e, 0xeb, 0xce, 0x91, 0x9c, 0xf8, 0x3e } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.4", - /* Message to be signed */ - 148, - { 0xd9, 0x34, 0x44, 0x28, 0xfa, 0x8a, 0x58, 0xf8, 0xfa, 0x7b, 0x44, 0x3e, 0x51, 0xfc, 0x9b, 0x51, 0xe3, 0x7a, 0x70, 0x21, 0x0d, 0xb8, 0xbd, 0x1d, 0xe7, 0xf8, 0x67, 0x5d, 0x84, 0x79, 0xff, 0x65, 0x7c, 0xa7, 0x29, 0x55, 0xb2, 0x3c, 0x6f, 0x4a, 0x09, 0x16, 0x37, 0x9a, 0x4e, 0xde, 0xe1, 0xf2, 0x6c, 0x85, 0xe0, 0x52, 0x90, 0x21, 0x1e, 0xeb, 0x25, 0x83, 0x2b, 0x09, 0xcb, 0xe5, 0xea, 0xed, 0x3e, 0x39, 0x65, 0xb0, 0x5a, 0x52, 0xfb, 0x5b, 0x16, 0x49, 0x11, 0x82, 0xc5, 0x91, 0x3c, 0xb1, 0x82, 0x57, 0x48, 0xe8, 0x1a, 0xd0, 0x14, 0xf1, 0x3d, 0x29, 0x6d, 0xc1, 0x69, 0x57, 0x08, 0x2b, 0x1b, 0x83, 0xb4, 0xbe, 0x50, 0xa0, 0xf9, 0x59, 0xc9, 0xe7, 0xf3, 0xaa, 0x80, 0x77, 0x97, 0x2e, 0x2b, 0x93, 0xc2, 0xef, 0xfd, 0x9f, 0x30, 0x86, 0x25, 0xb8, 0xca, 0x7f, 0x54, 0xd7, 0xb6, 0x96, 0x48, 0x79, 0x04, 0x47, 0xac, 0x91, 0xf7, 0x98, 0x5e, 0x51, 0x0d, 0xf7, 0x0d, 0x6e, 0xbc, 0x35, 0x72, 0xc2, 0x05, 0xe6 } -, - /* Signature */ - 128, - { 0x2c, 0x06, 0x01, 0x65, 0xfc, 0xc5, 0x65, 0x5c, 0x06, 0x57, 0xc8, 0xfe, 0x08, 0xe0, 0x5b, 0xdc, 0x8c, 0xd7, 0x7c, 0x1f, 0xec, 0xb6, 0xd1, 0x8b, 0x89, 0x38, 0x11, 0xc9, 0x9d, 0xd0, 0x91, 0xe0, 0xd8, 0x50, 0x6d, 0xcc, 0xb4, 0x9e, 0x33, 0xda, 0xaf, 0xf6, 0xda, 0x96, 0x7b, 0x99, 0xe3, 0x44, 0xcb, 0x17, 0xfa, 0x3c, 0x96, 0x31, 0x29, 0x9b, 0x35, 0x89, 0x81, 0x8b, 0x37, 0xed, 0x9d, 0x5d, 0x78, 0x94, 0xe4, 0xa6, 0x9d, 0xdb, 0x24, 0x83, 0x2e, 0x1a, 0x88, 0x60, 0x01, 0x4e, 0xe5, 0xe5, 0xeb, 0x95, 0x3e, 0x8b, 0x35, 0x48, 0x4b, 0xa4, 0xfe, 0xc9, 0xc3, 0x03, 0x3a, 0xe2, 0xe1, 0x18, 0x9a, 0xf7, 0x94, 0xa7, 0x2e, 0x42, 0x67, 0x21, 0x5b, 0xfe, 0x45, 0x8f, 0x0f, 0xce, 0x6b, 0x37, 0xa5, 0x54, 0x9e, 0xf8, 0x05, 0x43, 0xd0, 0xd4, 0x1a, 0x87, 0xb2, 0xc6, 0xe4, 0xd8, 0x4c, 0xb5 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.5", - /* Message to be signed */ - 201, - { 0x8c, 0x67, 0x02, 0xda, 0xaf, 0x58, 0xf6, 0xa4, 0x75, 0xfa, 0xd2, 0xc7, 0xa4, 0xbb, 0x15, 0x6a, 0x57, 0x06, 0x42, 0x55, 0x77, 0xd5, 0xe3, 0x0c, 0x6a, 0x6b, 0xd3, 0x66, 0x9f, 0xd0, 0x30, 0xaf, 0xd7, 0x89, 0xfa, 0xa3, 0xd0, 0x10, 0x18, 0xd4, 0x5d, 0xb2, 0xa0, 0x47, 0xf5, 0x2c, 0xb4, 0xf6, 0x3d, 0xea, 0x36, 0x09, 0x42, 0xaf, 0xe4, 0x76, 0x26, 0x42, 0x06, 0xd9, 0x83, 0xad, 0x38, 0x36, 0xe1, 0x55, 0xc5, 0x6b, 0x2e, 0xcc, 0x08, 0x76, 0x3a, 0xfb, 0x9f, 0xd5, 0x1d, 0x19, 0x99, 0x0e, 0xfc, 0x33, 0x63, 0xf6, 0x57, 0xe2, 0x85, 0xe0, 0x35, 0x21, 0xe8, 0xca, 0xd0, 0x1d, 0x2c, 0x93, 0x5a, 0x18, 0x3a, 0xe2, 0x3f, 0x0e, 0xe8, 0x71, 0x00, 0x86, 0xa8, 0x5b, 0x9f, 0xad, 0x4e, 0x7f, 0x2b, 0x09, 0x45, 0x2e, 0xbc, 0x40, 0x3c, 0xe0, 0xc0, 0xe5, 0x75, 0x5a, 0x7b, 0x2f, 0x33, 0xf4, 0xde, 0xf0, 0xdb, 0x71, 0xc9, 0x79, 0x31, 0xff, 0x90, 0x4a, 0x81, 0x31, 0x99, 0x84, 0xbd, 0xc5, 0x16, 0x6f, 0x6b, 0x92, 0x0c, 0x97, 0xee, 0x74, 0xfb, 0x7e, 0x89, 0x0f, 0x49, 0x0c, 0x90, 0xde, 0x30, 0xca, 0xc9, 0x76, 0xb7, 0x17, 0x23, 0xe2, 0xf8, 0x6e, 0x9d, 0xe1, 0xd5, 0x03, 0xa4, 0x1b, 0xc8, 0x1d, 0x53, 0xcc, 0xbe, 0xf8, 0xac, 0x40, 0x53, 0x57, 0xd9, 0xdf, 0xdf, 0x30, 0x64, 0x66, 0xb4, 0x26, 0x95, 0x80, 0x21, 0x2e, 0x9d, 0x71, 0x32 } -, - /* Signature */ - 128, - { 0x0d, 0x89, 0xfc, 0xf8, 0x44, 0xa9, 0xdc, 0x22, 0x3d, 0x5f, 0x63, 0x8d, 0xcc, 0x3a, 0x59, 0x78, 0x71, 0x6f, 0x26, 0x28, 0xb8, 0xa8, 0x3a, 0xb3, 0x3e, 0x6e, 0x25, 0x5f, 0xf8, 0xaa, 0x01, 0x57, 0x8c, 0x14, 0xe3, 0x89, 0x7d, 0xa4, 0x5a, 0xef, 0xd6, 0x3f, 0xa8, 0x7c, 0xf3, 0x5e, 0x24, 0x4b, 0xf4, 0x82, 0x8e, 0xcd, 0x21, 0x95, 0x0f, 0x30, 0x85, 0xa3, 0x66, 0x21, 0xc9, 0xda, 0x1b, 0xbe, 0x7e, 0xa6, 0x27, 0x31, 0xc6, 0x8d, 0x4d, 0xe0, 0xa3, 0x76, 0xe2, 0x2d, 0xac, 0x2f, 0x54, 0x8c, 0xd4, 0xba, 0x4a, 0x54, 0x2e, 0x71, 0x0f, 0x55, 0xce, 0x85, 0xa9, 0xc1, 0x95, 0x93, 0xc0, 0x8c, 0x87, 0xd2, 0x96, 0xd6, 0x35, 0x87, 0xb3, 0xfe, 0x2c, 0x5d, 0x11, 0x65, 0xee, 0x27, 0x74, 0x4c, 0x75, 0xd8, 0xf4, 0xf1, 0x43, 0x71, 0x63, 0x7c, 0x0c, 0x0a, 0x44, 0x62, 0x76, 0x28, 0x95, 0x83 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.6", - /* Message to be signed */ - 225, - { 0x56, 0xf4, 0xff, 0xd1, 0x27, 0x9d, 0xcf, 0xe5, 0x62, 0xa9, 0xdd, 0xd4, 0x1e, 0xcd, 0xf6, 0x0a, 0x3f, 0xf5, 0x82, 0x46, 0xbf, 0xaf, 0x95, 0x65, 0xcf, 0x67, 0x4b, 0x0b, 0x90, 0x75, 0xf4, 0x0e, 0xea, 0xc0, 0x8f, 0x0b, 0x89, 0x66, 0x61, 0x8a, 0x19, 0x6b, 0x12, 0x28, 0xeb, 0xce, 0x93, 0xfc, 0x9d, 0xd7, 0x9b, 0xd4, 0x63, 0xea, 0x7d, 0x2c, 0x97, 0x4d, 0x2c, 0x2f, 0x53, 0x9e, 0xaf, 0xb1, 0xb2, 0xbc, 0x1e, 0xa3, 0x4d, 0x74, 0xf7, 0x20, 0xe1, 0x19, 0x34, 0x2f, 0xf7, 0x13, 0x12, 0x25, 0xaa, 0x9a, 0xda, 0x89, 0x4b, 0x76, 0xb2, 0xec, 0xb1, 0x2f, 0x2f, 0x40, 0x28, 0x44, 0xb4, 0x42, 0x5c, 0xf8, 0xf1, 0xa3, 0x9b, 0x0a, 0x9c, 0x83, 0xb4, 0x5b, 0x03, 0xcf, 0xc0, 0xd1, 0x5f, 0xd3, 0x14, 0xd6, 0xab, 0xf5, 0x32, 0xb8, 0xed, 0xfc, 0xf2, 0x36, 0x51, 0x4b, 0x2e, 0x45, 0x86, 0x97, 0x86, 0xfe, 0xfe, 0x27, 0xf5, 0x4d, 0x66, 0x6e, 0xe5, 0x24, 0xe4, 0xb9, 0xc0, 0x53, 0xbe, 0x39, 0x75, 0x01, 0x58, 0x29, 0x91, 0xfa, 0x2d, 0x80, 0x2c, 0x7d, 0x1b, 0x17, 0x8b, 0x23, 0xe9, 0xb6, 0xec, 0xe6, 0xfd, 0x2e, 0xf0, 0x13, 0x2c, 0x06, 0x01, 0xa8, 0x6f, 0x07, 0x68, 0xba, 0xdc, 0x59, 0xc5, 0xcc, 0x33, 0xf2, 0x4d, 0xed, 0x55, 0x4a, 0xe5, 0x1a, 0xe3, 0xec, 0x23, 0xf9, 0xdd, 0x08, 0x9e, 0x32, 0x4a, 0x68, 0x21, 0xf6, 0x15, 0x7f, 0x12, 0x84, 0x42, 0xac, 0x58, 0x07, 0x65, 0x8a, 0xd3, 0x40, 0x26, 0xb8, 0xfc, 0xfd, 0xa6, 0xdc, 0x7f, 0x02, 0xa9, 0x3c, 0x16, 0x6e, 0xc9, 0x45, 0xee } -, - /* Signature */ - 128, - { 0x0d, 0xeb, 0x39, 0x7b, 0xf2, 0xcf, 0xf9, 0x79, 0xd4, 0x71, 0x9c, 0x64, 0x8b, 0x0a, 0x35, 0x25, 0x35, 0x1f, 0x5e, 0x08, 0x40, 0x5c, 0xa2, 0x61, 0x4a, 0x83, 0xe5, 0x6a, 0xce, 0x86, 0xf5, 0x52, 0xe4, 0x1b, 0xb9, 0x28, 0xde, 0x50, 0xf0, 0xbc, 0x0f, 0xe3, 0x1a, 0x2e, 0xf2, 0xad, 0x79, 0x9f, 0xd3, 0xcf, 0x47, 0x42, 0xb1, 0x13, 0x1a, 0x37, 0xbd, 0x08, 0xf2, 0xa1, 0x3c, 0xac, 0xda, 0x67, 0xf4, 0x95, 0xc9, 0xf1, 0xa9, 0xef, 0x64, 0x85, 0x70, 0x72, 0x32, 0x9f, 0x00, 0xcc, 0x4c, 0x01, 0x22, 0x35, 0x59, 0x9a, 0x83, 0xfc, 0x45, 0x94, 0xfe, 0xd9, 0x23, 0x03, 0x49, 0x01, 0xed, 0xc2, 0x7d, 0x5f, 0x05, 0x79, 0x98, 0x34, 0x93, 0x5c, 0xab, 0xe2, 0x64, 0xff, 0xc1, 0x96, 0x63, 0x71, 0x4d, 0x8c, 0x3d, 0xe8, 0xe9, 0x61, 0x9f, 0xd2, 0x84, 0x2d, 0x22, 0x98, 0xf7, 0xa7, 0x2c, 0x99 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.7", - /* Message to be signed */ - 179, - { 0x0e, 0x79, 0xac, 0x9c, 0x9c, 0x03, 0x96, 0xd9, 0x69, 0xfb, 0x3f, 0x7c, 0xc9, 0x94, 0x7b, 0x07, 0x8b, 0xac, 0x49, 0x3b, 0x03, 0x52, 0xc8, 0xe0, 0xcd, 0xe5, 0x46, 0x3e, 0xa5, 0xc1, 0x18, 0x4f, 0xd5, 0x2a, 0x1f, 0xb7, 0x48, 0x19, 0x3c, 0x14, 0x7a, 0x74, 0x80, 0x0d, 0x24, 0xf7, 0x51, 0xba, 0x93, 0x5e, 0x19, 0xc9, 0x11, 0x5e, 0xdf, 0x07, 0x22, 0x88, 0x33, 0x0b, 0xf3, 0x83, 0xf4, 0x95, 0x29, 0x6b, 0xe1, 0xaa, 0x4a, 0x50, 0x95, 0xb9, 0x57, 0x3b, 0xcb, 0xdb, 0x22, 0x8a, 0x43, 0x13, 0x12, 0x37, 0x86, 0x5d, 0x26, 0xdf, 0xbf, 0xcf, 0xef, 0x07, 0x8f, 0x35, 0x9f, 0x9a, 0x95, 0x62, 0xe2, 0x5b, 0x69, 0x63, 0x85, 0xe1, 0x28, 0x13, 0xff, 0xfb, 0xc8, 0xd5, 0x29, 0x81, 0x9a, 0x91, 0x45, 0x1d, 0x33, 0xa5, 0x07, 0x26, 0x39, 0x2e, 0x4f, 0xef, 0x29, 0x41, 0x8c, 0xca, 0x2c, 0x73, 0xa0, 0x68, 0xe6, 0x0e, 0xae, 0x31, 0x84, 0x70, 0x33, 0x1a, 0x0f, 0x1d, 0xb4, 0xbb, 0xb6, 0x37, 0x17, 0x3b, 0xe8, 0x0f, 0xea, 0x03, 0xc8, 0x2c, 0x15, 0xd0, 0x01, 0x93, 0x36, 0x2d, 0x3a, 0x18, 0xad, 0x9e, 0x2f, 0x68, 0x05, 0x00, 0xd7, 0x26, 0x5b, 0x15, 0x57, 0x03, 0x3a, 0x52, 0x09, 0x77, 0xd8, 0x10, 0xfc } -, - /* Signature */ - 128, - { 0x73, 0x3b, 0x7f, 0xea, 0x12, 0x0c, 0xa5, 0xf0, 0x35, 0x9a, 0x89, 0x05, 0x75, 0x0c, 0x49, 0xc3, 0x63, 0xd8, 0x84, 0xf5, 0x6c, 0x2b, 0x7a, 0x72, 0x9f, 0xad, 0x7b, 0xff, 0x44, 0x5a, 0x1e, 0x54, 0x79, 0x89, 0x41, 0x74, 0x53, 0x93, 0xe1, 0x76, 0x77, 0x12, 0xac, 0x4b, 0x9d, 0xd2, 0x68, 0x38, 0x88, 0xd9, 0xe6, 0x8b, 0x90, 0x5d, 0xba, 0xb8, 0x79, 0x21, 0x85, 0x18, 0x48, 0x72, 0x73, 0x86, 0x02, 0xea, 0xf4, 0xa8, 0x0f, 0x45, 0x95, 0xf7, 0x8f, 0xd4, 0xa4, 0x61, 0x0b, 0xf8, 0x22, 0x0b, 0x86, 0xa2, 0x88, 0x5f, 0xda, 0x24, 0xe1, 0x99, 0x64, 0x28, 0xcc, 0xd1, 0x5f, 0x20, 0x08, 0xe0, 0x68, 0x51, 0xb2, 0xee, 0xad, 0xc3, 0xdc, 0x8e, 0x03, 0x01, 0x2f, 0x9b, 0xdb, 0x3c, 0xe0, 0x57, 0x5d, 0xdc, 0x3a, 0xdc, 0x7c, 0x59, 0x08, 0x49, 0x8b, 0x69, 0xa7, 0x97, 0xba, 0x58, 0x29, 0xc7 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.8", - /* Message to be signed */ - 29, - { 0x22, 0xeb, 0x7d, 0xba, 0x73, 0x30, 0x7c, 0x7c, 0x52, 0xa0, 0x7c, 0xed, 0x89, 0xdb, 0x8b, 0xc5, 0x39, 0x4a, 0xed, 0x22, 0x72, 0xf7, 0xe8, 0x1a, 0x74, 0xf4, 0xc0, 0x2d, 0x14 } -, - /* Signature */ - 128, - { 0x9e, 0xa4, 0x60, 0x0a, 0x1a, 0x65, 0x49, 0xfd, 0x39, 0x75, 0xf6, 0x49, 0x8a, 0x04, 0xd6, 0x9f, 0x96, 0xfa, 0xd0, 0xe8, 0xe6, 0xfe, 0xbc, 0xfb, 0xe0, 0x1c, 0x2f, 0x83, 0x17, 0x0b, 0xc7, 0x4e, 0xb9, 0x1f, 0x2e, 0x33, 0x53, 0x38, 0xd5, 0x83, 0xe8, 0x85, 0xaa, 0xc6, 0x14, 0x24, 0xc9, 0xb2, 0x66, 0xc3, 0xd2, 0xd9, 0x8e, 0x79, 0x77, 0xff, 0xe4, 0x95, 0xf9, 0xc1, 0xa6, 0xee, 0x5e, 0xf4, 0x1a, 0x4c, 0xc7, 0x47, 0x8c, 0x24, 0xb3, 0x16, 0xc7, 0xd9, 0xf6, 0xdb, 0xaa, 0x65, 0xa4, 0xca, 0xde, 0xf1, 0x81, 0xca, 0x94, 0x6f, 0x9b, 0x92, 0x18, 0x4f, 0xae, 0xca, 0x8a, 0x13, 0x16, 0xae, 0xab, 0x5c, 0xd3, 0x87, 0x8c, 0x6d, 0xf0, 0x74, 0xf9, 0x06, 0x0b, 0x9d, 0xb6, 0x6d, 0xec, 0xe9, 0xa9, 0x36, 0x7d, 0x75, 0x49, 0x03, 0x5a, 0xc6, 0xbf, 0x19, 0x62, 0x36, 0x5e, 0x1f, 0xd3, 0xfc } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.9", - /* Message to be signed */ - 2, - { 0xf6, 0x80 } -, - /* Signature */ - 128, - { 0x51, 0x63, 0x90, 0x61, 0xfa, 0x7b, 0x7c, 0xd5, 0xdf, 0x64, 0xb3, 0x0a, 0x39, 0x4c, 0xcf, 0x7e, 0x24, 0x26, 0x97, 0x2a, 0xa1, 0xdc, 0xf5, 0xd4, 0x5e, 0xb8, 0xec, 0x2c, 0xd9, 0x0b, 0x9b, 0x19, 0x68, 0x92, 0xbe, 0x5f, 0xa0, 0x3c, 0x43, 0xf3, 0xc3, 0x72, 0x3a, 0xe3, 0x13, 0x0d, 0x61, 0x51, 0xb3, 0x3a, 0x63, 0x7c, 0xfc, 0x50, 0xba, 0x35, 0x26, 0xa7, 0x39, 0x6c, 0xf8, 0x47, 0x9c, 0x50, 0x8c, 0x18, 0x11, 0x81, 0x0d, 0x68, 0xb3, 0x88, 0x0a, 0xf6, 0xe6, 0x4b, 0x16, 0xbd, 0x70, 0x79, 0xbe, 0x9c, 0x00, 0x39, 0x29, 0x51, 0x22, 0x61, 0x89, 0x8f, 0xa5, 0x7c, 0x06, 0xff, 0x7e, 0x1d, 0x80, 0x39, 0xfa, 0x99, 0x3f, 0xd2, 0x05, 0x6a, 0xc7, 0x01, 0x9b, 0x8d, 0xbc, 0xf2, 0x53, 0x0d, 0x53, 0x80, 0xe6, 0x01, 0xa4, 0xa1, 0x87, 0x1b, 0x86, 0xc2, 0x0b, 0xc1, 0xc4, 0x89, 0xc5, 0xf3 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.10", - /* Message to be signed */ - 104, - { 0x65, 0x0e, 0x64, 0xed, 0x1d, 0xa8, 0x8b, 0xcf, 0x8a, 0xe2, 0x75, 0x22, 0xbe, 0x1d, 0x5c, 0x99, 0x19, 0xf2, 0x09, 0x9d, 0xd6, 0x32, 0x45, 0x5f, 0x66, 0xd9, 0xaf, 0xe8, 0xba, 0xf4, 0x6c, 0xc8, 0xa1, 0x98, 0x40, 0x9b, 0x09, 0x28, 0xdd, 0x87, 0x22, 0x62, 0x84, 0xd6, 0x69, 0xbf, 0x01, 0xbc, 0xec, 0x44, 0x37, 0x6c, 0xb0, 0xe9, 0xbd, 0xc6, 0x86, 0xac, 0xaa, 0x8b, 0x46, 0x34, 0x86, 0x08, 0x59, 0x94, 0xca, 0xfb, 0x5a, 0x8c, 0xfc, 0x33, 0xd4, 0x9c, 0xee, 0xf4, 0x79, 0xfc, 0x6e, 0x04, 0xf8, 0xee, 0xf6, 0x37, 0xeb, 0x68, 0xcb, 0x57, 0x81, 0x8d, 0x5f, 0x97, 0x70, 0xac, 0x52, 0x3e, 0xd5, 0xb0, 0x16, 0x38, 0x36, 0x7f, 0xf4, 0x7f } -, - /* Signature */ - 128, - { 0x50, 0x3e, 0x05, 0x66, 0x1d, 0x68, 0x1e, 0xca, 0x57, 0x4e, 0x02, 0x30, 0xaf, 0x2d, 0xaa, 0x87, 0x7b, 0x90, 0x51, 0x6e, 0x5e, 0x19, 0x72, 0x8c, 0x91, 0x76, 0x8d, 0x6e, 0xef, 0xee, 0x00, 0x1b, 0x35, 0x41, 0x9c, 0x5f, 0xcb, 0x56, 0x11, 0xd6, 0x0e, 0x7e, 0xcb, 0xe3, 0xc9, 0x5e, 0x5c, 0x88, 0xba, 0x93, 0x46, 0x07, 0x04, 0xf1, 0x69, 0x4a, 0xe8, 0x04, 0x44, 0xeb, 0x97, 0x18, 0xa0, 0x8b, 0x66, 0x86, 0xfa, 0xd8, 0x6e, 0x52, 0x59, 0x90, 0xc3, 0xc1, 0xa6, 0x6c, 0x8c, 0x53, 0xaa, 0x31, 0xae, 0xd8, 0xcb, 0xc4, 0x0f, 0xd5, 0x4f, 0x5f, 0xf8, 0xa1, 0x34, 0x74, 0x9d, 0x79, 0xd3, 0x8f, 0xbb, 0x0d, 0x58, 0x44, 0x26, 0x78, 0xff, 0x2f, 0x70, 0xc6, 0xc5, 0x0f, 0x25, 0x47, 0x2a, 0x72, 0xd6, 0x32, 0x05, 0xe7, 0x82, 0x42, 0x3d, 0xf4, 0x0b, 0x6c, 0x43, 0xde, 0x03, 0xa1, 0x8f, 0x8b } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.11", - /* Message to be signed */ - 50, - { 0x57, 0xf8, 0xac, 0x6a, 0x9e, 0x46, 0x8b, 0x7f, 0x1f, 0x74, 0x5d, 0xff, 0xe3, 0x9e, 0x9c, 0xbf, 0x90, 0x24, 0xa0, 0xff, 0x36, 0xe0, 0x22, 0x83, 0x92, 0xbe, 0x6b, 0x29, 0x94, 0x29, 0x17, 0x76, 0xb8, 0x9c, 0x0a, 0x4b, 0x1f, 0xa8, 0x6b, 0x2e, 0xc8, 0xbb, 0x7c, 0x3e, 0x64, 0xf5, 0x58, 0x5a, 0xfa, 0x77 } -, - /* Signature */ - 128, - { 0x90, 0xbe, 0x16, 0xb4, 0x08, 0xb3, 0x85, 0x73, 0x95, 0x39, 0xb3, 0xb9, 0xa2, 0x9b, 0x94, 0xc7, 0x29, 0x38, 0x5f, 0x79, 0xdd, 0x4a, 0x79, 0x81, 0x1e, 0x6f, 0x67, 0xc8, 0x0e, 0xd3, 0x59, 0xe5, 0xf4, 0xb2, 0xa1, 0x9c, 0x22, 0x2a, 0x82, 0xb3, 0xd6, 0xd6, 0x2a, 0x90, 0x3f, 0xb1, 0x80, 0xc1, 0xf4, 0x3c, 0xb3, 0xfe, 0x06, 0xa2, 0x50, 0xbc, 0xb0, 0xe7, 0xc6, 0x88, 0x66, 0x5c, 0x83, 0x68, 0xa1, 0x1a, 0xb1, 0x16, 0x0a, 0xdb, 0x74, 0x02, 0x91, 0x35, 0x2b, 0x38, 0x38, 0xb6, 0x92, 0x3a, 0x4a, 0x37, 0xad, 0x06, 0x04, 0x0a, 0x53, 0x59, 0x20, 0xdc, 0x0f, 0x10, 0x57, 0x9e, 0xcf, 0x48, 0x1c, 0xd4, 0x41, 0x37, 0x17, 0xd7, 0xd4, 0xd9, 0x60, 0xaa, 0x75, 0x1a, 0x74, 0x3e, 0x2f, 0x7c, 0x61, 0x6e, 0x54, 0x2e, 0xe6, 0x5f, 0xbb, 0xfe, 0x24, 0x66, 0x0e, 0x10, 0x1d, 0xaa, 0x2b, 0xdd } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.12", - /* Message to be signed */ - 77, - { 0x80, 0xef, 0x01, 0xaa, 0xcc, 0x5b, 0xfb, 0x0d, 0xb4, 0x8c, 0x6d, 0xe3, 0xd8, 0x14, 0x95, 0xb9, 0xc2, 0x31, 0x1a, 0x38, 0x93, 0x89, 0xf2, 0x3b, 0x70, 0xc0, 0x24, 0xda, 0x44, 0x78, 0xbf, 0xab, 0x2b, 0xfe, 0x4e, 0x54, 0x6f, 0x13, 0xff, 0xfd, 0xb9, 0x63, 0x89, 0x4e, 0xc6, 0xda, 0xdb, 0x3d, 0x2b, 0x0e, 0xe3, 0x37, 0xf1, 0x16, 0x31, 0x05, 0x8e, 0xac, 0x86, 0x09, 0xe5, 0xa1, 0x55, 0x4a, 0xf7, 0x97, 0xa9, 0xf9, 0xab, 0x47, 0x8c, 0x2d, 0x5b, 0x91, 0x88, 0xc8, 0x25 } -, - /* Signature */ - 128, - { 0x44, 0xc3, 0xf5, 0x1d, 0xcc, 0x6f, 0xb2, 0xb4, 0xe7, 0x0f, 0x53, 0x7f, 0x54, 0x64, 0xc6, 0x32, 0x0a, 0xd4, 0x2e, 0x21, 0x28, 0xfa, 0xdf, 0xd9, 0xa7, 0xe9, 0x37, 0xcd, 0x65, 0xdc, 0xbf, 0x35, 0xac, 0x66, 0xcf, 0xfa, 0xfd, 0x39, 0x28, 0x39, 0x66, 0xf2, 0xf1, 0x5d, 0xe5, 0x27, 0x72, 0x35, 0x50, 0x71, 0x5a, 0x31, 0x04, 0x29, 0x45, 0xe2, 0x00, 0xcc, 0x5c, 0x86, 0xfa, 0xba, 0x5e, 0xc8, 0xab, 0xaf, 0x50, 0x9c, 0x0c, 0xcd, 0x64, 0xd9, 0x9d, 0xed, 0xc7, 0x6e, 0x3c, 0xea, 0xa8, 0xc4, 0x47, 0x17, 0x93, 0x37, 0xf4, 0xa0, 0x77, 0x7b, 0x11, 0x52, 0x6e, 0x47, 0x2a, 0xcd, 0x41, 0x3b, 0x4a, 0xc7, 0xc3, 0x03, 0xcd, 0xcd, 0x84, 0xca, 0xfc, 0x02, 0x52, 0x43, 0xef, 0x00, 0x6f, 0x79, 0xdd, 0xaf, 0x55, 0xc1, 0x5c, 0xc4, 0xa8, 0xf1, 0x5e, 0xa2, 0xc8, 0x7f, 0x05, 0x77, 0x38, 0x14 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.13", - /* Message to be signed */ - 184, - { 0xac, 0x17, 0x95, 0x91, 0x55, 0x28, 0x3b, 0x0c, 0x7c, 0xff, 0x51, 0x5c, 0x33, 0x15, 0xd8, 0x9b, 0xdf, 0xe9, 0x58, 0x7c, 0xc0, 0x01, 0x20, 0xd3, 0xab, 0x31, 0xbb, 0x76, 0x07, 0xbd, 0xb3, 0x01, 0xca, 0xea, 0xf5, 0xe1, 0x5f, 0x5a, 0x6f, 0x58, 0xc9, 0xc5, 0x68, 0xff, 0xb3, 0xd2, 0x34, 0x02, 0x51, 0x6f, 0xfe, 0x23, 0x0c, 0x69, 0x81, 0xa8, 0x1c, 0x17, 0x8a, 0x8a, 0x18, 0xca, 0x33, 0x0b, 0xb8, 0xec, 0xaf, 0xb4, 0x81, 0xb2, 0x49, 0xb4, 0x66, 0xa8, 0xcf, 0x78, 0xb7, 0x0d, 0x9e, 0x78, 0xa1, 0x39, 0xa8, 0x8f, 0x48, 0x4c, 0xce, 0x7c, 0x20, 0x35, 0xb2, 0xe8, 0x9d, 0x49, 0x3b, 0xde, 0x88, 0x5e, 0x1c, 0xde, 0x42, 0xcb, 0x1a, 0x94, 0x49, 0xff, 0x57, 0x0d, 0xcf, 0x9e, 0x33, 0xc5, 0xcc, 0x77, 0xb2, 0x59, 0xbe, 0xe2, 0x83, 0x05, 0x39, 0x68, 0x02, 0xed, 0xc1, 0x6f, 0xc5, 0xa8, 0xe1, 0x0b, 0x56, 0xda, 0x2d, 0xa7, 0x86, 0xb5, 0xfb, 0x6c, 0x81, 0x2b, 0x2e, 0x17, 0x5b, 0x69, 0x6b, 0x1a, 0x9a, 0x96, 0xfc, 0x72, 0x2a, 0x43, 0x21, 0x46, 0x45, 0x0f, 0x07, 0xa6, 0x48, 0xef, 0x3c, 0xcf, 0x99, 0x6e, 0xf3, 0x08, 0x1f, 0xa5, 0xbb, 0x42, 0x21, 0xc9, 0x13, 0xba, 0x22, 0x28, 0x97, 0x0c, 0x9b, 0x0e, 0xa5, 0x26, 0x6b, 0xff } -, - /* Signature */ - 128, - { 0x48, 0x45, 0x8c, 0x72, 0xf0, 0x67, 0xdd, 0x9a, 0xb7, 0x20, 0xef, 0x16, 0x0c, 0xf3, 0x18, 0x4b, 0xb9, 0x80, 0x1e, 0x26, 0xd6, 0x14, 0xa8, 0x89, 0xa8, 0x35, 0x84, 0x41, 0x07, 0xac, 0x01, 0x65, 0x0b, 0x11, 0x84, 0xa0, 0x0b, 0xca, 0xa7, 0xaf, 0x1f, 0xf7, 0xde, 0x3a, 0x2e, 0xf2, 0xe7, 0xce, 0xb5, 0xb2, 0x5c, 0x3b, 0x5d, 0x5b, 0xcb, 0x29, 0x86, 0x59, 0x34, 0x32, 0x47, 0x48, 0xc6, 0x8f, 0x07, 0xde, 0x17, 0x4e, 0x17, 0x80, 0xa7, 0x0f, 0xa2, 0x4d, 0x6a, 0x3a, 0x9f, 0x7a, 0x41, 0xb8, 0x19, 0x37, 0xc4, 0x98, 0x4b, 0x2c, 0xbe, 0x06, 0xb3, 0xd7, 0xb4, 0x4c, 0xda, 0xe9, 0xcb, 0xd4, 0x16, 0x32, 0xd0, 0x09, 0x43, 0xc3, 0xb5, 0x73, 0xb1, 0xaa, 0x29, 0x12, 0x75, 0x0a, 0x9a, 0xeb, 0x07, 0xf1, 0x10, 0x13, 0x0b, 0xa3, 0x61, 0xdc, 0xf8, 0xf5, 0x36, 0x79, 0x0d, 0x60, 0x78, 0x47 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.14", - /* Message to be signed */ - 232, - { 0x99, 0x09, 0x8f, 0x77, 0xf6, 0xed, 0x35, 0xc0, 0x8f, 0xab, 0x3f, 0xa9, 0x78, 0x86, 0x93, 0x67, 0x1a, 0x58, 0x00, 0xdc, 0x30, 0x3c, 0x9c, 0xce, 0x42, 0x46, 0x16, 0xfa, 0x0c, 0x7e, 0xe8, 0x88, 0x86, 0x87, 0x67, 0x4c, 0xa8, 0x8a, 0xb2, 0x2a, 0x5f, 0xf2, 0xd1, 0x2e, 0x2b, 0x38, 0x8b, 0x09, 0x4f, 0xfd, 0x7d, 0xbf, 0x9a, 0x09, 0x27, 0xa9, 0x62, 0x17, 0x17, 0x15, 0x1e, 0x08, 0xec, 0xb8, 0xad, 0xe1, 0x55, 0x9f, 0x4b, 0x48, 0xe2, 0x3d, 0x31, 0xcf, 0x57, 0xcd, 0x38, 0x84, 0xdf, 0xe2, 0xb3, 0xe4, 0xb2, 0x60, 0xe8, 0x96, 0x02, 0x94, 0x07, 0x96, 0x94, 0x96, 0x02, 0x6c, 0x74, 0xa2, 0x18, 0x90, 0xd9, 0xa9, 0xaf, 0xd2, 0xcb, 0xb8, 0xf2, 0x83, 0x0a, 0x56, 0x6a, 0xed, 0x24, 0xf0, 0x16, 0x19, 0x74, 0x01, 0xa8, 0xcd, 0x22, 0xc8, 0x2f, 0xb8, 0xb2, 0x28, 0x91, 0x84, 0x58, 0x24, 0x0a, 0x23, 0xd1, 0x01, 0x85, 0xeb, 0xe7, 0x72, 0xdc, 0x19, 0xbc, 0xfe, 0x3e, 0x44, 0x92, 0x2f, 0xe7, 0x32, 0x09, 0xc1, 0xee, 0x00, 0x40, 0x07, 0x9f, 0xb0, 0x3b, 0x82, 0x7c, 0x82, 0x17, 0xd9, 0xed, 0x7c, 0x98, 0xc9, 0x5f, 0x30, 0x97, 0x4f, 0xbe, 0x4f, 0xbd, 0xdc, 0xf0, 0xf2, 0x8d, 0x60, 0x21, 0xc0, 0xe9, 0x1d, 0xa6, 0x0c, 0xa2, 0xad, 0x77, 0x79, 0x7e, 0xce, 0x86, 0xde, 0x5b, 0xf7, 0x68, 0x75, 0x0d, 0xdb, 0x5e, 0xd6, 0xa3, 0x11, 0x6a, 0xd9, 0x9b, 0xbd, 0x17, 0xed, 0xf7, 0xf7, 0x82, 0xf0, 0xdb, 0x1c, 0xd0, 0x5b, 0x0f, 0x67, 0x74, 0x68, 0xc5, 0xea, 0x42, 0x0d, 0xc1, 0x16, 0xb1, 0x0e, 0x80, 0xd1, 0x10, 0xde, 0x2b, 0x04 } -, - /* Signature */ - 128, - { 0xb4, 0x6a, 0xe8, 0x66, 0x13, 0x91, 0x89, 0xb6, 0xb1, 0x71, 0xa7, 0x62, 0x05, 0xfb, 0x9c, 0xe0, 0x41, 0xb4, 0x02, 0x98, 0xe5, 0xba, 0x92, 0xc2, 0xe9, 0xcc, 0x0b, 0xbf, 0xbb, 0x4a, 0x76, 0x42, 0x5d, 0xe6, 0xce, 0x13, 0x02, 0x1a, 0xe1, 0xa4, 0xa9, 0x42, 0x29, 0x9f, 0x98, 0xff, 0x89, 0xf5, 0x52, 0xf4, 0x3a, 0x90, 0x73, 0xde, 0x64, 0xf4, 0x9c, 0x2c, 0xa3, 0x62, 0x0d, 0x09, 0xd7, 0xe6, 0xe3, 0xfe, 0x28, 0x22, 0x1e, 0x93, 0x68, 0x98, 0x7e, 0x11, 0x0c, 0xd6, 0x06, 0x71, 0x06, 0xc4, 0xdb, 0x31, 0xa0, 0x38, 0x90, 0x23, 0x67, 0x96, 0xc8, 0x42, 0x52, 0xf5, 0x6c, 0x95, 0x03, 0x4a, 0x01, 0xc5, 0xfe, 0x98, 0x1e, 0x81, 0xb6, 0x54, 0x85, 0x5a, 0xaf, 0x27, 0x47, 0x50, 0x11, 0x55, 0x72, 0x0c, 0x21, 0x93, 0xf3, 0xa1, 0xd1, 0x0f, 0x49, 0xfe, 0xe9, 0x0c, 0x52, 0xfe, 0xe9, 0xe4 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.15", - /* Message to be signed */ - 33, - { 0xff, 0x79, 0x06, 0x42, 0x30, 0x5b, 0xf3, 0x02, 0x00, 0x38, 0x92, 0xe5, 0x4d, 0xf9, 0xf6, 0x67, 0x50, 0x9d, 0xc5, 0x39, 0x20, 0xdf, 0x58, 0x3f, 0x50, 0xa3, 0xdd, 0x61, 0xab, 0xb6, 0xfa, 0xb7, 0x5d } -, - /* Signature */ - 128, - { 0x07, 0x56, 0x32, 0x47, 0x73, 0x4f, 0x3c, 0x3d, 0x7a, 0x31, 0x02, 0xbc, 0xb4, 0x5b, 0xb5, 0x68, 0x15, 0x68, 0xed, 0x10, 0xf2, 0xec, 0x45, 0x9e, 0x46, 0x9e, 0x1a, 0x9e, 0x34, 0x09, 0xa1, 0x39, 0xfb, 0x15, 0x1b, 0x98, 0xd3, 0xf3, 0xb6, 0x2d, 0xaa, 0xac, 0x8b, 0x8f, 0x89, 0x16, 0xdf, 0x85, 0xd6, 0xdf, 0xa9, 0xab, 0x76, 0x0d, 0xf1, 0xe1, 0x5a, 0xc8, 0x90, 0x44, 0xe5, 0x79, 0xcf, 0x47, 0xa1, 0xaf, 0x6c, 0xd6, 0xec, 0x70, 0x4c, 0xed, 0x9b, 0x03, 0x4c, 0x6a, 0xaa, 0x90, 0xd0, 0xe7, 0x0e, 0x08, 0x52, 0x14, 0x0e, 0x75, 0x41, 0xf2, 0xef, 0xbe, 0x2c, 0xf1, 0x90, 0xb9, 0x58, 0x94, 0x1e, 0xc8, 0xb5, 0x97, 0x4f, 0x9c, 0x44, 0x4d, 0x26, 0xc3, 0x43, 0x16, 0xc9, 0x21, 0x6b, 0x65, 0x95, 0xe6, 0x56, 0xbc, 0x6c, 0x78, 0x44, 0xfa, 0xc1, 0x6c, 0x51, 0x52, 0x60, 0x92, 0x8e, 0x78 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.16", - /* Message to be signed */ - 91, - { 0xe9, 0x9f, 0xcb, 0xf8, 0x59, 0x2d, 0xbe, 0x2d, 0x7e, 0x27, 0x45, 0x3c, 0xb4, 0x4d, 0xe0, 0x71, 0x00, 0xeb, 0xb1, 0xa2, 0xa1, 0x98, 0x11, 0xa4, 0x78, 0xad, 0xbe, 0xab, 0x27, 0x0f, 0x94, 0xe8, 0xfe, 0x36, 0x9d, 0x90, 0xb3, 0xca, 0x61, 0x2f, 0x9f, 0x22, 0xd7, 0x1d, 0x54, 0x36, 0x3a, 0x42, 0x17, 0xaa, 0x55, 0x11, 0x3f, 0x05, 0x9b, 0x33, 0x84, 0xe3, 0xe5, 0x7e, 0x44, 0x52, 0x28, 0x80, 0x62, 0xaf, 0xc0, 0x8f, 0xcd, 0xb7, 0xc5, 0xf8, 0x65, 0x0b, 0x29, 0x83, 0x73, 0x00, 0x46, 0x1d, 0xd5, 0x67, 0x6c, 0x17, 0xa2, 0x0a, 0x3c, 0x8f, 0xb5, 0x14, 0x89 } -, - /* Signature */ - 128, - { 0x22, 0x74, 0x64, 0x36, 0x16, 0x4e, 0x63, 0x93, 0x78, 0x71, 0xc1, 0xd4, 0x7d, 0x8e, 0x3e, 0x70, 0xc9, 0xe5, 0x2d, 0x11, 0x17, 0x31, 0x6b, 0xb1, 0x54, 0xcd, 0x55, 0x2e, 0x83, 0x6f, 0x2a, 0x3f, 0xbe, 0x6d, 0x89, 0xd6, 0x07, 0x4b, 0x51, 0xb0, 0x15, 0x9c, 0x26, 0xc2, 0x8d, 0xf7, 0x5e, 0x3d, 0x7c, 0xfb, 0x7c, 0xf0, 0x02, 0xf6, 0x5d, 0x1e, 0xe5, 0x21, 0xed, 0xc2, 0xc3, 0xa6, 0x5c, 0x52, 0x6c, 0x98, 0xc7, 0xc0, 0x25, 0xfa, 0x8b, 0xb6, 0x31, 0x47, 0x09, 0x16, 0xd3, 0x01, 0xb8, 0xf7, 0x80, 0x9d, 0xdd, 0x91, 0x9d, 0xed, 0x31, 0xa0, 0xd4, 0x66, 0x83, 0xec, 0x5b, 0xb4, 0x41, 0x70, 0x61, 0x6e, 0xab, 0xcd, 0x97, 0x02, 0x05, 0xed, 0x76, 0x02, 0x02, 0xd0, 0xd8, 0x7a, 0x65, 0x79, 0x59, 0x08, 0xb2, 0x8d, 0x32, 0x6f, 0x93, 0x62, 0x13, 0xf2, 0x9f, 0xeb, 0x59, 0x77, 0x34, 0x91 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.17", - /* Message to be signed */ - 224, - { 0x6a, 0x6a, 0x0c, 0x9b, 0x5b, 0x15, 0xbc, 0xda, 0x19, 0x6a, 0x9d, 0x0c, 0x76, 0xb1, 0x19, 0xd5, 0x34, 0xd8, 0x5a, 0xbd, 0x12, 0x39, 0x62, 0xd5, 0x83, 0xb7, 0x6c, 0xe9, 0xd1, 0x80, 0xbc, 0xe1, 0xca, 0x4a, 0xf8, 0x70, 0xfb, 0xc6, 0x51, 0x60, 0x12, 0xca, 0x91, 0x6c, 0x70, 0xba, 0x86, 0x2a, 0xc7, 0xe8, 0x24, 0x36, 0x17, 0x30, 0x6f, 0x4f, 0x9a, 0xb9, 0x50, 0x11, 0x99, 0xce, 0xf5, 0x5c, 0x6c, 0xf4, 0x08, 0xfe, 0x7b, 0x36, 0xc5, 0x57, 0xc4, 0x9d, 0x42, 0x0a, 0x47, 0x63, 0xd2, 0x46, 0x3c, 0x8a, 0xd4, 0x4b, 0x3c, 0xfc, 0x5b, 0xe2, 0x74, 0x2c, 0x0e, 0x7d, 0x9b, 0x0f, 0x66, 0x08, 0xf0, 0x8c, 0x7f, 0x47, 0xb6, 0x93, 0xee, 0x40, 0xd2, 0xe1, 0x80, 0xfa, 0xe1, 0xea, 0xc4, 0x39, 0xc1, 0x90, 0xb5, 0x6c, 0x2c, 0x0e, 0x14, 0xdd, 0xf9, 0xa2, 0x26, 0xba, 0xe1, 0x7d, 0x20, 0x38, 0x5d, 0x50, 0x19, 0x55, 0x82, 0x3c, 0x3f, 0x66, 0x62, 0x54, 0xc1, 0xd3, 0xdd, 0x36, 0xad, 0x51, 0x68, 0xb8, 0xf1, 0x8d, 0x28, 0x6f, 0xdc, 0xf6, 0x7a, 0x7d, 0xad, 0x94, 0x09, 0x70, 0x85, 0xfa, 0xb7, 0xed, 0x86, 0xfe, 0x21, 0x42, 0xa2, 0x87, 0x71, 0x71, 0x79, 0x97, 0xef, 0x1a, 0x7a, 0x08, 0x88, 0x4e, 0xfc, 0x39, 0x35, 0x6d, 0x76, 0x07, 0x7a, 0xaf, 0x82, 0x45, 0x9a, 0x7f, 0xad, 0x45, 0x84, 0x88, 0x75, 0xf2, 0x81, 0x9b, 0x09, 0x89, 0x37, 0xfe, 0x92, 0x3b, 0xcc, 0x9d, 0xc4, 0x42, 0xd7, 0x2d, 0x75, 0x4d, 0x81, 0x20, 0x25, 0x09, 0x0c, 0x9b, 0xc0, 0x3d, 0xb3, 0x08, 0x0c, 0x13 } -, - /* Signature */ - 128, - { 0x41, 0x93, 0x22, 0xfa, 0xca, 0xce, 0x76, 0xf2, 0xd5, 0xe2, 0xfb, 0xc1, 0x9a, 0xab, 0x86, 0xc7, 0x18, 0xa2, 0x80, 0x64, 0xf1, 0xd7, 0xb4, 0xc6, 0x62, 0xf0, 0x47, 0x4a, 0x87, 0x77, 0xa9, 0x59, 0xbd, 0x65, 0x69, 0x53, 0x8c, 0x16, 0x08, 0x1c, 0x0f, 0x52, 0x69, 0x8b, 0x2f, 0x00, 0x17, 0x30, 0xc0, 0x3b, 0x9a, 0x3d, 0x26, 0x94, 0x73, 0x74, 0xc9, 0x61, 0xfd, 0xed, 0xa1, 0x15, 0xb6, 0xb7, 0xda, 0xf6, 0x65, 0x18, 0xf1, 0xfe, 0x82, 0x0f, 0x67, 0xc3, 0xff, 0x12, 0xf0, 0xbc, 0x3f, 0x11, 0x01, 0xe3, 0x91, 0x1c, 0x43, 0x90, 0x6b, 0x0a, 0x12, 0x7e, 0x50, 0xbe, 0x01, 0x40, 0xc5, 0xef, 0xc4, 0x35, 0xe2, 0x95, 0x7b, 0x44, 0x2e, 0x60, 0xad, 0x52, 0x5a, 0xd7, 0x0a, 0xc9, 0xef, 0x61, 0xc3, 0xd6, 0x4f, 0x0e, 0x56, 0x6c, 0xbc, 0x1f, 0x9d, 0x51, 0xba, 0xe1, 0xd4, 0x72, 0x71, 0xda } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.18", - /* Message to be signed */ - 56, - { 0x3b, 0x93, 0xef, 0x4a, 0x55, 0x50, 0x96, 0x69, 0x19, 0x15, 0xdc, 0x23, 0xc0, 0x0e, 0x95, 0x4c, 0xde, 0xb2, 0x0a, 0x47, 0xcd, 0x55, 0xd1, 0x6c, 0x3d, 0x86, 0x81, 0xd4, 0x6e, 0xd7, 0xf2, 0xed, 0x5e, 0xa4, 0x27, 0x95, 0xbe, 0x17, 0xba, 0xed, 0x25, 0xf0, 0xf4, 0xd1, 0x13, 0xb3, 0x63, 0x6a, 0xdd, 0xd5, 0x85, 0xf1, 0x6a, 0x8b, 0x5a, 0xec } -, - /* Signature */ - 128, - { 0xae, 0x21, 0x1f, 0x4f, 0x77, 0xda, 0x1b, 0xe6, 0xaf, 0x9c, 0x9e, 0xa7, 0x04, 0xdb, 0xac, 0x4b, 0x3f, 0x3e, 0x27, 0x0d, 0x2f, 0xac, 0xf3, 0x65, 0x1d, 0x78, 0x7d, 0x0e, 0xbf, 0x59, 0xa7, 0x9a, 0x39, 0x61, 0x2d, 0xa1, 0x2d, 0x57, 0xc4, 0xac, 0x8a, 0xbc, 0x72, 0x8e, 0x1d, 0xa3, 0xf0, 0x1a, 0x15, 0x20, 0xfc, 0x9b, 0x32, 0xcb, 0x0f, 0xfe, 0x00, 0x8c, 0x80, 0x69, 0x92, 0x8f, 0x83, 0xe1, 0x35, 0x90, 0xa7, 0x8b, 0x81, 0x7e, 0x81, 0x9f, 0xbf, 0x2f, 0xd0, 0x58, 0x93, 0xec, 0xe5, 0xb1, 0x41, 0x86, 0xd9, 0x01, 0xc7, 0x68, 0xe3, 0x42, 0xdc, 0x54, 0x72, 0x23, 0x45, 0xae, 0x8a, 0xa8, 0x73, 0x8d, 0x4d, 0x59, 0x70, 0xc5, 0x08, 0x54, 0x72, 0xbd, 0x98, 0x99, 0xfa, 0x00, 0x42, 0xcf, 0x14, 0xbc, 0xed, 0xff, 0xdb, 0xc0, 0xef, 0x50, 0x81, 0x90, 0x75, 0x84, 0x2f, 0xc3, 0x6b, 0xb8 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.19", - /* Message to be signed */ - 62, - { 0x49, 0xff, 0xd5, 0x6b, 0xf7, 0xef, 0xc1, 0x13, 0x04, 0xa5, 0xaf, 0xbc, 0x19, 0xd4, 0x79, 0x24, 0x90, 0x18, 0xfd, 0xf4, 0xe0, 0x9f, 0x61, 0x87, 0x26, 0x44, 0x04, 0x95, 0xde, 0x11, 0xdd, 0xee, 0xe3, 0x88, 0x72, 0xd7, 0x75, 0xfc, 0xea, 0x74, 0xa2, 0x38, 0x96, 0xb5, 0x34, 0x3c, 0x9c, 0x38, 0xd4, 0x6a, 0xf0, 0xdb, 0xa2, 0x24, 0xd0, 0x47, 0x58, 0x0c, 0xc6, 0x0a, 0x65, 0xe9 } -, - /* Signature */ - 128, - { 0x68, 0xfb, 0x0b, 0xd5, 0x19, 0xbf, 0x6f, 0x96, 0xe0, 0x76, 0xaf, 0x29, 0x01, 0x2f, 0x3c, 0x3a, 0x11, 0x37, 0xc0, 0x98, 0x8d, 0xe7, 0xb6, 0xfc, 0xed, 0xf4, 0xf5, 0x1b, 0xdf, 0xee, 0x64, 0x5b, 0x89, 0x7f, 0x17, 0x70, 0x9e, 0x05, 0xca, 0xa0, 0xb1, 0x13, 0x50, 0x0d, 0x90, 0x4d, 0xc0, 0x60, 0x0d, 0x17, 0xa9, 0xff, 0x8e, 0xb0, 0x2e, 0x1e, 0xfc, 0x9c, 0x46, 0x7a, 0x24, 0x00, 0x3e, 0xf8, 0x1e, 0x72, 0x74, 0x67, 0xc4, 0x7d, 0xd6, 0x56, 0x35, 0x6d, 0x70, 0x37, 0x2a, 0x15, 0xea, 0x88, 0x41, 0x21, 0x63, 0x4b, 0x01, 0x5d, 0x29, 0x51, 0x1f, 0x28, 0x95, 0x55, 0x77, 0x99, 0x07, 0x9d, 0x03, 0xc6, 0xd4, 0xde, 0x25, 0x9b, 0x3b, 0x36, 0x2b, 0x80, 0x49, 0x2d, 0x81, 0xbc, 0x9f, 0xe8, 0x54, 0x44, 0x63, 0xec, 0x03, 0x0b, 0xb5, 0xc9, 0xc7, 0x3c, 0x32, 0x74, 0xe3, 0xed, 0x12, 0x22 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 3.20", - /* Message to be signed */ - 136, - { 0xbc, 0x25, 0x5a, 0xf8, 0x9a, 0x6a, 0x19, 0x9b, 0xca, 0x4a, 0x39, 0x1e, 0xad, 0xbc, 0x3a, 0x24, 0x90, 0x3c, 0x0b, 0xd6, 0x67, 0x36, 0x8f, 0x6b, 0xe7, 0x8e, 0x3f, 0xea, 0xbf, 0xb4, 0xff, 0xd4, 0x63, 0x12, 0x27, 0x63, 0x74, 0x0f, 0xfb, 0xbe, 0xfe, 0xab, 0x9a, 0x25, 0x56, 0x4b, 0xc5, 0xd1, 0xc2, 0x4c, 0x93, 0xe4, 0x22, 0xf7, 0x50, 0x73, 0xe2, 0xad, 0x72, 0xbf, 0x45, 0xb1, 0x0d, 0xf0, 0x0b, 0x52, 0xa1, 0x47, 0x12, 0x8e, 0x73, 0xfe, 0xe3, 0x3f, 0xa3, 0xf0, 0x57, 0x7d, 0x77, 0xf8, 0x0f, 0xbc, 0x2d, 0xf1, 0xbe, 0xd3, 0x13, 0x29, 0x0c, 0x12, 0x77, 0x7f, 0x50, 0xa3, 0x34, 0xdb, 0x6f, 0xae, 0xbf, 0x11, 0x08, 0x1a, 0x04, 0xf8, 0x7c, 0x2d, 0x62, 0x1c, 0xde, 0xc7, 0x93, 0x0b, 0x9b, 0x18, 0x3a, 0x99, 0x04, 0x75, 0xdc, 0xbb, 0x9c, 0xc7, 0xf3, 0x45, 0xa3, 0xb5, 0x58, 0x03, 0x03, 0x0c, 0xf0, 0x36, 0x1a, 0x5d, 0x80, 0x81 } -, - /* Signature */ - 128, - { 0x41, 0xf6, 0x52, 0xdf, 0x79, 0xfd, 0xd2, 0x6d, 0xe9, 0x5c, 0x7a, 0x98, 0xfa, 0x85, 0x87, 0x13, 0xfb, 0x56, 0x6d, 0x8b, 0x39, 0x92, 0x8e, 0x71, 0x76, 0x4b, 0x2b, 0xeb, 0x19, 0x84, 0x03, 0xe0, 0x3b, 0x7e, 0x06, 0xdc, 0x96, 0x0c, 0x50, 0x51, 0x57, 0xbd, 0xf4, 0x05, 0x92, 0xc4, 0xd7, 0x75, 0x03, 0xfb, 0x72, 0xa4, 0xe0, 0x05, 0x5f, 0x97, 0x4f, 0xe9, 0x39, 0x44, 0x8d, 0xa3, 0x68, 0xf5, 0x3b, 0xd2, 0xef, 0xe2, 0x6e, 0x6f, 0x9a, 0x25, 0x4b, 0x3e, 0x87, 0x32, 0xaa, 0xd8, 0x16, 0x87, 0xb3, 0x61, 0xe2, 0x1a, 0x40, 0xcf, 0x3e, 0x5e, 0x92, 0x38, 0x9a, 0x2b, 0x48, 0x9c, 0x05, 0xc5, 0x97, 0xf0, 0xe1, 0x64, 0xe2, 0x67, 0x70, 0x93, 0x72, 0x00, 0x43, 0x27, 0x16, 0x35, 0x62, 0xdd, 0x8a, 0x0a, 0xdb, 0xbd, 0xfe, 0x3b, 0xc6, 0x16, 0xbd, 0x08, 0x42, 0x96, 0x84, 0xc2, 0x0c, 0x69 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 4: A 1024-bit RSA key pair", -{ - /* Modulus */ - 128, - { 0xd1, 0x31, 0xe0, 0x92, 0x43, 0x37, 0x0d, 0xd2, 0xcd, 0x54, 0x25, 0xc8, 0xd0, 0x30, 0xf9, 0x9a, 0xdb, 0x10, 0x5b, 0x14, 0x7b, 0x8a, 0x3d, 0x00, 0x67, 0xc6, 0x16, 0x44, 0x3b, 0x7d, 0x4b, 0x96, 0x82, 0x38, 0xe0, 0x6d, 0xbb, 0x5f, 0x20, 0x28, 0xe8, 0x53, 0x57, 0x4b, 0x7c, 0x14, 0xbe, 0x10, 0x83, 0xc1, 0xe5, 0x7e, 0x13, 0x2c, 0x1d, 0xf4, 0xa3, 0xa2, 0x71, 0x32, 0x63, 0xfa, 0xde, 0x12, 0xf7, 0x11, 0x4f, 0x43, 0x69, 0xbb, 0xf0, 0x56, 0x20, 0x55, 0x48, 0x41, 0x33, 0x1e, 0xd8, 0x11, 0x00, 0x50, 0x52, 0x19, 0x25, 0x72, 0xce, 0xb4, 0x8d, 0x66, 0x24, 0x07, 0xfd, 0x30, 0x81, 0xcf, 0xab, 0x8b, 0x48, 0xc7, 0xe9, 0x2d, 0x3c, 0x4a, 0x26, 0xa9, 0x64, 0x5a, 0x38, 0xe6, 0xde, 0xe8, 0x8b, 0xb0, 0x07, 0x59, 0x75, 0xa4, 0xda, 0xd9, 0x64, 0x6b, 0x21, 0x60, 0x38, 0x40, 0xaf, 0x5f } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x56, 0xb5, 0x31, 0xbb, 0xee, 0x18, 0x37, 0xa6, 0x94, 0x6c, 0xb8, 0x6c, 0x8f, 0xbe, 0x7c, 0xf6, 0xee, 0xad, 0xcc, 0xd2, 0xa4, 0x92, 0x1b, 0xce, 0xbb, 0x34, 0xa3, 0xae, 0x0c, 0x6a, 0x56, 0x96, 0x3f, 0xcb, 0x8b, 0x5a, 0x70, 0x3b, 0x71, 0x7d, 0x03, 0x2e, 0xe8, 0x13, 0xe5, 0x8e, 0x43, 0x69, 0x5c, 0xf3, 0x55, 0x47, 0xf8, 0x72, 0x64, 0xc8, 0x2d, 0xba, 0xfa, 0xe8, 0x44, 0x00, 0x8b, 0x62, 0xd9, 0x12, 0x2e, 0x9d, 0xe8, 0x95, 0x85, 0x60, 0xc8, 0xdb, 0xb0, 0x07, 0x72, 0x7e, 0x71, 0x39, 0xe0, 0xa9, 0x82, 0xe0, 0x75, 0x88, 0x14, 0x11, 0x3d, 0xe5, 0x4b, 0xa0, 0xa4, 0x55, 0x17, 0x51, 0xfc, 0xa0, 0xfc, 0xb1, 0x2d, 0x8d, 0xe3, 0x0d, 0x78, 0xb8, 0xb1, 0x12, 0x98, 0xa7, 0xf7, 0x8f, 0x0b, 0x08, 0x8f, 0x16, 0x87, 0x05, 0x3c, 0x84, 0xa5, 0x76, 0x2f, 0x62, 0xa4, 0xbd, 0x05, 0xc1 } -, - /* Prime 1 */ - 64, - { 0xee, 0x22, 0xa4, 0x24, 0x62, 0xf7, 0x71, 0x8d, 0xfe, 0xcf, 0x02, 0x4b, 0x17, 0xc9, 0x26, 0x76, 0x78, 0x05, 0x91, 0x71, 0x33, 0x9c, 0xc0, 0x07, 0x06, 0x52, 0x60, 0xd3, 0x04, 0x7e, 0x5f, 0x89, 0xfe, 0xd9, 0x10, 0x34, 0x28, 0x43, 0x37, 0x8c, 0x22, 0x68, 0x5d, 0x53, 0x2e, 0x84, 0xd2, 0x59, 0x3a, 0x7c, 0x8c, 0x02, 0x6a, 0x87, 0x66, 0xc5, 0xa2, 0xb2, 0xed, 0x55, 0x8e, 0x88, 0x23, 0x19 } -, - /* Prime 2 */ - 64, - { 0xe0, 0xe3, 0x70, 0x0c, 0x99, 0xa3, 0xe8, 0x15, 0xd7, 0x4b, 0x75, 0x2a, 0x84, 0xfb, 0x42, 0xec, 0x20, 0xe5, 0x20, 0x3c, 0xa7, 0xc1, 0xaf, 0x97, 0xfb, 0xf3, 0x97, 0xb9, 0x5d, 0x11, 0x05, 0x37, 0x6c, 0xf5, 0xd6, 0x3e, 0x3c, 0x57, 0xbf, 0xa6, 0x58, 0x55, 0xe5, 0x08, 0x14, 0x6c, 0x86, 0xdb, 0xaa, 0xb2, 0x89, 0xc9, 0x5b, 0xc0, 0x45, 0x5a, 0x58, 0x2d, 0xd8, 0xf5, 0x3f, 0xfb, 0xed, 0x37 } -, - /* Prime exponent 1 */ - 64, - { 0xd1, 0xf1, 0x34, 0x68, 0xe7, 0xdf, 0x62, 0xfb, 0x5e, 0xb3, 0xbe, 0x3f, 0xd9, 0xde, 0x7a, 0xcc, 0x63, 0x0f, 0xf5, 0xa3, 0xa9, 0x6e, 0xfe, 0x54, 0xb3, 0x1c, 0x19, 0x44, 0xb0, 0x67, 0x81, 0x6f, 0x35, 0x80, 0xc4, 0xaa, 0x56, 0xfc, 0xbb, 0x92, 0x0e, 0x1b, 0x98, 0x7b, 0x67, 0x3d, 0xad, 0xfd, 0x00, 0x75, 0x21, 0x32, 0x58, 0x1c, 0xbb, 0x5c, 0x6e, 0x0d, 0xf4, 0xf3, 0x42, 0xcf, 0x7e, 0xb1 } -, - /* Prime exponent 2 */ - 64, - { 0xac, 0xd0, 0xda, 0x38, 0x34, 0x90, 0xea, 0x36, 0x6e, 0x7d, 0xc4, 0x09, 0xea, 0xab, 0x13, 0x20, 0x55, 0x9e, 0xfd, 0x88, 0xde, 0xf9, 0x4e, 0x30, 0xa3, 0x22, 0xec, 0x03, 0x3b, 0xeb, 0x6a, 0x70, 0xcf, 0x40, 0x93, 0x64, 0xbc, 0x06, 0x4a, 0x76, 0x50, 0x07, 0xa1, 0xba, 0xf5, 0xc6, 0xf8, 0x53, 0x31, 0xf7, 0x85, 0x3e, 0xc1, 0x4d, 0x1d, 0x7e, 0x71, 0xa8, 0xb9, 0xc2, 0xad, 0x6a, 0xb1, 0x3d } -, - /* Coefficient */ - 64, - { 0x1e, 0xda, 0x83, 0xd4, 0xa6, 0xd0, 0x99, 0xb6, 0x0b, 0x2b, 0x2b, 0x84, 0xc6, 0xae, 0x41, 0x65, 0xc7, 0x22, 0x50, 0x3e, 0xbd, 0x37, 0x3c, 0x83, 0x6f, 0x97, 0x35, 0xca, 0x3b, 0x20, 0xa3, 0xeb, 0x08, 0x1b, 0x31, 0xe7, 0x83, 0x04, 0x13, 0x20, 0xdf, 0xc6, 0xdd, 0xf9, 0x05, 0x14, 0xca, 0xb6, 0xec, 0x4b, 0x80, 0xae, 0x0c, 0x05, 0x2d, 0xd1, 0xe7, 0xce, 0x34, 0x18, 0xae, 0xee, 0x24, 0xa4 } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 4.1", - /* Message to be signed */ - 174, - { 0x2c, 0x93, 0x6b, 0xf6, 0x13, 0x3a, 0x96, 0x93, 0xf1, 0x46, 0xee, 0x5a, 0x1a, 0x91, 0xc2, 0xf1, 0x69, 0xb2, 0xe6, 0x44, 0xa5, 0x18, 0xe8, 0x5a, 0x75, 0xf6, 0xe4, 0x3b, 0x56, 0x0d, 0x4a, 0x72, 0xf3, 0x8c, 0x64, 0xf8, 0x4c, 0x05, 0x24, 0x0e, 0x8b, 0x4e, 0x55, 0x78, 0x61, 0x63, 0xe7, 0x27, 0x62, 0x65, 0xba, 0x21, 0x3b, 0xa9, 0x3d, 0xee, 0x1b, 0x2e, 0x10, 0x21, 0x35, 0xa9, 0x89, 0xb6, 0x24, 0x8e, 0x88, 0x32, 0x7e, 0x30, 0x03, 0x61, 0xa7, 0x4f, 0x2e, 0x9b, 0xc4, 0x1f, 0x2a, 0x37, 0x68, 0x3f, 0x1a, 0x1a, 0x15, 0xf9, 0xdd, 0x47, 0x2e, 0x11, 0x8e, 0x1c, 0x4b, 0x3e, 0xde, 0x58, 0xdd, 0x70, 0xf3, 0xba, 0xcc, 0x25, 0x2e, 0x0c, 0x65, 0x4b, 0x0f, 0x7a, 0x6e, 0x41, 0xa9, 0x28, 0x75, 0x10, 0xef, 0xa0, 0x3b, 0xc9, 0x2e, 0x80, 0x5e, 0x5b, 0x2c, 0x91, 0x3f, 0x51, 0xe2, 0x5c, 0x7f, 0x85, 0x86, 0x40, 0xca, 0xfa, 0xc9, 0xd3, 0xc9, 0x17, 0x68, 0x65, 0x07, 0xfa, 0x94, 0xf8, 0x86, 0x6f, 0x86, 0x9a, 0x4e, 0x5a, 0x6a, 0x3d, 0x4f, 0x9d, 0x97, 0xed, 0x81, 0x37, 0xf4, 0x14, 0xd1, 0x44, 0x7a, 0x86, 0xee, 0xf9, 0xe1, 0x49, 0x69, 0x94, 0xad, 0x2d, 0xa5, 0x97 } -, - /* Signature */ - 128, - { 0x9e, 0x93, 0xf7, 0xac, 0xc5, 0x0f, 0xb3, 0xa0, 0xb1, 0x24, 0x3d, 0xc3, 0x38, 0xc8, 0xcc, 0xb1, 0x2b, 0xca, 0xb4, 0xaa, 0x45, 0x04, 0x40, 0xb6, 0x30, 0x6c, 0x81, 0xb5, 0x0b, 0x8f, 0x95, 0xa9, 0x36, 0xdd, 0x16, 0x63, 0x30, 0xc6, 0x99, 0xb2, 0x85, 0x80, 0xda, 0x1b, 0xe2, 0x75, 0x61, 0x64, 0x02, 0xda, 0x85, 0xbf, 0xd8, 0xee, 0xfc, 0xd6, 0x99, 0x35, 0x87, 0xe6, 0x09, 0x28, 0x65, 0xd8, 0x25, 0x3b, 0x04, 0x08, 0x1d, 0x57, 0x2f, 0x26, 0x27, 0x59, 0xf5, 0x56, 0xdf, 0xb9, 0x11, 0xe8, 0xd9, 0x4e, 0x92, 0xe5, 0x5a, 0xf6, 0xd5, 0x89, 0x80, 0x18, 0xff, 0x33, 0xe5, 0xf6, 0xb1, 0xf9, 0x90, 0x19, 0x96, 0xe9, 0x2f, 0xaf, 0x33, 0x6e, 0x2d, 0xcc, 0xe3, 0xab, 0x0a, 0x93, 0xdb, 0x93, 0x2e, 0x94, 0x2c, 0xc6, 0x47, 0x8d, 0x6c, 0xc2, 0xfb, 0x66, 0x08, 0x11, 0x91, 0x0c, 0xcd, 0x17 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 4.2", - /* Message to be signed */ - 154, - { 0x94, 0x32, 0x3f, 0x7c, 0x38, 0xb9, 0x95, 0xcc, 0x6b, 0xd8, 0x5d, 0x47, 0x9f, 0x8d, 0xe2, 0xde, 0xc1, 0xef, 0x2e, 0x84, 0xb1, 0xfe, 0xef, 0xec, 0xf3, 0x91, 0x50, 0xb5, 0xd9, 0xf2, 0xcb, 0x15, 0x85, 0xac, 0x0d, 0x71, 0x9a, 0xb3, 0x48, 0xbd, 0xc9, 0x75, 0x0d, 0xdb, 0x8e, 0x32, 0x76, 0xdb, 0x89, 0x81, 0x87, 0x35, 0xbd, 0x62, 0x31, 0x41, 0x3c, 0xbc, 0xa2, 0xde, 0x94, 0x1b, 0x55, 0xe8, 0xcf, 0xa1, 0xab, 0x13, 0x2c, 0xc7, 0x8a, 0xa4, 0xf2, 0xb5, 0x1f, 0xd6, 0x57, 0x8e, 0xe2, 0xe0, 0x32, 0xe9, 0x0e, 0x34, 0x08, 0x0f, 0x0f, 0x8e, 0x3d, 0xb1, 0x4d, 0x1b, 0x56, 0xf3, 0xd0, 0x77, 0xf2, 0x9d, 0xbc, 0x02, 0x16, 0xa4, 0x13, 0x44, 0x99, 0x8c, 0x0f, 0xe1, 0xab, 0x41, 0x22, 0x47, 0xdf, 0x21, 0xe7, 0x4e, 0xc2, 0x2f, 0x5d, 0xb0, 0x14, 0x8e, 0xca, 0xf4, 0x73, 0xee, 0xec, 0xcc, 0x14, 0xff, 0x9e, 0x45, 0xd5, 0x8c, 0x2e, 0x62, 0xb5, 0xfe, 0x6a, 0x50, 0x1a, 0xb9, 0x6f, 0xd7, 0xc5, 0xed, 0xde, 0xf1, 0x4a, 0xa8, 0x92, 0x66, 0x69, 0x2e } -, - /* Signature */ - 128, - { 0x09, 0x40, 0x2a, 0x43, 0x56, 0xbe, 0x73, 0x44, 0x9b, 0x46, 0x9e, 0x36, 0x31, 0xe1, 0xb0, 0x23, 0x07, 0xc5, 0xca, 0xc2, 0xce, 0x15, 0x28, 0xd7, 0x84, 0xfa, 0xb9, 0x26, 0xdf, 0xf5, 0x1f, 0x86, 0x24, 0x1b, 0x9d, 0x66, 0xf7, 0x9d, 0x6d, 0x8e, 0xee, 0xeb, 0x24, 0x9d, 0x76, 0xfa, 0x9f, 0x16, 0x6f, 0xf9, 0xa8, 0xc6, 0xa3, 0x9e, 0x83, 0x2d, 0x5d, 0x14, 0xb9, 0xd7, 0xec, 0x5a, 0x3d, 0xc2, 0x8f, 0x01, 0xeb, 0xb0, 0x6e, 0x39, 0xd5, 0x9e, 0x84, 0x61, 0xb9, 0x55, 0xb2, 0xa7, 0xf5, 0xb1, 0xf2, 0x04, 0xb0, 0x4c, 0xc6, 0xcc, 0x62, 0x64, 0x61, 0x61, 0xac, 0x1c, 0x2b, 0xf5, 0xba, 0xb5, 0x0f, 0x06, 0x8c, 0x90, 0x8d, 0x28, 0xde, 0x5e, 0xae, 0xf7, 0xe8, 0xeb, 0xfc, 0xab, 0xb0, 0x9b, 0x7d, 0x75, 0xd8, 0x35, 0x40, 0xdd, 0x4b, 0x35, 0x4d, 0x13, 0x1d, 0x86, 0xf0, 0x77, 0x07, 0x17 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.3", - /* Message to be signed */ - 154, - { 0x0e, 0x23, 0x3b, 0x25, 0x49, 0xbd, 0xd2, 0x1b, 0xa5, 0x14, 0x80, 0xda, 0x8e, 0x3d, 0xce, 0xf4, 0xdb, 0x20, 0xe0, 0xdc, 0xc0, 0x5e, 0xe2, 0x37, 0x35, 0x1e, 0xdb, 0xc9, 0xa5, 0x3c, 0x52, 0xf6, 0x74, 0xd1, 0x05, 0xfe, 0xc0, 0x93, 0x9d, 0x36, 0x99, 0x64, 0x7e, 0xfc, 0x1e, 0x25, 0xcb, 0x4e, 0x9b, 0x1a, 0xb7, 0x52, 0xab, 0x6f, 0xe2, 0x88, 0x69, 0xff, 0x73, 0xf2, 0x3e, 0x01, 0xee, 0xf8, 0x67, 0x4c, 0x53, 0x5c, 0x4c, 0x93, 0x35, 0xf7, 0x98, 0xf1, 0xde, 0xec, 0xd4, 0x89, 0xd0, 0x6d, 0xc8, 0x8f, 0xd6, 0xbc, 0x1d, 0x49, 0x96, 0xef, 0xf7, 0x2b, 0x43, 0x9e, 0x3c, 0x01, 0x4d, 0xd1, 0x4c, 0xbf, 0x17, 0x71, 0x5c, 0x15, 0x89, 0x43, 0xde, 0x2e, 0x6f, 0x97, 0x1c, 0x34, 0x99, 0x87, 0xa1, 0xb3, 0x95, 0xd6, 0x82, 0xc3, 0xb0, 0xc1, 0x7b, 0x66, 0xcd, 0x3c, 0xa4, 0x10, 0x60, 0xb5, 0x71, 0x11, 0xe2, 0x28, 0x31, 0x4b, 0x2d, 0x34, 0xb5, 0xe4, 0x4e, 0x55, 0xf1, 0xc1, 0x1c, 0x31, 0xa6, 0xeb, 0x80, 0xb5, 0xf8, 0x2d, 0x96, 0xbd, 0x4a, 0x17 } -, - /* Signature */ - 128, - { 0xd0, 0x75, 0xbe, 0x06, 0xcb, 0xd6, 0x22, 0x3e, 0x87, 0x1b, 0x0f, 0x33, 0x62, 0xa7, 0x97, 0xde, 0x28, 0x2d, 0xa5, 0xc4, 0x03, 0x23, 0xf3, 0x7c, 0x2c, 0xc3, 0x74, 0x65, 0xa1, 0xa8, 0x63, 0x68, 0xdd, 0xcf, 0xa6, 0xda, 0xa1, 0x35, 0x86, 0x6c, 0x32, 0x03, 0xd0, 0x47, 0x22, 0x60, 0xb2, 0x9c, 0x3c, 0x9b, 0x1b, 0x88, 0x94, 0x08, 0x5d, 0x54, 0x7c, 0x5e, 0xb9, 0x31, 0x42, 0x4f, 0x24, 0x14, 0x0a, 0x5c, 0xba, 0x15, 0x3b, 0xde, 0xd4, 0xb9, 0xce, 0x7d, 0xae, 0xdc, 0x64, 0x5d, 0x39, 0x80, 0xc5, 0xf5, 0x83, 0xf7, 0x67, 0x11, 0xc6, 0x7b, 0x19, 0x3a, 0x52, 0x12, 0xf2, 0xa9, 0x35, 0x4a, 0x67, 0x96, 0xaf, 0x09, 0x08, 0x20, 0x91, 0x31, 0x34, 0xec, 0xf3, 0x05, 0xbe, 0xfb, 0x65, 0x32, 0xcd, 0x48, 0xd4, 0x11, 0x3a, 0x0e, 0xc4, 0x86, 0x9a, 0x0a, 0x56, 0x55, 0xdb, 0xdc, 0x72, 0x59 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.4", - /* Message to be signed */ - 103, - { 0xd4, 0x7c, 0x0f, 0x5c, 0x92, 0x2e, 0x4f, 0x80, 0x9e, 0x9c, 0xee, 0xd2, 0x07, 0xf1, 0x24, 0xa5, 0xac, 0xde, 0x37, 0xfa, 0x14, 0x63, 0x8e, 0x8f, 0xbd, 0x0a, 0x72, 0xfe, 0x45, 0x26, 0x21, 0x95, 0x8e, 0x37, 0x68, 0x2c, 0x6f, 0xf2, 0x83, 0xf3, 0xd5, 0x1d, 0xa1, 0x52, 0xaa, 0x1f, 0x63, 0x74, 0xcd, 0x27, 0xd2, 0xa4, 0xa5, 0x33, 0x05, 0x39, 0x16, 0xdf, 0xf1, 0xc0, 0x7b, 0xa9, 0x36, 0x31, 0x74, 0x81, 0x69, 0x63, 0x60, 0x69, 0x04, 0x58, 0xd8, 0xd1, 0xe5, 0xd6, 0x6c, 0x35, 0xf9, 0xc9, 0x9a, 0x50, 0x55, 0xd9, 0xf7, 0xcf, 0xe7, 0x60, 0x5c, 0xca, 0x57, 0xea, 0xc3, 0x35, 0xad, 0xe2, 0xef, 0xf6, 0xb5, 0xaa, 0x62, 0x7d, 0x5b } -, - /* Signature */ - 128, - { 0x11, 0x86, 0x0b, 0xf4, 0xd7, 0x45, 0x19, 0xff, 0x8c, 0xfc, 0xce, 0x3d, 0x33, 0xe3, 0xaa, 0xbd, 0xf7, 0x71, 0x40, 0xa1, 0x56, 0x36, 0xb2, 0x67, 0x8d, 0xf9, 0x67, 0x31, 0x44, 0xc2, 0x41, 0xb0, 0xa9, 0x9a, 0x0a, 0x37, 0xf2, 0x92, 0xca, 0xd5, 0x1d, 0xf0, 0xb6, 0x3b, 0x14, 0xf8, 0xab, 0x17, 0xe3, 0xfa, 0x15, 0x58, 0x77, 0x90, 0xfb, 0x06, 0x2b, 0x5f, 0x26, 0x6c, 0x16, 0x6b, 0x2c, 0xa7, 0x51, 0x57, 0xa0, 0xf9, 0xe1, 0xa5, 0xc8, 0xec, 0x26, 0xb9, 0x19, 0x9d, 0x07, 0x18, 0x77, 0x99, 0x80, 0x6a, 0x1d, 0xe9, 0x87, 0x15, 0xfb, 0xe5, 0x27, 0x57, 0xa7, 0x03, 0x77, 0x3c, 0x91, 0x8a, 0x00, 0x0c, 0x21, 0x1a, 0x78, 0x22, 0x85, 0x25, 0xcb, 0x52, 0xeb, 0x44, 0x1b, 0x26, 0x9b, 0x3f, 0x33, 0x05, 0x0e, 0xd1, 0x93, 0x5a, 0xc0, 0xe8, 0x59, 0x63, 0x19, 0xae, 0x80, 0xc7, 0x5b, 0x84 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.5", - /* Message to be signed */ - 107, - { 0xbe, 0xbd, 0x9d, 0xde, 0xa3, 0xab, 0xf9, 0xf8, 0xeb, 0x58, 0x55, 0x97, 0x66, 0xf8, 0xb3, 0xab, 0x83, 0x53, 0x52, 0x38, 0xc4, 0x3d, 0xcd, 0x81, 0xa2, 0x94, 0x93, 0x03, 0xa9, 0x5f, 0x05, 0x5a, 0x83, 0x40, 0xce, 0xee, 0x16, 0x15, 0xe5, 0x8d, 0xf1, 0xe0, 0x14, 0xc7, 0x55, 0x2d, 0x76, 0x9f, 0x88, 0x41, 0xba, 0x09, 0x97, 0x5c, 0xef, 0xe7, 0xe4, 0x8d, 0xfc, 0x6a, 0x26, 0x49, 0xe8, 0x20, 0x03, 0xe7, 0xbf, 0x42, 0x0e, 0x70, 0x10, 0x1b, 0x32, 0x7d, 0x91, 0x70, 0xf7, 0x3e, 0x8d, 0x88, 0x7c, 0xd2, 0x98, 0xf5, 0x3d, 0xc1, 0xbf, 0xc8, 0x82, 0xcf, 0x0e, 0xfc, 0xfa, 0xd6, 0xe8, 0x6a, 0x0e, 0x7f, 0x90, 0x94, 0xc4, 0xf2, 0x6c, 0x46, 0x92, 0x1e, 0x09 } -, - /* Signature */ - 128, - { 0x84, 0xa2, 0x6f, 0xbe, 0x67, 0x01, 0x0a, 0xa1, 0xef, 0x2d, 0x6c, 0x79, 0x26, 0x32, 0x39, 0xb9, 0x78, 0xf4, 0xe8, 0x93, 0xdd, 0x1e, 0xc6, 0xf0, 0x7d, 0x23, 0x17, 0xf1, 0x51, 0xa2, 0xa1, 0xb3, 0x23, 0xe5, 0x05, 0xf9, 0x45, 0x0c, 0x37, 0xdf, 0x6b, 0x1b, 0xf3, 0xe2, 0x4f, 0x38, 0xb6, 0x36, 0xbf, 0x77, 0x4e, 0x96, 0x74, 0x1f, 0xfa, 0xa7, 0x69, 0xcf, 0xd7, 0xa8, 0xa6, 0xb3, 0xa5, 0xef, 0xab, 0xa2, 0x3a, 0xab, 0x3a, 0x43, 0x7a, 0x22, 0x5b, 0xd9, 0x41, 0x86, 0xe9, 0x1d, 0x39, 0x2b, 0xed, 0x2e, 0xad, 0x8a, 0x78, 0xf3, 0x81, 0xf4, 0x09, 0x49, 0xcf, 0x1f, 0x3d, 0x27, 0x24, 0x58, 0x1f, 0x25, 0x70, 0x4b, 0xdf, 0x66, 0x08, 0xdd, 0x11, 0x9e, 0x36, 0xd8, 0x7d, 0x03, 0x55, 0xe6, 0x70, 0x6c, 0x8a, 0x52, 0x59, 0xfd, 0x60, 0xc8, 0xdf, 0x13, 0xbc, 0x62, 0xaa, 0x9f, 0xd5, 0x7a } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.6", - /* Message to be signed */ - 247, - { 0x9d, 0x19, 0x8e, 0x2c, 0x6e, 0x12, 0xf7, 0x4a, 0x9a, 0x08, 0x1b, 0xcf, 0x70, 0xfc, 0x04, 0x16, 0x8a, 0x49, 0xe0, 0x9c, 0x5f, 0xaa, 0xa0, 0x11, 0xe9, 0xa0, 0x9e, 0x2c, 0x43, 0xee, 0x2c, 0xd3, 0x9b, 0xb2, 0xf7, 0xe5, 0x68, 0x2d, 0xea, 0xb1, 0xfa, 0x11, 0x1e, 0x41, 0xa3, 0x19, 0x4a, 0x20, 0xa8, 0x6d, 0xa5, 0x51, 0x01, 0x82, 0x4d, 0x3d, 0x78, 0xa7, 0xe3, 0x2d, 0xb2, 0xb6, 0x0a, 0xa7, 0x73, 0x77, 0x0b, 0x57, 0x39, 0x07, 0xb4, 0x09, 0xa2, 0x59, 0x2c, 0x83, 0xf3, 0x47, 0xfe, 0xbb, 0x2d, 0x5c, 0x85, 0xe9, 0x25, 0x5d, 0x6d, 0xc1, 0x2a, 0xaa, 0x33, 0x5a, 0xdf, 0xbb, 0x5d, 0xc8, 0x62, 0xd7, 0x86, 0x19, 0x53, 0xe2, 0x68, 0x7d, 0x53, 0x03, 0xb6, 0x86, 0xff, 0xf9, 0x63, 0x4e, 0xe4, 0xd1, 0x5c, 0xbc, 0xc2, 0x9f, 0x7a, 0x35, 0x05, 0xa7, 0x3d, 0xeb, 0x6f, 0x9e, 0x38, 0x8e, 0x96, 0x85, 0xff, 0xf4, 0xd5, 0x45, 0x0f, 0x1e, 0x32, 0x75, 0x35, 0x9a, 0x2b, 0x99, 0x44, 0x0c, 0x67, 0x39, 0xf5, 0xb9, 0x1e, 0xbd, 0x14, 0xef, 0x78, 0xae, 0x73, 0xc1, 0xa6, 0x19, 0x11, 0xf5, 0xae, 0x3a, 0x2b, 0x91, 0x49, 0x67, 0x49, 0x17, 0x27, 0x81, 0x80, 0x65, 0xee, 0x01, 0x0d, 0xf4, 0x9d, 0x5a, 0x16, 0xed, 0x8d, 0xce, 0xe8, 0x48, 0xae, 0x09, 0x48, 0xa2, 0x52, 0x4e, 0xac, 0x7c, 0x4f, 0xf9, 0x09, 0x6c, 0xed, 0x61, 0x35, 0x76, 0x42, 0xc5, 0xe0, 0xf8, 0x06, 0x80, 0xaf, 0xff, 0xce, 0x0b, 0xa7, 0xeb, 0x59, 0x58, 0x99, 0x49, 0x52, 0x6f, 0xf5, 0x12, 0x35, 0xcd, 0xc7, 0x2d, 0x47, 0xa2, 0x7b, 0x39, 0xb8, 0xd4, 0xac, 0x84, 0x9c, 0x3b, 0xc0, 0x4f, 0xa8, 0x36, 0xcf, 0x18, 0x4b, 0xae, 0x0c, 0x83, 0x41, 0x59, 0x56 } -, - /* Signature */ - 128, - { 0x38, 0xef, 0x24, 0x5b, 0x94, 0x0d, 0x93, 0x97, 0x0a, 0x50, 0x3b, 0xf4, 0x3e, 0x28, 0xe1, 0x7b, 0x8a, 0xff, 0x08, 0x3c, 0xcb, 0xe1, 0xe9, 0xc4, 0x8e, 0x4d, 0x80, 0xf5, 0x16, 0xc2, 0x7d, 0x08, 0x5c, 0xa2, 0xa4, 0xe5, 0x73, 0x23, 0x6a, 0x24, 0x94, 0xd9, 0xb9, 0x97, 0xf8, 0x12, 0x48, 0x48, 0x12, 0xf6, 0x65, 0x25, 0xd0, 0x6c, 0x0a, 0x0b, 0xb2, 0x13, 0x0c, 0x15, 0xd6, 0xce, 0x18, 0xb2, 0x2f, 0x3c, 0xee, 0x57, 0x09, 0x7f, 0xc0, 0xd5, 0x58, 0xaf, 0xd9, 0xaf, 0x27, 0xf1, 0x51, 0xf8, 0x43, 0x6f, 0xbc, 0x87, 0xd6, 0xbe, 0x61, 0x42, 0x64, 0x7a, 0x17, 0xe0, 0x4d, 0xf6, 0xde, 0xc7, 0x0a, 0x95, 0xc7, 0xda, 0xa8, 0x4e, 0xde, 0x94, 0xcc, 0xb4, 0x3e, 0x1d, 0x2c, 0x37, 0xb9, 0x45, 0x81, 0x73, 0x10, 0xd1, 0x4a, 0x22, 0xb5, 0xb9, 0xae, 0x61, 0x14, 0x48, 0xee, 0x41, 0xbc, 0x70 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.7", - /* Message to be signed */ - 47, - { 0x8e, 0x8b, 0xa8, 0x43, 0x6f, 0xe3, 0x10, 0x4b, 0x7c, 0xe2, 0xa4, 0xef, 0xc3, 0x6c, 0x85, 0x7d, 0x49, 0xe8, 0x49, 0xc0, 0x08, 0x5f, 0xc6, 0x57, 0xba, 0xa0, 0x33, 0x17, 0x93, 0xb3, 0xf3, 0x6c, 0x7c, 0xe7, 0x38, 0xb6, 0x13, 0x0b, 0xfa, 0xc7, 0x5e, 0x50, 0x11, 0xf3, 0x2a, 0xa3, 0xd1 } -, - /* Signature */ - 128, - { 0x78, 0x44, 0x69, 0x9f, 0x1c, 0x4f, 0x29, 0x6e, 0x50, 0x26, 0x1f, 0x15, 0x26, 0xe0, 0xdd, 0x84, 0xf0, 0x1c, 0x82, 0xcb, 0x85, 0xfa, 0x24, 0x60, 0x9e, 0xb0, 0x33, 0x58, 0x75, 0x2c, 0x6c, 0xf5, 0x99, 0x94, 0xd8, 0x4e, 0x12, 0xf4, 0x6a, 0x72, 0x00, 0xcf, 0x5a, 0xd9, 0x7c, 0x08, 0xdd, 0x4f, 0xfc, 0x44, 0x65, 0x7d, 0xb5, 0x72, 0x14, 0xcd, 0x1f, 0x4e, 0xed, 0x6b, 0x77, 0xd2, 0x39, 0xfb, 0x58, 0x21, 0x69, 0x88, 0xc5, 0xe5, 0xbc, 0x73, 0x5a, 0x4f, 0xdf, 0xf4, 0x08, 0xeb, 0x9f, 0x12, 0x79, 0xd6, 0x5b, 0xba, 0xf6, 0xa6, 0x81, 0x92, 0x44, 0x18, 0x34, 0x9e, 0x62, 0xff, 0x5e, 0x58, 0x15, 0xea, 0xea, 0x59, 0x2d, 0x90, 0xd1, 0xee, 0xf5, 0x56, 0xfc, 0xd4, 0xd5, 0xb4, 0xb8, 0x9c, 0x6c, 0x70, 0x73, 0x9d, 0x6f, 0x0d, 0x3d, 0x0b, 0xd1, 0x6a, 0x50, 0xf1, 0xe0, 0x02, 0x4e, 0x98 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.8", - /* Message to be signed */ - 185, - { 0x58, 0x5f, 0xa6, 0xa7, 0xf7, 0x7a, 0x4b, 0x6e, 0xba, 0x56, 0x90, 0xe7, 0x3e, 0x71, 0x28, 0xb7, 0x2e, 0x67, 0x7c, 0xdb, 0x3a, 0xaa, 0x86, 0x29, 0xed, 0x61, 0xf2, 0xee, 0x63, 0xaf, 0x1a, 0x71, 0xba, 0x87, 0x13, 0x6a, 0x52, 0xdb, 0x1a, 0x33, 0x21, 0xfc, 0xfe, 0xb2, 0x48, 0xbf, 0x2e, 0x5c, 0xf5, 0xc6, 0x39, 0x57, 0x1d, 0x58, 0x95, 0xad, 0xf1, 0xfb, 0x06, 0x17, 0xed, 0x14, 0x0a, 0x2a, 0x0d, 0x98, 0x37, 0xc3, 0xc1, 0xd8, 0x45, 0x0c, 0x28, 0x9d, 0x33, 0xbc, 0x96, 0x23, 0x79, 0xd7, 0x3e, 0x30, 0x87, 0xf2, 0xb7, 0xee, 0x6e, 0xad, 0xd6, 0x65, 0x01, 0x48, 0xc0, 0x42, 0xb6, 0xff, 0x04, 0x48, 0x21, 0x96, 0xc7, 0x18, 0xfd, 0xc0, 0xce, 0x57, 0x9c, 0xeb, 0x62, 0xa8, 0x1e, 0x58, 0x43, 0x73, 0xeb, 0x93, 0x75, 0x40, 0xc4, 0x26, 0xb5, 0x56, 0x6a, 0x9f, 0x40, 0x7c, 0xfc, 0xcf, 0xbc, 0x4b, 0x75, 0x36, 0x94, 0xaf, 0x0d, 0xf4, 0xcd, 0x6a, 0xa9, 0xf1, 0x65, 0x46, 0xa6, 0x33, 0x94, 0xa0, 0xf6, 0x57, 0x73, 0x71, 0x34, 0x3f, 0xfd, 0xdb, 0x65, 0x1a, 0x62, 0xa3, 0xa5, 0x8e, 0xdd, 0xec, 0x67, 0xa2, 0x9c, 0xca, 0xe8, 0x96, 0x56, 0x3c, 0x63, 0xe3, 0xc9, 0x0d, 0x54, 0xd9, 0x13, 0x58, 0xad, 0xf1, 0x94, 0xe6, 0xaa, 0xb1, 0xf9 } -, - /* Signature */ - 128, - { 0x68, 0x93, 0x35, 0x1c, 0x73, 0x91, 0x5f, 0xac, 0x47, 0xc9, 0x62, 0xcc, 0x60, 0x17, 0xca, 0x74, 0xa5, 0xb5, 0xee, 0x4c, 0xb1, 0xbb, 0x5a, 0x10, 0xad, 0xa2, 0xa4, 0x31, 0x58, 0xa2, 0x26, 0x1e, 0xb2, 0x7b, 0x86, 0x6d, 0xb3, 0x9d, 0x35, 0x90, 0xb4, 0xf8, 0xd2, 0x0e, 0xe6, 0x7c, 0xb1, 0xa5, 0x78, 0x94, 0x63, 0x15, 0x0d, 0x83, 0x93, 0x43, 0x23, 0x25, 0x43, 0xc8, 0x26, 0x50, 0x51, 0x01, 0xe1, 0xd2, 0x57, 0x04, 0x26, 0xab, 0x9f, 0xef, 0xd6, 0x5b, 0xa8, 0x4f, 0xaa, 0xec, 0x73, 0x1f, 0x27, 0x37, 0x4a, 0xb1, 0x01, 0x91, 0xc9, 0x60, 0x83, 0x16, 0x93, 0xf2, 0x9a, 0x85, 0x4c, 0x38, 0x12, 0x85, 0x99, 0xf7, 0x28, 0x77, 0x49, 0xb0, 0xb4, 0x8b, 0xf7, 0xe9, 0xdf, 0xda, 0xed, 0xc8, 0x4e, 0xec, 0xe0, 0x71, 0x40, 0x45, 0x84, 0x73, 0x0c, 0xec, 0xce, 0x0d, 0x5c, 0xf0, 0x05, 0xcc } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.9", - /* Message to be signed */ - 5, - { 0x78, 0x3c, 0x18, 0xb1, 0x1f } -, - /* Signature */ - 128, - { 0x13, 0x2f, 0xdf, 0xb8, 0x41, 0x93, 0xdf, 0xb7, 0x9f, 0xdf, 0xe6, 0xba, 0xbc, 0x2e, 0xfd, 0x39, 0xb2, 0x6a, 0xa2, 0x09, 0x68, 0xa0, 0x7c, 0x0e, 0x41, 0x56, 0x0e, 0xe4, 0xdf, 0xcd, 0x4f, 0xca, 0x79, 0x17, 0x49, 0x0f, 0x24, 0xe8, 0xdf, 0x84, 0xf4, 0xe0, 0x11, 0x5a, 0x3e, 0x63, 0x27, 0x3e, 0x7a, 0x3b, 0x12, 0x8a, 0xbb, 0xbd, 0x17, 0xb8, 0xaa, 0x5a, 0x06, 0xba, 0x15, 0x5e, 0xcb, 0x23, 0x0f, 0xe7, 0x97, 0x26, 0x04, 0x79, 0x95, 0x70, 0x10, 0xe4, 0x4b, 0xa5, 0x75, 0x29, 0x2e, 0xc3, 0xf1, 0x51, 0xab, 0xf4, 0x8e, 0x91, 0x03, 0xe5, 0x51, 0x42, 0xec, 0x67, 0xa4, 0x13, 0x4d, 0xd8, 0xf3, 0x8e, 0xc6, 0x59, 0xf9, 0xa7, 0x89, 0xfd, 0x03, 0x41, 0xce, 0xf2, 0xbb, 0xcf, 0x9f, 0x52, 0x9b, 0x93, 0x21, 0x8f, 0xc3, 0xe4, 0x3a, 0x76, 0x69, 0x69, 0xd1, 0xbf, 0x87, 0x88, 0x48, 0x07 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.10", - /* Message to be signed */ - 85, - { 0x96, 0xdc, 0x98, 0xb0, 0xeb, 0x84, 0xf5, 0x59, 0x48, 0x30, 0x7a, 0xdd, 0xec, 0xcb, 0xe7, 0x64, 0x39, 0xca, 0x36, 0x58, 0xbc, 0x36, 0x35, 0x96, 0x24, 0xc8, 0xfe, 0x2f, 0xa0, 0x9c, 0x52, 0xe4, 0x7a, 0xcd, 0xc3, 0x2a, 0x15, 0x6d, 0x90, 0x76, 0x82, 0x41, 0x0a, 0x85, 0x67, 0xab, 0xca, 0xfd, 0xc6, 0xd8, 0xbb, 0x53, 0x25, 0x35, 0x9e, 0xc7, 0x5f, 0xfd, 0xb7, 0x3e, 0xe0, 0xa9, 0x51, 0x5a, 0x4d, 0xdf, 0x9a, 0x31, 0xe5, 0xd5, 0x19, 0x46, 0x03, 0x74, 0x28, 0x0a, 0xda, 0x30, 0xde, 0x7d, 0xd5, 0x34, 0xde, 0xaa, 0x57 } -, - /* Signature */ - 128, - { 0x8f, 0xb4, 0x3d, 0xc8, 0xf0, 0x6f, 0x2b, 0xa4, 0x8f, 0x19, 0xbe, 0x5b, 0x1a, 0x09, 0x31, 0x21, 0x3a, 0x99, 0x0a, 0xed, 0x9c, 0x9f, 0xed, 0x1d, 0xe5, 0xd6, 0xf3, 0x5a, 0x2a, 0x78, 0x2f, 0x0a, 0x19, 0x8f, 0xf6, 0x38, 0x8d, 0x96, 0xe9, 0xd5, 0x9b, 0x88, 0xe9, 0x78, 0x22, 0xf3, 0x49, 0xff, 0x41, 0x64, 0xee, 0xa5, 0x0a, 0x62, 0x93, 0x5c, 0x61, 0xcb, 0xc7, 0x6e, 0x3d, 0xf7, 0x5f, 0x68, 0x4d, 0x96, 0x24, 0x75, 0xe5, 0x63, 0x59, 0x64, 0x96, 0xc9, 0x88, 0x0a, 0x48, 0xed, 0x97, 0x8a, 0x63, 0x15, 0xa3, 0x45, 0x57, 0x17, 0x91, 0xcb, 0x2d, 0xdc, 0x88, 0xda, 0xbe, 0x41, 0x87, 0x98, 0xa6, 0xa4, 0x41, 0xc4, 0x7a, 0xfb, 0xb1, 0xcd, 0x15, 0x21, 0x3e, 0xca, 0x3b, 0x11, 0x15, 0xec, 0x8f, 0x58, 0xf8, 0x77, 0xbe, 0x8f, 0xbd, 0x38, 0xf4, 0xfd, 0xae, 0xf9, 0x39, 0xf5, 0x26, 0x40 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.11", - /* Message to be signed */ - 115, - { 0x37, 0x20, 0x01, 0x59, 0x9d, 0x99, 0x30, 0xc7, 0xd5, 0x57, 0x45, 0x8b, 0x43, 0x6d, 0xec, 0xfd, 0xc1, 0x4d, 0x06, 0xcb, 0x7b, 0x96, 0xb0, 0x67, 0x18, 0xc4, 0x8d, 0x7d, 0xe5, 0x74, 0x82, 0xa8, 0x68, 0xae, 0x7f, 0x06, 0x58, 0x70, 0xa6, 0x21, 0x65, 0x06, 0xd1, 0x1b, 0x77, 0x93, 0x23, 0xdf, 0xdf, 0x04, 0x6c, 0xf5, 0x77, 0x51, 0x29, 0x13, 0x4b, 0x4d, 0x56, 0x89, 0xe4, 0xd9, 0xc0, 0xce, 0x1e, 0x12, 0xd7, 0xd4, 0xb0, 0x6c, 0xb5, 0xfc, 0x58, 0x20, 0xde, 0xcf, 0xa4, 0x1b, 0xaf, 0x59, 0xbf, 0x25, 0x7b, 0x32, 0xf0, 0x25, 0xb7, 0x67, 0x9b, 0x44, 0x5b, 0x94, 0x99, 0xc9, 0x25, 0x55, 0x14, 0x58, 0x85, 0x99, 0x2f, 0x1b, 0x76, 0xf8, 0x48, 0x91, 0xee, 0x4d, 0x3b, 0xe0, 0xf5, 0x15, 0x0f, 0xd5, 0x90 } -, - /* Signature */ - 128, - { 0xa8, 0x97, 0xc7, 0xf9, 0x72, 0xe1, 0x17, 0x49, 0xe1, 0xe7, 0xc1, 0x55, 0xce, 0x94, 0x62, 0xaa, 0x7e, 0x1c, 0xc0, 0xa9, 0x79, 0xc1, 0x27, 0x29, 0x79, 0x51, 0x26, 0xcb, 0x8c, 0x0e, 0xa5, 0x02, 0x21, 0xc4, 0x26, 0xf1, 0xbb, 0x06, 0xc1, 0xca, 0xf7, 0xc5, 0x1a, 0xc2, 0xfb, 0xd9, 0x4d, 0x68, 0x8d, 0xa6, 0x7d, 0xdf, 0x3e, 0xf6, 0x66, 0x06, 0xe9, 0x89, 0xa1, 0x6d, 0xe1, 0xf9, 0x2b, 0x17, 0x70, 0x6f, 0x88, 0xe8, 0x7d, 0x9f, 0x14, 0x69, 0xa0, 0x05, 0xc9, 0xfd, 0x76, 0x78, 0x8e, 0xe8, 0xc4, 0xa7, 0xf0, 0x12, 0x09, 0xe2, 0x8b, 0x86, 0xf6, 0x74, 0x88, 0x1a, 0xf5, 0x7d, 0xb6, 0xc3, 0x42, 0x9b, 0x6f, 0xb4, 0x56, 0x98, 0xbf, 0x5d, 0x30, 0x07, 0xf6, 0x1c, 0x7d, 0x44, 0x11, 0x78, 0xad, 0x12, 0x43, 0xa4, 0x9b, 0x2a, 0xa6, 0x02, 0x9b, 0xfe, 0x90, 0x2d, 0x26, 0xe4, 0x23, 0x75 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.12", - /* Message to be signed */ - 35, - { 0xbf, 0xbf, 0xd0, 0x73, 0x21, 0xf0, 0xf1, 0xd5, 0xfa, 0x9f, 0xdf, 0x00, 0x14, 0xc2, 0xfc, 0xb0, 0x35, 0x8a, 0xad, 0x0e, 0x35, 0x4b, 0x0d, 0x29, 0x08, 0x1b, 0x23, 0x3b, 0x43, 0x56, 0x77, 0x50, 0xbd, 0x6e, 0x78 } -, - /* Signature */ - 128, - { 0xc2, 0x4d, 0x31, 0x04, 0x94, 0x09, 0xaa, 0x16, 0xd3, 0xf9, 0x72, 0xef, 0x8b, 0x75, 0x95, 0xea, 0xa0, 0x07, 0x83, 0x3e, 0x2b, 0xcd, 0xc7, 0x50, 0x48, 0x52, 0xf2, 0x50, 0x5f, 0xba, 0x1f, 0xc1, 0x5f, 0x19, 0xa0, 0xea, 0xdd, 0xe8, 0x33, 0x5c, 0x73, 0x06, 0xfc, 0x3f, 0x51, 0x66, 0x1d, 0xa5, 0x20, 0xec, 0xc8, 0xdb, 0x7f, 0x47, 0x38, 0x85, 0xca, 0xbd, 0xe9, 0x3f, 0x0c, 0xeb, 0xf1, 0xdf, 0x9e, 0x8a, 0x82, 0x37, 0x0b, 0x00, 0xa0, 0x43, 0xad, 0x63, 0x2c, 0xdc, 0xc7, 0x8f, 0x3f, 0xac, 0x1d, 0x8a, 0x37, 0x57, 0xfc, 0x8e, 0x52, 0x41, 0xbf, 0xed, 0x55, 0xc4, 0x96, 0x04, 0xac, 0x19, 0xab, 0xda, 0xc0, 0xc9, 0xc4, 0x0d, 0xa3, 0x73, 0xc1, 0x5f, 0x3c, 0x1b, 0xcc, 0x97, 0x3f, 0xfb, 0x4f, 0x8b, 0x7b, 0x5b, 0x55, 0x3a, 0xe0, 0x75, 0xe1, 0xb1, 0xbd, 0xdd, 0xd2, 0x3d, 0x7d, 0x2a } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.13", - /* Message to be signed */ - 107, - { 0xc6, 0x97, 0x39, 0xd2, 0x2a, 0xc8, 0x96, 0x6b, 0xf1, 0x1c, 0x11, 0x6f, 0x61, 0x4b, 0x16, 0x67, 0x40, 0xe9, 0x6b, 0x90, 0x65, 0x3e, 0x57, 0x50, 0x94, 0x5f, 0xcf, 0x77, 0x21, 0x86, 0xc0, 0x37, 0x90, 0xa0, 0x7f, 0xda, 0x32, 0x3e, 0x1a, 0x61, 0x91, 0x6b, 0x06, 0xee, 0x21, 0x57, 0xdb, 0x3d, 0xff, 0x80, 0xd6, 0x7d, 0x5e, 0x39, 0xa5, 0x3a, 0xe2, 0x68, 0xc8, 0xf0, 0x9e, 0xd9, 0x9a, 0x73, 0x20, 0x05, 0xb0, 0xbc, 0x6a, 0x04, 0xaf, 0x4e, 0x08, 0xd5, 0x7a, 0x00, 0xe7, 0x20, 0x1b, 0x30, 0x60, 0xef, 0xaa, 0xdb, 0x73, 0x11, 0x3b, 0xfc, 0x08, 0x7f, 0xd8, 0x37, 0x09, 0x3a, 0xa2, 0x52, 0x35, 0xb8, 0xc1, 0x49, 0xf5, 0x62, 0x15, 0xf0, 0x31, 0xc2, 0x4a } -, - /* Signature */ - 128, - { 0xd0, 0x6d, 0x32, 0x26, 0x0d, 0xa2, 0xdb, 0x48, 0x10, 0x4f, 0xbd, 0xc2, 0x4e, 0x16, 0xa6, 0x5b, 0x48, 0x73, 0x7d, 0x43, 0xce, 0x24, 0x37, 0x04, 0x04, 0x2a, 0xad, 0x6c, 0x03, 0xfd, 0xe5, 0xa3, 0xdc, 0x0f, 0x2c, 0xc6, 0xe3, 0xad, 0x68, 0xc3, 0xc6, 0x2e, 0xab, 0xfa, 0x1f, 0x7b, 0x1c, 0xab, 0x00, 0x9d, 0x11, 0x75, 0xaf, 0xf7, 0x7b, 0xe5, 0x8f, 0xb1, 0x2a, 0x4e, 0x58, 0x12, 0x7f, 0xed, 0x63, 0xea, 0x3d, 0xf4, 0x41, 0x81, 0xbd, 0xa3, 0x8c, 0x77, 0x3c, 0x83, 0xb9, 0xe8, 0x04, 0xbb, 0x3d, 0xb7, 0x96, 0x32, 0x63, 0xdf, 0x30, 0xe9, 0x2c, 0x4c, 0x27, 0x19, 0x56, 0xe7, 0xe8, 0x10, 0x45, 0x2c, 0x15, 0xe0, 0x6e, 0x93, 0x96, 0x66, 0xdf, 0x0c, 0x83, 0x34, 0x03, 0x30, 0x96, 0xc0, 0x7d, 0xea, 0x05, 0xb4, 0x4e, 0xbb, 0x14, 0x24, 0x92, 0xe7, 0x66, 0x91, 0x31, 0xeb, 0xcf, 0x2c } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.14", - /* Message to be signed */ - 16, - { 0x73, 0x30, 0x47, 0xf3, 0x36, 0xf9, 0x15, 0x47, 0x38, 0x67, 0x45, 0x47, 0xdb, 0x02, 0xa9, 0xf4 } -, - /* Signature */ - 128, - { 0xc1, 0x13, 0xc0, 0x46, 0x5c, 0x84, 0xcb, 0xfb, 0x0f, 0xa1, 0xbd, 0xbc, 0x54, 0xc3, 0xe1, 0x06, 0x8c, 0xa2, 0x3e, 0x69, 0xb8, 0x39, 0x19, 0x09, 0xc3, 0x90, 0x0f, 0xe5, 0xb4, 0xe7, 0xe3, 0xf0, 0x34, 0xc9, 0xa9, 0x88, 0xa3, 0xdd, 0xc3, 0xc3, 0x81, 0x75, 0x6a, 0x1e, 0x1a, 0x27, 0xc1, 0xec, 0xfb, 0x3a, 0x70, 0xe1, 0xee, 0x0e, 0x92, 0x04, 0x18, 0xac, 0x4a, 0xb6, 0xd9, 0x53, 0x2b, 0x8d, 0x09, 0x59, 0xa6, 0x53, 0xb4, 0xc5, 0x08, 0x67, 0x06, 0x63, 0x46, 0x2b, 0x2e, 0x13, 0x58, 0x16, 0xb6, 0x94, 0xa6, 0xb9, 0xb4, 0x68, 0xa2, 0x9f, 0x38, 0xde, 0x53, 0xbf, 0xcd, 0xdf, 0x97, 0xe0, 0x3d, 0x8d, 0xd2, 0x4f, 0x97, 0x26, 0x33, 0xa4, 0x9c, 0xf3, 0xea, 0xae, 0x1d, 0x69, 0x62, 0x94, 0x38, 0x60, 0xdd, 0x25, 0x43, 0x40, 0x08, 0x6b, 0x10, 0x35, 0x7b, 0x80, 0xc1, 0xcf, 0xbf, 0x31 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.15", - /* Message to be signed */ - 119, - { 0xa9, 0x74, 0x0b, 0x9a, 0xa0, 0xd3, 0x40, 0x58, 0xfd, 0x3b, 0x90, 0x6e, 0x4f, 0x78, 0x59, 0xdf, 0xb0, 0x7d, 0x71, 0x73, 0xe5, 0xe6, 0xf6, 0x35, 0x0a, 0xda, 0xc2, 0x1f, 0x27, 0xb2, 0x30, 0x74, 0x69, 0xbd, 0x0c, 0xe1, 0x95, 0x49, 0xd0, 0x70, 0x01, 0x20, 0xcb, 0xe5, 0x10, 0x77, 0xdb, 0xbb, 0xb0, 0x0a, 0x8d, 0x8b, 0x09, 0xde, 0x8d, 0x83, 0x96, 0xe3, 0x65, 0x07, 0xfe, 0x1e, 0xf6, 0xa1, 0x90, 0x17, 0x54, 0x8e, 0x0c, 0x71, 0x66, 0x74, 0xc2, 0xfe, 0xc2, 0x33, 0xad, 0xb2, 0xf7, 0x75, 0x66, 0x5e, 0xc4, 0x1f, 0x2b, 0xd0, 0xba, 0x39, 0x6b, 0x06, 0x1a, 0x9d, 0xaa, 0x7e, 0x86, 0x6f, 0x7c, 0x23, 0xfd, 0x35, 0x31, 0x95, 0x43, 0x00, 0xa3, 0x42, 0xf9, 0x24, 0x53, 0x5e, 0xa1, 0x49, 0x8c, 0x48, 0xf6, 0xc8, 0x79, 0x93, 0x28 } -, - /* Signature */ - 128, - { 0x4f, 0xbd, 0x4f, 0xb2, 0x37, 0x04, 0xf4, 0x14, 0x9a, 0xda, 0x32, 0x7f, 0xa5, 0x33, 0x88, 0x52, 0x6a, 0x07, 0xdd, 0x43, 0xd9, 0x15, 0xfc, 0xbd, 0xa9, 0xa1, 0x3b, 0xb2, 0xa3, 0x73, 0x8f, 0x4a, 0xdb, 0x1c, 0x3d, 0xb2, 0x6a, 0xb6, 0x90, 0x48, 0x80, 0x5a, 0x80, 0xc8, 0x16, 0x05, 0xc9, 0x6d, 0x68, 0xf8, 0x41, 0x80, 0x2f, 0x5a, 0xbb, 0x02, 0x05, 0x7b, 0x61, 0x1f, 0xe2, 0xf3, 0x94, 0x71, 0x62, 0x65, 0xe5, 0x45, 0x25, 0x2c, 0x23, 0x0c, 0xe4, 0x74, 0xaf, 0xf0, 0xbb, 0xd4, 0xff, 0x1f, 0x38, 0x08, 0x49, 0x60, 0x36, 0xa4, 0x94, 0x8c, 0xa7, 0xa1, 0x10, 0xff, 0x26, 0xc6, 0x38, 0xc5, 0x0f, 0x32, 0x15, 0xb2, 0x8a, 0x09, 0xf2, 0x3a, 0xf6, 0xf8, 0x4c, 0xdc, 0x89, 0x78, 0x98, 0xd0, 0xfd, 0x22, 0x3b, 0x13, 0x48, 0x1f, 0xe8, 0x92, 0xb1, 0xa5, 0x8b, 0xa2, 0xe4, 0xb3, 0x68, 0x5b } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.16", - /* Message to be signed */ - 51, - { 0xaf, 0x8f, 0x08, 0x87, 0xc2, 0x19, 0x00, 0x4d, 0x2a, 0xbd, 0x89, 0x4e, 0xa9, 0x25, 0x59, 0xee, 0x31, 0x98, 0xaf, 0x3a, 0x73, 0x4f, 0xe9, 0xb9, 0x63, 0x8c, 0x26, 0x3a, 0x72, 0x8a, 0xd9, 0x5a, 0x5a, 0xe8, 0xce, 0x3e, 0xb1, 0x58, 0x39, 0xf3, 0xaa, 0x78, 0x52, 0xbb, 0x39, 0x07, 0x06, 0xe7, 0x76, 0x0e, 0x43 } -, - /* Signature */ - 128, - { 0x32, 0x7e, 0xc9, 0xd0, 0xbe, 0x7a, 0xab, 0x7b, 0xc9, 0x59, 0xd4, 0x02, 0x27, 0xe1, 0xd0, 0x04, 0x81, 0xfc, 0x04, 0x01, 0x1f, 0xe0, 0x8f, 0xd5, 0x44, 0x9b, 0x90, 0xc0, 0xf0, 0x54, 0xe0, 0xd6, 0x59, 0xb9, 0x26, 0xcc, 0x81, 0x29, 0x21, 0xc2, 0x0a, 0x56, 0x3c, 0x4a, 0xbe, 0x4f, 0x82, 0x5d, 0x6b, 0x5e, 0xef, 0x57, 0xb3, 0xe2, 0xd6, 0x5d, 0x20, 0xa8, 0x01, 0x3a, 0x50, 0xdd, 0x5c, 0x93, 0x23, 0x8c, 0xf0, 0x49, 0xf2, 0xff, 0x0c, 0x7e, 0xbe, 0xb8, 0xe8, 0xca, 0xf7, 0x2e, 0x46, 0xe7, 0xcf, 0x8a, 0x0c, 0x3f, 0x49, 0x25, 0x61, 0x6b, 0x1b, 0xc1, 0x82, 0x6f, 0xfc, 0xb0, 0xbd, 0xa6, 0x0b, 0xbe, 0xbe, 0xdf, 0xd4, 0xc6, 0x0f, 0x27, 0x88, 0xd1, 0x66, 0x6f, 0xb8, 0x45, 0x11, 0x85, 0x36, 0x46, 0xc2, 0xdd, 0x46, 0x68, 0x51, 0xfa, 0xc8, 0x5b, 0xe0, 0xed, 0x5a, 0xce, 0x5f, 0xe2 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.17", - /* Message to be signed */ - 115, - { 0x38, 0xdf, 0x86, 0x55, 0x7f, 0x37, 0x5d, 0x09, 0xcc, 0xd8, 0xbd, 0x15, 0xd8, 0xcc, 0xf6, 0x1f, 0x5d, 0x78, 0xca, 0x5c, 0x7f, 0x5c, 0xde, 0x78, 0x2e, 0x6b, 0xf5, 0xd0, 0x05, 0x70, 0x56, 0xd4, 0xba, 0xd9, 0x8b, 0x3d, 0x2f, 0x95, 0x75, 0xe8, 0x24, 0xab, 0x7a, 0x33, 0xff, 0x57, 0xb0, 0xac, 0x10, 0x0a, 0xb0, 0xd6, 0xea, 0xd7, 0xaa, 0x0b, 0x50, 0xf6, 0xe4, 0xd3, 0xe5, 0xec, 0x0b, 0x96, 0x6b, 0x81, 0x57, 0x79, 0xa9, 0x1b, 0x3a, 0x8b, 0xd0, 0x49, 0xbf, 0x2a, 0xeb, 0x92, 0x01, 0x42, 0x77, 0x22, 0x22, 0xc9, 0xca, 0x0c, 0x32, 0x8c, 0x65, 0x9e, 0x0a, 0x64, 0x37, 0x43, 0x3c, 0xce, 0xb7, 0x3c, 0x14, 0x9a, 0xec, 0x4a, 0x74, 0x80, 0xd5, 0xbb, 0xc4, 0x29, 0x20, 0xd7, 0xca, 0x23, 0x5d, 0xb6, 0x74 } -, - /* Signature */ - 128, - { 0x30, 0x46, 0x05, 0x5c, 0x2b, 0x8e, 0xf7, 0xfa, 0x92, 0xc8, 0xa9, 0xe3, 0x95, 0x98, 0x5b, 0xd4, 0x60, 0xfb, 0x6b, 0x47, 0x98, 0x65, 0x53, 0x94, 0x4d, 0x21, 0x04, 0x51, 0x19, 0xf7, 0xe7, 0x61, 0x7e, 0x03, 0xfe, 0x80, 0x87, 0x0a, 0xc6, 0xaa, 0xbf, 0x63, 0xb0, 0x96, 0xca, 0xd5, 0xcc, 0xe7, 0xf5, 0x06, 0x95, 0x3a, 0x7f, 0x69, 0x3f, 0xe1, 0x37, 0xad, 0xfb, 0x97, 0xcd, 0x45, 0x81, 0x28, 0xae, 0x95, 0xc4, 0x7c, 0xa9, 0x48, 0xda, 0xcf, 0x24, 0x03, 0x6a, 0xde, 0xaa, 0x48, 0xf2, 0x9a, 0x46, 0x9f, 0xb5, 0x13, 0x19, 0x1e, 0x05, 0xac, 0xf7, 0x9e, 0x67, 0xa7, 0x93, 0xa3, 0xaf, 0x5e, 0x4f, 0x9c, 0x6d, 0x0d, 0x01, 0xfd, 0xd0, 0xe0, 0xcd, 0x42, 0x96, 0xad, 0x3d, 0xa2, 0xca, 0x89, 0xa5, 0x0e, 0xed, 0xcd, 0x9f, 0x7b, 0x87, 0x7d, 0x2a, 0xe1, 0xd5, 0x8d, 0x98, 0xdc, 0xd7, 0x8f } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.18", - /* Message to be signed */ - 12, - { 0xcb, 0x34, 0xed, 0xd5, 0xab, 0x65, 0x40, 0x41, 0xb6, 0x14, 0x30, 0x56 } -, - /* Signature */ - 128, - { 0x1d, 0xdf, 0x48, 0xba, 0x53, 0x51, 0xbe, 0xd0, 0x79, 0x5f, 0x55, 0xb3, 0x06, 0xaa, 0x1c, 0x6e, 0xd8, 0x36, 0xf5, 0x92, 0xba, 0x93, 0xcf, 0x0c, 0x46, 0xb7, 0xc2, 0x73, 0x70, 0x9d, 0x36, 0xb8, 0xdf, 0xf0, 0x2a, 0xbd, 0xb1, 0xa7, 0x68, 0xd1, 0xc7, 0x11, 0x4a, 0x86, 0xa4, 0x57, 0x49, 0x6d, 0xa5, 0x79, 0xe4, 0xd8, 0x19, 0xf7, 0x2a, 0x19, 0x2e, 0x29, 0x8b, 0xe2, 0x15, 0x2f, 0x7c, 0xf3, 0x9d, 0x1e, 0x30, 0x82, 0x7d, 0x02, 0x82, 0xcc, 0xf3, 0x4d, 0xc8, 0x88, 0x9f, 0x1c, 0x2f, 0x59, 0x70, 0x93, 0x0d, 0x97, 0x35, 0x04, 0x2f, 0x8a, 0x5a, 0x71, 0x22, 0x63, 0x16, 0x5d, 0x6e, 0x6c, 0x50, 0x35, 0xe2, 0xe4, 0xa5, 0x0e, 0x86, 0x3c, 0x06, 0x79, 0x9e, 0x3c, 0x89, 0xcc, 0xb5, 0xcb, 0x0e, 0x70, 0xb3, 0xc9, 0x9c, 0x08, 0x40, 0x30, 0x67, 0x7a, 0x7c, 0x97, 0x90, 0x7a, 0x17, 0x24 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.19", - /* Message to be signed */ - 181, - { 0x5b, 0x09, 0xec, 0x88, 0xb1, 0x52, 0x71, 0x78, 0xfa, 0x04, 0x32, 0x63, 0xf3, 0x06, 0x7d, 0x9f, 0xfe, 0x97, 0x30, 0x32, 0xa9, 0x9f, 0x4c, 0xb0, 0x8a, 0xd2, 0xc7, 0xe0, 0xa2, 0x45, 0x6c, 0xdd, 0x57, 0xa7, 0xdf, 0x56, 0xfe, 0x60, 0x53, 0x52, 0x7a, 0x5a, 0xeb, 0x67, 0xd7, 0xe5, 0x52, 0x06, 0x3c, 0x1c, 0xa9, 0x7b, 0x1b, 0xef, 0xfa, 0x7b, 0x39, 0xe9, 0x97, 0xca, 0xf2, 0x78, 0x78, 0xea, 0x0f, 0x62, 0xcb, 0xeb, 0xc8, 0xc2, 0x1d, 0xf4, 0xc8, 0x89, 0xa2, 0x02, 0x85, 0x1e, 0x94, 0x90, 0x88, 0x49, 0x0c, 0x24, 0x9b, 0x6e, 0x9a, 0xcf, 0x1d, 0x80, 0x63, 0xf5, 0xbe, 0x23, 0x43, 0x98, 0x9b, 0xf9, 0x5c, 0x4d, 0xa0, 0x1a, 0x2b, 0xe7, 0x8b, 0x4a, 0xb6, 0xb3, 0x78, 0x01, 0x5b, 0xc3, 0x79, 0x57, 0xf7, 0x69, 0x48, 0xb5, 0xe5, 0x8e, 0x44, 0x0c, 0x28, 0x45, 0x3d, 0x40, 0xd7, 0xcf, 0xd5, 0x7e, 0x7d, 0x69, 0x06, 0x00, 0x47, 0x4a, 0xb5, 0xe7, 0x59, 0x73, 0xb1, 0xea, 0x0c, 0x5f, 0x1e, 0x45, 0xd1, 0x41, 0x90, 0xaf, 0xe2, 0xf4, 0xeb, 0x6d, 0x3b, 0xdf, 0x71, 0xf1, 0xd2, 0xf8, 0xbb, 0x15, 0x6a, 0x1c, 0x29, 0x5d, 0x04, 0xaa, 0xeb, 0x9d, 0x68, 0x9d, 0xce, 0x79, 0xed, 0x62, 0xbc, 0x44, 0x3e, 0xe2, 0x0c } -, - /* Signature */ - 128, - { 0xaf, 0x56, 0xfc, 0x32, 0x97, 0x39, 0xe2, 0xf7, 0x75, 0x4b, 0x6c, 0xa2, 0x51, 0x64, 0xa6, 0xfa, 0x58, 0xf6, 0x85, 0xdd, 0xb7, 0x42, 0xb4, 0x84, 0x1d, 0x73, 0xa5, 0xe2, 0xc4, 0xc4, 0x53, 0x43, 0xb7, 0x4d, 0xfd, 0x2f, 0x0d, 0x37, 0x0e, 0xdd, 0xdd, 0x36, 0xa0, 0x17, 0x56, 0x4a, 0x8d, 0x3a, 0xd4, 0x02, 0xe2, 0xa3, 0x41, 0xc9, 0x72, 0x06, 0x2c, 0x23, 0x81, 0x4a, 0x00, 0x13, 0x1e, 0x17, 0xb1, 0xde, 0xc7, 0xb4, 0xc5, 0x7c, 0x5b, 0xf1, 0xd4, 0xfa, 0x79, 0x22, 0x29, 0x37, 0xa4, 0xdc, 0x5c, 0x00, 0x23, 0x5f, 0x85, 0x3d, 0xd2, 0x3d, 0xc9, 0x75, 0x7f, 0x33, 0x5c, 0x85, 0xc2, 0x07, 0xeb, 0x07, 0x4d, 0x4b, 0xcc, 0x24, 0x3e, 0xda, 0xa7, 0x83, 0x1b, 0x83, 0x13, 0x56, 0x55, 0xe2, 0x27, 0x7e, 0xf2, 0x9e, 0x7a, 0xeb, 0xf3, 0x4a, 0x0f, 0x7b, 0x23, 0x4a, 0x28, 0x65, 0x0a, 0x30 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 4.20", - /* Message to be signed */ - 17, - { 0x3c, 0x33, 0x0c, 0x1e, 0xf7, 0x18, 0xc1, 0x41, 0xe4, 0x7b, 0x8f, 0xa8, 0x59, 0xbe, 0x4d, 0x5b, 0x96 } -, - /* Signature */ - 128, - { 0x0b, 0x10, 0x22, 0xdc, 0x38, 0xe2, 0x17, 0xfd, 0x3b, 0x0e, 0x7e, 0xf1, 0x9d, 0xfc, 0xb4, 0xb4, 0x56, 0x36, 0x62, 0x40, 0x98, 0x30, 0x95, 0xf6, 0xdb, 0x96, 0x58, 0x31, 0xa7, 0x0f, 0x0f, 0x8e, 0x20, 0xe2, 0xdd, 0x2a, 0xc2, 0x31, 0xcc, 0x37, 0x90, 0x45, 0xc2, 0x73, 0x65, 0xe7, 0x3a, 0x53, 0x71, 0x9b, 0xb6, 0xf0, 0x11, 0xc3, 0xf8, 0x63, 0x6b, 0x64, 0x99, 0x4c, 0xa4, 0x80, 0x60, 0x2f, 0xb3, 0xb4, 0xf0, 0xe2, 0x27, 0x4b, 0x58, 0xb3, 0x63, 0xe0, 0xd3, 0x08, 0xb5, 0x28, 0xe1, 0x58, 0x59, 0xa9, 0x1d, 0xcf, 0x99, 0xbf, 0xfe, 0xfb, 0xc8, 0x05, 0x22, 0x41, 0xb9, 0x74, 0x19, 0x2e, 0x63, 0x62, 0x18, 0xf3, 0x98, 0x33, 0x2d, 0xaf, 0xe8, 0x25, 0x9c, 0xa5, 0xf5, 0xcc, 0xfa, 0x54, 0xc9, 0xb3, 0x2b, 0x27, 0x35, 0xaf, 0x07, 0x24, 0xf4, 0x0b, 0x5a, 0x5d, 0x61, 0x21, 0xa4, 0x0d } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 5: A 1024-bit RSA key pair", -{ - /* Modulus */ - 128, - { 0xc5, 0x5f, 0xfb, 0xdd, 0x6a, 0x27, 0x53, 0xbc, 0x02, 0xaf, 0x20, 0xae, 0x18, 0xea, 0x0d, 0xaf, 0x23, 0x0b, 0xb6, 0xf8, 0x79, 0x5d, 0x05, 0xef, 0xec, 0xc8, 0x15, 0xba, 0xec, 0xe2, 0x2b, 0x38, 0x79, 0x99, 0x5f, 0x6d, 0x97, 0x64, 0xc1, 0xdf, 0x8f, 0x97, 0x85, 0x13, 0x81, 0x68, 0x62, 0x66, 0xb8, 0x09, 0x2f, 0xb6, 0x01, 0x18, 0x98, 0xa7, 0x67, 0x07, 0xa4, 0xd1, 0xd5, 0xbd, 0xa0, 0x8d, 0x24, 0x6c, 0x68, 0x7a, 0x8b, 0xba, 0xfa, 0x63, 0x98, 0xac, 0x9e, 0xa2, 0x72, 0x68, 0x23, 0x71, 0x4a, 0x0c, 0x39, 0x34, 0xca, 0x6e, 0x5f, 0x8c, 0xe3, 0x39, 0x87, 0xb5, 0x34, 0x85, 0x7e, 0xa9, 0xf8, 0x5c, 0xc4, 0xe1, 0x9a, 0x1d, 0x21, 0x83, 0xe0, 0xe4, 0xc8, 0xaa, 0x55, 0xcb, 0x22, 0x7b, 0x0e, 0x56, 0xce, 0xb2, 0xb6, 0x2b, 0x30, 0xef, 0xc7, 0x88, 0x64, 0xb2, 0xf9, 0xfb, 0x92, 0x49 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x07, 0xe3, 0xfa, 0x71, 0xb3, 0x98, 0xb6, 0xe4, 0x41, 0x47, 0x37, 0x0b, 0x3e, 0xbb, 0xbc, 0xa8, 0x4f, 0xc2, 0x5c, 0x22, 0x3a, 0xd7, 0xd9, 0x30, 0xea, 0x4a, 0x65, 0x73, 0xff, 0x9c, 0x5b, 0x15, 0xfa, 0xe6, 0x82, 0xc6, 0x22, 0xd3, 0x48, 0x5c, 0xe3, 0xa4, 0xaf, 0x11, 0x44, 0x8f, 0x23, 0xbf, 0xef, 0x83, 0x8e, 0x80, 0xbc, 0x32, 0x7b, 0x87, 0xd5, 0xba, 0x9c, 0x80, 0x37, 0x07, 0x49, 0xaf, 0xc8, 0xc1, 0xc0, 0x17, 0x54, 0x6f, 0xc6, 0xb6, 0x59, 0x31, 0xb7, 0x59, 0xca, 0x43, 0x41, 0xfa, 0x5e, 0x5e, 0x10, 0xb2, 0x40, 0x87, 0xe6, 0xe2, 0xc0, 0xf4, 0xdb, 0xb7, 0x90, 0x69, 0x52, 0x99, 0x9c, 0xbd, 0x90, 0xd2, 0x43, 0x5f, 0xca, 0xcc, 0x9c, 0x82, 0xe4, 0x8f, 0xdf, 0x24, 0xe4, 0x95, 0xcf, 0xf3, 0x0a, 0xd4, 0x19, 0xe7, 0x12, 0x3e, 0x3a, 0xc9, 0x42, 0x27, 0x2e, 0x1a, 0xba, 0xb1 } -, - /* Prime 1 */ - 64, - { 0xf7, 0xf7, 0xc0, 0x02, 0xf0, 0x19, 0x6e, 0xcd, 0xd7, 0x1b, 0xa5, 0xad, 0x74, 0x2b, 0x69, 0x48, 0x27, 0xd2, 0x88, 0xaf, 0x1b, 0x1b, 0xb6, 0x9c, 0x5e, 0xd7, 0xfb, 0x22, 0x9d, 0xee, 0x4b, 0x7a, 0x32, 0xf2, 0xf7, 0x56, 0x8a, 0x6f, 0xca, 0xf3, 0x83, 0xd8, 0x9a, 0xda, 0x9f, 0xc1, 0x4a, 0x7b, 0xa5, 0xd0, 0xa4, 0xa4, 0x6c, 0x2c, 0x54, 0x3e, 0xec, 0x17, 0x75, 0x49, 0xc8, 0xa0, 0x48, 0xb7 } -, - /* Prime 2 */ - 64, - { 0xcb, 0xc4, 0xb2, 0x86, 0x04, 0x76, 0xa2, 0xd3, 0xe8, 0xa4, 0xda, 0x21, 0x00, 0x16, 0xca, 0xce, 0xd0, 0xe3, 0x67, 0xcb, 0x86, 0x77, 0x10, 0xa4, 0xb5, 0xaa, 0x2d, 0xf2, 0xb8, 0xe5, 0xda, 0xf5, 0xfd, 0xc6, 0x47, 0x80, 0x7d, 0x4d, 0x5e, 0xbb, 0x6c, 0x56, 0xb9, 0x76, 0x3c, 0xcd, 0xae, 0x4d, 0xea, 0x33, 0x08, 0xeb, 0x0a, 0xc2, 0xa8, 0x95, 0x01, 0xcb, 0x20, 0x9d, 0x26, 0x39, 0xfc, 0xff } -, - /* Prime exponent 1 */ - 64, - { 0x6c, 0x76, 0x27, 0xbc, 0xa1, 0x3c, 0xde, 0xa4, 0x96, 0xa4, 0x77, 0x31, 0x89, 0x90, 0xbb, 0x7a, 0x5e, 0x40, 0xce, 0x9c, 0x99, 0x24, 0xe4, 0x19, 0x3d, 0xbb, 0x07, 0x14, 0x3b, 0x34, 0x52, 0x3b, 0x5f, 0x31, 0xbb, 0x52, 0x55, 0x37, 0x54, 0xf4, 0x73, 0x05, 0x39, 0xa6, 0xcb, 0x1e, 0x06, 0xf0, 0x52, 0xb5, 0x12, 0x6f, 0x01, 0x09, 0xda, 0xc7, 0xb3, 0x09, 0x07, 0xba, 0x80, 0x50, 0xeb, 0xbd } -, - /* Prime exponent 2 */ - 64, - { 0x40, 0x92, 0x74, 0x80, 0x43, 0xa9, 0xd4, 0xaf, 0x92, 0x69, 0xab, 0x36, 0x09, 0xf1, 0x2f, 0x13, 0x9a, 0xde, 0x75, 0x65, 0xe9, 0x96, 0x91, 0x8f, 0xa0, 0x81, 0xed, 0x4d, 0x9d, 0x8a, 0x39, 0x78, 0xfa, 0x92, 0x7a, 0xd6, 0x1c, 0xdf, 0x07, 0xc6, 0x1c, 0xee, 0xde, 0x96, 0xb9, 0x6d, 0xf4, 0x6e, 0x7c, 0x68, 0xef, 0xca, 0x8b, 0xfe, 0x63, 0xad, 0xd4, 0x83, 0xaa, 0x32, 0x22, 0x8a, 0xfd, 0xc1 } -, - /* Coefficient */ - 64, - { 0x2a, 0x61, 0x94, 0xca, 0x29, 0x70, 0x72, 0x38, 0x45, 0xff, 0xf3, 0x8c, 0xa1, 0xa9, 0xa3, 0xb5, 0x66, 0xb4, 0x24, 0x5d, 0xe2, 0xf9, 0x01, 0x34, 0xb8, 0xe6, 0xae, 0xc8, 0xae, 0x07, 0xf3, 0xbb, 0x7c, 0x5e, 0x5a, 0xe6, 0xe1, 0x83, 0x34, 0x85, 0xe5, 0x5d, 0x8c, 0xa6, 0x0c, 0xe1, 0x64, 0x2f, 0x72, 0x75, 0x96, 0x8e, 0x66, 0x12, 0x38, 0x35, 0x52, 0x11, 0xc6, 0x38, 0x48, 0x94, 0x0f, 0x3c } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 5.1", - /* Message to be signed */ - 187, - { 0xea, 0xe9, 0xa4, 0x0b, 0xff, 0x18, 0x3f, 0x41, 0x14, 0x73, 0x2e, 0x7b, 0x3b, 0xa5, 0x56, 0xf4, 0xce, 0x28, 0x8d, 0xaa, 0x83, 0xe3, 0xff, 0x23, 0x61, 0x12, 0x44, 0xa7, 0xa0, 0x90, 0x1f, 0x11, 0x7d, 0x86, 0xc0, 0x9c, 0x33, 0xa5, 0x23, 0x2b, 0xd3, 0x20, 0xfa, 0x37, 0xa2, 0x38, 0xa8, 0xaa, 0x62, 0xdd, 0x21, 0xab, 0xbf, 0xac, 0xdb, 0x93, 0xfa, 0x1c, 0x44, 0xcc, 0x55, 0xac, 0x61, 0xbe, 0xa2, 0x4a, 0x6a, 0x34, 0xcc, 0x64, 0x76, 0x75, 0x38, 0x37, 0xe1, 0x6f, 0xac, 0xd8, 0x2e, 0xb4, 0x9e, 0x1c, 0x57, 0xc9, 0x58, 0xfb, 0xbf, 0xf5, 0x68, 0x88, 0x7c, 0xf8, 0x2e, 0xeb, 0xe9, 0x61, 0xe5, 0x80, 0xe0, 0x64, 0xdb, 0x9c, 0xbe, 0xc3, 0xb5, 0x3d, 0xf1, 0xf2, 0x71, 0x99, 0xe4, 0x9a, 0x04, 0xcb, 0xe5, 0x9c, 0x69, 0xa2, 0x65, 0xcf, 0xac, 0x8c, 0xe4, 0xf9, 0x1c, 0xa9, 0x5d, 0x52, 0xb1, 0x14, 0x5c, 0x8b, 0x9f, 0x44, 0x40, 0xb3, 0x9c, 0x18, 0x50, 0x94, 0xbe, 0x18, 0x48, 0x74, 0xda, 0x59, 0x71, 0xd7, 0xd7, 0x63, 0xfe, 0x07, 0xce, 0x16, 0xe5, 0x7f, 0x1e, 0x50, 0xd2, 0x28, 0x65, 0x04, 0xb4, 0x81, 0xe2, 0xc6, 0x85, 0xbc, 0x9d, 0x9c, 0x01, 0x49, 0x3f, 0xd3, 0xa6, 0xd8, 0xbb, 0x9b, 0x2e, 0x96, 0xbf, 0xde, 0xb6, 0xc9, 0x29, 0x14, 0xca } -, - /* Signature */ - 128, - { 0x44, 0xce, 0xb4, 0x42, 0x24, 0x2b, 0xae, 0x08, 0x59, 0x94, 0xea, 0xd0, 0x7b, 0x70, 0x95, 0x43, 0xea, 0x23, 0x95, 0xa6, 0xe8, 0xd4, 0x64, 0x73, 0xd7, 0x0d, 0xf3, 0x4a, 0x95, 0x55, 0xaa, 0x56, 0x7f, 0x4d, 0xa1, 0x38, 0xe9, 0x63, 0xfe, 0x92, 0x86, 0xa8, 0x4f, 0xb7, 0xc5, 0xcf, 0x82, 0x00, 0x03, 0x59, 0x04, 0xb5, 0x0c, 0x32, 0x40, 0x3c, 0xae, 0x51, 0x7b, 0xfa, 0x7f, 0xca, 0x8a, 0x66, 0xfc, 0xfd, 0x63, 0x2a, 0xf7, 0x47, 0xc4, 0x9c, 0xdf, 0xb0, 0xb9, 0xae, 0xe3, 0x52, 0x28, 0xb7, 0xdc, 0x4c, 0x21, 0x00, 0x39, 0x69, 0xb0, 0xa0, 0x13, 0xed, 0xe1, 0x29, 0x2b, 0x65, 0xd1, 0x0a, 0x50, 0xc9, 0x02, 0x63, 0xfb, 0x0b, 0xf4, 0xf4, 0xb8, 0x37, 0x66, 0x41, 0xb0, 0x3e, 0x1f, 0xaf, 0xb8, 0x83, 0xf0, 0x38, 0xf4, 0x32, 0x3d, 0xfe, 0x5b, 0xea, 0xc4, 0x68, 0xde, 0xea, 0x99, 0xc3 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 5.2", - /* Message to be signed */ - 92, - { 0x9d, 0xe5, 0xca, 0x46, 0x74, 0x85, 0x61, 0xa0, 0xb9, 0x28, 0xb2, 0x60, 0xa9, 0x5a, 0x3e, 0xd9, 0x20, 0xad, 0xc8, 0xd5, 0xee, 0xb9, 0x27, 0x1d, 0xc7, 0x1b, 0xc1, 0x4f, 0x69, 0xcc, 0xd6, 0x31, 0x1d, 0x18, 0x6a, 0x77, 0x9f, 0x5e, 0xb8, 0xdb, 0x17, 0xc6, 0x90, 0xd6, 0x86, 0x7c, 0xf3, 0x36, 0x9b, 0xbf, 0xf1, 0x5f, 0xab, 0xb3, 0xcd, 0x2c, 0xfd, 0xd6, 0xf7, 0xd7, 0x52, 0x86, 0xff, 0x2d, 0x24, 0x99, 0xc5, 0xab, 0xb4, 0x8e, 0xd5, 0x4f, 0xd4, 0xd8, 0x49, 0xa9, 0x18, 0x0e, 0x11, 0x0e, 0x0a, 0x53, 0xa7, 0x21, 0x39, 0x82, 0x92, 0x11, 0x0f, 0xe8, 0xbe, 0x26 } -, - /* Signature */ - 128, - { 0x44, 0x5f, 0xf5, 0xb6, 0x87, 0x9f, 0x8c, 0xe7, 0x53, 0x95, 0x01, 0x6f, 0x04, 0x95, 0xf1, 0x31, 0x35, 0xb1, 0x79, 0xe7, 0x3a, 0x3c, 0xae, 0xb3, 0x30, 0xe3, 0xcd, 0xa7, 0xf3, 0x1f, 0x1d, 0xcb, 0xa7, 0xaa, 0x82, 0xe2, 0x68, 0xc9, 0x35, 0xe9, 0xd7, 0x01, 0x4e, 0x0b, 0x0d, 0xce, 0xa6, 0x9c, 0x7b, 0x96, 0x8a, 0xdb, 0x17, 0x42, 0x4a, 0x64, 0xdf, 0xd1, 0xe2, 0xbc, 0x57, 0x07, 0xf9, 0x20, 0xfc, 0x0c, 0x83, 0xcc, 0x63, 0xdf, 0xc7, 0x4b, 0x96, 0x3e, 0x68, 0x2b, 0x46, 0xa2, 0x2a, 0xc2, 0x56, 0xac, 0x6b, 0xe5, 0x70, 0x9c, 0x07, 0xcf, 0xcc, 0x3d, 0x4e, 0xba, 0x3a, 0x1d, 0x61, 0xab, 0x15, 0xf1, 0xba, 0xdb, 0x0a, 0x49, 0xfb, 0x5c, 0xf0, 0x9a, 0x1f, 0x74, 0x81, 0xa3, 0xaa, 0xea, 0xf7, 0xc2, 0x57, 0x54, 0x03, 0x77, 0xae, 0xa7, 0xb5, 0x44, 0x17, 0xa6, 0x09, 0xc7, 0x6f, 0x4c } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.3", - /* Message to be signed */ - 232, - { 0x18, 0x3b, 0xa1, 0xa3, 0x81, 0x1d, 0x62, 0x5c, 0xa9, 0xda, 0x1b, 0xba, 0xae, 0xdc, 0x76, 0x19, 0x20, 0x12, 0xfc, 0xb6, 0x74, 0xbb, 0x9e, 0x77, 0xd8, 0xf3, 0x77, 0x08, 0xd2, 0x40, 0xd3, 0x49, 0xe0, 0x57, 0x97, 0x41, 0x6f, 0xeb, 0x24, 0xe3, 0x01, 0x8c, 0x7a, 0x20, 0x5d, 0x05, 0x9d, 0xe8, 0xe0, 0xae, 0x05, 0xa8, 0xd7, 0xe0, 0x9e, 0xaf, 0xee, 0xb9, 0xf0, 0x6d, 0xe5, 0xd4, 0x28, 0x7a, 0xbb, 0xef, 0x05, 0x9b, 0xc5, 0x86, 0xb2, 0x1c, 0x82, 0xd6, 0x4a, 0xec, 0xe8, 0xd7, 0x42, 0x8a, 0xfc, 0xd7, 0xb2, 0x2f, 0xc5, 0xd1, 0x68, 0xbc, 0x07, 0x6b, 0x61, 0x5f, 0x02, 0x73, 0x3c, 0xb6, 0x31, 0x25, 0xc8, 0xf3, 0x6d, 0x5c, 0xb8, 0x09, 0xce, 0x80, 0x65, 0x08, 0x23, 0x98, 0xb3, 0x88, 0x5a, 0x89, 0x19, 0x57, 0x0c, 0x47, 0x8a, 0x07, 0x2f, 0x59, 0x66, 0x15, 0xd7, 0x8f, 0x01, 0x36, 0xd1, 0x1b, 0xe3, 0x2b, 0x3f, 0xe0, 0xf4, 0xfb, 0xe3, 0xc7, 0xda, 0x5d, 0x81, 0x34, 0x19, 0x10, 0x17, 0x7e, 0x48, 0xb1, 0xbb, 0xac, 0x27, 0x6c, 0x12, 0xee, 0x81, 0x54, 0x65, 0xdc, 0x67, 0xd4, 0x53, 0x24, 0xf9, 0x05, 0xaa, 0xca, 0x48, 0x38, 0xd8, 0x1f, 0x74, 0x31, 0x46, 0x3e, 0x89, 0xeb, 0x8b, 0x95, 0x36, 0x58, 0x69, 0x36, 0xaf, 0xb4, 0x2c, 0xb4, 0x7b, 0xd8, 0xc3, 0x18, 0x29, 0xd3, 0x1e, 0xc1, 0xee, 0x29, 0xf9, 0x1c, 0xcc, 0x6d, 0xf9, 0xcd, 0x1b, 0x0b, 0x9b, 0x86, 0x46, 0xb6, 0x02, 0x67, 0xfd, 0x7e, 0xce, 0xae, 0x92, 0xc0, 0xae, 0x9e, 0x0c, 0xe5, 0xff, 0x6f, 0x7e, 0x0b, 0xf7, 0x56, 0xa9, 0xb8, 0xff, 0xc9, 0xc6, 0x16 } -, - /* Signature */ - 128, - { 0xab, 0x4b, 0x78, 0x96, 0x4c, 0x2a, 0x35, 0xd3, 0x28, 0x55, 0xe0, 0xef, 0xce, 0xd3, 0x4b, 0xf8, 0x02, 0x19, 0xb5, 0x8c, 0x48, 0x8e, 0xa3, 0x75, 0xb1, 0xf3, 0x27, 0x16, 0x6a, 0x51, 0x35, 0xe5, 0xda, 0x99, 0x45, 0xc2, 0x87, 0x29, 0x7a, 0x3d, 0x93, 0x2e, 0x57, 0x27, 0x46, 0xf0, 0x22, 0x74, 0x8b, 0x85, 0x58, 0x5a, 0x0a, 0xbd, 0x91, 0x86, 0xf4, 0xac, 0x35, 0xed, 0xc8, 0x50, 0xd2, 0xfd, 0x88, 0x05, 0xb9, 0xe9, 0xf5, 0x1a, 0x5a, 0xdc, 0xb9, 0x5e, 0x1a, 0xc1, 0x72, 0x9e, 0x57, 0xb8, 0x53, 0x31, 0xc1, 0xed, 0x15, 0xc3, 0xd0, 0xcf, 0xae, 0x33, 0xf6, 0x1c, 0x11, 0x9b, 0x55, 0xc9, 0x5e, 0x34, 0x4b, 0x72, 0xf2, 0xb4, 0xf8, 0xe7, 0xe8, 0xfa, 0xc7, 0xa3, 0x3e, 0x5b, 0x8b, 0x27, 0x6a, 0x60, 0x88, 0xa7, 0xfa, 0xbf, 0x4f, 0xa1, 0x72, 0x35, 0x7f, 0xb6, 0xe3, 0xf4, 0x4a, 0x94 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.4", - /* Message to be signed */ - 215, - { 0x87, 0x07, 0xdc, 0xdb, 0x49, 0xd2, 0x83, 0xa2, 0x3a, 0x9b, 0xd6, 0xff, 0x87, 0xaf, 0xf8, 0x34, 0xf0, 0x6f, 0xf7, 0xf4, 0x7b, 0x0e, 0x5f, 0x57, 0xff, 0x1a, 0x0d, 0x99, 0x5b, 0xba, 0x9c, 0xdd, 0x5e, 0xa0, 0x1b, 0x42, 0xb2, 0x5d, 0x6f, 0xf1, 0x7a, 0x0d, 0xc1, 0x06, 0x05, 0xcf, 0x45, 0x2a, 0xca, 0x73, 0xbe, 0x54, 0xed, 0x5e, 0x0c, 0xe2, 0x15, 0x66, 0xaf, 0xcc, 0x17, 0x91, 0x2a, 0xbe, 0x18, 0xdf, 0xac, 0xd1, 0xbc, 0x03, 0xe3, 0xe2, 0x88, 0x2a, 0x4b, 0xb3, 0xa4, 0xf3, 0x9e, 0xea, 0xf9, 0x63, 0xd7, 0xc3, 0x5e, 0x6b, 0xa8, 0x58, 0xb1, 0x37, 0x6a, 0x07, 0x51, 0x60, 0xc6, 0xcf, 0xae, 0xd5, 0xe8, 0xc5, 0x2e, 0x45, 0x11, 0x32, 0x34, 0x72, 0x19, 0xbd, 0x88, 0x89, 0x3e, 0xeb, 0xe3, 0x56, 0x59, 0xa0, 0xee, 0x4d, 0x94, 0xf9, 0x4d, 0x03, 0x5b, 0x7a, 0x86, 0x86, 0xff, 0xb4, 0x16, 0xeb, 0x99, 0xfb, 0x2a, 0xaa, 0x81, 0x23, 0x6b, 0x05, 0xac, 0x46, 0x45, 0x92, 0x5f, 0x2c, 0x2b, 0xc1, 0x9e, 0xbe, 0x89, 0xa6, 0x3f, 0x2f, 0x45, 0x1d, 0x0b, 0x13, 0xb2, 0xfe, 0xf0, 0x61, 0xe5, 0x30, 0xa3, 0x49, 0xba, 0xf3, 0xb2, 0x35, 0x64, 0x22, 0xb0, 0x95, 0xfd, 0x9f, 0x19, 0x29, 0x93, 0xab, 0x99, 0xc9, 0xf9, 0x22, 0x6e, 0xf9, 0xa7, 0xb3, 0xcf, 0xb3, 0x65, 0x82, 0x08, 0x59, 0x29, 0xc8, 0x76, 0xb5, 0xe9, 0xd7, 0xc6, 0xac, 0xac, 0x7b, 0xb0, 0x27, 0x52, 0x34, 0xe4, 0x1e, 0xd3, 0x51, 0xc8, 0x38, 0xb7, 0xa3, 0x1a } -, - /* Signature */ - 128, - { 0x17, 0x53, 0x98, 0x8b, 0x39, 0xdc, 0x74, 0x5d, 0xf9, 0x69, 0x1a, 0xf9, 0xee, 0x69, 0xca, 0xda, 0x73, 0xa9, 0x87, 0x7c, 0xca, 0x12, 0xf6, 0xd4, 0x06, 0x27, 0xdc, 0xed, 0x76, 0x22, 0x14, 0x7e, 0xc9, 0x01, 0xa5, 0xb4, 0x63, 0xe7, 0xef, 0x9b, 0x37, 0xfb, 0xd6, 0x92, 0x78, 0x5a, 0xa2, 0x2a, 0x46, 0x5d, 0xf4, 0x03, 0xaf, 0x92, 0xa2, 0x9f, 0x79, 0x5d, 0x40, 0xa8, 0x3f, 0xa9, 0x64, 0xb8, 0x5a, 0x7e, 0xc0, 0x5a, 0x3c, 0xda, 0xe3, 0xf8, 0xbc, 0x8a, 0x61, 0xa7, 0x9d, 0xc8, 0x42, 0xe1, 0xd3, 0x77, 0xbc, 0x5e, 0x1d, 0x46, 0xad, 0xaa, 0xa8, 0x66, 0xbe, 0x28, 0x2c, 0x6e, 0x23, 0x88, 0x17, 0x36, 0x44, 0xf4, 0x06, 0x27, 0xbc, 0xf8, 0xa0, 0x97, 0x4a, 0x4b, 0xe8, 0xfc, 0xc4, 0x8a, 0xee, 0x7e, 0x82, 0x59, 0xf8, 0x68, 0xa2, 0xbd, 0x78, 0x9a, 0x90, 0x89, 0x92, 0x05, 0x6e, 0x55 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.5", - /* Message to be signed */ - 246, - { 0xac, 0x9f, 0xa3, 0xf6, 0x3d, 0xf0, 0x68, 0xe9, 0x0d, 0x69, 0x2e, 0xcc, 0xfa, 0x7d, 0x87, 0x96, 0x49, 0x1a, 0xca, 0x79, 0x5b, 0x98, 0x58, 0xa4, 0x55, 0x18, 0x62, 0x32, 0x29, 0xaf, 0x28, 0xb1, 0x3a, 0x50, 0x2d, 0x8c, 0xb3, 0xb9, 0x50, 0x92, 0x50, 0x58, 0x82, 0xeb, 0x99, 0x4d, 0xe7, 0x46, 0x59, 0x62, 0x56, 0x98, 0xa0, 0x05, 0x04, 0x17, 0x94, 0x0d, 0x8b, 0xfa, 0x28, 0xa3, 0xf9, 0x3d, 0x14, 0x9f, 0xf8, 0xb0, 0xbb, 0x39, 0x26, 0xf6, 0x18, 0xef, 0x91, 0x96, 0x6f, 0x4d, 0x39, 0xbd, 0xba, 0x5a, 0x05, 0x17, 0xdd, 0xeb, 0xb1, 0x6d, 0x2b, 0xc4, 0xb4, 0xe3, 0x3a, 0x7d, 0x61, 0x9c, 0x95, 0xa3, 0x3c, 0xf5, 0xf5, 0x72, 0xdb, 0xe0, 0x7f, 0xab, 0x4a, 0xa6, 0x7f, 0xb3, 0xf3, 0x9a, 0xa2, 0x98, 0x1a, 0x3d, 0xc0, 0xca, 0xee, 0x64, 0x75, 0x8e, 0xa8, 0x98, 0xeb, 0xce, 0x10, 0xbf, 0x3a, 0xa4, 0xfc, 0x84, 0x49, 0xe8, 0xe0, 0xcf, 0x7e, 0x88, 0xb1, 0x88, 0x23, 0x8c, 0x20, 0x68, 0xef, 0xac, 0xeb, 0xfe, 0xef, 0x40, 0x73, 0xa6, 0x54, 0xa5, 0x8a, 0x30, 0x99, 0xd0, 0x36, 0xae, 0xee, 0x2d, 0x81, 0x82, 0x98, 0xd4, 0xab, 0x39, 0x23, 0x8e, 0xdc, 0x45, 0x9a, 0x9f, 0xd3, 0x57, 0x7e, 0x9f, 0x5b, 0xfc, 0x03, 0x68, 0xaa, 0x65, 0x7a, 0xee, 0xda, 0x1e, 0xeb, 0x8a, 0xe7, 0xf5, 0xac, 0x1e, 0xaf, 0x3b, 0x1c, 0x95, 0x81, 0x7d, 0xde, 0x2e, 0xc1, 0xa5, 0x9f, 0xcb, 0x5e, 0xf2, 0x7c, 0xc3, 0x4f, 0xb7, 0x53, 0x31, 0xda, 0x7a, 0x49, 0x96, 0x92, 0x5a, 0xc3, 0xad, 0x17, 0xbb, 0xc3, 0xda, 0xfe, 0x6a, 0x9c, 0x64, 0x4e, 0x30, 0x98, 0xef, 0xfe, 0xf8, 0xfe, 0xa5, 0xcc, 0x0d, 0x5f, 0x0c, 0x04, 0x8e, 0x10, 0x88 } -, - /* Signature */ - 128, - { 0x11, 0xe1, 0xa8, 0x28, 0xf0, 0x0a, 0x98, 0x7e, 0x03, 0xd6, 0x2e, 0x2a, 0x53, 0x6c, 0x29, 0x7d, 0xda, 0xc0, 0x22, 0xe0, 0x63, 0xee, 0x0d, 0xe4, 0xe4, 0x69, 0x5d, 0xed, 0x1f, 0xdb, 0x22, 0x09, 0x00, 0xa3, 0xac, 0x3f, 0x87, 0xd1, 0xbe, 0x75, 0xf9, 0x59, 0xc2, 0x8b, 0x57, 0x8a, 0x43, 0xb2, 0x56, 0x64, 0x3c, 0xdf, 0xff, 0x92, 0x15, 0x95, 0xfd, 0xfb, 0xea, 0xf4, 0x10, 0xc2, 0xae, 0xd9, 0xe5, 0xe4, 0x7e, 0x1d, 0x15, 0x1a, 0xe2, 0x8c, 0x76, 0x99, 0xae, 0xe2, 0x25, 0xa6, 0x45, 0xbc, 0x42, 0xb3, 0xbe, 0xb5, 0x2f, 0x08, 0x38, 0x7e, 0xc5, 0x54, 0xd0, 0x20, 0x4d, 0x28, 0x3c, 0x3b, 0xcc, 0xbc, 0xca, 0x21, 0x6e, 0xda, 0xd9, 0x4e, 0xc6, 0x4f, 0x9c, 0x20, 0xb3, 0x40, 0x6a, 0xb7, 0x8a, 0x6c, 0x4a, 0x4d, 0xae, 0x3f, 0xa6, 0x17, 0xa0, 0x0c, 0x6a, 0xb2, 0xf8, 0xe2, 0x47, 0x62 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.6", - /* Message to be signed */ - 16, - { 0x15, 0x74, 0x69, 0x73, 0x44, 0xe9, 0x86, 0x85, 0xcd, 0x6e, 0x65, 0xe4, 0x67, 0x83, 0xf0, 0xb5 } -, - /* Signature */ - 128, - { 0x3b, 0x7d, 0x67, 0xd1, 0x3c, 0xd3, 0xc0, 0xfd, 0x30, 0x5a, 0xd4, 0x04, 0xd8, 0xa3, 0xdc, 0xde, 0x4a, 0x45, 0x17, 0x9c, 0x2d, 0x0b, 0x87, 0x11, 0x5d, 0x6d, 0x06, 0x0c, 0x24, 0x9b, 0x87, 0xf3, 0x9e, 0x46, 0x3b, 0x76, 0x4b, 0x42, 0x07, 0xc4, 0x8a, 0x74, 0xcf, 0xce, 0x25, 0x31, 0xe8, 0x18, 0x3d, 0x3d, 0x01, 0x25, 0x85, 0xce, 0x57, 0x39, 0xd1, 0x62, 0xc4, 0xea, 0x22, 0x32, 0x44, 0x02, 0xea, 0x2e, 0x6e, 0xaf, 0xb8, 0xa5, 0x73, 0xfc, 0xff, 0x40, 0x15, 0xc9, 0x5c, 0x45, 0xe4, 0xca, 0x7a, 0xc5, 0x1a, 0xe3, 0xa0, 0x6f, 0x42, 0x1e, 0x60, 0x6d, 0x68, 0x3f, 0x5e, 0x12, 0x2b, 0x55, 0x79, 0x14, 0x8a, 0x9c, 0x46, 0x6a, 0xde, 0xb0, 0x24, 0x28, 0xf4, 0x89, 0x6a, 0x86, 0xdf, 0x63, 0xbe, 0x58, 0x7d, 0xdd, 0x7a, 0x6a, 0x8d, 0xe7, 0x17, 0x6b, 0xe4, 0xe7, 0xff, 0x4a, 0xaa, 0x99 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.7", - /* Message to be signed */ - 150, - { 0xbe, 0x46, 0xbe, 0x8b, 0xdd, 0x85, 0x43, 0xd3, 0x70, 0xbb, 0xb7, 0xac, 0x83, 0x9f, 0x5e, 0x64, 0x53, 0xf3, 0x0c, 0xd8, 0x75, 0x2a, 0x4b, 0x92, 0x67, 0x32, 0xc5, 0x9e, 0x61, 0x09, 0x04, 0x4b, 0xe3, 0xa0, 0x75, 0x6c, 0x70, 0x25, 0xa2, 0x32, 0x80, 0xdf, 0x2e, 0xd7, 0x66, 0xba, 0x39, 0xab, 0xb2, 0x0b, 0x94, 0x4c, 0x06, 0x5f, 0xe1, 0x48, 0x7d, 0xea, 0x31, 0xb4, 0x70, 0x8a, 0x68, 0x9a, 0x50, 0xb2, 0x8d, 0x54, 0x29, 0x94, 0xcb, 0xbb, 0x3a, 0x5b, 0xb9, 0x46, 0x0e, 0xe7, 0xa9, 0xc1, 0x53, 0x8b, 0xda, 0x75, 0x1a, 0x52, 0x8b, 0x76, 0x70, 0xf9, 0x15, 0x78, 0xd6, 0x67, 0x3e, 0x08, 0xab, 0xcc, 0xdf, 0x5f, 0x4d, 0x8c, 0x1e, 0xbe, 0xcf, 0xca, 0xc7, 0x5c, 0xc4, 0x2d, 0xbb, 0xb8, 0xcd, 0xe3, 0xc1, 0xb4, 0x74, 0xb5, 0x56, 0xb3, 0x2b, 0xb8, 0x48, 0xfc, 0x32, 0x7b, 0xa6, 0xe3, 0xcf, 0x5f, 0x77, 0xb1, 0xeb, 0xc0, 0x4a, 0x19, 0xf3, 0xc8, 0xc3, 0x9b, 0x6b, 0x84, 0x77, 0x84, 0xea, 0xa3, 0x25, 0xa2, 0xb6, 0xf3 } -, - /* Signature */ - 128, - { 0x91, 0xde, 0x2f, 0x90, 0x32, 0x47, 0xb2, 0xd1, 0x3a, 0xbe, 0x93, 0xdd, 0xd9, 0x6d, 0xfa, 0xef, 0x1b, 0x4d, 0x17, 0x2b, 0x09, 0x09, 0x58, 0xf0, 0xcc, 0x34, 0xfa, 0x92, 0x83, 0x5a, 0xd6, 0x0c, 0x44, 0xb4, 0x27, 0xfe, 0x03, 0x1c, 0xad, 0xbf, 0x92, 0xff, 0x1c, 0xd0, 0x38, 0x41, 0x44, 0xc9, 0xb5, 0xf2, 0x8f, 0x64, 0x5c, 0x63, 0xe8, 0xd7, 0x16, 0xbc, 0xec, 0x2e, 0x04, 0x3b, 0xc3, 0x96, 0x56, 0x64, 0x17, 0x85, 0xc2, 0x6b, 0xa3, 0x6b, 0xa2, 0xa1, 0x09, 0xe3, 0x64, 0x4e, 0xbf, 0xd9, 0x62, 0xd7, 0xa3, 0x16, 0x91, 0x6b, 0x3f, 0x13, 0x66, 0x20, 0x13, 0xcc, 0x0f, 0x37, 0xad, 0x8f, 0x9e, 0x0d, 0x9e, 0xc8, 0xb4, 0xc8, 0xad, 0x5c, 0x75, 0x32, 0xcf, 0xa0, 0x44, 0xae, 0xdc, 0x73, 0x78, 0x77, 0x94, 0xc2, 0x98, 0x79, 0x7c, 0x8a, 0x7e, 0x14, 0x49, 0xea, 0xd6, 0x15, 0x0d, 0xed } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.8", - /* Message to be signed */ - 167, - { 0x0b, 0x7e, 0x06, 0x63, 0xe7, 0x15, 0xea, 0x38, 0xbc, 0x93, 0x0e, 0xc9, 0xd8, 0xe2, 0xa0, 0x29, 0xaa, 0x1a, 0x4c, 0x95, 0xe7, 0xb2, 0x00, 0x47, 0xae, 0x15, 0x44, 0xd5, 0xb2, 0xd8, 0x47, 0x6f, 0xc8, 0x05, 0x53, 0x9f, 0xb0, 0xef, 0xab, 0x7d, 0x5f, 0xf1, 0x2c, 0x36, 0xd7, 0x6a, 0x79, 0x7b, 0x75, 0xc0, 0xb5, 0x3f, 0xa9, 0x26, 0x54, 0x73, 0xda, 0xb6, 0x80, 0xc2, 0x55, 0xd5, 0x7e, 0x99, 0xb6, 0xd9, 0xfe, 0x08, 0xcf, 0x1a, 0x57, 0x34, 0x91, 0xe2, 0x19, 0x78, 0xfa, 0xe9, 0x53, 0x9c, 0xc0, 0x58, 0x84, 0x63, 0x3a, 0x1d, 0xd5, 0xcb, 0x21, 0x53, 0x6f, 0xd4, 0x2d, 0xdd, 0x73, 0x1c, 0xa7, 0x6c, 0x34, 0x57, 0x81, 0x3c, 0xe1, 0xbb, 0x59, 0xc2, 0x1d, 0xd3, 0x1b, 0xf2, 0xae, 0x3b, 0xfd, 0x7d, 0x20, 0xc6, 0xc7, 0x12, 0xa9, 0xdd, 0x43, 0x95, 0x1f, 0x1b, 0x19, 0x8d, 0xea, 0xf7, 0x41, 0x08, 0xea, 0xd2, 0x29, 0x26, 0xd2, 0xb0, 0x19, 0x1e, 0x59, 0xd5, 0xf6, 0x79, 0xad, 0x97, 0xc7, 0x1e, 0xdc, 0x69, 0xde, 0x97, 0x98, 0x7e, 0x54, 0x3e, 0x87, 0xa9, 0x6a, 0x9f, 0xee, 0x77, 0xe3, 0xf0, 0xea, 0x95, 0x7b, 0xd4, 0x6a } -, - /* Signature */ - 128, - { 0x48, 0x51, 0x09, 0x8a, 0x85, 0xe7, 0x0d, 0xa3, 0x33, 0x92, 0xa9, 0xe9, 0x0b, 0x34, 0x76, 0xa4, 0x8b, 0xa0, 0xe3, 0x2c, 0xd6, 0xad, 0x3d, 0xc1, 0xdd, 0x91, 0xda, 0x57, 0xe8, 0x8d, 0xfb, 0xc7, 0xb6, 0x57, 0x4b, 0x08, 0xe8, 0x71, 0x60, 0x80, 0xe1, 0x5d, 0xf4, 0x05, 0x79, 0xc5, 0x70, 0x5d, 0x5b, 0xef, 0x58, 0x4b, 0x08, 0xb2, 0x63, 0xdb, 0xc4, 0xf0, 0xd1, 0x59, 0x56, 0xff, 0x11, 0x25, 0xc4, 0x8f, 0x89, 0x59, 0x1e, 0xbc, 0x94, 0x1d, 0x9f, 0xe8, 0xf9, 0xa7, 0x80, 0xc8, 0x2e, 0xa3, 0x2b, 0xf3, 0xef, 0xa1, 0x6c, 0xab, 0xbe, 0xe5, 0x80, 0xfd, 0x6b, 0x95, 0x74, 0x08, 0x0f, 0x69, 0x07, 0xfe, 0xaf, 0xf8, 0x1d, 0x48, 0xc4, 0x9a, 0x6d, 0xe2, 0x24, 0x84, 0x80, 0xf1, 0xd8, 0x52, 0x39, 0xe9, 0xa4, 0x18, 0xdd, 0x53, 0x10, 0xde, 0xf7, 0x76, 0xe0, 0x8f, 0x50, 0x9a, 0x14, 0x78 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.9", - /* Message to be signed */ - 226, - { 0x13, 0x42, 0x33, 0xba, 0xcf, 0xa1, 0x6d, 0xc8, 0x4d, 0x8f, 0xa4, 0xbd, 0xbb, 0x47, 0x93, 0xd1, 0xda, 0xc0, 0x7d, 0x60, 0x54, 0xbd, 0x08, 0x39, 0x61, 0xda, 0x68, 0x67, 0x9c, 0xa3, 0x75, 0x33, 0x4f, 0x09, 0x20, 0xb9, 0xdf, 0xb8, 0xa6, 0x8e, 0xd7, 0x7f, 0x27, 0xfd, 0x92, 0x19, 0x28, 0x13, 0x61, 0xe0, 0x9f, 0xa6, 0x08, 0x4f, 0x96, 0xe6, 0x98, 0x85, 0xb4, 0x7e, 0xa7, 0x75, 0xaf, 0x06, 0x77, 0x2d, 0x66, 0x12, 0xd4, 0xd1, 0x6f, 0x4a, 0x5c, 0xc4, 0xcd, 0x0d, 0x1e, 0xb2, 0x3b, 0x7a, 0x1f, 0x09, 0x56, 0x4b, 0x84, 0x2e, 0xa0, 0x7c, 0xbd, 0xde, 0x60, 0x45, 0x3a, 0x2a, 0xa4, 0xab, 0x69, 0xdd, 0xfe, 0xb5, 0xb1, 0x3e, 0x9f, 0x08, 0xcd, 0x07, 0x2e, 0x5b, 0x71, 0xce, 0xd3, 0x34, 0xea, 0x70, 0x4c, 0x74, 0x9f, 0xf4, 0x72, 0x7e, 0xbe, 0x12, 0xc0, 0x29, 0x0e, 0x00, 0xa8, 0x41, 0xd7, 0x4b, 0x06, 0x55, 0xcf, 0xd8, 0x06, 0x5d, 0x28, 0x20, 0xfd, 0xf8, 0xfd, 0xc1, 0xbd, 0x45, 0x58, 0x81, 0x80, 0x8b, 0xff, 0x0e, 0xc7, 0x27, 0x60, 0x74, 0x75, 0xbf, 0x0b, 0x2b, 0xc8, 0x93, 0x59, 0x58, 0x32, 0x9b, 0x77, 0x8e, 0xfc, 0xe5, 0x60, 0xfc, 0x26, 0xc3, 0xbb, 0x6e, 0x2d, 0xc9, 0xae, 0xf1, 0x8f, 0x96, 0x9f, 0xba, 0x64, 0x74, 0x5e, 0xd4, 0xd8, 0x5b, 0x14, 0x75, 0x7b, 0xb8, 0x33, 0xea, 0xdb, 0x9c, 0x5c, 0xb0, 0xea, 0xed, 0x08, 0xd3, 0x0b, 0x95, 0x15, 0x00, 0x5a, 0x3e, 0x88, 0x09, 0x1f, 0xc5, 0xcd, 0x2f, 0x36, 0xad, 0x95, 0x5b, 0x7c, 0x6f, 0x2b, 0x19, 0xbb, 0xa3, 0x74, 0xfd } -, - /* Signature */ - 128, - { 0x3e, 0x37, 0xb4, 0x2d, 0xbe, 0xc1, 0x29, 0xdb, 0x81, 0xc5, 0xe2, 0xa2, 0x22, 0xf3, 0x1e, 0x81, 0xb9, 0x37, 0xff, 0x02, 0x24, 0x95, 0x18, 0x18, 0x37, 0x30, 0x37, 0x8b, 0x4c, 0x09, 0x2a, 0xa7, 0xf3, 0xb2, 0x34, 0x59, 0x61, 0x1a, 0x82, 0x4f, 0xc5, 0x27, 0x54, 0x42, 0x1a, 0x27, 0xcc, 0xe9, 0x18, 0xb6, 0x2a, 0xa7, 0xb4, 0x46, 0x38, 0xa0, 0xc0, 0x82, 0x79, 0x80, 0x52, 0xa5, 0x88, 0x46, 0x68, 0x82, 0x51, 0x06, 0x90, 0xac, 0x77, 0x30, 0x23, 0x28, 0x02, 0x46, 0xc8, 0x90, 0xff, 0x1f, 0x62, 0x27, 0x04, 0x9e, 0x66, 0x8b, 0xc9, 0xd6, 0xe4, 0x89, 0xb6, 0x94, 0x4a, 0x34, 0xe8, 0xf9, 0x30, 0x02, 0xbb, 0xb0, 0x0d, 0x75, 0x2b, 0x57, 0x7c, 0xe3, 0x52, 0x53, 0x00, 0x82, 0xbe, 0xcd, 0x30, 0x9b, 0x0d, 0xac, 0xcd, 0x1d, 0x68, 0xd0, 0x6e, 0x1d, 0xf7, 0x12, 0x21, 0xc6, 0x22, 0x69 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.10", - /* Message to be signed */ - 111, - { 0x35, 0xda, 0x3d, 0x02, 0x34, 0xbd, 0x74, 0xfc, 0xd7, 0x6e, 0x8e, 0x69, 0x52, 0x8f, 0x65, 0x1b, 0x88, 0x27, 0x1c, 0xbf, 0x16, 0x28, 0x69, 0x38, 0xc2, 0xc4, 0xa3, 0x7d, 0x41, 0x1d, 0xe8, 0xf6, 0x75, 0x78, 0xeb, 0x8b, 0x3d, 0x20, 0xa8, 0xfd, 0x7d, 0xcd, 0xe7, 0xb6, 0x56, 0xfe, 0x96, 0xa6, 0x80, 0x87, 0x32, 0x28, 0xed, 0x0f, 0x9a, 0x62, 0x0f, 0x15, 0x05, 0x44, 0x23, 0x72, 0xf9, 0xb2, 0xb4, 0x16, 0x84, 0x98, 0x72, 0x34, 0x90, 0xf8, 0x11, 0xf3, 0x11, 0x1f, 0x5f, 0x77, 0x38, 0x63, 0x47, 0xb4, 0x82, 0x2e, 0xd9, 0xd6, 0xb5, 0x53, 0x83, 0x92, 0x21, 0x5c, 0xb6, 0xc4, 0x86, 0x5b, 0xb7, 0xb5, 0xb7, 0xe2, 0x84, 0x2e, 0xea, 0x0e, 0x90, 0x01, 0xca, 0x0c, 0xdf, 0x5d, 0x6b } -, - /* Signature */ - 128, - { 0x12, 0xff, 0x2a, 0xb5, 0xfc, 0x83, 0xd6, 0x49, 0x59, 0x7c, 0x47, 0xbf, 0xf3, 0x29, 0xb7, 0xf4, 0x61, 0xdb, 0xbb, 0xda, 0x01, 0xfb, 0x6b, 0xad, 0x26, 0x54, 0x3e, 0x4d, 0xbc, 0xd6, 0x0c, 0x5e, 0x2c, 0xde, 0xbf, 0xb1, 0x12, 0x78, 0x4a, 0x96, 0x4e, 0x27, 0xf2, 0xa2, 0xe7, 0xfd, 0x07, 0xec, 0x39, 0x0a, 0xab, 0x14, 0x94, 0x37, 0x03, 0x58, 0xa7, 0x5b, 0x5e, 0x1f, 0xa4, 0xf1, 0xad, 0x52, 0x02, 0xe6, 0xd5, 0x46, 0xc0, 0xf3, 0x15, 0xe8, 0x6f, 0xaf, 0xf1, 0xd2, 0x5b, 0x94, 0x72, 0x82, 0xda, 0x32, 0xea, 0xb5, 0x6c, 0x22, 0xf0, 0x6c, 0x8a, 0x9d, 0x32, 0xae, 0xf2, 0x81, 0xd6, 0xf0, 0xaa, 0x55, 0xd7, 0xad, 0x3b, 0xcd, 0xfd, 0xb2, 0x09, 0xa1, 0x6e, 0xf4, 0x5c, 0xc6, 0xf9, 0x68, 0x2e, 0xae, 0x96, 0x3c, 0xbb, 0x21, 0x3a, 0xdb, 0x7f, 0xad, 0x1b, 0xef, 0x49, 0xc0, 0x70, 0x4f } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.11", - /* Message to be signed */ - 50, - { 0x75, 0xfd, 0xb0, 0x72, 0x73, 0xf7, 0x54, 0xd1, 0x11, 0x6f, 0x99, 0x7a, 0xf2, 0xd1, 0x1a, 0x51, 0x2b, 0x94, 0xe9, 0xe0, 0x48, 0x01, 0xb3, 0xfc, 0x73, 0x91, 0x30, 0xb7, 0x47, 0xb4, 0xbe, 0x87, 0x44, 0xd7, 0xe7, 0xf8, 0xa2, 0x97, 0xa0, 0x89, 0xd9, 0x05, 0x0c, 0x5f, 0x54, 0xf8, 0xa3, 0x9a, 0xa3, 0xf2 } -, - /* Signature */ - 128, - { 0x07, 0xff, 0xc1, 0xb7, 0xa1, 0x0d, 0xda, 0xba, 0x96, 0x05, 0xf0, 0xa3, 0xd9, 0x3c, 0x8a, 0x5e, 0x4c, 0x0b, 0x77, 0x58, 0x61, 0x39, 0x05, 0x07, 0x31, 0xd9, 0xcc, 0x9b, 0x3c, 0x83, 0xd2, 0xb7, 0x3f, 0xaf, 0x9a, 0x4e, 0x24, 0xd1, 0xc8, 0xbb, 0x0d, 0x62, 0x3d, 0xf1, 0x0f, 0xc8, 0x40, 0x7d, 0x15, 0x14, 0x48, 0xfa, 0x43, 0xee, 0x65, 0x81, 0xe7, 0xb0, 0xac, 0x80, 0xd1, 0x4a, 0xdf, 0xa4, 0xf6, 0xd2, 0x7a, 0x76, 0x67, 0x50, 0xb2, 0x31, 0xcb, 0xc1, 0xc5, 0xcf, 0xd6, 0x2d, 0xf1, 0xb9, 0x72, 0x7d, 0x8b, 0x87, 0x41, 0x46, 0x9f, 0x68, 0xe5, 0x0a, 0x9b, 0x3b, 0xc7, 0xad, 0xe1, 0x37, 0xdb, 0x06, 0x74, 0x76, 0x03, 0x74, 0x28, 0x56, 0xd5, 0xe7, 0xdd, 0xb4, 0xe1, 0x6a, 0x5b, 0x49, 0xd7, 0x36, 0x5d, 0xb2, 0x76, 0x3b, 0xf5, 0xfd, 0xea, 0x08, 0x3d, 0x81, 0xfa, 0xc9, 0x2d, 0x87 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.12", - /* Message to be signed */ - 245, - { 0x96, 0xc9, 0xfa, 0xce, 0xfb, 0xa2, 0xed, 0x33, 0xed, 0x8b, 0x7b, 0x3d, 0x8b, 0x6d, 0xf2, 0x8f, 0x2f, 0xab, 0x0d, 0xcd, 0xd7, 0xa3, 0xcd, 0x7a, 0x7d, 0xed, 0xa2, 0x54, 0x5e, 0xd4, 0x47, 0x0e, 0xd2, 0x5b, 0x46, 0xd2, 0x16, 0x6e, 0xeb, 0xb7, 0xe1, 0x47, 0x10, 0x17, 0x83, 0xb6, 0x45, 0xba, 0xc6, 0x26, 0x64, 0xb8, 0x72, 0x70, 0x09, 0xf3, 0x5d, 0x1e, 0xa5, 0xfd, 0xa5, 0xe7, 0xc2, 0x8d, 0x6a, 0xf6, 0xfe, 0x92, 0x04, 0x6c, 0xa7, 0x24, 0xca, 0xb8, 0x42, 0x5a, 0x52, 0xa0, 0x85, 0xf9, 0xac, 0x90, 0x83, 0xd4, 0xd6, 0x90, 0xbb, 0xdd, 0xdf, 0xd0, 0xa8, 0x2d, 0x94, 0x8f, 0x70, 0xd6, 0x85, 0xe2, 0x6b, 0xb9, 0xf5, 0x27, 0x40, 0x8a, 0xbc, 0x84, 0x7b, 0xff, 0x12, 0x02, 0xde, 0xdf, 0x6d, 0x2f, 0xac, 0x6c, 0xf3, 0x68, 0x2a, 0x51, 0x6b, 0xa7, 0x2f, 0x4f, 0xe9, 0x7b, 0x90, 0x46, 0x6a, 0xf6, 0xe5, 0x43, 0x12, 0x31, 0x65, 0xb8, 0xa6, 0x83, 0xca, 0xba, 0x2f, 0xa2, 0x3a, 0x86, 0xac, 0x06, 0x21, 0x30, 0x65, 0xe1, 0xed, 0x9b, 0x4f, 0x49, 0xaf, 0x4f, 0xff, 0x6d, 0x46, 0xb3, 0x6d, 0x13, 0x3d, 0x8d, 0xa2, 0xdd, 0x29, 0xd5, 0x5f, 0x9f, 0x32, 0x2c, 0x40, 0x78, 0x5d, 0xdc, 0x21, 0xc4, 0x26, 0xc5, 0xe0, 0xa6, 0x7d, 0x41, 0x4f, 0x5a, 0xb9, 0x71, 0xc4, 0x46, 0x0f, 0xf9, 0xb1, 0x14, 0x30, 0x5a, 0x8a, 0xe7, 0xe7, 0xb9, 0x5c, 0x73, 0x03, 0x4e, 0x8e, 0x93, 0xc0, 0x35, 0x29, 0xdd, 0x50, 0xc9, 0x4f, 0x07, 0x62, 0x79, 0x77, 0x5a, 0x5a, 0x3a, 0x80, 0xc5, 0xd2, 0x48, 0x6a, 0x2d, 0x51, 0x08, 0x48, 0xbd, 0xc9, 0xb8, 0x52, 0xac, 0x1d, 0x32, 0xce, 0xb7, 0xc0, 0x41, 0xa0, 0x8f, 0x2f, 0x8e, 0x62 } -, - /* Signature */ - 128, - { 0x46, 0xd0, 0x3f, 0xae, 0xc4, 0xa7, 0x23, 0x18, 0x62, 0x1e, 0xf4, 0xd0, 0xc1, 0xbc, 0xa7, 0x1a, 0x2a, 0xee, 0xa7, 0xa8, 0x1d, 0xf8, 0xfe, 0xbb, 0x8b, 0xa3, 0xfb, 0x35, 0x40, 0xd7, 0x2d, 0x15, 0x34, 0xb9, 0x82, 0x69, 0x16, 0xe8, 0x9f, 0x27, 0xd3, 0x25, 0x67, 0x6c, 0xcf, 0x5a, 0x0a, 0xa1, 0x61, 0x12, 0xdb, 0x2d, 0x93, 0x03, 0xe0, 0xeb, 0xce, 0x4b, 0x85, 0x58, 0x7c, 0x55, 0xac, 0xa0, 0x68, 0x50, 0xde, 0x84, 0xde, 0xc2, 0x13, 0xd1, 0x13, 0x74, 0x04, 0xa5, 0xde, 0xe6, 0xca, 0x88, 0xd9, 0x1a, 0xe2, 0x8b, 0x7b, 0x53, 0x6c, 0x90, 0x20, 0x2b, 0xc7, 0x72, 0x6d, 0xa5, 0x04, 0x2a, 0x85, 0x08, 0xd3, 0xb1, 0x3c, 0xfb, 0xaa, 0xdc, 0xee, 0x12, 0x78, 0xd3, 0x5d, 0x30, 0x3a, 0xcf, 0xee, 0x6e, 0x07, 0x41, 0x90, 0x49, 0x11, 0xa5, 0xf1, 0x88, 0x10, 0xad, 0xd3, 0xe7, 0xb8, 0xf6 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.13", - /* Message to be signed */ - 58, - { 0xc4, 0xb4, 0xc9, 0x96, 0x6e, 0x56, 0xf4, 0x0a, 0xff, 0x47, 0x08, 0x13, 0x1c, 0xd3, 0x71, 0x44, 0x21, 0x34, 0x3e, 0xde, 0x70, 0xc4, 0xd4, 0x6d, 0xb6, 0xef, 0xbe, 0x1b, 0x19, 0xa9, 0xe3, 0xc2, 0xe5, 0x81, 0x06, 0x00, 0x8a, 0x98, 0x38, 0x59, 0xcf, 0x94, 0x2a, 0x31, 0x97, 0x74, 0x69, 0x5a, 0x0c, 0x98, 0xa9, 0x63, 0xe2, 0xfe, 0x9d, 0x93, 0x79, 0xbc } -, - /* Signature */ - 128, - { 0xb1, 0x6b, 0x10, 0xf2, 0xbd, 0x7e, 0xa0, 0xf7, 0x6a, 0x9e, 0xd2, 0xff, 0xcf, 0x3e, 0xc1, 0x0e, 0xdc, 0xb8, 0x24, 0x60, 0xfe, 0x55, 0x82, 0xa7, 0x76, 0x4c, 0x0c, 0x50, 0x56, 0xec, 0xfb, 0x09, 0x72, 0x06, 0x48, 0xd5, 0xf1, 0x9b, 0x3d, 0xea, 0xf2, 0xac, 0xc9, 0x86, 0x46, 0x0e, 0x71, 0x14, 0x26, 0x15, 0x83, 0xa5, 0xf4, 0xa9, 0x90, 0xe9, 0x22, 0xfe, 0xb5, 0xb4, 0x78, 0x97, 0x34, 0xfd, 0xcc, 0xe1, 0x5d, 0xdc, 0x87, 0xca, 0xc3, 0xf6, 0xc7, 0xc9, 0xe9, 0xe2, 0x19, 0x23, 0x15, 0xf0, 0x84, 0x1f, 0x43, 0xea, 0x86, 0xde, 0xa9, 0xa9, 0x38, 0x05, 0x08, 0xb0, 0x6c, 0x9c, 0xa5, 0xe9, 0xd4, 0xa6, 0x51, 0xd0, 0x12, 0x16, 0x62, 0x7c, 0x46, 0x6b, 0xf0, 0xd6, 0xae, 0x74, 0x4b, 0xf3, 0x0f, 0xd7, 0x91, 0xa8, 0x21, 0x03, 0x39, 0xf5, 0x05, 0x7f, 0xf8, 0x5c, 0xeb, 0x84, 0xf1, 0x96 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.14", - /* Message to be signed */ - 165, - { 0xb8, 0x38, 0xa5, 0xd8, 0x88, 0x95, 0x0f, 0x1b, 0x8e, 0x4d, 0x94, 0x7b, 0xba, 0x51, 0xaf, 0xf9, 0xbb, 0x60, 0xb8, 0x3d, 0x09, 0xed, 0x9d, 0x97, 0x96, 0x7a, 0x76, 0x95, 0x5e, 0xd1, 0xdd, 0xf0, 0x48, 0x15, 0x20, 0xbc, 0xf4, 0xf0, 0x8b, 0xeb, 0xbf, 0x89, 0x9c, 0xc7, 0xc3, 0xef, 0x0c, 0x04, 0xd5, 0x00, 0x1b, 0x1e, 0x2e, 0x84, 0x5f, 0xaf, 0xc5, 0x83, 0x30, 0x0c, 0x98, 0xac, 0xa7, 0xa0, 0x3e, 0x90, 0xa4, 0x34, 0xde, 0x77, 0xfe, 0xf7, 0x20, 0xda, 0x36, 0x63, 0xf2, 0x19, 0x98, 0x20, 0x8a, 0x94, 0xf8, 0x94, 0x76, 0x7d, 0x3e, 0xd8, 0x13, 0x96, 0xb7, 0xef, 0xb2, 0x86, 0xe0, 0xff, 0x7d, 0xb6, 0xea, 0x8f, 0xdb, 0x4e, 0x72, 0x83, 0x46, 0x00, 0xfe, 0x5f, 0x7f, 0x15, 0x0a, 0x01, 0xb1, 0xd4, 0xa0, 0x8b, 0x5e, 0xc9, 0xee, 0x1f, 0xbc, 0x10, 0x01, 0xd1, 0x2d, 0x52, 0x36, 0xdb, 0xf0, 0x72, 0x7e, 0x7e, 0xa3, 0x60, 0x78, 0xf3, 0xeb, 0xac, 0x50, 0x46, 0xb7, 0x65, 0xb4, 0xe2, 0x3c, 0xdc, 0xef, 0xd1, 0x15, 0xd6, 0x2a, 0x50, 0x34, 0x4d, 0xbb, 0xd7, 0x42, 0x8d, 0x48, 0xff, 0xc9, 0x4b, 0x11, 0xe2, 0x1c } -, - /* Signature */ - 128, - { 0xb1, 0x56, 0x81, 0xee, 0xf2, 0x96, 0xa6, 0x6b, 0x9f, 0xcd, 0x66, 0x30, 0xf8, 0x9c, 0x55, 0x82, 0x6a, 0x38, 0x9e, 0x0c, 0x2d, 0x3d, 0x47, 0x6a, 0x0f, 0x8a, 0x1e, 0x08, 0xcb, 0xca, 0xcc, 0x66, 0x02, 0xc7, 0x14, 0x43, 0x8f, 0x32, 0xf3, 0x4e, 0x02, 0xc3, 0x6e, 0x5c, 0x0f, 0x16, 0x8a, 0xb0, 0x28, 0x91, 0x7e, 0x90, 0x50, 0xfb, 0xc8, 0x50, 0xf0, 0xcf, 0x65, 0xd5, 0xee, 0xdb, 0x3b, 0x54, 0xbe, 0x54, 0x95, 0xbb, 0xf0, 0xfa, 0xee, 0xb3, 0x2b, 0xbe, 0x5a, 0x8f, 0x87, 0xbb, 0xac, 0xdd, 0x25, 0x85, 0xfb, 0x90, 0x7b, 0x13, 0x18, 0x5b, 0x02, 0x61, 0x56, 0x63, 0xd2, 0x01, 0x1e, 0xf2, 0x3d, 0x0a, 0xb0, 0x4d, 0xad, 0x1f, 0xfa, 0x67, 0x9b, 0x53, 0x15, 0x2c, 0x9c, 0x42, 0xb8, 0x46, 0x39, 0x68, 0x4e, 0xae, 0xaf, 0x64, 0x4e, 0x4f, 0xc6, 0xff, 0x2e, 0xc7, 0xd4, 0x7b, 0xa5, 0xac } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.15", - /* Message to be signed */ - 77, - { 0x9f, 0xd5, 0x39, 0xc8, 0xad, 0x86, 0x49, 0x24, 0xee, 0xc1, 0xd6, 0x55, 0xc0, 0x7d, 0x1f, 0x28, 0x27, 0x0c, 0xdb, 0x32, 0x6b, 0x57, 0x2c, 0x46, 0x67, 0xec, 0xa6, 0x48, 0x8c, 0x03, 0x36, 0x57, 0xff, 0x29, 0x25, 0x4b, 0x91, 0xf3, 0x21, 0x6e, 0x1c, 0xac, 0x97, 0x97, 0x53, 0xf2, 0x23, 0xb1, 0x79, 0xea, 0x5f, 0x9e, 0xfc, 0x23, 0x6d, 0x40, 0x1d, 0x1b, 0x9a, 0x3c, 0x20, 0xeb, 0x2a, 0xfc, 0x9b, 0xfc, 0xfd, 0x07, 0x92, 0xac, 0xc5, 0xb0, 0x0c, 0x98, 0x28, 0xa6, 0x45 } -, - /* Signature */ - 128, - { 0x38, 0xbf, 0xdf, 0xd3, 0x27, 0x2e, 0x48, 0xcf, 0xee, 0x68, 0xce, 0xb9, 0x13, 0x04, 0xeb, 0x91, 0xee, 0x25, 0xe4, 0x83, 0x40, 0x1f, 0x30, 0xfe, 0x12, 0xd5, 0xe4, 0x35, 0x18, 0xe4, 0xb7, 0x71, 0x14, 0xa1, 0x2c, 0x8c, 0x79, 0x92, 0xae, 0xe7, 0xd2, 0xe7, 0x74, 0xff, 0xf9, 0x1d, 0x8f, 0xd1, 0xcb, 0x7c, 0x6a, 0x2a, 0xdf, 0x79, 0xb7, 0xc8, 0xab, 0x93, 0xe8, 0x37, 0x4d, 0xb7, 0x4c, 0x26, 0x90, 0x9c, 0x65, 0x9a, 0x97, 0xc7, 0x6a, 0x22, 0x2d, 0xf4, 0xfc, 0x8c, 0x7e, 0xf5, 0x19, 0x90, 0x80, 0xea, 0xae, 0x2d, 0x03, 0x1c, 0xa7, 0x51, 0xc5, 0x01, 0x32, 0x89, 0xdb, 0x4e, 0xad, 0x77, 0xb2, 0x8b, 0x76, 0xa4, 0xc4, 0x96, 0xad, 0x0e, 0xb4, 0x22, 0xfc, 0xa8, 0x8f, 0xc6, 0x84, 0xe4, 0x2a, 0xea, 0x88, 0xfd, 0x33, 0xc2, 0x56, 0x75, 0x1b, 0xa0, 0x66, 0x83, 0x4e, 0x77, 0xa1, 0xe2 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.16", - /* Message to be signed */ - 23, - { 0x1d, 0xe8, 0x07, 0x40, 0x9d, 0x0a, 0x61, 0xb0, 0x32, 0x2d, 0xfe, 0xd4, 0x99, 0xe8, 0xc3, 0x32, 0x41, 0xec, 0x89, 0xcd, 0x7d, 0x9f, 0xc5 } -, - /* Signature */ - 128, - { 0x8b, 0x66, 0x64, 0xf8, 0x69, 0xd7, 0x55, 0xc5, 0xd3, 0xe6, 0xdf, 0x99, 0x22, 0xe2, 0x27, 0xc1, 0x10, 0x91, 0x8a, 0x6f, 0xbd, 0x88, 0xc1, 0xa2, 0xe1, 0x28, 0x95, 0x23, 0xad, 0xbb, 0xd8, 0xaa, 0x43, 0x1d, 0x07, 0x86, 0x85, 0x3a, 0xb5, 0x96, 0xdd, 0x5b, 0x00, 0x12, 0x43, 0xb5, 0x4a, 0x2c, 0xb1, 0x0c, 0x31, 0x66, 0xbf, 0x00, 0x23, 0x38, 0xfc, 0xa2, 0x03, 0x45, 0xae, 0xde, 0x1b, 0x22, 0xea, 0x1f, 0xa3, 0xd2, 0x41, 0xc8, 0x6c, 0x76, 0xbf, 0xc0, 0x2f, 0x4f, 0xce, 0xae, 0x12, 0xc8, 0xa9, 0xd7, 0xe4, 0x4a, 0xd6, 0x17, 0x16, 0x65, 0xe8, 0x8f, 0x12, 0x85, 0x22, 0xdd, 0x53, 0x5a, 0x9d, 0x65, 0x00, 0x8f, 0x6a, 0x73, 0x2d, 0x40, 0xaf, 0x20, 0x4e, 0x22, 0x0f, 0x1f, 0xac, 0xd9, 0x42, 0xe0, 0x9d, 0x15, 0x09, 0x9f, 0xdc, 0x51, 0xb3, 0xa1, 0x42, 0x6c, 0xb2, 0xdd, 0x32, 0x93 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.17", - /* Message to be signed */ - 22, - { 0x4b, 0x2b, 0xcb, 0x26, 0x79, 0xa1, 0x4c, 0x3c, 0x4c, 0x06, 0x9e, 0xd0, 0x89, 0xa6, 0x5a, 0xba, 0x29, 0xf2, 0x2b, 0x61, 0x78, 0xc0 } -, - /* Signature */ - 128, - { 0x1c, 0x47, 0x82, 0x8e, 0xa5, 0x3f, 0xb6, 0x43, 0x6e, 0x95, 0x96, 0xb0, 0xce, 0x47, 0xd9, 0xf3, 0x8b, 0x5d, 0xeb, 0x0b, 0x19, 0x7c, 0x1b, 0xc4, 0x74, 0xe2, 0xe8, 0x22, 0x65, 0x70, 0xcc, 0x1b, 0x72, 0xf2, 0x39, 0x31, 0x2a, 0xe7, 0xc3, 0xc6, 0x38, 0x2e, 0x1d, 0x8c, 0xda, 0x7d, 0x4f, 0x12, 0xfe, 0xba, 0xd7, 0x0a, 0xfa, 0xe5, 0xac, 0xbf, 0x24, 0x28, 0xab, 0xc0, 0x44, 0x21, 0xbb, 0x4e, 0x1e, 0x59, 0x90, 0x11, 0x1b, 0x9a, 0xc8, 0x3c, 0x62, 0x43, 0x5c, 0x21, 0xaa, 0x25, 0xfd, 0x9b, 0x49, 0x07, 0x58, 0x54, 0x11, 0xd2, 0x53, 0xba, 0x9b, 0x87, 0x78, 0xf6, 0x24, 0x05, 0x3d, 0x46, 0xfe, 0x95, 0xd7, 0xe2, 0x2c, 0xa3, 0x93, 0x81, 0xc7, 0x79, 0x2e, 0xff, 0x46, 0x43, 0x8f, 0xbc, 0x16, 0x5e, 0xd7, 0x62, 0x9c, 0x2f, 0xc1, 0xce, 0xf1, 0xb3, 0x4d, 0x77, 0x76, 0x8a, 0x20, 0x55 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.18", - /* Message to be signed */ - 238, - { 0xef, 0x46, 0xae, 0x51, 0xe0, 0x15, 0x8c, 0xd0, 0xef, 0x9c, 0x78, 0xd7, 0x1e, 0x00, 0x15, 0x67, 0xd6, 0x6a, 0xe3, 0xc5, 0xe9, 0xa6, 0x4f, 0x24, 0x57, 0x15, 0xc7, 0xc2, 0xad, 0x8e, 0xea, 0x0f, 0x9d, 0x32, 0x00, 0x23, 0x07, 0x2f, 0xdb, 0x0f, 0xb8, 0x6a, 0x45, 0x21, 0x7f, 0xd7, 0x12, 0xcc, 0x80, 0xe5, 0xb9, 0x41, 0x47, 0xc4, 0x5f, 0xe0, 0x0b, 0x69, 0x2c, 0xcd, 0xa1, 0x10, 0x25, 0x98, 0x41, 0xb2, 0xc7, 0xe5, 0xc3, 0xdc, 0xff, 0x59, 0x56, 0xf2, 0xa5, 0x96, 0xcd, 0xa6, 0x8e, 0xb7, 0x7f, 0x4c, 0x85, 0x90, 0xd7, 0x36, 0xb8, 0xfd, 0x60, 0x66, 0x77, 0x3e, 0xf6, 0xf9, 0x5a, 0x38, 0xcd, 0x38, 0x4e, 0x94, 0x83, 0xa8, 0x9d, 0xc2, 0xb6, 0xc2, 0xe8, 0x74, 0x5c, 0x95, 0xc1, 0x2f, 0xa6, 0x72, 0xa1, 0xbe, 0xcf, 0xb6, 0x3e, 0xac, 0x9b, 0x55, 0x3e, 0xda, 0x8d, 0x29, 0x37, 0x54, 0xec, 0x39, 0x47, 0xea, 0xc0, 0x22, 0x8d, 0xe2, 0x63, 0x14, 0xb5, 0x9b, 0x66, 0x99, 0x4c, 0xc6, 0x0e, 0x83, 0x60, 0xe7, 0x5d, 0x38, 0x76, 0x29, 0x8f, 0x8f, 0x8a, 0x7d, 0x14, 0x1d, 0xa0, 0x64, 0xe5, 0xca, 0x02, 0x6a, 0x97, 0x3e, 0x28, 0xf2, 0x54, 0x73, 0x8c, 0xee, 0x66, 0x9c, 0x72, 0x1b, 0x03, 0x4c, 0xb5, 0xf8, 0xe2, 0x44, 0xda, 0xdd, 0x7c, 0xd1, 0xe1, 0x59, 0xd4, 0x51, 0xd4, 0xbf, 0x65, 0x80, 0xf3, 0xe6, 0x9c, 0xdc, 0x02, 0x71, 0x38, 0x2e, 0x8d, 0xc1, 0x4b, 0xc7, 0x33, 0xaf, 0x38, 0x99, 0x2c, 0x1c, 0xd8, 0x82, 0xc7, 0xb1, 0x50, 0xd2, 0x3a, 0x06, 0x7b, 0x9b, 0xcf, 0x3c, 0xcd, 0xab, 0x6b, 0x0f, 0xba, 0x13, 0x2b, 0x4c, 0x14, 0x47, 0xc8, 0x7c, 0x39, 0x3f } -, - /* Signature */ - 128, - { 0x8c, 0x1d, 0xe1, 0x5a, 0xb8, 0x6c, 0xbf, 0x5b, 0xd9, 0x31, 0x7c, 0xe2, 0xb8, 0xfc, 0x82, 0xf5, 0x72, 0x2d, 0xb6, 0x96, 0x1c, 0x9f, 0x55, 0x51, 0x40, 0xf7, 0x8e, 0xbd, 0xa2, 0x4e, 0x3f, 0x51, 0xfd, 0x73, 0x01, 0xc1, 0xe4, 0xfe, 0x12, 0xb6, 0x95, 0x7c, 0x30, 0x14, 0x4f, 0xa1, 0xe1, 0x27, 0x27, 0x46, 0x03, 0xdc, 0x02, 0x05, 0x11, 0x30, 0xb2, 0x53, 0x85, 0xfc, 0x86, 0x46, 0xee, 0x96, 0xa7, 0x45, 0x50, 0xd2, 0xd6, 0x3f, 0x85, 0x81, 0x85, 0xbb, 0x98, 0x46, 0x52, 0xa3, 0x43, 0x1d, 0x53, 0x3d, 0xa6, 0x01, 0x46, 0x22, 0xa6, 0x4e, 0x06, 0x91, 0x66, 0x2a, 0x4f, 0x7c, 0x9d, 0x58, 0x31, 0x9b, 0xa3, 0xf8, 0x5f, 0x19, 0x18, 0x24, 0x75, 0xe1, 0x50, 0x9b, 0xbf, 0x21, 0x3a, 0xf0, 0x10, 0x10, 0xb4, 0xb9, 0xf8, 0x2e, 0x64, 0x75, 0x11, 0xfc, 0x97, 0xc6, 0xb7, 0xc9, 0x7e, 0x8d } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.19", - /* Message to be signed */ - 192, - { 0xf8, 0x7b, 0xb1, 0x2d, 0xaa, 0xad, 0x62, 0xc8, 0x64, 0xac, 0x3d, 0x44, 0x4d, 0x51, 0x4e, 0xec, 0x6e, 0x59, 0xb6, 0x7c, 0xd0, 0x82, 0x0d, 0xfc, 0xbd, 0xf8, 0x51, 0xea, 0x73, 0x89, 0x1f, 0x58, 0xa8, 0xbe, 0x6e, 0x84, 0x3e, 0xe8, 0x77, 0x3e, 0x4d, 0xc1, 0xc7, 0xd7, 0x42, 0xda, 0x82, 0xff, 0x16, 0xc1, 0x01, 0x1b, 0x99, 0x56, 0x6b, 0x9f, 0x3f, 0xd1, 0x7d, 0x68, 0xd5, 0xac, 0x99, 0xce, 0xf5, 0xa3, 0xa0, 0xf7, 0x53, 0x18, 0x76, 0x9d, 0xc0, 0x13, 0xbb, 0x05, 0x5b, 0xe1, 0x30, 0x56, 0xdf, 0x49, 0xa8, 0x39, 0xb8, 0x39, 0x52, 0x51, 0x39, 0x9b, 0x27, 0xa0, 0xbb, 0x31, 0xc5, 0x54, 0xae, 0xdf, 0x3d, 0x9c, 0x74, 0x82, 0xb6, 0x62, 0x0c, 0x5d, 0x7c, 0x69, 0x14, 0xa5, 0x64, 0xdb, 0x04, 0xa0, 0x00, 0x04, 0x56, 0x99, 0xee, 0x1e, 0x50, 0x88, 0xa5, 0xb6, 0x8d, 0x81, 0x4e, 0xfe, 0x9d, 0x13, 0x0d, 0xc3, 0x4e, 0x2b, 0xd9, 0x78, 0x51, 0x13, 0x9c, 0x73, 0x46, 0x07, 0x65, 0xb1, 0xf2, 0x65, 0x46, 0x86, 0xfe, 0xde, 0x9c, 0x9b, 0x3e, 0x92, 0x40, 0x9d, 0xb2, 0xd4, 0x2a, 0x32, 0xba, 0x9e, 0x20, 0xbc, 0xae, 0xb2, 0xc4, 0xf9, 0xff, 0x9b, 0x0e, 0x83, 0x4b, 0x74, 0x92, 0xa2, 0xb1, 0xd8, 0xc6, 0x5c, 0x8b, 0xa4, 0x98, 0x34, 0x2a, 0xe7, 0xd1, 0xd9, 0xfe, 0x74, 0x05, 0xc2 } -, - /* Signature */ - 128, - { 0x20, 0x7a, 0x34, 0x8c, 0xdf, 0x68, 0x4a, 0xa8, 0xe1, 0xa4, 0xaf, 0x7b, 0x7c, 0x25, 0x27, 0x07, 0xce, 0x6f, 0x1f, 0x9d, 0xb2, 0x29, 0x1f, 0x2a, 0x95, 0xa0, 0x71, 0x5d, 0x9c, 0x7f, 0xc5, 0x1a, 0xa2, 0x30, 0x11, 0x0b, 0x5b, 0x51, 0x8a, 0x9c, 0x8f, 0x95, 0x8d, 0xd2, 0x0c, 0x75, 0x24, 0xd5, 0xb6, 0x51, 0x06, 0xd7, 0x42, 0x1b, 0xa9, 0xfc, 0xfb, 0x78, 0x91, 0x78, 0x41, 0x2c, 0x36, 0x40, 0xf5, 0x40, 0xb8, 0x1b, 0xb3, 0x18, 0x97, 0xd2, 0x64, 0x5e, 0xc7, 0x9d, 0x8e, 0x59, 0x75, 0x04, 0x8e, 0x45, 0x22, 0x61, 0xa1, 0xc2, 0x00, 0x9c, 0xfe, 0xee, 0x07, 0x15, 0xa0, 0x1b, 0xee, 0xfd, 0x75, 0xe7, 0x04, 0xb2, 0xa6, 0xf0, 0xf0, 0xae, 0x7e, 0xa3, 0x6c, 0x53, 0xcf, 0xe3, 0x6f, 0x57, 0xf0, 0x34, 0xe3, 0x85, 0x44, 0x8f, 0xca, 0xab, 0x08, 0xdc, 0xff, 0x47, 0x7d, 0x36, 0xff, 0x15 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 5.20", - /* Message to be signed */ - 2, - { 0x4c, 0x4b } -, - /* Signature */ - 128, - { 0x1c, 0xb6, 0x88, 0x12, 0x83, 0xdc, 0xd1, 0x86, 0x3b, 0xa7, 0x9d, 0xfb, 0x22, 0x35, 0x1b, 0xc9, 0xa8, 0xe0, 0x35, 0x8b, 0x2f, 0x8a, 0x1d, 0xe3, 0xf9, 0x06, 0x5d, 0x8c, 0xa8, 0x59, 0x31, 0x4a, 0xe1, 0x12, 0x13, 0xa2, 0xcc, 0x87, 0xb2, 0xf6, 0x32, 0xef, 0xa6, 0x7d, 0x21, 0x03, 0xf3, 0x82, 0x00, 0xb9, 0x19, 0x3e, 0xb8, 0xd4, 0x99, 0x82, 0x09, 0x9a, 0xfc, 0x74, 0x42, 0x8f, 0x4b, 0x41, 0x31, 0x6f, 0x48, 0x78, 0xb3, 0xf6, 0x00, 0xbc, 0x2f, 0xb3, 0x04, 0x58, 0xcc, 0x9c, 0x2a, 0x03, 0x4a, 0x06, 0x8e, 0x98, 0xd5, 0x7a, 0xe7, 0x9c, 0xe3, 0xe2, 0xfc, 0x84, 0xb6, 0xa7, 0x45, 0xf0, 0x37, 0xa5, 0xde, 0xa2, 0xb9, 0xda, 0x4e, 0x8d, 0xb4, 0xad, 0xa6, 0x9f, 0xb8, 0x2d, 0x20, 0xa4, 0x1b, 0xb8, 0x43, 0x07, 0x93, 0xee, 0xf9, 0x2a, 0x4f, 0xd6, 0x18, 0x6d, 0x17, 0x96, 0x63, 0xcb } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 6: A 1024-bit RSA key pair", -{ - /* Modulus */ - 128, - { 0xd6, 0x31, 0x14, 0x57, 0xe1, 0xca, 0xf1, 0x22, 0x44, 0x36, 0x69, 0x79, 0x83, 0xc8, 0x6d, 0xd3, 0x38, 0x20, 0x58, 0x62, 0xd2, 0xa1, 0x05, 0xba, 0xf7, 0x10, 0x34, 0x28, 0xfd, 0x83, 0x53, 0xa1, 0x9b, 0x7b, 0xa4, 0x22, 0x8f, 0x78, 0xb4, 0x7f, 0x79, 0x07, 0x35, 0x70, 0x34, 0xc5, 0x2d, 0x85, 0x97, 0xda, 0x2b, 0x5d, 0x13, 0xdc, 0x53, 0x5b, 0x83, 0x6c, 0x74, 0x13, 0x0a, 0x36, 0x48, 0x91, 0x8d, 0x4a, 0x7a, 0x83, 0x99, 0x0c, 0x2e, 0x28, 0x81, 0x6a, 0xec, 0x0f, 0xca, 0x01, 0xd1, 0x05, 0xc6, 0xc6, 0x52, 0xec, 0x57, 0x33, 0xd0, 0x1f, 0x00, 0x58, 0xb2, 0xdf, 0x5a, 0xe6, 0x73, 0x33, 0x40, 0x5a, 0x3a, 0x5b, 0x12, 0x20, 0xa2, 0x6a, 0xc3, 0xd1, 0x42, 0xf2, 0xb4, 0xd8, 0x37, 0xeb, 0x73, 0x86, 0xa4, 0x0a, 0x74, 0xcc, 0x3d, 0x1e, 0x4f, 0xbc, 0x64, 0xfd, 0x7d, 0xa6, 0x3c, 0x41 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 127, - { 0x5e, 0xa6, 0x11, 0x77, 0x44, 0x2f, 0x89, 0x9e, 0xba, 0xc5, 0xd0, 0x96, 0x01, 0xc5, 0xef, 0xc2, 0x06, 0x6b, 0x44, 0xa3, 0x66, 0xb0, 0x00, 0xf8, 0x3d, 0x74, 0xcb, 0x97, 0xd1, 0x6e, 0xd6, 0xe5, 0xf2, 0xef, 0x0f, 0xf8, 0xb5, 0xad, 0x81, 0x15, 0x53, 0x45, 0xfc, 0x37, 0x39, 0x1a, 0x68, 0xa3, 0x40, 0x17, 0x08, 0x52, 0x79, 0x14, 0x43, 0x41, 0x8d, 0x31, 0xbf, 0x99, 0x2a, 0x4a, 0x12, 0x86, 0x6f, 0xe9, 0xff, 0xcc, 0xde, 0xbb, 0xbb, 0xa6, 0x37, 0xee, 0x88, 0x7b, 0x71, 0x6c, 0xaa, 0x92, 0xe2, 0x49, 0xce, 0xd6, 0x57, 0xee, 0xd7, 0x1f, 0x5c, 0xcd, 0xd9, 0x16, 0x3f, 0x32, 0x69, 0x52, 0x5d, 0x78, 0x9f, 0x4b, 0x33, 0xc4, 0x8a, 0x95, 0x76, 0x44, 0x36, 0xec, 0x32, 0x5e, 0x86, 0x89, 0x69, 0x1c, 0x27, 0x2d, 0x90, 0xbd, 0x88, 0x88, 0x98, 0x51, 0x37, 0x2f, 0xb8, 0xdc, 0xb9 } -, - /* Prime 1 */ - 64, - { 0xf3, 0xd4, 0xb8, 0x51, 0xad, 0x7a, 0xc7, 0x78, 0xbe, 0xcd, 0xdd, 0xae, 0x71, 0xb6, 0x13, 0xf6, 0x59, 0x7c, 0x70, 0x75, 0xc4, 0xd2, 0x8d, 0xdb, 0xae, 0x1e, 0xfa, 0xcf, 0x03, 0x59, 0x71, 0xab, 0x63, 0xee, 0x90, 0xdb, 0xbd, 0xfb, 0xda, 0x43, 0x25, 0xa1, 0x5f, 0xbf, 0x84, 0x5e, 0xea, 0x54, 0xbb, 0xcd, 0x05, 0x57, 0x4b, 0x1c, 0xd6, 0x01, 0xdc, 0xad, 0xba, 0x12, 0x06, 0x28, 0x05, 0xb9 } -, - /* Prime 2 */ - 64, - { 0xe0, 0xe1, 0xad, 0x57, 0xd6, 0x8f, 0x30, 0x13, 0x28, 0x8c, 0x14, 0x83, 0xe8, 0xc5, 0xb1, 0x2e, 0xfe, 0xb6, 0xec, 0x14, 0x5a, 0xe4, 0x18, 0x8e, 0x1b, 0x3b, 0x39, 0x04, 0x87, 0x90, 0x0a, 0xd2, 0xc3, 0x25, 0xd2, 0x32, 0x80, 0x6a, 0x62, 0x17, 0x34, 0x2a, 0x65, 0x75, 0x95, 0x14, 0xf2, 0x26, 0x8f, 0xca, 0x72, 0xc4, 0xc5, 0xbb, 0xa0, 0x32, 0x81, 0x89, 0xdc, 0xfa, 0xe2, 0x06, 0xae, 0xc9 } -, - /* Prime exponent 1 */ - 64, - { 0x3b, 0xb6, 0xd2, 0xd5, 0x1d, 0xf9, 0x3d, 0xb4, 0xb2, 0x75, 0xd4, 0x5e, 0x8e, 0x76, 0x9a, 0xf8, 0xef, 0xfd, 0x6b, 0xc5, 0x4b, 0xc8, 0x8c, 0xf9, 0x49, 0xf1, 0x48, 0x57, 0x3e, 0x68, 0xbf, 0x4f, 0xcc, 0x0f, 0x76, 0xe6, 0x79, 0xe6, 0x9e, 0x13, 0x67, 0xb9, 0xd7, 0xab, 0x1d, 0x8d, 0xe9, 0x31, 0x8b, 0x34, 0xb0, 0xa4, 0x2a, 0x3f, 0x0b, 0xa2, 0x35, 0x1b, 0x4e, 0xc0, 0x6f, 0x45, 0x89, 0xf1 } -, - /* Prime exponent 2 */ - 64, - { 0x71, 0xf4, 0xaa, 0x5c, 0x8a, 0x93, 0x80, 0xaf, 0x14, 0xaa, 0xf7, 0x72, 0x68, 0xb0, 0x55, 0x3b, 0x15, 0x44, 0x28, 0x99, 0x9f, 0xfd, 0x5a, 0x1c, 0x18, 0xdc, 0x87, 0xe6, 0x2d, 0xb3, 0xe6, 0x68, 0x2b, 0x0f, 0xad, 0x56, 0x7e, 0x10, 0x6a, 0xa8, 0x8b, 0x7c, 0xb8, 0x71, 0x3f, 0x1c, 0xa0, 0x20, 0xbe, 0x58, 0xbe, 0x93, 0xcc, 0x07, 0x6a, 0x04, 0x6d, 0xf4, 0x28, 0x90, 0xd1, 0x9c, 0xc5, 0x51 } -, - /* Coefficient */ - 64, - { 0x23, 0x1a, 0xb8, 0xdd, 0x9a, 0x56, 0x99, 0xd7, 0x97, 0x59, 0x11, 0xef, 0x0e, 0xf8, 0x7c, 0x28, 0xdd, 0xb9, 0x2e, 0x24, 0x6e, 0xc3, 0x4c, 0x5f, 0xac, 0x33, 0x83, 0x22, 0xdd, 0xec, 0x89, 0x8d, 0x56, 0x68, 0x67, 0x45, 0x3d, 0xe6, 0xd7, 0x8a, 0x45, 0xc3, 0x16, 0xb1, 0x45, 0xa2, 0x86, 0x18, 0x94, 0x0e, 0x1a, 0xcd, 0x11, 0x58, 0xc3, 0xaf, 0x92, 0xfa, 0xab, 0xfd, 0xc3, 0x97, 0x84, 0x32 } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 6.1", - /* Message to be signed */ - 74, - { 0x8f, 0x75, 0x0e, 0x65, 0x95, 0x1b, 0x5d, 0xe7, 0x58, 0x14, 0xb0, 0xb7, 0x66, 0x30, 0xdc, 0x9f, 0x1c, 0x62, 0x53, 0xa0, 0x59, 0x0e, 0xac, 0xb5, 0x51, 0x2a, 0x8a, 0x4e, 0x1a, 0x8b, 0xe8, 0x52, 0x5d, 0x36, 0x94, 0x1f, 0xa9, 0xd0, 0x92, 0xf6, 0xbb, 0x44, 0x22, 0xaa, 0x8c, 0x0a, 0xd6, 0x42, 0x3e, 0xa2, 0x8c, 0x10, 0xca, 0xa6, 0xe9, 0x54, 0xb7, 0x95, 0x69, 0xd4, 0x4c, 0x86, 0x0f, 0x1c, 0x65, 0x81, 0xeb, 0x17, 0xa7, 0x54, 0x3e, 0x7b, 0xf7, 0xfe } -, - /* Signature */ - 128, - { 0xb1, 0x8b, 0x5e, 0xc8, 0x8d, 0x4e, 0x24, 0xc9, 0x14, 0xb6, 0x65, 0xff, 0x9a, 0x2c, 0x75, 0xf4, 0xe9, 0x19, 0x37, 0xdf, 0x8c, 0x19, 0x95, 0x59, 0x43, 0xe4, 0x51, 0xad, 0xdf, 0x34, 0x84, 0xe4, 0x97, 0x97, 0x8d, 0x26, 0xda, 0x23, 0x1a, 0xf1, 0x4d, 0x9c, 0x29, 0x27, 0xed, 0x21, 0x0a, 0xfb, 0xf9, 0xde, 0xe3, 0x32, 0x67, 0xaa, 0x45, 0x68, 0x46, 0x49, 0xe8, 0x6f, 0xb2, 0x25, 0xa0, 0x53, 0xb5, 0x45, 0x52, 0x90, 0xc3, 0x20, 0xe3, 0xf6, 0x40, 0x62, 0x3c, 0x75, 0xca, 0x42, 0x37, 0x21, 0xf2, 0x80, 0xb8, 0x87, 0x44, 0x24, 0x97, 0xf3, 0x2a, 0x90, 0xd7, 0x8f, 0x64, 0x44, 0x04, 0x77, 0xad, 0x09, 0x27, 0xc7, 0xba, 0x01, 0xc4, 0x4d, 0xa9, 0xd5, 0xc2, 0x83, 0xa4, 0x38, 0xbe, 0x0d, 0xc5, 0x80, 0xa0, 0x05, 0x28, 0xfc, 0x65, 0xe2, 0x04, 0xd4, 0x2a, 0x2d, 0x4e, 0x29, 0x13, 0xc1 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 6.2", - /* Message to be signed */ - 53, - { 0xbd, 0xbf, 0x3b, 0x36, 0x40, 0x73, 0xfe, 0x04, 0x8f, 0xba, 0xe5, 0x5e, 0x3c, 0xde, 0x66, 0x8e, 0x84, 0xf7, 0x53, 0xab, 0xfc, 0x71, 0x0b, 0x8c, 0xdb, 0x7b, 0x6c, 0x0c, 0xf8, 0x2d, 0xd5, 0xb6, 0x74, 0xd2, 0x1e, 0x2b, 0x3e, 0x36, 0xb1, 0xb0, 0x36, 0x0d, 0xf8, 0xbf, 0x7e, 0x62, 0x27, 0xc9, 0x2e, 0x15, 0xf3, 0xd7, 0x84 } -, - /* Signature */ - 128, - { 0x66, 0xac, 0xf0, 0x43, 0xbc, 0x6a, 0xae, 0x81, 0xa4, 0xd5, 0x2b, 0x4e, 0x8c, 0x40, 0x12, 0x8b, 0x25, 0xc6, 0xd1, 0x0a, 0x8c, 0x69, 0x8c, 0x83, 0xae, 0xd7, 0x1e, 0x8f, 0x35, 0x83, 0x89, 0x8b, 0xe8, 0xf4, 0xc9, 0xbe, 0xa4, 0xb6, 0x31, 0x90, 0xe2, 0x15, 0x26, 0xca, 0xf8, 0x3a, 0xb1, 0x4a, 0x4f, 0x8b, 0xeb, 0xe8, 0x13, 0xa5, 0xab, 0xeb, 0x95, 0x95, 0x67, 0xbb, 0x2f, 0x06, 0xc5, 0xf1, 0x1e, 0x46, 0x4b, 0x5c, 0xdf, 0x7b, 0x2a, 0x13, 0x2d, 0x42, 0x6d, 0xdb, 0xec, 0xf5, 0x85, 0x90, 0x0a, 0x0d, 0x80, 0x92, 0xca, 0x52, 0xb6, 0xdc, 0x0a, 0xbc, 0x35, 0xf1, 0x40, 0x94, 0x69, 0x89, 0x46, 0xe1, 0xcd, 0x0e, 0xcd, 0x6b, 0xd4, 0x1e, 0x2c, 0x6f, 0x96, 0x3e, 0xe8, 0x9c, 0x82, 0x19, 0x3e, 0xcc, 0x5f, 0xd4, 0x76, 0x30, 0xd3, 0x4a, 0xd1, 0x6c, 0xa2, 0x47, 0x9e, 0xaf, 0x06, 0x2d } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.3", - /* Message to be signed */ - 223, - { 0x3c, 0x5c, 0x74, 0xbc, 0x8f, 0xae, 0x80, 0x7a, 0xe5, 0x8b, 0xd2, 0x13, 0xe6, 0x27, 0x2a, 0xa3, 0x85, 0x79, 0x31, 0x57, 0x5c, 0x2a, 0xa2, 0xbe, 0x4b, 0xca, 0xe4, 0xd7, 0x9a, 0xe0, 0x87, 0xb6, 0xb8, 0x6f, 0x91, 0x5d, 0xf8, 0xc0, 0x96, 0xc1, 0x22, 0xed, 0xfb, 0xdc, 0x79, 0x7f, 0x9d, 0x70, 0xb9, 0x76, 0x13, 0x97, 0xfc, 0xe3, 0xd3, 0xe0, 0xb8, 0xa6, 0xf2, 0x56, 0xdb, 0xc6, 0x60, 0x5b, 0xa9, 0x48, 0xd5, 0xfb, 0xe6, 0xf5, 0x24, 0x5c, 0x02, 0x95, 0xce, 0x5d, 0xd7, 0x3b, 0xf7, 0x43, 0x65, 0x17, 0xf7, 0xc4, 0x22, 0x2d, 0x2c, 0xfd, 0x85, 0x42, 0xe7, 0xa1, 0x00, 0xcf, 0x05, 0x13, 0x04, 0xa1, 0xab, 0x6f, 0xe0, 0x05, 0xda, 0x07, 0x7b, 0x62, 0x87, 0x8f, 0xd0, 0xb7, 0x41, 0xe6, 0x27, 0x1e, 0x0d, 0x34, 0x6b, 0x20, 0x72, 0x3b, 0x7e, 0x00, 0xb3, 0xb8, 0x19, 0x4e, 0x1a, 0x46, 0x0c, 0x6b, 0xf2, 0x56, 0x00, 0x76, 0x82, 0x90, 0xc1, 0xdc, 0xaa, 0x2f, 0x41, 0xb9, 0x41, 0xa6, 0x4f, 0xd9, 0x02, 0x14, 0xd5, 0x16, 0x6d, 0x78, 0xaa, 0xbb, 0xaf, 0x7e, 0x41, 0xd2, 0x4f, 0xf6, 0x36, 0xc9, 0x76, 0x2f, 0xd8, 0x92, 0x19, 0x9d, 0x2c, 0xfd, 0x9d, 0xed, 0xa5, 0x00, 0x51, 0xe0, 0x01, 0xb9, 0xfd, 0x3e, 0x5e, 0x22, 0x27, 0xae, 0xcb, 0x15, 0xc1, 0xb3, 0x13, 0x71, 0xb3, 0x5a, 0x78, 0xb3, 0xb8, 0xb7, 0x63, 0x63, 0x76, 0xf1, 0x34, 0x56, 0x2b, 0x4e, 0x52, 0xf4, 0x51, 0xb7, 0x41, 0xa1, 0x9a, 0xc9, 0x32, 0x56, 0x9f, 0xf3, 0x04, 0x1f, 0xaf, 0x12, 0x27, 0x9f, 0x90 } -, - /* Signature */ - 128, - { 0x5e, 0x89, 0x7f, 0x87, 0x9b, 0xa4, 0x6f, 0x67, 0x11, 0x2c, 0xd7, 0xc7, 0xc6, 0xfb, 0x27, 0x37, 0xad, 0x79, 0x3a, 0x87, 0x28, 0x79, 0x05, 0x2a, 0x88, 0x45, 0x7a, 0xf5, 0xe9, 0xd5, 0x99, 0x59, 0xa8, 0x48, 0x13, 0x4a, 0x68, 0x24, 0xde, 0x3a, 0x67, 0x4f, 0x72, 0xa9, 0x06, 0x87, 0x9e, 0x95, 0xbe, 0x0e, 0xd8, 0x7e, 0xa9, 0xf9, 0x74, 0xa7, 0xa0, 0x7b, 0xa9, 0xad, 0xbe, 0xc2, 0xfb, 0xfa, 0x02, 0x94, 0x37, 0x8b, 0x14, 0xe7, 0x35, 0xf5, 0x5f, 0x40, 0x3c, 0xa0, 0x53, 0x08, 0x4f, 0x51, 0xd3, 0xd3, 0x42, 0xd8, 0xaf, 0x9c, 0x64, 0xb4, 0xd1, 0x54, 0xad, 0x9a, 0xa3, 0xc6, 0xbc, 0xaa, 0xce, 0x1f, 0x1b, 0xbe, 0x62, 0xee, 0xb5, 0xd0, 0xe6, 0xc4, 0xc0, 0x30, 0x93, 0xc2, 0xaf, 0x0f, 0x07, 0x88, 0x8b, 0x8b, 0xbe, 0xfa, 0x79, 0x40, 0x03, 0x23, 0x13, 0x3f, 0x77, 0x6a, 0x32, 0x13 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.4", - /* Message to be signed */ - 61, - { 0x42, 0x56, 0x46, 0x65, 0x0d, 0x6b, 0x37, 0x9e, 0x16, 0xe1, 0x5b, 0xf3, 0x85, 0x3d, 0xdc, 0x9d, 0x44, 0x4f, 0x44, 0x53, 0x5c, 0x49, 0x3a, 0x37, 0x03, 0xb0, 0x01, 0x63, 0xaf, 0x34, 0x76, 0xdf, 0x37, 0x2a, 0x5b, 0x28, 0xf3, 0x34, 0xc0, 0x86, 0x03, 0x13, 0xe8, 0x13, 0x6d, 0xe6, 0x08, 0x29, 0x1b, 0x33, 0x78, 0x38, 0x1b, 0x9e, 0x21, 0xeb, 0xef, 0x24, 0x82, 0x5d, 0x12 } -, - /* Signature */ - 128, - { 0xa6, 0xa0, 0xcb, 0x02, 0x48, 0x1a, 0xf2, 0x48, 0xab, 0xae, 0x89, 0xcd, 0xf4, 0x16, 0x1f, 0x67, 0x76, 0xd4, 0x71, 0x08, 0xf1, 0x8e, 0xc6, 0xe8, 0x43, 0x7c, 0x22, 0x4a, 0x14, 0xf4, 0x52, 0xad, 0xa1, 0x36, 0x52, 0x0f, 0x0f, 0xe0, 0x10, 0xa7, 0x34, 0x5a, 0xf1, 0x97, 0x1a, 0x02, 0xe4, 0xbc, 0xf8, 0xc9, 0x8b, 0x26, 0xc5, 0xb8, 0xc6, 0x00, 0x3d, 0xe4, 0xd2, 0xb4, 0x07, 0x2d, 0x8d, 0xef, 0x1e, 0x19, 0x23, 0xd9, 0xcc, 0xe0, 0xa6, 0x75, 0x14, 0x1d, 0x37, 0x87, 0x3e, 0x59, 0x48, 0xea, 0x6c, 0x8a, 0x78, 0x0e, 0xd2, 0xa5, 0xec, 0xc2, 0xba, 0x9a, 0x81, 0x20, 0x6c, 0x7e, 0xcc, 0xc8, 0x0e, 0xac, 0x02, 0x6d, 0xb7, 0xd7, 0x60, 0x22, 0x3a, 0xa2, 0x38, 0x7a, 0x18, 0x2e, 0x98, 0xd6, 0x6f, 0x1e, 0x23, 0xdf, 0xea, 0xf3, 0x51, 0x5c, 0xee, 0x4f, 0xa1, 0xab, 0xd4, 0x64, 0xb7, 0x68 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.5", - /* Message to be signed */ - 85, - { 0xf4, 0x7d, 0x87, 0xbf, 0xd4, 0x88, 0xaf, 0x5b, 0x24, 0xdb, 0x34, 0xad, 0x0c, 0x13, 0x1e, 0xfc, 0xa1, 0x0c, 0xdd, 0x1a, 0xae, 0xff, 0xbe, 0x6e, 0x36, 0x48, 0x47, 0x22, 0xed, 0x68, 0x09, 0xb1, 0xd5, 0x7a, 0x18, 0x3b, 0xa0, 0x3d, 0x5e, 0x40, 0x5d, 0x12, 0x56, 0xb2, 0x50, 0x5e, 0xcb, 0x84, 0xdb, 0x35, 0xdf, 0xa9, 0x4d, 0xe8, 0x5d, 0xc2, 0xa1, 0x58, 0x8b, 0x6e, 0x83, 0x12, 0x4c, 0xf8, 0x6c, 0x5e, 0x91, 0x66, 0x86, 0x0d, 0x4d, 0xd4, 0x71, 0x70, 0x43, 0x2b, 0x08, 0xae, 0x6a, 0x6e, 0x30, 0x87, 0x10, 0x86, 0xfa } -, - /* Signature */ - 128, - { 0x6c, 0x00, 0x8f, 0xf0, 0xe1, 0x28, 0xfc, 0xec, 0x26, 0x5f, 0x37, 0x9e, 0xb0, 0x83, 0xdb, 0x50, 0x62, 0x4a, 0x27, 0x98, 0xf9, 0x33, 0x67, 0xc6, 0xd1, 0x6e, 0x5d, 0x95, 0xa9, 0x89, 0xf4, 0xf1, 0xee, 0xd0, 0xcc, 0x4c, 0xd8, 0x61, 0xc6, 0xa5, 0x24, 0xf2, 0xb9, 0xfa, 0x30, 0xe8, 0x86, 0xf1, 0x47, 0x77, 0x41, 0xd7, 0xea, 0x8a, 0x60, 0xdf, 0x14, 0x0a, 0xec, 0xf3, 0xa6, 0xcc, 0xf0, 0x04, 0x3d, 0xab, 0x92, 0xcb, 0xe7, 0x29, 0x53, 0xcb, 0x1c, 0x18, 0x41, 0xe0, 0x59, 0x18, 0xec, 0xed, 0x5b, 0x0f, 0x69, 0x4a, 0xf9, 0xa9, 0x8e, 0xc7, 0xf4, 0xe2, 0x28, 0x6d, 0x23, 0x3d, 0xfd, 0x35, 0x13, 0x2a, 0x0b, 0x58, 0x4b, 0xf0, 0xe0, 0xdc, 0xbf, 0x05, 0x11, 0x9c, 0xe2, 0xe3, 0xa4, 0xd8, 0x13, 0xcf, 0x02, 0x8f, 0xec, 0x48, 0xc3, 0x4a, 0x18, 0x81, 0xeb, 0xb5, 0x31, 0xca, 0x48, 0x9b } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.6", - /* Message to be signed */ - 6, - { 0x03, 0x18, 0x78, 0xd5, 0x88, 0xee } -, - /* Signature */ - 128, - { 0xcc, 0x15, 0x4e, 0x1a, 0xf7, 0x13, 0xf2, 0xf9, 0x5e, 0x16, 0xf4, 0x11, 0x17, 0x5d, 0x98, 0x36, 0xad, 0x6d, 0x8b, 0xbd, 0xc8, 0xf9, 0x8c, 0xf0, 0x5c, 0xfa, 0x00, 0x58, 0x23, 0x5d, 0x1f, 0xdd, 0xe0, 0x40, 0x82, 0x76, 0x4c, 0x29, 0xdc, 0xdc, 0xc5, 0x9e, 0xbe, 0x26, 0x57, 0x8b, 0xf9, 0xe8, 0xad, 0x6a, 0x5a, 0xa8, 0x6b, 0x9d, 0x62, 0x91, 0x4b, 0x4c, 0xf6, 0x96, 0xa8, 0xec, 0x2d, 0xa8, 0x79, 0xf8, 0xfa, 0x42, 0x31, 0x46, 0x31, 0x32, 0xea, 0xd7, 0xbb, 0x3b, 0xe7, 0x50, 0xae, 0x0c, 0x56, 0x28, 0xa3, 0x96, 0xb7, 0x0a, 0xdf, 0xa2, 0x7b, 0x40, 0x34, 0x23, 0xb1, 0x00, 0x18, 0xf9, 0xd2, 0x4f, 0xea, 0x33, 0x70, 0x30, 0x14, 0x7f, 0xbf, 0xaa, 0x15, 0xd4, 0x75, 0x32, 0xc9, 0x25, 0x7c, 0x2c, 0x7f, 0x54, 0x1b, 0x5b, 0x97, 0x4d, 0x15, 0xdd, 0x1e, 0x3f, 0xd2, 0xe2, 0x0a, 0x69 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.7", - /* Message to be signed */ - 136, - { 0x27, 0x26, 0x38, 0x52, 0xea, 0xa9, 0x60, 0xbf, 0x76, 0x71, 0x87, 0x6f, 0xc7, 0x90, 0x0f, 0x89, 0x8e, 0xa8, 0x2e, 0xb2, 0xb0, 0xfc, 0x41, 0x85, 0x65, 0xfd, 0xae, 0x62, 0xf7, 0xd9, 0xec, 0x4c, 0xe2, 0x21, 0x7b, 0x97, 0x99, 0x0d, 0xd2, 0x72, 0xdb, 0x15, 0x7f, 0x99, 0xf6, 0x3c, 0x0d, 0xcb, 0xb9, 0xfb, 0xac, 0xdb, 0xd4, 0xc4, 0xda, 0xdb, 0x6d, 0xf6, 0x77, 0x56, 0x35, 0x8c, 0xa4, 0x40, 0x11, 0x5d, 0x3e, 0x5b, 0x3d, 0xeb, 0x1b, 0xa1, 0xbd, 0x90, 0xca, 0x12, 0x86, 0xfd, 0x10, 0x0c, 0xaf, 0x9b, 0xe4, 0x85, 0xa4, 0x4a, 0x38, 0x45, 0x00, 0x57, 0x18, 0x10, 0x4b, 0xbd, 0xfc, 0x5e, 0x78, 0x1a, 0x9e, 0x37, 0xd6, 0x7a, 0xff, 0xe5, 0x56, 0xdc, 0xa1, 0x0f, 0x8e, 0xfa, 0x39, 0xf9, 0xcb, 0x63, 0x92, 0xa7, 0x2e, 0x3f, 0x28, 0x25, 0x81, 0x1a, 0x2c, 0x05, 0xaf, 0x84, 0xaf, 0x9b, 0xe7, 0xf3, 0x71, 0xdb, 0xd4, 0x10, 0x6d, 0x9f } -, - /* Signature */ - 128, - { 0x94, 0x79, 0x8d, 0x17, 0x94, 0x78, 0xbf, 0xe0, 0x6d, 0x96, 0xa3, 0x4a, 0xc9, 0x9b, 0xc9, 0xd5, 0xde, 0x35, 0xdc, 0x46, 0x97, 0xac, 0x3f, 0x70, 0xe9, 0xb3, 0x4c, 0x95, 0xe2, 0x2b, 0x1c, 0x30, 0xd1, 0x42, 0x6b, 0xe3, 0x50, 0x8e, 0x62, 0x2c, 0x1a, 0x18, 0xab, 0x3c, 0x46, 0x72, 0xfe, 0x3d, 0xe3, 0x40, 0xeb, 0x51, 0x0f, 0xb9, 0x87, 0xb5, 0x3a, 0xe9, 0x3a, 0x59, 0xaf, 0x6b, 0x00, 0xbb, 0xae, 0xe0, 0xe8, 0x27, 0x08, 0xe6, 0xc6, 0xae, 0x82, 0xc8, 0x45, 0x53, 0x24, 0x01, 0x78, 0x36, 0xdb, 0x17, 0x66, 0x0d, 0x06, 0x9d, 0x80, 0x27, 0x1e, 0x1e, 0xa9, 0x98, 0x11, 0x63, 0xb1, 0x4b, 0x66, 0x87, 0x6d, 0xfd, 0x12, 0x8f, 0x09, 0xcd, 0x2e, 0x3d, 0x6a, 0x36, 0xb7, 0x3c, 0x3b, 0x40, 0xad, 0x8e, 0x13, 0x24, 0x84, 0x90, 0x29, 0xc8, 0xb8, 0xe3, 0xc8, 0x89, 0x4e, 0xbf, 0xa1, 0x94 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.8", - /* Message to be signed */ - 200, - { 0xa4, 0xfb, 0x21, 0x03, 0xd0, 0xbe, 0x29, 0x0e, 0x99, 0x60, 0x16, 0xa4, 0x39, 0x46, 0x2e, 0x6b, 0xbd, 0xb0, 0x72, 0x4d, 0x86, 0xcd, 0x51, 0x85, 0x91, 0x33, 0xca, 0x3d, 0x39, 0xda, 0xb7, 0x7d, 0xa2, 0x06, 0x9d, 0x82, 0x83, 0x58, 0x96, 0x38, 0x7c, 0xcf, 0x3d, 0xf5, 0xcd, 0xd7, 0xa5, 0x79, 0x3f, 0x22, 0x3f, 0x3d, 0x92, 0x3e, 0xa4, 0x63, 0x51, 0x35, 0x31, 0xad, 0xa6, 0x67, 0xab, 0xfe, 0xf7, 0x53, 0x98, 0xc7, 0xa4, 0xbc, 0x6e, 0xfa, 0xdd, 0x4e, 0xde, 0xef, 0x35, 0xab, 0x8f, 0x54, 0x01, 0xe0, 0xda, 0xf7, 0xc2, 0xfc, 0xa1, 0xcd, 0xbb, 0xee, 0xd3, 0xbc, 0xdd, 0x09, 0x33, 0xff, 0x3e, 0xe4, 0xc5, 0xe2, 0x88, 0xab, 0xdf, 0x21, 0x9e, 0x36, 0xa3, 0xee, 0x6f, 0x21, 0x08, 0x41, 0xa0, 0x3c, 0x9e, 0x3e, 0x4d, 0xac, 0x18, 0x12, 0x24, 0x82, 0xef, 0x85, 0xf4, 0x9f, 0xda, 0xcd, 0xc5, 0x02, 0xd2, 0x79, 0xf1, 0x57, 0x7b, 0xe7, 0x7a, 0x4e, 0x00, 0xb7, 0xc7, 0xf1, 0x7b, 0xa5, 0xda, 0x6b, 0x28, 0xc0, 0x1a, 0x07, 0xa8, 0x63, 0xdf, 0xb2, 0x1c, 0x15, 0x6d, 0xa3, 0x20, 0x01, 0xf5, 0x3d, 0x7e, 0xa3, 0xfc, 0xb8, 0xc9, 0x55, 0x4f, 0x07, 0x54, 0x59, 0xa6, 0x7c, 0xc3, 0xc4, 0xe6, 0x9a, 0x6a, 0x37, 0x17, 0x87, 0x87, 0x46, 0x3c, 0xeb, 0xca, 0xed, 0xa6, 0x49, 0x0a, 0x8f, 0x80, 0xb3, 0x92, 0xde, 0xf9, 0xf2, 0x2a, 0x4f } -, - /* Signature */ - 128, - { 0x72, 0x66, 0x70, 0xc9, 0x51, 0x0b, 0x58, 0x35, 0x4c, 0x8a, 0xf3, 0x2b, 0x41, 0xdb, 0x8f, 0x69, 0x21, 0x07, 0xc0, 0xc8, 0x76, 0xe5, 0x52, 0x73, 0xa8, 0x20, 0xa0, 0xc3, 0x0d, 0x39, 0x24, 0x46, 0x0f, 0xa5, 0xbc, 0x33, 0xdf, 0xe1, 0x9d, 0x72, 0xe5, 0x63, 0x49, 0x28, 0x2a, 0x80, 0xfb, 0x12, 0xa8, 0xfa, 0x9e, 0xa4, 0xa5, 0xda, 0x69, 0xc5, 0x82, 0xd7, 0xc6, 0x41, 0x22, 0xa8, 0xa7, 0x91, 0xb3, 0x21, 0x2c, 0x39, 0xe0, 0x28, 0x26, 0x5b, 0x84, 0x54, 0xdf, 0x71, 0x5b, 0xa3, 0x0b, 0x00, 0x3d, 0x12, 0x91, 0x69, 0xcf, 0x12, 0x51, 0x1c, 0x0d, 0x3e, 0x7a, 0xae, 0xce, 0xf3, 0x79, 0x2c, 0xf1, 0x85, 0x64, 0x4c, 0xf8, 0x0e, 0x44, 0x81, 0x47, 0xb1, 0xa7, 0x96, 0x1a, 0xf3, 0x84, 0x41, 0x7d, 0x18, 0x2c, 0x6f, 0x85, 0x52, 0x46, 0xda, 0xd5, 0xb8, 0x93, 0xd9, 0xa7, 0x68, 0x0e, 0xbc } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.9", - /* Message to be signed */ - 160, - { 0xe5, 0x50, 0x6e, 0x04, 0xb1, 0x91, 0x84, 0x10, 0x76, 0x85, 0x87, 0x25, 0xa9, 0xfd, 0xd8, 0xf9, 0x74, 0x5f, 0x24, 0x2e, 0x99, 0x49, 0x4a, 0x42, 0x3f, 0x80, 0x36, 0x74, 0x74, 0x27, 0x1d, 0xce, 0x95, 0xa9, 0x9a, 0x2f, 0x71, 0x13, 0x4f, 0x39, 0xfb, 0x3f, 0x2e, 0x47, 0xc6, 0xa0, 0xb2, 0xfb, 0x6f, 0x61, 0x5b, 0x0d, 0xee, 0x6d, 0xf3, 0x3b, 0x28, 0xf8, 0xb0, 0xd4, 0x1e, 0x92, 0xd1, 0x42, 0xb1, 0x46, 0xe8, 0xcd, 0xe9, 0xb1, 0x1d, 0x6e, 0xc1, 0xd3, 0x7d, 0x71, 0xfd, 0x82, 0xb7, 0x19, 0xce, 0x1a, 0xdd, 0xb8, 0x21, 0xca, 0x4c, 0xaf, 0xbd, 0x2a, 0xa4, 0xf1, 0xe6, 0x11, 0xa2, 0x59, 0xe5, 0xf0, 0x5b, 0x53, 0x1f, 0xa1, 0x1e, 0x3b, 0x67, 0x1b, 0x7a, 0x5b, 0x10, 0xb4, 0xc8, 0x15, 0x6c, 0x25, 0xb0, 0xa5, 0x9e, 0xc6, 0xe1, 0x58, 0xf6, 0xd3, 0x46, 0xd8, 0x48, 0x04, 0xfc, 0xf9, 0x2a, 0x72, 0x76, 0x8f, 0x4e, 0xbc, 0x93, 0x5e, 0xee, 0x5c, 0xfe, 0xc7, 0xf6, 0xe6, 0xe8, 0x3c, 0xbe, 0x15, 0x8a, 0x13, 0x27, 0x5e, 0x84, 0x18, 0x3a, 0x94, 0xd7, 0x24, 0xb0, 0xe9, 0x66, 0x96 } -, - /* Signature */ - 128, - { 0x34, 0x22, 0x0e, 0xda, 0xfd, 0x4a, 0xc8, 0x84, 0xb9, 0xd0, 0x0f, 0xbb, 0xfb, 0x71, 0xa4, 0xa6, 0xc4, 0xd4, 0xb7, 0x1c, 0x19, 0x84, 0x22, 0x05, 0x07, 0x99, 0xd0, 0xc0, 0xfd, 0x54, 0xe9, 0x09, 0xa4, 0xca, 0xd2, 0x29, 0x8f, 0xaa, 0xb3, 0x34, 0x7a, 0x0a, 0xf0, 0xd2, 0x7d, 0x53, 0x01, 0xa8, 0x86, 0x00, 0x9c, 0xf5, 0xc6, 0xf1, 0x25, 0xdf, 0xc1, 0x13, 0x1a, 0xce, 0x38, 0x8b, 0xb2, 0x14, 0xc2, 0x84, 0x44, 0x20, 0xc0, 0x23, 0xdb, 0xc8, 0xb4, 0xa9, 0x66, 0x11, 0xb3, 0xb3, 0x93, 0xac, 0xc3, 0x83, 0x94, 0x90, 0xfc, 0x4e, 0xe2, 0xd3, 0x69, 0xb8, 0xc3, 0xc8, 0x76, 0x57, 0x22, 0x83, 0xef, 0x34, 0xd7, 0x0c, 0x64, 0x03, 0xef, 0x9e, 0x2e, 0x87, 0xa2, 0x76, 0xb2, 0x35, 0x72, 0xed, 0x82, 0xe2, 0x40, 0x22, 0x67, 0xc2, 0x73, 0x7f, 0x75, 0xbb, 0x4a, 0x27, 0xd3, 0xcf, 0x16, 0xd2 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.10", - /* Message to be signed */ - 166, - { 0x8f, 0xc9, 0xcf, 0xa7, 0x21, 0xdf, 0xa0, 0x9b, 0xa0, 0x72, 0x9e, 0xf9, 0x18, 0x9e, 0x54, 0x27, 0xb3, 0xe7, 0x38, 0xc5, 0xae, 0x38, 0xa2, 0x65, 0x7f, 0x7c, 0x7e, 0x31, 0x4a, 0x49, 0xca, 0xeb, 0xa0, 0xfc, 0x9d, 0x45, 0x40, 0xf5, 0xf8, 0xd6, 0xc0, 0x47, 0x53, 0x60, 0x0e, 0xf6, 0xb9, 0xc3, 0x39, 0x65, 0x40, 0xf8, 0x6c, 0x11, 0x75, 0xb6, 0x0b, 0xf4, 0x0e, 0x3d, 0x8c, 0x84, 0x51, 0x35, 0x5e, 0x13, 0x74, 0xf4, 0x30, 0x43, 0xc0, 0xc6, 0xaa, 0x41, 0xd3, 0x79, 0x6b, 0xd8, 0x27, 0x9b, 0x3c, 0x30, 0x62, 0xb3, 0x74, 0x99, 0x6b, 0x7e, 0xae, 0xdd, 0x4d, 0xb0, 0xae, 0xe8, 0xc9, 0x4b, 0x93, 0xb1, 0x71, 0xfc, 0x41, 0x1d, 0x4d, 0xfc, 0x37, 0x28, 0xd0, 0x23, 0x15, 0x58, 0xcf, 0xc8, 0xfa, 0x45, 0xf9, 0x51, 0xb3, 0x5c, 0x9d, 0x46, 0x12, 0x18, 0xa6, 0x50, 0xc7, 0x02, 0xce, 0xa9, 0x3b, 0xb3, 0xfa, 0x14, 0x36, 0xed, 0x44, 0x5c, 0x95, 0x24, 0x9d, 0xc2, 0x20, 0x54, 0x71, 0x01, 0xb9, 0xa9, 0x3e, 0xb0, 0x14, 0xcd, 0x84, 0x3f, 0xf3, 0x9c, 0xe4, 0xc9, 0x6f, 0x82, 0xa3, 0x9f, 0x86, 0x3a, 0x4c, 0x2e, 0x1f, 0xa9 } -, - /* Signature */ - 128, - { 0xa2, 0x6e, 0x7d, 0xbd, 0x5d, 0xfe, 0x08, 0xc7, 0x2b, 0xd8, 0x0d, 0x5e, 0x26, 0x68, 0xd5, 0xd7, 0x2a, 0xbb, 0x1a, 0x0c, 0x04, 0x20, 0xff, 0x0e, 0xa8, 0x6a, 0x9c, 0x76, 0x08, 0xc4, 0x70, 0xe1, 0xc3, 0xf7, 0x2e, 0xbf, 0x44, 0x5d, 0x12, 0x18, 0x71, 0x81, 0x41, 0x55, 0x58, 0xdd, 0x03, 0xeb, 0xe4, 0x07, 0xaa, 0x06, 0xb5, 0x16, 0x47, 0xba, 0xfe, 0x0c, 0x85, 0xf3, 0xd3, 0xb8, 0xdc, 0xe9, 0x0c, 0xeb, 0xf0, 0xa0, 0xee, 0xcb, 0xac, 0x12, 0x28, 0xe7, 0x85, 0x82, 0x0c, 0x4f, 0x90, 0x9d, 0x2e, 0xf3, 0x92, 0xf0, 0x31, 0x17, 0x56, 0x1e, 0xc3, 0x8e, 0xb0, 0xd8, 0x8b, 0x02, 0x32, 0x72, 0xa4, 0x28, 0x63, 0x51, 0x62, 0x0f, 0x21, 0x04, 0x3c, 0xca, 0xf7, 0x50, 0x36, 0x84, 0x00, 0x29, 0x57, 0xef, 0x79, 0xbc, 0xff, 0x9d, 0x1c, 0x20, 0x1c, 0x42, 0xe0, 0x96, 0x0b, 0xd9, 0x69, 0x79 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.11", - /* Message to be signed */ - 238, - { 0x96, 0x1f, 0xe3, 0x4a, 0x21, 0x2c, 0xb0, 0xe6, 0xf6, 0xdc, 0xde, 0xcf, 0x1a, 0x4c, 0xb7, 0xb2, 0x14, 0x39, 0x0a, 0x77, 0xf4, 0x4d, 0x3a, 0x3b, 0x3e, 0xe2, 0xb1, 0x2f, 0x1f, 0x0e, 0xe3, 0x14, 0x2e, 0x9e, 0xaf, 0x70, 0x89, 0x55, 0xec, 0x83, 0x7e, 0xa1, 0xd0, 0xd2, 0x95, 0x4e, 0x6c, 0xe9, 0x50, 0xf3, 0x4c, 0x87, 0x30, 0x54, 0x8f, 0x2e, 0x09, 0x5d, 0x5d, 0xbb, 0x93, 0x8b, 0x19, 0x0b, 0x73, 0x8b, 0xff, 0x81, 0x71, 0x93, 0x02, 0xb6, 0x79, 0x8b, 0x76, 0x8b, 0x0b, 0xbd, 0xd2, 0xe2, 0xb9, 0x67, 0x2d, 0x89, 0x14, 0x05, 0xc7, 0x71, 0xa7, 0x79, 0x02, 0xfd, 0x54, 0x27, 0x42, 0x5a, 0xf0, 0x4e, 0x21, 0xb9, 0x1c, 0x5f, 0x39, 0x37, 0x20, 0x41, 0xe4, 0x94, 0xd9, 0xbe, 0x62, 0xde, 0xce, 0x31, 0xbd, 0x8a, 0x26, 0x2f, 0x6d, 0xdb, 0x84, 0x9f, 0x06, 0x8a, 0xa9, 0x9f, 0x7d, 0x62, 0x62, 0xe1, 0x84, 0xab, 0x9c, 0xb1, 0x62, 0x24, 0x47, 0xd6, 0x2f, 0xf6, 0x71, 0x09, 0x20, 0x30, 0x70, 0x71, 0xc2, 0x72, 0xbe, 0x0b, 0xb3, 0x7f, 0x0e, 0xef, 0x64, 0x5f, 0x99, 0xea, 0xb5, 0x1b, 0x0b, 0xcb, 0xbb, 0x64, 0x87, 0xd8, 0xd2, 0xb4, 0x9f, 0x3f, 0x23, 0xe0, 0xaa, 0x91, 0x8c, 0x89, 0xac, 0x85, 0x56, 0x53, 0xe1, 0xcc, 0xc0, 0x05, 0x91, 0x58, 0x0e, 0x0c, 0xe1, 0xe3, 0x87, 0x79, 0xc0, 0x4b, 0xe7, 0xdf, 0x1c, 0x66, 0x63, 0xac, 0xd9, 0x93, 0x7e, 0x47, 0x2b, 0x3e, 0xb6, 0xd4, 0xb7, 0x0a, 0x08, 0x0d, 0xe8, 0xe0, 0x35, 0x48, 0xf5, 0x12, 0x45, 0xbe, 0x7c, 0xe0, 0xb8, 0x6d, 0xee, 0xc1, 0x76, 0xe0, 0x0e, 0x54, 0xbd, 0x63, 0xbd, 0x5b, 0xb0, 0x2f, 0xc9, 0x54 } -, - /* Signature */ - 128, - { 0x98, 0xac, 0x47, 0x73, 0x59, 0x15, 0x9e, 0x93, 0xe1, 0xb3, 0x36, 0xee, 0x05, 0x60, 0x6d, 0x42, 0xb7, 0xe1, 0x25, 0x0d, 0x12, 0x95, 0x60, 0xc0, 0xd0, 0x95, 0xf8, 0xf8, 0xea, 0x3c, 0x04, 0x74, 0x32, 0xa9, 0x9c, 0x1e, 0xc4, 0xbc, 0x88, 0x7d, 0x7f, 0x07, 0xf6, 0x1d, 0xf1, 0x6f, 0x0c, 0x09, 0xf7, 0x15, 0xb7, 0x05, 0x38, 0x8b, 0xb8, 0xa6, 0x11, 0x87, 0x34, 0x6e, 0x8d, 0x7b, 0x07, 0xea, 0xb2, 0xfc, 0x05, 0xdb, 0x89, 0xe0, 0x30, 0x09, 0x44, 0xae, 0x37, 0x73, 0xe4, 0x4c, 0xb9, 0x2c, 0x5c, 0xf0, 0xf4, 0xfb, 0xe0, 0x1a, 0x05, 0xad, 0x79, 0xbf, 0xaa, 0x24, 0x7f, 0x83, 0xed, 0x1e, 0xda, 0x48, 0xba, 0xaf, 0xd1, 0xe1, 0x80, 0x07, 0x8c, 0xa8, 0xd3, 0x21, 0xd5, 0x0b, 0x42, 0x57, 0x87, 0xf0, 0x12, 0x43, 0xa4, 0x93, 0x37, 0x4e, 0x84, 0xf5, 0xcd, 0x56, 0xb7, 0x53, 0xd7, 0xac } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.12", - /* Message to be signed */ - 121, - { 0x96, 0xff, 0x0a, 0x5e, 0xca, 0xc9, 0x51, 0x16, 0xbd, 0x73, 0x43, 0x79, 0x5a, 0xf8, 0x3c, 0x87, 0xed, 0x9f, 0x83, 0x45, 0xd0, 0x3f, 0x6f, 0x32, 0x2f, 0x29, 0x54, 0x93, 0xf4, 0x0b, 0x19, 0xba, 0x8f, 0xfe, 0x2c, 0x89, 0x8c, 0x7b, 0x20, 0x66, 0x21, 0xf7, 0x2e, 0x02, 0xc7, 0xf0, 0xf0, 0x0f, 0x9f, 0x1c, 0x52, 0x3d, 0x73, 0xd3, 0x35, 0xa2, 0x6c, 0xed, 0xdc, 0x73, 0x98, 0xb7, 0xca, 0x20, 0x09, 0xca, 0xcb, 0xb1, 0x82, 0x83, 0xb7, 0x6b, 0x28, 0x15, 0xd1, 0xe9, 0x01, 0x00, 0x09, 0x6e, 0x95, 0xb8, 0x85, 0x30, 0xf1, 0xc4, 0x8c, 0x39, 0x61, 0xc4, 0x35, 0xbc, 0xe0, 0x28, 0x9f, 0xf6, 0x2e, 0x21, 0xbf, 0x4d, 0x3e, 0xc8, 0x99, 0xc8, 0x7e, 0x14, 0xc8, 0xea, 0xd7, 0x92, 0x2e, 0x79, 0x5e, 0x3e, 0x6f, 0x41, 0x80, 0xc0, 0x89, 0x9e, 0xa0 } -, - /* Signature */ - 128, - { 0x7c, 0x7b, 0x01, 0x57, 0xf6, 0xa5, 0x09, 0x09, 0x51, 0x09, 0x63, 0x28, 0x2f, 0x00, 0x11, 0x1e, 0xea, 0x70, 0x19, 0x37, 0x54, 0xe4, 0x27, 0xa0, 0x2b, 0x34, 0x6f, 0xeb, 0x68, 0x2f, 0x4c, 0x71, 0x87, 0xbb, 0x38, 0x1d, 0x31, 0xd2, 0x3b, 0x94, 0x76, 0x88, 0x43, 0x24, 0x5a, 0xad, 0x53, 0x61, 0xfc, 0xa4, 0x2d, 0x8b, 0x28, 0x4c, 0x8d, 0x92, 0xe6, 0xfb, 0x99, 0x2f, 0xa7, 0x71, 0x2f, 0xa5, 0xa9, 0x31, 0x55, 0xdf, 0x02, 0x0d, 0x30, 0x0a, 0x3b, 0xf8, 0x98, 0x86, 0x66, 0x8c, 0xf3, 0x7b, 0xd1, 0x3b, 0x55, 0x0a, 0xdb, 0x2d, 0x2a, 0x86, 0xc6, 0x9d, 0xaa, 0xac, 0xdc, 0x50, 0x30, 0xdc, 0x84, 0x34, 0x3c, 0x8b, 0x49, 0x34, 0xf0, 0x3c, 0xdc, 0x0e, 0xef, 0x0f, 0x6c, 0x1e, 0xa7, 0xec, 0x09, 0x62, 0x00, 0x79, 0x03, 0xb4, 0x48, 0x21, 0x7d, 0xe9, 0x3b, 0x75, 0x07, 0x54, 0x9b, 0x2e } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.13", - /* Message to be signed */ - 79, - { 0x32, 0xa1, 0x2e, 0x0c, 0x67, 0x0e, 0xd2, 0x15, 0xae, 0x54, 0x49, 0xa0, 0x91, 0x7a, 0xe9, 0x5e, 0x23, 0xdb, 0x80, 0x3a, 0xd2, 0x8a, 0x18, 0x42, 0xed, 0xfa, 0x90, 0xbc, 0x40, 0x5d, 0xd8, 0x9a, 0x1b, 0x46, 0x8a, 0xce, 0xbd, 0x08, 0xfe, 0x9c, 0x69, 0x3d, 0x8f, 0xb1, 0x05, 0xe8, 0x22, 0x2e, 0xb5, 0x7f, 0x79, 0xe4, 0xb2, 0x27, 0x00, 0xe0, 0x7f, 0x27, 0x6d, 0x4a, 0xec, 0xc7, 0xa1, 0x5f, 0xb7, 0x47, 0x33, 0x06, 0x56, 0x27, 0xb8, 0x79, 0xb0, 0x16, 0xee, 0xd4, 0xab, 0x4a, 0x1c } -, - /* Signature */ - 128, - { 0x85, 0xb9, 0x0e, 0xb8, 0x26, 0x51, 0x4a, 0x0e, 0xc0, 0xfc, 0x1b, 0xdc, 0x34, 0x86, 0xa8, 0xdc, 0x8b, 0x0f, 0x26, 0x3e, 0xfe, 0x57, 0xcf, 0x17, 0x50, 0xa4, 0x2a, 0x6b, 0x5b, 0x99, 0x72, 0x64, 0xfa, 0x61, 0x78, 0x64, 0x83, 0x7e, 0x63, 0x9f, 0x45, 0xd9, 0x20, 0x58, 0x41, 0xcd, 0xc1, 0x34, 0xab, 0xea, 0xcf, 0x6e, 0xe0, 0xec, 0xda, 0x09, 0xb9, 0x8d, 0x76, 0x9f, 0x51, 0xf3, 0x94, 0x7a, 0x33, 0x58, 0x7f, 0xf0, 0xc8, 0xdd, 0x01, 0xb7, 0xf6, 0xb2, 0x4a, 0x2f, 0xbf, 0x29, 0xc9, 0xff, 0xf7, 0x37, 0xee, 0xe5, 0x6a, 0xda, 0x2c, 0xeb, 0x74, 0x6b, 0x02, 0x5d, 0x95, 0x65, 0x22, 0xd9, 0x20, 0xd1, 0x2d, 0xdd, 0x13, 0xdb, 0xa0, 0x8b, 0x20, 0xe1, 0xee, 0xe1, 0x3a, 0x8b, 0x25, 0x80, 0xe5, 0x92, 0xc3, 0x4e, 0x39, 0x33, 0x37, 0x66, 0x11, 0x5a, 0x23, 0xb9, 0xd0, 0x0e, 0x2a, 0x42 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.14", - /* Message to be signed */ - 78, - { 0xbb, 0xda, 0x73, 0xcb, 0xe2, 0xbf, 0xf7, 0xff, 0x53, 0x62, 0xeb, 0xe9, 0x32, 0xc0, 0xa0, 0xdd, 0x68, 0xac, 0x84, 0xee, 0x99, 0x8f, 0xbf, 0x59, 0xa2, 0xa9, 0x26, 0x55, 0x20, 0x32, 0x31, 0x63, 0xb3, 0x0d, 0x9e, 0x70, 0x08, 0xb9, 0x4b, 0x0c, 0x0e, 0xbc, 0x5f, 0x6c, 0x4c, 0x97, 0x3c, 0x13, 0xff, 0x15, 0x3d, 0x31, 0x69, 0x0c, 0x3c, 0x95, 0xab, 0x23, 0x1f, 0x0c, 0x9e, 0xc9, 0x98, 0xfb, 0xfc, 0xad, 0xc2, 0x8b, 0x2d, 0x7f, 0x06, 0x50, 0x7e, 0x17, 0xd2, 0x1e, 0x82, 0xda } -, - /* Signature */ - 128, - { 0x26, 0xf9, 0x52, 0xb6, 0x57, 0xfd, 0xb9, 0xa1, 0x1d, 0xc8, 0x43, 0x79, 0x0c, 0x9d, 0x2a, 0x6a, 0x51, 0xc9, 0x76, 0x10, 0x1e, 0xfb, 0x82, 0xd0, 0x53, 0x60, 0x67, 0x62, 0xab, 0xa3, 0x3a, 0xf6, 0x28, 0x0b, 0xde, 0x38, 0x15, 0xe0, 0x87, 0x4d, 0x60, 0x78, 0x75, 0x38, 0x42, 0xe5, 0xb1, 0xc9, 0x0c, 0xf7, 0x99, 0x12, 0x20, 0xfc, 0xfa, 0x62, 0x28, 0x49, 0x43, 0x69, 0x0c, 0x30, 0x1e, 0x9f, 0xc6, 0xe4, 0x79, 0xaf, 0x68, 0xb9, 0x69, 0x47, 0x85, 0xbe, 0x40, 0xd4, 0x69, 0x86, 0xa6, 0x2a, 0x12, 0x1a, 0xa9, 0xad, 0x0d, 0xe9, 0x69, 0x52, 0x1f, 0x1c, 0xb8, 0xe7, 0xc4, 0xbd, 0x70, 0xc7, 0xc8, 0xcd, 0x7a, 0x9d, 0x13, 0x54, 0xe7, 0xd0, 0xaa, 0x0d, 0x85, 0xd6, 0xd7, 0xaa, 0x00, 0xe4, 0x64, 0x90, 0x26, 0xd6, 0xf0, 0x70, 0xf8, 0xb3, 0xc2, 0x7c, 0x98, 0x55, 0x6b, 0xea, 0xa4, 0xc0 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.15", - /* Message to be signed */ - 150, - { 0x2c, 0x32, 0x5d, 0xda, 0xf6, 0x52, 0x6a, 0x1e, 0xa3, 0x51, 0x8e, 0xe5, 0xe5, 0x40, 0x7f, 0x03, 0x90, 0xe0, 0xeb, 0xaa, 0xa5, 0xf4, 0x72, 0xa1, 0xe9, 0xab, 0x46, 0xf7, 0x46, 0xd7, 0x1b, 0xa2, 0xe2, 0x17, 0xfa, 0xa8, 0x17, 0x99, 0xbf, 0x35, 0x8f, 0x95, 0xe9, 0x83, 0x08, 0x27, 0x0b, 0x18, 0xa0, 0x01, 0x99, 0x29, 0xa2, 0x88, 0xd0, 0xc9, 0x56, 0xe0, 0xbf, 0x17, 0xc5, 0x19, 0x8c, 0xeb, 0x2c, 0xd9, 0xfe, 0x40, 0xd7, 0x02, 0xa4, 0x4e, 0x56, 0x45, 0xec, 0xa5, 0xb4, 0x39, 0xab, 0xca, 0x7b, 0x2c, 0x6f, 0x95, 0xac, 0xc3, 0xc2, 0xc3, 0x65, 0x19, 0x5c, 0x79, 0x5e, 0x91, 0xd6, 0x3b, 0x3c, 0x09, 0x33, 0x24, 0x4f, 0xf1, 0x25, 0x63, 0xaf, 0x66, 0x22, 0xa4, 0x0c, 0x74, 0x15, 0xdb, 0x60, 0xa7, 0x8d, 0xca, 0x02, 0x60, 0x25, 0x14, 0x39, 0x53, 0x8d, 0x38, 0xaa, 0x38, 0x28, 0x9d, 0x92, 0x88, 0x86, 0xab, 0x12, 0x87, 0x36, 0xa6, 0xa8, 0x73, 0x9c, 0x14, 0x55, 0xc4, 0x84, 0x9f, 0x2d, 0x54, 0x56, 0x45, 0x37, 0x93 } -, - /* Signature */ - 128, - { 0x6d, 0x1f, 0x20, 0x3d, 0xc3, 0xff, 0xa7, 0xa3, 0x34, 0xd3, 0x1b, 0x9a, 0x75, 0xe0, 0x12, 0x58, 0x1b, 0x8d, 0x62, 0xb2, 0xbf, 0x73, 0x80, 0x0b, 0xe5, 0x1d, 0x02, 0x65, 0x33, 0x99, 0x83, 0x18, 0xc0, 0xca, 0xc9, 0x2a, 0x02, 0xd4, 0x6d, 0x75, 0x9b, 0xf8, 0x0a, 0x41, 0xda, 0xa0, 0xa6, 0xa2, 0x9f, 0x4f, 0xa0, 0xbb, 0x60, 0x66, 0x4c, 0xac, 0xad, 0xe2, 0x4a, 0x65, 0xcb, 0x47, 0x65, 0x11, 0x09, 0xbe, 0xec, 0x82, 0x31, 0x91, 0x95, 0x25, 0xd1, 0x47, 0x32, 0x68, 0x74, 0x55, 0x78, 0xdb, 0x9e, 0x30, 0x64, 0x10, 0x8a, 0xe4, 0x6a, 0x48, 0x70, 0xf1, 0x80, 0x66, 0x78, 0x9b, 0x03, 0x66, 0xa7, 0xd0, 0xce, 0x37, 0xe0, 0x30, 0xb5, 0x89, 0x46, 0xec, 0x8c, 0x1a, 0x14, 0x11, 0x54, 0xdb, 0x0e, 0x26, 0x1b, 0xef, 0x8b, 0xaf, 0x2e, 0x9f, 0x65, 0xfc, 0xd1, 0x6b, 0x7d, 0x57, 0x97, 0xb6 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.16", - /* Message to be signed */ - 25, - { 0x29, 0x85, 0xe8, 0xb5, 0x50, 0x81, 0x2f, 0xb6, 0x6c, 0x18, 0xf8, 0x0e, 0x6f, 0x09, 0x2a, 0x94, 0x5d, 0x09, 0x15, 0x83, 0x86, 0x1b, 0x62, 0x5d, 0x1e } -, - /* Signature */ - 128, - { 0x2e, 0x84, 0x30, 0x13, 0xcd, 0x5e, 0x79, 0x5e, 0x21, 0x66, 0xc8, 0xe9, 0x1b, 0x06, 0xc3, 0x13, 0x1d, 0xc3, 0xa5, 0xe1, 0x21, 0x36, 0xd7, 0x16, 0x0f, 0xfd, 0x11, 0xbb, 0xef, 0xcf, 0x6a, 0xb6, 0x40, 0xe0, 0x5d, 0x76, 0xe0, 0xc6, 0x1e, 0xd3, 0x06, 0xf6, 0x08, 0x6b, 0xbb, 0x56, 0x7c, 0xa8, 0x7e, 0x40, 0xc6, 0x92, 0x4d, 0x5c, 0x84, 0xa6, 0xce, 0x28, 0xa8, 0x39, 0x50, 0xbd, 0x4b, 0x84, 0xe2, 0x7f, 0xc5, 0x06, 0x9f, 0xd0, 0x62, 0x4d, 0x50, 0xea, 0xc2, 0x4a, 0x94, 0x11, 0xb5, 0xf7, 0x67, 0x85, 0xd9, 0xdb, 0x5d, 0xa3, 0x0f, 0x42, 0x56, 0x95, 0xb0, 0x19, 0xb8, 0x4c, 0xdb, 0xb8, 0x25, 0xbd, 0x46, 0xe7, 0x35, 0x2e, 0x08, 0xf1, 0x14, 0xc8, 0x7b, 0x06, 0x6f, 0xe4, 0x3d, 0x10, 0x56, 0xa2, 0xc6, 0x10, 0xce, 0xa7, 0xe3, 0xd3, 0xdc, 0x98, 0xbf, 0x44, 0x97, 0xeb, 0x4f, 0x13 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.17", - /* Message to be signed */ - 146, - { 0x77, 0x78, 0x8e, 0x83, 0x8b, 0x83, 0x4e, 0x8f, 0x4d, 0x04, 0x5a, 0xa8, 0x94, 0xb9, 0x0a, 0xbb, 0x85, 0x94, 0x0c, 0xfc, 0x58, 0xd7, 0x72, 0x5e, 0x7f, 0x37, 0x3d, 0xa5, 0x54, 0x71, 0x37, 0xc6, 0x0b, 0xea, 0x75, 0x1e, 0x01, 0x42, 0xbf, 0x9a, 0x6f, 0x46, 0x49, 0xae, 0xb5, 0x46, 0xed, 0x56, 0x0c, 0xc4, 0xea, 0x15, 0x62, 0xd4, 0xa5, 0xfa, 0x3e, 0xb1, 0xb1, 0x14, 0x77, 0xa3, 0x05, 0x1e, 0x24, 0xc6, 0x06, 0xb8, 0xa7, 0x1c, 0x1a, 0x77, 0x4b, 0xdc, 0xf1, 0xa5, 0x31, 0x0f, 0xed, 0x55, 0x59, 0x23, 0x73, 0x0f, 0xa8, 0xaf, 0x4c, 0x15, 0x80, 0x0d, 0x36, 0x2b, 0x37, 0xad, 0xf1, 0x4f, 0x7a, 0xfc, 0xe7, 0x8e, 0xfa, 0x6b, 0xd8, 0x93, 0x56, 0x3e, 0xfe, 0x0b, 0x3b, 0x82, 0x8e, 0xbd, 0x49, 0x9f, 0x12, 0xa2, 0xfe, 0x33, 0x2b, 0xfe, 0x46, 0xdc, 0xbb, 0x31, 0x4b, 0xbd, 0xbf, 0x69, 0x08, 0x7e, 0x2a, 0x66, 0x5d, 0xf1, 0x10, 0x83, 0x5d, 0xe5, 0x5d, 0x61, 0xe5, 0xc2, 0x02, 0x5f, 0xd8, 0xdb } -, - /* Signature */ - 128, - { 0x8e, 0x5f, 0x33, 0x53, 0xc4, 0x9c, 0xbb, 0xb2, 0xea, 0x69, 0x6a, 0xbb, 0x57, 0x40, 0xba, 0xe0, 0x15, 0xef, 0xfd, 0x95, 0x0d, 0x56, 0x07, 0x13, 0x76, 0x05, 0xa1, 0x00, 0xc4, 0xa5, 0x3f, 0x1b, 0x95, 0x17, 0x6c, 0xaf, 0x34, 0x9f, 0x4f, 0xd5, 0x88, 0xae, 0xdd, 0xdc, 0xf5, 0x06, 0x0c, 0xcb, 0x72, 0x47, 0x8c, 0xfb, 0x09, 0x85, 0x62, 0xf3, 0x4d, 0x8f, 0x8e, 0xba, 0x44, 0x6a, 0x38, 0x47, 0x56, 0x5a, 0x7b, 0x89, 0x55, 0xad, 0x9e, 0x0c, 0x6e, 0xb6, 0x70, 0x99, 0xe1, 0xa4, 0x6c, 0x3e, 0xb2, 0xd4, 0x9d, 0x90, 0x90, 0xae, 0x5f, 0x63, 0xe8, 0xa0, 0x8b, 0x6e, 0x8f, 0x21, 0xf0, 0x03, 0xe4, 0x51, 0xd2, 0x50, 0xff, 0xc5, 0xa7, 0x90, 0xd6, 0x6a, 0x0e, 0x2e, 0x3e, 0x28, 0xa6, 0x33, 0x9f, 0xe9, 0x1d, 0x11, 0x29, 0x21, 0xf5, 0x5d, 0x12, 0x30, 0x30, 0x6f, 0xad, 0x5c, 0x01, 0x90 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.18", - /* Message to be signed */ - 62, - { 0x1d, 0x59, 0x9d, 0x76, 0x2c, 0xd5, 0x4d, 0xf7, 0x0f, 0x1a, 0x09, 0x83, 0xbc, 0x3e, 0xa2, 0xbb, 0xca, 0x6f, 0xcb, 0xbd, 0x16, 0x26, 0x03, 0xba, 0x81, 0x56, 0x10, 0x77, 0xfd, 0x92, 0x84, 0x92, 0x5c, 0xf1, 0xf1, 0xb0, 0x8b, 0xea, 0x1e, 0x70, 0xbc, 0x59, 0x5d, 0xf0, 0xb3, 0x43, 0xb8, 0x3b, 0x9c, 0xf3, 0xd6, 0x34, 0xf9, 0x5e, 0x37, 0xe8, 0xd1, 0xc5, 0x85, 0xfa, 0xb1, 0x99 } -, - /* Signature */ - 128, - { 0x71, 0x74, 0x97, 0xa4, 0xe6, 0x0d, 0xbf, 0xfa, 0x19, 0x6e, 0xff, 0x75, 0x8e, 0x90, 0x1c, 0xe1, 0xfe, 0x6e, 0x2b, 0xc7, 0xe1, 0xd5, 0x3a, 0x3d, 0xcf, 0x62, 0x25, 0x67, 0x1a, 0xf1, 0x46, 0xc5, 0xde, 0xe2, 0x00, 0xa8, 0x14, 0xf4, 0x89, 0x8d, 0x16, 0xa9, 0xb5, 0xf5, 0x08, 0xdc, 0x9f, 0xde, 0x4d, 0x64, 0x07, 0x0e, 0x55, 0xae, 0x3b, 0x1f, 0xdf, 0x79, 0x19, 0xf4, 0x2b, 0x7c, 0xff, 0xb7, 0xe9, 0x28, 0xc4, 0xca, 0xeb, 0x55, 0x2d, 0xc6, 0xfd, 0x08, 0x18, 0x34, 0xb2, 0xdc, 0x2f, 0xed, 0x07, 0xe7, 0xe6, 0x27, 0xd3, 0x4b, 0x39, 0x10, 0xca, 0x71, 0x3b, 0xf4, 0x15, 0x4e, 0xff, 0x99, 0x96, 0x57, 0x36, 0x15, 0x18, 0xfc, 0xe5, 0xa8, 0xf6, 0x42, 0xdc, 0x9a, 0x18, 0xa6, 0x6e, 0xde, 0x22, 0x19, 0x0f, 0x60, 0xaa, 0xf9, 0x58, 0xd6, 0x24, 0x6b, 0x00, 0xa0, 0x32, 0xc3, 0x98, 0x41 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.19", - /* Message to be signed */ - 169, - { 0xda, 0x51, 0x00, 0x86, 0x60, 0xb6, 0x3b, 0x87, 0x67, 0xe6, 0x5f, 0x12, 0xc6, 0x30, 0x8e, 0xc1, 0x8e, 0xd9, 0x57, 0x5a, 0x42, 0x6b, 0xc5, 0xfb, 0xe6, 0x60, 0x10, 0xec, 0x3f, 0x01, 0x17, 0x5f, 0xfa, 0x57, 0x41, 0xea, 0xcc, 0xdd, 0xb0, 0x2f, 0xce, 0x7b, 0x2e, 0xf7, 0x78, 0x44, 0x40, 0xd7, 0x2d, 0x37, 0x52, 0x20, 0x3f, 0x53, 0x4e, 0x52, 0xfc, 0xf6, 0x26, 0xa8, 0xc5, 0x96, 0x51, 0x3f, 0x41, 0x90, 0x64, 0xbb, 0xba, 0xfd, 0xe7, 0xf8, 0xd6, 0x5f, 0x30, 0xd7, 0xca, 0x68, 0x71, 0x89, 0x70, 0xde, 0x71, 0xfc, 0x8c, 0x0e, 0xed, 0x4d, 0xa0, 0x0a, 0x4e, 0x1a, 0xb5, 0x41, 0x02, 0xd9, 0xd1, 0x65, 0xbd, 0x7c, 0x54, 0xaf, 0x5c, 0x31, 0xc1, 0x5c, 0x05, 0xbc, 0xa5, 0x5b, 0x6f, 0xdd, 0x19, 0x10, 0x86, 0xa5, 0x3e, 0x52, 0x96, 0xf4, 0x84, 0xc3, 0x47, 0xd8, 0xfb, 0x94, 0x5a, 0x10, 0xc4, 0x94, 0x49, 0x75, 0x27, 0x32, 0xf6, 0x2f, 0x34, 0xc3, 0x25, 0x15, 0x58, 0x86, 0x51, 0x13, 0x79, 0x19, 0x28, 0x5a, 0x2c, 0x8e, 0xf7, 0xb4, 0xaa, 0x0e, 0x69, 0x0b, 0x0b, 0x65, 0x43, 0x7f, 0xf8, 0xd5, 0x6f, 0xc9, 0x5d, 0xcb, 0xc3, 0xe7, 0x8d } -, - /* Signature */ - 128, - { 0x32, 0x67, 0x72, 0x28, 0xff, 0x08, 0xc6, 0x6f, 0xd0, 0x3b, 0xb3, 0x1f, 0x0d, 0xfe, 0x89, 0x01, 0x53, 0xb3, 0x44, 0x6b, 0x57, 0xeb, 0x84, 0xef, 0x39, 0x56, 0x20, 0x8f, 0x72, 0xa0, 0x7c, 0x87, 0x67, 0xe6, 0xbf, 0x09, 0xf0, 0x38, 0xbc, 0xf7, 0xf7, 0x35, 0xee, 0x24, 0xa1, 0xf6, 0x40, 0xa1, 0x89, 0x8d, 0x40, 0x9e, 0xb5, 0x3a, 0xbd, 0xb6, 0x93, 0x94, 0x27, 0x34, 0x56, 0x9a, 0xf7, 0x1a, 0x4c, 0xd9, 0x9a, 0x65, 0x20, 0xba, 0xca, 0x5d, 0x42, 0x86, 0xb1, 0x99, 0xcc, 0x67, 0x62, 0x8e, 0x2f, 0xca, 0xd2, 0x96, 0xa3, 0x0e, 0xca, 0x49, 0x9e, 0xb8, 0x80, 0x50, 0x7f, 0x6a, 0x37, 0x44, 0x0b, 0x61, 0xc1, 0x28, 0x4c, 0x40, 0x3c, 0x41, 0x32, 0x1b, 0x99, 0x05, 0x3f, 0x5d, 0x69, 0x72, 0x8d, 0x5b, 0x97, 0x35, 0x76, 0xcf, 0x04, 0x74, 0x83, 0x33, 0xd8, 0x08, 0xd5, 0xe6, 0x8a, 0x8f } - -} -, -{ - "PKCS#1 v1.5 Signature Example 6.20", - /* Message to be signed */ - 50, - { 0x8c, 0xd2, 0xda, 0xd2, 0xa5, 0xd5, 0xf9, 0xfa, 0xa0, 0x7e, 0x24, 0xa9, 0x6e, 0x86, 0xf9, 0xb0, 0xac, 0x8b, 0x40, 0x22, 0x2a, 0xc9, 0xfb, 0x8a, 0x8a, 0x15, 0x72, 0x7c, 0xf2, 0xf5, 0x3e, 0x68, 0x4a, 0xf4, 0xab, 0xdc, 0x98, 0x68, 0xa7, 0x25, 0x3b, 0x25, 0xb0, 0x96, 0xbd, 0x70, 0x1f, 0x46, 0xa9, 0x43 } -, - /* Signature */ - 128, - { 0x8f, 0x03, 0x22, 0xeb, 0x2c, 0x54, 0x05, 0x24, 0x85, 0xa6, 0x45, 0x49, 0xad, 0xff, 0x2a, 0x36, 0x31, 0xdb, 0x65, 0x76, 0xfc, 0x0c, 0xaf, 0xb5, 0x51, 0x69, 0x7d, 0xc5, 0x35, 0x6f, 0x02, 0xe0, 0x93, 0xcb, 0x69, 0x17, 0x3a, 0x7e, 0x83, 0x55, 0xa0, 0xda, 0xde, 0xbf, 0xa5, 0x3c, 0xb2, 0x90, 0x7f, 0x00, 0x2d, 0xb3, 0xa3, 0xe3, 0x87, 0xda, 0x05, 0x7b, 0x7c, 0x73, 0x55, 0x16, 0x43, 0x84, 0x3e, 0xf5, 0x74, 0x48, 0x1f, 0x80, 0x74, 0x15, 0x17, 0x7e, 0x4b, 0x34, 0xc2, 0x5b, 0xd5, 0x5f, 0x4c, 0x02, 0xfa, 0x0a, 0xde, 0xa3, 0xa9, 0x58, 0x04, 0x65, 0xf3, 0x58, 0xc0, 0x05, 0x96, 0xb5, 0xcc, 0x06, 0x2d, 0x58, 0x92, 0x30, 0x3e, 0x1a, 0xcc, 0x11, 0x3c, 0x3b, 0x4b, 0xc7, 0x4d, 0x42, 0xe8, 0x58, 0x02, 0x90, 0x78, 0x48, 0x2a, 0x1b, 0x23, 0x4a, 0x62, 0x5b, 0x04, 0x28, 0x44, 0x06 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 7: A 1025-bit RSA key pair", -{ - /* Modulus */ - 129, - { 0x01, 0x69, 0x34, 0xcd, 0xff, 0x48, 0x50, 0xb6, 0x00, 0x2c, 0xc0, 0xf0, 0xf4, 0x01, 0x0a, 0x32, 0xc6, 0x55, 0xe5, 0xcf, 0x6e, 0x7c, 0x89, 0x93, 0x7f, 0xd7, 0x55, 0xef, 0x6a, 0xbe, 0x37, 0x9d, 0xad, 0xde, 0x70, 0xcc, 0x21, 0x77, 0x51, 0xf1, 0x4c, 0xba, 0x6d, 0x90, 0xfe, 0x52, 0xdc, 0x0a, 0xf5, 0x8b, 0x25, 0x2f, 0x26, 0xbf, 0x72, 0xda, 0x57, 0x9f, 0xda, 0xf5, 0x7d, 0xdd, 0x6c, 0xd6, 0x02, 0x18, 0x79, 0x94, 0x9a, 0x02, 0x76, 0xb4, 0x43, 0x3f, 0xf0, 0x1e, 0xfc, 0xcc, 0xf3, 0x5a, 0x11, 0xe7, 0xc7, 0x7b, 0x38, 0xc1, 0x8c, 0xca, 0x94, 0xae, 0x01, 0x2d, 0x0f, 0x37, 0x04, 0x21, 0x49, 0x1c, 0x52, 0xad, 0x15, 0xac, 0x76, 0xb1, 0x2e, 0xcd, 0x21, 0x8f, 0x52, 0xe7, 0x57, 0x86, 0x6e, 0x08, 0x9d, 0xd8, 0xad, 0xbb, 0x48, 0xe9, 0xba, 0x89, 0x43, 0x36, 0xc5, 0x75, 0xc4, 0x06, 0x55 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0x0d, 0x17, 0x19, 0xe5, 0xbd, 0x47, 0x6d, 0x87, 0xc7, 0xec, 0xc3, 0x1e, 0xb8, 0xab, 0x42, 0x5d, 0x4f, 0xe4, 0xc8, 0xf5, 0xc7, 0xae, 0x23, 0x0a, 0x10, 0x47, 0x55, 0x3f, 0xfb, 0x53, 0x9f, 0xd3, 0x85, 0x5a, 0xf5, 0xa4, 0x3b, 0x2d, 0xdd, 0x4e, 0x95, 0xa2, 0xb3, 0x0d, 0x40, 0x7a, 0xa8, 0x81, 0x59, 0xbb, 0xad, 0x2a, 0x87, 0x3d, 0x80, 0x93, 0xb4, 0x8a, 0x4b, 0xce, 0x20, 0xad, 0x99, 0x26, 0x25, 0x3e, 0xd3, 0x39, 0xac, 0x3b, 0x54, 0x3f, 0xc7, 0x42, 0x96, 0x95, 0x33, 0x8d, 0xb0, 0xbc, 0x1d, 0xc3, 0x68, 0x6c, 0xfd, 0x13, 0x9b, 0xb5, 0xb2, 0x87, 0x36, 0xbc, 0x16, 0x60, 0xa9, 0x53, 0x48, 0xfc, 0x91, 0xc3, 0x25, 0xd0, 0x3a, 0x7f, 0xb2, 0x16, 0xd2, 0xd9, 0xcd, 0x93, 0x64, 0xde, 0x4e, 0xe7, 0xd2, 0x11, 0x9c, 0x3b, 0x0f, 0xbb, 0xa8, 0xa7, 0x1f, 0x0d, 0x3f, 0x5a, 0xb9, 0xb9 } -, - /* Prime 1 */ - 65, - { 0x01, 0x58, 0xc0, 0x24, 0x6c, 0xd1, 0x69, 0xfc, 0x59, 0x3b, 0x25, 0x8b, 0xbf, 0x45, 0x23, 0xab, 0x2b, 0x55, 0xc4, 0x60, 0x73, 0x3a, 0x7f, 0xb4, 0x69, 0x10, 0x90, 0x77, 0xb3, 0x0e, 0x4d, 0x35, 0xf2, 0x1a, 0x35, 0xb1, 0xf4, 0x1e, 0x42, 0x04, 0xe8, 0x1d, 0x2e, 0x4c, 0x46, 0x3c, 0x24, 0x11, 0x39, 0x34, 0x09, 0x8b, 0x45, 0x2d, 0xab, 0x4b, 0xe1, 0x59, 0x97, 0x20, 0xef, 0x68, 0x72, 0x83, 0x3d } -, - /* Prime 2 */ - 65, - { 0x01, 0x0c, 0x38, 0x2d, 0xea, 0x5e, 0x7d, 0x79, 0x29, 0x8c, 0x64, 0x1f, 0xb2, 0xe4, 0xfa, 0x09, 0xf2, 0x4f, 0x6a, 0x7a, 0x45, 0x9a, 0x88, 0x2c, 0x87, 0xa8, 0x03, 0x49, 0x5f, 0x05, 0x6e, 0xcc, 0x3b, 0x43, 0xc5, 0x37, 0x73, 0x1f, 0x85, 0xef, 0xc8, 0xfb, 0x53, 0x87, 0xad, 0x67, 0x31, 0xa6, 0x43, 0x53, 0x32, 0x15, 0xde, 0xcc, 0x38, 0x7d, 0x96, 0x76, 0x12, 0x2c, 0x17, 0x0e, 0x91, 0xe0, 0xf9 } -, - /* Prime exponent 1 */ - 64, - { 0xd5, 0x78, 0xdc, 0xd5, 0x38, 0xf2, 0xfc, 0xdc, 0x30, 0x00, 0xb6, 0xc0, 0xf0, 0x49, 0xfe, 0xe2, 0xad, 0x90, 0x14, 0xfd, 0x24, 0xfb, 0x10, 0xb6, 0x82, 0x18, 0x42, 0xd6, 0x70, 0x03, 0xa5, 0x64, 0xcd, 0x8f, 0xf4, 0x2a, 0x2a, 0x56, 0x4c, 0xfd, 0x81, 0x9c, 0x3a, 0x84, 0xbf, 0x16, 0xc2, 0x47, 0x7e, 0x8e, 0x6e, 0x5b, 0x9e, 0xc4, 0xd4, 0x0e, 0xad, 0x50, 0x24, 0x87, 0xba, 0x50, 0x36, 0x2d } -, - /* Prime exponent 2 */ - 64, - { 0x88, 0x88, 0xdc, 0x8e, 0xae, 0x94, 0xee, 0xa5, 0x80, 0xca, 0xc2, 0xfc, 0x1c, 0xe5, 0x4f, 0x44, 0xe2, 0xba, 0x50, 0x0d, 0xb8, 0x71, 0x53, 0x41, 0xa6, 0xfc, 0x2d, 0x50, 0x4a, 0x82, 0xb1, 0x42, 0x05, 0xe8, 0x91, 0xa6, 0x6f, 0xc8, 0x8d, 0x5c, 0x60, 0xdb, 0x8f, 0x78, 0x6c, 0xcc, 0x70, 0x57, 0x5b, 0x35, 0x66, 0xbe, 0xa8, 0x74, 0xa5, 0x31, 0x7f, 0x5f, 0x16, 0xc4, 0x91, 0xed, 0x1e, 0x79 } -, - /* Coefficient */ - 64, - { 0x17, 0xb0, 0xd6, 0x23, 0x36, 0x19, 0x1e, 0x63, 0xbc, 0xa1, 0x59, 0x93, 0x4d, 0x06, 0x16, 0xcb, 0x89, 0x97, 0x40, 0x9c, 0xbf, 0xca, 0x37, 0x05, 0x69, 0x5b, 0x14, 0xfb, 0x64, 0xa0, 0x81, 0xc1, 0xc9, 0xf5, 0x86, 0x19, 0x3e, 0x52, 0x3a, 0xbd, 0x0b, 0xeb, 0x8d, 0x72, 0x0c, 0xfe, 0x53, 0x7d, 0xfa, 0x1e, 0xde, 0xc4, 0xa6, 0x64, 0x37, 0xd2, 0x41, 0x19, 0x6b, 0x7a, 0x2c, 0xe5, 0x56, 0xc4 } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 7.1", - /* Message to be signed */ - 157, - { 0x35, 0x39, 0x99, 0x7a, 0xe7, 0x09, 0xfe, 0x32, 0xc1, 0x03, 0x6a, 0x13, 0x27, 0x57, 0xf2, 0xa1, 0x66, 0x7a, 0x91, 0xcc, 0x83, 0xbe, 0x73, 0x3a, 0xad, 0xa1, 0xbd, 0xd2, 0x17, 0x92, 0x4c, 0x9a, 0x2c, 0x9f, 0xed, 0x1f, 0xec, 0xf6, 0x1d, 0x1c, 0xf7, 0x9d, 0xae, 0x9a, 0x83, 0xf8, 0xae, 0x3f, 0x4d, 0x05, 0x1b, 0x34, 0xfb, 0xb5, 0x59, 0xcb, 0xfd, 0xa4, 0x92, 0xf1, 0xd8, 0x3b, 0x8b, 0xeb, 0xa0, 0x45, 0xd4, 0xae, 0x1c, 0x8f, 0xea, 0x15, 0xb7, 0x57, 0x7a, 0x1b, 0x8a, 0x3f, 0x55, 0xba, 0xc1, 0x72, 0x7e, 0xdc, 0xa7, 0xf8, 0xf5, 0x2c, 0xb4, 0xba, 0x61, 0xca, 0xf1, 0xfa, 0x8f, 0x8f, 0xd9, 0xaa, 0xc7, 0x79, 0x09, 0x5c, 0xa8, 0x4c, 0x79, 0x91, 0x52, 0x9f, 0xb8, 0x06, 0x99, 0xd0, 0xd4, 0x68, 0x8d, 0xfd, 0xb1, 0x42, 0xed, 0x61, 0xa9, 0x5b, 0x89, 0xce, 0x33, 0x06, 0xbf, 0x97, 0x80, 0xe1, 0xb9, 0x1b, 0x84, 0x8c, 0x8d, 0x20, 0x03, 0x97, 0x0e, 0x52, 0x70, 0x2a, 0x1f, 0x61, 0x2e, 0x2f, 0x40, 0x17, 0xcf, 0xe0, 0xa9, 0x1d, 0xb9, 0xe4, 0x6d, 0xb9, 0xdc } -, - /* Signature */ - 129, - { 0x00, 0x08, 0x0f, 0x77, 0x0a, 0x2d, 0x1f, 0x6a, 0xbf, 0x5f, 0x22, 0x1f, 0x62, 0xe1, 0x66, 0xab, 0xd7, 0x9d, 0x06, 0xc7, 0xb9, 0xa8, 0x78, 0xd6, 0x1b, 0x80, 0xfc, 0x4d, 0x5b, 0xa2, 0x90, 0xb2, 0x3a, 0xba, 0xab, 0x51, 0x8f, 0x09, 0x44, 0x7e, 0x45, 0xae, 0xe6, 0xf3, 0xbd, 0x06, 0x10, 0x24, 0x44, 0x36, 0xa4, 0x73, 0x01, 0x60, 0xe6, 0xa6, 0x72, 0x11, 0x0c, 0x01, 0xae, 0xb5, 0x62, 0x4b, 0x71, 0x8d, 0xc7, 0xc0, 0x86, 0x1e, 0x58, 0x6b, 0xa8, 0xb6, 0x0a, 0x29, 0xd6, 0xa5, 0x75, 0x5c, 0xd2, 0xcc, 0x50, 0x85, 0x99, 0xc6, 0xe2, 0x8d, 0x73, 0x55, 0xb2, 0x7e, 0x40, 0xb7, 0x40, 0xc6, 0xfb, 0xbb, 0xb1, 0xa9, 0x18, 0x23, 0xb1, 0xc1, 0x24, 0x2b, 0xa6, 0x93, 0xd4, 0x52, 0x69, 0x51, 0x47, 0xdb, 0xb2, 0x3e, 0xa8, 0x9c, 0xbf, 0x11, 0xeb, 0x8b, 0x07, 0xec, 0x3a, 0x02, 0x7b, 0x0f, 0x17 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 7.2", - /* Message to be signed */ - 180, - { 0x31, 0x80, 0x08, 0x87, 0x3c, 0x4c, 0xfe, 0xa7, 0x12, 0x5e, 0xa6, 0xfd, 0x52, 0x15, 0xdf, 0xd9, 0x8d, 0x5c, 0x5e, 0x73, 0x32, 0x3f, 0x03, 0xf2, 0x15, 0xc6, 0x9c, 0x8f, 0x2b, 0xb1, 0x98, 0x3b, 0x59, 0xdf, 0xa6, 0xe9, 0x9a, 0xdd, 0x30, 0x69, 0x66, 0xf3, 0x11, 0x0c, 0x16, 0x1c, 0xa2, 0x26, 0x24, 0xb8, 0x80, 0x70, 0x26, 0x5b, 0x8f, 0x3f, 0x9d, 0x5d, 0xf7, 0x29, 0x91, 0xe7, 0x9e, 0x5b, 0x18, 0x9a, 0xa3, 0xd9, 0xcd, 0x9b, 0x20, 0x47, 0xcf, 0xa6, 0x1d, 0x01, 0x23, 0x4b, 0x23, 0x3d, 0x36, 0xac, 0x4b, 0x96, 0xed, 0x08, 0x16, 0x48, 0x87, 0x74, 0x90, 0xfa, 0x4a, 0x80, 0xec, 0x4c, 0xbb, 0xd9, 0xd2, 0xe0, 0x06, 0x2c, 0x39, 0xe1, 0x85, 0x3a, 0x0c, 0x38, 0x34, 0x4b, 0xa8, 0x58, 0xbd, 0x1d, 0x99, 0x5f, 0x6c, 0xaa, 0x28, 0xbf, 0x90, 0x40, 0x26, 0x26, 0x8a, 0x99, 0x72, 0x11, 0x43, 0xc8, 0x6a, 0x43, 0x43, 0xba, 0xf8, 0x9b, 0x6d, 0x55, 0x07, 0x64, 0x25, 0x1f, 0xb0, 0x7d, 0x16, 0x7b, 0x4c, 0x4b, 0x1b, 0x70, 0xf9, 0x9e, 0xf5, 0xfe, 0x50, 0xe6, 0x2e, 0x54, 0x13, 0xfc, 0xce, 0x0f, 0x99, 0x59, 0xc2, 0xa3, 0x78, 0xc4, 0x1d, 0x6f, 0x42, 0x36, 0x17, 0x8b, 0x14, 0xb8, 0x91, 0x9d, 0xb1, 0xd0 } -, - /* Signature */ - 129, - { 0x00, 0x6d, 0x54, 0x7d, 0xa4, 0xed, 0xcb, 0x10, 0x33, 0x15, 0xcb, 0x8e, 0x4b, 0x66, 0x9b, 0xee, 0x96, 0xaa, 0x21, 0x56, 0x23, 0x5c, 0xa5, 0xc3, 0xe3, 0x1b, 0x24, 0xa1, 0x5a, 0x13, 0x92, 0xe4, 0x94, 0x04, 0x7f, 0xed, 0xcb, 0x70, 0x81, 0x90, 0x7c, 0x56, 0x17, 0xa8, 0xaa, 0x18, 0xd1, 0x01, 0xb0, 0x53, 0x2a, 0x36, 0x32, 0x45, 0x19, 0x23, 0xc4, 0x8a, 0x75, 0xb0, 0xec, 0x21, 0x76, 0xcb, 0x98, 0xe5, 0xce, 0x51, 0x58, 0x8b, 0xcf, 0x86, 0x8e, 0x29, 0xd5, 0xd9, 0x69, 0x4f, 0x00, 0xae, 0x2c, 0x92, 0x4e, 0x73, 0xd2, 0xe6, 0xdd, 0x14, 0x4d, 0x24, 0xfa, 0x45, 0xd0, 0x12, 0x06, 0xa3, 0xf5, 0xd9, 0x36, 0x41, 0x3c, 0xcb, 0xb7, 0x4b, 0x0e, 0x2d, 0x04, 0x7d, 0x82, 0xb6, 0x00, 0xb8, 0x9d, 0x51, 0x59, 0x4f, 0xce, 0x7d, 0xe6, 0xbb, 0xd9, 0x5b, 0x97, 0xfc, 0xfe, 0xc5, 0x98, 0xc4, 0xeb } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.3", - /* Message to be signed */ - 37, - { 0x7f, 0x83, 0xb3, 0xe0, 0x54, 0xc0, 0x24, 0x82, 0x50, 0x78, 0xdd, 0x9f, 0x04, 0x0e, 0x1d, 0x09, 0x05, 0x82, 0x00, 0xc9, 0x75, 0x7b, 0x76, 0xfb, 0x37, 0x2b, 0x8b, 0x52, 0x66, 0xb9, 0xdc, 0x26, 0x9e, 0xc7, 0x56, 0x9d, 0x00 } -, - /* Signature */ - 129, - { 0x01, 0x34, 0xee, 0x21, 0x51, 0x51, 0xe5, 0x32, 0x50, 0xf5, 0xa0, 0x01, 0x6a, 0xcc, 0xe3, 0x70, 0x1e, 0x2a, 0x58, 0xdd, 0xaa, 0xd6, 0xcc, 0x36, 0x9d, 0xf0, 0xdc, 0xd9, 0x34, 0x6a, 0x2b, 0x53, 0x0f, 0xe3, 0x71, 0x5a, 0xfe, 0xff, 0x1e, 0x9b, 0xcb, 0x72, 0x08, 0x31, 0xc1, 0x25, 0x58, 0x97, 0x0a, 0x9e, 0x03, 0x89, 0x60, 0x04, 0xf2, 0x87, 0xad, 0xb8, 0x21, 0xf3, 0x17, 0xcf, 0x63, 0x93, 0x00, 0xca, 0xe6, 0xe9, 0x09, 0xe9, 0x1e, 0xd2, 0xa3, 0xea, 0xcb, 0x99, 0x52, 0xa7, 0xcc, 0x54, 0x94, 0x76, 0x52, 0x64, 0x24, 0x79, 0x51, 0xd2, 0x8c, 0x16, 0xaf, 0x03, 0xe2, 0x4b, 0x80, 0xee, 0x32, 0xb0, 0xb6, 0x2e, 0xdf, 0x10, 0xd7, 0x00, 0x91, 0x92, 0x71, 0x35, 0xf0, 0x5a, 0x88, 0x9f, 0x2f, 0x60, 0x56, 0xb9, 0x5c, 0xdd, 0xac, 0xe4, 0x7c, 0x69, 0xf9, 0x73, 0x08, 0xc0, 0xdf, 0x2e, 0xba } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.4", - /* Message to be signed */ - 198, - { 0x17, 0xeb, 0xc1, 0x50, 0x07, 0xbb, 0x5e, 0x4a, 0xf9, 0x17, 0x20, 0x1c, 0x3b, 0xa3, 0x84, 0x92, 0x65, 0x89, 0xc3, 0x15, 0x9a, 0x89, 0xd1, 0xab, 0xd4, 0xc2, 0xc9, 0x86, 0xfb, 0xa0, 0x37, 0x9e, 0x8a, 0xf1, 0x29, 0x75, 0xc5, 0xd0, 0x31, 0xd1, 0xbf, 0xc1, 0x5c, 0xa9, 0x17, 0x36, 0xf0, 0x7b, 0x17, 0x66, 0xd8, 0xb8, 0xa7, 0x2d, 0xb1, 0x0c, 0x26, 0x8c, 0x98, 0xfd, 0x7a, 0xa1, 0x1e, 0x29, 0x99, 0xf0, 0x6d, 0x86, 0x12, 0x7c, 0xc8, 0x89, 0xcf, 0x15, 0x0d, 0xcc, 0x73, 0x8f, 0x6a, 0xb8, 0xba, 0xae, 0x94, 0x3c, 0xc6, 0x06, 0xdd, 0x4d, 0x9e, 0xce, 0x70, 0x1a, 0x4a, 0x7b, 0x10, 0x1e, 0x35, 0x1d, 0xee, 0x20, 0xb1, 0x5e, 0xbc, 0x55, 0x25, 0x6d, 0xb3, 0xce, 0x46, 0xa6, 0xbd, 0x50, 0x61, 0x12, 0x5b, 0x62, 0xb9, 0x95, 0xe9, 0x70, 0xd1, 0x6f, 0x7c, 0x9a, 0x8f, 0xc1, 0x57, 0xff, 0x68, 0xce, 0xc7, 0xe6, 0x0f, 0x60, 0x8f, 0x66, 0x26, 0xdd, 0x39, 0x52, 0x8b, 0x24, 0x09, 0xaa, 0x2f, 0xf9, 0x32, 0xfc, 0x11, 0x9b, 0x2a, 0x7a, 0x81, 0x77, 0x2a, 0x57, 0x6b, 0x3d, 0x50, 0xa0, 0xd2, 0x87, 0xa7, 0xfa, 0x2d, 0xb8, 0x7d, 0x2b, 0x92, 0xe1, 0xc9, 0x61, 0xa7, 0x0c, 0xaa, 0x44, 0xd8, 0x81, 0x37, 0xb9, 0x50, 0xe1, 0x00, 0x71, 0x1a, 0x98, 0x54, 0xad, 0xfa, 0xfb, 0x49, 0x4d, 0x34, 0xe2, 0x86, 0x06, 0xa2, 0x7c } -, - /* Signature */ - 129, - { 0x01, 0x05, 0xda, 0xdc, 0x99, 0xc5, 0x9b, 0x5e, 0x3a, 0xc5, 0x54, 0xb1, 0xb5, 0xe7, 0x48, 0x0e, 0x5c, 0x0a, 0x62, 0xc7, 0xab, 0xae, 0xfd, 0xac, 0xf4, 0x42, 0x6e, 0xcc, 0xfe, 0x68, 0x6b, 0x8a, 0xaa, 0x1c, 0xa4, 0xf5, 0x1e, 0xba, 0xbf, 0xfa, 0x77, 0xd9, 0x98, 0x03, 0xe7, 0xee, 0x8d, 0x20, 0xd1, 0x20, 0x4a, 0xad, 0x8c, 0x67, 0x38, 0x5d, 0x07, 0x44, 0xc8, 0x54, 0xde, 0x2f, 0x99, 0x7a, 0x56, 0xaa, 0xae, 0x04, 0xce, 0xcc, 0x65, 0x65, 0x35, 0xc1, 0x6b, 0xb2, 0x14, 0x5d, 0x18, 0x01, 0x81, 0x25, 0x94, 0xa8, 0x01, 0x3b, 0x0e, 0xb5, 0x4e, 0x7b, 0xf6, 0x5d, 0x38, 0x42, 0x00, 0x54, 0xec, 0x46, 0xda, 0xc7, 0x1a, 0x12, 0x52, 0x08, 0xb3, 0x02, 0x21, 0x4a, 0x7c, 0x9b, 0x3a, 0x92, 0xca, 0x9b, 0xf7, 0x37, 0x39, 0xc7, 0x66, 0x30, 0x9a, 0xf8, 0x03, 0xed, 0xde, 0x7c, 0x54, 0xd2, 0x46 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.5", - /* Message to be signed */ - 51, - { 0x6a, 0x52, 0xba, 0x19, 0x0e, 0x44, 0xca, 0x0f, 0x10, 0x70, 0x02, 0x10, 0x48, 0x76, 0x2f, 0x3e, 0x79, 0xed, 0x51, 0xc9, 0x4f, 0x6d, 0xc1, 0xa9, 0xf1, 0xed, 0x78, 0x35, 0x2e, 0xf3, 0x79, 0xaa, 0x49, 0xb3, 0xa9, 0x38, 0x7e, 0x3c, 0xa7, 0xa1, 0x96, 0xf1, 0x05, 0xdc, 0xab, 0x18, 0x50, 0x6f, 0x29, 0x4a, 0x69 } -, - /* Signature */ - 129, - { 0x00, 0x0b, 0x70, 0xe6, 0x01, 0xc5, 0xec, 0x58, 0x68, 0x4e, 0x09, 0x18, 0xba, 0x7a, 0x53, 0x9e, 0x9d, 0x2d, 0xd2, 0x9b, 0x01, 0xa3, 0xf4, 0x53, 0xca, 0xd4, 0xa9, 0xa4, 0x0e, 0x50, 0xf5, 0xdb, 0xdf, 0x72, 0xc1, 0x10, 0x52, 0xf2, 0x0b, 0xe4, 0x4a, 0x5d, 0x38, 0x51, 0xb0, 0x1f, 0xd0, 0x9d, 0x9c, 0x92, 0x08, 0x47, 0x0f, 0x0a, 0x4a, 0x95, 0x03, 0x5e, 0x98, 0x9e, 0xed, 0x7d, 0x6b, 0x06, 0x2e, 0x13, 0xf4, 0x99, 0x5b, 0xf0, 0x93, 0x0b, 0x4a, 0x3d, 0x9b, 0x8a, 0x9e, 0xd7, 0x5e, 0x33, 0x88, 0x6e, 0x4b, 0x19, 0x4a, 0xb5, 0xcc, 0xd6, 0xb4, 0x12, 0x95, 0x9c, 0xb4, 0xf5, 0x49, 0x8b, 0xd3, 0x2f, 0x66, 0x85, 0x46, 0xbe, 0x2c, 0x00, 0x7a, 0xe8, 0xde, 0x5d, 0x98, 0x97, 0x7b, 0x94, 0xb1, 0x7e, 0x12, 0x63, 0x88, 0x4b, 0x54, 0xe7, 0x84, 0xb3, 0x8f, 0xc1, 0x12, 0xb8, 0xcb, 0xdd, 0x56 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.6", - /* Message to be signed */ - 236, - { 0xbb, 0xe0, 0xb9, 0xde, 0x2b, 0x5e, 0x9d, 0xcd, 0x31, 0x67, 0x42, 0x94, 0x3f, 0x92, 0x19, 0xb2, 0x4f, 0x66, 0xa3, 0x8f, 0x9d, 0xe7, 0x09, 0x46, 0x4f, 0xa5, 0x49, 0x5d, 0x79, 0x4a, 0x63, 0x7b, 0x9e, 0xbc, 0x06, 0x77, 0x62, 0xda, 0x7a, 0x6e, 0xef, 0xf0, 0x98, 0xfa, 0x44, 0xf3, 0xcc, 0x36, 0xf2, 0xcc, 0xef, 0x67, 0xfd, 0x46, 0xc5, 0x9e, 0x24, 0x73, 0x8c, 0x81, 0x0c, 0x69, 0xed, 0xdc, 0xd9, 0x0c, 0xc7, 0xd7, 0x1a, 0x4c, 0x3e, 0x69, 0x3b, 0xca, 0xa2, 0x8a, 0x53, 0x3d, 0x90, 0x4b, 0x41, 0xce, 0xd3, 0x39, 0x9b, 0x4c, 0x76, 0x47, 0xe5, 0xec, 0x4b, 0x3a, 0xd9, 0x03, 0x87, 0x0f, 0x5b, 0x5f, 0x8d, 0x6a, 0x8d, 0x81, 0x28, 0xae, 0x23, 0x81, 0xce, 0xc8, 0x6c, 0x4d, 0x85, 0xb7, 0x8a, 0x45, 0x1e, 0x1e, 0xa9, 0x7e, 0x33, 0x93, 0xff, 0xe9, 0x97, 0xe5, 0x46, 0xb0, 0x9c, 0x8c, 0xf8, 0x22, 0x52, 0xb3, 0x3f, 0x74, 0x5f, 0xee, 0xd4, 0x13, 0x32, 0x06, 0x51, 0x8e, 0x2b, 0x88, 0x03, 0x19, 0xdc, 0xdf, 0x91, 0x06, 0x71, 0x8a, 0xfb, 0x01, 0x6c, 0x51, 0x4b, 0x38, 0x05, 0x32, 0x65, 0xbc, 0x98, 0x79, 0x10, 0x0e, 0x47, 0xb0, 0x3e, 0xba, 0x03, 0x68, 0xf0, 0x9e, 0x29, 0x23, 0xac, 0x6f, 0x40, 0xa0, 0x4b, 0x75, 0x05, 0x4c, 0xd5, 0x05, 0xbb, 0xc8, 0x96, 0x5d, 0x64, 0x9a, 0x1b, 0xae, 0x7b, 0xb6, 0x64, 0x3c, 0xb7, 0x41, 0x95, 0xe9, 0x1c, 0x51, 0xf4, 0x18, 0x3d, 0xb2, 0xd7, 0x38, 0xce, 0x60, 0x35, 0x50, 0xd6, 0x34, 0xe6, 0xdd, 0x4f, 0x27, 0xf4, 0xda, 0xac, 0x61, 0x56, 0xcf, 0xa7, 0xe2, 0x46, 0x8b, 0x5d, 0x6a, 0xeb, 0x78, 0x29, 0x09 } -, - /* Signature */ - 129, - { 0x00, 0xc2, 0xe0, 0x74, 0xdf, 0xbc, 0xd0, 0xe7, 0x3a, 0xc0, 0x02, 0x1a, 0xeb, 0x99, 0x33, 0x10, 0x6b, 0x20, 0x1b, 0x93, 0xc1, 0x7a, 0x7b, 0xf9, 0x33, 0x56, 0xd2, 0x91, 0xfb, 0x4a, 0xae, 0xb3, 0xd1, 0x31, 0x63, 0x00, 0xa8, 0xde, 0x7b, 0x07, 0xe3, 0xd7, 0x79, 0xbc, 0xc2, 0x99, 0xe5, 0x2b, 0x6c, 0xb0, 0x30, 0x88, 0x01, 0x6d, 0xae, 0xb8, 0x41, 0x38, 0x2e, 0xb3, 0x43, 0x5f, 0x2e, 0x03, 0xeb, 0xf2, 0x2d, 0xc0, 0x86, 0xfb, 0x20, 0xeb, 0xe5, 0x3a, 0xc5, 0x45, 0x90, 0x24, 0x97, 0x63, 0xa2, 0x65, 0x5a, 0xa7, 0xeb, 0x0e, 0x7d, 0x38, 0x64, 0x93, 0x6b, 0x34, 0x00, 0x6a, 0x6c, 0x4f, 0xa0, 0x2d, 0x9c, 0xa1, 0x04, 0xad, 0xad, 0xa6, 0xaa, 0x01, 0xb9, 0x77, 0xb6, 0xde, 0xf2, 0x75, 0x06, 0x08, 0xa7, 0x8f, 0x3e, 0xd8, 0x3a, 0xd7, 0x12, 0xa7, 0xa1, 0xb0, 0xfb, 0xde, 0x7c, 0x7c, 0x8d } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.7", - /* Message to be signed */ - 64, - { 0x83, 0xa4, 0x8b, 0xff, 0x88, 0x6d, 0x1d, 0x68, 0xf2, 0x92, 0x0a, 0x0e, 0xcf, 0xf2, 0x98, 0x32, 0x1a, 0x96, 0xf5, 0xca, 0xdc, 0xdf, 0xd8, 0xbe, 0x16, 0xb5, 0x0d, 0x34, 0xd6, 0x7d, 0x94, 0xcd, 0xb1, 0xa1, 0xbf, 0xa0, 0xea, 0xe2, 0x46, 0x99, 0xb6, 0x63, 0xc7, 0xba, 0x3a, 0x08, 0xa3, 0x90, 0xf7, 0x22, 0x58, 0x84, 0x85, 0x67, 0x94, 0xd1, 0x80, 0xc5, 0x46, 0xca, 0xc0, 0x6e, 0x41, 0x18 } -, - /* Signature */ - 129, - { 0x01, 0x2e, 0x81, 0xbd, 0x38, 0x63, 0x50, 0x65, 0xbf, 0x65, 0x54, 0x33, 0x6b, 0x00, 0xd1, 0x06, 0x18, 0x33, 0x05, 0x53, 0xe0, 0xe8, 0x08, 0x78, 0xaa, 0xd3, 0x55, 0xf0, 0x0d, 0x59, 0x40, 0xd8, 0xba, 0x45, 0x01, 0xc5, 0xc4, 0x9f, 0x10, 0x16, 0xd5, 0xf0, 0xe6, 0xa7, 0x3a, 0x4d, 0x9f, 0x87, 0x40, 0xd2, 0xcf, 0xc2, 0x5e, 0xa2, 0x48, 0xdf, 0x3f, 0x7b, 0x1a, 0xe8, 0xfc, 0xd2, 0x6b, 0xd5, 0x62, 0xe0, 0xf6, 0xeb, 0x77, 0x7f, 0x46, 0xd7, 0x57, 0x30, 0x69, 0xdb, 0x89, 0x07, 0xc0, 0x21, 0xb6, 0x45, 0xd3, 0xb2, 0x40, 0x58, 0x47, 0x51, 0x99, 0xa9, 0x1b, 0x55, 0x72, 0xd8, 0xac, 0x87, 0xf8, 0x3e, 0xe6, 0xaf, 0x5c, 0xf9, 0xe1, 0x71, 0xa8, 0x58, 0xf6, 0x0d, 0x2b, 0x81, 0x40, 0xf5, 0x2d, 0xae, 0xd6, 0x84, 0x42, 0x22, 0x8b, 0x4f, 0xff, 0xd8, 0xde, 0x40, 0x07, 0x8d, 0x3d, 0xe8, 0xcb } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.8", - /* Message to be signed */ - 1, - { 0x18 } -, - /* Signature */ - 129, - { 0x00, 0xf2, 0xc2, 0x99, 0x02, 0x4a, 0xb7, 0xbd, 0x25, 0x2c, 0x69, 0x46, 0xbe, 0xa1, 0x0d, 0xc0, 0x53, 0x97, 0x38, 0x98, 0xbd, 0x5f, 0x0e, 0x3c, 0x94, 0x60, 0xe6, 0xfe, 0x09, 0xd7, 0xd1, 0x91, 0xe7, 0x1b, 0xf7, 0x9d, 0x43, 0x6c, 0xaa, 0x84, 0xe9, 0x86, 0xbe, 0x3f, 0xc0, 0x98, 0x19, 0xc0, 0x80, 0xe5, 0x6a, 0x08, 0x5c, 0xf4, 0x24, 0x41, 0x4a, 0xf3, 0xfc, 0x70, 0x07, 0xcf, 0x1a, 0xc3, 0x6f, 0x1c, 0xf8, 0x63, 0x57, 0x80, 0xb5, 0x56, 0x8d, 0x73, 0x4a, 0xd6, 0xd8, 0x1a, 0x2b, 0xa8, 0xeb, 0x18, 0x8b, 0x29, 0x46, 0x69, 0xd8, 0x71, 0xca, 0x40, 0xe6, 0x08, 0xf0, 0xed, 0x33, 0xd5, 0x69, 0x0c, 0xc6, 0x15, 0x70, 0xc5, 0xb8, 0x47, 0xeb, 0xdb, 0xdc, 0xdc, 0x4f, 0xa7, 0x8f, 0x42, 0x9e, 0xfc, 0xe1, 0x3c, 0x67, 0x47, 0xe5, 0x4d, 0x6f, 0x26, 0x1b, 0x04, 0x55, 0xd6, 0xdd, 0x65, 0xc2 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.9", - /* Message to be signed */ - 40, - { 0x04, 0xa6, 0xe2, 0x4b, 0x93, 0xc2, 0xe5, 0xf6, 0xb4, 0xbb, 0xe0, 0x5f, 0x5f, 0xb0, 0xaf, 0xa0, 0x42, 0xd2, 0x04, 0xfe, 0x33, 0x78, 0xd3, 0x65, 0xc2, 0xf2, 0x88, 0xb6, 0xa8, 0xda, 0xd7, 0xef, 0xe4, 0x5d, 0x15, 0x3e, 0xef, 0x40, 0xca, 0xcc } -, - /* Signature */ - 129, - { 0x00, 0xec, 0xc8, 0x95, 0xfb, 0xd9, 0x47, 0xe2, 0xdf, 0xc4, 0x7c, 0x03, 0xba, 0x2e, 0x99, 0x3d, 0x1a, 0x14, 0x3a, 0x7a, 0x6a, 0xd6, 0x3a, 0x91, 0x6e, 0xd5, 0x44, 0x83, 0xce, 0x26, 0x38, 0x9f, 0x89, 0xd5, 0x80, 0xf4, 0xed, 0xbd, 0xd0, 0xb3, 0x7e, 0x08, 0xca, 0xaa, 0x5a, 0x0c, 0x1e, 0x52, 0x6e, 0x1e, 0x9a, 0x1a, 0x8c, 0x0d, 0xc9, 0xcf, 0x50, 0xed, 0x77, 0xde, 0x26, 0x76, 0x46, 0x0d, 0x28, 0x8d, 0xce, 0x56, 0x5f, 0x12, 0x8a, 0x26, 0x6e, 0xa2, 0x9b, 0x4e, 0xcc, 0x32, 0x9a, 0x94, 0xcc, 0x25, 0x23, 0x96, 0xdc, 0x50, 0xd5, 0xc0, 0xa1, 0x3d, 0x80, 0x93, 0x81, 0xfa, 0xd8, 0x8a, 0x07, 0x89, 0xad, 0x4f, 0x56, 0xaa, 0x77, 0xe5, 0x44, 0xec, 0x25, 0x70, 0xaf, 0x99, 0x18, 0xb7, 0xf7, 0x41, 0xb4, 0x86, 0xca, 0x50, 0xb3, 0x38, 0x4a, 0xd1, 0x12, 0x40, 0x60, 0x59, 0x16, 0x85, 0xa1 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.10", - /* Message to be signed */ - 229, - { 0x99, 0x65, 0xbd, 0xa5, 0x5c, 0xbf, 0x0e, 0xfe, 0xd8, 0xd6, 0x55, 0x3b, 0x40, 0x27, 0xf2, 0xd8, 0x62, 0x08, 0xa6, 0xe6, 0xb4, 0x89, 0xc1, 0x76, 0x12, 0x80, 0x92, 0xd6, 0x29, 0xe4, 0x9d, 0x16, 0x9f, 0x16, 0xfe, 0x51, 0xc4, 0xc0, 0x8a, 0x64, 0x94, 0xb5, 0x00, 0x73, 0x62, 0x20, 0x91, 0xa3, 0x82, 0x2e, 0xa5, 0x7c, 0x32, 0x8b, 0xd9, 0xb6, 0x9d, 0x24, 0x65, 0xa2, 0x12, 0x2a, 0xf1, 0x78, 0xbf, 0x6b, 0x1b, 0xe3, 0x07, 0xee, 0x4c, 0x31, 0x47, 0x9f, 0xfd, 0x9f, 0x4d, 0x11, 0xf3, 0x3e, 0xa2, 0x0b, 0x7a, 0xec, 0xe8, 0x12, 0xca, 0xb4, 0xee, 0xdd, 0x46, 0x99, 0x31, 0x51, 0xd5, 0x68, 0xff, 0x64, 0xa1, 0x67, 0x04, 0xa5, 0x5d, 0x95, 0x0a, 0xb7, 0x79, 0x1a, 0xa2, 0x3b, 0x26, 0xa0, 0xa8, 0xaf, 0x88, 0x0f, 0x6f, 0x80, 0x56, 0xbd, 0xd2, 0x06, 0x83, 0x8b, 0x44, 0xc6, 0x07, 0xb6, 0x61, 0xb4, 0xf1, 0xdc, 0x36, 0x21, 0x06, 0x5f, 0xde, 0xd3, 0xdb, 0x6f, 0x9e, 0x3f, 0x2d, 0xc8, 0xf4, 0x00, 0xef, 0xe3, 0xc2, 0xaf, 0xa6, 0xc0, 0x27, 0x99, 0x40, 0x57, 0x6b, 0xb0, 0x5e, 0x39, 0x80, 0x4b, 0xd3, 0x50, 0x5f, 0x4b, 0xd2, 0x82, 0x52, 0x91, 0x8b, 0x28, 0xe7, 0x4e, 0x05, 0x8f, 0x24, 0xf2, 0x7e, 0xf0, 0xdb, 0x3d, 0x0d, 0xcf, 0x9e, 0xb2, 0x9d, 0x41, 0xff, 0xc1, 0x10, 0x07, 0xce, 0x86, 0xb9, 0x82, 0xe8, 0x9c, 0x03, 0x75, 0xbd, 0x99, 0x76, 0xa5, 0xaf, 0x13, 0x1a, 0x61, 0x4d, 0x28, 0x08, 0xba, 0x25, 0x07, 0x9d, 0x97, 0x7f, 0x0b, 0x23, 0x97, 0x96, 0xba, 0x6b, 0x1b, 0xcd, 0x5e, 0x85, 0x5d, 0x96 } -, - /* Signature */ - 129, - { 0x01, 0x56, 0x62, 0xe3, 0x0e, 0x79, 0x0e, 0x37, 0x86, 0x83, 0x81, 0xb4, 0xf6, 0x77, 0xa2, 0xae, 0xd6, 0xb2, 0xac, 0xc5, 0x64, 0x49, 0x17, 0x31, 0x82, 0x49, 0x10, 0xed, 0x80, 0xad, 0xc4, 0x77, 0x15, 0x9c, 0x88, 0x61, 0x8c, 0xc7, 0xd0, 0xbe, 0xb0, 0x49, 0xb1, 0xaa, 0xe7, 0x4b, 0x17, 0x21, 0xe9, 0x0b, 0xa7, 0xf7, 0xb0, 0xea, 0x26, 0xbf, 0x33, 0xad, 0x04, 0xf8, 0x6f, 0xf3, 0x14, 0x38, 0x97, 0xbf, 0x0d, 0x4e, 0xb4, 0x5e, 0xb7, 0xde, 0xb5, 0x44, 0x11, 0xba, 0x96, 0x80, 0xaa, 0xb1, 0x3a, 0xdb, 0xfc, 0xf1, 0x8a, 0xf4, 0x6b, 0x87, 0xfc, 0xb1, 0x46, 0x1c, 0x26, 0x20, 0x6a, 0x95, 0x3b, 0xc3, 0xcd, 0xbb, 0x31, 0xe2, 0x96, 0xea, 0x09, 0x02, 0x4b, 0xc5, 0xc7, 0xb6, 0x2d, 0xe6, 0xc6, 0x9c, 0x14, 0xbf, 0xcf, 0xeb, 0x56, 0x39, 0x1a, 0x9e, 0xf5, 0x8c, 0xd8, 0x05, 0xeb, 0x63, 0x1f } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.11", - /* Message to be signed */ - 186, - { 0x71, 0xc7, 0xb1, 0x8b, 0x4a, 0xa8, 0xea, 0x53, 0x89, 0xad, 0x78, 0x49, 0x23, 0x28, 0x65, 0xbe, 0x2a, 0x93, 0xe3, 0x47, 0xa1, 0x68, 0xd2, 0x5c, 0x6c, 0x6e, 0xa2, 0x43, 0x9c, 0x1c, 0xc8, 0x0b, 0xb0, 0xb7, 0x22, 0x3b, 0xe9, 0xc8, 0x93, 0x71, 0x22, 0x84, 0x5b, 0xb0, 0xa3, 0x9c, 0x02, 0x5c, 0x43, 0x75, 0x9d, 0xef, 0xe6, 0xe4, 0xe8, 0xeb, 0x3b, 0xaa, 0xb4, 0xf1, 0xeb, 0xdc, 0xa2, 0xc8, 0xad, 0x12, 0xa4, 0x65, 0xa3, 0x0f, 0x8a, 0x65, 0x25, 0xb1, 0x20, 0xef, 0x6a, 0xae, 0xc9, 0xbd, 0xdb, 0x45, 0xcd, 0x42, 0xc0, 0x15, 0x0c, 0x40, 0x7b, 0x04, 0x8e, 0xdf, 0x65, 0x19, 0x94, 0x92, 0xf2, 0x07, 0xca, 0x01, 0xaa, 0xa5, 0x54, 0x3a, 0xf3, 0x8e, 0xe9, 0x8d, 0x53, 0xbd, 0x10, 0xd8, 0xee, 0xbc, 0x3b, 0x64, 0x97, 0x7e, 0x75, 0x75, 0x1d, 0x74, 0x50, 0xdd, 0xb1, 0xc0, 0xe1, 0xfc, 0x24, 0xda, 0x17, 0x18, 0x81, 0x1f, 0xbe, 0x9b, 0x0a, 0xbf, 0xc3, 0xca, 0x31, 0xe6, 0x99, 0x5f, 0xc7, 0x34, 0x90, 0x73, 0xe2, 0x17, 0xb3, 0x7e, 0x23, 0xc5, 0xf1, 0x7a, 0x8b, 0x7a, 0x3f, 0x00, 0x48, 0x6a, 0x37, 0x02, 0xb9, 0x51, 0x0d, 0x6f, 0x05, 0x1b, 0x27, 0x61, 0x71, 0x6e, 0x32, 0xc6, 0x2b, 0xb5, 0x93, 0x9b, 0x2f, 0xb1, 0x1a, 0xcb, 0x1c, 0x83 } -, - /* Signature */ - 129, - { 0x01, 0x3a, 0xb6, 0x3a, 0xb1, 0x83, 0x35, 0x3a, 0x23, 0x5f, 0xb8, 0x93, 0xab, 0x4c, 0x35, 0xd6, 0x40, 0x9c, 0x21, 0x84, 0x9d, 0xcf, 0xcd, 0xa3, 0xbf, 0xda, 0x14, 0x29, 0xfe, 0xe7, 0x42, 0xa7, 0xd8, 0x16, 0x0f, 0xd3, 0xc8, 0x3b, 0x38, 0x53, 0xa3, 0x33, 0xf9, 0x51, 0x53, 0x9b, 0xb5, 0x77, 0x1f, 0x4d, 0x0f, 0xe1, 0x3a, 0xde, 0xb6, 0x4e, 0x40, 0x30, 0xb9, 0x2e, 0x8b, 0x08, 0x13, 0xeb, 0x52, 0xb1, 0xaa, 0x33, 0xbd, 0x94, 0xc5, 0xb8, 0xbc, 0x1b, 0xbc, 0xcd, 0xf6, 0xc1, 0xdf, 0x0b, 0xa6, 0x70, 0x71, 0x7c, 0x0c, 0xf6, 0xfd, 0x48, 0x5b, 0xe2, 0xfe, 0x9e, 0x16, 0x81, 0x3b, 0xe8, 0xcd, 0xd5, 0x80, 0xe6, 0x10, 0x86, 0x67, 0x5e, 0x31, 0x83, 0x1c, 0x92, 0x4a, 0x41, 0xd4, 0x67, 0x1a, 0x95, 0xd8, 0x35, 0xe3, 0xfc, 0xa4, 0x95, 0xe8, 0x86, 0x58, 0xd1, 0xe5, 0x70, 0xe6, 0x28, 0xc7 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.12", - /* Message to be signed */ - 111, - { 0x0b, 0xeb, 0x19, 0xb5, 0x62, 0x92, 0x8c, 0x27, 0x1b, 0xb7, 0x06, 0x18, 0x9e, 0x43, 0xcf, 0xa5, 0x7b, 0xe7, 0x6b, 0x2f, 0x7a, 0x83, 0xe0, 0x2a, 0xa2, 0xcc, 0xb0, 0x37, 0xc0, 0xf4, 0xf7, 0xf7, 0x31, 0x62, 0xd6, 0xc2, 0x6f, 0x70, 0xde, 0x97, 0x18, 0x21, 0xe7, 0xb9, 0x66, 0x5c, 0xb9, 0x31, 0xbb, 0x0e, 0xac, 0x82, 0x0b, 0xf8, 0x59, 0x98, 0x4d, 0xb4, 0xbe, 0xef, 0xef, 0x4a, 0xb8, 0x8e, 0x91, 0x63, 0x1c, 0x0c, 0xd3, 0x1d, 0xb7, 0xf9, 0x35, 0x8a, 0x5a, 0xa1, 0xdf, 0xf2, 0x40, 0x6b, 0x45, 0xf9, 0xbd, 0xcb, 0xef, 0x20, 0xd5, 0x5c, 0x28, 0x2b, 0xae, 0x5c, 0xfb, 0x61, 0x06, 0x02, 0x3b, 0x56, 0x33, 0xc0, 0x51, 0xaf, 0x17, 0xe7, 0x29, 0xbb, 0x07, 0xc9, 0xaf, 0x6d, 0xd2 } -, - /* Signature */ - 129, - { 0x00, 0xd6, 0x3d, 0xa4, 0xd5, 0xd3, 0xe2, 0x28, 0x4a, 0x19, 0x2a, 0x6a, 0x9d, 0xa3, 0xf1, 0xa7, 0xd3, 0xfc, 0xc1, 0x64, 0xb9, 0xfc, 0x3d, 0xfd, 0x74, 0x52, 0xb0, 0x2f, 0xed, 0x6e, 0xf1, 0xbe, 0x5a, 0xd2, 0xa7, 0x69, 0xec, 0x9c, 0x36, 0x05, 0x9b, 0x71, 0x91, 0x1c, 0xcf, 0x7a, 0xb7, 0x1c, 0xe3, 0x09, 0x87, 0xec, 0x47, 0xbb, 0xf5, 0x5e, 0x6d, 0x46, 0x30, 0xd6, 0x23, 0x42, 0xb3, 0x15, 0x50, 0x48, 0xee, 0x0b, 0xf4, 0x3d, 0x24, 0xfe, 0x69, 0xab, 0xda, 0xc1, 0x2f, 0x79, 0x4b, 0x67, 0x98, 0xbd, 0x1a, 0x7c, 0xb4, 0x89, 0xa6, 0x4c, 0xe0, 0x82, 0x25, 0x4c, 0x3d, 0x92, 0xf4, 0x75, 0x56, 0x6b, 0x56, 0x40, 0x0d, 0x96, 0x20, 0xcd, 0xfd, 0x63, 0xfc, 0x17, 0xc1, 0x93, 0xc4, 0x25, 0xd7, 0xed, 0xe9, 0x41, 0xf7, 0x6d, 0xa1, 0xe3, 0x45, 0xaf, 0x0e, 0x2a, 0x8b, 0x88, 0x44, 0xc7, 0x40 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.13", - /* Message to be signed */ - 12, - { 0x02, 0x87, 0xab, 0xe2, 0x67, 0x0a, 0x45, 0xf8, 0x77, 0x90, 0x48, 0xf5 } -, - /* Signature */ - 129, - { 0x00, 0x42, 0xf4, 0x14, 0x78, 0x2d, 0xf6, 0x5d, 0x93, 0x47, 0xbf, 0x1c, 0xad, 0x53, 0x48, 0x53, 0x74, 0x6c, 0xc0, 0xb8, 0x53, 0xc1, 0xc5, 0x26, 0xf9, 0x17, 0x14, 0x45, 0xfc, 0xfa, 0xa4, 0x99, 0x1a, 0x70, 0xf5, 0xa8, 0x44, 0x5b, 0xcf, 0x41, 0x14, 0xf0, 0x7f, 0xc8, 0x35, 0x4c, 0x84, 0xa9, 0x3b, 0x94, 0x37, 0x33, 0xd3, 0x93, 0x7a, 0x59, 0x88, 0x3b, 0x89, 0x6c, 0xe6, 0x5f, 0xdb, 0x16, 0x5b, 0x1e, 0x30, 0x55, 0x37, 0x4c, 0xe2, 0x42, 0xe1, 0x26, 0x8c, 0x16, 0x41, 0xcc, 0x44, 0x3b, 0xb9, 0xe7, 0xda, 0x7f, 0x71, 0xf3, 0xe7, 0xf6, 0x31, 0x3f, 0x23, 0x9e, 0x62, 0x00, 0xe7, 0x9a, 0x1b, 0xe3, 0xea, 0xd6, 0xc3, 0x6e, 0x94, 0x1f, 0x24, 0x46, 0x0b, 0xaa, 0x57, 0xdf, 0x63, 0x9e, 0x57, 0xda, 0xb3, 0xef, 0xf9, 0xe7, 0x7b, 0x87, 0xaf, 0x35, 0x5b, 0x83, 0xda, 0xe7, 0x7c, 0xbe, 0x06 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.14", - /* Message to be signed */ - 91, - { 0x3f, 0x49, 0x54, 0x2c, 0x0e, 0x9f, 0x50, 0x93, 0x2c, 0x0d, 0x45, 0x3d, 0xc9, 0x53, 0x20, 0xaf, 0x21, 0xdd, 0x2b, 0xd1, 0x72, 0x9c, 0x29, 0xf4, 0xf0, 0x8c, 0x70, 0x94, 0x4c, 0x2c, 0xc7, 0x5d, 0xe9, 0x16, 0x6b, 0x4f, 0xd2, 0x30, 0xaa, 0x93, 0x70, 0x2c, 0x5f, 0x2c, 0x3d, 0x9c, 0x29, 0x9a, 0x35, 0x91, 0x02, 0x57, 0x00, 0x33, 0x54, 0x0e, 0xb8, 0x28, 0xca, 0xd7, 0x5a, 0x57, 0x76, 0xd2, 0xe8, 0xcb, 0x45, 0x61, 0x41, 0xa6, 0xfa, 0x97, 0xbc, 0x4e, 0x6e, 0x62, 0xd3, 0xdf, 0x08, 0x29, 0x82, 0xa4, 0xd9, 0x8c, 0x2d, 0xe4, 0x41, 0xe5, 0x9e, 0x93, 0x12 } -, - /* Signature */ - 129, - { 0x01, 0x5c, 0x39, 0x93, 0xce, 0xeb, 0xd8, 0xdb, 0xa4, 0x5a, 0x36, 0x8d, 0xd4, 0x05, 0xaf, 0x8a, 0x53, 0xb9, 0x3e, 0x82, 0x70, 0x19, 0xf9, 0x94, 0xe4, 0xed, 0x78, 0x2c, 0x39, 0x11, 0xb9, 0xb5, 0x80, 0xd5, 0x42, 0x24, 0x26, 0x9b, 0x79, 0x97, 0xf1, 0x74, 0x96, 0x30, 0xe5, 0x2f, 0x22, 0x1f, 0xaf, 0xab, 0x96, 0x41, 0xc7, 0x81, 0xe7, 0x04, 0x4d, 0x32, 0x56, 0xe2, 0xe4, 0x4e, 0x14, 0x37, 0x91, 0x72, 0x32, 0x69, 0x45, 0x18, 0xba, 0x9e, 0x71, 0x38, 0xda, 0x47, 0xfe, 0x53, 0x43, 0x29, 0xb8, 0xc9, 0x68, 0x9e, 0x27, 0x85, 0xc0, 0x2b, 0x60, 0x3d, 0xd1, 0x60, 0xd3, 0x73, 0x36, 0xa2, 0xb0, 0x5b, 0xe0, 0x47, 0x82, 0x65, 0x9a, 0xc0, 0xe9, 0x67, 0x1f, 0xe9, 0x32, 0xea, 0x80, 0x91, 0xd6, 0x13, 0x18, 0xb2, 0xb2, 0x01, 0xbd, 0xa7, 0x9a, 0xf6, 0xc0, 0xc4, 0x44, 0x69, 0x38, 0xe3, 0xf6 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.15", - /* Message to be signed */ - 221, - { 0xd0, 0xdb, 0xc9, 0x6c, 0xf9, 0xbf, 0xb1, 0xe3, 0xcd, 0x6d, 0xe2, 0xea, 0xa0, 0x8d, 0x6d, 0x79, 0x5b, 0xed, 0x81, 0x87, 0xce, 0xb0, 0x85, 0x65, 0x80, 0xe4, 0xb1, 0x42, 0xb9, 0xae, 0x60, 0xa0, 0x98, 0xcd, 0x42, 0x98, 0x4e, 0x8d, 0xbf, 0x1d, 0x05, 0xa0, 0xc0, 0xab, 0x83, 0x51, 0x54, 0x8f, 0x0a, 0x13, 0x64, 0x6f, 0x33, 0x39, 0x0b, 0x2b, 0xb0, 0xc8, 0x64, 0xb3, 0x97, 0xcf, 0x13, 0x37, 0x1f, 0x8b, 0x2f, 0x67, 0x5a, 0x82, 0xe4, 0x6b, 0xf1, 0x6c, 0x4a, 0xfc, 0x60, 0x5e, 0xe3, 0xe5, 0xa1, 0x46, 0x9c, 0xac, 0x51, 0xfa, 0x73, 0x4b, 0x44, 0x65, 0xd4, 0xc1, 0x3d, 0x5b, 0x2d, 0xd1, 0x2e, 0xed, 0xa5, 0x4e, 0x7d, 0x08, 0x1c, 0xd9, 0xe3, 0xea, 0xaf, 0x9e, 0x57, 0xdb, 0x42, 0x20, 0x20, 0xa0, 0xb5, 0xa5, 0xec, 0x28, 0xca, 0x43, 0x97, 0x7a, 0x5d, 0x67, 0x6f, 0xfa, 0xb6, 0x2f, 0x78, 0x10, 0x71, 0x93, 0x59, 0x41, 0x59, 0xce, 0xbf, 0xbd, 0x86, 0x26, 0x98, 0x19, 0xa0, 0xf3, 0x41, 0xa0, 0xf4, 0x12, 0x84, 0xdd, 0x0a, 0x73, 0xca, 0x80, 0x14, 0xd2, 0xe0, 0xb8, 0x01, 0x79, 0xc6, 0x38, 0x0b, 0x40, 0x3a, 0xfb, 0xb1, 0x1b, 0x42, 0xdb, 0x34, 0x9b, 0xaf, 0xd7, 0x57, 0x0f, 0xbe, 0xcb, 0xd1, 0x4b, 0xd0, 0xc2, 0x1a, 0xd6, 0x41, 0x68, 0x7a, 0x6a, 0xc3, 0x29, 0x25, 0xf7, 0x03, 0x1a, 0x24, 0xa6, 0x56, 0x8a, 0xb9, 0xe2, 0x87, 0xeb, 0x80, 0x75, 0x41, 0x10, 0xdf, 0xba, 0x68, 0x8a, 0x59, 0x63, 0x25, 0xbc, 0xac, 0x4a, 0x39, 0xce, 0x8b, 0x84, 0xa4 } -, - /* Signature */ - 129, - { 0x00, 0x8c, 0xc8, 0x2d, 0x64, 0x55, 0x9d, 0xe0, 0x04, 0x0f, 0x55, 0x41, 0x19, 0x9a, 0xef, 0xf3, 0x99, 0x9f, 0xe2, 0xf0, 0x86, 0xf1, 0x57, 0xff, 0x51, 0xf2, 0x22, 0x0d, 0xb3, 0x45, 0x51, 0x9a, 0xa1, 0x14, 0xb0, 0x17, 0x62, 0xe7, 0x0b, 0xc9, 0x65, 0x83, 0xbb, 0x38, 0xb2, 0x2b, 0x3f, 0x87, 0xbe, 0xab, 0x32, 0xe2, 0x3a, 0x3d, 0xeb, 0xdb, 0x8a, 0x59, 0x54, 0x29, 0xff, 0x12, 0xfa, 0xd4, 0x95, 0xd7, 0x4e, 0x22, 0x0e, 0x4f, 0x7d, 0xca, 0x22, 0x27, 0x28, 0x43, 0x89, 0x9e, 0x81, 0x04, 0xc6, 0x9a, 0x59, 0x64, 0x2f, 0x6f, 0xa8, 0x25, 0x89, 0x0f, 0xe8, 0x13, 0x2a, 0x0f, 0x79, 0x94, 0x02, 0x53, 0xe5, 0x00, 0x7f, 0xb1, 0x17, 0x7a, 0x5b, 0xf4, 0x18, 0x06, 0x7e, 0xdd, 0xc8, 0xd3, 0x2c, 0x5e, 0x59, 0x35, 0xbf, 0x33, 0x8f, 0x1c, 0x69, 0x0e, 0xfc, 0x80, 0x11, 0xdc, 0x8c, 0x84, 0x2e } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.16", - /* Message to be signed */ - 230, - { 0x7d, 0xf0, 0x23, 0x6e, 0x87, 0x1a, 0x71, 0xc3, 0x17, 0x90, 0xeb, 0x5f, 0x01, 0x1c, 0x91, 0x1c, 0x27, 0xc6, 0x03, 0x73, 0xb8, 0xdc, 0x9e, 0xbb, 0x13, 0xac, 0x85, 0xac, 0xcb, 0x3b, 0xcb, 0xd3, 0xb4, 0x74, 0xf9, 0x78, 0x86, 0x2d, 0xd8, 0x42, 0x02, 0xab, 0x20, 0xb3, 0x34, 0x73, 0x94, 0x25, 0xe1, 0xb7, 0x9e, 0x0b, 0xb8, 0xb4, 0xbc, 0x47, 0xdc, 0x71, 0x53, 0xf5, 0x7a, 0xda, 0x04, 0x12, 0x44, 0x7b, 0xf5, 0xa5, 0xe6, 0x67, 0x34, 0x19, 0xba, 0xad, 0x65, 0x3e, 0x5f, 0x5c, 0x39, 0xe2, 0xef, 0x7c, 0xfe, 0x7e, 0xf4, 0x77, 0x8a, 0xb9, 0x98, 0xca, 0xf9, 0x7c, 0xe1, 0x6c, 0x58, 0x33, 0x27, 0x72, 0xdd, 0xdf, 0x82, 0x6f, 0x1e, 0xec, 0x1a, 0xf3, 0xdb, 0x80, 0xe3, 0x13, 0x75, 0xd6, 0x68, 0x0a, 0xa2, 0x54, 0xb4, 0xab, 0x6e, 0xf9, 0xa3, 0xec, 0x0e, 0x04, 0x03, 0xe4, 0xb5, 0x83, 0xd3, 0x71, 0xdd, 0xd9, 0x6d, 0xd5, 0x7b, 0x2c, 0x61, 0xa6, 0xe4, 0x01, 0x25, 0x1a, 0x1a, 0x63, 0x0d, 0x1d, 0xdc, 0xdd, 0x84, 0xd9, 0x0d, 0x82, 0xfa, 0xf5, 0xa0, 0x18, 0xd2, 0xa8, 0x8e, 0x26, 0x58, 0x55, 0xe9, 0xd7, 0xca, 0x36, 0xc6, 0x87, 0x95, 0xf0, 0xb3, 0x1b, 0x59, 0x1c, 0xd6, 0x58, 0x7c, 0x71, 0xd0, 0x60, 0xa0, 0xb3, 0xf7, 0xf3, 0xea, 0xef, 0x43, 0x79, 0x59, 0x22, 0x02, 0x8b, 0xc2, 0xb6, 0xad, 0x46, 0x7c, 0xfc, 0x2d, 0x7f, 0x65, 0x9c, 0x53, 0x85, 0xaa, 0x70, 0xba, 0x36, 0x72, 0xcd, 0xde, 0x4c, 0xfe, 0x49, 0x70, 0xcc, 0x79, 0x04, 0x60, 0x1b, 0x27, 0x88, 0x72, 0xbf, 0x51, 0x32, 0x1c, 0x4a, 0x97, 0x2f } -, - /* Signature */ - 129, - { 0x01, 0x45, 0x5e, 0x3b, 0xb2, 0x9c, 0xbc, 0xa8, 0x83, 0x9b, 0x9f, 0x54, 0x4d, 0x51, 0x47, 0x2e, 0xbc, 0xfd, 0x25, 0xc2, 0x92, 0x27, 0xc4, 0x65, 0x5d, 0x5f, 0x7e, 0xbb, 0xd8, 0x3c, 0x48, 0xe7, 0x64, 0x3e, 0x7b, 0x59, 0x4d, 0x6f, 0x7c, 0xd5, 0xf6, 0xbf, 0x9a, 0x40, 0xb0, 0x5c, 0x4a, 0x05, 0xcb, 0xee, 0x1f, 0xd6, 0x59, 0xd3, 0xce, 0xde, 0x3e, 0x7c, 0xad, 0x61, 0xe6, 0xfd, 0xf8, 0xf0, 0xe4, 0xfd, 0xef, 0x08, 0x12, 0xa8, 0x53, 0x90, 0x8f, 0x0f, 0x99, 0xca, 0x7e, 0x38, 0x8e, 0xbc, 0x19, 0xe8, 0x74, 0x76, 0x5b, 0x11, 0x64, 0x0f, 0x1e, 0xe1, 0xe9, 0x8f, 0x54, 0x95, 0x3d, 0xe6, 0x17, 0x6f, 0x15, 0x82, 0x03, 0x70, 0x17, 0xc8, 0x38, 0x60, 0x9a, 0x57, 0xa1, 0x2a, 0xcb, 0xaf, 0xa6, 0xa5, 0x65, 0x47, 0xf5, 0x7d, 0x62, 0xdb, 0xe8, 0x76, 0x69, 0xed, 0xc0, 0xfe, 0x3b, 0xaa, 0xda } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.17", - /* Message to be signed */ - 144, - { 0x12, 0x88, 0xc0, 0x3f, 0x95, 0x00, 0x6e, 0xa3, 0x2f, 0x56, 0x2d, 0x40, 0xd5, 0x2a, 0xf9, 0xfe, 0xb3, 0x2f, 0x0f, 0xa0, 0x6d, 0xb6, 0x5b, 0x58, 0x8a, 0x23, 0x7b, 0x34, 0xe5, 0x92, 0xd5, 0x5c, 0xf9, 0x79, 0xf9, 0x03, 0xa6, 0x42, 0xef, 0x64, 0xd2, 0xed, 0x54, 0x2a, 0xa8, 0xc7, 0x7d, 0xc1, 0xdd, 0x76, 0x2f, 0x45, 0xa5, 0x93, 0x03, 0xed, 0x75, 0xe5, 0x41, 0xca, 0x27, 0x1e, 0x2b, 0x60, 0xca, 0x70, 0x9e, 0x44, 0xfa, 0x06, 0x61, 0x13, 0x1e, 0x8d, 0x5d, 0x41, 0x63, 0xfd, 0x8d, 0x39, 0x85, 0x66, 0xce, 0x26, 0xde, 0x87, 0x30, 0xe7, 0x2f, 0x9c, 0xca, 0x73, 0x76, 0x41, 0xc2, 0x44, 0x15, 0x94, 0x20, 0x63, 0x70, 0x28, 0xdf, 0x0a, 0x18, 0x07, 0x9d, 0x62, 0x08, 0xea, 0x8b, 0x47, 0x11, 0xa2, 0xc7, 0x50, 0xf5, 0xc0, 0xa4, 0x25, 0x31, 0x3d, 0xf8, 0xd7, 0x56, 0x4b, 0xd2, 0x43, 0x4d, 0x31, 0x15, 0x23, 0xd5, 0x25, 0x7e, 0xed, 0x80, 0x6a, 0xc8, 0xc9, 0xc6, 0xaf, 0x04, 0xac } -, - /* Signature */ - 129, - { 0x00, 0x6b, 0xeb, 0xb9, 0x6f, 0x0e, 0x28, 0x2f, 0x1b, 0x4d, 0x03, 0xe6, 0xc5, 0x65, 0x05, 0xb9, 0x37, 0x78, 0xda, 0x9f, 0x49, 0x36, 0x50, 0xe8, 0xaa, 0xeb, 0x65, 0xcf, 0xe6, 0x28, 0x50, 0x04, 0x2f, 0x75, 0xab, 0xe6, 0xe6, 0xea, 0xfe, 0xb9, 0xa7, 0x0a, 0xbd, 0x21, 0xeb, 0x5d, 0xba, 0x73, 0xcb, 0xb8, 0x7c, 0x12, 0x98, 0x0a, 0xac, 0xdf, 0x16, 0x71, 0x6b, 0x19, 0x98, 0xc9, 0x49, 0x9c, 0xe4, 0x39, 0xc5, 0x4a, 0xab, 0x4d, 0x19, 0xce, 0x72, 0x7b, 0x78, 0x75, 0xa4, 0x1a, 0x3d, 0x30, 0x81, 0x4e, 0x50, 0x8d, 0xaa, 0x26, 0xeb, 0x70, 0xaa, 0xbb, 0xd0, 0xdc, 0xae, 0xcc, 0x4d, 0x4b, 0x51, 0x69, 0x80, 0x71, 0x51, 0x1e, 0xb3, 0x1b, 0x21, 0x0e, 0x66, 0xdc, 0xbc, 0x7f, 0xc0, 0xb8, 0xc6, 0x23, 0x14, 0xda, 0xea, 0x69, 0xd4, 0x7a, 0xe2, 0x78, 0x10, 0x0d, 0xeb, 0x51, 0x40, 0x92, 0x00 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.18", - /* Message to be signed */ - 10, - { 0x54, 0x13, 0x99, 0x3c, 0x26, 0x58, 0xbc, 0x1d, 0x98, 0x85 } -, - /* Signature */ - 129, - { 0x00, 0xbb, 0xeb, 0x2c, 0xa0, 0xbd, 0x64, 0xcb, 0x89, 0x60, 0x37, 0x5b, 0x08, 0xa9, 0x48, 0x0e, 0x69, 0xc0, 0x9f, 0xd3, 0x82, 0xde, 0xa2, 0xf9, 0x40, 0x89, 0xb1, 0x53, 0x3a, 0x08, 0x51, 0xfa, 0x0c, 0xbd, 0x0e, 0xad, 0xef, 0xca, 0x8c, 0x70, 0xb7, 0x70, 0x79, 0x7a, 0xd0, 0x89, 0xe8, 0x40, 0xd2, 0xfe, 0x1a, 0x8f, 0xb8, 0x54, 0x9f, 0x32, 0x90, 0x58, 0x3b, 0xbb, 0x81, 0xd3, 0xee, 0x2b, 0x1c, 0x48, 0xf1, 0xea, 0x75, 0x1b, 0xf3, 0x2f, 0x95, 0x90, 0xbe, 0x3a, 0xfd, 0xb7, 0x74, 0x5e, 0x16, 0x6e, 0x0b, 0x32, 0x2c, 0x08, 0x31, 0x24, 0xe6, 0x45, 0x83, 0x94, 0x82, 0xd0, 0x81, 0x26, 0x22, 0xd3, 0x1a, 0xb1, 0x87, 0x7a, 0x9b, 0xb4, 0x1b, 0x8d, 0xaa, 0xd8, 0x68, 0xf3, 0x0e, 0x75, 0x07, 0x83, 0x2a, 0xc3, 0x41, 0x01, 0x12, 0x13, 0x3a, 0xa1, 0x7b, 0x2d, 0x47, 0x6d, 0x47, 0x6d, 0x89 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.19", - /* Message to be signed */ - 232, - { 0x9c, 0x84, 0xc1, 0x48, 0x6b, 0xc1, 0x2b, 0x3f, 0xa6, 0xc5, 0x98, 0x71, 0xb6, 0x82, 0x7c, 0x8c, 0xe2, 0x53, 0xca, 0x5f, 0xef, 0xa8, 0xa8, 0xc6, 0x90, 0xbf, 0x32, 0x6e, 0x8e, 0x37, 0xcd, 0xb9, 0x6d, 0x90, 0xa8, 0x2e, 0xba, 0xb6, 0x9f, 0x86, 0x35, 0x0e, 0x18, 0x22, 0xe8, 0xbd, 0x53, 0x6a, 0x2e, 0xb3, 0x07, 0xc4, 0x3b, 0x48, 0x50, 0xa8, 0xda, 0xc2, 0xf1, 0x5f, 0x32, 0xe3, 0x78, 0x39, 0xef, 0x8c, 0x5c, 0x0e, 0x91, 0xdd, 0x0a, 0xfa, 0xd4, 0x2c, 0xcd, 0x4f, 0xc6, 0x06, 0x54, 0xa5, 0x50, 0x02, 0xd2, 0x28, 0xf5, 0x2a, 0x4a, 0x5f, 0xe0, 0x3b, 0x8b, 0xbb, 0x08, 0xca, 0x82, 0xda, 0xca, 0x55, 0x8b, 0x44, 0xdb, 0xe1, 0x26, 0x6e, 0x50, 0xc0, 0xe7, 0x45, 0xa3, 0x6d, 0x9d, 0x29, 0x04, 0xe3, 0x40, 0x8a, 0xbc, 0xd1, 0xfd, 0x56, 0x99, 0x94, 0x06, 0x3f, 0x4a, 0x75, 0xcc, 0x72, 0xf2, 0xfe, 0xe2, 0xa0, 0xcd, 0x89, 0x3a, 0x43, 0xaf, 0x1c, 0x5b, 0x8b, 0x48, 0x7d, 0xf0, 0xa7, 0x16, 0x10, 0x02, 0x4e, 0x4f, 0x6d, 0xdf, 0x9f, 0x28, 0xad, 0x08, 0x13, 0xc1, 0xaa, 0xb9, 0x1b, 0xcb, 0x3c, 0x90, 0x64, 0xd5, 0xff, 0x74, 0x2d, 0xef, 0xfe, 0xa6, 0x57, 0x09, 0x41, 0x39, 0x36, 0x9e, 0x5e, 0xa6, 0xf4, 0xa9, 0x63, 0x19, 0xa5, 0xcc, 0x82, 0x24, 0x14, 0x5b, 0x54, 0x50, 0x62, 0x75, 0x8f, 0xef, 0xd1, 0xfe, 0x34, 0x09, 0xae, 0x16, 0x92, 0x59, 0xc6, 0xcd, 0xfd, 0x6b, 0x5f, 0x29, 0x58, 0xe3, 0x14, 0xfa, 0xec, 0xbe, 0x69, 0xd2, 0xca, 0xce, 0x58, 0xee, 0x55, 0x17, 0x9a, 0xb9, 0xb3, 0xe6, 0xd1, 0xec, 0xc1, 0x4a, 0x55 } -, - /* Signature */ - 129, - { 0x00, 0xe6, 0xbe, 0x96, 0xe1, 0x8d, 0xce, 0xbf, 0x83, 0x88, 0xba, 0x82, 0xec, 0x6f, 0x27, 0x10, 0x5b, 0xc2, 0x78, 0x71, 0x59, 0x5e, 0x01, 0x70, 0x5a, 0x2b, 0x97, 0xa1, 0xf4, 0xd7, 0x88, 0x38, 0x35, 0x2b, 0x0e, 0x7c, 0x0a, 0x2c, 0x62, 0x7a, 0x6f, 0xf3, 0x7d, 0xb1, 0x69, 0xa9, 0xa4, 0x64, 0x8a, 0xd2, 0x7a, 0xf0, 0x65, 0x33, 0xa4, 0xf0, 0x41, 0xd4, 0xc8, 0x20, 0xab, 0xf4, 0xfb, 0x52, 0x64, 0x64, 0x08, 0x14, 0x34, 0xdf, 0x36, 0x78, 0x85, 0x03, 0xc6, 0x5a, 0xf7, 0x62, 0xaa, 0x21, 0x9f, 0xb7, 0x6a, 0x91, 0xcb, 0xb4, 0x0e, 0x14, 0x92, 0xa9, 0xcb, 0x77, 0x36, 0x9b, 0xb4, 0xcc, 0xa1, 0x93, 0x4e, 0x38, 0x53, 0xde, 0x6c, 0x86, 0xa5, 0xdc, 0x11, 0x48, 0xed, 0xee, 0xb3, 0xb0, 0x03, 0x04, 0x14, 0xfe, 0x30, 0x83, 0xad, 0x72, 0xfe, 0x29, 0x5c, 0x29, 0xb5, 0xea, 0x9b, 0x66, 0x60 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 7.20", - /* Message to be signed */ - 165, - { 0x94, 0x0c, 0xda, 0xb4, 0xa3, 0xe9, 0x20, 0x09, 0xcc, 0xd4, 0x2e, 0x1e, 0x94, 0x7b, 0x13, 0x14, 0xe3, 0x22, 0x38, 0xa2, 0xde, 0xce, 0x7d, 0x23, 0xa8, 0x9b, 0x5b, 0x30, 0xc7, 0x51, 0xfd, 0x0a, 0x4a, 0x43, 0x0d, 0x2c, 0x54, 0x85, 0x94, 0x9a, 0x2b, 0x00, 0x7e, 0x80, 0x97, 0x8b, 0xbb, 0x19, 0x2c, 0x35, 0x4e, 0xb7, 0xda, 0x9a, 0xed, 0xfc, 0x74, 0xdb, 0xf5, 0xf7, 0x1d, 0xfd, 0x43, 0xb4, 0x6c, 0x93, 0xdb, 0x82, 0x62, 0x9b, 0xda, 0xe2, 0xbd, 0x0a, 0x12, 0xb8, 0x82, 0xea, 0x04, 0xc3, 0xb4, 0x65, 0xf5, 0xcf, 0x93, 0x02, 0x3f, 0x01, 0x05, 0x96, 0x26, 0xdb, 0xbe, 0x99, 0xf2, 0x6b, 0xb1, 0xbe, 0x94, 0x9d, 0xdd, 0xd1, 0x6d, 0xc7, 0xf3, 0xde, 0xbb, 0x19, 0xa1, 0x94, 0x62, 0x7f, 0x0b, 0x22, 0x44, 0x34, 0xdf, 0x7d, 0x87, 0x00, 0xe9, 0xe9, 0x8b, 0x06, 0xe3, 0x60, 0xc1, 0x2f, 0xdb, 0xe3, 0xd1, 0x9f, 0x51, 0xc9, 0x68, 0x4e, 0xb9, 0x08, 0x9e, 0xcb, 0xb0, 0xa2, 0xf0, 0x45, 0x03, 0x99, 0xd3, 0xf5, 0x9e, 0xac, 0x72, 0x94, 0x08, 0x5d, 0x04, 0x4f, 0x53, 0x93, 0xc6, 0xce, 0x73, 0x74, 0x23, 0xd8, 0xb8 } -, - /* Signature */ - 129, - { 0x00, 0x80, 0xe2, 0xc3, 0x4f, 0xd4, 0xab, 0x4d, 0x1d, 0x70, 0x1e, 0xa3, 0xf0, 0x85, 0x76, 0x3a, 0xca, 0xff, 0xc9, 0xfd, 0x3e, 0xd9, 0x18, 0xd0, 0x4b, 0xff, 0xee, 0x19, 0x31, 0x62, 0x48, 0x98, 0xc7, 0x8f, 0x89, 0x41, 0xbd, 0x2a, 0x59, 0xce, 0xb5, 0xb8, 0x40, 0xf0, 0x11, 0x45, 0x16, 0xce, 0x41, 0x1f, 0xae, 0x75, 0x2b, 0x1b, 0x8a, 0x22, 0x1f, 0xfc, 0xa7, 0xa6, 0x87, 0x66, 0xc6, 0x97, 0xc5, 0x0a, 0x3d, 0x88, 0xd8, 0xd0, 0x2f, 0xfc, 0x12, 0x41, 0xd8, 0x4b, 0xb7, 0xa7, 0x22, 0x7f, 0x3d, 0x05, 0x14, 0x9e, 0x15, 0x11, 0x12, 0x77, 0xa1, 0x36, 0xa5, 0xb8, 0xdd, 0x96, 0xdd, 0x4b, 0x22, 0x5c, 0x5f, 0x49, 0xcd, 0xf6, 0x07, 0x1d, 0xbf, 0x71, 0x93, 0x5c, 0x7a, 0x6f, 0x1e, 0x2e, 0x9a, 0xf3, 0x02, 0x1c, 0x0d, 0x58, 0xa9, 0xb8, 0x1c, 0x9b, 0xde, 0x61, 0xfa, 0x47, 0x2c, 0x07, 0xa6 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 8: A 1026-bit RSA key pair", -{ - /* Modulus */ - 129, - { 0x03, 0x33, 0x12, 0x64, 0x88, 0xf7, 0xa2, 0x91, 0x51, 0x32, 0xe3, 0x0d, 0x5e, 0x97, 0xf6, 0xed, 0x7b, 0xbb, 0x67, 0xb6, 0x19, 0x85, 0x00, 0x8e, 0xae, 0xa2, 0xa5, 0xda, 0xfb, 0x96, 0xa4, 0x48, 0xab, 0x75, 0xce, 0x3d, 0x6e, 0x68, 0xa6, 0x26, 0x5e, 0x7c, 0x24, 0x56, 0x84, 0x99, 0x93, 0x24, 0xc8, 0x1e, 0x0b, 0xa6, 0x38, 0x98, 0x63, 0xfe, 0xb4, 0x88, 0xb3, 0xf2, 0x55, 0xd0, 0xd6, 0x19, 0xc1, 0x90, 0x40, 0xb7, 0x4c, 0x18, 0x9f, 0x0c, 0x9a, 0xf4, 0xb0, 0xd5, 0xa5, 0x5a, 0x54, 0x4c, 0x09, 0x0c, 0xd6, 0x15, 0x2c, 0x90, 0xa6, 0xf2, 0x55, 0x0d, 0x7d, 0x2a, 0x6b, 0x6d, 0x34, 0x7d, 0x5b, 0x1b, 0x9d, 0xfb, 0x1d, 0xe4, 0x40, 0x3c, 0x79, 0x66, 0x23, 0xd7, 0x03, 0xbf, 0x9d, 0xb4, 0x43, 0xbf, 0x67, 0x02, 0x68, 0x3b, 0x8d, 0x2a, 0x9c, 0x61, 0xe9, 0x36, 0x8a, 0xc4, 0x25, 0xa5, 0x81 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 129, - { 0x01, 0x4a, 0x2b, 0x15, 0xdf, 0xa8, 0x83, 0x1d, 0xb4, 0xef, 0xa0, 0x5b, 0x19, 0x50, 0x84, 0xb7, 0x42, 0x73, 0x4e, 0xe1, 0x36, 0xf4, 0x48, 0x3f, 0x3b, 0xe2, 0x50, 0x9d, 0x2f, 0x61, 0x90, 0x23, 0xc3, 0x0a, 0x1f, 0xf2, 0xdf, 0x78, 0xcb, 0xd1, 0x17, 0xb1, 0x4f, 0x2c, 0x99, 0x13, 0x17, 0x1f, 0x72, 0x93, 0xb9, 0xfa, 0x6d, 0x41, 0xf0, 0xbd, 0x11, 0xa5, 0x31, 0x74, 0x74, 0x67, 0x54, 0x86, 0xd7, 0xf0, 0xae, 0xc0, 0xa7, 0x78, 0xba, 0x92, 0x0e, 0x81, 0xf5, 0x64, 0xd1, 0x59, 0x30, 0xcd, 0xde, 0xe7, 0xe2, 0xb0, 0x6a, 0xd8, 0xad, 0xb6, 0x12, 0x75, 0x1f, 0x4e, 0x38, 0x4d, 0x6f, 0x3f, 0xa0, 0xa6, 0x63, 0x9f, 0xd6, 0x2e, 0xdf, 0x86, 0xf5, 0x2c, 0x9f, 0xe0, 0x77, 0x62, 0x91, 0x83, 0x21, 0x83, 0xd3, 0x59, 0xb7, 0x34, 0x32, 0x60, 0xc9, 0x4e, 0x12, 0x5f, 0x4a, 0xb8, 0xbf, 0x43, 0x69 } -, - /* Prime 1 */ - 65, - { 0x01, 0xd6, 0xe7, 0xbd, 0x8e, 0x39, 0x5b, 0xbe, 0xf2, 0x10, 0x46, 0x49, 0xc0, 0x12, 0x78, 0xcc, 0x1c, 0x51, 0xc9, 0x68, 0x7d, 0xef, 0xb4, 0x59, 0x1f, 0x03, 0xb6, 0x78, 0x52, 0xa4, 0xbc, 0xb5, 0x30, 0x75, 0x0c, 0xf9, 0xbf, 0xca, 0xd0, 0x72, 0x8c, 0x53, 0x99, 0xd8, 0x70, 0x35, 0x01, 0x06, 0xcb, 0xa3, 0xec, 0x41, 0x6a, 0x31, 0xe4, 0x2d, 0x0b, 0x59, 0x75, 0x10, 0xff, 0x1c, 0x9d, 0x53, 0xbb } -, - /* Prime 2 */ - 65, - { 0x01, 0xbd, 0x46, 0x6f, 0x43, 0xa4, 0xd4, 0x61, 0x3e, 0x42, 0x64, 0xf0, 0x1b, 0x2d, 0xac, 0x2e, 0x5a, 0xa4, 0x20, 0x43, 0xf8, 0xfb, 0x5f, 0x69, 0xfa, 0x87, 0x1d, 0x14, 0xfb, 0x27, 0x3e, 0x76, 0x7a, 0x53, 0x1c, 0x40, 0xf0, 0x2f, 0x34, 0x3b, 0xc2, 0xfb, 0x45, 0xa0, 0xc7, 0xe0, 0xf6, 0xbe, 0x25, 0x61, 0x92, 0x3a, 0x77, 0x21, 0x1d, 0x66, 0xa6, 0xe2, 0xdb, 0xb4, 0x3c, 0x36, 0x63, 0x51, 0xf3 } -, - /* Prime exponent 1 */ - 64, - { 0xfb, 0x66, 0x85, 0x00, 0x65, 0x06, 0xe2, 0x0e, 0x01, 0x3a, 0x45, 0x2d, 0x51, 0xaf, 0x43, 0xe8, 0xea, 0x91, 0x08, 0x44, 0x13, 0xb0, 0xc8, 0xd3, 0x91, 0xfb, 0xdc, 0x88, 0xe2, 0x82, 0x0c, 0x89, 0x6e, 0x34, 0x1b, 0x31, 0x95, 0x69, 0x6b, 0x7e, 0x17, 0x33, 0xcf, 0x25, 0x38, 0x66, 0xef, 0xe5, 0xd0, 0x01, 0xd5, 0x7a, 0x88, 0x60, 0x34, 0xdc, 0x16, 0x4a, 0x35, 0x64, 0xbd, 0x36, 0x10, 0xf9 } -, - /* Prime exponent 2 */ - 64, - { 0xbe, 0x4e, 0x9e, 0x3b, 0x40, 0xf5, 0x6c, 0x62, 0x59, 0xaa, 0x1e, 0x5c, 0xdf, 0x56, 0x59, 0xb1, 0x6f, 0xb8, 0x42, 0x94, 0xe5, 0x8a, 0xd0, 0x16, 0xbd, 0x2c, 0x96, 0xcd, 0x08, 0xe6, 0xcf, 0x68, 0x54, 0xa1, 0x1c, 0xb8, 0x0a, 0xd4, 0xbe, 0x3e, 0x05, 0x7a, 0xaa, 0xcf, 0x02, 0xbd, 0x32, 0x63, 0x73, 0xa2, 0x35, 0xce, 0xb8, 0x9e, 0x82, 0x43, 0x0d, 0x6e, 0x6d, 0x47, 0xd6, 0xce, 0xf8, 0x35 } -, - /* Coefficient */ - 64, - { 0xc0, 0x23, 0x5c, 0x89, 0x73, 0xcf, 0xbf, 0x30, 0xbf, 0x1d, 0xd3, 0xc8, 0x39, 0xf0, 0x2c, 0x94, 0xc6, 0x9d, 0xc5, 0x34, 0xcb, 0xfc, 0x98, 0x88, 0x05, 0xd6, 0xfc, 0x46, 0x2a, 0xdb, 0xd3, 0x77, 0xd1, 0x75, 0xb9, 0xa9, 0x64, 0x60, 0x18, 0xd7, 0xfa, 0xb7, 0x5c, 0x1d, 0x1f, 0x7d, 0x61, 0xb7, 0x7f, 0xa7, 0x95, 0x59, 0xb8, 0x6f, 0xfa, 0x9e, 0xc6, 0xe2, 0x11, 0x33, 0xfa, 0x7f, 0x1a, 0x45 } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 8.1", - /* Message to be signed */ - 181, - { 0x9a, 0x28, 0x20, 0xf3, 0xb9, 0x02, 0x9a, 0xbc, 0x18, 0x65, 0xeb, 0x06, 0xfe, 0x61, 0xb8, 0xd3, 0x97, 0xb6, 0x55, 0x72, 0xd6, 0x00, 0x61, 0xca, 0xa7, 0x4e, 0x63, 0x56, 0x93, 0x1e, 0x25, 0x6b, 0x89, 0x71, 0x2d, 0x18, 0x66, 0x84, 0xb4, 0xde, 0x1e, 0x14, 0xc9, 0xeb, 0xfe, 0xf1, 0x6e, 0x40, 0xd9, 0x9d, 0x10, 0x94, 0x39, 0x6c, 0x56, 0x1c, 0x88, 0x31, 0x77, 0xe5, 0x12, 0x6b, 0x9b, 0xe2, 0xd9, 0xa9, 0x68, 0x03, 0x27, 0xd5, 0x37, 0x0c, 0x6f, 0x26, 0x86, 0x1f, 0x58, 0x20, 0xc4, 0x3d, 0xa6, 0x7a, 0x3a, 0xd6, 0x09, 0x04, 0xe2, 0x15, 0xee, 0x6f, 0xf9, 0x34, 0xb9, 0xda, 0x70, 0xd7, 0x73, 0x0c, 0x87, 0x34, 0xab, 0xfc, 0xec, 0xde, 0x89, 0x7f, 0xdd, 0x67, 0x0a, 0x01, 0x46, 0x58, 0x68, 0xad, 0xc9, 0x3f, 0x26, 0x13, 0x19, 0x57, 0xa5, 0x0c, 0x52, 0xfb, 0x77, 0x7c, 0xdb, 0xaa, 0x30, 0x89, 0x2c, 0x9e, 0x12, 0x36, 0x11, 0x64, 0xec, 0x13, 0x97, 0x9d, 0x43, 0x04, 0x81, 0x18, 0xe4, 0x44, 0x5d, 0xb8, 0x7b, 0xee, 0x58, 0xdd, 0x98, 0x7b, 0x34, 0x25, 0xd0, 0x20, 0x71, 0xd8, 0xdb, 0xae, 0x80, 0x70, 0x8b, 0x03, 0x9d, 0xbb, 0x64, 0xdb, 0xd1, 0xde, 0x56, 0x57, 0xd9, 0xfe, 0xd0, 0xc1, 0x18, 0xa5, 0x41 } -, - /* Signature */ - 129, - { 0x03, 0x22, 0xd0, 0x0f, 0xc1, 0xd9, 0x66, 0x94, 0xf3, 0x6e, 0xae, 0xd2, 0x30, 0x90, 0x56, 0xf3, 0xea, 0x1c, 0x1c, 0xc2, 0x2b, 0x13, 0xb6, 0x5e, 0x79, 0x11, 0x8d, 0x20, 0x2c, 0x42, 0xd1, 0x61, 0x30, 0x99, 0x38, 0x05, 0x09, 0xda, 0x74, 0x35, 0xbb, 0x57, 0x92, 0x16, 0xfd, 0x57, 0x65, 0x06, 0x68, 0x42, 0xe3, 0x56, 0xa6, 0x41, 0x6f, 0xc8, 0x42, 0xa2, 0x4a, 0x9e, 0xa1, 0xbc, 0x6a, 0x90, 0x98, 0x05, 0x23, 0xb4, 0x28, 0xe3, 0x99, 0xbb, 0xd6, 0xfc, 0xdc, 0x2c, 0xb7, 0x71, 0xda, 0xf0, 0x03, 0x7a, 0x2d, 0xe8, 0xc7, 0x64, 0x9b, 0xd5, 0x33, 0x17, 0xde, 0x0e, 0x37, 0xc3, 0x14, 0xba, 0xb0, 0xc4, 0x37, 0xbb, 0xd7, 0x98, 0xdf, 0xb9, 0x65, 0x50, 0x6c, 0x34, 0x8b, 0x74, 0x2f, 0x13, 0x8e, 0xf1, 0xd1, 0xa2, 0x03, 0xe0, 0x51, 0xe3, 0x4b, 0xdd, 0x3a, 0x30, 0xe0, 0xfc, 0xe1, 0xac, 0x43 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 8.2", - /* Message to be signed */ - 118, - { 0xea, 0x9a, 0x1a, 0x04, 0xb7, 0xcf, 0x47, 0x8a, 0x89, 0x7a, 0x70, 0x8f, 0xd9, 0x88, 0xf4, 0x8e, 0x80, 0x1e, 0xdb, 0x0b, 0x70, 0x39, 0xdf, 0x8c, 0x23, 0xbb, 0x3c, 0x56, 0xf4, 0xe8, 0x21, 0xac, 0x8b, 0x2b, 0xdd, 0x4b, 0x40, 0xfa, 0xf5, 0x45, 0xc7, 0x78, 0xdd, 0xf9, 0xbc, 0x1a, 0x49, 0xcb, 0x57, 0xf9, 0xb7, 0x1b, 0x6d, 0x48, 0xb2, 0xb6, 0xa5, 0x7a, 0x63, 0xc8, 0x4c, 0xea, 0x85, 0x9d, 0x65, 0xc6, 0x68, 0x28, 0x4b, 0x08, 0xd9, 0x6b, 0xdc, 0xaa, 0xbe, 0x25, 0x2d, 0xb0, 0xe4, 0xa9, 0x6c, 0xb1, 0xba, 0xc6, 0x01, 0x93, 0x41, 0xdb, 0x6f, 0xbe, 0xfb, 0x8d, 0x10, 0x6b, 0x0e, 0x90, 0xed, 0xa6, 0xbc, 0xc6, 0xc6, 0x26, 0x2f, 0x37, 0xe7, 0xea, 0x9c, 0x7e, 0x5d, 0x22, 0x6b, 0xd7, 0xdf, 0x85, 0xec, 0x5e, 0x71, 0xef } -, - /* Signature */ - 129, - { 0x02, 0x68, 0x44, 0x09, 0x39, 0x99, 0x6a, 0xe5, 0xcb, 0xda, 0xfd, 0xbc, 0xa8, 0x6a, 0x7c, 0x42, 0x8a, 0x04, 0xb5, 0x78, 0xfe, 0x2d, 0xbe, 0x51, 0x26, 0xa8, 0x2f, 0xaf, 0x2b, 0xec, 0xff, 0x09, 0x9a, 0xc6, 0x0c, 0xb8, 0x1b, 0x11, 0x7f, 0x1e, 0xbf, 0x42, 0x04, 0xfe, 0x43, 0x70, 0x54, 0x8d, 0x5d, 0x2c, 0x46, 0x80, 0x63, 0x68, 0x2d, 0xa8, 0x7d, 0xc8, 0x01, 0x79, 0xbb, 0x3b, 0xba, 0x85, 0xa1, 0x48, 0xae, 0x2d, 0xe7, 0xdc, 0xb4, 0x94, 0xf4, 0x76, 0x22, 0x1d, 0xf8, 0x21, 0x9d, 0x4a, 0xae, 0x1e, 0x45, 0xaf, 0x65, 0xde, 0x33, 0x4a, 0x1a, 0x6d, 0xc1, 0x45, 0x52, 0x86, 0xae, 0x09, 0xcf, 0x26, 0x72, 0x58, 0x85, 0xe7, 0x74, 0x80, 0x99, 0x72, 0xd7, 0x81, 0x98, 0x05, 0xff, 0xf5, 0xa8, 0xc8, 0x9d, 0x37, 0x37, 0x64, 0x50, 0x73, 0x92, 0x49, 0xf5, 0x7e, 0xb1, 0x51, 0xb7, 0x1d, 0xc0 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.3", - /* Message to be signed */ - 23, - { 0x07, 0xdf, 0x58, 0x6b, 0x90, 0x5b, 0x23, 0xb9, 0x1a, 0xf1, 0x3d, 0xa1, 0x23, 0x04, 0xbf, 0x83, 0xec, 0xa8, 0xa7, 0x3e, 0x87, 0x1f, 0xf9 } -, - /* Signature */ - 129, - { 0x01, 0xbf, 0xd9, 0x15, 0xff, 0x77, 0x80, 0xf1, 0x4c, 0xcc, 0x55, 0xbd, 0x03, 0x06, 0xb3, 0xae, 0xda, 0x5b, 0x5b, 0x59, 0x55, 0xa8, 0x26, 0xd4, 0x52, 0x6b, 0x0b, 0xc7, 0x66, 0x15, 0x4f, 0xa8, 0xda, 0x59, 0x56, 0x05, 0x78, 0xcc, 0xd4, 0x88, 0x2f, 0xe9, 0x70, 0x92, 0xfb, 0xc7, 0x36, 0xfd, 0xa7, 0x3c, 0xee, 0xfd, 0x10, 0x38, 0x94, 0x06, 0x3e, 0x93, 0xe2, 0x2a, 0x7b, 0x5c, 0x44, 0xf7, 0xa8, 0x5e, 0x3b, 0xdb, 0x96, 0x71, 0x9a, 0x09, 0x37, 0x43, 0x03, 0xc9, 0x1e, 0xd7, 0xe2, 0x27, 0x49, 0xfe, 0x3c, 0x4d, 0x6b, 0x96, 0x69, 0x9d, 0x50, 0x7c, 0x50, 0xad, 0xcf, 0xbd, 0xfc, 0x13, 0x1d, 0x6b, 0x5f, 0x2c, 0xf1, 0x83, 0x0e, 0x31, 0xea, 0xbe, 0x39, 0xae, 0xb5, 0x17, 0x96, 0x9c, 0x94, 0xa8, 0x1c, 0xfe, 0xfe, 0x67, 0x31, 0xaa, 0x2c, 0xdf, 0xfe, 0x28, 0xc8, 0xaf, 0x71, 0x40, 0xf4 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.4", - /* Message to be signed */ - 116, - { 0x50, 0x0b, 0x87, 0x77, 0xc7, 0xf8, 0x39, 0xba, 0xf0, 0xa6, 0x4b, 0xbb, 0xdb, 0xc5, 0xce, 0x79, 0x75, 0x5c, 0x57, 0xa2, 0x05, 0xb8, 0x45, 0xc1, 0x74, 0xe2, 0xd2, 0xe9, 0x05, 0x46, 0xa0, 0x89, 0xc4, 0xe6, 0xec, 0x8a, 0xdf, 0xfa, 0x23, 0xa7, 0xea, 0x97, 0xba, 0xe6, 0xb6, 0x5d, 0x78, 0x2b, 0x82, 0xdb, 0x5d, 0x2b, 0x5a, 0x56, 0xd2, 0x2a, 0x29, 0xa0, 0x5e, 0x7c, 0x44, 0x33, 0xe2, 0xb8, 0x2a, 0x62, 0x1a, 0xbb, 0xa9, 0x0a, 0xdd, 0x05, 0xce, 0x39, 0x3f, 0xc4, 0x8a, 0x84, 0x05, 0x42, 0x45, 0x1a, 0xc7, 0xcd, 0x69, 0x8d, 0x84, 0xb6, 0x51, 0x28, 0xd8, 0x83, 0x5e, 0x3a, 0x8b, 0x1e, 0xb0, 0xe0, 0x1c, 0xb5, 0x41, 0xec, 0x50, 0xf1, 0x03, 0x6e, 0x00, 0x8e, 0x71, 0xe9, 0x64, 0xda, 0xdc, 0x92, 0x19, 0xed } -, - /* Signature */ - 129, - { 0x00, 0x7a, 0xe0, 0xcf, 0xd7, 0xf4, 0xc6, 0xad, 0x1f, 0xf8, 0x4b, 0x4a, 0x60, 0x6b, 0xa1, 0xc4, 0x79, 0x8c, 0x2e, 0x49, 0x9b, 0x04, 0x5b, 0x56, 0x7d, 0x32, 0x63, 0x4f, 0xd9, 0x55, 0xf2, 0x68, 0x26, 0x0a, 0xb6, 0x59, 0xbf, 0x5b, 0xe9, 0x9e, 0x08, 0x26, 0xeb, 0x38, 0x70, 0xe8, 0xf6, 0x2f, 0x5a, 0x3c, 0xe7, 0x58, 0xe6, 0xd1, 0x56, 0xc3, 0x29, 0x9b, 0x43, 0x1c, 0xd9, 0xdf, 0xc6, 0x58, 0x37, 0xee, 0x94, 0x22, 0x0d, 0x95, 0x23, 0x51, 0x14, 0x87, 0x99, 0xbe, 0x9f, 0xca, 0xf9, 0xbe, 0x26, 0x4d, 0xae, 0xbe, 0xba, 0x2b, 0xe8, 0x66, 0x05, 0x20, 0x1e, 0xf9, 0xa0, 0xd9, 0x8f, 0x58, 0xec, 0x63, 0x8a, 0xbf, 0xc4, 0xf2, 0x78, 0x48, 0xf5, 0xd4, 0x79, 0xd3, 0x34, 0xac, 0xc2, 0xa9, 0x7f, 0xdd, 0x2d, 0x32, 0x7e, 0xc4, 0xc7, 0xdd, 0xc5, 0xa8, 0xab, 0xd5, 0x66, 0xde, 0x35, 0xd1, 0x4f } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.5", - /* Message to be signed */ - 238, - { 0x6b, 0x3f, 0x6a, 0x63, 0xd4, 0xe7, 0x78, 0x59, 0x24, 0x3c, 0x9c, 0xcc, 0xdc, 0x98, 0x01, 0x65, 0x23, 0xab, 0xb0, 0x24, 0x83, 0xb3, 0x55, 0x91, 0xc3, 0x3a, 0xad, 0x81, 0x21, 0x3b, 0xb7, 0xc7, 0xbb, 0x1a, 0x47, 0x0a, 0xab, 0xc1, 0x0d, 0x44, 0x25, 0x6c, 0x4d, 0x45, 0x59, 0xd9, 0x16, 0xef, 0xa8, 0xbf, 0xf9, 0x62, 0x12, 0xb2, 0xf4, 0xa3, 0xf3, 0x71, 0xa1, 0x0d, 0x57, 0x41, 0x52, 0x65, 0x5f, 0x5d, 0xfb, 0xa2, 0x25, 0xf1, 0x08, 0x95, 0xa8, 0x77, 0x16, 0xc1, 0x37, 0x45, 0x0b, 0xb9, 0x51, 0x9d, 0xfa, 0xa1, 0xf2, 0x07, 0xfa, 0xa9, 0x42, 0xea, 0x88, 0xab, 0xf7, 0x1e, 0x9c, 0x17, 0x98, 0x00, 0x85, 0xb5, 0x55, 0xae, 0xba, 0xb7, 0x62, 0x64, 0xae, 0x2a, 0x3a, 0xb9, 0x3c, 0x2d, 0x12, 0x98, 0x11, 0x91, 0xdd, 0xac, 0x6f, 0xb5, 0x94, 0x9e, 0xb3, 0x6a, 0xee, 0x3c, 0x5d, 0xa9, 0x40, 0xf0, 0x07, 0x52, 0xc9, 0x16, 0xd9, 0x46, 0x08, 0xfa, 0x7d, 0x97, 0xba, 0x6a, 0x29, 0x15, 0xb6, 0x88, 0xf2, 0x03, 0x23, 0xd4, 0xe9, 0xd9, 0x68, 0x01, 0xd8, 0x9a, 0x72, 0xab, 0x58, 0x92, 0xdc, 0x21, 0x17, 0xc0, 0x74, 0x34, 0xfc, 0xf9, 0x72, 0xe0, 0x58, 0xcf, 0x8c, 0x41, 0xca, 0x4b, 0x4f, 0xf5, 0x54, 0xf7, 0xd5, 0x06, 0x8a, 0xd3, 0x15, 0x5f, 0xce, 0xd0, 0xf3, 0x12, 0x5b, 0xc0, 0x4f, 0x91, 0x93, 0x37, 0x8a, 0x8f, 0x5c, 0x4c, 0x3b, 0x8c, 0xb4, 0xdd, 0x6d, 0x1c, 0xc6, 0x9d, 0x30, 0xec, 0xca, 0x6e, 0xaa, 0x51, 0xe3, 0x6a, 0x05, 0x73, 0x0e, 0x9e, 0x34, 0x2e, 0x85, 0x5b, 0xaf, 0x09, 0x9d, 0xef, 0xb8, 0xaf, 0xd7, 0xad, 0x8b, 0x15, 0x23, 0x70, 0x36, 0x46 } -, - /* Signature */ - 129, - { 0x01, 0x92, 0x1f, 0x22, 0xf4, 0x71, 0xa0, 0x8a, 0xf8, 0x19, 0xa9, 0x52, 0xe1, 0x83, 0x68, 0xce, 0x15, 0xf9, 0xb0, 0x64, 0xeb, 0x1d, 0x00, 0xb1, 0x28, 0x99, 0x78, 0x02, 0x44, 0xfe, 0x8c, 0x44, 0x24, 0xb2, 0x1f, 0x64, 0x35, 0x0b, 0x92, 0x26, 0xfe, 0x95, 0xff, 0x54, 0xf1, 0x14, 0x39, 0x83, 0x9b, 0xfb, 0x54, 0xf9, 0x39, 0xc9, 0x14, 0x95, 0xe4, 0xf0, 0x27, 0x90, 0x18, 0x97, 0x27, 0x3c, 0xfa, 0x29, 0x5a, 0x57, 0x15, 0x1f, 0x4e, 0x91, 0x1d, 0xc1, 0x02, 0xa7, 0x7d, 0x95, 0x8b, 0x62, 0x27, 0x24, 0xc0, 0xfd, 0x3a, 0x34, 0xb3, 0xb7, 0xbe, 0xfb, 0x8b, 0x8c, 0xd0, 0x66, 0x6e, 0x81, 0x5d, 0x0c, 0x07, 0xf2, 0xec, 0xb7, 0xc4, 0xdd, 0x2f, 0x42, 0xb7, 0xf4, 0x09, 0x13, 0x12, 0xe3, 0xd7, 0xb2, 0xdf, 0x26, 0x78, 0x87, 0xe0, 0xac, 0xa7, 0x0b, 0x54, 0x1c, 0x4c, 0x1e, 0xea, 0x16, 0xb5 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.6", - /* Message to be signed */ - 10, - { 0x93, 0x29, 0xa5, 0x80, 0x90, 0xde, 0x8b, 0xe5, 0x7c, 0x42 } -, - /* Signature */ - 129, - { 0x01, 0x5c, 0xe2, 0x4a, 0x6f, 0x2b, 0x37, 0x3a, 0x19, 0x99, 0x7b, 0xb2, 0x0c, 0x18, 0xac, 0x65, 0x9f, 0x1e, 0xdc, 0x0f, 0x25, 0xc9, 0xe5, 0xbf, 0x76, 0xd5, 0x69, 0x99, 0x65, 0x20, 0xc2, 0x80, 0xef, 0xdc, 0xf1, 0x5e, 0x2d, 0x63, 0xca, 0xaf, 0xf6, 0xc7, 0x7a, 0xe0, 0x38, 0x97, 0x03, 0x7a, 0x06, 0x15, 0xf9, 0x83, 0x8c, 0x52, 0x10, 0x4e, 0x97, 0x25, 0x18, 0xe2, 0x90, 0xfa, 0xc3, 0x8f, 0x63, 0x24, 0x75, 0x30, 0xb4, 0xcf, 0x61, 0xc6, 0xec, 0xe3, 0x42, 0x9b, 0x53, 0x07, 0x81, 0xcf, 0x34, 0x96, 0x4f, 0x32, 0xae, 0x50, 0xf1, 0x09, 0x34, 0x63, 0x83, 0x86, 0xd3, 0xb4, 0xdf, 0x76, 0x1c, 0x59, 0x7d, 0x4a, 0xa7, 0xfe, 0xca, 0x26, 0x6c, 0x27, 0xf8, 0xce, 0x66, 0xad, 0xe1, 0xbe, 0x26, 0x59, 0xce, 0x14, 0x2b, 0xa5, 0xf9, 0x35, 0x88, 0x3c, 0x7e, 0x8c, 0x9b, 0x89, 0x57, 0xab, 0xf2 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.7", - /* Message to be signed */ - 211, - { 0x6a, 0xce, 0x0f, 0x1e, 0x1d, 0xc6, 0x3e, 0x39, 0x4a, 0x06, 0x1f, 0x52, 0x2a, 0x54, 0x2f, 0xbe, 0x71, 0x20, 0x25, 0x4e, 0x36, 0xe9, 0xf6, 0x5d, 0x19, 0x57, 0xc9, 0x56, 0x28, 0x78, 0x2c, 0xb0, 0x36, 0x8f, 0x3c, 0x13, 0xda, 0xd6, 0x56, 0x71, 0x79, 0xc1, 0xea, 0x24, 0xfe, 0x83, 0x5a, 0x26, 0x63, 0x85, 0xe4, 0x68, 0x83, 0x17, 0xb8, 0x2b, 0x0c, 0x3f, 0xe6, 0x3c, 0xf2, 0xd5, 0x2f, 0x04, 0xae, 0x8a, 0x38, 0xa5, 0x75, 0x59, 0xbb, 0x95, 0xd9, 0xeb, 0xd5, 0xfe, 0x8a, 0x9a, 0xfe, 0x14, 0x79, 0x90, 0x9e, 0xb9, 0x9e, 0x0d, 0x3e, 0xf3, 0xf3, 0x12, 0xe0, 0xa4, 0xab, 0xb7, 0x66, 0xc7, 0xe2, 0x13, 0x1a, 0x5f, 0xfb, 0x48, 0x31, 0x83, 0xfb, 0xb4, 0x22, 0x34, 0xd3, 0x2e, 0x58, 0x1f, 0x59, 0x50, 0x65, 0xc4, 0x89, 0x82, 0x61, 0xec, 0xd0, 0xae, 0x57, 0x2c, 0x22, 0x1c, 0x25, 0x8d, 0xe9, 0x50, 0xa4, 0x08, 0x01, 0xef, 0x79, 0x6d, 0x4d, 0xd0, 0x04, 0x06, 0x45, 0xfc, 0x53, 0x4d, 0x8e, 0x78, 0x58, 0x23, 0x48, 0x38, 0xed, 0x12, 0xc6, 0x87, 0x40, 0xc1, 0x4e, 0x37, 0x16, 0x13, 0xf0, 0x04, 0x61, 0x76, 0xbb, 0xb0, 0xf4, 0x3d, 0x99, 0x75, 0x19, 0xc4, 0x0c, 0x67, 0x14, 0x96, 0xff, 0x35, 0x0a, 0x3f, 0xdf, 0x42, 0x9c, 0xc2, 0x2f, 0x46, 0x4f, 0x43, 0x5f, 0x6b, 0x29, 0xe7, 0xe1, 0xc3, 0x0e, 0xbd, 0x50, 0x59, 0x27, 0xd4, 0xa0, 0x96, 0x58, 0x7f, 0xc3, 0x8d, 0x3d, 0x64, 0x94, 0x39, 0x1e } -, - /* Signature */ - 129, - { 0x02, 0x73, 0xba, 0x2c, 0x50, 0x2b, 0x3f, 0x29, 0x84, 0xc5, 0x48, 0xd9, 0xf7, 0xd6, 0xc9, 0xb3, 0xd7, 0xfd, 0x46, 0x08, 0x78, 0xc8, 0x4d, 0x6b, 0xe3, 0x3b, 0x28, 0x10, 0x6e, 0x15, 0xfc, 0x22, 0x17, 0xef, 0xf7, 0x41, 0xcd, 0xc2, 0x66, 0x83, 0x4b, 0xea, 0xa8, 0x6d, 0xa4, 0x05, 0xf3, 0xca, 0xe6, 0x06, 0xcc, 0x61, 0xf2, 0x54, 0x7b, 0xb9, 0x22, 0x92, 0x03, 0x45, 0xfe, 0x8f, 0xbb, 0x5e, 0x7b, 0x6a, 0xbf, 0x91, 0xea, 0xe8, 0xc4, 0x26, 0x60, 0x64, 0x50, 0x25, 0xcc, 0x7f, 0xc0, 0x7a, 0x53, 0x4b, 0x76, 0xd3, 0x78, 0x75, 0xe3, 0xf4, 0x0d, 0x52, 0x70, 0xc1, 0x0e, 0xf4, 0x6c, 0x7f, 0xe4, 0x5a, 0xfa, 0xbc, 0xff, 0xae, 0x2a, 0x9c, 0x94, 0x11, 0xbd, 0x04, 0xd6, 0x1d, 0x4c, 0x0e, 0x5f, 0xfc, 0x02, 0x2c, 0xb3, 0x6a, 0x64, 0xb7, 0xc3, 0xa8, 0xc8, 0x9b, 0xfd, 0xe4, 0x36, 0xba, 0xfd } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.8", - /* Message to be signed */ - 157, - { 0xfd, 0xcc, 0x0f, 0x1e, 0x5d, 0xcb, 0xe5, 0x01, 0x6a, 0x6b, 0x0f, 0x8c, 0x28, 0xf5, 0xb3, 0x31, 0xff, 0x58, 0x28, 0x37, 0x13, 0x8d, 0xbf, 0x62, 0xef, 0x7f, 0xf6, 0x1b, 0xc1, 0xa3, 0x53, 0x96, 0xc9, 0x2e, 0x3d, 0x54, 0x8d, 0x39, 0x9e, 0x35, 0x0a, 0x3c, 0x6b, 0xc2, 0xfd, 0xb5, 0xda, 0x94, 0xb9, 0x86, 0xa4, 0xce, 0x6d, 0xee, 0x10, 0x4e, 0x9f, 0x27, 0x4b, 0x15, 0x25, 0x58, 0xbf, 0xa7, 0x22, 0xcc, 0xfd, 0xda, 0x3b, 0x26, 0xb9, 0xf8, 0xe5, 0x15, 0x25, 0xf3, 0x81, 0x03, 0x4c, 0x51, 0xfd, 0xc9, 0xf7, 0x91, 0x2a, 0xc9, 0x27, 0xd1, 0xa7, 0x08, 0xcc, 0x2d, 0xbb, 0xcd, 0x7b, 0xa6, 0xc0, 0x31, 0xb0, 0x11, 0xcb, 0xa8, 0xe2, 0xdf, 0x8f, 0xc9, 0xb8, 0x83, 0x64, 0xee, 0x96, 0x5f, 0x24, 0x27, 0x0e, 0x43, 0x48, 0x62, 0x32, 0x53, 0xcb, 0x9e, 0x59, 0xd6, 0xf7, 0x94, 0x09, 0x09, 0x94, 0xa7, 0xa4, 0xc9, 0x30, 0x02, 0x70, 0xb5, 0x7f, 0x24, 0x39, 0xeb, 0xbb, 0xa4, 0x65, 0x84, 0x67, 0xaf, 0xdb, 0x7f, 0xe8, 0x6b, 0x4f, 0x1a, 0xad, 0x1d, 0x3d, 0x3b, 0x2f } -, - /* Signature */ - 129, - { 0x00, 0xa7, 0xc4, 0x50, 0xb3, 0x0b, 0x2e, 0xcb, 0x19, 0xbb, 0x70, 0x9a, 0x92, 0x31, 0xcb, 0xfa, 0x9f, 0x0d, 0x61, 0x69, 0x7a, 0x26, 0xb9, 0x0a, 0x96, 0xd9, 0x1c, 0x24, 0xc4, 0xda, 0x70, 0xd7, 0xb0, 0x0b, 0x59, 0x23, 0xc8, 0xe1, 0x2d, 0x41, 0x09, 0x4b, 0x70, 0x5d, 0x50, 0xc7, 0x78, 0xbb, 0xda, 0xce, 0xc6, 0x60, 0xd5, 0xc1, 0x5d, 0xff, 0xd3, 0xa2, 0x47, 0x8f, 0xd9, 0x33, 0x70, 0x80, 0xdc, 0xa1, 0x6b, 0x9c, 0x13, 0xe6, 0x23, 0x3b, 0x82, 0x92, 0xb2, 0xfd, 0xcc, 0x29, 0xe9, 0xbf, 0x3b, 0x21, 0xa7, 0x18, 0x78, 0xf3, 0x4e, 0xf5, 0xeb, 0x7c, 0xd5, 0x0a, 0xd4, 0x12, 0x03, 0x72, 0x5a, 0x0f, 0x1c, 0x66, 0x3f, 0x73, 0x42, 0xec, 0x7c, 0x3d, 0xf3, 0xd5, 0xaa, 0x51, 0xd0, 0x58, 0xdf, 0xcc, 0xce, 0x5f, 0xe6, 0x9d, 0x36, 0x3b, 0x42, 0x84, 0x32, 0x08, 0x79, 0xe8, 0x6d, 0x58, 0xb5 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.9", - /* Message to be signed */ - 92, - { 0x2d, 0x1f, 0xcd, 0x17, 0x66, 0xf7, 0xd4, 0x5f, 0x29, 0x59, 0x4f, 0x9d, 0x4f, 0x74, 0x39, 0x41, 0xae, 0x91, 0x2a, 0x97, 0x91, 0x1f, 0xfc, 0x3d, 0x65, 0xdc, 0xd9, 0x65, 0x60, 0x10, 0x77, 0x3b, 0xb0, 0x22, 0x4b, 0xa6, 0xdf, 0x11, 0x1b, 0x1c, 0x13, 0x68, 0x38, 0x4f, 0x24, 0x92, 0xfc, 0x4f, 0xa7, 0x28, 0x0c, 0x06, 0x65, 0x14, 0xae, 0x84, 0xf7, 0x61, 0x45, 0x63, 0xd9, 0x05, 0x2c, 0xa9, 0x4e, 0xf4, 0x46, 0xa3, 0x1b, 0x46, 0x3b, 0xd6, 0xc2, 0x50, 0x56, 0x80, 0x50, 0x88, 0xc1, 0xd3, 0x1a, 0xba, 0xff, 0x52, 0x15, 0xf7, 0xa8, 0xf8, 0x9e, 0x7b, 0x64, 0xf2 } -, - /* Signature */ - 129, - { 0x02, 0xc0, 0xe0, 0x71, 0xe8, 0x36, 0x90, 0xdc, 0x14, 0xd9, 0xa3, 0x7d, 0x61, 0xe0, 0xaf, 0xc2, 0x7d, 0xf9, 0x78, 0x03, 0x9d, 0xa6, 0x01, 0xca, 0x2c, 0xec, 0x1d, 0xec, 0x8f, 0x0d, 0x17, 0xd2, 0xff, 0xc4, 0x50, 0xe6, 0x78, 0x38, 0x0a, 0x02, 0x5a, 0x41, 0xc7, 0x46, 0x11, 0x8f, 0x58, 0x36, 0x42, 0x52, 0xa1, 0x22, 0x53, 0x9e, 0xcc, 0xbb, 0xb4, 0xab, 0x3d, 0x8d, 0x37, 0x7b, 0xdb, 0xb9, 0x11, 0xc5, 0x8a, 0x4c, 0xb9, 0x46, 0x2f, 0x36, 0xdc, 0x38, 0x92, 0x48, 0x50, 0x1b, 0xd0, 0x8f, 0x48, 0xe3, 0x53, 0x3b, 0x82, 0x59, 0x1a, 0x2a, 0x20, 0xcf, 0x62, 0xdf, 0x5f, 0x5a, 0x1f, 0x84, 0xea, 0x30, 0x0c, 0xb3, 0x94, 0x57, 0x13, 0x71, 0x41, 0xad, 0x8c, 0xd1, 0xd1, 0x85, 0xab, 0xb1, 0x7b, 0xa5, 0xd0, 0x3b, 0xe3, 0x48, 0xc0, 0x67, 0x97, 0xb0, 0x95, 0x58, 0xf0, 0x33, 0x1c, 0x24, 0xb9 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.10", - /* Message to be signed */ - 179, - { 0x4f, 0x46, 0x9a, 0xb7, 0x9c, 0xb8, 0x93, 0xa5, 0x3c, 0x0e, 0xe3, 0x81, 0x5a, 0x8b, 0xc0, 0x87, 0xeb, 0x74, 0xea, 0x36, 0x61, 0x5b, 0xdd, 0xc3, 0x33, 0xde, 0xe0, 0x5f, 0xc7, 0x26, 0x65, 0xaa, 0x6d, 0x0b, 0xd5, 0x9e, 0x47, 0x22, 0x98, 0x29, 0x83, 0x4b, 0x1f, 0x91, 0xc9, 0xcd, 0x81, 0xce, 0x28, 0xd6, 0x8f, 0x14, 0x82, 0x5a, 0x34, 0x5f, 0x3a, 0x4f, 0x38, 0xa0, 0x1b, 0x2d, 0xae, 0x59, 0x10, 0x07, 0x64, 0xaa, 0xb9, 0x90, 0xa8, 0x50, 0xb1, 0x1c, 0x13, 0xd5, 0xdf, 0xe4, 0x19, 0xf1, 0xd9, 0x20, 0xd0, 0x0c, 0xf1, 0x3b, 0xf4, 0x30, 0xe4, 0xca, 0x82, 0x87, 0x98, 0x9b, 0xee, 0xbe, 0xda, 0x3e, 0x5d, 0x40, 0x36, 0x02, 0x8c, 0x8e, 0xf9, 0x54, 0x6e, 0x35, 0x01, 0x50, 0xd1, 0x96, 0xf0, 0x05, 0x60, 0xba, 0xe1, 0x47, 0x22, 0x99, 0xe7, 0xf4, 0x29, 0x1d, 0x54, 0x46, 0x29, 0xc4, 0xf6, 0x52, 0xe3, 0x5c, 0xde, 0x4f, 0x80, 0x3e, 0x1b, 0x3c, 0xa3, 0x38, 0x09, 0x51, 0x5e, 0xf2, 0x3d, 0x25, 0x4b, 0x8e, 0x65, 0x20, 0x2a, 0x14, 0xa4, 0x11, 0xb1, 0xbc, 0x31, 0x5c, 0x5f, 0xfa, 0xec, 0xb8, 0x21, 0x11, 0x97, 0x80, 0x9d, 0xcb, 0x5c, 0xed, 0x68, 0x2c, 0x09, 0xf6, 0x7e, 0x41, 0xd1, 0x60, 0x2c } -, - /* Signature */ - 129, - { 0x01, 0x71, 0x29, 0x64, 0xea, 0x9a, 0xb9, 0x70, 0x29, 0x5b, 0x81, 0xb0, 0xfb, 0xd8, 0x35, 0x7e, 0x54, 0xb9, 0x36, 0xee, 0x87, 0x72, 0xd8, 0xae, 0x9c, 0x96, 0x12, 0x71, 0x6f, 0xcc, 0x2f, 0xcb, 0x78, 0x4c, 0xa9, 0xab, 0xee, 0xeb, 0xb8, 0xfc, 0xb6, 0x89, 0x82, 0x16, 0x1c, 0xc7, 0x4e, 0x40, 0xc7, 0xc0, 0x22, 0x47, 0xc0, 0xd0, 0x0e, 0x03, 0xbc, 0x8e, 0x1a, 0x70, 0x51, 0xb8, 0x7c, 0x90, 0xdd, 0x7d, 0x3d, 0xfc, 0x95, 0xe0, 0xb3, 0xc8, 0x8e, 0x7a, 0x0f, 0x37, 0xf3, 0x0e, 0x1b, 0xd5, 0xfe, 0x8b, 0x6e, 0xee, 0x46, 0x5a, 0x0b, 0x34, 0xcb, 0x59, 0xc6, 0x4e, 0xbd, 0xb5, 0x7d, 0x6f, 0x5f, 0xdf, 0xf2, 0xe7, 0x0b, 0xb1, 0x9c, 0x60, 0xd9, 0x88, 0xea, 0x95, 0x6c, 0xdc, 0xdd, 0x1b, 0xe5, 0x62, 0xf2, 0x6f, 0xb3, 0x7c, 0x34, 0xda, 0x52, 0xa9, 0xf9, 0x11, 0xb9, 0x97, 0x43, 0x81, 0x2c } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.11", - /* Message to be signed */ - 35, - { 0x52, 0xbb, 0x76, 0xc9, 0xea, 0x26, 0x5d, 0x6f, 0xad, 0x10, 0x83, 0x72, 0xff, 0xab, 0x25, 0x03, 0xbb, 0x20, 0xd3, 0x8d, 0x37, 0xdf, 0x19, 0x92, 0x54, 0xa2, 0xf6, 0xde, 0x0c, 0x4f, 0xca, 0x7a, 0x73, 0x03, 0x36 } -, - /* Signature */ - 129, - { 0x01, 0x0c, 0x55, 0x34, 0x23, 0x60, 0x22, 0x60, 0x15, 0x8a, 0x17, 0x13, 0x3b, 0x5d, 0x30, 0xef, 0xe9, 0x8e, 0x9a, 0xeb, 0x35, 0x3b, 0xab, 0x33, 0x71, 0xe4, 0x91, 0xcd, 0xbe, 0xbd, 0x35, 0x0a, 0x0a, 0x47, 0x0b, 0x9d, 0xbf, 0xd1, 0x89, 0x33, 0x51, 0x1f, 0x0d, 0x0e, 0x36, 0x94, 0xa8, 0xac, 0x4b, 0xf3, 0xf5, 0xb6, 0xeb, 0x9b, 0xf7, 0x1c, 0x23, 0xd9, 0x4c, 0x2e, 0x64, 0xbe, 0xb7, 0xb7, 0xc7, 0x22, 0x52, 0xca, 0x82, 0x7b, 0xd0, 0xc0, 0x56, 0x7b, 0xa8, 0xa1, 0x0a, 0x6d, 0x3b, 0x7e, 0x18, 0x7b, 0x0f, 0xd8, 0xe9, 0xe9, 0x5d, 0x4f, 0xe4, 0x80, 0xf2, 0x50, 0xdc, 0x7f, 0x03, 0x42, 0x29, 0x0e, 0x9a, 0x7d, 0x32, 0x70, 0x3a, 0x72, 0x13, 0xc6, 0x52, 0x13, 0xad, 0xed, 0x45, 0x57, 0x54, 0x78, 0x1f, 0x3d, 0xb7, 0x3e, 0x79, 0xe3, 0xd1, 0xba, 0x6a, 0xf7, 0xf6, 0x90, 0xfe, 0x81, 0x73 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.12", - /* Message to be signed */ - 72, - { 0x5f, 0x59, 0x7a, 0x19, 0xcb, 0xf5, 0x14, 0x30, 0xd3, 0xc6, 0xa2, 0x47, 0xa5, 0x23, 0x54, 0x07, 0x38, 0x6c, 0xae, 0xd0, 0xa2, 0x94, 0xf3, 0xf4, 0x1f, 0x3f, 0x37, 0x82, 0x50, 0xd4, 0xc5, 0xa2, 0xc9, 0x92, 0x75, 0xf9, 0x55, 0x44, 0xcc, 0xc1, 0xd7, 0x7e, 0x5c, 0x15, 0x1a, 0xf1, 0x3e, 0xd6, 0x0b, 0xe5, 0x22, 0xeb, 0x8c, 0xab, 0xed, 0x89, 0xa9, 0xb4, 0x5b, 0x09, 0x65, 0x46, 0x00, 0xf9, 0xfc, 0x75, 0x1e, 0x8b, 0x12, 0xe6, 0x7e, 0x52 } -, - /* Signature */ - 129, - { 0x00, 0x3b, 0xd4, 0xaa, 0x90, 0x81, 0xfe, 0x7e, 0x9f, 0x69, 0xa2, 0x69, 0xfe, 0xc8, 0xc8, 0xa7, 0x36, 0x70, 0xc0, 0x37, 0xe8, 0x5a, 0x1f, 0x36, 0xfc, 0xad, 0x74, 0xe5, 0xb5, 0x2d, 0x71, 0x0a, 0x5a, 0x18, 0xba, 0x09, 0x5b, 0x98, 0x10, 0xcc, 0x69, 0x37, 0xbc, 0x76, 0x34, 0x09, 0x51, 0xe7, 0xfe, 0xd7, 0x5b, 0x32, 0x6d, 0x0a, 0x3b, 0x0f, 0x26, 0xc2, 0x9c, 0xd5, 0xeb, 0x64, 0x15, 0xbb, 0xf7, 0xe2, 0xdd, 0x60, 0xad, 0xf6, 0xa0, 0xe6, 0x13, 0x02, 0xdc, 0xc6, 0x60, 0xcc, 0xe9, 0x10, 0x40, 0x8b, 0x4f, 0x99, 0xa4, 0x40, 0xae, 0x2a, 0xd6, 0xc3, 0x07, 0x72, 0xc2, 0x9a, 0x9e, 0x7b, 0x32, 0x80, 0xe2, 0xe2, 0x93, 0x9a, 0xba, 0x0b, 0x54, 0xab, 0x02, 0x2a, 0xa3, 0x29, 0x50, 0x22, 0x71, 0x8c, 0xd3, 0xb7, 0x87, 0xb1, 0x13, 0x79, 0x90, 0xfb, 0xeb, 0xef, 0xac, 0xec, 0x8c, 0xb7, 0x49 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.13", - /* Message to be signed */ - 36, - { 0x84, 0x0c, 0xc9, 0x00, 0xcb, 0x4b, 0x2c, 0xb6, 0x7a, 0x30, 0x4a, 0x9b, 0x02, 0x82, 0x6d, 0xb0, 0xd6, 0x67, 0x36, 0x92, 0x2e, 0x78, 0x70, 0x13, 0xd6, 0xbf, 0x21, 0x4d, 0xf5, 0x79, 0xff, 0x0c, 0xf4, 0x82, 0x1f, 0x9b } -, - /* Signature */ - 129, - { 0x01, 0x3b, 0x6c, 0x08, 0x0f, 0x68, 0x93, 0x95, 0x05, 0xe1, 0x87, 0xa4, 0x94, 0x82, 0xc7, 0x91, 0x27, 0x8d, 0xa3, 0xad, 0x4a, 0x74, 0x7c, 0x4f, 0x01, 0x79, 0x1b, 0x92, 0x48, 0x05, 0xb6, 0x82, 0xf6, 0x49, 0xbb, 0xd8, 0x0d, 0xba, 0x12, 0xfb, 0xbe, 0x59, 0x40, 0xf1, 0x7f, 0x27, 0xe7, 0x5d, 0x42, 0x67, 0x7c, 0x4c, 0xcc, 0xdf, 0xfd, 0x00, 0x48, 0x77, 0x2e, 0x36, 0x93, 0x4c, 0x69, 0x12, 0x12, 0x8f, 0xf9, 0x03, 0xaf, 0xea, 0x5e, 0x1c, 0xa8, 0xfe, 0x94, 0x24, 0xfc, 0x97, 0x9b, 0x21, 0x87, 0x98, 0x76, 0x98, 0xa5, 0xc5, 0xa7, 0x5e, 0x7d, 0x70, 0x70, 0xa2, 0xa6, 0x74, 0x85, 0x2b, 0xd8, 0x05, 0xbf, 0x13, 0xbb, 0xd1, 0x29, 0x6b, 0xff, 0x13, 0x10, 0xa6, 0xd6, 0xed, 0x45, 0xfd, 0xf8, 0x67, 0x2d, 0x52, 0x41, 0xe7, 0x4c, 0xd4, 0xc4, 0x19, 0x86, 0xe4, 0x36, 0x25, 0x50, 0x0c, 0x23 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.14", - /* Message to be signed */ - 216, - { 0xc6, 0x41, 0x71, 0x94, 0x13, 0x3b, 0x5f, 0x8e, 0xa6, 0x3d, 0x95, 0x58, 0x1c, 0x89, 0x6f, 0x5b, 0x9e, 0xf3, 0xd8, 0x7c, 0xf6, 0x6c, 0x02, 0x91, 0x64, 0x0f, 0x35, 0x0a, 0x32, 0x5b, 0x49, 0x11, 0x52, 0xe9, 0xd1, 0x43, 0x0d, 0x68, 0x70, 0x34, 0x6e, 0x46, 0x8e, 0x71, 0x99, 0x45, 0xd4, 0xe3, 0x65, 0xd0, 0x01, 0x07, 0x5f, 0xa9, 0x70, 0xf2, 0xa9, 0x87, 0x0a, 0x1c, 0x65, 0x43, 0x4b, 0xa1, 0x70, 0x02, 0x41, 0x2a, 0xcc, 0x4c, 0xc7, 0x4d, 0x28, 0xb2, 0xde, 0xe2, 0x9b, 0x36, 0xe3, 0x97, 0xb6, 0x8c, 0x5d, 0x59, 0xcf, 0x67, 0x7c, 0x29, 0xae, 0xe7, 0x93, 0xa9, 0x30, 0x0b, 0x7b, 0xf4, 0xc6, 0x73, 0xb3, 0xe0, 0xb6, 0x03, 0xa3, 0x61, 0x1c, 0xa9, 0x02, 0x44, 0xff, 0x08, 0x78, 0x75, 0xc5, 0x16, 0x88, 0x57, 0xcb, 0x92, 0xa9, 0x5a, 0xaa, 0x61, 0xdf, 0xf3, 0xc2, 0x12, 0xdc, 0x62, 0x06, 0xf1, 0x71, 0x47, 0xc4, 0x4b, 0x95, 0x07, 0xd5, 0xc8, 0x90, 0x75, 0x8b, 0xb3, 0x5b, 0xb7, 0x2a, 0x2a, 0x5e, 0x9d, 0x4d, 0xb2, 0x65, 0xe5, 0x37, 0x3a, 0x5b, 0x34, 0x02, 0x90, 0x4f, 0x0f, 0x1a, 0x12, 0x05, 0xd5, 0xbc, 0xc5, 0x90, 0x25, 0xd3, 0x22, 0x0a, 0x5d, 0xe1, 0xb1, 0x82, 0xa8, 0x4d, 0x30, 0x41, 0x2b, 0x84, 0x26, 0xd4, 0x69, 0x32, 0x32, 0x1b, 0x57, 0xef, 0x72, 0x64, 0x0a, 0xdd, 0x2c, 0xee, 0xbf, 0x5b, 0xe9, 0x68, 0x43, 0x6b, 0xcd, 0x12, 0x16, 0x90, 0x78, 0x84, 0x82, 0x32, 0x93, 0xb0, 0x10, 0xec, 0x28, 0xf0, 0xd9 } -, - /* Signature */ - 129, - { 0x01, 0x60, 0x47, 0xca, 0xad, 0x6c, 0x47, 0xbf, 0x27, 0xd0, 0xcc, 0xfa, 0x03, 0x41, 0x01, 0x7e, 0x56, 0x5e, 0x02, 0x8c, 0xf2, 0x6c, 0x8e, 0x66, 0x0f, 0x79, 0xe0, 0x91, 0xf3, 0x50, 0xce, 0xb2, 0xaa, 0xcf, 0x92, 0xf7, 0xd0, 0x1d, 0x37, 0x3f, 0x71, 0x55, 0x11, 0x9c, 0x07, 0x29, 0x17, 0xf2, 0x4f, 0x01, 0xbf, 0x74, 0x7b, 0xe2, 0xdc, 0xdc, 0x41, 0xd1, 0xbe, 0x58, 0x85, 0x35, 0xc2, 0xd6, 0xac, 0x17, 0x04, 0xc5, 0xfb, 0x16, 0xf6, 0xe5, 0xdc, 0x4b, 0xbc, 0x84, 0x53, 0xf5, 0x21, 0xdb, 0x73, 0x1e, 0xba, 0x78, 0x98, 0xe6, 0xe5, 0x21, 0x2b, 0x80, 0xce, 0x9d, 0xa0, 0xf1, 0x56, 0x28, 0x18, 0x99, 0x98, 0x31, 0x35, 0x03, 0xdf, 0xd4, 0x4e, 0x3d, 0x69, 0xde, 0x9b, 0xa9, 0xcb, 0x5e, 0xb3, 0x2a, 0xc4, 0x1c, 0xb8, 0xe3, 0x62, 0x1b, 0xa1, 0xd2, 0x91, 0xd0, 0xc5, 0xda, 0x24, 0x9f, 0x15 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.15", - /* Message to be signed */ - 15, - { 0xa6, 0x42, 0xf0, 0xf7, 0x0b, 0x4b, 0xd3, 0xb5, 0x4b, 0xe2, 0x20, 0x11, 0x9a, 0x7f, 0x79 } -, - /* Signature */ - 129, - { 0x00, 0xa0, 0x33, 0x6e, 0x63, 0x67, 0x52, 0x7b, 0xbf, 0x13, 0xb0, 0xa9, 0x33, 0xb6, 0x31, 0xc7, 0x2c, 0xb3, 0x3e, 0xab, 0xbc, 0x29, 0x2a, 0x0f, 0x8f, 0x75, 0x55, 0x0c, 0x22, 0x30, 0xfe, 0x82, 0x57, 0xf2, 0xaf, 0x76, 0xd5, 0x43, 0xcc, 0xd1, 0x07, 0xdd, 0x2c, 0x87, 0x78, 0xd3, 0xac, 0x8a, 0x7b, 0x5b, 0xb4, 0xac, 0xfa, 0x57, 0xf2, 0xaf, 0x6a, 0x23, 0x14, 0x95, 0x23, 0x5a, 0x51, 0xda, 0xdd, 0xb0, 0x83, 0xe3, 0x73, 0xb7, 0x77, 0xa9, 0x5c, 0xf9, 0xc4, 0xa9, 0xb6, 0xbe, 0x77, 0x51, 0xb6, 0x5f, 0xeb, 0x62, 0x3a, 0xb3, 0x34, 0x43, 0x36, 0x54, 0xb1, 0x21, 0x0f, 0x7f, 0x78, 0x2b, 0x17, 0x25, 0xc6, 0xba, 0x4f, 0xfd, 0x20, 0xd1, 0x7e, 0xd4, 0xb6, 0xec, 0x4a, 0x3a, 0xf6, 0x4b, 0xd2, 0x73, 0x47, 0x55, 0xb7, 0x73, 0x9e, 0xeb, 0xf4, 0x18, 0xf0, 0x9d, 0x3a, 0xff, 0x28, 0x9d, 0x13 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.16", - /* Message to be signed */ - 230, - { 0xca, 0x16, 0xe4, 0x3d, 0x9c, 0x82, 0xd9, 0xd3, 0x0c, 0x8f, 0xcb, 0x40, 0x22, 0x93, 0x3c, 0xff, 0xc7, 0xd7, 0x4c, 0xaa, 0x0d, 0xf4, 0x86, 0x35, 0x09, 0x31, 0x8e, 0xda, 0xba, 0x4e, 0x0d, 0x51, 0x99, 0x77, 0x9c, 0x03, 0x50, 0x4a, 0xff, 0xa2, 0x7d, 0x87, 0x19, 0x1b, 0x6b, 0xf6, 0x86, 0xa8, 0x4d, 0x97, 0x9a, 0x2f, 0xdd, 0x5b, 0x8a, 0x4c, 0x49, 0x32, 0x14, 0x45, 0xc6, 0xf7, 0x5d, 0x25, 0x23, 0x59, 0x17, 0xad, 0xbe, 0xe2, 0xa5, 0xcf, 0xf8, 0xa9, 0x7a, 0xef, 0x78, 0xc0, 0x09, 0x22, 0x10, 0x11, 0xd8, 0x3c, 0x0f, 0x9d, 0x37, 0x16, 0x08, 0x75, 0xaf, 0x73, 0x67, 0x71, 0x8b, 0x10, 0xee, 0xc3, 0xb4, 0x29, 0x90, 0xe6, 0x43, 0xf6, 0x37, 0x07, 0xcf, 0xbb, 0x30, 0xa7, 0xfa, 0x74, 0xab, 0x16, 0xa7, 0xeb, 0xf1, 0xc8, 0x38, 0xc3, 0xb2, 0x26, 0x37, 0xb6, 0x3c, 0xcd, 0xcb, 0x6e, 0xb3, 0x4c, 0x62, 0xeb, 0xa9, 0xe9, 0x48, 0xc7, 0xac, 0x90, 0x30, 0xf0, 0x63, 0x77, 0x29, 0xd3, 0xe2, 0x78, 0x0a, 0xe6, 0xbe, 0x4d, 0x2f, 0xaf, 0x34, 0x6c, 0x11, 0x63, 0xd3, 0xf9, 0x82, 0x48, 0x19, 0x3a, 0x76, 0x39, 0x9f, 0xb7, 0x84, 0xca, 0xcf, 0x68, 0xfb, 0x33, 0xc7, 0x4b, 0xab, 0xc9, 0xdd, 0xb6, 0x27, 0x52, 0x0c, 0x0c, 0x61, 0x12, 0x34, 0x64, 0x68, 0xcf, 0x20, 0xa8, 0xe0, 0x2c, 0xc9, 0xa9, 0xbd, 0x27, 0x91, 0x0e, 0x83, 0x29, 0x7b, 0x85, 0xe8, 0x57, 0x32, 0x4a, 0x01, 0x00, 0xf5, 0xcd, 0xd5, 0x93, 0x1b, 0x6a, 0x6d, 0xe0, 0x5f, 0x94, 0x83, 0x3a, 0xa8, 0x61, 0x0a, 0x3a, 0x4b, 0x08, 0xa5, 0xa3, 0x93, 0x53 } -, - /* Signature */ - 129, - { 0x02, 0x48, 0x59, 0x23, 0x3f, 0xb9, 0xdb, 0x7c, 0xd1, 0x41, 0xf4, 0xb8, 0x77, 0x6a, 0x1d, 0x83, 0xe1, 0x03, 0xdb, 0x3a, 0xc9, 0x42, 0x89, 0xd3, 0x6e, 0xf4, 0x0f, 0x5e, 0x6e, 0x63, 0xc3, 0x12, 0x12, 0xaf, 0xdd, 0xdd, 0x16, 0x88, 0xc2, 0xc1, 0xc8, 0xd4, 0xdb, 0x04, 0x71, 0x9e, 0x1c, 0x6e, 0x8d, 0xbf, 0x7d, 0x60, 0xbe, 0x25, 0xf1, 0xd6, 0x88, 0x87, 0xfd, 0xad, 0xda, 0x3d, 0x11, 0x2e, 0x3d, 0x0d, 0x24, 0xc0, 0xcd, 0xd7, 0x98, 0x8a, 0x55, 0xc7, 0x10, 0x29, 0x40, 0x08, 0x2d, 0x1a, 0xc3, 0x1f, 0xb3, 0xef, 0xab, 0xe7, 0xc2, 0x88, 0xcb, 0x4e, 0xe7, 0x2a, 0x99, 0x2a, 0xc9, 0x6d, 0x1e, 0xdd, 0x78, 0xec, 0x72, 0x82, 0x73, 0x97, 0x0a, 0x79, 0x69, 0x95, 0xc3, 0xe2, 0xa3, 0x85, 0x81, 0xe2, 0x28, 0x03, 0x25, 0x8e, 0xb4, 0xcd, 0x9d, 0xa2, 0x04, 0x0f, 0xaf, 0x74, 0x1c, 0x54, 0x2a } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.17", - /* Message to be signed */ - 162, - { 0x3b, 0xaa, 0x7e, 0x9a, 0xda, 0x21, 0x43, 0xf8, 0x48, 0x82, 0x5d, 0x22, 0x93, 0x67, 0x04, 0xd1, 0xc9, 0x97, 0xb2, 0xda, 0x76, 0x76, 0x9c, 0x98, 0x6f, 0xa1, 0x52, 0xb8, 0x98, 0xae, 0xb1, 0x1c, 0x10, 0xb9, 0x45, 0x79, 0x76, 0x4f, 0x9d, 0xc9, 0x33, 0x65, 0x2a, 0x81, 0x03, 0x67, 0x04, 0x76, 0x95, 0x8d, 0x59, 0x86, 0x7a, 0xb2, 0x4a, 0x97, 0x12, 0x84, 0x05, 0x6e, 0x99, 0xc6, 0x48, 0xb7, 0x7e, 0x7a, 0x65, 0x36, 0x44, 0x87, 0x0f, 0xe4, 0xc7, 0xce, 0xf3, 0x7f, 0x90, 0x01, 0x60, 0x48, 0x72, 0xad, 0xed, 0xe1, 0x6a, 0xac, 0xed, 0x8a, 0xa5, 0xdf, 0x42, 0x05, 0x33, 0x04, 0xe4, 0xd1, 0x71, 0x12, 0x0d, 0x7a, 0xb3, 0xce, 0x81, 0xa4, 0xd1, 0xa2, 0x74, 0x98, 0xd1, 0x38, 0x01, 0x8f, 0x66, 0x21, 0xbd, 0xfc, 0x1d, 0x53, 0xe7, 0xf3, 0xc1, 0xa5, 0xaa, 0x5d, 0x62, 0xb0, 0x9a, 0x55, 0x4a, 0x56, 0xf1, 0xed, 0x4f, 0x38, 0x5a, 0x07, 0x68, 0xea, 0xa2, 0xda, 0x0c, 0x9f, 0x56, 0x37, 0x03, 0x4c, 0x2e, 0xef, 0x58, 0xcc, 0x35, 0x17, 0x8b, 0xc2, 0xa6, 0x27, 0x2c, 0xf5, 0x29, 0xb6, 0x5a, 0xdf } -, - /* Signature */ - 129, - { 0x01, 0xe6, 0x3b, 0x86, 0xd0, 0xc1, 0x59, 0x99, 0x09, 0x3d, 0x44, 0x28, 0xaf, 0x7c, 0x6d, 0xe6, 0x48, 0x07, 0x45, 0xd8, 0x19, 0xe4, 0x29, 0x62, 0x3f, 0x47, 0x2b, 0x45, 0xde, 0x61, 0xaa, 0x56, 0x7b, 0x60, 0xd9, 0x94, 0x79, 0x2a, 0x0d, 0x11, 0x65, 0x80, 0x55, 0x98, 0xf4, 0xe2, 0x1f, 0xe6, 0x13, 0x99, 0x9a, 0x96, 0x22, 0x5d, 0x0b, 0xba, 0x98, 0xf9, 0xcf, 0xbe, 0xe8, 0x3a, 0xf5, 0x85, 0xfa, 0x07, 0x84, 0x39, 0xa7, 0x42, 0x51, 0x5a, 0xe2, 0x18, 0xec, 0x31, 0xf8, 0xd5, 0x08, 0xf2, 0x9b, 0x0e, 0x58, 0x75, 0xfc, 0xa8, 0xf0, 0x4f, 0x11, 0xa1, 0xc8, 0x2f, 0x2b, 0xb0, 0xae, 0x52, 0x8f, 0xda, 0xd3, 0xca, 0x50, 0x75, 0xbb, 0x3f, 0x41, 0xbb, 0x57, 0x83, 0x34, 0x81, 0x33, 0xfb, 0xa8, 0xa0, 0xb3, 0xad, 0x95, 0x1a, 0x1a, 0x64, 0x9c, 0xa0, 0xf9, 0x75, 0x8b, 0x20, 0xc8, 0x70, 0xfd } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.18", - /* Message to be signed */ - 184, - { 0x7e, 0xb3, 0xc9, 0x8e, 0x46, 0xfd, 0x1b, 0x5c, 0x9f, 0xf1, 0xb1, 0x1b, 0xe1, 0x61, 0x9b, 0x56, 0x60, 0x57, 0xf2, 0x6c, 0x55, 0xe2, 0x88, 0xf4, 0x84, 0x4c, 0xcd, 0x50, 0xba, 0xa9, 0x1b, 0x03, 0x8d, 0x60, 0x95, 0x83, 0x6f, 0x77, 0x1f, 0xc1, 0xc4, 0x25, 0xfb, 0x53, 0x3e, 0xf2, 0xb1, 0xdc, 0x4a, 0x3e, 0x94, 0x9b, 0xb9, 0x95, 0x25, 0xc2, 0x8f, 0xe8, 0xa3, 0xe9, 0x31, 0x78, 0xf3, 0xa0, 0xac, 0x97, 0xfd, 0x5d, 0xaa, 0x81, 0xb5, 0x92, 0x86, 0x18, 0x8e, 0x17, 0xb4, 0x4b, 0x37, 0x71, 0xbc, 0xa8, 0x55, 0xd8, 0x5f, 0x3c, 0x4d, 0x28, 0x6f, 0x10, 0x68, 0x10, 0xf4, 0xe5, 0x22, 0xea, 0x05, 0x83, 0x4f, 0x11, 0xa3, 0x1e, 0x89, 0xc3, 0x59, 0x90, 0xc5, 0x1b, 0x08, 0x0c, 0x03, 0xa6, 0x61, 0xe3, 0xd4, 0xa1, 0xb9, 0x7a, 0x2c, 0x27, 0x94, 0x0f, 0x5b, 0x2e, 0x41, 0x2b, 0x69, 0x9e, 0xa6, 0x10, 0xe8, 0x99, 0x6a, 0xe6, 0x71, 0x5a, 0xb6, 0xe2, 0x09, 0x69, 0xb6, 0xaa, 0x54, 0xcc, 0x72, 0x31, 0x9d, 0xfe, 0xe6, 0x3b, 0xd2, 0xca, 0xcf, 0xd0, 0x60, 0x8d, 0x40, 0xe2, 0xb4, 0x03, 0x95, 0xfe, 0x55, 0xdd, 0xa5, 0xbe, 0xa3, 0xb0, 0xf9, 0xb9, 0x4b, 0x5a, 0xad, 0xc0, 0x98, 0xdd, 0x56, 0x8d, 0xa3, 0x95, 0xdb, 0x2d, 0x44, 0xe4 } -, - /* Signature */ - 129, - { 0x01, 0x5c, 0xfa, 0xd9, 0x6e, 0x4b, 0x57, 0xd9, 0xcb, 0xb5, 0x78, 0xc7, 0x90, 0x74, 0xa2, 0xba, 0x86, 0x9c, 0x06, 0x02, 0x88, 0x68, 0xc5, 0xa3, 0xfc, 0xf4, 0xa5, 0xe3, 0x61, 0x83, 0x1b, 0xd8, 0xc0, 0x2c, 0x25, 0xb1, 0x2b, 0x90, 0x23, 0x4c, 0x8e, 0xa4, 0x82, 0x2f, 0xb6, 0x5e, 0x82, 0xd0, 0x91, 0xa9, 0x0f, 0x89, 0xb6, 0xc1, 0x15, 0x6e, 0x4b, 0x44, 0xd7, 0x8d, 0x32, 0xa6, 0x47, 0x37, 0xd6, 0x15, 0x87, 0xc0, 0xce, 0x3f, 0x4b, 0x34, 0x3e, 0x71, 0xf8, 0xf7, 0xa8, 0x4c, 0x6f, 0x8f, 0xc8, 0xae, 0xf8, 0xf4, 0x64, 0xc8, 0xb3, 0x59, 0xe4, 0xfb, 0x18, 0xad, 0xc6, 0x99, 0xc5, 0xa0, 0x76, 0x45, 0x37, 0x55, 0x93, 0x0c, 0x5f, 0x6f, 0xa7, 0x07, 0x1f, 0x8f, 0xec, 0xb8, 0x63, 0x1a, 0xa4, 0x14, 0xf5, 0x08, 0x35, 0x03, 0x8b, 0xe7, 0xab, 0x05, 0xa4, 0xb0, 0x50, 0xf3, 0xf5, 0x6e, 0x86 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.19", - /* Message to be signed */ - 184, - { 0x6a, 0x45, 0xee, 0x0b, 0x7e, 0xa8, 0x03, 0x68, 0xb2, 0xc4, 0x29, 0xaf, 0x28, 0x81, 0x53, 0xf4, 0x56, 0xcc, 0x66, 0x32, 0x17, 0xa8, 0xff, 0xcd, 0x2a, 0xa0, 0x5c, 0x5d, 0x32, 0x2d, 0xb7, 0x57, 0x56, 0xcd, 0xbc, 0x0f, 0x68, 0x41, 0x41, 0xfe, 0x6b, 0xca, 0xe1, 0x89, 0xbf, 0x24, 0xde, 0x1c, 0x8e, 0xdd, 0x5b, 0x11, 0x36, 0x44, 0xa4, 0x50, 0x0d, 0x0d, 0x4f, 0xf5, 0x80, 0x08, 0x36, 0x40, 0xe1, 0x2a, 0x2c, 0x95, 0xde, 0x69, 0xe9, 0x59, 0x6b, 0xfb, 0x1d, 0x44, 0x36, 0x57, 0x86, 0xe1, 0x67, 0xd0, 0x25, 0xd8, 0x9e, 0xa2, 0xf8, 0xd1, 0x3a, 0x0e, 0x64, 0x77, 0xf1, 0x3b, 0x85, 0xbb, 0xdc, 0xf1, 0x60, 0x77, 0x4b, 0x18, 0x25, 0x8c, 0xa0, 0xbe, 0xc0, 0xbd, 0x7b, 0xf1, 0x39, 0x11, 0xb3, 0x89, 0x6b, 0x48, 0x89, 0xfa, 0x3d, 0xe0, 0x4a, 0xb2, 0x6b, 0xd6, 0x82, 0xb4, 0xab, 0x43, 0x7c, 0x0c, 0x17, 0xf3, 0x53, 0xa2, 0x3a, 0x43, 0xe9, 0x2e, 0x20, 0xe7, 0xf8, 0x20, 0x69, 0x4e, 0x40, 0x3a, 0xab, 0xdd, 0x5d, 0x19, 0x6e, 0x93, 0x89, 0x5b, 0x47, 0x92, 0x55, 0xdf, 0x40, 0x30, 0xad, 0x8c, 0xe3, 0xa5, 0x3d, 0x15, 0x73, 0xbe, 0x22, 0x6d, 0x81, 0xaa, 0x18, 0xe4, 0x85, 0x89, 0x57, 0xa2, 0xd0, 0xa3, 0x35, 0x9c, 0x2e, 0x7a } -, - /* Signature */ - 129, - { 0x01, 0x64, 0xf0, 0xdb, 0xcd, 0xd9, 0x52, 0x11, 0x86, 0xa2, 0x80, 0x84, 0xa3, 0xf3, 0xae, 0x6a, 0xac, 0xb6, 0x59, 0x6b, 0x85, 0x6e, 0x8a, 0xab, 0x2e, 0x72, 0xa7, 0xf2, 0x33, 0xd6, 0x2d, 0x2d, 0x3e, 0xf1, 0x96, 0xd3, 0x78, 0x7e, 0x4b, 0x04, 0x57, 0x31, 0xda, 0x9c, 0x61, 0x50, 0xad, 0x9d, 0x5f, 0x91, 0x8c, 0x6b, 0x06, 0xc9, 0x2a, 0x11, 0xa0, 0xbf, 0xd5, 0xef, 0xcc, 0xb7, 0xb0, 0x3a, 0x01, 0x07, 0x24, 0x14, 0x39, 0xd3, 0x4d, 0x31, 0x3d, 0x35, 0xb3, 0x6a, 0x0d, 0x8c, 0xa0, 0x81, 0x3c, 0x36, 0x23, 0xb2, 0xbd, 0x78, 0xf2, 0xe3, 0xa9, 0x71, 0x99, 0x64, 0x8d, 0xa3, 0x58, 0x06, 0xff, 0xc5, 0x8e, 0xed, 0x33, 0xac, 0x9f, 0xcf, 0x79, 0x53, 0x8f, 0xa8, 0x89, 0x15, 0xb1, 0xa5, 0x75, 0x85, 0x78, 0xb9, 0xa2, 0xdb, 0x01, 0x38, 0x04, 0xbf, 0x32, 0xe7, 0xa5, 0x6d, 0xc7, 0x24, 0x37 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 8.20", - /* Message to be signed */ - 79, - { 0x92, 0xa4, 0xb4, 0xbc, 0xe3, 0xda, 0xa0, 0xa7, 0xa6, 0x4b, 0x72, 0xad, 0x87, 0x1f, 0x3a, 0xa8, 0xea, 0xb5, 0xac, 0x40, 0x11, 0xaa, 0xae, 0xa2, 0xce, 0xeb, 0xa8, 0x92, 0x77, 0xc6, 0x43, 0x29, 0x57, 0x26, 0x26, 0xc9, 0x56, 0x88, 0x4f, 0x48, 0x54, 0xf8, 0x61, 0x3d, 0x22, 0x51, 0x8b, 0x14, 0xf0, 0x38, 0xfc, 0xaf, 0x9e, 0x68, 0xe1, 0x30, 0x02, 0xfb, 0x0a, 0x00, 0xa7, 0x8c, 0xc2, 0xea, 0x51, 0x44, 0xfc, 0x13, 0x11, 0x76, 0xd5, 0xe5, 0xd6, 0x7e, 0x10, 0x6a, 0x99, 0x87, 0x9c } -, - /* Signature */ - 129, - { 0x01, 0x24, 0xfd, 0x8b, 0x2a, 0xcf, 0x22, 0x37, 0xfc, 0x71, 0xa2, 0xee, 0x97, 0xe2, 0x6a, 0x4d, 0xab, 0x7d, 0xea, 0x82, 0x9e, 0x15, 0xbe, 0xb2, 0xf8, 0xa7, 0x37, 0x91, 0xa0, 0xba, 0x15, 0x2d, 0xa5, 0xb0, 0x6a, 0xdf, 0x34, 0x1d, 0x74, 0x09, 0xe8, 0xd3, 0xd3, 0x17, 0x5b, 0x51, 0x01, 0x34, 0x32, 0x5a, 0x35, 0x32, 0x97, 0xa8, 0xd6, 0xd6, 0x6c, 0x09, 0x70, 0x03, 0x22, 0xee, 0xc5, 0xe3, 0x3f, 0x62, 0x48, 0x6a, 0x21, 0x11, 0x30, 0xd7, 0x4c, 0x70, 0xdd, 0x92, 0x5d, 0xf8, 0x60, 0x2a, 0xe3, 0xc4, 0xc6, 0xcc, 0xaf, 0x93, 0xcc, 0x9a, 0x97, 0x0d, 0x1e, 0x85, 0x32, 0x60, 0xee, 0xc6, 0x94, 0x81, 0xc5, 0xf1, 0x33, 0x7e, 0x9d, 0xd3, 0xae, 0xda, 0x88, 0xd8, 0x82, 0x99, 0xbe, 0x08, 0x09, 0x5b, 0x71, 0x5a, 0x5b, 0x21, 0x66, 0xe6, 0x17, 0xc9, 0x26, 0x72, 0x2c, 0xed, 0xd6, 0xef, 0x34 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 9: A 1027-bit RSA key pair", -{ - /* Modulus */ - 129, - { 0x05, 0xf3, 0x74, 0x34, 0x88, 0x26, 0x1c, 0x6f, 0x06, 0x25, 0xe4, 0x32, 0xfa, 0x6e, 0xb8, 0x7f, 0xb1, 0x2b, 0x26, 0x21, 0x82, 0x90, 0xbf, 0xe3, 0x96, 0xba, 0x76, 0xea, 0x42, 0x61, 0x32, 0x2f, 0x81, 0x43, 0xe4, 0xb4, 0xeb, 0xcd, 0x5d, 0x2a, 0xe1, 0x9b, 0x0f, 0x9d, 0x8d, 0xcd, 0x2f, 0xc7, 0xe6, 0x82, 0x32, 0x08, 0xa7, 0x51, 0x83, 0x3d, 0x3b, 0x4e, 0x8e, 0x38, 0x7c, 0x39, 0xf8, 0xed, 0x6b, 0xbc, 0x9f, 0xda, 0xec, 0x32, 0xd3, 0xea, 0x9a, 0xbb, 0xff, 0x57, 0x47, 0x23, 0xf3, 0xf1, 0x22, 0x99, 0x90, 0x96, 0x3e, 0xa4, 0xfd, 0x9f, 0xb5, 0x44, 0xf6, 0x42, 0x90, 0xaa, 0x2e, 0xa7, 0xda, 0x63, 0x11, 0x91, 0xa2, 0x0d, 0xbc, 0x94, 0x23, 0xb4, 0x61, 0x23, 0x3b, 0x93, 0x72, 0x49, 0xf2, 0xf4, 0xea, 0x10, 0x92, 0x8f, 0xae, 0x2a, 0x6f, 0xe6, 0x64, 0xf1, 0x2c, 0x09, 0x23, 0xed, 0x11 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 129, - { 0x01, 0x4c, 0xc3, 0x26, 0x32, 0x52, 0xf8, 0xc4, 0xfb, 0x77, 0xcd, 0x57, 0xa1, 0x42, 0x0c, 0x04, 0xc0, 0x43, 0x27, 0x8a, 0x0c, 0x45, 0xe7, 0xd4, 0x23, 0x79, 0x49, 0x3e, 0x34, 0x0f, 0x9c, 0xf1, 0xa9, 0x6f, 0x96, 0x06, 0x3a, 0xb7, 0x59, 0xd1, 0x63, 0x04, 0x06, 0xae, 0x28, 0x6a, 0x18, 0x34, 0xb6, 0xd1, 0xdb, 0x71, 0xee, 0x72, 0x2c, 0x93, 0x74, 0x5f, 0xdd, 0x4a, 0xd3, 0x3f, 0xaa, 0x72, 0xd8, 0x93, 0x51, 0xda, 0x69, 0x1a, 0x7d, 0x0a, 0x71, 0xd2, 0xc5, 0x5c, 0x57, 0x97, 0xd2, 0xcc, 0xb3, 0xb4, 0x62, 0x62, 0x08, 0xbc, 0x5f, 0x5c, 0x84, 0xfe, 0x43, 0x2f, 0x66, 0x4d, 0xc3, 0x0e, 0xde, 0x09, 0x63, 0xe6, 0x58, 0x45, 0x2b, 0x2a, 0xd5, 0xef, 0xa4, 0x93, 0x5a, 0x12, 0x2f, 0x46, 0x1d, 0x1e, 0xab, 0x84, 0x1c, 0x8a, 0xe0, 0xe6, 0xe8, 0x2f, 0xc1, 0xfe, 0xe8, 0x5d, 0x18, 0x1c, 0xbd } -, - /* Prime 1 */ - 65, - { 0x02, 0x94, 0xea, 0x0f, 0xa3, 0x4e, 0xc3, 0x13, 0x72, 0x33, 0x44, 0x20, 0x2e, 0x85, 0xec, 0xa2, 0x4b, 0x5d, 0xf6, 0x46, 0x1a, 0x1c, 0x30, 0x08, 0x7d, 0xca, 0xb5, 0xd2, 0x53, 0x39, 0x4a, 0xf5, 0x66, 0x6f, 0x03, 0x5c, 0x33, 0x35, 0x41, 0x0d, 0x8b, 0xb9, 0x86, 0x62, 0xc9, 0x78, 0xf6, 0x1d, 0x37, 0xdb, 0x4d, 0x83, 0xf0, 0xb2, 0x4c, 0xdc, 0xb6, 0x3f, 0xca, 0xdb, 0x79, 0xc5, 0x27, 0xf5, 0xab } -, - /* Prime 2 */ - 65, - { 0x02, 0x4e, 0x19, 0x16, 0x52, 0xf1, 0x70, 0x9f, 0xf4, 0x74, 0x37, 0x40, 0x85, 0x81, 0x88, 0x8a, 0x9d, 0xa1, 0x09, 0x17, 0xc5, 0xb5, 0xab, 0xaf, 0x91, 0x46, 0x10, 0x9f, 0xda, 0xc6, 0x94, 0x76, 0x6f, 0x4c, 0x8f, 0xb0, 0x57, 0x96, 0x8e, 0x84, 0x8d, 0x99, 0x58, 0x6b, 0x05, 0xf8, 0xa0, 0x2f, 0xba, 0x6c, 0xa1, 0xeb, 0x12, 0xba, 0x08, 0xdf, 0xd4, 0x9b, 0x62, 0xc2, 0x7a, 0x8f, 0x15, 0xf4, 0x33 } -, - /* Prime exponent 1 */ - 65, - { 0x01, 0x22, 0x7f, 0x36, 0xdc, 0x6b, 0x14, 0x27, 0x89, 0xfc, 0xaa, 0xa7, 0x12, 0x8b, 0xdf, 0x14, 0xfe, 0xd7, 0x90, 0x16, 0x04, 0x07, 0xfb, 0xbc, 0xdf, 0xbd, 0xa7, 0xe9, 0x88, 0x97, 0x18, 0x31, 0x81, 0x12, 0xae, 0x81, 0x6a, 0x28, 0xb0, 0x2d, 0x4a, 0x0b, 0x03, 0xdc, 0x8b, 0xfd, 0xd4, 0xff, 0xc6, 0xbb, 0x67, 0xf8, 0xe4, 0x65, 0x1a, 0x8f, 0xb0, 0xb3, 0x9d, 0x70, 0x96, 0xb7, 0x67, 0xf6, 0xfd } -, - /* Prime exponent 2 */ - 65, - { 0x02, 0x25, 0xec, 0x05, 0x3c, 0xe8, 0xda, 0x6f, 0x86, 0xad, 0xe3, 0x6b, 0xd2, 0xbf, 0x43, 0x93, 0x02, 0x91, 0x37, 0x5b, 0x1b, 0x1a, 0x51, 0xd4, 0x7d, 0x0b, 0x11, 0xa5, 0x17, 0x8a, 0x26, 0x83, 0x34, 0xf7, 0xe1, 0x94, 0x92, 0x1b, 0xb1, 0xd7, 0x5f, 0xea, 0x7f, 0x56, 0xc5, 0xaa, 0xcd, 0x05, 0x8d, 0xb3, 0x7d, 0x36, 0x08, 0x2e, 0xac, 0xe4, 0x83, 0x4b, 0x07, 0xbf, 0x7b, 0xdd, 0xea, 0xb4, 0xb7 } -, - /* Coefficient */ - 65, - { 0x02, 0x0b, 0xd0, 0xf5, 0x15, 0x80, 0x87, 0xed, 0xe3, 0x8c, 0xb5, 0xdc, 0x66, 0xe4, 0x01, 0x0a, 0xe4, 0xe4, 0x8c, 0xc0, 0x04, 0x2e, 0x15, 0x2c, 0xd5, 0xee, 0xb0, 0x51, 0xc9, 0xec, 0x45, 0xad, 0x23, 0x40, 0x24, 0x53, 0x52, 0xc0, 0x1d, 0x94, 0xc6, 0xa5, 0x26, 0xaa, 0x5a, 0x45, 0x4c, 0xdb, 0xae, 0xac, 0x85, 0x95, 0x34, 0x9b, 0xbe, 0x6a, 0x8d, 0x55, 0x19, 0xa3, 0xc9, 0xb7, 0xd0, 0x7c, 0x3a } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 9.1", - /* Message to be signed */ - 13, - { 0x82, 0xe5, 0xc5, 0xaa, 0xe6, 0x4e, 0x60, 0x8b, 0x27, 0x50, 0x4b, 0x91, 0xdb } -, - /* Signature */ - 129, - { 0x01, 0x45, 0x82, 0xda, 0xe9, 0x35, 0xe6, 0xb2, 0xae, 0xff, 0x7d, 0x72, 0x50, 0x89, 0xda, 0xb0, 0x58, 0xc6, 0x78, 0xb2, 0xee, 0x28, 0xbc, 0xd4, 0x44, 0xa7, 0x2b, 0xdf, 0xac, 0x31, 0x46, 0x3e, 0x18, 0xe9, 0x4d, 0x7b, 0x5e, 0xcc, 0x84, 0xa4, 0x31, 0x69, 0x6a, 0x1c, 0xdd, 0x79, 0xf9, 0xc0, 0x8c, 0x33, 0xe1, 0xd4, 0xb3, 0x22, 0xdd, 0x27, 0x7b, 0x50, 0x3a, 0xe6, 0xe4, 0xf9, 0xc3, 0x15, 0x30, 0x5b, 0x43, 0x72, 0xfe, 0x45, 0xfe, 0x4a, 0x7e, 0xbb, 0xfc, 0x4a, 0xe5, 0x90, 0xfa, 0x3c, 0x52, 0x0b, 0xf8, 0x28, 0x15, 0x8f, 0x78, 0x20, 0x29, 0x9f, 0x09, 0xb1, 0x34, 0xed, 0xe1, 0x17, 0xb6, 0x72, 0xa1, 0xea, 0xc2, 0xf0, 0x50, 0xc0, 0x44, 0xb2, 0x55, 0xca, 0x8d, 0x45, 0x52, 0xd4, 0xb5, 0xf3, 0xf5, 0x7b, 0x87, 0x34, 0xdb, 0x24, 0x74, 0x50, 0x07, 0x44, 0xa5, 0x33, 0x75, 0x00, 0x5e } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 9.2", - /* Message to be signed */ - 104, - { 0x77, 0xe0, 0xfb, 0xdc, 0xd6, 0xe0, 0x49, 0x8f, 0xc5, 0x68, 0x4f, 0xf1, 0x3d, 0x4c, 0x9f, 0x5b, 0x78, 0x0e, 0x77, 0xe2, 0x46, 0x46, 0x37, 0xff, 0x66, 0xea, 0xa2, 0xd7, 0xd9, 0xc3, 0xde, 0xfb, 0x9b, 0x0e, 0x3a, 0x38, 0x37, 0x73, 0xdb, 0x97, 0xa4, 0xfb, 0x49, 0x1b, 0xeb, 0x21, 0x14, 0xfd, 0xea, 0x2c, 0x2a, 0x48, 0x0f, 0xfc, 0x21, 0x9b, 0x79, 0x6a, 0xd8, 0x05, 0xd5, 0x4f, 0xbe, 0xc1, 0x7d, 0xcb, 0x34, 0xb1, 0xda, 0x17, 0x96, 0xcb, 0x9c, 0xd5, 0xf2, 0x41, 0x6a, 0xb5, 0xe7, 0x66, 0xf8, 0xe0, 0x06, 0x91, 0x8e, 0xbe, 0xc1, 0x82, 0x29, 0x98, 0xa2, 0x8f, 0xff, 0xa6, 0x23, 0x0c, 0x07, 0x87, 0x26, 0xfb, 0xa2, 0xe4, 0xa7, 0xb0 } -, - /* Signature */ - 129, - { 0x05, 0x93, 0x27, 0xce, 0xe7, 0x26, 0xff, 0xb6, 0x03, 0xe8, 0xa9, 0xfc, 0xd5, 0x74, 0xab, 0xa9, 0xcb, 0xdf, 0xc3, 0x6c, 0x0a, 0xa6, 0x6f, 0xcf, 0xe3, 0x55, 0x5c, 0xf2, 0xef, 0x35, 0x82, 0xd3, 0x22, 0x0d, 0xf9, 0xd6, 0xbf, 0x8a, 0x78, 0xe3, 0xff, 0xf0, 0xc1, 0x29, 0xb3, 0xab, 0xb3, 0xdc, 0x71, 0x21, 0x12, 0xa2, 0x05, 0x6b, 0xca, 0x08, 0x63, 0x65, 0x54, 0xc1, 0xac, 0x57, 0xdf, 0x87, 0xf3, 0x66, 0x41, 0x52, 0x68, 0x8c, 0x6a, 0xc7, 0x2e, 0x6b, 0x88, 0xf5, 0x63, 0x7c, 0xd7, 0x3f, 0x16, 0x69, 0x89, 0xc8, 0x29, 0x09, 0xfb, 0x67, 0xbc, 0x1f, 0xa2, 0xe2, 0xd5, 0x23, 0xe5, 0x1c, 0x91, 0x8f, 0x2b, 0xbe, 0xc1, 0xd7, 0x52, 0x02, 0xaf, 0x24, 0x0a, 0x61, 0xcd, 0x2d, 0xcc, 0x55, 0x5c, 0xae, 0xae, 0x9a, 0x68, 0x57, 0x0d, 0x77, 0x81, 0x0c, 0xf1, 0xdf, 0x81, 0x23, 0xff, 0x41, 0xc0 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.3", - /* Message to be signed */ - 116, - { 0x0d, 0xfa, 0x5b, 0xaa, 0x1c, 0xdd, 0xb8, 0x34, 0x70, 0x7a, 0x5f, 0x8c, 0xc6, 0xec, 0xe5, 0x71, 0xa7, 0xa7, 0xfc, 0xa5, 0x67, 0x63, 0x62, 0xd2, 0xb2, 0x37, 0x41, 0xa9, 0x57, 0x0a, 0xe2, 0x63, 0x8f, 0x6b, 0x1c, 0x23, 0x89, 0x85, 0x36, 0x75, 0xcc, 0xc6, 0xcc, 0x1b, 0x4c, 0x6d, 0xae, 0x23, 0xcd, 0xa7, 0x1a, 0xb9, 0x6b, 0x5a, 0x2f, 0x22, 0x14, 0x57, 0x50, 0x43, 0x3e, 0x2d, 0x6b, 0xa4, 0x27, 0x6a, 0xc1, 0xff, 0x9a, 0x48, 0xaf, 0xc9, 0xf3, 0x12, 0xf4, 0x13, 0x37, 0x85, 0xca, 0x5a, 0xf3, 0x74, 0x66, 0x74, 0x31, 0x9a, 0x67, 0x57, 0xa1, 0x64, 0xe3, 0x4d, 0x14, 0x98, 0xbd, 0x55, 0x30, 0x90, 0x2e, 0x32, 0x18, 0x55, 0xe3, 0xbe, 0xd4, 0x08, 0x81, 0xf0, 0x05, 0x42, 0x25, 0x6a, 0xa2, 0x1a, 0x42, 0xfc } -, - /* Signature */ - 129, - { 0x01, 0xd1, 0x95, 0x41, 0x69, 0xaf, 0x58, 0x99, 0x3e, 0x14, 0x77, 0x2a, 0x94, 0xf1, 0x9b, 0xc4, 0x79, 0x24, 0xcc, 0xdb, 0x2e, 0x90, 0xee, 0x43, 0x36, 0xfb, 0x6e, 0x08, 0x49, 0x8a, 0xf4, 0xda, 0x26, 0x51, 0xa2, 0xb7, 0x83, 0x6c, 0x31, 0x3a, 0x57, 0xc8, 0x61, 0xb5, 0x51, 0x84, 0xec, 0x3b, 0x15, 0xfa, 0xc8, 0x14, 0x53, 0x51, 0xbe, 0xc5, 0xa7, 0x27, 0x0a, 0x3a, 0xa8, 0x69, 0x4d, 0xb4, 0xe9, 0xa9, 0x2c, 0xb9, 0x32, 0x7b, 0xb7, 0xa4, 0xf7, 0xb7, 0x0d, 0x24, 0x4e, 0xaf, 0x9e, 0xbf, 0xa9, 0xed, 0xfd, 0x4d, 0x54, 0x78, 0x2f, 0x3f, 0x97, 0x26, 0x26, 0x95, 0xb9, 0x7d, 0x41, 0x6e, 0x52, 0x7b, 0xe4, 0xea, 0x2d, 0xef, 0xfe, 0x6e, 0xb5, 0xe0, 0x6c, 0xda, 0x6f, 0x0a, 0x7e, 0x41, 0x66, 0x77, 0xac, 0x0f, 0xd6, 0xf8, 0x19, 0x5d, 0x4c, 0xe2, 0x89, 0x70, 0xd2, 0xca, 0x41, 0x1a, 0x2b } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.4", - /* Message to be signed */ - 45, - { 0x16, 0x7e, 0x79, 0x56, 0x8c, 0x77, 0x36, 0x69, 0x0c, 0x3b, 0xed, 0xbb, 0xc8, 0xd4, 0x24, 0xeb, 0x53, 0x6a, 0x12, 0x85, 0x5a, 0x60, 0xcd, 0xb1, 0x0f, 0x94, 0xba, 0x11, 0x23, 0x17, 0xe9, 0x17, 0xa1, 0xb7, 0xd6, 0xfc, 0xfa, 0xa3, 0x43, 0x8d, 0x68, 0xee, 0x09, 0xfd, 0x47 } -, - /* Signature */ - 129, - { 0x02, 0x9a, 0x2b, 0x90, 0x86, 0x14, 0xed, 0x7a, 0x5f, 0xab, 0x72, 0xf2, 0xa1, 0xc8, 0xe5, 0x48, 0xb6, 0xf8, 0xb8, 0xb4, 0x5b, 0x75, 0x81, 0xfd, 0x24, 0x51, 0xfe, 0x45, 0xa6, 0x22, 0xfa, 0x0f, 0x08, 0xdd, 0x0b, 0xa2, 0xe8, 0xf3, 0xc4, 0x17, 0x20, 0x1e, 0xa0, 0x27, 0x79, 0x10, 0x18, 0x4f, 0x37, 0x6d, 0xa8, 0x03, 0xfa, 0x72, 0xc5, 0x0d, 0x39, 0xbe, 0x28, 0x82, 0x52, 0x6d, 0x1e, 0x85, 0xdf, 0x9a, 0xb1, 0x79, 0x75, 0x76, 0x4a, 0xcf, 0xb2, 0x07, 0x36, 0x6f, 0x6c, 0xd2, 0xc8, 0xb1, 0x36, 0xa9, 0x99, 0xda, 0xaf, 0x48, 0xf1, 0xc0, 0x8a, 0x9e, 0xa1, 0xf0, 0x84, 0x25, 0xc2, 0x1b, 0x65, 0x41, 0x80, 0xda, 0x4a, 0xdf, 0x10, 0x9b, 0x4b, 0xc5, 0xb8, 0x17, 0xdd, 0x67, 0xbf, 0x7d, 0xaa, 0xb4, 0xa3, 0x84, 0x03, 0x4a, 0xb4, 0xad, 0xe6, 0x94, 0x89, 0x8c, 0xfc, 0x27, 0x2a, 0xb6, 0x53 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.5", - /* Message to be signed */ - 229, - { 0x0d, 0x03, 0xf7, 0x12, 0x84, 0xf2, 0xe4, 0x83, 0x24, 0x2d, 0x92, 0x3f, 0xd1, 0xe1, 0x53, 0xbc, 0x16, 0x0f, 0x0c, 0xdc, 0x2c, 0x0b, 0x76, 0xf1, 0xbc, 0x2c, 0xf7, 0xd1, 0xbe, 0x9c, 0xcc, 0x7f, 0xaf, 0xa6, 0xaf, 0xc3, 0x90, 0x34, 0x01, 0x84, 0x09, 0xcc, 0xfd, 0x16, 0x28, 0xa7, 0x0b, 0x35, 0x83, 0x33, 0xbd, 0x96, 0xee, 0xd3, 0xad, 0xf3, 0x14, 0x2b, 0x17, 0x60, 0xbf, 0x8a, 0x9b, 0xb1, 0x9e, 0xa2, 0x47, 0x3a, 0x2e, 0xd8, 0x5c, 0x91, 0xcd, 0x5f, 0x0a, 0x5f, 0x2d, 0x46, 0x32, 0xd6, 0x17, 0x64, 0x19, 0xfa, 0x1d, 0x8c, 0xc8, 0x8b, 0x67, 0x08, 0x47, 0x77, 0x11, 0xea, 0x49, 0x58, 0xa8, 0x39, 0x01, 0xfe, 0xf2, 0x84, 0xf5, 0xa6, 0xc5, 0x02, 0x79, 0x8c, 0x8b, 0xd0, 0xa3, 0x50, 0xf2, 0xea, 0x83, 0xed, 0x18, 0x1e, 0xb9, 0x70, 0xd3, 0x0b, 0x78, 0x13, 0x4c, 0x8e, 0x1d, 0x64, 0xf0, 0xd1, 0x49, 0x5b, 0x70, 0x17, 0x24, 0x5f, 0xa6, 0x9b, 0xd5, 0x74, 0x27, 0xf7, 0x49, 0x20, 0xba, 0x0e, 0xed, 0xe9, 0xcb, 0xa3, 0x4e, 0xb2, 0x22, 0x76, 0xb0, 0xf2, 0x74, 0x13, 0xba, 0x3f, 0x0d, 0xa8, 0xeb, 0xde, 0xdb, 0x9b, 0x0c, 0x80, 0x0e, 0x44, 0x48, 0x1d, 0x01, 0xe6, 0xbb, 0xb0, 0xdf, 0xeb, 0xf9, 0xa1, 0x5e, 0xf6, 0xa7, 0x02, 0x0b, 0x2c, 0x55, 0xee, 0x02, 0x79, 0x11, 0x79, 0x6f, 0x66, 0xf4, 0x3d, 0xd8, 0x46, 0x02, 0x1f, 0x8d, 0x6f, 0x7e, 0x01, 0xbb, 0x80, 0x2b, 0xac, 0x09, 0xfd, 0xe9, 0xb9, 0x04, 0xbe, 0xcf, 0x99, 0x90, 0xe6, 0x84, 0xe6, 0x56, 0x9a, 0xca, 0xeb, 0x3c, 0xc6, 0x4d, 0xcf, 0x5d } -, - /* Signature */ - 129, - { 0x04, 0x22, 0x79, 0x1f, 0xe7, 0xb4, 0x3e, 0x1f, 0x31, 0x9a, 0xe6, 0x7d, 0x91, 0x8c, 0x59, 0x87, 0xe6, 0x39, 0x36, 0x81, 0xa1, 0x86, 0x1c, 0x1e, 0x71, 0xdd, 0x6f, 0xce, 0x19, 0x23, 0x71, 0x0d, 0xbc, 0xed, 0x43, 0x01, 0xfd, 0xcd, 0x4a, 0xad, 0x8f, 0x4f, 0xc2, 0x7d, 0xfa, 0x02, 0xa9, 0x4d, 0x91, 0xbd, 0x96, 0x20, 0x0a, 0xed, 0x8b, 0x3c, 0x5a, 0x96, 0xef, 0xee, 0x7d, 0x11, 0xaf, 0x90, 0x87, 0xfb, 0x81, 0x90, 0x5c, 0x5d, 0xf2, 0xc2, 0x4e, 0xd7, 0xed, 0x63, 0xd5, 0xfc, 0x22, 0xba, 0xbd, 0x6b, 0x9e, 0x3b, 0x57, 0xcd, 0x25, 0x41, 0x9a, 0x78, 0x17, 0xe9, 0x36, 0x16, 0xe9, 0x34, 0x54, 0xb9, 0x58, 0x53, 0xfe, 0x52, 0x04, 0xb5, 0x8c, 0x09, 0x8b, 0x46, 0xde, 0x0b, 0x3f, 0x01, 0xf5, 0x82, 0x76, 0x32, 0x48, 0xc2, 0x90, 0xb9, 0xe8, 0x09, 0x69, 0x65, 0x24, 0x42, 0xa4, 0xd8, 0xe5 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.6", - /* Message to be signed */ - 222, - { 0x4a, 0xca, 0x96, 0x3f, 0x14, 0xac, 0xf6, 0xa7, 0x9c, 0x51, 0x08, 0x1e, 0xf2, 0x57, 0x16, 0x66, 0x71, 0xe3, 0xb4, 0x5f, 0xee, 0x31, 0x24, 0x07, 0xba, 0x3c, 0xf6, 0xd7, 0x11, 0xab, 0xa1, 0xae, 0x25, 0xa4, 0xa8, 0xba, 0x45, 0x48, 0x19, 0xa3, 0x91, 0x2a, 0x31, 0x2e, 0x99, 0x0f, 0x1f, 0xa7, 0x4c, 0xbc, 0xb7, 0x27, 0x77, 0xf1, 0xc7, 0xc6, 0x63, 0xa2, 0xd1, 0xcd, 0xb2, 0xc5, 0xc0, 0x07, 0x4d, 0x45, 0x16, 0xf4, 0x87, 0x17, 0xde, 0x14, 0x03, 0xe8, 0xff, 0x7d, 0x0f, 0x9d, 0xe7, 0xc7, 0xc8, 0x51, 0xf3, 0xe3, 0x51, 0x16, 0x8b, 0xa6, 0xc4, 0x14, 0xbe, 0xd5, 0xd4, 0x2b, 0xae, 0x52, 0x7b, 0x72, 0x4c, 0xeb, 0x83, 0x4d, 0x79, 0xba, 0xcf, 0x70, 0x2c, 0x56, 0xa6, 0x23, 0xc1, 0x68, 0x80, 0x87, 0xdc, 0x9d, 0xe9, 0x53, 0x8e, 0xa7, 0xc7, 0xc7, 0x61, 0xcd, 0x2f, 0xd5, 0x78, 0xf0, 0xdc, 0x3f, 0x55, 0x2f, 0xfb, 0xd4, 0xaf, 0xc7, 0xf4, 0xec, 0x71, 0x22, 0xfd, 0xec, 0x1a, 0x3a, 0x2b, 0x10, 0x4d, 0x53, 0x2d, 0xb8, 0x1c, 0xb9, 0x14, 0x18, 0x54, 0xd5, 0x7d, 0xcf, 0x54, 0xb7, 0x56, 0x01, 0xa9, 0x05, 0xfa, 0xed, 0xa6, 0x5c, 0x2a, 0x7a, 0x7b, 0xc2, 0xb0, 0x29, 0xad, 0x12, 0xdd, 0x7a, 0x6a, 0xd1, 0xb4, 0x0b, 0xe0, 0x40, 0x28, 0xb4, 0xb5, 0xb6, 0x37, 0x30, 0xef, 0x98, 0x44, 0x73, 0xf0, 0xc4, 0x82, 0x14, 0x89, 0x93, 0xc3, 0x6b, 0x44, 0xe5, 0x4b, 0xe9, 0xa5, 0xf2, 0x34, 0xe7, 0x43, 0x29, 0x2a, 0x12, 0xa3, 0x4b, 0xf2, 0xff, 0x73, 0xb7, 0xf7, 0x98 } -, - /* Signature */ - 129, - { 0x04, 0x26, 0x43, 0xc0, 0x3a, 0xda, 0x72, 0x4e, 0x2d, 0xbb, 0x19, 0xcc, 0x07, 0xad, 0x0e, 0x75, 0x22, 0x28, 0xb9, 0xd3, 0x6f, 0x65, 0x3c, 0x6a, 0x9c, 0x0c, 0x29, 0x35, 0x6c, 0xf4, 0xc3, 0xf1, 0xca, 0x19, 0x37, 0x76, 0xd5, 0xfe, 0xf4, 0x3f, 0xc5, 0x54, 0x17, 0x71, 0x66, 0x69, 0xde, 0x9a, 0xb2, 0xad, 0xdd, 0x3e, 0xa8, 0x8a, 0x90, 0xae, 0x93, 0x9a, 0x5e, 0xb1, 0x10, 0x13, 0xe2, 0x28, 0xae, 0x08, 0x16, 0xee, 0xfa, 0x4d, 0xd4, 0x2c, 0x6c, 0x08, 0xc8, 0x78, 0xbd, 0x58, 0xb4, 0x90, 0x40, 0x29, 0x6a, 0x86, 0x3b, 0xfd, 0x11, 0x28, 0x5f, 0x8b, 0xbd, 0x31, 0x5b, 0xe1, 0x6d, 0x2d, 0x65, 0xd7, 0xf5, 0xe5, 0xf2, 0x6a, 0xa9, 0x71, 0x47, 0xf9, 0x5f, 0x5e, 0xe3, 0x6f, 0x98, 0x9a, 0xa8, 0x96, 0xd7, 0xf9, 0xf1, 0xb3, 0x05, 0x1f, 0x82, 0x42, 0x44, 0xf9, 0x05, 0x96, 0x72, 0x3d, 0x11 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.7", - /* Message to be signed */ - 4, - { 0xa7, 0x5a, 0x45, 0x80 } -, - /* Signature */ - 129, - { 0x00, 0x4f, 0xe4, 0xc5, 0xd9, 0x14, 0x3c, 0x85, 0x1e, 0x46, 0x16, 0x7c, 0xc1, 0x81, 0x57, 0x5c, 0x07, 0x5e, 0x69, 0xb9, 0x81, 0xf9, 0xc1, 0x03, 0xf9, 0xd9, 0xb0, 0x11, 0xff, 0x8b, 0x29, 0xba, 0x55, 0xa4, 0x31, 0x87, 0xce, 0x87, 0x77, 0x99, 0x63, 0x17, 0xa0, 0x3c, 0x9d, 0x90, 0xaf, 0xc1, 0x89, 0x0a, 0x9a, 0xde, 0xec, 0x8e, 0xac, 0x08, 0x7f, 0x99, 0xb8, 0x15, 0xe6, 0xeb, 0x2b, 0x87, 0x1d, 0xcd, 0xdc, 0x80, 0x92, 0x24, 0x9d, 0x8f, 0x51, 0x3c, 0x6c, 0x56, 0x09, 0xfd, 0xae, 0x2c, 0xfc, 0x6b, 0xf0, 0x1f, 0xcb, 0x80, 0x25, 0xa4, 0xf7, 0x9b, 0xf1, 0x2a, 0xa8, 0xe1, 0x09, 0x82, 0x9a, 0x0b, 0xb3, 0x8a, 0x09, 0xd1, 0xa3, 0x93, 0x65, 0xe0, 0x40, 0x56, 0x52, 0xda, 0xe4, 0x51, 0xe5, 0xc3, 0x29, 0x8f, 0x47, 0x04, 0x05, 0x98, 0xec, 0xd7, 0x0e, 0x4b, 0x40, 0x33, 0x89, 0xbc, 0xd5 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.8", - /* Message to be signed */ - 109, - { 0x7c, 0xfc, 0x00, 0xa6, 0x43, 0xae, 0x99, 0x79, 0x68, 0x01, 0xee, 0x3c, 0xeb, 0xe2, 0xcb, 0xb1, 0xa6, 0xbe, 0x1c, 0xac, 0x15, 0xc6, 0x48, 0xd4, 0xba, 0x33, 0x01, 0x29, 0x38, 0x71, 0xa9, 0x9f, 0x7c, 0xb1, 0x43, 0xc1, 0x28, 0xc7, 0x7f, 0x96, 0x31, 0x1f, 0xe4, 0x3a, 0x39, 0x01, 0xdf, 0x2c, 0x2a, 0x5c, 0x40, 0x4b, 0xe8, 0x31, 0x46, 0x97, 0xe0, 0x9b, 0x2e, 0x80, 0xaa, 0xc6, 0xac, 0x39, 0x97, 0x1b, 0xbe, 0x0d, 0xbc, 0x26, 0x67, 0x3f, 0x31, 0x95, 0x9f, 0x23, 0x8e, 0xaf, 0xd1, 0x50, 0x12, 0xe4, 0x96, 0x7d, 0x33, 0x55, 0x18, 0x92, 0xa3, 0xd3, 0x65, 0x1f, 0xe4, 0x46, 0x9b, 0x2d, 0xba, 0x45, 0x57, 0xdf, 0x89, 0x3a, 0xb6, 0xb9, 0x4f, 0x13, 0x25, 0xc3, 0xa1 } -, - /* Signature */ - 129, - { 0x05, 0x98, 0x5a, 0x4c, 0xce, 0xd0, 0xe8, 0xfd, 0xc5, 0x89, 0x24, 0xed, 0xba, 0x9e, 0x40, 0x0e, 0x67, 0x48, 0x21, 0x4f, 0x8d, 0x0b, 0x83, 0xaa, 0xfa, 0x20, 0x35, 0x0b, 0xbf, 0x0e, 0x68, 0x76, 0xca, 0x5a, 0x9a, 0xf3, 0x97, 0x0d, 0xd6, 0x3b, 0xe6, 0x84, 0xf9, 0x93, 0x6d, 0xb2, 0x82, 0xff, 0x8b, 0x53, 0xcf, 0x5f, 0x1b, 0xb1, 0xcb, 0xf4, 0x47, 0x33, 0x01, 0xf3, 0x72, 0xd9, 0x94, 0x8a, 0xf9, 0x39, 0x1b, 0x20, 0x02, 0xb2, 0xbe, 0x3e, 0x45, 0xff, 0x24, 0xa2, 0xd8, 0x99, 0xae, 0x8b, 0x52, 0xb6, 0x71, 0xb0, 0x4b, 0xab, 0x46, 0x01, 0x06, 0xbe, 0xdc, 0xfa, 0xc0, 0x13, 0x95, 0x9a, 0x48, 0x18, 0x95, 0x98, 0x42, 0x7f, 0xb9, 0x57, 0x15, 0x9a, 0x6d, 0x32, 0x9c, 0x19, 0xf3, 0x6c, 0xa7, 0x53, 0x81, 0xb9, 0x35, 0x0d, 0x34, 0x38, 0x9c, 0x16, 0xe1, 0x80, 0xa8, 0x51, 0xe4, 0x57, 0xcd } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.9", - /* Message to be signed */ - 206, - { 0x3d, 0x90, 0xde, 0x72, 0x35, 0x51, 0x59, 0x49, 0x24, 0x5f, 0x49, 0x03, 0x68, 0xc1, 0xf4, 0x93, 0x83, 0xe4, 0x4c, 0x1d, 0xb5, 0x1d, 0xd5, 0x38, 0x5b, 0xdf, 0xf5, 0xbd, 0x34, 0x45, 0x0e, 0x63, 0xce, 0x42, 0x15, 0x0b, 0x44, 0x1e, 0xf9, 0xeb, 0xc7, 0x29, 0xa9, 0x03, 0x34, 0x53, 0xf0, 0xa9, 0x39, 0x9f, 0xf6, 0x86, 0x1f, 0x50, 0x65, 0xb6, 0x66, 0x6d, 0xc2, 0x0b, 0x28, 0x72, 0x03, 0x42, 0x8e, 0x72, 0xbd, 0xf4, 0xcb, 0x74, 0x8a, 0xc8, 0xd4, 0xa5, 0x5f, 0x43, 0xd2, 0x23, 0x5e, 0x0a, 0xb2, 0xec, 0x2c, 0xf2, 0xb0, 0x6a, 0x01, 0x5f, 0x41, 0xe3, 0x51, 0x68, 0xac, 0x7e, 0x3c, 0x56, 0x8f, 0x2f, 0x16, 0xef, 0x57, 0x28, 0xb2, 0xbe, 0x95, 0x24, 0x91, 0x9d, 0x36, 0x76, 0xd6, 0x8f, 0x53, 0x7e, 0xfe, 0xf2, 0x9a, 0x05, 0xaf, 0x97, 0xcf, 0xed, 0x7c, 0xe9, 0xec, 0x45, 0xc1, 0x2f, 0x16, 0x5e, 0x4d, 0x7a, 0x4f, 0xe7, 0x2b, 0x99, 0xea, 0xbf, 0x83, 0x31, 0x6c, 0xdf, 0x2b, 0xd1, 0x64, 0x4b, 0x82, 0xfa, 0x13, 0xe4, 0xff, 0xc4, 0x49, 0xe7, 0x6d, 0x44, 0xc3, 0x87, 0x69, 0x63, 0x51, 0x47, 0x8b, 0x1a, 0x0f, 0x85, 0x96, 0x15, 0xda, 0x90, 0x5f, 0x20, 0xe6, 0x8b, 0x24, 0x56, 0x5c, 0x87, 0x3f, 0x83, 0x4e, 0x59, 0x34, 0x58, 0x51, 0x8a, 0xde, 0x41, 0xc1, 0x42, 0x81, 0x74, 0xda, 0x0c, 0x47, 0x66, 0x3a, 0x76, 0x00, 0xc6, 0x50, 0x25, 0x01, 0x5e, 0x09, 0xc1 } -, - /* Signature */ - 129, - { 0x00, 0x98, 0x13, 0xb2, 0xfd, 0xc5, 0x1b, 0xff, 0x88, 0xde, 0xdb, 0xec, 0xa3, 0xb1, 0x4a, 0xe5, 0x8b, 0xc7, 0xe7, 0x14, 0xc1, 0xd9, 0x2d, 0x74, 0x26, 0xe4, 0x94, 0x4e, 0xf9, 0x3e, 0xf9, 0xce, 0x6d, 0x10, 0xdc, 0x98, 0x9e, 0xaf, 0xe7, 0x34, 0x8d, 0x0a, 0x95, 0xf9, 0x9f, 0x56, 0x94, 0x8f, 0x72, 0x60, 0x2a, 0xc5, 0xe8, 0x61, 0x4f, 0x6b, 0x38, 0xe6, 0x8d, 0xa7, 0x9f, 0x48, 0xe2, 0x76, 0x8e, 0xda, 0x58, 0x64, 0xcf, 0xf2, 0x54, 0x51, 0x37, 0xf3, 0xcf, 0x4d, 0x81, 0xa5, 0xae, 0xb8, 0x9b, 0x21, 0x07, 0x26, 0x74, 0xca, 0xeb, 0xa0, 0x00, 0x71, 0x00, 0xc0, 0x7e, 0xf4, 0xdc, 0xbb, 0xd0, 0x5a, 0xfb, 0xad, 0x9e, 0x8b, 0x30, 0xd7, 0x46, 0xea, 0x36, 0x0d, 0x6c, 0xf8, 0x75, 0xd1, 0x0a, 0x67, 0xa5, 0x7f, 0x4b, 0x5d, 0xf4, 0x12, 0x1d, 0x72, 0x97, 0xa4, 0xbd, 0xce, 0x12, 0x8c, 0xb5 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.10", - /* Message to be signed */ - 253, - { 0x20, 0xe6, 0xa3, 0xfe, 0x16, 0xb5, 0x21, 0xb3, 0xc1, 0xe6, 0xae, 0x99, 0x3e, 0xc6, 0xe8, 0x49, 0xa9, 0xc1, 0x1f, 0x20, 0x42, 0xa2, 0xd4, 0xce, 0x89, 0xcf, 0x0f, 0x99, 0xe1, 0xb4, 0xb9, 0x47, 0x1d, 0xa9, 0xa1, 0x73, 0x0d, 0xa8, 0x85, 0x1f, 0xc5, 0xab, 0x3c, 0x09, 0x22, 0x05, 0x5f, 0x00, 0x37, 0x58, 0xb2, 0x35, 0xc2, 0x8d, 0xe4, 0x08, 0x80, 0x66, 0x3f, 0xcd, 0x80, 0x14, 0x07, 0x18, 0x15, 0xdd, 0x06, 0x49, 0x4a, 0x54, 0x7c, 0xce, 0xc3, 0x34, 0x8e, 0x12, 0xd5, 0x38, 0xd5, 0xdf, 0xb4, 0x8f, 0x80, 0x7b, 0x59, 0xe9, 0xb7, 0xcd, 0x81, 0xf3, 0x91, 0xc0, 0x2c, 0x01, 0x6c, 0xd9, 0xc1, 0xa8, 0x4f, 0x9c, 0x59, 0x51, 0x79, 0xd8, 0xf2, 0x00, 0x24, 0x2a, 0x56, 0x68, 0x18, 0x2c, 0xf2, 0xcb, 0xa3, 0xb9, 0xfb, 0x6e, 0xad, 0x45, 0x1d, 0x6d, 0x27, 0xd9, 0xc7, 0x36, 0x15, 0x25, 0xd6, 0x88, 0xb5, 0x52, 0x33, 0xff, 0x45, 0x29, 0x1c, 0xc0, 0x74, 0x02, 0xd2, 0x92, 0xde, 0x0b, 0xe8, 0x3d, 0x16, 0x46, 0xc4, 0x3c, 0x28, 0x88, 0x1f, 0xd4, 0x55, 0x49, 0xb1, 0x4d, 0x12, 0x61, 0xb1, 0x2f, 0x12, 0x04, 0x38, 0x27, 0x6c, 0x6b, 0x3f, 0x98, 0xf5, 0x5b, 0xcf, 0x17, 0x80, 0xbc, 0x1a, 0x91, 0xeb, 0x11, 0xd0, 0x22, 0x9e, 0x1d, 0x78, 0x68, 0xd7, 0xfe, 0xe4, 0x9d, 0x6b, 0x91, 0x68, 0xe2, 0x4d, 0xe1, 0xcb, 0x4f, 0x0f, 0x22, 0xe6, 0x7c, 0xbb, 0x15, 0x69, 0x20, 0x41, 0x13, 0x02, 0x72, 0x94, 0xb3, 0x7e, 0xc7, 0xfa, 0xe5, 0x8b, 0xc6, 0x4e, 0x82, 0x5e, 0xaa, 0x4d, 0x56, 0x94, 0xd0, 0x05, 0x8f, 0x2c, 0xd4, 0xc7, 0xd2, 0x14, 0x18, 0xda, 0x3c, 0x03, 0x07, 0xfa, 0x2f, 0x04, 0x92, 0xe8, 0xb3, 0x77, 0x58, 0xd3, 0xea, 0x40, 0xa4, 0xe3, 0x0f, 0x60 } -, - /* Signature */ - 129, - { 0x01, 0xf0, 0x2b, 0x3f, 0x83, 0x91, 0x23, 0xaf, 0xf2, 0xa3, 0xf4, 0x3d, 0xa5, 0xaa, 0xa0, 0xb6, 0xbb, 0xb6, 0x0c, 0x04, 0x37, 0x82, 0xf4, 0x96, 0x2a, 0x7b, 0x9f, 0x02, 0x5c, 0x94, 0x8e, 0x34, 0x32, 0x2e, 0x98, 0xde, 0x37, 0x03, 0xe3, 0xbb, 0x45, 0xa7, 0x06, 0xa2, 0xbb, 0x05, 0x09, 0xbe, 0xd9, 0xf4, 0x10, 0x52, 0x8c, 0x88, 0x1a, 0xb9, 0xa1, 0xdc, 0x01, 0x97, 0x06, 0x8c, 0x37, 0x28, 0xc3, 0x71, 0x6d, 0x83, 0x81, 0xd9, 0xf8, 0x67, 0x80, 0xfe, 0x78, 0xa6, 0x43, 0x4b, 0x72, 0xf5, 0x1e, 0x69, 0xcd, 0x32, 0xa7, 0x21, 0x3c, 0xce, 0xa7, 0x43, 0xb3, 0x3c, 0x3c, 0x96, 0xeb, 0x00, 0x42, 0xfb, 0x98, 0xa7, 0x0c, 0x2e, 0x52, 0xfc, 0x17, 0x8a, 0xb2, 0xcb, 0x9f, 0xf8, 0xbd, 0xdd, 0xc1, 0x04, 0x6b, 0x08, 0xe0, 0x47, 0xba, 0xdd, 0xd6, 0x5a, 0x45, 0xa4, 0xe6, 0x53, 0x39, 0xd7, 0x25 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.11", - /* Message to be signed */ - 159, - { 0x6e, 0xb4, 0x9f, 0x8a, 0xbc, 0x5b, 0x49, 0x48, 0x72, 0x0a, 0x7f, 0x42, 0xf7, 0x40, 0x84, 0x78, 0x00, 0x22, 0xe0, 0xe9, 0xf9, 0xf6, 0x88, 0x86, 0xd9, 0xf3, 0x4e, 0x7f, 0x7f, 0x8a, 0xc1, 0x54, 0xdb, 0xe1, 0x9c, 0x91, 0xb8, 0xed, 0x38, 0xec, 0x03, 0x6b, 0x61, 0x42, 0x12, 0xca, 0x35, 0xf7, 0x9e, 0xd8, 0x74, 0x57, 0x9e, 0x24, 0x85, 0xda, 0xc8, 0x20, 0x5d, 0x0e, 0x56, 0xb4, 0xb4, 0xc0, 0x00, 0x0a, 0x8a, 0x75, 0xa6, 0xd4, 0x97, 0xfc, 0x51, 0x19, 0x11, 0x1a, 0x40, 0xdb, 0x51, 0x3d, 0xf6, 0x61, 0x96, 0x55, 0xb5, 0x8a, 0x11, 0x6f, 0xab, 0xee, 0x08, 0x2b, 0xfa, 0x79, 0x37, 0x3d, 0x91, 0x76, 0x56, 0x87, 0x10, 0x11, 0x24, 0x18, 0x87, 0xf4, 0x42, 0x60, 0x8b, 0xd1, 0xeb, 0x1d, 0x95, 0xd1, 0x76, 0x80, 0x65, 0xfa, 0x63, 0x32, 0x4f, 0xab, 0x27, 0x36, 0xf9, 0x22, 0x70, 0x5c, 0xf2, 0x89, 0xfd, 0xe9, 0x26, 0x74, 0x33, 0x85, 0x92, 0x07, 0xa8, 0xbc, 0xf1, 0x2d, 0x17, 0x86, 0x1c, 0xfd, 0x06, 0x2b, 0x88, 0xdf, 0x78, 0x87, 0x0d, 0x5a, 0x5e, 0x91, 0x13, 0x1b, 0x63 } -, - /* Signature */ - 129, - { 0x02, 0xa2, 0xfa, 0x32, 0x71, 0x77, 0x96, 0x71, 0x0b, 0x52, 0xb0, 0x51, 0x90, 0x6c, 0xdb, 0x98, 0x15, 0xb2, 0xd0, 0x36, 0x6c, 0x07, 0x0a, 0x78, 0xff, 0x72, 0xd4, 0x59, 0x42, 0xd7, 0xad, 0xde, 0xae, 0x7e, 0xdc, 0x73, 0xca, 0x93, 0x01, 0xf1, 0xf9, 0xfa, 0xe6, 0x8a, 0x0b, 0xd4, 0xb1, 0xdf, 0x05, 0xa9, 0xa6, 0x71, 0xf8, 0xa5, 0xb7, 0xd4, 0x5c, 0xd1, 0x1f, 0xdc, 0x0f, 0x0b, 0xa0, 0x9d, 0x25, 0xce, 0xc3, 0xb6, 0x30, 0x3d, 0x9a, 0x66, 0x6c, 0x76, 0x32, 0x64, 0x96, 0xea, 0x31, 0xae, 0x38, 0x86, 0xa0, 0xc3, 0xb7, 0xd2, 0x27, 0x62, 0xee, 0xa2, 0x78, 0x93, 0x4b, 0x96, 0xa4, 0xf9, 0x0a, 0x50, 0x1a, 0xd3, 0x08, 0x8f, 0x70, 0x2e, 0x14, 0x76, 0x3c, 0xe3, 0x38, 0x46, 0xe2, 0xfd, 0xbe, 0x6d, 0x66, 0x1c, 0xb8, 0x2e, 0x6d, 0x98, 0x9d, 0xf3, 0xc5, 0xac, 0x8f, 0xe4, 0x0a, 0x85, 0x62 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.12", - /* Message to be signed */ - 76, - { 0x45, 0xcf, 0xec, 0x13, 0x2e, 0xe5, 0x93, 0xf0, 0xc3, 0xf3, 0x81, 0x3d, 0x3c, 0xb4, 0x49, 0xe6, 0xe5, 0xe6, 0x1d, 0x13, 0xde, 0x52, 0x9a, 0xe3, 0xe7, 0x1c, 0x99, 0x8e, 0xa4, 0x56, 0x35, 0x9c, 0xe6, 0x6b, 0x82, 0x04, 0x5b, 0x7a, 0xc7, 0x97, 0xfe, 0x96, 0x98, 0x5d, 0xea, 0xbc, 0x51, 0x22, 0x53, 0x0b, 0x2e, 0x29, 0xef, 0xc9, 0x75, 0xee, 0x96, 0x03, 0xb4, 0xf9, 0x6f, 0x3f, 0xf4, 0xe5, 0x9b, 0x0e, 0x35, 0xa9, 0xad, 0x92, 0xf2, 0xb8, 0x67, 0x79, 0x4d, 0x8e } -, - /* Signature */ - 129, - { 0x03, 0x9b, 0xe4, 0x8f, 0x13, 0x3a, 0xe7, 0xf0, 0xb1, 0x9e, 0xdd, 0xb2, 0x13, 0x56, 0x09, 0x73, 0xa3, 0xe2, 0xa1, 0x14, 0x6c, 0x79, 0x42, 0xf8, 0x26, 0x4b, 0xba, 0x5a, 0xd0, 0x08, 0x69, 0x2d, 0x11, 0x38, 0x01, 0xfc, 0x27, 0x78, 0xa7, 0xe3, 0x3a, 0x9e, 0x11, 0x5e, 0xa6, 0x32, 0xe5, 0x01, 0x88, 0xc8, 0x7b, 0x69, 0xe8, 0xd4, 0xd8, 0xcc, 0xa4, 0x8a, 0xbf, 0x9f, 0x25, 0x1e, 0xfc, 0x00, 0x17, 0xb9, 0x9e, 0xde, 0xe5, 0x66, 0xdc, 0xdc, 0x0b, 0xc5, 0x8d, 0xbf, 0x6d, 0x67, 0xbf, 0x86, 0x3d, 0xb8, 0xa8, 0x9a, 0xbd, 0xf1, 0x2a, 0x77, 0xf1, 0xb7, 0x0d, 0xe4, 0x39, 0xd1, 0x76, 0xf2, 0xea, 0xad, 0xa5, 0x46, 0x4c, 0x79, 0xa5, 0x84, 0x27, 0x0c, 0xa5, 0x14, 0xf4, 0x8f, 0x1d, 0xae, 0x86, 0x78, 0xec, 0xf1, 0xac, 0x29, 0x6d, 0x07, 0xc4, 0x68, 0x98, 0xba, 0xd4, 0x1a, 0xcb, 0x19, 0x9d } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.13", - /* Message to be signed */ - 26, - { 0x22, 0x51, 0x29, 0x87, 0x15, 0x7c, 0xf9, 0xb9, 0xab, 0x4e, 0x53, 0x37, 0xb0, 0x98, 0x91, 0xd6, 0x3c, 0xec, 0x37, 0x43, 0xc0, 0xf7, 0xbc, 0x9d, 0x18, 0x2e } -, - /* Signature */ - 129, - { 0x02, 0xc7, 0x75, 0x7f, 0x99, 0x93, 0xef, 0x8c, 0x6d, 0x60, 0xa3, 0xf5, 0xab, 0xed, 0xce, 0xa5, 0x35, 0xdf, 0xf5, 0x5a, 0xb9, 0xf4, 0xf6, 0x2d, 0x12, 0x54, 0xbf, 0x26, 0x1d, 0xd6, 0xa2, 0xee, 0x52, 0xda, 0x63, 0x49, 0xf4, 0x7b, 0x9b, 0x28, 0x9f, 0x1d, 0x0e, 0xa3, 0xe0, 0xff, 0x08, 0xf4, 0x55, 0xfa, 0x54, 0x85, 0x65, 0x8e, 0x42, 0x17, 0xf4, 0x40, 0xc0, 0x8b, 0x90, 0xae, 0x4c, 0x6c, 0xc2, 0x56, 0x97, 0xcb, 0x83, 0x35, 0x31, 0xdb, 0xb4, 0x74, 0x03, 0x25, 0x43, 0x10, 0x0b, 0x5f, 0x92, 0xb6, 0x78, 0x19, 0x5d, 0xdb, 0xfb, 0x1b, 0x59, 0xc5, 0x9b, 0xe7, 0xc8, 0x3d, 0xd8, 0x17, 0x45, 0xcd, 0x4e, 0x70, 0x9a, 0x0e, 0x3f, 0x79, 0x8e, 0xad, 0x5b, 0xf8, 0x66, 0x2d, 0xa6, 0x5c, 0x10, 0x57, 0xcc, 0x08, 0x2d, 0x90, 0x50, 0x50, 0xc4, 0x65, 0x95, 0x8b, 0x55, 0x5d, 0x77, 0xb8, 0xb1 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.14", - /* Message to be signed */ - 245, - { 0xae, 0x48, 0xcd, 0x83, 0xf4, 0xa1, 0xf9, 0x4e, 0x17, 0x19, 0x21, 0x96, 0x90, 0xc8, 0xc6, 0xf6, 0x73, 0x7a, 0xbd, 0x15, 0xe0, 0xd0, 0x8e, 0x7f, 0xc2, 0xea, 0x0d, 0x31, 0x5b, 0x45, 0xbe, 0xc2, 0x46, 0xe8, 0x45, 0xbf, 0x17, 0x60, 0xc8, 0x6c, 0x3f, 0x82, 0xd8, 0x4b, 0x1e, 0x9d, 0x68, 0xdc, 0xcc, 0x01, 0xd9, 0xa7, 0xd0, 0x7e, 0xcc, 0x6b, 0xfb, 0xee, 0xd8, 0x3d, 0x7a, 0xd0, 0x3a, 0x6d, 0x56, 0x6a, 0x89, 0xbc, 0x64, 0x42, 0x1e, 0x7e, 0xb4, 0x7e, 0x52, 0xc0, 0x23, 0x86, 0x58, 0xd5, 0xe4, 0xc5, 0x59, 0x7f, 0x12, 0x5a, 0xfc, 0x6c, 0x83, 0x3c, 0x63, 0xcd, 0x6f, 0x97, 0xf9, 0xdd, 0x5c, 0xce, 0x8a, 0x26, 0x38, 0x80, 0x7c, 0xe8, 0xa5, 0x83, 0xda, 0x03, 0x2b, 0xec, 0x81, 0xa3, 0x8c, 0xd2, 0x99, 0xa9, 0xc7, 0x8e, 0x82, 0x54, 0xf2, 0x88, 0x51, 0x64, 0x13, 0x52, 0x5f, 0xd9, 0x4a, 0x9e, 0x0a, 0x95, 0xc6, 0x56, 0xd7, 0x3c, 0xd5, 0x2a, 0x4d, 0xcc, 0x7d, 0xd0, 0x94, 0x7f, 0x4a, 0x00, 0x5e, 0xae, 0xdc, 0xcf, 0xd0, 0x3b, 0xb1, 0x71, 0x5c, 0x35, 0x1c, 0xf0, 0x59, 0xcd, 0x52, 0x2c, 0x7f, 0x53, 0x8c, 0x16, 0x28, 0xe7, 0x2a, 0x05, 0x64, 0x4e, 0x8f, 0xff, 0x50, 0x92, 0x6f, 0xa8, 0x68, 0x2a, 0x67, 0x53, 0x78, 0x6f, 0x2a, 0xa2, 0x61, 0x0a, 0xbf, 0xaa, 0x95, 0xbf, 0x99, 0xaf, 0x15, 0x61, 0x71, 0x51, 0xd0, 0xbd, 0x0f, 0xc4, 0x6f, 0xc3, 0xb2, 0x9c, 0xbe, 0xe1, 0xe6, 0x63, 0xb9, 0x23, 0x13, 0x6b, 0x5e, 0x19, 0x92, 0x83, 0x9f, 0x0b, 0xa5, 0x2e, 0x44, 0xfc, 0xcb, 0xd9, 0xf3, 0x20, 0xed, 0xe2, 0x0f, 0x55, 0xa4, 0x23, 0x77, 0x0e, 0x57, 0x3a, 0x9f, 0xb2, 0xb3, 0x6d, 0xc8, 0xf1, 0x84 } -, - /* Signature */ - 129, - { 0x00, 0xfb, 0xa9, 0xf6, 0xf9, 0x59, 0xb1, 0x70, 0xb0, 0x94, 0x6d, 0xcb, 0xdb, 0x98, 0xdc, 0x8e, 0x84, 0x79, 0xc6, 0x69, 0xad, 0xba, 0x6c, 0x54, 0x63, 0x6a, 0x2d, 0xc7, 0xd7, 0xf7, 0x03, 0x3d, 0x35, 0x04, 0x05, 0xd7, 0x17, 0xf2, 0xd6, 0x3d, 0xae, 0x65, 0xc2, 0x4b, 0x37, 0xdb, 0x1d, 0xc3, 0xe9, 0xf6, 0x17, 0x43, 0xaf, 0x1c, 0xe6, 0xde, 0x24, 0x67, 0xd1, 0x85, 0xae, 0xf0, 0x8d, 0x2b, 0xf8, 0x65, 0xf0, 0x75, 0xba, 0xa6, 0xa2, 0x9c, 0x58, 0x06, 0x61, 0xdc, 0xd4, 0xa4, 0x8f, 0x21, 0xff, 0x4e, 0x7b, 0x03, 0x9e, 0xef, 0x1e, 0x1e, 0x20, 0xba, 0x80, 0xcf, 0x20, 0xea, 0xb6, 0xec, 0xde, 0x60, 0xfa, 0x5d, 0x37, 0x67, 0xa3, 0x0e, 0x6a, 0xd4, 0x14, 0x47, 0x13, 0xca, 0x49, 0xfc, 0x03, 0x80, 0x99, 0xaf, 0x53, 0x6c, 0x0d, 0x5f, 0x55, 0xc4, 0xcb, 0x15, 0x33, 0x53, 0x81, 0xbe, 0xa0 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.15", - /* Message to be signed */ - 238, - { 0x2c, 0x8a, 0x00, 0x7b, 0x60, 0x30, 0x56, 0xd3, 0x31, 0x87, 0xbf, 0x52, 0xce, 0xf6, 0x16, 0x1a, 0xa5, 0xf5, 0xf5, 0x33, 0x7f, 0xc3, 0x59, 0xd4, 0x63, 0x44, 0x72, 0x1d, 0x94, 0x5f, 0xbc, 0x4d, 0x24, 0x0d, 0x30, 0x62, 0x0b, 0x29, 0x6c, 0x39, 0x77, 0xcf, 0x45, 0xc2, 0x47, 0xeb, 0x2c, 0x36, 0x39, 0x40, 0x79, 0x98, 0x3f, 0x03, 0xad, 0x82, 0x39, 0x9c, 0x4b, 0x28, 0x6c, 0x48, 0x16, 0x59, 0x10, 0xb3, 0x48, 0xb9, 0x5e, 0xf3, 0x9c, 0x43, 0xbf, 0xbe, 0xb3, 0x56, 0x6d, 0x1d, 0x1e, 0xea, 0x5a, 0x42, 0x7f, 0x4c, 0xb1, 0x68, 0x1f, 0x2a, 0x7c, 0x40, 0x1f, 0x3f, 0x0d, 0x6d, 0x9e, 0xe7, 0x99, 0x3b, 0xe5, 0xec, 0x5d, 0x34, 0xa7, 0x55, 0x41, 0xe9, 0xf8, 0xdc, 0x7c, 0x60, 0x69, 0xa8, 0x97, 0x7c, 0x9f, 0x93, 0x6e, 0xdb, 0xe4, 0x1a, 0x4e, 0xf7, 0x85, 0xa3, 0xef, 0x7b, 0xa0, 0x51, 0x89, 0x90, 0x09, 0xed, 0x61, 0x2a, 0x22, 0x8f, 0x90, 0x31, 0x67, 0xa9, 0x34, 0xee, 0xe6, 0x9b, 0x4f, 0x87, 0x36, 0xc2, 0x95, 0x11, 0xc6, 0xbd, 0xc6, 0x1e, 0xee, 0x96, 0x08, 0xa9, 0x91, 0x1b, 0xba, 0x52, 0x83, 0x9b, 0xe9, 0x9f, 0x91, 0xd2, 0xef, 0x85, 0xb8, 0xcf, 0x10, 0xc1, 0xd6, 0x35, 0x08, 0x08, 0x29, 0xba, 0x79, 0x91, 0xfe, 0x2e, 0xf8, 0x2e, 0x2b, 0xae, 0x27, 0x08, 0x14, 0x06, 0xe8, 0x9b, 0xab, 0x75, 0xc3, 0xed, 0x19, 0xe8, 0x7a, 0x4a, 0xdb, 0x72, 0xec, 0x26, 0x21, 0xf3, 0xf2, 0x58, 0x5b, 0x38, 0xcb, 0xb3, 0x6b, 0x3c, 0x0d, 0x40, 0x5f, 0xfc, 0xa7, 0xa6, 0xfb, 0x02, 0x24, 0x42, 0x07, 0x94, 0xcb, 0xd8, 0xd7, 0x83, 0x18, 0x01, 0xc8, 0x81, 0xe1, 0x65 } -, - /* Signature */ - 129, - { 0x04, 0x10, 0x47, 0xe2, 0x42, 0xb6, 0x44, 0x87, 0x41, 0xf2, 0x8a, 0x4c, 0x8b, 0x2d, 0xfe, 0xca, 0xcc, 0x0f, 0xf6, 0x61, 0x9e, 0x95, 0x6a, 0x6a, 0x6b, 0x10, 0xcd, 0xd0, 0x1e, 0xed, 0xd2, 0x01, 0xc8, 0x0e, 0x0f, 0xbf, 0x7c, 0x5b, 0xef, 0x52, 0xa7, 0xaa, 0x99, 0x00, 0xa8, 0x59, 0x39, 0x4b, 0x47, 0xe8, 0x3d, 0x08, 0xb5, 0xe1, 0xda, 0x03, 0xa3, 0x35, 0x54, 0x00, 0x0c, 0xce, 0x17, 0xc1, 0xd8, 0x62, 0x29, 0xa3, 0xa2, 0x03, 0x50, 0xd1, 0x16, 0x43, 0xa7, 0x58, 0xc1, 0x16, 0xb8, 0xfb, 0xf7, 0x26, 0x60, 0xdf, 0x4c, 0x86, 0xef, 0x8c, 0x1f, 0xc4, 0x54, 0x4c, 0x3a, 0xe1, 0xd1, 0xfc, 0x3c, 0xe9, 0xf2, 0x63, 0xf6, 0x2e, 0x80, 0x07, 0xcd, 0x7f, 0xf7, 0xea, 0x8d, 0x50, 0xa0, 0x82, 0x83, 0x89, 0xff, 0x43, 0x1f, 0xc5, 0xc5, 0x62, 0x81, 0x6d, 0x3d, 0x24, 0xb6, 0x07, 0x21, 0x1d, 0x29 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.16", - /* Message to be signed */ - 211, - { 0x7b, 0x15, 0xd1, 0xa7, 0x9c, 0x7a, 0xd2, 0xd1, 0x2f, 0x75, 0xda, 0x57, 0xd1, 0x4a, 0x8e, 0xb7, 0x1f, 0xdd, 0x4c, 0x4e, 0xff, 0x52, 0x43, 0x74, 0x1a, 0xcd, 0xe2, 0x3c, 0xe6, 0xda, 0xd3, 0x08, 0xc8, 0x1d, 0x5d, 0x58, 0x0f, 0xf9, 0xc3, 0xf8, 0x93, 0xff, 0x12, 0x4f, 0xe4, 0x58, 0xb3, 0x18, 0x84, 0xda, 0xf7, 0xfc, 0x44, 0x66, 0xd7, 0x00, 0xdc, 0x49, 0x3f, 0x1c, 0x7a, 0x7d, 0xbf, 0x62, 0x24, 0x1b, 0x17, 0xe7, 0x36, 0x23, 0xfa, 0x17, 0x81, 0x4a, 0xb4, 0xd2, 0xc9, 0x24, 0x5b, 0xe8, 0x3b, 0xb3, 0xcc, 0x5f, 0x94, 0x44, 0xb1, 0x52, 0x17, 0xb2, 0x44, 0x1f, 0x45, 0x9c, 0x00, 0xb8, 0x2e, 0x58, 0x68, 0x9a, 0x11, 0xdd, 0x5c, 0x59, 0xfa, 0x39, 0x5d, 0x1a, 0x6f, 0x9b, 0x2c, 0x25, 0xcc, 0x84, 0x99, 0x92, 0x7a, 0xb9, 0xa4, 0x98, 0x28, 0x53, 0x36, 0x52, 0xce, 0xe2, 0x32, 0x32, 0x97, 0x2d, 0x65, 0x69, 0xee, 0x56, 0x44, 0x78, 0x66, 0xf1, 0x0e, 0xba, 0xd5, 0x4e, 0xa3, 0xf0, 0x61, 0x32, 0x0c, 0x6d, 0x3f, 0xef, 0xce, 0x34, 0x55, 0x2b, 0x62, 0x66, 0x96, 0x7b, 0x05, 0x78, 0xd6, 0xc4, 0x55, 0xb9, 0xac, 0x24, 0x66, 0x36, 0x17, 0x12, 0xe7, 0xd0, 0x5b, 0xd3, 0x33, 0x2e, 0xc1, 0x30, 0xd4, 0x5c, 0x6a, 0x49, 0x76, 0x16, 0x2c, 0x79, 0x7a, 0xd1, 0x36, 0x3f, 0x49, 0x69, 0xe4, 0xae, 0x3d, 0xed, 0x6e, 0x36, 0xea, 0x2c, 0xd7, 0xfb, 0x35, 0x66, 0x09, 0xbe, 0x03, 0x1a, 0x79, 0xb2, 0x94 } -, - /* Signature */ - 129, - { 0x03, 0x02, 0x52, 0x90, 0xb4, 0x46, 0x2f, 0x9a, 0xb7, 0x9f, 0xdf, 0xaa, 0x7b, 0x1d, 0x53, 0xa4, 0xd1, 0x27, 0x96, 0xc8, 0x5a, 0xac, 0x28, 0xde, 0xac, 0x21, 0x27, 0xc8, 0x25, 0x2c, 0x2a, 0x62, 0x39, 0x5a, 0x8b, 0x81, 0x9d, 0xfc, 0xee, 0xbf, 0x68, 0xdd, 0x4d, 0xbf, 0xc8, 0x7c, 0x1c, 0xf3, 0xd0, 0x17, 0xa5, 0x3a, 0x26, 0x40, 0x92, 0x50, 0x6b, 0xb6, 0xfc, 0x95, 0x28, 0xe6, 0xf8, 0x76, 0x78, 0x73, 0x6c, 0xa5, 0x6a, 0x14, 0xa1, 0xaa, 0x26, 0x77, 0xa8, 0xb8, 0x4f, 0x5e, 0x03, 0xfa, 0x2c, 0x0c, 0xe4, 0x78, 0x5b, 0x26, 0xba, 0x92, 0xe7, 0x5f, 0xbd, 0xc1, 0x6d, 0x8d, 0x4c, 0x7f, 0xb0, 0xbc, 0x39, 0xa8, 0x8e, 0x13, 0x2e, 0x1e, 0x05, 0xad, 0x00, 0xf1, 0x2f, 0x07, 0x27, 0x06, 0x34, 0x3f, 0x5e, 0xb3, 0xda, 0xb5, 0x11, 0x2e, 0x3b, 0xbe, 0x76, 0xed, 0x0b, 0xbc, 0x7b, 0xdf, 0xcf } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.17", - /* Message to be signed */ - 104, - { 0x7a, 0x76, 0x44, 0x00, 0x1f, 0x80, 0x13, 0xc5, 0x0f, 0xd7, 0x17, 0xb2, 0x44, 0x65, 0x47, 0x7a, 0xbc, 0x34, 0xba, 0x9c, 0x1e, 0x53, 0xad, 0x76, 0x32, 0x64, 0x5a, 0x6e, 0xf7, 0xc8, 0xe6, 0x4e, 0x8e, 0xcb, 0x7b, 0xca, 0x5b, 0x4f, 0x09, 0xb5, 0x2f, 0x4d, 0xd4, 0x8f, 0x8b, 0xb3, 0xdd, 0x33, 0x8c, 0x78, 0x18, 0x2c, 0xe8, 0x6e, 0x8b, 0xfb, 0x1c, 0x68, 0xa8, 0x76, 0xf7, 0x32, 0x16, 0x63, 0x06, 0xa8, 0xea, 0x8c, 0x0d, 0x7c, 0x21, 0xff, 0x26, 0xfa, 0xaf, 0x4a, 0xb4, 0x55, 0x10, 0x36, 0x19, 0x50, 0xc7, 0x6f, 0x95, 0xc2, 0x73, 0x0b, 0x9d, 0x3e, 0x4d, 0x6d, 0x85, 0xea, 0x25, 0x58, 0x4a, 0xc9, 0x67, 0xa0, 0x2b, 0x1e, 0x0a, 0x26 } -, - /* Signature */ - 129, - { 0x03, 0xb2, 0xac, 0xcf, 0xef, 0xf0, 0x63, 0xbd, 0x17, 0x5e, 0xf8, 0xae, 0x0c, 0xb8, 0x5b, 0xdb, 0x80, 0x0d, 0xdc, 0x27, 0x77, 0x6f, 0x8d, 0x3d, 0xc7, 0xe2, 0x1d, 0x19, 0x9b, 0xb8, 0xd6, 0x5f, 0x5b, 0x24, 0x2e, 0x79, 0xd4, 0x5e, 0xcd, 0xcf, 0xf0, 0x2e, 0x80, 0x3f, 0x56, 0x81, 0xff, 0x04, 0x4a, 0x43, 0xb5, 0x5a, 0x9a, 0xac, 0xb1, 0xea, 0xf1, 0x67, 0x84, 0x83, 0x8b, 0x1d, 0x5a, 0x2b, 0x7c, 0x1a, 0x36, 0x4d, 0xc4, 0x05, 0x31, 0x1a, 0x65, 0x55, 0x05, 0x7e, 0xc7, 0x3f, 0x0a, 0x8f, 0x4e, 0x0f, 0xfc, 0xa4, 0x23, 0x02, 0x2c, 0xa6, 0xad, 0x74, 0x46, 0x9b, 0xbd, 0x55, 0x57, 0xbf, 0xa1, 0xcf, 0x4b, 0x95, 0x63, 0x6f, 0x53, 0x45, 0x37, 0xef, 0xf2, 0xfb, 0x16, 0xaf, 0x5e, 0x64, 0x71, 0x82, 0x4a, 0xfe, 0x21, 0x67, 0x91, 0x8c, 0x89, 0xad, 0xe0, 0x1d, 0x52, 0xae, 0xa7, 0x39, 0x9d } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.18", - /* Message to be signed */ - 22, - { 0x12, 0xd2, 0x24, 0xfc, 0x10, 0xa0, 0xfc, 0x40, 0x95, 0x3a, 0xb6, 0xd7, 0x01, 0xc4, 0x16, 0xc3, 0xa8, 0x23, 0x77, 0x2b, 0xea, 0xfa } -, - /* Signature */ - 129, - { 0x03, 0x2c, 0xb5, 0xc8, 0xd6, 0x12, 0x90, 0xb7, 0x66, 0xe6, 0x49, 0x8a, 0xa6, 0x01, 0x49, 0x4d, 0x9f, 0x06, 0x6f, 0x27, 0xa4, 0x7a, 0x28, 0x70, 0xf3, 0x67, 0x89, 0x43, 0x29, 0x1a, 0xb2, 0x2d, 0x3c, 0x45, 0xc0, 0x76, 0xe5, 0x60, 0x81, 0x9d, 0x33, 0xf8, 0x89, 0xf8, 0xcf, 0xab, 0x2d, 0xf6, 0xc6, 0x3c, 0x0c, 0xe1, 0xed, 0x5c, 0xeb, 0x51, 0x54, 0x70, 0x77, 0xc0, 0x82, 0x78, 0x18, 0x7a, 0x82, 0x72, 0xfe, 0xc7, 0xde, 0x95, 0x54, 0xcd, 0xc9, 0x16, 0xca, 0x72, 0xf2, 0xc4, 0x51, 0x43, 0xf2, 0xcf, 0x32, 0x43, 0xc4, 0xbd, 0x20, 0x0c, 0x6e, 0x99, 0x3f, 0x0d, 0xb5, 0xb7, 0x1d, 0x4f, 0x63, 0x77, 0x1e, 0x24, 0x9b, 0x19, 0xb9, 0x97, 0xa6, 0xe5, 0xa9, 0x19, 0xca, 0x10, 0x0c, 0x90, 0xfe, 0xa6, 0xa2, 0xd4, 0xdc, 0x68, 0x81, 0xc3, 0xa0, 0xe1, 0xc1, 0x35, 0x53, 0x83, 0xcf, 0xbb, 0x4b } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.19", - /* Message to be signed */ - 200, - { 0xe0, 0xd4, 0xe2, 0xa5, 0xe9, 0x8a, 0x51, 0x23, 0x7d, 0xa5, 0x08, 0x5d, 0xcf, 0x09, 0x8a, 0xe2, 0xc0, 0x5b, 0x4e, 0x16, 0x92, 0x54, 0xee, 0x6d, 0xda, 0x16, 0x21, 0x0e, 0x4a, 0x3f, 0xe8, 0x1c, 0x72, 0x56, 0xea, 0xef, 0xf2, 0x8c, 0x0c, 0x63, 0xd8, 0x54, 0xb7, 0x84, 0x1a, 0x13, 0x6c, 0x43, 0x60, 0xb2, 0x15, 0xdc, 0xa0, 0x58, 0x74, 0x8a, 0x4b, 0xfa, 0x82, 0x58, 0x68, 0x04, 0x28, 0x21, 0x99, 0x2a, 0x4e, 0xd5, 0xa7, 0xd5, 0x8f, 0x80, 0x12, 0x20, 0x75, 0x49, 0xbe, 0x8c, 0xc9, 0xce, 0xcc, 0x85, 0x01, 0xb9, 0xf8, 0x02, 0x83, 0x0f, 0x86, 0x58, 0x45, 0xce, 0x2e, 0x33, 0x9b, 0xec, 0x28, 0x05, 0x96, 0x11, 0xa1, 0xa0, 0x0b, 0x55, 0x35, 0xc3, 0xc6, 0x15, 0xe9, 0xd2, 0xa1, 0x39, 0x59, 0xf1, 0x01, 0x5c, 0x8b, 0xad, 0x2d, 0x75, 0x3a, 0x59, 0xa6, 0x14, 0x3b, 0x3a, 0x30, 0x58, 0xef, 0x72, 0x25, 0x60, 0xff, 0xe1, 0xc1, 0x84, 0x87, 0xc7, 0x41, 0xda, 0xd6, 0x1f, 0x07, 0xa1, 0x56, 0x42, 0xe7, 0x26, 0xad, 0x18, 0xa9, 0x84, 0x87, 0x5e, 0x68, 0xc6, 0x2e, 0xeb, 0xed, 0xcf, 0x94, 0x6f, 0x13, 0xb8, 0x93, 0xb2, 0x80, 0x8f, 0x78, 0xf9, 0x29, 0x48, 0x07, 0xd7, 0x74, 0x68, 0x54, 0x94, 0xe6, 0xb8, 0x90, 0x40, 0xee, 0xe6, 0xde, 0x1b, 0xa7, 0x18, 0xba, 0x2e, 0x08, 0x2c, 0x3d, 0x5e, 0xf1, 0x7c, 0x10, 0x28, 0xcd, 0x66 } -, - /* Signature */ - 129, - { 0x03, 0xe7, 0x83, 0xbb, 0x53, 0xdb, 0xb6, 0x7c, 0xf2, 0x19, 0x5f, 0xc1, 0xa5, 0x7f, 0x4b, 0x74, 0xc9, 0x82, 0x03, 0xb1, 0xf3, 0xd6, 0x15, 0xfe, 0xb9, 0x20, 0xe4, 0xab, 0xe8, 0x37, 0x58, 0x34, 0x67, 0x2f, 0x4b, 0x8f, 0x55, 0xfe, 0xf2, 0xac, 0xa8, 0xb5, 0xd4, 0x0a, 0xef, 0xe4, 0xef, 0xbd, 0xaa, 0xc3, 0xe8, 0x21, 0x08, 0xd0, 0x7f, 0x2f, 0x1c, 0xf8, 0xc0, 0xd4, 0xdf, 0xf8, 0x1b, 0x39, 0x66, 0xec, 0x69, 0xbe, 0x51, 0x17, 0xac, 0x1a, 0xa6, 0x11, 0x8e, 0x46, 0x0b, 0x92, 0xd8, 0x8f, 0xcd, 0xd9, 0x4d, 0x08, 0xeb, 0xaa, 0x53, 0x62, 0xe5, 0x9d, 0x52, 0x00, 0x4b, 0x43, 0x36, 0x95, 0x14, 0x37, 0xda, 0x0f, 0x51, 0xd6, 0x3e, 0x50, 0x56, 0x15, 0xb4, 0xb7, 0x55, 0x54, 0x08, 0x0b, 0x94, 0x89, 0x7f, 0xef, 0x29, 0x3a, 0x34, 0xc4, 0x04, 0x00, 0xc4, 0xf9, 0x9a, 0xa1, 0xde, 0xfe, 0x35 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 9.20", - /* Message to be signed */ - 111, - { 0x64, 0xb3, 0xba, 0x40, 0x98, 0x03, 0xc9, 0xb9, 0x60, 0xc1, 0xc4, 0x96, 0x2f, 0x51, 0x27, 0x1b, 0xc8, 0x9a, 0x40, 0xbd, 0x40, 0x5c, 0xe5, 0xbc, 0xdc, 0x88, 0x51, 0xd9, 0x7c, 0x9b, 0xe5, 0xe5, 0xb7, 0x46, 0x4e, 0x50, 0xd9, 0x9b, 0x6c, 0xf8, 0xad, 0xf8, 0xff, 0x83, 0x2b, 0x73, 0x7d, 0xe8, 0xb6, 0xff, 0x1a, 0xbe, 0xb8, 0x9d, 0xba, 0xe9, 0x3a, 0x90, 0x63, 0x94, 0x87, 0x80, 0x6b, 0x05, 0x96, 0xcd, 0x31, 0x68, 0x60, 0xf6, 0x8f, 0x00, 0x27, 0xa3, 0x50, 0x3e, 0x15, 0x89, 0x67, 0xaf, 0xdf, 0xf4, 0x69, 0x07, 0x68, 0x17, 0xfc, 0x7d, 0xa3, 0x22, 0x3c, 0xca, 0x1e, 0x6c, 0x48, 0x97, 0x3b, 0x57, 0x0e, 0x0b, 0xf7, 0x4b, 0xb8, 0xb3, 0x96, 0x54, 0x37, 0x2b, 0x7a, 0x1d, 0x6f } -, - /* Signature */ - 129, - { 0x00, 0xd2, 0x00, 0xeb, 0xa0, 0xb6, 0x52, 0x2a, 0xfb, 0x42, 0x0e, 0xbf, 0x16, 0x48, 0x8c, 0x53, 0x03, 0x52, 0xc4, 0x2d, 0xde, 0x81, 0xe7, 0x64, 0xc0, 0xca, 0xdb, 0x43, 0x82, 0x8c, 0xb9, 0x98, 0xd0, 0xa6, 0x0b, 0x23, 0xb5, 0xb6, 0x95, 0x8a, 0x00, 0xfc, 0x25, 0x53, 0xe2, 0x35, 0xe8, 0x57, 0x4e, 0x4d, 0x4f, 0xec, 0x9e, 0x66, 0x8d, 0xba, 0x40, 0xde, 0x66, 0x61, 0xab, 0xe1, 0x3f, 0xcb, 0x84, 0xc1, 0xad, 0x15, 0xc4, 0xb0, 0xcc, 0x0c, 0x6f, 0x4f, 0x0f, 0x83, 0x77, 0x87, 0xc4, 0x32, 0x5f, 0x04, 0x5d, 0x61, 0xee, 0x2c, 0x99, 0x72, 0xb0, 0x1f, 0x32, 0x12, 0x65, 0x4e, 0xc4, 0x26, 0x62, 0x56, 0x7f, 0xaa, 0xc4, 0x0e, 0x9c, 0x0a, 0x28, 0x15, 0x8a, 0x2a, 0x6c, 0x31, 0xf0, 0x1a, 0x84, 0x91, 0x26, 0xdf, 0x9e, 0x96, 0xcb, 0x82, 0x09, 0xbe, 0xb5, 0x81, 0xd6, 0x84, 0x6b, 0xb5, 0xab } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 10: A 1028-bit RSA key pair", -{ - /* Modulus */ - 129, - { 0x0d, 0x5f, 0xb9, 0x9f, 0xde, 0xdf, 0x42, 0x56, 0xe2, 0x8d, 0x4b, 0x41, 0xd7, 0x07, 0xfc, 0x27, 0x63, 0x3e, 0x89, 0x95, 0x15, 0xf4, 0xda, 0xbf, 0x6b, 0x46, 0x27, 0x10, 0xac, 0x11, 0x25, 0x81, 0xfa, 0x73, 0xfa, 0x83, 0x69, 0x58, 0x2c, 0x9f, 0xd4, 0x52, 0x5a, 0x70, 0x16, 0x18, 0x99, 0xdf, 0x63, 0x25, 0x84, 0x9e, 0x5c, 0x43, 0x49, 0x3e, 0x13, 0x35, 0x4e, 0x27, 0x09, 0x55, 0xa4, 0x3e, 0x38, 0x35, 0xb5, 0x99, 0x8e, 0xd4, 0x2a, 0x57, 0x5b, 0xbf, 0x68, 0x8d, 0x69, 0xec, 0x36, 0x6d, 0x2b, 0xa6, 0xf0, 0x50, 0x4c, 0x1e, 0xe1, 0x7d, 0xc5, 0x9b, 0x7e, 0xa0, 0xb4, 0x64, 0x0c, 0xbe, 0xcd, 0x8b, 0xd7, 0x96, 0x2b, 0xe8, 0x56, 0x6f, 0x0e, 0xbd, 0x65, 0x57, 0x43, 0x65, 0x6a, 0x29, 0x12, 0x85, 0xe0, 0x37, 0xbb, 0xfa, 0x86, 0x55, 0x80, 0x1b, 0xd0, 0x31, 0x4f, 0x46, 0x4c, 0x56, 0x91 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 128, - { 0xe7, 0x6f, 0x42, 0xb4, 0x74, 0x02, 0xd5, 0xe0, 0xf9, 0x64, 0x64, 0x92, 0x5a, 0xb4, 0xb3, 0xbc, 0x68, 0x94, 0x30, 0x0e, 0xe4, 0x86, 0xfb, 0x70, 0xce, 0xd4, 0x91, 0xf2, 0xd1, 0xb3, 0x67, 0x80, 0x84, 0xc1, 0xc2, 0xcb, 0x96, 0x95, 0x68, 0xa5, 0xf7, 0x7d, 0xab, 0xcd, 0x40, 0x93, 0x39, 0x37, 0xa8, 0x67, 0xf9, 0x34, 0xfb, 0x2a, 0xea, 0xae, 0x6d, 0x78, 0x67, 0x98, 0xe0, 0xd0, 0x4a, 0x10, 0x6f, 0x54, 0x5e, 0x41, 0xa9, 0xc9, 0x38, 0x33, 0xd8, 0x1f, 0xd4, 0xd7, 0x53, 0x53, 0x17, 0x9c, 0xb0, 0xbc, 0xa4, 0x5e, 0x79, 0xaa, 0xc9, 0x41, 0x34, 0x64, 0xb0, 0x36, 0x7f, 0x31, 0xac, 0x5a, 0xca, 0x56, 0x6f, 0x22, 0x14, 0xbf, 0x51, 0x46, 0xa9, 0x48, 0x4b, 0x87, 0xe4, 0x2b, 0xda, 0xc2, 0xb0, 0x1a, 0x99, 0x67, 0x03, 0x50, 0x6b, 0xe0, 0x77, 0x49, 0xaa, 0x0f, 0xbe, 0xb3, 0xb2, 0x29 } -, - /* Prime 1 */ - 65, - { 0x03, 0xff, 0xaf, 0x4a, 0x61, 0x21, 0xd7, 0x42, 0x0c, 0xfd, 0xa6, 0x4c, 0x41, 0x71, 0x2f, 0x47, 0xc8, 0xf2, 0xd0, 0xd2, 0x5b, 0x17, 0xe9, 0x5b, 0x35, 0x41, 0x42, 0x84, 0x69, 0x10, 0xaf, 0xef, 0xbd, 0xf2, 0x1e, 0x74, 0x23, 0xe8, 0xb3, 0xbe, 0x44, 0xae, 0xd9, 0xaf, 0x5e, 0x49, 0x81, 0x68, 0x5d, 0x3b, 0x9a, 0x1d, 0x59, 0xc9, 0xb9, 0x47, 0xfb, 0x9c, 0x33, 0x9c, 0x9a, 0x31, 0xe5, 0x7b, 0xd9 } -, - /* Prime 2 */ - 65, - { 0x03, 0x58, 0x31, 0xe3, 0xb9, 0x29, 0x3b, 0xcd, 0xa4, 0x51, 0xbe, 0x9d, 0xb1, 0x91, 0x97, 0x48, 0x6a, 0xa2, 0xe2, 0x2e, 0x92, 0x98, 0x65, 0x0f, 0x2b, 0x7f, 0xf4, 0x25, 0x69, 0xeb, 0xec, 0x33, 0xd2, 0x0a, 0x34, 0x98, 0x44, 0xa3, 0x3b, 0xea, 0xa0, 0x93, 0xd1, 0x43, 0x4a, 0xfb, 0x4a, 0x04, 0xa0, 0x4a, 0xed, 0xd3, 0xbb, 0xc4, 0xb3, 0x87, 0x77, 0xa5, 0x5f, 0xe6, 0x50, 0x5b, 0x8c, 0x15, 0x79 } -, - /* Prime exponent 1 */ - 65, - { 0x02, 0x8e, 0x91, 0xd5, 0xab, 0xba, 0x69, 0xdc, 0x50, 0x56, 0x38, 0xe9, 0xf5, 0xc6, 0x9c, 0x06, 0xf8, 0xd5, 0x5a, 0xf5, 0xc7, 0x4d, 0xc8, 0xe7, 0x8b, 0x6c, 0x09, 0x4e, 0x85, 0xa8, 0x27, 0xf7, 0xd2, 0xab, 0x69, 0x11, 0xb6, 0x8c, 0x6b, 0xb2, 0xb4, 0x54, 0x61, 0xd9, 0xa3, 0x1e, 0xb9, 0x62, 0xb4, 0x8b, 0x12, 0x06, 0xc6, 0x8d, 0x18, 0xae, 0x90, 0x92, 0xd6, 0xe5, 0xc2, 0x2b, 0x39, 0xa4, 0x31 } -, - /* Prime exponent 2 */ - 65, - { 0x02, 0x98, 0x04, 0xe1, 0x32, 0xfa, 0x3a, 0xaa, 0x4b, 0x15, 0x26, 0xbb, 0x50, 0x3a, 0xb4, 0xd4, 0x71, 0xf7, 0x6f, 0x69, 0x65, 0x42, 0x11, 0xa6, 0x89, 0x3b, 0x0c, 0x13, 0x74, 0x29, 0x87, 0x9f, 0xcc, 0xf7, 0x23, 0x41, 0x30, 0x82, 0x54, 0x76, 0xac, 0x20, 0xd7, 0xfb, 0xd3, 0x8c, 0x3e, 0x24, 0x86, 0x58, 0x76, 0x48, 0x6e, 0xe8, 0xa7, 0xbf, 0x99, 0x58, 0x45, 0x9e, 0xee, 0x95, 0x81, 0x78, 0x29 } -, - /* Coefficient */ - 65, - { 0x02, 0x11, 0x97, 0x5e, 0x88, 0x56, 0xd4, 0xea, 0x9d, 0x1d, 0xdf, 0x87, 0xb8, 0x7d, 0x39, 0x79, 0x2f, 0x1c, 0xf7, 0xe2, 0xf1, 0x82, 0xf4, 0xa4, 0xe6, 0x91, 0xe5, 0x00, 0x2b, 0x10, 0xa0, 0x8a, 0x46, 0xdc, 0xa1, 0xa4, 0xf4, 0x83, 0x00, 0x85, 0xd8, 0xd4, 0x0b, 0xea, 0x1d, 0xff, 0x11, 0xb0, 0xc0, 0xdf, 0x20, 0x22, 0x43, 0xeb, 0x99, 0x3e, 0x58, 0x0a, 0x94, 0x49, 0x9b, 0x9c, 0xed, 0xd2, 0xbe } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 10.1", - /* Message to be signed */ - 157, - { 0xb2, 0xd5, 0x88, 0x50, 0x9c, 0x2e, 0xac, 0xda, 0x28, 0x1e, 0x76, 0x71, 0xcb, 0xa2, 0xfc, 0xa9, 0x14, 0xef, 0x73, 0xa3, 0xae, 0xa9, 0x20, 0x20, 0x43, 0xea, 0xd6, 0xb7, 0x21, 0x25, 0xc1, 0xb0, 0xd5, 0xcc, 0x15, 0x41, 0x46, 0x20, 0xd5, 0x73, 0xd7, 0xab, 0x0b, 0x3a, 0x8a, 0xb6, 0x6a, 0x92, 0xdf, 0x87, 0x0b, 0x75, 0xb1, 0xc4, 0xd6, 0x8e, 0xa7, 0x05, 0x6b, 0xe0, 0x41, 0x9e, 0xa2, 0x53, 0xe6, 0xb0, 0x8b, 0x12, 0x9e, 0x0f, 0x64, 0xf1, 0x0a, 0xbf, 0x82, 0xe1, 0x67, 0xf8, 0xe3, 0xe9, 0x28, 0x2e, 0x7b, 0xf7, 0x1b, 0x04, 0x3b, 0xaa, 0x2b, 0xa2, 0xd8, 0x75, 0x6d, 0x46, 0xb6, 0xd3, 0x6e, 0x97, 0x34, 0x15, 0xf4, 0xf8, 0xc0, 0xeb, 0x43, 0xfc, 0x60, 0x4c, 0xed, 0x49, 0x3d, 0xc0, 0x46, 0xa2, 0x5a, 0x11, 0x9b, 0xd1, 0x58, 0x1d, 0xbb, 0x59, 0x7c, 0x3e, 0x67, 0xc2, 0xfd, 0xdc, 0x39, 0x6d, 0xf5, 0xd2, 0x3b, 0x7b, 0xa8, 0x0b, 0xd2, 0xe3, 0x12, 0x90, 0xbf, 0xc2, 0x62, 0x25, 0xe0, 0x09, 0x55, 0xa9, 0x8d, 0x91, 0x19, 0x11, 0xa3, 0x99, 0x67, 0x6f, 0xbb } -, - /* Signature */ - 129, - { 0x07, 0x9a, 0x7b, 0x91, 0x6f, 0x67, 0x41, 0x17, 0xf1, 0xd8, 0x77, 0xf4, 0x93, 0x43, 0x25, 0x68, 0x41, 0x48, 0xd5, 0xd0, 0xb0, 0xd5, 0xc2, 0xc6, 0x15, 0x6a, 0x11, 0x15, 0x9b, 0xc0, 0xbd, 0x30, 0xd0, 0xa7, 0x35, 0x34, 0xdc, 0x94, 0x45, 0xeb, 0xe2, 0x06, 0xd6, 0x07, 0x5e, 0xb4, 0xea, 0x7a, 0x7c, 0x04, 0x32, 0xbd, 0x44, 0xb8, 0x3c, 0xfa, 0xe4, 0x68, 0x5a, 0x9e, 0xb9, 0xa9, 0x7c, 0xbb, 0xfa, 0x4e, 0x82, 0xf7, 0x1d, 0xb5, 0x1a, 0xfa, 0x0d, 0x27, 0xcf, 0x27, 0xf0, 0x60, 0x9b, 0xb3, 0xf8, 0x80, 0x64, 0x13, 0x24, 0x7d, 0x5d, 0x49, 0x54, 0xf7, 0x89, 0xa1, 0x01, 0xbf, 0x39, 0x21, 0x72, 0x8b, 0x48, 0x7e, 0x85, 0xfa, 0x3f, 0xd4, 0xdc, 0xd7, 0x2d, 0x04, 0x44, 0x8e, 0x42, 0xd3, 0xec, 0x05, 0xcc, 0x47, 0x5d, 0x74, 0xcb, 0xf7, 0x65, 0xc3, 0x4e, 0x3e, 0xc1, 0x4c, 0xca, 0x50, 0x40 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 10.2", - /* Message to be signed */ - 148, - { 0xca, 0x25, 0x18, 0xa5, 0xa2, 0x24, 0xb2, 0x3d, 0x42, 0x05, 0xd8, 0xdd, 0x7e, 0xb0, 0x4c, 0xbd, 0xcd, 0x0c, 0xcb, 0x82, 0xbc, 0x87, 0x96, 0x1d, 0x85, 0x9d, 0x66, 0x00, 0xb1, 0xac, 0x3e, 0x25, 0xa9, 0x40, 0x7b, 0x6c, 0x06, 0x50, 0x27, 0xc0, 0x40, 0x81, 0xf4, 0x45, 0xa2, 0x30, 0xab, 0x93, 0x08, 0xe7, 0x55, 0xf3, 0x3a, 0x75, 0x97, 0x73, 0xbe, 0x6b, 0x96, 0x9e, 0x0e, 0xa7, 0x74, 0xaa, 0x6e, 0x33, 0x4f, 0xb6, 0x04, 0x18, 0x42, 0x75, 0xf3, 0x6a, 0x03, 0x1d, 0xae, 0xa6, 0x51, 0x86, 0x97, 0x79, 0x5b, 0xd6, 0xa7, 0xd6, 0x69, 0x7b, 0x40, 0x6d, 0xa2, 0xce, 0xce, 0x15, 0xdc, 0x11, 0x3d, 0x85, 0x44, 0x98, 0x85, 0x61, 0x13, 0x1d, 0x4f, 0xc6, 0xf6, 0xe3, 0xc5, 0x80, 0xd8, 0x06, 0x80, 0x7d, 0xf2, 0xc6, 0x85, 0x65, 0x09, 0x54, 0x2e, 0x4e, 0xd3, 0x9d, 0x34, 0x6e, 0xba, 0x15, 0x97, 0x6a, 0x8f, 0xd0, 0x1d, 0x79, 0x41, 0xb0, 0x16, 0x56, 0x06, 0xc7, 0x61, 0x76, 0x64, 0x9a, 0x16, 0x10, 0x05, 0xa0 } -, - /* Signature */ - 129, - { 0x00, 0xbe, 0xb9, 0x21, 0xce, 0x74, 0x89, 0x81, 0x9d, 0x2f, 0x85, 0xc7, 0x88, 0x39, 0xa2, 0x7d, 0x7e, 0x19, 0xea, 0x0a, 0x76, 0x4a, 0xc5, 0x31, 0x01, 0xe8, 0x6f, 0x31, 0x70, 0xa7, 0x6e, 0x31, 0x8a, 0x7e, 0xe8, 0x9b, 0x1f, 0x5e, 0x23, 0xe7, 0xe2, 0xdb, 0x96, 0x66, 0xeb, 0x43, 0x91, 0xb2, 0x79, 0x2a, 0x57, 0x67, 0xee, 0x35, 0x9b, 0x5c, 0x71, 0xe2, 0x74, 0x79, 0x10, 0xc8, 0x2c, 0x60, 0x83, 0xd6, 0xd3, 0x48, 0x29, 0xb9, 0x6f, 0xa5, 0xa2, 0xec, 0x0f, 0x62, 0xf1, 0xbc, 0xda, 0x5d, 0x78, 0xf8, 0xdc, 0x3c, 0x65, 0x0b, 0x94, 0xe3, 0x2b, 0x38, 0x60, 0xda, 0x5f, 0xc5, 0xb1, 0x7f, 0xbf, 0x68, 0x7e, 0xc0, 0x07, 0x5a, 0x9c, 0x73, 0xdc, 0x1e, 0x98, 0xd1, 0xf3, 0x6a, 0xae, 0xc4, 0x49, 0x3f, 0x78, 0x91, 0xe3, 0xab, 0x08, 0xe2, 0x04, 0x2d, 0x8b, 0x1e, 0x46, 0x2e, 0x8c, 0x4c, 0x33 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.3", - /* Message to be signed */ - 131, - { 0xd4, 0x33, 0xd1, 0x5b, 0x2d, 0x61, 0xb8, 0x6a, 0xc8, 0xec, 0x0d, 0xae, 0xba, 0x65, 0xe1, 0x1d, 0xed, 0x3c, 0x38, 0x84, 0x25, 0x25, 0xe4, 0xb7, 0xc8, 0xe4, 0x53, 0xb0, 0xf5, 0x53, 0xcb, 0x4e, 0xb8, 0x75, 0xa6, 0x9d, 0x78, 0x16, 0xf5, 0x4c, 0x87, 0x79, 0x3e, 0x3a, 0xbb, 0x79, 0xfc, 0x55, 0x11, 0x35, 0x37, 0xb4, 0x76, 0x29, 0x65, 0xcf, 0xee, 0x58, 0x6e, 0x0a, 0x17, 0x99, 0x78, 0x51, 0xe3, 0xdc, 0x9e, 0xaf, 0x6f, 0x1c, 0x9c, 0x2e, 0x98, 0xc9, 0x61, 0x3e, 0x3b, 0xbe, 0xa0, 0x13, 0xff, 0x58, 0x61, 0x6b, 0x2a, 0xb0, 0x5a, 0xb3, 0x24, 0xa9, 0xc5, 0xff, 0x4c, 0x5e, 0xfd, 0xd9, 0x90, 0xdd, 0x97, 0xd9, 0x16, 0x93, 0xc1, 0xeb, 0xd4, 0xc0, 0x9c, 0x73, 0x21, 0x16, 0xc8, 0xdf, 0xc3, 0xec, 0x51, 0x5c, 0x20, 0x53, 0x2c, 0xba, 0x7e, 0x47, 0x58, 0xc6, 0x8a, 0x69, 0xcf, 0xa0, 0xac, 0x31, 0x86 } -, - /* Signature */ - 129, - { 0x03, 0xae, 0x3b, 0xe1, 0xc7, 0x44, 0x6a, 0xd3, 0xef, 0xd8, 0xba, 0xe6, 0x1b, 0x3d, 0x32, 0xd3, 0xef, 0x15, 0x24, 0x82, 0xb1, 0xbf, 0xee, 0x31, 0x2f, 0xe9, 0xe6, 0xbe, 0xee, 0xab, 0x8c, 0xbd, 0x08, 0xf4, 0xc8, 0xf9, 0xcf, 0x06, 0x7d, 0xea, 0xb6, 0xba, 0xc7, 0xc0, 0xfe, 0xcd, 0x87, 0xbb, 0xab, 0xc7, 0xf6, 0x79, 0x8c, 0x77, 0xef, 0x1c, 0x3f, 0xd8, 0xbc, 0xa2, 0x8c, 0xf9, 0xec, 0xe6, 0x56, 0x79, 0x5f, 0x60, 0xb3, 0x78, 0x75, 0xea, 0xbe, 0xf8, 0x21, 0x53, 0xa1, 0x2b, 0xc7, 0xfd, 0xe3, 0xfb, 0xc9, 0xe5, 0xe1, 0x48, 0xf4, 0xe1, 0x6c, 0xb7, 0x2a, 0x77, 0x3d, 0x9d, 0xd0, 0x23, 0x17, 0xf7, 0x0b, 0x33, 0x91, 0x40, 0x08, 0x05, 0xe8, 0x5e, 0x7a, 0x23, 0x56, 0x7b, 0x34, 0xaa, 0x65, 0xa3, 0x5f, 0x74, 0x41, 0x70, 0xaf, 0xfc, 0xb3, 0x23, 0x37, 0x1a, 0xd2, 0xab, 0x9f, 0x1e, 0x4d } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.4", - /* Message to be signed */ - 52, - { 0x7d, 0x0f, 0x5b, 0xd7, 0x90, 0x0f, 0x1e, 0x65, 0x65, 0x4e, 0x6c, 0x7e, 0xeb, 0x06, 0x4c, 0xb8, 0x28, 0xf3, 0x55, 0xd6, 0xde, 0x9b, 0xf0, 0xd3, 0x47, 0x83, 0xff, 0xcb, 0xe8, 0x0a, 0xb1, 0xb8, 0xae, 0x07, 0xb7, 0xf1, 0xe3, 0xf5, 0xa3, 0x20, 0xdd, 0x9b, 0x8b, 0x76, 0xbe, 0x0e, 0x97, 0x72, 0xde, 0x19, 0xa8, 0xd3 } -, - /* Signature */ - 129, - { 0x09, 0xe7, 0xa5, 0x30, 0x41, 0x71, 0xda, 0x63, 0x8b, 0xe7, 0x60, 0x1f, 0xbf, 0xf6, 0xe4, 0x95, 0x36, 0xf3, 0x36, 0x60, 0x82, 0x25, 0x3a, 0xbc, 0x1d, 0xb5, 0xd1, 0xb6, 0x54, 0x93, 0xda, 0x59, 0x5e, 0xc9, 0x3c, 0x37, 0xf5, 0x89, 0x0b, 0x5f, 0x47, 0x15, 0xbd, 0x5e, 0x80, 0xc0, 0xbb, 0xc5, 0xc6, 0x3b, 0x74, 0xaf, 0x2e, 0x60, 0x43, 0x91, 0x32, 0xd2, 0x52, 0x13, 0x75, 0x0b, 0xc1, 0xde, 0x30, 0x2e, 0x3e, 0x8b, 0x83, 0xda, 0xd2, 0xde, 0x0d, 0xff, 0xc4, 0xfa, 0xab, 0x40, 0x56, 0xdd, 0x7c, 0x40, 0x5e, 0x04, 0xd5, 0x94, 0x24, 0x53, 0x65, 0x9d, 0x49, 0x0f, 0x3c, 0x3d, 0xaa, 0x7d, 0x3f, 0x11, 0x70, 0x11, 0x81, 0x6b, 0x56, 0x59, 0x01, 0x04, 0xde, 0x7f, 0x9c, 0x05, 0x23, 0x73, 0xe2, 0xdd, 0xe4, 0x14, 0x49, 0x04, 0x27, 0xa5, 0x89, 0x64, 0x49, 0x3f, 0xf4, 0x5f, 0x08, 0xa6, 0xe8 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.5", - /* Message to be signed */ - 14, - { 0xd9, 0x6a, 0xa0, 0x91, 0xc1, 0x60, 0xb5, 0x52, 0xb1, 0x6d, 0xf0, 0x65, 0x8f, 0xa8 } -, - /* Signature */ - 129, - { 0x0b, 0x69, 0x75, 0x4e, 0xd6, 0xd7, 0xa7, 0xd2, 0xd8, 0x5b, 0x2c, 0x7a, 0x30, 0x6c, 0x78, 0xd6, 0x3d, 0x0f, 0xfa, 0x43, 0x8f, 0x43, 0xbe, 0xec, 0x3a, 0x02, 0x86, 0xce, 0x57, 0xe7, 0xe0, 0xf8, 0x5c, 0xa4, 0x30, 0xe6, 0x39, 0x08, 0xc0, 0xfa, 0x58, 0x4b, 0xa2, 0x50, 0x5f, 0x8c, 0x94, 0x65, 0x6e, 0xc0, 0x24, 0x94, 0xbb, 0x03, 0x2f, 0x92, 0x0c, 0x4b, 0x6b, 0x8c, 0x94, 0x3e, 0x6b, 0xe9, 0x2f, 0x57, 0x8a, 0xa8, 0xcc, 0xdf, 0xaa, 0xc0, 0xa5, 0x4b, 0x8a, 0x9c, 0x0d, 0xf5, 0x48, 0x27, 0x1f, 0x89, 0x73, 0xc9, 0xff, 0xa2, 0xa2, 0x0c, 0x84, 0x76, 0x2e, 0x90, 0x17, 0xe7, 0x45, 0x2e, 0x5d, 0x74, 0xda, 0x69, 0x0f, 0x75, 0xc0, 0x99, 0xab, 0x91, 0xe2, 0xa7, 0x96, 0x3b, 0xc5, 0x37, 0xf9, 0xc2, 0x4c, 0xcc, 0x3c, 0x41, 0x8c, 0x6e, 0x98, 0x58, 0x61, 0xd9, 0x3d, 0xaa, 0xb2, 0xe6, 0x13 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.6", - /* Message to be signed */ - 215, - { 0x56, 0xf0, 0x48, 0x64, 0x5a, 0x49, 0xfa, 0x01, 0x41, 0xf4, 0xd6, 0x74, 0xaa, 0xfc, 0xf2, 0xff, 0xfa, 0x83, 0xf9, 0xb4, 0x52, 0xf1, 0xfe, 0xed, 0x43, 0x05, 0x7c, 0xac, 0x27, 0x67, 0x5e, 0xa1, 0xa1, 0x41, 0xd8, 0x7f, 0x92, 0xf9, 0xce, 0xbf, 0x6e, 0xe4, 0xf7, 0x8f, 0x8e, 0xd4, 0xc3, 0xa2, 0x9d, 0xeb, 0x72, 0x97, 0x47, 0xb4, 0xf9, 0x8e, 0x4c, 0x75, 0x90, 0xaa, 0xa8, 0xd5, 0x6d, 0xbc, 0x61, 0xd3, 0x8c, 0xb5, 0x62, 0x22, 0x26, 0xf6, 0x8e, 0x43, 0xf9, 0xc4, 0xf4, 0xc0, 0x39, 0x98, 0xae, 0xe9, 0x09, 0x34, 0x39, 0x5b, 0xc8, 0x40, 0xc8, 0x6d, 0xcc, 0x88, 0x74, 0x77, 0x6f, 0x43, 0x03, 0x9f, 0x56, 0xa8, 0x9d, 0x24, 0xbd, 0xc4, 0xb3, 0x05, 0xdf, 0x09, 0xe5, 0xca, 0x0c, 0x05, 0x12, 0xad, 0x6d, 0x15, 0x71, 0x91, 0x9a, 0x3d, 0xb3, 0xa6, 0xbd, 0x98, 0xb7, 0x82, 0x0a, 0xda, 0x08, 0x69, 0xd2, 0x25, 0xa4, 0x04, 0x02, 0x7a, 0xcb, 0x6d, 0x76, 0x7f, 0xc3, 0x14, 0xdb, 0x37, 0x7e, 0x8d, 0x1d, 0xb6, 0xef, 0x0a, 0xf2, 0x94, 0x54, 0xdb, 0x2b, 0xd4, 0xc1, 0xce, 0xe0, 0x13, 0xa5, 0x97, 0x43, 0x48, 0x6d, 0x32, 0x32, 0x95, 0x83, 0xcf, 0x80, 0x11, 0x3c, 0xda, 0xa1, 0x0e, 0x4f, 0x2c, 0xea, 0x6c, 0x4f, 0x9f, 0xc6, 0xe4, 0xe2, 0x71, 0x6e, 0xde, 0x85, 0x72, 0x7c, 0x3a, 0xfd, 0x43, 0x49, 0x46, 0x09, 0x77, 0x76, 0x30, 0xee, 0x33, 0x63, 0x7e, 0xa3, 0x5c, 0x9b, 0x4f, 0x68, 0x8e, 0x49, 0x2c, 0x3c, 0x64, 0x0d } -, - /* Signature */ - 129, - { 0x06, 0x66, 0xef, 0x71, 0xe2, 0xc8, 0xa1, 0xeb, 0x1c, 0x46, 0x40, 0x3f, 0xd2, 0x3e, 0x52, 0x18, 0x83, 0xad, 0xa1, 0xb9, 0xbc, 0x5f, 0xbd, 0x35, 0x3b, 0xbb, 0x3c, 0x3d, 0xfb, 0x57, 0x0a, 0xc1, 0xc7, 0x21, 0xfa, 0xf3, 0xf5, 0x97, 0x32, 0xf2, 0x13, 0x37, 0x73, 0x80, 0x39, 0x79, 0x48, 0x46, 0x2f, 0xd2, 0x0a, 0x3f, 0x0e, 0x5e, 0x08, 0x91, 0xa6, 0xb0, 0x7c, 0x31, 0xb3, 0x60, 0xaa, 0xa9, 0x65, 0xe2, 0xf0, 0x93, 0x0e, 0xb3, 0x41, 0xee, 0x77, 0xec, 0x43, 0x90, 0x65, 0xc0, 0xaa, 0xd9, 0x17, 0x87, 0xab, 0x6d, 0x2e, 0x6c, 0xde, 0xdd, 0xf5, 0x54, 0x81, 0x65, 0x1a, 0xeb, 0xbf, 0x9d, 0x11, 0xd5, 0x4b, 0xc1, 0x13, 0x26, 0x18, 0x3e, 0xbf, 0xf4, 0x9b, 0xd4, 0x0b, 0xdf, 0x76, 0xd7, 0xef, 0x69, 0xb6, 0x7e, 0xa3, 0x96, 0x8f, 0xa8, 0x49, 0x03, 0x2f, 0xb8, 0x24, 0xb6, 0xdd, 0x6a, 0xe3 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.7", - /* Message to be signed */ - 165, - { 0x79, 0xda, 0x89, 0xe3, 0x55, 0xd5, 0x51, 0xa0, 0xe0, 0x31, 0xf4, 0xfb, 0x71, 0xab, 0x6f, 0x41, 0x44, 0xc4, 0x76, 0x2e, 0x07, 0xd0, 0x64, 0x14, 0x33, 0xcb, 0x5e, 0xc8, 0x61, 0x34, 0x96, 0x3f, 0x7d, 0x2c, 0x4d, 0xc7, 0xbe, 0xb5, 0xc6, 0xd4, 0x61, 0x57, 0xc6, 0xc4, 0xe1, 0x4a, 0x4b, 0x9c, 0x7a, 0x2c, 0x0d, 0x46, 0x0f, 0x1f, 0xc0, 0x62, 0xea, 0x1b, 0x4f, 0x98, 0x74, 0xd5, 0xb1, 0xc2, 0x9a, 0xe2, 0xf2, 0xa5, 0xb3, 0x90, 0x62, 0xe4, 0x12, 0x12, 0xe6, 0x5c, 0x85, 0xc2, 0x8e, 0x76, 0x75, 0x89, 0x96, 0x5d, 0x17, 0x10, 0xad, 0x5b, 0xc7, 0x6f, 0xa5, 0xa6, 0x72, 0x9a, 0x06, 0xfd, 0x49, 0x6e, 0x2e, 0x09, 0x97, 0xe5, 0x73, 0x37, 0xbd, 0x51, 0x6e, 0x6b, 0xc7, 0x9b, 0xe9, 0xe0, 0x70, 0xaa, 0x7b, 0x86, 0xc2, 0xdd, 0xf1, 0x4f, 0x94, 0x98, 0x5f, 0xe1, 0x58, 0x2a, 0x29, 0x2c, 0xd1, 0x39, 0x34, 0xb3, 0xc3, 0x8d, 0xfe, 0x59, 0x77, 0xed, 0x1d, 0x9f, 0x8a, 0xd3, 0x24, 0xc0, 0xdc, 0x07, 0xe5, 0x85, 0x3c, 0x7e, 0x48, 0x90, 0xbf, 0xbd, 0xc1, 0xa0, 0x1e, 0xcd, 0x72, 0xc5, 0xff, 0x68, 0xa0, 0x2f, 0x1e } -, - /* Signature */ - 129, - { 0x0a, 0x06, 0x82, 0xf7, 0x42, 0xe7, 0x43, 0xe1, 0xc7, 0xda, 0xba, 0xac, 0x61, 0x8a, 0x78, 0x6f, 0x28, 0xed, 0x13, 0xa6, 0x58, 0x7a, 0xdf, 0xc3, 0x3c, 0x98, 0x29, 0xd7, 0x52, 0xc1, 0x3e, 0xf2, 0x7a, 0x00, 0xc7, 0xe6, 0xd4, 0x5e, 0x27, 0x17, 0x1a, 0x58, 0x41, 0x77, 0x1d, 0x78, 0x69, 0x8c, 0x6c, 0xc6, 0x67, 0x78, 0xb8, 0xc0, 0x93, 0x38, 0xe3, 0x5b, 0x9b, 0x6f, 0x59, 0xc0, 0x64, 0xce, 0xb3, 0xeb, 0x20, 0xce, 0x90, 0x9a, 0x5c, 0x6c, 0xea, 0xae, 0xbb, 0xe9, 0x3e, 0x86, 0xc7, 0xc5, 0xff, 0x4a, 0x39, 0x17, 0xf1, 0x26, 0x81, 0x96, 0x32, 0xcf, 0x96, 0xfa, 0xb1, 0xd3, 0x91, 0x73, 0xa7, 0xae, 0x7f, 0xc2, 0xff, 0x5c, 0x0f, 0xb4, 0x09, 0x05, 0x35, 0xda, 0xdb, 0x58, 0xd8, 0x7d, 0x0d, 0xa3, 0xdb, 0x32, 0xec, 0xec, 0x13, 0x71, 0x8b, 0x3a, 0xc5, 0xc3, 0x0b, 0xa8, 0x02, 0xe3, 0x8b } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.8", - /* Message to be signed */ - 92, - { 0xe6, 0x9a, 0xc9, 0x43, 0x3e, 0x6c, 0x28, 0xac, 0x53, 0xf8, 0x03, 0x4a, 0x86, 0x8d, 0xa9, 0x88, 0x3e, 0x31, 0x9e, 0x82, 0xe6, 0xbc, 0x2e, 0x49, 0x45, 0x5e, 0x6e, 0x4f, 0x09, 0x8b, 0x53, 0xf2, 0x87, 0xa8, 0x58, 0xda, 0x1d, 0x87, 0x6a, 0x9a, 0x5a, 0x6a, 0x9f, 0xc1, 0x4f, 0xd2, 0x42, 0x38, 0xcd, 0x4e, 0x4b, 0x57, 0x31, 0x07, 0x7a, 0x4d, 0xbd, 0xd5, 0x03, 0x8a, 0x9b, 0xc1, 0xf5, 0xde, 0xf4, 0x3f, 0xec, 0x77, 0xf6, 0x7e, 0xb0, 0x62, 0xfa, 0xef, 0xef, 0x7d, 0x04, 0x29, 0x23, 0x8b, 0x25, 0xd0, 0x31, 0x85, 0x78, 0x96, 0x62, 0x3a, 0x3f, 0x1d, 0x37, 0xbf } -, - /* Signature */ - 129, - { 0x08, 0xa0, 0x20, 0xe4, 0x20, 0x98, 0x78, 0xf1, 0xe6, 0x37, 0xad, 0x59, 0xda, 0xaf, 0x83, 0x5d, 0xaf, 0x4c, 0xa6, 0x64, 0x84, 0x47, 0x94, 0xc1, 0xc6, 0x48, 0xf0, 0xe2, 0x23, 0x3d, 0xba, 0x75, 0x48, 0xbd, 0x16, 0x1f, 0x0c, 0x0a, 0x18, 0x24, 0xd7, 0x62, 0x03, 0x1a, 0x41, 0x75, 0x72, 0x84, 0x2f, 0x8e, 0x64, 0x4a, 0xa9, 0x3f, 0x9d, 0x91, 0xdd, 0x77, 0x09, 0xe1, 0x6a, 0x42, 0x9c, 0xc1, 0x43, 0x90, 0x3e, 0xf4, 0xf8, 0x37, 0xa4, 0x58, 0x39, 0x6b, 0xca, 0xc2, 0x40, 0x92, 0xb0, 0x17, 0x24, 0xc6, 0xfe, 0x3d, 0xd1, 0xad, 0x24, 0x3f, 0x3f, 0x70, 0xb5, 0xae, 0x6f, 0xaa, 0x09, 0xf3, 0x70, 0xca, 0xa5, 0x12, 0x10, 0x4b, 0x91, 0x76, 0x06, 0x0d, 0xf2, 0xbf, 0x12, 0x1c, 0xbc, 0xe9, 0x19, 0x8e, 0xc2, 0xfe, 0x45, 0xa5, 0x9e, 0xbd, 0xdc, 0x46, 0x75, 0x32, 0xb5, 0xaf, 0xb9, 0xb2, 0x35 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.9", - /* Message to be signed */ - 152, - { 0x45, 0xe0, 0x90, 0x56, 0xa2, 0x8e, 0x4b, 0x2e, 0x7c, 0x11, 0xf6, 0x5e, 0x68, 0x8a, 0x1e, 0x3c, 0x33, 0xf0, 0xe5, 0x2c, 0x9a, 0x03, 0x6c, 0x09, 0xd8, 0x1d, 0xe5, 0xa6, 0xda, 0xb5, 0x8d, 0x4d, 0x55, 0xcf, 0x41, 0x1b, 0x53, 0xad, 0x64, 0x6e, 0x83, 0xa3, 0x4b, 0x0c, 0x08, 0xc2, 0x21, 0xae, 0x03, 0x76, 0xab, 0x76, 0xa7, 0x9d, 0x1f, 0xee, 0x67, 0x1a, 0x58, 0x44, 0x20, 0x56, 0x4f, 0x8e, 0x85, 0x2e, 0xb6, 0xf2, 0xd4, 0x27, 0xae, 0xe0, 0xa0, 0x96, 0xdd, 0x72, 0xdb, 0xe8, 0x50, 0x7c, 0x67, 0x7f, 0x8a, 0xa0, 0x0e, 0xb7, 0xc2, 0x5d, 0xfb, 0x0a, 0x49, 0xdd, 0x88, 0xa6, 0xc7, 0x84, 0x76, 0xb8, 0x00, 0x11, 0xb6, 0x82, 0x8b, 0x3a, 0xaf, 0x46, 0x47, 0x79, 0x44, 0x22, 0xba, 0x6b, 0xd6, 0x3b, 0x7a, 0xb0, 0xe7, 0xda, 0xfb, 0xd3, 0x6f, 0x6c, 0x41, 0xde, 0xa0, 0x3d, 0x73, 0x22, 0x35, 0x64, 0x96, 0x94, 0x60, 0xd9, 0x28, 0x54, 0x0b, 0x73, 0x92, 0x57, 0xe7, 0x0b, 0xb6, 0x8d, 0x5c, 0x65, 0x3c, 0x37, 0x96, 0x94, 0x58, 0x95 } -, - /* Signature */ - 129, - { 0x08, 0x71, 0x7d, 0x50, 0x86, 0xa6, 0x45, 0x3b, 0xde, 0xff, 0x77, 0xd4, 0xc2, 0xb8, 0x56, 0xe3, 0xba, 0x99, 0x0b, 0xab, 0xf6, 0x97, 0x01, 0xdf, 0x6c, 0xa0, 0xa3, 0xb3, 0xa8, 0x1b, 0x55, 0x69, 0x7d, 0x31, 0x88, 0x9d, 0x10, 0x0d, 0x68, 0x95, 0xc9, 0x7f, 0x0a, 0x56, 0xb4, 0x71, 0x68, 0xc9, 0x8d, 0xa6, 0x2e, 0x59, 0xec, 0x79, 0xd7, 0xae, 0xab, 0x2f, 0x9a, 0x57, 0x07, 0x46, 0x98, 0x8a, 0x26, 0xf4, 0x23, 0x57, 0x6c, 0x70, 0x3f, 0xd8, 0x41, 0xae, 0x51, 0xc9, 0xc2, 0x29, 0xa2, 0xe9, 0xc2, 0x5f, 0xe9, 0x4c, 0x5b, 0x6c, 0xe2, 0xfa, 0x64, 0x54, 0x12, 0xbe, 0xe6, 0x59, 0xfa, 0xf6, 0x09, 0xa3, 0x2e, 0xb2, 0xc0, 0x5b, 0xee, 0xab, 0xaa, 0x4f, 0x58, 0xca, 0xac, 0x31, 0x33, 0xe5, 0xea, 0xaa, 0x27, 0x34, 0x4d, 0x30, 0xee, 0xca, 0x22, 0xc6, 0xeb, 0xd8, 0xd9, 0xe3, 0x44, 0x41, 0x0e } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.10", - /* Message to be signed */ - 141, - { 0xb8, 0x1c, 0x8b, 0xc4, 0xac, 0x1f, 0xd9, 0x71, 0xb2, 0x1f, 0x02, 0x7e, 0x06, 0xf4, 0xd8, 0x7b, 0x34, 0xd5, 0x76, 0x9d, 0x23, 0xc8, 0x59, 0x9d, 0x1f, 0x15, 0x7b, 0x08, 0xa7, 0xf9, 0x2e, 0x34, 0x19, 0xfe, 0xc4, 0xc8, 0xc1, 0xb3, 0x4c, 0xa4, 0x63, 0xc7, 0x68, 0xb7, 0x2e, 0x07, 0xf9, 0xda, 0xbc, 0x3c, 0xbb, 0xdd, 0x8b, 0x56, 0x17, 0xcc, 0x25, 0x28, 0x75, 0x00, 0x2a, 0x1a, 0x13, 0x92, 0xaf, 0x0f, 0xaf, 0xc0, 0x8c, 0x72, 0x11, 0x75, 0x8f, 0x3c, 0x04, 0x20, 0x50, 0xad, 0x73, 0x1b, 0x63, 0x6c, 0x0e, 0x83, 0x19, 0x1a, 0x79, 0xde, 0x5a, 0xa2, 0xcb, 0x94, 0xdc, 0x8b, 0x0b, 0xdd, 0xe7, 0x5d, 0xb7, 0xd0, 0xc8, 0xba, 0xfb, 0x42, 0x23, 0xd3, 0x47, 0xb0, 0x24, 0xb3, 0xd9, 0xc6, 0xb2, 0x39, 0x61, 0x9b, 0x5d, 0x8b, 0x63, 0x46, 0xea, 0x86, 0xfb, 0x8f, 0x24, 0xc5, 0x84, 0xdc, 0x1a, 0x47, 0x79, 0x1c, 0xb7, 0xc8, 0xc7, 0xeb, 0xf1, 0xed, 0x43, 0x8b, 0x88 } -, - /* Signature */ - 129, - { 0x01, 0xb9, 0xf4, 0x33, 0x94, 0xc7, 0xcb, 0x88, 0x5b, 0xfd, 0xcc, 0x3c, 0x84, 0x96, 0x22, 0x23, 0xe8, 0xaa, 0xa9, 0x4c, 0x6c, 0x9b, 0x79, 0x05, 0x40, 0x1d, 0x24, 0xf0, 0xdc, 0x44, 0x3b, 0x2e, 0x8d, 0x84, 0x0e, 0x28, 0xa9, 0x5f, 0xa2, 0x2e, 0x1a, 0xe3, 0x6f, 0xfe, 0x08, 0x96, 0x6f, 0x38, 0xd3, 0x87, 0x14, 0xcf, 0x68, 0xda, 0x8d, 0xb2, 0x37, 0x64, 0xb8, 0x8c, 0x4b, 0xb2, 0xbe, 0x4f, 0xd3, 0xda, 0x9c, 0xcd, 0x1b, 0x50, 0x69, 0x42, 0xaa, 0x9d, 0x73, 0xfc, 0x09, 0x38, 0x2d, 0xc3, 0x30, 0x83, 0x14, 0x70, 0x6e, 0x6c, 0xe2, 0x7f, 0x00, 0x76, 0x1f, 0x3c, 0x9b, 0xd5, 0x4f, 0xa0, 0xe3, 0x1c, 0x96, 0x71, 0x9a, 0xfb, 0xf0, 0x76, 0x3e, 0x35, 0xca, 0xd8, 0x89, 0xb7, 0x2e, 0x13, 0xbd, 0x12, 0xb7, 0x6d, 0x6f, 0x20, 0x20, 0xfa, 0xf6, 0x1d, 0xd3, 0xd7, 0x08, 0x22, 0x8d, 0xf0, 0x6d } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.11", - /* Message to be signed */ - 31, - { 0xd0, 0x32, 0x28, 0x83, 0xe5, 0x98, 0x16, 0x3d, 0x72, 0x20, 0x36, 0xda, 0x3e, 0x63, 0x2a, 0xa6, 0x55, 0x97, 0xac, 0xbc, 0xd1, 0xf4, 0x76, 0x03, 0x10, 0x96, 0x96, 0xf9, 0xb3, 0x9f, 0xdc } -, - /* Signature */ - 129, - { 0x07, 0x8d, 0x17, 0xab, 0x8e, 0x6f, 0xf0, 0xbe, 0x50, 0xb3, 0x53, 0x9e, 0xb0, 0x3a, 0xe8, 0xf0, 0x90, 0x3b, 0x7a, 0x07, 0x74, 0x81, 0x78, 0x1f, 0xb0, 0xb1, 0xf0, 0x9e, 0xdc, 0xf7, 0x78, 0x86, 0x31, 0x2a, 0xd6, 0xc0, 0x60, 0x27, 0x4f, 0x0c, 0x38, 0x9c, 0x16, 0x31, 0x40, 0x40, 0xc8, 0xd7, 0xd9, 0x90, 0x9c, 0xb7, 0x5d, 0xf1, 0x8c, 0x82, 0xd6, 0x2d, 0xd3, 0x4e, 0xb5, 0x9c, 0x6a, 0x87, 0xd3, 0xc4, 0x6a, 0x7e, 0xf7, 0x47, 0x4a, 0x5e, 0x44, 0x7f, 0x77, 0x44, 0xa6, 0xa9, 0x2f, 0x59, 0x90, 0xea, 0xec, 0x7b, 0xfb, 0x00, 0x84, 0x4d, 0x68, 0x4d, 0x30, 0x7d, 0xdb, 0x49, 0x81, 0x89, 0x41, 0x49, 0xe7, 0x52, 0xbf, 0xbe, 0x2e, 0x77, 0x05, 0x7d, 0xa7, 0x60, 0x54, 0x69, 0xaf, 0x7f, 0xfb, 0x67, 0x27, 0xa9, 0x98, 0x1b, 0x94, 0x39, 0xca, 0xa5, 0xd8, 0x0e, 0x6a, 0xe3, 0xb3, 0xd6, 0x51 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.12", - /* Message to be signed */ - 20, - { 0xe8, 0x74, 0x2f, 0x04, 0xb5, 0x65, 0x4d, 0x92, 0x88, 0xb2, 0x31, 0xa4, 0x7a, 0x36, 0x58, 0x39, 0xbb, 0x01, 0xbe, 0x87 } -, - /* Signature */ - 129, - { 0x09, 0xb7, 0x53, 0x06, 0xa7, 0x21, 0x2e, 0xa6, 0xf4, 0x7e, 0xb0, 0xcc, 0xf4, 0xe2, 0xe0, 0xd6, 0xf8, 0xf3, 0xab, 0xdb, 0x9c, 0xdc, 0xfa, 0xad, 0xbe, 0x51, 0x92, 0x2f, 0x92, 0xea, 0x62, 0x62, 0x3c, 0x58, 0xea, 0x74, 0xea, 0x1a, 0x24, 0x7c, 0x9d, 0x73, 0x1f, 0x2c, 0x03, 0x35, 0x36, 0xb3, 0x52, 0x73, 0xc7, 0x17, 0x49, 0x5f, 0x32, 0x5a, 0x60, 0x40, 0x5b, 0xd5, 0xf5, 0xe4, 0x05, 0xb6, 0x80, 0x27, 0x9e, 0x75, 0x21, 0x60, 0x47, 0x87, 0x40, 0x45, 0x72, 0x16, 0xdc, 0x92, 0x9d, 0xdd, 0x65, 0xde, 0xa5, 0x05, 0x53, 0x55, 0x46, 0xe4, 0x77, 0x0f, 0x82, 0x11, 0xb8, 0x49, 0xc3, 0x65, 0x21, 0x8e, 0x56, 0x6e, 0x5b, 0xb4, 0x1b, 0xfc, 0x36, 0x1b, 0x65, 0xcd, 0xcc, 0xb0, 0xe6, 0x04, 0xc9, 0xed, 0xb9, 0x70, 0xee, 0x6a, 0x28, 0x6a, 0x1f, 0xce, 0xc0, 0xae, 0x9d, 0x92, 0x55, 0x8e, 0xab } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.13", - /* Message to be signed */ - 249, - { 0xa0, 0x3c, 0x2b, 0x85, 0xfd, 0xe4, 0x64, 0x68, 0xd1, 0xc5, 0x06, 0x37, 0xb0, 0x0a, 0x72, 0xdc, 0xfc, 0x32, 0xc4, 0x16, 0x31, 0x73, 0x9c, 0x06, 0x02, 0x45, 0xf5, 0x3e, 0x57, 0xc6, 0x6c, 0x51, 0x76, 0x6f, 0x24, 0xea, 0xfd, 0x93, 0xe6, 0xc6, 0x67, 0x43, 0x48, 0x05, 0x91, 0xbf, 0x14, 0x44, 0x6e, 0x04, 0x0b, 0x67, 0xa4, 0xf8, 0x46, 0x99, 0x57, 0x6c, 0x2e, 0x14, 0x63, 0xca, 0xcc, 0xbc, 0xb0, 0x73, 0xe4, 0xb7, 0xec, 0x6d, 0xa6, 0xc8, 0xcb, 0x41, 0xd4, 0xa1, 0x23, 0xc7, 0x48, 0xcd, 0x7e, 0x83, 0xd2, 0x61, 0xe5, 0x4c, 0x2f, 0xd2, 0xbc, 0x49, 0x5b, 0xc4, 0xc4, 0x4a, 0x78, 0xf9, 0x82, 0x00, 0x34, 0x03, 0x09, 0x2e, 0xc6, 0x96, 0x0c, 0x08, 0x8e, 0x2b, 0xcd, 0xe3, 0x48, 0xa2, 0xe0, 0xe5, 0x5a, 0x4b, 0x4f, 0x42, 0xea, 0xb2, 0x29, 0xb9, 0x5c, 0x38, 0x3f, 0x21, 0x13, 0xed, 0x6c, 0xd1, 0xf3, 0xf3, 0x16, 0x7d, 0xe3, 0xd2, 0x8d, 0x36, 0x2c, 0x8d, 0x78, 0xb2, 0xeb, 0x6e, 0x31, 0x62, 0x0e, 0x34, 0xb2, 0xf0, 0xf9, 0x41, 0xda, 0xcd, 0xf7, 0xb4, 0xb8, 0x56, 0x8c, 0x6a, 0x86, 0x3a, 0x55, 0x1d, 0x7b, 0xd4, 0xa5, 0xd7, 0x09, 0x3e, 0xda, 0x69, 0xe1, 0xe2, 0x80, 0x56, 0xdc, 0xb1, 0xeb, 0x69, 0xae, 0x03, 0xad, 0x74, 0xbe, 0x72, 0xa7, 0x5a, 0xe8, 0xfb, 0x56, 0xa2, 0x71, 0x25, 0xca, 0x3d, 0x2d, 0xb3, 0x76, 0x9d, 0x13, 0xd3, 0x5d, 0xb1, 0x08, 0xe2, 0x64, 0x4a, 0x7f, 0x3b, 0x37, 0x93, 0x8f, 0xec, 0x97, 0x62, 0x31, 0x52, 0x06, 0xd3, 0x0c, 0xcf, 0xd5, 0x76, 0xae, 0x7d, 0xe0, 0x76, 0x98, 0x69, 0xe5, 0x04, 0x4d, 0x07, 0x64, 0x6c, 0xf7, 0x8c, 0x64, 0xa4, 0x86, 0x48, 0x0b, 0x0f, 0xd4, 0x2c, 0xc7, 0xb2, 0x46 } -, - /* Signature */ - 129, - { 0x05, 0x8d, 0xa5, 0x49, 0x4c, 0x4e, 0x98, 0xaa, 0x12, 0x1f, 0x67, 0xf6, 0x5a, 0x2c, 0x86, 0x54, 0x25, 0xa9, 0xe6, 0x00, 0x2b, 0x22, 0x3f, 0x03, 0x88, 0x80, 0x97, 0x53, 0x57, 0x3b, 0x4f, 0x33, 0x4d, 0xe4, 0x5d, 0x8f, 0x00, 0x07, 0x25, 0x5d, 0x11, 0x2d, 0xdc, 0x84, 0xdb, 0x26, 0x67, 0x00, 0xe4, 0x40, 0xb5, 0xa8, 0x69, 0x00, 0xc3, 0xd3, 0xd3, 0x5b, 0x02, 0x4c, 0x18, 0xd8, 0xa2, 0x5a, 0x58, 0x00, 0x22, 0x6d, 0x0a, 0x56, 0xd8, 0x38, 0xd8, 0x91, 0x9e, 0x6d, 0x5a, 0x87, 0x30, 0xd6, 0x19, 0x49, 0x90, 0x15, 0xec, 0x46, 0x65, 0xc6, 0x3d, 0x77, 0x80, 0x83, 0xa0, 0x42, 0xdd, 0x4f, 0x05, 0x2a, 0x1b, 0xbb, 0x5f, 0x40, 0x80, 0xcb, 0xbb, 0x41, 0xfa, 0x94, 0x5b, 0xad, 0x6a, 0x74, 0x77, 0x9f, 0x68, 0x07, 0x25, 0xe4, 0x7a, 0x08, 0xa0, 0x51, 0x4f, 0x35, 0x0f, 0xa5, 0xad, 0xf9, 0x0a } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.14", - /* Message to be signed */ - 47, - { 0xc4, 0x0c, 0x70, 0xf2, 0x6d, 0xa5, 0x69, 0x48, 0x6b, 0xac, 0xe7, 0x85, 0xda, 0x32, 0xe3, 0x37, 0xa0, 0xeb, 0x94, 0xfb, 0x3a, 0x0a, 0xa4, 0x09, 0xc5, 0x77, 0x01, 0x75, 0xc8, 0xe8, 0xcb, 0x2b, 0xaa, 0x8d, 0x2a, 0x1b, 0x98, 0x46, 0xc3, 0x7d, 0xf7, 0xd6, 0x71, 0x03, 0x6d, 0x5e, 0x91 } -, - /* Signature */ - 129, - { 0x05, 0x25, 0x61, 0x28, 0xaf, 0xba, 0x1f, 0x55, 0xd8, 0x1f, 0x79, 0xea, 0x33, 0x87, 0x91, 0x47, 0xa2, 0x4a, 0xd7, 0x77, 0x93, 0x46, 0xee, 0x79, 0x8b, 0x21, 0x1c, 0x24, 0x71, 0x53, 0xea, 0x38, 0xd2, 0x6b, 0x21, 0x70, 0x65, 0xf6, 0x1e, 0x01, 0x10, 0xb5, 0x3d, 0x72, 0xcb, 0x64, 0x93, 0x4d, 0x9b, 0x1a, 0xd1, 0xb3, 0xde, 0xc3, 0x32, 0x09, 0x2d, 0x25, 0x8f, 0x0c, 0xaf, 0x1c, 0x4a, 0xee, 0x8b, 0x23, 0xe0, 0x9b, 0xab, 0x0f, 0x0c, 0x27, 0x88, 0x58, 0xb4, 0x41, 0xd0, 0x8c, 0xa3, 0xae, 0x9f, 0x00, 0xaa, 0x9a, 0x3f, 0x01, 0x8f, 0x7d, 0x9f, 0xa9, 0x8a, 0x18, 0xdf, 0x0d, 0x24, 0x84, 0x7e, 0x56, 0x7a, 0x47, 0xf5, 0x77, 0x9b, 0xd1, 0x79, 0x3a, 0x4b, 0x02, 0x52, 0xf2, 0xba, 0xd4, 0x0c, 0x9c, 0x4a, 0x81, 0x30, 0x1c, 0xc2, 0x8c, 0x26, 0x09, 0xd7, 0xbb, 0x33, 0x37, 0xe9, 0x7f, 0x14 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.15", - /* Message to be signed */ - 83, - { 0x9e, 0x6d, 0xcb, 0x11, 0xe0, 0xe8, 0x47, 0x71, 0x39, 0xfa, 0xf0, 0x41, 0xa7, 0x4e, 0x2b, 0xed, 0x64, 0x3a, 0x62, 0xad, 0xed, 0xac, 0x7c, 0xbe, 0xf3, 0x65, 0xec, 0xc4, 0x3a, 0xe4, 0xe5, 0x82, 0x60, 0xbc, 0x72, 0x46, 0x23, 0xbd, 0x63, 0x42, 0xdc, 0x66, 0x0d, 0x66, 0x14, 0x2e, 0xa6, 0x36, 0x80, 0x71, 0x5f, 0x52, 0x2f, 0xf3, 0xcd, 0x4b, 0x63, 0x6f, 0x84, 0xaa, 0x9d, 0x75, 0xfb, 0xfb, 0xc3, 0x84, 0x10, 0x7e, 0x43, 0x00, 0x4d, 0x98, 0x6f, 0xbc, 0xe1, 0xa2, 0x7f, 0x7e, 0xcc, 0x7d, 0x02, 0x39, 0x2c } -, - /* Signature */ - 129, - { 0x0c, 0xcf, 0x23, 0x4e, 0xb4, 0x80, 0x08, 0x5d, 0x92, 0x0d, 0x37, 0xd6, 0x87, 0x96, 0x5d, 0x2f, 0xd2, 0xe4, 0xa4, 0xf3, 0xbd, 0x3b, 0xf7, 0xdd, 0xc1, 0x6b, 0x5d, 0x62, 0xa6, 0x90, 0x32, 0x74, 0x20, 0x7c, 0x6f, 0x90, 0x83, 0x6e, 0x29, 0xff, 0xc6, 0x3a, 0x57, 0xf9, 0x81, 0x30, 0xc5, 0x25, 0x23, 0x25, 0x19, 0xc7, 0x08, 0xf0, 0xdc, 0x8a, 0x12, 0x55, 0xab, 0x55, 0xdb, 0x1a, 0x2b, 0x9a, 0xbc, 0x11, 0x06, 0x16, 0x02, 0x07, 0x5f, 0xf6, 0xf9, 0x7f, 0x90, 0x92, 0x79, 0x6b, 0x98, 0x87, 0x1a, 0x6c, 0xd5, 0xd2, 0x61, 0x7d, 0xdc, 0x9d, 0x25, 0x5a, 0x73, 0x00, 0xc9, 0x10, 0xfd, 0x21, 0x0b, 0x14, 0xa9, 0x81, 0xe5, 0xa0, 0xe0, 0xc6, 0xbb, 0x2b, 0x04, 0x5f, 0xa9, 0x75, 0x68, 0x98, 0xb9, 0x3b, 0x8a, 0x63, 0x45, 0x44, 0xd7, 0x7a, 0xfd, 0xb1, 0xcf, 0x0e, 0x79, 0x58, 0xf1, 0x1a, 0x43 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.16", - /* Message to be signed */ - 177, - { 0x20, 0xbc, 0x46, 0x3b, 0x5e, 0x12, 0x20, 0xa3, 0x9c, 0x84, 0xe8, 0x9f, 0xe6, 0x71, 0x6e, 0xec, 0xab, 0x55, 0x55, 0xf8, 0xbf, 0xce, 0x60, 0xcf, 0xb8, 0x37, 0x93, 0xcc, 0x40, 0xa4, 0xda, 0x1d, 0x22, 0xc0, 0xab, 0x4e, 0xaa, 0x93, 0x1f, 0xb7, 0x47, 0xbe, 0x35, 0xf1, 0xcf, 0x6f, 0xb1, 0x46, 0x5b, 0xef, 0x1d, 0xf2, 0x76, 0x0f, 0xcb, 0x3f, 0x70, 0xd3, 0xe2, 0x96, 0xe7, 0xb2, 0x70, 0x45, 0x0d, 0xff, 0xe2, 0xd5, 0x88, 0xc4, 0x39, 0x6a, 0x5f, 0x6f, 0x1e, 0x63, 0x87, 0xaa, 0x86, 0x97, 0x1f, 0xb0, 0xad, 0x24, 0xdf, 0x55, 0x04, 0x43, 0xdd, 0x12, 0x2b, 0xdb, 0x2c, 0xf3, 0xc9, 0xed, 0x61, 0x25, 0xfe, 0x55, 0xce, 0xc9, 0x91, 0xcb, 0xae, 0x8e, 0xe1, 0x56, 0x2a, 0x8c, 0x0f, 0x4f, 0x36, 0x4f, 0x8f, 0x0a, 0x80, 0xcb, 0x30, 0xfd, 0x99, 0x44, 0x0b, 0xf6, 0x55, 0xf0, 0x80, 0x4f, 0x92, 0x96, 0x8c, 0xa2, 0xe0, 0x1c, 0x0d, 0x5a, 0xbb, 0x4e, 0xe2, 0x67, 0x63, 0x6d, 0xd4, 0xf5, 0x11, 0xa8, 0xd3, 0x29, 0x41, 0x16, 0x21, 0x6b, 0xed, 0xc1, 0x08, 0x86, 0x45, 0xe4, 0x65, 0xd8, 0xe1, 0x98, 0xb8, 0xaf, 0xe1, 0xcd, 0x54, 0x24, 0xb4, 0x2a, 0x53, 0x3c, 0xed, 0x19, 0x8a, 0xd5, 0x97 } -, - /* Signature */ - 129, - { 0x05, 0x1b, 0x71, 0x42, 0x66, 0x06, 0x6b, 0xbb, 0x81, 0x9a, 0x2a, 0x38, 0x05, 0xa8, 0x9c, 0xff, 0x46, 0x18, 0x75, 0xc0, 0x95, 0xf4, 0xf3, 0x89, 0x82, 0xd1, 0xaf, 0xc2, 0xad, 0x2f, 0x14, 0x24, 0x50, 0xb8, 0xa7, 0x52, 0x94, 0x7f, 0x03, 0x1c, 0xce, 0x2c, 0x9c, 0x34, 0x0c, 0x8a, 0xc9, 0xf9, 0xf7, 0xa5, 0x48, 0xb7, 0xcc, 0x17, 0xe4, 0xcc, 0x52, 0x56, 0x96, 0xea, 0x0c, 0x87, 0x53, 0xa1, 0xe1, 0x5b, 0xcb, 0x98, 0x5d, 0xea, 0xec, 0x77, 0x6f, 0xb9, 0xe7, 0xd9, 0xf7, 0x58, 0x62, 0xf8, 0x98, 0x35, 0x23, 0xd9, 0xf8, 0x71, 0xc6, 0x3f, 0xb7, 0x56, 0x1a, 0xc7, 0x1c, 0x37, 0x6b, 0xf4, 0x95, 0xd4, 0x32, 0x38, 0x59, 0xbd, 0x14, 0x18, 0x8f, 0xcd, 0xfb, 0x4b, 0x37, 0xab, 0xcb, 0x5d, 0xc1, 0xa5, 0x8e, 0xed, 0xea, 0x7e, 0x0f, 0xe6, 0x2a, 0xc1, 0x6e, 0x20, 0x8a, 0xab, 0x4c, 0xee, 0x26 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.17", - /* Message to be signed */ - 232, - { 0x92, 0xda, 0x26, 0x0b, 0xc2, 0x13, 0xb7, 0x2b, 0x48, 0xa0, 0x57, 0x53, 0x50, 0x3d, 0x00, 0xa1, 0xdb, 0xfd, 0x02, 0xac, 0x7b, 0x9f, 0xd4, 0x4d, 0x24, 0x01, 0xea, 0x7a, 0xd5, 0x8a, 0xd1, 0x86, 0x1f, 0xda, 0x53, 0x63, 0x29, 0xae, 0x41, 0x73, 0xc9, 0x16, 0x80, 0x05, 0xb9, 0x66, 0x2c, 0x05, 0xcb, 0xea, 0x47, 0xad, 0x86, 0x4a, 0xf7, 0xcb, 0x16, 0x60, 0x2d, 0x3d, 0x18, 0x34, 0x71, 0xbc, 0x98, 0xbc, 0xc6, 0x2c, 0x6d, 0x00, 0xd3, 0x34, 0xbf, 0xf5, 0xb9, 0x0c, 0xfe, 0x7d, 0x7e, 0x12, 0xd0, 0x7f, 0xe7, 0xd4, 0xcb, 0xd9, 0xdc, 0xd3, 0xc4, 0xc2, 0x34, 0x90, 0xbe, 0x8c, 0xba, 0xdc, 0x08, 0xc9, 0x17, 0x79, 0x80, 0x37, 0x3c, 0x79, 0xeb, 0x4e, 0xea, 0x6d, 0x81, 0xa6, 0xbe, 0xe2, 0x27, 0x0b, 0xf4, 0x20, 0xf9, 0x19, 0x79, 0xad, 0x3f, 0x27, 0x1f, 0xd6, 0x8d, 0xd4, 0x28, 0x3b, 0xe8, 0x14, 0x10, 0x92, 0x8c, 0xa4, 0x5b, 0x9d, 0xeb, 0x58, 0xd3, 0xae, 0x98, 0xb2, 0xf4, 0xfc, 0xa6, 0x21, 0x25, 0x95, 0x0b, 0x5e, 0xe1, 0x28, 0xdb, 0xa1, 0x05, 0xc3, 0x5c, 0xc3, 0x98, 0xd1, 0x5e, 0x74, 0x2b, 0xba, 0x92, 0x69, 0x7b, 0x5c, 0x62, 0xb2, 0x67, 0xce, 0x01, 0x14, 0x1c, 0xec, 0xef, 0x80, 0x75, 0x07, 0xde, 0x29, 0xc4, 0x85, 0x30, 0x5d, 0x0a, 0x99, 0x09, 0x43, 0x23, 0x0d, 0x8d, 0x9b, 0x72, 0x52, 0xee, 0x0b, 0x19, 0x56, 0xde, 0x84, 0x5f, 0x2f, 0xbb, 0x28, 0x38, 0x78, 0x5b, 0x47, 0x0a, 0x7c, 0x20, 0x53, 0xdb, 0x39, 0x6b, 0x31, 0x5a, 0x30, 0xd8, 0xa7, 0xf9, 0x1c, 0xff, 0xfd, 0x03, 0xe8, 0xa3, 0x9b, 0xa8, 0xbc } -, - /* Signature */ - 129, - { 0x03, 0xe2, 0x3f, 0x86, 0x52, 0x37, 0x4d, 0x48, 0xd3, 0x81, 0xc3, 0x78, 0x35, 0x3e, 0xb4, 0x7d, 0x90, 0x64, 0xcd, 0x70, 0x8e, 0x1b, 0x9b, 0xf6, 0x88, 0x70, 0x4c, 0x04, 0xc0, 0x09, 0x00, 0x88, 0x46, 0xe6, 0xa4, 0x7e, 0x0b, 0xd2, 0xe3, 0x0c, 0x33, 0x40, 0xf5, 0xd4, 0xe1, 0x9d, 0x2d, 0xc5, 0xd8, 0x89, 0x0c, 0x8f, 0x01, 0x04, 0xdd, 0x6f, 0x5d, 0xd6, 0xca, 0xd9, 0xc4, 0xd9, 0x94, 0x84, 0x09, 0xc3, 0xcc, 0x0b, 0xe6, 0x70, 0x71, 0x9d, 0xd0, 0x48, 0x41, 0x80, 0x89, 0x1c, 0x93, 0x5b, 0x99, 0x79, 0xdb, 0x8e, 0xb4, 0x68, 0xa2, 0x3e, 0x4e, 0xf4, 0x60, 0x29, 0xf3, 0xaf, 0x14, 0x57, 0x4b, 0xd1, 0x0b, 0x47, 0x3e, 0xdd, 0x9b, 0x12, 0x7a, 0x30, 0x6e, 0x51, 0x24, 0xad, 0xa4, 0x02, 0xc1, 0x48, 0xf5, 0x1b, 0x52, 0xe7, 0xe6, 0x28, 0xbf, 0xac, 0xec, 0x3f, 0xc2, 0x54, 0x3a, 0x0f, 0x92 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.18", - /* Message to be signed */ - 113, - { 0x86, 0x03, 0xa5, 0x62, 0x2a, 0x2d, 0xbb, 0xbc, 0xbb, 0xe5, 0x33, 0x30, 0xe9, 0x08, 0xd5, 0xa2, 0x5f, 0x6e, 0x67, 0xa5, 0x1e, 0x07, 0x68, 0xd7, 0xc3, 0xc3, 0xfb, 0xe8, 0xb9, 0x2e, 0x8b, 0x1b, 0x36, 0xdc, 0x00, 0x74, 0x3c, 0xe3, 0x3d, 0xa0, 0xf1, 0xc8, 0xcf, 0xb0, 0x0d, 0x63, 0xed, 0xd6, 0xb2, 0x25, 0x2f, 0xb6, 0x72, 0x13, 0x97, 0xd2, 0x50, 0x4b, 0x30, 0xed, 0x1d, 0x29, 0x3a, 0x82, 0xe2, 0x44, 0xc9, 0x51, 0xbb, 0xfc, 0x24, 0x29, 0x8a, 0x42, 0xff, 0xee, 0x26, 0xe4, 0x56, 0xa7, 0xbe, 0x10, 0x5c, 0xb5, 0xe3, 0x7b, 0x3d, 0x25, 0xde, 0x28, 0xbf, 0xc0, 0x10, 0x42, 0xc4, 0xa8, 0x2c, 0xe8, 0x70, 0x45, 0x54, 0x87, 0xe5, 0xb3, 0x0e, 0x26, 0xf8, 0xd5, 0x39, 0x8c, 0x86, 0x12, 0x6e } -, - /* Signature */ - 129, - { 0x08, 0x22, 0xfc, 0x22, 0xa9, 0xcd, 0x87, 0x7c, 0x09, 0xb6, 0xf9, 0x2e, 0x80, 0x17, 0xcc, 0xc0, 0x28, 0xd5, 0x37, 0x99, 0x67, 0xc7, 0xd0, 0x4e, 0xf3, 0x2f, 0x86, 0x9c, 0x7e, 0xf6, 0x7d, 0x59, 0x3c, 0x77, 0x45, 0xf6, 0x29, 0xd9, 0x3d, 0xf2, 0x60, 0x03, 0x8c, 0xd3, 0x33, 0xea, 0xee, 0x92, 0x35, 0x9f, 0xdb, 0xbf, 0x84, 0x62, 0x3b, 0x7b, 0x55, 0x14, 0x23, 0x5b, 0x83, 0x06, 0x27, 0x2f, 0x4e, 0xfd, 0x13, 0xa6, 0x70, 0x0b, 0xe9, 0x28, 0x9a, 0xd5, 0x4e, 0x57, 0xd5, 0x2d, 0x1f, 0xeb, 0xb4, 0x6a, 0x37, 0xaf, 0xd6, 0x95, 0x94, 0x2c, 0x4c, 0xbc, 0xfd, 0x37, 0x68, 0xf2, 0x82, 0x1e, 0x88, 0x8e, 0xfa, 0x0e, 0x2c, 0x5f, 0xd3, 0xc9, 0xc4, 0x2c, 0xc3, 0x55, 0x50, 0xd7, 0x95, 0x5c, 0xdb, 0xd3, 0x5c, 0x8e, 0xf8, 0x58, 0x1b, 0x41, 0xf8, 0xdd, 0xab, 0x26, 0x18, 0x26, 0x2e, 0x3d, 0xff } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.19", - /* Message to be signed */ - 43, - { 0x06, 0x7d, 0x4b, 0xec, 0xb0, 0x3e, 0x1e, 0xb2, 0x75, 0xae, 0x22, 0x50, 0x7a, 0x77, 0xa5, 0x39, 0x6e, 0x71, 0x9b, 0x5f, 0x00, 0xb1, 0x05, 0x95, 0x0b, 0xc7, 0x99, 0x8e, 0x08, 0x03, 0xda, 0x57, 0xa4, 0xde, 0x08, 0xa4, 0x07, 0x8b, 0x9a, 0x00, 0xd2, 0xd4, 0x6f } -, - /* Signature */ - 129, - { 0x09, 0x10, 0x8d, 0x44, 0x57, 0x5f, 0x61, 0x4a, 0x68, 0x3e, 0xe4, 0xd7, 0x8b, 0xce, 0x1c, 0x58, 0xf5, 0x24, 0x36, 0x87, 0xcb, 0xe9, 0xc5, 0x48, 0x34, 0x60, 0xb6, 0x5d, 0xf2, 0x36, 0x92, 0x7d, 0xbc, 0x78, 0xc0, 0x64, 0x39, 0xce, 0x1c, 0x7c, 0x51, 0x97, 0x39, 0xc8, 0xf8, 0x95, 0x00, 0x82, 0xd9, 0x56, 0xd6, 0x0f, 0xc3, 0x64, 0x5b, 0xa7, 0xaf, 0x8e, 0x78, 0x89, 0x54, 0x70, 0x63, 0x1b, 0xb4, 0xda, 0x00, 0xc0, 0x1b, 0x98, 0x2c, 0xc1, 0x1c, 0x68, 0xd2, 0x65, 0x0c, 0x7c, 0xae, 0xa4, 0xa2, 0x6e, 0x21, 0x0f, 0xf4, 0xb1, 0xca, 0xe1, 0xdb, 0x50, 0x5f, 0xce, 0xa9, 0x29, 0x34, 0x87, 0xb2, 0x07, 0x31, 0x78, 0xca, 0x24, 0x5c, 0xf0, 0xca, 0x23, 0x56, 0xba, 0xf8, 0x65, 0x54, 0x6b, 0x54, 0xaf, 0x95, 0x35, 0xba, 0xb1, 0x8d, 0xb6, 0x79, 0xef, 0x56, 0x27, 0x09, 0x29, 0x79, 0xc0, 0xa8 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 10.20", - /* Message to be signed */ - 238, - { 0x88, 0x4f, 0xc5, 0x02, 0xc8, 0x82, 0x48, 0x49, 0x47, 0x8b, 0x2e, 0xac, 0x1e, 0x7e, 0xbb, 0xb7, 0xca, 0xf2, 0x8e, 0xeb, 0x48, 0x89, 0x45, 0x86, 0x02, 0xec, 0x70, 0x35, 0x81, 0xd0, 0x5e, 0xf9, 0xb1, 0xa4, 0x22, 0x0b, 0xd2, 0xf9, 0x22, 0xf2, 0x5e, 0x46, 0x4c, 0x88, 0x07, 0x01, 0xc8, 0xa4, 0x5b, 0x1d, 0x1f, 0xab, 0xc8, 0x66, 0x2e, 0xb2, 0x49, 0x40, 0x04, 0x26, 0xc2, 0x22, 0x62, 0x38, 0xeb, 0x8a, 0xd0, 0xf9, 0x06, 0x9c, 0x90, 0xf0, 0x01, 0x82, 0x77, 0x44, 0x80, 0x25, 0xa6, 0x41, 0x80, 0xed, 0x55, 0xd1, 0xaf, 0xd2, 0x7a, 0xff, 0x4f, 0x00, 0x70, 0x2f, 0x71, 0x5d, 0x29, 0x10, 0x00, 0x0d, 0xf3, 0x92, 0x5c, 0x70, 0x10, 0xff, 0x11, 0x7f, 0x6d, 0x8d, 0x2a, 0x81, 0x67, 0x09, 0x48, 0x9e, 0xfd, 0x29, 0xa4, 0x5c, 0x59, 0x23, 0x17, 0x7b, 0xf9, 0x2c, 0xd0, 0xbf, 0x6b, 0x94, 0x74, 0x5d, 0x34, 0x8a, 0x14, 0x4e, 0x98, 0x74, 0x0f, 0x72, 0x22, 0x6a, 0x3e, 0x2a, 0x9d, 0x41, 0x7b, 0x7c, 0x1f, 0xd8, 0xf8, 0x95, 0xf5, 0x15, 0xc5, 0xc6, 0xd4, 0x06, 0xa7, 0x2b, 0xdc, 0xcd, 0x39, 0x15, 0x2c, 0x30, 0xfd, 0xbd, 0xda, 0x0e, 0x62, 0x82, 0x3e, 0xe9, 0xdf, 0xab, 0x34, 0x32, 0xe6, 0x64, 0x2e, 0xec, 0xb6, 0x98, 0x7b, 0x90, 0x46, 0xe0, 0x40, 0xa4, 0x78, 0xa4, 0xdf, 0x64, 0x8d, 0xef, 0xb3, 0x01, 0x6a, 0xa4, 0x43, 0xd0, 0x67, 0xa1, 0xfa, 0x41, 0x55, 0x55, 0x53, 0x74, 0xf8, 0xba, 0x32, 0x5a, 0x8b, 0x55, 0xe4, 0xd6, 0xb5, 0xfa, 0x09, 0x0e, 0xeb, 0xae, 0xc9, 0xc9, 0x2e, 0x26, 0x1c, 0xc0, 0x4c, 0xea, 0xa4, 0x8b, 0x3b, 0xed, 0x7b, 0x3f, 0x87, 0xd3 } -, - /* Signature */ - 129, - { 0x0b, 0x41, 0xb4, 0x12, 0x19, 0x71, 0x26, 0x15, 0x9e, 0x9b, 0xda, 0x1a, 0x24, 0x62, 0xc8, 0xa4, 0xfd, 0x3d, 0xff, 0xdc, 0x6e, 0x98, 0xe4, 0xdb, 0xfc, 0x06, 0xcf, 0xcc, 0xf1, 0x6f, 0x74, 0xfc, 0xb5, 0x23, 0x38, 0xaf, 0x14, 0xed, 0x39, 0x36, 0xe0, 0x2c, 0x1d, 0x7e, 0x77, 0x23, 0x6c, 0xc6, 0xa4, 0x89, 0xf0, 0x0f, 0x08, 0x98, 0x52, 0xde, 0x5c, 0xc4, 0x25, 0xb4, 0x50, 0x94, 0xa0, 0x42, 0xe3, 0x85, 0x46, 0x4b, 0x64, 0xc3, 0xb2, 0xff, 0xd0, 0x1f, 0x19, 0xa0, 0x1c, 0x2c, 0x03, 0x81, 0xf7, 0x58, 0xa6, 0x73, 0x65, 0xd1, 0xe6, 0x5a, 0x70, 0x7b, 0x13, 0x4e, 0x3f, 0x8a, 0x93, 0x16, 0xb4, 0xaa, 0xcb, 0x7e, 0x85, 0x1a, 0x5e, 0xab, 0x3c, 0xd8, 0x11, 0xbd, 0x45, 0x22, 0xdd, 0x14, 0x1a, 0x00, 0x15, 0x7d, 0xc3, 0xfc, 0xaf, 0xc4, 0x15, 0x4c, 0xaf, 0x05, 0x93, 0xca, 0x62, 0x10, 0x2e } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 11: A 1029-bit RSA key pair", -{ - /* Modulus */ - 129, - { 0x1e, 0xd7, 0xee, 0xa9, 0x40, 0x5f, 0x50, 0x7f, 0x94, 0x16, 0x23, 0xa1, 0x7b, 0xea, 0x71, 0x7b, 0x86, 0x0d, 0xe4, 0x4c, 0xb7, 0x76, 0x87, 0xb8, 0xb8, 0x5a, 0x6d, 0x7d, 0x1e, 0xf4, 0xf8, 0x62, 0x8d, 0x25, 0x7c, 0xb9, 0x42, 0x38, 0xc6, 0x25, 0xba, 0x25, 0xd4, 0x6a, 0xae, 0x59, 0x39, 0x60, 0xaf, 0x79, 0xf7, 0x5e, 0x28, 0xab, 0x63, 0xac, 0x3c, 0xac, 0x48, 0x20, 0xb8, 0x2d, 0xa1, 0xcf, 0x75, 0x0d, 0x6c, 0x93, 0x0d, 0x6b, 0x82, 0x78, 0x54, 0xaa, 0xf6, 0xca, 0xc0, 0xc1, 0x7b, 0x80, 0xb0, 0x29, 0xf5, 0xd3, 0x19, 0xcc, 0xca, 0x66, 0x5c, 0x56, 0x94, 0xf5, 0x4b, 0xa5, 0xf0, 0x96, 0xf4, 0x54, 0x34, 0x13, 0xec, 0x4c, 0x5e, 0x97, 0xcc, 0x1d, 0xda, 0x89, 0xd2, 0xaf, 0xd4, 0x28, 0x57, 0x87, 0x59, 0x03, 0x2a, 0xdf, 0x92, 0x89, 0x50, 0x65, 0xba, 0xaf, 0xe8, 0x8d, 0x2d, 0x8b, 0x61 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 129, - { 0x0d, 0x93, 0x80, 0x72, 0xb1, 0x6a, 0x02, 0xf5, 0xd5, 0x0a, 0x15, 0xae, 0xeb, 0xeb, 0x5a, 0xfe, 0x43, 0x18, 0x74, 0x48, 0x2c, 0x6d, 0x18, 0xfa, 0x7e, 0xf3, 0x16, 0xc4, 0x7f, 0x4e, 0xd6, 0xd2, 0x12, 0x4c, 0xd0, 0xe4, 0x7e, 0xb8, 0x9c, 0xc7, 0x58, 0x73, 0x74, 0x57, 0x6c, 0xdc, 0xcb, 0x3b, 0xba, 0xa1, 0x95, 0xf7, 0xb5, 0x31, 0x13, 0x93, 0x69, 0xb5, 0x6f, 0x9e, 0x2f, 0x53, 0xae, 0xa8, 0xac, 0x7a, 0x97, 0xe1, 0xd7, 0x45, 0x8f, 0x52, 0x6c, 0xf7, 0xd7, 0x10, 0xc4, 0x90, 0x2a, 0xae, 0xdf, 0x99, 0x7c, 0x11, 0x94, 0xb8, 0x7b, 0x62, 0xcc, 0xd8, 0xda, 0xb8, 0xff, 0x5b, 0x67, 0xd4, 0x0f, 0xe8, 0x3d, 0xe1, 0xb8, 0x2b, 0x91, 0x60, 0x9a, 0x7c, 0x5c, 0xf3, 0x92, 0x29, 0xeb, 0x3a, 0x1b, 0x2f, 0x0e, 0xbf, 0x0b, 0x12, 0x5c, 0xb8, 0x00, 0x91, 0xa0, 0x7e, 0xbc, 0x77, 0x9c, 0xe7, 0xfd } -, - /* Prime 1 */ - 65, - { 0x05, 0x90, 0xa1, 0xe5, 0x18, 0x71, 0x07, 0xfa, 0xef, 0x1e, 0x0c, 0xd5, 0x2f, 0xa2, 0xdc, 0xad, 0xa2, 0xd5, 0x8a, 0xbc, 0xc9, 0xe0, 0x73, 0x8f, 0xf4, 0x85, 0x0f, 0x7d, 0x2d, 0xee, 0x19, 0x82, 0x3f, 0x6e, 0x3e, 0x2c, 0xa9, 0x11, 0xb7, 0x17, 0x4b, 0xe7, 0x0b, 0x15, 0xc1, 0xb8, 0x87, 0xe0, 0xae, 0x15, 0x10, 0x21, 0x22, 0x42, 0x2f, 0xa1, 0x58, 0xb9, 0x8b, 0x0d, 0x38, 0x21, 0x15, 0x24, 0x5f } -, - /* Prime 2 */ - 65, - { 0x05, 0x8a, 0xdd, 0x02, 0x9b, 0xc9, 0x7e, 0xcf, 0xd1, 0xd0, 0xdb, 0x26, 0xbe, 0x45, 0xee, 0x8d, 0x3e, 0x54, 0xbf, 0xe6, 0x36, 0xfc, 0x4d, 0xa6, 0x66, 0xdc, 0xf2, 0x50, 0xab, 0x2c, 0x2e, 0x96, 0x56, 0x62, 0x16, 0xb8, 0xa5, 0x17, 0xf1, 0x0f, 0x75, 0xb9, 0x8f, 0xde, 0x6c, 0xcd, 0x8a, 0x58, 0xe8, 0xfc, 0x58, 0x2e, 0x78, 0x74, 0x90, 0xe1, 0x95, 0x8f, 0x7a, 0x0f, 0xda, 0x82, 0xad, 0x68, 0x3f } -, - /* Prime exponent 1 */ - 65, - { 0x01, 0x80, 0xee, 0xfd, 0xa3, 0xf9, 0x06, 0x9a, 0xfa, 0xf9, 0x37, 0xa6, 0x72, 0xd4, 0xa2, 0xa4, 0x18, 0x17, 0x73, 0x01, 0x47, 0xda, 0xe9, 0xde, 0xbf, 0xc7, 0x24, 0x44, 0x42, 0xa0, 0xcf, 0x2b, 0xae, 0x4f, 0xef, 0x64, 0xc9, 0xda, 0x0b, 0x8a, 0xb3, 0xeb, 0x9d, 0xc7, 0x27, 0x2c, 0xe1, 0x2a, 0x08, 0x5f, 0x90, 0x98, 0x23, 0x55, 0x96, 0xe1, 0x15, 0xc4, 0x2c, 0x9a, 0x49, 0xcc, 0x46, 0x96, 0x29 } -, - /* Prime exponent 2 */ - 65, - { 0x05, 0x12, 0xe1, 0x4e, 0x11, 0x05, 0x7d, 0x84, 0x8c, 0x23, 0xf1, 0x6b, 0x5f, 0x46, 0x2f, 0xa2, 0xb7, 0x8b, 0xe7, 0xfc, 0xbd, 0x1b, 0x6d, 0x8e, 0x46, 0x9e, 0x3f, 0x69, 0x9f, 0xb9, 0x9b, 0x90, 0x5e, 0xd5, 0xfe, 0xcc, 0xdb, 0xbd, 0xb6, 0x1d, 0x1b, 0xfd, 0x5a, 0x7a, 0x19, 0x0a, 0x74, 0x7a, 0xfe, 0x16, 0x7c, 0x37, 0x56, 0x68, 0x07, 0x75, 0xab, 0x6f, 0xa4, 0x23, 0x3d, 0x3a, 0xe1, 0xba, 0x0b } -, - /* Coefficient */ - 64, - { 0x26, 0x2e, 0x28, 0x23, 0x16, 0x98, 0xbe, 0x32, 0x87, 0xa9, 0xc7, 0x06, 0xf3, 0x94, 0x7b, 0x7d, 0x5c, 0x2f, 0x5f, 0xd2, 0xb9, 0x14, 0x46, 0xf5, 0xe9, 0xa3, 0x15, 0x44, 0xd9, 0xaf, 0xf4, 0x55, 0xa3, 0xec, 0xc6, 0xb5, 0x43, 0x14, 0x82, 0x0c, 0x2a, 0x48, 0x82, 0x61, 0xd9, 0xf9, 0x8d, 0x34, 0x8d, 0x9c, 0x3d, 0x10, 0x02, 0xe4, 0xe8, 0x28, 0x7a, 0x15, 0x2c, 0x12, 0x87, 0x09, 0x65, 0x60 } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 11.1", - /* Message to be signed */ - 218, - { 0x84, 0x55, 0x19, 0xdd, 0x45, 0xd2, 0xdd, 0xcb, 0xc8, 0xdb, 0xe0, 0xb8, 0x29, 0x54, 0xc4, 0x58, 0xc3, 0x66, 0x4d, 0x88, 0x27, 0x4e, 0x50, 0x2d, 0x27, 0x91, 0x46, 0xb1, 0x8f, 0x6a, 0x81, 0x67, 0x50, 0xe9, 0x4b, 0x4e, 0xcd, 0xee, 0x68, 0x32, 0xcb, 0x35, 0xdf, 0xcb, 0xdb, 0xdd, 0x3e, 0x5d, 0xc0, 0x64, 0x04, 0xd5, 0xf0, 0xc7, 0x0e, 0x7c, 0x7c, 0xd0, 0xe1, 0x9f, 0x38, 0xbc, 0x5a, 0xe3, 0x2c, 0x7c, 0xd9, 0x1f, 0x94, 0xd8, 0xf5, 0x67, 0x82, 0x39, 0x7b, 0xc7, 0x4e, 0x6b, 0x06, 0x98, 0x27, 0xec, 0x27, 0x30, 0x17, 0x37, 0x40, 0xce, 0x4a, 0x10, 0xe6, 0x48, 0xc7, 0x88, 0x97, 0xaf, 0x1a, 0x89, 0xe8, 0x33, 0x31, 0xd0, 0xf4, 0x61, 0x37, 0x8d, 0x06, 0x05, 0x28, 0x73, 0xf1, 0x7d, 0x9f, 0xfc, 0xe4, 0x6a, 0x32, 0x47, 0x26, 0x07, 0xfe, 0x73, 0xe4, 0xa5, 0x61, 0x87, 0x9e, 0x61, 0x9e, 0x7c, 0x1a, 0xe8, 0x14, 0xe4, 0x5e, 0x1d, 0x2b, 0xdb, 0x12, 0x19, 0x46, 0xb2, 0xae, 0xb8, 0x56, 0x39, 0x16, 0xc5, 0x43, 0xeb, 0xfd, 0xc2, 0xc0, 0x90, 0xfe, 0xb5, 0x56, 0x65, 0x00, 0xa8, 0xce, 0x74, 0xaf, 0xa4, 0x53, 0x72, 0xbd, 0xe0, 0xc6, 0x67, 0x3a, 0x7f, 0x6a, 0xcc, 0xb0, 0xee, 0x9d, 0x57, 0xbd, 0xe9, 0x3c, 0x36, 0xdd, 0xc5, 0x7b, 0x84, 0x90, 0xaa, 0x2d, 0x68, 0x58, 0x5a, 0x3d, 0xb7, 0x29, 0x7a, 0xda, 0x6d, 0x9b, 0x3f, 0x35, 0x6d, 0xbc, 0x74, 0xd3, 0x15, 0xc5, 0xfa, 0x1a, 0xbf, 0x7d, 0xe6, 0xce, 0xbc, 0xa8, 0x3c, 0x9d, 0xf7 } -, - /* Signature */ - 129, - { 0x08, 0x63, 0xa6, 0x26, 0xdc, 0x42, 0xba, 0xf3, 0xe1, 0x61, 0xc3, 0x5b, 0x3d, 0xe3, 0xb1, 0xab, 0xc1, 0xaa, 0x5a, 0xdf, 0x54, 0x16, 0x46, 0x5d, 0x4c, 0x7b, 0x6b, 0x01, 0xae, 0x2d, 0xad, 0x73, 0xf9, 0xf1, 0x58, 0xeb, 0x21, 0x3d, 0xbc, 0x36, 0x0b, 0xe4, 0xd4, 0x7e, 0x57, 0x07, 0x87, 0x1c, 0x39, 0xc3, 0x8d, 0xbb, 0xc9, 0x6b, 0x46, 0xc8, 0xf9, 0xaf, 0xeb, 0xd3, 0xdd, 0xac, 0x87, 0x16, 0x90, 0x98, 0xe1, 0xa7, 0x67, 0x18, 0xd3, 0x54, 0xcd, 0x09, 0x1c, 0xa3, 0x52, 0x96, 0xa7, 0x7c, 0x21, 0xd2, 0x51, 0x2f, 0xfe, 0x65, 0xe3, 0xb7, 0x1b, 0x90, 0x22, 0xe9, 0xcd, 0x1f, 0x7c, 0x35, 0xce, 0x13, 0x65, 0xfd, 0x1f, 0x2c, 0x2c, 0xb9, 0x67, 0xff, 0x4c, 0x8f, 0x90, 0xf0, 0xc8, 0xea, 0xef, 0x0d, 0xb7, 0x3f, 0xed, 0x00, 0xe9, 0x8c, 0xfc, 0x83, 0xf8, 0x0c, 0x67, 0xb3, 0xbe, 0x1d, 0x33 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 11.2", - /* Message to be signed */ - 40, - { 0x86, 0x8e, 0x7c, 0x4f, 0xc6, 0x34, 0x0b, 0x6b, 0xbe, 0xb7, 0xb8, 0x6e, 0xa8, 0x9e, 0xe7, 0x26, 0x5f, 0x32, 0x31, 0xf4, 0x8b, 0xaa, 0x92, 0xe4, 0xa2, 0xe8, 0xce, 0x0f, 0xa1, 0xc1, 0xa8, 0xc0, 0xfb, 0x0a, 0xca, 0x94, 0x4c, 0x74, 0xbc, 0xcd } -, - /* Signature */ - 129, - { 0x10, 0xcb, 0xf8, 0x71, 0x7f, 0x76, 0x27, 0x8f, 0xcc, 0x8f, 0xc0, 0xaa, 0xb4, 0x6e, 0x90, 0xa3, 0xd1, 0x80, 0xc3, 0xc9, 0x2a, 0x4a, 0x83, 0xeb, 0x93, 0xc8, 0x92, 0x0a, 0xf8, 0x8b, 0xd6, 0x50, 0x6b, 0x40, 0x73, 0x45, 0x3f, 0x0b, 0xef, 0xf3, 0xe6, 0x1e, 0xdb, 0xb4, 0xdb, 0xc9, 0xc9, 0x47, 0xc6, 0x9d, 0xeb, 0x69, 0xa1, 0xac, 0x92, 0x9e, 0xfc, 0x15, 0x62, 0x5b, 0x9e, 0xd7, 0xcf, 0x1b, 0xc4, 0x23, 0xa8, 0x87, 0x5f, 0x37, 0x80, 0xdd, 0xda, 0x9e, 0xb2, 0xfc, 0xcd, 0x9f, 0xa0, 0x14, 0x62, 0x6a, 0x7f, 0xcf, 0x99, 0x86, 0x49, 0xbc, 0xfa, 0x59, 0x53, 0xa3, 0xc4, 0x3e, 0xfb, 0xcc, 0x38, 0x70, 0x4d, 0x02, 0x49, 0x19, 0xdf, 0x2f, 0xc4, 0xad, 0xea, 0x39, 0xe3, 0x4c, 0xd1, 0x5c, 0xd4, 0xf8, 0x6a, 0xd3, 0xf5, 0x01, 0x01, 0x2f, 0x6b, 0xd2, 0x8a, 0xa5, 0x00, 0x2c, 0x3b, 0x41, 0xba } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.3", - /* Message to be signed */ - 78, - { 0x92, 0xcf, 0x88, 0x0d, 0xa5, 0x89, 0x15, 0xe3, 0xaa, 0x95, 0x08, 0x93, 0x53, 0xe4, 0x61, 0x84, 0xc9, 0x15, 0x94, 0x5c, 0x57, 0x67, 0x9c, 0x1e, 0x4b, 0xd3, 0x82, 0x5e, 0xd9, 0x19, 0xa3, 0x20, 0x52, 0xe9, 0x78, 0x6e, 0x23, 0xb9, 0x42, 0x53, 0x9b, 0x93, 0x15, 0xf5, 0x81, 0xda, 0xf0, 0xb4, 0x1f, 0xa3, 0x26, 0x1b, 0x96, 0x7d, 0xe4, 0x0c, 0xd5, 0xd9, 0x2a, 0x48, 0x24, 0xf3, 0x64, 0xbd, 0x1e, 0x1f, 0x51, 0x84, 0x4b, 0x10, 0x9b, 0x14, 0x54, 0x13, 0x4a, 0xdf, 0x23, 0x4e } -, - /* Signature */ - 129, - { 0x08, 0x82, 0x89, 0x66, 0xac, 0x58, 0x36, 0xc5, 0x13, 0xda, 0x4f, 0xfb, 0x87, 0x61, 0x87, 0x97, 0x94, 0x3c, 0x61, 0x2e, 0xde, 0x7e, 0x12, 0xb3, 0x10, 0x03, 0xef, 0x17, 0x10, 0x65, 0xb4, 0xce, 0xdc, 0x6a, 0x80, 0xb1, 0x45, 0x6c, 0x21, 0xb6, 0x74, 0xb3, 0x77, 0x9a, 0xd3, 0x5f, 0x70, 0x17, 0x7a, 0xa9, 0x2c, 0x6e, 0xac, 0x0b, 0x83, 0x3a, 0x96, 0x7d, 0x7e, 0x98, 0x99, 0x0b, 0x48, 0x24, 0x42, 0x05, 0xdb, 0xf2, 0x6f, 0x5c, 0xd5, 0x7e, 0xf8, 0x7d, 0xc6, 0xfe, 0x5e, 0xd9, 0x99, 0xcf, 0x8c, 0xa7, 0x5d, 0xc8, 0xe6, 0x26, 0xfd, 0x6e, 0xb2, 0x81, 0xc4, 0x99, 0xaf, 0xf7, 0x29, 0x89, 0xed, 0xf5, 0x2e, 0xc6, 0xf3, 0xbc, 0xaf, 0x81, 0xec, 0x5f, 0x8e, 0x82, 0x30, 0xb8, 0x7e, 0xde, 0xdc, 0xf7, 0xb7, 0x78, 0x14, 0x3e, 0xd6, 0xc8, 0xce, 0xbb, 0xac, 0x9d, 0xe5, 0x41, 0x09, 0xdc, 0xf7 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.4", - /* Message to be signed */ - 68, - { 0x87, 0x3c, 0x47, 0x15, 0x90, 0x2f, 0xf1, 0x9d, 0xe0, 0x8b, 0xcc, 0xb0, 0xcf, 0x26, 0x37, 0x63, 0xfa, 0xb0, 0x16, 0xd0, 0x22, 0x0f, 0x03, 0x27, 0xb4, 0x75, 0x5e, 0x35, 0x4e, 0xb2, 0x47, 0xf5, 0xdb, 0xc2, 0xd3, 0x96, 0x98, 0x9b, 0xbd, 0x36, 0xd3, 0x1f, 0x61, 0x98, 0x93, 0x90, 0xca, 0xc1, 0x66, 0x43, 0x12, 0x5e, 0x63, 0xe1, 0xa1, 0xae, 0x1f, 0x1b, 0xc9, 0xbb, 0xed, 0xac, 0xce, 0x67, 0xfc, 0x1b, 0x51, 0xa7 } -, - /* Signature */ - 129, - { 0x05, 0x25, 0x9c, 0x48, 0x15, 0x93, 0xea, 0x86, 0xd1, 0xf0, 0x02, 0xca, 0x58, 0xaa, 0xee, 0x93, 0x29, 0xfa, 0xfe, 0x21, 0x8f, 0x67, 0x50, 0xf0, 0xe5, 0x88, 0xf3, 0x3b, 0x64, 0xe7, 0x08, 0xfb, 0x27, 0xa6, 0xfe, 0x81, 0xeb, 0xca, 0x8a, 0xda, 0xec, 0x75, 0x7a, 0x14, 0xff, 0x55, 0xa0, 0xc8, 0x8a, 0xda, 0x2c, 0x3b, 0x43, 0xe3, 0x9e, 0x8d, 0xfb, 0xe6, 0x76, 0x89, 0x43, 0x65, 0xa2, 0x21, 0x0c, 0x2a, 0xa8, 0x1f, 0x42, 0x4d, 0x85, 0x29, 0xc2, 0x07, 0x6b, 0x00, 0xc9, 0x2d, 0xd8, 0xc8, 0xae, 0x3b, 0x78, 0x0d, 0x87, 0xdb, 0xa7, 0x29, 0xdd, 0xfd, 0xef, 0x7d, 0x40, 0x7f, 0x85, 0x4a, 0x71, 0xcb, 0x68, 0x8b, 0x9f, 0x03, 0xc7, 0x1f, 0x3b, 0xaa, 0x24, 0xa2, 0xa6, 0xe1, 0xcb, 0x41, 0x07, 0x74, 0x30, 0x9e, 0x40, 0xc1, 0x3c, 0x2b, 0x26, 0x47, 0x38, 0xe5, 0x69, 0x7c, 0xfd, 0xde, 0xf3 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.5", - /* Message to be signed */ - 54, - { 0x14, 0xb2, 0x76, 0x02, 0xec, 0xe8, 0xf0, 0x67, 0xb5, 0x84, 0x83, 0xaf, 0x17, 0x77, 0xc4, 0xed, 0x10, 0xb8, 0xb6, 0x4e, 0x64, 0xc6, 0x9f, 0x57, 0xef, 0x88, 0x9a, 0x1c, 0xa5, 0xd5, 0xb5, 0xd6, 0x51, 0xc6, 0x08, 0xdb, 0x23, 0x9d, 0xee, 0xa1, 0x50, 0xff, 0x12, 0xcf, 0x50, 0xc8, 0x67, 0x96, 0x12, 0xf9, 0x7e, 0xcb, 0x09, 0xf7 } -, - /* Signature */ - 129, - { 0x15, 0xc4, 0xb3, 0xf0, 0x81, 0xa2, 0xe5, 0x8a, 0xf5, 0x94, 0xe4, 0x2f, 0xd6, 0xac, 0xcf, 0x1d, 0x0d, 0x61, 0xd9, 0x3a, 0x5e, 0x3a, 0x84, 0xcf, 0x90, 0x4b, 0x98, 0xd9, 0xad, 0x71, 0x33, 0x61, 0xb7, 0x84, 0xb2, 0x4d, 0x92, 0x95, 0xe4, 0x3c, 0x23, 0xbe, 0x93, 0xef, 0x36, 0x51, 0x4a, 0x9b, 0xac, 0x2c, 0x1b, 0xdf, 0x4e, 0xe7, 0x32, 0x34, 0x36, 0x76, 0x3a, 0x20, 0x66, 0x2f, 0x2d, 0xb3, 0x41, 0xd9, 0xe3, 0x8b, 0xed, 0x5f, 0x12, 0xc7, 0xdd, 0x18, 0xbc, 0x3b, 0xb0, 0xfc, 0xba, 0x5c, 0x00, 0x50, 0xbd, 0x1a, 0x2a, 0x44, 0x03, 0x71, 0x97, 0xb8, 0xc9, 0xfc, 0x2a, 0xa5, 0x99, 0xeb, 0x43, 0xc3, 0xd9, 0x67, 0x92, 0x42, 0xc9, 0x9b, 0xbc, 0x49, 0xb0, 0x3b, 0x98, 0xea, 0xca, 0x83, 0x46, 0x28, 0x72, 0x59, 0xe6, 0xea, 0x2e, 0x89, 0x15, 0x5d, 0x0d, 0xd2, 0xb4, 0x77, 0x80, 0x35, 0x75 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.6", - /* Message to be signed */ - 106, - { 0xe5, 0x66, 0xe5, 0xfa, 0x55, 0x6c, 0x76, 0x5b, 0x62, 0xbd, 0x6e, 0x37, 0x45, 0x21, 0xf5, 0x08, 0xfe, 0x44, 0x66, 0x68, 0xc6, 0x47, 0x4b, 0xef, 0x04, 0x6c, 0xc6, 0x89, 0x4a, 0x87, 0x32, 0x2e, 0x19, 0x31, 0xe8, 0x0d, 0x9e, 0xd9, 0xea, 0x80, 0x6b, 0x16, 0x7a, 0x3a, 0xf7, 0x7f, 0xc0, 0x49, 0x38, 0xb5, 0x54, 0x8e, 0xfb, 0xc0, 0x68, 0xd4, 0xf1, 0x96, 0x6a, 0x99, 0x76, 0x25, 0xaf, 0x31, 0xa4, 0x00, 0x7f, 0x06, 0x98, 0xa8, 0x46, 0x9a, 0xb6, 0x81, 0xf4, 0xd5, 0x08, 0xb4, 0xa4, 0x8c, 0x8f, 0xe7, 0x20, 0xcb, 0x5a, 0x94, 0xa7, 0xf4, 0x43, 0xdd, 0x5a, 0x58, 0x03, 0x04, 0x97, 0xda, 0xa9, 0x59, 0xa3, 0xaa, 0xf6, 0xe3, 0x41, 0x84, 0x39, 0x7a } -, - /* Signature */ - 129, - { 0x07, 0xe7, 0xc9, 0x44, 0x26, 0x24, 0xbd, 0x26, 0x6c, 0xc1, 0xcd, 0x1a, 0xf3, 0xb8, 0xf0, 0x62, 0x94, 0xdd, 0xa1, 0xc0, 0x77, 0x67, 0xfe, 0x19, 0xbc, 0xed, 0x6c, 0x9e, 0xd7, 0xc4, 0xb1, 0xed, 0x7f, 0x26, 0xe2, 0x03, 0xdb, 0x7f, 0x3a, 0x1b, 0xfa, 0x57, 0xda, 0xba, 0x6f, 0x3a, 0xa0, 0x60, 0x03, 0xbc, 0xdc, 0x1e, 0x00, 0xc2, 0xd3, 0xd7, 0x6b, 0x9c, 0xbf, 0xf9, 0x68, 0x49, 0xb1, 0xaf, 0xf5, 0x42, 0xd0, 0xd7, 0xaf, 0xc6, 0xe4, 0x22, 0x49, 0x2e, 0xab, 0x0a, 0xb7, 0xf8, 0xe1, 0xd1, 0xae, 0x0b, 0x27, 0x9b, 0x85, 0x19, 0x45, 0xb7, 0x65, 0x85, 0x1b, 0x9f, 0x8a, 0xd8, 0x80, 0xdd, 0x16, 0x4c, 0x11, 0xac, 0x4a, 0x57, 0xf9, 0x6a, 0x0e, 0x48, 0x4b, 0xa1, 0x6a, 0xbf, 0x1c, 0xbe, 0x8a, 0xac, 0x09, 0x0a, 0xdb, 0x6a, 0x71, 0x79, 0x7e, 0x13, 0x35, 0xee, 0xfe, 0x2a, 0xc9, 0x98, 0x0d } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.7", - /* Message to be signed */ - 9, - { 0xb4, 0x43, 0xc3, 0x43, 0x52, 0x7b, 0x30, 0xd5, 0xff } -, - /* Signature */ - 129, - { 0x0b, 0x3f, 0x13, 0xc2, 0x72, 0x24, 0xd1, 0x61, 0x01, 0xb9, 0xc8, 0x20, 0x1f, 0x1b, 0x4f, 0x85, 0x37, 0xdb, 0x3c, 0x11, 0x6f, 0x3c, 0xe1, 0x30, 0xbe, 0x0d, 0xe0, 0xdc, 0x0d, 0xd2, 0x0f, 0x77, 0x3c, 0xdf, 0x7b, 0x7f, 0x37, 0x23, 0x87, 0xc4, 0xb6, 0x53, 0xe5, 0xdd, 0x44, 0x21, 0x84, 0x45, 0x74, 0x11, 0xa8, 0x2f, 0x8e, 0xd0, 0x03, 0x66, 0xec, 0xc0, 0x77, 0xa4, 0x26, 0x7c, 0x9d, 0x7e, 0x56, 0x54, 0x96, 0x63, 0x23, 0x9b, 0x43, 0x19, 0xfe, 0x49, 0x9a, 0xa7, 0x89, 0x54, 0x04, 0x9c, 0x74, 0x3b, 0xbf, 0x09, 0xd7, 0x7b, 0x30, 0x29, 0xd9, 0x18, 0xbb, 0x7b, 0x9a, 0x6a, 0xe8, 0x0b, 0x12, 0x9e, 0x41, 0xbb, 0x56, 0xda, 0xd2, 0xb8, 0xa4, 0xb6, 0xf3, 0x19, 0x33, 0x74, 0xc8, 0x29, 0x2f, 0xe0, 0x17, 0xd0, 0x63, 0x34, 0x7e, 0x91, 0xcb, 0xf4, 0xdd, 0x39, 0x39, 0xc2, 0x37, 0xf8, 0x3c } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.8", - /* Message to be signed */ - 230, - { 0xdb, 0x90, 0x04, 0x7f, 0x61, 0x5a, 0xd7, 0x19, 0x72, 0xba, 0xed, 0x0c, 0x10, 0x62, 0x6e, 0xc8, 0xcb, 0x18, 0xc6, 0xd7, 0x5e, 0xaa, 0xe0, 0x58, 0x21, 0x9f, 0xd6, 0x19, 0x54, 0x26, 0xd4, 0x4d, 0x5c, 0x54, 0x3b, 0xef, 0x3c, 0x4c, 0x14, 0x98, 0xe8, 0x77, 0xd7, 0xc8, 0x53, 0xe5, 0x31, 0x21, 0xeb, 0x31, 0x57, 0x00, 0x81, 0xd5, 0xde, 0x48, 0x85, 0xcb, 0xc9, 0x25, 0xa6, 0xc2, 0x23, 0x21, 0xcc, 0xc9, 0xc3, 0x78, 0x4e, 0xb2, 0x19, 0xe4, 0x2b, 0x7e, 0xdb, 0x92, 0x88, 0x77, 0x60, 0x73, 0x29, 0x79, 0x8d, 0x55, 0x73, 0x9c, 0x89, 0xd6, 0xd6, 0xb3, 0xf0, 0xd4, 0x30, 0xbb, 0xbc, 0x47, 0x22, 0xea, 0xfa, 0x67, 0xde, 0xfc, 0x86, 0xab, 0xa6, 0xe6, 0x34, 0x83, 0xfd, 0x64, 0x99, 0xb0, 0x3f, 0xab, 0xdc, 0x84, 0x65, 0xd9, 0x8b, 0xbb, 0xe4, 0x40, 0x2b, 0x02, 0x31, 0x13, 0x5c, 0x21, 0x24, 0x3d, 0x7e, 0x02, 0xad, 0x5f, 0x7e, 0x9e, 0x8b, 0x94, 0x60, 0xc1, 0x2d, 0xde, 0x2a, 0x39, 0x5b, 0x45, 0x69, 0x61, 0xcc, 0x3d, 0xfd, 0x9a, 0x12, 0xf5, 0xd9, 0x35, 0x9e, 0x0b, 0x3a, 0x6b, 0xd7, 0x7f, 0x44, 0x65, 0x5b, 0x60, 0x3b, 0x02, 0x55, 0xdb, 0xba, 0xff, 0x8b, 0xc8, 0x40, 0x75, 0x9a, 0x34, 0x62, 0xfe, 0xce, 0x0d, 0x8d, 0xb6, 0xe4, 0x5e, 0x2f, 0xe2, 0xbb, 0xf8, 0xb6, 0xe9, 0x7b, 0x3f, 0xea, 0xc0, 0x79, 0x86, 0x73, 0x82, 0x57, 0xab, 0x9f, 0x8c, 0xfa, 0x79, 0x5a, 0x20, 0x19, 0x2b, 0x5e, 0x2c, 0xea, 0x11, 0x8c, 0xa7, 0x62, 0x25, 0x2a, 0xf6, 0xc6, 0xeb, 0x00, 0xec, 0x5c, 0x68, 0x20, 0xbc, 0xc7, 0xc7 } -, - /* Signature */ - 129, - { 0x00, 0xaa, 0xb0, 0x67, 0xd3, 0xa8, 0x63, 0x3d, 0x0b, 0xeb, 0xd5, 0x91, 0xed, 0x34, 0xd0, 0x67, 0xf4, 0x71, 0x8c, 0xd7, 0xf9, 0xb1, 0xe3, 0x5a, 0xaa, 0x40, 0x5d, 0xa1, 0x22, 0x2a, 0xb9, 0x40, 0x38, 0x66, 0x92, 0x1f, 0xbd, 0x05, 0x74, 0x33, 0x40, 0x7a, 0x4a, 0xae, 0x7e, 0x26, 0xc5, 0xcf, 0xa0, 0xbc, 0x9c, 0x11, 0x57, 0x05, 0x7b, 0x1d, 0xa1, 0xcf, 0x36, 0x28, 0x51, 0x87, 0x19, 0xa6, 0x03, 0xf6, 0xc3, 0xc4, 0xde, 0xa3, 0x0b, 0xf4, 0x9d, 0xb9, 0xb0, 0x68, 0xaf, 0xec, 0x69, 0x81, 0x21, 0xdc, 0xe5, 0xd6, 0x0d, 0x93, 0xa6, 0xf5, 0x63, 0x3f, 0xc6, 0xaf, 0x9d, 0xf4, 0xc5, 0xdc, 0xcc, 0x13, 0x8c, 0x29, 0x4e, 0xdd, 0x42, 0x9d, 0x4a, 0xfe, 0x3b, 0x33, 0x78, 0x86, 0x82, 0x55, 0xcc, 0x53, 0x78, 0x8c, 0xf2, 0xb4, 0x77, 0x45, 0xd6, 0x4a, 0xcd, 0x88, 0x5b, 0xb4, 0x7d, 0x2e, 0xec } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.9", - /* Message to be signed */ - 160, - { 0x2b, 0xe0, 0x06, 0x7b, 0x95, 0x18, 0x5b, 0xad, 0xe1, 0x18, 0xdc, 0xe9, 0x5c, 0x57, 0x02, 0x9b, 0x55, 0x4b, 0x25, 0xe1, 0xc3, 0x95, 0x19, 0xf8, 0xf8, 0x90, 0x73, 0xb9, 0xa0, 0x4b, 0x7e, 0x91, 0x29, 0x9c, 0xdb, 0x87, 0xb0, 0xbd, 0x17, 0xc9, 0xf1, 0x51, 0x92, 0x5c, 0x75, 0x6e, 0xb9, 0xb6, 0x45, 0x07, 0x25, 0x61, 0x26, 0x41, 0x07, 0x88, 0x21, 0x38, 0x85, 0x4a, 0xe7, 0xd5, 0x07, 0xe1, 0x5f, 0xcf, 0xe8, 0x47, 0x09, 0x45, 0x40, 0xe7, 0x1a, 0x54, 0x7f, 0x63, 0xb5, 0x90, 0x46, 0x7f, 0xad, 0xff, 0x64, 0x7f, 0x64, 0x3e, 0x1c, 0xec, 0x11, 0x24, 0x65, 0x29, 0x06, 0x2c, 0x9e, 0x40, 0x88, 0x92, 0xf2, 0xa2, 0x0c, 0xcc, 0xc0, 0xae, 0x45, 0xca, 0x97, 0xa4, 0x7f, 0xca, 0xdc, 0x8f, 0xed, 0xe2, 0x1a, 0x24, 0x71, 0x11, 0x67, 0x70, 0x6c, 0xc4, 0xb5, 0xd6, 0x94, 0x77, 0xe5, 0xa8, 0xa1, 0x46, 0xb9, 0x60, 0xcd, 0x4b, 0x17, 0x27, 0x42, 0x7b, 0x16, 0x51, 0x7b, 0x63, 0xeb, 0xfb, 0xcf, 0x84, 0xd0, 0xb1, 0xac, 0x8e, 0x7e, 0x70, 0xf0, 0x44, 0x35, 0x75, 0x22, 0xb1, 0xd0, 0xcb } -, - /* Signature */ - 129, - { 0x09, 0x76, 0x81, 0x12, 0x17, 0x71, 0x45, 0x44, 0x41, 0x01, 0x33, 0x24, 0x3b, 0xeb, 0xa9, 0xa2, 0x1a, 0x6f, 0x72, 0x12, 0xc6, 0x87, 0x91, 0x5c, 0x72, 0x02, 0x7b, 0xba, 0x31, 0x12, 0xf6, 0x97, 0x05, 0x42, 0x5c, 0xb9, 0x94, 0xcb, 0xb6, 0xd3, 0x59, 0xc1, 0x46, 0xb9, 0x5d, 0xb1, 0x44, 0x64, 0x35, 0xd4, 0xcf, 0x96, 0x1d, 0xfd, 0x5c, 0x49, 0x87, 0x39, 0xbf, 0xd4, 0xbe, 0x6e, 0xf1, 0xad, 0xd7, 0x4b, 0x81, 0xb2, 0x89, 0x8a, 0x4c, 0xe4, 0x3d, 0xc3, 0x7c, 0xb0, 0xe9, 0xed, 0x77, 0x44, 0xcf, 0x40, 0x9b, 0xab, 0xff, 0x71, 0x78, 0x85, 0x42, 0xff, 0xd2, 0x86, 0xeb, 0xe5, 0x25, 0x5d, 0x63, 0xdd, 0x7b, 0xd5, 0x5b, 0xa4, 0x3f, 0x51, 0x84, 0xe2, 0x48, 0xd3, 0xa6, 0x69, 0x33, 0xcd, 0xb0, 0x69, 0x91, 0xec, 0xc9, 0x0e, 0xb3, 0x9e, 0xe7, 0x1d, 0x65, 0xc8, 0x8e, 0xd2, 0x4d, 0x94, 0x4c } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.10", - /* Message to be signed */ - 222, - { 0xa7, 0x90, 0xe6, 0xac, 0x5d, 0x55, 0x6f, 0xb7, 0xcf, 0x44, 0x46, 0x0c, 0x7b, 0x9b, 0xe5, 0xeb, 0x7f, 0x24, 0xf9, 0x87, 0xff, 0x89, 0x0d, 0xcb, 0x78, 0x40, 0x24, 0x1d, 0x45, 0x54, 0x5b, 0x71, 0x05, 0x63, 0x5a, 0x1a, 0xaf, 0x44, 0x57, 0xe6, 0x41, 0x0c, 0x65, 0xae, 0xce, 0x50, 0x11, 0xe2, 0x77, 0x5e, 0xc8, 0x53, 0x0a, 0x64, 0xa1, 0x88, 0x39, 0xe9, 0xc5, 0x8a, 0x7b, 0x77, 0x42, 0x4f, 0x74, 0x29, 0x3d, 0xcb, 0x9e, 0x9e, 0xa8, 0x73, 0x6d, 0x6b, 0xa5, 0x8b, 0x1c, 0x66, 0x53, 0xd5, 0x7b, 0xea, 0xab, 0x98, 0x73, 0x5f, 0x7a, 0xf7, 0x32, 0x47, 0x7b, 0x9a, 0xf6, 0xa3, 0x3f, 0xf0, 0x75, 0xc7, 0xe4, 0x66, 0x39, 0xd7, 0x48, 0x55, 0x08, 0x20, 0xba, 0x6a, 0xbd, 0x4a, 0x9d, 0x48, 0xcb, 0x49, 0x03, 0xf6, 0x5b, 0x76, 0xf8, 0x14, 0xc6, 0xcd, 0xc9, 0x5e, 0x8d, 0x9e, 0x87, 0x0c, 0x24, 0x4a, 0x02, 0x9b, 0x29, 0x4a, 0x8a, 0x5c, 0x82, 0x6a, 0xb1, 0x61, 0xf6, 0xf9, 0x78, 0xd9, 0xf1, 0xc0, 0x3f, 0xcd, 0xda, 0xae, 0xfb, 0xfa, 0xdb, 0x8c, 0xaa, 0xe8, 0x4b, 0xc2, 0xdd, 0x33, 0x2e, 0xb0, 0x49, 0x97, 0xd6, 0x1e, 0xfa, 0x91, 0xe9, 0x24, 0x1e, 0x4c, 0xcd, 0x97, 0x64, 0xc7, 0x26, 0xe7, 0x66, 0xed, 0x3b, 0x03, 0x38, 0xd0, 0x86, 0xf1, 0x03, 0x2c, 0x15, 0x33, 0xef, 0x59, 0x3f, 0x88, 0xfd, 0x56, 0x03, 0x37, 0x91, 0xb1, 0xd0, 0x62, 0x5c, 0x6c, 0xa5, 0x1e, 0xec, 0x27, 0x9c, 0xfb, 0x6a, 0xe3, 0xf1, 0x27, 0x00, 0xcf, 0x5b, 0xac, 0x27, 0x1e, 0x65, 0x67 } -, - /* Signature */ - 129, - { 0x0d, 0x1b, 0x11, 0x1c, 0xe8, 0xde, 0x1d, 0x7c, 0x4f, 0x7f, 0xce, 0xac, 0x73, 0xdf, 0x70, 0xaa, 0x6e, 0xda, 0x58, 0xdc, 0x32, 0xeb, 0x98, 0xf7, 0x8e, 0x7f, 0xb9, 0xbc, 0x25, 0xde, 0x3e, 0x6b, 0x09, 0xab, 0x8c, 0xae, 0x3b, 0x20, 0x26, 0xb6, 0x18, 0x7f, 0xf6, 0x36, 0x72, 0xe5, 0x7d, 0xa4, 0xac, 0x28, 0x96, 0x24, 0x45, 0xd1, 0xfe, 0x95, 0x1d, 0x27, 0xbe, 0x6a, 0x6c, 0xe7, 0xa5, 0x80, 0x7e, 0x13, 0x76, 0x13, 0x94, 0x46, 0xe8, 0x54, 0x9d, 0x48, 0xaa, 0x59, 0xfc, 0x22, 0x33, 0x54, 0xd1, 0x21, 0xfd, 0xcc, 0x38, 0xf1, 0xd0, 0x27, 0x5e, 0x41, 0x86, 0x92, 0x27, 0x00, 0xad, 0xc6, 0x1d, 0xae, 0x1e, 0x4b, 0xe8, 0x05, 0x22, 0x2a, 0x1c, 0xf0, 0x7f, 0x11, 0x0a, 0x61, 0x58, 0xa2, 0xa2, 0x62, 0x58, 0xf1, 0x9c, 0x65, 0x7a, 0x11, 0x0c, 0x0d, 0x9a, 0xd2, 0x91, 0x68, 0x0c, 0x75, 0x96 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.11", - /* Message to be signed */ - 256, - { 0x32, 0xaf, 0xd1, 0x3e, 0x60, 0x7d, 0x87, 0xb2, 0x5f, 0xf4, 0x0a, 0x88, 0x5b, 0x25, 0x09, 0xf5, 0x21, 0xf2, 0xa0, 0xa7, 0x72, 0xa9, 0x6a, 0x39, 0xfb, 0x3f, 0x71, 0xc9, 0x63, 0x84, 0xb3, 0xd7, 0x57, 0x8f, 0x48, 0xfc, 0xea, 0x97, 0x39, 0x56, 0x0a, 0x65, 0xbf, 0xb4, 0x83, 0xd9, 0x60, 0x8d, 0x20, 0x25, 0x55, 0xf6, 0x6d, 0x61, 0x2d, 0x16, 0xb9, 0x25, 0x53, 0x87, 0xb4, 0xe1, 0x12, 0x41, 0x15, 0xed, 0x48, 0xbf, 0xef, 0x8b, 0x89, 0xd8, 0xdd, 0xfc, 0x21, 0x9c, 0xcc, 0xe4, 0x87, 0x86, 0xc9, 0xe6, 0x42, 0x6a, 0x92, 0x12, 0xe7, 0xb1, 0x6d, 0x97, 0x1d, 0x27, 0x8a, 0x11, 0x18, 0xf2, 0xf8, 0x6b, 0x9c, 0x4b, 0xbf, 0x75, 0xc9, 0xc2, 0xd0, 0x99, 0xe3, 0xf6, 0x65, 0x48, 0xf1, 0xf4, 0xa8, 0xa8, 0x21, 0xd7, 0x27, 0x44, 0x98, 0xf7, 0xcc, 0xe6, 0xec, 0x5e, 0x2b, 0xf2, 0xbf, 0xad, 0x2c, 0x6f, 0xc0, 0x05, 0xe8, 0x0a, 0x48, 0xca, 0xe4, 0x69, 0x92, 0xfc, 0x82, 0x67, 0xa6, 0x48, 0x0a, 0xcb, 0x89, 0x4c, 0xcc, 0x9b, 0x62, 0x09, 0x5c, 0xad, 0x97, 0xdb, 0x70, 0xd8, 0x82, 0xa1, 0x3f, 0xb3, 0x85, 0x88, 0xc4, 0x8c, 0xa1, 0x90, 0xf1, 0x80, 0xcb, 0x3e, 0x61, 0xac, 0xb4, 0xe2, 0xcf, 0xd9, 0xcd, 0xbf, 0x85, 0x5c, 0x53, 0x99, 0x21, 0xf6, 0x8e, 0x11, 0x49, 0xd0, 0x54, 0x7e, 0xf5, 0x9a, 0xf5, 0x37, 0x92, 0xdc, 0x66, 0x0d, 0xa5, 0xef, 0x48, 0xa7, 0xab, 0x89, 0x36, 0xd3, 0xd3, 0x6e, 0xd6, 0xb6, 0x46, 0x9e, 0xb6, 0xfd, 0x95, 0xe3, 0xaf, 0x18, 0x2c, 0x87, 0x68, 0xfa, 0x60, 0x04, 0x78, 0x54, 0xf1, 0x8f, 0x37, 0x41, 0xc1, 0x88, 0x3b, 0xb0, 0x79, 0x26, 0x88, 0xca, 0xdb, 0x9e, 0x4d, 0xf3, 0x91, 0xd9, 0x11, 0x45, 0xb8, 0x5e, 0x2a, 0xe2, 0x4f, 0xfd, 0xfe, 0x51 } -, - /* Signature */ - 129, - { 0x01, 0xa9, 0x37, 0xb3, 0xcc, 0x82, 0x54, 0xd5, 0x15, 0x08, 0x70, 0x9e, 0x4a, 0x4d, 0xe7, 0xb1, 0x81, 0xde, 0xd9, 0xa4, 0x47, 0xb3, 0xec, 0x8d, 0xad, 0x49, 0x2c, 0x39, 0x79, 0x52, 0xdf, 0x7c, 0x55, 0x0e, 0x4b, 0x26, 0xc9, 0x50, 0x17, 0x29, 0x9d, 0x8d, 0x45, 0x5f, 0xf7, 0x97, 0x1c, 0x33, 0x8c, 0xd0, 0x14, 0xdf, 0x78, 0xe2, 0xa8, 0xaa, 0x5e, 0xbe, 0xe2, 0x58, 0xf4, 0x92, 0x53, 0xd5, 0x1a, 0xce, 0x9a, 0x49, 0x31, 0x9f, 0xfc, 0x80, 0x7a, 0xd7, 0x0b, 0x2d, 0xf2, 0xc9, 0x6d, 0xcd, 0xb7, 0x3b, 0x48, 0xac, 0xbc, 0x4f, 0x6c, 0x3c, 0x2a, 0x70, 0x1e, 0x7c, 0x15, 0x4b, 0x27, 0x9b, 0x07, 0x05, 0xbd, 0xf2, 0x54, 0x8c, 0x8b, 0x36, 0x11, 0xb9, 0x7d, 0xa1, 0xac, 0x09, 0xcd, 0x12, 0x12, 0x50, 0x99, 0x54, 0x0b, 0xf7, 0xba, 0x99, 0xb0, 0x8c, 0x2f, 0x3d, 0x5f, 0x6a, 0xea, 0x7d, 0x40 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.12", - /* Message to be signed */ - 162, - { 0x5b, 0x00, 0xb8, 0xb7, 0x94, 0xa1, 0x0d, 0x21, 0xf1, 0xb4, 0x5e, 0xca, 0xa2, 0x0d, 0xf7, 0xc5, 0xb3, 0x52, 0x2c, 0x1b, 0x1d, 0xb4, 0xb0, 0x84, 0xb9, 0x59, 0xaa, 0x4e, 0x56, 0x58, 0xac, 0x54, 0x68, 0xf6, 0xe8, 0xfb, 0x61, 0x2f, 0xf9, 0x9f, 0x32, 0x16, 0xb5, 0xd2, 0x1c, 0xb4, 0xac, 0xc0, 0xbb, 0x42, 0xee, 0xfd, 0xb8, 0xe8, 0x2d, 0x75, 0x4b, 0x85, 0xd0, 0x97, 0x45, 0x89, 0x4a, 0x52, 0x3c, 0x01, 0x62, 0xd0, 0x8e, 0xcc, 0xe4, 0x8b, 0x99, 0xdd, 0x6c, 0x38, 0xe2, 0xbd, 0x3d, 0x53, 0x1c, 0x85, 0x62, 0xde, 0xec, 0xfc, 0x61, 0x52, 0x36, 0x9a, 0xac, 0xf5, 0x80, 0xea, 0xf9, 0xdb, 0x6c, 0x68, 0xb6, 0x9d, 0xf2, 0xfb, 0xf3, 0x05, 0x3f, 0x60, 0x1f, 0x70, 0x02, 0x2c, 0x9e, 0x38, 0x1d, 0xfb, 0xc5, 0x90, 0x99, 0xc3, 0x7b, 0xde, 0x5a, 0xd8, 0x9a, 0x8c, 0xc1, 0xef, 0xe4, 0xc7, 0xb7, 0xd7, 0x8e, 0x90, 0x97, 0xe0, 0x81, 0x21, 0xed, 0xa6, 0x4a, 0xc4, 0x5c, 0x32, 0x7e, 0x5e, 0xda, 0xf9, 0x22, 0xd3, 0xc3, 0x5f, 0x88, 0xb5, 0x2c, 0x93, 0xd3, 0x99, 0xf4, 0xc2, 0x38, 0x36, 0x2f, 0xe9 } -, - /* Signature */ - 129, - { 0x0f, 0xc6, 0xac, 0x1d, 0x42, 0x94, 0x79, 0x38, 0xcd, 0x25, 0x86, 0xd0, 0xe7, 0xfc, 0x3a, 0x05, 0x42, 0xb9, 0xaf, 0x12, 0xd3, 0x6e, 0xeb, 0xf9, 0x2b, 0x5d, 0x04, 0x9c, 0x79, 0x65, 0xb1, 0x1b, 0xa9, 0xcc, 0xbf, 0x47, 0x00, 0xf3, 0x45, 0x60, 0x91, 0x11, 0x77, 0xb9, 0xd1, 0x29, 0x6f, 0x1c, 0x68, 0xe3, 0xaf, 0x46, 0x9f, 0x4f, 0x39, 0x9d, 0xbc, 0x18, 0x9c, 0x23, 0xea, 0x74, 0x65, 0x98, 0x28, 0x13, 0x32, 0x33, 0x05, 0xed, 0x6c, 0x35, 0xff, 0x9c, 0xc1, 0x09, 0xd0, 0xa2, 0x30, 0x3f, 0xe7, 0xd3, 0x29, 0xca, 0x31, 0x7e, 0xc4, 0xb1, 0x8e, 0xdd, 0x19, 0xc6, 0x2c, 0x60, 0xa3, 0xc8, 0xc3, 0x10, 0x6f, 0x86, 0xdb, 0xd0, 0x72, 0xe3, 0xe1, 0xeb, 0x87, 0x85, 0x28, 0x8c, 0x21, 0xab, 0xca, 0xc2, 0x2e, 0x0c, 0x0d, 0x41, 0xf4, 0xe2, 0x3e, 0x7f, 0x39, 0x4d, 0x46, 0x82, 0xf6, 0xce, 0x87 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.13", - /* Message to be signed */ - 26, - { 0xb7, 0x50, 0xae, 0x6d, 0x4d, 0x2c, 0xeb, 0x92, 0x14, 0x05, 0x34, 0x64, 0x8d, 0x36, 0xef, 0x25, 0xe4, 0x51, 0x55, 0xf5, 0x2b, 0xde, 0x1b, 0xf2, 0x6a, 0xb7 } -, - /* Signature */ - 129, - { 0x16, 0xaa, 0xde, 0xdc, 0xa0, 0x9e, 0x06, 0x25, 0x60, 0xc6, 0x61, 0xd2, 0xa4, 0x9b, 0x0e, 0xe4, 0xd9, 0xce, 0x23, 0x90, 0x7c, 0x69, 0xd1, 0x00, 0x04, 0xf1, 0x49, 0xd1, 0x03, 0xc5, 0x9c, 0x16, 0xfe, 0x7d, 0x43, 0x73, 0x59, 0x7d, 0xb9, 0xff, 0xd8, 0x92, 0x3a, 0x77, 0xa6, 0xb9, 0x43, 0xb1, 0x88, 0xc4, 0x74, 0x25, 0xe2, 0xa9, 0xe5, 0x30, 0x41, 0x3e, 0xfd, 0xb6, 0x84, 0x8d, 0xd3, 0x42, 0x0b, 0xa5, 0x3e, 0xf8, 0x1c, 0x25, 0xc5, 0x78, 0xf8, 0xd9, 0x51, 0x4d, 0x93, 0xfc, 0xc9, 0xcb, 0x1f, 0xb5, 0x2f, 0x58, 0xd8, 0x8a, 0x57, 0xd1, 0xfd, 0x3f, 0xe2, 0x2d, 0xa3, 0x10, 0xec, 0xea, 0x9e, 0xce, 0x55, 0xe9, 0x60, 0x8d, 0x63, 0xae, 0x21, 0xdb, 0xae, 0xa6, 0x57, 0x1b, 0x78, 0xfc, 0xfd, 0xd2, 0x71, 0xbb, 0x65, 0x92, 0x57, 0x47, 0x6b, 0x59, 0x95, 0x68, 0x7a, 0x02, 0xbb, 0xe7, 0x89 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.14", - /* Message to be signed */ - 183, - { 0x47, 0xbe, 0x01, 0x02, 0x0e, 0xb7, 0xe7, 0x87, 0x5b, 0xd4, 0xfc, 0xc0, 0x05, 0xa8, 0x2b, 0x36, 0xfd, 0xf2, 0x14, 0x5e, 0xf1, 0x32, 0xe2, 0xed, 0x16, 0x2f, 0xf6, 0x94, 0xbc, 0x71, 0x58, 0x9c, 0x7d, 0xc6, 0xd5, 0xa3, 0xf8, 0x9d, 0x59, 0x7f, 0x2d, 0x2a, 0xa3, 0x43, 0x33, 0x51, 0x18, 0xf6, 0xfd, 0xbd, 0xee, 0xf2, 0x3e, 0x61, 0x3c, 0xba, 0xcc, 0xde, 0x41, 0x95, 0xe6, 0x64, 0xa0, 0x09, 0x4b, 0x07, 0xfc, 0x0a, 0x32, 0x84, 0x8d, 0x61, 0x39, 0x03, 0x1c, 0xf5, 0x72, 0xa1, 0xe3, 0x23, 0xc5, 0xa7, 0x07, 0xb6, 0xfa, 0x2a, 0xee, 0xf2, 0xdc, 0x87, 0x2d, 0xd5, 0xa3, 0xe7, 0x6b, 0x13, 0xf8, 0xef, 0x94, 0xad, 0xeb, 0xd4, 0xe2, 0x05, 0x74, 0x8e, 0x48, 0x5b, 0x40, 0x01, 0xd5, 0xd2, 0xa0, 0x90, 0xb8, 0x9b, 0x2e, 0x64, 0x74, 0xc4, 0x79, 0xe7, 0xb0, 0x0d, 0x2d, 0x57, 0xf5, 0x86, 0xab, 0x76, 0xb8, 0x0f, 0x79, 0x5b, 0xa8, 0x99, 0x62, 0x88, 0x29, 0x2c, 0x3f, 0x2c, 0xa5, 0x1a, 0x44, 0xe4, 0xe8, 0x41, 0xc0, 0x37, 0x07, 0xe4, 0x80, 0x25, 0xaf, 0x4b, 0xfd, 0x0a, 0xb6, 0xef, 0xeb, 0x83, 0x62, 0xed, 0xd5, 0xd2, 0x34, 0x05, 0xba, 0x0e, 0x23, 0x1b, 0x33, 0x24, 0xe1, 0xca, 0x3c, 0x5d, 0x63, 0x9d, 0x2c, 0x9d, 0x82 } -, - /* Signature */ - 129, - { 0x06, 0x39, 0x17, 0x92, 0x9b, 0xbb, 0x20, 0x92, 0x17, 0xff, 0x48, 0xed, 0x4f, 0x55, 0xd0, 0x7a, 0x03, 0xf7, 0x6d, 0x6d, 0x94, 0x04, 0x8b, 0x6f, 0x71, 0x31, 0x0b, 0x2c, 0x96, 0xe2, 0x14, 0xab, 0x22, 0x0d, 0x4e, 0x45, 0xac, 0x01, 0xc9, 0x3d, 0xcc, 0x8a, 0x5c, 0x26, 0xa0, 0x2d, 0xf6, 0x1f, 0xfd, 0xb3, 0x17, 0x54, 0x96, 0x65, 0x61, 0x0c, 0x84, 0xbd, 0xb8, 0x94, 0x5f, 0xc6, 0xbb, 0xd3, 0x8b, 0xae, 0xd7, 0xfe, 0xe9, 0x8e, 0xb0, 0x56, 0xd9, 0xf0, 0x39, 0xa8, 0x60, 0xd4, 0x52, 0xb3, 0xac, 0xac, 0x18, 0x00, 0xa9, 0x32, 0xa2, 0x8c, 0x88, 0x28, 0x6a, 0xbd, 0xa8, 0xde, 0x3c, 0xb6, 0xc0, 0xd7, 0x94, 0xda, 0xab, 0x7a, 0x8b, 0xa0, 0x11, 0x09, 0x33, 0xb4, 0xd1, 0xde, 0xd2, 0x39, 0xcb, 0xdd, 0x55, 0x7d, 0x3e, 0x5a, 0x16, 0x29, 0x17, 0x85, 0x33, 0x15, 0xde, 0x68, 0x09, 0x00, 0xa8 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.15", - /* Message to be signed */ - 238, - { 0x4b, 0x9c, 0x09, 0x64, 0x48, 0x10, 0xd4, 0xb3, 0x06, 0x55, 0xed, 0x83, 0x38, 0xbb, 0x27, 0x6b, 0x62, 0x4c, 0x68, 0x01, 0x98, 0x22, 0xd1, 0xfc, 0x8f, 0x78, 0x86, 0x1e, 0x13, 0xe2, 0x2a, 0xc1, 0x71, 0x82, 0x1c, 0xfd, 0xbd, 0x3f, 0x8f, 0x5b, 0x8d, 0xc9, 0xc0, 0xde, 0x73, 0x2b, 0x74, 0x6e, 0x1d, 0x13, 0x2e, 0x5f, 0x3f, 0x14, 0x9a, 0x5a, 0x86, 0x7c, 0x2e, 0xe4, 0x78, 0xe8, 0xf1, 0x4a, 0xd4, 0xb9, 0xdd, 0xeb, 0xd3, 0xae, 0x78, 0x17, 0xe8, 0x49, 0x55, 0xb3, 0x40, 0x4b, 0x09, 0x43, 0x93, 0xe6, 0x1c, 0xa0, 0x18, 0x9d, 0x05, 0x53, 0x69, 0xb4, 0x24, 0x30, 0x09, 0xa0, 0xf5, 0x40, 0x3f, 0x41, 0xc1, 0x00, 0x23, 0x08, 0xc0, 0x0c, 0xe6, 0x99, 0x67, 0x19, 0x37, 0xba, 0xf1, 0x3c, 0x78, 0x93, 0xd6, 0x63, 0xc9, 0x47, 0xfc, 0x7f, 0x84, 0x07, 0x1a, 0x67, 0x2e, 0x5e, 0x07, 0x37, 0x8a, 0xac, 0x08, 0xb3, 0xfa, 0xf0, 0xfc, 0xcf, 0x5b, 0xf2, 0x83, 0x09, 0x25, 0x85, 0xeb, 0xe2, 0x40, 0xa3, 0x00, 0x46, 0x20, 0xb6, 0xf3, 0xae, 0xb6, 0x73, 0x2b, 0x7b, 0x9d, 0x8d, 0x3b, 0xea, 0xfc, 0x84, 0x67, 0xd1, 0xf1, 0xf1, 0xc7, 0xda, 0x66, 0xb1, 0xbf, 0x5c, 0xcc, 0x14, 0x5b, 0x32, 0x24, 0x24, 0x5f, 0xae, 0x31, 0xdf, 0xb4, 0x03, 0xf4, 0x93, 0xc0, 0x75, 0x53, 0x57, 0xad, 0xd7, 0xcb, 0x27, 0x63, 0x71, 0x32, 0x26, 0xc5, 0x4f, 0x43, 0x64, 0x0f, 0x7a, 0x67, 0x0e, 0xb7, 0xb1, 0xf6, 0xe9, 0xe7, 0x72, 0xf2, 0xe5, 0x14, 0x17, 0xa7, 0x05, 0xcf, 0xc5, 0x87, 0x3f, 0xfb, 0x88, 0xa5, 0xdb, 0x07, 0xec, 0xc4, 0xee, 0x89, 0xf3, 0x30, 0xa6, 0x69, 0x0a, 0x88, 0x12 } -, - /* Signature */ - 129, - { 0x1a, 0x0b, 0x69, 0x8c, 0xf3, 0xa0, 0x58, 0xb4, 0x49, 0x19, 0xaf, 0x73, 0xc3, 0xde, 0x32, 0x8e, 0x86, 0xce, 0x9a, 0x5d, 0x49, 0x99, 0xe0, 0x12, 0x2f, 0x41, 0x4b, 0x94, 0xf3, 0x2b, 0x2d, 0x8a, 0xb1, 0xe6, 0x55, 0x0c, 0xc0, 0xd4, 0x8d, 0xc0, 0x4b, 0xef, 0xac, 0x2c, 0x67, 0xa4, 0xd0, 0x69, 0xa7, 0x20, 0x8f, 0x14, 0x2d, 0xc2, 0x67, 0xb3, 0xe3, 0x8f, 0x63, 0x38, 0xa0, 0xb1, 0x83, 0x9a, 0x93, 0xa8, 0x36, 0x80, 0x7d, 0x18, 0x1e, 0x3f, 0x0c, 0x7e, 0x87, 0x7f, 0xb2, 0x42, 0x16, 0x02, 0x00, 0x5b, 0xca, 0x25, 0xa9, 0xc3, 0x72, 0x26, 0x6d, 0x18, 0xe6, 0xd5, 0x00, 0xc5, 0xc7, 0xab, 0x13, 0x38, 0x52, 0x83, 0xd2, 0xaf, 0x91, 0x9d, 0x0b, 0xba, 0x0d, 0xcb, 0x88, 0xbf, 0x7b, 0xb9, 0x97, 0x2d, 0x67, 0x00, 0x8f, 0xf4, 0x98, 0x54, 0x7d, 0x80, 0xfc, 0xa6, 0x58, 0xef, 0xe7, 0x64, 0xa5 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.16", - /* Message to be signed */ - 216, - { 0xec, 0x9f, 0xf1, 0x4b, 0x9f, 0x19, 0x7a, 0x2b, 0x4f, 0x24, 0x94, 0x8c, 0x29, 0xd2, 0xf6, 0x4a, 0x64, 0x62, 0x52, 0x23, 0xdd, 0xb8, 0x53, 0x46, 0x37, 0x8c, 0x2c, 0x25, 0x34, 0x3f, 0xcb, 0xef, 0x58, 0x5a, 0x99, 0xe1, 0xec, 0x0b, 0xef, 0x0e, 0xf9, 0xd0, 0x9e, 0xad, 0x85, 0xbe, 0xe1, 0xc4, 0xbf, 0xb3, 0x5e, 0x48, 0xfb, 0x26, 0x41, 0x1b, 0xdf, 0x18, 0x0d, 0xc5, 0xcf, 0x31, 0x7b, 0x3a, 0x34, 0x83, 0x71, 0xc7, 0xc5, 0xf4, 0xaa, 0x6d, 0x59, 0x08, 0xfc, 0xfc, 0x1e, 0xa3, 0x90, 0x18, 0xcf, 0x04, 0x49, 0xe5, 0x5f, 0x4e, 0xf9, 0x94, 0xbf, 0xda, 0x40, 0x4f, 0x1c, 0x18, 0x9f, 0xdb, 0x8a, 0x0a, 0x5b, 0x09, 0x06, 0xc3, 0xd4, 0x0d, 0xe1, 0xe7, 0x87, 0xc2, 0xdb, 0x4d, 0x88, 0xdb, 0xc2, 0x10, 0xb9, 0xf8, 0x01, 0xf4, 0xcd, 0x9c, 0x97, 0x22, 0x7e, 0x9b, 0x2f, 0xbc, 0x28, 0x11, 0xe3, 0x8c, 0xed, 0xd9, 0xe9, 0xf0, 0x35, 0x60, 0x03, 0x1d, 0x4c, 0x95, 0x8a, 0x76, 0x81, 0xba, 0x9d, 0x7e, 0xa5, 0xe7, 0x8e, 0x9b, 0xd8, 0xbd, 0xed, 0xdb, 0x41, 0x56, 0x79, 0x0e, 0xf2, 0x1f, 0xb7, 0x4f, 0xbc, 0x41, 0x58, 0xc2, 0x93, 0x9e, 0x4e, 0xfc, 0xb8, 0x2e, 0xfd, 0xc8, 0x81, 0x88, 0x6a, 0x5b, 0x67, 0x13, 0xa2, 0x4b, 0x9b, 0x5f, 0x2e, 0xe2, 0x5c, 0xcf, 0x72, 0x1a, 0x64, 0xe0, 0xf6, 0x40, 0x77, 0x8e, 0xcb, 0x3d, 0x35, 0xb4, 0xb8, 0xee, 0xa8, 0xec, 0xe3, 0x12, 0x32, 0x63, 0x63, 0x10, 0xae, 0x3c, 0xc6, 0xb8, 0x2b, 0x8a } -, - /* Signature */ - 129, - { 0x01, 0x3b, 0x42, 0x05, 0x78, 0x20, 0xc7, 0x3e, 0x3a, 0xcf, 0xc1, 0xdf, 0x4d, 0xe1, 0x44, 0x0c, 0x65, 0x8e, 0x01, 0x80, 0x43, 0x6d, 0xa7, 0x18, 0x5a, 0x9f, 0xab, 0xd2, 0x6e, 0xb3, 0x26, 0x74, 0xb5, 0x54, 0xde, 0x35, 0x4d, 0x1f, 0x4f, 0x24, 0xe8, 0x77, 0x73, 0x26, 0x7f, 0xed, 0x9d, 0xd0, 0xfd, 0x82, 0x93, 0xea, 0xca, 0x4a, 0xf3, 0xd3, 0xa9, 0xdc, 0x51, 0x8c, 0x8e, 0x49, 0x5a, 0x14, 0x76, 0x95, 0x11, 0x1d, 0x3d, 0xc1, 0x77, 0x63, 0xf1, 0xf0, 0x2e, 0xec, 0x1e, 0xe2, 0x9f, 0xb1, 0xab, 0x74, 0x9c, 0xf3, 0x0c, 0x78, 0x86, 0xda, 0x8b, 0x2f, 0x64, 0x69, 0x69, 0x59, 0x8a, 0xa7, 0x0f, 0x9a, 0x92, 0xfa, 0x4f, 0x93, 0x5c, 0x7c, 0xc7, 0x7b, 0xfa, 0xb6, 0x98, 0x1f, 0x0d, 0xf0, 0xd2, 0x85, 0xcf, 0xb1, 0x0d, 0x66, 0x58, 0x15, 0x39, 0xf7, 0x8d, 0x03, 0x68, 0xed, 0x4f, 0x93, 0x01 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.17", - /* Message to be signed */ - 209, - { 0x41, 0x4c, 0xea, 0x8e, 0xec, 0x6d, 0xa3, 0xc6, 0x6f, 0xfc, 0x84, 0x70, 0xf7, 0xe1, 0x47, 0x60, 0xf7, 0x4b, 0xf6, 0xe7, 0x5b, 0x84, 0xdc, 0x98, 0xfc, 0x80, 0x60, 0xdd, 0x3c, 0x21, 0x9e, 0x76, 0x77, 0x7d, 0xfa, 0xba, 0xa6, 0xe6, 0xb9, 0x29, 0x55, 0x37, 0x9f, 0x3e, 0xca, 0xaf, 0x5f, 0xcb, 0x8a, 0xa5, 0x54, 0x9e, 0xc9, 0xcd, 0xd1, 0xf5, 0xd5, 0x77, 0x20, 0x1b, 0x8e, 0x32, 0x9f, 0x72, 0xfa, 0xa2, 0xbc, 0xad, 0xea, 0xee, 0x38, 0x8d, 0xaf, 0x7d, 0x40, 0x8a, 0xfd, 0xe6, 0x55, 0x3d, 0x24, 0x17, 0x86, 0x0f, 0x3c, 0x8e, 0x25, 0x30, 0x5d, 0xff, 0x76, 0xdb, 0xbd, 0x95, 0x16, 0xb6, 0x86, 0x8e, 0xe4, 0x56, 0xfc, 0x1f, 0x7b, 0x58, 0xd9, 0xed, 0x18, 0xa4, 0x6e, 0x4f, 0xc1, 0xe3, 0x53, 0xe8, 0xd0, 0x76, 0xbe, 0xa3, 0x0b, 0xf2, 0x47, 0xc6, 0x0e, 0x6f, 0x68, 0x58, 0x01, 0xa6, 0xd3, 0xf6, 0x30, 0xae, 0xa6, 0xab, 0xb4, 0x12, 0xa9, 0x41, 0xff, 0xa6, 0xf6, 0x07, 0xf6, 0xbf, 0xb1, 0x3d, 0x90, 0x01, 0x27, 0xbb, 0xec, 0xee, 0x4f, 0x98, 0xa7, 0xac, 0xa6, 0x92, 0x08, 0x11, 0x57, 0x50, 0x53, 0xab, 0x2d, 0x42, 0x70, 0x13, 0x80, 0x1d, 0x8c, 0xfb, 0xc3, 0x88, 0x0f, 0x14, 0x75, 0x43, 0x15, 0x55, 0xa0, 0x86, 0xfa, 0x55, 0x60, 0xc6, 0xe2, 0x20, 0x6d, 0x9e, 0xe9, 0x38, 0x13, 0x44, 0xb8, 0x24, 0x1c, 0x1d, 0xd1, 0xd8, 0x64, 0x48, 0x75, 0x3a, 0xf4, 0x4b, 0x00, 0xa0, 0xc9 } -, - /* Signature */ - 129, - { 0x16, 0x97, 0xbb, 0x23, 0xe2, 0x91, 0x52, 0x5f, 0x4a, 0x0e, 0x79, 0x26, 0x2f, 0x34, 0x06, 0x63, 0x0d, 0x0d, 0x6d, 0xf3, 0x32, 0x49, 0x69, 0x26, 0xc4, 0xe5, 0xae, 0xf9, 0x6e, 0x41, 0xd9, 0x55, 0x14, 0x86, 0x47, 0xea, 0xf7, 0x90, 0x69, 0x6a, 0xf6, 0x8c, 0x78, 0xeb, 0x2a, 0xb6, 0x2f, 0xf7, 0x19, 0x62, 0x96, 0xe1, 0xea, 0x88, 0x6d, 0xf0, 0x91, 0x73, 0x66, 0x09, 0x0b, 0x63, 0x0a, 0xa3, 0x18, 0x58, 0xb5, 0x16, 0x15, 0x87, 0x3f, 0xa6, 0xbc, 0x8f, 0xf0, 0x88, 0x5c, 0x57, 0xb2, 0xe7, 0x7a, 0x04, 0x90, 0x88, 0x93, 0xcc, 0xef, 0xb1, 0x41, 0x24, 0x03, 0x99, 0x1d, 0x0d, 0x23, 0xc5, 0x57, 0xd2, 0x22, 0x29, 0x1c, 0xb8, 0x51, 0x7b, 0x43, 0x28, 0x6e, 0xe0, 0x05, 0x67, 0x58, 0xd9, 0xc1, 0x0b, 0xcd, 0x69, 0xbd, 0x68, 0xb8, 0x4a, 0x2d, 0x1f, 0x53, 0x79, 0x05, 0xb8, 0xa4, 0x65, 0xe9 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.18", - /* Message to be signed */ - 169, - { 0x17, 0x89, 0xb8, 0x08, 0xb1, 0x0d, 0xe8, 0xd1, 0x77, 0x8a, 0xa4, 0x3f, 0x94, 0x10, 0x1c, 0xb8, 0x9f, 0x56, 0x34, 0x30, 0x61, 0xa1, 0xa9, 0x43, 0xbb, 0x8d, 0xa5, 0x5e, 0xe6, 0xb9, 0x79, 0xe2, 0x7a, 0xfe, 0xab, 0x0e, 0xd8, 0xee, 0x37, 0x14, 0xfb, 0xe7, 0x0b, 0x3b, 0xe8, 0x20, 0x60, 0x3e, 0x5c, 0xea, 0xde, 0xc4, 0xb2, 0x2f, 0x95, 0x87, 0x73, 0x22, 0x5d, 0xf3, 0xaa, 0xd4, 0x87, 0xb2, 0x80, 0x57, 0xeb, 0xfe, 0xbe, 0x2c, 0x87, 0x93, 0xda, 0x38, 0x46, 0xbd, 0xb1, 0x59, 0x03, 0xac, 0x71, 0xe9, 0xc9, 0x3b, 0x20, 0x16, 0x66, 0x8b, 0xd9, 0x06, 0x30, 0x1a, 0x0a, 0x7d, 0x50, 0xdc, 0x60, 0xb2, 0xfa, 0xd8, 0x75, 0x9d, 0x18, 0xdb, 0x14, 0x7f, 0x20, 0x66, 0x86, 0x5f, 0xd9, 0x09, 0x50, 0xa1, 0x88, 0x74, 0x7d, 0x9b, 0x69, 0x68, 0x53, 0x48, 0x6d, 0xea, 0xab, 0x8e, 0x44, 0x3f, 0xad, 0x29, 0x92, 0xfc, 0x8a, 0x56, 0x5b, 0xdc, 0xba, 0xda, 0xb0, 0xb9, 0x33, 0x3a, 0xb7, 0xfc, 0xdb, 0x9c, 0x3d, 0x0b, 0xcf, 0xde, 0x50, 0xa5, 0x8d, 0x2a, 0xea, 0xf1, 0xce, 0xfb, 0x0c, 0x95, 0xf9, 0x07, 0x73, 0xb2, 0xfa, 0xc1, 0x37, 0xcd, 0xbc } -, - /* Signature */ - 129, - { 0x02, 0xf9, 0x97, 0x51, 0xc8, 0x44, 0x38, 0xea, 0xc7, 0xf9, 0x96, 0x32, 0x50, 0xd9, 0xee, 0x22, 0xfd, 0xa7, 0x29, 0x7b, 0x6e, 0x86, 0xe2, 0xa8, 0xbc, 0xc7, 0xa9, 0xb5, 0xac, 0x01, 0xf7, 0x90, 0xe0, 0x99, 0x11, 0x70, 0x46, 0x60, 0x85, 0x8e, 0xa5, 0xc1, 0x62, 0x72, 0xc3, 0x81, 0x33, 0xfa, 0xda, 0xde, 0xfa, 0x23, 0xc1, 0x02, 0x90, 0x8e, 0x41, 0x9d, 0xe2, 0xeb, 0xe9, 0xac, 0x27, 0x19, 0x45, 0x72, 0x87, 0x8e, 0x2a, 0x97, 0x1f, 0x88, 0x31, 0xc8, 0xf9, 0x17, 0xe8, 0x52, 0xe8, 0x51, 0xdf, 0x99, 0xd4, 0xdf, 0x01, 0x8f, 0xdd, 0xb2, 0xce, 0xa3, 0x1a, 0xc3, 0xa7, 0xb6, 0x89, 0x75, 0xe8, 0x0a, 0x99, 0x7c, 0xb7, 0xdd, 0x4d, 0x4d, 0xf7, 0x57, 0xbb, 0x8c, 0x3e, 0xcd, 0x91, 0x0b, 0xcb, 0x06, 0x03, 0x35, 0x52, 0x12, 0x7a, 0xc3, 0x08, 0x11, 0x77, 0x39, 0xa0, 0x2c, 0x20, 0x17, 0x17 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.19", - /* Message to be signed */ - 151, - { 0xff, 0x87, 0x5c, 0xca, 0x0e, 0xfc, 0x3d, 0x90, 0xf5, 0x6e, 0x31, 0xf4, 0xbb, 0x66, 0x84, 0x14, 0x89, 0x4d, 0x09, 0xde, 0x90, 0x12, 0x7f, 0x84, 0x66, 0x32, 0x43, 0x10, 0xe1, 0x13, 0x69, 0xa3, 0xf2, 0xf6, 0x49, 0x3c, 0x1c, 0x78, 0xa3, 0x62, 0xb2, 0xa1, 0x4f, 0xb5, 0x48, 0x8c, 0xb5, 0x6c, 0xe0, 0x22, 0x73, 0x9e, 0x43, 0xaa, 0x76, 0x3d, 0x9c, 0x1c, 0x97, 0xb6, 0x21, 0xcc, 0x53, 0x68, 0xc9, 0xc0, 0x0e, 0x81, 0x60, 0x67, 0x92, 0x69, 0x5f, 0x9a, 0xf9, 0xab, 0x63, 0x3e, 0xf2, 0x39, 0xea, 0xb3, 0x44, 0x9d, 0xda, 0x9e, 0x66, 0x07, 0x08, 0x9c, 0x37, 0x51, 0x90, 0x35, 0x4f, 0x7a, 0x59, 0xa4, 0xb3, 0xef, 0x75, 0x22, 0x9d, 0x1c, 0x47, 0xec, 0xda, 0xe3, 0x3b, 0x27, 0x69, 0xff, 0x55, 0x42, 0x65, 0x5e, 0x78, 0x10, 0x22, 0xd0, 0xc4, 0x3b, 0x42, 0x1a, 0x99, 0x84, 0x3c, 0x3d, 0xe1, 0x04, 0x22, 0xad, 0x2f, 0xd8, 0x9d, 0xfe, 0x44, 0x66, 0x15, 0xf5, 0x19, 0x2e, 0x75, 0x79, 0xd4, 0x37, 0x43, 0x79, 0xbb, 0xff, 0xb9 } -, - /* Signature */ - 129, - { 0x02, 0x68, 0x91, 0x7f, 0x8b, 0xda, 0xac, 0x9e, 0xbe, 0x32, 0xb0, 0xdc, 0x6c, 0xd9, 0xd3, 0x9e, 0xfd, 0x3f, 0x88, 0xd8, 0x17, 0xd6, 0x6c, 0xb6, 0x39, 0x0d, 0x7b, 0x55, 0xc6, 0x92, 0x12, 0x21, 0x84, 0x4a, 0xb8, 0xc0, 0x89, 0x86, 0xd3, 0xf2, 0xea, 0x49, 0xbc, 0x6e, 0x3a, 0x10, 0x02, 0x08, 0x6c, 0x0b, 0x6d, 0xf1, 0x63, 0xf7, 0x9d, 0x16, 0x11, 0x6a, 0x93, 0xc4, 0xa2, 0xcc, 0x04, 0x22, 0xc9, 0x48, 0x41, 0xe1, 0xe3, 0xb9, 0x45, 0xab, 0x1d, 0x25, 0x3a, 0xb8, 0xd7, 0xd1, 0x39, 0xc9, 0x18, 0x8b, 0xa8, 0x30, 0x27, 0xc5, 0x93, 0xf8, 0x3a, 0x6f, 0x38, 0x37, 0x0e, 0x7f, 0x03, 0x79, 0xff, 0xdd, 0xf1, 0x42, 0x7d, 0x6f, 0xcc, 0xcf, 0x60, 0x83, 0x31, 0x3f, 0x18, 0x15, 0xb5, 0xde, 0xd6, 0x73, 0x74, 0x30, 0xbb, 0x4a, 0x70, 0xba, 0x81, 0x48, 0x48, 0x34, 0xd8, 0xd1, 0xd2, 0x9a, 0x5e } - -} -, -{ - "PKCS#1 v1.5 Signature Example 11.20", - /* Message to be signed */ - 86, - { 0xe0, 0x7e, 0xcf, 0x00, 0xe2, 0x40, 0x1a, 0xc9, 0x8b, 0x2d, 0x5a, 0xe0, 0xc9, 0xb8, 0x3f, 0x21, 0x9a, 0xb0, 0x27, 0xa6, 0x51, 0x99, 0xfd, 0xb6, 0x34, 0x59, 0x6e, 0x23, 0x44, 0x62, 0x41, 0x38, 0x72, 0x95, 0x32, 0x49, 0x53, 0x28, 0xf9, 0x3f, 0xb3, 0xa3, 0x32, 0x55, 0x27, 0x8f, 0x3e, 0xc2, 0x60, 0x65, 0xce, 0x54, 0x99, 0x5d, 0x42, 0x41, 0x93, 0xbc, 0xb7, 0x58, 0x1b, 0xfe, 0x1a, 0xb8, 0x95, 0x7d, 0x0b, 0x96, 0x1c, 0x30, 0x30, 0xb8, 0x20, 0xd0, 0x9c, 0x9e, 0x32, 0x6c, 0xc3, 0x0c, 0x0a, 0xf6, 0x42, 0x66, 0x61, 0x54 } -, - /* Signature */ - 129, - { 0x00, 0xc4, 0x6d, 0xb4, 0x1b, 0x65, 0xdd, 0xc7, 0x1f, 0xbb, 0xfc, 0x12, 0x5a, 0x4f, 0x9b, 0xab, 0x88, 0x0a, 0x2f, 0x0c, 0x1f, 0x04, 0x1c, 0x41, 0x1d, 0xf7, 0xd4, 0x5d, 0x1e, 0x19, 0x99, 0x7b, 0x34, 0x8e, 0xab, 0xba, 0x19, 0xbf, 0x79, 0xb2, 0x21, 0x77, 0xb2, 0xa0, 0xd7, 0x3f, 0xef, 0xa5, 0x00, 0x83, 0x62, 0xce, 0x59, 0x60, 0xd7, 0xef, 0x58, 0xa5, 0x89, 0x93, 0xe7, 0x46, 0x03, 0xd4, 0xd9, 0xd0, 0xb3, 0xda, 0xd4, 0xb2, 0x0c, 0x82, 0x9d, 0x36, 0xef, 0xca, 0xf5, 0x7f, 0x0c, 0x4f, 0x0c, 0xef, 0x89, 0x01, 0x5a, 0x48, 0x45, 0x02, 0x42, 0xbd, 0x02, 0x0d, 0x5f, 0x52, 0xd8, 0xb5, 0x0e, 0xa1, 0x3e, 0x56, 0xa1, 0xaa, 0xd6, 0x01, 0x91, 0x5d, 0x60, 0xec, 0x9a, 0xbf, 0xc3, 0x07, 0xf1, 0x8a, 0xf2, 0x06, 0x72, 0x38, 0x4d, 0xcc, 0x12, 0xf9, 0x82, 0x27, 0x31, 0x36, 0x99, 0x71, 0x40 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 12: A 1030-bit RSA key pair", -{ - /* Modulus */ - 129, - { 0x36, 0x98, 0x1a, 0x95, 0xae, 0x24, 0x18, 0x14, 0x52, 0xda, 0x25, 0x7c, 0x03, 0x8f, 0x05, 0x82, 0x14, 0x12, 0xd8, 0x4e, 0xb4, 0x7a, 0x43, 0xfc, 0xc7, 0xef, 0x12, 0x17, 0x95, 0x9b, 0xa6, 0x77, 0x02, 0x7f, 0x70, 0x86, 0xd3, 0xa8, 0x5c, 0xdd, 0x34, 0x9f, 0x92, 0x0f, 0x03, 0x4c, 0x02, 0x78, 0x79, 0x2d, 0xc8, 0xa8, 0xcf, 0x0c, 0x00, 0x80, 0xe5, 0xc6, 0x1f, 0x47, 0x48, 0x83, 0xc6, 0x87, 0x9f, 0x4d, 0xee, 0x0a, 0xe9, 0x52, 0x47, 0x8a, 0x5e, 0xe2, 0xce, 0x4e, 0x39, 0x18, 0x64, 0x1e, 0x81, 0x3c, 0xb3, 0x74, 0xf7, 0xb2, 0x83, 0x2b, 0xcd, 0x6a, 0xea, 0x80, 0x9d, 0x25, 0x4f, 0xc2, 0xca, 0x9a, 0xc5, 0xa3, 0x32, 0x42, 0x4a, 0xb6, 0x5c, 0x2a, 0x26, 0x12, 0x75, 0xd1, 0x9a, 0x41, 0x4b, 0x61, 0x65, 0x00, 0xd5, 0xe3, 0x73, 0x70, 0x63, 0x15, 0xf0, 0x63, 0xdc, 0x88, 0x5d, 0x7f, 0xb9 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 129, - { 0x09, 0xad, 0x03, 0x17, 0x30, 0xb6, 0x32, 0x73, 0x55, 0xac, 0xd6, 0x94, 0x68, 0x70, 0x0e, 0x7e, 0x9b, 0xae, 0xac, 0x5a, 0x24, 0xa7, 0xff, 0xc9, 0x3b, 0x29, 0x2e, 0xb8, 0x71, 0xda, 0x54, 0x92, 0x46, 0xa5, 0xce, 0x0c, 0x83, 0x52, 0x55, 0x65, 0x1a, 0x28, 0xc6, 0xe2, 0xf4, 0xc7, 0x61, 0xaf, 0xb6, 0xf0, 0x6b, 0x9e, 0x29, 0x95, 0xfb, 0xb7, 0xdc, 0xa1, 0x74, 0xd5, 0x36, 0x2f, 0xae, 0xbd, 0xc3, 0x9a, 0x72, 0xc5, 0x79, 0x5d, 0x1f, 0x33, 0x92, 0xec, 0x08, 0x8b, 0x5d, 0xc2, 0xa7, 0x85, 0xb2, 0xc9, 0xc4, 0xc6, 0xe6, 0x69, 0xe7, 0x23, 0xb5, 0xdd, 0x0c, 0xe4, 0x43, 0x25, 0x55, 0x12, 0x67, 0xdd, 0x62, 0xe0, 0xf7, 0x8d, 0x24, 0x24, 0xad, 0xae, 0x48, 0xe2, 0x49, 0x44, 0x3a, 0xef, 0x4a, 0x37, 0x04, 0x10, 0xdb, 0x9e, 0x70, 0x93, 0x99, 0xac, 0x37, 0xcc, 0x48, 0x1b, 0x59, 0x00, 0xc5 } -, - /* Prime 1 */ - 65, - { 0x07, 0x72, 0x0f, 0x21, 0xcd, 0xdb, 0x92, 0x27, 0x45, 0xb7, 0x1c, 0xf8, 0x11, 0x6a, 0x83, 0x66, 0x9a, 0x0d, 0xdb, 0x89, 0xe8, 0xf3, 0xf0, 0x6c, 0x34, 0x7c, 0xa7, 0x87, 0xcf, 0x10, 0xef, 0x16, 0x93, 0xbd, 0xfe, 0x3a, 0x0c, 0x36, 0x4c, 0x7a, 0x7e, 0x89, 0x04, 0x17, 0xf2, 0xaf, 0x49, 0x47, 0x5c, 0x7d, 0x07, 0x6f, 0x9c, 0xee, 0xaa, 0xe7, 0x6d, 0xbd, 0x4e, 0x92, 0x15, 0xaf, 0x45, 0x69, 0x4d } -, - /* Prime 2 */ - 65, - { 0x07, 0x55, 0x1c, 0x27, 0xe9, 0xaa, 0xf1, 0x1f, 0x47, 0x4f, 0x1c, 0x9a, 0x14, 0xbf, 0x14, 0x4c, 0xfa, 0xef, 0xe2, 0x7f, 0xca, 0x4f, 0x20, 0x79, 0x5d, 0xec, 0x85, 0x34, 0xc9, 0x37, 0xbb, 0x00, 0xfe, 0x16, 0x23, 0x5e, 0xcd, 0x69, 0x1f, 0xd2, 0x3e, 0x32, 0xcd, 0xfb, 0x8b, 0x78, 0x66, 0x6b, 0xb7, 0x82, 0x84, 0xae, 0x15, 0xd5, 0x9b, 0xe5, 0xca, 0x74, 0x73, 0xe6, 0x2d, 0x46, 0xa9, 0xda, 0x1d } -, - /* Prime exponent 1 */ - 65, - { 0x02, 0xe2, 0x2c, 0x74, 0x16, 0x0a, 0x94, 0x36, 0xbb, 0x6c, 0x28, 0x3e, 0xf6, 0x57, 0xbe, 0xdd, 0xec, 0x89, 0xb3, 0x5d, 0x5c, 0xa7, 0xa4, 0x93, 0xf3, 0x5b, 0xd7, 0x71, 0xe4, 0x42, 0x95, 0xa5, 0xb3, 0xc0, 0x20, 0x06, 0x11, 0x16, 0xb2, 0x55, 0xba, 0x4d, 0x8c, 0x15, 0x4e, 0x3a, 0x8e, 0x71, 0xa1, 0xa3, 0x16, 0x4f, 0x26, 0x82, 0xd4, 0x13, 0x5e, 0xcf, 0xb2, 0xef, 0x26, 0x90, 0xc3, 0x9b, 0xfd } -, - /* Prime exponent 2 */ - 65, - { 0x01, 0xd2, 0xbf, 0xf5, 0x8c, 0xbc, 0xdc, 0xc8, 0x12, 0x4b, 0x31, 0xa9, 0x7e, 0x8f, 0x24, 0xd5, 0x1f, 0x70, 0x96, 0xb9, 0x7f, 0xec, 0xbc, 0xfe, 0x70, 0xc4, 0x67, 0x3b, 0x00, 0xed, 0xc2, 0xaa, 0x34, 0x83, 0xfc, 0xb7, 0x8e, 0x0c, 0x1d, 0xc5, 0x81, 0x81, 0xd0, 0x86, 0x43, 0xdf, 0xe4, 0x57, 0xd4, 0x81, 0xb7, 0xcc, 0x31, 0xd1, 0xb3, 0xba, 0x27, 0xe5, 0x5d, 0x0c, 0x57, 0x25, 0xc3, 0x06, 0x61 } -, - /* Coefficient */ - 65, - { 0x06, 0xd2, 0x27, 0x72, 0x57, 0x42, 0xef, 0x03, 0x46, 0x2d, 0x1c, 0xf6, 0x12, 0x67, 0x4a, 0x78, 0x83, 0x1d, 0x61, 0x9d, 0xa3, 0xd6, 0x40, 0xeb, 0x7c, 0x71, 0xc8, 0x7b, 0x53, 0x28, 0x69, 0x72, 0x73, 0xc5, 0xf7, 0x51, 0xe1, 0x4d, 0x7b, 0x81, 0xc1, 0x2b, 0x6d, 0xeb, 0x44, 0x75, 0x1a, 0x92, 0x95, 0xcb, 0x67, 0x1e, 0x81, 0x48, 0x4d, 0xea, 0xa8, 0x3b, 0x4d, 0xf1, 0xfd, 0x37, 0xe2, 0xff, 0x3c } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 12.1", - /* Message to be signed */ - 9, - { 0xe4, 0xb2, 0xd6, 0x0e, 0x3b, 0xdd, 0x27, 0x81, 0x6f } -, - /* Signature */ - 129, - { 0x13, 0xfd, 0x4a, 0xc1, 0xac, 0x68, 0x48, 0x17, 0x37, 0x80, 0x96, 0x5a, 0xff, 0x5e, 0x61, 0xc5, 0x96, 0x89, 0x2b, 0xc1, 0x47, 0x76, 0x0d, 0x43, 0x07, 0x9b, 0x5d, 0x71, 0x77, 0xe4, 0x23, 0xd4, 0x86, 0xf5, 0xa7, 0x3e, 0x1a, 0x16, 0xb3, 0xce, 0x9b, 0x5e, 0xda, 0xc1, 0x61, 0xea, 0x6d, 0x4f, 0x6c, 0x23, 0xfc, 0xfc, 0x3e, 0x62, 0x19, 0xca, 0xc5, 0x56, 0x06, 0x7f, 0xfa, 0xed, 0x4a, 0xda, 0xc0, 0xa9, 0x50, 0x05, 0x09, 0x0b, 0x89, 0x84, 0x4c, 0x54, 0x35, 0x4d, 0xb2, 0x2a, 0xaf, 0xf9, 0xee, 0xff, 0x9d, 0xa5, 0xaa, 0xa5, 0x49, 0x04, 0x25, 0xe1, 0x35, 0xcc, 0x0f, 0x64, 0x58, 0x4c, 0x7f, 0x05, 0xfe, 0x33, 0x6e, 0x44, 0x40, 0xbb, 0x86, 0x92, 0x86, 0xd4, 0x4a, 0xf1, 0x57, 0x88, 0x0e, 0x3a, 0x40, 0xfb, 0x06, 0x72, 0x5d, 0x09, 0xde, 0xb3, 0x7f, 0x1e, 0xbb, 0x18, 0x1c, 0x8f, 0x5c } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 12.2", - /* Message to be signed */ - 164, - { 0x78, 0x86, 0x85, 0xfc, 0x58, 0x05, 0xd6, 0x27, 0xb1, 0x3f, 0x2f, 0xe7, 0xfe, 0x6f, 0x7c, 0x9a, 0xb2, 0xca, 0x49, 0x44, 0xab, 0xf3, 0x08, 0xb8, 0x6d, 0x1a, 0x0f, 0x58, 0x3d, 0x17, 0xb5, 0x76, 0x02, 0x43, 0x9e, 0x1f, 0x2c, 0x6e, 0x0c, 0x5b, 0xf7, 0x81, 0x70, 0x50, 0x13, 0x38, 0xb4, 0xc4, 0x47, 0xe9, 0x19, 0x7b, 0x65, 0x03, 0xfb, 0x73, 0xeb, 0xab, 0xf7, 0x76, 0xde, 0xfa, 0xe3, 0x3b, 0xdc, 0xdc, 0xe7, 0x7d, 0xe7, 0x9b, 0x82, 0xbe, 0x14, 0x85, 0xa8, 0xaa, 0x9b, 0x82, 0x09, 0x37, 0xdb, 0xf4, 0x28, 0xa2, 0x05, 0x50, 0x96, 0x6a, 0x86, 0xb6, 0x2a, 0x17, 0x2e, 0x6c, 0xfb, 0xdc, 0xfe, 0x0d, 0x6f, 0xc6, 0x7a, 0x4d, 0xb6, 0x22, 0x52, 0xfd, 0xaf, 0x85, 0xf1, 0xe6, 0xbc, 0x14, 0xf8, 0xab, 0x1c, 0x53, 0x32, 0x6a, 0xa6, 0xa7, 0xbc, 0x5e, 0xec, 0x88, 0xe0, 0xb1, 0x1d, 0x48, 0xd2, 0xb5, 0x61, 0xf2, 0x26, 0x06, 0x50, 0x10, 0x2f, 0xf2, 0x7b, 0x57, 0xb7, 0x00, 0x72, 0xbc, 0xc1, 0x21, 0xe3, 0x5e, 0x70, 0xf3, 0x78, 0x0c, 0x83, 0x33, 0xb5, 0xbf, 0x6b, 0x08, 0xfa, 0x12, 0x08, 0x26, 0x0f, 0x33 } -, - /* Signature */ - 129, - { 0x09, 0x04, 0xcc, 0x11, 0xac, 0x66, 0xa9, 0x83, 0x7b, 0x74, 0x56, 0x8b, 0xe2, 0x50, 0xe5, 0x3a, 0xe4, 0xbe, 0xf7, 0x8d, 0xc6, 0x7f, 0xfe, 0xe5, 0x09, 0xe5, 0xd9, 0xb4, 0x72, 0x58, 0x3e, 0xaa, 0xa5, 0x6d, 0x4c, 0x9e, 0xe7, 0x0f, 0x6e, 0x82, 0xdc, 0x99, 0x8b, 0x53, 0xef, 0xf1, 0x27, 0x2b, 0xf0, 0x1f, 0x09, 0xe5, 0x26, 0x2b, 0x15, 0x5a, 0x6e, 0x56, 0xd1, 0x50, 0x40, 0x03, 0xe4, 0xc8, 0xa4, 0x6e, 0x65, 0x02, 0x55, 0x32, 0x78, 0x23, 0x0d, 0x6e, 0x81, 0xb7, 0x29, 0x18, 0x43, 0xab, 0x97, 0x69, 0x73, 0x7f, 0x3c, 0x69, 0x31, 0x52, 0xf1, 0x7b, 0xf2, 0xd8, 0xbf, 0xc7, 0x82, 0xbd, 0xb3, 0xfa, 0x0a, 0xea, 0xdf, 0x0d, 0x44, 0x1e, 0x1e, 0x52, 0xde, 0xa5, 0x4b, 0x75, 0xcf, 0x16, 0x5e, 0x35, 0xc3, 0x82, 0xd3, 0x11, 0x74, 0xf6, 0x67, 0x9d, 0x2f, 0x21, 0xb9, 0x81, 0xf4, 0x13, 0x58 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.3", - /* Message to be signed */ - 126, - { 0x4e, 0xc7, 0x39, 0x3f, 0xdc, 0x4b, 0x90, 0xaf, 0x8f, 0xff, 0xca, 0xf3, 0x4e, 0x84, 0x5a, 0x09, 0x65, 0x6a, 0xef, 0x9d, 0xda, 0x12, 0xb0, 0x34, 0x2c, 0x46, 0xeb, 0x04, 0x91, 0x74, 0xaa, 0x51, 0x1b, 0x43, 0xc9, 0x4d, 0x75, 0xc0, 0xe2, 0x90, 0x70, 0xaf, 0xf5, 0xb4, 0x14, 0x23, 0xa1, 0x70, 0xd9, 0xb3, 0xe8, 0xb2, 0x12, 0x24, 0xaa, 0xbc, 0x53, 0x1d, 0x88, 0x88, 0x6e, 0x26, 0x46, 0xd6, 0x78, 0x8f, 0x1b, 0xaa, 0xd4, 0xef, 0x4b, 0x0b, 0x4b, 0xde, 0x4b, 0x12, 0xce, 0x90, 0x52, 0x08, 0x2e, 0x2d, 0xdd, 0x0e, 0x3e, 0x6c, 0xaa, 0xbb, 0x0a, 0x14, 0x34, 0x4b, 0x0a, 0x58, 0x3f, 0x40, 0x4c, 0x1b, 0x6a, 0x3c, 0x7b, 0xca, 0x8a, 0x58, 0x85, 0xd5, 0xf2, 0x24, 0xaf, 0x1f, 0xca, 0xc3, 0xfa, 0xd9, 0x37, 0x0e, 0x9b, 0x29, 0x74, 0xe8, 0xca, 0x62, 0xe2, 0x2a, 0xce, 0xb9 } -, - /* Signature */ - 129, - { 0x21, 0xa6, 0x6a, 0xf6, 0x27, 0xee, 0x0d, 0xd0, 0x5f, 0xe7, 0x56, 0x3c, 0xc1, 0xd2, 0x9c, 0xcf, 0x6f, 0x87, 0x31, 0xb4, 0x1e, 0x3d, 0xb3, 0x95, 0x97, 0x89, 0x3b, 0xa1, 0xcf, 0x37, 0x5f, 0x78, 0x17, 0x88, 0xfd, 0xf0, 0x73, 0xb0, 0xb5, 0x93, 0xc7, 0x6d, 0xf2, 0x81, 0x6e, 0xc6, 0xde, 0xfc, 0x22, 0x42, 0x21, 0xac, 0x19, 0xf5, 0xbe, 0xe4, 0x4f, 0xc0, 0xe5, 0xd4, 0x09, 0x3d, 0x34, 0x68, 0x27, 0x8f, 0xb4, 0x2d, 0x40, 0x5a, 0x07, 0x04, 0x46, 0x53, 0x22, 0xda, 0x4d, 0x3a, 0x7c, 0xa9, 0xc3, 0xda, 0x73, 0xc3, 0xd0, 0x82, 0xae, 0xe5, 0x67, 0xb7, 0x70, 0x83, 0x32, 0x3e, 0x75, 0xbb, 0x35, 0xed, 0x77, 0xe8, 0xdb, 0x9c, 0x01, 0xb4, 0x96, 0xa0, 0x4c, 0xc4, 0xa8, 0x99, 0xdf, 0x35, 0x9d, 0xa4, 0xa2, 0x28, 0x7c, 0xaf, 0xff, 0xe1, 0xed, 0x63, 0xcd, 0xde, 0xad, 0x87, 0x6c, 0x94, 0x07 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.4", - /* Message to be signed */ - 250, - { 0x90, 0x77, 0x60, 0xdb, 0x32, 0x96, 0x9b, 0x09, 0x7d, 0xc1, 0x24, 0xef, 0x89, 0x75, 0x15, 0x11, 0xa5, 0xd2, 0x30, 0x59, 0x6d, 0x2f, 0xd8, 0xa8, 0x91, 0xff, 0x00, 0xf0, 0x5f, 0xba, 0xd4, 0x5f, 0x72, 0xa4, 0x5d, 0x46, 0x56, 0x24, 0xa3, 0xab, 0x67, 0xaf, 0xdb, 0xb9, 0xe5, 0xf9, 0xe6, 0x5b, 0x63, 0xe3, 0x0c, 0x2e, 0x57, 0xfe, 0x7f, 0x32, 0xf3, 0x99, 0x01, 0x10, 0x33, 0xdc, 0x05, 0x29, 0xc0, 0x97, 0x1f, 0xbe, 0x06, 0x4f, 0xc5, 0xed, 0xb0, 0x1f, 0x84, 0xcd, 0x57, 0x28, 0x3f, 0xbb, 0xbd, 0x2a, 0xa0, 0x29, 0x44, 0x11, 0x0b, 0x6b, 0x53, 0x4f, 0x74, 0x08, 0x2f, 0x56, 0xbe, 0x34, 0x6c, 0xc3, 0x43, 0xbd, 0x4d, 0x0b, 0x34, 0x80, 0x91, 0xc0, 0x05, 0xc6, 0x19, 0x9a, 0x7e, 0x3d, 0x56, 0x88, 0x52, 0x47, 0xb0, 0xc1, 0x6a, 0x36, 0xb2, 0x35, 0xb8, 0xf5, 0xd4, 0xf0, 0x0a, 0x6c, 0x6b, 0xb6, 0xfe, 0xed, 0xe8, 0x8f, 0xcd, 0x78, 0x8d, 0x75, 0xca, 0xcf, 0xf7, 0xd9, 0x56, 0x87, 0x99, 0x65, 0x71, 0x55, 0x9c, 0x05, 0x79, 0x6a, 0x55, 0x71, 0x1d, 0x77, 0x46, 0xbb, 0x92, 0xd8, 0x52, 0x89, 0x3b, 0xa9, 0x06, 0x75, 0xf9, 0x8b, 0x0f, 0x54, 0x08, 0x48, 0x1b, 0xf1, 0x54, 0x3f, 0x39, 0xde, 0x3d, 0x0c, 0x0c, 0x1f, 0x53, 0x49, 0x5b, 0xd2, 0x12, 0xdd, 0xcd, 0xc6, 0xd0, 0xe5, 0x7d, 0x7a, 0x3d, 0xbe, 0x24, 0x20, 0x8c, 0xb2, 0x4e, 0xd4, 0x1d, 0xe0, 0x3a, 0x5f, 0x05, 0x2a, 0x9b, 0x58, 0x12, 0x70, 0x0a, 0x5c, 0xe0, 0x5c, 0x02, 0x00, 0xd4, 0x71, 0x9c, 0x55, 0x54, 0x4e, 0x7f, 0xb2, 0x94, 0xd3, 0x44, 0xa4, 0xf2, 0x05, 0xef, 0x9a, 0x34, 0x97, 0xb5, 0x67, 0x54, 0x7c, 0xbd, 0x1a, 0x63, 0x3e, 0x2b, 0x79, 0xd3, 0x34, 0x90, 0x95 } -, - /* Signature */ - 129, - { 0x0e, 0xc9, 0x38, 0xa0, 0xd4, 0xb2, 0xa4, 0xed, 0xd2, 0x78, 0xd6, 0x3d, 0xe7, 0x61, 0xc1, 0x02, 0xe2, 0x59, 0x21, 0x02, 0xee, 0x05, 0xdb, 0x1b, 0x59, 0x1e, 0x0d, 0x85, 0x7b, 0xf6, 0x66, 0x84, 0x9e, 0x74, 0xcc, 0x19, 0xb7, 0xe4, 0xe9, 0xcc, 0x39, 0x2d, 0xe5, 0x39, 0xf7, 0x90, 0xfc, 0x68, 0xe3, 0xb5, 0x21, 0xdb, 0x3a, 0x1a, 0x26, 0x7e, 0x5a, 0x4e, 0x12, 0x19, 0x75, 0x2e, 0x01, 0x99, 0xe7, 0x01, 0x9a, 0x24, 0x85, 0x54, 0xc5, 0xba, 0xe3, 0x11, 0x2b, 0xee, 0xa4, 0x0c, 0xf3, 0xe6, 0x4f, 0x8a, 0xaf, 0x9b, 0xb1, 0xe9, 0xd1, 0xc1, 0xd8, 0x83, 0x3c, 0x2b, 0xfa, 0x31, 0xb9, 0xd5, 0x45, 0x0f, 0xa2, 0x49, 0x29, 0x7f, 0xe2, 0xe4, 0x6a, 0xb0, 0x3e, 0x99, 0xb1, 0xf9, 0xc6, 0x51, 0xd5, 0x39, 0xeb, 0x53, 0xce, 0x09, 0x61, 0xce, 0x60, 0x23, 0xc1, 0x7d, 0xd7, 0x38, 0x3d, 0xd1, 0x2b } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.5", - /* Message to be signed */ - 124, - { 0xbd, 0xa5, 0x54, 0x95, 0x47, 0x32, 0xd1, 0xd5, 0xf3, 0x94, 0x75, 0x55, 0xc6, 0x1f, 0xfa, 0xb8, 0x01, 0xdb, 0xcd, 0xc8, 0x12, 0x1d, 0xc6, 0x81, 0x91, 0x27, 0xc2, 0xf2, 0x2a, 0x43, 0x6d, 0x20, 0x62, 0x2d, 0x1f, 0x4a, 0x44, 0x7c, 0x3a, 0x77, 0xb6, 0x58, 0x57, 0x31, 0xaf, 0xc0, 0x3e, 0x77, 0xba, 0xeb, 0x70, 0x9c, 0x1b, 0xfb, 0x90, 0x6a, 0x1a, 0xa1, 0x94, 0x9a, 0xb6, 0x76, 0x3a, 0x15, 0xc7, 0xda, 0x5a, 0x12, 0xa8, 0xf3, 0x95, 0x10, 0x1e, 0x64, 0x6a, 0x83, 0x71, 0x73, 0x14, 0x1f, 0x2a, 0x0c, 0xf5, 0x36, 0x02, 0x4b, 0x36, 0x91, 0x8c, 0xf9, 0xdb, 0x95, 0xb1, 0xcc, 0x40, 0x5a, 0xef, 0xe6, 0x3a, 0x3a, 0x93, 0xbc, 0x4a, 0xda, 0x60, 0xa0, 0xf4, 0xe0, 0x72, 0x9f, 0x4d, 0xb8, 0xb7, 0x6f, 0xd6, 0x4e, 0xfc, 0xbc, 0xb6, 0x6f, 0x0e, 0x4a, 0xaf, 0xf3 } -, - /* Signature */ - 129, - { 0x07, 0x26, 0x2f, 0xe1, 0xf3, 0xd7, 0xb7, 0x79, 0x32, 0xcd, 0xb7, 0xcd, 0x96, 0xac, 0x19, 0x8b, 0x93, 0x03, 0xeb, 0x44, 0x46, 0x0f, 0x52, 0x98, 0xe8, 0xe5, 0x2f, 0xe6, 0x70, 0x52, 0x99, 0xbb, 0xd6, 0x18, 0xef, 0xd0, 0xb3, 0x63, 0x31, 0x56, 0x2f, 0x20, 0xb2, 0x0e, 0x86, 0x6d, 0x99, 0xc2, 0xd0, 0x4a, 0x01, 0x49, 0xf5, 0x64, 0xdd, 0xf6, 0x6b, 0xa3, 0x19, 0xf3, 0xb8, 0x48, 0x25, 0x39, 0x6e, 0xa8, 0xb8, 0x93, 0xba, 0x5b, 0x3e, 0xe5, 0xe5, 0x24, 0x5c, 0xfe, 0x6b, 0x61, 0x6e, 0x30, 0xa9, 0x00, 0xbf, 0x83, 0xbb, 0x76, 0x3d, 0x20, 0xb3, 0x30, 0x37, 0x01, 0xca, 0xbe, 0x94, 0x33, 0x41, 0x48, 0x88, 0x2a, 0xe4, 0xef, 0x14, 0xe6, 0xd9, 0xe6, 0xc7, 0x52, 0xbc, 0xe2, 0x53, 0xbd, 0xda, 0x57, 0x39, 0xe3, 0x3b, 0xdc, 0x32, 0xeb, 0x08, 0x28, 0x28, 0xc1, 0xc3, 0x99, 0xc2, 0x2f, 0xea } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.6", - /* Message to be signed */ - 73, - { 0x51, 0x76, 0xad, 0x7c, 0x99, 0xbe, 0x4c, 0xdb, 0xbb, 0x5d, 0x79, 0xba, 0x5f, 0x49, 0x6c, 0xad, 0x9f, 0x42, 0xdc, 0x25, 0xd5, 0x27, 0xa5, 0xd5, 0xe8, 0xe3, 0x35, 0x91, 0x79, 0x22, 0x5e, 0x6b, 0x0e, 0x43, 0x66, 0x6d, 0x3d, 0x82, 0xab, 0x5b, 0xaf, 0x42, 0x4c, 0x85, 0xc3, 0x31, 0x21, 0x60, 0x6e, 0xb7, 0x9a, 0xda, 0x6b, 0xaf, 0xca, 0xb5, 0xc1, 0xe2, 0x54, 0x6c, 0xab, 0xf6, 0xa3, 0x60, 0x03, 0x84, 0x05, 0xca, 0x18, 0xc0, 0x08, 0x36, 0x67 } -, - /* Signature */ - 129, - { 0x06, 0x27, 0x23, 0x8b, 0x0b, 0x93, 0xe4, 0xcf, 0x98, 0x57, 0x13, 0xd2, 0x91, 0x29, 0x6c, 0xed, 0xe3, 0x45, 0xe8, 0x8e, 0x17, 0x82, 0x45, 0x25, 0x53, 0x59, 0x39, 0xb3, 0xf3, 0xd5, 0xff, 0x4e, 0xbc, 0x40, 0x74, 0x00, 0x11, 0x49, 0x00, 0x25, 0xdf, 0xea, 0xae, 0xe9, 0x06, 0x38, 0xc5, 0x39, 0x1e, 0xb4, 0x4e, 0x9f, 0xf3, 0x70, 0x45, 0x7b, 0x60, 0xd5, 0xde, 0x80, 0xc1, 0x65, 0x38, 0xcb, 0x38, 0x60, 0x55, 0x95, 0x85, 0xca, 0xf5, 0xe3, 0x33, 0x2c, 0x7b, 0x1f, 0xdd, 0x8f, 0x45, 0xfb, 0x6e, 0x35, 0x57, 0xf2, 0xc7, 0xa6, 0x0d, 0x09, 0x9e, 0x94, 0xf8, 0xe9, 0x6b, 0xaa, 0x1e, 0x03, 0x19, 0x9a, 0xc8, 0x3c, 0xec, 0x8f, 0x9c, 0x16, 0xbb, 0x49, 0x15, 0x1a, 0x88, 0x72, 0xcb, 0xfe, 0x70, 0xf0, 0x02, 0xcf, 0x3b, 0x53, 0xb6, 0x11, 0xd6, 0xcb, 0xb6, 0x65, 0x89, 0x7c, 0xeb, 0xf5, 0x99 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.7", - /* Message to be signed */ - 20, - { 0xe1, 0x74, 0x71, 0x93, 0x64, 0xf7, 0xbd, 0xc8, 0x6e, 0x2f, 0x0c, 0x61, 0x26, 0x5b, 0xf8, 0x05, 0x7d, 0x64, 0x9c, 0xca } -, - /* Signature */ - 129, - { 0x09, 0x77, 0x19, 0x54, 0xfc, 0x8a, 0x1f, 0xee, 0xe9, 0x0f, 0x60, 0xc4, 0xb8, 0xa5, 0xbb, 0xd4, 0x62, 0xc6, 0x34, 0x37, 0x9a, 0xb3, 0xda, 0x19, 0xff, 0xeb, 0xa6, 0xe0, 0x31, 0xb4, 0x24, 0x3a, 0x83, 0x50, 0x9c, 0xee, 0xed, 0x6e, 0x01, 0x2a, 0x91, 0x63, 0xc6, 0x14, 0x5c, 0xf7, 0x05, 0x02, 0xa9, 0xfb, 0x0c, 0x21, 0xdb, 0x31, 0xfa, 0xd5, 0xad, 0x14, 0x69, 0x5d, 0xe0, 0x02, 0x62, 0xe4, 0xe5, 0x67, 0x09, 0x5e, 0x16, 0x11, 0x0c, 0x6e, 0x65, 0xd6, 0xbc, 0xb9, 0xcc, 0x02, 0xe9, 0x19, 0xf9, 0x0d, 0x19, 0xe7, 0x30, 0x7f, 0x44, 0x34, 0x50, 0x3f, 0x9f, 0xe0, 0x2c, 0x12, 0xc1, 0xd3, 0xf5, 0x0c, 0xc1, 0x60, 0x08, 0x6f, 0xe4, 0x60, 0x29, 0x8c, 0x88, 0x12, 0x25, 0xbf, 0xf2, 0xe9, 0xe3, 0x13, 0xda, 0x38, 0x44, 0x44, 0xbe, 0xc7, 0x2a, 0x67, 0xac, 0x34, 0x44, 0x67, 0xe8, 0x2b, 0x66 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.8", - /* Message to be signed */ - 232, - { 0x98, 0xcb, 0xc9, 0x1f, 0xd4, 0x9b, 0x50, 0x7c, 0x88, 0x7e, 0x97, 0xc3, 0xcf, 0xa9, 0xb5, 0x9c, 0x26, 0x00, 0x1f, 0xca, 0xc1, 0x64, 0x87, 0xf6, 0x00, 0x4f, 0x0b, 0x68, 0x74, 0x54, 0x63, 0x20, 0x02, 0xd5, 0x49, 0xb5, 0x46, 0x1f, 0xf1, 0x53, 0x0c, 0x0f, 0x5f, 0xc0, 0x9a, 0xac, 0xc4, 0x6a, 0xda, 0xda, 0x7d, 0xc9, 0xd7, 0xb3, 0xe2, 0x0f, 0xed, 0xfe, 0xec, 0xd8, 0xf2, 0xf1, 0x68, 0x41, 0x77, 0x32, 0x68, 0x54, 0x2e, 0x86, 0x43, 0x1c, 0x7f, 0xb4, 0xd1, 0x63, 0xf3, 0x1e, 0x8e, 0x31, 0x72, 0x20, 0x34, 0x26, 0xbc, 0x0d, 0x88, 0xa2, 0x3b, 0x13, 0x76, 0x34, 0xbf, 0xc7, 0x14, 0x01, 0x72, 0x20, 0xfb, 0xfb, 0xec, 0x88, 0x8e, 0x01, 0xe3, 0xef, 0xf7, 0xbb, 0xbd, 0xf9, 0x3f, 0x08, 0x3b, 0x88, 0xfd, 0xd6, 0x40, 0x7d, 0x98, 0x9b, 0xcc, 0x5e, 0xcb, 0x15, 0x3c, 0x9c, 0xee, 0x34, 0x10, 0xfd, 0x00, 0x6b, 0xcd, 0xf0, 0x7a, 0xf2, 0x28, 0x79, 0x0f, 0xd5, 0xe0, 0x4f, 0x5c, 0x0a, 0x1b, 0x63, 0x64, 0x8d, 0x48, 0x60, 0x9b, 0xf1, 0x63, 0xc6, 0xfd, 0x65, 0x60, 0x20, 0x75, 0x7c, 0x3c, 0x06, 0x38, 0xe1, 0xb8, 0x2d, 0x75, 0xe2, 0xb4, 0xb9, 0x08, 0xb7, 0xe0, 0xa3, 0xc8, 0xd7, 0x26, 0x6b, 0x80, 0x1f, 0x60, 0xfc, 0x2b, 0x4f, 0x31, 0x7e, 0xbb, 0x8b, 0xf2, 0x2a, 0xb9, 0xe1, 0xcb, 0x7b, 0x77, 0x84, 0x39, 0x5b, 0xd7, 0xb4, 0x24, 0x32, 0x9e, 0x86, 0x1d, 0x47, 0x86, 0x61, 0xf6, 0xdc, 0x12, 0x98, 0x51, 0x5f, 0x48, 0x56, 0x4a, 0x3f, 0xf9, 0x97, 0x35, 0xbb, 0x90, 0x03, 0x38, 0x75, 0xa2, 0x5b, 0xe8, 0xb7, 0x24, 0xf3 } -, - /* Signature */ - 129, - { 0x0f, 0x2d, 0x7a, 0x5e, 0xab, 0x83, 0x58, 0x45, 0x03, 0xd9, 0x4e, 0xbf, 0x7d, 0xde, 0x9e, 0xed, 0x49, 0x41, 0x10, 0xbe, 0x94, 0xed, 0x64, 0x8a, 0xf0, 0xcf, 0x6e, 0x89, 0x1b, 0x06, 0x2d, 0x2c, 0x9d, 0xef, 0x95, 0x87, 0x55, 0xb1, 0xa3, 0x08, 0x48, 0x8d, 0x16, 0x70, 0x74, 0x29, 0x51, 0xec, 0x00, 0x60, 0x54, 0x5d, 0x2e, 0xc4, 0x3f, 0xe8, 0x4a, 0xec, 0x89, 0x01, 0xad, 0xf4, 0xfe, 0x8d, 0x67, 0xaa, 0xe5, 0x7a, 0x31, 0x9f, 0x49, 0x1c, 0x85, 0xc2, 0x1c, 0xd7, 0xf9, 0xc5, 0x99, 0x81, 0x3c, 0xeb, 0x9d, 0xf8, 0x47, 0x78, 0xad, 0xc8, 0x2a, 0x33, 0xc4, 0xe7, 0x67, 0x4d, 0x7f, 0xbe, 0x13, 0x48, 0xdc, 0x20, 0x75, 0x51, 0x10, 0x4f, 0x54, 0x42, 0xac, 0xd6, 0x84, 0x86, 0x9a, 0xc2, 0x2c, 0xac, 0x51, 0x6c, 0xc9, 0x88, 0x7f, 0xd1, 0xd0, 0x21, 0xef, 0xcc, 0x54, 0xab, 0xda, 0xf2, 0xb6 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.9", - /* Message to be signed */ - 139, - { 0x3e, 0xed, 0x6b, 0xf1, 0x16, 0xcb, 0x31, 0xe0, 0xfd, 0xd4, 0xc5, 0xc9, 0x33, 0x58, 0xba, 0xb6, 0x8f, 0xbf, 0xa8, 0xb5, 0xc5, 0x15, 0xbc, 0xab, 0xf9, 0x05, 0x1c, 0xdf, 0x95, 0xa2, 0x43, 0xe5, 0xee, 0x68, 0x15, 0x15, 0x4e, 0xeb, 0x4a, 0xc1, 0x0f, 0x52, 0x31, 0xd0, 0x49, 0x38, 0x13, 0xe2, 0x81, 0x49, 0xe9, 0x68, 0x2b, 0xb1, 0xc8, 0xb7, 0x7a, 0x6e, 0x13, 0x60, 0xb2, 0xb2, 0xc0, 0xf9, 0xc3, 0x16, 0x1e, 0x41, 0x7e, 0xf6, 0xcb, 0x3d, 0x9a, 0xbb, 0xdc, 0x74, 0x2c, 0xe0, 0x25, 0xfa, 0xfc, 0xd5, 0x38, 0xc7, 0x7c, 0x4d, 0x07, 0x16, 0x49, 0x1d, 0xa5, 0x4b, 0xcd, 0xf1, 0x67, 0xb4, 0x7a, 0x61, 0xa0, 0x35, 0x27, 0xc9, 0x6e, 0x4b, 0x42, 0xbf, 0xdc, 0x98, 0x5b, 0x17, 0x87, 0x81, 0xb6, 0x92, 0x0f, 0x60, 0xf1, 0x1c, 0xd5, 0xfa, 0x76, 0x66, 0x3f, 0x56, 0xf3, 0x19, 0xf4, 0x50, 0xcc, 0x2a, 0x7f, 0x13, 0xbc, 0xce, 0x59, 0xe4, 0x1c, 0xb6, 0x66 } -, - /* Signature */ - 129, - { 0x07, 0x67, 0x3f, 0xa6, 0x83, 0xe0, 0x98, 0xbf, 0xa2, 0xb9, 0x55, 0xb6, 0xc3, 0x4e, 0x9c, 0xe8, 0xec, 0xcc, 0x5a, 0xb0, 0xab, 0x4c, 0x2c, 0xf7, 0x9b, 0x9b, 0xe1, 0xe6, 0x64, 0x42, 0x5a, 0x7c, 0x17, 0x7a, 0x47, 0xd5, 0x32, 0x0c, 0xd5, 0x70, 0x86, 0xf9, 0x51, 0x89, 0x18, 0x45, 0x09, 0x4b, 0x1f, 0xbb, 0xc9, 0xde, 0xe5, 0xf9, 0xb5, 0x56, 0xdf, 0x3e, 0x61, 0xe7, 0xe6, 0x69, 0x73, 0xd6, 0x3e, 0x69, 0xc9, 0xda, 0x17, 0x29, 0x6f, 0xe6, 0x15, 0xd6, 0x33, 0xc8, 0x62, 0x18, 0xdc, 0xa3, 0x99, 0x25, 0x8c, 0x04, 0xf8, 0x05, 0xbd, 0x04, 0xd9, 0xdc, 0x97, 0xa2, 0x9f, 0x39, 0xd6, 0x06, 0xff, 0x8e, 0x9c, 0x0a, 0x13, 0x71, 0xaa, 0xee, 0xc0, 0x03, 0xea, 0x27, 0x48, 0x95, 0xff, 0x7b, 0xa1, 0x50, 0x2b, 0x28, 0xf8, 0x17, 0x63, 0x02, 0xc2, 0x4e, 0xec, 0xe5, 0xb5, 0x28, 0xd6, 0x71, 0x00 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.10", - /* Message to be signed */ - 146, - { 0x08, 0x4e, 0xc2, 0x87, 0x86, 0x5e, 0x8f, 0xe6, 0x88, 0x04, 0x72, 0x37, 0x20, 0x97, 0xad, 0x5b, 0x96, 0x4c, 0x40, 0xa9, 0x35, 0xee, 0xd1, 0xbe, 0xa5, 0x1a, 0xb1, 0xb5, 0xbc, 0x75, 0xc8, 0x46, 0xbb, 0xcb, 0xd9, 0x54, 0x88, 0xe9, 0xec, 0xc3, 0x63, 0xcf, 0x07, 0x3a, 0x90, 0xb2, 0x0b, 0xe8, 0xb6, 0x79, 0x36, 0x46, 0x22, 0xf3, 0x45, 0xe1, 0x22, 0xd0, 0x56, 0x6a, 0xcd, 0x34, 0xa4, 0xae, 0x11, 0x24, 0x45, 0x25, 0xa3, 0x8f, 0x47, 0xdc, 0x1f, 0x92, 0xb1, 0x7f, 0x89, 0xed, 0xe0, 0x6d, 0x83, 0x6b, 0x44, 0x26, 0xec, 0xbb, 0xea, 0x79, 0x33, 0xac, 0x0e, 0x84, 0x7e, 0x55, 0x10, 0x33, 0xb5, 0xf7, 0xea, 0x4e, 0xaf, 0x1f, 0x63, 0xf3, 0x47, 0x9d, 0xb7, 0xea, 0xf8, 0x02, 0xc9, 0x96, 0xde, 0x92, 0x33, 0x86, 0xcd, 0x15, 0xb1, 0x22, 0xde, 0x5a, 0x23, 0x98, 0xd3, 0xf3, 0x97, 0x02, 0xc3, 0xe9, 0x06, 0x5c, 0x32, 0x73, 0x95, 0xb9, 0xa9, 0x95, 0xfa, 0x25, 0x4d, 0xe9, 0xc7, 0xad, 0xb4, 0x51 } -, - /* Signature */ - 129, - { 0x13, 0xa7, 0xf0, 0x04, 0xc0, 0xa8, 0x8d, 0x51, 0x3e, 0x2f, 0x1a, 0xae, 0xab, 0x41, 0x7f, 0xa0, 0xb2, 0x70, 0x2f, 0xb9, 0x3b, 0x82, 0x87, 0x20, 0xcc, 0xd8, 0x00, 0xcb, 0xb0, 0xaf, 0x5a, 0x19, 0x65, 0x72, 0x5b, 0x6e, 0xe0, 0x58, 0x71, 0x17, 0xcb, 0xcb, 0x81, 0xa4, 0x63, 0x18, 0x52, 0x1c, 0x95, 0x0d, 0xd8, 0x46, 0x9b, 0xd8, 0x55, 0x73, 0xf5, 0xd2, 0x9d, 0x86, 0x53, 0x03, 0xeb, 0xac, 0x45, 0xc7, 0xf6, 0x03, 0x1c, 0x6f, 0x93, 0x78, 0xeb, 0x12, 0xb4, 0x2f, 0x05, 0x09, 0x44, 0x31, 0x6f, 0x0b, 0x93, 0xdb, 0x89, 0x9b, 0xec, 0x93, 0x7d, 0x5d, 0x0f, 0x58, 0xed, 0x40, 0x70, 0x04, 0x01, 0xcd, 0x32, 0x65, 0xa6, 0xa4, 0x4b, 0x09, 0xbb, 0x11, 0xa4, 0x38, 0xee, 0xa0, 0x77, 0x15, 0xef, 0xe4, 0x2d, 0xe4, 0xe8, 0x80, 0x8f, 0x88, 0x24, 0x02, 0x61, 0x14, 0x8e, 0x8d, 0xe2, 0x93, 0xed } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.11", - /* Message to be signed */ - 154, - { 0x61, 0x07, 0x00, 0x00, 0x7c, 0x3c, 0x6c, 0xb0, 0x96, 0xc9, 0x94, 0xd6, 0x5d, 0x95, 0xc9, 0xb9, 0xa1, 0x47, 0xc3, 0x46, 0x14, 0xcd, 0x72, 0x2f, 0x29, 0xeb, 0xc5, 0xe0, 0x93, 0x78, 0x6f, 0x79, 0x09, 0x48, 0x02, 0x14, 0x1a, 0x31, 0x08, 0xd2, 0xec, 0x8a, 0x87, 0x4c, 0x53, 0x18, 0x7e, 0xb0, 0xd6, 0xee, 0x2a, 0x85, 0x91, 0x38, 0xcf, 0xbc, 0x29, 0x22, 0x15, 0x06, 0xd0, 0xbd, 0x89, 0xb0, 0xf3, 0xdb, 0xef, 0x50, 0x6b, 0xd1, 0xba, 0x40, 0x36, 0xb0, 0xf1, 0xec, 0x00, 0x73, 0x32, 0x70, 0x60, 0x75, 0x2b, 0x42, 0x8c, 0xfa, 0x12, 0xdb, 0x28, 0x0c, 0x53, 0xaa, 0xe5, 0xf3, 0xe3, 0x57, 0x0e, 0x91, 0x8c, 0xb0, 0x9b, 0x90, 0xe9, 0x84, 0x7f, 0x1f, 0x5c, 0xa4, 0x48, 0x7a, 0x6b, 0xf3, 0xed, 0xad, 0x42, 0x5f, 0x78, 0x40, 0x7e, 0xcb, 0xe3, 0xf9, 0xbc, 0x7c, 0xab, 0x00, 0x75, 0x66, 0x58, 0x79, 0x43, 0x1c, 0x6c, 0xc3, 0x9e, 0x0c, 0x7e, 0x67, 0x00, 0x60, 0x67, 0x41, 0x8b, 0xee, 0x8d, 0x0d, 0xb5, 0xe7, 0xdb, 0xe1, 0x2d, 0xa7, 0x16, 0xca } -, - /* Signature */ - 129, - { 0x1e, 0xbe, 0xaf, 0x85, 0xd1, 0x8f, 0x37, 0x84, 0x0e, 0x8a, 0x3e, 0xaf, 0x07, 0xd6, 0x9f, 0x52, 0x4d, 0x88, 0x3f, 0xa4, 0x2f, 0x29, 0x1e, 0x20, 0x07, 0xdb, 0x59, 0x5a, 0xd6, 0x93, 0x0e, 0x8d, 0x5a, 0x75, 0xb4, 0x0b, 0xb9, 0x5b, 0xeb, 0x72, 0xd7, 0xce, 0xd0, 0x38, 0x17, 0x97, 0x47, 0xe9, 0x66, 0x1d, 0x08, 0x38, 0x40, 0xd5, 0x87, 0xdc, 0xdf, 0x21, 0xc3, 0xad, 0xc7, 0xd4, 0x7a, 0x01, 0xf6, 0xec, 0xa9, 0xc7, 0xbf, 0x9e, 0x2a, 0x98, 0x87, 0x75, 0x1b, 0x36, 0xd1, 0xab, 0xaf, 0x25, 0xa3, 0x13, 0xfc, 0x29, 0xd7, 0xf8, 0x34, 0xd2, 0xa2, 0x48, 0x29, 0x85, 0x57, 0x5e, 0x1b, 0xe2, 0x4b, 0xc4, 0xef, 0x43, 0xa5, 0x7e, 0xf4, 0xb0, 0xa6, 0x83, 0x69, 0x93, 0xe1, 0x1b, 0x67, 0x07, 0x85, 0x04, 0xe3, 0xb7, 0x9c, 0x72, 0x17, 0x75, 0xf5, 0xb9, 0x9b, 0xfa, 0xcc, 0xc4, 0x8a, 0x8c, 0x34 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.12", - /* Message to be signed */ - 6, - { 0xda, 0x31, 0xf9, 0xbe, 0x26, 0x09 } -, - /* Signature */ - 129, - { 0x1d, 0x2b, 0xba, 0xfc, 0xa4, 0x1c, 0xa0, 0x6c, 0x4b, 0x81, 0x1c, 0xb9, 0xd8, 0x36, 0x96, 0x87, 0x16, 0x6d, 0x14, 0xd9, 0xf9, 0x2c, 0x5b, 0x98, 0xfc, 0x7c, 0x77, 0x2f, 0x2d, 0x75, 0xd3, 0x5a, 0x5f, 0x9a, 0xcc, 0xe5, 0x9b, 0x99, 0xef, 0xb2, 0xdc, 0xb9, 0x7d, 0xcc, 0xbb, 0xc8, 0x6d, 0x7f, 0xd6, 0xb4, 0xae, 0x8b, 0xea, 0xb1, 0xe9, 0x81, 0xe6, 0xc7, 0x74, 0x5a, 0x1b, 0xfb, 0x4c, 0x1f, 0x44, 0xa4, 0x72, 0xb2, 0xad, 0x07, 0xd4, 0x1c, 0xc1, 0x75, 0x15, 0xb7, 0xb1, 0x4a, 0x49, 0x99, 0x0b, 0x24, 0x34, 0x42, 0xff, 0x2c, 0x8f, 0xe5, 0x05, 0xb1, 0x84, 0x9f, 0xa9, 0x91, 0xca, 0xcf, 0x68, 0x09, 0xa2, 0x0e, 0x55, 0xf2, 0xaf, 0x77, 0x98, 0x87, 0x0d, 0x65, 0x77, 0x6f, 0x1f, 0x9e, 0xe4, 0x87, 0x97, 0xe3, 0x13, 0xaa, 0x66, 0xa4, 0x7e, 0x69, 0x5f, 0x3e, 0x73, 0x1b, 0x2c, 0x7f, 0x30 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.13", - /* Message to be signed */ - 9, - { 0xf9, 0x8b, 0xe5, 0x2d, 0x9a, 0x5e, 0x55, 0xad, 0x92 } -, - /* Signature */ - 129, - { 0x29, 0x2e, 0xa3, 0x4d, 0x3e, 0x61, 0x18, 0xbf, 0x8c, 0xd0, 0x54, 0xe2, 0x15, 0x17, 0xe8, 0x63, 0xce, 0x7c, 0xb7, 0xdd, 0x72, 0x73, 0x30, 0x8f, 0x7e, 0xcf, 0xea, 0xcf, 0x9b, 0x45, 0x75, 0x83, 0xd9, 0xb9, 0xb9, 0x7c, 0x54, 0xab, 0xf7, 0x4e, 0x5a, 0x5c, 0xa3, 0x6a, 0x87, 0x06, 0x7e, 0x47, 0xd6, 0x7a, 0xa0, 0x47, 0xa1, 0xc2, 0xed, 0x7a, 0x23, 0xd0, 0x55, 0xab, 0x4f, 0x09, 0x4a, 0x83, 0xc4, 0x39, 0xef, 0x8d, 0xd2, 0xd0, 0x20, 0x35, 0xef, 0x05, 0x62, 0xd9, 0x67, 0x31, 0x3d, 0x81, 0x10, 0x2f, 0xc6, 0x8b, 0x74, 0x52, 0x5b, 0xb0, 0xe1, 0xd7, 0x96, 0x2e, 0xb2, 0x75, 0x8e, 0xc5, 0xe5, 0xae, 0xab, 0x65, 0xa9, 0x3d, 0x2e, 0xc8, 0xe6, 0x55, 0x40, 0x5a, 0xf8, 0x8c, 0x00, 0xfa, 0x35, 0xf5, 0x9d, 0xe9, 0xd0, 0xcd, 0x80, 0x45, 0xab, 0xd3, 0x71, 0x73, 0xb9, 0xfc, 0x6c, 0x51, 0xd8 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.14", - /* Message to be signed */ - 215, - { 0xf4, 0x38, 0xef, 0xf8, 0x4c, 0x37, 0x3f, 0xc1, 0x27, 0x44, 0xa3, 0x84, 0x15, 0x82, 0x43, 0xdd, 0x97, 0xf4, 0x36, 0x5e, 0x87, 0xd7, 0x1e, 0x8b, 0x56, 0xb2, 0x97, 0x91, 0xdf, 0x44, 0xad, 0xf3, 0x49, 0xe7, 0x62, 0x60, 0x04, 0xa2, 0xc5, 0x33, 0x35, 0xec, 0x63, 0x52, 0xcc, 0xe2, 0xed, 0xd9, 0x63, 0x94, 0x7f, 0xd2, 0x39, 0x38, 0x93, 0xc2, 0x48, 0xba, 0x1b, 0x84, 0x08, 0x42, 0xca, 0x77, 0x6c, 0x31, 0x72, 0x9f, 0x70, 0x7a, 0xf5, 0x04, 0x11, 0x00, 0x1c, 0x28, 0x7f, 0xba, 0x8f, 0xe7, 0x25, 0x02, 0x32, 0x0c, 0x44, 0x5b, 0xb1, 0x43, 0xfb, 0x7b, 0xf5, 0x39, 0x4e, 0xc1, 0xfb, 0x2c, 0xd5, 0x01, 0x59, 0x24, 0x32, 0x15, 0x40, 0x91, 0xde, 0x5a, 0x23, 0x65, 0xd6, 0x78, 0xf3, 0x57, 0x82, 0xfe, 0xa8, 0xb4, 0x7f, 0x64, 0xd6, 0x09, 0x19, 0xf0, 0xf1, 0xd5, 0xaf, 0xa7, 0x62, 0x6c, 0x40, 0xd1, 0x6c, 0xec, 0x19, 0xbf, 0xe0, 0x25, 0xd1, 0x16, 0xf4, 0x2d, 0x22, 0xe2, 0x0a, 0xdb, 0x56, 0x37, 0x5a, 0xd7, 0x70, 0x89, 0xf9, 0xa9, 0x33, 0x81, 0xfd, 0x78, 0xb7, 0xb1, 0x51, 0x1c, 0xb4, 0xe4, 0x98, 0x4d, 0x2d, 0xdc, 0x7c, 0x9d, 0x75, 0xb3, 0x10, 0xf2, 0x95, 0x42, 0x25, 0x60, 0xd6, 0x6e, 0x36, 0x02, 0xa8, 0x71, 0x20, 0x96, 0x16, 0x13, 0x1a, 0x84, 0x71, 0x43, 0xdd, 0x07, 0x8f, 0x23, 0x58, 0x7d, 0xb5, 0x02, 0xdd, 0xa0, 0x3e, 0x18, 0x60, 0x64, 0x82, 0xdb, 0xbe, 0x01, 0x4e, 0xa0, 0x83, 0xb7, 0xec, 0x16, 0x1b } -, - /* Signature */ - 129, - { 0x0e, 0xaf, 0xeb, 0xf1, 0x5d, 0x84, 0xee, 0x4a, 0x13, 0xf1, 0xa8, 0x2b, 0x84, 0x05, 0x11, 0x86, 0x41, 0xe2, 0x2e, 0x51, 0xda, 0x94, 0xd8, 0x58, 0x87, 0xfc, 0x4a, 0x3b, 0x11, 0xf0, 0x32, 0x49, 0xcc, 0x39, 0xa0, 0x37, 0x45, 0x01, 0x07, 0x1c, 0x7e, 0xef, 0x4a, 0xba, 0xa1, 0x14, 0x08, 0xd0, 0x2f, 0xae, 0x17, 0x86, 0xde, 0xa3, 0x75, 0x88, 0x47, 0x9c, 0x90, 0xd6, 0x27, 0x69, 0x85, 0x91, 0xc3, 0xba, 0xe1, 0xfe, 0xfd, 0x6e, 0x8c, 0x40, 0xe3, 0xff, 0x4b, 0x9f, 0x60, 0x61, 0xe0, 0x6c, 0x12, 0xfd, 0xd2, 0x1c, 0x7f, 0x45, 0xdd, 0xc5, 0xb7, 0x8d, 0x1c, 0xbc, 0x41, 0xc1, 0x57, 0x06, 0xfa, 0x20, 0xba, 0x92, 0xf9, 0x9f, 0x58, 0xb2, 0x2b, 0xe2, 0x76, 0x75, 0xbe, 0xe0, 0x81, 0xa0, 0x60, 0x67, 0xee, 0xd1, 0x58, 0xf8, 0xe2, 0x0b, 0xf0, 0x4a, 0x6e, 0x96, 0x8f, 0x71, 0x9a, 0x32, 0x34 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.15", - /* Message to be signed */ - 89, - { 0xfa, 0x1c, 0x0f, 0x7b, 0x10, 0x15, 0xa8, 0x95, 0xb1, 0xa5, 0x65, 0xf3, 0x29, 0x96, 0xb2, 0xb8, 0xcc, 0xfd, 0x86, 0x4b, 0x95, 0x54, 0x4d, 0xbb, 0x9c, 0xf4, 0xf6, 0xe1, 0xa8, 0x41, 0xde, 0x92, 0x06, 0xd5, 0x57, 0x26, 0xfd, 0xf7, 0xee, 0xa2, 0xbf, 0x33, 0x6a, 0x82, 0x9f, 0xd2, 0xbc, 0x12, 0x09, 0xbd, 0x21, 0x5a, 0xab, 0xb9, 0x77, 0xd2, 0x3a, 0x08, 0x3f, 0x10, 0xae, 0x69, 0xdb, 0x43, 0x7c, 0xa3, 0x2d, 0x7b, 0xfe, 0x4c, 0x88, 0x25, 0xb9, 0x34, 0x88, 0xf0, 0x1a, 0xfd, 0xf7, 0x84, 0x45, 0x8c, 0xef, 0x5c, 0xdd, 0x8d, 0xff, 0xdd, 0x17 } -, - /* Signature */ - 129, - { 0x25, 0xe2, 0x2e, 0x6d, 0xf7, 0xfc, 0x6b, 0xd4, 0xe0, 0xf6, 0x1e, 0xbc, 0x8d, 0xa0, 0x63, 0xfe, 0x47, 0x8a, 0x3e, 0xd7, 0x4d, 0x68, 0xf7, 0x76, 0x34, 0x35, 0xe0, 0xe3, 0x74, 0xf6, 0x52, 0x62, 0xa5, 0xd7, 0x61, 0x2e, 0x86, 0x78, 0x59, 0x61, 0x22, 0xc0, 0xe5, 0xb8, 0xfa, 0x0c, 0x0b, 0x12, 0x81, 0x2b, 0xa9, 0x65, 0x3a, 0x0f, 0x27, 0x38, 0x83, 0xc6, 0x26, 0x4c, 0x6d, 0xfb, 0x74, 0xbb, 0x34, 0x40, 0x5d, 0x2a, 0x04, 0x30, 0x43, 0xfb, 0xb0, 0xab, 0xf2, 0xaf, 0x7a, 0x12, 0x3d, 0x2d, 0xdb, 0xf1, 0x69, 0x92, 0xe0, 0x9b, 0xaa, 0x37, 0xd7, 0x31, 0xd7, 0x2e, 0xf1, 0x99, 0x62, 0x65, 0x8a, 0x8f, 0xb0, 0x10, 0xa1, 0x0f, 0x7d, 0x55, 0x62, 0xad, 0x54, 0x33, 0x47, 0x90, 0x01, 0xaf, 0x36, 0xd3, 0xd3, 0x26, 0xea, 0xdb, 0x2e, 0x9a, 0xbe, 0xc7, 0xb5, 0x55, 0x70, 0x9d, 0x5d, 0x47, 0xe9 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.16", - /* Message to be signed */ - 223, - { 0x82, 0x8e, 0xbe, 0x2f, 0x51, 0xe5, 0x88, 0x29, 0xcf, 0xa6, 0x15, 0x26, 0xdd, 0xed, 0x7e, 0x1f, 0x1b, 0xa3, 0x11, 0xdb, 0xf1, 0x06, 0x4c, 0x08, 0xac, 0x0b, 0xb5, 0xd6, 0x71, 0x6e, 0xab, 0x29, 0x8a, 0x23, 0xd6, 0x3b, 0x79, 0x3f, 0xfd, 0x9d, 0x9c, 0xea, 0x60, 0x22, 0x95, 0x98, 0x82, 0x3f, 0x28, 0x2f, 0x10, 0x7b, 0x6e, 0xe8, 0x8a, 0x53, 0xfd, 0x93, 0xe7, 0xdd, 0xd4, 0x8a, 0x73, 0x1a, 0x21, 0x09, 0xff, 0xed, 0xc8, 0x9a, 0xeb, 0xa2, 0xc0, 0xf1, 0x6b, 0xcb, 0x14, 0x0a, 0x0a, 0x89, 0xdc, 0x57, 0xee, 0x8b, 0x5d, 0x00, 0x0a, 0x21, 0x42, 0x17, 0x5b, 0xc7, 0x07, 0xbb, 0x40, 0x9a, 0xae, 0x3a, 0x03, 0x9c, 0x66, 0x3d, 0x01, 0x9a, 0x0b, 0xd9, 0x13, 0xc1, 0x3f, 0x7f, 0xf6, 0xf6, 0xb9, 0x1e, 0x90, 0x5a, 0x58, 0x9d, 0x38, 0xb1, 0x50, 0x48, 0x5d, 0x89, 0x09, 0x2d, 0x18, 0xa3, 0xa7, 0x62, 0x25, 0x27, 0x65, 0x52, 0x5d, 0x98, 0x45, 0x66, 0x42, 0x5b, 0x05, 0x77, 0x0d, 0xe9, 0xa8, 0xbe, 0xf4, 0x43, 0xff, 0x5f, 0xc1, 0x48, 0x33, 0xaf, 0xa4, 0xcc, 0xec, 0xe5, 0x42, 0xd4, 0xf2, 0xce, 0xf1, 0xe7, 0x96, 0xf5, 0x9f, 0xb3, 0xa4, 0xbf, 0x37, 0xcb, 0x67, 0x7a, 0xe4, 0x22, 0x36, 0x66, 0xc8, 0x2b, 0x31, 0xa1, 0x6a, 0x6c, 0xd7, 0x01, 0xa0, 0x49, 0x3c, 0xd9, 0x96, 0x86, 0x6c, 0x84, 0xbf, 0xcd, 0xdf, 0x85, 0x2b, 0x19, 0xff, 0xc8, 0x9e, 0x93, 0x61, 0x79, 0xfc, 0xe8, 0xb9, 0x9e, 0x72, 0xfd, 0x4a, 0xfc, 0x28, 0xb5, 0x11, 0x73, 0xaf, 0xbb, 0x25, 0xc4, 0xc7 } -, - /* Signature */ - 129, - { 0x16, 0x17, 0x55, 0x9e, 0x43, 0xba, 0x18, 0x2e, 0x95, 0x34, 0x86, 0x43, 0x6f, 0x15, 0xb6, 0x02, 0x83, 0x1e, 0x42, 0xee, 0xd2, 0x03, 0xc2, 0x69, 0xf6, 0x53, 0xbf, 0x63, 0x9c, 0x2b, 0x76, 0x0b, 0x0d, 0x49, 0xfb, 0x53, 0x2c, 0xa8, 0xad, 0x01, 0xe7, 0xb4, 0xaf, 0x83, 0x72, 0x92, 0x55, 0xdb, 0x55, 0x9b, 0xcf, 0x55, 0xfa, 0xb3, 0x65, 0x9c, 0xeb, 0xec, 0xd5, 0x37, 0x69, 0x4f, 0xef, 0x2d, 0xef, 0x9c, 0x9e, 0x76, 0x2d, 0x05, 0xd2, 0x32, 0x1e, 0xd6, 0x88, 0xc3, 0xf7, 0xe2, 0xc0, 0x57, 0x33, 0xab, 0x4f, 0xa8, 0x1b, 0x08, 0xcf, 0x79, 0xfa, 0xcb, 0x75, 0xc3, 0x20, 0x0b, 0x7a, 0x48, 0x3a, 0xf0, 0x8c, 0xb1, 0x83, 0xc5, 0x09, 0x27, 0xcc, 0x61, 0x69, 0xe4, 0x32, 0xf7, 0xfc, 0x9b, 0x11, 0x78, 0x0d, 0xbf, 0x4d, 0x3b, 0x72, 0xd2, 0xd0, 0xb8, 0x55, 0x93, 0xd8, 0xb5, 0xb0, 0x18, 0x2a } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.17", - /* Message to be signed */ - 47, - { 0xbb, 0x4a, 0x6e, 0xcc, 0xbd, 0xd6, 0xde, 0x0a, 0xc5, 0xc3, 0xb7, 0xf9, 0x97, 0x98, 0x10, 0x4a, 0x58, 0x69, 0xc1, 0xcf, 0x1a, 0x1f, 0xac, 0x7f, 0x85, 0x9f, 0xe9, 0x51, 0x49, 0x29, 0x7e, 0xb7, 0x79, 0x11, 0x00, 0x59, 0xe2, 0x69, 0xf1, 0x27, 0x56, 0xf0, 0x8a, 0x54, 0x8b, 0x66, 0xaf } -, - /* Signature */ - 129, - { 0x27, 0x7b, 0xae, 0x63, 0xe6, 0xe3, 0x25, 0x3a, 0x0e, 0x20, 0x4f, 0x4e, 0x6c, 0x9f, 0xe8, 0x4b, 0x04, 0x0b, 0x86, 0x4f, 0x21, 0xed, 0xd4, 0x42, 0x6d, 0x82, 0xbe, 0x8f, 0x1b, 0x91, 0x1b, 0x0b, 0xd2, 0x81, 0xcf, 0x11, 0x49, 0x53, 0xd4, 0x02, 0x09, 0xda, 0x2e, 0x9a, 0xae, 0x13, 0x3b, 0xcd, 0x18, 0x55, 0xef, 0x0a, 0x99, 0x69, 0x3a, 0x94, 0x43, 0xc9, 0x3f, 0x6d, 0xd2, 0x75, 0xf0, 0x58, 0xfd, 0x1b, 0xb6, 0x95, 0x32, 0xb6, 0x4a, 0x1d, 0xd7, 0xe1, 0xd0, 0xe7, 0x80, 0xd7, 0x52, 0x04, 0xfa, 0x8c, 0x61, 0xc2, 0xeb, 0x5d, 0xe8, 0x82, 0x72, 0xcb, 0x93, 0xae, 0xf0, 0x80, 0xf7, 0x02, 0xbb, 0x78, 0x88, 0x94, 0x25, 0xa5, 0xf1, 0x66, 0xf6, 0x3b, 0x5b, 0x1a, 0x31, 0xec, 0x5c, 0x1c, 0x26, 0xa5, 0x99, 0xfa, 0xfe, 0x58, 0x77, 0x42, 0x98, 0xb9, 0x7d, 0xb3, 0x14, 0xfc, 0x81, 0xd0, 0x92 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.18", - /* Message to be signed */ - 256, - { 0xf1, 0xd1, 0x11, 0xad, 0x08, 0xe0, 0x38, 0xca, 0x3a, 0xb4, 0xe5, 0x2e, 0x5e, 0xab, 0x71, 0x01, 0x87, 0x6c, 0xa9, 0xbe, 0x62, 0x6a, 0x13, 0x59, 0x17, 0xf4, 0x5b, 0x1f, 0x9d, 0x1b, 0x32, 0xef, 0xe4, 0xff, 0x86, 0x7a, 0xb8, 0xa3, 0x05, 0xf9, 0x49, 0xc0, 0x04, 0x8b, 0x25, 0xf5, 0x46, 0x22, 0x61, 0xb1, 0xa3, 0x49, 0x3b, 0x81, 0x90, 0x21, 0x0f, 0x5c, 0xfa, 0x6b, 0xf7, 0xe5, 0xc3, 0x00, 0x54, 0x98, 0xde, 0xec, 0xc1, 0xe1, 0xc5, 0x04, 0xf3, 0xa3, 0x49, 0x98, 0xbe, 0x6a, 0xd6, 0xac, 0x00, 0x40, 0x51, 0xc4, 0xe0, 0xa3, 0xdb, 0x2c, 0x22, 0xeb, 0x5e, 0x14, 0x16, 0x55, 0x28, 0xdf, 0x78, 0x12, 0xa2, 0x0d, 0x5c, 0x7f, 0x05, 0xb9, 0x40, 0xca, 0x13, 0xe9, 0x38, 0x3a, 0xe0, 0x0d, 0x6c, 0xd4, 0xd0, 0xf4, 0xae, 0x3d, 0xad, 0x04, 0x7a, 0xb9, 0xc4, 0x17, 0x8d, 0xb6, 0x6d, 0x3b, 0x80, 0x96, 0x0c, 0xaf, 0x0a, 0x92, 0x4d, 0xc9, 0x4e, 0xb8, 0xe0, 0x77, 0x09, 0xbc, 0xdb, 0x34, 0x9e, 0x90, 0xfa, 0x2e, 0x10, 0xc5, 0xd5, 0x26, 0xd2, 0x21, 0x9c, 0xa7, 0x6f, 0x88, 0x01, 0xfd, 0xc6, 0x61, 0xbd, 0xca, 0x6a, 0x93, 0xda, 0x48, 0xd0, 0x45, 0xac, 0x37, 0x51, 0x34, 0xcc, 0xd6, 0xff, 0x7c, 0x52, 0xfd, 0x15, 0xc7, 0xcd, 0x3d, 0x1f, 0x31, 0xaf, 0xe5, 0x04, 0xbc, 0xe7, 0xc0, 0x33, 0x3a, 0x89, 0x79, 0xe3, 0xce, 0xcc, 0x53, 0xc4, 0xea, 0xdd, 0x7d, 0x95, 0xd4, 0x6f, 0xa3, 0xb2, 0xa9, 0xf0, 0x06, 0x10, 0x0d, 0x6b, 0xfc, 0x0e, 0xd5, 0xee, 0x77, 0x69, 0x4f, 0xf1, 0xa2, 0x4e, 0x16, 0xa5, 0x44, 0xde, 0x71, 0x46, 0x52, 0x90, 0xdd, 0xdd, 0x18, 0x9f, 0x01, 0x67, 0x03, 0x59, 0xf8, 0xc6, 0xb5, 0xd4, 0xc6, 0xb6, 0xb9, 0xf5, 0xc5, 0x7a, 0xa5, 0xa3, 0x8f, 0x07, 0x99 } -, - /* Signature */ - 129, - { 0x0d, 0xe9, 0x42, 0x31, 0xc0, 0x6a, 0xb1, 0x87, 0xb0, 0x0d, 0xda, 0x2b, 0x34, 0xe2, 0xb4, 0xcb, 0xac, 0x41, 0xf6, 0x08, 0xc4, 0x8c, 0x72, 0x27, 0xa6, 0x28, 0x2a, 0x17, 0x9e, 0x58, 0xc3, 0x2e, 0xf5, 0xdd, 0xc9, 0x76, 0x4f, 0xa2, 0xdf, 0xc3, 0xfb, 0xe0, 0x21, 0xdd, 0xb4, 0x81, 0x56, 0xa6, 0x37, 0x3c, 0xd6, 0x9b, 0x85, 0xd3, 0x64, 0xd8, 0x9b, 0x5a, 0x32, 0xfa, 0xbb, 0x2d, 0x46, 0x5d, 0x05, 0x62, 0xd4, 0xa1, 0xdd, 0x6f, 0xca, 0x64, 0x78, 0x0b, 0x06, 0x2a, 0x94, 0x71, 0x24, 0xa7, 0xfc, 0x0b, 0x82, 0xe4, 0xfe, 0xd1, 0x2b, 0x8b, 0x4f, 0x72, 0x6a, 0x0c, 0x85, 0x39, 0xc6, 0xcd, 0xe2, 0x1a, 0xf6, 0x55, 0xac, 0xc8, 0xde, 0x1e, 0x7b, 0xa9, 0xd6, 0x7b, 0x87, 0xb8, 0xe7, 0x77, 0xd4, 0x8a, 0xcd, 0x86, 0x8a, 0x80, 0xdb, 0x15, 0x31, 0x4f, 0x35, 0x55, 0x60, 0x10, 0x35, 0x77, 0xeb } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.19", - /* Message to be signed */ - 193, - { 0x9c, 0x4e, 0xcc, 0x4b, 0x24, 0x44, 0xa4, 0x01, 0xbf, 0xb6, 0xf4, 0xb7, 0x24, 0x49, 0x23, 0xa5, 0xad, 0x33, 0x86, 0xc3, 0xb8, 0x41, 0x67, 0x8c, 0xf5, 0xe6, 0x44, 0x7b, 0x8a, 0x3a, 0x07, 0x59, 0x86, 0xc3, 0x3f, 0xd0, 0x01, 0xb8, 0x43, 0x72, 0x4d, 0xdd, 0xc4, 0x21, 0x2f, 0xf4, 0x5a, 0xb3, 0xfe, 0xca, 0xa9, 0x0a, 0x16, 0xf6, 0xb5, 0x59, 0x2c, 0x51, 0x5c, 0xc4, 0xee, 0x54, 0xae, 0xa4, 0x59, 0x34, 0x32, 0x16, 0x70, 0x96, 0x67, 0x8f, 0x93, 0x41, 0x59, 0x85, 0x6d, 0x14, 0xc4, 0x32, 0xe7, 0xd6, 0xd2, 0x8d, 0x71, 0xb2, 0x68, 0x7f, 0x54, 0xed, 0x71, 0x9e, 0x5c, 0x20, 0x11, 0x00, 0x68, 0x8e, 0x85, 0xf2, 0x0e, 0x79, 0xa9, 0xee, 0x8a, 0xa4, 0xb6, 0x14, 0x31, 0x34, 0x3d, 0x1e, 0x99, 0xc2, 0x14, 0x35, 0xc6, 0x1e, 0x8b, 0xc1, 0x04, 0xf2, 0xba, 0xd5, 0x29, 0x60, 0xfc, 0xee, 0xe6, 0x7b, 0x85, 0x03, 0x3d, 0x3a, 0xee, 0xfa, 0xe4, 0x13, 0xce, 0x29, 0x70, 0x1e, 0xff, 0xcb, 0x02, 0xb4, 0x84, 0xa0, 0x31, 0xe2, 0xf3, 0x19, 0xef, 0x7e, 0xd0, 0xd6, 0xe6, 0x9b, 0x29, 0x16, 0xee, 0xb3, 0x8c, 0x4f, 0x19, 0x42, 0xba, 0x23, 0xc2, 0xa1, 0x79, 0x0c, 0xe3, 0xfe, 0x09, 0xd0, 0x1b, 0x9b, 0x9f, 0xe6, 0xdb, 0xa8, 0xdc, 0x21, 0x0e, 0xaa, 0x8f, 0xe7, 0x3c, 0xa7, 0x6f, 0x1b, 0x5b } -, - /* Signature */ - 129, - { 0x18, 0x53, 0xc2, 0x1a, 0x4a, 0x18, 0x54, 0x7d, 0x86, 0x7b, 0x3c, 0xed, 0x02, 0xda, 0xf0, 0xb2, 0x2c, 0xe8, 0xd4, 0xd5, 0xaf, 0x2b, 0x8e, 0xf5, 0xf7, 0xc8, 0xfd, 0x38, 0x5b, 0x81, 0x53, 0x64, 0x8d, 0x81, 0x83, 0x1d, 0x6a, 0xcb, 0x5d, 0xa8, 0x30, 0xf6, 0x77, 0x40, 0x25, 0x9f, 0xfb, 0x33, 0x9f, 0x7b, 0x90, 0xaf, 0x48, 0x83, 0x81, 0x9c, 0x47, 0x15, 0xe0, 0x8c, 0x28, 0x99, 0xd4, 0xc7, 0x24, 0x6e, 0x07, 0xe5, 0xbc, 0x6e, 0xf3, 0xcf, 0xd9, 0xa0, 0x4d, 0xa0, 0x6c, 0x43, 0xe9, 0x5c, 0x77, 0x2b, 0xe2, 0x21, 0xcf, 0xaa, 0xf6, 0x95, 0x4e, 0xf9, 0x33, 0x31, 0xe5, 0x95, 0xff, 0x48, 0x92, 0x1f, 0x05, 0xfc, 0xe8, 0xfa, 0x0d, 0x42, 0x9e, 0x0c, 0x99, 0x56, 0x2a, 0x9c, 0x2f, 0x68, 0xeb, 0xf3, 0x2c, 0xf1, 0xc6, 0xc6, 0xbb, 0x8b, 0x27, 0x4a, 0x2e, 0x42, 0xd6, 0x71, 0x59, 0x12, 0xff } - -} -, -{ - "PKCS#1 v1.5 Signature Example 12.20", - /* Message to be signed */ - 146, - { 0xc3, 0x81, 0xe6, 0x03, 0x99, 0x86, 0x51, 0x66, 0xd2, 0xba, 0xa0, 0x31, 0x45, 0x26, 0x83, 0x34, 0x18, 0x40, 0x39, 0xe0, 0x53, 0x35, 0xa3, 0x00, 0xc2, 0x80, 0x4e, 0x2b, 0xfe, 0xf5, 0xa7, 0xd1, 0x4c, 0x44, 0x3d, 0x65, 0x38, 0xe1, 0x6b, 0xdf, 0x9d, 0xa7, 0xad, 0x1f, 0xea, 0x63, 0x4e, 0xbf, 0xe1, 0x13, 0xbc, 0x82, 0x1e, 0x79, 0xa4, 0x49, 0xb2, 0xeb, 0x2f, 0x57, 0xc2, 0x1f, 0xba, 0x35, 0xff, 0xcc, 0x6a, 0x7e, 0x52, 0x55, 0x72, 0x27, 0x7e, 0x8f, 0x55, 0x37, 0xc7, 0xb5, 0xb9, 0x79, 0x4d, 0xef, 0xb3, 0x9a, 0xab, 0x06, 0x07, 0x85, 0xd1, 0x99, 0x40, 0x02, 0xdc, 0xf8, 0x07, 0x01, 0x2e, 0x1d, 0x17, 0x91, 0xda, 0x94, 0x3b, 0x2b, 0x75, 0x9c, 0x36, 0x6b, 0xb4, 0x24, 0xe4, 0x2c, 0x9c, 0x20, 0x43, 0xce, 0x78, 0x8a, 0x25, 0xfb, 0xfe, 0xbb, 0x87, 0xe7, 0x4c, 0xb0, 0x20, 0xb1, 0x1e, 0x8e, 0xaf, 0x16, 0x18, 0x84, 0xd6, 0x67, 0x2b, 0xbe, 0x9c, 0x09, 0xfb, 0xb3, 0xb8, 0xaf, 0xa0, 0x61 } -, - /* Signature */ - 129, - { 0x19, 0x90, 0x69, 0x57, 0x37, 0x53, 0x01, 0x8f, 0x33, 0x59, 0x2a, 0xf1, 0x5c, 0x1d, 0x31, 0x31, 0xbf, 0x5d, 0x8a, 0xc4, 0xf6, 0x4c, 0xf6, 0x14, 0xd3, 0xa0, 0x1b, 0xf3, 0x72, 0xdf, 0x00, 0x2e, 0xb5, 0xb5, 0xfc, 0x8f, 0x82, 0xba, 0x13, 0x7f, 0x83, 0xdc, 0x14, 0x2e, 0xde, 0x38, 0xc5, 0x81, 0x80, 0xe7, 0xbd, 0xa6, 0x9c, 0x4f, 0x1b, 0xc7, 0xbf, 0x96, 0xec, 0xd3, 0xfa, 0x79, 0xbc, 0xcb, 0xdd, 0xb7, 0xd9, 0x2e, 0x4f, 0xd8, 0x64, 0xc5, 0xfa, 0x93, 0x3a, 0x4d, 0xfc, 0x60, 0x0e, 0x10, 0x83, 0x00, 0x8a, 0x38, 0x6f, 0x4d, 0x02, 0x2c, 0x20, 0x24, 0xff, 0x7e, 0x0b, 0x37, 0x22, 0xea, 0xfe, 0xa0, 0x5a, 0x1e, 0x02, 0xc7, 0xa6, 0x3e, 0xeb, 0x40, 0xf4, 0xf4, 0xc4, 0xf6, 0x60, 0xc3, 0x24, 0x72, 0xa0, 0xa7, 0x89, 0x23, 0xe3, 0x86, 0x3a, 0x99, 0x44, 0x5e, 0x7c, 0xfe, 0x27, 0x00, 0x60 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 13: A 1031-bit RSA key pair", -{ - /* Modulus */ - 129, - { 0x70, 0xe9, 0x23, 0xa5, 0xa0, 0xcd, 0x8e, 0xcd, 0xf9, 0x9b, 0xbe, 0x93, 0xd7, 0xd0, 0x28, 0x82, 0x95, 0x5d, 0x91, 0xb6, 0xef, 0xe3, 0xce, 0xc8, 0x6c, 0x93, 0xd2, 0x1c, 0x0a, 0xc3, 0x01, 0xb8, 0x29, 0x3e, 0x51, 0x43, 0x5b, 0x87, 0x8b, 0xc6, 0xb3, 0x4b, 0xed, 0x41, 0x11, 0x59, 0x0e, 0x76, 0x46, 0x76, 0x58, 0x8b, 0x11, 0x6c, 0x2a, 0x36, 0xa4, 0xc7, 0x7e, 0xd9, 0xc9, 0x0a, 0x13, 0xc1, 0x4d, 0x23, 0xe1, 0x99, 0x47, 0x87, 0xfc, 0xdb, 0x8f, 0x5c, 0x97, 0x41, 0x0f, 0xca, 0xd4, 0x04, 0x5b, 0x85, 0x85, 0x70, 0x2c, 0xce, 0x29, 0xda, 0x11, 0xf9, 0x7e, 0x79, 0xa9, 0x7c, 0x2e, 0x5f, 0x6a, 0x5f, 0xc0, 0xbb, 0x8c, 0xe7, 0x6d, 0x15, 0x54, 0xa8, 0xbc, 0x47, 0x96, 0x17, 0x20, 0xd3, 0x64, 0x05, 0x0b, 0xf2, 0x74, 0x19, 0xbf, 0xf1, 0x68, 0xc0, 0xa7, 0xec, 0xc8, 0x73, 0x4c, 0xb5, 0xa5 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 129, - { 0x02, 0x9e, 0x10, 0xf6, 0xbb, 0xb7, 0xd0, 0x2d, 0xeb, 0xb1, 0xa5, 0xd5, 0x19, 0x0d, 0x69, 0x06, 0xff, 0xed, 0xeb, 0x9d, 0x15, 0x4a, 0x0f, 0x66, 0xdb, 0x87, 0x80, 0xb9, 0x28, 0x31, 0xb5, 0x96, 0x3e, 0x94, 0x84, 0x7f, 0x3e, 0x7d, 0xb1, 0xaa, 0x91, 0x48, 0xfb, 0x0e, 0xc5, 0x57, 0x6e, 0x6b, 0xa4, 0xfe, 0x04, 0xd6, 0xf2, 0x78, 0x32, 0xb1, 0x52, 0x18, 0x12, 0xd3, 0x7b, 0x22, 0xd9, 0xea, 0xe2, 0x80, 0x08, 0xe0, 0x92, 0xc6, 0x7e, 0x72, 0x32, 0x42, 0x67, 0xe1, 0xb1, 0xee, 0x45, 0x43, 0x55, 0x74, 0x1d, 0x8d, 0xe1, 0xd2, 0xa6, 0xa0, 0x50, 0x74, 0xbb, 0x1c, 0xe5, 0x81, 0x8b, 0x41, 0xbd, 0x19, 0xdc, 0x6b, 0x58, 0xc8, 0x93, 0x7d, 0x8a, 0xd6, 0x40, 0xd7, 0x04, 0x3f, 0xa1, 0x1f, 0x46, 0x8d, 0x6c, 0xcb, 0xec, 0x4a, 0xde, 0x52, 0x0a, 0x9e, 0x15, 0x9d, 0x60, 0x5d, 0x09, 0x28, 0x29 } -, - /* Prime 1 */ - 65, - { 0x0a, 0xb4, 0x64, 0xfd, 0x6f, 0xe3, 0x3c, 0x45, 0x9a, 0xb2, 0xdc, 0xce, 0x5f, 0x78, 0xa4, 0xd7, 0x4f, 0x92, 0xb9, 0x97, 0xd4, 0xbf, 0x54, 0x2e, 0x2d, 0x85, 0x4e, 0x76, 0x2c, 0x85, 0x86, 0xfc, 0x43, 0x57, 0xcc, 0x58, 0xcb, 0x33, 0x36, 0x33, 0xb0, 0x95, 0xa5, 0xee, 0x04, 0xa0, 0x32, 0x48, 0x53, 0x64, 0xd7, 0x0f, 0x67, 0xa3, 0xaa, 0x04, 0x85, 0x4c, 0x7a, 0x87, 0xa6, 0x9c, 0xf4, 0xc2, 0xad } -, - /* Prime 2 */ - 65, - { 0x0a, 0x8c, 0x3c, 0xc5, 0x04, 0x13, 0x40, 0xf4, 0x32, 0xfe, 0x0a, 0x78, 0x73, 0x13, 0x57, 0x79, 0x16, 0xfe, 0x76, 0xc0, 0x39, 0xf9, 0x71, 0x75, 0x9e, 0xc5, 0x0e, 0xd6, 0xc5, 0xb9, 0xa7, 0x36, 0x9b, 0x68, 0x96, 0x9e, 0xcb, 0x52, 0x59, 0xfe, 0x9c, 0x50, 0xd0, 0x75, 0x9b, 0xf8, 0xb3, 0xaa, 0xc1, 0xa5, 0xd5, 0xb5, 0x28, 0x8d, 0x67, 0x89, 0xe7, 0x18, 0xfa, 0x37, 0xef, 0x42, 0x39, 0x95, 0xd9 } -, - /* Prime exponent 1 */ - 64, - { 0xbb, 0x29, 0x5a, 0x95, 0xd5, 0xb3, 0x3c, 0x1d, 0xc0, 0xb1, 0x8b, 0xf6, 0xc1, 0x4a, 0xa0, 0xd9, 0xf2, 0x6f, 0x72, 0x8b, 0x39, 0x36, 0x0a, 0xa1, 0x59, 0x45, 0x6e, 0x94, 0xc3, 0xd9, 0xe0, 0x48, 0xc9, 0x2a, 0x4f, 0xb6, 0x31, 0x1d, 0x36, 0x92, 0x8c, 0xe5, 0xf4, 0x47, 0xa4, 0x99, 0x4a, 0x8f, 0x47, 0x87, 0xd8, 0xa9, 0x7f, 0x68, 0x11, 0x3e, 0xf9, 0x66, 0x34, 0xf5, 0x90, 0x2a, 0xb7, 0x51 } -, - /* Prime exponent 2 */ - 65, - { 0x02, 0xfa, 0x11, 0x2c, 0x89, 0x39, 0xe5, 0xdb, 0x05, 0x89, 0x2c, 0xeb, 0x51, 0x8e, 0xe3, 0xe1, 0x08, 0xdc, 0x48, 0x27, 0x78, 0x35, 0x2e, 0x10, 0x43, 0xfe, 0xd9, 0x71, 0x43, 0xdc, 0x61, 0x94, 0xc7, 0xc7, 0x7c, 0xba, 0xd4, 0x27, 0x29, 0xbe, 0xf1, 0xde, 0xdc, 0xf6, 0x54, 0x4e, 0x9c, 0x66, 0x54, 0xc0, 0xb8, 0xcf, 0xa7, 0xe2, 0x40, 0x96, 0x6a, 0xe2, 0x61, 0xbb, 0xe7, 0x8a, 0x89, 0x36, 0x01 } -, - /* Coefficient */ - 64, - { 0xa8, 0x8b, 0xf3, 0xff, 0xe9, 0x3f, 0x40, 0x4e, 0x06, 0x82, 0x1c, 0x97, 0x71, 0xea, 0xe6, 0x08, 0x15, 0x71, 0x2d, 0x6f, 0x94, 0x52, 0x71, 0xf6, 0xf3, 0x6f, 0x03, 0x69, 0xd9, 0x66, 0xc9, 0x20, 0xc7, 0xf8, 0xcb, 0xc7, 0x84, 0x25, 0xac, 0xbb, 0x9c, 0xe0, 0xfa, 0x1a, 0x03, 0x22, 0xf5, 0x0c, 0x97, 0xb8, 0x11, 0x5b, 0xd1, 0x51, 0x91, 0xf2, 0x24, 0xb5, 0x68, 0xd1, 0xd6, 0xec, 0xa6, 0xdb } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 13.1", - /* Message to be signed */ - 36, - { 0xb5, 0xe8, 0x6c, 0x8b, 0xa3, 0x98, 0x5a, 0xa5, 0x54, 0x1d, 0xf9, 0x5e, 0x51, 0x3c, 0xff, 0x67, 0x61, 0x2e, 0xaf, 0x2e, 0x16, 0x68, 0x85, 0x76, 0xf7, 0xd6, 0x73, 0xf6, 0xf1, 0x89, 0x1f, 0xb7, 0x5c, 0x9d, 0xd2, 0xcd } -, - /* Signature */ - 129, - { 0x6b, 0x42, 0xfd, 0x51, 0x63, 0x09, 0x19, 0x7f, 0x8a, 0xf3, 0xc7, 0x3e, 0x39, 0x62, 0x4d, 0x8e, 0xba, 0xbe, 0xcd, 0xa3, 0xec, 0x3c, 0xe6, 0x57, 0xb1, 0x11, 0x7f, 0x43, 0xe9, 0x83, 0x87, 0x7a, 0x1b, 0xa1, 0xaa, 0xf8, 0xe9, 0x5c, 0xc3, 0x99, 0x91, 0xd9, 0x2e, 0x35, 0xe2, 0xdb, 0x1e, 0x41, 0x30, 0x90, 0x14, 0x3d, 0x16, 0x46, 0x71, 0x98, 0xb9, 0xb9, 0xa9, 0x90, 0xd7, 0x74, 0xc2, 0x7a, 0xd3, 0xbb, 0xb4, 0x35, 0x2d, 0x3f, 0x07, 0x5d, 0x61, 0x73, 0x2c, 0x6b, 0x58, 0xec, 0x0f, 0x66, 0xe4, 0x92, 0xa3, 0xf7, 0xac, 0x4b, 0xbc, 0xf0, 0x12, 0xed, 0x6b, 0x40, 0x1f, 0xeb, 0x4f, 0xf3, 0x95, 0xcb, 0x8b, 0x21, 0x8a, 0x81, 0xd6, 0x17, 0x31, 0xee, 0xce, 0x37, 0x6f, 0x68, 0x8e, 0x66, 0xae, 0xa6, 0x98, 0xb4, 0xa8, 0x86, 0x2f, 0x58, 0xc9, 0x1d, 0x87, 0x60, 0x85, 0x49, 0x6f, 0xd0, 0x14 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 13.2", - /* Message to be signed */ - 253, - { 0x95, 0x46, 0x34, 0x6c, 0xf2, 0x21, 0x94, 0xc7, 0x87, 0x88, 0x81, 0x70, 0xa4, 0x82, 0xf7, 0xf4, 0x92, 0x17, 0xc3, 0x94, 0x0d, 0xc6, 0x21, 0x0c, 0xe3, 0x9e, 0x45, 0x50, 0xa3, 0x9b, 0x45, 0x28, 0x22, 0x41, 0x9a, 0xea, 0xc2, 0x4b, 0xec, 0x19, 0x8b, 0xb3, 0x59, 0xd0, 0x8b, 0xe8, 0x19, 0x6d, 0xf2, 0xe7, 0x57, 0x76, 0x61, 0x96, 0xc9, 0x58, 0xe2, 0xb1, 0x59, 0xc7, 0x4c, 0x1c, 0x30, 0x23, 0xc2, 0xdb, 0xcc, 0xe9, 0xed, 0x5d, 0x0e, 0xf3, 0xfb, 0x51, 0x45, 0x0b, 0xff, 0x64, 0x45, 0xdb, 0x26, 0x5e, 0x60, 0x6e, 0x19, 0x4b, 0xee, 0x06, 0x4c, 0xa5, 0xb3, 0x21, 0xd7, 0xe1, 0x55, 0x14, 0x23, 0x0c, 0x2b, 0x3b, 0x55, 0xd5, 0xda, 0x4c, 0xd0, 0x40, 0x52, 0x2f, 0x7b, 0xb8, 0x6a, 0x96, 0x2b, 0x81, 0x3f, 0x9d, 0xa3, 0x9e, 0x51, 0x38, 0x9b, 0xc6, 0x4f, 0x56, 0xe4, 0x47, 0xb2, 0xa2, 0xbf, 0x81, 0x9d, 0x7a, 0x80, 0x09, 0x4e, 0x2b, 0x8d, 0xe2, 0x7f, 0x10, 0x4b, 0xb6, 0xeb, 0x2f, 0x2f, 0xb4, 0x3a, 0xf1, 0xd0, 0x1e, 0xad, 0xca, 0x23, 0xa1, 0x96, 0xba, 0x12, 0x5b, 0x6a, 0x78, 0x57, 0x99, 0x74, 0xc0, 0xee, 0xc8, 0xa5, 0x49, 0x67, 0x71, 0xf6, 0x7d, 0xbd, 0x50, 0x69, 0xf3, 0x36, 0xe4, 0xef, 0x1f, 0x40, 0x47, 0x42, 0xdf, 0xc6, 0x9c, 0xe3, 0x25, 0xaa, 0x64, 0x9f, 0x8a, 0x63, 0x31, 0xcf, 0x40, 0x35, 0x55, 0xe1, 0x3f, 0x08, 0x10, 0xa7, 0x63, 0x50, 0xa7, 0xe1, 0x8d, 0x29, 0x92, 0xfa, 0xb4, 0x8f, 0x39, 0x7f, 0x3b, 0x93, 0xc5, 0xbd, 0x5a, 0x6f, 0xe1, 0xd2, 0xc4, 0x61, 0x8b, 0xa1, 0xf5, 0x9f, 0x00, 0x2d, 0xc2, 0x57, 0xec, 0x39, 0xee, 0x2f, 0x87, 0x62, 0x98, 0xda, 0x90, 0xf7, 0x44, 0x0a, 0xd4, 0xc6, 0xc9, 0x3f, 0xc1, 0x14, 0xdf, 0x05 } -, - /* Signature */ - 129, - { 0x67, 0xe4, 0x14, 0x99, 0x3f, 0x98, 0x7a, 0x22, 0x64, 0x3d, 0xd0, 0x39, 0xe7, 0xf9, 0xfe, 0x1c, 0xae, 0x74, 0x4a, 0x7a, 0xe4, 0x1d, 0x4c, 0x04, 0x4f, 0xa4, 0xed, 0x8d, 0xc9, 0xe3, 0x40, 0xce, 0xbb, 0x1e, 0x2a, 0xfb, 0x19, 0x8e, 0x84, 0x7a, 0xef, 0x4b, 0xc0, 0x61, 0xfd, 0x80, 0x0d, 0x81, 0xd4, 0xd3, 0x67, 0xb0, 0xfc, 0x2f, 0x73, 0x09, 0x33, 0xc1, 0x9b, 0x88, 0xd4, 0xdd, 0xf0, 0x5e, 0xd9, 0x8a, 0x58, 0x56, 0xde, 0x5e, 0xb4, 0x5b, 0x11, 0x6b, 0x7d, 0x24, 0xfe, 0xb4, 0x56, 0x77, 0x84, 0x9d, 0xab, 0x76, 0xe9, 0xe0, 0xcc, 0xb4, 0x5b, 0xa6, 0xb6, 0xf6, 0x14, 0x1f, 0x37, 0xbb, 0xad, 0x7c, 0x19, 0x1c, 0x37, 0x77, 0x11, 0x3b, 0xc7, 0x38, 0x8e, 0x4e, 0x46, 0x44, 0xec, 0xa9, 0x47, 0x03, 0xa7, 0x2b, 0xdd, 0xcc, 0x6f, 0x50, 0xcf, 0x98, 0x0e, 0x3f, 0x6d, 0xe3, 0x9d, 0x73, 0x12 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.3", - /* Message to be signed */ - 121, - { 0x56, 0x52, 0xb4, 0xc5, 0x75, 0x20, 0xb2, 0x55, 0xfb, 0x96, 0xf7, 0x0a, 0x30, 0xab, 0x92, 0xee, 0xc1, 0x93, 0x99, 0x56, 0xb6, 0xa9, 0x43, 0xc8, 0x3e, 0xd0, 0x98, 0x6e, 0x2e, 0x6e, 0xe4, 0xef, 0xbf, 0x8a, 0x52, 0x28, 0x78, 0x67, 0x28, 0x12, 0x03, 0xa7, 0xa6, 0xd1, 0xd8, 0x86, 0xb7, 0x00, 0x59, 0x52, 0xb4, 0x3b, 0x77, 0x85, 0x44, 0xed, 0xa8, 0x98, 0xe0, 0xdf, 0x2f, 0xa0, 0x6f, 0x68, 0x38, 0x03, 0x18, 0xf1, 0x4a, 0x53, 0xfe, 0x55, 0xd7, 0x2f, 0x8c, 0xfa, 0x6a, 0xf2, 0x1d, 0x93, 0xbb, 0xfc, 0x20, 0xd3, 0x58, 0xc2, 0x08, 0xc5, 0x62, 0xd7, 0x39, 0xbe, 0x00, 0x01, 0xce, 0x07, 0xfd, 0x8c, 0xd2, 0xf4, 0x6c, 0x3b, 0x44, 0xc8, 0x36, 0x51, 0x88, 0x09, 0xb7, 0x6f, 0x3a, 0x70, 0xcf, 0x69, 0x26, 0xbe, 0x06, 0x9c, 0x35, 0x75, 0xd5 } -, - /* Signature */ - 129, - { 0x01, 0x64, 0x11, 0xa2, 0x31, 0xa7, 0x38, 0x94, 0x4b, 0x3e, 0x44, 0xf7, 0x88, 0x5c, 0xf8, 0x1a, 0xca, 0xb7, 0x32, 0xd1, 0x73, 0x6d, 0xe3, 0x4c, 0x56, 0xcf, 0x40, 0xf9, 0x9a, 0x6c, 0xe4, 0x00, 0x70, 0xa2, 0x0a, 0xa9, 0x4c, 0x48, 0x78, 0x44, 0xa9, 0x3c, 0xef, 0x28, 0x7a, 0x58, 0xbc, 0x0e, 0xa1, 0x81, 0xb2, 0xcf, 0x27, 0xd9, 0x14, 0xf2, 0x93, 0xb9, 0x29, 0x77, 0x9d, 0x39, 0x03, 0x6c, 0x4e, 0x5a, 0xae, 0xd3, 0x5e, 0xee, 0x8a, 0x7f, 0xd5, 0x0e, 0xfd, 0x09, 0x6c, 0x91, 0xa8, 0xf7, 0x2c, 0x3c, 0x14, 0x1c, 0x57, 0x6c, 0x8d, 0x10, 0xb6, 0x36, 0xfc, 0x4d, 0xdc, 0x1e, 0x67, 0x14, 0xf1, 0x7f, 0xfc, 0xce, 0x10, 0x6d, 0x22, 0x1b, 0x4f, 0xd7, 0xd6, 0xfe, 0x1e, 0x7c, 0xbd, 0x3f, 0x3b, 0x08, 0xf5, 0x54, 0x6b, 0x44, 0xd1, 0xfe, 0xb7, 0x18, 0xfb, 0xc1, 0x33, 0x70, 0xc7, 0xfa, 0x2c } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.4", - /* Message to be signed */ - 211, - { 0x6d, 0x57, 0xf0, 0x79, 0xa3, 0xe8, 0xad, 0xcb, 0x47, 0xcf, 0x2e, 0x3c, 0xa9, 0x76, 0xe0, 0x3b, 0x09, 0xc7, 0x7d, 0x1d, 0x9d, 0x9d, 0x84, 0x84, 0x35, 0x7e, 0x91, 0x23, 0x09, 0xe8, 0xf4, 0xa8, 0x3c, 0xb5, 0x0c, 0xb6, 0xa7, 0x38, 0x8c, 0x41, 0x4a, 0xec, 0x84, 0x46, 0x71, 0xff, 0x81, 0x06, 0x51, 0xe8, 0x28, 0x10, 0x3a, 0x1f, 0x6a, 0x19, 0x9b, 0xe2, 0x60, 0xf7, 0x46, 0x00, 0x02, 0x8c, 0x6a, 0x7b, 0x7b, 0xb9, 0x41, 0x6c, 0xe7, 0xb6, 0x35, 0x0a, 0x3a, 0x68, 0x05, 0x62, 0x0c, 0xf5, 0xe6, 0xb0, 0x09, 0x5d, 0xfa, 0x22, 0xb5, 0x46, 0x01, 0xf6, 0x19, 0xaf, 0xd1, 0x0d, 0xa2, 0x03, 0xd2, 0x81, 0x90, 0xcf, 0x9b, 0x0d, 0xb5, 0x98, 0x6d, 0x29, 0x30, 0x33, 0x69, 0x1e, 0xc5, 0xbb, 0xba, 0x6d, 0x73, 0xea, 0x32, 0x47, 0x2e, 0xfa, 0x3f, 0x16, 0x0f, 0xd2, 0xb1, 0xb5, 0xe4, 0x3b, 0x0b, 0xfa, 0xd3, 0x16, 0x77, 0x30, 0x5f, 0xef, 0x46, 0x72, 0x44, 0x11, 0x4e, 0xe1, 0x0f, 0x5c, 0xb2, 0xd6, 0x7b, 0x47, 0x83, 0x23, 0xa7, 0x11, 0x04, 0x1e, 0x29, 0x4c, 0x46, 0xb2, 0xed, 0x39, 0xcc, 0xde, 0x07, 0x9c, 0x87, 0x7f, 0xe7, 0x5c, 0xb8, 0x75, 0x14, 0x4a, 0xc3, 0x1e, 0xb0, 0x31, 0xa7, 0x38, 0xa4, 0xce, 0xfe, 0xf9, 0x1f, 0x01, 0x7b, 0xa7, 0x15, 0x23, 0xf5, 0x12, 0x48, 0x18, 0xcf, 0x48, 0xb9, 0x72, 0xbc, 0x47, 0xc8, 0xf2, 0xed, 0x35, 0x6f, 0x5b, 0xf6, 0x91, 0xfd, 0x94, 0x67, 0x0b, 0xb2 } -, - /* Signature */ - 129, - { 0x31, 0x5c, 0xe4, 0x17, 0xd0, 0xbb, 0xd7, 0x3e, 0x7c, 0x43, 0x56, 0x79, 0x7e, 0x73, 0xed, 0x7a, 0xbf, 0xe9, 0xfc, 0xff, 0xf1, 0xa5, 0x34, 0x28, 0x99, 0xa7, 0xd1, 0x1f, 0xb0, 0xd0, 0x54, 0x2b, 0xfc, 0xab, 0x66, 0xde, 0x2e, 0x4e, 0xc0, 0x7c, 0x7d, 0xc2, 0xbe, 0x7d, 0x79, 0x72, 0x90, 0xa3, 0x0d, 0xb8, 0xc4, 0x07, 0xdd, 0x16, 0x37, 0x65, 0x88, 0xa6, 0xdc, 0xc1, 0xa2, 0x07, 0xbf, 0x7f, 0xf3, 0x11, 0x54, 0x0f, 0xaa, 0x9d, 0xd6, 0xf1, 0x9a, 0x73, 0xab, 0x25, 0xa7, 0x49, 0x6e, 0x68, 0x2f, 0xa8, 0xa7, 0x05, 0x40, 0x81, 0x07, 0x6c, 0x1a, 0x02, 0x15, 0x7b, 0xe6, 0x3e, 0x7f, 0x64, 0x5d, 0xe8, 0x2d, 0xf7, 0xc6, 0x15, 0x50, 0x3f, 0xa8, 0x3b, 0x4e, 0xdb, 0xa2, 0x05, 0x81, 0x81, 0x2e, 0x09, 0x7f, 0x65, 0x05, 0x6e, 0xd4, 0x17, 0xf6, 0xf2, 0x48, 0x03, 0x53, 0x0c, 0xf8, 0x18, 0x58 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.5", - /* Message to be signed */ - 241, - { 0xbb, 0x75, 0x44, 0x6f, 0x78, 0x78, 0x23, 0xdd, 0xa2, 0x42, 0x2b, 0x1a, 0xdc, 0x7d, 0x7f, 0xef, 0xd0, 0x6a, 0x6e, 0x9a, 0xf5, 0xc0, 0x49, 0x01, 0xac, 0x5b, 0x99, 0x91, 0x3a, 0xd6, 0x29, 0x8c, 0x9d, 0x1a, 0x33, 0x22, 0xe8, 0xb2, 0x17, 0xe4, 0xe0, 0x99, 0x4c, 0x42, 0x20, 0x42, 0x80, 0xd4, 0x04, 0xd0, 0x1e, 0xce, 0xb5, 0xec, 0x53, 0xfb, 0x86, 0xf7, 0x61, 0xa3, 0x96, 0xb2, 0x3a, 0xe1, 0x9d, 0x46, 0x79, 0x05, 0xa0, 0xfe, 0x80, 0x50, 0xb8, 0x95, 0xd8, 0xba, 0x37, 0x46, 0x68, 0x5c, 0x47, 0x43, 0x9f, 0x90, 0xc3, 0x66, 0x9c, 0x70, 0xff, 0xb8, 0x19, 0x94, 0x56, 0x5c, 0x4d, 0xf2, 0xa3, 0x1e, 0xb2, 0xa4, 0x52, 0xbc, 0x3c, 0xb3, 0x12, 0xb8, 0x14, 0x7c, 0xec, 0x19, 0x10, 0x32, 0xf3, 0x8f, 0x3b, 0x3d, 0x89, 0xd7, 0x58, 0x2b, 0xf1, 0x8e, 0x7b, 0x72, 0x75, 0xfb, 0x4f, 0x16, 0xee, 0x89, 0x56, 0x7e, 0x2a, 0x56, 0xbc, 0x73, 0xb3, 0xe2, 0xe1, 0x09, 0xf9, 0x94, 0x0e, 0xbd, 0x10, 0xb9, 0xdf, 0x2b, 0x88, 0xac, 0xcf, 0x0b, 0xa1, 0x8e, 0x5b, 0x34, 0x95, 0x20, 0xd2, 0xc7, 0xf5, 0xa3, 0x1b, 0xd5, 0x22, 0x6d, 0x12, 0xec, 0x35, 0xbf, 0xc9, 0xe3, 0x62, 0x03, 0xe1, 0x35, 0x06, 0xba, 0x12, 0xb7, 0x56, 0xc8, 0xba, 0x00, 0xaf, 0x91, 0xb8, 0x5b, 0x0b, 0x4c, 0x07, 0xc7, 0xf4, 0x84, 0xad, 0xc4, 0x58, 0xc9, 0x26, 0xaa, 0xeb, 0x4f, 0x08, 0x2f, 0xec, 0x98, 0x7d, 0x9f, 0x27, 0x6b, 0x89, 0x49, 0x59, 0x7e, 0xc0, 0x40, 0x1b, 0xb7, 0x1a, 0x2f, 0xea, 0x9c, 0x7b, 0x74, 0xe0, 0xdf, 0xe6, 0xaa, 0x52, 0xac, 0x8b, 0x80, 0xbe, 0xea, 0xd3, 0x36, 0xa4, 0x9d, 0xb2, 0x2f, 0xb3 } -, - /* Signature */ - 129, - { 0x53, 0xd0, 0xd7, 0x95, 0xbb, 0x08, 0x2f, 0x20, 0x01, 0x03, 0x6f, 0x47, 0x2c, 0x2e, 0xce, 0x6e, 0x7d, 0x2d, 0xb6, 0x9f, 0x29, 0x2d, 0xa7, 0x21, 0x36, 0x75, 0xc7, 0xcb, 0xba, 0x0d, 0x33, 0xb2, 0x32, 0x12, 0xf8, 0xf4, 0x3a, 0x4a, 0x8e, 0x09, 0xa6, 0xa5, 0x0e, 0x01, 0x9b, 0xbd, 0xd5, 0x9a, 0x58, 0x89, 0x8c, 0xc4, 0x6c, 0x58, 0xa4, 0x6e, 0x42, 0xce, 0x7b, 0xa0, 0x93, 0xfb, 0x46, 0x92, 0xf3, 0x83, 0xde, 0x33, 0xa9, 0xa3, 0x4f, 0x47, 0xc7, 0xe6, 0x19, 0x38, 0xbf, 0x8a, 0x6a, 0xda, 0xa8, 0x8d, 0xf2, 0x12, 0x96, 0xb4, 0xc6, 0x7b, 0x52, 0x68, 0x35, 0xf7, 0x57, 0xf2, 0xc2, 0x6c, 0x1d, 0x30, 0x9d, 0x7c, 0xdd, 0x5a, 0xd5, 0xfd, 0x8f, 0x61, 0xf8, 0x51, 0xed, 0x23, 0xc4, 0xbe, 0x2a, 0xbb, 0x62, 0x7d, 0xfd, 0x81, 0x7f, 0x84, 0x77, 0xdc, 0x04, 0x2b, 0x6a, 0x2e, 0x40, 0x69, 0x40 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.6", - /* Message to be signed */ - 245, - { 0x88, 0x39, 0x39, 0xd1, 0x49, 0xa5, 0x44, 0xe6, 0x2e, 0xf0, 0x4c, 0x61, 0x03, 0x51, 0xa2, 0xdf, 0xa2, 0x52, 0xeb, 0x9a, 0x9d, 0x1e, 0x11, 0xae, 0x54, 0xc9, 0xb0, 0x7e, 0xbc, 0xf1, 0xfd, 0xc4, 0x7e, 0xc1, 0xd9, 0x47, 0x03, 0x41, 0x1d, 0xa4, 0x15, 0xf5, 0x9f, 0xb3, 0xe5, 0x04, 0x1e, 0xd9, 0x47, 0x0e, 0x7b, 0xcc, 0x81, 0x9b, 0x5a, 0xfe, 0xaf, 0x86, 0x0c, 0x01, 0x6e, 0xf1, 0x25, 0xbd, 0x08, 0xa6, 0xcb, 0x8b, 0xcd, 0xf3, 0xb9, 0x3a, 0x51, 0xdc, 0xad, 0xb2, 0xf6, 0x8c, 0x8c, 0xc3, 0x77, 0x55, 0x14, 0x28, 0x2a, 0xff, 0x75, 0x67, 0xec, 0x65, 0xf2, 0x70, 0xd0, 0x2b, 0xeb, 0x95, 0xfb, 0x8f, 0xac, 0x24, 0x09, 0x5e, 0x17, 0x06, 0xe4, 0x8b, 0x52, 0x48, 0x65, 0xbc, 0x14, 0x46, 0x1d, 0x3e, 0xce, 0x8c, 0x50, 0x1c, 0x3d, 0x80, 0x2a, 0xde, 0x98, 0x5a, 0xe9, 0x5c, 0xfe, 0x1a, 0xb9, 0xd6, 0xb9, 0xab, 0x0d, 0x15, 0xfc, 0xc8, 0x86, 0x6f, 0x7f, 0x25, 0x9c, 0x5e, 0x41, 0xc0, 0x2c, 0xd4, 0x13, 0x43, 0x7e, 0x7d, 0x6b, 0xa7, 0xf1, 0x5b, 0x0a, 0x70, 0xda, 0xfb, 0xd5, 0x5c, 0x0e, 0xdb, 0x6b, 0x80, 0x75, 0xc2, 0x7c, 0xff, 0x3b, 0x28, 0x9e, 0x6c, 0x99, 0xe9, 0xa8, 0x84, 0xff, 0x7f, 0x08, 0x6d, 0xa9, 0xf7, 0x5d, 0x6a, 0x4c, 0xbb, 0xcc, 0xaf, 0x52, 0xba, 0x25, 0xc6, 0x34, 0x2c, 0x38, 0xa7, 0x6b, 0x44, 0xe1, 0x01, 0x15, 0x5d, 0xf7, 0x55, 0xe3, 0x9c, 0x14, 0x86, 0x2e, 0x22, 0x0c, 0xa3, 0x6f, 0xfb, 0xcc, 0x83, 0x2a, 0xfe, 0xcb, 0xa8, 0x7f, 0x8a, 0xbd, 0x96, 0x0a, 0x57, 0x7f, 0x56, 0xca, 0x6c, 0xd8, 0xe9, 0x91, 0x26, 0x65, 0x8f, 0x27, 0xac, 0x6e, 0x53, 0xc4, 0x42, 0xed, 0x47, 0x66 } -, - /* Signature */ - 129, - { 0x1e, 0xc0, 0x2a, 0xe6, 0xa0, 0xa3, 0xf6, 0x11, 0x99, 0x29, 0x61, 0xca, 0x27, 0xcc, 0xbf, 0x29, 0x6e, 0x11, 0x36, 0x18, 0x32, 0xe1, 0xee, 0x75, 0x20, 0x56, 0x9a, 0x9a, 0xee, 0x06, 0x34, 0x5c, 0xda, 0x22, 0xb4, 0xfa, 0x48, 0xfc, 0x34, 0x5e, 0x47, 0x78, 0xbc, 0x3c, 0xcd, 0xfe, 0xbd, 0x2d, 0xc5, 0xa6, 0xc9, 0xd4, 0x84, 0x51, 0xaa, 0x44, 0x1b, 0xea, 0x4b, 0x95, 0x11, 0x99, 0x65, 0x4a, 0xe8, 0xd2, 0xf7, 0x52, 0x2e, 0x17, 0xed, 0xbc, 0x2f, 0x51, 0xce, 0x15, 0xcb, 0xcd, 0x36, 0x6f, 0x49, 0x39, 0xcb, 0x53, 0xc3, 0xb7, 0x70, 0x81, 0xf4, 0xa7, 0x37, 0x50, 0x05, 0x4e, 0x00, 0xb3, 0x0b, 0xa2, 0xfe, 0x58, 0xf6, 0xf0, 0x2e, 0x36, 0xa8, 0x62, 0x54, 0x23, 0x97, 0xdb, 0xa6, 0xa3, 0xcd, 0x22, 0x77, 0x70, 0x88, 0x19, 0xe7, 0x8a, 0x2d, 0x87, 0x6a, 0x23, 0xa5, 0xa2, 0x69, 0xd7, 0x75 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.7", - /* Message to be signed */ - 71, - { 0x40, 0x31, 0xe0, 0xde, 0xf4, 0xf3, 0xd1, 0xad, 0x9b, 0xc0, 0x82, 0x77, 0x0a, 0x88, 0xa1, 0xd9, 0xb4, 0xb7, 0x10, 0x75, 0x48, 0xcd, 0xf8, 0x46, 0x2b, 0x0b, 0xae, 0x3d, 0x99, 0x4d, 0x8e, 0xbc, 0x4d, 0xa0, 0x44, 0xb9, 0x05, 0xdd, 0x8e, 0xd9, 0x1a, 0x1d, 0xa6, 0x76, 0x72, 0x78, 0x22, 0x36, 0x0e, 0xe2, 0xb6, 0xd5, 0xe1, 0x2b, 0xb7, 0x03, 0x16, 0xd7, 0x9e, 0x8a, 0xbb, 0x82, 0xa6, 0x43, 0x44, 0xaf, 0xb3, 0xb2, 0x25, 0x88, 0x5c } -, - /* Signature */ - 129, - { 0x0b, 0xe5, 0xa6, 0xd0, 0x43, 0xbe, 0x5d, 0x27, 0xd1, 0xd5, 0x1d, 0x9e, 0x3a, 0xa6, 0x1d, 0x92, 0xc9, 0xd8, 0x43, 0x23, 0x11, 0x9b, 0x48, 0xc8, 0x4a, 0x80, 0x38, 0x97, 0x18, 0xd7, 0xa1, 0xaa, 0xf5, 0x7a, 0x9a, 0x0d, 0x21, 0x4f, 0x65, 0x06, 0x48, 0x48, 0x64, 0xdf, 0xae, 0x85, 0xdb, 0x7b, 0x84, 0x74, 0x07, 0x3a, 0x8f, 0x97, 0x7b, 0x42, 0xb5, 0x3b, 0x40, 0x7e, 0x44, 0xc7, 0xc6, 0x2b, 0x16, 0x8d, 0x1e, 0x77, 0x78, 0xf4, 0xf2, 0x78, 0x57, 0xbf, 0xba, 0x85, 0xdd, 0xdc, 0x8b, 0x0e, 0x9f, 0x0e, 0x9a, 0x5b, 0x6d, 0xe7, 0x1a, 0x04, 0x43, 0x72, 0x0e, 0x92, 0xbb, 0x88, 0xb0, 0x77, 0xcb, 0xa1, 0x5d, 0x3f, 0x6e, 0x2b, 0xe4, 0xd2, 0x7a, 0x7c, 0x50, 0x9c, 0x7d, 0xc0, 0x3f, 0x1f, 0xdd, 0x4f, 0xe3, 0x38, 0xa4, 0xe5, 0x45, 0xc4, 0x6c, 0x03, 0x45, 0x22, 0xcc, 0xc0, 0xd4, 0x5d, 0x4c } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.8", - /* Message to be signed */ - 64, - { 0x7f, 0xdc, 0x96, 0xa4, 0x56, 0x57, 0x74, 0x02, 0x9f, 0xff, 0xa9, 0x3b, 0x39, 0xf0, 0x5d, 0xee, 0x9f, 0x84, 0xfa, 0x89, 0x53, 0xfd, 0x0f, 0x63, 0x38, 0xc8, 0x1c, 0x9d, 0xec, 0x6c, 0xdd, 0x66, 0x1f, 0xfa, 0xb9, 0x6f, 0x0e, 0x08, 0xeb, 0x0b, 0x9b, 0xa9, 0xca, 0x5b, 0xe1, 0x7b, 0x57, 0xc4, 0xb4, 0x86, 0x8f, 0xd5, 0x34, 0x11, 0x54, 0xde, 0x50, 0x27, 0x71, 0x13, 0xc7, 0x18, 0x53, 0x41 } -, - /* Signature */ - 129, - { 0x1d, 0xd2, 0x1f, 0xa4, 0x95, 0xbe, 0x7c, 0x49, 0x0f, 0x98, 0x2f, 0x69, 0xea, 0xb1, 0x4e, 0x24, 0xda, 0xa0, 0x4b, 0xd1, 0x38, 0xb7, 0x14, 0x32, 0x49, 0xcd, 0xcc, 0xd7, 0x8c, 0xcf, 0xc9, 0x10, 0x6a, 0xca, 0xa0, 0x3e, 0xc8, 0x76, 0x69, 0x42, 0x32, 0x56, 0x6e, 0xc6, 0xca, 0xb9, 0x12, 0x28, 0x40, 0xf6, 0x69, 0xc8, 0x00, 0xf2, 0xee, 0x09, 0x2b, 0xb9, 0xb6, 0xcb, 0x2a, 0x45, 0x42, 0xa9, 0x0d, 0xe6, 0x04, 0xc4, 0xf1, 0x05, 0x00, 0x0a, 0x3a, 0x0d, 0xec, 0xcd, 0x3d, 0xd9, 0x7a, 0x32, 0x61, 0xfa, 0x38, 0x22, 0x7e, 0xb3, 0x81, 0xa1, 0xf8, 0xf2, 0x3b, 0x66, 0x65, 0xd2, 0x84, 0x80, 0xdf, 0xb7, 0x21, 0x17, 0x88, 0x2e, 0xd8, 0xdb, 0x25, 0xd7, 0x6d, 0xe4, 0x0d, 0xe2, 0xfb, 0xe7, 0x2d, 0xc3, 0x94, 0xec, 0x6f, 0xbd, 0xaa, 0x99, 0xc6, 0x4f, 0xad, 0xe7, 0x29, 0x78, 0xa5, 0x1f, 0xc4 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.9", - /* Message to be signed */ - 175, - { 0x63, 0x18, 0x32, 0xab, 0x19, 0x18, 0xcd, 0x02, 0x08, 0x28, 0xe4, 0x7a, 0xe2, 0xb4, 0x47, 0x6b, 0x14, 0x69, 0xf2, 0x72, 0xe3, 0x0e, 0x53, 0xe5, 0x96, 0xfb, 0xa2, 0x6b, 0x40, 0x29, 0x37, 0xdc, 0x44, 0xc2, 0xea, 0x57, 0x45, 0xc7, 0x9d, 0x2d, 0xc6, 0x4a, 0x10, 0xe1, 0x22, 0x5c, 0xa0, 0xb6, 0x92, 0x9d, 0x49, 0x54, 0xbc, 0x5d, 0x37, 0x40, 0x96, 0xfd, 0x87, 0x8d, 0xd1, 0x01, 0xf7, 0x66, 0x63, 0x13, 0xd9, 0xa8, 0xf8, 0x26, 0xbc, 0x67, 0x14, 0x01, 0x42, 0x2c, 0x1c, 0xfe, 0x1a, 0x6d, 0x01, 0xa4, 0xd7, 0x86, 0x4a, 0x14, 0xc6, 0x0c, 0xeb, 0xc2, 0xf0, 0x70, 0x91, 0x4c, 0xee, 0xde, 0xb1, 0x78, 0x2f, 0xe5, 0x40, 0xa0, 0xa5, 0xd2, 0x57, 0x84, 0x44, 0xf9, 0xb3, 0x60, 0x34, 0xec, 0x77, 0xd6, 0xb8, 0x03, 0xa0, 0xc9, 0x76, 0x1b, 0x32, 0x75, 0x92, 0xaa, 0x48, 0x46, 0x63, 0x5c, 0x56, 0x3f, 0x1c, 0x6a, 0x6d, 0xf6, 0x8f, 0xaa, 0xbc, 0xe4, 0x97, 0xaf, 0x4d, 0xc9, 0xa3, 0x64, 0x2b, 0x75, 0xa4, 0xa2, 0x94, 0xd3, 0x08, 0x56, 0x8e, 0x6d, 0x73, 0xc1, 0x1d, 0xb5, 0x67, 0x24, 0x04, 0x2b, 0x55, 0xc3, 0xa2, 0x4a, 0x7b, 0xc7, 0xa1, 0x05, 0x0e, 0x4f, 0x44, 0x8b, 0x6a } -, - /* Signature */ - 129, - { 0x45, 0xd3, 0xa6, 0xae, 0x8f, 0x48, 0x35, 0x5c, 0x01, 0x2b, 0x50, 0x10, 0x79, 0xee, 0x92, 0xaf, 0xfe, 0x3c, 0x9e, 0x60, 0x2e, 0x4a, 0x08, 0x0c, 0xfc, 0x94, 0x72, 0x3a, 0xe9, 0x6d, 0xac, 0x2a, 0x66, 0xe4, 0x55, 0xa4, 0x0e, 0x72, 0x8b, 0x2a, 0x1b, 0x27, 0xe6, 0x22, 0x40, 0x55, 0x4e, 0xc7, 0xc5, 0xc0, 0xad, 0x6a, 0xa0, 0x0c, 0x09, 0x22, 0xe5, 0x3d, 0x7b, 0x12, 0xed, 0x42, 0xc0, 0x87, 0x32, 0x2d, 0x15, 0x36, 0xe4, 0x6b, 0x7d, 0xeb, 0xda, 0x80, 0x95, 0xf5, 0x5d, 0x1e, 0x12, 0xbc, 0x24, 0x42, 0xf4, 0x3b, 0x4d, 0x12, 0x8f, 0xee, 0x23, 0x1d, 0xcd, 0x6f, 0x8c, 0x37, 0xaa, 0x6b, 0xcf, 0x4f, 0xe7, 0xb5, 0xe0, 0xde, 0xa9, 0xc6, 0x70, 0x9d, 0x3d, 0x91, 0xf9, 0xe4, 0x2a, 0x53, 0x16, 0x8a, 0x16, 0xb6, 0xfe, 0x99, 0x7b, 0x5d, 0xfe, 0xba, 0xfb, 0x46, 0xed, 0x9a, 0xea, 0x5c, 0x66 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.10", - /* Message to be signed */ - 157, - { 0x8b, 0x04, 0x3d, 0x90, 0xda, 0xe3, 0x41, 0x66, 0x85, 0xd5, 0x3a, 0x5b, 0x4c, 0x3c, 0xc2, 0x54, 0xcd, 0xa0, 0xcb, 0xd2, 0x3b, 0x4e, 0x40, 0x8d, 0xe8, 0x20, 0xa4, 0xda, 0x7a, 0xde, 0x6d, 0xd9, 0x5d, 0x4e, 0x1a, 0x97, 0xe2, 0x31, 0x2c, 0x3e, 0x84, 0x26, 0x1e, 0xe0, 0xb6, 0xce, 0xfe, 0x60, 0xe6, 0xb0, 0x82, 0xfd, 0x59, 0x65, 0xef, 0xa1, 0x64, 0x8f, 0x4f, 0xae, 0x61, 0x60, 0x5f, 0xe3, 0x55, 0x33, 0x27, 0x00, 0x46, 0x96, 0x05, 0x26, 0x53, 0x47, 0xe6, 0x54, 0x7a, 0xea, 0x77, 0x5b, 0x85, 0x6e, 0x5a, 0x46, 0xc3, 0x41, 0xd2, 0x99, 0x52, 0xbb, 0xea, 0x92, 0x70, 0x49, 0x96, 0x3e, 0x37, 0x40, 0x20, 0x8c, 0xfb, 0x0b, 0x65, 0x28, 0x57, 0xb6, 0xf5, 0x2e, 0x36, 0x6a, 0x17, 0x0b, 0xe3, 0x4f, 0x13, 0xd3, 0x58, 0x46, 0xbd, 0xe6, 0x97, 0x20, 0x46, 0x20, 0x01, 0xb0, 0x9d, 0xd2, 0x68, 0xb8, 0x9b, 0x09, 0x00, 0x31, 0x8e, 0x73, 0x3d, 0xb2, 0x00, 0x9e, 0xfd, 0x9b, 0x51, 0x77, 0x41, 0xe5, 0x10, 0xd3, 0xf3, 0x94, 0xf7, 0xad, 0xb5, 0x45, 0x59, 0xb1, 0x57 } -, - /* Signature */ - 129, - { 0x6b, 0x27, 0x8f, 0x36, 0x2c, 0x29, 0x2e, 0xea, 0x09, 0xb9, 0x0b, 0xf3, 0x53, 0xd1, 0x43, 0xf2, 0xca, 0x09, 0x9f, 0xf8, 0x79, 0x57, 0x34, 0x79, 0xdf, 0x2a, 0xff, 0x9b, 0x25, 0x0d, 0x1c, 0x91, 0x87, 0xc6, 0xa3, 0x34, 0x3e, 0xa1, 0x4c, 0x07, 0x6f, 0x2a, 0x20, 0xc1, 0xa1, 0x9d, 0xb2, 0x6a, 0xad, 0x35, 0x48, 0xec, 0x6f, 0xb3, 0xb2, 0xfa, 0xfc, 0x75, 0x1b, 0x59, 0x08, 0x2d, 0x8b, 0x23, 0xc8, 0x2c, 0x8a, 0x51, 0xf7, 0xfa, 0xf7, 0xa4, 0xd4, 0xa8, 0x23, 0x98, 0xbf, 0xbe, 0xd4, 0x49, 0xbd, 0xe4, 0xee, 0x9d, 0xc8, 0x68, 0x01, 0x60, 0x66, 0x6f, 0xd9, 0xc7, 0x74, 0xc6, 0xaa, 0x57, 0x7b, 0x4e, 0xc5, 0x4c, 0xf0, 0xd5, 0xbd, 0x9e, 0x3d, 0x1a, 0xfa, 0x9c, 0x3b, 0x4b, 0x91, 0x46, 0x76, 0x78, 0xc9, 0xd4, 0xc4, 0xfe, 0x40, 0x0a, 0xa8, 0x57, 0xa3, 0xb0, 0x54, 0x5b, 0xdf, 0x84, 0xa6 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.11", - /* Message to be signed */ - 148, - { 0x3b, 0x28, 0xa6, 0x09, 0x2e, 0x47, 0x08, 0x98, 0xaf, 0x07, 0x0a, 0x08, 0x7c, 0x45, 0x53, 0x18, 0x8d, 0xe6, 0xc3, 0x44, 0xbb, 0x0b, 0x5f, 0xdc, 0x7f, 0x66, 0xfb, 0xc5, 0x2d, 0xc9, 0x3a, 0x8b, 0x92, 0xa3, 0x74, 0x11, 0x20, 0x37, 0xd6, 0xa4, 0x32, 0x86, 0x12, 0x8a, 0xce, 0xf9, 0x5a, 0x35, 0x05, 0xc0, 0xab, 0xb1, 0xaf, 0xa6, 0x2c, 0x48, 0xcb, 0x21, 0x36, 0x07, 0x7f, 0x8a, 0x0e, 0x0e, 0x0b, 0x5a, 0x4e, 0xe9, 0xb2, 0xc7, 0x7d, 0x7a, 0x0c, 0x0b, 0x53, 0xf3, 0x8a, 0x51, 0xcc, 0x3d, 0xb9, 0xb5, 0x83, 0xb3, 0xae, 0xc0, 0x7f, 0x1e, 0x22, 0x4f, 0xcb, 0x3f, 0x1d, 0xad, 0x19, 0x5e, 0x05, 0x86, 0x59, 0xa9, 0xd1, 0x1f, 0x8e, 0xdc, 0x74, 0x44, 0x99, 0x46, 0x86, 0xed, 0x62, 0xc9, 0x75, 0x66, 0xe9, 0xe0, 0x0c, 0xbf, 0x8f, 0x0d, 0xbc, 0x17, 0x16, 0xe6, 0xb7, 0xf0, 0xf8, 0x8f, 0xe8, 0x9a, 0x86, 0x7a, 0x41, 0xd6, 0x43, 0x13, 0x5a, 0xd8, 0xb1, 0x8a, 0xa1, 0x43, 0xe7, 0x37, 0x5d, 0xf1, 0x95, 0x29 } -, - /* Signature */ - 129, - { 0x32, 0x62, 0xfe, 0x17, 0xe4, 0x4e, 0x5e, 0xcc, 0x84, 0x31, 0x70, 0xd3, 0xae, 0x27, 0x51, 0xda, 0x1f, 0x48, 0xd6, 0xe9, 0x61, 0xd8, 0x1e, 0x93, 0x59, 0xb0, 0x98, 0x2c, 0x6d, 0x61, 0x30, 0x8e, 0xba, 0xcf, 0xe2, 0x60, 0x7c, 0x53, 0x8c, 0x17, 0x0c, 0xe0, 0xe7, 0x2a, 0x07, 0xbc, 0x01, 0x48, 0x7b, 0x29, 0x5c, 0x36, 0xb8, 0xe2, 0x2a, 0xfd, 0xf6, 0xe7, 0xfe, 0x39, 0xc0, 0x3a, 0x5c, 0x0c, 0x36, 0x61, 0x06, 0x1f, 0x23, 0xfb, 0xf5, 0x89, 0x0e, 0xad, 0x59, 0xf8, 0x72, 0xc9, 0x46, 0xcc, 0xe0, 0xf8, 0x16, 0xc9, 0xed, 0x3a, 0x2c, 0x1e, 0x11, 0xf8, 0xf7, 0x4d, 0xa1, 0xe9, 0x7a, 0x39, 0x0d, 0x53, 0x4d, 0x78, 0x55, 0x78, 0xa2, 0x45, 0x5f, 0xcd, 0x87, 0x47, 0x83, 0xf4, 0x57, 0x2a, 0x15, 0xf4, 0x93, 0x7d, 0xca, 0x98, 0x09, 0x3f, 0xd0, 0xe9, 0x99, 0x0a, 0xf0, 0x00, 0x52, 0x56, 0xbf } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.12", - /* Message to be signed */ - 52, - { 0x4f, 0xdd, 0x6a, 0x36, 0x31, 0xdd, 0xd4, 0xbc, 0x3c, 0x76, 0x07, 0x19, 0x02, 0xa2, 0x27, 0xfd, 0x5b, 0x36, 0x53, 0xb1, 0xf9, 0x70, 0xf2, 0xb7, 0x67, 0xef, 0x55, 0x4e, 0x1c, 0x75, 0xca, 0xde, 0x81, 0x9d, 0x8d, 0x1f, 0xca, 0x76, 0xbc, 0x10, 0x54, 0x1c, 0xbf, 0x8b, 0x1d, 0x8b, 0x0e, 0x72, 0x55, 0xf9, 0x57, 0x40 } -, - /* Signature */ - 129, - { 0x29, 0xcb, 0xa5, 0xb4, 0x3f, 0xa3, 0x56, 0x57, 0x75, 0x89, 0x34, 0x91, 0xb1, 0x18, 0x57, 0x8b, 0x14, 0xb5, 0xfa, 0x1e, 0xeb, 0xe0, 0xc8, 0x07, 0x59, 0xa6, 0xd1, 0x91, 0xe7, 0xc2, 0x13, 0x1e, 0xe1, 0x0a, 0xc5, 0xb9, 0xb8, 0xae, 0x1a, 0xa7, 0xd6, 0x96, 0xc9, 0x84, 0x88, 0xa3, 0x5c, 0xdf, 0xa2, 0xaa, 0x00, 0x6d, 0x91, 0xbf, 0x7e, 0x05, 0xa5, 0xc1, 0x90, 0x9e, 0xfb, 0x20, 0xda, 0xbc, 0x82, 0x13, 0x3b, 0x62, 0x64, 0xc0, 0x42, 0x18, 0x0c, 0x2c, 0xca, 0x65, 0x45, 0x9f, 0x66, 0xcc, 0x7e, 0xb1, 0xba, 0x75, 0xd1, 0x5d, 0x4f, 0x56, 0xc7, 0x52, 0x8a, 0xab, 0x28, 0x38, 0xe6, 0x79, 0x53, 0x7a, 0x4c, 0x8d, 0xcd, 0x37, 0xd4, 0xb4, 0xca, 0x82, 0x5c, 0xe1, 0x65, 0xfa, 0x4a, 0x97, 0x15, 0x82, 0x44, 0xdc, 0x87, 0xc0, 0x61, 0xfb, 0x12, 0x00, 0x1e, 0x55, 0x33, 0xfb, 0xd4, 0xcc, 0x62 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.13", - /* Message to be signed */ - 169, - { 0x59, 0x0c, 0xd2, 0x30, 0x50, 0xe5, 0x7b, 0x28, 0xd5, 0xc2, 0x18, 0x5e, 0xad, 0x60, 0xb1, 0xe9, 0x52, 0x9f, 0x2b, 0xd5, 0x26, 0x13, 0xeb, 0x03, 0xf6, 0xed, 0x1a, 0xef, 0xa4, 0xa6, 0x72, 0x88, 0xd5, 0xa3, 0xa3, 0x4f, 0xd9, 0x5c, 0xa6, 0x38, 0x94, 0xaf, 0x3a, 0x40, 0xcd, 0x68, 0x87, 0x3a, 0x1f, 0x37, 0xe3, 0x54, 0xd3, 0x04, 0x14, 0x29, 0x7b, 0x19, 0x25, 0x4b, 0xc6, 0xc1, 0xa3, 0xf7, 0xa4, 0x75, 0x20, 0xee, 0xa5, 0x6e, 0xff, 0x77, 0xdb, 0xfd, 0xa6, 0xbd, 0x77, 0x79, 0xd0, 0x2f, 0xd8, 0x16, 0xfc, 0x0e, 0x99, 0x91, 0x9f, 0xe4, 0x39, 0x5e, 0xae, 0xe5, 0xb2, 0xf5, 0xf0, 0x32, 0xcf, 0xc4, 0x33, 0x6f, 0x9c, 0xf9, 0xac, 0xef, 0x74, 0xdb, 0xbf, 0x4c, 0x9a, 0x09, 0x18, 0xda, 0x65, 0x58, 0xb4, 0xb4, 0xe3, 0x20, 0x9b, 0xfc, 0xd7, 0x1d, 0xdd, 0x59, 0x76, 0x07, 0xb6, 0xe2, 0x8c, 0x39, 0x85, 0xdb, 0xf5, 0x2c, 0xa7, 0xd1, 0xd7, 0x51, 0xcb, 0x81, 0x69, 0xc0, 0xb1, 0xb1, 0x3f, 0xf8, 0xb6, 0x5b, 0x73, 0x1e, 0x69, 0xdd, 0x2e, 0xff, 0xe4, 0x4c, 0x63, 0x6f, 0x2b, 0x69, 0x95, 0x35, 0x83, 0x1a, 0xeb, 0x5e, 0x62, 0x90, 0x2f } -, - /* Signature */ - 129, - { 0x67, 0xeb, 0x89, 0x57, 0xce, 0x4c, 0x06, 0xf7, 0x39, 0x1d, 0x00, 0xc7, 0x41, 0x24, 0x53, 0xf4, 0xb6, 0x8b, 0x33, 0x03, 0xa1, 0x29, 0x25, 0x54, 0xe2, 0xa5, 0xfc, 0x72, 0x62, 0xc5, 0x2e, 0x74, 0xbe, 0xd7, 0x0e, 0xc5, 0x8c, 0x89, 0x50, 0xcd, 0xc4, 0x31, 0x5a, 0x8f, 0xb7, 0xc6, 0x80, 0x15, 0x54, 0xcd, 0x35, 0x78, 0x1d, 0x44, 0xfb, 0x5e, 0x57, 0xd6, 0x8d, 0x59, 0xa0, 0x0f, 0x43, 0xb8, 0x6d, 0x53, 0xb8, 0x43, 0x72, 0xd5, 0x56, 0xe5, 0xa4, 0x15, 0x3c, 0xbe, 0x6b, 0x39, 0x7c, 0x4c, 0x9c, 0x68, 0x00, 0x70, 0x5d, 0x2f, 0xc0, 0xc5, 0x48, 0x64, 0x5e, 0x11, 0xb9, 0xd8, 0xd5, 0x12, 0xb2, 0xdd, 0x9b, 0xf5, 0x9f, 0x3d, 0xc5, 0xd1, 0x1c, 0x3c, 0x77, 0x3d, 0x59, 0xcc, 0xbe, 0xd9, 0xe6, 0xbc, 0x14, 0x32, 0x09, 0x10, 0xcd, 0xf8, 0x3b, 0x46, 0x59, 0x01, 0xb7, 0x46, 0xb5, 0x96, 0x74 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.14", - /* Message to be signed */ - 66, - { 0x80, 0x8c, 0xb9, 0x76, 0x13, 0xfd, 0x87, 0x85, 0x35, 0x80, 0x1c, 0x80, 0x08, 0x79, 0x15, 0x10, 0xa5, 0xfe, 0x86, 0x6a, 0xd5, 0xb6, 0x84, 0x3a, 0x6e, 0x00, 0x19, 0xa0, 0xfc, 0xc2, 0x17, 0x76, 0x03, 0x54, 0xf6, 0x0c, 0xc6, 0x99, 0xfb, 0xbe, 0x1a, 0xdf, 0xe8, 0xb0, 0x0e, 0xcd, 0x6a, 0x36, 0xa2, 0xb5, 0xa5, 0xa1, 0xfa, 0xa2, 0x3d, 0x34, 0x38, 0x20, 0x02, 0x4e, 0x3a, 0x31, 0x97, 0xae, 0x67, 0x3c } -, - /* Signature */ - 129, - { 0x1c, 0x53, 0x96, 0x59, 0xf8, 0x72, 0x46, 0x99, 0x16, 0xfb, 0x00, 0x07, 0xef, 0x9e, 0x48, 0x57, 0x4e, 0x96, 0x4e, 0x4c, 0x0e, 0x6a, 0x2f, 0xa7, 0x4b, 0x13, 0x73, 0xfd, 0x60, 0xb6, 0x64, 0xa7, 0x98, 0xac, 0x81, 0x29, 0xc0, 0x8c, 0x12, 0xcd, 0xbf, 0x37, 0x49, 0x75, 0x0b, 0xe1, 0x25, 0x60, 0x2a, 0x71, 0x54, 0x32, 0x67, 0x67, 0x32, 0x7e, 0x92, 0xba, 0x57, 0xb5, 0xe2, 0x89, 0xb5, 0xac, 0x9d, 0x77, 0x71, 0xb4, 0x52, 0x0a, 0x7a, 0x2c, 0xe6, 0x6c, 0x5e, 0xaf, 0x70, 0x4a, 0xfc, 0x5a, 0x19, 0x0f, 0xa6, 0x0b, 0xe1, 0x37, 0x6f, 0x94, 0x3d, 0x2b, 0xaf, 0x70, 0x52, 0x3e, 0x47, 0xc3, 0xde, 0xfc, 0x0a, 0x25, 0xa6, 0x00, 0x18, 0x31, 0xa3, 0x7a, 0xab, 0x0c, 0xf1, 0xf6, 0x48, 0x7b, 0xe3, 0x7f, 0x0e, 0x31, 0xca, 0x7d, 0xb5, 0xac, 0x41, 0xb5, 0x63, 0x09, 0x57, 0x55, 0x93, 0x69, 0xff } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.15", - /* Message to be signed */ - 202, - { 0x57, 0xed, 0xaa, 0x05, 0x66, 0x25, 0x16, 0x86, 0xf6, 0x52, 0x05, 0xef, 0xc6, 0x26, 0x60, 0xe2, 0xc2, 0xe0, 0x4f, 0xa5, 0xea, 0xa3, 0x30, 0x2d, 0xe8, 0x7a, 0x3f, 0x6b, 0x49, 0x1f, 0x7f, 0xa3, 0xac, 0x72, 0x70, 0xcc, 0x76, 0x75, 0x1a, 0x43, 0x69, 0x42, 0xac, 0x76, 0x5e, 0xf5, 0xf4, 0x74, 0x91, 0x62, 0xd7, 0xe7, 0x97, 0x12, 0x6b, 0xcb, 0x8f, 0xda, 0xc1, 0x9c, 0xf1, 0x8d, 0xcc, 0x6e, 0xff, 0x48, 0x59, 0x3c, 0x05, 0xc8, 0x89, 0x3b, 0x59, 0x1a, 0x51, 0x33, 0x2f, 0xa2, 0x6a, 0xb8, 0x63, 0xc5, 0xea, 0xa4, 0xd7, 0x51, 0xe8, 0xd1, 0xb1, 0x9c, 0x58, 0x26, 0x90, 0xb5, 0x41, 0x5e, 0x6a, 0x89, 0xe0, 0x5f, 0x23, 0x1b, 0x33, 0xac, 0x38, 0xc5, 0x3f, 0x95, 0xa2, 0xd5, 0xf9, 0x10, 0x51, 0xc2, 0xec, 0x6d, 0xdb, 0x2b, 0x6d, 0xba, 0x78, 0x9d, 0x55, 0x3a, 0xdb, 0x9f, 0x10, 0xc5, 0x83, 0x59, 0x70, 0x36, 0xd3, 0x48, 0x6f, 0xbb, 0x32, 0x17, 0x2a, 0x1c, 0x11, 0x07, 0x9e, 0x5f, 0x09, 0xaa, 0x29, 0xeb, 0x46, 0x74, 0xc8, 0xd7, 0xbf, 0x5b, 0xbd, 0x6d, 0x05, 0x7e, 0x6b, 0x87, 0xa8, 0xb3, 0xaa, 0xf4, 0x80, 0x86, 0xd7, 0x21, 0xcb, 0xbc, 0x8e, 0xfa, 0xc6, 0x24, 0x4d, 0x32, 0x39, 0xae, 0x18, 0xf1, 0x66, 0x23, 0xfa, 0x52, 0x8e, 0x2e, 0x70, 0xfa, 0x25, 0x65, 0x6a, 0x6a, 0x4a, 0x22, 0x92, 0x95, 0x0f, 0xc9, 0x28, 0xed, 0xb8, 0x1c } -, - /* Signature */ - 129, - { 0x33, 0x73, 0x2f, 0xcc, 0x23, 0x34, 0x2c, 0x58, 0x51, 0x38, 0xb2, 0x5b, 0x17, 0xc8, 0x12, 0xee, 0x3e, 0x9d, 0x3d, 0xa4, 0x1f, 0x6f, 0xfb, 0xcc, 0x16, 0x17, 0xa2, 0xee, 0x75, 0xcc, 0x5b, 0x25, 0x01, 0x25, 0x4f, 0xd1, 0x97, 0x6d, 0x25, 0x88, 0x00, 0xe9, 0x05, 0xd7, 0xe4, 0x4a, 0x0a, 0xb6, 0xfb, 0x4b, 0x8a, 0x88, 0xbb, 0x7b, 0xf9, 0x31, 0x73, 0x95, 0x30, 0x3a, 0xb2, 0xfc, 0xa4, 0x31, 0x28, 0x48, 0x6a, 0x2b, 0xab, 0x36, 0xc7, 0x5e, 0xf6, 0xaa, 0x5e, 0xb3, 0xfc, 0x5b, 0xd5, 0x55, 0xb3, 0xea, 0x79, 0x12, 0x4a, 0xad, 0x78, 0x97, 0xe3, 0xa4, 0x34, 0xde, 0xe7, 0x92, 0x63, 0x71, 0xde, 0x2d, 0x6d, 0x23, 0x7e, 0x89, 0xb0, 0x3b, 0x8d, 0xd7, 0x09, 0x60, 0x58, 0xe2, 0xa4, 0xb3, 0x2c, 0xb5, 0x57, 0xc7, 0xad, 0xa2, 0x98, 0xa7, 0xe2, 0xed, 0xd3, 0xa3, 0xa3, 0xb5, 0x29, 0xb4, 0xd2 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.16", - /* Message to be signed */ - 99, - { 0x08, 0x33, 0x76, 0xbb, 0x82, 0x21, 0x2b, 0xf8, 0x80, 0xbe, 0x12, 0x85, 0x65, 0x3a, 0xf2, 0xca, 0xd6, 0x25, 0xc5, 0x2e, 0x94, 0xe3, 0x21, 0x43, 0x68, 0x77, 0xf7, 0x25, 0xa8, 0x3b, 0xbd, 0x43, 0xf4, 0x48, 0x6d, 0x89, 0x6c, 0xf6, 0x7e, 0x31, 0x39, 0x1b, 0x87, 0x06, 0xf8, 0xc0, 0xf8, 0xf4, 0xbb, 0x1d, 0xdb, 0xa9, 0x5c, 0x33, 0x2f, 0x03, 0x4f, 0x39, 0x09, 0x11, 0x3f, 0x65, 0x56, 0x92, 0x60, 0xa2, 0xe4, 0xf1, 0x04, 0x06, 0x65, 0x7c, 0x99, 0xfa, 0xff, 0x00, 0x1f, 0xe1, 0x6e, 0xbb, 0x89, 0x6e, 0x9e, 0x18, 0x11, 0x5a, 0xf1, 0xd4, 0x98, 0x6c, 0x85, 0x79, 0xab, 0x56, 0x52, 0xcc, 0xca, 0x47, 0x74 } -, - /* Signature */ - 129, - { 0x2a, 0xf4, 0x6c, 0x00, 0xd1, 0xd9, 0x15, 0x94, 0x1e, 0x21, 0x2a, 0x7b, 0x8d, 0x81, 0x05, 0xee, 0x0f, 0x0e, 0xc4, 0x80, 0xff, 0xfb, 0xb4, 0xf1, 0x3b, 0xf2, 0x8d, 0x73, 0xe2, 0xb3, 0x19, 0xb9, 0x84, 0xa7, 0xb7, 0xc8, 0x36, 0x7a, 0xdc, 0xa7, 0xab, 0x12, 0xaa, 0xf5, 0x3a, 0xcb, 0x98, 0xd0, 0xcb, 0x54, 0xee, 0x34, 0x20, 0x4c, 0x90, 0x8e, 0x60, 0xc7, 0xc7, 0x9e, 0xfb, 0x42, 0xc3, 0x11, 0x4a, 0x02, 0x58, 0x9e, 0x1a, 0xe6, 0xaf, 0xb5, 0x97, 0x53, 0x54, 0x57, 0x8c, 0x14, 0x35, 0xec, 0xc8, 0x9c, 0x11, 0x6e, 0x90, 0x26, 0xb6, 0xbc, 0x88, 0x9e, 0xe2, 0x88, 0xae, 0x4d, 0xaf, 0x03, 0x47, 0xcc, 0xce, 0xfc, 0x5d, 0xfd, 0x1e, 0xf8, 0x3c, 0xb8, 0x68, 0x52, 0xee, 0xff, 0xd8, 0x40, 0x98, 0x59, 0x9b, 0x72, 0x5b, 0xf6, 0x02, 0xee, 0x62, 0x0b, 0xdf, 0x44, 0xaf, 0xbd, 0x84, 0xc0, 0xcd } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.17", - /* Message to be signed */ - 17, - { 0x8c, 0x87, 0x4c, 0xd0, 0xce, 0x33, 0x51, 0x39, 0xc0, 0x8d, 0x76, 0x0b, 0x82, 0x5e, 0xb9, 0x90, 0x5d } -, - /* Signature */ - 129, - { 0x66, 0x9a, 0x8a, 0xd7, 0xcb, 0x81, 0xef, 0x21, 0x87, 0xf5, 0xa8, 0x56, 0x47, 0x68, 0x4b, 0x72, 0x48, 0x4a, 0xff, 0x27, 0x9f, 0x0a, 0xf3, 0x54, 0x35, 0x86, 0x7c, 0xc2, 0xb0, 0x43, 0x33, 0xa1, 0x96, 0xec, 0xa6, 0xcf, 0x44, 0xa9, 0x7a, 0x1b, 0xd3, 0x9d, 0x0f, 0x6a, 0x0f, 0xf9, 0x59, 0x57, 0x02, 0x83, 0x5b, 0xc8, 0x0a, 0x72, 0xd7, 0x14, 0x04, 0xef, 0x3f, 0x46, 0xfa, 0x3b, 0x0d, 0x20, 0xe8, 0x6d, 0x7a, 0x1d, 0x5f, 0x7e, 0xfc, 0x3f, 0x3b, 0x8e, 0x8a, 0x7e, 0x37, 0xe8, 0x7e, 0x27, 0xa9, 0x9f, 0xeb, 0xa9, 0x6a, 0xd8, 0x13, 0x20, 0xbe, 0x8f, 0xff, 0x78, 0x55, 0x7d, 0x07, 0xbf, 0xba, 0xe2, 0x16, 0x03, 0xa1, 0x36, 0x8c, 0xaf, 0xa5, 0xae, 0x1d, 0x1b, 0x63, 0x0a, 0xa2, 0x1f, 0xf2, 0x0e, 0x45, 0x85, 0x65, 0x0a, 0x77, 0x3d, 0x7e, 0x2f, 0x5e, 0x7f, 0x51, 0x72, 0x97, 0x19, 0x3c } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.18", - /* Message to be signed */ - 102, - { 0xcb, 0x3e, 0x61, 0x21, 0xd3, 0x8b, 0x7d, 0x97, 0xe1, 0x8b, 0xa1, 0x5c, 0x49, 0x3d, 0x1a, 0xc3, 0x2e, 0x9d, 0x2e, 0xf4, 0xe3, 0xbd, 0x16, 0xdf, 0x9c, 0x67, 0xe4, 0xa1, 0x96, 0xe9, 0x24, 0x7a, 0x8d, 0x0c, 0x24, 0xb2, 0x1c, 0x4a, 0xb2, 0x3e, 0x77, 0xd6, 0xdb, 0x11, 0x7d, 0x59, 0x11, 0x95, 0xbb, 0xaf, 0x44, 0x66, 0x82, 0x5f, 0x63, 0x97, 0x8f, 0x11, 0x40, 0x85, 0x28, 0x1b, 0x79, 0xae, 0xa3, 0x7e, 0x32, 0xc6, 0xb3, 0x6c, 0x1e, 0x9d, 0xdd, 0x4a, 0xd1, 0x23, 0x6e, 0x97, 0xfd, 0x42, 0x7b, 0x4d, 0x97, 0x6e, 0x07, 0x64, 0x9d, 0xca, 0x4f, 0x33, 0xa8, 0x9c, 0x46, 0xfb, 0x8c, 0x00, 0xb4, 0x26, 0x7b, 0x14, 0x47, 0x04 } -, - /* Signature */ - 129, - { 0x56, 0x84, 0x17, 0x80, 0x3a, 0x40, 0x0e, 0x9d, 0x05, 0x0a, 0x43, 0x20, 0xae, 0x7b, 0x7d, 0x8d, 0x24, 0x8e, 0x16, 0x36, 0x50, 0x86, 0x9d, 0x9f, 0xdd, 0x10, 0x0c, 0xc1, 0xa6, 0xb9, 0xbc, 0x29, 0x1c, 0x3f, 0x23, 0xf1, 0x25, 0x60, 0x03, 0x16, 0x4f, 0x61, 0x9d, 0xbc, 0x78, 0x63, 0x5e, 0xbd, 0xf0, 0x89, 0x49, 0x0a, 0xfa, 0x5a, 0xa0, 0x0b, 0x6f, 0x97, 0xeb, 0x06, 0x36, 0xc3, 0xbb, 0xa8, 0x9d, 0x86, 0x36, 0x0a, 0xfe, 0x26, 0x00, 0x43, 0xd8, 0x61, 0xa7, 0x4f, 0x64, 0xc7, 0x1d, 0x9c, 0xbd, 0x31, 0xea, 0xe2, 0x39, 0x3a, 0x1a, 0xf1, 0x56, 0x1f, 0x1a, 0xb9, 0x2c, 0xaa, 0x76, 0xdd, 0x1e, 0x76, 0xab, 0x23, 0x33, 0x09, 0x8c, 0x83, 0xc2, 0xd9, 0x9f, 0xae, 0x82, 0x73, 0x98, 0x75, 0x80, 0x05, 0xc1, 0x76, 0xcb, 0xc4, 0xa2, 0xe2, 0x2e, 0xfa, 0x0e, 0x6c, 0x12, 0xf4, 0xe3, 0x42, 0x81 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.19", - /* Message to be signed */ - 81, - { 0x21, 0x9a, 0x2f, 0x8d, 0x0b, 0x00, 0x0a, 0xed, 0xb5, 0xf1, 0x85, 0x45, 0x5e, 0xd3, 0xea, 0x09, 0x4c, 0x45, 0x42, 0x6b, 0x28, 0x5b, 0xab, 0x4a, 0x07, 0xcf, 0x3d, 0x0a, 0x29, 0x06, 0xf3, 0xe2, 0x03, 0x18, 0x4c, 0x2d, 0x3d, 0x81, 0xa8, 0x09, 0xb8, 0x9c, 0x9f, 0xc4, 0x8b, 0xc9, 0xaf, 0x9a, 0xb3, 0x2f, 0x84, 0xf1, 0x5d, 0x81, 0x38, 0x9c, 0x4e, 0xdb, 0x0a, 0xc6, 0x8a, 0xd0, 0x95, 0x02, 0xe3, 0xf3, 0x0c, 0x7c, 0xf6, 0x45, 0x10, 0x29, 0x54, 0xb2, 0x97, 0xc8, 0x66, 0x14, 0x66, 0xfc, 0x10 } -, - /* Signature */ - 129, - { 0x03, 0x83, 0x5d, 0x90, 0x57, 0xe2, 0xb8, 0x21, 0xdc, 0x4c, 0x6e, 0xac, 0xa3, 0xf4, 0x15, 0x6a, 0x56, 0x55, 0x0b, 0x6f, 0x9d, 0x74, 0x00, 0xfc, 0x5c, 0x51, 0x95, 0xa4, 0xae, 0xe4, 0x71, 0x7d, 0xf3, 0x29, 0x29, 0x12, 0x2b, 0x43, 0x27, 0x3a, 0x07, 0x9a, 0x24, 0xf9, 0x9d, 0xd9, 0xe7, 0xc3, 0x40, 0x56, 0xae, 0xa4, 0xfc, 0x4e, 0x45, 0x7d, 0x83, 0x14, 0xef, 0x34, 0x42, 0x7f, 0x8e, 0x20, 0x4b, 0x81, 0xbb, 0x49, 0x03, 0xfb, 0x3e, 0x77, 0x9e, 0x38, 0x9e, 0x41, 0x33, 0x90, 0x68, 0xc1, 0x57, 0xd9, 0xb0, 0x9f, 0x2c, 0x5e, 0x99, 0xcc, 0x54, 0xe6, 0xef, 0x86, 0xee, 0xac, 0x0e, 0x19, 0xf4, 0x4e, 0x33, 0xe7, 0x07, 0xc4, 0x26, 0x1a, 0x0a, 0x83, 0xce, 0xb4, 0x22, 0xf2, 0xe0, 0x6b, 0xcc, 0xae, 0x3b, 0x8b, 0xba, 0x42, 0x8d, 0x75, 0x57, 0x15, 0x2f, 0x40, 0x84, 0x6e, 0xc0, 0x11, 0x34 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 13.20", - /* Message to be signed */ - 97, - { 0xe3, 0x9c, 0xa4, 0x0d, 0x2e, 0x9d, 0x03, 0xae, 0x05, 0x96, 0xf6, 0x0e, 0xb8, 0xf6, 0x09, 0x99, 0x30, 0x85, 0xa5, 0xdb, 0x15, 0x6b, 0x0d, 0x50, 0x98, 0xfe, 0x5f, 0xaa, 0xc5, 0x5f, 0x70, 0x99, 0x3f, 0xe1, 0x76, 0xd2, 0xd0, 0xc0, 0x38, 0xb8, 0x60, 0xbb, 0xf9, 0xa6, 0x62, 0x43, 0xf5, 0xe7, 0x8e, 0x6c, 0xbe, 0x52, 0x6e, 0xcf, 0x25, 0x12, 0x8d, 0xae, 0x31, 0x96, 0x56, 0xcc, 0x32, 0x1e, 0xe8, 0x0a, 0x50, 0x53, 0x14, 0x90, 0xc9, 0xa6, 0x24, 0x3f, 0xbd, 0xb0, 0xc5, 0xeb, 0x4c, 0xd6, 0x42, 0xd2, 0x61, 0x15, 0x05, 0xae, 0x10, 0x84, 0x97, 0x57, 0x38, 0xad, 0x84, 0x62, 0x1d, 0x67, 0xf5 } -, - /* Signature */ - 129, - { 0x4f, 0xcf, 0xa5, 0x73, 0x97, 0xf2, 0x7e, 0xe0, 0xf8, 0xae, 0x75, 0xa0, 0xa5, 0x4d, 0x54, 0xb0, 0xc5, 0x1b, 0x95, 0x7e, 0xe6, 0x3b, 0xf7, 0x90, 0x1b, 0x60, 0x55, 0xcc, 0x39, 0x87, 0xc3, 0x2d, 0xf7, 0x22, 0x0e, 0x16, 0x6a, 0x71, 0x60, 0x6a, 0xbc, 0x78, 0xf9, 0x11, 0x07, 0xf9, 0x74, 0xdf, 0xf7, 0xd6, 0x25, 0x7c, 0x25, 0x6d, 0xc6, 0xed, 0x7a, 0x69, 0xc3, 0xc9, 0x9f, 0x9f, 0x89, 0xab, 0xb5, 0x8f, 0xe5, 0x89, 0xb7, 0xee, 0x7c, 0xad, 0x0f, 0x48, 0xc1, 0x60, 0x10, 0xd0, 0x46, 0xa9, 0xc4, 0xe0, 0x04, 0xbb, 0xe1, 0xa8, 0x29, 0x79, 0x68, 0xd4, 0x0b, 0xc7, 0x06, 0x82, 0xeb, 0xae, 0xa4, 0x48, 0x52, 0x5d, 0xbe, 0xe1, 0x6b, 0x03, 0xbd, 0x0b, 0x65, 0x26, 0xd0, 0x98, 0xd0, 0x9b, 0x6b, 0xad, 0x9a, 0xba, 0x03, 0x93, 0x05, 0xe2, 0xab, 0x79, 0x69, 0x02, 0x08, 0x65, 0x80, 0xcc, 0xf0 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 14: A 1536-bit RSA key pair", -{ - /* Modulus */ - 192, - { 0xd8, 0x70, 0xa7, 0x76, 0xcd, 0x13, 0xed, 0x44, 0x3d, 0xf3, 0x99, 0x08, 0xbe, 0xe2, 0xca, 0xd7, 0x3c, 0x48, 0x5f, 0xd9, 0xbf, 0x06, 0x32, 0x13, 0x22, 0x88, 0x7f, 0xbe, 0x65, 0x5c, 0x08, 0xcb, 0xe4, 0xc8, 0xf6, 0x3e, 0x25, 0x4f, 0xc9, 0x1c, 0x75, 0xf0, 0x55, 0x7d, 0x90, 0x1d, 0x43, 0x5b, 0x0e, 0x8d, 0xed, 0x82, 0xd4, 0x91, 0x73, 0x41, 0x4d, 0x29, 0x86, 0x03, 0x24, 0xe4, 0x6c, 0x1b, 0x03, 0x0d, 0xfe, 0xaa, 0x29, 0xd8, 0x0f, 0x98, 0x98, 0xc2, 0xc5, 0xe1, 0x01, 0xcb, 0xf6, 0xda, 0xa0, 0x62, 0x89, 0x78, 0xd4, 0x15, 0xb5, 0x02, 0xde, 0xa2, 0x6d, 0xe6, 0x56, 0x1c, 0x79, 0xab, 0x06, 0x5c, 0x6d, 0xca, 0x6a, 0xbc, 0x4d, 0x4d, 0x4d, 0x5e, 0x9f, 0x5c, 0x74, 0xcb, 0x3e, 0x6a, 0x5a, 0xf7, 0x1d, 0x1f, 0x90, 0xfa, 0x5e, 0xaa, 0x1b, 0xe0, 0xca, 0x94, 0x7a, 0x70, 0xa3, 0x9e, 0xfd, 0x31, 0x5c, 0x4d, 0xf2, 0x1a, 0x1a, 0x82, 0x1c, 0xaa, 0xff, 0x8d, 0xcb, 0xad, 0x13, 0xb2, 0x9c, 0x7e, 0x82, 0xaa, 0xd5, 0x3c, 0x64, 0xf5, 0x82, 0xec, 0x9e, 0xc3, 0x1e, 0x6b, 0xde, 0x82, 0xea, 0x5a, 0x5f, 0x4c, 0xcc, 0xf0, 0xc4, 0x57, 0xb8, 0x88, 0xf1, 0x55, 0x0c, 0x4f, 0xf8, 0xe1, 0xc1, 0x78, 0xa7, 0x6a, 0x46, 0xc1, 0x96, 0xf4, 0xbe, 0xf5, 0x9e, 0x61, 0xdd, 0x94, 0x4e, 0x47 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 192, - { 0x05, 0x88, 0x8f, 0xc7, 0x7a, 0x43, 0xbd, 0xa7, 0xa6, 0x7b, 0xd1, 0x58, 0x47, 0x65, 0x0d, 0xf1, 0x85, 0xc1, 0x85, 0xed, 0xcf, 0xb3, 0xed, 0x58, 0xce, 0xe3, 0xb5, 0x7c, 0x5d, 0x24, 0x06, 0xb7, 0x8b, 0xc0, 0x55, 0x87, 0x4e, 0x35, 0xe5, 0x7a, 0xdc, 0x4b, 0x0a, 0x2c, 0x7d, 0x20, 0x3a, 0x66, 0x1c, 0x0f, 0xa5, 0xd8, 0x57, 0xed, 0xe6, 0x07, 0xef, 0xdc, 0x95, 0x68, 0x04, 0x2b, 0xf0, 0xd5, 0x99, 0xf4, 0xe4, 0x23, 0x5e, 0x91, 0x7f, 0x08, 0x94, 0x33, 0x3a, 0x92, 0xdf, 0x94, 0x62, 0xd9, 0xc1, 0x0a, 0xf3, 0xdf, 0xca, 0x70, 0x49, 0xa1, 0xea, 0xa6, 0x35, 0x70, 0x13, 0x98, 0x83, 0xc5, 0xbe, 0xfe, 0xbe, 0xe4, 0xe2, 0x21, 0x89, 0x43, 0xd3, 0x0f, 0xc6, 0x45, 0xff, 0xe8, 0xb9, 0x14, 0xd2, 0x18, 0xdd, 0x58, 0x96, 0x0a, 0xad, 0xc1, 0x21, 0x71, 0x5b, 0xce, 0x5c, 0xcd, 0xde, 0x4a, 0x2c, 0x73, 0xa8, 0xd9, 0xd8, 0x6a, 0x4e, 0xb6, 0xe4, 0x55, 0xdc, 0x92, 0x4f, 0xd7, 0x4a, 0x0b, 0x1f, 0x75, 0x69, 0x1c, 0x28, 0x1b, 0xae, 0x91, 0x4d, 0x69, 0x9e, 0xe2, 0x59, 0xd8, 0x5c, 0x5f, 0xb5, 0xdd, 0x99, 0x9e, 0xbe, 0xf9, 0xb7, 0x0a, 0x4b, 0xd9, 0x4a, 0xa4, 0xfa, 0xfa, 0xe2, 0x6c, 0xa7, 0x84, 0xd3, 0x2f, 0xd4, 0xe0, 0x77, 0xdb, 0xb6, 0xea, 0x69, 0x3b, 0xcd, 0x6d, 0x27, 0xd5 } -, - /* Prime 1 */ - 96, - { 0xff, 0x8e, 0xf1, 0xe7, 0x4c, 0x44, 0x5a, 0x5c, 0xc8, 0x97, 0x3a, 0x81, 0x9c, 0x75, 0x45, 0x49, 0x12, 0x35, 0x72, 0x0c, 0xf9, 0xeb, 0x83, 0xf1, 0x81, 0x13, 0x3c, 0x78, 0xa1, 0x4d, 0xcc, 0x4c, 0xe5, 0xe7, 0x75, 0xbe, 0x3e, 0x0c, 0x46, 0xed, 0x2f, 0x21, 0x9a, 0xb8, 0x8d, 0x87, 0x77, 0xad, 0x6e, 0xcb, 0xe4, 0x0c, 0xf9, 0x18, 0x76, 0x4d, 0x7e, 0x37, 0xc6, 0x68, 0x35, 0x91, 0xe7, 0xaa, 0xa1, 0x3b, 0x24, 0x4b, 0x7f, 0xcc, 0x0e, 0xb6, 0xdf, 0xd7, 0x6a, 0x11, 0x5f, 0x30, 0xed, 0x2d, 0x63, 0x68, 0xc8, 0xea, 0x78, 0x0a, 0x21, 0x1c, 0x0a, 0xc9, 0xc0, 0x72, 0x5d, 0xfa, 0xb0, 0x8d } -, - /* Prime 2 */ - 96, - { 0xd8, 0xd0, 0x67, 0x64, 0xc1, 0xf7, 0x64, 0x54, 0xc6, 0x8a, 0x3a, 0x08, 0x1e, 0x95, 0xd7, 0x47, 0xc2, 0x94, 0x11, 0xad, 0xc4, 0x03, 0xa7, 0xcb, 0x71, 0xb4, 0x3a, 0xf5, 0x05, 0xca, 0xbe, 0x41, 0xb4, 0x9c, 0x97, 0x1c, 0x13, 0xad, 0x65, 0x63, 0xb8, 0xc9, 0x0b, 0x93, 0xb5, 0x89, 0x79, 0xbb, 0x74, 0xf8, 0x20, 0xef, 0xb8, 0xde, 0xd8, 0x1f, 0x46, 0x30, 0x54, 0xa7, 0x7f, 0xb3, 0x0b, 0xb0, 0x99, 0x98, 0x51, 0xa4, 0x3c, 0xcd, 0x01, 0x69, 0x18, 0x51, 0x31, 0xf7, 0x43, 0x1b, 0x02, 0xe9, 0xc6, 0xb9, 0xf8, 0x38, 0x71, 0xd9, 0xcd, 0x5e, 0x0c, 0x3c, 0x58, 0x70, 0xcf, 0x97, 0x97, 0x23 } -, - /* Prime exponent 1 */ - 96, - { 0xe8, 0xd6, 0x15, 0xf4, 0x04, 0x7a, 0xaa, 0x51, 0xaa, 0xb8, 0x8e, 0x27, 0x94, 0xa3, 0x0b, 0xd3, 0x3d, 0x71, 0xd0, 0x4d, 0x9e, 0x4e, 0x43, 0xd2, 0x7f, 0x25, 0x45, 0x8d, 0x2a, 0x79, 0xb5, 0x4f, 0xc2, 0x8f, 0x95, 0xa9, 0x14, 0xe3, 0x1e, 0xa3, 0xee, 0xb3, 0x11, 0x42, 0x60, 0x40, 0x32, 0x7b, 0xa3, 0x5c, 0xc4, 0x94, 0x45, 0x47, 0x52, 0x51, 0xdc, 0x53, 0x78, 0xc3, 0x6d, 0x3b, 0x57, 0xf5, 0x10, 0x1c, 0xd0, 0x3e, 0xb1, 0x5a, 0xfb, 0x75, 0x06, 0x90, 0x3f, 0x25, 0x40, 0xb3, 0x55, 0x04, 0x6b, 0x74, 0x06, 0xca, 0x09, 0x40, 0x41, 0x56, 0x49, 0x45, 0xf3, 0xbe, 0xbf, 0x7d, 0x2d, 0xe9 } -, - /* Prime exponent 2 */ - 96, - { 0x73, 0x5d, 0xb1, 0x26, 0x73, 0xef, 0x67, 0x7b, 0x94, 0x89, 0x48, 0x87, 0xb9, 0x7e, 0x91, 0xa6, 0xa5, 0x6a, 0x94, 0x5d, 0x99, 0xc7, 0x38, 0x29, 0x90, 0xbf, 0x0e, 0x00, 0x02, 0xac, 0xf6, 0xbf, 0x8f, 0x93, 0x22, 0xf4, 0xd5, 0xa3, 0x96, 0x27, 0x91, 0xd3, 0xa8, 0x4d, 0x58, 0x73, 0x66, 0x4a, 0xd0, 0xda, 0x96, 0xeb, 0xf7, 0xba, 0xdb, 0xd5, 0x08, 0x4b, 0xff, 0x3f, 0x81, 0x3b, 0x8c, 0x24, 0xd4, 0x15, 0xb0, 0x9b, 0x6b, 0x9e, 0xc9, 0xf9, 0x59, 0xef, 0x1a, 0x5f, 0x2f, 0x5d, 0xd8, 0x16, 0xfc, 0x9f, 0x47, 0xed, 0x00, 0xe7, 0x9b, 0xd7, 0x47, 0x3b, 0x74, 0xf3, 0xd2, 0x02, 0x1f, 0x71 } -, - /* Coefficient */ - 96, - { 0x10, 0x62, 0x18, 0xaf, 0x97, 0x1d, 0x92, 0x95, 0x91, 0x59, 0x90, 0xa4, 0xed, 0x3e, 0x09, 0xd3, 0x63, 0xdb, 0x33, 0x06, 0xb0, 0x90, 0xa1, 0x33, 0xeb, 0xd7, 0x54, 0xe2, 0xbd, 0x77, 0x6b, 0x25, 0x85, 0x99, 0x9d, 0x4f, 0x88, 0x43, 0x03, 0x0a, 0xc7, 0x0c, 0x0f, 0xf5, 0xde, 0x52, 0x12, 0x67, 0x22, 0x34, 0xc0, 0x07, 0xce, 0x74, 0x56, 0x4c, 0x79, 0x1e, 0xdc, 0xd5, 0x76, 0xf9, 0x68, 0x44, 0x04, 0x8c, 0xfa, 0x66, 0x36, 0x46, 0xb8, 0xfd, 0x80, 0xc7, 0x51, 0x26, 0xb2, 0x26, 0x6e, 0x48, 0xf1, 0xfa, 0xa7, 0x05, 0x44, 0xad, 0x42, 0x04, 0xfd, 0x61, 0x56, 0x29, 0x2e, 0x51, 0x6e, 0x13 } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 14.1", - /* Message to be signed */ - 135, - { 0xf7, 0xa3, 0xc6, 0x7e, 0x92, 0xa7, 0x87, 0xf3, 0x5d, 0xcc, 0x47, 0xae, 0xd7, 0xd6, 0xb6, 0x19, 0x29, 0x67, 0xbd, 0xfd, 0x00, 0xa6, 0xac, 0xbf, 0x6f, 0x7e, 0xfe, 0x46, 0xd3, 0xac, 0xae, 0xd9, 0x78, 0x8a, 0xa4, 0xf1, 0xdb, 0x18, 0x44, 0x02, 0x24, 0x9f, 0x9a, 0xce, 0xfc, 0x1c, 0x7d, 0xfb, 0x1e, 0x69, 0x0d, 0x24, 0x73, 0x8d, 0xe8, 0x6f, 0xa5, 0xb5, 0x25, 0x0f, 0x97, 0x9e, 0xbd, 0x8f, 0x77, 0x8e, 0xec, 0x0d, 0x7f, 0xcf, 0x73, 0x1f, 0xa2, 0x25, 0x08, 0x6c, 0x86, 0x65, 0x64, 0xed, 0x3e, 0xb1, 0x54, 0xdd, 0x45, 0x8d, 0x05, 0x00, 0x28, 0x2f, 0x86, 0x80, 0x48, 0x87, 0xd4, 0x43, 0x5e, 0xda, 0x9a, 0x44, 0x36, 0xa8, 0xe9, 0x23, 0xa2, 0x0c, 0xb4, 0xb4, 0xd0, 0xe8, 0x1c, 0x91, 0x11, 0x4b, 0xdc, 0x06, 0x82, 0x27, 0x8e, 0xc2, 0x58, 0x86, 0x07, 0x99, 0xb5, 0x9c, 0x94, 0x36, 0xf4, 0x3a, 0x53, 0xca, 0xb4, 0xc4, 0xcd } -, - /* Signature */ - 192, - { 0x09, 0xd1, 0x43, 0x5b, 0xf5, 0xa9, 0xc1, 0x72, 0x03, 0xd5, 0x37, 0xfe, 0x57, 0xdf, 0x98, 0x7b, 0x7a, 0x51, 0xf3, 0x4b, 0x2a, 0x14, 0x09, 0x7e, 0x06, 0xa0, 0xde, 0x56, 0x3b, 0xe7, 0xd6, 0x4b, 0x4e, 0xa3, 0x79, 0x73, 0xb4, 0xfe, 0x99, 0x73, 0xa6, 0x6a, 0x3f, 0x31, 0xba, 0x8e, 0x07, 0xe9, 0x11, 0x7b, 0x6a, 0x1e, 0xe7, 0x09, 0x61, 0x33, 0x7b, 0x4d, 0x2b, 0x0d, 0xf5, 0x98, 0x10, 0xb6, 0x24, 0x08, 0x51, 0x18, 0xbd, 0xa7, 0x0a, 0xc7, 0x4a, 0xe4, 0x3e, 0x2f, 0xbc, 0xf8, 0x92, 0x27, 0x63, 0x03, 0x23, 0xda, 0x68, 0x30, 0xf5, 0xb1, 0xa2, 0xb9, 0x54, 0xf1, 0xb1, 0x5a, 0xea, 0x07, 0x54, 0xdf, 0x2c, 0x51, 0x18, 0x57, 0x95, 0x16, 0xe8, 0x77, 0xcc, 0xb0, 0xb1, 0x28, 0x6c, 0x57, 0x24, 0x65, 0x5e, 0xf8, 0xd2, 0x91, 0x85, 0x66, 0x6f, 0x6e, 0x9b, 0xd3, 0x2a, 0x6b, 0xd9, 0xce, 0x9e, 0x1e, 0xf9, 0x47, 0x29, 0xfc, 0x67, 0xd6, 0xa3, 0x0e, 0x64, 0x56, 0x0e, 0xcf, 0x78, 0xbf, 0x8e, 0x1b, 0x2b, 0x40, 0xe5, 0x06, 0x05, 0xe2, 0x5a, 0xe8, 0x0c, 0x38, 0x67, 0x64, 0xae, 0xd1, 0x1a, 0x0e, 0x71, 0x44, 0x90, 0x49, 0xc9, 0x39, 0xb2, 0x96, 0x2f, 0x6c, 0x24, 0x17, 0xa3, 0x58, 0xcd, 0xc8, 0x10, 0x6b, 0x12, 0xb1, 0xa5, 0x58, 0x76, 0x39, 0x43, 0x8a, 0xf1, 0xa6, 0x8d, 0x32 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 14.2", - /* Message to be signed */ - 131, - { 0x2a, 0x13, 0x30, 0x03, 0xab, 0x67, 0xcd, 0xd2, 0xe8, 0x3b, 0x44, 0xe9, 0xe9, 0xdc, 0x77, 0x7d, 0xe0, 0x1f, 0x4d, 0x23, 0x3d, 0x22, 0xe7, 0xd2, 0xb4, 0x46, 0x7f, 0x04, 0x81, 0x2a, 0x3a, 0xeb, 0xff, 0xb1, 0x0a, 0x09, 0x24, 0x54, 0xe3, 0x3b, 0x9e, 0x70, 0x28, 0x24, 0x93, 0x28, 0x74, 0x7e, 0xa1, 0x4a, 0x11, 0xc7, 0x98, 0xac, 0x2e, 0x14, 0x6e, 0x4e, 0x49, 0x65, 0x9b, 0xa8, 0x60, 0x67, 0xdb, 0x64, 0xe9, 0xbd, 0x80, 0xa7, 0x02, 0x1a, 0xab, 0xcc, 0x22, 0x85, 0x6e, 0x81, 0x01, 0x40, 0xc2, 0x0f, 0xd8, 0xc6, 0x52, 0x7b, 0xad, 0xbb, 0xd9, 0xfa, 0x59, 0x53, 0xfa, 0x77, 0xe6, 0x85, 0x87, 0x00, 0xbe, 0xb6, 0xc7, 0x4d, 0x5a, 0x46, 0x3c, 0x9d, 0xa8, 0x61, 0x13, 0x3b, 0xaa, 0x5b, 0xd6, 0xa5, 0x99, 0x80, 0x7a, 0xe9, 0x16, 0x2e, 0x3a, 0xf3, 0xa3, 0x48, 0xd0, 0x4a, 0x4e, 0xdd, 0x2f, 0xfb, 0xab } -, - /* Signature */ - 192, - { 0x35, 0xe6, 0x66, 0xcf, 0xb8, 0x7c, 0x04, 0x88, 0xa8, 0x6f, 0xdf, 0xed, 0x5f, 0x9d, 0xea, 0xed, 0xbc, 0x46, 0x74, 0x17, 0x1c, 0x31, 0x84, 0x59, 0xac, 0xaa, 0xaa, 0x20, 0xe1, 0xca, 0xd7, 0xc5, 0x86, 0x04, 0x14, 0x0a, 0x80, 0xff, 0x7f, 0x56, 0x5b, 0xfb, 0xc8, 0x6e, 0x90, 0x32, 0x8d, 0x4c, 0x72, 0x9b, 0x91, 0xbf, 0x72, 0xa9, 0x8d, 0xb7, 0x01, 0xc1, 0xbe, 0x63, 0x8a, 0x6e, 0x8f, 0x2e, 0x46, 0x8f, 0x20, 0x39, 0x24, 0x70, 0xc7, 0xc5, 0xc3, 0x44, 0x42, 0xd5, 0x1b, 0x1b, 0x15, 0x5f, 0xb4, 0x64, 0xb8, 0xa5, 0x56, 0xf4, 0xa1, 0x70, 0xc0, 0x23, 0x01, 0xfe, 0xd0, 0xd1, 0xaa, 0x92, 0xaa, 0xfd, 0xeb, 0xc3, 0xf1, 0x8e, 0xa8, 0xb4, 0xd7, 0x1e, 0x24, 0x5c, 0x25, 0x26, 0xf6, 0xfe, 0x66, 0x5d, 0xe4, 0x83, 0x85, 0xf4, 0x6c, 0xe1, 0xbf, 0x33, 0x12, 0xfa, 0x89, 0x28, 0x09, 0x8e, 0xd3, 0x31, 0x2b, 0x61, 0x11, 0x6c, 0xa7, 0xe4, 0x23, 0x20, 0x4e, 0xf0, 0x8b, 0xd2, 0xdf, 0x3a, 0xd7, 0xbb, 0xc8, 0x50, 0x09, 0x8c, 0xb0, 0x26, 0x83, 0x26, 0x66, 0x25, 0xbb, 0xd9, 0x59, 0x82, 0x51, 0x35, 0xa4, 0x5f, 0x03, 0x82, 0x9d, 0x09, 0x6f, 0xed, 0x18, 0xb2, 0x0b, 0xaa, 0x3f, 0x9d, 0x44, 0xb0, 0x07, 0xaa, 0x24, 0x1f, 0x92, 0xf8, 0x88, 0x60, 0x55, 0xd9, 0x8e, 0x0e, 0x07, 0x04 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.3", - /* Message to be signed */ - 42, - { 0x58, 0x62, 0x7f, 0xfa, 0xaa, 0x8e, 0x80, 0x0a, 0x8b, 0xe9, 0x8e, 0x42, 0xf5, 0x1a, 0x83, 0x61, 0x1c, 0xfa, 0xb7, 0xee, 0x37, 0x6b, 0x34, 0x73, 0x7b, 0x3e, 0x48, 0xe1, 0xbc, 0x17, 0x42, 0xda, 0xa7, 0x7d, 0xe4, 0x7e, 0x1a, 0x9b, 0x29, 0x33, 0x77, 0xaa } -, - /* Signature */ - 192, - { 0x3d, 0x17, 0xcb, 0x38, 0x6c, 0x88, 0x78, 0x4d, 0x35, 0x9a, 0xd3, 0xc3, 0x8d, 0xbe, 0x88, 0x8b, 0xfa, 0xe8, 0x31, 0xbf, 0xb8, 0xed, 0xc9, 0xd0, 0xe8, 0x01, 0xe7, 0xd6, 0x9e, 0x1d, 0xd4, 0xc2, 0x44, 0x1d, 0x68, 0xfd, 0xbb, 0x35, 0x12, 0x6c, 0x73, 0xa4, 0xed, 0xab, 0xbf, 0xf5, 0x4e, 0x74, 0xfa, 0x51, 0x09, 0xda, 0xd8, 0xb5, 0xc3, 0x13, 0xd8, 0x6a, 0x79, 0xe4, 0xd4, 0x12, 0x76, 0x60, 0xfc, 0x2a, 0x8e, 0x1c, 0x93, 0xfa, 0x8d, 0x09, 0x2a, 0xcc, 0xf0, 0x1c, 0xc1, 0x8a, 0x60, 0x6c, 0xf0, 0x7d, 0xe2, 0xdc, 0x3e, 0x7b, 0x55, 0x33, 0x11, 0x52, 0xdb, 0x01, 0xb6, 0xca, 0xea, 0x1e, 0xce, 0xc9, 0x09, 0x31, 0x99, 0xbe, 0x62, 0xc3, 0xe1, 0x23, 0xe2, 0x87, 0x31, 0x13, 0x50, 0x3b, 0x22, 0x03, 0x0f, 0x16, 0x8d, 0xaf, 0xc4, 0xe6, 0xbd, 0x06, 0x5a, 0xd2, 0xf6, 0xb1, 0xde, 0xd0, 0x5b, 0xe0, 0xc2, 0xf9, 0xb6, 0x7b, 0xdc, 0x1a, 0x3b, 0xb1, 0x8d, 0xa9, 0x59, 0x4c, 0x95, 0x7d, 0xa4, 0xe4, 0x9f, 0xac, 0x3f, 0xe7, 0x6e, 0x07, 0x66, 0xf7, 0x4e, 0xb0, 0xd5, 0x23, 0xe4, 0xdd, 0x1a, 0xe7, 0x59, 0xda, 0xd6, 0xb9, 0xb9, 0x08, 0xb7, 0xfc, 0x8b, 0x97, 0xef, 0x5f, 0x4c, 0x82, 0x92, 0x32, 0x0a, 0xc3, 0x87, 0xc3, 0x50, 0x8b, 0x54, 0xcf, 0xb8, 0x5d, 0x34, 0xf6, 0xad, 0x39 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.4", - /* Message to be signed */ - 173, - { 0x0f, 0x0f, 0x8d, 0x3c, 0x0e, 0x4d, 0x26, 0x08, 0xaf, 0xad, 0x5a, 0x88, 0x8e, 0xa1, 0x4b, 0x3f, 0x6b, 0x2b, 0x27, 0x89, 0xdd, 0x22, 0x12, 0xb8, 0x59, 0x09, 0xe6, 0x4b, 0xfb, 0x10, 0x4d, 0x0f, 0x7d, 0xe4, 0x27, 0xd1, 0x4a, 0x9f, 0xfa, 0x85, 0x5e, 0x2d, 0x4c, 0xa2, 0x44, 0x23, 0x36, 0xe5, 0x59, 0x56, 0x8b, 0x28, 0x41, 0x5d, 0x60, 0xcf, 0x80, 0x63, 0xde, 0x55, 0x92, 0x17, 0x1b, 0x26, 0x9b, 0x3d, 0x76, 0x33, 0x51, 0xc7, 0xf7, 0xd9, 0xd2, 0x58, 0x09, 0xe7, 0x02, 0x20, 0xee, 0x30, 0xfe, 0x8a, 0x00, 0xb9, 0x5d, 0x4c, 0x20, 0x20, 0x26, 0x89, 0x7e, 0xd2, 0xc6, 0x1d, 0x7a, 0xd4, 0x3a, 0xed, 0xdf, 0x36, 0xb5, 0xc2, 0xcb, 0xe2, 0x1e, 0x00, 0x86, 0xdb, 0xd0, 0xfd, 0xfd, 0x19, 0xe4, 0x3f, 0x02, 0x77, 0xf3, 0xbc, 0x95, 0xed, 0x55, 0xa3, 0x4a, 0xf9, 0x30, 0x91, 0x66, 0x02, 0x19, 0x3c, 0xfe, 0x04, 0x51, 0x4b, 0xd2, 0x6a, 0x05, 0x7e, 0x56, 0x2a, 0x11, 0x90, 0xc2, 0x7e, 0xaa, 0xb6, 0xc3, 0x22, 0xfc, 0xfa, 0xf4, 0xbb, 0xcc, 0x7f, 0x20, 0xc3, 0x77, 0x9c, 0x63, 0x8d, 0x7b, 0xbc, 0x07, 0x08, 0x6c, 0xf7, 0x5b, 0xf8, 0x39, 0x96, 0xdb, 0x44, 0x63 } -, - /* Signature */ - 192, - { 0x50, 0x90, 0x45, 0x12, 0x36, 0x10, 0x50, 0x87, 0x2e, 0xae, 0x80, 0x10, 0x26, 0x28, 0xb6, 0x3d, 0x02, 0x16, 0x8d, 0xca, 0x52, 0xf0, 0xab, 0xd8, 0x77, 0x20, 0xea, 0x48, 0x05, 0x0d, 0x2c, 0x62, 0x06, 0x1a, 0xa2, 0x15, 0x32, 0x68, 0xbe, 0xf8, 0xef, 0xb3, 0x4e, 0xed, 0x46, 0x17, 0x1a, 0x62, 0x88, 0xe5, 0x04, 0xd4, 0x20, 0xf6, 0xfc, 0x14, 0x51, 0x38, 0x61, 0x1e, 0x75, 0xed, 0x3c, 0xf7, 0x9b, 0x4d, 0x10, 0x26, 0x64, 0xd8, 0x64, 0x4f, 0xf3, 0xe9, 0xe5, 0xdb, 0xfd, 0x71, 0xcd, 0xc2, 0x7a, 0x21, 0x0e, 0xfb, 0x10, 0xbe, 0x90, 0x27, 0x56, 0x04, 0xf8, 0xd4, 0x49, 0x14, 0x8b, 0x3f, 0x86, 0x09, 0x90, 0x39, 0xc3, 0x3a, 0xef, 0x90, 0xbf, 0x19, 0x1b, 0x35, 0x18, 0xeb, 0x45, 0x9d, 0xa3, 0xba, 0x14, 0xfd, 0x0c, 0x72, 0x22, 0x9d, 0xea, 0x5f, 0xac, 0x2f, 0x7d, 0xad, 0xe1, 0x08, 0x5c, 0x8a, 0x23, 0x70, 0xbb, 0xfc, 0xfa, 0x2e, 0x3a, 0x9e, 0x63, 0xca, 0x22, 0x4f, 0x6d, 0xe8, 0xc8, 0xd2, 0x97, 0xa3, 0xb1, 0xf0, 0x6f, 0x1f, 0xc9, 0x49, 0x78, 0x90, 0xfd, 0x0e, 0x0e, 0x13, 0x88, 0x7f, 0xac, 0xb1, 0x52, 0xd1, 0x2d, 0x96, 0x39, 0x25, 0x28, 0xef, 0x28, 0xd0, 0x72, 0x43, 0x31, 0xff, 0x41, 0x40, 0x30, 0xc7, 0xa6, 0x38, 0x55, 0x81, 0x3c, 0xcd, 0x89, 0xfb, 0xdb, 0x1b } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.5", - /* Message to be signed */ - 13, - { 0x26, 0x65, 0xcb, 0x5e, 0xe3, 0x6a, 0xa9, 0xbb, 0x1a, 0x5c, 0xde, 0x7c, 0xe8 } -, - /* Signature */ - 192, - { 0x4f, 0x38, 0xc2, 0xba, 0x84, 0xc5, 0x0d, 0x46, 0xdf, 0x53, 0x10, 0x91, 0xb6, 0x27, 0x12, 0x14, 0x9c, 0x1f, 0x42, 0xdb, 0xd7, 0x7e, 0x03, 0xd1, 0x85, 0xea, 0x96, 0xed, 0xa8, 0x02, 0x33, 0x7c, 0x22, 0xc1, 0x13, 0x0b, 0xc3, 0xbe, 0xce, 0xbf, 0x15, 0x39, 0xfd, 0x11, 0x89, 0x38, 0x51, 0xda, 0xe3, 0xcc, 0x15, 0x67, 0xcb, 0x6c, 0x73, 0xa7, 0x2f, 0xa1, 0xc9, 0x69, 0x48, 0x68, 0x21, 0x12, 0x7e, 0x7c, 0xfe, 0xa1, 0x36, 0x3e, 0xee, 0x95, 0x2b, 0x7c, 0x6e, 0xb5, 0x9e, 0x10, 0x2c, 0x66, 0x57, 0xc0, 0x80, 0x35, 0x27, 0x2c, 0xdf, 0x4a, 0xb5, 0xe5, 0x83, 0xed, 0x73, 0x7a, 0xd0, 0x28, 0xac, 0x1c, 0xfa, 0xfe, 0xdd, 0xc9, 0x07, 0x3d, 0xfb, 0xd7, 0xd3, 0xba, 0x3d, 0xa9, 0xe8, 0xdc, 0xd8, 0x46, 0xfa, 0x36, 0x5c, 0x9c, 0xcd, 0x8e, 0x9b, 0x39, 0x48, 0x3d, 0x37, 0x07, 0x3c, 0x1a, 0x7b, 0x78, 0x2e, 0xe7, 0x12, 0x1b, 0xb1, 0xa2, 0xad, 0x8b, 0xf5, 0xf8, 0xed, 0x6e, 0x65, 0x3e, 0x92, 0x4d, 0xeb, 0xad, 0x87, 0x1b, 0x74, 0x43, 0x39, 0xe5, 0xae, 0x7e, 0x96, 0xf6, 0x0d, 0xcc, 0x45, 0xea, 0x5d, 0x69, 0x7d, 0x3b, 0x1c, 0xc7, 0xc5, 0xe8, 0xda, 0x04, 0xe9, 0x2b, 0xe0, 0x6c, 0xad, 0x2e, 0x61, 0x4e, 0xac, 0x31, 0x8a, 0xec, 0xaf, 0x12, 0xd5, 0xa7, 0x62, 0x34, 0xc2, 0xc0 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.6", - /* Message to be signed */ - 125, - { 0x7b, 0x7b, 0x61, 0x61, 0x02, 0x0f, 0xaf, 0xb4, 0x88, 0x71, 0x63, 0x21, 0x34, 0x0d, 0xaf, 0x2c, 0x06, 0xac, 0x43, 0xce, 0x21, 0x32, 0x86, 0x86, 0x84, 0xaa, 0xaf, 0xab, 0x13, 0x99, 0x65, 0x3d, 0x35, 0x3b, 0x26, 0x93, 0xad, 0x73, 0xcb, 0x55, 0xb7, 0x1d, 0x66, 0xac, 0xd0, 0x1a, 0x16, 0x0c, 0xbf, 0x74, 0x37, 0x67, 0xbd, 0x96, 0xe7, 0xfd, 0x1c, 0x7a, 0x13, 0x32, 0x06, 0x65, 0xbb, 0xad, 0x1c, 0x4a, 0x0c, 0xed, 0x26, 0x59, 0x3c, 0xe8, 0x9c, 0xd8, 0x2f, 0x54, 0x6b, 0xd4, 0xd1, 0xb1, 0xbc, 0xd8, 0x2c, 0x65, 0xa4, 0x66, 0xf9, 0x9d, 0xa0, 0x12, 0xa4, 0x1e, 0x8c, 0x41, 0x20, 0x69, 0x81, 0x09, 0x58, 0x47, 0x5b, 0x4d, 0x9c, 0x2f, 0x80, 0xd8, 0x2d, 0x06, 0x41, 0x4c, 0x83, 0x25, 0xeb, 0x4f, 0x2c, 0x5a, 0x11, 0x66, 0xf1, 0xf1, 0xd2, 0xd1, 0x07, 0xd4, 0x8c } -, - /* Signature */ - 192, - { 0xd5, 0xcb, 0xb6, 0xc7, 0xef, 0xf4, 0xa6, 0x3a, 0xd8, 0x25, 0x0d, 0xe9, 0x4c, 0xc2, 0x9f, 0x7f, 0x31, 0xa0, 0xd7, 0x10, 0x6d, 0x5d, 0x77, 0x1b, 0x71, 0x5d, 0xf8, 0xa6, 0x75, 0xfd, 0x16, 0x34, 0xd6, 0xe8, 0xab, 0x58, 0x87, 0x5c, 0xc4, 0xc1, 0x51, 0x7b, 0x2f, 0xad, 0xf4, 0xe8, 0x5c, 0x1c, 0xb8, 0xb8, 0x53, 0x60, 0xe0, 0x68, 0x75, 0x87, 0xd1, 0x48, 0x08, 0x9f, 0x3f, 0x48, 0xb7, 0x9d, 0x98, 0xd2, 0x02, 0x7c, 0x50, 0x77, 0x0b, 0x33, 0x4f, 0x12, 0x52, 0xac, 0x0c, 0x3b, 0x2f, 0x03, 0x65, 0x34, 0xc3, 0xc2, 0x97, 0x22, 0xf6, 0x08, 0x7d, 0x06, 0xd7, 0x06, 0xce, 0xc7, 0xc4, 0xbd, 0xce, 0x1c, 0xd6, 0x4f, 0x7b, 0x4e, 0x07, 0x99, 0xa8, 0x7a, 0xa0, 0x73, 0xea, 0x83, 0x20, 0x29, 0x2b, 0x8e, 0xc8, 0x27, 0x17, 0x40, 0x6d, 0x36, 0xef, 0x91, 0x25, 0xe4, 0x1f, 0xb5, 0xd5, 0x3b, 0xcc, 0xdd, 0x62, 0x2d, 0x38, 0x8f, 0xcc, 0xee, 0x60, 0xa3, 0x85, 0xec, 0x20, 0x6a, 0x71, 0x5d, 0xc5, 0x4d, 0x78, 0x77, 0xbd, 0x72, 0x85, 0xd0, 0x84, 0x4c, 0x25, 0xd5, 0x93, 0x77, 0x97, 0x91, 0x27, 0x83, 0x96, 0xff, 0x9a, 0x8a, 0x91, 0x30, 0x6a, 0x54, 0xea, 0x76, 0x60, 0x7c, 0x81, 0x3f, 0x80, 0x1f, 0x38, 0x76, 0x0c, 0x3a, 0x81, 0x4b, 0x93, 0x96, 0x95, 0x9c, 0x29, 0xdb, 0xff, 0x9d } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.7", - /* Message to be signed */ - 12, - { 0x2b, 0x0a, 0xd6, 0x13, 0x82, 0x28, 0x78, 0xa5, 0x72, 0xe1, 0x42, 0x80 } -, - /* Signature */ - 192, - { 0x89, 0xc8, 0x10, 0x84, 0xda, 0xa8, 0xf9, 0x14, 0xb7, 0xe2, 0x44, 0x55, 0x10, 0x74, 0x17, 0xca, 0x62, 0x1c, 0x91, 0x02, 0xd5, 0x01, 0xee, 0xb4, 0x3d, 0x17, 0x4c, 0x7b, 0xad, 0x38, 0x1d, 0xb1, 0x8d, 0x95, 0x33, 0xc3, 0x41, 0x1a, 0xec, 0x60, 0x57, 0xca, 0x5a, 0x4d, 0xfd, 0xc3, 0xf1, 0x31, 0xc8, 0x88, 0xb8, 0x8f, 0x01, 0x30, 0x03, 0xd6, 0x17, 0xe0, 0x6d, 0x64, 0x47, 0x95, 0x02, 0xae, 0x7e, 0x42, 0x4a, 0x5d, 0xd6, 0x37, 0xb0, 0x33, 0x56, 0x40, 0x4d, 0x26, 0x0f, 0x5e, 0xd6, 0xb8, 0xcb, 0x16, 0xd2, 0x57, 0x85, 0x28, 0xcc, 0x3e, 0x85, 0x00, 0x34, 0x6e, 0xb7, 0x90, 0xbd, 0xad, 0x41, 0xb2, 0xe3, 0x6c, 0xa6, 0xf1, 0x98, 0x85, 0xe3, 0xf6, 0xf5, 0x10, 0x86, 0xbf, 0xfb, 0x6a, 0xbb, 0x9c, 0x66, 0x33, 0x6b, 0x49, 0x47, 0x34, 0x64, 0xc5, 0xd7, 0xed, 0x8e, 0x9f, 0xf8, 0x5e, 0x11, 0xae, 0xff, 0x40, 0x90, 0x67, 0xba, 0xb0, 0xa0, 0x5c, 0x41, 0xe8, 0x15, 0x1b, 0x8b, 0xe9, 0x87, 0xf3, 0xf5, 0x95, 0x8e, 0x3e, 0x6f, 0x26, 0x51, 0x5d, 0x96, 0xbf, 0x23, 0x4b, 0x22, 0xab, 0x91, 0xc0, 0x85, 0x7b, 0x6c, 0x08, 0xa4, 0x6b, 0x03, 0x05, 0xfe, 0x04, 0x4c, 0xa9, 0xaa, 0xa0, 0xd7, 0x0a, 0x27, 0x58, 0xa1, 0xce, 0x43, 0x16, 0x64, 0xa8, 0xdd, 0x79, 0x40, 0x8c, 0x16, 0xba } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.8", - /* Message to be signed */ - 76, - { 0x36, 0x93, 0x8c, 0x8c, 0x7c, 0x6f, 0x7e, 0x35, 0x52, 0x34, 0xdb, 0x5a, 0x32, 0xa6, 0x48, 0x10, 0xdb, 0x50, 0x2b, 0x67, 0xc6, 0xf5, 0x92, 0x54, 0x4f, 0xfb, 0x27, 0xeb, 0x1f, 0x22, 0xe0, 0x6f, 0x2d, 0x63, 0x8b, 0x56, 0xd5, 0xd2, 0xf7, 0xd1, 0x9e, 0x9e, 0x27, 0x1f, 0x2c, 0xc9, 0x0c, 0xc0, 0xdd, 0x36, 0xd6, 0xcc, 0x2c, 0x06, 0x17, 0x8b, 0xcc, 0x70, 0x6a, 0xef, 0x20, 0xe5, 0x6a, 0x35, 0x8e, 0x52, 0x4f, 0x63, 0x16, 0x76, 0x9c, 0x54, 0xb6, 0xde, 0x2d, 0xd5 } -, - /* Signature */ - 192, - { 0xa0, 0x37, 0x53, 0xa5, 0xfb, 0x54, 0xaa, 0x51, 0xf6, 0xdd, 0x8d, 0xab, 0x91, 0xf1, 0x9c, 0xb8, 0x65, 0x56, 0x84, 0x85, 0xf8, 0x55, 0x8f, 0x0d, 0x10, 0x3f, 0x0d, 0x2b, 0x6d, 0x78, 0x53, 0x6e, 0x79, 0xc8, 0x15, 0xc4, 0xa0, 0x37, 0xbc, 0xaf, 0x11, 0xb6, 0x9d, 0x4c, 0xdb, 0xab, 0x03, 0x5a, 0xbe, 0x21, 0x6f, 0x71, 0x52, 0xf6, 0x30, 0xff, 0xc7, 0x9f, 0x84, 0x9d, 0x8d, 0xcd, 0x46, 0x3a, 0xae, 0x6a, 0xe9, 0x7d, 0x3d, 0xf1, 0x5a, 0x9e, 0x73, 0xd2, 0x3f, 0x18, 0x78, 0xfa, 0xc7, 0x54, 0xcb, 0xdd, 0x57, 0x1a, 0xfe, 0xa5, 0xd2, 0x53, 0x57, 0xd4, 0xb8, 0x83, 0x45, 0xf4, 0x89, 0xbe, 0x0d, 0x67, 0xb9, 0xbf, 0xad, 0xf0, 0x23, 0xf2, 0x6e, 0x67, 0x31, 0x5e, 0xd5, 0xfb, 0xf3, 0x91, 0x91, 0x0a, 0xf4, 0x96, 0x9b, 0x72, 0x4b, 0xf0, 0xca, 0x31, 0xc1, 0x05, 0x9f, 0x8a, 0x39, 0x13, 0xb4, 0x8a, 0x13, 0x81, 0x9c, 0x23, 0x6c, 0x9b, 0xe8, 0xe8, 0x24, 0xca, 0x4c, 0xb6, 0x19, 0xfb, 0x7d, 0x78, 0x4c, 0xd5, 0xf9, 0x52, 0x6b, 0x39, 0x7c, 0x76, 0xc5, 0xd0, 0xc6, 0x0c, 0xf7, 0xf4, 0x8d, 0x11, 0x19, 0x6e, 0x54, 0xf7, 0x2a, 0x08, 0xbb, 0x42, 0xf7, 0x5a, 0xef, 0xe3, 0x8f, 0x0b, 0x91, 0xb4, 0x2b, 0xb8, 0x06, 0xde, 0x4b, 0x87, 0xc9, 0x08, 0x2f, 0x72, 0x1a, 0x68, 0x80, 0xca } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.9", - /* Message to be signed */ - 95, - { 0x60, 0x83, 0x0c, 0x01, 0xcf, 0xa8, 0x6f, 0xf2, 0xdc, 0xac, 0x7a, 0xf9, 0x32, 0x1e, 0xe5, 0xfe, 0x50, 0x2e, 0x0e, 0x7a, 0x6f, 0xac, 0xb7, 0x3e, 0x3f, 0x6b, 0xc9, 0x02, 0x64, 0x0a, 0x61, 0x09, 0x5f, 0x64, 0x6f, 0xd0, 0x3e, 0x80, 0xd5, 0x81, 0x82, 0x46, 0x53, 0x31, 0xe7, 0x5d, 0x66, 0x11, 0xa0, 0x97, 0x76, 0x81, 0x62, 0x70, 0x86, 0x24, 0x17, 0x29, 0xde, 0x9f, 0x44, 0xab, 0x43, 0x94, 0x9d, 0xac, 0x19, 0x36, 0x73, 0xbd, 0x6c, 0xf8, 0x7f, 0x5d, 0x65, 0x77, 0x1e, 0xf8, 0x72, 0x81, 0x63, 0x3f, 0xdd, 0x07, 0xba, 0xc4, 0x09, 0xa6, 0xe2, 0x32, 0xb6, 0x01, 0xae, 0xce, 0x2d } -, - /* Signature */ - 192, - { 0x40, 0x58, 0xf6, 0xe0, 0x24, 0x0d, 0x85, 0x1d, 0x61, 0x93, 0x95, 0xa7, 0x52, 0x87, 0xa8, 0x8f, 0xaf, 0xd8, 0xdc, 0x56, 0x00, 0xb0, 0x69, 0xbf, 0x19, 0xdc, 0x3e, 0x19, 0x21, 0xe1, 0x17, 0xb4, 0x97, 0xb8, 0x2b, 0x3c, 0x52, 0x02, 0x69, 0xb1, 0xd1, 0x12, 0x81, 0x64, 0xfc, 0xd8, 0x8d, 0xd2, 0xb4, 0x6d, 0xc8, 0x5c, 0x42, 0xec, 0xf6, 0x7d, 0xeb, 0xad, 0x21, 0xa3, 0xb9, 0xa1, 0x55, 0x42, 0xfe, 0xa2, 0x26, 0x06, 0xea, 0xb5, 0x82, 0xfc, 0x32, 0x97, 0x11, 0xff, 0xc0, 0x7f, 0x4e, 0xef, 0x1f, 0x3b, 0xbf, 0xe0, 0x88, 0x8c, 0xbc, 0xa4, 0x85, 0xba, 0xfc, 0x11, 0x88, 0xb0, 0xaf, 0xe8, 0x09, 0xc9, 0xaa, 0xf8, 0xfa, 0x36, 0x66, 0xb9, 0xc9, 0x05, 0x85, 0x39, 0xdb, 0x1e, 0xc6, 0xa1, 0x8e, 0x5b, 0xe0, 0xb8, 0x01, 0x44, 0xd2, 0xc3, 0x7c, 0xa6, 0x14, 0xc0, 0x90, 0xb4, 0xa7, 0xf1, 0x34, 0x58, 0xe0, 0xd3, 0xa4, 0xcb, 0x0c, 0xb7, 0x3d, 0xcc, 0x4d, 0x90, 0x80, 0x6f, 0x61, 0x08, 0x58, 0x89, 0xeb, 0x5c, 0x9b, 0x14, 0x09, 0xde, 0xf3, 0x60, 0xfd, 0x1c, 0x2e, 0x49, 0x43, 0x8d, 0x7c, 0x67, 0xd7, 0x9d, 0xbd, 0x9a, 0x59, 0x2a, 0xb5, 0x04, 0xc4, 0x71, 0x5f, 0x65, 0xb2, 0x9d, 0x84, 0x65, 0x09, 0x95, 0x15, 0x69, 0xa8, 0xc3, 0x79, 0x09, 0xf5, 0xd5, 0x50, 0xee, 0xff, 0xfa } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.10", - /* Message to be signed */ - 153, - { 0x63, 0x5d, 0x22, 0x03, 0xed, 0x9d, 0x5b, 0x91, 0x20, 0xe3, 0x1b, 0xf6, 0x9d, 0x30, 0x5b, 0xe6, 0x06, 0x86, 0x97, 0xe3, 0x5c, 0xe5, 0x9c, 0x55, 0x3e, 0x50, 0x8d, 0xc7, 0x7b, 0x07, 0x3f, 0xfa, 0x3a, 0xaa, 0x59, 0xf9, 0x96, 0xc3, 0x0b, 0x2e, 0x68, 0x63, 0x23, 0x81, 0x9f, 0xde, 0x22, 0xbe, 0x6c, 0x8d, 0x53, 0x86, 0x84, 0x14, 0xb3, 0x54, 0x5a, 0xbf, 0x43, 0x57, 0x68, 0xa6, 0x11, 0xf0, 0xc1, 0xa4, 0x79, 0xa0, 0xc7, 0x66, 0x0d, 0x53, 0x5e, 0x80, 0x5b, 0x5f, 0xed, 0xc3, 0x77, 0x9c, 0xf0, 0xc5, 0x2c, 0x3c, 0xd0, 0x40, 0xab, 0x65, 0x14, 0xc7, 0xf8, 0x13, 0x3d, 0x47, 0xb0, 0xac, 0xc6, 0x91, 0x4e, 0x6d, 0x4a, 0xd3, 0xc4, 0x73, 0x7c, 0xf5, 0x12, 0x91, 0x09, 0x4e, 0x85, 0x94, 0x33, 0xba, 0x30, 0x66, 0xe1, 0x9d, 0x6a, 0xa2, 0xda, 0x89, 0x6d, 0xc9, 0xd9, 0x5e, 0xf9, 0xe5, 0x63, 0x6d, 0xab, 0x35, 0xf7, 0x29, 0x87, 0x05, 0xc6, 0xd8, 0x76, 0x17, 0x54, 0x12, 0xf8, 0x84, 0x25, 0x19, 0xff, 0xe1, 0x6c, 0xf7, 0x43, 0x62, 0xab } -, - /* Signature */ - 192, - { 0x94, 0x61, 0xa1, 0xa8, 0x41, 0x42, 0x3e, 0xd5, 0xcf, 0xc6, 0x08, 0x9a, 0x74, 0xdb, 0xfc, 0x53, 0x73, 0x11, 0x03, 0xbf, 0x49, 0x85, 0xdd, 0xb1, 0x50, 0xb0, 0xe9, 0x38, 0x0d, 0x3f, 0xe0, 0xcf, 0x6d, 0x45, 0x7c, 0x5c, 0x68, 0xa7, 0xf2, 0x55, 0x04, 0x02, 0x2d, 0x69, 0x5f, 0xf8, 0x42, 0x11, 0x8e, 0xbf, 0x61, 0x02, 0x2f, 0xea, 0x47, 0xfa, 0x45, 0xf7, 0xc1, 0xcc, 0x72, 0x6e, 0x1d, 0xe5, 0x0b, 0xd0, 0x64, 0xb3, 0xbb, 0x70, 0x16, 0x57, 0x16, 0x2b, 0x88, 0xc0, 0xb9, 0x10, 0xfe, 0xb7, 0x2f, 0x48, 0x7a, 0x5c, 0x7f, 0x4b, 0x9e, 0xcf, 0xee, 0x24, 0xe0, 0x7a, 0xa2, 0xd1, 0x98, 0xd1, 0x13, 0xcb, 0x84, 0x5d, 0x81, 0x7b, 0xb5, 0x9b, 0xb1, 0xda, 0x24, 0xa8, 0x2b, 0x91, 0xc2, 0xfe, 0x3f, 0xba, 0x89, 0x51, 0x83, 0xcb, 0xd9, 0xc0, 0xfe, 0x0a, 0xc0, 0xbe, 0x64, 0xfe, 0xf2, 0xe0, 0x13, 0x92, 0x05, 0xb1, 0x0b, 0xca, 0xbf, 0xe5, 0xa3, 0xa7, 0xa8, 0x90, 0xfc, 0x0f, 0xe7, 0x8d, 0xab, 0xe1, 0xad, 0xb5, 0xbd, 0x11, 0x44, 0x85, 0x03, 0xcb, 0x0d, 0xcd, 0x0b, 0x68, 0xf1, 0x60, 0x19, 0x6e, 0x96, 0x13, 0xe2, 0x9f, 0xbe, 0x9a, 0x3f, 0x94, 0x06, 0xec, 0x20, 0xc0, 0x30, 0xe8, 0x1e, 0xc3, 0x09, 0x65, 0xea, 0x01, 0x9c, 0x17, 0xaa, 0x97, 0x11, 0x01, 0xc2, 0xe5, 0x30, 0x59 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.11", - /* Message to be signed */ - 182, - { 0x87, 0xfb, 0xa9, 0x89, 0xf3, 0xcc, 0x15, 0xaf, 0x7e, 0xe7, 0x61, 0xc0, 0x88, 0x26, 0x4a, 0xb7, 0x71, 0x52, 0x39, 0xe0, 0xb8, 0xc8, 0xa9, 0xe4, 0x8e, 0x11, 0xdb, 0x68, 0x03, 0x31, 0x39, 0xc2, 0xa2, 0x89, 0xea, 0x42, 0x6e, 0xbe, 0x26, 0x9f, 0x5f, 0xb7, 0x07, 0x09, 0x0a, 0xfb, 0x89, 0x1a, 0x49, 0xca, 0x05, 0xc0, 0x55, 0x0d, 0x72, 0x9b, 0xf4, 0xd3, 0x7c, 0x8f, 0x1d, 0xa7, 0xa3, 0xca, 0x2f, 0x43, 0x87, 0xa4, 0x0b, 0x5f, 0x79, 0x13, 0xa3, 0x85, 0xf5, 0x5b, 0x81, 0x41, 0xaf, 0x36, 0xbe, 0x8f, 0x57, 0x16, 0x65, 0xf8, 0x57, 0xe7, 0x7a, 0x5c, 0x9c, 0xcc, 0xe6, 0xba, 0x8f, 0x2b, 0xe4, 0x63, 0x23, 0xcc, 0x56, 0x91, 0x56, 0x6f, 0xf4, 0xb6, 0xd7, 0x85, 0x43, 0x04, 0xb9, 0x3b, 0xba, 0x1a, 0x17, 0x59, 0xdf, 0xb1, 0x44, 0xc9, 0x54, 0x7c, 0xf2, 0xbc, 0x8e, 0xaa, 0xed, 0xaa, 0x4f, 0x1d, 0xd2, 0x52, 0x82, 0x3b, 0x72, 0x87, 0xca, 0x55, 0x5d, 0x21, 0x06, 0x08, 0x9a, 0x24, 0x3e, 0x5d, 0xfe, 0x8f, 0xc3, 0x1d, 0x3f, 0x46, 0x22, 0x2a, 0x68, 0xab, 0xaf, 0x31, 0x81, 0x5a, 0x94, 0x7e, 0x58, 0x57, 0xcf, 0x6a, 0x33, 0x17, 0x0e, 0xcc, 0xb6, 0xa5, 0xe0, 0x6d, 0x23, 0xcc, 0x9d, 0x48, 0xea, 0xf6, 0xcd, 0xbc } -, - /* Signature */ - 192, - { 0x0b, 0x5f, 0x1c, 0xfc, 0x25, 0x3b, 0xaa, 0xd4, 0xb9, 0x83, 0xf8, 0xfe, 0x05, 0x0d, 0x4a, 0x01, 0x7c, 0xc4, 0x66, 0x98, 0x0e, 0xbd, 0x23, 0xc9, 0xd5, 0x53, 0x43, 0xf5, 0x10, 0x7e, 0x04, 0x1e, 0xb6, 0x54, 0x78, 0x10, 0xfd, 0xba, 0x46, 0x86, 0xe6, 0x10, 0x83, 0x2f, 0x92, 0x82, 0xed, 0xf0, 0x66, 0x04, 0xb0, 0xab, 0xfe, 0xea, 0x38, 0x01, 0x32, 0x79, 0x17, 0x79, 0x40, 0x99, 0x7b, 0x28, 0x90, 0x2b, 0x14, 0xdb, 0x37, 0x9e, 0xeb, 0x4f, 0x44, 0x00, 0x5d, 0xfc, 0xb0, 0x03, 0x68, 0x03, 0xc9, 0xf1, 0x25, 0xbc, 0xe1, 0xf2, 0xa8, 0x2c, 0x4d, 0x30, 0x07, 0xae, 0x96, 0xb8, 0x48, 0xb8, 0x13, 0xec, 0x8c, 0x97, 0xca, 0x3f, 0x71, 0x0a, 0x9a, 0xe0, 0xdb, 0xc2, 0x8a, 0x55, 0xe0, 0x58, 0x81, 0xb8, 0x58, 0xdb, 0x55, 0x71, 0x20, 0xf3, 0x3c, 0x59, 0xcd, 0x43, 0x60, 0xf9, 0x20, 0x8c, 0x74, 0xb2, 0x7e, 0xc6, 0x5d, 0x11, 0xea, 0x41, 0xfa, 0x6a, 0x9e, 0xac, 0xf2, 0xa6, 0x11, 0x68, 0xad, 0x07, 0xc2, 0x09, 0x94, 0x8f, 0x35, 0xa1, 0x61, 0xf4, 0x1f, 0x87, 0x54, 0x0e, 0xa1, 0x82, 0x84, 0xaa, 0xb8, 0xd8, 0xf9, 0x78, 0x61, 0x31, 0xf0, 0x43, 0x90, 0x2b, 0x89, 0xc1, 0x7a, 0x56, 0x0d, 0x90, 0x94, 0x64, 0x47, 0x5a, 0x0d, 0xfc, 0xe5, 0x89, 0x09, 0x18, 0x7c, 0xd6, 0xe4, 0x46 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.12", - /* Message to be signed */ - 100, - { 0x4b, 0x5e, 0x80, 0x30, 0x5c, 0xbe, 0xa9, 0x0d, 0x63, 0x7f, 0xdb, 0x23, 0x47, 0xc6, 0xfe, 0xb6, 0x78, 0x42, 0xeb, 0xac, 0x6f, 0x90, 0x3d, 0xb5, 0xa7, 0x1e, 0xba, 0xab, 0x8a, 0x1c, 0x2d, 0xf1, 0x12, 0x60, 0xa1, 0xec, 0x90, 0x7b, 0x8b, 0x63, 0x4d, 0x37, 0xd3, 0x6e, 0xd8, 0xde, 0x7d, 0x0d, 0xa1, 0x03, 0xbc, 0x4a, 0x9e, 0x93, 0x3f, 0xb7, 0xbf, 0xee, 0x59, 0x1c, 0xc9, 0x33, 0x29, 0x9f, 0xee, 0x46, 0x0f, 0x35, 0x42, 0xc9, 0x78, 0xf3, 0x07, 0xae, 0x05, 0x24, 0x64, 0xf3, 0x06, 0x20, 0xce, 0xbf, 0x3c, 0x9a, 0x9c, 0xb6, 0xa9, 0x01, 0x53, 0x0c, 0x1d, 0x56, 0x13, 0xdf, 0x07, 0x74, 0x31, 0x2d, 0x4b, 0x5f } -, - /* Signature */ - 192, - { 0xb6, 0xf0, 0x3d, 0x35, 0x33, 0x50, 0x07, 0xa7, 0x47, 0xae, 0x68, 0x67, 0x60, 0xf9, 0xed, 0xad, 0x08, 0x89, 0xd2, 0xd4, 0xca, 0x0c, 0xb8, 0x8b, 0x67, 0x43, 0x12, 0xd3, 0x2c, 0x55, 0x2b, 0x7a, 0x66, 0xc5, 0xa9, 0x52, 0x8c, 0x01, 0x4b, 0x58, 0xc8, 0x49, 0xf2, 0x31, 0xa2, 0xe0, 0x45, 0x68, 0x2e, 0x3b, 0xbb, 0x14, 0xc7, 0xf9, 0x5f, 0xf8, 0xbd, 0xb6, 0x58, 0x7f, 0x25, 0x11, 0xcc, 0x6b, 0xf9, 0x24, 0x39, 0x60, 0x08, 0x11, 0x03, 0xd4, 0x7e, 0x77, 0x69, 0xa1, 0x77, 0xeb, 0xdb, 0x91, 0xf1, 0x28, 0x73, 0xde, 0xcd, 0x5d, 0xc0, 0x67, 0xe4, 0x5c, 0x2b, 0x2a, 0x04, 0x4f, 0xfa, 0x3f, 0xbb, 0x04, 0xc2, 0x0a, 0x3d, 0xc2, 0x01, 0x38, 0x40, 0x3f, 0xf2, 0x5c, 0xa0, 0xeb, 0xad, 0x96, 0xe4, 0x85, 0x9f, 0xa4, 0xa0, 0xd7, 0x32, 0x85, 0x2a, 0xf3, 0x50, 0xa2, 0x75, 0x69, 0x9a, 0x94, 0xaa, 0x6e, 0x47, 0xf2, 0x17, 0xe3, 0x83, 0xef, 0x8f, 0xce, 0x8e, 0xb6, 0xee, 0xd7, 0x82, 0x6d, 0x7c, 0x61, 0x58, 0xfc, 0x58, 0x82, 0xe4, 0x61, 0x35, 0x45, 0xfa, 0x26, 0xee, 0xe0, 0xc9, 0xf9, 0x3d, 0xe7, 0xa1, 0x65, 0x08, 0xea, 0x16, 0x19, 0x70, 0x46, 0x0d, 0x6a, 0x7c, 0xa7, 0x70, 0xf8, 0xde, 0x8b, 0xa9, 0x3c, 0xea, 0xf3, 0x97, 0xdd, 0xf1, 0xfb, 0xce, 0xe2, 0x82, 0xa1, 0x53, 0x7d } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.13", - /* Message to be signed */ - 86, - { 0xe5, 0xad, 0x62, 0x7f, 0x24, 0xf4, 0x11, 0x7a, 0x0a, 0x6b, 0xe4, 0xa5, 0x5f, 0xdb, 0x88, 0x3d, 0x75, 0xa6, 0x73, 0x12, 0x15, 0x4a, 0x71, 0x89, 0x23, 0xd0, 0xe8, 0xf5, 0x73, 0x0a, 0x54, 0xd8, 0xca, 0x7c, 0x97, 0x4e, 0x4d, 0x59, 0x33, 0x8b, 0xb5, 0x71, 0x30, 0x5c, 0xce, 0x99, 0x0c, 0xbb, 0xcf, 0xa9, 0x1e, 0xa9, 0xb7, 0x73, 0xb8, 0x3d, 0x7a, 0x1f, 0x0f, 0xfe, 0xc4, 0xc6, 0xb1, 0x43, 0xfe, 0x05, 0x05, 0x8b, 0xc9, 0x0c, 0xe1, 0x46, 0xf3, 0x69, 0xcb, 0xae, 0x3b, 0x3d, 0x99, 0x70, 0x5e, 0xf4, 0x3d, 0x07, 0x21, 0xb8 } -, - /* Signature */ - 192, - { 0x73, 0x29, 0x86, 0xd4, 0xed, 0xdb, 0x8a, 0x7e, 0x9b, 0x65, 0xdc, 0x01, 0x6d, 0xd5, 0x71, 0xef, 0xab, 0xeb, 0x84, 0x49, 0x0e, 0x88, 0xe3, 0xe7, 0x3b, 0x63, 0xe8, 0x0d, 0x1c, 0xc8, 0x6a, 0x45, 0x2d, 0xec, 0x29, 0xfc, 0x81, 0x7e, 0x8a, 0xd4, 0xee, 0xbd, 0xdc, 0xd9, 0x7c, 0x74, 0x5b, 0xc4, 0x79, 0x7e, 0x54, 0xfe, 0xc6, 0xac, 0xe2, 0x91, 0xb1, 0x96, 0xdc, 0x24, 0x65, 0xf0, 0x8c, 0xf1, 0xdd, 0xd2, 0x17, 0xe7, 0x7a, 0xaf, 0x7d, 0x50, 0x98, 0x77, 0x91, 0xde, 0x81, 0xb0, 0x41, 0x10, 0xd1, 0x1a, 0xb8, 0x55, 0x89, 0x06, 0x60, 0x4e, 0xb9, 0xd9, 0x2b, 0x35, 0xf9, 0x00, 0x75, 0xaf, 0x42, 0x28, 0x01, 0x45, 0xb0, 0x88, 0xe8, 0x75, 0x3d, 0x0d, 0xb7, 0x3c, 0xd3, 0xa3, 0x2b, 0xd1, 0x9c, 0xea, 0x35, 0x38, 0xee, 0x4f, 0x09, 0x27, 0x3e, 0xf6, 0x6d, 0x07, 0x05, 0xd4, 0x5e, 0xe7, 0x10, 0x9f, 0xe5, 0x95, 0xdf, 0x55, 0x76, 0x7b, 0x3d, 0x10, 0x81, 0x72, 0x27, 0xbb, 0x6b, 0xa3, 0x95, 0x75, 0xb8, 0x5d, 0x6a, 0x35, 0xa2, 0xff, 0xb8, 0x8c, 0xb2, 0x67, 0xdb, 0xfc, 0x28, 0x2b, 0xb8, 0xa3, 0xde, 0xe0, 0x2e, 0xc7, 0x7b, 0x0c, 0xb8, 0x13, 0x55, 0x70, 0xf8, 0xa7, 0xd7, 0xad, 0x04, 0x34, 0x1a, 0x08, 0x64, 0xe6, 0x7f, 0xf6, 0xfa, 0x02, 0x59, 0xa1, 0x69, 0x74, 0xc8, 0x6a } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.14", - /* Message to be signed */ - 75, - { 0x03, 0xe3, 0x9b, 0xa7, 0xa8, 0x0c, 0x77, 0x14, 0x16, 0xd8, 0x52, 0x63, 0xe4, 0xd4, 0x3c, 0x63, 0x93, 0xdf, 0xe7, 0x96, 0x52, 0x3b, 0x89, 0xe0, 0xa4, 0x61, 0x62, 0x88, 0x80, 0x80, 0x0d, 0x8f, 0xc2, 0x43, 0x1b, 0x66, 0x30, 0x54, 0x09, 0xe0, 0x6c, 0x95, 0xae, 0x7a, 0x17, 0xd5, 0x34, 0xb1, 0xe8, 0x4c, 0x19, 0x9d, 0xfe, 0x73, 0x1d, 0xa9, 0x49, 0xf1, 0x64, 0x57, 0x1d, 0xec, 0xc8, 0xb1, 0x66, 0xbe, 0xb8, 0xdc, 0x08, 0x7c, 0xb4, 0x86, 0x99, 0x98, 0xc2 } -, - /* Signature */ - 192, - { 0x60, 0x76, 0x3b, 0xea, 0xf7, 0xc3, 0xe2, 0x2b, 0x3b, 0x22, 0xdc, 0x44, 0xd9, 0x47, 0x82, 0x6e, 0x23, 0xfc, 0xf9, 0x6b, 0x01, 0xb7, 0x74, 0x1b, 0x24, 0xb1, 0xb9, 0xd9, 0x3c, 0x07, 0xf0, 0xc6, 0x4d, 0x39, 0x67, 0x98, 0xbb, 0x58, 0x9b, 0xd4, 0x25, 0x29, 0x53, 0x69, 0xbf, 0xb8, 0x79, 0xad, 0xd3, 0x42, 0xcd, 0x76, 0x28, 0x0b, 0x57, 0xe6, 0x35, 0x4f, 0x61, 0x95, 0xe8, 0x42, 0xfa, 0x2a, 0x95, 0xf1, 0xc4, 0x6f, 0x0b, 0x70, 0x78, 0x6c, 0x31, 0x8d, 0xe9, 0xa5, 0x5a, 0x8a, 0xc4, 0x54, 0x5e, 0xe7, 0xcf, 0xf3, 0x99, 0xc6, 0x78, 0xe5, 0x78, 0xf8, 0x93, 0x9e, 0xd4, 0x9e, 0x84, 0xbb, 0xa9, 0xaa, 0xe5, 0x7c, 0x1a, 0x36, 0xfc, 0xc3, 0x94, 0x86, 0x46, 0x6e, 0x40, 0x12, 0xf9, 0x58, 0x87, 0xa6, 0x81, 0x10, 0xf1, 0xa4, 0x84, 0x67, 0xe4, 0xc2, 0x34, 0xf5, 0x81, 0xc5, 0xec, 0x47, 0x71, 0x06, 0xcc, 0xb3, 0xec, 0x86, 0x17, 0xb4, 0xbe, 0x21, 0x93, 0x37, 0x44, 0x8f, 0xe7, 0x2e, 0x25, 0xde, 0xab, 0x53, 0xea, 0xcb, 0x92, 0xe5, 0x96, 0x62, 0x95, 0xb3, 0xa5, 0x57, 0x12, 0x19, 0x58, 0xdf, 0xe7, 0x9c, 0xa4, 0x72, 0xf7, 0x9e, 0xfb, 0xda, 0x1d, 0xcf, 0xba, 0x9d, 0xbd, 0x0f, 0x97, 0x67, 0x32, 0xc0, 0x93, 0xb9, 0x8f, 0xf1, 0x93, 0xc9, 0x02, 0x98, 0x7a, 0x42, 0x6c, 0x0f } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.15", - /* Message to be signed */ - 243, - { 0xd4, 0xc2, 0x35, 0x96, 0x7d, 0x4e, 0x87, 0xb6, 0x71, 0x1e, 0x32, 0xac, 0x70, 0x37, 0xa3, 0x97, 0xf9, 0x9b, 0x1c, 0xad, 0x95, 0xa1, 0x88, 0x94, 0x6a, 0x48, 0x64, 0x0e, 0xb6, 0xb7, 0xb0, 0x03, 0xc3, 0x2f, 0x85, 0xa1, 0x21, 0xb0, 0x9c, 0xa4, 0xc8, 0xbe, 0xc0, 0xb8, 0x27, 0x44, 0xaa, 0xf2, 0x7d, 0x16, 0x6c, 0xef, 0xc7, 0xa9, 0x70, 0x2a, 0xd3, 0x1d, 0xbd, 0x15, 0xea, 0x2a, 0x18, 0x5f, 0x5b, 0x9b, 0xa6, 0x42, 0xf9, 0x49, 0x07, 0x8b, 0xc6, 0x09, 0xb9, 0xa8, 0xa3, 0x36, 0x92, 0xd7, 0x18, 0x49, 0x39, 0xd1, 0xf9, 0xeb, 0x42, 0x6a, 0x6d, 0xb7, 0x40, 0xea, 0xd9, 0x4c, 0xfe, 0xa1, 0x7f, 0xeb, 0x06, 0x18, 0xd7, 0x4d, 0x9a, 0x65, 0x16, 0x88, 0xe9, 0x0b, 0x9b, 0xb7, 0x05, 0x24, 0x30, 0x5d, 0x61, 0x8c, 0x88, 0xa5, 0x5f, 0x45, 0x44, 0x50, 0xe0, 0xc5, 0x85, 0xd3, 0xa8, 0xd9, 0x81, 0x65, 0x81, 0x8f, 0x36, 0x3b, 0x20, 0xa2, 0x52, 0x49, 0x2e, 0x15, 0x12, 0x58, 0x58, 0x90, 0xa8, 0xc3, 0x20, 0xa7, 0x18, 0x71, 0x58, 0xce, 0x0d, 0x4e, 0x4b, 0xe1, 0xc7, 0x01, 0xf8, 0xaf, 0xdc, 0x54, 0x5c, 0x4d, 0xab, 0x86, 0x8d, 0x41, 0xd4, 0x1c, 0x21, 0xc2, 0xcb, 0x1f, 0x67, 0xdf, 0x79, 0x53, 0xd5, 0xf7, 0x26, 0x1c, 0x50, 0x92, 0xbb, 0xc4, 0x33, 0x2a, 0xc5, 0x57, 0x5b, 0x6e, 0x0e, 0x03, 0x14, 0x9c, 0x04, 0x0c, 0x3e, 0x20, 0x1c, 0x79, 0x15, 0xac, 0x20, 0x22, 0x88, 0x4e, 0xa0, 0xe6, 0xc2, 0x14, 0x03, 0xf0, 0xb4, 0x4e, 0x0f, 0x71, 0x34, 0x3f, 0xc9, 0x11, 0x1a, 0x7d, 0xb2, 0xf5, 0xe9, 0xe5, 0x09, 0xc2, 0xd8, 0x97, 0x84, 0xef, 0xb2, 0x2c, 0x31, 0xe8, 0x16, 0x5e, 0x0e, 0x93, 0x6c } -, - /* Signature */ - 192, - { 0x46, 0x9f, 0x08, 0xbd, 0xd0, 0x3b, 0x75, 0x64, 0x0e, 0x8a, 0x44, 0xa0, 0x7c, 0xa8, 0xde, 0x4b, 0xac, 0xf8, 0x33, 0x1f, 0xe3, 0x9c, 0x44, 0xd2, 0x3a, 0xa7, 0xb5, 0x81, 0xdc, 0x3f, 0x00, 0xf5, 0x42, 0x1b, 0x5c, 0x17, 0x2d, 0x0f, 0xfc, 0xe9, 0x14, 0x97, 0xd3, 0xd4, 0xb1, 0x04, 0xf5, 0x6a, 0x98, 0xec, 0x94, 0xf7, 0x19, 0x27, 0x1e, 0x58, 0xb4, 0x3e, 0xfb, 0xd8, 0x76, 0xe1, 0xc1, 0x31, 0xfa, 0x97, 0x82, 0x07, 0x28, 0xa5, 0x56, 0x75, 0x55, 0x21, 0x4c, 0xd9, 0x4a, 0x18, 0xfc, 0xce, 0x5c, 0x2f, 0x53, 0xb1, 0x9d, 0x1f, 0x3c, 0x73, 0xd0, 0x9f, 0x7b, 0xe1, 0x80, 0x97, 0x38, 0xb0, 0x3c, 0xe7, 0x69, 0xe4, 0x54, 0xed, 0x4c, 0xbe, 0xdc, 0xaf, 0x43, 0xc4, 0x8b, 0xd3, 0x9d, 0xf2, 0xf8, 0xbb, 0x63, 0xb8, 0xfc, 0x4d, 0x0d, 0x4d, 0x5b, 0x20, 0x4f, 0xc2, 0x20, 0x01, 0x3a, 0x66, 0x8c, 0x19, 0xf9, 0x75, 0x02, 0x93, 0xa4, 0x71, 0x15, 0x83, 0x88, 0x26, 0x45, 0xdb, 0xf3, 0xac, 0x4f, 0x83, 0x9b, 0x6f, 0xd1, 0xcf, 0x3b, 0x5e, 0xe8, 0xd7, 0x34, 0xe1, 0xda, 0x37, 0x4d, 0x91, 0xd8, 0x9e, 0xa3, 0x18, 0xe9, 0x18, 0x34, 0x83, 0xf4, 0xa0, 0x9a, 0x93, 0x51, 0x4a, 0xf5, 0x4f, 0x75, 0xd0, 0xa3, 0x56, 0x51, 0xb2, 0x40, 0xf7, 0x9f, 0x20, 0xa2, 0x97, 0x7d, 0x14, 0x57, 0x8c } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.16", - /* Message to be signed */ - 119, - { 0xd0, 0x6a, 0xdc, 0xa4, 0xc2, 0x0f, 0x0d, 0x9f, 0x7b, 0xe6, 0x5a, 0x20, 0x32, 0x7c, 0x29, 0x47, 0x56, 0xe3, 0xed, 0xd9, 0xe1, 0xd3, 0x9d, 0x0f, 0x95, 0xc7, 0x9d, 0xf1, 0xba, 0xc3, 0x34, 0x35, 0x9f, 0xab, 0x94, 0x3d, 0x85, 0x45, 0xa3, 0xba, 0xa3, 0x7a, 0x59, 0x29, 0x5c, 0x58, 0xb2, 0x37, 0x75, 0x2b, 0x8d, 0xe7, 0xd4, 0x32, 0x3c, 0x56, 0xe9, 0xd7, 0xcb, 0x0c, 0x7f, 0x83, 0x1d, 0x54, 0x9c, 0xb3, 0x87, 0x19, 0xa0, 0x81, 0xd5, 0x8b, 0x60, 0x57, 0xec, 0xb7, 0x42, 0x9e, 0x2c, 0xa6, 0x07, 0xcd, 0x13, 0x06, 0x35, 0x59, 0x43, 0x15, 0x9d, 0xc9, 0x24, 0xad, 0x3e, 0x9c, 0xb1, 0x3d, 0x0e, 0x71, 0xea, 0xdc, 0xb0, 0x05, 0xe1, 0x84, 0xc0, 0xc2, 0xce, 0xaa, 0xf9, 0xd7, 0x4a, 0x1c, 0x1d, 0xf6, 0xfe, 0xc1, 0x8c, 0x97, 0xa0 } -, - /* Signature */ - 192, - { 0x9f, 0xd9, 0x52, 0x5c, 0x15, 0xc8, 0x43, 0xb8, 0x06, 0x9c, 0x15, 0xf2, 0x6d, 0x3f, 0x95, 0x24, 0x6a, 0xf3, 0x7a, 0x8b, 0x8e, 0x6b, 0x93, 0x9d, 0xdf, 0x5b, 0x38, 0x28, 0xcd, 0xb6, 0x2c, 0xfa, 0x37, 0x3a, 0x92, 0xec, 0xc4, 0x13, 0x84, 0xa8, 0x77, 0xca, 0xa0, 0x90, 0xaa, 0x13, 0xc8, 0x47, 0xef, 0x28, 0x29, 0xdd, 0xca, 0x14, 0x14, 0x20, 0x14, 0x02, 0x14, 0x81, 0x55, 0x05, 0x50, 0xda, 0xa2, 0x9d, 0xe2, 0xab, 0x70, 0x01, 0xb8, 0x55, 0xc9, 0x34, 0x2f, 0x0c, 0x90, 0xbf, 0xa6, 0xc3, 0x34, 0x9b, 0x2c, 0x39, 0x62, 0x13, 0xef, 0x70, 0xcb, 0xd8, 0x4b, 0xb4, 0xce, 0x6e, 0xf5, 0x8b, 0x17, 0x6e, 0x9f, 0x6f, 0xcc, 0xdb, 0x6e, 0x46, 0xca, 0xc3, 0x41, 0x14, 0xa1, 0xb9, 0xf9, 0x8a, 0x8a, 0x32, 0x75, 0x7b, 0xf7, 0x5d, 0x6b, 0xfc, 0x45, 0x5a, 0xde, 0x6a, 0x01, 0xf9, 0x60, 0x50, 0x1b, 0x79, 0xf5, 0xfb, 0xe3, 0xb3, 0x8f, 0xca, 0x03, 0x46, 0x4e, 0x43, 0xd4, 0x96, 0x63, 0xc7, 0x9f, 0xf6, 0x4d, 0x32, 0x98, 0x1e, 0x44, 0x80, 0xcd, 0xf4, 0x2d, 0x8a, 0xf8, 0xda, 0xa7, 0xf1, 0x2b, 0x81, 0xa5, 0xaa, 0x96, 0x5f, 0xad, 0xaa, 0x3c, 0x03, 0xb7, 0xff, 0x22, 0xd3, 0xcf, 0xdf, 0xfe, 0x3c, 0xad, 0xf4, 0xd5, 0x98, 0x9e, 0xd1, 0x4c, 0x96, 0x9a, 0x6e, 0x8c, 0x9a, 0x1e, 0x04 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.17", - /* Message to be signed */ - 209, - { 0x3a, 0x63, 0x02, 0xd7, 0x9e, 0x26, 0xb5, 0x55, 0xc7, 0x7d, 0xe9, 0x2a, 0x91, 0xe0, 0x78, 0x57, 0x1e, 0xd1, 0x57, 0x2f, 0xfc, 0x3e, 0x4f, 0xc9, 0x05, 0xce, 0x53, 0xf1, 0x04, 0xb3, 0x22, 0x00, 0x95, 0x7e, 0xb2, 0xb5, 0xe5, 0xf3, 0xe3, 0xfc, 0xbb, 0xc1, 0x62, 0xf9, 0xe5, 0x25, 0xc7, 0x06, 0xf1, 0xdd, 0x04, 0xfc, 0xab, 0x51, 0x6b, 0xc1, 0x8a, 0x8e, 0x4f, 0x88, 0xa9, 0x38, 0xa5, 0xb2, 0x56, 0x85, 0xd7, 0x8d, 0xdc, 0x9f, 0x10, 0x4e, 0x49, 0xbf, 0x5c, 0xa0, 0xb6, 0x5a, 0x4b, 0x96, 0x57, 0xe0, 0x4a, 0x71, 0xfb, 0x50, 0xeb, 0x4a, 0xac, 0x22, 0xc0, 0xbb, 0x93, 0xf6, 0x0c, 0xac, 0x94, 0x83, 0xf1, 0x77, 0x13, 0x55, 0x3d, 0xca, 0x4b, 0x31, 0xe2, 0x72, 0x7b, 0x32, 0xe3, 0x50, 0xfe, 0x20, 0x4c, 0xec, 0xd9, 0xa7, 0xcd, 0xa4, 0xda, 0xda, 0x2e, 0x87, 0xff, 0x6f, 0x2b, 0x73, 0xe7, 0xb0, 0x78, 0x1e, 0x21, 0x2f, 0x34, 0xfe, 0x36, 0x36, 0x10, 0xf0, 0x18, 0xa7, 0x99, 0x37, 0x37, 0x55, 0xab, 0x46, 0x66, 0x7b, 0xb6, 0x52, 0x5d, 0x7d, 0xc7, 0xa0, 0xe8, 0x28, 0x90, 0x17, 0xf5, 0x48, 0x7f, 0xa6, 0x92, 0xef, 0x2f, 0xdd, 0xce, 0x38, 0xad, 0x3f, 0x45, 0x30, 0xde, 0x7e, 0xe5, 0x05, 0x66, 0x70, 0xa7, 0x35, 0xd3, 0x78, 0xd1, 0xef, 0xc9, 0x94, 0x81, 0xf8, 0xc9, 0xfb, 0xee, 0xa9, 0x9f, 0x56, 0x6a, 0x0b, 0x6e, 0x28, 0x46, 0x26, 0x44, 0xa6, 0xd9, 0xc6, 0xcc, 0x88, 0xfb } -, - /* Signature */ - 192, - { 0xb7, 0x57, 0xfa, 0x74, 0x7c, 0x5c, 0x87, 0x67, 0x66, 0xf3, 0x58, 0xac, 0xbf, 0xc7, 0xe7, 0xb8, 0x05, 0x96, 0x36, 0x8d, 0x0d, 0x86, 0x29, 0x50, 0xe5, 0x55, 0xf4, 0x71, 0x64, 0x6f, 0x64, 0x0e, 0x85, 0x1d, 0x61, 0x2a, 0x55, 0x6f, 0x55, 0xa7, 0x4a, 0x32, 0x92, 0x42, 0x9e, 0x4c, 0x14, 0xf7, 0x8b, 0xa3, 0xeb, 0xbd, 0x96, 0x87, 0xf3, 0x08, 0xde, 0xdb, 0x3c, 0xfe, 0xd7, 0x1f, 0x4a, 0x9d, 0xd2, 0x6f, 0xa5, 0x12, 0x2f, 0x7f, 0x71, 0x94, 0xae, 0xb6, 0x3b, 0xc8, 0xb7, 0x5c, 0x34, 0x31, 0x87, 0x11, 0x5a, 0x1d, 0xbd, 0x35, 0x95, 0x90, 0xf7, 0xff, 0x38, 0x62, 0xb7, 0x08, 0x85, 0xaf, 0x1c, 0xa9, 0x34, 0xb8, 0xce, 0xbc, 0x2c, 0xc9, 0xe6, 0x47, 0x25, 0x3f, 0xd1, 0x32, 0x7a, 0x2e, 0xd4, 0x24, 0x4d, 0xc8, 0xf5, 0x85, 0x55, 0xa6, 0x89, 0x7c, 0xa3, 0x22, 0x9c, 0x80, 0x1e, 0x7b, 0xf6, 0x28, 0xf5, 0x25, 0xe6, 0xc9, 0x48, 0x80, 0x4d, 0x0b, 0x1b, 0x6d, 0xbc, 0xd7, 0x90, 0x2a, 0xcd, 0xe7, 0xa2, 0x5b, 0xa5, 0x91, 0xd8, 0x86, 0xe2, 0x8d, 0xaa, 0x8d, 0xed, 0x5e, 0xe4, 0x01, 0xe3, 0x4e, 0x64, 0x12, 0xf1, 0xe6, 0x44, 0xee, 0xc1, 0x2a, 0xe9, 0x42, 0x61, 0x90, 0x6a, 0x17, 0x26, 0x11, 0xdd, 0x5a, 0x98, 0x67, 0x78, 0x9c, 0x41, 0x90, 0x34, 0x68, 0x84, 0x29, 0xe9, 0x06 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.18", - /* Message to be signed */ - 93, - { 0x9d, 0xc7, 0xce, 0x1d, 0x02, 0xca, 0xdc, 0xf1, 0x0d, 0xf1, 0x11, 0x04, 0x56, 0xb8, 0xa7, 0xa5, 0xea, 0x43, 0x76, 0xb2, 0x7e, 0x8b, 0xf8, 0xcc, 0x8d, 0xb8, 0x10, 0x49, 0xfd, 0xa3, 0xfb, 0xd0, 0xdb, 0x8a, 0x3d, 0x0f, 0x6b, 0xd7, 0x48, 0x6b, 0x8d, 0x84, 0xbf, 0x9f, 0xfd, 0x4b, 0x64, 0x17, 0x52, 0xdf, 0x7e, 0xdf, 0x50, 0x86, 0x5e, 0x8e, 0x58, 0xad, 0x49, 0xf7, 0x24, 0x0e, 0x47, 0xd3, 0xfc, 0x98, 0x5e, 0xdb, 0x59, 0x6d, 0xab, 0xfe, 0x01, 0x72, 0x2a, 0x22, 0x77, 0x60, 0x38, 0x3c, 0xe2, 0x4d, 0x4a, 0x05, 0xd8, 0xb0, 0x6e, 0xf5, 0xb9, 0x6f, 0x11, 0x7d, 0x81 } -, - /* Signature */ - 192, - { 0x05, 0xa9, 0x5e, 0x11, 0xb5, 0xbf, 0xb0, 0x1d, 0xcf, 0xde, 0x3e, 0xfa, 0x9f, 0x31, 0x3d, 0x81, 0xbb, 0x0d, 0xfd, 0x46, 0xde, 0x63, 0xb0, 0x65, 0x80, 0x56, 0xc5, 0x3a, 0xf7, 0xad, 0x9e, 0x89, 0x43, 0x8b, 0x7d, 0xe7, 0x8f, 0xf8, 0xea, 0x88, 0xd0, 0x72, 0xb1, 0x74, 0x9a, 0x52, 0x9f, 0x1c, 0xc9, 0xcf, 0x2c, 0xf3, 0x2e, 0x5a, 0xb7, 0x20, 0xe0, 0x69, 0xb4, 0x90, 0x6d, 0x28, 0x2a, 0x03, 0xdd, 0x78, 0xd1, 0xb3, 0xca, 0x2a, 0x3f, 0x92, 0x5b, 0xf5, 0x1c, 0x74, 0x91, 0xb7, 0x3b, 0xa0, 0xbf, 0x54, 0xd5, 0x0d, 0x97, 0x1d, 0xe5, 0xb2, 0x77, 0x26, 0xd8, 0xfb, 0x3e, 0xe2, 0x77, 0x34, 0x97, 0xdf, 0x35, 0x49, 0x51, 0x7e, 0xed, 0xcd, 0x9d, 0xe6, 0x8d, 0x90, 0xdf, 0x35, 0xd3, 0xf0, 0x50, 0x81, 0x15, 0x1a, 0xda, 0xb5, 0x39, 0x73, 0x85, 0xab, 0xee, 0xa7, 0x2b, 0x69, 0xbd, 0x0d, 0xe1, 0x8d, 0xce, 0xe9, 0xa2, 0xbe, 0x00, 0xe9, 0x1a, 0x03, 0x24, 0x03, 0xb1, 0xf8, 0x1b, 0xbc, 0x0a, 0xe7, 0x31, 0xc6, 0xc0, 0xd9, 0xcf, 0xdd, 0x06, 0xc3, 0x31, 0xed, 0x89, 0xd7, 0xde, 0x1d, 0xe1, 0xdf, 0x46, 0xcf, 0x09, 0xce, 0x53, 0xdf, 0x15, 0x97, 0xfb, 0x69, 0x94, 0x68, 0x1c, 0x7f, 0xbe, 0x94, 0xc9, 0xb0, 0x8e, 0x50, 0xaa, 0x1b, 0x12, 0x41, 0x96, 0x02, 0x98, 0x7f, 0x37, 0xdd } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.19", - /* Message to be signed */ - 253, - { 0x87, 0xa6, 0x45, 0x61, 0x1b, 0xb1, 0x91, 0x85, 0x3f, 0x4f, 0xd9, 0xb7, 0x40, 0xb2, 0xde, 0x4c, 0x16, 0x3e, 0x75, 0x62, 0xb1, 0x17, 0x62, 0x63, 0x3e, 0x72, 0xdf, 0xb6, 0xf6, 0xbe, 0x7e, 0xfb, 0x90, 0x41, 0xa9, 0x65, 0x82, 0x94, 0x3a, 0xb2, 0x01, 0x83, 0x91, 0xc0, 0x5a, 0xdf, 0xab, 0x46, 0x4d, 0xd6, 0xe3, 0x3f, 0x96, 0x0d, 0xdb, 0xf3, 0xb1, 0x7a, 0xc6, 0x2b, 0xb7, 0x8a, 0xfc, 0x1c, 0x6a, 0x45, 0x39, 0x6c, 0x09, 0x08, 0x70, 0x7c, 0x62, 0x36, 0x12, 0x55, 0xcb, 0xf0, 0x9b, 0xad, 0x95, 0x9b, 0x31, 0x33, 0xda, 0x48, 0xd5, 0x32, 0xba, 0x7e, 0xf1, 0xd2, 0x0f, 0xb6, 0x57, 0x2a, 0x1f, 0x0e, 0xd6, 0xf2, 0xc6, 0xe1, 0xbe, 0xc1, 0xb1, 0x7c, 0xc3, 0x19, 0xba, 0xf7, 0x2a, 0x19, 0x8a, 0xa0, 0x01, 0xb8, 0x3d, 0x4e, 0x98, 0x69, 0xc3, 0x40, 0x90, 0xf2, 0x29, 0xa9, 0xc7, 0xf1, 0x42, 0xa7, 0x4e, 0x85, 0xab, 0x3e, 0xd5, 0x1c, 0x69, 0xac, 0x15, 0xfa, 0xb4, 0xab, 0xe4, 0x67, 0x15, 0x73, 0xcf, 0x5a, 0xd2, 0xb5, 0x8e, 0x78, 0xa9, 0x44, 0xed, 0xcc, 0xea, 0xc5, 0xee, 0x58, 0xbf, 0xce, 0x66, 0xf4, 0x0a, 0xac, 0x2a, 0xbe, 0x4e, 0x5f, 0xa0, 0x72, 0xdd, 0x0f, 0x66, 0x4f, 0xac, 0x81, 0x1a, 0xef, 0x08, 0x42, 0x10, 0xe5, 0x64, 0x1b, 0x9c, 0xd0, 0x8c, 0x87, 0x24, 0xf4, 0xb4, 0x1e, 0xed, 0x1d, 0x9d, 0x4a, 0x18, 0x77, 0x80, 0x46, 0x59, 0x7b, 0xd1, 0xa2, 0x7b, 0xbb, 0xc0, 0x56, 0xc1, 0x5e, 0x43, 0xc0, 0x38, 0xef, 0x37, 0x5b, 0x43, 0x5e, 0x73, 0xa7, 0xd3, 0x2f, 0x01, 0x50, 0x16, 0xb7, 0x82, 0x35, 0xce, 0x75, 0xa7, 0xb7, 0x62, 0x04, 0x99, 0x68, 0xe9, 0x93, 0x22, 0x53, 0xe4, 0x2c, 0xa9, 0x76, 0xc8, 0xd8, 0xdc, 0xa1, 0xbb, 0x2d, 0xbf } -, - /* Signature */ - 192, - { 0xb8, 0x80, 0x62, 0x26, 0xfb, 0xd3, 0xd9, 0x7b, 0x79, 0xf0, 0xdd, 0x1d, 0x8c, 0xf9, 0xa2, 0x35, 0xe5, 0x1b, 0x94, 0xb7, 0xe2, 0x23, 0xec, 0x68, 0x33, 0x2d, 0x68, 0x6e, 0xd3, 0x31, 0x3e, 0xd1, 0xbe, 0xf6, 0x88, 0x70, 0x23, 0xaf, 0x7a, 0x5c, 0x99, 0xdf, 0x03, 0x68, 0xa3, 0x49, 0xc6, 0xa5, 0x94, 0x79, 0x5b, 0x62, 0x35, 0x36, 0x10, 0x13, 0x42, 0x69, 0x0d, 0xeb, 0x5f, 0xad, 0x90, 0x23, 0x78, 0x2f, 0x6d, 0xbe, 0x16, 0x43, 0xa4, 0x56, 0x18, 0x57, 0x4f, 0x16, 0x72, 0x81, 0x12, 0xa7, 0xe0, 0xef, 0x9f, 0x58, 0x65, 0x6f, 0x6a, 0xdb, 0xf4, 0x00, 0x40, 0x9f, 0x4a, 0xa5, 0x01, 0x3c, 0x15, 0x9a, 0x36, 0x8c, 0xa5, 0x9b, 0xde, 0x6b, 0x39, 0x18, 0xdf, 0xe1, 0xd8, 0x02, 0xfa, 0x6c, 0xfa, 0x06, 0xc9, 0xca, 0x31, 0xac, 0xa7, 0x8c, 0xb2, 0x63, 0xc8, 0xed, 0x91, 0x7a, 0xf9, 0xa9, 0xa7, 0x95, 0xd5, 0xe2, 0xc4, 0x01, 0xe7, 0x29, 0x96, 0x4c, 0xf7, 0xac, 0x28, 0xcc, 0xdb, 0x36, 0xd9, 0x59, 0xed, 0x7f, 0xd9, 0xaf, 0x1c, 0x47, 0x09, 0x7b, 0x62, 0x55, 0xc6, 0x4e, 0x1b, 0x16, 0xf2, 0x1d, 0x86, 0x87, 0x04, 0x55, 0xd5, 0xf0, 0xbf, 0x90, 0x1f, 0xcc, 0x68, 0xc3, 0x4b, 0x72, 0xc1, 0xbe, 0xe7, 0x2e, 0x6b, 0x8c, 0x4e, 0x36, 0xae, 0x33, 0x99, 0x6c, 0x7a, 0x59, 0xd0, 0x9a } - -} -, -{ - "PKCS#1 v1.5 Signature Example 14.20", - /* Message to be signed */ - 41, - { 0x03, 0x2e, 0x28, 0x3e, 0x59, 0x6e, 0x87, 0xfa, 0xa6, 0xcf, 0xcf, 0xb8, 0xfa, 0x04, 0xdf, 0x6a, 0x61, 0xe6, 0x11, 0xdf, 0xe7, 0x3b, 0xbf, 0x66, 0x8e, 0xe6, 0x7b, 0x49, 0x6b, 0xfb, 0x0f, 0xfb, 0x7f, 0x9d, 0xc9, 0x31, 0xa9, 0x8b, 0xce, 0xdb, 0x25 } -, - /* Signature */ - 192, - { 0xb9, 0xfd, 0xc0, 0x3d, 0xc1, 0x99, 0x70, 0x71, 0x3c, 0x4a, 0x17, 0xe8, 0x7e, 0x7e, 0xbb, 0x5f, 0x13, 0x50, 0x5d, 0x59, 0xcb, 0xb2, 0x2b, 0xa7, 0x2e, 0x9f, 0xf1, 0x6b, 0xdf, 0x8b, 0x65, 0x9c, 0x33, 0x30, 0xa9, 0x3d, 0xcc, 0x09, 0x2a, 0x5d, 0x38, 0x5b, 0x2d, 0x5e, 0x15, 0x34, 0x00, 0x31, 0x46, 0xc0, 0x50, 0xb7, 0xdd, 0xc4, 0xf7, 0x56, 0x56, 0x9d, 0xa2, 0x11, 0x80, 0x15, 0x82, 0x26, 0x61, 0x19, 0xf5, 0x59, 0x9b, 0x1e, 0x65, 0xe8, 0xeb, 0xea, 0x6b, 0xc9, 0x64, 0x42, 0xee, 0x12, 0xac, 0xb9, 0x6c, 0x6d, 0xba, 0x08, 0x3e, 0x92, 0x10, 0x94, 0xda, 0x9c, 0x9e, 0xcf, 0x5a, 0xfa, 0xa5, 0x4b, 0x7f, 0xde, 0x7a, 0x0c, 0xae, 0x3f, 0xdf, 0xe4, 0xd2, 0x51, 0x93, 0x3a, 0x52, 0xf0, 0x2d, 0xc2, 0x3e, 0x1b, 0x32, 0x14, 0xc6, 0x83, 0xe1, 0x9a, 0xf4, 0x6e, 0x18, 0xc7, 0x49, 0x56, 0xdc, 0x6a, 0xb3, 0x50, 0x2d, 0x46, 0xca, 0xac, 0x3c, 0xb2, 0x6b, 0x70, 0x7c, 0xdc, 0x30, 0x25, 0xb6, 0xde, 0x4e, 0x83, 0x54, 0x3b, 0x95, 0x84, 0x5b, 0x4a, 0x15, 0x97, 0x60, 0x77, 0x0a, 0x4b, 0xd0, 0x9e, 0x46, 0x35, 0xa0, 0x4e, 0x21, 0x7d, 0x66, 0x5c, 0x95, 0x94, 0x87, 0x9f, 0x38, 0x1d, 0x71, 0x10, 0x09, 0x34, 0xfa, 0xda, 0x61, 0xc7, 0xcc, 0x22, 0xb8, 0xd2, 0xff, 0x8e, 0xb3, 0x5a } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 15: A 2048-bit RSA key pair", -{ - /* Modulus */ - 256, - { 0xdf, 0x27, 0x1f, 0xd2, 0x5f, 0x86, 0x44, 0x49, 0x6b, 0x0c, 0x81, 0xbe, 0x4b, 0xd5, 0x02, 0x97, 0xef, 0x09, 0x9b, 0x00, 0x2a, 0x6f, 0xd6, 0x77, 0x27, 0xeb, 0x44, 0x9c, 0xea, 0x56, 0x6e, 0xd6, 0xa3, 0x98, 0x1a, 0x71, 0x31, 0x2a, 0x14, 0x1c, 0xab, 0xc9, 0x81, 0x5c, 0x12, 0x09, 0xe3, 0x20, 0xa2, 0x5b, 0x32, 0x46, 0x4e, 0x99, 0x99, 0xf1, 0x8c, 0xa1, 0x3a, 0x9f, 0xd3, 0x89, 0x25, 0x58, 0xf9, 0xe0, 0xad, 0xef, 0xdd, 0x36, 0x50, 0xdd, 0x23, 0xa3, 0xf0, 0x36, 0xd6, 0x0f, 0xe3, 0x98, 0x84, 0x37, 0x06, 0xa4, 0x0b, 0x0b, 0x84, 0x62, 0xc8, 0xbe, 0xe3, 0xbc, 0xe1, 0x2f, 0x1f, 0x28, 0x60, 0xc2, 0x44, 0x4c, 0xdc, 0x6a, 0x44, 0x47, 0x6a, 0x75, 0xff, 0x4a, 0xa2, 0x42, 0x73, 0xcc, 0xbe, 0x3b, 0xf8, 0x02, 0x48, 0x46, 0x5f, 0x8f, 0xf8, 0xc3, 0xa7, 0xf3, 0x36, 0x7d, 0xfc, 0x0d, 0xf5, 0xb6, 0x50, 0x9a, 0x4f, 0x82, 0x81, 0x1c, 0xed, 0xd8, 0x1c, 0xda, 0xaa, 0x73, 0xc4, 0x91, 0xda, 0x41, 0x21, 0x70, 0xd5, 0x44, 0xd4, 0xba, 0x96, 0xb9, 0x7f, 0x0a, 0xfc, 0x80, 0x65, 0x49, 0x8d, 0x3a, 0x49, 0xfd, 0x91, 0x09, 0x92, 0xa1, 0xf0, 0x72, 0x5b, 0xe2, 0x4f, 0x46, 0x5c, 0xfe, 0x7e, 0x0e, 0xab, 0xf6, 0x78, 0x99, 0x6c, 0x50, 0xbc, 0x5e, 0x75, 0x24, 0xab, 0xf7, 0x3f, 0x15, 0xe5, 0xbe, 0xf7, 0xd5, 0x18, 0x39, 0x4e, 0x31, 0x38, 0xce, 0x49, 0x44, 0x50, 0x6a, 0xaa, 0xaf, 0x3f, 0x9b, 0x23, 0x6d, 0xca, 0xb8, 0xfc, 0x00, 0xf8, 0x7a, 0xf5, 0x96, 0xfd, 0xc3, 0xd9, 0xd6, 0xc7, 0x5c, 0xd5, 0x08, 0x36, 0x2f, 0xae, 0x2c, 0xbe, 0xdd, 0xcc, 0x4c, 0x74, 0x50, 0xb1, 0x7b, 0x77, 0x6c, 0x07, 0x9e, 0xcc, 0xa1, 0xf2, 0x56, 0x35, 0x1a, 0x43, 0xb9, 0x7d, 0xbe, 0x21, 0x53 } -, - /* Public exponent */ - 3, - { 0x01, 0x00, 0x01 } -, - /* Exponent */ - 256, - { 0x5b, 0xd9, 0x10, 0x25, 0x78, 0x30, 0xdc, 0xe1, 0x75, 0x20, 0xb0, 0x34, 0x41, 0xa5, 0x1a, 0x8c, 0xab, 0x94, 0x02, 0x0a, 0xc6, 0xec, 0xc2, 0x52, 0xc8, 0x08, 0xf3, 0x74, 0x3c, 0x95, 0xb7, 0xc8, 0x3b, 0x8c, 0x8a, 0xf1, 0xa5, 0x01, 0x43, 0x46, 0xeb, 0xc4, 0x24, 0x2c, 0xdf, 0xb5, 0xd7, 0x18, 0xe3, 0x0a, 0x73, 0x3e, 0x71, 0xf2, 0x91, 0xe4, 0xd4, 0x73, 0xb6, 0x1b, 0xfb, 0xa6, 0xda, 0xca, 0xed, 0x0a, 0x77, 0xbd, 0x1f, 0x09, 0x50, 0xae, 0x3c, 0x91, 0xa8, 0xf9, 0x01, 0x11, 0x88, 0x25, 0x89, 0xe1, 0xd6, 0x27, 0x65, 0xee, 0x67, 0x1e, 0x7b, 0xae, 0xea, 0x30, 0x9f, 0x64, 0xd4, 0x47, 0xbb, 0xcf, 0xa9, 0xea, 0x12, 0xdc, 0xe0, 0x5e, 0x9e, 0xa8, 0x93, 0x9b, 0xc5, 0xfe, 0x61, 0x08, 0x58, 0x12, 0x79, 0xc9, 0x82, 0xb3, 0x08, 0x79, 0x4b, 0x34, 0x48, 0xe7, 0xf7, 0xb9, 0x52, 0x29, 0x2d, 0xf8, 0x8c, 0x80, 0xcb, 0x40, 0x14, 0x2c, 0x4b, 0x5c, 0xf5, 0xf8, 0xdd, 0xaa, 0x08, 0x91, 0x67, 0x8d, 0x61, 0x0e, 0x58, 0x2f, 0xcb, 0x88, 0x0f, 0x0d, 0x70, 0x7c, 0xaf, 0x47, 0xd0, 0x9a, 0x84, 0xe1, 0x4c, 0xa6, 0x58, 0x41, 0xe5, 0xa3, 0xab, 0xc5, 0xe9, 0xdb, 0xa9, 0x40, 0x75, 0xa9, 0x08, 0x43, 0x41, 0xf0, 0xed, 0xad, 0x9b, 0x68, 0xe3, 0xb8, 0xe0, 0x82, 0xb8, 0x0b, 0x6e, 0x6e, 0x8a, 0x05, 0x47, 0xb4, 0x4f, 0xb5, 0x06, 0x1b, 0x6a, 0x91, 0x31, 0x60, 0x3a, 0x55, 0x37, 0xdd, 0xab, 0xd0, 0x1d, 0x8e, 0x86, 0x3d, 0x89, 0x22, 0xe9, 0xaa, 0x3e, 0x4b, 0xfa, 0xea, 0x0b, 0x39, 0xd7, 0x92, 0x83, 0xad, 0x2c, 0xbc, 0x8a, 0x59, 0xcc, 0xe7, 0xa6, 0xec, 0xf4, 0xe4, 0xc8, 0x1e, 0xd4, 0xc6, 0x59, 0x1c, 0x80, 0x7d, 0xef, 0xd7, 0x1a, 0xb0, 0x68, 0x66, 0xbb, 0x5e, 0x77, 0x45 } -, - /* Prime 1 */ - 128, - { 0xf4, 0x4f, 0x5e, 0x42, 0x46, 0x39, 0x1f, 0x48, 0x2b, 0x2f, 0x52, 0x96, 0xe3, 0x60, 0x2e, 0xb3, 0x4a, 0xa1, 0x36, 0x42, 0x77, 0x10, 0xf7, 0xc0, 0x41, 0x6d, 0x40, 0x3f, 0xd6, 0x9d, 0x4b, 0x29, 0x13, 0x0c, 0xfe, 0xbe, 0xf3, 0x4e, 0x88, 0x5a, 0xbd, 0xb1, 0xa8, 0xa0, 0xa5, 0xf0, 0xe9, 0xb5, 0xc3, 0x3e, 0x1f, 0xc3, 0xbf, 0xc2, 0x85, 0xb1, 0xae, 0x17, 0xe4, 0x0c, 0xc6, 0x7a, 0x19, 0x13, 0xdd, 0x56, 0x37, 0x19, 0x81, 0x5e, 0xba, 0xf8, 0x51, 0x4c, 0x2a, 0x7a, 0xa0, 0x01, 0x8e, 0x63, 0xb6, 0xc6, 0x31, 0xdc, 0x31, 0x5a, 0x46, 0x23, 0x57, 0x16, 0x42, 0x3d, 0x11, 0xff, 0x58, 0x03, 0x4e, 0x61, 0x06, 0x45, 0x70, 0x36, 0x06, 0x91, 0x9f, 0x5c, 0x7c, 0xe2, 0x66, 0x0c, 0xd1, 0x48, 0xbd, 0x9e, 0xfc, 0x12, 0x3d, 0x9c, 0x54, 0xb6, 0x70, 0x55, 0x90, 0xd0, 0x06, 0xcf, 0xcf, 0x3f } -, - /* Prime 2 */ - 128, - { 0xe9, 0xd4, 0x98, 0x41, 0xe0, 0xe0, 0xa6, 0xad, 0x0d, 0x51, 0x78, 0x57, 0x13, 0x3e, 0x36, 0xdc, 0x72, 0xc1, 0xbd, 0xd9, 0x0f, 0x91, 0x74, 0xb5, 0x2e, 0x26, 0x57, 0x0f, 0x37, 0x36, 0x40, 0xf1, 0xc1, 0x85, 0xe7, 0xea, 0x8e, 0x2e, 0xd7, 0xf1, 0xe4, 0xeb, 0xb9, 0x51, 0xf7, 0x0a, 0x58, 0x02, 0x36, 0x33, 0xb0, 0x09, 0x7a, 0xec, 0x67, 0xc6, 0xdc, 0xb8, 0x00, 0xfc, 0x1a, 0x67, 0xf9, 0xbb, 0x05, 0x63, 0x61, 0x0f, 0x08, 0xeb, 0xc8, 0x74, 0x6a, 0xd1, 0x29, 0x77, 0x21, 0x36, 0xeb, 0x1d, 0xda, 0xf4, 0x64, 0x36, 0x45, 0x0d, 0x31, 0x83, 0x32, 0xa8, 0x49, 0x82, 0xfe, 0x5d, 0x28, 0xdb, 0xe5, 0xb3, 0xe9, 0x12, 0x40, 0x7c, 0x3e, 0x0e, 0x03, 0x10, 0x0d, 0x87, 0xd4, 0x36, 0xee, 0x40, 0x9e, 0xec, 0x1c, 0xf8, 0x5e, 0x80, 0xab, 0xa0, 0x79, 0xb2, 0xe6, 0x10, 0x6b, 0x97, 0xbc, 0xed } -, - /* Prime exponent 1 */ - 128, - { 0xed, 0x10, 0x2a, 0xcd, 0xb2, 0x68, 0x71, 0x53, 0x4d, 0x1c, 0x41, 0x4e, 0xca, 0xd9, 0xa4, 0xd7, 0x32, 0xfe, 0x95, 0xb1, 0x0e, 0xea, 0x37, 0x0d, 0xa6, 0x2f, 0x05, 0xde, 0x2c, 0x39, 0x3b, 0x1a, 0x63, 0x33, 0x03, 0xea, 0x74, 0x1b, 0x6b, 0x32, 0x69, 0xc9, 0x7f, 0x70, 0x4b, 0x35, 0x27, 0x02, 0xc9, 0xae, 0x79, 0x92, 0x2f, 0x7b, 0xe8, 0xd1, 0x0d, 0xb6, 0x7f, 0x02, 0x6a, 0x81, 0x45, 0xde, 0x41, 0xb3, 0x0c, 0x0a, 0x42, 0xbf, 0x92, 0x3b, 0xac, 0x5f, 0x75, 0x04, 0xc2, 0x48, 0x60, 0x4b, 0x9f, 0xaa, 0x57, 0xed, 0x6b, 0x32, 0x46, 0xc6, 0xba, 0x15, 0x8e, 0x36, 0xc6, 0x44, 0xf8, 0xb9, 0x54, 0x8f, 0xcf, 0x4f, 0x07, 0xe0, 0x54, 0xa5, 0x6f, 0x76, 0x86, 0x74, 0x05, 0x44, 0x40, 0xbc, 0x0d, 0xcb, 0xbc, 0x9b, 0x52, 0x8f, 0x64, 0xa0, 0x17, 0x06, 0xe0, 0x5b, 0x0b, 0x91, 0x10, 0x6f } -, - /* Prime exponent 2 */ - 128, - { 0x68, 0x27, 0x92, 0x4a, 0x85, 0xe8, 0x8b, 0x55, 0xba, 0x00, 0xf8, 0x21, 0x91, 0x28, 0xbd, 0x37, 0x24, 0xc6, 0xb7, 0xd1, 0xdf, 0xe5, 0x62, 0x9e, 0xf1, 0x97, 0x92, 0x5f, 0xec, 0xaf, 0xf5, 0xed, 0xb9, 0xcd, 0xf3, 0xa7, 0xbe, 0xfd, 0x8e, 0xa2, 0xe8, 0xdd, 0x37, 0x07, 0x13, 0x8b, 0x3f, 0xf8, 0x7c, 0x3c, 0x39, 0xc5, 0x7f, 0x43, 0x9e, 0x56, 0x2e, 0x2a, 0xa8, 0x05, 0xa3, 0x9d, 0x7c, 0xd7, 0x99, 0x66, 0xd2, 0xec, 0xe7, 0x84, 0x5f, 0x1d, 0xbc, 0x16, 0xbe, 0xe9, 0x99, 0x99, 0xe4, 0xd0, 0xbf, 0x9e, 0xec, 0xa4, 0x5f, 0xcd, 0xa8, 0xa8, 0x50, 0x00, 0x35, 0xfe, 0x6b, 0x5f, 0x03, 0xbc, 0x2f, 0x6d, 0x1b, 0xfc, 0x4d, 0x4d, 0x0a, 0x37, 0x23, 0x96, 0x1a, 0xf0, 0xcd, 0xce, 0x4a, 0x01, 0xee, 0xc8, 0x2d, 0x7f, 0x54, 0x58, 0xec, 0x19, 0xe7, 0x1b, 0x90, 0xee, 0xef, 0x7d, 0xff, 0x61 } -, - /* Coefficient */ - 128, - { 0x57, 0xb7, 0x38, 0x88, 0xd1, 0x83, 0xa9, 0x9a, 0x63, 0x07, 0x42, 0x22, 0x77, 0x55, 0x1a, 0x3d, 0x9e, 0x18, 0xad, 0xf0, 0x6a, 0x91, 0xe8, 0xb5, 0x5c, 0xef, 0xfe, 0xf9, 0x07, 0x7c, 0x84, 0x96, 0x94, 0x8e, 0xcb, 0x3b, 0x16, 0xb7, 0x81, 0x55, 0xcb, 0x2a, 0x3a, 0x57, 0xc1, 0x19, 0xd3, 0x79, 0x95, 0x1c, 0x01, 0x0a, 0xa6, 0x35, 0xed, 0xcf, 0x62, 0xd8, 0x4c, 0x5a, 0x12, 0x2a, 0x8d, 0x67, 0xab, 0x5f, 0xa9, 0xe5, 0xa4, 0xa8, 0x77, 0x2a, 0x1e, 0x94, 0x3b, 0xaf, 0xc7, 0x0a, 0xe3, 0xa4, 0xc1, 0xf0, 0xf3, 0xa4, 0xdd, 0xff, 0xae, 0xfd, 0x18, 0x92, 0xc8, 0xcb, 0x33, 0xbb, 0x0d, 0x0b, 0x95, 0x90, 0xe9, 0x63, 0xa6, 0x91, 0x10, 0xfb, 0x34, 0xdb, 0x7b, 0x90, 0x6f, 0xc4, 0xba, 0x28, 0x36, 0x99, 0x5a, 0xac, 0x7e, 0x52, 0x74, 0x90, 0xac, 0x95, 0x2a, 0x02, 0x26, 0x8a, 0x4f, 0x18 } - -} -, -{{ - "PKCS#1 v1.5 Signature Example 15.1", - /* Message to be signed */ - 229, - { 0xf4, 0x5d, 0x55, 0xf3, 0x55, 0x51, 0xe9, 0x75, 0xd6, 0xa8, 0xdc, 0x7e, 0xa9, 0xf4, 0x88, 0x59, 0x39, 0x40, 0xcc, 0x75, 0x69, 0x4a, 0x27, 0x8f, 0x27, 0xe5, 0x78, 0xa1, 0x63, 0xd8, 0x39, 0xb3, 0x40, 0x40, 0x84, 0x18, 0x08, 0xcf, 0x9c, 0x58, 0xc9, 0xb8, 0x72, 0x8b, 0xf5, 0xf9, 0xce, 0x8e, 0xe8, 0x11, 0xea, 0x91, 0x71, 0x4f, 0x47, 0xba, 0xb9, 0x2d, 0x0f, 0x6d, 0x5a, 0x26, 0xfc, 0xfe, 0xea, 0x6c, 0xd9, 0x3b, 0x91, 0x0c, 0x0a, 0x2c, 0x96, 0x3e, 0x64, 0xeb, 0x18, 0x23, 0xf1, 0x02, 0x75, 0x3d, 0x41, 0xf0, 0x33, 0x59, 0x10, 0xad, 0x3a, 0x97, 0x71, 0x04, 0xf1, 0xaa, 0xf6, 0xc3, 0x74, 0x27, 0x16, 0xa9, 0x75, 0x5d, 0x11, 0xb8, 0xee, 0xd6, 0x90, 0x47, 0x7f, 0x44, 0x5c, 0x5d, 0x27, 0x20, 0x8b, 0x2e, 0x28, 0x43, 0x30, 0xfa, 0x3d, 0x30, 0x14, 0x23, 0xfa, 0x7f, 0x2d, 0x08, 0x6e, 0x0a, 0xd0, 0xb8, 0x92, 0xb9, 0xdb, 0x54, 0x4e, 0x45, 0x6d, 0x3f, 0x0d, 0xab, 0x85, 0xd9, 0x53, 0xc1, 0x2d, 0x34, 0x0a, 0xa8, 0x73, 0xed, 0xa7, 0x27, 0xc8, 0xa6, 0x49, 0xdb, 0x7f, 0xa6, 0x37, 0x40, 0xe2, 0x5e, 0x9a, 0xf1, 0x53, 0x3b, 0x30, 0x7e, 0x61, 0x32, 0x99, 0x93, 0x11, 0x0e, 0x95, 0x19, 0x4e, 0x03, 0x93, 0x99, 0xc3, 0x82, 0x4d, 0x24, 0xc5, 0x1f, 0x22, 0xb2, 0x6b, 0xde, 0x10, 0x24, 0xcd, 0x39, 0x59, 0x58, 0xa2, 0xdf, 0xeb, 0x48, 0x16, 0xa6, 0xe8, 0xad, 0xed, 0xb5, 0x0b, 0x1f, 0x6b, 0x56, 0xd0, 0xb3, 0x06, 0x0f, 0xf0, 0xf1, 0xc4, 0xcb, 0x0d, 0x0e, 0x00, 0x1d, 0xd5, 0x9d, 0x73, 0xbe, 0x12 } -, - /* Signature */ - 256, - { 0xb7, 0x5a, 0x54, 0x66, 0xb6, 0x5d, 0x0f, 0x30, 0x0e, 0xf5, 0x38, 0x33, 0xf2, 0x17, 0x5c, 0x8a, 0x34, 0x7a, 0x38, 0x04, 0xfc, 0x63, 0x45, 0x1d, 0xc9, 0x02, 0xf0, 0xb7, 0x1f, 0x90, 0x83, 0x45, 0x9e, 0xd3, 0x7a, 0x51, 0x79, 0xa3, 0xb7, 0x23, 0xa5, 0x3f, 0x10, 0x51, 0x64, 0x2d, 0x77, 0x37, 0x4c, 0x4c, 0x6c, 0x8d, 0xbb, 0x1c, 0xa2, 0x05, 0x25, 0xf5, 0xc9, 0xf3, 0x2d, 0xb7, 0x76, 0x95, 0x35, 0x56, 0xda, 0x31, 0x29, 0x0e, 0x22, 0x19, 0x74, 0x82, 0xce, 0xb6, 0x99, 0x06, 0xc4, 0x6a, 0x75, 0x8f, 0xb0, 0xe7, 0x40, 0x9b, 0xa8, 0x01, 0x07, 0x7d, 0x2a, 0x0a, 0x20, 0xea, 0xe7, 0xd1, 0xd6, 0xd3, 0x92, 0xab, 0x49, 0x57, 0xe8, 0x6b, 0x76, 0xf0, 0x65, 0x2d, 0x68, 0xb8, 0x39, 0x88, 0xa7, 0x8f, 0x26, 0xe1, 0x11, 0x72, 0xea, 0x60, 0x9b, 0xf8, 0x49, 0xfb, 0xbd, 0x78, 0xad, 0x7e, 0xdc, 0xe2, 0x1d, 0xe6, 0x62, 0xa0, 0x81, 0x36, 0x8c, 0x04, 0x06, 0x07, 0xce, 0xe2, 0x9d, 0xb0, 0x62, 0x72, 0x27, 0xf4, 0x49, 0x63, 0xad, 0x17, 0x1d, 0x22, 0x93, 0xb6, 0x33, 0xa3, 0x92, 0xe3, 0x31, 0xdc, 0xa5, 0x4f, 0xe3, 0x08, 0x27, 0x52, 0xf4, 0x3f, 0x63, 0xc1, 0x61, 0xb4, 0x47, 0xa4, 0xc6, 0x5a, 0x68, 0x75, 0x67, 0x0d, 0x5f, 0x66, 0x00, 0xfc, 0xc8, 0x60, 0xa1, 0xca, 0xeb, 0x0a, 0x88, 0xf8, 0xfd, 0xec, 0x4e, 0x56, 0x43, 0x98, 0xa5, 0xc4, 0x6c, 0x87, 0xf6, 0x8c, 0xe0, 0x70, 0x01, 0xf6, 0x21, 0x3a, 0xbe, 0x0a, 0xb5, 0x62, 0x5f, 0x87, 0xd1, 0x90, 0x25, 0xf0, 0x8d, 0x81, 0xda, 0xc7, 0xbd, 0x45, 0x86, 0xbc, 0x93, 0x82, 0x19, 0x1f, 0x6d, 0x28, 0x80, 0xf6, 0x22, 0x7e, 0x5d, 0xf3, 0xee, 0xd2, 0x1e, 0x77, 0x92, 0xd2, 0x49, 0x48, 0x04, 0x87, 0xf3, 0x65, 0x52, 0x61 } - -} -, -#ifdef LTC_TEST_EXT -{ - "PKCS#1 v1.5 Signature Example 15.2", - /* Message to be signed */ - 153, - { 0xc1, 0x4b, 0x4c, 0x60, 0x75, 0xb2, 0xf9, 0xaa, 0xd6, 0x61, 0xde, 0xf4, 0xec, 0xfd, 0x3c, 0xb9, 0x33, 0xc6, 0x23, 0xf4, 0xe6, 0x3b, 0xf5, 0x34, 0x10, 0xd2, 0xf0, 0x16, 0xd1, 0xab, 0x98, 0xe2, 0x72, 0x9e, 0xcc, 0xf8, 0x00, 0x6c, 0xd8, 0xe0, 0x80, 0x50, 0x73, 0x7d, 0x95, 0xfd, 0xbf, 0x29, 0x6b, 0x66, 0xf5, 0xb9, 0x79, 0x2a, 0x90, 0x29, 0x36, 0xc4, 0xf7, 0xac, 0x69, 0xf5, 0x14, 0x53, 0xce, 0x43, 0x69, 0x45, 0x2d, 0xc2, 0x2d, 0x96, 0xf0, 0x37, 0x74, 0x81, 0x14, 0x66, 0x20, 0x00, 0xdd, 0x9c, 0xd3, 0xa5, 0xe1, 0x79, 0xf4, 0xe0, 0xf8, 0x1f, 0xa6, 0xa0, 0x31, 0x1c, 0xa1, 0xae, 0xe6, 0x51, 0x9a, 0x0f, 0x63, 0xce, 0xc7, 0x8d, 0x27, 0xbb, 0x72, 0x63, 0x93, 0xfb, 0x7f, 0x1f, 0x88, 0xcd, 0xe7, 0xc9, 0x7f, 0x8a, 0x66, 0xcd, 0x66, 0x30, 0x12, 0x81, 0xda, 0xc3, 0xf3, 0xa4, 0x33, 0x24, 0x8c, 0x75, 0xd6, 0xc2, 0xdc, 0xd7, 0x08, 0xb6, 0xa9, 0x7b, 0x0a, 0x3f, 0x32, 0x5e, 0x0b, 0x29, 0x64, 0xf8, 0xa5, 0x81, 0x9e, 0x47, 0x9b } -, - /* Signature */ - 256, - { 0xaf, 0xa7, 0x34, 0x34, 0x62, 0xbe, 0xa1, 0x22, 0xcc, 0x14, 0x9f, 0xca, 0x70, 0xab, 0xda, 0xe7, 0x94, 0x46, 0x67, 0x7d, 0xb5, 0x37, 0x36, 0x66, 0xaf, 0x7d, 0xc3, 0x13, 0x01, 0x5f, 0x4d, 0xe7, 0x86, 0xe6, 0xe3, 0x94, 0x94, 0x6f, 0xad, 0x3c, 0xc0, 0xe2, 0xb0, 0x2b, 0xed, 0xba, 0x50, 0x47, 0xfe, 0x9e, 0x2d, 0x7d, 0x09, 0x97, 0x05, 0xe4, 0xa3, 0x9f, 0x28, 0x68, 0x32, 0x79, 0xcf, 0x0a, 0xc8, 0x5c, 0x15, 0x30, 0x41, 0x22, 0x42, 0xc0, 0xe9, 0x18, 0x95, 0x3b, 0xe0, 0x00, 0xe9, 0x39, 0xcf, 0x3b, 0xf1, 0x82, 0x52, 0x5e, 0x19, 0x93, 0x70, 0xfa, 0x79, 0x07, 0xeb, 0xa6, 0x9d, 0x5d, 0xb4, 0x63, 0x10, 0x17, 0xc0, 0xe3, 0x6d, 0xf7, 0x03, 0x79, 0xb5, 0xdb, 0x8d, 0x4c, 0x69, 0x5a, 0x97, 0x9a, 0x8e, 0x61, 0x73, 0x22, 0x40, 0x65, 0xd7, 0xdc, 0x15, 0x13, 0x2e, 0xf2, 0x8c, 0xd8, 0x22, 0x79, 0x51, 0x63, 0x06, 0x3b, 0x54, 0xc6, 0x51, 0x14, 0x1b, 0xe8, 0x6d, 0x36, 0xe3, 0x67, 0x35, 0xbc, 0x61, 0xf3, 0x1f, 0xca, 0x57, 0x4e, 0x53, 0x09, 0xf3, 0xa3, 0xbb, 0xdf, 0x91, 0xef, 0xf1, 0x2b, 0x99, 0xe9, 0xcc, 0x17, 0x44, 0xf1, 0xee, 0x9a, 0x1b, 0xd2, 0x2c, 0x5b, 0xad, 0x96, 0xad, 0x48, 0x19, 0x29, 0x25, 0x1f, 0x03, 0x43, 0xfd, 0x36, 0xbc, 0xf0, 0xac, 0xde, 0x7f, 0x11, 0xe5, 0xad, 0x60, 0x97, 0x77, 0x21, 0x20, 0x27, 0x96, 0xfe, 0x06, 0x1f, 0x9a, 0xda, 0x1f, 0xc4, 0xc8, 0xe0, 0x0d, 0x60, 0x22, 0xa8, 0x35, 0x75, 0x85, 0xff, 0xe9, 0xfd, 0xd5, 0x93, 0x31, 0xa2, 0x8c, 0x4a, 0xa3, 0x12, 0x15, 0x88, 0xfb, 0x6c, 0xf6, 0x83, 0x96, 0xd8, 0xac, 0x05, 0x46, 0x59, 0x95, 0x00, 0xc9, 0x70, 0x85, 0x00, 0xa5, 0x97, 0x2b, 0xd5, 0x4f, 0x72, 0xcf, 0x8d, 0xb0, 0xc8 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.3", - /* Message to be signed */ - 243, - { 0xd0, 0x23, 0x71, 0xad, 0x7e, 0xe4, 0x8b, 0xbf, 0xdb, 0x27, 0x63, 0xde, 0x7a, 0x84, 0x3b, 0x94, 0x08, 0xce, 0x5e, 0xb5, 0xab, 0xf8, 0x47, 0xca, 0x3d, 0x73, 0x59, 0x86, 0xdf, 0x84, 0xe9, 0x06, 0x0b, 0xdb, 0xcd, 0xd3, 0xa5, 0x5b, 0xa5, 0x5d, 0xde, 0x20, 0xd4, 0x76, 0x1e, 0x1a, 0x21, 0xd2, 0x25, 0xc1, 0xa1, 0x86, 0xf4, 0xac, 0x4b, 0x30, 0x19, 0xd3, 0xad, 0xf7, 0x8f, 0xe6, 0x33, 0x46, 0x67, 0xf5, 0x6f, 0x70, 0xc9, 0x01, 0xa0, 0xa2, 0x70, 0x0c, 0x6f, 0x0d, 0x56, 0xad, 0xd7, 0x19, 0x59, 0x2d, 0xc8, 0x8f, 0x6d, 0x23, 0x06, 0xc7, 0x00, 0x9f, 0x6e, 0x7a, 0x63, 0x5b, 0x4c, 0xb3, 0xa5, 0x02, 0xdf, 0xe6, 0x8d, 0xdc, 0x58, 0xd0, 0x3b, 0xe1, 0x0a, 0x11, 0x70, 0x00, 0x4f, 0xe7, 0x4d, 0xd3, 0xe4, 0x6b, 0x82, 0x59, 0x1f, 0xf7, 0x54, 0x14, 0xf0, 0xc4, 0xa0, 0x3e, 0x60, 0x5e, 0x20, 0x52, 0x4f, 0x24, 0x16, 0xf1, 0x2e, 0xca, 0x58, 0x9f, 0x11, 0x1b, 0x75, 0xd6, 0x39, 0xc6, 0x1b, 0xaa, 0x80, 0xca, 0xfd, 0x05, 0xcf, 0x35, 0x00, 0x24, 0x4a, 0x21, 0x9e, 0xd9, 0xce, 0xd9, 0xf0, 0xb1, 0x02, 0x97, 0x18, 0x2b, 0x65, 0x3b, 0x52, 0x6f, 0x40, 0x0f, 0x29, 0x53, 0xba, 0x21, 0x4d, 0x5b, 0xcd, 0x47, 0x88, 0x41, 0x32, 0x87, 0x2a, 0xe9, 0x0d, 0x4d, 0x6b, 0x1f, 0x42, 0x15, 0x39, 0xf9, 0xf3, 0x46, 0x62, 0xa5, 0x6d, 0xc0, 0xe7, 0xb4, 0xb9, 0x23, 0xb6, 0x23, 0x1e, 0x30, 0xd2, 0x67, 0x67, 0x97, 0x81, 0x7f, 0x7c, 0x33, 0x7b, 0x5a, 0xc8, 0x24, 0xba, 0x93, 0x14, 0x3b, 0x33, 0x81, 0xfa, 0x3d, 0xce, 0x0e, 0x6a, 0xeb, 0xd3, 0x8e, 0x67, 0x73, 0x51, 0x87, 0xb1, 0xeb, 0xd9, 0x5c, 0x02 } -, - /* Signature */ - 256, - { 0x3b, 0xac, 0x63, 0xf8, 0x6e, 0x3b, 0x70, 0x27, 0x12, 0x03, 0x10, 0x6b, 0x9c, 0x79, 0xaa, 0xbd, 0x9f, 0x47, 0x7c, 0x56, 0xe4, 0xee, 0x58, 0xa4, 0xfc, 0xe5, 0xba, 0xf2, 0xca, 0xb4, 0x96, 0x0f, 0x88, 0x39, 0x1c, 0x9c, 0x23, 0x69, 0x8b, 0xe7, 0x5c, 0x99, 0xae, 0xdf, 0x9e, 0x1a, 0xbf, 0x17, 0x05, 0xbe, 0x1d, 0xac, 0x33, 0x14, 0x0a, 0xdb, 0x48, 0xeb, 0x31, 0xf4, 0x50, 0xbb, 0x9e, 0xfe, 0x83, 0xb7, 0xb9, 0x0d, 0xb7, 0xf1, 0x57, 0x6d, 0x33, 0xf4, 0x0c, 0x1c, 0xba, 0x4b, 0x8d, 0x6b, 0x1d, 0x33, 0x23, 0x56, 0x4b, 0x0f, 0x17, 0x74, 0x11, 0x4f, 0xa7, 0xc0, 0x8e, 0x6d, 0x1e, 0x20, 0xdd, 0x8f, 0xbb, 0xa9, 0xb6, 0xac, 0x7a, 0xd4, 0x1e, 0x26, 0xb4, 0x56, 0x8f, 0x4a, 0x8a, 0xac, 0xbf, 0xd1, 0x78, 0xa8, 0xf8, 0xd2, 0xc9, 0xd5, 0xf5, 0xb8, 0x81, 0x12, 0x93, 0x5a, 0x8b, 0xc9, 0xae, 0x32, 0xcd, 0xa4, 0x0b, 0x8d, 0x20, 0x37, 0x55, 0x10, 0x73, 0x50, 0x96, 0x53, 0x68, 0x18, 0xce, 0x2b, 0x2d, 0xb7, 0x1a, 0x97, 0x72, 0xc9, 0xb0, 0xdd, 0xa0, 0x9a, 0xe1, 0x01, 0x52, 0xfa, 0x11, 0x46, 0x62, 0x18, 0xd0, 0x91, 0xb5, 0x3d, 0x92, 0x54, 0x30, 0x61, 0xb7, 0x29, 0x4a, 0x55, 0xbe, 0x82, 0xff, 0x35, 0xd5, 0xc3, 0x2f, 0xa2, 0x33, 0xf0, 0x5a, 0xaa, 0xc7, 0x58, 0x50, 0x30, 0x7e, 0xcf, 0x81, 0x38, 0x3c, 0x11, 0x16, 0x74, 0x39, 0x7b, 0x1a, 0x1b, 0x9d, 0x3b, 0xf7, 0x61, 0x2c, 0xcb, 0xe5, 0xba, 0xcd, 0x2b, 0x38, 0xf0, 0xa9, 0x83, 0x97, 0xb2, 0x4c, 0x83, 0x65, 0x8f, 0xb6, 0xc0, 0xb4, 0x14, 0x0e, 0xf1, 0x19, 0x70, 0xc4, 0x63, 0x0d, 0x44, 0x34, 0x4e, 0x76, 0xea, 0xed, 0x74, 0xdc, 0xbe, 0xe8, 0x11, 0xdb, 0xf6, 0x57, 0x59, 0x41, 0xf0, 0x8a, 0x65, 0x23, 0xb8 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.4", - /* Message to be signed */ - 58, - { 0x29, 0x03, 0x55, 0x84, 0xab, 0x7e, 0x02, 0x26, 0xa9, 0xec, 0x4b, 0x02, 0xe8, 0xdc, 0xf1, 0x27, 0x2d, 0xc9, 0xa4, 0x1d, 0x73, 0xe2, 0x82, 0x00, 0x07, 0xb0, 0xf6, 0xe2, 0x1f, 0xec, 0xcd, 0x5b, 0xd9, 0xdb, 0xb9, 0xef, 0x88, 0xcd, 0x67, 0x58, 0x76, 0x9e, 0xe1, 0xf9, 0x56, 0xda, 0x7a, 0xd1, 0x84, 0x41, 0xde, 0x6f, 0xab, 0x83, 0x86, 0xdb, 0xc6, 0x93 } -, - /* Signature */ - 256, - { 0x28, 0xd8, 0xe3, 0xfc, 0xd5, 0xdd, 0xdb, 0x21, 0xff, 0xbd, 0x8d, 0xf1, 0x63, 0x0d, 0x73, 0x77, 0xaa, 0x26, 0x51, 0xe1, 0x4c, 0xad, 0x1c, 0x0e, 0x43, 0xcc, 0xc5, 0x2f, 0x90, 0x7f, 0x94, 0x6d, 0x66, 0xde, 0x72, 0x54, 0xe2, 0x7a, 0x6c, 0x19, 0x0e, 0xb0, 0x22, 0xee, 0x89, 0xec, 0xf6, 0x22, 0x4b, 0x09, 0x7b, 0x71, 0x06, 0x8c, 0xd6, 0x07, 0x28, 0xa1, 0xae, 0xd6, 0x4b, 0x80, 0xe5, 0x45, 0x7b, 0xd3, 0x10, 0x6d, 0xd9, 0x17, 0x06, 0xc9, 0x37, 0xc9, 0x79, 0x5f, 0x2b, 0x36, 0x36, 0x7f, 0xf1, 0x53, 0xdc, 0x25, 0x19, 0xa8, 0xdb, 0x9b, 0xdf, 0x2c, 0x80, 0x74, 0x30, 0xc4, 0x51, 0xde, 0x17, 0xbb, 0xcd, 0x0c, 0xe7, 0x82, 0xb3, 0xe8, 0xf1, 0x02, 0x4d, 0x90, 0x62, 0x4d, 0xea, 0x7f, 0x1e, 0xed, 0xc7, 0x42, 0x0b, 0x7e, 0x7c, 0xaa, 0x65, 0x77, 0xce, 0xf4, 0x31, 0x41, 0xa7, 0x26, 0x42, 0x06, 0x58, 0x0e, 0x44, 0xa1, 0x67, 0xdf, 0x5e, 0x41, 0xee, 0xa0, 0xe6, 0x9a, 0x80, 0x54, 0x54, 0xc4, 0x0e, 0xef, 0xc1, 0x3f, 0x48, 0xe4, 0x23, 0xd7, 0xa3, 0x2d, 0x02, 0xed, 0x42, 0xc0, 0xab, 0x03, 0xd0, 0xa7, 0xcf, 0x70, 0xc5, 0x86, 0x0a, 0xc9, 0x2e, 0x03, 0xee, 0x00, 0x5b, 0x60, 0xff, 0x35, 0x03, 0x42, 0x4b, 0x98, 0xcc, 0x89, 0x45, 0x68, 0xc7, 0xc5, 0x6a, 0x02, 0x33, 0x55, 0x1c, 0xeb, 0xe5, 0x88, 0xcf, 0x8b, 0x01, 0x67, 0xb7, 0xdf, 0x13, 0xad, 0xca, 0xd8, 0x28, 0x67, 0x68, 0x10, 0x49, 0x9c, 0x70, 0x4d, 0xa7, 0xae, 0x23, 0x41, 0x4d, 0x69, 0xe3, 0xc0, 0xd2, 0xdb, 0x5d, 0xcb, 0xc2, 0x61, 0x3b, 0xc1, 0x20, 0x42, 0x1f, 0x9e, 0x36, 0x53, 0xc5, 0xa8, 0x76, 0x72, 0x97, 0x64, 0x3c, 0x7e, 0x07, 0x40, 0xde, 0x01, 0x63, 0x55, 0x45, 0x3d, 0x6c, 0x95, 0xae, 0x72 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.5", - /* Message to be signed */ - 14, - { 0xbd, 0xa3, 0xa1, 0xc7, 0x90, 0x59, 0xea, 0xe5, 0x98, 0x30, 0x8d, 0x3d, 0xf6, 0x09 } -, - /* Signature */ - 256, - { 0xa1, 0x56, 0x17, 0x6c, 0xb9, 0x67, 0x77, 0xc7, 0xfb, 0x96, 0x10, 0x5d, 0xbd, 0x91, 0x3b, 0xc4, 0xf7, 0x40, 0x54, 0xf6, 0x80, 0x7c, 0x60, 0x08, 0xa1, 0xa9, 0x56, 0xea, 0x92, 0xc1, 0xf8, 0x1c, 0xb8, 0x97, 0xdc, 0x4b, 0x92, 0xef, 0x9f, 0x4e, 0x40, 0x66, 0x8d, 0xc7, 0xc5, 0x56, 0x90, 0x1a, 0xcb, 0x6c, 0xf2, 0x69, 0xfe, 0x61, 0x5b, 0x0f, 0xb7, 0x2b, 0x30, 0xa5, 0x13, 0x38, 0x69, 0x23, 0x14, 0xb0, 0xe5, 0x87, 0x8a, 0x88, 0xc2, 0xc7, 0x77, 0x4b, 0xd1, 0x69, 0x39, 0xb5, 0xab, 0xd8, 0x2b, 0x44, 0x29, 0xd6, 0x7b, 0xd7, 0xac, 0x8e, 0x5e, 0xa7, 0xfe, 0x92, 0x4e, 0x20, 0xa6, 0xec, 0x66, 0x22, 0x91, 0xf2, 0x54, 0x8d, 0x73, 0x4f, 0x66, 0x34, 0x86, 0x8b, 0x03, 0x9a, 0xa5, 0xf9, 0xd4, 0xd9, 0x06, 0xb2, 0xd0, 0xcb, 0x85, 0x85, 0xbf, 0x42, 0x85, 0x47, 0xaf, 0xc9, 0x1c, 0x6e, 0x20, 0x52, 0xdd, 0xcd, 0x00, 0x1c, 0x3e, 0xf8, 0xc8, 0xee, 0xfc, 0x3b, 0x6b, 0x2a, 0x82, 0xb6, 0xf9, 0xc8, 0x8c, 0x56, 0xf2, 0xe2, 0xc3, 0xcb, 0x0b, 0xe4, 0xb8, 0x0d, 0xa9, 0x5e, 0xba, 0x37, 0x1d, 0x8b, 0x5f, 0x60, 0xf9, 0x25, 0x38, 0x74, 0x3d, 0xdb, 0xb5, 0xda, 0x29, 0x72, 0xc7, 0x1f, 0xe7, 0xb9, 0xf1, 0xb7, 0x90, 0x26, 0x8a, 0x0e, 0x77, 0x0f, 0xc5, 0xeb, 0x4d, 0x5d, 0xd8, 0x52, 0x47, 0xd4, 0x8a, 0xe2, 0xec, 0x3f, 0x26, 0x25, 0x5a, 0x39, 0x85, 0x52, 0x02, 0x06, 0xa1, 0xf2, 0x68, 0xe4, 0x83, 0xe9, 0xdb, 0xb1, 0xd5, 0xca, 0xb1, 0x90, 0x91, 0x76, 0x06, 0xde, 0x31, 0xe7, 0xc5, 0x18, 0x2d, 0x8f, 0x15, 0x1b, 0xf4, 0x1d, 0xfe, 0xcc, 0xae, 0xd7, 0xcd, 0xe6, 0x90, 0xb2, 0x16, 0x47, 0x10, 0x6b, 0x49, 0x0c, 0x72, 0x9d, 0x54, 0xa8, 0xfe, 0x28, 0x02, 0xa6, 0xd1, 0x26 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.6", - /* Message to be signed */ - 97, - { 0xc1, 0x87, 0x91, 0x5e, 0x4e, 0x87, 0xda, 0x81, 0xc0, 0x8e, 0xd4, 0x35, 0x6a, 0x0c, 0xce, 0xac, 0x1c, 0x4f, 0xb5, 0xc0, 0x46, 0xb4, 0x52, 0x81, 0xb3, 0x87, 0xec, 0x28, 0xf1, 0xab, 0xfd, 0x56, 0x7e, 0x54, 0x6b, 0x23, 0x6b, 0x37, 0xd0, 0x1a, 0xe7, 0x1d, 0x3b, 0x28, 0x34, 0x36, 0x5d, 0x3d, 0xf3, 0x80, 0xb7, 0x50, 0x61, 0xb7, 0x36, 0xb0, 0x13, 0x0b, 0x07, 0x0b, 0xe5, 0x8a, 0xe8, 0xa4, 0x6d, 0x12, 0x16, 0x63, 0x61, 0xb6, 0x13, 0xdb, 0xc4, 0x7d, 0xfa, 0xeb, 0x4c, 0xa7, 0x46, 0x45, 0x6c, 0x2e, 0x88, 0x83, 0x85, 0x52, 0x5c, 0xca, 0x9d, 0xd1, 0xc3, 0xc7, 0xa9, 0xad, 0xa7, 0x6d, 0x6c } -, - /* Signature */ - 256, - { 0x9c, 0xab, 0x74, 0x16, 0x36, 0x08, 0x66, 0x9f, 0x75, 0x55, 0xa3, 0x33, 0xcf, 0x19, 0x6f, 0xe3, 0xa0, 0xe9, 0xe5, 0xeb, 0x1a, 0x32, 0xd3, 0x4b, 0xb5, 0xc8, 0x5f, 0xf6, 0x89, 0xaa, 0xab, 0x0e, 0x3e, 0x65, 0x66, 0x8e, 0xd3, 0xb1, 0x15, 0x3f, 0x94, 0xeb, 0x3d, 0x8b, 0xe3, 0x79, 0xb8, 0xee, 0xf0, 0x07, 0xc4, 0xa0, 0x2c, 0x70, 0x71, 0xce, 0x30, 0xd8, 0xbb, 0x34, 0x1e, 0x58, 0xc6, 0x20, 0xf7, 0x3d, 0x37, 0xb4, 0xec, 0xbf, 0x48, 0xbe, 0x29, 0x4f, 0x6c, 0x9e, 0x0e, 0xcb, 0x5e, 0x63, 0xfe, 0xc4, 0x1f, 0x12, 0x0e, 0x55, 0x53, 0xdf, 0xa0, 0xeb, 0xeb, 0xbb, 0x72, 0x64, 0x0a, 0x95, 0x37, 0xba, 0xdc, 0xb4, 0x51, 0x33, 0x02, 0x29, 0xd9, 0xf7, 0x10, 0xf6, 0x2e, 0x3e, 0xd8, 0xec, 0x78, 0x4e, 0x50, 0xee, 0x1d, 0x92, 0x62, 0xb4, 0x26, 0x71, 0x34, 0x00, 0x11, 0xd7, 0xd0, 0x98, 0xc6, 0xf2, 0x55, 0x7b, 0x21, 0x31, 0xfa, 0x9b, 0xd0, 0x25, 0x46, 0x36, 0x59, 0x7e, 0x88, 0xec, 0xb3, 0x5a, 0x24, 0x0e, 0xf0, 0xfd, 0x85, 0x95, 0x71, 0x24, 0xdf, 0x80, 0x80, 0xfe, 0xe1, 0xe1, 0x49, 0xaf, 0x93, 0x99, 0x89, 0xe8, 0x6b, 0x26, 0xc8, 0x5a, 0x58, 0x81, 0xfa, 0xe8, 0x67, 0x3d, 0x9f, 0xd4, 0x08, 0x00, 0xdd, 0x13, 0x4e, 0xb9, 0xbd, 0xb6, 0x41, 0x0f, 0x42, 0x0b, 0x0a, 0xa9, 0x7b, 0x20, 0xef, 0xcf, 0x2e, 0xb0, 0xc8, 0x07, 0xfa, 0xeb, 0x83, 0xa3, 0xcc, 0xd9, 0xb5, 0x1d, 0x45, 0x53, 0xe4, 0x1d, 0xfc, 0x0d, 0xf6, 0xca, 0x80, 0xa1, 0xe8, 0x1d, 0xc2, 0x34, 0xbb, 0x83, 0x89, 0xdd, 0x19, 0x5a, 0x38, 0xb4, 0x2d, 0xe4, 0xed, 0xc4, 0x9d, 0x34, 0x64, 0x78, 0xb9, 0xf1, 0x1f, 0x05, 0x57, 0x20, 0x5f, 0x5b, 0x0b, 0xd7, 0xff, 0xe9, 0xc8, 0x50, 0xf3, 0x96, 0xd7, 0xc4 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.7", - /* Message to be signed */ - 121, - { 0xab, 0xfa, 0x2e, 0xcb, 0x7d, 0x29, 0xbd, 0x5b, 0xcb, 0x99, 0x31, 0xce, 0x2b, 0xad, 0x2f, 0x74, 0x38, 0x3e, 0x95, 0x68, 0x3c, 0xee, 0x11, 0x02, 0x2f, 0x08, 0xe8, 0xe7, 0xd0, 0xb8, 0xfa, 0x05, 0x8b, 0xf9, 0xeb, 0x7e, 0xb5, 0xf9, 0x88, 0x68, 0xb5, 0xbb, 0x1f, 0xb5, 0xc3, 0x1c, 0xed, 0xa3, 0xa6, 0x4f, 0x1a, 0x12, 0xcd, 0xf2, 0x0f, 0xcd, 0x0e, 0x5a, 0x24, 0x6d, 0x7a, 0x17, 0x73, 0xd8, 0xdb, 0xa0, 0xe3, 0xb2, 0x77, 0x54, 0x5b, 0xab, 0xe5, 0x8f, 0x2b, 0x96, 0xe3, 0xf4, 0xed, 0xc1, 0x8e, 0xab, 0xf5, 0xcd, 0x2a, 0x56, 0x0f, 0xca, 0x75, 0xfe, 0x96, 0xe0, 0x7d, 0x85, 0x9d, 0xef, 0xb2, 0x56, 0x4f, 0x3a, 0x34, 0xf1, 0x6f, 0x11, 0xe9, 0x1b, 0x3a, 0x71, 0x7b, 0x41, 0xaf, 0x53, 0xf6, 0x60, 0x53, 0x23, 0x00, 0x1a, 0xa4, 0x06, 0xc6 } -, - /* Signature */ - 256, - { 0xc4, 0xb4, 0x37, 0xbc, 0xf7, 0x03, 0xf3, 0x52, 0xe1, 0xfa, 0xf7, 0x4e, 0xb9, 0x62, 0x20, 0x39, 0x42, 0x6b, 0x56, 0x72, 0xca, 0xf2, 0xa7, 0xb3, 0x81, 0xc6, 0xc4, 0xf0, 0x19, 0x1e, 0x7e, 0x4a, 0x98, 0xf0, 0xee, 0xbc, 0xd6, 0xf4, 0x17, 0x84, 0xc2, 0x53, 0x7f, 0xf0, 0xf9, 0x9e, 0x74, 0x98, 0x2c, 0x87, 0x20, 0x1b, 0xfb, 0xc6, 0x5e, 0xae, 0x83, 0x2d, 0xb7, 0x1d, 0x16, 0xda, 0xca, 0xdb, 0x09, 0x77, 0xe5, 0xc5, 0x04, 0x67, 0x9e, 0x40, 0xbe, 0x0f, 0x9d, 0xb0, 0x6f, 0xfd, 0x84, 0x8d, 0xd2, 0xe5, 0xc3, 0x8a, 0x7e, 0xc0, 0x21, 0xe7, 0xf6, 0x8c, 0x47, 0xdf, 0xd3, 0x8c, 0xc3, 0x54, 0x49, 0x3d, 0x53, 0x39, 0xb4, 0x59, 0x5a, 0x5b, 0xf3, 0x1e, 0x3f, 0x8f, 0x13, 0x81, 0x68, 0x07, 0x37, 0x3d, 0xf6, 0xad, 0x0d, 0xc7, 0xe7, 0x31, 0xe5, 0x1a, 0xd1, 0x9e, 0xb4, 0x75, 0x4b, 0x13, 0x44, 0x85, 0x84, 0x2f, 0xe7, 0x09, 0xd3, 0x78, 0x44, 0x4d, 0x8e, 0x36, 0xb1, 0x72, 0x4a, 0x4f, 0xda, 0x21, 0xca, 0xfe, 0xe6, 0x53, 0xab, 0x80, 0x74, 0x7f, 0x79, 0x52, 0xee, 0x80, 0x4d, 0xea, 0xb1, 0x03, 0x9d, 0x84, 0x13, 0x99, 0x45, 0xbb, 0xf4, 0xbe, 0x82, 0x00, 0x87, 0x53, 0xf3, 0xc5, 0x4c, 0x78, 0x21, 0xa1, 0xd2, 0x41, 0xf4, 0x21, 0x79, 0xc7, 0x94, 0xef, 0x70, 0x42, 0xbb, 0xf9, 0x95, 0x56, 0x56, 0x22, 0x2e, 0x45, 0xc3, 0x43, 0x69, 0xa3, 0x84, 0x69, 0x7b, 0x6a, 0xe7, 0x42, 0xe1, 0x8f, 0xa5, 0xca, 0x7a, 0xba, 0xd2, 0x7d, 0x9f, 0xe7, 0x10, 0x52, 0xe3, 0x31, 0x0d, 0x0f, 0x52, 0xc8, 0xd1, 0x2e, 0xa3, 0x3b, 0xf0, 0x53, 0xa3, 0x00, 0xf4, 0xaf, 0xc4, 0xf0, 0x98, 0xdf, 0x4e, 0x6d, 0x88, 0x67, 0x79, 0xd6, 0x45, 0x94, 0xd3, 0x69, 0x15, 0x8f, 0xdb, 0xc1, 0xf6, 0x94 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.8", - /* Message to be signed */ - 224, - { 0xdf, 0x40, 0x44, 0xa8, 0x9a, 0x83, 0xe9, 0xfc, 0xbf, 0x12, 0x62, 0x54, 0x0a, 0xe3, 0x03, 0x8b, 0xbc, 0x90, 0xf2, 0xb2, 0x62, 0x8b, 0xf2, 0xa4, 0x46, 0x7a, 0xc6, 0x77, 0x22, 0xd8, 0x54, 0x6b, 0x3a, 0x71, 0xcb, 0x0e, 0xa4, 0x16, 0x69, 0xd5, 0xb4, 0xd6, 0x18, 0x59, 0xc1, 0xb4, 0xe4, 0x7c, 0xec, 0xc5, 0x93, 0x3f, 0x75, 0x7e, 0xc8, 0x6d, 0xb0, 0x64, 0x4e, 0x31, 0x18, 0x12, 0xd0, 0x0f, 0xb8, 0x02, 0xf0, 0x34, 0x00, 0x63, 0x9c, 0x0e, 0x36, 0x4d, 0xae, 0x5a, 0xeb, 0xc5, 0x79, 0x1b, 0xc6, 0x55, 0x76, 0x23, 0x61, 0xbc, 0x43, 0xc5, 0x3d, 0x3c, 0x78, 0x86, 0x76, 0x8f, 0x79, 0x68, 0xc1, 0xc5, 0x44, 0xc6, 0xf7, 0x9f, 0x7b, 0xe8, 0x20, 0xc7, 0xe2, 0xbd, 0x2f, 0x9d, 0x73, 0xe6, 0x2d, 0xed, 0x6d, 0x2e, 0x93, 0x7e, 0x6a, 0x6d, 0xae, 0xf9, 0x0e, 0xe3, 0x7a, 0x1a, 0x52, 0xa5, 0x4f, 0x00, 0xe3, 0x1a, 0xdd, 0xd6, 0x48, 0x94, 0xcf, 0x4c, 0x02, 0xe1, 0x60, 0x99, 0xe2, 0x9f, 0x9e, 0xb7, 0xf1, 0xa7, 0xbb, 0x7f, 0x84, 0xc4, 0x7a, 0x2b, 0x59, 0x48, 0x13, 0xbe, 0x02, 0xa1, 0x7b, 0x7f, 0xc4, 0x3b, 0x34, 0xc2, 0x2c, 0x91, 0x92, 0x52, 0x64, 0x12, 0x6c, 0x89, 0xf8, 0x6b, 0xb4, 0xd8, 0x7f, 0x3e, 0xf1, 0x31, 0x29, 0x6c, 0x53, 0xa3, 0x08, 0xe0, 0x33, 0x1d, 0xac, 0x8b, 0xaf, 0x3b, 0x63, 0x42, 0x22, 0x66, 0xec, 0xef, 0x2b, 0x90, 0x78, 0x15, 0x35, 0xdb, 0xda, 0x41, 0xcb, 0xd0, 0xcf, 0x22, 0xa8, 0xcb, 0xfb, 0x53, 0x2e, 0xc6, 0x8f, 0xc6, 0xaf, 0xb2, 0xac, 0x06 } -, - /* Signature */ - 256, - { 0x14, 0x14, 0xb3, 0x85, 0x67, 0xae, 0x6d, 0x97, 0x3e, 0xde, 0x4a, 0x06, 0x84, 0x2d, 0xcc, 0x0e, 0x05, 0x59, 0xb1, 0x9e, 0x65, 0xa4, 0x88, 0x9b, 0xdb, 0xab, 0xd0, 0xfd, 0x02, 0x80, 0x68, 0x29, 0x13, 0xba, 0xcd, 0x5d, 0xc2, 0xf0, 0x1b, 0x30, 0xbb, 0x19, 0xeb, 0x81, 0x0b, 0x7d, 0x9d, 0xed, 0x32, 0xb2, 0x84, 0xf1, 0x47, 0xbb, 0xe7, 0x71, 0xc9, 0x30, 0xc6, 0x05, 0x2a, 0xa7, 0x34, 0x13, 0x90, 0xa8, 0x49, 0xf8, 0x1d, 0xa9, 0xcd, 0x11, 0xe5, 0xec, 0xcf, 0x24, 0x6d, 0xba, 0xe9, 0x5f, 0xa9, 0x58, 0x28, 0xe9, 0xae, 0x0c, 0xa3, 0x55, 0x03, 0x25, 0x32, 0x6d, 0xee, 0xf9, 0xf4, 0x95, 0x30, 0xba, 0x44, 0x1b, 0xed, 0x4a, 0xc2, 0x9c, 0x02, 0x9c, 0x9a, 0x27, 0x36, 0xb1, 0xa4, 0x19, 0x0b, 0x85, 0x08, 0x4a, 0xd1, 0x50, 0x42, 0x6b, 0x46, 0xd7, 0xf8, 0x5b, 0xd7, 0x02, 0xf4, 0x8d, 0xac, 0x5f, 0x71, 0x33, 0x0b, 0xc4, 0x23, 0xa7, 0x66, 0xc6, 0x5c, 0xc1, 0xdc, 0xab, 0x20, 0xd3, 0xd3, 0xbb, 0xa7, 0x2b, 0x63, 0xb3, 0xef, 0x82, 0x44, 0xd4, 0x2f, 0x15, 0x7c, 0xb7, 0xe3, 0xa8, 0xba, 0x5c, 0x05, 0x27, 0x2c, 0x64, 0xcc, 0x1a, 0xd2, 0x1a, 0x13, 0x49, 0x3c, 0x39, 0x11, 0xf6, 0x0b, 0x4e, 0x9f, 0x4e, 0xcc, 0x99, 0x00, 0xeb, 0x05, 0x6e, 0xe5, 0x9d, 0x6f, 0xe4, 0xb8, 0xff, 0x6e, 0x80, 0x48, 0xcc, 0xc0, 0xf3, 0x8f, 0x28, 0x36, 0xfd, 0x3d, 0xfe, 0x91, 0xbf, 0x4a, 0x38, 0x6e, 0x1e, 0xcc, 0x2c, 0x32, 0x83, 0x9f, 0x0c, 0xa4, 0xd1, 0xb2, 0x7a, 0x56, 0x8f, 0xa9, 0x40, 0xdd, 0x64, 0xad, 0x16, 0xbd, 0x01, 0x25, 0xd0, 0x34, 0x8e, 0x38, 0x30, 0x85, 0xf0, 0x88, 0x94, 0x86, 0x1c, 0xa1, 0x89, 0x87, 0x22, 0x7d, 0x37, 0xb4, 0x2b, 0x58, 0x4a, 0x83, 0x57, 0xcb, 0x04 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.9", - /* Message to be signed */ - 183, - { 0xea, 0x94, 0x1f, 0xf0, 0x6f, 0x86, 0xc2, 0x26, 0x92, 0x7f, 0xcf, 0x0e, 0x3b, 0x11, 0xb0, 0x87, 0x26, 0x76, 0x17, 0x0c, 0x1b, 0xfc, 0x33, 0xbd, 0xa8, 0xe2, 0x65, 0xc7, 0x77, 0x71, 0xf9, 0xd0, 0x85, 0x01, 0x64, 0xa5, 0xee, 0xcb, 0xcc, 0x5c, 0xe8, 0x27, 0xfb, 0xfa, 0x07, 0xc8, 0x52, 0x14, 0x79, 0x6d, 0x81, 0x27, 0xe8, 0xca, 0xa8, 0x18, 0x94, 0xea, 0x61, 0xce, 0xb1, 0x44, 0x9e, 0x72, 0xfe, 0xa0, 0xa4, 0xc9, 0x43, 0xb2, 0xda, 0x6d, 0x9b, 0x10, 0x5f, 0xe0, 0x53, 0xb9, 0x03, 0x9a, 0x9c, 0xc5, 0x3d, 0x42, 0x0b, 0x75, 0x39, 0xfa, 0xb2, 0x23, 0x9c, 0x6b, 0x51, 0xd1, 0x7e, 0x69, 0x4c, 0x95, 0x7d, 0x4b, 0x0f, 0x09, 0x84, 0x46, 0x18, 0x79, 0xa0, 0x75, 0x9c, 0x44, 0x01, 0xbe, 0xec, 0xd4, 0xc6, 0x06, 0xa0, 0xaf, 0xbd, 0x7a, 0x07, 0x6f, 0x50, 0xa2, 0xdf, 0xc2, 0x80, 0x7f, 0x24, 0xf1, 0x91, 0x9b, 0xaa, 0x77, 0x46, 0xd3, 0xa6, 0x4e, 0x26, 0x8e, 0xd3, 0xf5, 0xf8, 0xe6, 0xda, 0x83, 0xa2, 0xa5, 0xc9, 0x15, 0x2f, 0x83, 0x7c, 0xb0, 0x78, 0x12, 0xbd, 0x5b, 0xa7, 0xd3, 0xa0, 0x79, 0x85, 0xde, 0x88, 0x11, 0x3c, 0x17, 0x96, 0xe9, 0xb4, 0x66, 0xec, 0x29, 0x9c, 0x5a, 0xc1, 0x05, 0x9e, 0x27, 0xf0, 0x94, 0x15 } -, - /* Signature */ - 256, - { 0xce, 0xeb, 0x84, 0xcc, 0xb4, 0xe9, 0x09, 0x92, 0x65, 0x65, 0x07, 0x21, 0xee, 0xa0, 0xe8, 0xec, 0x89, 0xca, 0x25, 0xbd, 0x35, 0x4d, 0x4f, 0x64, 0x56, 0x49, 0x67, 0xbe, 0x9d, 0x4b, 0x08, 0xb3, 0xf1, 0xc0, 0x18, 0x53, 0x9c, 0x9d, 0x37, 0x1c, 0xf8, 0x96, 0x1f, 0x22, 0x91, 0xfb, 0xe0, 0xdc, 0x2f, 0x2f, 0x95, 0xfe, 0xa4, 0x7b, 0x63, 0x9f, 0x1e, 0x12, 0xf4, 0xbc, 0x38, 0x1c, 0xef, 0x0c, 0x2b, 0x7a, 0x7b, 0x95, 0xc3, 0xad, 0xf2, 0x76, 0x05, 0xb7, 0xf6, 0x39, 0x98, 0xc3, 0xcb, 0xad, 0x54, 0x28, 0x08, 0xc3, 0x82, 0x2e, 0x06, 0x4d, 0x4a, 0xd1, 0x40, 0x93, 0x67, 0x9e, 0x6e, 0x01, 0x41, 0x8a, 0x6d, 0x5c, 0x05, 0x96, 0x84, 0xcd, 0x56, 0xe3, 0x4e, 0xd6, 0x5a, 0xb6, 0x05, 0xb8, 0xde, 0x4f, 0xcf, 0xa6, 0x40, 0x47, 0x4a, 0x54, 0xa8, 0x25, 0x1b, 0xbb, 0x73, 0x26, 0xa4, 0x2d, 0x08, 0x58, 0x5c, 0xfc, 0xfc, 0x95, 0x67, 0x69, 0xb1, 0x5b, 0x6d, 0x7f, 0xdf, 0x7d, 0xa8, 0x4f, 0x81, 0x97, 0x6e, 0xaa, 0x41, 0xd6, 0x92, 0x38, 0x0f, 0xf1, 0x0e, 0xae, 0xcf, 0xe0, 0xa5, 0x79, 0x68, 0x29, 0x09, 0xb5, 0x52, 0x1f, 0xad, 0xe8, 0x54, 0xd7, 0x97, 0xb8, 0xa0, 0x34, 0x5b, 0x9a, 0x86, 0x4e, 0x05, 0x88, 0xf6, 0xca, 0xdd, 0xbf, 0x65, 0xf1, 0x77, 0x99, 0x8e, 0x18, 0x0d, 0x1f, 0x10, 0x24, 0x43, 0xe6, 0xdc, 0xa5, 0x3a, 0x94, 0x82, 0x3c, 0xaa, 0x9c, 0x3b, 0x35, 0xf3, 0x22, 0x58, 0x3c, 0x70, 0x3a, 0xf6, 0x74, 0x76, 0x15, 0x9e, 0xc7, 0xec, 0x93, 0xd1, 0x76, 0x9b, 0x30, 0x0a, 0xf0, 0xe7, 0x15, 0x7d, 0xc2, 0x98, 0xc6, 0xcd, 0x2d, 0xee, 0x22, 0x62, 0xf8, 0xcd, 0xdc, 0x10, 0xf1, 0x1e, 0x01, 0x74, 0x14, 0x71, 0xbb, 0xfd, 0x65, 0x18, 0xa1, 0x75, 0x73, 0x45, 0x75 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.10", - /* Message to be signed */ - 65, - { 0xd8, 0xb8, 0x16, 0x45, 0xc1, 0x3c, 0xd7, 0xec, 0xf5, 0xd0, 0x0e, 0xd2, 0xc9, 0x1b, 0x9a, 0xcd, 0x46, 0xc1, 0x55, 0x68, 0xe5, 0x30, 0x3c, 0x4a, 0x97, 0x75, 0xed, 0xe7, 0x6b, 0x48, 0x40, 0x3d, 0x6b, 0xe5, 0x6c, 0x05, 0xb6, 0xb1, 0xcf, 0x77, 0xc6, 0xe7, 0x5d, 0xe0, 0x96, 0xc5, 0xcb, 0x35, 0x51, 0xcb, 0x6f, 0xa9, 0x64, 0xf3, 0xc8, 0x79, 0xcf, 0x58, 0x9d, 0x28, 0xe1, 0xda, 0x2f, 0x9d, 0xec } -, - /* Signature */ - 256, - { 0x27, 0x45, 0x07, 0x4c, 0xa9, 0x71, 0x75, 0xd9, 0x92, 0xe2, 0xb4, 0x47, 0x91, 0xc3, 0x23, 0xc5, 0x71, 0x67, 0x16, 0x5c, 0xdd, 0x8d, 0xa5, 0x79, 0xcd, 0xef, 0x46, 0x86, 0xb9, 0xbb, 0x40, 0x4b, 0xd3, 0x6a, 0x56, 0x50, 0x4e, 0xb1, 0xfd, 0x77, 0x0f, 0x60, 0xbf, 0xa1, 0x88, 0xa7, 0xb2, 0x4b, 0x0c, 0x91, 0xe8, 0x81, 0xc2, 0x4e, 0x35, 0xb0, 0x4d, 0xc4, 0xdd, 0x4c, 0xe3, 0x85, 0x66, 0xbc, 0xc9, 0xce, 0x54, 0xf4, 0x9a, 0x17, 0x5f, 0xc9, 0xd0, 0xb2, 0x25, 0x22, 0xd9, 0x57, 0x90, 0x47, 0xf9, 0xed, 0x42, 0xec, 0xa8, 0x3f, 0x76, 0x4a, 0x10, 0x16, 0x39, 0x97, 0x94, 0x7e, 0x7d, 0x2b, 0x52, 0xff, 0x08, 0x98, 0x0e, 0x7e, 0x7c, 0x22, 0x57, 0x93, 0x7b, 0x23, 0xf3, 0xd2, 0x79, 0xd4, 0xcd, 0x17, 0xd6, 0xf4, 0x95, 0x54, 0x63, 0x73, 0xd9, 0x83, 0xd5, 0x36, 0xef, 0xd7, 0xd1, 0xb6, 0x71, 0x81, 0xca, 0x2c, 0xb5, 0x0a, 0xc6, 0x16, 0xc5, 0xc7, 0xab, 0xfb, 0xb9, 0x26, 0x0b, 0x91, 0xb1, 0xa3, 0x8e, 0x47, 0x24, 0x20, 0x01, 0xff, 0x45, 0x2f, 0x8d, 0xe1, 0x0c, 0xa6, 0xea, 0xea, 0xdc, 0xaf, 0x9e, 0xdc, 0x28, 0x95, 0x6f, 0x28, 0xa7, 0x11, 0x29, 0x1f, 0xc9, 0xa8, 0x08, 0x78, 0xb8, 0xba, 0x4c, 0xfe, 0x25, 0xb8, 0x28, 0x1c, 0xb8, 0x0b, 0xc9, 0xcd, 0x6d, 0x2b, 0xd1, 0x82, 0x52, 0x46, 0xee, 0xbe, 0x25, 0x2d, 0x99, 0x57, 0xef, 0x93, 0x70, 0x73, 0x52, 0x08, 0x4e, 0x6d, 0x36, 0xd4, 0x23, 0x55, 0x1b, 0xf2, 0x66, 0xa8, 0x53, 0x40, 0xfb, 0x4a, 0x6a, 0xf3, 0x70, 0x88, 0x0a, 0xab, 0x07, 0x15, 0x3d, 0x01, 0xf4, 0x8d, 0x08, 0x6d, 0xf0, 0xbf, 0xbe, 0xc0, 0x5e, 0x7b, 0x44, 0x3b, 0x97, 0xe7, 0x17, 0x18, 0x97, 0x0e, 0x2f, 0x4b, 0xf6, 0x20, 0x23, 0xe9, 0x5b, 0x67 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.11", - /* Message to be signed */ - 130, - { 0xe5, 0x73, 0x9b, 0x6c, 0x14, 0xc9, 0x2d, 0x51, 0x0d, 0x95, 0xb8, 0x26, 0x93, 0x33, 0x37, 0xff, 0x0d, 0x24, 0xef, 0x72, 0x1a, 0xc4, 0xef, 0x64, 0xc2, 0xba, 0xd2, 0x64, 0xbe, 0x8b, 0x44, 0xef, 0xa1, 0x51, 0x6e, 0x08, 0xa2, 0x7e, 0xb6, 0xb6, 0x11, 0xd3, 0x30, 0x1d, 0xf0, 0x06, 0x2d, 0xae, 0xfc, 0x73, 0xa8, 0xc0, 0xd9, 0x2e, 0x2c, 0x52, 0x1f, 0xac, 0xbc, 0x7b, 0x26, 0x47, 0x38, 0x76, 0x7e, 0xa6, 0xfc, 0x97, 0xd5, 0x88, 0xa0, 0xba, 0xf6, 0xce, 0x50, 0xad, 0xf7, 0x9e, 0x60, 0x0b, 0xd2, 0x9e, 0x34, 0x5f, 0xcb, 0x1d, 0xba, 0x71, 0xac, 0x5c, 0x02, 0x89, 0x02, 0x3f, 0xe4, 0xa8, 0x2b, 0x46, 0xa5, 0x40, 0x77, 0x19, 0x19, 0x7d, 0x2e, 0x95, 0x8e, 0x35, 0x31, 0xfd, 0x54, 0xae, 0xf9, 0x03, 0xaa, 0xbb, 0x43, 0x55, 0xf8, 0x83, 0x18, 0x99, 0x4e, 0xd3, 0xc3, 0xdd, 0x62, 0xf4, 0x20, 0xa7 } -, - /* Signature */ - 256, - { 0xbe, 0x40, 0xa5, 0xfb, 0x94, 0xf1, 0x13, 0xe1, 0xb3, 0xef, 0xf6, 0xb6, 0xa3, 0x39, 0x86, 0xf2, 0x02, 0xe3, 0x63, 0xf0, 0x74, 0x83, 0xb7, 0x92, 0xe6, 0x8d, 0xfa, 0x55, 0x54, 0xdf, 0x04, 0x66, 0xcc, 0x32, 0x15, 0x09, 0x50, 0x78, 0x3b, 0x4d, 0x96, 0x8b, 0x63, 0x9a, 0x04, 0xfd, 0x2f, 0xb9, 0x7f, 0x6e, 0xb9, 0x67, 0x02, 0x1f, 0x5a, 0xdc, 0xcb, 0x9f, 0xca, 0x95, 0xac, 0xc8, 0xf2, 0xcd, 0x88, 0x5a, 0x38, 0x0b, 0x0a, 0x4e, 0x82, 0xbc, 0x76, 0x07, 0x64, 0xdb, 0xab, 0x88, 0xc1, 0xe6, 0xc0, 0x25, 0x5c, 0xaa, 0x94, 0xf2, 0x32, 0x19, 0x9d, 0x6f, 0x59, 0x7c, 0xc9, 0x14, 0x5b, 0x00, 0xe3, 0xd4, 0xba, 0x34, 0x6b, 0x55, 0x9a, 0x88, 0x33, 0xad, 0x15, 0x16, 0xad, 0x51, 0x63, 0xf0, 0x16, 0xaf, 0x6a, 0x59, 0x83, 0x1c, 0x82, 0xea, 0x13, 0xc8, 0x22, 0x4d, 0x84, 0xd0, 0x76, 0x5a, 0x9d, 0x12, 0x38, 0x4d, 0xa4, 0x60, 0xa8, 0x53, 0x1b, 0x4c, 0x40, 0x7e, 0x04, 0xf4, 0xf3, 0x50, 0x70, 0x9e, 0xb9, 0xf0, 0x8f, 0x5b, 0x22, 0x0f, 0xfb, 0x45, 0xab, 0xf6, 0xb7, 0x5d, 0x15, 0x79, 0xfd, 0x3f, 0x1e, 0xb5, 0x5f, 0xc7, 0x5b, 0x00, 0xaf, 0x8b, 0xa3, 0xb0, 0x87, 0x82, 0x7f, 0xe9, 0xae, 0x9f, 0xb4, 0xf6, 0xc5, 0xfa, 0x63, 0x03, 0x1f, 0xe5, 0x82, 0x85, 0x2f, 0xe2, 0x83, 0x4f, 0x9c, 0x89, 0xbf, 0xf5, 0x3e, 0x25, 0x52, 0x21, 0x6b, 0xc7, 0xc1, 0xd4, 0xa3, 0xd5, 0xdc, 0x2b, 0xa6, 0x95, 0x5c, 0xd9, 0xb1, 0x7d, 0x13, 0x63, 0xe7, 0xfe, 0xe8, 0xed, 0x76, 0x29, 0x75, 0x3f, 0xf3, 0x12, 0x5e, 0xdd, 0x48, 0x52, 0x1a, 0xe3, 0xb9, 0xb0, 0x32, 0x17, 0xf4, 0x49, 0x6d, 0x0d, 0x8e, 0xde, 0x57, 0xac, 0xbc, 0x5b, 0xd4, 0xde, 0xae, 0x74, 0xa5, 0x6f, 0x86, 0x67, 0x1d, 0xe2 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.12", - /* Message to be signed */ - 256, - { 0x7a, 0xf4, 0x28, 0x35, 0x91, 0x7a, 0x88, 0xd6, 0xb3, 0xc6, 0x71, 0x6b, 0xa2, 0xf5, 0xb0, 0xd5, 0xb2, 0x0b, 0xd4, 0xe2, 0xe6, 0xe5, 0x74, 0xe0, 0x6a, 0xf1, 0xee, 0xf7, 0xc8, 0x11, 0x31, 0xbe, 0x22, 0xbf, 0x81, 0x28, 0xb9, 0xcb, 0xc6, 0xec, 0x00, 0x27, 0x5b, 0xa8, 0x02, 0x94, 0xa5, 0xd1, 0x17, 0x2d, 0x08, 0x24, 0xa7, 0x9e, 0x8f, 0xdd, 0x83, 0x01, 0x83, 0xe4, 0xc0, 0x0b, 0x96, 0x78, 0x28, 0x67, 0xb1, 0x22, 0x7f, 0xea, 0x24, 0x9a, 0xad, 0x32, 0xff, 0xc5, 0xfe, 0x00, 0x7b, 0xc5, 0x1f, 0x21, 0x79, 0x2f, 0x72, 0x8d, 0xed, 0xa8, 0xb5, 0x70, 0x8a, 0xa9, 0x9c, 0xab, 0xab, 0x20, 0xa4, 0xaa, 0x78, 0x3e, 0xd8, 0x6f, 0x0f, 0x27, 0xb5, 0xd5, 0x63, 0xf4, 0x2e, 0x07, 0x15, 0x8c, 0xea, 0x72, 0xd0, 0x97, 0xaa, 0x68, 0x87, 0xec, 0x41, 0x1d, 0xd0, 0x12, 0x91, 0x2a, 0x5e, 0x03, 0x2b, 0xbf, 0xa6, 0x78, 0x50, 0x71, 0x44, 0xbc, 0xc9, 0x5f, 0x39, 0xb5, 0x8b, 0xe7, 0xbf, 0xd1, 0x75, 0x9a, 0xdb, 0x9a, 0x91, 0xfa, 0x1d, 0x6d, 0x82, 0x26, 0xa8, 0x34, 0x3a, 0x8b, 0x84, 0x9d, 0xae, 0x76, 0xf7, 0xb9, 0x82, 0x24, 0xd5, 0x9e, 0x28, 0xf7, 0x81, 0xf1, 0x3e, 0xce, 0x60, 0x5f, 0x84, 0xf6, 0xc9, 0x0b, 0xae, 0x5f, 0x8c, 0xf3, 0x78, 0x81, 0x6f, 0x40, 0x20, 0xa7, 0xdd, 0xa1, 0xbe, 0xd9, 0x0c, 0x92, 0xa2, 0x36, 0x34, 0xd2, 0x03, 0xfa, 0xc3, 0xfc, 0xd8, 0x6d, 0x68, 0xd3, 0x18, 0x2a, 0x7d, 0x9c, 0xca, 0xbe, 0x7b, 0x07, 0x95, 0xf5, 0xc6, 0x55, 0xe9, 0xac, 0xc4, 0xe3, 0xec, 0x18, 0x51, 0x40, 0xd1, 0x0c, 0xef, 0x05, 0x34, 0x64, 0xab, 0x17, 0x5c, 0x83, 0xbd, 0x83, 0x93, 0x5e, 0x3d, 0xab, 0xaf, 0x34, 0x62, 0xee, 0xbe, 0x63, 0xd1, 0x5f, 0x57, 0x3d, 0x26, 0x9a } -, - /* Signature */ - 256, - { 0x4e, 0x78, 0xc5, 0x90, 0x2b, 0x80, 0x79, 0x14, 0xd1, 0x2f, 0xa5, 0x37, 0xae, 0x68, 0x71, 0xc8, 0x6d, 0xb8, 0x02, 0x1e, 0x55, 0xd1, 0xad, 0xb8, 0xeb, 0x0c, 0xcf, 0x1b, 0x8f, 0x36, 0xab, 0x7d, 0xad, 0x1f, 0x68, 0x2e, 0x94, 0x7a, 0x62, 0x70, 0x72, 0xf0, 0x3e, 0x62, 0x73, 0x71, 0x78, 0x1d, 0x33, 0x22, 0x1d, 0x17, 0x4a, 0xbe, 0x46, 0x0d, 0xbd, 0x88, 0x56, 0x0c, 0x22, 0xf6, 0x90, 0x11, 0x6e, 0x2f, 0xbb, 0xe6, 0xe9, 0x64, 0x36, 0x3a, 0x3e, 0x52, 0x83, 0xbb, 0x5d, 0x94, 0x6e, 0xf1, 0xc0, 0x04, 0x7e, 0xba, 0x03, 0x8c, 0x75, 0x6c, 0x40, 0xbe, 0x79, 0x23, 0x05, 0x58, 0x09, 0xb0, 0xe9, 0xf3, 0x4a, 0x03, 0xa5, 0x88, 0x15, 0xeb, 0xdd, 0xe7, 0x67, 0x93, 0x1f, 0x01, 0x8f, 0x6f, 0x18, 0x78, 0xf2, 0xef, 0x4f, 0x47, 0xdd, 0x37, 0x40, 0x51, 0xdd, 0x48, 0x68, 0x5d, 0xed, 0x6e, 0xfb, 0x3e, 0xa8, 0x02, 0x1f, 0x44, 0xbe, 0x1d, 0x7d, 0x14, 0x93, 0x98, 0xf9, 0x8e, 0xa9, 0xc0, 0x8d, 0x62, 0x88, 0x8e, 0xbb, 0x56, 0x19, 0x2d, 0x17, 0x74, 0x7b, 0x6b, 0x8e, 0x17, 0x09, 0x54, 0x31, 0xf1, 0x25, 0xa8, 0xa8, 0xe9, 0x96, 0x2a, 0xa3, 0x1c, 0x28, 0x52, 0x64, 0xe0, 0x8f, 0xb2, 0x1a, 0xac, 0x33, 0x6c, 0xe6, 0xc3, 0x8a, 0xa3, 0x75, 0xe4, 0x2b, 0xc9, 0x2a, 0xb0, 0xab, 0x91, 0x03, 0x84, 0x31, 0xe1, 0xf9, 0x2c, 0x39, 0xd2, 0xaf, 0x5d, 0xed, 0x7e, 0x43, 0xbc, 0x15, 0x1e, 0x6e, 0xbe, 0xa4, 0xc3, 0xe2, 0x58, 0x3a, 0xf3, 0x43, 0x7e, 0x82, 0xc4, 0x3c, 0x5e, 0x3b, 0x5b, 0x07, 0xcf, 0x03, 0x59, 0x68, 0x3d, 0x22, 0x98, 0xe3, 0x59, 0x48, 0xed, 0x80, 0x6c, 0x06, 0x3c, 0x60, 0x6e, 0xa1, 0x78, 0x15, 0x0b, 0x1e, 0xfc, 0x15, 0x85, 0x69, 0x34, 0xc7, 0x25, 0x5c, 0xfe } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.13", - /* Message to be signed */ - 59, - { 0xeb, 0xae, 0xf3, 0xf9, 0xf2, 0x3b, 0xdf, 0xe5, 0xfa, 0x6b, 0x8a, 0xf4, 0xc2, 0x08, 0xc1, 0x89, 0xf2, 0x25, 0x1b, 0xf3, 0x2f, 0x5f, 0x13, 0x7b, 0x9d, 0xe4, 0x40, 0x63, 0x78, 0x68, 0x6b, 0x3f, 0x07, 0x21, 0xf6, 0x2d, 0x24, 0xcb, 0x86, 0x88, 0xd6, 0xfc, 0x41, 0xa2, 0x7c, 0xba, 0xe2, 0x1d, 0x30, 0xe4, 0x29, 0xfe, 0xac, 0xc7, 0x11, 0x19, 0x41, 0xc2, 0x77 } -, - /* Signature */ - 256, - { 0xc4, 0x8d, 0xbe, 0xf5, 0x07, 0x11, 0x4f, 0x03, 0xc9, 0x5f, 0xaf, 0xbe, 0xb4, 0xdf, 0x1b, 0xfa, 0x88, 0xe0, 0x18, 0x4a, 0x33, 0xcc, 0x4f, 0x8a, 0x9a, 0x10, 0x35, 0xff, 0x7f, 0x82, 0x2a, 0x5e, 0x38, 0xcd, 0xa1, 0x87, 0x23, 0x91, 0x5f, 0xf0, 0x78, 0x24, 0x44, 0x29, 0xe0, 0xf6, 0x08, 0x1c, 0x14, 0xfd, 0x83, 0x33, 0x1f, 0xa6, 0x5c, 0x6b, 0xa7, 0xbb, 0x9a, 0x12, 0xdb, 0xf6, 0x62, 0x23, 0x74, 0xcd, 0x0c, 0xa5, 0x7d, 0xe3, 0x77, 0x4e, 0x2b, 0xd7, 0xae, 0x82, 0x36, 0x77, 0xd0, 0x61, 0xd5, 0x3a, 0xe9, 0xc4, 0x04, 0x0d, 0x2d, 0xa7, 0xef, 0x70, 0x14, 0xf3, 0xbb, 0xdc, 0x95, 0xa3, 0x61, 0xa4, 0x38, 0x55, 0xc8, 0xce, 0x9b, 0x97, 0xec, 0xab, 0xce, 0x17, 0x4d, 0x92, 0x62, 0x85, 0x14, 0x2b, 0x53, 0x4a, 0x30, 0x87, 0xf9, 0xf4, 0xef, 0x74, 0x51, 0x1e, 0xc7, 0x42, 0xb0, 0xd5, 0x68, 0x56, 0x03, 0xfa, 0xf4, 0x03, 0xb5, 0x07, 0x2b, 0x98, 0x5d, 0xf4, 0x6a, 0xdf, 0x2d, 0x25, 0x29, 0xa0, 0x2d, 0x40, 0x71, 0x1e, 0x21, 0x90, 0x91, 0x70, 0x52, 0x37, 0x1b, 0x79, 0xb7, 0x49, 0xb8, 0x3a, 0xbf, 0x0a, 0xe2, 0x94, 0x86, 0xc3, 0xf2, 0xf6, 0x24, 0x77, 0xb2, 0xbd, 0x36, 0x2b, 0x03, 0x9c, 0x01, 0x3c, 0x0c, 0x50, 0x76, 0xef, 0x52, 0x0d, 0xbb, 0x40, 0x5f, 0x42, 0xce, 0xe9, 0x54, 0x25, 0xc3, 0x73, 0xa9, 0x75, 0xe1, 0xcd, 0xd0, 0x32, 0xc4, 0x96, 0x22, 0xc8, 0x50, 0x79, 0xb0, 0x9e, 0x88, 0xda, 0xb2, 0xb1, 0x39, 0x69, 0xef, 0x7a, 0x72, 0x39, 0x73, 0x78, 0x10, 0x40, 0x45, 0x9f, 0x57, 0xd5, 0x01, 0x36, 0x38, 0x48, 0x3d, 0xe2, 0xd9, 0x1c, 0xb3, 0xc4, 0x90, 0xda, 0x81, 0xc4, 0x6d, 0xe6, 0xcd, 0x76, 0xea, 0x8a, 0x0c, 0x8f, 0x6f, 0xe3, 0x31, 0x71, 0x2d, 0x24 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.14", - /* Message to be signed */ - 169, - { 0xc5, 0xa2, 0x71, 0x12, 0x78, 0x76, 0x1d, 0xfc, 0xdd, 0x4f, 0x0c, 0x99, 0xe6, 0xf5, 0x61, 0x9d, 0x6c, 0x48, 0xb5, 0xd4, 0xc1, 0xa8, 0x09, 0x82, 0xfa, 0xa6, 0xb4, 0xcf, 0x1c, 0xf7, 0xa6, 0x0f, 0xf3, 0x27, 0xab, 0xef, 0x93, 0xc8, 0x01, 0x42, 0x9e, 0xfd, 0xe0, 0x86, 0x40, 0x85, 0x81, 0x46, 0x10, 0x56, 0xac, 0xc3, 0x3f, 0x3d, 0x04, 0xf5, 0xad, 0xa2, 0x12, 0x16, 0xca, 0xcd, 0x5f, 0xd1, 0xf9, 0xed, 0x83, 0x20, 0x3e, 0x0e, 0x2f, 0xe6, 0x13, 0x8e, 0x3e, 0xae, 0x84, 0x24, 0xe5, 0x91, 0x5a, 0x08, 0x3f, 0x3f, 0x7a, 0xb7, 0x60, 0x52, 0xc8, 0xbe, 0x55, 0xae, 0x88, 0x2d, 0x6e, 0xc1, 0x48, 0x2b, 0x1e, 0x45, 0xc5, 0xda, 0xe9, 0xf4, 0x10, 0x15, 0x40, 0x53, 0x27, 0x02, 0x2e, 0xc3, 0x2f, 0x0e, 0xa2, 0x42, 0x97, 0x63, 0xb2, 0x55, 0x04, 0x3b, 0x19, 0x58, 0xee, 0x3c, 0xf6, 0xd6, 0x39, 0x83, 0x59, 0x6e, 0xb3, 0x85, 0x84, 0x4f, 0x85, 0x28, 0xcc, 0x9a, 0x98, 0x65, 0x83, 0x5d, 0xc5, 0x11, 0x3c, 0x02, 0xb8, 0x0d, 0x0f, 0xca, 0x68, 0xaa, 0x25, 0xe7, 0x2b, 0xca, 0xae, 0xb3, 0xcf, 0x9d, 0x79, 0xd8, 0x4f, 0x98, 0x4f, 0xd4, 0x17 } -, - /* Signature */ - 256, - { 0x6b, 0xd5, 0x25, 0x7a, 0xa0, 0x66, 0x11, 0xfb, 0x46, 0x60, 0x08, 0x7c, 0xb4, 0xbc, 0x4a, 0x9e, 0x44, 0x91, 0x59, 0xd3, 0x16, 0x52, 0xbd, 0x98, 0x08, 0x44, 0xda, 0xf3, 0xb1, 0xc7, 0xb3, 0x53, 0xf8, 0xe5, 0x61, 0x42, 0xf7, 0xea, 0x98, 0x57, 0x43, 0x3b, 0x18, 0x57, 0x3b, 0x4d, 0xee, 0xde, 0x81, 0x8a, 0x93, 0xb0, 0x29, 0x02, 0x97, 0x78, 0x3f, 0x1a, 0x2f, 0x23, 0xcb, 0xc7, 0x27, 0x97, 0xa6, 0x72, 0x53, 0x7f, 0x01, 0xf6, 0x24, 0x84, 0xcd, 0x41, 0x62, 0xc3, 0x21, 0x4b, 0x9a, 0xc6, 0x28, 0x22, 0x4c, 0x5d, 0xe0, 0x1f, 0x32, 0xbb, 0x9b, 0x76, 0xb2, 0x73, 0x54, 0xf2, 0xb1, 0x51, 0xd0, 0xe8, 0xc4, 0x21, 0x3e, 0x46, 0x15, 0xad, 0x0b, 0xc7, 0x1f, 0x51, 0x5e, 0x30, 0x0d, 0x6a, 0x64, 0xc6, 0x74, 0x34, 0x11, 0xff, 0xfd, 0xe8, 0xe5, 0xff, 0x19, 0x0e, 0x54, 0x92, 0x30, 0x43, 0x12, 0x6e, 0xcf, 0xc4, 0xc4, 0x53, 0x90, 0x22, 0x66, 0x8f, 0xb6, 0x75, 0xf2, 0x5c, 0x07, 0xe2, 0x00, 0x99, 0xee, 0x31, 0x5b, 0x98, 0xd6, 0xaf, 0xec, 0x4b, 0x1a, 0x9a, 0x93, 0xdc, 0x33, 0x49, 0x6a, 0x15, 0xbd, 0x6f, 0xde, 0x16, 0x63, 0xa7, 0xd4, 0x9b, 0x9f, 0x1e, 0x63, 0x9d, 0x38, 0x66, 0x4b, 0x37, 0xa0, 0x10, 0xb1, 0xf3, 0x5e, 0x65, 0x86, 0x82, 0xd9, 0xcd, 0x63, 0xe5, 0x7d, 0xe0, 0xf1, 0x5e, 0x8b, 0xdd, 0x09, 0x65, 0x58, 0xf0, 0x7e, 0xc0, 0xca, 0xa2, 0x18, 0xa8, 0xc0, 0x6f, 0x47, 0x88, 0x45, 0x39, 0x40, 0x28, 0x7c, 0x9d, 0x34, 0xb6, 0xd4, 0x0a, 0x3f, 0x09, 0xbf, 0x77, 0x99, 0xfe, 0x98, 0xae, 0x4e, 0xb4, 0x9f, 0x3f, 0xf4, 0x1c, 0x50, 0x40, 0xa5, 0x0c, 0xef, 0xc9, 0xbd, 0xf2, 0x39, 0x4b, 0x74, 0x9c, 0xf1, 0x64, 0x48, 0x0d, 0xf1, 0xab, 0x68, 0x80, 0x27, 0x3b } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.15", - /* Message to be signed */ - 215, - { 0x9b, 0xf8, 0xaa, 0x25, 0x3b, 0x87, 0x2e, 0xa7, 0x7a, 0x7e, 0x23, 0x47, 0x6b, 0xe2, 0x6b, 0x23, 0x29, 0x57, 0x8c, 0xf6, 0xac, 0x9e, 0xa2, 0x80, 0x5b, 0x35, 0x7f, 0x6f, 0xc3, 0xad, 0x13, 0x0d, 0xba, 0xeb, 0x3d, 0x86, 0x9a, 0x13, 0xcc, 0xe7, 0xa8, 0x08, 0xbb, 0xbb, 0xc9, 0x69, 0x85, 0x7e, 0x03, 0x94, 0x5c, 0x7b, 0xb6, 0x1d, 0xf1, 0xb5, 0xc2, 0x58, 0x9b, 0x8e, 0x04, 0x6c, 0x2a, 0x5d, 0x7e, 0x40, 0x57, 0xb1, 0xa7, 0x4f, 0x24, 0xc7, 0x11, 0x21, 0x63, 0x64, 0x28, 0x85, 0x29, 0xec, 0x95, 0x70, 0xf2, 0x51, 0x97, 0x21, 0x3b, 0xe1, 0xf5, 0xc2, 0xe5, 0x96, 0xf8, 0xbf, 0x8b, 0x2c, 0xf3, 0xcb, 0x38, 0xaa, 0x56, 0xff, 0xe5, 0xe3, 0x1d, 0xf7, 0x39, 0x58, 0x20, 0xe9, 0x4e, 0xcf, 0x3b, 0x11, 0x89, 0xa9, 0x65, 0xdc, 0xf9, 0xa9, 0xcb, 0x42, 0x98, 0xd3, 0xc8, 0x8b, 0x29, 0x23, 0xc1, 0x9f, 0xc6, 0xbc, 0x34, 0xaa, 0xce, 0xca, 0xd4, 0xe0, 0x93, 0x1a, 0x7c, 0x4e, 0x5d, 0x73, 0xdc, 0x86, 0xdf, 0xa7, 0x98, 0xa8, 0x47, 0x6d, 0x82, 0x46, 0x3e, 0xef, 0xaa, 0x90, 0xa8, 0xa9, 0x19, 0x2a, 0xb0, 0x8b, 0x23, 0x08, 0x8d, 0xd5, 0x8e, 0x12, 0x80, 0xf7, 0xd7, 0x2e, 0x45, 0x48, 0x39, 0x6b, 0xaa, 0xc1, 0x12, 0x25, 0x2d, 0xd5, 0xc5, 0x34, 0x6a, 0xdb, 0x20, 0x04, 0xa2, 0xf7, 0x10, 0x1c, 0xcc, 0x89, 0x9c, 0xc7, 0xfa, 0xfa, 0xe8, 0xbb, 0xe2, 0x95, 0x73, 0x88, 0x96, 0xa5, 0xb2, 0x01, 0x22, 0x85, 0x01, 0x4e, 0xf6 } -, - /* Signature */ - 256, - { 0x27, 0xf7, 0xf4, 0xda, 0x9b, 0xd6, 0x10, 0x10, 0x6e, 0xf5, 0x7d, 0x32, 0x38, 0x3a, 0x44, 0x8a, 0x8a, 0x62, 0x45, 0xc8, 0x3d, 0xc1, 0x30, 0x9c, 0x6d, 0x77, 0x0d, 0x35, 0x7b, 0xa8, 0x9e, 0x73, 0xf2, 0xad, 0x08, 0x32, 0x06, 0x2e, 0xb0, 0xfe, 0x0a, 0xc9, 0x15, 0x57, 0x5b, 0xcd, 0x6b, 0x8b, 0xca, 0xdb, 0x4e, 0x2b, 0xa6, 0xfa, 0x9d, 0xa7, 0x3a, 0x59, 0x17, 0x51, 0x52, 0xb2, 0xd4, 0xfe, 0x72, 0xb0, 0x70, 0xc9, 0xb7, 0x37, 0x9e, 0x50, 0x00, 0x0e, 0x55, 0xe6, 0xc2, 0x69, 0xf6, 0x65, 0x8c, 0x93, 0x79, 0x72, 0x79, 0x7d, 0x3a, 0xdd, 0x69, 0xf1, 0x30, 0xe3, 0x4b, 0x85, 0xbd, 0xec, 0x9f, 0x3a, 0x9b, 0x39, 0x22, 0x02, 0xd6, 0xf3, 0xe4, 0x30, 0xd0, 0x9c, 0xac, 0xa8, 0x22, 0x77, 0x59, 0xab, 0x82, 0x5f, 0x70, 0x12, 0xd2, 0xff, 0x4b, 0x5b, 0x62, 0xc8, 0x50, 0x4d, 0xba, 0xd8, 0x55, 0xc0, 0x5e, 0xdd, 0x5c, 0xab, 0x5a, 0x4c, 0xcc, 0xdc, 0x67, 0xf0, 0x1d, 0xd6, 0x51, 0x7c, 0x7d, 0x41, 0xc4, 0x3e, 0x2a, 0x49, 0x57, 0xaf, 0xf1, 0x9d, 0xb6, 0xf1, 0x8b, 0x17, 0x85, 0x9a, 0xf0, 0xbc, 0x84, 0xab, 0x67, 0x14, 0x6e, 0xc1, 0xa4, 0xa6, 0x0a, 0x17, 0xd7, 0xe0, 0x5f, 0x8b, 0x4f, 0x9c, 0xed, 0x6a, 0xd1, 0x09, 0x08, 0xd8, 0xd7, 0x8f, 0x7f, 0xc8, 0x8b, 0x76, 0xad, 0xc8, 0x29, 0x0f, 0x87, 0xda, 0xf2, 0xa7, 0xbe, 0x10, 0xae, 0x40, 0x85, 0x21, 0x39, 0x5d, 0x54, 0xed, 0x25, 0x56, 0xfb, 0x76, 0x61, 0x85, 0x4a, 0x73, 0x0c, 0xe3, 0xd8, 0x2c, 0x71, 0xa8, 0xd4, 0x93, 0xec, 0x49, 0xa3, 0x78, 0xac, 0x8a, 0x3c, 0x74, 0x43, 0x9f, 0x7c, 0xc5, 0x55, 0xba, 0x13, 0xf8, 0x59, 0x07, 0x08, 0x90, 0xee, 0x18, 0xff, 0x65, 0x8f, 0xa4, 0xd7, 0x41, 0x96, 0x9d, 0x70, 0xa5 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.16", - /* Message to be signed */ - 247, - { 0x32, 0x47, 0x48, 0x30, 0xe2, 0x20, 0x37, 0x54, 0xc8, 0xbf, 0x06, 0x81, 0xdc, 0x4f, 0x84, 0x2a, 0xfe, 0x36, 0x09, 0x30, 0x37, 0x86, 0x16, 0xc1, 0x08, 0xe8, 0x33, 0x65, 0x6e, 0x56, 0x40, 0xc8, 0x68, 0x56, 0x88, 0x5b, 0xb0, 0x5d, 0x1e, 0xb9, 0x43, 0x8e, 0xfe, 0xde, 0x67, 0x92, 0x63, 0xde, 0x07, 0xcb, 0x39, 0x55, 0x3f, 0x6a, 0x25, 0xe0, 0x06, 0xb0, 0xa5, 0x23, 0x11, 0xa0, 0x63, 0xca, 0x08, 0x82, 0x66, 0xd2, 0x56, 0x4f, 0xf6, 0x49, 0x0c, 0x46, 0xb5, 0x60, 0x98, 0x18, 0x54, 0x8f, 0x88, 0x76, 0x4d, 0xad, 0x34, 0xa2, 0x5e, 0x3a, 0x85, 0xd5, 0x75, 0x02, 0x3f, 0x0b, 0x9e, 0x66, 0x50, 0x48, 0xa0, 0x3c, 0x35, 0x05, 0x79, 0xa9, 0xd3, 0x24, 0x46, 0xc7, 0xbb, 0x96, 0xcc, 0x92, 0xe0, 0x65, 0xab, 0x94, 0xd3, 0xc8, 0x95, 0x2e, 0x8d, 0xf6, 0x8e, 0xf0, 0xd9, 0xfa, 0x45, 0x6b, 0x3a, 0x06, 0xbb, 0x80, 0xe3, 0xbb, 0xc4, 0xb2, 0x8e, 0x6a, 0x94, 0xb6, 0xd0, 0xff, 0x76, 0x96, 0xa6, 0x4e, 0xfe, 0x05, 0xe7, 0x35, 0xfe, 0xa0, 0x25, 0xd7, 0xbd, 0xbc, 0x41, 0x39, 0xf3, 0xa3, 0xb5, 0x46, 0x07, 0x5c, 0xba, 0x7e, 0xfa, 0x94, 0x73, 0x74, 0xd3, 0xf0, 0xac, 0x80, 0xa6, 0x8d, 0x76, 0x5f, 0x5d, 0xf6, 0x21, 0x0b, 0xca, 0x06, 0x9a, 0x2d, 0x88, 0x64, 0x7a, 0xf7, 0xea, 0x04, 0x2d, 0xac, 0x69, 0x0c, 0xb5, 0x73, 0x78, 0xec, 0x07, 0x77, 0x61, 0x4f, 0xb8, 0xb6, 0x5f, 0xf4, 0x53, 0xca, 0x6b, 0x7d, 0xce, 0x60, 0x98, 0x45, 0x1a, 0x2f, 0x8c, 0x0d, 0xa9, 0xbf, 0xec, 0xf1, 0xfd, 0xf3, 0x91, 0xbb, 0xaa, 0x4e, 0x2a, 0x91, 0xca, 0x18, 0xa1, 0x12, 0x1a, 0x75, 0x23, 0xa2, 0xab, 0xd4, 0x25, 0x14, 0xf4, 0x89, 0xe8 } -, - /* Signature */ - 256, - { 0x69, 0x17, 0x43, 0x72, 0x57, 0xc2, 0x2c, 0xcb, 0x54, 0x03, 0x29, 0x0c, 0x3d, 0xee, 0x82, 0xd9, 0xcf, 0x75, 0x50, 0xb3, 0x1b, 0xd3, 0x1c, 0x51, 0xbd, 0x57, 0xbf, 0xd3, 0x5d, 0x45, 0x2a, 0xb4, 0xdb, 0x7c, 0x4b, 0xe6, 0xb2, 0xe2, 0x5a, 0xc9, 0xa5, 0x9a, 0x1d, 0x2a, 0x7f, 0xeb, 0x62, 0x7f, 0x0a, 0xfd, 0x49, 0x76, 0xb3, 0x00, 0x3c, 0xc9, 0xcf, 0xfd, 0x88, 0x96, 0x50, 0x5e, 0xc3, 0x82, 0xf2, 0x65, 0x10, 0x4d, 0x4c, 0xf8, 0xc9, 0x32, 0xfa, 0x9f, 0xe8, 0x6e, 0x00, 0x87, 0x07, 0x95, 0x99, 0x12, 0x38, 0x9d, 0xa4, 0xb2, 0xd6, 0xb3, 0x69, 0xb3, 0x6a, 0x5e, 0x72, 0xe2, 0x9d, 0x24, 0xc9, 0xa9, 0x8c, 0x9d, 0x31, 0xa3, 0xab, 0x44, 0xe6, 0x43, 0xe6, 0x94, 0x12, 0x66, 0xa4, 0x7a, 0x45, 0xe3, 0x44, 0x6c, 0xe8, 0x77, 0x6a, 0xbe, 0x24, 0x1a, 0x8f, 0x5f, 0xc6, 0x42, 0x3b, 0x24, 0xb1, 0xff, 0x25, 0x0d, 0xc2, 0xc3, 0xa8, 0x17, 0x23, 0x53, 0x56, 0x10, 0x77, 0xe8, 0x50, 0xa7, 0x69, 0xb2, 0x5f, 0x03, 0x25, 0xda, 0xc8, 0x89, 0x65, 0xa3, 0xb9, 0xb4, 0x72, 0xc4, 0x94, 0xe9, 0x5f, 0x71, 0x9b, 0x4e, 0xac, 0x33, 0x2c, 0xaa, 0x7a, 0x65, 0xc7, 0xdf, 0xe4, 0x6d, 0x9a, 0xa7, 0xe6, 0xe0, 0x0f, 0x52, 0x5f, 0x30, 0x3d, 0xd6, 0x3a, 0xb7, 0x91, 0x92, 0x18, 0x90, 0x18, 0x68, 0xf9, 0x33, 0x7f, 0x8c, 0xd2, 0x6a, 0xaf, 0xe6, 0xf3, 0x3b, 0x7f, 0xb2, 0xc9, 0x88, 0x10, 0xaf, 0x19, 0xf7, 0xfc, 0xb2, 0x82, 0xba, 0x15, 0x77, 0x91, 0x2c, 0x1d, 0x36, 0x89, 0x75, 0xfd, 0x5d, 0x44, 0x0b, 0x86, 0xe1, 0x0c, 0x19, 0x97, 0x15, 0xfa, 0x0b, 0x6f, 0x42, 0x50, 0xb5, 0x33, 0x73, 0x2d, 0x0b, 0xef, 0xe1, 0x54, 0x51, 0x50, 0xfc, 0x47, 0xb8, 0x76, 0xde, 0x09, 0xb0, 0x0a, 0x94 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.17", - /* Message to be signed */ - 61, - { 0x00, 0x8e, 0x59, 0x50, 0x5e, 0xaf, 0xb5, 0x50, 0xaa, 0xe5, 0xe8, 0x45, 0x58, 0x4c, 0xeb, 0xb0, 0x0b, 0x6d, 0xe1, 0x73, 0x3e, 0x9f, 0x95, 0xd4, 0x2c, 0x88, 0x2a, 0x5b, 0xbe, 0xb5, 0xce, 0x1c, 0x57, 0xe1, 0x19, 0xe7, 0xc0, 0xd4, 0xda, 0xca, 0x9f, 0x1f, 0xf7, 0x87, 0x02, 0x17, 0xf7, 0xcf, 0xd8, 0xa6, 0xb3, 0x73, 0x97, 0x7c, 0xac, 0x9c, 0xab, 0x8e, 0x71, 0xe4, 0x20 } -, - /* Signature */ - 256, - { 0x92, 0x25, 0x03, 0xb6, 0x73, 0xee, 0x5f, 0x3e, 0x69, 0x1e, 0x1c, 0xa8, 0x5e, 0x9f, 0xf4, 0x17, 0x3c, 0xf7, 0x2b, 0x05, 0xac, 0x2c, 0x13, 0x1d, 0xa5, 0x60, 0x35, 0x93, 0xe3, 0xbc, 0x25, 0x9c, 0x94, 0xc1, 0xf7, 0xd3, 0xa0, 0x6a, 0x5b, 0x98, 0x91, 0xbf, 0x11, 0x3f, 0xa3, 0x9e, 0x59, 0xff, 0x7c, 0x1e, 0xd6, 0x46, 0x5e, 0x90, 0x80, 0x49, 0xcb, 0x89, 0xe4, 0xe1, 0x25, 0xcd, 0x37, 0xd2, 0xff, 0xd9, 0x22, 0x7a, 0x41, 0xb4, 0xa0, 0xa1, 0x9c, 0x0a, 0x44, 0xfb, 0xbf, 0x3d, 0xe5, 0x5b, 0xab, 0x80, 0x20, 0x87, 0xa3, 0xbb, 0x8d, 0x4f, 0xf6, 0x68, 0xee, 0x6b, 0xbb, 0x8a, 0xd8, 0x9e, 0x68, 0x57, 0xa7, 0x9a, 0x9c, 0x72, 0x78, 0x19, 0x90, 0xdf, 0xcf, 0x92, 0xcd, 0x51, 0x94, 0x04, 0xc9, 0x50, 0xf1, 0x3d, 0x11, 0x43, 0xc3, 0x18, 0x4f, 0x1d, 0x25, 0x0c, 0x90, 0xe1, 0x7a, 0xc6, 0xce, 0x36, 0x16, 0x3b, 0x98, 0x95, 0x62, 0x7a, 0xd6, 0xff, 0xec, 0x14, 0x22, 0x44, 0x1f, 0x55, 0xe4, 0x49, 0x9d, 0xba, 0x9b, 0xe8, 0x95, 0x46, 0xae, 0x8b, 0xc6, 0x3c, 0xca, 0x01, 0xdd, 0x08, 0x46, 0x3a, 0xe7, 0xf1, 0xfc, 0xe3, 0xd8, 0x93, 0x99, 0x69, 0x38, 0x77, 0x8c, 0x18, 0x12, 0xe6, 0x74, 0xad, 0x9c, 0x30, 0x9c, 0x5a, 0xcc, 0xa3, 0xfd, 0xe4, 0x4e, 0x7d, 0xd8, 0x69, 0x59, 0x93, 0xe9, 0xc1, 0xfa, 0x87, 0xac, 0xda, 0x99, 0xec, 0xe5, 0xc8, 0x49, 0x9e, 0x46, 0x89, 0x57, 0xad, 0x66, 0x35, 0x9b, 0xf1, 0x2a, 0x51, 0xad, 0xbe, 0x78, 0xd3, 0xa2, 0x13, 0xb4, 0x49, 0xbf, 0x0b, 0x5f, 0x8d, 0x4d, 0x49, 0x6a, 0xcf, 0x03, 0xd3, 0x03, 0x3b, 0x7c, 0xcd, 0x19, 0x6b, 0xc2, 0x2f, 0x68, 0xfb, 0x7b, 0xef, 0x4f, 0x69, 0x7c, 0x5e, 0xa2, 0xb3, 0x50, 0x62, 0xf4, 0x8a, 0x36, 0xdd } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.18", - /* Message to be signed */ - 69, - { 0x6a, 0xbc, 0x54, 0xcf, 0x8d, 0x1d, 0xff, 0x1f, 0x53, 0xb1, 0x7d, 0x81, 0x60, 0x36, 0x88, 0x78, 0xa8, 0x78, 0x8c, 0xc6, 0xd2, 0x2f, 0xa5, 0xc2, 0x25, 0x8c, 0x88, 0xe6, 0x60, 0xb0, 0x9a, 0x89, 0x33, 0xf9, 0xf2, 0xc0, 0x50, 0x4d, 0xda, 0xdc, 0x21, 0xf6, 0xe7, 0x5e, 0x0b, 0x83, 0x3b, 0xeb, 0x55, 0x52, 0x29, 0xde, 0xe6, 0x56, 0xb9, 0x04, 0x7b, 0x92, 0xf6, 0x2e, 0x76, 0xb8, 0xff, 0xcc, 0x60, 0xda, 0xb0, 0x6b, 0x80 } -, - /* Signature */ - 256, - { 0x0b, 0x6d, 0xaf, 0x42, 0xf7, 0xa8, 0x62, 0x14, 0x7e, 0x41, 0x74, 0x93, 0xc2, 0xc4, 0x01, 0xef, 0xae, 0x32, 0x63, 0x6a, 0xb4, 0xcb, 0xd4, 0x41, 0x92, 0xbb, 0xf5, 0xf1, 0x95, 0xb5, 0x0a, 0xe0, 0x96, 0xa4, 0x75, 0xa1, 0x61, 0x4f, 0x0a, 0x9f, 0xa8, 0xf7, 0xa0, 0x26, 0xcb, 0x46, 0xc6, 0x50, 0x6e, 0x51, 0x8e, 0x33, 0xd8, 0x3e, 0x56, 0x47, 0x7a, 0x87, 0x5a, 0xca, 0x8c, 0x7e, 0x71, 0x4c, 0xe1, 0xbd, 0xbd, 0x61, 0xef, 0x5d, 0x53, 0x52, 0x39, 0xb3, 0x3f, 0x2b, 0xfd, 0xd6, 0x17, 0x71, 0xba, 0xb6, 0x27, 0x76, 0xd7, 0x81, 0x71, 0xa1, 0x42, 0x3c, 0xea, 0x87, 0x31, 0xf8, 0x2e, 0x60, 0x76, 0x6d, 0x64, 0x54, 0x26, 0x56, 0x20, 0xb1, 0x5f, 0x5c, 0x5a, 0x58, 0x4f, 0x55, 0xf9, 0x5b, 0x80, 0x2f, 0xe7, 0x8c, 0x57, 0x4e, 0xd5, 0xda, 0xcf, 0xc8, 0x31, 0xf3, 0xcf, 0x2b, 0x05, 0x02, 0xc0, 0xb2, 0x98, 0xf2, 0x5c, 0xcf, 0x11, 0xf9, 0x73, 0xb3, 0x1f, 0x85, 0xe4, 0x74, 0x42, 0x19, 0x85, 0xf3, 0xcf, 0xf7, 0x02, 0xdf, 0x39, 0x46, 0xef, 0x0a, 0x66, 0x05, 0x68, 0x21, 0x11, 0xb2, 0xf5, 0x5b, 0x1f, 0x8a, 0xb0, 0xd2, 0xea, 0x3a, 0x68, 0x3c, 0x69, 0x98, 0x5e, 0xad, 0x93, 0xed, 0x44, 0x9e, 0xa4, 0x8f, 0x03, 0x58, 0xdd, 0xf7, 0x08, 0x02, 0xcb, 0x41, 0xde, 0x2f, 0xd8, 0x3f, 0x3c, 0x80, 0x80, 0x82, 0xd8, 0x49, 0x36, 0x94, 0x8e, 0x0c, 0x84, 0xa1, 0x31, 0xb4, 0x92, 0x78, 0x27, 0x46, 0x05, 0x27, 0xbb, 0x5c, 0xd2, 0x4b, 0xfa, 0xb7, 0xb4, 0x8e, 0x07, 0x1b, 0x24, 0x17, 0x19, 0x30, 0xf9, 0x97, 0x63, 0x27, 0x2f, 0x97, 0x97, 0xbc, 0xb7, 0x6f, 0x1d, 0x24, 0x81, 0x57, 0x55, 0x58, 0xfc, 0xf2, 0x60, 0xb1, 0xf0, 0xe5, 0x54, 0xeb, 0xb3, 0xdf, 0x3c, 0xfc, 0xb9, 0x58 } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.19", - /* Message to be signed */ - 177, - { 0xaf, 0x2d, 0x78, 0x15, 0x2c, 0xf1, 0x0e, 0xfe, 0x01, 0xd2, 0x74, 0xf2, 0x17, 0xb1, 0x77, 0xf6, 0xb0, 0x1b, 0x5e, 0x74, 0x9f, 0x15, 0x67, 0x71, 0x5d, 0xa3, 0x24, 0x85, 0x9c, 0xd3, 0xdd, 0x88, 0xdb, 0x84, 0x8e, 0xc7, 0x9f, 0x48, 0xdb, 0xba, 0x7b, 0x6f, 0x1d, 0x33, 0x11, 0x1e, 0xf3, 0x1b, 0x64, 0x89, 0x9e, 0x73, 0x91, 0xc2, 0xbf, 0xfd, 0x69, 0xf4, 0x90, 0x25, 0xcf, 0x20, 0x1f, 0xc5, 0x85, 0xdb, 0xd1, 0x54, 0x2c, 0x1c, 0x77, 0x8a, 0x2c, 0xe7, 0xa7, 0xee, 0x10, 0x8a, 0x30, 0x9f, 0xec, 0xa2, 0x6d, 0x13, 0x3a, 0x5f, 0xfe, 0xdc, 0x4e, 0x86, 0x9d, 0xcd, 0x76, 0x56, 0x59, 0x6a, 0xc8, 0x42, 0x7e, 0xa3, 0xef, 0x6e, 0x3f, 0xd7, 0x8f, 0xe9, 0x9d, 0x8d, 0xdc, 0x71, 0xd8, 0x39, 0xf6, 0x78, 0x6e, 0x0d, 0xa6, 0xe7, 0x86, 0xbd, 0x62, 0xb3, 0xa4, 0xf1, 0x9b, 0x89, 0x1a, 0x56, 0x15, 0x7a, 0x55, 0x4e, 0xc2, 0xa2, 0xb3, 0x9e, 0x25, 0xa1, 0xd7, 0xc7, 0xd3, 0x73, 0x21, 0xc7, 0xa1, 0xd9, 0x46, 0xcf, 0x4f, 0xbe, 0x75, 0x8d, 0x92, 0x76, 0xf0, 0x85, 0x63, 0x44, 0x9d, 0x67, 0x41, 0x4a, 0x2c, 0x03, 0x0f, 0x42, 0x51, 0xcf, 0xe2, 0x21, 0x3d, 0x04, 0xa5, 0x41, 0x06, 0x37, 0x87 } -, - /* Signature */ - 256, - { 0x20, 0x9c, 0x61, 0x15, 0x78, 0x57, 0x38, 0x7b, 0x71, 0xe2, 0x4b, 0xf3, 0xdd, 0x56, 0x41, 0x45, 0x50, 0x50, 0x3b, 0xec, 0x18, 0x0f, 0xf5, 0x3b, 0xdd, 0x9b, 0xac, 0x06, 0x2a, 0x2d, 0x49, 0x95, 0x09, 0xbf, 0x99, 0x12, 0x81, 0xb7, 0x95, 0x27, 0xdf, 0x91, 0x36, 0x61, 0x5b, 0x7a, 0x6d, 0x9d, 0xb3, 0xa1, 0x03, 0xb5, 0x35, 0xe0, 0x20, 0x2a, 0x2c, 0xac, 0xa1, 0x97, 0xa7, 0xb7, 0x4e, 0x53, 0x56, 0xf3, 0xdd, 0x59, 0x5b, 0x49, 0xac, 0xfd, 0x9d, 0x30, 0x04, 0x9a, 0x98, 0xca, 0x88, 0xf6, 0x25, 0xbc, 0xa1, 0xd5, 0xf2, 0x2a, 0x39, 0x2d, 0x8a, 0x74, 0x9e, 0xfb, 0x6e, 0xed, 0x9b, 0x78, 0x21, 0xd3, 0x11, 0x0a, 0xc0, 0xd2, 0x44, 0x19, 0x9e, 0xcb, 0x4a, 0xa3, 0xd7, 0x35, 0xa8, 0x3a, 0x2e, 0x88, 0x93, 0xc6, 0xbf, 0x85, 0x81, 0x38, 0x3c, 0xca, 0xee, 0x83, 0x46, 0x35, 0xb7, 0xfa, 0x1f, 0xaf, 0xfa, 0x45, 0xb1, 0x3d, 0x15, 0xc1, 0xda, 0x33, 0xaf, 0x71, 0xe8, 0x93, 0x03, 0xd6, 0x80, 0x90, 0xff, 0x62, 0xee, 0x61, 0x5f, 0xdf, 0x5a, 0x84, 0xd1, 0x20, 0x71, 0x1d, 0xa5, 0x3c, 0x28, 0x89, 0x19, 0x8a, 0xb3, 0x83, 0x17, 0xa9, 0x73, 0x4a, 0xb2, 0x7d, 0x67, 0x92, 0x4c, 0xea, 0x74, 0x15, 0x6f, 0xf9, 0x9b, 0xef, 0x98, 0x76, 0xbb, 0x5c, 0x33, 0x9e, 0x93, 0x74, 0x52, 0x83, 0xe1, 0xb3, 0x4e, 0x07, 0x22, 0x26, 0xb8, 0x80, 0x45, 0xe0, 0x17, 0xe9, 0xf0, 0x5b, 0x2a, 0x8c, 0x41, 0x67, 0x40, 0x25, 0x8e, 0x22, 0x3b, 0x26, 0x90, 0x02, 0x74, 0x91, 0x73, 0x22, 0x73, 0xf3, 0x22, 0x9d, 0x9e, 0xf2, 0xb1, 0xb3, 0x80, 0x7e, 0x32, 0x10, 0x18, 0x92, 0x0a, 0xd3, 0xe5, 0x3d, 0xae, 0x47, 0xe6, 0xd9, 0x39, 0x5c, 0x18, 0x4b, 0x93, 0xa3, 0x74, 0xc6, 0x71, 0xfa, 0xa2, 0xce } - -} -, -{ - "PKCS#1 v1.5 Signature Example 15.20", - /* Message to be signed */ - 179, - { 0x40, 0xee, 0x99, 0x24, 0x58, 0xd6, 0xf6, 0x14, 0x86, 0xd2, 0x56, 0x76, 0xa9, 0x6d, 0xd2, 0xcb, 0x93, 0xa3, 0x7f, 0x04, 0xb1, 0x78, 0x48, 0x2f, 0x2b, 0x18, 0x6c, 0xf8, 0x82, 0x15, 0x27, 0x0d, 0xba, 0x29, 0xd7, 0x86, 0xd7, 0x74, 0xb0, 0xc5, 0xe7, 0x8c, 0x7f, 0x6e, 0x56, 0xa9, 0x56, 0xe7, 0xf7, 0x39, 0x50, 0xa2, 0xb0, 0xc0, 0xc1, 0x0a, 0x08, 0xdb, 0xcd, 0x67, 0xe5, 0xb2, 0x10, 0xbb, 0x21, 0xc5, 0x8e, 0x27, 0x67, 0xd4, 0x4f, 0x7d, 0xd4, 0x01, 0x4e, 0x39, 0x66, 0x14, 0x3b, 0xf7, 0xe3, 0xd6, 0x6f, 0xf0, 0xc0, 0x9b, 0xe4, 0xc5, 0x5f, 0x93, 0xb3, 0x99, 0x94, 0xb8, 0x51, 0x8d, 0x9c, 0x1d, 0x76, 0xd5, 0xb4, 0x73, 0x74, 0xde, 0xa0, 0x8f, 0x15, 0x7d, 0x57, 0xd7, 0x06, 0x34, 0x97, 0x8f, 0x38, 0x56, 0xe0, 0xe5, 0xb4, 0x81, 0xaf, 0xbb, 0xdb, 0x5a, 0x3a, 0xc4, 0x8d, 0x48, 0x4b, 0xe9, 0x2c, 0x93, 0xde, 0x22, 0x91, 0x78, 0x35, 0x4c, 0x2d, 0xe5, 0x26, 0xe9, 0xc6, 0x5a, 0x31, 0xed, 0xe1, 0xef, 0x68, 0xcb, 0x63, 0x98, 0xd7, 0x91, 0x16, 0x84, 0xfe, 0xc0, 0xba, 0xbc, 0x3a, 0x78, 0x1a, 0x66, 0x66, 0x07, 0x83, 0x50, 0x69, 0x74, 0xd0, 0xe1, 0x48, 0x25, 0x10, 0x1c, 0x3b, 0xfa, 0xea } -, - /* Signature */ - 256, - { 0x92, 0x75, 0x02, 0xb8, 0x24, 0xaf, 0xc4, 0x25, 0x13, 0xca, 0x65, 0x70, 0xde, 0x33, 0x8b, 0x8a, 0x64, 0xc3, 0xa8, 0x5e, 0xb8, 0x28, 0xd3, 0x19, 0x36, 0x24, 0xf2, 0x7e, 0x8b, 0x10, 0x29, 0xc5, 0x5c, 0x11, 0x9c, 0x97, 0x33, 0xb1, 0x8f, 0x58, 0x49, 0xb3, 0x50, 0x09, 0x18, 0xbc, 0xc0, 0x05, 0x51, 0xd9, 0xa8, 0xfd, 0xf5, 0x3a, 0x97, 0x74, 0x9f, 0xa8, 0xdc, 0x48, 0x0d, 0x6f, 0xe9, 0x74, 0x2a, 0x58, 0x71, 0xf9, 0x73, 0x92, 0x65, 0x28, 0x97, 0x2a, 0x1a, 0xf4, 0x9e, 0x39, 0x25, 0xb0, 0xad, 0xf1, 0x4a, 0x84, 0x27, 0x19, 0xb4, 0xa5, 0xa2, 0xd8, 0x9f, 0xa9, 0xc0, 0xb6, 0x60, 0x5d, 0x21, 0x2b, 0xed, 0x1e, 0x67, 0x23, 0xb9, 0x34, 0x06, 0xad, 0x30, 0xe8, 0x68, 0x29, 0xa5, 0xc7, 0x19, 0xb8, 0x90, 0xb3, 0x89, 0x30, 0x6d, 0xc5, 0x50, 0x64, 0x86, 0xee, 0x2f, 0x36, 0xa8, 0xdf, 0xe0, 0xa9, 0x6a, 0xf6, 0x78, 0xc9, 0xcb, 0xd6, 0xaf, 0xf3, 0x97, 0xca, 0x20, 0x0e, 0x3e, 0xdc, 0x1e, 0x36, 0xbd, 0x2f, 0x08, 0xb3, 0x1d, 0x54, 0x0c, 0x0c, 0xb2, 0x82, 0xa9, 0x55, 0x9e, 0x4a, 0xdd, 0x4f, 0xc9, 0xe6, 0x49, 0x2e, 0xed, 0x0c, 0xcb, 0xd3, 0xa6, 0x98, 0x2e, 0x5f, 0xaa, 0x2d, 0xdd, 0x17, 0xbe, 0x47, 0x41, 0x7c, 0x80, 0xb4, 0xe5, 0x45, 0x2d, 0x31, 0xf7, 0x24, 0x01, 0xa0, 0x42, 0x32, 0x51, 0x09, 0x54, 0x4d, 0x95, 0x4c, 0x01, 0x93, 0x90, 0x79, 0xd4, 0x09, 0xa5, 0xc3, 0x78, 0xd7, 0x51, 0x2d, 0xfc, 0x2d, 0x2a, 0x71, 0xef, 0xcc, 0x34, 0x32, 0xa7, 0x65, 0xd1, 0xc6, 0xa5, 0x2c, 0xfc, 0xe8, 0x99, 0xcd, 0x79, 0xb1, 0x5b, 0x4f, 0xc3, 0x72, 0x36, 0x41, 0xef, 0x6b, 0xd0, 0x0a, 0xcc, 0x10, 0x40, 0x7e, 0x5d, 0xf5, 0x8d, 0xd1, 0xc3, 0xc5, 0xc5, 0x59, 0xa5, 0x06 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -}; - diff --git a/notes/rsa-testvectors/pkcs1v15sign-vectors.txt b/notes/rsa-testvectors/pkcs1v15sign-vectors.txt deleted file mode 100644 index 178dd23c..00000000 --- a/notes/rsa-testvectors/pkcs1v15sign-vectors.txt +++ /dev/null @@ -1,9049 +0,0 @@ -Test vectors for RSA PKCS#1 v1.5 Signature -========================================== - -This file contains test vectors for the PKCS#1 v1.5 signature -scheme with appendix. 15 RSA keys of different sizes have -been generated. For each key, 20 random messages of length -between 1 and 256 octets have been PKCS#1 v1.5 signed. -As specified in PKCS#1, the block type for this operation -is 1. The digest algorithm is SHA-1; i.e. the given message -must be hashed and the SHA-1 hash must be encapsulated in a -DigestInfo structure as specified in PKCS#1 v1.5. - -Key lengths: - -Key 1: 1024 bits -Key 2: 1024 bits -Key 3: 1024 bits -Key 4: 1024 bits -Key 5: 1024 bits -Key 6: 1024 bits -Key 7: 1025 bits -Key 8: 1026 bits -Key 9: 1027 bits -Key 10: 1028 bits -Key 11: 1029 bits -Key 12: 1030 bits -Key 13: 1031 bits -Key 14: 1536 bits -Key 15: 2048 bits - -These test vectors have been derived from the PSS test vectors. -============================================================================ -# Thirteen RSA keys with bit sizes between 1024 and 1031, one 1536-bit key, -# and one 2048-bit key are generated. - -# For each key, 20 random messages are PKCS#1 v1.5 signed. - -# Example 1: A 1024-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -a5 6e 4a 0e 70 10 17 58 9a 51 87 dc 7e a8 41 d1 -56 f2 ec 0e 36 ad 52 a4 4d fe b1 e6 1f 7a d9 91 -d8 c5 10 56 ff ed b1 62 b4 c0 f2 83 a1 2a 88 a3 -94 df f5 26 ab 72 91 cb b3 07 ce ab fc e0 b1 df -d5 cd 95 08 09 6d 5b 2b 8b 6d f5 d6 71 ef 63 77 -c0 92 1c b2 3c 27 0a 70 e2 59 8e 6f f8 9d 19 f1 -05 ac c2 d3 f0 cb 35 f2 92 80 e1 38 6b 6f 64 c4 -ef 22 e1 e1 f2 0d 0c e8 cf fb 22 49 bd 9a 21 37 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -a5 6e 4a 0e 70 10 17 58 9a 51 87 dc 7e a8 41 d1 -56 f2 ec 0e 36 ad 52 a4 4d fe b1 e6 1f 7a d9 91 -d8 c5 10 56 ff ed b1 62 b4 c0 f2 83 a1 2a 88 a3 -94 df f5 26 ab 72 91 cb b3 07 ce ab fc e0 b1 df -d5 cd 95 08 09 6d 5b 2b 8b 6d f5 d6 71 ef 63 77 -c0 92 1c b2 3c 27 0a 70 e2 59 8e 6f f8 9d 19 f1 -05 ac c2 d3 f0 cb 35 f2 92 80 e1 38 6b 6f 64 c4 -ef 22 e1 e1 f2 0d 0c e8 cf fb 22 49 bd 9a 21 37 - -# Public exponent: -01 00 01 - -# Exponent: -33 a5 04 2a 90 b2 7d 4f 54 51 ca 9b bb d0 b4 47 -71 a1 01 af 88 43 40 ae f9 88 5f 2a 4b be 92 e8 -94 a7 24 ac 3c 56 8c 8f 97 85 3a d0 7c 02 66 c8 -c6 a3 ca 09 29 f1 e8 f1 12 31 88 44 29 fc 4d 9a -e5 5f ee 89 6a 10 ce 70 7c 3e d7 e7 34 e4 47 27 -a3 95 74 50 1a 53 26 83 10 9c 2a ba ca ba 28 3c -31 b4 bd 2f 53 c3 ee 37 e3 52 ce e3 4f 9e 50 3b -d8 0c 06 22 ad 79 c6 dc ee 88 35 47 c6 a3 b3 25 - -# Prime 1: -e7 e8 94 27 20 a8 77 51 72 73 a3 56 05 3e a2 a1 -bc 0c 94 aa 72 d5 5c 6e 86 29 6b 2d fc 96 79 48 -c0 a7 2c bc cc a7 ea cb 35 70 6e 09 a1 df 55 a1 -53 5b d9 b3 cc 34 16 0b 3b 6d cd 3e da 8e 64 43 - -# Prime 2: -b6 9d ca 1c f7 d4 d7 ec 81 e7 5b 90 fc ca 87 4a -bc de 12 3f d2 70 01 80 aa 90 47 9b 6e 48 de 8d -67 ed 24 f9 f1 9d 85 ba 27 58 74 f5 42 cd 20 dc -72 3e 69 63 36 4a 1f 94 25 45 2b 26 9a 67 99 fd - -# Prime exponent 1: -28 fa 13 93 86 55 be 1f 8a 15 9c ba ca 5a 72 ea -19 0c 30 08 9e 19 cd 27 4a 55 6f 36 c4 f6 e1 9f -55 4b 34 c0 77 79 04 27 bb dd 8d d3 ed e2 44 83 -28 f3 85 d8 1b 30 e8 e4 3b 2f ff a0 27 86 19 79 - -# Prime exponent 2: -1a 8b 38 f3 98 fa 71 20 49 89 8d 7f b7 9e e0 a7 -76 68 79 12 99 cd fa 09 ef c0 e5 07 ac b2 1e d7 -43 01 ef 5b fd 48 be 45 5e ae b6 e1 67 82 55 82 -75 80 a8 e4 e8 e1 41 51 d1 51 0a 82 a3 f2 e7 29 - -# Coefficient: -27 15 6a ba 41 26 d2 4a 81 f3 a5 28 cb fb 27 f5 -68 86 f8 40 a9 f6 e8 6e 17 a4 4b 94 fe 93 19 58 -4b 8e 22 fd de 1e 5a 2e 3b d8 aa 5b a8 d8 58 41 -94 eb 21 90 ac f8 32 b8 47 f1 3a 3d 24 a7 9f 4d - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 1.1 - -# ----------------- - -# Message to be signed: -cd c8 7d a2 23 d7 86 df 3b 45 e0 bb bc 72 13 26 -d1 ee 2a f8 06 cc 31 54 75 cc 6f 0d 9c 66 e1 b6 -23 71 d4 5c e2 39 2e 1a c9 28 44 c3 10 10 2f 15 -6a 0d 8d 52 c1 f4 c4 0b a3 aa 65 09 57 86 cb 76 -97 57 a6 56 3b a9 58 fe d0 bc c9 84 e8 b5 17 a3 -d5 f5 15 b2 3b 8a 41 e7 4a a8 67 69 3f 90 df b0 -61 a6 e8 6d fa ae e6 44 72 c0 0e 5f 20 94 57 29 -cb eb e7 7f 06 ce 78 e0 8f 40 98 fb a4 1f 9d 61 -93 c0 31 7e 8b 60 d4 b6 08 4a cb 42 d2 9e 38 08 -a3 bc 37 2d 85 e3 31 17 0f cb f7 cc 72 d0 b7 1c -29 66 48 b3 a4 d1 0f 41 62 95 d0 80 7a a6 25 ca -b2 74 4f d9 ea 8f d2 23 c4 25 37 02 98 28 bd 16 -be 02 54 6f 13 0f d2 e3 3b 93 6d 26 76 e0 8a ed -1b 73 31 8b 75 0a 01 67 d0 - -# Signature: -6b c3 a0 66 56 84 29 30 a2 47 e3 0d 58 64 b4 d8 -19 23 6b a7 c6 89 65 86 2a d7 db c4 e2 4a f2 8e -86 bb 53 1f 03 35 8b e5 fb 74 77 7c 60 86 f8 50 -ca ef 89 3f 0d 6f cc 2d 0c 91 ec 01 36 93 b4 ea -00 b8 0c d4 9a ac 4e cb 5f 89 11 af e5 39 ad a4 -a8 f3 82 3d 1d 13 e4 72 d1 49 05 47 c6 59 c7 61 -7f 3d 24 08 7d db 6f 2b 72 09 61 67 fc 09 7c ab -18 e9 a4 58 fc b6 34 cd ce 8e e3 58 94 c4 84 d7 - -# PKCS#1 v1.5 Signature Example 1.2 - -# ----------------- - -# Message to be signed: -85 13 84 cd fe 81 9c 22 ed 6c 4c cb 30 da eb 5c -f0 59 bc 8e 11 66 b7 e3 53 0c 4c 23 3e 2b 5f 8f -71 a1 cc a5 82 d4 3e cc 72 b1 bc a1 6d fc 70 13 -22 6b 9e - -# Signature: -84 fd 2c e7 34 ec 1d a8 28 d0 f1 5b f4 9a 87 07 -c1 5d 05 94 81 36 de 53 7a 3d b4 21 38 41 67 c8 -6f ae 02 25 87 ee 9e 13 7d ae e7 54 73 82 62 93 -2d 27 1c 74 4c 6d 3a 18 9a d4 31 1b db 02 04 92 -e3 22 fb dd c4 04 06 ea 86 0d 4e 8e a2 a4 08 4a -a9 8b 96 22 a4 46 75 6f db 74 0d db 3d 91 db 76 -70 e2 11 66 1b bf 87 09 b1 1c 08 a7 07 71 42 2d -1a 12 de f2 9f 06 88 a1 92 ae bd 89 e0 f8 96 f8 - -# PKCS#1 v1.5 Signature Example 1.3 - -# ----------------- - -# Message to be signed: -a4 b1 59 94 17 61 c4 0c 6a 82 f2 b8 0d 1b 94 f5 -aa 26 54 fd 17 e1 2d 58 88 64 67 9b 54 cd 04 ef -8b d0 30 12 be 8d c3 7f 4b 83 af 79 63 fa ff 0d -fa 22 54 77 43 7c 48 01 7f f2 be 81 91 cf 39 55 -fc 07 35 6e ab 3f 32 2f 7f 62 0e 21 d2 54 e5 db -43 24 27 9f e0 67 e0 91 0e 2e 81 ca 2c ab 31 c7 -45 e6 7a 54 05 8e b5 0d 99 3c db 9e d0 b4 d0 29 -c0 6d 21 a9 4c a6 61 c3 ce 27 fa e1 d6 cb 20 f4 -56 4d 66 ce 47 67 58 3d 0e 5f 06 02 15 b5 90 17 -be 85 ea 84 89 39 12 7b d8 c9 c4 d4 7b 51 05 6c -03 1c f3 36 f1 7c 99 80 f3 b8 f5 b9 b6 87 8e 8b -79 7a a4 3b 88 26 84 33 3e 17 89 3f e9 ca a6 aa -29 9f 7e d1 a1 8e e2 c5 48 64 b7 b2 b9 9b 72 61 -8f b0 25 74 d1 39 ef 50 f0 19 c9 ee f4 16 97 13 -38 e7 d4 70 - -# Signature: -0b 1f 2e 51 80 e5 c7 b4 b5 e6 72 92 9f 66 4c 48 -96 e5 0c 35 13 4b 6d e4 d5 a9 34 25 2a 3a 24 5f -f4 83 40 92 0e 10 34 b7 d5 a5 b5 24 eb 0e 1c f1 -2b ef ef 49 b2 7b 73 2d 2c 19 e1 c4 32 17 d6 e1 -41 73 81 11 1a 1d 36 de 63 75 cf 45 5b 3c 98 12 -63 9d bc 27 60 0c 75 19 94 fb 61 79 9e cf 7d a6 -bc f5 15 40 af d0 17 4d b4 03 31 88 55 66 75 b1 -d7 63 36 0a f4 6f ee ca 5b 60 f8 82 82 9e e7 b2 - -# PKCS#1 v1.5 Signature Example 1.4 - -# ----------------- - -# Message to be signed: -bc 65 67 47 fa 9e af b3 f0 - -# Signature: -45 60 7a d6 11 cf 57 47 a4 1a c9 4d 0f fe c8 78 -bd af 63 f6 b5 7a 4b 08 8b f3 6e 34 e1 09 f8 40 -f2 4b 74 2a da 16 10 2d ab f9 51 cb c4 4f 89 82 -e9 4e d4 cd 09 44 8d 20 ec 0e fa 73 54 5f 80 b6 -54 06 be d6 19 4a 61 c3 40 b4 ad 15 68 cb b7 58 -51 04 9f 11 af 17 34 96 40 76 e0 20 29 ae e2 00 -e4 0e 80 be 0f 43 61 f6 98 41 c4 f9 2a 44 50 a2 -28 6d 43 28 9b 40 55 54 c5 4d 25 c6 ec b5 84 f4 - -# PKCS#1 v1.5 Signature Example 1.5 - -# ----------------- - -# Message to be signed: -b4 55 81 54 7e 54 27 77 0c 76 8e 8b 82 b7 55 64 -e0 ea 4e 9c 32 59 4d 6b ff 70 65 44 de 0a 87 76 -c7 a8 0b 45 76 55 0e ee 1b 2a ca bc 7e 8b 7d 3e -f7 bb 5b 03 e4 62 c1 10 47 ea dd 00 62 9a e5 75 -48 0a c1 47 0f e0 46 f1 3a 2b f5 af 17 92 1d c4 -b0 aa 8b 02 be e6 33 49 11 65 1d 7f 85 25 d1 0f -32 b5 1d 33 be 52 0d 3d df 5a 70 99 55 a3 df e7 -82 83 b9 e0 ab 54 04 6d 15 0c 17 7f 03 7f dc cc -5b e4 ea 5f 68 b5 e5 a3 8c 9d 7e dc cc c4 97 5f -45 5a 69 09 b4 - -# Signature: -54 be 9d 90 87 75 15 f4 50 27 9c 15 b5 f6 1a d6 -f1 5e cc 95 f1 8c be d8 2b 65 b1 66 7a 57 58 09 -58 79 94 66 80 44 f3 bc 2a e7 f8 84 50 1f 64 f0 -b4 3f 58 8c fa 20 5a 6a b7 04 32 8c 2d 4a b9 2a -7a e1 34 40 61 4d 3e 08 5f 40 1d a9 ad 28 e2 10 -5e 4a 0e db 68 1a 64 24 df 04 73 88 ce 05 1e e9 -df 7b c2 16 3f e3 47 52 0a d5 1c cd 51 80 64 38 -3e 74 1a ca d3 cb dc 2c b5 a7 c6 8e 86 84 64 c2 - -# PKCS#1 v1.5 Signature Example 1.6 - -# ----------------- - -# Message to be signed: -10 aa e9 a0 ab 0b 59 5d 08 41 20 7b 70 0d 48 d7 -5f ae dd e3 b7 75 cd 6b 4c c8 8a e0 6e 46 94 ec -74 ba 18 f8 52 0d 4f 5e a6 9c bb e7 cc 2b eb a4 -3e fd c1 02 15 ac 4e b3 2d c3 02 a1 f5 3d c6 c4 -35 22 67 e7 93 6c fe bf 7c 8d 67 03 57 84 a3 90 -9f a8 59 c7 b7 b5 9b 8e 39 c5 c2 34 9f 18 86 b7 -05 a3 02 67 d4 02 f7 48 6a b4 f5 8c ad 5d 69 ad -b1 7a b8 cd 0c e1 ca f5 02 5a f4 ae 24 b1 fb 87 -94 c6 07 0c c0 9a 51 e2 f9 91 13 11 e3 87 7d 00 -44 c7 1c 57 a9 93 39 50 08 80 6b 72 3a c3 83 73 -d3 95 48 18 18 52 8c 1e 70 53 73 92 82 05 35 29 -51 0e 93 5c d0 fa 77 b8 fa 53 cc 2d 47 4b d4 fb -3c c5 c6 72 d6 ff dc 90 a0 0f 98 48 71 2c 4b cf -e4 6c 60 57 36 59 b1 1e 64 57 e8 61 f0 f6 04 b6 -13 8d 14 4f 8c e4 e2 da 73 - -# Signature: -0e 6f f6 3a 85 6b 9c bd 5d be 42 31 83 12 20 47 -dd 39 d6 f7 6d 1b 23 10 e5 46 fe 9e e7 3b 33 ef -a7 c7 8f 94 74 45 5c 9e 5b 88 cb 38 3a af c3 69 -86 68 e7 b7 a5 9a 9c bb 5b 08 97 b6 c5 af b7 f8 -ba c4 b9 24 e9 8d 76 0a 15 fc 43 d2 81 4a b2 d5 -18 7f 79 be d9 91 5a 93 39 7e bc 22 a7 67 75 06 -a0 2e 07 6d 3f fd c0 44 1d bd 4d b0 04 53 dc 28 -d8 30 e0 57 3f 77 b8 17 b5 05 c3 8b 4a 4b b5 d0 - -# PKCS#1 v1.5 Signature Example 1.7 - -# ----------------- - -# Message to be signed: -ef b5 da 1b 4d 1e 6d 9a 5d ff 92 d0 18 4d a7 e3 -1f 87 7d 12 81 dd da 62 56 64 86 9e 83 79 e6 7a -d3 b7 5e ae 74 a5 80 e9 82 7a bd 6e b7 a0 02 cb -54 11 f5 26 67 97 76 8f b8 e9 5a e4 0e 3e 8b 34 -66 f5 ab 15 d6 95 53 95 29 39 ec 23 e6 1d 58 49 -7f ac 76 aa 1c 0b b5 a3 cb 4a 54 38 35 87 c7 bb -78 d1 3e ef da 20 54 43 e6 ce 43 65 80 2d f5 5c -64 71 34 97 98 4e 7c a9 67 22 b3 ed f8 4d 56 - -# Signature: -83 85 d5 85 33 a9 95 f7 2d f2 62 b7 0f 40 b3 91 -dd f5 15 f4 64 b9 d2 cc 2d 66 39 8f c0 56 89 d8 -11 63 29 46 d6 2e ab dc a7 a3 1f cf 6c d6 c9 81 -d2 8b bc 29 08 3e 4a 6d 5b 2b 37 8c a4 e5 40 f0 -60 b9 6d 53 ad 26 93 f8 21 78 b9 4e 2e 2f 86 b9 -ac cf a0 20 25 10 7e 06 2a b7 08 01 75 68 45 01 -02 8f 67 64 61 d8 1c 00 8f e4 75 06 71 64 99 70 -87 8f c1 75 cf 98 e9 6b 2e cb f6 87 4d 77 da cb - -# PKCS#1 v1.5 Signature Example 1.8 - -# ----------------- - -# Message to be signed: -53 bb 58 ce 42 f1 98 49 40 55 26 57 23 3b 14 96 -9a f3 65 c0 a5 61 a4 13 2a f1 8a f3 94 32 28 0e -3e 43 70 82 43 4b 19 23 18 37 18 4f 02 cf 2b 2e -72 6b eb f7 4d 7a e3 25 6d 8b 72 f3 ea fd b1 34 -d3 3d e0 6f 29 91 d2 99 d5 9f 54 68 d4 3b 99 58 -d6 a9 68 f5 96 9e db bc 6e 71 85 cb c7 16 c7 c9 -45 da fa 9c c7 1d df aa a0 10 94 a4 52 dd f5 e2 -40 73 20 40 0b f0 5e a9 72 9c af bf 06 00 e7 88 -07 ef 94 62 e3 fd e3 2e d7 d9 81 a5 6f 47 51 ef -64 fb 45 49 91 0e cc 91 1d 72 80 53 b3 99 43 00 -47 40 e6 f5 82 1f e8 d7 5c 06 17 bf 2c 6b 24 bb -fc 34 01 3f c9 5f 0d ed f5 ba 29 7f 50 4f b8 33 -da 2a 43 6d 1d 8f f1 cc 51 93 e2 a6 43 89 fc ed -91 8e 7f eb 67 16 33 0f 66 80 1d b9 49 75 49 cf -1d 3b d9 7c f1 bc 62 55 - -# Signature: -8e 1f 3d 26 ec 7c 6b bb 8c 54 c5 d2 5f 31 20 58 -78 03 af 6d 3c 2b 99 a3 7c ed 6a 36 57 d4 ae 54 -26 6f 63 ff fd e6 60 c8 66 d6 5d 0a b0 58 9e 1d -12 d9 ce 60 54 b0 5c 86 68 ae 12 71 71 cc aa e7 -f1 cd 40 96 77 f5 21 57 b6 12 3a b2 27 f2 7a 00 -96 6d 14 39 b4 2a 32 16 9d 10 70 39 40 26 fc 8b -c9 35 45 b1 ac 25 2d 0f 7d a7 51 c0 2e 33 a4 78 -31 fb d7 15 14 c2 bb bd 3a db 67 40 c0 fd 68 ad - -# PKCS#1 v1.5 Signature Example 1.9 - -# ----------------- - -# Message to be signed: -27 ca dc 69 84 50 94 5f 20 4e c3 cf 8c 6c bd 8c -eb 4c c0 cb e3 12 27 4f a9 6b 04 de ac 85 51 60 -c0 e0 4e 4a c5 d3 82 10 c2 7c - -# Signature: -7b 63 f9 22 33 56 f3 5f 61 17 f6 8c 8f 82 20 03 -4f c2 38 4a b5 dc 69 04 14 1f 13 93 14 d6 ee 89 -f5 4e c6 ff d1 8c 41 3a 23 c5 93 1c 7f bb 13 c5 -55 cc fd 59 0e 0e aa 85 3c 8c 94 d2 52 0c d4 25 -0d 9a 05 a1 93 b6 5d c7 49 b8 24 78 af 01 56 ee -1d e5 5d da d3 3e c1 f0 09 9c ad 6c 89 1a 36 17 -c7 39 3d 05 fb fb bb 00 52 8a 00 1d f0 b2 04 eb -df 1a 34 10 90 de a8 9f 87 0a 87 74 58 42 7f 7b - -# PKCS#1 v1.5 Signature Example 1.10 - -# ----------------- - -# Message to be signed: -71 64 07 e9 01 b9 ef 92 d7 61 b0 13 fd 13 eb 7a -d7 2a ed - -# Signature: -2a 22 db e3 77 4d 5b 29 72 01 b5 5a 0f 17 f4 2d -ce 63 b7 84 5c b3 25 cf e9 51 d0 ba db 5c 5a 14 -47 21 43 d8 96 c8 6c c3 39 f8 36 71 16 42 15 ab -c9 78 62 f2 15 16 54 e7 5a 3b 35 7c 37 31 1b 3d -72 68 ca b5 40 20 2e 23 be e5 27 36 f2 cd 86 cc -e0 c7 db de 95 e1 c6 00 a4 73 95 dc 5e b0 a4 72 -15 3f bc 4f b2 1b 64 3e 0c 04 ae 14 dd 37 e9 7e -61 7a 75 67 c8 96 52 21 97 81 00 1b a6 f8 32 98 - -# PKCS#1 v1.5 Signature Example 1.11 - -# ----------------- - -# Message to be signed: -46 c2 4e 41 03 00 16 29 c7 12 dd 4c e8 d7 47 ee -59 5d 6c 74 4c cc 4f 71 34 7d 9b 8a bf 49 d1 b8 -fb 2e f9 1b 95 dc 89 9d 4c 0e 3d 29 97 e6 38 f4 -cf 3f 68 e0 49 8d e5 aa bd 13 f0 df e0 2f f2 6b -a4 37 91 04 e7 8f fa 95 ff bd 15 06 7e f8 cb d7 -eb 78 60 fe cc 71 ab e1 3d 5c 72 0a 66 85 1f 2d -ef d4 e7 95 05 4d 7b ec 02 4b b4 22 a4 6a 73 68 -b5 6d 95 b4 7a eb af be ad d6 12 81 25 93 a7 0d -b9 f9 6d 45 1e e1 5e db 29 93 08 d7 77 f4 bb 68 -ed 33 77 c3 21 56 b4 1b 7a 9c 92 a1 4c 8b 81 14 -43 99 c5 6a 5a 43 2f 4f 77 0a a9 7d a8 41 5d 0b -da 2e 81 32 06 03 1e 70 62 00 31 c8 81 d6 16 bf -fd 5f 03 bf 14 7c 1e 73 76 6c 26 24 62 08 - -# Signature: -12 23 5b 0b 40 61 26 d9 d2 60 d4 47 e9 23 a1 10 -51 fb 24 30 79 f4 46 fd 73 a7 01 81 d5 36 34 d7 -a0 96 8e 4e e2 77 77 ed a6 3f 6e 4a 3a 91 ad 59 -85 99 8a 48 48 da 59 ce 69 7b 24 bb 33 2f a2 ad -9c e4 62 ca 4a ff dc 21 da b9 08 e8 ce 15 af 6e -b9 10 5b 1a bc f3 91 42 aa 17 b3 4c 4c 09 23 86 -a7 ab bf e0 28 af db eb c1 4f 2c e2 6f be e5 ed -ec a1 15 02 d3 9a 6b 74 03 15 48 43 d9 8a 62 a7 - -# PKCS#1 v1.5 Signature Example 1.12 - -# ----------------- - -# Message to be signed: -bc 99 a9 32 aa 16 d6 22 bf ff 79 c5 0b 4c 42 35 -86 73 26 11 29 e2 8d 6a 91 8f f1 b0 f1 c4 f4 6a -d8 af a9 8b 0c a0 f5 6f 96 79 75 b0 a2 9b e8 82 -e9 3b 6c d3 fc 33 e1 fa ef 72 e5 2b 2a e0 a3 f1 -20 24 50 6e 25 69 0e 90 2e 78 29 82 14 55 56 53 -22 84 cf 50 57 89 73 8f 4d a3 1f a1 33 3d 3a f8 -62 b2 ba 6b 6c e7 ab 4c ce 6a ba - -# Signature: -87 2e c5 ad 4f 18 46 25 6f 17 e9 93 6a c5 0e 43 -e9 96 3e a8 c1 e7 6f 15 87 9b 78 74 d7 7d 12 2a -60 9d c8 c5 61 14 5b 94 bf 4f fd ff de b1 7e 6e -76 ff c6 c1 0c 07 47 f5 e3 7a 9f 43 4f 56 09 e7 -9d a5 25 02 15 a4 57 af df 12 c6 50 7c c1 55 1f -54 a2 80 10 59 58 26 a2 c9 b9 7f a0 aa 85 1c c6 -8b 70 5d 7a 06 d7 20 ba 02 7e 4a 1c 0b 01 95 00 -fb 63 b7 80 71 68 4d cf a9 77 27 00 b9 82 dc 66 - -# PKCS#1 v1.5 Signature Example 1.13 - -# ----------------- - -# Message to be signed: -73 1e 17 2a c0 63 99 2c 5b 11 ba 17 0d fb 23 bb -00 0d 47 ba 19 53 29 cf 27 80 61 03 73 81 51 4c -14 60 64 c5 28 5d b1 30 dd 5b ae 98 b7 72 22 59 -50 ea b0 5d 3e a9 96 f6 ff fb 9a 8c 86 22 91 3f -27 99 14 c8 9a da 4f 3d d7 76 66 a8 68 bf cb ff -2b 95 b7 da f4 53 d4 e2 c9 d7 5b ee e7 f8 e7 09 -05 e4 06 6a 4f 73 ae cc 67 f9 56 aa 5a 32 92 b8 -48 8c 91 7d 31 7c fd c8 62 53 e6 90 38 1e 15 ab - -# Signature: -76 20 4e ac c1 d6 3e c1 d6 ad 5b d0 69 2e 1a 2f -68 6d f6 e6 4c a9 45 c7 7a 82 4d e2 12 ef a6 d9 -78 2d 81 b4 59 14 03 ff 40 20 62 02 98 c0 7e bd -3a 8a 61 c5 bf 4d ad 62 cb fc 4a e6 a0 39 37 be -4b 49 a2 16 d5 70 fc 6e 81 87 29 37 87 6e 27 bd -19 cf 60 1e ff c3 0d dc a5 73 c9 d5 6c d4 56 9b -db 48 51 c4 50 c4 2c b2 1e 73 8c dd 61 02 7b 8b -e5 e9 b4 10 fc 46 aa 3f 29 e4 be 9e 64 45 13 46 - -# PKCS#1 v1.5 Signature Example 1.14 - -# ----------------- - -# Message to be signed: -02 11 38 26 83 a7 4d 8d 2a 2c b6 a0 65 50 56 3b -e1 c2 6c a6 28 21 e4 ff 16 3b 72 04 64 fc 3a 28 -d9 1b ed dd c6 27 49 a5 53 8e af 41 fb e0 c8 2a -77 e0 6a d9 93 83 c9 e9 85 ff b8 a9 3f d4 d7 c5 -8d b5 1a d9 1b a4 61 d6 9a 8f d7 dd ab e2 49 67 -57 a0 c4 91 22 c1 a7 9a 85 cc 05 53 e8 21 4d 03 -6d fe 01 85 ef a0 d0 58 60 c6 12 fa 08 82 c8 2d -24 6e 58 30 a6 73 55 df f1 8a 2c 36 b7 32 f9 88 -cf ed c5 62 26 4c 62 54 b4 0f ca bb 97 b7 60 94 -75 68 dc d6 a1 7c da 6e e8 85 5b dd ba b9 37 02 -47 1a a0 cf b1 be d2 e1 31 18 eb a1 17 5b 73 c9 -62 53 c1 08 d0 b2 ab a0 5a b8 e1 7e 84 39 2e 20 -08 5f 47 40 4d 83 65 52 7d c3 fb 8f 2b b4 8a 50 -03 8e 71 36 1c cf 97 34 07 - -# Signature: -52 55 00 91 83 31 f1 04 2e ae 0c 5c 20 54 aa 7f -92 de b2 69 91 b5 79 66 34 f2 29 da f9 b4 9e b2 -05 4d 87 31 9f 3c fa 9b 46 6b d0 75 ef 66 99 ae -a4 bd 4a 19 5a 1c 52 96 8b 5e 2b 75 e0 92 d8 46 -ea 1b 5c c2 79 05 a8 e1 d5 e5 de 0e df db 21 39 -1e bb 95 18 64 eb d9 f0 b0 ec 35 b6 54 28 71 36 -0a 31 7b 7e f1 3a e0 6a f6 84 e3 8e 21 b1 e1 9b -c7 29 8e 5d 6f e0 01 3a 16 4b fa 25 d3 e7 31 3d - -# PKCS#1 v1.5 Signature Example 1.15 - -# ----------------- - -# Message to be signed: -fc 6b 70 0d 22 58 33 88 ab 2f 8d af ca f1 a0 56 -20 69 80 20 da 4b ae 44 da fb d0 87 7b 50 12 50 -6d c3 18 1d 5c 66 bf 02 3f 34 8b 41 fd 9f 94 79 -5a b9 64 52 a4 21 9f 2d 39 d7 2a f3 59 cf 19 56 -51 c7 - -# Signature: -44 52 a6 cc 26 26 b0 1e 95 ab 30 6d f0 d0 cc 74 -84 fb ab 3c 22 e9 70 32 83 56 7f 66 ea dc 24 8d -bd a5 8f ce 7d d0 c7 0c ce 3f 15 0f ca 4b 36 9d -ff 3b 62 37 e2 b1 62 81 ab 55 b5 3f b1 30 89 c8 -5c d2 65 05 6b 3d 62 a8 8b fc 21 35 b1 67 91 f7 -fb ca b9 fd 2d c3 3b ec b6 17 be 41 9d 2c 04 61 -42 a4 d4 7b 33 83 14 55 2e dd 4b 6f e9 ce 11 04 -ec ec 4a 99 58 d7 33 1e 93 0f c0 9b f0 8a 6e 64 - -# PKCS#1 v1.5 Signature Example 1.16 - -# ----------------- - -# Message to be signed: -13 ba 08 6d 70 9c fa 5f ed aa 55 7a 89 18 1a 61 -40 f2 30 0e d6 d7 c3 fe bb 6c f6 8a be bc bc 67 -8f 2b ca 3d c2 33 02 95 ee c4 5b b1 c4 07 5f 3a -da 98 7e ae 88 b3 9c 51 60 6c b8 04 29 e6 49 d9 -8a cc 84 41 b1 f8 89 7d b8 6c 5a 4c e0 ab f2 8b -1b 81 dc a3 66 76 97 b8 50 69 6b 74 a5 eb d8 5d -ec 56 c9 0f 8a be 51 3e fa 85 78 53 72 0b e3 19 -60 79 21 bc a9 47 52 2c d8 fa c8 ca ce 5b 82 7c -3e 5a 12 9e 7e e5 7f 6b 84 93 2f 14 14 1a c4 27 -4e 8c bb 46 e6 91 2b 0d 3e 21 77 d4 99 d1 84 0c -d4 7d 4d 7a e0 b4 cd c4 d3 - -# Signature: -1f 3b 5a 87 db 72 a2 c9 7b b3 ef f2 a6 5a 30 12 -68 ea cd 89 f4 2a bc 10 98 c1 f2 de 77 b0 83 2a -65 d7 81 5f eb 35 07 00 63 f2 21 bb 34 53 bd 43 -43 86 c9 a3 fd e1 8e 3c a1 68 7f b6 49 e8 6c 51 -d6 58 61 9d de 5d eb b8 6f e1 54 91 ff 77 ab 74 -83 73 f1 be 50 88 80 d6 6e a8 1e 87 0e 91 cd f1 -70 48 75 c1 7f 0b 10 10 31 88 bc 64 ee f5 a3 55 -1b 41 4c 73 36 70 21 5b 1a 22 70 25 62 58 1a b1 - -# PKCS#1 v1.5 Signature Example 1.17 - -# ----------------- - -# Message to be signed: -eb 1e 59 35 - -# Signature: -37 0c b9 83 9a e6 07 4f 84 b2 ac d6 e6 f6 b7 92 -1b 4b 52 34 63 75 7f 64 46 71 61 40 c4 e6 c0 e7 -5b ec 6a d0 19 7e bf a8 6b f4 6d 09 4f 5f 6c d3 -6d ca 3a 5c c7 3c 8b bb 70 e2 c7 c9 ab 5d 96 4e -c8 e3 df de 48 1b 4a 1b ef fd 01 b4 ad 15 b3 1a -e7 ae bb 9b 70 34 4a 94 11 08 31 65 fd f9 c3 75 -4b bb 8b 94 dd 34 bd 48 13 df ad a1 f6 93 7d e4 -26 7d 55 97 ca 09 a3 1e 83 d7 f1 a7 9d d1 9b 5e - -# PKCS#1 v1.5 Signature Example 1.18 - -# ----------------- - -# Message to be signed: -63 46 b1 53 e8 89 c8 22 82 09 63 00 71 c8 a5 77 -83 f3 68 76 0b 8e b9 08 cf c2 b2 76 - -# Signature: -24 79 c9 75 c5 b1 ae 4c 4e 94 0f 47 3a 90 45 b8 -bf 5b 0b fc a7 8e c2 9a 38 df be dc 8a 74 9b 7a -26 92 f7 c5 2d 5b c7 c8 31 c7 23 23 72 a0 0f ed -3b 6b 49 e7 60 ec 99 e0 74 ff 2e ea d5 13 4e 83 -05 72 5d fa 39 21 2b 84 bd 4b 8d 80 bc 8b c1 7a -51 28 23 a3 be b1 8f c0 8e 45 ed 19 c2 6c 81 77 -07 d6 7f b0 58 32 ef 1f 12 a3 3e 90 cd 93 b8 a7 -80 31 9e 29 63 ca 25 a2 af 7b 09 ad 8f 59 5c 21 - -# PKCS#1 v1.5 Signature Example 1.19 - -# ----------------- - -# Message to be signed: -64 70 2d b9 f8 25 a0 f3 ab c3 61 97 46 59 f5 e9 -d3 0c 3a a4 f5 6f ea c6 90 50 c7 29 05 e7 7f e0 -c2 2f 88 a3 78 c2 1f cf 45 fe 8a 5c 71 73 02 09 -39 29 - -# Signature: -15 2f 34 51 c8 58 d6 95 94 e6 56 7d fb 31 29 1c -1e e7 86 0b 9d 15 eb d5 a5 ed d2 76 ac 3e 6f 7a -8d 14 80 e4 2b 33 81 d2 be 02 3a cf 7e bb db 28 -de 3d 21 63 ae 44 25 9c 6d f9 8c 33 5d 04 5b 61 -da c9 db a9 db bb 4e 6a b4 a0 83 cd 76 b5 80 cb -e4 72 20 6a 1a 9f d6 06 80 ce ea 1a 57 0a 29 b0 -88 1c 77 5e ae f5 52 5d 6d 2f 34 4c 28 83 7d 0a -ca 42 2b bb 0f 1a ba 8f 68 61 ae 18 bd 73 fe 44 - -# PKCS#1 v1.5 Signature Example 1.20 - -# ----------------- - -# Message to be signed: -94 19 21 de 4a 1c 9c 16 18 d6 f3 ca 3c 17 9f 6e -29 ba e6 dd f9 a6 a5 64 f9 29 e3 ce 82 cf 32 65 -d7 83 7d 5e 69 2b e8 dc c9 e8 6c - -# Signature: -70 76 c2 87 fc 6f ff 2b 20 53 74 35 e5 a3 10 7c -e4 da 10 71 61 86 d0 15 39 41 3e 60 9d 27 d1 da -6f d9 52 c6 1f 4b ab 91 c0 45 fa 4f 86 83 ec c4 -f8 dd e7 42 27 f7 73 cf f3 d9 6d b8 47 18 c4 94 -4b 06 af fe ba 94 b7 25 f1 b0 7d 39 28 b2 49 0a -85 c2 f1 ab f4 92 a9 17 7a 7c d2 ea 0c 96 68 75 -6f 82 5b be c9 00 fa 8a c3 82 4e 11 43 87 ef 57 -37 80 ca 33 48 82 38 7b 94 e5 aa d7 a2 7a 28 dc - -# ============================================= - -# Example 2: A 1024-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -ac 13 d9 fd ae 7b 73 35 b6 9c d9 85 67 e9 64 7d -99 bf 37 3a 9e 05 ce 34 35 d6 64 65 f3 28 b7 f7 -33 4b 79 2a ee 7e fa 04 4e bc 4c 7a 30 b2 1a 5d -7a 89 cd b3 a3 0d fc d9 fe e9 99 5e 09 41 5e dc -0b f9 e5 b4 c3 f7 4f f5 3f b4 d2 94 41 bf 1b 7e -d6 cb dd 4a 47 f9 25 22 69 e1 64 6f 6c 1a ee 05 -14 e9 3f 6c b9 df 71 d0 6c 06 0a 21 04 b4 7b 72 -60 ac 37 c1 06 86 1d c7 8c a5 a2 5f aa 9c b2 e3 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -ac 13 d9 fd ae 7b 73 35 b6 9c d9 85 67 e9 64 7d -99 bf 37 3a 9e 05 ce 34 35 d6 64 65 f3 28 b7 f7 -33 4b 79 2a ee 7e fa 04 4e bc 4c 7a 30 b2 1a 5d -7a 89 cd b3 a3 0d fc d9 fe e9 99 5e 09 41 5e dc -0b f9 e5 b4 c3 f7 4f f5 3f b4 d2 94 41 bf 1b 7e -d6 cb dd 4a 47 f9 25 22 69 e1 64 6f 6c 1a ee 05 -14 e9 3f 6c b9 df 71 d0 6c 06 0a 21 04 b4 7b 72 -60 ac 37 c1 06 86 1d c7 8c a5 a2 5f aa 9c b2 e3 - -# Public exponent: -01 00 01 - -# Exponent: -04 84 cc ef ad 7a 4e 6f 35 a9 6e c8 e3 0e ac f5 -e3 68 b3 11 95 fe bf 08 7d f5 70 53 81 0c 2b b0 -91 27 45 3a 4c 63 07 3b bf b9 90 24 91 4c cc 06 -72 66 56 01 86 a1 a2 67 33 1b 7d 4c 8b df ac 96 -fd a9 f3 f7 0b ec 4e ea bc e7 cd 52 19 34 3c 2e -49 1c ce 82 7e 44 ee 23 0e 4f 69 58 9e 57 5a e9 -06 30 30 44 2a 31 c8 2c de 30 dc 9c 79 cf 64 e7 -a0 97 5e 75 e1 6e a4 58 15 48 8b 45 52 56 ee b1 - -# Prime 1: -df 85 f4 a0 b4 33 bd 37 43 3c d7 97 8c 9b 37 f9 -e4 17 29 d8 3a 26 2b 98 46 53 8e 50 39 e6 59 68 -b5 95 a4 62 72 bd 5f 4a 2c 3a bf 89 0a 35 50 8a -5b cb 4c 29 ef bd 91 02 85 03 83 4c fa b2 c0 f9 - -# Prime 2: -c5 14 59 a6 72 ed 8b 72 4c 6a 8f 28 5c bb 8e a7 -6a 23 93 91 79 28 be 56 c0 dc df c9 43 c3 0b da -3c ee fb 86 dc c8 c4 55 67 8c fe 88 25 f3 88 77 -a3 72 8a 1f 10 29 1f 54 7b 1e 8b 16 04 83 e5 bb - -# Prime exponent 1: -b6 ba 83 a9 7c a7 6f 5f e6 0f af 0f ad 5a 97 00 -2a 7e e5 2e 67 1b 1d 38 77 05 87 a9 fe 2b 59 9c -48 15 f5 34 a6 28 39 e6 21 12 45 d2 7a 0d eb b1 -b0 29 1a 32 8e 52 a2 61 34 ec 12 42 b4 0f bd c1 - -# Prime exponent 2: -b9 b1 c6 13 2e e1 22 6e 6d 10 4e 99 72 5f 0b 38 -35 ab 15 e5 91 6a d1 85 be ad 9f 72 ed 95 3f 7a -bf c5 52 5c ad 75 c2 80 d2 54 28 94 b2 65 b8 65 -3a 2d b7 75 33 6d fb e6 47 27 ed 57 ae a3 74 f7 - -# Coefficient: -7b 8d 15 a5 dd 28 90 a6 7d 1b 54 9c 93 5f 58 5a -38 da 56 f7 c8 15 5a 51 9d c8 f1 f6 ad e5 53 d6 -37 93 c7 8a 0e ce 8d 53 72 4e 62 ae 50 3a d5 25 -bf af 10 cf 61 6a 47 73 ce 7c cd 5c 1b 31 51 bd - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 2.1 - -# ----------------- - -# Message to be signed: -e1 c0 f9 8d 53 f8 f8 b1 41 90 57 d5 b9 b1 0b 07 -fe ea ec 32 c0 46 3a 4d 68 38 2f 53 1b a1 d6 cf -e4 ed 38 a2 69 4a 34 b9 c8 05 ad f0 72 ff bc eb -e2 1d 8d 4b 5c 0e 8c 33 45 2d d8 f9 c9 bf 45 d1 -e6 33 75 11 33 58 82 29 d2 93 c6 49 6b 7c 98 3c -2c 72 bd 21 d3 39 27 2d 78 28 b0 d0 9d 01 0b ba -d3 18 d9 98 f7 04 79 67 33 8a ce fd 01 e8 74 ac -e5 f8 6d 2a 60 f3 b3 ca e1 3f c5 c6 65 08 cf b7 -23 78 fd d6 c8 de 24 97 65 10 3c e8 fe 7c d3 3a -d0 ef 16 86 fe b2 5e 6a 35 fb 64 e0 96 a4 - -# Signature: -64 ac 09 39 71 f8 f0 96 a4 c1 d4 a5 43 66 2a 2e -5a 12 81 c9 50 98 7d e8 98 70 7f 02 9c 15 9b d8 -32 ca c5 5d 91 36 e0 e9 b4 a8 0b f6 f2 1b 68 cf -97 70 a6 34 9a e5 1e 7f 09 db da 9d 59 c4 58 37 -37 47 2d 4d 65 32 c7 17 7e e9 81 08 d2 cf 42 cd -08 5a bb 49 22 eb 29 d9 6f 3d 0f 6b 1d 0d 43 c7 -39 cc f1 ba 65 16 75 e1 96 8b 50 7d 51 90 2f 38 -cd ec 0b 61 32 72 90 45 32 5f c1 fb 8f d5 58 e8 - -# PKCS#1 v1.5 Signature Example 2.2 - -# ----------------- - -# Message to be signed: -c1 11 46 4e 00 2e 4e c6 18 a8 e2 63 db cc a9 1f -b1 8a 00 a1 8b 44 0c 4b 55 97 be e7 db 2a ed a8 -31 e6 21 fc ac 8d d8 1c ee 35 03 24 2b 33 b0 da -a9 87 fe 2f 54 93 ad 2d 06 a1 50 07 59 00 40 ce -3c 22 77 64 2f d2 7f 3f 25 5e 3d 98 d8 9d fa eb -86 be 34 e0 b8 fb b9 35 fb 92 85 60 fa 29 2d 26 -34 62 5a 50 7d d5 80 a8 91 24 b9 21 29 3e 8d fe -dd c2 81 d7 9e b3 a5 69 d5 9e 0d b8 01 3e 53 f7 -d4 c2 f9 6e 5f 2e c2 7f d8 dd b0 18 25 d1 7f ca -40 6d aa 62 24 c7 60 6d 2c 91 52 82 09 6a 78 05 -5a 49 62 15 37 b4 f0 25 a6 e5 b2 12 9b c8 c1 a4 -07 - -# Signature: -6e 7e aa d8 04 94 5e b0 46 70 dd 86 76 b7 05 7d -03 ac 3e 22 64 65 b1 fb 84 03 e6 ae 79 83 e0 a4 -6a 89 a4 eb 32 bd c8 e7 ae 5a 53 d4 8a a6 4b c9 -c3 db c8 cf 9c d6 dc 6a 68 fc ea e9 e2 9f 47 45 -fa 49 e1 8d 18 4d c5 d2 6c 4f eb 35 1f b4 b2 28 -c4 c1 8c ab db de 86 01 72 4a e3 80 3d b3 05 f2 -a0 76 fa 8a 57 f4 61 0b 8a 6e 0e d4 35 75 be 5d -5b fc 16 30 47 9d f3 bc bc 51 51 77 af e4 99 4a - -# PKCS#1 v1.5 Signature Example 2.3 - -# ----------------- - -# Message to be signed: -29 b8 5b 14 b2 da 94 7a 4c 3a d1 e5 93 7d a1 92 -c6 05 08 65 af 95 04 a5 44 53 70 e4 3d 3a 8d a5 -d3 55 fd 58 76 6b 25 43 ac 6f 93 10 87 83 c1 3f -f2 8b 2b e5 60 83 f0 29 82 39 e0 ee 96 81 ee 47 -c6 - -# Signature: -80 b3 8c e7 35 12 6c 85 45 d9 1d 18 ec 90 37 65 -4d 46 e4 f3 c5 1a 6b 86 18 e1 5f 72 cd 20 75 00 -a4 70 01 75 77 d0 a8 c5 5a 2b a3 34 38 3f 1f 8d -99 fc e2 46 0b 32 97 bc 03 7e f6 4a c4 a3 09 8c -6a aa 24 a4 d0 14 4a f1 02 d0 dd a1 7e 07 dc 69 -59 23 93 2e 56 8a da 00 dc 4f 7d bf bc de c4 3c -c9 08 38 80 17 d2 ee f0 4e 60 df e4 d5 73 40 fa -b9 16 e2 b8 11 24 4c b1 e4 a5 52 38 6f e3 ed 4c - -# PKCS#1 v1.5 Signature Example 2.4 - -# ----------------- - -# Message to be signed: -d3 b7 aa d3 7a 48 90 e0 36 5b 86 c7 da 94 91 e7 -3c df 55 5d 1b 02 b4 51 81 6d c5 2f 96 30 d5 90 -de 83 a5 c9 39 61 01 25 22 df f6 db bb 9c db 0e -71 ae 51 40 19 64 af 18 90 e8 93 25 db d6 26 f2 -da 01 34 58 e3 9e ec a5 83 e8 9e 4c 08 e5 d4 12 -be 49 84 95 88 6e 05 51 cf e7 42 b8 b5 - -# Signature: -9d 8a 88 89 a3 11 b4 86 cb e2 22 57 03 f5 d4 ae -2a 54 c2 bc aa ad 06 fe 76 48 b9 e2 d8 5e dd a1 -a0 7d 85 6d 6a e9 bd 5c c1 e5 15 32 66 ec 7f 1e -1d f3 d9 29 cc 44 70 0f ac 92 64 58 41 4c 28 41 -da 83 32 8e 81 e0 b9 d6 c3 88 5e 76 73 70 ad 5c -f1 f5 76 d9 dc e3 48 ca ec 5e 64 43 e0 ae b7 c3 -f7 2b 7d d2 53 66 70 23 b9 a4 77 ab 34 df 8f 20 -67 e2 25 ad cb 73 ee 11 e1 59 eb 64 91 47 d6 02 - -# PKCS#1 v1.5 Signature Example 2.5 - -# ----------------- - -# Message to be signed: -f6 58 18 8c 8f 9d e6 0b 5e 99 a2 9f 52 d3 b8 89 -20 1b 30 d4 64 c3 b7 27 92 a3 02 09 5d c1 e7 7d -45 e9 4f 5d ab 73 db b3 13 54 38 57 ff 91 db f4 -73 df c1 45 d7 3b d5 06 20 75 d1 92 a3 fb f4 a1 -33 e7 e5 68 df 20 b8 cf f7 7b 3a f6 87 aa 22 55 -9e c1 - -# Signature: -0a 95 a4 4f 62 74 e7 4c ec 45 17 96 af 56 88 d4 -be 01 08 93 fa ae 27 d4 90 f4 77 1b 00 3f 70 46 -cc cd 41 9f c8 19 d7 33 19 55 f4 1e ac 93 39 f5 -46 c5 84 a8 b4 2a 5a c6 32 90 58 3f f3 eb 6b 29 -ca dc 75 4a e5 8d 5a 56 37 b6 60 97 96 e8 05 51 -73 ff 20 a9 cc e4 92 fd 78 37 46 86 15 e8 41 08 -87 f0 b4 a5 9f f2 52 a8 25 97 76 c8 ff da a6 7c -87 df f8 98 3a e6 79 d1 de 22 ea 15 8d 48 f6 8b - -# PKCS#1 v1.5 Signature Example 2.6 - -# ----------------- - -# Message to be signed: -31 ae 5f 83 a0 fb 3a c9 25 5f fa 43 5f 70 e2 ab -65 55 66 e5 fb 8b 78 b8 02 c1 87 cf f1 c5 e4 0f -ed 06 97 8c 5d 59 76 eb 4c a7 75 80 63 99 a6 fc -4d b5 0c 1f 88 66 1b a6 8a bc 21 fb 2c cd 53 7f -50 18 f3 6e d1 f7 d4 53 83 fd 46 9e 77 ba b3 e8 -a9 5d fa 1b 94 1e 43 0d de c5 52 dc d8 2f 5d 10 -d2 9c d1 0a 22 d1 7c e2 42 59 28 ff 5d 07 10 dc -e7 d9 f8 3b 12 e0 4c 1a 01 59 c2 71 76 e0 4a cc - -# Signature: -3f 11 ea 73 9f 32 9c 9d 40 04 60 34 b6 c0 cf ce -b4 9b c3 20 1a 5f 25 ea f5 01 5a ed ed 02 18 9c -e0 b0 cf de 19 12 5b d2 88 b7 d0 c0 62 32 1a 5b -dc 2c fa 42 26 f5 10 4a 1f ba eb be 7f 72 f5 f7 -92 7e 1e ae 26 fd c5 ba 92 f2 d3 f8 69 eb c3 2d -90 18 dd 04 ed e8 6d e5 c4 54 f1 f7 a1 b2 e2 d1 -94 0a ac ae 27 79 63 55 fe 18 ac 80 97 53 53 92 -9a c6 a8 38 45 8b 5d 9d c7 57 6e 38 87 ee 7b ca - -# PKCS#1 v1.5 Signature Example 2.7 - -# ----------------- - -# Message to be signed: -96 ff 99 f1 50 60 c9 73 a6 5b 69 a8 b5 b6 3a db -33 25 32 0d a9 37 29 75 84 ad 4f ad 5c 3c 74 69 -01 9e 9c f7 2a cb 31 5f 1e 49 19 27 bb a1 94 87 -55 82 3e b0 7e 3f 20 ac df 78 65 3c ae 45 0e 47 -bc 54 ba f8 ca 11 67 a5 05 08 44 e0 22 22 0e e6 -65 8a 8d dd 95 63 2e 9a dc 1a 6c 14 37 9c 1c 5a -e5 a0 ce 5d c4 02 08 09 62 2a fd ec f8 1f 18 a5 -1e 28 66 6d 02 b1 dc da 0a 27 b8 c3 d2 c2 7b 2c -07 b3 80 22 00 01 7a 7c 12 4a 43 37 cc 4b 6e a2 -ae a7 5c 68 b4 40 e3 79 47 e3 61 9b cf ee 05 5b -b2 ed ab c4 24 49 07 e0 48 3d d3 a1 7d 8e df f3 -a6 50 29 3f d4 ab f5 c4 5d 1a 5b 6c 54 02 ba 2b -81 b7 b0 e0 c9 5e e9 49 b2 a2 38 c1 99 56 20 6c -12 4e 0c d9 c2 46 20 b3 6a 83 bf 93 b9 6e f2 04 -bd e5 31 6c 1f 53 27 c0 a6 21 ec ce 20 93 c0 65 -2d df 32 17 68 d7 45 02 f1 90 85 29 62 9b ab 68 - -# Signature: -18 3f 85 3d 0d 03 62 18 70 e3 ba 58 68 50 c5 ea -59 fc 4e 9a cf 37 94 b9 ad 59 a1 bb 80 18 1e 77 -b1 11 d6 64 86 47 e1 39 a3 9e c0 4f 86 18 74 91 -e7 7b 4d 75 c0 60 79 5b f7 27 08 46 d3 96 e0 bf -ea 83 15 79 5e 79 d7 6a 91 9e a7 6b 06 ee c1 3b -af 4c e8 af e1 e3 4b c2 24 57 d7 b7 99 2e 08 42 -ef ad e1 79 b0 ae da cc fb e2 d2 3d 3e b3 14 e1 -de 91 c8 71 b9 db 5a bf fb 17 47 7f ba 23 3a 06 - -# PKCS#1 v1.5 Signature Example 2.8 - -# ----------------- - -# Message to be signed: -3a 17 6c 79 3a 54 6e 2d 27 6f b8 ff c3 28 16 3b -49 49 97 a5 30 2a ae 2e 50 45 a2 a2 06 87 ea 6d -1f 18 1c 6a bf e6 09 0c 8d c4 02 56 db 3d e0 83 -22 64 7f b7 95 bb a1 71 3f b5 7e 33 d5 3e 0e 13 -be da c6 a6 58 ad 4a b4 91 22 38 81 19 8d f2 93 -67 fa ad e8 be 9f ca a4 e4 83 f7 b7 f3 dc 7c bb -f9 7a 17 aa d8 8c 26 cf c6 41 0f 94 5b 54 fc 53 -db 55 ac 80 3d 8b 73 69 1b 14 84 84 7d 7f 3b 7e -93 94 e5 5f 0a 51 fe 61 ae 84 52 3c 94 b2 2e 82 -39 6d b6 cf ac b7 2e 0e e4 94 aa 0f 1f a5 93 12 -54 43 ae 15 55 a6 a9 33 fa ce 00 74 79 1d c2 c2 -92 42 eb - -# Signature: -41 3c 92 23 a2 e9 b1 22 cd 87 25 77 e5 2f 31 3d -41 da c7 9a 26 cb 10 33 da 0b 6f cc 4b 48 21 07 -74 4b f4 90 fa 79 8d cc d0 cb d1 18 ef 39 c0 f5 -59 d8 7b 89 33 5d b0 9b e7 70 0f b0 9f db d3 40 -40 a0 0b e5 ca 42 88 34 77 b0 6e 4e 10 a7 cb 11 -76 8f cb 02 c3 4f b1 06 e5 22 86 0d 10 69 39 06 -26 0f 43 d9 06 12 99 03 93 a8 ff ac 9f d7 0c a3 -78 29 11 1e eb a6 f3 de e5 4e f1 c1 62 68 b3 3e - -# PKCS#1 v1.5 Signature Example 2.9 - -# ----------------- - -# Message to be signed: -06 8a 99 1b 32 b6 76 c6 4b 89 8c 67 e1 13 72 82 -b4 37 11 b0 d0 67 1c 24 7d 9f 7c 48 f5 04 3e 4f -c2 06 dc 65 af 89 06 f2 52 f0 24 52 05 ea 08 43 -23 d4 27 6b e5 aa 0f c5 af 9c 3f 34 b2 fd 66 34 -df 57 2f c3 13 d2 73 b5 3e 9e 36 b9 46 e7 e6 72 -f9 8d 85 7d 7e dd d3 dd 04 39 31 32 f4 61 f2 2c -99 00 26 16 6f 38 5b e1 59 5c 7f 23 f8 9f f5 7e -05 a7 be 28 5d 10 56 15 48 5f 35 6a ba b1 ff 2a -b9 27 d6 09 95 2a 62 7e 46 8c a7 59 0a cb 52 13 -f4 31 39 f8 e2 c9 d4 d1 7c 6b d7 91 4e 53 f0 2f -d1 9a 13 1f f4 9c d2 5e de 8f 41 8a 88 53 0a 82 -39 88 7f 0f c7 97 ed b5 04 64 79 64 bf 31 ca af -08 0d 58 17 a0 - -# Signature: -57 5d a9 e9 be fc a1 82 95 46 e8 29 38 15 00 11 -32 03 0e 74 9c a5 10 88 f1 68 bd 15 0b 13 94 c7 -ac d5 97 8b ca 03 f7 b9 d9 2a 29 b8 e2 85 6b 0d -a0 7f 0b b1 5c 0b 33 e0 54 87 99 1a d9 7a 81 2d -c9 04 aa f0 fd 1e 38 7e f1 c2 70 c6 86 8d 3e e1 -c6 11 57 7b c4 d0 7f f4 56 b2 43 98 32 90 8a 3d -cc 4f c0 99 04 72 fd a3 cc 61 11 93 0b 99 79 5d -60 c0 e3 78 88 e8 7c e0 0b bf 3c 1c f3 07 f9 e1 - -# PKCS#1 v1.5 Signature Example 2.10 - -# ----------------- - -# Message to be signed: -d6 83 9e e6 d0 74 50 32 7e 09 a0 3e 1e c2 80 e1 -c8 d1 15 00 dc 39 0a 49 a9 c9 82 87 49 c3 e9 a4 -be e2 ba 57 6f 6d 12 17 a8 e7 85 4a 90 7e eb 93 -df ff 92 30 8a d0 d9 4e 2b 38 1f 92 b0 e8 4a 47 -1b f1 f3 7a 68 e9 65 f6 58 59 d1 fd fd 6f ea 84 -40 79 c4 03 70 dc ea e2 - -# Signature: -a7 c5 f6 d0 de 9c f8 f4 17 37 f2 3a e3 e8 cf 60 -9a eb cf 22 d5 de 12 13 d9 57 3c b9 44 03 f8 9c -0f 70 88 ff fc 61 10 6f a6 09 c7 37 1a 8d 7e 1b -cd 22 1b c1 ad 94 91 2f ab f2 ff c0 2f 84 84 56 -4c 22 5c 06 9b fc 6d a9 f3 f9 f4 97 4e 08 e1 fe -56 f7 48 ff 79 05 97 90 6a 95 4e 38 37 43 a3 7e -57 5f ef 07 4f 06 0f 3d d1 5b 5e e0 f9 4d ba 69 -d8 6c 99 22 3f a9 c3 a6 1a 8c b2 af 2f ab 1e 04 - -# PKCS#1 v1.5 Signature Example 2.11 - -# ----------------- - -# Message to be signed: -33 84 9c 67 df 9a 6f fa c3 da 90 a8 cd 31 73 1a -02 97 b9 d6 01 0a 03 32 0f 88 45 03 5f c3 43 09 -ad - -# Signature: -1b 87 05 1f 15 91 c8 ae 7e e3 cb 24 26 70 39 a7 -28 40 5d bf 23 1c af 21 f3 24 7f 05 85 8b 2a 51 -65 0b 81 bc 53 77 86 5e 4c 1e 8f d0 36 41 52 a1 -6b c5 8f 7d 2a c0 1c a6 79 cc 49 dd 04 89 03 d5 -5a d0 5f 10 2c 74 b3 60 1f 25 ad 30 62 40 25 c3 -0b 6f 0f 79 11 fc 22 45 8e 5d 43 5f 38 8e 3f bc -49 5f a0 c6 10 c1 29 8f 82 1d a5 38 40 3a 93 36 -4d 2e ab f1 e3 b3 2f 81 10 a7 e0 3e 37 2e cb c5 - -# PKCS#1 v1.5 Signature Example 2.12 - -# ----------------- - -# Message to be signed: -b3 da ba ca 20 59 a7 0e 25 cb dd f4 aa 59 25 99 -57 54 ac e4 3c 5d 60 36 40 48 9a f4 8f ea 6e dc -4e 19 cb ee a2 c0 db 62 ae 0a 10 4c 72 e4 cd 56 -cb 53 2f 4f e5 77 b3 6a 81 98 b4 87 9d 7f f8 04 -26 90 f6 62 77 3f 3d 63 93 f2 58 98 d2 - -# Signature: -26 f1 37 70 26 3f c5 bd be ad f8 8f b4 dd 30 7a -38 95 9b 16 f3 df 94 6a de 86 4b 1e 7e 91 4d 36 -4e bf 9a df d8 6a 70 02 2d c6 1b 43 fb 1f df 86 -96 97 8e 2d 1f 6a 2d ef ee 75 ad aa 69 a3 95 32 -07 40 50 be 70 8e af 03 1d 5f ae 0f fe 24 5b a4 -ff 3c 5e 34 0a f5 df ec 6a 4c ce 0e 18 87 6c fc -13 66 ee ed df ce 0f 83 5b 38 e8 18 81 b1 fc 58 -32 93 0f c7 9b 08 f1 fb 34 fb 22 42 33 f4 c4 68 - -# PKCS#1 v1.5 Signature Example 2.13 - -# ----------------- - -# Message to be signed: -09 91 12 fa e7 40 88 8c ea ac 70 54 d5 97 35 1d -79 e1 59 a9 58 d8 12 15 78 e5 2c 83 7d b3 54 3c -fa 6f 8e 7f 1d bd 2a 61 97 86 45 a4 d3 85 b9 bb -1c 60 bf b1 1b b3 c8 75 2a e3 1f 99 6d bb 52 62 -8f 93 d5 26 94 f1 82 e6 90 35 a5 e5 57 ec 71 82 -62 f4 03 df 52 11 f7 3c 6d e0 d5 5a 0b a7 - -# Signature: -8d 8c 8f 3a 86 f4 9e db d1 25 c8 3e bf 6d 52 e7 -65 16 15 01 48 21 54 59 8c 28 3a be 94 02 77 87 -2b 00 d0 77 7c 2e 69 7b 78 83 cc 32 1e 15 1c 80 -11 6f 9f cd 17 7a c4 c7 de dd f0 3c a1 b2 c5 93 -31 dc 1c 8e 94 7f 1e b2 aa ee 8c c9 41 dd c5 f3 -74 a6 3d 6c 99 38 ec d8 e8 8c bc ec 58 92 9c ff -dd ef 0b a2 17 58 85 a8 0d c4 cd 92 d6 b7 9d 9c -6a 81 69 6e 16 f9 a8 3a 10 ca 8e fa f1 97 5f 55 - -# PKCS#1 v1.5 Signature Example 2.14 - -# ----------------- - -# Message to be signed: -aa 17 e6 bb d6 db 19 e5 4b ee 1a 7f 0e dc ca ce -ab 63 5d 76 28 fc aa 18 ec fa fc 40 1c b3 fe b5 -1f 9a 37 31 f3 80 2c be a8 1c 73 30 28 c9 58 4b -6b 78 e2 05 59 54 cf 91 04 da a6 77 aa 40 be 9b -7c 65 b0 7a c4 a8 bf 25 c1 14 9e 05 47 35 cf 3c -e3 32 d4 29 bc 73 80 24 45 df b3 68 8b b8 19 48 -b5 7e 27 6a f3 24 62 f7 ad 80 4d 50 c9 3b c7 e9 -ef 75 37 69 5a 27 1a f7 2e 4b d4 7c e5 fa 9d 62 -f2 da c0 33 36 23 f4 9e b9 d6 d7 80 34 ed 1d f6 -e1 2b fd 04 26 1b be 5c e0 40 e0 3e be 25 8d 2d -05 2a 12 ad 4e 3b f2 53 04 23 01 c7 64 58 ed 91 -0c 5f fa 70 5c 74 7a d8 ca 0c 1c 62 28 da 2c 97 -e1 38 - -# Signature: -64 4e a0 76 21 4d bd dd 30 05 5d 7c 56 18 92 27 -9b 46 ba b1 e1 22 53 42 4c 28 f4 49 e1 72 64 6a -f3 49 8c 7a fc bf f7 68 e0 46 a7 c2 e3 d9 c0 e7 -12 8f 87 7b 92 19 5a a2 bb 9f 1c fb df d1 5b b6 -5f bd 23 ef b2 94 fb b1 1a 3c 66 05 6d 60 63 85 -3b b2 3c 27 46 65 a1 3e f4 f3 c1 2f 59 21 a4 19 -e9 49 b3 0c 0b c0 d7 7d 6b 28 69 1d 23 64 d9 5b -f6 8b e8 d5 97 8e f1 bc 98 52 a4 f0 66 04 47 4a - -# PKCS#1 v1.5 Signature Example 2.15 - -# ----------------- - -# Message to be signed: -28 24 9c 38 7a 06 14 40 e9 86 38 e1 ed 78 a4 86 -51 30 e5 75 33 d7 89 10 8c 63 e1 5f d8 01 9b ad -2c d1 a7 55 2b d8 af d2 06 d9 78 eb 1f 2c f3 f2 -3a fc 4b 34 e6 dd 7f 69 c1 fd f4 fe c2 52 68 d1 -86 55 51 94 49 22 90 6d ce 6d c4 41 f9 4a 46 6b -f8 39 1a d8 2b f5 94 0e 44 71 10 f1 d1 5d e1 29 -31 29 fb 44 24 a1 71 75 19 d6 d4 28 d6 6b 7a 10 -91 42 ac c9 15 f1 ea c9 6d ef 2c 32 90 b0 1d 05 -99 0b f8 02 3a 6a 64 71 2f 63 13 7a 8e - -# Signature: -57 02 06 06 69 ed 47 bb ca 11 b9 16 68 28 9e a3 -f5 e7 46 ad 2e 38 6d d1 bc 2a 8b ab 17 46 ba 2a -64 bf 15 b3 fc 2e c8 b0 cc 99 d8 54 fa 32 11 c9 -55 c4 55 d7 ff 2e 1e e2 39 f5 4f 38 6a 42 bb 25 -40 a8 75 8f 32 97 e5 52 de 1e be 8e ac 70 f3 54 -87 94 2b ba da d5 bd 95 73 90 ff 17 93 af 3d 30 -d9 36 b6 f7 9b 44 a9 b6 3c ee 62 d5 58 4d a3 a1 -fc ff a5 b6 fe ee c1 1c d6 3b 18 0f 0b fc 5b 6b - -# PKCS#1 v1.5 Signature Example 2.16 - -# ----------------- - -# Message to be signed: -e4 91 a1 56 fd ba 31 6a 2a 20 a1 2e ea 50 be 77 -4e c9 aa be b1 c3 98 e9 08 be a3 29 68 21 7e a4 -1e 96 6d b7 27 2f 0e fa 37 c9 0a e4 e9 f3 86 21 -a6 27 a9 d1 2c 8b 4e 80 60 c5 45 c5 60 59 e9 e4 -8a 7f 16 81 36 72 47 33 58 19 ba 12 7e 65 93 1e -1d 9f b7 0d fd df 4c 99 56 a5 b0 4c 52 bc f8 cb -df cd f2 29 19 64 da fa ca 7e e7 0e 80 a2 75 9c -ec 73 5d 01 ac a8 ff 89 4b 68 9b 93 78 3d a8 93 -9c 62 09 dd 68 3c 60 - -# Signature: -9f 20 5b a9 0d f2 d4 01 49 26 48 1f 9b 3f 45 a8 -9d 23 ec d8 4f 5f 16 e6 73 34 c4 ca f3 f3 b9 c2 -01 a7 98 d4 ee c5 62 76 59 88 23 18 0e 07 8d 0a -ef 4f 8f ba 0b 25 c1 fd a3 e3 36 54 c4 74 a9 c1 -1a 23 b0 87 10 91 3d ff 76 56 f0 e7 ee 22 cc 44 -c9 99 c0 95 a6 51 4a 9d 2f c0 ca 4e f2 08 de 0d -92 93 b0 c5 60 8b ae d1 07 4a 0c fd 57 b9 9e f8 -ce ab fd 34 72 b7 db 3a b9 60 6d 13 f9 bb 43 9a - -# PKCS#1 v1.5 Signature Example 2.17 - -# ----------------- - -# Message to be signed: -06 ad d7 5a b6 89 de 06 77 44 e6 9a 2e bd 4b 90 -fa 93 83 00 3c d0 5f f5 36 cb f2 94 cd 21 5f 09 -23 b7 fc 90 04 f0 aa 18 52 71 a1 d0 06 1f d0 e9 -77 7a d1 ec 0c 71 59 1f 57 8b f7 b8 e5 a1 - -# Signature: -45 14 21 0e 54 1d 5b ad 7d d6 0a e5 49 b9 43 ac -c4 4f 21 39 0d f5 b6 13 18 45 5a 17 61 0d f5 b7 -4d 84 ae d2 32 f1 7e 59 d9 1d d2 65 99 22 f8 12 -db d4 96 81 69 03 84 b9 54 e9 ad fb 9b 1a 96 8c -0c bf f7 63 ec ee d6 27 50 c5 91 64 b5 e0 80 a8 -fe f3 d5 5b fe 2a cf ad 27 52 a6 a8 45 9f a1 fa -b4 9a d3 78 c6 96 4b 23 ee 97 fd 10 34 61 0c 5c -c1 4c 61 e0 eb fb 17 11 f8 ad e9 6f e6 55 7b 38 - -# PKCS#1 v1.5 Signature Example 2.18 - -# ----------------- - -# Message to be signed: -31 1c 88 80 05 35 d1 b4 e9 bc 78 65 18 31 a3 e9 -67 e7 4b 58 28 e0 14 11 5f be 5f 60 9c e8 65 fe -d2 41 97 0f 87 2e c8 f2 3d c2 bf 61 6b 80 20 e4 -45 64 f9 34 dc bf 72 38 61 70 07 4d 92 0b a8 95 -d3 3d df 27 93 69 f2 36 a1 9a cd 4f eb 2b - -# Signature: -89 46 63 e6 3e c1 9f 56 20 3f 4a 44 6b 5e 2b 51 -74 c8 14 a5 4c be a2 c8 e2 98 f9 9b 34 c4 bb c2 -c8 b1 77 ba 98 57 d8 1c 85 44 36 bd 99 af 58 c0 -9d de 5a ca d2 d6 41 50 43 fb 40 e7 84 75 ef 74 -01 2e 4d 4f 75 b2 e9 58 85 c8 51 a2 3b 4a 25 54 -93 f3 0c 17 2e ae 01 d4 79 10 fa bd 26 9f 57 94 -0b a4 43 50 6c 05 22 bf 72 8a 25 7a c1 07 3b df -99 b4 29 56 db 00 2a 30 a5 4d bd af 28 4d 8f 69 - -# PKCS#1 v1.5 Signature Example 2.19 - -# ----------------- - -# Message to be signed: -b2 65 a9 77 7f aa f1 58 a8 08 aa e7 08 5a 83 e7 -07 9c ef 80 d5 fc 9d 7c dc 96 3e c9 - -# Signature: -28 1e 88 ce 19 0e 98 62 90 34 36 a8 6b a4 37 27 -16 44 9c c0 ce 8d 55 4f 70 2d 72 52 a0 67 60 af -42 12 1d d0 9b f6 ea 13 f0 eb 25 2e cc 76 42 10 -61 f5 74 4b d8 e3 2c 5a 8c 4f c1 f9 52 1b 3f 5c -29 14 6d d0 59 12 91 ac bd c5 b6 3b 55 1d 22 8a -e5 38 95 b1 97 e6 e2 7a 70 68 aa 31 03 b7 0c fb -30 f4 15 84 5c 7e 52 87 f1 11 4e 4c df b4 01 ed -51 98 64 cf 61 bc 46 9c 66 69 9b 29 60 a0 af f2 - -# PKCS#1 v1.5 Signature Example 2.20 - -# ----------------- - -# Message to be signed: -7c 43 9e 7a b9 90 cd ef 95 6c 42 39 47 9b 49 da -84 2f 8b 76 76 5a 7a d4 89 7b c1 6c 61 ed 3d 09 -80 5d 76 e8 a5 be 8b 57 8b 95 1f 45 45 df 92 a8 -a5 37 ba 3e 2c 13 dc e0 a0 03 e7 b6 24 9e 32 be -94 1f 21 cd a7 25 b8 04 07 be 1e 28 bb 9e 39 37 -38 32 53 56 ec 21 74 1d 5c 86 f3 c2 b4 f7 b9 47 -af d5 6b 2d 3a ec - -# Signature: -6a fa d7 7a 05 6d 07 29 05 86 e9 13 80 9a 04 37 -d3 9a b3 07 32 45 12 b2 f5 bc 2b af 58 0b f4 55 -43 eb 04 ff 83 e9 63 a6 d7 f3 3e 9d ff c1 fc f4 -24 48 c5 fc fa 47 27 19 c6 51 f8 1f 3c 62 22 98 -3d 38 91 7e 29 b4 84 85 87 9c eb b0 a6 1d 38 9e -23 8c 9c 71 c3 68 ed e4 08 3a 94 62 97 f7 19 0b -4c ef 86 7e 9c cd a8 f9 ff c6 19 84 fc f0 5d 4f -ba fe 10 7d ac f5 b1 dc 8e 2b 14 95 b2 44 f8 e7 - -# ============================================= - -# Example 3: A 1024-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -b5 d7 07 b7 92 e0 56 f7 2f d7 6d 8d a8 89 a5 3c -e4 d8 eb aa 08 2a ee b2 30 32 e3 c5 d8 eb c4 c1 -55 61 31 9b e8 df e1 88 99 1a 89 51 d4 b2 3a 51 -e8 a9 38 2c 80 5e 4c fd 49 0e bb ce aa 20 80 2a -d6 83 b0 5a 10 0f 29 98 5f 01 1c 3c 8a 44 26 25 -52 d8 3d 9a 1b 7c 27 31 5e 14 4a d8 df 5c be 8b -c6 40 0f d9 cb e7 6b 74 21 d7 08 aa 64 f0 40 ba -e0 7b 7b d6 f9 22 18 f9 a7 29 28 4c c5 98 cd d1 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -b5 d7 07 b7 92 e0 56 f7 2f d7 6d 8d a8 89 a5 3c -e4 d8 eb aa 08 2a ee b2 30 32 e3 c5 d8 eb c4 c1 -55 61 31 9b e8 df e1 88 99 1a 89 51 d4 b2 3a 51 -e8 a9 38 2c 80 5e 4c fd 49 0e bb ce aa 20 80 2a -d6 83 b0 5a 10 0f 29 98 5f 01 1c 3c 8a 44 26 25 -52 d8 3d 9a 1b 7c 27 31 5e 14 4a d8 df 5c be 8b -c6 40 0f d9 cb e7 6b 74 21 d7 08 aa 64 f0 40 ba -e0 7b 7b d6 f9 22 18 f9 a7 29 28 4c c5 98 cd d1 - -# Public exponent: -01 00 01 - -# Exponent: -45 17 92 b5 94 47 cc 93 78 a8 a4 d6 45 fb 22 ff -4b bf 06 70 61 51 1a c8 36 db 27 43 a6 24 13 6b -18 6b 69 43 a1 cc eb 6f 91 29 0d 93 3b bb 8a c0 -53 a4 74 95 28 23 6c a2 72 cf 77 d9 d3 37 ad 2a -b3 6a 87 a9 15 3c 5e 16 71 6e 09 ba 0b ea a6 4b -31 25 26 d4 a8 c2 dc 68 fe 09 e3 7e 50 74 a0 90 -9d 3f 04 ab 73 90 8a 98 0d ec 1d a7 eb 45 05 a4 -8b ca d3 b6 0d 01 60 84 58 64 a6 51 1f f5 59 a7 - -# Prime 1: -ff a9 f8 e8 b0 82 17 0b 63 73 f0 0d 73 c4 23 86 -d4 02 f2 80 8b 39 3b 32 f7 8f 86 ea f6 4b 21 bf -dd 33 4f b9 aa d1 6b a6 d9 da db c8 94 3a 29 e6 -63 c8 b3 9c 09 59 69 02 5b b9 b2 d9 d6 fe 67 b7 - -# Prime 2: -b6 14 37 8d 5e 3d a5 a8 0a 6d 73 52 fc 66 a5 64 -59 7b 06 8f c9 d3 af 5d b0 e4 e7 35 be f8 81 dd -40 17 ee 70 82 96 19 0b 6f dc 84 04 f0 7b d9 dc -5c d5 d2 be 48 86 a7 cb bc b2 1d 8c 3d 64 a6 b7 - -# Prime exponent 1: -51 0e 68 96 0d 70 11 32 51 23 ae d5 f5 00 18 6b -64 c8 52 6e 22 b5 d0 69 06 48 00 f4 79 85 b4 7b -89 fb fc a8 d6 d9 72 92 01 bb fb b6 8a 18 2e b4 -96 aa 49 17 8d 77 45 6d b3 fb 1a 13 2a b0 99 dd - -# Prime exponent 2: -57 eb bf 3f 76 48 52 5b a8 5d 5d 98 ae e4 69 ec -e1 00 75 14 ad a2 98 45 a7 8b 80 d2 05 1b 3e aa -35 ae d8 a6 5f 88 57 23 9c aa 60 dd 79 ba 74 62 -e2 39 26 00 58 49 1d 71 55 f6 b4 29 e9 e3 56 55 - -# Coefficient: -ee 10 7d c7 ef ec e9 a6 5c 0e 87 78 9a f5 59 0c -93 83 9d fe 82 85 20 da 17 74 ff 80 f7 e5 14 55 -7f ff 10 bd 8c ae 18 46 ef ee 7c 10 d7 a1 2c 4a -05 5c c1 36 e4 a4 ef 25 fd 3e d9 d0 cd df 74 f9 - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 3.1 - -# ----------------- - -# Message to be signed: -98 6e 7c 43 db b6 71 bd 41 b9 a7 f4 b6 af c8 0e -80 5f 24 23 48 8f b4 31 f5 ee 79 2b 6c 2a c7 db -53 cc 42 86 55 ae b3 2d 03 f4 e8 89 c5 c2 5d e6 -83 c4 61 b5 3a cf 89 f9 f8 d3 aa bd f6 b9 f0 c2 -a1 de 12 e1 5b 49 ed b3 91 9a 65 2f e9 49 1c 25 -a7 fc - -# Signature: -62 75 e8 73 97 e3 09 2a ab 36 98 bb 1b 5c f2 4b -8c d7 71 2b ec ac 35 e3 22 03 d5 43 14 e5 47 0e -a9 aa bc 86 57 f5 64 34 e5 af 9f ae 77 8f f6 04 -5c 20 e2 e1 ef 7c bd f8 8f 00 75 f3 3e a9 92 77 -7c b7 e9 2f 7d a1 8a 0f fd 00 aa 46 71 ed 63 91 -1f e9 e9 2f b4 a7 6e 77 dc 6e 0a 91 65 76 71 6c -15 ea ef 08 9a 71 a0 ae a3 5b ed 94 47 a6 c1 7f -2a ad b7 27 fd 42 f0 ac c8 24 62 38 1d 9f a2 ef - -# PKCS#1 v1.5 Signature Example 3.2 - -# ----------------- - -# Message to be signed: -4c 7b 98 12 0c 87 50 90 87 c4 78 - -# Signature: -59 e5 cb e7 33 1b 92 e0 cb 8f 68 9e ae bb 30 f2 -b3 34 a7 46 a6 57 05 59 12 ff 1c 92 76 0b 0b 85 -bc 42 82 f3 18 4b 9a 81 4f 44 37 f8 25 ae 07 d3 -56 ba c6 9e 54 0c 90 94 2c 7f 7e 6f f4 4f e5 74 -f1 21 25 0a d2 30 f4 b5 0c 78 31 1e 4f d3 c9 e2 -65 f5 17 ce 32 97 c3 e1 dd db 5c 86 9c 69 8f 44 -af 52 5e 73 64 01 a8 1b 45 9f 19 8a d1 80 8c cd -92 9d 49 04 74 ca f7 00 5f 91 0d ac de 21 b0 77 - -# PKCS#1 v1.5 Signature Example 3.3 - -# ----------------- - -# Message to be signed: -66 f7 07 54 22 c8 ec 42 16 a9 c4 ff 49 42 7d 48 -3c ae 10 c8 53 4a 41 b2 fd 15 fe e0 69 60 ec 6f -b3 f7 a7 e9 4a 2f 8a 2e 3e 43 dc 4a 40 57 6c 30 -97 ac 95 3b 1d e8 6f 0b 4e d3 6d 64 4f 23 ae 14 -42 55 29 62 24 64 ca 0c bf 0b 17 41 34 72 38 15 -7f ab 59 e4 de 55 24 09 6d 62 ba ec 63 ac 64 50 -32 7e fe c6 29 2f 98 01 9f c6 7a 2a 66 38 56 3e -9b 6e 2d 15 ef d2 37 bb 09 8a 44 3a ee b2 bf 6c -3f 8c 81 b8 c0 1b 7f cb 3f eb b0 de 3f c2 5b 65 -f5 af 96 b1 d5 cc 3b 27 d0 c6 05 30 87 b3 96 80 -e4 92 a4 ab 23 67 47 11 69 e5 28 38 94 5d ba 9d -d7 72 3f 4e 62 4a 05 f7 37 5b 92 7a 87 ab e6 a8 -93 a1 65 8f d4 9f 47 f6 c7 b0 fa 59 6c 65 fa 68 -a2 3f 0a b4 32 96 2d 18 d4 34 3b d6 fd 67 d0 0b -25 b8 1b 09 b5 62 03 85 64 - -# Signature: -59 9e 69 c1 54 e4 fe 66 b3 6a 69 04 92 fa eb b2 -bb e7 34 e0 41 5d 9f 3c f7 e3 78 28 f5 3e 61 13 -04 49 17 3a 33 46 0c 6b 4c 8d c7 d6 81 ca 6f 4d -af 1c b8 16 d4 0a a9 08 2e e1 93 7b e4 bc 6a 09 -c6 de 79 8c 82 86 fc d2 a2 b2 19 6c 59 99 4c 93 -7f 37 13 07 52 61 2c 6b ff 6d bb 53 e0 64 7f 88 -58 bc 38 38 64 02 1e 6d 56 68 19 20 24 92 97 82 -22 46 a0 f5 28 aa b3 ed 18 5e eb ce 91 9c f8 3e - -# PKCS#1 v1.5 Signature Example 3.4 - -# ----------------- - -# Message to be signed: -d9 34 44 28 fa 8a 58 f8 fa 7b 44 3e 51 fc 9b 51 -e3 7a 70 21 0d b8 bd 1d e7 f8 67 5d 84 79 ff 65 -7c a7 29 55 b2 3c 6f 4a 09 16 37 9a 4e de e1 f2 -6c 85 e0 52 90 21 1e eb 25 83 2b 09 cb e5 ea ed -3e 39 65 b0 5a 52 fb 5b 16 49 11 82 c5 91 3c b1 -82 57 48 e8 1a d0 14 f1 3d 29 6d c1 69 57 08 2b -1b 83 b4 be 50 a0 f9 59 c9 e7 f3 aa 80 77 97 2e -2b 93 c2 ef fd 9f 30 86 25 b8 ca 7f 54 d7 b6 96 -48 79 04 47 ac 91 f7 98 5e 51 0d f7 0d 6e bc 35 -72 c2 05 e6 - -# Signature: -2c 06 01 65 fc c5 65 5c 06 57 c8 fe 08 e0 5b dc -8c d7 7c 1f ec b6 d1 8b 89 38 11 c9 9d d0 91 e0 -d8 50 6d cc b4 9e 33 da af f6 da 96 7b 99 e3 44 -cb 17 fa 3c 96 31 29 9b 35 89 81 8b 37 ed 9d 5d -78 94 e4 a6 9d db 24 83 2e 1a 88 60 01 4e e5 e5 -eb 95 3e 8b 35 48 4b a4 fe c9 c3 03 3a e2 e1 18 -9a f7 94 a7 2e 42 67 21 5b fe 45 8f 0f ce 6b 37 -a5 54 9e f8 05 43 d0 d4 1a 87 b2 c6 e4 d8 4c b5 - -# PKCS#1 v1.5 Signature Example 3.5 - -# ----------------- - -# Message to be signed: -8c 67 02 da af 58 f6 a4 75 fa d2 c7 a4 bb 15 6a -57 06 42 55 77 d5 e3 0c 6a 6b d3 66 9f d0 30 af -d7 89 fa a3 d0 10 18 d4 5d b2 a0 47 f5 2c b4 f6 -3d ea 36 09 42 af e4 76 26 42 06 d9 83 ad 38 36 -e1 55 c5 6b 2e cc 08 76 3a fb 9f d5 1d 19 99 0e -fc 33 63 f6 57 e2 85 e0 35 21 e8 ca d0 1d 2c 93 -5a 18 3a e2 3f 0e e8 71 00 86 a8 5b 9f ad 4e 7f -2b 09 45 2e bc 40 3c e0 c0 e5 75 5a 7b 2f 33 f4 -de f0 db 71 c9 79 31 ff 90 4a 81 31 99 84 bd c5 -16 6f 6b 92 0c 97 ee 74 fb 7e 89 0f 49 0c 90 de -30 ca c9 76 b7 17 23 e2 f8 6e 9d e1 d5 03 a4 1b -c8 1d 53 cc be f8 ac 40 53 57 d9 df df 30 64 66 -b4 26 95 80 21 2e 9d 71 32 - -# Signature: -0d 89 fc f8 44 a9 dc 22 3d 5f 63 8d cc 3a 59 78 -71 6f 26 28 b8 a8 3a b3 3e 6e 25 5f f8 aa 01 57 -8c 14 e3 89 7d a4 5a ef d6 3f a8 7c f3 5e 24 4b -f4 82 8e cd 21 95 0f 30 85 a3 66 21 c9 da 1b be -7e a6 27 31 c6 8d 4d e0 a3 76 e2 2d ac 2f 54 8c -d4 ba 4a 54 2e 71 0f 55 ce 85 a9 c1 95 93 c0 8c -87 d2 96 d6 35 87 b3 fe 2c 5d 11 65 ee 27 74 4c -75 d8 f4 f1 43 71 63 7c 0c 0a 44 62 76 28 95 83 - -# PKCS#1 v1.5 Signature Example 3.6 - -# ----------------- - -# Message to be signed: -56 f4 ff d1 27 9d cf e5 62 a9 dd d4 1e cd f6 0a -3f f5 82 46 bf af 95 65 cf 67 4b 0b 90 75 f4 0e -ea c0 8f 0b 89 66 61 8a 19 6b 12 28 eb ce 93 fc -9d d7 9b d4 63 ea 7d 2c 97 4d 2c 2f 53 9e af b1 -b2 bc 1e a3 4d 74 f7 20 e1 19 34 2f f7 13 12 25 -aa 9a da 89 4b 76 b2 ec b1 2f 2f 40 28 44 b4 42 -5c f8 f1 a3 9b 0a 9c 83 b4 5b 03 cf c0 d1 5f d3 -14 d6 ab f5 32 b8 ed fc f2 36 51 4b 2e 45 86 97 -86 fe fe 27 f5 4d 66 6e e5 24 e4 b9 c0 53 be 39 -75 01 58 29 91 fa 2d 80 2c 7d 1b 17 8b 23 e9 b6 -ec e6 fd 2e f0 13 2c 06 01 a8 6f 07 68 ba dc 59 -c5 cc 33 f2 4d ed 55 4a e5 1a e3 ec 23 f9 dd 08 -9e 32 4a 68 21 f6 15 7f 12 84 42 ac 58 07 65 8a -d3 40 26 b8 fc fd a6 dc 7f 02 a9 3c 16 6e c9 45 -ee - -# Signature: -0d eb 39 7b f2 cf f9 79 d4 71 9c 64 8b 0a 35 25 -35 1f 5e 08 40 5c a2 61 4a 83 e5 6a ce 86 f5 52 -e4 1b b9 28 de 50 f0 bc 0f e3 1a 2e f2 ad 79 9f -d3 cf 47 42 b1 13 1a 37 bd 08 f2 a1 3c ac da 67 -f4 95 c9 f1 a9 ef 64 85 70 72 32 9f 00 cc 4c 01 -22 35 59 9a 83 fc 45 94 fe d9 23 03 49 01 ed c2 -7d 5f 05 79 98 34 93 5c ab e2 64 ff c1 96 63 71 -4d 8c 3d e8 e9 61 9f d2 84 2d 22 98 f7 a7 2c 99 - -# PKCS#1 v1.5 Signature Example 3.7 - -# ----------------- - -# Message to be signed: -0e 79 ac 9c 9c 03 96 d9 69 fb 3f 7c c9 94 7b 07 -8b ac 49 3b 03 52 c8 e0 cd e5 46 3e a5 c1 18 4f -d5 2a 1f b7 48 19 3c 14 7a 74 80 0d 24 f7 51 ba -93 5e 19 c9 11 5e df 07 22 88 33 0b f3 83 f4 95 -29 6b e1 aa 4a 50 95 b9 57 3b cb db 22 8a 43 13 -12 37 86 5d 26 df bf cf ef 07 8f 35 9f 9a 95 62 -e2 5b 69 63 85 e1 28 13 ff fb c8 d5 29 81 9a 91 -45 1d 33 a5 07 26 39 2e 4f ef 29 41 8c ca 2c 73 -a0 68 e6 0e ae 31 84 70 33 1a 0f 1d b4 bb b6 37 -17 3b e8 0f ea 03 c8 2c 15 d0 01 93 36 2d 3a 18 -ad 9e 2f 68 05 00 d7 26 5b 15 57 03 3a 52 09 77 -d8 10 fc - -# Signature: -73 3b 7f ea 12 0c a5 f0 35 9a 89 05 75 0c 49 c3 -63 d8 84 f5 6c 2b 7a 72 9f ad 7b ff 44 5a 1e 54 -79 89 41 74 53 93 e1 76 77 12 ac 4b 9d d2 68 38 -88 d9 e6 8b 90 5d ba b8 79 21 85 18 48 72 73 86 -02 ea f4 a8 0f 45 95 f7 8f d4 a4 61 0b f8 22 0b -86 a2 88 5f da 24 e1 99 64 28 cc d1 5f 20 08 e0 -68 51 b2 ee ad c3 dc 8e 03 01 2f 9b db 3c e0 57 -5d dc 3a dc 7c 59 08 49 8b 69 a7 97 ba 58 29 c7 - -# PKCS#1 v1.5 Signature Example 3.8 - -# ----------------- - -# Message to be signed: -22 eb 7d ba 73 30 7c 7c 52 a0 7c ed 89 db 8b c5 -39 4a ed 22 72 f7 e8 1a 74 f4 c0 2d 14 - -# Signature: -9e a4 60 0a 1a 65 49 fd 39 75 f6 49 8a 04 d6 9f -96 fa d0 e8 e6 fe bc fb e0 1c 2f 83 17 0b c7 4e -b9 1f 2e 33 53 38 d5 83 e8 85 aa c6 14 24 c9 b2 -66 c3 d2 d9 8e 79 77 ff e4 95 f9 c1 a6 ee 5e f4 -1a 4c c7 47 8c 24 b3 16 c7 d9 f6 db aa 65 a4 ca -de f1 81 ca 94 6f 9b 92 18 4f ae ca 8a 13 16 ae -ab 5c d3 87 8c 6d f0 74 f9 06 0b 9d b6 6d ec e9 -a9 36 7d 75 49 03 5a c6 bf 19 62 36 5e 1f d3 fc - -# PKCS#1 v1.5 Signature Example 3.9 - -# ----------------- - -# Message to be signed: -f6 80 - -# Signature: -51 63 90 61 fa 7b 7c d5 df 64 b3 0a 39 4c cf 7e -24 26 97 2a a1 dc f5 d4 5e b8 ec 2c d9 0b 9b 19 -68 92 be 5f a0 3c 43 f3 c3 72 3a e3 13 0d 61 51 -b3 3a 63 7c fc 50 ba 35 26 a7 39 6c f8 47 9c 50 -8c 18 11 81 0d 68 b3 88 0a f6 e6 4b 16 bd 70 79 -be 9c 00 39 29 51 22 61 89 8f a5 7c 06 ff 7e 1d -80 39 fa 99 3f d2 05 6a c7 01 9b 8d bc f2 53 0d -53 80 e6 01 a4 a1 87 1b 86 c2 0b c1 c4 89 c5 f3 - -# PKCS#1 v1.5 Signature Example 3.10 - -# ----------------- - -# Message to be signed: -65 0e 64 ed 1d a8 8b cf 8a e2 75 22 be 1d 5c 99 -19 f2 09 9d d6 32 45 5f 66 d9 af e8 ba f4 6c c8 -a1 98 40 9b 09 28 dd 87 22 62 84 d6 69 bf 01 bc -ec 44 37 6c b0 e9 bd c6 86 ac aa 8b 46 34 86 08 -59 94 ca fb 5a 8c fc 33 d4 9c ee f4 79 fc 6e 04 -f8 ee f6 37 eb 68 cb 57 81 8d 5f 97 70 ac 52 3e -d5 b0 16 38 36 7f f4 7f - -# Signature: -50 3e 05 66 1d 68 1e ca 57 4e 02 30 af 2d aa 87 -7b 90 51 6e 5e 19 72 8c 91 76 8d 6e ef ee 00 1b -35 41 9c 5f cb 56 11 d6 0e 7e cb e3 c9 5e 5c 88 -ba 93 46 07 04 f1 69 4a e8 04 44 eb 97 18 a0 8b -66 86 fa d8 6e 52 59 90 c3 c1 a6 6c 8c 53 aa 31 -ae d8 cb c4 0f d5 4f 5f f8 a1 34 74 9d 79 d3 8f -bb 0d 58 44 26 78 ff 2f 70 c6 c5 0f 25 47 2a 72 -d6 32 05 e7 82 42 3d f4 0b 6c 43 de 03 a1 8f 8b - -# PKCS#1 v1.5 Signature Example 3.11 - -# ----------------- - -# Message to be signed: -57 f8 ac 6a 9e 46 8b 7f 1f 74 5d ff e3 9e 9c bf -90 24 a0 ff 36 e0 22 83 92 be 6b 29 94 29 17 76 -b8 9c 0a 4b 1f a8 6b 2e c8 bb 7c 3e 64 f5 58 5a -fa 77 - -# Signature: -90 be 16 b4 08 b3 85 73 95 39 b3 b9 a2 9b 94 c7 -29 38 5f 79 dd 4a 79 81 1e 6f 67 c8 0e d3 59 e5 -f4 b2 a1 9c 22 2a 82 b3 d6 d6 2a 90 3f b1 80 c1 -f4 3c b3 fe 06 a2 50 bc b0 e7 c6 88 66 5c 83 68 -a1 1a b1 16 0a db 74 02 91 35 2b 38 38 b6 92 3a -4a 37 ad 06 04 0a 53 59 20 dc 0f 10 57 9e cf 48 -1c d4 41 37 17 d7 d4 d9 60 aa 75 1a 74 3e 2f 7c -61 6e 54 2e e6 5f bb fe 24 66 0e 10 1d aa 2b dd - -# PKCS#1 v1.5 Signature Example 3.12 - -# ----------------- - -# Message to be signed: -80 ef 01 aa cc 5b fb 0d b4 8c 6d e3 d8 14 95 b9 -c2 31 1a 38 93 89 f2 3b 70 c0 24 da 44 78 bf ab -2b fe 4e 54 6f 13 ff fd b9 63 89 4e c6 da db 3d -2b 0e e3 37 f1 16 31 05 8e ac 86 09 e5 a1 55 4a -f7 97 a9 f9 ab 47 8c 2d 5b 91 88 c8 25 - -# Signature: -44 c3 f5 1d cc 6f b2 b4 e7 0f 53 7f 54 64 c6 32 -0a d4 2e 21 28 fa df d9 a7 e9 37 cd 65 dc bf 35 -ac 66 cf fa fd 39 28 39 66 f2 f1 5d e5 27 72 35 -50 71 5a 31 04 29 45 e2 00 cc 5c 86 fa ba 5e c8 -ab af 50 9c 0c cd 64 d9 9d ed c7 6e 3c ea a8 c4 -47 17 93 37 f4 a0 77 7b 11 52 6e 47 2a cd 41 3b -4a c7 c3 03 cd cd 84 ca fc 02 52 43 ef 00 6f 79 -dd af 55 c1 5c c4 a8 f1 5e a2 c8 7f 05 77 38 14 - -# PKCS#1 v1.5 Signature Example 3.13 - -# ----------------- - -# Message to be signed: -ac 17 95 91 55 28 3b 0c 7c ff 51 5c 33 15 d8 9b -df e9 58 7c c0 01 20 d3 ab 31 bb 76 07 bd b3 01 -ca ea f5 e1 5f 5a 6f 58 c9 c5 68 ff b3 d2 34 02 -51 6f fe 23 0c 69 81 a8 1c 17 8a 8a 18 ca 33 0b -b8 ec af b4 81 b2 49 b4 66 a8 cf 78 b7 0d 9e 78 -a1 39 a8 8f 48 4c ce 7c 20 35 b2 e8 9d 49 3b de -88 5e 1c de 42 cb 1a 94 49 ff 57 0d cf 9e 33 c5 -cc 77 b2 59 be e2 83 05 39 68 02 ed c1 6f c5 a8 -e1 0b 56 da 2d a7 86 b5 fb 6c 81 2b 2e 17 5b 69 -6b 1a 9a 96 fc 72 2a 43 21 46 45 0f 07 a6 48 ef -3c cf 99 6e f3 08 1f a5 bb 42 21 c9 13 ba 22 28 -97 0c 9b 0e a5 26 6b ff - -# Signature: -48 45 8c 72 f0 67 dd 9a b7 20 ef 16 0c f3 18 4b -b9 80 1e 26 d6 14 a8 89 a8 35 84 41 07 ac 01 65 -0b 11 84 a0 0b ca a7 af 1f f7 de 3a 2e f2 e7 ce -b5 b2 5c 3b 5d 5b cb 29 86 59 34 32 47 48 c6 8f -07 de 17 4e 17 80 a7 0f a2 4d 6a 3a 9f 7a 41 b8 -19 37 c4 98 4b 2c be 06 b3 d7 b4 4c da e9 cb d4 -16 32 d0 09 43 c3 b5 73 b1 aa 29 12 75 0a 9a eb -07 f1 10 13 0b a3 61 dc f8 f5 36 79 0d 60 78 47 - -# PKCS#1 v1.5 Signature Example 3.14 - -# ----------------- - -# Message to be signed: -99 09 8f 77 f6 ed 35 c0 8f ab 3f a9 78 86 93 67 -1a 58 00 dc 30 3c 9c ce 42 46 16 fa 0c 7e e8 88 -86 87 67 4c a8 8a b2 2a 5f f2 d1 2e 2b 38 8b 09 -4f fd 7d bf 9a 09 27 a9 62 17 17 15 1e 08 ec b8 -ad e1 55 9f 4b 48 e2 3d 31 cf 57 cd 38 84 df e2 -b3 e4 b2 60 e8 96 02 94 07 96 94 96 02 6c 74 a2 -18 90 d9 a9 af d2 cb b8 f2 83 0a 56 6a ed 24 f0 -16 19 74 01 a8 cd 22 c8 2f b8 b2 28 91 84 58 24 -0a 23 d1 01 85 eb e7 72 dc 19 bc fe 3e 44 92 2f -e7 32 09 c1 ee 00 40 07 9f b0 3b 82 7c 82 17 d9 -ed 7c 98 c9 5f 30 97 4f be 4f bd dc f0 f2 8d 60 -21 c0 e9 1d a6 0c a2 ad 77 79 7e ce 86 de 5b f7 -68 75 0d db 5e d6 a3 11 6a d9 9b bd 17 ed f7 f7 -82 f0 db 1c d0 5b 0f 67 74 68 c5 ea 42 0d c1 16 -b1 0e 80 d1 10 de 2b 04 - -# Signature: -b4 6a e8 66 13 91 89 b6 b1 71 a7 62 05 fb 9c e0 -41 b4 02 98 e5 ba 92 c2 e9 cc 0b bf bb 4a 76 42 -5d e6 ce 13 02 1a e1 a4 a9 42 29 9f 98 ff 89 f5 -52 f4 3a 90 73 de 64 f4 9c 2c a3 62 0d 09 d7 e6 -e3 fe 28 22 1e 93 68 98 7e 11 0c d6 06 71 06 c4 -db 31 a0 38 90 23 67 96 c8 42 52 f5 6c 95 03 4a -01 c5 fe 98 1e 81 b6 54 85 5a af 27 47 50 11 55 -72 0c 21 93 f3 a1 d1 0f 49 fe e9 0c 52 fe e9 e4 - -# PKCS#1 v1.5 Signature Example 3.15 - -# ----------------- - -# Message to be signed: -ff 79 06 42 30 5b f3 02 00 38 92 e5 4d f9 f6 67 -50 9d c5 39 20 df 58 3f 50 a3 dd 61 ab b6 fa b7 -5d - -# Signature: -07 56 32 47 73 4f 3c 3d 7a 31 02 bc b4 5b b5 68 -15 68 ed 10 f2 ec 45 9e 46 9e 1a 9e 34 09 a1 39 -fb 15 1b 98 d3 f3 b6 2d aa ac 8b 8f 89 16 df 85 -d6 df a9 ab 76 0d f1 e1 5a c8 90 44 e5 79 cf 47 -a1 af 6c d6 ec 70 4c ed 9b 03 4c 6a aa 90 d0 e7 -0e 08 52 14 0e 75 41 f2 ef be 2c f1 90 b9 58 94 -1e c8 b5 97 4f 9c 44 4d 26 c3 43 16 c9 21 6b 65 -95 e6 56 bc 6c 78 44 fa c1 6c 51 52 60 92 8e 78 - -# PKCS#1 v1.5 Signature Example 3.16 - -# ----------------- - -# Message to be signed: -e9 9f cb f8 59 2d be 2d 7e 27 45 3c b4 4d e0 71 -00 eb b1 a2 a1 98 11 a4 78 ad be ab 27 0f 94 e8 -fe 36 9d 90 b3 ca 61 2f 9f 22 d7 1d 54 36 3a 42 -17 aa 55 11 3f 05 9b 33 84 e3 e5 7e 44 52 28 80 -62 af c0 8f cd b7 c5 f8 65 0b 29 83 73 00 46 1d -d5 67 6c 17 a2 0a 3c 8f b5 14 89 - -# Signature: -22 74 64 36 16 4e 63 93 78 71 c1 d4 7d 8e 3e 70 -c9 e5 2d 11 17 31 6b b1 54 cd 55 2e 83 6f 2a 3f -be 6d 89 d6 07 4b 51 b0 15 9c 26 c2 8d f7 5e 3d -7c fb 7c f0 02 f6 5d 1e e5 21 ed c2 c3 a6 5c 52 -6c 98 c7 c0 25 fa 8b b6 31 47 09 16 d3 01 b8 f7 -80 9d dd 91 9d ed 31 a0 d4 66 83 ec 5b b4 41 70 -61 6e ab cd 97 02 05 ed 76 02 02 d0 d8 7a 65 79 -59 08 b2 8d 32 6f 93 62 13 f2 9f eb 59 77 34 91 - -# PKCS#1 v1.5 Signature Example 3.17 - -# ----------------- - -# Message to be signed: -6a 6a 0c 9b 5b 15 bc da 19 6a 9d 0c 76 b1 19 d5 -34 d8 5a bd 12 39 62 d5 83 b7 6c e9 d1 80 bc e1 -ca 4a f8 70 fb c6 51 60 12 ca 91 6c 70 ba 86 2a -c7 e8 24 36 17 30 6f 4f 9a b9 50 11 99 ce f5 5c -6c f4 08 fe 7b 36 c5 57 c4 9d 42 0a 47 63 d2 46 -3c 8a d4 4b 3c fc 5b e2 74 2c 0e 7d 9b 0f 66 08 -f0 8c 7f 47 b6 93 ee 40 d2 e1 80 fa e1 ea c4 39 -c1 90 b5 6c 2c 0e 14 dd f9 a2 26 ba e1 7d 20 38 -5d 50 19 55 82 3c 3f 66 62 54 c1 d3 dd 36 ad 51 -68 b8 f1 8d 28 6f dc f6 7a 7d ad 94 09 70 85 fa -b7 ed 86 fe 21 42 a2 87 71 71 79 97 ef 1a 7a 08 -88 4e fc 39 35 6d 76 07 7a af 82 45 9a 7f ad 45 -84 88 75 f2 81 9b 09 89 37 fe 92 3b cc 9d c4 42 -d7 2d 75 4d 81 20 25 09 0c 9b c0 3d b3 08 0c 13 - -# Signature: -41 93 22 fa ca ce 76 f2 d5 e2 fb c1 9a ab 86 c7 -18 a2 80 64 f1 d7 b4 c6 62 f0 47 4a 87 77 a9 59 -bd 65 69 53 8c 16 08 1c 0f 52 69 8b 2f 00 17 30 -c0 3b 9a 3d 26 94 73 74 c9 61 fd ed a1 15 b6 b7 -da f6 65 18 f1 fe 82 0f 67 c3 ff 12 f0 bc 3f 11 -01 e3 91 1c 43 90 6b 0a 12 7e 50 be 01 40 c5 ef -c4 35 e2 95 7b 44 2e 60 ad 52 5a d7 0a c9 ef 61 -c3 d6 4f 0e 56 6c bc 1f 9d 51 ba e1 d4 72 71 da - -# PKCS#1 v1.5 Signature Example 3.18 - -# ----------------- - -# Message to be signed: -3b 93 ef 4a 55 50 96 69 19 15 dc 23 c0 0e 95 4c -de b2 0a 47 cd 55 d1 6c 3d 86 81 d4 6e d7 f2 ed -5e a4 27 95 be 17 ba ed 25 f0 f4 d1 13 b3 63 6a -dd d5 85 f1 6a 8b 5a ec - -# Signature: -ae 21 1f 4f 77 da 1b e6 af 9c 9e a7 04 db ac 4b -3f 3e 27 0d 2f ac f3 65 1d 78 7d 0e bf 59 a7 9a -39 61 2d a1 2d 57 c4 ac 8a bc 72 8e 1d a3 f0 1a -15 20 fc 9b 32 cb 0f fe 00 8c 80 69 92 8f 83 e1 -35 90 a7 8b 81 7e 81 9f bf 2f d0 58 93 ec e5 b1 -41 86 d9 01 c7 68 e3 42 dc 54 72 23 45 ae 8a a8 -73 8d 4d 59 70 c5 08 54 72 bd 98 99 fa 00 42 cf -14 bc ed ff db c0 ef 50 81 90 75 84 2f c3 6b b8 - -# PKCS#1 v1.5 Signature Example 3.19 - -# ----------------- - -# Message to be signed: -49 ff d5 6b f7 ef c1 13 04 a5 af bc 19 d4 79 24 -90 18 fd f4 e0 9f 61 87 26 44 04 95 de 11 dd ee -e3 88 72 d7 75 fc ea 74 a2 38 96 b5 34 3c 9c 38 -d4 6a f0 db a2 24 d0 47 58 0c c6 0a 65 e9 - -# Signature: -68 fb 0b d5 19 bf 6f 96 e0 76 af 29 01 2f 3c 3a -11 37 c0 98 8d e7 b6 fc ed f4 f5 1b df ee 64 5b -89 7f 17 70 9e 05 ca a0 b1 13 50 0d 90 4d c0 60 -0d 17 a9 ff 8e b0 2e 1e fc 9c 46 7a 24 00 3e f8 -1e 72 74 67 c4 7d d6 56 35 6d 70 37 2a 15 ea 88 -41 21 63 4b 01 5d 29 51 1f 28 95 55 77 99 07 9d -03 c6 d4 de 25 9b 3b 36 2b 80 49 2d 81 bc 9f e8 -54 44 63 ec 03 0b b5 c9 c7 3c 32 74 e3 ed 12 22 - -# PKCS#1 v1.5 Signature Example 3.20 - -# ----------------- - -# Message to be signed: -bc 25 5a f8 9a 6a 19 9b ca 4a 39 1e ad bc 3a 24 -90 3c 0b d6 67 36 8f 6b e7 8e 3f ea bf b4 ff d4 -63 12 27 63 74 0f fb be fe ab 9a 25 56 4b c5 d1 -c2 4c 93 e4 22 f7 50 73 e2 ad 72 bf 45 b1 0d f0 -0b 52 a1 47 12 8e 73 fe e3 3f a3 f0 57 7d 77 f8 -0f bc 2d f1 be d3 13 29 0c 12 77 7f 50 a3 34 db -6f ae bf 11 08 1a 04 f8 7c 2d 62 1c de c7 93 0b -9b 18 3a 99 04 75 dc bb 9c c7 f3 45 a3 b5 58 03 -03 0c f0 36 1a 5d 80 81 - -# Signature: -41 f6 52 df 79 fd d2 6d e9 5c 7a 98 fa 85 87 13 -fb 56 6d 8b 39 92 8e 71 76 4b 2b eb 19 84 03 e0 -3b 7e 06 dc 96 0c 50 51 57 bd f4 05 92 c4 d7 75 -03 fb 72 a4 e0 05 5f 97 4f e9 39 44 8d a3 68 f5 -3b d2 ef e2 6e 6f 9a 25 4b 3e 87 32 aa d8 16 87 -b3 61 e2 1a 40 cf 3e 5e 92 38 9a 2b 48 9c 05 c5 -97 f0 e1 64 e2 67 70 93 72 00 43 27 16 35 62 dd -8a 0a db bd fe 3b c6 16 bd 08 42 96 84 c2 0c 69 - -# ============================================= - -# Example 4: A 1024-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -d1 31 e0 92 43 37 0d d2 cd 54 25 c8 d0 30 f9 9a -db 10 5b 14 7b 8a 3d 00 67 c6 16 44 3b 7d 4b 96 -82 38 e0 6d bb 5f 20 28 e8 53 57 4b 7c 14 be 10 -83 c1 e5 7e 13 2c 1d f4 a3 a2 71 32 63 fa de 12 -f7 11 4f 43 69 bb f0 56 20 55 48 41 33 1e d8 11 -00 50 52 19 25 72 ce b4 8d 66 24 07 fd 30 81 cf -ab 8b 48 c7 e9 2d 3c 4a 26 a9 64 5a 38 e6 de e8 -8b b0 07 59 75 a4 da d9 64 6b 21 60 38 40 af 5f - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -d1 31 e0 92 43 37 0d d2 cd 54 25 c8 d0 30 f9 9a -db 10 5b 14 7b 8a 3d 00 67 c6 16 44 3b 7d 4b 96 -82 38 e0 6d bb 5f 20 28 e8 53 57 4b 7c 14 be 10 -83 c1 e5 7e 13 2c 1d f4 a3 a2 71 32 63 fa de 12 -f7 11 4f 43 69 bb f0 56 20 55 48 41 33 1e d8 11 -00 50 52 19 25 72 ce b4 8d 66 24 07 fd 30 81 cf -ab 8b 48 c7 e9 2d 3c 4a 26 a9 64 5a 38 e6 de e8 -8b b0 07 59 75 a4 da d9 64 6b 21 60 38 40 af 5f - -# Public exponent: -01 00 01 - -# Exponent: -56 b5 31 bb ee 18 37 a6 94 6c b8 6c 8f be 7c f6 -ee ad cc d2 a4 92 1b ce bb 34 a3 ae 0c 6a 56 96 -3f cb 8b 5a 70 3b 71 7d 03 2e e8 13 e5 8e 43 69 -5c f3 55 47 f8 72 64 c8 2d ba fa e8 44 00 8b 62 -d9 12 2e 9d e8 95 85 60 c8 db b0 07 72 7e 71 39 -e0 a9 82 e0 75 88 14 11 3d e5 4b a0 a4 55 17 51 -fc a0 fc b1 2d 8d e3 0d 78 b8 b1 12 98 a7 f7 8f -0b 08 8f 16 87 05 3c 84 a5 76 2f 62 a4 bd 05 c1 - -# Prime 1: -ee 22 a4 24 62 f7 71 8d fe cf 02 4b 17 c9 26 76 -78 05 91 71 33 9c c0 07 06 52 60 d3 04 7e 5f 89 -fe d9 10 34 28 43 37 8c 22 68 5d 53 2e 84 d2 59 -3a 7c 8c 02 6a 87 66 c5 a2 b2 ed 55 8e 88 23 19 - -# Prime 2: -e0 e3 70 0c 99 a3 e8 15 d7 4b 75 2a 84 fb 42 ec -20 e5 20 3c a7 c1 af 97 fb f3 97 b9 5d 11 05 37 -6c f5 d6 3e 3c 57 bf a6 58 55 e5 08 14 6c 86 db -aa b2 89 c9 5b c0 45 5a 58 2d d8 f5 3f fb ed 37 - -# Prime exponent 1: -d1 f1 34 68 e7 df 62 fb 5e b3 be 3f d9 de 7a cc -63 0f f5 a3 a9 6e fe 54 b3 1c 19 44 b0 67 81 6f -35 80 c4 aa 56 fc bb 92 0e 1b 98 7b 67 3d ad fd -00 75 21 32 58 1c bb 5c 6e 0d f4 f3 42 cf 7e b1 - -# Prime exponent 2: -ac d0 da 38 34 90 ea 36 6e 7d c4 09 ea ab 13 20 -55 9e fd 88 de f9 4e 30 a3 22 ec 03 3b eb 6a 70 -cf 40 93 64 bc 06 4a 76 50 07 a1 ba f5 c6 f8 53 -31 f7 85 3e c1 4d 1d 7e 71 a8 b9 c2 ad 6a b1 3d - -# Coefficient: -1e da 83 d4 a6 d0 99 b6 0b 2b 2b 84 c6 ae 41 65 -c7 22 50 3e bd 37 3c 83 6f 97 35 ca 3b 20 a3 eb -08 1b 31 e7 83 04 13 20 df c6 dd f9 05 14 ca b6 -ec 4b 80 ae 0c 05 2d d1 e7 ce 34 18 ae ee 24 a4 - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 4.1 - -# ----------------- - -# Message to be signed: -2c 93 6b f6 13 3a 96 93 f1 46 ee 5a 1a 91 c2 f1 -69 b2 e6 44 a5 18 e8 5a 75 f6 e4 3b 56 0d 4a 72 -f3 8c 64 f8 4c 05 24 0e 8b 4e 55 78 61 63 e7 27 -62 65 ba 21 3b a9 3d ee 1b 2e 10 21 35 a9 89 b6 -24 8e 88 32 7e 30 03 61 a7 4f 2e 9b c4 1f 2a 37 -68 3f 1a 1a 15 f9 dd 47 2e 11 8e 1c 4b 3e de 58 -dd 70 f3 ba cc 25 2e 0c 65 4b 0f 7a 6e 41 a9 28 -75 10 ef a0 3b c9 2e 80 5e 5b 2c 91 3f 51 e2 5c -7f 85 86 40 ca fa c9 d3 c9 17 68 65 07 fa 94 f8 -86 6f 86 9a 4e 5a 6a 3d 4f 9d 97 ed 81 37 f4 14 -d1 44 7a 86 ee f9 e1 49 69 94 ad 2d a5 97 - -# Signature: -9e 93 f7 ac c5 0f b3 a0 b1 24 3d c3 38 c8 cc b1 -2b ca b4 aa 45 04 40 b6 30 6c 81 b5 0b 8f 95 a9 -36 dd 16 63 30 c6 99 b2 85 80 da 1b e2 75 61 64 -02 da 85 bf d8 ee fc d6 99 35 87 e6 09 28 65 d8 -25 3b 04 08 1d 57 2f 26 27 59 f5 56 df b9 11 e8 -d9 4e 92 e5 5a f6 d5 89 80 18 ff 33 e5 f6 b1 f9 -90 19 96 e9 2f af 33 6e 2d cc e3 ab 0a 93 db 93 -2e 94 2c c6 47 8d 6c c2 fb 66 08 11 91 0c cd 17 - -# PKCS#1 v1.5 Signature Example 4.2 - -# ----------------- - -# Message to be signed: -94 32 3f 7c 38 b9 95 cc 6b d8 5d 47 9f 8d e2 de -c1 ef 2e 84 b1 fe ef ec f3 91 50 b5 d9 f2 cb 15 -85 ac 0d 71 9a b3 48 bd c9 75 0d db 8e 32 76 db -89 81 87 35 bd 62 31 41 3c bc a2 de 94 1b 55 e8 -cf a1 ab 13 2c c7 8a a4 f2 b5 1f d6 57 8e e2 e0 -32 e9 0e 34 08 0f 0f 8e 3d b1 4d 1b 56 f3 d0 77 -f2 9d bc 02 16 a4 13 44 99 8c 0f e1 ab 41 22 47 -df 21 e7 4e c2 2f 5d b0 14 8e ca f4 73 ee ec cc -14 ff 9e 45 d5 8c 2e 62 b5 fe 6a 50 1a b9 6f d7 -c5 ed de f1 4a a8 92 66 69 2e - -# Signature: -09 40 2a 43 56 be 73 44 9b 46 9e 36 31 e1 b0 23 -07 c5 ca c2 ce 15 28 d7 84 fa b9 26 df f5 1f 86 -24 1b 9d 66 f7 9d 6d 8e ee eb 24 9d 76 fa 9f 16 -6f f9 a8 c6 a3 9e 83 2d 5d 14 b9 d7 ec 5a 3d c2 -8f 01 eb b0 6e 39 d5 9e 84 61 b9 55 b2 a7 f5 b1 -f2 04 b0 4c c6 cc 62 64 61 61 ac 1c 2b f5 ba b5 -0f 06 8c 90 8d 28 de 5e ae f7 e8 eb fc ab b0 9b -7d 75 d8 35 40 dd 4b 35 4d 13 1d 86 f0 77 07 17 - -# PKCS#1 v1.5 Signature Example 4.3 - -# ----------------- - -# Message to be signed: -0e 23 3b 25 49 bd d2 1b a5 14 80 da 8e 3d ce f4 -db 20 e0 dc c0 5e e2 37 35 1e db c9 a5 3c 52 f6 -74 d1 05 fe c0 93 9d 36 99 64 7e fc 1e 25 cb 4e -9b 1a b7 52 ab 6f e2 88 69 ff 73 f2 3e 01 ee f8 -67 4c 53 5c 4c 93 35 f7 98 f1 de ec d4 89 d0 6d -c8 8f d6 bc 1d 49 96 ef f7 2b 43 9e 3c 01 4d d1 -4c bf 17 71 5c 15 89 43 de 2e 6f 97 1c 34 99 87 -a1 b3 95 d6 82 c3 b0 c1 7b 66 cd 3c a4 10 60 b5 -71 11 e2 28 31 4b 2d 34 b5 e4 4e 55 f1 c1 1c 31 -a6 eb 80 b5 f8 2d 96 bd 4a 17 - -# Signature: -d0 75 be 06 cb d6 22 3e 87 1b 0f 33 62 a7 97 de -28 2d a5 c4 03 23 f3 7c 2c c3 74 65 a1 a8 63 68 -dd cf a6 da a1 35 86 6c 32 03 d0 47 22 60 b2 9c -3c 9b 1b 88 94 08 5d 54 7c 5e b9 31 42 4f 24 14 -0a 5c ba 15 3b de d4 b9 ce 7d ae dc 64 5d 39 80 -c5 f5 83 f7 67 11 c6 7b 19 3a 52 12 f2 a9 35 4a -67 96 af 09 08 20 91 31 34 ec f3 05 be fb 65 32 -cd 48 d4 11 3a 0e c4 86 9a 0a 56 55 db dc 72 59 - -# PKCS#1 v1.5 Signature Example 4.4 - -# ----------------- - -# Message to be signed: -d4 7c 0f 5c 92 2e 4f 80 9e 9c ee d2 07 f1 24 a5 -ac de 37 fa 14 63 8e 8f bd 0a 72 fe 45 26 21 95 -8e 37 68 2c 6f f2 83 f3 d5 1d a1 52 aa 1f 63 74 -cd 27 d2 a4 a5 33 05 39 16 df f1 c0 7b a9 36 31 -74 81 69 63 60 69 04 58 d8 d1 e5 d6 6c 35 f9 c9 -9a 50 55 d9 f7 cf e7 60 5c ca 57 ea c3 35 ad e2 -ef f6 b5 aa 62 7d 5b - -# Signature: -11 86 0b f4 d7 45 19 ff 8c fc ce 3d 33 e3 aa bd -f7 71 40 a1 56 36 b2 67 8d f9 67 31 44 c2 41 b0 -a9 9a 0a 37 f2 92 ca d5 1d f0 b6 3b 14 f8 ab 17 -e3 fa 15 58 77 90 fb 06 2b 5f 26 6c 16 6b 2c a7 -51 57 a0 f9 e1 a5 c8 ec 26 b9 19 9d 07 18 77 99 -80 6a 1d e9 87 15 fb e5 27 57 a7 03 77 3c 91 8a -00 0c 21 1a 78 22 85 25 cb 52 eb 44 1b 26 9b 3f -33 05 0e d1 93 5a c0 e8 59 63 19 ae 80 c7 5b 84 - -# PKCS#1 v1.5 Signature Example 4.5 - -# ----------------- - -# Message to be signed: -be bd 9d de a3 ab f9 f8 eb 58 55 97 66 f8 b3 ab -83 53 52 38 c4 3d cd 81 a2 94 93 03 a9 5f 05 5a -83 40 ce ee 16 15 e5 8d f1 e0 14 c7 55 2d 76 9f -88 41 ba 09 97 5c ef e7 e4 8d fc 6a 26 49 e8 20 -03 e7 bf 42 0e 70 10 1b 32 7d 91 70 f7 3e 8d 88 -7c d2 98 f5 3d c1 bf c8 82 cf 0e fc fa d6 e8 6a -0e 7f 90 94 c4 f2 6c 46 92 1e 09 - -# Signature: -84 a2 6f be 67 01 0a a1 ef 2d 6c 79 26 32 39 b9 -78 f4 e8 93 dd 1e c6 f0 7d 23 17 f1 51 a2 a1 b3 -23 e5 05 f9 45 0c 37 df 6b 1b f3 e2 4f 38 b6 36 -bf 77 4e 96 74 1f fa a7 69 cf d7 a8 a6 b3 a5 ef -ab a2 3a ab 3a 43 7a 22 5b d9 41 86 e9 1d 39 2b -ed 2e ad 8a 78 f3 81 f4 09 49 cf 1f 3d 27 24 58 -1f 25 70 4b df 66 08 dd 11 9e 36 d8 7d 03 55 e6 -70 6c 8a 52 59 fd 60 c8 df 13 bc 62 aa 9f d5 7a - -# PKCS#1 v1.5 Signature Example 4.6 - -# ----------------- - -# Message to be signed: -9d 19 8e 2c 6e 12 f7 4a 9a 08 1b cf 70 fc 04 16 -8a 49 e0 9c 5f aa a0 11 e9 a0 9e 2c 43 ee 2c d3 -9b b2 f7 e5 68 2d ea b1 fa 11 1e 41 a3 19 4a 20 -a8 6d a5 51 01 82 4d 3d 78 a7 e3 2d b2 b6 0a a7 -73 77 0b 57 39 07 b4 09 a2 59 2c 83 f3 47 fe bb -2d 5c 85 e9 25 5d 6d c1 2a aa 33 5a df bb 5d c8 -62 d7 86 19 53 e2 68 7d 53 03 b6 86 ff f9 63 4e -e4 d1 5c bc c2 9f 7a 35 05 a7 3d eb 6f 9e 38 8e -96 85 ff f4 d5 45 0f 1e 32 75 35 9a 2b 99 44 0c -67 39 f5 b9 1e bd 14 ef 78 ae 73 c1 a6 19 11 f5 -ae 3a 2b 91 49 67 49 17 27 81 80 65 ee 01 0d f4 -9d 5a 16 ed 8d ce e8 48 ae 09 48 a2 52 4e ac 7c -4f f9 09 6c ed 61 35 76 42 c5 e0 f8 06 80 af ff -ce 0b a7 eb 59 58 99 49 52 6f f5 12 35 cd c7 2d -47 a2 7b 39 b8 d4 ac 84 9c 3b c0 4f a8 36 cf 18 -4b ae 0c 83 41 59 56 - -# Signature: -38 ef 24 5b 94 0d 93 97 0a 50 3b f4 3e 28 e1 7b -8a ff 08 3c cb e1 e9 c4 8e 4d 80 f5 16 c2 7d 08 -5c a2 a4 e5 73 23 6a 24 94 d9 b9 97 f8 12 48 48 -12 f6 65 25 d0 6c 0a 0b b2 13 0c 15 d6 ce 18 b2 -2f 3c ee 57 09 7f c0 d5 58 af d9 af 27 f1 51 f8 -43 6f bc 87 d6 be 61 42 64 7a 17 e0 4d f6 de c7 -0a 95 c7 da a8 4e de 94 cc b4 3e 1d 2c 37 b9 45 -81 73 10 d1 4a 22 b5 b9 ae 61 14 48 ee 41 bc 70 - -# PKCS#1 v1.5 Signature Example 4.7 - -# ----------------- - -# Message to be signed: -8e 8b a8 43 6f e3 10 4b 7c e2 a4 ef c3 6c 85 7d -49 e8 49 c0 08 5f c6 57 ba a0 33 17 93 b3 f3 6c -7c e7 38 b6 13 0b fa c7 5e 50 11 f3 2a a3 d1 - -# Signature: -78 44 69 9f 1c 4f 29 6e 50 26 1f 15 26 e0 dd 84 -f0 1c 82 cb 85 fa 24 60 9e b0 33 58 75 2c 6c f5 -99 94 d8 4e 12 f4 6a 72 00 cf 5a d9 7c 08 dd 4f -fc 44 65 7d b5 72 14 cd 1f 4e ed 6b 77 d2 39 fb -58 21 69 88 c5 e5 bc 73 5a 4f df f4 08 eb 9f 12 -79 d6 5b ba f6 a6 81 92 44 18 34 9e 62 ff 5e 58 -15 ea ea 59 2d 90 d1 ee f5 56 fc d4 d5 b4 b8 9c -6c 70 73 9d 6f 0d 3d 0b d1 6a 50 f1 e0 02 4e 98 - -# PKCS#1 v1.5 Signature Example 4.8 - -# ----------------- - -# Message to be signed: -58 5f a6 a7 f7 7a 4b 6e ba 56 90 e7 3e 71 28 b7 -2e 67 7c db 3a aa 86 29 ed 61 f2 ee 63 af 1a 71 -ba 87 13 6a 52 db 1a 33 21 fc fe b2 48 bf 2e 5c -f5 c6 39 57 1d 58 95 ad f1 fb 06 17 ed 14 0a 2a -0d 98 37 c3 c1 d8 45 0c 28 9d 33 bc 96 23 79 d7 -3e 30 87 f2 b7 ee 6e ad d6 65 01 48 c0 42 b6 ff -04 48 21 96 c7 18 fd c0 ce 57 9c eb 62 a8 1e 58 -43 73 eb 93 75 40 c4 26 b5 56 6a 9f 40 7c fc cf -bc 4b 75 36 94 af 0d f4 cd 6a a9 f1 65 46 a6 33 -94 a0 f6 57 73 71 34 3f fd db 65 1a 62 a3 a5 8e -dd ec 67 a2 9c ca e8 96 56 3c 63 e3 c9 0d 54 d9 -13 58 ad f1 94 e6 aa b1 f9 - -# Signature: -68 93 35 1c 73 91 5f ac 47 c9 62 cc 60 17 ca 74 -a5 b5 ee 4c b1 bb 5a 10 ad a2 a4 31 58 a2 26 1e -b2 7b 86 6d b3 9d 35 90 b4 f8 d2 0e e6 7c b1 a5 -78 94 63 15 0d 83 93 43 23 25 43 c8 26 50 51 01 -e1 d2 57 04 26 ab 9f ef d6 5b a8 4f aa ec 73 1f -27 37 4a b1 01 91 c9 60 83 16 93 f2 9a 85 4c 38 -12 85 99 f7 28 77 49 b0 b4 8b f7 e9 df da ed c8 -4e ec e0 71 40 45 84 73 0c ec ce 0d 5c f0 05 cc - -# PKCS#1 v1.5 Signature Example 4.9 - -# ----------------- - -# Message to be signed: -78 3c 18 b1 1f - -# Signature: -13 2f df b8 41 93 df b7 9f df e6 ba bc 2e fd 39 -b2 6a a2 09 68 a0 7c 0e 41 56 0e e4 df cd 4f ca -79 17 49 0f 24 e8 df 84 f4 e0 11 5a 3e 63 27 3e -7a 3b 12 8a bb bd 17 b8 aa 5a 06 ba 15 5e cb 23 -0f e7 97 26 04 79 95 70 10 e4 4b a5 75 29 2e c3 -f1 51 ab f4 8e 91 03 e5 51 42 ec 67 a4 13 4d d8 -f3 8e c6 59 f9 a7 89 fd 03 41 ce f2 bb cf 9f 52 -9b 93 21 8f c3 e4 3a 76 69 69 d1 bf 87 88 48 07 - -# PKCS#1 v1.5 Signature Example 4.10 - -# ----------------- - -# Message to be signed: -96 dc 98 b0 eb 84 f5 59 48 30 7a dd ec cb e7 64 -39 ca 36 58 bc 36 35 96 24 c8 fe 2f a0 9c 52 e4 -7a cd c3 2a 15 6d 90 76 82 41 0a 85 67 ab ca fd -c6 d8 bb 53 25 35 9e c7 5f fd b7 3e e0 a9 51 5a -4d df 9a 31 e5 d5 19 46 03 74 28 0a da 30 de 7d -d5 34 de aa 57 - -# Signature: -8f b4 3d c8 f0 6f 2b a4 8f 19 be 5b 1a 09 31 21 -3a 99 0a ed 9c 9f ed 1d e5 d6 f3 5a 2a 78 2f 0a -19 8f f6 38 8d 96 e9 d5 9b 88 e9 78 22 f3 49 ff -41 64 ee a5 0a 62 93 5c 61 cb c7 6e 3d f7 5f 68 -4d 96 24 75 e5 63 59 64 96 c9 88 0a 48 ed 97 8a -63 15 a3 45 57 17 91 cb 2d dc 88 da be 41 87 98 -a6 a4 41 c4 7a fb b1 cd 15 21 3e ca 3b 11 15 ec -8f 58 f8 77 be 8f bd 38 f4 fd ae f9 39 f5 26 40 - -# PKCS#1 v1.5 Signature Example 4.11 - -# ----------------- - -# Message to be signed: -37 20 01 59 9d 99 30 c7 d5 57 45 8b 43 6d ec fd -c1 4d 06 cb 7b 96 b0 67 18 c4 8d 7d e5 74 82 a8 -68 ae 7f 06 58 70 a6 21 65 06 d1 1b 77 93 23 df -df 04 6c f5 77 51 29 13 4b 4d 56 89 e4 d9 c0 ce -1e 12 d7 d4 b0 6c b5 fc 58 20 de cf a4 1b af 59 -bf 25 7b 32 f0 25 b7 67 9b 44 5b 94 99 c9 25 55 -14 58 85 99 2f 1b 76 f8 48 91 ee 4d 3b e0 f5 15 -0f d5 90 - -# Signature: -a8 97 c7 f9 72 e1 17 49 e1 e7 c1 55 ce 94 62 aa -7e 1c c0 a9 79 c1 27 29 79 51 26 cb 8c 0e a5 02 -21 c4 26 f1 bb 06 c1 ca f7 c5 1a c2 fb d9 4d 68 -8d a6 7d df 3e f6 66 06 e9 89 a1 6d e1 f9 2b 17 -70 6f 88 e8 7d 9f 14 69 a0 05 c9 fd 76 78 8e e8 -c4 a7 f0 12 09 e2 8b 86 f6 74 88 1a f5 7d b6 c3 -42 9b 6f b4 56 98 bf 5d 30 07 f6 1c 7d 44 11 78 -ad 12 43 a4 9b 2a a6 02 9b fe 90 2d 26 e4 23 75 - -# PKCS#1 v1.5 Signature Example 4.12 - -# ----------------- - -# Message to be signed: -bf bf d0 73 21 f0 f1 d5 fa 9f df 00 14 c2 fc b0 -35 8a ad 0e 35 4b 0d 29 08 1b 23 3b 43 56 77 50 -bd 6e 78 - -# Signature: -c2 4d 31 04 94 09 aa 16 d3 f9 72 ef 8b 75 95 ea -a0 07 83 3e 2b cd c7 50 48 52 f2 50 5f ba 1f c1 -5f 19 a0 ea dd e8 33 5c 73 06 fc 3f 51 66 1d a5 -20 ec c8 db 7f 47 38 85 ca bd e9 3f 0c eb f1 df -9e 8a 82 37 0b 00 a0 43 ad 63 2c dc c7 8f 3f ac -1d 8a 37 57 fc 8e 52 41 bf ed 55 c4 96 04 ac 19 -ab da c0 c9 c4 0d a3 73 c1 5f 3c 1b cc 97 3f fb -4f 8b 7b 5b 55 3a e0 75 e1 b1 bd dd d2 3d 7d 2a - -# PKCS#1 v1.5 Signature Example 4.13 - -# ----------------- - -# Message to be signed: -c6 97 39 d2 2a c8 96 6b f1 1c 11 6f 61 4b 16 67 -40 e9 6b 90 65 3e 57 50 94 5f cf 77 21 86 c0 37 -90 a0 7f da 32 3e 1a 61 91 6b 06 ee 21 57 db 3d -ff 80 d6 7d 5e 39 a5 3a e2 68 c8 f0 9e d9 9a 73 -20 05 b0 bc 6a 04 af 4e 08 d5 7a 00 e7 20 1b 30 -60 ef aa db 73 11 3b fc 08 7f d8 37 09 3a a2 52 -35 b8 c1 49 f5 62 15 f0 31 c2 4a - -# Signature: -d0 6d 32 26 0d a2 db 48 10 4f bd c2 4e 16 a6 5b -48 73 7d 43 ce 24 37 04 04 2a ad 6c 03 fd e5 a3 -dc 0f 2c c6 e3 ad 68 c3 c6 2e ab fa 1f 7b 1c ab -00 9d 11 75 af f7 7b e5 8f b1 2a 4e 58 12 7f ed -63 ea 3d f4 41 81 bd a3 8c 77 3c 83 b9 e8 04 bb -3d b7 96 32 63 df 30 e9 2c 4c 27 19 56 e7 e8 10 -45 2c 15 e0 6e 93 96 66 df 0c 83 34 03 30 96 c0 -7d ea 05 b4 4e bb 14 24 92 e7 66 91 31 eb cf 2c - -# PKCS#1 v1.5 Signature Example 4.14 - -# ----------------- - -# Message to be signed: -73 30 47 f3 36 f9 15 47 38 67 45 47 db 02 a9 f4 - -# Signature: -c1 13 c0 46 5c 84 cb fb 0f a1 bd bc 54 c3 e1 06 -8c a2 3e 69 b8 39 19 09 c3 90 0f e5 b4 e7 e3 f0 -34 c9 a9 88 a3 dd c3 c3 81 75 6a 1e 1a 27 c1 ec -fb 3a 70 e1 ee 0e 92 04 18 ac 4a b6 d9 53 2b 8d -09 59 a6 53 b4 c5 08 67 06 63 46 2b 2e 13 58 16 -b6 94 a6 b9 b4 68 a2 9f 38 de 53 bf cd df 97 e0 -3d 8d d2 4f 97 26 33 a4 9c f3 ea ae 1d 69 62 94 -38 60 dd 25 43 40 08 6b 10 35 7b 80 c1 cf bf 31 - -# PKCS#1 v1.5 Signature Example 4.15 - -# ----------------- - -# Message to be signed: -a9 74 0b 9a a0 d3 40 58 fd 3b 90 6e 4f 78 59 df -b0 7d 71 73 e5 e6 f6 35 0a da c2 1f 27 b2 30 74 -69 bd 0c e1 95 49 d0 70 01 20 cb e5 10 77 db bb -b0 0a 8d 8b 09 de 8d 83 96 e3 65 07 fe 1e f6 a1 -90 17 54 8e 0c 71 66 74 c2 fe c2 33 ad b2 f7 75 -66 5e c4 1f 2b d0 ba 39 6b 06 1a 9d aa 7e 86 6f -7c 23 fd 35 31 95 43 00 a3 42 f9 24 53 5e a1 49 -8c 48 f6 c8 79 93 28 - -# Signature: -4f bd 4f b2 37 04 f4 14 9a da 32 7f a5 33 88 52 -6a 07 dd 43 d9 15 fc bd a9 a1 3b b2 a3 73 8f 4a -db 1c 3d b2 6a b6 90 48 80 5a 80 c8 16 05 c9 6d -68 f8 41 80 2f 5a bb 02 05 7b 61 1f e2 f3 94 71 -62 65 e5 45 25 2c 23 0c e4 74 af f0 bb d4 ff 1f -38 08 49 60 36 a4 94 8c a7 a1 10 ff 26 c6 38 c5 -0f 32 15 b2 8a 09 f2 3a f6 f8 4c dc 89 78 98 d0 -fd 22 3b 13 48 1f e8 92 b1 a5 8b a2 e4 b3 68 5b - -# PKCS#1 v1.5 Signature Example 4.16 - -# ----------------- - -# Message to be signed: -af 8f 08 87 c2 19 00 4d 2a bd 89 4e a9 25 59 ee -31 98 af 3a 73 4f e9 b9 63 8c 26 3a 72 8a d9 5a -5a e8 ce 3e b1 58 39 f3 aa 78 52 bb 39 07 06 e7 -76 0e 43 - -# Signature: -32 7e c9 d0 be 7a ab 7b c9 59 d4 02 27 e1 d0 04 -81 fc 04 01 1f e0 8f d5 44 9b 90 c0 f0 54 e0 d6 -59 b9 26 cc 81 29 21 c2 0a 56 3c 4a be 4f 82 5d -6b 5e ef 57 b3 e2 d6 5d 20 a8 01 3a 50 dd 5c 93 -23 8c f0 49 f2 ff 0c 7e be b8 e8 ca f7 2e 46 e7 -cf 8a 0c 3f 49 25 61 6b 1b c1 82 6f fc b0 bd a6 -0b be be df d4 c6 0f 27 88 d1 66 6f b8 45 11 85 -36 46 c2 dd 46 68 51 fa c8 5b e0 ed 5a ce 5f e2 - -# PKCS#1 v1.5 Signature Example 4.17 - -# ----------------- - -# Message to be signed: -38 df 86 55 7f 37 5d 09 cc d8 bd 15 d8 cc f6 1f -5d 78 ca 5c 7f 5c de 78 2e 6b f5 d0 05 70 56 d4 -ba d9 8b 3d 2f 95 75 e8 24 ab 7a 33 ff 57 b0 ac -10 0a b0 d6 ea d7 aa 0b 50 f6 e4 d3 e5 ec 0b 96 -6b 81 57 79 a9 1b 3a 8b d0 49 bf 2a eb 92 01 42 -77 22 22 c9 ca 0c 32 8c 65 9e 0a 64 37 43 3c ce -b7 3c 14 9a ec 4a 74 80 d5 bb c4 29 20 d7 ca 23 -5d b6 74 - -# Signature: -30 46 05 5c 2b 8e f7 fa 92 c8 a9 e3 95 98 5b d4 -60 fb 6b 47 98 65 53 94 4d 21 04 51 19 f7 e7 61 -7e 03 fe 80 87 0a c6 aa bf 63 b0 96 ca d5 cc e7 -f5 06 95 3a 7f 69 3f e1 37 ad fb 97 cd 45 81 28 -ae 95 c4 7c a9 48 da cf 24 03 6a de aa 48 f2 9a -46 9f b5 13 19 1e 05 ac f7 9e 67 a7 93 a3 af 5e -4f 9c 6d 0d 01 fd d0 e0 cd 42 96 ad 3d a2 ca 89 -a5 0e ed cd 9f 7b 87 7d 2a e1 d5 8d 98 dc d7 8f - -# PKCS#1 v1.5 Signature Example 4.18 - -# ----------------- - -# Message to be signed: -cb 34 ed d5 ab 65 40 41 b6 14 30 56 - -# Signature: -1d df 48 ba 53 51 be d0 79 5f 55 b3 06 aa 1c 6e -d8 36 f5 92 ba 93 cf 0c 46 b7 c2 73 70 9d 36 b8 -df f0 2a bd b1 a7 68 d1 c7 11 4a 86 a4 57 49 6d -a5 79 e4 d8 19 f7 2a 19 2e 29 8b e2 15 2f 7c f3 -9d 1e 30 82 7d 02 82 cc f3 4d c8 88 9f 1c 2f 59 -70 93 0d 97 35 04 2f 8a 5a 71 22 63 16 5d 6e 6c -50 35 e2 e4 a5 0e 86 3c 06 79 9e 3c 89 cc b5 cb -0e 70 b3 c9 9c 08 40 30 67 7a 7c 97 90 7a 17 24 - -# PKCS#1 v1.5 Signature Example 4.19 - -# ----------------- - -# Message to be signed: -5b 09 ec 88 b1 52 71 78 fa 04 32 63 f3 06 7d 9f -fe 97 30 32 a9 9f 4c b0 8a d2 c7 e0 a2 45 6c dd -57 a7 df 56 fe 60 53 52 7a 5a eb 67 d7 e5 52 06 -3c 1c a9 7b 1b ef fa 7b 39 e9 97 ca f2 78 78 ea -0f 62 cb eb c8 c2 1d f4 c8 89 a2 02 85 1e 94 90 -88 49 0c 24 9b 6e 9a cf 1d 80 63 f5 be 23 43 98 -9b f9 5c 4d a0 1a 2b e7 8b 4a b6 b3 78 01 5b c3 -79 57 f7 69 48 b5 e5 8e 44 0c 28 45 3d 40 d7 cf -d5 7e 7d 69 06 00 47 4a b5 e7 59 73 b1 ea 0c 5f -1e 45 d1 41 90 af e2 f4 eb 6d 3b df 71 f1 d2 f8 -bb 15 6a 1c 29 5d 04 aa eb 9d 68 9d ce 79 ed 62 -bc 44 3e e2 0c - -# Signature: -af 56 fc 32 97 39 e2 f7 75 4b 6c a2 51 64 a6 fa -58 f6 85 dd b7 42 b4 84 1d 73 a5 e2 c4 c4 53 43 -b7 4d fd 2f 0d 37 0e dd dd 36 a0 17 56 4a 8d 3a -d4 02 e2 a3 41 c9 72 06 2c 23 81 4a 00 13 1e 17 -b1 de c7 b4 c5 7c 5b f1 d4 fa 79 22 29 37 a4 dc -5c 00 23 5f 85 3d d2 3d c9 75 7f 33 5c 85 c2 07 -eb 07 4d 4b cc 24 3e da a7 83 1b 83 13 56 55 e2 -27 7e f2 9e 7a eb f3 4a 0f 7b 23 4a 28 65 0a 30 - -# PKCS#1 v1.5 Signature Example 4.20 - -# ----------------- - -# Message to be signed: -3c 33 0c 1e f7 18 c1 41 e4 7b 8f a8 59 be 4d 5b -96 - -# Signature: -0b 10 22 dc 38 e2 17 fd 3b 0e 7e f1 9d fc b4 b4 -56 36 62 40 98 30 95 f6 db 96 58 31 a7 0f 0f 8e -20 e2 dd 2a c2 31 cc 37 90 45 c2 73 65 e7 3a 53 -71 9b b6 f0 11 c3 f8 63 6b 64 99 4c a4 80 60 2f -b3 b4 f0 e2 27 4b 58 b3 63 e0 d3 08 b5 28 e1 58 -59 a9 1d cf 99 bf fe fb c8 05 22 41 b9 74 19 2e -63 62 18 f3 98 33 2d af e8 25 9c a5 f5 cc fa 54 -c9 b3 2b 27 35 af 07 24 f4 0b 5a 5d 61 21 a4 0d - -# ============================================= - -# Example 5: A 1024-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -c5 5f fb dd 6a 27 53 bc 02 af 20 ae 18 ea 0d af -23 0b b6 f8 79 5d 05 ef ec c8 15 ba ec e2 2b 38 -79 99 5f 6d 97 64 c1 df 8f 97 85 13 81 68 62 66 -b8 09 2f b6 01 18 98 a7 67 07 a4 d1 d5 bd a0 8d -24 6c 68 7a 8b ba fa 63 98 ac 9e a2 72 68 23 71 -4a 0c 39 34 ca 6e 5f 8c e3 39 87 b5 34 85 7e a9 -f8 5c c4 e1 9a 1d 21 83 e0 e4 c8 aa 55 cb 22 7b -0e 56 ce b2 b6 2b 30 ef c7 88 64 b2 f9 fb 92 49 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -c5 5f fb dd 6a 27 53 bc 02 af 20 ae 18 ea 0d af -23 0b b6 f8 79 5d 05 ef ec c8 15 ba ec e2 2b 38 -79 99 5f 6d 97 64 c1 df 8f 97 85 13 81 68 62 66 -b8 09 2f b6 01 18 98 a7 67 07 a4 d1 d5 bd a0 8d -24 6c 68 7a 8b ba fa 63 98 ac 9e a2 72 68 23 71 -4a 0c 39 34 ca 6e 5f 8c e3 39 87 b5 34 85 7e a9 -f8 5c c4 e1 9a 1d 21 83 e0 e4 c8 aa 55 cb 22 7b -0e 56 ce b2 b6 2b 30 ef c7 88 64 b2 f9 fb 92 49 - -# Public exponent: -01 00 01 - -# Exponent: -07 e3 fa 71 b3 98 b6 e4 41 47 37 0b 3e bb bc a8 -4f c2 5c 22 3a d7 d9 30 ea 4a 65 73 ff 9c 5b 15 -fa e6 82 c6 22 d3 48 5c e3 a4 af 11 44 8f 23 bf -ef 83 8e 80 bc 32 7b 87 d5 ba 9c 80 37 07 49 af -c8 c1 c0 17 54 6f c6 b6 59 31 b7 59 ca 43 41 fa -5e 5e 10 b2 40 87 e6 e2 c0 f4 db b7 90 69 52 99 -9c bd 90 d2 43 5f ca cc 9c 82 e4 8f df 24 e4 95 -cf f3 0a d4 19 e7 12 3e 3a c9 42 27 2e 1a ba b1 - -# Prime 1: -f7 f7 c0 02 f0 19 6e cd d7 1b a5 ad 74 2b 69 48 -27 d2 88 af 1b 1b b6 9c 5e d7 fb 22 9d ee 4b 7a -32 f2 f7 56 8a 6f ca f3 83 d8 9a da 9f c1 4a 7b -a5 d0 a4 a4 6c 2c 54 3e ec 17 75 49 c8 a0 48 b7 - -# Prime 2: -cb c4 b2 86 04 76 a2 d3 e8 a4 da 21 00 16 ca ce -d0 e3 67 cb 86 77 10 a4 b5 aa 2d f2 b8 e5 da f5 -fd c6 47 80 7d 4d 5e bb 6c 56 b9 76 3c cd ae 4d -ea 33 08 eb 0a c2 a8 95 01 cb 20 9d 26 39 fc ff - -# Prime exponent 1: -6c 76 27 bc a1 3c de a4 96 a4 77 31 89 90 bb 7a -5e 40 ce 9c 99 24 e4 19 3d bb 07 14 3b 34 52 3b -5f 31 bb 52 55 37 54 f4 73 05 39 a6 cb 1e 06 f0 -52 b5 12 6f 01 09 da c7 b3 09 07 ba 80 50 eb bd - -# Prime exponent 2: -40 92 74 80 43 a9 d4 af 92 69 ab 36 09 f1 2f 13 -9a de 75 65 e9 96 91 8f a0 81 ed 4d 9d 8a 39 78 -fa 92 7a d6 1c df 07 c6 1c ee de 96 b9 6d f4 6e -7c 68 ef ca 8b fe 63 ad d4 83 aa 32 22 8a fd c1 - -# Coefficient: -2a 61 94 ca 29 70 72 38 45 ff f3 8c a1 a9 a3 b5 -66 b4 24 5d e2 f9 01 34 b8 e6 ae c8 ae 07 f3 bb -7c 5e 5a e6 e1 83 34 85 e5 5d 8c a6 0c e1 64 2f -72 75 96 8e 66 12 38 35 52 11 c6 38 48 94 0f 3c - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 5.1 - -# ----------------- - -# Message to be signed: -ea e9 a4 0b ff 18 3f 41 14 73 2e 7b 3b a5 56 f4 -ce 28 8d aa 83 e3 ff 23 61 12 44 a7 a0 90 1f 11 -7d 86 c0 9c 33 a5 23 2b d3 20 fa 37 a2 38 a8 aa -62 dd 21 ab bf ac db 93 fa 1c 44 cc 55 ac 61 be -a2 4a 6a 34 cc 64 76 75 38 37 e1 6f ac d8 2e b4 -9e 1c 57 c9 58 fb bf f5 68 88 7c f8 2e eb e9 61 -e5 80 e0 64 db 9c be c3 b5 3d f1 f2 71 99 e4 9a -04 cb e5 9c 69 a2 65 cf ac 8c e4 f9 1c a9 5d 52 -b1 14 5c 8b 9f 44 40 b3 9c 18 50 94 be 18 48 74 -da 59 71 d7 d7 63 fe 07 ce 16 e5 7f 1e 50 d2 28 -65 04 b4 81 e2 c6 85 bc 9d 9c 01 49 3f d3 a6 d8 -bb 9b 2e 96 bf de b6 c9 29 14 ca - -# Signature: -44 ce b4 42 24 2b ae 08 59 94 ea d0 7b 70 95 43 -ea 23 95 a6 e8 d4 64 73 d7 0d f3 4a 95 55 aa 56 -7f 4d a1 38 e9 63 fe 92 86 a8 4f b7 c5 cf 82 00 -03 59 04 b5 0c 32 40 3c ae 51 7b fa 7f ca 8a 66 -fc fd 63 2a f7 47 c4 9c df b0 b9 ae e3 52 28 b7 -dc 4c 21 00 39 69 b0 a0 13 ed e1 29 2b 65 d1 0a -50 c9 02 63 fb 0b f4 f4 b8 37 66 41 b0 3e 1f af -b8 83 f0 38 f4 32 3d fe 5b ea c4 68 de ea 99 c3 - -# PKCS#1 v1.5 Signature Example 5.2 - -# ----------------- - -# Message to be signed: -9d e5 ca 46 74 85 61 a0 b9 28 b2 60 a9 5a 3e d9 -20 ad c8 d5 ee b9 27 1d c7 1b c1 4f 69 cc d6 31 -1d 18 6a 77 9f 5e b8 db 17 c6 90 d6 86 7c f3 36 -9b bf f1 5f ab b3 cd 2c fd d6 f7 d7 52 86 ff 2d -24 99 c5 ab b4 8e d5 4f d4 d8 49 a9 18 0e 11 0e -0a 53 a7 21 39 82 92 11 0f e8 be 26 - -# Signature: -44 5f f5 b6 87 9f 8c e7 53 95 01 6f 04 95 f1 31 -35 b1 79 e7 3a 3c ae b3 30 e3 cd a7 f3 1f 1d cb -a7 aa 82 e2 68 c9 35 e9 d7 01 4e 0b 0d ce a6 9c -7b 96 8a db 17 42 4a 64 df d1 e2 bc 57 07 f9 20 -fc 0c 83 cc 63 df c7 4b 96 3e 68 2b 46 a2 2a c2 -56 ac 6b e5 70 9c 07 cf cc 3d 4e ba 3a 1d 61 ab -15 f1 ba db 0a 49 fb 5c f0 9a 1f 74 81 a3 aa ea -f7 c2 57 54 03 77 ae a7 b5 44 17 a6 09 c7 6f 4c - -# PKCS#1 v1.5 Signature Example 5.3 - -# ----------------- - -# Message to be signed: -18 3b a1 a3 81 1d 62 5c a9 da 1b ba ae dc 76 19 -20 12 fc b6 74 bb 9e 77 d8 f3 77 08 d2 40 d3 49 -e0 57 97 41 6f eb 24 e3 01 8c 7a 20 5d 05 9d e8 -e0 ae 05 a8 d7 e0 9e af ee b9 f0 6d e5 d4 28 7a -bb ef 05 9b c5 86 b2 1c 82 d6 4a ec e8 d7 42 8a -fc d7 b2 2f c5 d1 68 bc 07 6b 61 5f 02 73 3c b6 -31 25 c8 f3 6d 5c b8 09 ce 80 65 08 23 98 b3 88 -5a 89 19 57 0c 47 8a 07 2f 59 66 15 d7 8f 01 36 -d1 1b e3 2b 3f e0 f4 fb e3 c7 da 5d 81 34 19 10 -17 7e 48 b1 bb ac 27 6c 12 ee 81 54 65 dc 67 d4 -53 24 f9 05 aa ca 48 38 d8 1f 74 31 46 3e 89 eb -8b 95 36 58 69 36 af b4 2c b4 7b d8 c3 18 29 d3 -1e c1 ee 29 f9 1c cc 6d f9 cd 1b 0b 9b 86 46 b6 -02 67 fd 7e ce ae 92 c0 ae 9e 0c e5 ff 6f 7e 0b -f7 56 a9 b8 ff c9 c6 16 - -# Signature: -ab 4b 78 96 4c 2a 35 d3 28 55 e0 ef ce d3 4b f8 -02 19 b5 8c 48 8e a3 75 b1 f3 27 16 6a 51 35 e5 -da 99 45 c2 87 29 7a 3d 93 2e 57 27 46 f0 22 74 -8b 85 58 5a 0a bd 91 86 f4 ac 35 ed c8 50 d2 fd -88 05 b9 e9 f5 1a 5a dc b9 5e 1a c1 72 9e 57 b8 -53 31 c1 ed 15 c3 d0 cf ae 33 f6 1c 11 9b 55 c9 -5e 34 4b 72 f2 b4 f8 e7 e8 fa c7 a3 3e 5b 8b 27 -6a 60 88 a7 fa bf 4f a1 72 35 7f b6 e3 f4 4a 94 - -# PKCS#1 v1.5 Signature Example 5.4 - -# ----------------- - -# Message to be signed: -87 07 dc db 49 d2 83 a2 3a 9b d6 ff 87 af f8 34 -f0 6f f7 f4 7b 0e 5f 57 ff 1a 0d 99 5b ba 9c dd -5e a0 1b 42 b2 5d 6f f1 7a 0d c1 06 05 cf 45 2a -ca 73 be 54 ed 5e 0c e2 15 66 af cc 17 91 2a be -18 df ac d1 bc 03 e3 e2 88 2a 4b b3 a4 f3 9e ea -f9 63 d7 c3 5e 6b a8 58 b1 37 6a 07 51 60 c6 cf -ae d5 e8 c5 2e 45 11 32 34 72 19 bd 88 89 3e eb -e3 56 59 a0 ee 4d 94 f9 4d 03 5b 7a 86 86 ff b4 -16 eb 99 fb 2a aa 81 23 6b 05 ac 46 45 92 5f 2c -2b c1 9e be 89 a6 3f 2f 45 1d 0b 13 b2 fe f0 61 -e5 30 a3 49 ba f3 b2 35 64 22 b0 95 fd 9f 19 29 -93 ab 99 c9 f9 22 6e f9 a7 b3 cf b3 65 82 08 59 -29 c8 76 b5 e9 d7 c6 ac ac 7b b0 27 52 34 e4 1e -d3 51 c8 38 b7 a3 1a - -# Signature: -17 53 98 8b 39 dc 74 5d f9 69 1a f9 ee 69 ca da -73 a9 87 7c ca 12 f6 d4 06 27 dc ed 76 22 14 7e -c9 01 a5 b4 63 e7 ef 9b 37 fb d6 92 78 5a a2 2a -46 5d f4 03 af 92 a2 9f 79 5d 40 a8 3f a9 64 b8 -5a 7e c0 5a 3c da e3 f8 bc 8a 61 a7 9d c8 42 e1 -d3 77 bc 5e 1d 46 ad aa a8 66 be 28 2c 6e 23 88 -17 36 44 f4 06 27 bc f8 a0 97 4a 4b e8 fc c4 8a -ee 7e 82 59 f8 68 a2 bd 78 9a 90 89 92 05 6e 55 - -# PKCS#1 v1.5 Signature Example 5.5 - -# ----------------- - -# Message to be signed: -ac 9f a3 f6 3d f0 68 e9 0d 69 2e cc fa 7d 87 96 -49 1a ca 79 5b 98 58 a4 55 18 62 32 29 af 28 b1 -3a 50 2d 8c b3 b9 50 92 50 58 82 eb 99 4d e7 46 -59 62 56 98 a0 05 04 17 94 0d 8b fa 28 a3 f9 3d -14 9f f8 b0 bb 39 26 f6 18 ef 91 96 6f 4d 39 bd -ba 5a 05 17 dd eb b1 6d 2b c4 b4 e3 3a 7d 61 9c -95 a3 3c f5 f5 72 db e0 7f ab 4a a6 7f b3 f3 9a -a2 98 1a 3d c0 ca ee 64 75 8e a8 98 eb ce 10 bf -3a a4 fc 84 49 e8 e0 cf 7e 88 b1 88 23 8c 20 68 -ef ac eb fe ef 40 73 a6 54 a5 8a 30 99 d0 36 ae -ee 2d 81 82 98 d4 ab 39 23 8e dc 45 9a 9f d3 57 -7e 9f 5b fc 03 68 aa 65 7a ee da 1e eb 8a e7 f5 -ac 1e af 3b 1c 95 81 7d de 2e c1 a5 9f cb 5e f2 -7c c3 4f b7 53 31 da 7a 49 96 92 5a c3 ad 17 bb -c3 da fe 6a 9c 64 4e 30 98 ef fe f8 fe a5 cc 0d -5f 0c 04 8e 10 88 - -# Signature: -11 e1 a8 28 f0 0a 98 7e 03 d6 2e 2a 53 6c 29 7d -da c0 22 e0 63 ee 0d e4 e4 69 5d ed 1f db 22 09 -00 a3 ac 3f 87 d1 be 75 f9 59 c2 8b 57 8a 43 b2 -56 64 3c df ff 92 15 95 fd fb ea f4 10 c2 ae d9 -e5 e4 7e 1d 15 1a e2 8c 76 99 ae e2 25 a6 45 bc -42 b3 be b5 2f 08 38 7e c5 54 d0 20 4d 28 3c 3b -cc bc ca 21 6e da d9 4e c6 4f 9c 20 b3 40 6a b7 -8a 6c 4a 4d ae 3f a6 17 a0 0c 6a b2 f8 e2 47 62 - -# PKCS#1 v1.5 Signature Example 5.6 - -# ----------------- - -# Message to be signed: -15 74 69 73 44 e9 86 85 cd 6e 65 e4 67 83 f0 b5 - -# Signature: -3b 7d 67 d1 3c d3 c0 fd 30 5a d4 04 d8 a3 dc de -4a 45 17 9c 2d 0b 87 11 5d 6d 06 0c 24 9b 87 f3 -9e 46 3b 76 4b 42 07 c4 8a 74 cf ce 25 31 e8 18 -3d 3d 01 25 85 ce 57 39 d1 62 c4 ea 22 32 44 02 -ea 2e 6e af b8 a5 73 fc ff 40 15 c9 5c 45 e4 ca -7a c5 1a e3 a0 6f 42 1e 60 6d 68 3f 5e 12 2b 55 -79 14 8a 9c 46 6a de b0 24 28 f4 89 6a 86 df 63 -be 58 7d dd 7a 6a 8d e7 17 6b e4 e7 ff 4a aa 99 - -# PKCS#1 v1.5 Signature Example 5.7 - -# ----------------- - -# Message to be signed: -be 46 be 8b dd 85 43 d3 70 bb b7 ac 83 9f 5e 64 -53 f3 0c d8 75 2a 4b 92 67 32 c5 9e 61 09 04 4b -e3 a0 75 6c 70 25 a2 32 80 df 2e d7 66 ba 39 ab -b2 0b 94 4c 06 5f e1 48 7d ea 31 b4 70 8a 68 9a -50 b2 8d 54 29 94 cb bb 3a 5b b9 46 0e e7 a9 c1 -53 8b da 75 1a 52 8b 76 70 f9 15 78 d6 67 3e 08 -ab cc df 5f 4d 8c 1e be cf ca c7 5c c4 2d bb b8 -cd e3 c1 b4 74 b5 56 b3 2b b8 48 fc 32 7b a6 e3 -cf 5f 77 b1 eb c0 4a 19 f3 c8 c3 9b 6b 84 77 84 -ea a3 25 a2 b6 f3 - -# Signature: -91 de 2f 90 32 47 b2 d1 3a be 93 dd d9 6d fa ef -1b 4d 17 2b 09 09 58 f0 cc 34 fa 92 83 5a d6 0c -44 b4 27 fe 03 1c ad bf 92 ff 1c d0 38 41 44 c9 -b5 f2 8f 64 5c 63 e8 d7 16 bc ec 2e 04 3b c3 96 -56 64 17 85 c2 6b a3 6b a2 a1 09 e3 64 4e bf d9 -62 d7 a3 16 91 6b 3f 13 66 20 13 cc 0f 37 ad 8f -9e 0d 9e c8 b4 c8 ad 5c 75 32 cf a0 44 ae dc 73 -78 77 94 c2 98 79 7c 8a 7e 14 49 ea d6 15 0d ed - -# PKCS#1 v1.5 Signature Example 5.8 - -# ----------------- - -# Message to be signed: -0b 7e 06 63 e7 15 ea 38 bc 93 0e c9 d8 e2 a0 29 -aa 1a 4c 95 e7 b2 00 47 ae 15 44 d5 b2 d8 47 6f -c8 05 53 9f b0 ef ab 7d 5f f1 2c 36 d7 6a 79 7b -75 c0 b5 3f a9 26 54 73 da b6 80 c2 55 d5 7e 99 -b6 d9 fe 08 cf 1a 57 34 91 e2 19 78 fa e9 53 9c -c0 58 84 63 3a 1d d5 cb 21 53 6f d4 2d dd 73 1c -a7 6c 34 57 81 3c e1 bb 59 c2 1d d3 1b f2 ae 3b -fd 7d 20 c6 c7 12 a9 dd 43 95 1f 1b 19 8d ea f7 -41 08 ea d2 29 26 d2 b0 19 1e 59 d5 f6 79 ad 97 -c7 1e dc 69 de 97 98 7e 54 3e 87 a9 6a 9f ee 77 -e3 f0 ea 95 7b d4 6a - -# Signature: -48 51 09 8a 85 e7 0d a3 33 92 a9 e9 0b 34 76 a4 -8b a0 e3 2c d6 ad 3d c1 dd 91 da 57 e8 8d fb c7 -b6 57 4b 08 e8 71 60 80 e1 5d f4 05 79 c5 70 5d -5b ef 58 4b 08 b2 63 db c4 f0 d1 59 56 ff 11 25 -c4 8f 89 59 1e bc 94 1d 9f e8 f9 a7 80 c8 2e a3 -2b f3 ef a1 6c ab be e5 80 fd 6b 95 74 08 0f 69 -07 fe af f8 1d 48 c4 9a 6d e2 24 84 80 f1 d8 52 -39 e9 a4 18 dd 53 10 de f7 76 e0 8f 50 9a 14 78 - -# PKCS#1 v1.5 Signature Example 5.9 - -# ----------------- - -# Message to be signed: -13 42 33 ba cf a1 6d c8 4d 8f a4 bd bb 47 93 d1 -da c0 7d 60 54 bd 08 39 61 da 68 67 9c a3 75 33 -4f 09 20 b9 df b8 a6 8e d7 7f 27 fd 92 19 28 13 -61 e0 9f a6 08 4f 96 e6 98 85 b4 7e a7 75 af 06 -77 2d 66 12 d4 d1 6f 4a 5c c4 cd 0d 1e b2 3b 7a -1f 09 56 4b 84 2e a0 7c bd de 60 45 3a 2a a4 ab -69 dd fe b5 b1 3e 9f 08 cd 07 2e 5b 71 ce d3 34 -ea 70 4c 74 9f f4 72 7e be 12 c0 29 0e 00 a8 41 -d7 4b 06 55 cf d8 06 5d 28 20 fd f8 fd c1 bd 45 -58 81 80 8b ff 0e c7 27 60 74 75 bf 0b 2b c8 93 -59 58 32 9b 77 8e fc e5 60 fc 26 c3 bb 6e 2d c9 -ae f1 8f 96 9f ba 64 74 5e d4 d8 5b 14 75 7b b8 -33 ea db 9c 5c b0 ea ed 08 d3 0b 95 15 00 5a 3e -88 09 1f c5 cd 2f 36 ad 95 5b 7c 6f 2b 19 bb a3 -74 fd - -# Signature: -3e 37 b4 2d be c1 29 db 81 c5 e2 a2 22 f3 1e 81 -b9 37 ff 02 24 95 18 18 37 30 37 8b 4c 09 2a a7 -f3 b2 34 59 61 1a 82 4f c5 27 54 42 1a 27 cc e9 -18 b6 2a a7 b4 46 38 a0 c0 82 79 80 52 a5 88 46 -68 82 51 06 90 ac 77 30 23 28 02 46 c8 90 ff 1f -62 27 04 9e 66 8b c9 d6 e4 89 b6 94 4a 34 e8 f9 -30 02 bb b0 0d 75 2b 57 7c e3 52 53 00 82 be cd -30 9b 0d ac cd 1d 68 d0 6e 1d f7 12 21 c6 22 69 - -# PKCS#1 v1.5 Signature Example 5.10 - -# ----------------- - -# Message to be signed: -35 da 3d 02 34 bd 74 fc d7 6e 8e 69 52 8f 65 1b -88 27 1c bf 16 28 69 38 c2 c4 a3 7d 41 1d e8 f6 -75 78 eb 8b 3d 20 a8 fd 7d cd e7 b6 56 fe 96 a6 -80 87 32 28 ed 0f 9a 62 0f 15 05 44 23 72 f9 b2 -b4 16 84 98 72 34 90 f8 11 f3 11 1f 5f 77 38 63 -47 b4 82 2e d9 d6 b5 53 83 92 21 5c b6 c4 86 5b -b7 b5 b7 e2 84 2e ea 0e 90 01 ca 0c df 5d 6b - -# Signature: -12 ff 2a b5 fc 83 d6 49 59 7c 47 bf f3 29 b7 f4 -61 db bb da 01 fb 6b ad 26 54 3e 4d bc d6 0c 5e -2c de bf b1 12 78 4a 96 4e 27 f2 a2 e7 fd 07 ec -39 0a ab 14 94 37 03 58 a7 5b 5e 1f a4 f1 ad 52 -02 e6 d5 46 c0 f3 15 e8 6f af f1 d2 5b 94 72 82 -da 32 ea b5 6c 22 f0 6c 8a 9d 32 ae f2 81 d6 f0 -aa 55 d7 ad 3b cd fd b2 09 a1 6e f4 5c c6 f9 68 -2e ae 96 3c bb 21 3a db 7f ad 1b ef 49 c0 70 4f - -# PKCS#1 v1.5 Signature Example 5.11 - -# ----------------- - -# Message to be signed: -75 fd b0 72 73 f7 54 d1 11 6f 99 7a f2 d1 1a 51 -2b 94 e9 e0 48 01 b3 fc 73 91 30 b7 47 b4 be 87 -44 d7 e7 f8 a2 97 a0 89 d9 05 0c 5f 54 f8 a3 9a -a3 f2 - -# Signature: -07 ff c1 b7 a1 0d da ba 96 05 f0 a3 d9 3c 8a 5e -4c 0b 77 58 61 39 05 07 31 d9 cc 9b 3c 83 d2 b7 -3f af 9a 4e 24 d1 c8 bb 0d 62 3d f1 0f c8 40 7d -15 14 48 fa 43 ee 65 81 e7 b0 ac 80 d1 4a df a4 -f6 d2 7a 76 67 50 b2 31 cb c1 c5 cf d6 2d f1 b9 -72 7d 8b 87 41 46 9f 68 e5 0a 9b 3b c7 ad e1 37 -db 06 74 76 03 74 28 56 d5 e7 dd b4 e1 6a 5b 49 -d7 36 5d b2 76 3b f5 fd ea 08 3d 81 fa c9 2d 87 - -# PKCS#1 v1.5 Signature Example 5.12 - -# ----------------- - -# Message to be signed: -96 c9 fa ce fb a2 ed 33 ed 8b 7b 3d 8b 6d f2 8f -2f ab 0d cd d7 a3 cd 7a 7d ed a2 54 5e d4 47 0e -d2 5b 46 d2 16 6e eb b7 e1 47 10 17 83 b6 45 ba -c6 26 64 b8 72 70 09 f3 5d 1e a5 fd a5 e7 c2 8d -6a f6 fe 92 04 6c a7 24 ca b8 42 5a 52 a0 85 f9 -ac 90 83 d4 d6 90 bb dd df d0 a8 2d 94 8f 70 d6 -85 e2 6b b9 f5 27 40 8a bc 84 7b ff 12 02 de df -6d 2f ac 6c f3 68 2a 51 6b a7 2f 4f e9 7b 90 46 -6a f6 e5 43 12 31 65 b8 a6 83 ca ba 2f a2 3a 86 -ac 06 21 30 65 e1 ed 9b 4f 49 af 4f ff 6d 46 b3 -6d 13 3d 8d a2 dd 29 d5 5f 9f 32 2c 40 78 5d dc -21 c4 26 c5 e0 a6 7d 41 4f 5a b9 71 c4 46 0f f9 -b1 14 30 5a 8a e7 e7 b9 5c 73 03 4e 8e 93 c0 35 -29 dd 50 c9 4f 07 62 79 77 5a 5a 3a 80 c5 d2 48 -6a 2d 51 08 48 bd c9 b8 52 ac 1d 32 ce b7 c0 41 -a0 8f 2f 8e 62 - -# Signature: -46 d0 3f ae c4 a7 23 18 62 1e f4 d0 c1 bc a7 1a -2a ee a7 a8 1d f8 fe bb 8b a3 fb 35 40 d7 2d 15 -34 b9 82 69 16 e8 9f 27 d3 25 67 6c cf 5a 0a a1 -61 12 db 2d 93 03 e0 eb ce 4b 85 58 7c 55 ac a0 -68 50 de 84 de c2 13 d1 13 74 04 a5 de e6 ca 88 -d9 1a e2 8b 7b 53 6c 90 20 2b c7 72 6d a5 04 2a -85 08 d3 b1 3c fb aa dc ee 12 78 d3 5d 30 3a cf -ee 6e 07 41 90 49 11 a5 f1 88 10 ad d3 e7 b8 f6 - -# PKCS#1 v1.5 Signature Example 5.13 - -# ----------------- - -# Message to be signed: -c4 b4 c9 96 6e 56 f4 0a ff 47 08 13 1c d3 71 44 -21 34 3e de 70 c4 d4 6d b6 ef be 1b 19 a9 e3 c2 -e5 81 06 00 8a 98 38 59 cf 94 2a 31 97 74 69 5a -0c 98 a9 63 e2 fe 9d 93 79 bc - -# Signature: -b1 6b 10 f2 bd 7e a0 f7 6a 9e d2 ff cf 3e c1 0e -dc b8 24 60 fe 55 82 a7 76 4c 0c 50 56 ec fb 09 -72 06 48 d5 f1 9b 3d ea f2 ac c9 86 46 0e 71 14 -26 15 83 a5 f4 a9 90 e9 22 fe b5 b4 78 97 34 fd -cc e1 5d dc 87 ca c3 f6 c7 c9 e9 e2 19 23 15 f0 -84 1f 43 ea 86 de a9 a9 38 05 08 b0 6c 9c a5 e9 -d4 a6 51 d0 12 16 62 7c 46 6b f0 d6 ae 74 4b f3 -0f d7 91 a8 21 03 39 f5 05 7f f8 5c eb 84 f1 96 - -# PKCS#1 v1.5 Signature Example 5.14 - -# ----------------- - -# Message to be signed: -b8 38 a5 d8 88 95 0f 1b 8e 4d 94 7b ba 51 af f9 -bb 60 b8 3d 09 ed 9d 97 96 7a 76 95 5e d1 dd f0 -48 15 20 bc f4 f0 8b eb bf 89 9c c7 c3 ef 0c 04 -d5 00 1b 1e 2e 84 5f af c5 83 30 0c 98 ac a7 a0 -3e 90 a4 34 de 77 fe f7 20 da 36 63 f2 19 98 20 -8a 94 f8 94 76 7d 3e d8 13 96 b7 ef b2 86 e0 ff -7d b6 ea 8f db 4e 72 83 46 00 fe 5f 7f 15 0a 01 -b1 d4 a0 8b 5e c9 ee 1f bc 10 01 d1 2d 52 36 db -f0 72 7e 7e a3 60 78 f3 eb ac 50 46 b7 65 b4 e2 -3c dc ef d1 15 d6 2a 50 34 4d bb d7 42 8d 48 ff -c9 4b 11 e2 1c - -# Signature: -b1 56 81 ee f2 96 a6 6b 9f cd 66 30 f8 9c 55 82 -6a 38 9e 0c 2d 3d 47 6a 0f 8a 1e 08 cb ca cc 66 -02 c7 14 43 8f 32 f3 4e 02 c3 6e 5c 0f 16 8a b0 -28 91 7e 90 50 fb c8 50 f0 cf 65 d5 ee db 3b 54 -be 54 95 bb f0 fa ee b3 2b be 5a 8f 87 bb ac dd -25 85 fb 90 7b 13 18 5b 02 61 56 63 d2 01 1e f2 -3d 0a b0 4d ad 1f fa 67 9b 53 15 2c 9c 42 b8 46 -39 68 4e ae af 64 4e 4f c6 ff 2e c7 d4 7b a5 ac - -# PKCS#1 v1.5 Signature Example 5.15 - -# ----------------- - -# Message to be signed: -9f d5 39 c8 ad 86 49 24 ee c1 d6 55 c0 7d 1f 28 -27 0c db 32 6b 57 2c 46 67 ec a6 48 8c 03 36 57 -ff 29 25 4b 91 f3 21 6e 1c ac 97 97 53 f2 23 b1 -79 ea 5f 9e fc 23 6d 40 1d 1b 9a 3c 20 eb 2a fc -9b fc fd 07 92 ac c5 b0 0c 98 28 a6 45 - -# Signature: -38 bf df d3 27 2e 48 cf ee 68 ce b9 13 04 eb 91 -ee 25 e4 83 40 1f 30 fe 12 d5 e4 35 18 e4 b7 71 -14 a1 2c 8c 79 92 ae e7 d2 e7 74 ff f9 1d 8f d1 -cb 7c 6a 2a df 79 b7 c8 ab 93 e8 37 4d b7 4c 26 -90 9c 65 9a 97 c7 6a 22 2d f4 fc 8c 7e f5 19 90 -80 ea ae 2d 03 1c a7 51 c5 01 32 89 db 4e ad 77 -b2 8b 76 a4 c4 96 ad 0e b4 22 fc a8 8f c6 84 e4 -2a ea 88 fd 33 c2 56 75 1b a0 66 83 4e 77 a1 e2 - -# PKCS#1 v1.5 Signature Example 5.16 - -# ----------------- - -# Message to be signed: -1d e8 07 40 9d 0a 61 b0 32 2d fe d4 99 e8 c3 32 -41 ec 89 cd 7d 9f c5 - -# Signature: -8b 66 64 f8 69 d7 55 c5 d3 e6 df 99 22 e2 27 c1 -10 91 8a 6f bd 88 c1 a2 e1 28 95 23 ad bb d8 aa -43 1d 07 86 85 3a b5 96 dd 5b 00 12 43 b5 4a 2c -b1 0c 31 66 bf 00 23 38 fc a2 03 45 ae de 1b 22 -ea 1f a3 d2 41 c8 6c 76 bf c0 2f 4f ce ae 12 c8 -a9 d7 e4 4a d6 17 16 65 e8 8f 12 85 22 dd 53 5a -9d 65 00 8f 6a 73 2d 40 af 20 4e 22 0f 1f ac d9 -42 e0 9d 15 09 9f dc 51 b3 a1 42 6c b2 dd 32 93 - -# PKCS#1 v1.5 Signature Example 5.17 - -# ----------------- - -# Message to be signed: -4b 2b cb 26 79 a1 4c 3c 4c 06 9e d0 89 a6 5a ba -29 f2 2b 61 78 c0 - -# Signature: -1c 47 82 8e a5 3f b6 43 6e 95 96 b0 ce 47 d9 f3 -8b 5d eb 0b 19 7c 1b c4 74 e2 e8 22 65 70 cc 1b -72 f2 39 31 2a e7 c3 c6 38 2e 1d 8c da 7d 4f 12 -fe ba d7 0a fa e5 ac bf 24 28 ab c0 44 21 bb 4e -1e 59 90 11 1b 9a c8 3c 62 43 5c 21 aa 25 fd 9b -49 07 58 54 11 d2 53 ba 9b 87 78 f6 24 05 3d 46 -fe 95 d7 e2 2c a3 93 81 c7 79 2e ff 46 43 8f bc -16 5e d7 62 9c 2f c1 ce f1 b3 4d 77 76 8a 20 55 - -# PKCS#1 v1.5 Signature Example 5.18 - -# ----------------- - -# Message to be signed: -ef 46 ae 51 e0 15 8c d0 ef 9c 78 d7 1e 00 15 67 -d6 6a e3 c5 e9 a6 4f 24 57 15 c7 c2 ad 8e ea 0f -9d 32 00 23 07 2f db 0f b8 6a 45 21 7f d7 12 cc -80 e5 b9 41 47 c4 5f e0 0b 69 2c cd a1 10 25 98 -41 b2 c7 e5 c3 dc ff 59 56 f2 a5 96 cd a6 8e b7 -7f 4c 85 90 d7 36 b8 fd 60 66 77 3e f6 f9 5a 38 -cd 38 4e 94 83 a8 9d c2 b6 c2 e8 74 5c 95 c1 2f -a6 72 a1 be cf b6 3e ac 9b 55 3e da 8d 29 37 54 -ec 39 47 ea c0 22 8d e2 63 14 b5 9b 66 99 4c c6 -0e 83 60 e7 5d 38 76 29 8f 8f 8a 7d 14 1d a0 64 -e5 ca 02 6a 97 3e 28 f2 54 73 8c ee 66 9c 72 1b -03 4c b5 f8 e2 44 da dd 7c d1 e1 59 d4 51 d4 bf -65 80 f3 e6 9c dc 02 71 38 2e 8d c1 4b c7 33 af -38 99 2c 1c d8 82 c7 b1 50 d2 3a 06 7b 9b cf 3c -cd ab 6b 0f ba 13 2b 4c 14 47 c8 7c 39 3f - -# Signature: -8c 1d e1 5a b8 6c bf 5b d9 31 7c e2 b8 fc 82 f5 -72 2d b6 96 1c 9f 55 51 40 f7 8e bd a2 4e 3f 51 -fd 73 01 c1 e4 fe 12 b6 95 7c 30 14 4f a1 e1 27 -27 46 03 dc 02 05 11 30 b2 53 85 fc 86 46 ee 96 -a7 45 50 d2 d6 3f 85 81 85 bb 98 46 52 a3 43 1d -53 3d a6 01 46 22 a6 4e 06 91 66 2a 4f 7c 9d 58 -31 9b a3 f8 5f 19 18 24 75 e1 50 9b bf 21 3a f0 -10 10 b4 b9 f8 2e 64 75 11 fc 97 c6 b7 c9 7e 8d - -# PKCS#1 v1.5 Signature Example 5.19 - -# ----------------- - -# Message to be signed: -f8 7b b1 2d aa ad 62 c8 64 ac 3d 44 4d 51 4e ec -6e 59 b6 7c d0 82 0d fc bd f8 51 ea 73 89 1f 58 -a8 be 6e 84 3e e8 77 3e 4d c1 c7 d7 42 da 82 ff -16 c1 01 1b 99 56 6b 9f 3f d1 7d 68 d5 ac 99 ce -f5 a3 a0 f7 53 18 76 9d c0 13 bb 05 5b e1 30 56 -df 49 a8 39 b8 39 52 51 39 9b 27 a0 bb 31 c5 54 -ae df 3d 9c 74 82 b6 62 0c 5d 7c 69 14 a5 64 db -04 a0 00 04 56 99 ee 1e 50 88 a5 b6 8d 81 4e fe -9d 13 0d c3 4e 2b d9 78 51 13 9c 73 46 07 65 b1 -f2 65 46 86 fe de 9c 9b 3e 92 40 9d b2 d4 2a 32 -ba 9e 20 bc ae b2 c4 f9 ff 9b 0e 83 4b 74 92 a2 -b1 d8 c6 5c 8b a4 98 34 2a e7 d1 d9 fe 74 05 c2 - -# Signature: -20 7a 34 8c df 68 4a a8 e1 a4 af 7b 7c 25 27 07 -ce 6f 1f 9d b2 29 1f 2a 95 a0 71 5d 9c 7f c5 1a -a2 30 11 0b 5b 51 8a 9c 8f 95 8d d2 0c 75 24 d5 -b6 51 06 d7 42 1b a9 fc fb 78 91 78 41 2c 36 40 -f5 40 b8 1b b3 18 97 d2 64 5e c7 9d 8e 59 75 04 -8e 45 22 61 a1 c2 00 9c fe ee 07 15 a0 1b ee fd -75 e7 04 b2 a6 f0 f0 ae 7e a3 6c 53 cf e3 6f 57 -f0 34 e3 85 44 8f ca ab 08 dc ff 47 7d 36 ff 15 - -# PKCS#1 v1.5 Signature Example 5.20 - -# ----------------- - -# Message to be signed: -4c 4b - -# Signature: -1c b6 88 12 83 dc d1 86 3b a7 9d fb 22 35 1b c9 -a8 e0 35 8b 2f 8a 1d e3 f9 06 5d 8c a8 59 31 4a -e1 12 13 a2 cc 87 b2 f6 32 ef a6 7d 21 03 f3 82 -00 b9 19 3e b8 d4 99 82 09 9a fc 74 42 8f 4b 41 -31 6f 48 78 b3 f6 00 bc 2f b3 04 58 cc 9c 2a 03 -4a 06 8e 98 d5 7a e7 9c e3 e2 fc 84 b6 a7 45 f0 -37 a5 de a2 b9 da 4e 8d b4 ad a6 9f b8 2d 20 a4 -1b b8 43 07 93 ee f9 2a 4f d6 18 6d 17 96 63 cb - -# ============================================= - -# Example 6: A 1024-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -d6 31 14 57 e1 ca f1 22 44 36 69 79 83 c8 6d d3 -38 20 58 62 d2 a1 05 ba f7 10 34 28 fd 83 53 a1 -9b 7b a4 22 8f 78 b4 7f 79 07 35 70 34 c5 2d 85 -97 da 2b 5d 13 dc 53 5b 83 6c 74 13 0a 36 48 91 -8d 4a 7a 83 99 0c 2e 28 81 6a ec 0f ca 01 d1 05 -c6 c6 52 ec 57 33 d0 1f 00 58 b2 df 5a e6 73 33 -40 5a 3a 5b 12 20 a2 6a c3 d1 42 f2 b4 d8 37 eb -73 86 a4 0a 74 cc 3d 1e 4f bc 64 fd 7d a6 3c 41 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -d6 31 14 57 e1 ca f1 22 44 36 69 79 83 c8 6d d3 -38 20 58 62 d2 a1 05 ba f7 10 34 28 fd 83 53 a1 -9b 7b a4 22 8f 78 b4 7f 79 07 35 70 34 c5 2d 85 -97 da 2b 5d 13 dc 53 5b 83 6c 74 13 0a 36 48 91 -8d 4a 7a 83 99 0c 2e 28 81 6a ec 0f ca 01 d1 05 -c6 c6 52 ec 57 33 d0 1f 00 58 b2 df 5a e6 73 33 -40 5a 3a 5b 12 20 a2 6a c3 d1 42 f2 b4 d8 37 eb -73 86 a4 0a 74 cc 3d 1e 4f bc 64 fd 7d a6 3c 41 - -# Public exponent: -01 00 01 - -# Exponent: -5e a6 11 77 44 2f 89 9e ba c5 d0 96 01 c5 ef c2 -06 6b 44 a3 66 b0 00 f8 3d 74 cb 97 d1 6e d6 e5 -f2 ef 0f f8 b5 ad 81 15 53 45 fc 37 39 1a 68 a3 -40 17 08 52 79 14 43 41 8d 31 bf 99 2a 4a 12 86 -6f e9 ff cc de bb bb a6 37 ee 88 7b 71 6c aa 92 -e2 49 ce d6 57 ee d7 1f 5c cd d9 16 3f 32 69 52 -5d 78 9f 4b 33 c4 8a 95 76 44 36 ec 32 5e 86 89 -69 1c 27 2d 90 bd 88 88 98 51 37 2f b8 dc b9 - -# Prime 1: -f3 d4 b8 51 ad 7a c7 78 be cd dd ae 71 b6 13 f6 -59 7c 70 75 c4 d2 8d db ae 1e fa cf 03 59 71 ab -63 ee 90 db bd fb da 43 25 a1 5f bf 84 5e ea 54 -bb cd 05 57 4b 1c d6 01 dc ad ba 12 06 28 05 b9 - -# Prime 2: -e0 e1 ad 57 d6 8f 30 13 28 8c 14 83 e8 c5 b1 2e -fe b6 ec 14 5a e4 18 8e 1b 3b 39 04 87 90 0a d2 -c3 25 d2 32 80 6a 62 17 34 2a 65 75 95 14 f2 26 -8f ca 72 c4 c5 bb a0 32 81 89 dc fa e2 06 ae c9 - -# Prime exponent 1: -3b b6 d2 d5 1d f9 3d b4 b2 75 d4 5e 8e 76 9a f8 -ef fd 6b c5 4b c8 8c f9 49 f1 48 57 3e 68 bf 4f -cc 0f 76 e6 79 e6 9e 13 67 b9 d7 ab 1d 8d e9 31 -8b 34 b0 a4 2a 3f 0b a2 35 1b 4e c0 6f 45 89 f1 - -# Prime exponent 2: -71 f4 aa 5c 8a 93 80 af 14 aa f7 72 68 b0 55 3b -15 44 28 99 9f fd 5a 1c 18 dc 87 e6 2d b3 e6 68 -2b 0f ad 56 7e 10 6a a8 8b 7c b8 71 3f 1c a0 20 -be 58 be 93 cc 07 6a 04 6d f4 28 90 d1 9c c5 51 - -# Coefficient: -23 1a b8 dd 9a 56 99 d7 97 59 11 ef 0e f8 7c 28 -dd b9 2e 24 6e c3 4c 5f ac 33 83 22 dd ec 89 8d -56 68 67 45 3d e6 d7 8a 45 c3 16 b1 45 a2 86 18 -94 0e 1a cd 11 58 c3 af 92 fa ab fd c3 97 84 32 - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 6.1 - -# ----------------- - -# Message to be signed: -8f 75 0e 65 95 1b 5d e7 58 14 b0 b7 66 30 dc 9f -1c 62 53 a0 59 0e ac b5 51 2a 8a 4e 1a 8b e8 52 -5d 36 94 1f a9 d0 92 f6 bb 44 22 aa 8c 0a d6 42 -3e a2 8c 10 ca a6 e9 54 b7 95 69 d4 4c 86 0f 1c -65 81 eb 17 a7 54 3e 7b f7 fe - -# Signature: -b1 8b 5e c8 8d 4e 24 c9 14 b6 65 ff 9a 2c 75 f4 -e9 19 37 df 8c 19 95 59 43 e4 51 ad df 34 84 e4 -97 97 8d 26 da 23 1a f1 4d 9c 29 27 ed 21 0a fb -f9 de e3 32 67 aa 45 68 46 49 e8 6f b2 25 a0 53 -b5 45 52 90 c3 20 e3 f6 40 62 3c 75 ca 42 37 21 -f2 80 b8 87 44 24 97 f3 2a 90 d7 8f 64 44 04 77 -ad 09 27 c7 ba 01 c4 4d a9 d5 c2 83 a4 38 be 0d -c5 80 a0 05 28 fc 65 e2 04 d4 2a 2d 4e 29 13 c1 - -# PKCS#1 v1.5 Signature Example 6.2 - -# ----------------- - -# Message to be signed: -bd bf 3b 36 40 73 fe 04 8f ba e5 5e 3c de 66 8e -84 f7 53 ab fc 71 0b 8c db 7b 6c 0c f8 2d d5 b6 -74 d2 1e 2b 3e 36 b1 b0 36 0d f8 bf 7e 62 27 c9 -2e 15 f3 d7 84 - -# Signature: -66 ac f0 43 bc 6a ae 81 a4 d5 2b 4e 8c 40 12 8b -25 c6 d1 0a 8c 69 8c 83 ae d7 1e 8f 35 83 89 8b -e8 f4 c9 be a4 b6 31 90 e2 15 26 ca f8 3a b1 4a -4f 8b eb e8 13 a5 ab eb 95 95 67 bb 2f 06 c5 f1 -1e 46 4b 5c df 7b 2a 13 2d 42 6d db ec f5 85 90 -0a 0d 80 92 ca 52 b6 dc 0a bc 35 f1 40 94 69 89 -46 e1 cd 0e cd 6b d4 1e 2c 6f 96 3e e8 9c 82 19 -3e cc 5f d4 76 30 d3 4a d1 6c a2 47 9e af 06 2d - -# PKCS#1 v1.5 Signature Example 6.3 - -# ----------------- - -# Message to be signed: -3c 5c 74 bc 8f ae 80 7a e5 8b d2 13 e6 27 2a a3 -85 79 31 57 5c 2a a2 be 4b ca e4 d7 9a e0 87 b6 -b8 6f 91 5d f8 c0 96 c1 22 ed fb dc 79 7f 9d 70 -b9 76 13 97 fc e3 d3 e0 b8 a6 f2 56 db c6 60 5b -a9 48 d5 fb e6 f5 24 5c 02 95 ce 5d d7 3b f7 43 -65 17 f7 c4 22 2d 2c fd 85 42 e7 a1 00 cf 05 13 -04 a1 ab 6f e0 05 da 07 7b 62 87 8f d0 b7 41 e6 -27 1e 0d 34 6b 20 72 3b 7e 00 b3 b8 19 4e 1a 46 -0c 6b f2 56 00 76 82 90 c1 dc aa 2f 41 b9 41 a6 -4f d9 02 14 d5 16 6d 78 aa bb af 7e 41 d2 4f f6 -36 c9 76 2f d8 92 19 9d 2c fd 9d ed a5 00 51 e0 -01 b9 fd 3e 5e 22 27 ae cb 15 c1 b3 13 71 b3 5a -78 b3 b8 b7 63 63 76 f1 34 56 2b 4e 52 f4 51 b7 -41 a1 9a c9 32 56 9f f3 04 1f af 12 27 9f 90 - -# Signature: -5e 89 7f 87 9b a4 6f 67 11 2c d7 c7 c6 fb 27 37 -ad 79 3a 87 28 79 05 2a 88 45 7a f5 e9 d5 99 59 -a8 48 13 4a 68 24 de 3a 67 4f 72 a9 06 87 9e 95 -be 0e d8 7e a9 f9 74 a7 a0 7b a9 ad be c2 fb fa -02 94 37 8b 14 e7 35 f5 5f 40 3c a0 53 08 4f 51 -d3 d3 42 d8 af 9c 64 b4 d1 54 ad 9a a3 c6 bc aa -ce 1f 1b be 62 ee b5 d0 e6 c4 c0 30 93 c2 af 0f -07 88 8b 8b be fa 79 40 03 23 13 3f 77 6a 32 13 - -# PKCS#1 v1.5 Signature Example 6.4 - -# ----------------- - -# Message to be signed: -42 56 46 65 0d 6b 37 9e 16 e1 5b f3 85 3d dc 9d -44 4f 44 53 5c 49 3a 37 03 b0 01 63 af 34 76 df -37 2a 5b 28 f3 34 c0 86 03 13 e8 13 6d e6 08 29 -1b 33 78 38 1b 9e 21 eb ef 24 82 5d 12 - -# Signature: -a6 a0 cb 02 48 1a f2 48 ab ae 89 cd f4 16 1f 67 -76 d4 71 08 f1 8e c6 e8 43 7c 22 4a 14 f4 52 ad -a1 36 52 0f 0f e0 10 a7 34 5a f1 97 1a 02 e4 bc -f8 c9 8b 26 c5 b8 c6 00 3d e4 d2 b4 07 2d 8d ef -1e 19 23 d9 cc e0 a6 75 14 1d 37 87 3e 59 48 ea -6c 8a 78 0e d2 a5 ec c2 ba 9a 81 20 6c 7e cc c8 -0e ac 02 6d b7 d7 60 22 3a a2 38 7a 18 2e 98 d6 -6f 1e 23 df ea f3 51 5c ee 4f a1 ab d4 64 b7 68 - -# PKCS#1 v1.5 Signature Example 6.5 - -# ----------------- - -# Message to be signed: -f4 7d 87 bf d4 88 af 5b 24 db 34 ad 0c 13 1e fc -a1 0c dd 1a ae ff be 6e 36 48 47 22 ed 68 09 b1 -d5 7a 18 3b a0 3d 5e 40 5d 12 56 b2 50 5e cb 84 -db 35 df a9 4d e8 5d c2 a1 58 8b 6e 83 12 4c f8 -6c 5e 91 66 86 0d 4d d4 71 70 43 2b 08 ae 6a 6e -30 87 10 86 fa - -# Signature: -6c 00 8f f0 e1 28 fc ec 26 5f 37 9e b0 83 db 50 -62 4a 27 98 f9 33 67 c6 d1 6e 5d 95 a9 89 f4 f1 -ee d0 cc 4c d8 61 c6 a5 24 f2 b9 fa 30 e8 86 f1 -47 77 41 d7 ea 8a 60 df 14 0a ec f3 a6 cc f0 04 -3d ab 92 cb e7 29 53 cb 1c 18 41 e0 59 18 ec ed -5b 0f 69 4a f9 a9 8e c7 f4 e2 28 6d 23 3d fd 35 -13 2a 0b 58 4b f0 e0 dc bf 05 11 9c e2 e3 a4 d8 -13 cf 02 8f ec 48 c3 4a 18 81 eb b5 31 ca 48 9b - -# PKCS#1 v1.5 Signature Example 6.6 - -# ----------------- - -# Message to be signed: -03 18 78 d5 88 ee - -# Signature: -cc 15 4e 1a f7 13 f2 f9 5e 16 f4 11 17 5d 98 36 -ad 6d 8b bd c8 f9 8c f0 5c fa 00 58 23 5d 1f dd -e0 40 82 76 4c 29 dc dc c5 9e be 26 57 8b f9 e8 -ad 6a 5a a8 6b 9d 62 91 4b 4c f6 96 a8 ec 2d a8 -79 f8 fa 42 31 46 31 32 ea d7 bb 3b e7 50 ae 0c -56 28 a3 96 b7 0a df a2 7b 40 34 23 b1 00 18 f9 -d2 4f ea 33 70 30 14 7f bf aa 15 d4 75 32 c9 25 -7c 2c 7f 54 1b 5b 97 4d 15 dd 1e 3f d2 e2 0a 69 - -# PKCS#1 v1.5 Signature Example 6.7 - -# ----------------- - -# Message to be signed: -27 26 38 52 ea a9 60 bf 76 71 87 6f c7 90 0f 89 -8e a8 2e b2 b0 fc 41 85 65 fd ae 62 f7 d9 ec 4c -e2 21 7b 97 99 0d d2 72 db 15 7f 99 f6 3c 0d cb -b9 fb ac db d4 c4 da db 6d f6 77 56 35 8c a4 40 -11 5d 3e 5b 3d eb 1b a1 bd 90 ca 12 86 fd 10 0c -af 9b e4 85 a4 4a 38 45 00 57 18 10 4b bd fc 5e -78 1a 9e 37 d6 7a ff e5 56 dc a1 0f 8e fa 39 f9 -cb 63 92 a7 2e 3f 28 25 81 1a 2c 05 af 84 af 9b -e7 f3 71 db d4 10 6d 9f - -# Signature: -94 79 8d 17 94 78 bf e0 6d 96 a3 4a c9 9b c9 d5 -de 35 dc 46 97 ac 3f 70 e9 b3 4c 95 e2 2b 1c 30 -d1 42 6b e3 50 8e 62 2c 1a 18 ab 3c 46 72 fe 3d -e3 40 eb 51 0f b9 87 b5 3a e9 3a 59 af 6b 00 bb -ae e0 e8 27 08 e6 c6 ae 82 c8 45 53 24 01 78 36 -db 17 66 0d 06 9d 80 27 1e 1e a9 98 11 63 b1 4b -66 87 6d fd 12 8f 09 cd 2e 3d 6a 36 b7 3c 3b 40 -ad 8e 13 24 84 90 29 c8 b8 e3 c8 89 4e bf a1 94 - -# PKCS#1 v1.5 Signature Example 6.8 - -# ----------------- - -# Message to be signed: -a4 fb 21 03 d0 be 29 0e 99 60 16 a4 39 46 2e 6b -bd b0 72 4d 86 cd 51 85 91 33 ca 3d 39 da b7 7d -a2 06 9d 82 83 58 96 38 7c cf 3d f5 cd d7 a5 79 -3f 22 3f 3d 92 3e a4 63 51 35 31 ad a6 67 ab fe -f7 53 98 c7 a4 bc 6e fa dd 4e de ef 35 ab 8f 54 -01 e0 da f7 c2 fc a1 cd bb ee d3 bc dd 09 33 ff -3e e4 c5 e2 88 ab df 21 9e 36 a3 ee 6f 21 08 41 -a0 3c 9e 3e 4d ac 18 12 24 82 ef 85 f4 9f da cd -c5 02 d2 79 f1 57 7b e7 7a 4e 00 b7 c7 f1 7b a5 -da 6b 28 c0 1a 07 a8 63 df b2 1c 15 6d a3 20 01 -f5 3d 7e a3 fc b8 c9 55 4f 07 54 59 a6 7c c3 c4 -e6 9a 6a 37 17 87 87 46 3c eb ca ed a6 49 0a 8f -80 b3 92 de f9 f2 2a 4f - -# Signature: -72 66 70 c9 51 0b 58 35 4c 8a f3 2b 41 db 8f 69 -21 07 c0 c8 76 e5 52 73 a8 20 a0 c3 0d 39 24 46 -0f a5 bc 33 df e1 9d 72 e5 63 49 28 2a 80 fb 12 -a8 fa 9e a4 a5 da 69 c5 82 d7 c6 41 22 a8 a7 91 -b3 21 2c 39 e0 28 26 5b 84 54 df 71 5b a3 0b 00 -3d 12 91 69 cf 12 51 1c 0d 3e 7a ae ce f3 79 2c -f1 85 64 4c f8 0e 44 81 47 b1 a7 96 1a f3 84 41 -7d 18 2c 6f 85 52 46 da d5 b8 93 d9 a7 68 0e bc - -# PKCS#1 v1.5 Signature Example 6.9 - -# ----------------- - -# Message to be signed: -e5 50 6e 04 b1 91 84 10 76 85 87 25 a9 fd d8 f9 -74 5f 24 2e 99 49 4a 42 3f 80 36 74 74 27 1d ce -95 a9 9a 2f 71 13 4f 39 fb 3f 2e 47 c6 a0 b2 fb -6f 61 5b 0d ee 6d f3 3b 28 f8 b0 d4 1e 92 d1 42 -b1 46 e8 cd e9 b1 1d 6e c1 d3 7d 71 fd 82 b7 19 -ce 1a dd b8 21 ca 4c af bd 2a a4 f1 e6 11 a2 59 -e5 f0 5b 53 1f a1 1e 3b 67 1b 7a 5b 10 b4 c8 15 -6c 25 b0 a5 9e c6 e1 58 f6 d3 46 d8 48 04 fc f9 -2a 72 76 8f 4e bc 93 5e ee 5c fe c7 f6 e6 e8 3c -be 15 8a 13 27 5e 84 18 3a 94 d7 24 b0 e9 66 96 - -# Signature: -34 22 0e da fd 4a c8 84 b9 d0 0f bb fb 71 a4 a6 -c4 d4 b7 1c 19 84 22 05 07 99 d0 c0 fd 54 e9 09 -a4 ca d2 29 8f aa b3 34 7a 0a f0 d2 7d 53 01 a8 -86 00 9c f5 c6 f1 25 df c1 13 1a ce 38 8b b2 14 -c2 84 44 20 c0 23 db c8 b4 a9 66 11 b3 b3 93 ac -c3 83 94 90 fc 4e e2 d3 69 b8 c3 c8 76 57 22 83 -ef 34 d7 0c 64 03 ef 9e 2e 87 a2 76 b2 35 72 ed -82 e2 40 22 67 c2 73 7f 75 bb 4a 27 d3 cf 16 d2 - -# PKCS#1 v1.5 Signature Example 6.10 - -# ----------------- - -# Message to be signed: -8f c9 cf a7 21 df a0 9b a0 72 9e f9 18 9e 54 27 -b3 e7 38 c5 ae 38 a2 65 7f 7c 7e 31 4a 49 ca eb -a0 fc 9d 45 40 f5 f8 d6 c0 47 53 60 0e f6 b9 c3 -39 65 40 f8 6c 11 75 b6 0b f4 0e 3d 8c 84 51 35 -5e 13 74 f4 30 43 c0 c6 aa 41 d3 79 6b d8 27 9b -3c 30 62 b3 74 99 6b 7e ae dd 4d b0 ae e8 c9 4b -93 b1 71 fc 41 1d 4d fc 37 28 d0 23 15 58 cf c8 -fa 45 f9 51 b3 5c 9d 46 12 18 a6 50 c7 02 ce a9 -3b b3 fa 14 36 ed 44 5c 95 24 9d c2 20 54 71 01 -b9 a9 3e b0 14 cd 84 3f f3 9c e4 c9 6f 82 a3 9f -86 3a 4c 2e 1f a9 - -# Signature: -a2 6e 7d bd 5d fe 08 c7 2b d8 0d 5e 26 68 d5 d7 -2a bb 1a 0c 04 20 ff 0e a8 6a 9c 76 08 c4 70 e1 -c3 f7 2e bf 44 5d 12 18 71 81 41 55 58 dd 03 eb -e4 07 aa 06 b5 16 47 ba fe 0c 85 f3 d3 b8 dc e9 -0c eb f0 a0 ee cb ac 12 28 e7 85 82 0c 4f 90 9d -2e f3 92 f0 31 17 56 1e c3 8e b0 d8 8b 02 32 72 -a4 28 63 51 62 0f 21 04 3c ca f7 50 36 84 00 29 -57 ef 79 bc ff 9d 1c 20 1c 42 e0 96 0b d9 69 79 - -# PKCS#1 v1.5 Signature Example 6.11 - -# ----------------- - -# Message to be signed: -96 1f e3 4a 21 2c b0 e6 f6 dc de cf 1a 4c b7 b2 -14 39 0a 77 f4 4d 3a 3b 3e e2 b1 2f 1f 0e e3 14 -2e 9e af 70 89 55 ec 83 7e a1 d0 d2 95 4e 6c e9 -50 f3 4c 87 30 54 8f 2e 09 5d 5d bb 93 8b 19 0b -73 8b ff 81 71 93 02 b6 79 8b 76 8b 0b bd d2 e2 -b9 67 2d 89 14 05 c7 71 a7 79 02 fd 54 27 42 5a -f0 4e 21 b9 1c 5f 39 37 20 41 e4 94 d9 be 62 de -ce 31 bd 8a 26 2f 6d db 84 9f 06 8a a9 9f 7d 62 -62 e1 84 ab 9c b1 62 24 47 d6 2f f6 71 09 20 30 -70 71 c2 72 be 0b b3 7f 0e ef 64 5f 99 ea b5 1b -0b cb bb 64 87 d8 d2 b4 9f 3f 23 e0 aa 91 8c 89 -ac 85 56 53 e1 cc c0 05 91 58 0e 0c e1 e3 87 79 -c0 4b e7 df 1c 66 63 ac d9 93 7e 47 2b 3e b6 d4 -b7 0a 08 0d e8 e0 35 48 f5 12 45 be 7c e0 b8 6d -ee c1 76 e0 0e 54 bd 63 bd 5b b0 2f c9 54 - -# Signature: -98 ac 47 73 59 15 9e 93 e1 b3 36 ee 05 60 6d 42 -b7 e1 25 0d 12 95 60 c0 d0 95 f8 f8 ea 3c 04 74 -32 a9 9c 1e c4 bc 88 7d 7f 07 f6 1d f1 6f 0c 09 -f7 15 b7 05 38 8b b8 a6 11 87 34 6e 8d 7b 07 ea -b2 fc 05 db 89 e0 30 09 44 ae 37 73 e4 4c b9 2c -5c f0 f4 fb e0 1a 05 ad 79 bf aa 24 7f 83 ed 1e -da 48 ba af d1 e1 80 07 8c a8 d3 21 d5 0b 42 57 -87 f0 12 43 a4 93 37 4e 84 f5 cd 56 b7 53 d7 ac - -# PKCS#1 v1.5 Signature Example 6.12 - -# ----------------- - -# Message to be signed: -96 ff 0a 5e ca c9 51 16 bd 73 43 79 5a f8 3c 87 -ed 9f 83 45 d0 3f 6f 32 2f 29 54 93 f4 0b 19 ba -8f fe 2c 89 8c 7b 20 66 21 f7 2e 02 c7 f0 f0 0f -9f 1c 52 3d 73 d3 35 a2 6c ed dc 73 98 b7 ca 20 -09 ca cb b1 82 83 b7 6b 28 15 d1 e9 01 00 09 6e -95 b8 85 30 f1 c4 8c 39 61 c4 35 bc e0 28 9f f6 -2e 21 bf 4d 3e c8 99 c8 7e 14 c8 ea d7 92 2e 79 -5e 3e 6f 41 80 c0 89 9e a0 - -# Signature: -7c 7b 01 57 f6 a5 09 09 51 09 63 28 2f 00 11 1e -ea 70 19 37 54 e4 27 a0 2b 34 6f eb 68 2f 4c 71 -87 bb 38 1d 31 d2 3b 94 76 88 43 24 5a ad 53 61 -fc a4 2d 8b 28 4c 8d 92 e6 fb 99 2f a7 71 2f a5 -a9 31 55 df 02 0d 30 0a 3b f8 98 86 66 8c f3 7b -d1 3b 55 0a db 2d 2a 86 c6 9d aa ac dc 50 30 dc -84 34 3c 8b 49 34 f0 3c dc 0e ef 0f 6c 1e a7 ec -09 62 00 79 03 b4 48 21 7d e9 3b 75 07 54 9b 2e - -# PKCS#1 v1.5 Signature Example 6.13 - -# ----------------- - -# Message to be signed: -32 a1 2e 0c 67 0e d2 15 ae 54 49 a0 91 7a e9 5e -23 db 80 3a d2 8a 18 42 ed fa 90 bc 40 5d d8 9a -1b 46 8a ce bd 08 fe 9c 69 3d 8f b1 05 e8 22 2e -b5 7f 79 e4 b2 27 00 e0 7f 27 6d 4a ec c7 a1 5f -b7 47 33 06 56 27 b8 79 b0 16 ee d4 ab 4a 1c - -# Signature: -85 b9 0e b8 26 51 4a 0e c0 fc 1b dc 34 86 a8 dc -8b 0f 26 3e fe 57 cf 17 50 a4 2a 6b 5b 99 72 64 -fa 61 78 64 83 7e 63 9f 45 d9 20 58 41 cd c1 34 -ab ea cf 6e e0 ec da 09 b9 8d 76 9f 51 f3 94 7a -33 58 7f f0 c8 dd 01 b7 f6 b2 4a 2f bf 29 c9 ff -f7 37 ee e5 6a da 2c eb 74 6b 02 5d 95 65 22 d9 -20 d1 2d dd 13 db a0 8b 20 e1 ee e1 3a 8b 25 80 -e5 92 c3 4e 39 33 37 66 11 5a 23 b9 d0 0e 2a 42 - -# PKCS#1 v1.5 Signature Example 6.14 - -# ----------------- - -# Message to be signed: -bb da 73 cb e2 bf f7 ff 53 62 eb e9 32 c0 a0 dd -68 ac 84 ee 99 8f bf 59 a2 a9 26 55 20 32 31 63 -b3 0d 9e 70 08 b9 4b 0c 0e bc 5f 6c 4c 97 3c 13 -ff 15 3d 31 69 0c 3c 95 ab 23 1f 0c 9e c9 98 fb -fc ad c2 8b 2d 7f 06 50 7e 17 d2 1e 82 da - -# Signature: -26 f9 52 b6 57 fd b9 a1 1d c8 43 79 0c 9d 2a 6a -51 c9 76 10 1e fb 82 d0 53 60 67 62 ab a3 3a f6 -28 0b de 38 15 e0 87 4d 60 78 75 38 42 e5 b1 c9 -0c f7 99 12 20 fc fa 62 28 49 43 69 0c 30 1e 9f -c6 e4 79 af 68 b9 69 47 85 be 40 d4 69 86 a6 2a -12 1a a9 ad 0d e9 69 52 1f 1c b8 e7 c4 bd 70 c7 -c8 cd 7a 9d 13 54 e7 d0 aa 0d 85 d6 d7 aa 00 e4 -64 90 26 d6 f0 70 f8 b3 c2 7c 98 55 6b ea a4 c0 - -# PKCS#1 v1.5 Signature Example 6.15 - -# ----------------- - -# Message to be signed: -2c 32 5d da f6 52 6a 1e a3 51 8e e5 e5 40 7f 03 -90 e0 eb aa a5 f4 72 a1 e9 ab 46 f7 46 d7 1b a2 -e2 17 fa a8 17 99 bf 35 8f 95 e9 83 08 27 0b 18 -a0 01 99 29 a2 88 d0 c9 56 e0 bf 17 c5 19 8c eb -2c d9 fe 40 d7 02 a4 4e 56 45 ec a5 b4 39 ab ca -7b 2c 6f 95 ac c3 c2 c3 65 19 5c 79 5e 91 d6 3b -3c 09 33 24 4f f1 25 63 af 66 22 a4 0c 74 15 db -60 a7 8d ca 02 60 25 14 39 53 8d 38 aa 38 28 9d -92 88 86 ab 12 87 36 a6 a8 73 9c 14 55 c4 84 9f -2d 54 56 45 37 93 - -# Signature: -6d 1f 20 3d c3 ff a7 a3 34 d3 1b 9a 75 e0 12 58 -1b 8d 62 b2 bf 73 80 0b e5 1d 02 65 33 99 83 18 -c0 ca c9 2a 02 d4 6d 75 9b f8 0a 41 da a0 a6 a2 -9f 4f a0 bb 60 66 4c ac ad e2 4a 65 cb 47 65 11 -09 be ec 82 31 91 95 25 d1 47 32 68 74 55 78 db -9e 30 64 10 8a e4 6a 48 70 f1 80 66 78 9b 03 66 -a7 d0 ce 37 e0 30 b5 89 46 ec 8c 1a 14 11 54 db -0e 26 1b ef 8b af 2e 9f 65 fc d1 6b 7d 57 97 b6 - -# PKCS#1 v1.5 Signature Example 6.16 - -# ----------------- - -# Message to be signed: -29 85 e8 b5 50 81 2f b6 6c 18 f8 0e 6f 09 2a 94 -5d 09 15 83 86 1b 62 5d 1e - -# Signature: -2e 84 30 13 cd 5e 79 5e 21 66 c8 e9 1b 06 c3 13 -1d c3 a5 e1 21 36 d7 16 0f fd 11 bb ef cf 6a b6 -40 e0 5d 76 e0 c6 1e d3 06 f6 08 6b bb 56 7c a8 -7e 40 c6 92 4d 5c 84 a6 ce 28 a8 39 50 bd 4b 84 -e2 7f c5 06 9f d0 62 4d 50 ea c2 4a 94 11 b5 f7 -67 85 d9 db 5d a3 0f 42 56 95 b0 19 b8 4c db b8 -25 bd 46 e7 35 2e 08 f1 14 c8 7b 06 6f e4 3d 10 -56 a2 c6 10 ce a7 e3 d3 dc 98 bf 44 97 eb 4f 13 - -# PKCS#1 v1.5 Signature Example 6.17 - -# ----------------- - -# Message to be signed: -77 78 8e 83 8b 83 4e 8f 4d 04 5a a8 94 b9 0a bb -85 94 0c fc 58 d7 72 5e 7f 37 3d a5 54 71 37 c6 -0b ea 75 1e 01 42 bf 9a 6f 46 49 ae b5 46 ed 56 -0c c4 ea 15 62 d4 a5 fa 3e b1 b1 14 77 a3 05 1e -24 c6 06 b8 a7 1c 1a 77 4b dc f1 a5 31 0f ed 55 -59 23 73 0f a8 af 4c 15 80 0d 36 2b 37 ad f1 4f -7a fc e7 8e fa 6b d8 93 56 3e fe 0b 3b 82 8e bd -49 9f 12 a2 fe 33 2b fe 46 dc bb 31 4b bd bf 69 -08 7e 2a 66 5d f1 10 83 5d e5 5d 61 e5 c2 02 5f -d8 db - -# Signature: -8e 5f 33 53 c4 9c bb b2 ea 69 6a bb 57 40 ba e0 -15 ef fd 95 0d 56 07 13 76 05 a1 00 c4 a5 3f 1b -95 17 6c af 34 9f 4f d5 88 ae dd dc f5 06 0c cb -72 47 8c fb 09 85 62 f3 4d 8f 8e ba 44 6a 38 47 -56 5a 7b 89 55 ad 9e 0c 6e b6 70 99 e1 a4 6c 3e -b2 d4 9d 90 90 ae 5f 63 e8 a0 8b 6e 8f 21 f0 03 -e4 51 d2 50 ff c5 a7 90 d6 6a 0e 2e 3e 28 a6 33 -9f e9 1d 11 29 21 f5 5d 12 30 30 6f ad 5c 01 90 - -# PKCS#1 v1.5 Signature Example 6.18 - -# ----------------- - -# Message to be signed: -1d 59 9d 76 2c d5 4d f7 0f 1a 09 83 bc 3e a2 bb -ca 6f cb bd 16 26 03 ba 81 56 10 77 fd 92 84 92 -5c f1 f1 b0 8b ea 1e 70 bc 59 5d f0 b3 43 b8 3b -9c f3 d6 34 f9 5e 37 e8 d1 c5 85 fa b1 99 - -# Signature: -71 74 97 a4 e6 0d bf fa 19 6e ff 75 8e 90 1c e1 -fe 6e 2b c7 e1 d5 3a 3d cf 62 25 67 1a f1 46 c5 -de e2 00 a8 14 f4 89 8d 16 a9 b5 f5 08 dc 9f de -4d 64 07 0e 55 ae 3b 1f df 79 19 f4 2b 7c ff b7 -e9 28 c4 ca eb 55 2d c6 fd 08 18 34 b2 dc 2f ed -07 e7 e6 27 d3 4b 39 10 ca 71 3b f4 15 4e ff 99 -96 57 36 15 18 fc e5 a8 f6 42 dc 9a 18 a6 6e de -22 19 0f 60 aa f9 58 d6 24 6b 00 a0 32 c3 98 41 - -# PKCS#1 v1.5 Signature Example 6.19 - -# ----------------- - -# Message to be signed: -da 51 00 86 60 b6 3b 87 67 e6 5f 12 c6 30 8e c1 -8e d9 57 5a 42 6b c5 fb e6 60 10 ec 3f 01 17 5f -fa 57 41 ea cc dd b0 2f ce 7b 2e f7 78 44 40 d7 -2d 37 52 20 3f 53 4e 52 fc f6 26 a8 c5 96 51 3f -41 90 64 bb ba fd e7 f8 d6 5f 30 d7 ca 68 71 89 -70 de 71 fc 8c 0e ed 4d a0 0a 4e 1a b5 41 02 d9 -d1 65 bd 7c 54 af 5c 31 c1 5c 05 bc a5 5b 6f dd -19 10 86 a5 3e 52 96 f4 84 c3 47 d8 fb 94 5a 10 -c4 94 49 75 27 32 f6 2f 34 c3 25 15 58 86 51 13 -79 19 28 5a 2c 8e f7 b4 aa 0e 69 0b 0b 65 43 7f -f8 d5 6f c9 5d cb c3 e7 8d - -# Signature: -32 67 72 28 ff 08 c6 6f d0 3b b3 1f 0d fe 89 01 -53 b3 44 6b 57 eb 84 ef 39 56 20 8f 72 a0 7c 87 -67 e6 bf 09 f0 38 bc f7 f7 35 ee 24 a1 f6 40 a1 -89 8d 40 9e b5 3a bd b6 93 94 27 34 56 9a f7 1a -4c d9 9a 65 20 ba ca 5d 42 86 b1 99 cc 67 62 8e -2f ca d2 96 a3 0e ca 49 9e b8 80 50 7f 6a 37 44 -0b 61 c1 28 4c 40 3c 41 32 1b 99 05 3f 5d 69 72 -8d 5b 97 35 76 cf 04 74 83 33 d8 08 d5 e6 8a 8f - -# PKCS#1 v1.5 Signature Example 6.20 - -# ----------------- - -# Message to be signed: -8c d2 da d2 a5 d5 f9 fa a0 7e 24 a9 6e 86 f9 b0 -ac 8b 40 22 2a c9 fb 8a 8a 15 72 7c f2 f5 3e 68 -4a f4 ab dc 98 68 a7 25 3b 25 b0 96 bd 70 1f 46 -a9 43 - -# Signature: -8f 03 22 eb 2c 54 05 24 85 a6 45 49 ad ff 2a 36 -31 db 65 76 fc 0c af b5 51 69 7d c5 35 6f 02 e0 -93 cb 69 17 3a 7e 83 55 a0 da de bf a5 3c b2 90 -7f 00 2d b3 a3 e3 87 da 05 7b 7c 73 55 16 43 84 -3e f5 74 48 1f 80 74 15 17 7e 4b 34 c2 5b d5 5f -4c 02 fa 0a de a3 a9 58 04 65 f3 58 c0 05 96 b5 -cc 06 2d 58 92 30 3e 1a cc 11 3c 3b 4b c7 4d 42 -e8 58 02 90 78 48 2a 1b 23 4a 62 5b 04 28 44 06 - -# ============================================= - -# Example 7: A 1025-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -01 69 34 cd ff 48 50 b6 00 2c c0 f0 f4 01 0a 32 -c6 55 e5 cf 6e 7c 89 93 7f d7 55 ef 6a be 37 9d -ad de 70 cc 21 77 51 f1 4c ba 6d 90 fe 52 dc 0a -f5 8b 25 2f 26 bf 72 da 57 9f da f5 7d dd 6c d6 -02 18 79 94 9a 02 76 b4 43 3f f0 1e fc cc f3 5a -11 e7 c7 7b 38 c1 8c ca 94 ae 01 2d 0f 37 04 21 -49 1c 52 ad 15 ac 76 b1 2e cd 21 8f 52 e7 57 86 -6e 08 9d d8 ad bb 48 e9 ba 89 43 36 c5 75 c4 06 -55 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -01 69 34 cd ff 48 50 b6 00 2c c0 f0 f4 01 0a 32 -c6 55 e5 cf 6e 7c 89 93 7f d7 55 ef 6a be 37 9d -ad de 70 cc 21 77 51 f1 4c ba 6d 90 fe 52 dc 0a -f5 8b 25 2f 26 bf 72 da 57 9f da f5 7d dd 6c d6 -02 18 79 94 9a 02 76 b4 43 3f f0 1e fc cc f3 5a -11 e7 c7 7b 38 c1 8c ca 94 ae 01 2d 0f 37 04 21 -49 1c 52 ad 15 ac 76 b1 2e cd 21 8f 52 e7 57 86 -6e 08 9d d8 ad bb 48 e9 ba 89 43 36 c5 75 c4 06 -55 - -# Public exponent: -01 00 01 - -# Exponent: -0d 17 19 e5 bd 47 6d 87 c7 ec c3 1e b8 ab 42 5d -4f e4 c8 f5 c7 ae 23 0a 10 47 55 3f fb 53 9f d3 -85 5a f5 a4 3b 2d dd 4e 95 a2 b3 0d 40 7a a8 81 -59 bb ad 2a 87 3d 80 93 b4 8a 4b ce 20 ad 99 26 -25 3e d3 39 ac 3b 54 3f c7 42 96 95 33 8d b0 bc -1d c3 68 6c fd 13 9b b5 b2 87 36 bc 16 60 a9 53 -48 fc 91 c3 25 d0 3a 7f b2 16 d2 d9 cd 93 64 de -4e e7 d2 11 9c 3b 0f bb a8 a7 1f 0d 3f 5a b9 b9 - -# Prime 1: -01 58 c0 24 6c d1 69 fc 59 3b 25 8b bf 45 23 ab -2b 55 c4 60 73 3a 7f b4 69 10 90 77 b3 0e 4d 35 -f2 1a 35 b1 f4 1e 42 04 e8 1d 2e 4c 46 3c 24 11 -39 34 09 8b 45 2d ab 4b e1 59 97 20 ef 68 72 83 -3d - -# Prime 2: -01 0c 38 2d ea 5e 7d 79 29 8c 64 1f b2 e4 fa 09 -f2 4f 6a 7a 45 9a 88 2c 87 a8 03 49 5f 05 6e cc -3b 43 c5 37 73 1f 85 ef c8 fb 53 87 ad 67 31 a6 -43 53 32 15 de cc 38 7d 96 76 12 2c 17 0e 91 e0 -f9 - -# Prime exponent 1: -d5 78 dc d5 38 f2 fc dc 30 00 b6 c0 f0 49 fe e2 -ad 90 14 fd 24 fb 10 b6 82 18 42 d6 70 03 a5 64 -cd 8f f4 2a 2a 56 4c fd 81 9c 3a 84 bf 16 c2 47 -7e 8e 6e 5b 9e c4 d4 0e ad 50 24 87 ba 50 36 2d - -# Prime exponent 2: -88 88 dc 8e ae 94 ee a5 80 ca c2 fc 1c e5 4f 44 -e2 ba 50 0d b8 71 53 41 a6 fc 2d 50 4a 82 b1 42 -05 e8 91 a6 6f c8 8d 5c 60 db 8f 78 6c cc 70 57 -5b 35 66 be a8 74 a5 31 7f 5f 16 c4 91 ed 1e 79 - -# Coefficient: -17 b0 d6 23 36 19 1e 63 bc a1 59 93 4d 06 16 cb -89 97 40 9c bf ca 37 05 69 5b 14 fb 64 a0 81 c1 -c9 f5 86 19 3e 52 3a bd 0b eb 8d 72 0c fe 53 7d -fa 1e de c4 a6 64 37 d2 41 19 6b 7a 2c e5 56 c4 - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 7.1 - -# ----------------- - -# Message to be signed: -35 39 99 7a e7 09 fe 32 c1 03 6a 13 27 57 f2 a1 -66 7a 91 cc 83 be 73 3a ad a1 bd d2 17 92 4c 9a -2c 9f ed 1f ec f6 1d 1c f7 9d ae 9a 83 f8 ae 3f -4d 05 1b 34 fb b5 59 cb fd a4 92 f1 d8 3b 8b eb -a0 45 d4 ae 1c 8f ea 15 b7 57 7a 1b 8a 3f 55 ba -c1 72 7e dc a7 f8 f5 2c b4 ba 61 ca f1 fa 8f 8f -d9 aa c7 79 09 5c a8 4c 79 91 52 9f b8 06 99 d0 -d4 68 8d fd b1 42 ed 61 a9 5b 89 ce 33 06 bf 97 -80 e1 b9 1b 84 8c 8d 20 03 97 0e 52 70 2a 1f 61 -2e 2f 40 17 cf e0 a9 1d b9 e4 6d b9 dc - -# Signature: -00 08 0f 77 0a 2d 1f 6a bf 5f 22 1f 62 e1 66 ab -d7 9d 06 c7 b9 a8 78 d6 1b 80 fc 4d 5b a2 90 b2 -3a ba ab 51 8f 09 44 7e 45 ae e6 f3 bd 06 10 24 -44 36 a4 73 01 60 e6 a6 72 11 0c 01 ae b5 62 4b -71 8d c7 c0 86 1e 58 6b a8 b6 0a 29 d6 a5 75 5c -d2 cc 50 85 99 c6 e2 8d 73 55 b2 7e 40 b7 40 c6 -fb bb b1 a9 18 23 b1 c1 24 2b a6 93 d4 52 69 51 -47 db b2 3e a8 9c bf 11 eb 8b 07 ec 3a 02 7b 0f -17 - -# PKCS#1 v1.5 Signature Example 7.2 - -# ----------------- - -# Message to be signed: -31 80 08 87 3c 4c fe a7 12 5e a6 fd 52 15 df d9 -8d 5c 5e 73 32 3f 03 f2 15 c6 9c 8f 2b b1 98 3b -59 df a6 e9 9a dd 30 69 66 f3 11 0c 16 1c a2 26 -24 b8 80 70 26 5b 8f 3f 9d 5d f7 29 91 e7 9e 5b -18 9a a3 d9 cd 9b 20 47 cf a6 1d 01 23 4b 23 3d -36 ac 4b 96 ed 08 16 48 87 74 90 fa 4a 80 ec 4c -bb d9 d2 e0 06 2c 39 e1 85 3a 0c 38 34 4b a8 58 -bd 1d 99 5f 6c aa 28 bf 90 40 26 26 8a 99 72 11 -43 c8 6a 43 43 ba f8 9b 6d 55 07 64 25 1f b0 7d -16 7b 4c 4b 1b 70 f9 9e f5 fe 50 e6 2e 54 13 fc -ce 0f 99 59 c2 a3 78 c4 1d 6f 42 36 17 8b 14 b8 -91 9d b1 d0 - -# Signature: -00 6d 54 7d a4 ed cb 10 33 15 cb 8e 4b 66 9b ee -96 aa 21 56 23 5c a5 c3 e3 1b 24 a1 5a 13 92 e4 -94 04 7f ed cb 70 81 90 7c 56 17 a8 aa 18 d1 01 -b0 53 2a 36 32 45 19 23 c4 8a 75 b0 ec 21 76 cb -98 e5 ce 51 58 8b cf 86 8e 29 d5 d9 69 4f 00 ae -2c 92 4e 73 d2 e6 dd 14 4d 24 fa 45 d0 12 06 a3 -f5 d9 36 41 3c cb b7 4b 0e 2d 04 7d 82 b6 00 b8 -9d 51 59 4f ce 7d e6 bb d9 5b 97 fc fe c5 98 c4 -eb - -# PKCS#1 v1.5 Signature Example 7.3 - -# ----------------- - -# Message to be signed: -7f 83 b3 e0 54 c0 24 82 50 78 dd 9f 04 0e 1d 09 -05 82 00 c9 75 7b 76 fb 37 2b 8b 52 66 b9 dc 26 -9e c7 56 9d 00 - -# Signature: -01 34 ee 21 51 51 e5 32 50 f5 a0 01 6a cc e3 70 -1e 2a 58 dd aa d6 cc 36 9d f0 dc d9 34 6a 2b 53 -0f e3 71 5a fe ff 1e 9b cb 72 08 31 c1 25 58 97 -0a 9e 03 89 60 04 f2 87 ad b8 21 f3 17 cf 63 93 -00 ca e6 e9 09 e9 1e d2 a3 ea cb 99 52 a7 cc 54 -94 76 52 64 24 79 51 d2 8c 16 af 03 e2 4b 80 ee -32 b0 b6 2e df 10 d7 00 91 92 71 35 f0 5a 88 9f -2f 60 56 b9 5c dd ac e4 7c 69 f9 73 08 c0 df 2e -ba - -# PKCS#1 v1.5 Signature Example 7.4 - -# ----------------- - -# Message to be signed: -17 eb c1 50 07 bb 5e 4a f9 17 20 1c 3b a3 84 92 -65 89 c3 15 9a 89 d1 ab d4 c2 c9 86 fb a0 37 9e -8a f1 29 75 c5 d0 31 d1 bf c1 5c a9 17 36 f0 7b -17 66 d8 b8 a7 2d b1 0c 26 8c 98 fd 7a a1 1e 29 -99 f0 6d 86 12 7c c8 89 cf 15 0d cc 73 8f 6a b8 -ba ae 94 3c c6 06 dd 4d 9e ce 70 1a 4a 7b 10 1e -35 1d ee 20 b1 5e bc 55 25 6d b3 ce 46 a6 bd 50 -61 12 5b 62 b9 95 e9 70 d1 6f 7c 9a 8f c1 57 ff -68 ce c7 e6 0f 60 8f 66 26 dd 39 52 8b 24 09 aa -2f f9 32 fc 11 9b 2a 7a 81 77 2a 57 6b 3d 50 a0 -d2 87 a7 fa 2d b8 7d 2b 92 e1 c9 61 a7 0c aa 44 -d8 81 37 b9 50 e1 00 71 1a 98 54 ad fa fb 49 4d -34 e2 86 06 a2 7c - -# Signature: -01 05 da dc 99 c5 9b 5e 3a c5 54 b1 b5 e7 48 0e -5c 0a 62 c7 ab ae fd ac f4 42 6e cc fe 68 6b 8a -aa 1c a4 f5 1e ba bf fa 77 d9 98 03 e7 ee 8d 20 -d1 20 4a ad 8c 67 38 5d 07 44 c8 54 de 2f 99 7a -56 aa ae 04 ce cc 65 65 35 c1 6b b2 14 5d 18 01 -81 25 94 a8 01 3b 0e b5 4e 7b f6 5d 38 42 00 54 -ec 46 da c7 1a 12 52 08 b3 02 21 4a 7c 9b 3a 92 -ca 9b f7 37 39 c7 66 30 9a f8 03 ed de 7c 54 d2 -46 - -# PKCS#1 v1.5 Signature Example 7.5 - -# ----------------- - -# Message to be signed: -6a 52 ba 19 0e 44 ca 0f 10 70 02 10 48 76 2f 3e -79 ed 51 c9 4f 6d c1 a9 f1 ed 78 35 2e f3 79 aa -49 b3 a9 38 7e 3c a7 a1 96 f1 05 dc ab 18 50 6f -29 4a 69 - -# Signature: -00 0b 70 e6 01 c5 ec 58 68 4e 09 18 ba 7a 53 9e -9d 2d d2 9b 01 a3 f4 53 ca d4 a9 a4 0e 50 f5 db -df 72 c1 10 52 f2 0b e4 4a 5d 38 51 b0 1f d0 9d -9c 92 08 47 0f 0a 4a 95 03 5e 98 9e ed 7d 6b 06 -2e 13 f4 99 5b f0 93 0b 4a 3d 9b 8a 9e d7 5e 33 -88 6e 4b 19 4a b5 cc d6 b4 12 95 9c b4 f5 49 8b -d3 2f 66 85 46 be 2c 00 7a e8 de 5d 98 97 7b 94 -b1 7e 12 63 88 4b 54 e7 84 b3 8f c1 12 b8 cb dd -56 - -# PKCS#1 v1.5 Signature Example 7.6 - -# ----------------- - -# Message to be signed: -bb e0 b9 de 2b 5e 9d cd 31 67 42 94 3f 92 19 b2 -4f 66 a3 8f 9d e7 09 46 4f a5 49 5d 79 4a 63 7b -9e bc 06 77 62 da 7a 6e ef f0 98 fa 44 f3 cc 36 -f2 cc ef 67 fd 46 c5 9e 24 73 8c 81 0c 69 ed dc -d9 0c c7 d7 1a 4c 3e 69 3b ca a2 8a 53 3d 90 4b -41 ce d3 39 9b 4c 76 47 e5 ec 4b 3a d9 03 87 0f -5b 5f 8d 6a 8d 81 28 ae 23 81 ce c8 6c 4d 85 b7 -8a 45 1e 1e a9 7e 33 93 ff e9 97 e5 46 b0 9c 8c -f8 22 52 b3 3f 74 5f ee d4 13 32 06 51 8e 2b 88 -03 19 dc df 91 06 71 8a fb 01 6c 51 4b 38 05 32 -65 bc 98 79 10 0e 47 b0 3e ba 03 68 f0 9e 29 23 -ac 6f 40 a0 4b 75 05 4c d5 05 bb c8 96 5d 64 9a -1b ae 7b b6 64 3c b7 41 95 e9 1c 51 f4 18 3d b2 -d7 38 ce 60 35 50 d6 34 e6 dd 4f 27 f4 da ac 61 -56 cf a7 e2 46 8b 5d 6a eb 78 29 09 - -# Signature: -00 c2 e0 74 df bc d0 e7 3a c0 02 1a eb 99 33 10 -6b 20 1b 93 c1 7a 7b f9 33 56 d2 91 fb 4a ae b3 -d1 31 63 00 a8 de 7b 07 e3 d7 79 bc c2 99 e5 2b -6c b0 30 88 01 6d ae b8 41 38 2e b3 43 5f 2e 03 -eb f2 2d c0 86 fb 20 eb e5 3a c5 45 90 24 97 63 -a2 65 5a a7 eb 0e 7d 38 64 93 6b 34 00 6a 6c 4f -a0 2d 9c a1 04 ad ad a6 aa 01 b9 77 b6 de f2 75 -06 08 a7 8f 3e d8 3a d7 12 a7 a1 b0 fb de 7c 7c -8d - -# PKCS#1 v1.5 Signature Example 7.7 - -# ----------------- - -# Message to be signed: -83 a4 8b ff 88 6d 1d 68 f2 92 0a 0e cf f2 98 32 -1a 96 f5 ca dc df d8 be 16 b5 0d 34 d6 7d 94 cd -b1 a1 bf a0 ea e2 46 99 b6 63 c7 ba 3a 08 a3 90 -f7 22 58 84 85 67 94 d1 80 c5 46 ca c0 6e 41 18 - -# Signature: -01 2e 81 bd 38 63 50 65 bf 65 54 33 6b 00 d1 06 -18 33 05 53 e0 e8 08 78 aa d3 55 f0 0d 59 40 d8 -ba 45 01 c5 c4 9f 10 16 d5 f0 e6 a7 3a 4d 9f 87 -40 d2 cf c2 5e a2 48 df 3f 7b 1a e8 fc d2 6b d5 -62 e0 f6 eb 77 7f 46 d7 57 30 69 db 89 07 c0 21 -b6 45 d3 b2 40 58 47 51 99 a9 1b 55 72 d8 ac 87 -f8 3e e6 af 5c f9 e1 71 a8 58 f6 0d 2b 81 40 f5 -2d ae d6 84 42 22 8b 4f ff d8 de 40 07 8d 3d e8 -cb - -# PKCS#1 v1.5 Signature Example 7.8 - -# ----------------- - -# Message to be signed: -18 - -# Signature: -00 f2 c2 99 02 4a b7 bd 25 2c 69 46 be a1 0d c0 -53 97 38 98 bd 5f 0e 3c 94 60 e6 fe 09 d7 d1 91 -e7 1b f7 9d 43 6c aa 84 e9 86 be 3f c0 98 19 c0 -80 e5 6a 08 5c f4 24 41 4a f3 fc 70 07 cf 1a c3 -6f 1c f8 63 57 80 b5 56 8d 73 4a d6 d8 1a 2b a8 -eb 18 8b 29 46 69 d8 71 ca 40 e6 08 f0 ed 33 d5 -69 0c c6 15 70 c5 b8 47 eb db dc dc 4f a7 8f 42 -9e fc e1 3c 67 47 e5 4d 6f 26 1b 04 55 d6 dd 65 -c2 - -# PKCS#1 v1.5 Signature Example 7.9 - -# ----------------- - -# Message to be signed: -04 a6 e2 4b 93 c2 e5 f6 b4 bb e0 5f 5f b0 af a0 -42 d2 04 fe 33 78 d3 65 c2 f2 88 b6 a8 da d7 ef -e4 5d 15 3e ef 40 ca cc - -# Signature: -00 ec c8 95 fb d9 47 e2 df c4 7c 03 ba 2e 99 3d -1a 14 3a 7a 6a d6 3a 91 6e d5 44 83 ce 26 38 9f -89 d5 80 f4 ed bd d0 b3 7e 08 ca aa 5a 0c 1e 52 -6e 1e 9a 1a 8c 0d c9 cf 50 ed 77 de 26 76 46 0d -28 8d ce 56 5f 12 8a 26 6e a2 9b 4e cc 32 9a 94 -cc 25 23 96 dc 50 d5 c0 a1 3d 80 93 81 fa d8 8a -07 89 ad 4f 56 aa 77 e5 44 ec 25 70 af 99 18 b7 -f7 41 b4 86 ca 50 b3 38 4a d1 12 40 60 59 16 85 -a1 - -# PKCS#1 v1.5 Signature Example 7.10 - -# ----------------- - -# Message to be signed: -99 65 bd a5 5c bf 0e fe d8 d6 55 3b 40 27 f2 d8 -62 08 a6 e6 b4 89 c1 76 12 80 92 d6 29 e4 9d 16 -9f 16 fe 51 c4 c0 8a 64 94 b5 00 73 62 20 91 a3 -82 2e a5 7c 32 8b d9 b6 9d 24 65 a2 12 2a f1 78 -bf 6b 1b e3 07 ee 4c 31 47 9f fd 9f 4d 11 f3 3e -a2 0b 7a ec e8 12 ca b4 ee dd 46 99 31 51 d5 68 -ff 64 a1 67 04 a5 5d 95 0a b7 79 1a a2 3b 26 a0 -a8 af 88 0f 6f 80 56 bd d2 06 83 8b 44 c6 07 b6 -61 b4 f1 dc 36 21 06 5f de d3 db 6f 9e 3f 2d c8 -f4 00 ef e3 c2 af a6 c0 27 99 40 57 6b b0 5e 39 -80 4b d3 50 5f 4b d2 82 52 91 8b 28 e7 4e 05 8f -24 f2 7e f0 db 3d 0d cf 9e b2 9d 41 ff c1 10 07 -ce 86 b9 82 e8 9c 03 75 bd 99 76 a5 af 13 1a 61 -4d 28 08 ba 25 07 9d 97 7f 0b 23 97 96 ba 6b 1b -cd 5e 85 5d 96 - -# Signature: -01 56 62 e3 0e 79 0e 37 86 83 81 b4 f6 77 a2 ae -d6 b2 ac c5 64 49 17 31 82 49 10 ed 80 ad c4 77 -15 9c 88 61 8c c7 d0 be b0 49 b1 aa e7 4b 17 21 -e9 0b a7 f7 b0 ea 26 bf 33 ad 04 f8 6f f3 14 38 -97 bf 0d 4e b4 5e b7 de b5 44 11 ba 96 80 aa b1 -3a db fc f1 8a f4 6b 87 fc b1 46 1c 26 20 6a 95 -3b c3 cd bb 31 e2 96 ea 09 02 4b c5 c7 b6 2d e6 -c6 9c 14 bf cf eb 56 39 1a 9e f5 8c d8 05 eb 63 -1f - -# PKCS#1 v1.5 Signature Example 7.11 - -# ----------------- - -# Message to be signed: -71 c7 b1 8b 4a a8 ea 53 89 ad 78 49 23 28 65 be -2a 93 e3 47 a1 68 d2 5c 6c 6e a2 43 9c 1c c8 0b -b0 b7 22 3b e9 c8 93 71 22 84 5b b0 a3 9c 02 5c -43 75 9d ef e6 e4 e8 eb 3b aa b4 f1 eb dc a2 c8 -ad 12 a4 65 a3 0f 8a 65 25 b1 20 ef 6a ae c9 bd -db 45 cd 42 c0 15 0c 40 7b 04 8e df 65 19 94 92 -f2 07 ca 01 aa a5 54 3a f3 8e e9 8d 53 bd 10 d8 -ee bc 3b 64 97 7e 75 75 1d 74 50 dd b1 c0 e1 fc -24 da 17 18 81 1f be 9b 0a bf c3 ca 31 e6 99 5f -c7 34 90 73 e2 17 b3 7e 23 c5 f1 7a 8b 7a 3f 00 -48 6a 37 02 b9 51 0d 6f 05 1b 27 61 71 6e 32 c6 -2b b5 93 9b 2f b1 1a cb 1c 83 - -# Signature: -01 3a b6 3a b1 83 35 3a 23 5f b8 93 ab 4c 35 d6 -40 9c 21 84 9d cf cd a3 bf da 14 29 fe e7 42 a7 -d8 16 0f d3 c8 3b 38 53 a3 33 f9 51 53 9b b5 77 -1f 4d 0f e1 3a de b6 4e 40 30 b9 2e 8b 08 13 eb -52 b1 aa 33 bd 94 c5 b8 bc 1b bc cd f6 c1 df 0b -a6 70 71 7c 0c f6 fd 48 5b e2 fe 9e 16 81 3b e8 -cd d5 80 e6 10 86 67 5e 31 83 1c 92 4a 41 d4 67 -1a 95 d8 35 e3 fc a4 95 e8 86 58 d1 e5 70 e6 28 -c7 - -# PKCS#1 v1.5 Signature Example 7.12 - -# ----------------- - -# Message to be signed: -0b eb 19 b5 62 92 8c 27 1b b7 06 18 9e 43 cf a5 -7b e7 6b 2f 7a 83 e0 2a a2 cc b0 37 c0 f4 f7 f7 -31 62 d6 c2 6f 70 de 97 18 21 e7 b9 66 5c b9 31 -bb 0e ac 82 0b f8 59 98 4d b4 be ef ef 4a b8 8e -91 63 1c 0c d3 1d b7 f9 35 8a 5a a1 df f2 40 6b -45 f9 bd cb ef 20 d5 5c 28 2b ae 5c fb 61 06 02 -3b 56 33 c0 51 af 17 e7 29 bb 07 c9 af 6d d2 - -# Signature: -00 d6 3d a4 d5 d3 e2 28 4a 19 2a 6a 9d a3 f1 a7 -d3 fc c1 64 b9 fc 3d fd 74 52 b0 2f ed 6e f1 be -5a d2 a7 69 ec 9c 36 05 9b 71 91 1c cf 7a b7 1c -e3 09 87 ec 47 bb f5 5e 6d 46 30 d6 23 42 b3 15 -50 48 ee 0b f4 3d 24 fe 69 ab da c1 2f 79 4b 67 -98 bd 1a 7c b4 89 a6 4c e0 82 25 4c 3d 92 f4 75 -56 6b 56 40 0d 96 20 cd fd 63 fc 17 c1 93 c4 25 -d7 ed e9 41 f7 6d a1 e3 45 af 0e 2a 8b 88 44 c7 -40 - -# PKCS#1 v1.5 Signature Example 7.13 - -# ----------------- - -# Message to be signed: -02 87 ab e2 67 0a 45 f8 77 90 48 f5 - -# Signature: -00 42 f4 14 78 2d f6 5d 93 47 bf 1c ad 53 48 53 -74 6c c0 b8 53 c1 c5 26 f9 17 14 45 fc fa a4 99 -1a 70 f5 a8 44 5b cf 41 14 f0 7f c8 35 4c 84 a9 -3b 94 37 33 d3 93 7a 59 88 3b 89 6c e6 5f db 16 -5b 1e 30 55 37 4c e2 42 e1 26 8c 16 41 cc 44 3b -b9 e7 da 7f 71 f3 e7 f6 31 3f 23 9e 62 00 e7 9a -1b e3 ea d6 c3 6e 94 1f 24 46 0b aa 57 df 63 9e -57 da b3 ef f9 e7 7b 87 af 35 5b 83 da e7 7c be -06 - -# PKCS#1 v1.5 Signature Example 7.14 - -# ----------------- - -# Message to be signed: -3f 49 54 2c 0e 9f 50 93 2c 0d 45 3d c9 53 20 af -21 dd 2b d1 72 9c 29 f4 f0 8c 70 94 4c 2c c7 5d -e9 16 6b 4f d2 30 aa 93 70 2c 5f 2c 3d 9c 29 9a -35 91 02 57 00 33 54 0e b8 28 ca d7 5a 57 76 d2 -e8 cb 45 61 41 a6 fa 97 bc 4e 6e 62 d3 df 08 29 -82 a4 d9 8c 2d e4 41 e5 9e 93 12 - -# Signature: -01 5c 39 93 ce eb d8 db a4 5a 36 8d d4 05 af 8a -53 b9 3e 82 70 19 f9 94 e4 ed 78 2c 39 11 b9 b5 -80 d5 42 24 26 9b 79 97 f1 74 96 30 e5 2f 22 1f -af ab 96 41 c7 81 e7 04 4d 32 56 e2 e4 4e 14 37 -91 72 32 69 45 18 ba 9e 71 38 da 47 fe 53 43 29 -b8 c9 68 9e 27 85 c0 2b 60 3d d1 60 d3 73 36 a2 -b0 5b e0 47 82 65 9a c0 e9 67 1f e9 32 ea 80 91 -d6 13 18 b2 b2 01 bd a7 9a f6 c0 c4 44 69 38 e3 -f6 - -# PKCS#1 v1.5 Signature Example 7.15 - -# ----------------- - -# Message to be signed: -d0 db c9 6c f9 bf b1 e3 cd 6d e2 ea a0 8d 6d 79 -5b ed 81 87 ce b0 85 65 80 e4 b1 42 b9 ae 60 a0 -98 cd 42 98 4e 8d bf 1d 05 a0 c0 ab 83 51 54 8f -0a 13 64 6f 33 39 0b 2b b0 c8 64 b3 97 cf 13 37 -1f 8b 2f 67 5a 82 e4 6b f1 6c 4a fc 60 5e e3 e5 -a1 46 9c ac 51 fa 73 4b 44 65 d4 c1 3d 5b 2d d1 -2e ed a5 4e 7d 08 1c d9 e3 ea af 9e 57 db 42 20 -20 a0 b5 a5 ec 28 ca 43 97 7a 5d 67 6f fa b6 2f -78 10 71 93 59 41 59 ce bf bd 86 26 98 19 a0 f3 -41 a0 f4 12 84 dd 0a 73 ca 80 14 d2 e0 b8 01 79 -c6 38 0b 40 3a fb b1 1b 42 db 34 9b af d7 57 0f -be cb d1 4b d0 c2 1a d6 41 68 7a 6a c3 29 25 f7 -03 1a 24 a6 56 8a b9 e2 87 eb 80 75 41 10 df ba -68 8a 59 63 25 bc ac 4a 39 ce 8b 84 a4 - -# Signature: -00 8c c8 2d 64 55 9d e0 04 0f 55 41 19 9a ef f3 -99 9f e2 f0 86 f1 57 ff 51 f2 22 0d b3 45 51 9a -a1 14 b0 17 62 e7 0b c9 65 83 bb 38 b2 2b 3f 87 -be ab 32 e2 3a 3d eb db 8a 59 54 29 ff 12 fa d4 -95 d7 4e 22 0e 4f 7d ca 22 27 28 43 89 9e 81 04 -c6 9a 59 64 2f 6f a8 25 89 0f e8 13 2a 0f 79 94 -02 53 e5 00 7f b1 17 7a 5b f4 18 06 7e dd c8 d3 -2c 5e 59 35 bf 33 8f 1c 69 0e fc 80 11 dc 8c 84 -2e - -# PKCS#1 v1.5 Signature Example 7.16 - -# ----------------- - -# Message to be signed: -7d f0 23 6e 87 1a 71 c3 17 90 eb 5f 01 1c 91 1c -27 c6 03 73 b8 dc 9e bb 13 ac 85 ac cb 3b cb d3 -b4 74 f9 78 86 2d d8 42 02 ab 20 b3 34 73 94 25 -e1 b7 9e 0b b8 b4 bc 47 dc 71 53 f5 7a da 04 12 -44 7b f5 a5 e6 67 34 19 ba ad 65 3e 5f 5c 39 e2 -ef 7c fe 7e f4 77 8a b9 98 ca f9 7c e1 6c 58 33 -27 72 dd df 82 6f 1e ec 1a f3 db 80 e3 13 75 d6 -68 0a a2 54 b4 ab 6e f9 a3 ec 0e 04 03 e4 b5 83 -d3 71 dd d9 6d d5 7b 2c 61 a6 e4 01 25 1a 1a 63 -0d 1d dc dd 84 d9 0d 82 fa f5 a0 18 d2 a8 8e 26 -58 55 e9 d7 ca 36 c6 87 95 f0 b3 1b 59 1c d6 58 -7c 71 d0 60 a0 b3 f7 f3 ea ef 43 79 59 22 02 8b -c2 b6 ad 46 7c fc 2d 7f 65 9c 53 85 aa 70 ba 36 -72 cd de 4c fe 49 70 cc 79 04 60 1b 27 88 72 bf -51 32 1c 4a 97 2f - -# Signature: -01 45 5e 3b b2 9c bc a8 83 9b 9f 54 4d 51 47 2e -bc fd 25 c2 92 27 c4 65 5d 5f 7e bb d8 3c 48 e7 -64 3e 7b 59 4d 6f 7c d5 f6 bf 9a 40 b0 5c 4a 05 -cb ee 1f d6 59 d3 ce de 3e 7c ad 61 e6 fd f8 f0 -e4 fd ef 08 12 a8 53 90 8f 0f 99 ca 7e 38 8e bc -19 e8 74 76 5b 11 64 0f 1e e1 e9 8f 54 95 3d e6 -17 6f 15 82 03 70 17 c8 38 60 9a 57 a1 2a cb af -a6 a5 65 47 f5 7d 62 db e8 76 69 ed c0 fe 3b aa -da - -# PKCS#1 v1.5 Signature Example 7.17 - -# ----------------- - -# Message to be signed: -12 88 c0 3f 95 00 6e a3 2f 56 2d 40 d5 2a f9 fe -b3 2f 0f a0 6d b6 5b 58 8a 23 7b 34 e5 92 d5 5c -f9 79 f9 03 a6 42 ef 64 d2 ed 54 2a a8 c7 7d c1 -dd 76 2f 45 a5 93 03 ed 75 e5 41 ca 27 1e 2b 60 -ca 70 9e 44 fa 06 61 13 1e 8d 5d 41 63 fd 8d 39 -85 66 ce 26 de 87 30 e7 2f 9c ca 73 76 41 c2 44 -15 94 20 63 70 28 df 0a 18 07 9d 62 08 ea 8b 47 -11 a2 c7 50 f5 c0 a4 25 31 3d f8 d7 56 4b d2 43 -4d 31 15 23 d5 25 7e ed 80 6a c8 c9 c6 af 04 ac - -# Signature: -00 6b eb b9 6f 0e 28 2f 1b 4d 03 e6 c5 65 05 b9 -37 78 da 9f 49 36 50 e8 aa eb 65 cf e6 28 50 04 -2f 75 ab e6 e6 ea fe b9 a7 0a bd 21 eb 5d ba 73 -cb b8 7c 12 98 0a ac df 16 71 6b 19 98 c9 49 9c -e4 39 c5 4a ab 4d 19 ce 72 7b 78 75 a4 1a 3d 30 -81 4e 50 8d aa 26 eb 70 aa bb d0 dc ae cc 4d 4b -51 69 80 71 51 1e b3 1b 21 0e 66 dc bc 7f c0 b8 -c6 23 14 da ea 69 d4 7a e2 78 10 0d eb 51 40 92 -00 - -# PKCS#1 v1.5 Signature Example 7.18 - -# ----------------- - -# Message to be signed: -54 13 99 3c 26 58 bc 1d 98 85 - -# Signature: -00 bb eb 2c a0 bd 64 cb 89 60 37 5b 08 a9 48 0e -69 c0 9f d3 82 de a2 f9 40 89 b1 53 3a 08 51 fa -0c bd 0e ad ef ca 8c 70 b7 70 79 7a d0 89 e8 40 -d2 fe 1a 8f b8 54 9f 32 90 58 3b bb 81 d3 ee 2b -1c 48 f1 ea 75 1b f3 2f 95 90 be 3a fd b7 74 5e -16 6e 0b 32 2c 08 31 24 e6 45 83 94 82 d0 81 26 -22 d3 1a b1 87 7a 9b b4 1b 8d aa d8 68 f3 0e 75 -07 83 2a c3 41 01 12 13 3a a1 7b 2d 47 6d 47 6d -89 - -# PKCS#1 v1.5 Signature Example 7.19 - -# ----------------- - -# Message to be signed: -9c 84 c1 48 6b c1 2b 3f a6 c5 98 71 b6 82 7c 8c -e2 53 ca 5f ef a8 a8 c6 90 bf 32 6e 8e 37 cd b9 -6d 90 a8 2e ba b6 9f 86 35 0e 18 22 e8 bd 53 6a -2e b3 07 c4 3b 48 50 a8 da c2 f1 5f 32 e3 78 39 -ef 8c 5c 0e 91 dd 0a fa d4 2c cd 4f c6 06 54 a5 -50 02 d2 28 f5 2a 4a 5f e0 3b 8b bb 08 ca 82 da -ca 55 8b 44 db e1 26 6e 50 c0 e7 45 a3 6d 9d 29 -04 e3 40 8a bc d1 fd 56 99 94 06 3f 4a 75 cc 72 -f2 fe e2 a0 cd 89 3a 43 af 1c 5b 8b 48 7d f0 a7 -16 10 02 4e 4f 6d df 9f 28 ad 08 13 c1 aa b9 1b -cb 3c 90 64 d5 ff 74 2d ef fe a6 57 09 41 39 36 -9e 5e a6 f4 a9 63 19 a5 cc 82 24 14 5b 54 50 62 -75 8f ef d1 fe 34 09 ae 16 92 59 c6 cd fd 6b 5f -29 58 e3 14 fa ec be 69 d2 ca ce 58 ee 55 17 9a -b9 b3 e6 d1 ec c1 4a 55 - -# Signature: -00 e6 be 96 e1 8d ce bf 83 88 ba 82 ec 6f 27 10 -5b c2 78 71 59 5e 01 70 5a 2b 97 a1 f4 d7 88 38 -35 2b 0e 7c 0a 2c 62 7a 6f f3 7d b1 69 a9 a4 64 -8a d2 7a f0 65 33 a4 f0 41 d4 c8 20 ab f4 fb 52 -64 64 08 14 34 df 36 78 85 03 c6 5a f7 62 aa 21 -9f b7 6a 91 cb b4 0e 14 92 a9 cb 77 36 9b b4 cc -a1 93 4e 38 53 de 6c 86 a5 dc 11 48 ed ee b3 b0 -03 04 14 fe 30 83 ad 72 fe 29 5c 29 b5 ea 9b 66 -60 - -# PKCS#1 v1.5 Signature Example 7.20 - -# ----------------- - -# Message to be signed: -94 0c da b4 a3 e9 20 09 cc d4 2e 1e 94 7b 13 14 -e3 22 38 a2 de ce 7d 23 a8 9b 5b 30 c7 51 fd 0a -4a 43 0d 2c 54 85 94 9a 2b 00 7e 80 97 8b bb 19 -2c 35 4e b7 da 9a ed fc 74 db f5 f7 1d fd 43 b4 -6c 93 db 82 62 9b da e2 bd 0a 12 b8 82 ea 04 c3 -b4 65 f5 cf 93 02 3f 01 05 96 26 db be 99 f2 6b -b1 be 94 9d dd d1 6d c7 f3 de bb 19 a1 94 62 7f -0b 22 44 34 df 7d 87 00 e9 e9 8b 06 e3 60 c1 2f -db e3 d1 9f 51 c9 68 4e b9 08 9e cb b0 a2 f0 45 -03 99 d3 f5 9e ac 72 94 08 5d 04 4f 53 93 c6 ce -73 74 23 d8 b8 - -# Signature: -00 80 e2 c3 4f d4 ab 4d 1d 70 1e a3 f0 85 76 3a -ca ff c9 fd 3e d9 18 d0 4b ff ee 19 31 62 48 98 -c7 8f 89 41 bd 2a 59 ce b5 b8 40 f0 11 45 16 ce -41 1f ae 75 2b 1b 8a 22 1f fc a7 a6 87 66 c6 97 -c5 0a 3d 88 d8 d0 2f fc 12 41 d8 4b b7 a7 22 7f -3d 05 14 9e 15 11 12 77 a1 36 a5 b8 dd 96 dd 4b -22 5c 5f 49 cd f6 07 1d bf 71 93 5c 7a 6f 1e 2e -9a f3 02 1c 0d 58 a9 b8 1c 9b de 61 fa 47 2c 07 -a6 - -# ============================================= - -# Example 8: A 1026-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -03 33 12 64 88 f7 a2 91 51 32 e3 0d 5e 97 f6 ed -7b bb 67 b6 19 85 00 8e ae a2 a5 da fb 96 a4 48 -ab 75 ce 3d 6e 68 a6 26 5e 7c 24 56 84 99 93 24 -c8 1e 0b a6 38 98 63 fe b4 88 b3 f2 55 d0 d6 19 -c1 90 40 b7 4c 18 9f 0c 9a f4 b0 d5 a5 5a 54 4c -09 0c d6 15 2c 90 a6 f2 55 0d 7d 2a 6b 6d 34 7d -5b 1b 9d fb 1d e4 40 3c 79 66 23 d7 03 bf 9d b4 -43 bf 67 02 68 3b 8d 2a 9c 61 e9 36 8a c4 25 a5 -81 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -03 33 12 64 88 f7 a2 91 51 32 e3 0d 5e 97 f6 ed -7b bb 67 b6 19 85 00 8e ae a2 a5 da fb 96 a4 48 -ab 75 ce 3d 6e 68 a6 26 5e 7c 24 56 84 99 93 24 -c8 1e 0b a6 38 98 63 fe b4 88 b3 f2 55 d0 d6 19 -c1 90 40 b7 4c 18 9f 0c 9a f4 b0 d5 a5 5a 54 4c -09 0c d6 15 2c 90 a6 f2 55 0d 7d 2a 6b 6d 34 7d -5b 1b 9d fb 1d e4 40 3c 79 66 23 d7 03 bf 9d b4 -43 bf 67 02 68 3b 8d 2a 9c 61 e9 36 8a c4 25 a5 -81 - -# Public exponent: -01 00 01 - -# Exponent: -01 4a 2b 15 df a8 83 1d b4 ef a0 5b 19 50 84 b7 -42 73 4e e1 36 f4 48 3f 3b e2 50 9d 2f 61 90 23 -c3 0a 1f f2 df 78 cb d1 17 b1 4f 2c 99 13 17 1f -72 93 b9 fa 6d 41 f0 bd 11 a5 31 74 74 67 54 86 -d7 f0 ae c0 a7 78 ba 92 0e 81 f5 64 d1 59 30 cd -de e7 e2 b0 6a d8 ad b6 12 75 1f 4e 38 4d 6f 3f -a0 a6 63 9f d6 2e df 86 f5 2c 9f e0 77 62 91 83 -21 83 d3 59 b7 34 32 60 c9 4e 12 5f 4a b8 bf 43 -69 - -# Prime 1: -01 d6 e7 bd 8e 39 5b be f2 10 46 49 c0 12 78 cc -1c 51 c9 68 7d ef b4 59 1f 03 b6 78 52 a4 bc b5 -30 75 0c f9 bf ca d0 72 8c 53 99 d8 70 35 01 06 -cb a3 ec 41 6a 31 e4 2d 0b 59 75 10 ff 1c 9d 53 -bb - -# Prime 2: -01 bd 46 6f 43 a4 d4 61 3e 42 64 f0 1b 2d ac 2e -5a a4 20 43 f8 fb 5f 69 fa 87 1d 14 fb 27 3e 76 -7a 53 1c 40 f0 2f 34 3b c2 fb 45 a0 c7 e0 f6 be -25 61 92 3a 77 21 1d 66 a6 e2 db b4 3c 36 63 51 -f3 - -# Prime exponent 1: -fb 66 85 00 65 06 e2 0e 01 3a 45 2d 51 af 43 e8 -ea 91 08 44 13 b0 c8 d3 91 fb dc 88 e2 82 0c 89 -6e 34 1b 31 95 69 6b 7e 17 33 cf 25 38 66 ef e5 -d0 01 d5 7a 88 60 34 dc 16 4a 35 64 bd 36 10 f9 - -# Prime exponent 2: -be 4e 9e 3b 40 f5 6c 62 59 aa 1e 5c df 56 59 b1 -6f b8 42 94 e5 8a d0 16 bd 2c 96 cd 08 e6 cf 68 -54 a1 1c b8 0a d4 be 3e 05 7a aa cf 02 bd 32 63 -73 a2 35 ce b8 9e 82 43 0d 6e 6d 47 d6 ce f8 35 - -# Coefficient: -c0 23 5c 89 73 cf bf 30 bf 1d d3 c8 39 f0 2c 94 -c6 9d c5 34 cb fc 98 88 05 d6 fc 46 2a db d3 77 -d1 75 b9 a9 64 60 18 d7 fa b7 5c 1d 1f 7d 61 b7 -7f a7 95 59 b8 6f fa 9e c6 e2 11 33 fa 7f 1a 45 - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 8.1 - -# ----------------- - -# Message to be signed: -9a 28 20 f3 b9 02 9a bc 18 65 eb 06 fe 61 b8 d3 -97 b6 55 72 d6 00 61 ca a7 4e 63 56 93 1e 25 6b -89 71 2d 18 66 84 b4 de 1e 14 c9 eb fe f1 6e 40 -d9 9d 10 94 39 6c 56 1c 88 31 77 e5 12 6b 9b e2 -d9 a9 68 03 27 d5 37 0c 6f 26 86 1f 58 20 c4 3d -a6 7a 3a d6 09 04 e2 15 ee 6f f9 34 b9 da 70 d7 -73 0c 87 34 ab fc ec de 89 7f dd 67 0a 01 46 58 -68 ad c9 3f 26 13 19 57 a5 0c 52 fb 77 7c db aa -30 89 2c 9e 12 36 11 64 ec 13 97 9d 43 04 81 18 -e4 44 5d b8 7b ee 58 dd 98 7b 34 25 d0 20 71 d8 -db ae 80 70 8b 03 9d bb 64 db d1 de 56 57 d9 fe -d0 c1 18 a5 41 - -# Signature: -03 22 d0 0f c1 d9 66 94 f3 6e ae d2 30 90 56 f3 -ea 1c 1c c2 2b 13 b6 5e 79 11 8d 20 2c 42 d1 61 -30 99 38 05 09 da 74 35 bb 57 92 16 fd 57 65 06 -68 42 e3 56 a6 41 6f c8 42 a2 4a 9e a1 bc 6a 90 -98 05 23 b4 28 e3 99 bb d6 fc dc 2c b7 71 da f0 -03 7a 2d e8 c7 64 9b d5 33 17 de 0e 37 c3 14 ba -b0 c4 37 bb d7 98 df b9 65 50 6c 34 8b 74 2f 13 -8e f1 d1 a2 03 e0 51 e3 4b dd 3a 30 e0 fc e1 ac -43 - -# PKCS#1 v1.5 Signature Example 8.2 - -# ----------------- - -# Message to be signed: -ea 9a 1a 04 b7 cf 47 8a 89 7a 70 8f d9 88 f4 8e -80 1e db 0b 70 39 df 8c 23 bb 3c 56 f4 e8 21 ac -8b 2b dd 4b 40 fa f5 45 c7 78 dd f9 bc 1a 49 cb -57 f9 b7 1b 6d 48 b2 b6 a5 7a 63 c8 4c ea 85 9d -65 c6 68 28 4b 08 d9 6b dc aa be 25 2d b0 e4 a9 -6c b1 ba c6 01 93 41 db 6f be fb 8d 10 6b 0e 90 -ed a6 bc c6 c6 26 2f 37 e7 ea 9c 7e 5d 22 6b d7 -df 85 ec 5e 71 ef - -# Signature: -02 68 44 09 39 99 6a e5 cb da fd bc a8 6a 7c 42 -8a 04 b5 78 fe 2d be 51 26 a8 2f af 2b ec ff 09 -9a c6 0c b8 1b 11 7f 1e bf 42 04 fe 43 70 54 8d -5d 2c 46 80 63 68 2d a8 7d c8 01 79 bb 3b ba 85 -a1 48 ae 2d e7 dc b4 94 f4 76 22 1d f8 21 9d 4a -ae 1e 45 af 65 de 33 4a 1a 6d c1 45 52 86 ae 09 -cf 26 72 58 85 e7 74 80 99 72 d7 81 98 05 ff f5 -a8 c8 9d 37 37 64 50 73 92 49 f5 7e b1 51 b7 1d -c0 - -# PKCS#1 v1.5 Signature Example 8.3 - -# ----------------- - -# Message to be signed: -07 df 58 6b 90 5b 23 b9 1a f1 3d a1 23 04 bf 83 -ec a8 a7 3e 87 1f f9 - -# Signature: -01 bf d9 15 ff 77 80 f1 4c cc 55 bd 03 06 b3 ae -da 5b 5b 59 55 a8 26 d4 52 6b 0b c7 66 15 4f a8 -da 59 56 05 78 cc d4 88 2f e9 70 92 fb c7 36 fd -a7 3c ee fd 10 38 94 06 3e 93 e2 2a 7b 5c 44 f7 -a8 5e 3b db 96 71 9a 09 37 43 03 c9 1e d7 e2 27 -49 fe 3c 4d 6b 96 69 9d 50 7c 50 ad cf bd fc 13 -1d 6b 5f 2c f1 83 0e 31 ea be 39 ae b5 17 96 9c -94 a8 1c fe fe 67 31 aa 2c df fe 28 c8 af 71 40 -f4 - -# PKCS#1 v1.5 Signature Example 8.4 - -# ----------------- - -# Message to be signed: -50 0b 87 77 c7 f8 39 ba f0 a6 4b bb db c5 ce 79 -75 5c 57 a2 05 b8 45 c1 74 e2 d2 e9 05 46 a0 89 -c4 e6 ec 8a df fa 23 a7 ea 97 ba e6 b6 5d 78 2b -82 db 5d 2b 5a 56 d2 2a 29 a0 5e 7c 44 33 e2 b8 -2a 62 1a bb a9 0a dd 05 ce 39 3f c4 8a 84 05 42 -45 1a c7 cd 69 8d 84 b6 51 28 d8 83 5e 3a 8b 1e -b0 e0 1c b5 41 ec 50 f1 03 6e 00 8e 71 e9 64 da -dc 92 19 ed - -# Signature: -00 7a e0 cf d7 f4 c6 ad 1f f8 4b 4a 60 6b a1 c4 -79 8c 2e 49 9b 04 5b 56 7d 32 63 4f d9 55 f2 68 -26 0a b6 59 bf 5b e9 9e 08 26 eb 38 70 e8 f6 2f -5a 3c e7 58 e6 d1 56 c3 29 9b 43 1c d9 df c6 58 -37 ee 94 22 0d 95 23 51 14 87 99 be 9f ca f9 be -26 4d ae be ba 2b e8 66 05 20 1e f9 a0 d9 8f 58 -ec 63 8a bf c4 f2 78 48 f5 d4 79 d3 34 ac c2 a9 -7f dd 2d 32 7e c4 c7 dd c5 a8 ab d5 66 de 35 d1 -4f - -# PKCS#1 v1.5 Signature Example 8.5 - -# ----------------- - -# Message to be signed: -6b 3f 6a 63 d4 e7 78 59 24 3c 9c cc dc 98 01 65 -23 ab b0 24 83 b3 55 91 c3 3a ad 81 21 3b b7 c7 -bb 1a 47 0a ab c1 0d 44 25 6c 4d 45 59 d9 16 ef -a8 bf f9 62 12 b2 f4 a3 f3 71 a1 0d 57 41 52 65 -5f 5d fb a2 25 f1 08 95 a8 77 16 c1 37 45 0b b9 -51 9d fa a1 f2 07 fa a9 42 ea 88 ab f7 1e 9c 17 -98 00 85 b5 55 ae ba b7 62 64 ae 2a 3a b9 3c 2d -12 98 11 91 dd ac 6f b5 94 9e b3 6a ee 3c 5d a9 -40 f0 07 52 c9 16 d9 46 08 fa 7d 97 ba 6a 29 15 -b6 88 f2 03 23 d4 e9 d9 68 01 d8 9a 72 ab 58 92 -dc 21 17 c0 74 34 fc f9 72 e0 58 cf 8c 41 ca 4b -4f f5 54 f7 d5 06 8a d3 15 5f ce d0 f3 12 5b c0 -4f 91 93 37 8a 8f 5c 4c 3b 8c b4 dd 6d 1c c6 9d -30 ec ca 6e aa 51 e3 6a 05 73 0e 9e 34 2e 85 5b -af 09 9d ef b8 af d7 ad 8b 15 23 70 36 46 - -# Signature: -01 92 1f 22 f4 71 a0 8a f8 19 a9 52 e1 83 68 ce -15 f9 b0 64 eb 1d 00 b1 28 99 78 02 44 fe 8c 44 -24 b2 1f 64 35 0b 92 26 fe 95 ff 54 f1 14 39 83 -9b fb 54 f9 39 c9 14 95 e4 f0 27 90 18 97 27 3c -fa 29 5a 57 15 1f 4e 91 1d c1 02 a7 7d 95 8b 62 -27 24 c0 fd 3a 34 b3 b7 be fb 8b 8c d0 66 6e 81 -5d 0c 07 f2 ec b7 c4 dd 2f 42 b7 f4 09 13 12 e3 -d7 b2 df 26 78 87 e0 ac a7 0b 54 1c 4c 1e ea 16 -b5 - -# PKCS#1 v1.5 Signature Example 8.6 - -# ----------------- - -# Message to be signed: -93 29 a5 80 90 de 8b e5 7c 42 - -# Signature: -01 5c e2 4a 6f 2b 37 3a 19 99 7b b2 0c 18 ac 65 -9f 1e dc 0f 25 c9 e5 bf 76 d5 69 99 65 20 c2 80 -ef dc f1 5e 2d 63 ca af f6 c7 7a e0 38 97 03 7a -06 15 f9 83 8c 52 10 4e 97 25 18 e2 90 fa c3 8f -63 24 75 30 b4 cf 61 c6 ec e3 42 9b 53 07 81 cf -34 96 4f 32 ae 50 f1 09 34 63 83 86 d3 b4 df 76 -1c 59 7d 4a a7 fe ca 26 6c 27 f8 ce 66 ad e1 be -26 59 ce 14 2b a5 f9 35 88 3c 7e 8c 9b 89 57 ab -f2 - -# PKCS#1 v1.5 Signature Example 8.7 - -# ----------------- - -# Message to be signed: -6a ce 0f 1e 1d c6 3e 39 4a 06 1f 52 2a 54 2f be -71 20 25 4e 36 e9 f6 5d 19 57 c9 56 28 78 2c b0 -36 8f 3c 13 da d6 56 71 79 c1 ea 24 fe 83 5a 26 -63 85 e4 68 83 17 b8 2b 0c 3f e6 3c f2 d5 2f 04 -ae 8a 38 a5 75 59 bb 95 d9 eb d5 fe 8a 9a fe 14 -79 90 9e b9 9e 0d 3e f3 f3 12 e0 a4 ab b7 66 c7 -e2 13 1a 5f fb 48 31 83 fb b4 22 34 d3 2e 58 1f -59 50 65 c4 89 82 61 ec d0 ae 57 2c 22 1c 25 8d -e9 50 a4 08 01 ef 79 6d 4d d0 04 06 45 fc 53 4d -8e 78 58 23 48 38 ed 12 c6 87 40 c1 4e 37 16 13 -f0 04 61 76 bb b0 f4 3d 99 75 19 c4 0c 67 14 96 -ff 35 0a 3f df 42 9c c2 2f 46 4f 43 5f 6b 29 e7 -e1 c3 0e bd 50 59 27 d4 a0 96 58 7f c3 8d 3d 64 -94 39 1e - -# Signature: -02 73 ba 2c 50 2b 3f 29 84 c5 48 d9 f7 d6 c9 b3 -d7 fd 46 08 78 c8 4d 6b e3 3b 28 10 6e 15 fc 22 -17 ef f7 41 cd c2 66 83 4b ea a8 6d a4 05 f3 ca -e6 06 cc 61 f2 54 7b b9 22 92 03 45 fe 8f bb 5e -7b 6a bf 91 ea e8 c4 26 60 64 50 25 cc 7f c0 7a -53 4b 76 d3 78 75 e3 f4 0d 52 70 c1 0e f4 6c 7f -e4 5a fa bc ff ae 2a 9c 94 11 bd 04 d6 1d 4c 0e -5f fc 02 2c b3 6a 64 b7 c3 a8 c8 9b fd e4 36 ba -fd - -# PKCS#1 v1.5 Signature Example 8.8 - -# ----------------- - -# Message to be signed: -fd cc 0f 1e 5d cb e5 01 6a 6b 0f 8c 28 f5 b3 31 -ff 58 28 37 13 8d bf 62 ef 7f f6 1b c1 a3 53 96 -c9 2e 3d 54 8d 39 9e 35 0a 3c 6b c2 fd b5 da 94 -b9 86 a4 ce 6d ee 10 4e 9f 27 4b 15 25 58 bf a7 -22 cc fd da 3b 26 b9 f8 e5 15 25 f3 81 03 4c 51 -fd c9 f7 91 2a c9 27 d1 a7 08 cc 2d bb cd 7b a6 -c0 31 b0 11 cb a8 e2 df 8f c9 b8 83 64 ee 96 5f -24 27 0e 43 48 62 32 53 cb 9e 59 d6 f7 94 09 09 -94 a7 a4 c9 30 02 70 b5 7f 24 39 eb bb a4 65 84 -67 af db 7f e8 6b 4f 1a ad 1d 3d 3b 2f - -# Signature: -00 a7 c4 50 b3 0b 2e cb 19 bb 70 9a 92 31 cb fa -9f 0d 61 69 7a 26 b9 0a 96 d9 1c 24 c4 da 70 d7 -b0 0b 59 23 c8 e1 2d 41 09 4b 70 5d 50 c7 78 bb -da ce c6 60 d5 c1 5d ff d3 a2 47 8f d9 33 70 80 -dc a1 6b 9c 13 e6 23 3b 82 92 b2 fd cc 29 e9 bf -3b 21 a7 18 78 f3 4e f5 eb 7c d5 0a d4 12 03 72 -5a 0f 1c 66 3f 73 42 ec 7c 3d f3 d5 aa 51 d0 58 -df cc ce 5f e6 9d 36 3b 42 84 32 08 79 e8 6d 58 -b5 - -# PKCS#1 v1.5 Signature Example 8.9 - -# ----------------- - -# Message to be signed: -2d 1f cd 17 66 f7 d4 5f 29 59 4f 9d 4f 74 39 41 -ae 91 2a 97 91 1f fc 3d 65 dc d9 65 60 10 77 3b -b0 22 4b a6 df 11 1b 1c 13 68 38 4f 24 92 fc 4f -a7 28 0c 06 65 14 ae 84 f7 61 45 63 d9 05 2c a9 -4e f4 46 a3 1b 46 3b d6 c2 50 56 80 50 88 c1 d3 -1a ba ff 52 15 f7 a8 f8 9e 7b 64 f2 - -# Signature: -02 c0 e0 71 e8 36 90 dc 14 d9 a3 7d 61 e0 af c2 -7d f9 78 03 9d a6 01 ca 2c ec 1d ec 8f 0d 17 d2 -ff c4 50 e6 78 38 0a 02 5a 41 c7 46 11 8f 58 36 -42 52 a1 22 53 9e cc bb b4 ab 3d 8d 37 7b db b9 -11 c5 8a 4c b9 46 2f 36 dc 38 92 48 50 1b d0 8f -48 e3 53 3b 82 59 1a 2a 20 cf 62 df 5f 5a 1f 84 -ea 30 0c b3 94 57 13 71 41 ad 8c d1 d1 85 ab b1 -7b a5 d0 3b e3 48 c0 67 97 b0 95 58 f0 33 1c 24 -b9 - -# PKCS#1 v1.5 Signature Example 8.10 - -# ----------------- - -# Message to be signed: -4f 46 9a b7 9c b8 93 a5 3c 0e e3 81 5a 8b c0 87 -eb 74 ea 36 61 5b dd c3 33 de e0 5f c7 26 65 aa -6d 0b d5 9e 47 22 98 29 83 4b 1f 91 c9 cd 81 ce -28 d6 8f 14 82 5a 34 5f 3a 4f 38 a0 1b 2d ae 59 -10 07 64 aa b9 90 a8 50 b1 1c 13 d5 df e4 19 f1 -d9 20 d0 0c f1 3b f4 30 e4 ca 82 87 98 9b ee be -da 3e 5d 40 36 02 8c 8e f9 54 6e 35 01 50 d1 96 -f0 05 60 ba e1 47 22 99 e7 f4 29 1d 54 46 29 c4 -f6 52 e3 5c de 4f 80 3e 1b 3c a3 38 09 51 5e f2 -3d 25 4b 8e 65 20 2a 14 a4 11 b1 bc 31 5c 5f fa -ec b8 21 11 97 80 9d cb 5c ed 68 2c 09 f6 7e 41 -d1 60 2c - -# Signature: -01 71 29 64 ea 9a b9 70 29 5b 81 b0 fb d8 35 7e -54 b9 36 ee 87 72 d8 ae 9c 96 12 71 6f cc 2f cb -78 4c a9 ab ee eb b8 fc b6 89 82 16 1c c7 4e 40 -c7 c0 22 47 c0 d0 0e 03 bc 8e 1a 70 51 b8 7c 90 -dd 7d 3d fc 95 e0 b3 c8 8e 7a 0f 37 f3 0e 1b d5 -fe 8b 6e ee 46 5a 0b 34 cb 59 c6 4e bd b5 7d 6f -5f df f2 e7 0b b1 9c 60 d9 88 ea 95 6c dc dd 1b -e5 62 f2 6f b3 7c 34 da 52 a9 f9 11 b9 97 43 81 -2c - -# PKCS#1 v1.5 Signature Example 8.11 - -# ----------------- - -# Message to be signed: -52 bb 76 c9 ea 26 5d 6f ad 10 83 72 ff ab 25 03 -bb 20 d3 8d 37 df 19 92 54 a2 f6 de 0c 4f ca 7a -73 03 36 - -# Signature: -01 0c 55 34 23 60 22 60 15 8a 17 13 3b 5d 30 ef -e9 8e 9a eb 35 3b ab 33 71 e4 91 cd be bd 35 0a -0a 47 0b 9d bf d1 89 33 51 1f 0d 0e 36 94 a8 ac -4b f3 f5 b6 eb 9b f7 1c 23 d9 4c 2e 64 be b7 b7 -c7 22 52 ca 82 7b d0 c0 56 7b a8 a1 0a 6d 3b 7e -18 7b 0f d8 e9 e9 5d 4f e4 80 f2 50 dc 7f 03 42 -29 0e 9a 7d 32 70 3a 72 13 c6 52 13 ad ed 45 57 -54 78 1f 3d b7 3e 79 e3 d1 ba 6a f7 f6 90 fe 81 -73 - -# PKCS#1 v1.5 Signature Example 8.12 - -# ----------------- - -# Message to be signed: -5f 59 7a 19 cb f5 14 30 d3 c6 a2 47 a5 23 54 07 -38 6c ae d0 a2 94 f3 f4 1f 3f 37 82 50 d4 c5 a2 -c9 92 75 f9 55 44 cc c1 d7 7e 5c 15 1a f1 3e d6 -0b e5 22 eb 8c ab ed 89 a9 b4 5b 09 65 46 00 f9 -fc 75 1e 8b 12 e6 7e 52 - -# Signature: -00 3b d4 aa 90 81 fe 7e 9f 69 a2 69 fe c8 c8 a7 -36 70 c0 37 e8 5a 1f 36 fc ad 74 e5 b5 2d 71 0a -5a 18 ba 09 5b 98 10 cc 69 37 bc 76 34 09 51 e7 -fe d7 5b 32 6d 0a 3b 0f 26 c2 9c d5 eb 64 15 bb -f7 e2 dd 60 ad f6 a0 e6 13 02 dc c6 60 cc e9 10 -40 8b 4f 99 a4 40 ae 2a d6 c3 07 72 c2 9a 9e 7b -32 80 e2 e2 93 9a ba 0b 54 ab 02 2a a3 29 50 22 -71 8c d3 b7 87 b1 13 79 90 fb eb ef ac ec 8c b7 -49 - -# PKCS#1 v1.5 Signature Example 8.13 - -# ----------------- - -# Message to be signed: -84 0c c9 00 cb 4b 2c b6 7a 30 4a 9b 02 82 6d b0 -d6 67 36 92 2e 78 70 13 d6 bf 21 4d f5 79 ff 0c -f4 82 1f 9b - -# Signature: -01 3b 6c 08 0f 68 93 95 05 e1 87 a4 94 82 c7 91 -27 8d a3 ad 4a 74 7c 4f 01 79 1b 92 48 05 b6 82 -f6 49 bb d8 0d ba 12 fb be 59 40 f1 7f 27 e7 5d -42 67 7c 4c cc df fd 00 48 77 2e 36 93 4c 69 12 -12 8f f9 03 af ea 5e 1c a8 fe 94 24 fc 97 9b 21 -87 98 76 98 a5 c5 a7 5e 7d 70 70 a2 a6 74 85 2b -d8 05 bf 13 bb d1 29 6b ff 13 10 a6 d6 ed 45 fd -f8 67 2d 52 41 e7 4c d4 c4 19 86 e4 36 25 50 0c -23 - -# PKCS#1 v1.5 Signature Example 8.14 - -# ----------------- - -# Message to be signed: -c6 41 71 94 13 3b 5f 8e a6 3d 95 58 1c 89 6f 5b -9e f3 d8 7c f6 6c 02 91 64 0f 35 0a 32 5b 49 11 -52 e9 d1 43 0d 68 70 34 6e 46 8e 71 99 45 d4 e3 -65 d0 01 07 5f a9 70 f2 a9 87 0a 1c 65 43 4b a1 -70 02 41 2a cc 4c c7 4d 28 b2 de e2 9b 36 e3 97 -b6 8c 5d 59 cf 67 7c 29 ae e7 93 a9 30 0b 7b f4 -c6 73 b3 e0 b6 03 a3 61 1c a9 02 44 ff 08 78 75 -c5 16 88 57 cb 92 a9 5a aa 61 df f3 c2 12 dc 62 -06 f1 71 47 c4 4b 95 07 d5 c8 90 75 8b b3 5b b7 -2a 2a 5e 9d 4d b2 65 e5 37 3a 5b 34 02 90 4f 0f -1a 12 05 d5 bc c5 90 25 d3 22 0a 5d e1 b1 82 a8 -4d 30 41 2b 84 26 d4 69 32 32 1b 57 ef 72 64 0a -dd 2c ee bf 5b e9 68 43 6b cd 12 16 90 78 84 82 -32 93 b0 10 ec 28 f0 d9 - -# Signature: -01 60 47 ca ad 6c 47 bf 27 d0 cc fa 03 41 01 7e -56 5e 02 8c f2 6c 8e 66 0f 79 e0 91 f3 50 ce b2 -aa cf 92 f7 d0 1d 37 3f 71 55 11 9c 07 29 17 f2 -4f 01 bf 74 7b e2 dc dc 41 d1 be 58 85 35 c2 d6 -ac 17 04 c5 fb 16 f6 e5 dc 4b bc 84 53 f5 21 db -73 1e ba 78 98 e6 e5 21 2b 80 ce 9d a0 f1 56 28 -18 99 98 31 35 03 df d4 4e 3d 69 de 9b a9 cb 5e -b3 2a c4 1c b8 e3 62 1b a1 d2 91 d0 c5 da 24 9f -15 - -# PKCS#1 v1.5 Signature Example 8.15 - -# ----------------- - -# Message to be signed: -a6 42 f0 f7 0b 4b d3 b5 4b e2 20 11 9a 7f 79 - -# Signature: -00 a0 33 6e 63 67 52 7b bf 13 b0 a9 33 b6 31 c7 -2c b3 3e ab bc 29 2a 0f 8f 75 55 0c 22 30 fe 82 -57 f2 af 76 d5 43 cc d1 07 dd 2c 87 78 d3 ac 8a -7b 5b b4 ac fa 57 f2 af 6a 23 14 95 23 5a 51 da -dd b0 83 e3 73 b7 77 a9 5c f9 c4 a9 b6 be 77 51 -b6 5f eb 62 3a b3 34 43 36 54 b1 21 0f 7f 78 2b -17 25 c6 ba 4f fd 20 d1 7e d4 b6 ec 4a 3a f6 4b -d2 73 47 55 b7 73 9e eb f4 18 f0 9d 3a ff 28 9d -13 - -# PKCS#1 v1.5 Signature Example 8.16 - -# ----------------- - -# Message to be signed: -ca 16 e4 3d 9c 82 d9 d3 0c 8f cb 40 22 93 3c ff -c7 d7 4c aa 0d f4 86 35 09 31 8e da ba 4e 0d 51 -99 77 9c 03 50 4a ff a2 7d 87 19 1b 6b f6 86 a8 -4d 97 9a 2f dd 5b 8a 4c 49 32 14 45 c6 f7 5d 25 -23 59 17 ad be e2 a5 cf f8 a9 7a ef 78 c0 09 22 -10 11 d8 3c 0f 9d 37 16 08 75 af 73 67 71 8b 10 -ee c3 b4 29 90 e6 43 f6 37 07 cf bb 30 a7 fa 74 -ab 16 a7 eb f1 c8 38 c3 b2 26 37 b6 3c cd cb 6e -b3 4c 62 eb a9 e9 48 c7 ac 90 30 f0 63 77 29 d3 -e2 78 0a e6 be 4d 2f af 34 6c 11 63 d3 f9 82 48 -19 3a 76 39 9f b7 84 ca cf 68 fb 33 c7 4b ab c9 -dd b6 27 52 0c 0c 61 12 34 64 68 cf 20 a8 e0 2c -c9 a9 bd 27 91 0e 83 29 7b 85 e8 57 32 4a 01 00 -f5 cd d5 93 1b 6a 6d e0 5f 94 83 3a a8 61 0a 3a -4b 08 a5 a3 93 53 - -# Signature: -02 48 59 23 3f b9 db 7c d1 41 f4 b8 77 6a 1d 83 -e1 03 db 3a c9 42 89 d3 6e f4 0f 5e 6e 63 c3 12 -12 af dd dd 16 88 c2 c1 c8 d4 db 04 71 9e 1c 6e -8d bf 7d 60 be 25 f1 d6 88 87 fd ad da 3d 11 2e -3d 0d 24 c0 cd d7 98 8a 55 c7 10 29 40 08 2d 1a -c3 1f b3 ef ab e7 c2 88 cb 4e e7 2a 99 2a c9 6d -1e dd 78 ec 72 82 73 97 0a 79 69 95 c3 e2 a3 85 -81 e2 28 03 25 8e b4 cd 9d a2 04 0f af 74 1c 54 -2a - -# PKCS#1 v1.5 Signature Example 8.17 - -# ----------------- - -# Message to be signed: -3b aa 7e 9a da 21 43 f8 48 82 5d 22 93 67 04 d1 -c9 97 b2 da 76 76 9c 98 6f a1 52 b8 98 ae b1 1c -10 b9 45 79 76 4f 9d c9 33 65 2a 81 03 67 04 76 -95 8d 59 86 7a b2 4a 97 12 84 05 6e 99 c6 48 b7 -7e 7a 65 36 44 87 0f e4 c7 ce f3 7f 90 01 60 48 -72 ad ed e1 6a ac ed 8a a5 df 42 05 33 04 e4 d1 -71 12 0d 7a b3 ce 81 a4 d1 a2 74 98 d1 38 01 8f -66 21 bd fc 1d 53 e7 f3 c1 a5 aa 5d 62 b0 9a 55 -4a 56 f1 ed 4f 38 5a 07 68 ea a2 da 0c 9f 56 37 -03 4c 2e ef 58 cc 35 17 8b c2 a6 27 2c f5 29 b6 -5a df - -# Signature: -01 e6 3b 86 d0 c1 59 99 09 3d 44 28 af 7c 6d e6 -48 07 45 d8 19 e4 29 62 3f 47 2b 45 de 61 aa 56 -7b 60 d9 94 79 2a 0d 11 65 80 55 98 f4 e2 1f e6 -13 99 9a 96 22 5d 0b ba 98 f9 cf be e8 3a f5 85 -fa 07 84 39 a7 42 51 5a e2 18 ec 31 f8 d5 08 f2 -9b 0e 58 75 fc a8 f0 4f 11 a1 c8 2f 2b b0 ae 52 -8f da d3 ca 50 75 bb 3f 41 bb 57 83 34 81 33 fb -a8 a0 b3 ad 95 1a 1a 64 9c a0 f9 75 8b 20 c8 70 -fd - -# PKCS#1 v1.5 Signature Example 8.18 - -# ----------------- - -# Message to be signed: -7e b3 c9 8e 46 fd 1b 5c 9f f1 b1 1b e1 61 9b 56 -60 57 f2 6c 55 e2 88 f4 84 4c cd 50 ba a9 1b 03 -8d 60 95 83 6f 77 1f c1 c4 25 fb 53 3e f2 b1 dc -4a 3e 94 9b b9 95 25 c2 8f e8 a3 e9 31 78 f3 a0 -ac 97 fd 5d aa 81 b5 92 86 18 8e 17 b4 4b 37 71 -bc a8 55 d8 5f 3c 4d 28 6f 10 68 10 f4 e5 22 ea -05 83 4f 11 a3 1e 89 c3 59 90 c5 1b 08 0c 03 a6 -61 e3 d4 a1 b9 7a 2c 27 94 0f 5b 2e 41 2b 69 9e -a6 10 e8 99 6a e6 71 5a b6 e2 09 69 b6 aa 54 cc -72 31 9d fe e6 3b d2 ca cf d0 60 8d 40 e2 b4 03 -95 fe 55 dd a5 be a3 b0 f9 b9 4b 5a ad c0 98 dd -56 8d a3 95 db 2d 44 e4 - -# Signature: -01 5c fa d9 6e 4b 57 d9 cb b5 78 c7 90 74 a2 ba -86 9c 06 02 88 68 c5 a3 fc f4 a5 e3 61 83 1b d8 -c0 2c 25 b1 2b 90 23 4c 8e a4 82 2f b6 5e 82 d0 -91 a9 0f 89 b6 c1 15 6e 4b 44 d7 8d 32 a6 47 37 -d6 15 87 c0 ce 3f 4b 34 3e 71 f8 f7 a8 4c 6f 8f -c8 ae f8 f4 64 c8 b3 59 e4 fb 18 ad c6 99 c5 a0 -76 45 37 55 93 0c 5f 6f a7 07 1f 8f ec b8 63 1a -a4 14 f5 08 35 03 8b e7 ab 05 a4 b0 50 f3 f5 6e -86 - -# PKCS#1 v1.5 Signature Example 8.19 - -# ----------------- - -# Message to be signed: -6a 45 ee 0b 7e a8 03 68 b2 c4 29 af 28 81 53 f4 -56 cc 66 32 17 a8 ff cd 2a a0 5c 5d 32 2d b7 57 -56 cd bc 0f 68 41 41 fe 6b ca e1 89 bf 24 de 1c -8e dd 5b 11 36 44 a4 50 0d 0d 4f f5 80 08 36 40 -e1 2a 2c 95 de 69 e9 59 6b fb 1d 44 36 57 86 e1 -67 d0 25 d8 9e a2 f8 d1 3a 0e 64 77 f1 3b 85 bb -dc f1 60 77 4b 18 25 8c a0 be c0 bd 7b f1 39 11 -b3 89 6b 48 89 fa 3d e0 4a b2 6b d6 82 b4 ab 43 -7c 0c 17 f3 53 a2 3a 43 e9 2e 20 e7 f8 20 69 4e -40 3a ab dd 5d 19 6e 93 89 5b 47 92 55 df 40 30 -ad 8c e3 a5 3d 15 73 be 22 6d 81 aa 18 e4 85 89 -57 a2 d0 a3 35 9c 2e 7a - -# Signature: -01 64 f0 db cd d9 52 11 86 a2 80 84 a3 f3 ae 6a -ac b6 59 6b 85 6e 8a ab 2e 72 a7 f2 33 d6 2d 2d -3e f1 96 d3 78 7e 4b 04 57 31 da 9c 61 50 ad 9d -5f 91 8c 6b 06 c9 2a 11 a0 bf d5 ef cc b7 b0 3a -01 07 24 14 39 d3 4d 31 3d 35 b3 6a 0d 8c a0 81 -3c 36 23 b2 bd 78 f2 e3 a9 71 99 64 8d a3 58 06 -ff c5 8e ed 33 ac 9f cf 79 53 8f a8 89 15 b1 a5 -75 85 78 b9 a2 db 01 38 04 bf 32 e7 a5 6d c7 24 -37 - -# PKCS#1 v1.5 Signature Example 8.20 - -# ----------------- - -# Message to be signed: -92 a4 b4 bc e3 da a0 a7 a6 4b 72 ad 87 1f 3a a8 -ea b5 ac 40 11 aa ae a2 ce eb a8 92 77 c6 43 29 -57 26 26 c9 56 88 4f 48 54 f8 61 3d 22 51 8b 14 -f0 38 fc af 9e 68 e1 30 02 fb 0a 00 a7 8c c2 ea -51 44 fc 13 11 76 d5 e5 d6 7e 10 6a 99 87 9c - -# Signature: -01 24 fd 8b 2a cf 22 37 fc 71 a2 ee 97 e2 6a 4d -ab 7d ea 82 9e 15 be b2 f8 a7 37 91 a0 ba 15 2d -a5 b0 6a df 34 1d 74 09 e8 d3 d3 17 5b 51 01 34 -32 5a 35 32 97 a8 d6 d6 6c 09 70 03 22 ee c5 e3 -3f 62 48 6a 21 11 30 d7 4c 70 dd 92 5d f8 60 2a -e3 c4 c6 cc af 93 cc 9a 97 0d 1e 85 32 60 ee c6 -94 81 c5 f1 33 7e 9d d3 ae da 88 d8 82 99 be 08 -09 5b 71 5a 5b 21 66 e6 17 c9 26 72 2c ed d6 ef -34 - -# ============================================= - -# Example 9: A 1027-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -05 f3 74 34 88 26 1c 6f 06 25 e4 32 fa 6e b8 7f -b1 2b 26 21 82 90 bf e3 96 ba 76 ea 42 61 32 2f -81 43 e4 b4 eb cd 5d 2a e1 9b 0f 9d 8d cd 2f c7 -e6 82 32 08 a7 51 83 3d 3b 4e 8e 38 7c 39 f8 ed -6b bc 9f da ec 32 d3 ea 9a bb ff 57 47 23 f3 f1 -22 99 90 96 3e a4 fd 9f b5 44 f6 42 90 aa 2e a7 -da 63 11 91 a2 0d bc 94 23 b4 61 23 3b 93 72 49 -f2 f4 ea 10 92 8f ae 2a 6f e6 64 f1 2c 09 23 ed -11 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -05 f3 74 34 88 26 1c 6f 06 25 e4 32 fa 6e b8 7f -b1 2b 26 21 82 90 bf e3 96 ba 76 ea 42 61 32 2f -81 43 e4 b4 eb cd 5d 2a e1 9b 0f 9d 8d cd 2f c7 -e6 82 32 08 a7 51 83 3d 3b 4e 8e 38 7c 39 f8 ed -6b bc 9f da ec 32 d3 ea 9a bb ff 57 47 23 f3 f1 -22 99 90 96 3e a4 fd 9f b5 44 f6 42 90 aa 2e a7 -da 63 11 91 a2 0d bc 94 23 b4 61 23 3b 93 72 49 -f2 f4 ea 10 92 8f ae 2a 6f e6 64 f1 2c 09 23 ed -11 - -# Public exponent: -01 00 01 - -# Exponent: -01 4c c3 26 32 52 f8 c4 fb 77 cd 57 a1 42 0c 04 -c0 43 27 8a 0c 45 e7 d4 23 79 49 3e 34 0f 9c f1 -a9 6f 96 06 3a b7 59 d1 63 04 06 ae 28 6a 18 34 -b6 d1 db 71 ee 72 2c 93 74 5f dd 4a d3 3f aa 72 -d8 93 51 da 69 1a 7d 0a 71 d2 c5 5c 57 97 d2 cc -b3 b4 62 62 08 bc 5f 5c 84 fe 43 2f 66 4d c3 0e -de 09 63 e6 58 45 2b 2a d5 ef a4 93 5a 12 2f 46 -1d 1e ab 84 1c 8a e0 e6 e8 2f c1 fe e8 5d 18 1c -bd - -# Prime 1: -02 94 ea 0f a3 4e c3 13 72 33 44 20 2e 85 ec a2 -4b 5d f6 46 1a 1c 30 08 7d ca b5 d2 53 39 4a f5 -66 6f 03 5c 33 35 41 0d 8b b9 86 62 c9 78 f6 1d -37 db 4d 83 f0 b2 4c dc b6 3f ca db 79 c5 27 f5 -ab - -# Prime 2: -02 4e 19 16 52 f1 70 9f f4 74 37 40 85 81 88 8a -9d a1 09 17 c5 b5 ab af 91 46 10 9f da c6 94 76 -6f 4c 8f b0 57 96 8e 84 8d 99 58 6b 05 f8 a0 2f -ba 6c a1 eb 12 ba 08 df d4 9b 62 c2 7a 8f 15 f4 -33 - -# Prime exponent 1: -01 22 7f 36 dc 6b 14 27 89 fc aa a7 12 8b df 14 -fe d7 90 16 04 07 fb bc df bd a7 e9 88 97 18 31 -81 12 ae 81 6a 28 b0 2d 4a 0b 03 dc 8b fd d4 ff -c6 bb 67 f8 e4 65 1a 8f b0 b3 9d 70 96 b7 67 f6 -fd - -# Prime exponent 2: -02 25 ec 05 3c e8 da 6f 86 ad e3 6b d2 bf 43 93 -02 91 37 5b 1b 1a 51 d4 7d 0b 11 a5 17 8a 26 83 -34 f7 e1 94 92 1b b1 d7 5f ea 7f 56 c5 aa cd 05 -8d b3 7d 36 08 2e ac e4 83 4b 07 bf 7b dd ea b4 -b7 - -# Coefficient: -02 0b d0 f5 15 80 87 ed e3 8c b5 dc 66 e4 01 0a -e4 e4 8c c0 04 2e 15 2c d5 ee b0 51 c9 ec 45 ad -23 40 24 53 52 c0 1d 94 c6 a5 26 aa 5a 45 4c db -ae ac 85 95 34 9b be 6a 8d 55 19 a3 c9 b7 d0 7c -3a - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 9.1 - -# ----------------- - -# Message to be signed: -82 e5 c5 aa e6 4e 60 8b 27 50 4b 91 db - -# Signature: -01 45 82 da e9 35 e6 b2 ae ff 7d 72 50 89 da b0 -58 c6 78 b2 ee 28 bc d4 44 a7 2b df ac 31 46 3e -18 e9 4d 7b 5e cc 84 a4 31 69 6a 1c dd 79 f9 c0 -8c 33 e1 d4 b3 22 dd 27 7b 50 3a e6 e4 f9 c3 15 -30 5b 43 72 fe 45 fe 4a 7e bb fc 4a e5 90 fa 3c -52 0b f8 28 15 8f 78 20 29 9f 09 b1 34 ed e1 17 -b6 72 a1 ea c2 f0 50 c0 44 b2 55 ca 8d 45 52 d4 -b5 f3 f5 7b 87 34 db 24 74 50 07 44 a5 33 75 00 -5e - -# PKCS#1 v1.5 Signature Example 9.2 - -# ----------------- - -# Message to be signed: -77 e0 fb dc d6 e0 49 8f c5 68 4f f1 3d 4c 9f 5b -78 0e 77 e2 46 46 37 ff 66 ea a2 d7 d9 c3 de fb -9b 0e 3a 38 37 73 db 97 a4 fb 49 1b eb 21 14 fd -ea 2c 2a 48 0f fc 21 9b 79 6a d8 05 d5 4f be c1 -7d cb 34 b1 da 17 96 cb 9c d5 f2 41 6a b5 e7 66 -f8 e0 06 91 8e be c1 82 29 98 a2 8f ff a6 23 0c -07 87 26 fb a2 e4 a7 b0 - -# Signature: -05 93 27 ce e7 26 ff b6 03 e8 a9 fc d5 74 ab a9 -cb df c3 6c 0a a6 6f cf e3 55 5c f2 ef 35 82 d3 -22 0d f9 d6 bf 8a 78 e3 ff f0 c1 29 b3 ab b3 dc -71 21 12 a2 05 6b ca 08 63 65 54 c1 ac 57 df 87 -f3 66 41 52 68 8c 6a c7 2e 6b 88 f5 63 7c d7 3f -16 69 89 c8 29 09 fb 67 bc 1f a2 e2 d5 23 e5 1c -91 8f 2b be c1 d7 52 02 af 24 0a 61 cd 2d cc 55 -5c ae ae 9a 68 57 0d 77 81 0c f1 df 81 23 ff 41 -c0 - -# PKCS#1 v1.5 Signature Example 9.3 - -# ----------------- - -# Message to be signed: -0d fa 5b aa 1c dd b8 34 70 7a 5f 8c c6 ec e5 71 -a7 a7 fc a5 67 63 62 d2 b2 37 41 a9 57 0a e2 63 -8f 6b 1c 23 89 85 36 75 cc c6 cc 1b 4c 6d ae 23 -cd a7 1a b9 6b 5a 2f 22 14 57 50 43 3e 2d 6b a4 -27 6a c1 ff 9a 48 af c9 f3 12 f4 13 37 85 ca 5a -f3 74 66 74 31 9a 67 57 a1 64 e3 4d 14 98 bd 55 -30 90 2e 32 18 55 e3 be d4 08 81 f0 05 42 25 6a -a2 1a 42 fc - -# Signature: -01 d1 95 41 69 af 58 99 3e 14 77 2a 94 f1 9b c4 -79 24 cc db 2e 90 ee 43 36 fb 6e 08 49 8a f4 da -26 51 a2 b7 83 6c 31 3a 57 c8 61 b5 51 84 ec 3b -15 fa c8 14 53 51 be c5 a7 27 0a 3a a8 69 4d b4 -e9 a9 2c b9 32 7b b7 a4 f7 b7 0d 24 4e af 9e bf -a9 ed fd 4d 54 78 2f 3f 97 26 26 95 b9 7d 41 6e -52 7b e4 ea 2d ef fe 6e b5 e0 6c da 6f 0a 7e 41 -66 77 ac 0f d6 f8 19 5d 4c e2 89 70 d2 ca 41 1a -2b - -# PKCS#1 v1.5 Signature Example 9.4 - -# ----------------- - -# Message to be signed: -16 7e 79 56 8c 77 36 69 0c 3b ed bb c8 d4 24 eb -53 6a 12 85 5a 60 cd b1 0f 94 ba 11 23 17 e9 17 -a1 b7 d6 fc fa a3 43 8d 68 ee 09 fd 47 - -# Signature: -02 9a 2b 90 86 14 ed 7a 5f ab 72 f2 a1 c8 e5 48 -b6 f8 b8 b4 5b 75 81 fd 24 51 fe 45 a6 22 fa 0f -08 dd 0b a2 e8 f3 c4 17 20 1e a0 27 79 10 18 4f -37 6d a8 03 fa 72 c5 0d 39 be 28 82 52 6d 1e 85 -df 9a b1 79 75 76 4a cf b2 07 36 6f 6c d2 c8 b1 -36 a9 99 da af 48 f1 c0 8a 9e a1 f0 84 25 c2 1b -65 41 80 da 4a df 10 9b 4b c5 b8 17 dd 67 bf 7d -aa b4 a3 84 03 4a b4 ad e6 94 89 8c fc 27 2a b6 -53 - -# PKCS#1 v1.5 Signature Example 9.5 - -# ----------------- - -# Message to be signed: -0d 03 f7 12 84 f2 e4 83 24 2d 92 3f d1 e1 53 bc -16 0f 0c dc 2c 0b 76 f1 bc 2c f7 d1 be 9c cc 7f -af a6 af c3 90 34 01 84 09 cc fd 16 28 a7 0b 35 -83 33 bd 96 ee d3 ad f3 14 2b 17 60 bf 8a 9b b1 -9e a2 47 3a 2e d8 5c 91 cd 5f 0a 5f 2d 46 32 d6 -17 64 19 fa 1d 8c c8 8b 67 08 47 77 11 ea 49 58 -a8 39 01 fe f2 84 f5 a6 c5 02 79 8c 8b d0 a3 50 -f2 ea 83 ed 18 1e b9 70 d3 0b 78 13 4c 8e 1d 64 -f0 d1 49 5b 70 17 24 5f a6 9b d5 74 27 f7 49 20 -ba 0e ed e9 cb a3 4e b2 22 76 b0 f2 74 13 ba 3f -0d a8 eb de db 9b 0c 80 0e 44 48 1d 01 e6 bb b0 -df eb f9 a1 5e f6 a7 02 0b 2c 55 ee 02 79 11 79 -6f 66 f4 3d d8 46 02 1f 8d 6f 7e 01 bb 80 2b ac -09 fd e9 b9 04 be cf 99 90 e6 84 e6 56 9a ca eb -3c c6 4d cf 5d - -# Signature: -04 22 79 1f e7 b4 3e 1f 31 9a e6 7d 91 8c 59 87 -e6 39 36 81 a1 86 1c 1e 71 dd 6f ce 19 23 71 0d -bc ed 43 01 fd cd 4a ad 8f 4f c2 7d fa 02 a9 4d -91 bd 96 20 0a ed 8b 3c 5a 96 ef ee 7d 11 af 90 -87 fb 81 90 5c 5d f2 c2 4e d7 ed 63 d5 fc 22 ba -bd 6b 9e 3b 57 cd 25 41 9a 78 17 e9 36 16 e9 34 -54 b9 58 53 fe 52 04 b5 8c 09 8b 46 de 0b 3f 01 -f5 82 76 32 48 c2 90 b9 e8 09 69 65 24 42 a4 d8 -e5 - -# PKCS#1 v1.5 Signature Example 9.6 - -# ----------------- - -# Message to be signed: -4a ca 96 3f 14 ac f6 a7 9c 51 08 1e f2 57 16 66 -71 e3 b4 5f ee 31 24 07 ba 3c f6 d7 11 ab a1 ae -25 a4 a8 ba 45 48 19 a3 91 2a 31 2e 99 0f 1f a7 -4c bc b7 27 77 f1 c7 c6 63 a2 d1 cd b2 c5 c0 07 -4d 45 16 f4 87 17 de 14 03 e8 ff 7d 0f 9d e7 c7 -c8 51 f3 e3 51 16 8b a6 c4 14 be d5 d4 2b ae 52 -7b 72 4c eb 83 4d 79 ba cf 70 2c 56 a6 23 c1 68 -80 87 dc 9d e9 53 8e a7 c7 c7 61 cd 2f d5 78 f0 -dc 3f 55 2f fb d4 af c7 f4 ec 71 22 fd ec 1a 3a -2b 10 4d 53 2d b8 1c b9 14 18 54 d5 7d cf 54 b7 -56 01 a9 05 fa ed a6 5c 2a 7a 7b c2 b0 29 ad 12 -dd 7a 6a d1 b4 0b e0 40 28 b4 b5 b6 37 30 ef 98 -44 73 f0 c4 82 14 89 93 c3 6b 44 e5 4b e9 a5 f2 -34 e7 43 29 2a 12 a3 4b f2 ff 73 b7 f7 98 - -# Signature: -04 26 43 c0 3a da 72 4e 2d bb 19 cc 07 ad 0e 75 -22 28 b9 d3 6f 65 3c 6a 9c 0c 29 35 6c f4 c3 f1 -ca 19 37 76 d5 fe f4 3f c5 54 17 71 66 69 de 9a -b2 ad dd 3e a8 8a 90 ae 93 9a 5e b1 10 13 e2 28 -ae 08 16 ee fa 4d d4 2c 6c 08 c8 78 bd 58 b4 90 -40 29 6a 86 3b fd 11 28 5f 8b bd 31 5b e1 6d 2d -65 d7 f5 e5 f2 6a a9 71 47 f9 5f 5e e3 6f 98 9a -a8 96 d7 f9 f1 b3 05 1f 82 42 44 f9 05 96 72 3d -11 - -# PKCS#1 v1.5 Signature Example 9.7 - -# ----------------- - -# Message to be signed: -a7 5a 45 80 - -# Signature: -00 4f e4 c5 d9 14 3c 85 1e 46 16 7c c1 81 57 5c -07 5e 69 b9 81 f9 c1 03 f9 d9 b0 11 ff 8b 29 ba -55 a4 31 87 ce 87 77 99 63 17 a0 3c 9d 90 af c1 -89 0a 9a de ec 8e ac 08 7f 99 b8 15 e6 eb 2b 87 -1d cd dc 80 92 24 9d 8f 51 3c 6c 56 09 fd ae 2c -fc 6b f0 1f cb 80 25 a4 f7 9b f1 2a a8 e1 09 82 -9a 0b b3 8a 09 d1 a3 93 65 e0 40 56 52 da e4 51 -e5 c3 29 8f 47 04 05 98 ec d7 0e 4b 40 33 89 bc -d5 - -# PKCS#1 v1.5 Signature Example 9.8 - -# ----------------- - -# Message to be signed: -7c fc 00 a6 43 ae 99 79 68 01 ee 3c eb e2 cb b1 -a6 be 1c ac 15 c6 48 d4 ba 33 01 29 38 71 a9 9f -7c b1 43 c1 28 c7 7f 96 31 1f e4 3a 39 01 df 2c -2a 5c 40 4b e8 31 46 97 e0 9b 2e 80 aa c6 ac 39 -97 1b be 0d bc 26 67 3f 31 95 9f 23 8e af d1 50 -12 e4 96 7d 33 55 18 92 a3 d3 65 1f e4 46 9b 2d -ba 45 57 df 89 3a b6 b9 4f 13 25 c3 a1 - -# Signature: -05 98 5a 4c ce d0 e8 fd c5 89 24 ed ba 9e 40 0e -67 48 21 4f 8d 0b 83 aa fa 20 35 0b bf 0e 68 76 -ca 5a 9a f3 97 0d d6 3b e6 84 f9 93 6d b2 82 ff -8b 53 cf 5f 1b b1 cb f4 47 33 01 f3 72 d9 94 8a -f9 39 1b 20 02 b2 be 3e 45 ff 24 a2 d8 99 ae 8b -52 b6 71 b0 4b ab 46 01 06 be dc fa c0 13 95 9a -48 18 95 98 42 7f b9 57 15 9a 6d 32 9c 19 f3 6c -a7 53 81 b9 35 0d 34 38 9c 16 e1 80 a8 51 e4 57 -cd - -# PKCS#1 v1.5 Signature Example 9.9 - -# ----------------- - -# Message to be signed: -3d 90 de 72 35 51 59 49 24 5f 49 03 68 c1 f4 93 -83 e4 4c 1d b5 1d d5 38 5b df f5 bd 34 45 0e 63 -ce 42 15 0b 44 1e f9 eb c7 29 a9 03 34 53 f0 a9 -39 9f f6 86 1f 50 65 b6 66 6d c2 0b 28 72 03 42 -8e 72 bd f4 cb 74 8a c8 d4 a5 5f 43 d2 23 5e 0a -b2 ec 2c f2 b0 6a 01 5f 41 e3 51 68 ac 7e 3c 56 -8f 2f 16 ef 57 28 b2 be 95 24 91 9d 36 76 d6 8f -53 7e fe f2 9a 05 af 97 cf ed 7c e9 ec 45 c1 2f -16 5e 4d 7a 4f e7 2b 99 ea bf 83 31 6c df 2b d1 -64 4b 82 fa 13 e4 ff c4 49 e7 6d 44 c3 87 69 63 -51 47 8b 1a 0f 85 96 15 da 90 5f 20 e6 8b 24 56 -5c 87 3f 83 4e 59 34 58 51 8a de 41 c1 42 81 74 -da 0c 47 66 3a 76 00 c6 50 25 01 5e 09 c1 - -# Signature: -00 98 13 b2 fd c5 1b ff 88 de db ec a3 b1 4a e5 -8b c7 e7 14 c1 d9 2d 74 26 e4 94 4e f9 3e f9 ce -6d 10 dc 98 9e af e7 34 8d 0a 95 f9 9f 56 94 8f -72 60 2a c5 e8 61 4f 6b 38 e6 8d a7 9f 48 e2 76 -8e da 58 64 cf f2 54 51 37 f3 cf 4d 81 a5 ae b8 -9b 21 07 26 74 ca eb a0 00 71 00 c0 7e f4 dc bb -d0 5a fb ad 9e 8b 30 d7 46 ea 36 0d 6c f8 75 d1 -0a 67 a5 7f 4b 5d f4 12 1d 72 97 a4 bd ce 12 8c -b5 - -# PKCS#1 v1.5 Signature Example 9.10 - -# ----------------- - -# Message to be signed: -20 e6 a3 fe 16 b5 21 b3 c1 e6 ae 99 3e c6 e8 49 -a9 c1 1f 20 42 a2 d4 ce 89 cf 0f 99 e1 b4 b9 47 -1d a9 a1 73 0d a8 85 1f c5 ab 3c 09 22 05 5f 00 -37 58 b2 35 c2 8d e4 08 80 66 3f cd 80 14 07 18 -15 dd 06 49 4a 54 7c ce c3 34 8e 12 d5 38 d5 df -b4 8f 80 7b 59 e9 b7 cd 81 f3 91 c0 2c 01 6c d9 -c1 a8 4f 9c 59 51 79 d8 f2 00 24 2a 56 68 18 2c -f2 cb a3 b9 fb 6e ad 45 1d 6d 27 d9 c7 36 15 25 -d6 88 b5 52 33 ff 45 29 1c c0 74 02 d2 92 de 0b -e8 3d 16 46 c4 3c 28 88 1f d4 55 49 b1 4d 12 61 -b1 2f 12 04 38 27 6c 6b 3f 98 f5 5b cf 17 80 bc -1a 91 eb 11 d0 22 9e 1d 78 68 d7 fe e4 9d 6b 91 -68 e2 4d e1 cb 4f 0f 22 e6 7c bb 15 69 20 41 13 -02 72 94 b3 7e c7 fa e5 8b c6 4e 82 5e aa 4d 56 -94 d0 05 8f 2c d4 c7 d2 14 18 da 3c 03 07 fa 2f -04 92 e8 b3 77 58 d3 ea 40 a4 e3 0f 60 - -# Signature: -01 f0 2b 3f 83 91 23 af f2 a3 f4 3d a5 aa a0 b6 -bb b6 0c 04 37 82 f4 96 2a 7b 9f 02 5c 94 8e 34 -32 2e 98 de 37 03 e3 bb 45 a7 06 a2 bb 05 09 be -d9 f4 10 52 8c 88 1a b9 a1 dc 01 97 06 8c 37 28 -c3 71 6d 83 81 d9 f8 67 80 fe 78 a6 43 4b 72 f5 -1e 69 cd 32 a7 21 3c ce a7 43 b3 3c 3c 96 eb 00 -42 fb 98 a7 0c 2e 52 fc 17 8a b2 cb 9f f8 bd dd -c1 04 6b 08 e0 47 ba dd d6 5a 45 a4 e6 53 39 d7 -25 - -# PKCS#1 v1.5 Signature Example 9.11 - -# ----------------- - -# Message to be signed: -6e b4 9f 8a bc 5b 49 48 72 0a 7f 42 f7 40 84 78 -00 22 e0 e9 f9 f6 88 86 d9 f3 4e 7f 7f 8a c1 54 -db e1 9c 91 b8 ed 38 ec 03 6b 61 42 12 ca 35 f7 -9e d8 74 57 9e 24 85 da c8 20 5d 0e 56 b4 b4 c0 -00 0a 8a 75 a6 d4 97 fc 51 19 11 1a 40 db 51 3d -f6 61 96 55 b5 8a 11 6f ab ee 08 2b fa 79 37 3d -91 76 56 87 10 11 24 18 87 f4 42 60 8b d1 eb 1d -95 d1 76 80 65 fa 63 32 4f ab 27 36 f9 22 70 5c -f2 89 fd e9 26 74 33 85 92 07 a8 bc f1 2d 17 86 -1c fd 06 2b 88 df 78 87 0d 5a 5e 91 13 1b 63 - -# Signature: -02 a2 fa 32 71 77 96 71 0b 52 b0 51 90 6c db 98 -15 b2 d0 36 6c 07 0a 78 ff 72 d4 59 42 d7 ad de -ae 7e dc 73 ca 93 01 f1 f9 fa e6 8a 0b d4 b1 df -05 a9 a6 71 f8 a5 b7 d4 5c d1 1f dc 0f 0b a0 9d -25 ce c3 b6 30 3d 9a 66 6c 76 32 64 96 ea 31 ae -38 86 a0 c3 b7 d2 27 62 ee a2 78 93 4b 96 a4 f9 -0a 50 1a d3 08 8f 70 2e 14 76 3c e3 38 46 e2 fd -be 6d 66 1c b8 2e 6d 98 9d f3 c5 ac 8f e4 0a 85 -62 - -# PKCS#1 v1.5 Signature Example 9.12 - -# ----------------- - -# Message to be signed: -45 cf ec 13 2e e5 93 f0 c3 f3 81 3d 3c b4 49 e6 -e5 e6 1d 13 de 52 9a e3 e7 1c 99 8e a4 56 35 9c -e6 6b 82 04 5b 7a c7 97 fe 96 98 5d ea bc 51 22 -53 0b 2e 29 ef c9 75 ee 96 03 b4 f9 6f 3f f4 e5 -9b 0e 35 a9 ad 92 f2 b8 67 79 4d 8e - -# Signature: -03 9b e4 8f 13 3a e7 f0 b1 9e dd b2 13 56 09 73 -a3 e2 a1 14 6c 79 42 f8 26 4b ba 5a d0 08 69 2d -11 38 01 fc 27 78 a7 e3 3a 9e 11 5e a6 32 e5 01 -88 c8 7b 69 e8 d4 d8 cc a4 8a bf 9f 25 1e fc 00 -17 b9 9e de e5 66 dc dc 0b c5 8d bf 6d 67 bf 86 -3d b8 a8 9a bd f1 2a 77 f1 b7 0d e4 39 d1 76 f2 -ea ad a5 46 4c 79 a5 84 27 0c a5 14 f4 8f 1d ae -86 78 ec f1 ac 29 6d 07 c4 68 98 ba d4 1a cb 19 -9d - -# PKCS#1 v1.5 Signature Example 9.13 - -# ----------------- - -# Message to be signed: -22 51 29 87 15 7c f9 b9 ab 4e 53 37 b0 98 91 d6 -3c ec 37 43 c0 f7 bc 9d 18 2e - -# Signature: -02 c7 75 7f 99 93 ef 8c 6d 60 a3 f5 ab ed ce a5 -35 df f5 5a b9 f4 f6 2d 12 54 bf 26 1d d6 a2 ee -52 da 63 49 f4 7b 9b 28 9f 1d 0e a3 e0 ff 08 f4 -55 fa 54 85 65 8e 42 17 f4 40 c0 8b 90 ae 4c 6c -c2 56 97 cb 83 35 31 db b4 74 03 25 43 10 0b 5f -92 b6 78 19 5d db fb 1b 59 c5 9b e7 c8 3d d8 17 -45 cd 4e 70 9a 0e 3f 79 8e ad 5b f8 66 2d a6 5c -10 57 cc 08 2d 90 50 50 c4 65 95 8b 55 5d 77 b8 -b1 - -# PKCS#1 v1.5 Signature Example 9.14 - -# ----------------- - -# Message to be signed: -ae 48 cd 83 f4 a1 f9 4e 17 19 21 96 90 c8 c6 f6 -73 7a bd 15 e0 d0 8e 7f c2 ea 0d 31 5b 45 be c2 -46 e8 45 bf 17 60 c8 6c 3f 82 d8 4b 1e 9d 68 dc -cc 01 d9 a7 d0 7e cc 6b fb ee d8 3d 7a d0 3a 6d -56 6a 89 bc 64 42 1e 7e b4 7e 52 c0 23 86 58 d5 -e4 c5 59 7f 12 5a fc 6c 83 3c 63 cd 6f 97 f9 dd -5c ce 8a 26 38 80 7c e8 a5 83 da 03 2b ec 81 a3 -8c d2 99 a9 c7 8e 82 54 f2 88 51 64 13 52 5f d9 -4a 9e 0a 95 c6 56 d7 3c d5 2a 4d cc 7d d0 94 7f -4a 00 5e ae dc cf d0 3b b1 71 5c 35 1c f0 59 cd -52 2c 7f 53 8c 16 28 e7 2a 05 64 4e 8f ff 50 92 -6f a8 68 2a 67 53 78 6f 2a a2 61 0a bf aa 95 bf -99 af 15 61 71 51 d0 bd 0f c4 6f c3 b2 9c be e1 -e6 63 b9 23 13 6b 5e 19 92 83 9f 0b a5 2e 44 fc -cb d9 f3 20 ed e2 0f 55 a4 23 77 0e 57 3a 9f b2 -b3 6d c8 f1 84 - -# Signature: -00 fb a9 f6 f9 59 b1 70 b0 94 6d cb db 98 dc 8e -84 79 c6 69 ad ba 6c 54 63 6a 2d c7 d7 f7 03 3d -35 04 05 d7 17 f2 d6 3d ae 65 c2 4b 37 db 1d c3 -e9 f6 17 43 af 1c e6 de 24 67 d1 85 ae f0 8d 2b -f8 65 f0 75 ba a6 a2 9c 58 06 61 dc d4 a4 8f 21 -ff 4e 7b 03 9e ef 1e 1e 20 ba 80 cf 20 ea b6 ec -de 60 fa 5d 37 67 a3 0e 6a d4 14 47 13 ca 49 fc -03 80 99 af 53 6c 0d 5f 55 c4 cb 15 33 53 81 be -a0 - -# PKCS#1 v1.5 Signature Example 9.15 - -# ----------------- - -# Message to be signed: -2c 8a 00 7b 60 30 56 d3 31 87 bf 52 ce f6 16 1a -a5 f5 f5 33 7f c3 59 d4 63 44 72 1d 94 5f bc 4d -24 0d 30 62 0b 29 6c 39 77 cf 45 c2 47 eb 2c 36 -39 40 79 98 3f 03 ad 82 39 9c 4b 28 6c 48 16 59 -10 b3 48 b9 5e f3 9c 43 bf be b3 56 6d 1d 1e ea -5a 42 7f 4c b1 68 1f 2a 7c 40 1f 3f 0d 6d 9e e7 -99 3b e5 ec 5d 34 a7 55 41 e9 f8 dc 7c 60 69 a8 -97 7c 9f 93 6e db e4 1a 4e f7 85 a3 ef 7b a0 51 -89 90 09 ed 61 2a 22 8f 90 31 67 a9 34 ee e6 9b -4f 87 36 c2 95 11 c6 bd c6 1e ee 96 08 a9 91 1b -ba 52 83 9b e9 9f 91 d2 ef 85 b8 cf 10 c1 d6 35 -08 08 29 ba 79 91 fe 2e f8 2e 2b ae 27 08 14 06 -e8 9b ab 75 c3 ed 19 e8 7a 4a db 72 ec 26 21 f3 -f2 58 5b 38 cb b3 6b 3c 0d 40 5f fc a7 a6 fb 02 -24 42 07 94 cb d8 d7 83 18 01 c8 81 e1 65 - -# Signature: -04 10 47 e2 42 b6 44 87 41 f2 8a 4c 8b 2d fe ca -cc 0f f6 61 9e 95 6a 6a 6b 10 cd d0 1e ed d2 01 -c8 0e 0f bf 7c 5b ef 52 a7 aa 99 00 a8 59 39 4b -47 e8 3d 08 b5 e1 da 03 a3 35 54 00 0c ce 17 c1 -d8 62 29 a3 a2 03 50 d1 16 43 a7 58 c1 16 b8 fb -f7 26 60 df 4c 86 ef 8c 1f c4 54 4c 3a e1 d1 fc -3c e9 f2 63 f6 2e 80 07 cd 7f f7 ea 8d 50 a0 82 -83 89 ff 43 1f c5 c5 62 81 6d 3d 24 b6 07 21 1d -29 - -# PKCS#1 v1.5 Signature Example 9.16 - -# ----------------- - -# Message to be signed: -7b 15 d1 a7 9c 7a d2 d1 2f 75 da 57 d1 4a 8e b7 -1f dd 4c 4e ff 52 43 74 1a cd e2 3c e6 da d3 08 -c8 1d 5d 58 0f f9 c3 f8 93 ff 12 4f e4 58 b3 18 -84 da f7 fc 44 66 d7 00 dc 49 3f 1c 7a 7d bf 62 -24 1b 17 e7 36 23 fa 17 81 4a b4 d2 c9 24 5b e8 -3b b3 cc 5f 94 44 b1 52 17 b2 44 1f 45 9c 00 b8 -2e 58 68 9a 11 dd 5c 59 fa 39 5d 1a 6f 9b 2c 25 -cc 84 99 92 7a b9 a4 98 28 53 36 52 ce e2 32 32 -97 2d 65 69 ee 56 44 78 66 f1 0e ba d5 4e a3 f0 -61 32 0c 6d 3f ef ce 34 55 2b 62 66 96 7b 05 78 -d6 c4 55 b9 ac 24 66 36 17 12 e7 d0 5b d3 33 2e -c1 30 d4 5c 6a 49 76 16 2c 79 7a d1 36 3f 49 69 -e4 ae 3d ed 6e 36 ea 2c d7 fb 35 66 09 be 03 1a -79 b2 94 - -# Signature: -03 02 52 90 b4 46 2f 9a b7 9f df aa 7b 1d 53 a4 -d1 27 96 c8 5a ac 28 de ac 21 27 c8 25 2c 2a 62 -39 5a 8b 81 9d fc ee bf 68 dd 4d bf c8 7c 1c f3 -d0 17 a5 3a 26 40 92 50 6b b6 fc 95 28 e6 f8 76 -78 73 6c a5 6a 14 a1 aa 26 77 a8 b8 4f 5e 03 fa -2c 0c e4 78 5b 26 ba 92 e7 5f bd c1 6d 8d 4c 7f -b0 bc 39 a8 8e 13 2e 1e 05 ad 00 f1 2f 07 27 06 -34 3f 5e b3 da b5 11 2e 3b be 76 ed 0b bc 7b df -cf - -# PKCS#1 v1.5 Signature Example 9.17 - -# ----------------- - -# Message to be signed: -7a 76 44 00 1f 80 13 c5 0f d7 17 b2 44 65 47 7a -bc 34 ba 9c 1e 53 ad 76 32 64 5a 6e f7 c8 e6 4e -8e cb 7b ca 5b 4f 09 b5 2f 4d d4 8f 8b b3 dd 33 -8c 78 18 2c e8 6e 8b fb 1c 68 a8 76 f7 32 16 63 -06 a8 ea 8c 0d 7c 21 ff 26 fa af 4a b4 55 10 36 -19 50 c7 6f 95 c2 73 0b 9d 3e 4d 6d 85 ea 25 58 -4a c9 67 a0 2b 1e 0a 26 - -# Signature: -03 b2 ac cf ef f0 63 bd 17 5e f8 ae 0c b8 5b db -80 0d dc 27 77 6f 8d 3d c7 e2 1d 19 9b b8 d6 5f -5b 24 2e 79 d4 5e cd cf f0 2e 80 3f 56 81 ff 04 -4a 43 b5 5a 9a ac b1 ea f1 67 84 83 8b 1d 5a 2b -7c 1a 36 4d c4 05 31 1a 65 55 05 7e c7 3f 0a 8f -4e 0f fc a4 23 02 2c a6 ad 74 46 9b bd 55 57 bf -a1 cf 4b 95 63 6f 53 45 37 ef f2 fb 16 af 5e 64 -71 82 4a fe 21 67 91 8c 89 ad e0 1d 52 ae a7 39 -9d - -# PKCS#1 v1.5 Signature Example 9.18 - -# ----------------- - -# Message to be signed: -12 d2 24 fc 10 a0 fc 40 95 3a b6 d7 01 c4 16 c3 -a8 23 77 2b ea fa - -# Signature: -03 2c b5 c8 d6 12 90 b7 66 e6 49 8a a6 01 49 4d -9f 06 6f 27 a4 7a 28 70 f3 67 89 43 29 1a b2 2d -3c 45 c0 76 e5 60 81 9d 33 f8 89 f8 cf ab 2d f6 -c6 3c 0c e1 ed 5c eb 51 54 70 77 c0 82 78 18 7a -82 72 fe c7 de 95 54 cd c9 16 ca 72 f2 c4 51 43 -f2 cf 32 43 c4 bd 20 0c 6e 99 3f 0d b5 b7 1d 4f -63 77 1e 24 9b 19 b9 97 a6 e5 a9 19 ca 10 0c 90 -fe a6 a2 d4 dc 68 81 c3 a0 e1 c1 35 53 83 cf bb -4b - -# PKCS#1 v1.5 Signature Example 9.19 - -# ----------------- - -# Message to be signed: -e0 d4 e2 a5 e9 8a 51 23 7d a5 08 5d cf 09 8a e2 -c0 5b 4e 16 92 54 ee 6d da 16 21 0e 4a 3f e8 1c -72 56 ea ef f2 8c 0c 63 d8 54 b7 84 1a 13 6c 43 -60 b2 15 dc a0 58 74 8a 4b fa 82 58 68 04 28 21 -99 2a 4e d5 a7 d5 8f 80 12 20 75 49 be 8c c9 ce -cc 85 01 b9 f8 02 83 0f 86 58 45 ce 2e 33 9b ec -28 05 96 11 a1 a0 0b 55 35 c3 c6 15 e9 d2 a1 39 -59 f1 01 5c 8b ad 2d 75 3a 59 a6 14 3b 3a 30 58 -ef 72 25 60 ff e1 c1 84 87 c7 41 da d6 1f 07 a1 -56 42 e7 26 ad 18 a9 84 87 5e 68 c6 2e eb ed cf -94 6f 13 b8 93 b2 80 8f 78 f9 29 48 07 d7 74 68 -54 94 e6 b8 90 40 ee e6 de 1b a7 18 ba 2e 08 2c -3d 5e f1 7c 10 28 cd 66 - -# Signature: -03 e7 83 bb 53 db b6 7c f2 19 5f c1 a5 7f 4b 74 -c9 82 03 b1 f3 d6 15 fe b9 20 e4 ab e8 37 58 34 -67 2f 4b 8f 55 fe f2 ac a8 b5 d4 0a ef e4 ef bd -aa c3 e8 21 08 d0 7f 2f 1c f8 c0 d4 df f8 1b 39 -66 ec 69 be 51 17 ac 1a a6 11 8e 46 0b 92 d8 8f -cd d9 4d 08 eb aa 53 62 e5 9d 52 00 4b 43 36 95 -14 37 da 0f 51 d6 3e 50 56 15 b4 b7 55 54 08 0b -94 89 7f ef 29 3a 34 c4 04 00 c4 f9 9a a1 de fe -35 - -# PKCS#1 v1.5 Signature Example 9.20 - -# ----------------- - -# Message to be signed: -64 b3 ba 40 98 03 c9 b9 60 c1 c4 96 2f 51 27 1b -c8 9a 40 bd 40 5c e5 bc dc 88 51 d9 7c 9b e5 e5 -b7 46 4e 50 d9 9b 6c f8 ad f8 ff 83 2b 73 7d e8 -b6 ff 1a be b8 9d ba e9 3a 90 63 94 87 80 6b 05 -96 cd 31 68 60 f6 8f 00 27 a3 50 3e 15 89 67 af -df f4 69 07 68 17 fc 7d a3 22 3c ca 1e 6c 48 97 -3b 57 0e 0b f7 4b b8 b3 96 54 37 2b 7a 1d 6f - -# Signature: -00 d2 00 eb a0 b6 52 2a fb 42 0e bf 16 48 8c 53 -03 52 c4 2d de 81 e7 64 c0 ca db 43 82 8c b9 98 -d0 a6 0b 23 b5 b6 95 8a 00 fc 25 53 e2 35 e8 57 -4e 4d 4f ec 9e 66 8d ba 40 de 66 61 ab e1 3f cb -84 c1 ad 15 c4 b0 cc 0c 6f 4f 0f 83 77 87 c4 32 -5f 04 5d 61 ee 2c 99 72 b0 1f 32 12 65 4e c4 26 -62 56 7f aa c4 0e 9c 0a 28 15 8a 2a 6c 31 f0 1a -84 91 26 df 9e 96 cb 82 09 be b5 81 d6 84 6b b5 -ab - -# ============================================= - -# Example 10: A 1028-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -0d 5f b9 9f de df 42 56 e2 8d 4b 41 d7 07 fc 27 -63 3e 89 95 15 f4 da bf 6b 46 27 10 ac 11 25 81 -fa 73 fa 83 69 58 2c 9f d4 52 5a 70 16 18 99 df -63 25 84 9e 5c 43 49 3e 13 35 4e 27 09 55 a4 3e -38 35 b5 99 8e d4 2a 57 5b bf 68 8d 69 ec 36 6d -2b a6 f0 50 4c 1e e1 7d c5 9b 7e a0 b4 64 0c be -cd 8b d7 96 2b e8 56 6f 0e bd 65 57 43 65 6a 29 -12 85 e0 37 bb fa 86 55 80 1b d0 31 4f 46 4c 56 -91 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -0d 5f b9 9f de df 42 56 e2 8d 4b 41 d7 07 fc 27 -63 3e 89 95 15 f4 da bf 6b 46 27 10 ac 11 25 81 -fa 73 fa 83 69 58 2c 9f d4 52 5a 70 16 18 99 df -63 25 84 9e 5c 43 49 3e 13 35 4e 27 09 55 a4 3e -38 35 b5 99 8e d4 2a 57 5b bf 68 8d 69 ec 36 6d -2b a6 f0 50 4c 1e e1 7d c5 9b 7e a0 b4 64 0c be -cd 8b d7 96 2b e8 56 6f 0e bd 65 57 43 65 6a 29 -12 85 e0 37 bb fa 86 55 80 1b d0 31 4f 46 4c 56 -91 - -# Public exponent: -01 00 01 - -# Exponent: -e7 6f 42 b4 74 02 d5 e0 f9 64 64 92 5a b4 b3 bc -68 94 30 0e e4 86 fb 70 ce d4 91 f2 d1 b3 67 80 -84 c1 c2 cb 96 95 68 a5 f7 7d ab cd 40 93 39 37 -a8 67 f9 34 fb 2a ea ae 6d 78 67 98 e0 d0 4a 10 -6f 54 5e 41 a9 c9 38 33 d8 1f d4 d7 53 53 17 9c -b0 bc a4 5e 79 aa c9 41 34 64 b0 36 7f 31 ac 5a -ca 56 6f 22 14 bf 51 46 a9 48 4b 87 e4 2b da c2 -b0 1a 99 67 03 50 6b e0 77 49 aa 0f be b3 b2 29 - -# Prime 1: -03 ff af 4a 61 21 d7 42 0c fd a6 4c 41 71 2f 47 -c8 f2 d0 d2 5b 17 e9 5b 35 41 42 84 69 10 af ef -bd f2 1e 74 23 e8 b3 be 44 ae d9 af 5e 49 81 68 -5d 3b 9a 1d 59 c9 b9 47 fb 9c 33 9c 9a 31 e5 7b -d9 - -# Prime 2: -03 58 31 e3 b9 29 3b cd a4 51 be 9d b1 91 97 48 -6a a2 e2 2e 92 98 65 0f 2b 7f f4 25 69 eb ec 33 -d2 0a 34 98 44 a3 3b ea a0 93 d1 43 4a fb 4a 04 -a0 4a ed d3 bb c4 b3 87 77 a5 5f e6 50 5b 8c 15 -79 - -# Prime exponent 1: -02 8e 91 d5 ab ba 69 dc 50 56 38 e9 f5 c6 9c 06 -f8 d5 5a f5 c7 4d c8 e7 8b 6c 09 4e 85 a8 27 f7 -d2 ab 69 11 b6 8c 6b b2 b4 54 61 d9 a3 1e b9 62 -b4 8b 12 06 c6 8d 18 ae 90 92 d6 e5 c2 2b 39 a4 -31 - -# Prime exponent 2: -02 98 04 e1 32 fa 3a aa 4b 15 26 bb 50 3a b4 d4 -71 f7 6f 69 65 42 11 a6 89 3b 0c 13 74 29 87 9f -cc f7 23 41 30 82 54 76 ac 20 d7 fb d3 8c 3e 24 -86 58 76 48 6e e8 a7 bf 99 58 45 9e ee 95 81 78 -29 - -# Coefficient: -02 11 97 5e 88 56 d4 ea 9d 1d df 87 b8 7d 39 79 -2f 1c f7 e2 f1 82 f4 a4 e6 91 e5 00 2b 10 a0 8a -46 dc a1 a4 f4 83 00 85 d8 d4 0b ea 1d ff 11 b0 -c0 df 20 22 43 eb 99 3e 58 0a 94 49 9b 9c ed d2 -be - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 10.1 - -# ----------------- - -# Message to be signed: -b2 d5 88 50 9c 2e ac da 28 1e 76 71 cb a2 fc a9 -14 ef 73 a3 ae a9 20 20 43 ea d6 b7 21 25 c1 b0 -d5 cc 15 41 46 20 d5 73 d7 ab 0b 3a 8a b6 6a 92 -df 87 0b 75 b1 c4 d6 8e a7 05 6b e0 41 9e a2 53 -e6 b0 8b 12 9e 0f 64 f1 0a bf 82 e1 67 f8 e3 e9 -28 2e 7b f7 1b 04 3b aa 2b a2 d8 75 6d 46 b6 d3 -6e 97 34 15 f4 f8 c0 eb 43 fc 60 4c ed 49 3d c0 -46 a2 5a 11 9b d1 58 1d bb 59 7c 3e 67 c2 fd dc -39 6d f5 d2 3b 7b a8 0b d2 e3 12 90 bf c2 62 25 -e0 09 55 a9 8d 91 19 11 a3 99 67 6f bb - -# Signature: -07 9a 7b 91 6f 67 41 17 f1 d8 77 f4 93 43 25 68 -41 48 d5 d0 b0 d5 c2 c6 15 6a 11 15 9b c0 bd 30 -d0 a7 35 34 dc 94 45 eb e2 06 d6 07 5e b4 ea 7a -7c 04 32 bd 44 b8 3c fa e4 68 5a 9e b9 a9 7c bb -fa 4e 82 f7 1d b5 1a fa 0d 27 cf 27 f0 60 9b b3 -f8 80 64 13 24 7d 5d 49 54 f7 89 a1 01 bf 39 21 -72 8b 48 7e 85 fa 3f d4 dc d7 2d 04 44 8e 42 d3 -ec 05 cc 47 5d 74 cb f7 65 c3 4e 3e c1 4c ca 50 -40 - -# PKCS#1 v1.5 Signature Example 10.2 - -# ----------------- - -# Message to be signed: -ca 25 18 a5 a2 24 b2 3d 42 05 d8 dd 7e b0 4c bd -cd 0c cb 82 bc 87 96 1d 85 9d 66 00 b1 ac 3e 25 -a9 40 7b 6c 06 50 27 c0 40 81 f4 45 a2 30 ab 93 -08 e7 55 f3 3a 75 97 73 be 6b 96 9e 0e a7 74 aa -6e 33 4f b6 04 18 42 75 f3 6a 03 1d ae a6 51 86 -97 79 5b d6 a7 d6 69 7b 40 6d a2 ce ce 15 dc 11 -3d 85 44 98 85 61 13 1d 4f c6 f6 e3 c5 80 d8 06 -80 7d f2 c6 85 65 09 54 2e 4e d3 9d 34 6e ba 15 -97 6a 8f d0 1d 79 41 b0 16 56 06 c7 61 76 64 9a -16 10 05 a0 - -# Signature: -00 be b9 21 ce 74 89 81 9d 2f 85 c7 88 39 a2 7d -7e 19 ea 0a 76 4a c5 31 01 e8 6f 31 70 a7 6e 31 -8a 7e e8 9b 1f 5e 23 e7 e2 db 96 66 eb 43 91 b2 -79 2a 57 67 ee 35 9b 5c 71 e2 74 79 10 c8 2c 60 -83 d6 d3 48 29 b9 6f a5 a2 ec 0f 62 f1 bc da 5d -78 f8 dc 3c 65 0b 94 e3 2b 38 60 da 5f c5 b1 7f -bf 68 7e c0 07 5a 9c 73 dc 1e 98 d1 f3 6a ae c4 -49 3f 78 91 e3 ab 08 e2 04 2d 8b 1e 46 2e 8c 4c -33 - -# PKCS#1 v1.5 Signature Example 10.3 - -# ----------------- - -# Message to be signed: -d4 33 d1 5b 2d 61 b8 6a c8 ec 0d ae ba 65 e1 1d -ed 3c 38 84 25 25 e4 b7 c8 e4 53 b0 f5 53 cb 4e -b8 75 a6 9d 78 16 f5 4c 87 79 3e 3a bb 79 fc 55 -11 35 37 b4 76 29 65 cf ee 58 6e 0a 17 99 78 51 -e3 dc 9e af 6f 1c 9c 2e 98 c9 61 3e 3b be a0 13 -ff 58 61 6b 2a b0 5a b3 24 a9 c5 ff 4c 5e fd d9 -90 dd 97 d9 16 93 c1 eb d4 c0 9c 73 21 16 c8 df -c3 ec 51 5c 20 53 2c ba 7e 47 58 c6 8a 69 cf a0 -ac 31 86 - -# Signature: -03 ae 3b e1 c7 44 6a d3 ef d8 ba e6 1b 3d 32 d3 -ef 15 24 82 b1 bf ee 31 2f e9 e6 be ee ab 8c bd -08 f4 c8 f9 cf 06 7d ea b6 ba c7 c0 fe cd 87 bb -ab c7 f6 79 8c 77 ef 1c 3f d8 bc a2 8c f9 ec e6 -56 79 5f 60 b3 78 75 ea be f8 21 53 a1 2b c7 fd -e3 fb c9 e5 e1 48 f4 e1 6c b7 2a 77 3d 9d d0 23 -17 f7 0b 33 91 40 08 05 e8 5e 7a 23 56 7b 34 aa -65 a3 5f 74 41 70 af fc b3 23 37 1a d2 ab 9f 1e -4d - -# PKCS#1 v1.5 Signature Example 10.4 - -# ----------------- - -# Message to be signed: -7d 0f 5b d7 90 0f 1e 65 65 4e 6c 7e eb 06 4c b8 -28 f3 55 d6 de 9b f0 d3 47 83 ff cb e8 0a b1 b8 -ae 07 b7 f1 e3 f5 a3 20 dd 9b 8b 76 be 0e 97 72 -de 19 a8 d3 - -# Signature: -09 e7 a5 30 41 71 da 63 8b e7 60 1f bf f6 e4 95 -36 f3 36 60 82 25 3a bc 1d b5 d1 b6 54 93 da 59 -5e c9 3c 37 f5 89 0b 5f 47 15 bd 5e 80 c0 bb c5 -c6 3b 74 af 2e 60 43 91 32 d2 52 13 75 0b c1 de -30 2e 3e 8b 83 da d2 de 0d ff c4 fa ab 40 56 dd -7c 40 5e 04 d5 94 24 53 65 9d 49 0f 3c 3d aa 7d -3f 11 70 11 81 6b 56 59 01 04 de 7f 9c 05 23 73 -e2 dd e4 14 49 04 27 a5 89 64 49 3f f4 5f 08 a6 -e8 - -# PKCS#1 v1.5 Signature Example 10.5 - -# ----------------- - -# Message to be signed: -d9 6a a0 91 c1 60 b5 52 b1 6d f0 65 8f a8 - -# Signature: -0b 69 75 4e d6 d7 a7 d2 d8 5b 2c 7a 30 6c 78 d6 -3d 0f fa 43 8f 43 be ec 3a 02 86 ce 57 e7 e0 f8 -5c a4 30 e6 39 08 c0 fa 58 4b a2 50 5f 8c 94 65 -6e c0 24 94 bb 03 2f 92 0c 4b 6b 8c 94 3e 6b e9 -2f 57 8a a8 cc df aa c0 a5 4b 8a 9c 0d f5 48 27 -1f 89 73 c9 ff a2 a2 0c 84 76 2e 90 17 e7 45 2e -5d 74 da 69 0f 75 c0 99 ab 91 e2 a7 96 3b c5 37 -f9 c2 4c cc 3c 41 8c 6e 98 58 61 d9 3d aa b2 e6 -13 - -# PKCS#1 v1.5 Signature Example 10.6 - -# ----------------- - -# Message to be signed: -56 f0 48 64 5a 49 fa 01 41 f4 d6 74 aa fc f2 ff -fa 83 f9 b4 52 f1 fe ed 43 05 7c ac 27 67 5e a1 -a1 41 d8 7f 92 f9 ce bf 6e e4 f7 8f 8e d4 c3 a2 -9d eb 72 97 47 b4 f9 8e 4c 75 90 aa a8 d5 6d bc -61 d3 8c b5 62 22 26 f6 8e 43 f9 c4 f4 c0 39 98 -ae e9 09 34 39 5b c8 40 c8 6d cc 88 74 77 6f 43 -03 9f 56 a8 9d 24 bd c4 b3 05 df 09 e5 ca 0c 05 -12 ad 6d 15 71 91 9a 3d b3 a6 bd 98 b7 82 0a da -08 69 d2 25 a4 04 02 7a cb 6d 76 7f c3 14 db 37 -7e 8d 1d b6 ef 0a f2 94 54 db 2b d4 c1 ce e0 13 -a5 97 43 48 6d 32 32 95 83 cf 80 11 3c da a1 0e -4f 2c ea 6c 4f 9f c6 e4 e2 71 6e de 85 72 7c 3a -fd 43 49 46 09 77 76 30 ee 33 63 7e a3 5c 9b 4f -68 8e 49 2c 3c 64 0d - -# Signature: -06 66 ef 71 e2 c8 a1 eb 1c 46 40 3f d2 3e 52 18 -83 ad a1 b9 bc 5f bd 35 3b bb 3c 3d fb 57 0a c1 -c7 21 fa f3 f5 97 32 f2 13 37 73 80 39 79 48 46 -2f d2 0a 3f 0e 5e 08 91 a6 b0 7c 31 b3 60 aa a9 -65 e2 f0 93 0e b3 41 ee 77 ec 43 90 65 c0 aa d9 -17 87 ab 6d 2e 6c de dd f5 54 81 65 1a eb bf 9d -11 d5 4b c1 13 26 18 3e bf f4 9b d4 0b df 76 d7 -ef 69 b6 7e a3 96 8f a8 49 03 2f b8 24 b6 dd 6a -e3 - -# PKCS#1 v1.5 Signature Example 10.7 - -# ----------------- - -# Message to be signed: -79 da 89 e3 55 d5 51 a0 e0 31 f4 fb 71 ab 6f 41 -44 c4 76 2e 07 d0 64 14 33 cb 5e c8 61 34 96 3f -7d 2c 4d c7 be b5 c6 d4 61 57 c6 c4 e1 4a 4b 9c -7a 2c 0d 46 0f 1f c0 62 ea 1b 4f 98 74 d5 b1 c2 -9a e2 f2 a5 b3 90 62 e4 12 12 e6 5c 85 c2 8e 76 -75 89 96 5d 17 10 ad 5b c7 6f a5 a6 72 9a 06 fd -49 6e 2e 09 97 e5 73 37 bd 51 6e 6b c7 9b e9 e0 -70 aa 7b 86 c2 dd f1 4f 94 98 5f e1 58 2a 29 2c -d1 39 34 b3 c3 8d fe 59 77 ed 1d 9f 8a d3 24 c0 -dc 07 e5 85 3c 7e 48 90 bf bd c1 a0 1e cd 72 c5 -ff 68 a0 2f 1e - -# Signature: -0a 06 82 f7 42 e7 43 e1 c7 da ba ac 61 8a 78 6f -28 ed 13 a6 58 7a df c3 3c 98 29 d7 52 c1 3e f2 -7a 00 c7 e6 d4 5e 27 17 1a 58 41 77 1d 78 69 8c -6c c6 67 78 b8 c0 93 38 e3 5b 9b 6f 59 c0 64 ce -b3 eb 20 ce 90 9a 5c 6c ea ae bb e9 3e 86 c7 c5 -ff 4a 39 17 f1 26 81 96 32 cf 96 fa b1 d3 91 73 -a7 ae 7f c2 ff 5c 0f b4 09 05 35 da db 58 d8 7d -0d a3 db 32 ec ec 13 71 8b 3a c5 c3 0b a8 02 e3 -8b - -# PKCS#1 v1.5 Signature Example 10.8 - -# ----------------- - -# Message to be signed: -e6 9a c9 43 3e 6c 28 ac 53 f8 03 4a 86 8d a9 88 -3e 31 9e 82 e6 bc 2e 49 45 5e 6e 4f 09 8b 53 f2 -87 a8 58 da 1d 87 6a 9a 5a 6a 9f c1 4f d2 42 38 -cd 4e 4b 57 31 07 7a 4d bd d5 03 8a 9b c1 f5 de -f4 3f ec 77 f6 7e b0 62 fa ef ef 7d 04 29 23 8b -25 d0 31 85 78 96 62 3a 3f 1d 37 bf - -# Signature: -08 a0 20 e4 20 98 78 f1 e6 37 ad 59 da af 83 5d -af 4c a6 64 84 47 94 c1 c6 48 f0 e2 23 3d ba 75 -48 bd 16 1f 0c 0a 18 24 d7 62 03 1a 41 75 72 84 -2f 8e 64 4a a9 3f 9d 91 dd 77 09 e1 6a 42 9c c1 -43 90 3e f4 f8 37 a4 58 39 6b ca c2 40 92 b0 17 -24 c6 fe 3d d1 ad 24 3f 3f 70 b5 ae 6f aa 09 f3 -70 ca a5 12 10 4b 91 76 06 0d f2 bf 12 1c bc e9 -19 8e c2 fe 45 a5 9e bd dc 46 75 32 b5 af b9 b2 -35 - -# PKCS#1 v1.5 Signature Example 10.9 - -# ----------------- - -# Message to be signed: -45 e0 90 56 a2 8e 4b 2e 7c 11 f6 5e 68 8a 1e 3c -33 f0 e5 2c 9a 03 6c 09 d8 1d e5 a6 da b5 8d 4d -55 cf 41 1b 53 ad 64 6e 83 a3 4b 0c 08 c2 21 ae -03 76 ab 76 a7 9d 1f ee 67 1a 58 44 20 56 4f 8e -85 2e b6 f2 d4 27 ae e0 a0 96 dd 72 db e8 50 7c -67 7f 8a a0 0e b7 c2 5d fb 0a 49 dd 88 a6 c7 84 -76 b8 00 11 b6 82 8b 3a af 46 47 79 44 22 ba 6b -d6 3b 7a b0 e7 da fb d3 6f 6c 41 de a0 3d 73 22 -35 64 96 94 60 d9 28 54 0b 73 92 57 e7 0b b6 8d -5c 65 3c 37 96 94 58 95 - -# Signature: -08 71 7d 50 86 a6 45 3b de ff 77 d4 c2 b8 56 e3 -ba 99 0b ab f6 97 01 df 6c a0 a3 b3 a8 1b 55 69 -7d 31 88 9d 10 0d 68 95 c9 7f 0a 56 b4 71 68 c9 -8d a6 2e 59 ec 79 d7 ae ab 2f 9a 57 07 46 98 8a -26 f4 23 57 6c 70 3f d8 41 ae 51 c9 c2 29 a2 e9 -c2 5f e9 4c 5b 6c e2 fa 64 54 12 be e6 59 fa f6 -09 a3 2e b2 c0 5b ee ab aa 4f 58 ca ac 31 33 e5 -ea aa 27 34 4d 30 ee ca 22 c6 eb d8 d9 e3 44 41 -0e - -# PKCS#1 v1.5 Signature Example 10.10 - -# ----------------- - -# Message to be signed: -b8 1c 8b c4 ac 1f d9 71 b2 1f 02 7e 06 f4 d8 7b -34 d5 76 9d 23 c8 59 9d 1f 15 7b 08 a7 f9 2e 34 -19 fe c4 c8 c1 b3 4c a4 63 c7 68 b7 2e 07 f9 da -bc 3c bb dd 8b 56 17 cc 25 28 75 00 2a 1a 13 92 -af 0f af c0 8c 72 11 75 8f 3c 04 20 50 ad 73 1b -63 6c 0e 83 19 1a 79 de 5a a2 cb 94 dc 8b 0b dd -e7 5d b7 d0 c8 ba fb 42 23 d3 47 b0 24 b3 d9 c6 -b2 39 61 9b 5d 8b 63 46 ea 86 fb 8f 24 c5 84 dc -1a 47 79 1c b7 c8 c7 eb f1 ed 43 8b 88 - -# Signature: -01 b9 f4 33 94 c7 cb 88 5b fd cc 3c 84 96 22 23 -e8 aa a9 4c 6c 9b 79 05 40 1d 24 f0 dc 44 3b 2e -8d 84 0e 28 a9 5f a2 2e 1a e3 6f fe 08 96 6f 38 -d3 87 14 cf 68 da 8d b2 37 64 b8 8c 4b b2 be 4f -d3 da 9c cd 1b 50 69 42 aa 9d 73 fc 09 38 2d c3 -30 83 14 70 6e 6c e2 7f 00 76 1f 3c 9b d5 4f a0 -e3 1c 96 71 9a fb f0 76 3e 35 ca d8 89 b7 2e 13 -bd 12 b7 6d 6f 20 20 fa f6 1d d3 d7 08 22 8d f0 -6d - -# PKCS#1 v1.5 Signature Example 10.11 - -# ----------------- - -# Message to be signed: -d0 32 28 83 e5 98 16 3d 72 20 36 da 3e 63 2a a6 -55 97 ac bc d1 f4 76 03 10 96 96 f9 b3 9f dc - -# Signature: -07 8d 17 ab 8e 6f f0 be 50 b3 53 9e b0 3a e8 f0 -90 3b 7a 07 74 81 78 1f b0 b1 f0 9e dc f7 78 86 -31 2a d6 c0 60 27 4f 0c 38 9c 16 31 40 40 c8 d7 -d9 90 9c b7 5d f1 8c 82 d6 2d d3 4e b5 9c 6a 87 -d3 c4 6a 7e f7 47 4a 5e 44 7f 77 44 a6 a9 2f 59 -90 ea ec 7b fb 00 84 4d 68 4d 30 7d db 49 81 89 -41 49 e7 52 bf be 2e 77 05 7d a7 60 54 69 af 7f -fb 67 27 a9 98 1b 94 39 ca a5 d8 0e 6a e3 b3 d6 -51 - -# PKCS#1 v1.5 Signature Example 10.12 - -# ----------------- - -# Message to be signed: -e8 74 2f 04 b5 65 4d 92 88 b2 31 a4 7a 36 58 39 -bb 01 be 87 - -# Signature: -09 b7 53 06 a7 21 2e a6 f4 7e b0 cc f4 e2 e0 d6 -f8 f3 ab db 9c dc fa ad be 51 92 2f 92 ea 62 62 -3c 58 ea 74 ea 1a 24 7c 9d 73 1f 2c 03 35 36 b3 -52 73 c7 17 49 5f 32 5a 60 40 5b d5 f5 e4 05 b6 -80 27 9e 75 21 60 47 87 40 45 72 16 dc 92 9d dd -65 de a5 05 53 55 46 e4 77 0f 82 11 b8 49 c3 65 -21 8e 56 6e 5b b4 1b fc 36 1b 65 cd cc b0 e6 04 -c9 ed b9 70 ee 6a 28 6a 1f ce c0 ae 9d 92 55 8e -ab - -# PKCS#1 v1.5 Signature Example 10.13 - -# ----------------- - -# Message to be signed: -a0 3c 2b 85 fd e4 64 68 d1 c5 06 37 b0 0a 72 dc -fc 32 c4 16 31 73 9c 06 02 45 f5 3e 57 c6 6c 51 -76 6f 24 ea fd 93 e6 c6 67 43 48 05 91 bf 14 44 -6e 04 0b 67 a4 f8 46 99 57 6c 2e 14 63 ca cc bc -b0 73 e4 b7 ec 6d a6 c8 cb 41 d4 a1 23 c7 48 cd -7e 83 d2 61 e5 4c 2f d2 bc 49 5b c4 c4 4a 78 f9 -82 00 34 03 09 2e c6 96 0c 08 8e 2b cd e3 48 a2 -e0 e5 5a 4b 4f 42 ea b2 29 b9 5c 38 3f 21 13 ed -6c d1 f3 f3 16 7d e3 d2 8d 36 2c 8d 78 b2 eb 6e -31 62 0e 34 b2 f0 f9 41 da cd f7 b4 b8 56 8c 6a -86 3a 55 1d 7b d4 a5 d7 09 3e da 69 e1 e2 80 56 -dc b1 eb 69 ae 03 ad 74 be 72 a7 5a e8 fb 56 a2 -71 25 ca 3d 2d b3 76 9d 13 d3 5d b1 08 e2 64 4a -7f 3b 37 93 8f ec 97 62 31 52 06 d3 0c cf d5 76 -ae 7d e0 76 98 69 e5 04 4d 07 64 6c f7 8c 64 a4 -86 48 0b 0f d4 2c c7 b2 46 - -# Signature: -05 8d a5 49 4c 4e 98 aa 12 1f 67 f6 5a 2c 86 54 -25 a9 e6 00 2b 22 3f 03 88 80 97 53 57 3b 4f 33 -4d e4 5d 8f 00 07 25 5d 11 2d dc 84 db 26 67 00 -e4 40 b5 a8 69 00 c3 d3 d3 5b 02 4c 18 d8 a2 5a -58 00 22 6d 0a 56 d8 38 d8 91 9e 6d 5a 87 30 d6 -19 49 90 15 ec 46 65 c6 3d 77 80 83 a0 42 dd 4f -05 2a 1b bb 5f 40 80 cb bb 41 fa 94 5b ad 6a 74 -77 9f 68 07 25 e4 7a 08 a0 51 4f 35 0f a5 ad f9 -0a - -# PKCS#1 v1.5 Signature Example 10.14 - -# ----------------- - -# Message to be signed: -c4 0c 70 f2 6d a5 69 48 6b ac e7 85 da 32 e3 37 -a0 eb 94 fb 3a 0a a4 09 c5 77 01 75 c8 e8 cb 2b -aa 8d 2a 1b 98 46 c3 7d f7 d6 71 03 6d 5e 91 - -# Signature: -05 25 61 28 af ba 1f 55 d8 1f 79 ea 33 87 91 47 -a2 4a d7 77 93 46 ee 79 8b 21 1c 24 71 53 ea 38 -d2 6b 21 70 65 f6 1e 01 10 b5 3d 72 cb 64 93 4d -9b 1a d1 b3 de c3 32 09 2d 25 8f 0c af 1c 4a ee -8b 23 e0 9b ab 0f 0c 27 88 58 b4 41 d0 8c a3 ae -9f 00 aa 9a 3f 01 8f 7d 9f a9 8a 18 df 0d 24 84 -7e 56 7a 47 f5 77 9b d1 79 3a 4b 02 52 f2 ba d4 -0c 9c 4a 81 30 1c c2 8c 26 09 d7 bb 33 37 e9 7f -14 - -# PKCS#1 v1.5 Signature Example 10.15 - -# ----------------- - -# Message to be signed: -9e 6d cb 11 e0 e8 47 71 39 fa f0 41 a7 4e 2b ed -64 3a 62 ad ed ac 7c be f3 65 ec c4 3a e4 e5 82 -60 bc 72 46 23 bd 63 42 dc 66 0d 66 14 2e a6 36 -80 71 5f 52 2f f3 cd 4b 63 6f 84 aa 9d 75 fb fb -c3 84 10 7e 43 00 4d 98 6f bc e1 a2 7f 7e cc 7d -02 39 2c - -# Signature: -0c cf 23 4e b4 80 08 5d 92 0d 37 d6 87 96 5d 2f -d2 e4 a4 f3 bd 3b f7 dd c1 6b 5d 62 a6 90 32 74 -20 7c 6f 90 83 6e 29 ff c6 3a 57 f9 81 30 c5 25 -23 25 19 c7 08 f0 dc 8a 12 55 ab 55 db 1a 2b 9a -bc 11 06 16 02 07 5f f6 f9 7f 90 92 79 6b 98 87 -1a 6c d5 d2 61 7d dc 9d 25 5a 73 00 c9 10 fd 21 -0b 14 a9 81 e5 a0 e0 c6 bb 2b 04 5f a9 75 68 98 -b9 3b 8a 63 45 44 d7 7a fd b1 cf 0e 79 58 f1 1a -43 - -# PKCS#1 v1.5 Signature Example 10.16 - -# ----------------- - -# Message to be signed: -20 bc 46 3b 5e 12 20 a3 9c 84 e8 9f e6 71 6e ec -ab 55 55 f8 bf ce 60 cf b8 37 93 cc 40 a4 da 1d -22 c0 ab 4e aa 93 1f b7 47 be 35 f1 cf 6f b1 46 -5b ef 1d f2 76 0f cb 3f 70 d3 e2 96 e7 b2 70 45 -0d ff e2 d5 88 c4 39 6a 5f 6f 1e 63 87 aa 86 97 -1f b0 ad 24 df 55 04 43 dd 12 2b db 2c f3 c9 ed -61 25 fe 55 ce c9 91 cb ae 8e e1 56 2a 8c 0f 4f -36 4f 8f 0a 80 cb 30 fd 99 44 0b f6 55 f0 80 4f -92 96 8c a2 e0 1c 0d 5a bb 4e e2 67 63 6d d4 f5 -11 a8 d3 29 41 16 21 6b ed c1 08 86 45 e4 65 d8 -e1 98 b8 af e1 cd 54 24 b4 2a 53 3c ed 19 8a d5 -97 - -# Signature: -05 1b 71 42 66 06 6b bb 81 9a 2a 38 05 a8 9c ff -46 18 75 c0 95 f4 f3 89 82 d1 af c2 ad 2f 14 24 -50 b8 a7 52 94 7f 03 1c ce 2c 9c 34 0c 8a c9 f9 -f7 a5 48 b7 cc 17 e4 cc 52 56 96 ea 0c 87 53 a1 -e1 5b cb 98 5d ea ec 77 6f b9 e7 d9 f7 58 62 f8 -98 35 23 d9 f8 71 c6 3f b7 56 1a c7 1c 37 6b f4 -95 d4 32 38 59 bd 14 18 8f cd fb 4b 37 ab cb 5d -c1 a5 8e ed ea 7e 0f e6 2a c1 6e 20 8a ab 4c ee -26 - -# PKCS#1 v1.5 Signature Example 10.17 - -# ----------------- - -# Message to be signed: -92 da 26 0b c2 13 b7 2b 48 a0 57 53 50 3d 00 a1 -db fd 02 ac 7b 9f d4 4d 24 01 ea 7a d5 8a d1 86 -1f da 53 63 29 ae 41 73 c9 16 80 05 b9 66 2c 05 -cb ea 47 ad 86 4a f7 cb 16 60 2d 3d 18 34 71 bc -98 bc c6 2c 6d 00 d3 34 bf f5 b9 0c fe 7d 7e 12 -d0 7f e7 d4 cb d9 dc d3 c4 c2 34 90 be 8c ba dc -08 c9 17 79 80 37 3c 79 eb 4e ea 6d 81 a6 be e2 -27 0b f4 20 f9 19 79 ad 3f 27 1f d6 8d d4 28 3b -e8 14 10 92 8c a4 5b 9d eb 58 d3 ae 98 b2 f4 fc -a6 21 25 95 0b 5e e1 28 db a1 05 c3 5c c3 98 d1 -5e 74 2b ba 92 69 7b 5c 62 b2 67 ce 01 14 1c ec -ef 80 75 07 de 29 c4 85 30 5d 0a 99 09 43 23 0d -8d 9b 72 52 ee 0b 19 56 de 84 5f 2f bb 28 38 78 -5b 47 0a 7c 20 53 db 39 6b 31 5a 30 d8 a7 f9 1c -ff fd 03 e8 a3 9b a8 bc - -# Signature: -03 e2 3f 86 52 37 4d 48 d3 81 c3 78 35 3e b4 7d -90 64 cd 70 8e 1b 9b f6 88 70 4c 04 c0 09 00 88 -46 e6 a4 7e 0b d2 e3 0c 33 40 f5 d4 e1 9d 2d c5 -d8 89 0c 8f 01 04 dd 6f 5d d6 ca d9 c4 d9 94 84 -09 c3 cc 0b e6 70 71 9d d0 48 41 80 89 1c 93 5b -99 79 db 8e b4 68 a2 3e 4e f4 60 29 f3 af 14 57 -4b d1 0b 47 3e dd 9b 12 7a 30 6e 51 24 ad a4 02 -c1 48 f5 1b 52 e7 e6 28 bf ac ec 3f c2 54 3a 0f -92 - -# PKCS#1 v1.5 Signature Example 10.18 - -# ----------------- - -# Message to be signed: -86 03 a5 62 2a 2d bb bc bb e5 33 30 e9 08 d5 a2 -5f 6e 67 a5 1e 07 68 d7 c3 c3 fb e8 b9 2e 8b 1b -36 dc 00 74 3c e3 3d a0 f1 c8 cf b0 0d 63 ed d6 -b2 25 2f b6 72 13 97 d2 50 4b 30 ed 1d 29 3a 82 -e2 44 c9 51 bb fc 24 29 8a 42 ff ee 26 e4 56 a7 -be 10 5c b5 e3 7b 3d 25 de 28 bf c0 10 42 c4 a8 -2c e8 70 45 54 87 e5 b3 0e 26 f8 d5 39 8c 86 12 -6e - -# Signature: -08 22 fc 22 a9 cd 87 7c 09 b6 f9 2e 80 17 cc c0 -28 d5 37 99 67 c7 d0 4e f3 2f 86 9c 7e f6 7d 59 -3c 77 45 f6 29 d9 3d f2 60 03 8c d3 33 ea ee 92 -35 9f db bf 84 62 3b 7b 55 14 23 5b 83 06 27 2f -4e fd 13 a6 70 0b e9 28 9a d5 4e 57 d5 2d 1f eb -b4 6a 37 af d6 95 94 2c 4c bc fd 37 68 f2 82 1e -88 8e fa 0e 2c 5f d3 c9 c4 2c c3 55 50 d7 95 5c -db d3 5c 8e f8 58 1b 41 f8 dd ab 26 18 26 2e 3d -ff - -# PKCS#1 v1.5 Signature Example 10.19 - -# ----------------- - -# Message to be signed: -06 7d 4b ec b0 3e 1e b2 75 ae 22 50 7a 77 a5 39 -6e 71 9b 5f 00 b1 05 95 0b c7 99 8e 08 03 da 57 -a4 de 08 a4 07 8b 9a 00 d2 d4 6f - -# Signature: -09 10 8d 44 57 5f 61 4a 68 3e e4 d7 8b ce 1c 58 -f5 24 36 87 cb e9 c5 48 34 60 b6 5d f2 36 92 7d -bc 78 c0 64 39 ce 1c 7c 51 97 39 c8 f8 95 00 82 -d9 56 d6 0f c3 64 5b a7 af 8e 78 89 54 70 63 1b -b4 da 00 c0 1b 98 2c c1 1c 68 d2 65 0c 7c ae a4 -a2 6e 21 0f f4 b1 ca e1 db 50 5f ce a9 29 34 87 -b2 07 31 78 ca 24 5c f0 ca 23 56 ba f8 65 54 6b -54 af 95 35 ba b1 8d b6 79 ef 56 27 09 29 79 c0 -a8 - -# PKCS#1 v1.5 Signature Example 10.20 - -# ----------------- - -# Message to be signed: -88 4f c5 02 c8 82 48 49 47 8b 2e ac 1e 7e bb b7 -ca f2 8e eb 48 89 45 86 02 ec 70 35 81 d0 5e f9 -b1 a4 22 0b d2 f9 22 f2 5e 46 4c 88 07 01 c8 a4 -5b 1d 1f ab c8 66 2e b2 49 40 04 26 c2 22 62 38 -eb 8a d0 f9 06 9c 90 f0 01 82 77 44 80 25 a6 41 -80 ed 55 d1 af d2 7a ff 4f 00 70 2f 71 5d 29 10 -00 0d f3 92 5c 70 10 ff 11 7f 6d 8d 2a 81 67 09 -48 9e fd 29 a4 5c 59 23 17 7b f9 2c d0 bf 6b 94 -74 5d 34 8a 14 4e 98 74 0f 72 22 6a 3e 2a 9d 41 -7b 7c 1f d8 f8 95 f5 15 c5 c6 d4 06 a7 2b dc cd -39 15 2c 30 fd bd da 0e 62 82 3e e9 df ab 34 32 -e6 64 2e ec b6 98 7b 90 46 e0 40 a4 78 a4 df 64 -8d ef b3 01 6a a4 43 d0 67 a1 fa 41 55 55 53 74 -f8 ba 32 5a 8b 55 e4 d6 b5 fa 09 0e eb ae c9 c9 -2e 26 1c c0 4c ea a4 8b 3b ed 7b 3f 87 d3 - -# Signature: -0b 41 b4 12 19 71 26 15 9e 9b da 1a 24 62 c8 a4 -fd 3d ff dc 6e 98 e4 db fc 06 cf cc f1 6f 74 fc -b5 23 38 af 14 ed 39 36 e0 2c 1d 7e 77 23 6c c6 -a4 89 f0 0f 08 98 52 de 5c c4 25 b4 50 94 a0 42 -e3 85 46 4b 64 c3 b2 ff d0 1f 19 a0 1c 2c 03 81 -f7 58 a6 73 65 d1 e6 5a 70 7b 13 4e 3f 8a 93 16 -b4 aa cb 7e 85 1a 5e ab 3c d8 11 bd 45 22 dd 14 -1a 00 15 7d c3 fc af c4 15 4c af 05 93 ca 62 10 -2e - -# ============================================= - -# Example 11: A 1029-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -1e d7 ee a9 40 5f 50 7f 94 16 23 a1 7b ea 71 7b -86 0d e4 4c b7 76 87 b8 b8 5a 6d 7d 1e f4 f8 62 -8d 25 7c b9 42 38 c6 25 ba 25 d4 6a ae 59 39 60 -af 79 f7 5e 28 ab 63 ac 3c ac 48 20 b8 2d a1 cf -75 0d 6c 93 0d 6b 82 78 54 aa f6 ca c0 c1 7b 80 -b0 29 f5 d3 19 cc ca 66 5c 56 94 f5 4b a5 f0 96 -f4 54 34 13 ec 4c 5e 97 cc 1d da 89 d2 af d4 28 -57 87 59 03 2a df 92 89 50 65 ba af e8 8d 2d 8b -61 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -1e d7 ee a9 40 5f 50 7f 94 16 23 a1 7b ea 71 7b -86 0d e4 4c b7 76 87 b8 b8 5a 6d 7d 1e f4 f8 62 -8d 25 7c b9 42 38 c6 25 ba 25 d4 6a ae 59 39 60 -af 79 f7 5e 28 ab 63 ac 3c ac 48 20 b8 2d a1 cf -75 0d 6c 93 0d 6b 82 78 54 aa f6 ca c0 c1 7b 80 -b0 29 f5 d3 19 cc ca 66 5c 56 94 f5 4b a5 f0 96 -f4 54 34 13 ec 4c 5e 97 cc 1d da 89 d2 af d4 28 -57 87 59 03 2a df 92 89 50 65 ba af e8 8d 2d 8b -61 - -# Public exponent: -01 00 01 - -# Exponent: -0d 93 80 72 b1 6a 02 f5 d5 0a 15 ae eb eb 5a fe -43 18 74 48 2c 6d 18 fa 7e f3 16 c4 7f 4e d6 d2 -12 4c d0 e4 7e b8 9c c7 58 73 74 57 6c dc cb 3b -ba a1 95 f7 b5 31 13 93 69 b5 6f 9e 2f 53 ae a8 -ac 7a 97 e1 d7 45 8f 52 6c f7 d7 10 c4 90 2a ae -df 99 7c 11 94 b8 7b 62 cc d8 da b8 ff 5b 67 d4 -0f e8 3d e1 b8 2b 91 60 9a 7c 5c f3 92 29 eb 3a -1b 2f 0e bf 0b 12 5c b8 00 91 a0 7e bc 77 9c e7 -fd - -# Prime 1: -05 90 a1 e5 18 71 07 fa ef 1e 0c d5 2f a2 dc ad -a2 d5 8a bc c9 e0 73 8f f4 85 0f 7d 2d ee 19 82 -3f 6e 3e 2c a9 11 b7 17 4b e7 0b 15 c1 b8 87 e0 -ae 15 10 21 22 42 2f a1 58 b9 8b 0d 38 21 15 24 -5f - -# Prime 2: -05 8a dd 02 9b c9 7e cf d1 d0 db 26 be 45 ee 8d -3e 54 bf e6 36 fc 4d a6 66 dc f2 50 ab 2c 2e 96 -56 62 16 b8 a5 17 f1 0f 75 b9 8f de 6c cd 8a 58 -e8 fc 58 2e 78 74 90 e1 95 8f 7a 0f da 82 ad 68 -3f - -# Prime exponent 1: -01 80 ee fd a3 f9 06 9a fa f9 37 a6 72 d4 a2 a4 -18 17 73 01 47 da e9 de bf c7 24 44 42 a0 cf 2b -ae 4f ef 64 c9 da 0b 8a b3 eb 9d c7 27 2c e1 2a -08 5f 90 98 23 55 96 e1 15 c4 2c 9a 49 cc 46 96 -29 - -# Prime exponent 2: -05 12 e1 4e 11 05 7d 84 8c 23 f1 6b 5f 46 2f a2 -b7 8b e7 fc bd 1b 6d 8e 46 9e 3f 69 9f b9 9b 90 -5e d5 fe cc db bd b6 1d 1b fd 5a 7a 19 0a 74 7a -fe 16 7c 37 56 68 07 75 ab 6f a4 23 3d 3a e1 ba -0b - -# Coefficient: -26 2e 28 23 16 98 be 32 87 a9 c7 06 f3 94 7b 7d -5c 2f 5f d2 b9 14 46 f5 e9 a3 15 44 d9 af f4 55 -a3 ec c6 b5 43 14 82 0c 2a 48 82 61 d9 f9 8d 34 -8d 9c 3d 10 02 e4 e8 28 7a 15 2c 12 87 09 65 60 - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 11.1 - -# ----------------- - -# Message to be signed: -84 55 19 dd 45 d2 dd cb c8 db e0 b8 29 54 c4 58 -c3 66 4d 88 27 4e 50 2d 27 91 46 b1 8f 6a 81 67 -50 e9 4b 4e cd ee 68 32 cb 35 df cb db dd 3e 5d -c0 64 04 d5 f0 c7 0e 7c 7c d0 e1 9f 38 bc 5a e3 -2c 7c d9 1f 94 d8 f5 67 82 39 7b c7 4e 6b 06 98 -27 ec 27 30 17 37 40 ce 4a 10 e6 48 c7 88 97 af -1a 89 e8 33 31 d0 f4 61 37 8d 06 05 28 73 f1 7d -9f fc e4 6a 32 47 26 07 fe 73 e4 a5 61 87 9e 61 -9e 7c 1a e8 14 e4 5e 1d 2b db 12 19 46 b2 ae b8 -56 39 16 c5 43 eb fd c2 c0 90 fe b5 56 65 00 a8 -ce 74 af a4 53 72 bd e0 c6 67 3a 7f 6a cc b0 ee -9d 57 bd e9 3c 36 dd c5 7b 84 90 aa 2d 68 58 5a -3d b7 29 7a da 6d 9b 3f 35 6d bc 74 d3 15 c5 fa -1a bf 7d e6 ce bc a8 3c 9d f7 - -# Signature: -08 63 a6 26 dc 42 ba f3 e1 61 c3 5b 3d e3 b1 ab -c1 aa 5a df 54 16 46 5d 4c 7b 6b 01 ae 2d ad 73 -f9 f1 58 eb 21 3d bc 36 0b e4 d4 7e 57 07 87 1c -39 c3 8d bb c9 6b 46 c8 f9 af eb d3 dd ac 87 16 -90 98 e1 a7 67 18 d3 54 cd 09 1c a3 52 96 a7 7c -21 d2 51 2f fe 65 e3 b7 1b 90 22 e9 cd 1f 7c 35 -ce 13 65 fd 1f 2c 2c b9 67 ff 4c 8f 90 f0 c8 ea -ef 0d b7 3f ed 00 e9 8c fc 83 f8 0c 67 b3 be 1d -33 - -# PKCS#1 v1.5 Signature Example 11.2 - -# ----------------- - -# Message to be signed: -86 8e 7c 4f c6 34 0b 6b be b7 b8 6e a8 9e e7 26 -5f 32 31 f4 8b aa 92 e4 a2 e8 ce 0f a1 c1 a8 c0 -fb 0a ca 94 4c 74 bc cd - -# Signature: -10 cb f8 71 7f 76 27 8f cc 8f c0 aa b4 6e 90 a3 -d1 80 c3 c9 2a 4a 83 eb 93 c8 92 0a f8 8b d6 50 -6b 40 73 45 3f 0b ef f3 e6 1e db b4 db c9 c9 47 -c6 9d eb 69 a1 ac 92 9e fc 15 62 5b 9e d7 cf 1b -c4 23 a8 87 5f 37 80 dd da 9e b2 fc cd 9f a0 14 -62 6a 7f cf 99 86 49 bc fa 59 53 a3 c4 3e fb cc -38 70 4d 02 49 19 df 2f c4 ad ea 39 e3 4c d1 5c -d4 f8 6a d3 f5 01 01 2f 6b d2 8a a5 00 2c 3b 41 -ba - -# PKCS#1 v1.5 Signature Example 11.3 - -# ----------------- - -# Message to be signed: -92 cf 88 0d a5 89 15 e3 aa 95 08 93 53 e4 61 84 -c9 15 94 5c 57 67 9c 1e 4b d3 82 5e d9 19 a3 20 -52 e9 78 6e 23 b9 42 53 9b 93 15 f5 81 da f0 b4 -1f a3 26 1b 96 7d e4 0c d5 d9 2a 48 24 f3 64 bd -1e 1f 51 84 4b 10 9b 14 54 13 4a df 23 4e - -# Signature: -08 82 89 66 ac 58 36 c5 13 da 4f fb 87 61 87 97 -94 3c 61 2e de 7e 12 b3 10 03 ef 17 10 65 b4 ce -dc 6a 80 b1 45 6c 21 b6 74 b3 77 9a d3 5f 70 17 -7a a9 2c 6e ac 0b 83 3a 96 7d 7e 98 99 0b 48 24 -42 05 db f2 6f 5c d5 7e f8 7d c6 fe 5e d9 99 cf -8c a7 5d c8 e6 26 fd 6e b2 81 c4 99 af f7 29 89 -ed f5 2e c6 f3 bc af 81 ec 5f 8e 82 30 b8 7e de -dc f7 b7 78 14 3e d6 c8 ce bb ac 9d e5 41 09 dc -f7 - -# PKCS#1 v1.5 Signature Example 11.4 - -# ----------------- - -# Message to be signed: -87 3c 47 15 90 2f f1 9d e0 8b cc b0 cf 26 37 63 -fa b0 16 d0 22 0f 03 27 b4 75 5e 35 4e b2 47 f5 -db c2 d3 96 98 9b bd 36 d3 1f 61 98 93 90 ca c1 -66 43 12 5e 63 e1 a1 ae 1f 1b c9 bb ed ac ce 67 -fc 1b 51 a7 - -# Signature: -05 25 9c 48 15 93 ea 86 d1 f0 02 ca 58 aa ee 93 -29 fa fe 21 8f 67 50 f0 e5 88 f3 3b 64 e7 08 fb -27 a6 fe 81 eb ca 8a da ec 75 7a 14 ff 55 a0 c8 -8a da 2c 3b 43 e3 9e 8d fb e6 76 89 43 65 a2 21 -0c 2a a8 1f 42 4d 85 29 c2 07 6b 00 c9 2d d8 c8 -ae 3b 78 0d 87 db a7 29 dd fd ef 7d 40 7f 85 4a -71 cb 68 8b 9f 03 c7 1f 3b aa 24 a2 a6 e1 cb 41 -07 74 30 9e 40 c1 3c 2b 26 47 38 e5 69 7c fd de -f3 - -# PKCS#1 v1.5 Signature Example 11.5 - -# ----------------- - -# Message to be signed: -14 b2 76 02 ec e8 f0 67 b5 84 83 af 17 77 c4 ed -10 b8 b6 4e 64 c6 9f 57 ef 88 9a 1c a5 d5 b5 d6 -51 c6 08 db 23 9d ee a1 50 ff 12 cf 50 c8 67 96 -12 f9 7e cb 09 f7 - -# Signature: -15 c4 b3 f0 81 a2 e5 8a f5 94 e4 2f d6 ac cf 1d -0d 61 d9 3a 5e 3a 84 cf 90 4b 98 d9 ad 71 33 61 -b7 84 b2 4d 92 95 e4 3c 23 be 93 ef 36 51 4a 9b -ac 2c 1b df 4e e7 32 34 36 76 3a 20 66 2f 2d b3 -41 d9 e3 8b ed 5f 12 c7 dd 18 bc 3b b0 fc ba 5c -00 50 bd 1a 2a 44 03 71 97 b8 c9 fc 2a a5 99 eb -43 c3 d9 67 92 42 c9 9b bc 49 b0 3b 98 ea ca 83 -46 28 72 59 e6 ea 2e 89 15 5d 0d d2 b4 77 80 35 -75 - -# PKCS#1 v1.5 Signature Example 11.6 - -# ----------------- - -# Message to be signed: -e5 66 e5 fa 55 6c 76 5b 62 bd 6e 37 45 21 f5 08 -fe 44 66 68 c6 47 4b ef 04 6c c6 89 4a 87 32 2e -19 31 e8 0d 9e d9 ea 80 6b 16 7a 3a f7 7f c0 49 -38 b5 54 8e fb c0 68 d4 f1 96 6a 99 76 25 af 31 -a4 00 7f 06 98 a8 46 9a b6 81 f4 d5 08 b4 a4 8c -8f e7 20 cb 5a 94 a7 f4 43 dd 5a 58 03 04 97 da -a9 59 a3 aa f6 e3 41 84 39 7a - -# Signature: -07 e7 c9 44 26 24 bd 26 6c c1 cd 1a f3 b8 f0 62 -94 dd a1 c0 77 67 fe 19 bc ed 6c 9e d7 c4 b1 ed -7f 26 e2 03 db 7f 3a 1b fa 57 da ba 6f 3a a0 60 -03 bc dc 1e 00 c2 d3 d7 6b 9c bf f9 68 49 b1 af -f5 42 d0 d7 af c6 e4 22 49 2e ab 0a b7 f8 e1 d1 -ae 0b 27 9b 85 19 45 b7 65 85 1b 9f 8a d8 80 dd -16 4c 11 ac 4a 57 f9 6a 0e 48 4b a1 6a bf 1c be -8a ac 09 0a db 6a 71 79 7e 13 35 ee fe 2a c9 98 -0d - -# PKCS#1 v1.5 Signature Example 11.7 - -# ----------------- - -# Message to be signed: -b4 43 c3 43 52 7b 30 d5 ff - -# Signature: -0b 3f 13 c2 72 24 d1 61 01 b9 c8 20 1f 1b 4f 85 -37 db 3c 11 6f 3c e1 30 be 0d e0 dc 0d d2 0f 77 -3c df 7b 7f 37 23 87 c4 b6 53 e5 dd 44 21 84 45 -74 11 a8 2f 8e d0 03 66 ec c0 77 a4 26 7c 9d 7e -56 54 96 63 23 9b 43 19 fe 49 9a a7 89 54 04 9c -74 3b bf 09 d7 7b 30 29 d9 18 bb 7b 9a 6a e8 0b -12 9e 41 bb 56 da d2 b8 a4 b6 f3 19 33 74 c8 29 -2f e0 17 d0 63 34 7e 91 cb f4 dd 39 39 c2 37 f8 -3c - -# PKCS#1 v1.5 Signature Example 11.8 - -# ----------------- - -# Message to be signed: -db 90 04 7f 61 5a d7 19 72 ba ed 0c 10 62 6e c8 -cb 18 c6 d7 5e aa e0 58 21 9f d6 19 54 26 d4 4d -5c 54 3b ef 3c 4c 14 98 e8 77 d7 c8 53 e5 31 21 -eb 31 57 00 81 d5 de 48 85 cb c9 25 a6 c2 23 21 -cc c9 c3 78 4e b2 19 e4 2b 7e db 92 88 77 60 73 -29 79 8d 55 73 9c 89 d6 d6 b3 f0 d4 30 bb bc 47 -22 ea fa 67 de fc 86 ab a6 e6 34 83 fd 64 99 b0 -3f ab dc 84 65 d9 8b bb e4 40 2b 02 31 13 5c 21 -24 3d 7e 02 ad 5f 7e 9e 8b 94 60 c1 2d de 2a 39 -5b 45 69 61 cc 3d fd 9a 12 f5 d9 35 9e 0b 3a 6b -d7 7f 44 65 5b 60 3b 02 55 db ba ff 8b c8 40 75 -9a 34 62 fe ce 0d 8d b6 e4 5e 2f e2 bb f8 b6 e9 -7b 3f ea c0 79 86 73 82 57 ab 9f 8c fa 79 5a 20 -19 2b 5e 2c ea 11 8c a7 62 25 2a f6 c6 eb 00 ec -5c 68 20 bc c7 c7 - -# Signature: -00 aa b0 67 d3 a8 63 3d 0b eb d5 91 ed 34 d0 67 -f4 71 8c d7 f9 b1 e3 5a aa 40 5d a1 22 2a b9 40 -38 66 92 1f bd 05 74 33 40 7a 4a ae 7e 26 c5 cf -a0 bc 9c 11 57 05 7b 1d a1 cf 36 28 51 87 19 a6 -03 f6 c3 c4 de a3 0b f4 9d b9 b0 68 af ec 69 81 -21 dc e5 d6 0d 93 a6 f5 63 3f c6 af 9d f4 c5 dc -cc 13 8c 29 4e dd 42 9d 4a fe 3b 33 78 86 82 55 -cc 53 78 8c f2 b4 77 45 d6 4a cd 88 5b b4 7d 2e -ec - -# PKCS#1 v1.5 Signature Example 11.9 - -# ----------------- - -# Message to be signed: -2b e0 06 7b 95 18 5b ad e1 18 dc e9 5c 57 02 9b -55 4b 25 e1 c3 95 19 f8 f8 90 73 b9 a0 4b 7e 91 -29 9c db 87 b0 bd 17 c9 f1 51 92 5c 75 6e b9 b6 -45 07 25 61 26 41 07 88 21 38 85 4a e7 d5 07 e1 -5f cf e8 47 09 45 40 e7 1a 54 7f 63 b5 90 46 7f -ad ff 64 7f 64 3e 1c ec 11 24 65 29 06 2c 9e 40 -88 92 f2 a2 0c cc c0 ae 45 ca 97 a4 7f ca dc 8f -ed e2 1a 24 71 11 67 70 6c c4 b5 d6 94 77 e5 a8 -a1 46 b9 60 cd 4b 17 27 42 7b 16 51 7b 63 eb fb -cf 84 d0 b1 ac 8e 7e 70 f0 44 35 75 22 b1 d0 cb - -# Signature: -09 76 81 12 17 71 45 44 41 01 33 24 3b eb a9 a2 -1a 6f 72 12 c6 87 91 5c 72 02 7b ba 31 12 f6 97 -05 42 5c b9 94 cb b6 d3 59 c1 46 b9 5d b1 44 64 -35 d4 cf 96 1d fd 5c 49 87 39 bf d4 be 6e f1 ad -d7 4b 81 b2 89 8a 4c e4 3d c3 7c b0 e9 ed 77 44 -cf 40 9b ab ff 71 78 85 42 ff d2 86 eb e5 25 5d -63 dd 7b d5 5b a4 3f 51 84 e2 48 d3 a6 69 33 cd -b0 69 91 ec c9 0e b3 9e e7 1d 65 c8 8e d2 4d 94 -4c - -# PKCS#1 v1.5 Signature Example 11.10 - -# ----------------- - -# Message to be signed: -a7 90 e6 ac 5d 55 6f b7 cf 44 46 0c 7b 9b e5 eb -7f 24 f9 87 ff 89 0d cb 78 40 24 1d 45 54 5b 71 -05 63 5a 1a af 44 57 e6 41 0c 65 ae ce 50 11 e2 -77 5e c8 53 0a 64 a1 88 39 e9 c5 8a 7b 77 42 4f -74 29 3d cb 9e 9e a8 73 6d 6b a5 8b 1c 66 53 d5 -7b ea ab 98 73 5f 7a f7 32 47 7b 9a f6 a3 3f f0 -75 c7 e4 66 39 d7 48 55 08 20 ba 6a bd 4a 9d 48 -cb 49 03 f6 5b 76 f8 14 c6 cd c9 5e 8d 9e 87 0c -24 4a 02 9b 29 4a 8a 5c 82 6a b1 61 f6 f9 78 d9 -f1 c0 3f cd da ae fb fa db 8c aa e8 4b c2 dd 33 -2e b0 49 97 d6 1e fa 91 e9 24 1e 4c cd 97 64 c7 -26 e7 66 ed 3b 03 38 d0 86 f1 03 2c 15 33 ef 59 -3f 88 fd 56 03 37 91 b1 d0 62 5c 6c a5 1e ec 27 -9c fb 6a e3 f1 27 00 cf 5b ac 27 1e 65 67 - -# Signature: -0d 1b 11 1c e8 de 1d 7c 4f 7f ce ac 73 df 70 aa -6e da 58 dc 32 eb 98 f7 8e 7f b9 bc 25 de 3e 6b -09 ab 8c ae 3b 20 26 b6 18 7f f6 36 72 e5 7d a4 -ac 28 96 24 45 d1 fe 95 1d 27 be 6a 6c e7 a5 80 -7e 13 76 13 94 46 e8 54 9d 48 aa 59 fc 22 33 54 -d1 21 fd cc 38 f1 d0 27 5e 41 86 92 27 00 ad c6 -1d ae 1e 4b e8 05 22 2a 1c f0 7f 11 0a 61 58 a2 -a2 62 58 f1 9c 65 7a 11 0c 0d 9a d2 91 68 0c 75 -96 - -# PKCS#1 v1.5 Signature Example 11.11 - -# ----------------- - -# Message to be signed: -32 af d1 3e 60 7d 87 b2 5f f4 0a 88 5b 25 09 f5 -21 f2 a0 a7 72 a9 6a 39 fb 3f 71 c9 63 84 b3 d7 -57 8f 48 fc ea 97 39 56 0a 65 bf b4 83 d9 60 8d -20 25 55 f6 6d 61 2d 16 b9 25 53 87 b4 e1 12 41 -15 ed 48 bf ef 8b 89 d8 dd fc 21 9c cc e4 87 86 -c9 e6 42 6a 92 12 e7 b1 6d 97 1d 27 8a 11 18 f2 -f8 6b 9c 4b bf 75 c9 c2 d0 99 e3 f6 65 48 f1 f4 -a8 a8 21 d7 27 44 98 f7 cc e6 ec 5e 2b f2 bf ad -2c 6f c0 05 e8 0a 48 ca e4 69 92 fc 82 67 a6 48 -0a cb 89 4c cc 9b 62 09 5c ad 97 db 70 d8 82 a1 -3f b3 85 88 c4 8c a1 90 f1 80 cb 3e 61 ac b4 e2 -cf d9 cd bf 85 5c 53 99 21 f6 8e 11 49 d0 54 7e -f5 9a f5 37 92 dc 66 0d a5 ef 48 a7 ab 89 36 d3 -d3 6e d6 b6 46 9e b6 fd 95 e3 af 18 2c 87 68 fa -60 04 78 54 f1 8f 37 41 c1 88 3b b0 79 26 88 ca -db 9e 4d f3 91 d9 11 45 b8 5e 2a e2 4f fd fe 51 - -# Signature: -01 a9 37 b3 cc 82 54 d5 15 08 70 9e 4a 4d e7 b1 -81 de d9 a4 47 b3 ec 8d ad 49 2c 39 79 52 df 7c -55 0e 4b 26 c9 50 17 29 9d 8d 45 5f f7 97 1c 33 -8c d0 14 df 78 e2 a8 aa 5e be e2 58 f4 92 53 d5 -1a ce 9a 49 31 9f fc 80 7a d7 0b 2d f2 c9 6d cd -b7 3b 48 ac bc 4f 6c 3c 2a 70 1e 7c 15 4b 27 9b -07 05 bd f2 54 8c 8b 36 11 b9 7d a1 ac 09 cd 12 -12 50 99 54 0b f7 ba 99 b0 8c 2f 3d 5f 6a ea 7d -40 - -# PKCS#1 v1.5 Signature Example 11.12 - -# ----------------- - -# Message to be signed: -5b 00 b8 b7 94 a1 0d 21 f1 b4 5e ca a2 0d f7 c5 -b3 52 2c 1b 1d b4 b0 84 b9 59 aa 4e 56 58 ac 54 -68 f6 e8 fb 61 2f f9 9f 32 16 b5 d2 1c b4 ac c0 -bb 42 ee fd b8 e8 2d 75 4b 85 d0 97 45 89 4a 52 -3c 01 62 d0 8e cc e4 8b 99 dd 6c 38 e2 bd 3d 53 -1c 85 62 de ec fc 61 52 36 9a ac f5 80 ea f9 db -6c 68 b6 9d f2 fb f3 05 3f 60 1f 70 02 2c 9e 38 -1d fb c5 90 99 c3 7b de 5a d8 9a 8c c1 ef e4 c7 -b7 d7 8e 90 97 e0 81 21 ed a6 4a c4 5c 32 7e 5e -da f9 22 d3 c3 5f 88 b5 2c 93 d3 99 f4 c2 38 36 -2f e9 - -# Signature: -0f c6 ac 1d 42 94 79 38 cd 25 86 d0 e7 fc 3a 05 -42 b9 af 12 d3 6e eb f9 2b 5d 04 9c 79 65 b1 1b -a9 cc bf 47 00 f3 45 60 91 11 77 b9 d1 29 6f 1c -68 e3 af 46 9f 4f 39 9d bc 18 9c 23 ea 74 65 98 -28 13 32 33 05 ed 6c 35 ff 9c c1 09 d0 a2 30 3f -e7 d3 29 ca 31 7e c4 b1 8e dd 19 c6 2c 60 a3 c8 -c3 10 6f 86 db d0 72 e3 e1 eb 87 85 28 8c 21 ab -ca c2 2e 0c 0d 41 f4 e2 3e 7f 39 4d 46 82 f6 ce -87 - -# PKCS#1 v1.5 Signature Example 11.13 - -# ----------------- - -# Message to be signed: -b7 50 ae 6d 4d 2c eb 92 14 05 34 64 8d 36 ef 25 -e4 51 55 f5 2b de 1b f2 6a b7 - -# Signature: -16 aa de dc a0 9e 06 25 60 c6 61 d2 a4 9b 0e e4 -d9 ce 23 90 7c 69 d1 00 04 f1 49 d1 03 c5 9c 16 -fe 7d 43 73 59 7d b9 ff d8 92 3a 77 a6 b9 43 b1 -88 c4 74 25 e2 a9 e5 30 41 3e fd b6 84 8d d3 42 -0b a5 3e f8 1c 25 c5 78 f8 d9 51 4d 93 fc c9 cb -1f b5 2f 58 d8 8a 57 d1 fd 3f e2 2d a3 10 ec ea -9e ce 55 e9 60 8d 63 ae 21 db ae a6 57 1b 78 fc -fd d2 71 bb 65 92 57 47 6b 59 95 68 7a 02 bb e7 -89 - -# PKCS#1 v1.5 Signature Example 11.14 - -# ----------------- - -# Message to be signed: -47 be 01 02 0e b7 e7 87 5b d4 fc c0 05 a8 2b 36 -fd f2 14 5e f1 32 e2 ed 16 2f f6 94 bc 71 58 9c -7d c6 d5 a3 f8 9d 59 7f 2d 2a a3 43 33 51 18 f6 -fd bd ee f2 3e 61 3c ba cc de 41 95 e6 64 a0 09 -4b 07 fc 0a 32 84 8d 61 39 03 1c f5 72 a1 e3 23 -c5 a7 07 b6 fa 2a ee f2 dc 87 2d d5 a3 e7 6b 13 -f8 ef 94 ad eb d4 e2 05 74 8e 48 5b 40 01 d5 d2 -a0 90 b8 9b 2e 64 74 c4 79 e7 b0 0d 2d 57 f5 86 -ab 76 b8 0f 79 5b a8 99 62 88 29 2c 3f 2c a5 1a -44 e4 e8 41 c0 37 07 e4 80 25 af 4b fd 0a b6 ef -eb 83 62 ed d5 d2 34 05 ba 0e 23 1b 33 24 e1 ca -3c 5d 63 9d 2c 9d 82 - -# Signature: -06 39 17 92 9b bb 20 92 17 ff 48 ed 4f 55 d0 7a -03 f7 6d 6d 94 04 8b 6f 71 31 0b 2c 96 e2 14 ab -22 0d 4e 45 ac 01 c9 3d cc 8a 5c 26 a0 2d f6 1f -fd b3 17 54 96 65 61 0c 84 bd b8 94 5f c6 bb d3 -8b ae d7 fe e9 8e b0 56 d9 f0 39 a8 60 d4 52 b3 -ac ac 18 00 a9 32 a2 8c 88 28 6a bd a8 de 3c b6 -c0 d7 94 da ab 7a 8b a0 11 09 33 b4 d1 de d2 39 -cb dd 55 7d 3e 5a 16 29 17 85 33 15 de 68 09 00 -a8 - -# PKCS#1 v1.5 Signature Example 11.15 - -# ----------------- - -# Message to be signed: -4b 9c 09 64 48 10 d4 b3 06 55 ed 83 38 bb 27 6b -62 4c 68 01 98 22 d1 fc 8f 78 86 1e 13 e2 2a c1 -71 82 1c fd bd 3f 8f 5b 8d c9 c0 de 73 2b 74 6e -1d 13 2e 5f 3f 14 9a 5a 86 7c 2e e4 78 e8 f1 4a -d4 b9 dd eb d3 ae 78 17 e8 49 55 b3 40 4b 09 43 -93 e6 1c a0 18 9d 05 53 69 b4 24 30 09 a0 f5 40 -3f 41 c1 00 23 08 c0 0c e6 99 67 19 37 ba f1 3c -78 93 d6 63 c9 47 fc 7f 84 07 1a 67 2e 5e 07 37 -8a ac 08 b3 fa f0 fc cf 5b f2 83 09 25 85 eb e2 -40 a3 00 46 20 b6 f3 ae b6 73 2b 7b 9d 8d 3b ea -fc 84 67 d1 f1 f1 c7 da 66 b1 bf 5c cc 14 5b 32 -24 24 5f ae 31 df b4 03 f4 93 c0 75 53 57 ad d7 -cb 27 63 71 32 26 c5 4f 43 64 0f 7a 67 0e b7 b1 -f6 e9 e7 72 f2 e5 14 17 a7 05 cf c5 87 3f fb 88 -a5 db 07 ec c4 ee 89 f3 30 a6 69 0a 88 12 - -# Signature: -1a 0b 69 8c f3 a0 58 b4 49 19 af 73 c3 de 32 8e -86 ce 9a 5d 49 99 e0 12 2f 41 4b 94 f3 2b 2d 8a -b1 e6 55 0c c0 d4 8d c0 4b ef ac 2c 67 a4 d0 69 -a7 20 8f 14 2d c2 67 b3 e3 8f 63 38 a0 b1 83 9a -93 a8 36 80 7d 18 1e 3f 0c 7e 87 7f b2 42 16 02 -00 5b ca 25 a9 c3 72 26 6d 18 e6 d5 00 c5 c7 ab -13 38 52 83 d2 af 91 9d 0b ba 0d cb 88 bf 7b b9 -97 2d 67 00 8f f4 98 54 7d 80 fc a6 58 ef e7 64 -a5 - -# PKCS#1 v1.5 Signature Example 11.16 - -# ----------------- - -# Message to be signed: -ec 9f f1 4b 9f 19 7a 2b 4f 24 94 8c 29 d2 f6 4a -64 62 52 23 dd b8 53 46 37 8c 2c 25 34 3f cb ef -58 5a 99 e1 ec 0b ef 0e f9 d0 9e ad 85 be e1 c4 -bf b3 5e 48 fb 26 41 1b df 18 0d c5 cf 31 7b 3a -34 83 71 c7 c5 f4 aa 6d 59 08 fc fc 1e a3 90 18 -cf 04 49 e5 5f 4e f9 94 bf da 40 4f 1c 18 9f db -8a 0a 5b 09 06 c3 d4 0d e1 e7 87 c2 db 4d 88 db -c2 10 b9 f8 01 f4 cd 9c 97 22 7e 9b 2f bc 28 11 -e3 8c ed d9 e9 f0 35 60 03 1d 4c 95 8a 76 81 ba -9d 7e a5 e7 8e 9b d8 bd ed db 41 56 79 0e f2 1f -b7 4f bc 41 58 c2 93 9e 4e fc b8 2e fd c8 81 88 -6a 5b 67 13 a2 4b 9b 5f 2e e2 5c cf 72 1a 64 e0 -f6 40 77 8e cb 3d 35 b4 b8 ee a8 ec e3 12 32 63 -63 10 ae 3c c6 b8 2b 8a - -# Signature: -01 3b 42 05 78 20 c7 3e 3a cf c1 df 4d e1 44 0c -65 8e 01 80 43 6d a7 18 5a 9f ab d2 6e b3 26 74 -b5 54 de 35 4d 1f 4f 24 e8 77 73 26 7f ed 9d d0 -fd 82 93 ea ca 4a f3 d3 a9 dc 51 8c 8e 49 5a 14 -76 95 11 1d 3d c1 77 63 f1 f0 2e ec 1e e2 9f b1 -ab 74 9c f3 0c 78 86 da 8b 2f 64 69 69 59 8a a7 -0f 9a 92 fa 4f 93 5c 7c c7 7b fa b6 98 1f 0d f0 -d2 85 cf b1 0d 66 58 15 39 f7 8d 03 68 ed 4f 93 -01 - -# PKCS#1 v1.5 Signature Example 11.17 - -# ----------------- - -# Message to be signed: -41 4c ea 8e ec 6d a3 c6 6f fc 84 70 f7 e1 47 60 -f7 4b f6 e7 5b 84 dc 98 fc 80 60 dd 3c 21 9e 76 -77 7d fa ba a6 e6 b9 29 55 37 9f 3e ca af 5f cb -8a a5 54 9e c9 cd d1 f5 d5 77 20 1b 8e 32 9f 72 -fa a2 bc ad ea ee 38 8d af 7d 40 8a fd e6 55 3d -24 17 86 0f 3c 8e 25 30 5d ff 76 db bd 95 16 b6 -86 8e e4 56 fc 1f 7b 58 d9 ed 18 a4 6e 4f c1 e3 -53 e8 d0 76 be a3 0b f2 47 c6 0e 6f 68 58 01 a6 -d3 f6 30 ae a6 ab b4 12 a9 41 ff a6 f6 07 f6 bf -b1 3d 90 01 27 bb ec ee 4f 98 a7 ac a6 92 08 11 -57 50 53 ab 2d 42 70 13 80 1d 8c fb c3 88 0f 14 -75 43 15 55 a0 86 fa 55 60 c6 e2 20 6d 9e e9 38 -13 44 b8 24 1c 1d d1 d8 64 48 75 3a f4 4b 00 a0 -c9 - -# Signature: -16 97 bb 23 e2 91 52 5f 4a 0e 79 26 2f 34 06 63 -0d 0d 6d f3 32 49 69 26 c4 e5 ae f9 6e 41 d9 55 -14 86 47 ea f7 90 69 6a f6 8c 78 eb 2a b6 2f f7 -19 62 96 e1 ea 88 6d f0 91 73 66 09 0b 63 0a a3 -18 58 b5 16 15 87 3f a6 bc 8f f0 88 5c 57 b2 e7 -7a 04 90 88 93 cc ef b1 41 24 03 99 1d 0d 23 c5 -57 d2 22 29 1c b8 51 7b 43 28 6e e0 05 67 58 d9 -c1 0b cd 69 bd 68 b8 4a 2d 1f 53 79 05 b8 a4 65 -e9 - -# PKCS#1 v1.5 Signature Example 11.18 - -# ----------------- - -# Message to be signed: -17 89 b8 08 b1 0d e8 d1 77 8a a4 3f 94 10 1c b8 -9f 56 34 30 61 a1 a9 43 bb 8d a5 5e e6 b9 79 e2 -7a fe ab 0e d8 ee 37 14 fb e7 0b 3b e8 20 60 3e -5c ea de c4 b2 2f 95 87 73 22 5d f3 aa d4 87 b2 -80 57 eb fe be 2c 87 93 da 38 46 bd b1 59 03 ac -71 e9 c9 3b 20 16 66 8b d9 06 30 1a 0a 7d 50 dc -60 b2 fa d8 75 9d 18 db 14 7f 20 66 86 5f d9 09 -50 a1 88 74 7d 9b 69 68 53 48 6d ea ab 8e 44 3f -ad 29 92 fc 8a 56 5b dc ba da b0 b9 33 3a b7 fc -db 9c 3d 0b cf de 50 a5 8d 2a ea f1 ce fb 0c 95 -f9 07 73 b2 fa c1 37 cd bc - -# Signature: -02 f9 97 51 c8 44 38 ea c7 f9 96 32 50 d9 ee 22 -fd a7 29 7b 6e 86 e2 a8 bc c7 a9 b5 ac 01 f7 90 -e0 99 11 70 46 60 85 8e a5 c1 62 72 c3 81 33 fa -da de fa 23 c1 02 90 8e 41 9d e2 eb e9 ac 27 19 -45 72 87 8e 2a 97 1f 88 31 c8 f9 17 e8 52 e8 51 -df 99 d4 df 01 8f dd b2 ce a3 1a c3 a7 b6 89 75 -e8 0a 99 7c b7 dd 4d 4d f7 57 bb 8c 3e cd 91 0b -cb 06 03 35 52 12 7a c3 08 11 77 39 a0 2c 20 17 -17 - -# PKCS#1 v1.5 Signature Example 11.19 - -# ----------------- - -# Message to be signed: -ff 87 5c ca 0e fc 3d 90 f5 6e 31 f4 bb 66 84 14 -89 4d 09 de 90 12 7f 84 66 32 43 10 e1 13 69 a3 -f2 f6 49 3c 1c 78 a3 62 b2 a1 4f b5 48 8c b5 6c -e0 22 73 9e 43 aa 76 3d 9c 1c 97 b6 21 cc 53 68 -c9 c0 0e 81 60 67 92 69 5f 9a f9 ab 63 3e f2 39 -ea b3 44 9d da 9e 66 07 08 9c 37 51 90 35 4f 7a -59 a4 b3 ef 75 22 9d 1c 47 ec da e3 3b 27 69 ff -55 42 65 5e 78 10 22 d0 c4 3b 42 1a 99 84 3c 3d -e1 04 22 ad 2f d8 9d fe 44 66 15 f5 19 2e 75 79 -d4 37 43 79 bb ff b9 - -# Signature: -02 68 91 7f 8b da ac 9e be 32 b0 dc 6c d9 d3 9e -fd 3f 88 d8 17 d6 6c b6 39 0d 7b 55 c6 92 12 21 -84 4a b8 c0 89 86 d3 f2 ea 49 bc 6e 3a 10 02 08 -6c 0b 6d f1 63 f7 9d 16 11 6a 93 c4 a2 cc 04 22 -c9 48 41 e1 e3 b9 45 ab 1d 25 3a b8 d7 d1 39 c9 -18 8b a8 30 27 c5 93 f8 3a 6f 38 37 0e 7f 03 79 -ff dd f1 42 7d 6f cc cf 60 83 31 3f 18 15 b5 de -d6 73 74 30 bb 4a 70 ba 81 48 48 34 d8 d1 d2 9a -5e - -# PKCS#1 v1.5 Signature Example 11.20 - -# ----------------- - -# Message to be signed: -e0 7e cf 00 e2 40 1a c9 8b 2d 5a e0 c9 b8 3f 21 -9a b0 27 a6 51 99 fd b6 34 59 6e 23 44 62 41 38 -72 95 32 49 53 28 f9 3f b3 a3 32 55 27 8f 3e c2 -60 65 ce 54 99 5d 42 41 93 bc b7 58 1b fe 1a b8 -95 7d 0b 96 1c 30 30 b8 20 d0 9c 9e 32 6c c3 0c -0a f6 42 66 61 54 - -# Signature: -00 c4 6d b4 1b 65 dd c7 1f bb fc 12 5a 4f 9b ab -88 0a 2f 0c 1f 04 1c 41 1d f7 d4 5d 1e 19 99 7b -34 8e ab ba 19 bf 79 b2 21 77 b2 a0 d7 3f ef a5 -00 83 62 ce 59 60 d7 ef 58 a5 89 93 e7 46 03 d4 -d9 d0 b3 da d4 b2 0c 82 9d 36 ef ca f5 7f 0c 4f -0c ef 89 01 5a 48 45 02 42 bd 02 0d 5f 52 d8 b5 -0e a1 3e 56 a1 aa d6 01 91 5d 60 ec 9a bf c3 07 -f1 8a f2 06 72 38 4d cc 12 f9 82 27 31 36 99 71 -40 - -# ============================================= - -# Example 12: A 1030-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -36 98 1a 95 ae 24 18 14 52 da 25 7c 03 8f 05 82 -14 12 d8 4e b4 7a 43 fc c7 ef 12 17 95 9b a6 77 -02 7f 70 86 d3 a8 5c dd 34 9f 92 0f 03 4c 02 78 -79 2d c8 a8 cf 0c 00 80 e5 c6 1f 47 48 83 c6 87 -9f 4d ee 0a e9 52 47 8a 5e e2 ce 4e 39 18 64 1e -81 3c b3 74 f7 b2 83 2b cd 6a ea 80 9d 25 4f c2 -ca 9a c5 a3 32 42 4a b6 5c 2a 26 12 75 d1 9a 41 -4b 61 65 00 d5 e3 73 70 63 15 f0 63 dc 88 5d 7f -b9 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -36 98 1a 95 ae 24 18 14 52 da 25 7c 03 8f 05 82 -14 12 d8 4e b4 7a 43 fc c7 ef 12 17 95 9b a6 77 -02 7f 70 86 d3 a8 5c dd 34 9f 92 0f 03 4c 02 78 -79 2d c8 a8 cf 0c 00 80 e5 c6 1f 47 48 83 c6 87 -9f 4d ee 0a e9 52 47 8a 5e e2 ce 4e 39 18 64 1e -81 3c b3 74 f7 b2 83 2b cd 6a ea 80 9d 25 4f c2 -ca 9a c5 a3 32 42 4a b6 5c 2a 26 12 75 d1 9a 41 -4b 61 65 00 d5 e3 73 70 63 15 f0 63 dc 88 5d 7f -b9 - -# Public exponent: -01 00 01 - -# Exponent: -09 ad 03 17 30 b6 32 73 55 ac d6 94 68 70 0e 7e -9b ae ac 5a 24 a7 ff c9 3b 29 2e b8 71 da 54 92 -46 a5 ce 0c 83 52 55 65 1a 28 c6 e2 f4 c7 61 af -b6 f0 6b 9e 29 95 fb b7 dc a1 74 d5 36 2f ae bd -c3 9a 72 c5 79 5d 1f 33 92 ec 08 8b 5d c2 a7 85 -b2 c9 c4 c6 e6 69 e7 23 b5 dd 0c e4 43 25 55 12 -67 dd 62 e0 f7 8d 24 24 ad ae 48 e2 49 44 3a ef -4a 37 04 10 db 9e 70 93 99 ac 37 cc 48 1b 59 00 -c5 - -# Prime 1: -07 72 0f 21 cd db 92 27 45 b7 1c f8 11 6a 83 66 -9a 0d db 89 e8 f3 f0 6c 34 7c a7 87 cf 10 ef 16 -93 bd fe 3a 0c 36 4c 7a 7e 89 04 17 f2 af 49 47 -5c 7d 07 6f 9c ee aa e7 6d bd 4e 92 15 af 45 69 -4d - -# Prime 2: -07 55 1c 27 e9 aa f1 1f 47 4f 1c 9a 14 bf 14 4c -fa ef e2 7f ca 4f 20 79 5d ec 85 34 c9 37 bb 00 -fe 16 23 5e cd 69 1f d2 3e 32 cd fb 8b 78 66 6b -b7 82 84 ae 15 d5 9b e5 ca 74 73 e6 2d 46 a9 da -1d - -# Prime exponent 1: -02 e2 2c 74 16 0a 94 36 bb 6c 28 3e f6 57 be dd -ec 89 b3 5d 5c a7 a4 93 f3 5b d7 71 e4 42 95 a5 -b3 c0 20 06 11 16 b2 55 ba 4d 8c 15 4e 3a 8e 71 -a1 a3 16 4f 26 82 d4 13 5e cf b2 ef 26 90 c3 9b -fd - -# Prime exponent 2: -01 d2 bf f5 8c bc dc c8 12 4b 31 a9 7e 8f 24 d5 -1f 70 96 b9 7f ec bc fe 70 c4 67 3b 00 ed c2 aa -34 83 fc b7 8e 0c 1d c5 81 81 d0 86 43 df e4 57 -d4 81 b7 cc 31 d1 b3 ba 27 e5 5d 0c 57 25 c3 06 -61 - -# Coefficient: -06 d2 27 72 57 42 ef 03 46 2d 1c f6 12 67 4a 78 -83 1d 61 9d a3 d6 40 eb 7c 71 c8 7b 53 28 69 72 -73 c5 f7 51 e1 4d 7b 81 c1 2b 6d eb 44 75 1a 92 -95 cb 67 1e 81 48 4d ea a8 3b 4d f1 fd 37 e2 ff -3c - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 12.1 - -# ----------------- - -# Message to be signed: -e4 b2 d6 0e 3b dd 27 81 6f - -# Signature: -13 fd 4a c1 ac 68 48 17 37 80 96 5a ff 5e 61 c5 -96 89 2b c1 47 76 0d 43 07 9b 5d 71 77 e4 23 d4 -86 f5 a7 3e 1a 16 b3 ce 9b 5e da c1 61 ea 6d 4f -6c 23 fc fc 3e 62 19 ca c5 56 06 7f fa ed 4a da -c0 a9 50 05 09 0b 89 84 4c 54 35 4d b2 2a af f9 -ee ff 9d a5 aa a5 49 04 25 e1 35 cc 0f 64 58 4c -7f 05 fe 33 6e 44 40 bb 86 92 86 d4 4a f1 57 88 -0e 3a 40 fb 06 72 5d 09 de b3 7f 1e bb 18 1c 8f -5c - -# PKCS#1 v1.5 Signature Example 12.2 - -# ----------------- - -# Message to be signed: -78 86 85 fc 58 05 d6 27 b1 3f 2f e7 fe 6f 7c 9a -b2 ca 49 44 ab f3 08 b8 6d 1a 0f 58 3d 17 b5 76 -02 43 9e 1f 2c 6e 0c 5b f7 81 70 50 13 38 b4 c4 -47 e9 19 7b 65 03 fb 73 eb ab f7 76 de fa e3 3b -dc dc e7 7d e7 9b 82 be 14 85 a8 aa 9b 82 09 37 -db f4 28 a2 05 50 96 6a 86 b6 2a 17 2e 6c fb dc -fe 0d 6f c6 7a 4d b6 22 52 fd af 85 f1 e6 bc 14 -f8 ab 1c 53 32 6a a6 a7 bc 5e ec 88 e0 b1 1d 48 -d2 b5 61 f2 26 06 50 10 2f f2 7b 57 b7 00 72 bc -c1 21 e3 5e 70 f3 78 0c 83 33 b5 bf 6b 08 fa 12 -08 26 0f 33 - -# Signature: -09 04 cc 11 ac 66 a9 83 7b 74 56 8b e2 50 e5 3a -e4 be f7 8d c6 7f fe e5 09 e5 d9 b4 72 58 3e aa -a5 6d 4c 9e e7 0f 6e 82 dc 99 8b 53 ef f1 27 2b -f0 1f 09 e5 26 2b 15 5a 6e 56 d1 50 40 03 e4 c8 -a4 6e 65 02 55 32 78 23 0d 6e 81 b7 29 18 43 ab -97 69 73 7f 3c 69 31 52 f1 7b f2 d8 bf c7 82 bd -b3 fa 0a ea df 0d 44 1e 1e 52 de a5 4b 75 cf 16 -5e 35 c3 82 d3 11 74 f6 67 9d 2f 21 b9 81 f4 13 -58 - -# PKCS#1 v1.5 Signature Example 12.3 - -# ----------------- - -# Message to be signed: -4e c7 39 3f dc 4b 90 af 8f ff ca f3 4e 84 5a 09 -65 6a ef 9d da 12 b0 34 2c 46 eb 04 91 74 aa 51 -1b 43 c9 4d 75 c0 e2 90 70 af f5 b4 14 23 a1 70 -d9 b3 e8 b2 12 24 aa bc 53 1d 88 88 6e 26 46 d6 -78 8f 1b aa d4 ef 4b 0b 4b de 4b 12 ce 90 52 08 -2e 2d dd 0e 3e 6c aa bb 0a 14 34 4b 0a 58 3f 40 -4c 1b 6a 3c 7b ca 8a 58 85 d5 f2 24 af 1f ca c3 -fa d9 37 0e 9b 29 74 e8 ca 62 e2 2a ce b9 - -# Signature: -21 a6 6a f6 27 ee 0d d0 5f e7 56 3c c1 d2 9c cf -6f 87 31 b4 1e 3d b3 95 97 89 3b a1 cf 37 5f 78 -17 88 fd f0 73 b0 b5 93 c7 6d f2 81 6e c6 de fc -22 42 21 ac 19 f5 be e4 4f c0 e5 d4 09 3d 34 68 -27 8f b4 2d 40 5a 07 04 46 53 22 da 4d 3a 7c a9 -c3 da 73 c3 d0 82 ae e5 67 b7 70 83 32 3e 75 bb -35 ed 77 e8 db 9c 01 b4 96 a0 4c c4 a8 99 df 35 -9d a4 a2 28 7c af ff e1 ed 63 cd de ad 87 6c 94 -07 - -# PKCS#1 v1.5 Signature Example 12.4 - -# ----------------- - -# Message to be signed: -90 77 60 db 32 96 9b 09 7d c1 24 ef 89 75 15 11 -a5 d2 30 59 6d 2f d8 a8 91 ff 00 f0 5f ba d4 5f -72 a4 5d 46 56 24 a3 ab 67 af db b9 e5 f9 e6 5b -63 e3 0c 2e 57 fe 7f 32 f3 99 01 10 33 dc 05 29 -c0 97 1f be 06 4f c5 ed b0 1f 84 cd 57 28 3f bb -bd 2a a0 29 44 11 0b 6b 53 4f 74 08 2f 56 be 34 -6c c3 43 bd 4d 0b 34 80 91 c0 05 c6 19 9a 7e 3d -56 88 52 47 b0 c1 6a 36 b2 35 b8 f5 d4 f0 0a 6c -6b b6 fe ed e8 8f cd 78 8d 75 ca cf f7 d9 56 87 -99 65 71 55 9c 05 79 6a 55 71 1d 77 46 bb 92 d8 -52 89 3b a9 06 75 f9 8b 0f 54 08 48 1b f1 54 3f -39 de 3d 0c 0c 1f 53 49 5b d2 12 dd cd c6 d0 e5 -7d 7a 3d be 24 20 8c b2 4e d4 1d e0 3a 5f 05 2a -9b 58 12 70 0a 5c e0 5c 02 00 d4 71 9c 55 54 4e -7f b2 94 d3 44 a4 f2 05 ef 9a 34 97 b5 67 54 7c -bd 1a 63 3e 2b 79 d3 34 90 95 - -# Signature: -0e c9 38 a0 d4 b2 a4 ed d2 78 d6 3d e7 61 c1 02 -e2 59 21 02 ee 05 db 1b 59 1e 0d 85 7b f6 66 84 -9e 74 cc 19 b7 e4 e9 cc 39 2d e5 39 f7 90 fc 68 -e3 b5 21 db 3a 1a 26 7e 5a 4e 12 19 75 2e 01 99 -e7 01 9a 24 85 54 c5 ba e3 11 2b ee a4 0c f3 e6 -4f 8a af 9b b1 e9 d1 c1 d8 83 3c 2b fa 31 b9 d5 -45 0f a2 49 29 7f e2 e4 6a b0 3e 99 b1 f9 c6 51 -d5 39 eb 53 ce 09 61 ce 60 23 c1 7d d7 38 3d d1 -2b - -# PKCS#1 v1.5 Signature Example 12.5 - -# ----------------- - -# Message to be signed: -bd a5 54 95 47 32 d1 d5 f3 94 75 55 c6 1f fa b8 -01 db cd c8 12 1d c6 81 91 27 c2 f2 2a 43 6d 20 -62 2d 1f 4a 44 7c 3a 77 b6 58 57 31 af c0 3e 77 -ba eb 70 9c 1b fb 90 6a 1a a1 94 9a b6 76 3a 15 -c7 da 5a 12 a8 f3 95 10 1e 64 6a 83 71 73 14 1f -2a 0c f5 36 02 4b 36 91 8c f9 db 95 b1 cc 40 5a -ef e6 3a 3a 93 bc 4a da 60 a0 f4 e0 72 9f 4d b8 -b7 6f d6 4e fc bc b6 6f 0e 4a af f3 - -# Signature: -07 26 2f e1 f3 d7 b7 79 32 cd b7 cd 96 ac 19 8b -93 03 eb 44 46 0f 52 98 e8 e5 2f e6 70 52 99 bb -d6 18 ef d0 b3 63 31 56 2f 20 b2 0e 86 6d 99 c2 -d0 4a 01 49 f5 64 dd f6 6b a3 19 f3 b8 48 25 39 -6e a8 b8 93 ba 5b 3e e5 e5 24 5c fe 6b 61 6e 30 -a9 00 bf 83 bb 76 3d 20 b3 30 37 01 ca be 94 33 -41 48 88 2a e4 ef 14 e6 d9 e6 c7 52 bc e2 53 bd -da 57 39 e3 3b dc 32 eb 08 28 28 c1 c3 99 c2 2f -ea - -# PKCS#1 v1.5 Signature Example 12.6 - -# ----------------- - -# Message to be signed: -51 76 ad 7c 99 be 4c db bb 5d 79 ba 5f 49 6c ad -9f 42 dc 25 d5 27 a5 d5 e8 e3 35 91 79 22 5e 6b -0e 43 66 6d 3d 82 ab 5b af 42 4c 85 c3 31 21 60 -6e b7 9a da 6b af ca b5 c1 e2 54 6c ab f6 a3 60 -03 84 05 ca 18 c0 08 36 67 - -# Signature: -06 27 23 8b 0b 93 e4 cf 98 57 13 d2 91 29 6c ed -e3 45 e8 8e 17 82 45 25 53 59 39 b3 f3 d5 ff 4e -bc 40 74 00 11 49 00 25 df ea ae e9 06 38 c5 39 -1e b4 4e 9f f3 70 45 7b 60 d5 de 80 c1 65 38 cb -38 60 55 95 85 ca f5 e3 33 2c 7b 1f dd 8f 45 fb -6e 35 57 f2 c7 a6 0d 09 9e 94 f8 e9 6b aa 1e 03 -19 9a c8 3c ec 8f 9c 16 bb 49 15 1a 88 72 cb fe -70 f0 02 cf 3b 53 b6 11 d6 cb b6 65 89 7c eb f5 -99 - -# PKCS#1 v1.5 Signature Example 12.7 - -# ----------------- - -# Message to be signed: -e1 74 71 93 64 f7 bd c8 6e 2f 0c 61 26 5b f8 05 -7d 64 9c ca - -# Signature: -09 77 19 54 fc 8a 1f ee e9 0f 60 c4 b8 a5 bb d4 -62 c6 34 37 9a b3 da 19 ff eb a6 e0 31 b4 24 3a -83 50 9c ee ed 6e 01 2a 91 63 c6 14 5c f7 05 02 -a9 fb 0c 21 db 31 fa d5 ad 14 69 5d e0 02 62 e4 -e5 67 09 5e 16 11 0c 6e 65 d6 bc b9 cc 02 e9 19 -f9 0d 19 e7 30 7f 44 34 50 3f 9f e0 2c 12 c1 d3 -f5 0c c1 60 08 6f e4 60 29 8c 88 12 25 bf f2 e9 -e3 13 da 38 44 44 be c7 2a 67 ac 34 44 67 e8 2b -66 - -# PKCS#1 v1.5 Signature Example 12.8 - -# ----------------- - -# Message to be signed: -98 cb c9 1f d4 9b 50 7c 88 7e 97 c3 cf a9 b5 9c -26 00 1f ca c1 64 87 f6 00 4f 0b 68 74 54 63 20 -02 d5 49 b5 46 1f f1 53 0c 0f 5f c0 9a ac c4 6a -da da 7d c9 d7 b3 e2 0f ed fe ec d8 f2 f1 68 41 -77 32 68 54 2e 86 43 1c 7f b4 d1 63 f3 1e 8e 31 -72 20 34 26 bc 0d 88 a2 3b 13 76 34 bf c7 14 01 -72 20 fb fb ec 88 8e 01 e3 ef f7 bb bd f9 3f 08 -3b 88 fd d6 40 7d 98 9b cc 5e cb 15 3c 9c ee 34 -10 fd 00 6b cd f0 7a f2 28 79 0f d5 e0 4f 5c 0a -1b 63 64 8d 48 60 9b f1 63 c6 fd 65 60 20 75 7c -3c 06 38 e1 b8 2d 75 e2 b4 b9 08 b7 e0 a3 c8 d7 -26 6b 80 1f 60 fc 2b 4f 31 7e bb 8b f2 2a b9 e1 -cb 7b 77 84 39 5b d7 b4 24 32 9e 86 1d 47 86 61 -f6 dc 12 98 51 5f 48 56 4a 3f f9 97 35 bb 90 03 -38 75 a2 5b e8 b7 24 f3 - -# Signature: -0f 2d 7a 5e ab 83 58 45 03 d9 4e bf 7d de 9e ed -49 41 10 be 94 ed 64 8a f0 cf 6e 89 1b 06 2d 2c -9d ef 95 87 55 b1 a3 08 48 8d 16 70 74 29 51 ec -00 60 54 5d 2e c4 3f e8 4a ec 89 01 ad f4 fe 8d -67 aa e5 7a 31 9f 49 1c 85 c2 1c d7 f9 c5 99 81 -3c eb 9d f8 47 78 ad c8 2a 33 c4 e7 67 4d 7f be -13 48 dc 20 75 51 10 4f 54 42 ac d6 84 86 9a c2 -2c ac 51 6c c9 88 7f d1 d0 21 ef cc 54 ab da f2 -b6 - -# PKCS#1 v1.5 Signature Example 12.9 - -# ----------------- - -# Message to be signed: -3e ed 6b f1 16 cb 31 e0 fd d4 c5 c9 33 58 ba b6 -8f bf a8 b5 c5 15 bc ab f9 05 1c df 95 a2 43 e5 -ee 68 15 15 4e eb 4a c1 0f 52 31 d0 49 38 13 e2 -81 49 e9 68 2b b1 c8 b7 7a 6e 13 60 b2 b2 c0 f9 -c3 16 1e 41 7e f6 cb 3d 9a bb dc 74 2c e0 25 fa -fc d5 38 c7 7c 4d 07 16 49 1d a5 4b cd f1 67 b4 -7a 61 a0 35 27 c9 6e 4b 42 bf dc 98 5b 17 87 81 -b6 92 0f 60 f1 1c d5 fa 76 66 3f 56 f3 19 f4 50 -cc 2a 7f 13 bc ce 59 e4 1c b6 66 - -# Signature: -07 67 3f a6 83 e0 98 bf a2 b9 55 b6 c3 4e 9c e8 -ec cc 5a b0 ab 4c 2c f7 9b 9b e1 e6 64 42 5a 7c -17 7a 47 d5 32 0c d5 70 86 f9 51 89 18 45 09 4b -1f bb c9 de e5 f9 b5 56 df 3e 61 e7 e6 69 73 d6 -3e 69 c9 da 17 29 6f e6 15 d6 33 c8 62 18 dc a3 -99 25 8c 04 f8 05 bd 04 d9 dc 97 a2 9f 39 d6 06 -ff 8e 9c 0a 13 71 aa ee c0 03 ea 27 48 95 ff 7b -a1 50 2b 28 f8 17 63 02 c2 4e ec e5 b5 28 d6 71 -00 - -# PKCS#1 v1.5 Signature Example 12.10 - -# ----------------- - -# Message to be signed: -08 4e c2 87 86 5e 8f e6 88 04 72 37 20 97 ad 5b -96 4c 40 a9 35 ee d1 be a5 1a b1 b5 bc 75 c8 46 -bb cb d9 54 88 e9 ec c3 63 cf 07 3a 90 b2 0b e8 -b6 79 36 46 22 f3 45 e1 22 d0 56 6a cd 34 a4 ae -11 24 45 25 a3 8f 47 dc 1f 92 b1 7f 89 ed e0 6d -83 6b 44 26 ec bb ea 79 33 ac 0e 84 7e 55 10 33 -b5 f7 ea 4e af 1f 63 f3 47 9d b7 ea f8 02 c9 96 -de 92 33 86 cd 15 b1 22 de 5a 23 98 d3 f3 97 02 -c3 e9 06 5c 32 73 95 b9 a9 95 fa 25 4d e9 c7 ad -b4 51 - -# Signature: -13 a7 f0 04 c0 a8 8d 51 3e 2f 1a ae ab 41 7f a0 -b2 70 2f b9 3b 82 87 20 cc d8 00 cb b0 af 5a 19 -65 72 5b 6e e0 58 71 17 cb cb 81 a4 63 18 52 1c -95 0d d8 46 9b d8 55 73 f5 d2 9d 86 53 03 eb ac -45 c7 f6 03 1c 6f 93 78 eb 12 b4 2f 05 09 44 31 -6f 0b 93 db 89 9b ec 93 7d 5d 0f 58 ed 40 70 04 -01 cd 32 65 a6 a4 4b 09 bb 11 a4 38 ee a0 77 15 -ef e4 2d e4 e8 80 8f 88 24 02 61 14 8e 8d e2 93 -ed - -# PKCS#1 v1.5 Signature Example 12.11 - -# ----------------- - -# Message to be signed: -61 07 00 00 7c 3c 6c b0 96 c9 94 d6 5d 95 c9 b9 -a1 47 c3 46 14 cd 72 2f 29 eb c5 e0 93 78 6f 79 -09 48 02 14 1a 31 08 d2 ec 8a 87 4c 53 18 7e b0 -d6 ee 2a 85 91 38 cf bc 29 22 15 06 d0 bd 89 b0 -f3 db ef 50 6b d1 ba 40 36 b0 f1 ec 00 73 32 70 -60 75 2b 42 8c fa 12 db 28 0c 53 aa e5 f3 e3 57 -0e 91 8c b0 9b 90 e9 84 7f 1f 5c a4 48 7a 6b f3 -ed ad 42 5f 78 40 7e cb e3 f9 bc 7c ab 00 75 66 -58 79 43 1c 6c c3 9e 0c 7e 67 00 60 67 41 8b ee -8d 0d b5 e7 db e1 2d a7 16 ca - -# Signature: -1e be af 85 d1 8f 37 84 0e 8a 3e af 07 d6 9f 52 -4d 88 3f a4 2f 29 1e 20 07 db 59 5a d6 93 0e 8d -5a 75 b4 0b b9 5b eb 72 d7 ce d0 38 17 97 47 e9 -66 1d 08 38 40 d5 87 dc df 21 c3 ad c7 d4 7a 01 -f6 ec a9 c7 bf 9e 2a 98 87 75 1b 36 d1 ab af 25 -a3 13 fc 29 d7 f8 34 d2 a2 48 29 85 57 5e 1b e2 -4b c4 ef 43 a5 7e f4 b0 a6 83 69 93 e1 1b 67 07 -85 04 e3 b7 9c 72 17 75 f5 b9 9b fa cc c4 8a 8c -34 - -# PKCS#1 v1.5 Signature Example 12.12 - -# ----------------- - -# Message to be signed: -da 31 f9 be 26 09 - -# Signature: -1d 2b ba fc a4 1c a0 6c 4b 81 1c b9 d8 36 96 87 -16 6d 14 d9 f9 2c 5b 98 fc 7c 77 2f 2d 75 d3 5a -5f 9a cc e5 9b 99 ef b2 dc b9 7d cc bb c8 6d 7f -d6 b4 ae 8b ea b1 e9 81 e6 c7 74 5a 1b fb 4c 1f -44 a4 72 b2 ad 07 d4 1c c1 75 15 b7 b1 4a 49 99 -0b 24 34 42 ff 2c 8f e5 05 b1 84 9f a9 91 ca cf -68 09 a2 0e 55 f2 af 77 98 87 0d 65 77 6f 1f 9e -e4 87 97 e3 13 aa 66 a4 7e 69 5f 3e 73 1b 2c 7f -30 - -# PKCS#1 v1.5 Signature Example 12.13 - -# ----------------- - -# Message to be signed: -f9 8b e5 2d 9a 5e 55 ad 92 - -# Signature: -29 2e a3 4d 3e 61 18 bf 8c d0 54 e2 15 17 e8 63 -ce 7c b7 dd 72 73 30 8f 7e cf ea cf 9b 45 75 83 -d9 b9 b9 7c 54 ab f7 4e 5a 5c a3 6a 87 06 7e 47 -d6 7a a0 47 a1 c2 ed 7a 23 d0 55 ab 4f 09 4a 83 -c4 39 ef 8d d2 d0 20 35 ef 05 62 d9 67 31 3d 81 -10 2f c6 8b 74 52 5b b0 e1 d7 96 2e b2 75 8e c5 -e5 ae ab 65 a9 3d 2e c8 e6 55 40 5a f8 8c 00 fa -35 f5 9d e9 d0 cd 80 45 ab d3 71 73 b9 fc 6c 51 -d8 - -# PKCS#1 v1.5 Signature Example 12.14 - -# ----------------- - -# Message to be signed: -f4 38 ef f8 4c 37 3f c1 27 44 a3 84 15 82 43 dd -97 f4 36 5e 87 d7 1e 8b 56 b2 97 91 df 44 ad f3 -49 e7 62 60 04 a2 c5 33 35 ec 63 52 cc e2 ed d9 -63 94 7f d2 39 38 93 c2 48 ba 1b 84 08 42 ca 77 -6c 31 72 9f 70 7a f5 04 11 00 1c 28 7f ba 8f e7 -25 02 32 0c 44 5b b1 43 fb 7b f5 39 4e c1 fb 2c -d5 01 59 24 32 15 40 91 de 5a 23 65 d6 78 f3 57 -82 fe a8 b4 7f 64 d6 09 19 f0 f1 d5 af a7 62 6c -40 d1 6c ec 19 bf e0 25 d1 16 f4 2d 22 e2 0a db -56 37 5a d7 70 89 f9 a9 33 81 fd 78 b7 b1 51 1c -b4 e4 98 4d 2d dc 7c 9d 75 b3 10 f2 95 42 25 60 -d6 6e 36 02 a8 71 20 96 16 13 1a 84 71 43 dd 07 -8f 23 58 7d b5 02 dd a0 3e 18 60 64 82 db be 01 -4e a0 83 b7 ec 16 1b - -# Signature: -0e af eb f1 5d 84 ee 4a 13 f1 a8 2b 84 05 11 86 -41 e2 2e 51 da 94 d8 58 87 fc 4a 3b 11 f0 32 49 -cc 39 a0 37 45 01 07 1c 7e ef 4a ba a1 14 08 d0 -2f ae 17 86 de a3 75 88 47 9c 90 d6 27 69 85 91 -c3 ba e1 fe fd 6e 8c 40 e3 ff 4b 9f 60 61 e0 6c -12 fd d2 1c 7f 45 dd c5 b7 8d 1c bc 41 c1 57 06 -fa 20 ba 92 f9 9f 58 b2 2b e2 76 75 be e0 81 a0 -60 67 ee d1 58 f8 e2 0b f0 4a 6e 96 8f 71 9a 32 -34 - -# PKCS#1 v1.5 Signature Example 12.15 - -# ----------------- - -# Message to be signed: -fa 1c 0f 7b 10 15 a8 95 b1 a5 65 f3 29 96 b2 b8 -cc fd 86 4b 95 54 4d bb 9c f4 f6 e1 a8 41 de 92 -06 d5 57 26 fd f7 ee a2 bf 33 6a 82 9f d2 bc 12 -09 bd 21 5a ab b9 77 d2 3a 08 3f 10 ae 69 db 43 -7c a3 2d 7b fe 4c 88 25 b9 34 88 f0 1a fd f7 84 -45 8c ef 5c dd 8d ff dd 17 - -# Signature: -25 e2 2e 6d f7 fc 6b d4 e0 f6 1e bc 8d a0 63 fe -47 8a 3e d7 4d 68 f7 76 34 35 e0 e3 74 f6 52 62 -a5 d7 61 2e 86 78 59 61 22 c0 e5 b8 fa 0c 0b 12 -81 2b a9 65 3a 0f 27 38 83 c6 26 4c 6d fb 74 bb -34 40 5d 2a 04 30 43 fb b0 ab f2 af 7a 12 3d 2d -db f1 69 92 e0 9b aa 37 d7 31 d7 2e f1 99 62 65 -8a 8f b0 10 a1 0f 7d 55 62 ad 54 33 47 90 01 af -36 d3 d3 26 ea db 2e 9a be c7 b5 55 70 9d 5d 47 -e9 - -# PKCS#1 v1.5 Signature Example 12.16 - -# ----------------- - -# Message to be signed: -82 8e be 2f 51 e5 88 29 cf a6 15 26 dd ed 7e 1f -1b a3 11 db f1 06 4c 08 ac 0b b5 d6 71 6e ab 29 -8a 23 d6 3b 79 3f fd 9d 9c ea 60 22 95 98 82 3f -28 2f 10 7b 6e e8 8a 53 fd 93 e7 dd d4 8a 73 1a -21 09 ff ed c8 9a eb a2 c0 f1 6b cb 14 0a 0a 89 -dc 57 ee 8b 5d 00 0a 21 42 17 5b c7 07 bb 40 9a -ae 3a 03 9c 66 3d 01 9a 0b d9 13 c1 3f 7f f6 f6 -b9 1e 90 5a 58 9d 38 b1 50 48 5d 89 09 2d 18 a3 -a7 62 25 27 65 52 5d 98 45 66 42 5b 05 77 0d e9 -a8 be f4 43 ff 5f c1 48 33 af a4 cc ec e5 42 d4 -f2 ce f1 e7 96 f5 9f b3 a4 bf 37 cb 67 7a e4 22 -36 66 c8 2b 31 a1 6a 6c d7 01 a0 49 3c d9 96 86 -6c 84 bf cd df 85 2b 19 ff c8 9e 93 61 79 fc e8 -b9 9e 72 fd 4a fc 28 b5 11 73 af bb 25 c4 c7 - -# Signature: -16 17 55 9e 43 ba 18 2e 95 34 86 43 6f 15 b6 02 -83 1e 42 ee d2 03 c2 69 f6 53 bf 63 9c 2b 76 0b -0d 49 fb 53 2c a8 ad 01 e7 b4 af 83 72 92 55 db -55 9b cf 55 fa b3 65 9c eb ec d5 37 69 4f ef 2d -ef 9c 9e 76 2d 05 d2 32 1e d6 88 c3 f7 e2 c0 57 -33 ab 4f a8 1b 08 cf 79 fa cb 75 c3 20 0b 7a 48 -3a f0 8c b1 83 c5 09 27 cc 61 69 e4 32 f7 fc 9b -11 78 0d bf 4d 3b 72 d2 d0 b8 55 93 d8 b5 b0 18 -2a - -# PKCS#1 v1.5 Signature Example 12.17 - -# ----------------- - -# Message to be signed: -bb 4a 6e cc bd d6 de 0a c5 c3 b7 f9 97 98 10 4a -58 69 c1 cf 1a 1f ac 7f 85 9f e9 51 49 29 7e b7 -79 11 00 59 e2 69 f1 27 56 f0 8a 54 8b 66 af - -# Signature: -27 7b ae 63 e6 e3 25 3a 0e 20 4f 4e 6c 9f e8 4b -04 0b 86 4f 21 ed d4 42 6d 82 be 8f 1b 91 1b 0b -d2 81 cf 11 49 53 d4 02 09 da 2e 9a ae 13 3b cd -18 55 ef 0a 99 69 3a 94 43 c9 3f 6d d2 75 f0 58 -fd 1b b6 95 32 b6 4a 1d d7 e1 d0 e7 80 d7 52 04 -fa 8c 61 c2 eb 5d e8 82 72 cb 93 ae f0 80 f7 02 -bb 78 88 94 25 a5 f1 66 f6 3b 5b 1a 31 ec 5c 1c -26 a5 99 fa fe 58 77 42 98 b9 7d b3 14 fc 81 d0 -92 - -# PKCS#1 v1.5 Signature Example 12.18 - -# ----------------- - -# Message to be signed: -f1 d1 11 ad 08 e0 38 ca 3a b4 e5 2e 5e ab 71 01 -87 6c a9 be 62 6a 13 59 17 f4 5b 1f 9d 1b 32 ef -e4 ff 86 7a b8 a3 05 f9 49 c0 04 8b 25 f5 46 22 -61 b1 a3 49 3b 81 90 21 0f 5c fa 6b f7 e5 c3 00 -54 98 de ec c1 e1 c5 04 f3 a3 49 98 be 6a d6 ac -00 40 51 c4 e0 a3 db 2c 22 eb 5e 14 16 55 28 df -78 12 a2 0d 5c 7f 05 b9 40 ca 13 e9 38 3a e0 0d -6c d4 d0 f4 ae 3d ad 04 7a b9 c4 17 8d b6 6d 3b -80 96 0c af 0a 92 4d c9 4e b8 e0 77 09 bc db 34 -9e 90 fa 2e 10 c5 d5 26 d2 21 9c a7 6f 88 01 fd -c6 61 bd ca 6a 93 da 48 d0 45 ac 37 51 34 cc d6 -ff 7c 52 fd 15 c7 cd 3d 1f 31 af e5 04 bc e7 c0 -33 3a 89 79 e3 ce cc 53 c4 ea dd 7d 95 d4 6f a3 -b2 a9 f0 06 10 0d 6b fc 0e d5 ee 77 69 4f f1 a2 -4e 16 a5 44 de 71 46 52 90 dd dd 18 9f 01 67 03 -59 f8 c6 b5 d4 c6 b6 b9 f5 c5 7a a5 a3 8f 07 99 - -# Signature: -0d e9 42 31 c0 6a b1 87 b0 0d da 2b 34 e2 b4 cb -ac 41 f6 08 c4 8c 72 27 a6 28 2a 17 9e 58 c3 2e -f5 dd c9 76 4f a2 df c3 fb e0 21 dd b4 81 56 a6 -37 3c d6 9b 85 d3 64 d8 9b 5a 32 fa bb 2d 46 5d -05 62 d4 a1 dd 6f ca 64 78 0b 06 2a 94 71 24 a7 -fc 0b 82 e4 fe d1 2b 8b 4f 72 6a 0c 85 39 c6 cd -e2 1a f6 55 ac c8 de 1e 7b a9 d6 7b 87 b8 e7 77 -d4 8a cd 86 8a 80 db 15 31 4f 35 55 60 10 35 77 -eb - -# PKCS#1 v1.5 Signature Example 12.19 - -# ----------------- - -# Message to be signed: -9c 4e cc 4b 24 44 a4 01 bf b6 f4 b7 24 49 23 a5 -ad 33 86 c3 b8 41 67 8c f5 e6 44 7b 8a 3a 07 59 -86 c3 3f d0 01 b8 43 72 4d dd c4 21 2f f4 5a b3 -fe ca a9 0a 16 f6 b5 59 2c 51 5c c4 ee 54 ae a4 -59 34 32 16 70 96 67 8f 93 41 59 85 6d 14 c4 32 -e7 d6 d2 8d 71 b2 68 7f 54 ed 71 9e 5c 20 11 00 -68 8e 85 f2 0e 79 a9 ee 8a a4 b6 14 31 34 3d 1e -99 c2 14 35 c6 1e 8b c1 04 f2 ba d5 29 60 fc ee -e6 7b 85 03 3d 3a ee fa e4 13 ce 29 70 1e ff cb -02 b4 84 a0 31 e2 f3 19 ef 7e d0 d6 e6 9b 29 16 -ee b3 8c 4f 19 42 ba 23 c2 a1 79 0c e3 fe 09 d0 -1b 9b 9f e6 db a8 dc 21 0e aa 8f e7 3c a7 6f 1b -5b - -# Signature: -18 53 c2 1a 4a 18 54 7d 86 7b 3c ed 02 da f0 b2 -2c e8 d4 d5 af 2b 8e f5 f7 c8 fd 38 5b 81 53 64 -8d 81 83 1d 6a cb 5d a8 30 f6 77 40 25 9f fb 33 -9f 7b 90 af 48 83 81 9c 47 15 e0 8c 28 99 d4 c7 -24 6e 07 e5 bc 6e f3 cf d9 a0 4d a0 6c 43 e9 5c -77 2b e2 21 cf aa f6 95 4e f9 33 31 e5 95 ff 48 -92 1f 05 fc e8 fa 0d 42 9e 0c 99 56 2a 9c 2f 68 -eb f3 2c f1 c6 c6 bb 8b 27 4a 2e 42 d6 71 59 12 -ff - -# PKCS#1 v1.5 Signature Example 12.20 - -# ----------------- - -# Message to be signed: -c3 81 e6 03 99 86 51 66 d2 ba a0 31 45 26 83 34 -18 40 39 e0 53 35 a3 00 c2 80 4e 2b fe f5 a7 d1 -4c 44 3d 65 38 e1 6b df 9d a7 ad 1f ea 63 4e bf -e1 13 bc 82 1e 79 a4 49 b2 eb 2f 57 c2 1f ba 35 -ff cc 6a 7e 52 55 72 27 7e 8f 55 37 c7 b5 b9 79 -4d ef b3 9a ab 06 07 85 d1 99 40 02 dc f8 07 01 -2e 1d 17 91 da 94 3b 2b 75 9c 36 6b b4 24 e4 2c -9c 20 43 ce 78 8a 25 fb fe bb 87 e7 4c b0 20 b1 -1e 8e af 16 18 84 d6 67 2b be 9c 09 fb b3 b8 af -a0 61 - -# Signature: -19 90 69 57 37 53 01 8f 33 59 2a f1 5c 1d 31 31 -bf 5d 8a c4 f6 4c f6 14 d3 a0 1b f3 72 df 00 2e -b5 b5 fc 8f 82 ba 13 7f 83 dc 14 2e de 38 c5 81 -80 e7 bd a6 9c 4f 1b c7 bf 96 ec d3 fa 79 bc cb -dd b7 d9 2e 4f d8 64 c5 fa 93 3a 4d fc 60 0e 10 -83 00 8a 38 6f 4d 02 2c 20 24 ff 7e 0b 37 22 ea -fe a0 5a 1e 02 c7 a6 3e eb 40 f4 f4 c4 f6 60 c3 -24 72 a0 a7 89 23 e3 86 3a 99 44 5e 7c fe 27 00 -60 - -# ============================================= - -# Example 13: A 1031-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -70 e9 23 a5 a0 cd 8e cd f9 9b be 93 d7 d0 28 82 -95 5d 91 b6 ef e3 ce c8 6c 93 d2 1c 0a c3 01 b8 -29 3e 51 43 5b 87 8b c6 b3 4b ed 41 11 59 0e 76 -46 76 58 8b 11 6c 2a 36 a4 c7 7e d9 c9 0a 13 c1 -4d 23 e1 99 47 87 fc db 8f 5c 97 41 0f ca d4 04 -5b 85 85 70 2c ce 29 da 11 f9 7e 79 a9 7c 2e 5f -6a 5f c0 bb 8c e7 6d 15 54 a8 bc 47 96 17 20 d3 -64 05 0b f2 74 19 bf f1 68 c0 a7 ec c8 73 4c b5 -a5 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -70 e9 23 a5 a0 cd 8e cd f9 9b be 93 d7 d0 28 82 -95 5d 91 b6 ef e3 ce c8 6c 93 d2 1c 0a c3 01 b8 -29 3e 51 43 5b 87 8b c6 b3 4b ed 41 11 59 0e 76 -46 76 58 8b 11 6c 2a 36 a4 c7 7e d9 c9 0a 13 c1 -4d 23 e1 99 47 87 fc db 8f 5c 97 41 0f ca d4 04 -5b 85 85 70 2c ce 29 da 11 f9 7e 79 a9 7c 2e 5f -6a 5f c0 bb 8c e7 6d 15 54 a8 bc 47 96 17 20 d3 -64 05 0b f2 74 19 bf f1 68 c0 a7 ec c8 73 4c b5 -a5 - -# Public exponent: -01 00 01 - -# Exponent: -02 9e 10 f6 bb b7 d0 2d eb b1 a5 d5 19 0d 69 06 -ff ed eb 9d 15 4a 0f 66 db 87 80 b9 28 31 b5 96 -3e 94 84 7f 3e 7d b1 aa 91 48 fb 0e c5 57 6e 6b -a4 fe 04 d6 f2 78 32 b1 52 18 12 d3 7b 22 d9 ea -e2 80 08 e0 92 c6 7e 72 32 42 67 e1 b1 ee 45 43 -55 74 1d 8d e1 d2 a6 a0 50 74 bb 1c e5 81 8b 41 -bd 19 dc 6b 58 c8 93 7d 8a d6 40 d7 04 3f a1 1f -46 8d 6c cb ec 4a de 52 0a 9e 15 9d 60 5d 09 28 -29 - -# Prime 1: -0a b4 64 fd 6f e3 3c 45 9a b2 dc ce 5f 78 a4 d7 -4f 92 b9 97 d4 bf 54 2e 2d 85 4e 76 2c 85 86 fc -43 57 cc 58 cb 33 36 33 b0 95 a5 ee 04 a0 32 48 -53 64 d7 0f 67 a3 aa 04 85 4c 7a 87 a6 9c f4 c2 -ad - -# Prime 2: -0a 8c 3c c5 04 13 40 f4 32 fe 0a 78 73 13 57 79 -16 fe 76 c0 39 f9 71 75 9e c5 0e d6 c5 b9 a7 36 -9b 68 96 9e cb 52 59 fe 9c 50 d0 75 9b f8 b3 aa -c1 a5 d5 b5 28 8d 67 89 e7 18 fa 37 ef 42 39 95 -d9 - -# Prime exponent 1: -bb 29 5a 95 d5 b3 3c 1d c0 b1 8b f6 c1 4a a0 d9 -f2 6f 72 8b 39 36 0a a1 59 45 6e 94 c3 d9 e0 48 -c9 2a 4f b6 31 1d 36 92 8c e5 f4 47 a4 99 4a 8f -47 87 d8 a9 7f 68 11 3e f9 66 34 f5 90 2a b7 51 - -# Prime exponent 2: -02 fa 11 2c 89 39 e5 db 05 89 2c eb 51 8e e3 e1 -08 dc 48 27 78 35 2e 10 43 fe d9 71 43 dc 61 94 -c7 c7 7c ba d4 27 29 be f1 de dc f6 54 4e 9c 66 -54 c0 b8 cf a7 e2 40 96 6a e2 61 bb e7 8a 89 36 -01 - -# Coefficient: -a8 8b f3 ff e9 3f 40 4e 06 82 1c 97 71 ea e6 08 -15 71 2d 6f 94 52 71 f6 f3 6f 03 69 d9 66 c9 20 -c7 f8 cb c7 84 25 ac bb 9c e0 fa 1a 03 22 f5 0c -97 b8 11 5b d1 51 91 f2 24 b5 68 d1 d6 ec a6 db - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 13.1 - -# ----------------- - -# Message to be signed: -b5 e8 6c 8b a3 98 5a a5 54 1d f9 5e 51 3c ff 67 -61 2e af 2e 16 68 85 76 f7 d6 73 f6 f1 89 1f b7 -5c 9d d2 cd - -# Signature: -6b 42 fd 51 63 09 19 7f 8a f3 c7 3e 39 62 4d 8e -ba be cd a3 ec 3c e6 57 b1 11 7f 43 e9 83 87 7a -1b a1 aa f8 e9 5c c3 99 91 d9 2e 35 e2 db 1e 41 -30 90 14 3d 16 46 71 98 b9 b9 a9 90 d7 74 c2 7a -d3 bb b4 35 2d 3f 07 5d 61 73 2c 6b 58 ec 0f 66 -e4 92 a3 f7 ac 4b bc f0 12 ed 6b 40 1f eb 4f f3 -95 cb 8b 21 8a 81 d6 17 31 ee ce 37 6f 68 8e 66 -ae a6 98 b4 a8 86 2f 58 c9 1d 87 60 85 49 6f d0 -14 - -# PKCS#1 v1.5 Signature Example 13.2 - -# ----------------- - -# Message to be signed: -95 46 34 6c f2 21 94 c7 87 88 81 70 a4 82 f7 f4 -92 17 c3 94 0d c6 21 0c e3 9e 45 50 a3 9b 45 28 -22 41 9a ea c2 4b ec 19 8b b3 59 d0 8b e8 19 6d -f2 e7 57 76 61 96 c9 58 e2 b1 59 c7 4c 1c 30 23 -c2 db cc e9 ed 5d 0e f3 fb 51 45 0b ff 64 45 db -26 5e 60 6e 19 4b ee 06 4c a5 b3 21 d7 e1 55 14 -23 0c 2b 3b 55 d5 da 4c d0 40 52 2f 7b b8 6a 96 -2b 81 3f 9d a3 9e 51 38 9b c6 4f 56 e4 47 b2 a2 -bf 81 9d 7a 80 09 4e 2b 8d e2 7f 10 4b b6 eb 2f -2f b4 3a f1 d0 1e ad ca 23 a1 96 ba 12 5b 6a 78 -57 99 74 c0 ee c8 a5 49 67 71 f6 7d bd 50 69 f3 -36 e4 ef 1f 40 47 42 df c6 9c e3 25 aa 64 9f 8a -63 31 cf 40 35 55 e1 3f 08 10 a7 63 50 a7 e1 8d -29 92 fa b4 8f 39 7f 3b 93 c5 bd 5a 6f e1 d2 c4 -61 8b a1 f5 9f 00 2d c2 57 ec 39 ee 2f 87 62 98 -da 90 f7 44 0a d4 c6 c9 3f c1 14 df 05 - -# Signature: -67 e4 14 99 3f 98 7a 22 64 3d d0 39 e7 f9 fe 1c -ae 74 4a 7a e4 1d 4c 04 4f a4 ed 8d c9 e3 40 ce -bb 1e 2a fb 19 8e 84 7a ef 4b c0 61 fd 80 0d 81 -d4 d3 67 b0 fc 2f 73 09 33 c1 9b 88 d4 dd f0 5e -d9 8a 58 56 de 5e b4 5b 11 6b 7d 24 fe b4 56 77 -84 9d ab 76 e9 e0 cc b4 5b a6 b6 f6 14 1f 37 bb -ad 7c 19 1c 37 77 11 3b c7 38 8e 4e 46 44 ec a9 -47 03 a7 2b dd cc 6f 50 cf 98 0e 3f 6d e3 9d 73 -12 - -# PKCS#1 v1.5 Signature Example 13.3 - -# ----------------- - -# Message to be signed: -56 52 b4 c5 75 20 b2 55 fb 96 f7 0a 30 ab 92 ee -c1 93 99 56 b6 a9 43 c8 3e d0 98 6e 2e 6e e4 ef -bf 8a 52 28 78 67 28 12 03 a7 a6 d1 d8 86 b7 00 -59 52 b4 3b 77 85 44 ed a8 98 e0 df 2f a0 6f 68 -38 03 18 f1 4a 53 fe 55 d7 2f 8c fa 6a f2 1d 93 -bb fc 20 d3 58 c2 08 c5 62 d7 39 be 00 01 ce 07 -fd 8c d2 f4 6c 3b 44 c8 36 51 88 09 b7 6f 3a 70 -cf 69 26 be 06 9c 35 75 d5 - -# Signature: -01 64 11 a2 31 a7 38 94 4b 3e 44 f7 88 5c f8 1a -ca b7 32 d1 73 6d e3 4c 56 cf 40 f9 9a 6c e4 00 -70 a2 0a a9 4c 48 78 44 a9 3c ef 28 7a 58 bc 0e -a1 81 b2 cf 27 d9 14 f2 93 b9 29 77 9d 39 03 6c -4e 5a ae d3 5e ee 8a 7f d5 0e fd 09 6c 91 a8 f7 -2c 3c 14 1c 57 6c 8d 10 b6 36 fc 4d dc 1e 67 14 -f1 7f fc ce 10 6d 22 1b 4f d7 d6 fe 1e 7c bd 3f -3b 08 f5 54 6b 44 d1 fe b7 18 fb c1 33 70 c7 fa -2c - -# PKCS#1 v1.5 Signature Example 13.4 - -# ----------------- - -# Message to be signed: -6d 57 f0 79 a3 e8 ad cb 47 cf 2e 3c a9 76 e0 3b -09 c7 7d 1d 9d 9d 84 84 35 7e 91 23 09 e8 f4 a8 -3c b5 0c b6 a7 38 8c 41 4a ec 84 46 71 ff 81 06 -51 e8 28 10 3a 1f 6a 19 9b e2 60 f7 46 00 02 8c -6a 7b 7b b9 41 6c e7 b6 35 0a 3a 68 05 62 0c f5 -e6 b0 09 5d fa 22 b5 46 01 f6 19 af d1 0d a2 03 -d2 81 90 cf 9b 0d b5 98 6d 29 30 33 69 1e c5 bb -ba 6d 73 ea 32 47 2e fa 3f 16 0f d2 b1 b5 e4 3b -0b fa d3 16 77 30 5f ef 46 72 44 11 4e e1 0f 5c -b2 d6 7b 47 83 23 a7 11 04 1e 29 4c 46 b2 ed 39 -cc de 07 9c 87 7f e7 5c b8 75 14 4a c3 1e b0 31 -a7 38 a4 ce fe f9 1f 01 7b a7 15 23 f5 12 48 18 -cf 48 b9 72 bc 47 c8 f2 ed 35 6f 5b f6 91 fd 94 -67 0b b2 - -# Signature: -31 5c e4 17 d0 bb d7 3e 7c 43 56 79 7e 73 ed 7a -bf e9 fc ff f1 a5 34 28 99 a7 d1 1f b0 d0 54 2b -fc ab 66 de 2e 4e c0 7c 7d c2 be 7d 79 72 90 a3 -0d b8 c4 07 dd 16 37 65 88 a6 dc c1 a2 07 bf 7f -f3 11 54 0f aa 9d d6 f1 9a 73 ab 25 a7 49 6e 68 -2f a8 a7 05 40 81 07 6c 1a 02 15 7b e6 3e 7f 64 -5d e8 2d f7 c6 15 50 3f a8 3b 4e db a2 05 81 81 -2e 09 7f 65 05 6e d4 17 f6 f2 48 03 53 0c f8 18 -58 - -# PKCS#1 v1.5 Signature Example 13.5 - -# ----------------- - -# Message to be signed: -bb 75 44 6f 78 78 23 dd a2 42 2b 1a dc 7d 7f ef -d0 6a 6e 9a f5 c0 49 01 ac 5b 99 91 3a d6 29 8c -9d 1a 33 22 e8 b2 17 e4 e0 99 4c 42 20 42 80 d4 -04 d0 1e ce b5 ec 53 fb 86 f7 61 a3 96 b2 3a e1 -9d 46 79 05 a0 fe 80 50 b8 95 d8 ba 37 46 68 5c -47 43 9f 90 c3 66 9c 70 ff b8 19 94 56 5c 4d f2 -a3 1e b2 a4 52 bc 3c b3 12 b8 14 7c ec 19 10 32 -f3 8f 3b 3d 89 d7 58 2b f1 8e 7b 72 75 fb 4f 16 -ee 89 56 7e 2a 56 bc 73 b3 e2 e1 09 f9 94 0e bd -10 b9 df 2b 88 ac cf 0b a1 8e 5b 34 95 20 d2 c7 -f5 a3 1b d5 22 6d 12 ec 35 bf c9 e3 62 03 e1 35 -06 ba 12 b7 56 c8 ba 00 af 91 b8 5b 0b 4c 07 c7 -f4 84 ad c4 58 c9 26 aa eb 4f 08 2f ec 98 7d 9f -27 6b 89 49 59 7e c0 40 1b b7 1a 2f ea 9c 7b 74 -e0 df e6 aa 52 ac 8b 80 be ea d3 36 a4 9d b2 2f -b3 - -# Signature: -53 d0 d7 95 bb 08 2f 20 01 03 6f 47 2c 2e ce 6e -7d 2d b6 9f 29 2d a7 21 36 75 c7 cb ba 0d 33 b2 -32 12 f8 f4 3a 4a 8e 09 a6 a5 0e 01 9b bd d5 9a -58 89 8c c4 6c 58 a4 6e 42 ce 7b a0 93 fb 46 92 -f3 83 de 33 a9 a3 4f 47 c7 e6 19 38 bf 8a 6a da -a8 8d f2 12 96 b4 c6 7b 52 68 35 f7 57 f2 c2 6c -1d 30 9d 7c dd 5a d5 fd 8f 61 f8 51 ed 23 c4 be -2a bb 62 7d fd 81 7f 84 77 dc 04 2b 6a 2e 40 69 -40 - -# PKCS#1 v1.5 Signature Example 13.6 - -# ----------------- - -# Message to be signed: -88 39 39 d1 49 a5 44 e6 2e f0 4c 61 03 51 a2 df -a2 52 eb 9a 9d 1e 11 ae 54 c9 b0 7e bc f1 fd c4 -7e c1 d9 47 03 41 1d a4 15 f5 9f b3 e5 04 1e d9 -47 0e 7b cc 81 9b 5a fe af 86 0c 01 6e f1 25 bd -08 a6 cb 8b cd f3 b9 3a 51 dc ad b2 f6 8c 8c c3 -77 55 14 28 2a ff 75 67 ec 65 f2 70 d0 2b eb 95 -fb 8f ac 24 09 5e 17 06 e4 8b 52 48 65 bc 14 46 -1d 3e ce 8c 50 1c 3d 80 2a de 98 5a e9 5c fe 1a -b9 d6 b9 ab 0d 15 fc c8 86 6f 7f 25 9c 5e 41 c0 -2c d4 13 43 7e 7d 6b a7 f1 5b 0a 70 da fb d5 5c -0e db 6b 80 75 c2 7c ff 3b 28 9e 6c 99 e9 a8 84 -ff 7f 08 6d a9 f7 5d 6a 4c bb cc af 52 ba 25 c6 -34 2c 38 a7 6b 44 e1 01 15 5d f7 55 e3 9c 14 86 -2e 22 0c a3 6f fb cc 83 2a fe cb a8 7f 8a bd 96 -0a 57 7f 56 ca 6c d8 e9 91 26 65 8f 27 ac 6e 53 -c4 42 ed 47 66 - -# Signature: -1e c0 2a e6 a0 a3 f6 11 99 29 61 ca 27 cc bf 29 -6e 11 36 18 32 e1 ee 75 20 56 9a 9a ee 06 34 5c -da 22 b4 fa 48 fc 34 5e 47 78 bc 3c cd fe bd 2d -c5 a6 c9 d4 84 51 aa 44 1b ea 4b 95 11 99 65 4a -e8 d2 f7 52 2e 17 ed bc 2f 51 ce 15 cb cd 36 6f -49 39 cb 53 c3 b7 70 81 f4 a7 37 50 05 4e 00 b3 -0b a2 fe 58 f6 f0 2e 36 a8 62 54 23 97 db a6 a3 -cd 22 77 70 88 19 e7 8a 2d 87 6a 23 a5 a2 69 d7 -75 - -# PKCS#1 v1.5 Signature Example 13.7 - -# ----------------- - -# Message to be signed: -40 31 e0 de f4 f3 d1 ad 9b c0 82 77 0a 88 a1 d9 -b4 b7 10 75 48 cd f8 46 2b 0b ae 3d 99 4d 8e bc -4d a0 44 b9 05 dd 8e d9 1a 1d a6 76 72 78 22 36 -0e e2 b6 d5 e1 2b b7 03 16 d7 9e 8a bb 82 a6 43 -44 af b3 b2 25 88 5c - -# Signature: -0b e5 a6 d0 43 be 5d 27 d1 d5 1d 9e 3a a6 1d 92 -c9 d8 43 23 11 9b 48 c8 4a 80 38 97 18 d7 a1 aa -f5 7a 9a 0d 21 4f 65 06 48 48 64 df ae 85 db 7b -84 74 07 3a 8f 97 7b 42 b5 3b 40 7e 44 c7 c6 2b -16 8d 1e 77 78 f4 f2 78 57 bf ba 85 dd dc 8b 0e -9f 0e 9a 5b 6d e7 1a 04 43 72 0e 92 bb 88 b0 77 -cb a1 5d 3f 6e 2b e4 d2 7a 7c 50 9c 7d c0 3f 1f -dd 4f e3 38 a4 e5 45 c4 6c 03 45 22 cc c0 d4 5d -4c - -# PKCS#1 v1.5 Signature Example 13.8 - -# ----------------- - -# Message to be signed: -7f dc 96 a4 56 57 74 02 9f ff a9 3b 39 f0 5d ee -9f 84 fa 89 53 fd 0f 63 38 c8 1c 9d ec 6c dd 66 -1f fa b9 6f 0e 08 eb 0b 9b a9 ca 5b e1 7b 57 c4 -b4 86 8f d5 34 11 54 de 50 27 71 13 c7 18 53 41 - -# Signature: -1d d2 1f a4 95 be 7c 49 0f 98 2f 69 ea b1 4e 24 -da a0 4b d1 38 b7 14 32 49 cd cc d7 8c cf c9 10 -6a ca a0 3e c8 76 69 42 32 56 6e c6 ca b9 12 28 -40 f6 69 c8 00 f2 ee 09 2b b9 b6 cb 2a 45 42 a9 -0d e6 04 c4 f1 05 00 0a 3a 0d ec cd 3d d9 7a 32 -61 fa 38 22 7e b3 81 a1 f8 f2 3b 66 65 d2 84 80 -df b7 21 17 88 2e d8 db 25 d7 6d e4 0d e2 fb e7 -2d c3 94 ec 6f bd aa 99 c6 4f ad e7 29 78 a5 1f -c4 - -# PKCS#1 v1.5 Signature Example 13.9 - -# ----------------- - -# Message to be signed: -63 18 32 ab 19 18 cd 02 08 28 e4 7a e2 b4 47 6b -14 69 f2 72 e3 0e 53 e5 96 fb a2 6b 40 29 37 dc -44 c2 ea 57 45 c7 9d 2d c6 4a 10 e1 22 5c a0 b6 -92 9d 49 54 bc 5d 37 40 96 fd 87 8d d1 01 f7 66 -63 13 d9 a8 f8 26 bc 67 14 01 42 2c 1c fe 1a 6d -01 a4 d7 86 4a 14 c6 0c eb c2 f0 70 91 4c ee de -b1 78 2f e5 40 a0 a5 d2 57 84 44 f9 b3 60 34 ec -77 d6 b8 03 a0 c9 76 1b 32 75 92 aa 48 46 63 5c -56 3f 1c 6a 6d f6 8f aa bc e4 97 af 4d c9 a3 64 -2b 75 a4 a2 94 d3 08 56 8e 6d 73 c1 1d b5 67 24 -04 2b 55 c3 a2 4a 7b c7 a1 05 0e 4f 44 8b 6a - -# Signature: -45 d3 a6 ae 8f 48 35 5c 01 2b 50 10 79 ee 92 af -fe 3c 9e 60 2e 4a 08 0c fc 94 72 3a e9 6d ac 2a -66 e4 55 a4 0e 72 8b 2a 1b 27 e6 22 40 55 4e c7 -c5 c0 ad 6a a0 0c 09 22 e5 3d 7b 12 ed 42 c0 87 -32 2d 15 36 e4 6b 7d eb da 80 95 f5 5d 1e 12 bc -24 42 f4 3b 4d 12 8f ee 23 1d cd 6f 8c 37 aa 6b -cf 4f e7 b5 e0 de a9 c6 70 9d 3d 91 f9 e4 2a 53 -16 8a 16 b6 fe 99 7b 5d fe ba fb 46 ed 9a ea 5c -66 - -# PKCS#1 v1.5 Signature Example 13.10 - -# ----------------- - -# Message to be signed: -8b 04 3d 90 da e3 41 66 85 d5 3a 5b 4c 3c c2 54 -cd a0 cb d2 3b 4e 40 8d e8 20 a4 da 7a de 6d d9 -5d 4e 1a 97 e2 31 2c 3e 84 26 1e e0 b6 ce fe 60 -e6 b0 82 fd 59 65 ef a1 64 8f 4f ae 61 60 5f e3 -55 33 27 00 46 96 05 26 53 47 e6 54 7a ea 77 5b -85 6e 5a 46 c3 41 d2 99 52 bb ea 92 70 49 96 3e -37 40 20 8c fb 0b 65 28 57 b6 f5 2e 36 6a 17 0b -e3 4f 13 d3 58 46 bd e6 97 20 46 20 01 b0 9d d2 -68 b8 9b 09 00 31 8e 73 3d b2 00 9e fd 9b 51 77 -41 e5 10 d3 f3 94 f7 ad b5 45 59 b1 57 - -# Signature: -6b 27 8f 36 2c 29 2e ea 09 b9 0b f3 53 d1 43 f2 -ca 09 9f f8 79 57 34 79 df 2a ff 9b 25 0d 1c 91 -87 c6 a3 34 3e a1 4c 07 6f 2a 20 c1 a1 9d b2 6a -ad 35 48 ec 6f b3 b2 fa fc 75 1b 59 08 2d 8b 23 -c8 2c 8a 51 f7 fa f7 a4 d4 a8 23 98 bf be d4 49 -bd e4 ee 9d c8 68 01 60 66 6f d9 c7 74 c6 aa 57 -7b 4e c5 4c f0 d5 bd 9e 3d 1a fa 9c 3b 4b 91 46 -76 78 c9 d4 c4 fe 40 0a a8 57 a3 b0 54 5b df 84 -a6 - -# PKCS#1 v1.5 Signature Example 13.11 - -# ----------------- - -# Message to be signed: -3b 28 a6 09 2e 47 08 98 af 07 0a 08 7c 45 53 18 -8d e6 c3 44 bb 0b 5f dc 7f 66 fb c5 2d c9 3a 8b -92 a3 74 11 20 37 d6 a4 32 86 12 8a ce f9 5a 35 -05 c0 ab b1 af a6 2c 48 cb 21 36 07 7f 8a 0e 0e -0b 5a 4e e9 b2 c7 7d 7a 0c 0b 53 f3 8a 51 cc 3d -b9 b5 83 b3 ae c0 7f 1e 22 4f cb 3f 1d ad 19 5e -05 86 59 a9 d1 1f 8e dc 74 44 99 46 86 ed 62 c9 -75 66 e9 e0 0c bf 8f 0d bc 17 16 e6 b7 f0 f8 8f -e8 9a 86 7a 41 d6 43 13 5a d8 b1 8a a1 43 e7 37 -5d f1 95 29 - -# Signature: -32 62 fe 17 e4 4e 5e cc 84 31 70 d3 ae 27 51 da -1f 48 d6 e9 61 d8 1e 93 59 b0 98 2c 6d 61 30 8e -ba cf e2 60 7c 53 8c 17 0c e0 e7 2a 07 bc 01 48 -7b 29 5c 36 b8 e2 2a fd f6 e7 fe 39 c0 3a 5c 0c -36 61 06 1f 23 fb f5 89 0e ad 59 f8 72 c9 46 cc -e0 f8 16 c9 ed 3a 2c 1e 11 f8 f7 4d a1 e9 7a 39 -0d 53 4d 78 55 78 a2 45 5f cd 87 47 83 f4 57 2a -15 f4 93 7d ca 98 09 3f d0 e9 99 0a f0 00 52 56 -bf - -# PKCS#1 v1.5 Signature Example 13.12 - -# ----------------- - -# Message to be signed: -4f dd 6a 36 31 dd d4 bc 3c 76 07 19 02 a2 27 fd -5b 36 53 b1 f9 70 f2 b7 67 ef 55 4e 1c 75 ca de -81 9d 8d 1f ca 76 bc 10 54 1c bf 8b 1d 8b 0e 72 -55 f9 57 40 - -# Signature: -29 cb a5 b4 3f a3 56 57 75 89 34 91 b1 18 57 8b -14 b5 fa 1e eb e0 c8 07 59 a6 d1 91 e7 c2 13 1e -e1 0a c5 b9 b8 ae 1a a7 d6 96 c9 84 88 a3 5c df -a2 aa 00 6d 91 bf 7e 05 a5 c1 90 9e fb 20 da bc -82 13 3b 62 64 c0 42 18 0c 2c ca 65 45 9f 66 cc -7e b1 ba 75 d1 5d 4f 56 c7 52 8a ab 28 38 e6 79 -53 7a 4c 8d cd 37 d4 b4 ca 82 5c e1 65 fa 4a 97 -15 82 44 dc 87 c0 61 fb 12 00 1e 55 33 fb d4 cc -62 - -# PKCS#1 v1.5 Signature Example 13.13 - -# ----------------- - -# Message to be signed: -59 0c d2 30 50 e5 7b 28 d5 c2 18 5e ad 60 b1 e9 -52 9f 2b d5 26 13 eb 03 f6 ed 1a ef a4 a6 72 88 -d5 a3 a3 4f d9 5c a6 38 94 af 3a 40 cd 68 87 3a -1f 37 e3 54 d3 04 14 29 7b 19 25 4b c6 c1 a3 f7 -a4 75 20 ee a5 6e ff 77 db fd a6 bd 77 79 d0 2f -d8 16 fc 0e 99 91 9f e4 39 5e ae e5 b2 f5 f0 32 -cf c4 33 6f 9c f9 ac ef 74 db bf 4c 9a 09 18 da -65 58 b4 b4 e3 20 9b fc d7 1d dd 59 76 07 b6 e2 -8c 39 85 db f5 2c a7 d1 d7 51 cb 81 69 c0 b1 b1 -3f f8 b6 5b 73 1e 69 dd 2e ff e4 4c 63 6f 2b 69 -95 35 83 1a eb 5e 62 90 2f - -# Signature: -67 eb 89 57 ce 4c 06 f7 39 1d 00 c7 41 24 53 f4 -b6 8b 33 03 a1 29 25 54 e2 a5 fc 72 62 c5 2e 74 -be d7 0e c5 8c 89 50 cd c4 31 5a 8f b7 c6 80 15 -54 cd 35 78 1d 44 fb 5e 57 d6 8d 59 a0 0f 43 b8 -6d 53 b8 43 72 d5 56 e5 a4 15 3c be 6b 39 7c 4c -9c 68 00 70 5d 2f c0 c5 48 64 5e 11 b9 d8 d5 12 -b2 dd 9b f5 9f 3d c5 d1 1c 3c 77 3d 59 cc be d9 -e6 bc 14 32 09 10 cd f8 3b 46 59 01 b7 46 b5 96 -74 - -# PKCS#1 v1.5 Signature Example 13.14 - -# ----------------- - -# Message to be signed: -80 8c b9 76 13 fd 87 85 35 80 1c 80 08 79 15 10 -a5 fe 86 6a d5 b6 84 3a 6e 00 19 a0 fc c2 17 76 -03 54 f6 0c c6 99 fb be 1a df e8 b0 0e cd 6a 36 -a2 b5 a5 a1 fa a2 3d 34 38 20 02 4e 3a 31 97 ae -67 3c - -# Signature: -1c 53 96 59 f8 72 46 99 16 fb 00 07 ef 9e 48 57 -4e 96 4e 4c 0e 6a 2f a7 4b 13 73 fd 60 b6 64 a7 -98 ac 81 29 c0 8c 12 cd bf 37 49 75 0b e1 25 60 -2a 71 54 32 67 67 32 7e 92 ba 57 b5 e2 89 b5 ac -9d 77 71 b4 52 0a 7a 2c e6 6c 5e af 70 4a fc 5a -19 0f a6 0b e1 37 6f 94 3d 2b af 70 52 3e 47 c3 -de fc 0a 25 a6 00 18 31 a3 7a ab 0c f1 f6 48 7b -e3 7f 0e 31 ca 7d b5 ac 41 b5 63 09 57 55 93 69 -ff - -# PKCS#1 v1.5 Signature Example 13.15 - -# ----------------- - -# Message to be signed: -57 ed aa 05 66 25 16 86 f6 52 05 ef c6 26 60 e2 -c2 e0 4f a5 ea a3 30 2d e8 7a 3f 6b 49 1f 7f a3 -ac 72 70 cc 76 75 1a 43 69 42 ac 76 5e f5 f4 74 -91 62 d7 e7 97 12 6b cb 8f da c1 9c f1 8d cc 6e -ff 48 59 3c 05 c8 89 3b 59 1a 51 33 2f a2 6a b8 -63 c5 ea a4 d7 51 e8 d1 b1 9c 58 26 90 b5 41 5e -6a 89 e0 5f 23 1b 33 ac 38 c5 3f 95 a2 d5 f9 10 -51 c2 ec 6d db 2b 6d ba 78 9d 55 3a db 9f 10 c5 -83 59 70 36 d3 48 6f bb 32 17 2a 1c 11 07 9e 5f -09 aa 29 eb 46 74 c8 d7 bf 5b bd 6d 05 7e 6b 87 -a8 b3 aa f4 80 86 d7 21 cb bc 8e fa c6 24 4d 32 -39 ae 18 f1 66 23 fa 52 8e 2e 70 fa 25 65 6a 6a -4a 22 92 95 0f c9 28 ed b8 1c - -# Signature: -33 73 2f cc 23 34 2c 58 51 38 b2 5b 17 c8 12 ee -3e 9d 3d a4 1f 6f fb cc 16 17 a2 ee 75 cc 5b 25 -01 25 4f d1 97 6d 25 88 00 e9 05 d7 e4 4a 0a b6 -fb 4b 8a 88 bb 7b f9 31 73 95 30 3a b2 fc a4 31 -28 48 6a 2b ab 36 c7 5e f6 aa 5e b3 fc 5b d5 55 -b3 ea 79 12 4a ad 78 97 e3 a4 34 de e7 92 63 71 -de 2d 6d 23 7e 89 b0 3b 8d d7 09 60 58 e2 a4 b3 -2c b5 57 c7 ad a2 98 a7 e2 ed d3 a3 a3 b5 29 b4 -d2 - -# PKCS#1 v1.5 Signature Example 13.16 - -# ----------------- - -# Message to be signed: -08 33 76 bb 82 21 2b f8 80 be 12 85 65 3a f2 ca -d6 25 c5 2e 94 e3 21 43 68 77 f7 25 a8 3b bd 43 -f4 48 6d 89 6c f6 7e 31 39 1b 87 06 f8 c0 f8 f4 -bb 1d db a9 5c 33 2f 03 4f 39 09 11 3f 65 56 92 -60 a2 e4 f1 04 06 65 7c 99 fa ff 00 1f e1 6e bb -89 6e 9e 18 11 5a f1 d4 98 6c 85 79 ab 56 52 cc -ca 47 74 - -# Signature: -2a f4 6c 00 d1 d9 15 94 1e 21 2a 7b 8d 81 05 ee -0f 0e c4 80 ff fb b4 f1 3b f2 8d 73 e2 b3 19 b9 -84 a7 b7 c8 36 7a dc a7 ab 12 aa f5 3a cb 98 d0 -cb 54 ee 34 20 4c 90 8e 60 c7 c7 9e fb 42 c3 11 -4a 02 58 9e 1a e6 af b5 97 53 54 57 8c 14 35 ec -c8 9c 11 6e 90 26 b6 bc 88 9e e2 88 ae 4d af 03 -47 cc ce fc 5d fd 1e f8 3c b8 68 52 ee ff d8 40 -98 59 9b 72 5b f6 02 ee 62 0b df 44 af bd 84 c0 -cd - -# PKCS#1 v1.5 Signature Example 13.17 - -# ----------------- - -# Message to be signed: -8c 87 4c d0 ce 33 51 39 c0 8d 76 0b 82 5e b9 90 -5d - -# Signature: -66 9a 8a d7 cb 81 ef 21 87 f5 a8 56 47 68 4b 72 -48 4a ff 27 9f 0a f3 54 35 86 7c c2 b0 43 33 a1 -96 ec a6 cf 44 a9 7a 1b d3 9d 0f 6a 0f f9 59 57 -02 83 5b c8 0a 72 d7 14 04 ef 3f 46 fa 3b 0d 20 -e8 6d 7a 1d 5f 7e fc 3f 3b 8e 8a 7e 37 e8 7e 27 -a9 9f eb a9 6a d8 13 20 be 8f ff 78 55 7d 07 bf -ba e2 16 03 a1 36 8c af a5 ae 1d 1b 63 0a a2 1f -f2 0e 45 85 65 0a 77 3d 7e 2f 5e 7f 51 72 97 19 -3c - -# PKCS#1 v1.5 Signature Example 13.18 - -# ----------------- - -# Message to be signed: -cb 3e 61 21 d3 8b 7d 97 e1 8b a1 5c 49 3d 1a c3 -2e 9d 2e f4 e3 bd 16 df 9c 67 e4 a1 96 e9 24 7a -8d 0c 24 b2 1c 4a b2 3e 77 d6 db 11 7d 59 11 95 -bb af 44 66 82 5f 63 97 8f 11 40 85 28 1b 79 ae -a3 7e 32 c6 b3 6c 1e 9d dd 4a d1 23 6e 97 fd 42 -7b 4d 97 6e 07 64 9d ca 4f 33 a8 9c 46 fb 8c 00 -b4 26 7b 14 47 04 - -# Signature: -56 84 17 80 3a 40 0e 9d 05 0a 43 20 ae 7b 7d 8d -24 8e 16 36 50 86 9d 9f dd 10 0c c1 a6 b9 bc 29 -1c 3f 23 f1 25 60 03 16 4f 61 9d bc 78 63 5e bd -f0 89 49 0a fa 5a a0 0b 6f 97 eb 06 36 c3 bb a8 -9d 86 36 0a fe 26 00 43 d8 61 a7 4f 64 c7 1d 9c -bd 31 ea e2 39 3a 1a f1 56 1f 1a b9 2c aa 76 dd -1e 76 ab 23 33 09 8c 83 c2 d9 9f ae 82 73 98 75 -80 05 c1 76 cb c4 a2 e2 2e fa 0e 6c 12 f4 e3 42 -81 - -# PKCS#1 v1.5 Signature Example 13.19 - -# ----------------- - -# Message to be signed: -21 9a 2f 8d 0b 00 0a ed b5 f1 85 45 5e d3 ea 09 -4c 45 42 6b 28 5b ab 4a 07 cf 3d 0a 29 06 f3 e2 -03 18 4c 2d 3d 81 a8 09 b8 9c 9f c4 8b c9 af 9a -b3 2f 84 f1 5d 81 38 9c 4e db 0a c6 8a d0 95 02 -e3 f3 0c 7c f6 45 10 29 54 b2 97 c8 66 14 66 fc -10 - -# Signature: -03 83 5d 90 57 e2 b8 21 dc 4c 6e ac a3 f4 15 6a -56 55 0b 6f 9d 74 00 fc 5c 51 95 a4 ae e4 71 7d -f3 29 29 12 2b 43 27 3a 07 9a 24 f9 9d d9 e7 c3 -40 56 ae a4 fc 4e 45 7d 83 14 ef 34 42 7f 8e 20 -4b 81 bb 49 03 fb 3e 77 9e 38 9e 41 33 90 68 c1 -57 d9 b0 9f 2c 5e 99 cc 54 e6 ef 86 ee ac 0e 19 -f4 4e 33 e7 07 c4 26 1a 0a 83 ce b4 22 f2 e0 6b -cc ae 3b 8b ba 42 8d 75 57 15 2f 40 84 6e c0 11 -34 - -# PKCS#1 v1.5 Signature Example 13.20 - -# ----------------- - -# Message to be signed: -e3 9c a4 0d 2e 9d 03 ae 05 96 f6 0e b8 f6 09 99 -30 85 a5 db 15 6b 0d 50 98 fe 5f aa c5 5f 70 99 -3f e1 76 d2 d0 c0 38 b8 60 bb f9 a6 62 43 f5 e7 -8e 6c be 52 6e cf 25 12 8d ae 31 96 56 cc 32 1e -e8 0a 50 53 14 90 c9 a6 24 3f bd b0 c5 eb 4c d6 -42 d2 61 15 05 ae 10 84 97 57 38 ad 84 62 1d 67 -f5 - -# Signature: -4f cf a5 73 97 f2 7e e0 f8 ae 75 a0 a5 4d 54 b0 -c5 1b 95 7e e6 3b f7 90 1b 60 55 cc 39 87 c3 2d -f7 22 0e 16 6a 71 60 6a bc 78 f9 11 07 f9 74 df -f7 d6 25 7c 25 6d c6 ed 7a 69 c3 c9 9f 9f 89 ab -b5 8f e5 89 b7 ee 7c ad 0f 48 c1 60 10 d0 46 a9 -c4 e0 04 bb e1 a8 29 79 68 d4 0b c7 06 82 eb ae -a4 48 52 5d be e1 6b 03 bd 0b 65 26 d0 98 d0 9b -6b ad 9a ba 03 93 05 e2 ab 79 69 02 08 65 80 cc -f0 - -# ============================================= - -# Example 14: A 1536-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -d8 70 a7 76 cd 13 ed 44 3d f3 99 08 be e2 ca d7 -3c 48 5f d9 bf 06 32 13 22 88 7f be 65 5c 08 cb -e4 c8 f6 3e 25 4f c9 1c 75 f0 55 7d 90 1d 43 5b -0e 8d ed 82 d4 91 73 41 4d 29 86 03 24 e4 6c 1b -03 0d fe aa 29 d8 0f 98 98 c2 c5 e1 01 cb f6 da -a0 62 89 78 d4 15 b5 02 de a2 6d e6 56 1c 79 ab -06 5c 6d ca 6a bc 4d 4d 4d 5e 9f 5c 74 cb 3e 6a -5a f7 1d 1f 90 fa 5e aa 1b e0 ca 94 7a 70 a3 9e -fd 31 5c 4d f2 1a 1a 82 1c aa ff 8d cb ad 13 b2 -9c 7e 82 aa d5 3c 64 f5 82 ec 9e c3 1e 6b de 82 -ea 5a 5f 4c cc f0 c4 57 b8 88 f1 55 0c 4f f8 e1 -c1 78 a7 6a 46 c1 96 f4 be f5 9e 61 dd 94 4e 47 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -d8 70 a7 76 cd 13 ed 44 3d f3 99 08 be e2 ca d7 -3c 48 5f d9 bf 06 32 13 22 88 7f be 65 5c 08 cb -e4 c8 f6 3e 25 4f c9 1c 75 f0 55 7d 90 1d 43 5b -0e 8d ed 82 d4 91 73 41 4d 29 86 03 24 e4 6c 1b -03 0d fe aa 29 d8 0f 98 98 c2 c5 e1 01 cb f6 da -a0 62 89 78 d4 15 b5 02 de a2 6d e6 56 1c 79 ab -06 5c 6d ca 6a bc 4d 4d 4d 5e 9f 5c 74 cb 3e 6a -5a f7 1d 1f 90 fa 5e aa 1b e0 ca 94 7a 70 a3 9e -fd 31 5c 4d f2 1a 1a 82 1c aa ff 8d cb ad 13 b2 -9c 7e 82 aa d5 3c 64 f5 82 ec 9e c3 1e 6b de 82 -ea 5a 5f 4c cc f0 c4 57 b8 88 f1 55 0c 4f f8 e1 -c1 78 a7 6a 46 c1 96 f4 be f5 9e 61 dd 94 4e 47 - -# Public exponent: -01 00 01 - -# Exponent: -05 88 8f c7 7a 43 bd a7 a6 7b d1 58 47 65 0d f1 -85 c1 85 ed cf b3 ed 58 ce e3 b5 7c 5d 24 06 b7 -8b c0 55 87 4e 35 e5 7a dc 4b 0a 2c 7d 20 3a 66 -1c 0f a5 d8 57 ed e6 07 ef dc 95 68 04 2b f0 d5 -99 f4 e4 23 5e 91 7f 08 94 33 3a 92 df 94 62 d9 -c1 0a f3 df ca 70 49 a1 ea a6 35 70 13 98 83 c5 -be fe be e4 e2 21 89 43 d3 0f c6 45 ff e8 b9 14 -d2 18 dd 58 96 0a ad c1 21 71 5b ce 5c cd de 4a -2c 73 a8 d9 d8 6a 4e b6 e4 55 dc 92 4f d7 4a 0b -1f 75 69 1c 28 1b ae 91 4d 69 9e e2 59 d8 5c 5f -b5 dd 99 9e be f9 b7 0a 4b d9 4a a4 fa fa e2 6c -a7 84 d3 2f d4 e0 77 db b6 ea 69 3b cd 6d 27 d5 - -# Prime 1: -ff 8e f1 e7 4c 44 5a 5c c8 97 3a 81 9c 75 45 49 -12 35 72 0c f9 eb 83 f1 81 13 3c 78 a1 4d cc 4c -e5 e7 75 be 3e 0c 46 ed 2f 21 9a b8 8d 87 77 ad -6e cb e4 0c f9 18 76 4d 7e 37 c6 68 35 91 e7 aa -a1 3b 24 4b 7f cc 0e b6 df d7 6a 11 5f 30 ed 2d -63 68 c8 ea 78 0a 21 1c 0a c9 c0 72 5d fa b0 8d - -# Prime 2: -d8 d0 67 64 c1 f7 64 54 c6 8a 3a 08 1e 95 d7 47 -c2 94 11 ad c4 03 a7 cb 71 b4 3a f5 05 ca be 41 -b4 9c 97 1c 13 ad 65 63 b8 c9 0b 93 b5 89 79 bb -74 f8 20 ef b8 de d8 1f 46 30 54 a7 7f b3 0b b0 -99 98 51 a4 3c cd 01 69 18 51 31 f7 43 1b 02 e9 -c6 b9 f8 38 71 d9 cd 5e 0c 3c 58 70 cf 97 97 23 - -# Prime exponent 1: -e8 d6 15 f4 04 7a aa 51 aa b8 8e 27 94 a3 0b d3 -3d 71 d0 4d 9e 4e 43 d2 7f 25 45 8d 2a 79 b5 4f -c2 8f 95 a9 14 e3 1e a3 ee b3 11 42 60 40 32 7b -a3 5c c4 94 45 47 52 51 dc 53 78 c3 6d 3b 57 f5 -10 1c d0 3e b1 5a fb 75 06 90 3f 25 40 b3 55 04 -6b 74 06 ca 09 40 41 56 49 45 f3 be bf 7d 2d e9 - -# Prime exponent 2: -73 5d b1 26 73 ef 67 7b 94 89 48 87 b9 7e 91 a6 -a5 6a 94 5d 99 c7 38 29 90 bf 0e 00 02 ac f6 bf -8f 93 22 f4 d5 a3 96 27 91 d3 a8 4d 58 73 66 4a -d0 da 96 eb f7 ba db d5 08 4b ff 3f 81 3b 8c 24 -d4 15 b0 9b 6b 9e c9 f9 59 ef 1a 5f 2f 5d d8 16 -fc 9f 47 ed 00 e7 9b d7 47 3b 74 f3 d2 02 1f 71 - -# Coefficient: -10 62 18 af 97 1d 92 95 91 59 90 a4 ed 3e 09 d3 -63 db 33 06 b0 90 a1 33 eb d7 54 e2 bd 77 6b 25 -85 99 9d 4f 88 43 03 0a c7 0c 0f f5 de 52 12 67 -22 34 c0 07 ce 74 56 4c 79 1e dc d5 76 f9 68 44 -04 8c fa 66 36 46 b8 fd 80 c7 51 26 b2 26 6e 48 -f1 fa a7 05 44 ad 42 04 fd 61 56 29 2e 51 6e 13 - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 14.1 - -# ----------------- - -# Message to be signed: -f7 a3 c6 7e 92 a7 87 f3 5d cc 47 ae d7 d6 b6 19 -29 67 bd fd 00 a6 ac bf 6f 7e fe 46 d3 ac ae d9 -78 8a a4 f1 db 18 44 02 24 9f 9a ce fc 1c 7d fb -1e 69 0d 24 73 8d e8 6f a5 b5 25 0f 97 9e bd 8f -77 8e ec 0d 7f cf 73 1f a2 25 08 6c 86 65 64 ed -3e b1 54 dd 45 8d 05 00 28 2f 86 80 48 87 d4 43 -5e da 9a 44 36 a8 e9 23 a2 0c b4 b4 d0 e8 1c 91 -11 4b dc 06 82 27 8e c2 58 86 07 99 b5 9c 94 36 -f4 3a 53 ca b4 c4 cd - -# Signature: -09 d1 43 5b f5 a9 c1 72 03 d5 37 fe 57 df 98 7b -7a 51 f3 4b 2a 14 09 7e 06 a0 de 56 3b e7 d6 4b -4e a3 79 73 b4 fe 99 73 a6 6a 3f 31 ba 8e 07 e9 -11 7b 6a 1e e7 09 61 33 7b 4d 2b 0d f5 98 10 b6 -24 08 51 18 bd a7 0a c7 4a e4 3e 2f bc f8 92 27 -63 03 23 da 68 30 f5 b1 a2 b9 54 f1 b1 5a ea 07 -54 df 2c 51 18 57 95 16 e8 77 cc b0 b1 28 6c 57 -24 65 5e f8 d2 91 85 66 6f 6e 9b d3 2a 6b d9 ce -9e 1e f9 47 29 fc 67 d6 a3 0e 64 56 0e cf 78 bf -8e 1b 2b 40 e5 06 05 e2 5a e8 0c 38 67 64 ae d1 -1a 0e 71 44 90 49 c9 39 b2 96 2f 6c 24 17 a3 58 -cd c8 10 6b 12 b1 a5 58 76 39 43 8a f1 a6 8d 32 - -# PKCS#1 v1.5 Signature Example 14.2 - -# ----------------- - -# Message to be signed: -2a 13 30 03 ab 67 cd d2 e8 3b 44 e9 e9 dc 77 7d -e0 1f 4d 23 3d 22 e7 d2 b4 46 7f 04 81 2a 3a eb -ff b1 0a 09 24 54 e3 3b 9e 70 28 24 93 28 74 7e -a1 4a 11 c7 98 ac 2e 14 6e 4e 49 65 9b a8 60 67 -db 64 e9 bd 80 a7 02 1a ab cc 22 85 6e 81 01 40 -c2 0f d8 c6 52 7b ad bb d9 fa 59 53 fa 77 e6 85 -87 00 be b6 c7 4d 5a 46 3c 9d a8 61 13 3b aa 5b -d6 a5 99 80 7a e9 16 2e 3a f3 a3 48 d0 4a 4e dd -2f fb ab - -# Signature: -35 e6 66 cf b8 7c 04 88 a8 6f df ed 5f 9d ea ed -bc 46 74 17 1c 31 84 59 ac aa aa 20 e1 ca d7 c5 -86 04 14 0a 80 ff 7f 56 5b fb c8 6e 90 32 8d 4c -72 9b 91 bf 72 a9 8d b7 01 c1 be 63 8a 6e 8f 2e -46 8f 20 39 24 70 c7 c5 c3 44 42 d5 1b 1b 15 5f -b4 64 b8 a5 56 f4 a1 70 c0 23 01 fe d0 d1 aa 92 -aa fd eb c3 f1 8e a8 b4 d7 1e 24 5c 25 26 f6 fe -66 5d e4 83 85 f4 6c e1 bf 33 12 fa 89 28 09 8e -d3 31 2b 61 11 6c a7 e4 23 20 4e f0 8b d2 df 3a -d7 bb c8 50 09 8c b0 26 83 26 66 25 bb d9 59 82 -51 35 a4 5f 03 82 9d 09 6f ed 18 b2 0b aa 3f 9d -44 b0 07 aa 24 1f 92 f8 88 60 55 d9 8e 0e 07 04 - -# PKCS#1 v1.5 Signature Example 14.3 - -# ----------------- - -# Message to be signed: -58 62 7f fa aa 8e 80 0a 8b e9 8e 42 f5 1a 83 61 -1c fa b7 ee 37 6b 34 73 7b 3e 48 e1 bc 17 42 da -a7 7d e4 7e 1a 9b 29 33 77 aa - -# Signature: -3d 17 cb 38 6c 88 78 4d 35 9a d3 c3 8d be 88 8b -fa e8 31 bf b8 ed c9 d0 e8 01 e7 d6 9e 1d d4 c2 -44 1d 68 fd bb 35 12 6c 73 a4 ed ab bf f5 4e 74 -fa 51 09 da d8 b5 c3 13 d8 6a 79 e4 d4 12 76 60 -fc 2a 8e 1c 93 fa 8d 09 2a cc f0 1c c1 8a 60 6c -f0 7d e2 dc 3e 7b 55 33 11 52 db 01 b6 ca ea 1e -ce c9 09 31 99 be 62 c3 e1 23 e2 87 31 13 50 3b -22 03 0f 16 8d af c4 e6 bd 06 5a d2 f6 b1 de d0 -5b e0 c2 f9 b6 7b dc 1a 3b b1 8d a9 59 4c 95 7d -a4 e4 9f ac 3f e7 6e 07 66 f7 4e b0 d5 23 e4 dd -1a e7 59 da d6 b9 b9 08 b7 fc 8b 97 ef 5f 4c 82 -92 32 0a c3 87 c3 50 8b 54 cf b8 5d 34 f6 ad 39 - -# PKCS#1 v1.5 Signature Example 14.4 - -# ----------------- - -# Message to be signed: -0f 0f 8d 3c 0e 4d 26 08 af ad 5a 88 8e a1 4b 3f -6b 2b 27 89 dd 22 12 b8 59 09 e6 4b fb 10 4d 0f -7d e4 27 d1 4a 9f fa 85 5e 2d 4c a2 44 23 36 e5 -59 56 8b 28 41 5d 60 cf 80 63 de 55 92 17 1b 26 -9b 3d 76 33 51 c7 f7 d9 d2 58 09 e7 02 20 ee 30 -fe 8a 00 b9 5d 4c 20 20 26 89 7e d2 c6 1d 7a d4 -3a ed df 36 b5 c2 cb e2 1e 00 86 db d0 fd fd 19 -e4 3f 02 77 f3 bc 95 ed 55 a3 4a f9 30 91 66 02 -19 3c fe 04 51 4b d2 6a 05 7e 56 2a 11 90 c2 7e -aa b6 c3 22 fc fa f4 bb cc 7f 20 c3 77 9c 63 8d -7b bc 07 08 6c f7 5b f8 39 96 db 44 63 - -# Signature: -50 90 45 12 36 10 50 87 2e ae 80 10 26 28 b6 3d -02 16 8d ca 52 f0 ab d8 77 20 ea 48 05 0d 2c 62 -06 1a a2 15 32 68 be f8 ef b3 4e ed 46 17 1a 62 -88 e5 04 d4 20 f6 fc 14 51 38 61 1e 75 ed 3c f7 -9b 4d 10 26 64 d8 64 4f f3 e9 e5 db fd 71 cd c2 -7a 21 0e fb 10 be 90 27 56 04 f8 d4 49 14 8b 3f -86 09 90 39 c3 3a ef 90 bf 19 1b 35 18 eb 45 9d -a3 ba 14 fd 0c 72 22 9d ea 5f ac 2f 7d ad e1 08 -5c 8a 23 70 bb fc fa 2e 3a 9e 63 ca 22 4f 6d e8 -c8 d2 97 a3 b1 f0 6f 1f c9 49 78 90 fd 0e 0e 13 -88 7f ac b1 52 d1 2d 96 39 25 28 ef 28 d0 72 43 -31 ff 41 40 30 c7 a6 38 55 81 3c cd 89 fb db 1b - -# PKCS#1 v1.5 Signature Example 14.5 - -# ----------------- - -# Message to be signed: -26 65 cb 5e e3 6a a9 bb 1a 5c de 7c e8 - -# Signature: -4f 38 c2 ba 84 c5 0d 46 df 53 10 91 b6 27 12 14 -9c 1f 42 db d7 7e 03 d1 85 ea 96 ed a8 02 33 7c -22 c1 13 0b c3 be ce bf 15 39 fd 11 89 38 51 da -e3 cc 15 67 cb 6c 73 a7 2f a1 c9 69 48 68 21 12 -7e 7c fe a1 36 3e ee 95 2b 7c 6e b5 9e 10 2c 66 -57 c0 80 35 27 2c df 4a b5 e5 83 ed 73 7a d0 28 -ac 1c fa fe dd c9 07 3d fb d7 d3 ba 3d a9 e8 dc -d8 46 fa 36 5c 9c cd 8e 9b 39 48 3d 37 07 3c 1a -7b 78 2e e7 12 1b b1 a2 ad 8b f5 f8 ed 6e 65 3e -92 4d eb ad 87 1b 74 43 39 e5 ae 7e 96 f6 0d cc -45 ea 5d 69 7d 3b 1c c7 c5 e8 da 04 e9 2b e0 6c -ad 2e 61 4e ac 31 8a ec af 12 d5 a7 62 34 c2 c0 - -# PKCS#1 v1.5 Signature Example 14.6 - -# ----------------- - -# Message to be signed: -7b 7b 61 61 02 0f af b4 88 71 63 21 34 0d af 2c -06 ac 43 ce 21 32 86 86 84 aa af ab 13 99 65 3d -35 3b 26 93 ad 73 cb 55 b7 1d 66 ac d0 1a 16 0c -bf 74 37 67 bd 96 e7 fd 1c 7a 13 32 06 65 bb ad -1c 4a 0c ed 26 59 3c e8 9c d8 2f 54 6b d4 d1 b1 -bc d8 2c 65 a4 66 f9 9d a0 12 a4 1e 8c 41 20 69 -81 09 58 47 5b 4d 9c 2f 80 d8 2d 06 41 4c 83 25 -eb 4f 2c 5a 11 66 f1 f1 d2 d1 07 d4 8c - -# Signature: -d5 cb b6 c7 ef f4 a6 3a d8 25 0d e9 4c c2 9f 7f -31 a0 d7 10 6d 5d 77 1b 71 5d f8 a6 75 fd 16 34 -d6 e8 ab 58 87 5c c4 c1 51 7b 2f ad f4 e8 5c 1c -b8 b8 53 60 e0 68 75 87 d1 48 08 9f 3f 48 b7 9d -98 d2 02 7c 50 77 0b 33 4f 12 52 ac 0c 3b 2f 03 -65 34 c3 c2 97 22 f6 08 7d 06 d7 06 ce c7 c4 bd -ce 1c d6 4f 7b 4e 07 99 a8 7a a0 73 ea 83 20 29 -2b 8e c8 27 17 40 6d 36 ef 91 25 e4 1f b5 d5 3b -cc dd 62 2d 38 8f cc ee 60 a3 85 ec 20 6a 71 5d -c5 4d 78 77 bd 72 85 d0 84 4c 25 d5 93 77 97 91 -27 83 96 ff 9a 8a 91 30 6a 54 ea 76 60 7c 81 3f -80 1f 38 76 0c 3a 81 4b 93 96 95 9c 29 db ff 9d - -# PKCS#1 v1.5 Signature Example 14.7 - -# ----------------- - -# Message to be signed: -2b 0a d6 13 82 28 78 a5 72 e1 42 80 - -# Signature: -89 c8 10 84 da a8 f9 14 b7 e2 44 55 10 74 17 ca -62 1c 91 02 d5 01 ee b4 3d 17 4c 7b ad 38 1d b1 -8d 95 33 c3 41 1a ec 60 57 ca 5a 4d fd c3 f1 31 -c8 88 b8 8f 01 30 03 d6 17 e0 6d 64 47 95 02 ae -7e 42 4a 5d d6 37 b0 33 56 40 4d 26 0f 5e d6 b8 -cb 16 d2 57 85 28 cc 3e 85 00 34 6e b7 90 bd ad -41 b2 e3 6c a6 f1 98 85 e3 f6 f5 10 86 bf fb 6a -bb 9c 66 33 6b 49 47 34 64 c5 d7 ed 8e 9f f8 5e -11 ae ff 40 90 67 ba b0 a0 5c 41 e8 15 1b 8b e9 -87 f3 f5 95 8e 3e 6f 26 51 5d 96 bf 23 4b 22 ab -91 c0 85 7b 6c 08 a4 6b 03 05 fe 04 4c a9 aa a0 -d7 0a 27 58 a1 ce 43 16 64 a8 dd 79 40 8c 16 ba - -# PKCS#1 v1.5 Signature Example 14.8 - -# ----------------- - -# Message to be signed: -36 93 8c 8c 7c 6f 7e 35 52 34 db 5a 32 a6 48 10 -db 50 2b 67 c6 f5 92 54 4f fb 27 eb 1f 22 e0 6f -2d 63 8b 56 d5 d2 f7 d1 9e 9e 27 1f 2c c9 0c c0 -dd 36 d6 cc 2c 06 17 8b cc 70 6a ef 20 e5 6a 35 -8e 52 4f 63 16 76 9c 54 b6 de 2d d5 - -# Signature: -a0 37 53 a5 fb 54 aa 51 f6 dd 8d ab 91 f1 9c b8 -65 56 84 85 f8 55 8f 0d 10 3f 0d 2b 6d 78 53 6e -79 c8 15 c4 a0 37 bc af 11 b6 9d 4c db ab 03 5a -be 21 6f 71 52 f6 30 ff c7 9f 84 9d 8d cd 46 3a -ae 6a e9 7d 3d f1 5a 9e 73 d2 3f 18 78 fa c7 54 -cb dd 57 1a fe a5 d2 53 57 d4 b8 83 45 f4 89 be -0d 67 b9 bf ad f0 23 f2 6e 67 31 5e d5 fb f3 91 -91 0a f4 96 9b 72 4b f0 ca 31 c1 05 9f 8a 39 13 -b4 8a 13 81 9c 23 6c 9b e8 e8 24 ca 4c b6 19 fb -7d 78 4c d5 f9 52 6b 39 7c 76 c5 d0 c6 0c f7 f4 -8d 11 19 6e 54 f7 2a 08 bb 42 f7 5a ef e3 8f 0b -91 b4 2b b8 06 de 4b 87 c9 08 2f 72 1a 68 80 ca - -# PKCS#1 v1.5 Signature Example 14.9 - -# ----------------- - -# Message to be signed: -60 83 0c 01 cf a8 6f f2 dc ac 7a f9 32 1e e5 fe -50 2e 0e 7a 6f ac b7 3e 3f 6b c9 02 64 0a 61 09 -5f 64 6f d0 3e 80 d5 81 82 46 53 31 e7 5d 66 11 -a0 97 76 81 62 70 86 24 17 29 de 9f 44 ab 43 94 -9d ac 19 36 73 bd 6c f8 7f 5d 65 77 1e f8 72 81 -63 3f dd 07 ba c4 09 a6 e2 32 b6 01 ae ce 2d - -# Signature: -40 58 f6 e0 24 0d 85 1d 61 93 95 a7 52 87 a8 8f -af d8 dc 56 00 b0 69 bf 19 dc 3e 19 21 e1 17 b4 -97 b8 2b 3c 52 02 69 b1 d1 12 81 64 fc d8 8d d2 -b4 6d c8 5c 42 ec f6 7d eb ad 21 a3 b9 a1 55 42 -fe a2 26 06 ea b5 82 fc 32 97 11 ff c0 7f 4e ef -1f 3b bf e0 88 8c bc a4 85 ba fc 11 88 b0 af e8 -09 c9 aa f8 fa 36 66 b9 c9 05 85 39 db 1e c6 a1 -8e 5b e0 b8 01 44 d2 c3 7c a6 14 c0 90 b4 a7 f1 -34 58 e0 d3 a4 cb 0c b7 3d cc 4d 90 80 6f 61 08 -58 89 eb 5c 9b 14 09 de f3 60 fd 1c 2e 49 43 8d -7c 67 d7 9d bd 9a 59 2a b5 04 c4 71 5f 65 b2 9d -84 65 09 95 15 69 a8 c3 79 09 f5 d5 50 ee ff fa - -# PKCS#1 v1.5 Signature Example 14.10 - -# ----------------- - -# Message to be signed: -63 5d 22 03 ed 9d 5b 91 20 e3 1b f6 9d 30 5b e6 -06 86 97 e3 5c e5 9c 55 3e 50 8d c7 7b 07 3f fa -3a aa 59 f9 96 c3 0b 2e 68 63 23 81 9f de 22 be -6c 8d 53 86 84 14 b3 54 5a bf 43 57 68 a6 11 f0 -c1 a4 79 a0 c7 66 0d 53 5e 80 5b 5f ed c3 77 9c -f0 c5 2c 3c d0 40 ab 65 14 c7 f8 13 3d 47 b0 ac -c6 91 4e 6d 4a d3 c4 73 7c f5 12 91 09 4e 85 94 -33 ba 30 66 e1 9d 6a a2 da 89 6d c9 d9 5e f9 e5 -63 6d ab 35 f7 29 87 05 c6 d8 76 17 54 12 f8 84 -25 19 ff e1 6c f7 43 62 ab - -# Signature: -94 61 a1 a8 41 42 3e d5 cf c6 08 9a 74 db fc 53 -73 11 03 bf 49 85 dd b1 50 b0 e9 38 0d 3f e0 cf -6d 45 7c 5c 68 a7 f2 55 04 02 2d 69 5f f8 42 11 -8e bf 61 02 2f ea 47 fa 45 f7 c1 cc 72 6e 1d e5 -0b d0 64 b3 bb 70 16 57 16 2b 88 c0 b9 10 fe b7 -2f 48 7a 5c 7f 4b 9e cf ee 24 e0 7a a2 d1 98 d1 -13 cb 84 5d 81 7b b5 9b b1 da 24 a8 2b 91 c2 fe -3f ba 89 51 83 cb d9 c0 fe 0a c0 be 64 fe f2 e0 -13 92 05 b1 0b ca bf e5 a3 a7 a8 90 fc 0f e7 8d -ab e1 ad b5 bd 11 44 85 03 cb 0d cd 0b 68 f1 60 -19 6e 96 13 e2 9f be 9a 3f 94 06 ec 20 c0 30 e8 -1e c3 09 65 ea 01 9c 17 aa 97 11 01 c2 e5 30 59 - -# PKCS#1 v1.5 Signature Example 14.11 - -# ----------------- - -# Message to be signed: -87 fb a9 89 f3 cc 15 af 7e e7 61 c0 88 26 4a b7 -71 52 39 e0 b8 c8 a9 e4 8e 11 db 68 03 31 39 c2 -a2 89 ea 42 6e be 26 9f 5f b7 07 09 0a fb 89 1a -49 ca 05 c0 55 0d 72 9b f4 d3 7c 8f 1d a7 a3 ca -2f 43 87 a4 0b 5f 79 13 a3 85 f5 5b 81 41 af 36 -be 8f 57 16 65 f8 57 e7 7a 5c 9c cc e6 ba 8f 2b -e4 63 23 cc 56 91 56 6f f4 b6 d7 85 43 04 b9 3b -ba 1a 17 59 df b1 44 c9 54 7c f2 bc 8e aa ed aa -4f 1d d2 52 82 3b 72 87 ca 55 5d 21 06 08 9a 24 -3e 5d fe 8f c3 1d 3f 46 22 2a 68 ab af 31 81 5a -94 7e 58 57 cf 6a 33 17 0e cc b6 a5 e0 6d 23 cc -9d 48 ea f6 cd bc - -# Signature: -0b 5f 1c fc 25 3b aa d4 b9 83 f8 fe 05 0d 4a 01 -7c c4 66 98 0e bd 23 c9 d5 53 43 f5 10 7e 04 1e -b6 54 78 10 fd ba 46 86 e6 10 83 2f 92 82 ed f0 -66 04 b0 ab fe ea 38 01 32 79 17 79 40 99 7b 28 -90 2b 14 db 37 9e eb 4f 44 00 5d fc b0 03 68 03 -c9 f1 25 bc e1 f2 a8 2c 4d 30 07 ae 96 b8 48 b8 -13 ec 8c 97 ca 3f 71 0a 9a e0 db c2 8a 55 e0 58 -81 b8 58 db 55 71 20 f3 3c 59 cd 43 60 f9 20 8c -74 b2 7e c6 5d 11 ea 41 fa 6a 9e ac f2 a6 11 68 -ad 07 c2 09 94 8f 35 a1 61 f4 1f 87 54 0e a1 82 -84 aa b8 d8 f9 78 61 31 f0 43 90 2b 89 c1 7a 56 -0d 90 94 64 47 5a 0d fc e5 89 09 18 7c d6 e4 46 - -# PKCS#1 v1.5 Signature Example 14.12 - -# ----------------- - -# Message to be signed: -4b 5e 80 30 5c be a9 0d 63 7f db 23 47 c6 fe b6 -78 42 eb ac 6f 90 3d b5 a7 1e ba ab 8a 1c 2d f1 -12 60 a1 ec 90 7b 8b 63 4d 37 d3 6e d8 de 7d 0d -a1 03 bc 4a 9e 93 3f b7 bf ee 59 1c c9 33 29 9f -ee 46 0f 35 42 c9 78 f3 07 ae 05 24 64 f3 06 20 -ce bf 3c 9a 9c b6 a9 01 53 0c 1d 56 13 df 07 74 -31 2d 4b 5f - -# Signature: -b6 f0 3d 35 33 50 07 a7 47 ae 68 67 60 f9 ed ad -08 89 d2 d4 ca 0c b8 8b 67 43 12 d3 2c 55 2b 7a -66 c5 a9 52 8c 01 4b 58 c8 49 f2 31 a2 e0 45 68 -2e 3b bb 14 c7 f9 5f f8 bd b6 58 7f 25 11 cc 6b -f9 24 39 60 08 11 03 d4 7e 77 69 a1 77 eb db 91 -f1 28 73 de cd 5d c0 67 e4 5c 2b 2a 04 4f fa 3f -bb 04 c2 0a 3d c2 01 38 40 3f f2 5c a0 eb ad 96 -e4 85 9f a4 a0 d7 32 85 2a f3 50 a2 75 69 9a 94 -aa 6e 47 f2 17 e3 83 ef 8f ce 8e b6 ee d7 82 6d -7c 61 58 fc 58 82 e4 61 35 45 fa 26 ee e0 c9 f9 -3d e7 a1 65 08 ea 16 19 70 46 0d 6a 7c a7 70 f8 -de 8b a9 3c ea f3 97 dd f1 fb ce e2 82 a1 53 7d - -# PKCS#1 v1.5 Signature Example 14.13 - -# ----------------- - -# Message to be signed: -e5 ad 62 7f 24 f4 11 7a 0a 6b e4 a5 5f db 88 3d -75 a6 73 12 15 4a 71 89 23 d0 e8 f5 73 0a 54 d8 -ca 7c 97 4e 4d 59 33 8b b5 71 30 5c ce 99 0c bb -cf a9 1e a9 b7 73 b8 3d 7a 1f 0f fe c4 c6 b1 43 -fe 05 05 8b c9 0c e1 46 f3 69 cb ae 3b 3d 99 70 -5e f4 3d 07 21 b8 - -# Signature: -73 29 86 d4 ed db 8a 7e 9b 65 dc 01 6d d5 71 ef -ab eb 84 49 0e 88 e3 e7 3b 63 e8 0d 1c c8 6a 45 -2d ec 29 fc 81 7e 8a d4 ee bd dc d9 7c 74 5b c4 -79 7e 54 fe c6 ac e2 91 b1 96 dc 24 65 f0 8c f1 -dd d2 17 e7 7a af 7d 50 98 77 91 de 81 b0 41 10 -d1 1a b8 55 89 06 60 4e b9 d9 2b 35 f9 00 75 af -42 28 01 45 b0 88 e8 75 3d 0d b7 3c d3 a3 2b d1 -9c ea 35 38 ee 4f 09 27 3e f6 6d 07 05 d4 5e e7 -10 9f e5 95 df 55 76 7b 3d 10 81 72 27 bb 6b a3 -95 75 b8 5d 6a 35 a2 ff b8 8c b2 67 db fc 28 2b -b8 a3 de e0 2e c7 7b 0c b8 13 55 70 f8 a7 d7 ad -04 34 1a 08 64 e6 7f f6 fa 02 59 a1 69 74 c8 6a - -# PKCS#1 v1.5 Signature Example 14.14 - -# ----------------- - -# Message to be signed: -03 e3 9b a7 a8 0c 77 14 16 d8 52 63 e4 d4 3c 63 -93 df e7 96 52 3b 89 e0 a4 61 62 88 80 80 0d 8f -c2 43 1b 66 30 54 09 e0 6c 95 ae 7a 17 d5 34 b1 -e8 4c 19 9d fe 73 1d a9 49 f1 64 57 1d ec c8 b1 -66 be b8 dc 08 7c b4 86 99 98 c2 - -# Signature: -60 76 3b ea f7 c3 e2 2b 3b 22 dc 44 d9 47 82 6e -23 fc f9 6b 01 b7 74 1b 24 b1 b9 d9 3c 07 f0 c6 -4d 39 67 98 bb 58 9b d4 25 29 53 69 bf b8 79 ad -d3 42 cd 76 28 0b 57 e6 35 4f 61 95 e8 42 fa 2a -95 f1 c4 6f 0b 70 78 6c 31 8d e9 a5 5a 8a c4 54 -5e e7 cf f3 99 c6 78 e5 78 f8 93 9e d4 9e 84 bb -a9 aa e5 7c 1a 36 fc c3 94 86 46 6e 40 12 f9 58 -87 a6 81 10 f1 a4 84 67 e4 c2 34 f5 81 c5 ec 47 -71 06 cc b3 ec 86 17 b4 be 21 93 37 44 8f e7 2e -25 de ab 53 ea cb 92 e5 96 62 95 b3 a5 57 12 19 -58 df e7 9c a4 72 f7 9e fb da 1d cf ba 9d bd 0f -97 67 32 c0 93 b9 8f f1 93 c9 02 98 7a 42 6c 0f - -# PKCS#1 v1.5 Signature Example 14.15 - -# ----------------- - -# Message to be signed: -d4 c2 35 96 7d 4e 87 b6 71 1e 32 ac 70 37 a3 97 -f9 9b 1c ad 95 a1 88 94 6a 48 64 0e b6 b7 b0 03 -c3 2f 85 a1 21 b0 9c a4 c8 be c0 b8 27 44 aa f2 -7d 16 6c ef c7 a9 70 2a d3 1d bd 15 ea 2a 18 5f -5b 9b a6 42 f9 49 07 8b c6 09 b9 a8 a3 36 92 d7 -18 49 39 d1 f9 eb 42 6a 6d b7 40 ea d9 4c fe a1 -7f eb 06 18 d7 4d 9a 65 16 88 e9 0b 9b b7 05 24 -30 5d 61 8c 88 a5 5f 45 44 50 e0 c5 85 d3 a8 d9 -81 65 81 8f 36 3b 20 a2 52 49 2e 15 12 58 58 90 -a8 c3 20 a7 18 71 58 ce 0d 4e 4b e1 c7 01 f8 af -dc 54 5c 4d ab 86 8d 41 d4 1c 21 c2 cb 1f 67 df -79 53 d5 f7 26 1c 50 92 bb c4 33 2a c5 57 5b 6e -0e 03 14 9c 04 0c 3e 20 1c 79 15 ac 20 22 88 4e -a0 e6 c2 14 03 f0 b4 4e 0f 71 34 3f c9 11 1a 7d -b2 f5 e9 e5 09 c2 d8 97 84 ef b2 2c 31 e8 16 5e -0e 93 6c - -# Signature: -46 9f 08 bd d0 3b 75 64 0e 8a 44 a0 7c a8 de 4b -ac f8 33 1f e3 9c 44 d2 3a a7 b5 81 dc 3f 00 f5 -42 1b 5c 17 2d 0f fc e9 14 97 d3 d4 b1 04 f5 6a -98 ec 94 f7 19 27 1e 58 b4 3e fb d8 76 e1 c1 31 -fa 97 82 07 28 a5 56 75 55 21 4c d9 4a 18 fc ce -5c 2f 53 b1 9d 1f 3c 73 d0 9f 7b e1 80 97 38 b0 -3c e7 69 e4 54 ed 4c be dc af 43 c4 8b d3 9d f2 -f8 bb 63 b8 fc 4d 0d 4d 5b 20 4f c2 20 01 3a 66 -8c 19 f9 75 02 93 a4 71 15 83 88 26 45 db f3 ac -4f 83 9b 6f d1 cf 3b 5e e8 d7 34 e1 da 37 4d 91 -d8 9e a3 18 e9 18 34 83 f4 a0 9a 93 51 4a f5 4f -75 d0 a3 56 51 b2 40 f7 9f 20 a2 97 7d 14 57 8c - -# PKCS#1 v1.5 Signature Example 14.16 - -# ----------------- - -# Message to be signed: -d0 6a dc a4 c2 0f 0d 9f 7b e6 5a 20 32 7c 29 47 -56 e3 ed d9 e1 d3 9d 0f 95 c7 9d f1 ba c3 34 35 -9f ab 94 3d 85 45 a3 ba a3 7a 59 29 5c 58 b2 37 -75 2b 8d e7 d4 32 3c 56 e9 d7 cb 0c 7f 83 1d 54 -9c b3 87 19 a0 81 d5 8b 60 57 ec b7 42 9e 2c a6 -07 cd 13 06 35 59 43 15 9d c9 24 ad 3e 9c b1 3d -0e 71 ea dc b0 05 e1 84 c0 c2 ce aa f9 d7 4a 1c -1d f6 fe c1 8c 97 a0 - -# Signature: -9f d9 52 5c 15 c8 43 b8 06 9c 15 f2 6d 3f 95 24 -6a f3 7a 8b 8e 6b 93 9d df 5b 38 28 cd b6 2c fa -37 3a 92 ec c4 13 84 a8 77 ca a0 90 aa 13 c8 47 -ef 28 29 dd ca 14 14 20 14 02 14 81 55 05 50 da -a2 9d e2 ab 70 01 b8 55 c9 34 2f 0c 90 bf a6 c3 -34 9b 2c 39 62 13 ef 70 cb d8 4b b4 ce 6e f5 8b -17 6e 9f 6f cc db 6e 46 ca c3 41 14 a1 b9 f9 8a -8a 32 75 7b f7 5d 6b fc 45 5a de 6a 01 f9 60 50 -1b 79 f5 fb e3 b3 8f ca 03 46 4e 43 d4 96 63 c7 -9f f6 4d 32 98 1e 44 80 cd f4 2d 8a f8 da a7 f1 -2b 81 a5 aa 96 5f ad aa 3c 03 b7 ff 22 d3 cf df -fe 3c ad f4 d5 98 9e d1 4c 96 9a 6e 8c 9a 1e 04 - -# PKCS#1 v1.5 Signature Example 14.17 - -# ----------------- - -# Message to be signed: -3a 63 02 d7 9e 26 b5 55 c7 7d e9 2a 91 e0 78 57 -1e d1 57 2f fc 3e 4f c9 05 ce 53 f1 04 b3 22 00 -95 7e b2 b5 e5 f3 e3 fc bb c1 62 f9 e5 25 c7 06 -f1 dd 04 fc ab 51 6b c1 8a 8e 4f 88 a9 38 a5 b2 -56 85 d7 8d dc 9f 10 4e 49 bf 5c a0 b6 5a 4b 96 -57 e0 4a 71 fb 50 eb 4a ac 22 c0 bb 93 f6 0c ac -94 83 f1 77 13 55 3d ca 4b 31 e2 72 7b 32 e3 50 -fe 20 4c ec d9 a7 cd a4 da da 2e 87 ff 6f 2b 73 -e7 b0 78 1e 21 2f 34 fe 36 36 10 f0 18 a7 99 37 -37 55 ab 46 66 7b b6 52 5d 7d c7 a0 e8 28 90 17 -f5 48 7f a6 92 ef 2f dd ce 38 ad 3f 45 30 de 7e -e5 05 66 70 a7 35 d3 78 d1 ef c9 94 81 f8 c9 fb -ee a9 9f 56 6a 0b 6e 28 46 26 44 a6 d9 c6 cc 88 -fb - -# Signature: -b7 57 fa 74 7c 5c 87 67 66 f3 58 ac bf c7 e7 b8 -05 96 36 8d 0d 86 29 50 e5 55 f4 71 64 6f 64 0e -85 1d 61 2a 55 6f 55 a7 4a 32 92 42 9e 4c 14 f7 -8b a3 eb bd 96 87 f3 08 de db 3c fe d7 1f 4a 9d -d2 6f a5 12 2f 7f 71 94 ae b6 3b c8 b7 5c 34 31 -87 11 5a 1d bd 35 95 90 f7 ff 38 62 b7 08 85 af -1c a9 34 b8 ce bc 2c c9 e6 47 25 3f d1 32 7a 2e -d4 24 4d c8 f5 85 55 a6 89 7c a3 22 9c 80 1e 7b -f6 28 f5 25 e6 c9 48 80 4d 0b 1b 6d bc d7 90 2a -cd e7 a2 5b a5 91 d8 86 e2 8d aa 8d ed 5e e4 01 -e3 4e 64 12 f1 e6 44 ee c1 2a e9 42 61 90 6a 17 -26 11 dd 5a 98 67 78 9c 41 90 34 68 84 29 e9 06 - -# PKCS#1 v1.5 Signature Example 14.18 - -# ----------------- - -# Message to be signed: -9d c7 ce 1d 02 ca dc f1 0d f1 11 04 56 b8 a7 a5 -ea 43 76 b2 7e 8b f8 cc 8d b8 10 49 fd a3 fb d0 -db 8a 3d 0f 6b d7 48 6b 8d 84 bf 9f fd 4b 64 17 -52 df 7e df 50 86 5e 8e 58 ad 49 f7 24 0e 47 d3 -fc 98 5e db 59 6d ab fe 01 72 2a 22 77 60 38 3c -e2 4d 4a 05 d8 b0 6e f5 b9 6f 11 7d 81 - -# Signature: -05 a9 5e 11 b5 bf b0 1d cf de 3e fa 9f 31 3d 81 -bb 0d fd 46 de 63 b0 65 80 56 c5 3a f7 ad 9e 89 -43 8b 7d e7 8f f8 ea 88 d0 72 b1 74 9a 52 9f 1c -c9 cf 2c f3 2e 5a b7 20 e0 69 b4 90 6d 28 2a 03 -dd 78 d1 b3 ca 2a 3f 92 5b f5 1c 74 91 b7 3b a0 -bf 54 d5 0d 97 1d e5 b2 77 26 d8 fb 3e e2 77 34 -97 df 35 49 51 7e ed cd 9d e6 8d 90 df 35 d3 f0 -50 81 15 1a da b5 39 73 85 ab ee a7 2b 69 bd 0d -e1 8d ce e9 a2 be 00 e9 1a 03 24 03 b1 f8 1b bc -0a e7 31 c6 c0 d9 cf dd 06 c3 31 ed 89 d7 de 1d -e1 df 46 cf 09 ce 53 df 15 97 fb 69 94 68 1c 7f -be 94 c9 b0 8e 50 aa 1b 12 41 96 02 98 7f 37 dd - -# PKCS#1 v1.5 Signature Example 14.19 - -# ----------------- - -# Message to be signed: -87 a6 45 61 1b b1 91 85 3f 4f d9 b7 40 b2 de 4c -16 3e 75 62 b1 17 62 63 3e 72 df b6 f6 be 7e fb -90 41 a9 65 82 94 3a b2 01 83 91 c0 5a df ab 46 -4d d6 e3 3f 96 0d db f3 b1 7a c6 2b b7 8a fc 1c -6a 45 39 6c 09 08 70 7c 62 36 12 55 cb f0 9b ad -95 9b 31 33 da 48 d5 32 ba 7e f1 d2 0f b6 57 2a -1f 0e d6 f2 c6 e1 be c1 b1 7c c3 19 ba f7 2a 19 -8a a0 01 b8 3d 4e 98 69 c3 40 90 f2 29 a9 c7 f1 -42 a7 4e 85 ab 3e d5 1c 69 ac 15 fa b4 ab e4 67 -15 73 cf 5a d2 b5 8e 78 a9 44 ed cc ea c5 ee 58 -bf ce 66 f4 0a ac 2a be 4e 5f a0 72 dd 0f 66 4f -ac 81 1a ef 08 42 10 e5 64 1b 9c d0 8c 87 24 f4 -b4 1e ed 1d 9d 4a 18 77 80 46 59 7b d1 a2 7b bb -c0 56 c1 5e 43 c0 38 ef 37 5b 43 5e 73 a7 d3 2f -01 50 16 b7 82 35 ce 75 a7 b7 62 04 99 68 e9 93 -22 53 e4 2c a9 76 c8 d8 dc a1 bb 2d bf - -# Signature: -b8 80 62 26 fb d3 d9 7b 79 f0 dd 1d 8c f9 a2 35 -e5 1b 94 b7 e2 23 ec 68 33 2d 68 6e d3 31 3e d1 -be f6 88 70 23 af 7a 5c 99 df 03 68 a3 49 c6 a5 -94 79 5b 62 35 36 10 13 42 69 0d eb 5f ad 90 23 -78 2f 6d be 16 43 a4 56 18 57 4f 16 72 81 12 a7 -e0 ef 9f 58 65 6f 6a db f4 00 40 9f 4a a5 01 3c -15 9a 36 8c a5 9b de 6b 39 18 df e1 d8 02 fa 6c -fa 06 c9 ca 31 ac a7 8c b2 63 c8 ed 91 7a f9 a9 -a7 95 d5 e2 c4 01 e7 29 96 4c f7 ac 28 cc db 36 -d9 59 ed 7f d9 af 1c 47 09 7b 62 55 c6 4e 1b 16 -f2 1d 86 87 04 55 d5 f0 bf 90 1f cc 68 c3 4b 72 -c1 be e7 2e 6b 8c 4e 36 ae 33 99 6c 7a 59 d0 9a - -# PKCS#1 v1.5 Signature Example 14.20 - -# ----------------- - -# Message to be signed: -03 2e 28 3e 59 6e 87 fa a6 cf cf b8 fa 04 df 6a -61 e6 11 df e7 3b bf 66 8e e6 7b 49 6b fb 0f fb -7f 9d c9 31 a9 8b ce db 25 - -# Signature: -b9 fd c0 3d c1 99 70 71 3c 4a 17 e8 7e 7e bb 5f -13 50 5d 59 cb b2 2b a7 2e 9f f1 6b df 8b 65 9c -33 30 a9 3d cc 09 2a 5d 38 5b 2d 5e 15 34 00 31 -46 c0 50 b7 dd c4 f7 56 56 9d a2 11 80 15 82 26 -61 19 f5 59 9b 1e 65 e8 eb ea 6b c9 64 42 ee 12 -ac b9 6c 6d ba 08 3e 92 10 94 da 9c 9e cf 5a fa -a5 4b 7f de 7a 0c ae 3f df e4 d2 51 93 3a 52 f0 -2d c2 3e 1b 32 14 c6 83 e1 9a f4 6e 18 c7 49 56 -dc 6a b3 50 2d 46 ca ac 3c b2 6b 70 7c dc 30 25 -b6 de 4e 83 54 3b 95 84 5b 4a 15 97 60 77 0a 4b -d0 9e 46 35 a0 4e 21 7d 66 5c 95 94 87 9f 38 1d -71 10 09 34 fa da 61 c7 cc 22 b8 d2 ff 8e b3 5a - -# ============================================= - -# Example 15: A 2048-bit RSA key pair -# ----------------------------------- - - -# Public key -# ---------- - -# Modulus: -df 27 1f d2 5f 86 44 49 6b 0c 81 be 4b d5 02 97 -ef 09 9b 00 2a 6f d6 77 27 eb 44 9c ea 56 6e d6 -a3 98 1a 71 31 2a 14 1c ab c9 81 5c 12 09 e3 20 -a2 5b 32 46 4e 99 99 f1 8c a1 3a 9f d3 89 25 58 -f9 e0 ad ef dd 36 50 dd 23 a3 f0 36 d6 0f e3 98 -84 37 06 a4 0b 0b 84 62 c8 be e3 bc e1 2f 1f 28 -60 c2 44 4c dc 6a 44 47 6a 75 ff 4a a2 42 73 cc -be 3b f8 02 48 46 5f 8f f8 c3 a7 f3 36 7d fc 0d -f5 b6 50 9a 4f 82 81 1c ed d8 1c da aa 73 c4 91 -da 41 21 70 d5 44 d4 ba 96 b9 7f 0a fc 80 65 49 -8d 3a 49 fd 91 09 92 a1 f0 72 5b e2 4f 46 5c fe -7e 0e ab f6 78 99 6c 50 bc 5e 75 24 ab f7 3f 15 -e5 be f7 d5 18 39 4e 31 38 ce 49 44 50 6a aa af -3f 9b 23 6d ca b8 fc 00 f8 7a f5 96 fd c3 d9 d6 -c7 5c d5 08 36 2f ae 2c be dd cc 4c 74 50 b1 7b -77 6c 07 9e cc a1 f2 56 35 1a 43 b9 7d be 21 53 - -# Exponent: -01 00 01 - -# Private key -# ----------- - -# Modulus: -df 27 1f d2 5f 86 44 49 6b 0c 81 be 4b d5 02 97 -ef 09 9b 00 2a 6f d6 77 27 eb 44 9c ea 56 6e d6 -a3 98 1a 71 31 2a 14 1c ab c9 81 5c 12 09 e3 20 -a2 5b 32 46 4e 99 99 f1 8c a1 3a 9f d3 89 25 58 -f9 e0 ad ef dd 36 50 dd 23 a3 f0 36 d6 0f e3 98 -84 37 06 a4 0b 0b 84 62 c8 be e3 bc e1 2f 1f 28 -60 c2 44 4c dc 6a 44 47 6a 75 ff 4a a2 42 73 cc -be 3b f8 02 48 46 5f 8f f8 c3 a7 f3 36 7d fc 0d -f5 b6 50 9a 4f 82 81 1c ed d8 1c da aa 73 c4 91 -da 41 21 70 d5 44 d4 ba 96 b9 7f 0a fc 80 65 49 -8d 3a 49 fd 91 09 92 a1 f0 72 5b e2 4f 46 5c fe -7e 0e ab f6 78 99 6c 50 bc 5e 75 24 ab f7 3f 15 -e5 be f7 d5 18 39 4e 31 38 ce 49 44 50 6a aa af -3f 9b 23 6d ca b8 fc 00 f8 7a f5 96 fd c3 d9 d6 -c7 5c d5 08 36 2f ae 2c be dd cc 4c 74 50 b1 7b -77 6c 07 9e cc a1 f2 56 35 1a 43 b9 7d be 21 53 - -# Public exponent: -01 00 01 - -# Exponent: -5b d9 10 25 78 30 dc e1 75 20 b0 34 41 a5 1a 8c -ab 94 02 0a c6 ec c2 52 c8 08 f3 74 3c 95 b7 c8 -3b 8c 8a f1 a5 01 43 46 eb c4 24 2c df b5 d7 18 -e3 0a 73 3e 71 f2 91 e4 d4 73 b6 1b fb a6 da ca -ed 0a 77 bd 1f 09 50 ae 3c 91 a8 f9 01 11 88 25 -89 e1 d6 27 65 ee 67 1e 7b ae ea 30 9f 64 d4 47 -bb cf a9 ea 12 dc e0 5e 9e a8 93 9b c5 fe 61 08 -58 12 79 c9 82 b3 08 79 4b 34 48 e7 f7 b9 52 29 -2d f8 8c 80 cb 40 14 2c 4b 5c f5 f8 dd aa 08 91 -67 8d 61 0e 58 2f cb 88 0f 0d 70 7c af 47 d0 9a -84 e1 4c a6 58 41 e5 a3 ab c5 e9 db a9 40 75 a9 -08 43 41 f0 ed ad 9b 68 e3 b8 e0 82 b8 0b 6e 6e -8a 05 47 b4 4f b5 06 1b 6a 91 31 60 3a 55 37 dd -ab d0 1d 8e 86 3d 89 22 e9 aa 3e 4b fa ea 0b 39 -d7 92 83 ad 2c bc 8a 59 cc e7 a6 ec f4 e4 c8 1e -d4 c6 59 1c 80 7d ef d7 1a b0 68 66 bb 5e 77 45 - -# Prime 1: -f4 4f 5e 42 46 39 1f 48 2b 2f 52 96 e3 60 2e b3 -4a a1 36 42 77 10 f7 c0 41 6d 40 3f d6 9d 4b 29 -13 0c fe be f3 4e 88 5a bd b1 a8 a0 a5 f0 e9 b5 -c3 3e 1f c3 bf c2 85 b1 ae 17 e4 0c c6 7a 19 13 -dd 56 37 19 81 5e ba f8 51 4c 2a 7a a0 01 8e 63 -b6 c6 31 dc 31 5a 46 23 57 16 42 3d 11 ff 58 03 -4e 61 06 45 70 36 06 91 9f 5c 7c e2 66 0c d1 48 -bd 9e fc 12 3d 9c 54 b6 70 55 90 d0 06 cf cf 3f - -# Prime 2: -e9 d4 98 41 e0 e0 a6 ad 0d 51 78 57 13 3e 36 dc -72 c1 bd d9 0f 91 74 b5 2e 26 57 0f 37 36 40 f1 -c1 85 e7 ea 8e 2e d7 f1 e4 eb b9 51 f7 0a 58 02 -36 33 b0 09 7a ec 67 c6 dc b8 00 fc 1a 67 f9 bb -05 63 61 0f 08 eb c8 74 6a d1 29 77 21 36 eb 1d -da f4 64 36 45 0d 31 83 32 a8 49 82 fe 5d 28 db -e5 b3 e9 12 40 7c 3e 0e 03 10 0d 87 d4 36 ee 40 -9e ec 1c f8 5e 80 ab a0 79 b2 e6 10 6b 97 bc ed - -# Prime exponent 1: -ed 10 2a cd b2 68 71 53 4d 1c 41 4e ca d9 a4 d7 -32 fe 95 b1 0e ea 37 0d a6 2f 05 de 2c 39 3b 1a -63 33 03 ea 74 1b 6b 32 69 c9 7f 70 4b 35 27 02 -c9 ae 79 92 2f 7b e8 d1 0d b6 7f 02 6a 81 45 de -41 b3 0c 0a 42 bf 92 3b ac 5f 75 04 c2 48 60 4b -9f aa 57 ed 6b 32 46 c6 ba 15 8e 36 c6 44 f8 b9 -54 8f cf 4f 07 e0 54 a5 6f 76 86 74 05 44 40 bc -0d cb bc 9b 52 8f 64 a0 17 06 e0 5b 0b 91 10 6f - -# Prime exponent 2: -68 27 92 4a 85 e8 8b 55 ba 00 f8 21 91 28 bd 37 -24 c6 b7 d1 df e5 62 9e f1 97 92 5f ec af f5 ed -b9 cd f3 a7 be fd 8e a2 e8 dd 37 07 13 8b 3f f8 -7c 3c 39 c5 7f 43 9e 56 2e 2a a8 05 a3 9d 7c d7 -99 66 d2 ec e7 84 5f 1d bc 16 be e9 99 99 e4 d0 -bf 9e ec a4 5f cd a8 a8 50 00 35 fe 6b 5f 03 bc -2f 6d 1b fc 4d 4d 0a 37 23 96 1a f0 cd ce 4a 01 -ee c8 2d 7f 54 58 ec 19 e7 1b 90 ee ef 7d ff 61 - -# Coefficient: -57 b7 38 88 d1 83 a9 9a 63 07 42 22 77 55 1a 3d -9e 18 ad f0 6a 91 e8 b5 5c ef fe f9 07 7c 84 96 -94 8e cb 3b 16 b7 81 55 cb 2a 3a 57 c1 19 d3 79 -95 1c 01 0a a6 35 ed cf 62 d8 4c 5a 12 2a 8d 67 -ab 5f a9 e5 a4 a8 77 2a 1e 94 3b af c7 0a e3 a4 -c1 f0 f3 a4 dd ff ae fd 18 92 c8 cb 33 bb 0d 0b -95 90 e9 63 a6 91 10 fb 34 db 7b 90 6f c4 ba 28 -36 99 5a ac 7e 52 74 90 ac 95 2a 02 26 8a 4f 18 - -# PKCS#1 v1.5 signing of 20 random messages -# ------------------------------------------------------- - -# PKCS#1 v1.5 Signature Example 15.1 - -# ----------------- - -# Message to be signed: -f4 5d 55 f3 55 51 e9 75 d6 a8 dc 7e a9 f4 88 59 -39 40 cc 75 69 4a 27 8f 27 e5 78 a1 63 d8 39 b3 -40 40 84 18 08 cf 9c 58 c9 b8 72 8b f5 f9 ce 8e -e8 11 ea 91 71 4f 47 ba b9 2d 0f 6d 5a 26 fc fe -ea 6c d9 3b 91 0c 0a 2c 96 3e 64 eb 18 23 f1 02 -75 3d 41 f0 33 59 10 ad 3a 97 71 04 f1 aa f6 c3 -74 27 16 a9 75 5d 11 b8 ee d6 90 47 7f 44 5c 5d -27 20 8b 2e 28 43 30 fa 3d 30 14 23 fa 7f 2d 08 -6e 0a d0 b8 92 b9 db 54 4e 45 6d 3f 0d ab 85 d9 -53 c1 2d 34 0a a8 73 ed a7 27 c8 a6 49 db 7f a6 -37 40 e2 5e 9a f1 53 3b 30 7e 61 32 99 93 11 0e -95 19 4e 03 93 99 c3 82 4d 24 c5 1f 22 b2 6b de -10 24 cd 39 59 58 a2 df eb 48 16 a6 e8 ad ed b5 -0b 1f 6b 56 d0 b3 06 0f f0 f1 c4 cb 0d 0e 00 1d -d5 9d 73 be 12 - -# Signature: -b7 5a 54 66 b6 5d 0f 30 0e f5 38 33 f2 17 5c 8a -34 7a 38 04 fc 63 45 1d c9 02 f0 b7 1f 90 83 45 -9e d3 7a 51 79 a3 b7 23 a5 3f 10 51 64 2d 77 37 -4c 4c 6c 8d bb 1c a2 05 25 f5 c9 f3 2d b7 76 95 -35 56 da 31 29 0e 22 19 74 82 ce b6 99 06 c4 6a -75 8f b0 e7 40 9b a8 01 07 7d 2a 0a 20 ea e7 d1 -d6 d3 92 ab 49 57 e8 6b 76 f0 65 2d 68 b8 39 88 -a7 8f 26 e1 11 72 ea 60 9b f8 49 fb bd 78 ad 7e -dc e2 1d e6 62 a0 81 36 8c 04 06 07 ce e2 9d b0 -62 72 27 f4 49 63 ad 17 1d 22 93 b6 33 a3 92 e3 -31 dc a5 4f e3 08 27 52 f4 3f 63 c1 61 b4 47 a4 -c6 5a 68 75 67 0d 5f 66 00 fc c8 60 a1 ca eb 0a -88 f8 fd ec 4e 56 43 98 a5 c4 6c 87 f6 8c e0 70 -01 f6 21 3a be 0a b5 62 5f 87 d1 90 25 f0 8d 81 -da c7 bd 45 86 bc 93 82 19 1f 6d 28 80 f6 22 7e -5d f3 ee d2 1e 77 92 d2 49 48 04 87 f3 65 52 61 - -# PKCS#1 v1.5 Signature Example 15.2 - -# ----------------- - -# Message to be signed: -c1 4b 4c 60 75 b2 f9 aa d6 61 de f4 ec fd 3c b9 -33 c6 23 f4 e6 3b f5 34 10 d2 f0 16 d1 ab 98 e2 -72 9e cc f8 00 6c d8 e0 80 50 73 7d 95 fd bf 29 -6b 66 f5 b9 79 2a 90 29 36 c4 f7 ac 69 f5 14 53 -ce 43 69 45 2d c2 2d 96 f0 37 74 81 14 66 20 00 -dd 9c d3 a5 e1 79 f4 e0 f8 1f a6 a0 31 1c a1 ae -e6 51 9a 0f 63 ce c7 8d 27 bb 72 63 93 fb 7f 1f -88 cd e7 c9 7f 8a 66 cd 66 30 12 81 da c3 f3 a4 -33 24 8c 75 d6 c2 dc d7 08 b6 a9 7b 0a 3f 32 5e -0b 29 64 f8 a5 81 9e 47 9b - -# Signature: -af a7 34 34 62 be a1 22 cc 14 9f ca 70 ab da e7 -94 46 67 7d b5 37 36 66 af 7d c3 13 01 5f 4d e7 -86 e6 e3 94 94 6f ad 3c c0 e2 b0 2b ed ba 50 47 -fe 9e 2d 7d 09 97 05 e4 a3 9f 28 68 32 79 cf 0a -c8 5c 15 30 41 22 42 c0 e9 18 95 3b e0 00 e9 39 -cf 3b f1 82 52 5e 19 93 70 fa 79 07 eb a6 9d 5d -b4 63 10 17 c0 e3 6d f7 03 79 b5 db 8d 4c 69 5a -97 9a 8e 61 73 22 40 65 d7 dc 15 13 2e f2 8c d8 -22 79 51 63 06 3b 54 c6 51 14 1b e8 6d 36 e3 67 -35 bc 61 f3 1f ca 57 4e 53 09 f3 a3 bb df 91 ef -f1 2b 99 e9 cc 17 44 f1 ee 9a 1b d2 2c 5b ad 96 -ad 48 19 29 25 1f 03 43 fd 36 bc f0 ac de 7f 11 -e5 ad 60 97 77 21 20 27 96 fe 06 1f 9a da 1f c4 -c8 e0 0d 60 22 a8 35 75 85 ff e9 fd d5 93 31 a2 -8c 4a a3 12 15 88 fb 6c f6 83 96 d8 ac 05 46 59 -95 00 c9 70 85 00 a5 97 2b d5 4f 72 cf 8d b0 c8 - -# PKCS#1 v1.5 Signature Example 15.3 - -# ----------------- - -# Message to be signed: -d0 23 71 ad 7e e4 8b bf db 27 63 de 7a 84 3b 94 -08 ce 5e b5 ab f8 47 ca 3d 73 59 86 df 84 e9 06 -0b db cd d3 a5 5b a5 5d de 20 d4 76 1e 1a 21 d2 -25 c1 a1 86 f4 ac 4b 30 19 d3 ad f7 8f e6 33 46 -67 f5 6f 70 c9 01 a0 a2 70 0c 6f 0d 56 ad d7 19 -59 2d c8 8f 6d 23 06 c7 00 9f 6e 7a 63 5b 4c b3 -a5 02 df e6 8d dc 58 d0 3b e1 0a 11 70 00 4f e7 -4d d3 e4 6b 82 59 1f f7 54 14 f0 c4 a0 3e 60 5e -20 52 4f 24 16 f1 2e ca 58 9f 11 1b 75 d6 39 c6 -1b aa 80 ca fd 05 cf 35 00 24 4a 21 9e d9 ce d9 -f0 b1 02 97 18 2b 65 3b 52 6f 40 0f 29 53 ba 21 -4d 5b cd 47 88 41 32 87 2a e9 0d 4d 6b 1f 42 15 -39 f9 f3 46 62 a5 6d c0 e7 b4 b9 23 b6 23 1e 30 -d2 67 67 97 81 7f 7c 33 7b 5a c8 24 ba 93 14 3b -33 81 fa 3d ce 0e 6a eb d3 8e 67 73 51 87 b1 eb -d9 5c 02 - -# Signature: -3b ac 63 f8 6e 3b 70 27 12 03 10 6b 9c 79 aa bd -9f 47 7c 56 e4 ee 58 a4 fc e5 ba f2 ca b4 96 0f -88 39 1c 9c 23 69 8b e7 5c 99 ae df 9e 1a bf 17 -05 be 1d ac 33 14 0a db 48 eb 31 f4 50 bb 9e fe -83 b7 b9 0d b7 f1 57 6d 33 f4 0c 1c ba 4b 8d 6b -1d 33 23 56 4b 0f 17 74 11 4f a7 c0 8e 6d 1e 20 -dd 8f bb a9 b6 ac 7a d4 1e 26 b4 56 8f 4a 8a ac -bf d1 78 a8 f8 d2 c9 d5 f5 b8 81 12 93 5a 8b c9 -ae 32 cd a4 0b 8d 20 37 55 10 73 50 96 53 68 18 -ce 2b 2d b7 1a 97 72 c9 b0 dd a0 9a e1 01 52 fa -11 46 62 18 d0 91 b5 3d 92 54 30 61 b7 29 4a 55 -be 82 ff 35 d5 c3 2f a2 33 f0 5a aa c7 58 50 30 -7e cf 81 38 3c 11 16 74 39 7b 1a 1b 9d 3b f7 61 -2c cb e5 ba cd 2b 38 f0 a9 83 97 b2 4c 83 65 8f -b6 c0 b4 14 0e f1 19 70 c4 63 0d 44 34 4e 76 ea -ed 74 dc be e8 11 db f6 57 59 41 f0 8a 65 23 b8 - -# PKCS#1 v1.5 Signature Example 15.4 - -# ----------------- - -# Message to be signed: -29 03 55 84 ab 7e 02 26 a9 ec 4b 02 e8 dc f1 27 -2d c9 a4 1d 73 e2 82 00 07 b0 f6 e2 1f ec cd 5b -d9 db b9 ef 88 cd 67 58 76 9e e1 f9 56 da 7a d1 -84 41 de 6f ab 83 86 db c6 93 - -# Signature: -28 d8 e3 fc d5 dd db 21 ff bd 8d f1 63 0d 73 77 -aa 26 51 e1 4c ad 1c 0e 43 cc c5 2f 90 7f 94 6d -66 de 72 54 e2 7a 6c 19 0e b0 22 ee 89 ec f6 22 -4b 09 7b 71 06 8c d6 07 28 a1 ae d6 4b 80 e5 45 -7b d3 10 6d d9 17 06 c9 37 c9 79 5f 2b 36 36 7f -f1 53 dc 25 19 a8 db 9b df 2c 80 74 30 c4 51 de -17 bb cd 0c e7 82 b3 e8 f1 02 4d 90 62 4d ea 7f -1e ed c7 42 0b 7e 7c aa 65 77 ce f4 31 41 a7 26 -42 06 58 0e 44 a1 67 df 5e 41 ee a0 e6 9a 80 54 -54 c4 0e ef c1 3f 48 e4 23 d7 a3 2d 02 ed 42 c0 -ab 03 d0 a7 cf 70 c5 86 0a c9 2e 03 ee 00 5b 60 -ff 35 03 42 4b 98 cc 89 45 68 c7 c5 6a 02 33 55 -1c eb e5 88 cf 8b 01 67 b7 df 13 ad ca d8 28 67 -68 10 49 9c 70 4d a7 ae 23 41 4d 69 e3 c0 d2 db -5d cb c2 61 3b c1 20 42 1f 9e 36 53 c5 a8 76 72 -97 64 3c 7e 07 40 de 01 63 55 45 3d 6c 95 ae 72 - -# PKCS#1 v1.5 Signature Example 15.5 - -# ----------------- - -# Message to be signed: -bd a3 a1 c7 90 59 ea e5 98 30 8d 3d f6 09 - -# Signature: -a1 56 17 6c b9 67 77 c7 fb 96 10 5d bd 91 3b c4 -f7 40 54 f6 80 7c 60 08 a1 a9 56 ea 92 c1 f8 1c -b8 97 dc 4b 92 ef 9f 4e 40 66 8d c7 c5 56 90 1a -cb 6c f2 69 fe 61 5b 0f b7 2b 30 a5 13 38 69 23 -14 b0 e5 87 8a 88 c2 c7 77 4b d1 69 39 b5 ab d8 -2b 44 29 d6 7b d7 ac 8e 5e a7 fe 92 4e 20 a6 ec -66 22 91 f2 54 8d 73 4f 66 34 86 8b 03 9a a5 f9 -d4 d9 06 b2 d0 cb 85 85 bf 42 85 47 af c9 1c 6e -20 52 dd cd 00 1c 3e f8 c8 ee fc 3b 6b 2a 82 b6 -f9 c8 8c 56 f2 e2 c3 cb 0b e4 b8 0d a9 5e ba 37 -1d 8b 5f 60 f9 25 38 74 3d db b5 da 29 72 c7 1f -e7 b9 f1 b7 90 26 8a 0e 77 0f c5 eb 4d 5d d8 52 -47 d4 8a e2 ec 3f 26 25 5a 39 85 52 02 06 a1 f2 -68 e4 83 e9 db b1 d5 ca b1 90 91 76 06 de 31 e7 -c5 18 2d 8f 15 1b f4 1d fe cc ae d7 cd e6 90 b2 -16 47 10 6b 49 0c 72 9d 54 a8 fe 28 02 a6 d1 26 - -# PKCS#1 v1.5 Signature Example 15.6 - -# ----------------- - -# Message to be signed: -c1 87 91 5e 4e 87 da 81 c0 8e d4 35 6a 0c ce ac -1c 4f b5 c0 46 b4 52 81 b3 87 ec 28 f1 ab fd 56 -7e 54 6b 23 6b 37 d0 1a e7 1d 3b 28 34 36 5d 3d -f3 80 b7 50 61 b7 36 b0 13 0b 07 0b e5 8a e8 a4 -6d 12 16 63 61 b6 13 db c4 7d fa eb 4c a7 46 45 -6c 2e 88 83 85 52 5c ca 9d d1 c3 c7 a9 ad a7 6d -6c - -# Signature: -9c ab 74 16 36 08 66 9f 75 55 a3 33 cf 19 6f e3 -a0 e9 e5 eb 1a 32 d3 4b b5 c8 5f f6 89 aa ab 0e -3e 65 66 8e d3 b1 15 3f 94 eb 3d 8b e3 79 b8 ee -f0 07 c4 a0 2c 70 71 ce 30 d8 bb 34 1e 58 c6 20 -f7 3d 37 b4 ec bf 48 be 29 4f 6c 9e 0e cb 5e 63 -fe c4 1f 12 0e 55 53 df a0 eb eb bb 72 64 0a 95 -37 ba dc b4 51 33 02 29 d9 f7 10 f6 2e 3e d8 ec -78 4e 50 ee 1d 92 62 b4 26 71 34 00 11 d7 d0 98 -c6 f2 55 7b 21 31 fa 9b d0 25 46 36 59 7e 88 ec -b3 5a 24 0e f0 fd 85 95 71 24 df 80 80 fe e1 e1 -49 af 93 99 89 e8 6b 26 c8 5a 58 81 fa e8 67 3d -9f d4 08 00 dd 13 4e b9 bd b6 41 0f 42 0b 0a a9 -7b 20 ef cf 2e b0 c8 07 fa eb 83 a3 cc d9 b5 1d -45 53 e4 1d fc 0d f6 ca 80 a1 e8 1d c2 34 bb 83 -89 dd 19 5a 38 b4 2d e4 ed c4 9d 34 64 78 b9 f1 -1f 05 57 20 5f 5b 0b d7 ff e9 c8 50 f3 96 d7 c4 - -# PKCS#1 v1.5 Signature Example 15.7 - -# ----------------- - -# Message to be signed: -ab fa 2e cb 7d 29 bd 5b cb 99 31 ce 2b ad 2f 74 -38 3e 95 68 3c ee 11 02 2f 08 e8 e7 d0 b8 fa 05 -8b f9 eb 7e b5 f9 88 68 b5 bb 1f b5 c3 1c ed a3 -a6 4f 1a 12 cd f2 0f cd 0e 5a 24 6d 7a 17 73 d8 -db a0 e3 b2 77 54 5b ab e5 8f 2b 96 e3 f4 ed c1 -8e ab f5 cd 2a 56 0f ca 75 fe 96 e0 7d 85 9d ef -b2 56 4f 3a 34 f1 6f 11 e9 1b 3a 71 7b 41 af 53 -f6 60 53 23 00 1a a4 06 c6 - -# Signature: -c4 b4 37 bc f7 03 f3 52 e1 fa f7 4e b9 62 20 39 -42 6b 56 72 ca f2 a7 b3 81 c6 c4 f0 19 1e 7e 4a -98 f0 ee bc d6 f4 17 84 c2 53 7f f0 f9 9e 74 98 -2c 87 20 1b fb c6 5e ae 83 2d b7 1d 16 da ca db -09 77 e5 c5 04 67 9e 40 be 0f 9d b0 6f fd 84 8d -d2 e5 c3 8a 7e c0 21 e7 f6 8c 47 df d3 8c c3 54 -49 3d 53 39 b4 59 5a 5b f3 1e 3f 8f 13 81 68 07 -37 3d f6 ad 0d c7 e7 31 e5 1a d1 9e b4 75 4b 13 -44 85 84 2f e7 09 d3 78 44 4d 8e 36 b1 72 4a 4f -da 21 ca fe e6 53 ab 80 74 7f 79 52 ee 80 4d ea -b1 03 9d 84 13 99 45 bb f4 be 82 00 87 53 f3 c5 -4c 78 21 a1 d2 41 f4 21 79 c7 94 ef 70 42 bb f9 -95 56 56 22 2e 45 c3 43 69 a3 84 69 7b 6a e7 42 -e1 8f a5 ca 7a ba d2 7d 9f e7 10 52 e3 31 0d 0f -52 c8 d1 2e a3 3b f0 53 a3 00 f4 af c4 f0 98 df -4e 6d 88 67 79 d6 45 94 d3 69 15 8f db c1 f6 94 - -# PKCS#1 v1.5 Signature Example 15.8 - -# ----------------- - -# Message to be signed: -df 40 44 a8 9a 83 e9 fc bf 12 62 54 0a e3 03 8b -bc 90 f2 b2 62 8b f2 a4 46 7a c6 77 22 d8 54 6b -3a 71 cb 0e a4 16 69 d5 b4 d6 18 59 c1 b4 e4 7c -ec c5 93 3f 75 7e c8 6d b0 64 4e 31 18 12 d0 0f -b8 02 f0 34 00 63 9c 0e 36 4d ae 5a eb c5 79 1b -c6 55 76 23 61 bc 43 c5 3d 3c 78 86 76 8f 79 68 -c1 c5 44 c6 f7 9f 7b e8 20 c7 e2 bd 2f 9d 73 e6 -2d ed 6d 2e 93 7e 6a 6d ae f9 0e e3 7a 1a 52 a5 -4f 00 e3 1a dd d6 48 94 cf 4c 02 e1 60 99 e2 9f -9e b7 f1 a7 bb 7f 84 c4 7a 2b 59 48 13 be 02 a1 -7b 7f c4 3b 34 c2 2c 91 92 52 64 12 6c 89 f8 6b -b4 d8 7f 3e f1 31 29 6c 53 a3 08 e0 33 1d ac 8b -af 3b 63 42 22 66 ec ef 2b 90 78 15 35 db da 41 -cb d0 cf 22 a8 cb fb 53 2e c6 8f c6 af b2 ac 06 - -# Signature: -14 14 b3 85 67 ae 6d 97 3e de 4a 06 84 2d cc 0e -05 59 b1 9e 65 a4 88 9b db ab d0 fd 02 80 68 29 -13 ba cd 5d c2 f0 1b 30 bb 19 eb 81 0b 7d 9d ed -32 b2 84 f1 47 bb e7 71 c9 30 c6 05 2a a7 34 13 -90 a8 49 f8 1d a9 cd 11 e5 ec cf 24 6d ba e9 5f -a9 58 28 e9 ae 0c a3 55 03 25 32 6d ee f9 f4 95 -30 ba 44 1b ed 4a c2 9c 02 9c 9a 27 36 b1 a4 19 -0b 85 08 4a d1 50 42 6b 46 d7 f8 5b d7 02 f4 8d -ac 5f 71 33 0b c4 23 a7 66 c6 5c c1 dc ab 20 d3 -d3 bb a7 2b 63 b3 ef 82 44 d4 2f 15 7c b7 e3 a8 -ba 5c 05 27 2c 64 cc 1a d2 1a 13 49 3c 39 11 f6 -0b 4e 9f 4e cc 99 00 eb 05 6e e5 9d 6f e4 b8 ff -6e 80 48 cc c0 f3 8f 28 36 fd 3d fe 91 bf 4a 38 -6e 1e cc 2c 32 83 9f 0c a4 d1 b2 7a 56 8f a9 40 -dd 64 ad 16 bd 01 25 d0 34 8e 38 30 85 f0 88 94 -86 1c a1 89 87 22 7d 37 b4 2b 58 4a 83 57 cb 04 - -# PKCS#1 v1.5 Signature Example 15.9 - -# ----------------- - -# Message to be signed: -ea 94 1f f0 6f 86 c2 26 92 7f cf 0e 3b 11 b0 87 -26 76 17 0c 1b fc 33 bd a8 e2 65 c7 77 71 f9 d0 -85 01 64 a5 ee cb cc 5c e8 27 fb fa 07 c8 52 14 -79 6d 81 27 e8 ca a8 18 94 ea 61 ce b1 44 9e 72 -fe a0 a4 c9 43 b2 da 6d 9b 10 5f e0 53 b9 03 9a -9c c5 3d 42 0b 75 39 fa b2 23 9c 6b 51 d1 7e 69 -4c 95 7d 4b 0f 09 84 46 18 79 a0 75 9c 44 01 be -ec d4 c6 06 a0 af bd 7a 07 6f 50 a2 df c2 80 7f -24 f1 91 9b aa 77 46 d3 a6 4e 26 8e d3 f5 f8 e6 -da 83 a2 a5 c9 15 2f 83 7c b0 78 12 bd 5b a7 d3 -a0 79 85 de 88 11 3c 17 96 e9 b4 66 ec 29 9c 5a -c1 05 9e 27 f0 94 15 - -# Signature: -ce eb 84 cc b4 e9 09 92 65 65 07 21 ee a0 e8 ec -89 ca 25 bd 35 4d 4f 64 56 49 67 be 9d 4b 08 b3 -f1 c0 18 53 9c 9d 37 1c f8 96 1f 22 91 fb e0 dc -2f 2f 95 fe a4 7b 63 9f 1e 12 f4 bc 38 1c ef 0c -2b 7a 7b 95 c3 ad f2 76 05 b7 f6 39 98 c3 cb ad -54 28 08 c3 82 2e 06 4d 4a d1 40 93 67 9e 6e 01 -41 8a 6d 5c 05 96 84 cd 56 e3 4e d6 5a b6 05 b8 -de 4f cf a6 40 47 4a 54 a8 25 1b bb 73 26 a4 2d -08 58 5c fc fc 95 67 69 b1 5b 6d 7f df 7d a8 4f -81 97 6e aa 41 d6 92 38 0f f1 0e ae cf e0 a5 79 -68 29 09 b5 52 1f ad e8 54 d7 97 b8 a0 34 5b 9a -86 4e 05 88 f6 ca dd bf 65 f1 77 99 8e 18 0d 1f -10 24 43 e6 dc a5 3a 94 82 3c aa 9c 3b 35 f3 22 -58 3c 70 3a f6 74 76 15 9e c7 ec 93 d1 76 9b 30 -0a f0 e7 15 7d c2 98 c6 cd 2d ee 22 62 f8 cd dc -10 f1 1e 01 74 14 71 bb fd 65 18 a1 75 73 45 75 - -# PKCS#1 v1.5 Signature Example 15.10 - -# ----------------- - -# Message to be signed: -d8 b8 16 45 c1 3c d7 ec f5 d0 0e d2 c9 1b 9a cd -46 c1 55 68 e5 30 3c 4a 97 75 ed e7 6b 48 40 3d -6b e5 6c 05 b6 b1 cf 77 c6 e7 5d e0 96 c5 cb 35 -51 cb 6f a9 64 f3 c8 79 cf 58 9d 28 e1 da 2f 9d -ec - -# Signature: -27 45 07 4c a9 71 75 d9 92 e2 b4 47 91 c3 23 c5 -71 67 16 5c dd 8d a5 79 cd ef 46 86 b9 bb 40 4b -d3 6a 56 50 4e b1 fd 77 0f 60 bf a1 88 a7 b2 4b -0c 91 e8 81 c2 4e 35 b0 4d c4 dd 4c e3 85 66 bc -c9 ce 54 f4 9a 17 5f c9 d0 b2 25 22 d9 57 90 47 -f9 ed 42 ec a8 3f 76 4a 10 16 39 97 94 7e 7d 2b -52 ff 08 98 0e 7e 7c 22 57 93 7b 23 f3 d2 79 d4 -cd 17 d6 f4 95 54 63 73 d9 83 d5 36 ef d7 d1 b6 -71 81 ca 2c b5 0a c6 16 c5 c7 ab fb b9 26 0b 91 -b1 a3 8e 47 24 20 01 ff 45 2f 8d e1 0c a6 ea ea -dc af 9e dc 28 95 6f 28 a7 11 29 1f c9 a8 08 78 -b8 ba 4c fe 25 b8 28 1c b8 0b c9 cd 6d 2b d1 82 -52 46 ee be 25 2d 99 57 ef 93 70 73 52 08 4e 6d -36 d4 23 55 1b f2 66 a8 53 40 fb 4a 6a f3 70 88 -0a ab 07 15 3d 01 f4 8d 08 6d f0 bf be c0 5e 7b -44 3b 97 e7 17 18 97 0e 2f 4b f6 20 23 e9 5b 67 - -# PKCS#1 v1.5 Signature Example 15.11 - -# ----------------- - -# Message to be signed: -e5 73 9b 6c 14 c9 2d 51 0d 95 b8 26 93 33 37 ff -0d 24 ef 72 1a c4 ef 64 c2 ba d2 64 be 8b 44 ef -a1 51 6e 08 a2 7e b6 b6 11 d3 30 1d f0 06 2d ae -fc 73 a8 c0 d9 2e 2c 52 1f ac bc 7b 26 47 38 76 -7e a6 fc 97 d5 88 a0 ba f6 ce 50 ad f7 9e 60 0b -d2 9e 34 5f cb 1d ba 71 ac 5c 02 89 02 3f e4 a8 -2b 46 a5 40 77 19 19 7d 2e 95 8e 35 31 fd 54 ae -f9 03 aa bb 43 55 f8 83 18 99 4e d3 c3 dd 62 f4 -20 a7 - -# Signature: -be 40 a5 fb 94 f1 13 e1 b3 ef f6 b6 a3 39 86 f2 -02 e3 63 f0 74 83 b7 92 e6 8d fa 55 54 df 04 66 -cc 32 15 09 50 78 3b 4d 96 8b 63 9a 04 fd 2f b9 -7f 6e b9 67 02 1f 5a dc cb 9f ca 95 ac c8 f2 cd -88 5a 38 0b 0a 4e 82 bc 76 07 64 db ab 88 c1 e6 -c0 25 5c aa 94 f2 32 19 9d 6f 59 7c c9 14 5b 00 -e3 d4 ba 34 6b 55 9a 88 33 ad 15 16 ad 51 63 f0 -16 af 6a 59 83 1c 82 ea 13 c8 22 4d 84 d0 76 5a -9d 12 38 4d a4 60 a8 53 1b 4c 40 7e 04 f4 f3 50 -70 9e b9 f0 8f 5b 22 0f fb 45 ab f6 b7 5d 15 79 -fd 3f 1e b5 5f c7 5b 00 af 8b a3 b0 87 82 7f e9 -ae 9f b4 f6 c5 fa 63 03 1f e5 82 85 2f e2 83 4f -9c 89 bf f5 3e 25 52 21 6b c7 c1 d4 a3 d5 dc 2b -a6 95 5c d9 b1 7d 13 63 e7 fe e8 ed 76 29 75 3f -f3 12 5e dd 48 52 1a e3 b9 b0 32 17 f4 49 6d 0d -8e de 57 ac bc 5b d4 de ae 74 a5 6f 86 67 1d e2 - -# PKCS#1 v1.5 Signature Example 15.12 - -# ----------------- - -# Message to be signed: -7a f4 28 35 91 7a 88 d6 b3 c6 71 6b a2 f5 b0 d5 -b2 0b d4 e2 e6 e5 74 e0 6a f1 ee f7 c8 11 31 be -22 bf 81 28 b9 cb c6 ec 00 27 5b a8 02 94 a5 d1 -17 2d 08 24 a7 9e 8f dd 83 01 83 e4 c0 0b 96 78 -28 67 b1 22 7f ea 24 9a ad 32 ff c5 fe 00 7b c5 -1f 21 79 2f 72 8d ed a8 b5 70 8a a9 9c ab ab 20 -a4 aa 78 3e d8 6f 0f 27 b5 d5 63 f4 2e 07 15 8c -ea 72 d0 97 aa 68 87 ec 41 1d d0 12 91 2a 5e 03 -2b bf a6 78 50 71 44 bc c9 5f 39 b5 8b e7 bf d1 -75 9a db 9a 91 fa 1d 6d 82 26 a8 34 3a 8b 84 9d -ae 76 f7 b9 82 24 d5 9e 28 f7 81 f1 3e ce 60 5f -84 f6 c9 0b ae 5f 8c f3 78 81 6f 40 20 a7 dd a1 -be d9 0c 92 a2 36 34 d2 03 fa c3 fc d8 6d 68 d3 -18 2a 7d 9c ca be 7b 07 95 f5 c6 55 e9 ac c4 e3 -ec 18 51 40 d1 0c ef 05 34 64 ab 17 5c 83 bd 83 -93 5e 3d ab af 34 62 ee be 63 d1 5f 57 3d 26 9a - -# Signature: -4e 78 c5 90 2b 80 79 14 d1 2f a5 37 ae 68 71 c8 -6d b8 02 1e 55 d1 ad b8 eb 0c cf 1b 8f 36 ab 7d -ad 1f 68 2e 94 7a 62 70 72 f0 3e 62 73 71 78 1d -33 22 1d 17 4a be 46 0d bd 88 56 0c 22 f6 90 11 -6e 2f bb e6 e9 64 36 3a 3e 52 83 bb 5d 94 6e f1 -c0 04 7e ba 03 8c 75 6c 40 be 79 23 05 58 09 b0 -e9 f3 4a 03 a5 88 15 eb dd e7 67 93 1f 01 8f 6f -18 78 f2 ef 4f 47 dd 37 40 51 dd 48 68 5d ed 6e -fb 3e a8 02 1f 44 be 1d 7d 14 93 98 f9 8e a9 c0 -8d 62 88 8e bb 56 19 2d 17 74 7b 6b 8e 17 09 54 -31 f1 25 a8 a8 e9 96 2a a3 1c 28 52 64 e0 8f b2 -1a ac 33 6c e6 c3 8a a3 75 e4 2b c9 2a b0 ab 91 -03 84 31 e1 f9 2c 39 d2 af 5d ed 7e 43 bc 15 1e -6e be a4 c3 e2 58 3a f3 43 7e 82 c4 3c 5e 3b 5b -07 cf 03 59 68 3d 22 98 e3 59 48 ed 80 6c 06 3c -60 6e a1 78 15 0b 1e fc 15 85 69 34 c7 25 5c fe - -# PKCS#1 v1.5 Signature Example 15.13 - -# ----------------- - -# Message to be signed: -eb ae f3 f9 f2 3b df e5 fa 6b 8a f4 c2 08 c1 89 -f2 25 1b f3 2f 5f 13 7b 9d e4 40 63 78 68 6b 3f -07 21 f6 2d 24 cb 86 88 d6 fc 41 a2 7c ba e2 1d -30 e4 29 fe ac c7 11 19 41 c2 77 - -# Signature: -c4 8d be f5 07 11 4f 03 c9 5f af be b4 df 1b fa -88 e0 18 4a 33 cc 4f 8a 9a 10 35 ff 7f 82 2a 5e -38 cd a1 87 23 91 5f f0 78 24 44 29 e0 f6 08 1c -14 fd 83 33 1f a6 5c 6b a7 bb 9a 12 db f6 62 23 -74 cd 0c a5 7d e3 77 4e 2b d7 ae 82 36 77 d0 61 -d5 3a e9 c4 04 0d 2d a7 ef 70 14 f3 bb dc 95 a3 -61 a4 38 55 c8 ce 9b 97 ec ab ce 17 4d 92 62 85 -14 2b 53 4a 30 87 f9 f4 ef 74 51 1e c7 42 b0 d5 -68 56 03 fa f4 03 b5 07 2b 98 5d f4 6a df 2d 25 -29 a0 2d 40 71 1e 21 90 91 70 52 37 1b 79 b7 49 -b8 3a bf 0a e2 94 86 c3 f2 f6 24 77 b2 bd 36 2b -03 9c 01 3c 0c 50 76 ef 52 0d bb 40 5f 42 ce e9 -54 25 c3 73 a9 75 e1 cd d0 32 c4 96 22 c8 50 79 -b0 9e 88 da b2 b1 39 69 ef 7a 72 39 73 78 10 40 -45 9f 57 d5 01 36 38 48 3d e2 d9 1c b3 c4 90 da -81 c4 6d e6 cd 76 ea 8a 0c 8f 6f e3 31 71 2d 24 - -# PKCS#1 v1.5 Signature Example 15.14 - -# ----------------- - -# Message to be signed: -c5 a2 71 12 78 76 1d fc dd 4f 0c 99 e6 f5 61 9d -6c 48 b5 d4 c1 a8 09 82 fa a6 b4 cf 1c f7 a6 0f -f3 27 ab ef 93 c8 01 42 9e fd e0 86 40 85 81 46 -10 56 ac c3 3f 3d 04 f5 ad a2 12 16 ca cd 5f d1 -f9 ed 83 20 3e 0e 2f e6 13 8e 3e ae 84 24 e5 91 -5a 08 3f 3f 7a b7 60 52 c8 be 55 ae 88 2d 6e c1 -48 2b 1e 45 c5 da e9 f4 10 15 40 53 27 02 2e c3 -2f 0e a2 42 97 63 b2 55 04 3b 19 58 ee 3c f6 d6 -39 83 59 6e b3 85 84 4f 85 28 cc 9a 98 65 83 5d -c5 11 3c 02 b8 0d 0f ca 68 aa 25 e7 2b ca ae b3 -cf 9d 79 d8 4f 98 4f d4 17 - -# Signature: -6b d5 25 7a a0 66 11 fb 46 60 08 7c b4 bc 4a 9e -44 91 59 d3 16 52 bd 98 08 44 da f3 b1 c7 b3 53 -f8 e5 61 42 f7 ea 98 57 43 3b 18 57 3b 4d ee de -81 8a 93 b0 29 02 97 78 3f 1a 2f 23 cb c7 27 97 -a6 72 53 7f 01 f6 24 84 cd 41 62 c3 21 4b 9a c6 -28 22 4c 5d e0 1f 32 bb 9b 76 b2 73 54 f2 b1 51 -d0 e8 c4 21 3e 46 15 ad 0b c7 1f 51 5e 30 0d 6a -64 c6 74 34 11 ff fd e8 e5 ff 19 0e 54 92 30 43 -12 6e cf c4 c4 53 90 22 66 8f b6 75 f2 5c 07 e2 -00 99 ee 31 5b 98 d6 af ec 4b 1a 9a 93 dc 33 49 -6a 15 bd 6f de 16 63 a7 d4 9b 9f 1e 63 9d 38 66 -4b 37 a0 10 b1 f3 5e 65 86 82 d9 cd 63 e5 7d e0 -f1 5e 8b dd 09 65 58 f0 7e c0 ca a2 18 a8 c0 6f -47 88 45 39 40 28 7c 9d 34 b6 d4 0a 3f 09 bf 77 -99 fe 98 ae 4e b4 9f 3f f4 1c 50 40 a5 0c ef c9 -bd f2 39 4b 74 9c f1 64 48 0d f1 ab 68 80 27 3b - -# PKCS#1 v1.5 Signature Example 15.15 - -# ----------------- - -# Message to be signed: -9b f8 aa 25 3b 87 2e a7 7a 7e 23 47 6b e2 6b 23 -29 57 8c f6 ac 9e a2 80 5b 35 7f 6f c3 ad 13 0d -ba eb 3d 86 9a 13 cc e7 a8 08 bb bb c9 69 85 7e -03 94 5c 7b b6 1d f1 b5 c2 58 9b 8e 04 6c 2a 5d -7e 40 57 b1 a7 4f 24 c7 11 21 63 64 28 85 29 ec -95 70 f2 51 97 21 3b e1 f5 c2 e5 96 f8 bf 8b 2c -f3 cb 38 aa 56 ff e5 e3 1d f7 39 58 20 e9 4e cf -3b 11 89 a9 65 dc f9 a9 cb 42 98 d3 c8 8b 29 23 -c1 9f c6 bc 34 aa ce ca d4 e0 93 1a 7c 4e 5d 73 -dc 86 df a7 98 a8 47 6d 82 46 3e ef aa 90 a8 a9 -19 2a b0 8b 23 08 8d d5 8e 12 80 f7 d7 2e 45 48 -39 6b aa c1 12 25 2d d5 c5 34 6a db 20 04 a2 f7 -10 1c cc 89 9c c7 fa fa e8 bb e2 95 73 88 96 a5 -b2 01 22 85 01 4e f6 - -# Signature: -27 f7 f4 da 9b d6 10 10 6e f5 7d 32 38 3a 44 8a -8a 62 45 c8 3d c1 30 9c 6d 77 0d 35 7b a8 9e 73 -f2 ad 08 32 06 2e b0 fe 0a c9 15 57 5b cd 6b 8b -ca db 4e 2b a6 fa 9d a7 3a 59 17 51 52 b2 d4 fe -72 b0 70 c9 b7 37 9e 50 00 0e 55 e6 c2 69 f6 65 -8c 93 79 72 79 7d 3a dd 69 f1 30 e3 4b 85 bd ec -9f 3a 9b 39 22 02 d6 f3 e4 30 d0 9c ac a8 22 77 -59 ab 82 5f 70 12 d2 ff 4b 5b 62 c8 50 4d ba d8 -55 c0 5e dd 5c ab 5a 4c cc dc 67 f0 1d d6 51 7c -7d 41 c4 3e 2a 49 57 af f1 9d b6 f1 8b 17 85 9a -f0 bc 84 ab 67 14 6e c1 a4 a6 0a 17 d7 e0 5f 8b -4f 9c ed 6a d1 09 08 d8 d7 8f 7f c8 8b 76 ad c8 -29 0f 87 da f2 a7 be 10 ae 40 85 21 39 5d 54 ed -25 56 fb 76 61 85 4a 73 0c e3 d8 2c 71 a8 d4 93 -ec 49 a3 78 ac 8a 3c 74 43 9f 7c c5 55 ba 13 f8 -59 07 08 90 ee 18 ff 65 8f a4 d7 41 96 9d 70 a5 - -# PKCS#1 v1.5 Signature Example 15.16 - -# ----------------- - -# Message to be signed: -32 47 48 30 e2 20 37 54 c8 bf 06 81 dc 4f 84 2a -fe 36 09 30 37 86 16 c1 08 e8 33 65 6e 56 40 c8 -68 56 88 5b b0 5d 1e b9 43 8e fe de 67 92 63 de -07 cb 39 55 3f 6a 25 e0 06 b0 a5 23 11 a0 63 ca -08 82 66 d2 56 4f f6 49 0c 46 b5 60 98 18 54 8f -88 76 4d ad 34 a2 5e 3a 85 d5 75 02 3f 0b 9e 66 -50 48 a0 3c 35 05 79 a9 d3 24 46 c7 bb 96 cc 92 -e0 65 ab 94 d3 c8 95 2e 8d f6 8e f0 d9 fa 45 6b -3a 06 bb 80 e3 bb c4 b2 8e 6a 94 b6 d0 ff 76 96 -a6 4e fe 05 e7 35 fe a0 25 d7 bd bc 41 39 f3 a3 -b5 46 07 5c ba 7e fa 94 73 74 d3 f0 ac 80 a6 8d -76 5f 5d f6 21 0b ca 06 9a 2d 88 64 7a f7 ea 04 -2d ac 69 0c b5 73 78 ec 07 77 61 4f b8 b6 5f f4 -53 ca 6b 7d ce 60 98 45 1a 2f 8c 0d a9 bf ec f1 -fd f3 91 bb aa 4e 2a 91 ca 18 a1 12 1a 75 23 a2 -ab d4 25 14 f4 89 e8 - -# Signature: -69 17 43 72 57 c2 2c cb 54 03 29 0c 3d ee 82 d9 -cf 75 50 b3 1b d3 1c 51 bd 57 bf d3 5d 45 2a b4 -db 7c 4b e6 b2 e2 5a c9 a5 9a 1d 2a 7f eb 62 7f -0a fd 49 76 b3 00 3c c9 cf fd 88 96 50 5e c3 82 -f2 65 10 4d 4c f8 c9 32 fa 9f e8 6e 00 87 07 95 -99 12 38 9d a4 b2 d6 b3 69 b3 6a 5e 72 e2 9d 24 -c9 a9 8c 9d 31 a3 ab 44 e6 43 e6 94 12 66 a4 7a -45 e3 44 6c e8 77 6a be 24 1a 8f 5f c6 42 3b 24 -b1 ff 25 0d c2 c3 a8 17 23 53 56 10 77 e8 50 a7 -69 b2 5f 03 25 da c8 89 65 a3 b9 b4 72 c4 94 e9 -5f 71 9b 4e ac 33 2c aa 7a 65 c7 df e4 6d 9a a7 -e6 e0 0f 52 5f 30 3d d6 3a b7 91 92 18 90 18 68 -f9 33 7f 8c d2 6a af e6 f3 3b 7f b2 c9 88 10 af -19 f7 fc b2 82 ba 15 77 91 2c 1d 36 89 75 fd 5d -44 0b 86 e1 0c 19 97 15 fa 0b 6f 42 50 b5 33 73 -2d 0b ef e1 54 51 50 fc 47 b8 76 de 09 b0 0a 94 - -# PKCS#1 v1.5 Signature Example 15.17 - -# ----------------- - -# Message to be signed: -00 8e 59 50 5e af b5 50 aa e5 e8 45 58 4c eb b0 -0b 6d e1 73 3e 9f 95 d4 2c 88 2a 5b be b5 ce 1c -57 e1 19 e7 c0 d4 da ca 9f 1f f7 87 02 17 f7 cf -d8 a6 b3 73 97 7c ac 9c ab 8e 71 e4 20 - -# Signature: -92 25 03 b6 73 ee 5f 3e 69 1e 1c a8 5e 9f f4 17 -3c f7 2b 05 ac 2c 13 1d a5 60 35 93 e3 bc 25 9c -94 c1 f7 d3 a0 6a 5b 98 91 bf 11 3f a3 9e 59 ff -7c 1e d6 46 5e 90 80 49 cb 89 e4 e1 25 cd 37 d2 -ff d9 22 7a 41 b4 a0 a1 9c 0a 44 fb bf 3d e5 5b -ab 80 20 87 a3 bb 8d 4f f6 68 ee 6b bb 8a d8 9e -68 57 a7 9a 9c 72 78 19 90 df cf 92 cd 51 94 04 -c9 50 f1 3d 11 43 c3 18 4f 1d 25 0c 90 e1 7a c6 -ce 36 16 3b 98 95 62 7a d6 ff ec 14 22 44 1f 55 -e4 49 9d ba 9b e8 95 46 ae 8b c6 3c ca 01 dd 08 -46 3a e7 f1 fc e3 d8 93 99 69 38 77 8c 18 12 e6 -74 ad 9c 30 9c 5a cc a3 fd e4 4e 7d d8 69 59 93 -e9 c1 fa 87 ac da 99 ec e5 c8 49 9e 46 89 57 ad -66 35 9b f1 2a 51 ad be 78 d3 a2 13 b4 49 bf 0b -5f 8d 4d 49 6a cf 03 d3 03 3b 7c cd 19 6b c2 2f -68 fb 7b ef 4f 69 7c 5e a2 b3 50 62 f4 8a 36 dd - -# PKCS#1 v1.5 Signature Example 15.18 - -# ----------------- - -# Message to be signed: -6a bc 54 cf 8d 1d ff 1f 53 b1 7d 81 60 36 88 78 -a8 78 8c c6 d2 2f a5 c2 25 8c 88 e6 60 b0 9a 89 -33 f9 f2 c0 50 4d da dc 21 f6 e7 5e 0b 83 3b eb -55 52 29 de e6 56 b9 04 7b 92 f6 2e 76 b8 ff cc -60 da b0 6b 80 - -# Signature: -0b 6d af 42 f7 a8 62 14 7e 41 74 93 c2 c4 01 ef -ae 32 63 6a b4 cb d4 41 92 bb f5 f1 95 b5 0a e0 -96 a4 75 a1 61 4f 0a 9f a8 f7 a0 26 cb 46 c6 50 -6e 51 8e 33 d8 3e 56 47 7a 87 5a ca 8c 7e 71 4c -e1 bd bd 61 ef 5d 53 52 39 b3 3f 2b fd d6 17 71 -ba b6 27 76 d7 81 71 a1 42 3c ea 87 31 f8 2e 60 -76 6d 64 54 26 56 20 b1 5f 5c 5a 58 4f 55 f9 5b -80 2f e7 8c 57 4e d5 da cf c8 31 f3 cf 2b 05 02 -c0 b2 98 f2 5c cf 11 f9 73 b3 1f 85 e4 74 42 19 -85 f3 cf f7 02 df 39 46 ef 0a 66 05 68 21 11 b2 -f5 5b 1f 8a b0 d2 ea 3a 68 3c 69 98 5e ad 93 ed -44 9e a4 8f 03 58 dd f7 08 02 cb 41 de 2f d8 3f -3c 80 80 82 d8 49 36 94 8e 0c 84 a1 31 b4 92 78 -27 46 05 27 bb 5c d2 4b fa b7 b4 8e 07 1b 24 17 -19 30 f9 97 63 27 2f 97 97 bc b7 6f 1d 24 81 57 -55 58 fc f2 60 b1 f0 e5 54 eb b3 df 3c fc b9 58 - -# PKCS#1 v1.5 Signature Example 15.19 - -# ----------------- - -# Message to be signed: -af 2d 78 15 2c f1 0e fe 01 d2 74 f2 17 b1 77 f6 -b0 1b 5e 74 9f 15 67 71 5d a3 24 85 9c d3 dd 88 -db 84 8e c7 9f 48 db ba 7b 6f 1d 33 11 1e f3 1b -64 89 9e 73 91 c2 bf fd 69 f4 90 25 cf 20 1f c5 -85 db d1 54 2c 1c 77 8a 2c e7 a7 ee 10 8a 30 9f -ec a2 6d 13 3a 5f fe dc 4e 86 9d cd 76 56 59 6a -c8 42 7e a3 ef 6e 3f d7 8f e9 9d 8d dc 71 d8 39 -f6 78 6e 0d a6 e7 86 bd 62 b3 a4 f1 9b 89 1a 56 -15 7a 55 4e c2 a2 b3 9e 25 a1 d7 c7 d3 73 21 c7 -a1 d9 46 cf 4f be 75 8d 92 76 f0 85 63 44 9d 67 -41 4a 2c 03 0f 42 51 cf e2 21 3d 04 a5 41 06 37 -87 - -# Signature: -20 9c 61 15 78 57 38 7b 71 e2 4b f3 dd 56 41 45 -50 50 3b ec 18 0f f5 3b dd 9b ac 06 2a 2d 49 95 -09 bf 99 12 81 b7 95 27 df 91 36 61 5b 7a 6d 9d -b3 a1 03 b5 35 e0 20 2a 2c ac a1 97 a7 b7 4e 53 -56 f3 dd 59 5b 49 ac fd 9d 30 04 9a 98 ca 88 f6 -25 bc a1 d5 f2 2a 39 2d 8a 74 9e fb 6e ed 9b 78 -21 d3 11 0a c0 d2 44 19 9e cb 4a a3 d7 35 a8 3a -2e 88 93 c6 bf 85 81 38 3c ca ee 83 46 35 b7 fa -1f af fa 45 b1 3d 15 c1 da 33 af 71 e8 93 03 d6 -80 90 ff 62 ee 61 5f df 5a 84 d1 20 71 1d a5 3c -28 89 19 8a b3 83 17 a9 73 4a b2 7d 67 92 4c ea -74 15 6f f9 9b ef 98 76 bb 5c 33 9e 93 74 52 83 -e1 b3 4e 07 22 26 b8 80 45 e0 17 e9 f0 5b 2a 8c -41 67 40 25 8e 22 3b 26 90 02 74 91 73 22 73 f3 -22 9d 9e f2 b1 b3 80 7e 32 10 18 92 0a d3 e5 3d -ae 47 e6 d9 39 5c 18 4b 93 a3 74 c6 71 fa a2 ce - -# PKCS#1 v1.5 Signature Example 15.20 - -# ----------------- - -# Message to be signed: -40 ee 99 24 58 d6 f6 14 86 d2 56 76 a9 6d d2 cb -93 a3 7f 04 b1 78 48 2f 2b 18 6c f8 82 15 27 0d -ba 29 d7 86 d7 74 b0 c5 e7 8c 7f 6e 56 a9 56 e7 -f7 39 50 a2 b0 c0 c1 0a 08 db cd 67 e5 b2 10 bb -21 c5 8e 27 67 d4 4f 7d d4 01 4e 39 66 14 3b f7 -e3 d6 6f f0 c0 9b e4 c5 5f 93 b3 99 94 b8 51 8d -9c 1d 76 d5 b4 73 74 de a0 8f 15 7d 57 d7 06 34 -97 8f 38 56 e0 e5 b4 81 af bb db 5a 3a c4 8d 48 -4b e9 2c 93 de 22 91 78 35 4c 2d e5 26 e9 c6 5a -31 ed e1 ef 68 cb 63 98 d7 91 16 84 fe c0 ba bc -3a 78 1a 66 66 07 83 50 69 74 d0 e1 48 25 10 1c -3b fa ea - -# Signature: -92 75 02 b8 24 af c4 25 13 ca 65 70 de 33 8b 8a -64 c3 a8 5e b8 28 d3 19 36 24 f2 7e 8b 10 29 c5 -5c 11 9c 97 33 b1 8f 58 49 b3 50 09 18 bc c0 05 -51 d9 a8 fd f5 3a 97 74 9f a8 dc 48 0d 6f e9 74 -2a 58 71 f9 73 92 65 28 97 2a 1a f4 9e 39 25 b0 -ad f1 4a 84 27 19 b4 a5 a2 d8 9f a9 c0 b6 60 5d -21 2b ed 1e 67 23 b9 34 06 ad 30 e8 68 29 a5 c7 -19 b8 90 b3 89 30 6d c5 50 64 86 ee 2f 36 a8 df -e0 a9 6a f6 78 c9 cb d6 af f3 97 ca 20 0e 3e dc -1e 36 bd 2f 08 b3 1d 54 0c 0c b2 82 a9 55 9e 4a -dd 4f c9 e6 49 2e ed 0c cb d3 a6 98 2e 5f aa 2d -dd 17 be 47 41 7c 80 b4 e5 45 2d 31 f7 24 01 a0 -42 32 51 09 54 4d 95 4c 01 93 90 79 d4 09 a5 c3 -78 d7 51 2d fc 2d 2a 71 ef cc 34 32 a7 65 d1 c6 -a5 2c fc e8 99 cd 79 b1 5b 4f c3 72 36 41 ef 6b -d0 0a cc 10 40 7e 5d f5 8d d1 c3 c5 c5 59 a5 06 - -# ============================================= diff --git a/notes/rsa-testvectors/pss-int.txt b/notes/rsa-testvectors/pss-int.txt deleted file mode 100644 index 667c753f..00000000 --- a/notes/rsa-testvectors/pss-int.txt +++ /dev/null @@ -1,162 +0,0 @@ -# ================================= -# WORKED-OUT EXAMPLE FOR RSASSA-PSS -# ================================= -# -# This file gives an example of the process of -# signing a message with RSASSA-PSS as -# specified in PKCS #1 v2.1. -# -# The message is an octet string of length 114, -# while the size of the modulus in the public -# key is 1024 bits. The message is signed via a -# random salt of length 20 octets -# -# The underlying hash function in the EMSA-PSS -# encoding method is SHA-1; the mask generation -# function is MGF1 with SHA-1 as specified in -# PKCS #1 v2.1. -# -# Integers are represented by strings of octets -# with the leftmost octet being the most -# significant octet. For example, -# -# 9,202,000 = (0x)8c 69 50. -# -# ============================================= - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -a2 ba 40 ee 07 e3 b2 bd 2f 02 ce 22 7f 36 a1 95 -02 44 86 e4 9c 19 cb 41 bb bd fb ba 98 b2 2b 0e -57 7c 2e ea ff a2 0d 88 3a 76 e6 5e 39 4c 69 d4 -b3 c0 5a 1e 8f ad da 27 ed b2 a4 2b c0 00 fe 88 -8b 9b 32 c2 2d 15 ad d0 cd 76 b3 e7 93 6e 19 95 -5b 22 0d d1 7d 4e a9 04 b1 ec 10 2b 2e 4d e7 75 -12 22 aa 99 15 10 24 c7 cb 41 cc 5e a2 1d 00 ee -b4 1f 7c 80 08 34 d2 c6 e0 6b ce 3b ce 7e a9 a5 - -# RSA public exponent e: -01 00 01 - -# Prime p: -d1 7f 65 5b f2 7c 8b 16 d3 54 62 c9 05 cc 04 a2 -6f 37 e2 a6 7f a9 c0 ce 0d ce d4 72 39 4a 0d f7 -43 fe 7f 92 9e 37 8e fd b3 68 ed df f4 53 cf 00 -7a f6 d9 48 e0 ad e7 57 37 1f 8a 71 1e 27 8f 6b - -# Prime q: -c6 d9 2b 6f ee 74 14 d1 35 8c e1 54 6f b6 29 87 -53 0b 90 bd 15 e0 f1 49 63 a5 e2 63 5a db 69 34 -7e c0 c0 1b 2a b1 76 3f d8 ac 1a 59 2f b2 27 57 -46 3a 98 24 25 bb 97 a3 a4 37 c5 bf 86 d0 3f 2f - -# p's CRT exponent dP: -9d 0d bf 83 e5 ce 9e 4b 17 54 dc d5 cd 05 bc b7 -b5 5f 15 08 33 0e a4 9f 14 d4 e8 89 55 0f 82 56 -cb 5f 80 6d ff 34 b1 7a da 44 20 88 53 57 7d 08 -e4 26 28 90 ac f7 52 46 1c ea 05 54 76 01 bc 4f - -# q's CRT exponent dQ: -12 91 a5 24 c6 b7 c0 59 e9 0e 46 dc 83 b2 17 1e -b3 fa 98 81 8f d1 79 b6 c8 bf 6c ec aa 47 63 03 -ab f2 83 fe 05 76 9c fc 49 57 88 fe 5b 1d df de -9e 88 4a 3c d5 e9 36 b7 e9 55 eb f9 7e b5 63 b1 - -# CRT coefficient qInv: -a6 3f 1d a3 8b 95 0c 9a d1 c6 7c e0 d6 77 ec 29 -14 cd 7d 40 06 2d f4 2a 67 eb 19 8a 17 6f 97 42 -aa c7 c5 fe a1 4f 22 97 66 2b 84 81 2c 4d ef c4 -9a 80 25 ab 43 82 28 6b e4 c0 37 88 dd 01 d6 9f - -# --------------------------------- -# Step-by-step RSASSA-PSS Signature -# --------------------------------- - -# Message M to be signed: -85 9e ef 2f d7 8a ca 00 30 8b dc 47 11 93 bf 55 -bf 9d 78 db 8f 8a 67 2b 48 46 34 f3 c9 c2 6e 64 -78 ae 10 26 0f e0 dd 8c 08 2e 53 a5 29 3a f2 17 -3c d5 0c 6d 5d 35 4f eb f7 8b 26 02 1c 25 c0 27 -12 e7 8c d4 69 4c 9f 46 97 77 e4 51 e7 f8 e9 e0 -4c d3 73 9c 6b bf ed ae 48 7f b5 56 44 e9 ca 74 -ff 77 a5 3c b7 29 80 2f 6e d4 a5 ff a8 ba 15 98 -90 fc - -# mHash = Hash(M) -# salt = random string of octets -# M' = Padding || mHash || salt -# H = Hash(M') -# DB = Padding || salt -# dbMask = MGF(H, length(DB)) -# maskedDB = DB xor dbMask (leftmost bit set to -# zero) -# EM = maskedDB || H || 0xbc - -# mHash: -37 b6 6a e0 44 58 43 35 3d 47 ec b0 b4 fd 14 c1 -10 e6 2d 6a - -# salt: -e3 b5 d5 d0 02 c1 bc e5 0c 2b 65 ef 88 a1 88 d8 -3b ce 7e 61 - -# M': -00 00 00 00 00 00 00 00 37 b6 6a e0 44 58 43 35 -3d 47 ec b0 b4 fd 14 c1 10 e6 2d 6a e3 b5 d5 d0 -02 c1 bc e5 0c 2b 65 ef 88 a1 88 d8 3b ce 7e 61 - -# H: -df 1a 89 6f 9d 8b c8 16 d9 7c d7 a2 c4 3b ad 54 -6f be 8c fe - -# DB: -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 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 01 e3 b5 d5 d0 02 c1 bc e5 0c -2b 65 ef 88 a1 88 d8 3b ce 7e 61 - -# dbMask: -66 e4 67 2e 83 6a d1 21 ba 24 4b ed 65 76 b8 67 -d9 a4 47 c2 8a 6e 66 a5 b8 7d ee 7f bc 7e 65 af -50 57 f8 6f ae 89 84 d9 ba 7f 96 9a d6 fe 02 a4 -d7 5f 74 45 fe fd d8 5b 6d 3a 47 7c 28 d2 4b a1 -e3 75 6f 79 2d d1 dc e8 ca 94 44 0e cb 52 79 ec -d3 18 3a 31 1f c8 97 39 a9 66 43 13 6e 8b 0f 46 -5e 87 a4 53 5c d4 c5 9b 10 02 8d - -# maskedDB: -66 e4 67 2e 83 6a d1 21 ba 24 4b ed 65 76 b8 67 -d9 a4 47 c2 8a 6e 66 a5 b8 7d ee 7f bc 7e 65 af -50 57 f8 6f ae 89 84 d9 ba 7f 96 9a d6 fe 02 a4 -d7 5f 74 45 fe fd d8 5b 6d 3a 47 7c 28 d2 4b a1 -e3 75 6f 79 2d d1 dc e8 ca 94 44 0e cb 52 79 ec -d3 18 3a 31 1f c8 96 da 1c b3 93 11 af 37 ea 4a -75 e2 4b db fd 5c 1d a0 de 7c ec - -# Encoded message EM: -66 e4 67 2e 83 6a d1 21 ba 24 4b ed 65 76 b8 67 -d9 a4 47 c2 8a 6e 66 a5 b8 7d ee 7f bc 7e 65 af -50 57 f8 6f ae 89 84 d9 ba 7f 96 9a d6 fe 02 a4 -d7 5f 74 45 fe fd d8 5b 6d 3a 47 7c 28 d2 4b a1 -e3 75 6f 79 2d d1 dc e8 ca 94 44 0e cb 52 79 ec -d3 18 3a 31 1f c8 96 da 1c b3 93 11 af 37 ea 4a -75 e2 4b db fd 5c 1d a0 de 7c ec df 1a 89 6f 9d -8b c8 16 d9 7c d7 a2 c4 3b ad 54 6f be 8c fe bc - -# Signature S, the RSA decryption of EM: -8d aa 62 7d 3d e7 59 5d 63 05 6c 7e c6 59 e5 44 -06 f1 06 10 12 8b aa e8 21 c8 b2 a0 f3 93 6d 54 -dc 3b dc e4 66 89 f6 b7 95 1b b1 8e 84 05 42 76 -97 18 d5 71 5d 21 0d 85 ef bb 59 61 92 03 2c 42 -be 4c 29 97 2c 85 62 75 eb 6d 5a 45 f0 5f 51 87 -6f c6 74 3d ed dd 28 ca ec 9b b3 0e a9 9e 02 c3 -48 82 69 60 4f e4 97 f7 4c cd 7c 7f ca 16 71 89 -71 23 cb d3 0d ef 5d 54 a2 b5 53 6a d9 0a 74 7e - -# ============================================= diff --git a/notes/rsa-testvectors/pss-vect.c b/notes/rsa-testvectors/pss-vect.c deleted file mode 100644 index 4b85dbf7..00000000 --- a/notes/rsa-testvectors/pss-vect.c +++ /dev/null @@ -1,1418 +0,0 @@ -/* Generated from file: pss-vect.txt - * with md5 hash: af66c6ca63a09d0443d5f78ff0e59c29 - */ - - -typedef struct rsaKey { - int n_l; - unsigned char n[256]; - int e_l; - unsigned char e[256]; - int d_l; - unsigned char d[256]; - int p_l; - unsigned char p[256]; - int q_l; - unsigned char q[256]; - int dP_l; - unsigned char dP[256]; - int dQ_l; - unsigned char dQ[256]; - int qInv_l; - unsigned char qInv[256]; -} rsaKey_t; - -typedef struct rsaData { - const char* name; - int o1_l; - unsigned char o1[256]; - int o2_l; - unsigned char o2[256]; - int o3_l; - unsigned char o3[256]; -} rsaData_t; - -typedef struct testcase { - const char* name; - rsaKey_t rsa; -#ifdef LTC_TEST_EXT - rsaData_t data[6]; -#else - rsaData_t data[1]; -#endif /* LTC_TEST_EXT */ -} testcase_t; - -static testcase_t testcases_pss[] = - { -{ - "Example 1: A 1024-bit RSA Key Pair", -{ - /* RSA modulus n */ - 128, - { 0xa5, 0x6e, 0x4a, 0x0e, 0x70, 0x10, 0x17, 0x58, 0x9a, 0x51, 0x87, 0xdc, 0x7e, 0xa8, 0x41, 0xd1, 0x56, 0xf2, 0xec, 0x0e, 0x36, 0xad, 0x52, 0xa4, 0x4d, 0xfe, 0xb1, 0xe6, 0x1f, 0x7a, 0xd9, 0x91, 0xd8, 0xc5, 0x10, 0x56, 0xff, 0xed, 0xb1, 0x62, 0xb4, 0xc0, 0xf2, 0x83, 0xa1, 0x2a, 0x88, 0xa3, 0x94, 0xdf, 0xf5, 0x26, 0xab, 0x72, 0x91, 0xcb, 0xb3, 0x07, 0xce, 0xab, 0xfc, 0xe0, 0xb1, 0xdf, 0xd5, 0xcd, 0x95, 0x08, 0x09, 0x6d, 0x5b, 0x2b, 0x8b, 0x6d, 0xf5, 0xd6, 0x71, 0xef, 0x63, 0x77, 0xc0, 0x92, 0x1c, 0xb2, 0x3c, 0x27, 0x0a, 0x70, 0xe2, 0x59, 0x8e, 0x6f, 0xf8, 0x9d, 0x19, 0xf1, 0x05, 0xac, 0xc2, 0xd3, 0xf0, 0xcb, 0x35, 0xf2, 0x92, 0x80, 0xe1, 0x38, 0x6b, 0x6f, 0x64, 0xc4, 0xef, 0x22, 0xe1, 0xe1, 0xf2, 0x0d, 0x0c, 0xe8, 0xcf, 0xfb, 0x22, 0x49, 0xbd, 0x9a, 0x21, 0x37 } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 128, - { 0x33, 0xa5, 0x04, 0x2a, 0x90, 0xb2, 0x7d, 0x4f, 0x54, 0x51, 0xca, 0x9b, 0xbb, 0xd0, 0xb4, 0x47, 0x71, 0xa1, 0x01, 0xaf, 0x88, 0x43, 0x40, 0xae, 0xf9, 0x88, 0x5f, 0x2a, 0x4b, 0xbe, 0x92, 0xe8, 0x94, 0xa7, 0x24, 0xac, 0x3c, 0x56, 0x8c, 0x8f, 0x97, 0x85, 0x3a, 0xd0, 0x7c, 0x02, 0x66, 0xc8, 0xc6, 0xa3, 0xca, 0x09, 0x29, 0xf1, 0xe8, 0xf1, 0x12, 0x31, 0x88, 0x44, 0x29, 0xfc, 0x4d, 0x9a, 0xe5, 0x5f, 0xee, 0x89, 0x6a, 0x10, 0xce, 0x70, 0x7c, 0x3e, 0xd7, 0xe7, 0x34, 0xe4, 0x47, 0x27, 0xa3, 0x95, 0x74, 0x50, 0x1a, 0x53, 0x26, 0x83, 0x10, 0x9c, 0x2a, 0xba, 0xca, 0xba, 0x28, 0x3c, 0x31, 0xb4, 0xbd, 0x2f, 0x53, 0xc3, 0xee, 0x37, 0xe3, 0x52, 0xce, 0xe3, 0x4f, 0x9e, 0x50, 0x3b, 0xd8, 0x0c, 0x06, 0x22, 0xad, 0x79, 0xc6, 0xdc, 0xee, 0x88, 0x35, 0x47, 0xc6, 0xa3, 0xb3, 0x25 } -, - /* Prime p */ - 64, - { 0xe7, 0xe8, 0x94, 0x27, 0x20, 0xa8, 0x77, 0x51, 0x72, 0x73, 0xa3, 0x56, 0x05, 0x3e, 0xa2, 0xa1, 0xbc, 0x0c, 0x94, 0xaa, 0x72, 0xd5, 0x5c, 0x6e, 0x86, 0x29, 0x6b, 0x2d, 0xfc, 0x96, 0x79, 0x48, 0xc0, 0xa7, 0x2c, 0xbc, 0xcc, 0xa7, 0xea, 0xcb, 0x35, 0x70, 0x6e, 0x09, 0xa1, 0xdf, 0x55, 0xa1, 0x53, 0x5b, 0xd9, 0xb3, 0xcc, 0x34, 0x16, 0x0b, 0x3b, 0x6d, 0xcd, 0x3e, 0xda, 0x8e, 0x64, 0x43 } -, - /* Prime q */ - 64, - { 0xb6, 0x9d, 0xca, 0x1c, 0xf7, 0xd4, 0xd7, 0xec, 0x81, 0xe7, 0x5b, 0x90, 0xfc, 0xca, 0x87, 0x4a, 0xbc, 0xde, 0x12, 0x3f, 0xd2, 0x70, 0x01, 0x80, 0xaa, 0x90, 0x47, 0x9b, 0x6e, 0x48, 0xde, 0x8d, 0x67, 0xed, 0x24, 0xf9, 0xf1, 0x9d, 0x85, 0xba, 0x27, 0x58, 0x74, 0xf5, 0x42, 0xcd, 0x20, 0xdc, 0x72, 0x3e, 0x69, 0x63, 0x36, 0x4a, 0x1f, 0x94, 0x25, 0x45, 0x2b, 0x26, 0x9a, 0x67, 0x99, 0xfd } -, - /* p's CRT exponent dP */ - 64, - { 0x28, 0xfa, 0x13, 0x93, 0x86, 0x55, 0xbe, 0x1f, 0x8a, 0x15, 0x9c, 0xba, 0xca, 0x5a, 0x72, 0xea, 0x19, 0x0c, 0x30, 0x08, 0x9e, 0x19, 0xcd, 0x27, 0x4a, 0x55, 0x6f, 0x36, 0xc4, 0xf6, 0xe1, 0x9f, 0x55, 0x4b, 0x34, 0xc0, 0x77, 0x79, 0x04, 0x27, 0xbb, 0xdd, 0x8d, 0xd3, 0xed, 0xe2, 0x44, 0x83, 0x28, 0xf3, 0x85, 0xd8, 0x1b, 0x30, 0xe8, 0xe4, 0x3b, 0x2f, 0xff, 0xa0, 0x27, 0x86, 0x19, 0x79 } -, - /* q's CRT exponent dQ */ - 64, - { 0x1a, 0x8b, 0x38, 0xf3, 0x98, 0xfa, 0x71, 0x20, 0x49, 0x89, 0x8d, 0x7f, 0xb7, 0x9e, 0xe0, 0xa7, 0x76, 0x68, 0x79, 0x12, 0x99, 0xcd, 0xfa, 0x09, 0xef, 0xc0, 0xe5, 0x07, 0xac, 0xb2, 0x1e, 0xd7, 0x43, 0x01, 0xef, 0x5b, 0xfd, 0x48, 0xbe, 0x45, 0x5e, 0xae, 0xb6, 0xe1, 0x67, 0x82, 0x55, 0x82, 0x75, 0x80, 0xa8, 0xe4, 0xe8, 0xe1, 0x41, 0x51, 0xd1, 0x51, 0x0a, 0x82, 0xa3, 0xf2, 0xe7, 0x29 } -, - /* CRT coefficient qInv */ - 64, - { 0x27, 0x15, 0x6a, 0xba, 0x41, 0x26, 0xd2, 0x4a, 0x81, 0xf3, 0xa5, 0x28, 0xcb, 0xfb, 0x27, 0xf5, 0x68, 0x86, 0xf8, 0x40, 0xa9, 0xf6, 0xe8, 0x6e, 0x17, 0xa4, 0x4b, 0x94, 0xfe, 0x93, 0x19, 0x58, 0x4b, 0x8e, 0x22, 0xfd, 0xde, 0x1e, 0x5a, 0x2e, 0x3b, 0xd8, 0xaa, 0x5b, 0xa8, 0xd8, 0x58, 0x41, 0x94, 0xeb, 0x21, 0x90, 0xac, 0xf8, 0x32, 0xb8, 0x47, 0xf1, 0x3a, 0x3d, 0x24, 0xa7, 0x9f, 0x4d } - -} -, -{{ - "RSASSA-PSS Signature Example 1.1", - /* Message to be signed */ - 217, - { 0xcd, 0xc8, 0x7d, 0xa2, 0x23, 0xd7, 0x86, 0xdf, 0x3b, 0x45, 0xe0, 0xbb, 0xbc, 0x72, 0x13, 0x26, 0xd1, 0xee, 0x2a, 0xf8, 0x06, 0xcc, 0x31, 0x54, 0x75, 0xcc, 0x6f, 0x0d, 0x9c, 0x66, 0xe1, 0xb6, 0x23, 0x71, 0xd4, 0x5c, 0xe2, 0x39, 0x2e, 0x1a, 0xc9, 0x28, 0x44, 0xc3, 0x10, 0x10, 0x2f, 0x15, 0x6a, 0x0d, 0x8d, 0x52, 0xc1, 0xf4, 0xc4, 0x0b, 0xa3, 0xaa, 0x65, 0x09, 0x57, 0x86, 0xcb, 0x76, 0x97, 0x57, 0xa6, 0x56, 0x3b, 0xa9, 0x58, 0xfe, 0xd0, 0xbc, 0xc9, 0x84, 0xe8, 0xb5, 0x17, 0xa3, 0xd5, 0xf5, 0x15, 0xb2, 0x3b, 0x8a, 0x41, 0xe7, 0x4a, 0xa8, 0x67, 0x69, 0x3f, 0x90, 0xdf, 0xb0, 0x61, 0xa6, 0xe8, 0x6d, 0xfa, 0xae, 0xe6, 0x44, 0x72, 0xc0, 0x0e, 0x5f, 0x20, 0x94, 0x57, 0x29, 0xcb, 0xeb, 0xe7, 0x7f, 0x06, 0xce, 0x78, 0xe0, 0x8f, 0x40, 0x98, 0xfb, 0xa4, 0x1f, 0x9d, 0x61, 0x93, 0xc0, 0x31, 0x7e, 0x8b, 0x60, 0xd4, 0xb6, 0x08, 0x4a, 0xcb, 0x42, 0xd2, 0x9e, 0x38, 0x08, 0xa3, 0xbc, 0x37, 0x2d, 0x85, 0xe3, 0x31, 0x17, 0x0f, 0xcb, 0xf7, 0xcc, 0x72, 0xd0, 0xb7, 0x1c, 0x29, 0x66, 0x48, 0xb3, 0xa4, 0xd1, 0x0f, 0x41, 0x62, 0x95, 0xd0, 0x80, 0x7a, 0xa6, 0x25, 0xca, 0xb2, 0x74, 0x4f, 0xd9, 0xea, 0x8f, 0xd2, 0x23, 0xc4, 0x25, 0x37, 0x02, 0x98, 0x28, 0xbd, 0x16, 0xbe, 0x02, 0x54, 0x6f, 0x13, 0x0f, 0xd2, 0xe3, 0x3b, 0x93, 0x6d, 0x26, 0x76, 0xe0, 0x8a, 0xed, 0x1b, 0x73, 0x31, 0x8b, 0x75, 0x0a, 0x01, 0x67, 0xd0 } -, - /* Salt */ - 20, - { 0xde, 0xe9, 0x59, 0xc7, 0xe0, 0x64, 0x11, 0x36, 0x14, 0x20, 0xff, 0x80, 0x18, 0x5e, 0xd5, 0x7f, 0x3e, 0x67, 0x76, 0xaf } -, - /* Signature */ - 128, - { 0x90, 0x74, 0x30, 0x8f, 0xb5, 0x98, 0xe9, 0x70, 0x1b, 0x22, 0x94, 0x38, 0x8e, 0x52, 0xf9, 0x71, 0xfa, 0xac, 0x2b, 0x60, 0xa5, 0x14, 0x5a, 0xf1, 0x85, 0xdf, 0x52, 0x87, 0xb5, 0xed, 0x28, 0x87, 0xe5, 0x7c, 0xe7, 0xfd, 0x44, 0xdc, 0x86, 0x34, 0xe4, 0x07, 0xc8, 0xe0, 0xe4, 0x36, 0x0b, 0xc2, 0x26, 0xf3, 0xec, 0x22, 0x7f, 0x9d, 0x9e, 0x54, 0x63, 0x8e, 0x8d, 0x31, 0xf5, 0x05, 0x12, 0x15, 0xdf, 0x6e, 0xbb, 0x9c, 0x2f, 0x95, 0x79, 0xaa, 0x77, 0x59, 0x8a, 0x38, 0xf9, 0x14, 0xb5, 0xb9, 0xc1, 0xbd, 0x83, 0xc4, 0xe2, 0xf9, 0xf3, 0x82, 0xa0, 0xd0, 0xaa, 0x35, 0x42, 0xff, 0xee, 0x65, 0x98, 0x4a, 0x60, 0x1b, 0xc6, 0x9e, 0xb2, 0x8d, 0xeb, 0x27, 0xdc, 0xa1, 0x2c, 0x82, 0xc2, 0xd4, 0xc3, 0xf6, 0x6c, 0xd5, 0x00, 0xf1, 0xff, 0x2b, 0x99, 0x4d, 0x8a, 0x4e, 0x30, 0xcb, 0xb3, 0x3c } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSASSA-PSS Signature Example 1.2", - /* Message to be signed */ - 51, - { 0x85, 0x13, 0x84, 0xcd, 0xfe, 0x81, 0x9c, 0x22, 0xed, 0x6c, 0x4c, 0xcb, 0x30, 0xda, 0xeb, 0x5c, 0xf0, 0x59, 0xbc, 0x8e, 0x11, 0x66, 0xb7, 0xe3, 0x53, 0x0c, 0x4c, 0x23, 0x3e, 0x2b, 0x5f, 0x8f, 0x71, 0xa1, 0xcc, 0xa5, 0x82, 0xd4, 0x3e, 0xcc, 0x72, 0xb1, 0xbc, 0xa1, 0x6d, 0xfc, 0x70, 0x13, 0x22, 0x6b, 0x9e } -, - /* Salt */ - 20, - { 0xef, 0x28, 0x69, 0xfa, 0x40, 0xc3, 0x46, 0xcb, 0x18, 0x3d, 0xab, 0x3d, 0x7b, 0xff, 0xc9, 0x8f, 0xd5, 0x6d, 0xf4, 0x2d } -, - /* Signature */ - 128, - { 0x3e, 0xf7, 0xf4, 0x6e, 0x83, 0x1b, 0xf9, 0x2b, 0x32, 0x27, 0x41, 0x42, 0xa5, 0x85, 0xff, 0xce, 0xfb, 0xdc, 0xa7, 0xb3, 0x2a, 0xe9, 0x0d, 0x10, 0xfb, 0x0f, 0x0c, 0x72, 0x99, 0x84, 0xf0, 0x4e, 0xf2, 0x9a, 0x9d, 0xf0, 0x78, 0x07, 0x75, 0xce, 0x43, 0x73, 0x9b, 0x97, 0x83, 0x83, 0x90, 0xdb, 0x0a, 0x55, 0x05, 0xe6, 0x3d, 0xe9, 0x27, 0x02, 0x8d, 0x9d, 0x29, 0xb2, 0x19, 0xca, 0x2c, 0x45, 0x17, 0x83, 0x25, 0x58, 0xa5, 0x5d, 0x69, 0x4a, 0x6d, 0x25, 0xb9, 0xda, 0xb6, 0x60, 0x03, 0xc4, 0xcc, 0xcd, 0x90, 0x78, 0x02, 0x19, 0x3b, 0xe5, 0x17, 0x0d, 0x26, 0x14, 0x7d, 0x37, 0xb9, 0x35, 0x90, 0x24, 0x1b, 0xe5, 0x1c, 0x25, 0x05, 0x5f, 0x47, 0xef, 0x62, 0x75, 0x2c, 0xfb, 0xe2, 0x14, 0x18, 0xfa, 0xfe, 0x98, 0xc2, 0x2c, 0x4d, 0x4d, 0x47, 0x72, 0x4f, 0xdb, 0x56, 0x69, 0xe8, 0x43 } - -} -, -{ - "RSASSA-PSS Signature Example 1.3", - /* Message to be signed */ - 228, - { 0xa4, 0xb1, 0x59, 0x94, 0x17, 0x61, 0xc4, 0x0c, 0x6a, 0x82, 0xf2, 0xb8, 0x0d, 0x1b, 0x94, 0xf5, 0xaa, 0x26, 0x54, 0xfd, 0x17, 0xe1, 0x2d, 0x58, 0x88, 0x64, 0x67, 0x9b, 0x54, 0xcd, 0x04, 0xef, 0x8b, 0xd0, 0x30, 0x12, 0xbe, 0x8d, 0xc3, 0x7f, 0x4b, 0x83, 0xaf, 0x79, 0x63, 0xfa, 0xff, 0x0d, 0xfa, 0x22, 0x54, 0x77, 0x43, 0x7c, 0x48, 0x01, 0x7f, 0xf2, 0xbe, 0x81, 0x91, 0xcf, 0x39, 0x55, 0xfc, 0x07, 0x35, 0x6e, 0xab, 0x3f, 0x32, 0x2f, 0x7f, 0x62, 0x0e, 0x21, 0xd2, 0x54, 0xe5, 0xdb, 0x43, 0x24, 0x27, 0x9f, 0xe0, 0x67, 0xe0, 0x91, 0x0e, 0x2e, 0x81, 0xca, 0x2c, 0xab, 0x31, 0xc7, 0x45, 0xe6, 0x7a, 0x54, 0x05, 0x8e, 0xb5, 0x0d, 0x99, 0x3c, 0xdb, 0x9e, 0xd0, 0xb4, 0xd0, 0x29, 0xc0, 0x6d, 0x21, 0xa9, 0x4c, 0xa6, 0x61, 0xc3, 0xce, 0x27, 0xfa, 0xe1, 0xd6, 0xcb, 0x20, 0xf4, 0x56, 0x4d, 0x66, 0xce, 0x47, 0x67, 0x58, 0x3d, 0x0e, 0x5f, 0x06, 0x02, 0x15, 0xb5, 0x90, 0x17, 0xbe, 0x85, 0xea, 0x84, 0x89, 0x39, 0x12, 0x7b, 0xd8, 0xc9, 0xc4, 0xd4, 0x7b, 0x51, 0x05, 0x6c, 0x03, 0x1c, 0xf3, 0x36, 0xf1, 0x7c, 0x99, 0x80, 0xf3, 0xb8, 0xf5, 0xb9, 0xb6, 0x87, 0x8e, 0x8b, 0x79, 0x7a, 0xa4, 0x3b, 0x88, 0x26, 0x84, 0x33, 0x3e, 0x17, 0x89, 0x3f, 0xe9, 0xca, 0xa6, 0xaa, 0x29, 0x9f, 0x7e, 0xd1, 0xa1, 0x8e, 0xe2, 0xc5, 0x48, 0x64, 0xb7, 0xb2, 0xb9, 0x9b, 0x72, 0x61, 0x8f, 0xb0, 0x25, 0x74, 0xd1, 0x39, 0xef, 0x50, 0xf0, 0x19, 0xc9, 0xee, 0xf4, 0x16, 0x97, 0x13, 0x38, 0xe7, 0xd4, 0x70 } -, - /* Salt */ - 20, - { 0x71, 0x0b, 0x9c, 0x47, 0x47, 0xd8, 0x00, 0xd4, 0xde, 0x87, 0xf1, 0x2a, 0xfd, 0xce, 0x6d, 0xf1, 0x81, 0x07, 0xcc, 0x77 } -, - /* Signature */ - 128, - { 0x66, 0x60, 0x26, 0xfb, 0xa7, 0x1b, 0xd3, 0xe7, 0xcf, 0x13, 0x15, 0x7c, 0xc2, 0xc5, 0x1a, 0x8e, 0x4a, 0xa6, 0x84, 0xaf, 0x97, 0x78, 0xf9, 0x18, 0x49, 0xf3, 0x43, 0x35, 0xd1, 0x41, 0xc0, 0x01, 0x54, 0xc4, 0x19, 0x76, 0x21, 0xf9, 0x62, 0x4a, 0x67, 0x5b, 0x5a, 0xbc, 0x22, 0xee, 0x7d, 0x5b, 0xaa, 0xff, 0xaa, 0xe1, 0xc9, 0xba, 0xca, 0x2c, 0xc3, 0x73, 0xb3, 0xf3, 0x3e, 0x78, 0xe6, 0x14, 0x3c, 0x39, 0x5a, 0x91, 0xaa, 0x7f, 0xac, 0xa6, 0x64, 0xeb, 0x73, 0x3a, 0xfd, 0x14, 0xd8, 0x82, 0x72, 0x59, 0xd9, 0x9a, 0x75, 0x50, 0xfa, 0xca, 0x50, 0x1e, 0xf2, 0xb0, 0x4e, 0x33, 0xc2, 0x3a, 0xa5, 0x1f, 0x4b, 0x9e, 0x82, 0x82, 0xef, 0xdb, 0x72, 0x8c, 0xc0, 0xab, 0x09, 0x40, 0x5a, 0x91, 0x60, 0x7c, 0x63, 0x69, 0x96, 0x1b, 0xc8, 0x27, 0x0d, 0x2d, 0x4f, 0x39, 0xfc, 0xe6, 0x12, 0xb1 } - -} -, -{ - "RSASSA-PSS Signature Example 1.4", - /* Message to be signed */ - 9, - { 0xbc, 0x65, 0x67, 0x47, 0xfa, 0x9e, 0xaf, 0xb3, 0xf0 } -, - /* Salt */ - 20, - { 0x05, 0x6f, 0x00, 0x98, 0x5d, 0xe1, 0x4d, 0x8e, 0xf5, 0xce, 0xa9, 0xe8, 0x2f, 0x8c, 0x27, 0xbe, 0xf7, 0x20, 0x33, 0x5e } -, - /* Signature */ - 128, - { 0x46, 0x09, 0x79, 0x3b, 0x23, 0xe9, 0xd0, 0x93, 0x62, 0xdc, 0x21, 0xbb, 0x47, 0xda, 0x0b, 0x4f, 0x3a, 0x76, 0x22, 0x64, 0x9a, 0x47, 0xd4, 0x64, 0x01, 0x9b, 0x9a, 0xea, 0xfe, 0x53, 0x35, 0x9c, 0x17, 0x8c, 0x91, 0xcd, 0x58, 0xba, 0x6b, 0xcb, 0x78, 0xbe, 0x03, 0x46, 0xa7, 0xbc, 0x63, 0x7f, 0x4b, 0x87, 0x3d, 0x4b, 0xab, 0x38, 0xee, 0x66, 0x1f, 0x19, 0x96, 0x34, 0xc5, 0x47, 0xa1, 0xad, 0x84, 0x42, 0xe0, 0x3d, 0xa0, 0x15, 0xb1, 0x36, 0xe5, 0x43, 0xf7, 0xab, 0x07, 0xc0, 0xc1, 0x3e, 0x42, 0x25, 0xb8, 0xde, 0x8c, 0xce, 0x25, 0xd4, 0xf6, 0xeb, 0x84, 0x00, 0xf8, 0x1f, 0x7e, 0x18, 0x33, 0xb7, 0xee, 0x6e, 0x33, 0x4d, 0x37, 0x09, 0x64, 0xca, 0x79, 0xfd, 0xb8, 0x72, 0xb4, 0xd7, 0x52, 0x23, 0xb5, 0xee, 0xb0, 0x81, 0x01, 0x59, 0x1f, 0xb5, 0x32, 0xd1, 0x55, 0xa6, 0xde, 0x87 } - -} -, -{ - "RSASSA-PSS Signature Example 1.5", - /* Message to be signed */ - 149, - { 0xb4, 0x55, 0x81, 0x54, 0x7e, 0x54, 0x27, 0x77, 0x0c, 0x76, 0x8e, 0x8b, 0x82, 0xb7, 0x55, 0x64, 0xe0, 0xea, 0x4e, 0x9c, 0x32, 0x59, 0x4d, 0x6b, 0xff, 0x70, 0x65, 0x44, 0xde, 0x0a, 0x87, 0x76, 0xc7, 0xa8, 0x0b, 0x45, 0x76, 0x55, 0x0e, 0xee, 0x1b, 0x2a, 0xca, 0xbc, 0x7e, 0x8b, 0x7d, 0x3e, 0xf7, 0xbb, 0x5b, 0x03, 0xe4, 0x62, 0xc1, 0x10, 0x47, 0xea, 0xdd, 0x00, 0x62, 0x9a, 0xe5, 0x75, 0x48, 0x0a, 0xc1, 0x47, 0x0f, 0xe0, 0x46, 0xf1, 0x3a, 0x2b, 0xf5, 0xaf, 0x17, 0x92, 0x1d, 0xc4, 0xb0, 0xaa, 0x8b, 0x02, 0xbe, 0xe6, 0x33, 0x49, 0x11, 0x65, 0x1d, 0x7f, 0x85, 0x25, 0xd1, 0x0f, 0x32, 0xb5, 0x1d, 0x33, 0xbe, 0x52, 0x0d, 0x3d, 0xdf, 0x5a, 0x70, 0x99, 0x55, 0xa3, 0xdf, 0xe7, 0x82, 0x83, 0xb9, 0xe0, 0xab, 0x54, 0x04, 0x6d, 0x15, 0x0c, 0x17, 0x7f, 0x03, 0x7f, 0xdc, 0xcc, 0x5b, 0xe4, 0xea, 0x5f, 0x68, 0xb5, 0xe5, 0xa3, 0x8c, 0x9d, 0x7e, 0xdc, 0xcc, 0xc4, 0x97, 0x5f, 0x45, 0x5a, 0x69, 0x09, 0xb4 } -, - /* Salt */ - 20, - { 0x80, 0xe7, 0x0f, 0xf8, 0x6a, 0x08, 0xde, 0x3e, 0xc6, 0x09, 0x72, 0xb3, 0x9b, 0x4f, 0xbf, 0xdc, 0xea, 0x67, 0xae, 0x8e } -, - /* Signature */ - 128, - { 0x1d, 0x2a, 0xad, 0x22, 0x1c, 0xa4, 0xd3, 0x1d, 0xdf, 0x13, 0x50, 0x92, 0x39, 0x01, 0x93, 0x98, 0xe3, 0xd1, 0x4b, 0x32, 0xdc, 0x34, 0xdc, 0x5a, 0xf4, 0xae, 0xae, 0xa3, 0xc0, 0x95, 0xaf, 0x73, 0x47, 0x9c, 0xf0, 0xa4, 0x5e, 0x56, 0x29, 0x63, 0x5a, 0x53, 0xa0, 0x18, 0x37, 0x76, 0x15, 0xb1, 0x6c, 0xb9, 0xb1, 0x3b, 0x3e, 0x09, 0xd6, 0x71, 0xeb, 0x71, 0xe3, 0x87, 0xb8, 0x54, 0x5c, 0x59, 0x60, 0xda, 0x5a, 0x64, 0x77, 0x6e, 0x76, 0x8e, 0x82, 0xb2, 0xc9, 0x35, 0x83, 0xbf, 0x10, 0x4c, 0x3f, 0xdb, 0x23, 0x51, 0x2b, 0x7b, 0x4e, 0x89, 0xf6, 0x33, 0xdd, 0x00, 0x63, 0xa5, 0x30, 0xdb, 0x45, 0x24, 0xb0, 0x1c, 0x3f, 0x38, 0x4c, 0x09, 0x31, 0x0e, 0x31, 0x5a, 0x79, 0xdc, 0xd3, 0xd6, 0x84, 0x02, 0x2a, 0x7f, 0x31, 0xc8, 0x65, 0xa6, 0x64, 0xe3, 0x16, 0x97, 0x8b, 0x75, 0x9f, 0xad } - -} -, -{ - "RSASSA-PSS Signature Example 1.6", - /* Message to be signed */ - 233, - { 0x10, 0xaa, 0xe9, 0xa0, 0xab, 0x0b, 0x59, 0x5d, 0x08, 0x41, 0x20, 0x7b, 0x70, 0x0d, 0x48, 0xd7, 0x5f, 0xae, 0xdd, 0xe3, 0xb7, 0x75, 0xcd, 0x6b, 0x4c, 0xc8, 0x8a, 0xe0, 0x6e, 0x46, 0x94, 0xec, 0x74, 0xba, 0x18, 0xf8, 0x52, 0x0d, 0x4f, 0x5e, 0xa6, 0x9c, 0xbb, 0xe7, 0xcc, 0x2b, 0xeb, 0xa4, 0x3e, 0xfd, 0xc1, 0x02, 0x15, 0xac, 0x4e, 0xb3, 0x2d, 0xc3, 0x02, 0xa1, 0xf5, 0x3d, 0xc6, 0xc4, 0x35, 0x22, 0x67, 0xe7, 0x93, 0x6c, 0xfe, 0xbf, 0x7c, 0x8d, 0x67, 0x03, 0x57, 0x84, 0xa3, 0x90, 0x9f, 0xa8, 0x59, 0xc7, 0xb7, 0xb5, 0x9b, 0x8e, 0x39, 0xc5, 0xc2, 0x34, 0x9f, 0x18, 0x86, 0xb7, 0x05, 0xa3, 0x02, 0x67, 0xd4, 0x02, 0xf7, 0x48, 0x6a, 0xb4, 0xf5, 0x8c, 0xad, 0x5d, 0x69, 0xad, 0xb1, 0x7a, 0xb8, 0xcd, 0x0c, 0xe1, 0xca, 0xf5, 0x02, 0x5a, 0xf4, 0xae, 0x24, 0xb1, 0xfb, 0x87, 0x94, 0xc6, 0x07, 0x0c, 0xc0, 0x9a, 0x51, 0xe2, 0xf9, 0x91, 0x13, 0x11, 0xe3, 0x87, 0x7d, 0x00, 0x44, 0xc7, 0x1c, 0x57, 0xa9, 0x93, 0x39, 0x50, 0x08, 0x80, 0x6b, 0x72, 0x3a, 0xc3, 0x83, 0x73, 0xd3, 0x95, 0x48, 0x18, 0x18, 0x52, 0x8c, 0x1e, 0x70, 0x53, 0x73, 0x92, 0x82, 0x05, 0x35, 0x29, 0x51, 0x0e, 0x93, 0x5c, 0xd0, 0xfa, 0x77, 0xb8, 0xfa, 0x53, 0xcc, 0x2d, 0x47, 0x4b, 0xd4, 0xfb, 0x3c, 0xc5, 0xc6, 0x72, 0xd6, 0xff, 0xdc, 0x90, 0xa0, 0x0f, 0x98, 0x48, 0x71, 0x2c, 0x4b, 0xcf, 0xe4, 0x6c, 0x60, 0x57, 0x36, 0x59, 0xb1, 0x1e, 0x64, 0x57, 0xe8, 0x61, 0xf0, 0xf6, 0x04, 0xb6, 0x13, 0x8d, 0x14, 0x4f, 0x8c, 0xe4, 0xe2, 0xda, 0x73 } -, - /* Salt */ - 20, - { 0xa8, 0xab, 0x69, 0xdd, 0x80, 0x1f, 0x00, 0x74, 0xc2, 0xa1, 0xfc, 0x60, 0x64, 0x98, 0x36, 0xc6, 0x16, 0xd9, 0x96, 0x81 } -, - /* Signature */ - 128, - { 0x2a, 0x34, 0xf6, 0x12, 0x5e, 0x1f, 0x6b, 0x0b, 0xf9, 0x71, 0xe8, 0x4f, 0xbd, 0x41, 0xc6, 0x32, 0xbe, 0x8f, 0x2c, 0x2a, 0xce, 0x7d, 0xe8, 0xb6, 0x92, 0x6e, 0x31, 0xff, 0x93, 0xe9, 0xaf, 0x98, 0x7f, 0xbc, 0x06, 0xe5, 0x1e, 0x9b, 0xe1, 0x4f, 0x51, 0x98, 0xf9, 0x1f, 0x3f, 0x95, 0x3b, 0xd6, 0x7d, 0xa6, 0x0a, 0x9d, 0xf5, 0x97, 0x64, 0xc3, 0xdc, 0x0f, 0xe0, 0x8e, 0x1c, 0xbe, 0xf0, 0xb7, 0x5f, 0x86, 0x8d, 0x10, 0xad, 0x3f, 0xba, 0x74, 0x9f, 0xef, 0x59, 0xfb, 0x6d, 0xac, 0x46, 0xa0, 0xd6, 0xe5, 0x04, 0x36, 0x93, 0x31, 0x58, 0x6f, 0x58, 0xe4, 0x62, 0x8f, 0x39, 0xaa, 0x27, 0x89, 0x82, 0x54, 0x3b, 0xc0, 0xee, 0xb5, 0x37, 0xdc, 0x61, 0x95, 0x80, 0x19, 0xb3, 0x94, 0xfb, 0x27, 0x3f, 0x21, 0x58, 0x58, 0xa0, 0xa0, 0x1a, 0xc4, 0xd6, 0x50, 0xb9, 0x55, 0xc6, 0x7f, 0x4c, 0x58 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 2: A 1025-bit RSA Key Pair", -{ - /* RSA modulus n */ - 129, - { 0x01, 0xd4, 0x0c, 0x1b, 0xcf, 0x97, 0xa6, 0x8a, 0xe7, 0xcd, 0xbd, 0x8a, 0x7b, 0xf3, 0xe3, 0x4f, 0xa1, 0x9d, 0xcc, 0xa4, 0xef, 0x75, 0xa4, 0x74, 0x54, 0x37, 0x5f, 0x94, 0x51, 0x4d, 0x88, 0xfe, 0xd0, 0x06, 0xfb, 0x82, 0x9f, 0x84, 0x19, 0xff, 0x87, 0xd6, 0x31, 0x5d, 0xa6, 0x8a, 0x1f, 0xf3, 0xa0, 0x93, 0x8e, 0x9a, 0xbb, 0x34, 0x64, 0x01, 0x1c, 0x30, 0x3a, 0xd9, 0x91, 0x99, 0xcf, 0x0c, 0x7c, 0x7a, 0x8b, 0x47, 0x7d, 0xce, 0x82, 0x9e, 0x88, 0x44, 0xf6, 0x25, 0xb1, 0x15, 0xe5, 0xe9, 0xc4, 0xa5, 0x9c, 0xf8, 0xf8, 0x11, 0x3b, 0x68, 0x34, 0x33, 0x6a, 0x2f, 0xd2, 0x68, 0x9b, 0x47, 0x2c, 0xbb, 0x5e, 0x5c, 0xab, 0xe6, 0x74, 0x35, 0x0c, 0x59, 0xb6, 0xc1, 0x7e, 0x17, 0x68, 0x74, 0xfb, 0x42, 0xf8, 0xfc, 0x3d, 0x17, 0x6a, 0x01, 0x7e, 0xdc, 0x61, 0xfd, 0x32, 0x6c, 0x4b, 0x33, 0xc9 } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 128, - { 0x02, 0x7d, 0x14, 0x7e, 0x46, 0x73, 0x05, 0x73, 0x77, 0xfd, 0x1e, 0xa2, 0x01, 0x56, 0x57, 0x72, 0x17, 0x6a, 0x7d, 0xc3, 0x83, 0x58, 0xd3, 0x76, 0x04, 0x56, 0x85, 0xa2, 0xe7, 0x87, 0xc2, 0x3c, 0x15, 0x57, 0x6b, 0xc1, 0x6b, 0x9f, 0x44, 0x44, 0x02, 0xd6, 0xbf, 0xc5, 0xd9, 0x8a, 0x3e, 0x88, 0xea, 0x13, 0xef, 0x67, 0xc3, 0x53, 0xec, 0xa0, 0xc0, 0xdd, 0xba, 0x92, 0x55, 0xbd, 0x7b, 0x8b, 0xb5, 0x0a, 0x64, 0x4a, 0xfd, 0xfd, 0x1d, 0xd5, 0x16, 0x95, 0xb2, 0x52, 0xd2, 0x2e, 0x73, 0x18, 0xd1, 0xb6, 0x68, 0x7a, 0x1c, 0x10, 0xff, 0x75, 0x54, 0x5f, 0x3d, 0xb0, 0xfe, 0x60, 0x2d, 0x5f, 0x2b, 0x7f, 0x29, 0x4e, 0x36, 0x01, 0xea, 0xb7, 0xb9, 0xd1, 0xce, 0xcd, 0x76, 0x7f, 0x64, 0x69, 0x2e, 0x3e, 0x53, 0x6c, 0xa2, 0x84, 0x6c, 0xb0, 0xc2, 0xdd, 0x48, 0x6a, 0x39, 0xfa, 0x75, 0xb1 } -, - /* Prime p */ - 65, - { 0x01, 0x66, 0x01, 0xe9, 0x26, 0xa0, 0xf8, 0xc9, 0xe2, 0x6e, 0xca, 0xb7, 0x69, 0xea, 0x65, 0xa5, 0xe7, 0xc5, 0x2c, 0xc9, 0xe0, 0x80, 0xef, 0x51, 0x94, 0x57, 0xc6, 0x44, 0xda, 0x68, 0x91, 0xc5, 0xa1, 0x04, 0xd3, 0xea, 0x79, 0x55, 0x92, 0x9a, 0x22, 0xe7, 0xc6, 0x8a, 0x7a, 0xf9, 0xfc, 0xad, 0x77, 0x7c, 0x3c, 0xcc, 0x2b, 0x9e, 0x3d, 0x36, 0x50, 0xbc, 0xe4, 0x04, 0x39, 0x9b, 0x7e, 0x59, 0xd1 } -, - /* Prime q */ - 65, - { 0x01, 0x4e, 0xaf, 0xa1, 0xd4, 0xd0, 0x18, 0x4d, 0xa7, 0xe3, 0x1f, 0x87, 0x7d, 0x12, 0x81, 0xdd, 0xda, 0x62, 0x56, 0x64, 0x86, 0x9e, 0x83, 0x79, 0xe6, 0x7a, 0xd3, 0xb7, 0x5e, 0xae, 0x74, 0xa5, 0x80, 0xe9, 0x82, 0x7a, 0xbd, 0x6e, 0xb7, 0xa0, 0x02, 0xcb, 0x54, 0x11, 0xf5, 0x26, 0x67, 0x97, 0x76, 0x8f, 0xb8, 0xe9, 0x5a, 0xe4, 0x0e, 0x3e, 0x8a, 0x01, 0xf3, 0x5f, 0xf8, 0x9e, 0x56, 0xc0, 0x79 } -, - /* p's CRT exponent dP */ - 64, - { 0xe2, 0x47, 0xcc, 0xe5, 0x04, 0x93, 0x9b, 0x8f, 0x0a, 0x36, 0x09, 0x0d, 0xe2, 0x00, 0x93, 0x87, 0x55, 0xe2, 0x44, 0x4b, 0x29, 0x53, 0x9a, 0x7d, 0xa7, 0xa9, 0x02, 0xf6, 0x05, 0x68, 0x35, 0xc0, 0xdb, 0x7b, 0x52, 0x55, 0x94, 0x97, 0xcf, 0xe2, 0xc6, 0x1a, 0x80, 0x86, 0xd0, 0x21, 0x3c, 0x47, 0x2c, 0x78, 0x85, 0x18, 0x00, 0xb1, 0x71, 0xf6, 0x40, 0x1d, 0xe2, 0xe9, 0xc2, 0x75, 0x6f, 0x31 } -, - /* q's CRT exponent dQ */ - 64, - { 0xb1, 0x2f, 0xba, 0x75, 0x78, 0x55, 0xe5, 0x86, 0xe4, 0x6f, 0x64, 0xc3, 0x8a, 0x70, 0xc6, 0x8b, 0x3f, 0x54, 0x8d, 0x93, 0xd7, 0x87, 0xb3, 0x99, 0x99, 0x9d, 0x4c, 0x8f, 0x0b, 0xbd, 0x25, 0x81, 0xc2, 0x1e, 0x19, 0xed, 0x00, 0x18, 0xa6, 0xd5, 0xd3, 0xdf, 0x86, 0x42, 0x4b, 0x3a, 0xbc, 0xad, 0x40, 0x19, 0x9d, 0x31, 0x49, 0x5b, 0x61, 0x30, 0x9f, 0x27, 0xc1, 0xbf, 0x55, 0xd4, 0x87, 0xc1 } -, - /* CRT coefficient qInv */ - 64, - { 0x56, 0x4b, 0x1e, 0x1f, 0xa0, 0x03, 0xbd, 0xa9, 0x1e, 0x89, 0x09, 0x04, 0x25, 0xaa, 0xc0, 0x5b, 0x91, 0xda, 0x9e, 0xe2, 0x50, 0x61, 0xe7, 0x62, 0x8d, 0x5f, 0x51, 0x30, 0x4a, 0x84, 0x99, 0x2f, 0xdc, 0x33, 0x76, 0x2b, 0xd3, 0x78, 0xa5, 0x9f, 0x03, 0x0a, 0x33, 0x4d, 0x53, 0x2b, 0xd0, 0xda, 0xe8, 0xf2, 0x98, 0xea, 0x9e, 0xd8, 0x44, 0x63, 0x6a, 0xd5, 0xfb, 0x8c, 0xbd, 0xc0, 0x3c, 0xad } - -} -, -{{ - "RSASSA-PSS Signature Example 2.1", - /* Message to be signed */ - 61, - { 0xda, 0xba, 0x03, 0x20, 0x66, 0x26, 0x3f, 0xae, 0xdb, 0x65, 0x98, 0x48, 0x11, 0x52, 0x78, 0xa5, 0x2c, 0x44, 0xfa, 0xa3, 0xa7, 0x6f, 0x37, 0x51, 0x5e, 0xd3, 0x36, 0x32, 0x10, 0x72, 0xc4, 0x0a, 0x9d, 0x9b, 0x53, 0xbc, 0x05, 0x01, 0x40, 0x78, 0xad, 0xf5, 0x20, 0x87, 0x51, 0x46, 0xaa, 0xe7, 0x0f, 0xf0, 0x60, 0x22, 0x6d, 0xcb, 0x7b, 0x1f, 0x1f, 0xc2, 0x7e, 0x93, 0x60 } -, - /* Salt */ - 20, - { 0x57, 0xbf, 0x16, 0x0b, 0xcb, 0x02, 0xbb, 0x1d, 0xc7, 0x28, 0x0c, 0xf0, 0x45, 0x85, 0x30, 0xb7, 0xd2, 0x83, 0x2f, 0xf7 } -, - /* Signature */ - 129, - { 0x01, 0x4c, 0x5b, 0xa5, 0x33, 0x83, 0x28, 0xcc, 0xc6, 0xe7, 0xa9, 0x0b, 0xf1, 0xc0, 0xab, 0x3f, 0xd6, 0x06, 0xff, 0x47, 0x96, 0xd3, 0xc1, 0x2e, 0x4b, 0x63, 0x9e, 0xd9, 0x13, 0x6a, 0x5f, 0xec, 0x6c, 0x16, 0xd8, 0x88, 0x4b, 0xdd, 0x99, 0xcf, 0xdc, 0x52, 0x14, 0x56, 0xb0, 0x74, 0x2b, 0x73, 0x68, 0x68, 0xcf, 0x90, 0xde, 0x09, 0x9a, 0xdb, 0x8d, 0x5f, 0xfd, 0x1d, 0xef, 0xf3, 0x9b, 0xa4, 0x00, 0x7a, 0xb7, 0x46, 0xce, 0xfd, 0xb2, 0x2d, 0x7d, 0xf0, 0xe2, 0x25, 0xf5, 0x46, 0x27, 0xdc, 0x65, 0x46, 0x61, 0x31, 0x72, 0x1b, 0x90, 0xaf, 0x44, 0x53, 0x63, 0xa8, 0x35, 0x8b, 0x9f, 0x60, 0x76, 0x42, 0xf7, 0x8f, 0xab, 0x0a, 0xb0, 0xf4, 0x3b, 0x71, 0x68, 0xd6, 0x4b, 0xae, 0x70, 0xd8, 0x82, 0x78, 0x48, 0xd8, 0xef, 0x1e, 0x42, 0x1c, 0x57, 0x54, 0xdd, 0xf4, 0x2c, 0x25, 0x89, 0xb5, 0xb3 } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSASSA-PSS Signature Example 2.2", - /* Message to be signed */ - 234, - { 0xe4, 0xf8, 0x60, 0x1a, 0x8a, 0x6d, 0xa1, 0xbe, 0x34, 0x44, 0x7c, 0x09, 0x59, 0xc0, 0x58, 0x57, 0x0c, 0x36, 0x68, 0xcf, 0xd5, 0x1d, 0xd5, 0xf9, 0xcc, 0xd6, 0xad, 0x44, 0x11, 0xfe, 0x82, 0x13, 0x48, 0x6d, 0x78, 0xa6, 0xc4, 0x9f, 0x93, 0xef, 0xc2, 0xca, 0x22, 0x88, 0xce, 0xbc, 0x2b, 0x9b, 0x60, 0xbd, 0x04, 0xb1, 0xe2, 0x20, 0xd8, 0x6e, 0x3d, 0x48, 0x48, 0xd7, 0x09, 0xd0, 0x32, 0xd1, 0xe8, 0xc6, 0xa0, 0x70, 0xc6, 0xaf, 0x9a, 0x49, 0x9f, 0xcf, 0x95, 0x35, 0x4b, 0x14, 0xba, 0x61, 0x27, 0xc7, 0x39, 0xde, 0x1b, 0xb0, 0xfd, 0x16, 0x43, 0x1e, 0x46, 0x93, 0x8a, 0xec, 0x0c, 0xf8, 0xad, 0x9e, 0xb7, 0x2e, 0x83, 0x2a, 0x70, 0x35, 0xde, 0x9b, 0x78, 0x07, 0xbd, 0xc0, 0xed, 0x8b, 0x68, 0xeb, 0x0f, 0x5a, 0xc2, 0x21, 0x6b, 0xe4, 0x0c, 0xe9, 0x20, 0xc0, 0xdb, 0x0e, 0xdd, 0xd3, 0x86, 0x0e, 0xd7, 0x88, 0xef, 0xac, 0xca, 0xca, 0x50, 0x2d, 0x8f, 0x2b, 0xd6, 0xd1, 0xa7, 0xc1, 0xf4, 0x1f, 0xf4, 0x6f, 0x16, 0x81, 0xc8, 0xf1, 0xf8, 0x18, 0xe9, 0xc4, 0xf6, 0xd9, 0x1a, 0x0c, 0x78, 0x03, 0xcc, 0xc6, 0x3d, 0x76, 0xa6, 0x54, 0x4d, 0x84, 0x3e, 0x08, 0x4e, 0x36, 0x3b, 0x8a, 0xcc, 0x55, 0xaa, 0x53, 0x17, 0x33, 0xed, 0xb5, 0xde, 0xe5, 0xb5, 0x19, 0x6e, 0x9f, 0x03, 0xe8, 0xb7, 0x31, 0xb3, 0x77, 0x64, 0x28, 0xd9, 0xe4, 0x57, 0xfe, 0x3f, 0xbc, 0xb3, 0xdb, 0x72, 0x74, 0x44, 0x2d, 0x78, 0x58, 0x90, 0xe9, 0xcb, 0x08, 0x54, 0xb6, 0x44, 0x4d, 0xac, 0xe7, 0x91, 0xd7, 0x27, 0x3d, 0xe1, 0x88, 0x97, 0x19, 0x33, 0x8a, 0x77, 0xfe } -, - /* Salt */ - 20, - { 0x7f, 0x6d, 0xd3, 0x59, 0xe6, 0x04, 0xe6, 0x08, 0x70, 0xe8, 0x98, 0xe4, 0x7b, 0x19, 0xbf, 0x2e, 0x5a, 0x7b, 0x2a, 0x90 } -, - /* Signature */ - 129, - { 0x01, 0x09, 0x91, 0x65, 0x6c, 0xca, 0x18, 0x2b, 0x7f, 0x29, 0xd2, 0xdb, 0xc0, 0x07, 0xe7, 0xae, 0x0f, 0xec, 0x15, 0x8e, 0xb6, 0x75, 0x9c, 0xb9, 0xc4, 0x5c, 0x5f, 0xf8, 0x7c, 0x76, 0x35, 0xdd, 0x46, 0xd1, 0x50, 0x88, 0x2f, 0x4d, 0xe1, 0xe9, 0xae, 0x65, 0xe7, 0xf7, 0xd9, 0x01, 0x8f, 0x68, 0x36, 0x95, 0x4a, 0x47, 0xc0, 0xa8, 0x1a, 0x8a, 0x6b, 0x6f, 0x83, 0xf2, 0x94, 0x4d, 0x60, 0x81, 0xb1, 0xaa, 0x7c, 0x75, 0x9b, 0x25, 0x4b, 0x2c, 0x34, 0xb6, 0x91, 0xda, 0x67, 0xcc, 0x02, 0x26, 0xe2, 0x0b, 0x2f, 0x18, 0xb4, 0x22, 0x12, 0x76, 0x1d, 0xcd, 0x4b, 0x90, 0x8a, 0x62, 0xb3, 0x71, 0xb5, 0x91, 0x8c, 0x57, 0x42, 0xaf, 0x4b, 0x53, 0x7e, 0x29, 0x69, 0x17, 0x67, 0x4f, 0xb9, 0x14, 0x19, 0x47, 0x61, 0x62, 0x1c, 0xc1, 0x9a, 0x41, 0xf6, 0xfb, 0x95, 0x3f, 0xbc, 0xbb, 0x64, 0x9d, 0xea } - -} -, -{ - "RSASSA-PSS Signature Example 2.3", - /* Message to be signed */ - 102, - { 0x52, 0xa1, 0xd9, 0x6c, 0x8a, 0xc3, 0x9e, 0x41, 0xe4, 0x55, 0x80, 0x98, 0x01, 0xb9, 0x27, 0xa5, 0xb4, 0x45, 0xc1, 0x0d, 0x90, 0x2a, 0x0d, 0xcd, 0x38, 0x50, 0xd2, 0x2a, 0x66, 0xd2, 0xbb, 0x07, 0x03, 0xe6, 0x7d, 0x58, 0x67, 0x11, 0x45, 0x95, 0xaa, 0xbf, 0x5a, 0x7a, 0xeb, 0x5a, 0x8f, 0x87, 0x03, 0x4b, 0xbb, 0x30, 0xe1, 0x3c, 0xfd, 0x48, 0x17, 0xa9, 0xbe, 0x76, 0x23, 0x00, 0x23, 0x60, 0x6d, 0x02, 0x86, 0xa3, 0xfa, 0xf8, 0xa4, 0xd2, 0x2b, 0x72, 0x8e, 0xc5, 0x18, 0x07, 0x9f, 0x9e, 0x64, 0x52, 0x6e, 0x3a, 0x0c, 0xc7, 0x94, 0x1a, 0xa3, 0x38, 0xc4, 0x37, 0x99, 0x7c, 0x68, 0x0c, 0xca, 0xc6, 0x7c, 0x66, 0xbf, 0xa1 } -, - /* Salt */ - 20, - { 0xfc, 0xa8, 0x62, 0x06, 0x8b, 0xce, 0x22, 0x46, 0x72, 0x4b, 0x70, 0x8a, 0x05, 0x19, 0xda, 0x17, 0xe6, 0x48, 0x68, 0x8c } -, - /* Signature */ - 129, - { 0x00, 0x7f, 0x00, 0x30, 0x01, 0x8f, 0x53, 0xcd, 0xc7, 0x1f, 0x23, 0xd0, 0x36, 0x59, 0xfd, 0xe5, 0x4d, 0x42, 0x41, 0xf7, 0x58, 0xa7, 0x50, 0xb4, 0x2f, 0x18, 0x5f, 0x87, 0x57, 0x85, 0x20, 0xc3, 0x07, 0x42, 0xaf, 0xd8, 0x43, 0x59, 0xb6, 0xe6, 0xe8, 0xd3, 0xed, 0x95, 0x9d, 0xc6, 0xfe, 0x48, 0x6b, 0xed, 0xc8, 0xe2, 0xcf, 0x00, 0x1f, 0x63, 0xa7, 0xab, 0xe1, 0x62, 0x56, 0xa1, 0xb8, 0x4d, 0xf0, 0xd2, 0x49, 0xfc, 0x05, 0xd3, 0x19, 0x4c, 0xe5, 0xf0, 0x91, 0x27, 0x42, 0xdb, 0xbf, 0x80, 0xdd, 0x17, 0x4f, 0x6c, 0x51, 0xf6, 0xba, 0xd7, 0xf1, 0x6c, 0xf3, 0x36, 0x4e, 0xba, 0x09, 0x5a, 0x06, 0x26, 0x7d, 0xc3, 0x79, 0x38, 0x03, 0xac, 0x75, 0x26, 0xae, 0xbe, 0x0a, 0x47, 0x5d, 0x38, 0xb8, 0xc2, 0x24, 0x7a, 0xb5, 0x1c, 0x48, 0x98, 0xdf, 0x70, 0x47, 0xdc, 0x6a, 0xdf, 0x52, 0xc6, 0xc4 } - -} -, -{ - "RSASSA-PSS Signature Example 2.4", - /* Message to be signed */ - 30, - { 0xa7, 0x18, 0x2c, 0x83, 0xac, 0x18, 0xbe, 0x65, 0x70, 0xa1, 0x06, 0xaa, 0x9d, 0x5c, 0x4e, 0x3d, 0xbb, 0xd4, 0xaf, 0xae, 0xb0, 0xc6, 0x0c, 0x4a, 0x23, 0xe1, 0x96, 0x9d, 0x79, 0xff } -, - /* Salt */ - 20, - { 0x80, 0x70, 0xef, 0x2d, 0xe9, 0x45, 0xc0, 0x23, 0x87, 0x68, 0x4b, 0xa0, 0xd3, 0x30, 0x96, 0x73, 0x22, 0x35, 0xd4, 0x40 } -, - /* Signature */ - 129, - { 0x00, 0x9c, 0xd2, 0xf4, 0xed, 0xbe, 0x23, 0xe1, 0x23, 0x46, 0xae, 0x8c, 0x76, 0xdd, 0x9a, 0xd3, 0x23, 0x0a, 0x62, 0x07, 0x61, 0x41, 0xf1, 0x6c, 0x15, 0x2b, 0xa1, 0x85, 0x13, 0xa4, 0x8e, 0xf6, 0xf0, 0x10, 0xe0, 0xe3, 0x7f, 0xd3, 0xdf, 0x10, 0xa1, 0xec, 0x62, 0x9a, 0x0c, 0xb5, 0xa3, 0xb5, 0xd2, 0x89, 0x30, 0x07, 0x29, 0x8c, 0x30, 0x93, 0x6a, 0x95, 0x90, 0x3b, 0x6b, 0xa8, 0x55, 0x55, 0xd9, 0xec, 0x36, 0x73, 0xa0, 0x61, 0x08, 0xfd, 0x62, 0xa2, 0xfd, 0xa5, 0x6d, 0x1c, 0xe2, 0xe8, 0x5c, 0x4d, 0xb6, 0xb2, 0x4a, 0x81, 0xca, 0x3b, 0x49, 0x6c, 0x36, 0xd4, 0xfd, 0x06, 0xeb, 0x7c, 0x91, 0x66, 0xd8, 0xe9, 0x48, 0x77, 0xc4, 0x2b, 0xea, 0x62, 0x2b, 0x3b, 0xfe, 0x92, 0x51, 0xfd, 0xc2, 0x1d, 0x8d, 0x53, 0x71, 0xba, 0xda, 0xd7, 0x8a, 0x48, 0x82, 0x14, 0x79, 0x63, 0x35, 0xb4, 0x0b } - -} -, -{ - "RSASSA-PSS Signature Example 2.5", - /* Message to be signed */ - 56, - { 0x86, 0xa8, 0x3d, 0x4a, 0x72, 0xee, 0x93, 0x2a, 0x4f, 0x56, 0x30, 0xaf, 0x65, 0x79, 0xa3, 0x86, 0xb7, 0x8f, 0xe8, 0x89, 0x99, 0xe0, 0xab, 0xd2, 0xd4, 0x90, 0x34, 0xa4, 0xbf, 0xc8, 0x54, 0xdd, 0x94, 0xf1, 0x09, 0x4e, 0x2e, 0x8c, 0xd7, 0xa1, 0x79, 0xd1, 0x95, 0x88, 0xe4, 0xae, 0xfc, 0x1b, 0x1b, 0xd2, 0x5e, 0x95, 0xe3, 0xdd, 0x46, 0x1f } -, - /* Salt */ - 20, - { 0x17, 0x63, 0x9a, 0x4e, 0x88, 0xd7, 0x22, 0xc4, 0xfc, 0xa2, 0x4d, 0x07, 0x9a, 0x8b, 0x29, 0xc3, 0x24, 0x33, 0xb0, 0xc9 } -, - /* Signature */ - 129, - { 0x00, 0xec, 0x43, 0x08, 0x24, 0x93, 0x1e, 0xbd, 0x3b, 0xaa, 0x43, 0x03, 0x4d, 0xae, 0x98, 0xba, 0x64, 0x6b, 0x8c, 0x36, 0x01, 0x3d, 0x16, 0x71, 0xc3, 0xcf, 0x1c, 0xf8, 0x26, 0x0c, 0x37, 0x4b, 0x19, 0xf8, 0xe1, 0xcc, 0x8d, 0x96, 0x50, 0x12, 0x40, 0x5e, 0x7e, 0x9b, 0xf7, 0x37, 0x86, 0x12, 0xdf, 0xcc, 0x85, 0xfc, 0xe1, 0x2c, 0xda, 0x11, 0xf9, 0x50, 0xbd, 0x0b, 0xa8, 0x87, 0x67, 0x40, 0x43, 0x6c, 0x1d, 0x25, 0x95, 0xa6, 0x4a, 0x1b, 0x32, 0xef, 0xcf, 0xb7, 0x4a, 0x21, 0xc8, 0x73, 0xb3, 0xcc, 0x33, 0xaa, 0xf4, 0xe3, 0xdc, 0x39, 0x53, 0xde, 0x67, 0xf0, 0x67, 0x4c, 0x04, 0x53, 0xb4, 0xfd, 0x9f, 0x60, 0x44, 0x06, 0xd4, 0x41, 0xb8, 0x16, 0x09, 0x8c, 0xb1, 0x06, 0xfe, 0x34, 0x72, 0xbc, 0x25, 0x1f, 0x81, 0x5f, 0x59, 0xdb, 0x2e, 0x43, 0x78, 0xa3, 0xad, 0xdc, 0x18, 0x1e, 0xcf } - -} -, -{ - "RSASSA-PSS Signature Example 2.6", - /* Message to be signed */ - 26, - { 0x04, 0x9f, 0x91, 0x54, 0xd8, 0x71, 0xac, 0x4a, 0x7c, 0x7a, 0xb4, 0x53, 0x25, 0xba, 0x75, 0x45, 0xa1, 0xed, 0x08, 0xf7, 0x05, 0x25, 0xb2, 0x66, 0x7c, 0xf1 } -, - /* Salt */ - 20, - { 0x37, 0x81, 0x0d, 0xef, 0x10, 0x55, 0xed, 0x92, 0x2b, 0x06, 0x3d, 0xf7, 0x98, 0xde, 0x5d, 0x0a, 0xab, 0xf8, 0x86, 0xee } -, - /* Signature */ - 129, - { 0x00, 0x47, 0x5b, 0x16, 0x48, 0xf8, 0x14, 0xa8, 0xdc, 0x0a, 0xbd, 0xc3, 0x7b, 0x55, 0x27, 0xf5, 0x43, 0xb6, 0x66, 0xbb, 0x6e, 0x39, 0xd3, 0x0e, 0x5b, 0x49, 0xd3, 0xb8, 0x76, 0xdc, 0xcc, 0x58, 0xea, 0xc1, 0x4e, 0x32, 0xa2, 0xd5, 0x5c, 0x26, 0x16, 0x01, 0x44, 0x56, 0xad, 0x2f, 0x24, 0x6f, 0xc8, 0xe3, 0xd5, 0x60, 0xda, 0x3d, 0xdf, 0x37, 0x9a, 0x1c, 0x0b, 0xd2, 0x00, 0xf1, 0x02, 0x21, 0xdf, 0x07, 0x8c, 0x21, 0x9a, 0x15, 0x1b, 0xc8, 0xd4, 0xec, 0x9d, 0x2f, 0xc2, 0x56, 0x44, 0x67, 0x81, 0x10, 0x14, 0xef, 0x15, 0xd8, 0xea, 0x01, 0xc2, 0xeb, 0xbf, 0xf8, 0xc2, 0xc8, 0xef, 0xab, 0x38, 0x09, 0x6e, 0x55, 0xfc, 0xbe, 0x32, 0x85, 0xc7, 0xaa, 0x55, 0x88, 0x51, 0x25, 0x4f, 0xaf, 0xfa, 0x92, 0xc1, 0xc7, 0x2b, 0x78, 0x75, 0x86, 0x63, 0xef, 0x45, 0x82, 0x84, 0x31, 0x39, 0xd7, 0xa6 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 3: A 1026-bit RSA Key Pair", -{ - /* RSA modulus n */ - 129, - { 0x02, 0xf2, 0x46, 0xef, 0x45, 0x1e, 0xd3, 0xee, 0xbb, 0x9a, 0x31, 0x02, 0x00, 0xcc, 0x25, 0x85, 0x9c, 0x04, 0x8e, 0x4b, 0xe7, 0x98, 0x30, 0x29, 0x91, 0x11, 0x2e, 0xb6, 0x8c, 0xe6, 0xdb, 0x67, 0x4e, 0x28, 0x0d, 0xa2, 0x1f, 0xed, 0xed, 0x1a, 0xe7, 0x48, 0x80, 0xca, 0x52, 0x2b, 0x18, 0xdb, 0x24, 0x93, 0x85, 0x01, 0x28, 0x27, 0xc5, 0x15, 0xf0, 0xe4, 0x66, 0xa1, 0xff, 0xa6, 0x91, 0xd9, 0x81, 0x70, 0x57, 0x4e, 0x9d, 0x0e, 0xad, 0xb0, 0x87, 0x58, 0x6c, 0xa4, 0x89, 0x33, 0xda, 0x3c, 0xc9, 0x53, 0xd9, 0x5b, 0xd0, 0xed, 0x50, 0xde, 0x10, 0xdd, 0xcb, 0x67, 0x36, 0x10, 0x7d, 0x6c, 0x83, 0x1c, 0x7f, 0x66, 0x3e, 0x83, 0x3c, 0xa4, 0xc0, 0x97, 0xe7, 0x00, 0xce, 0x0f, 0xb9, 0x45, 0xf8, 0x8f, 0xb8, 0x5f, 0xe8, 0xe5, 0xa7, 0x73, 0x17, 0x25, 0x65, 0xb9, 0x14, 0xa4, 0x71, 0xa4, 0x43 } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 128, - { 0x65, 0x14, 0x51, 0x73, 0x3b, 0x56, 0xde, 0x5a, 0xc0, 0xa6, 0x89, 0xa4, 0xae, 0xb6, 0xe6, 0x89, 0x4a, 0x69, 0x01, 0x4e, 0x07, 0x6c, 0x88, 0xdd, 0x7a, 0x66, 0x7e, 0xab, 0x32, 0x32, 0xbb, 0xcc, 0xd2, 0xfc, 0x44, 0xba, 0x2f, 0xa9, 0xc3, 0x1d, 0xb4, 0x6f, 0x21, 0xed, 0xd1, 0xfd, 0xb2, 0x3c, 0x5c, 0x12, 0x8a, 0x5d, 0xa5, 0xba, 0xb9, 0x1e, 0x7f, 0x95, 0x2b, 0x67, 0x75, 0x9c, 0x7c, 0xff, 0x70, 0x54, 0x15, 0xac, 0x9f, 0xa0, 0x90, 0x7c, 0x7c, 0xa6, 0x17, 0x8f, 0x66, 0x8f, 0xb9, 0x48, 0xd8, 0x69, 0xda, 0x4c, 0xc3, 0xb7, 0x35, 0x6f, 0x40, 0x08, 0xdf, 0xd5, 0x44, 0x9d, 0x32, 0xee, 0x02, 0xd9, 0xa4, 0x77, 0xeb, 0x69, 0xfc, 0x29, 0x26, 0x6e, 0x5d, 0x90, 0x70, 0x51, 0x23, 0x75, 0xa5, 0x0f, 0xbb, 0xcc, 0x27, 0xe2, 0x38, 0xad, 0x98, 0x42, 0x5f, 0x6e, 0xbb, 0xf8, 0x89, 0x91 } -, - /* Prime p */ - 65, - { 0x01, 0xbd, 0x36, 0xe1, 0x8e, 0xce, 0x4b, 0x0f, 0xdb, 0x2e, 0x9c, 0x9d, 0x54, 0x8b, 0xd1, 0xa7, 0xd6, 0xe2, 0xc2, 0x1c, 0x6f, 0xdc, 0x35, 0x07, 0x4a, 0x1d, 0x05, 0xb1, 0xc6, 0xc8, 0xb3, 0xd5, 0x58, 0xea, 0x26, 0x39, 0xc9, 0xa9, 0xa4, 0x21, 0x68, 0x01, 0x69, 0x31, 0x72, 0x52, 0x55, 0x8b, 0xd1, 0x48, 0xad, 0x21, 0x5a, 0xac, 0x55, 0x0e, 0x2d, 0xcf, 0x12, 0xa8, 0x2d, 0x0e, 0xbf, 0xe8, 0x53 } -, - /* Prime q */ - 65, - { 0x01, 0xb1, 0xb6, 0x56, 0xad, 0x86, 0xd8, 0xe1, 0x9d, 0x5d, 0xc8, 0x62, 0x92, 0xb3, 0xa1, 0x92, 0xfd, 0xf6, 0xe0, 0xdd, 0x37, 0x87, 0x7b, 0xad, 0x14, 0x82, 0x2f, 0xa0, 0x01, 0x90, 0xca, 0xb2, 0x65, 0xf9, 0x0d, 0x3f, 0x02, 0x05, 0x7b, 0x6f, 0x54, 0xd6, 0xec, 0xb1, 0x44, 0x91, 0xe5, 0xad, 0xea, 0xce, 0xbc, 0x48, 0xbf, 0x0e, 0xbd, 0x2a, 0x2a, 0xd2, 0x6d, 0x40, 0x2e, 0x54, 0xf6, 0x16, 0x51 } -, - /* p's CRT exponent dP */ - 64, - { 0x1f, 0x27, 0x79, 0xfd, 0x2e, 0x3e, 0x5e, 0x6b, 0xae, 0x05, 0x53, 0x95, 0x18, 0xfb, 0xa0, 0xcd, 0x0e, 0xad, 0x1a, 0xa4, 0x51, 0x3a, 0x7c, 0xba, 0x18, 0xf1, 0xcf, 0x10, 0xe3, 0xf6, 0x81, 0x95, 0x69, 0x3d, 0x27, 0x8a, 0x0f, 0x0e, 0xe7, 0x2f, 0x89, 0xf9, 0xbc, 0x76, 0x0d, 0x80, 0xe2, 0xf9, 0xd0, 0x26, 0x1d, 0x51, 0x65, 0x01, 0xc6, 0xae, 0x39, 0xf1, 0x4a, 0x47, 0x6c, 0xe2, 0xcc, 0xf5 } -, - /* q's CRT exponent dQ */ - 65, - { 0x01, 0x1a, 0x0d, 0x36, 0x79, 0x4b, 0x04, 0xa8, 0x54, 0xaa, 0xb4, 0xb2, 0x46, 0x2d, 0x43, 0x9a, 0x50, 0x46, 0xc9, 0x1d, 0x94, 0x0b, 0x2b, 0xc6, 0xf7, 0x5b, 0x62, 0x95, 0x6f, 0xef, 0x35, 0xa2, 0xa6, 0xe6, 0x3c, 0x53, 0x09, 0x81, 0x7f, 0x30, 0x7b, 0xbf, 0xf9, 0xd5, 0x9e, 0x7e, 0x33, 0x1b, 0xd3, 0x63, 0xf6, 0xd6, 0x68, 0x49, 0xb1, 0x83, 0x46, 0xad, 0xea, 0x16, 0x9f, 0x0a, 0xe9, 0xae, 0xc1 } -, - /* CRT coefficient qInv */ - 64, - { 0x0b, 0x30, 0xf0, 0xec, 0xf5, 0x58, 0x75, 0x2f, 0xb3, 0xa6, 0xce, 0x4b, 0xa2, 0xb8, 0xc6, 0x75, 0xf6, 0x59, 0xeb, 0xa6, 0xc3, 0x76, 0x58, 0x5a, 0x1b, 0x39, 0x71, 0x2d, 0x03, 0x8a, 0xe3, 0xd2, 0xb4, 0x6f, 0xcb, 0x41, 0x8a, 0xe1, 0x5d, 0x09, 0x05, 0xda, 0x64, 0x40, 0xe1, 0x51, 0x3a, 0x30, 0xb9, 0xb7, 0xd6, 0x66, 0x8f, 0xbc, 0x5e, 0x88, 0xe5, 0xab, 0x7a, 0x17, 0x5e, 0x73, 0xba, 0x35 } - -} -, -{{ - "RSASSA-PSS Signature Example 3.1", - /* Message to be signed */ - 30, - { 0x59, 0x4b, 0x37, 0x33, 0x3b, 0xbb, 0x2c, 0x84, 0x52, 0x4a, 0x87, 0xc1, 0xa0, 0x1f, 0x75, 0xfc, 0xec, 0x0e, 0x32, 0x56, 0xf1, 0x08, 0xe3, 0x8d, 0xca, 0x36, 0xd7, 0x0d, 0x00, 0x57 } -, - /* Salt */ - 20, - { 0xf3, 0x1a, 0xd6, 0xc8, 0xcf, 0x89, 0xdf, 0x78, 0xed, 0x77, 0xfe, 0xac, 0xbc, 0xc2, 0xf8, 0xb0, 0xa8, 0xe4, 0xcf, 0xaa } -, - /* Signature */ - 129, - { 0x00, 0x88, 0xb1, 0x35, 0xfb, 0x17, 0x94, 0xb6, 0xb9, 0x6c, 0x4a, 0x3e, 0x67, 0x81, 0x97, 0xf8, 0xca, 0xc5, 0x2b, 0x64, 0xb2, 0xfe, 0x90, 0x7d, 0x6f, 0x27, 0xde, 0x76, 0x11, 0x24, 0x96, 0x4a, 0x99, 0xa0, 0x1a, 0x88, 0x27, 0x40, 0xec, 0xfa, 0xed, 0x6c, 0x01, 0xa4, 0x74, 0x64, 0xbb, 0x05, 0x18, 0x23, 0x13, 0xc0, 0x13, 0x38, 0xa8, 0xcd, 0x09, 0x72, 0x14, 0xcd, 0x68, 0xca, 0x10, 0x3b, 0xd5, 0x7d, 0x3b, 0xc9, 0xe8, 0x16, 0x21, 0x3e, 0x61, 0xd7, 0x84, 0xf1, 0x82, 0x46, 0x7a, 0xbf, 0x8a, 0x01, 0xcf, 0x25, 0x3e, 0x99, 0xa1, 0x56, 0xea, 0xa8, 0xe3, 0xe1, 0xf9, 0x0e, 0x3c, 0x6e, 0x4e, 0x3a, 0xa2, 0xd8, 0x3e, 0xd0, 0x34, 0x5b, 0x89, 0xfa, 0xfc, 0x9c, 0x26, 0x07, 0x7c, 0x14, 0xb6, 0xac, 0x51, 0x45, 0x4f, 0xa2, 0x6e, 0x44, 0x6e, 0x3a, 0x2f, 0x15, 0x3b, 0x2b, 0x16, 0x79, 0x7f } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSASSA-PSS Signature Example 3.2", - /* Message to be signed */ - 29, - { 0x8b, 0x76, 0x95, 0x28, 0x88, 0x4a, 0x0d, 0x1f, 0xfd, 0x09, 0x0c, 0xf1, 0x02, 0x99, 0x3e, 0x79, 0x6d, 0xad, 0xcf, 0xbd, 0xdd, 0x38, 0xe4, 0x4f, 0xf6, 0x32, 0x4c, 0xa4, 0x51 } -, - /* Salt */ - 20, - { 0xfc, 0xf9, 0xf0, 0xe1, 0xf1, 0x99, 0xa3, 0xd1, 0xd0, 0xda, 0x68, 0x1c, 0x5b, 0x86, 0x06, 0xfc, 0x64, 0x29, 0x39, 0xf7 } -, - /* Signature */ - 129, - { 0x02, 0xa5, 0xf0, 0xa8, 0x58, 0xa0, 0x86, 0x4a, 0x4f, 0x65, 0x01, 0x7a, 0x7d, 0x69, 0x45, 0x4f, 0x3f, 0x97, 0x3a, 0x29, 0x99, 0x83, 0x9b, 0x7b, 0xbc, 0x48, 0xbf, 0x78, 0x64, 0x11, 0x69, 0x17, 0x95, 0x56, 0xf5, 0x95, 0xfa, 0x41, 0xf6, 0xff, 0x18, 0xe2, 0x86, 0xc2, 0x78, 0x30, 0x79, 0xbc, 0x09, 0x10, 0xee, 0x9c, 0xc3, 0x4f, 0x49, 0xba, 0x68, 0x11, 0x24, 0xf9, 0x23, 0xdf, 0xa8, 0x8f, 0x42, 0x61, 0x41, 0xa3, 0x68, 0xa5, 0xf5, 0xa9, 0x30, 0xc6, 0x28, 0xc2, 0xc3, 0xc2, 0x00, 0xe1, 0x8a, 0x76, 0x44, 0x72, 0x1a, 0x0c, 0xbe, 0xc6, 0xdd, 0x3f, 0x62, 0x79, 0xbd, 0xe3, 0xe8, 0xf2, 0xbe, 0x5e, 0x2d, 0x4e, 0xe5, 0x6f, 0x97, 0xe7, 0xce, 0xaf, 0x33, 0x05, 0x4b, 0xe7, 0x04, 0x2b, 0xd9, 0x1a, 0x63, 0xbb, 0x09, 0xf8, 0x97, 0xbd, 0x41, 0xe8, 0x11, 0x97, 0xde, 0xe9, 0x9b, 0x11, 0xaf } - -} -, -{ - "RSASSA-PSS Signature Example 3.3", - /* Message to be signed */ - 167, - { 0x1a, 0xbd, 0xba, 0x48, 0x9c, 0x5a, 0xda, 0x2f, 0x99, 0x5e, 0xd1, 0x6f, 0x19, 0xd5, 0xa9, 0x4d, 0x9e, 0x6e, 0xc3, 0x4a, 0x8d, 0x84, 0xf8, 0x45, 0x57, 0xd2, 0x6e, 0x5e, 0xf9, 0xb0, 0x2b, 0x22, 0x88, 0x7e, 0x3f, 0x9a, 0x4b, 0x69, 0x0a, 0xd1, 0x14, 0x92, 0x09, 0xc2, 0x0c, 0x61, 0x43, 0x1f, 0x0c, 0x01, 0x7c, 0x36, 0xc2, 0x65, 0x7b, 0x35, 0xd7, 0xb0, 0x7d, 0x3f, 0x5a, 0xd8, 0x70, 0x85, 0x07, 0xa9, 0xc1, 0xb8, 0x31, 0xdf, 0x83, 0x5a, 0x56, 0xf8, 0x31, 0x07, 0x18, 0x14, 0xea, 0x5d, 0x3d, 0x8d, 0x8f, 0x6a, 0xde, 0x40, 0xcb, 0xa3, 0x8b, 0x42, 0xdb, 0x7a, 0x2d, 0x3d, 0x7a, 0x29, 0xc8, 0xf0, 0xa7, 0x9a, 0x78, 0x38, 0xcf, 0x58, 0xa9, 0x75, 0x7f, 0xa2, 0xfe, 0x4c, 0x40, 0xdf, 0x9b, 0xaa, 0x19, 0x3b, 0xfc, 0x6f, 0x92, 0xb1, 0x23, 0xad, 0x57, 0xb0, 0x7a, 0xce, 0x3e, 0x6a, 0xc0, 0x68, 0xc9, 0xf1, 0x06, 0xaf, 0xd9, 0xee, 0xb0, 0x3b, 0x4f, 0x37, 0xc2, 0x5d, 0xbf, 0xbc, 0xfb, 0x30, 0x71, 0xf6, 0xf9, 0x77, 0x17, 0x66, 0xd0, 0x72, 0xf3, 0xbb, 0x07, 0x0a, 0xf6, 0x60, 0x55, 0x32, 0x97, 0x3a, 0xe2, 0x50, 0x51 } -, - /* Salt */ - 20, - { 0x98, 0x6e, 0x7c, 0x43, 0xdb, 0xb6, 0x71, 0xbd, 0x41, 0xb9, 0xa7, 0xf4, 0xb6, 0xaf, 0xc8, 0x0e, 0x80, 0x5f, 0x24, 0x23 } -, - /* Signature */ - 129, - { 0x02, 0x44, 0xbc, 0xd1, 0xc8, 0xc1, 0x69, 0x55, 0x73, 0x6c, 0x80, 0x3b, 0xe4, 0x01, 0x27, 0x2e, 0x18, 0xcb, 0x99, 0x08, 0x11, 0xb1, 0x4f, 0x72, 0xdb, 0x96, 0x41, 0x24, 0xd5, 0xfa, 0x76, 0x06, 0x49, 0xcb, 0xb5, 0x7a, 0xfb, 0x87, 0x55, 0xdb, 0xb6, 0x2b, 0xf5, 0x1f, 0x46, 0x6c, 0xf2, 0x3a, 0x0a, 0x16, 0x07, 0x57, 0x6e, 0x98, 0x3d, 0x77, 0x8f, 0xce, 0xff, 0xa9, 0x2d, 0xf7, 0x54, 0x8a, 0xea, 0x8e, 0xa4, 0xec, 0xad, 0x2c, 0x29, 0xdd, 0x9f, 0x95, 0xbc, 0x07, 0xfe, 0x91, 0xec, 0xf8, 0xbe, 0xe2, 0x55, 0xbf, 0xe8, 0x76, 0x2f, 0xd7, 0x69, 0x0a, 0xa9, 0xbf, 0xa4, 0xfa, 0x08, 0x49, 0xef, 0x72, 0x8c, 0x2c, 0x42, 0xc4, 0x53, 0x23, 0x64, 0x52, 0x2d, 0xf2, 0xab, 0x7f, 0x9f, 0x8a, 0x03, 0xb6, 0x3f, 0x7a, 0x49, 0x91, 0x75, 0x82, 0x86, 0x68, 0xf5, 0xef, 0x5a, 0x29, 0xe3, 0x80, 0x2c } - -} -, -{ - "RSASSA-PSS Signature Example 3.4", - /* Message to be signed */ - 73, - { 0x8f, 0xb4, 0x31, 0xf5, 0xee, 0x79, 0x2b, 0x6c, 0x2a, 0xc7, 0xdb, 0x53, 0xcc, 0x42, 0x86, 0x55, 0xae, 0xb3, 0x2d, 0x03, 0xf4, 0xe8, 0x89, 0xc5, 0xc2, 0x5d, 0xe6, 0x83, 0xc4, 0x61, 0xb5, 0x3a, 0xcf, 0x89, 0xf9, 0xf8, 0xd3, 0xaa, 0xbd, 0xf6, 0xb9, 0xf0, 0xc2, 0xa1, 0xde, 0x12, 0xe1, 0x5b, 0x49, 0xed, 0xb3, 0x91, 0x9a, 0x65, 0x2f, 0xe9, 0x49, 0x1c, 0x25, 0xa7, 0xfc, 0xe1, 0xf7, 0x22, 0xc2, 0x54, 0x36, 0x08, 0xb6, 0x9d, 0xc3, 0x75, 0xec } -, - /* Salt */ - 20, - { 0xf8, 0x31, 0x2d, 0x9c, 0x8e, 0xea, 0x13, 0xec, 0x0a, 0x4c, 0x7b, 0x98, 0x12, 0x0c, 0x87, 0x50, 0x90, 0x87, 0xc4, 0x78 } -, - /* Signature */ - 129, - { 0x01, 0x96, 0xf1, 0x2a, 0x00, 0x5b, 0x98, 0x12, 0x9c, 0x8d, 0xf1, 0x3c, 0x4c, 0xb1, 0x6f, 0x8a, 0xa8, 0x87, 0xd3, 0xc4, 0x0d, 0x96, 0xdf, 0x3a, 0x88, 0xe7, 0x53, 0x2e, 0xf3, 0x9c, 0xd9, 0x92, 0xf2, 0x73, 0xab, 0xc3, 0x70, 0xbc, 0x1b, 0xe6, 0xf0, 0x97, 0xcf, 0xeb, 0xbf, 0x01, 0x18, 0xfd, 0x9e, 0xf4, 0xb9, 0x27, 0x15, 0x5f, 0x3d, 0xf2, 0x2b, 0x90, 0x4d, 0x90, 0x70, 0x2d, 0x1f, 0x7b, 0xa7, 0xa5, 0x2b, 0xed, 0x8b, 0x89, 0x42, 0xf4, 0x12, 0xcd, 0x7b, 0xd6, 0x76, 0xc9, 0xd1, 0x8e, 0x17, 0x03, 0x91, 0xdc, 0xd3, 0x45, 0xc0, 0x6a, 0x73, 0x09, 0x64, 0xb3, 0xf3, 0x0b, 0xcc, 0xe0, 0xbb, 0x20, 0xba, 0x10, 0x6f, 0x9a, 0xb0, 0xee, 0xb3, 0x9c, 0xf8, 0xa6, 0x60, 0x7f, 0x75, 0xc0, 0x34, 0x7f, 0x0a, 0xf7, 0x9f, 0x16, 0xaf, 0xa0, 0x81, 0xd2, 0xc9, 0x2d, 0x1e, 0xe6, 0xf8, 0x36, 0xb8 } - -} -, -{ - "RSASSA-PSS Signature Example 3.5", - /* Message to be signed */ - 115, - { 0xfe, 0xf4, 0x16, 0x1d, 0xfa, 0xaf, 0x9c, 0x52, 0x95, 0x05, 0x1d, 0xfc, 0x1f, 0xf3, 0x81, 0x0c, 0x8c, 0x9e, 0xc2, 0xe8, 0x66, 0xf7, 0x07, 0x54, 0x22, 0xc8, 0xec, 0x42, 0x16, 0xa9, 0xc4, 0xff, 0x49, 0x42, 0x7d, 0x48, 0x3c, 0xae, 0x10, 0xc8, 0x53, 0x4a, 0x41, 0xb2, 0xfd, 0x15, 0xfe, 0xe0, 0x69, 0x60, 0xec, 0x6f, 0xb3, 0xf7, 0xa7, 0xe9, 0x4a, 0x2f, 0x8a, 0x2e, 0x3e, 0x43, 0xdc, 0x4a, 0x40, 0x57, 0x6c, 0x30, 0x97, 0xac, 0x95, 0x3b, 0x1d, 0xe8, 0x6f, 0x0b, 0x4e, 0xd3, 0x6d, 0x64, 0x4f, 0x23, 0xae, 0x14, 0x42, 0x55, 0x29, 0x62, 0x24, 0x64, 0xca, 0x0c, 0xbf, 0x0b, 0x17, 0x41, 0x34, 0x72, 0x38, 0x15, 0x7f, 0xab, 0x59, 0xe4, 0xde, 0x55, 0x24, 0x09, 0x6d, 0x62, 0xba, 0xec, 0x63, 0xac, 0x64 } -, - /* Salt */ - 20, - { 0x50, 0x32, 0x7e, 0xfe, 0xc6, 0x29, 0x2f, 0x98, 0x01, 0x9f, 0xc6, 0x7a, 0x2a, 0x66, 0x38, 0x56, 0x3e, 0x9b, 0x6e, 0x2d } -, - /* Signature */ - 129, - { 0x02, 0x1e, 0xca, 0x3a, 0xb4, 0x89, 0x22, 0x64, 0xec, 0x22, 0x41, 0x1a, 0x75, 0x2d, 0x92, 0x22, 0x10, 0x76, 0xd4, 0xe0, 0x1c, 0x0e, 0x6f, 0x0d, 0xde, 0x9a, 0xfd, 0x26, 0xba, 0x5a, 0xcf, 0x6d, 0x73, 0x9e, 0xf9, 0x87, 0x54, 0x5d, 0x16, 0x68, 0x3e, 0x56, 0x74, 0xc9, 0xe7, 0x0f, 0x1d, 0xe6, 0x49, 0xd7, 0xe6, 0x1d, 0x48, 0xd0, 0xca, 0xeb, 0x4f, 0xb4, 0xd8, 0xb2, 0x4f, 0xba, 0x84, 0xa6, 0xe3, 0x10, 0x8f, 0xee, 0x7d, 0x07, 0x05, 0x97, 0x32, 0x66, 0xac, 0x52, 0x4b, 0x4a, 0xd2, 0x80, 0xf7, 0xae, 0x17, 0xdc, 0x59, 0xd9, 0x6d, 0x33, 0x51, 0x58, 0x6b, 0x5a, 0x3b, 0xdb, 0x89, 0x5d, 0x1e, 0x1f, 0x78, 0x20, 0xac, 0x61, 0x35, 0xd8, 0x75, 0x34, 0x80, 0x99, 0x83, 0x82, 0xba, 0x32, 0xb7, 0x34, 0x95, 0x59, 0x60, 0x8c, 0x38, 0x74, 0x52, 0x90, 0xa8, 0x5e, 0xf4, 0xe9, 0xf9, 0xbd, 0x83 } - -} -, -{ - "RSASSA-PSS Signature Example 3.6", - /* Message to be signed */ - 22, - { 0xef, 0xd2, 0x37, 0xbb, 0x09, 0x8a, 0x44, 0x3a, 0xee, 0xb2, 0xbf, 0x6c, 0x3f, 0x8c, 0x81, 0xb8, 0xc0, 0x1b, 0x7f, 0xcb, 0x3f, 0xeb } -, - /* Salt */ - 20, - { 0xb0, 0xde, 0x3f, 0xc2, 0x5b, 0x65, 0xf5, 0xaf, 0x96, 0xb1, 0xd5, 0xcc, 0x3b, 0x27, 0xd0, 0xc6, 0x05, 0x30, 0x87, 0xb3 } -, - /* Signature */ - 129, - { 0x01, 0x2f, 0xaf, 0xec, 0x86, 0x2f, 0x56, 0xe9, 0xe9, 0x2f, 0x60, 0xab, 0x0c, 0x77, 0x82, 0x4f, 0x42, 0x99, 0xa0, 0xca, 0x73, 0x4e, 0xd2, 0x6e, 0x06, 0x44, 0xd5, 0xd2, 0x22, 0xc7, 0xf0, 0xbd, 0xe0, 0x39, 0x64, 0xf8, 0xe7, 0x0a, 0x5c, 0xb6, 0x5e, 0xd4, 0x4e, 0x44, 0xd5, 0x6a, 0xe0, 0xed, 0xf1, 0xff, 0x86, 0xca, 0x03, 0x2c, 0xc5, 0xdd, 0x44, 0x04, 0xdb, 0xb7, 0x6a, 0xb8, 0x54, 0x58, 0x6c, 0x44, 0xee, 0xd8, 0x33, 0x6d, 0x08, 0xd4, 0x57, 0xce, 0x6c, 0x03, 0x69, 0x3b, 0x45, 0xc0, 0xf1, 0xef, 0xef, 0x93, 0x62, 0x4b, 0x95, 0xb8, 0xec, 0x16, 0x9c, 0x61, 0x6d, 0x20, 0xe5, 0x53, 0x8e, 0xbc, 0x0b, 0x67, 0x37, 0xa6, 0xf8, 0x2b, 0x4b, 0xc0, 0x57, 0x09, 0x24, 0xfc, 0x6b, 0x35, 0x75, 0x9a, 0x33, 0x48, 0x42, 0x62, 0x79, 0xf8, 0xb3, 0xd7, 0x74, 0x4e, 0x2d, 0x22, 0x24, 0x26, 0xce } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 4: A 1027-bit RSA Key Pair", -{ - /* RSA modulus n */ - 129, - { 0x05, 0x4a, 0xdb, 0x78, 0x86, 0x44, 0x7e, 0xfe, 0x6f, 0x57, 0xe0, 0x36, 0x8f, 0x06, 0xcf, 0x52, 0xb0, 0xa3, 0x37, 0x07, 0x60, 0xd1, 0x61, 0xce, 0xf1, 0x26, 0xb9, 0x1b, 0xe7, 0xf8, 0x9c, 0x42, 0x1b, 0x62, 0xa6, 0xec, 0x1d, 0xa3, 0xc3, 0x11, 0xd7, 0x5e, 0xd5, 0x0e, 0x0a, 0xb5, 0xff, 0xf3, 0xfd, 0x33, 0x8a, 0xcc, 0x3a, 0xa8, 0xa4, 0xe7, 0x7e, 0xe2, 0x63, 0x69, 0xac, 0xb8, 0x1b, 0xa9, 0x00, 0xfa, 0x83, 0xf5, 0x30, 0x0c, 0xf9, 0xbb, 0x6c, 0x53, 0xad, 0x1d, 0xc8, 0xa1, 0x78, 0xb8, 0x15, 0xdb, 0x42, 0x35, 0xa9, 0xa9, 0xda, 0x0c, 0x06, 0xde, 0x4e, 0x61, 0x5e, 0xa1, 0x27, 0x7c, 0xe5, 0x59, 0xe9, 0xc1, 0x08, 0xde, 0x58, 0xc1, 0x4a, 0x81, 0xaa, 0x77, 0xf5, 0xa6, 0xf8, 0xd1, 0x33, 0x54, 0x94, 0x49, 0x88, 0x48, 0xc8, 0xb9, 0x59, 0x40, 0x74, 0x0b, 0xe7, 0xbf, 0x7c, 0x37, 0x05 } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 128, - { 0xfa, 0x04, 0x1f, 0x8c, 0xd9, 0x69, 0x7c, 0xee, 0xd3, 0x8e, 0xc8, 0xca, 0xa2, 0x75, 0x52, 0x3b, 0x4d, 0xd7, 0x2b, 0x09, 0xa3, 0x01, 0xd3, 0x54, 0x1d, 0x72, 0xf5, 0xd3, 0x1c, 0x05, 0xcb, 0xce, 0x2d, 0x69, 0x83, 0xb3, 0x61, 0x83, 0xaf, 0x10, 0x69, 0x0b, 0xd4, 0x6c, 0x46, 0x13, 0x1e, 0x35, 0x78, 0x94, 0x31, 0xa5, 0x56, 0x77, 0x1d, 0xd0, 0x04, 0x9b, 0x57, 0x46, 0x1b, 0xf0, 0x60, 0xc1, 0xf6, 0x84, 0x72, 0xe8, 0xa6, 0x7c, 0x25, 0xf3, 0x57, 0xe5, 0xb6, 0xb4, 0x73, 0x8f, 0xa5, 0x41, 0xa7, 0x30, 0x34, 0x6b, 0x4a, 0x07, 0x64, 0x9a, 0x2d, 0xfa, 0x80, 0x6a, 0x69, 0xc9, 0x75, 0xb6, 0xab, 0xa6, 0x46, 0x78, 0xac, 0xc7, 0xf5, 0x91, 0x3e, 0x89, 0xc6, 0x22, 0xf2, 0xd8, 0xab, 0xb1, 0xe3, 0xe3, 0x25, 0x54, 0xe3, 0x9d, 0xf9, 0x4b, 0xa6, 0x0c, 0x00, 0x2e, 0x38, 0x7d, 0x90, 0x11 } -, - /* Prime p */ - 65, - { 0x02, 0x92, 0x32, 0x33, 0x6d, 0x28, 0x38, 0x94, 0x5d, 0xba, 0x9d, 0xd7, 0x72, 0x3f, 0x4e, 0x62, 0x4a, 0x05, 0xf7, 0x37, 0x5b, 0x92, 0x7a, 0x87, 0xab, 0xe6, 0xa8, 0x93, 0xa1, 0x65, 0x8f, 0xd4, 0x9f, 0x47, 0xf6, 0xc7, 0xb0, 0xfa, 0x59, 0x6c, 0x65, 0xfa, 0x68, 0xa2, 0x3f, 0x0a, 0xb4, 0x32, 0x96, 0x2d, 0x18, 0xd4, 0x34, 0x3b, 0xd6, 0xfd, 0x67, 0x1a, 0x5e, 0xa8, 0xd1, 0x48, 0x41, 0x39, 0x95 } -, - /* Prime q */ - 65, - { 0x02, 0x0e, 0xf5, 0xef, 0xe7, 0xc5, 0x39, 0x4a, 0xed, 0x22, 0x72, 0xf7, 0xe8, 0x1a, 0x74, 0xf4, 0xc0, 0x2d, 0x14, 0x58, 0x94, 0xcb, 0x1b, 0x3c, 0xab, 0x23, 0xa9, 0xa0, 0x71, 0x0a, 0x2a, 0xfc, 0x7e, 0x33, 0x29, 0xac, 0xbb, 0x74, 0x3d, 0x01, 0xf6, 0x80, 0xc4, 0xd0, 0x2a, 0xfb, 0x4c, 0x8f, 0xde, 0x7e, 0x20, 0x93, 0x08, 0x11, 0xbb, 0x2b, 0x99, 0x57, 0x88, 0xb5, 0xe8, 0x72, 0xc2, 0x0b, 0xb1 } -, - /* p's CRT exponent dP */ - 65, - { 0x02, 0x6e, 0x7e, 0x28, 0x01, 0x0e, 0xcf, 0x24, 0x12, 0xd9, 0x52, 0x3a, 0xd7, 0x04, 0x64, 0x7f, 0xb4, 0xfe, 0x9b, 0x66, 0xb1, 0xa6, 0x81, 0x58, 0x1b, 0x0e, 0x15, 0x55, 0x3a, 0x89, 0xb1, 0x54, 0x28, 0x28, 0x89, 0x8f, 0x27, 0x24, 0x3e, 0xba, 0xb4, 0x5f, 0xf5, 0xe1, 0xac, 0xb9, 0xd4, 0xdf, 0x1b, 0x05, 0x1f, 0xbc, 0x62, 0x82, 0x4d, 0xbc, 0x6f, 0x6c, 0x93, 0x26, 0x1a, 0x78, 0xb9, 0xa7, 0x59 } -, - /* q's CRT exponent dQ */ - 65, - { 0x01, 0x2d, 0xdc, 0xc8, 0x6e, 0xf6, 0x55, 0x99, 0x8c, 0x39, 0xdd, 0xae, 0x11, 0x71, 0x86, 0x69, 0xe5, 0xe4, 0x6c, 0xf1, 0x49, 0x5b, 0x07, 0xe1, 0x3b, 0x10, 0x14, 0xcd, 0x69, 0xb3, 0xaf, 0x68, 0x30, 0x4a, 0xd2, 0xa6, 0xb6, 0x43, 0x21, 0xe7, 0x8b, 0xf3, 0xbb, 0xca, 0x9b, 0xb4, 0x94, 0xe9, 0x1d, 0x45, 0x17, 0x17, 0xe2, 0xd9, 0x75, 0x64, 0xc6, 0x54, 0x94, 0x65, 0xd0, 0x20, 0x5c, 0xf4, 0x21 } -, - /* CRT coefficient qInv */ - 65, - { 0x01, 0x06, 0x00, 0xc4, 0xc2, 0x18, 0x47, 0x45, 0x9f, 0xe5, 0x76, 0x70, 0x3e, 0x2e, 0xbe, 0xca, 0xe8, 0xa5, 0x09, 0x4e, 0xe6, 0x3f, 0x53, 0x6b, 0xf4, 0xac, 0x68, 0xd3, 0xc1, 0x3e, 0x5e, 0x4f, 0x12, 0xac, 0x5c, 0xc1, 0x0a, 0xb6, 0xa2, 0xd0, 0x5a, 0x19, 0x92, 0x14, 0xd1, 0x82, 0x47, 0x47, 0xd5, 0x51, 0x90, 0x96, 0x36, 0xb7, 0x74, 0xc2, 0x2c, 0xac, 0x0b, 0x83, 0x75, 0x99, 0xab, 0xcc, 0x75 } - -} -, -{{ - "RSASSA-PSS Signature Example 4.1", - /* Message to be signed */ - 8, - { 0x9f, 0xb0, 0x3b, 0x82, 0x7c, 0x82, 0x17, 0xd9 } -, - /* Salt */ - 20, - { 0xed, 0x7c, 0x98, 0xc9, 0x5f, 0x30, 0x97, 0x4f, 0xbe, 0x4f, 0xbd, 0xdc, 0xf0, 0xf2, 0x8d, 0x60, 0x21, 0xc0, 0xe9, 0x1d } -, - /* Signature */ - 129, - { 0x03, 0x23, 0xd5, 0xb7, 0xbf, 0x20, 0xba, 0x45, 0x39, 0x28, 0x9a, 0xe4, 0x52, 0xae, 0x42, 0x97, 0x08, 0x0f, 0xef, 0xf4, 0x51, 0x84, 0x23, 0xff, 0x48, 0x11, 0xa8, 0x17, 0x83, 0x7e, 0x7d, 0x82, 0xf1, 0x83, 0x6c, 0xdf, 0xab, 0x54, 0x51, 0x4f, 0xf0, 0x88, 0x7b, 0xdd, 0xee, 0xbf, 0x40, 0xbf, 0x99, 0xb0, 0x47, 0xab, 0xc3, 0xec, 0xfa, 0x6a, 0x37, 0xa3, 0xef, 0x00, 0xf4, 0xa0, 0xc4, 0xa8, 0x8a, 0xae, 0x09, 0x04, 0xb7, 0x45, 0xc8, 0x46, 0xc4, 0x10, 0x7e, 0x87, 0x97, 0x72, 0x3e, 0x8a, 0xc8, 0x10, 0xd9, 0xe3, 0xd9, 0x5d, 0xfa, 0x30, 0xff, 0x49, 0x66, 0xf4, 0xd7, 0x5d, 0x13, 0x76, 0x8d, 0x20, 0x85, 0x7f, 0x2b, 0x14, 0x06, 0xf2, 0x64, 0xcf, 0xe7, 0x5e, 0x27, 0xd7, 0x65, 0x2f, 0x4b, 0x5e, 0xd3, 0x57, 0x5f, 0x28, 0xa7, 0x02, 0xf8, 0xc4, 0xed, 0x9c, 0xf9, 0xb2, 0xd4, 0x49, 0x48 } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSASSA-PSS Signature Example 4.2", - /* Message to be signed */ - 167, - { 0x0c, 0xa2, 0xad, 0x77, 0x79, 0x7e, 0xce, 0x86, 0xde, 0x5b, 0xf7, 0x68, 0x75, 0x0d, 0xdb, 0x5e, 0xd6, 0xa3, 0x11, 0x6a, 0xd9, 0x9b, 0xbd, 0x17, 0xed, 0xf7, 0xf7, 0x82, 0xf0, 0xdb, 0x1c, 0xd0, 0x5b, 0x0f, 0x67, 0x74, 0x68, 0xc5, 0xea, 0x42, 0x0d, 0xc1, 0x16, 0xb1, 0x0e, 0x80, 0xd1, 0x10, 0xde, 0x2b, 0x04, 0x61, 0xea, 0x14, 0xa3, 0x8b, 0xe6, 0x86, 0x20, 0x39, 0x2e, 0x7e, 0x89, 0x3c, 0xb4, 0xea, 0x93, 0x93, 0xfb, 0x88, 0x6c, 0x20, 0xff, 0x79, 0x06, 0x42, 0x30, 0x5b, 0xf3, 0x02, 0x00, 0x38, 0x92, 0xe5, 0x4d, 0xf9, 0xf6, 0x67, 0x50, 0x9d, 0xc5, 0x39, 0x20, 0xdf, 0x58, 0x3f, 0x50, 0xa3, 0xdd, 0x61, 0xab, 0xb6, 0xfa, 0xb7, 0x5d, 0x60, 0x03, 0x77, 0xe3, 0x83, 0xe6, 0xac, 0xa6, 0x71, 0x0e, 0xee, 0xa2, 0x71, 0x56, 0xe0, 0x67, 0x52, 0xc9, 0x4c, 0xe2, 0x5a, 0xe9, 0x9f, 0xcb, 0xf8, 0x59, 0x2d, 0xbe, 0x2d, 0x7e, 0x27, 0x45, 0x3c, 0xb4, 0x4d, 0xe0, 0x71, 0x00, 0xeb, 0xb1, 0xa2, 0xa1, 0x98, 0x11, 0xa4, 0x78, 0xad, 0xbe, 0xab, 0x27, 0x0f, 0x94, 0xe8, 0xfe, 0x36, 0x9d, 0x90, 0xb3, 0xca, 0x61, 0x2f, 0x9f } -, - /* Salt */ - 20, - { 0x22, 0xd7, 0x1d, 0x54, 0x36, 0x3a, 0x42, 0x17, 0xaa, 0x55, 0x11, 0x3f, 0x05, 0x9b, 0x33, 0x84, 0xe3, 0xe5, 0x7e, 0x44 } -, - /* Signature */ - 129, - { 0x04, 0x9d, 0x01, 0x85, 0x84, 0x5a, 0x26, 0x4d, 0x28, 0xfe, 0xb1, 0xe6, 0x9e, 0xda, 0xec, 0x09, 0x06, 0x09, 0xe8, 0xe4, 0x6d, 0x93, 0xab, 0xb3, 0x83, 0x71, 0xce, 0x51, 0xf4, 0xaa, 0x65, 0xa5, 0x99, 0xbd, 0xaa, 0xa8, 0x1d, 0x24, 0xfb, 0xa6, 0x6a, 0x08, 0xa1, 0x16, 0xcb, 0x64, 0x4f, 0x3f, 0x1e, 0x65, 0x3d, 0x95, 0xc8, 0x9d, 0xb8, 0xbb, 0xd5, 0xda, 0xac, 0x27, 0x09, 0xc8, 0x98, 0x40, 0x00, 0x17, 0x84, 0x10, 0xa7, 0xc6, 0xaa, 0x86, 0x67, 0xdd, 0xc3, 0x8c, 0x74, 0x1f, 0x71, 0x0e, 0xc8, 0x66, 0x5a, 0xa9, 0x05, 0x2b, 0xe9, 0x29, 0xd4, 0xe3, 0xb1, 0x67, 0x82, 0xc1, 0x66, 0x21, 0x14, 0xc5, 0x41, 0x4b, 0xb0, 0x35, 0x34, 0x55, 0xc3, 0x92, 0xfc, 0x28, 0xf3, 0xdb, 0x59, 0x05, 0x4b, 0x5f, 0x36, 0x5c, 0x49, 0xe1, 0xd1, 0x56, 0xf8, 0x76, 0xee, 0x10, 0xcb, 0x4f, 0xd7, 0x05, 0x98 } - -} -, -{ - "RSASSA-PSS Signature Example 4.3", - /* Message to be signed */ - 83, - { 0x28, 0x80, 0x62, 0xaf, 0xc0, 0x8f, 0xcd, 0xb7, 0xc5, 0xf8, 0x65, 0x0b, 0x29, 0x83, 0x73, 0x00, 0x46, 0x1d, 0xd5, 0x67, 0x6c, 0x17, 0xa2, 0x0a, 0x3c, 0x8f, 0xb5, 0x14, 0x89, 0x49, 0xe3, 0xf7, 0x3d, 0x66, 0xb3, 0xae, 0x82, 0xc7, 0x24, 0x0e, 0x27, 0xc5, 0xb3, 0xec, 0x43, 0x28, 0xee, 0x7d, 0x6d, 0xdf, 0x6a, 0x6a, 0x0c, 0x9b, 0x5b, 0x15, 0xbc, 0xda, 0x19, 0x6a, 0x9d, 0x0c, 0x76, 0xb1, 0x19, 0xd5, 0x34, 0xd8, 0x5a, 0xbd, 0x12, 0x39, 0x62, 0xd5, 0x83, 0xb7, 0x6c, 0xe9, 0xd1, 0x80, 0xbc, 0xe1, 0xca } -, - /* Salt */ - 20, - { 0x4a, 0xf8, 0x70, 0xfb, 0xc6, 0x51, 0x60, 0x12, 0xca, 0x91, 0x6c, 0x70, 0xba, 0x86, 0x2a, 0xc7, 0xe8, 0x24, 0x36, 0x17 } -, - /* Signature */ - 129, - { 0x03, 0xfb, 0xc4, 0x10, 0xa2, 0xce, 0xd5, 0x95, 0x00, 0xfb, 0x99, 0xf9, 0xe2, 0xaf, 0x27, 0x81, 0xad, 0xa7, 0x4e, 0x13, 0x14, 0x56, 0x24, 0x60, 0x27, 0x82, 0xe2, 0x99, 0x48, 0x13, 0xee, 0xfc, 0xa0, 0x51, 0x9e, 0xcd, 0x25, 0x3b, 0x85, 0x5f, 0xb6, 0x26, 0xa9, 0x0d, 0x77, 0x1e, 0xae, 0x02, 0x8b, 0x0c, 0x47, 0xa1, 0x99, 0xcb, 0xd9, 0xf8, 0xe3, 0x26, 0x97, 0x34, 0xaf, 0x41, 0x63, 0x59, 0x90, 0x90, 0x71, 0x3a, 0x3f, 0xa9, 0x10, 0xfa, 0x09, 0x60, 0x65, 0x27, 0x21, 0x43, 0x2b, 0x97, 0x10, 0x36, 0xa7, 0x18, 0x1a, 0x2b, 0xc0, 0xca, 0xb4, 0x3b, 0x0b, 0x59, 0x8b, 0xc6, 0x21, 0x74, 0x61, 0xd7, 0xdb, 0x30, 0x5f, 0xf7, 0xe9, 0x54, 0xc5, 0xb5, 0xbb, 0x23, 0x1c, 0x39, 0xe7, 0x91, 0xaf, 0x6b, 0xcf, 0xa7, 0x6b, 0x14, 0x7b, 0x08, 0x13, 0x21, 0xf7, 0x26, 0x41, 0x48, 0x2a, 0x2a, 0xad } - -} -, -{ - "RSASSA-PSS Signature Example 4.4", - /* Message to be signed */ - 49, - { 0x6f, 0x4f, 0x9a, 0xb9, 0x50, 0x11, 0x99, 0xce, 0xf5, 0x5c, 0x6c, 0xf4, 0x08, 0xfe, 0x7b, 0x36, 0xc5, 0x57, 0xc4, 0x9d, 0x42, 0x0a, 0x47, 0x63, 0xd2, 0x46, 0x3c, 0x8a, 0xd4, 0x4b, 0x3c, 0xfc, 0x5b, 0xe2, 0x74, 0x2c, 0x0e, 0x7d, 0x9b, 0x0f, 0x66, 0x08, 0xf0, 0x8c, 0x7f, 0x47, 0xb6, 0x93, 0xee } -, - /* Salt */ - 20, - { 0x40, 0xd2, 0xe1, 0x80, 0xfa, 0xe1, 0xea, 0xc4, 0x39, 0xc1, 0x90, 0xb5, 0x6c, 0x2c, 0x0e, 0x14, 0xdd, 0xf9, 0xa2, 0x26 } -, - /* Signature */ - 129, - { 0x04, 0x86, 0x64, 0x4b, 0xc6, 0x6b, 0xf7, 0x5d, 0x28, 0x33, 0x5a, 0x61, 0x79, 0xb1, 0x08, 0x51, 0xf4, 0x3f, 0x09, 0xbd, 0xed, 0x9f, 0xac, 0x1a, 0xf3, 0x32, 0x52, 0xbb, 0x99, 0x53, 0xba, 0x42, 0x98, 0xcd, 0x64, 0x66, 0xb2, 0x75, 0x39, 0xa7, 0x0a, 0xda, 0xa3, 0xf8, 0x9b, 0x3d, 0xb3, 0xc7, 0x4a, 0xb6, 0x35, 0xd1, 0x22, 0xf4, 0xee, 0x7c, 0xe5, 0x57, 0xa6, 0x1e, 0x59, 0xb8, 0x2f, 0xfb, 0x78, 0x66, 0x30, 0xe5, 0xf9, 0xdb, 0x53, 0xc7, 0x7d, 0x9a, 0x0c, 0x12, 0xfa, 0xb5, 0x95, 0x8d, 0x4c, 0x2c, 0xe7, 0xda, 0xa8, 0x07, 0xcd, 0x89, 0xba, 0x2c, 0xc7, 0xfc, 0xd0, 0x2f, 0xf4, 0x70, 0xca, 0x67, 0xb2, 0x29, 0xfc, 0xce, 0x81, 0x4c, 0x85, 0x2c, 0x73, 0xcc, 0x93, 0xbe, 0xa3, 0x5b, 0xe6, 0x84, 0x59, 0xce, 0x47, 0x8e, 0x9d, 0x46, 0x55, 0xd1, 0x21, 0xc8, 0x47, 0x2f, 0x37, 0x1d, 0x4f } - -} -, -{ - "RSASSA-PSS Signature Example 4.5", - /* Message to be signed */ - 187, - { 0xe1, 0x7d, 0x20, 0x38, 0x5d, 0x50, 0x19, 0x55, 0x82, 0x3c, 0x3f, 0x66, 0x62, 0x54, 0xc1, 0xd3, 0xdd, 0x36, 0xad, 0x51, 0x68, 0xb8, 0xf1, 0x8d, 0x28, 0x6f, 0xdc, 0xf6, 0x7a, 0x7d, 0xad, 0x94, 0x09, 0x70, 0x85, 0xfa, 0xb7, 0xed, 0x86, 0xfe, 0x21, 0x42, 0xa2, 0x87, 0x71, 0x71, 0x79, 0x97, 0xef, 0x1a, 0x7a, 0x08, 0x88, 0x4e, 0xfc, 0x39, 0x35, 0x6d, 0x76, 0x07, 0x7a, 0xaf, 0x82, 0x45, 0x9a, 0x7f, 0xad, 0x45, 0x84, 0x88, 0x75, 0xf2, 0x81, 0x9b, 0x09, 0x89, 0x37, 0xfe, 0x92, 0x3b, 0xcc, 0x9d, 0xc4, 0x42, 0xd7, 0x2d, 0x75, 0x4d, 0x81, 0x20, 0x25, 0x09, 0x0c, 0x9b, 0xc0, 0x3d, 0xb3, 0x08, 0x0c, 0x13, 0x8d, 0xd6, 0x3b, 0x35, 0x5d, 0x0b, 0x4b, 0x85, 0xd6, 0x68, 0x8a, 0xc1, 0x9f, 0x4d, 0xe1, 0x50, 0x84, 0xa0, 0xba, 0x4e, 0x37, 0x3b, 0x93, 0xef, 0x4a, 0x55, 0x50, 0x96, 0x69, 0x19, 0x15, 0xdc, 0x23, 0xc0, 0x0e, 0x95, 0x4c, 0xde, 0xb2, 0x0a, 0x47, 0xcd, 0x55, 0xd1, 0x6c, 0x3d, 0x86, 0x81, 0xd4, 0x6e, 0xd7, 0xf2, 0xed, 0x5e, 0xa4, 0x27, 0x95, 0xbe, 0x17, 0xba, 0xed, 0x25, 0xf0, 0xf4, 0xd1, 0x13, 0xb3, 0x63, 0x6a, 0xdd, 0xd5, 0x85, 0xf1, 0x6a, 0x8b, 0x5a, 0xec, 0x0c, 0x8f, 0xa9, 0xc5, 0xf0, 0x3c, 0xbf, 0x3b, 0x9b, 0x73 } -, - /* Salt */ - 20, - { 0x24, 0x97, 0xdc, 0x2b, 0x46, 0x15, 0xdf, 0xae, 0x5a, 0x66, 0x3d, 0x49, 0xff, 0xd5, 0x6b, 0xf7, 0xef, 0xc1, 0x13, 0x04 } -, - /* Signature */ - 129, - { 0x02, 0x2a, 0x80, 0x04, 0x53, 0x53, 0x90, 0x4c, 0xb3, 0x0c, 0xbb, 0x54, 0x2d, 0x7d, 0x49, 0x90, 0x42, 0x1a, 0x6e, 0xec, 0x16, 0xa8, 0x02, 0x9a, 0x84, 0x22, 0xad, 0xfd, 0x22, 0xd6, 0xaf, 0xf8, 0xc4, 0xcc, 0x02, 0x94, 0xaf, 0x11, 0x0a, 0x0c, 0x06, 0x7e, 0xc8, 0x6a, 0x7d, 0x36, 0x41, 0x34, 0x45, 0x9b, 0xb1, 0xae, 0x8f, 0xf8, 0x36, 0xd5, 0xa8, 0xa2, 0x57, 0x98, 0x40, 0x99, 0x6b, 0x32, 0x0b, 0x19, 0xf1, 0x3a, 0x13, 0xfa, 0xd3, 0x78, 0xd9, 0x31, 0xa6, 0x56, 0x25, 0xda, 0xe2, 0x73, 0x9f, 0x0c, 0x53, 0x67, 0x0b, 0x35, 0xd9, 0xd3, 0xcb, 0xac, 0x08, 0xe7, 0x33, 0xe4, 0xec, 0x2b, 0x83, 0xaf, 0x4b, 0x91, 0x96, 0xd6, 0x3e, 0x7c, 0x4f, 0xf1, 0xdd, 0xea, 0xe2, 0xa1, 0x22, 0x79, 0x1a, 0x12, 0x5b, 0xfe, 0xa8, 0xde, 0xb0, 0xde, 0x8c, 0xcf, 0x1f, 0x4f, 0xfa, 0xf6, 0xe6, 0xfb, 0x0a } - -} -, -{ - "RSASSA-PSS Signature Example 4.6", - /* Message to be signed */ - 166, - { 0xaf, 0xbc, 0x19, 0xd4, 0x79, 0x24, 0x90, 0x18, 0xfd, 0xf4, 0xe0, 0x9f, 0x61, 0x87, 0x26, 0x44, 0x04, 0x95, 0xde, 0x11, 0xdd, 0xee, 0xe3, 0x88, 0x72, 0xd7, 0x75, 0xfc, 0xea, 0x74, 0xa2, 0x38, 0x96, 0xb5, 0x34, 0x3c, 0x9c, 0x38, 0xd4, 0x6a, 0xf0, 0xdb, 0xa2, 0x24, 0xd0, 0x47, 0x58, 0x0c, 0xc6, 0x0a, 0x65, 0xe9, 0x39, 0x1c, 0xf9, 0xb5, 0x9b, 0x36, 0xa8, 0x60, 0x59, 0x8d, 0x4e, 0x82, 0x16, 0x72, 0x2f, 0x99, 0x3b, 0x91, 0xcf, 0xae, 0x87, 0xbc, 0x25, 0x5a, 0xf8, 0x9a, 0x6a, 0x19, 0x9b, 0xca, 0x4a, 0x39, 0x1e, 0xad, 0xbc, 0x3a, 0x24, 0x90, 0x3c, 0x0b, 0xd6, 0x67, 0x36, 0x8f, 0x6b, 0xe7, 0x8e, 0x3f, 0xea, 0xbf, 0xb4, 0xff, 0xd4, 0x63, 0x12, 0x27, 0x63, 0x74, 0x0f, 0xfb, 0xbe, 0xfe, 0xab, 0x9a, 0x25, 0x56, 0x4b, 0xc5, 0xd1, 0xc2, 0x4c, 0x93, 0xe4, 0x22, 0xf7, 0x50, 0x73, 0xe2, 0xad, 0x72, 0xbf, 0x45, 0xb1, 0x0d, 0xf0, 0x0b, 0x52, 0xa1, 0x47, 0x12, 0x8e, 0x73, 0xfe, 0xe3, 0x3f, 0xa3, 0xf0, 0x57, 0x7d, 0x77, 0xf8, 0x0f, 0xbc, 0x2d, 0xf1, 0xbe, 0xd3, 0x13, 0x29, 0x0c, 0x12, 0x77, 0x7f, 0x50 } -, - /* Salt */ - 20, - { 0xa3, 0x34, 0xdb, 0x6f, 0xae, 0xbf, 0x11, 0x08, 0x1a, 0x04, 0xf8, 0x7c, 0x2d, 0x62, 0x1c, 0xde, 0xc7, 0x93, 0x0b, 0x9b } -, - /* Signature */ - 129, - { 0x00, 0x93, 0x8d, 0xcb, 0x6d, 0x58, 0x30, 0x46, 0x06, 0x5f, 0x69, 0xc7, 0x8d, 0xa7, 0xa1, 0xf1, 0x75, 0x70, 0x66, 0xa7, 0xfa, 0x75, 0x12, 0x5a, 0x9d, 0x29, 0x29, 0xf0, 0xb7, 0x9a, 0x60, 0xb6, 0x27, 0xb0, 0x82, 0xf1, 0x1f, 0x5b, 0x19, 0x6f, 0x28, 0xeb, 0x9d, 0xaa, 0x6f, 0x21, 0xc0, 0x5e, 0x51, 0x40, 0xf6, 0xae, 0xf1, 0x73, 0x7d, 0x20, 0x23, 0x07, 0x5c, 0x05, 0xec, 0xf0, 0x4a, 0x02, 0x8c, 0x68, 0x6a, 0x2a, 0xb3, 0xe7, 0xd5, 0xa0, 0x66, 0x4f, 0x29, 0x5c, 0xe1, 0x29, 0x95, 0xe8, 0x90, 0x90, 0x8b, 0x6a, 0xd2, 0x1f, 0x08, 0x39, 0xeb, 0x65, 0xb7, 0x03, 0x93, 0xa7, 0xb5, 0xaf, 0xd9, 0x87, 0x1d, 0xe0, 0xca, 0xa0, 0xce, 0xde, 0xc5, 0xb8, 0x19, 0x62, 0x67, 0x56, 0x20, 0x9d, 0x13, 0xab, 0x1e, 0x7b, 0xb9, 0x54, 0x6a, 0x26, 0xff, 0x37, 0xe9, 0xa5, 0x1a, 0xf9, 0xfd, 0x56, 0x2e } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 5: A 1028-bit RSA Key Pair", -{ - /* RSA modulus n */ - 129, - { 0x0d, 0x10, 0xf6, 0x61, 0xf2, 0x99, 0x40, 0xf5, 0xed, 0x39, 0xaa, 0x26, 0x09, 0x66, 0xde, 0xb4, 0x78, 0x43, 0x67, 0x9d, 0x2b, 0x6f, 0xb2, 0x5b, 0x3d, 0xe3, 0x70, 0xf3, 0xac, 0x7c, 0x19, 0x91, 0x63, 0x91, 0xfd, 0x25, 0xfb, 0x52, 0x7e, 0xbf, 0xa6, 0xa4, 0xb4, 0xdf, 0x45, 0xa1, 0x75, 0x9d, 0x99, 0x6c, 0x4b, 0xb4, 0xeb, 0xd1, 0x88, 0x28, 0xc4, 0x4f, 0xc5, 0x2d, 0x01, 0x91, 0x87, 0x17, 0x40, 0x52, 0x5f, 0x47, 0xa4, 0xb0, 0xcc, 0x8d, 0xa3, 0x25, 0xed, 0x8a, 0xa6, 0x76, 0xb0, 0xd0, 0xf6, 0x26, 0xe0, 0xa7, 0x7f, 0x07, 0x69, 0x21, 0x70, 0xac, 0xac, 0x80, 0x82, 0xf4, 0x2f, 0xaa, 0x7d, 0xc7, 0xcd, 0x12, 0x3e, 0x73, 0x0e, 0x31, 0xa8, 0x79, 0x85, 0x20, 0x4c, 0xab, 0xcb, 0xe6, 0x67, 0x0d, 0x43, 0xa2, 0xdd, 0x2b, 0x2d, 0xde, 0xf5, 0xe0, 0x53, 0x92, 0xfc, 0x21, 0x3b, 0xc5, 0x07 } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 129, - { 0x03, 0xce, 0x08, 0xb1, 0x04, 0xff, 0xf3, 0x96, 0xa9, 0x79, 0xbd, 0x3e, 0x4e, 0x46, 0x92, 0x5b, 0x63, 0x19, 0xdd, 0xb6, 0x3a, 0xcb, 0xcf, 0xd8, 0x19, 0xf1, 0x7d, 0x16, 0xb8, 0x07, 0x7b, 0x3a, 0x87, 0x10, 0x1f, 0xf3, 0x4b, 0x77, 0xfe, 0x48, 0xb8, 0xb2, 0x05, 0xa9, 0x6e, 0x91, 0x51, 0xba, 0x8e, 0xce, 0xa6, 0x4d, 0x0c, 0xce, 0x7b, 0x23, 0xc3, 0xe6, 0xa6, 0xb8, 0x30, 0x58, 0xbc, 0x49, 0xda, 0xe8, 0x16, 0xae, 0x73, 0x6d, 0xb5, 0xa4, 0x70, 0x8e, 0x2a, 0xd4, 0x35, 0x23, 0x2b, 0x56, 0x7f, 0x90, 0x96, 0xce, 0x59, 0xff, 0x28, 0x06, 0x1e, 0x79, 0xab, 0x1c, 0x02, 0xd7, 0x17, 0xe6, 0xb2, 0x3c, 0xea, 0x6d, 0xb8, 0xeb, 0x51, 0x92, 0xfa, 0x7c, 0x1e, 0xab, 0x22, 0x7d, 0xba, 0x74, 0x62, 0x1c, 0x45, 0x60, 0x18, 0x96, 0xee, 0xf1, 0x37, 0x92, 0xc8, 0x44, 0x0b, 0xeb, 0x15, 0xaa, 0xc1 } -, - /* Prime p */ - 65, - { 0x03, 0xf2, 0xf3, 0x31, 0xf4, 0x14, 0x2d, 0x4f, 0x24, 0xb4, 0x3a, 0xa1, 0x02, 0x79, 0xa8, 0x96, 0x52, 0xd4, 0xe7, 0x53, 0x72, 0x21, 0xa1, 0xa7, 0xb2, 0xa2, 0x5d, 0xeb, 0x55, 0x1e, 0x5d, 0xe9, 0xac, 0x49, 0x74, 0x11, 0xc2, 0x27, 0xa9, 0x4e, 0x45, 0xf9, 0x1c, 0x2d, 0x1c, 0x13, 0xcc, 0x04, 0x6c, 0xf4, 0xce, 0x14, 0xe3, 0x2d, 0x05, 0x87, 0x34, 0x21, 0x0d, 0x44, 0xa8, 0x7e, 0xe1, 0xb7, 0x3f } -, - /* Prime q */ - 65, - { 0x03, 0x4f, 0x09, 0x0d, 0x73, 0xb5, 0x58, 0x03, 0x03, 0x0c, 0xf0, 0x36, 0x1a, 0x5d, 0x80, 0x81, 0xbf, 0xb7, 0x9f, 0x85, 0x15, 0x23, 0xfe, 0xac, 0x0a, 0x21, 0x24, 0xd0, 0x8d, 0x40, 0x13, 0xff, 0x08, 0x48, 0x77, 0x71, 0xa8, 0x70, 0xd0, 0x47, 0x9d, 0xc0, 0x68, 0x6c, 0x62, 0xf7, 0x71, 0x8d, 0xfe, 0xcf, 0x02, 0x4b, 0x17, 0xc9, 0x26, 0x76, 0x78, 0x05, 0x91, 0x71, 0x33, 0x9c, 0xc0, 0x08, 0x39 } -, - /* p's CRT exponent dP */ - 65, - { 0x02, 0xaa, 0x66, 0x3a, 0xdb, 0xf5, 0x1a, 0xb8, 0x87, 0xa0, 0x18, 0xcb, 0x42, 0x6e, 0x78, 0xbc, 0x2f, 0xe1, 0x82, 0xdc, 0xb2, 0xf7, 0xbc, 0xb5, 0x04, 0x41, 0xd1, 0x7f, 0xdf, 0x0f, 0x06, 0x79, 0x8b, 0x50, 0x71, 0xc6, 0xe2, 0xf5, 0xfe, 0xb4, 0xd5, 0x4a, 0xd8, 0x18, 0x23, 0x11, 0xc1, 0xef, 0x62, 0xd4, 0xc4, 0x9f, 0x18, 0xd1, 0xf5, 0x1f, 0x54, 0xb2, 0xd2, 0xcf, 0xfb, 0xa4, 0xda, 0x1b, 0xe5 } -, - /* q's CRT exponent dQ */ - 65, - { 0x02, 0xbb, 0xe7, 0x06, 0x07, 0x8b, 0x5c, 0x0b, 0x39, 0x15, 0x12, 0xd4, 0x11, 0xdb, 0x1b, 0x19, 0x9b, 0x5a, 0x56, 0x64, 0xb8, 0x40, 0x42, 0xea, 0xd3, 0x7f, 0xe9, 0x94, 0xae, 0x72, 0xb9, 0x53, 0x2d, 0xfb, 0xfb, 0x3e, 0x9e, 0x69, 0x81, 0xa0, 0xfb, 0xb8, 0x06, 0x51, 0x31, 0x41, 0xb7, 0xc2, 0x16, 0x3f, 0xe5, 0x6c, 0x39, 0x5e, 0x4b, 0xfa, 0xee, 0x57, 0xe3, 0x83, 0x3f, 0x9b, 0x91, 0x8d, 0xf9 } -, - /* CRT coefficient qInv */ - 64, - { 0x02, 0x42, 0xb6, 0xcd, 0x00, 0xd3, 0x0a, 0x76, 0x7a, 0xee, 0x9a, 0x89, 0x8e, 0xad, 0x45, 0x3c, 0x8e, 0xae, 0xa6, 0x3d, 0x50, 0x0b, 0x7d, 0x1e, 0x00, 0x71, 0x3e, 0xda, 0xe5, 0x1c, 0xe3, 0x6b, 0x23, 0xb6, 0x64, 0xdf, 0x26, 0xe6, 0x3e, 0x26, 0x6e, 0xc8, 0xf7, 0x6e, 0x6e, 0x63, 0xed, 0x1b, 0xa4, 0x1e, 0xb0, 0x33, 0xb1, 0x20, 0xf7, 0xea, 0x52, 0x12, 0xae, 0x21, 0xa9, 0x8f, 0xbc, 0x16 } - -} -, -{{ - "RSASSA-PSS Signature Example 5.1", - /* Message to be signed */ - 154, - { 0x30, 0xc7, 0xd5, 0x57, 0x45, 0x8b, 0x43, 0x6d, 0xec, 0xfd, 0xc1, 0x4d, 0x06, 0xcb, 0x7b, 0x96, 0xb0, 0x67, 0x18, 0xc4, 0x8d, 0x7d, 0xe5, 0x74, 0x82, 0xa8, 0x68, 0xae, 0x7f, 0x06, 0x58, 0x70, 0xa6, 0x21, 0x65, 0x06, 0xd1, 0x1b, 0x77, 0x93, 0x23, 0xdf, 0xdf, 0x04, 0x6c, 0xf5, 0x77, 0x51, 0x29, 0x13, 0x4b, 0x4d, 0x56, 0x89, 0xe4, 0xd9, 0xc0, 0xce, 0x1e, 0x12, 0xd7, 0xd4, 0xb0, 0x6c, 0xb5, 0xfc, 0x58, 0x20, 0xde, 0xcf, 0xa4, 0x1b, 0xaf, 0x59, 0xbf, 0x25, 0x7b, 0x32, 0xf0, 0x25, 0xb7, 0x67, 0x9b, 0x44, 0x5b, 0x94, 0x99, 0xc9, 0x25, 0x55, 0x14, 0x58, 0x85, 0x99, 0x2f, 0x1b, 0x76, 0xf8, 0x48, 0x91, 0xee, 0x4d, 0x3b, 0xe0, 0xf5, 0x15, 0x0f, 0xd5, 0x90, 0x1e, 0x3a, 0x4c, 0x8e, 0xd4, 0x3f, 0xd3, 0x6b, 0x61, 0xd0, 0x22, 0xe6, 0x5a, 0xd5, 0x00, 0x8d, 0xbf, 0x33, 0x29, 0x3c, 0x22, 0xbf, 0xbf, 0xd0, 0x73, 0x21, 0xf0, 0xf1, 0xd5, 0xfa, 0x9f, 0xdf, 0x00, 0x14, 0xc2, 0xfc, 0xb0, 0x35, 0x8a, 0xad, 0x0e, 0x35, 0x4b, 0x0d, 0x29 } -, - /* Salt */ - 20, - { 0x08, 0x1b, 0x23, 0x3b, 0x43, 0x56, 0x77, 0x50, 0xbd, 0x6e, 0x78, 0xf3, 0x96, 0xa8, 0x8b, 0x9f, 0x6a, 0x44, 0x51, 0x51 } -, - /* Signature */ - 129, - { 0x0b, 0xa3, 0x73, 0xf7, 0x6e, 0x09, 0x21, 0xb7, 0x0a, 0x8f, 0xbf, 0xe6, 0x22, 0xf0, 0xbf, 0x77, 0xb2, 0x8a, 0x3d, 0xb9, 0x8e, 0x36, 0x10, 0x51, 0xc3, 0xd7, 0xcb, 0x92, 0xad, 0x04, 0x52, 0x91, 0x5a, 0x4d, 0xe9, 0xc0, 0x17, 0x22, 0xf6, 0x82, 0x3e, 0xeb, 0x6a, 0xdf, 0x7e, 0x0c, 0xa8, 0x29, 0x0f, 0x5d, 0xe3, 0xe5, 0x49, 0x89, 0x0a, 0xc2, 0xa3, 0xc5, 0x95, 0x0a, 0xb2, 0x17, 0xba, 0x58, 0x59, 0x08, 0x94, 0x95, 0x2d, 0xe9, 0x6f, 0x8d, 0xf1, 0x11, 0xb2, 0x57, 0x52, 0x15, 0xda, 0x6c, 0x16, 0x15, 0x90, 0xc7, 0x45, 0xbe, 0x61, 0x24, 0x76, 0xee, 0x57, 0x8e, 0xd3, 0x84, 0xab, 0x33, 0xe3, 0xec, 0xe9, 0x74, 0x81, 0xa2, 0x52, 0xf5, 0xc7, 0x9a, 0x98, 0xb5, 0x53, 0x2a, 0xe0, 0x0c, 0xdd, 0x62, 0xf2, 0xec, 0xc0, 0xcd, 0x1b, 0xae, 0xfe, 0x80, 0xd8, 0x0b, 0x96, 0x21, 0x93, 0xec, 0x1d } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSASSA-PSS Signature Example 5.2", - /* Message to be signed */ - 209, - { 0xe7, 0xb3, 0x2e, 0x15, 0x56, 0xea, 0x1b, 0x27, 0x95, 0x04, 0x6a, 0xc6, 0x97, 0x39, 0xd2, 0x2a, 0xc8, 0x96, 0x6b, 0xf1, 0x1c, 0x11, 0x6f, 0x61, 0x4b, 0x16, 0x67, 0x40, 0xe9, 0x6b, 0x90, 0x65, 0x3e, 0x57, 0x50, 0x94, 0x5f, 0xcf, 0x77, 0x21, 0x86, 0xc0, 0x37, 0x90, 0xa0, 0x7f, 0xda, 0x32, 0x3e, 0x1a, 0x61, 0x91, 0x6b, 0x06, 0xee, 0x21, 0x57, 0xdb, 0x3d, 0xff, 0x80, 0xd6, 0x7d, 0x5e, 0x39, 0xa5, 0x3a, 0xe2, 0x68, 0xc8, 0xf0, 0x9e, 0xd9, 0x9a, 0x73, 0x20, 0x05, 0xb0, 0xbc, 0x6a, 0x04, 0xaf, 0x4e, 0x08, 0xd5, 0x7a, 0x00, 0xe7, 0x20, 0x1b, 0x30, 0x60, 0xef, 0xaa, 0xdb, 0x73, 0x11, 0x3b, 0xfc, 0x08, 0x7f, 0xd8, 0x37, 0x09, 0x3a, 0xa2, 0x52, 0x35, 0xb8, 0xc1, 0x49, 0xf5, 0x62, 0x15, 0xf0, 0x31, 0xc2, 0x4a, 0xd5, 0xbd, 0xe7, 0xf2, 0x99, 0x60, 0xdf, 0x7d, 0x52, 0x40, 0x70, 0xf7, 0x44, 0x9c, 0x6f, 0x78, 0x50, 0x84, 0xbe, 0x1a, 0x0f, 0x73, 0x30, 0x47, 0xf3, 0x36, 0xf9, 0x15, 0x47, 0x38, 0x67, 0x45, 0x47, 0xdb, 0x02, 0xa9, 0xf4, 0x4d, 0xfc, 0x6e, 0x60, 0x30, 0x10, 0x81, 0xe1, 0xce, 0x99, 0x84, 0x7f, 0x3b, 0x5b, 0x60, 0x1f, 0xf0, 0x6b, 0x4d, 0x57, 0x76, 0xa9, 0x74, 0x0b, 0x9a, 0xa0, 0xd3, 0x40, 0x58, 0xfd, 0x3b, 0x90, 0x6e, 0x4f, 0x78, 0x59, 0xdf, 0xb0, 0x7d, 0x71, 0x73, 0xe5, 0xe6, 0xf6, 0x35, 0x0a, 0xda, 0xc2, 0x1f, 0x27, 0xb2, 0x30, 0x74, 0x69 } -, - /* Salt */ - 20, - { 0xbd, 0x0c, 0xe1, 0x95, 0x49, 0xd0, 0x70, 0x01, 0x20, 0xcb, 0xe5, 0x10, 0x77, 0xdb, 0xbb, 0xb0, 0x0a, 0x8d, 0x8b, 0x09 } -, - /* Signature */ - 129, - { 0x08, 0x18, 0x0d, 0xe8, 0x25, 0xe4, 0xb8, 0xb0, 0x14, 0xa3, 0x2d, 0xa8, 0xba, 0x76, 0x15, 0x55, 0x92, 0x12, 0x04, 0xf2, 0xf9, 0x0d, 0x5f, 0x24, 0xb7, 0x12, 0x90, 0x8f, 0xf8, 0x4f, 0x3e, 0x22, 0x0a, 0xd1, 0x79, 0x97, 0xc0, 0xdd, 0x6e, 0x70, 0x66, 0x30, 0xba, 0x3e, 0x84, 0xad, 0xd4, 0xd5, 0xe7, 0xab, 0x00, 0x4e, 0x58, 0x07, 0x4b, 0x54, 0x97, 0x09, 0x56, 0x5d, 0x43, 0xad, 0x9e, 0x97, 0xb5, 0xa7, 0xa1, 0xa2, 0x9e, 0x85, 0xb9, 0xf9, 0x0f, 0x4a, 0xaf, 0xcd, 0xf5, 0x83, 0x21, 0xde, 0x8c, 0x59, 0x74, 0xef, 0x9a, 0xbf, 0x2d, 0x52, 0x6f, 0x33, 0xc0, 0xf2, 0xf8, 0x2e, 0x95, 0xd1, 0x58, 0xea, 0x6b, 0x81, 0xf1, 0x73, 0x6d, 0xb8, 0xd1, 0xaf, 0x3d, 0x6a, 0xc6, 0xa8, 0x3b, 0x32, 0xd1, 0x8b, 0xae, 0x0f, 0xf1, 0xb2, 0xfe, 0x27, 0xde, 0x4c, 0x76, 0xed, 0x8c, 0x79, 0x80, 0xa3, 0x4e } - -} -, -{ - "RSASSA-PSS Signature Example 5.3", - /* Message to be signed */ - 223, - { 0x8d, 0x83, 0x96, 0xe3, 0x65, 0x07, 0xfe, 0x1e, 0xf6, 0xa1, 0x90, 0x17, 0x54, 0x8e, 0x0c, 0x71, 0x66, 0x74, 0xc2, 0xfe, 0xc2, 0x33, 0xad, 0xb2, 0xf7, 0x75, 0x66, 0x5e, 0xc4, 0x1f, 0x2b, 0xd0, 0xba, 0x39, 0x6b, 0x06, 0x1a, 0x9d, 0xaa, 0x7e, 0x86, 0x6f, 0x7c, 0x23, 0xfd, 0x35, 0x31, 0x95, 0x43, 0x00, 0xa3, 0x42, 0xf9, 0x24, 0x53, 0x5e, 0xa1, 0x49, 0x8c, 0x48, 0xf6, 0xc8, 0x79, 0x93, 0x28, 0x65, 0xfc, 0x02, 0x00, 0x0c, 0x52, 0x87, 0x23, 0xb7, 0xad, 0x03, 0x35, 0x74, 0x5b, 0x51, 0x20, 0x9a, 0x0a, 0xfe, 0xd9, 0x32, 0xaf, 0x8f, 0x08, 0x87, 0xc2, 0x19, 0x00, 0x4d, 0x2a, 0xbd, 0x89, 0x4e, 0xa9, 0x25, 0x59, 0xee, 0x31, 0x98, 0xaf, 0x3a, 0x73, 0x4f, 0xe9, 0xb9, 0x63, 0x8c, 0x26, 0x3a, 0x72, 0x8a, 0xd9, 0x5a, 0x5a, 0xe8, 0xce, 0x3e, 0xb1, 0x58, 0x39, 0xf3, 0xaa, 0x78, 0x52, 0xbb, 0x39, 0x07, 0x06, 0xe7, 0x76, 0x0e, 0x43, 0xa7, 0x12, 0x91, 0xa2, 0xe3, 0xf8, 0x27, 0x23, 0x7d, 0xed, 0xa8, 0x51, 0x87, 0x4c, 0x51, 0x76, 0x65, 0xf5, 0x45, 0xf2, 0x72, 0x38, 0xdf, 0x86, 0x55, 0x7f, 0x37, 0x5d, 0x09, 0xcc, 0xd8, 0xbd, 0x15, 0xd8, 0xcc, 0xf6, 0x1f, 0x5d, 0x78, 0xca, 0x5c, 0x7f, 0x5c, 0xde, 0x78, 0x2e, 0x6b, 0xf5, 0xd0, 0x05, 0x70, 0x56, 0xd4, 0xba, 0xd9, 0x8b, 0x3d, 0x2f, 0x95, 0x75, 0xe8, 0x24, 0xab, 0x7a, 0x33, 0xff, 0x57, 0xb0, 0xac, 0x10, 0x0a, 0xb0, 0xd6, 0xea, 0xd7, 0xaa, 0x0b, 0x50, 0xf6, 0xe4, 0xd3, 0xe5, 0xec, 0x0b, 0x96, 0x6b } -, - /* Salt */ - 20, - { 0x81, 0x57, 0x79, 0xa9, 0x1b, 0x3a, 0x8b, 0xd0, 0x49, 0xbf, 0x2a, 0xeb, 0x92, 0x01, 0x42, 0x77, 0x22, 0x22, 0xc9, 0xca } -, - /* Signature */ - 129, - { 0x05, 0xe0, 0xfd, 0xbd, 0xf6, 0xf7, 0x56, 0xef, 0x73, 0x31, 0x85, 0xcc, 0xfa, 0x8c, 0xed, 0x2e, 0xb6, 0xd0, 0x29, 0xd9, 0xd5, 0x6e, 0x35, 0x56, 0x1b, 0x5d, 0xb8, 0xe7, 0x02, 0x57, 0xee, 0x6f, 0xd0, 0x19, 0xd2, 0xf0, 0xbb, 0xf6, 0x69, 0xfe, 0x9b, 0x98, 0x21, 0xe7, 0x8d, 0xf6, 0xd4, 0x1e, 0x31, 0x60, 0x8d, 0x58, 0x28, 0x0f, 0x31, 0x8e, 0xe3, 0x4f, 0x55, 0x99, 0x41, 0xc8, 0xdf, 0x13, 0x28, 0x75, 0x74, 0xba, 0xc0, 0x00, 0xb7, 0xe5, 0x8d, 0xc4, 0xf4, 0x14, 0xba, 0x49, 0xfb, 0x12, 0x7f, 0x9d, 0x0f, 0x89, 0x36, 0x63, 0x8c, 0x76, 0xe8, 0x53, 0x56, 0xc9, 0x94, 0xf7, 0x97, 0x50, 0xf7, 0xfa, 0x3c, 0xf4, 0xfd, 0x48, 0x2d, 0xf7, 0x5e, 0x3f, 0xb9, 0x97, 0x8c, 0xd0, 0x61, 0xf7, 0xab, 0xb1, 0x75, 0x72, 0xe6, 0xe6, 0x3e, 0x0b, 0xde, 0x12, 0xcb, 0xdc, 0xf1, 0x8c, 0x68, 0xb9, 0x79 } - -} -, -{ - "RSASSA-PSS Signature Example 5.4", - /* Message to be signed */ - 13, - { 0x32, 0x8c, 0x65, 0x9e, 0x0a, 0x64, 0x37, 0x43, 0x3c, 0xce, 0xb7, 0x3c, 0x14 } -, - /* Salt */ - 20, - { 0x9a, 0xec, 0x4a, 0x74, 0x80, 0xd5, 0xbb, 0xc4, 0x29, 0x20, 0xd7, 0xca, 0x23, 0x5d, 0xb6, 0x74, 0x98, 0x9c, 0x9a, 0xac } -, - /* Signature */ - 129, - { 0x0b, 0xc9, 0x89, 0x85, 0x3b, 0xc2, 0xea, 0x86, 0x87, 0x32, 0x71, 0xce, 0x18, 0x3a, 0x92, 0x3a, 0xb6, 0x5e, 0x8a, 0x53, 0x10, 0x0e, 0x6d, 0xf5, 0xd8, 0x7a, 0x24, 0xc4, 0x19, 0x4e, 0xb7, 0x97, 0x81, 0x3e, 0xe2, 0xa1, 0x87, 0xc0, 0x97, 0xdd, 0x87, 0x2d, 0x59, 0x1d, 0xa6, 0x0c, 0x56, 0x86, 0x05, 0xdd, 0x7e, 0x74, 0x2d, 0x5a, 0xf4, 0xe3, 0x3b, 0x11, 0x67, 0x8c, 0xcb, 0x63, 0x90, 0x32, 0x04, 0xa3, 0xd0, 0x80, 0xb0, 0x90, 0x2c, 0x89, 0xab, 0xa8, 0x86, 0x8f, 0x00, 0x9c, 0x0f, 0x1c, 0x0c, 0xb8, 0x58, 0x10, 0xbb, 0xdd, 0x29, 0x12, 0x1a, 0xbb, 0x84, 0x71, 0xff, 0x2d, 0x39, 0xe4, 0x9f, 0xd9, 0x2d, 0x56, 0xc6, 0x55, 0xc8, 0xe0, 0x37, 0xad, 0x18, 0xfa, 0xfb, 0xdc, 0x92, 0xc9, 0x58, 0x63, 0xf7, 0xf6, 0x1e, 0xa9, 0xef, 0xa2, 0x8f, 0xea, 0x40, 0x13, 0x69, 0xd1, 0x9d, 0xae, 0xa1 } - -} -, -{ - "RSASSA-PSS Signature Example 5.5", - /* Message to be signed */ - 228, - { 0xf3, 0x7b, 0x96, 0x23, 0x79, 0xa4, 0x7d, 0x41, 0x5a, 0x37, 0x6e, 0xec, 0x89, 0x73, 0x15, 0x0b, 0xcb, 0x34, 0xed, 0xd5, 0xab, 0x65, 0x40, 0x41, 0xb6, 0x14, 0x30, 0x56, 0x0c, 0x21, 0x44, 0x58, 0x2b, 0xa1, 0x33, 0xc8, 0x67, 0xd8, 0x52, 0xd6, 0xb8, 0xe2, 0x33, 0x21, 0x90, 0x13, 0x02, 0xec, 0xb4, 0x5b, 0x09, 0xec, 0x88, 0xb1, 0x52, 0x71, 0x78, 0xfa, 0x04, 0x32, 0x63, 0xf3, 0x06, 0x7d, 0x9f, 0xfe, 0x97, 0x30, 0x32, 0xa9, 0x9f, 0x4c, 0xb0, 0x8a, 0xd2, 0xc7, 0xe0, 0xa2, 0x45, 0x6c, 0xdd, 0x57, 0xa7, 0xdf, 0x56, 0xfe, 0x60, 0x53, 0x52, 0x7a, 0x5a, 0xeb, 0x67, 0xd7, 0xe5, 0x52, 0x06, 0x3c, 0x1c, 0xa9, 0x7b, 0x1b, 0xef, 0xfa, 0x7b, 0x39, 0xe9, 0x97, 0xca, 0xf2, 0x78, 0x78, 0xea, 0x0f, 0x62, 0xcb, 0xeb, 0xc8, 0xc2, 0x1d, 0xf4, 0xc8, 0x89, 0xa2, 0x02, 0x85, 0x1e, 0x94, 0x90, 0x88, 0x49, 0x0c, 0x24, 0x9b, 0x6e, 0x9a, 0xcf, 0x1d, 0x80, 0x63, 0xf5, 0xbe, 0x23, 0x43, 0x98, 0x9b, 0xf9, 0x5c, 0x4d, 0xa0, 0x1a, 0x2b, 0xe7, 0x8b, 0x4a, 0xb6, 0xb3, 0x78, 0x01, 0x5b, 0xc3, 0x79, 0x57, 0xf7, 0x69, 0x48, 0xb5, 0xe5, 0x8e, 0x44, 0x0c, 0x28, 0x45, 0x3d, 0x40, 0xd7, 0xcf, 0xd5, 0x7e, 0x7d, 0x69, 0x06, 0x00, 0x47, 0x4a, 0xb5, 0xe7, 0x59, 0x73, 0xb1, 0xea, 0x0c, 0x5f, 0x1e, 0x45, 0xd1, 0x41, 0x90, 0xaf, 0xe2, 0xf4, 0xeb, 0x6d, 0x3b, 0xdf, 0x71, 0xf1, 0xd2, 0xf8, 0xbb, 0x15, 0x6a, 0x1c, 0x29, 0x5d, 0x04, 0xaa, 0xeb, 0x9d, 0x68, 0x9d, 0xce, 0x79, 0xed, 0x62, 0xbc, 0x44, 0x3e } -, - /* Salt */ - 20, - { 0xe2, 0x0c, 0x1e, 0x98, 0x78, 0x51, 0x2c, 0x39, 0x97, 0x0f, 0x58, 0x37, 0x5e, 0x15, 0x49, 0xa6, 0x8b, 0x64, 0xf3, 0x1d } -, - /* Signature */ - 129, - { 0x0a, 0xef, 0xa9, 0x43, 0xb6, 0x98, 0xb9, 0x60, 0x9e, 0xdf, 0x89, 0x8a, 0xd2, 0x27, 0x44, 0xac, 0x28, 0xdc, 0x23, 0x94, 0x97, 0xce, 0xa3, 0x69, 0xcb, 0xbd, 0x84, 0xf6, 0x5c, 0x95, 0xc0, 0xad, 0x77, 0x6b, 0x59, 0x47, 0x40, 0x16, 0x4b, 0x59, 0xa7, 0x39, 0xc6, 0xff, 0x7c, 0x2f, 0x07, 0xc7, 0xc0, 0x77, 0xa8, 0x6d, 0x95, 0x23, 0x8f, 0xe5, 0x1e, 0x1f, 0xcf, 0x33, 0x57, 0x4a, 0x4a, 0xe0, 0x68, 0x4b, 0x42, 0xa3, 0xf6, 0xbf, 0x67, 0x7d, 0x91, 0x82, 0x0c, 0xa8, 0x98, 0x74, 0x46, 0x7b, 0x2c, 0x23, 0xad, 0xd7, 0x79, 0x69, 0xc8, 0x07, 0x17, 0x43, 0x0d, 0x0e, 0xfc, 0x1d, 0x36, 0x95, 0x89, 0x2c, 0xe8, 0x55, 0xcb, 0x7f, 0x70, 0x11, 0x63, 0x0f, 0x4d, 0xf2, 0x6d, 0xef, 0x8d, 0xdf, 0x36, 0xfc, 0x23, 0x90, 0x5f, 0x57, 0xfa, 0x62, 0x43, 0xa4, 0x85, 0xc7, 0x70, 0xd5, 0x68, 0x1f, 0xcd } - -} -, -{ - "RSASSA-PSS Signature Example 5.6", - /* Message to be signed */ - 138, - { 0xc6, 0x10, 0x3c, 0x33, 0x0c, 0x1e, 0xf7, 0x18, 0xc1, 0x41, 0xe4, 0x7b, 0x8f, 0xa8, 0x59, 0xbe, 0x4d, 0x5b, 0x96, 0x25, 0x9e, 0x7d, 0x14, 0x20, 0x70, 0xec, 0xd4, 0x85, 0x83, 0x9d, 0xba, 0x5a, 0x83, 0x69, 0xc1, 0x7c, 0x11, 0x14, 0x03, 0x5e, 0x53, 0x2d, 0x19, 0x5c, 0x74, 0xf4, 0x4a, 0x04, 0x76, 0xa2, 0xd3, 0xe8, 0xa4, 0xda, 0x21, 0x00, 0x16, 0xca, 0xce, 0xd0, 0xe3, 0x67, 0xcb, 0x86, 0x77, 0x10, 0xa4, 0xb5, 0xaa, 0x2d, 0xf2, 0xb8, 0xe5, 0xda, 0xf5, 0xfd, 0xc6, 0x47, 0x80, 0x7d, 0x4d, 0x5e, 0xbb, 0x6c, 0x56, 0xb9, 0x76, 0x3c, 0xcd, 0xae, 0x4d, 0xea, 0x33, 0x08, 0xeb, 0x0a, 0xc2, 0xa8, 0x95, 0x01, 0xcb, 0x20, 0x9d, 0x26, 0x39, 0xfa, 0x5b, 0xf8, 0x7c, 0xe7, 0x90, 0x74, 0x7d, 0x3c, 0xb2, 0xd2, 0x95, 0xe8, 0x45, 0x64, 0xf2, 0xf6, 0x37, 0x82, 0x4f, 0x0c, 0x13, 0x02, 0x81, 0x29, 0xb0, 0xaa, 0x4a, 0x42, 0x2d, 0x16, 0x22, 0x82 } -, - /* Salt */ - 20, - { 0x23, 0x29, 0x1e, 0x4a, 0x33, 0x07, 0xe8, 0xbb, 0xb7, 0x76, 0x62, 0x3a, 0xb3, 0x4e, 0x4a, 0x5f, 0x4c, 0xc8, 0xa8, 0xdb } -, - /* Signature */ - 129, - { 0x02, 0x80, 0x2d, 0xcc, 0xfa, 0x8d, 0xfa, 0xf5, 0x27, 0x9b, 0xf0, 0xb4, 0xa2, 0x9b, 0xa1, 0xb1, 0x57, 0x61, 0x1f, 0xae, 0xaa, 0xf4, 0x19, 0xb8, 0x91, 0x9d, 0x15, 0x94, 0x19, 0x00, 0xc1, 0x33, 0x9e, 0x7e, 0x92, 0xe6, 0xfa, 0xe5, 0x62, 0xc5, 0x3e, 0x6c, 0xc8, 0xe8, 0x41, 0x04, 0xb1, 0x10, 0xbc, 0xe0, 0x3a, 0xd1, 0x85, 0x25, 0xe3, 0xc4, 0x9a, 0x0e, 0xad, 0xad, 0x5d, 0x3f, 0x28, 0xf2, 0x44, 0xa8, 0xed, 0x89, 0xed, 0xba, 0xfb, 0xb6, 0x86, 0x27, 0x7c, 0xfa, 0x8a, 0xe9, 0x09, 0x71, 0x4d, 0x6b, 0x28, 0xf4, 0xbf, 0x8e, 0x29, 0x3a, 0xa0, 0x4c, 0x41, 0xef, 0xe7, 0xc0, 0xa8, 0x12, 0x66, 0xd5, 0xc0, 0x61, 0xe2, 0x57, 0x5b, 0xe0, 0x32, 0xaa, 0x46, 0x46, 0x74, 0xff, 0x71, 0x62, 0x62, 0x19, 0xbd, 0x74, 0xcc, 0x45, 0xf0, 0xe7, 0xed, 0x4e, 0x3f, 0xf9, 0x6e, 0xee, 0x75, 0x8e, 0x8f } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 6: A 1029-bit RSA Key Pair", -{ - /* RSA modulus n */ - 129, - { 0x16, 0x4c, 0xa3, 0x1c, 0xff, 0x60, 0x9f, 0x3a, 0x0e, 0x71, 0x01, 0xb0, 0x39, 0xf2, 0xe4, 0xfe, 0x6d, 0xd3, 0x75, 0x19, 0xab, 0x98, 0x59, 0x8d, 0x17, 0x9e, 0x17, 0x49, 0x96, 0x59, 0x80, 0x71, 0xf4, 0x7d, 0x3a, 0x04, 0x55, 0x91, 0x58, 0xd7, 0xbe, 0x37, 0x3c, 0xf1, 0xaa, 0x53, 0xf0, 0xaa, 0x6e, 0xf0, 0x90, 0x39, 0xe5, 0x67, 0x8c, 0x2a, 0x4c, 0x63, 0x90, 0x05, 0x14, 0xc8, 0xc4, 0xf8, 0xaa, 0xed, 0x5d, 0xe1, 0x2a, 0x5f, 0x10, 0xb0, 0x9c, 0x31, 0x1a, 0xf8, 0xc0, 0xff, 0xb5, 0xb7, 0xa2, 0x97, 0xf2, 0xef, 0xc6, 0x3b, 0x8d, 0x6b, 0x05, 0x10, 0x93, 0x1f, 0x0b, 0x98, 0xe4, 0x8b, 0xf5, 0xfc, 0x6e, 0xc4, 0xe7, 0xb8, 0xdb, 0x1f, 0xfa, 0xeb, 0x08, 0xc3, 0x8e, 0x02, 0xad, 0xb8, 0xf0, 0x3a, 0x48, 0x22, 0x9c, 0x99, 0xe9, 0x69, 0x43, 0x1f, 0x61, 0xcb, 0x8c, 0x4d, 0xc6, 0x98, 0xd1 } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 129, - { 0x03, 0xb6, 0x64, 0xee, 0x3b, 0x75, 0x66, 0x72, 0x3f, 0xc6, 0xea, 0xf2, 0x8a, 0xbb, 0x43, 0x0a, 0x39, 0x80, 0xf1, 0x12, 0x6c, 0x81, 0xde, 0x8a, 0xd7, 0x09, 0xea, 0xb3, 0x9a, 0xc9, 0xdc, 0xd0, 0xb1, 0x55, 0x0b, 0x37, 0x29, 0xd8, 0x70, 0x68, 0xe9, 0x52, 0x00, 0x9d, 0xf5, 0x44, 0x53, 0x4c, 0x1f, 0x50, 0x82, 0x9a, 0x78, 0xf4, 0x59, 0x1e, 0xb8, 0xfd, 0x57, 0x14, 0x04, 0x26, 0xa6, 0xbb, 0x04, 0x05, 0xb6, 0xa6, 0xf5, 0x1a, 0x57, 0xd9, 0x26, 0x7b, 0x7b, 0xbc, 0x65, 0x33, 0x91, 0xa6, 0x99, 0xa2, 0xa9, 0x0d, 0xac, 0x8a, 0xe2, 0x26, 0xbc, 0xc6, 0x0f, 0xa8, 0xcd, 0x93, 0x4c, 0x73, 0xc7, 0xb0, 0x3b, 0x1f, 0x6b, 0x81, 0x81, 0x58, 0x63, 0x18, 0x38, 0xa8, 0x61, 0x2e, 0x6e, 0x6e, 0xa9, 0x2b, 0xe2, 0x4f, 0x83, 0x24, 0xfa, 0xf5, 0xb1, 0xfd, 0x85, 0x87, 0x22, 0x52, 0x67, 0xba, 0x6f } -, - /* Prime p */ - 65, - { 0x04, 0xf0, 0x54, 0x8c, 0x96, 0x26, 0xab, 0x1e, 0xbf, 0x12, 0x44, 0x93, 0x47, 0x41, 0xd9, 0x9a, 0x06, 0x22, 0x0e, 0xfa, 0x2a, 0x58, 0x56, 0xaa, 0x0e, 0x75, 0x73, 0x0b, 0x2e, 0xc9, 0x6a, 0xdc, 0x86, 0xbe, 0x89, 0x4f, 0xa2, 0x80, 0x3b, 0x53, 0xa5, 0xe8, 0x5d, 0x27, 0x6a, 0xcb, 0xd2, 0x9a, 0xb8, 0x23, 0xf8, 0x0a, 0x73, 0x91, 0xbb, 0x54, 0xa5, 0x05, 0x16, 0x72, 0xfb, 0x04, 0xee, 0xb5, 0x43 } -, - /* Prime q */ - 65, - { 0x04, 0x83, 0xe0, 0xae, 0x47, 0x91, 0x55, 0x87, 0x74, 0x3f, 0xf3, 0x45, 0x36, 0x2b, 0x55, 0x5d, 0x39, 0x62, 0xd9, 0x8b, 0xb6, 0xf1, 0x5f, 0x84, 0x8b, 0x4c, 0x92, 0xb1, 0x77, 0x1c, 0xa8, 0xed, 0x10, 0x7d, 0x8d, 0x3e, 0xe6, 0x5e, 0xc4, 0x45, 0x17, 0xdd, 0x0f, 0xaa, 0x48, 0x1a, 0x38, 0x7e, 0x90, 0x2f, 0x7a, 0x2e, 0x74, 0x7c, 0x26, 0x9e, 0x7e, 0xa4, 0x44, 0x80, 0xbc, 0x53, 0x8b, 0x8e, 0x5b } -, - /* p's CRT exponent dP */ - 65, - { 0x03, 0xa8, 0xe8, 0xae, 0xa9, 0x92, 0x0c, 0x1a, 0xa3, 0xb2, 0xf0, 0xd8, 0x46, 0xe4, 0xb8, 0x50, 0xd8, 0x1c, 0xa3, 0x06, 0xa5, 0x1c, 0x83, 0x54, 0x4f, 0x94, 0x9f, 0x64, 0xf9, 0x0d, 0xcf, 0x3f, 0x8e, 0x26, 0x61, 0xf0, 0x7e, 0x56, 0x12, 0x20, 0xa1, 0x80, 0x38, 0x8f, 0xbe, 0x27, 0x3e, 0x70, 0xe2, 0xe5, 0xdc, 0xa8, 0x3a, 0x0e, 0x13, 0x48, 0xdd, 0x64, 0x90, 0xc7, 0x31, 0xd6, 0xec, 0xe1, 0xab } -, - /* q's CRT exponent dQ */ - 65, - { 0x01, 0x35, 0xbd, 0xcd, 0xb6, 0x0b, 0xf2, 0x19, 0x7c, 0x43, 0x6e, 0xd3, 0x4b, 0x32, 0xcd, 0x8b, 0x4f, 0xc7, 0x77, 0x78, 0x83, 0x2b, 0xa7, 0x67, 0x03, 0x55, 0x1f, 0xb2, 0x42, 0xb3, 0x01, 0x69, 0x95, 0x93, 0xaf, 0x77, 0xfd, 0x8f, 0xc3, 0x94, 0xa8, 0x52, 0x6a, 0xd2, 0x3c, 0xc4, 0x1a, 0x03, 0x80, 0x6b, 0xd8, 0x97, 0xfe, 0x4b, 0x0e, 0xa6, 0x46, 0x55, 0x8a, 0xad, 0xdc, 0xc9, 0x9e, 0x8a, 0x25 } -, - /* CRT coefficient qInv */ - 65, - { 0x03, 0x04, 0xc0, 0x3d, 0x9c, 0x73, 0x65, 0x03, 0xa9, 0x84, 0xab, 0xbd, 0x9b, 0xa2, 0x23, 0x01, 0x40, 0x7c, 0x4a, 0x2a, 0xb1, 0xdd, 0x85, 0x76, 0x64, 0x81, 0xb6, 0x0d, 0x45, 0x40, 0x11, 0x52, 0xe6, 0x92, 0xbe, 0x14, 0xf4, 0x12, 0x1d, 0x9a, 0xa3, 0xfd, 0x6e, 0x0b, 0x4d, 0x1d, 0x3a, 0x97, 0x35, 0x38, 0xa3, 0x1d, 0x42, 0xee, 0x6e, 0x1e, 0x5e, 0xf6, 0x20, 0x23, 0x1a, 0x2b, 0xba, 0xf3, 0x5f } - -} -, -{{ - "RSASSA-PSS Signature Example 6.1", - /* Message to be signed */ - 109, - { 0x0a, 0x20, 0xb7, 0x74, 0xad, 0xdc, 0x2f, 0xa5, 0x12, 0x45, 0xed, 0x7c, 0xb9, 0xda, 0x60, 0x9e, 0x50, 0xca, 0xc6, 0x63, 0x6a, 0x52, 0x54, 0x3f, 0x97, 0x45, 0x8e, 0xed, 0x73, 0x40, 0xf8, 0xd5, 0x3f, 0xfc, 0x64, 0x91, 0x8f, 0x94, 0x90, 0x78, 0xee, 0x03, 0xef, 0x60, 0xd4, 0x2b, 0x5f, 0xec, 0x24, 0x60, 0x50, 0xbd, 0x55, 0x05, 0xcd, 0x8c, 0xb5, 0x97, 0xba, 0xd3, 0xc4, 0xe7, 0x13, 0xb0, 0xef, 0x30, 0x64, 0x4e, 0x76, 0xad, 0xab, 0xb0, 0xde, 0x01, 0xa1, 0x56, 0x1e, 0xfb, 0x25, 0x51, 0x58, 0xc7, 0x4f, 0xc8, 0x01, 0xe6, 0xe9, 0x19, 0xe5, 0x81, 0xb4, 0x6f, 0x0f, 0x0d, 0xdd, 0x08, 0xe4, 0xf3, 0x4c, 0x78, 0x10, 0xb5, 0xed, 0x83, 0x18, 0xf9, 0x1d, 0x7c, 0x8c } -, - /* Salt */ - 20, - { 0x5b, 0x4e, 0xa2, 0xef, 0x62, 0x9c, 0xc2, 0x2f, 0x3b, 0x53, 0x8e, 0x01, 0x69, 0x04, 0xb4, 0x7b, 0x1e, 0x40, 0xbf, 0xd5 } -, - /* Signature */ - 129, - { 0x04, 0xc0, 0xcf, 0xac, 0xec, 0x04, 0xe5, 0xba, 0xdb, 0xec, 0xe1, 0x59, 0xa5, 0xa1, 0x10, 0x3f, 0x69, 0xb3, 0xf3, 0x2b, 0xa5, 0x93, 0xcb, 0x4c, 0xc4, 0xb1, 0xb7, 0xab, 0x45, 0x59, 0x16, 0xa9, 0x6a, 0x27, 0xcd, 0x26, 0x78, 0xea, 0x0f, 0x46, 0xba, 0x37, 0xf7, 0xfc, 0x9c, 0x86, 0x32, 0x5f, 0x29, 0x73, 0x3b, 0x38, 0x9f, 0x1d, 0x97, 0xf4, 0x3e, 0x72, 0x01, 0xc0, 0xf3, 0x48, 0xfc, 0x45, 0xfe, 0x42, 0x89, 0x23, 0x35, 0x36, 0x2e, 0xee, 0x01, 0x8b, 0x5b, 0x16, 0x1f, 0x2f, 0x93, 0x93, 0x03, 0x12, 0x25, 0xc7, 0x13, 0x01, 0x2a, 0x57, 0x6b, 0xc8, 0x8e, 0x23, 0x05, 0x24, 0x89, 0x86, 0x8d, 0x90, 0x10, 0xcb, 0xf0, 0x33, 0xec, 0xc5, 0x68, 0xe8, 0xbc, 0x15, 0x2b, 0xdc, 0x59, 0xd5, 0x60, 0xe4, 0x12, 0x91, 0x91, 0x5d, 0x28, 0x56, 0x52, 0x08, 0xe2, 0x2a, 0xee, 0xc9, 0xef, 0x85, 0xd1 } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSASSA-PSS Signature Example 6.2", - /* Message to be signed */ - 199, - { 0x2a, 0xaf, 0xf6, 0x63, 0x1f, 0x62, 0x1c, 0xe6, 0x15, 0x76, 0x0a, 0x9e, 0xbc, 0xe9, 0x4b, 0xb3, 0x33, 0x07, 0x7a, 0xd8, 0x64, 0x88, 0xc8, 0x61, 0xd4, 0xb7, 0x6d, 0x29, 0xc1, 0xf4, 0x87, 0x46, 0xc6, 0x11, 0xae, 0x1e, 0x03, 0xce, 0xd4, 0x44, 0x5d, 0x7c, 0xfa, 0x1f, 0xe5, 0xf6, 0x2e, 0x1b, 0x3f, 0x08, 0x45, 0x2b, 0xde, 0x3b, 0x6e, 0xf8, 0x19, 0x73, 0xba, 0xfb, 0xb5, 0x7f, 0x97, 0xbc, 0xee, 0xf8, 0x73, 0x98, 0x53, 0x95, 0xb8, 0x26, 0x05, 0x89, 0xaa, 0x88, 0xcb, 0x7d, 0xb5, 0x0a, 0xb4, 0x69, 0x26, 0x2e, 0x55, 0x1b, 0xdc, 0xd9, 0xa5, 0x6f, 0x27, 0x5a, 0x0a, 0xc4, 0xfe, 0x48, 0x47, 0x00, 0xc3, 0x5f, 0x3d, 0xbf, 0x2b, 0x46, 0x9e, 0xde, 0x86, 0x47, 0x41, 0xb8, 0x6f, 0xa5, 0x91, 0x72, 0xa3, 0x60, 0xba, 0x95, 0xa0, 0x2e, 0x13, 0x9b, 0xe5, 0x0d, 0xdf, 0xb7, 0xcf, 0x0b, 0x42, 0xfa, 0xea, 0xbb, 0xfb, 0xba, 0xa8, 0x6a, 0x44, 0x97, 0x69, 0x9c, 0x4f, 0x2d, 0xfd, 0x5b, 0x08, 0x40, 0x6a, 0xf7, 0xe1, 0x41, 0x44, 0x42, 0x7c, 0x25, 0x3e, 0xc0, 0xef, 0xa2, 0x0e, 0xaf, 0x9a, 0x8b, 0xe8, 0xcd, 0x49, 0xce, 0x1f, 0x1b, 0xc4, 0xe9, 0x3e, 0x61, 0x9c, 0xf2, 0xaa, 0x8e, 0xd4, 0xfb, 0x39, 0xbc, 0x85, 0x90, 0xd0, 0xf7, 0xb9, 0x64, 0x88, 0xf7, 0x31, 0x7a, 0xc9, 0xab, 0xf7, 0xbe, 0xe4, 0xe3, 0xa0, 0xe7, 0x15 } -, - /* Salt */ - 20, - { 0x83, 0x14, 0x6a, 0x9e, 0x78, 0x27, 0x22, 0xc2, 0x8b, 0x01, 0x4f, 0x98, 0xb4, 0x26, 0x7b, 0xda, 0x2a, 0xc9, 0x50, 0x4f } -, - /* Signature */ - 129, - { 0x0a, 0x23, 0x14, 0x25, 0x0c, 0xf5, 0x2b, 0x6e, 0x4e, 0x90, 0x8d, 0xe5, 0xb3, 0x56, 0x46, 0xbc, 0xaa, 0x24, 0x36, 0x1d, 0xa8, 0x16, 0x0f, 0xb0, 0xf9, 0x25, 0x75, 0x90, 0xab, 0x3a, 0xce, 0x42, 0xb0, 0xdc, 0x3e, 0x77, 0xad, 0x2d, 0xb7, 0xc2, 0x03, 0xa2, 0x0b, 0xd9, 0x52, 0xfb, 0xb5, 0x6b, 0x15, 0x67, 0x04, 0x6e, 0xcf, 0xaa, 0x93, 0x3d, 0x7b, 0x10, 0x00, 0xc3, 0xde, 0x9f, 0xf0, 0x5b, 0x7d, 0x98, 0x9b, 0xa4, 0x6f, 0xd4, 0x3b, 0xc4, 0xc2, 0xd0, 0xa3, 0x98, 0x6b, 0x7f, 0xfa, 0x13, 0x47, 0x1d, 0x37, 0xeb, 0x5b, 0x47, 0xd6, 0x47, 0x07, 0xbd, 0x29, 0x0c, 0xfd, 0x6a, 0x9f, 0x39, 0x3a, 0xd0, 0x8e, 0xc1, 0xe3, 0xbd, 0x71, 0xbb, 0x57, 0x92, 0x61, 0x50, 0x35, 0xcd, 0xaf, 0x2d, 0x89, 0x29, 0xae, 0xd3, 0xbe, 0x09, 0x83, 0x79, 0x37, 0x7e, 0x77, 0x7c, 0xe7, 0x9a, 0xaa, 0x47, 0x73 } - -} -, -{ - "RSASSA-PSS Signature Example 6.3", - /* Message to be signed */ - 62, - { 0x0f, 0x61, 0x95, 0xd0, 0x4a, 0x6e, 0x6f, 0xc7, 0xe2, 0xc9, 0x60, 0x0d, 0xbf, 0x84, 0x0c, 0x39, 0xea, 0x8d, 0x4d, 0x62, 0x4f, 0xd5, 0x35, 0x07, 0x01, 0x6b, 0x0e, 0x26, 0x85, 0x8a, 0x5e, 0x0a, 0xec, 0xd7, 0xad, 0xa5, 0x43, 0xae, 0x5c, 0x0a, 0xb3, 0xa6, 0x25, 0x99, 0xcb, 0xa0, 0xa5, 0x4e, 0x6b, 0xf4, 0x46, 0xe2, 0x62, 0xf9, 0x89, 0x97, 0x8f, 0x9d, 0xdf, 0x5e, 0x9a, 0x41 } -, - /* Salt */ - 20, - { 0xa8, 0x7b, 0x8a, 0xed, 0x07, 0xd7, 0xb8, 0xe2, 0xda, 0xf1, 0x4d, 0xdc, 0xa4, 0xac, 0x68, 0xc4, 0xd0, 0xaa, 0xbf, 0xf8 } -, - /* Signature */ - 129, - { 0x08, 0x6d, 0xf6, 0xb5, 0x00, 0x09, 0x8c, 0x12, 0x0f, 0x24, 0xff, 0x84, 0x23, 0xf7, 0x27, 0xd9, 0xc6, 0x1a, 0x5c, 0x90, 0x07, 0xd3, 0xb6, 0xa3, 0x1c, 0xe7, 0xcf, 0x8f, 0x3c, 0xbe, 0xc1, 0xa2, 0x6b, 0xb2, 0x0e, 0x2b, 0xd4, 0xa0, 0x46, 0x79, 0x32, 0x99, 0xe0, 0x3e, 0x37, 0xa2, 0x1b, 0x40, 0x19, 0x4f, 0xb0, 0x45, 0xf9, 0x0b, 0x18, 0xbf, 0x20, 0xa4, 0x79, 0x92, 0xcc, 0xd7, 0x99, 0xcf, 0x9c, 0x05, 0x9c, 0x29, 0x9c, 0x05, 0x26, 0x85, 0x49, 0x54, 0xaa, 0xde, 0x8a, 0x6a, 0xd9, 0xd9, 0x7e, 0xc9, 0x1a, 0x11, 0x45, 0x38, 0x3f, 0x42, 0x46, 0x8b, 0x23, 0x1f, 0x4d, 0x72, 0xf2, 0x37, 0x06, 0xd9, 0x85, 0x3c, 0x3f, 0xa4, 0x3c, 0xe8, 0xac, 0xe8, 0xbf, 0xe7, 0x48, 0x49, 0x87, 0xa1, 0xec, 0x6a, 0x16, 0xc8, 0xda, 0xf8, 0x1f, 0x7c, 0x8b, 0xf4, 0x27, 0x74, 0x70, 0x7a, 0x9d, 0xf4, 0x56 } - -} -, -{ - "RSASSA-PSS Signature Example 6.4", - /* Message to be signed */ - 112, - { 0x33, 0x7d, 0x25, 0xfe, 0x98, 0x10, 0xeb, 0xca, 0x0d, 0xe4, 0xd4, 0x65, 0x8d, 0x3c, 0xeb, 0x8e, 0x0f, 0xe4, 0xc0, 0x66, 0xab, 0xa3, 0xbc, 0xc4, 0x8b, 0x10, 0x5d, 0x3b, 0xf7, 0xe0, 0x25, 0x7d, 0x44, 0xfe, 0xce, 0xa6, 0x59, 0x6f, 0x4d, 0x0c, 0x59, 0xa0, 0x84, 0x02, 0x83, 0x36, 0x78, 0xf7, 0x06, 0x20, 0xf9, 0x13, 0x8d, 0xfe, 0xb7, 0xde, 0xd9, 0x05, 0xe4, 0xa6, 0xd5, 0xf0, 0x5c, 0x47, 0x3d, 0x55, 0x93, 0x66, 0x52, 0xe2, 0xa5, 0xdf, 0x43, 0xc0, 0xcf, 0xda, 0x7b, 0xac, 0xaf, 0x30, 0x87, 0xf4, 0x52, 0x4b, 0x06, 0xcf, 0x42, 0x15, 0x7d, 0x01, 0x53, 0x97, 0x39, 0xf7, 0xfd, 0xde, 0xc9, 0xd5, 0x81, 0x25, 0xdf, 0x31, 0xa3, 0x2e, 0xab, 0x06, 0xc1, 0x9b, 0x71, 0xf1, 0xd5, 0xbf } -, - /* Salt */ - 20, - { 0xa3, 0x79, 0x32, 0xf8, 0xa7, 0x49, 0x4a, 0x94, 0x2d, 0x6f, 0x76, 0x74, 0x38, 0xe7, 0x24, 0xd6, 0xd0, 0xc0, 0xef, 0x18 } -, - /* Signature */ - 129, - { 0x0b, 0x5b, 0x11, 0xad, 0x54, 0x98, 0x63, 0xff, 0xa9, 0xc5, 0x1a, 0x14, 0xa1, 0x10, 0x6c, 0x2a, 0x72, 0xcc, 0x8b, 0x64, 0x6e, 0x5c, 0x72, 0x62, 0x50, 0x97, 0x86, 0x10, 0x5a, 0x98, 0x47, 0x76, 0x53, 0x4c, 0xa9, 0xb5, 0x4c, 0x1c, 0xc6, 0x4b, 0xf2, 0xd5, 0xa4, 0x4f, 0xd7, 0xe8, 0xa6, 0x9d, 0xb6, 0x99, 0xd5, 0xea, 0x52, 0x08, 0x7a, 0x47, 0x48, 0xfd, 0x2a, 0xbc, 0x1a, 0xfe, 0xd1, 0xe5, 0xd6, 0xf7, 0xc8, 0x90, 0x25, 0x53, 0x0b, 0xda, 0xa2, 0x21, 0x3d, 0x7e, 0x03, 0x0f, 0xa5, 0x5d, 0xf6, 0xf3, 0x4b, 0xcf, 0x1c, 0xe4, 0x6d, 0x2e, 0xdf, 0x4e, 0x3a, 0xe4, 0xf3, 0xb0, 0x18, 0x91, 0xa0, 0x68, 0xc9, 0xe3, 0xa4, 0x4b, 0xbc, 0x43, 0x13, 0x3e, 0xda, 0xd6, 0xec, 0xb9, 0xf3, 0x54, 0x00, 0xc4, 0x25, 0x2a, 0x57, 0x62, 0xd6, 0x57, 0x44, 0xb9, 0x9c, 0xb9, 0xf4, 0xc5, 0x59, 0x32, 0x9f } - -} -, -{ - "RSASSA-PSS Signature Example 6.5", - /* Message to be signed */ - 176, - { 0x84, 0xec, 0x50, 0x2b, 0x07, 0x2e, 0x82, 0x87, 0x78, 0x9d, 0x8f, 0x92, 0x35, 0x82, 0x9e, 0xa3, 0xb1, 0x87, 0xaf, 0xd4, 0xd4, 0xc7, 0x85, 0x61, 0x1b, 0xda, 0x5f, 0x9e, 0xb3, 0xcb, 0x96, 0x71, 0x7e, 0xfa, 0x70, 0x07, 0x22, 0x7f, 0x1c, 0x08, 0xcb, 0xcb, 0x97, 0x2e, 0x66, 0x72, 0x35, 0xe0, 0xfb, 0x7d, 0x43, 0x1a, 0x65, 0x70, 0x32, 0x6d, 0x2e, 0xcc, 0xe3, 0x5a, 0xdb, 0x37, 0x3d, 0xc7, 0x53, 0xb3, 0xbe, 0x5f, 0x82, 0x9b, 0x89, 0x17, 0x54, 0x93, 0x19, 0x3f, 0xab, 0x16, 0xba, 0xdb, 0x41, 0x37, 0x1b, 0x3a, 0xac, 0x0a, 0xe6, 0x70, 0x07, 0x6f, 0x24, 0xbe, 0xf4, 0x20, 0xc1, 0x35, 0xad, 0xd7, 0xce, 0xe8, 0xd3, 0x5f, 0xbc, 0x94, 0x4d, 0x79, 0xfa, 0xfb, 0x9e, 0x30, 0x7a, 0x13, 0xb0, 0xf5, 0x56, 0xcb, 0x65, 0x4a, 0x06, 0xf9, 0x73, 0xed, 0x22, 0x67, 0x23, 0x30, 0x19, 0x7e, 0xf5, 0xa7, 0x48, 0xbf, 0x82, 0x6a, 0x5d, 0xb2, 0x38, 0x3a, 0x25, 0x36, 0x4b, 0x68, 0x6b, 0x93, 0x72, 0xbb, 0x23, 0x39, 0xae, 0xb1, 0xac, 0x9e, 0x98, 0x89, 0x32, 0x7d, 0x01, 0x6f, 0x16, 0x70, 0x77, 0x6d, 0xb0, 0x62, 0x01, 0xad, 0xbd, 0xca, 0xf8, 0xa5, 0xe3, 0xb7, 0x4e, 0x10, 0x8b, 0x73 } -, - /* Salt */ - 20, - { 0x7b, 0x79, 0x0c, 0x1d, 0x62, 0xf7, 0xb8, 0x4e, 0x94, 0xdf, 0x6a, 0xf2, 0x89, 0x17, 0xcf, 0x57, 0x10, 0x18, 0x11, 0x0e } -, - /* Signature */ - 129, - { 0x02, 0xd7, 0x1f, 0xa9, 0xb5, 0x3e, 0x46, 0x54, 0xfe, 0xfb, 0x7f, 0x08, 0x38, 0x5c, 0xf6, 0xb0, 0xae, 0x3a, 0x81, 0x79, 0x42, 0xeb, 0xf6, 0x6c, 0x35, 0xac, 0x67, 0xf0, 0xb0, 0x69, 0x95, 0x2a, 0x3c, 0xe9, 0xc7, 0xe1, 0xf1, 0xb0, 0x2e, 0x48, 0x0a, 0x95, 0x00, 0x83, 0x6d, 0xe5, 0xd6, 0x4c, 0xdb, 0x7e, 0xcd, 0xe0, 0x45, 0x42, 0xf7, 0xa7, 0x99, 0x88, 0x78, 0x7e, 0x24, 0xc2, 0xba, 0x05, 0xf5, 0xfd, 0x48, 0x2c, 0x02, 0x3e, 0xd5, 0xc3, 0x0e, 0x04, 0x83, 0x9d, 0xc4, 0x4b, 0xed, 0x2a, 0x3a, 0x3a, 0x4f, 0xee, 0x01, 0x11, 0x3c, 0x89, 0x1a, 0x47, 0xd3, 0x2e, 0xb8, 0x02, 0x5c, 0x28, 0xcb, 0x05, 0x0b, 0x5c, 0xdb, 0x57, 0x6c, 0x70, 0xfe, 0x76, 0xef, 0x52, 0x34, 0x05, 0xc0, 0x84, 0x17, 0xfa, 0xf3, 0x50, 0xb0, 0x37, 0xa4, 0x3c, 0x37, 0x93, 0x39, 0xfc, 0xb1, 0x8d, 0x3a, 0x35, 0x6b } - -} -, -{ - "RSASSA-PSS Signature Example 6.6", - /* Message to be signed */ - 139, - { 0x99, 0x06, 0xd8, 0x9f, 0x97, 0xa9, 0xfd, 0xed, 0xd3, 0xcc, 0xd8, 0x24, 0xdb, 0x68, 0x73, 0x26, 0xf3, 0x0f, 0x00, 0xaa, 0x25, 0xa7, 0xfc, 0xa2, 0xaf, 0xcb, 0x3b, 0x0f, 0x86, 0xcd, 0x41, 0xe7, 0x3f, 0x0e, 0x8f, 0xf7, 0xd2, 0xd8, 0x3f, 0x59, 0xe2, 0x8e, 0xd3, 0x1a, 0x5a, 0x0d, 0x55, 0x15, 0x23, 0x37, 0x4d, 0xe2, 0x2e, 0x4c, 0x7e, 0x8f, 0xf5, 0x68, 0xb3, 0x86, 0xee, 0x3d, 0xc4, 0x11, 0x63, 0xf1, 0x0b, 0xf6, 0x7b, 0xb0, 0x06, 0x26, 0x1c, 0x90, 0x82, 0xf9, 0xaf, 0x90, 0xbf, 0x1d, 0x90, 0x49, 0xa6, 0xb9, 0xfa, 0xe7, 0x1c, 0x7f, 0x84, 0xfb, 0xe6, 0xe5, 0x5f, 0x02, 0x78, 0x9d, 0xe7, 0x74, 0xf2, 0x30, 0xf1, 0x15, 0x02, 0x6a, 0x4b, 0x4e, 0x96, 0xc5, 0x5b, 0x04, 0xa9, 0x5d, 0xa3, 0xaa, 0xcb, 0xb2, 0xce, 0xce, 0x8f, 0x81, 0x76, 0x4a, 0x1f, 0x1c, 0x99, 0x51, 0x54, 0x11, 0x08, 0x7c, 0xf7, 0xd3, 0x4a, 0xed, 0xed, 0x09, 0x32, 0xc1, 0x83 } -, - /* Salt */ - 20, - { 0xfb, 0xbe, 0x05, 0x90, 0x25, 0xb6, 0x9b, 0x89, 0xfb, 0x14, 0xae, 0x22, 0x89, 0xe7, 0xaa, 0xaf, 0xe6, 0x0c, 0x0f, 0xcd } -, - /* Signature */ - 129, - { 0x0a, 0x40, 0xa1, 0x6e, 0x2f, 0xe2, 0xb3, 0x8d, 0x1d, 0xf9, 0x05, 0x46, 0x16, 0x7c, 0xf9, 0x46, 0x9c, 0x9e, 0x3c, 0x36, 0x81, 0xa3, 0x44, 0x2b, 0x4b, 0x2c, 0x2f, 0x58, 0x1d, 0xeb, 0x38, 0x5c, 0xe9, 0x9f, 0xc6, 0x18, 0x8b, 0xb0, 0x2a, 0x84, 0x1d, 0x56, 0xe7, 0x6d, 0x30, 0x18, 0x91, 0xe2, 0x45, 0x60, 0x55, 0x0f, 0xcc, 0x2a, 0x26, 0xb5, 0x5f, 0x4c, 0xcb, 0x26, 0xd8, 0x37, 0xd3, 0x50, 0xa1, 0x54, 0xbc, 0xac, 0xa8, 0x39, 0x2d, 0x98, 0xfa, 0x67, 0x95, 0x9e, 0x97, 0x27, 0xb7, 0x8c, 0xad, 0x03, 0x26, 0x9f, 0x56, 0x96, 0x8f, 0xc5, 0x6b, 0x68, 0xbd, 0x67, 0x99, 0x26, 0xd8, 0x3c, 0xc9, 0xcb, 0x21, 0x55, 0x50, 0x64, 0x5c, 0xcd, 0xa3, 0x1c, 0x76, 0x0f, 0xf3, 0x58, 0x88, 0x94, 0x3d, 0x2d, 0x8a, 0x1d, 0x35, 0x1e, 0x81, 0xe5, 0xd0, 0x7b, 0x86, 0x18, 0x2e, 0x75, 0x10, 0x81, 0xef } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 7: A 1030-bit RSA Key Pair", -{ - /* RSA modulus n */ - 129, - { 0x37, 0xc9, 0xda, 0x4a, 0x66, 0xc8, 0xc4, 0x08, 0xb8, 0xda, 0x27, 0xd0, 0xc9, 0xd7, 0x9f, 0x8c, 0xcb, 0x1e, 0xaf, 0xc1, 0xd2, 0xfe, 0x48, 0x74, 0x6d, 0x94, 0x0b, 0x7c, 0x4e, 0xf5, 0xde, 0xe1, 0x8a, 0xd1, 0x26, 0x47, 0xce, 0xfa, 0xa0, 0xc4, 0xb3, 0x18, 0x8b, 0x22, 0x1c, 0x51, 0x53, 0x86, 0x75, 0x9b, 0x93, 0xf0, 0x20, 0x24, 0xb2, 0x5a, 0xb9, 0x24, 0x2f, 0x83, 0x57, 0xd8, 0xf3, 0xfd, 0x49, 0x64, 0x0e, 0xe5, 0xe6, 0x43, 0xea, 0xf6, 0xc6, 0x4d, 0xee, 0xfa, 0x70, 0x89, 0x72, 0x7c, 0x8f, 0xf0, 0x39, 0x93, 0x33, 0x39, 0x15, 0xc6, 0xef, 0x21, 0xbf, 0x59, 0x75, 0xb6, 0xe5, 0x0d, 0x11, 0x8b, 0x51, 0x00, 0x8e, 0xc3, 0x3e, 0x9f, 0x01, 0xa0, 0xa5, 0x45, 0xa1, 0x0a, 0x83, 0x6a, 0x43, 0xdd, 0xbc, 0xa9, 0xd8, 0xb5, 0xc5, 0xd3, 0x54, 0x80, 0x22, 0xd7, 0x06, 0x4e, 0xa2, 0x9a, 0xb3 } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 128, - { 0x3b, 0xed, 0x99, 0x90, 0x52, 0xd9, 0x57, 0xbc, 0x06, 0xd6, 0x51, 0xee, 0xf6, 0xe3, 0xa9, 0x80, 0x94, 0xb1, 0x62, 0x1b, 0xd3, 0x8b, 0x54, 0x49, 0xbd, 0x6c, 0x4a, 0xea, 0x3d, 0xe7, 0xe0, 0x84, 0x67, 0x9a, 0x44, 0x84, 0xde, 0xd2, 0x5b, 0xe0, 0xf0, 0x82, 0x6c, 0xf3, 0x37, 0x78, 0x25, 0x41, 0x4b, 0x14, 0xd4, 0xd6, 0x1d, 0xb1, 0x4d, 0xe6, 0x26, 0xfb, 0xb8, 0x0e, 0x5f, 0x4f, 0xae, 0xc9, 0x56, 0xf9, 0xa0, 0xa2, 0xd2, 0x4f, 0x99, 0x57, 0x63, 0x80, 0xf0, 0x84, 0xeb, 0x62, 0xe4, 0x6a, 0x57, 0xd5, 0x54, 0x27, 0x8b, 0x53, 0x56, 0x26, 0x19, 0x3c, 0xe0, 0x20, 0x60, 0x57, 0x5e, 0xb6, 0x6c, 0x57, 0x98, 0xd3, 0x6f, 0x6c, 0x5d, 0x40, 0xfb, 0x00, 0xd8, 0x09, 0xb4, 0x2a, 0x73, 0x10, 0x2c, 0x1c, 0x74, 0xee, 0x95, 0xbd, 0x71, 0x42, 0x0f, 0xff, 0xef, 0x63, 0x18, 0xb5, 0x2c, 0x29 } -, - /* Prime p */ - 65, - { 0x07, 0xee, 0xfb, 0x42, 0x4b, 0x0e, 0x3a, 0x40, 0xe4, 0x20, 0x8e, 0xe5, 0xaf, 0xb2, 0x80, 0xb2, 0x23, 0x17, 0x30, 0x81, 0x14, 0xdd, 0xe0, 0xb4, 0xb6, 0x4f, 0x73, 0x01, 0x84, 0xec, 0x68, 0xda, 0x6c, 0xe2, 0x86, 0x7a, 0x9f, 0x48, 0xed, 0x77, 0x26, 0xd5, 0xe2, 0x61, 0x4e, 0xd0, 0x4a, 0x54, 0x10, 0x73, 0x6c, 0x8c, 0x71, 0x4e, 0xe7, 0x02, 0x47, 0x42, 0x98, 0xc6, 0x29, 0x2a, 0xf0, 0x75, 0x35 } -, - /* Prime q */ - 65, - { 0x07, 0x08, 0x30, 0xdb, 0xf9, 0x47, 0xea, 0xc0, 0x22, 0x8d, 0xe2, 0x63, 0x14, 0xb5, 0x9b, 0x66, 0x99, 0x4c, 0xc6, 0x0e, 0x83, 0x60, 0xe7, 0x5d, 0x38, 0x76, 0x29, 0x8f, 0x8f, 0x8a, 0x7d, 0x14, 0x1d, 0xa0, 0x64, 0xe5, 0xca, 0x02, 0x6a, 0x97, 0x3e, 0x28, 0xf2, 0x54, 0x73, 0x8c, 0xee, 0x66, 0x9c, 0x72, 0x1b, 0x03, 0x4c, 0xb5, 0xf8, 0xe2, 0x44, 0xda, 0xdd, 0x7c, 0xd1, 0xe1, 0x59, 0xd5, 0x47 } -, - /* p's CRT exponent dP */ - 65, - { 0x05, 0x24, 0xd2, 0x0c, 0x3d, 0x95, 0xcf, 0xf7, 0x5a, 0xf2, 0x31, 0x34, 0x83, 0x22, 0x7d, 0x87, 0x02, 0x71, 0x7a, 0xa5, 0x76, 0xde, 0x15, 0x5f, 0x96, 0x05, 0x15, 0x50, 0x1a, 0xdb, 0x1d, 0x70, 0xe1, 0xc0, 0x4d, 0xe9, 0x1b, 0x75, 0xb1, 0x61, 0xdb, 0xf0, 0x39, 0x83, 0x56, 0x12, 0x7e, 0xde, 0xda, 0x7b, 0xbc, 0x19, 0xa3, 0x2d, 0xc1, 0x62, 0x1c, 0xc9, 0xf5, 0x3c, 0x26, 0x5d, 0x0c, 0xe3, 0x31 } -, - /* q's CRT exponent dQ */ - 65, - { 0x05, 0xf9, 0x84, 0xa1, 0xf2, 0x3c, 0x93, 0x8d, 0x6a, 0x0e, 0x89, 0x72, 0x4b, 0xcf, 0x3d, 0xd9, 0x3f, 0x99, 0x46, 0x92, 0x60, 0x37, 0xfe, 0x7c, 0x6b, 0x13, 0xa2, 0x9e, 0x52, 0x84, 0x85, 0x5f, 0x89, 0x08, 0x95, 0x91, 0xd4, 0x40, 0x97, 0x56, 0x27, 0xbf, 0x5c, 0x9e, 0x3a, 0x8b, 0x5c, 0xa7, 0x9c, 0x77, 0x2a, 0xd2, 0x73, 0xe4, 0x0d, 0x32, 0x1a, 0xf4, 0xa6, 0xc9, 0x7d, 0xfd, 0xed, 0x78, 0xd3 } -, - /* CRT coefficient qInv */ - 64, - { 0xdd, 0xd9, 0x18, 0xad, 0xad, 0xa2, 0x9d, 0xca, 0xb9, 0x81, 0xff, 0x9a, 0xcb, 0xa4, 0x25, 0x70, 0x23, 0xc0, 0x9a, 0x38, 0x01, 0xcc, 0xce, 0x09, 0x8c, 0xe2, 0x68, 0xf8, 0x55, 0xd0, 0xdf, 0x57, 0x0c, 0xd6, 0xe7, 0xb9, 0xb1, 0x4b, 0xd9, 0xa5, 0xa9, 0x25, 0x4c, 0xbc, 0x31, 0x5b, 0xe6, 0xf8, 0xba, 0x1e, 0x25, 0x46, 0xdd, 0xd5, 0x69, 0xc5, 0xea, 0x19, 0xee, 0xd8, 0x35, 0x3b, 0xde, 0x5e } - -} -, -{{ - "RSASSA-PSS Signature Example 7.1", - /* Message to be signed */ - 255, - { 0x9e, 0xad, 0x0e, 0x01, 0x94, 0x56, 0x40, 0x67, 0x4e, 0xb4, 0x1c, 0xad, 0x43, 0x5e, 0x23, 0x74, 0xea, 0xef, 0xa8, 0xad, 0x71, 0x97, 0xd9, 0x79, 0x13, 0xc4, 0x49, 0x57, 0xd8, 0xd8, 0x3f, 0x40, 0xd7, 0x6e, 0xe6, 0x0e, 0x39, 0xbf, 0x9c, 0x0f, 0x9e, 0xaf, 0x30, 0x21, 0x42, 0x1a, 0x07, 0x4d, 0x1a, 0xde, 0x96, 0x2c, 0x6e, 0x9d, 0x3d, 0xc3, 0xbb, 0x17, 0x4f, 0xe4, 0xdf, 0xe6, 0x52, 0xb0, 0x91, 0x15, 0x49, 0x5b, 0x8f, 0xd2, 0x79, 0x41, 0x74, 0x02, 0x0a, 0x06, 0x02, 0xb5, 0xca, 0x51, 0x84, 0x8c, 0xfc, 0x96, 0xce, 0x5e, 0xb5, 0x7f, 0xc0, 0xa2, 0xad, 0xc1, 0xdd, 0xa3, 0x6a, 0x7c, 0xc4, 0x52, 0x64, 0x1a, 0x14, 0x91, 0x1b, 0x37, 0xe4, 0x5b, 0xfa, 0x11, 0xda, 0xa5, 0xc7, 0xec, 0xdb, 0x74, 0xf6, 0xd0, 0x10, 0x0d, 0x1d, 0x3e, 0x39, 0xe7, 0x52, 0x80, 0x0e, 0x20, 0x33, 0x97, 0xde, 0x02, 0x33, 0x07, 0x7b, 0x9a, 0x88, 0x85, 0x55, 0x37, 0xfa, 0xe9, 0x27, 0xf9, 0x24, 0x38, 0x0d, 0x78, 0x0f, 0x98, 0xe1, 0x8d, 0xcf, 0xf3, 0x9c, 0x5e, 0xa7, 0x41, 0xb1, 0x7d, 0x6f, 0xdd, 0x18, 0x85, 0xbc, 0x9d, 0x58, 0x14, 0x82, 0xd7, 0x71, 0xce, 0xb5, 0x62, 0xd7, 0x8a, 0x8b, 0xf8, 0x8f, 0x0c, 0x75, 0xb1, 0x13, 0x63, 0xe5, 0xe3, 0x6c, 0xd4, 0x79, 0xce, 0xb0, 0x54, 0x5f, 0x9d, 0xa8, 0x42, 0x03, 0xe0, 0xe6, 0xe5, 0x08, 0x37, 0x5c, 0xc9, 0xe8, 0x44, 0xb8, 0x8b, 0x7a, 0xc7, 0xa0, 0xa2, 0x01, 0xea, 0x0f, 0x1b, 0xee, 0x9a, 0x2c, 0x57, 0x79, 0x20, 0xca, 0x02, 0xc0, 0x1b, 0x9d, 0x83, 0x20, 0xe9, 0x74, 0xa5, 0x6f, 0x4e, 0xfb, 0x57, 0x63, 0xb9, 0x62, 0x55, 0xab, 0xbf, 0x80, 0x37, 0xbf, 0x18, 0x02, 0xcf, 0x01, 0x8f, 0x56, 0x37, 0x94, 0x93, 0xe5, 0x69, 0xa9 } -, - /* Salt */ - 20, - { 0xb7, 0x86, 0x7a, 0x59, 0x95, 0x8c, 0xb5, 0x43, 0x28, 0xf8, 0x77, 0x5e, 0x65, 0x46, 0xec, 0x06, 0xd2, 0x7e, 0xaa, 0x50 } -, - /* Signature */ - 129, - { 0x18, 0x7f, 0x39, 0x07, 0x23, 0xc8, 0x90, 0x25, 0x91, 0xf0, 0x15, 0x4b, 0xae, 0x6d, 0x4e, 0xcb, 0xff, 0xe0, 0x67, 0xf0, 0xe8, 0xb7, 0x95, 0x47, 0x6e, 0xa4, 0xf4, 0xd5, 0x1c, 0xcc, 0x81, 0x05, 0x20, 0xbb, 0x3c, 0xa9, 0xbc, 0xa7, 0xd0, 0xb1, 0xf2, 0xea, 0x8a, 0x17, 0xd8, 0x73, 0xfa, 0x27, 0x57, 0x0a, 0xcd, 0x64, 0x2e, 0x38, 0x08, 0x56, 0x1c, 0xb9, 0xe9, 0x75, 0xcc, 0xfd, 0x80, 0xb2, 0x3d, 0xc5, 0x77, 0x1c, 0xdb, 0x33, 0x06, 0xa5, 0xf2, 0x31, 0x59, 0xda, 0xcb, 0xd3, 0xaa, 0x2d, 0xb9, 0x3d, 0x46, 0xd7, 0x66, 0xe0, 0x9e, 0xd1, 0x5d, 0x90, 0x0a, 0xd8, 0x97, 0xa8, 0xd2, 0x74, 0xdc, 0x26, 0xb4, 0x7e, 0x99, 0x4a, 0x27, 0xe9, 0x7e, 0x22, 0x68, 0xa7, 0x66, 0x53, 0x3a, 0xe4, 0xb5, 0xe4, 0x2a, 0x2f, 0xca, 0xf7, 0x55, 0xc1, 0xc4, 0x79, 0x4b, 0x29, 0x4c, 0x60, 0x55, 0x58, 0x23 } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSASSA-PSS Signature Example 7.2", - /* Message to be signed */ - 57, - { 0x8d, 0x80, 0xd2, 0xd0, 0x8d, 0xbd, 0x19, 0xc1, 0x54, 0xdf, 0x3f, 0x14, 0x67, 0x3a, 0x14, 0xbd, 0x03, 0x73, 0x52, 0x31, 0xf2, 0x4e, 0x86, 0xbf, 0x15, 0x3d, 0x0e, 0x69, 0xe7, 0x4c, 0xbf, 0xf7, 0xb1, 0x83, 0x6e, 0x66, 0x4d, 0xe8, 0x3f, 0x68, 0x01, 0x24, 0x37, 0x0f, 0xc0, 0xf9, 0x6c, 0x9b, 0x65, 0xc0, 0x7a, 0x36, 0x6b, 0x64, 0x4c, 0x4a, 0xb3 } -, - /* Salt */ - 20, - { 0x0c, 0x09, 0x58, 0x22, 0x66, 0xdf, 0x08, 0x63, 0x10, 0x82, 0x1b, 0xa7, 0xe1, 0x8d, 0xf6, 0x4d, 0xfe, 0xe6, 0xde, 0x09 } -, - /* Signature */ - 129, - { 0x10, 0xfd, 0x89, 0x76, 0x8a, 0x60, 0xa6, 0x77, 0x88, 0xab, 0xb5, 0x85, 0x6a, 0x78, 0x7c, 0x85, 0x61, 0xf3, 0xed, 0xcf, 0x9a, 0x83, 0xe8, 0x98, 0xf7, 0xdc, 0x87, 0xab, 0x8c, 0xce, 0x79, 0x42, 0x9b, 0x43, 0xe5, 0x69, 0x06, 0x94, 0x1a, 0x88, 0x61, 0x94, 0xf1, 0x37, 0xe5, 0x91, 0xfe, 0x7c, 0x33, 0x95, 0x55, 0x36, 0x1f, 0xbb, 0xe1, 0xf2, 0x4f, 0xeb, 0x2d, 0x4b, 0xcd, 0xb8, 0x06, 0x01, 0xf3, 0x09, 0x6b, 0xc9, 0x13, 0x2d, 0xee, 0xa6, 0x0a, 0xe1, 0x30, 0x82, 0xf4, 0x4f, 0x9a, 0xd4, 0x1c, 0xd6, 0x28, 0x93, 0x6a, 0x4d, 0x51, 0x17, 0x6e, 0x42, 0xfc, 0x59, 0xcb, 0x76, 0xdb, 0x81, 0x5c, 0xe5, 0xab, 0x4d, 0xb9, 0x9a, 0x10, 0x4a, 0xaf, 0xea, 0x68, 0xf5, 0xd3, 0x30, 0x32, 0x9e, 0xbf, 0x25, 0x8d, 0x4e, 0xde, 0x16, 0x06, 0x4b, 0xd1, 0xd0, 0x03, 0x93, 0xd5, 0xe1, 0x57, 0x0e, 0xb8 } - -} -, -{ - "RSASSA-PSS Signature Example 7.3", - /* Message to be signed */ - 92, - { 0x80, 0x84, 0x05, 0xcd, 0xfc, 0x1a, 0x58, 0xb9, 0xbb, 0x03, 0x97, 0xc7, 0x20, 0x72, 0x2a, 0x81, 0xff, 0xfb, 0x76, 0x27, 0x8f, 0x33, 0x59, 0x17, 0xef, 0x9c, 0x47, 0x38, 0x14, 0xb3, 0xe0, 0x16, 0xba, 0x29, 0x73, 0xcd, 0x27, 0x65, 0xf8, 0xf3, 0xf8, 0x2d, 0x6c, 0xc3, 0x8a, 0xa7, 0xf8, 0x55, 0x18, 0x27, 0xfe, 0x8d, 0x1e, 0x38, 0x84, 0xb7, 0xe6, 0x1c, 0x94, 0x68, 0x3b, 0x8f, 0x82, 0xf1, 0x84, 0x3b, 0xda, 0xe2, 0x25, 0x7e, 0xee, 0xc9, 0x81, 0x2a, 0xd4, 0xc2, 0xcf, 0x28, 0x3c, 0x34, 0xe0, 0xb0, 0xae, 0x0f, 0xe3, 0xcb, 0x99, 0x0c, 0xf8, 0x8f, 0x2e, 0xf9 } -, - /* Salt */ - 20, - { 0x28, 0x03, 0x9d, 0xcf, 0xe1, 0x06, 0xd3, 0xb8, 0x29, 0x66, 0x11, 0x25, 0x8c, 0x4a, 0x56, 0x65, 0x1c, 0x9e, 0x92, 0xdd } -, - /* Signature */ - 129, - { 0x2b, 0x31, 0xfd, 0xe9, 0x98, 0x59, 0xb9, 0x77, 0xaa, 0x09, 0x58, 0x6d, 0x8e, 0x27, 0x46, 0x62, 0xb2, 0x5a, 0x2a, 0x64, 0x06, 0x40, 0xb4, 0x57, 0xf5, 0x94, 0x05, 0x1c, 0xb1, 0xe7, 0xf7, 0xa9, 0x11, 0x86, 0x54, 0x55, 0x24, 0x29, 0x26, 0xcf, 0x88, 0xfe, 0x80, 0xdf, 0xa3, 0xa7, 0x5b, 0xa9, 0x68, 0x98, 0x44, 0xa1, 0x1e, 0x63, 0x4a, 0x82, 0xb0, 0x75, 0xaf, 0xbd, 0x69, 0xc1, 0x2a, 0x0d, 0xf9, 0xd2, 0x5f, 0x84, 0xad, 0x49, 0x45, 0xdf, 0x3d, 0xc8, 0xfe, 0x90, 0xc3, 0xce, 0xfd, 0xf2, 0x6e, 0x95, 0xf0, 0x53, 0x43, 0x04, 0xb5, 0xbd, 0xba, 0x20, 0xd3, 0xe5, 0x64, 0x0a, 0x2e, 0xbf, 0xb8, 0x98, 0xaa, 0xc3, 0x5a, 0xe4, 0x0f, 0x26, 0xfc, 0xe5, 0x56, 0x3c, 0x2f, 0x9f, 0x24, 0xf3, 0x04, 0x2a, 0xf7, 0x6f, 0x3c, 0x70, 0x72, 0xd6, 0x87, 0xbb, 0xfb, 0x95, 0x9a, 0x88, 0x46, 0x0a, 0xf1 } - -} -, -{ - "RSASSA-PSS Signature Example 7.4", - /* Message to be signed */ - 231, - { 0xf3, 0x37, 0xb9, 0xba, 0xd9, 0x37, 0xde, 0x22, 0xa1, 0xa0, 0x52, 0xdf, 0xf1, 0x11, 0x34, 0xa8, 0xce, 0x26, 0x97, 0x62, 0x02, 0x98, 0x19, 0x39, 0xb9, 0x1e, 0x07, 0x15, 0xae, 0x5e, 0x60, 0x96, 0x49, 0xda, 0x1a, 0xdf, 0xce, 0xf3, 0xf4, 0xcc, 0xa5, 0x9b, 0x23, 0x83, 0x60, 0xe7, 0xd1, 0xe4, 0x96, 0xc7, 0xbf, 0x4b, 0x20, 0x4b, 0x5a, 0xcf, 0xf9, 0xbb, 0xd6, 0x16, 0x6a, 0x1d, 0x87, 0xa3, 0x6e, 0xf2, 0x24, 0x73, 0x73, 0x75, 0x10, 0x39, 0xf8, 0xa8, 0x00, 0xb8, 0x39, 0x98, 0x07, 0xb3, 0xa8, 0x5f, 0x44, 0x89, 0x34, 0x97, 0xc0, 0xd0, 0x5f, 0xb7, 0x01, 0x7b, 0x82, 0x22, 0x81, 0x52, 0xde, 0x6f, 0x25, 0xe6, 0x11, 0x6d, 0xcc, 0x75, 0x03, 0xc7, 0x86, 0xc8, 0x75, 0xc2, 0x8f, 0x3a, 0xa6, 0x07, 0xe9, 0x4a, 0xb0, 0xf1, 0x98, 0x63, 0xab, 0x1b, 0x50, 0x73, 0x77, 0x0b, 0x0c, 0xd5, 0xf5, 0x33, 0xac, 0xde, 0x30, 0xc6, 0xfb, 0x95, 0x3c, 0xf3, 0xda, 0x68, 0x02, 0x64, 0xe3, 0x0f, 0xc1, 0x1b, 0xff, 0x9a, 0x19, 0xbf, 0xfa, 0xb4, 0x77, 0x9b, 0x62, 0x23, 0xc3, 0xfb, 0x3f, 0xe0, 0xf7, 0x1a, 0xba, 0xde, 0x4e, 0xb7, 0xc0, 0x9c, 0x41, 0xe2, 0x4c, 0x22, 0xd2, 0x3f, 0xa1, 0x48, 0xe6, 0xa1, 0x73, 0xfe, 0xb6, 0x39, 0x84, 0xd1, 0xbc, 0x6e, 0xe3, 0xa0, 0x2d, 0x91, 0x5b, 0x75, 0x2c, 0xea, 0xf9, 0x2a, 0x30, 0x15, 0xec, 0xeb, 0x38, 0xca, 0x58, 0x6c, 0x68, 0x01, 0xb3, 0x7c, 0x34, 0xce, 0xfb, 0x2c, 0xff, 0x25, 0xea, 0x23, 0xc0, 0x86, 0x62, 0xdc, 0xab, 0x26, 0xa7, 0xa9, 0x3a, 0x28, 0x5d, 0x05, 0xd3, 0x04, 0x4c } -, - /* Salt */ - 20, - { 0xa7, 0x78, 0x21, 0xeb, 0xbb, 0xef, 0x24, 0x62, 0x8e, 0x4e, 0x12, 0xe1, 0xd0, 0xea, 0x96, 0xde, 0x39, 0x8f, 0x7b, 0x0f } -, - /* Signature */ - 129, - { 0x32, 0xc7, 0xca, 0x38, 0xff, 0x26, 0x94, 0x9a, 0x15, 0x00, 0x0c, 0x4b, 0xa0, 0x4b, 0x2b, 0x13, 0xb3, 0x5a, 0x38, 0x10, 0xe5, 0x68, 0x18, 0x4d, 0x7e, 0xca, 0xba, 0xa1, 0x66, 0xb7, 0xff, 0xab, 0xdd, 0xf2, 0xb6, 0xcf, 0x4b, 0xa0, 0x71, 0x24, 0x92, 0x37, 0x90, 0xf2, 0xe5, 0xb1, 0xa5, 0xbe, 0x04, 0x0a, 0xea, 0x36, 0xfe, 0x13, 0x2e, 0xc1, 0x30, 0xe1, 0xf1, 0x05, 0x67, 0x98, 0x2d, 0x17, 0xac, 0x3e, 0x89, 0xb8, 0xd2, 0x6c, 0x30, 0x94, 0x03, 0x4e, 0x76, 0x2d, 0x2e, 0x03, 0x12, 0x64, 0xf0, 0x11, 0x70, 0xbe, 0xec, 0xb3, 0xd1, 0x43, 0x9e, 0x05, 0x84, 0x6f, 0x25, 0x45, 0x83, 0x67, 0xa7, 0xd9, 0xc0, 0x20, 0x60, 0x44, 0x46, 0x72, 0x67, 0x1e, 0x64, 0xe8, 0x77, 0x86, 0x45, 0x59, 0xca, 0x19, 0xb2, 0x07, 0x4d, 0x58, 0x8a, 0x28, 0x1b, 0x58, 0x04, 0xd2, 0x37, 0x72, 0xfb, 0xbe, 0x19 } - -} -, -{ - "RSASSA-PSS Signature Example 7.5", - /* Message to be signed */ - 51, - { 0x45, 0x01, 0x3c, 0xeb, 0xaf, 0xd9, 0x60, 0xb2, 0x55, 0x47, 0x6a, 0x8e, 0x25, 0x98, 0xb9, 0xaa, 0x32, 0xef, 0xbe, 0x6d, 0xc1, 0xf3, 0x4f, 0x4a, 0x49, 0x8d, 0x8c, 0xf5, 0xa2, 0xb4, 0x54, 0x8d, 0x08, 0xc5, 0x5d, 0x5f, 0x95, 0xf7, 0xbc, 0xc9, 0x61, 0x91, 0x63, 0x05, 0x6f, 0x2d, 0x58, 0xb5, 0x2f, 0xa0, 0x32 } -, - /* Salt */ - 20, - { 0x9d, 0x5a, 0xd8, 0xeb, 0x45, 0x21, 0x34, 0xb6, 0x5d, 0xc3, 0xa9, 0x8b, 0x6a, 0x73, 0xb5, 0xf7, 0x41, 0x60, 0x9c, 0xd6 } -, - /* Signature */ - 129, - { 0x07, 0xeb, 0x65, 0x1d, 0x75, 0xf1, 0xb5, 0x2b, 0xc2, 0x63, 0xb2, 0xe1, 0x98, 0x33, 0x6e, 0x99, 0xfb, 0xeb, 0xc4, 0xf3, 0x32, 0x04, 0x9a, 0x92, 0x2a, 0x10, 0x81, 0x56, 0x07, 0xee, 0x2d, 0x98, 0x9d, 0xb3, 0xa4, 0x49, 0x5b, 0x7d, 0xcc, 0xd3, 0x8f, 0x58, 0xa2, 0x11, 0xfb, 0x7e, 0x19, 0x31, 0x71, 0xa3, 0xd8, 0x91, 0x13, 0x24, 0x37, 0xeb, 0xca, 0x44, 0xf3, 0x18, 0xb2, 0x80, 0x50, 0x9e, 0x52, 0xb5, 0xfa, 0x98, 0xfc, 0xce, 0x82, 0x05, 0xd9, 0x69, 0x7c, 0x8e, 0xe4, 0xb7, 0xff, 0x59, 0xd4, 0xc5, 0x9c, 0x79, 0x03, 0x8a, 0x19, 0x70, 0xbd, 0x2a, 0x0d, 0x45, 0x1e, 0xcd, 0xc5, 0xef, 0x11, 0xd9, 0x97, 0x9c, 0x9d, 0x35, 0xf8, 0xc7, 0x0a, 0x61, 0x63, 0x71, 0x76, 0x07, 0x89, 0x0d, 0x58, 0x6a, 0x7c, 0x6d, 0xc0, 0x1c, 0x79, 0xf8, 0x6a, 0x8f, 0x28, 0xe8, 0x52, 0x35, 0xf8, 0xc2, 0xf1 } - -} -, -{ - "RSASSA-PSS Signature Example 7.6", - /* Message to be signed */ - 184, - { 0x23, 0x58, 0x09, 0x70, 0x86, 0xc8, 0x99, 0x32, 0x3e, 0x75, 0xd9, 0xc9, 0x0d, 0x0c, 0x09, 0xf1, 0x2d, 0x9d, 0x54, 0xed, 0xfb, 0xdf, 0x70, 0xa9, 0xc2, 0xeb, 0x5a, 0x04, 0xd8, 0xf3, 0x6b, 0x9b, 0x2b, 0xdf, 0x2a, 0xab, 0xe0, 0xa5, 0xbd, 0xa1, 0x96, 0x89, 0x37, 0xf9, 0xd6, 0xeb, 0xd3, 0xb6, 0xb2, 0x57, 0xef, 0xb3, 0x13, 0x6d, 0x41, 0x31, 0xf9, 0xac, 0xb5, 0x9b, 0x85, 0xe2, 0x60, 0x2c, 0x2a, 0x3f, 0xcd, 0xc8, 0x35, 0x49, 0x4a, 0x1f, 0x4e, 0x5e, 0xc1, 0x8b, 0x22, 0x6c, 0x80, 0x23, 0x2b, 0x36, 0xa7, 0x5a, 0x45, 0xfd, 0xf0, 0x9a, 0x7e, 0xa9, 0xe9, 0x8e, 0xfb, 0xde, 0x14, 0x50, 0xd1, 0x19, 0x4b, 0xf1, 0x2e, 0x15, 0xa4, 0xc5, 0xf9, 0xeb, 0x5c, 0x0b, 0xce, 0x52, 0x69, 0xe0, 0xc3, 0xb2, 0x8c, 0xfa, 0xb6, 0x55, 0xd8, 0x1a, 0x61, 0xa2, 0x0b, 0x4b, 0xe2, 0xf5, 0x44, 0x59, 0xbb, 0x25, 0xa0, 0xdb, 0x94, 0xc5, 0x22, 0x18, 0xbe, 0x10, 0x9a, 0x74, 0x26, 0xde, 0x83, 0x01, 0x44, 0x24, 0x78, 0x9a, 0xaa, 0x90, 0xe5, 0x05, 0x6e, 0x63, 0x2a, 0x69, 0x81, 0x15, 0xe2, 0x82, 0xc1, 0xa5, 0x64, 0x10, 0xf2, 0x6c, 0x20, 0x72, 0xf1, 0x93, 0x48, 0x1a, 0x9d, 0xcd, 0x88, 0x05, 0x72, 0x00, 0x5e, 0x64, 0xf4, 0x08, 0x2e, 0xcf } -, - /* Salt */ - 20, - { 0x3f, 0x2e, 0xfc, 0x59, 0x58, 0x80, 0xa7, 0xd4, 0x7f, 0xcf, 0x3c, 0xba, 0x04, 0x98, 0x3e, 0xa5, 0x4c, 0x4b, 0x73, 0xfb } -, - /* Signature */ - 129, - { 0x18, 0xda, 0x3c, 0xdc, 0xfe, 0x79, 0xbf, 0xb7, 0x7f, 0xd9, 0xc3, 0x2f, 0x37, 0x7a, 0xd3, 0x99, 0x14, 0x6f, 0x0a, 0x8e, 0x81, 0x06, 0x20, 0x23, 0x32, 0x71, 0xa6, 0xe3, 0xed, 0x32, 0x48, 0x90, 0x3f, 0x5c, 0xdc, 0x92, 0xdc, 0x79, 0xb5, 0x5d, 0x3e, 0x11, 0x61, 0x5a, 0xa0, 0x56, 0xa7, 0x95, 0x85, 0x37, 0x92, 0xa3, 0x99, 0x8c, 0x34, 0x9c, 0xa5, 0xc4, 0x57, 0xe8, 0xca, 0x7d, 0x29, 0xd7, 0x96, 0xaa, 0x24, 0xf8, 0x34, 0x91, 0x70, 0x9b, 0xef, 0xcf, 0xb1, 0x51, 0x0e, 0xa5, 0x13, 0xc9, 0x28, 0x29, 0xa3, 0xf0, 0x0b, 0x10, 0x4f, 0x65, 0x56, 0x34, 0xf3, 0x20, 0x75, 0x2e, 0x13, 0x0e, 0xc0, 0xcc, 0xf6, 0x75, 0x4f, 0xf8, 0x93, 0xdb, 0x30, 0x29, 0x32, 0xbb, 0x02, 0x5e, 0xb6, 0x0e, 0x87, 0x82, 0x25, 0x98, 0xfc, 0x61, 0x9e, 0x0e, 0x98, 0x17, 0x37, 0xa9, 0xa4, 0xc4, 0x15, 0x2d, 0x33 } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 8: A 1031-bit RSA Key Pair", -{ - /* RSA modulus n */ - 129, - { 0x49, 0x53, 0x70, 0xa1, 0xfb, 0x18, 0x54, 0x3c, 0x16, 0xd3, 0x63, 0x1e, 0x31, 0x63, 0x25, 0x5d, 0xf6, 0x2b, 0xe6, 0xee, 0xe8, 0x90, 0xd5, 0xf2, 0x55, 0x09, 0xe4, 0xf7, 0x78, 0xa8, 0xea, 0x6f, 0xbb, 0xbc, 0xdf, 0x85, 0xdf, 0xf6, 0x4e, 0x0d, 0x97, 0x20, 0x03, 0xab, 0x36, 0x81, 0xfb, 0xba, 0x6d, 0xd4, 0x1f, 0xd5, 0x41, 0x82, 0x9b, 0x2e, 0x58, 0x2d, 0xe9, 0xf2, 0xa4, 0xa4, 0xe0, 0xa2, 0xd0, 0x90, 0x0b, 0xef, 0x47, 0x53, 0xdb, 0x3c, 0xee, 0x0e, 0xe0, 0x6c, 0x7d, 0xfa, 0xe8, 0xb1, 0xd5, 0x3b, 0x59, 0x53, 0x21, 0x8f, 0x9c, 0xce, 0xea, 0x69, 0x5b, 0x08, 0x66, 0x8e, 0xde, 0xaa, 0xdc, 0xed, 0x94, 0x63, 0xb1, 0xd7, 0x90, 0xd5, 0xeb, 0xf2, 0x7e, 0x91, 0x15, 0xb4, 0x6c, 0xad, 0x4d, 0x9a, 0x2b, 0x8e, 0xfa, 0xb0, 0x56, 0x1b, 0x08, 0x10, 0x34, 0x47, 0x39, 0xad, 0xa0, 0x73, 0x3f } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 128, - { 0x6c, 0x66, 0xff, 0xe9, 0x89, 0x80, 0xc3, 0x8f, 0xcd, 0xea, 0xb5, 0x15, 0x98, 0x98, 0x83, 0x61, 0x65, 0xf4, 0xb4, 0xb8, 0x17, 0xc4, 0xf6, 0xa8, 0xd4, 0x86, 0xee, 0x4e, 0xa9, 0x13, 0x0f, 0xe9, 0xb9, 0x09, 0x2b, 0xd1, 0x36, 0xd1, 0x84, 0xf9, 0x5f, 0x50, 0x4a, 0x60, 0x7e, 0xac, 0x56, 0x58, 0x46, 0xd2, 0xfd, 0xd6, 0x59, 0x7a, 0x89, 0x67, 0xc7, 0x39, 0x6e, 0xf9, 0x5a, 0x6e, 0xee, 0xbb, 0x45, 0x78, 0xa6, 0x43, 0x96, 0x6d, 0xca, 0x4d, 0x8e, 0xe3, 0xde, 0x84, 0x2d, 0xe6, 0x32, 0x79, 0xc6, 0x18, 0x15, 0x9c, 0x1a, 0xb5, 0x4a, 0x89, 0x43, 0x7b, 0x6a, 0x61, 0x20, 0xe4, 0x93, 0x0a, 0xfb, 0x52, 0xa4, 0xba, 0x6c, 0xed, 0x8a, 0x49, 0x47, 0xac, 0x64, 0xb3, 0x0a, 0x34, 0x97, 0xcb, 0xe7, 0x01, 0xc2, 0xd6, 0x26, 0x6d, 0x51, 0x72, 0x19, 0xad, 0x0e, 0xc6, 0xd3, 0x47, 0xdb, 0xe9 } -, - /* Prime p */ - 65, - { 0x08, 0xda, 0xd7, 0xf1, 0x13, 0x63, 0xfa, 0xa6, 0x23, 0xd5, 0xd6, 0xd5, 0xe8, 0xa3, 0x19, 0x32, 0x8d, 0x82, 0x19, 0x0d, 0x71, 0x27, 0xd2, 0x84, 0x6c, 0x43, 0x9b, 0x0a, 0xb7, 0x26, 0x19, 0xb0, 0xa4, 0x3a, 0x95, 0x32, 0x0e, 0x4e, 0xc3, 0x4f, 0xc3, 0xa9, 0xce, 0xa8, 0x76, 0x42, 0x23, 0x05, 0xbd, 0x76, 0xc5, 0xba, 0x7b, 0xe9, 0xe2, 0xf4, 0x10, 0xc8, 0x06, 0x06, 0x45, 0xa1, 0xd2, 0x9e, 0xdb } -, - /* Prime q */ - 65, - { 0x08, 0x47, 0xe7, 0x32, 0x37, 0x6f, 0xc7, 0x90, 0x0f, 0x89, 0x8e, 0xa8, 0x2e, 0xb2, 0xb0, 0xfc, 0x41, 0x85, 0x65, 0xfd, 0xae, 0x62, 0xf7, 0xd9, 0xec, 0x4c, 0xe2, 0x21, 0x7b, 0x97, 0x99, 0x0d, 0xd2, 0x72, 0xdb, 0x15, 0x7f, 0x99, 0xf6, 0x3c, 0x0d, 0xcb, 0xb9, 0xfb, 0xac, 0xdb, 0xd4, 0xc4, 0xda, 0xdb, 0x6d, 0xf6, 0x77, 0x56, 0x35, 0x8c, 0xa4, 0x17, 0x48, 0x25, 0xb4, 0x8f, 0x49, 0x70, 0x6d } -, - /* p's CRT exponent dP */ - 65, - { 0x05, 0xc2, 0xa8, 0x3c, 0x12, 0x4b, 0x36, 0x21, 0xa2, 0xaa, 0x57, 0xea, 0x2c, 0x3e, 0xfe, 0x03, 0x5e, 0xff, 0x45, 0x60, 0xf3, 0x3d, 0xde, 0xbb, 0x7a, 0xda, 0xb8, 0x1f, 0xce, 0x69, 0xa0, 0xc8, 0xc2, 0xed, 0xc1, 0x65, 0x20, 0xdd, 0xa8, 0x3d, 0x59, 0xa2, 0x3b, 0xe8, 0x67, 0x96, 0x3a, 0xc6, 0x5f, 0x2c, 0xc7, 0x10, 0xbb, 0xcf, 0xb9, 0x6e, 0xe1, 0x03, 0xde, 0xb7, 0x71, 0xd1, 0x05, 0xfd, 0x85 } -, - /* q's CRT exponent dQ */ - 65, - { 0x04, 0xca, 0xe8, 0xaa, 0x0d, 0x9f, 0xaa, 0x16, 0x5c, 0x87, 0xb6, 0x82, 0xec, 0x14, 0x0b, 0x8e, 0xd3, 0xb5, 0x0b, 0x24, 0x59, 0x4b, 0x7a, 0x3b, 0x2c, 0x22, 0x0b, 0x36, 0x69, 0xbb, 0x81, 0x9f, 0x98, 0x4f, 0x55, 0x31, 0x0a, 0x1a, 0xe7, 0x82, 0x36, 0x51, 0xd4, 0xa0, 0x2e, 0x99, 0x44, 0x79, 0x72, 0x59, 0x51, 0x39, 0x36, 0x34, 0x34, 0xe5, 0xe3, 0x0a, 0x7e, 0x7d, 0x24, 0x15, 0x51, 0xe1, 0xb9 } -, - /* CRT coefficient qInv */ - 65, - { 0x07, 0xd3, 0xe4, 0x7b, 0xf6, 0x86, 0x60, 0x0b, 0x11, 0xac, 0x28, 0x3c, 0xe8, 0x8d, 0xbb, 0x3f, 0x60, 0x51, 0xe8, 0xef, 0xd0, 0x46, 0x80, 0xe4, 0x4c, 0x17, 0x1e, 0xf5, 0x31, 0xb8, 0x0b, 0x2b, 0x7c, 0x39, 0xfc, 0x76, 0x63, 0x20, 0xe2, 0xcf, 0x15, 0xd8, 0xd9, 0x98, 0x20, 0xe9, 0x6f, 0xf3, 0x0d, 0xc6, 0x96, 0x91, 0x83, 0x9c, 0x4b, 0x40, 0xd7, 0xb0, 0x6e, 0x45, 0x30, 0x7d, 0xc9, 0x1f, 0x3f } - -} -, -{{ - "RSASSA-PSS Signature Example 8.1", - /* Message to be signed */ - 172, - { 0x81, 0x33, 0x2f, 0x4b, 0xe6, 0x29, 0x48, 0x41, 0x5e, 0xa1, 0xd8, 0x99, 0x79, 0x2e, 0xea, 0xcf, 0x6c, 0x6e, 0x1d, 0xb1, 0xda, 0x8b, 0xe1, 0x3b, 0x5c, 0xea, 0x41, 0xdb, 0x2f, 0xed, 0x46, 0x70, 0x92, 0xe1, 0xff, 0x39, 0x89, 0x14, 0xc7, 0x14, 0x25, 0x97, 0x75, 0xf5, 0x95, 0xf8, 0x54, 0x7f, 0x73, 0x56, 0x92, 0xa5, 0x75, 0xe6, 0x92, 0x3a, 0xf7, 0x8f, 0x22, 0xc6, 0x99, 0x7d, 0xdb, 0x90, 0xfb, 0x6f, 0x72, 0xd7, 0xbb, 0x0d, 0xd5, 0x74, 0x4a, 0x31, 0xde, 0xcd, 0x3d, 0xc3, 0x68, 0x58, 0x49, 0x83, 0x6e, 0xd3, 0x4a, 0xec, 0x59, 0x63, 0x04, 0xad, 0x11, 0x84, 0x3c, 0x4f, 0x88, 0x48, 0x9f, 0x20, 0x97, 0x35, 0xf5, 0xfb, 0x7f, 0xda, 0xf7, 0xce, 0xc8, 0xad, 0xdc, 0x58, 0x18, 0x16, 0x8f, 0x88, 0x0a, 0xcb, 0xf4, 0x90, 0xd5, 0x10, 0x05, 0xb7, 0xa8, 0xe8, 0x4e, 0x43, 0xe5, 0x42, 0x87, 0x97, 0x75, 0x71, 0xdd, 0x99, 0xee, 0xa4, 0xb1, 0x61, 0xeb, 0x2d, 0xf1, 0xf5, 0x10, 0x8f, 0x12, 0xa4, 0x14, 0x2a, 0x83, 0x32, 0x2e, 0xdb, 0x05, 0xa7, 0x54, 0x87, 0xa3, 0x43, 0x5c, 0x9a, 0x78, 0xce, 0x53, 0xed, 0x93, 0xbc, 0x55, 0x08, 0x57, 0xd7, 0xa9, 0xfb } -, - /* Salt */ - 20, - { 0x1d, 0x65, 0x49, 0x1d, 0x79, 0xc8, 0x64, 0xb3, 0x73, 0x00, 0x9b, 0xe6, 0xf6, 0xf2, 0x46, 0x7b, 0xac, 0x4c, 0x78, 0xfa } -, - /* Signature */ - 129, - { 0x02, 0x62, 0xac, 0x25, 0x4b, 0xfa, 0x77, 0xf3, 0xc1, 0xac, 0xa2, 0x2c, 0x51, 0x79, 0xf8, 0xf0, 0x40, 0x42, 0x2b, 0x3c, 0x5b, 0xaf, 0xd4, 0x0a, 0x8f, 0x21, 0xcf, 0x0f, 0xa5, 0xa6, 0x67, 0xcc, 0xd5, 0x99, 0x3d, 0x42, 0xdb, 0xaf, 0xb4, 0x09, 0xc5, 0x20, 0xe2, 0x5f, 0xce, 0x2b, 0x1e, 0xe1, 0xe7, 0x16, 0x57, 0x7f, 0x1e, 0xfa, 0x17, 0xf3, 0xda, 0x28, 0x05, 0x2f, 0x40, 0xf0, 0x41, 0x9b, 0x23, 0x10, 0x6d, 0x78, 0x45, 0xaa, 0xf0, 0x11, 0x25, 0xb6, 0x98, 0xe7, 0xa4, 0xdf, 0xe9, 0x2d, 0x39, 0x67, 0xbb, 0x00, 0xc4, 0xd0, 0xd3, 0x5b, 0xa3, 0x55, 0x2a, 0xb9, 0xa8, 0xb3, 0xee, 0xf0, 0x7c, 0x7f, 0xec, 0xdb, 0xc5, 0x42, 0x4a, 0xc4, 0xdb, 0x1e, 0x20, 0xcb, 0x37, 0xd0, 0xb2, 0x74, 0x47, 0x69, 0x94, 0x0e, 0xa9, 0x07, 0xe1, 0x7f, 0xbb, 0xca, 0x67, 0x3b, 0x20, 0x52, 0x23, 0x80, 0xc5 } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSASSA-PSS Signature Example 8.2", - /* Message to be signed */ - 38, - { 0xe2, 0xf9, 0x6e, 0xaf, 0x0e, 0x05, 0xe7, 0xba, 0x32, 0x6e, 0xcc, 0xa0, 0xba, 0x7f, 0xd2, 0xf7, 0xc0, 0x23, 0x56, 0xf3, 0xce, 0xde, 0x9d, 0x0f, 0xaa, 0xbf, 0x4f, 0xcc, 0x8e, 0x60, 0xa9, 0x73, 0xe5, 0x59, 0x5f, 0xd9, 0xea, 0x08 } -, - /* Salt */ - 20, - { 0x43, 0x5c, 0x09, 0x8a, 0xa9, 0x90, 0x9e, 0xb2, 0x37, 0x7f, 0x12, 0x48, 0xb0, 0x91, 0xb6, 0x89, 0x87, 0xff, 0x18, 0x38 } -, - /* Signature */ - 129, - { 0x27, 0x07, 0xb9, 0xad, 0x51, 0x15, 0xc5, 0x8c, 0x94, 0xe9, 0x32, 0xe8, 0xec, 0x0a, 0x28, 0x0f, 0x56, 0x33, 0x9e, 0x44, 0xa1, 0xb5, 0x8d, 0x4d, 0xdc, 0xff, 0x2f, 0x31, 0x2e, 0x5f, 0x34, 0xdc, 0xfe, 0x39, 0xe8, 0x9c, 0x6a, 0x94, 0xdc, 0xee, 0x86, 0xdb, 0xbd, 0xae, 0x5b, 0x79, 0xba, 0x4e, 0x08, 0x19, 0xa9, 0xe7, 0xbf, 0xd9, 0xd9, 0x82, 0xe7, 0xee, 0x6c, 0x86, 0xee, 0x68, 0x39, 0x6e, 0x8b, 0x3a, 0x14, 0xc9, 0xc8, 0xf3, 0x4b, 0x17, 0x8e, 0xb7, 0x41, 0xf9, 0xd3, 0xf1, 0x21, 0x10, 0x9b, 0xf5, 0xc8, 0x17, 0x2f, 0xad, 0xa2, 0xe7, 0x68, 0xf9, 0xea, 0x14, 0x33, 0x03, 0x2c, 0x00, 0x4a, 0x8a, 0xa0, 0x7e, 0xb9, 0x90, 0x00, 0x0a, 0x48, 0xdc, 0x94, 0xc8, 0xba, 0xc8, 0xaa, 0xbe, 0x2b, 0x09, 0xb1, 0xaa, 0x46, 0xc0, 0xa2, 0xaa, 0x0e, 0x12, 0xf6, 0x3f, 0xbb, 0xa7, 0x75, 0xba, 0x7e } - -} -, -{ - "RSASSA-PSS Signature Example 8.3", - /* Message to be signed */ - 151, - { 0xe3, 0x5c, 0x6e, 0xd9, 0x8f, 0x64, 0xa6, 0xd5, 0xa6, 0x48, 0xfc, 0xab, 0x8a, 0xdb, 0x16, 0x33, 0x1d, 0xb3, 0x2e, 0x5d, 0x15, 0xc7, 0x4a, 0x40, 0xed, 0xf9, 0x4c, 0x3d, 0xc4, 0xa4, 0xde, 0x79, 0x2d, 0x19, 0x08, 0x89, 0xf2, 0x0f, 0x1e, 0x24, 0xed, 0x12, 0x05, 0x4a, 0x6b, 0x28, 0x79, 0x8f, 0xcb, 0x42, 0xd1, 0xc5, 0x48, 0x76, 0x9b, 0x73, 0x4c, 0x96, 0x37, 0x31, 0x42, 0x09, 0x2a, 0xed, 0x27, 0x76, 0x03, 0xf4, 0x73, 0x8d, 0xf4, 0xdc, 0x14, 0x46, 0x58, 0x6d, 0x0e, 0xc6, 0x4d, 0xa4, 0xfb, 0x60, 0x53, 0x6d, 0xb2, 0xae, 0x17, 0xfc, 0x7e, 0x3c, 0x04, 0xbb, 0xfb, 0xbb, 0xd9, 0x07, 0xbf, 0x11, 0x7c, 0x08, 0x63, 0x6f, 0xa1, 0x6f, 0x95, 0xf5, 0x1a, 0x62, 0x16, 0x93, 0x4d, 0x3e, 0x34, 0xf8, 0x50, 0x30, 0xf1, 0x7b, 0xbb, 0xc5, 0xba, 0x69, 0x14, 0x40, 0x58, 0xaf, 0xf0, 0x81, 0xe0, 0xb1, 0x9c, 0xf0, 0x3c, 0x17, 0x19, 0x5c, 0x5e, 0x88, 0x8b, 0xa5, 0x8f, 0x6f, 0xe0, 0xa0, 0x2e, 0x5c, 0x3b, 0xda, 0x97, 0x19, 0xa7 } -, - /* Salt */ - 20, - { 0xc6, 0xeb, 0xbe, 0x76, 0xdf, 0x0c, 0x4a, 0xea, 0x32, 0xc4, 0x74, 0x17, 0x5b, 0x2f, 0x13, 0x68, 0x62, 0xd0, 0x45, 0x29 } -, - /* Signature */ - 129, - { 0x2a, 0xd2, 0x05, 0x09, 0xd7, 0x8c, 0xf2, 0x6d, 0x1b, 0x6c, 0x40, 0x61, 0x46, 0x08, 0x6e, 0x4b, 0x0c, 0x91, 0xa9, 0x1c, 0x2b, 0xd1, 0x64, 0xc8, 0x7b, 0x96, 0x6b, 0x8f, 0xaa, 0x42, 0xaa, 0x0c, 0xa4, 0x46, 0x02, 0x23, 0x23, 0xba, 0x4b, 0x1a, 0x1b, 0x89, 0x70, 0x6d, 0x7f, 0x4c, 0x3b, 0xe5, 0x7d, 0x7b, 0x69, 0x70, 0x2d, 0x16, 0x8a, 0xb5, 0x95, 0x5e, 0xe2, 0x90, 0x35, 0x6b, 0x8c, 0x4a, 0x29, 0xed, 0x46, 0x7d, 0x54, 0x7e, 0xc2, 0x3c, 0xba, 0xdf, 0x28, 0x6c, 0xcb, 0x58, 0x63, 0xc6, 0x67, 0x9d, 0xa4, 0x67, 0xfc, 0x93, 0x24, 0xa1, 0x51, 0xc7, 0xec, 0x55, 0xaa, 0xc6, 0xdb, 0x40, 0x84, 0xf8, 0x27, 0x26, 0x82, 0x5c, 0xfe, 0x1a, 0xa4, 0x21, 0xbc, 0x64, 0x04, 0x9f, 0xb4, 0x2f, 0x23, 0x14, 0x8f, 0x9c, 0x25, 0xb2, 0xdc, 0x30, 0x04, 0x37, 0xc3, 0x8d, 0x42, 0x8a, 0xa7, 0x5f, 0x96 } - -} -, -{ - "RSASSA-PSS Signature Example 8.4", - /* Message to be signed */ - 204, - { 0xdb, 0xc5, 0xf7, 0x50, 0xa7, 0xa1, 0x4b, 0xe2, 0xb9, 0x3e, 0x83, 0x8d, 0x18, 0xd1, 0x4a, 0x86, 0x95, 0xe5, 0x2e, 0x8a, 0xdd, 0x9c, 0x0a, 0xc7, 0x33, 0xb8, 0xf5, 0x6d, 0x27, 0x47, 0xe5, 0x29, 0xa0, 0xcc, 0xa5, 0x32, 0xdd, 0x49, 0xb9, 0x02, 0xae, 0xfe, 0xd5, 0x14, 0x44, 0x7f, 0x9e, 0x81, 0xd1, 0x61, 0x95, 0xc2, 0x85, 0x38, 0x68, 0xcb, 0x9b, 0x30, 0xf7, 0xd0, 0xd4, 0x95, 0xc6, 0x9d, 0x01, 0xb5, 0xc5, 0xd5, 0x0b, 0x27, 0x04, 0x5d, 0xb3, 0x86, 0x6c, 0x23, 0x24, 0xa4, 0x4a, 0x11, 0x0b, 0x17, 0x17, 0x74, 0x6d, 0xe4, 0x57, 0xd1, 0xc8, 0xc4, 0x5c, 0x3c, 0xd2, 0xa9, 0x29, 0x70, 0xc3, 0xd5, 0x96, 0x32, 0x05, 0x5d, 0x4c, 0x98, 0xa4, 0x1d, 0x6e, 0x99, 0xe2, 0xa3, 0xdd, 0xd5, 0xf7, 0xf9, 0x97, 0x9a, 0xb3, 0xcd, 0x18, 0xf3, 0x75, 0x05, 0xd2, 0x51, 0x41, 0xde, 0x2a, 0x1b, 0xff, 0x17, 0xb3, 0xa7, 0xdc, 0xe9, 0x41, 0x9e, 0xcc, 0x38, 0x5c, 0xf1, 0x1d, 0x72, 0x84, 0x0f, 0x19, 0x95, 0x3f, 0xd0, 0x50, 0x92, 0x51, 0xf6, 0xca, 0xfd, 0xe2, 0x89, 0x3d, 0x0e, 0x75, 0xc7, 0x81, 0xba, 0x7a, 0x50, 0x12, 0xca, 0x40, 0x1a, 0x4f, 0xa9, 0x9e, 0x04, 0xb3, 0xc3, 0x24, 0x9f, 0x92, 0x6d, 0x5a, 0xfe, 0x82, 0xcc, 0x87, 0xda, 0xb2, 0x2c, 0x3c, 0x1b, 0x10, 0x5d, 0xe4, 0x8e, 0x34, 0xac, 0xe9, 0xc9, 0x12, 0x4e, 0x59, 0x59, 0x7a, 0xc7, 0xeb, 0xf8 } -, - /* Salt */ - 20, - { 0x02, 0x1f, 0xdc, 0xc6, 0xeb, 0xb5, 0xe1, 0x9b, 0x1c, 0xb1, 0x6e, 0x9c, 0x67, 0xf2, 0x76, 0x81, 0x65, 0x7f, 0xe2, 0x0a } -, - /* Signature */ - 129, - { 0x1e, 0x24, 0xe6, 0xe5, 0x86, 0x28, 0xe5, 0x17, 0x50, 0x44, 0xa9, 0xeb, 0x6d, 0x83, 0x7d, 0x48, 0xaf, 0x12, 0x60, 0xb0, 0x52, 0x0e, 0x87, 0x32, 0x7d, 0xe7, 0x89, 0x7e, 0xe4, 0xd5, 0xb9, 0xf0, 0xdf, 0x0b, 0xe3, 0xe0, 0x9e, 0xd4, 0xde, 0xa8, 0xc1, 0x45, 0x4f, 0xf3, 0x42, 0x3b, 0xb0, 0x8e, 0x17, 0x93, 0x24, 0x5a, 0x9d, 0xf8, 0xbf, 0x6a, 0xb3, 0x96, 0x8c, 0x8e, 0xdd, 0xc3, 0xb5, 0x32, 0x85, 0x71, 0xc7, 0x7f, 0x09, 0x1c, 0xc5, 0x78, 0x57, 0x69, 0x12, 0xdf, 0xeb, 0xd1, 0x64, 0xb9, 0xde, 0x54, 0x54, 0xfe, 0x0b, 0xe1, 0xc1, 0xf6, 0x38, 0x5b, 0x32, 0x83, 0x60, 0xce, 0x67, 0xec, 0x7a, 0x05, 0xf6, 0xe3, 0x0e, 0xb4, 0x5c, 0x17, 0xc4, 0x8a, 0xc7, 0x00, 0x41, 0xd2, 0xca, 0xb6, 0x7f, 0x0a, 0x2a, 0xe7, 0xaa, 0xfd, 0xcc, 0x8d, 0x24, 0x5e, 0xa3, 0x44, 0x2a, 0x63, 0x00, 0xcc, 0xc7 } - -} -, -{ - "RSASSA-PSS Signature Example 8.5", - /* Message to be signed */ - 101, - { 0x04, 0xdc, 0x25, 0x1b, 0xe7, 0x2e, 0x88, 0xe5, 0x72, 0x34, 0x85, 0xb6, 0x38, 0x3a, 0x63, 0x7e, 0x2f, 0xef, 0xe0, 0x76, 0x60, 0xc5, 0x19, 0xa5, 0x60, 0xb8, 0xbc, 0x18, 0xbd, 0xed, 0xb8, 0x6e, 0xae, 0x23, 0x64, 0xea, 0x53, 0xba, 0x9d, 0xca, 0x6e, 0xb3, 0xd2, 0xe7, 0xd6, 0xb8, 0x06, 0xaf, 0x42, 0xb3, 0xe8, 0x7f, 0x29, 0x1b, 0x4a, 0x88, 0x81, 0xd5, 0xbf, 0x57, 0x2c, 0xc9, 0xa8, 0x5e, 0x19, 0xc8, 0x6a, 0xcb, 0x28, 0xf0, 0x98, 0xf9, 0xda, 0x03, 0x83, 0xc5, 0x66, 0xd3, 0xc0, 0xf5, 0x8c, 0xfd, 0x8f, 0x39, 0x5d, 0xcf, 0x60, 0x2e, 0x5c, 0xd4, 0x0e, 0x8c, 0x71, 0x83, 0xf7, 0x14, 0x99, 0x6e, 0x22, 0x97, 0xef } -, - /* Salt */ - 20, - { 0xc5, 0x58, 0xd7, 0x16, 0x7c, 0xbb, 0x45, 0x08, 0xad, 0xa0, 0x42, 0x97, 0x1e, 0x71, 0xb1, 0x37, 0x7e, 0xea, 0x42, 0x69 } -, - /* Signature */ - 129, - { 0x33, 0x34, 0x1b, 0xa3, 0x57, 0x6a, 0x13, 0x0a, 0x50, 0xe2, 0xa5, 0xcf, 0x86, 0x79, 0x22, 0x43, 0x88, 0xd5, 0x69, 0x3f, 0x5a, 0xcc, 0xc2, 0x35, 0xac, 0x95, 0xad, 0xd6, 0x8e, 0x5e, 0xb1, 0xee, 0xc3, 0x16, 0x66, 0xd0, 0xca, 0x7a, 0x1c, 0xda, 0x6f, 0x70, 0xa1, 0xaa, 0x76, 0x2c, 0x05, 0x75, 0x2a, 0x51, 0x95, 0x0c, 0xdb, 0x8a, 0xf3, 0xc5, 0x37, 0x9f, 0x18, 0xcf, 0xe6, 0xb5, 0xbc, 0x55, 0xa4, 0x64, 0x82, 0x26, 0xa1, 0x5e, 0x91, 0x2e, 0xf1, 0x9a, 0xd7, 0x7a, 0xde, 0xea, 0x91, 0x1d, 0x67, 0xcf, 0xef, 0xd6, 0x9b, 0xa4, 0x3f, 0xa4, 0x11, 0x91, 0x35, 0xff, 0x64, 0x21, 0x17, 0xba, 0x98, 0x5a, 0x7e, 0x01, 0x00, 0x32, 0x5e, 0x95, 0x19, 0xf1, 0xca, 0x6a, 0x92, 0x16, 0xbd, 0xa0, 0x55, 0xb5, 0x78, 0x50, 0x15, 0x29, 0x11, 0x25, 0xe9, 0x0d, 0xcd, 0x07, 0xa2, 0xca, 0x96, 0x73, 0xee } - -} -, -{ - "RSASSA-PSS Signature Example 8.6", - /* Message to be signed */ - 132, - { 0x0e, 0xa3, 0x7d, 0xf9, 0xa6, 0xfe, 0xa4, 0xa8, 0xb6, 0x10, 0x37, 0x3c, 0x24, 0xcf, 0x39, 0x0c, 0x20, 0xfa, 0x6e, 0x21, 0x35, 0xc4, 0x00, 0xc8, 0xa3, 0x4f, 0x5c, 0x18, 0x3a, 0x7e, 0x8e, 0xa4, 0xc9, 0xae, 0x09, 0x0e, 0xd3, 0x17, 0x59, 0xf4, 0x2d, 0xc7, 0x77, 0x19, 0xcc, 0xa4, 0x00, 0xec, 0xdc, 0xc5, 0x17, 0xac, 0xfc, 0x7a, 0xc6, 0x90, 0x26, 0x75, 0xb2, 0xef, 0x30, 0xc5, 0x09, 0x66, 0x5f, 0x33, 0x21, 0x48, 0x2f, 0xc6, 0x9a, 0x9f, 0xb5, 0x70, 0xd1, 0x5e, 0x01, 0xc8, 0x45, 0xd0, 0xd8, 0xe5, 0x0d, 0x2a, 0x24, 0xcb, 0xf1, 0xcf, 0x0e, 0x71, 0x49, 0x75, 0xa5, 0xdb, 0x7b, 0x18, 0xd9, 0xe9, 0xe9, 0xcb, 0x91, 0xb5, 0xcb, 0x16, 0x86, 0x90, 0x60, 0xed, 0x18, 0xb7, 0xb5, 0x62, 0x45, 0x50, 0x3f, 0x0c, 0xaf, 0x90, 0x35, 0x2b, 0x8d, 0xe8, 0x1c, 0xb5, 0xa1, 0xd9, 0xc6, 0x33, 0x60, 0x92, 0xf0, 0xcd } -, - /* Salt */ - 20, - { 0x76, 0xfd, 0x4e, 0x64, 0xfd, 0xc9, 0x8e, 0xb9, 0x27, 0xa0, 0x40, 0x3e, 0x35, 0xa0, 0x84, 0xe7, 0x6b, 0xa9, 0xf9, 0x2a } -, - /* Signature */ - 129, - { 0x1e, 0xd1, 0xd8, 0x48, 0xfb, 0x1e, 0xdb, 0x44, 0x12, 0x9b, 0xd9, 0xb3, 0x54, 0x79, 0x5a, 0xf9, 0x7a, 0x06, 0x9a, 0x7a, 0x00, 0xd0, 0x15, 0x10, 0x48, 0x59, 0x3e, 0x0c, 0x72, 0xc3, 0x51, 0x7f, 0xf9, 0xff, 0x2a, 0x41, 0xd0, 0xcb, 0x5a, 0x0a, 0xc8, 0x60, 0xd7, 0x36, 0xa1, 0x99, 0x70, 0x4f, 0x7c, 0xb6, 0xa5, 0x39, 0x86, 0xa8, 0x8b, 0xbd, 0x8a, 0xbc, 0xc0, 0x07, 0x6a, 0x2c, 0xe8, 0x47, 0x88, 0x00, 0x31, 0x52, 0x5d, 0x44, 0x9d, 0xa2, 0xac, 0x78, 0x35, 0x63, 0x74, 0xc5, 0x36, 0xe3, 0x43, 0xfa, 0xa7, 0xcb, 0xa4, 0x2a, 0x5a, 0xaa, 0x65, 0x06, 0x08, 0x77, 0x91, 0xc0, 0x6a, 0x8e, 0x98, 0x93, 0x35, 0xae, 0xd1, 0x9b, 0xfa, 0xb2, 0xd5, 0xe6, 0x7e, 0x27, 0xfb, 0x0c, 0x28, 0x75, 0xaf, 0x89, 0x6c, 0x21, 0xb6, 0xe8, 0xe7, 0x30, 0x9d, 0x04, 0xe4, 0xf6, 0x72, 0x7e, 0x69, 0x46, 0x3e } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 9: A 1536-bit RSA Key Pair", -{ - /* RSA modulus n */ - 192, - { 0xe6, 0xbd, 0x69, 0x2a, 0xc9, 0x66, 0x45, 0x79, 0x04, 0x03, 0xfd, 0xd0, 0xf5, 0xbe, 0xb8, 0xb9, 0xbf, 0x92, 0xed, 0x10, 0x00, 0x7f, 0xc3, 0x65, 0x04, 0x64, 0x19, 0xdd, 0x06, 0xc0, 0x5c, 0x5b, 0x5b, 0x2f, 0x48, 0xec, 0xf9, 0x89, 0xe4, 0xce, 0x26, 0x91, 0x09, 0x97, 0x9c, 0xbb, 0x40, 0xb4, 0xa0, 0xad, 0x24, 0xd2, 0x24, 0x83, 0xd1, 0xee, 0x31, 0x5a, 0xd4, 0xcc, 0xb1, 0x53, 0x42, 0x68, 0x35, 0x26, 0x91, 0xc5, 0x24, 0xf6, 0xdd, 0x8e, 0x6c, 0x29, 0xd2, 0x24, 0xcf, 0x24, 0x69, 0x73, 0xae, 0xc8, 0x6c, 0x5b, 0xf6, 0xb1, 0x40, 0x1a, 0x85, 0x0d, 0x1b, 0x9a, 0xd1, 0xbb, 0x8c, 0xbc, 0xec, 0x47, 0xb0, 0x6f, 0x0f, 0x8c, 0x7f, 0x45, 0xd3, 0xfc, 0x8f, 0x31, 0x92, 0x99, 0xc5, 0x43, 0x3d, 0xdb, 0xc2, 0xb3, 0x05, 0x3b, 0x47, 0xde, 0xd2, 0xec, 0xd4, 0xa4, 0xca, 0xef, 0xd6, 0x14, 0x83, 0x3d, 0xc8, 0xbb, 0x62, 0x2f, 0x31, 0x7e, 0xd0, 0x76, 0xb8, 0x05, 0x7f, 0xe8, 0xde, 0x3f, 0x84, 0x48, 0x0a, 0xd5, 0xe8, 0x3e, 0x4a, 0x61, 0x90, 0x4a, 0x4f, 0x24, 0x8f, 0xb3, 0x97, 0x02, 0x73, 0x57, 0xe1, 0xd3, 0x0e, 0x46, 0x31, 0x39, 0x81, 0x5c, 0x6f, 0xd4, 0xfd, 0x5a, 0xc5, 0xb8, 0x17, 0x2a, 0x45, 0x23, 0x0e, 0xcb, 0x63, 0x18, 0xa0, 0x4f, 0x14, 0x55, 0xd8, 0x4e, 0x5a, 0x8b } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 192, - { 0x6a, 0x7f, 0xd8, 0x4f, 0xb8, 0x5f, 0xad, 0x07, 0x3b, 0x34, 0x40, 0x6d, 0xb7, 0x4f, 0x8d, 0x61, 0xa6, 0xab, 0xc1, 0x21, 0x96, 0xa9, 0x61, 0xdd, 0x79, 0x56, 0x5e, 0x9d, 0xa6, 0xe5, 0x18, 0x7b, 0xce, 0x2d, 0x98, 0x02, 0x50, 0xf7, 0x35, 0x95, 0x75, 0x35, 0x92, 0x70, 0xd9, 0x15, 0x90, 0xbb, 0x0e, 0x42, 0x7c, 0x71, 0x46, 0x0b, 0x55, 0xd5, 0x14, 0x10, 0xb1, 0x91, 0xbc, 0xf3, 0x09, 0xfe, 0xa1, 0x31, 0xa9, 0x2c, 0x8e, 0x70, 0x27, 0x38, 0xfa, 0x71, 0x9f, 0x1e, 0x00, 0x41, 0xf5, 0x2e, 0x40, 0xe9, 0x1f, 0x22, 0x9f, 0x4d, 0x96, 0xa1, 0xe6, 0xf1, 0x72, 0xe1, 0x55, 0x96, 0xb4, 0x51, 0x0a, 0x6d, 0xae, 0xc2, 0x61, 0x05, 0xf2, 0xbe, 0xbc, 0x53, 0x31, 0x6b, 0x87, 0xbd, 0xf2, 0x13, 0x11, 0x66, 0x60, 0x70, 0xe8, 0xdf, 0xee, 0x69, 0xd5, 0x2c, 0x71, 0xa9, 0x76, 0xca, 0xae, 0x79, 0xc7, 0x2b, 0x68, 0xd2, 0x85, 0x80, 0xdc, 0x68, 0x6d, 0x9f, 0x51, 0x29, 0xd2, 0x25, 0xf8, 0x2b, 0x3d, 0x61, 0x55, 0x13, 0xa8, 0x82, 0xb3, 0xdb, 0x91, 0x41, 0x6b, 0x48, 0xce, 0x08, 0x88, 0x82, 0x13, 0xe3, 0x7e, 0xeb, 0x9a, 0xf8, 0x00, 0xd8, 0x1c, 0xab, 0x32, 0x8c, 0xe4, 0x20, 0x68, 0x99, 0x03, 0xc0, 0x0c, 0x7b, 0x5f, 0xd3, 0x1b, 0x75, 0x50, 0x3a, 0x6d, 0x41, 0x96, 0x84, 0xd6, 0x29 } -, - /* Prime p */ - 96, - { 0xf8, 0xeb, 0x97, 0xe9, 0x8d, 0xf1, 0x26, 0x64, 0xee, 0xfd, 0xb7, 0x61, 0x59, 0x6a, 0x69, 0xdd, 0xcd, 0x0e, 0x76, 0xda, 0xec, 0xe6, 0xed, 0x4b, 0xf5, 0xa1, 0xb5, 0x0a, 0xc0, 0x86, 0xf7, 0x92, 0x8a, 0x4d, 0x2f, 0x87, 0x26, 0xa7, 0x7e, 0x51, 0x5b, 0x74, 0xda, 0x41, 0x98, 0x8f, 0x22, 0x0b, 0x1c, 0xc8, 0x7a, 0xa1, 0xfc, 0x81, 0x0c, 0xe9, 0x9a, 0x82, 0xf2, 0xd1, 0xce, 0x82, 0x1e, 0xdc, 0xed, 0x79, 0x4c, 0x69, 0x41, 0xf4, 0x2c, 0x7a, 0x1a, 0x0b, 0x8c, 0x4d, 0x28, 0xc7, 0x5e, 0xc6, 0x0b, 0x65, 0x22, 0x79, 0xf6, 0x15, 0x4a, 0x76, 0x2a, 0xed, 0x16, 0x5d, 0x47, 0xde, 0xe3, 0x67 } -, - /* Prime q */ - 96, - { 0xed, 0x4d, 0x71, 0xd0, 0xa6, 0xe2, 0x4b, 0x93, 0xc2, 0xe5, 0xf6, 0xb4, 0xbb, 0xe0, 0x5f, 0x5f, 0xb0, 0xaf, 0xa0, 0x42, 0xd2, 0x04, 0xfe, 0x33, 0x78, 0xd3, 0x65, 0xc2, 0xf2, 0x88, 0xb6, 0xa8, 0xda, 0xd7, 0xef, 0xe4, 0x5d, 0x15, 0x3e, 0xef, 0x40, 0xca, 0xcc, 0x7b, 0x81, 0xff, 0x93, 0x40, 0x02, 0xd1, 0x08, 0x99, 0x4b, 0x94, 0xa5, 0xe4, 0x72, 0x8c, 0xd9, 0xc9, 0x63, 0x37, 0x5a, 0xe4, 0x99, 0x65, 0xbd, 0xa5, 0x5c, 0xbf, 0x0e, 0xfe, 0xd8, 0xd6, 0x55, 0x3b, 0x40, 0x27, 0xf2, 0xd8, 0x62, 0x08, 0xa6, 0xe6, 0xb4, 0x89, 0xc1, 0x76, 0x12, 0x80, 0x92, 0xd6, 0x29, 0xe4, 0x9d, 0x3d } -, - /* p's CRT exponent dP */ - 96, - { 0x2b, 0xb6, 0x8b, 0xdd, 0xfb, 0x0c, 0x4f, 0x56, 0xc8, 0x55, 0x8b, 0xff, 0xaf, 0x89, 0x2d, 0x80, 0x43, 0x03, 0x78, 0x41, 0xe7, 0xfa, 0x81, 0xcf, 0xa6, 0x1a, 0x38, 0xc5, 0xe3, 0x9b, 0x90, 0x1c, 0x8e, 0xe7, 0x11, 0x22, 0xa5, 0xda, 0x22, 0x27, 0xbd, 0x6c, 0xde, 0xeb, 0x48, 0x14, 0x52, 0xc1, 0x2a, 0xd3, 0xd6, 0x1d, 0x5e, 0x4f, 0x77, 0x6a, 0x0a, 0xb5, 0x56, 0x59, 0x1b, 0xef, 0xe3, 0xe5, 0x9e, 0x5a, 0x7f, 0xdd, 0xb8, 0x34, 0x5e, 0x1f, 0x2f, 0x35, 0xb9, 0xf4, 0xce, 0xe5, 0x7c, 0x32, 0x41, 0x4c, 0x08, 0x6a, 0xec, 0x99, 0x3e, 0x93, 0x53, 0xe4, 0x80, 0xd9, 0xee, 0xc6, 0x28, 0x9f } -, - /* q's CRT exponent dQ */ - 96, - { 0x4f, 0xf8, 0x97, 0x70, 0x9f, 0xad, 0x07, 0x97, 0x46, 0x49, 0x45, 0x78, 0xe7, 0x0f, 0xd8, 0x54, 0x61, 0x30, 0xee, 0xab, 0x56, 0x27, 0xc4, 0x9b, 0x08, 0x0f, 0x05, 0xee, 0x4a, 0xd9, 0xf3, 0xe4, 0xb7, 0xcb, 0xa9, 0xd6, 0xa5, 0xdf, 0xf1, 0x13, 0xa4, 0x1c, 0x34, 0x09, 0x33, 0x68, 0x33, 0xf1, 0x90, 0x81, 0x6d, 0x8a, 0x6b, 0xc4, 0x2e, 0x9b, 0xec, 0x56, 0xb7, 0x56, 0x7d, 0x0f, 0x3c, 0x9c, 0x69, 0x6d, 0xb6, 0x19, 0xb2, 0x45, 0xd9, 0x01, 0xdd, 0x85, 0x6d, 0xb7, 0xc8, 0x09, 0x2e, 0x77, 0xe9, 0xa1, 0xcc, 0xcd, 0x56, 0xee, 0x4d, 0xba, 0x42, 0xc5, 0xfd, 0xb6, 0x1a, 0xec, 0x26, 0x69 } -, - /* CRT coefficient qInv */ - 96, - { 0x77, 0xb9, 0xd1, 0x13, 0x7b, 0x50, 0x40, 0x4a, 0x98, 0x27, 0x29, 0x31, 0x6e, 0xfa, 0xfc, 0x7d, 0xfe, 0x66, 0xd3, 0x4e, 0x5a, 0x18, 0x26, 0x00, 0xd5, 0xf3, 0x0a, 0x0a, 0x85, 0x12, 0x05, 0x1c, 0x56, 0x0d, 0x08, 0x1d, 0x4d, 0x0a, 0x18, 0x35, 0xec, 0x3d, 0x25, 0xa6, 0x0f, 0x4e, 0x4d, 0x6a, 0xa9, 0x48, 0xb2, 0xbf, 0x3d, 0xbb, 0x5b, 0x12, 0x4c, 0xbb, 0xc3, 0x48, 0x92, 0x55, 0xa3, 0xa9, 0x48, 0x37, 0x2f, 0x69, 0x78, 0x49, 0x67, 0x45, 0xf9, 0x43, 0xe1, 0xdb, 0x4f, 0x18, 0x38, 0x2c, 0xea, 0xa5, 0x05, 0xdf, 0xc6, 0x57, 0x57, 0xbb, 0x3f, 0x85, 0x7a, 0x58, 0xdc, 0xe5, 0x21, 0x56 } - -} -, -{{ - "RSASSA-PSS Signature Example 9.1", - /* Message to be signed */ - 211, - { 0xa8, 0x8e, 0x26, 0x58, 0x55, 0xe9, 0xd7, 0xca, 0x36, 0xc6, 0x87, 0x95, 0xf0, 0xb3, 0x1b, 0x59, 0x1c, 0xd6, 0x58, 0x7c, 0x71, 0xd0, 0x60, 0xa0, 0xb3, 0xf7, 0xf3, 0xea, 0xef, 0x43, 0x79, 0x59, 0x22, 0x02, 0x8b, 0xc2, 0xb6, 0xad, 0x46, 0x7c, 0xfc, 0x2d, 0x7f, 0x65, 0x9c, 0x53, 0x85, 0xaa, 0x70, 0xba, 0x36, 0x72, 0xcd, 0xde, 0x4c, 0xfe, 0x49, 0x70, 0xcc, 0x79, 0x04, 0x60, 0x1b, 0x27, 0x88, 0x72, 0xbf, 0x51, 0x32, 0x1c, 0x4a, 0x97, 0x2f, 0x3c, 0x95, 0x57, 0x0f, 0x34, 0x45, 0xd4, 0xf5, 0x79, 0x80, 0xe0, 0xf2, 0x0d, 0xf5, 0x48, 0x46, 0xe6, 0xa5, 0x2c, 0x66, 0x8f, 0x12, 0x88, 0xc0, 0x3f, 0x95, 0x00, 0x6e, 0xa3, 0x2f, 0x56, 0x2d, 0x40, 0xd5, 0x2a, 0xf9, 0xfe, 0xb3, 0x2f, 0x0f, 0xa0, 0x6d, 0xb6, 0x5b, 0x58, 0x8a, 0x23, 0x7b, 0x34, 0xe5, 0x92, 0xd5, 0x5c, 0xf9, 0x79, 0xf9, 0x03, 0xa6, 0x42, 0xef, 0x64, 0xd2, 0xed, 0x54, 0x2a, 0xa8, 0xc7, 0x7d, 0xc1, 0xdd, 0x76, 0x2f, 0x45, 0xa5, 0x93, 0x03, 0xed, 0x75, 0xe5, 0x41, 0xca, 0x27, 0x1e, 0x2b, 0x60, 0xca, 0x70, 0x9e, 0x44, 0xfa, 0x06, 0x61, 0x13, 0x1e, 0x8d, 0x5d, 0x41, 0x63, 0xfd, 0x8d, 0x39, 0x85, 0x66, 0xce, 0x26, 0xde, 0x87, 0x30, 0xe7, 0x2f, 0x9c, 0xca, 0x73, 0x76, 0x41, 0xc2, 0x44, 0x15, 0x94, 0x20, 0x63, 0x70, 0x28, 0xdf, 0x0a, 0x18, 0x07, 0x9d, 0x62, 0x08, 0xea, 0x8b, 0x47, 0x11, 0xa2, 0xc7, 0x50, 0xf5 } -, - /* Salt */ - 20, - { 0xc0, 0xa4, 0x25, 0x31, 0x3d, 0xf8, 0xd7, 0x56, 0x4b, 0xd2, 0x43, 0x4d, 0x31, 0x15, 0x23, 0xd5, 0x25, 0x7e, 0xed, 0x80 } -, - /* Signature */ - 192, - { 0x58, 0x61, 0x07, 0x22, 0x6c, 0x3c, 0xe0, 0x13, 0xa7, 0xc8, 0xf0, 0x4d, 0x1a, 0x6a, 0x29, 0x59, 0xbb, 0x4b, 0x8e, 0x20, 0x5b, 0xa4, 0x3a, 0x27, 0xb5, 0x0f, 0x12, 0x41, 0x11, 0xbc, 0x35, 0xef, 0x58, 0x9b, 0x03, 0x9f, 0x59, 0x32, 0x18, 0x7c, 0xb6, 0x96, 0xd7, 0xd9, 0xa3, 0x2c, 0x0c, 0x38, 0x30, 0x0a, 0x5c, 0xdd, 0xa4, 0x83, 0x4b, 0x62, 0xd2, 0xeb, 0x24, 0x0a, 0xf3, 0x3f, 0x79, 0xd1, 0x3d, 0xfb, 0xf0, 0x95, 0xbf, 0x59, 0x9e, 0x0d, 0x96, 0x86, 0x94, 0x8c, 0x19, 0x64, 0x74, 0x7b, 0x67, 0xe8, 0x9c, 0x9a, 0xba, 0x5c, 0xd8, 0x50, 0x16, 0x23, 0x6f, 0x56, 0x6c, 0xc5, 0x80, 0x2c, 0xb1, 0x3e, 0xad, 0x51, 0xbc, 0x7c, 0xa6, 0xbe, 0xf3, 0xb9, 0x4d, 0xcb, 0xdb, 0xb1, 0xd5, 0x70, 0x46, 0x97, 0x71, 0xdf, 0x0e, 0x00, 0xb1, 0xa8, 0xa0, 0x67, 0x77, 0x47, 0x2d, 0x23, 0x16, 0x27, 0x9e, 0xda, 0xe8, 0x64, 0x74, 0x66, 0x8d, 0x4e, 0x1e, 0xff, 0xf9, 0x5f, 0x1d, 0xe6, 0x1c, 0x60, 0x20, 0xda, 0x32, 0xae, 0x92, 0xbb, 0xf1, 0x65, 0x20, 0xfe, 0xf3, 0xcf, 0x4d, 0x88, 0xf6, 0x11, 0x21, 0xf2, 0x4b, 0xbd, 0x9f, 0xe9, 0x1b, 0x59, 0xca, 0xf1, 0x23, 0x5b, 0x2a, 0x93, 0xff, 0x81, 0xfc, 0x40, 0x3a, 0xdd, 0xf4, 0xeb, 0xde, 0xa8, 0x49, 0x34, 0xa9, 0xcd, 0xaf, 0x8e, 0x1a, 0x9e } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSASSA-PSS Signature Example 9.2", - /* Message to be signed */ - 107, - { 0xc8, 0xc9, 0xc6, 0xaf, 0x04, 0xac, 0xda, 0x41, 0x4d, 0x22, 0x7e, 0xf2, 0x3e, 0x08, 0x20, 0xc3, 0x73, 0x2c, 0x50, 0x0d, 0xc8, 0x72, 0x75, 0xe9, 0x5b, 0x0d, 0x09, 0x54, 0x13, 0x99, 0x3c, 0x26, 0x58, 0xbc, 0x1d, 0x98, 0x85, 0x81, 0xba, 0x87, 0x9c, 0x2d, 0x20, 0x1f, 0x14, 0xcb, 0x88, 0xce, 0xd1, 0x53, 0xa0, 0x19, 0x69, 0xa7, 0xbf, 0x0a, 0x7b, 0xe7, 0x9c, 0x84, 0xc1, 0x48, 0x6b, 0xc1, 0x2b, 0x3f, 0xa6, 0xc5, 0x98, 0x71, 0xb6, 0x82, 0x7c, 0x8c, 0xe2, 0x53, 0xca, 0x5f, 0xef, 0xa8, 0xa8, 0xc6, 0x90, 0xbf, 0x32, 0x6e, 0x8e, 0x37, 0xcd, 0xb9, 0x6d, 0x90, 0xa8, 0x2e, 0xba, 0xb6, 0x9f, 0x86, 0x35, 0x0e, 0x18, 0x22, 0xe8, 0xbd, 0x53, 0x6a, 0x2e } -, - /* Salt */ - 20, - { 0xb3, 0x07, 0xc4, 0x3b, 0x48, 0x50, 0xa8, 0xda, 0xc2, 0xf1, 0x5f, 0x32, 0xe3, 0x78, 0x39, 0xef, 0x8c, 0x5c, 0x0e, 0x91 } -, - /* Signature */ - 192, - { 0x80, 0xb6, 0xd6, 0x43, 0x25, 0x52, 0x09, 0xf0, 0xa4, 0x56, 0x76, 0x38, 0x97, 0xac, 0x9e, 0xd2, 0x59, 0xd4, 0x59, 0xb4, 0x9c, 0x28, 0x87, 0xe5, 0x88, 0x2e, 0xcb, 0x44, 0x34, 0xcf, 0xd6, 0x6d, 0xd7, 0xe1, 0x69, 0x93, 0x75, 0x38, 0x1e, 0x51, 0xcd, 0x7f, 0x55, 0x4f, 0x2c, 0x27, 0x17, 0x04, 0xb3, 0x99, 0xd4, 0x2b, 0x4b, 0xe2, 0x54, 0x0a, 0x0e, 0xca, 0x61, 0x95, 0x1f, 0x55, 0x26, 0x7f, 0x7c, 0x28, 0x78, 0xc1, 0x22, 0x84, 0x2d, 0xad, 0xb2, 0x8b, 0x01, 0xbd, 0x5f, 0x8c, 0x02, 0x5f, 0x7e, 0x22, 0x84, 0x18, 0xa6, 0x73, 0xc0, 0x3d, 0x6b, 0xc0, 0xc7, 0x36, 0xd0, 0xa2, 0x95, 0x46, 0xbd, 0x67, 0xf7, 0x86, 0xd9, 0xd6, 0x92, 0xcc, 0xea, 0x77, 0x8d, 0x71, 0xd9, 0x8c, 0x20, 0x63, 0xb7, 0xa7, 0x10, 0x92, 0x18, 0x7a, 0x4d, 0x35, 0xaf, 0x10, 0x81, 0x11, 0xd8, 0x3e, 0x83, 0xea, 0xe4, 0x6c, 0x46, 0xaa, 0x34, 0x27, 0x7e, 0x06, 0x04, 0x45, 0x89, 0x90, 0x37, 0x88, 0xf1, 0xd5, 0xe7, 0xce, 0xe2, 0x5f, 0xb4, 0x85, 0xe9, 0x29, 0x49, 0x11, 0x88, 0x14, 0xd6, 0xf2, 0xc3, 0xee, 0x36, 0x14, 0x89, 0x01, 0x6f, 0x32, 0x7f, 0xb5, 0xbc, 0x51, 0x7e, 0xb5, 0x04, 0x70, 0xbf, 0xfa, 0x1a, 0xfa, 0x5f, 0x4c, 0xe9, 0xaa, 0x0c, 0xe5, 0xb8, 0xee, 0x19, 0xbf, 0x55, 0x01, 0xb9, 0x58 } - -} -, -{ - "RSASSA-PSS Signature Example 9.3", - /* Message to be signed */ - 222, - { 0x0a, 0xfa, 0xd4, 0x2c, 0xcd, 0x4f, 0xc6, 0x06, 0x54, 0xa5, 0x50, 0x02, 0xd2, 0x28, 0xf5, 0x2a, 0x4a, 0x5f, 0xe0, 0x3b, 0x8b, 0xbb, 0x08, 0xca, 0x82, 0xda, 0xca, 0x55, 0x8b, 0x44, 0xdb, 0xe1, 0x26, 0x6e, 0x50, 0xc0, 0xe7, 0x45, 0xa3, 0x6d, 0x9d, 0x29, 0x04, 0xe3, 0x40, 0x8a, 0xbc, 0xd1, 0xfd, 0x56, 0x99, 0x94, 0x06, 0x3f, 0x4a, 0x75, 0xcc, 0x72, 0xf2, 0xfe, 0xe2, 0xa0, 0xcd, 0x89, 0x3a, 0x43, 0xaf, 0x1c, 0x5b, 0x8b, 0x48, 0x7d, 0xf0, 0xa7, 0x16, 0x10, 0x02, 0x4e, 0x4f, 0x6d, 0xdf, 0x9f, 0x28, 0xad, 0x08, 0x13, 0xc1, 0xaa, 0xb9, 0x1b, 0xcb, 0x3c, 0x90, 0x64, 0xd5, 0xff, 0x74, 0x2d, 0xef, 0xfe, 0xa6, 0x57, 0x09, 0x41, 0x39, 0x36, 0x9e, 0x5e, 0xa6, 0xf4, 0xa9, 0x63, 0x19, 0xa5, 0xcc, 0x82, 0x24, 0x14, 0x5b, 0x54, 0x50, 0x62, 0x75, 0x8f, 0xef, 0xd1, 0xfe, 0x34, 0x09, 0xae, 0x16, 0x92, 0x59, 0xc6, 0xcd, 0xfd, 0x6b, 0x5f, 0x29, 0x58, 0xe3, 0x14, 0xfa, 0xec, 0xbe, 0x69, 0xd2, 0xca, 0xce, 0x58, 0xee, 0x55, 0x17, 0x9a, 0xb9, 0xb3, 0xe6, 0xd1, 0xec, 0xc1, 0x4a, 0x55, 0x7c, 0x5f, 0xeb, 0xe9, 0x88, 0x59, 0x52, 0x64, 0xfc, 0x5d, 0xa1, 0xc5, 0x71, 0x46, 0x2e, 0xca, 0x79, 0x8a, 0x18, 0xa1, 0xa4, 0x94, 0x0c, 0xda, 0xb4, 0xa3, 0xe9, 0x20, 0x09, 0xcc, 0xd4, 0x2e, 0x1e, 0x94, 0x7b, 0x13, 0x14, 0xe3, 0x22, 0x38, 0xa2, 0xde, 0xce, 0x7d, 0x23, 0xa8, 0x9b, 0x5b, 0x30, 0xc7, 0x51, 0xfd, 0x0a, 0x4a, 0x43, 0x0d, 0x2c, 0x54, 0x85, 0x94 } -, - /* Salt */ - 20, - { 0x9a, 0x2b, 0x00, 0x7e, 0x80, 0x97, 0x8b, 0xbb, 0x19, 0x2c, 0x35, 0x4e, 0xb7, 0xda, 0x9a, 0xed, 0xfc, 0x74, 0xdb, 0xf5 } -, - /* Signature */ - 192, - { 0x48, 0x44, 0x08, 0xf3, 0x89, 0x8c, 0xd5, 0xf5, 0x34, 0x83, 0xf8, 0x08, 0x19, 0xef, 0xbf, 0x27, 0x08, 0xc3, 0x4d, 0x27, 0xa8, 0xb2, 0xa6, 0xfa, 0xe8, 0xb3, 0x22, 0xf9, 0x24, 0x02, 0x37, 0xf9, 0x81, 0x81, 0x7a, 0xca, 0x18, 0x46, 0xf1, 0x08, 0x4d, 0xaa, 0x6d, 0x7c, 0x07, 0x95, 0xf6, 0xe5, 0xbf, 0x1a, 0xf5, 0x9c, 0x38, 0xe1, 0x85, 0x84, 0x37, 0xce, 0x1f, 0x7e, 0xc4, 0x19, 0xb9, 0x8c, 0x87, 0x36, 0xad, 0xf6, 0xdd, 0x9a, 0x00, 0xb1, 0x80, 0x6d, 0x2b, 0xd3, 0xad, 0x0a, 0x73, 0x77, 0x5e, 0x05, 0xf5, 0x2d, 0xfe, 0xf3, 0xa5, 0x9a, 0xb4, 0xb0, 0x81, 0x43, 0xf0, 0xdf, 0x05, 0xcd, 0x1a, 0xd9, 0xd0, 0x4b, 0xec, 0xec, 0xa6, 0xda, 0xa4, 0xa2, 0x12, 0x98, 0x03, 0xe2, 0x00, 0xcb, 0xc7, 0x77, 0x87, 0xca, 0xf4, 0xc1, 0xd0, 0x66, 0x3a, 0x6c, 0x59, 0x87, 0xb6, 0x05, 0x95, 0x20, 0x19, 0x78, 0x2c, 0xaf, 0x2e, 0xc1, 0x42, 0x6d, 0x68, 0xfb, 0x94, 0xed, 0x1d, 0x4b, 0xe8, 0x16, 0xa7, 0xed, 0x08, 0x1b, 0x77, 0xe6, 0xab, 0x33, 0x0b, 0x3f, 0xfc, 0x07, 0x38, 0x20, 0xfe, 0xcd, 0xe3, 0x72, 0x7f, 0xcb, 0xe2, 0x95, 0xee, 0x61, 0xa0, 0x50, 0xa3, 0x43, 0x65, 0x86, 0x37, 0xc3, 0xfd, 0x65, 0x9c, 0xfb, 0x63, 0x73, 0x6d, 0xe3, 0x2d, 0x9f, 0x90, 0xd3, 0xc2, 0xf6, 0x3e, 0xca } - -} -, -{ - "RSASSA-PSS Signature Example 9.4", - /* Message to be signed */ - 248, - { 0x1d, 0xfd, 0x43, 0xb4, 0x6c, 0x93, 0xdb, 0x82, 0x62, 0x9b, 0xda, 0xe2, 0xbd, 0x0a, 0x12, 0xb8, 0x82, 0xea, 0x04, 0xc3, 0xb4, 0x65, 0xf5, 0xcf, 0x93, 0x02, 0x3f, 0x01, 0x05, 0x96, 0x26, 0xdb, 0xbe, 0x99, 0xf2, 0x6b, 0xb1, 0xbe, 0x94, 0x9d, 0xdd, 0xd1, 0x6d, 0xc7, 0xf3, 0xde, 0xbb, 0x19, 0xa1, 0x94, 0x62, 0x7f, 0x0b, 0x22, 0x44, 0x34, 0xdf, 0x7d, 0x87, 0x00, 0xe9, 0xe9, 0x8b, 0x06, 0xe3, 0x60, 0xc1, 0x2f, 0xdb, 0xe3, 0xd1, 0x9f, 0x51, 0xc9, 0x68, 0x4e, 0xb9, 0x08, 0x9e, 0xcb, 0xb0, 0xa2, 0xf0, 0x45, 0x03, 0x99, 0xd3, 0xf5, 0x9e, 0xac, 0x72, 0x94, 0x08, 0x5d, 0x04, 0x4f, 0x53, 0x93, 0xc6, 0xce, 0x73, 0x74, 0x23, 0xd8, 0xb8, 0x6c, 0x41, 0x53, 0x70, 0xd3, 0x89, 0xe3, 0x0b, 0x9f, 0x0a, 0x3c, 0x02, 0xd2, 0x5d, 0x00, 0x82, 0xe8, 0xad, 0x6f, 0x3f, 0x1e, 0xf2, 0x4a, 0x45, 0xc3, 0xcf, 0x82, 0xb3, 0x83, 0x36, 0x70, 0x63, 0xa4, 0xd4, 0x61, 0x3e, 0x42, 0x64, 0xf0, 0x1b, 0x2d, 0xac, 0x2e, 0x5a, 0xa4, 0x20, 0x43, 0xf8, 0xfb, 0x5f, 0x69, 0xfa, 0x87, 0x1d, 0x14, 0xfb, 0x27, 0x3e, 0x76, 0x7a, 0x53, 0x1c, 0x40, 0xf0, 0x2f, 0x34, 0x3b, 0xc2, 0xfb, 0x45, 0xa0, 0xc7, 0xe0, 0xf6, 0xbe, 0x25, 0x61, 0x92, 0x3a, 0x77, 0x21, 0x1d, 0x66, 0xa6, 0xe2, 0xdb, 0xb4, 0x3c, 0x36, 0x63, 0x50, 0xbe, 0xae, 0x22, 0xda, 0x3a, 0xc2, 0xc1, 0xf5, 0x07, 0x70, 0x96, 0xfc, 0xb5, 0xc4, 0xbf, 0x25, 0x5f, 0x75, 0x74, 0x35, 0x1a, 0xe0, 0xb1, 0xe1, 0xf0, 0x36, 0x32, 0x81, 0x7c, 0x08, 0x56, 0xd4, 0xa8, 0xba, 0x97, 0xaf, 0xbd, 0xc8, 0xb8, 0x58, 0x55, 0x40, 0x2b, 0xc5, 0x69, 0x26, 0xfc, 0xec, 0x20, 0x9f, 0x9e, 0xa8 } -, - /* Salt */ - 20, - { 0x70, 0xf3, 0x82, 0xbd, 0xdf, 0x4d, 0x5d, 0x2d, 0xd8, 0x8b, 0x3b, 0xc7, 0xb7, 0x30, 0x8b, 0xe6, 0x32, 0xb8, 0x40, 0x45 } -, - /* Signature */ - 192, - { 0x84, 0xeb, 0xeb, 0x48, 0x1b, 0xe5, 0x98, 0x45, 0xb4, 0x64, 0x68, 0xba, 0xfb, 0x47, 0x1c, 0x01, 0x12, 0xe0, 0x2b, 0x23, 0x5d, 0x84, 0xb5, 0xd9, 0x11, 0xcb, 0xd1, 0x92, 0x6e, 0xe5, 0x07, 0x4a, 0xe0, 0x42, 0x44, 0x95, 0xcb, 0x20, 0xe8, 0x23, 0x08, 0xb8, 0xeb, 0xb6, 0x5f, 0x41, 0x9a, 0x03, 0xfb, 0x40, 0xe7, 0x2b, 0x78, 0x98, 0x1d, 0x88, 0xaa, 0xd1, 0x43, 0x05, 0x36, 0x85, 0x17, 0x2c, 0x97, 0xb2, 0x9c, 0x8b, 0x7b, 0xf0, 0xae, 0x73, 0xb5, 0xb2, 0x26, 0x3c, 0x40, 0x3d, 0xa0, 0xed, 0x2f, 0x80, 0xff, 0x74, 0x50, 0xaf, 0x78, 0x28, 0xeb, 0x8b, 0x86, 0xf0, 0x02, 0x8b, 0xd2, 0xa8, 0xb1, 0x76, 0xa4, 0xd2, 0x28, 0xcc, 0xce, 0xa1, 0x83, 0x94, 0xf2, 0x38, 0xb0, 0x9f, 0xf7, 0x58, 0xcc, 0x00, 0xbc, 0x04, 0x30, 0x11, 0x52, 0x35, 0x57, 0x42, 0xf2, 0x82, 0xb5, 0x4e, 0x66, 0x3a, 0x91, 0x9e, 0x70, 0x9d, 0x8d, 0xa2, 0x4a, 0xde, 0x55, 0x00, 0xa7, 0xb9, 0xaa, 0x50, 0x22, 0x6e, 0x0c, 0xa5, 0x29, 0x23, 0xe6, 0xc2, 0xd8, 0x60, 0xec, 0x50, 0xff, 0x48, 0x0f, 0xa5, 0x74, 0x77, 0xe8, 0x2b, 0x05, 0x65, 0xf4, 0x37, 0x9f, 0x79, 0xc7, 0x72, 0xd5, 0xc2, 0xda, 0x80, 0xaf, 0x9f, 0xbf, 0x32, 0x5e, 0xce, 0x6f, 0xc2, 0x0b, 0x00, 0x96, 0x16, 0x14, 0xbe, 0xe8, 0x9a, 0x18, 0x3e } - -} -, -{ - "RSASSA-PSS Signature Example 9.5", - /* Message to be signed */ - 234, - { 0x1b, 0xdc, 0x6e, 0x7c, 0x98, 0xfb, 0x8c, 0xf5, 0x4e, 0x9b, 0x09, 0x7b, 0x66, 0xa8, 0x31, 0xe9, 0xcf, 0xe5, 0x2d, 0x9d, 0x48, 0x88, 0x44, 0x8e, 0xe4, 0xb0, 0x97, 0x80, 0x93, 0xba, 0x1d, 0x7d, 0x73, 0xae, 0x78, 0xb3, 0xa6, 0x2b, 0xa4, 0xad, 0x95, 0xcd, 0x28, 0x9c, 0xcb, 0x9e, 0x00, 0x52, 0x26, 0xbb, 0x3d, 0x17, 0x8b, 0xcc, 0xaa, 0x82, 0x1f, 0xb0, 0x44, 0xa4, 0xe2, 0x1e, 0xe9, 0x76, 0x96, 0xc1, 0x4d, 0x06, 0x78, 0xc9, 0x4c, 0x2d, 0xae, 0x93, 0xb0, 0xad, 0x73, 0x92, 0x22, 0x18, 0x55, 0x3d, 0xaa, 0x7e, 0x44, 0xeb, 0xe5, 0x77, 0x25, 0xa7, 0xa4, 0x5c, 0xc7, 0x2b, 0x9b, 0x21, 0x38, 0xa6, 0xb1, 0x7c, 0x8d, 0xb4, 0x11, 0xce, 0x82, 0x79, 0xee, 0x12, 0x41, 0xaf, 0xf0, 0xa8, 0xbe, 0xc6, 0xf7, 0x7f, 0x87, 0xed, 0xb0, 0xc6, 0x9c, 0xb2, 0x72, 0x36, 0xe3, 0x43, 0x5a, 0x80, 0x0b, 0x19, 0x2e, 0x4f, 0x11, 0xe5, 0x19, 0xe3, 0xfe, 0x30, 0xfc, 0x30, 0xea, 0xcc, 0xca, 0x4f, 0xbb, 0x41, 0x76, 0x90, 0x29, 0xbf, 0x70, 0x8e, 0x81, 0x7a, 0x9e, 0x68, 0x38, 0x05, 0xbe, 0x67, 0xfa, 0x10, 0x09, 0x84, 0x68, 0x3b, 0x74, 0x83, 0x8e, 0x3b, 0xcf, 0xfa, 0x79, 0x36, 0x6e, 0xed, 0x1d, 0x48, 0x1c, 0x76, 0x72, 0x91, 0x18, 0x83, 0x8f, 0x31, 0xba, 0x8a, 0x04, 0x8a, 0x93, 0xc1, 0xbe, 0x44, 0x24, 0x59, 0x8e, 0x8d, 0xf6, 0x32, 0x8b, 0x7a, 0x77, 0x88, 0x0a, 0x3f, 0x9c, 0x7e, 0x2e, 0x8d, 0xfc, 0xa8, 0xeb, 0x5a, 0x26, 0xfb, 0x86, 0xbd, 0xc5, 0x56, 0xd4, 0x2b, 0xbe, 0x01, 0xd9, 0xfa, 0x6e, 0xd8, 0x06, 0x46, 0x49, 0x1c, 0x93, 0x41 } -, - /* Salt */ - 20, - { 0xd6, 0x89, 0x25, 0x7a, 0x86, 0xef, 0xfa, 0x68, 0x21, 0x2c, 0x5e, 0x0c, 0x61, 0x9e, 0xca, 0x29, 0x5f, 0xb9, 0x1b, 0x67 } -, - /* Signature */ - 192, - { 0x82, 0x10, 0x2d, 0xf8, 0xcb, 0x91, 0xe7, 0x17, 0x99, 0x19, 0xa0, 0x4d, 0x26, 0xd3, 0x35, 0xd6, 0x4f, 0xbc, 0x2f, 0x87, 0x2c, 0x44, 0x83, 0x39, 0x43, 0x24, 0x1d, 0xe8, 0x45, 0x48, 0x10, 0x27, 0x4c, 0xdf, 0x3d, 0xb5, 0xf4, 0x2d, 0x42, 0x3d, 0xb1, 0x52, 0xaf, 0x71, 0x35, 0xf7, 0x01, 0x42, 0x0e, 0x39, 0xb4, 0x94, 0xa6, 0x7c, 0xbf, 0xd1, 0x9f, 0x91, 0x19, 0xda, 0x23, 0x3a, 0x23, 0xda, 0x5c, 0x64, 0x39, 0xb5, 0xba, 0x0d, 0x2b, 0xc3, 0x73, 0xee, 0xe3, 0x50, 0x70, 0x01, 0x37, 0x8d, 0x4a, 0x40, 0x73, 0x85, 0x6b, 0x7f, 0xe2, 0xab, 0xa0, 0xb5, 0xee, 0x93, 0xb2, 0x7f, 0x4a, 0xfe, 0xc7, 0xd4, 0xd1, 0x20, 0x92, 0x1c, 0x83, 0xf6, 0x06, 0x76, 0x5b, 0x02, 0xc1, 0x9e, 0x4d, 0x6a, 0x1a, 0x3b, 0x95, 0xfa, 0x4c, 0x42, 0x29, 0x51, 0xbe, 0x4f, 0x52, 0x13, 0x10, 0x77, 0xef, 0x17, 0x17, 0x97, 0x29, 0xcd, 0xdf, 0xbd, 0xb5, 0x69, 0x50, 0xdb, 0xac, 0xee, 0xfe, 0x78, 0xcb, 0x16, 0x64, 0x0a, 0x09, 0x9e, 0xa5, 0x6d, 0x24, 0x38, 0x9e, 0xef, 0x10, 0xf8, 0xfe, 0xcb, 0x31, 0xba, 0x3e, 0xa3, 0xb2, 0x27, 0xc0, 0xa8, 0x66, 0x98, 0xbb, 0x89, 0xe3, 0xe9, 0x36, 0x39, 0x05, 0xbf, 0x22, 0x77, 0x7b, 0x2a, 0x3a, 0xa5, 0x21, 0xb6, 0x5b, 0x4c, 0xef, 0x76, 0xd8, 0x3b, 0xde, 0x4c } - -} -, -{ - "RSASSA-PSS Signature Example 9.6", - /* Message to be signed */ - 165, - { 0x88, 0xc7, 0xa9, 0xf1, 0x36, 0x04, 0x01, 0xd9, 0x0e, 0x53, 0xb1, 0x01, 0xb6, 0x1c, 0x53, 0x25, 0xc3, 0xc7, 0x5d, 0xb1, 0xb4, 0x11, 0xfb, 0xeb, 0x8e, 0x83, 0x0b, 0x75, 0xe9, 0x6b, 0x56, 0x67, 0x0a, 0xd2, 0x45, 0x40, 0x4e, 0x16, 0x79, 0x35, 0x44, 0xee, 0x35, 0x4b, 0xc6, 0x13, 0xa9, 0x0c, 0xc9, 0x84, 0x87, 0x15, 0xa7, 0x3d, 0xb5, 0x89, 0x3e, 0x7f, 0x6d, 0x27, 0x98, 0x15, 0xc0, 0xc1, 0xde, 0x83, 0xef, 0x8e, 0x29, 0x56, 0xe3, 0xa5, 0x6e, 0xd2, 0x6a, 0x88, 0x8d, 0x7a, 0x9c, 0xdc, 0xd0, 0x42, 0xf4, 0xb1, 0x6b, 0x7f, 0xa5, 0x1e, 0xf1, 0xa0, 0x57, 0x36, 0x62, 0xd1, 0x6a, 0x30, 0x2d, 0x0e, 0xc5, 0xb2, 0x85, 0xd2, 0xe0, 0x3a, 0xd9, 0x65, 0x29, 0xc8, 0x7b, 0x3d, 0x37, 0x4d, 0xb3, 0x72, 0xd9, 0x5b, 0x24, 0x43, 0xd0, 0x61, 0xb6, 0xb1, 0xa3, 0x50, 0xba, 0x87, 0x80, 0x7e, 0xd0, 0x83, 0xaf, 0xd1, 0xeb, 0x05, 0xc3, 0xf5, 0x2f, 0x4e, 0xba, 0x5e, 0xd2, 0x22, 0x77, 0x14, 0xfd, 0xb5, 0x0b, 0x9d, 0x9d, 0x9d, 0xd6, 0x81, 0x4f, 0x62, 0xf6, 0x27, 0x2f, 0xcd, 0x5c, 0xdb, 0xce, 0x7a, 0x9e, 0xf7, 0x97 } -, - /* Salt */ - 20, - { 0xc2, 0x5f, 0x13, 0xbf, 0x67, 0xd0, 0x81, 0x67, 0x1a, 0x04, 0x81, 0xa1, 0xf1, 0x82, 0x0d, 0x61, 0x3b, 0xba, 0x22, 0x76 } -, - /* Signature */ - 192, - { 0xa7, 0xfd, 0xb0, 0xd2, 0x59, 0x16, 0x5c, 0xa2, 0xc8, 0x8d, 0x00, 0xbb, 0xf1, 0x02, 0x8a, 0x86, 0x7d, 0x33, 0x76, 0x99, 0xd0, 0x61, 0x19, 0x3b, 0x17, 0xa9, 0x64, 0x8e, 0x14, 0xcc, 0xbb, 0xaa, 0xde, 0xac, 0xaa, 0xcd, 0xec, 0x81, 0x5e, 0x75, 0x71, 0x29, 0x4e, 0xbb, 0x8a, 0x11, 0x7a, 0xf2, 0x05, 0xfa, 0x07, 0x8b, 0x47, 0xb0, 0x71, 0x2c, 0x19, 0x9e, 0x3a, 0xd0, 0x51, 0x35, 0xc5, 0x04, 0xc2, 0x4b, 0x81, 0x70, 0x51, 0x15, 0x74, 0x08, 0x02, 0x48, 0x79, 0x92, 0xff, 0xd5, 0x11, 0xd4, 0xaf, 0xc6, 0xb8, 0x54, 0x49, 0x1e, 0xb3, 0xf0, 0xdd, 0x52, 0x31, 0x39, 0x54, 0x2f, 0xf1, 0x5c, 0x31, 0x01, 0xee, 0x85, 0x54, 0x35, 0x17, 0xc6, 0xa3, 0xc7, 0x94, 0x17, 0xc6, 0x7e, 0x2d, 0xd9, 0xaa, 0x74, 0x1e, 0x9a, 0x29, 0xb0, 0x6d, 0xcb, 0x59, 0x3c, 0x23, 0x36, 0xb3, 0x67, 0x0a, 0xe3, 0xaf, 0xba, 0xc7, 0xc3, 0xe7, 0x6e, 0x21, 0x54, 0x73, 0xe8, 0x66, 0xe3, 0x38, 0xca, 0x24, 0x4d, 0xe0, 0x0b, 0x62, 0x62, 0x4d, 0x6b, 0x94, 0x26, 0x82, 0x2c, 0xea, 0xe9, 0xf8, 0xcc, 0x46, 0x08, 0x95, 0xf4, 0x12, 0x50, 0x07, 0x3f, 0xd4, 0x5c, 0x5a, 0x1e, 0x7b, 0x42, 0x5c, 0x20, 0x4a, 0x42, 0x3a, 0x69, 0x91, 0x59, 0xf6, 0x90, 0x3e, 0x71, 0x0b, 0x37, 0xa7, 0xbb, 0x2b, 0xc8, 0x04, 0x9f } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -{ - "Example 10: A 2048-bit RSA Key Pair", -{ - /* RSA modulus n */ - 256, - { 0xa5, 0xdd, 0x86, 0x7a, 0xc4, 0xcb, 0x02, 0xf9, 0x0b, 0x94, 0x57, 0xd4, 0x8c, 0x14, 0xa7, 0x70, 0xef, 0x99, 0x1c, 0x56, 0xc3, 0x9c, 0x0e, 0xc6, 0x5f, 0xd1, 0x1a, 0xfa, 0x89, 0x37, 0xce, 0xa5, 0x7b, 0x9b, 0xe7, 0xac, 0x73, 0xb4, 0x5c, 0x00, 0x17, 0x61, 0x5b, 0x82, 0xd6, 0x22, 0xe3, 0x18, 0x75, 0x3b, 0x60, 0x27, 0xc0, 0xfd, 0x15, 0x7b, 0xe1, 0x2f, 0x80, 0x90, 0xfe, 0xe2, 0xa7, 0xad, 0xcd, 0x0e, 0xef, 0x75, 0x9f, 0x88, 0xba, 0x49, 0x97, 0xc7, 0xa4, 0x2d, 0x58, 0xc9, 0xaa, 0x12, 0xcb, 0x99, 0xae, 0x00, 0x1f, 0xe5, 0x21, 0xc1, 0x3b, 0xb5, 0x43, 0x14, 0x45, 0xa8, 0xd5, 0xae, 0x4f, 0x5e, 0x4c, 0x7e, 0x94, 0x8a, 0xc2, 0x27, 0xd3, 0x60, 0x40, 0x71, 0xf2, 0x0e, 0x57, 0x7e, 0x90, 0x5f, 0xbe, 0xb1, 0x5d, 0xfa, 0xf0, 0x6d, 0x1d, 0xe5, 0xae, 0x62, 0x53, 0xd6, 0x3a, 0x6a, 0x21, 0x20, 0xb3, 0x1a, 0x5d, 0xa5, 0xda, 0xbc, 0x95, 0x50, 0x60, 0x0e, 0x20, 0xf2, 0x7d, 0x37, 0x39, 0xe2, 0x62, 0x79, 0x25, 0xfe, 0xa3, 0xcc, 0x50, 0x9f, 0x21, 0xdf, 0xf0, 0x4e, 0x6e, 0xea, 0x45, 0x49, 0xc5, 0x40, 0xd6, 0x80, 0x9f, 0xf9, 0x30, 0x7e, 0xed, 0xe9, 0x1f, 0xff, 0x58, 0x73, 0x3d, 0x83, 0x85, 0xa2, 0x37, 0xd6, 0xd3, 0x70, 0x5a, 0x33, 0xe3, 0x91, 0x90, 0x09, 0x92, 0x07, 0x0d, 0xf7, 0xad, 0xf1, 0x35, 0x7c, 0xf7, 0xe3, 0x70, 0x0c, 0xe3, 0x66, 0x7d, 0xe8, 0x3f, 0x17, 0xb8, 0xdf, 0x17, 0x78, 0xdb, 0x38, 0x1d, 0xce, 0x09, 0xcb, 0x4a, 0xd0, 0x58, 0xa5, 0x11, 0x00, 0x1a, 0x73, 0x81, 0x98, 0xee, 0x27, 0xcf, 0x55, 0xa1, 0x3b, 0x75, 0x45, 0x39, 0x90, 0x65, 0x82, 0xec, 0x8b, 0x17, 0x4b, 0xd5, 0x8d, 0x5d, 0x1f, 0x3d, 0x76, 0x7c, 0x61, 0x37, 0x21, 0xae, 0x05 } -, - /* RSA public exponent e */ - 3, - { 0x01, 0x00, 0x01 } -, - /* RSA private exponent d */ - 256, - { 0x2d, 0x2f, 0xf5, 0x67, 0xb3, 0xfe, 0x74, 0xe0, 0x61, 0x91, 0xb7, 0xfd, 0xed, 0x6d, 0xe1, 0x12, 0x29, 0x0c, 0x67, 0x06, 0x92, 0x43, 0x0d, 0x59, 0x69, 0x18, 0x40, 0x47, 0xda, 0x23, 0x4c, 0x96, 0x93, 0xde, 0xed, 0x16, 0x73, 0xed, 0x42, 0x95, 0x39, 0xc9, 0x69, 0xd3, 0x72, 0xc0, 0x4d, 0x6b, 0x47, 0xe0, 0xf5, 0xb8, 0xce, 0xe0, 0x84, 0x3e, 0x5c, 0x22, 0x83, 0x5d, 0xbd, 0x3b, 0x05, 0xa0, 0x99, 0x79, 0x84, 0xae, 0x60, 0x58, 0xb1, 0x1b, 0xc4, 0x90, 0x7c, 0xbf, 0x67, 0xed, 0x84, 0xfa, 0x9a, 0xe2, 0x52, 0xdf, 0xb0, 0xd0, 0xcd, 0x49, 0xe6, 0x18, 0xe3, 0x5d, 0xfd, 0xfe, 0x59, 0xbc, 0xa3, 0xdd, 0xd6, 0x6c, 0x33, 0xce, 0xbb, 0xc7, 0x7a, 0xd4, 0x41, 0xaa, 0x69, 0x5e, 0x13, 0xe3, 0x24, 0xb5, 0x18, 0xf0, 0x1c, 0x60, 0xf5, 0xa8, 0x5c, 0x99, 0x4a, 0xd1, 0x79, 0xf2, 0xa6, 0xb5, 0xfb, 0xe9, 0x34, 0x02, 0xb1, 0x17, 0x67, 0xbe, 0x01, 0xbf, 0x07, 0x34, 0x44, 0xd6, 0xba, 0x1d, 0xd2, 0xbc, 0xa5, 0xbd, 0x07, 0x4d, 0x4a, 0x5f, 0xae, 0x35, 0x31, 0xad, 0x13, 0x03, 0xd8, 0x4b, 0x30, 0xd8, 0x97, 0x31, 0x8c, 0xbb, 0xba, 0x04, 0xe0, 0x3c, 0x2e, 0x66, 0xde, 0x6d, 0x91, 0xf8, 0x2f, 0x96, 0xea, 0x1d, 0x4b, 0xb5, 0x4a, 0x5a, 0xae, 0x10, 0x2d, 0x59, 0x46, 0x57, 0xf5, 0xc9, 0x78, 0x95, 0x53, 0x51, 0x2b, 0x29, 0x6d, 0xea, 0x29, 0xd8, 0x02, 0x31, 0x96, 0x35, 0x7e, 0x3e, 0x3a, 0x6e, 0x95, 0x8f, 0x39, 0xe3, 0xc2, 0x34, 0x40, 0x38, 0xea, 0x60, 0x4b, 0x31, 0xed, 0xc6, 0xf0, 0xf7, 0xff, 0x6e, 0x71, 0x81, 0xa5, 0x7c, 0x92, 0x82, 0x6a, 0x26, 0x8f, 0x86, 0x76, 0x8e, 0x96, 0xf8, 0x78, 0x56, 0x2f, 0xc7, 0x1d, 0x85, 0xd6, 0x9e, 0x44, 0x86, 0x12, 0xf7, 0x04, 0x8f } -, - /* Prime p */ - 128, - { 0xcf, 0xd5, 0x02, 0x83, 0xfe, 0xee, 0xb9, 0x7f, 0x6f, 0x08, 0xd7, 0x3c, 0xbc, 0x7b, 0x38, 0x36, 0xf8, 0x2b, 0xbc, 0xd4, 0x99, 0x47, 0x9f, 0x5e, 0x6f, 0x76, 0xfd, 0xfc, 0xb8, 0xb3, 0x8c, 0x4f, 0x71, 0xdc, 0x9e, 0x88, 0xbd, 0x6a, 0x6f, 0x76, 0x37, 0x1a, 0xfd, 0x65, 0xd2, 0xaf, 0x18, 0x62, 0xb3, 0x2a, 0xfb, 0x34, 0xa9, 0x5f, 0x71, 0xb8, 0xb1, 0x32, 0x04, 0x3f, 0xfe, 0xbe, 0x3a, 0x95, 0x2b, 0xaf, 0x75, 0x92, 0x44, 0x81, 0x48, 0xc0, 0x3f, 0x9c, 0x69, 0xb1, 0xd6, 0x8e, 0x4c, 0xe5, 0xcf, 0x32, 0xc8, 0x6b, 0xaf, 0x46, 0xfe, 0xd3, 0x01, 0xca, 0x1a, 0xb4, 0x03, 0x06, 0x9b, 0x32, 0xf4, 0x56, 0xb9, 0x1f, 0x71, 0x89, 0x8a, 0xb0, 0x81, 0xcd, 0x8c, 0x42, 0x52, 0xef, 0x52, 0x71, 0x91, 0x5c, 0x97, 0x94, 0xb8, 0xf2, 0x95, 0x85, 0x1d, 0xa7, 0x51, 0x0f, 0x99, 0xcb, 0x73, 0xeb } -, - /* Prime q */ - 128, - { 0xcc, 0x4e, 0x90, 0xd2, 0xa1, 0xb3, 0xa0, 0x65, 0xd3, 0xb2, 0xd1, 0xf5, 0xa8, 0xfc, 0xe3, 0x1b, 0x54, 0x44, 0x75, 0x66, 0x4e, 0xab, 0x56, 0x1d, 0x29, 0x71, 0xb9, 0x9f, 0xb7, 0xbe, 0xf8, 0x44, 0xe8, 0xec, 0x1f, 0x36, 0x0b, 0x8c, 0x2a, 0xc8, 0x35, 0x96, 0x92, 0x97, 0x1e, 0xa6, 0xa3, 0x8f, 0x72, 0x3f, 0xcc, 0x21, 0x1f, 0x5d, 0xbc, 0xb1, 0x77, 0xa0, 0xfd, 0xac, 0x51, 0x64, 0xa1, 0xd4, 0xff, 0x7f, 0xbb, 0x4e, 0x82, 0x99, 0x86, 0x35, 0x3c, 0xb9, 0x83, 0x65, 0x9a, 0x14, 0x8c, 0xdd, 0x42, 0x0c, 0x7d, 0x31, 0xba, 0x38, 0x22, 0xea, 0x90, 0xa3, 0x2b, 0xe4, 0x6c, 0x03, 0x0e, 0x8c, 0x17, 0xe1, 0xfa, 0x0a, 0xd3, 0x78, 0x59, 0xe0, 0x6b, 0x0a, 0xa6, 0xfa, 0x3b, 0x21, 0x6d, 0x9c, 0xbe, 0x6c, 0x0e, 0x22, 0x33, 0x97, 0x69, 0xc0, 0xa6, 0x15, 0x91, 0x3e, 0x5d, 0xa7, 0x19, 0xcf } -, - /* p's CRT exponent dP */ - 128, - { 0x1c, 0x2d, 0x1f, 0xc3, 0x2f, 0x6b, 0xc4, 0x00, 0x4f, 0xd8, 0x5d, 0xfd, 0xe0, 0xfb, 0xbf, 0x9a, 0x4c, 0x38, 0xf9, 0xc7, 0xc4, 0xe4, 0x1d, 0xea, 0x1a, 0xa8, 0x82, 0x34, 0xa2, 0x01, 0xcd, 0x92, 0xf3, 0xb7, 0xda, 0x52, 0x65, 0x83, 0xa9, 0x8a, 0xd8, 0x5b, 0xb3, 0x60, 0xfb, 0x98, 0x3b, 0x71, 0x1e, 0x23, 0x44, 0x9d, 0x56, 0x1d, 0x17, 0x78, 0xd7, 0xa5, 0x15, 0x48, 0x6b, 0xcb, 0xf4, 0x7b, 0x46, 0xc9, 0xe9, 0xe1, 0xa3, 0xa1, 0xf7, 0x70, 0x00, 0xef, 0xbe, 0xb0, 0x9a, 0x8a, 0xfe, 0x47, 0xe5, 0xb8, 0x57, 0xcd, 0xa9, 0x9c, 0xb1, 0x6d, 0x7f, 0xff, 0x9b, 0x71, 0x2e, 0x3b, 0xd6, 0x0c, 0xa9, 0x6d, 0x9c, 0x79, 0x73, 0xd6, 0x16, 0xd4, 0x69, 0x34, 0xa9, 0xc0, 0x50, 0x28, 0x1c, 0x00, 0x43, 0x99, 0xce, 0xff, 0x1d, 0xb7, 0xdd, 0xa7, 0x87, 0x66, 0xa8, 0xa9, 0xb9, 0xcb, 0x08, 0x73 } -, - /* q's CRT exponent dQ */ - 128, - { 0xcb, 0x3b, 0x3c, 0x04, 0xca, 0xa5, 0x8c, 0x60, 0xbe, 0x7d, 0x9b, 0x2d, 0xeb, 0xb3, 0xe3, 0x96, 0x43, 0xf4, 0xf5, 0x73, 0x97, 0xbe, 0x08, 0x23, 0x6a, 0x1e, 0x9e, 0xaf, 0xaa, 0x70, 0x65, 0x36, 0xe7, 0x1c, 0x3a, 0xcf, 0xe0, 0x1c, 0xc6, 0x51, 0xf2, 0x3c, 0x9e, 0x05, 0x85, 0x8f, 0xee, 0x13, 0xbb, 0x6a, 0x8a, 0xfc, 0x47, 0xdf, 0x4e, 0xdc, 0x9a, 0x4b, 0xa3, 0x0b, 0xce, 0xcb, 0x73, 0xd0, 0x15, 0x78, 0x52, 0x32, 0x7e, 0xe7, 0x89, 0x01, 0x5c, 0x2e, 0x8d, 0xee, 0x7b, 0x9f, 0x05, 0xa0, 0xf3, 0x1a, 0xc9, 0x4e, 0xb6, 0x17, 0x31, 0x64, 0x74, 0x0c, 0x5c, 0x95, 0x14, 0x7c, 0xd5, 0xf3, 0xb5, 0xae, 0x2c, 0xb4, 0xa8, 0x37, 0x87, 0xf0, 0x1d, 0x8a, 0xb3, 0x1f, 0x27, 0xc2, 0xd0, 0xee, 0xa2, 0xdd, 0x8a, 0x11, 0xab, 0x90, 0x6a, 0xba, 0x20, 0x7c, 0x43, 0xc6, 0xee, 0x12, 0x53, 0x31 } -, - /* CRT coefficient qInv */ - 128, - { 0x12, 0xf6, 0xb2, 0xcf, 0x13, 0x74, 0xa7, 0x36, 0xfa, 0xd0, 0x56, 0x16, 0x05, 0x0f, 0x96, 0xab, 0x4b, 0x61, 0xd1, 0x17, 0x7c, 0x7f, 0x9d, 0x52, 0x5a, 0x29, 0xf3, 0xd1, 0x80, 0xe7, 0x76, 0x67, 0xe9, 0x9d, 0x99, 0xab, 0xf0, 0x52, 0x5d, 0x07, 0x58, 0x66, 0x0f, 0x37, 0x52, 0x65, 0x5b, 0x0f, 0x25, 0xb8, 0xdf, 0x84, 0x31, 0xd9, 0xa8, 0xff, 0x77, 0xc1, 0x6c, 0x12, 0xa0, 0xa5, 0x12, 0x2a, 0x9f, 0x0b, 0xf7, 0xcf, 0xd5, 0xa2, 0x66, 0xa3, 0x5c, 0x15, 0x9f, 0x99, 0x12, 0x08, 0xb9, 0x03, 0x16, 0xff, 0x44, 0x4f, 0x3e, 0x0b, 0x6b, 0xd0, 0xe9, 0x3b, 0x8a, 0x7a, 0x24, 0x48, 0xe9, 0x57, 0xe3, 0xdd, 0xa6, 0xcf, 0xcf, 0x22, 0x66, 0xb1, 0x06, 0x01, 0x3a, 0xc4, 0x68, 0x08, 0xd3, 0xb3, 0x88, 0x7b, 0x3b, 0x00, 0x34, 0x4b, 0xaa, 0xc9, 0x53, 0x0b, 0x4c, 0xe7, 0x08, 0xfc, 0x32, 0xb6 } - -} -, -{{ - "RSASSA-PSS Signature Example 10.1", - /* Message to be signed */ - 29, - { 0x88, 0x31, 0x77, 0xe5, 0x12, 0x6b, 0x9b, 0xe2, 0xd9, 0xa9, 0x68, 0x03, 0x27, 0xd5, 0x37, 0x0c, 0x6f, 0x26, 0x86, 0x1f, 0x58, 0x20, 0xc4, 0x3d, 0xa6, 0x7a, 0x3a, 0xd6, 0x09 } -, - /* Salt */ - 20, - { 0x04, 0xe2, 0x15, 0xee, 0x6f, 0xf9, 0x34, 0xb9, 0xda, 0x70, 0xd7, 0x73, 0x0c, 0x87, 0x34, 0xab, 0xfc, 0xec, 0xde, 0x89 } -, - /* Signature */ - 256, - { 0x82, 0xc2, 0xb1, 0x60, 0x09, 0x3b, 0x8a, 0xa3, 0xc0, 0xf7, 0x52, 0x2b, 0x19, 0xf8, 0x73, 0x54, 0x06, 0x6c, 0x77, 0x84, 0x7a, 0xbf, 0x2a, 0x9f, 0xce, 0x54, 0x2d, 0x0e, 0x84, 0xe9, 0x20, 0xc5, 0xaf, 0xb4, 0x9f, 0xfd, 0xfd, 0xac, 0xe1, 0x65, 0x60, 0xee, 0x94, 0xa1, 0x36, 0x96, 0x01, 0x14, 0x8e, 0xba, 0xd7, 0xa0, 0xe1, 0x51, 0xcf, 0x16, 0x33, 0x17, 0x91, 0xa5, 0x72, 0x7d, 0x05, 0xf2, 0x1e, 0x74, 0xe7, 0xeb, 0x81, 0x14, 0x40, 0x20, 0x69, 0x35, 0xd7, 0x44, 0x76, 0x5a, 0x15, 0xe7, 0x9f, 0x01, 0x5c, 0xb6, 0x6c, 0x53, 0x2c, 0x87, 0xa6, 0xa0, 0x59, 0x61, 0xc8, 0xbf, 0xad, 0x74, 0x1a, 0x9a, 0x66, 0x57, 0x02, 0x28, 0x94, 0x39, 0x3e, 0x72, 0x23, 0x73, 0x97, 0x96, 0xc0, 0x2a, 0x77, 0x45, 0x5d, 0x0f, 0x55, 0x5b, 0x0e, 0xc0, 0x1d, 0xdf, 0x25, 0x9b, 0x62, 0x07, 0xfd, 0x0f, 0xd5, 0x76, 0x14, 0xce, 0xf1, 0xa5, 0x57, 0x3b, 0xaa, 0xff, 0x4e, 0xc0, 0x00, 0x69, 0x95, 0x16, 0x59, 0xb8, 0x5f, 0x24, 0x30, 0x0a, 0x25, 0x16, 0x0c, 0xa8, 0x52, 0x2d, 0xc6, 0xe6, 0x72, 0x7e, 0x57, 0xd0, 0x19, 0xd7, 0xe6, 0x36, 0x29, 0xb8, 0xfe, 0x5e, 0x89, 0xe2, 0x5c, 0xc1, 0x5b, 0xeb, 0x3a, 0x64, 0x75, 0x77, 0x55, 0x92, 0x99, 0x28, 0x0b, 0x9b, 0x28, 0xf7, 0x9b, 0x04, 0x09, 0x00, 0x0b, 0xe2, 0x5b, 0xbd, 0x96, 0x40, 0x8b, 0xa3, 0xb4, 0x3c, 0xc4, 0x86, 0x18, 0x4d, 0xd1, 0xc8, 0xe6, 0x25, 0x53, 0xfa, 0x1a, 0xf4, 0x04, 0x0f, 0x60, 0x66, 0x3d, 0xe7, 0xf5, 0xe4, 0x9c, 0x04, 0x38, 0x8e, 0x25, 0x7f, 0x1c, 0xe8, 0x9c, 0x95, 0xda, 0xb4, 0x8a, 0x31, 0x5d, 0x9b, 0x66, 0xb1, 0xb7, 0x62, 0x82, 0x33, 0x87, 0x6f, 0xf2, 0x38, 0x52, 0x30, 0xd0, 0x70, 0xd0, 0x7e, 0x16, 0x66 } - -} -, -#ifdef LTC_TEST_EXT -{ - "RSASSA-PSS Signature Example 10.2", - /* Message to be signed */ - 128, - { 0xdd, 0x67, 0x0a, 0x01, 0x46, 0x58, 0x68, 0xad, 0xc9, 0x3f, 0x26, 0x13, 0x19, 0x57, 0xa5, 0x0c, 0x52, 0xfb, 0x77, 0x7c, 0xdb, 0xaa, 0x30, 0x89, 0x2c, 0x9e, 0x12, 0x36, 0x11, 0x64, 0xec, 0x13, 0x97, 0x9d, 0x43, 0x04, 0x81, 0x18, 0xe4, 0x44, 0x5d, 0xb8, 0x7b, 0xee, 0x58, 0xdd, 0x98, 0x7b, 0x34, 0x25, 0xd0, 0x20, 0x71, 0xd8, 0xdb, 0xae, 0x80, 0x70, 0x8b, 0x03, 0x9d, 0xbb, 0x64, 0xdb, 0xd1, 0xde, 0x56, 0x57, 0xd9, 0xfe, 0xd0, 0xc1, 0x18, 0xa5, 0x41, 0x43, 0x74, 0x2e, 0x0f, 0xf3, 0xc8, 0x7f, 0x74, 0xe4, 0x58, 0x57, 0x64, 0x7a, 0xf3, 0xf7, 0x9e, 0xb0, 0xa1, 0x4c, 0x9d, 0x75, 0xea, 0x9a, 0x1a, 0x04, 0xb7, 0xcf, 0x47, 0x8a, 0x89, 0x7a, 0x70, 0x8f, 0xd9, 0x88, 0xf4, 0x8e, 0x80, 0x1e, 0xdb, 0x0b, 0x70, 0x39, 0xdf, 0x8c, 0x23, 0xbb, 0x3c, 0x56, 0xf4, 0xe8, 0x21, 0xac } -, - /* Salt */ - 20, - { 0x8b, 0x2b, 0xdd, 0x4b, 0x40, 0xfa, 0xf5, 0x45, 0xc7, 0x78, 0xdd, 0xf9, 0xbc, 0x1a, 0x49, 0xcb, 0x57, 0xf9, 0xb7, 0x1b } -, - /* Signature */ - 256, - { 0x14, 0xae, 0x35, 0xd9, 0xdd, 0x06, 0xba, 0x92, 0xf7, 0xf3, 0xb8, 0x97, 0x97, 0x8a, 0xed, 0x7c, 0xd4, 0xbf, 0x5f, 0xf0, 0xb5, 0x85, 0xa4, 0x0b, 0xd4, 0x6c, 0xe1, 0xb4, 0x2c, 0xd2, 0x70, 0x30, 0x53, 0xbb, 0x90, 0x44, 0xd6, 0x4e, 0x81, 0x3d, 0x8f, 0x96, 0xdb, 0x2d, 0xd7, 0x00, 0x7d, 0x10, 0x11, 0x8f, 0x6f, 0x8f, 0x84, 0x96, 0x09, 0x7a, 0xd7, 0x5e, 0x1f, 0xf6, 0x92, 0x34, 0x1b, 0x28, 0x92, 0xad, 0x55, 0xa6, 0x33, 0xa1, 0xc5, 0x5e, 0x7f, 0x0a, 0x0a, 0xd5, 0x9a, 0x0e, 0x20, 0x3a, 0x5b, 0x82, 0x78, 0xae, 0xc5, 0x4d, 0xd8, 0x62, 0x2e, 0x28, 0x31, 0xd8, 0x71, 0x74, 0xf8, 0xca, 0xff, 0x43, 0xee, 0x6c, 0x46, 0x44, 0x53, 0x45, 0xd8, 0x4a, 0x59, 0x65, 0x9b, 0xfb, 0x92, 0xec, 0xd4, 0xc8, 0x18, 0x66, 0x86, 0x95, 0xf3, 0x47, 0x06, 0xf6, 0x68, 0x28, 0xa8, 0x99, 0x59, 0x63, 0x7f, 0x2b, 0xf3, 0xe3, 0x25, 0x1c, 0x24, 0xbd, 0xba, 0x4d, 0x4b, 0x76, 0x49, 0xda, 0x00, 0x22, 0x21, 0x8b, 0x11, 0x9c, 0x84, 0xe7, 0x9a, 0x65, 0x27, 0xec, 0x5b, 0x8a, 0x5f, 0x86, 0x1c, 0x15, 0x99, 0x52, 0xe2, 0x3e, 0xc0, 0x5e, 0x1e, 0x71, 0x73, 0x46, 0xfa, 0xef, 0xe8, 0xb1, 0x68, 0x68, 0x25, 0xbd, 0x2b, 0x26, 0x2f, 0xb2, 0x53, 0x10, 0x66, 0xc0, 0xde, 0x09, 0xac, 0xde, 0x2e, 0x42, 0x31, 0x69, 0x07, 0x28, 0xb5, 0xd8, 0x5e, 0x11, 0x5a, 0x2f, 0x6b, 0x92, 0xb7, 0x9c, 0x25, 0xab, 0xc9, 0xbd, 0x93, 0x99, 0xff, 0x8b, 0xcf, 0x82, 0x5a, 0x52, 0xea, 0x1f, 0x56, 0xea, 0x76, 0xdd, 0x26, 0xf4, 0x3b, 0xaa, 0xfa, 0x18, 0xbf, 0xa9, 0x2a, 0x50, 0x4c, 0xbd, 0x35, 0x69, 0x9e, 0x26, 0xd1, 0xdc, 0xc5, 0xa2, 0x88, 0x73, 0x85, 0xf3, 0xc6, 0x32, 0x32, 0xf0, 0x6f, 0x32, 0x44, 0xc3 } - -} -, -{ - "RSASSA-PSS Signature Example 10.3", - /* Message to be signed */ - 110, - { 0x48, 0xb2, 0xb6, 0xa5, 0x7a, 0x63, 0xc8, 0x4c, 0xea, 0x85, 0x9d, 0x65, 0xc6, 0x68, 0x28, 0x4b, 0x08, 0xd9, 0x6b, 0xdc, 0xaa, 0xbe, 0x25, 0x2d, 0xb0, 0xe4, 0xa9, 0x6c, 0xb1, 0xba, 0xc6, 0x01, 0x93, 0x41, 0xdb, 0x6f, 0xbe, 0xfb, 0x8d, 0x10, 0x6b, 0x0e, 0x90, 0xed, 0xa6, 0xbc, 0xc6, 0xc6, 0x26, 0x2f, 0x37, 0xe7, 0xea, 0x9c, 0x7e, 0x5d, 0x22, 0x6b, 0xd7, 0xdf, 0x85, 0xec, 0x5e, 0x71, 0xef, 0xff, 0x2f, 0x54, 0xc5, 0xdb, 0x57, 0x7f, 0xf7, 0x29, 0xff, 0x91, 0xb8, 0x42, 0x49, 0x1d, 0xe2, 0x74, 0x1d, 0x0c, 0x63, 0x16, 0x07, 0xdf, 0x58, 0x6b, 0x90, 0x5b, 0x23, 0xb9, 0x1a, 0xf1, 0x3d, 0xa1, 0x23, 0x04, 0xbf, 0x83, 0xec, 0xa8, 0xa7, 0x3e, 0x87, 0x1f, 0xf9, 0xdb } -, - /* Salt */ - 20, - { 0x4e, 0x96, 0xfc, 0x1b, 0x39, 0x8f, 0x92, 0xb4, 0x46, 0x71, 0x01, 0x0c, 0x0d, 0xc3, 0xef, 0xd6, 0xe2, 0x0c, 0x2d, 0x73 } -, - /* Signature */ - 256, - { 0x6e, 0x3e, 0x4d, 0x7b, 0x6b, 0x15, 0xd2, 0xfb, 0x46, 0x01, 0x3b, 0x89, 0x00, 0xaa, 0x5b, 0xbb, 0x39, 0x39, 0xcf, 0x2c, 0x09, 0x57, 0x17, 0x98, 0x70, 0x42, 0x02, 0x6e, 0xe6, 0x2c, 0x74, 0xc5, 0x4c, 0xff, 0xd5, 0xd7, 0xd5, 0x7e, 0xfb, 0xbf, 0x95, 0x0a, 0x0f, 0x5c, 0x57, 0x4f, 0xa0, 0x9d, 0x3f, 0xc1, 0xc9, 0xf5, 0x13, 0xb0, 0x5b, 0x4f, 0xf5, 0x0d, 0xd8, 0xdf, 0x7e, 0xdf, 0xa2, 0x01, 0x02, 0x85, 0x4c, 0x35, 0xe5, 0x92, 0x18, 0x01, 0x19, 0xa7, 0x0c, 0xe5, 0xb0, 0x85, 0x18, 0x2a, 0xa0, 0x2d, 0x9e, 0xa2, 0xaa, 0x90, 0xd1, 0xdf, 0x03, 0xf2, 0xda, 0xae, 0x88, 0x5b, 0xa2, 0xf5, 0xd0, 0x5a, 0xfd, 0xac, 0x97, 0x47, 0x6f, 0x06, 0xb9, 0x3b, 0x5b, 0xc9, 0x4a, 0x1a, 0x80, 0xaa, 0x91, 0x16, 0xc4, 0xd6, 0x15, 0xf3, 0x33, 0xb0, 0x98, 0x89, 0x2b, 0x25, 0xff, 0xac, 0xe2, 0x66, 0xf5, 0xdb, 0x5a, 0x5a, 0x3b, 0xcc, 0x10, 0xa8, 0x24, 0xed, 0x55, 0xaa, 0xd3, 0x5b, 0x72, 0x78, 0x34, 0xfb, 0x8c, 0x07, 0xda, 0x28, 0xfc, 0xf4, 0x16, 0xa5, 0xd9, 0xb2, 0x22, 0x4f, 0x1f, 0x8b, 0x44, 0x2b, 0x36, 0xf9, 0x1e, 0x45, 0x6f, 0xde, 0xa2, 0xd7, 0xcf, 0xe3, 0x36, 0x72, 0x68, 0xde, 0x03, 0x07, 0xa4, 0xc7, 0x4e, 0x92, 0x41, 0x59, 0xed, 0x33, 0x39, 0x3d, 0x5e, 0x06, 0x55, 0x53, 0x1c, 0x77, 0x32, 0x7b, 0x89, 0x82, 0x1b, 0xde, 0xdf, 0x88, 0x01, 0x61, 0xc7, 0x8c, 0xd4, 0x19, 0x6b, 0x54, 0x19, 0xf7, 0xac, 0xc3, 0xf1, 0x3e, 0x5e, 0xbf, 0x16, 0x1b, 0x6e, 0x7c, 0x67, 0x24, 0x71, 0x6c, 0xa3, 0x3b, 0x85, 0xc2, 0xe2, 0x56, 0x40, 0x19, 0x2a, 0xc2, 0x85, 0x96, 0x51, 0xd5, 0x0b, 0xde, 0x7e, 0xb9, 0x76, 0xe5, 0x1c, 0xec, 0x82, 0x8b, 0x98, 0xb6, 0x56, 0x3b, 0x86, 0xbb } - -} -, -{ - "RSASSA-PSS Signature Example 10.4", - /* Message to be signed */ - 81, - { 0x0b, 0x87, 0x77, 0xc7, 0xf8, 0x39, 0xba, 0xf0, 0xa6, 0x4b, 0xbb, 0xdb, 0xc5, 0xce, 0x79, 0x75, 0x5c, 0x57, 0xa2, 0x05, 0xb8, 0x45, 0xc1, 0x74, 0xe2, 0xd2, 0xe9, 0x05, 0x46, 0xa0, 0x89, 0xc4, 0xe6, 0xec, 0x8a, 0xdf, 0xfa, 0x23, 0xa7, 0xea, 0x97, 0xba, 0xe6, 0xb6, 0x5d, 0x78, 0x2b, 0x82, 0xdb, 0x5d, 0x2b, 0x5a, 0x56, 0xd2, 0x2a, 0x29, 0xa0, 0x5e, 0x7c, 0x44, 0x33, 0xe2, 0xb8, 0x2a, 0x62, 0x1a, 0xbb, 0xa9, 0x0a, 0xdd, 0x05, 0xce, 0x39, 0x3f, 0xc4, 0x8a, 0x84, 0x05, 0x42, 0x45, 0x1a } -, - /* Salt */ - 20, - { 0xc7, 0xcd, 0x69, 0x8d, 0x84, 0xb6, 0x51, 0x28, 0xd8, 0x83, 0x5e, 0x3a, 0x8b, 0x1e, 0xb0, 0xe0, 0x1c, 0xb5, 0x41, 0xec } -, - /* Signature */ - 256, - { 0x34, 0x04, 0x7f, 0xf9, 0x6c, 0x4d, 0xc0, 0xdc, 0x90, 0xb2, 0xd4, 0xff, 0x59, 0xa1, 0xa3, 0x61, 0xa4, 0x75, 0x4b, 0x25, 0x5d, 0x2e, 0xe0, 0xaf, 0x7d, 0x8b, 0xf8, 0x7c, 0x9b, 0xc9, 0xe7, 0xdd, 0xee, 0xde, 0x33, 0x93, 0x4c, 0x63, 0xca, 0x1c, 0x0e, 0x3d, 0x26, 0x2c, 0xb1, 0x45, 0xef, 0x93, 0x2a, 0x1f, 0x2c, 0x0a, 0x99, 0x7a, 0xa6, 0xa3, 0x4f, 0x8e, 0xae, 0xe7, 0x47, 0x7d, 0x82, 0xcc, 0xf0, 0x90, 0x95, 0xa6, 0xb8, 0xac, 0xad, 0x38, 0xd4, 0xee, 0xc9, 0xfb, 0x7e, 0xab, 0x7a, 0xd0, 0x2d, 0xa1, 0xd1, 0x1d, 0x8e, 0x54, 0xc1, 0x82, 0x5e, 0x55, 0xbf, 0x58, 0xc2, 0xa2, 0x32, 0x34, 0xb9, 0x02, 0xbe, 0x12, 0x4f, 0x9e, 0x90, 0x38, 0xa8, 0xf6, 0x8f, 0xa4, 0x5d, 0xab, 0x72, 0xf6, 0x6e, 0x09, 0x45, 0xbf, 0x1d, 0x8b, 0xac, 0xc9, 0x04, 0x4c, 0x6f, 0x07, 0x09, 0x8c, 0x9f, 0xce, 0xc5, 0x8a, 0x3a, 0xab, 0x10, 0x0c, 0x80, 0x51, 0x78, 0x15, 0x5f, 0x03, 0x0a, 0x12, 0x4c, 0x45, 0x0e, 0x5a, 0xcb, 0xda, 0x47, 0xd0, 0xe4, 0xf1, 0x0b, 0x80, 0xa2, 0x3f, 0x80, 0x3e, 0x77, 0x4d, 0x02, 0x3b, 0x00, 0x15, 0xc2, 0x0b, 0x9f, 0x9b, 0xbe, 0x7c, 0x91, 0x29, 0x63, 0x38, 0xd5, 0xec, 0xb4, 0x71, 0xca, 0xfb, 0x03, 0x20, 0x07, 0xb6, 0x7a, 0x60, 0xbe, 0x5f, 0x69, 0x50, 0x4a, 0x9f, 0x01, 0xab, 0xb3, 0xcb, 0x46, 0x7b, 0x26, 0x0e, 0x2b, 0xce, 0x86, 0x0b, 0xe8, 0xd9, 0x5b, 0xf9, 0x2c, 0x0c, 0x8e, 0x14, 0x96, 0xed, 0x1e, 0x52, 0x85, 0x93, 0xa4, 0xab, 0xb6, 0xdf, 0x46, 0x2d, 0xde, 0x8a, 0x09, 0x68, 0xdf, 0xfe, 0x46, 0x83, 0x11, 0x68, 0x57, 0xa2, 0x32, 0xf5, 0xeb, 0xf6, 0xc8, 0x5b, 0xe2, 0x38, 0x74, 0x5a, 0xd0, 0xf3, 0x8f, 0x76, 0x7a, 0x5f, 0xdb, 0xf4, 0x86, 0xfb } - -} -, -{ - "RSASSA-PSS Signature Example 10.5", - /* Message to be signed */ - 81, - { 0xf1, 0x03, 0x6e, 0x00, 0x8e, 0x71, 0xe9, 0x64, 0xda, 0xdc, 0x92, 0x19, 0xed, 0x30, 0xe1, 0x7f, 0x06, 0xb4, 0xb6, 0x8a, 0x95, 0x5c, 0x16, 0xb3, 0x12, 0xb1, 0xed, 0xdf, 0x02, 0x8b, 0x74, 0x97, 0x6b, 0xed, 0x6b, 0x3f, 0x6a, 0x63, 0xd4, 0xe7, 0x78, 0x59, 0x24, 0x3c, 0x9c, 0xcc, 0xdc, 0x98, 0x01, 0x65, 0x23, 0xab, 0xb0, 0x24, 0x83, 0xb3, 0x55, 0x91, 0xc3, 0x3a, 0xad, 0x81, 0x21, 0x3b, 0xb7, 0xc7, 0xbb, 0x1a, 0x47, 0x0a, 0xab, 0xc1, 0x0d, 0x44, 0x25, 0x6c, 0x4d, 0x45, 0x59, 0xd9, 0x16 } -, - /* Salt */ - 20, - { 0xef, 0xa8, 0xbf, 0xf9, 0x62, 0x12, 0xb2, 0xf4, 0xa3, 0xf3, 0x71, 0xa1, 0x0d, 0x57, 0x41, 0x52, 0x65, 0x5f, 0x5d, 0xfb } -, - /* Signature */ - 256, - { 0x7e, 0x09, 0x35, 0xea, 0x18, 0xf4, 0xd6, 0xc1, 0xd1, 0x7c, 0xe8, 0x2e, 0xb2, 0xb3, 0x83, 0x6c, 0x55, 0xb3, 0x84, 0x58, 0x9c, 0xe1, 0x9d, 0xfe, 0x74, 0x33, 0x63, 0xac, 0x99, 0x48, 0xd1, 0xf3, 0x46, 0xb7, 0xbf, 0xdd, 0xfe, 0x92, 0xef, 0xd7, 0x8a, 0xdb, 0x21, 0xfa, 0xef, 0xc8, 0x9a, 0xde, 0x42, 0xb1, 0x0f, 0x37, 0x40, 0x03, 0xfe, 0x12, 0x2e, 0x67, 0x42, 0x9a, 0x1c, 0xb8, 0xcb, 0xd1, 0xf8, 0xd9, 0x01, 0x45, 0x64, 0xc4, 0x4d, 0x12, 0x01, 0x16, 0xf4, 0x99, 0x0f, 0x1a, 0x6e, 0x38, 0x77, 0x4c, 0x19, 0x4b, 0xd1, 0xb8, 0x21, 0x32, 0x86, 0xb0, 0x77, 0xb0, 0x49, 0x9d, 0x2e, 0x7b, 0x3f, 0x43, 0x4a, 0xb1, 0x22, 0x89, 0xc5, 0x56, 0x68, 0x4d, 0xee, 0xd7, 0x81, 0x31, 0x93, 0x4b, 0xb3, 0xdd, 0x65, 0x37, 0x23, 0x6f, 0x7c, 0x6f, 0x3d, 0xcb, 0x09, 0xd4, 0x76, 0xbe, 0x07, 0x72, 0x1e, 0x37, 0xe1, 0xce, 0xed, 0x9b, 0x2f, 0x7b, 0x40, 0x68, 0x87, 0xbd, 0x53, 0x15, 0x73, 0x05, 0xe1, 0xc8, 0xb4, 0xf8, 0x4d, 0x73, 0x3b, 0xc1, 0xe1, 0x86, 0xfe, 0x06, 0xcc, 0x59, 0xb6, 0xed, 0xb8, 0xf4, 0xbd, 0x7f, 0xfe, 0xfd, 0xf4, 0xf7, 0xba, 0x9c, 0xfb, 0x9d, 0x57, 0x06, 0x89, 0xb5, 0xa1, 0xa4, 0x10, 0x9a, 0x74, 0x6a, 0x69, 0x08, 0x93, 0xdb, 0x37, 0x99, 0x25, 0x5a, 0x0c, 0xb9, 0x21, 0x5d, 0x2d, 0x1c, 0xd4, 0x90, 0x59, 0x0e, 0x95, 0x2e, 0x8c, 0x87, 0x86, 0xaa, 0x00, 0x11, 0x26, 0x52, 0x52, 0x47, 0x0c, 0x04, 0x1d, 0xfb, 0xc3, 0xee, 0xc7, 0xc3, 0xcb, 0xf7, 0x1c, 0x24, 0x86, 0x9d, 0x11, 0x5c, 0x0c, 0xb4, 0xa9, 0x56, 0xf5, 0x6d, 0x53, 0x0b, 0x80, 0xab, 0x58, 0x9a, 0xcf, 0xef, 0xc6, 0x90, 0x75, 0x1d, 0xdf, 0x36, 0xe8, 0xd3, 0x83, 0xf8, 0x3c, 0xed, 0xd2, 0xcc } - -} -, -{ - "RSASSA-PSS Signature Example 10.6", - /* Message to be signed */ - 163, - { 0x25, 0xf1, 0x08, 0x95, 0xa8, 0x77, 0x16, 0xc1, 0x37, 0x45, 0x0b, 0xb9, 0x51, 0x9d, 0xfa, 0xa1, 0xf2, 0x07, 0xfa, 0xa9, 0x42, 0xea, 0x88, 0xab, 0xf7, 0x1e, 0x9c, 0x17, 0x98, 0x00, 0x85, 0xb5, 0x55, 0xae, 0xba, 0xb7, 0x62, 0x64, 0xae, 0x2a, 0x3a, 0xb9, 0x3c, 0x2d, 0x12, 0x98, 0x11, 0x91, 0xdd, 0xac, 0x6f, 0xb5, 0x94, 0x9e, 0xb3, 0x6a, 0xee, 0x3c, 0x5d, 0xa9, 0x40, 0xf0, 0x07, 0x52, 0xc9, 0x16, 0xd9, 0x46, 0x08, 0xfa, 0x7d, 0x97, 0xba, 0x6a, 0x29, 0x15, 0xb6, 0x88, 0xf2, 0x03, 0x23, 0xd4, 0xe9, 0xd9, 0x68, 0x01, 0xd8, 0x9a, 0x72, 0xab, 0x58, 0x92, 0xdc, 0x21, 0x17, 0xc0, 0x74, 0x34, 0xfc, 0xf9, 0x72, 0xe0, 0x58, 0xcf, 0x8c, 0x41, 0xca, 0x4b, 0x4f, 0xf5, 0x54, 0xf7, 0xd5, 0x06, 0x8a, 0xd3, 0x15, 0x5f, 0xce, 0xd0, 0xf3, 0x12, 0x5b, 0xc0, 0x4f, 0x91, 0x93, 0x37, 0x8a, 0x8f, 0x5c, 0x4c, 0x3b, 0x8c, 0xb4, 0xdd, 0x6d, 0x1c, 0xc6, 0x9d, 0x30, 0xec, 0xca, 0x6e, 0xaa, 0x51, 0xe3, 0x6a, 0x05, 0x73, 0x0e, 0x9e, 0x34, 0x2e, 0x85, 0x5b, 0xaf, 0x09, 0x9d, 0xef, 0xb8, 0xaf, 0xd7 } -, - /* Salt */ - 20, - { 0xad, 0x8b, 0x15, 0x23, 0x70, 0x36, 0x46, 0x22, 0x4b, 0x66, 0x0b, 0x55, 0x08, 0x85, 0x91, 0x7c, 0xa2, 0xd1, 0xdf, 0x28 } -, - /* Signature */ - 256, - { 0x6d, 0x3b, 0x5b, 0x87, 0xf6, 0x7e, 0xa6, 0x57, 0xaf, 0x21, 0xf7, 0x54, 0x41, 0x97, 0x7d, 0x21, 0x80, 0xf9, 0x1b, 0x2c, 0x5f, 0x69, 0x2d, 0xe8, 0x29, 0x55, 0x69, 0x6a, 0x68, 0x67, 0x30, 0xd9, 0xb9, 0x77, 0x8d, 0x97, 0x07, 0x58, 0xcc, 0xb2, 0x60, 0x71, 0xc2, 0x20, 0x9f, 0xfb, 0xd6, 0x12, 0x5b, 0xe2, 0xe9, 0x6e, 0xa8, 0x1b, 0x67, 0xcb, 0x9b, 0x93, 0x08, 0x23, 0x9f, 0xda, 0x17, 0xf7, 0xb2, 0xb6, 0x4e, 0xcd, 0xa0, 0x96, 0xb6, 0xb9, 0x35, 0x64, 0x0a, 0x5a, 0x1c, 0xb4, 0x2a, 0x91, 0x55, 0xb1, 0xc9, 0xef, 0x7a, 0x63, 0x3a, 0x02, 0xc5, 0x9f, 0x0d, 0x6e, 0xe5, 0x9b, 0x85, 0x2c, 0x43, 0xb3, 0x50, 0x29, 0xe7, 0x3c, 0x94, 0x0f, 0xf0, 0x41, 0x0e, 0x8f, 0x11, 0x4e, 0xed, 0x46, 0xbb, 0xd0, 0xfa, 0xe1, 0x65, 0xe4, 0x2b, 0xe2, 0x52, 0x8a, 0x40, 0x1c, 0x3b, 0x28, 0xfd, 0x81, 0x8e, 0xf3, 0x23, 0x2d, 0xca, 0x9f, 0x4d, 0x2a, 0x0f, 0x51, 0x66, 0xec, 0x59, 0xc4, 0x23, 0x96, 0xd6, 0xc1, 0x1d, 0xbc, 0x12, 0x15, 0xa5, 0x6f, 0xa1, 0x71, 0x69, 0xdb, 0x95, 0x75, 0x34, 0x3e, 0xf3, 0x4f, 0x9d, 0xe3, 0x2a, 0x49, 0xcd, 0xc3, 0x17, 0x49, 0x22, 0xf2, 0x29, 0xc2, 0x3e, 0x18, 0xe4, 0x5d, 0xf9, 0x35, 0x31, 0x19, 0xec, 0x43, 0x19, 0xce, 0xdc, 0xe7, 0xa1, 0x7c, 0x64, 0x08, 0x8c, 0x1f, 0x6f, 0x52, 0xbe, 0x29, 0x63, 0x41, 0x00, 0xb3, 0x91, 0x9d, 0x38, 0xf3, 0xd1, 0xed, 0x94, 0xe6, 0x89, 0x1e, 0x66, 0xa7, 0x3b, 0x8f, 0xb8, 0x49, 0xf5, 0x87, 0x4d, 0xf5, 0x94, 0x59, 0xe2, 0x98, 0xc7, 0xbb, 0xce, 0x2e, 0xee, 0x78, 0x2a, 0x19, 0x5a, 0xa6, 0x6f, 0xe2, 0xd0, 0x73, 0x2b, 0x25, 0xe5, 0x95, 0xf5, 0x7d, 0x3e, 0x06, 0x1b, 0x1f, 0xc3, 0xe4, 0x06, 0x3b, 0xf9, 0x8f } - -} -, -#endif /* LTC_TEST_EXT */ -} -}, -}; - diff --git a/notes/rsa-testvectors/pss-vect.txt b/notes/rsa-testvectors/pss-vect.txt deleted file mode 100644 index f0392e01..00000000 --- a/notes/rsa-testvectors/pss-vect.txt +++ /dev/null @@ -1,2581 +0,0 @@ -# =========================== -# TEST VECTORS FOR RSASSA-PSS -# =========================== -# -# This file contains test vectors for the -# RSASSA-PSS signature scheme with appendix as -# defined in PKCS #1 v2.1. 10 RSA keys of -# different sizes have been generated. For each -# key, 6 random messages of length between 1 -# and 256 octets have been RSASSA-PSS signed -# via a random salt of length 20 octets. -# -# The underlying hash function in the EMSA-PSS -# encoding method is SHA-1; the mask generation -# function is MGF1 with SHA-1 as specified in -# PKCS #1 v2.1. -# -# Integers are represented by strings of octets -# with the leftmost octet being the most -# significant octet. For example, -# -# 9,202,000 = (0x)8c 69 50. -# -# Key lengths: -# -# Key 1: 1024 bits -# Key 2: 1025 bits -# Key 3: 1026 bits -# Key 4: 1027 bits -# Key 5: 1028 bits -# Key 6: 1029 bits -# Key 7: 1030 bits -# Key 8: 1031 bits -# Key 9: 1536 bits -# Key 10: 2048 bits -# -# ============================================= - -# ================================== -# Example 1: A 1024-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -a5 6e 4a 0e 70 10 17 58 9a 51 87 dc 7e a8 41 d1 -56 f2 ec 0e 36 ad 52 a4 4d fe b1 e6 1f 7a d9 91 -d8 c5 10 56 ff ed b1 62 b4 c0 f2 83 a1 2a 88 a3 -94 df f5 26 ab 72 91 cb b3 07 ce ab fc e0 b1 df -d5 cd 95 08 09 6d 5b 2b 8b 6d f5 d6 71 ef 63 77 -c0 92 1c b2 3c 27 0a 70 e2 59 8e 6f f8 9d 19 f1 -05 ac c2 d3 f0 cb 35 f2 92 80 e1 38 6b 6f 64 c4 -ef 22 e1 e1 f2 0d 0c e8 cf fb 22 49 bd 9a 21 37 - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -33 a5 04 2a 90 b2 7d 4f 54 51 ca 9b bb d0 b4 47 -71 a1 01 af 88 43 40 ae f9 88 5f 2a 4b be 92 e8 -94 a7 24 ac 3c 56 8c 8f 97 85 3a d0 7c 02 66 c8 -c6 a3 ca 09 29 f1 e8 f1 12 31 88 44 29 fc 4d 9a -e5 5f ee 89 6a 10 ce 70 7c 3e d7 e7 34 e4 47 27 -a3 95 74 50 1a 53 26 83 10 9c 2a ba ca ba 28 3c -31 b4 bd 2f 53 c3 ee 37 e3 52 ce e3 4f 9e 50 3b -d8 0c 06 22 ad 79 c6 dc ee 88 35 47 c6 a3 b3 25 - -# Prime p: -e7 e8 94 27 20 a8 77 51 72 73 a3 56 05 3e a2 a1 -bc 0c 94 aa 72 d5 5c 6e 86 29 6b 2d fc 96 79 48 -c0 a7 2c bc cc a7 ea cb 35 70 6e 09 a1 df 55 a1 -53 5b d9 b3 cc 34 16 0b 3b 6d cd 3e da 8e 64 43 - -# Prime q: -b6 9d ca 1c f7 d4 d7 ec 81 e7 5b 90 fc ca 87 4a -bc de 12 3f d2 70 01 80 aa 90 47 9b 6e 48 de 8d -67 ed 24 f9 f1 9d 85 ba 27 58 74 f5 42 cd 20 dc -72 3e 69 63 36 4a 1f 94 25 45 2b 26 9a 67 99 fd - -# p's CRT exponent dP: -28 fa 13 93 86 55 be 1f 8a 15 9c ba ca 5a 72 ea -19 0c 30 08 9e 19 cd 27 4a 55 6f 36 c4 f6 e1 9f -55 4b 34 c0 77 79 04 27 bb dd 8d d3 ed e2 44 83 -28 f3 85 d8 1b 30 e8 e4 3b 2f ff a0 27 86 19 79 - -# q's CRT exponent dQ: -1a 8b 38 f3 98 fa 71 20 49 89 8d 7f b7 9e e0 a7 -76 68 79 12 99 cd fa 09 ef c0 e5 07 ac b2 1e d7 -43 01 ef 5b fd 48 be 45 5e ae b6 e1 67 82 55 82 -75 80 a8 e4 e8 e1 41 51 d1 51 0a 82 a3 f2 e7 29 - -# CRT coefficient qInv: -27 15 6a ba 41 26 d2 4a 81 f3 a5 28 cb fb 27 f5 -68 86 f8 40 a9 f6 e8 6e 17 a4 4b 94 fe 93 19 58 -4b 8e 22 fd de 1e 5a 2e 3b d8 aa 5b a8 d8 58 41 -94 eb 21 90 ac f8 32 b8 47 f1 3a 3d 24 a7 9f 4d - -# -------------------------------- -# RSASSA-PSS Signature Example 1.1 -# -------------------------------- - -# Message to be signed: -cd c8 7d a2 23 d7 86 df 3b 45 e0 bb bc 72 13 26 -d1 ee 2a f8 06 cc 31 54 75 cc 6f 0d 9c 66 e1 b6 -23 71 d4 5c e2 39 2e 1a c9 28 44 c3 10 10 2f 15 -6a 0d 8d 52 c1 f4 c4 0b a3 aa 65 09 57 86 cb 76 -97 57 a6 56 3b a9 58 fe d0 bc c9 84 e8 b5 17 a3 -d5 f5 15 b2 3b 8a 41 e7 4a a8 67 69 3f 90 df b0 -61 a6 e8 6d fa ae e6 44 72 c0 0e 5f 20 94 57 29 -cb eb e7 7f 06 ce 78 e0 8f 40 98 fb a4 1f 9d 61 -93 c0 31 7e 8b 60 d4 b6 08 4a cb 42 d2 9e 38 08 -a3 bc 37 2d 85 e3 31 17 0f cb f7 cc 72 d0 b7 1c -29 66 48 b3 a4 d1 0f 41 62 95 d0 80 7a a6 25 ca -b2 74 4f d9 ea 8f d2 23 c4 25 37 02 98 28 bd 16 -be 02 54 6f 13 0f d2 e3 3b 93 6d 26 76 e0 8a ed -1b 73 31 8b 75 0a 01 67 d0 - -# Salt: -de e9 59 c7 e0 64 11 36 14 20 ff 80 18 5e d5 7f -3e 67 76 af - -# Signature: -90 74 30 8f b5 98 e9 70 1b 22 94 38 8e 52 f9 71 -fa ac 2b 60 a5 14 5a f1 85 df 52 87 b5 ed 28 87 -e5 7c e7 fd 44 dc 86 34 e4 07 c8 e0 e4 36 0b c2 -26 f3 ec 22 7f 9d 9e 54 63 8e 8d 31 f5 05 12 15 -df 6e bb 9c 2f 95 79 aa 77 59 8a 38 f9 14 b5 b9 -c1 bd 83 c4 e2 f9 f3 82 a0 d0 aa 35 42 ff ee 65 -98 4a 60 1b c6 9e b2 8d eb 27 dc a1 2c 82 c2 d4 -c3 f6 6c d5 00 f1 ff 2b 99 4d 8a 4e 30 cb b3 3c - -# -------------------------------- -# RSASSA-PSS Signature Example 1.2 -# -------------------------------- - -# Message to be signed: -85 13 84 cd fe 81 9c 22 ed 6c 4c cb 30 da eb 5c -f0 59 bc 8e 11 66 b7 e3 53 0c 4c 23 3e 2b 5f 8f -71 a1 cc a5 82 d4 3e cc 72 b1 bc a1 6d fc 70 13 -22 6b 9e - -# Salt: -ef 28 69 fa 40 c3 46 cb 18 3d ab 3d 7b ff c9 8f -d5 6d f4 2d - -# Signature: -3e f7 f4 6e 83 1b f9 2b 32 27 41 42 a5 85 ff ce -fb dc a7 b3 2a e9 0d 10 fb 0f 0c 72 99 84 f0 4e -f2 9a 9d f0 78 07 75 ce 43 73 9b 97 83 83 90 db -0a 55 05 e6 3d e9 27 02 8d 9d 29 b2 19 ca 2c 45 -17 83 25 58 a5 5d 69 4a 6d 25 b9 da b6 60 03 c4 -cc cd 90 78 02 19 3b e5 17 0d 26 14 7d 37 b9 35 -90 24 1b e5 1c 25 05 5f 47 ef 62 75 2c fb e2 14 -18 fa fe 98 c2 2c 4d 4d 47 72 4f db 56 69 e8 43 - -# -------------------------------- -# RSASSA-PSS Signature Example 1.3 -# -------------------------------- - -# Message to be signed: -a4 b1 59 94 17 61 c4 0c 6a 82 f2 b8 0d 1b 94 f5 -aa 26 54 fd 17 e1 2d 58 88 64 67 9b 54 cd 04 ef -8b d0 30 12 be 8d c3 7f 4b 83 af 79 63 fa ff 0d -fa 22 54 77 43 7c 48 01 7f f2 be 81 91 cf 39 55 -fc 07 35 6e ab 3f 32 2f 7f 62 0e 21 d2 54 e5 db -43 24 27 9f e0 67 e0 91 0e 2e 81 ca 2c ab 31 c7 -45 e6 7a 54 05 8e b5 0d 99 3c db 9e d0 b4 d0 29 -c0 6d 21 a9 4c a6 61 c3 ce 27 fa e1 d6 cb 20 f4 -56 4d 66 ce 47 67 58 3d 0e 5f 06 02 15 b5 90 17 -be 85 ea 84 89 39 12 7b d8 c9 c4 d4 7b 51 05 6c -03 1c f3 36 f1 7c 99 80 f3 b8 f5 b9 b6 87 8e 8b -79 7a a4 3b 88 26 84 33 3e 17 89 3f e9 ca a6 aa -29 9f 7e d1 a1 8e e2 c5 48 64 b7 b2 b9 9b 72 61 -8f b0 25 74 d1 39 ef 50 f0 19 c9 ee f4 16 97 13 -38 e7 d4 70 - -# Salt: -71 0b 9c 47 47 d8 00 d4 de 87 f1 2a fd ce 6d f1 -81 07 cc 77 - -# Signature: -66 60 26 fb a7 1b d3 e7 cf 13 15 7c c2 c5 1a 8e -4a a6 84 af 97 78 f9 18 49 f3 43 35 d1 41 c0 01 -54 c4 19 76 21 f9 62 4a 67 5b 5a bc 22 ee 7d 5b -aa ff aa e1 c9 ba ca 2c c3 73 b3 f3 3e 78 e6 14 -3c 39 5a 91 aa 7f ac a6 64 eb 73 3a fd 14 d8 82 -72 59 d9 9a 75 50 fa ca 50 1e f2 b0 4e 33 c2 3a -a5 1f 4b 9e 82 82 ef db 72 8c c0 ab 09 40 5a 91 -60 7c 63 69 96 1b c8 27 0d 2d 4f 39 fc e6 12 b1 - -# -------------------------------- -# RSASSA-PSS Signature Example 1.4 -# -------------------------------- - -# Message to be signed: -bc 65 67 47 fa 9e af b3 f0 - -# Salt: -05 6f 00 98 5d e1 4d 8e f5 ce a9 e8 2f 8c 27 be -f7 20 33 5e - -# Signature: -46 09 79 3b 23 e9 d0 93 62 dc 21 bb 47 da 0b 4f -3a 76 22 64 9a 47 d4 64 01 9b 9a ea fe 53 35 9c -17 8c 91 cd 58 ba 6b cb 78 be 03 46 a7 bc 63 7f -4b 87 3d 4b ab 38 ee 66 1f 19 96 34 c5 47 a1 ad -84 42 e0 3d a0 15 b1 36 e5 43 f7 ab 07 c0 c1 3e -42 25 b8 de 8c ce 25 d4 f6 eb 84 00 f8 1f 7e 18 -33 b7 ee 6e 33 4d 37 09 64 ca 79 fd b8 72 b4 d7 -52 23 b5 ee b0 81 01 59 1f b5 32 d1 55 a6 de 87 - -# -------------------------------- -# RSASSA-PSS Signature Example 1.5 -# -------------------------------- - -# Message to be signed: -b4 55 81 54 7e 54 27 77 0c 76 8e 8b 82 b7 55 64 -e0 ea 4e 9c 32 59 4d 6b ff 70 65 44 de 0a 87 76 -c7 a8 0b 45 76 55 0e ee 1b 2a ca bc 7e 8b 7d 3e -f7 bb 5b 03 e4 62 c1 10 47 ea dd 00 62 9a e5 75 -48 0a c1 47 0f e0 46 f1 3a 2b f5 af 17 92 1d c4 -b0 aa 8b 02 be e6 33 49 11 65 1d 7f 85 25 d1 0f -32 b5 1d 33 be 52 0d 3d df 5a 70 99 55 a3 df e7 -82 83 b9 e0 ab 54 04 6d 15 0c 17 7f 03 7f dc cc -5b e4 ea 5f 68 b5 e5 a3 8c 9d 7e dc cc c4 97 5f -45 5a 69 09 b4 - -# Salt: -80 e7 0f f8 6a 08 de 3e c6 09 72 b3 9b 4f bf dc -ea 67 ae 8e - -# Signature: -1d 2a ad 22 1c a4 d3 1d df 13 50 92 39 01 93 98 -e3 d1 4b 32 dc 34 dc 5a f4 ae ae a3 c0 95 af 73 -47 9c f0 a4 5e 56 29 63 5a 53 a0 18 37 76 15 b1 -6c b9 b1 3b 3e 09 d6 71 eb 71 e3 87 b8 54 5c 59 -60 da 5a 64 77 6e 76 8e 82 b2 c9 35 83 bf 10 4c -3f db 23 51 2b 7b 4e 89 f6 33 dd 00 63 a5 30 db -45 24 b0 1c 3f 38 4c 09 31 0e 31 5a 79 dc d3 d6 -84 02 2a 7f 31 c8 65 a6 64 e3 16 97 8b 75 9f ad - -# -------------------------------- -# RSASSA-PSS Signature Example 1.6 -# -------------------------------- - -# Message to be signed: -10 aa e9 a0 ab 0b 59 5d 08 41 20 7b 70 0d 48 d7 -5f ae dd e3 b7 75 cd 6b 4c c8 8a e0 6e 46 94 ec -74 ba 18 f8 52 0d 4f 5e a6 9c bb e7 cc 2b eb a4 -3e fd c1 02 15 ac 4e b3 2d c3 02 a1 f5 3d c6 c4 -35 22 67 e7 93 6c fe bf 7c 8d 67 03 57 84 a3 90 -9f a8 59 c7 b7 b5 9b 8e 39 c5 c2 34 9f 18 86 b7 -05 a3 02 67 d4 02 f7 48 6a b4 f5 8c ad 5d 69 ad -b1 7a b8 cd 0c e1 ca f5 02 5a f4 ae 24 b1 fb 87 -94 c6 07 0c c0 9a 51 e2 f9 91 13 11 e3 87 7d 00 -44 c7 1c 57 a9 93 39 50 08 80 6b 72 3a c3 83 73 -d3 95 48 18 18 52 8c 1e 70 53 73 92 82 05 35 29 -51 0e 93 5c d0 fa 77 b8 fa 53 cc 2d 47 4b d4 fb -3c c5 c6 72 d6 ff dc 90 a0 0f 98 48 71 2c 4b cf -e4 6c 60 57 36 59 b1 1e 64 57 e8 61 f0 f6 04 b6 -13 8d 14 4f 8c e4 e2 da 73 - -# Salt: -a8 ab 69 dd 80 1f 00 74 c2 a1 fc 60 64 98 36 c6 -16 d9 96 81 - -# Signature: -2a 34 f6 12 5e 1f 6b 0b f9 71 e8 4f bd 41 c6 32 -be 8f 2c 2a ce 7d e8 b6 92 6e 31 ff 93 e9 af 98 -7f bc 06 e5 1e 9b e1 4f 51 98 f9 1f 3f 95 3b d6 -7d a6 0a 9d f5 97 64 c3 dc 0f e0 8e 1c be f0 b7 -5f 86 8d 10 ad 3f ba 74 9f ef 59 fb 6d ac 46 a0 -d6 e5 04 36 93 31 58 6f 58 e4 62 8f 39 aa 27 89 -82 54 3b c0 ee b5 37 dc 61 95 80 19 b3 94 fb 27 -3f 21 58 58 a0 a0 1a c4 d6 50 b9 55 c6 7f 4c 58 - -# ============================================= - -# ================================== -# Example 2: A 1025-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -01 d4 0c 1b cf 97 a6 8a e7 cd bd 8a 7b f3 e3 4f -a1 9d cc a4 ef 75 a4 74 54 37 5f 94 51 4d 88 fe -d0 06 fb 82 9f 84 19 ff 87 d6 31 5d a6 8a 1f f3 -a0 93 8e 9a bb 34 64 01 1c 30 3a d9 91 99 cf 0c -7c 7a 8b 47 7d ce 82 9e 88 44 f6 25 b1 15 e5 e9 -c4 a5 9c f8 f8 11 3b 68 34 33 6a 2f d2 68 9b 47 -2c bb 5e 5c ab e6 74 35 0c 59 b6 c1 7e 17 68 74 -fb 42 f8 fc 3d 17 6a 01 7e dc 61 fd 32 6c 4b 33 -c9 - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -02 7d 14 7e 46 73 05 73 77 fd 1e a2 01 56 57 72 -17 6a 7d c3 83 58 d3 76 04 56 85 a2 e7 87 c2 3c -15 57 6b c1 6b 9f 44 44 02 d6 bf c5 d9 8a 3e 88 -ea 13 ef 67 c3 53 ec a0 c0 dd ba 92 55 bd 7b 8b -b5 0a 64 4a fd fd 1d d5 16 95 b2 52 d2 2e 73 18 -d1 b6 68 7a 1c 10 ff 75 54 5f 3d b0 fe 60 2d 5f -2b 7f 29 4e 36 01 ea b7 b9 d1 ce cd 76 7f 64 69 -2e 3e 53 6c a2 84 6c b0 c2 dd 48 6a 39 fa 75 b1 - -# Prime p: -01 66 01 e9 26 a0 f8 c9 e2 6e ca b7 69 ea 65 a5 -e7 c5 2c c9 e0 80 ef 51 94 57 c6 44 da 68 91 c5 -a1 04 d3 ea 79 55 92 9a 22 e7 c6 8a 7a f9 fc ad -77 7c 3c cc 2b 9e 3d 36 50 bc e4 04 39 9b 7e 59 -d1 - -# Prime q: -01 4e af a1 d4 d0 18 4d a7 e3 1f 87 7d 12 81 dd -da 62 56 64 86 9e 83 79 e6 7a d3 b7 5e ae 74 a5 -80 e9 82 7a bd 6e b7 a0 02 cb 54 11 f5 26 67 97 -76 8f b8 e9 5a e4 0e 3e 8a 01 f3 5f f8 9e 56 c0 -79 - -# p's CRT exponent dP: -e2 47 cc e5 04 93 9b 8f 0a 36 09 0d e2 00 93 87 -55 e2 44 4b 29 53 9a 7d a7 a9 02 f6 05 68 35 c0 -db 7b 52 55 94 97 cf e2 c6 1a 80 86 d0 21 3c 47 -2c 78 85 18 00 b1 71 f6 40 1d e2 e9 c2 75 6f 31 - -# q's CRT exponent dQ: -b1 2f ba 75 78 55 e5 86 e4 6f 64 c3 8a 70 c6 8b -3f 54 8d 93 d7 87 b3 99 99 9d 4c 8f 0b bd 25 81 -c2 1e 19 ed 00 18 a6 d5 d3 df 86 42 4b 3a bc ad -40 19 9d 31 49 5b 61 30 9f 27 c1 bf 55 d4 87 c1 - -# CRT coefficient qInv: -56 4b 1e 1f a0 03 bd a9 1e 89 09 04 25 aa c0 5b -91 da 9e e2 50 61 e7 62 8d 5f 51 30 4a 84 99 2f -dc 33 76 2b d3 78 a5 9f 03 0a 33 4d 53 2b d0 da -e8 f2 98 ea 9e d8 44 63 6a d5 fb 8c bd c0 3c ad - -# -------------------------------- -# RSASSA-PSS Signature Example 2.1 -# -------------------------------- - -# Message to be signed: -da ba 03 20 66 26 3f ae db 65 98 48 11 52 78 a5 -2c 44 fa a3 a7 6f 37 51 5e d3 36 32 10 72 c4 0a -9d 9b 53 bc 05 01 40 78 ad f5 20 87 51 46 aa e7 -0f f0 60 22 6d cb 7b 1f 1f c2 7e 93 60 - -# Salt: -57 bf 16 0b cb 02 bb 1d c7 28 0c f0 45 85 30 b7 -d2 83 2f f7 - -# Signature: -01 4c 5b a5 33 83 28 cc c6 e7 a9 0b f1 c0 ab 3f -d6 06 ff 47 96 d3 c1 2e 4b 63 9e d9 13 6a 5f ec -6c 16 d8 88 4b dd 99 cf dc 52 14 56 b0 74 2b 73 -68 68 cf 90 de 09 9a db 8d 5f fd 1d ef f3 9b a4 -00 7a b7 46 ce fd b2 2d 7d f0 e2 25 f5 46 27 dc -65 46 61 31 72 1b 90 af 44 53 63 a8 35 8b 9f 60 -76 42 f7 8f ab 0a b0 f4 3b 71 68 d6 4b ae 70 d8 -82 78 48 d8 ef 1e 42 1c 57 54 dd f4 2c 25 89 b5 -b3 - -# -------------------------------- -# RSASSA-PSS Signature Example 2.2 -# -------------------------------- - -# Message to be signed: -e4 f8 60 1a 8a 6d a1 be 34 44 7c 09 59 c0 58 57 -0c 36 68 cf d5 1d d5 f9 cc d6 ad 44 11 fe 82 13 -48 6d 78 a6 c4 9f 93 ef c2 ca 22 88 ce bc 2b 9b -60 bd 04 b1 e2 20 d8 6e 3d 48 48 d7 09 d0 32 d1 -e8 c6 a0 70 c6 af 9a 49 9f cf 95 35 4b 14 ba 61 -27 c7 39 de 1b b0 fd 16 43 1e 46 93 8a ec 0c f8 -ad 9e b7 2e 83 2a 70 35 de 9b 78 07 bd c0 ed 8b -68 eb 0f 5a c2 21 6b e4 0c e9 20 c0 db 0e dd d3 -86 0e d7 88 ef ac ca ca 50 2d 8f 2b d6 d1 a7 c1 -f4 1f f4 6f 16 81 c8 f1 f8 18 e9 c4 f6 d9 1a 0c -78 03 cc c6 3d 76 a6 54 4d 84 3e 08 4e 36 3b 8a -cc 55 aa 53 17 33 ed b5 de e5 b5 19 6e 9f 03 e8 -b7 31 b3 77 64 28 d9 e4 57 fe 3f bc b3 db 72 74 -44 2d 78 58 90 e9 cb 08 54 b6 44 4d ac e7 91 d7 -27 3d e1 88 97 19 33 8a 77 fe - -# Salt: -7f 6d d3 59 e6 04 e6 08 70 e8 98 e4 7b 19 bf 2e -5a 7b 2a 90 - -# Signature: -01 09 91 65 6c ca 18 2b 7f 29 d2 db c0 07 e7 ae -0f ec 15 8e b6 75 9c b9 c4 5c 5f f8 7c 76 35 dd -46 d1 50 88 2f 4d e1 e9 ae 65 e7 f7 d9 01 8f 68 -36 95 4a 47 c0 a8 1a 8a 6b 6f 83 f2 94 4d 60 81 -b1 aa 7c 75 9b 25 4b 2c 34 b6 91 da 67 cc 02 26 -e2 0b 2f 18 b4 22 12 76 1d cd 4b 90 8a 62 b3 71 -b5 91 8c 57 42 af 4b 53 7e 29 69 17 67 4f b9 14 -19 47 61 62 1c c1 9a 41 f6 fb 95 3f bc bb 64 9d -ea - -# -------------------------------- -# RSASSA-PSS Signature Example 2.3 -# -------------------------------- - -# Message to be signed: -52 a1 d9 6c 8a c3 9e 41 e4 55 80 98 01 b9 27 a5 -b4 45 c1 0d 90 2a 0d cd 38 50 d2 2a 66 d2 bb 07 -03 e6 7d 58 67 11 45 95 aa bf 5a 7a eb 5a 8f 87 -03 4b bb 30 e1 3c fd 48 17 a9 be 76 23 00 23 60 -6d 02 86 a3 fa f8 a4 d2 2b 72 8e c5 18 07 9f 9e -64 52 6e 3a 0c c7 94 1a a3 38 c4 37 99 7c 68 0c -ca c6 7c 66 bf a1 - -# Salt: -fc a8 62 06 8b ce 22 46 72 4b 70 8a 05 19 da 17 -e6 48 68 8c - -# Signature: -00 7f 00 30 01 8f 53 cd c7 1f 23 d0 36 59 fd e5 -4d 42 41 f7 58 a7 50 b4 2f 18 5f 87 57 85 20 c3 -07 42 af d8 43 59 b6 e6 e8 d3 ed 95 9d c6 fe 48 -6b ed c8 e2 cf 00 1f 63 a7 ab e1 62 56 a1 b8 4d -f0 d2 49 fc 05 d3 19 4c e5 f0 91 27 42 db bf 80 -dd 17 4f 6c 51 f6 ba d7 f1 6c f3 36 4e ba 09 5a -06 26 7d c3 79 38 03 ac 75 26 ae be 0a 47 5d 38 -b8 c2 24 7a b5 1c 48 98 df 70 47 dc 6a df 52 c6 -c4 - -# -------------------------------- -# RSASSA-PSS Signature Example 2.4 -# -------------------------------- - -# Message to be signed: -a7 18 2c 83 ac 18 be 65 70 a1 06 aa 9d 5c 4e 3d -bb d4 af ae b0 c6 0c 4a 23 e1 96 9d 79 ff - -# Salt: -80 70 ef 2d e9 45 c0 23 87 68 4b a0 d3 30 96 73 -22 35 d4 40 - -# Signature: -00 9c d2 f4 ed be 23 e1 23 46 ae 8c 76 dd 9a d3 -23 0a 62 07 61 41 f1 6c 15 2b a1 85 13 a4 8e f6 -f0 10 e0 e3 7f d3 df 10 a1 ec 62 9a 0c b5 a3 b5 -d2 89 30 07 29 8c 30 93 6a 95 90 3b 6b a8 55 55 -d9 ec 36 73 a0 61 08 fd 62 a2 fd a5 6d 1c e2 e8 -5c 4d b6 b2 4a 81 ca 3b 49 6c 36 d4 fd 06 eb 7c -91 66 d8 e9 48 77 c4 2b ea 62 2b 3b fe 92 51 fd -c2 1d 8d 53 71 ba da d7 8a 48 82 14 79 63 35 b4 -0b - -# -------------------------------- -# RSASSA-PSS Signature Example 2.5 -# -------------------------------- - -# Message to be signed: -86 a8 3d 4a 72 ee 93 2a 4f 56 30 af 65 79 a3 86 -b7 8f e8 89 99 e0 ab d2 d4 90 34 a4 bf c8 54 dd -94 f1 09 4e 2e 8c d7 a1 79 d1 95 88 e4 ae fc 1b -1b d2 5e 95 e3 dd 46 1f - -# Salt: -17 63 9a 4e 88 d7 22 c4 fc a2 4d 07 9a 8b 29 c3 -24 33 b0 c9 - -# Signature: -00 ec 43 08 24 93 1e bd 3b aa 43 03 4d ae 98 ba -64 6b 8c 36 01 3d 16 71 c3 cf 1c f8 26 0c 37 4b -19 f8 e1 cc 8d 96 50 12 40 5e 7e 9b f7 37 86 12 -df cc 85 fc e1 2c da 11 f9 50 bd 0b a8 87 67 40 -43 6c 1d 25 95 a6 4a 1b 32 ef cf b7 4a 21 c8 73 -b3 cc 33 aa f4 e3 dc 39 53 de 67 f0 67 4c 04 53 -b4 fd 9f 60 44 06 d4 41 b8 16 09 8c b1 06 fe 34 -72 bc 25 1f 81 5f 59 db 2e 43 78 a3 ad dc 18 1e -cf - -# -------------------------------- -# RSASSA-PSS Signature Example 2.6 -# -------------------------------- - -# Message to be signed: -04 9f 91 54 d8 71 ac 4a 7c 7a b4 53 25 ba 75 45 -a1 ed 08 f7 05 25 b2 66 7c f1 - -# Salt: -37 81 0d ef 10 55 ed 92 2b 06 3d f7 98 de 5d 0a -ab f8 86 ee - -# Signature: -00 47 5b 16 48 f8 14 a8 dc 0a bd c3 7b 55 27 f5 -43 b6 66 bb 6e 39 d3 0e 5b 49 d3 b8 76 dc cc 58 -ea c1 4e 32 a2 d5 5c 26 16 01 44 56 ad 2f 24 6f -c8 e3 d5 60 da 3d df 37 9a 1c 0b d2 00 f1 02 21 -df 07 8c 21 9a 15 1b c8 d4 ec 9d 2f c2 56 44 67 -81 10 14 ef 15 d8 ea 01 c2 eb bf f8 c2 c8 ef ab -38 09 6e 55 fc be 32 85 c7 aa 55 88 51 25 4f af -fa 92 c1 c7 2b 78 75 86 63 ef 45 82 84 31 39 d7 -a6 - -# ============================================= - -# ================================== -# Example 3: A 1026-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -02 f2 46 ef 45 1e d3 ee bb 9a 31 02 00 cc 25 85 -9c 04 8e 4b e7 98 30 29 91 11 2e b6 8c e6 db 67 -4e 28 0d a2 1f ed ed 1a e7 48 80 ca 52 2b 18 db -24 93 85 01 28 27 c5 15 f0 e4 66 a1 ff a6 91 d9 -81 70 57 4e 9d 0e ad b0 87 58 6c a4 89 33 da 3c -c9 53 d9 5b d0 ed 50 de 10 dd cb 67 36 10 7d 6c -83 1c 7f 66 3e 83 3c a4 c0 97 e7 00 ce 0f b9 45 -f8 8f b8 5f e8 e5 a7 73 17 25 65 b9 14 a4 71 a4 -43 - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -65 14 51 73 3b 56 de 5a c0 a6 89 a4 ae b6 e6 89 -4a 69 01 4e 07 6c 88 dd 7a 66 7e ab 32 32 bb cc -d2 fc 44 ba 2f a9 c3 1d b4 6f 21 ed d1 fd b2 3c -5c 12 8a 5d a5 ba b9 1e 7f 95 2b 67 75 9c 7c ff -70 54 15 ac 9f a0 90 7c 7c a6 17 8f 66 8f b9 48 -d8 69 da 4c c3 b7 35 6f 40 08 df d5 44 9d 32 ee -02 d9 a4 77 eb 69 fc 29 26 6e 5d 90 70 51 23 75 -a5 0f bb cc 27 e2 38 ad 98 42 5f 6e bb f8 89 91 - -# Prime p: -01 bd 36 e1 8e ce 4b 0f db 2e 9c 9d 54 8b d1 a7 -d6 e2 c2 1c 6f dc 35 07 4a 1d 05 b1 c6 c8 b3 d5 -58 ea 26 39 c9 a9 a4 21 68 01 69 31 72 52 55 8b -d1 48 ad 21 5a ac 55 0e 2d cf 12 a8 2d 0e bf e8 -53 - -# Prime q: -01 b1 b6 56 ad 86 d8 e1 9d 5d c8 62 92 b3 a1 92 -fd f6 e0 dd 37 87 7b ad 14 82 2f a0 01 90 ca b2 -65 f9 0d 3f 02 05 7b 6f 54 d6 ec b1 44 91 e5 ad -ea ce bc 48 bf 0e bd 2a 2a d2 6d 40 2e 54 f6 16 -51 - -# p's CRT exponent dP: -1f 27 79 fd 2e 3e 5e 6b ae 05 53 95 18 fb a0 cd -0e ad 1a a4 51 3a 7c ba 18 f1 cf 10 e3 f6 81 95 -69 3d 27 8a 0f 0e e7 2f 89 f9 bc 76 0d 80 e2 f9 -d0 26 1d 51 65 01 c6 ae 39 f1 4a 47 6c e2 cc f5 - -# q's CRT exponent dQ: -01 1a 0d 36 79 4b 04 a8 54 aa b4 b2 46 2d 43 9a -50 46 c9 1d 94 0b 2b c6 f7 5b 62 95 6f ef 35 a2 -a6 e6 3c 53 09 81 7f 30 7b bf f9 d5 9e 7e 33 1b -d3 63 f6 d6 68 49 b1 83 46 ad ea 16 9f 0a e9 ae -c1 - -# CRT coefficient qInv: -0b 30 f0 ec f5 58 75 2f b3 a6 ce 4b a2 b8 c6 75 -f6 59 eb a6 c3 76 58 5a 1b 39 71 2d 03 8a e3 d2 -b4 6f cb 41 8a e1 5d 09 05 da 64 40 e1 51 3a 30 -b9 b7 d6 66 8f bc 5e 88 e5 ab 7a 17 5e 73 ba 35 - -# -------------------------------- -# RSASSA-PSS Signature Example 3.1 -# -------------------------------- - -# Message to be signed: -59 4b 37 33 3b bb 2c 84 52 4a 87 c1 a0 1f 75 fc -ec 0e 32 56 f1 08 e3 8d ca 36 d7 0d 00 57 - -# Salt: -f3 1a d6 c8 cf 89 df 78 ed 77 fe ac bc c2 f8 b0 -a8 e4 cf aa - -# Signature: -00 88 b1 35 fb 17 94 b6 b9 6c 4a 3e 67 81 97 f8 -ca c5 2b 64 b2 fe 90 7d 6f 27 de 76 11 24 96 4a -99 a0 1a 88 27 40 ec fa ed 6c 01 a4 74 64 bb 05 -18 23 13 c0 13 38 a8 cd 09 72 14 cd 68 ca 10 3b -d5 7d 3b c9 e8 16 21 3e 61 d7 84 f1 82 46 7a bf -8a 01 cf 25 3e 99 a1 56 ea a8 e3 e1 f9 0e 3c 6e -4e 3a a2 d8 3e d0 34 5b 89 fa fc 9c 26 07 7c 14 -b6 ac 51 45 4f a2 6e 44 6e 3a 2f 15 3b 2b 16 79 -7f - -# -------------------------------- -# RSASSA-PSS Signature Example 3.2 -# -------------------------------- - -# Message to be signed: -8b 76 95 28 88 4a 0d 1f fd 09 0c f1 02 99 3e 79 -6d ad cf bd dd 38 e4 4f f6 32 4c a4 51 - -# Salt: -fc f9 f0 e1 f1 99 a3 d1 d0 da 68 1c 5b 86 06 fc -64 29 39 f7 - -# Signature: -02 a5 f0 a8 58 a0 86 4a 4f 65 01 7a 7d 69 45 4f -3f 97 3a 29 99 83 9b 7b bc 48 bf 78 64 11 69 17 -95 56 f5 95 fa 41 f6 ff 18 e2 86 c2 78 30 79 bc -09 10 ee 9c c3 4f 49 ba 68 11 24 f9 23 df a8 8f -42 61 41 a3 68 a5 f5 a9 30 c6 28 c2 c3 c2 00 e1 -8a 76 44 72 1a 0c be c6 dd 3f 62 79 bd e3 e8 f2 -be 5e 2d 4e e5 6f 97 e7 ce af 33 05 4b e7 04 2b -d9 1a 63 bb 09 f8 97 bd 41 e8 11 97 de e9 9b 11 -af - -# -------------------------------- -# RSASSA-PSS Signature Example 3.3 -# -------------------------------- - -# Message to be signed: -1a bd ba 48 9c 5a da 2f 99 5e d1 6f 19 d5 a9 4d -9e 6e c3 4a 8d 84 f8 45 57 d2 6e 5e f9 b0 2b 22 -88 7e 3f 9a 4b 69 0a d1 14 92 09 c2 0c 61 43 1f -0c 01 7c 36 c2 65 7b 35 d7 b0 7d 3f 5a d8 70 85 -07 a9 c1 b8 31 df 83 5a 56 f8 31 07 18 14 ea 5d -3d 8d 8f 6a de 40 cb a3 8b 42 db 7a 2d 3d 7a 29 -c8 f0 a7 9a 78 38 cf 58 a9 75 7f a2 fe 4c 40 df -9b aa 19 3b fc 6f 92 b1 23 ad 57 b0 7a ce 3e 6a -c0 68 c9 f1 06 af d9 ee b0 3b 4f 37 c2 5d bf bc -fb 30 71 f6 f9 77 17 66 d0 72 f3 bb 07 0a f6 60 -55 32 97 3a e2 50 51 - -# Salt: -98 6e 7c 43 db b6 71 bd 41 b9 a7 f4 b6 af c8 0e -80 5f 24 23 - -# Signature: -02 44 bc d1 c8 c1 69 55 73 6c 80 3b e4 01 27 2e -18 cb 99 08 11 b1 4f 72 db 96 41 24 d5 fa 76 06 -49 cb b5 7a fb 87 55 db b6 2b f5 1f 46 6c f2 3a -0a 16 07 57 6e 98 3d 77 8f ce ff a9 2d f7 54 8a -ea 8e a4 ec ad 2c 29 dd 9f 95 bc 07 fe 91 ec f8 -be e2 55 bf e8 76 2f d7 69 0a a9 bf a4 fa 08 49 -ef 72 8c 2c 42 c4 53 23 64 52 2d f2 ab 7f 9f 8a -03 b6 3f 7a 49 91 75 82 86 68 f5 ef 5a 29 e3 80 -2c - -# -------------------------------- -# RSASSA-PSS Signature Example 3.4 -# -------------------------------- - -# Message to be signed: -8f b4 31 f5 ee 79 2b 6c 2a c7 db 53 cc 42 86 55 -ae b3 2d 03 f4 e8 89 c5 c2 5d e6 83 c4 61 b5 3a -cf 89 f9 f8 d3 aa bd f6 b9 f0 c2 a1 de 12 e1 5b -49 ed b3 91 9a 65 2f e9 49 1c 25 a7 fc e1 f7 22 -c2 54 36 08 b6 9d c3 75 ec - -# Salt: -f8 31 2d 9c 8e ea 13 ec 0a 4c 7b 98 12 0c 87 50 -90 87 c4 78 - -# Signature: -01 96 f1 2a 00 5b 98 12 9c 8d f1 3c 4c b1 6f 8a -a8 87 d3 c4 0d 96 df 3a 88 e7 53 2e f3 9c d9 92 -f2 73 ab c3 70 bc 1b e6 f0 97 cf eb bf 01 18 fd -9e f4 b9 27 15 5f 3d f2 2b 90 4d 90 70 2d 1f 7b -a7 a5 2b ed 8b 89 42 f4 12 cd 7b d6 76 c9 d1 8e -17 03 91 dc d3 45 c0 6a 73 09 64 b3 f3 0b cc e0 -bb 20 ba 10 6f 9a b0 ee b3 9c f8 a6 60 7f 75 c0 -34 7f 0a f7 9f 16 af a0 81 d2 c9 2d 1e e6 f8 36 -b8 - -# -------------------------------- -# RSASSA-PSS Signature Example 3.5 -# -------------------------------- - -# Message to be signed: -fe f4 16 1d fa af 9c 52 95 05 1d fc 1f f3 81 0c -8c 9e c2 e8 66 f7 07 54 22 c8 ec 42 16 a9 c4 ff -49 42 7d 48 3c ae 10 c8 53 4a 41 b2 fd 15 fe e0 -69 60 ec 6f b3 f7 a7 e9 4a 2f 8a 2e 3e 43 dc 4a -40 57 6c 30 97 ac 95 3b 1d e8 6f 0b 4e d3 6d 64 -4f 23 ae 14 42 55 29 62 24 64 ca 0c bf 0b 17 41 -34 72 38 15 7f ab 59 e4 de 55 24 09 6d 62 ba ec -63 ac 64 - -# Salt: -50 32 7e fe c6 29 2f 98 01 9f c6 7a 2a 66 38 56 -3e 9b 6e 2d - -# Signature: -02 1e ca 3a b4 89 22 64 ec 22 41 1a 75 2d 92 22 -10 76 d4 e0 1c 0e 6f 0d de 9a fd 26 ba 5a cf 6d -73 9e f9 87 54 5d 16 68 3e 56 74 c9 e7 0f 1d e6 -49 d7 e6 1d 48 d0 ca eb 4f b4 d8 b2 4f ba 84 a6 -e3 10 8f ee 7d 07 05 97 32 66 ac 52 4b 4a d2 80 -f7 ae 17 dc 59 d9 6d 33 51 58 6b 5a 3b db 89 5d -1e 1f 78 20 ac 61 35 d8 75 34 80 99 83 82 ba 32 -b7 34 95 59 60 8c 38 74 52 90 a8 5e f4 e9 f9 bd -83 - -# -------------------------------- -# RSASSA-PSS Signature Example 3.6 -# -------------------------------- - -# Message to be signed: -ef d2 37 bb 09 8a 44 3a ee b2 bf 6c 3f 8c 81 b8 -c0 1b 7f cb 3f eb - -# Salt: -b0 de 3f c2 5b 65 f5 af 96 b1 d5 cc 3b 27 d0 c6 -05 30 87 b3 - -# Signature: -01 2f af ec 86 2f 56 e9 e9 2f 60 ab 0c 77 82 4f -42 99 a0 ca 73 4e d2 6e 06 44 d5 d2 22 c7 f0 bd -e0 39 64 f8 e7 0a 5c b6 5e d4 4e 44 d5 6a e0 ed -f1 ff 86 ca 03 2c c5 dd 44 04 db b7 6a b8 54 58 -6c 44 ee d8 33 6d 08 d4 57 ce 6c 03 69 3b 45 c0 -f1 ef ef 93 62 4b 95 b8 ec 16 9c 61 6d 20 e5 53 -8e bc 0b 67 37 a6 f8 2b 4b c0 57 09 24 fc 6b 35 -75 9a 33 48 42 62 79 f8 b3 d7 74 4e 2d 22 24 26 -ce - -# ============================================= - -# ================================== -# Example 4: A 1027-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -05 4a db 78 86 44 7e fe 6f 57 e0 36 8f 06 cf 52 -b0 a3 37 07 60 d1 61 ce f1 26 b9 1b e7 f8 9c 42 -1b 62 a6 ec 1d a3 c3 11 d7 5e d5 0e 0a b5 ff f3 -fd 33 8a cc 3a a8 a4 e7 7e e2 63 69 ac b8 1b a9 -00 fa 83 f5 30 0c f9 bb 6c 53 ad 1d c8 a1 78 b8 -15 db 42 35 a9 a9 da 0c 06 de 4e 61 5e a1 27 7c -e5 59 e9 c1 08 de 58 c1 4a 81 aa 77 f5 a6 f8 d1 -33 54 94 49 88 48 c8 b9 59 40 74 0b e7 bf 7c 37 -05 - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -fa 04 1f 8c d9 69 7c ee d3 8e c8 ca a2 75 52 3b -4d d7 2b 09 a3 01 d3 54 1d 72 f5 d3 1c 05 cb ce -2d 69 83 b3 61 83 af 10 69 0b d4 6c 46 13 1e 35 -78 94 31 a5 56 77 1d d0 04 9b 57 46 1b f0 60 c1 -f6 84 72 e8 a6 7c 25 f3 57 e5 b6 b4 73 8f a5 41 -a7 30 34 6b 4a 07 64 9a 2d fa 80 6a 69 c9 75 b6 -ab a6 46 78 ac c7 f5 91 3e 89 c6 22 f2 d8 ab b1 -e3 e3 25 54 e3 9d f9 4b a6 0c 00 2e 38 7d 90 11 - -# Prime p: -02 92 32 33 6d 28 38 94 5d ba 9d d7 72 3f 4e 62 -4a 05 f7 37 5b 92 7a 87 ab e6 a8 93 a1 65 8f d4 -9f 47 f6 c7 b0 fa 59 6c 65 fa 68 a2 3f 0a b4 32 -96 2d 18 d4 34 3b d6 fd 67 1a 5e a8 d1 48 41 39 -95 - -# Prime q: -02 0e f5 ef e7 c5 39 4a ed 22 72 f7 e8 1a 74 f4 -c0 2d 14 58 94 cb 1b 3c ab 23 a9 a0 71 0a 2a fc -7e 33 29 ac bb 74 3d 01 f6 80 c4 d0 2a fb 4c 8f -de 7e 20 93 08 11 bb 2b 99 57 88 b5 e8 72 c2 0b -b1 - -# p's CRT exponent dP: -02 6e 7e 28 01 0e cf 24 12 d9 52 3a d7 04 64 7f -b4 fe 9b 66 b1 a6 81 58 1b 0e 15 55 3a 89 b1 54 -28 28 89 8f 27 24 3e ba b4 5f f5 e1 ac b9 d4 df -1b 05 1f bc 62 82 4d bc 6f 6c 93 26 1a 78 b9 a7 -59 - -# q's CRT exponent dQ: -01 2d dc c8 6e f6 55 99 8c 39 dd ae 11 71 86 69 -e5 e4 6c f1 49 5b 07 e1 3b 10 14 cd 69 b3 af 68 -30 4a d2 a6 b6 43 21 e7 8b f3 bb ca 9b b4 94 e9 -1d 45 17 17 e2 d9 75 64 c6 54 94 65 d0 20 5c f4 -21 - -# CRT coefficient qInv: -01 06 00 c4 c2 18 47 45 9f e5 76 70 3e 2e be ca -e8 a5 09 4e e6 3f 53 6b f4 ac 68 d3 c1 3e 5e 4f -12 ac 5c c1 0a b6 a2 d0 5a 19 92 14 d1 82 47 47 -d5 51 90 96 36 b7 74 c2 2c ac 0b 83 75 99 ab cc -75 - -# -------------------------------- -# RSASSA-PSS Signature Example 4.1 -# -------------------------------- - -# Message to be signed: -9f b0 3b 82 7c 82 17 d9 - -# Salt: -ed 7c 98 c9 5f 30 97 4f be 4f bd dc f0 f2 8d 60 -21 c0 e9 1d - -# Signature: -03 23 d5 b7 bf 20 ba 45 39 28 9a e4 52 ae 42 97 -08 0f ef f4 51 84 23 ff 48 11 a8 17 83 7e 7d 82 -f1 83 6c df ab 54 51 4f f0 88 7b dd ee bf 40 bf -99 b0 47 ab c3 ec fa 6a 37 a3 ef 00 f4 a0 c4 a8 -8a ae 09 04 b7 45 c8 46 c4 10 7e 87 97 72 3e 8a -c8 10 d9 e3 d9 5d fa 30 ff 49 66 f4 d7 5d 13 76 -8d 20 85 7f 2b 14 06 f2 64 cf e7 5e 27 d7 65 2f -4b 5e d3 57 5f 28 a7 02 f8 c4 ed 9c f9 b2 d4 49 -48 - -# -------------------------------- -# RSASSA-PSS Signature Example 4.2 -# -------------------------------- - -# Message to be signed: -0c a2 ad 77 79 7e ce 86 de 5b f7 68 75 0d db 5e -d6 a3 11 6a d9 9b bd 17 ed f7 f7 82 f0 db 1c d0 -5b 0f 67 74 68 c5 ea 42 0d c1 16 b1 0e 80 d1 10 -de 2b 04 61 ea 14 a3 8b e6 86 20 39 2e 7e 89 3c -b4 ea 93 93 fb 88 6c 20 ff 79 06 42 30 5b f3 02 -00 38 92 e5 4d f9 f6 67 50 9d c5 39 20 df 58 3f -50 a3 dd 61 ab b6 fa b7 5d 60 03 77 e3 83 e6 ac -a6 71 0e ee a2 71 56 e0 67 52 c9 4c e2 5a e9 9f -cb f8 59 2d be 2d 7e 27 45 3c b4 4d e0 71 00 eb -b1 a2 a1 98 11 a4 78 ad be ab 27 0f 94 e8 fe 36 -9d 90 b3 ca 61 2f 9f - -# Salt: -22 d7 1d 54 36 3a 42 17 aa 55 11 3f 05 9b 33 84 -e3 e5 7e 44 - -# Signature: -04 9d 01 85 84 5a 26 4d 28 fe b1 e6 9e da ec 09 -06 09 e8 e4 6d 93 ab b3 83 71 ce 51 f4 aa 65 a5 -99 bd aa a8 1d 24 fb a6 6a 08 a1 16 cb 64 4f 3f -1e 65 3d 95 c8 9d b8 bb d5 da ac 27 09 c8 98 40 -00 17 84 10 a7 c6 aa 86 67 dd c3 8c 74 1f 71 0e -c8 66 5a a9 05 2b e9 29 d4 e3 b1 67 82 c1 66 21 -14 c5 41 4b b0 35 34 55 c3 92 fc 28 f3 db 59 05 -4b 5f 36 5c 49 e1 d1 56 f8 76 ee 10 cb 4f d7 05 -98 - -# -------------------------------- -# RSASSA-PSS Signature Example 4.3 -# -------------------------------- - -# Message to be signed: -28 80 62 af c0 8f cd b7 c5 f8 65 0b 29 83 73 00 -46 1d d5 67 6c 17 a2 0a 3c 8f b5 14 89 49 e3 f7 -3d 66 b3 ae 82 c7 24 0e 27 c5 b3 ec 43 28 ee 7d -6d df 6a 6a 0c 9b 5b 15 bc da 19 6a 9d 0c 76 b1 -19 d5 34 d8 5a bd 12 39 62 d5 83 b7 6c e9 d1 80 -bc e1 ca - -# Salt: -4a f8 70 fb c6 51 60 12 ca 91 6c 70 ba 86 2a c7 -e8 24 36 17 - -# Signature: -03 fb c4 10 a2 ce d5 95 00 fb 99 f9 e2 af 27 81 -ad a7 4e 13 14 56 24 60 27 82 e2 99 48 13 ee fc -a0 51 9e cd 25 3b 85 5f b6 26 a9 0d 77 1e ae 02 -8b 0c 47 a1 99 cb d9 f8 e3 26 97 34 af 41 63 59 -90 90 71 3a 3f a9 10 fa 09 60 65 27 21 43 2b 97 -10 36 a7 18 1a 2b c0 ca b4 3b 0b 59 8b c6 21 74 -61 d7 db 30 5f f7 e9 54 c5 b5 bb 23 1c 39 e7 91 -af 6b cf a7 6b 14 7b 08 13 21 f7 26 41 48 2a 2a -ad - -# -------------------------------- -# RSASSA-PSS Signature Example 4.4 -# -------------------------------- - -# Message to be signed: -6f 4f 9a b9 50 11 99 ce f5 5c 6c f4 08 fe 7b 36 -c5 57 c4 9d 42 0a 47 63 d2 46 3c 8a d4 4b 3c fc -5b e2 74 2c 0e 7d 9b 0f 66 08 f0 8c 7f 47 b6 93 -ee - -# Salt: -40 d2 e1 80 fa e1 ea c4 39 c1 90 b5 6c 2c 0e 14 -dd f9 a2 26 - -# Signature: -04 86 64 4b c6 6b f7 5d 28 33 5a 61 79 b1 08 51 -f4 3f 09 bd ed 9f ac 1a f3 32 52 bb 99 53 ba 42 -98 cd 64 66 b2 75 39 a7 0a da a3 f8 9b 3d b3 c7 -4a b6 35 d1 22 f4 ee 7c e5 57 a6 1e 59 b8 2f fb -78 66 30 e5 f9 db 53 c7 7d 9a 0c 12 fa b5 95 8d -4c 2c e7 da a8 07 cd 89 ba 2c c7 fc d0 2f f4 70 -ca 67 b2 29 fc ce 81 4c 85 2c 73 cc 93 be a3 5b -e6 84 59 ce 47 8e 9d 46 55 d1 21 c8 47 2f 37 1d -4f - -# -------------------------------- -# RSASSA-PSS Signature Example 4.5 -# -------------------------------- - -# Message to be signed: -e1 7d 20 38 5d 50 19 55 82 3c 3f 66 62 54 c1 d3 -dd 36 ad 51 68 b8 f1 8d 28 6f dc f6 7a 7d ad 94 -09 70 85 fa b7 ed 86 fe 21 42 a2 87 71 71 79 97 -ef 1a 7a 08 88 4e fc 39 35 6d 76 07 7a af 82 45 -9a 7f ad 45 84 88 75 f2 81 9b 09 89 37 fe 92 3b -cc 9d c4 42 d7 2d 75 4d 81 20 25 09 0c 9b c0 3d -b3 08 0c 13 8d d6 3b 35 5d 0b 4b 85 d6 68 8a c1 -9f 4d e1 50 84 a0 ba 4e 37 3b 93 ef 4a 55 50 96 -69 19 15 dc 23 c0 0e 95 4c de b2 0a 47 cd 55 d1 -6c 3d 86 81 d4 6e d7 f2 ed 5e a4 27 95 be 17 ba -ed 25 f0 f4 d1 13 b3 63 6a dd d5 85 f1 6a 8b 5a -ec 0c 8f a9 c5 f0 3c bf 3b 9b 73 - -# Salt: -24 97 dc 2b 46 15 df ae 5a 66 3d 49 ff d5 6b f7 -ef c1 13 04 - -# Signature: -02 2a 80 04 53 53 90 4c b3 0c bb 54 2d 7d 49 90 -42 1a 6e ec 16 a8 02 9a 84 22 ad fd 22 d6 af f8 -c4 cc 02 94 af 11 0a 0c 06 7e c8 6a 7d 36 41 34 -45 9b b1 ae 8f f8 36 d5 a8 a2 57 98 40 99 6b 32 -0b 19 f1 3a 13 fa d3 78 d9 31 a6 56 25 da e2 73 -9f 0c 53 67 0b 35 d9 d3 cb ac 08 e7 33 e4 ec 2b -83 af 4b 91 96 d6 3e 7c 4f f1 dd ea e2 a1 22 79 -1a 12 5b fe a8 de b0 de 8c cf 1f 4f fa f6 e6 fb -0a - -# -------------------------------- -# RSASSA-PSS Signature Example 4.6 -# -------------------------------- - -# Message to be signed: -af bc 19 d4 79 24 90 18 fd f4 e0 9f 61 87 26 44 -04 95 de 11 dd ee e3 88 72 d7 75 fc ea 74 a2 38 -96 b5 34 3c 9c 38 d4 6a f0 db a2 24 d0 47 58 0c -c6 0a 65 e9 39 1c f9 b5 9b 36 a8 60 59 8d 4e 82 -16 72 2f 99 3b 91 cf ae 87 bc 25 5a f8 9a 6a 19 -9b ca 4a 39 1e ad bc 3a 24 90 3c 0b d6 67 36 8f -6b e7 8e 3f ea bf b4 ff d4 63 12 27 63 74 0f fb -be fe ab 9a 25 56 4b c5 d1 c2 4c 93 e4 22 f7 50 -73 e2 ad 72 bf 45 b1 0d f0 0b 52 a1 47 12 8e 73 -fe e3 3f a3 f0 57 7d 77 f8 0f bc 2d f1 be d3 13 -29 0c 12 77 7f 50 - -# Salt: -a3 34 db 6f ae bf 11 08 1a 04 f8 7c 2d 62 1c de -c7 93 0b 9b - -# Signature: -00 93 8d cb 6d 58 30 46 06 5f 69 c7 8d a7 a1 f1 -75 70 66 a7 fa 75 12 5a 9d 29 29 f0 b7 9a 60 b6 -27 b0 82 f1 1f 5b 19 6f 28 eb 9d aa 6f 21 c0 5e -51 40 f6 ae f1 73 7d 20 23 07 5c 05 ec f0 4a 02 -8c 68 6a 2a b3 e7 d5 a0 66 4f 29 5c e1 29 95 e8 -90 90 8b 6a d2 1f 08 39 eb 65 b7 03 93 a7 b5 af -d9 87 1d e0 ca a0 ce de c5 b8 19 62 67 56 20 9d -13 ab 1e 7b b9 54 6a 26 ff 37 e9 a5 1a f9 fd 56 -2e - -# ============================================= - -# ================================== -# Example 5: A 1028-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -0d 10 f6 61 f2 99 40 f5 ed 39 aa 26 09 66 de b4 -78 43 67 9d 2b 6f b2 5b 3d e3 70 f3 ac 7c 19 91 -63 91 fd 25 fb 52 7e bf a6 a4 b4 df 45 a1 75 9d -99 6c 4b b4 eb d1 88 28 c4 4f c5 2d 01 91 87 17 -40 52 5f 47 a4 b0 cc 8d a3 25 ed 8a a6 76 b0 d0 -f6 26 e0 a7 7f 07 69 21 70 ac ac 80 82 f4 2f aa -7d c7 cd 12 3e 73 0e 31 a8 79 85 20 4c ab cb e6 -67 0d 43 a2 dd 2b 2d de f5 e0 53 92 fc 21 3b c5 -07 - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -03 ce 08 b1 04 ff f3 96 a9 79 bd 3e 4e 46 92 5b -63 19 dd b6 3a cb cf d8 19 f1 7d 16 b8 07 7b 3a -87 10 1f f3 4b 77 fe 48 b8 b2 05 a9 6e 91 51 ba -8e ce a6 4d 0c ce 7b 23 c3 e6 a6 b8 30 58 bc 49 -da e8 16 ae 73 6d b5 a4 70 8e 2a d4 35 23 2b 56 -7f 90 96 ce 59 ff 28 06 1e 79 ab 1c 02 d7 17 e6 -b2 3c ea 6d b8 eb 51 92 fa 7c 1e ab 22 7d ba 74 -62 1c 45 60 18 96 ee f1 37 92 c8 44 0b eb 15 aa -c1 - -# Prime p: -03 f2 f3 31 f4 14 2d 4f 24 b4 3a a1 02 79 a8 96 -52 d4 e7 53 72 21 a1 a7 b2 a2 5d eb 55 1e 5d e9 -ac 49 74 11 c2 27 a9 4e 45 f9 1c 2d 1c 13 cc 04 -6c f4 ce 14 e3 2d 05 87 34 21 0d 44 a8 7e e1 b7 -3f - -# Prime q: -03 4f 09 0d 73 b5 58 03 03 0c f0 36 1a 5d 80 81 -bf b7 9f 85 15 23 fe ac 0a 21 24 d0 8d 40 13 ff -08 48 77 71 a8 70 d0 47 9d c0 68 6c 62 f7 71 8d -fe cf 02 4b 17 c9 26 76 78 05 91 71 33 9c c0 08 -39 - -# p's CRT exponent dP: -02 aa 66 3a db f5 1a b8 87 a0 18 cb 42 6e 78 bc -2f e1 82 dc b2 f7 bc b5 04 41 d1 7f df 0f 06 79 -8b 50 71 c6 e2 f5 fe b4 d5 4a d8 18 23 11 c1 ef -62 d4 c4 9f 18 d1 f5 1f 54 b2 d2 cf fb a4 da 1b -e5 - -# q's CRT exponent dQ: -02 bb e7 06 07 8b 5c 0b 39 15 12 d4 11 db 1b 19 -9b 5a 56 64 b8 40 42 ea d3 7f e9 94 ae 72 b9 53 -2d fb fb 3e 9e 69 81 a0 fb b8 06 51 31 41 b7 c2 -16 3f e5 6c 39 5e 4b fa ee 57 e3 83 3f 9b 91 8d -f9 - -# CRT coefficient qInv: -02 42 b6 cd 00 d3 0a 76 7a ee 9a 89 8e ad 45 3c -8e ae a6 3d 50 0b 7d 1e 00 71 3e da e5 1c e3 6b -23 b6 64 df 26 e6 3e 26 6e c8 f7 6e 6e 63 ed 1b -a4 1e b0 33 b1 20 f7 ea 52 12 ae 21 a9 8f bc 16 - -# -------------------------------- -# RSASSA-PSS Signature Example 5.1 -# -------------------------------- - -# Message to be signed: -30 c7 d5 57 45 8b 43 6d ec fd c1 4d 06 cb 7b 96 -b0 67 18 c4 8d 7d e5 74 82 a8 68 ae 7f 06 58 70 -a6 21 65 06 d1 1b 77 93 23 df df 04 6c f5 77 51 -29 13 4b 4d 56 89 e4 d9 c0 ce 1e 12 d7 d4 b0 6c -b5 fc 58 20 de cf a4 1b af 59 bf 25 7b 32 f0 25 -b7 67 9b 44 5b 94 99 c9 25 55 14 58 85 99 2f 1b -76 f8 48 91 ee 4d 3b e0 f5 15 0f d5 90 1e 3a 4c -8e d4 3f d3 6b 61 d0 22 e6 5a d5 00 8d bf 33 29 -3c 22 bf bf d0 73 21 f0 f1 d5 fa 9f df 00 14 c2 -fc b0 35 8a ad 0e 35 4b 0d 29 - -# Salt: -08 1b 23 3b 43 56 77 50 bd 6e 78 f3 96 a8 8b 9f -6a 44 51 51 - -# Signature: -0b a3 73 f7 6e 09 21 b7 0a 8f bf e6 22 f0 bf 77 -b2 8a 3d b9 8e 36 10 51 c3 d7 cb 92 ad 04 52 91 -5a 4d e9 c0 17 22 f6 82 3e eb 6a df 7e 0c a8 29 -0f 5d e3 e5 49 89 0a c2 a3 c5 95 0a b2 17 ba 58 -59 08 94 95 2d e9 6f 8d f1 11 b2 57 52 15 da 6c -16 15 90 c7 45 be 61 24 76 ee 57 8e d3 84 ab 33 -e3 ec e9 74 81 a2 52 f5 c7 9a 98 b5 53 2a e0 0c -dd 62 f2 ec c0 cd 1b ae fe 80 d8 0b 96 21 93 ec -1d - -# -------------------------------- -# RSASSA-PSS Signature Example 5.2 -# -------------------------------- - -# Message to be signed: -e7 b3 2e 15 56 ea 1b 27 95 04 6a c6 97 39 d2 2a -c8 96 6b f1 1c 11 6f 61 4b 16 67 40 e9 6b 90 65 -3e 57 50 94 5f cf 77 21 86 c0 37 90 a0 7f da 32 -3e 1a 61 91 6b 06 ee 21 57 db 3d ff 80 d6 7d 5e -39 a5 3a e2 68 c8 f0 9e d9 9a 73 20 05 b0 bc 6a -04 af 4e 08 d5 7a 00 e7 20 1b 30 60 ef aa db 73 -11 3b fc 08 7f d8 37 09 3a a2 52 35 b8 c1 49 f5 -62 15 f0 31 c2 4a d5 bd e7 f2 99 60 df 7d 52 40 -70 f7 44 9c 6f 78 50 84 be 1a 0f 73 30 47 f3 36 -f9 15 47 38 67 45 47 db 02 a9 f4 4d fc 6e 60 30 -10 81 e1 ce 99 84 7f 3b 5b 60 1f f0 6b 4d 57 76 -a9 74 0b 9a a0 d3 40 58 fd 3b 90 6e 4f 78 59 df -b0 7d 71 73 e5 e6 f6 35 0a da c2 1f 27 b2 30 74 -69 - -# Salt: -bd 0c e1 95 49 d0 70 01 20 cb e5 10 77 db bb b0 -0a 8d 8b 09 - -# Signature: -08 18 0d e8 25 e4 b8 b0 14 a3 2d a8 ba 76 15 55 -92 12 04 f2 f9 0d 5f 24 b7 12 90 8f f8 4f 3e 22 -0a d1 79 97 c0 dd 6e 70 66 30 ba 3e 84 ad d4 d5 -e7 ab 00 4e 58 07 4b 54 97 09 56 5d 43 ad 9e 97 -b5 a7 a1 a2 9e 85 b9 f9 0f 4a af cd f5 83 21 de -8c 59 74 ef 9a bf 2d 52 6f 33 c0 f2 f8 2e 95 d1 -58 ea 6b 81 f1 73 6d b8 d1 af 3d 6a c6 a8 3b 32 -d1 8b ae 0f f1 b2 fe 27 de 4c 76 ed 8c 79 80 a3 -4e - -# -------------------------------- -# RSASSA-PSS Signature Example 5.3 -# -------------------------------- - -# Message to be signed: -8d 83 96 e3 65 07 fe 1e f6 a1 90 17 54 8e 0c 71 -66 74 c2 fe c2 33 ad b2 f7 75 66 5e c4 1f 2b d0 -ba 39 6b 06 1a 9d aa 7e 86 6f 7c 23 fd 35 31 95 -43 00 a3 42 f9 24 53 5e a1 49 8c 48 f6 c8 79 93 -28 65 fc 02 00 0c 52 87 23 b7 ad 03 35 74 5b 51 -20 9a 0a fe d9 32 af 8f 08 87 c2 19 00 4d 2a bd -89 4e a9 25 59 ee 31 98 af 3a 73 4f e9 b9 63 8c -26 3a 72 8a d9 5a 5a e8 ce 3e b1 58 39 f3 aa 78 -52 bb 39 07 06 e7 76 0e 43 a7 12 91 a2 e3 f8 27 -23 7d ed a8 51 87 4c 51 76 65 f5 45 f2 72 38 df -86 55 7f 37 5d 09 cc d8 bd 15 d8 cc f6 1f 5d 78 -ca 5c 7f 5c de 78 2e 6b f5 d0 05 70 56 d4 ba d9 -8b 3d 2f 95 75 e8 24 ab 7a 33 ff 57 b0 ac 10 0a -b0 d6 ea d7 aa 0b 50 f6 e4 d3 e5 ec 0b 96 6b - -# Salt: -81 57 79 a9 1b 3a 8b d0 49 bf 2a eb 92 01 42 77 -22 22 c9 ca - -# Signature: -05 e0 fd bd f6 f7 56 ef 73 31 85 cc fa 8c ed 2e -b6 d0 29 d9 d5 6e 35 56 1b 5d b8 e7 02 57 ee 6f -d0 19 d2 f0 bb f6 69 fe 9b 98 21 e7 8d f6 d4 1e -31 60 8d 58 28 0f 31 8e e3 4f 55 99 41 c8 df 13 -28 75 74 ba c0 00 b7 e5 8d c4 f4 14 ba 49 fb 12 -7f 9d 0f 89 36 63 8c 76 e8 53 56 c9 94 f7 97 50 -f7 fa 3c f4 fd 48 2d f7 5e 3f b9 97 8c d0 61 f7 -ab b1 75 72 e6 e6 3e 0b de 12 cb dc f1 8c 68 b9 -79 - -# -------------------------------- -# RSASSA-PSS Signature Example 5.4 -# -------------------------------- - -# Message to be signed: -32 8c 65 9e 0a 64 37 43 3c ce b7 3c 14 - -# Salt: -9a ec 4a 74 80 d5 bb c4 29 20 d7 ca 23 5d b6 74 -98 9c 9a ac - -# Signature: -0b c9 89 85 3b c2 ea 86 87 32 71 ce 18 3a 92 3a -b6 5e 8a 53 10 0e 6d f5 d8 7a 24 c4 19 4e b7 97 -81 3e e2 a1 87 c0 97 dd 87 2d 59 1d a6 0c 56 86 -05 dd 7e 74 2d 5a f4 e3 3b 11 67 8c cb 63 90 32 -04 a3 d0 80 b0 90 2c 89 ab a8 86 8f 00 9c 0f 1c -0c b8 58 10 bb dd 29 12 1a bb 84 71 ff 2d 39 e4 -9f d9 2d 56 c6 55 c8 e0 37 ad 18 fa fb dc 92 c9 -58 63 f7 f6 1e a9 ef a2 8f ea 40 13 69 d1 9d ae -a1 - -# -------------------------------- -# RSASSA-PSS Signature Example 5.5 -# -------------------------------- - -# Message to be signed: -f3 7b 96 23 79 a4 7d 41 5a 37 6e ec 89 73 15 0b -cb 34 ed d5 ab 65 40 41 b6 14 30 56 0c 21 44 58 -2b a1 33 c8 67 d8 52 d6 b8 e2 33 21 90 13 02 ec -b4 5b 09 ec 88 b1 52 71 78 fa 04 32 63 f3 06 7d -9f fe 97 30 32 a9 9f 4c b0 8a d2 c7 e0 a2 45 6c -dd 57 a7 df 56 fe 60 53 52 7a 5a eb 67 d7 e5 52 -06 3c 1c a9 7b 1b ef fa 7b 39 e9 97 ca f2 78 78 -ea 0f 62 cb eb c8 c2 1d f4 c8 89 a2 02 85 1e 94 -90 88 49 0c 24 9b 6e 9a cf 1d 80 63 f5 be 23 43 -98 9b f9 5c 4d a0 1a 2b e7 8b 4a b6 b3 78 01 5b -c3 79 57 f7 69 48 b5 e5 8e 44 0c 28 45 3d 40 d7 -cf d5 7e 7d 69 06 00 47 4a b5 e7 59 73 b1 ea 0c -5f 1e 45 d1 41 90 af e2 f4 eb 6d 3b df 71 f1 d2 -f8 bb 15 6a 1c 29 5d 04 aa eb 9d 68 9d ce 79 ed -62 bc 44 3e - -# Salt: -e2 0c 1e 98 78 51 2c 39 97 0f 58 37 5e 15 49 a6 -8b 64 f3 1d - -# Signature: -0a ef a9 43 b6 98 b9 60 9e df 89 8a d2 27 44 ac -28 dc 23 94 97 ce a3 69 cb bd 84 f6 5c 95 c0 ad -77 6b 59 47 40 16 4b 59 a7 39 c6 ff 7c 2f 07 c7 -c0 77 a8 6d 95 23 8f e5 1e 1f cf 33 57 4a 4a e0 -68 4b 42 a3 f6 bf 67 7d 91 82 0c a8 98 74 46 7b -2c 23 ad d7 79 69 c8 07 17 43 0d 0e fc 1d 36 95 -89 2c e8 55 cb 7f 70 11 63 0f 4d f2 6d ef 8d df -36 fc 23 90 5f 57 fa 62 43 a4 85 c7 70 d5 68 1f -cd - -# -------------------------------- -# RSASSA-PSS Signature Example 5.6 -# -------------------------------- - -# Message to be signed: -c6 10 3c 33 0c 1e f7 18 c1 41 e4 7b 8f a8 59 be -4d 5b 96 25 9e 7d 14 20 70 ec d4 85 83 9d ba 5a -83 69 c1 7c 11 14 03 5e 53 2d 19 5c 74 f4 4a 04 -76 a2 d3 e8 a4 da 21 00 16 ca ce d0 e3 67 cb 86 -77 10 a4 b5 aa 2d f2 b8 e5 da f5 fd c6 47 80 7d -4d 5e bb 6c 56 b9 76 3c cd ae 4d ea 33 08 eb 0a -c2 a8 95 01 cb 20 9d 26 39 fa 5b f8 7c e7 90 74 -7d 3c b2 d2 95 e8 45 64 f2 f6 37 82 4f 0c 13 02 -81 29 b0 aa 4a 42 2d 16 22 82 - -# Salt: -23 29 1e 4a 33 07 e8 bb b7 76 62 3a b3 4e 4a 5f -4c c8 a8 db - -# Signature: -02 80 2d cc fa 8d fa f5 27 9b f0 b4 a2 9b a1 b1 -57 61 1f ae aa f4 19 b8 91 9d 15 94 19 00 c1 33 -9e 7e 92 e6 fa e5 62 c5 3e 6c c8 e8 41 04 b1 10 -bc e0 3a d1 85 25 e3 c4 9a 0e ad ad 5d 3f 28 f2 -44 a8 ed 89 ed ba fb b6 86 27 7c fa 8a e9 09 71 -4d 6b 28 f4 bf 8e 29 3a a0 4c 41 ef e7 c0 a8 12 -66 d5 c0 61 e2 57 5b e0 32 aa 46 46 74 ff 71 62 -62 19 bd 74 cc 45 f0 e7 ed 4e 3f f9 6e ee 75 8e -8f - -# ============================================= - -# ================================== -# Example 6: A 1029-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -16 4c a3 1c ff 60 9f 3a 0e 71 01 b0 39 f2 e4 fe -6d d3 75 19 ab 98 59 8d 17 9e 17 49 96 59 80 71 -f4 7d 3a 04 55 91 58 d7 be 37 3c f1 aa 53 f0 aa -6e f0 90 39 e5 67 8c 2a 4c 63 90 05 14 c8 c4 f8 -aa ed 5d e1 2a 5f 10 b0 9c 31 1a f8 c0 ff b5 b7 -a2 97 f2 ef c6 3b 8d 6b 05 10 93 1f 0b 98 e4 8b -f5 fc 6e c4 e7 b8 db 1f fa eb 08 c3 8e 02 ad b8 -f0 3a 48 22 9c 99 e9 69 43 1f 61 cb 8c 4d c6 98 -d1 - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -03 b6 64 ee 3b 75 66 72 3f c6 ea f2 8a bb 43 0a -39 80 f1 12 6c 81 de 8a d7 09 ea b3 9a c9 dc d0 -b1 55 0b 37 29 d8 70 68 e9 52 00 9d f5 44 53 4c -1f 50 82 9a 78 f4 59 1e b8 fd 57 14 04 26 a6 bb -04 05 b6 a6 f5 1a 57 d9 26 7b 7b bc 65 33 91 a6 -99 a2 a9 0d ac 8a e2 26 bc c6 0f a8 cd 93 4c 73 -c7 b0 3b 1f 6b 81 81 58 63 18 38 a8 61 2e 6e 6e -a9 2b e2 4f 83 24 fa f5 b1 fd 85 87 22 52 67 ba -6f - -# Prime p: -04 f0 54 8c 96 26 ab 1e bf 12 44 93 47 41 d9 9a -06 22 0e fa 2a 58 56 aa 0e 75 73 0b 2e c9 6a dc -86 be 89 4f a2 80 3b 53 a5 e8 5d 27 6a cb d2 9a -b8 23 f8 0a 73 91 bb 54 a5 05 16 72 fb 04 ee b5 -43 - -# Prime q: -04 83 e0 ae 47 91 55 87 74 3f f3 45 36 2b 55 5d -39 62 d9 8b b6 f1 5f 84 8b 4c 92 b1 77 1c a8 ed -10 7d 8d 3e e6 5e c4 45 17 dd 0f aa 48 1a 38 7e -90 2f 7a 2e 74 7c 26 9e 7e a4 44 80 bc 53 8b 8e -5b - -# p's CRT exponent dP: -03 a8 e8 ae a9 92 0c 1a a3 b2 f0 d8 46 e4 b8 50 -d8 1c a3 06 a5 1c 83 54 4f 94 9f 64 f9 0d cf 3f -8e 26 61 f0 7e 56 12 20 a1 80 38 8f be 27 3e 70 -e2 e5 dc a8 3a 0e 13 48 dd 64 90 c7 31 d6 ec e1 -ab - -# q's CRT exponent dQ: -01 35 bd cd b6 0b f2 19 7c 43 6e d3 4b 32 cd 8b -4f c7 77 78 83 2b a7 67 03 55 1f b2 42 b3 01 69 -95 93 af 77 fd 8f c3 94 a8 52 6a d2 3c c4 1a 03 -80 6b d8 97 fe 4b 0e a6 46 55 8a ad dc c9 9e 8a -25 - -# CRT coefficient qInv: -03 04 c0 3d 9c 73 65 03 a9 84 ab bd 9b a2 23 01 -40 7c 4a 2a b1 dd 85 76 64 81 b6 0d 45 40 11 52 -e6 92 be 14 f4 12 1d 9a a3 fd 6e 0b 4d 1d 3a 97 -35 38 a3 1d 42 ee 6e 1e 5e f6 20 23 1a 2b ba f3 -5f - -# -------------------------------- -# RSASSA-PSS Signature Example 6.1 -# -------------------------------- - -# Message to be signed: -0a 20 b7 74 ad dc 2f a5 12 45 ed 7c b9 da 60 9e -50 ca c6 63 6a 52 54 3f 97 45 8e ed 73 40 f8 d5 -3f fc 64 91 8f 94 90 78 ee 03 ef 60 d4 2b 5f ec -24 60 50 bd 55 05 cd 8c b5 97 ba d3 c4 e7 13 b0 -ef 30 64 4e 76 ad ab b0 de 01 a1 56 1e fb 25 51 -58 c7 4f c8 01 e6 e9 19 e5 81 b4 6f 0f 0d dd 08 -e4 f3 4c 78 10 b5 ed 83 18 f9 1d 7c 8c - -# Salt: -5b 4e a2 ef 62 9c c2 2f 3b 53 8e 01 69 04 b4 7b -1e 40 bf d5 - -# Signature: -04 c0 cf ac ec 04 e5 ba db ec e1 59 a5 a1 10 3f -69 b3 f3 2b a5 93 cb 4c c4 b1 b7 ab 45 59 16 a9 -6a 27 cd 26 78 ea 0f 46 ba 37 f7 fc 9c 86 32 5f -29 73 3b 38 9f 1d 97 f4 3e 72 01 c0 f3 48 fc 45 -fe 42 89 23 35 36 2e ee 01 8b 5b 16 1f 2f 93 93 -03 12 25 c7 13 01 2a 57 6b c8 8e 23 05 24 89 86 -8d 90 10 cb f0 33 ec c5 68 e8 bc 15 2b dc 59 d5 -60 e4 12 91 91 5d 28 56 52 08 e2 2a ee c9 ef 85 -d1 - -# -------------------------------- -# RSASSA-PSS Signature Example 6.2 -# -------------------------------- - -# Message to be signed: -2a af f6 63 1f 62 1c e6 15 76 0a 9e bc e9 4b b3 -33 07 7a d8 64 88 c8 61 d4 b7 6d 29 c1 f4 87 46 -c6 11 ae 1e 03 ce d4 44 5d 7c fa 1f e5 f6 2e 1b -3f 08 45 2b de 3b 6e f8 19 73 ba fb b5 7f 97 bc -ee f8 73 98 53 95 b8 26 05 89 aa 88 cb 7d b5 0a -b4 69 26 2e 55 1b dc d9 a5 6f 27 5a 0a c4 fe 48 -47 00 c3 5f 3d bf 2b 46 9e de 86 47 41 b8 6f a5 -91 72 a3 60 ba 95 a0 2e 13 9b e5 0d df b7 cf 0b -42 fa ea bb fb ba a8 6a 44 97 69 9c 4f 2d fd 5b -08 40 6a f7 e1 41 44 42 7c 25 3e c0 ef a2 0e af -9a 8b e8 cd 49 ce 1f 1b c4 e9 3e 61 9c f2 aa 8e -d4 fb 39 bc 85 90 d0 f7 b9 64 88 f7 31 7a c9 ab -f7 be e4 e3 a0 e7 15 - -# Salt: -83 14 6a 9e 78 27 22 c2 8b 01 4f 98 b4 26 7b da -2a c9 50 4f - -# Signature: -0a 23 14 25 0c f5 2b 6e 4e 90 8d e5 b3 56 46 bc -aa 24 36 1d a8 16 0f b0 f9 25 75 90 ab 3a ce 42 -b0 dc 3e 77 ad 2d b7 c2 03 a2 0b d9 52 fb b5 6b -15 67 04 6e cf aa 93 3d 7b 10 00 c3 de 9f f0 5b -7d 98 9b a4 6f d4 3b c4 c2 d0 a3 98 6b 7f fa 13 -47 1d 37 eb 5b 47 d6 47 07 bd 29 0c fd 6a 9f 39 -3a d0 8e c1 e3 bd 71 bb 57 92 61 50 35 cd af 2d -89 29 ae d3 be 09 83 79 37 7e 77 7c e7 9a aa 47 -73 - -# -------------------------------- -# RSASSA-PSS Signature Example 6.3 -# -------------------------------- - -# Message to be signed: -0f 61 95 d0 4a 6e 6f c7 e2 c9 60 0d bf 84 0c 39 -ea 8d 4d 62 4f d5 35 07 01 6b 0e 26 85 8a 5e 0a -ec d7 ad a5 43 ae 5c 0a b3 a6 25 99 cb a0 a5 4e -6b f4 46 e2 62 f9 89 97 8f 9d df 5e 9a 41 - -# Salt: -a8 7b 8a ed 07 d7 b8 e2 da f1 4d dc a4 ac 68 c4 -d0 aa bf f8 - -# Signature: -08 6d f6 b5 00 09 8c 12 0f 24 ff 84 23 f7 27 d9 -c6 1a 5c 90 07 d3 b6 a3 1c e7 cf 8f 3c be c1 a2 -6b b2 0e 2b d4 a0 46 79 32 99 e0 3e 37 a2 1b 40 -19 4f b0 45 f9 0b 18 bf 20 a4 79 92 cc d7 99 cf -9c 05 9c 29 9c 05 26 85 49 54 aa de 8a 6a d9 d9 -7e c9 1a 11 45 38 3f 42 46 8b 23 1f 4d 72 f2 37 -06 d9 85 3c 3f a4 3c e8 ac e8 bf e7 48 49 87 a1 -ec 6a 16 c8 da f8 1f 7c 8b f4 27 74 70 7a 9d f4 -56 - -# -------------------------------- -# RSASSA-PSS Signature Example 6.4 -# -------------------------------- - -# Message to be signed: -33 7d 25 fe 98 10 eb ca 0d e4 d4 65 8d 3c eb 8e -0f e4 c0 66 ab a3 bc c4 8b 10 5d 3b f7 e0 25 7d -44 fe ce a6 59 6f 4d 0c 59 a0 84 02 83 36 78 f7 -06 20 f9 13 8d fe b7 de d9 05 e4 a6 d5 f0 5c 47 -3d 55 93 66 52 e2 a5 df 43 c0 cf da 7b ac af 30 -87 f4 52 4b 06 cf 42 15 7d 01 53 97 39 f7 fd de -c9 d5 81 25 df 31 a3 2e ab 06 c1 9b 71 f1 d5 bf - -# Salt: -a3 79 32 f8 a7 49 4a 94 2d 6f 76 74 38 e7 24 d6 -d0 c0 ef 18 - -# Signature: -0b 5b 11 ad 54 98 63 ff a9 c5 1a 14 a1 10 6c 2a -72 cc 8b 64 6e 5c 72 62 50 97 86 10 5a 98 47 76 -53 4c a9 b5 4c 1c c6 4b f2 d5 a4 4f d7 e8 a6 9d -b6 99 d5 ea 52 08 7a 47 48 fd 2a bc 1a fe d1 e5 -d6 f7 c8 90 25 53 0b da a2 21 3d 7e 03 0f a5 5d -f6 f3 4b cf 1c e4 6d 2e df 4e 3a e4 f3 b0 18 91 -a0 68 c9 e3 a4 4b bc 43 13 3e da d6 ec b9 f3 54 -00 c4 25 2a 57 62 d6 57 44 b9 9c b9 f4 c5 59 32 -9f - -# -------------------------------- -# RSASSA-PSS Signature Example 6.5 -# -------------------------------- - -# Message to be signed: -84 ec 50 2b 07 2e 82 87 78 9d 8f 92 35 82 9e a3 -b1 87 af d4 d4 c7 85 61 1b da 5f 9e b3 cb 96 71 -7e fa 70 07 22 7f 1c 08 cb cb 97 2e 66 72 35 e0 -fb 7d 43 1a 65 70 32 6d 2e cc e3 5a db 37 3d c7 -53 b3 be 5f 82 9b 89 17 54 93 19 3f ab 16 ba db -41 37 1b 3a ac 0a e6 70 07 6f 24 be f4 20 c1 35 -ad d7 ce e8 d3 5f bc 94 4d 79 fa fb 9e 30 7a 13 -b0 f5 56 cb 65 4a 06 f9 73 ed 22 67 23 30 19 7e -f5 a7 48 bf 82 6a 5d b2 38 3a 25 36 4b 68 6b 93 -72 bb 23 39 ae b1 ac 9e 98 89 32 7d 01 6f 16 70 -77 6d b0 62 01 ad bd ca f8 a5 e3 b7 4e 10 8b 73 - -# Salt: -7b 79 0c 1d 62 f7 b8 4e 94 df 6a f2 89 17 cf 57 -10 18 11 0e - -# Signature: -02 d7 1f a9 b5 3e 46 54 fe fb 7f 08 38 5c f6 b0 -ae 3a 81 79 42 eb f6 6c 35 ac 67 f0 b0 69 95 2a -3c e9 c7 e1 f1 b0 2e 48 0a 95 00 83 6d e5 d6 4c -db 7e cd e0 45 42 f7 a7 99 88 78 7e 24 c2 ba 05 -f5 fd 48 2c 02 3e d5 c3 0e 04 83 9d c4 4b ed 2a -3a 3a 4f ee 01 11 3c 89 1a 47 d3 2e b8 02 5c 28 -cb 05 0b 5c db 57 6c 70 fe 76 ef 52 34 05 c0 84 -17 fa f3 50 b0 37 a4 3c 37 93 39 fc b1 8d 3a 35 -6b - -# -------------------------------- -# RSASSA-PSS Signature Example 6.6 -# -------------------------------- - -# Message to be signed: -99 06 d8 9f 97 a9 fd ed d3 cc d8 24 db 68 73 26 -f3 0f 00 aa 25 a7 fc a2 af cb 3b 0f 86 cd 41 e7 -3f 0e 8f f7 d2 d8 3f 59 e2 8e d3 1a 5a 0d 55 15 -23 37 4d e2 2e 4c 7e 8f f5 68 b3 86 ee 3d c4 11 -63 f1 0b f6 7b b0 06 26 1c 90 82 f9 af 90 bf 1d -90 49 a6 b9 fa e7 1c 7f 84 fb e6 e5 5f 02 78 9d -e7 74 f2 30 f1 15 02 6a 4b 4e 96 c5 5b 04 a9 5d -a3 aa cb b2 ce ce 8f 81 76 4a 1f 1c 99 51 54 11 -08 7c f7 d3 4a ed ed 09 32 c1 83 - -# Salt: -fb be 05 90 25 b6 9b 89 fb 14 ae 22 89 e7 aa af -e6 0c 0f cd - -# Signature: -0a 40 a1 6e 2f e2 b3 8d 1d f9 05 46 16 7c f9 46 -9c 9e 3c 36 81 a3 44 2b 4b 2c 2f 58 1d eb 38 5c -e9 9f c6 18 8b b0 2a 84 1d 56 e7 6d 30 18 91 e2 -45 60 55 0f cc 2a 26 b5 5f 4c cb 26 d8 37 d3 50 -a1 54 bc ac a8 39 2d 98 fa 67 95 9e 97 27 b7 8c -ad 03 26 9f 56 96 8f c5 6b 68 bd 67 99 26 d8 3c -c9 cb 21 55 50 64 5c cd a3 1c 76 0f f3 58 88 94 -3d 2d 8a 1d 35 1e 81 e5 d0 7b 86 18 2e 75 10 81 -ef - -# ============================================= - -# ================================== -# Example 7: A 1030-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -37 c9 da 4a 66 c8 c4 08 b8 da 27 d0 c9 d7 9f 8c -cb 1e af c1 d2 fe 48 74 6d 94 0b 7c 4e f5 de e1 -8a d1 26 47 ce fa a0 c4 b3 18 8b 22 1c 51 53 86 -75 9b 93 f0 20 24 b2 5a b9 24 2f 83 57 d8 f3 fd -49 64 0e e5 e6 43 ea f6 c6 4d ee fa 70 89 72 7c -8f f0 39 93 33 39 15 c6 ef 21 bf 59 75 b6 e5 0d -11 8b 51 00 8e c3 3e 9f 01 a0 a5 45 a1 0a 83 6a -43 dd bc a9 d8 b5 c5 d3 54 80 22 d7 06 4e a2 9a -b3 - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -3b ed 99 90 52 d9 57 bc 06 d6 51 ee f6 e3 a9 80 -94 b1 62 1b d3 8b 54 49 bd 6c 4a ea 3d e7 e0 84 -67 9a 44 84 de d2 5b e0 f0 82 6c f3 37 78 25 41 -4b 14 d4 d6 1d b1 4d e6 26 fb b8 0e 5f 4f ae c9 -56 f9 a0 a2 d2 4f 99 57 63 80 f0 84 eb 62 e4 6a -57 d5 54 27 8b 53 56 26 19 3c e0 20 60 57 5e b6 -6c 57 98 d3 6f 6c 5d 40 fb 00 d8 09 b4 2a 73 10 -2c 1c 74 ee 95 bd 71 42 0f ff ef 63 18 b5 2c 29 - -# Prime p: -07 ee fb 42 4b 0e 3a 40 e4 20 8e e5 af b2 80 b2 -23 17 30 81 14 dd e0 b4 b6 4f 73 01 84 ec 68 da -6c e2 86 7a 9f 48 ed 77 26 d5 e2 61 4e d0 4a 54 -10 73 6c 8c 71 4e e7 02 47 42 98 c6 29 2a f0 75 -35 - -# Prime q: -07 08 30 db f9 47 ea c0 22 8d e2 63 14 b5 9b 66 -99 4c c6 0e 83 60 e7 5d 38 76 29 8f 8f 8a 7d 14 -1d a0 64 e5 ca 02 6a 97 3e 28 f2 54 73 8c ee 66 -9c 72 1b 03 4c b5 f8 e2 44 da dd 7c d1 e1 59 d5 -47 - -# p's CRT exponent dP: -05 24 d2 0c 3d 95 cf f7 5a f2 31 34 83 22 7d 87 -02 71 7a a5 76 de 15 5f 96 05 15 50 1a db 1d 70 -e1 c0 4d e9 1b 75 b1 61 db f0 39 83 56 12 7e de -da 7b bc 19 a3 2d c1 62 1c c9 f5 3c 26 5d 0c e3 -31 - -# q's CRT exponent dQ: -05 f9 84 a1 f2 3c 93 8d 6a 0e 89 72 4b cf 3d d9 -3f 99 46 92 60 37 fe 7c 6b 13 a2 9e 52 84 85 5f -89 08 95 91 d4 40 97 56 27 bf 5c 9e 3a 8b 5c a7 -9c 77 2a d2 73 e4 0d 32 1a f4 a6 c9 7d fd ed 78 -d3 - -# CRT coefficient qInv: -dd d9 18 ad ad a2 9d ca b9 81 ff 9a cb a4 25 70 -23 c0 9a 38 01 cc ce 09 8c e2 68 f8 55 d0 df 57 -0c d6 e7 b9 b1 4b d9 a5 a9 25 4c bc 31 5b e6 f8 -ba 1e 25 46 dd d5 69 c5 ea 19 ee d8 35 3b de 5e - -# -------------------------------- -# RSASSA-PSS Signature Example 7.1 -# -------------------------------- - -# Message to be signed: -9e ad 0e 01 94 56 40 67 4e b4 1c ad 43 5e 23 74 -ea ef a8 ad 71 97 d9 79 13 c4 49 57 d8 d8 3f 40 -d7 6e e6 0e 39 bf 9c 0f 9e af 30 21 42 1a 07 4d -1a de 96 2c 6e 9d 3d c3 bb 17 4f e4 df e6 52 b0 -91 15 49 5b 8f d2 79 41 74 02 0a 06 02 b5 ca 51 -84 8c fc 96 ce 5e b5 7f c0 a2 ad c1 dd a3 6a 7c -c4 52 64 1a 14 91 1b 37 e4 5b fa 11 da a5 c7 ec -db 74 f6 d0 10 0d 1d 3e 39 e7 52 80 0e 20 33 97 -de 02 33 07 7b 9a 88 85 55 37 fa e9 27 f9 24 38 -0d 78 0f 98 e1 8d cf f3 9c 5e a7 41 b1 7d 6f dd -18 85 bc 9d 58 14 82 d7 71 ce b5 62 d7 8a 8b f8 -8f 0c 75 b1 13 63 e5 e3 6c d4 79 ce b0 54 5f 9d -a8 42 03 e0 e6 e5 08 37 5c c9 e8 44 b8 8b 7a c7 -a0 a2 01 ea 0f 1b ee 9a 2c 57 79 20 ca 02 c0 1b -9d 83 20 e9 74 a5 6f 4e fb 57 63 b9 62 55 ab bf -80 37 bf 18 02 cf 01 8f 56 37 94 93 e5 69 a9 - -# Salt: -b7 86 7a 59 95 8c b5 43 28 f8 77 5e 65 46 ec 06 -d2 7e aa 50 - -# Signature: -18 7f 39 07 23 c8 90 25 91 f0 15 4b ae 6d 4e cb -ff e0 67 f0 e8 b7 95 47 6e a4 f4 d5 1c cc 81 05 -20 bb 3c a9 bc a7 d0 b1 f2 ea 8a 17 d8 73 fa 27 -57 0a cd 64 2e 38 08 56 1c b9 e9 75 cc fd 80 b2 -3d c5 77 1c db 33 06 a5 f2 31 59 da cb d3 aa 2d -b9 3d 46 d7 66 e0 9e d1 5d 90 0a d8 97 a8 d2 74 -dc 26 b4 7e 99 4a 27 e9 7e 22 68 a7 66 53 3a e4 -b5 e4 2a 2f ca f7 55 c1 c4 79 4b 29 4c 60 55 58 -23 - -# -------------------------------- -# RSASSA-PSS Signature Example 7.2 -# -------------------------------- - -# Message to be signed: -8d 80 d2 d0 8d bd 19 c1 54 df 3f 14 67 3a 14 bd -03 73 52 31 f2 4e 86 bf 15 3d 0e 69 e7 4c bf f7 -b1 83 6e 66 4d e8 3f 68 01 24 37 0f c0 f9 6c 9b -65 c0 7a 36 6b 64 4c 4a b3 - -# Salt: -0c 09 58 22 66 df 08 63 10 82 1b a7 e1 8d f6 4d -fe e6 de 09 - -# Signature: -10 fd 89 76 8a 60 a6 77 88 ab b5 85 6a 78 7c 85 -61 f3 ed cf 9a 83 e8 98 f7 dc 87 ab 8c ce 79 42 -9b 43 e5 69 06 94 1a 88 61 94 f1 37 e5 91 fe 7c -33 95 55 36 1f bb e1 f2 4f eb 2d 4b cd b8 06 01 -f3 09 6b c9 13 2d ee a6 0a e1 30 82 f4 4f 9a d4 -1c d6 28 93 6a 4d 51 17 6e 42 fc 59 cb 76 db 81 -5c e5 ab 4d b9 9a 10 4a af ea 68 f5 d3 30 32 9e -bf 25 8d 4e de 16 06 4b d1 d0 03 93 d5 e1 57 0e -b8 - -# -------------------------------- -# RSASSA-PSS Signature Example 7.3 -# -------------------------------- - -# Message to be signed: -80 84 05 cd fc 1a 58 b9 bb 03 97 c7 20 72 2a 81 -ff fb 76 27 8f 33 59 17 ef 9c 47 38 14 b3 e0 16 -ba 29 73 cd 27 65 f8 f3 f8 2d 6c c3 8a a7 f8 55 -18 27 fe 8d 1e 38 84 b7 e6 1c 94 68 3b 8f 82 f1 -84 3b da e2 25 7e ee c9 81 2a d4 c2 cf 28 3c 34 -e0 b0 ae 0f e3 cb 99 0c f8 8f 2e f9 - -# Salt: -28 03 9d cf e1 06 d3 b8 29 66 11 25 8c 4a 56 65 -1c 9e 92 dd - -# Signature: -2b 31 fd e9 98 59 b9 77 aa 09 58 6d 8e 27 46 62 -b2 5a 2a 64 06 40 b4 57 f5 94 05 1c b1 e7 f7 a9 -11 86 54 55 24 29 26 cf 88 fe 80 df a3 a7 5b a9 -68 98 44 a1 1e 63 4a 82 b0 75 af bd 69 c1 2a 0d -f9 d2 5f 84 ad 49 45 df 3d c8 fe 90 c3 ce fd f2 -6e 95 f0 53 43 04 b5 bd ba 20 d3 e5 64 0a 2e bf -b8 98 aa c3 5a e4 0f 26 fc e5 56 3c 2f 9f 24 f3 -04 2a f7 6f 3c 70 72 d6 87 bb fb 95 9a 88 46 0a -f1 - -# -------------------------------- -# RSASSA-PSS Signature Example 7.4 -# -------------------------------- - -# Message to be signed: -f3 37 b9 ba d9 37 de 22 a1 a0 52 df f1 11 34 a8 -ce 26 97 62 02 98 19 39 b9 1e 07 15 ae 5e 60 96 -49 da 1a df ce f3 f4 cc a5 9b 23 83 60 e7 d1 e4 -96 c7 bf 4b 20 4b 5a cf f9 bb d6 16 6a 1d 87 a3 -6e f2 24 73 73 75 10 39 f8 a8 00 b8 39 98 07 b3 -a8 5f 44 89 34 97 c0 d0 5f b7 01 7b 82 22 81 52 -de 6f 25 e6 11 6d cc 75 03 c7 86 c8 75 c2 8f 3a -a6 07 e9 4a b0 f1 98 63 ab 1b 50 73 77 0b 0c d5 -f5 33 ac de 30 c6 fb 95 3c f3 da 68 02 64 e3 0f -c1 1b ff 9a 19 bf fa b4 77 9b 62 23 c3 fb 3f e0 -f7 1a ba de 4e b7 c0 9c 41 e2 4c 22 d2 3f a1 48 -e6 a1 73 fe b6 39 84 d1 bc 6e e3 a0 2d 91 5b 75 -2c ea f9 2a 30 15 ec eb 38 ca 58 6c 68 01 b3 7c -34 ce fb 2c ff 25 ea 23 c0 86 62 dc ab 26 a7 a9 -3a 28 5d 05 d3 04 4c - -# Salt: -a7 78 21 eb bb ef 24 62 8e 4e 12 e1 d0 ea 96 de -39 8f 7b 0f - -# Signature: -32 c7 ca 38 ff 26 94 9a 15 00 0c 4b a0 4b 2b 13 -b3 5a 38 10 e5 68 18 4d 7e ca ba a1 66 b7 ff ab -dd f2 b6 cf 4b a0 71 24 92 37 90 f2 e5 b1 a5 be -04 0a ea 36 fe 13 2e c1 30 e1 f1 05 67 98 2d 17 -ac 3e 89 b8 d2 6c 30 94 03 4e 76 2d 2e 03 12 64 -f0 11 70 be ec b3 d1 43 9e 05 84 6f 25 45 83 67 -a7 d9 c0 20 60 44 46 72 67 1e 64 e8 77 86 45 59 -ca 19 b2 07 4d 58 8a 28 1b 58 04 d2 37 72 fb be -19 - -# -------------------------------- -# RSASSA-PSS Signature Example 7.5 -# -------------------------------- - -# Message to be signed: -45 01 3c eb af d9 60 b2 55 47 6a 8e 25 98 b9 aa -32 ef be 6d c1 f3 4f 4a 49 8d 8c f5 a2 b4 54 8d -08 c5 5d 5f 95 f7 bc c9 61 91 63 05 6f 2d 58 b5 -2f a0 32 - -# Salt: -9d 5a d8 eb 45 21 34 b6 5d c3 a9 8b 6a 73 b5 f7 -41 60 9c d6 - -# Signature: -07 eb 65 1d 75 f1 b5 2b c2 63 b2 e1 98 33 6e 99 -fb eb c4 f3 32 04 9a 92 2a 10 81 56 07 ee 2d 98 -9d b3 a4 49 5b 7d cc d3 8f 58 a2 11 fb 7e 19 31 -71 a3 d8 91 13 24 37 eb ca 44 f3 18 b2 80 50 9e -52 b5 fa 98 fc ce 82 05 d9 69 7c 8e e4 b7 ff 59 -d4 c5 9c 79 03 8a 19 70 bd 2a 0d 45 1e cd c5 ef -11 d9 97 9c 9d 35 f8 c7 0a 61 63 71 76 07 89 0d -58 6a 7c 6d c0 1c 79 f8 6a 8f 28 e8 52 35 f8 c2 -f1 - -# -------------------------------- -# RSASSA-PSS Signature Example 7.6 -# -------------------------------- - -# Message to be signed: -23 58 09 70 86 c8 99 32 3e 75 d9 c9 0d 0c 09 f1 -2d 9d 54 ed fb df 70 a9 c2 eb 5a 04 d8 f3 6b 9b -2b df 2a ab e0 a5 bd a1 96 89 37 f9 d6 eb d3 b6 -b2 57 ef b3 13 6d 41 31 f9 ac b5 9b 85 e2 60 2c -2a 3f cd c8 35 49 4a 1f 4e 5e c1 8b 22 6c 80 23 -2b 36 a7 5a 45 fd f0 9a 7e a9 e9 8e fb de 14 50 -d1 19 4b f1 2e 15 a4 c5 f9 eb 5c 0b ce 52 69 e0 -c3 b2 8c fa b6 55 d8 1a 61 a2 0b 4b e2 f5 44 59 -bb 25 a0 db 94 c5 22 18 be 10 9a 74 26 de 83 01 -44 24 78 9a aa 90 e5 05 6e 63 2a 69 81 15 e2 82 -c1 a5 64 10 f2 6c 20 72 f1 93 48 1a 9d cd 88 05 -72 00 5e 64 f4 08 2e cf - -# Salt: -3f 2e fc 59 58 80 a7 d4 7f cf 3c ba 04 98 3e a5 -4c 4b 73 fb - -# Signature: -18 da 3c dc fe 79 bf b7 7f d9 c3 2f 37 7a d3 99 -14 6f 0a 8e 81 06 20 23 32 71 a6 e3 ed 32 48 90 -3f 5c dc 92 dc 79 b5 5d 3e 11 61 5a a0 56 a7 95 -85 37 92 a3 99 8c 34 9c a5 c4 57 e8 ca 7d 29 d7 -96 aa 24 f8 34 91 70 9b ef cf b1 51 0e a5 13 c9 -28 29 a3 f0 0b 10 4f 65 56 34 f3 20 75 2e 13 0e -c0 cc f6 75 4f f8 93 db 30 29 32 bb 02 5e b6 0e -87 82 25 98 fc 61 9e 0e 98 17 37 a9 a4 c4 15 2d -33 - -# ============================================= - -# ================================== -# Example 8: A 1031-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -49 53 70 a1 fb 18 54 3c 16 d3 63 1e 31 63 25 5d -f6 2b e6 ee e8 90 d5 f2 55 09 e4 f7 78 a8 ea 6f -bb bc df 85 df f6 4e 0d 97 20 03 ab 36 81 fb ba -6d d4 1f d5 41 82 9b 2e 58 2d e9 f2 a4 a4 e0 a2 -d0 90 0b ef 47 53 db 3c ee 0e e0 6c 7d fa e8 b1 -d5 3b 59 53 21 8f 9c ce ea 69 5b 08 66 8e de aa -dc ed 94 63 b1 d7 90 d5 eb f2 7e 91 15 b4 6c ad -4d 9a 2b 8e fa b0 56 1b 08 10 34 47 39 ad a0 73 -3f - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -6c 66 ff e9 89 80 c3 8f cd ea b5 15 98 98 83 61 -65 f4 b4 b8 17 c4 f6 a8 d4 86 ee 4e a9 13 0f e9 -b9 09 2b d1 36 d1 84 f9 5f 50 4a 60 7e ac 56 58 -46 d2 fd d6 59 7a 89 67 c7 39 6e f9 5a 6e ee bb -45 78 a6 43 96 6d ca 4d 8e e3 de 84 2d e6 32 79 -c6 18 15 9c 1a b5 4a 89 43 7b 6a 61 20 e4 93 0a -fb 52 a4 ba 6c ed 8a 49 47 ac 64 b3 0a 34 97 cb -e7 01 c2 d6 26 6d 51 72 19 ad 0e c6 d3 47 db e9 - -# Prime p: -08 da d7 f1 13 63 fa a6 23 d5 d6 d5 e8 a3 19 32 -8d 82 19 0d 71 27 d2 84 6c 43 9b 0a b7 26 19 b0 -a4 3a 95 32 0e 4e c3 4f c3 a9 ce a8 76 42 23 05 -bd 76 c5 ba 7b e9 e2 f4 10 c8 06 06 45 a1 d2 9e -db - -# Prime q: -08 47 e7 32 37 6f c7 90 0f 89 8e a8 2e b2 b0 fc -41 85 65 fd ae 62 f7 d9 ec 4c e2 21 7b 97 99 0d -d2 72 db 15 7f 99 f6 3c 0d cb b9 fb ac db d4 c4 -da db 6d f6 77 56 35 8c a4 17 48 25 b4 8f 49 70 -6d - -# p's CRT exponent dP: -05 c2 a8 3c 12 4b 36 21 a2 aa 57 ea 2c 3e fe 03 -5e ff 45 60 f3 3d de bb 7a da b8 1f ce 69 a0 c8 -c2 ed c1 65 20 dd a8 3d 59 a2 3b e8 67 96 3a c6 -5f 2c c7 10 bb cf b9 6e e1 03 de b7 71 d1 05 fd -85 - -# q's CRT exponent dQ: -04 ca e8 aa 0d 9f aa 16 5c 87 b6 82 ec 14 0b 8e -d3 b5 0b 24 59 4b 7a 3b 2c 22 0b 36 69 bb 81 9f -98 4f 55 31 0a 1a e7 82 36 51 d4 a0 2e 99 44 79 -72 59 51 39 36 34 34 e5 e3 0a 7e 7d 24 15 51 e1 -b9 - -# CRT coefficient qInv: -07 d3 e4 7b f6 86 60 0b 11 ac 28 3c e8 8d bb 3f -60 51 e8 ef d0 46 80 e4 4c 17 1e f5 31 b8 0b 2b -7c 39 fc 76 63 20 e2 cf 15 d8 d9 98 20 e9 6f f3 -0d c6 96 91 83 9c 4b 40 d7 b0 6e 45 30 7d c9 1f -3f - -# -------------------------------- -# RSASSA-PSS Signature Example 8.1 -# -------------------------------- - -# Message to be signed: -81 33 2f 4b e6 29 48 41 5e a1 d8 99 79 2e ea cf -6c 6e 1d b1 da 8b e1 3b 5c ea 41 db 2f ed 46 70 -92 e1 ff 39 89 14 c7 14 25 97 75 f5 95 f8 54 7f -73 56 92 a5 75 e6 92 3a f7 8f 22 c6 99 7d db 90 -fb 6f 72 d7 bb 0d d5 74 4a 31 de cd 3d c3 68 58 -49 83 6e d3 4a ec 59 63 04 ad 11 84 3c 4f 88 48 -9f 20 97 35 f5 fb 7f da f7 ce c8 ad dc 58 18 16 -8f 88 0a cb f4 90 d5 10 05 b7 a8 e8 4e 43 e5 42 -87 97 75 71 dd 99 ee a4 b1 61 eb 2d f1 f5 10 8f -12 a4 14 2a 83 32 2e db 05 a7 54 87 a3 43 5c 9a -78 ce 53 ed 93 bc 55 08 57 d7 a9 fb - -# Salt: -1d 65 49 1d 79 c8 64 b3 73 00 9b e6 f6 f2 46 7b -ac 4c 78 fa - -# Signature: -02 62 ac 25 4b fa 77 f3 c1 ac a2 2c 51 79 f8 f0 -40 42 2b 3c 5b af d4 0a 8f 21 cf 0f a5 a6 67 cc -d5 99 3d 42 db af b4 09 c5 20 e2 5f ce 2b 1e e1 -e7 16 57 7f 1e fa 17 f3 da 28 05 2f 40 f0 41 9b -23 10 6d 78 45 aa f0 11 25 b6 98 e7 a4 df e9 2d -39 67 bb 00 c4 d0 d3 5b a3 55 2a b9 a8 b3 ee f0 -7c 7f ec db c5 42 4a c4 db 1e 20 cb 37 d0 b2 74 -47 69 94 0e a9 07 e1 7f bb ca 67 3b 20 52 23 80 -c5 - -# -------------------------------- -# RSASSA-PSS Signature Example 8.2 -# -------------------------------- - -# Message to be signed: -e2 f9 6e af 0e 05 e7 ba 32 6e cc a0 ba 7f d2 f7 -c0 23 56 f3 ce de 9d 0f aa bf 4f cc 8e 60 a9 73 -e5 59 5f d9 ea 08 - -# Salt: -43 5c 09 8a a9 90 9e b2 37 7f 12 48 b0 91 b6 89 -87 ff 18 38 - -# Signature: -27 07 b9 ad 51 15 c5 8c 94 e9 32 e8 ec 0a 28 0f -56 33 9e 44 a1 b5 8d 4d dc ff 2f 31 2e 5f 34 dc -fe 39 e8 9c 6a 94 dc ee 86 db bd ae 5b 79 ba 4e -08 19 a9 e7 bf d9 d9 82 e7 ee 6c 86 ee 68 39 6e -8b 3a 14 c9 c8 f3 4b 17 8e b7 41 f9 d3 f1 21 10 -9b f5 c8 17 2f ad a2 e7 68 f9 ea 14 33 03 2c 00 -4a 8a a0 7e b9 90 00 0a 48 dc 94 c8 ba c8 aa be -2b 09 b1 aa 46 c0 a2 aa 0e 12 f6 3f bb a7 75 ba -7e - -# -------------------------------- -# RSASSA-PSS Signature Example 8.3 -# -------------------------------- - -# Message to be signed: -e3 5c 6e d9 8f 64 a6 d5 a6 48 fc ab 8a db 16 33 -1d b3 2e 5d 15 c7 4a 40 ed f9 4c 3d c4 a4 de 79 -2d 19 08 89 f2 0f 1e 24 ed 12 05 4a 6b 28 79 8f -cb 42 d1 c5 48 76 9b 73 4c 96 37 31 42 09 2a ed -27 76 03 f4 73 8d f4 dc 14 46 58 6d 0e c6 4d a4 -fb 60 53 6d b2 ae 17 fc 7e 3c 04 bb fb bb d9 07 -bf 11 7c 08 63 6f a1 6f 95 f5 1a 62 16 93 4d 3e -34 f8 50 30 f1 7b bb c5 ba 69 14 40 58 af f0 81 -e0 b1 9c f0 3c 17 19 5c 5e 88 8b a5 8f 6f e0 a0 -2e 5c 3b da 97 19 a7 - -# Salt: -c6 eb be 76 df 0c 4a ea 32 c4 74 17 5b 2f 13 68 -62 d0 45 29 - -# Signature: -2a d2 05 09 d7 8c f2 6d 1b 6c 40 61 46 08 6e 4b -0c 91 a9 1c 2b d1 64 c8 7b 96 6b 8f aa 42 aa 0c -a4 46 02 23 23 ba 4b 1a 1b 89 70 6d 7f 4c 3b e5 -7d 7b 69 70 2d 16 8a b5 95 5e e2 90 35 6b 8c 4a -29 ed 46 7d 54 7e c2 3c ba df 28 6c cb 58 63 c6 -67 9d a4 67 fc 93 24 a1 51 c7 ec 55 aa c6 db 40 -84 f8 27 26 82 5c fe 1a a4 21 bc 64 04 9f b4 2f -23 14 8f 9c 25 b2 dc 30 04 37 c3 8d 42 8a a7 5f -96 - -# -------------------------------- -# RSASSA-PSS Signature Example 8.4 -# -------------------------------- - -# Message to be signed: -db c5 f7 50 a7 a1 4b e2 b9 3e 83 8d 18 d1 4a 86 -95 e5 2e 8a dd 9c 0a c7 33 b8 f5 6d 27 47 e5 29 -a0 cc a5 32 dd 49 b9 02 ae fe d5 14 44 7f 9e 81 -d1 61 95 c2 85 38 68 cb 9b 30 f7 d0 d4 95 c6 9d -01 b5 c5 d5 0b 27 04 5d b3 86 6c 23 24 a4 4a 11 -0b 17 17 74 6d e4 57 d1 c8 c4 5c 3c d2 a9 29 70 -c3 d5 96 32 05 5d 4c 98 a4 1d 6e 99 e2 a3 dd d5 -f7 f9 97 9a b3 cd 18 f3 75 05 d2 51 41 de 2a 1b -ff 17 b3 a7 dc e9 41 9e cc 38 5c f1 1d 72 84 0f -19 95 3f d0 50 92 51 f6 ca fd e2 89 3d 0e 75 c7 -81 ba 7a 50 12 ca 40 1a 4f a9 9e 04 b3 c3 24 9f -92 6d 5a fe 82 cc 87 da b2 2c 3c 1b 10 5d e4 8e -34 ac e9 c9 12 4e 59 59 7a c7 eb f8 - -# Salt: -02 1f dc c6 eb b5 e1 9b 1c b1 6e 9c 67 f2 76 81 -65 7f e2 0a - -# Signature: -1e 24 e6 e5 86 28 e5 17 50 44 a9 eb 6d 83 7d 48 -af 12 60 b0 52 0e 87 32 7d e7 89 7e e4 d5 b9 f0 -df 0b e3 e0 9e d4 de a8 c1 45 4f f3 42 3b b0 8e -17 93 24 5a 9d f8 bf 6a b3 96 8c 8e dd c3 b5 32 -85 71 c7 7f 09 1c c5 78 57 69 12 df eb d1 64 b9 -de 54 54 fe 0b e1 c1 f6 38 5b 32 83 60 ce 67 ec -7a 05 f6 e3 0e b4 5c 17 c4 8a c7 00 41 d2 ca b6 -7f 0a 2a e7 aa fd cc 8d 24 5e a3 44 2a 63 00 cc -c7 - -# -------------------------------- -# RSASSA-PSS Signature Example 8.5 -# -------------------------------- - -# Message to be signed: -04 dc 25 1b e7 2e 88 e5 72 34 85 b6 38 3a 63 7e -2f ef e0 76 60 c5 19 a5 60 b8 bc 18 bd ed b8 6e -ae 23 64 ea 53 ba 9d ca 6e b3 d2 e7 d6 b8 06 af -42 b3 e8 7f 29 1b 4a 88 81 d5 bf 57 2c c9 a8 5e -19 c8 6a cb 28 f0 98 f9 da 03 83 c5 66 d3 c0 f5 -8c fd 8f 39 5d cf 60 2e 5c d4 0e 8c 71 83 f7 14 -99 6e 22 97 ef - -# Salt: -c5 58 d7 16 7c bb 45 08 ad a0 42 97 1e 71 b1 37 -7e ea 42 69 - -# Signature: -33 34 1b a3 57 6a 13 0a 50 e2 a5 cf 86 79 22 43 -88 d5 69 3f 5a cc c2 35 ac 95 ad d6 8e 5e b1 ee -c3 16 66 d0 ca 7a 1c da 6f 70 a1 aa 76 2c 05 75 -2a 51 95 0c db 8a f3 c5 37 9f 18 cf e6 b5 bc 55 -a4 64 82 26 a1 5e 91 2e f1 9a d7 7a de ea 91 1d -67 cf ef d6 9b a4 3f a4 11 91 35 ff 64 21 17 ba -98 5a 7e 01 00 32 5e 95 19 f1 ca 6a 92 16 bd a0 -55 b5 78 50 15 29 11 25 e9 0d cd 07 a2 ca 96 73 -ee - -# -------------------------------- -# RSASSA-PSS Signature Example 8.6 -# -------------------------------- - -# Message to be signed: -0e a3 7d f9 a6 fe a4 a8 b6 10 37 3c 24 cf 39 0c -20 fa 6e 21 35 c4 00 c8 a3 4f 5c 18 3a 7e 8e a4 -c9 ae 09 0e d3 17 59 f4 2d c7 77 19 cc a4 00 ec -dc c5 17 ac fc 7a c6 90 26 75 b2 ef 30 c5 09 66 -5f 33 21 48 2f c6 9a 9f b5 70 d1 5e 01 c8 45 d0 -d8 e5 0d 2a 24 cb f1 cf 0e 71 49 75 a5 db 7b 18 -d9 e9 e9 cb 91 b5 cb 16 86 90 60 ed 18 b7 b5 62 -45 50 3f 0c af 90 35 2b 8d e8 1c b5 a1 d9 c6 33 -60 92 f0 cd - -# Salt: -76 fd 4e 64 fd c9 8e b9 27 a0 40 3e 35 a0 84 e7 -6b a9 f9 2a - -# Signature: -1e d1 d8 48 fb 1e db 44 12 9b d9 b3 54 79 5a f9 -7a 06 9a 7a 00 d0 15 10 48 59 3e 0c 72 c3 51 7f -f9 ff 2a 41 d0 cb 5a 0a c8 60 d7 36 a1 99 70 4f -7c b6 a5 39 86 a8 8b bd 8a bc c0 07 6a 2c e8 47 -88 00 31 52 5d 44 9d a2 ac 78 35 63 74 c5 36 e3 -43 fa a7 cb a4 2a 5a aa 65 06 08 77 91 c0 6a 8e -98 93 35 ae d1 9b fa b2 d5 e6 7e 27 fb 0c 28 75 -af 89 6c 21 b6 e8 e7 30 9d 04 e4 f6 72 7e 69 46 -3e - -# ============================================= - -# ================================== -# Example 9: A 1536-bit RSA Key Pair -# ================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -e6 bd 69 2a c9 66 45 79 04 03 fd d0 f5 be b8 b9 -bf 92 ed 10 00 7f c3 65 04 64 19 dd 06 c0 5c 5b -5b 2f 48 ec f9 89 e4 ce 26 91 09 97 9c bb 40 b4 -a0 ad 24 d2 24 83 d1 ee 31 5a d4 cc b1 53 42 68 -35 26 91 c5 24 f6 dd 8e 6c 29 d2 24 cf 24 69 73 -ae c8 6c 5b f6 b1 40 1a 85 0d 1b 9a d1 bb 8c bc -ec 47 b0 6f 0f 8c 7f 45 d3 fc 8f 31 92 99 c5 43 -3d db c2 b3 05 3b 47 de d2 ec d4 a4 ca ef d6 14 -83 3d c8 bb 62 2f 31 7e d0 76 b8 05 7f e8 de 3f -84 48 0a d5 e8 3e 4a 61 90 4a 4f 24 8f b3 97 02 -73 57 e1 d3 0e 46 31 39 81 5c 6f d4 fd 5a c5 b8 -17 2a 45 23 0e cb 63 18 a0 4f 14 55 d8 4e 5a 8b - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -6a 7f d8 4f b8 5f ad 07 3b 34 40 6d b7 4f 8d 61 -a6 ab c1 21 96 a9 61 dd 79 56 5e 9d a6 e5 18 7b -ce 2d 98 02 50 f7 35 95 75 35 92 70 d9 15 90 bb -0e 42 7c 71 46 0b 55 d5 14 10 b1 91 bc f3 09 fe -a1 31 a9 2c 8e 70 27 38 fa 71 9f 1e 00 41 f5 2e -40 e9 1f 22 9f 4d 96 a1 e6 f1 72 e1 55 96 b4 51 -0a 6d ae c2 61 05 f2 be bc 53 31 6b 87 bd f2 13 -11 66 60 70 e8 df ee 69 d5 2c 71 a9 76 ca ae 79 -c7 2b 68 d2 85 80 dc 68 6d 9f 51 29 d2 25 f8 2b -3d 61 55 13 a8 82 b3 db 91 41 6b 48 ce 08 88 82 -13 e3 7e eb 9a f8 00 d8 1c ab 32 8c e4 20 68 99 -03 c0 0c 7b 5f d3 1b 75 50 3a 6d 41 96 84 d6 29 - -# Prime p: -f8 eb 97 e9 8d f1 26 64 ee fd b7 61 59 6a 69 dd -cd 0e 76 da ec e6 ed 4b f5 a1 b5 0a c0 86 f7 92 -8a 4d 2f 87 26 a7 7e 51 5b 74 da 41 98 8f 22 0b -1c c8 7a a1 fc 81 0c e9 9a 82 f2 d1 ce 82 1e dc -ed 79 4c 69 41 f4 2c 7a 1a 0b 8c 4d 28 c7 5e c6 -0b 65 22 79 f6 15 4a 76 2a ed 16 5d 47 de e3 67 - -# Prime q: -ed 4d 71 d0 a6 e2 4b 93 c2 e5 f6 b4 bb e0 5f 5f -b0 af a0 42 d2 04 fe 33 78 d3 65 c2 f2 88 b6 a8 -da d7 ef e4 5d 15 3e ef 40 ca cc 7b 81 ff 93 40 -02 d1 08 99 4b 94 a5 e4 72 8c d9 c9 63 37 5a e4 -99 65 bd a5 5c bf 0e fe d8 d6 55 3b 40 27 f2 d8 -62 08 a6 e6 b4 89 c1 76 12 80 92 d6 29 e4 9d 3d - -# p's CRT exponent dP: -2b b6 8b dd fb 0c 4f 56 c8 55 8b ff af 89 2d 80 -43 03 78 41 e7 fa 81 cf a6 1a 38 c5 e3 9b 90 1c -8e e7 11 22 a5 da 22 27 bd 6c de eb 48 14 52 c1 -2a d3 d6 1d 5e 4f 77 6a 0a b5 56 59 1b ef e3 e5 -9e 5a 7f dd b8 34 5e 1f 2f 35 b9 f4 ce e5 7c 32 -41 4c 08 6a ec 99 3e 93 53 e4 80 d9 ee c6 28 9f - -# q's CRT exponent dQ: -4f f8 97 70 9f ad 07 97 46 49 45 78 e7 0f d8 54 -61 30 ee ab 56 27 c4 9b 08 0f 05 ee 4a d9 f3 e4 -b7 cb a9 d6 a5 df f1 13 a4 1c 34 09 33 68 33 f1 -90 81 6d 8a 6b c4 2e 9b ec 56 b7 56 7d 0f 3c 9c -69 6d b6 19 b2 45 d9 01 dd 85 6d b7 c8 09 2e 77 -e9 a1 cc cd 56 ee 4d ba 42 c5 fd b6 1a ec 26 69 - -# CRT coefficient qInv: -77 b9 d1 13 7b 50 40 4a 98 27 29 31 6e fa fc 7d -fe 66 d3 4e 5a 18 26 00 d5 f3 0a 0a 85 12 05 1c -56 0d 08 1d 4d 0a 18 35 ec 3d 25 a6 0f 4e 4d 6a -a9 48 b2 bf 3d bb 5b 12 4c bb c3 48 92 55 a3 a9 -48 37 2f 69 78 49 67 45 f9 43 e1 db 4f 18 38 2c -ea a5 05 df c6 57 57 bb 3f 85 7a 58 dc e5 21 56 - -# -------------------------------- -# RSASSA-PSS Signature Example 9.1 -# -------------------------------- - -# Message to be signed: -a8 8e 26 58 55 e9 d7 ca 36 c6 87 95 f0 b3 1b 59 -1c d6 58 7c 71 d0 60 a0 b3 f7 f3 ea ef 43 79 59 -22 02 8b c2 b6 ad 46 7c fc 2d 7f 65 9c 53 85 aa -70 ba 36 72 cd de 4c fe 49 70 cc 79 04 60 1b 27 -88 72 bf 51 32 1c 4a 97 2f 3c 95 57 0f 34 45 d4 -f5 79 80 e0 f2 0d f5 48 46 e6 a5 2c 66 8f 12 88 -c0 3f 95 00 6e a3 2f 56 2d 40 d5 2a f9 fe b3 2f -0f a0 6d b6 5b 58 8a 23 7b 34 e5 92 d5 5c f9 79 -f9 03 a6 42 ef 64 d2 ed 54 2a a8 c7 7d c1 dd 76 -2f 45 a5 93 03 ed 75 e5 41 ca 27 1e 2b 60 ca 70 -9e 44 fa 06 61 13 1e 8d 5d 41 63 fd 8d 39 85 66 -ce 26 de 87 30 e7 2f 9c ca 73 76 41 c2 44 15 94 -20 63 70 28 df 0a 18 07 9d 62 08 ea 8b 47 11 a2 -c7 50 f5 - -# Salt: -c0 a4 25 31 3d f8 d7 56 4b d2 43 4d 31 15 23 d5 -25 7e ed 80 - -# Signature: -58 61 07 22 6c 3c e0 13 a7 c8 f0 4d 1a 6a 29 59 -bb 4b 8e 20 5b a4 3a 27 b5 0f 12 41 11 bc 35 ef -58 9b 03 9f 59 32 18 7c b6 96 d7 d9 a3 2c 0c 38 -30 0a 5c dd a4 83 4b 62 d2 eb 24 0a f3 3f 79 d1 -3d fb f0 95 bf 59 9e 0d 96 86 94 8c 19 64 74 7b -67 e8 9c 9a ba 5c d8 50 16 23 6f 56 6c c5 80 2c -b1 3e ad 51 bc 7c a6 be f3 b9 4d cb db b1 d5 70 -46 97 71 df 0e 00 b1 a8 a0 67 77 47 2d 23 16 27 -9e da e8 64 74 66 8d 4e 1e ff f9 5f 1d e6 1c 60 -20 da 32 ae 92 bb f1 65 20 fe f3 cf 4d 88 f6 11 -21 f2 4b bd 9f e9 1b 59 ca f1 23 5b 2a 93 ff 81 -fc 40 3a dd f4 eb de a8 49 34 a9 cd af 8e 1a 9e - -# -------------------------------- -# RSASSA-PSS Signature Example 9.2 -# -------------------------------- - -# Message to be signed: -c8 c9 c6 af 04 ac da 41 4d 22 7e f2 3e 08 20 c3 -73 2c 50 0d c8 72 75 e9 5b 0d 09 54 13 99 3c 26 -58 bc 1d 98 85 81 ba 87 9c 2d 20 1f 14 cb 88 ce -d1 53 a0 19 69 a7 bf 0a 7b e7 9c 84 c1 48 6b c1 -2b 3f a6 c5 98 71 b6 82 7c 8c e2 53 ca 5f ef a8 -a8 c6 90 bf 32 6e 8e 37 cd b9 6d 90 a8 2e ba b6 -9f 86 35 0e 18 22 e8 bd 53 6a 2e - -# Salt: -b3 07 c4 3b 48 50 a8 da c2 f1 5f 32 e3 78 39 ef -8c 5c 0e 91 - -# Signature: -80 b6 d6 43 25 52 09 f0 a4 56 76 38 97 ac 9e d2 -59 d4 59 b4 9c 28 87 e5 88 2e cb 44 34 cf d6 6d -d7 e1 69 93 75 38 1e 51 cd 7f 55 4f 2c 27 17 04 -b3 99 d4 2b 4b e2 54 0a 0e ca 61 95 1f 55 26 7f -7c 28 78 c1 22 84 2d ad b2 8b 01 bd 5f 8c 02 5f -7e 22 84 18 a6 73 c0 3d 6b c0 c7 36 d0 a2 95 46 -bd 67 f7 86 d9 d6 92 cc ea 77 8d 71 d9 8c 20 63 -b7 a7 10 92 18 7a 4d 35 af 10 81 11 d8 3e 83 ea -e4 6c 46 aa 34 27 7e 06 04 45 89 90 37 88 f1 d5 -e7 ce e2 5f b4 85 e9 29 49 11 88 14 d6 f2 c3 ee -36 14 89 01 6f 32 7f b5 bc 51 7e b5 04 70 bf fa -1a fa 5f 4c e9 aa 0c e5 b8 ee 19 bf 55 01 b9 58 - -# -------------------------------- -# RSASSA-PSS Signature Example 9.3 -# -------------------------------- - -# Message to be signed: -0a fa d4 2c cd 4f c6 06 54 a5 50 02 d2 28 f5 2a -4a 5f e0 3b 8b bb 08 ca 82 da ca 55 8b 44 db e1 -26 6e 50 c0 e7 45 a3 6d 9d 29 04 e3 40 8a bc d1 -fd 56 99 94 06 3f 4a 75 cc 72 f2 fe e2 a0 cd 89 -3a 43 af 1c 5b 8b 48 7d f0 a7 16 10 02 4e 4f 6d -df 9f 28 ad 08 13 c1 aa b9 1b cb 3c 90 64 d5 ff -74 2d ef fe a6 57 09 41 39 36 9e 5e a6 f4 a9 63 -19 a5 cc 82 24 14 5b 54 50 62 75 8f ef d1 fe 34 -09 ae 16 92 59 c6 cd fd 6b 5f 29 58 e3 14 fa ec -be 69 d2 ca ce 58 ee 55 17 9a b9 b3 e6 d1 ec c1 -4a 55 7c 5f eb e9 88 59 52 64 fc 5d a1 c5 71 46 -2e ca 79 8a 18 a1 a4 94 0c da b4 a3 e9 20 09 cc -d4 2e 1e 94 7b 13 14 e3 22 38 a2 de ce 7d 23 a8 -9b 5b 30 c7 51 fd 0a 4a 43 0d 2c 54 85 94 - -# Salt: -9a 2b 00 7e 80 97 8b bb 19 2c 35 4e b7 da 9a ed -fc 74 db f5 - -# Signature: -48 44 08 f3 89 8c d5 f5 34 83 f8 08 19 ef bf 27 -08 c3 4d 27 a8 b2 a6 fa e8 b3 22 f9 24 02 37 f9 -81 81 7a ca 18 46 f1 08 4d aa 6d 7c 07 95 f6 e5 -bf 1a f5 9c 38 e1 85 84 37 ce 1f 7e c4 19 b9 8c -87 36 ad f6 dd 9a 00 b1 80 6d 2b d3 ad 0a 73 77 -5e 05 f5 2d fe f3 a5 9a b4 b0 81 43 f0 df 05 cd -1a d9 d0 4b ec ec a6 da a4 a2 12 98 03 e2 00 cb -c7 77 87 ca f4 c1 d0 66 3a 6c 59 87 b6 05 95 20 -19 78 2c af 2e c1 42 6d 68 fb 94 ed 1d 4b e8 16 -a7 ed 08 1b 77 e6 ab 33 0b 3f fc 07 38 20 fe cd -e3 72 7f cb e2 95 ee 61 a0 50 a3 43 65 86 37 c3 -fd 65 9c fb 63 73 6d e3 2d 9f 90 d3 c2 f6 3e ca - -# -------------------------------- -# RSASSA-PSS Signature Example 9.4 -# -------------------------------- - -# Message to be signed: -1d fd 43 b4 6c 93 db 82 62 9b da e2 bd 0a 12 b8 -82 ea 04 c3 b4 65 f5 cf 93 02 3f 01 05 96 26 db -be 99 f2 6b b1 be 94 9d dd d1 6d c7 f3 de bb 19 -a1 94 62 7f 0b 22 44 34 df 7d 87 00 e9 e9 8b 06 -e3 60 c1 2f db e3 d1 9f 51 c9 68 4e b9 08 9e cb -b0 a2 f0 45 03 99 d3 f5 9e ac 72 94 08 5d 04 4f -53 93 c6 ce 73 74 23 d8 b8 6c 41 53 70 d3 89 e3 -0b 9f 0a 3c 02 d2 5d 00 82 e8 ad 6f 3f 1e f2 4a -45 c3 cf 82 b3 83 36 70 63 a4 d4 61 3e 42 64 f0 -1b 2d ac 2e 5a a4 20 43 f8 fb 5f 69 fa 87 1d 14 -fb 27 3e 76 7a 53 1c 40 f0 2f 34 3b c2 fb 45 a0 -c7 e0 f6 be 25 61 92 3a 77 21 1d 66 a6 e2 db b4 -3c 36 63 50 be ae 22 da 3a c2 c1 f5 07 70 96 fc -b5 c4 bf 25 5f 75 74 35 1a e0 b1 e1 f0 36 32 81 -7c 08 56 d4 a8 ba 97 af bd c8 b8 58 55 40 2b c5 -69 26 fc ec 20 9f 9e a8 - -# Salt: -70 f3 82 bd df 4d 5d 2d d8 8b 3b c7 b7 30 8b e6 -32 b8 40 45 - -# Signature: -84 eb eb 48 1b e5 98 45 b4 64 68 ba fb 47 1c 01 -12 e0 2b 23 5d 84 b5 d9 11 cb d1 92 6e e5 07 4a -e0 42 44 95 cb 20 e8 23 08 b8 eb b6 5f 41 9a 03 -fb 40 e7 2b 78 98 1d 88 aa d1 43 05 36 85 17 2c -97 b2 9c 8b 7b f0 ae 73 b5 b2 26 3c 40 3d a0 ed -2f 80 ff 74 50 af 78 28 eb 8b 86 f0 02 8b d2 a8 -b1 76 a4 d2 28 cc ce a1 83 94 f2 38 b0 9f f7 58 -cc 00 bc 04 30 11 52 35 57 42 f2 82 b5 4e 66 3a -91 9e 70 9d 8d a2 4a de 55 00 a7 b9 aa 50 22 6e -0c a5 29 23 e6 c2 d8 60 ec 50 ff 48 0f a5 74 77 -e8 2b 05 65 f4 37 9f 79 c7 72 d5 c2 da 80 af 9f -bf 32 5e ce 6f c2 0b 00 96 16 14 be e8 9a 18 3e - -# -------------------------------- -# RSASSA-PSS Signature Example 9.5 -# -------------------------------- - -# Message to be signed: -1b dc 6e 7c 98 fb 8c f5 4e 9b 09 7b 66 a8 31 e9 -cf e5 2d 9d 48 88 44 8e e4 b0 97 80 93 ba 1d 7d -73 ae 78 b3 a6 2b a4 ad 95 cd 28 9c cb 9e 00 52 -26 bb 3d 17 8b cc aa 82 1f b0 44 a4 e2 1e e9 76 -96 c1 4d 06 78 c9 4c 2d ae 93 b0 ad 73 92 22 18 -55 3d aa 7e 44 eb e5 77 25 a7 a4 5c c7 2b 9b 21 -38 a6 b1 7c 8d b4 11 ce 82 79 ee 12 41 af f0 a8 -be c6 f7 7f 87 ed b0 c6 9c b2 72 36 e3 43 5a 80 -0b 19 2e 4f 11 e5 19 e3 fe 30 fc 30 ea cc ca 4f -bb 41 76 90 29 bf 70 8e 81 7a 9e 68 38 05 be 67 -fa 10 09 84 68 3b 74 83 8e 3b cf fa 79 36 6e ed -1d 48 1c 76 72 91 18 83 8f 31 ba 8a 04 8a 93 c1 -be 44 24 59 8e 8d f6 32 8b 7a 77 88 0a 3f 9c 7e -2e 8d fc a8 eb 5a 26 fb 86 bd c5 56 d4 2b be 01 -d9 fa 6e d8 06 46 49 1c 93 41 - -# Salt: -d6 89 25 7a 86 ef fa 68 21 2c 5e 0c 61 9e ca 29 -5f b9 1b 67 - -# Signature: -82 10 2d f8 cb 91 e7 17 99 19 a0 4d 26 d3 35 d6 -4f bc 2f 87 2c 44 83 39 43 24 1d e8 45 48 10 27 -4c df 3d b5 f4 2d 42 3d b1 52 af 71 35 f7 01 42 -0e 39 b4 94 a6 7c bf d1 9f 91 19 da 23 3a 23 da -5c 64 39 b5 ba 0d 2b c3 73 ee e3 50 70 01 37 8d -4a 40 73 85 6b 7f e2 ab a0 b5 ee 93 b2 7f 4a fe -c7 d4 d1 20 92 1c 83 f6 06 76 5b 02 c1 9e 4d 6a -1a 3b 95 fa 4c 42 29 51 be 4f 52 13 10 77 ef 17 -17 97 29 cd df bd b5 69 50 db ac ee fe 78 cb 16 -64 0a 09 9e a5 6d 24 38 9e ef 10 f8 fe cb 31 ba -3e a3 b2 27 c0 a8 66 98 bb 89 e3 e9 36 39 05 bf -22 77 7b 2a 3a a5 21 b6 5b 4c ef 76 d8 3b de 4c - -# -------------------------------- -# RSASSA-PSS Signature Example 9.6 -# -------------------------------- - -# Message to be signed: -88 c7 a9 f1 36 04 01 d9 0e 53 b1 01 b6 1c 53 25 -c3 c7 5d b1 b4 11 fb eb 8e 83 0b 75 e9 6b 56 67 -0a d2 45 40 4e 16 79 35 44 ee 35 4b c6 13 a9 0c -c9 84 87 15 a7 3d b5 89 3e 7f 6d 27 98 15 c0 c1 -de 83 ef 8e 29 56 e3 a5 6e d2 6a 88 8d 7a 9c dc -d0 42 f4 b1 6b 7f a5 1e f1 a0 57 36 62 d1 6a 30 -2d 0e c5 b2 85 d2 e0 3a d9 65 29 c8 7b 3d 37 4d -b3 72 d9 5b 24 43 d0 61 b6 b1 a3 50 ba 87 80 7e -d0 83 af d1 eb 05 c3 f5 2f 4e ba 5e d2 22 77 14 -fd b5 0b 9d 9d 9d d6 81 4f 62 f6 27 2f cd 5c db -ce 7a 9e f7 97 - -# Salt: -c2 5f 13 bf 67 d0 81 67 1a 04 81 a1 f1 82 0d 61 -3b ba 22 76 - -# Signature: -a7 fd b0 d2 59 16 5c a2 c8 8d 00 bb f1 02 8a 86 -7d 33 76 99 d0 61 19 3b 17 a9 64 8e 14 cc bb aa -de ac aa cd ec 81 5e 75 71 29 4e bb 8a 11 7a f2 -05 fa 07 8b 47 b0 71 2c 19 9e 3a d0 51 35 c5 04 -c2 4b 81 70 51 15 74 08 02 48 79 92 ff d5 11 d4 -af c6 b8 54 49 1e b3 f0 dd 52 31 39 54 2f f1 5c -31 01 ee 85 54 35 17 c6 a3 c7 94 17 c6 7e 2d d9 -aa 74 1e 9a 29 b0 6d cb 59 3c 23 36 b3 67 0a e3 -af ba c7 c3 e7 6e 21 54 73 e8 66 e3 38 ca 24 4d -e0 0b 62 62 4d 6b 94 26 82 2c ea e9 f8 cc 46 08 -95 f4 12 50 07 3f d4 5c 5a 1e 7b 42 5c 20 4a 42 -3a 69 91 59 f6 90 3e 71 0b 37 a7 bb 2b c8 04 9f - -# ============================================= - -# =================================== -# Example 10: A 2048-bit RSA Key Pair -# =================================== - -# ------------------------------ -# Components of the RSA Key Pair -# ------------------------------ - -# RSA modulus n: -a5 dd 86 7a c4 cb 02 f9 0b 94 57 d4 8c 14 a7 70 -ef 99 1c 56 c3 9c 0e c6 5f d1 1a fa 89 37 ce a5 -7b 9b e7 ac 73 b4 5c 00 17 61 5b 82 d6 22 e3 18 -75 3b 60 27 c0 fd 15 7b e1 2f 80 90 fe e2 a7 ad -cd 0e ef 75 9f 88 ba 49 97 c7 a4 2d 58 c9 aa 12 -cb 99 ae 00 1f e5 21 c1 3b b5 43 14 45 a8 d5 ae -4f 5e 4c 7e 94 8a c2 27 d3 60 40 71 f2 0e 57 7e -90 5f be b1 5d fa f0 6d 1d e5 ae 62 53 d6 3a 6a -21 20 b3 1a 5d a5 da bc 95 50 60 0e 20 f2 7d 37 -39 e2 62 79 25 fe a3 cc 50 9f 21 df f0 4e 6e ea -45 49 c5 40 d6 80 9f f9 30 7e ed e9 1f ff 58 73 -3d 83 85 a2 37 d6 d3 70 5a 33 e3 91 90 09 92 07 -0d f7 ad f1 35 7c f7 e3 70 0c e3 66 7d e8 3f 17 -b8 df 17 78 db 38 1d ce 09 cb 4a d0 58 a5 11 00 -1a 73 81 98 ee 27 cf 55 a1 3b 75 45 39 90 65 82 -ec 8b 17 4b d5 8d 5d 1f 3d 76 7c 61 37 21 ae 05 - -# RSA public exponent e: -01 00 01 - -# RSA private exponent d: -2d 2f f5 67 b3 fe 74 e0 61 91 b7 fd ed 6d e1 12 -29 0c 67 06 92 43 0d 59 69 18 40 47 da 23 4c 96 -93 de ed 16 73 ed 42 95 39 c9 69 d3 72 c0 4d 6b -47 e0 f5 b8 ce e0 84 3e 5c 22 83 5d bd 3b 05 a0 -99 79 84 ae 60 58 b1 1b c4 90 7c bf 67 ed 84 fa -9a e2 52 df b0 d0 cd 49 e6 18 e3 5d fd fe 59 bc -a3 dd d6 6c 33 ce bb c7 7a d4 41 aa 69 5e 13 e3 -24 b5 18 f0 1c 60 f5 a8 5c 99 4a d1 79 f2 a6 b5 -fb e9 34 02 b1 17 67 be 01 bf 07 34 44 d6 ba 1d -d2 bc a5 bd 07 4d 4a 5f ae 35 31 ad 13 03 d8 4b -30 d8 97 31 8c bb ba 04 e0 3c 2e 66 de 6d 91 f8 -2f 96 ea 1d 4b b5 4a 5a ae 10 2d 59 46 57 f5 c9 -78 95 53 51 2b 29 6d ea 29 d8 02 31 96 35 7e 3e -3a 6e 95 8f 39 e3 c2 34 40 38 ea 60 4b 31 ed c6 -f0 f7 ff 6e 71 81 a5 7c 92 82 6a 26 8f 86 76 8e -96 f8 78 56 2f c7 1d 85 d6 9e 44 86 12 f7 04 8f - -# Prime p: -cf d5 02 83 fe ee b9 7f 6f 08 d7 3c bc 7b 38 36 -f8 2b bc d4 99 47 9f 5e 6f 76 fd fc b8 b3 8c 4f -71 dc 9e 88 bd 6a 6f 76 37 1a fd 65 d2 af 18 62 -b3 2a fb 34 a9 5f 71 b8 b1 32 04 3f fe be 3a 95 -2b af 75 92 44 81 48 c0 3f 9c 69 b1 d6 8e 4c e5 -cf 32 c8 6b af 46 fe d3 01 ca 1a b4 03 06 9b 32 -f4 56 b9 1f 71 89 8a b0 81 cd 8c 42 52 ef 52 71 -91 5c 97 94 b8 f2 95 85 1d a7 51 0f 99 cb 73 eb - -# Prime q: -cc 4e 90 d2 a1 b3 a0 65 d3 b2 d1 f5 a8 fc e3 1b -54 44 75 66 4e ab 56 1d 29 71 b9 9f b7 be f8 44 -e8 ec 1f 36 0b 8c 2a c8 35 96 92 97 1e a6 a3 8f -72 3f cc 21 1f 5d bc b1 77 a0 fd ac 51 64 a1 d4 -ff 7f bb 4e 82 99 86 35 3c b9 83 65 9a 14 8c dd -42 0c 7d 31 ba 38 22 ea 90 a3 2b e4 6c 03 0e 8c -17 e1 fa 0a d3 78 59 e0 6b 0a a6 fa 3b 21 6d 9c -be 6c 0e 22 33 97 69 c0 a6 15 91 3e 5d a7 19 cf - -# p's CRT exponent dP: -1c 2d 1f c3 2f 6b c4 00 4f d8 5d fd e0 fb bf 9a -4c 38 f9 c7 c4 e4 1d ea 1a a8 82 34 a2 01 cd 92 -f3 b7 da 52 65 83 a9 8a d8 5b b3 60 fb 98 3b 71 -1e 23 44 9d 56 1d 17 78 d7 a5 15 48 6b cb f4 7b -46 c9 e9 e1 a3 a1 f7 70 00 ef be b0 9a 8a fe 47 -e5 b8 57 cd a9 9c b1 6d 7f ff 9b 71 2e 3b d6 0c -a9 6d 9c 79 73 d6 16 d4 69 34 a9 c0 50 28 1c 00 -43 99 ce ff 1d b7 dd a7 87 66 a8 a9 b9 cb 08 73 - -# q's CRT exponent dQ: -cb 3b 3c 04 ca a5 8c 60 be 7d 9b 2d eb b3 e3 96 -43 f4 f5 73 97 be 08 23 6a 1e 9e af aa 70 65 36 -e7 1c 3a cf e0 1c c6 51 f2 3c 9e 05 85 8f ee 13 -bb 6a 8a fc 47 df 4e dc 9a 4b a3 0b ce cb 73 d0 -15 78 52 32 7e e7 89 01 5c 2e 8d ee 7b 9f 05 a0 -f3 1a c9 4e b6 17 31 64 74 0c 5c 95 14 7c d5 f3 -b5 ae 2c b4 a8 37 87 f0 1d 8a b3 1f 27 c2 d0 ee -a2 dd 8a 11 ab 90 6a ba 20 7c 43 c6 ee 12 53 31 - -# CRT coefficient qInv: -12 f6 b2 cf 13 74 a7 36 fa d0 56 16 05 0f 96 ab -4b 61 d1 17 7c 7f 9d 52 5a 29 f3 d1 80 e7 76 67 -e9 9d 99 ab f0 52 5d 07 58 66 0f 37 52 65 5b 0f -25 b8 df 84 31 d9 a8 ff 77 c1 6c 12 a0 a5 12 2a -9f 0b f7 cf d5 a2 66 a3 5c 15 9f 99 12 08 b9 03 -16 ff 44 4f 3e 0b 6b d0 e9 3b 8a 7a 24 48 e9 57 -e3 dd a6 cf cf 22 66 b1 06 01 3a c4 68 08 d3 b3 -88 7b 3b 00 34 4b aa c9 53 0b 4c e7 08 fc 32 b6 - -# --------------------------------- -# RSASSA-PSS Signature Example 10.1 -# --------------------------------- - -# Message to be signed: -88 31 77 e5 12 6b 9b e2 d9 a9 68 03 27 d5 37 0c -6f 26 86 1f 58 20 c4 3d a6 7a 3a d6 09 - -# Salt: -04 e2 15 ee 6f f9 34 b9 da 70 d7 73 0c 87 34 ab -fc ec de 89 - -# Signature: -82 c2 b1 60 09 3b 8a a3 c0 f7 52 2b 19 f8 73 54 -06 6c 77 84 7a bf 2a 9f ce 54 2d 0e 84 e9 20 c5 -af b4 9f fd fd ac e1 65 60 ee 94 a1 36 96 01 14 -8e ba d7 a0 e1 51 cf 16 33 17 91 a5 72 7d 05 f2 -1e 74 e7 eb 81 14 40 20 69 35 d7 44 76 5a 15 e7 -9f 01 5c b6 6c 53 2c 87 a6 a0 59 61 c8 bf ad 74 -1a 9a 66 57 02 28 94 39 3e 72 23 73 97 96 c0 2a -77 45 5d 0f 55 5b 0e c0 1d df 25 9b 62 07 fd 0f -d5 76 14 ce f1 a5 57 3b aa ff 4e c0 00 69 95 16 -59 b8 5f 24 30 0a 25 16 0c a8 52 2d c6 e6 72 7e -57 d0 19 d7 e6 36 29 b8 fe 5e 89 e2 5c c1 5b eb -3a 64 75 77 55 92 99 28 0b 9b 28 f7 9b 04 09 00 -0b e2 5b bd 96 40 8b a3 b4 3c c4 86 18 4d d1 c8 -e6 25 53 fa 1a f4 04 0f 60 66 3d e7 f5 e4 9c 04 -38 8e 25 7f 1c e8 9c 95 da b4 8a 31 5d 9b 66 b1 -b7 62 82 33 87 6f f2 38 52 30 d0 70 d0 7e 16 66 - -# --------------------------------- -# RSASSA-PSS Signature Example 10.2 -# --------------------------------- - -# Message to be signed: -dd 67 0a 01 46 58 68 ad c9 3f 26 13 19 57 a5 0c -52 fb 77 7c db aa 30 89 2c 9e 12 36 11 64 ec 13 -97 9d 43 04 81 18 e4 44 5d b8 7b ee 58 dd 98 7b -34 25 d0 20 71 d8 db ae 80 70 8b 03 9d bb 64 db -d1 de 56 57 d9 fe d0 c1 18 a5 41 43 74 2e 0f f3 -c8 7f 74 e4 58 57 64 7a f3 f7 9e b0 a1 4c 9d 75 -ea 9a 1a 04 b7 cf 47 8a 89 7a 70 8f d9 88 f4 8e -80 1e db 0b 70 39 df 8c 23 bb 3c 56 f4 e8 21 ac - -# Salt: -8b 2b dd 4b 40 fa f5 45 c7 78 dd f9 bc 1a 49 cb -57 f9 b7 1b - -# Signature: -14 ae 35 d9 dd 06 ba 92 f7 f3 b8 97 97 8a ed 7c -d4 bf 5f f0 b5 85 a4 0b d4 6c e1 b4 2c d2 70 30 -53 bb 90 44 d6 4e 81 3d 8f 96 db 2d d7 00 7d 10 -11 8f 6f 8f 84 96 09 7a d7 5e 1f f6 92 34 1b 28 -92 ad 55 a6 33 a1 c5 5e 7f 0a 0a d5 9a 0e 20 3a -5b 82 78 ae c5 4d d8 62 2e 28 31 d8 71 74 f8 ca -ff 43 ee 6c 46 44 53 45 d8 4a 59 65 9b fb 92 ec -d4 c8 18 66 86 95 f3 47 06 f6 68 28 a8 99 59 63 -7f 2b f3 e3 25 1c 24 bd ba 4d 4b 76 49 da 00 22 -21 8b 11 9c 84 e7 9a 65 27 ec 5b 8a 5f 86 1c 15 -99 52 e2 3e c0 5e 1e 71 73 46 fa ef e8 b1 68 68 -25 bd 2b 26 2f b2 53 10 66 c0 de 09 ac de 2e 42 -31 69 07 28 b5 d8 5e 11 5a 2f 6b 92 b7 9c 25 ab -c9 bd 93 99 ff 8b cf 82 5a 52 ea 1f 56 ea 76 dd -26 f4 3b aa fa 18 bf a9 2a 50 4c bd 35 69 9e 26 -d1 dc c5 a2 88 73 85 f3 c6 32 32 f0 6f 32 44 c3 - -# --------------------------------- -# RSASSA-PSS Signature Example 10.3 -# --------------------------------- - -# Message to be signed: -48 b2 b6 a5 7a 63 c8 4c ea 85 9d 65 c6 68 28 4b -08 d9 6b dc aa be 25 2d b0 e4 a9 6c b1 ba c6 01 -93 41 db 6f be fb 8d 10 6b 0e 90 ed a6 bc c6 c6 -26 2f 37 e7 ea 9c 7e 5d 22 6b d7 df 85 ec 5e 71 -ef ff 2f 54 c5 db 57 7f f7 29 ff 91 b8 42 49 1d -e2 74 1d 0c 63 16 07 df 58 6b 90 5b 23 b9 1a f1 -3d a1 23 04 bf 83 ec a8 a7 3e 87 1f f9 db - -# Salt: -4e 96 fc 1b 39 8f 92 b4 46 71 01 0c 0d c3 ef d6 -e2 0c 2d 73 - -# Signature: -6e 3e 4d 7b 6b 15 d2 fb 46 01 3b 89 00 aa 5b bb -39 39 cf 2c 09 57 17 98 70 42 02 6e e6 2c 74 c5 -4c ff d5 d7 d5 7e fb bf 95 0a 0f 5c 57 4f a0 9d -3f c1 c9 f5 13 b0 5b 4f f5 0d d8 df 7e df a2 01 -02 85 4c 35 e5 92 18 01 19 a7 0c e5 b0 85 18 2a -a0 2d 9e a2 aa 90 d1 df 03 f2 da ae 88 5b a2 f5 -d0 5a fd ac 97 47 6f 06 b9 3b 5b c9 4a 1a 80 aa -91 16 c4 d6 15 f3 33 b0 98 89 2b 25 ff ac e2 66 -f5 db 5a 5a 3b cc 10 a8 24 ed 55 aa d3 5b 72 78 -34 fb 8c 07 da 28 fc f4 16 a5 d9 b2 22 4f 1f 8b -44 2b 36 f9 1e 45 6f de a2 d7 cf e3 36 72 68 de -03 07 a4 c7 4e 92 41 59 ed 33 39 3d 5e 06 55 53 -1c 77 32 7b 89 82 1b de df 88 01 61 c7 8c d4 19 -6b 54 19 f7 ac c3 f1 3e 5e bf 16 1b 6e 7c 67 24 -71 6c a3 3b 85 c2 e2 56 40 19 2a c2 85 96 51 d5 -0b de 7e b9 76 e5 1c ec 82 8b 98 b6 56 3b 86 bb - -# --------------------------------- -# RSASSA-PSS Signature Example 10.4 -# --------------------------------- - -# Message to be signed: -0b 87 77 c7 f8 39 ba f0 a6 4b bb db c5 ce 79 75 -5c 57 a2 05 b8 45 c1 74 e2 d2 e9 05 46 a0 89 c4 -e6 ec 8a df fa 23 a7 ea 97 ba e6 b6 5d 78 2b 82 -db 5d 2b 5a 56 d2 2a 29 a0 5e 7c 44 33 e2 b8 2a -62 1a bb a9 0a dd 05 ce 39 3f c4 8a 84 05 42 45 -1a - -# Salt: -c7 cd 69 8d 84 b6 51 28 d8 83 5e 3a 8b 1e b0 e0 -1c b5 41 ec - -# Signature: -34 04 7f f9 6c 4d c0 dc 90 b2 d4 ff 59 a1 a3 61 -a4 75 4b 25 5d 2e e0 af 7d 8b f8 7c 9b c9 e7 dd -ee de 33 93 4c 63 ca 1c 0e 3d 26 2c b1 45 ef 93 -2a 1f 2c 0a 99 7a a6 a3 4f 8e ae e7 47 7d 82 cc -f0 90 95 a6 b8 ac ad 38 d4 ee c9 fb 7e ab 7a d0 -2d a1 d1 1d 8e 54 c1 82 5e 55 bf 58 c2 a2 32 34 -b9 02 be 12 4f 9e 90 38 a8 f6 8f a4 5d ab 72 f6 -6e 09 45 bf 1d 8b ac c9 04 4c 6f 07 09 8c 9f ce -c5 8a 3a ab 10 0c 80 51 78 15 5f 03 0a 12 4c 45 -0e 5a cb da 47 d0 e4 f1 0b 80 a2 3f 80 3e 77 4d -02 3b 00 15 c2 0b 9f 9b be 7c 91 29 63 38 d5 ec -b4 71 ca fb 03 20 07 b6 7a 60 be 5f 69 50 4a 9f -01 ab b3 cb 46 7b 26 0e 2b ce 86 0b e8 d9 5b f9 -2c 0c 8e 14 96 ed 1e 52 85 93 a4 ab b6 df 46 2d -de 8a 09 68 df fe 46 83 11 68 57 a2 32 f5 eb f6 -c8 5b e2 38 74 5a d0 f3 8f 76 7a 5f db f4 86 fb - -# --------------------------------- -# RSASSA-PSS Signature Example 10.5 -# --------------------------------- - -# Message to be signed: -f1 03 6e 00 8e 71 e9 64 da dc 92 19 ed 30 e1 7f -06 b4 b6 8a 95 5c 16 b3 12 b1 ed df 02 8b 74 97 -6b ed 6b 3f 6a 63 d4 e7 78 59 24 3c 9c cc dc 98 -01 65 23 ab b0 24 83 b3 55 91 c3 3a ad 81 21 3b -b7 c7 bb 1a 47 0a ab c1 0d 44 25 6c 4d 45 59 d9 -16 - -# Salt: -ef a8 bf f9 62 12 b2 f4 a3 f3 71 a1 0d 57 41 52 -65 5f 5d fb - -# Signature: -7e 09 35 ea 18 f4 d6 c1 d1 7c e8 2e b2 b3 83 6c -55 b3 84 58 9c e1 9d fe 74 33 63 ac 99 48 d1 f3 -46 b7 bf dd fe 92 ef d7 8a db 21 fa ef c8 9a de -42 b1 0f 37 40 03 fe 12 2e 67 42 9a 1c b8 cb d1 -f8 d9 01 45 64 c4 4d 12 01 16 f4 99 0f 1a 6e 38 -77 4c 19 4b d1 b8 21 32 86 b0 77 b0 49 9d 2e 7b -3f 43 4a b1 22 89 c5 56 68 4d ee d7 81 31 93 4b -b3 dd 65 37 23 6f 7c 6f 3d cb 09 d4 76 be 07 72 -1e 37 e1 ce ed 9b 2f 7b 40 68 87 bd 53 15 73 05 -e1 c8 b4 f8 4d 73 3b c1 e1 86 fe 06 cc 59 b6 ed -b8 f4 bd 7f fe fd f4 f7 ba 9c fb 9d 57 06 89 b5 -a1 a4 10 9a 74 6a 69 08 93 db 37 99 25 5a 0c b9 -21 5d 2d 1c d4 90 59 0e 95 2e 8c 87 86 aa 00 11 -26 52 52 47 0c 04 1d fb c3 ee c7 c3 cb f7 1c 24 -86 9d 11 5c 0c b4 a9 56 f5 6d 53 0b 80 ab 58 9a -cf ef c6 90 75 1d df 36 e8 d3 83 f8 3c ed d2 cc - -# --------------------------------- -# RSASSA-PSS Signature Example 10.6 -# --------------------------------- - -# Message to be signed: -25 f1 08 95 a8 77 16 c1 37 45 0b b9 51 9d fa a1 -f2 07 fa a9 42 ea 88 ab f7 1e 9c 17 98 00 85 b5 -55 ae ba b7 62 64 ae 2a 3a b9 3c 2d 12 98 11 91 -dd ac 6f b5 94 9e b3 6a ee 3c 5d a9 40 f0 07 52 -c9 16 d9 46 08 fa 7d 97 ba 6a 29 15 b6 88 f2 03 -23 d4 e9 d9 68 01 d8 9a 72 ab 58 92 dc 21 17 c0 -74 34 fc f9 72 e0 58 cf 8c 41 ca 4b 4f f5 54 f7 -d5 06 8a d3 15 5f ce d0 f3 12 5b c0 4f 91 93 37 -8a 8f 5c 4c 3b 8c b4 dd 6d 1c c6 9d 30 ec ca 6e -aa 51 e3 6a 05 73 0e 9e 34 2e 85 5b af 09 9d ef -b8 af d7 - -# Salt: -ad 8b 15 23 70 36 46 22 4b 66 0b 55 08 85 91 7c -a2 d1 df 28 - -# Signature: -6d 3b 5b 87 f6 7e a6 57 af 21 f7 54 41 97 7d 21 -80 f9 1b 2c 5f 69 2d e8 29 55 69 6a 68 67 30 d9 -b9 77 8d 97 07 58 cc b2 60 71 c2 20 9f fb d6 12 -5b e2 e9 6e a8 1b 67 cb 9b 93 08 23 9f da 17 f7 -b2 b6 4e cd a0 96 b6 b9 35 64 0a 5a 1c b4 2a 91 -55 b1 c9 ef 7a 63 3a 02 c5 9f 0d 6e e5 9b 85 2c -43 b3 50 29 e7 3c 94 0f f0 41 0e 8f 11 4e ed 46 -bb d0 fa e1 65 e4 2b e2 52 8a 40 1c 3b 28 fd 81 -8e f3 23 2d ca 9f 4d 2a 0f 51 66 ec 59 c4 23 96 -d6 c1 1d bc 12 15 a5 6f a1 71 69 db 95 75 34 3e -f3 4f 9d e3 2a 49 cd c3 17 49 22 f2 29 c2 3e 18 -e4 5d f9 35 31 19 ec 43 19 ce dc e7 a1 7c 64 08 -8c 1f 6f 52 be 29 63 41 00 b3 91 9d 38 f3 d1 ed -94 e6 89 1e 66 a7 3b 8f b8 49 f5 87 4d f5 94 59 -e2 98 c7 bb ce 2e ee 78 2a 19 5a a6 6f e2 d0 73 -2b 25 e5 95 f5 7d 3e 06 1b 1f c3 e4 06 3b f9 8f - -# ============================================= diff --git a/notes/rsa-testvectors/readme.txt b/notes/rsa-testvectors/readme.txt deleted file mode 100644 index 788c0ba8..00000000 --- a/notes/rsa-testvectors/readme.txt +++ /dev/null @@ -1,22 +0,0 @@ -==================== -pkcs-1v2-1-vec.zip -==================== - -This directory contains test vectors for RSAES-OAEP and -RSASSA-PSS as defined in PKCS #1 v2.1. - -The files: - -readme.txt This file. - -oaep-vect.txt Test vectors for RSAES-OAEP encryption. - -oaep-int.txt Intermediate values for RSAES-OAEP - encryption and RSA decryption with CRT. - Also, DER-encoded RSAPrivateKey and - RSAPublicKey types. - -pss-vect.txt Test vectors for RSASSA-PSS signing. - -pss-int.txt Intermediate values for RSASSA-PSS - signing. diff --git a/notes/rsa-testvectors/rt.py b/notes/rsa-testvectors/rt.py deleted file mode 100755 index 3f6ab7f3..00000000 --- a/notes/rsa-testvectors/rt.py +++ /dev/null @@ -1,253 +0,0 @@ -#!/usr/bin/env python - -import sys -import os -import hashlib - -def md5_for_file(path, block_size=256*128): - ''' - Block size directly depends on the block size of your filesystem - to avoid performances issues - Here I have blocks of 4096 octets (Default NTFS) - ''' - md5 = hashlib.md5() - with open(path,'rb') as f: - for chunk in iter(lambda: f.read(block_size), b''): - md5.update(chunk) - f.close() - return md5.hexdigest() - -def read_until_ends(f, s): - while True: - l = f.readline() - if l.strip().endswith(s): - break - return l - -def read_until_start(f, s): - while True: - l = f.readline() - if l.startswith(s): - break - return l - -def read_hex(f): - t = [] - while True: - l = f.readline() - if l.strip() == '': - break - t.extend(l.strip().split(' ')) - return t - -class NamedData(object): - def __init__(self, name, data): - self.name = name - self.data = data - - def __str__(self): - return " /* {0} */\n {1},\n {{ {2} }}\n".format(self.name, len(self.data), ', '.join('0x' + x for x in self.data)) - -def read_part(f, s): - name = read_until_start(f, s).strip().lstrip('# ').rstrip(':') - data = read_hex(f) - e = NamedData(name, data) - return e - -class RsaKey(object): - def __init__(self, n, e, d, p, q, dP, dQ, qInv): - self.n = n - self.e = e - self.d = d - self.p = p - self.q = q - self.dP = dP - self.dQ = dQ - self.qInv = qInv - - def __str__(self): - return "{{\n{0},\n{1},\n{2},\n{3},\n{4},\n{5},\n{6},\n{7}\n}}\n".format(self.n, self.e, self.d, self.p, self.q, self.dP, self.dQ, self.qInv) - -def read_key(f): - if ftype.version == 1: - read_until_start(f, '# Private key') - n = read_part(f, ftype.n) - e = read_part(f, ftype.e) - d = read_part(f, ftype.d) - p = read_part(f, ftype.p) - q = read_part(f, ftype.q) - dP = read_part(f, ftype.dP) - dQ = read_part(f, ftype.dQ) - qInv = read_part(f, ftype.qInv) - k = RsaKey(n, e, d, p, q, dP, dQ, qInv) - return k - -class Data(object): - def __init__(self, name, obj1, obj2, obj3): - self.name = name - self.obj1 = obj1 - self.obj2 = obj2 - self.obj3 = obj3 - - def __str__(self): - if self.obj3 == None: - return "{{\n \"{0}\",\n{1},\n{2}\n}}\n,".format(self.name, self.obj1, self.obj2) - else: - return "{{\n \"{0}\",\n{1},\n{2},\n{3}\n}}\n,".format(self.name, self.obj1, self.obj2, self.obj3) - -def read_data(f): - name = read_until_start(f, ftype.o).strip().lstrip('# ') - obj1 = read_part(f, ftype.o1) - obj2 = read_part(f, ftype.o2) - if ftype.name == 'emsa': - obj3 = None - else: - obj3 = read_part(f, ftype.o3) - s = Data(name, obj1, obj2, obj3) - return s - -class Example(object): - def __init__(self, name, key, data): - self.name = name - self.key = key - self.data = data - - def __str__(self): - res = "{{\n \"{0}\",\n{1},\n{{".format(self.name, str(self.key)) - for idx, d in enumerate(self.data, 1): - if idx == 2: - res += '#ifdef LTC_TEST_EXT\n' - res += str(d) + '\n' - if idx == ftype.numcases: - res += '#endif /* LTC_TEST_EXT */\n' - res += '}\n},' - return res - -def read_example(f): - name = read_until_start(f, '# Example').strip().lstrip('# ') - key = read_key(f) - l = read_until_start(f, ftype.sod) - d = [] - while l.strip().startswith(ftype.sod): - if ftype.version == 1: - f.seek(-len(l), os.SEEK_CUR) - data = read_data(f) - d.append(data) - l = read_until_start(f, '#') - - e = Example(name, key, d) - f.seek(-len(l), os.SEEK_CUR) - return e - - -class PkcsType(object): - def __init__(self, name): - if name == 'pss': - self.o = '# RSASSA-PSS Signature Example' - self.o1 = '# Message to be signed' - self.o2 = '# Salt' - self.o3 = '# Signature' - elif name == 'oaep': - self.o = '# RSAES-OAEP Encryption Example' - self.o1 = '# Message to be encrypted' - self.o2 = '# Seed' - self.o3 = '# Encryption' - elif name == 'emsa': - self.o = '# PKCS#1 v1.5 Signature Example' - self.o1 = '# Message to be signed' - self.o2 = '# Signature' - elif name == 'eme': - self.o = '# PKCS#1 v1.5 Encryption Example' - self.o1 = '# Message' - self.o2 = '# Seed' - self.o3 = '# Encryption' - else: - raise ValueError('Type unknown: ' + name) - - if name == 'pss' or name == 'oaep': - self.version = 2 - self.numcases = 6 - self.n = '# RSA modulus n' - self.e = '# RSA public exponent e' - self.d = '# RSA private exponent d' - self.p = '# Prime p' - self.q = '# Prime q' - self.dP = '# p\'s CRT exponent dP' - self.dQ = '# q\'s CRT exponent dQ' - self.qInv = '# CRT coefficient qInv' - self.sod = '# --------------------------------' - elif name == 'emsa' or name == 'eme': - self.version = 1 - self.numcases = 20 - self.n = '# Modulus' - self.e = '# Public exponent' - self.d = '# Exponent' - self.p = '# Prime 1' - self.q = '# Prime 2' - self.dP = '# Prime exponent 1' - self.dQ = '# Prime exponent 2' - self.qInv = '# Coefficient' - self.sod = self.o - self.name = name - -ftype = PkcsType(sys.argv[2]) - -print('/* Generated from file: %s\n * with md5 hash: %s\n */\n' % (sys.argv[1], md5_for_file(sys.argv[1]))) -print(''' -typedef struct rsaKey { - int n_l; - unsigned char n[256]; - int e_l; - unsigned char e[256]; - int d_l; - unsigned char d[256]; - int p_l; - unsigned char p[256]; - int q_l; - unsigned char q[256]; - int dP_l; - unsigned char dP[256]; - int dQ_l; - unsigned char dQ[256]; - int qInv_l; - unsigned char qInv[256]; -} rsaKey_t; - -typedef struct rsaData { - const char* name; - int o1_l; - unsigned char o1[256]; - int o2_l; - unsigned char o2[256];''') - -if ftype.name != 'emsa': - print(''' int o3_l; - unsigned char o3[256];''') - -print('''} rsaData_t; - -typedef struct testcase { - const char* name; - rsaKey_t rsa; -#ifdef LTC_TEST_EXT - rsaData_t data[%d]; -#else - rsaData_t data[1]; -#endif /* LTC_TEST_EXT */ -} testcase_t; - -testcase_t testcases_%s[] = - {''' % (ftype.numcases, sys.argv[2])) - -with open(sys.argv[1], 'rb') as f: - ex = [] - while read_until_ends(f, '============================================='): - if f.tell() == os.path.getsize(sys.argv[1]): - break - e = read_example(f) - ex.append(e) - - for i in ex: - print(i) -f.close() -print('};\n') diff --git a/notes/tech0003.txt b/notes/tech0003.txt index 471378aa..1a21867c 100644 --- a/notes/tech0003.txt +++ b/notes/tech0003.txt @@ -47,6 +47,6 @@ as a hash) CAST5 is perhaps a "runner-up" choice. CAST5 has been around longer fairly fast as well. You can easily accomplish this via the "config.pl" script. Simply answer "n" to all of the ciphers except the one you want -and then rebuild the library. [or you can hand edit tomcrypt_custom.h] +and then rebuild the library. [or you can hand edit mycrypt_custom.h] diff --git a/notes/tech0004.txt b/notes/tech0004.txt deleted file mode 100644 index 2acd3782..00000000 --- a/notes/tech0004.txt +++ /dev/null @@ -1,91 +0,0 @@ -Tech Note 0004 -Using Yarrow, Fortuna and SOBER-128 -Tom St Denis - -Introduction ------------- - -This tech note explains how to use three of the more useful pseudo random number generators and their -own little "issues". While all of the PRNGs have the same API and are roughly used in the same -manner their effectiveness really depends on the user knowing how they work. - - -Yarrow ------- - -Yarrow is by far the simplest of the PRNGs. It gathers bits of entropy by hashing the pool state -plus the additional bits storing the message digest back in the pool. E.g. - -pool = hash(pool || newbits) - -Simply dump bits into the PRNG via yarrow_add_entropy() and call yarrow_ready() when you want to -put them to use. This PRNG while simple is not entirely safe. An attacker who learns the state -of the pool and can control future events can control the PRNG. This requires an active attacker but -isn't entire impossible. - -The pool is then used as a key for a cipher that is used in CTR mode. - -Yarrow is mostly meant for short-term programs [e.g. like file utils]. This particular implementation -is not meant for long-term usage. - -Fortuna -------- - -Fortuna was designed by Niels Fergusson and Bruce Schneier [Bruce is also the guy who invented Yarrow]. It -operates on a more defensive level than Yarrow. Instead of 1 entropy pool it has 32 and the new entropy -is spread [round robin] in all of the pools. - -That is, each call to fortuna_add_entropy() puts the bits in the next [in the sequenece] pool of entropy. -Effective bits are added to the pool by sending them through a hash [but not terminating the hash]. - -Here's the main catch though. When the PRNG must be reseeded [so that you can extract bits from it] only -certain pools are used. More precisely the i'th pool is used every 2**i'th reseeding. For example, pool[0] -is always used. pool[1] is used every second reseeding, pool[2] every fourth. - -The pools are hashed together along with the current key and the result is the new key for a cipher which -operates in CTR mode [more about that in a sec]. - -Now this may seem odd at first however there is a good reason behind it. An attacker who learns pool[0] won't -strictly know the other pools. So the recovery rate of is not 0. In fact pool[0] can be completely -compromised and the PRNG will still eventually recover. The value FORTUNA_WD is the "WatchDog" counter. -Every FORTUNA_WD calls to fortuna_read will invoke the reseed operation. By default this is set to 10 which -means after 10 calls the PRNG will reseed itself. - -The pools are combined with the running cipher key [256 bits] so that a cipher in CTR mode can produce -the stream. Unlike Yarrow the cipher is re-keyed after every call to fortuna_read() [so one big call -would be faster than many smaller calls]. This prevents too much data being encrypted under the same -key [and mitigates a flaw in CTR mode that the same block can't be emitted twice under the same key]. - -Fortuna is really meant for a kernel-level PRNG. The more sources [and often] you feed into it the -healthier it will be. It's also meant to be used for long term purposes. Since it can recover from -compromises it is harder to control it. - -SOBER-128 ------- - -SOBER-128 is actually a stream cipher but like most ciphers can easily be modelled in the context of a PRNG. -This PRNG is extremely fast [4 cycles/byte on a P4] and was designed by a well known cryptographer [Greg Rose]. - -SOBER-128 doesn't really "act" like the other two PRNGs. It's meant to be seeded once and then read as -required. In such a sense it isn't a "system PRNG" but useful short term purposes. In particular -the sober128_read() function actually XORs against the input buffer you specify. This allows the -read() function to be used as an "encrypt" function as well. - -You can only key SOBER-128 once [by calling sober128_add_entropy()]. Once it it is keyed subsequent -calls to add_entropy() will be considered a "re-IV" operation. Changing the IV allows you to use same -initial key and not produce the same output stream. It also lets you differentiate packets. E.g. each -packet has it's own IV. - -All inputs to sober128_add_entropy() must have a length that is a multiple of four. - -Overall -------- - -Since SOBER-128 is *much* faster than the other two PRNGs a good setup would be to use Fortuna as your -system-wide PRNG and use SOBER-128 [key'ed from Fortuna] for encrypting streams or as a PRNG for -simulations. - -Yarrow is still a good candidate but only for "short lived" programs. However, since Fortuna is faster -[by about 10 cycles/byte on a P4] I'd use Fortuna anyways... - -Tom \ No newline at end of file diff --git a/notes/tech0005.txt b/notes/tech0005.txt deleted file mode 100644 index c2502208..00000000 --- a/notes/tech0005.txt +++ /dev/null @@ -1,20 +0,0 @@ -Tech Note 0005 -Minimizing Code Space -Tom St Denis - -Introduction ------------- - -Tweaking... - -You can disable whole classes of algorithms on the command line with the LTC_NO_* defines. From there you can manually turn on what you want to enable. - -The following build with GCC 3.4.4 on an AMD64 box gets you AES, CTR mode, SHA-256, HMAC, Yarrow, full RSA PKCS #1, PKCS #5 and ASN.1 DER in -roughly 40KB of code (49KB on the ARMv4) (both excluding the math library). - -CFLAGS="-DLTC_NO_CIPHERS -DLTC_NO_HASHES -DLTC_NO_PRNGS -DLTC_NO_MACS -DLTC_NO_MODES -DLTC_NO_PK -DLTC_RIJNDAEL -DLTC_CTR_MODE -DSHA256 \ --DLTC_HMAC -DYARROW -DMRSA -DMPI -DTFM_DESC -DARGTYPE=3 -Os -DLTC_SMALL_CODE -fomit-frame-pointer" make IGNORE_SPEED=1 - -Obviously this won't get you performance but if you need to pack a crypto lib in a device with limited means it's more than enough... - -Neato eh? diff --git a/notes/tech0006.txt b/notes/tech0006.txt deleted file mode 100644 index ecbe8b08..00000000 --- a/notes/tech0006.txt +++ /dev/null @@ -1,91 +0,0 @@ -Tech Note 0006 -PK Standards Compliance -Tom St Denis - -RSA ----- - -PKCS #1 compliance. - -Key Format: RSAPublicKey and RSAPrivateKey as per PKCS #1 v2.1 -Encryption: OAEP as per PKCS #1 -Signature : PSS as per PKCS #1 - -DSA ----- - -The NIST DSA algorithm - -Key Format: HomeBrew [see below] -Signature : ANSI X9.62 format [see below]. - -Keys are stored as - -DSAPublicKey ::= SEQUENCE { - publicFlags BIT STRING(1), -- must be 0 - g INTEGER , -- base generator, check that g^q mod p == 1 - -- and that 1 < g < p - 1 - p INTEGER , -- prime modulus - q INTEGER , -- order of sub-group (must be prime) - y INTEGER , -- public key, specifically, g^x mod p, - -- check that y^q mod p == 1 - -- and that 1 < y < p - 1 -} - -DSAPrivateKey ::= SEQUENCE { - publicFlags BIT STRING(1), -- must be 1 - g INTEGER , -- base generator, check that g^q mod p == 1 - -- and that 1 < g < p - 1 - p INTEGER , -- prime modulus - q INTEGER , -- order of sub-group (must be prime) - y INTEGER , -- public key, specifically, g^x mod p, - -- check that y^q mod p == 1 - -- and that 1 < y < p - 1 - x INTEGER -- private key -} - -Signatures are stored as - -DSASignature ::= SEQUENCE { - r, s INTEGER -- signature parameters -} - -ECC ----- - -The ANSI X9.62 and X9.63 algorithms [partial]. Supports all NIST GF(p) curves. - -Key Format : Homebrew [see below, only GF(p) NIST curves supported] -Signature : X9.62 compliant -Encryption : Homebrew [based on X9.63, differs in that the public point is stored as an ECCPublicKey] -Shared Secret: X9.63 compliant - -ECCPublicKey ::= SEQUENCE { - flags BIT STRING(1), -- public/private flag (always zero), - keySize INTEGER, -- Curve size (in bits) divided by eight - -- and rounded down, e.g. 521 => 65 - pubkey.x INTEGER, -- The X co-ordinate of the public key point - pubkey.y INTEGER, -- The Y co-ordinate of the public key point -} - -ECCPrivateKey ::= SEQUENCE { - flags BIT STRING(1), -- public/private flag (always one), - keySize INTEGER, -- Curve size (in bits) divided by eight - -- and rounded down, e.g. 521 => 65 - pubkey.x INTEGER, -- The X co-ordinate of the public key point - pubkey.y INTEGER, -- The Y co-ordinate of the public key point - secret.k INTEGER, -- The secret key scalar -} - -The encryption works by finding the X9.63 shared secret and hashing it. The hash is then simply XOR'ed against the message [which must be at most the size -of the hash digest]. The format of the encrypted text is as follows - -ECCEncrypted ::= SEQUENCE { - hashOID OBJECT IDENTIFIER, -- The OID of the hash used - pubkey OCTET STRING , -- Encapsulation of a random ECCPublicKey - skey OCTET STRING -- The encrypted text (which the hash was XOR'ed against) -} - -% $Source: /cvs/libtom/libtomcrypt/notes/tech0006.txt,v $ -% $Revision: 1.2 $ -% $Date: 2005/06/18 02:26:27 $ diff --git a/notes/tech0007.txt b/notes/tech0007.txt deleted file mode 100644 index 149bd49d..00000000 --- a/notes/tech0007.txt +++ /dev/null @@ -1,5 +0,0 @@ -Tech Note #7 -Quick building for testing with LTM - -EXTRALIBS=-ltommath CFLAGS="-g3 -DLTC_NO_ASM -DUSE_LTM -DLTM_DESC" make -j3 IGNORE_SPEED=1 test - diff --git a/ocb_decrypt.c b/ocb_decrypt.c new file mode 100644 index 00000000..b7c785b3 --- /dev/null +++ b/ocb_decrypt.c @@ -0,0 +1,63 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* OCB Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef OCB_MODE + +int ocb_decrypt(ocb_state *ocb, const unsigned char *ct, unsigned char *pt) +{ + unsigned char Z[MAXBLOCKSIZE], tmp[MAXBLOCKSIZE]; + int err, x; + + _ARGCHK(ocb != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + + /* check if valid cipher */ + if ((err = cipher_is_valid(ocb->cipher)) != CRYPT_OK) { + return err; + } + _ARGCHK(cipher_descriptor[ocb->cipher].ecb_decrypt != NULL); + + /* check length */ + if (ocb->block_len != cipher_descriptor[ocb->cipher].block_length) { + return CRYPT_INVALID_ARG; + } + + /* Get Z[i] value */ + ocb_shift_xor(ocb, Z); + + /* xor ct in, encrypt, xor Z out */ + for (x = 0; x < ocb->block_len; x++) { + tmp[x] = ct[x] ^ Z[x]; + } + cipher_descriptor[ocb->cipher].ecb_decrypt(tmp, pt, &ocb->key); + for (x = 0; x < ocb->block_len; x++) { + pt[x] ^= Z[x]; + } + + /* compute checksum */ + for (x = 0; x < ocb->block_len; x++) { + ocb->checksum[x] ^= pt[x]; + } + + +#ifdef CLEAN_STACK + zeromem(Z, sizeof(Z)); + zeromem(tmp, sizeof(tmp)); +#endif + return CRYPT_OK; +} + +#endif + diff --git a/ocb_decrypt_verify_memory.c b/ocb_decrypt_verify_memory.c new file mode 100644 index 00000000..2e15b553 --- /dev/null +++ b/ocb_decrypt_verify_memory.c @@ -0,0 +1,65 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* OCB Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef OCB_MODE + +int ocb_decrypt_verify_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, + const unsigned char *ct, unsigned long ctlen, + unsigned char *pt, + const unsigned char *tag, unsigned long taglen, + int *res) +{ + int err; + ocb_state *ocb; + + _ARGCHK(key != NULL); + _ARGCHK(nonce != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(tag != NULL); + _ARGCHK(res != NULL); + + /* allocate memory */ + ocb = XMALLOC(sizeof(ocb_state)); + if (ocb == NULL) { + return CRYPT_MEM; + } + + if ((err = ocb_init(ocb, cipher, key, keylen, nonce)) != CRYPT_OK) { + goto __ERR; + } + + while (ctlen > (unsigned long)ocb->block_len) { + if ((err = ocb_decrypt(ocb, ct, pt)) != CRYPT_OK) { + goto __ERR; + } + ctlen -= ocb->block_len; + pt += ocb->block_len; + ct += ocb->block_len; + } + + err = ocb_done_decrypt(ocb, ct, ctlen, pt, tag, taglen, res); +__ERR: +#ifdef CLEAN_STACK + zeromem(ocb, sizeof(ocb_state)); +#endif + + XFREE(ocb); + + return err; +} + +#endif diff --git a/ocb_done_decrypt.c b/ocb_done_decrypt.c new file mode 100644 index 00000000..697beead --- /dev/null +++ b/ocb_done_decrypt.c @@ -0,0 +1,62 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* OCB Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef OCB_MODE + +int ocb_done_decrypt(ocb_state *ocb, + const unsigned char *ct, unsigned long ctlen, + unsigned char *pt, + const unsigned char *tag, unsigned long taglen, int *res) +{ + int err; + unsigned char *tagbuf; + unsigned long tagbuflen; + + _ARGCHK(ocb != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(tag != NULL); + _ARGCHK(res != NULL); + + /* default to failed */ + *res = 0; + + /* allocate memory */ + tagbuf = XMALLOC(MAXBLOCKSIZE); + if (tagbuf == NULL) { + return CRYPT_MEM; + } + + tagbuflen = MAXBLOCKSIZE; + if ((err = __ocb_done(ocb, ct, ctlen, pt, tagbuf, &tagbuflen, 1)) != CRYPT_OK) { + goto __ERR; + } + + if (taglen <= tagbuflen && memcmp(tagbuf, tag, taglen) == 0) { + *res = 1; + } + + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + zeromem(tagbuf, MAXBLOCKSIZE); +#endif + + XFREE(tagbuf); + + return err; +} + +#endif + diff --git a/ocb_done_encrypt.c b/ocb_done_encrypt.c new file mode 100644 index 00000000..209892eb --- /dev/null +++ b/ocb_done_encrypt.c @@ -0,0 +1,29 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* OCB Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef OCB_MODE + +int ocb_done_encrypt(ocb_state *ocb, const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, unsigned char *tag, unsigned long *taglen) +{ + _ARGCHK(ocb != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(tag != NULL); + _ARGCHK(taglen != NULL); + return __ocb_done(ocb, pt, ptlen, ct, tag, taglen, 0); +} + +#endif + diff --git a/ocb_encrypt.c b/ocb_encrypt.c new file mode 100644 index 00000000..d9519332 --- /dev/null +++ b/ocb_encrypt.c @@ -0,0 +1,56 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* OCB Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef OCB_MODE + +int ocb_encrypt(ocb_state *ocb, const unsigned char *pt, unsigned char *ct) +{ + unsigned char Z[MAXBLOCKSIZE], tmp[MAXBLOCKSIZE]; + int err, x; + + _ARGCHK(ocb != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + if ((err = cipher_is_valid(ocb->cipher)) != CRYPT_OK) { + return err; + } + if (ocb->block_len != cipher_descriptor[ocb->cipher].block_length) { + return CRYPT_INVALID_ARG; + } + + /* compute checksum */ + for (x = 0; x < ocb->block_len; x++) { + ocb->checksum[x] ^= pt[x]; + } + + /* Get Z[i] value */ + ocb_shift_xor(ocb, Z); + + /* xor pt in, encrypt, xor Z out */ + for (x = 0; x < ocb->block_len; x++) { + tmp[x] = pt[x] ^ Z[x]; + } + cipher_descriptor[ocb->cipher].ecb_encrypt(tmp, ct, &ocb->key); + for (x = 0; x < ocb->block_len; x++) { + ct[x] ^= Z[x]; + } + +#ifdef CLEAN_STACK + zeromem(Z, sizeof(Z)); + zeromem(tmp, sizeof(tmp)); +#endif + return CRYPT_OK; +} + +#endif diff --git a/ocb_encrypt_authenticate_memory.c b/ocb_encrypt_authenticate_memory.c new file mode 100644 index 00000000..73afd3fc --- /dev/null +++ b/ocb_encrypt_authenticate_memory.c @@ -0,0 +1,64 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* OCB Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef OCB_MODE + +int ocb_encrypt_authenticate_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen) +{ + int err; + ocb_state *ocb; + + _ARGCHK(key != NULL); + _ARGCHK(nonce != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(tag != NULL); + _ARGCHK(taglen != NULL); + + /* allocate ram */ + ocb = XMALLOC(sizeof(ocb_state)); + if (ocb == NULL) { + return CRYPT_MEM; + } + + if ((err = ocb_init(ocb, cipher, key, keylen, nonce)) != CRYPT_OK) { + goto __ERR; + } + + while (ptlen > (unsigned long)ocb->block_len) { + if ((err = ocb_encrypt(ocb, pt, ct)) != CRYPT_OK) { + goto __ERR; + } + ptlen -= ocb->block_len; + pt += ocb->block_len; + ct += ocb->block_len; + } + + err = ocb_done_encrypt(ocb, pt, ptlen, ct, tag, taglen); +__ERR: +#ifdef CLEAN_STACK + zeromem(ocb, sizeof(ocb_state)); +#endif + + XFREE(ocb); + + return err; +} + +#endif diff --git a/ocb_init.c b/ocb_init.c new file mode 100644 index 00000000..6087207f --- /dev/null +++ b/ocb_init.c @@ -0,0 +1,117 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* OCB Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef OCB_MODE + +static const struct { + int len; + unsigned char poly_div[MAXBLOCKSIZE], + poly_mul[MAXBLOCKSIZE]; +} polys[] = { +{ + 8, + { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B } +}, { + 16, + { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87 } +} +}; + +int ocb_init(ocb_state *ocb, int cipher, + const unsigned char *key, unsigned long keylen, const unsigned char *nonce) +{ + int poly, x, y, m, err; + + _ARGCHK(ocb != NULL); + _ARGCHK(key != NULL); + _ARGCHK(nonce != NULL); + + /* valid cipher? */ + if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { + return err; + } + + /* determine which polys to use */ + ocb->block_len = cipher_descriptor[cipher].block_length; + for (poly = 0; poly < (int)(sizeof(polys)/sizeof(polys[0])); poly++) { + if (polys[poly].len == ocb->block_len) { + break; + } + } + if (polys[poly].len != ocb->block_len) { + return CRYPT_INVALID_ARG; + } + + /* schedule the key */ + if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, &ocb->key)) != CRYPT_OK) { + return err; + } + + /* find L = E[0] */ + zeromem(ocb->L, ocb->block_len); + cipher_descriptor[cipher].ecb_encrypt(ocb->L, ocb->L, &ocb->key); + + /* find R = E[N xor L] */ + for (x = 0; x < ocb->block_len; x++) { + ocb->R[x] = ocb->L[x] ^ nonce[x]; + } + cipher_descriptor[cipher].ecb_encrypt(ocb->R, ocb->R, &ocb->key); + + /* find Ls[i] = L << i for i == 0..31 */ + XMEMCPY(ocb->Ls[0], ocb->L, ocb->block_len); + for (x = 1; x < 32; x++) { + m = ocb->Ls[x-1][0] >> 7; + for (y = 0; y < ocb->block_len-1; y++) { + ocb->Ls[x][y] = ((ocb->Ls[x-1][y] << 1) | (ocb->Ls[x-1][y+1] >> 7)) & 255; + } + ocb->Ls[x][ocb->block_len-1] = (ocb->Ls[x-1][ocb->block_len-1] << 1) & 255; + + if (m == 1) { + for (y = 0; y < ocb->block_len; y++) { + ocb->Ls[x][y] ^= polys[poly].poly_mul[y]; + } + } + } + + /* find Lr = L / x */ + m = ocb->L[ocb->block_len-1] & 1; + + /* shift right */ + for (x = ocb->block_len - 1; x > 0; x--) { + ocb->Lr[x] = ((ocb->L[x] >> 1) | (ocb->L[x-1] << 7)) & 255; + } + ocb->Lr[0] = ocb->L[0] >> 1; + + if (m == 1) { + for (x = 0; x < ocb->block_len; x++) { + ocb->Lr[x] ^= polys[poly].poly_div[x]; + } + } + + /* set Li, checksum */ + zeromem(ocb->Li, ocb->block_len); + zeromem(ocb->checksum, ocb->block_len); + + /* set other params */ + ocb->block_index = 1; + ocb->cipher = cipher; + + return CRYPT_OK; +} + +#endif diff --git a/ocb_ntz.c b/ocb_ntz.c new file mode 100644 index 00000000..fbf6bb60 --- /dev/null +++ b/ocb_ntz.c @@ -0,0 +1,29 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* OCB Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef OCB_MODE + +int ocb_ntz(unsigned long x) +{ + int c; + x &= 0xFFFFFFFFUL; + c = 0; + while ((x & 1) == 0) { + ++c; + x >>= 1; + } + return c; +} + +#endif diff --git a/ocb_shift_xor.c b/ocb_shift_xor.c new file mode 100644 index 00000000..ce931380 --- /dev/null +++ b/ocb_shift_xor.c @@ -0,0 +1,27 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* OCB Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef OCB_MODE + +void ocb_shift_xor(ocb_state *ocb, unsigned char *Z) +{ + int x, y; + y = ocb_ntz(ocb->block_index++); + for (x = 0; x < ocb->block_len; x++) { + ocb->Li[x] ^= ocb->Ls[y][x]; + Z[x] = ocb->Li[x] ^ ocb->R[x]; + } +} + +#endif diff --git a/ocb_test.c b/ocb_test.c new file mode 100644 index 00000000..0b5dafd2 --- /dev/null +++ b/ocb_test.c @@ -0,0 +1,226 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* OCB Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef OCB_MODE + +int ocb_test(void) +{ +#ifndef LTC_TEST + return CRYPT_NOP; +#else + static const struct { + int ptlen; + unsigned char key[16], nonce[16], pt[34], ct[34], tag[16]; + } tests[] = { + + /* OCB-AES-128-0B */ +{ + 0, + /* key */ + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, + /* nonce */ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, + /* pt */ + { 0 }, + /* ct */ + { 0 }, + /* tag */ + { 0x15, 0xd3, 0x7d, 0xd7, 0xc8, 0x90, 0xd5, 0xd6, + 0xac, 0xab, 0x92, 0x7b, 0xc0, 0xdc, 0x60, 0xee }, +}, + + + /* OCB-AES-128-3B */ +{ + 3, + /* key */ + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, + /* nonce */ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, + /* pt */ + { 0x00, 0x01, 0x02 }, + /* ct */ + { 0xfc, 0xd3, 0x7d }, + /* tag */ + { 0x02, 0x25, 0x47, 0x39, 0xa5, 0xe3, 0x56, 0x5a, + 0xe2, 0xdc, 0xd6, 0x2c, 0x65, 0x97, 0x46, 0xba }, +}, + + /* OCB-AES-128-16B */ +{ + 16, + /* key */ + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, + /* nonce */ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, + /* pt */ + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, + /* ct */ + { 0x37, 0xdf, 0x8c, 0xe1, 0x5b, 0x48, 0x9b, 0xf3, + 0x1d, 0x0f, 0xc4, 0x4d, 0xa1, 0xfa, 0xf6, 0xd6 }, + /* tag */ + { 0xdf, 0xb7, 0x63, 0xeb, 0xdb, 0x5f, 0x0e, 0x71, + 0x9c, 0x7b, 0x41, 0x61, 0x80, 0x80, 0x04, 0xdf }, +}, + + /* OCB-AES-128-20B */ +{ + 20, + /* key */ + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, + /* nonce */ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, + /* pt */ + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13 }, + /* ct */ + { 0x01, 0xa0, 0x75, 0xf0, 0xd8, 0x15, 0xb1, 0xa4, + 0xe9, 0xc8, 0x81, 0xa1, 0xbc, 0xff, 0xc3, 0xeb, + 0x70, 0x03, 0xeb, 0x55}, + /* tag */ + { 0x75, 0x30, 0x84, 0x14, 0x4e, 0xb6, 0x3b, 0x77, + 0x0b, 0x06, 0x3c, 0x2e, 0x23, 0xcd, 0xa0, 0xbb }, +}, + + /* OCB-AES-128-32B */ +{ + 32, + /* key */ + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, + /* nonce */ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, + /* pt */ + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }, + /* ct */ + { 0x01, 0xa0, 0x75, 0xf0, 0xd8, 0x15, 0xb1, 0xa4, + 0xe9, 0xc8, 0x81, 0xa1, 0xbc, 0xff, 0xc3, 0xeb, + 0x4a, 0xfc, 0xbb, 0x7f, 0xed, 0xc0, 0x8c, 0xa8, + 0x65, 0x4c, 0x6d, 0x30, 0x4d, 0x16, 0x12, 0xfa }, + + /* tag */ + { 0xc1, 0x4c, 0xbf, 0x2c, 0x1a, 0x1f, 0x1c, 0x3c, + 0x13, 0x7e, 0xad, 0xea, 0x1f, 0x2f, 0x2f, 0xcf }, +}, + + /* OCB-AES-128-34B */ +{ + 34, + /* key */ + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, + /* nonce */ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, + /* pt */ + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21 }, + /* ct */ + { 0x01, 0xa0, 0x75, 0xf0, 0xd8, 0x15, 0xb1, 0xa4, + 0xe9, 0xc8, 0x81, 0xa1, 0xbc, 0xff, 0xc3, 0xeb, + 0xd4, 0x90, 0x3d, 0xd0, 0x02, 0x5b, 0xa4, 0xaa, + 0x83, 0x7c, 0x74, 0xf1, 0x21, 0xb0, 0x26, 0x0f, + 0xa9, 0x5d }, + + /* tag */ + { 0xcf, 0x83, 0x41, 0xbb, 0x10, 0x82, 0x0c, 0xcf, + 0x14, 0xbd, 0xec, 0x56, 0xb8, 0xd7, 0xd6, 0xab }, +}, + +}; + + int err, x, idx, res; + unsigned long len; + unsigned char outct[MAXBLOCKSIZE], outtag[MAXBLOCKSIZE]; + + /* AES can be under rijndael or aes... try to find it */ + if ((idx = find_cipher("aes")) == -1) { + if ((idx = find_cipher("rijndael")) == -1) { + return CRYPT_NOP; + } + } + + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { + len = sizeof(outtag); + if ((err = ocb_encrypt_authenticate_memory(idx, tests[x].key, 16, + tests[x].nonce, tests[x].pt, tests[x].ptlen, outct, outtag, &len)) != CRYPT_OK) { + return err; + } + + if (memcmp(outtag, tests[x].tag, len) || memcmp(outct, tests[x].ct, tests[x].ptlen)) { +#if 0 + unsigned long y; + printf("\n\nFailure: \nCT:\n"); + for (y = 0; y < (unsigned long)tests[x].ptlen; ) { + printf("0x%02x", outct[y]); + if (y < (unsigned long)(tests[x].ptlen-1)) printf(", "); + if (!(++y % 8)) printf("\n"); + } + printf("\nTAG:\n"); + for (y = 0; y < len; ) { + printf("0x%02x", outtag[y]); + if (y < len-1) printf(", "); + if (!(++y % 8)) printf("\n"); + } +#endif + return CRYPT_FAIL_TESTVECTOR; + } + + if ((err = ocb_decrypt_verify_memory(idx, tests[x].key, 16, tests[x].nonce, outct, tests[x].ptlen, + outct, tests[x].tag, len, &res)) != CRYPT_OK) { + return err; + } + if ((res != 1) || memcmp(tests[x].pt, outct, tests[x].ptlen)) { +#if 0 + unsigned long y; + printf("\n\nFailure-decrypt: \nPT:\n"); + for (y = 0; y < (unsigned long)tests[x].ptlen; ) { + printf("0x%02x", outct[y]); + if (y < (unsigned long)(tests[x].ptlen-1)) printf(", "); + if (!(++y % 8)) printf("\n"); + } + printf("\nres = %d\n\n", res); +#endif + } + } + return CRYPT_OK; +#endif /* LTC_TEST */ +} + +#endif /* OCB_MODE */ + + +/* some comments + + -- it's hard to seek + -- hard to stream [you can't emit ciphertext until full block] + -- The setup is somewhat complicated... +*/ diff --git a/ofb_decrypt.c b/ofb_decrypt.c new file mode 100644 index 00000000..95319692 --- /dev/null +++ b/ofb_decrypt.c @@ -0,0 +1,26 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef OFB + +int ofb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_OFB *ofb) +{ + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(ofb != NULL); + return ofb_encrypt(ct, pt, len, ofb); +} + + +#endif + + diff --git a/ofb_encrypt.c b/ofb_encrypt.c new file mode 100644 index 00000000..d5d06f37 --- /dev/null +++ b/ofb_encrypt.c @@ -0,0 +1,41 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef OFB + +int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_OFB *ofb) +{ + int err; + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(ofb != NULL); + if ((err = cipher_is_valid(ofb->cipher)) != CRYPT_OK) { + return err; + } + + /* is blocklen/padlen valid? */ + if (ofb->blocklen < 0 || ofb->blocklen > (int)sizeof(ofb->IV) || + ofb->padlen < 0 || ofb->padlen > (int)sizeof(ofb->IV)) { + return CRYPT_INVALID_ARG; + } + + while (len-- > 0) { + if (ofb->padlen == ofb->blocklen) { + cipher_descriptor[ofb->cipher].ecb_encrypt(ofb->IV, ofb->IV, &ofb->key); + ofb->padlen = 0; + } + *ct++ = *pt++ ^ ofb->IV[ofb->padlen++]; + } + return CRYPT_OK; +} + +#endif diff --git a/ofb_getiv.c b/ofb_getiv.c new file mode 100644 index 00000000..fee57683 --- /dev/null +++ b/ofb_getiv.c @@ -0,0 +1,30 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef OFB + +int ofb_getiv(unsigned char *IV, unsigned long *len, symmetric_OFB *ofb) +{ + _ARGCHK(IV != NULL); + _ARGCHK(len != NULL); + _ARGCHK(ofb != NULL); + if ((unsigned long)ofb->blocklen > *len) { + return CRYPT_BUFFER_OVERFLOW; + } + XMEMCPY(IV, ofb->IV, ofb->blocklen); + *len = ofb->blocklen; + + return CRYPT_OK; +} + +#endif diff --git a/ofb_setiv.c b/ofb_setiv.c new file mode 100644 index 00000000..6683bc72 --- /dev/null +++ b/ofb_setiv.c @@ -0,0 +1,38 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef OFB + +int ofb_setiv(const unsigned char *IV, unsigned long len, symmetric_OFB *ofb) +{ + int err; + + _ARGCHK(IV != NULL); + _ARGCHK(ofb != NULL); + + if ((err = cipher_is_valid(ofb->cipher)) != CRYPT_OK) { + return err; + } + + if (len != (unsigned long)ofb->blocklen) { + return CRYPT_INVALID_ARG; + } + + /* force next block */ + ofb->padlen = 0; + cipher_descriptor[ofb->cipher].ecb_encrypt(IV, ofb->IV, &ofb->key); + return CRYPT_OK; +} + +#endif + diff --git a/ofb_start.c b/ofb_start.c new file mode 100644 index 00000000..45fcc702 --- /dev/null +++ b/ofb_start.c @@ -0,0 +1,40 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef OFB + +int ofb_start(int cipher, const unsigned char *IV, const unsigned char *key, + int keylen, int num_rounds, symmetric_OFB *ofb) +{ + int x, err; + + _ARGCHK(IV != NULL); + _ARGCHK(key != NULL); + _ARGCHK(ofb != NULL); + + if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { + return err; + } + + /* copy details */ + ofb->cipher = cipher; + ofb->blocklen = cipher_descriptor[cipher].block_length; + for (x = 0; x < ofb->blocklen; x++) { + ofb->IV[x] = IV[x]; + } + + /* init the cipher */ + ofb->padlen = ofb->blocklen; + return cipher_descriptor[cipher].setup(key, keylen, num_rounds, &ofb->key); +} + +#endif diff --git a/omac_done.c b/omac_done.c new file mode 100644 index 00000000..f065a1da --- /dev/null +++ b/omac_done.c @@ -0,0 +1,66 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* OMAC1 Support by Tom St Denis (for 64 and 128 bit block ciphers only) */ +#include "mycrypt.h" + +#ifdef OMAC + +int omac_done(omac_state *state, unsigned char *out, unsigned long *outlen) +{ + int err, mode, x; + + _ARGCHK(state != NULL); + _ARGCHK(out != NULL); + if ((err = cipher_is_valid(state->cipher_idx)) != CRYPT_OK) { + return err; + } + + if ((state->buflen > (int)sizeof(state->block)) || (state->buflen < 0) || + (state->blklen > (int)sizeof(state->block)) || (state->buflen > state->blklen)) { + return CRYPT_INVALID_ARG; + } + + /* figure out mode */ + if (state->buflen != state->blklen) { + /* add the 0x80 byte */ + state->block[state->buflen++] = 0x80; + + /* pad with 0x00 */ + while (state->buflen < state->blklen) { + state->block[state->buflen++] = 0x00; + } + mode = 1; + } else { + mode = 0; + } + + /* now xor prev + Lu[mode] */ + for (x = 0; x < state->blklen; x++) { + state->block[x] ^= state->prev[x] ^ state->Lu[mode][x]; + } + + /* encrypt it */ + cipher_descriptor[state->cipher_idx].ecb_encrypt(state->block, state->block, &state->key); + + /* output it */ + for (x = 0; x < state->blklen && (unsigned long)x < *outlen; x++) { + out[x] = state->block[x]; + } + *outlen = x; + +#ifdef CLEAN_STACK + zeromem(state, sizeof(*state)); +#endif + return CRYPT_OK; +} + +#endif + diff --git a/omac_file.c b/omac_file.c new file mode 100644 index 00000000..09d2d4b0 --- /dev/null +++ b/omac_file.c @@ -0,0 +1,65 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* OMAC1 Support by Tom St Denis (for 64 and 128 bit block ciphers only) */ +#include "mycrypt.h" + +#ifdef OMAC + +int omac_file(int cipher, + const unsigned char *key, unsigned long keylen, + const char *filename, + unsigned char *out, unsigned long *outlen) +{ +#ifdef NO_FILE + return CRYPT_NOP; +#else + int err, x; + omac_state omac; + FILE *in; + unsigned char buf[512]; + + _ARGCHK(key != NULL); + _ARGCHK(filename != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + + in = fopen(filename, "rb"); + if (in == NULL) { + return CRYPT_FILE_NOTFOUND; + } + + if ((err = omac_init(&omac, cipher, key, keylen)) != CRYPT_OK) { + fclose(in); + return err; + } + + do { + x = fread(buf, 1, sizeof(buf), in); + if ((err = omac_process(&omac, buf, x)) != CRYPT_OK) { + fclose(in); + return err; + } + } while (x == sizeof(buf)); + fclose(in); + + if ((err = omac_done(&omac, out, outlen)) != CRYPT_OK) { + return err; + } + +#ifdef CLEAN_STACK + zeromem(buf, sizeof(buf)); +#endif + + return CRYPT_OK; +#endif +} + +#endif diff --git a/src/mac/omac/omac_init.c b/omac_init.c similarity index 63% rename from src/mac/omac/omac_init.c rename to omac_init.c index 1b75505a..cc933d04 100644 --- a/src/mac/omac/omac_init.c +++ b/omac_init.c @@ -1,41 +1,30 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* OMAC1 Support by Tom St Denis (for 64 and 128 bit block ciphers only) */ +#include "mycrypt.h" -/** - @file omac_init.c - OMAC1 support, initialize state, by Tom St Denis -*/ +#ifdef OMAC - -#ifdef LTC_OMAC - -/** - Initialize an OMAC state - @param omac The OMAC state to initialize - @param cipher The index of the desired cipher - @param key The secret key - @param keylen The length of the secret key (octets) - @return CRYPT_OK if successful -*/ int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned long keylen) { int err, x, y, mask, msb, len; - LTC_ARGCHK(omac != NULL); - LTC_ARGCHK(key != NULL); + _ARGCHK(omac != NULL); + _ARGCHK(key != NULL); /* schedule the key */ if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { return err; } -#ifdef LTC_FAST - if (cipher_descriptor[cipher].block_length % sizeof(LTC_FAST_TYPE)) { - return CRYPT_INVALID_ARG; - } -#endif - /* now setup the system */ switch (cipher_descriptor[cipher].block_length) { case 8: mask = 0x1B; @@ -47,7 +36,7 @@ int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned l default: return CRYPT_INVALID_ARG; } - if ((err = ecb_start(cipher, key, keylen, 0, &omac->key)) != CRYPT_OK) { + if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, &omac->key)) != CRYPT_OK) { return err; } @@ -55,9 +44,7 @@ int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned l /* first calc L which is Ek(0) */ zeromem(omac->Lu[0], cipher_descriptor[cipher].block_length); - if ((err = ecb_encrypt_block(omac->Lu[0], omac->Lu[0], &omac->key)) != CRYPT_OK) { - return err; - } + cipher_descriptor[cipher].ecb_encrypt(omac->Lu[0], omac->Lu[0], &omac->key); /* now do the mults, whoopy! */ for (x = 0; x < 2; x++) { @@ -69,7 +56,7 @@ int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned l omac->Lu[x][y] = ((omac->Lu[x][y] << 1) | (omac->Lu[x][y+1] >> 7)) & 255; } omac->Lu[x][len - 1] = ((omac->Lu[x][len - 1] << 1) ^ (msb ? mask : 0)) & 255; - + /* copy up as require */ if (x == 0) { XMEMCPY(omac->Lu[1], omac->Lu[0], sizeof(omac->Lu[0])); @@ -77,6 +64,7 @@ int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned l } /* setup state */ + omac->cipher_idx = cipher; omac->buflen = 0; omac->blklen = len; zeromem(omac->prev, sizeof(omac->prev)); diff --git a/omac_memory.c b/omac_memory.c new file mode 100644 index 00000000..ca194c9e --- /dev/null +++ b/omac_memory.c @@ -0,0 +1,56 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* OMAC1 Support by Tom St Denis (for 64 and 128 bit block ciphers only) */ +#include "mycrypt.h" + +#ifdef OMAC + +int omac_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *msg, unsigned long msglen, + unsigned char *out, unsigned long *outlen) +{ + int err; + omac_state *omac; + + _ARGCHK(key != NULL); + _ARGCHK(msg != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + + /* allocate ram for omac state */ + omac = XMALLOC(sizeof(omac_state)); + if (omac == NULL) { + return CRYPT_MEM; + } + + /* omac process the message */ + if ((err = omac_init(omac, cipher, key, keylen)) != CRYPT_OK) { + goto __ERR; + } + if ((err = omac_process(omac, msg, msglen)) != CRYPT_OK) { + goto __ERR; + } + if ((err = omac_done(omac, out, outlen)) != CRYPT_OK) { + goto __ERR; + } + + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + zeromem(omac, sizeof(omac_state)); +#endif + + XFREE(omac); + return err; +} + +#endif diff --git a/omac_process.c b/omac_process.c new file mode 100644 index 00000000..08173594 --- /dev/null +++ b/omac_process.c @@ -0,0 +1,53 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* OMAC1 Support by Tom St Denis (for 64 and 128 bit block ciphers only) */ +#include "mycrypt.h" + +#ifdef OMAC + +int omac_process(omac_state *state, const unsigned char *buf, unsigned long len) +{ + int err, n, x; + + _ARGCHK(state != NULL); + _ARGCHK(buf != NULL); + if ((err = cipher_is_valid(state->cipher_idx)) != CRYPT_OK) { + return err; + } + + if ((state->buflen > (int)sizeof(state->block)) || (state->buflen < 0) || + (state->blklen > (int)sizeof(state->block)) || (state->buflen > state->blklen)) { + return CRYPT_INVALID_ARG; + } + + while (len != 0) { + /* ok if the block is full we xor in prev, encrypt and replace prev */ + if (state->buflen == state->blklen) { + for (x = 0; x < state->blklen; x++) { + state->block[x] ^= state->prev[x]; + } + cipher_descriptor[state->cipher_idx].ecb_encrypt(state->block, state->prev, &state->key); + state->buflen = 0; + } + + /* add bytes */ + n = MIN(len, (unsigned long)(state->blklen - state->buflen)); + XMEMCPY(state->block + state->buflen, buf, n); + state->buflen += n; + len -= n; + buf += n; + } + + return CRYPT_OK; +} + +#endif + diff --git a/src/mac/omac/omac_test.c b/omac_test.c similarity index 60% rename from src/mac/omac/omac_test.c rename to omac_test.c index 223d3244..2d50d9a9 100644 --- a/src/mac/omac/omac_test.c +++ b/omac_test.c @@ -1,93 +1,95 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* OMAC1 Support by Tom St Denis (for 64 and 128 bit block ciphers only) */ +#include "mycrypt.h" -/** - @file omac_test.c - OMAC1 support, self-test, by Tom St Denis -*/ +#ifdef OMAC -#ifdef LTC_OMAC - -/** - Test the OMAC setup - @return CRYPT_OK if successful, CRYPT_NOP if tests have been disabled -*/ int omac_test(void) { #if !defined(LTC_TEST) return CRYPT_NOP; #else - static const struct { + static const struct { int keylen, msglen; unsigned char key[16], msg[64], tag[16]; } tests[] = { { 16, 0, - { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, + { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c }, { 0x00 }, { 0xbb, 0x1d, 0x69, 0x29, 0xe9, 0x59, 0x37, 0x28, 0x7f, 0xa3, 0x7d, 0x12, 0x9b, 0x75, 0x67, 0x46 } }, - { 16, 16, - { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, + { 16, 16, + { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c }, { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a }, - { 0x07, 0x0a, 0x16, 0xb4, 0x6b, 0x4d, 0x41, 0x44, + { 0x07, 0x0a, 0x16, 0xb4, 0x6b, 0x4d, 0x41, 0x44, 0xf7, 0x9b, 0xdd, 0x9d, 0xd0, 0x4a, 0x28, 0x7c } }, - { 16, 40, - { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, + { 16, 40, + { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c }, { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, - 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, + 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11 }, { 0xdf, 0xa6, 0x67, 0x47, 0xde, 0x9a, 0xe6, 0x30, 0x30, 0xca, 0x32, 0x61, 0x14, 0x97, 0xc8, 0x27 } }, - { 16, 64, - { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, + { 16, 64, + { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c }, { 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, - 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, + 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 }, - { 0x51, 0xf0, 0xbe, 0xbf, 0x7e, 0x3b, 0x9d, 0x92, + { 0x51, 0xf0, 0xbe, 0xbf, 0x7e, 0x3b, 0x9d, 0x92, 0xfc, 0x49, 0x74, 0x17, 0x79, 0x36, 0x3c, 0xfe } } }; unsigned char out[16]; - int x, err, idx; + int x, y, err, idx; unsigned long len; - /* AES can be under rijndael or aes... try to find it */ + /* AES can be under rijndael or aes... try to find it */ if ((idx = find_cipher("aes")) == -1) { if ((idx = find_cipher("rijndael")) == -1) { return CRYPT_NOP; } } - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { - len = sizeof(out); + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { + len = sizeof(out); if ((err = omac_memory(idx, tests[x].key, tests[x].keylen, tests[x].msg, tests[x].msglen, out, &len)) != CRYPT_OK) { return err; } - if (ltc_compare_testvector(out, len, tests[x].tag, sizeof(tests[x].tag), "OMAC", x) != 0) { + if (memcmp(out, tests[x].tag, 16) != 0) { + printf("\n\nTag: "); + for (y = 0; y < 16; y++) printf("%02x", out[y]); printf("\n\n"); return CRYPT_FAIL_TESTVECTOR; } } return CRYPT_OK; #endif -} +} #endif diff --git a/packet_store_header.c b/packet_store_header.c new file mode 100644 index 00000000..d750718a --- /dev/null +++ b/packet_store_header.c @@ -0,0 +1,29 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef PACKET + +void packet_store_header(unsigned char *dst, int section, int subsection) +{ + _ARGCHK(dst != NULL); + + /* store version number */ + dst[0] = (unsigned char)(CRYPT&255); + dst[1] = (unsigned char)((CRYPT>>8)&255); + + /* store section and subsection */ + dst[2] = (unsigned char)(section & 255); + dst[3] = (unsigned char)(subsection & 255); + +} + +#endif diff --git a/packet_valid_header.c b/packet_valid_header.c new file mode 100644 index 00000000..7fda5073 --- /dev/null +++ b/packet_valid_header.c @@ -0,0 +1,37 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef PACKET + +int packet_valid_header(unsigned char *src, int section, int subsection) +{ + unsigned long ver; + + _ARGCHK(src != NULL); + + /* check version */ + ver = ((unsigned long)src[0]) | ((unsigned long)src[1] << 8U); + if (CRYPT < ver) { + return CRYPT_INVALID_PACKET; + } + + /* check section and subsection */ + if (section != (int)src[2] || subsection != (int)src[3]) { + return CRYPT_INVALID_PACKET; + } + + return CRYPT_OK; +} + +#endif + + diff --git a/pkcs_1_i2osp.c b/pkcs_1_i2osp.c new file mode 100644 index 00000000..1a7faddb --- /dev/null +++ b/pkcs_1_i2osp.c @@ -0,0 +1,40 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +/* Integer to Octet I2OSP -- Tom St Denis */ + +#ifdef PKCS_1 + +/* always stores the same # of bytes, pads with leading zero bytes + as required + */ +int pkcs_1_i2osp(mp_int *n, unsigned long modulus_len, unsigned char *out) +{ + int err; + unsigned long size; + + size = mp_unsigned_bin_size(n); + + if (size > modulus_len) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* store it */ + zeromem(out, modulus_len); + if ((err = mp_to_unsigned_bin(n, out+(modulus_len-size))) != MP_OKAY) { + return mpi_to_ltc_error(err); + } + return CRYPT_OK; +} + +#endif /* PKCS_1 */ + diff --git a/pkcs_1_mgf1.c b/pkcs_1_mgf1.c new file mode 100644 index 00000000..3add9902 --- /dev/null +++ b/pkcs_1_mgf1.c @@ -0,0 +1,89 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +/* The Mask Generation Function (MGF1) for PKCS #1 -- Tom St Denis */ + +#ifdef PKCS_1 + +int pkcs_1_mgf1(const unsigned char *seed, unsigned long seedlen, + int hash_idx, + unsigned char *mask, unsigned long masklen) +{ + unsigned long hLen, counter, x; + int err; + hash_state *md; + unsigned char *buf; + + _ARGCHK(seed != NULL); + _ARGCHK(mask != NULL); + + /* ensure valid hash */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + /* get hash output size */ + hLen = hash_descriptor[hash_idx].hashsize; + + /* allocate memory */ + md = XMALLOC(sizeof(hash_state)); + buf = XMALLOC(hLen); + if (md == NULL || buf == NULL) { + if (md != NULL) { + XFREE(md); + } + if (buf != NULL) { + XFREE(buf); + } + return CRYPT_MEM; + } + + /* start counter */ + counter = 0; + + while (masklen > 0) { + /* handle counter */ + STORE32H(counter, buf); + ++counter; + + /* get hash of seed || counter */ + hash_descriptor[hash_idx].init(md); + if ((err = hash_descriptor[hash_idx].process(md, seed, seedlen)) != CRYPT_OK) { + goto __ERR; + } + if ((err = hash_descriptor[hash_idx].process(md, buf, 4)) != CRYPT_OK) { + goto __ERR; + } + if ((err = hash_descriptor[hash_idx].done(md, buf)) != CRYPT_OK) { + goto __ERR; + } + + /* store it */ + for (x = 0; x < hLen && masklen > 0; x++, masklen--) { + *mask++ = buf[x]; + } + } + + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + zeromem(buf, hLen); + zeromem(md, sizeof(hash_state)); +#endif + + XFREE(buf); + XFREE(md); + + return err; +} + +#endif /* PKCS_1 */ diff --git a/pkcs_1_oaep_decode.c b/pkcs_1_oaep_decode.c new file mode 100644 index 00000000..2275bb31 --- /dev/null +++ b/pkcs_1_oaep_decode.c @@ -0,0 +1,172 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +/* OAEP Padding for PKCS #1 -- Tom St Denis */ + +#ifdef PKCS_1 + +int pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, + const unsigned char *lparam, unsigned long lparamlen, + unsigned long modulus_bitlen, int hash_idx, + unsigned char *out, unsigned long *outlen, + int *res) +{ + unsigned char *DB, *seed, *mask; + unsigned long hLen, x, y, modulus_len; + int err; + + _ARGCHK(msg != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + _ARGCHK(res != NULL); + + /* default to invalid packet */ + *res = 0; + + /* test valid hash */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + hLen = hash_descriptor[hash_idx].hashsize; + modulus_len = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); + + /* allocate ram for DB/mask/salt of size modulus_len */ + DB = XMALLOC(modulus_len); + mask = XMALLOC(modulus_len); + seed = XMALLOC(modulus_len); + if (DB == NULL || mask == NULL || seed == NULL) { + if (DB != NULL) { + XFREE(DB); + } + if (mask != NULL) { + XFREE(mask); + } + if (seed != NULL) { + XFREE(seed); + } + return CRYPT_MEM; + } + + + /* test message size */ + if (msglen != modulus_len) { + err = CRYPT_PK_INVALID_SIZE; + goto __ERR; + } + + /* ok so it's now in the form + + 0x00 || maskedseed || maskedDB + + 1 || hLen || modulus_len - hLen - 1 + + */ + + /* must have leading 0x00 byte */ + if (msg[0] != 0x00) { + err = CRYPT_OK; + goto __ERR; + } + + /* now read the masked seed */ + for (x = 1, y = 0; y < hLen; y++) { + seed[y] = msg[x++]; + } + + /* now read the masked DB */ + for (y = 0; y < modulus_len - hLen - 1; y++) { + DB[y] = msg[x++]; + } + + /* compute MGF1 of maskedDB (hLen) */ + if ((err = pkcs_1_mgf1(DB, modulus_len - hLen - 1, hash_idx, mask, hLen)) != CRYPT_OK) { + goto __ERR; + } + + /* XOR against seed */ + for (y = 0; y < hLen; y++) { + seed[y] ^= mask[y]; + } + + /* compute MGF1 of seed (k - hlen - 1) */ + if ((err = pkcs_1_mgf1(seed, hLen, hash_idx, mask, modulus_len - hLen - 1)) != CRYPT_OK) { + goto __ERR; + } + + /* xor against DB */ + for (y = 0; y < (modulus_len - hLen - 1); y++) { + DB[y] ^= mask[y]; + } + + /* now DB == lhash || PS || 0x01 || M, PS == k - mlen - 2hlen - 2 zeroes */ + + /* compute lhash and store it in seed [reuse temps!] */ + x = modulus_len; + if (lparam != NULL) { + if ((err = hash_memory(hash_idx, lparam, lparamlen, seed, &x)) != CRYPT_OK) { + goto __ERR; + } + } else { + /* can't pass hash_memory a NULL so use DB with zero length */ + if ((err = hash_memory(hash_idx, DB, 0, seed, &x)) != CRYPT_OK) { + goto __ERR; + } + } + + /* compare the lhash'es */ + if (memcmp(seed, DB, hLen) != 0) { + err = CRYPT_OK; + goto __ERR; + } + + /* now zeroes before a 0x01 */ + for (x = hLen; x < (modulus_len - hLen - 1) && DB[x] == 0x00; x++) { + /* step... */ + } + + /* error out if wasn't 0x01 */ + if (x == (modulus_len - hLen - 1) || DB[x] != 0x01) { + err = CRYPT_OK; + goto __ERR; + } + + /* rest is the message (and skip 0x01) */ + if ((modulus_len - hLen - 1) - ++x > *outlen) { + err = CRYPT_BUFFER_OVERFLOW; + goto __ERR; + } + + /* copy message */ + *outlen = (modulus_len - hLen - 1) - x; + for (y = 0; x != (modulus_len - hLen - 1); ) { + out[y++] = DB[x++]; + } + + /* valid packet */ + *res = 1; + + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + zeromem(DB, modulus_len); + zeromem(seed, modulus_len); + zeromem(mask, modulus_len); +#endif + + XFREE(seed); + XFREE(mask); + XFREE(DB); + + return err; +} + +#endif /* PKCS_1 */ diff --git a/pkcs_1_oaep_encode.c b/pkcs_1_oaep_encode.c new file mode 100644 index 00000000..56816e61 --- /dev/null +++ b/pkcs_1_oaep_encode.c @@ -0,0 +1,154 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +/* OAEP Padding for PKCS #1 -- Tom St Denis */ + +#ifdef PKCS_1 + +int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, + const unsigned char *lparam, unsigned long lparamlen, + unsigned long modulus_bitlen, prng_state *prng, + int prng_idx, int hash_idx, + unsigned char *out, unsigned long *outlen) +{ + unsigned char *DB, *seed, *mask; + unsigned long hLen, x, y, modulus_len; + int err; + + _ARGCHK(msg != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + + /* test valid hash */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + /* valid prng */ + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + + hLen = hash_descriptor[hash_idx].hashsize; + modulus_len = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); + + /* allocate ram for DB/mask/salt of size modulus_len */ + DB = XMALLOC(modulus_len); + mask = XMALLOC(modulus_len); + seed = XMALLOC(modulus_len); + if (DB == NULL || mask == NULL || seed == NULL) { + if (DB != NULL) { + XFREE(DB); + } + if (mask != NULL) { + XFREE(mask); + } + if (seed != NULL) { + XFREE(seed); + } + return CRYPT_MEM; + } + + /* test message size */ + if (msglen > (modulus_len - 2*hLen - 2)) { + err = CRYPT_PK_INVALID_SIZE; + goto __ERR; + } + + /* get lhash */ + /* DB == lhash || PS || 0x01 || M, PS == k - mlen - 2hlen - 2 zeroes */ + x = modulus_len; + if (lparam != NULL) { + if ((err = hash_memory(hash_idx, lparam, lparamlen, DB, &x)) != CRYPT_OK) { + goto __ERR; + } + } else { + /* can't pass hash_memory a NULL so use DB with zero length */ + if ((err = hash_memory(hash_idx, DB, 0, DB, &x)) != CRYPT_OK) { + goto __ERR; + } + } + + /* append PS then 0x01 (to lhash) */ + x = hLen; + y = modulus_len - msglen - 2*hLen - 2; + while (y--) { + DB[x++] = 0x00; + } + DB[x++] = 0x01; + + /* message */ + y = msglen; + while (y--) { + DB[x++] = *msg++; + } + + /* now choose a random seed */ + if (prng_descriptor[prng_idx].read(seed, hLen, prng) != hLen) { + err = CRYPT_ERROR_READPRNG; + goto __ERR; + } + + /* compute MGF1 of seed (k - hlen - 1) */ + if ((err = pkcs_1_mgf1(seed, hLen, hash_idx, mask, modulus_len - hLen - 1)) != CRYPT_OK) { + goto __ERR; + } + + /* xor against DB */ + for (y = 0; y < (modulus_len - hLen - 1); y++) { + DB[y] ^= mask[y]; + } + + /* compute MGF1 of maskedDB (hLen) */ + if ((err = pkcs_1_mgf1(DB, modulus_len - hLen - 1, hash_idx, mask, hLen)) != CRYPT_OK) { + goto __ERR; + } + + /* XOR against seed */ + for (y = 0; y < hLen; y++) { + seed[y] ^= mask[y]; + } + + /* create string of length modulus_len */ + if (*outlen < modulus_len) { + err = CRYPT_BUFFER_OVERFLOW; + goto __ERR; + } + + /* start output which is 0x00 || maskedSeed || maskedDB */ + x = 0; + out[x++] = 0x00; + for (y = 0; y < hLen; y++) { + out[x++] = seed[y]; + } + for (y = 0; y < modulus_len - hLen - 1; y++) { + out[x++] = DB[y]; + } + *outlen = x; + + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + zeromem(DB, modulus_len); + zeromem(seed, modulus_len); + zeromem(mask, modulus_len); +#endif + + XFREE(seed); + XFREE(mask); + XFREE(DB); + + return err; +} + +#endif /* PKCS_1 */ + diff --git a/pkcs_1_os2ip.c b/pkcs_1_os2ip.c new file mode 100644 index 00000000..cff881e8 --- /dev/null +++ b/pkcs_1_os2ip.c @@ -0,0 +1,27 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +/* Octet to Integer OS2IP -- Tom St Denis */ +#ifdef PKCS_1 + +int pkcs_1_os2ip(mp_int *n, unsigned char *in, unsigned long inlen) +{ + int err; + /* read it */ + if ((err = mp_read_unsigned_bin(n, in, inlen)) != MP_OKAY) { + return mpi_to_ltc_error(err); + } + return CRYPT_OK; +} + +#endif /* PKCS_1 */ + diff --git a/pkcs_1_pss_decode.c b/pkcs_1_pss_decode.c new file mode 100644 index 00000000..ff01b768 --- /dev/null +++ b/pkcs_1_pss_decode.c @@ -0,0 +1,158 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +/* PKCS #1 PSS Signature Padding -- Tom St Denis */ + +#ifdef PKCS_1 + +int pkcs_1_pss_decode(const unsigned char *msghash, unsigned long msghashlen, + const unsigned char *sig, unsigned long siglen, + unsigned long saltlen, int hash_idx, + unsigned long modulus_bitlen, int *res) +{ + unsigned char *DB, *mask, *salt, *hash; + unsigned long x, y, hLen, modulus_len; + int err; + hash_state md; + + _ARGCHK(msghash != NULL); + _ARGCHK(res != NULL); + + /* default to invalid */ + *res = 0; + + /* ensure hash is valid */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + hLen = hash_descriptor[hash_idx].hashsize; + modulus_len = (modulus_bitlen>>3) + (modulus_bitlen & 7 ? 1 : 0); + + /* allocate ram for DB/mask/salt/hash of size modulus_len */ + DB = XMALLOC(modulus_len); + mask = XMALLOC(modulus_len); + salt = XMALLOC(modulus_len); + hash = XMALLOC(modulus_len); + if (DB == NULL || mask == NULL || salt == NULL || hash == NULL) { + if (DB != NULL) { + XFREE(DB); + } + if (mask != NULL) { + XFREE(mask); + } + if (salt != NULL) { + XFREE(salt); + } + if (hash != NULL) { + XFREE(hash); + } + return CRYPT_MEM; + } + + /* check sizes */ + if ((saltlen > modulus_len) || + (modulus_len < hLen + saltlen + 2) || (siglen != modulus_len)) { + err = CRYPT_INVALID_ARG; + goto __ERR; + } + + /* ensure the 0xBC byte */ + if (sig[siglen-1] != 0xBC) { + err = CRYPT_OK; + goto __ERR; + } + + /* copy out the DB */ + for (x = 0; x < modulus_len - hLen - 1; x++) { + DB[x] = sig[x]; + } + + /* copy out the hash */ + for (y = 0; y < hLen; y++) { + hash[y] = sig[x++]; + } + + /* check the MSB */ + if ((sig[0] & ~(0xFF >> ((modulus_len<<3) - (modulus_bitlen-1)))) != 0) { + err = CRYPT_OK; + goto __ERR; + } + + /* generate mask of length modulus_len - hLen - 1 from hash */ + if ((err = pkcs_1_mgf1(hash, hLen, hash_idx, mask, modulus_len - hLen - 1)) != CRYPT_OK) { + goto __ERR; + } + + /* xor against DB */ + for (y = 0; y < (modulus_len - hLen - 1); y++) { + DB[y] ^= mask[y]; + } + + /* now clear the first byte [make sure smaller than modulus] */ + DB[0] &= 0xFF >> ((modulus_len<<3) - (modulus_bitlen-1)); + + /* DB = PS || 0x01 || salt, PS == modulus_len - saltlen - hLen - 2 zero bytes */ + + /* check for zeroes and 0x01 */ + for (x = 0; x < modulus_len - saltlen - hLen - 2; x++) { + if (DB[x] != 0x00) { + err = CRYPT_OK; + goto __ERR; + } + } + + /* check for the 0x01 */ + if (DB[x++] != 0x01) { + err = CRYPT_OK; + goto __ERR; + } + + /* M = (eight) 0x00 || msghash || salt, mask = H(M) */ + hash_descriptor[hash_idx].init(&md); + zeromem(mask, 8); + if ((err = hash_descriptor[hash_idx].process(&md, mask, 8)) != CRYPT_OK) { + goto __ERR; + } + if ((err = hash_descriptor[hash_idx].process(&md, msghash, msghashlen)) != CRYPT_OK) { + goto __ERR; + } + if ((err = hash_descriptor[hash_idx].process(&md, DB+x, saltlen)) != CRYPT_OK) { + goto __ERR; + } + if ((err = hash_descriptor[hash_idx].done(&md, mask)) != CRYPT_OK) { + goto __ERR; + } + + /* mask == hash means valid signature */ + if (memcmp(mask, hash, hLen) == 0) { + *res = 1; + } + + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + zeromem(DB, modulus_len); + zeromem(mask, modulus_len); + zeromem(salt, modulus_len); + zeromem(hash, modulus_len); +#endif + + XFREE(hash); + XFREE(salt); + XFREE(mask); + XFREE(DB); + + return err; +} + +#endif /* PKCS_1 */ diff --git a/pkcs_1_pss_encode.c b/pkcs_1_pss_encode.c new file mode 100644 index 00000000..4ee1d51c --- /dev/null +++ b/pkcs_1_pss_encode.c @@ -0,0 +1,153 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +/* PKCS #1 PSS Signature Padding -- Tom St Denis */ + +#ifdef PKCS_1 + +int pkcs_1_pss_encode(const unsigned char *msghash, unsigned long msghashlen, + unsigned long saltlen, prng_state *prng, + int prng_idx, int hash_idx, + unsigned long modulus_bitlen, + unsigned char *out, unsigned long *outlen) +{ + unsigned char *DB, *mask, *salt, *hash; + unsigned long x, y, hLen, modulus_len; + int err; + hash_state md; + + _ARGCHK(msghash != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + + /* ensure hash and PRNG are valid */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + + hLen = hash_descriptor[hash_idx].hashsize; + modulus_len = (modulus_bitlen>>3) + (modulus_bitlen & 7 ? 1 : 0); + + /* allocate ram for DB/mask/salt/hash of size modulus_len */ + DB = XMALLOC(modulus_len); + mask = XMALLOC(modulus_len); + salt = XMALLOC(modulus_len); + hash = XMALLOC(modulus_len); + if (DB == NULL || mask == NULL || salt == NULL || hash == NULL) { + if (DB != NULL) { + XFREE(DB); + } + if (mask != NULL) { + XFREE(mask); + } + if (salt != NULL) { + XFREE(salt); + } + if (hash != NULL) { + XFREE(hash); + } + return CRYPT_MEM; + } + + + /* check sizes */ + if ((saltlen > modulus_len) || (modulus_len < hLen + saltlen + 2)) { + err = CRYPT_INVALID_ARG; + goto __ERR; + } + + /* generate random salt */ + if (saltlen > 0) { + if (prng_descriptor[prng_idx].read(salt, saltlen, prng) != saltlen) { + err = CRYPT_ERROR_READPRNG; + goto __ERR; + } + } + + /* M = (eight) 0x00 || msghash || salt, hash = H(M) */ + hash_descriptor[hash_idx].init(&md); + zeromem(DB, 8); + if ((err = hash_descriptor[hash_idx].process(&md, DB, 8)) != CRYPT_OK) { + goto __ERR; + } + if ((err = hash_descriptor[hash_idx].process(&md, msghash, msghashlen)) != CRYPT_OK) { + goto __ERR; + } + if ((err = hash_descriptor[hash_idx].process(&md, salt, saltlen)) != CRYPT_OK) { + goto __ERR; + } + if ((err = hash_descriptor[hash_idx].done(&md, hash)) != CRYPT_OK) { + goto __ERR; + } + + /* generate DB = PS || 0x01 || salt, PS == modulus_len - saltlen - hLen - 2 zero bytes */ + for (x = 0; x < (modulus_len - saltlen - hLen - 2); x++) { + DB[x] = 0x00; + } + DB[x++] = 0x01; + for (y = 0; y < saltlen; y++) { + DB[x++] = salt[y]; + } + + /* generate mask of length modulus_len - hLen - 1 from hash */ + if ((err = pkcs_1_mgf1(hash, hLen, hash_idx, mask, modulus_len - hLen - 1)) != CRYPT_OK) { + goto __ERR; + } + + /* xor against DB */ + for (y = 0; y < (modulus_len - hLen - 1); y++) { + DB[y] ^= mask[y]; + } + + /* output is DB || hash || 0xBC */ + if (*outlen < modulus_len) { + err = CRYPT_BUFFER_OVERFLOW; + goto __ERR; + } + + /* DB */ + for (y = x = 0; x < modulus_len - hLen - 1; x++) { + out[y++] = DB[x]; + } + /* hash */ + for (x = 0; x < hLen; x++) { + out[y++] = hash[x]; + } + /* 0xBC */ + out[y] = 0xBC; + + /* now clear the 8*modulus_len - modulus_bitlen most significant bits */ + out[0] &= 0xFF >> ((modulus_len<<3) - (modulus_bitlen-1)); + + /* store output size */ + *outlen = modulus_len; + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + zeromem(DB, modulus_len); + zeromem(mask, modulus_len); + zeromem(salt, modulus_len); + zeromem(hash, modulus_len); +#endif + + XFREE(hash); + XFREE(salt); + XFREE(mask); + XFREE(DB); + + return err; +} + +#endif /* PKCS_1 */ diff --git a/pkcs_1_v15_es_decode.c b/pkcs_1_v15_es_decode.c new file mode 100644 index 00000000..7de4c153 --- /dev/null +++ b/pkcs_1_v15_es_decode.c @@ -0,0 +1,61 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +/* PKCS #1 v1.5 Encryption Padding -- Tom St Denis */ + +#ifdef PKCS_1 + +int pkcs_1_v15_es_decode(const unsigned char *msg, unsigned long msglen, + unsigned long modulus_bitlen, + unsigned char *out, unsigned long outlen, + int *res) +{ + unsigned long x, modulus_bytelen; + + _ARGCHK(msg != NULL); + _ARGCHK(out != NULL); + _ARGCHK(res != NULL); + + /* default to failed */ + *res = 0; + + modulus_bytelen = (modulus_bitlen>>3) + (modulus_bitlen & 7 ? 1 : 0); + + /* must be at least modulus_bytelen bytes long */ + if (msglen != modulus_bytelen) { + return CRYPT_INVALID_ARG; + } + + /* should start with 0x00 0x02 */ + if (msg[0] != 0x00 || msg[1] != 0x02) { + return CRYPT_OK; + } + + /* skip over PS */ + x = 2 + (modulus_bytelen - outlen - 3); + + /* should be 0x00 */ + if (msg[x++] != 0x00) { + return CRYPT_OK; + } + + /* the message is left */ + if (x + outlen > modulus_bytelen) { + return CRYPT_PK_INVALID_SIZE; + } + XMEMCPY(out, msg + x, outlen); + *res = 1; + return CRYPT_OK; +} + +#endif + diff --git a/pkcs_1_v15_es_encode.c b/pkcs_1_v15_es_encode.c new file mode 100644 index 00000000..17947747 --- /dev/null +++ b/pkcs_1_v15_es_encode.c @@ -0,0 +1,55 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +/* v1.5 Encryption Padding for PKCS #1 -- Tom St Denis */ + +#ifdef PKCS_1 + +int pkcs_1_v15_es_encode(const unsigned char *msg, unsigned long msglen, + unsigned long modulus_bitlen, + prng_state *prng, int prng_idx, + unsigned char *out, unsigned long *outlen) +{ + unsigned long modulus_bytelen, x, y; + + _ARGCHK(msg != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + + /* get modulus len */ + modulus_bytelen = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); + if (modulus_bytelen < 12) { + return CRYPT_INVALID_ARG; + } + + /* verify length */ + if (msglen > (modulus_bytelen - 11) || *outlen < modulus_bytelen) { + return CRYPT_PK_INVALID_SIZE; + } + + /* 0x00 0x02 PS 0x00 M */ + x = 0; + out[x++] = 0x00; + out[x++] = 0x02; + y = modulus_bytelen - msglen - 3; + if (prng_descriptor[prng_idx].read(out+x, y, prng) != y) { + return CRYPT_ERROR_READPRNG; + } + x += y; + out[x++] = 0x00; + XMEMCPY(out+x, msg, msglen); + *outlen = modulus_bytelen; + + return CRYPT_OK; +} + +#endif /* PKCS_1 */ diff --git a/pkcs_1_v15_sa_decode.c b/pkcs_1_v15_sa_decode.c new file mode 100644 index 00000000..1b5307cc --- /dev/null +++ b/pkcs_1_v15_sa_decode.c @@ -0,0 +1,77 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +/* PKCS #1 v1.5 Signature Padding -- Tom St Denis */ + +#ifdef PKCS_1 + +int pkcs_1_v15_sa_decode(const unsigned char *msghash, unsigned long msghashlen, + const unsigned char *sig, unsigned long siglen, + int hash_idx, unsigned long modulus_bitlen, + int *res) +{ + unsigned long x, y, modulus_bytelen, derlen; + int err; + + _ARGCHK(msghash != NULL); + _ARGCHK(sig != NULL); + _ARGCHK(res != NULL); + + /* default to invalid */ + *res = 0; + + /* valid hash ? */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + /* get derlen */ + derlen = hash_descriptor[hash_idx].DERlen; + + /* get modulus len */ + modulus_bytelen = (modulus_bitlen>>3) + (modulus_bitlen & 7 ? 1 : 0); + + /* valid sizes? */ + if ((msghashlen + 3 + derlen > modulus_bytelen) || (siglen != modulus_bytelen)) { + return CRYPT_PK_INVALID_SIZE; + } + + /* packet is 0x00 0x01 PS 0x00 T, where PS == 0xFF repeated modulus_bytelen - 3 - derlen - msghashlen times, T == DER || hash */ + x = 0; + if (sig[x++] != 0x00 || sig[x++] != 0x01) { + return CRYPT_OK; + } + + /* now follows (modulus_bytelen - 3 - derlen - msghashlen) 0xFF bytes */ + for (y = 0; y < (modulus_bytelen - 3 - derlen - msghashlen); y++) { + if (sig[x++] != 0xFF) { + return CRYPT_OK; + } + } + + if (sig[x++] != 0x00) { + return CRYPT_OK; + } + + for (y = 0; y < derlen; y++) { + if (sig[x++] != hash_descriptor[hash_idx].DER[y]) { + return CRYPT_OK; + } + } + + if (memcmp(msghash, sig+x, msghashlen) == 0) { + *res = 1; + } + return CRYPT_OK; +} + +#endif diff --git a/pkcs_1_v15_sa_encode.c b/pkcs_1_v15_sa_encode.c new file mode 100644 index 00000000..f0f258a8 --- /dev/null +++ b/pkcs_1_v15_sa_encode.c @@ -0,0 +1,71 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +/* PKCS #1 v1.5 Signature Padding -- Tom St Denis */ + +#ifdef PKCS_1 + +int pkcs_1_v15_sa_encode(const unsigned char *msghash, unsigned long msghashlen, + int hash_idx, unsigned long modulus_bitlen, + unsigned char *out, unsigned long *outlen) +{ + unsigned long derlen, modulus_bytelen, x, y; + int err; + + _ARGCHK(msghash != NULL) + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + /* hack, to detect any hash without a DER OID */ + if (hash_descriptor[hash_idx].DERlen == 0) { + return CRYPT_INVALID_ARG; + } + + /* get modulus len */ + modulus_bytelen = (modulus_bitlen>>3) + (modulus_bitlen & 7 ? 1 : 0); + + /* get der len ok? Forgive my lame German accent.... */ + derlen = hash_descriptor[hash_idx].DERlen; + + /* valid sizes? */ + if (msghashlen + 3 + derlen > modulus_bytelen) { + return CRYPT_PK_INVALID_SIZE; + } + + if (*outlen < modulus_bytelen) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* packet is 0x00 0x01 PS 0x00 T, where PS == 0xFF repeated modulus_bytelen - 3 - derlen - msghashlen times, T == DER || hash */ + x = 0; + out[x++] = 0x00; + out[x++] = 0x01; + for (y = 0; y < (modulus_bytelen - 3 - derlen - msghashlen); y++) { + out[x++] = 0xFF; + } + out[x++] = 0x00; + for (y = 0; y < derlen; y++) { + out[x++] = hash_descriptor[hash_idx].DER[y]; + } + for (y = 0; y < msghashlen; y++) { + out[x++] = msghash[y]; + } + + *outlen = modulus_bytelen; + return CRYPT_OK; +} + +#endif /* PKCS_1 */ diff --git a/pkcs_5_1.c b/pkcs_5_1.c new file mode 100644 index 00000000..b87f1957 --- /dev/null +++ b/pkcs_5_1.c @@ -0,0 +1,87 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include + +/* PKCS #5, Algorithm #1 */ +#ifdef PKCS_5 + +int pkcs_5_alg1(const unsigned char *password, unsigned long password_len, + const unsigned char *salt, + int iteration_count, int hash_idx, + unsigned char *out, unsigned long *outlen) +{ + int err; + unsigned long x; + hash_state *md; + unsigned char *buf; + + _ARGCHK(password != NULL); + _ARGCHK(salt != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + + /* test hash IDX */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + /* allocate memory */ + md = XMALLOC(sizeof(hash_state)); + buf = XMALLOC(MAXBLOCKSIZE); + if (md == NULL || buf == NULL) { + if (md != NULL) { + XFREE(md); + } + if (buf != NULL) { + XFREE(buf); + } + return CRYPT_MEM; + } + + /* hash initial password + salt */ + hash_descriptor[hash_idx].init(md); + if ((err = hash_descriptor[hash_idx].process(md, password, password_len)) != CRYPT_OK) { + goto __ERR; + } + if ((err = hash_descriptor[hash_idx].process(md, salt, 8)) != CRYPT_OK) { + goto __ERR; + } + if ((err = hash_descriptor[hash_idx].done(md, buf)) != CRYPT_OK) { + goto __ERR; + } + + while (--iteration_count) { + // code goes here. + x = MAXBLOCKSIZE; + if ((err = hash_memory(hash_idx, buf, hash_descriptor[hash_idx].hashsize, buf, &x)) != CRYPT_OK) { + goto __ERR; + } + } + + /* copy upto outlen bytes */ + for (x = 0; x < hash_descriptor[hash_idx].hashsize && x < *outlen; x++) { + out[x] = buf[x]; + } + *outlen = x; + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + zeromem(buf, MAXBLOCKSIZE); + zeromem(md, sizeof(hash_state)); +#endif + + XFREE(buf); + XFREE(md); + + return err; +} + +#endif diff --git a/src/misc/pkcs5/pkcs_5_2.c b/pkcs_5_2.c similarity index 63% rename from src/misc/pkcs5/pkcs_5_2.c rename to pkcs_5_2.c index 61ebd006..a58994f8 100644 --- a/src/misc/pkcs5/pkcs_5_2.c +++ b/pkcs_5_2.c @@ -1,44 +1,32 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include -/** - @file pkcs_5_2.c - PKCS #5, Algorithm #2, Tom St Denis -*/ -#ifdef LTC_PKCS_5 +/* PKCS #5, Algorithm #2 */ +#ifdef PKCS_5 -/** - Execute PKCS #5 v2 - @param password The input password (or key) - @param password_len The length of the password (octets) - @param salt The salt (or nonce) - @param salt_len The length of the salt (octets) - @param iteration_count # of iterations desired for PKCS #5 v2 [read specs for more] - @param hash_idx The index of the hash desired - @param out [out] The destination for this algorithm - @param outlen [in/out] The max size and resulting size of the algorithm output - @return CRYPT_OK if successful -*/ -int pkcs_5_alg2(const unsigned char *password, unsigned long password_len, +int pkcs_5_alg2(const unsigned char *password, unsigned long password_len, const unsigned char *salt, unsigned long salt_len, int iteration_count, int hash_idx, unsigned char *out, unsigned long *outlen) { int err, itts; - ulong32 blkno; - unsigned long stored, left, x, y; + unsigned long stored, left, x, y, blkno; unsigned char *buf[2]; hmac_state *hmac; - LTC_ARGCHK(password != NULL); - LTC_ARGCHK(salt != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if (iteration_count <= 0) { - return CRYPT_INVALID_ARG; - } + _ARGCHK(password != NULL); + _ARGCHK(salt != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); /* test hash IDX */ if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { @@ -65,31 +53,31 @@ int pkcs_5_alg2(const unsigned char *password, unsigned long password_len, while (left != 0) { /* process block number blkno */ zeromem(buf[0], MAXBLOCKSIZE*2); - + /* store current block number and increment for next pass */ STORE32H(blkno, buf[1]); ++blkno; /* get PRF(P, S||int(blkno)) */ - if ((err = hmac_init(hmac, hash_idx, password, password_len)) != CRYPT_OK) { - goto LBL_ERR; + if ((err = hmac_init(hmac, hash_idx, password, password_len)) != CRYPT_OK) { + goto __ERR; } if ((err = hmac_process(hmac, salt, salt_len)) != CRYPT_OK) { - goto LBL_ERR; + goto __ERR; } if ((err = hmac_process(hmac, buf[1], 4)) != CRYPT_OK) { - goto LBL_ERR; + goto __ERR; } x = MAXBLOCKSIZE; if ((err = hmac_done(hmac, buf[0], &x)) != CRYPT_OK) { - goto LBL_ERR; + goto __ERR; } /* now compute repeated and XOR it in buf[1] */ XMEMCPY(buf[1], buf[0], x); for (itts = 1; itts < iteration_count; ++itts) { if ((err = hmac_memory(hash_idx, password, password_len, buf[0], x, buf[0], &x)) != CRYPT_OK) { - goto LBL_ERR; + goto __ERR; } for (y = 0; y < x; y++) { buf[1][y] ^= buf[0][y]; @@ -105,8 +93,8 @@ int pkcs_5_alg2(const unsigned char *password, unsigned long password_len, *outlen = stored; err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK +__ERR: +#ifdef CLEAN_STACK zeromem(buf[0], MAXBLOCKSIZE*2); zeromem(hmac, sizeof(hmac_state)); #endif diff --git a/pmac_done.c b/pmac_done.c new file mode 100644 index 00000000..8051da78 --- /dev/null +++ b/pmac_done.c @@ -0,0 +1,64 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* PMAC implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef PMAC + +int pmac_done(pmac_state *state, unsigned char *out, unsigned long *outlen) +{ + int err, x; + + _ARGCHK(state != NULL); + _ARGCHK(out != NULL); + if ((err = cipher_is_valid(state->cipher_idx)) != CRYPT_OK) { + return err; + } + + if ((state->buflen > (int)sizeof(state->block)) || (state->buflen < 0) || + (state->block_len > (int)sizeof(state->block)) || (state->buflen > state->block_len)) { + return CRYPT_INVALID_ARG; + } + + + /* handle padding. If multiple xor in L/x */ + + if (state->buflen == state->block_len) { + /* xor Lr against the checksum */ + for (x = 0; x < state->block_len; x++) { + state->checksum[x] ^= state->block[x] ^ state->Lr[x]; + } + } else { + /* otherwise xor message bytes then the 0x80 byte */ + for (x = 0; x < state->buflen; x++) { + state->checksum[x] ^= state->block[x]; + } + state->checksum[x] ^= 0x80; + } + + /* encrypt it */ + cipher_descriptor[state->cipher_idx].ecb_encrypt(state->checksum, state->checksum, &state->key); + + /* store it */ + for (x = 0; x < state->block_len && x <= (int)*outlen; x++) { + out[x] = state->checksum[x]; + } + *outlen = x; + +#ifdef CLEAN_STACK + zeromem(state, sizeof(*state)); +#endif + return CRYPT_OK; +} + +#endif + diff --git a/pmac_file.c b/pmac_file.c new file mode 100644 index 00000000..c664a095 --- /dev/null +++ b/pmac_file.c @@ -0,0 +1,67 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* PMAC implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef PMAC + +int pmac_file(int cipher, + const unsigned char *key, unsigned long keylen, + const char *filename, + unsigned char *out, unsigned long *outlen) +{ +#ifdef NO_FILE + return CRYPT_NOP; +#else + int err, x; + pmac_state pmac; + FILE *in; + unsigned char buf[512]; + + + _ARGCHK(key != NULL); + _ARGCHK(filename != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + + in = fopen(filename, "rb"); + if (in == NULL) { + return CRYPT_FILE_NOTFOUND; + } + + if ((err = pmac_init(&pmac, cipher, key, keylen)) != CRYPT_OK) { + fclose(in); + return err; + } + + do { + x = fread(buf, 1, sizeof(buf), in); + if ((err = pmac_process(&pmac, buf, x)) != CRYPT_OK) { + fclose(in); + return err; + } + } while (x == sizeof(buf)); + fclose(in); + + if ((err = pmac_done(&pmac, out, outlen)) != CRYPT_OK) { + return err; + } + +#ifdef CLEAN_STACK + zeromem(buf, sizeof(buf)); +#endif + + return CRYPT_OK; +#endif +} + +#endif diff --git a/pmac_init.c b/pmac_init.c new file mode 100644 index 00000000..2f96927b --- /dev/null +++ b/pmac_init.c @@ -0,0 +1,122 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* PMAC implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef PMAC + +static const struct { + int len; + unsigned char poly_div[MAXBLOCKSIZE], + poly_mul[MAXBLOCKSIZE]; +} polys[] = { +{ + 8, + { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B } +}, { + 16, + { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87 } +} +}; + +int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned long keylen) +{ + int poly, x, y, m, err; + unsigned char *L; + + _ARGCHK(pmac != NULL); + _ARGCHK(key != NULL); + + /* valid cipher? */ + if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { + return err; + } + + /* determine which polys to use */ + pmac->block_len = cipher_descriptor[cipher].block_length; + for (poly = 0; poly < (int)(sizeof(polys)/sizeof(polys[0])); poly++) { + if (polys[poly].len == pmac->block_len) { + break; + } + } + if (polys[poly].len != pmac->block_len) { + return CRYPT_INVALID_ARG; + } + + /* schedule the key */ + if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, &pmac->key)) != CRYPT_OK) { + return err; + } + + /* allocate L */ + L = XMALLOC(pmac->block_len); + if (L == NULL) { + return CRYPT_MEM; + } + + /* find L = E[0] */ + zeromem(L, pmac->block_len); + cipher_descriptor[cipher].ecb_encrypt(L, L, &pmac->key); + + /* find Ls[i] = L << i for i == 0..31 */ + XMEMCPY(pmac->Ls[0], L, pmac->block_len); + for (x = 1; x < 32; x++) { + m = pmac->Ls[x-1][0] >> 7; + for (y = 0; y < pmac->block_len-1; y++) { + pmac->Ls[x][y] = ((pmac->Ls[x-1][y] << 1) | (pmac->Ls[x-1][y+1] >> 7)) & 255; + } + pmac->Ls[x][pmac->block_len-1] = (pmac->Ls[x-1][pmac->block_len-1] << 1) & 255; + + if (m == 1) { + for (y = 0; y < pmac->block_len; y++) { + pmac->Ls[x][y] ^= polys[poly].poly_mul[y]; + } + } + } + + /* find Lr = L / x */ + m = L[pmac->block_len-1] & 1; + + /* shift right */ + for (x = pmac->block_len - 1; x > 0; x--) { + pmac->Lr[x] = ((L[x] >> 1) | (L[x-1] << 7)) & 255; + } + pmac->Lr[0] = L[0] >> 1; + + if (m == 1) { + for (x = 0; x < pmac->block_len; x++) { + pmac->Lr[x] ^= polys[poly].poly_div[x]; + } + } + + /* zero buffer, counters, etc... */ + pmac->block_index = 1; + pmac->cipher_idx = cipher; + pmac->buflen = 0; + zeromem(pmac->block, sizeof(pmac->block)); + zeromem(pmac->Li, sizeof(pmac->Li)); + zeromem(pmac->checksum, sizeof(pmac->checksum)); + +#ifdef CLEAN_STACK + zeromem(L, pmac->block_len); +#endif + + XFREE(L); + + return CRYPT_OK; +} + +#endif diff --git a/pmac_memory.c b/pmac_memory.c new file mode 100644 index 00000000..af2b1970 --- /dev/null +++ b/pmac_memory.c @@ -0,0 +1,56 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* PMAC implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef PMAC + +int pmac_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *msg, unsigned long msglen, + unsigned char *out, unsigned long *outlen) +{ + int err; + pmac_state *pmac; + + _ARGCHK(key != NULL); + _ARGCHK(msg != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + + /* allocate ram for pmac state */ + pmac = XMALLOC(sizeof(pmac_state)); + if (pmac == NULL) { + return CRYPT_MEM; + } + + if ((err = pmac_init(pmac, cipher, key, keylen)) != CRYPT_OK) { + goto __ERR; + } + if ((err = pmac_process(pmac, msg, msglen)) != CRYPT_OK) { + goto __ERR; + } + if ((err = pmac_done(pmac, out, outlen)) != CRYPT_OK) { + goto __ERR; + } + + err = CRYPT_OK; +__ERR: +#ifdef CLEAN_STACK + zeromem(pmac, sizeof(pmac_state)); +#endif + + XFREE(pmac); + return err; +} + +#endif diff --git a/pmac_ntz.c b/pmac_ntz.c new file mode 100644 index 00000000..98ec4308 --- /dev/null +++ b/pmac_ntz.c @@ -0,0 +1,29 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* PMAC implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef PMAC + +int pmac_ntz(unsigned long x) +{ + int c; + x &= 0xFFFFFFFFUL; + c = 0; + while ((x & 1) == 0) { + ++c; + x >>= 1; + } + return c; +} + +#endif diff --git a/pmac_process.c b/pmac_process.c new file mode 100644 index 00000000..84b8e588 --- /dev/null +++ b/pmac_process.c @@ -0,0 +1,62 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* PMAC implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef PMAC + +int pmac_process(pmac_state *state, const unsigned char *buf, unsigned long len) +{ + int err, n, x; + unsigned char Z[MAXBLOCKSIZE]; + + _ARGCHK(state != NULL); + _ARGCHK(buf != NULL); + if ((err = cipher_is_valid(state->cipher_idx)) != CRYPT_OK) { + return err; + } + + if ((state->buflen > (int)sizeof(state->block)) || (state->buflen < 0) || + (state->block_len > (int)sizeof(state->block)) || (state->buflen > state->block_len)) { + return CRYPT_INVALID_ARG; + } + + while (len != 0) { + /* ok if the block is full we xor in prev, encrypt and replace prev */ + if (state->buflen == state->block_len) { + pmac_shift_xor(state); + for (x = 0; x < state->block_len; x++) { + Z[x] = state->Li[x] ^ state->block[x]; + } + cipher_descriptor[state->cipher_idx].ecb_encrypt(Z, Z, &state->key); + for (x = 0; x < state->block_len; x++) { + state->checksum[x] ^= Z[x]; + } + state->buflen = 0; + } + + /* add bytes */ + n = MIN(len, (unsigned long)(state->block_len - state->buflen)); + XMEMCPY(state->block + state->buflen, buf, n); + state->buflen += n; + len -= n; + buf += n; + } + +#ifdef CLEAN_STACK + zeromem(Z, sizeof(Z)); +#endif + + return CRYPT_OK; +} + +#endif diff --git a/pmac_shift_xor.c b/pmac_shift_xor.c new file mode 100644 index 00000000..46159fba --- /dev/null +++ b/pmac_shift_xor.c @@ -0,0 +1,26 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* PMAC implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef PMAC + +void pmac_shift_xor(pmac_state *pmac) +{ + int x, y; + y = pmac_ntz(pmac->block_index++); + for (x = 0; x < pmac->block_len; x++) { + pmac->Li[x] ^= pmac->Ls[y][x]; + } +} + +#endif diff --git a/src/mac/pmac/pmac_test.c b/pmac_test.c similarity index 77% rename from src/mac/pmac/pmac_test.c rename to pmac_test.c index 665504cb..e813eb59 100644 --- a/src/mac/pmac/pmac_test.c +++ b/pmac_test.c @@ -1,25 +1,25 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ -/** - @file pmac_test.c - PMAC implementation, self-test, by Tom St Denis -*/ +/* PMAC implementation by Tom St Denis */ +#include "mycrypt.h" +#ifdef PMAC -#ifdef LTC_PMAC - -/** - Test the LTC_OMAC implementation - @return CRYPT_OK if successful, CRYPT_NOP if testing has been disabled -*/ int pmac_test(void) { #if !defined(LTC_TEST) return CRYPT_NOP; #else - static const struct { + static const struct { int msglen; unsigned char key[16], msg[34], tag[16]; } tests[] = { @@ -117,28 +117,37 @@ int pmac_test(void) unsigned long len; unsigned char outtag[MAXBLOCKSIZE]; - /* AES can be under rijndael or aes... try to find it */ + /* AES can be under rijndael or aes... try to find it */ if ((idx = find_cipher("aes")) == -1) { if ((idx = find_cipher("rijndael")) == -1) { return CRYPT_NOP; } } - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { len = sizeof(outtag); if ((err = pmac_memory(idx, tests[x].key, 16, tests[x].msg, tests[x].msglen, outtag, &len)) != CRYPT_OK) { return err; } - - if (ltc_compare_testvector(outtag, len, tests[x].tag, sizeof(tests[x].tag), "PMAC", x)) { + + if (memcmp(outtag, tests[x].tag, len)) { +#if 0 + unsigned long y; + printf("\nTAG:\n"); + for (y = 0; y < len; ) { + printf("0x%02x", outtag[y]); + if (y < len-1) printf(", "); + if (!(++y % 8)) printf("\n"); + } +#endif return CRYPT_FAIL_TESTVECTOR; } - } - return CRYPT_OK; + } + return CRYPT_OK; #endif /* LTC_TEST */ } #endif /* PMAC_MODE */ - + diff --git a/pretty.build b/pretty.build new file mode 100644 index 00000000..0046d344 --- /dev/null +++ b/pretty.build @@ -0,0 +1,82 @@ +#!/bin/perl -w +# +# Cute little builder for perl +# Total waste of development time... +# +# This will build all the object files and then the archive .a file +# requires GCC, GNU make and a sense of humour. +# +# Tom St Denis +use strict; + +my $count = 0; +my $starttime = time; +my $rate = 0; +print "Scanning for source files...\n"; +foreach my $filename (glob "*.c") { + if (!($filename =~ "aes_tab.c")) { + if (!($filename =~ "twofish_tab.c")) { + if (!($filename =~ "whirltab.c")) { + if (!($filename =~ "sha224.c")) { + if (!($filename =~ "sha384.c")) { + if (!($filename =~ "dh_sys.c")) { + if (!($filename =~ "ecc_sys.c")) { + ++$count; + }}}}}}} +} +print "Source files to build: $count\nBuilding...\n"; +my $i = 0; +my $lines = 0; +my $filesbuilt = 0; +foreach my $filename (glob "*.c") { + if (!($filename =~ "aes_tab.c")) { + if (!($filename =~ "twofish_tab.c")) { + if (!($filename =~ "whirltab.c")) { + if (!($filename =~ "sha224.c")) { + if (!($filename =~ "sha384.c")) { + if (!($filename =~ "dh_sys.c")) { + if (!($filename =~ "ecc_sys.c")) { + printf("Building %3.2f%%, ", (++$i/$count)*100.0); + if ($i % 4 == 0) { print "/, "; } + if ($i % 4 == 1) { print "-, "; } + if ($i % 4 == 2) { print "\\, "; } + if ($i % 4 == 3) { print "|, "; } + if ($rate > 0) { + my $tleft = ($count - $i) / $rate; + my $tsec = $tleft%60; + my $tmin = ($tleft/60)%60; + my $thour = ($tleft/3600)%60; + printf("%2d:%02d:%02d left, ", $thour, $tmin, $tsec); + } + my $cnt = ($i/$count)*30.0; + my $x = 0; + print "["; + for (; $x < $cnt; $x++) { print "#"; } + for (; $x < 30; $x++) { print " "; } + print "]\r"; + my $tmp = $filename; + $tmp =~ s/\.c/".o"/ge; + if (open(SRC, "<$tmp")) { + close SRC; + } else { + !system("make $tmp > /dev/null 2>/dev/null") or die "\nERROR: Failed to make $tmp!!!\n"; + open( SRC, "<$filename" ) or die "Couldn't open $filename for reading: $!"; + ++$lines while (); + close SRC or die "Error closing $filename after reading: $!"; + ++$filesbuilt; + } + + # update timer + if (time != $starttime) { + my $delay = time - $starttime; + $rate = $i/$delay; + } + }}}}}}} +} + +# finish building the library +printf("\nFinished building source (%d seconds, %3.2f files per second).\n", time - $starttime, $rate); +print "Compiled approximately $filesbuilt files and $lines lines of code.\n"; +print "Doing final make (building archive...)\n"; +!system("make > /dev/null 2>/dev/null") or die "\nERROR: Failed to perform last make command!!!\n"; +print "done.\n"; \ No newline at end of file diff --git a/rand_prime.c b/rand_prime.c new file mode 100644 index 00000000..4e9cdbde --- /dev/null +++ b/rand_prime.c @@ -0,0 +1,61 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef MPI + +struct rng_data { + prng_state *prng; + int wprng; +}; + +static int rand_prime_helper(unsigned char *dst, int len, void *dat) +{ + return (int)prng_descriptor[((struct rng_data *)dat)->wprng].read(dst, len, ((struct rng_data *)dat)->prng); +} + +int rand_prime(mp_int *N, long len, prng_state *prng, int wprng) +{ + struct rng_data rng; + int type, err; + + _ARGCHK(N != NULL); + + /* allow sizes between 2 and 256 bytes for a prime size */ + if (len < 16 || len > 4096) { + return CRYPT_INVALID_PRIME_SIZE; + } + + /* valid PRNG? Better be! */ + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + /* setup our callback data, then world domination! */ + rng.prng = prng; + rng.wprng = wprng; + + /* get type */ + if (len < 0) { + type = LTM_PRIME_BBS; + len = -len; + } else { + type = 0; + } + + /* New prime generation makes the code even more cryptoish-insane. Do you know what this means!!! + -- Gir: Yeah, oh wait, er, no. + */ + return mpi_to_ltc_error(mp_prime_random_ex(N, mp_prime_rabin_miller_trials(len), len, type, rand_prime_helper, &rng)); +} + +#endif + diff --git a/rc2.c b/rc2.c new file mode 100644 index 00000000..f3f8c315 --- /dev/null +++ b/rc2.c @@ -0,0 +1,309 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/**********************************************************************\ +* To commemorate the 1996 RSA Data Security Conference, the following * +* code is released into the public domain by its author. Prost! * +* * +* This cipher uses 16-bit words and little-endian byte ordering. * +* I wonder which processor it was optimized for? * +* * +* Thanks to CodeView, SoftIce, and D86 for helping bring this code to * +* the public. * +\**********************************************************************/ + +#include + +#ifdef RC2 + +const struct _cipher_descriptor rc2_desc = { + "rc2", + 12, 8, 128, 8, 16, + &rc2_setup, + &rc2_ecb_encrypt, + &rc2_ecb_decrypt, + &rc2_test, + &rc2_keysize +}; + +/* 256-entry permutation table, probably derived somehow from pi */ +static const unsigned char permute[256] = { + 217,120,249,196, 25,221,181,237, 40,233,253,121, 74,160,216,157, + 198,126, 55,131, 43,118, 83,142, 98, 76,100,136, 68,139,251,162, + 23,154, 89,245,135,179, 79, 19, 97, 69,109,141, 9,129,125, 50, + 189,143, 64,235,134,183,123, 11,240,149, 33, 34, 92,107, 78,130, + 84,214,101,147,206, 96,178, 28,115, 86,192, 20,167,140,241,220, + 18,117,202, 31, 59,190,228,209, 66, 61,212, 48,163, 60,182, 38, + 111,191, 14,218, 70,105, 7, 87, 39,242, 29,155,188,148, 67, 3, + 248, 17,199,246,144,239, 62,231, 6,195,213, 47,200,102, 30,215, + 8,232,234,222,128, 82,238,247,132,170,114,172, 53, 77,106, 42, + 150, 26,210,113, 90, 21, 73,116, 75,159,208, 94, 4, 24,164,236, + 194,224, 65,110, 15, 81,203,204, 36,145,175, 80,161,244,112, 57, + 153,124, 58,133, 35,184,180,122,252, 2, 54, 91, 37, 85,151, 49, + 45, 93,250,152,227,138,146,174, 5,223, 41, 16,103,108,186,201, + 211, 0,230,207,225,158,168, 44, 99, 22, 1, 63, 88,226,137,169, + 13, 56, 52, 27,171, 51,255,176,187, 72, 12, 95,185,177,205, 46, + 197,243,219, 71,229,165,156,119, 10,166, 32,104,254,127,193,173 +}; + +int rc2_setup(const unsigned char *key, int keylen, int rounds, symmetric_key *skey) +{ + unsigned *xkey = skey->rc2.xkey; + unsigned char tmp[128]; + unsigned T8, TM; + int i, bits; + + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); + + if (keylen < 8 || keylen > 128) { + return CRYPT_INVALID_KEYSIZE; + } + + if (rounds != 0 && rounds != 16) { + return CRYPT_INVALID_ROUNDS; + } + + for (i = 0; i < keylen; i++) { + tmp[i] = key[i] & 255; + } + + /* Phase 1: Expand input key to 128 bytes */ + if (keylen < 128) { + for (i = keylen; i < 128; i++) { + tmp[i] = permute[(tmp[i - 1] + tmp[i - keylen]) & 255]; + } + } + + /* Phase 2 - reduce effective key size to "bits" */ + bits = keylen<<3; + T8 = (unsigned)(bits+7)>>3; + TM = (255 >> (unsigned)(7 & -bits)); + tmp[128 - T8] = permute[tmp[128 - T8] & TM]; + for (i = 127 - T8; i >= 0; i--) { + tmp[i] = permute[tmp[i + 1] ^ tmp[i + T8]]; + } + + /* Phase 3 - copy to xkey in little-endian order */ + for (i = 0; i < 64; i++) { + xkey[i] = (unsigned)tmp[2*i] + ((unsigned)tmp[2*i+1] << 8); + } + +#ifdef CLEAN_STACK + zeromem(tmp, sizeof(tmp)); +#endif + + return CRYPT_OK; +} + +/**********************************************************************\ +* Encrypt an 8-byte block of plaintext using the given key. * +\**********************************************************************/ +#ifdef CLEAN_STACK +static void _rc2_ecb_encrypt( const unsigned char *plain, + unsigned char *cipher, + symmetric_key *skey) +#else +void rc2_ecb_encrypt( const unsigned char *plain, + unsigned char *cipher, + symmetric_key *skey) +#endif +{ + unsigned *xkey; + unsigned x76, x54, x32, x10, i; + + _ARGCHK(plain != NULL); + _ARGCHK(cipher != NULL); + _ARGCHK(skey != NULL); + + xkey = skey->rc2.xkey; + + x76 = ((unsigned)plain[7] << 8) + (unsigned)plain[6]; + x54 = ((unsigned)plain[5] << 8) + (unsigned)plain[4]; + x32 = ((unsigned)plain[3] << 8) + (unsigned)plain[2]; + x10 = ((unsigned)plain[1] << 8) + (unsigned)plain[0]; + + for (i = 0; i < 16; i++) { + x10 = (x10 + (x32 & ~x76) + (x54 & x76) + xkey[4*i+0]) & 0xFFFF; + x10 = ((x10 << 1) | (x10 >> 15)); + + x32 = (x32 + (x54 & ~x10) + (x76 & x10) + xkey[4*i+1]) & 0xFFFF; + x32 = ((x32 << 2) | (x32 >> 14)); + + x54 = (x54 + (x76 & ~x32) + (x10 & x32) + xkey[4*i+2]) & 0xFFFF; + x54 = ((x54 << 3) | (x54 >> 13)); + + x76 = (x76 + (x10 & ~x54) + (x32 & x54) + xkey[4*i+3]) & 0xFFFF; + x76 = ((x76 << 5) | (x76 >> 11)); + + if (i == 4 || i == 10) { + x10 = (x10 + xkey[x76 & 63]) & 0xFFFF; + x32 = (x32 + xkey[x10 & 63]) & 0xFFFF; + x54 = (x54 + xkey[x32 & 63]) & 0xFFFF; + x76 = (x76 + xkey[x54 & 63]) & 0xFFFF; + } + } + + cipher[0] = (unsigned char)x10; + cipher[1] = (unsigned char)(x10 >> 8); + cipher[2] = (unsigned char)x32; + cipher[3] = (unsigned char)(x32 >> 8); + cipher[4] = (unsigned char)x54; + cipher[5] = (unsigned char)(x54 >> 8); + cipher[6] = (unsigned char)x76; + cipher[7] = (unsigned char)(x76 >> 8); +} + +#ifdef CLEAN_STACK +void rc2_ecb_encrypt( const unsigned char *plain, + unsigned char *cipher, + symmetric_key *skey) +{ + _rc2_ecb_encrypt(plain, cipher, skey); + burn_stack(sizeof(unsigned *) + sizeof(unsigned) * 5); +} +#endif + +/**********************************************************************\ +* Decrypt an 8-byte block of ciphertext using the given key. * +\**********************************************************************/ + +#ifdef CLEAN_STACK +static void _rc2_ecb_decrypt( const unsigned char *cipher, + unsigned char *plain, + symmetric_key *skey) +#else +void rc2_ecb_decrypt( const unsigned char *cipher, + unsigned char *plain, + symmetric_key *skey) +#endif +{ + unsigned x76, x54, x32, x10; + unsigned *xkey; + int i; + + _ARGCHK(plain != NULL); + _ARGCHK(cipher != NULL); + _ARGCHK(skey != NULL); + + xkey = skey->rc2.xkey; + + x76 = ((unsigned)cipher[7] << 8) + (unsigned)cipher[6]; + x54 = ((unsigned)cipher[5] << 8) + (unsigned)cipher[4]; + x32 = ((unsigned)cipher[3] << 8) + (unsigned)cipher[2]; + x10 = ((unsigned)cipher[1] << 8) + (unsigned)cipher[0]; + + for (i = 15; i >= 0; i--) { + if (i == 4 || i == 10) { + x76 = (x76 - xkey[x54 & 63]) & 0xFFFF; + x54 = (x54 - xkey[x32 & 63]) & 0xFFFF; + x32 = (x32 - xkey[x10 & 63]) & 0xFFFF; + x10 = (x10 - xkey[x76 & 63]) & 0xFFFF; + } + + x76 = ((x76 << 11) | (x76 >> 5)); + x76 = (x76 - ((x10 & ~x54) + (x32 & x54) + xkey[4*i+3])) & 0xFFFF; + + x54 = ((x54 << 13) | (x54 >> 3)); + x54 = (x54 - ((x76 & ~x32) + (x10 & x32) + xkey[4*i+2])) & 0xFFFF; + + x32 = ((x32 << 14) | (x32 >> 2)); + x32 = (x32 - ((x54 & ~x10) + (x76 & x10) + xkey[4*i+1])) & 0xFFFF; + + x10 = ((x10 << 15) | (x10 >> 1)); + x10 = (x10 - ((x32 & ~x76) + (x54 & x76) + xkey[4*i+0])) & 0xFFFF; + } + + plain[0] = (unsigned char)x10; + plain[1] = (unsigned char)(x10 >> 8); + plain[2] = (unsigned char)x32; + plain[3] = (unsigned char)(x32 >> 8); + plain[4] = (unsigned char)x54; + plain[5] = (unsigned char)(x54 >> 8); + plain[6] = (unsigned char)x76; + plain[7] = (unsigned char)(x76 >> 8); +} + +#ifdef CLEAN_STACK +void rc2_ecb_decrypt( const unsigned char *cipher, + unsigned char *plain, + symmetric_key *skey) +{ + _rc2_ecb_decrypt(cipher, plain, skey); + burn_stack(sizeof(unsigned *) + sizeof(unsigned) * 4 + sizeof(int)); +} +#endif + +int rc2_test(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + static const struct { + int keylen; + unsigned char key[16], pt[8], ct[8]; + } tests[] = { + + { 8, + { 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, + { 0x30, 0x64, 0x9e, 0xdf, 0x9b, 0xe7, 0xd2, 0xc2 } + + }, + { 16, + { 0x88, 0xbc, 0xa9, 0x0e, 0x90, 0x87, 0x5a, 0x7f, + 0x0f, 0x79, 0xc3, 0x84, 0x62, 0x7b, 0xaf, 0xb2 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + { 0x22, 0x69, 0x55, 0x2a, 0xb0, 0xf8, 0x5c, 0xa6 } + } + }; + int x, y, err; + symmetric_key skey; + unsigned char tmp[2][8]; + + for (x = 0; x < (int)(sizeof(tests) / sizeof(tests[0])); x++) { + zeromem(tmp, sizeof(tmp)); + if ((err = rc2_setup(tests[x].key, tests[x].keylen, 0, &skey)) != CRYPT_OK) { + return err; + } + + rc2_ecb_encrypt(tests[x].pt, tmp[0], &skey); + rc2_ecb_decrypt(tmp[0], tmp[1], &skey); + + if (memcmp(tmp[0], tests[x].ct, 8) != 0 || memcmp(tmp[1], tests[x].pt, 8) != 0) { + return CRYPT_FAIL_TESTVECTOR; + } + + /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ + for (y = 0; y < 8; y++) tmp[0][y] = 0; + for (y = 0; y < 1000; y++) rc2_ecb_encrypt(tmp[0], tmp[0], &skey); + for (y = 0; y < 1000; y++) rc2_ecb_decrypt(tmp[0], tmp[0], &skey); + for (y = 0; y < 8; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; + } + return CRYPT_OK; + #endif +} + +int rc2_keysize(int *keysize) +{ + _ARGCHK(keysize != NULL); + if (*keysize < 8) { + return CRYPT_INVALID_KEYSIZE; + } else if (*keysize > 128) { + *keysize = 128; + } + return CRYPT_OK; +} + +#endif + + + diff --git a/rc4.c b/rc4.c new file mode 100644 index 00000000..b3402045 --- /dev/null +++ b/rc4.c @@ -0,0 +1,129 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +#ifdef RC4 + +const struct _prng_descriptor rc4_desc = +{ + "rc4", + &rc4_start, + &rc4_add_entropy, + &rc4_ready, + &rc4_read, + &rc4_done, + &rc4_export, + &rc4_import +}; + +int rc4_start(prng_state *prng) +{ + _ARGCHK(prng != NULL); + + /* set keysize to zero */ + prng->rc4.x = 0; + + return CRYPT_OK; +} + +int rc4_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng) +{ + _ARGCHK(buf != NULL); + _ARGCHK(prng != NULL); + + if (prng->rc4.x + len > 256) { + return CRYPT_INVALID_KEYSIZE; + } + + while (len--) { + prng->rc4.buf[prng->rc4.x++] = *buf++; + } + + return CRYPT_OK; + +} + +int rc4_ready(prng_state *prng) +{ + unsigned char key[256], tmp; + int keylen, x, y; + + _ARGCHK(prng != NULL); + + /* extract the key */ + XMEMCPY(key, prng->rc4.buf, 256); + keylen = prng->rc4.x; + + /* make RC4 perm and shuffle */ + for (x = 0; x < 256; x++) { + prng->rc4.buf[x] = x; + } + + for (x = y = 0; x < 256; x++) { + y = (y + prng->rc4.buf[x] + key[x % keylen]) & 255; + tmp = prng->rc4.buf[x]; prng->rc4.buf[x] = prng->rc4.buf[y]; prng->rc4.buf[y] = tmp; + } + prng->rc4.x = x; + prng->rc4.y = y; + +#ifdef CLEAN_STACK + zeromem(key, sizeof(key)); +#endif + + return CRYPT_OK; +} + +unsigned long rc4_read(unsigned char *buf, unsigned long len, prng_state *prng) +{ + int x, y; + unsigned char *s, tmp; + unsigned long n; + + _ARGCHK(buf != NULL); + _ARGCHK(prng != NULL); + + n = len; + x = prng->rc4.x; + y = prng->rc4.y; + s = prng->rc4.buf; + while (len--) { + x = (x + 1) & 255; + y = (y + s[x]) & 255; + tmp = s[x]; s[x] = s[y]; s[y] = tmp; + tmp = (s[x] + s[y]) & 255; + *buf++ = s[tmp]; + } + prng->rc4.x = x; + prng->rc4.y = y; + return n; +} + +void rc4_done(prng_state *prng) +{ + _ARGCHK(prng != NULL); +} + +int rc4_export(unsigned char *out, unsigned long *outlen, prng_state *prng) +{ + _ARGCHK(outlen != NULL); + + *outlen = 0; + return CRYPT_OK; +} + +int rc4_import(const unsigned char *in, unsigned long inlen, prng_state *prng) +{ + return CRYPT_OK; +} + + +#endif + diff --git a/src/ciphers/rc5.c b/rc5.c similarity index 53% rename from src/ciphers/rc5.c rename to rc5.c index dfbc2ee1..124deb92 100644 --- a/src/ciphers/rc5.c +++ b/rc5.c @@ -1,16 +1,21 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ -/** - @file rc5.c - LTC_RC5 code by Tom St Denis -*/ +/* RC5 code by Tom St Denis */ -#include "tomcrypt_private.h" +#include "mycrypt.h" -#ifdef LTC_RC5 +#ifdef RC5 -const struct ltc_cipher_descriptor rc5_desc = +const struct _cipher_descriptor rc5_desc = { "rc5", 2, @@ -19,12 +24,9 @@ const struct ltc_cipher_descriptor rc5_desc = &rc5_ecb_encrypt, &rc5_ecb_decrypt, &rc5_test, - &rc5_done, - &rc5_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + &rc5_keysize }; -#define stab rc5_stab static const ulong32 stab[50] = { 0xb7e15163UL, 0x5618cb1cUL, 0xf45044d5UL, 0x9287be8eUL, 0x30bf3847UL, 0xcef6b200UL, 0x6d2e2bb9UL, 0x0b65a572UL, 0xa99d1f2bUL, 0x47d498e4UL, 0xe60c129dUL, 0x84438c56UL, 0x227b060fUL, 0xc0b27fc8UL, 0x5ee9f981UL, 0xfd21733aUL, @@ -35,31 +37,23 @@ static const ulong32 stab[50] = { 0x62482413UL, 0x007f9dccUL }; - /** - Initialize the LTC_RC5 block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ -#ifdef LTC_CLEAN_STACK -static int s_rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) +#ifdef CLEAN_STACK +static int _rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) #else int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) #endif { ulong32 L[64], *S, A, B, i, j, v, s, t, l; - LTC_ARGCHK(skey != NULL); - LTC_ARGCHK(key != NULL); - + _ARGCHK(skey != NULL); + _ARGCHK(key != NULL); + /* test parameters */ - if (num_rounds == 0) { + if (num_rounds == 0) { num_rounds = rc5_desc.default_rounds; } - if (num_rounds < 12 || num_rounds > 24) { + if (num_rounds < 12 || num_rounds > 24) { return CRYPT_INVALID_ROUNDS; } @@ -67,12 +61,12 @@ int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke if (keylen < 8 || keylen > 128) { return CRYPT_INVALID_KEYSIZE; } - + skey->rc5.rounds = num_rounds; S = skey->rc5.K; /* copy the key into the L array */ - for (A = i = j = 0; i < (ulong32)keylen; ) { + for (A = i = j = 0; i < (ulong32)keylen; ) { A = (A << 8) | ((ulong32)(key[i++] & 255)); if ((i & 3) == 0) { L[j++] = BSWAP(A); @@ -80,8 +74,8 @@ int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke } } - if ((keylen & 3) != 0) { - A <<= (ulong32)((8 * (4 - (keylen&3)))); + if ((keylen & 3) != 0) { + A <<= (ulong32)((8 * (4 - (keylen&3)))); L[j++] = BSWAP(A); } @@ -92,8 +86,8 @@ int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke /* mix buffer */ s = 3 * MAX(t, j); l = j; - for (A = B = i = j = v = 0; v < s; v++) { - A = S[i] = ROLc(S[i] + A + B, 3); + for (A = B = i = j = v = 0; v < s; v++) { + A = S[i] = ROL(S[i] + A + B, 3); B = L[j] = ROL(L[j] + A + B, (A+B)); if (++i == t) { i = 0; } if (++j == l) { j = 0; } @@ -101,48 +95,36 @@ int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { int x; - x = s_rc5_setup(key, keylen, num_rounds, skey); + x = _rc5_setup(key, keylen, num_rounds, skey); burn_stack(sizeof(ulong32) * 122 + sizeof(int)); return x; } #endif -/** - Encrypts a block of text with LTC_RC5 - @param pt The input plaintext (8 bytes) - @param ct The output ciphertext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -#ifdef LTC_CLEAN_STACK -static int s_rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +#ifdef CLEAN_STACK +static void _rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) #else -int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +void rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) #endif { - ulong32 A, B; - const ulong32 *K; + ulong32 A, B, *K; int r; - LTC_ARGCHK(skey != NULL); - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - - if (skey->rc5.rounds < 12 || skey->rc5.rounds > 24) { - return CRYPT_INVALID_ROUNDS; - } + _ARGCHK(key != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); LOAD32L(A, &pt[0]); LOAD32L(B, &pt[4]); - A += skey->rc5.K[0]; - B += skey->rc5.K[1]; - K = skey->rc5.K + 2; - - if ((skey->rc5.rounds & 1) == 0) { - for (r = 0; r < skey->rc5.rounds; r += 2) { + A += key->rc5.K[0]; + B += key->rc5.K[1]; + K = key->rc5.K + 2; + + if ((key->rc5.rounds & 1) == 0) { + for (r = 0; r < key->rc5.rounds; r += 2) { A = ROL(A ^ B, B) + K[0]; B = ROL(B ^ A, A) + K[1]; A = ROL(A ^ B, B) + K[2]; @@ -150,7 +132,7 @@ int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_ K += 4; } } else { - for (r = 0; r < skey->rc5.rounds; r++) { + for (r = 0; r < key->rc5.rounds; r++) { A = ROL(A ^ B, B) + K[0]; B = ROL(B ^ A, A) + K[1]; K += 2; @@ -158,50 +140,35 @@ int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_ } STORE32L(A, &ct[0]); STORE32L(B, &ct[4]); - - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +#ifdef CLEAN_STACK +void rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) { - int err = s_rc5_ecb_encrypt(pt, ct, skey); + _rc5_ecb_encrypt(pt, ct, key); burn_stack(sizeof(ulong32) * 2 + sizeof(int)); - return err; } #endif -/** - Decrypts a block of text with LTC_RC5 - @param ct The input ciphertext (8 bytes) - @param pt The output plaintext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -#ifdef LTC_CLEAN_STACK -static int s_rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +#ifdef CLEAN_STACK +static void _rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) #else -int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +void rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) #endif { - ulong32 A, B; - const ulong32 *K; + ulong32 A, B, *K; int r; - LTC_ARGCHK(skey != NULL); - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - - if (skey->rc5.rounds < 12 || skey->rc5.rounds > 24) { - return CRYPT_INVALID_ROUNDS; - } + _ARGCHK(key != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); LOAD32L(A, &ct[0]); LOAD32L(B, &ct[4]); - K = skey->rc5.K + (skey->rc5.rounds << 1); - - if ((skey->rc5.rounds & 1) == 0) { + K = key->rc5.K + (key->rc5.rounds << 1); + + if ((key->rc5.rounds & 1) == 0) { K -= 2; - for (r = skey->rc5.rounds - 1; r >= 0; r -= 2) { + for (r = key->rc5.rounds - 1; r >= 0; r -= 2) { B = ROR(B - K[3], A) ^ A; A = ROR(A - K[2], B) ^ B; B = ROR(B - K[1], A) ^ A; @@ -209,38 +176,31 @@ int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_ K -= 4; } } else { - for (r = skey->rc5.rounds - 1; r >= 0; r--) { + for (r = key->rc5.rounds - 1; r >= 0; r--) { B = ROR(B - K[1], A) ^ A; A = ROR(A - K[0], B) ^ B; K -= 2; } } - A -= skey->rc5.K[0]; - B -= skey->rc5.K[1]; + A -= key->rc5.K[0]; + B -= key->rc5.K[1]; STORE32L(A, &pt[0]); STORE32L(B, &pt[4]); - - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +#ifdef CLEAN_STACK +void rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) { - int err = s_rc5_ecb_decrypt(ct, pt, skey); + _rc5_ecb_decrypt(ct, pt, key); burn_stack(sizeof(ulong32) * 2 + sizeof(int)); - return err; } #endif -/** - Performs a self-test of the LTC_RC5 block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ int rc5_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else static const struct { unsigned char key[16], pt[8], ct[8]; } tests[] = { @@ -278,8 +238,7 @@ int rc5_test(void) rc5_ecb_decrypt(tmp[0], tmp[1], &key); /* compare */ - if (ltc_compare_testvector(tmp[0], 8, tests[x].ct, 8, "RC5 Encrypt", x) != 0 || - ltc_compare_testvector(tmp[1], 8, tests[x].pt, 8, "RC5 Decrypt", x) != 0) { + if (memcmp(tmp[0], tests[x].ct, 8) != 0 || memcmp(tmp[1], tests[x].pt, 8) != 0) { return CRYPT_FAIL_TESTVECTOR; } @@ -293,33 +252,17 @@ int rc5_test(void) #endif } -/** Terminate the context - @param skey The scheduled key -*/ -void rc5_done(symmetric_key *skey) +int rc5_keysize(int *desired_keysize) { - LTC_UNUSED_PARAM(skey); -} - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int rc5_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize < 8) { + _ARGCHK(desired_keysize != NULL); + if (*desired_keysize < 8) { return CRYPT_INVALID_KEYSIZE; - } - if (*keysize > 128) { - *keysize = 128; + } else if (*desired_keysize > 128) { + *desired_keysize = 128; } return CRYPT_OK; } -#undef stab - #endif diff --git a/src/ciphers/rc6.c b/rc6.c similarity index 57% rename from src/ciphers/rc6.c rename to rc6.c index 5b7eab92..62a2cf5f 100644 --- a/src/ciphers/rc6.c +++ b/rc6.c @@ -1,15 +1,20 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ -/** - @file rc6.c - LTC_RC6 code by Tom St Denis -*/ -#include "tomcrypt_private.h" +/* RC6 code by Tom St Denis */ +#include "mycrypt.h" -#ifdef LTC_RC6 +#ifdef RC6 -const struct ltc_cipher_descriptor rc6_desc = +const struct _cipher_descriptor rc6_desc = { "rc6", 3, @@ -18,12 +23,9 @@ const struct ltc_cipher_descriptor rc6_desc = &rc6_ecb_encrypt, &rc6_ecb_decrypt, &rc6_test, - &rc6_done, - &rc6_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + &rc6_keysize }; -#define stab rc6_stab static const ulong32 stab[44] = { 0xb7e15163UL, 0x5618cb1cUL, 0xf45044d5UL, 0x9287be8eUL, 0x30bf3847UL, 0xcef6b200UL, 0x6d2e2bb9UL, 0x0b65a572UL, 0xa99d1f2bUL, 0x47d498e4UL, 0xe60c129dUL, 0x84438c56UL, 0x227b060fUL, 0xc0b27fc8UL, 0x5ee9f981UL, 0xfd21733aUL, @@ -32,27 +34,19 @@ static const ulong32 stab[44] = { 0x7ed08883UL, 0x1d08023cUL, 0xbb3f7bf5UL, 0x5976f5aeUL, 0xf7ae6f67UL, 0x95e5e920UL, 0x341d62d9UL, 0xd254dc92UL, 0x708c564bUL, 0x0ec3d004UL, 0xacfb49bdUL, 0x4b32c376UL }; - /** - Initialize the LTC_RC6 block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ -#ifdef LTC_CLEAN_STACK -static int s_rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) +#ifdef CLEAN_STACK +static int _rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) #else int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) #endif { ulong32 L[64], S[50], A, B, i, j, v, s, l; - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); /* test parameters */ - if (num_rounds != 0 && num_rounds != 20) { + if (num_rounds != 0 && num_rounds != 20) { return CRYPT_INVALID_ROUNDS; } @@ -62,7 +56,7 @@ int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke } /* copy the key into the L array */ - for (A = i = j = 0; i < (ulong32)keylen; ) { + for (A = i = j = 0; i < (ulong32)keylen; ) { A = (A << 8) | ((ulong32)(key[i++] & 255)); if (!(i & 3)) { L[j++] = BSWAP(A); @@ -71,9 +65,9 @@ int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke } /* handle odd sized keys */ - if (keylen & 3) { - A <<= (8 * (4 - (keylen&3))); - L[j++] = BSWAP(A); + if (keylen & 3) { + A <<= (8 * (4 - (keylen&3))); + L[j++] = BSWAP(A); } /* setup the S array */ @@ -82,151 +76,128 @@ int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke /* mix buffer */ s = 3 * MAX(44, j); l = j; - for (A = B = i = j = v = 0; v < s; v++) { - A = S[i] = ROLc(S[i] + A + B, 3); + for (A = B = i = j = v = 0; v < s; v++) { + A = S[i] = ROL(S[i] + A + B, 3); B = L[j] = ROL(L[j] + A + B, (A+B)); if (++i == 44) { i = 0; } if (++j == l) { j = 0; } } - + /* copy to key */ - for (i = 0; i < 44; i++) { + for (i = 0; i < 44; i++) { skey->rc6.K[i] = S[i]; } return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { int x; - x = s_rc6_setup(key, keylen, num_rounds, skey); + x = _rc6_setup(key, keylen, num_rounds, skey); burn_stack(sizeof(ulong32) * 122); return x; } #endif -/** - Encrypts a block of text with LTC_RC6 - @param pt The input plaintext (16 bytes) - @param ct The output ciphertext (16 bytes) - @param skey The key as scheduled -*/ -#ifdef LTC_CLEAN_STACK -static int s_rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +#ifdef CLEAN_STACK +static void _rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) #else -int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +void rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) #endif { - ulong32 a,b,c,d,t,u; - const ulong32 *K; + ulong32 a,b,c,d,t,u, *K; int r; - - LTC_ARGCHK(skey != NULL); - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); + + _ARGCHK(key != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); LOAD32L(a,&pt[0]);LOAD32L(b,&pt[4]);LOAD32L(c,&pt[8]);LOAD32L(d,&pt[12]); - b += skey->rc6.K[0]; - d += skey->rc6.K[1]; + b += key->rc6.K[0]; + d += key->rc6.K[1]; #define RND(a,b,c,d) \ - t = (b * (b + b + 1)); t = ROLc(t, 5); \ - u = (d * (d + d + 1)); u = ROLc(u, 5); \ + t = (b * (b + b + 1)); t = ROL(t, 5); \ + u = (d * (d + d + 1)); u = ROL(u, 5); \ a = ROL(a^t,u) + K[0]; \ - c = ROL(c^u,t) + K[1]; K += 2; - - K = skey->rc6.K + 2; + c = ROL(c^u,t) + K[1]; K += 2; + + K = key->rc6.K + 2; for (r = 0; r < 20; r += 4) { RND(a,b,c,d); RND(b,c,d,a); RND(c,d,a,b); RND(d,a,b,c); } - + #undef RND - a += skey->rc6.K[42]; - c += skey->rc6.K[43]; + a += key->rc6.K[42]; + c += key->rc6.K[43]; STORE32L(a,&ct[0]);STORE32L(b,&ct[4]);STORE32L(c,&ct[8]);STORE32L(d,&ct[12]); - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +#ifdef CLEAN_STACK +void rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) { - int err = s_rc6_ecb_encrypt(pt, ct, skey); + _rc6_ecb_encrypt(pt, ct, key); burn_stack(sizeof(ulong32) * 6 + sizeof(int)); - return err; } #endif -/** - Decrypts a block of text with LTC_RC6 - @param ct The input ciphertext (16 bytes) - @param pt The output plaintext (16 bytes) - @param skey The key as scheduled -*/ -#ifdef LTC_CLEAN_STACK -static int s_rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +#ifdef CLEAN_STACK +static void _rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) #else -int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +void rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) #endif { - ulong32 a,b,c,d,t,u; - const ulong32 *K; + ulong32 a,b,c,d,t,u, *K; int r; - LTC_ARGCHK(skey != NULL); - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - + _ARGCHK(key != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + LOAD32L(a,&ct[0]);LOAD32L(b,&ct[4]);LOAD32L(c,&ct[8]);LOAD32L(d,&ct[12]); - a -= skey->rc6.K[42]; - c -= skey->rc6.K[43]; - + a -= key->rc6.K[42]; + c -= key->rc6.K[43]; + #define RND(a,b,c,d) \ - t = (b * (b + b + 1)); t = ROLc(t, 5); \ - u = (d * (d + d + 1)); u = ROLc(u, 5); \ + t = (b * (b + b + 1)); t = ROL(t, 5); \ + u = (d * (d + d + 1)); u = ROL(u, 5); \ c = ROR(c - K[1], t) ^ u; \ a = ROR(a - K[0], u) ^ t; K -= 2; - - K = skey->rc6.K + 40; - + + K = key->rc6.K + 40; + for (r = 0; r < 20; r += 4) { RND(d,a,b,c); RND(c,d,a,b); RND(b,c,d,a); RND(a,b,c,d); } - + #undef RND - b -= skey->rc6.K[0]; - d -= skey->rc6.K[1]; + b -= key->rc6.K[0]; + d -= key->rc6.K[1]; STORE32L(a,&pt[0]);STORE32L(b,&pt[4]);STORE32L(c,&pt[8]);STORE32L(d,&pt[12]); - - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +#ifdef CLEAN_STACK +void rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) { - int err = s_rc6_ecb_decrypt(ct, pt, skey); + _rc6_ecb_decrypt(ct, pt, key); burn_stack(sizeof(ulong32) * 6 + sizeof(int)); - return err; } #endif -/** - Performs a self-test of the LTC_RC6 block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ int rc6_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else static const struct { int keylen; unsigned char key[32], pt[16], ct[16]; @@ -280,8 +251,24 @@ int rc6_test(void) rc6_ecb_decrypt(tmp[0], tmp[1], &key); /* compare */ - if (ltc_compare_testvector(tmp[0], 16, tests[x].ct, 16, "RC6 Encrypt", x) || - ltc_compare_testvector(tmp[1], 16, tests[x].pt, 16, "RC6 Decrypt", x)) { + if (memcmp(tmp[0], tests[x].ct, 16) || memcmp(tmp[1], tests[x].pt, 16)) { +#if 0 + printf("\n\nFailed test %d\n", x); + if (memcmp(tmp[0], tests[x].ct, 16)) { + printf("Ciphertext: "); + for (y = 0; y < 16; y++) printf("%02x ", tmp[0][y]); + printf("\nExpected : "); + for (y = 0; y < 16; y++) printf("%02x ", tests[x].ct[y]); + printf("\n"); + } + if (memcmp(tmp[1], tests[x].pt, 16)) { + printf("Plaintext: "); + for (y = 0; y < 16; y++) printf("%02x ", tmp[0][y]); + printf("\nExpected : "); + for (y = 0; y < 16; y++) printf("%02x ", tests[x].pt[y]); + printf("\n"); + } +#endif return CRYPT_FAIL_TESTVECTOR; } @@ -295,32 +282,17 @@ int rc6_test(void) #endif } -/** Terminate the context - @param skey The scheduled key -*/ -void rc6_done(symmetric_key *skey) +int rc6_keysize(int *desired_keysize) { - LTC_UNUSED_PARAM(skey); -} - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int rc6_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize < 8) { + _ARGCHK(desired_keysize != NULL); + if (*desired_keysize < 8) { return CRYPT_INVALID_KEYSIZE; - } - if (*keysize > 128) { - *keysize = 128; + } else if (*desired_keysize > 128) { + *desired_keysize = 128; } return CRYPT_OK; } -#undef RND -#undef stab +#endif /*RC6*/ + -#endif /*LTC_RC6*/ diff --git a/src/hashes/rmd128.c b/rmd128.c similarity index 76% rename from src/hashes/rmd128.c rename to rmd128.c index b3465d3d..13a3135b 100644 --- a/src/hashes/rmd128.c +++ b/rmd128.c @@ -1,86 +1,88 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ -/** - @param rmd128.c - RMD128 Hash function -*/ - -/* Implementation of LTC_RIPEMD-128 based on the source by Antoon Bosselaers, ESAT-COSIC +/* Implementation of RIPEMD-128 based on the source by Antoon Bosselaers, ESAT-COSIC * * This source has been radically overhauled to be portable and work within * the LibTomCrypt API by Tom St Denis */ +#include "mycrypt.h" -#ifdef LTC_RIPEMD128 +#ifdef RIPEMD128 -const struct ltc_hash_descriptor rmd128_desc = +const struct _hash_descriptor rmd128_desc = { "rmd128", 8, 16, 64, - /* OID */ - { 1, 0, 10118, 3, 0, 50 }, - 6, + /* DER identifier (not supported) */ + { 0x00 }, + 0, &rmd128_init, &rmd128_process, &rmd128_done, - &rmd128_test, - NULL + &rmd128_test }; /* the four basic functions F(), G() and H() */ -#define F(x, y, z) ((x) ^ (y) ^ (z)) -#define G(x, y, z) (((x) & (y)) | (~(x) & (z))) +#define F(x, y, z) ((x) ^ (y) ^ (z)) +#define G(x, y, z) (((x) & (y)) | (~(x) & (z))) #define H(x, y, z) (((x) | ~(y)) ^ (z)) -#define I(x, y, z) (((x) & (z)) | ((y) & ~(z))) - +#define I(x, y, z) (((x) & (z)) | ((y) & ~(z))) + /* the eight basic operations FF() through III() */ #define FF(a, b, c, d, x, s) \ (a) += F((b), (c), (d)) + (x);\ - (a) = ROLc((a), (s)); + (a) = ROL((a), (s)); #define GG(a, b, c, d, x, s) \ (a) += G((b), (c), (d)) + (x) + 0x5a827999UL;\ - (a) = ROLc((a), (s)); + (a) = ROL((a), (s)); #define HH(a, b, c, d, x, s) \ (a) += H((b), (c), (d)) + (x) + 0x6ed9eba1UL;\ - (a) = ROLc((a), (s)); + (a) = ROL((a), (s)); #define II(a, b, c, d, x, s) \ (a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcUL;\ - (a) = ROLc((a), (s)); + (a) = ROL((a), (s)); #define FFF(a, b, c, d, x, s) \ (a) += F((b), (c), (d)) + (x);\ - (a) = ROLc((a), (s)); + (a) = ROL((a), (s)); #define GGG(a, b, c, d, x, s) \ (a) += G((b), (c), (d)) + (x) + 0x6d703ef3UL;\ - (a) = ROLc((a), (s)); + (a) = ROL((a), (s)); #define HHH(a, b, c, d, x, s) \ (a) += H((b), (c), (d)) + (x) + 0x5c4dd124UL;\ - (a) = ROLc((a), (s)); + (a) = ROL((a), (s)); #define III(a, b, c, d, x, s) \ (a) += I((b), (c), (d)) + (x) + 0x50a28be6UL;\ - (a) = ROLc((a), (s)); + (a) = ROL((a), (s)); -#ifdef LTC_CLEAN_STACK -static int ss_rmd128_compress(hash_state *md, const unsigned char *buf) +#ifdef CLEAN_STACK +static void _rmd128_compress(hash_state *md, unsigned char *buf) #else -static int s_rmd128_compress(hash_state *md, const unsigned char *buf) +static void rmd128_compress(hash_state *md, unsigned char *buf) #endif { ulong32 aa,bb,cc,dd,aaa,bbb,ccc,ddd,X[16]; int i; - + /* load words X */ for (i = 0; i < 16; i++){ LOAD32L(X[i], buf + (4 * i)); @@ -109,7 +111,7 @@ static int s_rmd128_compress(hash_state *md, const unsigned char *buf) FF(dd, aa, bb, cc, X[13], 7); FF(cc, dd, aa, bb, X[14], 9); FF(bb, cc, dd, aa, X[15], 8); - + /* round 2 */ GG(aa, bb, cc, dd, X[ 7], 7); GG(dd, aa, bb, cc, X[ 4], 6); @@ -165,7 +167,7 @@ static int s_rmd128_compress(hash_state *md, const unsigned char *buf) II(bb, cc, dd, aa, X[ 2], 12); /* parallel round 1 */ - III(aaa, bbb, ccc, ddd, X[ 5], 8); + III(aaa, bbb, ccc, ddd, X[ 5], 8); III(ddd, aaa, bbb, ccc, X[14], 9); III(ccc, ddd, aaa, bbb, X[ 7], 9); III(bbb, ccc, ddd, aaa, X[ 0], 11); @@ -200,7 +202,7 @@ static int s_rmd128_compress(hash_state *md, const unsigned char *buf) HHH(ccc, ddd, aaa, bbb, X[ 1], 13); HHH(bbb, ccc, ddd, aaa, X[ 2], 11); - /* parallel round 3 */ + /* parallel round 3 */ GGG(aaa, bbb, ccc, ddd, X[15], 9); GGG(ddd, aaa, bbb, ccc, X[ 5], 7); GGG(ccc, ddd, aaa, bbb, X[ 1], 15); @@ -242,58 +244,35 @@ static int s_rmd128_compress(hash_state *md, const unsigned char *buf) md->rmd128.state[2] = md->rmd128.state[3] + aa + bbb; md->rmd128.state[3] = md->rmd128.state[0] + bb + ccc; md->rmd128.state[0] = ddd; - - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -static int s_rmd128_compress(hash_state *md, const unsigned char *buf) +#ifdef CLEAN_STACK +static void rmd128_compress(hash_state *md, unsigned char *buf) { - int err; - err = ss_rmd128_compress(md, buf); + _rmd128_compress(md, buf); burn_stack(sizeof(ulong32) * 24 + sizeof(int)); - return err; } #endif -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int rmd128_init(hash_state * md) +void rmd128_init(hash_state * md) { - LTC_ARGCHK(md != NULL); + _ARGCHK(md != NULL); md->rmd128.state[0] = 0x67452301UL; md->rmd128.state[1] = 0xefcdab89UL; md->rmd128.state[2] = 0x98badcfeUL; md->rmd128.state[3] = 0x10325476UL; md->rmd128.curlen = 0; md->rmd128.length = 0; - return CRYPT_OK; } -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(rmd128_process, s_rmd128_compress, rmd128, 64) +HASH_PROCESS(rmd128_process, rmd128_compress, rmd128, 64) -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (16 bytes) - @return CRYPT_OK if successful -*/ -int rmd128_done(hash_state * md, unsigned char *out) +int rmd128_done(hash_state * md, unsigned char *hash) { int i; - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); + _ARGCHK(md != NULL); + _ARGCHK(hash != NULL); if (md->rmd128.curlen >= sizeof(md->rmd128.buf)) { return CRYPT_INVALID_ARG; @@ -314,7 +293,7 @@ int rmd128_done(hash_state * md, unsigned char *out) while (md->rmd128.curlen < 64) { md->rmd128.buf[md->rmd128.curlen++] = (unsigned char)0; } - s_rmd128_compress(md, md->rmd128.buf); + rmd128_compress(md, md->rmd128.buf); md->rmd128.curlen = 0; } @@ -325,30 +304,26 @@ int rmd128_done(hash_state * md, unsigned char *out) /* store length */ STORE64L(md->rmd128.length, md->rmd128.buf+56); - s_rmd128_compress(md, md->rmd128.buf); + rmd128_compress(md, md->rmd128.buf); /* copy output */ for (i = 0; i < 4; i++) { - STORE32L(md->rmd128.state[i], out+(4*i)); + STORE32L(md->rmd128.state[i], hash+(4*i)); } -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK zeromem(md, sizeof(hash_state)); #endif - return CRYPT_OK; + return CRYPT_OK; } -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ int rmd128_test(void) { #ifndef LTC_TEST return CRYPT_NOP; #else static const struct { - const char *msg; - unsigned char hash[16]; + char *msg; + unsigned char md[16]; } tests[] = { { "", { 0xcd, 0xf2, 0x62, 0x13, 0xa1, 0x50, 0xdc, 0x3e, @@ -375,16 +350,18 @@ int rmd128_test(void) 0xae, 0xa4, 0x62, 0x4c, 0x60, 0xc5, 0xc7, 0x02 } } }; - - int i; - unsigned char tmp[16]; + int x; + unsigned char buf[16]; hash_state md; - for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) { + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { rmd128_init(&md); - rmd128_process(&md, (unsigned char *)tests[i].msg, XSTRLEN(tests[i].msg)); - rmd128_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "RIPEMD128", i)) { + rmd128_process(&md, (unsigned char *)tests[x].msg, strlen(tests[x].msg)); + rmd128_done(&md, buf); + if (memcmp(buf, tests[x].md, 16) != 0) { + #if 0 + printf("Failed test %d\n", x); + #endif return CRYPT_FAIL_TESTVECTOR; } } @@ -392,17 +369,5 @@ int rmd128_test(void) #endif } -#undef F -#undef G -#undef H -#undef I -#undef FF -#undef GG -#undef HH -#undef II -#undef FFF -#undef GGG -#undef HHH -#undef III - #endif + diff --git a/src/hashes/rmd160.c b/rmd160.c similarity index 78% rename from src/hashes/rmd160.c rename to rmd160.c index d4531f4b..6b49076c 100644 --- a/src/hashes/rmd160.c +++ b/rmd160.c @@ -1,101 +1,104 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ -/** - @file rmd160.c - RMD160 hash function -*/ - -/* Implementation of LTC_RIPEMD-160 based on the source by Antoon Bosselaers, ESAT-COSIC +/* Implementation of RIPEMD-160 based on the source by Antoon Bosselaers, ESAT-COSIC * * This source has been radically overhauled to be portable and work within * the LibTomCrypt API by Tom St Denis */ +#include "mycrypt.h" -#ifdef LTC_RIPEMD160 +#ifdef RIPEMD160 -const struct ltc_hash_descriptor rmd160_desc = +const struct _hash_descriptor rmd160_desc = { "rmd160", 9, 20, 64, - /* OID */ - { 1, 3, 36, 3, 2, 1, }, - 6, + /* DER identifier */ + { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x24, + 0x03, 0x02, 0x01, 0x05, 0x00, 0x04, 0x14 }, + 15, &rmd160_init, &rmd160_process, &rmd160_done, - &rmd160_test, - NULL + &rmd160_test }; /* the five basic functions F(), G() and H() */ -#define F(x, y, z) ((x) ^ (y) ^ (z)) -#define G(x, y, z) (((x) & (y)) | (~(x) & (z))) +#define F(x, y, z) ((x) ^ (y) ^ (z)) +#define G(x, y, z) (((x) & (y)) | (~(x) & (z))) #define H(x, y, z) (((x) | ~(y)) ^ (z)) -#define I(x, y, z) (((x) & (z)) | ((y) & ~(z))) +#define I(x, y, z) (((x) & (z)) | ((y) & ~(z))) #define J(x, y, z) ((x) ^ ((y) | ~(z))) - + /* the ten basic operations FF() through III() */ #define FF(a, b, c, d, e, x, s) \ (a) += F((b), (c), (d)) + (x);\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); #define GG(a, b, c, d, e, x, s) \ (a) += G((b), (c), (d)) + (x) + 0x5a827999UL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); #define HH(a, b, c, d, e, x, s) \ (a) += H((b), (c), (d)) + (x) + 0x6ed9eba1UL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); #define II(a, b, c, d, e, x, s) \ (a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcUL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); #define JJ(a, b, c, d, e, x, s) \ (a) += J((b), (c), (d)) + (x) + 0xa953fd4eUL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); #define FFF(a, b, c, d, e, x, s) \ (a) += F((b), (c), (d)) + (x);\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); #define GGG(a, b, c, d, e, x, s) \ (a) += G((b), (c), (d)) + (x) + 0x7a6d76e9UL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); #define HHH(a, b, c, d, e, x, s) \ (a) += H((b), (c), (d)) + (x) + 0x6d703ef3UL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); #define III(a, b, c, d, e, x, s) \ (a) += I((b), (c), (d)) + (x) + 0x5c4dd124UL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); #define JJJ(a, b, c, d, e, x, s) \ (a) += J((b), (c), (d)) + (x) + 0x50a28be6UL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); -#ifdef LTC_CLEAN_STACK -static int ss_rmd160_compress(hash_state *md, const unsigned char *buf) +#ifdef CLEAN_STACK +static void _rmd160_compress(hash_state *md, unsigned char *buf) #else -static int s_rmd160_compress(hash_state *md, const unsigned char *buf) +static void rmd160_compress(hash_state *md, unsigned char *buf) #endif { ulong32 aa,bb,cc,dd,ee,aaa,bbb,ccc,ddd,eee,X[16]; @@ -130,7 +133,7 @@ static int s_rmd160_compress(hash_state *md, const unsigned char *buf) FF(cc, dd, ee, aa, bb, X[13], 7); FF(bb, cc, dd, ee, aa, X[14], 9); FF(aa, bb, cc, dd, ee, X[15], 8); - + /* round 2 */ GG(ee, aa, bb, cc, dd, X[ 7], 7); GG(dd, ee, aa, bb, cc, X[ 4], 6); @@ -222,7 +225,7 @@ static int s_rmd160_compress(hash_state *md, const unsigned char *buf) JJJ(aaa, bbb, ccc, ddd, eee, X[12], 6); /* parallel round 2 */ - III(eee, aaa, bbb, ccc, ddd, X[ 6], 9); + III(eee, aaa, bbb, ccc, ddd, X[ 6], 9); III(ddd, eee, aaa, bbb, ccc, X[11], 13); III(ccc, ddd, eee, aaa, bbb, X[ 3], 15); III(bbb, ccc, ddd, eee, aaa, X[ 7], 7); @@ -257,7 +260,7 @@ static int s_rmd160_compress(hash_state *md, const unsigned char *buf) HHH(eee, aaa, bbb, ccc, ddd, X[ 4], 7); HHH(ddd, eee, aaa, bbb, ccc, X[13], 5); - /* parallel round 4 */ + /* parallel round 4 */ GGG(ccc, ddd, eee, aaa, bbb, X[ 8], 15); GGG(bbb, ccc, ddd, eee, aaa, X[ 6], 5); GGG(aaa, bbb, ccc, ddd, eee, X[ 4], 8); @@ -300,28 +303,19 @@ static int s_rmd160_compress(hash_state *md, const unsigned char *buf) md->rmd160.state[3] = md->rmd160.state[4] + aa + bbb; md->rmd160.state[4] = md->rmd160.state[0] + bb + ccc; md->rmd160.state[0] = ddd; - - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -static int s_rmd160_compress(hash_state *md, const unsigned char *buf) +#ifdef CLEAN_STACK +static void rmd160_compress(hash_state *md, unsigned char *buf) { - int err; - err = ss_rmd160_compress(md, buf); + _rmd160_compress(md, buf); burn_stack(sizeof(ulong32) * 26 + sizeof(int)); - return err; } #endif -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int rmd160_init(hash_state * md) +void rmd160_init(hash_state * md) { - LTC_ARGCHK(md != NULL); + _ARGCHK(md != NULL); md->rmd160.state[0] = 0x67452301UL; md->rmd160.state[1] = 0xefcdab89UL; md->rmd160.state[2] = 0x98badcfeUL; @@ -329,30 +323,16 @@ int rmd160_init(hash_state * md) md->rmd160.state[4] = 0xc3d2e1f0UL; md->rmd160.curlen = 0; md->rmd160.length = 0; - return CRYPT_OK; } -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(rmd160_process, s_rmd160_compress, rmd160, 64) +HASH_PROCESS(rmd160_process, rmd160_compress, rmd160, 64) -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (20 bytes) - @return CRYPT_OK if successful -*/ -int rmd160_done(hash_state * md, unsigned char *out) +int rmd160_done(hash_state * md, unsigned char *hash) { int i; - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); + _ARGCHK(md != NULL); + _ARGCHK(hash != NULL); if (md->rmd160.curlen >= sizeof(md->rmd160.buf)) { return CRYPT_INVALID_ARG; @@ -373,7 +353,7 @@ int rmd160_done(hash_state * md, unsigned char *out) while (md->rmd160.curlen < 64) { md->rmd160.buf[md->rmd160.curlen++] = (unsigned char)0; } - s_rmd160_compress(md, md->rmd160.buf); + rmd160_compress(md, md->rmd160.buf); md->rmd160.curlen = 0; } @@ -384,30 +364,26 @@ int rmd160_done(hash_state * md, unsigned char *out) /* store length */ STORE64L(md->rmd160.length, md->rmd160.buf+56); - s_rmd160_compress(md, md->rmd160.buf); + rmd160_compress(md, md->rmd160.buf); /* copy output */ for (i = 0; i < 5; i++) { - STORE32L(md->rmd160.state[i], out+(4*i)); + STORE32L(md->rmd160.state[i], hash+(4*i)); } -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK zeromem(md, sizeof(hash_state)); #endif return CRYPT_OK; } -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ int rmd160_test(void) { #ifndef LTC_TEST return CRYPT_NOP; #else static const struct { - const char *msg; - unsigned char hash[20]; + char *msg; + unsigned char md[20]; } tests[] = { { "", { 0x9c, 0x11, 0x85, 0xa5, 0xc5, 0xe9, 0xfc, 0x54, 0x61, 0x28, @@ -434,16 +410,18 @@ int rmd160_test(void) 0xa0, 0x6c, 0x27, 0xdc, 0xf4, 0x9a, 0xda, 0x62, 0xeb, 0x2b } } }; - - int i; - unsigned char tmp[20]; + int x; + unsigned char buf[20]; hash_state md; - for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) { + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { rmd160_init(&md); - rmd160_process(&md, (unsigned char *)tests[i].msg, XSTRLEN(tests[i].msg)); - rmd160_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "RIPEMD160", i)) { + rmd160_process(&md, (unsigned char *)tests[x].msg, strlen(tests[x].msg)); + rmd160_done(&md, buf); + if (memcmp(buf, tests[x].md, 20) != 0) { +#if 0 + printf("Failed test %d\n", x); +#endif return CRYPT_FAIL_TESTVECTOR; } } @@ -451,20 +429,5 @@ int rmd160_test(void) #endif } -#undef F -#undef G -#undef H -#undef I -#undef J -#undef FF -#undef GG -#undef HH -#undef II -#undef JJ -#undef FFF -#undef GGG -#undef HHH -#undef III -#undef JJJ - #endif + diff --git a/rng_get_bytes.c b/rng_get_bytes.c new file mode 100644 index 00000000..f3027cd8 --- /dev/null +++ b/rng_get_bytes.c @@ -0,0 +1,129 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* portable way to get secure random bits to feed a PRNG */ +#include "mycrypt.h" + +#ifdef DEVRANDOM +/* on *NIX read /dev/random */ +static unsigned long rng_nix(unsigned char *buf, unsigned long len, + void (*callback)(void)) +{ +#ifdef NO_FILE + return 0; +#else + FILE *f; + unsigned long x; +#ifdef TRY_URANDOM_FIRST + f = fopen("/dev/urandom", "rb"); + if (f == NULL) +#endif /* TRY_URANDOM_FIRST */ + f = fopen("/dev/random", "rb"); + + if (f == NULL) { + return 0; + } + + /* disable buffering */ + if (setvbuf(f, NULL, _IONBF, 0) != 0) { + fclose(f); + return 0; + } + + x = (unsigned long)fread(buf, 1, (size_t)len, f); + fclose(f); + return x; +#endif /* NO_FILE */ +} + +#endif /* DEVRANDOM */ + +/* on ANSI C platforms with 100 < CLOCKS_PER_SEC < 10000 */ +#if defined(CLOCKS_PER_SEC) + +#define ANSI_RNG + +static unsigned long rng_ansic(unsigned char *buf, unsigned long len, + void (*callback)(void)) +{ + clock_t t1; + int l, acc, bits, a, b; + + if (XCLOCKS_PER_SEC < 100 || XCLOCKS_PER_SEC > 10000) { + return 0; + } + + l = len; + bits = 8; + acc = a = b = 0; + while (len--) { + if (callback != NULL) callback(); + while (bits--) { + do { + t1 = XCLOCK(); while (t1 == XCLOCK()) a ^= 1; + t1 = XCLOCK(); while (t1 == XCLOCK()) b ^= 1; + } while (a == b); + acc = (acc << 1) | a; + } + *buf++ = acc; + acc = 0; + bits = 8; + } + acc = bits = a = b = 0; + return l; +} + +#endif + +/* Try the Microsoft CSP */ +#ifdef WIN32 +#define _WIN32_WINNT 0x0400 +#include +#include + +static unsigned long rng_win32(unsigned char *buf, unsigned long len, + void (*callback)(void)) +{ + HCRYPTPROV hProv = 0; + if (!CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, + (CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) && + !CryptAcquireContext (&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, + CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET | CRYPT_NEWKEYSET)) + return 0; + + if (CryptGenRandom(hProv, len, buf) == TRUE) { + CryptReleaseContext(hProv, 0); + return len; + } else { + CryptReleaseContext(hProv, 0); + return 0; + } +} + +#endif /* WIN32 */ + +unsigned long rng_get_bytes(unsigned char *buf, unsigned long len, + void (*callback)(void)) +{ + unsigned long x; + + _ARGCHK(buf != NULL); + +#if defined(DEVRANDOM) + x = rng_nix(buf, len, callback); if (x != 0) { return x; } +#endif +#ifdef WIN32 + x = rng_win32(buf, len, callback); if (x != 0) { return x; } +#endif +#ifdef ANSI_RNG + x = rng_ansic(buf, len, callback); if (x != 0) { return x; } +#endif + return 0; +} diff --git a/rng_make_prng.c b/rng_make_prng.c new file mode 100644 index 00000000..4c30e693 --- /dev/null +++ b/rng_make_prng.c @@ -0,0 +1,53 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +/* portable way to get secure random bits to feed a PRNG */ +#include "mycrypt.h" + +int rng_make_prng(int bits, int wprng, prng_state *prng, + void (*callback)(void)) +{ + unsigned char buf[256]; + int err; + + _ARGCHK(prng != NULL); + + /* check parameter */ + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + if (bits < 64 || bits > 1024) { + return CRYPT_INVALID_PRNGSIZE; + } + + if ((err = prng_descriptor[wprng].start(prng)) != CRYPT_OK) { + return err; + } + + bits = ((bits/8)+((bits&7)!=0?1:0)) * 2; + if (rng_get_bytes(buf, (unsigned long)bits, callback) != (unsigned long)bits) { + return CRYPT_ERROR_READPRNG; + } + + if ((err = prng_descriptor[wprng].add_entropy(buf, (unsigned long)bits, prng)) != CRYPT_OK) { + return err; + } + + if ((err = prng_descriptor[wprng].ready(prng)) != CRYPT_OK) { + return err; + } + + #ifdef CLEAN_STACK + zeromem(buf, sizeof(buf)); + #endif + return CRYPT_OK; +} + diff --git a/rsa_decrypt_key.c b/rsa_decrypt_key.c new file mode 100644 index 00000000..ccdc8b1a --- /dev/null +++ b/rsa_decrypt_key.c @@ -0,0 +1,74 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef MRSA + +/* decrypt then OAEP depad */ +int rsa_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *outkey, unsigned long *keylen, + const unsigned char *lparam, unsigned long lparamlen, + prng_state *prng, int prng_idx, + int hash_idx, int *res, + rsa_key *key) +{ + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + unsigned char *tmp; + + _ARGCHK(outkey != NULL); + _ARGCHK(keylen != NULL); + _ARGCHK(key != NULL); + _ARGCHK(res != NULL); + + /* valid hash/prng ? */ + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + /* get modulus len in bits */ + modulus_bitlen = mp_count_bits(&(key->N)); + + /* outlen must be at least the size of the modulus */ + modulus_bytelen = mp_unsigned_bin_size(&(key->N)); + if (modulus_bytelen != inlen) { + return CRYPT_INVALID_PACKET; + } + + /* allocate ram */ + tmp = XMALLOC(inlen); + if (tmp == NULL) { + return CRYPT_MEM; + } + + /* rsa decode the packet */ + x = inlen; + if ((err = rsa_exptmod(in, inlen, tmp, &x, PK_PRIVATE, prng, prng_idx, key)) != CRYPT_OK) { + XFREE(tmp); + return err; + } + + /* now OAEP decode the packet */ + err = pkcs_1_oaep_decode(tmp, x, lparam, lparamlen, modulus_bitlen, hash_idx, + outkey, keylen, res); + XFREE(tmp); + return err; +} + +#endif /* MRSA */ + + + + diff --git a/rsa_encrypt_key.c b/rsa_encrypt_key.c new file mode 100644 index 00000000..fc5076b6 --- /dev/null +++ b/rsa_encrypt_key.c @@ -0,0 +1,59 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef MRSA + +/* OAEP pad then encrypt */ +int rsa_encrypt_key(const unsigned char *inkey, unsigned long inlen, + unsigned char *outkey, unsigned long *outlen, + const unsigned char *lparam, unsigned long lparamlen, + prng_state *prng, int prng_idx, int hash_idx, rsa_key *key) +{ + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + + _ARGCHK(inkey != NULL); + _ARGCHK(outkey != NULL); + _ARGCHK(outlen != NULL); + _ARGCHK(key != NULL); + + /* valid prng and hash ? */ + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + /* get modulus len in bits */ + modulus_bitlen = mp_count_bits(&(key->N)); + + /* outlen must be at least the size of the modulus */ + modulus_bytelen = mp_unsigned_bin_size(&(key->N)); + if (modulus_bytelen > *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* OAEP pad the key */ + x = *outlen; + if ((err = pkcs_1_oaep_encode(inkey, inlen, lparam, + lparamlen, modulus_bitlen, prng, prng_idx, hash_idx, + outkey, &x)) != CRYPT_OK) { + return err; + } + + /* rsa exptmod the OAEP pad */ + return rsa_exptmod(outkey, x, outkey, outlen, PK_PUBLIC, prng, prng_idx, key); +} + +#endif /* MRSA */ diff --git a/rsa_export.c b/rsa_export.c new file mode 100644 index 00000000..cedd26d5 --- /dev/null +++ b/rsa_export.c @@ -0,0 +1,72 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef MRSA + +int rsa_export(unsigned char *out, unsigned long *outlen, int type, rsa_key *key) +{ + unsigned long y, z; + int err; + + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + _ARGCHK(key != NULL); + + /* can we store the static header? */ + if (*outlen < (PACKET_SIZE + 1)) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* type valid? */ + if (!(key->type == PK_PRIVATE || key->type == PK_PRIVATE_OPTIMIZED) && + (type == PK_PRIVATE || type == PK_PRIVATE_OPTIMIZED)) { + return CRYPT_PK_INVALID_TYPE; + } + + /* start at offset y=PACKET_SIZE */ + y = PACKET_SIZE; + + /* output key type */ + out[y++] = type; + + /* output modulus */ + OUTPUT_BIGNUM(&key->N, out, y, z); + + /* output public key */ + OUTPUT_BIGNUM(&key->e, out, y, z); + + if (type == PK_PRIVATE || type == PK_PRIVATE_OPTIMIZED) { + OUTPUT_BIGNUM(&key->d, out, y, z); + } + + if (type == PK_PRIVATE_OPTIMIZED) { + OUTPUT_BIGNUM(&key->dQ, out, y, z); + OUTPUT_BIGNUM(&key->dP, out, y, z); + OUTPUT_BIGNUM(&key->pQ, out, y, z); + OUTPUT_BIGNUM(&key->qP, out, y, z); + OUTPUT_BIGNUM(&key->p, out, y, z); + OUTPUT_BIGNUM(&key->q, out, y, z); + } + + /* store packet header */ + packet_store_header(out, PACKET_SECT_RSA, PACKET_SUB_KEY); + + /* copy to the user buffer */ + *outlen = y; + + /* clear stack and return */ + return CRYPT_OK; +} + +#endif /* MRSA */ + diff --git a/rsa_exptmod.c b/rsa_exptmod.c new file mode 100644 index 00000000..1f6daae1 --- /dev/null +++ b/rsa_exptmod.c @@ -0,0 +1,99 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* RSA Code by Tom St Denis */ +#include "mycrypt.h" + +#ifdef MRSA + +int rsa_exptmod(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, int which, + prng_state *prng, int prng_idx, + rsa_key *key) +{ + mp_int tmp, tmpa, tmpb; + unsigned long x; + int err; + + _ARGCHK(in != NULL); + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + _ARGCHK(key != NULL); + + /* valid prng? */ + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + + /* is the key of the right type for the operation? */ + if (which == PK_PRIVATE && (key->type != PK_PRIVATE && key->type != PK_PRIVATE_OPTIMIZED)) { + return CRYPT_PK_NOT_PRIVATE; + } + + /* must be a private or public operation */ + if (which != PK_PRIVATE && which != PK_PUBLIC) { + return CRYPT_PK_INVALID_TYPE; + } + + /* init and copy into tmp */ + if ((err = mp_init_multi(&tmp, &tmpa, &tmpb, NULL)) != MP_OKAY) { goto error; } + if ((err = mp_read_unsigned_bin(&tmp, (unsigned char *)in, (int)inlen)) != MP_OKAY) { goto error; } + + /* sanity check on the input */ + if (mp_cmp(&key->N, &tmp) == MP_LT) { + err = CRYPT_PK_INVALID_SIZE; + goto done; + } + + /* are we using the private exponent and is the key optimized? */ + if (which == PK_PRIVATE && key->type == PK_PRIVATE_OPTIMIZED) { + /* tmpa = tmp^dP mod p */ + if ((err = tim_exptmod(prng, prng_idx, &tmp, &key->e, &key->dP, &key->p, &tmpa)) != MP_OKAY) { goto error; } + + /* tmpb = tmp^dQ mod q */ + if ((err = tim_exptmod(prng, prng_idx, &tmp, &key->e, &key->dQ, &key->q, &tmpb)) != MP_OKAY) { goto error; } + + /* tmp = tmpa*qP + tmpb*pQ mod N */ + if ((err = mp_mul(&tmpa, &key->qP, &tmpa)) != MP_OKAY) { goto error; } + if ((err = mp_mul(&tmpb, &key->pQ, &tmpb)) != MP_OKAY) { goto error; } + if ((err = mp_addmod(&tmpa, &tmpb, &key->N, &tmp)) != MP_OKAY) { goto error; } + } else { + /* exptmod it */ + if (which == PK_PRIVATE) { + if ((err = tim_exptmod(prng, prng_idx, &tmp, &key->e, &key->d, &key->N, &tmp)) != MP_OKAY) { goto error; } + } else { + if ((err = mp_exptmod(&tmp, &key->e, &key->N, &tmp)) != MP_OKAY) { goto error; } + } + } + + /* read it back */ + x = (unsigned long)mp_unsigned_bin_size(&key->N); + if (x > *outlen) { + err = CRYPT_BUFFER_OVERFLOW; + goto done; + } + *outlen = x; + + /* convert it */ + zeromem(out, x); + if ((err = mp_to_unsigned_bin(&tmp, out+(x-mp_unsigned_bin_size(&tmp)))) != MP_OKAY) { goto error; } + + /* clean up and return */ + err = CRYPT_OK; + goto done; +error: + err = mpi_to_ltc_error(err); +done: + mp_clear_multi(&tmp, &tmpa, &tmpb, NULL); + return err; +} + +#endif diff --git a/rsa_free.c b/rsa_free.c new file mode 100644 index 00000000..c97242b3 --- /dev/null +++ b/rsa_free.c @@ -0,0 +1,24 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* RSA Code by Tom St Denis */ +#include "mycrypt.h" + +#ifdef MRSA + +void rsa_free(rsa_key *key) +{ + _ARGCHK(key != NULL); + mp_clear_multi(&key->e, &key->d, &key->N, &key->dQ, &key->dP, + &key->qP, &key->pQ, &key->p, &key->q, NULL); +} + +#endif diff --git a/rsa_import.c b/rsa_import.c new file mode 100644 index 00000000..deffc386 --- /dev/null +++ b/rsa_import.c @@ -0,0 +1,81 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef MRSA + +int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key) +{ + unsigned long x, y; + int err; + + _ARGCHK(in != NULL); + _ARGCHK(key != NULL); + + /* check length */ + if (inlen < (1+PACKET_SIZE)) { + return CRYPT_INVALID_PACKET; + } + + /* test packet header */ + if ((err = packet_valid_header((unsigned char *)in, PACKET_SECT_RSA, PACKET_SUB_KEY)) != CRYPT_OK) { + return err; + } + + /* init key */ + if ((err = mp_init_multi(&key->e, &key->d, &key->N, &key->dQ, &key->dP, &key->qP, + &key->pQ, &key->p, &key->q, NULL)) != MP_OKAY) { + return mpi_to_ltc_error(err); + } + + /* get key type */ + y = PACKET_SIZE; + key->type = (int)in[y++]; + + /* load the modulus */ + INPUT_BIGNUM(&key->N, in, x, y, inlen); + + /* load public exponent */ + INPUT_BIGNUM(&key->e, in, x, y, inlen); + + /* get private exponent */ + if (key->type == PK_PRIVATE || key->type == PK_PRIVATE_OPTIMIZED) { + INPUT_BIGNUM(&key->d, in, x, y, inlen); + } + + /* get CRT private data if required */ + if (key->type == PK_PRIVATE_OPTIMIZED) { + INPUT_BIGNUM(&key->dQ, in, x, y, inlen); + INPUT_BIGNUM(&key->dP, in, x, y, inlen); + INPUT_BIGNUM(&key->pQ, in, x, y, inlen); + INPUT_BIGNUM(&key->qP, in, x, y, inlen); + INPUT_BIGNUM(&key->p, in, x, y, inlen); + INPUT_BIGNUM(&key->q, in, x, y, inlen); + } + + /* free up ram not required */ + if (key->type != PK_PRIVATE_OPTIMIZED) { + mp_clear_multi(&key->dQ, &key->dP, &key->pQ, &key->qP, &key->p, &key->q, NULL); + } + if (key->type != PK_PRIVATE && key->type != PK_PRIVATE_OPTIMIZED) { + mp_clear(&key->d); + } + + return CRYPT_OK; +error: + mp_clear_multi(&key->d, &key->e, &key->N, &key->dQ, &key->dP, + &key->pQ, &key->qP, &key->p, &key->q, NULL); + return err; +} + +#endif /* MRSA */ + diff --git a/rsa_make_key.c b/rsa_make_key.c new file mode 100644 index 00000000..e96bea33 --- /dev/null +++ b/rsa_make_key.c @@ -0,0 +1,116 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* RSA Code by Tom St Denis */ +#include "mycrypt.h" + +#ifdef MRSA + +int rsa_make_key(prng_state *prng, int wprng, int size, long e, rsa_key *key) +{ + mp_int p, q, tmp1, tmp2, tmp3; + int err; + + _ARGCHK(key != NULL); + + if ((size < (MIN_RSA_SIZE/8)) || (size > (MAX_RSA_SIZE/8))) { + return CRYPT_INVALID_KEYSIZE; + } + + if ((e < 3) || ((e & 1) == 0)) { + return CRYPT_INVALID_ARG; + } + + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + if ((err = mp_init_multi(&p, &q, &tmp1, &tmp2, &tmp3, NULL)) != MP_OKAY) { + return mpi_to_ltc_error(err); + } + + /* make primes p and q (optimization provided by Wayne Scott) */ + if ((err = mp_set_int(&tmp3, e)) != MP_OKAY) { goto error; } /* tmp3 = e */ + + /* make prime "p" */ + do { + if ((err = rand_prime(&p, size*4, prng, wprng)) != CRYPT_OK) { goto done; } + if ((err = mp_sub_d(&p, 1, &tmp1)) != MP_OKAY) { goto error; } /* tmp1 = p-1 */ + if ((err = mp_gcd(&tmp1, &tmp3, &tmp2)) != MP_OKAY) { goto error; } /* tmp2 = gcd(p-1, e) */ + } while (mp_cmp_d(&tmp2, 1) != 0); /* while e divides p-1 */ + + /* make prime "q" */ + do { + if ((err = rand_prime(&q, size*4, prng, wprng)) != CRYPT_OK) { goto done; } + if ((err = mp_sub_d(&q, 1, &tmp1)) != MP_OKAY) { goto error; } /* tmp1 = q-1 */ + if ((err = mp_gcd(&tmp1, &tmp3, &tmp2)) != MP_OKAY) { goto error; } /* tmp2 = gcd(q-1, e) */ + } while (mp_cmp_d(&tmp2, 1) != 0); /* while e divides q-1 */ + + /* tmp1 = lcm(p-1, q-1) */ + if ((err = mp_sub_d(&p, 1, &tmp2)) != MP_OKAY) { goto error; } /* tmp2 = p-1 */ + /* tmp1 = q-1 (previous do/while loop) */ + if ((err = mp_lcm(&tmp1, &tmp2, &tmp1)) != MP_OKAY) { goto error; } /* tmp1 = lcm(p-1, q-1) */ + + /* make key */ + if ((err = mp_init_multi(&key->e, &key->d, &key->N, &key->dQ, &key->dP, + &key->qP, &key->pQ, &key->p, &key->q, NULL)) != MP_OKAY) { + goto error; + } + + if ((err = mp_set_int(&key->e, e)) != MP_OKAY) { goto error2; } /* key->e = e */ + if ((err = mp_invmod(&key->e, &tmp1, &key->d)) != MP_OKAY) { goto error2; } /* key->d = 1/e mod lcm(p-1,q-1) */ + if ((err = mp_mul(&p, &q, &key->N)) != MP_OKAY) { goto error2; } /* key->N = pq */ + +/* optimize for CRT now */ + /* find d mod q-1 and d mod p-1 */ + if ((err = mp_sub_d(&p, 1, &tmp1)) != MP_OKAY) { goto error2; } /* tmp1 = q-1 */ + if ((err = mp_sub_d(&q, 1, &tmp2)) != MP_OKAY) { goto error2; } /* tmp2 = p-1 */ + + if ((err = mp_mod(&key->d, &tmp1, &key->dP)) != MP_OKAY) { goto error2; } /* dP = d mod p-1 */ + if ((err = mp_mod(&key->d, &tmp2, &key->dQ)) != MP_OKAY) { goto error2; } /* dQ = d mod q-1 */ + + if ((err = mp_invmod(&q, &p, &key->qP)) != MP_OKAY) { goto error2; } /* qP = 1/q mod p */ + if ((err = mp_mulmod(&key->qP, &q, &key->N, &key->qP)) != MP_OKAY) { goto error2; } /* qP = q * (1/q mod p) mod N */ + + if ((err = mp_invmod(&p, &q, &key->pQ)) != MP_OKAY) { goto error2; } /* pQ = 1/p mod q */ + if ((err = mp_mulmod(&key->pQ, &p, &key->N, &key->pQ)) != MP_OKAY) { goto error2; } /* pQ = p * (1/p mod q) mod N */ + + if ((err = mp_copy(&p, &key->p)) != MP_OKAY) { goto error2; } + if ((err = mp_copy(&q, &key->q)) != MP_OKAY) { goto error2; } + + /* shrink ram required */ + if ((err = mp_shrink(&key->e)) != MP_OKAY) { goto error2; } + if ((err = mp_shrink(&key->d)) != MP_OKAY) { goto error2; } + if ((err = mp_shrink(&key->N)) != MP_OKAY) { goto error2; } + if ((err = mp_shrink(&key->dQ)) != MP_OKAY) { goto error2; } + if ((err = mp_shrink(&key->dP)) != MP_OKAY) { goto error2; } + if ((err = mp_shrink(&key->qP)) != MP_OKAY) { goto error2; } + if ((err = mp_shrink(&key->pQ)) != MP_OKAY) { goto error2; } + if ((err = mp_shrink(&key->p)) != MP_OKAY) { goto error2; } + if ((err = mp_shrink(&key->q)) != MP_OKAY) { goto error2; } + + /* set key type (in this case it's CRT optimized) */ + key->type = PK_PRIVATE_OPTIMIZED; + + /* return ok and free temps */ + err = CRYPT_OK; + goto done; +error2: + mp_clear_multi(&key->d, &key->e, &key->N, &key->dQ, &key->dP, + &key->qP, &key->pQ, &key->p, &key->q, NULL); +error: + err = mpi_to_ltc_error(err); +done: + mp_clear_multi(&tmp3, &tmp2, &tmp1, &p, &q, NULL); + return err; +} + +#endif diff --git a/rsa_sign_hash.c b/rsa_sign_hash.c new file mode 100644 index 00000000..decac6c5 --- /dev/null +++ b/rsa_sign_hash.c @@ -0,0 +1,59 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef MRSA + +/* PSS pad then sign */ +int rsa_sign_hash(const unsigned char *msghash, unsigned long msghashlen, + unsigned char *sig, unsigned long *siglen, + prng_state *prng, int prng_idx, + int hash_idx, unsigned long saltlen, + rsa_key *key) +{ + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + + _ARGCHK(msghash != NULL); + _ARGCHK(sig != NULL); + _ARGCHK(siglen != NULL); + _ARGCHK(key != NULL); + + /* valid prng and hash ? */ + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + /* get modulus len in bits */ + modulus_bitlen = mp_count_bits(&(key->N)); + + /* outlen must be at least the size of the modulus */ + modulus_bytelen = mp_unsigned_bin_size(&(key->N)); + if (modulus_bytelen > *siglen) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* PSS pad the key */ + x = *siglen; + if ((err = pkcs_1_pss_encode(msghash, msghashlen, saltlen, prng, prng_idx, + hash_idx, modulus_bitlen, sig, &x)) != CRYPT_OK) { + return err; + } + + /* RSA encode it */ + return rsa_exptmod(sig, x, sig, siglen, PK_PRIVATE, prng, prng_idx, key); +} + +#endif /* MRSA */ diff --git a/rsa_v15_decrypt_key.c b/rsa_v15_decrypt_key.c new file mode 100644 index 00000000..fa187baf --- /dev/null +++ b/rsa_v15_decrypt_key.c @@ -0,0 +1,63 @@ + /* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef MRSA + +/* decrypt then PKCS #1 v1.5 depad */ +int rsa_v15_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *outkey, unsigned long keylen, + prng_state *prng, int prng_idx, + int *res, rsa_key *key) +{ + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + unsigned char *tmp; + + _ARGCHK(outkey != NULL); + _ARGCHK(key != NULL); + _ARGCHK(res != NULL); + + /* valid prng ? */ + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + + /* get modulus len in bits */ + modulus_bitlen = mp_count_bits(&(key->N)); + + /* outlen must be at least the size of the modulus */ + modulus_bytelen = mp_unsigned_bin_size(&(key->N)); + if (modulus_bytelen != inlen) { + return CRYPT_INVALID_PACKET; + } + + /* allocate ram */ + tmp = XMALLOC(inlen); + if (tmp == NULL) { + return CRYPT_MEM; + } + + /* rsa decode the packet */ + x = inlen; + if ((err = rsa_exptmod(in, inlen, tmp, &x, PK_PRIVATE, prng, prng_idx, key)) != CRYPT_OK) { + XFREE(tmp); + return err; + } + + /* PKCS #1 v1.5 depad */ + err = pkcs_1_v15_es_decode(tmp, x, modulus_bitlen, outkey, keylen, res); + XFREE(tmp); + return err; +} + +#endif diff --git a/rsa_v15_encrypt_key.c b/rsa_v15_encrypt_key.c new file mode 100644 index 00000000..3724a725 --- /dev/null +++ b/rsa_v15_encrypt_key.c @@ -0,0 +1,54 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef MRSA + +/* PKCS #1 v1.5 pad then encrypt */ +int rsa_v15_encrypt_key(const unsigned char *inkey, unsigned long inlen, + unsigned char *outkey, unsigned long *outlen, + prng_state *prng, int prng_idx, + rsa_key *key) +{ + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + + _ARGCHK(inkey != NULL); + _ARGCHK(outkey != NULL); + _ARGCHK(outlen != NULL); + _ARGCHK(key != NULL); + + /* valid prng? */ + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + + /* get modulus len in bits */ + modulus_bitlen = mp_count_bits(&(key->N)); + + /* outlen must be at least the size of the modulus */ + modulus_bytelen = mp_unsigned_bin_size(&(key->N)); + if (modulus_bytelen > *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* pad it */ + x = *outlen; + if ((err = pkcs_1_v15_es_encode(inkey, inlen, modulus_bitlen, prng, prng_idx, outkey, &x)) != CRYPT_OK) { + return err; + } + + /* encrypt it */ + return rsa_exptmod(outkey, x, outkey, outlen, PK_PUBLIC, prng, prng_idx, key); +} + +#endif diff --git a/rsa_v15_sign_hash.c b/rsa_v15_sign_hash.c new file mode 100644 index 00000000..0a3da2a8 --- /dev/null +++ b/rsa_v15_sign_hash.c @@ -0,0 +1,57 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef MRSA + +/* PKCS #1 v1.5 pad then sign */ +int rsa_v15_sign_hash(const unsigned char *msghash, unsigned long msghashlen, + unsigned char *sig, unsigned long *siglen, + prng_state *prng, int prng_idx, + int hash_idx, rsa_key *key) +{ + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + + _ARGCHK(msghash != NULL); + _ARGCHK(sig != NULL); + _ARGCHK(siglen != NULL); + _ARGCHK(key != NULL); + + /* valid prng and hash ? */ + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + /* get modulus len in bits */ + modulus_bitlen = mp_count_bits(&(key->N)); + + /* outlen must be at least the size of the modulus */ + modulus_bytelen = mp_unsigned_bin_size(&(key->N)); + if (modulus_bytelen > *siglen) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* PKCS #1 v1.5 pad the key */ + x = *siglen; + if ((err = pkcs_1_v15_sa_encode(msghash, msghashlen, hash_idx, modulus_bitlen, sig, &x)) != CRYPT_OK) { + return err; + } + + /* RSA encode it */ + return rsa_exptmod(sig, x, sig, siglen, PK_PRIVATE, prng, prng_idx, key); +} + +#endif diff --git a/rsa_v15_verify_hash.c b/rsa_v15_verify_hash.c new file mode 100644 index 00000000..80ca72a9 --- /dev/null +++ b/rsa_v15_verify_hash.c @@ -0,0 +1,69 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef MRSA + +/* design then PKCS v1.5 depad */ +int rsa_v15_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *msghash, unsigned long msghashlen, + prng_state *prng, int prng_idx, + int hash_idx, int *stat, + rsa_key *key) +{ + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + unsigned char *tmpbuf; + + _ARGCHK(msghash != NULL); + _ARGCHK(sig != NULL); + _ARGCHK(stat != NULL); + _ARGCHK(key != NULL); + + /* valid hash ? */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + + /* get modulus len in bits */ + modulus_bitlen = mp_count_bits(&(key->N)); + + /* outlen must be at least the size of the modulus */ + modulus_bytelen = mp_unsigned_bin_size(&(key->N)); + if (modulus_bytelen != siglen) { + return CRYPT_INVALID_PACKET; + } + + /* allocate temp buffer for decoded sig */ + tmpbuf = XMALLOC(siglen); + if (tmpbuf == NULL) { + return CRYPT_MEM; + } + + /* RSA decode it */ + x = siglen; + if ((err = rsa_exptmod(sig, siglen, tmpbuf, &x, PK_PUBLIC, prng, prng_idx, key)) != CRYPT_OK) { + XFREE(tmpbuf); + return err; + } + + /* PSS decode it */ + err = pkcs_1_v15_sa_decode(msghash, msghashlen, tmpbuf, x, hash_idx, modulus_bitlen, stat); + XFREE(tmpbuf); + return err; +} + +#endif diff --git a/rsa_verify_hash.c b/rsa_verify_hash.c new file mode 100644 index 00000000..5e3664be --- /dev/null +++ b/rsa_verify_hash.c @@ -0,0 +1,69 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef MRSA + +/* design then PSS depad */ +int rsa_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *msghash, unsigned long msghashlen, + prng_state *prng, int prng_idx, + int hash_idx, unsigned long saltlen, + int *stat, rsa_key *key) +{ + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + unsigned char *tmpbuf; + + _ARGCHK(msghash != NULL); + _ARGCHK(sig != NULL); + _ARGCHK(stat != NULL); + _ARGCHK(key != NULL); + + /* valid hash ? */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + + /* get modulus len in bits */ + modulus_bitlen = mp_count_bits(&(key->N)); + + /* outlen must be at least the size of the modulus */ + modulus_bytelen = mp_unsigned_bin_size(&(key->N)); + if (modulus_bytelen != siglen) { + return CRYPT_INVALID_PACKET; + } + + /* allocate temp buffer for decoded sig */ + tmpbuf = XMALLOC(siglen); + if (tmpbuf == NULL) { + return CRYPT_MEM; + } + + /* RSA decode it */ + x = siglen; + if ((err = rsa_exptmod(sig, siglen, tmpbuf, &x, PK_PUBLIC, prng, prng_idx, key)) != CRYPT_OK) { + XFREE(tmpbuf); + return err; + } + + /* PSS decode it */ + err = pkcs_1_pss_decode(msghash, msghashlen, tmpbuf, x, saltlen, hash_idx, modulus_bitlen, stat); + XFREE(tmpbuf); + return err; +} + +#endif /* MRSA */ diff --git a/s_ocb_done.c b/s_ocb_done.c new file mode 100644 index 00000000..d4a7748b --- /dev/null +++ b/s_ocb_done.c @@ -0,0 +1,124 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* OCB Implementation by Tom St Denis */ +#include "mycrypt.h" + +#ifdef OCB_MODE + +/* Since the last block is encrypted in CTR mode the same code can + * be used to finish a decrypt or encrypt stream. The only difference + * is we XOR the final ciphertext into the checksum so we have to xor it + * before we CTR [decrypt] or after [encrypt] + * + * the names pt/ptlen/ct really just mean in/inlen/out but this is the way I wrote it... + */ +int __ocb_done(ocb_state *ocb, const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, unsigned char *tag, unsigned long *taglen, int mode) + +{ + unsigned char *Z, *Y, *X; + int err, x; + + _ARGCHK(ocb != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(tag != NULL); + _ARGCHK(taglen != NULL); + if ((err = cipher_is_valid(ocb->cipher)) != CRYPT_OK) { + return err; + } + if (ocb->block_len != cipher_descriptor[ocb->cipher].block_length || + (int)ptlen > ocb->block_len || (int)ptlen < 0) { + return CRYPT_INVALID_ARG; + } + + /* allocate ram */ + Z = XMALLOC(MAXBLOCKSIZE); + Y = XMALLOC(MAXBLOCKSIZE); + X = XMALLOC(MAXBLOCKSIZE); + if (X == NULL || Y == NULL || Z == NULL) { + if (X != NULL) { + XFREE(X); + } + if (Y != NULL) { + XFREE(Y); + } + if (Z != NULL) { + XFREE(Z); + } + return CRYPT_MEM; + } + + /* compute X[m] = len(pt[m]) XOR Lr XOR Z[m] */ + ocb_shift_xor(ocb, X); + XMEMCPY(Z, X, ocb->block_len); + + X[ocb->block_len-1] ^= (ptlen*8)&255; + X[ocb->block_len-2] ^= ((ptlen*8)>>8)&255; + for (x = 0; x < ocb->block_len; x++) { + X[x] ^= ocb->Lr[x]; + } + + /* Y[m] = E(X[m])) */ + cipher_descriptor[ocb->cipher].ecb_encrypt(X, Y, &ocb->key); + + if (mode == 1) { + /* decrypt mode, so let's xor it first */ + /* xor C[m] into checksum */ + for (x = 0; x < (int)ptlen; x++) { + ocb->checksum[x] ^= ct[x]; + } + } + + /* C[m] = P[m] xor Y[m] */ + for (x = 0; x < (int)ptlen; x++) { + ct[x] = pt[x] ^ Y[x]; + } + + if (mode == 0) { + /* encrypt mode */ + /* xor C[m] into checksum */ + for (x = 0; x < (int)ptlen; x++) { + ocb->checksum[x] ^= ct[x]; + } + } + + /* xor Y[m] and Z[m] into checksum */ + for (x = 0; x < ocb->block_len; x++) { + ocb->checksum[x] ^= Y[x] ^ Z[x]; + } + + /* encrypt checksum, er... tag!! */ + cipher_descriptor[ocb->cipher].ecb_encrypt(ocb->checksum, X, &ocb->key); + + /* now store it */ + for (x = 0; x < ocb->block_len && x < (int)*taglen; x++) { + tag[x] = X[x]; + } + *taglen = x; + +#ifdef CLEAN_STACK + zeromem(X, MAXBLOCKSIZE); + zeromem(Y, MAXBLOCKSIZE); + zeromem(Z, MAXBLOCKSIZE); + zeromem(ocb, sizeof(*ocb)); +#endif + + XFREE(X); + XFREE(Y); + XFREE(Z); + + return CRYPT_OK; +} + +#endif + diff --git a/src/ciphers/safer/safer.c b/safer.c similarity index 51% rename from src/ciphers/safer/safer.c rename to safer.c index 2993967f..580872a3 100644 --- a/src/ciphers/safer/safer.c +++ b/safer.c @@ -1,13 +1,21 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ /******************************************************************************* * * FILE: safer.c * -* LTC_DESCRIPTION: block-cipher algorithm LTC_SAFER (Secure And Fast Encryption -* Routine) in its four versions: LTC_SAFER K-64, LTC_SAFER K-128, -* LTC_SAFER SK-64 and LTC_SAFER SK-128. +* DESCRIPTION: block-cipher algorithm SAFER (Secure And Fast Encryption +* Routine) in its four versions: SAFER K-64, SAFER K-128, +* SAFER SK-64 and SAFER SK-128. * * AUTHOR: Richard De Moliner (demoliner@isi.ee.ethz.ch) * Signal and Information Processing Laboratory @@ -20,65 +28,53 @@ * *******************************************************************************/ -#include "tomcrypt_private.h" +#include -#ifdef LTC_SAFER +#ifdef SAFER -#ifndef LTC_SAFER_TAB_C -#define LTC_SAFER_TAB_C -#include "safer_tab.c" -#endif - -const struct ltc_cipher_descriptor safer_k64_desc = { - "safer-k64", - 8, 8, 8, 8, LTC_SAFER_K64_DEFAULT_NOF_ROUNDS, +const struct _cipher_descriptor + safer_k64_desc = { + "safer-k64", + 8, 8, 8, 8, SAFER_K64_DEFAULT_NOF_ROUNDS, &safer_k64_setup, &safer_ecb_encrypt, &safer_ecb_decrypt, &safer_k64_test, - &safer_done, - &safer_64_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + &safer_64_keysize }, safer_sk64_desc = { "safer-sk64", - 9, 8, 8, 8, LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS, + 9, 8, 8, 8, SAFER_SK64_DEFAULT_NOF_ROUNDS, &safer_sk64_setup, &safer_ecb_encrypt, &safer_ecb_decrypt, &safer_sk64_test, - &safer_done, - &safer_64_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + &safer_64_keysize }, safer_k128_desc = { "safer-k128", - 10, 16, 16, 8, LTC_SAFER_K128_DEFAULT_NOF_ROUNDS, + 10, 16, 16, 8, SAFER_K128_DEFAULT_NOF_ROUNDS, &safer_k128_setup, &safer_ecb_encrypt, &safer_ecb_decrypt, &safer_sk128_test, - &safer_done, - &safer_128_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + &safer_128_keysize }, safer_sk128_desc = { "safer-sk128", - 11, 16, 16, 8, LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS, + 11, 16, 16, 8, SAFER_SK128_DEFAULT_NOF_ROUNDS, &safer_sk128_setup, &safer_ecb_encrypt, &safer_ecb_decrypt, &safer_sk128_test, - &safer_done, - &safer_128_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + &safer_128_keysize }; /******************* Constants ************************************************/ -/* #define TAB_LEN 256 */ +// #define TAB_LEN 256 /******************* Assertions ***********************************************/ @@ -91,94 +87,94 @@ const struct ltc_cipher_descriptor safer_k64_desc = { #define IPHT(x, y) { x -= y; y -= x; } /******************* Types ****************************************************/ +extern const unsigned char safer_ebox[], safer_lbox[]; -#ifdef LTC_CLEAN_STACK -static void s_safer_expand_userkey(const unsigned char *userkey_1, +#ifdef CLEAN_STACK +static void _Safer_Expand_Userkey(const unsigned char *userkey_1, const unsigned char *userkey_2, unsigned int nof_rounds, int strengthened, safer_key_t key) #else -static void safer_expand_userkey(const unsigned char *userkey_1, +static void Safer_Expand_Userkey(const unsigned char *userkey_1, const unsigned char *userkey_2, unsigned int nof_rounds, int strengthened, safer_key_t key) #endif { unsigned int i, j, k; - unsigned char ka[LTC_SAFER_BLOCK_LEN + 1]; - unsigned char kb[LTC_SAFER_BLOCK_LEN + 1]; + unsigned char ka[SAFER_BLOCK_LEN + 1]; + unsigned char kb[SAFER_BLOCK_LEN + 1]; - if (LTC_SAFER_MAX_NOF_ROUNDS < nof_rounds) { - nof_rounds = LTC_SAFER_MAX_NOF_ROUNDS; - } + if (SAFER_MAX_NOF_ROUNDS < nof_rounds) + nof_rounds = SAFER_MAX_NOF_ROUNDS; *key++ = (unsigned char)nof_rounds; - ka[LTC_SAFER_BLOCK_LEN] = (unsigned char)0; - kb[LTC_SAFER_BLOCK_LEN] = (unsigned char)0; + ka[SAFER_BLOCK_LEN] = (unsigned char)0; + kb[SAFER_BLOCK_LEN] = (unsigned char)0; k = 0; - for (j = 0; j < LTC_SAFER_BLOCK_LEN; j++) { + for (j = 0; j < SAFER_BLOCK_LEN; j++) { ka[j] = ROL8(userkey_1[j], 5); - ka[LTC_SAFER_BLOCK_LEN] ^= ka[j]; + ka[SAFER_BLOCK_LEN] ^= ka[j]; kb[j] = *key++ = userkey_2[j]; - kb[LTC_SAFER_BLOCK_LEN] ^= kb[j]; + kb[SAFER_BLOCK_LEN] ^= kb[j]; } for (i = 1; i <= nof_rounds; i++) { - for (j = 0; j < LTC_SAFER_BLOCK_LEN + 1; j++) { + for (j = 0; j < SAFER_BLOCK_LEN + 1; j++) { ka[j] = ROL8(ka[j], 6); kb[j] = ROL8(kb[j], 6); } if (strengthened) { k = 2 * i - 1; - while (k >= (LTC_SAFER_BLOCK_LEN + 1)) { k -= LTC_SAFER_BLOCK_LEN + 1; } + while (k >= (SAFER_BLOCK_LEN + 1)) { k -= SAFER_BLOCK_LEN + 1; } } - for (j = 0; j < LTC_SAFER_BLOCK_LEN; j++) { + for (j = 0; j < SAFER_BLOCK_LEN; j++) { if (strengthened) { *key++ = (ka[k] + safer_ebox[(int)safer_ebox[(int)((18 * i + j + 1)&0xFF)]]) & 0xFF; - if (++k == (LTC_SAFER_BLOCK_LEN + 1)) { k = 0; } + if (++k == (SAFER_BLOCK_LEN + 1)) { k = 0; } } else { *key++ = (ka[j] + safer_ebox[(int)safer_ebox[(int)((18 * i + j + 1)&0xFF)]]) & 0xFF; } } if (strengthened) { k = 2 * i; - while (k >= (LTC_SAFER_BLOCK_LEN + 1)) { k -= LTC_SAFER_BLOCK_LEN + 1; } + while (k >= (SAFER_BLOCK_LEN + 1)) { k -= SAFER_BLOCK_LEN + 1; } } - for (j = 0; j < LTC_SAFER_BLOCK_LEN; j++) { + for (j = 0; j < SAFER_BLOCK_LEN; j++) { if (strengthened) { *key++ = (kb[k] + safer_ebox[(int)safer_ebox[(int)((18 * i + j + 10)&0xFF)]]) & 0xFF; - if (++k == (LTC_SAFER_BLOCK_LEN + 1)) { k = 0; } + if (++k == (SAFER_BLOCK_LEN + 1)) { k = 0; } } else { *key++ = (kb[j] + safer_ebox[(int)safer_ebox[(int)((18 * i + j + 10)&0xFF)]]) & 0xFF; } } } - -#ifdef LTC_CLEAN_STACK + +#ifdef CLEAN_STACK zeromem(ka, sizeof(ka)); zeromem(kb, sizeof(kb)); #endif } -#ifdef LTC_CLEAN_STACK -static void safer_expand_userkey(const unsigned char *userkey_1, +#ifdef CLEAN_STACK +static void Safer_Expand_Userkey(const unsigned char *userkey_1, const unsigned char *userkey_2, unsigned int nof_rounds, int strengthened, safer_key_t key) { - s_safer_expand_userkey(userkey_1, userkey_2, nof_rounds, strengthened, key); - burn_stack(sizeof(unsigned char) * (2 * (LTC_SAFER_BLOCK_LEN + 1)) + sizeof(unsigned int)*2); + _Safer_Expand_Userkey(userkey_1, userkey_2, nof_rounds, strengthened, key); + burn_stack(sizeof(unsigned char) * (2 * (SAFER_BLOCK_LEN + 1)) + sizeof(unsigned int)*2); } #endif -int safer_k64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) +int safer_k64_setup(const unsigned char *key, int keylen, int numrounds, symmetric_key *skey) { - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); - if (num_rounds != 0 && (num_rounds < 6 || num_rounds > LTC_SAFER_MAX_NOF_ROUNDS)) { + if (numrounds != 0 && (numrounds < 6 || numrounds > SAFER_MAX_NOF_ROUNDS)) { return CRYPT_INVALID_ROUNDS; } @@ -186,16 +182,16 @@ int safer_k64_setup(const unsigned char *key, int keylen, int num_rounds, symmet return CRYPT_INVALID_KEYSIZE; } - safer_expand_userkey(key, key, (unsigned int)(num_rounds != 0 ?num_rounds:LTC_SAFER_K64_DEFAULT_NOF_ROUNDS), 0, skey->safer.key); + Safer_Expand_Userkey(key, key, (unsigned int)(numrounds != 0 ?numrounds:SAFER_K64_DEFAULT_NOF_ROUNDS), 0, skey->safer.key); return CRYPT_OK; } - -int safer_sk64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) + +int safer_sk64_setup(const unsigned char *key, int keylen, int numrounds, symmetric_key *skey) { - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); - if (num_rounds != 0 && (num_rounds < 6 || num_rounds > LTC_SAFER_MAX_NOF_ROUNDS)) { + if (numrounds != 0 && (numrounds < 6 || numrounds > SAFER_MAX_NOF_ROUNDS)) { return CRYPT_INVALID_ROUNDS; } @@ -203,16 +199,16 @@ int safer_sk64_setup(const unsigned char *key, int keylen, int num_rounds, symme return CRYPT_INVALID_KEYSIZE; } - safer_expand_userkey(key, key, (unsigned int)(num_rounds != 0 ?num_rounds:LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS), 1, skey->safer.key); + Safer_Expand_Userkey(key, key, (unsigned int)(numrounds != 0 ?numrounds:SAFER_SK64_DEFAULT_NOF_ROUNDS), 1, skey->safer.key); return CRYPT_OK; } -int safer_k128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) +int safer_k128_setup(const unsigned char *key, int keylen, int numrounds, symmetric_key *skey) { - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); - if (num_rounds != 0 && (num_rounds < 6 || num_rounds > LTC_SAFER_MAX_NOF_ROUNDS)) { + if (numrounds != 0 && (numrounds < 6 || numrounds > SAFER_MAX_NOF_ROUNDS)) { return CRYPT_INVALID_ROUNDS; } @@ -220,16 +216,16 @@ int safer_k128_setup(const unsigned char *key, int keylen, int num_rounds, symme return CRYPT_INVALID_KEYSIZE; } - safer_expand_userkey(key, key+8, (unsigned int)(num_rounds != 0 ?num_rounds:LTC_SAFER_K128_DEFAULT_NOF_ROUNDS), 0, skey->safer.key); + Safer_Expand_Userkey(key, key+8, (unsigned int)(numrounds != 0 ?numrounds:SAFER_K128_DEFAULT_NOF_ROUNDS), 0, skey->safer.key); return CRYPT_OK; } -int safer_sk128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) +int safer_sk128_setup(const unsigned char *key, int keylen, int numrounds, symmetric_key *skey) { - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); - if (num_rounds != 0 && (num_rounds < 6 || num_rounds > LTC_SAFER_MAX_NOF_ROUNDS)) { + if (numrounds != 0 && (numrounds < 6 || numrounds > SAFER_MAX_NOF_ROUNDS)) { return CRYPT_INVALID_ROUNDS; } @@ -237,31 +233,31 @@ int safer_sk128_setup(const unsigned char *key, int keylen, int num_rounds, symm return CRYPT_INVALID_KEYSIZE; } - safer_expand_userkey(key, key+8, (unsigned int)(num_rounds != 0?num_rounds:LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS), 1, skey->safer.key); + Safer_Expand_Userkey(key, key+8, (unsigned int)(numrounds != 0?numrounds:SAFER_SK128_DEFAULT_NOF_ROUNDS), 1, skey->safer.key); return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -static int s_safer_ecb_encrypt(const unsigned char *pt, - unsigned char *ct, - const symmetric_key *skey) +#ifdef CLEAN_STACK +static void _safer_ecb_encrypt(const unsigned char *block_in, + unsigned char *block_out, + symmetric_key *skey) #else -int safer_ecb_encrypt(const unsigned char *pt, - unsigned char *ct, - const symmetric_key *skey) +void safer_ecb_encrypt(const unsigned char *block_in, + unsigned char *block_out, + symmetric_key *skey) #endif { unsigned char a, b, c, d, e, f, g, h, t; unsigned int round; - const unsigned char *key; + unsigned char *key; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(block_in != NULL); + _ARGCHK(block_out != NULL); + _ARGCHK(skey != NULL); key = skey->safer.key; - a = pt[0]; b = pt[1]; c = pt[2]; d = pt[3]; - e = pt[4]; f = pt[5]; g = pt[6]; h = pt[7]; - if (LTC_SAFER_MAX_NOF_ROUNDS < (round = *key)) round = LTC_SAFER_MAX_NOF_ROUNDS; + a = block_in[0]; b = block_in[1]; c = block_in[2]; d = block_in[3]; + e = block_in[4]; f = block_in[5]; g = block_in[6]; h = block_in[7]; + if (SAFER_MAX_NOF_ROUNDS < (round = *key)) round = SAFER_MAX_NOF_ROUNDS; while(round-- > 0) { a ^= *++key; b += *++key; c += *++key; d ^= *++key; @@ -277,46 +273,44 @@ int safer_ecb_encrypt(const unsigned char *pt, } a ^= *++key; b += *++key; c += *++key; d ^= *++key; e ^= *++key; f += *++key; g += *++key; h ^= *++key; - ct[0] = a & 0xFF; ct[1] = b & 0xFF; - ct[2] = c & 0xFF; ct[3] = d & 0xFF; - ct[4] = e & 0xFF; ct[5] = f & 0xFF; - ct[6] = g & 0xFF; ct[7] = h & 0xFF; - return CRYPT_OK; + block_out[0] = a & 0xFF; block_out[1] = b & 0xFF; + block_out[2] = c & 0xFF; block_out[3] = d & 0xFF; + block_out[4] = e & 0xFF; block_out[5] = f & 0xFF; + block_out[6] = g & 0xFF; block_out[7] = h & 0xFF; } -#ifdef LTC_CLEAN_STACK -int safer_ecb_encrypt(const unsigned char *pt, - unsigned char *ct, - const symmetric_key *skey) +#ifdef CLEAN_STACK +void safer_ecb_encrypt(const unsigned char *block_in, + unsigned char *block_out, + symmetric_key *skey) { - int err = s_safer_ecb_encrypt(pt, ct, skey); + _safer_ecb_encrypt(block_in, block_out, skey); burn_stack(sizeof(unsigned char) * 9 + sizeof(unsigned int) + sizeof(unsigned char *)); - return err; } #endif -#ifdef LTC_CLEAN_STACK -static int s_safer_ecb_decrypt(const unsigned char *ct, - unsigned char *pt, - const symmetric_key *skey) +#ifdef CLEAN_STACK +static void _safer_ecb_decrypt(const unsigned char *block_in, + unsigned char *block_out, + symmetric_key *skey) #else -int safer_ecb_decrypt(const unsigned char *ct, - unsigned char *pt, - const symmetric_key *skey) +void safer_ecb_decrypt(const unsigned char *block_in, + unsigned char *block_out, + symmetric_key *skey) #endif { unsigned char a, b, c, d, e, f, g, h, t; unsigned int round; - const unsigned char *key; + unsigned char *key; - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(block_in != NULL); + _ARGCHK(block_out != NULL); + _ARGCHK(skey != NULL); key = skey->safer.key; - a = ct[0]; b = ct[1]; c = ct[2]; d = ct[3]; - e = ct[4]; f = ct[5]; g = ct[6]; h = ct[7]; - if (LTC_SAFER_MAX_NOF_ROUNDS < (round = *key)) round = LTC_SAFER_MAX_NOF_ROUNDS; - key += LTC_SAFER_BLOCK_LEN * (1 + 2 * round); + a = block_in[0]; b = block_in[1]; c = block_in[2]; d = block_in[3]; + e = block_in[4]; f = block_in[5]; g = block_in[6]; h = block_in[7]; + if (SAFER_MAX_NOF_ROUNDS < (round = *key)) round = SAFER_MAX_NOF_ROUNDS; + key += SAFER_BLOCK_LEN * (1 + 2 * round); h ^= *key; g -= *--key; f -= *--key; e ^= *--key; d ^= *--key; c -= *--key; b -= *--key; a ^= *--key; while (round--) @@ -332,49 +326,49 @@ int safer_ecb_decrypt(const unsigned char *ct, d = LOG(d) ^ *--key; c = EXP(c) - *--key; b = EXP(b) - *--key; a = LOG(a) ^ *--key; } - pt[0] = a & 0xFF; pt[1] = b & 0xFF; - pt[2] = c & 0xFF; pt[3] = d & 0xFF; - pt[4] = e & 0xFF; pt[5] = f & 0xFF; - pt[6] = g & 0xFF; pt[7] = h & 0xFF; - return CRYPT_OK; + block_out[0] = a & 0xFF; block_out[1] = b & 0xFF; + block_out[2] = c & 0xFF; block_out[3] = d & 0xFF; + block_out[4] = e & 0xFF; block_out[5] = f & 0xFF; + block_out[6] = g & 0xFF; block_out[7] = h & 0xFF; } -#ifdef LTC_CLEAN_STACK -int safer_ecb_decrypt(const unsigned char *ct, - unsigned char *pt, - const symmetric_key *skey) +#ifdef CLEAN_STACK +void safer_ecb_decrypt(const unsigned char *block_in, + unsigned char *block_out, + symmetric_key *skey) { - int err = s_safer_ecb_decrypt(ct, pt, skey); + _safer_ecb_decrypt(block_in, block_out, skey); burn_stack(sizeof(unsigned char) * 9 + sizeof(unsigned int) + sizeof(unsigned char *)); - return err; } #endif int safer_64_keysize(int *keysize) { - LTC_ARGCHK(keysize != NULL); + _ARGCHK(keysize != NULL); if (*keysize < 8) { return CRYPT_INVALID_KEYSIZE; + } else { + *keysize = 8; + return CRYPT_OK; } - *keysize = 8; - return CRYPT_OK; } int safer_128_keysize(int *keysize) { - LTC_ARGCHK(keysize != NULL); + _ARGCHK(keysize != NULL); if (*keysize < 16) { return CRYPT_INVALID_KEYSIZE; + } else { + *keysize = 16; + return CRYPT_OK; } - *keysize = 16; - return CRYPT_OK; } int safer_k64_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else static const unsigned char k64_pt[] = { 1, 2, 3, 4, 5, 6, 7, 8 }, k64_key[] = { 8, 7, 6, 5, 4, 3, 2, 1 }, k64_ct[] = { 200, 242, 156, 221, 135, 120, 62, 217 }; @@ -390,8 +384,7 @@ int safer_k64_test(void) safer_ecb_encrypt(k64_pt, buf[0], &skey); safer_ecb_decrypt(buf[0], buf[1], &skey); - if (ltc_compare_testvector(buf[0], 8, k64_ct, 8, "Safer K64 Encrypt", 0) != 0 || - ltc_compare_testvector(buf[1], 8, k64_pt, 8, "Safer K64 Decrypt", 0) != 0) { + if (memcmp(buf[0], k64_ct, 8) != 0 || memcmp(buf[1], k64_pt, 8) != 0) { return CRYPT_FAIL_TESTVECTOR; } @@ -404,7 +397,7 @@ int safer_sk64_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else static const unsigned char sk64_pt[] = { 1, 2, 3, 4, 5, 6, 7, 8 }, sk64_key[] = { 1, 2, 3, 4, 5, 6, 7, 8 }, sk64_ct[] = { 95, 206, 155, 162, 5, 132, 56, 199 }; @@ -421,34 +414,25 @@ int safer_sk64_test(void) safer_ecb_encrypt(sk64_pt, buf[0], &skey); safer_ecb_decrypt(buf[0], buf[1], &skey); - if (ltc_compare_testvector(buf[0], 8, sk64_ct, 8, "Safer SK64 Encrypt", 0) != 0 || - ltc_compare_testvector(buf[1], 8, sk64_pt, 8, "Safer SK64 Decrypt", 0) != 0) { + if (memcmp(buf[0], sk64_ct, 8) != 0 || memcmp(buf[1], sk64_pt, 8) != 0) { return CRYPT_FAIL_TESTVECTOR; } - /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ - for (y = 0; y < 8; y++) buf[0][y] = 0; - for (y = 0; y < 1000; y++) safer_ecb_encrypt(buf[0], buf[0], &skey); - for (y = 0; y < 1000; y++) safer_ecb_decrypt(buf[0], buf[0], &skey); - for (y = 0; y < 8; y++) if (buf[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; + /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ + for (y = 0; y < 8; y++) buf[0][y] = 0; + for (y = 0; y < 1000; y++) safer_ecb_encrypt(buf[0], buf[0], &skey); + for (y = 0; y < 1000; y++) safer_ecb_decrypt(buf[0], buf[0], &skey); + for (y = 0; y < 8; y++) if (buf[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; return CRYPT_OK; #endif } -/** Terminate the context - @param skey The scheduled key -*/ -void safer_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - int safer_sk128_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else static const unsigned char sk128_pt[] = { 1, 2, 3, 4, 5, 6, 7, 8 }, sk128_key[] = { 1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0 }, @@ -465,25 +449,20 @@ int safer_sk128_test(void) safer_ecb_encrypt(sk128_pt, buf[0], &skey); safer_ecb_decrypt(buf[0], buf[1], &skey); - if (ltc_compare_testvector(buf[0], 8, sk128_ct, 8, "Safer SK128 Encrypt", 0) != 0 || - ltc_compare_testvector(buf[1], 8, sk128_pt, 8, "Safer SK128 Decrypt", 0) != 0) { + if (memcmp(buf[0], sk128_ct, 8) != 0 || memcmp(buf[1], sk128_pt, 8) != 0) { return CRYPT_FAIL_TESTVECTOR; } - /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ - for (y = 0; y < 8; y++) buf[0][y] = 0; - for (y = 0; y < 1000; y++) safer_ecb_encrypt(buf[0], buf[0], &skey); - for (y = 0; y < 1000; y++) safer_ecb_decrypt(buf[0], buf[0], &skey); - for (y = 0; y < 8; y++) if (buf[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; - - return CRYPT_OK; + /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ + for (y = 0; y < 8; y++) buf[0][y] = 0; + for (y = 0; y < 1000; y++) safer_ecb_encrypt(buf[0], buf[0], &skey); + for (y = 0; y < 1000; y++) safer_ecb_decrypt(buf[0], buf[0], &skey); + for (y = 0; y < 8; y++) if (buf[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; + return CRYPT_OK; #endif } -#undef ROL8 -#undef EXP -#undef LOG -#undef PHT -#undef IPHT - #endif + + + diff --git a/src/ciphers/safer/safer_tab.c b/safer_tab.c similarity index 69% rename from src/ciphers/safer/safer_tab.c rename to safer_tab.c index 421d77e0..06859db9 100644 --- a/src/ciphers/safer/safer_tab.c +++ b/safer_tab.c @@ -1,54 +1,59 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ -/** - @file safer_tab.c - Tables for LTC_SAFER block ciphers -*/ +#include "mycrypt.h" -#if defined(LTC_SAFER) && defined(LTC_SAFER_TAB_C) +#if defined(SAFERP) || defined(SAFER) -/* This is the box defined by ebox[x] = 45^x mod 257. +/* This is the box defined by ebox[x] = 45^x mod 257. * Its assumed that the value "256" corresponds to zero. */ -static const unsigned char safer_ebox[256] = { - 1, 45, 226, 147, 190, 69, 21, 174, 120, 3, 135, 164, 184, 56, 207, 63, - 8, 103, 9, 148, 235, 38, 168, 107, 189, 24, 52, 27, 187, 191, 114, 247, - 64, 53, 72, 156, 81, 47, 59, 85, 227, 192, 159, 216, 211, 243, 141, 177, -255, 167, 62, 220, 134, 119, 215, 166, 17, 251, 244, 186, 146, 145, 100, 131, -241, 51, 239, 218, 44, 181, 178, 43, 136, 209, 153, 203, 140, 132, 29, 20, -129, 151, 113, 202, 95, 163, 139, 87, 60, 130, 196, 82, 92, 28, 232, 160, - 4, 180, 133, 74, 246, 19, 84, 182, 223, 12, 26, 142, 222, 224, 57, 252, - 32, 155, 36, 78, 169, 152, 158, 171, 242, 96, 208, 108, 234, 250, 199, 217, - 0, 212, 31, 110, 67, 188, 236, 83, 137, 254, 122, 93, 73, 201, 50, 194, -249, 154, 248, 109, 22, 219, 89, 150, 68, 233, 205, 230, 70, 66, 143, 10, -193, 204, 185, 101, 176, 210, 198, 172, 30, 65, 98, 41, 46, 14, 116, 80, - 2, 90, 195, 37, 123, 138, 42, 91, 240, 6, 13, 71, 111, 112, 157, 126, - 16, 206, 18, 39, 213, 76, 79, 214, 121, 48, 104, 54, 117, 125, 228, 237, -128, 106, 144, 55, 162, 94, 118, 170, 197, 127, 61, 175, 165, 229, 25, 97, -253, 77, 124, 183, 11, 238, 173, 75, 34, 245, 231, 115, 35, 33, 200, 5, +const unsigned char safer_ebox[256] = { + 1, 45, 226, 147, 190, 69, 21, 174, 120, 3, 135, 164, 184, 56, 207, 63, + 8, 103, 9, 148, 235, 38, 168, 107, 189, 24, 52, 27, 187, 191, 114, 247, + 64, 53, 72, 156, 81, 47, 59, 85, 227, 192, 159, 216, 211, 243, 141, 177, +255, 167, 62, 220, 134, 119, 215, 166, 17, 251, 244, 186, 146, 145, 100, 131, +241, 51, 239, 218, 44, 181, 178, 43, 136, 209, 153, 203, 140, 132, 29, 20, +129, 151, 113, 202, 95, 163, 139, 87, 60, 130, 196, 82, 92, 28, 232, 160, + 4, 180, 133, 74, 246, 19, 84, 182, 223, 12, 26, 142, 222, 224, 57, 252, + 32, 155, 36, 78, 169, 152, 158, 171, 242, 96, 208, 108, 234, 250, 199, 217, + 0, 212, 31, 110, 67, 188, 236, 83, 137, 254, 122, 93, 73, 201, 50, 194, +249, 154, 248, 109, 22, 219, 89, 150, 68, 233, 205, 230, 70, 66, 143, 10, +193, 204, 185, 101, 176, 210, 198, 172, 30, 65, 98, 41, 46, 14, 116, 80, + 2, 90, 195, 37, 123, 138, 42, 91, 240, 6, 13, 71, 111, 112, 157, 126, + 16, 206, 18, 39, 213, 76, 79, 214, 121, 48, 104, 54, 117, 125, 228, 237, +128, 106, 144, 55, 162, 94, 118, 170, 197, 127, 61, 175, 165, 229, 25, 97, +253, 77, 124, 183, 11, 238, 173, 75, 34, 245, 231, 115, 35, 33, 200, 5, 225, 102, 221, 179, 88, 105, 99, 86, 15, 161, 49, 149, 23, 7, 58, 40 }; /* This is the inverse of ebox or the base 45 logarithm */ -static const unsigned char safer_lbox[256] = { +const unsigned char safer_lbox[256] = { 128, 0, 176, 9, 96, 239, 185, 253, 16, 18, 159, 228, 105, 186, 173, 248, 192, 56, 194, 101, 79, 6, 148, 252, 25, 222, 106, 27, 93, 78, 168, 130, -112, 237, 232, 236, 114, 179, 21, 195, 255, 171, 182, 71, 68, 1, 172, 37, -201, 250, 142, 65, 26, 33, 203, 211, 13, 110, 254, 38, 88, 218, 50, 15, - 32, 169, 157, 132, 152, 5, 156, 187, 34, 140, 99, 231, 197, 225, 115, 198, -175, 36, 91, 135, 102, 39, 247, 87, 244, 150, 177, 183, 92, 139, 213, 84, -121, 223, 170, 246, 62, 163, 241, 17, 202, 245, 209, 23, 123, 147, 131, 188, +112, 237, 232, 236, 114, 179, 21, 195, 255, 171, 182, 71, 68, 1, 172, 37, +201, 250, 142, 65, 26, 33, 203, 211, 13, 110, 254, 38, 88, 218, 50, 15, + 32, 169, 157, 132, 152, 5, 156, 187, 34, 140, 99, 231, 197, 225, 115, 198, +175, 36, 91, 135, 102, 39, 247, 87, 244, 150, 177, 183, 92, 139, 213, 84, +121, 223, 170, 246, 62, 163, 241, 17, 202, 245, 209, 23, 123, 147, 131, 188, 189, 82, 30, 235, 174, 204, 214, 53, 8, 200, 138, 180, 226, 205, 191, 217, -208, 80, 89, 63, 77, 98, 52, 10, 72, 136, 181, 86, 76, 46, 107, 158, -210, 61, 60, 3, 19, 251, 151, 81, 117, 74, 145, 113, 35, 190, 118, 42, +208, 80, 89, 63, 77, 98, 52, 10, 72, 136, 181, 86, 76, 46, 107, 158, +210, 61, 60, 3, 19, 251, 151, 81, 117, 74, 145, 113, 35, 190, 118, 42, 95, 249, 212, 85, 11, 220, 55, 49, 22, 116, 215, 119, 167, 230, 7, 219, -164, 47, 70, 243, 97, 69, 103, 227, 12, 162, 59, 28, 133, 24, 4, 29, - 41, 160, 143, 178, 90, 216, 166, 126, 238, 141, 83, 75, 161, 154, 193, 14, -122, 73, 165, 44, 129, 196, 199, 54, 43, 127, 67, 149, 51, 242, 108, 104, -109, 240, 2, 40, 206, 221, 155, 234, 94, 153, 124, 20, 134, 207, 229, 66, +164, 47, 70, 243, 97, 69, 103, 227, 12, 162, 59, 28, 133, 24, 4, 29, + 41, 160, 143, 178, 90, 216, 166, 126, 238, 141, 83, 75, 161, 154, 193, 14, +122, 73, 165, 44, 129, 196, 199, 54, 43, 127, 67, 149, 51, 242, 108, 104, +109, 240, 2, 40, 206, 221, 155, 234, 94, 153, 124, 20, 134, 207, 229, 66, 184, 64, 120, 45, 58, 233, 100, 31, 146, 144, 125, 57, 111, 224, 137, 48 }; -#endif /* LTC_SAFER_TAB_C */ +#endif diff --git a/src/ciphers/safer/saferp.c b/saferp.c similarity index 74% rename from src/ciphers/safer/saferp.c rename to saferp.c index 73d08022..8415debe 100644 --- a/src/ciphers/safer/saferp.c +++ b/saferp.c @@ -1,20 +1,20 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ -/** - @file saferp.c - LTC_SAFER+ Implementation by Tom St Denis -*/ -#include "tomcrypt_private.h" +/* SAFER+ Implementation by Tom St Denis */ +#include "mycrypt.h" -#ifdef LTC_SAFERP +#ifdef SAFERP -#ifndef LTC_SAFER_TAB_C -#define LTC_SAFER_TAB_C -#include "safer_tab.c" -#endif - -const struct ltc_cipher_descriptor saferp_desc = +const struct _cipher_descriptor saferp_desc = { "safer+", 4, @@ -23,23 +23,23 @@ const struct ltc_cipher_descriptor saferp_desc = &saferp_ecb_encrypt, &saferp_ecb_decrypt, &saferp_test, - &saferp_done, - &saferp_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + &saferp_keysize }; -/* ROUND(b,i) +/* ROUND(b,i) * - * This is one forward key application. Note the basic form is - * key addition, substitution, key addition. The safer_ebox and safer_lbox - * are the exponentiation box and logarithm boxes respectively. - * The value of 'i' is the current round number which allows this - * function to be unrolled massively. Most of LTC_SAFER+'s speed - * comes from not having to compute indirect accesses into the + * This is one forward key application. Note the basic form is + * key addition, substitution, key addition. The safer_ebox and safer_lbox + * are the exponentiation box and logarithm boxes respectively. + * The value of 'i' is the current round number which allows this + * function to be unrolled massively. Most of SAFER+'s speed + * comes from not having to compute indirect accesses into the * array of 16 bytes b[0..15] which is the block of data */ -#define ROUND(b, i) do { \ +extern const unsigned char safer_ebox[], safer_lbox[]; + +#define ROUND(b, i) \ b[0] = (safer_ebox[(b[0] ^ skey->saferp.K[i][0]) & 255] + skey->saferp.K[i+1][0]) & 255; \ b[1] = safer_lbox[(b[1] + skey->saferp.K[i][1]) & 255] ^ skey->saferp.K[i+1][1]; \ b[2] = safer_lbox[(b[2] + skey->saferp.K[i][2]) & 255] ^ skey->saferp.K[i+1][2]; \ @@ -55,11 +55,10 @@ const struct ltc_cipher_descriptor saferp_desc = b[12] = (safer_ebox[(b[12] ^ skey->saferp.K[i][12]) & 255] + skey->saferp.K[i+1][12]) & 255; \ b[13] = safer_lbox[(b[13] + skey->saferp.K[i][13]) & 255] ^ skey->saferp.K[i+1][13]; \ b[14] = safer_lbox[(b[14] + skey->saferp.K[i][14]) & 255] ^ skey->saferp.K[i+1][14]; \ - b[15] = (safer_ebox[(b[15] ^ skey->saferp.K[i][15]) & 255] + skey->saferp.K[i+1][15]) & 255; \ -} while (0) + b[15] = (safer_ebox[(b[15] ^ skey->saferp.K[i][15]) & 255] + skey->saferp.K[i+1][15]) & 255; /* This is one inverse key application */ -#define iROUND(b, i) do { \ +#define iROUND(b, i) \ b[0] = safer_lbox[(b[0] - skey->saferp.K[i+1][0]) & 255] ^ skey->saferp.K[i][0]; \ b[1] = (safer_ebox[(b[1] ^ skey->saferp.K[i+1][1]) & 255] - skey->saferp.K[i][1]) & 255; \ b[2] = (safer_ebox[(b[2] ^ skey->saferp.K[i+1][2]) & 255] - skey->saferp.K[i][2]) & 255; \ @@ -75,11 +74,10 @@ const struct ltc_cipher_descriptor saferp_desc = b[12] = safer_lbox[(b[12] - skey->saferp.K[i+1][12]) & 255] ^ skey->saferp.K[i][12]; \ b[13] = (safer_ebox[(b[13] ^ skey->saferp.K[i+1][13]) & 255] - skey->saferp.K[i][13]) & 255; \ b[14] = (safer_ebox[(b[14] ^ skey->saferp.K[i+1][14]) & 255] - skey->saferp.K[i][14]) & 255; \ - b[15] = safer_lbox[(b[15] - skey->saferp.K[i+1][15]) & 255] ^ skey->saferp.K[i][15]; \ -} while (0) + b[15] = safer_lbox[(b[15] - skey->saferp.K[i+1][15]) & 255] ^ skey->saferp.K[i][15]; /* This is a forward single layer PHT transform. */ -#define PHT(b) do { \ +#define PHT(b) \ b[0] = (b[0] + (b[1] = (b[0] + b[1]) & 255)) & 255; \ b[2] = (b[2] + (b[3] = (b[3] + b[2]) & 255)) & 255; \ b[4] = (b[4] + (b[5] = (b[5] + b[4]) & 255)) & 255; \ @@ -87,11 +85,10 @@ const struct ltc_cipher_descriptor saferp_desc = b[8] = (b[8] + (b[9] = (b[9] + b[8]) & 255)) & 255; \ b[10] = (b[10] + (b[11] = (b[11] + b[10]) & 255)) & 255; \ b[12] = (b[12] + (b[13] = (b[13] + b[12]) & 255)) & 255; \ - b[14] = (b[14] + (b[15] = (b[15] + b[14]) & 255)) & 255; \ -} while (0) + b[14] = (b[14] + (b[15] = (b[15] + b[14]) & 255)) & 255; /* This is an inverse single layer PHT transform */ -#define iPHT(b) do { \ +#define iPHT(b) \ b[15] = (b[15] - (b[14] = (b[14] - b[15]) & 255)) & 255; \ b[13] = (b[13] - (b[12] = (b[12] - b[13]) & 255)) & 255; \ b[11] = (b[11] - (b[10] = (b[10] - b[11]) & 255)) & 255; \ @@ -100,76 +97,71 @@ const struct ltc_cipher_descriptor saferp_desc = b[5] = (b[5] - (b[4] = (b[4] - b[5]) & 255)) & 255; \ b[3] = (b[3] - (b[2] = (b[2] - b[3]) & 255)) & 255; \ b[1] = (b[1] - (b[0] = (b[0] - b[1]) & 255)) & 255; \ - } while (0) /* This is the "Armenian" Shuffle. It takes the input from b and stores it in b2 */ -#define SHUF(b, b2) do { \ +#define SHUF(b, b2) \ b2[0] = b[8]; b2[1] = b[11]; b2[2] = b[12]; b2[3] = b[15]; \ b2[4] = b[2]; b2[5] = b[1]; b2[6] = b[6]; b2[7] = b[5]; \ b2[8] = b[10]; b2[9] = b[9]; b2[10] = b[14]; b2[11] = b[13]; \ - b2[12] = b[0]; b2[13] = b[7]; b2[14] = b[4]; b2[15] = b[3]; \ -} while (0) + b2[12] = b[0]; b2[13] = b[7]; b2[14] = b[4]; b2[15] = b[3]; /* This is the inverse shuffle. It takes from b and gives to b2 */ -#define iSHUF(b, b2) do { \ +#define iSHUF(b, b2) \ b2[0] = b[12]; b2[1] = b[5]; b2[2] = b[4]; b2[3] = b[15]; \ b2[4] = b[14]; b2[5] = b[7]; b2[6] = b[6]; b2[7] = b[13]; \ b2[8] = b[0]; b2[9] = b[9]; b2[10] = b[8]; b2[11] = b[1]; \ - b2[12] = b[2]; b2[13] = b[11]; b2[14] = b[10]; b2[15] = b[3]; \ -} while (0) + b2[12] = b[2]; b2[13] = b[11]; b2[14] = b[10]; b2[15] = b[3]; -/* The complete forward Linear Transform layer. - * Note that alternating usage of b and b2. - * Each round of LT starts in 'b' and ends in 'b2'. +/* The complete forward Linear Transform layer. + * Note that alternating usage of b and b2. + * Each round of LT starts in 'b' and ends in 'b2'. */ -#define LT(b, b2) do { \ +#define LT(b, b2) \ PHT(b); SHUF(b, b2); \ PHT(b2); SHUF(b2, b); \ PHT(b); SHUF(b, b2); \ - PHT(b2); \ -} while (0) + PHT(b2); /* This is the inverse linear transform layer. */ -#define iLT(b, b2) do { \ +#define iLT(b, b2) \ iPHT(b); \ iSHUF(b, b2); iPHT(b2); \ iSHUF(b2, b); iPHT(b); \ - iSHUF(b, b2); iPHT(b2); \ -} while (0) + iSHUF(b, b2); iPHT(b2); + +#ifdef SMALL_CODE -#ifdef LTC_SMALL_CODE - -static void s_round(unsigned char *b, int i, const symmetric_key *skey) +static void _round(unsigned char *b, int i, symmetric_key *skey) { ROUND(b, i); } -static void s_iround(unsigned char *b, int i, const symmetric_key *skey) +static void _iround(unsigned char *b, int i, symmetric_key *skey) { iROUND(b, i); } -static void s_lt(unsigned char *b, unsigned char *b2) +static void _lt(unsigned char *b, unsigned char *b2) { LT(b, b2); } -static void s_ilt(unsigned char *b, unsigned char *b2) +static void _ilt(unsigned char *b, unsigned char *b2) { iLT(b, b2); -} +} #undef ROUND -#define ROUND(b, i) s_round(b, i, skey) +#define ROUND(b, i) _round(b, i, skey) #undef iROUND -#define iROUND(b, i) s_iround(b, i, skey) +#define iROUND(b, i) _iround(b, i, skey) #undef LT -#define LT(b, b2) s_lt(b, b2) +#define LT(b, b2) _lt(b, b2) #undef iLT -#define iLT(b, b2) s_ilt(b, b2) +#define iLT(b, b2) _ilt(b, b2) #endif @@ -208,22 +200,14 @@ static const unsigned char safer_bias[33][16] = { { 53, 72, 156, 81, 47, 59, 85, 227, 192, 159, 216, 211, 243, 141, 177, 255}, { 62, 220, 134, 119, 215, 166, 17, 251, 244, 186, 146, 145, 100, 131, 241, 51}}; - /** - Initialize the LTC_SAFER+ block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { unsigned x, y, z; unsigned char t[33]; static const int rounds[3] = { 8, 12, 16 }; - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); /* check arguments */ if (keylen != 16 && keylen != 24 && keylen != 32) { @@ -231,7 +215,7 @@ int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric } /* Is the number of rounds valid? Either use zero for default or - * 8,12,16 rounds for 16,24,32 byte keys + * 8,12,16 rounds for 16,24,32 byte keys */ if (num_rounds != 0 && num_rounds != rounds[(keylen/8)-2]) { return CRYPT_INVALID_ROUNDS; @@ -240,9 +224,9 @@ int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric /* 128 bit key version */ if (keylen == 16) { /* copy key into t */ - for (x = y = 0; x < 16; x++) { - t[x] = key[x]; - y ^= key[x]; + for (x = y = 0; x < 16; x++) { + t[x] = key[x]; + y ^= key[x]; } t[16] = y; @@ -268,9 +252,9 @@ int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric skey->saferp.rounds = 8; } else if (keylen == 24) { /* copy key into t */ - for (x = y = 0; x < 24; x++) { - t[x] = key[x]; - y ^= key[x]; + for (x = y = 0; x < 24; x++) { + t[x] = key[x]; + y ^= key[x]; } t[24] = y; @@ -287,7 +271,7 @@ int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric /* select and add */ z = x; - for (y = 0; y < 16; y++) { + for (y = 0; y < 16; y++) { skey->saferp.K[x][y] = (t[z] + safer_bias[x-1][y]) & 255; if (++z == 25) { z = 0; } } @@ -295,14 +279,14 @@ int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric skey->saferp.rounds = 12; } else { /* copy key into t */ - for (x = y = 0; x < 32; x++) { - t[x] = key[x]; - y ^= key[x]; + for (x = y = 0; x < 32; x++) { + t[x] = key[x]; + y ^= key[x]; } t[32] = y; /* make round keys */ - for (x = 0; x < 16; x++) { + for (x = 0; x < 16; x++) { skey->saferp.K[0][x] = t[x]; } @@ -311,7 +295,7 @@ int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric for (y = 0; y < 33; y++) { t[y] = ((t[y]<<3)|(t[y]>>5)) & 255; } - + /* select and add */ z = x; for (y = 0; y < 16; y++) { @@ -321,31 +305,20 @@ int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric } skey->saferp.rounds = 16; } -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK zeromem(t, sizeof(t)); #endif return CRYPT_OK; } -/** - Encrypts a block of text with LTC_SAFER+ - @param pt The input plaintext (16 bytes) - @param ct The output ciphertext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +void saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) { unsigned char b[16]; int x; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - if (skey->saferp.rounds < 8 || skey->saferp.rounds > 16) { - return CRYPT_INVALID_ROUNDS; - } + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(skey != NULL); /* do eight rounds */ for (x = 0; x < 16; x++) { @@ -389,31 +362,19 @@ int saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetr ct[13] = (b[13] + skey->saferp.K[skey->saferp.rounds*2][13]) & 255; ct[14] = (b[14] + skey->saferp.K[skey->saferp.rounds*2][14]) & 255; ct[15] = b[15] ^ skey->saferp.K[skey->saferp.rounds*2][15]; -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK zeromem(b, sizeof(b)); #endif - return CRYPT_OK; } -/** - Decrypts a block of text with LTC_SAFER+ - @param ct The input ciphertext (16 bytes) - @param pt The output plaintext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +void saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) { unsigned char b[16]; int x; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - if (skey->saferp.rounds < 8 || skey->saferp.rounds > 16) { - return CRYPT_INVALID_ROUNDS; - } + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(skey != NULL); /* do eight rounds */ b[0] = ct[0] ^ skey->saferp.K[skey->saferp.rounds*2][0]; @@ -457,54 +418,49 @@ int saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetr for (x = 0; x < 16; x++) { pt[x] = b[x]; } -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK zeromem(b, sizeof(b)); #endif - return CRYPT_OK; } -/** - Performs a self-test of the LTC_SAFER+ block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ int saferp_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else static const struct { int keylen; unsigned char key[32], pt[16], ct[16]; } tests[] = { { 16, - { 41, 35, 190, 132, 225, 108, 214, 174, + { 41, 35, 190, 132, 225, 108, 214, 174, 82, 144, 73, 241, 241, 187, 233, 235 }, - { 179, 166, 219, 60, 135, 12, 62, 153, + { 179, 166, 219, 60, 135, 12, 62, 153, 36, 94, 13, 28, 6, 183, 71, 222 }, - { 224, 31, 182, 10, 12, 255, 84, 70, + { 224, 31, 182, 10, 12, 255, 84, 70, 127, 13, 89, 249, 9, 57, 165, 220 } }, { 24, - { 72, 211, 143, 117, 230, 217, 29, 42, - 229, 192, 247, 43, 120, 129, 135, 68, + { 72, 211, 143, 117, 230, 217, 29, 42, + 229, 192, 247, 43, 120, 129, 135, 68, 14, 95, 80, 0, 212, 97, 141, 190 }, - { 123, 5, 21, 7, 59, 51, 130, 31, + { 123, 5, 21, 7, 59, 51, 130, 31, 24, 112, 146, 218, 100, 84, 206, 177 }, - { 92, 136, 4, 63, 57, 95, 100, 0, + { 92, 136, 4, 63, 57, 95, 100, 0, 150, 130, 130, 16, 193, 111, 219, 133 } }, { 32, - { 243, 168, 141, 254, 190, 242, 235, 113, + { 243, 168, 141, 254, 190, 242, 235, 113, 255, 160, 208, 59, 117, 6, 140, 126, - 135, 120, 115, 77, 208, 190, 130, 190, + 135, 120, 115, 77, 208, 190, 130, 190, 219, 194, 70, 65, 43, 140, 250, 48 }, - { 127, 112, 240, 167, 84, 134, 50, 149, + { 127, 112, 240, 167, 84, 134, 50, 149, 170, 91, 104, 19, 11, 230, 252, 245 }, - { 88, 11, 25, 36, 172, 229, 202, 213, + { 88, 11, 25, 36, 172, 229, 202, 213, 170, 65, 105, 153, 220, 104, 153, 138 } } - }; + }; unsigned char tmp[2][16]; symmetric_key skey; @@ -518,8 +474,7 @@ int saferp_test(void) saferp_ecb_decrypt(tmp[0], tmp[1], &skey); /* compare */ - if (ltc_compare_testvector(tmp[0], 16, tests[i].ct, 16, "Safer+ Encrypt", i) || - ltc_compare_testvector(tmp[1], 16, tests[i].pt, 16, "Safer+ Decrypt", i)) { + if (memcmp(tmp[0], tests[i].ct, 16) || memcmp(tmp[1], tests[i].pt, 16)) { return CRYPT_FAIL_TESTVECTOR; } @@ -534,43 +489,22 @@ int saferp_test(void) #endif } -/** Terminate the context - @param skey The scheduled key -*/ -void saferp_done(symmetric_key *skey) +int saferp_keysize(int *desired_keysize) { - LTC_UNUSED_PARAM(skey); -} - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int saferp_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - - if (*keysize < 16) { + _ARGCHK(desired_keysize != NULL); + + if (*desired_keysize < 16) return CRYPT_INVALID_KEYSIZE; - } - if (*keysize < 24) { - *keysize = 16; - } else if (*keysize < 32) { - *keysize = 24; + if (*desired_keysize < 24) { + *desired_keysize = 16; + } else if (*desired_keysize < 32) { + *desired_keysize = 24; } else { - *keysize = 32; + *desired_keysize = 32; } return CRYPT_OK; } -#undef ROUND -#undef iROUND -#undef PHT -#undef iPHT -#undef SHUF -#undef iSHUF -#undef LT -#undef iLT - #endif + + diff --git a/sha1.c b/sha1.c new file mode 100644 index 00000000..77700f64 --- /dev/null +++ b/sha1.c @@ -0,0 +1,253 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* SHA1 code by Tom St Denis */ +#include "mycrypt.h" + +#ifdef SHA1 + +const struct _hash_descriptor sha1_desc = +{ + "sha1", + 2, + 20, + 64, + + /* DER identifier */ + { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, + 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14 }, + 15, + + &sha1_init, + &sha1_process, + &sha1_done, + &sha1_test +}; + +#define F0(x,y,z) (z ^ (x & (y ^ z))) +#define F1(x,y,z) (x ^ y ^ z) +#define F2(x,y,z) ((x & y) | (z & (x | y))) +#define F3(x,y,z) (x ^ y ^ z) + +#ifdef CLEAN_STACK +static void _sha1_compress(hash_state *md, unsigned char *buf) +#else +static void sha1_compress(hash_state *md, unsigned char *buf) +#endif +{ + ulong32 a,b,c,d,e,W[80],i; +#ifdef SMALL_CODE + ulong32 t; +#endif + + /* copy the state into 512-bits into W[0..15] */ + for (i = 0; i < 16; i++) { + LOAD32H(W[i], buf + (4*i)); + } + + /* copy state */ + a = md->sha1.state[0]; + b = md->sha1.state[1]; + c = md->sha1.state[2]; + d = md->sha1.state[3]; + e = md->sha1.state[4]; + + /* expand it */ + for (i = 16; i < 80; i++) { + W[i] = ROL(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1); + } + + /* compress */ + /* round one */ + #define FF0(a,b,c,d,e,i) e = (ROL(a, 5) + F0(b,c,d) + e + W[i] + 0x5a827999UL); b = ROL(b, 30); + #define FF1(a,b,c,d,e,i) e = (ROL(a, 5) + F1(b,c,d) + e + W[i] + 0x6ed9eba1UL); b = ROL(b, 30); + #define FF2(a,b,c,d,e,i) e = (ROL(a, 5) + F2(b,c,d) + e + W[i] + 0x8f1bbcdcUL); b = ROL(b, 30); + #define FF3(a,b,c,d,e,i) e = (ROL(a, 5) + F3(b,c,d) + e + W[i] + 0xca62c1d6UL); b = ROL(b, 30); + +#ifdef SMALL_CODE + + for (i = 0; i < 20; ) { + FF0(a,b,c,d,e,i++); t = e; e = d; d = c; c = b; b = a; a = t; + } + + for (; i < 40; ) { + FF1(a,b,c,d,e,i++); t = e; e = d; d = c; c = b; b = a; a = t; + } + + for (; i < 60; ) { + FF2(a,b,c,d,e,i++); t = e; e = d; d = c; c = b; b = a; a = t; + } + + for (; i < 80; ) { + FF3(a,b,c,d,e,i++); t = e; e = d; d = c; c = b; b = a; a = t; + } + +#else + + for (i = 0; i < 20; ) { + FF0(a,b,c,d,e,i++); + FF0(e,a,b,c,d,i++); + FF0(d,e,a,b,c,i++); + FF0(c,d,e,a,b,i++); + FF0(b,c,d,e,a,i++); + } + + /* round two */ + for (; i < 40; ) { + FF1(a,b,c,d,e,i++); + FF1(e,a,b,c,d,i++); + FF1(d,e,a,b,c,i++); + FF1(c,d,e,a,b,i++); + FF1(b,c,d,e,a,i++); + } + + /* round three */ + for (; i < 60; ) { + FF2(a,b,c,d,e,i++); + FF2(e,a,b,c,d,i++); + FF2(d,e,a,b,c,i++); + FF2(c,d,e,a,b,i++); + FF2(b,c,d,e,a,i++); + } + + /* round four */ + for (; i < 80; ) { + FF3(a,b,c,d,e,i++); + FF3(e,a,b,c,d,i++); + FF3(d,e,a,b,c,i++); + FF3(c,d,e,a,b,i++); + FF3(b,c,d,e,a,i++); + } +#endif + + #undef FF0 + #undef FF1 + #undef FF2 + #undef FF3 + + /* store */ + md->sha1.state[0] = md->sha1.state[0] + a; + md->sha1.state[1] = md->sha1.state[1] + b; + md->sha1.state[2] = md->sha1.state[2] + c; + md->sha1.state[3] = md->sha1.state[3] + d; + md->sha1.state[4] = md->sha1.state[4] + e; +} + +#ifdef CLEAN_STACK +static void sha1_compress(hash_state *md, unsigned char *buf) +{ + _sha1_compress(md, buf); + burn_stack(sizeof(ulong32) * 87); +} +#endif + +void sha1_init(hash_state * md) +{ + _ARGCHK(md != NULL); + md->sha1.state[0] = 0x67452301UL; + md->sha1.state[1] = 0xefcdab89UL; + md->sha1.state[2] = 0x98badcfeUL; + md->sha1.state[3] = 0x10325476UL; + md->sha1.state[4] = 0xc3d2e1f0UL; + md->sha1.curlen = 0; + md->sha1.length = 0; +} + +HASH_PROCESS(sha1_process, sha1_compress, sha1, 64) + +int sha1_done(hash_state * md, unsigned char *hash) +{ + int i; + + _ARGCHK(md != NULL); + _ARGCHK(hash != NULL); + + if (md->sha1.curlen >= sizeof(md->sha1.buf)) { + return CRYPT_INVALID_ARG; + } + + /* increase the length of the message */ + md->sha1.length += md->sha1.curlen * 8; + + /* append the '1' bit */ + md->sha1.buf[md->sha1.curlen++] = (unsigned char)0x80; + + /* if the length is currently above 56 bytes we append zeros + * then compress. Then we can fall back to padding zeros and length + * encoding like normal. + */ + if (md->sha1.curlen > 56) { + while (md->sha1.curlen < 64) { + md->sha1.buf[md->sha1.curlen++] = (unsigned char)0; + } + sha1_compress(md, md->sha1.buf); + md->sha1.curlen = 0; + } + + /* pad upto 56 bytes of zeroes */ + while (md->sha1.curlen < 56) { + md->sha1.buf[md->sha1.curlen++] = (unsigned char)0; + } + + /* store length */ + STORE64H(md->sha1.length, md->sha1.buf+56); + sha1_compress(md, md->sha1.buf); + + /* copy output */ + for (i = 0; i < 5; i++) { + STORE32H(md->sha1.state[i], hash+(4*i)); + } +#ifdef CLEAN_STACK + zeromem(md, sizeof(hash_state)); +#endif + return CRYPT_OK; +} + +int sha1_test(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + static const struct { + char *msg; + unsigned char hash[20]; + } tests[] = { + { "abc", + { 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, + 0xba, 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c, + 0x9c, 0xd0, 0xd8, 0x9d } + }, + { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, + 0xBA, 0xAE, 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, + 0xE5, 0x46, 0x70, 0xF1 } + } + }; + + int i; + unsigned char tmp[20]; + hash_state md; + + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { + sha1_init(&md); + sha1_process(&md, (unsigned char*)tests[i].msg, (unsigned long)strlen(tests[i].msg)); + sha1_done(&md, tmp); + if (memcmp(tmp, tests[i].hash, 20) != 0) { + return CRYPT_FAIL_TESTVECTOR; + } + } + return CRYPT_OK; + #endif +} + +#endif + + diff --git a/sha224.c b/sha224.c new file mode 100644 index 00000000..fb9f09e7 --- /dev/null +++ b/sha224.c @@ -0,0 +1,98 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* SHA-224 new NIST standard based off of SHA-256 truncated to 224 bits */ +const struct _hash_descriptor sha224_desc = +{ + "sha224", + 10, + 28, + 64, + + /* DER identifier (not supported) */ + { 0x00 }, + 0, + + &sha224_init, + &sha256_process, + &sha224_done, + &sha224_test +}; + +/* init the sha256 er... sha224 state ;-) */ +void sha224_init(hash_state * md) +{ + _ARGCHK(md != NULL); + + md->sha256.curlen = 0; + md->sha256.length = 0; + md->sha256.state[0] = 0xc1059ed8UL; + md->sha256.state[1] = 0x367cd507UL; + md->sha256.state[2] = 0x3070dd17UL; + md->sha256.state[3] = 0xf70e5939UL; + md->sha256.state[4] = 0xffc00b31UL; + md->sha256.state[5] = 0x68581511UL; + md->sha256.state[6] = 0x64f98fa7UL; + md->sha256.state[7] = 0xbefa4fa4UL; +} + +int sha224_done(hash_state * md, unsigned char *hash) +{ + unsigned char buf[32]; + int err; + + err = sha256_done(md, buf); + XMEMCPY(hash, buf, 28); +#ifdef CLEAN_STACK + zeromem(buf, sizeof(buf)); +#endif + return err; +} + +int sha224_test(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + static const struct { + char *msg; + unsigned char hash[28]; + } tests[] = { + { "abc", + { 0x23, 0x09, 0x7d, 0x22, 0x34, 0x05, 0xd8, + 0x22, 0x86, 0x42, 0xa4, 0x77, 0xbd, 0xa2, + 0x55, 0xb3, 0x2a, 0xad, 0xbc, 0xe4, 0xbd, + 0xa0, 0xb3, 0xf7, 0xe3, 0x6c, 0x9d, 0xa7 } + }, + { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + { 0x75, 0x38, 0x8b, 0x16, 0x51, 0x27, 0x76, + 0xcc, 0x5d, 0xba, 0x5d, 0xa1, 0xfd, 0x89, + 0x01, 0x50, 0xb0, 0xc6, 0x45, 0x5c, 0xb4, + 0xf5, 0x8b, 0x19, 0x52, 0x52, 0x25, 0x25 } + }, + }; + + int i; + unsigned char tmp[28]; + hash_state md; + + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { + sha224_init(&md); + sha224_process(&md, (unsigned char*)tests[i].msg, (unsigned long)strlen(tests[i].msg)); + sha224_done(&md, tmp); + if (memcmp(tmp, tests[i].hash, 28) != 0) { + return CRYPT_FAIL_TESTVECTOR; + } + } + return CRYPT_OK; + #endif +} + diff --git a/sha256.c b/sha256.c new file mode 100644 index 00000000..02bce05c --- /dev/null +++ b/sha256.c @@ -0,0 +1,312 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + + +/* SHA256 by Tom St Denis */ + +#include "mycrypt.h" + +#ifdef SHA256 + +const struct _hash_descriptor sha256_desc = +{ + "sha256", + 0, + 32, + 64, + + /* DER identifier */ + { 0x30, 0x31, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, + 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, + 0x00, 0x04, 0x20 }, + 19, + + &sha256_init, + &sha256_process, + &sha256_done, + &sha256_test +}; + +#ifdef SMALL_CODE +/* the K array */ +static const unsigned long K[64] = { + 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL, + 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL, + 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, + 0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, + 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL, + 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL, + 0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, + 0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, + 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL, + 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL, + 0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, + 0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, + 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL +}; +#endif + +/* Various logical functions */ +#define Ch(x,y,z) (z ^ (x & (y ^ z))) +#define Maj(x,y,z) (((x | y) & z) | (x & y)) +#define S(x, n) ROR((x),(n)) +#define R(x, n) (((x)&0xFFFFFFFFUL)>>(n)) +#define Sigma0(x) (S(x, 2) ^ S(x, 13) ^ S(x, 22)) +#define Sigma1(x) (S(x, 6) ^ S(x, 11) ^ S(x, 25)) +#define Gamma0(x) (S(x, 7) ^ S(x, 18) ^ R(x, 3)) +#define Gamma1(x) (S(x, 17) ^ S(x, 19) ^ R(x, 10)) + +/* compress 512-bits */ +#ifdef CLEAN_STACK +static void _sha256_compress(hash_state * md, unsigned char *buf) +#else +static void sha256_compress(hash_state * md, unsigned char *buf) +#endif +{ + ulong32 S[8], W[64], t0, t1; +#ifdef SMALL_CODE + ulong32 t; +#endif + int i; + + /* copy state into S */ + for (i = 0; i < 8; i++) { + S[i] = md->sha256.state[i]; + } + + /* copy the state into 512-bits into W[0..15] */ + for (i = 0; i < 16; i++) { + LOAD32H(W[i], buf + (4*i)); + } + + /* fill W[16..63] */ + for (i = 16; i < 64; i++) { + W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16]; + } + + /* Compress */ +#ifdef SMALL_CODE +#define RND(a,b,c,d,e,f,g,h,i) \ + t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \ + t1 = Sigma0(a) + Maj(a, b, c); \ + d += t0; \ + h = t0 + t1; + + for (i = 0; i < 64; ++i) { + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],i); + t = S[7]; S[7] = S[6]; S[6] = S[5]; S[5] = S[4]; + S[4] = S[3]; S[3] = S[2]; S[2] = S[1]; S[1] = S[0]; S[0] = t; + } +#else +#define RND(a,b,c,d,e,f,g,h,i,ki) \ + t0 = h + Sigma1(e) + Ch(e, f, g) + ki + W[i]; \ + t1 = Sigma0(a) + Maj(a, b, c); \ + d += t0; \ + h = t0 + t1; + + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],0,0x428a2f98); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],1,0x71374491); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],2,0xb5c0fbcf); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],3,0xe9b5dba5); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],4,0x3956c25b); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],5,0x59f111f1); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],6,0x923f82a4); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],7,0xab1c5ed5); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],8,0xd807aa98); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],9,0x12835b01); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],10,0x243185be); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],11,0x550c7dc3); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],12,0x72be5d74); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],13,0x80deb1fe); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],14,0x9bdc06a7); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],15,0xc19bf174); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],16,0xe49b69c1); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],17,0xefbe4786); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],18,0x0fc19dc6); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],19,0x240ca1cc); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],20,0x2de92c6f); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],21,0x4a7484aa); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],22,0x5cb0a9dc); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],23,0x76f988da); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],24,0x983e5152); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],25,0xa831c66d); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],26,0xb00327c8); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],27,0xbf597fc7); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],28,0xc6e00bf3); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],29,0xd5a79147); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],30,0x06ca6351); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],31,0x14292967); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],32,0x27b70a85); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],33,0x2e1b2138); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],34,0x4d2c6dfc); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],35,0x53380d13); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],36,0x650a7354); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],37,0x766a0abb); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],38,0x81c2c92e); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],39,0x92722c85); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],40,0xa2bfe8a1); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],41,0xa81a664b); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],42,0xc24b8b70); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],43,0xc76c51a3); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],44,0xd192e819); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],45,0xd6990624); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],46,0xf40e3585); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],47,0x106aa070); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],48,0x19a4c116); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],49,0x1e376c08); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],50,0x2748774c); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],51,0x34b0bcb5); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],52,0x391c0cb3); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],53,0x4ed8aa4a); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],54,0x5b9cca4f); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],55,0x682e6ff3); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],56,0x748f82ee); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],57,0x78a5636f); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],58,0x84c87814); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],59,0x8cc70208); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],60,0x90befffa); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],61,0xa4506ceb); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],62,0xbef9a3f7); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],63,0xc67178f2); + +#undef RND + +#endif + + /* feedback */ + for (i = 0; i < 8; i++) { + md->sha256.state[i] = md->sha256.state[i] + S[i]; + } + +} + +#ifdef CLEAN_STACK +static void sha256_compress(hash_state * md, unsigned char *buf) +{ + _sha256_compress(md, buf); + burn_stack(sizeof(ulong32) * 74); +} +#endif + +/* init the sha256 state */ +void sha256_init(hash_state * md) +{ + _ARGCHK(md != NULL); + + md->sha256.curlen = 0; + md->sha256.length = 0; + md->sha256.state[0] = 0x6A09E667UL; + md->sha256.state[1] = 0xBB67AE85UL; + md->sha256.state[2] = 0x3C6EF372UL; + md->sha256.state[3] = 0xA54FF53AUL; + md->sha256.state[4] = 0x510E527FUL; + md->sha256.state[5] = 0x9B05688CUL; + md->sha256.state[6] = 0x1F83D9ABUL; + md->sha256.state[7] = 0x5BE0CD19UL; +} + +HASH_PROCESS(sha256_process, sha256_compress, sha256, 64) + +int sha256_done(hash_state * md, unsigned char *hash) +{ + int i; + + _ARGCHK(md != NULL); + _ARGCHK(hash != NULL); + + if (md->sha256.curlen >= sizeof(md->sha256.buf)) { + return CRYPT_INVALID_ARG; + } + + + /* increase the length of the message */ + md->sha256.length += md->sha256.curlen * 8; + + /* append the '1' bit */ + md->sha256.buf[md->sha256.curlen++] = (unsigned char)0x80; + + /* if the length is currently above 56 bytes we append zeros + * then compress. Then we can fall back to padding zeros and length + * encoding like normal. + */ + if (md->sha256.curlen > 56) { + while (md->sha256.curlen < 64) { + md->sha256.buf[md->sha256.curlen++] = (unsigned char)0; + } + sha256_compress(md, md->sha256.buf); + md->sha256.curlen = 0; + } + + /* pad upto 56 bytes of zeroes */ + while (md->sha256.curlen < 56) { + md->sha256.buf[md->sha256.curlen++] = (unsigned char)0; + } + + /* store length */ + STORE64H(md->sha256.length, md->sha256.buf+56); + sha256_compress(md, md->sha256.buf); + + /* copy output */ + for (i = 0; i < 8; i++) { + STORE32H(md->sha256.state[i], hash+(4*i)); + } +#ifdef CLEAN_STACK + zeromem(md, sizeof(hash_state)); +#endif + return CRYPT_OK; +} + +int sha256_test(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + static const struct { + char *msg; + unsigned char hash[32]; + } tests[] = { + { "abc", + { 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, + 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, + 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, + 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad } + }, + { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + { 0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8, + 0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39, + 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67, + 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1 } + }, + }; + + int i; + unsigned char tmp[32]; + hash_state md; + + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { + sha256_init(&md); + sha256_process(&md, (unsigned char*)tests[i].msg, (unsigned long)strlen(tests[i].msg)); + sha256_done(&md, tmp); + if (memcmp(tmp, tests[i].hash, 32) != 0) { + return CRYPT_FAIL_TESTVECTOR; + } + } + return CRYPT_OK; + #endif +} + +#ifdef SHA224 +#include "sha224.c" +#endif + +#endif + + diff --git a/sha384.c b/sha384.c new file mode 100644 index 00000000..d771fc80 --- /dev/null +++ b/sha384.c @@ -0,0 +1,114 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* included in sha512.c */ + +const struct _hash_descriptor sha384_desc = +{ + "sha384", + 4, + 48, + 128, + + /* DER identifier */ + { 0x30, 0x41, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, + 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02, 0x05, + 0x00, 0x04, 0x30 }, + 19, + + &sha384_init, + &sha512_process, + &sha384_done, + &sha384_test +}; + +void sha384_init(hash_state * md) +{ + _ARGCHK(md != NULL); + + md->sha512.curlen = 0; + md->sha512.length = 0; + md->sha512.state[0] = CONST64(0xcbbb9d5dc1059ed8); + md->sha512.state[1] = CONST64(0x629a292a367cd507); + md->sha512.state[2] = CONST64(0x9159015a3070dd17); + md->sha512.state[3] = CONST64(0x152fecd8f70e5939); + md->sha512.state[4] = CONST64(0x67332667ffc00b31); + md->sha512.state[5] = CONST64(0x8eb44a8768581511); + md->sha512.state[6] = CONST64(0xdb0c2e0d64f98fa7); + md->sha512.state[7] = CONST64(0x47b5481dbefa4fa4); +} + +int sha384_done(hash_state * md, unsigned char *hash) +{ + unsigned char buf[64]; + + _ARGCHK(md != NULL); + _ARGCHK(hash != NULL); + + if (md->sha512.curlen >= sizeof(md->sha512.buf)) { + return CRYPT_INVALID_ARG; + } + + sha512_done(md, buf); + XMEMCPY(hash, buf, 48); +#ifdef CLEAN_STACK + zeromem(buf, sizeof(buf)); +#endif + return CRYPT_OK; +} + +int sha384_test(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + static const struct { + char *msg; + unsigned char hash[48]; + } tests[] = { + { "abc", + { 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, + 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07, + 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63, + 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed, + 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23, + 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7 } + }, + { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", + { 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8, + 0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47, + 0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2, + 0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12, + 0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9, + 0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39 } + }, + }; + + int i; + unsigned char tmp[48]; + hash_state md; + + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { + sha384_init(&md); + sha384_process(&md, (unsigned char*)tests[i].msg, (unsigned long)strlen(tests[i].msg)); + sha384_done(&md, tmp); + if (memcmp(tmp, tests[i].hash, 48) != 0) { + return CRYPT_FAIL_TESTVECTOR; + } + } + return CRYPT_OK; + #endif +} + + + + + diff --git a/sha512.c b/sha512.c new file mode 100644 index 00000000..9b5ddad9 --- /dev/null +++ b/sha512.c @@ -0,0 +1,289 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* SHA512 by Tom St Denis */ + +#include "mycrypt.h" + +#ifdef SHA512 + +const struct _hash_descriptor sha512_desc = +{ + "sha512", + 5, + 64, + 128, + + /* DER identifier */ + { 0x30, 0x51, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, + 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x05, + 0x00, 0x04, 0x40 }, + 19, + + &sha512_init, + &sha512_process, + &sha512_done, + &sha512_test +}; + +/* the K array */ +static const ulong64 K[80] = { +CONST64(0x428a2f98d728ae22), CONST64(0x7137449123ef65cd), +CONST64(0xb5c0fbcfec4d3b2f), CONST64(0xe9b5dba58189dbbc), +CONST64(0x3956c25bf348b538), CONST64(0x59f111f1b605d019), +CONST64(0x923f82a4af194f9b), CONST64(0xab1c5ed5da6d8118), +CONST64(0xd807aa98a3030242), CONST64(0x12835b0145706fbe), +CONST64(0x243185be4ee4b28c), CONST64(0x550c7dc3d5ffb4e2), +CONST64(0x72be5d74f27b896f), CONST64(0x80deb1fe3b1696b1), +CONST64(0x9bdc06a725c71235), CONST64(0xc19bf174cf692694), +CONST64(0xe49b69c19ef14ad2), CONST64(0xefbe4786384f25e3), +CONST64(0x0fc19dc68b8cd5b5), CONST64(0x240ca1cc77ac9c65), +CONST64(0x2de92c6f592b0275), CONST64(0x4a7484aa6ea6e483), +CONST64(0x5cb0a9dcbd41fbd4), CONST64(0x76f988da831153b5), +CONST64(0x983e5152ee66dfab), CONST64(0xa831c66d2db43210), +CONST64(0xb00327c898fb213f), CONST64(0xbf597fc7beef0ee4), +CONST64(0xc6e00bf33da88fc2), CONST64(0xd5a79147930aa725), +CONST64(0x06ca6351e003826f), CONST64(0x142929670a0e6e70), +CONST64(0x27b70a8546d22ffc), CONST64(0x2e1b21385c26c926), +CONST64(0x4d2c6dfc5ac42aed), CONST64(0x53380d139d95b3df), +CONST64(0x650a73548baf63de), CONST64(0x766a0abb3c77b2a8), +CONST64(0x81c2c92e47edaee6), CONST64(0x92722c851482353b), +CONST64(0xa2bfe8a14cf10364), CONST64(0xa81a664bbc423001), +CONST64(0xc24b8b70d0f89791), CONST64(0xc76c51a30654be30), +CONST64(0xd192e819d6ef5218), CONST64(0xd69906245565a910), +CONST64(0xf40e35855771202a), CONST64(0x106aa07032bbd1b8), +CONST64(0x19a4c116b8d2d0c8), CONST64(0x1e376c085141ab53), +CONST64(0x2748774cdf8eeb99), CONST64(0x34b0bcb5e19b48a8), +CONST64(0x391c0cb3c5c95a63), CONST64(0x4ed8aa4ae3418acb), +CONST64(0x5b9cca4f7763e373), CONST64(0x682e6ff3d6b2b8a3), +CONST64(0x748f82ee5defb2fc), CONST64(0x78a5636f43172f60), +CONST64(0x84c87814a1f0ab72), CONST64(0x8cc702081a6439ec), +CONST64(0x90befffa23631e28), CONST64(0xa4506cebde82bde9), +CONST64(0xbef9a3f7b2c67915), CONST64(0xc67178f2e372532b), +CONST64(0xca273eceea26619c), CONST64(0xd186b8c721c0c207), +CONST64(0xeada7dd6cde0eb1e), CONST64(0xf57d4f7fee6ed178), +CONST64(0x06f067aa72176fba), CONST64(0x0a637dc5a2c898a6), +CONST64(0x113f9804bef90dae), CONST64(0x1b710b35131c471b), +CONST64(0x28db77f523047d84), CONST64(0x32caab7b40c72493), +CONST64(0x3c9ebe0a15c9bebc), CONST64(0x431d67c49c100d4c), +CONST64(0x4cc5d4becb3e42b6), CONST64(0x597f299cfc657e2a), +CONST64(0x5fcb6fab3ad6faec), CONST64(0x6c44198c4a475817) +}; + +/* Various logical functions */ +#define Ch(x,y,z) (z ^ (x & (y ^ z))) +#define Maj(x,y,z) (((x | y) & z) | (x & y)) +#define S(x, n) ROR64((x),(n)) +#define R(x, n) (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)n)) +#define Sigma0(x) (S(x, 28) ^ S(x, 34) ^ S(x, 39)) +#define Sigma1(x) (S(x, 14) ^ S(x, 18) ^ S(x, 41)) +#define Gamma0(x) (S(x, 1) ^ S(x, 8) ^ R(x, 7)) +#define Gamma1(x) (S(x, 19) ^ S(x, 61) ^ R(x, 6)) + +/* compress 1024-bits */ +#ifdef CLEAN_STACK +static void _sha512_compress(hash_state * md, unsigned char *buf) +#else +static void sha512_compress(hash_state * md, unsigned char *buf) +#endif +{ + ulong64 S[8], W[80], t0, t1; + int i; + + /* copy state into S */ + for (i = 0; i < 8; i++) { + S[i] = md->sha512.state[i]; + } + + /* copy the state into 1024-bits into W[0..15] */ + for (i = 0; i < 16; i++) { + LOAD64H(W[i], buf + (8*i)); + } + + /* fill W[16..79] */ + for (i = 16; i < 80; i++) { + W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16]; + } + + /* Compress */ +#ifdef SMALL_CODE + for (i = 0; i < 80; i++) { + t0 = S[7] + Sigma1(S[4]) + Ch(S[4], S[5], S[6]) + K[i] + W[i]; + t1 = Sigma0(S[0]) + Maj(S[0], S[1], S[2]); + S[7] = S[6]; + S[6] = S[5]; + S[5] = S[4]; + S[4] = S[3] + t0; + S[3] = S[2]; + S[2] = S[1]; + S[1] = S[0]; + S[0] = t0 + t1; + } +#else +#define RND(a,b,c,d,e,f,g,h,i) \ + t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \ + t1 = Sigma0(a) + Maj(a, b, c); \ + d += t0; \ + h = t0 + t1; + + for (i = 0; i < 80; i += 8) { + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],i+0); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],i+1); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],i+2); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],i+3); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],i+4); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],i+5); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],i+6); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],i+7); + } +#endif + + + /* feedback */ + for (i = 0; i < 8; i++) { + md->sha512.state[i] = md->sha512.state[i] + S[i]; + } +} + +/* compress 1024-bits */ +#ifdef CLEAN_STACK +static void sha512_compress(hash_state * md, unsigned char *buf) +{ + _sha512_compress(md, buf); + burn_stack(sizeof(ulong64) * 90 + sizeof(int)); +} +#endif + +/* init the sha512 state */ +void sha512_init(hash_state * md) +{ + _ARGCHK(md != NULL); + + md->sha512.curlen = 0; + md->sha512.length = 0; + md->sha512.state[0] = CONST64(0x6a09e667f3bcc908); + md->sha512.state[1] = CONST64(0xbb67ae8584caa73b); + md->sha512.state[2] = CONST64(0x3c6ef372fe94f82b); + md->sha512.state[3] = CONST64(0xa54ff53a5f1d36f1); + md->sha512.state[4] = CONST64(0x510e527fade682d1); + md->sha512.state[5] = CONST64(0x9b05688c2b3e6c1f); + md->sha512.state[6] = CONST64(0x1f83d9abfb41bd6b); + md->sha512.state[7] = CONST64(0x5be0cd19137e2179); +} + +HASH_PROCESS(sha512_process, sha512_compress, sha512, 128) + +int sha512_done(hash_state * md, unsigned char *hash) +{ + int i; + + _ARGCHK(md != NULL); + _ARGCHK(hash != NULL); + + if (md->sha512.curlen >= sizeof(md->sha512.buf)) { + return CRYPT_INVALID_ARG; + } + + /* increase the length of the message */ + md->sha512.length += md->sha512.curlen * CONST64(8); + + /* append the '1' bit */ + md->sha512.buf[md->sha512.curlen++] = (unsigned char)0x80; + + /* if the length is currently above 112 bytes we append zeros + * then compress. Then we can fall back to padding zeros and length + * encoding like normal. + */ + if (md->sha512.curlen > 112) { + while (md->sha512.curlen < 128) { + md->sha512.buf[md->sha512.curlen++] = (unsigned char)0; + } + sha512_compress(md, md->sha512.buf); + md->sha512.curlen = 0; + } + + /* pad upto 120 bytes of zeroes + * note: that from 112 to 120 is the 64 MSB of the length. We assume that you won't hash + * > 2^64 bits of data... :-) + */ + while (md->sha512.curlen < 120) { + md->sha512.buf[md->sha512.curlen++] = (unsigned char)0; + } + + /* store length */ + STORE64H(md->sha512.length, md->sha512.buf+120); + sha512_compress(md, md->sha512.buf); + + /* copy output */ + for (i = 0; i < 8; i++) { + STORE64H(md->sha512.state[i], hash+(8*i)); + } +#ifdef CLEAN_STACK + zeromem(md, sizeof(hash_state)); +#endif + return CRYPT_OK; +} + +int sha512_test(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + static const struct { + char *msg; + unsigned char hash[64]; + } tests[] = { + { "abc", + { 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, + 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, + 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, + 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a, + 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, + 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd, + 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, + 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f } + }, + { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", + { 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda, + 0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f, + 0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1, + 0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18, + 0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4, + 0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a, + 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54, + 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09 } + }, + }; + + int i; + unsigned char tmp[64]; + hash_state md; + + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { + sha512_init(&md); + sha512_process(&md, (unsigned char *)tests[i].msg, (unsigned long)strlen(tests[i].msg)); + sha512_done(&md, tmp); + if (memcmp(tmp, tests[i].hash, 64) != 0) { + return CRYPT_FAIL_TESTVECTOR; + } + } + return CRYPT_OK; + #endif +} + +#ifdef SHA384 + #include "sha384.c" +#endif + +#endif + + + diff --git a/src/ciphers/skipjack.c b/skipjack.c similarity index 63% rename from src/ciphers/skipjack.c rename to skipjack.c index 3146af40..a66efa1b 100644 --- a/src/ciphers/skipjack.c +++ b/skipjack.c @@ -1,15 +1,20 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ -/** - @file skipjack.c - Skipjack Implementation by Tom St Denis -*/ -#include "tomcrypt_private.h" +/* Skipjack Implementation by Tom St Denis */ +#include "mycrypt.h" -#ifdef LTC_SKIPJACK +#ifdef SKIPJACK -const struct ltc_cipher_descriptor skipjack_desc = +const struct _cipher_descriptor skipjack_desc = { "skipjack", 17, @@ -18,12 +23,9 @@ const struct ltc_cipher_descriptor skipjack_desc = &skipjack_ecb_encrypt, &skipjack_ecb_decrypt, &skipjack_test, - &skipjack_done, - &skipjack_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + &skipjack_keysize }; -#define sbox s_skipjack_sbox static const unsigned char sbox[256] = { 0xa3,0xd7,0x09,0x83,0xf8,0x48,0xf6,0xf4,0xb3,0x21,0x15,0x78,0x99,0xb1,0xaf,0xf9, 0xe7,0x2d,0x4d,0x8a,0xce,0x4c,0xca,0x2e,0x52,0x95,0xd9,0x1e,0x4e,0x38,0x44,0x28, @@ -49,26 +51,18 @@ static const int keystep[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; /* simple x - 1 (mod 10) in one step */ static const int ikeystep[] = { 9, 0, 1, 2, 3, 4, 5, 6, 7, 8 }; - /** - Initialize the Skipjack block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ int skipjack_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { int x; - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); if (keylen != 10) { return CRYPT_INVALID_KEYSIZE; } - if (num_rounds != 32 && num_rounds != 0) { + if (num_rounds != 32 && num_rounds != 0) { return CRYPT_INVALID_ROUNDS; } @@ -81,29 +75,28 @@ int skipjack_setup(const unsigned char *key, int keylen, int num_rounds, symmetr } #define RULE_A \ - tmp = g_func(w1, &kp, skey->skipjack.key); \ + tmp = g_func(w1, &kp, key->skipjack.key); \ w1 = tmp ^ w4 ^ x; \ w4 = w3; w3 = w2; \ w2 = tmp; #define RULE_B \ - tmp = g_func(w1, &kp, skey->skipjack.key); \ + tmp = g_func(w1, &kp, key->skipjack.key); \ tmp1 = w4; w4 = w3; \ w3 = w1 ^ w2 ^ x; \ w1 = tmp1; w2 = tmp; #define RULE_A1 \ tmp = w1 ^ w2 ^ x; \ - w1 = ig_func(w2, &kp, skey->skipjack.key); \ + w1 = ig_func(w2, &kp, key->skipjack.key); \ w2 = w3; w3 = w4; w4 = tmp; #define RULE_B1 \ - tmp = ig_func(w2, &kp, skey->skipjack.key); \ + tmp = ig_func(w2, &kp, key->skipjack.key); \ w2 = tmp ^ w3 ^ x; \ w3 = w4; w4 = w1; w1 = tmp; -#define g_func s_skipjack_g_func -static unsigned g_func(unsigned w, int *kp, const unsigned char *key) +static unsigned g_func(unsigned w, int *kp, unsigned char *key) { unsigned char g1,g2; @@ -115,8 +108,7 @@ static unsigned g_func(unsigned w, int *kp, const unsigned char *key) return ((unsigned)g1<<8)|(unsigned)g2; } -#define ig_func s_skipjack_ig_func -static unsigned ig_func(unsigned w, int *kp, const unsigned char *key) +static unsigned ig_func(unsigned w, int *kp, unsigned char *key) { unsigned char g1,g2; @@ -128,25 +120,18 @@ static unsigned ig_func(unsigned w, int *kp, const unsigned char *key) return ((unsigned)g1<<8)|(unsigned)g2; } -/** - Encrypts a block of text with Skipjack - @param pt The input plaintext (8 bytes) - @param ct The output ciphertext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -#ifdef LTC_CLEAN_STACK -static int s_skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +#ifdef CLEAN_STACK +static void _skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) #else -int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +void skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) #endif { unsigned w1,w2,w3,w4,tmp,tmp1; int x, kp; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(key != NULL); /* load block */ w1 = ((unsigned)pt[0]<<8)|pt[1]; @@ -179,38 +164,28 @@ int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symme ct[2] = (w2>>8)&255; ct[3] = w2&255; ct[4] = (w3>>8)&255; ct[5] = w3&255; ct[6] = (w4>>8)&255; ct[7] = w4&255; - - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +#ifdef CLEAN_STACK +void skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) { - int err = s_skipjack_ecb_encrypt(pt, ct, skey); + _skipjack_ecb_encrypt(pt, ct, key); burn_stack(sizeof(unsigned) * 8 + sizeof(int) * 2); - return err; } #endif -/** - Decrypts a block of text with Skipjack - @param ct The input ciphertext (8 bytes) - @param pt The output plaintext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -#ifdef LTC_CLEAN_STACK -static int s_skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +#ifdef CLEAN_STACK +static void _skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) #else -int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +void skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) #endif { unsigned w1,w2,w3,w4,tmp; int x, kp; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(key != NULL); /* load block */ w1 = ((unsigned)ct[0]<<8)|ct[1]; @@ -218,7 +193,7 @@ int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symme w3 = ((unsigned)ct[4]<<8)|ct[5]; w4 = ((unsigned)ct[6]<<8)|ct[7]; - /* 8 rounds of RULE B^-1 + /* 8 rounds of RULE B^-1 Note the value "kp = 8" comes from "kp = (32 * 4) mod 10" where 32*4 is 128 which mod 10 is 8 */ @@ -247,28 +222,21 @@ int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symme pt[2] = (w2>>8)&255; pt[3] = w2&255; pt[4] = (w3>>8)&255; pt[5] = w3&255; pt[6] = (w4>>8)&255; pt[7] = w4&255; - - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +#ifdef CLEAN_STACK +void skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) { - int err = s_skipjack_ecb_decrypt(ct, pt, skey); + _skipjack_ecb_decrypt(ct, pt, key); burn_stack(sizeof(unsigned) * 7 + sizeof(int) * 2); - return err; } #endif -/** - Performs a self-test of the Skipjack block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ int skipjack_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else static const struct { unsigned char key[10], pt[8], ct[8]; } tests[] = { @@ -293,8 +261,7 @@ int skipjack_test(void) skipjack_ecb_decrypt(buf[0], buf[1], &key); /* compare */ - if (ltc_compare_testvector(buf[0], 8, tests[x].ct, 8, "Skipjack Encrypt", x) != 0 || - ltc_compare_testvector(buf[1], 8, tests[x].pt, 8, "Skipjack Decrypt", x) != 0) { + if (memcmp(buf[0], tests[x].ct, 8) != 0 || memcmp(buf[1], tests[x].pt, 8) != 0) { return CRYPT_FAIL_TESTVECTOR; } @@ -309,37 +276,15 @@ int skipjack_test(void) #endif } -/** Terminate the context - @param skey The scheduled key -*/ -void skipjack_done(symmetric_key *skey) +int skipjack_keysize(int *desired_keysize) { - LTC_UNUSED_PARAM(skey); -} - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int skipjack_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize < 10) { + _ARGCHK(desired_keysize != NULL); + if (*desired_keysize < 10) { return CRYPT_INVALID_KEYSIZE; - } - if (*keysize > 10) { - *keysize = 10; + } else if (*desired_keysize > 10) { + *desired_keysize = 10; } return CRYPT_OK; } -#undef g_func -#undef ig_func -#undef RULE_A -#undef RULE_B -#undef RULE_A1 -#undef RULE_B1 -#undef sbox - #endif diff --git a/sources.cmake b/sources.cmake deleted file mode 100644 index 63d7e809..00000000 --- a/sources.cmake +++ /dev/null @@ -1,593 +0,0 @@ -set(SOURCES -src/ciphers/aes/aes.c -src/ciphers/aes/aes_desc.c -src/ciphers/aes/aes_tab.c -src/ciphers/aes/aesni.c -src/ciphers/anubis.c -src/ciphers/aria.c -src/ciphers/blowfish.c -src/ciphers/camellia.c -src/ciphers/cast5.c -src/ciphers/des.c -src/ciphers/idea.c -src/ciphers/kasumi.c -src/ciphers/khazad.c -src/ciphers/kseed.c -src/ciphers/multi2.c -src/ciphers/noekeon.c -src/ciphers/rc2.c -src/ciphers/rc5.c -src/ciphers/rc6.c -src/ciphers/safer/safer.c -src/ciphers/safer/safer_tab.c -src/ciphers/safer/saferp.c -src/ciphers/serpent.c -src/ciphers/skipjack.c -src/ciphers/sm4.c -src/ciphers/tea.c -src/ciphers/twofish/twofish.c -src/ciphers/twofish/twofish_tab.c -src/ciphers/xtea.c -src/encauth/ccm/ccm_add_aad.c -src/encauth/ccm/ccm_add_nonce.c -src/encauth/ccm/ccm_done.c -src/encauth/ccm/ccm_init.c -src/encauth/ccm/ccm_memory.c -src/encauth/ccm/ccm_process.c -src/encauth/ccm/ccm_reset.c -src/encauth/ccm/ccm_test.c -src/encauth/chachapoly/chacha20poly1305_add_aad.c -src/encauth/chachapoly/chacha20poly1305_decrypt.c -src/encauth/chachapoly/chacha20poly1305_done.c -src/encauth/chachapoly/chacha20poly1305_encrypt.c -src/encauth/chachapoly/chacha20poly1305_init.c -src/encauth/chachapoly/chacha20poly1305_memory.c -src/encauth/chachapoly/chacha20poly1305_setiv.c -src/encauth/chachapoly/chacha20poly1305_setiv_rfc7905.c -src/encauth/chachapoly/chacha20poly1305_test.c -src/encauth/eax/eax_addheader.c -src/encauth/eax/eax_decrypt.c -src/encauth/eax/eax_decrypt_verify_memory.c -src/encauth/eax/eax_done.c -src/encauth/eax/eax_encrypt.c -src/encauth/eax/eax_encrypt_authenticate_memory.c -src/encauth/eax/eax_init.c -src/encauth/eax/eax_test.c -src/encauth/gcm/gcm_add_aad.c -src/encauth/gcm/gcm_add_iv.c -src/encauth/gcm/gcm_done.c -src/encauth/gcm/gcm_gf_mult.c -src/encauth/gcm/gcm_init.c -src/encauth/gcm/gcm_memory.c -src/encauth/gcm/gcm_mult_h.c -src/encauth/gcm/gcm_process.c -src/encauth/gcm/gcm_reset.c -src/encauth/gcm/gcm_test.c -src/encauth/gcm_siv/gcm_siv.c -src/encauth/gcm_siv/gcm_siv_test.c -src/encauth/ocb3/ocb3_add_aad.c -src/encauth/ocb3/ocb3_decrypt.c -src/encauth/ocb3/ocb3_decrypt_last.c -src/encauth/ocb3/ocb3_decrypt_verify_memory.c -src/encauth/ocb3/ocb3_done.c -src/encauth/ocb3/ocb3_encrypt.c -src/encauth/ocb3/ocb3_encrypt_authenticate_memory.c -src/encauth/ocb3/ocb3_encrypt_last.c -src/encauth/ocb3/ocb3_init.c -src/encauth/ocb3/ocb3_int_ntz.c -src/encauth/ocb3/ocb3_int_xor_blocks.c -src/encauth/ocb3/ocb3_test.c -src/encauth/siv/siv.c -src/hashes/blake2b.c -src/hashes/blake2s.c -src/hashes/blake3.c -src/hashes/chc/chc.c -src/hashes/helper/hash_file.c -src/hashes/helper/hash_filehandle.c -src/hashes/helper/hash_memory.c -src/hashes/helper/hash_memory_multi.c -src/hashes/md2.c -src/hashes/md4.c -src/hashes/md5.c -src/hashes/rmd128.c -src/hashes/rmd160.c -src/hashes/rmd256.c -src/hashes/rmd320.c -src/hashes/sha1.c -src/hashes/sha1_desc.c -src/hashes/sha1_x86.c -src/hashes/sha2/sha224.c -src/hashes/sha2/sha224_desc.c -src/hashes/sha2/sha224_x86.c -src/hashes/sha2/sha256.c -src/hashes/sha2/sha256_desc.c -src/hashes/sha2/sha256_x86.c -src/hashes/sha2/sha384.c -src/hashes/sha2/sha384_desc.c -src/hashes/sha2/sha384_x86.c -src/hashes/sha2/sha512.c -src/hashes/sha2/sha512_224.c -src/hashes/sha2/sha512_224_desc.c -src/hashes/sha2/sha512_224_x86.c -src/hashes/sha2/sha512_256.c -src/hashes/sha2/sha512_256_desc.c -src/hashes/sha2/sha512_256_x86.c -src/hashes/sha2/sha512_desc.c -src/hashes/sha2/sha512_x86.c -src/hashes/sha3.c -src/hashes/sha3_test.c -src/hashes/sm3.c -src/hashes/tiger.c -src/hashes/whirl/whirl.c -src/hashes/whirl/whirltab.c -src/headers/tomcrypt.h -src/headers/tomcrypt_argchk.h -src/headers/tomcrypt_cfg.h -src/headers/tomcrypt_cipher.h -src/headers/tomcrypt_custom.h -src/headers/tomcrypt_hash.h -src/headers/tomcrypt_mac.h -src/headers/tomcrypt_macros.h -src/headers/tomcrypt_math.h -src/headers/tomcrypt_misc.h -src/headers/tomcrypt_pk.h -src/headers/tomcrypt_pkcs.h -src/headers/tomcrypt_private.h -src/headers/tomcrypt_prng.h -src/mac/blake2/blake2bmac.c -src/mac/blake2/blake2bmac_file.c -src/mac/blake2/blake2bmac_memory.c -src/mac/blake2/blake2bmac_memory_multi.c -src/mac/blake2/blake2bmac_test.c -src/mac/blake2/blake2smac.c -src/mac/blake2/blake2smac_file.c -src/mac/blake2/blake2smac_memory.c -src/mac/blake2/blake2smac_memory_multi.c -src/mac/blake2/blake2smac_test.c -src/mac/f9/f9_done.c -src/mac/f9/f9_file.c -src/mac/f9/f9_init.c -src/mac/f9/f9_memory.c -src/mac/f9/f9_memory_multi.c -src/mac/f9/f9_process.c -src/mac/f9/f9_test.c -src/mac/hmac/hmac_done.c -src/mac/hmac/hmac_file.c -src/mac/hmac/hmac_init.c -src/mac/hmac/hmac_memory.c -src/mac/hmac/hmac_memory_multi.c -src/mac/hmac/hmac_process.c -src/mac/hmac/hmac_test.c -src/mac/kmac/kmac.c -src/mac/kmac/kmac_file.c -src/mac/kmac/kmac_memory.c -src/mac/kmac/kmac_memory_multi.c -src/mac/kmac/kmac_test.c -src/mac/omac/omac_done.c -src/mac/omac/omac_file.c -src/mac/omac/omac_init.c -src/mac/omac/omac_memory.c -src/mac/omac/omac_memory_multi.c -src/mac/omac/omac_process.c -src/mac/omac/omac_test.c -src/mac/pelican/pelican.c -src/mac/pelican/pelican_memory.c -src/mac/pelican/pelican_test.c -src/mac/pmac/pmac_done.c -src/mac/pmac/pmac_file.c -src/mac/pmac/pmac_init.c -src/mac/pmac/pmac_memory.c -src/mac/pmac/pmac_memory_multi.c -src/mac/pmac/pmac_ntz.c -src/mac/pmac/pmac_process.c -src/mac/pmac/pmac_shift_xor.c -src/mac/pmac/pmac_test.c -src/mac/poly1305/poly1305.c -src/mac/poly1305/poly1305_file.c -src/mac/poly1305/poly1305_memory.c -src/mac/poly1305/poly1305_memory_multi.c -src/mac/poly1305/poly1305_test.c -src/mac/xcbc/xcbc_done.c -src/mac/xcbc/xcbc_file.c -src/mac/xcbc/xcbc_init.c -src/mac/xcbc/xcbc_memory.c -src/mac/xcbc/xcbc_memory_multi.c -src/mac/xcbc/xcbc_process.c -src/mac/xcbc/xcbc_test.c -src/math/fp/ltc_ecc_fp_mulmod.c -src/math/gmp_desc.c -src/math/ltm_desc.c -src/math/multi.c -src/math/radix_to_bin.c -src/math/rand_bn.c -src/math/rand_prime.c -src/math/tfm_desc.c -src/misc/adler32.c -src/misc/algname_match.c -src/misc/argon2/argon2.c -src/misc/base16/base16_decode.c -src/misc/base16/base16_encode.c -src/misc/base32/base32_decode.c -src/misc/base32/base32_encode.c -src/misc/base64/base64_decode.c -src/misc/base64/base64_encode.c -src/misc/bcrypt/bcrypt.c -src/misc/burn_stack.c -src/misc/compare_testvector.c -src/misc/copy_or_zeromem.c -src/misc/crc32.c -src/misc/crypt/crypt.c -src/misc/crypt/crypt_argchk.c -src/misc/crypt/crypt_cipher_descriptor.c -src/misc/crypt/crypt_cipher_is_valid.c -src/misc/crypt/crypt_constants.c -src/misc/crypt/crypt_find_cipher.c -src/misc/crypt/crypt_find_cipher_any.c -src/misc/crypt/crypt_find_cipher_id.c -src/misc/crypt/crypt_find_hash.c -src/misc/crypt/crypt_find_hash_any.c -src/misc/crypt/crypt_find_hash_id.c -src/misc/crypt/crypt_find_hash_oid.c -src/misc/crypt/crypt_find_prng.c -src/misc/crypt/crypt_fsa.c -src/misc/crypt/crypt_hash_descriptor.c -src/misc/crypt/crypt_hash_is_valid.c -src/misc/crypt/crypt_inits.c -src/misc/crypt/crypt_ltc_mp_descriptor.c -src/misc/crypt/crypt_prng_descriptor.c -src/misc/crypt/crypt_prng_is_valid.c -src/misc/crypt/crypt_prng_rng_descriptor.c -src/misc/crypt/crypt_register_all_ciphers.c -src/misc/crypt/crypt_register_all_hashes.c -src/misc/crypt/crypt_register_all_prngs.c -src/misc/crypt/crypt_register_cipher.c -src/misc/crypt/crypt_register_hash.c -src/misc/crypt/crypt_register_prng.c -src/misc/crypt/crypt_sizes.c -src/misc/crypt/crypt_unregister_cipher.c -src/misc/crypt/crypt_unregister_hash.c -src/misc/crypt/crypt_unregister_prng.c -src/misc/deprecated.c -src/misc/error_to_string.c -src/misc/hkdf/hkdf.c -src/misc/hkdf/hkdf_test.c -src/misc/mem_neq.c -src/misc/padding/padding_depad.c -src/misc/padding/padding_pad.c -src/misc/password_free.c -src/misc/pbes/pbes.c -src/misc/pbes/pbes1.c -src/misc/pbes/pbes2.c -src/misc/pem/pem.c -src/misc/pem/pem_pkcs.c -src/misc/pem/pem_read.c -src/misc/pem/pem_ssh.c -src/misc/pkcs12/pkcs12_kdf.c -src/misc/pkcs12/pkcs12_utf8_to_utf16.c -src/misc/pkcs5/pkcs_5_1.c -src/misc/pkcs5/pkcs_5_2.c -src/misc/pkcs5/pkcs_5_test.c -src/misc/scrypt/scrypt.c -src/misc/ssh/ssh_decode_sequence_multi.c -src/misc/ssh/ssh_encode_sequence_multi.c -src/misc/zeromem.c -src/modes/cbc/cbc_decrypt.c -src/modes/cbc/cbc_done.c -src/modes/cbc/cbc_encrypt.c -src/modes/cbc/cbc_getiv.c -src/modes/cbc/cbc_setiv.c -src/modes/cbc/cbc_start.c -src/modes/cfb/cfb_decrypt.c -src/modes/cfb/cfb_done.c -src/modes/cfb/cfb_encrypt.c -src/modes/cfb/cfb_getiv.c -src/modes/cfb/cfb_setiv.c -src/modes/cfb/cfb_start.c -src/modes/ctr/ctr_decrypt.c -src/modes/ctr/ctr_done.c -src/modes/ctr/ctr_encrypt.c -src/modes/ctr/ctr_getiv.c -src/modes/ctr/ctr_setiv.c -src/modes/ctr/ctr_start.c -src/modes/ctr/ctr_test.c -src/modes/ecb/ecb_decrypt.c -src/modes/ecb/ecb_done.c -src/modes/ecb/ecb_encrypt.c -src/modes/ecb/ecb_start.c -src/modes/f8/f8_decrypt.c -src/modes/f8/f8_done.c -src/modes/f8/f8_encrypt.c -src/modes/f8/f8_getiv.c -src/modes/f8/f8_setiv.c -src/modes/f8/f8_start.c -src/modes/f8/f8_test_mode.c -src/modes/lrw/lrw_decrypt.c -src/modes/lrw/lrw_done.c -src/modes/lrw/lrw_encrypt.c -src/modes/lrw/lrw_getiv.c -src/modes/lrw/lrw_process.c -src/modes/lrw/lrw_setiv.c -src/modes/lrw/lrw_start.c -src/modes/lrw/lrw_test.c -src/modes/ofb/ofb_decrypt.c -src/modes/ofb/ofb_done.c -src/modes/ofb/ofb_encrypt.c -src/modes/ofb/ofb_getiv.c -src/modes/ofb/ofb_setiv.c -src/modes/ofb/ofb_start.c -src/modes/xts/xts_decrypt.c -src/modes/xts/xts_done.c -src/modes/xts/xts_encrypt.c -src/modes/xts/xts_init.c -src/modes/xts/xts_mult_x.c -src/modes/xts/xts_test.c -src/pk/asn1/der/bit/der_decode_bit_string.c -src/pk/asn1/der/bit/der_decode_raw_bit_string.c -src/pk/asn1/der/bit/der_encode_bit_string.c -src/pk/asn1/der/bit/der_encode_raw_bit_string.c -src/pk/asn1/der/bit/der_length_bit_string.c -src/pk/asn1/der/boolean/der_decode_boolean.c -src/pk/asn1/der/boolean/der_encode_boolean.c -src/pk/asn1/der/boolean/der_length_boolean.c -src/pk/asn1/der/choice/der_decode_choice.c -src/pk/asn1/der/custom_type/der_decode_custom_type.c -src/pk/asn1/der/custom_type/der_encode_custom_type.c -src/pk/asn1/der/custom_type/der_length_custom_type.c -src/pk/asn1/der/general/der_asn1_maps.c -src/pk/asn1/der/general/der_decode_asn1_identifier.c -src/pk/asn1/der/general/der_decode_asn1_length.c -src/pk/asn1/der/general/der_encode_asn1_identifier.c -src/pk/asn1/der/general/der_encode_asn1_length.c -src/pk/asn1/der/general/der_length_asn1_identifier.c -src/pk/asn1/der/general/der_length_asn1_length.c -src/pk/asn1/der/generalizedtime/der_decode_generalizedtime.c -src/pk/asn1/der/generalizedtime/der_encode_generalizedtime.c -src/pk/asn1/der/generalizedtime/der_length_generalizedtime.c -src/pk/asn1/der/ia5/der_decode_ia5_string.c -src/pk/asn1/der/ia5/der_encode_ia5_string.c -src/pk/asn1/der/ia5/der_length_ia5_string.c -src/pk/asn1/der/integer/der_decode_integer.c -src/pk/asn1/der/integer/der_encode_integer.c -src/pk/asn1/der/integer/der_length_integer.c -src/pk/asn1/der/object_identifier/der_decode_object_identifier.c -src/pk/asn1/der/object_identifier/der_encode_object_identifier.c -src/pk/asn1/der/object_identifier/der_length_object_identifier.c -src/pk/asn1/der/octet/der_decode_octet_string.c -src/pk/asn1/der/octet/der_encode_octet_string.c -src/pk/asn1/der/octet/der_length_octet_string.c -src/pk/asn1/der/printable_string/der_decode_printable_string.c -src/pk/asn1/der/printable_string/der_encode_printable_string.c -src/pk/asn1/der/printable_string/der_length_printable_string.c -src/pk/asn1/der/sequence/der_decode_sequence_ex.c -src/pk/asn1/der/sequence/der_decode_sequence_flexi.c -src/pk/asn1/der/sequence/der_decode_sequence_multi.c -src/pk/asn1/der/sequence/der_encode_sequence_ex.c -src/pk/asn1/der/sequence/der_encode_sequence_multi.c -src/pk/asn1/der/sequence/der_flexi_sequence_cmp.c -src/pk/asn1/der/sequence/der_length_sequence.c -src/pk/asn1/der/sequence/der_sequence_free.c -src/pk/asn1/der/sequence/der_sequence_shrink.c -src/pk/asn1/der/set/der_encode_set.c -src/pk/asn1/der/set/der_encode_setof.c -src/pk/asn1/der/short_integer/der_decode_short_integer.c -src/pk/asn1/der/short_integer/der_encode_short_integer.c -src/pk/asn1/der/short_integer/der_length_short_integer.c -src/pk/asn1/der/teletex_string/der_decode_teletex_string.c -src/pk/asn1/der/teletex_string/der_length_teletex_string.c -src/pk/asn1/der/utctime/der_decode_utctime.c -src/pk/asn1/der/utctime/der_encode_utctime.c -src/pk/asn1/der/utctime/der_length_utctime.c -src/pk/asn1/der/utf8/der_decode_utf8_string.c -src/pk/asn1/der/utf8/der_encode_utf8_string.c -src/pk/asn1/der/utf8/der_length_utf8_string.c -src/pk/asn1/oid/pk_get.c -src/pk/asn1/oid/pk_oid_cmp.c -src/pk/asn1/oid/pk_oid_str.c -src/pk/asn1/pkcs8/pkcs8_decode_flexi.c -src/pk/asn1/pkcs8/pkcs8_get.c -src/pk/asn1/x509/x509_decode_public_key_from_certificate.c -src/pk/asn1/x509/x509_decode_spki.c -src/pk/asn1/x509/x509_decode_subject_public_key_info.c -src/pk/asn1/x509/x509_encode_subject_public_key_info.c -src/pk/asn1/x509/x509_get_pka.c -src/pk/asn1/x509/x509_import_spki.c -src/pk/dh/dh.c -src/pk/dh/dh_check_pubkey.c -src/pk/dh/dh_export.c -src/pk/dh/dh_export_key.c -src/pk/dh/dh_free.c -src/pk/dh/dh_generate_key.c -src/pk/dh/dh_import.c -src/pk/dh/dh_import_pkcs8.c -src/pk/dh/dh_set.c -src/pk/dh/dh_set_pg_dhparam.c -src/pk/dh/dh_shared_secret.c -src/pk/dsa/dsa_decrypt_key.c -src/pk/dsa/dsa_encrypt_key.c -src/pk/dsa/dsa_export.c -src/pk/dsa/dsa_free.c -src/pk/dsa/dsa_generate_key.c -src/pk/dsa/dsa_generate_pqg.c -src/pk/dsa/dsa_import.c -src/pk/dsa/dsa_import_pkcs8.c -src/pk/dsa/dsa_init.c -src/pk/dsa/dsa_make_key.c -src/pk/dsa/dsa_set.c -src/pk/dsa/dsa_set_pqg_dsaparam.c -src/pk/dsa/dsa_shared_secret.c -src/pk/dsa/dsa_sign_hash.c -src/pk/dsa/dsa_verify_hash.c -src/pk/dsa/dsa_verify_key.c -src/pk/ec25519/ec25519_crypto_ctx.c -src/pk/ec25519/ec25519_export.c -src/pk/ec25519/ec25519_import_pkcs8.c -src/pk/ec25519/tweetnacl.c -src/pk/ec448/ec448_common.c -src/pk/ec448/ec448_crypto_ctx.c -src/pk/ec448/ec448_export.c -src/pk/ec448/ec448_import_pkcs8.c -src/pk/ecc/ecc.c -src/pk/ecc/ecc_ansi_x963_export.c -src/pk/ecc/ecc_ansi_x963_import.c -src/pk/ecc/ecc_decrypt_key.c -src/pk/ecc/ecc_encrypt_key.c -src/pk/ecc/ecc_export.c -src/pk/ecc/ecc_export_openssl.c -src/pk/ecc/ecc_find_curve.c -src/pk/ecc/ecc_free.c -src/pk/ecc/ecc_get_key.c -src/pk/ecc/ecc_get_oid_str.c -src/pk/ecc/ecc_get_size.c -src/pk/ecc/ecc_import.c -src/pk/ecc/ecc_import_openssl.c -src/pk/ecc/ecc_import_pkcs8.c -src/pk/ecc/ecc_import_x509.c -src/pk/ecc/ecc_make_key.c -src/pk/ecc/ecc_recover_key.c -src/pk/ecc/ecc_rfc6979_key.c -src/pk/ecc/ecc_set_curve.c -src/pk/ecc/ecc_set_curve_internal.c -src/pk/ecc/ecc_set_key.c -src/pk/ecc/ecc_shared_secret.c -src/pk/ecc/ecc_sign_hash.c -src/pk/ecc/ecc_sign_hash_eth27.c -src/pk/ecc/ecc_sign_hash_internal.c -src/pk/ecc/ecc_sign_hash_rfc5656.c -src/pk/ecc/ecc_sign_hash_rfc7518.c -src/pk/ecc/ecc_sign_hash_x962.c -src/pk/ecc/ecc_sizes.c -src/pk/ecc/ecc_ssh_ecdsa_encode_name.c -src/pk/ecc/ecc_verify_hash.c -src/pk/ecc/ecc_verify_hash_eth27.c -src/pk/ecc/ecc_verify_hash_internal.c -src/pk/ecc/ecc_verify_hash_rfc5656.c -src/pk/ecc/ecc_verify_hash_rfc7518.c -src/pk/ecc/ecc_verify_hash_x962.c -src/pk/ecc/ltc_ecc_export_point.c -src/pk/ecc/ltc_ecc_import_point.c -src/pk/ecc/ltc_ecc_is_point.c -src/pk/ecc/ltc_ecc_is_point_at_infinity.c -src/pk/ecc/ltc_ecc_map.c -src/pk/ecc/ltc_ecc_mul2add.c -src/pk/ecc/ltc_ecc_mulmod.c -src/pk/ecc/ltc_ecc_mulmod_timing.c -src/pk/ecc/ltc_ecc_points.c -src/pk/ecc/ltc_ecc_projective_add_point.c -src/pk/ecc/ltc_ecc_projective_dbl_point.c -src/pk/ecc/ltc_ecc_verify_key.c -src/pk/ed25519/ed25519_export.c -src/pk/ed25519/ed25519_import.c -src/pk/ed25519/ed25519_import_pkcs8.c -src/pk/ed25519/ed25519_import_raw.c -src/pk/ed25519/ed25519_import_x509.c -src/pk/ed25519/ed25519_make_key.c -src/pk/ed25519/ed25519_sign.c -src/pk/ed25519/ed25519_verify.c -src/pk/ed448/ed448_export.c -src/pk/ed448/ed448_import.c -src/pk/ed448/ed448_import_pkcs8.c -src/pk/ed448/ed448_import_raw.c -src/pk/ed448/ed448_import_x509.c -src/pk/ed448/ed448_make_key.c -src/pk/ed448/ed448_sign.c -src/pk/ed448/ed448_verify.c -src/pk/pka_key.c -src/pk/pkcs1/pkcs_1_i2osp.c -src/pk/pkcs1/pkcs_1_mgf1.c -src/pk/pkcs1/pkcs_1_oaep_decode.c -src/pk/pkcs1/pkcs_1_oaep_encode.c -src/pk/pkcs1/pkcs_1_os2ip.c -src/pk/pkcs1/pkcs_1_pss_decode.c -src/pk/pkcs1/pkcs_1_pss_encode.c -src/pk/pkcs1/pkcs_1_v1_5_decode.c -src/pk/pkcs1/pkcs_1_v1_5_encode.c -src/pk/rsa/rsa_decrypt_key.c -src/pk/rsa/rsa_encrypt_key.c -src/pk/rsa/rsa_export.c -src/pk/rsa/rsa_exptmod.c -src/pk/rsa/rsa_get_size.c -src/pk/rsa/rsa_import.c -src/pk/rsa/rsa_import_pkcs8.c -src/pk/rsa/rsa_import_x509.c -src/pk/rsa/rsa_key.c -src/pk/rsa/rsa_make_key.c -src/pk/rsa/rsa_set.c -src/pk/rsa/rsa_sign_hash.c -src/pk/rsa/rsa_sign_saltlen_get.c -src/pk/rsa/rsa_verify_hash.c -src/pk/x25519/x25519_export.c -src/pk/x25519/x25519_import.c -src/pk/x25519/x25519_import_pkcs8.c -src/pk/x25519/x25519_import_raw.c -src/pk/x25519/x25519_import_x509.c -src/pk/x25519/x25519_make_key.c -src/pk/x25519/x25519_shared_secret.c -src/pk/x448/x448_export.c -src/pk/x448/x448_import.c -src/pk/x448/x448_import_pkcs8.c -src/pk/x448/x448_import_raw.c -src/pk/x448/x448_import_x509.c -src/pk/x448/x448_make_key.c -src/pk/x448/x448_shared_secret.c -src/prngs/chacha20.c -src/prngs/fortuna.c -src/prngs/rc4.c -src/prngs/rng_get_bytes.c -src/prngs/rng_make_prng.c -src/prngs/sober128.c -src/prngs/sprng.c -src/prngs/yarrow.c -src/stream/chacha/chacha_crypt.c -src/stream/chacha/chacha_done.c -src/stream/chacha/chacha_ivctr32.c -src/stream/chacha/chacha_ivctr64.c -src/stream/chacha/chacha_keystream.c -src/stream/chacha/chacha_memory.c -src/stream/chacha/chacha_setup.c -src/stream/chacha/chacha_test.c -src/stream/chacha/xchacha20_memory.c -src/stream/chacha/xchacha20_setup.c -src/stream/chacha/xchacha20_test.c -src/stream/rabbit/rabbit.c -src/stream/rabbit/rabbit_memory.c -src/stream/rc4/rc4_stream.c -src/stream/rc4/rc4_stream_memory.c -src/stream/rc4/rc4_test.c -src/stream/salsa20/salsa20_crypt.c -src/stream/salsa20/salsa20_done.c -src/stream/salsa20/salsa20_ivctr64.c -src/stream/salsa20/salsa20_keystream.c -src/stream/salsa20/salsa20_memory.c -src/stream/salsa20/salsa20_setup.c -src/stream/salsa20/salsa20_test.c -src/stream/salsa20/xsalsa20_memory.c -src/stream/salsa20/xsalsa20_setup.c -src/stream/salsa20/xsalsa20_test.c -src/stream/sober128/sober128_stream.c -src/stream/sober128/sober128_stream_memory.c -src/stream/sober128/sober128_test.c -src/stream/sober128/sober128tab.c -src/stream/sosemanuk/sosemanuk.c -src/stream/sosemanuk/sosemanuk_memory.c -src/stream/sosemanuk/sosemanuk_test.c -) - -set(PUBLIC_HEADERS -src/headers/tomcrypt.h -src/headers/tomcrypt_argchk.h -src/headers/tomcrypt_cfg.h -src/headers/tomcrypt_cipher.h -src/headers/tomcrypt_custom.h -src/headers/tomcrypt_hash.h -src/headers/tomcrypt_mac.h -src/headers/tomcrypt_macros.h -src/headers/tomcrypt_math.h -src/headers/tomcrypt_misc.h -src/headers/tomcrypt_pk.h -src/headers/tomcrypt_pkcs.h -src/headers/tomcrypt_prng.h -) - -set(PRIVATE_HEADERS src/headers/tomcrypt_private.h) -set_property(GLOBAL PROPERTY PUBLIC_HEADERS ${PUBLIC_HEADERS}) - diff --git a/sprng.c b/sprng.c new file mode 100644 index 00000000..f1de4616 --- /dev/null +++ b/sprng.c @@ -0,0 +1,75 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* A secure PRNG using the RNG functions. Basically this is a + * wrapper that allows you to use a secure RNG as a PRNG + * in the various other functions. + */ +#include "mycrypt.h" + +#ifdef SPRNG + +const struct _prng_descriptor sprng_desc = +{ + "sprng", + &sprng_start, + &sprng_add_entropy, + &sprng_ready, + &sprng_read, + &sprng_done, + &sprng_export, + &sprng_import + +}; + +int sprng_start(prng_state *prng) +{ + return CRYPT_OK; +} + +int sprng_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng) +{ + return CRYPT_OK; +} + +int sprng_ready(prng_state *prng) +{ + return CRYPT_OK; +} + +unsigned long sprng_read(unsigned char *buf, unsigned long len, prng_state *prng) +{ + _ARGCHK(buf != NULL); + return rng_get_bytes(buf, len, NULL); +} + +void sprng_done(prng_state *prng) +{ + _ARGCHK(prng != NULL); +} + +int sprng_export(unsigned char *out, unsigned long *outlen, prng_state *prng) +{ + _ARGCHK(outlen != NULL); + + *outlen = 0; + return CRYPT_OK; +} + +int sprng_import(const unsigned char *in, unsigned long inlen, prng_state *prng) +{ + return CRYPT_OK; +} + +#endif + + + diff --git a/src/ciphers/aes/aes.c b/src/ciphers/aes/aes.c deleted file mode 100644 index 103fb1c0..00000000 --- a/src/ciphers/aes/aes.c +++ /dev/null @@ -1,742 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* AES implementation by Tom St Denis - * - * Derived from the Public Domain source code by - ---- - * rijndael-alg-fst.c - * - * @version 3.0 (December 2000) - * - * Optimised ANSI C code for the Rijndael cipher (now AES) - * - * @author Vincent Rijmen - * @author Antoon Bosselaers - * @author Paulo Barreto ---- - */ -/** - @file aes.c - Implementation of AES -*/ - -#include "tomcrypt_private.h" - -#ifdef LTC_RIJNDAEL - -#ifndef ENCRYPT_ONLY - -#define SETUP rijndael_setup -#define ECB_ENC rijndael_ecb_encrypt -#define ECB_DEC rijndael_ecb_decrypt -#define ECB_DONE rijndael_done -#define ECB_TEST rijndael_test -#define ECB_KS rijndael_keysize - -const struct ltc_cipher_descriptor rijndael_desc = -{ - "rijndael", - 6, - 16, 32, 16, 10, - SETUP, ECB_ENC, ECB_DEC, ECB_TEST, ECB_DONE, ECB_KS, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -#else - -#define SETUP rijndael_enc_setup -#define ECB_ENC rijndael_enc_ecb_encrypt -#define ECB_KS rijndael_enc_keysize -#define ECB_DONE rijndael_enc_done - -const struct ltc_cipher_descriptor rijndael_enc_desc = -{ - "rijndael", - 6, - 16, 32, 16, 10, - SETUP, ECB_ENC, NULL, NULL, ECB_DONE, ECB_KS, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -#endif - -#ifndef LTC_AES_TAB_C -#define LTC_AES_TAB_C -#include "aes_tab.c" -#endif - -#define setup_mix rijndael_setup_mix - -#ifndef RIJNDAEL_SETUP_MIX -#define RIJNDAEL_SETUP_MIX -static ulong32 setup_mix(ulong32 temp) -{ - return (Te4_3[LTC_BYTE(temp, 2)]) ^ - (Te4_2[LTC_BYTE(temp, 1)]) ^ - (Te4_1[LTC_BYTE(temp, 0)]) ^ - (Te4_0[LTC_BYTE(temp, 3)]); -} -#endif /* RIJNDAEL_SETUP_MIX */ - -#if !defined(ENCRYPT_ONLY) && defined(LTC_SMALL_CODE) -static ulong32 setup_mix2(ulong32 temp) -{ - return Td0(255 & Te4[LTC_BYTE(temp, 3)]) ^ - Td1(255 & Te4[LTC_BYTE(temp, 2)]) ^ - Td2(255 & Te4[LTC_BYTE(temp, 1)]) ^ - Td3(255 & Te4[LTC_BYTE(temp, 0)]); -} -#endif - - /** - Initialize the AES (Rijndael) block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ -int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - int i; - ulong32 temp, *rk, *K; -#ifndef ENCRYPT_ONLY - ulong32 *rrk; -#endif - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - - if (keylen != 16 && keylen != 24 && keylen != 32) { - return CRYPT_INVALID_KEYSIZE; - } - - if (num_rounds != 0 && num_rounds != (10 + ((keylen/8)-2)*2)) { - return CRYPT_INVALID_ROUNDS; - } - - skey->rijndael.Nr = 10 + ((keylen/8)-2)*2; - K = LTC_ALIGN_BUF(skey->rijndael.K, 16); - skey->rijndael.eK = K; - K += 60; - skey->rijndael.dK = K; - - /* setup the forward key */ - i = 0; - rk = skey->rijndael.eK; - LOAD32H(rk[0], key ); - LOAD32H(rk[1], key + 4); - LOAD32H(rk[2], key + 8); - LOAD32H(rk[3], key + 12); - if (keylen == 16) { - for (;;) { - temp = rk[3]; - rk[4] = rk[0] ^ setup_mix(temp) ^ rcon[i]; - rk[5] = rk[1] ^ rk[4]; - rk[6] = rk[2] ^ rk[5]; - rk[7] = rk[3] ^ rk[6]; - if (++i == 10) { - break; - } - rk += 4; - } - } else if (keylen == 24) { - LOAD32H(rk[4], key + 16); - LOAD32H(rk[5], key + 20); - for (;;) { - #ifdef _MSC_VER - temp = skey->rijndael.eK[rk - skey->rijndael.eK + 5]; - #else - temp = rk[5]; - #endif - rk[ 6] = rk[ 0] ^ setup_mix(temp) ^ rcon[i]; - rk[ 7] = rk[ 1] ^ rk[ 6]; - rk[ 8] = rk[ 2] ^ rk[ 7]; - rk[ 9] = rk[ 3] ^ rk[ 8]; - if (++i == 8) { - break; - } - rk[10] = rk[ 4] ^ rk[ 9]; - rk[11] = rk[ 5] ^ rk[10]; - rk += 6; - } - } else if (keylen == 32) { - LOAD32H(rk[4], key + 16); - LOAD32H(rk[5], key + 20); - LOAD32H(rk[6], key + 24); - LOAD32H(rk[7], key + 28); - for (;;) { - #ifdef _MSC_VER - temp = skey->rijndael.eK[rk - skey->rijndael.eK + 7]; - #else - temp = rk[7]; - #endif - rk[ 8] = rk[ 0] ^ setup_mix(temp) ^ rcon[i]; - rk[ 9] = rk[ 1] ^ rk[ 8]; - rk[10] = rk[ 2] ^ rk[ 9]; - rk[11] = rk[ 3] ^ rk[10]; - if (++i == 7) { - break; - } - temp = rk[11]; - rk[12] = rk[ 4] ^ setup_mix(RORc(temp, 8)); - rk[13] = rk[ 5] ^ rk[12]; - rk[14] = rk[ 6] ^ rk[13]; - rk[15] = rk[ 7] ^ rk[14]; - rk += 8; - } - } else { - /* this can't happen */ - /* coverity[dead_error_line] */ - return CRYPT_ERROR; - } - -#ifndef ENCRYPT_ONLY - /* setup the inverse key now */ - rk = skey->rijndael.dK; - rrk = skey->rijndael.eK + (28 + keylen) - 4; - - /* apply the inverse MixColumn transform to all round keys but the first and the last: */ - /* copy first */ - *rk++ = *rrk++; - *rk++ = *rrk++; - *rk++ = *rrk++; - *rk = *rrk; - rk -= 3; rrk -= 3; - - for (i = 1; i < skey->rijndael.Nr; i++) { - rrk -= 4; - rk += 4; - #ifdef LTC_SMALL_CODE - temp = rrk[0]; - rk[0] = setup_mix2(temp); - temp = rrk[1]; - rk[1] = setup_mix2(temp); - temp = rrk[2]; - rk[2] = setup_mix2(temp); - temp = rrk[3]; - rk[3] = setup_mix2(temp); - #else - temp = rrk[0]; - rk[0] = - Tks0[LTC_BYTE(temp, 3)] ^ - Tks1[LTC_BYTE(temp, 2)] ^ - Tks2[LTC_BYTE(temp, 1)] ^ - Tks3[LTC_BYTE(temp, 0)]; - temp = rrk[1]; - rk[1] = - Tks0[LTC_BYTE(temp, 3)] ^ - Tks1[LTC_BYTE(temp, 2)] ^ - Tks2[LTC_BYTE(temp, 1)] ^ - Tks3[LTC_BYTE(temp, 0)]; - temp = rrk[2]; - rk[2] = - Tks0[LTC_BYTE(temp, 3)] ^ - Tks1[LTC_BYTE(temp, 2)] ^ - Tks2[LTC_BYTE(temp, 1)] ^ - Tks3[LTC_BYTE(temp, 0)]; - temp = rrk[3]; - rk[3] = - Tks0[LTC_BYTE(temp, 3)] ^ - Tks1[LTC_BYTE(temp, 2)] ^ - Tks2[LTC_BYTE(temp, 1)] ^ - Tks3[LTC_BYTE(temp, 0)]; - #endif - - } - - /* copy last */ - rrk -= 4; - rk += 4; - *rk++ = *rrk++; - *rk++ = *rrk++; - *rk++ = *rrk++; - *rk = *rrk; -#endif /* ENCRYPT_ONLY */ - - return CRYPT_OK; -} - -/** - Encrypts a block of text with AES - @param pt The input plaintext (16 bytes) - @param ct The output ciphertext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -#ifdef LTC_CLEAN_STACK -static int s_rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -#else -int ECB_ENC(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -#endif -{ - ulong32 s0, s1, s2, s3, t0, t1, t2, t3; - const ulong32 *rk; - int Nr, r; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - Nr = skey->rijndael.Nr; - - if (Nr < 2 || Nr > 16) - return CRYPT_INVALID_ROUNDS; - - rk = skey->rijndael.eK; - - /* - * map byte array block to cipher state - * and add initial round key: - */ - LOAD32H(s0, pt ); s0 ^= rk[0]; - LOAD32H(s1, pt + 4); s1 ^= rk[1]; - LOAD32H(s2, pt + 8); s2 ^= rk[2]; - LOAD32H(s3, pt + 12); s3 ^= rk[3]; - -#ifdef LTC_SMALL_CODE - - for (r = 0; ; r++) { - rk += 4; - t0 = - Te0(LTC_BYTE(s0, 3)) ^ - Te1(LTC_BYTE(s1, 2)) ^ - Te2(LTC_BYTE(s2, 1)) ^ - Te3(LTC_BYTE(s3, 0)) ^ - rk[0]; - t1 = - Te0(LTC_BYTE(s1, 3)) ^ - Te1(LTC_BYTE(s2, 2)) ^ - Te2(LTC_BYTE(s3, 1)) ^ - Te3(LTC_BYTE(s0, 0)) ^ - rk[1]; - t2 = - Te0(LTC_BYTE(s2, 3)) ^ - Te1(LTC_BYTE(s3, 2)) ^ - Te2(LTC_BYTE(s0, 1)) ^ - Te3(LTC_BYTE(s1, 0)) ^ - rk[2]; - t3 = - Te0(LTC_BYTE(s3, 3)) ^ - Te1(LTC_BYTE(s0, 2)) ^ - Te2(LTC_BYTE(s1, 1)) ^ - Te3(LTC_BYTE(s2, 0)) ^ - rk[3]; - if (r == Nr-2) { - break; - } - s0 = t0; s1 = t1; s2 = t2; s3 = t3; - } - rk += 4; - -#else - - /* - * Nr - 1 full rounds: - */ - r = Nr >> 1; - for (;;) { - t0 = - Te0(LTC_BYTE(s0, 3)) ^ - Te1(LTC_BYTE(s1, 2)) ^ - Te2(LTC_BYTE(s2, 1)) ^ - Te3(LTC_BYTE(s3, 0)) ^ - rk[4]; - t1 = - Te0(LTC_BYTE(s1, 3)) ^ - Te1(LTC_BYTE(s2, 2)) ^ - Te2(LTC_BYTE(s3, 1)) ^ - Te3(LTC_BYTE(s0, 0)) ^ - rk[5]; - t2 = - Te0(LTC_BYTE(s2, 3)) ^ - Te1(LTC_BYTE(s3, 2)) ^ - Te2(LTC_BYTE(s0, 1)) ^ - Te3(LTC_BYTE(s1, 0)) ^ - rk[6]; - t3 = - Te0(LTC_BYTE(s3, 3)) ^ - Te1(LTC_BYTE(s0, 2)) ^ - Te2(LTC_BYTE(s1, 1)) ^ - Te3(LTC_BYTE(s2, 0)) ^ - rk[7]; - - rk += 8; - if (--r == 0) { - break; - } - - s0 = - Te0(LTC_BYTE(t0, 3)) ^ - Te1(LTC_BYTE(t1, 2)) ^ - Te2(LTC_BYTE(t2, 1)) ^ - Te3(LTC_BYTE(t3, 0)) ^ - rk[0]; - s1 = - Te0(LTC_BYTE(t1, 3)) ^ - Te1(LTC_BYTE(t2, 2)) ^ - Te2(LTC_BYTE(t3, 1)) ^ - Te3(LTC_BYTE(t0, 0)) ^ - rk[1]; - s2 = - Te0(LTC_BYTE(t2, 3)) ^ - Te1(LTC_BYTE(t3, 2)) ^ - Te2(LTC_BYTE(t0, 1)) ^ - Te3(LTC_BYTE(t1, 0)) ^ - rk[2]; - s3 = - Te0(LTC_BYTE(t3, 3)) ^ - Te1(LTC_BYTE(t0, 2)) ^ - Te2(LTC_BYTE(t1, 1)) ^ - Te3(LTC_BYTE(t2, 0)) ^ - rk[3]; - } - -#endif - - /* - * apply last round and - * map cipher state to byte array block: - */ - s0 = - (Te4_3[LTC_BYTE(t0, 3)]) ^ - (Te4_2[LTC_BYTE(t1, 2)]) ^ - (Te4_1[LTC_BYTE(t2, 1)]) ^ - (Te4_0[LTC_BYTE(t3, 0)]) ^ - rk[0]; - STORE32H(s0, ct); - s1 = - (Te4_3[LTC_BYTE(t1, 3)]) ^ - (Te4_2[LTC_BYTE(t2, 2)]) ^ - (Te4_1[LTC_BYTE(t3, 1)]) ^ - (Te4_0[LTC_BYTE(t0, 0)]) ^ - rk[1]; - STORE32H(s1, ct+4); - s2 = - (Te4_3[LTC_BYTE(t2, 3)]) ^ - (Te4_2[LTC_BYTE(t3, 2)]) ^ - (Te4_1[LTC_BYTE(t0, 1)]) ^ - (Te4_0[LTC_BYTE(t1, 0)]) ^ - rk[2]; - STORE32H(s2, ct+8); - s3 = - (Te4_3[LTC_BYTE(t3, 3)]) ^ - (Te4_2[LTC_BYTE(t0, 2)]) ^ - (Te4_1[LTC_BYTE(t1, 1)]) ^ - (Te4_0[LTC_BYTE(t2, 0)]) ^ - rk[3]; - STORE32H(s3, ct+12); - - return CRYPT_OK; -} - -#ifdef LTC_CLEAN_STACK -int ECB_ENC(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - int err = s_rijndael_ecb_encrypt(pt, ct, skey); - burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2); - return err; -} -#endif - -#ifndef ENCRYPT_ONLY - -/** - Decrypts a block of text with AES - @param ct The input ciphertext (16 bytes) - @param pt The output plaintext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -#ifdef LTC_CLEAN_STACK -static int s_rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -#else -int ECB_DEC(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -#endif -{ - ulong32 s0, s1, s2, s3, t0, t1, t2, t3; - const ulong32 *rk; - int Nr, r; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - Nr = skey->rijndael.Nr; - - if (Nr < 2 || Nr > 16) - return CRYPT_INVALID_ROUNDS; - - rk = skey->rijndael.dK; - - /* - * map byte array block to cipher state - * and add initial round key: - */ - LOAD32H(s0, ct ); s0 ^= rk[0]; - LOAD32H(s1, ct + 4); s1 ^= rk[1]; - LOAD32H(s2, ct + 8); s2 ^= rk[2]; - LOAD32H(s3, ct + 12); s3 ^= rk[3]; - -#ifdef LTC_SMALL_CODE - for (r = 0; ; r++) { - rk += 4; - t0 = - Td0(LTC_BYTE(s0, 3)) ^ - Td1(LTC_BYTE(s3, 2)) ^ - Td2(LTC_BYTE(s2, 1)) ^ - Td3(LTC_BYTE(s1, 0)) ^ - rk[0]; - t1 = - Td0(LTC_BYTE(s1, 3)) ^ - Td1(LTC_BYTE(s0, 2)) ^ - Td2(LTC_BYTE(s3, 1)) ^ - Td3(LTC_BYTE(s2, 0)) ^ - rk[1]; - t2 = - Td0(LTC_BYTE(s2, 3)) ^ - Td1(LTC_BYTE(s1, 2)) ^ - Td2(LTC_BYTE(s0, 1)) ^ - Td3(LTC_BYTE(s3, 0)) ^ - rk[2]; - t3 = - Td0(LTC_BYTE(s3, 3)) ^ - Td1(LTC_BYTE(s2, 2)) ^ - Td2(LTC_BYTE(s1, 1)) ^ - Td3(LTC_BYTE(s0, 0)) ^ - rk[3]; - if (r == Nr-2) { - break; - } - s0 = t0; s1 = t1; s2 = t2; s3 = t3; - } - rk += 4; - -#else - - /* - * Nr - 1 full rounds: - */ - r = Nr >> 1; - for (;;) { - - t0 = - Td0(LTC_BYTE(s0, 3)) ^ - Td1(LTC_BYTE(s3, 2)) ^ - Td2(LTC_BYTE(s2, 1)) ^ - Td3(LTC_BYTE(s1, 0)) ^ - rk[4]; - t1 = - Td0(LTC_BYTE(s1, 3)) ^ - Td1(LTC_BYTE(s0, 2)) ^ - Td2(LTC_BYTE(s3, 1)) ^ - Td3(LTC_BYTE(s2, 0)) ^ - rk[5]; - t2 = - Td0(LTC_BYTE(s2, 3)) ^ - Td1(LTC_BYTE(s1, 2)) ^ - Td2(LTC_BYTE(s0, 1)) ^ - Td3(LTC_BYTE(s3, 0)) ^ - rk[6]; - t3 = - Td0(LTC_BYTE(s3, 3)) ^ - Td1(LTC_BYTE(s2, 2)) ^ - Td2(LTC_BYTE(s1, 1)) ^ - Td3(LTC_BYTE(s0, 0)) ^ - rk[7]; - - rk += 8; - if (--r == 0) { - break; - } - - - s0 = - Td0(LTC_BYTE(t0, 3)) ^ - Td1(LTC_BYTE(t3, 2)) ^ - Td2(LTC_BYTE(t2, 1)) ^ - Td3(LTC_BYTE(t1, 0)) ^ - rk[0]; - s1 = - Td0(LTC_BYTE(t1, 3)) ^ - Td1(LTC_BYTE(t0, 2)) ^ - Td2(LTC_BYTE(t3, 1)) ^ - Td3(LTC_BYTE(t2, 0)) ^ - rk[1]; - s2 = - Td0(LTC_BYTE(t2, 3)) ^ - Td1(LTC_BYTE(t1, 2)) ^ - Td2(LTC_BYTE(t0, 1)) ^ - Td3(LTC_BYTE(t3, 0)) ^ - rk[2]; - s3 = - Td0(LTC_BYTE(t3, 3)) ^ - Td1(LTC_BYTE(t2, 2)) ^ - Td2(LTC_BYTE(t1, 1)) ^ - Td3(LTC_BYTE(t0, 0)) ^ - rk[3]; - } -#endif - - /* - * apply last round and - * map cipher state to byte array block: - */ - s0 = - (Td4[LTC_BYTE(t0, 3)] & 0xff000000) ^ - (Td4[LTC_BYTE(t3, 2)] & 0x00ff0000) ^ - (Td4[LTC_BYTE(t2, 1)] & 0x0000ff00) ^ - (Td4[LTC_BYTE(t1, 0)] & 0x000000ff) ^ - rk[0]; - STORE32H(s0, pt); - s1 = - (Td4[LTC_BYTE(t1, 3)] & 0xff000000) ^ - (Td4[LTC_BYTE(t0, 2)] & 0x00ff0000) ^ - (Td4[LTC_BYTE(t3, 1)] & 0x0000ff00) ^ - (Td4[LTC_BYTE(t2, 0)] & 0x000000ff) ^ - rk[1]; - STORE32H(s1, pt+4); - s2 = - (Td4[LTC_BYTE(t2, 3)] & 0xff000000) ^ - (Td4[LTC_BYTE(t1, 2)] & 0x00ff0000) ^ - (Td4[LTC_BYTE(t0, 1)] & 0x0000ff00) ^ - (Td4[LTC_BYTE(t3, 0)] & 0x000000ff) ^ - rk[2]; - STORE32H(s2, pt+8); - s3 = - (Td4[LTC_BYTE(t3, 3)] & 0xff000000) ^ - (Td4[LTC_BYTE(t2, 2)] & 0x00ff0000) ^ - (Td4[LTC_BYTE(t1, 1)] & 0x0000ff00) ^ - (Td4[LTC_BYTE(t0, 0)] & 0x000000ff) ^ - rk[3]; - STORE32H(s3, pt+12); - - return CRYPT_OK; -} - - -#ifdef LTC_CLEAN_STACK -int ECB_DEC(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - int err = s_rijndael_ecb_decrypt(ct, pt, skey); - burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2); - return err; -} -#endif - -/** - Performs a self-test of the AES block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ -int ECB_TEST(void) -{ - #ifndef LTC_TEST - return CRYPT_NOP; - #else - int err; - static const struct { - int keylen; - unsigned char key[32], pt[16], ct[16]; - } tests[] = { - { 16, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, - { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, - 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a } - }, { - 24, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 }, - { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, - { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0, - 0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 } - }, { - 32, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }, - { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, - { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf, - 0xea, 0xfc, 0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 } - } - }; - - symmetric_key key; - unsigned char tmp[2][16]; - int i, y; - - for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) { - zeromem(&key, sizeof(key)); - if ((err = rijndael_setup(tests[i].key, tests[i].keylen, 0, &key)) != CRYPT_OK) { - return err; - } - - rijndael_ecb_encrypt(tests[i].pt, tmp[0], &key); - rijndael_ecb_decrypt(tmp[0], tmp[1], &key); - if (ltc_compare_testvector(tmp[0], 16, tests[i].ct, 16, "AES Encrypt", i) || - ltc_compare_testvector(tmp[1], 16, tests[i].pt, 16, "AES Decrypt", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ - for (y = 0; y < 16; y++) tmp[0][y] = 0; - for (y = 0; y < 1000; y++) rijndael_ecb_encrypt(tmp[0], tmp[0], &key); - for (y = 0; y < 1000; y++) rijndael_ecb_decrypt(tmp[0], tmp[0], &key); - for (y = 0; y < 16; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; - } - return CRYPT_OK; - #endif -} - -#endif /* ENCRYPT_ONLY */ - - -/** Terminate the context - @param skey The scheduled key -*/ -void ECB_DONE(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int ECB_KS(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - - if (*keysize < 16) { - return CRYPT_INVALID_KEYSIZE; - } - if (*keysize < 24) { - *keysize = 16; - return CRYPT_OK; - } - if (*keysize < 32) { - *keysize = 24; - return CRYPT_OK; - } - *keysize = 32; - return CRYPT_OK; -} - -#undef setup_mix -#undef SETUP -#undef ECB_ENC -#undef ECB_DEC -#undef ECB_DONE -#undef ECB_TEST -#undef ECB_KS - -#endif diff --git a/src/ciphers/aes/aes_desc.c b/src/ciphers/aes/aes_desc.c deleted file mode 100644 index 700431e4..00000000 --- a/src/ciphers/aes/aes_desc.c +++ /dev/null @@ -1,287 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* Auto-detection of AES implementation by Steffen Jaeckel */ -/** - @file aes_desc.c - Run-time detection of correct AES implementation -*/ - -#include "tomcrypt_private.h" - -#if defined(LTC_ARCH_X86) && (defined(LTC_AES_NI) || !defined(ENCRYPT_ONLY)) - -#if defined(_MSC_VER) -#include -#endif - -#if !defined (LTC_S_X86_CPUID) -#define LTC_S_X86_CPUID -static LTC_INLINE void s_x86_cpuid(int* regs, int leaf) -{ -#if defined _MSC_VER - __cpuid(regs, leaf); -#else - int a, b, c, d; - - a = leaf; - b = c = d = 0; - __asm__ volatile ("cpuid" - :"=a"(a), "=b"(b), "=c"(c), "=d"(d) - :"a"(a), "c"(c) - ); - regs[0] = a; - regs[1] = b; - regs[2] = c; - regs[3] = d; -#endif -} -#endif /* LTC_S_X86_CPUID */ - -#if !defined (LTC_S_AESNI_IS_SUPPORTED) -#define LTC_S_AESNI_IS_SUPPORTED -static LTC_INLINE int s_aesni_is_supported(void) -{ - static int initialized = 0, is_supported = 0; - - if (initialized == 0) { - /* Look for CPUID.1.0.ECX[19] (SSE4.1) and CPUID.1.0.ECX[25] (AES-NI) - * EAX = 1, ECX = 0 - */ - int regs[4]; - s_x86_cpuid(regs, 1); - is_supported = ((regs[2] >> 19) & 1) && ((regs[2] >> 25) & 1); - initialized = 1; - } - - return is_supported; -} -#endif /* LTC_S_AESNI_IS_SUPPORTED */ -#endif /* LTC_ARCH_X86 */ - -#ifndef ENCRYPT_ONLY -int aesni_is_supported(void) -{ -#if defined(LTC_ARCH_X86) - return s_aesni_is_supported(); -#else - return 0; -#endif -} -#endif /* ENCRYPT_ONLY */ - -#if defined(LTC_RIJNDAEL) - -#ifndef ENCRYPT_ONLY - -#define AES_SETUP aes_setup -#define AES_ENC aes_ecb_encrypt -#define AES_DEC aes_ecb_decrypt -#define AES_DONE aes_done -#define AES_TEST aes_test -#define AES_KS aes_keysize - -const struct ltc_cipher_descriptor aes_desc = -{ - "aes", - 6, - 16, 32, 16, 10, - AES_SETUP, AES_ENC, AES_DEC, AES_TEST, AES_DONE, AES_KS, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -#else - -#define AES_SETUP aes_enc_setup -#define AES_ENC aes_enc_ecb_encrypt -#define AES_DONE aes_enc_done -#define AES_TEST aes_enc_test -#define AES_KS aes_enc_keysize - -const struct ltc_cipher_descriptor aes_enc_desc = -{ - "aes", - 6, - 16, 32, 16, 10, - AES_SETUP, AES_ENC, NULL, NULL, AES_DONE, AES_KS, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -#endif - - /** - Initialize the AES (Rijndael) block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ -int AES_SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ -#ifdef LTC_AES_NI - if (s_aesni_is_supported()) { - return aesni_setup(key, keylen, num_rounds, skey); - } -#endif - /* Last resort, software AES */ - return rijndael_setup(key, keylen, num_rounds, skey); -} - -/** - Encrypts a block of text with AES - @param pt The input plaintext (16 bytes) - @param ct The output ciphertext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int AES_ENC(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ -#ifdef LTC_AES_NI - if (s_aesni_is_supported()) { - return aesni_ecb_encrypt(pt, ct, skey); - } -#endif - return rijndael_ecb_encrypt(pt, ct, skey); -} - - -#ifndef ENCRYPT_ONLY -/** - Decrypts a block of text with AES - @param ct The input ciphertext (16 bytes) - @param pt The output plaintext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int AES_DEC(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ -#ifdef LTC_AES_NI - if (s_aesni_is_supported()) { - return aesni_ecb_decrypt(ct, pt, skey); - } -#endif - return rijndael_ecb_decrypt(ct, pt, skey); -} -#endif /* ENCRYPT_ONLY */ - -/** - Performs a self-test of the AES block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ -int AES_TEST(void) -{ - #ifndef LTC_TEST - return CRYPT_NOP; - #else - int err; - static const struct { - int keylen; - unsigned char key[32], pt[16], ct[16]; - } tests[] = { - { 16, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, - { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, - 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a } - }, { - 24, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 }, - { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, - { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0, - 0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 } - }, { - 32, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }, - { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, - { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf, - 0xea, 0xfc, 0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 } - } - }; - - symmetric_key key; - unsigned char tmp[2][16]; - int i; -#ifndef ENCRYPT_ONLY - int y; -#endif - - for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) { - zeromem(&key, sizeof(key)); - if ((err = AES_SETUP(tests[i].key, tests[i].keylen, 0, &key)) != CRYPT_OK) { - return err; - } - - AES_ENC(tests[i].pt, tmp[0], &key); - if (ltc_compare_testvector(tmp[0], 16, tests[i].ct, 16, "AES Encrypt", i)) { - return CRYPT_FAIL_TESTVECTOR; - } -#ifndef ENCRYPT_ONLY - AES_DEC(tmp[0], tmp[1], &key); - if (ltc_compare_testvector(tmp[1], 16, tests[i].pt, 16, "AES Decrypt", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ - for (y = 0; y < 16; y++) tmp[0][y] = 0; - for (y = 0; y < 1000; y++) AES_ENC(tmp[0], tmp[0], &key); - for (y = 0; y < 1000; y++) AES_DEC(tmp[0], tmp[0], &key); - for (y = 0; y < 16; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; -#endif - } - return CRYPT_OK; - #endif -} - - -/** Terminate the context - @param skey The scheduled key -*/ -void AES_DONE(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int AES_KS(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - - if (*keysize < 16) { - return CRYPT_INVALID_KEYSIZE; - } - if (*keysize < 24) { - *keysize = 16; - return CRYPT_OK; - } - if (*keysize < 32) { - *keysize = 24; - return CRYPT_OK; - } - *keysize = 32; - return CRYPT_OK; -} - -#endif - -#undef AES_SETUP -#undef AES_ENC -#undef AES_DEC -#undef AES_DONE -#undef AES_TEST -#undef AES_KS - diff --git a/src/ciphers/aes/aesni.c b/src/ciphers/aes/aesni.c deleted file mode 100644 index beb51ccb..00000000 --- a/src/ciphers/aes/aesni.c +++ /dev/null @@ -1,387 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* AES-NI implementation by Steffen Jaeckel */ -/** - @file aesni.c - Implementation of AES via the AES-NI instruction on x86_64 -*/ - -#include "tomcrypt_private.h" - -#if defined(LTC_AES_NI) - -const struct ltc_cipher_descriptor aesni_desc = -{ - "aes", - 6, - 16, 32, 16, 10, - aesni_setup, aesni_ecb_encrypt, aesni_ecb_decrypt, aesni_test, aesni_done, aesni_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -#if defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wcast-align" -#pragma GCC diagnostic ignored "-Wdeclaration-after-statement" -#endif -#include -#include -#include -#if defined(__GNUC__) -#pragma GCC diagnostic pop -#endif - -#define aesni_setup_mix(t, c) _mm_extract_epi32(_mm_aeskeygenassist_si128(t, 0), c) -#define temp_load(k) _mm_loadu_si128((__m128i*)(k)) -#define temp_update(t, k) _mm_insert_epi32(t, k, 3) -#define temp_invert(k) _mm_aesimc_si128(*((__m128i*)(k))) - -#define rcon aesni_rcon -static const ulong32 rcon[] = { - 0x01UL, 0x02UL, 0x04UL, 0x08UL, 0x10UL, 0x20UL, 0x40UL, 0x80UL, 0x1BUL, 0x36UL -}; - - /** - Initialize the AES (Rijndael) block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ -LTC_ATTRIBUTE((__target__("aes,sse4.1"))) -int aesni_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - int i; - __m128i temp; - ulong32 *rk, *K; - ulong32 *rrk; - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - - if (keylen != 16 && keylen != 24 && keylen != 32) { - return CRYPT_INVALID_KEYSIZE; - } - - if (num_rounds != 0 && num_rounds != (keylen / 4 + 6)) { - return CRYPT_INVALID_ROUNDS; - } - - skey->rijndael.Nr = keylen / 4 + 6; - K = LTC_ALIGN_BUF(skey->rijndael.K, 16); - skey->rijndael.eK = K; - K += 60; - skey->rijndael.dK = K; - - /* setup the forward key */ - i = 0; - rk = skey->rijndael.eK; - LOAD32L(rk[0], key); - LOAD32L(rk[1], key + 4); - LOAD32L(rk[2], key + 8); - LOAD32L(rk[3], key + 12); - if (keylen == 16) { - temp = temp_load(key); - for (;;) { - rk[4] = rk[0] ^ aesni_setup_mix(temp, 3) ^ rcon[i]; - rk[5] = rk[1] ^ rk[4]; - rk[6] = rk[2] ^ rk[5]; - rk[7] = rk[3] ^ rk[6]; - if (++i == 10) { - break; - } - temp = temp_update(temp, rk[7]); - rk += 4; - } - } else if (keylen == 24) { - LOAD32L(rk[4], key + 16); - LOAD32L(rk[5], key + 20); - temp = temp_load(key + 8); - for (;;) { - rk[6] = rk[0] ^ aesni_setup_mix(temp, 3) ^ rcon[i]; - rk[7] = rk[1] ^ rk[6]; - rk[8] = rk[2] ^ rk[7]; - rk[9] = rk[3] ^ rk[8]; - if (++i == 8) { - break; - } - rk[10] = rk[4] ^ rk[9]; - rk[11] = rk[5] ^ rk[10]; - temp = temp_update(temp, rk[11]); - rk += 6; - } - } else if (keylen == 32) { - LOAD32L(rk[4], key + 16); - LOAD32L(rk[5], key + 20); - LOAD32L(rk[6], key + 24); - LOAD32L(rk[7], key + 28); - temp = temp_load(key + 16); - for (;;) { - rk[8] = rk[0] ^ aesni_setup_mix(temp, 3) ^ rcon[i]; - rk[9] = rk[1] ^ rk[8]; - rk[10] = rk[2] ^ rk[9]; - rk[11] = rk[3] ^ rk[10]; - if (++i == 7) { - break; - } - temp = temp_update(temp, rk[11]); - rk[12] = rk[4] ^ aesni_setup_mix(temp, 2); - rk[13] = rk[5] ^ rk[12]; - rk[14] = rk[6] ^ rk[13]; - rk[15] = rk[7] ^ rk[14]; - temp = temp_update(temp, rk[15]); - rk += 8; - } - } else { - /* this can't happen */ - /* coverity[dead_error_line] */ - return CRYPT_ERROR; - } - - /* setup the inverse key now */ - rk = skey->rijndael.dK; - rrk = skey->rijndael.eK + skey->rijndael.Nr * 4; - - /* apply the inverse MixColumn transform to all round keys but the first and the last: */ - /* copy first */ - *rk++ = *rrk++; - *rk++ = *rrk++; - *rk++ = *rrk++; - *rk = *rrk; - rk -= 3; - rrk -= 3; - - for (i = 1; i < skey->rijndael.Nr; i++) { - rrk -= 4; - rk += 4; - *((__m128i*) rk) = temp_invert(rrk); - } - - /* copy last */ - rrk -= 4; - rk += 4; - *rk++ = *rrk++; - *rk++ = *rrk++; - *rk++ = *rrk++; - *rk = *rrk; - - return CRYPT_OK; -} - -/** - Encrypts a block of text with AES - @param pt The input plaintext (16 bytes) - @param ct The output ciphertext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -LTC_ATTRIBUTE((__target__("aes"))) -#ifdef LTC_CLEAN_STACK -static int s_aesni_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -#else -int aesni_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -#endif -{ - int Nr, r; - const __m128i *skeys; - __m128i block; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - Nr = skey->rijndael.Nr; - - if (Nr < 2 || Nr > 16) return CRYPT_INVALID_ROUNDS; - - skeys = (__m128i*) skey->rijndael.eK; - block = _mm_loadu_si128((const __m128i*) (pt)); - - block = _mm_xor_si128(block, skeys[0]); - for (r = 1; r < Nr - 1; r += 2) { - block = _mm_aesenc_si128(block, skeys[r]); - block = _mm_aesenc_si128(block, skeys[r + 1]); - } - block = _mm_aesenc_si128(block, skeys[Nr - 1]); - block = _mm_aesenclast_si128(block, skeys[Nr]); - - _mm_storeu_si128((__m128i*) ct, block); - - return CRYPT_OK; -} - -#ifdef LTC_CLEAN_STACK -int aesni_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - int err = s_aesni_ecb_encrypt(pt, ct, skey); - burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2); - return err; -} -#endif - - -/** - Decrypts a block of text with AES - @param ct The input ciphertext (16 bytes) - @param pt The output plaintext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -LTC_ATTRIBUTE((__target__("aes"))) -#ifdef LTC_CLEAN_STACK -static int s_aesni_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -#else -int aesni_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -#endif -{ - int Nr, r; - const __m128i *skeys; - __m128i block; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - Nr = skey->rijndael.Nr; - - if (Nr < 2 || Nr > 16) return CRYPT_INVALID_ROUNDS; - - skeys = (__m128i*) skey->rijndael.dK; - block = _mm_loadu_si128((const __m128i*) (ct)); - - block = _mm_xor_si128(block, skeys[0]); - for (r = 1; r < Nr - 1; r += 2) { - block = _mm_aesdec_si128(block, skeys[r]); - block = _mm_aesdec_si128(block, skeys[r + 1]); - } - block = _mm_aesdec_si128(block, skeys[Nr - 1]); - block = _mm_aesdeclast_si128(block, skeys[Nr]); - - _mm_storeu_si128((__m128i*) pt, block); - - return CRYPT_OK; -} - - -#ifdef LTC_CLEAN_STACK -int aesni_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - int err = s_aesni_ecb_decrypt(ct, pt, skey); - burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2); - return err; -} -#endif - -/** - Performs a self-test of the AES block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ -int aesni_test(void) -{ - #ifndef LTC_TEST - return CRYPT_NOP; - #else - int err; - static const struct { - int keylen; - unsigned char key[32], pt[16], ct[16]; - } tests[] = { - { 16, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, - { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, - 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a } - }, { - 24, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 }, - { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, - { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0, - 0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 } - }, { - 32, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }, - { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, - { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf, - 0xea, 0xfc, 0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 } - } - }; - - symmetric_key key; - unsigned char tmp[2][16]; - int i, y; - - for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) { - zeromem(&key, sizeof(key)); - if ((err = aesni_setup(tests[i].key, tests[i].keylen, 0, &key)) != CRYPT_OK) { - return err; - } - - aesni_ecb_encrypt(tests[i].pt, tmp[0], &key); - aesni_ecb_decrypt(tmp[0], tmp[1], &key); - if (ltc_compare_testvector(tmp[0], 16, tests[i].ct, 16, "AES-NI Encrypt", i) || - ltc_compare_testvector(tmp[1], 16, tests[i].pt, 16, "AES-NI Decrypt", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ - for (y = 0; y < 16; y++) tmp[0][y] = 0; - for (y = 0; y < 1000; y++) aesni_ecb_encrypt(tmp[0], tmp[0], &key); - for (y = 0; y < 1000; y++) aesni_ecb_decrypt(tmp[0], tmp[0], &key); - for (y = 0; y < 16; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; - } - return CRYPT_OK; - #endif -} - - -/** Terminate the context - @param skey The scheduled key -*/ -void aesni_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int aesni_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - - if (*keysize < 16) { - return CRYPT_INVALID_KEYSIZE; - } - if (*keysize < 24) { - *keysize = 16; - return CRYPT_OK; - } - if (*keysize < 32) { - *keysize = 24; - return CRYPT_OK; - } - *keysize = 32; - return CRYPT_OK; -} - -#undef aesni_setup_mix -#undef temp_load -#undef temp_update -#undef temp_invert -#undef rcon - -#endif - diff --git a/src/ciphers/anubis.c b/src/ciphers/anubis.c deleted file mode 100644 index f230e22f..00000000 --- a/src/ciphers/anubis.c +++ /dev/null @@ -1,1567 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file anubis.c - Anubis implementation derived from public domain source - Authors: Paulo S.L.M. Barreto and Vincent Rijmen. -*/ - -#include "tomcrypt_private.h" - -#ifdef LTC_ANUBIS - -const struct ltc_cipher_descriptor anubis_desc = { - "anubis", - 19, - 16, 40, 16, 12, - &anubis_setup, - &anubis_ecb_encrypt, - &anubis_ecb_decrypt, - &anubis_test, - &anubis_done, - &anubis_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -#define MAX_N 10 - - -#define T0 anubis_T0 -#define T1 anubis_T1 -#define T2 anubis_T2 -#define T3 anubis_T3 -#define T4 anubis_T4 -#define T5 anubis_T5 -#define rc anubis_rc -/* - * Though Anubis is endianness-neutral, the encryption tables are listed - * in BIG-ENDIAN format, which is adopted throughout this implementation - * (but little-endian notation would be equally suitable if consistently - * employed). - */ -#if defined(LTC_ANUBIS_TWEAK) - -static const ulong32 T0[256] = { - 0xba69d2bbU, 0x54a84de5U, 0x2f5ebce2U, 0x74e8cd25U, - 0x53a651f7U, 0xd3bb6bd0U, 0xd2b96fd6U, 0x4d9a29b3U, - 0x50a05dfdU, 0xac458acfU, 0x8d070e09U, 0xbf63c6a5U, - 0x70e0dd3dU, 0x52a455f1U, 0x9a29527bU, 0x4c982db5U, - 0xeac98f46U, 0xd5b773c4U, 0x97336655U, 0xd1bf63dcU, - 0x3366ccaaU, 0x51a259fbU, 0x5bb671c7U, 0xa651a2f3U, - 0xdea15ffeU, 0x48903dadU, 0xa84d9ad7U, 0x992f5e71U, - 0xdbab4be0U, 0x3264c8acU, 0xb773e695U, 0xfce5d732U, - 0xe3dbab70U, 0x9e214263U, 0x913f7e41U, 0x9b2b567dU, - 0xe2d9af76U, 0xbb6bd6bdU, 0x4182199bU, 0x6edca579U, - 0xa557aef9U, 0xcb8b0b80U, 0x6bd6b167U, 0x95376e59U, - 0xa15fbee1U, 0xf3fbeb10U, 0xb17ffe81U, 0x0204080cU, - 0xcc851792U, 0xc49537a2U, 0x1d3a744eU, 0x14285078U, - 0xc39b2bb0U, 0x63c69157U, 0xdaa94fe6U, 0x5dba69d3U, - 0x5fbe61dfU, 0xdca557f2U, 0x7dfae913U, 0xcd871394U, - 0x7ffee11fU, 0x5ab475c1U, 0x6cd8ad75U, 0x5cb86dd5U, - 0xf7f3fb08U, 0x264c98d4U, 0xffe3db38U, 0xedc79354U, - 0xe8cd874aU, 0x9d274e69U, 0x6fdea17fU, 0x8e010203U, - 0x19326456U, 0xa05dbae7U, 0xf0fde71aU, 0x890f1e11U, - 0x0f1e3c22U, 0x070e1c12U, 0xaf4386c5U, 0xfbebcb20U, - 0x08102030U, 0x152a547eU, 0x0d1a342eU, 0x04081018U, - 0x01020406U, 0x64c88d45U, 0xdfa35bf8U, 0x76ecc529U, - 0x79f2f90bU, 0xdda753f4U, 0x3d7af48eU, 0x162c5874U, - 0x3f7efc82U, 0x376edcb2U, 0x6ddaa973U, 0x3870e090U, - 0xb96fdeb1U, 0x73e6d137U, 0xe9cf834cU, 0x356ad4beU, - 0x55aa49e3U, 0x71e2d93bU, 0x7bf6f107U, 0x8c050a0fU, - 0x72e4d531U, 0x880d1a17U, 0xf6f1ff0eU, 0x2a54a8fcU, - 0x3e7cf884U, 0x5ebc65d9U, 0x274e9cd2U, 0x468c0589U, - 0x0c183028U, 0x65ca8943U, 0x68d0bd6dU, 0x61c2995bU, - 0x03060c0aU, 0xc19f23bcU, 0x57ae41efU, 0xd6b17fceU, - 0xd9af43ecU, 0x58b07dcdU, 0xd8ad47eaU, 0x66cc8549U, - 0xd7b37bc8U, 0x3a74e89cU, 0xc88d078aU, 0x3c78f088U, - 0xfae9cf26U, 0x96316253U, 0xa753a6f5U, 0x982d5a77U, - 0xecc59752U, 0xb86ddab7U, 0xc7933ba8U, 0xae4182c3U, - 0x69d2b96bU, 0x4b9631a7U, 0xab4b96ddU, 0xa94f9ed1U, - 0x67ce814fU, 0x0a14283cU, 0x478e018fU, 0xf2f9ef16U, - 0xb577ee99U, 0x224488ccU, 0xe5d7b364U, 0xeec19f5eU, - 0xbe61c2a3U, 0x2b56acfaU, 0x811f3e21U, 0x1224486cU, - 0x831b362dU, 0x1b366c5aU, 0x0e1c3824U, 0x23468ccaU, - 0xf5f7f304U, 0x458a0983U, 0x214284c6U, 0xce811f9eU, - 0x499239abU, 0x2c58b0e8U, 0xf9efc32cU, 0xe6d1bf6eU, - 0xb671e293U, 0x2850a0f0U, 0x172e5c72U, 0x8219322bU, - 0x1a34685cU, 0x8b0b161dU, 0xfee1df3eU, 0x8a09121bU, - 0x09122436U, 0xc98f038cU, 0x87132635U, 0x4e9c25b9U, - 0xe1dfa37cU, 0x2e5cb8e4U, 0xe4d5b762U, 0xe0dda77aU, - 0xebcb8b40U, 0x903d7a47U, 0xa455aaffU, 0x1e3c7844U, - 0x85172e39U, 0x60c09d5dU, 0x00000000U, 0x254a94deU, - 0xf4f5f702U, 0xf1ffe31cU, 0x94356a5fU, 0x0b162c3aU, - 0xe7d3bb68U, 0x75eac923U, 0xefc39b58U, 0x3468d0b8U, - 0x3162c4a6U, 0xd4b577c2U, 0xd0bd67daU, 0x86112233U, - 0x7efce519U, 0xad478ec9U, 0xfde7d334U, 0x2952a4f6U, - 0x3060c0a0U, 0x3b76ec9aU, 0x9f234665U, 0xf8edc72aU, - 0xc6913faeU, 0x13264c6aU, 0x060c1814U, 0x050a141eU, - 0xc59733a4U, 0x11224466U, 0x77eec12fU, 0x7cf8ed15U, - 0x7af4f501U, 0x78f0fd0dU, 0x366cd8b4U, 0x1c387048U, - 0x3972e496U, 0x59b279cbU, 0x18306050U, 0x56ac45e9U, - 0xb37bf68dU, 0xb07dfa87U, 0x244890d8U, 0x204080c0U, - 0xb279f28bU, 0x9239724bU, 0xa35bb6edU, 0xc09d27baU, - 0x44880d85U, 0x62c49551U, 0x10204060U, 0xb475ea9fU, - 0x84152a3fU, 0x43861197U, 0x933b764dU, 0xc2992fb6U, - 0x4a9435a1U, 0xbd67cea9U, 0x8f030605U, 0x2d5ab4eeU, - 0xbc65caafU, 0x9c254a6fU, 0x6ad4b561U, 0x40801d9dU, - 0xcf831b98U, 0xa259b2ebU, 0x801d3a27U, 0x4f9e21bfU, - 0x1f3e7c42U, 0xca890f86U, 0xaa4992dbU, 0x42841591U, -}; - -static const ulong32 T1[256] = { - 0x69babbd2U, 0xa854e54dU, 0x5e2fe2bcU, 0xe87425cdU, - 0xa653f751U, 0xbbd3d06bU, 0xb9d2d66fU, 0x9a4db329U, - 0xa050fd5dU, 0x45accf8aU, 0x078d090eU, 0x63bfa5c6U, - 0xe0703dddU, 0xa452f155U, 0x299a7b52U, 0x984cb52dU, - 0xc9ea468fU, 0xb7d5c473U, 0x33975566U, 0xbfd1dc63U, - 0x6633aaccU, 0xa251fb59U, 0xb65bc771U, 0x51a6f3a2U, - 0xa1defe5fU, 0x9048ad3dU, 0x4da8d79aU, 0x2f99715eU, - 0xabdbe04bU, 0x6432acc8U, 0x73b795e6U, 0xe5fc32d7U, - 0xdbe370abU, 0x219e6342U, 0x3f91417eU, 0x2b9b7d56U, - 0xd9e276afU, 0x6bbbbdd6U, 0x82419b19U, 0xdc6e79a5U, - 0x57a5f9aeU, 0x8bcb800bU, 0xd66b67b1U, 0x3795596eU, - 0x5fa1e1beU, 0xfbf310ebU, 0x7fb181feU, 0x04020c08U, - 0x85cc9217U, 0x95c4a237U, 0x3a1d4e74U, 0x28147850U, - 0x9bc3b02bU, 0xc6635791U, 0xa9dae64fU, 0xba5dd369U, - 0xbe5fdf61U, 0xa5dcf257U, 0xfa7d13e9U, 0x87cd9413U, - 0xfe7f1fe1U, 0xb45ac175U, 0xd86c75adU, 0xb85cd56dU, - 0xf3f708fbU, 0x4c26d498U, 0xe3ff38dbU, 0xc7ed5493U, - 0xcde84a87U, 0x279d694eU, 0xde6f7fa1U, 0x018e0302U, - 0x32195664U, 0x5da0e7baU, 0xfdf01ae7U, 0x0f89111eU, - 0x1e0f223cU, 0x0e07121cU, 0x43afc586U, 0xebfb20cbU, - 0x10083020U, 0x2a157e54U, 0x1a0d2e34U, 0x08041810U, - 0x02010604U, 0xc864458dU, 0xa3dff85bU, 0xec7629c5U, - 0xf2790bf9U, 0xa7ddf453U, 0x7a3d8ef4U, 0x2c167458U, - 0x7e3f82fcU, 0x6e37b2dcU, 0xda6d73a9U, 0x703890e0U, - 0x6fb9b1deU, 0xe67337d1U, 0xcfe94c83U, 0x6a35bed4U, - 0xaa55e349U, 0xe2713bd9U, 0xf67b07f1U, 0x058c0f0aU, - 0xe47231d5U, 0x0d88171aU, 0xf1f60effU, 0x542afca8U, - 0x7c3e84f8U, 0xbc5ed965U, 0x4e27d29cU, 0x8c468905U, - 0x180c2830U, 0xca654389U, 0xd0686dbdU, 0xc2615b99U, - 0x06030a0cU, 0x9fc1bc23U, 0xae57ef41U, 0xb1d6ce7fU, - 0xafd9ec43U, 0xb058cd7dU, 0xadd8ea47U, 0xcc664985U, - 0xb3d7c87bU, 0x743a9ce8U, 0x8dc88a07U, 0x783c88f0U, - 0xe9fa26cfU, 0x31965362U, 0x53a7f5a6U, 0x2d98775aU, - 0xc5ec5297U, 0x6db8b7daU, 0x93c7a83bU, 0x41aec382U, - 0xd2696bb9U, 0x964ba731U, 0x4babdd96U, 0x4fa9d19eU, - 0xce674f81U, 0x140a3c28U, 0x8e478f01U, 0xf9f216efU, - 0x77b599eeU, 0x4422cc88U, 0xd7e564b3U, 0xc1ee5e9fU, - 0x61bea3c2U, 0x562bfaacU, 0x1f81213eU, 0x24126c48U, - 0x1b832d36U, 0x361b5a6cU, 0x1c0e2438U, 0x4623ca8cU, - 0xf7f504f3U, 0x8a458309U, 0x4221c684U, 0x81ce9e1fU, - 0x9249ab39U, 0x582ce8b0U, 0xeff92cc3U, 0xd1e66ebfU, - 0x71b693e2U, 0x5028f0a0U, 0x2e17725cU, 0x19822b32U, - 0x341a5c68U, 0x0b8b1d16U, 0xe1fe3edfU, 0x098a1b12U, - 0x12093624U, 0x8fc98c03U, 0x13873526U, 0x9c4eb925U, - 0xdfe17ca3U, 0x5c2ee4b8U, 0xd5e462b7U, 0xdde07aa7U, - 0xcbeb408bU, 0x3d90477aU, 0x55a4ffaaU, 0x3c1e4478U, - 0x1785392eU, 0xc0605d9dU, 0x00000000U, 0x4a25de94U, - 0xf5f402f7U, 0xfff11ce3U, 0x35945f6aU, 0x160b3a2cU, - 0xd3e768bbU, 0xea7523c9U, 0xc3ef589bU, 0x6834b8d0U, - 0x6231a6c4U, 0xb5d4c277U, 0xbdd0da67U, 0x11863322U, - 0xfc7e19e5U, 0x47adc98eU, 0xe7fd34d3U, 0x5229f6a4U, - 0x6030a0c0U, 0x763b9aecU, 0x239f6546U, 0xedf82ac7U, - 0x91c6ae3fU, 0x26136a4cU, 0x0c061418U, 0x0a051e14U, - 0x97c5a433U, 0x22116644U, 0xee772fc1U, 0xf87c15edU, - 0xf47a01f5U, 0xf0780dfdU, 0x6c36b4d8U, 0x381c4870U, - 0x723996e4U, 0xb259cb79U, 0x30185060U, 0xac56e945U, - 0x7bb38df6U, 0x7db087faU, 0x4824d890U, 0x4020c080U, - 0x79b28bf2U, 0x39924b72U, 0x5ba3edb6U, 0x9dc0ba27U, - 0x8844850dU, 0xc4625195U, 0x20106040U, 0x75b49feaU, - 0x15843f2aU, 0x86439711U, 0x3b934d76U, 0x99c2b62fU, - 0x944aa135U, 0x67bda9ceU, 0x038f0506U, 0x5a2deeb4U, - 0x65bcafcaU, 0x259c6f4aU, 0xd46a61b5U, 0x80409d1dU, - 0x83cf981bU, 0x59a2ebb2U, 0x1d80273aU, 0x9e4fbf21U, - 0x3e1f427cU, 0x89ca860fU, 0x49aadb92U, 0x84429115U, -}; - -static const ulong32 T2[256] = { - 0xd2bbba69U, 0x4de554a8U, 0xbce22f5eU, 0xcd2574e8U, - 0x51f753a6U, 0x6bd0d3bbU, 0x6fd6d2b9U, 0x29b34d9aU, - 0x5dfd50a0U, 0x8acfac45U, 0x0e098d07U, 0xc6a5bf63U, - 0xdd3d70e0U, 0x55f152a4U, 0x527b9a29U, 0x2db54c98U, - 0x8f46eac9U, 0x73c4d5b7U, 0x66559733U, 0x63dcd1bfU, - 0xccaa3366U, 0x59fb51a2U, 0x71c75bb6U, 0xa2f3a651U, - 0x5ffedea1U, 0x3dad4890U, 0x9ad7a84dU, 0x5e71992fU, - 0x4be0dbabU, 0xc8ac3264U, 0xe695b773U, 0xd732fce5U, - 0xab70e3dbU, 0x42639e21U, 0x7e41913fU, 0x567d9b2bU, - 0xaf76e2d9U, 0xd6bdbb6bU, 0x199b4182U, 0xa5796edcU, - 0xaef9a557U, 0x0b80cb8bU, 0xb1676bd6U, 0x6e599537U, - 0xbee1a15fU, 0xeb10f3fbU, 0xfe81b17fU, 0x080c0204U, - 0x1792cc85U, 0x37a2c495U, 0x744e1d3aU, 0x50781428U, - 0x2bb0c39bU, 0x915763c6U, 0x4fe6daa9U, 0x69d35dbaU, - 0x61df5fbeU, 0x57f2dca5U, 0xe9137dfaU, 0x1394cd87U, - 0xe11f7ffeU, 0x75c15ab4U, 0xad756cd8U, 0x6dd55cb8U, - 0xfb08f7f3U, 0x98d4264cU, 0xdb38ffe3U, 0x9354edc7U, - 0x874ae8cdU, 0x4e699d27U, 0xa17f6fdeU, 0x02038e01U, - 0x64561932U, 0xbae7a05dU, 0xe71af0fdU, 0x1e11890fU, - 0x3c220f1eU, 0x1c12070eU, 0x86c5af43U, 0xcb20fbebU, - 0x20300810U, 0x547e152aU, 0x342e0d1aU, 0x10180408U, - 0x04060102U, 0x8d4564c8U, 0x5bf8dfa3U, 0xc52976ecU, - 0xf90b79f2U, 0x53f4dda7U, 0xf48e3d7aU, 0x5874162cU, - 0xfc823f7eU, 0xdcb2376eU, 0xa9736ddaU, 0xe0903870U, - 0xdeb1b96fU, 0xd13773e6U, 0x834ce9cfU, 0xd4be356aU, - 0x49e355aaU, 0xd93b71e2U, 0xf1077bf6U, 0x0a0f8c05U, - 0xd53172e4U, 0x1a17880dU, 0xff0ef6f1U, 0xa8fc2a54U, - 0xf8843e7cU, 0x65d95ebcU, 0x9cd2274eU, 0x0589468cU, - 0x30280c18U, 0x894365caU, 0xbd6d68d0U, 0x995b61c2U, - 0x0c0a0306U, 0x23bcc19fU, 0x41ef57aeU, 0x7fced6b1U, - 0x43ecd9afU, 0x7dcd58b0U, 0x47ead8adU, 0x854966ccU, - 0x7bc8d7b3U, 0xe89c3a74U, 0x078ac88dU, 0xf0883c78U, - 0xcf26fae9U, 0x62539631U, 0xa6f5a753U, 0x5a77982dU, - 0x9752ecc5U, 0xdab7b86dU, 0x3ba8c793U, 0x82c3ae41U, - 0xb96b69d2U, 0x31a74b96U, 0x96ddab4bU, 0x9ed1a94fU, - 0x814f67ceU, 0x283c0a14U, 0x018f478eU, 0xef16f2f9U, - 0xee99b577U, 0x88cc2244U, 0xb364e5d7U, 0x9f5eeec1U, - 0xc2a3be61U, 0xacfa2b56U, 0x3e21811fU, 0x486c1224U, - 0x362d831bU, 0x6c5a1b36U, 0x38240e1cU, 0x8cca2346U, - 0xf304f5f7U, 0x0983458aU, 0x84c62142U, 0x1f9ece81U, - 0x39ab4992U, 0xb0e82c58U, 0xc32cf9efU, 0xbf6ee6d1U, - 0xe293b671U, 0xa0f02850U, 0x5c72172eU, 0x322b8219U, - 0x685c1a34U, 0x161d8b0bU, 0xdf3efee1U, 0x121b8a09U, - 0x24360912U, 0x038cc98fU, 0x26358713U, 0x25b94e9cU, - 0xa37ce1dfU, 0xb8e42e5cU, 0xb762e4d5U, 0xa77ae0ddU, - 0x8b40ebcbU, 0x7a47903dU, 0xaaffa455U, 0x78441e3cU, - 0x2e398517U, 0x9d5d60c0U, 0x00000000U, 0x94de254aU, - 0xf702f4f5U, 0xe31cf1ffU, 0x6a5f9435U, 0x2c3a0b16U, - 0xbb68e7d3U, 0xc92375eaU, 0x9b58efc3U, 0xd0b83468U, - 0xc4a63162U, 0x77c2d4b5U, 0x67dad0bdU, 0x22338611U, - 0xe5197efcU, 0x8ec9ad47U, 0xd334fde7U, 0xa4f62952U, - 0xc0a03060U, 0xec9a3b76U, 0x46659f23U, 0xc72af8edU, - 0x3faec691U, 0x4c6a1326U, 0x1814060cU, 0x141e050aU, - 0x33a4c597U, 0x44661122U, 0xc12f77eeU, 0xed157cf8U, - 0xf5017af4U, 0xfd0d78f0U, 0xd8b4366cU, 0x70481c38U, - 0xe4963972U, 0x79cb59b2U, 0x60501830U, 0x45e956acU, - 0xf68db37bU, 0xfa87b07dU, 0x90d82448U, 0x80c02040U, - 0xf28bb279U, 0x724b9239U, 0xb6eda35bU, 0x27bac09dU, - 0x0d854488U, 0x955162c4U, 0x40601020U, 0xea9fb475U, - 0x2a3f8415U, 0x11974386U, 0x764d933bU, 0x2fb6c299U, - 0x35a14a94U, 0xcea9bd67U, 0x06058f03U, 0xb4ee2d5aU, - 0xcaafbc65U, 0x4a6f9c25U, 0xb5616ad4U, 0x1d9d4080U, - 0x1b98cf83U, 0xb2eba259U, 0x3a27801dU, 0x21bf4f9eU, - 0x7c421f3eU, 0x0f86ca89U, 0x92dbaa49U, 0x15914284U, -}; - -static const ulong32 T3[256] = { - 0xbbd269baU, 0xe54da854U, 0xe2bc5e2fU, 0x25cde874U, - 0xf751a653U, 0xd06bbbd3U, 0xd66fb9d2U, 0xb3299a4dU, - 0xfd5da050U, 0xcf8a45acU, 0x090e078dU, 0xa5c663bfU, - 0x3ddde070U, 0xf155a452U, 0x7b52299aU, 0xb52d984cU, - 0x468fc9eaU, 0xc473b7d5U, 0x55663397U, 0xdc63bfd1U, - 0xaacc6633U, 0xfb59a251U, 0xc771b65bU, 0xf3a251a6U, - 0xfe5fa1deU, 0xad3d9048U, 0xd79a4da8U, 0x715e2f99U, - 0xe04babdbU, 0xacc86432U, 0x95e673b7U, 0x32d7e5fcU, - 0x70abdbe3U, 0x6342219eU, 0x417e3f91U, 0x7d562b9bU, - 0x76afd9e2U, 0xbdd66bbbU, 0x9b198241U, 0x79a5dc6eU, - 0xf9ae57a5U, 0x800b8bcbU, 0x67b1d66bU, 0x596e3795U, - 0xe1be5fa1U, 0x10ebfbf3U, 0x81fe7fb1U, 0x0c080402U, - 0x921785ccU, 0xa23795c4U, 0x4e743a1dU, 0x78502814U, - 0xb02b9bc3U, 0x5791c663U, 0xe64fa9daU, 0xd369ba5dU, - 0xdf61be5fU, 0xf257a5dcU, 0x13e9fa7dU, 0x941387cdU, - 0x1fe1fe7fU, 0xc175b45aU, 0x75add86cU, 0xd56db85cU, - 0x08fbf3f7U, 0xd4984c26U, 0x38dbe3ffU, 0x5493c7edU, - 0x4a87cde8U, 0x694e279dU, 0x7fa1de6fU, 0x0302018eU, - 0x56643219U, 0xe7ba5da0U, 0x1ae7fdf0U, 0x111e0f89U, - 0x223c1e0fU, 0x121c0e07U, 0xc58643afU, 0x20cbebfbU, - 0x30201008U, 0x7e542a15U, 0x2e341a0dU, 0x18100804U, - 0x06040201U, 0x458dc864U, 0xf85ba3dfU, 0x29c5ec76U, - 0x0bf9f279U, 0xf453a7ddU, 0x8ef47a3dU, 0x74582c16U, - 0x82fc7e3fU, 0xb2dc6e37U, 0x73a9da6dU, 0x90e07038U, - 0xb1de6fb9U, 0x37d1e673U, 0x4c83cfe9U, 0xbed46a35U, - 0xe349aa55U, 0x3bd9e271U, 0x07f1f67bU, 0x0f0a058cU, - 0x31d5e472U, 0x171a0d88U, 0x0efff1f6U, 0xfca8542aU, - 0x84f87c3eU, 0xd965bc5eU, 0xd29c4e27U, 0x89058c46U, - 0x2830180cU, 0x4389ca65U, 0x6dbdd068U, 0x5b99c261U, - 0x0a0c0603U, 0xbc239fc1U, 0xef41ae57U, 0xce7fb1d6U, - 0xec43afd9U, 0xcd7db058U, 0xea47add8U, 0x4985cc66U, - 0xc87bb3d7U, 0x9ce8743aU, 0x8a078dc8U, 0x88f0783cU, - 0x26cfe9faU, 0x53623196U, 0xf5a653a7U, 0x775a2d98U, - 0x5297c5ecU, 0xb7da6db8U, 0xa83b93c7U, 0xc38241aeU, - 0x6bb9d269U, 0xa731964bU, 0xdd964babU, 0xd19e4fa9U, - 0x4f81ce67U, 0x3c28140aU, 0x8f018e47U, 0x16eff9f2U, - 0x99ee77b5U, 0xcc884422U, 0x64b3d7e5U, 0x5e9fc1eeU, - 0xa3c261beU, 0xfaac562bU, 0x213e1f81U, 0x6c482412U, - 0x2d361b83U, 0x5a6c361bU, 0x24381c0eU, 0xca8c4623U, - 0x04f3f7f5U, 0x83098a45U, 0xc6844221U, 0x9e1f81ceU, - 0xab399249U, 0xe8b0582cU, 0x2cc3eff9U, 0x6ebfd1e6U, - 0x93e271b6U, 0xf0a05028U, 0x725c2e17U, 0x2b321982U, - 0x5c68341aU, 0x1d160b8bU, 0x3edfe1feU, 0x1b12098aU, - 0x36241209U, 0x8c038fc9U, 0x35261387U, 0xb9259c4eU, - 0x7ca3dfe1U, 0xe4b85c2eU, 0x62b7d5e4U, 0x7aa7dde0U, - 0x408bcbebU, 0x477a3d90U, 0xffaa55a4U, 0x44783c1eU, - 0x392e1785U, 0x5d9dc060U, 0x00000000U, 0xde944a25U, - 0x02f7f5f4U, 0x1ce3fff1U, 0x5f6a3594U, 0x3a2c160bU, - 0x68bbd3e7U, 0x23c9ea75U, 0x589bc3efU, 0xb8d06834U, - 0xa6c46231U, 0xc277b5d4U, 0xda67bdd0U, 0x33221186U, - 0x19e5fc7eU, 0xc98e47adU, 0x34d3e7fdU, 0xf6a45229U, - 0xa0c06030U, 0x9aec763bU, 0x6546239fU, 0x2ac7edf8U, - 0xae3f91c6U, 0x6a4c2613U, 0x14180c06U, 0x1e140a05U, - 0xa43397c5U, 0x66442211U, 0x2fc1ee77U, 0x15edf87cU, - 0x01f5f47aU, 0x0dfdf078U, 0xb4d86c36U, 0x4870381cU, - 0x96e47239U, 0xcb79b259U, 0x50603018U, 0xe945ac56U, - 0x8df67bb3U, 0x87fa7db0U, 0xd8904824U, 0xc0804020U, - 0x8bf279b2U, 0x4b723992U, 0xedb65ba3U, 0xba279dc0U, - 0x850d8844U, 0x5195c462U, 0x60402010U, 0x9fea75b4U, - 0x3f2a1584U, 0x97118643U, 0x4d763b93U, 0xb62f99c2U, - 0xa135944aU, 0xa9ce67bdU, 0x0506038fU, 0xeeb45a2dU, - 0xafca65bcU, 0x6f4a259cU, 0x61b5d46aU, 0x9d1d8040U, - 0x981b83cfU, 0xebb259a2U, 0x273a1d80U, 0xbf219e4fU, - 0x427c3e1fU, 0x860f89caU, 0xdb9249aaU, 0x91158442U, -}; - -static const ulong32 T4[256] = { - 0xbabababaU, 0x54545454U, 0x2f2f2f2fU, 0x74747474U, - 0x53535353U, 0xd3d3d3d3U, 0xd2d2d2d2U, 0x4d4d4d4dU, - 0x50505050U, 0xacacacacU, 0x8d8d8d8dU, 0xbfbfbfbfU, - 0x70707070U, 0x52525252U, 0x9a9a9a9aU, 0x4c4c4c4cU, - 0xeaeaeaeaU, 0xd5d5d5d5U, 0x97979797U, 0xd1d1d1d1U, - 0x33333333U, 0x51515151U, 0x5b5b5b5bU, 0xa6a6a6a6U, - 0xdedededeU, 0x48484848U, 0xa8a8a8a8U, 0x99999999U, - 0xdbdbdbdbU, 0x32323232U, 0xb7b7b7b7U, 0xfcfcfcfcU, - 0xe3e3e3e3U, 0x9e9e9e9eU, 0x91919191U, 0x9b9b9b9bU, - 0xe2e2e2e2U, 0xbbbbbbbbU, 0x41414141U, 0x6e6e6e6eU, - 0xa5a5a5a5U, 0xcbcbcbcbU, 0x6b6b6b6bU, 0x95959595U, - 0xa1a1a1a1U, 0xf3f3f3f3U, 0xb1b1b1b1U, 0x02020202U, - 0xccccccccU, 0xc4c4c4c4U, 0x1d1d1d1dU, 0x14141414U, - 0xc3c3c3c3U, 0x63636363U, 0xdadadadaU, 0x5d5d5d5dU, - 0x5f5f5f5fU, 0xdcdcdcdcU, 0x7d7d7d7dU, 0xcdcdcdcdU, - 0x7f7f7f7fU, 0x5a5a5a5aU, 0x6c6c6c6cU, 0x5c5c5c5cU, - 0xf7f7f7f7U, 0x26262626U, 0xffffffffU, 0xededededU, - 0xe8e8e8e8U, 0x9d9d9d9dU, 0x6f6f6f6fU, 0x8e8e8e8eU, - 0x19191919U, 0xa0a0a0a0U, 0xf0f0f0f0U, 0x89898989U, - 0x0f0f0f0fU, 0x07070707U, 0xafafafafU, 0xfbfbfbfbU, - 0x08080808U, 0x15151515U, 0x0d0d0d0dU, 0x04040404U, - 0x01010101U, 0x64646464U, 0xdfdfdfdfU, 0x76767676U, - 0x79797979U, 0xddddddddU, 0x3d3d3d3dU, 0x16161616U, - 0x3f3f3f3fU, 0x37373737U, 0x6d6d6d6dU, 0x38383838U, - 0xb9b9b9b9U, 0x73737373U, 0xe9e9e9e9U, 0x35353535U, - 0x55555555U, 0x71717171U, 0x7b7b7b7bU, 0x8c8c8c8cU, - 0x72727272U, 0x88888888U, 0xf6f6f6f6U, 0x2a2a2a2aU, - 0x3e3e3e3eU, 0x5e5e5e5eU, 0x27272727U, 0x46464646U, - 0x0c0c0c0cU, 0x65656565U, 0x68686868U, 0x61616161U, - 0x03030303U, 0xc1c1c1c1U, 0x57575757U, 0xd6d6d6d6U, - 0xd9d9d9d9U, 0x58585858U, 0xd8d8d8d8U, 0x66666666U, - 0xd7d7d7d7U, 0x3a3a3a3aU, 0xc8c8c8c8U, 0x3c3c3c3cU, - 0xfafafafaU, 0x96969696U, 0xa7a7a7a7U, 0x98989898U, - 0xececececU, 0xb8b8b8b8U, 0xc7c7c7c7U, 0xaeaeaeaeU, - 0x69696969U, 0x4b4b4b4bU, 0xababababU, 0xa9a9a9a9U, - 0x67676767U, 0x0a0a0a0aU, 0x47474747U, 0xf2f2f2f2U, - 0xb5b5b5b5U, 0x22222222U, 0xe5e5e5e5U, 0xeeeeeeeeU, - 0xbebebebeU, 0x2b2b2b2bU, 0x81818181U, 0x12121212U, - 0x83838383U, 0x1b1b1b1bU, 0x0e0e0e0eU, 0x23232323U, - 0xf5f5f5f5U, 0x45454545U, 0x21212121U, 0xcecececeU, - 0x49494949U, 0x2c2c2c2cU, 0xf9f9f9f9U, 0xe6e6e6e6U, - 0xb6b6b6b6U, 0x28282828U, 0x17171717U, 0x82828282U, - 0x1a1a1a1aU, 0x8b8b8b8bU, 0xfefefefeU, 0x8a8a8a8aU, - 0x09090909U, 0xc9c9c9c9U, 0x87878787U, 0x4e4e4e4eU, - 0xe1e1e1e1U, 0x2e2e2e2eU, 0xe4e4e4e4U, 0xe0e0e0e0U, - 0xebebebebU, 0x90909090U, 0xa4a4a4a4U, 0x1e1e1e1eU, - 0x85858585U, 0x60606060U, 0x00000000U, 0x25252525U, - 0xf4f4f4f4U, 0xf1f1f1f1U, 0x94949494U, 0x0b0b0b0bU, - 0xe7e7e7e7U, 0x75757575U, 0xefefefefU, 0x34343434U, - 0x31313131U, 0xd4d4d4d4U, 0xd0d0d0d0U, 0x86868686U, - 0x7e7e7e7eU, 0xadadadadU, 0xfdfdfdfdU, 0x29292929U, - 0x30303030U, 0x3b3b3b3bU, 0x9f9f9f9fU, 0xf8f8f8f8U, - 0xc6c6c6c6U, 0x13131313U, 0x06060606U, 0x05050505U, - 0xc5c5c5c5U, 0x11111111U, 0x77777777U, 0x7c7c7c7cU, - 0x7a7a7a7aU, 0x78787878U, 0x36363636U, 0x1c1c1c1cU, - 0x39393939U, 0x59595959U, 0x18181818U, 0x56565656U, - 0xb3b3b3b3U, 0xb0b0b0b0U, 0x24242424U, 0x20202020U, - 0xb2b2b2b2U, 0x92929292U, 0xa3a3a3a3U, 0xc0c0c0c0U, - 0x44444444U, 0x62626262U, 0x10101010U, 0xb4b4b4b4U, - 0x84848484U, 0x43434343U, 0x93939393U, 0xc2c2c2c2U, - 0x4a4a4a4aU, 0xbdbdbdbdU, 0x8f8f8f8fU, 0x2d2d2d2dU, - 0xbcbcbcbcU, 0x9c9c9c9cU, 0x6a6a6a6aU, 0x40404040U, - 0xcfcfcfcfU, 0xa2a2a2a2U, 0x80808080U, 0x4f4f4f4fU, - 0x1f1f1f1fU, 0xcacacacaU, 0xaaaaaaaaU, 0x42424242U, -}; - -static const ulong32 T5[256] = { - 0x00000000U, 0x01020608U, 0x02040c10U, 0x03060a18U, - 0x04081820U, 0x050a1e28U, 0x060c1430U, 0x070e1238U, - 0x08103040U, 0x09123648U, 0x0a143c50U, 0x0b163a58U, - 0x0c182860U, 0x0d1a2e68U, 0x0e1c2470U, 0x0f1e2278U, - 0x10206080U, 0x11226688U, 0x12246c90U, 0x13266a98U, - 0x142878a0U, 0x152a7ea8U, 0x162c74b0U, 0x172e72b8U, - 0x183050c0U, 0x193256c8U, 0x1a345cd0U, 0x1b365ad8U, - 0x1c3848e0U, 0x1d3a4ee8U, 0x1e3c44f0U, 0x1f3e42f8U, - 0x2040c01dU, 0x2142c615U, 0x2244cc0dU, 0x2346ca05U, - 0x2448d83dU, 0x254ade35U, 0x264cd42dU, 0x274ed225U, - 0x2850f05dU, 0x2952f655U, 0x2a54fc4dU, 0x2b56fa45U, - 0x2c58e87dU, 0x2d5aee75U, 0x2e5ce46dU, 0x2f5ee265U, - 0x3060a09dU, 0x3162a695U, 0x3264ac8dU, 0x3366aa85U, - 0x3468b8bdU, 0x356abeb5U, 0x366cb4adU, 0x376eb2a5U, - 0x387090ddU, 0x397296d5U, 0x3a749ccdU, 0x3b769ac5U, - 0x3c7888fdU, 0x3d7a8ef5U, 0x3e7c84edU, 0x3f7e82e5U, - 0x40809d3aU, 0x41829b32U, 0x4284912aU, 0x43869722U, - 0x4488851aU, 0x458a8312U, 0x468c890aU, 0x478e8f02U, - 0x4890ad7aU, 0x4992ab72U, 0x4a94a16aU, 0x4b96a762U, - 0x4c98b55aU, 0x4d9ab352U, 0x4e9cb94aU, 0x4f9ebf42U, - 0x50a0fdbaU, 0x51a2fbb2U, 0x52a4f1aaU, 0x53a6f7a2U, - 0x54a8e59aU, 0x55aae392U, 0x56ace98aU, 0x57aeef82U, - 0x58b0cdfaU, 0x59b2cbf2U, 0x5ab4c1eaU, 0x5bb6c7e2U, - 0x5cb8d5daU, 0x5dbad3d2U, 0x5ebcd9caU, 0x5fbedfc2U, - 0x60c05d27U, 0x61c25b2fU, 0x62c45137U, 0x63c6573fU, - 0x64c84507U, 0x65ca430fU, 0x66cc4917U, 0x67ce4f1fU, - 0x68d06d67U, 0x69d26b6fU, 0x6ad46177U, 0x6bd6677fU, - 0x6cd87547U, 0x6dda734fU, 0x6edc7957U, 0x6fde7f5fU, - 0x70e03da7U, 0x71e23bafU, 0x72e431b7U, 0x73e637bfU, - 0x74e82587U, 0x75ea238fU, 0x76ec2997U, 0x77ee2f9fU, - 0x78f00de7U, 0x79f20befU, 0x7af401f7U, 0x7bf607ffU, - 0x7cf815c7U, 0x7dfa13cfU, 0x7efc19d7U, 0x7ffe1fdfU, - 0x801d2774U, 0x811f217cU, 0x82192b64U, 0x831b2d6cU, - 0x84153f54U, 0x8517395cU, 0x86113344U, 0x8713354cU, - 0x880d1734U, 0x890f113cU, 0x8a091b24U, 0x8b0b1d2cU, - 0x8c050f14U, 0x8d07091cU, 0x8e010304U, 0x8f03050cU, - 0x903d47f4U, 0x913f41fcU, 0x92394be4U, 0x933b4decU, - 0x94355fd4U, 0x953759dcU, 0x963153c4U, 0x973355ccU, - 0x982d77b4U, 0x992f71bcU, 0x9a297ba4U, 0x9b2b7dacU, - 0x9c256f94U, 0x9d27699cU, 0x9e216384U, 0x9f23658cU, - 0xa05de769U, 0xa15fe161U, 0xa259eb79U, 0xa35bed71U, - 0xa455ff49U, 0xa557f941U, 0xa651f359U, 0xa753f551U, - 0xa84dd729U, 0xa94fd121U, 0xaa49db39U, 0xab4bdd31U, - 0xac45cf09U, 0xad47c901U, 0xae41c319U, 0xaf43c511U, - 0xb07d87e9U, 0xb17f81e1U, 0xb2798bf9U, 0xb37b8df1U, - 0xb4759fc9U, 0xb57799c1U, 0xb67193d9U, 0xb77395d1U, - 0xb86db7a9U, 0xb96fb1a1U, 0xba69bbb9U, 0xbb6bbdb1U, - 0xbc65af89U, 0xbd67a981U, 0xbe61a399U, 0xbf63a591U, - 0xc09dba4eU, 0xc19fbc46U, 0xc299b65eU, 0xc39bb056U, - 0xc495a26eU, 0xc597a466U, 0xc691ae7eU, 0xc793a876U, - 0xc88d8a0eU, 0xc98f8c06U, 0xca89861eU, 0xcb8b8016U, - 0xcc85922eU, 0xcd879426U, 0xce819e3eU, 0xcf839836U, - 0xd0bddaceU, 0xd1bfdcc6U, 0xd2b9d6deU, 0xd3bbd0d6U, - 0xd4b5c2eeU, 0xd5b7c4e6U, 0xd6b1cefeU, 0xd7b3c8f6U, - 0xd8adea8eU, 0xd9afec86U, 0xdaa9e69eU, 0xdbabe096U, - 0xdca5f2aeU, 0xdda7f4a6U, 0xdea1febeU, 0xdfa3f8b6U, - 0xe0dd7a53U, 0xe1df7c5bU, 0xe2d97643U, 0xe3db704bU, - 0xe4d56273U, 0xe5d7647bU, 0xe6d16e63U, 0xe7d3686bU, - 0xe8cd4a13U, 0xe9cf4c1bU, 0xeac94603U, 0xebcb400bU, - 0xecc55233U, 0xedc7543bU, 0xeec15e23U, 0xefc3582bU, - 0xf0fd1ad3U, 0xf1ff1cdbU, 0xf2f916c3U, 0xf3fb10cbU, - 0xf4f502f3U, 0xf5f704fbU, 0xf6f10ee3U, 0xf7f308ebU, - 0xf8ed2a93U, 0xf9ef2c9bU, 0xfae92683U, 0xfbeb208bU, - 0xfce532b3U, 0xfde734bbU, 0xfee13ea3U, 0xffe338abU, -}; - -/** - * The round constants. - */ -static const ulong32 rc[] = { - 0xba542f74U, 0x53d3d24dU, 0x50ac8dbfU, 0x70529a4cU, - 0xead597d1U, 0x33515ba6U, 0xde48a899U, 0xdb32b7fcU, - 0xe39e919bU, 0xe2bb416eU, 0xa5cb6b95U, 0xa1f3b102U, - 0xccc41d14U, 0xc363da5dU, 0x5fdc7dcdU, 0x7f5a6c5cU, - 0xf726ffedU, 0xe89d6f8eU, 0x19a0f089U, -}; - - - -#else - - -static const ulong32 T0[256] = { - 0xa753a6f5U, 0xd3bb6bd0U, 0xe6d1bf6eU, 0x71e2d93bU, - 0xd0bd67daU, 0xac458acfU, 0x4d9a29b3U, 0x79f2f90bU, - 0x3a74e89cU, 0xc98f038cU, 0x913f7e41U, 0xfce5d732U, - 0x1e3c7844U, 0x478e018fU, 0x54a84de5U, 0xbd67cea9U, - 0x8c050a0fU, 0xa557aef9U, 0x7af4f501U, 0xfbebcb20U, - 0x63c69157U, 0xb86ddab7U, 0xdda753f4U, 0xd4b577c2U, - 0xe5d7b364U, 0xb37bf68dU, 0xc59733a4U, 0xbe61c2a3U, - 0xa94f9ed1U, 0x880d1a17U, 0x0c183028U, 0xa259b2ebU, - 0x3972e496U, 0xdfa35bf8U, 0x2952a4f6U, 0xdaa94fe6U, - 0x2b56acfaU, 0xa84d9ad7U, 0xcb8b0b80U, 0x4c982db5U, - 0x4b9631a7U, 0x224488ccU, 0xaa4992dbU, 0x244890d8U, - 0x4182199bU, 0x70e0dd3dU, 0xa651a2f3U, 0xf9efc32cU, - 0x5ab475c1U, 0xe2d9af76U, 0xb07dfa87U, 0x366cd8b4U, - 0x7dfae913U, 0xe4d5b762U, 0x3366ccaaU, 0xffe3db38U, - 0x60c09d5dU, 0x204080c0U, 0x08102030U, 0x8b0b161dU, - 0x5ebc65d9U, 0xab4b96ddU, 0x7ffee11fU, 0x78f0fd0dU, - 0x7cf8ed15U, 0x2c58b0e8U, 0x57ae41efU, 0xd2b96fd6U, - 0xdca557f2U, 0x6ddaa973U, 0x7efce519U, 0x0d1a342eU, - 0x53a651f7U, 0x94356a5fU, 0xc39b2bb0U, 0x2850a0f0U, - 0x274e9cd2U, 0x060c1814U, 0x5fbe61dfU, 0xad478ec9U, - 0x67ce814fU, 0x5cb86dd5U, 0x55aa49e3U, 0x48903dadU, - 0x0e1c3824U, 0x52a455f1U, 0xeac98f46U, 0x42841591U, - 0x5bb671c7U, 0x5dba69d3U, 0x3060c0a0U, 0x58b07dcdU, - 0x51a259fbU, 0x59b279cbU, 0x3c78f088U, 0x4e9c25b9U, - 0x3870e090U, 0x8a09121bU, 0x72e4d531U, 0x14285078U, - 0xe7d3bb68U, 0xc6913faeU, 0xdea15ffeU, 0x50a05dfdU, - 0x8e010203U, 0x9239724bU, 0xd1bf63dcU, 0x77eec12fU, - 0x933b764dU, 0x458a0983U, 0x9a29527bU, 0xce811f9eU, - 0x2d5ab4eeU, 0x03060c0aU, 0x62c49551U, 0xb671e293U, - 0xb96fdeb1U, 0xbf63c6a5U, 0x96316253U, 0x6bd6b167U, - 0x3f7efc82U, 0x070e1c12U, 0x1224486cU, 0xae4182c3U, - 0x40801d9dU, 0x3468d0b8U, 0x468c0589U, 0x3e7cf884U, - 0xdbab4be0U, 0xcf831b98U, 0xecc59752U, 0xcc851792U, - 0xc19f23bcU, 0xa15fbee1U, 0xc09d27baU, 0xd6b17fceU, - 0x1d3a744eU, 0xf4f5f702U, 0x61c2995bU, 0x3b76ec9aU, - 0x10204060U, 0xd8ad47eaU, 0x68d0bd6dU, 0xa05dbae7U, - 0xb17ffe81U, 0x0a14283cU, 0x69d2b96bU, 0x6cd8ad75U, - 0x499239abU, 0xfae9cf26U, 0x76ecc529U, 0xc49537a2U, - 0x9e214263U, 0x9b2b567dU, 0x6edca579U, 0x992f5e71U, - 0xc2992fb6U, 0xb773e695U, 0x982d5a77U, 0xbc65caafU, - 0x8f030605U, 0x85172e39U, 0x1f3e7c42U, 0xb475ea9fU, - 0xf8edc72aU, 0x11224466U, 0x2e5cb8e4U, 0x00000000U, - 0x254a94deU, 0x1c387048U, 0x2a54a8fcU, 0x3d7af48eU, - 0x050a141eU, 0x4f9e21bfU, 0x7bf6f107U, 0xb279f28bU, - 0x3264c8acU, 0x903d7a47U, 0xaf4386c5U, 0x19326456U, - 0xa35bb6edU, 0xf7f3fb08U, 0x73e6d137U, 0x9d274e69U, - 0x152a547eU, 0x74e8cd25U, 0xeec19f5eU, 0xca890f86U, - 0x9f234665U, 0x0f1e3c22U, 0x1b366c5aU, 0x75eac923U, - 0x86112233U, 0x84152a3fU, 0x9c254a6fU, 0x4a9435a1U, - 0x97336655U, 0x1a34685cU, 0x65ca8943U, 0xf6f1ff0eU, - 0xedc79354U, 0x09122436U, 0xbb6bd6bdU, 0x264c98d4U, - 0x831b362dU, 0xebcb8b40U, 0x6fdea17fU, 0x811f3e21U, - 0x04081018U, 0x6ad4b561U, 0x43861197U, 0x01020406U, - 0x172e5c72U, 0xe1dfa37cU, 0x87132635U, 0xf5f7f304U, - 0x8d070e09U, 0xe3dbab70U, 0x23468ccaU, 0x801d3a27U, - 0x44880d85U, 0x162c5874U, 0x66cc8549U, 0x214284c6U, - 0xfee1df3eU, 0xd5b773c4U, 0x3162c4a6U, 0xd9af43ecU, - 0x356ad4beU, 0x18306050U, 0x0204080cU, 0x64c88d45U, - 0xf2f9ef16U, 0xf1ffe31cU, 0x56ac45e9U, 0xcd871394U, - 0x8219322bU, 0xc88d078aU, 0xba69d2bbU, 0xf0fde71aU, - 0xefc39b58U, 0xe9cf834cU, 0xe8cd874aU, 0xfde7d334U, - 0x890f1e11U, 0xd7b37bc8U, 0xc7933ba8U, 0xb577ee99U, - 0xa455aaffU, 0x2f5ebce2U, 0x95376e59U, 0x13264c6aU, - 0x0b162c3aU, 0xf3fbeb10U, 0xe0dda77aU, 0x376edcb2U, -}; - -static const ulong32 T1[256] = { - 0x53a7f5a6U, 0xbbd3d06bU, 0xd1e66ebfU, 0xe2713bd9U, - 0xbdd0da67U, 0x45accf8aU, 0x9a4db329U, 0xf2790bf9U, - 0x743a9ce8U, 0x8fc98c03U, 0x3f91417eU, 0xe5fc32d7U, - 0x3c1e4478U, 0x8e478f01U, 0xa854e54dU, 0x67bda9ceU, - 0x058c0f0aU, 0x57a5f9aeU, 0xf47a01f5U, 0xebfb20cbU, - 0xc6635791U, 0x6db8b7daU, 0xa7ddf453U, 0xb5d4c277U, - 0xd7e564b3U, 0x7bb38df6U, 0x97c5a433U, 0x61bea3c2U, - 0x4fa9d19eU, 0x0d88171aU, 0x180c2830U, 0x59a2ebb2U, - 0x723996e4U, 0xa3dff85bU, 0x5229f6a4U, 0xa9dae64fU, - 0x562bfaacU, 0x4da8d79aU, 0x8bcb800bU, 0x984cb52dU, - 0x964ba731U, 0x4422cc88U, 0x49aadb92U, 0x4824d890U, - 0x82419b19U, 0xe0703dddU, 0x51a6f3a2U, 0xeff92cc3U, - 0xb45ac175U, 0xd9e276afU, 0x7db087faU, 0x6c36b4d8U, - 0xfa7d13e9U, 0xd5e462b7U, 0x6633aaccU, 0xe3ff38dbU, - 0xc0605d9dU, 0x4020c080U, 0x10083020U, 0x0b8b1d16U, - 0xbc5ed965U, 0x4babdd96U, 0xfe7f1fe1U, 0xf0780dfdU, - 0xf87c15edU, 0x582ce8b0U, 0xae57ef41U, 0xb9d2d66fU, - 0xa5dcf257U, 0xda6d73a9U, 0xfc7e19e5U, 0x1a0d2e34U, - 0xa653f751U, 0x35945f6aU, 0x9bc3b02bU, 0x5028f0a0U, - 0x4e27d29cU, 0x0c061418U, 0xbe5fdf61U, 0x47adc98eU, - 0xce674f81U, 0xb85cd56dU, 0xaa55e349U, 0x9048ad3dU, - 0x1c0e2438U, 0xa452f155U, 0xc9ea468fU, 0x84429115U, - 0xb65bc771U, 0xba5dd369U, 0x6030a0c0U, 0xb058cd7dU, - 0xa251fb59U, 0xb259cb79U, 0x783c88f0U, 0x9c4eb925U, - 0x703890e0U, 0x098a1b12U, 0xe47231d5U, 0x28147850U, - 0xd3e768bbU, 0x91c6ae3fU, 0xa1defe5fU, 0xa050fd5dU, - 0x018e0302U, 0x39924b72U, 0xbfd1dc63U, 0xee772fc1U, - 0x3b934d76U, 0x8a458309U, 0x299a7b52U, 0x81ce9e1fU, - 0x5a2deeb4U, 0x06030a0cU, 0xc4625195U, 0x71b693e2U, - 0x6fb9b1deU, 0x63bfa5c6U, 0x31965362U, 0xd66b67b1U, - 0x7e3f82fcU, 0x0e07121cU, 0x24126c48U, 0x41aec382U, - 0x80409d1dU, 0x6834b8d0U, 0x8c468905U, 0x7c3e84f8U, - 0xabdbe04bU, 0x83cf981bU, 0xc5ec5297U, 0x85cc9217U, - 0x9fc1bc23U, 0x5fa1e1beU, 0x9dc0ba27U, 0xb1d6ce7fU, - 0x3a1d4e74U, 0xf5f402f7U, 0xc2615b99U, 0x763b9aecU, - 0x20106040U, 0xadd8ea47U, 0xd0686dbdU, 0x5da0e7baU, - 0x7fb181feU, 0x140a3c28U, 0xd2696bb9U, 0xd86c75adU, - 0x9249ab39U, 0xe9fa26cfU, 0xec7629c5U, 0x95c4a237U, - 0x219e6342U, 0x2b9b7d56U, 0xdc6e79a5U, 0x2f99715eU, - 0x99c2b62fU, 0x73b795e6U, 0x2d98775aU, 0x65bcafcaU, - 0x038f0506U, 0x1785392eU, 0x3e1f427cU, 0x75b49feaU, - 0xedf82ac7U, 0x22116644U, 0x5c2ee4b8U, 0x00000000U, - 0x4a25de94U, 0x381c4870U, 0x542afca8U, 0x7a3d8ef4U, - 0x0a051e14U, 0x9e4fbf21U, 0xf67b07f1U, 0x79b28bf2U, - 0x6432acc8U, 0x3d90477aU, 0x43afc586U, 0x32195664U, - 0x5ba3edb6U, 0xf3f708fbU, 0xe67337d1U, 0x279d694eU, - 0x2a157e54U, 0xe87425cdU, 0xc1ee5e9fU, 0x89ca860fU, - 0x239f6546U, 0x1e0f223cU, 0x361b5a6cU, 0xea7523c9U, - 0x11863322U, 0x15843f2aU, 0x259c6f4aU, 0x944aa135U, - 0x33975566U, 0x341a5c68U, 0xca654389U, 0xf1f60effU, - 0xc7ed5493U, 0x12093624U, 0x6bbbbdd6U, 0x4c26d498U, - 0x1b832d36U, 0xcbeb408bU, 0xde6f7fa1U, 0x1f81213eU, - 0x08041810U, 0xd46a61b5U, 0x86439711U, 0x02010604U, - 0x2e17725cU, 0xdfe17ca3U, 0x13873526U, 0xf7f504f3U, - 0x078d090eU, 0xdbe370abU, 0x4623ca8cU, 0x1d80273aU, - 0x8844850dU, 0x2c167458U, 0xcc664985U, 0x4221c684U, - 0xe1fe3edfU, 0xb7d5c473U, 0x6231a6c4U, 0xafd9ec43U, - 0x6a35bed4U, 0x30185060U, 0x04020c08U, 0xc864458dU, - 0xf9f216efU, 0xfff11ce3U, 0xac56e945U, 0x87cd9413U, - 0x19822b32U, 0x8dc88a07U, 0x69babbd2U, 0xfdf01ae7U, - 0xc3ef589bU, 0xcfe94c83U, 0xcde84a87U, 0xe7fd34d3U, - 0x0f89111eU, 0xb3d7c87bU, 0x93c7a83bU, 0x77b599eeU, - 0x55a4ffaaU, 0x5e2fe2bcU, 0x3795596eU, 0x26136a4cU, - 0x160b3a2cU, 0xfbf310ebU, 0xdde07aa7U, 0x6e37b2dcU, -}; - -static const ulong32 T2[256] = { - 0xa6f5a753U, 0x6bd0d3bbU, 0xbf6ee6d1U, 0xd93b71e2U, - 0x67dad0bdU, 0x8acfac45U, 0x29b34d9aU, 0xf90b79f2U, - 0xe89c3a74U, 0x038cc98fU, 0x7e41913fU, 0xd732fce5U, - 0x78441e3cU, 0x018f478eU, 0x4de554a8U, 0xcea9bd67U, - 0x0a0f8c05U, 0xaef9a557U, 0xf5017af4U, 0xcb20fbebU, - 0x915763c6U, 0xdab7b86dU, 0x53f4dda7U, 0x77c2d4b5U, - 0xb364e5d7U, 0xf68db37bU, 0x33a4c597U, 0xc2a3be61U, - 0x9ed1a94fU, 0x1a17880dU, 0x30280c18U, 0xb2eba259U, - 0xe4963972U, 0x5bf8dfa3U, 0xa4f62952U, 0x4fe6daa9U, - 0xacfa2b56U, 0x9ad7a84dU, 0x0b80cb8bU, 0x2db54c98U, - 0x31a74b96U, 0x88cc2244U, 0x92dbaa49U, 0x90d82448U, - 0x199b4182U, 0xdd3d70e0U, 0xa2f3a651U, 0xc32cf9efU, - 0x75c15ab4U, 0xaf76e2d9U, 0xfa87b07dU, 0xd8b4366cU, - 0xe9137dfaU, 0xb762e4d5U, 0xccaa3366U, 0xdb38ffe3U, - 0x9d5d60c0U, 0x80c02040U, 0x20300810U, 0x161d8b0bU, - 0x65d95ebcU, 0x96ddab4bU, 0xe11f7ffeU, 0xfd0d78f0U, - 0xed157cf8U, 0xb0e82c58U, 0x41ef57aeU, 0x6fd6d2b9U, - 0x57f2dca5U, 0xa9736ddaU, 0xe5197efcU, 0x342e0d1aU, - 0x51f753a6U, 0x6a5f9435U, 0x2bb0c39bU, 0xa0f02850U, - 0x9cd2274eU, 0x1814060cU, 0x61df5fbeU, 0x8ec9ad47U, - 0x814f67ceU, 0x6dd55cb8U, 0x49e355aaU, 0x3dad4890U, - 0x38240e1cU, 0x55f152a4U, 0x8f46eac9U, 0x15914284U, - 0x71c75bb6U, 0x69d35dbaU, 0xc0a03060U, 0x7dcd58b0U, - 0x59fb51a2U, 0x79cb59b2U, 0xf0883c78U, 0x25b94e9cU, - 0xe0903870U, 0x121b8a09U, 0xd53172e4U, 0x50781428U, - 0xbb68e7d3U, 0x3faec691U, 0x5ffedea1U, 0x5dfd50a0U, - 0x02038e01U, 0x724b9239U, 0x63dcd1bfU, 0xc12f77eeU, - 0x764d933bU, 0x0983458aU, 0x527b9a29U, 0x1f9ece81U, - 0xb4ee2d5aU, 0x0c0a0306U, 0x955162c4U, 0xe293b671U, - 0xdeb1b96fU, 0xc6a5bf63U, 0x62539631U, 0xb1676bd6U, - 0xfc823f7eU, 0x1c12070eU, 0x486c1224U, 0x82c3ae41U, - 0x1d9d4080U, 0xd0b83468U, 0x0589468cU, 0xf8843e7cU, - 0x4be0dbabU, 0x1b98cf83U, 0x9752ecc5U, 0x1792cc85U, - 0x23bcc19fU, 0xbee1a15fU, 0x27bac09dU, 0x7fced6b1U, - 0x744e1d3aU, 0xf702f4f5U, 0x995b61c2U, 0xec9a3b76U, - 0x40601020U, 0x47ead8adU, 0xbd6d68d0U, 0xbae7a05dU, - 0xfe81b17fU, 0x283c0a14U, 0xb96b69d2U, 0xad756cd8U, - 0x39ab4992U, 0xcf26fae9U, 0xc52976ecU, 0x37a2c495U, - 0x42639e21U, 0x567d9b2bU, 0xa5796edcU, 0x5e71992fU, - 0x2fb6c299U, 0xe695b773U, 0x5a77982dU, 0xcaafbc65U, - 0x06058f03U, 0x2e398517U, 0x7c421f3eU, 0xea9fb475U, - 0xc72af8edU, 0x44661122U, 0xb8e42e5cU, 0x00000000U, - 0x94de254aU, 0x70481c38U, 0xa8fc2a54U, 0xf48e3d7aU, - 0x141e050aU, 0x21bf4f9eU, 0xf1077bf6U, 0xf28bb279U, - 0xc8ac3264U, 0x7a47903dU, 0x86c5af43U, 0x64561932U, - 0xb6eda35bU, 0xfb08f7f3U, 0xd13773e6U, 0x4e699d27U, - 0x547e152aU, 0xcd2574e8U, 0x9f5eeec1U, 0x0f86ca89U, - 0x46659f23U, 0x3c220f1eU, 0x6c5a1b36U, 0xc92375eaU, - 0x22338611U, 0x2a3f8415U, 0x4a6f9c25U, 0x35a14a94U, - 0x66559733U, 0x685c1a34U, 0x894365caU, 0xff0ef6f1U, - 0x9354edc7U, 0x24360912U, 0xd6bdbb6bU, 0x98d4264cU, - 0x362d831bU, 0x8b40ebcbU, 0xa17f6fdeU, 0x3e21811fU, - 0x10180408U, 0xb5616ad4U, 0x11974386U, 0x04060102U, - 0x5c72172eU, 0xa37ce1dfU, 0x26358713U, 0xf304f5f7U, - 0x0e098d07U, 0xab70e3dbU, 0x8cca2346U, 0x3a27801dU, - 0x0d854488U, 0x5874162cU, 0x854966ccU, 0x84c62142U, - 0xdf3efee1U, 0x73c4d5b7U, 0xc4a63162U, 0x43ecd9afU, - 0xd4be356aU, 0x60501830U, 0x080c0204U, 0x8d4564c8U, - 0xef16f2f9U, 0xe31cf1ffU, 0x45e956acU, 0x1394cd87U, - 0x322b8219U, 0x078ac88dU, 0xd2bbba69U, 0xe71af0fdU, - 0x9b58efc3U, 0x834ce9cfU, 0x874ae8cdU, 0xd334fde7U, - 0x1e11890fU, 0x7bc8d7b3U, 0x3ba8c793U, 0xee99b577U, - 0xaaffa455U, 0xbce22f5eU, 0x6e599537U, 0x4c6a1326U, - 0x2c3a0b16U, 0xeb10f3fbU, 0xa77ae0ddU, 0xdcb2376eU, -}; - -static const ulong32 T3[256] = { - 0xf5a653a7U, 0xd06bbbd3U, 0x6ebfd1e6U, 0x3bd9e271U, - 0xda67bdd0U, 0xcf8a45acU, 0xb3299a4dU, 0x0bf9f279U, - 0x9ce8743aU, 0x8c038fc9U, 0x417e3f91U, 0x32d7e5fcU, - 0x44783c1eU, 0x8f018e47U, 0xe54da854U, 0xa9ce67bdU, - 0x0f0a058cU, 0xf9ae57a5U, 0x01f5f47aU, 0x20cbebfbU, - 0x5791c663U, 0xb7da6db8U, 0xf453a7ddU, 0xc277b5d4U, - 0x64b3d7e5U, 0x8df67bb3U, 0xa43397c5U, 0xa3c261beU, - 0xd19e4fa9U, 0x171a0d88U, 0x2830180cU, 0xebb259a2U, - 0x96e47239U, 0xf85ba3dfU, 0xf6a45229U, 0xe64fa9daU, - 0xfaac562bU, 0xd79a4da8U, 0x800b8bcbU, 0xb52d984cU, - 0xa731964bU, 0xcc884422U, 0xdb9249aaU, 0xd8904824U, - 0x9b198241U, 0x3ddde070U, 0xf3a251a6U, 0x2cc3eff9U, - 0xc175b45aU, 0x76afd9e2U, 0x87fa7db0U, 0xb4d86c36U, - 0x13e9fa7dU, 0x62b7d5e4U, 0xaacc6633U, 0x38dbe3ffU, - 0x5d9dc060U, 0xc0804020U, 0x30201008U, 0x1d160b8bU, - 0xd965bc5eU, 0xdd964babU, 0x1fe1fe7fU, 0x0dfdf078U, - 0x15edf87cU, 0xe8b0582cU, 0xef41ae57U, 0xd66fb9d2U, - 0xf257a5dcU, 0x73a9da6dU, 0x19e5fc7eU, 0x2e341a0dU, - 0xf751a653U, 0x5f6a3594U, 0xb02b9bc3U, 0xf0a05028U, - 0xd29c4e27U, 0x14180c06U, 0xdf61be5fU, 0xc98e47adU, - 0x4f81ce67U, 0xd56db85cU, 0xe349aa55U, 0xad3d9048U, - 0x24381c0eU, 0xf155a452U, 0x468fc9eaU, 0x91158442U, - 0xc771b65bU, 0xd369ba5dU, 0xa0c06030U, 0xcd7db058U, - 0xfb59a251U, 0xcb79b259U, 0x88f0783cU, 0xb9259c4eU, - 0x90e07038U, 0x1b12098aU, 0x31d5e472U, 0x78502814U, - 0x68bbd3e7U, 0xae3f91c6U, 0xfe5fa1deU, 0xfd5da050U, - 0x0302018eU, 0x4b723992U, 0xdc63bfd1U, 0x2fc1ee77U, - 0x4d763b93U, 0x83098a45U, 0x7b52299aU, 0x9e1f81ceU, - 0xeeb45a2dU, 0x0a0c0603U, 0x5195c462U, 0x93e271b6U, - 0xb1de6fb9U, 0xa5c663bfU, 0x53623196U, 0x67b1d66bU, - 0x82fc7e3fU, 0x121c0e07U, 0x6c482412U, 0xc38241aeU, - 0x9d1d8040U, 0xb8d06834U, 0x89058c46U, 0x84f87c3eU, - 0xe04babdbU, 0x981b83cfU, 0x5297c5ecU, 0x921785ccU, - 0xbc239fc1U, 0xe1be5fa1U, 0xba279dc0U, 0xce7fb1d6U, - 0x4e743a1dU, 0x02f7f5f4U, 0x5b99c261U, 0x9aec763bU, - 0x60402010U, 0xea47add8U, 0x6dbdd068U, 0xe7ba5da0U, - 0x81fe7fb1U, 0x3c28140aU, 0x6bb9d269U, 0x75add86cU, - 0xab399249U, 0x26cfe9faU, 0x29c5ec76U, 0xa23795c4U, - 0x6342219eU, 0x7d562b9bU, 0x79a5dc6eU, 0x715e2f99U, - 0xb62f99c2U, 0x95e673b7U, 0x775a2d98U, 0xafca65bcU, - 0x0506038fU, 0x392e1785U, 0x427c3e1fU, 0x9fea75b4U, - 0x2ac7edf8U, 0x66442211U, 0xe4b85c2eU, 0x00000000U, - 0xde944a25U, 0x4870381cU, 0xfca8542aU, 0x8ef47a3dU, - 0x1e140a05U, 0xbf219e4fU, 0x07f1f67bU, 0x8bf279b2U, - 0xacc86432U, 0x477a3d90U, 0xc58643afU, 0x56643219U, - 0xedb65ba3U, 0x08fbf3f7U, 0x37d1e673U, 0x694e279dU, - 0x7e542a15U, 0x25cde874U, 0x5e9fc1eeU, 0x860f89caU, - 0x6546239fU, 0x223c1e0fU, 0x5a6c361bU, 0x23c9ea75U, - 0x33221186U, 0x3f2a1584U, 0x6f4a259cU, 0xa135944aU, - 0x55663397U, 0x5c68341aU, 0x4389ca65U, 0x0efff1f6U, - 0x5493c7edU, 0x36241209U, 0xbdd66bbbU, 0xd4984c26U, - 0x2d361b83U, 0x408bcbebU, 0x7fa1de6fU, 0x213e1f81U, - 0x18100804U, 0x61b5d46aU, 0x97118643U, 0x06040201U, - 0x725c2e17U, 0x7ca3dfe1U, 0x35261387U, 0x04f3f7f5U, - 0x090e078dU, 0x70abdbe3U, 0xca8c4623U, 0x273a1d80U, - 0x850d8844U, 0x74582c16U, 0x4985cc66U, 0xc6844221U, - 0x3edfe1feU, 0xc473b7d5U, 0xa6c46231U, 0xec43afd9U, - 0xbed46a35U, 0x50603018U, 0x0c080402U, 0x458dc864U, - 0x16eff9f2U, 0x1ce3fff1U, 0xe945ac56U, 0x941387cdU, - 0x2b321982U, 0x8a078dc8U, 0xbbd269baU, 0x1ae7fdf0U, - 0x589bc3efU, 0x4c83cfe9U, 0x4a87cde8U, 0x34d3e7fdU, - 0x111e0f89U, 0xc87bb3d7U, 0xa83b93c7U, 0x99ee77b5U, - 0xffaa55a4U, 0xe2bc5e2fU, 0x596e3795U, 0x6a4c2613U, - 0x3a2c160bU, 0x10ebfbf3U, 0x7aa7dde0U, 0xb2dc6e37U, -}; - -static const ulong32 T4[256] = { - 0xa7a7a7a7U, 0xd3d3d3d3U, 0xe6e6e6e6U, 0x71717171U, - 0xd0d0d0d0U, 0xacacacacU, 0x4d4d4d4dU, 0x79797979U, - 0x3a3a3a3aU, 0xc9c9c9c9U, 0x91919191U, 0xfcfcfcfcU, - 0x1e1e1e1eU, 0x47474747U, 0x54545454U, 0xbdbdbdbdU, - 0x8c8c8c8cU, 0xa5a5a5a5U, 0x7a7a7a7aU, 0xfbfbfbfbU, - 0x63636363U, 0xb8b8b8b8U, 0xddddddddU, 0xd4d4d4d4U, - 0xe5e5e5e5U, 0xb3b3b3b3U, 0xc5c5c5c5U, 0xbebebebeU, - 0xa9a9a9a9U, 0x88888888U, 0x0c0c0c0cU, 0xa2a2a2a2U, - 0x39393939U, 0xdfdfdfdfU, 0x29292929U, 0xdadadadaU, - 0x2b2b2b2bU, 0xa8a8a8a8U, 0xcbcbcbcbU, 0x4c4c4c4cU, - 0x4b4b4b4bU, 0x22222222U, 0xaaaaaaaaU, 0x24242424U, - 0x41414141U, 0x70707070U, 0xa6a6a6a6U, 0xf9f9f9f9U, - 0x5a5a5a5aU, 0xe2e2e2e2U, 0xb0b0b0b0U, 0x36363636U, - 0x7d7d7d7dU, 0xe4e4e4e4U, 0x33333333U, 0xffffffffU, - 0x60606060U, 0x20202020U, 0x08080808U, 0x8b8b8b8bU, - 0x5e5e5e5eU, 0xababababU, 0x7f7f7f7fU, 0x78787878U, - 0x7c7c7c7cU, 0x2c2c2c2cU, 0x57575757U, 0xd2d2d2d2U, - 0xdcdcdcdcU, 0x6d6d6d6dU, 0x7e7e7e7eU, 0x0d0d0d0dU, - 0x53535353U, 0x94949494U, 0xc3c3c3c3U, 0x28282828U, - 0x27272727U, 0x06060606U, 0x5f5f5f5fU, 0xadadadadU, - 0x67676767U, 0x5c5c5c5cU, 0x55555555U, 0x48484848U, - 0x0e0e0e0eU, 0x52525252U, 0xeaeaeaeaU, 0x42424242U, - 0x5b5b5b5bU, 0x5d5d5d5dU, 0x30303030U, 0x58585858U, - 0x51515151U, 0x59595959U, 0x3c3c3c3cU, 0x4e4e4e4eU, - 0x38383838U, 0x8a8a8a8aU, 0x72727272U, 0x14141414U, - 0xe7e7e7e7U, 0xc6c6c6c6U, 0xdedededeU, 0x50505050U, - 0x8e8e8e8eU, 0x92929292U, 0xd1d1d1d1U, 0x77777777U, - 0x93939393U, 0x45454545U, 0x9a9a9a9aU, 0xcecececeU, - 0x2d2d2d2dU, 0x03030303U, 0x62626262U, 0xb6b6b6b6U, - 0xb9b9b9b9U, 0xbfbfbfbfU, 0x96969696U, 0x6b6b6b6bU, - 0x3f3f3f3fU, 0x07070707U, 0x12121212U, 0xaeaeaeaeU, - 0x40404040U, 0x34343434U, 0x46464646U, 0x3e3e3e3eU, - 0xdbdbdbdbU, 0xcfcfcfcfU, 0xececececU, 0xccccccccU, - 0xc1c1c1c1U, 0xa1a1a1a1U, 0xc0c0c0c0U, 0xd6d6d6d6U, - 0x1d1d1d1dU, 0xf4f4f4f4U, 0x61616161U, 0x3b3b3b3bU, - 0x10101010U, 0xd8d8d8d8U, 0x68686868U, 0xa0a0a0a0U, - 0xb1b1b1b1U, 0x0a0a0a0aU, 0x69696969U, 0x6c6c6c6cU, - 0x49494949U, 0xfafafafaU, 0x76767676U, 0xc4c4c4c4U, - 0x9e9e9e9eU, 0x9b9b9b9bU, 0x6e6e6e6eU, 0x99999999U, - 0xc2c2c2c2U, 0xb7b7b7b7U, 0x98989898U, 0xbcbcbcbcU, - 0x8f8f8f8fU, 0x85858585U, 0x1f1f1f1fU, 0xb4b4b4b4U, - 0xf8f8f8f8U, 0x11111111U, 0x2e2e2e2eU, 0x00000000U, - 0x25252525U, 0x1c1c1c1cU, 0x2a2a2a2aU, 0x3d3d3d3dU, - 0x05050505U, 0x4f4f4f4fU, 0x7b7b7b7bU, 0xb2b2b2b2U, - 0x32323232U, 0x90909090U, 0xafafafafU, 0x19191919U, - 0xa3a3a3a3U, 0xf7f7f7f7U, 0x73737373U, 0x9d9d9d9dU, - 0x15151515U, 0x74747474U, 0xeeeeeeeeU, 0xcacacacaU, - 0x9f9f9f9fU, 0x0f0f0f0fU, 0x1b1b1b1bU, 0x75757575U, - 0x86868686U, 0x84848484U, 0x9c9c9c9cU, 0x4a4a4a4aU, - 0x97979797U, 0x1a1a1a1aU, 0x65656565U, 0xf6f6f6f6U, - 0xededededU, 0x09090909U, 0xbbbbbbbbU, 0x26262626U, - 0x83838383U, 0xebebebebU, 0x6f6f6f6fU, 0x81818181U, - 0x04040404U, 0x6a6a6a6aU, 0x43434343U, 0x01010101U, - 0x17171717U, 0xe1e1e1e1U, 0x87878787U, 0xf5f5f5f5U, - 0x8d8d8d8dU, 0xe3e3e3e3U, 0x23232323U, 0x80808080U, - 0x44444444U, 0x16161616U, 0x66666666U, 0x21212121U, - 0xfefefefeU, 0xd5d5d5d5U, 0x31313131U, 0xd9d9d9d9U, - 0x35353535U, 0x18181818U, 0x02020202U, 0x64646464U, - 0xf2f2f2f2U, 0xf1f1f1f1U, 0x56565656U, 0xcdcdcdcdU, - 0x82828282U, 0xc8c8c8c8U, 0xbabababaU, 0xf0f0f0f0U, - 0xefefefefU, 0xe9e9e9e9U, 0xe8e8e8e8U, 0xfdfdfdfdU, - 0x89898989U, 0xd7d7d7d7U, 0xc7c7c7c7U, 0xb5b5b5b5U, - 0xa4a4a4a4U, 0x2f2f2f2fU, 0x95959595U, 0x13131313U, - 0x0b0b0b0bU, 0xf3f3f3f3U, 0xe0e0e0e0U, 0x37373737U, -}; - -static const ulong32 T5[256] = { - 0x00000000U, 0x01020608U, 0x02040c10U, 0x03060a18U, - 0x04081820U, 0x050a1e28U, 0x060c1430U, 0x070e1238U, - 0x08103040U, 0x09123648U, 0x0a143c50U, 0x0b163a58U, - 0x0c182860U, 0x0d1a2e68U, 0x0e1c2470U, 0x0f1e2278U, - 0x10206080U, 0x11226688U, 0x12246c90U, 0x13266a98U, - 0x142878a0U, 0x152a7ea8U, 0x162c74b0U, 0x172e72b8U, - 0x183050c0U, 0x193256c8U, 0x1a345cd0U, 0x1b365ad8U, - 0x1c3848e0U, 0x1d3a4ee8U, 0x1e3c44f0U, 0x1f3e42f8U, - 0x2040c01dU, 0x2142c615U, 0x2244cc0dU, 0x2346ca05U, - 0x2448d83dU, 0x254ade35U, 0x264cd42dU, 0x274ed225U, - 0x2850f05dU, 0x2952f655U, 0x2a54fc4dU, 0x2b56fa45U, - 0x2c58e87dU, 0x2d5aee75U, 0x2e5ce46dU, 0x2f5ee265U, - 0x3060a09dU, 0x3162a695U, 0x3264ac8dU, 0x3366aa85U, - 0x3468b8bdU, 0x356abeb5U, 0x366cb4adU, 0x376eb2a5U, - 0x387090ddU, 0x397296d5U, 0x3a749ccdU, 0x3b769ac5U, - 0x3c7888fdU, 0x3d7a8ef5U, 0x3e7c84edU, 0x3f7e82e5U, - 0x40809d3aU, 0x41829b32U, 0x4284912aU, 0x43869722U, - 0x4488851aU, 0x458a8312U, 0x468c890aU, 0x478e8f02U, - 0x4890ad7aU, 0x4992ab72U, 0x4a94a16aU, 0x4b96a762U, - 0x4c98b55aU, 0x4d9ab352U, 0x4e9cb94aU, 0x4f9ebf42U, - 0x50a0fdbaU, 0x51a2fbb2U, 0x52a4f1aaU, 0x53a6f7a2U, - 0x54a8e59aU, 0x55aae392U, 0x56ace98aU, 0x57aeef82U, - 0x58b0cdfaU, 0x59b2cbf2U, 0x5ab4c1eaU, 0x5bb6c7e2U, - 0x5cb8d5daU, 0x5dbad3d2U, 0x5ebcd9caU, 0x5fbedfc2U, - 0x60c05d27U, 0x61c25b2fU, 0x62c45137U, 0x63c6573fU, - 0x64c84507U, 0x65ca430fU, 0x66cc4917U, 0x67ce4f1fU, - 0x68d06d67U, 0x69d26b6fU, 0x6ad46177U, 0x6bd6677fU, - 0x6cd87547U, 0x6dda734fU, 0x6edc7957U, 0x6fde7f5fU, - 0x70e03da7U, 0x71e23bafU, 0x72e431b7U, 0x73e637bfU, - 0x74e82587U, 0x75ea238fU, 0x76ec2997U, 0x77ee2f9fU, - 0x78f00de7U, 0x79f20befU, 0x7af401f7U, 0x7bf607ffU, - 0x7cf815c7U, 0x7dfa13cfU, 0x7efc19d7U, 0x7ffe1fdfU, - 0x801d2774U, 0x811f217cU, 0x82192b64U, 0x831b2d6cU, - 0x84153f54U, 0x8517395cU, 0x86113344U, 0x8713354cU, - 0x880d1734U, 0x890f113cU, 0x8a091b24U, 0x8b0b1d2cU, - 0x8c050f14U, 0x8d07091cU, 0x8e010304U, 0x8f03050cU, - 0x903d47f4U, 0x913f41fcU, 0x92394be4U, 0x933b4decU, - 0x94355fd4U, 0x953759dcU, 0x963153c4U, 0x973355ccU, - 0x982d77b4U, 0x992f71bcU, 0x9a297ba4U, 0x9b2b7dacU, - 0x9c256f94U, 0x9d27699cU, 0x9e216384U, 0x9f23658cU, - 0xa05de769U, 0xa15fe161U, 0xa259eb79U, 0xa35bed71U, - 0xa455ff49U, 0xa557f941U, 0xa651f359U, 0xa753f551U, - 0xa84dd729U, 0xa94fd121U, 0xaa49db39U, 0xab4bdd31U, - 0xac45cf09U, 0xad47c901U, 0xae41c319U, 0xaf43c511U, - 0xb07d87e9U, 0xb17f81e1U, 0xb2798bf9U, 0xb37b8df1U, - 0xb4759fc9U, 0xb57799c1U, 0xb67193d9U, 0xb77395d1U, - 0xb86db7a9U, 0xb96fb1a1U, 0xba69bbb9U, 0xbb6bbdb1U, - 0xbc65af89U, 0xbd67a981U, 0xbe61a399U, 0xbf63a591U, - 0xc09dba4eU, 0xc19fbc46U, 0xc299b65eU, 0xc39bb056U, - 0xc495a26eU, 0xc597a466U, 0xc691ae7eU, 0xc793a876U, - 0xc88d8a0eU, 0xc98f8c06U, 0xca89861eU, 0xcb8b8016U, - 0xcc85922eU, 0xcd879426U, 0xce819e3eU, 0xcf839836U, - 0xd0bddaceU, 0xd1bfdcc6U, 0xd2b9d6deU, 0xd3bbd0d6U, - 0xd4b5c2eeU, 0xd5b7c4e6U, 0xd6b1cefeU, 0xd7b3c8f6U, - 0xd8adea8eU, 0xd9afec86U, 0xdaa9e69eU, 0xdbabe096U, - 0xdca5f2aeU, 0xdda7f4a6U, 0xdea1febeU, 0xdfa3f8b6U, - 0xe0dd7a53U, 0xe1df7c5bU, 0xe2d97643U, 0xe3db704bU, - 0xe4d56273U, 0xe5d7647bU, 0xe6d16e63U, 0xe7d3686bU, - 0xe8cd4a13U, 0xe9cf4c1bU, 0xeac94603U, 0xebcb400bU, - 0xecc55233U, 0xedc7543bU, 0xeec15e23U, 0xefc3582bU, - 0xf0fd1ad3U, 0xf1ff1cdbU, 0xf2f916c3U, 0xf3fb10cbU, - 0xf4f502f3U, 0xf5f704fbU, 0xf6f10ee3U, 0xf7f308ebU, - 0xf8ed2a93U, 0xf9ef2c9bU, 0xfae92683U, 0xfbeb208bU, - 0xfce532b3U, 0xfde734bbU, 0xfee13ea3U, 0xffe338abU, -}; - -/** - * The round constants. - */ -static const ulong32 rc[] = { - 0xa7d3e671U, 0xd0ac4d79U, 0x3ac991fcU, 0x1e4754bdU, - 0x8ca57afbU, 0x63b8ddd4U, 0xe5b3c5beU, 0xa9880ca2U, - 0x39df29daU, 0x2ba8cb4cU, 0x4b22aa24U, 0x4170a6f9U, - 0x5ae2b036U, 0x7de433ffU, 0x6020088bU, 0x5eab7f78U, - 0x7c2c57d2U, 0xdc6d7e0dU, 0x5394c328U, -}; - -#endif - - /** - Initialize the Anubis block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ -#ifdef LTC_CLEAN_STACK -static int s_anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -#else -int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -#endif -{ - int N, R, i, pos, r; - ulong32 kappa[MAX_N]; - ulong32 inter[MAX_N] = { 0 }; /* initialize as all zeroes */ - ulong32 v, K0, K1, K2, K3; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - - /* Valid sizes (in bytes) are 16, 20, 24, 28, 32, 36, and 40. */ - if ((keylen & 3) || (keylen < 16) || (keylen > 40)) { - return CRYPT_INVALID_KEYSIZE; - } - skey->anubis.keyBits = keylen*8; - - /* - * determine the N length parameter: - * (N.B. it is assumed that the key length is valid!) - */ - N = skey->anubis.keyBits >> 5; - - /* - * determine number of rounds from key size: - */ - skey->anubis.R = R = 8 + N; - - if (num_rounds != 0 && num_rounds != skey->anubis.R) { - return CRYPT_INVALID_ROUNDS; - } - - /* - * map cipher key to initial key state (mu): - */ - for (i = 0, pos = 0; i < N; i++, pos += 4) { - kappa[i] = - (((ulong32)key[pos ]) << 24) ^ - (((ulong32)key[pos + 1]) << 16) ^ - (((ulong32)key[pos + 2]) << 8) ^ - (((ulong32)key[pos + 3]) ); - } - - /* - * generate R + 1 round keys: - */ - for (r = 0; r <= R; r++) { - /* - * generate r-th round key K^r: - */ - K0 = T4[(kappa[N - 1] >> 24) & 0xff]; - K1 = T4[(kappa[N - 1] >> 16) & 0xff]; - K2 = T4[(kappa[N - 1] >> 8) & 0xff]; - K3 = T4[(kappa[N - 1] ) & 0xff]; - for (i = N - 2; i >= 0; i--) { - K0 = T4[(kappa[i] >> 24) & 0xff] ^ - (T5[(K0 >> 24) & 0xff] & 0xff000000U) ^ - (T5[(K0 >> 16) & 0xff] & 0x00ff0000U) ^ - (T5[(K0 >> 8) & 0xff] & 0x0000ff00U) ^ - (T5[(K0 ) & 0xff] & 0x000000ffU); - K1 = T4[(kappa[i] >> 16) & 0xff] ^ - (T5[(K1 >> 24) & 0xff] & 0xff000000U) ^ - (T5[(K1 >> 16) & 0xff] & 0x00ff0000U) ^ - (T5[(K1 >> 8) & 0xff] & 0x0000ff00U) ^ - (T5[(K1 ) & 0xff] & 0x000000ffU); - K2 = T4[(kappa[i] >> 8) & 0xff] ^ - (T5[(K2 >> 24) & 0xff] & 0xff000000U) ^ - (T5[(K2 >> 16) & 0xff] & 0x00ff0000U) ^ - (T5[(K2 >> 8) & 0xff] & 0x0000ff00U) ^ - (T5[(K2 ) & 0xff] & 0x000000ffU); - K3 = T4[(kappa[i] ) & 0xff] ^ - (T5[(K3 >> 24) & 0xff] & 0xff000000U) ^ - (T5[(K3 >> 16) & 0xff] & 0x00ff0000U) ^ - (T5[(K3 >> 8) & 0xff] & 0x0000ff00U) ^ - (T5[(K3 ) & 0xff] & 0x000000ffU); - } - /* - -- this is the code to use with the large U tables: - K0 = K1 = K2 = K3 = 0; - for (i = 0; i < N; i++) { - K0 ^= U[i][(kappa[i] >> 24) & 0xff]; - K1 ^= U[i][(kappa[i] >> 16) & 0xff]; - K2 ^= U[i][(kappa[i] >> 8) & 0xff]; - K3 ^= U[i][(kappa[i] ) & 0xff]; - } - */ - skey->anubis.roundKeyEnc[r][0] = K0; - skey->anubis.roundKeyEnc[r][1] = K1; - skey->anubis.roundKeyEnc[r][2] = K2; - skey->anubis.roundKeyEnc[r][3] = K3; - - /* - * compute kappa^{r+1} from kappa^r: - */ - if (r == R) { - break; - } - for (i = 0; i < N; i++) { - int j = i; - inter[i] = T0[(kappa[j--] >> 24) & 0xff]; if (j < 0) j = N - 1; - inter[i] ^= T1[(kappa[j--] >> 16) & 0xff]; if (j < 0) j = N - 1; - inter[i] ^= T2[(kappa[j--] >> 8) & 0xff]; if (j < 0) j = N - 1; - inter[i] ^= T3[(kappa[j ] ) & 0xff]; - } - kappa[0] = inter[0] ^ rc[r]; - for (i = 1; i < N; i++) { - kappa[i] = inter[i]; - } - } - - /* - * generate inverse key schedule: K'^0 = K^R, K'^R = K^0, K'^r = theta(K^{R-r}): - */ - for (i = 0; i < 4; i++) { - skey->anubis.roundKeyDec[0][i] = skey->anubis.roundKeyEnc[R][i]; - skey->anubis.roundKeyDec[R][i] = skey->anubis.roundKeyEnc[0][i]; - } - for (r = 1; r < R; r++) { - for (i = 0; i < 4; i++) { - v = skey->anubis.roundKeyEnc[R - r][i]; - skey->anubis.roundKeyDec[r][i] = - T0[T4[(v >> 24) & 0xff] & 0xff] ^ - T1[T4[(v >> 16) & 0xff] & 0xff] ^ - T2[T4[(v >> 8) & 0xff] & 0xff] ^ - T3[T4[(v ) & 0xff] & 0xff]; - } - } - - return CRYPT_OK; -} - -#ifdef LTC_CLEAN_STACK -int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - int err; - err = s_anubis_setup(key, keylen, num_rounds, skey); - burn_stack(sizeof(int) * 5 + sizeof(ulong32) * (MAX_N + MAX_N + 5)); - return err; -} -#endif - - -static void anubis_crypt(const unsigned char *plaintext, unsigned char *ciphertext, - const ulong32 roundKey[18 + 1][4], int R) { - int i, pos, r; - ulong32 state[4]; - ulong32 inter[4]; - - /* - * map plaintext block to cipher state (mu) - * and add initial round key (sigma[K^0]): - */ - for (i = 0, pos = 0; i < 4; i++, pos += 4) { - state[i] = - (((ulong32)plaintext[pos ]) << 24) ^ - (((ulong32)plaintext[pos + 1]) << 16) ^ - (((ulong32)plaintext[pos + 2]) << 8) ^ - (((ulong32)plaintext[pos + 3]) ) ^ - roundKey[0][i]; - } - - /* - * R - 1 full rounds: - */ - for (r = 1; r < R; r++) { - inter[0] = - T0[(state[0] >> 24) & 0xff] ^ - T1[(state[1] >> 24) & 0xff] ^ - T2[(state[2] >> 24) & 0xff] ^ - T3[(state[3] >> 24) & 0xff] ^ - roundKey[r][0]; - inter[1] = - T0[(state[0] >> 16) & 0xff] ^ - T1[(state[1] >> 16) & 0xff] ^ - T2[(state[2] >> 16) & 0xff] ^ - T3[(state[3] >> 16) & 0xff] ^ - roundKey[r][1]; - inter[2] = - T0[(state[0] >> 8) & 0xff] ^ - T1[(state[1] >> 8) & 0xff] ^ - T2[(state[2] >> 8) & 0xff] ^ - T3[(state[3] >> 8) & 0xff] ^ - roundKey[r][2]; - inter[3] = - T0[(state[0] ) & 0xff] ^ - T1[(state[1] ) & 0xff] ^ - T2[(state[2] ) & 0xff] ^ - T3[(state[3] ) & 0xff] ^ - roundKey[r][3]; - state[0] = inter[0]; - state[1] = inter[1]; - state[2] = inter[2]; - state[3] = inter[3]; - } - - /* - * last round: - */ - inter[0] = - (T0[(state[0] >> 24) & 0xff] & 0xff000000U) ^ - (T1[(state[1] >> 24) & 0xff] & 0x00ff0000U) ^ - (T2[(state[2] >> 24) & 0xff] & 0x0000ff00U) ^ - (T3[(state[3] >> 24) & 0xff] & 0x000000ffU) ^ - roundKey[R][0]; - inter[1] = - (T0[(state[0] >> 16) & 0xff] & 0xff000000U) ^ - (T1[(state[1] >> 16) & 0xff] & 0x00ff0000U) ^ - (T2[(state[2] >> 16) & 0xff] & 0x0000ff00U) ^ - (T3[(state[3] >> 16) & 0xff] & 0x000000ffU) ^ - roundKey[R][1]; - inter[2] = - (T0[(state[0] >> 8) & 0xff] & 0xff000000U) ^ - (T1[(state[1] >> 8) & 0xff] & 0x00ff0000U) ^ - (T2[(state[2] >> 8) & 0xff] & 0x0000ff00U) ^ - (T3[(state[3] >> 8) & 0xff] & 0x000000ffU) ^ - roundKey[R][2]; - inter[3] = - (T0[(state[0] ) & 0xff] & 0xff000000U) ^ - (T1[(state[1] ) & 0xff] & 0x00ff0000U) ^ - (T2[(state[2] ) & 0xff] & 0x0000ff00U) ^ - (T3[(state[3] ) & 0xff] & 0x000000ffU) ^ - roundKey[R][3]; - - /* - * map cipher state to ciphertext block (mu^{-1}): - */ - for (i = 0, pos = 0; i < 4; i++, pos += 4) { - ulong32 w = inter[i]; - ciphertext[pos ] = (unsigned char)(w >> 24); - ciphertext[pos + 1] = (unsigned char)(w >> 16); - ciphertext[pos + 2] = (unsigned char)(w >> 8); - ciphertext[pos + 3] = (unsigned char)(w ); - } -} - -/** - Encrypts a block of text with Anubis - @param pt The input plaintext (16 bytes) - @param ct The output ciphertext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - if (skey->anubis.R < 12 || skey->anubis.R > 18) { - return CRYPT_INVALID_ROUNDS; - } - - anubis_crypt(pt, ct, skey->anubis.roundKeyEnc, skey->anubis.R); - return CRYPT_OK; -} - -/** - Decrypts a block of text with Anubis - @param ct The input ciphertext (16 bytes) - @param pt The output plaintext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - if (skey->anubis.R < 12 || skey->anubis.R > 18) { - return CRYPT_INVALID_ROUNDS; - } - - anubis_crypt(ct, pt, skey->anubis.roundKeyDec, skey->anubis.R); - return CRYPT_OK; -} - -/** - Performs a self-test of the Anubis block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ -int anubis_test(void) -{ -#if !defined(LTC_TEST) - return CRYPT_NOP; -#else - static const struct test { - int keylen; - unsigned char pt[16], ct[16], key[40]; - } tests[] = { -#ifndef LTC_ANUBIS_TWEAK - /**** ORIGINAL LTC_ANUBIS ****/ - /* 128 bit keys */ -{ - 16, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xF0, 0x68, 0x60, 0xFC, 0x67, 0x30, 0xE8, 0x18, - 0xF1, 0x32, 0xC7, 0x8A, 0xF4, 0x13, 0x2A, 0xFE }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}, { - 16, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xA8, 0x66, 0x84, 0x80, 0x07, 0x74, 0x5C, 0x89, - 0xFC, 0x5E, 0xB5, 0xBA, 0xD4, 0xFE, 0x32, 0x6D }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } -}, - - /* 160-bit keys */ -{ - 20, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xBD, 0x5E, 0x32, 0xBE, 0x51, 0x67, 0xA8, 0xE2, - 0x72, 0xD7, 0x95, 0x0F, 0x83, 0xC6, 0x8C, 0x31 }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 } -}, { - 20, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x4C, 0x1F, 0x86, 0x2E, 0x11, 0xEB, 0xCE, 0xEB, - 0xFE, 0xB9, 0x73, 0xC9, 0xDF, 0xEF, 0x7A, 0xDB }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01 } -}, - - /* 192-bit keys */ -{ - 24, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x17, 0xAC, 0x57, 0x44, 0x9D, 0x59, 0x61, 0x66, - 0xD0, 0xC7, 0x9E, 0x04, 0x7C, 0xC7, 0x58, 0xF0 }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}, { - 24, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x71, 0x52, 0xB4, 0xEB, 0x1D, 0xAA, 0x36, 0xFD, - 0x57, 0x14, 0x5F, 0x57, 0x04, 0x9F, 0x70, 0x74 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } -}, - - /* 224-bit keys */ -{ - 28, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xA2, 0xF0, 0xA6, 0xB9, 0x17, 0x93, 0x2A, 0x3B, - 0xEF, 0x08, 0xE8, 0x7A, 0x58, 0xD6, 0xF8, 0x53 }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 } -}, { - 28, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xF0, 0xCA, 0xFC, 0x78, 0x8B, 0x4B, 0x4E, 0x53, - 0x8B, 0xC4, 0x32, 0x6A, 0xF5, 0xB9, 0x1B, 0x5F }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01 } -}, - - /* 256-bit keys */ -{ - 32, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xE0, 0x86, 0xAC, 0x45, 0x6B, 0x3C, 0xE5, 0x13, - 0xED, 0xF5, 0xDF, 0xDD, 0xD6, 0x3B, 0x71, 0x93 }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}, { - 32, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x50, 0x01, 0xB9, 0xF5, 0x21, 0xC1, 0xC1, 0x29, - 0x00, 0xD5, 0xEC, 0x98, 0x2B, 0x9E, 0xE8, 0x21 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } -}, - - /* 288-bit keys */ -{ - 36, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xE8, 0xF4, 0xAF, 0x2B, 0x21, 0xA0, 0x87, 0x9B, - 0x41, 0x95, 0xB9, 0x71, 0x75, 0x79, 0x04, 0x7C }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 } -}, { - 36, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xE6, 0xA6, 0xA5, 0xBC, 0x8B, 0x63, 0x6F, 0xE2, - 0xBD, 0xA7, 0xA7, 0x53, 0xAB, 0x40, 0x22, 0xE0 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01 } -}, - - /* 320-bit keys */ -{ - 40, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x17, 0x04, 0xD7, 0x2C, 0xC6, 0x85, 0x76, 0x02, - 0x4B, 0xCC, 0x39, 0x80, 0xD8, 0x22, 0xEA, 0xA4 }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}, { - 40, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x7A, 0x41, 0xE6, 0x7D, 0x4F, 0xD8, 0x64, 0xF0, - 0x44, 0xA8, 0x3C, 0x73, 0x81, 0x7E, 0x53, 0xD8 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } -} -#else - /**** Tweaked LTC_ANUBIS ****/ - /* 128 bit keys */ -{ - 16, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xB8, 0x35, 0xBD, 0xC3, 0x34, 0x82, 0x9D, 0x83, - 0x71, 0xBF, 0xA3, 0x71, 0xE4, 0xB3, 0xC4, 0xFD }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}, { - 16, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xE6, 0x14, 0x1E, 0xAF, 0xEB, 0xE0, 0x59, 0x3C, - 0x48, 0xE1, 0xCD, 0xF2, 0x1B, 0xBA, 0xA1, 0x89 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } -}, - - /* 160-bit keys */ -{ - 20, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x97, 0x59, 0x79, 0x4B, 0x5C, 0xA0, 0x70, 0x73, - 0x24, 0xEF, 0xB3, 0x58, 0x67, 0xCA, 0xD4, 0xB3 }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 } -}, { - 20, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xB8, 0x0D, 0xFB, 0x9B, 0xE4, 0xA1, 0x58, 0x87, - 0xB3, 0x76, 0xD5, 0x02, 0x18, 0x95, 0xC1, 0x2E }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01 } -}, - - /* 192-bit keys */ -{ - 24, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x7D, 0x62, 0x3B, 0x52, 0xC7, 0x4C, 0x64, 0xD8, - 0xEB, 0xC7, 0x2D, 0x57, 0x97, 0x85, 0x43, 0x8F }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}, { - 24, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xB1, 0x0A, 0x59, 0xDD, 0x5D, 0x5D, 0x8D, 0x67, - 0xEC, 0xEE, 0x4A, 0xC4, 0xBE, 0x4F, 0xA8, 0x4F }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } -}, - - /* 224-bit keys */ -{ - 28, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x68, 0x9E, 0x05, 0x94, 0x6A, 0x94, 0x43, 0x8F, - 0xE7, 0x8E, 0x37, 0x3D, 0x24, 0x97, 0x92, 0xF5 }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 } -}, { - 28, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xDD, 0xB7, 0xB0, 0xB4, 0xE9, 0xB4, 0x9B, 0x9C, - 0x38, 0x20, 0x25, 0x0B, 0x47, 0xC2, 0x1F, 0x89 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01 } -}, - - /* 256-bit keys */ -{ - 32, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x96, 0x00, 0xF0, 0x76, 0x91, 0x69, 0x29, 0x87, - 0xF5, 0xE5, 0x97, 0xDB, 0xDB, 0xAF, 0x1B, 0x0A }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}, { - 32, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x69, 0x9C, 0xAF, 0xDD, 0x94, 0xC7, 0xBC, 0x60, - 0x44, 0xFE, 0x02, 0x05, 0x8A, 0x6E, 0xEF, 0xBD }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } -}, - - /* 288-bit keys */ -{ - 36, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x0F, 0xC7, 0xA2, 0xC0, 0x11, 0x17, 0xAC, 0x43, - 0x52, 0x5E, 0xDF, 0x6C, 0xF3, 0x96, 0x33, 0x6C }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 } -}, { - 36, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xAD, 0x08, 0x4F, 0xED, 0x55, 0xA6, 0x94, 0x3E, - 0x7E, 0x5E, 0xED, 0x05, 0xA1, 0x9D, 0x41, 0xB4 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01 } -}, - - /* 320-bit keys */ -{ - 40, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xFE, 0xE2, 0x0E, 0x2A, 0x9D, 0xC5, 0x83, 0xBA, - 0xA3, 0xA6, 0xD6, 0xA6, 0xF2, 0xE8, 0x06, 0xA5 }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}, { - 40, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x86, 0x3D, 0xCC, 0x4A, 0x60, 0x34, 0x9C, 0x28, - 0xA7, 0xDA, 0xA4, 0x3B, 0x0A, 0xD7, 0xFD, 0xC7 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } -} -#endif -}; - int x, y; - unsigned char buf[2][16]; - symmetric_key skey; - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { - anubis_setup(tests[x].key, tests[x].keylen, 0, &skey); - anubis_ecb_encrypt(tests[x].pt, buf[0], &skey); - anubis_ecb_decrypt(buf[0], buf[1], &skey); - if (ltc_compare_testvector(buf[0], 16, tests[x].ct, 16, "Anubis Encrypt", x) || - ltc_compare_testvector(buf[1], 16, tests[x].pt, 16, "Anubis Decrypt", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - - for (y = 0; y < 1000; y++) anubis_ecb_encrypt(buf[0], buf[0], &skey); - for (y = 0; y < 1000; y++) anubis_ecb_decrypt(buf[0], buf[0], &skey); - if (ltc_compare_testvector(buf[0], 16, tests[x].ct, 16, "Anubis 1000", 1000)) { - return CRYPT_FAIL_TESTVECTOR; - } - - } - return CRYPT_OK; -#endif -} - -/** Terminate the context - @param skey The scheduled key -*/ -void anubis_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int anubis_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize >= 40) { - *keysize = 40; - } else if (*keysize >= 36) { - *keysize = 36; - } else if (*keysize >= 32) { - *keysize = 32; - } else if (*keysize >= 28) { - *keysize = 28; - } else if (*keysize >= 24) { - *keysize = 24; - } else if (*keysize >= 20) { - *keysize = 20; - } else if (*keysize >= 16) { - *keysize = 16; - } else { - return CRYPT_INVALID_KEYSIZE; - } - return CRYPT_OK; -} - -#undef MAX_N -#undef T0 -#undef T1 -#undef T2 -#undef T3 -#undef T4 -#undef T5 -#undef rc - -#endif - diff --git a/src/ciphers/aria.c b/src/ciphers/aria.c deleted file mode 100644 index 858754ca..00000000 --- a/src/ciphers/aria.c +++ /dev/null @@ -1,298 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file aria.c - ARIA block cipher (RFC 5794) -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_ARIA - -const struct ltc_cipher_descriptor aria_desc = { - "aria", - 29, - 16, 32, 16, 12, /* min_key_len, max_key_len, block_len, default_rounds */ - &aria_setup, - &aria_ecb_encrypt, - &aria_ecb_decrypt, - &aria_test, - &aria_done, - &aria_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -/* SB1: AES forward S-box */ -static const unsigned char SB1[256] = { - 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76, - 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0, - 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15, - 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75, - 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84, - 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf, - 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8, - 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2, - 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73, - 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb, - 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79, - 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08, - 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a, - 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e, - 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf, - 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16 -}; - -/* SB2 */ -static const unsigned char SB2[256] = { - 0xe2,0x4e,0x54,0xfc,0x94,0xc2,0x4a,0xcc,0x62,0x0d,0x6a,0x46,0x3c,0x4d,0x8b,0xd1, - 0x5e,0xfa,0x64,0xcb,0xb4,0x97,0xbe,0x2b,0xbc,0x77,0x2e,0x03,0xd3,0x19,0x59,0xc1, - 0x1d,0x06,0x41,0x6b,0x55,0xf0,0x99,0x69,0xea,0x9c,0x18,0xae,0x63,0xdf,0xe7,0xbb, - 0x00,0x73,0x66,0xfb,0x96,0x4c,0x85,0xe4,0x3a,0x09,0x45,0xaa,0x0f,0xee,0x10,0xeb, - 0x2d,0x7f,0xf4,0x29,0xac,0xcf,0xad,0x91,0x8d,0x78,0xc8,0x95,0xf9,0x2f,0xce,0xcd, - 0x08,0x7a,0x88,0x38,0x5c,0x83,0x2a,0x28,0x47,0xdb,0xb8,0xc7,0x93,0xa4,0x12,0x53, - 0xff,0x87,0x0e,0x31,0x36,0x21,0x58,0x48,0x01,0x8e,0x37,0x74,0x32,0xca,0xe9,0xb1, - 0xb7,0xab,0x0c,0xd7,0xc4,0x56,0x42,0x26,0x07,0x98,0x60,0xd9,0xb6,0xb9,0x11,0x40, - 0xec,0x20,0x8c,0xbd,0xa0,0xc9,0x84,0x04,0x49,0x23,0xf1,0x4f,0x50,0x1f,0x13,0xdc, - 0xd8,0xc0,0x9e,0x57,0xe3,0xc3,0x7b,0x65,0x3b,0x02,0x8f,0x3e,0xe8,0x25,0x92,0xe5, - 0x15,0xdd,0xfd,0x17,0xa9,0xbf,0xd4,0x9a,0x7e,0xc5,0x39,0x67,0xfe,0x76,0x9d,0x43, - 0xa7,0xe1,0xd0,0xf5,0x68,0xf2,0x1b,0x34,0x70,0x05,0xa3,0x8a,0xd5,0x79,0x86,0xa8, - 0x30,0xc6,0x51,0x4b,0x1e,0xa6,0x27,0xf6,0x35,0xd2,0x6e,0x24,0x16,0x82,0x5f,0xda, - 0xe6,0x75,0xa2,0xef,0x2c,0xb2,0x1c,0x9f,0x5d,0x6f,0x80,0x0a,0x72,0x44,0x9b,0x6c, - 0x90,0x0b,0x5b,0x33,0x7d,0x5a,0x52,0xf3,0x61,0xa1,0xf7,0xb0,0xd6,0x3f,0x7c,0x6d, - 0xed,0x14,0xe0,0xa5,0x3d,0x22,0xb3,0xf8,0x89,0xde,0x71,0x1a,0xaf,0xba,0xb5,0x81 -}; - -/* SB3: AES inverse S-box */ -static const unsigned char SB3[256] = { - 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38,0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb, - 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87,0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb, - 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d,0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e, - 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2,0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25, - 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16,0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92, - 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda,0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84, - 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a,0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06, - 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02,0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b, - 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea,0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73, - 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85,0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e, - 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89,0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b, - 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20,0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4, - 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31,0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f, - 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d,0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef, - 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0,0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61, - 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26,0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d -}; - -/* SB4 */ -static const unsigned char SB4[256] = { - 0x30,0x68,0x99,0x1b,0x87,0xb9,0x21,0x78,0x50,0x39,0xdb,0xe1,0x72,0x09,0x62,0x3c, - 0x3e,0x7e,0x5e,0x8e,0xf1,0xa0,0xcc,0xa3,0x2a,0x1d,0xfb,0xb6,0xd6,0x20,0xc4,0x8d, - 0x81,0x65,0xf5,0x89,0xcb,0x9d,0x77,0xc6,0x57,0x43,0x56,0x17,0xd4,0x40,0x1a,0x4d, - 0xc0,0x63,0x6c,0xe3,0xb7,0xc8,0x64,0x6a,0x53,0xaa,0x38,0x98,0x0c,0xf4,0x9b,0xed, - 0x7f,0x22,0x76,0xaf,0xdd,0x3a,0x0b,0x58,0x67,0x88,0x06,0xc3,0x35,0x0d,0x01,0x8b, - 0x8c,0xc2,0xe6,0x5f,0x02,0x24,0x75,0x93,0x66,0x1e,0xe5,0xe2,0x54,0xd8,0x10,0xce, - 0x7a,0xe8,0x08,0x2c,0x12,0x97,0x32,0xab,0xb4,0x27,0x0a,0x23,0xdf,0xef,0xca,0xd9, - 0xb8,0xfa,0xdc,0x31,0x6b,0xd1,0xad,0x19,0x49,0xbd,0x51,0x96,0xee,0xe4,0xa8,0x41, - 0xda,0xff,0xcd,0x55,0x86,0x36,0xbe,0x61,0x52,0xf8,0xbb,0x0e,0x82,0x48,0x69,0x9a, - 0xe0,0x47,0x9e,0x5c,0x04,0x4b,0x34,0x15,0x79,0x26,0xa7,0xde,0x29,0xae,0x92,0xd7, - 0x84,0xe9,0xd2,0xba,0x5d,0xf3,0xc5,0xb0,0xbf,0xa4,0x3b,0x71,0x44,0x46,0x2b,0xfc, - 0xeb,0x6f,0xd5,0xf6,0x14,0xfe,0x7c,0x70,0x5a,0x7d,0xfd,0x2f,0x18,0x83,0x16,0xa5, - 0x91,0x1f,0x05,0x95,0x74,0xa9,0xc1,0x5b,0x4a,0x85,0x6d,0x13,0x07,0x4f,0x4e,0x45, - 0xb2,0x0f,0xc9,0x1c,0xa6,0xbc,0xec,0x73,0x90,0x7b,0xcf,0x59,0x8f,0xa1,0xf9,0x2d, - 0xf2,0xb1,0x00,0x94,0x37,0x9f,0xd0,0x2e,0x9c,0x6e,0x28,0x3f,0x80,0xf0,0x3d,0xd3, - 0x25,0x8a,0xb5,0xe7,0x42,0xb3,0xc7,0xea,0xf7,0x4c,0x11,0x33,0x03,0xa2,0xac,0x60 -}; - -/* SL1: i mod 4 -> {SB1,SB2,SB3,SB4}; SL2: i mod 4 -> {SB3,SB4,SB1,SB2} */ -static const unsigned char * const SL[2][4] = { - { SB1, SB2, SB3, SB4 }, - { SB3, SB4, SB1, SB2 } -}; - -/* RFC 5794 round-key constants C1, C2, C3 */ -static const unsigned char CC[3][16] = { - { 0x51,0x7c,0xc1,0xb7,0x27,0x22,0x0a,0x94,0xfe,0x13,0xab,0xe8,0xfa,0x9a,0x6e,0xe0 }, - { 0x6d,0xb1,0x4a,0xcc,0x9e,0x21,0xc8,0x20,0xff,0x28,0xb1,0xd5,0xef,0x5d,0xe2,0xb0 }, - { 0xdb,0x92,0x37,0x1d,0x21,0x26,0xe9,0x70,0x03,0x24,0x97,0x75,0x04,0xe8,0xc9,0x0e } -}; - -/* Diffusion layer A (involution), RFC 5794 section 2.4.3 */ -static LTC_INLINE void s_aria_A(const unsigned char *x, unsigned char *y) -{ - y[ 0] = x[ 3] ^ x[ 4] ^ x[ 6] ^ x[ 8] ^ x[ 9] ^ x[13] ^ x[14]; - y[ 1] = x[ 2] ^ x[ 5] ^ x[ 7] ^ x[ 8] ^ x[ 9] ^ x[12] ^ x[15]; - y[ 2] = x[ 1] ^ x[ 4] ^ x[ 6] ^ x[10] ^ x[11] ^ x[12] ^ x[15]; - y[ 3] = x[ 0] ^ x[ 5] ^ x[ 7] ^ x[10] ^ x[11] ^ x[13] ^ x[14]; - y[ 4] = x[ 0] ^ x[ 2] ^ x[ 5] ^ x[ 8] ^ x[11] ^ x[14] ^ x[15]; - y[ 5] = x[ 1] ^ x[ 3] ^ x[ 4] ^ x[ 9] ^ x[10] ^ x[14] ^ x[15]; - y[ 6] = x[ 0] ^ x[ 2] ^ x[ 7] ^ x[ 9] ^ x[10] ^ x[12] ^ x[13]; - y[ 7] = x[ 1] ^ x[ 3] ^ x[ 6] ^ x[ 8] ^ x[11] ^ x[12] ^ x[13]; - y[ 8] = x[ 0] ^ x[ 1] ^ x[ 4] ^ x[ 7] ^ x[10] ^ x[13] ^ x[15]; - y[ 9] = x[ 0] ^ x[ 1] ^ x[ 5] ^ x[ 6] ^ x[11] ^ x[12] ^ x[14]; - y[10] = x[ 2] ^ x[ 3] ^ x[ 5] ^ x[ 6] ^ x[ 8] ^ x[13] ^ x[15]; - y[11] = x[ 2] ^ x[ 3] ^ x[ 4] ^ x[ 7] ^ x[ 9] ^ x[12] ^ x[14]; - y[12] = x[ 1] ^ x[ 2] ^ x[ 6] ^ x[ 7] ^ x[ 9] ^ x[11] ^ x[12]; - y[13] = x[ 0] ^ x[ 3] ^ x[ 6] ^ x[ 7] ^ x[ 8] ^ x[10] ^ x[13]; - y[14] = x[ 0] ^ x[ 3] ^ x[ 4] ^ x[ 5] ^ x[ 9] ^ x[11] ^ x[14]; - y[15] = x[ 1] ^ x[ 2] ^ x[ 4] ^ x[ 5] ^ x[ 8] ^ x[10] ^ x[15]; -} - -/* Round: state := A( SLj(state XOR rk) ), where j selects SL1 or SL2 */ -static LTC_INLINE void s_aria_round(int j, unsigned char *state, const unsigned char *rk) -{ - unsigned char t[16]; - int i; - for (i = 0; i < 16; i++) t[i] = SL[j][i & 3][state[i] ^ rk[i]]; - s_aria_A(t, state); -} - -/* 128-bit left circular rotation by 'count' bits (0 < count < 128, count not a multiple of 8) */ -static void s_aria_rotl128(const unsigned char *in, unsigned count, unsigned char *out) -{ - unsigned x, w = (count >> 3) & 15, b = count & 7; - for (x = 0; x < 16; x++) { - out[x] = (unsigned char)((in[(x + w) & 15] << b) | (in[(x + w + 1) & 15] >> (8 - b))); - } -} - -int aria_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - /* left-rotation amounts for round-key groups 0..4 (>>>19 = <<<109, >>>31 = <<<97) */ - static const unsigned rot_amt[5] = { 109, 97, 61, 31, 19 }; - /* per key size: index of which constant goes into CK1, CK2, CK3 */ - static const unsigned char ck_idx[3][3] = { {0,1,2}, {1,2,0}, {2,0,1} }; - unsigned char W[4][16], t[16], rW[16]; - int i, k, j, n, sel; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - if (keylen != 16 && keylen != 24 && keylen != 32) return CRYPT_INVALID_KEYSIZE; - n = 8 + keylen / 4; /* 12, 14, 16 */ - if (num_rounds != 0 && num_rounds != n) return CRYPT_INVALID_ROUNDS; - skey->aria.R = n; - - /* W0 = KL = first 16 bytes of key */ - XMEMCPY(W[0], key, 16); - /* KR padded with zeros into t (reused as KR scratch) */ - zeromem(t, 16); - if (keylen > 16) XMEMCPY(t, key + 16, (size_t)keylen - 16); - - /* W1 = FO(W0, CK1) XOR KR; W2 = FE(W1, CK2) XOR W0; W3 = FO(W2, CK3) XOR W1 */ - sel = (keylen - 16) / 8; - XMEMCPY(W[1], W[0], 16); - s_aria_round(0, W[1], CC[ck_idx[sel][0]]); - for (i = 0; i < 16; i++) W[1][i] ^= t[i]; - XMEMCPY(W[2], W[1], 16); - s_aria_round(1, W[2], CC[ck_idx[sel][1]]); - for (i = 0; i < 16; i++) W[2][i] ^= W[0][i]; - XMEMCPY(W[3], W[2], 16); - s_aria_round(0, W[3], CC[ck_idx[sel][2]]); - for (i = 0; i < 16; i++) W[3][i] ^= W[1][i]; - - /* Encryption round keys: ek_{4k+j+1} = W[j] XOR ROL128(W[(j+1)%4], rot_amt[k]) */ - for (k = 0; k <= n; k++) { - j = k & 3; - s_aria_rotl128(W[(j + 1) & 3], rot_amt[k >> 2], rW); - for (i = 0; i < 16; i++) skey->aria.ek[k * 16 + i] = W[j][i] ^ rW[i]; - } - - /* Decryption round keys: dk1 = ek_{n+1}; dk_{n+1} = ek1; dk_i = A(ek_{n+2-i}) */ - XMEMCPY(skey->aria.dk, skey->aria.ek + n * 16, 16); - XMEMCPY(skey->aria.dk + n * 16, skey->aria.ek, 16); - for (i = 1; i < n; i++) s_aria_A(skey->aria.ek + (n - i) * 16, skey->aria.dk + i * 16); - - return CRYPT_OK; -} - -static LTC_INLINE void s_aria_crypt(const unsigned char *in, unsigned char *out, const unsigned char *rk, int n) -{ - unsigned char state[16], t[16]; - int r, i; - - XMEMCPY(state, in, 16); - for (r = 0; r < n - 1; r++) { - s_aria_round(r & 1, state, rk + r * 16); - } - /* final round: SL2 substitution + XOR with last round key (no diffusion) */ - for (i = 0; i < 16; i++) t[i] = SL[1][i & 3][state[i] ^ rk[(n - 1) * 16 + i]]; - for (i = 0; i < 16; i++) out[i] = t[i] ^ rk[n * 16 + i]; -} - -int aria_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - s_aria_crypt(pt, ct, skey->aria.ek, skey->aria.R); - return CRYPT_OK; -} - -int aria_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - s_aria_crypt(ct, pt, skey->aria.dk, skey->aria.R); - return CRYPT_OK; -} - -void aria_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - -int aria_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize >= 32) *keysize = 32; - else if (*keysize >= 24) *keysize = 24; - else if (*keysize >= 16) *keysize = 16; - else return CRYPT_INVALID_KEYSIZE; - return CRYPT_OK; -} - -int aria_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - /* RFC 5794, Appendix A */ - static const struct { - int keylen; - unsigned char key[32], pt[16], ct[16]; - } tests[] = { - { 16, - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }, - { 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff }, - { 0xd7,0x18,0xfb,0xd6,0xab,0x64,0x4c,0x73,0x9d,0xa9,0x5f,0x3b,0xe6,0x45,0x17,0x78 } }, - { 24, - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, - 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17 }, - { 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff }, - { 0x26,0x44,0x9c,0x18,0x05,0xdb,0xe7,0xaa,0x25,0xa4,0x68,0xce,0x26,0x3a,0x9e,0x79 } }, - { 32, - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, - 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f }, - { 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff }, - { 0xf9,0x2b,0xd7,0xc7,0x9f,0xb7,0x2e,0x2f,0x2b,0x8f,0x80,0xc1,0x97,0x2d,0x24,0xfc } } - }; - unsigned char buf[2][16]; - symmetric_key skey; - int err; - unsigned int x; - - for (x = 0; x < LTC_ARRAY_SIZE(tests); x++) { - zeromem(&skey, sizeof(skey)); - if ((err = aria_setup(tests[x].key, tests[x].keylen, 0, &skey)) != CRYPT_OK) return err; - if ((err = aria_ecb_encrypt(tests[x].pt, buf[0], &skey)) != CRYPT_OK) { aria_done(&skey); return err; } - if ((err = aria_ecb_decrypt(tests[x].ct, buf[1], &skey)) != CRYPT_OK) { aria_done(&skey); return err; } - aria_done(&skey); - if (ltc_compare_testvector(tests[x].ct, 16, buf[0], 16, "ARIA Encrypt", x) || - ltc_compare_testvector(tests[x].pt, 16, buf[1], 16, "ARIA Decrypt", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/ciphers/camellia.c b/src/ciphers/camellia.c deleted file mode 100644 index dd2209a5..00000000 --- a/src/ciphers/camellia.c +++ /dev/null @@ -1,722 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file camellia.c - Implementation by Tom St Denis of Elliptic Semiconductor -*/ - -#include "tomcrypt_private.h" - -#ifdef LTC_CAMELLIA - -const struct ltc_cipher_descriptor camellia_desc = { - "camellia", - 23, - 16, 32, 16, 18, - &camellia_setup, - &camellia_ecb_encrypt, - &camellia_ecb_decrypt, - &camellia_test, - &camellia_done, - &camellia_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -static const ulong32 SP1110[] = { -0x70707000, 0x82828200, 0x2c2c2c00, 0xececec00, 0xb3b3b300, 0x27272700, 0xc0c0c000, 0xe5e5e500, -0xe4e4e400, 0x85858500, 0x57575700, 0x35353500, 0xeaeaea00, 0x0c0c0c00, 0xaeaeae00, 0x41414100, -0x23232300, 0xefefef00, 0x6b6b6b00, 0x93939300, 0x45454500, 0x19191900, 0xa5a5a500, 0x21212100, -0xededed00, 0x0e0e0e00, 0x4f4f4f00, 0x4e4e4e00, 0x1d1d1d00, 0x65656500, 0x92929200, 0xbdbdbd00, -0x86868600, 0xb8b8b800, 0xafafaf00, 0x8f8f8f00, 0x7c7c7c00, 0xebebeb00, 0x1f1f1f00, 0xcecece00, -0x3e3e3e00, 0x30303000, 0xdcdcdc00, 0x5f5f5f00, 0x5e5e5e00, 0xc5c5c500, 0x0b0b0b00, 0x1a1a1a00, -0xa6a6a600, 0xe1e1e100, 0x39393900, 0xcacaca00, 0xd5d5d500, 0x47474700, 0x5d5d5d00, 0x3d3d3d00, -0xd9d9d900, 0x01010100, 0x5a5a5a00, 0xd6d6d600, 0x51515100, 0x56565600, 0x6c6c6c00, 0x4d4d4d00, -0x8b8b8b00, 0x0d0d0d00, 0x9a9a9a00, 0x66666600, 0xfbfbfb00, 0xcccccc00, 0xb0b0b000, 0x2d2d2d00, -0x74747400, 0x12121200, 0x2b2b2b00, 0x20202000, 0xf0f0f000, 0xb1b1b100, 0x84848400, 0x99999900, -0xdfdfdf00, 0x4c4c4c00, 0xcbcbcb00, 0xc2c2c200, 0x34343400, 0x7e7e7e00, 0x76767600, 0x05050500, -0x6d6d6d00, 0xb7b7b700, 0xa9a9a900, 0x31313100, 0xd1d1d100, 0x17171700, 0x04040400, 0xd7d7d700, -0x14141400, 0x58585800, 0x3a3a3a00, 0x61616100, 0xdedede00, 0x1b1b1b00, 0x11111100, 0x1c1c1c00, -0x32323200, 0x0f0f0f00, 0x9c9c9c00, 0x16161600, 0x53535300, 0x18181800, 0xf2f2f200, 0x22222200, -0xfefefe00, 0x44444400, 0xcfcfcf00, 0xb2b2b200, 0xc3c3c300, 0xb5b5b500, 0x7a7a7a00, 0x91919100, -0x24242400, 0x08080800, 0xe8e8e800, 0xa8a8a800, 0x60606000, 0xfcfcfc00, 0x69696900, 0x50505000, -0xaaaaaa00, 0xd0d0d000, 0xa0a0a000, 0x7d7d7d00, 0xa1a1a100, 0x89898900, 0x62626200, 0x97979700, -0x54545400, 0x5b5b5b00, 0x1e1e1e00, 0x95959500, 0xe0e0e000, 0xffffff00, 0x64646400, 0xd2d2d200, -0x10101000, 0xc4c4c400, 0x00000000, 0x48484800, 0xa3a3a300, 0xf7f7f700, 0x75757500, 0xdbdbdb00, -0x8a8a8a00, 0x03030300, 0xe6e6e600, 0xdadada00, 0x09090900, 0x3f3f3f00, 0xdddddd00, 0x94949400, -0x87878700, 0x5c5c5c00, 0x83838300, 0x02020200, 0xcdcdcd00, 0x4a4a4a00, 0x90909000, 0x33333300, -0x73737300, 0x67676700, 0xf6f6f600, 0xf3f3f300, 0x9d9d9d00, 0x7f7f7f00, 0xbfbfbf00, 0xe2e2e200, -0x52525200, 0x9b9b9b00, 0xd8d8d800, 0x26262600, 0xc8c8c800, 0x37373700, 0xc6c6c600, 0x3b3b3b00, -0x81818100, 0x96969600, 0x6f6f6f00, 0x4b4b4b00, 0x13131300, 0xbebebe00, 0x63636300, 0x2e2e2e00, -0xe9e9e900, 0x79797900, 0xa7a7a700, 0x8c8c8c00, 0x9f9f9f00, 0x6e6e6e00, 0xbcbcbc00, 0x8e8e8e00, -0x29292900, 0xf5f5f500, 0xf9f9f900, 0xb6b6b600, 0x2f2f2f00, 0xfdfdfd00, 0xb4b4b400, 0x59595900, -0x78787800, 0x98989800, 0x06060600, 0x6a6a6a00, 0xe7e7e700, 0x46464600, 0x71717100, 0xbababa00, -0xd4d4d400, 0x25252500, 0xababab00, 0x42424200, 0x88888800, 0xa2a2a200, 0x8d8d8d00, 0xfafafa00, -0x72727200, 0x07070700, 0xb9b9b900, 0x55555500, 0xf8f8f800, 0xeeeeee00, 0xacacac00, 0x0a0a0a00, -0x36363600, 0x49494900, 0x2a2a2a00, 0x68686800, 0x3c3c3c00, 0x38383800, 0xf1f1f100, 0xa4a4a400, -0x40404000, 0x28282800, 0xd3d3d300, 0x7b7b7b00, 0xbbbbbb00, 0xc9c9c900, 0x43434300, 0xc1c1c100, -0x15151500, 0xe3e3e300, 0xadadad00, 0xf4f4f400, 0x77777700, 0xc7c7c700, 0x80808000, 0x9e9e9e00, -}; - -static const ulong32 SP0222[] = { -0x00e0e0e0, 0x00050505, 0x00585858, 0x00d9d9d9, 0x00676767, 0x004e4e4e, 0x00818181, 0x00cbcbcb, -0x00c9c9c9, 0x000b0b0b, 0x00aeaeae, 0x006a6a6a, 0x00d5d5d5, 0x00181818, 0x005d5d5d, 0x00828282, -0x00464646, 0x00dfdfdf, 0x00d6d6d6, 0x00272727, 0x008a8a8a, 0x00323232, 0x004b4b4b, 0x00424242, -0x00dbdbdb, 0x001c1c1c, 0x009e9e9e, 0x009c9c9c, 0x003a3a3a, 0x00cacaca, 0x00252525, 0x007b7b7b, -0x000d0d0d, 0x00717171, 0x005f5f5f, 0x001f1f1f, 0x00f8f8f8, 0x00d7d7d7, 0x003e3e3e, 0x009d9d9d, -0x007c7c7c, 0x00606060, 0x00b9b9b9, 0x00bebebe, 0x00bcbcbc, 0x008b8b8b, 0x00161616, 0x00343434, -0x004d4d4d, 0x00c3c3c3, 0x00727272, 0x00959595, 0x00ababab, 0x008e8e8e, 0x00bababa, 0x007a7a7a, -0x00b3b3b3, 0x00020202, 0x00b4b4b4, 0x00adadad, 0x00a2a2a2, 0x00acacac, 0x00d8d8d8, 0x009a9a9a, -0x00171717, 0x001a1a1a, 0x00353535, 0x00cccccc, 0x00f7f7f7, 0x00999999, 0x00616161, 0x005a5a5a, -0x00e8e8e8, 0x00242424, 0x00565656, 0x00404040, 0x00e1e1e1, 0x00636363, 0x00090909, 0x00333333, -0x00bfbfbf, 0x00989898, 0x00979797, 0x00858585, 0x00686868, 0x00fcfcfc, 0x00ececec, 0x000a0a0a, -0x00dadada, 0x006f6f6f, 0x00535353, 0x00626262, 0x00a3a3a3, 0x002e2e2e, 0x00080808, 0x00afafaf, -0x00282828, 0x00b0b0b0, 0x00747474, 0x00c2c2c2, 0x00bdbdbd, 0x00363636, 0x00222222, 0x00383838, -0x00646464, 0x001e1e1e, 0x00393939, 0x002c2c2c, 0x00a6a6a6, 0x00303030, 0x00e5e5e5, 0x00444444, -0x00fdfdfd, 0x00888888, 0x009f9f9f, 0x00656565, 0x00878787, 0x006b6b6b, 0x00f4f4f4, 0x00232323, -0x00484848, 0x00101010, 0x00d1d1d1, 0x00515151, 0x00c0c0c0, 0x00f9f9f9, 0x00d2d2d2, 0x00a0a0a0, -0x00555555, 0x00a1a1a1, 0x00414141, 0x00fafafa, 0x00434343, 0x00131313, 0x00c4c4c4, 0x002f2f2f, -0x00a8a8a8, 0x00b6b6b6, 0x003c3c3c, 0x002b2b2b, 0x00c1c1c1, 0x00ffffff, 0x00c8c8c8, 0x00a5a5a5, -0x00202020, 0x00898989, 0x00000000, 0x00909090, 0x00474747, 0x00efefef, 0x00eaeaea, 0x00b7b7b7, -0x00151515, 0x00060606, 0x00cdcdcd, 0x00b5b5b5, 0x00121212, 0x007e7e7e, 0x00bbbbbb, 0x00292929, -0x000f0f0f, 0x00b8b8b8, 0x00070707, 0x00040404, 0x009b9b9b, 0x00949494, 0x00212121, 0x00666666, -0x00e6e6e6, 0x00cecece, 0x00ededed, 0x00e7e7e7, 0x003b3b3b, 0x00fefefe, 0x007f7f7f, 0x00c5c5c5, -0x00a4a4a4, 0x00373737, 0x00b1b1b1, 0x004c4c4c, 0x00919191, 0x006e6e6e, 0x008d8d8d, 0x00767676, -0x00030303, 0x002d2d2d, 0x00dedede, 0x00969696, 0x00262626, 0x007d7d7d, 0x00c6c6c6, 0x005c5c5c, -0x00d3d3d3, 0x00f2f2f2, 0x004f4f4f, 0x00191919, 0x003f3f3f, 0x00dcdcdc, 0x00797979, 0x001d1d1d, -0x00525252, 0x00ebebeb, 0x00f3f3f3, 0x006d6d6d, 0x005e5e5e, 0x00fbfbfb, 0x00696969, 0x00b2b2b2, -0x00f0f0f0, 0x00313131, 0x000c0c0c, 0x00d4d4d4, 0x00cfcfcf, 0x008c8c8c, 0x00e2e2e2, 0x00757575, -0x00a9a9a9, 0x004a4a4a, 0x00575757, 0x00848484, 0x00111111, 0x00454545, 0x001b1b1b, 0x00f5f5f5, -0x00e4e4e4, 0x000e0e0e, 0x00737373, 0x00aaaaaa, 0x00f1f1f1, 0x00dddddd, 0x00595959, 0x00141414, -0x006c6c6c, 0x00929292, 0x00545454, 0x00d0d0d0, 0x00787878, 0x00707070, 0x00e3e3e3, 0x00494949, -0x00808080, 0x00505050, 0x00a7a7a7, 0x00f6f6f6, 0x00777777, 0x00939393, 0x00868686, 0x00838383, -0x002a2a2a, 0x00c7c7c7, 0x005b5b5b, 0x00e9e9e9, 0x00eeeeee, 0x008f8f8f, 0x00010101, 0x003d3d3d, -}; - -static const ulong32 SP3033[] = { -0x38003838, 0x41004141, 0x16001616, 0x76007676, 0xd900d9d9, 0x93009393, 0x60006060, 0xf200f2f2, -0x72007272, 0xc200c2c2, 0xab00abab, 0x9a009a9a, 0x75007575, 0x06000606, 0x57005757, 0xa000a0a0, -0x91009191, 0xf700f7f7, 0xb500b5b5, 0xc900c9c9, 0xa200a2a2, 0x8c008c8c, 0xd200d2d2, 0x90009090, -0xf600f6f6, 0x07000707, 0xa700a7a7, 0x27002727, 0x8e008e8e, 0xb200b2b2, 0x49004949, 0xde00dede, -0x43004343, 0x5c005c5c, 0xd700d7d7, 0xc700c7c7, 0x3e003e3e, 0xf500f5f5, 0x8f008f8f, 0x67006767, -0x1f001f1f, 0x18001818, 0x6e006e6e, 0xaf00afaf, 0x2f002f2f, 0xe200e2e2, 0x85008585, 0x0d000d0d, -0x53005353, 0xf000f0f0, 0x9c009c9c, 0x65006565, 0xea00eaea, 0xa300a3a3, 0xae00aeae, 0x9e009e9e, -0xec00ecec, 0x80008080, 0x2d002d2d, 0x6b006b6b, 0xa800a8a8, 0x2b002b2b, 0x36003636, 0xa600a6a6, -0xc500c5c5, 0x86008686, 0x4d004d4d, 0x33003333, 0xfd00fdfd, 0x66006666, 0x58005858, 0x96009696, -0x3a003a3a, 0x09000909, 0x95009595, 0x10001010, 0x78007878, 0xd800d8d8, 0x42004242, 0xcc00cccc, -0xef00efef, 0x26002626, 0xe500e5e5, 0x61006161, 0x1a001a1a, 0x3f003f3f, 0x3b003b3b, 0x82008282, -0xb600b6b6, 0xdb00dbdb, 0xd400d4d4, 0x98009898, 0xe800e8e8, 0x8b008b8b, 0x02000202, 0xeb00ebeb, -0x0a000a0a, 0x2c002c2c, 0x1d001d1d, 0xb000b0b0, 0x6f006f6f, 0x8d008d8d, 0x88008888, 0x0e000e0e, -0x19001919, 0x87008787, 0x4e004e4e, 0x0b000b0b, 0xa900a9a9, 0x0c000c0c, 0x79007979, 0x11001111, -0x7f007f7f, 0x22002222, 0xe700e7e7, 0x59005959, 0xe100e1e1, 0xda00dada, 0x3d003d3d, 0xc800c8c8, -0x12001212, 0x04000404, 0x74007474, 0x54005454, 0x30003030, 0x7e007e7e, 0xb400b4b4, 0x28002828, -0x55005555, 0x68006868, 0x50005050, 0xbe00bebe, 0xd000d0d0, 0xc400c4c4, 0x31003131, 0xcb00cbcb, -0x2a002a2a, 0xad00adad, 0x0f000f0f, 0xca00caca, 0x70007070, 0xff00ffff, 0x32003232, 0x69006969, -0x08000808, 0x62006262, 0x00000000, 0x24002424, 0xd100d1d1, 0xfb00fbfb, 0xba00baba, 0xed00eded, -0x45004545, 0x81008181, 0x73007373, 0x6d006d6d, 0x84008484, 0x9f009f9f, 0xee00eeee, 0x4a004a4a, -0xc300c3c3, 0x2e002e2e, 0xc100c1c1, 0x01000101, 0xe600e6e6, 0x25002525, 0x48004848, 0x99009999, -0xb900b9b9, 0xb300b3b3, 0x7b007b7b, 0xf900f9f9, 0xce00cece, 0xbf00bfbf, 0xdf00dfdf, 0x71007171, -0x29002929, 0xcd00cdcd, 0x6c006c6c, 0x13001313, 0x64006464, 0x9b009b9b, 0x63006363, 0x9d009d9d, -0xc000c0c0, 0x4b004b4b, 0xb700b7b7, 0xa500a5a5, 0x89008989, 0x5f005f5f, 0xb100b1b1, 0x17001717, -0xf400f4f4, 0xbc00bcbc, 0xd300d3d3, 0x46004646, 0xcf00cfcf, 0x37003737, 0x5e005e5e, 0x47004747, -0x94009494, 0xfa00fafa, 0xfc00fcfc, 0x5b005b5b, 0x97009797, 0xfe00fefe, 0x5a005a5a, 0xac00acac, -0x3c003c3c, 0x4c004c4c, 0x03000303, 0x35003535, 0xf300f3f3, 0x23002323, 0xb800b8b8, 0x5d005d5d, -0x6a006a6a, 0x92009292, 0xd500d5d5, 0x21002121, 0x44004444, 0x51005151, 0xc600c6c6, 0x7d007d7d, -0x39003939, 0x83008383, 0xdc00dcdc, 0xaa00aaaa, 0x7c007c7c, 0x77007777, 0x56005656, 0x05000505, -0x1b001b1b, 0xa400a4a4, 0x15001515, 0x34003434, 0x1e001e1e, 0x1c001c1c, 0xf800f8f8, 0x52005252, -0x20002020, 0x14001414, 0xe900e9e9, 0xbd00bdbd, 0xdd00dddd, 0xe400e4e4, 0xa100a1a1, 0xe000e0e0, -0x8a008a8a, 0xf100f1f1, 0xd600d6d6, 0x7a007a7a, 0xbb00bbbb, 0xe300e3e3, 0x40004040, 0x4f004f4f, -}; - -static const ulong32 SP4404[] = { -0x70700070, 0x2c2c002c, 0xb3b300b3, 0xc0c000c0, 0xe4e400e4, 0x57570057, 0xeaea00ea, 0xaeae00ae, -0x23230023, 0x6b6b006b, 0x45450045, 0xa5a500a5, 0xeded00ed, 0x4f4f004f, 0x1d1d001d, 0x92920092, -0x86860086, 0xafaf00af, 0x7c7c007c, 0x1f1f001f, 0x3e3e003e, 0xdcdc00dc, 0x5e5e005e, 0x0b0b000b, -0xa6a600a6, 0x39390039, 0xd5d500d5, 0x5d5d005d, 0xd9d900d9, 0x5a5a005a, 0x51510051, 0x6c6c006c, -0x8b8b008b, 0x9a9a009a, 0xfbfb00fb, 0xb0b000b0, 0x74740074, 0x2b2b002b, 0xf0f000f0, 0x84840084, -0xdfdf00df, 0xcbcb00cb, 0x34340034, 0x76760076, 0x6d6d006d, 0xa9a900a9, 0xd1d100d1, 0x04040004, -0x14140014, 0x3a3a003a, 0xdede00de, 0x11110011, 0x32320032, 0x9c9c009c, 0x53530053, 0xf2f200f2, -0xfefe00fe, 0xcfcf00cf, 0xc3c300c3, 0x7a7a007a, 0x24240024, 0xe8e800e8, 0x60600060, 0x69690069, -0xaaaa00aa, 0xa0a000a0, 0xa1a100a1, 0x62620062, 0x54540054, 0x1e1e001e, 0xe0e000e0, 0x64640064, -0x10100010, 0x00000000, 0xa3a300a3, 0x75750075, 0x8a8a008a, 0xe6e600e6, 0x09090009, 0xdddd00dd, -0x87870087, 0x83830083, 0xcdcd00cd, 0x90900090, 0x73730073, 0xf6f600f6, 0x9d9d009d, 0xbfbf00bf, -0x52520052, 0xd8d800d8, 0xc8c800c8, 0xc6c600c6, 0x81810081, 0x6f6f006f, 0x13130013, 0x63630063, -0xe9e900e9, 0xa7a700a7, 0x9f9f009f, 0xbcbc00bc, 0x29290029, 0xf9f900f9, 0x2f2f002f, 0xb4b400b4, -0x78780078, 0x06060006, 0xe7e700e7, 0x71710071, 0xd4d400d4, 0xabab00ab, 0x88880088, 0x8d8d008d, -0x72720072, 0xb9b900b9, 0xf8f800f8, 0xacac00ac, 0x36360036, 0x2a2a002a, 0x3c3c003c, 0xf1f100f1, -0x40400040, 0xd3d300d3, 0xbbbb00bb, 0x43430043, 0x15150015, 0xadad00ad, 0x77770077, 0x80800080, -0x82820082, 0xecec00ec, 0x27270027, 0xe5e500e5, 0x85850085, 0x35350035, 0x0c0c000c, 0x41410041, -0xefef00ef, 0x93930093, 0x19190019, 0x21210021, 0x0e0e000e, 0x4e4e004e, 0x65650065, 0xbdbd00bd, -0xb8b800b8, 0x8f8f008f, 0xebeb00eb, 0xcece00ce, 0x30300030, 0x5f5f005f, 0xc5c500c5, 0x1a1a001a, -0xe1e100e1, 0xcaca00ca, 0x47470047, 0x3d3d003d, 0x01010001, 0xd6d600d6, 0x56560056, 0x4d4d004d, -0x0d0d000d, 0x66660066, 0xcccc00cc, 0x2d2d002d, 0x12120012, 0x20200020, 0xb1b100b1, 0x99990099, -0x4c4c004c, 0xc2c200c2, 0x7e7e007e, 0x05050005, 0xb7b700b7, 0x31310031, 0x17170017, 0xd7d700d7, -0x58580058, 0x61610061, 0x1b1b001b, 0x1c1c001c, 0x0f0f000f, 0x16160016, 0x18180018, 0x22220022, -0x44440044, 0xb2b200b2, 0xb5b500b5, 0x91910091, 0x08080008, 0xa8a800a8, 0xfcfc00fc, 0x50500050, -0xd0d000d0, 0x7d7d007d, 0x89890089, 0x97970097, 0x5b5b005b, 0x95950095, 0xffff00ff, 0xd2d200d2, -0xc4c400c4, 0x48480048, 0xf7f700f7, 0xdbdb00db, 0x03030003, 0xdada00da, 0x3f3f003f, 0x94940094, -0x5c5c005c, 0x02020002, 0x4a4a004a, 0x33330033, 0x67670067, 0xf3f300f3, 0x7f7f007f, 0xe2e200e2, -0x9b9b009b, 0x26260026, 0x37370037, 0x3b3b003b, 0x96960096, 0x4b4b004b, 0xbebe00be, 0x2e2e002e, -0x79790079, 0x8c8c008c, 0x6e6e006e, 0x8e8e008e, 0xf5f500f5, 0xb6b600b6, 0xfdfd00fd, 0x59590059, -0x98980098, 0x6a6a006a, 0x46460046, 0xbaba00ba, 0x25250025, 0x42420042, 0xa2a200a2, 0xfafa00fa, -0x07070007, 0x55550055, 0xeeee00ee, 0x0a0a000a, 0x49490049, 0x68680068, 0x38380038, 0xa4a400a4, -0x28280028, 0x7b7b007b, 0xc9c900c9, 0xc1c100c1, 0xe3e300e3, 0xf4f400f4, 0xc7c700c7, 0x9e9e009e, -}; - -static const ulong64 key_sigma[] = { - CONST64(0xA09E667F3BCC908B), - CONST64(0xB67AE8584CAA73B2), - CONST64(0xC6EF372FE94F82BE), - CONST64(0x54FF53A5F1D36F1C), - CONST64(0x10E527FADE682D1D), - CONST64(0xB05688C2B3E6C1FD) -}; - -static ulong64 F(ulong64 x) -{ - ulong32 D, U; - -#define loc(i) ((8-i)*8) - - D = SP1110[(x >> loc(8)) & 0xFF] ^ SP0222[(x >> loc(5)) & 0xFF] ^ SP3033[(x >> loc(6)) & 0xFF] ^ SP4404[(x >> loc(7)) & 0xFF]; - U = SP1110[(x >> loc(1)) & 0xFF] ^ SP0222[(x >> loc(2)) & 0xFF] ^ SP3033[(x >> loc(3)) & 0xFF] ^ SP4404[(x >> loc(4)) & 0xFF]; - - D ^= U; - U = D ^ RORc(U, 8); - - return ((ulong64)U) | (((ulong64)D) << CONST64(32)); -} - -static void rot_128(const unsigned char *in, unsigned count, unsigned char *out) -{ - unsigned x, w, b; - - w = count >> 3; - b = count & 7; - - for (x = 0; x < 16; x++) { - out[x] = (in[(x+w)&15] << b) | (in[(x+w+1)&15] >> (8 - b)); - } -} - -int camellia_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - unsigned char T[48], kA[16], kB[16], kR[16], kL[16]; - int x; - ulong64 A, B; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - - /* Valid sizes (in bytes) are 16, 24, 32 */ - if (keylen != 16 && keylen != 24 && keylen != 32) { - return CRYPT_INVALID_KEYSIZE; - } - - /* number of rounds */ - skey->camellia.R = (keylen == 16) ? 18 : 24; - - if (num_rounds != 0 && num_rounds != skey->camellia.R) { - return CRYPT_INVALID_ROUNDS; - } - - /* expand key */ - if (keylen == 16) { - for (x = 0; x < 16; x++) { - T[x] = key[x]; - T[x + 16] = 0; - } - } else if (keylen == 24) { - for (x = 0; x < 24; x++) { - T[x] = key[x]; - } - for (x = 24; x < 32; x++) { - T[x] = key[x-8] ^ 0xFF; - } - } else { - for (x = 0; x < 32; x++) { - T[x] = key[x]; - } - } - - for (x = 0; x < 16; x++) { - kL[x] = T[x]; - kR[x] = T[x + 16]; - } - - for (x = 32; x < 48; x++) { - T[x] = T[x - 32] ^ T[x - 16]; - } - - /* first two rounds */ - LOAD64H(A, T+32); LOAD64H(B, T+40); - B ^= F(A ^ key_sigma[0]); - A ^= F(B ^ key_sigma[1]); - STORE64H(A, T+32); STORE64H(B, T+40); - - /* xor kL in */ - for (x = 0; x < 16; x++) { T[x+32] ^= kL[x]; } - - /* next two rounds */ - LOAD64H(A, T+32); LOAD64H(B, T+40); - B ^= F(A ^ key_sigma[2]); - A ^= F(B ^ key_sigma[3]); - STORE64H(A, T+32); STORE64H(B, T+40); - - /* grab KA */ - for (x = 0; x < 16; x++) { kA[x] = T[x+32]; } - - /* xor kR in */ - for (x = 0; x < 16; x++) { T[x+32] ^= kR[x]; } - - if (keylen == 16) { - /* grab whitening keys kw1 and kw2 */ - LOAD64H(skey->camellia.kw[0], kL); - LOAD64H(skey->camellia.kw[1], kL+8); - - /* k1-k2 */ - LOAD64H(skey->camellia.k[0], kA); - LOAD64H(skey->camellia.k[1], kA+8); - - /* rotate kL by 15, k3/k4 */ - rot_128(kL, 15, T+32); - LOAD64H(skey->camellia.k[2], T+32); - LOAD64H(skey->camellia.k[3], T+40); - - /* rotate kA by 15, k5/k6 */ - rot_128(kA, 15, T+32); - LOAD64H(skey->camellia.k[4], T+32); - LOAD64H(skey->camellia.k[5], T+40); - - /* rotate kA by 30, kl1, kl2 */ - rot_128(kA, 30, T+32); - LOAD64H(skey->camellia.kl[0], T+32); - LOAD64H(skey->camellia.kl[1], T+40); - - /* rotate kL by 45, k7/k8 */ - rot_128(kL, 45, T+32); - LOAD64H(skey->camellia.k[6], T+32); - LOAD64H(skey->camellia.k[7], T+40); - - /* rotate kA by 45, k9/k10 */ - rot_128(kA, 45, T+32); - LOAD64H(skey->camellia.k[8], T+32); - rot_128(kL, 60, T+32); - LOAD64H(skey->camellia.k[9], T+40); - - /* rotate kA by 60, k11/k12 */ - rot_128(kA, 60, T+32); - LOAD64H(skey->camellia.k[10], T+32); - LOAD64H(skey->camellia.k[11], T+40); - - /* rotate kL by 77, kl3, kl4 */ - rot_128(kL, 77, T+32); - LOAD64H(skey->camellia.kl[2], T+32); - LOAD64H(skey->camellia.kl[3], T+40); - - /* rotate kL by 94, k13/k14 */ - rot_128(kL, 94, T+32); - LOAD64H(skey->camellia.k[12], T+32); - LOAD64H(skey->camellia.k[13], T+40); - - /* rotate kA by 94, k15/k16 */ - rot_128(kA, 94, T+32); - LOAD64H(skey->camellia.k[14], T+32); - LOAD64H(skey->camellia.k[15], T+40); - - /* rotate kL by 111, k17/k18 */ - rot_128(kL, 111, T+32); - LOAD64H(skey->camellia.k[16], T+32); - LOAD64H(skey->camellia.k[17], T+40); - - /* rotate kA by 111, kw3/kw4 */ - rot_128(kA, 111, T+32); - LOAD64H(skey->camellia.kw[2], T+32); - LOAD64H(skey->camellia.kw[3], T+40); - } else { - /* last two rounds */ - LOAD64H(A, T+32); LOAD64H(B, T+40); - B ^= F(A ^ key_sigma[4]); - A ^= F(B ^ key_sigma[5]); - STORE64H(A, T+32); STORE64H(B, T+40); - - /* grab kB */ - for (x = 0; x < 16; x++) { kB[x] = T[x+32]; } - - /* kw1/2 from kL*/ - LOAD64H(skey->camellia.kw[0], kL); - LOAD64H(skey->camellia.kw[1], kL+8); - - /* k1/k2 = kB */ - LOAD64H(skey->camellia.k[0], kB); - LOAD64H(skey->camellia.k[1], kB+8); - - /* k3/k4 = kR by 15 */ - rot_128(kR, 15, T+32); - LOAD64H(skey->camellia.k[2], T+32); - LOAD64H(skey->camellia.k[3], T+40); - - /* k5/k7 = kA by 15 */ - rot_128(kA, 15, T+32); - LOAD64H(skey->camellia.k[4], T+32); - LOAD64H(skey->camellia.k[5], T+40); - - /* kl1/2 = kR by 30 */ - rot_128(kR, 30, T+32); - LOAD64H(skey->camellia.kl[0], T+32); - LOAD64H(skey->camellia.kl[1], T+40); - - /* k7/k8 = kB by 30 */ - rot_128(kB, 30, T+32); - LOAD64H(skey->camellia.k[6], T+32); - LOAD64H(skey->camellia.k[7], T+40); - - /* k9/k10 = kL by 45 */ - rot_128(kL, 45, T+32); - LOAD64H(skey->camellia.k[8], T+32); - LOAD64H(skey->camellia.k[9], T+40); - - /* k11/k12 = kA by 45 */ - rot_128(kA, 45, T+32); - LOAD64H(skey->camellia.k[10], T+32); - LOAD64H(skey->camellia.k[11], T+40); - - /* kl3/4 = kL by 60 */ - rot_128(kL, 60, T+32); - LOAD64H(skey->camellia.kl[2], T+32); - LOAD64H(skey->camellia.kl[3], T+40); - - /* k13/k14 = kR by 60 */ - rot_128(kR, 60, T+32); - LOAD64H(skey->camellia.k[12], T+32); - LOAD64H(skey->camellia.k[13], T+40); - - /* k15/k16 = kB by 15 */ - rot_128(kB, 60, T+32); - LOAD64H(skey->camellia.k[14], T+32); - LOAD64H(skey->camellia.k[15], T+40); - - /* k17/k18 = kL by 77 */ - rot_128(kL, 77, T+32); - LOAD64H(skey->camellia.k[16], T+32); - LOAD64H(skey->camellia.k[17], T+40); - - /* kl5/6 = kA by 77 */ - rot_128(kA, 77, T+32); - LOAD64H(skey->camellia.kl[4], T+32); - LOAD64H(skey->camellia.kl[5], T+40); - - /* k19/k20 = kR by 94 */ - rot_128(kR, 94, T+32); - LOAD64H(skey->camellia.k[18], T+32); - LOAD64H(skey->camellia.k[19], T+40); - - /* k21/k22 = kA by 94 */ - rot_128(kA, 94, T+32); - LOAD64H(skey->camellia.k[20], T+32); - LOAD64H(skey->camellia.k[21], T+40); - - /* k23/k24 = kL by 111 */ - rot_128(kL, 111, T+32); - LOAD64H(skey->camellia.k[22], T+32); - LOAD64H(skey->camellia.k[23], T+40); - - /* kw2/kw3 = kB by 111 */ - rot_128(kB, 111, T+32); - LOAD64H(skey->camellia.kw[2], T+32); - LOAD64H(skey->camellia.kw[3], T+40); - } - - return CRYPT_OK; -} - -int camellia_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - ulong64 L, R; - ulong32 a, b; - - LOAD64H(L, pt+0); LOAD64H(R, pt+8); - L ^= skey->camellia.kw[0]; - R ^= skey->camellia.kw[1]; - - /* first 6 rounds */ - R ^= F(L ^ skey->camellia.k[0]); - L ^= F(R ^ skey->camellia.k[1]); - R ^= F(L ^ skey->camellia.k[2]); - L ^= F(R ^ skey->camellia.k[3]); - R ^= F(L ^ skey->camellia.k[4]); - L ^= F(R ^ skey->camellia.k[5]); - - /* FL */ - a = (ulong32)(L >> 32); - b = (ulong32)(L & 0xFFFFFFFFUL); - b ^= ROL((a & (ulong32)(skey->camellia.kl[0] >> 32)), 1); - a ^= b | (skey->camellia.kl[0] & 0xFFFFFFFFU); - L = (((ulong64)a) << 32) | b; - - /* FL^-1 */ - a = (ulong32)(R >> 32); - b = (ulong32)(R & 0xFFFFFFFFUL); - a ^= b | (skey->camellia.kl[1] & 0xFFFFFFFFU); - b ^= ROL((a & (ulong32)(skey->camellia.kl[1] >> 32)), 1); - R = (((ulong64)a) << 32) | b; - - /* second 6 rounds */ - R ^= F(L ^ skey->camellia.k[6]); - L ^= F(R ^ skey->camellia.k[7]); - R ^= F(L ^ skey->camellia.k[8]); - L ^= F(R ^ skey->camellia.k[9]); - R ^= F(L ^ skey->camellia.k[10]); - L ^= F(R ^ skey->camellia.k[11]); - - /* FL */ - a = (ulong32)(L >> 32); - b = (ulong32)(L & 0xFFFFFFFFUL); - b ^= ROL((a & (ulong32)(skey->camellia.kl[2] >> 32)), 1); - a ^= b | (skey->camellia.kl[2] & 0xFFFFFFFFU); - L = (((ulong64)a) << 32) | b; - - /* FL^-1 */ - a = (ulong32)(R >> 32); - b = (ulong32)(R & 0xFFFFFFFFUL); - a ^= b | (skey->camellia.kl[3] & 0xFFFFFFFFU); - b ^= ROL((a & (ulong32)(skey->camellia.kl[3] >> 32)), 1); - R = (((ulong64)a) << 32) | b; - - /* third 6 rounds */ - R ^= F(L ^ skey->camellia.k[12]); - L ^= F(R ^ skey->camellia.k[13]); - R ^= F(L ^ skey->camellia.k[14]); - L ^= F(R ^ skey->camellia.k[15]); - R ^= F(L ^ skey->camellia.k[16]); - L ^= F(R ^ skey->camellia.k[17]); - - /* next FL */ - if (skey->camellia.R == 24) { - /* FL */ - a = (ulong32)(L >> 32); - b = (ulong32)(L & 0xFFFFFFFFUL); - b ^= ROL((a & (ulong32)(skey->camellia.kl[4] >> 32)), 1); - a ^= b | (skey->camellia.kl[4] & 0xFFFFFFFFU); - L = (((ulong64)a) << 32) | b; - - /* FL^-1 */ - a = (ulong32)(R >> 32); - b = (ulong32)(R & 0xFFFFFFFFUL); - a ^= b | (skey->camellia.kl[5] & 0xFFFFFFFFU); - b ^= ROL((a & (ulong32)(skey->camellia.kl[5] >> 32)), 1); - R = (((ulong64)a) << 32) | b; - - /* fourth 6 rounds */ - R ^= F(L ^ skey->camellia.k[18]); - L ^= F(R ^ skey->camellia.k[19]); - R ^= F(L ^ skey->camellia.k[20]); - L ^= F(R ^ skey->camellia.k[21]); - R ^= F(L ^ skey->camellia.k[22]); - L ^= F(R ^ skey->camellia.k[23]); - } - - L ^= skey->camellia.kw[3]; - R ^= skey->camellia.kw[2]; - - STORE64H(R, ct+0); STORE64H(L, ct+8); - - return CRYPT_OK; -} - -int camellia_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - ulong64 L, R; - ulong32 a, b; - - LOAD64H(R, ct+0); LOAD64H(L, ct+8); - L ^= skey->camellia.kw[3]; - R ^= skey->camellia.kw[2]; - - /* next FL */ - if (skey->camellia.R == 24) { - /* fourth 6 rounds */ - L ^= F(R ^ skey->camellia.k[23]); - R ^= F(L ^ skey->camellia.k[22]); - L ^= F(R ^ skey->camellia.k[21]); - R ^= F(L ^ skey->camellia.k[20]); - L ^= F(R ^ skey->camellia.k[19]); - R ^= F(L ^ skey->camellia.k[18]); - - /* FL */ - a = (ulong32)(L >> 32); - b = (ulong32)(L & 0xFFFFFFFFUL); - a ^= b | (skey->camellia.kl[4] & 0xFFFFFFFFU); - b ^= ROL((a & (ulong32)(skey->camellia.kl[4] >> 32)), 1); - L = (((ulong64)a) << 32) | b; - - /* FL^-1 */ - a = (ulong32)(R >> 32); - b = (ulong32)(R & 0xFFFFFFFFUL); - b ^= ROL((a & (ulong32)(skey->camellia.kl[5] >> 32)), 1); - a ^= b | (skey->camellia.kl[5] & 0xFFFFFFFFU); - R = (((ulong64)a) << 32) | b; - - } - - /* third 6 rounds */ - L ^= F(R ^ skey->camellia.k[17]); - R ^= F(L ^ skey->camellia.k[16]); - L ^= F(R ^ skey->camellia.k[15]); - R ^= F(L ^ skey->camellia.k[14]); - L ^= F(R ^ skey->camellia.k[13]); - R ^= F(L ^ skey->camellia.k[12]); - - /* FL */ - a = (ulong32)(L >> 32); - b = (ulong32)(L & 0xFFFFFFFFUL); - a ^= b | (skey->camellia.kl[2] & 0xFFFFFFFFU); - b ^= ROL((a & (ulong32)(skey->camellia.kl[2] >> 32)), 1); - L = (((ulong64)a) << 32) | b; - - /* FL^-1 */ - a = (ulong32)(R >> 32); - b = (ulong32)(R & 0xFFFFFFFFUL); - b ^= ROL((a & (ulong32)(skey->camellia.kl[3] >> 32)), 1); - a ^= b | (skey->camellia.kl[3] & 0xFFFFFFFFU); - R = (((ulong64)a) << 32) | b; - - /* second 6 rounds */ - L ^= F(R ^ skey->camellia.k[11]); - R ^= F(L ^ skey->camellia.k[10]); - L ^= F(R ^ skey->camellia.k[9]); - R ^= F(L ^ skey->camellia.k[8]); - L ^= F(R ^ skey->camellia.k[7]); - R ^= F(L ^ skey->camellia.k[6]); - - /* FL */ - a = (ulong32)(L >> 32); - b = (ulong32)(L & 0xFFFFFFFFUL); - a ^= b | (skey->camellia.kl[0] & 0xFFFFFFFFU); - b ^= ROL((a & (ulong32)(skey->camellia.kl[0] >> 32)), 1); - L = (((ulong64)a) << 32) | b; - - /* FL^-1 */ - a = (ulong32)(R >> 32); - b = (ulong32)(R & 0xFFFFFFFFUL); - b ^= ROL((a & (ulong32)(skey->camellia.kl[1] >> 32)), 1); - a ^= b | (skey->camellia.kl[1] & 0xFFFFFFFFU); - R = (((ulong64)a) << 32) | b; - - /* first 6 rounds */ - L ^= F(R ^ skey->camellia.k[5]); - R ^= F(L ^ skey->camellia.k[4]); - L ^= F(R ^ skey->camellia.k[3]); - R ^= F(L ^ skey->camellia.k[2]); - L ^= F(R ^ skey->camellia.k[1]); - R ^= F(L ^ skey->camellia.k[0]); - - R ^= skey->camellia.kw[1]; - L ^= skey->camellia.kw[0]; - - STORE64H(R, pt+8); STORE64H(L, pt+0); - - return CRYPT_OK; -} - -int camellia_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - int keylen; - unsigned char key[32], pt[16], ct[16]; - } tests[] = { - -{ - 16, - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }, - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }, - { 0x67, 0x67, 0x31, 0x38, 0x54, 0x96, 0x69, 0x73, - 0x08, 0x57, 0x06, 0x56, 0x48, 0xea, 0xbe, 0x43 } -}, - -{ - 24, - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 }, - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }, - { 0xb4, 0x99, 0x34, 0x01, 0xb3, 0xe9, 0x96, 0xf8, - 0x4e, 0xe5, 0xce, 0xe7, 0xd7, 0x9b, 0x09, 0xb9 } -}, - - -{ - 32, - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }, - { 0x9a, 0xcc, 0x23, 0x7d, 0xff, 0x16, 0xd7, 0x6c, - 0x20, 0xef, 0x7c, 0x91, 0x9e, 0x3a, 0x75, 0x09 } -}, - -{ - 32, - { 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, - 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, - 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, - 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 }, - { 0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17, - 0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10 }, - { 0x79, 0x60, 0x10, 0x9F, 0xB6, 0xDC, 0x42, 0x94, - 0x7F, 0xCF, 0xE5, 0x9E, 0xA3, 0xC5, 0xEB, 0x6B } -} -}; - unsigned char buf[2][16]; - symmetric_key skey; - int err; - unsigned int x; - - for (x = 0; x < LTC_ARRAY_SIZE(tests); x++) { - zeromem(&skey, sizeof(skey)); - if ((err = camellia_setup(tests[x].key, tests[x].keylen, 0, &skey)) != CRYPT_OK) { - return err; - } - if ((err = camellia_ecb_encrypt(tests[x].pt, buf[0], &skey)) != CRYPT_OK) { - camellia_done(&skey); - return err; - } - if ((err = camellia_ecb_decrypt(tests[x].ct, buf[1], &skey)) != CRYPT_OK) { - camellia_done(&skey); - return err; - } - camellia_done(&skey); - if (ltc_compare_testvector(tests[x].ct, 16, buf[0], 16, "Camellia Encrypt", x) || - ltc_compare_testvector(tests[x].pt, 16, buf[1], 16, "Camellia Decrypt", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -void camellia_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - -int camellia_keysize(int *keysize) -{ - if (*keysize >= 32) { *keysize = 32; } - else if (*keysize >= 24) { *keysize = 24; } - else if (*keysize >= 16) { *keysize = 16; } - else return CRYPT_INVALID_KEYSIZE; - return CRYPT_OK; -} - -#undef loc - -#endif diff --git a/src/ciphers/idea.c b/src/ciphers/idea.c deleted file mode 100644 index 707da824..00000000 --- a/src/ciphers/idea.c +++ /dev/null @@ -1,258 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* Based on idea.cpp - originally written and placed in the public domain by Wei Dai - https://github.com/weidai11/cryptopp/blob/master/idea.cpp - - Patents should be expired. On 2017-10-16 wikipedia says: - https://en.wikipedia.org/wiki/International_Data_Encryption_Algorithm - - A patent application for IDEA was first filed in Switzerland (CH A 1690/90) on May 18, 1990, - then an international patent application was filed under the Patent Cooperation Treaty on - May 16, 1991. Patents were eventually granted in Austria, France, Germany, Italy, the Netherlands, - Spain, Sweden, Switzerland, the United Kingdom, (European Patent Register entry for European - patent no. 0482154, filed May 16, 1991, issued June 22, 1994 and expired May 16, 2011), - the United States (U.S. Patent 5,214,703, issued May 25, 1993 and expired January 7, 2012) - and Japan (JP 3225440) (expired May 16, 2011). - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_IDEA - -const struct ltc_cipher_descriptor idea_desc = { - "idea", - 24, /* cipher_ID */ - 16, 16, 8, 8, /* min_key_len, max_key_len, block_len, default_rounds */ - &idea_setup, - &idea_ecb_encrypt, - &idea_ecb_decrypt, - &idea_test, - &idea_done, - &idea_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -typedef unsigned short int ushort16; - -#define LOW16(x) ((x)&0xffff) /* compiler should be able to optimize this away if x is 16 bits */ -#define HIGH16(x) ((x)>>16) -#define MUL(a,b) { \ - ulong32 p = (ulong32)LOW16(a) * b; \ - if (p) { \ - p = LOW16(p) - HIGH16(p); \ - a = (ushort16)p - (ushort16)HIGH16(p); \ - } \ - else \ - a = 1 - a - b; \ - } -#define STORE16(x,y) { (y)[0] = (unsigned char)(((x)>>8)&255); (y)[1] = (unsigned char)((x)&255); } -#define LOAD16(x,y) { x = ((ushort16)((y)[0] & 255)<<8) | ((ushort16)((y)[1] & 255)); } - -static ushort16 s_mul_inv(ushort16 x) -{ - ushort16 y = x; - unsigned i; - - for (i = 0; i < 15; i++) { - MUL(y, LOW16(y)); - MUL(y, x); - } - return LOW16(y); -} - -static ushort16 s_add_inv(ushort16 x) -{ - return LOW16(0 - x); -} - -#define s_setup_key s_idea_setup_key -static int s_setup_key(const unsigned char *key, symmetric_key *skey) -{ - int i, j; - ushort16 *e_key = skey->idea.ek; - ushort16 *d_key = skey->idea.dk; - - /* prepare enc key */ - for (i = 0; i < 8; i++) { - LOAD16(e_key[i], key + 2 * i); - } - for (; i < LTC_IDEA_KEYLEN; i++) { - j = (i - i % 8) - 8; - e_key[i] = LOW16((e_key[j+(i+1)%8] << 9) | (e_key[j+(i+2)%8] >> 7)); - } - - /* prepare dec key */ - for (i = 0; i < LTC_IDEA_ROUNDS; i++) { - d_key[i*6+0] = s_mul_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+0]); - d_key[i*6+1] = s_add_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+1+(i>0 ? 1 : 0)]); - d_key[i*6+2] = s_add_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+2-(i>0 ? 1 : 0)]); - d_key[i*6+3] = s_mul_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+3]); - d_key[i*6+4] = e_key[(LTC_IDEA_ROUNDS-1-i)*6+4]; - d_key[i*6+5] = e_key[(LTC_IDEA_ROUNDS-1-i)*6+5]; - } - d_key[i*6+0] = s_mul_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+0]); - d_key[i*6+1] = s_add_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+1]); - d_key[i*6+2] = s_add_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+2]); - d_key[i*6+3] = s_mul_inv(e_key[(LTC_IDEA_ROUNDS-i)*6+3]); - - return CRYPT_OK; -} - -static int s_process_block(const unsigned char *in, unsigned char *out, const ushort16 *m_key) -{ - int i; - ushort16 x0, x1, x2, x3, t0, t1; - - LOAD16(x0, in + 0); - LOAD16(x1, in + 2); - LOAD16(x2, in + 4); - LOAD16(x3, in + 6); - - for (i = 0; i < LTC_IDEA_ROUNDS; i++) { - MUL(x0, m_key[i*6+0]); - x1 += m_key[i*6+1]; - x2 += m_key[i*6+2]; - MUL(x3, m_key[i*6+3]); - t0 = x0^x2; - MUL(t0, m_key[i*6+4]); - t1 = t0 + (x1^x3); - MUL(t1, m_key[i*6+5]); - t0 += t1; - x0 ^= t1; - x3 ^= t0; - t0 ^= x1; - x1 = x2^t1; - x2 = t0; - } - - MUL(x0, m_key[LTC_IDEA_ROUNDS*6+0]); - x2 += m_key[LTC_IDEA_ROUNDS*6+1]; - x1 += m_key[LTC_IDEA_ROUNDS*6+2]; - MUL(x3, m_key[LTC_IDEA_ROUNDS*6+3]); - - STORE16(x0, out + 0); - STORE16(x2, out + 2); - STORE16(x1, out + 4); - STORE16(x3, out + 6); - - return CRYPT_OK; -} - -int idea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - - if (num_rounds != 0 && num_rounds != 8) return CRYPT_INVALID_ROUNDS; - if (keylen != 16) return CRYPT_INVALID_KEYSIZE; - - return s_setup_key(key, skey); -} - -int idea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - int err = s_process_block(pt, ct, skey->idea.ek); -#ifdef LTC_CLEAN_STACK - burn_stack(sizeof(ushort16) * 6 + sizeof(int)); -#endif - return err; -} - -int idea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - int err = s_process_block(ct, pt, skey->idea.dk); -#ifdef LTC_CLEAN_STACK - burn_stack(sizeof(ushort16) * 6 + sizeof(int)); -#endif - return err; -} - -void idea_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - -int idea_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize < 16) { - return CRYPT_INVALID_KEYSIZE; - } - *keysize = 16; - return CRYPT_OK; -} - -int idea_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - unsigned char key[16], pt[8], ct[8]; - } tests[] = { - { - /* key */ { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - /* pt */ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - /* ct */ { 0xB1, 0xF5, 0xF7, 0xF8, 0x79, 0x01, 0x37, 0x0F } - }, - { - /* key */ { 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - /* pt */ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - /* ct */ { 0xB3, 0x92, 0x7D, 0xFF, 0xB6, 0x35, 0x86, 0x26 } - }, - { - /* key */ { 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - /* pt */ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - /* ct */ { 0xE9, 0x87, 0xE0, 0x02, 0x9F, 0xB9, 0x97, 0x85 } - }, - { - /* key */ { 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - /* pt */ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - /* ct */ { 0x75, 0x4A, 0x03, 0xCE, 0x08, 0xDB, 0x7D, 0xAA } - }, - { - /* key */ { 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - /* pt */ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - /* ct */ { 0xF0, 0x15, 0xF9, 0xFB, 0x0C, 0xFC, 0x7E, 0x1C } - }, - }; - - unsigned char buf[2][8]; - symmetric_key key; - int err, x; - - if (sizeof(ushort16) != 2) { - return CRYPT_FAIL_TESTVECTOR; - } - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { - if ((err = idea_setup(tests[x].key, 16, 8, &key)) != CRYPT_OK) { - return err; - } - if ((err = idea_ecb_encrypt(tests[x].pt, buf[0], &key)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf[0], 8, tests[x].ct, 8, "IDEA Encrypt", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - if ((err = idea_ecb_decrypt(tests[x].ct, buf[1], &key)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf[1], 8, tests[x].pt, 8, "IDEA Decrypt", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - - return CRYPT_OK; -#endif -} - -#undef LOW16 -#undef HIGH16 -#undef MUL -#undef STORE16 -#undef LOAD16 -#undef s_setup_key - -#endif diff --git a/src/ciphers/kasumi.c b/src/ciphers/kasumi.c deleted file mode 100644 index a512eab4..00000000 --- a/src/ciphers/kasumi.c +++ /dev/null @@ -1,311 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file kasumi.c - Implementation of the 3GPP Kasumi block cipher - Derived from the 3GPP standard source code -*/ - -#include "tomcrypt_private.h" - -#ifdef LTC_KASUMI - -typedef unsigned u16; - -#define ROL16(x, y) ((((x)<<(y)) | ((x)>>(16-(y)))) & 0xFFFF) - -const struct ltc_cipher_descriptor kasumi_desc = { - "kasumi", - 21, - 16, 16, 8, 8, - &kasumi_setup, - &kasumi_ecb_encrypt, - &kasumi_ecb_decrypt, - &kasumi_test, - &kasumi_done, - &kasumi_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -#define FI kasumi_FI -static u16 FI( u16 in, u16 subkey ) -{ - u16 nine, seven; - static const u16 S7[128] = { - 54, 50, 62, 56, 22, 34, 94, 96, 38, 6, 63, 93, 2, 18,123, 33, - 55,113, 39,114, 21, 67, 65, 12, 47, 73, 46, 27, 25,111,124, 81, - 53, 9,121, 79, 52, 60, 58, 48,101,127, 40,120,104, 70, 71, 43, - 20,122, 72, 61, 23,109, 13,100, 77, 1, 16, 7, 82, 10,105, 98, - 117,116, 76, 11, 89,106, 0,125,118, 99, 86, 69, 30, 57,126, 87, - 112, 51, 17, 5, 95, 14, 90, 84, 91, 8, 35,103, 32, 97, 28, 66, - 102, 31, 26, 45, 75, 4, 85, 92, 37, 74, 80, 49, 68, 29,115, 44, - 64,107,108, 24,110, 83, 36, 78, 42, 19, 15, 41, 88,119, 59, 3 }; - static const u16 S9[512] = { - 167,239,161,379,391,334, 9,338, 38,226, 48,358,452,385, 90,397, - 183,253,147,331,415,340, 51,362,306,500,262, 82,216,159,356,177, - 175,241,489, 37,206, 17, 0,333, 44,254,378, 58,143,220, 81,400, - 95, 3,315,245, 54,235,218,405,472,264,172,494,371,290,399, 76, - 165,197,395,121,257,480,423,212,240, 28,462,176,406,507,288,223, - 501,407,249,265, 89,186,221,428,164, 74,440,196,458,421,350,163, - 232,158,134,354, 13,250,491,142,191, 69,193,425,152,227,366,135, - 344,300,276,242,437,320,113,278, 11,243, 87,317, 36, 93,496, 27, - 487,446,482, 41, 68,156,457,131,326,403,339, 20, 39,115,442,124, - 475,384,508, 53,112,170,479,151,126,169, 73,268,279,321,168,364, - 363,292, 46,499,393,327,324, 24,456,267,157,460,488,426,309,229, - 439,506,208,271,349,401,434,236, 16,209,359, 52, 56,120,199,277, - 465,416,252,287,246, 6, 83,305,420,345,153,502, 65, 61,244,282, - 173,222,418, 67,386,368,261,101,476,291,195,430, 49, 79,166,330, - 280,383,373,128,382,408,155,495,367,388,274,107,459,417, 62,454, - 132,225,203,316,234, 14,301, 91,503,286,424,211,347,307,140,374, - 35,103,125,427, 19,214,453,146,498,314,444,230,256,329,198,285, - 50,116, 78,410, 10,205,510,171,231, 45,139,467, 29, 86,505, 32, - 72, 26,342,150,313,490,431,238,411,325,149,473, 40,119,174,355, - 185,233,389, 71,448,273,372, 55,110,178,322, 12,469,392,369,190, - 1,109,375,137,181, 88, 75,308,260,484, 98,272,370,275,412,111, - 336,318, 4,504,492,259,304, 77,337,435, 21,357,303,332,483, 18, - 47, 85, 25,497,474,289,100,269,296,478,270,106, 31,104,433, 84, - 414,486,394, 96, 99,154,511,148,413,361,409,255,162,215,302,201, - 266,351,343,144,441,365,108,298,251, 34,182,509,138,210,335,133, - 311,352,328,141,396,346,123,319,450,281,429,228,443,481, 92,404, - 485,422,248,297, 23,213,130,466, 22,217,283, 70,294,360,419,127, - 312,377, 7,468,194, 2,117,295,463,258,224,447,247,187, 80,398, - 284,353,105,390,299,471,470,184, 57,200,348, 63,204,188, 33,451, - 97, 30,310,219, 94,160,129,493, 64,179,263,102,189,207,114,402, - 438,477,387,122,192, 42,381, 5,145,118,180,449,293,323,136,380, - 43, 66, 60,455,341,445,202,432, 8,237, 15,376,436,464, 59,461}; - - /* The sixteen bit input is split into two unequal halves, * - * nine bits and seven bits - as is the subkey */ - - nine = (u16)(in>>7)&0x1FF; - seven = (u16)(in&0x7F); - - /* Now run the various operations */ - nine = (u16)(S9[nine] ^ seven); - seven = (u16)(S7[seven] ^ (nine & 0x7F)); - seven ^= (subkey>>9); - nine ^= (subkey&0x1FF); - nine = (u16)(S9[nine] ^ seven); - seven = (u16)(S7[seven] ^ (nine & 0x7F)); - return (u16)(seven<<9) + nine; -} - -static ulong32 FO( ulong32 in, int round_no, const symmetric_key *key) -{ - u16 left, right; - - /* Split the input into two 16-bit words */ - left = (u16)(in>>16); - right = (u16) in&0xFFFF; - - /* Now apply the same basic transformation three times */ - left ^= key->kasumi.KOi1[round_no]; - left = FI( left, key->kasumi.KIi1[round_no] ); - left ^= right; - - right ^= key->kasumi.KOi2[round_no]; - right = FI( right, key->kasumi.KIi2[round_no] ); - right ^= left; - - left ^= key->kasumi.KOi3[round_no]; - left = FI( left, key->kasumi.KIi3[round_no] ); - left ^= right; - - return (((ulong32)right)<<16)+left; -} - -static ulong32 FL( ulong32 in, int round_no, const symmetric_key *key ) -{ - u16 l, r, a, b; - /* split out the left and right halves */ - l = (u16)(in>>16); - r = (u16)(in)&0xFFFF; - /* do the FL() operations */ - a = (u16) (l & key->kasumi.KLi1[round_no]); - r ^= ROL16(a,1); - b = (u16)(r | key->kasumi.KLi2[round_no]); - l ^= ROL16(b,1); - /* put the two halves back together */ - - return (((ulong32)l)<<16) + r; -} - -int kasumi_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - ulong32 left, right, temp; - int n; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - LOAD32H(left, pt); - LOAD32H(right, pt+4); - - for (n = 0; n <= 7; ) { - temp = FL(left, n, skey); - temp = FO(temp, n++, skey); - right ^= temp; - temp = FO(right, n, skey); - temp = FL(temp, n++, skey); - left ^= temp; - } - - STORE32H(left, ct); - STORE32H(right, ct+4); - - return CRYPT_OK; -} - -int kasumi_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - ulong32 left, right, temp; - int n; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - LOAD32H(left, ct); - LOAD32H(right, ct+4); - - for (n = 7; n >= 0; ) { - temp = FO(right, n, skey); - temp = FL(temp, n--, skey); - left ^= temp; - temp = FL(left, n, skey); - temp = FO(temp, n--, skey); - right ^= temp; - } - - STORE32H(left, pt); - STORE32H(right, pt+4); - - return CRYPT_OK; -} - -int kasumi_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - static const u16 C[8] = { 0x0123,0x4567,0x89AB,0xCDEF, 0xFEDC,0xBA98,0x7654,0x3210 }; - u16 ukey[8], Kprime[8]; - int n; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - - if (keylen != 16) { - return CRYPT_INVALID_KEYSIZE; - } - - if (num_rounds != 0 && num_rounds != 8) { - return CRYPT_INVALID_ROUNDS; - } - - /* Start by ensuring the subkeys are endian correct on a 16-bit basis */ - for (n = 0; n < 8; n++ ) { - ukey[n] = (((u16)key[2*n]) << 8) | key[2*n+1]; - } - - /* Now build the K'[] keys */ - for (n = 0; n < 8; n++) { - Kprime[n] = ukey[n] ^ C[n]; - } - - /* Finally construct the various sub keys */ - for(n = 0; n < 8; n++) { - skey->kasumi.KLi1[n] = ROL16(ukey[n],1); - skey->kasumi.KLi2[n] = Kprime[(n+2)&0x7]; - skey->kasumi.KOi1[n] = ROL16(ukey[(n+1)&0x7],5); - skey->kasumi.KOi2[n] = ROL16(ukey[(n+5)&0x7],8); - skey->kasumi.KOi3[n] = ROL16(ukey[(n+6)&0x7],13); - skey->kasumi.KIi1[n] = Kprime[(n+4)&0x7]; - skey->kasumi.KIi2[n] = Kprime[(n+3)&0x7]; - skey->kasumi.KIi3[n] = Kprime[(n+7)&0x7]; - } - - return CRYPT_OK; -} - -void kasumi_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - -int kasumi_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize >= 16) { - *keysize = 16; - return CRYPT_OK; - } - return CRYPT_INVALID_KEYSIZE; -} - -int kasumi_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - unsigned char key[16], pt[8], ct[8]; - } tests[] = { - -{ - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x4B, 0x58, 0xA7, 0x71, 0xAF, 0xC7, 0xE5, 0xE8 } -}, - -{ - { 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x7E, 0xEF, 0x11, 0x3C, 0x95, 0xBB, 0x5A, 0x77 } -}, - -{ - { 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x5F, 0x14, 0x06, 0x86, 0xD7, 0xAD, 0x5A, 0x39 }, -}, - -{ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x2E, 0x14, 0x91, 0xCF, 0x70, 0xAA, 0x46, 0x5D } -}, - -{ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xB5, 0x45, 0x86, 0xF4, 0xAB, 0x9A, 0xE5, 0x46 } -}, - -}; - unsigned char buf[2][8]; - symmetric_key key; - int err, x; - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { - if ((err = kasumi_setup(tests[x].key, 16, 0, &key)) != CRYPT_OK) { - return err; - } - if ((err = kasumi_ecb_encrypt(tests[x].pt, buf[0], &key)) != CRYPT_OK) { - return err; - } - if ((err = kasumi_ecb_decrypt(tests[x].ct, buf[1], &key)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf[1], 8, tests[x].pt, 8, "Kasumi Decrypt", x) || - ltc_compare_testvector(buf[0], 8, tests[x].ct, 8, "Kasumi Encrypt", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#undef ROL16 -#undef FI - -#endif diff --git a/src/ciphers/khazad.c b/src/ciphers/khazad.c deleted file mode 100644 index acfe0085..00000000 --- a/src/ciphers/khazad.c +++ /dev/null @@ -1,842 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file khazad.c - Khazad implementation derived from public domain source - Authors: Paulo S.L.M. Barreto and Vincent Rijmen. -*/ - -#ifdef LTC_KHAZAD - -const struct ltc_cipher_descriptor khazad_desc = { - "khazad", - 18, - 16, 16, 8, 8, - &khazad_setup, - &khazad_ecb_encrypt, - &khazad_ecb_decrypt, - &khazad_test, - &khazad_done, - &khazad_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -#define R 8 - -static const ulong64 T0[256] = { - CONST64(0xbad3d268bbb96a01), CONST64(0x54fc4d19e59a66b1), CONST64(0x2f71bc93e26514cd), CONST64(0x749ccdb925871b51), - CONST64(0x53f55102f7a257a4), CONST64(0xd3686bb8d0d6be03), CONST64(0xd26b6fbdd6deb504), CONST64(0x4dd72964b35285fe), - CONST64(0x50f05d0dfdba4aad), CONST64(0xace98a26cf09e063), CONST64(0x8d8a0e83091c9684), CONST64(0xbfdcc679a5914d1a), - CONST64(0x7090ddad3da7374d), CONST64(0x52f65507f1aa5ca3), CONST64(0x9ab352c87ba417e1), CONST64(0x4cd42d61b55a8ef9), - CONST64(0xea238f65460320ac), CONST64(0xd56273a6c4e68411), CONST64(0x97a466f155cc68c2), CONST64(0xd16e63b2dcc6a80d), - CONST64(0x3355ccffaa85d099), CONST64(0x51f35908fbb241aa), CONST64(0x5bed712ac7e20f9c), CONST64(0xa6f7a204f359ae55), - CONST64(0xde7f5f81febec120), CONST64(0x48d83d75ad7aa2e5), CONST64(0xa8e59a32d729cc7f), CONST64(0x99b65ec771bc0ae8), - CONST64(0xdb704b90e096e63b), CONST64(0x3256c8faac8ddb9e), CONST64(0xb7c4e65195d11522), CONST64(0xfc19d72b32b3aace), - CONST64(0xe338ab48704b7393), CONST64(0x9ebf42dc63843bfd), CONST64(0x91ae7eef41fc52d0), CONST64(0x9bb056cd7dac1ce6), - CONST64(0xe23baf4d76437894), CONST64(0xbbd0d66dbdb16106), CONST64(0x41c319589b32f1da), CONST64(0x6eb2a5cb7957e517), - CONST64(0xa5f2ae0bf941b35c), CONST64(0xcb400bc08016564b), CONST64(0x6bbdb1da677fc20c), CONST64(0x95a26efb59dc7ecc), - CONST64(0xa1febe1fe1619f40), CONST64(0xf308eb1810cbc3e3), CONST64(0xb1cefe4f81e12f30), CONST64(0x0206080a0c10160e), - CONST64(0xcc4917db922e675e), CONST64(0xc45137f3a26e3f66), CONST64(0x1d2774694ee8cf53), CONST64(0x143c504478a09c6c), - CONST64(0xc3582be8b0560e73), CONST64(0x63a591f2573f9a34), CONST64(0xda734f95e69eed3c), CONST64(0x5de76934d3d2358e), - CONST64(0x5fe1613edfc22380), CONST64(0xdc79578bf2aed72e), CONST64(0x7d87e99413cf486e), CONST64(0xcd4a13de94266c59), - CONST64(0x7f81e19e1fdf5e60), CONST64(0x5aee752fc1ea049b), CONST64(0x6cb4adc17547f319), CONST64(0x5ce46d31d5da3e89), - CONST64(0xf704fb0c08ebefff), CONST64(0x266a98bed42d47f2), CONST64(0xff1cdb2438abb7c7), CONST64(0xed2a937e543b11b9), - CONST64(0xe825876f4a1336a2), CONST64(0x9dba4ed3699c26f4), CONST64(0x6fb1a1ce7f5fee10), CONST64(0x8e8f028c03048b8d), - CONST64(0x192b647d56c8e34f), CONST64(0xa0fdba1ae7699447), CONST64(0xf00de7171ad3deea), CONST64(0x89861e97113cba98), - CONST64(0x0f113c332278692d), CONST64(0x07091c1b12383115), CONST64(0xafec8629c511fd6a), CONST64(0xfb10cb30208b9bdb), - CONST64(0x0818202830405838), CONST64(0x153f54417ea8976b), CONST64(0x0d1734392e687f23), CONST64(0x040c101418202c1c), - CONST64(0x0103040506080b07), CONST64(0x64ac8de94507ab21), CONST64(0xdf7c5b84f8b6ca27), CONST64(0x769ac5b329970d5f), - CONST64(0x798bf9800bef6472), CONST64(0xdd7a538ef4a6dc29), CONST64(0x3d47f4c98ef5b2b3), CONST64(0x163a584e74b08a62), - CONST64(0x3f41fcc382e5a4bd), CONST64(0x3759dcebb2a5fc85), CONST64(0x6db7a9c4734ff81e), CONST64(0x3848e0d890dd95a8), - CONST64(0xb9d6de67b1a17708), CONST64(0x7395d1a237bf2a44), CONST64(0xe926836a4c1b3da5), CONST64(0x355fd4e1beb5ea8b), - CONST64(0x55ff491ce3926db6), CONST64(0x7193d9a83baf3c4a), CONST64(0x7b8df18a07ff727c), CONST64(0x8c890a860f149d83), - CONST64(0x7296d5a731b72143), CONST64(0x88851a921734b19f), CONST64(0xf607ff090ee3e4f8), CONST64(0x2a7ea882fc4d33d6), - CONST64(0x3e42f8c684edafba), CONST64(0x5ee2653bd9ca2887), CONST64(0x27699cbbd2254cf5), CONST64(0x46ca0543890ac0cf), - CONST64(0x0c14303c28607424), CONST64(0x65af89ec430fa026), CONST64(0x68b8bdd56d67df05), CONST64(0x61a399f85b2f8c3a), - CONST64(0x03050c0f0a181d09), CONST64(0xc15e23e2bc46187d), CONST64(0x57f94116ef827bb8), CONST64(0xd6677fa9cefe9918), - CONST64(0xd976439aec86f035), CONST64(0x58e87d25cdfa1295), CONST64(0xd875479fea8efb32), CONST64(0x66aa85e34917bd2f), - CONST64(0xd7647bacc8f6921f), CONST64(0x3a4ee8d29ccd83a6), CONST64(0xc84507cf8a0e4b42), CONST64(0x3c44f0cc88fdb9b4), - CONST64(0xfa13cf35268390dc), CONST64(0x96a762f453c463c5), CONST64(0xa7f4a601f551a552), CONST64(0x98b55ac277b401ef), - CONST64(0xec29977b52331abe), CONST64(0xb8d5da62b7a97c0f), CONST64(0xc7543bfca876226f), CONST64(0xaeef822cc319f66d), - CONST64(0x69bbb9d06b6fd402), CONST64(0x4bdd317aa762bfec), CONST64(0xabe0963ddd31d176), CONST64(0xa9e69e37d121c778), - CONST64(0x67a981e64f1fb628), CONST64(0x0a1e28223c504e36), CONST64(0x47c901468f02cbc8), CONST64(0xf20bef1d16c3c8e4), - CONST64(0xb5c2ee5b99c1032c), CONST64(0x226688aacc0d6bee), CONST64(0xe532b356647b4981), CONST64(0xee2f9f715e230cb0), - CONST64(0xbedfc27ca399461d), CONST64(0x2b7dac87fa4538d1), CONST64(0x819e3ebf217ce2a0), CONST64(0x1236485a6c90a67e), - CONST64(0x839836b52d6cf4ae), CONST64(0x1b2d6c775ad8f541), CONST64(0x0e1238362470622a), CONST64(0x23658cafca0560e9), - CONST64(0xf502f30604fbf9f1), CONST64(0x45cf094c8312ddc6), CONST64(0x216384a5c61576e7), CONST64(0xce4f1fd19e3e7150), - CONST64(0x49db3970ab72a9e2), CONST64(0x2c74b09ce87d09c4), CONST64(0xf916c33a2c9b8dd5), CONST64(0xe637bf596e635488), - CONST64(0xb6c7e25493d91e25), CONST64(0x2878a088f05d25d8), CONST64(0x17395c4b72b88165), CONST64(0x829b32b02b64ffa9), - CONST64(0x1a2e68725cd0fe46), CONST64(0x8b80169d1d2cac96), CONST64(0xfe1fdf213ea3bcc0), CONST64(0x8a8312981b24a791), - CONST64(0x091b242d3648533f), CONST64(0xc94603ca8c064045), CONST64(0x879426a1354cd8b2), CONST64(0x4ed2256bb94a98f7), - CONST64(0xe13ea3427c5b659d), CONST64(0x2e72b896e46d1fca), CONST64(0xe431b75362734286), CONST64(0xe03da7477a536e9a), - CONST64(0xeb208b60400b2bab), CONST64(0x90ad7aea47f459d7), CONST64(0xa4f1aa0eff49b85b), CONST64(0x1e22786644f0d25a), - CONST64(0x85922eab395ccebc), CONST64(0x60a09dfd5d27873d), CONST64(0x0000000000000000), CONST64(0x256f94b1de355afb), - CONST64(0xf401f70302f3f2f6), CONST64(0xf10ee3121cdbd5ed), CONST64(0x94a16afe5fd475cb), CONST64(0x0b1d2c273a584531), - CONST64(0xe734bb5c686b5f8f), CONST64(0x759fc9bc238f1056), CONST64(0xef2c9b74582b07b7), CONST64(0x345cd0e4b8bde18c), - CONST64(0x3153c4f5a695c697), CONST64(0xd46177a3c2ee8f16), CONST64(0xd06d67b7dacea30a), CONST64(0x869722a43344d3b5), - CONST64(0x7e82e59b19d75567), CONST64(0xadea8e23c901eb64), CONST64(0xfd1ad32e34bba1c9), CONST64(0x297ba48df6552edf), - CONST64(0x3050c0f0a09dcd90), CONST64(0x3b4decd79ac588a1), CONST64(0x9fbc46d9658c30fa), CONST64(0xf815c73f2a9386d2), - CONST64(0xc6573ff9ae7e2968), CONST64(0x13354c5f6a98ad79), CONST64(0x060a181e14303a12), CONST64(0x050f14111e28271b), - CONST64(0xc55233f6a4663461), CONST64(0x113344556688bb77), CONST64(0x7799c1b62f9f0658), CONST64(0x7c84ed9115c74369), - CONST64(0x7a8ef58f01f7797b), CONST64(0x7888fd850de76f75), CONST64(0x365ad8eeb4adf782), CONST64(0x1c24706c48e0c454), - CONST64(0x394be4dd96d59eaf), CONST64(0x59eb7920cbf21992), CONST64(0x1828607850c0e848), CONST64(0x56fa4513e98a70bf), - CONST64(0xb3c8f6458df1393e), CONST64(0xb0cdfa4a87e92437), CONST64(0x246c90b4d83d51fc), CONST64(0x206080a0c01d7de0), - CONST64(0xb2cbf2408bf93239), CONST64(0x92ab72e04be44fd9), CONST64(0xa3f8b615ed71894e), CONST64(0xc05d27e7ba4e137a), - CONST64(0x44cc0d49851ad6c1), CONST64(0x62a695f751379133), CONST64(0x103040506080b070), CONST64(0xb4c1ea5e9fc9082b), - CONST64(0x84912aae3f54c5bb), CONST64(0x43c511529722e7d4), CONST64(0x93a876e54dec44de), CONST64(0xc25b2fedb65e0574), - CONST64(0x4ade357fa16ab4eb), CONST64(0xbddace73a9815b14), CONST64(0x8f8c0689050c808a), CONST64(0x2d77b499ee7502c3), - CONST64(0xbcd9ca76af895013), CONST64(0x9cb94ad66f942df3), CONST64(0x6abeb5df6177c90b), CONST64(0x40c01d5d9d3afadd), - CONST64(0xcf4c1bd498367a57), CONST64(0xa2fbb210eb798249), CONST64(0x809d3aba2774e9a7), CONST64(0x4fd1216ebf4293f0), - CONST64(0x1f217c6342f8d95d), CONST64(0xca430fc5861e5d4c), CONST64(0xaae39238db39da71), CONST64(0x42c61557912aecd3), -}; - -static const ulong64 T1[256] = { - CONST64(0xd3ba68d2b9bb016a), CONST64(0xfc54194d9ae5b166), CONST64(0x712f93bc65e2cd14), CONST64(0x9c74b9cd8725511b), - CONST64(0xf5530251a2f7a457), CONST64(0x68d3b86bd6d003be), CONST64(0x6bd2bd6fded604b5), CONST64(0xd74d642952b3fe85), - CONST64(0xf0500d5dbafdad4a), CONST64(0xe9ac268a09cf63e0), CONST64(0x8a8d830e1c098496), CONST64(0xdcbf79c691a51a4d), - CONST64(0x9070addda73d4d37), CONST64(0xf6520755aaf1a35c), CONST64(0xb39ac852a47be117), CONST64(0xd44c612d5ab5f98e), - CONST64(0x23ea658f0346ac20), CONST64(0x62d5a673e6c41184), CONST64(0xa497f166cc55c268), CONST64(0x6ed1b263c6dc0da8), - CONST64(0x5533ffcc85aa99d0), CONST64(0xf3510859b2fbaa41), CONST64(0xed5b2a71e2c79c0f), CONST64(0xf7a604a259f355ae), - CONST64(0x7fde815fbefe20c1), CONST64(0xd848753d7aade5a2), CONST64(0xe5a8329a29d77fcc), CONST64(0xb699c75ebc71e80a), - CONST64(0x70db904b96e03be6), CONST64(0x5632fac88dac9edb), CONST64(0xc4b751e6d1952215), CONST64(0x19fc2bd7b332ceaa), - CONST64(0x38e348ab4b709373), CONST64(0xbf9edc428463fd3b), CONST64(0xae91ef7efc41d052), CONST64(0xb09bcd56ac7de61c), - CONST64(0x3be24daf43769478), CONST64(0xd0bb6dd6b1bd0661), CONST64(0xc3415819329bdaf1), CONST64(0xb26ecba5577917e5), - CONST64(0xf2a50bae41f95cb3), CONST64(0x40cbc00b16804b56), CONST64(0xbd6bdab17f670cc2), CONST64(0xa295fb6edc59cc7e), - CONST64(0xfea11fbe61e1409f), CONST64(0x08f318ebcb10e3c3), CONST64(0xceb14ffee181302f), CONST64(0x06020a08100c0e16), - CONST64(0x49ccdb172e925e67), CONST64(0x51c4f3376ea2663f), CONST64(0x271d6974e84e53cf), CONST64(0x3c144450a0786c9c), - CONST64(0x58c3e82b56b0730e), CONST64(0xa563f2913f57349a), CONST64(0x73da954f9ee63ced), CONST64(0xe75d3469d2d38e35), - CONST64(0xe15f3e61c2df8023), CONST64(0x79dc8b57aef22ed7), CONST64(0x877d94e9cf136e48), CONST64(0x4acdde132694596c), - CONST64(0x817f9ee1df1f605e), CONST64(0xee5a2f75eac19b04), CONST64(0xb46cc1ad477519f3), CONST64(0xe45c316ddad5893e), - CONST64(0x04f70cfbeb08ffef), CONST64(0x6a26be982dd4f247), CONST64(0x1cff24dbab38c7b7), CONST64(0x2aed7e933b54b911), - CONST64(0x25e86f87134aa236), CONST64(0xba9dd34e9c69f426), CONST64(0xb16fcea15f7f10ee), CONST64(0x8f8e8c0204038d8b), - CONST64(0x2b197d64c8564fe3), CONST64(0xfda01aba69e74794), CONST64(0x0df017e7d31aeade), CONST64(0x8689971e3c1198ba), - CONST64(0x110f333c78222d69), CONST64(0x09071b1c38121531), CONST64(0xecaf298611c56afd), CONST64(0x10fb30cb8b20db9b), - CONST64(0x1808282040303858), CONST64(0x3f154154a87e6b97), CONST64(0x170d3934682e237f), CONST64(0x0c04141020181c2c), - CONST64(0x030105040806070b), CONST64(0xac64e98d074521ab), CONST64(0x7cdf845bb6f827ca), CONST64(0x9a76b3c597295f0d), - CONST64(0x8b7980f9ef0b7264), CONST64(0x7add8e53a6f429dc), CONST64(0x473dc9f4f58eb3b2), CONST64(0x3a164e58b074628a), - CONST64(0x413fc3fce582bda4), CONST64(0x5937ebdca5b285fc), CONST64(0xb76dc4a94f731ef8), CONST64(0x4838d8e0dd90a895), - CONST64(0xd6b967dea1b10877), CONST64(0x9573a2d1bf37442a), CONST64(0x26e96a831b4ca53d), CONST64(0x5f35e1d4b5be8bea), - CONST64(0xff551c4992e3b66d), CONST64(0x9371a8d9af3b4a3c), CONST64(0x8d7b8af1ff077c72), CONST64(0x898c860a140f839d), - CONST64(0x9672a7d5b7314321), CONST64(0x8588921a34179fb1), CONST64(0x07f609ffe30ef8e4), CONST64(0x7e2a82a84dfcd633), - CONST64(0x423ec6f8ed84baaf), CONST64(0xe25e3b65cad98728), CONST64(0x6927bb9c25d2f54c), CONST64(0xca4643050a89cfc0), - CONST64(0x140c3c3060282474), CONST64(0xaf65ec890f4326a0), CONST64(0xb868d5bd676d05df), CONST64(0xa361f8992f5b3a8c), - CONST64(0x05030f0c180a091d), CONST64(0x5ec1e22346bc7d18), CONST64(0xf957164182efb87b), CONST64(0x67d6a97ffece1899), - CONST64(0x76d99a4386ec35f0), CONST64(0xe858257dfacd9512), CONST64(0x75d89f478eea32fb), CONST64(0xaa66e38517492fbd), - CONST64(0x64d7ac7bf6c81f92), CONST64(0x4e3ad2e8cd9ca683), CONST64(0x45c8cf070e8a424b), CONST64(0x443cccf0fd88b4b9), - CONST64(0x13fa35cf8326dc90), CONST64(0xa796f462c453c563), CONST64(0xf4a701a651f552a5), CONST64(0xb598c25ab477ef01), - CONST64(0x29ec7b973352be1a), CONST64(0xd5b862daa9b70f7c), CONST64(0x54c7fc3b76a86f22), CONST64(0xefae2c8219c36df6), - CONST64(0xbb69d0b96f6b02d4), CONST64(0xdd4b7a3162a7ecbf), CONST64(0xe0ab3d9631dd76d1), CONST64(0xe6a9379e21d178c7), - CONST64(0xa967e6811f4f28b6), CONST64(0x1e0a2228503c364e), CONST64(0xc9474601028fc8cb), CONST64(0x0bf21defc316e4c8), - CONST64(0xc2b55beec1992c03), CONST64(0x6622aa880dccee6b), CONST64(0x32e556b37b648149), CONST64(0x2fee719f235eb00c), - CONST64(0xdfbe7cc299a31d46), CONST64(0x7d2b87ac45fad138), CONST64(0x9e81bf3e7c21a0e2), CONST64(0x36125a48906c7ea6), - CONST64(0x9883b5366c2daef4), CONST64(0x2d1b776cd85a41f5), CONST64(0x120e363870242a62), CONST64(0x6523af8c05cae960), - CONST64(0x02f506f3fb04f1f9), CONST64(0xcf454c091283c6dd), CONST64(0x6321a58415c6e776), CONST64(0x4fced11f3e9e5071), - CONST64(0xdb49703972abe2a9), CONST64(0x742c9cb07de8c409), CONST64(0x16f93ac39b2cd58d), CONST64(0x37e659bf636e8854), - CONST64(0xc7b654e2d993251e), CONST64(0x782888a05df0d825), CONST64(0x39174b5cb8726581), CONST64(0x9b82b032642ba9ff), - CONST64(0x2e1a7268d05c46fe), CONST64(0x808b9d162c1d96ac), CONST64(0x1ffe21dfa33ec0bc), CONST64(0x838a9812241b91a7), - CONST64(0x1b092d2448363f53), CONST64(0x46c9ca03068c4540), CONST64(0x9487a1264c35b2d8), CONST64(0xd24e6b254ab9f798), - CONST64(0x3ee142a35b7c9d65), CONST64(0x722e96b86de4ca1f), CONST64(0x31e453b773628642), CONST64(0x3de047a7537a9a6e), - CONST64(0x20eb608b0b40ab2b), CONST64(0xad90ea7af447d759), CONST64(0xf1a40eaa49ff5bb8), CONST64(0x221e6678f0445ad2), - CONST64(0x9285ab2e5c39bcce), CONST64(0xa060fd9d275d3d87), CONST64(0x0000000000000000), CONST64(0x6f25b19435defb5a), - CONST64(0x01f403f7f302f6f2), CONST64(0x0ef112e3db1cedd5), CONST64(0xa194fe6ad45fcb75), CONST64(0x1d0b272c583a3145), - CONST64(0x34e75cbb6b688f5f), CONST64(0x9f75bcc98f235610), CONST64(0x2cef749b2b58b707), CONST64(0x5c34e4d0bdb88ce1), - CONST64(0x5331f5c495a697c6), CONST64(0x61d4a377eec2168f), CONST64(0x6dd0b767ceda0aa3), CONST64(0x9786a4224433b5d3), - CONST64(0x827e9be5d7196755), CONST64(0xeaad238e01c964eb), CONST64(0x1afd2ed3bb34c9a1), CONST64(0x7b298da455f6df2e), - CONST64(0x5030f0c09da090cd), CONST64(0x4d3bd7ecc59aa188), CONST64(0xbc9fd9468c65fa30), CONST64(0x15f83fc7932ad286), - CONST64(0x57c6f93f7eae6829), CONST64(0x35135f4c986a79ad), CONST64(0x0a061e183014123a), CONST64(0x0f051114281e1b27), - CONST64(0x52c5f63366a46134), CONST64(0x33115544886677bb), CONST64(0x9977b6c19f2f5806), CONST64(0x847c91edc7156943), - CONST64(0x8e7a8ff5f7017b79), CONST64(0x887885fde70d756f), CONST64(0x5a36eed8adb482f7), CONST64(0x241c6c70e04854c4), - CONST64(0x4b39dde4d596af9e), CONST64(0xeb592079f2cb9219), CONST64(0x28187860c05048e8), CONST64(0xfa5613458ae9bf70), - CONST64(0xc8b345f6f18d3e39), CONST64(0xcdb04afae9873724), CONST64(0x6c24b4903dd8fc51), CONST64(0x6020a0801dc0e07d), - CONST64(0xcbb240f2f98b3932), CONST64(0xab92e072e44bd94f), CONST64(0xf8a315b671ed4e89), CONST64(0x5dc0e7274eba7a13), - CONST64(0xcc44490d1a85c1d6), CONST64(0xa662f79537513391), CONST64(0x30105040806070b0), CONST64(0xc1b45eeac99f2b08), - CONST64(0x9184ae2a543fbbc5), CONST64(0xc54352112297d4e7), CONST64(0xa893e576ec4dde44), CONST64(0x5bc2ed2f5eb67405), - CONST64(0xde4a7f356aa1ebb4), CONST64(0xdabd73ce81a9145b), CONST64(0x8c8f89060c058a80), CONST64(0x772d99b475eec302), - CONST64(0xd9bc76ca89af1350), CONST64(0xb99cd64a946ff32d), CONST64(0xbe6adfb577610bc9), CONST64(0xc0405d1d3a9dddfa), - CONST64(0x4ccfd41b3698577a), CONST64(0xfba210b279eb4982), CONST64(0x9d80ba3a7427a7e9), CONST64(0xd14f6e2142bff093), - CONST64(0x211f637cf8425dd9), CONST64(0x43cac50f1e864c5d), CONST64(0xe3aa389239db71da), CONST64(0xc64257152a91d3ec), -}; - -static const ulong64 T2[256] = { - CONST64(0xd268bad36a01bbb9), CONST64(0x4d1954fc66b1e59a), CONST64(0xbc932f7114cde265), CONST64(0xcdb9749c1b512587), - CONST64(0x510253f557a4f7a2), CONST64(0x6bb8d368be03d0d6), CONST64(0x6fbdd26bb504d6de), CONST64(0x29644dd785feb352), - CONST64(0x5d0d50f04aadfdba), CONST64(0x8a26ace9e063cf09), CONST64(0x0e838d8a9684091c), CONST64(0xc679bfdc4d1aa591), - CONST64(0xddad7090374d3da7), CONST64(0x550752f65ca3f1aa), CONST64(0x52c89ab317e17ba4), CONST64(0x2d614cd48ef9b55a), - CONST64(0x8f65ea2320ac4603), CONST64(0x73a6d5628411c4e6), CONST64(0x66f197a468c255cc), CONST64(0x63b2d16ea80ddcc6), - CONST64(0xccff3355d099aa85), CONST64(0x590851f341aafbb2), CONST64(0x712a5bed0f9cc7e2), CONST64(0xa204a6f7ae55f359), - CONST64(0x5f81de7fc120febe), CONST64(0x3d7548d8a2e5ad7a), CONST64(0x9a32a8e5cc7fd729), CONST64(0x5ec799b60ae871bc), - CONST64(0x4b90db70e63be096), CONST64(0xc8fa3256db9eac8d), CONST64(0xe651b7c4152295d1), CONST64(0xd72bfc19aace32b3), - CONST64(0xab48e3387393704b), CONST64(0x42dc9ebf3bfd6384), CONST64(0x7eef91ae52d041fc), CONST64(0x56cd9bb01ce67dac), - CONST64(0xaf4de23b78947643), CONST64(0xd66dbbd06106bdb1), CONST64(0x195841c3f1da9b32), CONST64(0xa5cb6eb2e5177957), - CONST64(0xae0ba5f2b35cf941), CONST64(0x0bc0cb40564b8016), CONST64(0xb1da6bbdc20c677f), CONST64(0x6efb95a27ecc59dc), - CONST64(0xbe1fa1fe9f40e161), CONST64(0xeb18f308c3e310cb), CONST64(0xfe4fb1ce2f3081e1), CONST64(0x080a0206160e0c10), - CONST64(0x17dbcc49675e922e), CONST64(0x37f3c4513f66a26e), CONST64(0x74691d27cf534ee8), CONST64(0x5044143c9c6c78a0), - CONST64(0x2be8c3580e73b056), CONST64(0x91f263a59a34573f), CONST64(0x4f95da73ed3ce69e), CONST64(0x69345de7358ed3d2), - CONST64(0x613e5fe12380dfc2), CONST64(0x578bdc79d72ef2ae), CONST64(0xe9947d87486e13cf), CONST64(0x13decd4a6c599426), - CONST64(0xe19e7f815e601fdf), CONST64(0x752f5aee049bc1ea), CONST64(0xadc16cb4f3197547), CONST64(0x6d315ce43e89d5da), - CONST64(0xfb0cf704efff08eb), CONST64(0x98be266a47f2d42d), CONST64(0xdb24ff1cb7c738ab), CONST64(0x937eed2a11b9543b), - CONST64(0x876fe82536a24a13), CONST64(0x4ed39dba26f4699c), CONST64(0xa1ce6fb1ee107f5f), CONST64(0x028c8e8f8b8d0304), - CONST64(0x647d192be34f56c8), CONST64(0xba1aa0fd9447e769), CONST64(0xe717f00ddeea1ad3), CONST64(0x1e978986ba98113c), - CONST64(0x3c330f11692d2278), CONST64(0x1c1b070931151238), CONST64(0x8629afecfd6ac511), CONST64(0xcb30fb109bdb208b), - CONST64(0x2028081858383040), CONST64(0x5441153f976b7ea8), CONST64(0x34390d177f232e68), CONST64(0x1014040c2c1c1820), - CONST64(0x040501030b070608), CONST64(0x8de964acab214507), CONST64(0x5b84df7cca27f8b6), CONST64(0xc5b3769a0d5f2997), - CONST64(0xf980798b64720bef), CONST64(0x538edd7adc29f4a6), CONST64(0xf4c93d47b2b38ef5), CONST64(0x584e163a8a6274b0), - CONST64(0xfcc33f41a4bd82e5), CONST64(0xdceb3759fc85b2a5), CONST64(0xa9c46db7f81e734f), CONST64(0xe0d8384895a890dd), - CONST64(0xde67b9d67708b1a1), CONST64(0xd1a273952a4437bf), CONST64(0x836ae9263da54c1b), CONST64(0xd4e1355fea8bbeb5), - CONST64(0x491c55ff6db6e392), CONST64(0xd9a871933c4a3baf), CONST64(0xf18a7b8d727c07ff), CONST64(0x0a868c899d830f14), - CONST64(0xd5a77296214331b7), CONST64(0x1a928885b19f1734), CONST64(0xff09f607e4f80ee3), CONST64(0xa8822a7e33d6fc4d), - CONST64(0xf8c63e42afba84ed), CONST64(0x653b5ee22887d9ca), CONST64(0x9cbb27694cf5d225), CONST64(0x054346cac0cf890a), - CONST64(0x303c0c1474242860), CONST64(0x89ec65afa026430f), CONST64(0xbdd568b8df056d67), CONST64(0x99f861a38c3a5b2f), - CONST64(0x0c0f03051d090a18), CONST64(0x23e2c15e187dbc46), CONST64(0x411657f97bb8ef82), CONST64(0x7fa9d6679918cefe), - CONST64(0x439ad976f035ec86), CONST64(0x7d2558e81295cdfa), CONST64(0x479fd875fb32ea8e), CONST64(0x85e366aabd2f4917), - CONST64(0x7bacd764921fc8f6), CONST64(0xe8d23a4e83a69ccd), CONST64(0x07cfc8454b428a0e), CONST64(0xf0cc3c44b9b488fd), - CONST64(0xcf35fa1390dc2683), CONST64(0x62f496a763c553c4), CONST64(0xa601a7f4a552f551), CONST64(0x5ac298b501ef77b4), - CONST64(0x977bec291abe5233), CONST64(0xda62b8d57c0fb7a9), CONST64(0x3bfcc754226fa876), CONST64(0x822caeeff66dc319), - CONST64(0xb9d069bbd4026b6f), CONST64(0x317a4bddbfeca762), CONST64(0x963dabe0d176dd31), CONST64(0x9e37a9e6c778d121), - CONST64(0x81e667a9b6284f1f), CONST64(0x28220a1e4e363c50), CONST64(0x014647c9cbc88f02), CONST64(0xef1df20bc8e416c3), - CONST64(0xee5bb5c2032c99c1), CONST64(0x88aa22666beecc0d), CONST64(0xb356e5324981647b), CONST64(0x9f71ee2f0cb05e23), - CONST64(0xc27cbedf461da399), CONST64(0xac872b7d38d1fa45), CONST64(0x3ebf819ee2a0217c), CONST64(0x485a1236a67e6c90), - CONST64(0x36b58398f4ae2d6c), CONST64(0x6c771b2df5415ad8), CONST64(0x38360e12622a2470), CONST64(0x8caf236560e9ca05), - CONST64(0xf306f502f9f104fb), CONST64(0x094c45cfddc68312), CONST64(0x84a5216376e7c615), CONST64(0x1fd1ce4f71509e3e), - CONST64(0x397049dba9e2ab72), CONST64(0xb09c2c7409c4e87d), CONST64(0xc33af9168dd52c9b), CONST64(0xbf59e63754886e63), - CONST64(0xe254b6c71e2593d9), CONST64(0xa088287825d8f05d), CONST64(0x5c4b1739816572b8), CONST64(0x32b0829bffa92b64), - CONST64(0x68721a2efe465cd0), CONST64(0x169d8b80ac961d2c), CONST64(0xdf21fe1fbcc03ea3), CONST64(0x12988a83a7911b24), - CONST64(0x242d091b533f3648), CONST64(0x03cac94640458c06), CONST64(0x26a18794d8b2354c), CONST64(0x256b4ed298f7b94a), - CONST64(0xa342e13e659d7c5b), CONST64(0xb8962e721fcae46d), CONST64(0xb753e43142866273), CONST64(0xa747e03d6e9a7a53), - CONST64(0x8b60eb202bab400b), CONST64(0x7aea90ad59d747f4), CONST64(0xaa0ea4f1b85bff49), CONST64(0x78661e22d25a44f0), - CONST64(0x2eab8592cebc395c), CONST64(0x9dfd60a0873d5d27), CONST64(0x0000000000000000), CONST64(0x94b1256f5afbde35), - CONST64(0xf703f401f2f602f3), CONST64(0xe312f10ed5ed1cdb), CONST64(0x6afe94a175cb5fd4), CONST64(0x2c270b1d45313a58), - CONST64(0xbb5ce7345f8f686b), CONST64(0xc9bc759f1056238f), CONST64(0x9b74ef2c07b7582b), CONST64(0xd0e4345ce18cb8bd), - CONST64(0xc4f53153c697a695), CONST64(0x77a3d4618f16c2ee), CONST64(0x67b7d06da30adace), CONST64(0x22a48697d3b53344), - CONST64(0xe59b7e82556719d7), CONST64(0x8e23adeaeb64c901), CONST64(0xd32efd1aa1c934bb), CONST64(0xa48d297b2edff655), - CONST64(0xc0f03050cd90a09d), CONST64(0xecd73b4d88a19ac5), CONST64(0x46d99fbc30fa658c), CONST64(0xc73ff81586d22a93), - CONST64(0x3ff9c6572968ae7e), CONST64(0x4c5f1335ad796a98), CONST64(0x181e060a3a121430), CONST64(0x1411050f271b1e28), - CONST64(0x33f6c5523461a466), CONST64(0x44551133bb776688), CONST64(0xc1b6779906582f9f), CONST64(0xed917c84436915c7), - CONST64(0xf58f7a8e797b01f7), CONST64(0xfd8578886f750de7), CONST64(0xd8ee365af782b4ad), CONST64(0x706c1c24c45448e0), - CONST64(0xe4dd394b9eaf96d5), CONST64(0x792059eb1992cbf2), CONST64(0x60781828e84850c0), CONST64(0x451356fa70bfe98a), - CONST64(0xf645b3c8393e8df1), CONST64(0xfa4ab0cd243787e9), CONST64(0x90b4246c51fcd83d), CONST64(0x80a020607de0c01d), - CONST64(0xf240b2cb32398bf9), CONST64(0x72e092ab4fd94be4), CONST64(0xb615a3f8894eed71), CONST64(0x27e7c05d137aba4e), - CONST64(0x0d4944ccd6c1851a), CONST64(0x95f762a691335137), CONST64(0x40501030b0706080), CONST64(0xea5eb4c1082b9fc9), - CONST64(0x2aae8491c5bb3f54), CONST64(0x115243c5e7d49722), CONST64(0x76e593a844de4dec), CONST64(0x2fedc25b0574b65e), - CONST64(0x357f4adeb4eba16a), CONST64(0xce73bdda5b14a981), CONST64(0x06898f8c808a050c), CONST64(0xb4992d7702c3ee75), - CONST64(0xca76bcd95013af89), CONST64(0x4ad69cb92df36f94), CONST64(0xb5df6abec90b6177), CONST64(0x1d5d40c0fadd9d3a), - CONST64(0x1bd4cf4c7a579836), CONST64(0xb210a2fb8249eb79), CONST64(0x3aba809de9a72774), CONST64(0x216e4fd193f0bf42), - CONST64(0x7c631f21d95d42f8), CONST64(0x0fc5ca435d4c861e), CONST64(0x9238aae3da71db39), CONST64(0x155742c6ecd3912a), -}; - -static const ulong64 T3[256] = { - CONST64(0x68d2d3ba016ab9bb), CONST64(0x194dfc54b1669ae5), CONST64(0x93bc712fcd1465e2), CONST64(0xb9cd9c74511b8725), - CONST64(0x0251f553a457a2f7), CONST64(0xb86b68d303bed6d0), CONST64(0xbd6f6bd204b5ded6), CONST64(0x6429d74dfe8552b3), - CONST64(0x0d5df050ad4abafd), CONST64(0x268ae9ac63e009cf), CONST64(0x830e8a8d84961c09), CONST64(0x79c6dcbf1a4d91a5), - CONST64(0xaddd90704d37a73d), CONST64(0x0755f652a35caaf1), CONST64(0xc852b39ae117a47b), CONST64(0x612dd44cf98e5ab5), - CONST64(0x658f23eaac200346), CONST64(0xa67362d51184e6c4), CONST64(0xf166a497c268cc55), CONST64(0xb2636ed10da8c6dc), - CONST64(0xffcc553399d085aa), CONST64(0x0859f351aa41b2fb), CONST64(0x2a71ed5b9c0fe2c7), CONST64(0x04a2f7a655ae59f3), - CONST64(0x815f7fde20c1befe), CONST64(0x753dd848e5a27aad), CONST64(0x329ae5a87fcc29d7), CONST64(0xc75eb699e80abc71), - CONST64(0x904b70db3be696e0), CONST64(0xfac856329edb8dac), CONST64(0x51e6c4b72215d195), CONST64(0x2bd719fcceaab332), - CONST64(0x48ab38e393734b70), CONST64(0xdc42bf9efd3b8463), CONST64(0xef7eae91d052fc41), CONST64(0xcd56b09be61cac7d), - CONST64(0x4daf3be294784376), CONST64(0x6dd6d0bb0661b1bd), CONST64(0x5819c341daf1329b), CONST64(0xcba5b26e17e55779), - CONST64(0x0baef2a55cb341f9), CONST64(0xc00b40cb4b561680), CONST64(0xdab1bd6b0cc27f67), CONST64(0xfb6ea295cc7edc59), - CONST64(0x1fbefea1409f61e1), CONST64(0x18eb08f3e3c3cb10), CONST64(0x4ffeceb1302fe181), CONST64(0x0a0806020e16100c), - CONST64(0xdb1749cc5e672e92), CONST64(0xf33751c4663f6ea2), CONST64(0x6974271d53cfe84e), CONST64(0x44503c146c9ca078), - CONST64(0xe82b58c3730e56b0), CONST64(0xf291a563349a3f57), CONST64(0x954f73da3ced9ee6), CONST64(0x3469e75d8e35d2d3), - CONST64(0x3e61e15f8023c2df), CONST64(0x8b5779dc2ed7aef2), CONST64(0x94e9877d6e48cf13), CONST64(0xde134acd596c2694), - CONST64(0x9ee1817f605edf1f), CONST64(0x2f75ee5a9b04eac1), CONST64(0xc1adb46c19f34775), CONST64(0x316de45c893edad5), - CONST64(0x0cfb04f7ffefeb08), CONST64(0xbe986a26f2472dd4), CONST64(0x24db1cffc7b7ab38), CONST64(0x7e932aedb9113b54), - CONST64(0x6f8725e8a236134a), CONST64(0xd34eba9df4269c69), CONST64(0xcea1b16f10ee5f7f), CONST64(0x8c028f8e8d8b0403), - CONST64(0x7d642b194fe3c856), CONST64(0x1abafda0479469e7), CONST64(0x17e70df0eaded31a), CONST64(0x971e868998ba3c11), - CONST64(0x333c110f2d697822), CONST64(0x1b1c090715313812), CONST64(0x2986ecaf6afd11c5), CONST64(0x30cb10fbdb9b8b20), - CONST64(0x2820180838584030), CONST64(0x41543f156b97a87e), CONST64(0x3934170d237f682e), CONST64(0x14100c041c2c2018), - CONST64(0x05040301070b0806), CONST64(0xe98dac6421ab0745), CONST64(0x845b7cdf27cab6f8), CONST64(0xb3c59a765f0d9729), - CONST64(0x80f98b797264ef0b), CONST64(0x8e537add29dca6f4), CONST64(0xc9f4473db3b2f58e), CONST64(0x4e583a16628ab074), - CONST64(0xc3fc413fbda4e582), CONST64(0xebdc593785fca5b2), CONST64(0xc4a9b76d1ef84f73), CONST64(0xd8e04838a895dd90), - CONST64(0x67ded6b90877a1b1), CONST64(0xa2d19573442abf37), CONST64(0x6a8326e9a53d1b4c), CONST64(0xe1d45f358beab5be), - CONST64(0x1c49ff55b66d92e3), CONST64(0xa8d993714a3caf3b), CONST64(0x8af18d7b7c72ff07), CONST64(0x860a898c839d140f), - CONST64(0xa7d596724321b731), CONST64(0x921a85889fb13417), CONST64(0x09ff07f6f8e4e30e), CONST64(0x82a87e2ad6334dfc), - CONST64(0xc6f8423ebaafed84), CONST64(0x3b65e25e8728cad9), CONST64(0xbb9c6927f54c25d2), CONST64(0x4305ca46cfc00a89), - CONST64(0x3c30140c24746028), CONST64(0xec89af6526a00f43), CONST64(0xd5bdb86805df676d), CONST64(0xf899a3613a8c2f5b), - CONST64(0x0f0c0503091d180a), CONST64(0xe2235ec17d1846bc), CONST64(0x1641f957b87b82ef), CONST64(0xa97f67d61899fece), - CONST64(0x9a4376d935f086ec), CONST64(0x257de8589512facd), CONST64(0x9f4775d832fb8eea), CONST64(0xe385aa662fbd1749), - CONST64(0xac7b64d71f92f6c8), CONST64(0xd2e84e3aa683cd9c), CONST64(0xcf0745c8424b0e8a), CONST64(0xccf0443cb4b9fd88), - CONST64(0x35cf13fadc908326), CONST64(0xf462a796c563c453), CONST64(0x01a6f4a752a551f5), CONST64(0xc25ab598ef01b477), - CONST64(0x7b9729ecbe1a3352), CONST64(0x62dad5b80f7ca9b7), CONST64(0xfc3b54c76f2276a8), CONST64(0x2c82efae6df619c3), - CONST64(0xd0b9bb6902d46f6b), CONST64(0x7a31dd4becbf62a7), CONST64(0x3d96e0ab76d131dd), CONST64(0x379ee6a978c721d1), - CONST64(0xe681a96728b61f4f), CONST64(0x22281e0a364e503c), CONST64(0x4601c947c8cb028f), CONST64(0x1def0bf2e4c8c316), - CONST64(0x5beec2b52c03c199), CONST64(0xaa886622ee6b0dcc), CONST64(0x56b332e581497b64), CONST64(0x719f2feeb00c235e), - CONST64(0x7cc2dfbe1d4699a3), CONST64(0x87ac7d2bd13845fa), CONST64(0xbf3e9e81a0e27c21), CONST64(0x5a4836127ea6906c), - CONST64(0xb5369883aef46c2d), CONST64(0x776c2d1b41f5d85a), CONST64(0x3638120e2a627024), CONST64(0xaf8c6523e96005ca), - CONST64(0x06f302f5f1f9fb04), CONST64(0x4c09cf45c6dd1283), CONST64(0xa5846321e77615c6), CONST64(0xd11f4fce50713e9e), - CONST64(0x7039db49e2a972ab), CONST64(0x9cb0742cc4097de8), CONST64(0x3ac316f9d58d9b2c), CONST64(0x59bf37e68854636e), - CONST64(0x54e2c7b6251ed993), CONST64(0x88a07828d8255df0), CONST64(0x4b5c39176581b872), CONST64(0xb0329b82a9ff642b), - CONST64(0x72682e1a46fed05c), CONST64(0x9d16808b96ac2c1d), CONST64(0x21df1ffec0bca33e), CONST64(0x9812838a91a7241b), - CONST64(0x2d241b093f534836), CONST64(0xca0346c94540068c), CONST64(0xa1269487b2d84c35), CONST64(0x6b25d24ef7984ab9), - CONST64(0x42a33ee19d655b7c), CONST64(0x96b8722eca1f6de4), CONST64(0x53b731e486427362), CONST64(0x47a73de09a6e537a), - CONST64(0x608b20ebab2b0b40), CONST64(0xea7aad90d759f447), CONST64(0x0eaaf1a45bb849ff), CONST64(0x6678221e5ad2f044), - CONST64(0xab2e9285bcce5c39), CONST64(0xfd9da0603d87275d), CONST64(0x0000000000000000), CONST64(0xb1946f25fb5a35de), - CONST64(0x03f701f4f6f2f302), CONST64(0x12e30ef1edd5db1c), CONST64(0xfe6aa194cb75d45f), CONST64(0x272c1d0b3145583a), - CONST64(0x5cbb34e78f5f6b68), CONST64(0xbcc99f7556108f23), CONST64(0x749b2cefb7072b58), CONST64(0xe4d05c348ce1bdb8), - CONST64(0xf5c4533197c695a6), CONST64(0xa37761d4168feec2), CONST64(0xb7676dd00aa3ceda), CONST64(0xa4229786b5d34433), - CONST64(0x9be5827e6755d719), CONST64(0x238eeaad64eb01c9), CONST64(0x2ed31afdc9a1bb34), CONST64(0x8da47b29df2e55f6), - CONST64(0xf0c0503090cd9da0), CONST64(0xd7ec4d3ba188c59a), CONST64(0xd946bc9ffa308c65), CONST64(0x3fc715f8d286932a), - CONST64(0xf93f57c668297eae), CONST64(0x5f4c351379ad986a), CONST64(0x1e180a06123a3014), CONST64(0x11140f051b27281e), - CONST64(0xf63352c5613466a4), CONST64(0x5544331177bb8866), CONST64(0xb6c1997758069f2f), CONST64(0x91ed847c6943c715), - CONST64(0x8ff58e7a7b79f701), CONST64(0x85fd8878756fe70d), CONST64(0xeed85a3682f7adb4), CONST64(0x6c70241c54c4e048), - CONST64(0xdde44b39af9ed596), CONST64(0x2079eb599219f2cb), CONST64(0x7860281848e8c050), CONST64(0x1345fa56bf708ae9), - CONST64(0x45f6c8b33e39f18d), CONST64(0x4afacdb03724e987), CONST64(0xb4906c24fc513dd8), CONST64(0xa0806020e07d1dc0), - CONST64(0x40f2cbb23932f98b), CONST64(0xe072ab92d94fe44b), CONST64(0x15b6f8a34e8971ed), CONST64(0xe7275dc07a134eba), - CONST64(0x490dcc44c1d61a85), CONST64(0xf795a66233913751), CONST64(0x5040301070b08060), CONST64(0x5eeac1b42b08c99f), - CONST64(0xae2a9184bbc5543f), CONST64(0x5211c543d4e72297), CONST64(0xe576a893de44ec4d), CONST64(0xed2f5bc274055eb6), - CONST64(0x7f35de4aebb46aa1), CONST64(0x73cedabd145b81a9), CONST64(0x89068c8f8a800c05), CONST64(0x99b4772dc30275ee), - CONST64(0x76cad9bc135089af), CONST64(0xd64ab99cf32d946f), CONST64(0xdfb5be6a0bc97761), CONST64(0x5d1dc040ddfa3a9d), - CONST64(0xd41b4ccf577a3698), CONST64(0x10b2fba2498279eb), CONST64(0xba3a9d80a7e97427), CONST64(0x6e21d14ff09342bf), - CONST64(0x637c211f5dd9f842), CONST64(0xc50f43ca4c5d1e86), CONST64(0x3892e3aa71da39db), CONST64(0x5715c642d3ec2a91), -}; - -static const ulong64 T4[256] = { - CONST64(0xbbb96a01bad3d268), CONST64(0xe59a66b154fc4d19), CONST64(0xe26514cd2f71bc93), CONST64(0x25871b51749ccdb9), - CONST64(0xf7a257a453f55102), CONST64(0xd0d6be03d3686bb8), CONST64(0xd6deb504d26b6fbd), CONST64(0xb35285fe4dd72964), - CONST64(0xfdba4aad50f05d0d), CONST64(0xcf09e063ace98a26), CONST64(0x091c96848d8a0e83), CONST64(0xa5914d1abfdcc679), - CONST64(0x3da7374d7090ddad), CONST64(0xf1aa5ca352f65507), CONST64(0x7ba417e19ab352c8), CONST64(0xb55a8ef94cd42d61), - CONST64(0x460320acea238f65), CONST64(0xc4e68411d56273a6), CONST64(0x55cc68c297a466f1), CONST64(0xdcc6a80dd16e63b2), - CONST64(0xaa85d0993355ccff), CONST64(0xfbb241aa51f35908), CONST64(0xc7e20f9c5bed712a), CONST64(0xf359ae55a6f7a204), - CONST64(0xfebec120de7f5f81), CONST64(0xad7aa2e548d83d75), CONST64(0xd729cc7fa8e59a32), CONST64(0x71bc0ae899b65ec7), - CONST64(0xe096e63bdb704b90), CONST64(0xac8ddb9e3256c8fa), CONST64(0x95d11522b7c4e651), CONST64(0x32b3aacefc19d72b), - CONST64(0x704b7393e338ab48), CONST64(0x63843bfd9ebf42dc), CONST64(0x41fc52d091ae7eef), CONST64(0x7dac1ce69bb056cd), - CONST64(0x76437894e23baf4d), CONST64(0xbdb16106bbd0d66d), CONST64(0x9b32f1da41c31958), CONST64(0x7957e5176eb2a5cb), - CONST64(0xf941b35ca5f2ae0b), CONST64(0x8016564bcb400bc0), CONST64(0x677fc20c6bbdb1da), CONST64(0x59dc7ecc95a26efb), - CONST64(0xe1619f40a1febe1f), CONST64(0x10cbc3e3f308eb18), CONST64(0x81e12f30b1cefe4f), CONST64(0x0c10160e0206080a), - CONST64(0x922e675ecc4917db), CONST64(0xa26e3f66c45137f3), CONST64(0x4ee8cf531d277469), CONST64(0x78a09c6c143c5044), - CONST64(0xb0560e73c3582be8), CONST64(0x573f9a3463a591f2), CONST64(0xe69eed3cda734f95), CONST64(0xd3d2358e5de76934), - CONST64(0xdfc223805fe1613e), CONST64(0xf2aed72edc79578b), CONST64(0x13cf486e7d87e994), CONST64(0x94266c59cd4a13de), - CONST64(0x1fdf5e607f81e19e), CONST64(0xc1ea049b5aee752f), CONST64(0x7547f3196cb4adc1), CONST64(0xd5da3e895ce46d31), - CONST64(0x08ebeffff704fb0c), CONST64(0xd42d47f2266a98be), CONST64(0x38abb7c7ff1cdb24), CONST64(0x543b11b9ed2a937e), - CONST64(0x4a1336a2e825876f), CONST64(0x699c26f49dba4ed3), CONST64(0x7f5fee106fb1a1ce), CONST64(0x03048b8d8e8f028c), - CONST64(0x56c8e34f192b647d), CONST64(0xe7699447a0fdba1a), CONST64(0x1ad3deeaf00de717), CONST64(0x113cba9889861e97), - CONST64(0x2278692d0f113c33), CONST64(0x1238311507091c1b), CONST64(0xc511fd6aafec8629), CONST64(0x208b9bdbfb10cb30), - CONST64(0x3040583808182028), CONST64(0x7ea8976b153f5441), CONST64(0x2e687f230d173439), CONST64(0x18202c1c040c1014), - CONST64(0x06080b0701030405), CONST64(0x4507ab2164ac8de9), CONST64(0xf8b6ca27df7c5b84), CONST64(0x29970d5f769ac5b3), - CONST64(0x0bef6472798bf980), CONST64(0xf4a6dc29dd7a538e), CONST64(0x8ef5b2b33d47f4c9), CONST64(0x74b08a62163a584e), - CONST64(0x82e5a4bd3f41fcc3), CONST64(0xb2a5fc853759dceb), CONST64(0x734ff81e6db7a9c4), CONST64(0x90dd95a83848e0d8), - CONST64(0xb1a17708b9d6de67), CONST64(0x37bf2a447395d1a2), CONST64(0x4c1b3da5e926836a), CONST64(0xbeb5ea8b355fd4e1), - CONST64(0xe3926db655ff491c), CONST64(0x3baf3c4a7193d9a8), CONST64(0x07ff727c7b8df18a), CONST64(0x0f149d838c890a86), - CONST64(0x31b721437296d5a7), CONST64(0x1734b19f88851a92), CONST64(0x0ee3e4f8f607ff09), CONST64(0xfc4d33d62a7ea882), - CONST64(0x84edafba3e42f8c6), CONST64(0xd9ca28875ee2653b), CONST64(0xd2254cf527699cbb), CONST64(0x890ac0cf46ca0543), - CONST64(0x286074240c14303c), CONST64(0x430fa02665af89ec), CONST64(0x6d67df0568b8bdd5), CONST64(0x5b2f8c3a61a399f8), - CONST64(0x0a181d0903050c0f), CONST64(0xbc46187dc15e23e2), CONST64(0xef827bb857f94116), CONST64(0xcefe9918d6677fa9), - CONST64(0xec86f035d976439a), CONST64(0xcdfa129558e87d25), CONST64(0xea8efb32d875479f), CONST64(0x4917bd2f66aa85e3), - CONST64(0xc8f6921fd7647bac), CONST64(0x9ccd83a63a4ee8d2), CONST64(0x8a0e4b42c84507cf), CONST64(0x88fdb9b43c44f0cc), - CONST64(0x268390dcfa13cf35), CONST64(0x53c463c596a762f4), CONST64(0xf551a552a7f4a601), CONST64(0x77b401ef98b55ac2), - CONST64(0x52331abeec29977b), CONST64(0xb7a97c0fb8d5da62), CONST64(0xa876226fc7543bfc), CONST64(0xc319f66daeef822c), - CONST64(0x6b6fd40269bbb9d0), CONST64(0xa762bfec4bdd317a), CONST64(0xdd31d176abe0963d), CONST64(0xd121c778a9e69e37), - CONST64(0x4f1fb62867a981e6), CONST64(0x3c504e360a1e2822), CONST64(0x8f02cbc847c90146), CONST64(0x16c3c8e4f20bef1d), - CONST64(0x99c1032cb5c2ee5b), CONST64(0xcc0d6bee226688aa), CONST64(0x647b4981e532b356), CONST64(0x5e230cb0ee2f9f71), - CONST64(0xa399461dbedfc27c), CONST64(0xfa4538d12b7dac87), CONST64(0x217ce2a0819e3ebf), CONST64(0x6c90a67e1236485a), - CONST64(0x2d6cf4ae839836b5), CONST64(0x5ad8f5411b2d6c77), CONST64(0x2470622a0e123836), CONST64(0xca0560e923658caf), - CONST64(0x04fbf9f1f502f306), CONST64(0x8312ddc645cf094c), CONST64(0xc61576e7216384a5), CONST64(0x9e3e7150ce4f1fd1), - CONST64(0xab72a9e249db3970), CONST64(0xe87d09c42c74b09c), CONST64(0x2c9b8dd5f916c33a), CONST64(0x6e635488e637bf59), - CONST64(0x93d91e25b6c7e254), CONST64(0xf05d25d82878a088), CONST64(0x72b8816517395c4b), CONST64(0x2b64ffa9829b32b0), - CONST64(0x5cd0fe461a2e6872), CONST64(0x1d2cac968b80169d), CONST64(0x3ea3bcc0fe1fdf21), CONST64(0x1b24a7918a831298), - CONST64(0x3648533f091b242d), CONST64(0x8c064045c94603ca), CONST64(0x354cd8b2879426a1), CONST64(0xb94a98f74ed2256b), - CONST64(0x7c5b659de13ea342), CONST64(0xe46d1fca2e72b896), CONST64(0x62734286e431b753), CONST64(0x7a536e9ae03da747), - CONST64(0x400b2babeb208b60), CONST64(0x47f459d790ad7aea), CONST64(0xff49b85ba4f1aa0e), CONST64(0x44f0d25a1e227866), - CONST64(0x395ccebc85922eab), CONST64(0x5d27873d60a09dfd), CONST64(0x0000000000000000), CONST64(0xde355afb256f94b1), - CONST64(0x02f3f2f6f401f703), CONST64(0x1cdbd5edf10ee312), CONST64(0x5fd475cb94a16afe), CONST64(0x3a5845310b1d2c27), - CONST64(0x686b5f8fe734bb5c), CONST64(0x238f1056759fc9bc), CONST64(0x582b07b7ef2c9b74), CONST64(0xb8bde18c345cd0e4), - CONST64(0xa695c6973153c4f5), CONST64(0xc2ee8f16d46177a3), CONST64(0xdacea30ad06d67b7), CONST64(0x3344d3b5869722a4), - CONST64(0x19d755677e82e59b), CONST64(0xc901eb64adea8e23), CONST64(0x34bba1c9fd1ad32e), CONST64(0xf6552edf297ba48d), - CONST64(0xa09dcd903050c0f0), CONST64(0x9ac588a13b4decd7), CONST64(0x658c30fa9fbc46d9), CONST64(0x2a9386d2f815c73f), - CONST64(0xae7e2968c6573ff9), CONST64(0x6a98ad7913354c5f), CONST64(0x14303a12060a181e), CONST64(0x1e28271b050f1411), - CONST64(0xa4663461c55233f6), CONST64(0x6688bb7711334455), CONST64(0x2f9f06587799c1b6), CONST64(0x15c743697c84ed91), - CONST64(0x01f7797b7a8ef58f), CONST64(0x0de76f757888fd85), CONST64(0xb4adf782365ad8ee), CONST64(0x48e0c4541c24706c), - CONST64(0x96d59eaf394be4dd), CONST64(0xcbf2199259eb7920), CONST64(0x50c0e84818286078), CONST64(0xe98a70bf56fa4513), - CONST64(0x8df1393eb3c8f645), CONST64(0x87e92437b0cdfa4a), CONST64(0xd83d51fc246c90b4), CONST64(0xc01d7de0206080a0), - CONST64(0x8bf93239b2cbf240), CONST64(0x4be44fd992ab72e0), CONST64(0xed71894ea3f8b615), CONST64(0xba4e137ac05d27e7), - CONST64(0x851ad6c144cc0d49), CONST64(0x5137913362a695f7), CONST64(0x6080b07010304050), CONST64(0x9fc9082bb4c1ea5e), - CONST64(0x3f54c5bb84912aae), CONST64(0x9722e7d443c51152), CONST64(0x4dec44de93a876e5), CONST64(0xb65e0574c25b2fed), - CONST64(0xa16ab4eb4ade357f), CONST64(0xa9815b14bddace73), CONST64(0x050c808a8f8c0689), CONST64(0xee7502c32d77b499), - CONST64(0xaf895013bcd9ca76), CONST64(0x6f942df39cb94ad6), CONST64(0x6177c90b6abeb5df), CONST64(0x9d3afadd40c01d5d), - CONST64(0x98367a57cf4c1bd4), CONST64(0xeb798249a2fbb210), CONST64(0x2774e9a7809d3aba), CONST64(0xbf4293f04fd1216e), - CONST64(0x42f8d95d1f217c63), CONST64(0x861e5d4cca430fc5), CONST64(0xdb39da71aae39238), CONST64(0x912aecd342c61557), -}; - -static const ulong64 T5[256] = { - CONST64(0xb9bb016ad3ba68d2), CONST64(0x9ae5b166fc54194d), CONST64(0x65e2cd14712f93bc), CONST64(0x8725511b9c74b9cd), - CONST64(0xa2f7a457f5530251), CONST64(0xd6d003be68d3b86b), CONST64(0xded604b56bd2bd6f), CONST64(0x52b3fe85d74d6429), - CONST64(0xbafdad4af0500d5d), CONST64(0x09cf63e0e9ac268a), CONST64(0x1c0984968a8d830e), CONST64(0x91a51a4ddcbf79c6), - CONST64(0xa73d4d379070addd), CONST64(0xaaf1a35cf6520755), CONST64(0xa47be117b39ac852), CONST64(0x5ab5f98ed44c612d), - CONST64(0x0346ac2023ea658f), CONST64(0xe6c4118462d5a673), CONST64(0xcc55c268a497f166), CONST64(0xc6dc0da86ed1b263), - CONST64(0x85aa99d05533ffcc), CONST64(0xb2fbaa41f3510859), CONST64(0xe2c79c0fed5b2a71), CONST64(0x59f355aef7a604a2), - CONST64(0xbefe20c17fde815f), CONST64(0x7aade5a2d848753d), CONST64(0x29d77fcce5a8329a), CONST64(0xbc71e80ab699c75e), - CONST64(0x96e03be670db904b), CONST64(0x8dac9edb5632fac8), CONST64(0xd1952215c4b751e6), CONST64(0xb332ceaa19fc2bd7), - CONST64(0x4b70937338e348ab), CONST64(0x8463fd3bbf9edc42), CONST64(0xfc41d052ae91ef7e), CONST64(0xac7de61cb09bcd56), - CONST64(0x437694783be24daf), CONST64(0xb1bd0661d0bb6dd6), CONST64(0x329bdaf1c3415819), CONST64(0x577917e5b26ecba5), - CONST64(0x41f95cb3f2a50bae), CONST64(0x16804b5640cbc00b), CONST64(0x7f670cc2bd6bdab1), CONST64(0xdc59cc7ea295fb6e), - CONST64(0x61e1409ffea11fbe), CONST64(0xcb10e3c308f318eb), CONST64(0xe181302fceb14ffe), CONST64(0x100c0e1606020a08), - CONST64(0x2e925e6749ccdb17), CONST64(0x6ea2663f51c4f337), CONST64(0xe84e53cf271d6974), CONST64(0xa0786c9c3c144450), - CONST64(0x56b0730e58c3e82b), CONST64(0x3f57349aa563f291), CONST64(0x9ee63ced73da954f), CONST64(0xd2d38e35e75d3469), - CONST64(0xc2df8023e15f3e61), CONST64(0xaef22ed779dc8b57), CONST64(0xcf136e48877d94e9), CONST64(0x2694596c4acdde13), - CONST64(0xdf1f605e817f9ee1), CONST64(0xeac19b04ee5a2f75), CONST64(0x477519f3b46cc1ad), CONST64(0xdad5893ee45c316d), - CONST64(0xeb08ffef04f70cfb), CONST64(0x2dd4f2476a26be98), CONST64(0xab38c7b71cff24db), CONST64(0x3b54b9112aed7e93), - CONST64(0x134aa23625e86f87), CONST64(0x9c69f426ba9dd34e), CONST64(0x5f7f10eeb16fcea1), CONST64(0x04038d8b8f8e8c02), - CONST64(0xc8564fe32b197d64), CONST64(0x69e74794fda01aba), CONST64(0xd31aeade0df017e7), CONST64(0x3c1198ba8689971e), - CONST64(0x78222d69110f333c), CONST64(0x3812153109071b1c), CONST64(0x11c56afdecaf2986), CONST64(0x8b20db9b10fb30cb), - CONST64(0x4030385818082820), CONST64(0xa87e6b973f154154), CONST64(0x682e237f170d3934), CONST64(0x20181c2c0c041410), - CONST64(0x0806070b03010504), CONST64(0x074521abac64e98d), CONST64(0xb6f827ca7cdf845b), CONST64(0x97295f0d9a76b3c5), - CONST64(0xef0b72648b7980f9), CONST64(0xa6f429dc7add8e53), CONST64(0xf58eb3b2473dc9f4), CONST64(0xb074628a3a164e58), - CONST64(0xe582bda4413fc3fc), CONST64(0xa5b285fc5937ebdc), CONST64(0x4f731ef8b76dc4a9), CONST64(0xdd90a8954838d8e0), - CONST64(0xa1b10877d6b967de), CONST64(0xbf37442a9573a2d1), CONST64(0x1b4ca53d26e96a83), CONST64(0xb5be8bea5f35e1d4), - CONST64(0x92e3b66dff551c49), CONST64(0xaf3b4a3c9371a8d9), CONST64(0xff077c728d7b8af1), CONST64(0x140f839d898c860a), - CONST64(0xb73143219672a7d5), CONST64(0x34179fb18588921a), CONST64(0xe30ef8e407f609ff), CONST64(0x4dfcd6337e2a82a8), - CONST64(0xed84baaf423ec6f8), CONST64(0xcad98728e25e3b65), CONST64(0x25d2f54c6927bb9c), CONST64(0x0a89cfc0ca464305), - CONST64(0x60282474140c3c30), CONST64(0x0f4326a0af65ec89), CONST64(0x676d05dfb868d5bd), CONST64(0x2f5b3a8ca361f899), - CONST64(0x180a091d05030f0c), CONST64(0x46bc7d185ec1e223), CONST64(0x82efb87bf9571641), CONST64(0xfece189967d6a97f), - CONST64(0x86ec35f076d99a43), CONST64(0xfacd9512e858257d), CONST64(0x8eea32fb75d89f47), CONST64(0x17492fbdaa66e385), - CONST64(0xf6c81f9264d7ac7b), CONST64(0xcd9ca6834e3ad2e8), CONST64(0x0e8a424b45c8cf07), CONST64(0xfd88b4b9443cccf0), - CONST64(0x8326dc9013fa35cf), CONST64(0xc453c563a796f462), CONST64(0x51f552a5f4a701a6), CONST64(0xb477ef01b598c25a), - CONST64(0x3352be1a29ec7b97), CONST64(0xa9b70f7cd5b862da), CONST64(0x76a86f2254c7fc3b), CONST64(0x19c36df6efae2c82), - CONST64(0x6f6b02d4bb69d0b9), CONST64(0x62a7ecbfdd4b7a31), CONST64(0x31dd76d1e0ab3d96), CONST64(0x21d178c7e6a9379e), - CONST64(0x1f4f28b6a967e681), CONST64(0x503c364e1e0a2228), CONST64(0x028fc8cbc9474601), CONST64(0xc316e4c80bf21def), - CONST64(0xc1992c03c2b55bee), CONST64(0x0dccee6b6622aa88), CONST64(0x7b64814932e556b3), CONST64(0x235eb00c2fee719f), - CONST64(0x99a31d46dfbe7cc2), CONST64(0x45fad1387d2b87ac), CONST64(0x7c21a0e29e81bf3e), CONST64(0x906c7ea636125a48), - CONST64(0x6c2daef49883b536), CONST64(0xd85a41f52d1b776c), CONST64(0x70242a62120e3638), CONST64(0x05cae9606523af8c), - CONST64(0xfb04f1f902f506f3), CONST64(0x1283c6ddcf454c09), CONST64(0x15c6e7766321a584), CONST64(0x3e9e50714fced11f), - CONST64(0x72abe2a9db497039), CONST64(0x7de8c409742c9cb0), CONST64(0x9b2cd58d16f93ac3), CONST64(0x636e885437e659bf), - CONST64(0xd993251ec7b654e2), CONST64(0x5df0d825782888a0), CONST64(0xb872658139174b5c), CONST64(0x642ba9ff9b82b032), - CONST64(0xd05c46fe2e1a7268), CONST64(0x2c1d96ac808b9d16), CONST64(0xa33ec0bc1ffe21df), CONST64(0x241b91a7838a9812), - CONST64(0x48363f531b092d24), CONST64(0x068c454046c9ca03), CONST64(0x4c35b2d89487a126), CONST64(0x4ab9f798d24e6b25), - CONST64(0x5b7c9d653ee142a3), CONST64(0x6de4ca1f722e96b8), CONST64(0x7362864231e453b7), CONST64(0x537a9a6e3de047a7), - CONST64(0x0b40ab2b20eb608b), CONST64(0xf447d759ad90ea7a), CONST64(0x49ff5bb8f1a40eaa), CONST64(0xf0445ad2221e6678), - CONST64(0x5c39bcce9285ab2e), CONST64(0x275d3d87a060fd9d), CONST64(0x0000000000000000), CONST64(0x35defb5a6f25b194), - CONST64(0xf302f6f201f403f7), CONST64(0xdb1cedd50ef112e3), CONST64(0xd45fcb75a194fe6a), CONST64(0x583a31451d0b272c), - CONST64(0x6b688f5f34e75cbb), CONST64(0x8f2356109f75bcc9), CONST64(0x2b58b7072cef749b), CONST64(0xbdb88ce15c34e4d0), - CONST64(0x95a697c65331f5c4), CONST64(0xeec2168f61d4a377), CONST64(0xceda0aa36dd0b767), CONST64(0x4433b5d39786a422), - CONST64(0xd7196755827e9be5), CONST64(0x01c964ebeaad238e), CONST64(0xbb34c9a11afd2ed3), CONST64(0x55f6df2e7b298da4), - CONST64(0x9da090cd5030f0c0), CONST64(0xc59aa1884d3bd7ec), CONST64(0x8c65fa30bc9fd946), CONST64(0x932ad28615f83fc7), - CONST64(0x7eae682957c6f93f), CONST64(0x986a79ad35135f4c), CONST64(0x3014123a0a061e18), CONST64(0x281e1b270f051114), - CONST64(0x66a4613452c5f633), CONST64(0x886677bb33115544), CONST64(0x9f2f58069977b6c1), CONST64(0xc7156943847c91ed), - CONST64(0xf7017b798e7a8ff5), CONST64(0xe70d756f887885fd), CONST64(0xadb482f75a36eed8), CONST64(0xe04854c4241c6c70), - CONST64(0xd596af9e4b39dde4), CONST64(0xf2cb9219eb592079), CONST64(0xc05048e828187860), CONST64(0x8ae9bf70fa561345), - CONST64(0xf18d3e39c8b345f6), CONST64(0xe9873724cdb04afa), CONST64(0x3dd8fc516c24b490), CONST64(0x1dc0e07d6020a080), - CONST64(0xf98b3932cbb240f2), CONST64(0xe44bd94fab92e072), CONST64(0x71ed4e89f8a315b6), CONST64(0x4eba7a135dc0e727), - CONST64(0x1a85c1d6cc44490d), CONST64(0x37513391a662f795), CONST64(0x806070b030105040), CONST64(0xc99f2b08c1b45eea), - CONST64(0x543fbbc59184ae2a), CONST64(0x2297d4e7c5435211), CONST64(0xec4dde44a893e576), CONST64(0x5eb674055bc2ed2f), - CONST64(0x6aa1ebb4de4a7f35), CONST64(0x81a9145bdabd73ce), CONST64(0x0c058a808c8f8906), CONST64(0x75eec302772d99b4), - CONST64(0x89af1350d9bc76ca), CONST64(0x946ff32db99cd64a), CONST64(0x77610bc9be6adfb5), CONST64(0x3a9dddfac0405d1d), - CONST64(0x3698577a4ccfd41b), CONST64(0x79eb4982fba210b2), CONST64(0x7427a7e99d80ba3a), CONST64(0x42bff093d14f6e21), - CONST64(0xf8425dd9211f637c), CONST64(0x1e864c5d43cac50f), CONST64(0x39db71dae3aa3892), CONST64(0x2a91d3ecc6425715), -}; - -static const ulong64 T6[256] = { - CONST64(0x6a01bbb9d268bad3), CONST64(0x66b1e59a4d1954fc), CONST64(0x14cde265bc932f71), CONST64(0x1b512587cdb9749c), - CONST64(0x57a4f7a2510253f5), CONST64(0xbe03d0d66bb8d368), CONST64(0xb504d6de6fbdd26b), CONST64(0x85feb35229644dd7), - CONST64(0x4aadfdba5d0d50f0), CONST64(0xe063cf098a26ace9), CONST64(0x9684091c0e838d8a), CONST64(0x4d1aa591c679bfdc), - CONST64(0x374d3da7ddad7090), CONST64(0x5ca3f1aa550752f6), CONST64(0x17e17ba452c89ab3), CONST64(0x8ef9b55a2d614cd4), - CONST64(0x20ac46038f65ea23), CONST64(0x8411c4e673a6d562), CONST64(0x68c255cc66f197a4), CONST64(0xa80ddcc663b2d16e), - CONST64(0xd099aa85ccff3355), CONST64(0x41aafbb2590851f3), CONST64(0x0f9cc7e2712a5bed), CONST64(0xae55f359a204a6f7), - CONST64(0xc120febe5f81de7f), CONST64(0xa2e5ad7a3d7548d8), CONST64(0xcc7fd7299a32a8e5), CONST64(0x0ae871bc5ec799b6), - CONST64(0xe63be0964b90db70), CONST64(0xdb9eac8dc8fa3256), CONST64(0x152295d1e651b7c4), CONST64(0xaace32b3d72bfc19), - CONST64(0x7393704bab48e338), CONST64(0x3bfd638442dc9ebf), CONST64(0x52d041fc7eef91ae), CONST64(0x1ce67dac56cd9bb0), - CONST64(0x78947643af4de23b), CONST64(0x6106bdb1d66dbbd0), CONST64(0xf1da9b32195841c3), CONST64(0xe5177957a5cb6eb2), - CONST64(0xb35cf941ae0ba5f2), CONST64(0x564b80160bc0cb40), CONST64(0xc20c677fb1da6bbd), CONST64(0x7ecc59dc6efb95a2), - CONST64(0x9f40e161be1fa1fe), CONST64(0xc3e310cbeb18f308), CONST64(0x2f3081e1fe4fb1ce), CONST64(0x160e0c10080a0206), - CONST64(0x675e922e17dbcc49), CONST64(0x3f66a26e37f3c451), CONST64(0xcf534ee874691d27), CONST64(0x9c6c78a05044143c), - CONST64(0x0e73b0562be8c358), CONST64(0x9a34573f91f263a5), CONST64(0xed3ce69e4f95da73), CONST64(0x358ed3d269345de7), - CONST64(0x2380dfc2613e5fe1), CONST64(0xd72ef2ae578bdc79), CONST64(0x486e13cfe9947d87), CONST64(0x6c59942613decd4a), - CONST64(0x5e601fdfe19e7f81), CONST64(0x049bc1ea752f5aee), CONST64(0xf3197547adc16cb4), CONST64(0x3e89d5da6d315ce4), - CONST64(0xefff08ebfb0cf704), CONST64(0x47f2d42d98be266a), CONST64(0xb7c738abdb24ff1c), CONST64(0x11b9543b937eed2a), - CONST64(0x36a24a13876fe825), CONST64(0x26f4699c4ed39dba), CONST64(0xee107f5fa1ce6fb1), CONST64(0x8b8d0304028c8e8f), - CONST64(0xe34f56c8647d192b), CONST64(0x9447e769ba1aa0fd), CONST64(0xdeea1ad3e717f00d), CONST64(0xba98113c1e978986), - CONST64(0x692d22783c330f11), CONST64(0x311512381c1b0709), CONST64(0xfd6ac5118629afec), CONST64(0x9bdb208bcb30fb10), - CONST64(0x5838304020280818), CONST64(0x976b7ea85441153f), CONST64(0x7f232e6834390d17), CONST64(0x2c1c18201014040c), - CONST64(0x0b07060804050103), CONST64(0xab2145078de964ac), CONST64(0xca27f8b65b84df7c), CONST64(0x0d5f2997c5b3769a), - CONST64(0x64720beff980798b), CONST64(0xdc29f4a6538edd7a), CONST64(0xb2b38ef5f4c93d47), CONST64(0x8a6274b0584e163a), - CONST64(0xa4bd82e5fcc33f41), CONST64(0xfc85b2a5dceb3759), CONST64(0xf81e734fa9c46db7), CONST64(0x95a890dde0d83848), - CONST64(0x7708b1a1de67b9d6), CONST64(0x2a4437bfd1a27395), CONST64(0x3da54c1b836ae926), CONST64(0xea8bbeb5d4e1355f), - CONST64(0x6db6e392491c55ff), CONST64(0x3c4a3bafd9a87193), CONST64(0x727c07fff18a7b8d), CONST64(0x9d830f140a868c89), - CONST64(0x214331b7d5a77296), CONST64(0xb19f17341a928885), CONST64(0xe4f80ee3ff09f607), CONST64(0x33d6fc4da8822a7e), - CONST64(0xafba84edf8c63e42), CONST64(0x2887d9ca653b5ee2), CONST64(0x4cf5d2259cbb2769), CONST64(0xc0cf890a054346ca), - CONST64(0x74242860303c0c14), CONST64(0xa026430f89ec65af), CONST64(0xdf056d67bdd568b8), CONST64(0x8c3a5b2f99f861a3), - CONST64(0x1d090a180c0f0305), CONST64(0x187dbc4623e2c15e), CONST64(0x7bb8ef82411657f9), CONST64(0x9918cefe7fa9d667), - CONST64(0xf035ec86439ad976), CONST64(0x1295cdfa7d2558e8), CONST64(0xfb32ea8e479fd875), CONST64(0xbd2f491785e366aa), - CONST64(0x921fc8f67bacd764), CONST64(0x83a69ccde8d23a4e), CONST64(0x4b428a0e07cfc845), CONST64(0xb9b488fdf0cc3c44), - CONST64(0x90dc2683cf35fa13), CONST64(0x63c553c462f496a7), CONST64(0xa552f551a601a7f4), CONST64(0x01ef77b45ac298b5), - CONST64(0x1abe5233977bec29), CONST64(0x7c0fb7a9da62b8d5), CONST64(0x226fa8763bfcc754), CONST64(0xf66dc319822caeef), - CONST64(0xd4026b6fb9d069bb), CONST64(0xbfeca762317a4bdd), CONST64(0xd176dd31963dabe0), CONST64(0xc778d1219e37a9e6), - CONST64(0xb6284f1f81e667a9), CONST64(0x4e363c5028220a1e), CONST64(0xcbc88f02014647c9), CONST64(0xc8e416c3ef1df20b), - CONST64(0x032c99c1ee5bb5c2), CONST64(0x6beecc0d88aa2266), CONST64(0x4981647bb356e532), CONST64(0x0cb05e239f71ee2f), - CONST64(0x461da399c27cbedf), CONST64(0x38d1fa45ac872b7d), CONST64(0xe2a0217c3ebf819e), CONST64(0xa67e6c90485a1236), - CONST64(0xf4ae2d6c36b58398), CONST64(0xf5415ad86c771b2d), CONST64(0x622a247038360e12), CONST64(0x60e9ca058caf2365), - CONST64(0xf9f104fbf306f502), CONST64(0xddc68312094c45cf), CONST64(0x76e7c61584a52163), CONST64(0x71509e3e1fd1ce4f), - CONST64(0xa9e2ab72397049db), CONST64(0x09c4e87db09c2c74), CONST64(0x8dd52c9bc33af916), CONST64(0x54886e63bf59e637), - CONST64(0x1e2593d9e254b6c7), CONST64(0x25d8f05da0882878), CONST64(0x816572b85c4b1739), CONST64(0xffa92b6432b0829b), - CONST64(0xfe465cd068721a2e), CONST64(0xac961d2c169d8b80), CONST64(0xbcc03ea3df21fe1f), CONST64(0xa7911b2412988a83), - CONST64(0x533f3648242d091b), CONST64(0x40458c0603cac946), CONST64(0xd8b2354c26a18794), CONST64(0x98f7b94a256b4ed2), - CONST64(0x659d7c5ba342e13e), CONST64(0x1fcae46db8962e72), CONST64(0x42866273b753e431), CONST64(0x6e9a7a53a747e03d), - CONST64(0x2bab400b8b60eb20), CONST64(0x59d747f47aea90ad), CONST64(0xb85bff49aa0ea4f1), CONST64(0xd25a44f078661e22), - CONST64(0xcebc395c2eab8592), CONST64(0x873d5d279dfd60a0), CONST64(0x0000000000000000), CONST64(0x5afbde3594b1256f), - CONST64(0xf2f602f3f703f401), CONST64(0xd5ed1cdbe312f10e), CONST64(0x75cb5fd46afe94a1), CONST64(0x45313a582c270b1d), - CONST64(0x5f8f686bbb5ce734), CONST64(0x1056238fc9bc759f), CONST64(0x07b7582b9b74ef2c), CONST64(0xe18cb8bdd0e4345c), - CONST64(0xc697a695c4f53153), CONST64(0x8f16c2ee77a3d461), CONST64(0xa30adace67b7d06d), CONST64(0xd3b5334422a48697), - CONST64(0x556719d7e59b7e82), CONST64(0xeb64c9018e23adea), CONST64(0xa1c934bbd32efd1a), CONST64(0x2edff655a48d297b), - CONST64(0xcd90a09dc0f03050), CONST64(0x88a19ac5ecd73b4d), CONST64(0x30fa658c46d99fbc), CONST64(0x86d22a93c73ff815), - CONST64(0x2968ae7e3ff9c657), CONST64(0xad796a984c5f1335), CONST64(0x3a121430181e060a), CONST64(0x271b1e281411050f), - CONST64(0x3461a46633f6c552), CONST64(0xbb77668844551133), CONST64(0x06582f9fc1b67799), CONST64(0x436915c7ed917c84), - CONST64(0x797b01f7f58f7a8e), CONST64(0x6f750de7fd857888), CONST64(0xf782b4add8ee365a), CONST64(0xc45448e0706c1c24), - CONST64(0x9eaf96d5e4dd394b), CONST64(0x1992cbf2792059eb), CONST64(0xe84850c060781828), CONST64(0x70bfe98a451356fa), - CONST64(0x393e8df1f645b3c8), CONST64(0x243787e9fa4ab0cd), CONST64(0x51fcd83d90b4246c), CONST64(0x7de0c01d80a02060), - CONST64(0x32398bf9f240b2cb), CONST64(0x4fd94be472e092ab), CONST64(0x894eed71b615a3f8), CONST64(0x137aba4e27e7c05d), - CONST64(0xd6c1851a0d4944cc), CONST64(0x9133513795f762a6), CONST64(0xb070608040501030), CONST64(0x082b9fc9ea5eb4c1), - CONST64(0xc5bb3f542aae8491), CONST64(0xe7d49722115243c5), CONST64(0x44de4dec76e593a8), CONST64(0x0574b65e2fedc25b), - CONST64(0xb4eba16a357f4ade), CONST64(0x5b14a981ce73bdda), CONST64(0x808a050c06898f8c), CONST64(0x02c3ee75b4992d77), - CONST64(0x5013af89ca76bcd9), CONST64(0x2df36f944ad69cb9), CONST64(0xc90b6177b5df6abe), CONST64(0xfadd9d3a1d5d40c0), - CONST64(0x7a5798361bd4cf4c), CONST64(0x8249eb79b210a2fb), CONST64(0xe9a727743aba809d), CONST64(0x93f0bf42216e4fd1), - CONST64(0xd95d42f87c631f21), CONST64(0x5d4c861e0fc5ca43), CONST64(0xda71db399238aae3), CONST64(0xecd3912a155742c6), -}; - -static const ulong64 T7[256] = { - CONST64(0x016ab9bb68d2d3ba), CONST64(0xb1669ae5194dfc54), CONST64(0xcd1465e293bc712f), CONST64(0x511b8725b9cd9c74), - CONST64(0xa457a2f70251f553), CONST64(0x03bed6d0b86b68d3), CONST64(0x04b5ded6bd6f6bd2), CONST64(0xfe8552b36429d74d), - CONST64(0xad4abafd0d5df050), CONST64(0x63e009cf268ae9ac), CONST64(0x84961c09830e8a8d), CONST64(0x1a4d91a579c6dcbf), - CONST64(0x4d37a73daddd9070), CONST64(0xa35caaf10755f652), CONST64(0xe117a47bc852b39a), CONST64(0xf98e5ab5612dd44c), - CONST64(0xac200346658f23ea), CONST64(0x1184e6c4a67362d5), CONST64(0xc268cc55f166a497), CONST64(0x0da8c6dcb2636ed1), - CONST64(0x99d085aaffcc5533), CONST64(0xaa41b2fb0859f351), CONST64(0x9c0fe2c72a71ed5b), CONST64(0x55ae59f304a2f7a6), - CONST64(0x20c1befe815f7fde), CONST64(0xe5a27aad753dd848), CONST64(0x7fcc29d7329ae5a8), CONST64(0xe80abc71c75eb699), - CONST64(0x3be696e0904b70db), CONST64(0x9edb8dacfac85632), CONST64(0x2215d19551e6c4b7), CONST64(0xceaab3322bd719fc), - CONST64(0x93734b7048ab38e3), CONST64(0xfd3b8463dc42bf9e), CONST64(0xd052fc41ef7eae91), CONST64(0xe61cac7dcd56b09b), - CONST64(0x947843764daf3be2), CONST64(0x0661b1bd6dd6d0bb), CONST64(0xdaf1329b5819c341), CONST64(0x17e55779cba5b26e), - CONST64(0x5cb341f90baef2a5), CONST64(0x4b561680c00b40cb), CONST64(0x0cc27f67dab1bd6b), CONST64(0xcc7edc59fb6ea295), - CONST64(0x409f61e11fbefea1), CONST64(0xe3c3cb1018eb08f3), CONST64(0x302fe1814ffeceb1), CONST64(0x0e16100c0a080602), - CONST64(0x5e672e92db1749cc), CONST64(0x663f6ea2f33751c4), CONST64(0x53cfe84e6974271d), CONST64(0x6c9ca07844503c14), - CONST64(0x730e56b0e82b58c3), CONST64(0x349a3f57f291a563), CONST64(0x3ced9ee6954f73da), CONST64(0x8e35d2d33469e75d), - CONST64(0x8023c2df3e61e15f), CONST64(0x2ed7aef28b5779dc), CONST64(0x6e48cf1394e9877d), CONST64(0x596c2694de134acd), - CONST64(0x605edf1f9ee1817f), CONST64(0x9b04eac12f75ee5a), CONST64(0x19f34775c1adb46c), CONST64(0x893edad5316de45c), - CONST64(0xffefeb080cfb04f7), CONST64(0xf2472dd4be986a26), CONST64(0xc7b7ab3824db1cff), CONST64(0xb9113b547e932aed), - CONST64(0xa236134a6f8725e8), CONST64(0xf4269c69d34eba9d), CONST64(0x10ee5f7fcea1b16f), CONST64(0x8d8b04038c028f8e), - CONST64(0x4fe3c8567d642b19), CONST64(0x479469e71abafda0), CONST64(0xeaded31a17e70df0), CONST64(0x98ba3c11971e8689), - CONST64(0x2d697822333c110f), CONST64(0x153138121b1c0907), CONST64(0x6afd11c52986ecaf), CONST64(0xdb9b8b2030cb10fb), - CONST64(0x3858403028201808), CONST64(0x6b97a87e41543f15), CONST64(0x237f682e3934170d), CONST64(0x1c2c201814100c04), - CONST64(0x070b080605040301), CONST64(0x21ab0745e98dac64), CONST64(0x27cab6f8845b7cdf), CONST64(0x5f0d9729b3c59a76), - CONST64(0x7264ef0b80f98b79), CONST64(0x29dca6f48e537add), CONST64(0xb3b2f58ec9f4473d), CONST64(0x628ab0744e583a16), - CONST64(0xbda4e582c3fc413f), CONST64(0x85fca5b2ebdc5937), CONST64(0x1ef84f73c4a9b76d), CONST64(0xa895dd90d8e04838), - CONST64(0x0877a1b167ded6b9), CONST64(0x442abf37a2d19573), CONST64(0xa53d1b4c6a8326e9), CONST64(0x8beab5bee1d45f35), - CONST64(0xb66d92e31c49ff55), CONST64(0x4a3caf3ba8d99371), CONST64(0x7c72ff078af18d7b), CONST64(0x839d140f860a898c), - CONST64(0x4321b731a7d59672), CONST64(0x9fb13417921a8588), CONST64(0xf8e4e30e09ff07f6), CONST64(0xd6334dfc82a87e2a), - CONST64(0xbaafed84c6f8423e), CONST64(0x8728cad93b65e25e), CONST64(0xf54c25d2bb9c6927), CONST64(0xcfc00a894305ca46), - CONST64(0x247460283c30140c), CONST64(0x26a00f43ec89af65), CONST64(0x05df676dd5bdb868), CONST64(0x3a8c2f5bf899a361), - CONST64(0x091d180a0f0c0503), CONST64(0x7d1846bce2235ec1), CONST64(0xb87b82ef1641f957), CONST64(0x1899fecea97f67d6), - CONST64(0x35f086ec9a4376d9), CONST64(0x9512facd257de858), CONST64(0x32fb8eea9f4775d8), CONST64(0x2fbd1749e385aa66), - CONST64(0x1f92f6c8ac7b64d7), CONST64(0xa683cd9cd2e84e3a), CONST64(0x424b0e8acf0745c8), CONST64(0xb4b9fd88ccf0443c), - CONST64(0xdc90832635cf13fa), CONST64(0xc563c453f462a796), CONST64(0x52a551f501a6f4a7), CONST64(0xef01b477c25ab598), - CONST64(0xbe1a33527b9729ec), CONST64(0x0f7ca9b762dad5b8), CONST64(0x6f2276a8fc3b54c7), CONST64(0x6df619c32c82efae), - CONST64(0x02d46f6bd0b9bb69), CONST64(0xecbf62a77a31dd4b), CONST64(0x76d131dd3d96e0ab), CONST64(0x78c721d1379ee6a9), - CONST64(0x28b61f4fe681a967), CONST64(0x364e503c22281e0a), CONST64(0xc8cb028f4601c947), CONST64(0xe4c8c3161def0bf2), - CONST64(0x2c03c1995beec2b5), CONST64(0xee6b0dccaa886622), CONST64(0x81497b6456b332e5), CONST64(0xb00c235e719f2fee), - CONST64(0x1d4699a37cc2dfbe), CONST64(0xd13845fa87ac7d2b), CONST64(0xa0e27c21bf3e9e81), CONST64(0x7ea6906c5a483612), - CONST64(0xaef46c2db5369883), CONST64(0x41f5d85a776c2d1b), CONST64(0x2a6270243638120e), CONST64(0xe96005caaf8c6523), - CONST64(0xf1f9fb0406f302f5), CONST64(0xc6dd12834c09cf45), CONST64(0xe77615c6a5846321), CONST64(0x50713e9ed11f4fce), - CONST64(0xe2a972ab7039db49), CONST64(0xc4097de89cb0742c), CONST64(0xd58d9b2c3ac316f9), CONST64(0x8854636e59bf37e6), - CONST64(0x251ed99354e2c7b6), CONST64(0xd8255df088a07828), CONST64(0x6581b8724b5c3917), CONST64(0xa9ff642bb0329b82), - CONST64(0x46fed05c72682e1a), CONST64(0x96ac2c1d9d16808b), CONST64(0xc0bca33e21df1ffe), CONST64(0x91a7241b9812838a), - CONST64(0x3f5348362d241b09), CONST64(0x4540068cca0346c9), CONST64(0xb2d84c35a1269487), CONST64(0xf7984ab96b25d24e), - CONST64(0x9d655b7c42a33ee1), CONST64(0xca1f6de496b8722e), CONST64(0x8642736253b731e4), CONST64(0x9a6e537a47a73de0), - CONST64(0xab2b0b40608b20eb), CONST64(0xd759f447ea7aad90), CONST64(0x5bb849ff0eaaf1a4), CONST64(0x5ad2f0446678221e), - CONST64(0xbcce5c39ab2e9285), CONST64(0x3d87275dfd9da060), CONST64(0x0000000000000000), CONST64(0xfb5a35deb1946f25), - CONST64(0xf6f2f30203f701f4), CONST64(0xedd5db1c12e30ef1), CONST64(0xcb75d45ffe6aa194), CONST64(0x3145583a272c1d0b), - CONST64(0x8f5f6b685cbb34e7), CONST64(0x56108f23bcc99f75), CONST64(0xb7072b58749b2cef), CONST64(0x8ce1bdb8e4d05c34), - CONST64(0x97c695a6f5c45331), CONST64(0x168feec2a37761d4), CONST64(0x0aa3cedab7676dd0), CONST64(0xb5d34433a4229786), - CONST64(0x6755d7199be5827e), CONST64(0x64eb01c9238eeaad), CONST64(0xc9a1bb342ed31afd), CONST64(0xdf2e55f68da47b29), - CONST64(0x90cd9da0f0c05030), CONST64(0xa188c59ad7ec4d3b), CONST64(0xfa308c65d946bc9f), CONST64(0xd286932a3fc715f8), - CONST64(0x68297eaef93f57c6), CONST64(0x79ad986a5f4c3513), CONST64(0x123a30141e180a06), CONST64(0x1b27281e11140f05), - CONST64(0x613466a4f63352c5), CONST64(0x77bb886655443311), CONST64(0x58069f2fb6c19977), CONST64(0x6943c71591ed847c), - CONST64(0x7b79f7018ff58e7a), CONST64(0x756fe70d85fd8878), CONST64(0x82f7adb4eed85a36), CONST64(0x54c4e0486c70241c), - CONST64(0xaf9ed596dde44b39), CONST64(0x9219f2cb2079eb59), CONST64(0x48e8c05078602818), CONST64(0xbf708ae91345fa56), - CONST64(0x3e39f18d45f6c8b3), CONST64(0x3724e9874afacdb0), CONST64(0xfc513dd8b4906c24), CONST64(0xe07d1dc0a0806020), - CONST64(0x3932f98b40f2cbb2), CONST64(0xd94fe44be072ab92), CONST64(0x4e8971ed15b6f8a3), CONST64(0x7a134ebae7275dc0), - CONST64(0xc1d61a85490dcc44), CONST64(0x33913751f795a662), CONST64(0x70b0806050403010), CONST64(0x2b08c99f5eeac1b4), - CONST64(0xbbc5543fae2a9184), CONST64(0xd4e722975211c543), CONST64(0xde44ec4de576a893), CONST64(0x74055eb6ed2f5bc2), - CONST64(0xebb46aa17f35de4a), CONST64(0x145b81a973cedabd), CONST64(0x8a800c0589068c8f), CONST64(0xc30275ee99b4772d), - CONST64(0x135089af76cad9bc), CONST64(0xf32d946fd64ab99c), CONST64(0x0bc97761dfb5be6a), CONST64(0xddfa3a9d5d1dc040), - CONST64(0x577a3698d41b4ccf), CONST64(0x498279eb10b2fba2), CONST64(0xa7e97427ba3a9d80), CONST64(0xf09342bf6e21d14f), - CONST64(0x5dd9f842637c211f), CONST64(0x4c5d1e86c50f43ca), CONST64(0x71da39db3892e3aa), CONST64(0xd3ec2a915715c642), -}; - -static const ulong64 c[R + 1] = { - CONST64(0xba542f7453d3d24d), - CONST64(0x50ac8dbf70529a4c), - CONST64(0xead597d133515ba6), - CONST64(0xde48a899db32b7fc), - CONST64(0xe39e919be2bb416e), - CONST64(0xa5cb6b95a1f3b102), - CONST64(0xccc41d14c363da5d), - CONST64(0x5fdc7dcd7f5a6c5c), - CONST64(0xf726ffede89d6f8e), -}; - - /** - Initialize the Khazad block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ -int khazad_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - int r; - const ulong64 *S; - ulong64 K2, K1; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - if (keylen != 16) { - return CRYPT_INVALID_KEYSIZE; - } - if (num_rounds != 8 && num_rounds != 0) { - return CRYPT_INVALID_ROUNDS; - } - - /* use 7th table */ - S = T7; - - /* - * map unsigned char array cipher key to initial key state (mu): - */ - K2 = - ((ulong64)key[ 0] << 56) ^ - ((ulong64)key[ 1] << 48) ^ - ((ulong64)key[ 2] << 40) ^ - ((ulong64)key[ 3] << 32) ^ - ((ulong64)key[ 4] << 24) ^ - ((ulong64)key[ 5] << 16) ^ - ((ulong64)key[ 6] << 8) ^ - ((ulong64)key[ 7] ); - K1 = - ((ulong64)key[ 8] << 56) ^ - ((ulong64)key[ 9] << 48) ^ - ((ulong64)key[10] << 40) ^ - ((ulong64)key[11] << 32) ^ - ((ulong64)key[12] << 24) ^ - ((ulong64)key[13] << 16) ^ - ((ulong64)key[14] << 8) ^ - ((ulong64)key[15] ); - - /* - * compute the round keys: - */ - for (r = 0; r <= R; r++) { - /* - * K[r] = rho(c[r], K1) ^ K2; - */ - skey->khazad.roundKeyEnc[r] = - T0[(int)(K1 >> 56) ] ^ - T1[(int)(K1 >> 48) & 0xff] ^ - T2[(int)(K1 >> 40) & 0xff] ^ - T3[(int)(K1 >> 32) & 0xff] ^ - T4[(int)(K1 >> 24) & 0xff] ^ - T5[(int)(K1 >> 16) & 0xff] ^ - T6[(int)(K1 >> 8) & 0xff] ^ - T7[(int)(K1 ) & 0xff] ^ - c[r] ^ K2; - K2 = K1; K1 = skey->khazad.roundKeyEnc[r]; - } - /* - * compute the inverse key schedule: - * K'^0 = K^R, K'^R = K^0, K'^r = theta(K^{R-r}) - */ - skey->khazad.roundKeyDec[0] = skey->khazad.roundKeyEnc[R]; - for (r = 1; r < R; r++) { - K1 = skey->khazad.roundKeyEnc[R - r]; - skey->khazad.roundKeyDec[r] = - T0[(int)S[(int)(K1 >> 56) ] & 0xff] ^ - T1[(int)S[(int)(K1 >> 48) & 0xff] & 0xff] ^ - T2[(int)S[(int)(K1 >> 40) & 0xff] & 0xff] ^ - T3[(int)S[(int)(K1 >> 32) & 0xff] & 0xff] ^ - T4[(int)S[(int)(K1 >> 24) & 0xff] & 0xff] ^ - T5[(int)S[(int)(K1 >> 16) & 0xff] & 0xff] ^ - T6[(int)S[(int)(K1 >> 8) & 0xff] & 0xff] ^ - T7[(int)S[(int)(K1 ) & 0xff] & 0xff]; - } - skey->khazad.roundKeyDec[R] = skey->khazad.roundKeyEnc[0]; - - return CRYPT_OK; -} - -static void khazad_crypt(const unsigned char *plaintext, unsigned char *ciphertext, - const ulong64 *roundKey) { - int r; - ulong64 state; - /* - * map plaintext block to cipher state (mu) - * and add initial round key (sigma[K^0]): - */ - state = - ((ulong64)plaintext[0] << 56) ^ - ((ulong64)plaintext[1] << 48) ^ - ((ulong64)plaintext[2] << 40) ^ - ((ulong64)plaintext[3] << 32) ^ - ((ulong64)plaintext[4] << 24) ^ - ((ulong64)plaintext[5] << 16) ^ - ((ulong64)plaintext[6] << 8) ^ - ((ulong64)plaintext[7] ) ^ - roundKey[0]; - - /* - * R - 1 full rounds: - */ - for (r = 1; r < R; r++) { - state = - T0[(int)(state >> 56) ] ^ - T1[(int)(state >> 48) & 0xff] ^ - T2[(int)(state >> 40) & 0xff] ^ - T3[(int)(state >> 32) & 0xff] ^ - T4[(int)(state >> 24) & 0xff] ^ - T5[(int)(state >> 16) & 0xff] ^ - T6[(int)(state >> 8) & 0xff] ^ - T7[(int)(state ) & 0xff] ^ - roundKey[r]; - } - - /* - * last round: - */ - state = - (T0[(int)(state >> 56) ] & CONST64(0xff00000000000000)) ^ - (T1[(int)(state >> 48) & 0xff] & CONST64(0x00ff000000000000)) ^ - (T2[(int)(state >> 40) & 0xff] & CONST64(0x0000ff0000000000)) ^ - (T3[(int)(state >> 32) & 0xff] & CONST64(0x000000ff00000000)) ^ - (T4[(int)(state >> 24) & 0xff] & CONST64(0x00000000ff000000)) ^ - (T5[(int)(state >> 16) & 0xff] & CONST64(0x0000000000ff0000)) ^ - (T6[(int)(state >> 8) & 0xff] & CONST64(0x000000000000ff00)) ^ - (T7[(int)(state ) & 0xff] & CONST64(0x00000000000000ff)) ^ - roundKey[R]; - - /* - * map cipher state to ciphertext block (mu^{-1}): - */ - ciphertext[0] = (unsigned char)(state >> 56); - ciphertext[1] = (unsigned char)(state >> 48); - ciphertext[2] = (unsigned char)(state >> 40); - ciphertext[3] = (unsigned char)(state >> 32); - ciphertext[4] = (unsigned char)(state >> 24); - ciphertext[5] = (unsigned char)(state >> 16); - ciphertext[6] = (unsigned char)(state >> 8); - ciphertext[7] = (unsigned char)(state ); -} - -/** - Encrypts a block of text with Khazad - @param pt The input plaintext (8 bytes) - @param ct The output ciphertext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int khazad_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - khazad_crypt(pt, ct, skey->khazad.roundKeyEnc); - return CRYPT_OK; -} - -/** - Decrypts a block of text with Khazad - @param ct The input ciphertext (8 bytes) - @param pt The output plaintext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int khazad_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - khazad_crypt(ct, pt, skey->khazad.roundKeyDec); - return CRYPT_OK; -} - -/** - Performs a self-test of the Khazad block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ -int khazad_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct test { - unsigned char pt[8], ct[8], key[16]; - } tests[] = { -{ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x49, 0xA4, 0xCE, 0x32, 0xAC, 0x19, 0x0E, 0x3F }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}, { - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x64, 0x5D, 0x77, 0x3E, 0x40, 0xAB, 0xDD, 0x53 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } -}, { - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x9E, 0x39, 0x98, 0x64, 0xF7, 0x8E, 0xCA, 0x02 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}, { - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, - { 0xA9, 0xDF, 0x3D, 0x2C, 0x64, 0xD3, 0xEA, 0x28 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -} -}; - int x, y; - unsigned char buf[2][8]; - symmetric_key skey; - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { - khazad_setup(tests[x].key, 16, 0, &skey); - khazad_ecb_encrypt(tests[x].pt, buf[0], &skey); - khazad_ecb_decrypt(buf[0], buf[1], &skey); - if (ltc_compare_testvector(buf[0], 8, tests[x].ct, 8, "Khazad Encrypt", x) || - ltc_compare_testvector(buf[1], 8, tests[x].pt, 8, "Khazad Decrypt", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - - for (y = 0; y < 1000; y++) khazad_ecb_encrypt(buf[0], buf[0], &skey); - for (y = 0; y < 1000; y++) khazad_ecb_decrypt(buf[0], buf[0], &skey); - if (ltc_compare_testvector(buf[0], 8, tests[x].ct, 8, "Khazad 1000", 1000)) { - return CRYPT_FAIL_TESTVECTOR; - } - - } - return CRYPT_OK; -#endif -} - -/** Terminate the context - @param skey The scheduled key -*/ -void khazad_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int khazad_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize >= 16) { - *keysize = 16; - return CRYPT_OK; - } - return CRYPT_INVALID_KEYSIZE; -} - -#undef R - -#endif diff --git a/src/ciphers/kseed.c b/src/ciphers/kseed.c deleted file mode 100644 index abba4615..00000000 --- a/src/ciphers/kseed.c +++ /dev/null @@ -1,369 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file kseed.c - seed implementation of SEED derived from RFC4269 - Tom St Denis -*/ - -#include "tomcrypt_private.h" - -#ifdef LTC_KSEED - -const struct ltc_cipher_descriptor kseed_desc = { - "seed", - 20, - 16, 16, 16, 16, - &kseed_setup, - &kseed_ecb_encrypt, - &kseed_ecb_decrypt, - &kseed_test, - &kseed_done, - &kseed_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -static const ulong32 SS0[256] = { -0x2989A1A8UL,0x05858184UL,0x16C6D2D4UL,0x13C3D3D0UL,0x14445054UL,0x1D0D111CUL,0x2C8CA0ACUL,0x25052124UL, -0x1D4D515CUL,0x03434340UL,0x18081018UL,0x1E0E121CUL,0x11415150UL,0x3CCCF0FCUL,0x0ACAC2C8UL,0x23436360UL, -0x28082028UL,0x04444044UL,0x20002020UL,0x1D8D919CUL,0x20C0E0E0UL,0x22C2E2E0UL,0x08C8C0C8UL,0x17071314UL, -0x2585A1A4UL,0x0F8F838CUL,0x03030300UL,0x3B4B7378UL,0x3B8BB3B8UL,0x13031310UL,0x12C2D2D0UL,0x2ECEE2ECUL, -0x30407070UL,0x0C8C808CUL,0x3F0F333CUL,0x2888A0A8UL,0x32023230UL,0x1DCDD1DCUL,0x36C6F2F4UL,0x34447074UL, -0x2CCCE0ECUL,0x15859194UL,0x0B0B0308UL,0x17475354UL,0x1C4C505CUL,0x1B4B5358UL,0x3D8DB1BCUL,0x01010100UL, -0x24042024UL,0x1C0C101CUL,0x33437370UL,0x18889098UL,0x10001010UL,0x0CCCC0CCUL,0x32C2F2F0UL,0x19C9D1D8UL, -0x2C0C202CUL,0x27C7E3E4UL,0x32427270UL,0x03838380UL,0x1B8B9398UL,0x11C1D1D0UL,0x06868284UL,0x09C9C1C8UL, -0x20406060UL,0x10405050UL,0x2383A3A0UL,0x2BCBE3E8UL,0x0D0D010CUL,0x3686B2B4UL,0x1E8E929CUL,0x0F4F434CUL, -0x3787B3B4UL,0x1A4A5258UL,0x06C6C2C4UL,0x38487078UL,0x2686A2A4UL,0x12021210UL,0x2F8FA3ACUL,0x15C5D1D4UL, -0x21416160UL,0x03C3C3C0UL,0x3484B0B4UL,0x01414140UL,0x12425250UL,0x3D4D717CUL,0x0D8D818CUL,0x08080008UL, -0x1F0F131CUL,0x19899198UL,0x00000000UL,0x19091118UL,0x04040004UL,0x13435350UL,0x37C7F3F4UL,0x21C1E1E0UL, -0x3DCDF1FCUL,0x36467274UL,0x2F0F232CUL,0x27072324UL,0x3080B0B0UL,0x0B8B8388UL,0x0E0E020CUL,0x2B8BA3A8UL, -0x2282A2A0UL,0x2E4E626CUL,0x13839390UL,0x0D4D414CUL,0x29496168UL,0x3C4C707CUL,0x09090108UL,0x0A0A0208UL, -0x3F8FB3BCUL,0x2FCFE3ECUL,0x33C3F3F0UL,0x05C5C1C4UL,0x07878384UL,0x14041014UL,0x3ECEF2FCUL,0x24446064UL, -0x1ECED2DCUL,0x2E0E222CUL,0x0B4B4348UL,0x1A0A1218UL,0x06060204UL,0x21012120UL,0x2B4B6368UL,0x26466264UL, -0x02020200UL,0x35C5F1F4UL,0x12829290UL,0x0A8A8288UL,0x0C0C000CUL,0x3383B3B0UL,0x3E4E727CUL,0x10C0D0D0UL, -0x3A4A7278UL,0x07474344UL,0x16869294UL,0x25C5E1E4UL,0x26062224UL,0x00808080UL,0x2D8DA1ACUL,0x1FCFD3DCUL, -0x2181A1A0UL,0x30003030UL,0x37073334UL,0x2E8EA2ACUL,0x36063234UL,0x15051114UL,0x22022220UL,0x38083038UL, -0x34C4F0F4UL,0x2787A3A4UL,0x05454144UL,0x0C4C404CUL,0x01818180UL,0x29C9E1E8UL,0x04848084UL,0x17879394UL, -0x35053134UL,0x0BCBC3C8UL,0x0ECEC2CCUL,0x3C0C303CUL,0x31417170UL,0x11011110UL,0x07C7C3C4UL,0x09898188UL, -0x35457174UL,0x3BCBF3F8UL,0x1ACAD2D8UL,0x38C8F0F8UL,0x14849094UL,0x19495158UL,0x02828280UL,0x04C4C0C4UL, -0x3FCFF3FCUL,0x09494148UL,0x39093138UL,0x27476364UL,0x00C0C0C0UL,0x0FCFC3CCUL,0x17C7D3D4UL,0x3888B0B8UL, -0x0F0F030CUL,0x0E8E828CUL,0x02424240UL,0x23032320UL,0x11819190UL,0x2C4C606CUL,0x1BCBD3D8UL,0x2484A0A4UL, -0x34043034UL,0x31C1F1F0UL,0x08484048UL,0x02C2C2C0UL,0x2F4F636CUL,0x3D0D313CUL,0x2D0D212CUL,0x00404040UL, -0x3E8EB2BCUL,0x3E0E323CUL,0x3C8CB0BCUL,0x01C1C1C0UL,0x2A8AA2A8UL,0x3A8AB2B8UL,0x0E4E424CUL,0x15455154UL, -0x3B0B3338UL,0x1CCCD0DCUL,0x28486068UL,0x3F4F737CUL,0x1C8C909CUL,0x18C8D0D8UL,0x0A4A4248UL,0x16465254UL, -0x37477374UL,0x2080A0A0UL,0x2DCDE1ECUL,0x06464244UL,0x3585B1B4UL,0x2B0B2328UL,0x25456164UL,0x3ACAF2F8UL, -0x23C3E3E0UL,0x3989B1B8UL,0x3181B1B0UL,0x1F8F939CUL,0x1E4E525CUL,0x39C9F1F8UL,0x26C6E2E4UL,0x3282B2B0UL, -0x31013130UL,0x2ACAE2E8UL,0x2D4D616CUL,0x1F4F535CUL,0x24C4E0E4UL,0x30C0F0F0UL,0x0DCDC1CCUL,0x08888088UL, -0x16061214UL,0x3A0A3238UL,0x18485058UL,0x14C4D0D4UL,0x22426260UL,0x29092128UL,0x07070304UL,0x33033330UL, -0x28C8E0E8UL,0x1B0B1318UL,0x05050104UL,0x39497178UL,0x10809090UL,0x2A4A6268UL,0x2A0A2228UL,0x1A8A9298UL -}; - -static const ulong32 SS1[256] = { -0x38380830UL,0xE828C8E0UL,0x2C2D0D21UL,0xA42686A2UL,0xCC0FCFC3UL,0xDC1ECED2UL,0xB03383B3UL,0xB83888B0UL, -0xAC2F8FA3UL,0x60204060UL,0x54154551UL,0xC407C7C3UL,0x44044440UL,0x6C2F4F63UL,0x682B4B63UL,0x581B4B53UL, -0xC003C3C3UL,0x60224262UL,0x30330333UL,0xB43585B1UL,0x28290921UL,0xA02080A0UL,0xE022C2E2UL,0xA42787A3UL, -0xD013C3D3UL,0x90118191UL,0x10110111UL,0x04060602UL,0x1C1C0C10UL,0xBC3C8CB0UL,0x34360632UL,0x480B4B43UL, -0xEC2FCFE3UL,0x88088880UL,0x6C2C4C60UL,0xA82888A0UL,0x14170713UL,0xC404C4C0UL,0x14160612UL,0xF434C4F0UL, -0xC002C2C2UL,0x44054541UL,0xE021C1E1UL,0xD416C6D2UL,0x3C3F0F33UL,0x3C3D0D31UL,0x8C0E8E82UL,0x98188890UL, -0x28280820UL,0x4C0E4E42UL,0xF436C6F2UL,0x3C3E0E32UL,0xA42585A1UL,0xF839C9F1UL,0x0C0D0D01UL,0xDC1FCFD3UL, -0xD818C8D0UL,0x282B0B23UL,0x64264662UL,0x783A4A72UL,0x24270723UL,0x2C2F0F23UL,0xF031C1F1UL,0x70324272UL, -0x40024242UL,0xD414C4D0UL,0x40014141UL,0xC000C0C0UL,0x70334373UL,0x64274763UL,0xAC2C8CA0UL,0x880B8B83UL, -0xF437C7F3UL,0xAC2D8DA1UL,0x80008080UL,0x1C1F0F13UL,0xC80ACAC2UL,0x2C2C0C20UL,0xA82A8AA2UL,0x34340430UL, -0xD012C2D2UL,0x080B0B03UL,0xEC2ECEE2UL,0xE829C9E1UL,0x5C1D4D51UL,0x94148490UL,0x18180810UL,0xF838C8F0UL, -0x54174753UL,0xAC2E8EA2UL,0x08080800UL,0xC405C5C1UL,0x10130313UL,0xCC0DCDC1UL,0x84068682UL,0xB83989B1UL, -0xFC3FCFF3UL,0x7C3D4D71UL,0xC001C1C1UL,0x30310131UL,0xF435C5F1UL,0x880A8A82UL,0x682A4A62UL,0xB03181B1UL, -0xD011C1D1UL,0x20200020UL,0xD417C7D3UL,0x00020202UL,0x20220222UL,0x04040400UL,0x68284860UL,0x70314171UL, -0x04070703UL,0xD81BCBD3UL,0x9C1D8D91UL,0x98198991UL,0x60214161UL,0xBC3E8EB2UL,0xE426C6E2UL,0x58194951UL, -0xDC1DCDD1UL,0x50114151UL,0x90108090UL,0xDC1CCCD0UL,0x981A8A92UL,0xA02383A3UL,0xA82B8BA3UL,0xD010C0D0UL, -0x80018181UL,0x0C0F0F03UL,0x44074743UL,0x181A0A12UL,0xE023C3E3UL,0xEC2CCCE0UL,0x8C0D8D81UL,0xBC3F8FB3UL, -0x94168692UL,0x783B4B73UL,0x5C1C4C50UL,0xA02282A2UL,0xA02181A1UL,0x60234363UL,0x20230323UL,0x4C0D4D41UL, -0xC808C8C0UL,0x9C1E8E92UL,0x9C1C8C90UL,0x383A0A32UL,0x0C0C0C00UL,0x2C2E0E22UL,0xB83A8AB2UL,0x6C2E4E62UL, -0x9C1F8F93UL,0x581A4A52UL,0xF032C2F2UL,0x90128292UL,0xF033C3F3UL,0x48094941UL,0x78384870UL,0xCC0CCCC0UL, -0x14150511UL,0xF83BCBF3UL,0x70304070UL,0x74354571UL,0x7C3F4F73UL,0x34350531UL,0x10100010UL,0x00030303UL, -0x64244460UL,0x6C2D4D61UL,0xC406C6C2UL,0x74344470UL,0xD415C5D1UL,0xB43484B0UL,0xE82ACAE2UL,0x08090901UL, -0x74364672UL,0x18190911UL,0xFC3ECEF2UL,0x40004040UL,0x10120212UL,0xE020C0E0UL,0xBC3D8DB1UL,0x04050501UL, -0xF83ACAF2UL,0x00010101UL,0xF030C0F0UL,0x282A0A22UL,0x5C1E4E52UL,0xA82989A1UL,0x54164652UL,0x40034343UL, -0x84058581UL,0x14140410UL,0x88098981UL,0x981B8B93UL,0xB03080B0UL,0xE425C5E1UL,0x48084840UL,0x78394971UL, -0x94178793UL,0xFC3CCCF0UL,0x1C1E0E12UL,0x80028282UL,0x20210121UL,0x8C0C8C80UL,0x181B0B13UL,0x5C1F4F53UL, -0x74374773UL,0x54144450UL,0xB03282B2UL,0x1C1D0D11UL,0x24250521UL,0x4C0F4F43UL,0x00000000UL,0x44064642UL, -0xEC2DCDE1UL,0x58184850UL,0x50124252UL,0xE82BCBE3UL,0x7C3E4E72UL,0xD81ACAD2UL,0xC809C9C1UL,0xFC3DCDF1UL, -0x30300030UL,0x94158591UL,0x64254561UL,0x3C3C0C30UL,0xB43686B2UL,0xE424C4E0UL,0xB83B8BB3UL,0x7C3C4C70UL, -0x0C0E0E02UL,0x50104050UL,0x38390931UL,0x24260622UL,0x30320232UL,0x84048480UL,0x68294961UL,0x90138393UL, -0x34370733UL,0xE427C7E3UL,0x24240420UL,0xA42484A0UL,0xC80BCBC3UL,0x50134353UL,0x080A0A02UL,0x84078783UL, -0xD819C9D1UL,0x4C0C4C40UL,0x80038383UL,0x8C0F8F83UL,0xCC0ECEC2UL,0x383B0B33UL,0x480A4A42UL,0xB43787B3UL -}; - -static const ulong32 SS2[256] = { -0xA1A82989UL,0x81840585UL,0xD2D416C6UL,0xD3D013C3UL,0x50541444UL,0x111C1D0DUL,0xA0AC2C8CUL,0x21242505UL, -0x515C1D4DUL,0x43400343UL,0x10181808UL,0x121C1E0EUL,0x51501141UL,0xF0FC3CCCUL,0xC2C80ACAUL,0x63602343UL, -0x20282808UL,0x40440444UL,0x20202000UL,0x919C1D8DUL,0xE0E020C0UL,0xE2E022C2UL,0xC0C808C8UL,0x13141707UL, -0xA1A42585UL,0x838C0F8FUL,0x03000303UL,0x73783B4BUL,0xB3B83B8BUL,0x13101303UL,0xD2D012C2UL,0xE2EC2ECEUL, -0x70703040UL,0x808C0C8CUL,0x333C3F0FUL,0xA0A82888UL,0x32303202UL,0xD1DC1DCDUL,0xF2F436C6UL,0x70743444UL, -0xE0EC2CCCUL,0x91941585UL,0x03080B0BUL,0x53541747UL,0x505C1C4CUL,0x53581B4BUL,0xB1BC3D8DUL,0x01000101UL, -0x20242404UL,0x101C1C0CUL,0x73703343UL,0x90981888UL,0x10101000UL,0xC0CC0CCCUL,0xF2F032C2UL,0xD1D819C9UL, -0x202C2C0CUL,0xE3E427C7UL,0x72703242UL,0x83800383UL,0x93981B8BUL,0xD1D011C1UL,0x82840686UL,0xC1C809C9UL, -0x60602040UL,0x50501040UL,0xA3A02383UL,0xE3E82BCBUL,0x010C0D0DUL,0xB2B43686UL,0x929C1E8EUL,0x434C0F4FUL, -0xB3B43787UL,0x52581A4AUL,0xC2C406C6UL,0x70783848UL,0xA2A42686UL,0x12101202UL,0xA3AC2F8FUL,0xD1D415C5UL, -0x61602141UL,0xC3C003C3UL,0xB0B43484UL,0x41400141UL,0x52501242UL,0x717C3D4DUL,0x818C0D8DUL,0x00080808UL, -0x131C1F0FUL,0x91981989UL,0x00000000UL,0x11181909UL,0x00040404UL,0x53501343UL,0xF3F437C7UL,0xE1E021C1UL, -0xF1FC3DCDUL,0x72743646UL,0x232C2F0FUL,0x23242707UL,0xB0B03080UL,0x83880B8BUL,0x020C0E0EUL,0xA3A82B8BUL, -0xA2A02282UL,0x626C2E4EUL,0x93901383UL,0x414C0D4DUL,0x61682949UL,0x707C3C4CUL,0x01080909UL,0x02080A0AUL, -0xB3BC3F8FUL,0xE3EC2FCFUL,0xF3F033C3UL,0xC1C405C5UL,0x83840787UL,0x10141404UL,0xF2FC3ECEUL,0x60642444UL, -0xD2DC1ECEUL,0x222C2E0EUL,0x43480B4BUL,0x12181A0AUL,0x02040606UL,0x21202101UL,0x63682B4BUL,0x62642646UL, -0x02000202UL,0xF1F435C5UL,0x92901282UL,0x82880A8AUL,0x000C0C0CUL,0xB3B03383UL,0x727C3E4EUL,0xD0D010C0UL, -0x72783A4AUL,0x43440747UL,0x92941686UL,0xE1E425C5UL,0x22242606UL,0x80800080UL,0xA1AC2D8DUL,0xD3DC1FCFUL, -0xA1A02181UL,0x30303000UL,0x33343707UL,0xA2AC2E8EUL,0x32343606UL,0x11141505UL,0x22202202UL,0x30383808UL, -0xF0F434C4UL,0xA3A42787UL,0x41440545UL,0x404C0C4CUL,0x81800181UL,0xE1E829C9UL,0x80840484UL,0x93941787UL, -0x31343505UL,0xC3C80BCBUL,0xC2CC0ECEUL,0x303C3C0CUL,0x71703141UL,0x11101101UL,0xC3C407C7UL,0x81880989UL, -0x71743545UL,0xF3F83BCBUL,0xD2D81ACAUL,0xF0F838C8UL,0x90941484UL,0x51581949UL,0x82800282UL,0xC0C404C4UL, -0xF3FC3FCFUL,0x41480949UL,0x31383909UL,0x63642747UL,0xC0C000C0UL,0xC3CC0FCFUL,0xD3D417C7UL,0xB0B83888UL, -0x030C0F0FUL,0x828C0E8EUL,0x42400242UL,0x23202303UL,0x91901181UL,0x606C2C4CUL,0xD3D81BCBUL,0xA0A42484UL, -0x30343404UL,0xF1F031C1UL,0x40480848UL,0xC2C002C2UL,0x636C2F4FUL,0x313C3D0DUL,0x212C2D0DUL,0x40400040UL, -0xB2BC3E8EUL,0x323C3E0EUL,0xB0BC3C8CUL,0xC1C001C1UL,0xA2A82A8AUL,0xB2B83A8AUL,0x424C0E4EUL,0x51541545UL, -0x33383B0BUL,0xD0DC1CCCUL,0x60682848UL,0x737C3F4FUL,0x909C1C8CUL,0xD0D818C8UL,0x42480A4AUL,0x52541646UL, -0x73743747UL,0xA0A02080UL,0xE1EC2DCDUL,0x42440646UL,0xB1B43585UL,0x23282B0BUL,0x61642545UL,0xF2F83ACAUL, -0xE3E023C3UL,0xB1B83989UL,0xB1B03181UL,0x939C1F8FUL,0x525C1E4EUL,0xF1F839C9UL,0xE2E426C6UL,0xB2B03282UL, -0x31303101UL,0xE2E82ACAUL,0x616C2D4DUL,0x535C1F4FUL,0xE0E424C4UL,0xF0F030C0UL,0xC1CC0DCDUL,0x80880888UL, -0x12141606UL,0x32383A0AUL,0x50581848UL,0xD0D414C4UL,0x62602242UL,0x21282909UL,0x03040707UL,0x33303303UL, -0xE0E828C8UL,0x13181B0BUL,0x01040505UL,0x71783949UL,0x90901080UL,0x62682A4AUL,0x22282A0AUL,0x92981A8AUL -}; - -static const ulong32 SS3[256] = { -0x08303838UL,0xC8E0E828UL,0x0D212C2DUL,0x86A2A426UL,0xCFC3CC0FUL,0xCED2DC1EUL,0x83B3B033UL,0x88B0B838UL, -0x8FA3AC2FUL,0x40606020UL,0x45515415UL,0xC7C3C407UL,0x44404404UL,0x4F636C2FUL,0x4B63682BUL,0x4B53581BUL, -0xC3C3C003UL,0x42626022UL,0x03333033UL,0x85B1B435UL,0x09212829UL,0x80A0A020UL,0xC2E2E022UL,0x87A3A427UL, -0xC3D3D013UL,0x81919011UL,0x01111011UL,0x06020406UL,0x0C101C1CUL,0x8CB0BC3CUL,0x06323436UL,0x4B43480BUL, -0xCFE3EC2FUL,0x88808808UL,0x4C606C2CUL,0x88A0A828UL,0x07131417UL,0xC4C0C404UL,0x06121416UL,0xC4F0F434UL, -0xC2C2C002UL,0x45414405UL,0xC1E1E021UL,0xC6D2D416UL,0x0F333C3FUL,0x0D313C3DUL,0x8E828C0EUL,0x88909818UL, -0x08202828UL,0x4E424C0EUL,0xC6F2F436UL,0x0E323C3EUL,0x85A1A425UL,0xC9F1F839UL,0x0D010C0DUL,0xCFD3DC1FUL, -0xC8D0D818UL,0x0B23282BUL,0x46626426UL,0x4A72783AUL,0x07232427UL,0x0F232C2FUL,0xC1F1F031UL,0x42727032UL, -0x42424002UL,0xC4D0D414UL,0x41414001UL,0xC0C0C000UL,0x43737033UL,0x47636427UL,0x8CA0AC2CUL,0x8B83880BUL, -0xC7F3F437UL,0x8DA1AC2DUL,0x80808000UL,0x0F131C1FUL,0xCAC2C80AUL,0x0C202C2CUL,0x8AA2A82AUL,0x04303434UL, -0xC2D2D012UL,0x0B03080BUL,0xCEE2EC2EUL,0xC9E1E829UL,0x4D515C1DUL,0x84909414UL,0x08101818UL,0xC8F0F838UL, -0x47535417UL,0x8EA2AC2EUL,0x08000808UL,0xC5C1C405UL,0x03131013UL,0xCDC1CC0DUL,0x86828406UL,0x89B1B839UL, -0xCFF3FC3FUL,0x4D717C3DUL,0xC1C1C001UL,0x01313031UL,0xC5F1F435UL,0x8A82880AUL,0x4A62682AUL,0x81B1B031UL, -0xC1D1D011UL,0x00202020UL,0xC7D3D417UL,0x02020002UL,0x02222022UL,0x04000404UL,0x48606828UL,0x41717031UL, -0x07030407UL,0xCBD3D81BUL,0x8D919C1DUL,0x89919819UL,0x41616021UL,0x8EB2BC3EUL,0xC6E2E426UL,0x49515819UL, -0xCDD1DC1DUL,0x41515011UL,0x80909010UL,0xCCD0DC1CUL,0x8A92981AUL,0x83A3A023UL,0x8BA3A82BUL,0xC0D0D010UL, -0x81818001UL,0x0F030C0FUL,0x47434407UL,0x0A12181AUL,0xC3E3E023UL,0xCCE0EC2CUL,0x8D818C0DUL,0x8FB3BC3FUL, -0x86929416UL,0x4B73783BUL,0x4C505C1CUL,0x82A2A022UL,0x81A1A021UL,0x43636023UL,0x03232023UL,0x4D414C0DUL, -0xC8C0C808UL,0x8E929C1EUL,0x8C909C1CUL,0x0A32383AUL,0x0C000C0CUL,0x0E222C2EUL,0x8AB2B83AUL,0x4E626C2EUL, -0x8F939C1FUL,0x4A52581AUL,0xC2F2F032UL,0x82929012UL,0xC3F3F033UL,0x49414809UL,0x48707838UL,0xCCC0CC0CUL, -0x05111415UL,0xCBF3F83BUL,0x40707030UL,0x45717435UL,0x4F737C3FUL,0x05313435UL,0x00101010UL,0x03030003UL, -0x44606424UL,0x4D616C2DUL,0xC6C2C406UL,0x44707434UL,0xC5D1D415UL,0x84B0B434UL,0xCAE2E82AUL,0x09010809UL, -0x46727436UL,0x09111819UL,0xCEF2FC3EUL,0x40404000UL,0x02121012UL,0xC0E0E020UL,0x8DB1BC3DUL,0x05010405UL, -0xCAF2F83AUL,0x01010001UL,0xC0F0F030UL,0x0A22282AUL,0x4E525C1EUL,0x89A1A829UL,0x46525416UL,0x43434003UL, -0x85818405UL,0x04101414UL,0x89818809UL,0x8B93981BUL,0x80B0B030UL,0xC5E1E425UL,0x48404808UL,0x49717839UL, -0x87939417UL,0xCCF0FC3CUL,0x0E121C1EUL,0x82828002UL,0x01212021UL,0x8C808C0CUL,0x0B13181BUL,0x4F535C1FUL, -0x47737437UL,0x44505414UL,0x82B2B032UL,0x0D111C1DUL,0x05212425UL,0x4F434C0FUL,0x00000000UL,0x46424406UL, -0xCDE1EC2DUL,0x48505818UL,0x42525012UL,0xCBE3E82BUL,0x4E727C3EUL,0xCAD2D81AUL,0xC9C1C809UL,0xCDF1FC3DUL, -0x00303030UL,0x85919415UL,0x45616425UL,0x0C303C3CUL,0x86B2B436UL,0xC4E0E424UL,0x8BB3B83BUL,0x4C707C3CUL, -0x0E020C0EUL,0x40505010UL,0x09313839UL,0x06222426UL,0x02323032UL,0x84808404UL,0x49616829UL,0x83939013UL, -0x07333437UL,0xC7E3E427UL,0x04202424UL,0x84A0A424UL,0xCBC3C80BUL,0x43535013UL,0x0A02080AUL,0x87838407UL, -0xC9D1D819UL,0x4C404C0CUL,0x83838003UL,0x8F838C0FUL,0xCEC2CC0EUL,0x0B33383BUL,0x4A42480AUL,0x87B3B437UL -}; - -static const ulong32 KCi[16] = { -0x9E3779B9,0x3C6EF373, -0x78DDE6E6,0xF1BBCDCC, -0xE3779B99,0xC6EF3733, -0x8DDE6E67,0x1BBCDCCF, -0x3779B99E,0x6EF3733C, -0xDDE6E678,0xBBCDCCF1, -0x779B99E3,0xEF3733C6, -0xDE6E678D,0xBCDCCF1B -}; - -#define G(x) (SS3[((x)>>24)&255] ^ SS2[((x)>>16)&255] ^ SS1[((x)>>8)&255] ^ SS0[(x)&255]) - -#define F(L1, L2, R1, R2, K1, K2) \ - T2 = G((R1 ^ K1) ^ (R2 ^ K2)); \ - T = G( G(T2 + (R1 ^ K1)) + T2); \ - L2 ^= T; \ - L1 ^= (T + G(T2 + (R1 ^ K1))); \ - - /** - Initialize the SEED block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ -int kseed_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - int i; - ulong32 tmp, k1, k2, k3, k4; - - if (keylen != 16) { - return CRYPT_INVALID_KEYSIZE; - } - - if (num_rounds != 16 && num_rounds != 0) { - return CRYPT_INVALID_ROUNDS; - } - - /* load key */ - LOAD32H(k1, key); - LOAD32H(k2, key+4); - LOAD32H(k3, key+8); - LOAD32H(k4, key+12); - - for (i = 0; i < 16; i++) { - skey->kseed.K[2*i+0] = G(k1 + k3 - KCi[i]); - skey->kseed.K[2*i+1] = G(k2 - k4 + KCi[i]); - if (i&1) { - tmp = k3; - k3 = ((k3 << 8) | (k4 >> 24)) & 0xFFFFFFFF; - k4 = ((k4 << 8) | (tmp >> 24)) & 0xFFFFFFFF; - } else { - tmp = k1; - k1 = ((k1 >> 8) | (k2 << 24)) & 0xFFFFFFFF; - k2 = ((k2 >> 8) | (tmp << 24)) & 0xFFFFFFFF; - } - /* reverse keys for decrypt */ - skey->kseed.dK[2*(15-i)+0] = skey->kseed.K[2*i+0]; - skey->kseed.dK[2*(15-i)+1] = skey->kseed.K[2*i+1]; - } - - return CRYPT_OK; -} - -static void rounds(ulong32 *P, const ulong32 *K) -{ - ulong32 T, T2; - int i; - for (i = 0; i < 16; i += 2) { - F(P[0], P[1], P[2], P[3], K[0], K[1]); - F(P[2], P[3], P[0], P[1], K[2], K[3]); - K += 4; - } -} - -/** - Encrypts a block of text with SEED - @param pt The input plaintext (16 bytes) - @param ct The output ciphertext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int kseed_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - ulong32 P[4]; - LOAD32H(P[0], pt); - LOAD32H(P[1], pt+4); - LOAD32H(P[2], pt+8); - LOAD32H(P[3], pt+12); - rounds(P, skey->kseed.K); - STORE32H(P[2], ct); - STORE32H(P[3], ct+4); - STORE32H(P[0], ct+8); - STORE32H(P[1], ct+12); - return CRYPT_OK; -} - -/** - Decrypts a block of text with SEED - @param ct The input ciphertext (16 bytes) - @param pt The output plaintext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int kseed_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - ulong32 P[4]; - LOAD32H(P[0], ct); - LOAD32H(P[1], ct+4); - LOAD32H(P[2], ct+8); - LOAD32H(P[3], ct+12); - rounds(P, skey->kseed.dK); - STORE32H(P[2], pt); - STORE32H(P[3], pt+4); - STORE32H(P[0], pt+8); - STORE32H(P[1], pt+12); - return CRYPT_OK; -} - -/** Terminate the context - @param skey The scheduled key -*/ -void kseed_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - -/** - Performs a self-test of the SEED block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ -int kseed_test(void) -{ -#if !defined(LTC_TEST) - return CRYPT_NOP; -#else - static const struct test { - unsigned char pt[16], ct[16], key[16]; - } tests[] = { - -{ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F }, - { 0x5E,0xBA,0xC6,0xE0,0x05,0x4E,0x16,0x68,0x19,0xAF,0xF1,0xCC,0x6D,0x34,0x6C,0xDB }, - { 0 }, -}, - -{ - { 0 }, - { 0xC1,0x1F,0x22,0xF2,0x01,0x40,0x50,0x50,0x84,0x48,0x35,0x97,0xE4,0x37,0x0F,0x43 }, - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F }, -}, - -{ - { 0x83,0xA2,0xF8,0xA2,0x88,0x64,0x1F,0xB9,0xA4,0xE9,0xA5,0xCC,0x2F,0x13,0x1C,0x7D }, - { 0xEE,0x54,0xD1,0x3E,0xBC,0xAE,0x70,0x6D,0x22,0x6B,0xC3,0x14,0x2C,0xD4,0x0D,0x4A }, - { 0x47,0x06,0x48,0x08,0x51,0xE6,0x1B,0xE8,0x5D,0x74,0xBF,0xB3,0xFD,0x95,0x61,0x85 }, -}, - -{ - { 0xB4,0x1E,0x6B,0xE2,0xEB,0xA8,0x4A,0x14,0x8E,0x2E,0xED,0x84,0x59,0x3C,0x5E,0xC7 }, - { 0x9B,0x9B,0x7B,0xFC,0xD1,0x81,0x3C,0xB9,0x5D,0x0B,0x36,0x18,0xF4,0x0F,0x51,0x22 }, - { 0x28,0xDB,0xC3,0xBC,0x49,0xFF,0xD8,0x7D,0xCF,0xA5,0x09,0xB1,0x1D,0x42,0x2B,0xE7 }, -} -}; - int x; - unsigned char buf[2][16]; - symmetric_key skey; - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { - kseed_setup(tests[x].key, 16, 0, &skey); - kseed_ecb_encrypt(tests[x].pt, buf[0], &skey); - kseed_ecb_decrypt(buf[0], buf[1], &skey); - if (ltc_compare_testvector(buf[0], 16, tests[x].ct, 16, "KSEED Encrypt", x) || - ltc_compare_testvector(buf[1], 16, tests[x].pt, 16, "KSEED Decrypt", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int kseed_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize >= 16) { - *keysize = 16; - } else { - return CRYPT_INVALID_KEYSIZE; - } - return CRYPT_OK; -} - -#undef G -#undef F - -#endif diff --git a/src/ciphers/multi2.c b/src/ciphers/multi2.c deleted file mode 100644 index 624161e1..00000000 --- a/src/ciphers/multi2.c +++ /dev/null @@ -1,309 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file multi2.c - Multi-2 implementation (not public domain, hence the default disable) -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_MULTI2 - -static void s_pi1(ulong32 *p) -{ - p[1] ^= p[0]; -} - -static void s_pi2(ulong32 *p, const ulong32 *k) -{ - ulong32 t; - t = (p[1] + k[0]) & 0xFFFFFFFFUL; - t = (ROL(t, 1) + t - 1) & 0xFFFFFFFFUL; - t = (ROL(t, 4) ^ t) & 0xFFFFFFFFUL; - p[0] ^= t; -} - -static void s_pi3(ulong32 *p, const ulong32 *k) -{ - ulong32 t; - t = p[0] + k[1]; - t = (ROL(t, 2) + t + 1) & 0xFFFFFFFFUL; - t = (ROL(t, 8) ^ t) & 0xFFFFFFFFUL; - t = (t + k[2]) & 0xFFFFFFFFUL; - t = (ROL(t, 1) - t) & 0xFFFFFFFFUL; - t = ROL(t, 16) ^ (p[0] | t); - p[1] ^= t; -} - -static void s_pi4(ulong32 *p, const ulong32 *k) -{ - ulong32 t; - t = (p[1] + k[3]) & 0xFFFFFFFFUL; - t = (ROL(t, 2) + t + 1) & 0xFFFFFFFFUL; - p[0] ^= t; -} - -static void s_setup(const ulong32 *dk, const ulong32 *k, ulong32 *uk) -{ - int n, t; - ulong32 p[2]; - - p[0] = dk[0]; p[1] = dk[1]; - - t = 4; - n = 0; - s_pi1(p); - s_pi2(p, k); - uk[n++] = p[0]; - s_pi3(p, k); - uk[n++] = p[1]; - s_pi4(p, k); - uk[n++] = p[0]; - s_pi1(p); - uk[n++] = p[1]; - s_pi2(p, k+t); - uk[n++] = p[0]; - s_pi3(p, k+t); - uk[n++] = p[1]; - s_pi4(p, k+t); - uk[n++] = p[0]; - s_pi1(p); - uk[n++] = p[1]; -} - -static void s_encrypt(ulong32 *p, int N, const ulong32 *uk) -{ - int n, t; - for (t = n = 0; ; ) { - s_pi1(p); if (++n == N) break; - s_pi2(p, uk+t); if (++n == N) break; - s_pi3(p, uk+t); if (++n == N) break; - s_pi4(p, uk+t); if (++n == N) break; - t ^= 4; - } -} - -static void s_decrypt(ulong32 *p, int N, const ulong32 *uk) -{ - int n, t; - for (t = 4*(((N-1)>>2)&1), n = N; ; ) { - switch (n<=4 ? n : ((n-1)%4)+1) { - case 4: s_pi4(p, uk+t); --n; LTC_FALLTHROUGH; /* FALLTHROUGH */ - case 3: s_pi3(p, uk+t); --n; LTC_FALLTHROUGH; /* FALLTHROUGH */ - case 2: s_pi2(p, uk+t); --n; LTC_FALLTHROUGH; /* FALLTHROUGH */ - case 1: s_pi1(p); --n; break; - case 0: return; - } - t ^= 4; - } -} - -const struct ltc_cipher_descriptor multi2_desc = { - "multi2", - 22, - 40, 40, 8, 128, - &multi2_setup, - &multi2_ecb_encrypt, - &multi2_ecb_decrypt, - &multi2_test, - &multi2_done, - &multi2_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -int multi2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - ulong32 sk[8], dk[2]; - int x; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - - if (keylen != 40) return CRYPT_INVALID_KEYSIZE; - if (num_rounds == 0) num_rounds = 128; - - skey->multi2.N = num_rounds; - for (x = 0; x < 8; x++) { - LOAD32H(sk[x], key + x*4); - } - LOAD32H(dk[0], key + 32); - LOAD32H(dk[1], key + 36); - s_setup(dk, sk, skey->multi2.uk); - - zeromem(sk, sizeof(sk)); - zeromem(dk, sizeof(dk)); - return CRYPT_OK; -} - -/** - Encrypts a block of text with multi2 - @param pt The input plaintext (8 bytes) - @param ct The output ciphertext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int multi2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - ulong32 p[2]; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - LOAD32H(p[0], pt); - LOAD32H(p[1], pt+4); - s_encrypt(p, skey->multi2.N, skey->multi2.uk); - STORE32H(p[0], ct); - STORE32H(p[1], ct+4); - return CRYPT_OK; -} - -/** - Decrypts a block of text with multi2 - @param ct The input ciphertext (8 bytes) - @param pt The output plaintext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int multi2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - ulong32 p[2]; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - LOAD32H(p[0], ct); - LOAD32H(p[1], ct+4); - s_decrypt(p, skey->multi2.N, skey->multi2.uk); - STORE32H(p[0], pt); - STORE32H(p[1], pt+4); - return CRYPT_OK; -} - -/** - Performs a self-test of the multi2 block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ -int multi2_test(void) -{ - static const struct { - unsigned char key[40]; - unsigned char pt[8], ct[8]; - int rounds; - } tests[] = { -{ - { - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - - 0x01, 0x23, 0x45, 0x67, - 0x89, 0xAB, 0xCD, 0xEF - }, - { - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, - }, - { - 0xf8, 0x94, 0x40, 0x84, - 0x5e, 0x11, 0xcf, 0x89 - }, - 128, -}, -{ - { - 0x35, 0x91, 0x9d, 0x96, - 0x07, 0x02, 0xe2, 0xce, - 0x8d, 0x0b, 0x58, 0x3c, - 0xc9, 0xc8, 0x9d, 0x59, - 0xa2, 0xae, 0x96, 0x4e, - 0x87, 0x82, 0x45, 0xed, - 0x3f, 0x2e, 0x62, 0xd6, - 0x36, 0x35, 0xd0, 0x67, - - 0xb1, 0x27, 0xb9, 0x06, - 0xe7, 0x56, 0x22, 0x38, - }, - { - 0x1f, 0xb4, 0x60, 0x60, - 0xd0, 0xb3, 0x4f, 0xa5 - }, - { - 0xca, 0x84, 0xa9, 0x34, - 0x75, 0xc8, 0x60, 0xe5 - }, - 216, -} -}; - unsigned char buf[8]; - symmetric_key skey; - int err, x; - - for (x = 1; x < (int)LTC_ARRAY_SIZE(tests); x++) { - if ((err = multi2_setup(tests[x].key, 40, tests[x].rounds, &skey)) != CRYPT_OK) { - return err; - } - if ((err = multi2_ecb_encrypt(tests[x].pt, buf, &skey)) != CRYPT_OK) { - return err; - } - - if (ltc_compare_testvector(buf, 8, tests[x].ct, 8, "Multi2 Encrypt", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - - if ((err = multi2_ecb_decrypt(buf, buf, &skey)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf, 8, tests[x].pt, 8, "Multi2 Decrypt", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - - for (x = 128; x < 256; ++x) { - unsigned char ct[8]; - - if ((err = multi2_setup(tests[0].key, 40, x, &skey)) != CRYPT_OK) { - return err; - } - if ((err = multi2_ecb_encrypt(tests[0].pt, ct, &skey)) != CRYPT_OK) { - return err; - } - if ((err = multi2_ecb_decrypt(ct, buf, &skey)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf, 8, tests[0].pt, 8, "Multi2 Rounds", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - - return CRYPT_OK; -} - -/** Terminate the context - @param skey The scheduled key -*/ -void multi2_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int multi2_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize >= 40) { - *keysize = 40; - } else { - return CRYPT_INVALID_KEYSIZE; - } - return CRYPT_OK; -} - -#endif diff --git a/src/ciphers/noekeon.c b/src/ciphers/noekeon.c deleted file mode 100644 index b4e34ec1..00000000 --- a/src/ciphers/noekeon.c +++ /dev/null @@ -1,324 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/** - @file noekeon.c - Implementation of the Noekeon block cipher by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_NOEKEON - -const struct ltc_cipher_descriptor noekeon_desc = -{ - "noekeon", - 16, - 16, 16, 16, 16, - &noekeon_setup, - &noekeon_ecb_encrypt, - &noekeon_ecb_decrypt, - &noekeon_test, - &noekeon_done, - &noekeon_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -static const ulong32 RC[] = { - 0x00000080UL, 0x0000001bUL, 0x00000036UL, 0x0000006cUL, - 0x000000d8UL, 0x000000abUL, 0x0000004dUL, 0x0000009aUL, - 0x0000002fUL, 0x0000005eUL, 0x000000bcUL, 0x00000063UL, - 0x000000c6UL, 0x00000097UL, 0x00000035UL, 0x0000006aUL, - 0x000000d4UL -}; - -#define kTHETA(a, b, c, d) \ - temp = a^c; temp = temp ^ ROLc(temp, 8) ^ RORc(temp, 8); \ - b ^= temp; d ^= temp; \ - temp = b^d; temp = temp ^ ROLc(temp, 8) ^ RORc(temp, 8); \ - a ^= temp; c ^= temp; - -#define THETA(k, a, b, c, d) \ - temp = a^c; temp = temp ^ ROLc(temp, 8) ^ RORc(temp, 8); \ - b ^= temp ^ k[1]; d ^= temp ^ k[3]; \ - temp = b^d; temp = temp ^ ROLc(temp, 8) ^ RORc(temp, 8); \ - a ^= temp ^ k[0]; c ^= temp ^ k[2]; - -#define GAMMA(a, b, c, d) \ - b ^= ~(d|c); \ - a ^= c&b; \ - temp = d; d = a; a = temp;\ - c ^= a ^ b ^ d; \ - b ^= ~(d|c); \ - a ^= c&b; - -#define PI1(a, b, c, d) \ - b = ROLc(b, 1); c = ROLc(c, 5); d = ROLc(d, 2); - -#define PI2(a, b, c, d) \ - b = RORc(b, 1); c = RORc(c, 5); d = RORc(d, 2); - - /** - Initialize the Noekeon block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ -int noekeon_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - ulong32 temp; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - - if (keylen != 16) { - return CRYPT_INVALID_KEYSIZE; - } - - if (num_rounds != 16 && num_rounds != 0) { - return CRYPT_INVALID_ROUNDS; - } - - LOAD32H(skey->noekeon.K[0],&key[0]); - LOAD32H(skey->noekeon.K[1],&key[4]); - LOAD32H(skey->noekeon.K[2],&key[8]); - LOAD32H(skey->noekeon.K[3],&key[12]); - - LOAD32H(skey->noekeon.dK[0],&key[0]); - LOAD32H(skey->noekeon.dK[1],&key[4]); - LOAD32H(skey->noekeon.dK[2],&key[8]); - LOAD32H(skey->noekeon.dK[3],&key[12]); - - kTHETA(skey->noekeon.dK[0], skey->noekeon.dK[1], skey->noekeon.dK[2], skey->noekeon.dK[3]); - - return CRYPT_OK; -} - -/** - Encrypts a block of text with Noekeon - @param pt The input plaintext (16 bytes) - @param ct The output ciphertext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -#ifdef LTC_CLEAN_STACK -static int s_noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -#else -int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -#endif -{ - ulong32 a,b,c,d,temp; - int r; - - LTC_ARGCHK(skey != NULL); - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - - LOAD32H(a,&pt[0]); LOAD32H(b,&pt[4]); - LOAD32H(c,&pt[8]); LOAD32H(d,&pt[12]); - -#define ROUND(i) \ - a ^= RC[i]; \ - THETA(skey->noekeon.K, a,b,c,d); \ - PI1(a,b,c,d); \ - GAMMA(a,b,c,d); \ - PI2(a,b,c,d); - - for (r = 0; r < 16; ++r) { - ROUND(r); - } - -#undef ROUND - - a ^= RC[16]; - THETA(skey->noekeon.K, a, b, c, d); - - STORE32H(a,&ct[0]); STORE32H(b,&ct[4]); - STORE32H(c,&ct[8]); STORE32H(d,&ct[12]); - - return CRYPT_OK; -} - -#ifdef LTC_CLEAN_STACK -int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - int err = s_noekeon_ecb_encrypt(pt, ct, skey); - burn_stack(sizeof(ulong32) * 5 + sizeof(int)); - return err; -} -#endif - -/** - Decrypts a block of text with Noekeon - @param ct The input ciphertext (16 bytes) - @param pt The output plaintext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -#ifdef LTC_CLEAN_STACK -static int s_noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -#else -int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -#endif -{ - ulong32 a,b,c,d, temp; - int r; - - LTC_ARGCHK(skey != NULL); - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - - LOAD32H(a,&ct[0]); LOAD32H(b,&ct[4]); - LOAD32H(c,&ct[8]); LOAD32H(d,&ct[12]); - - -#define ROUND(i) \ - THETA(skey->noekeon.dK, a,b,c,d); \ - a ^= RC[i]; \ - PI1(a,b,c,d); \ - GAMMA(a,b,c,d); \ - PI2(a,b,c,d); - - for (r = 16; r > 0; --r) { - ROUND(r); - } - -#undef ROUND - - THETA(skey->noekeon.dK, a,b,c,d); - a ^= RC[0]; - STORE32H(a,&pt[0]); STORE32H(b, &pt[4]); - STORE32H(c,&pt[8]); STORE32H(d, &pt[12]); - return CRYPT_OK; -} - -#ifdef LTC_CLEAN_STACK -int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - int err = s_noekeon_ecb_decrypt(ct, pt, skey); - burn_stack(sizeof(ulong32) * 5 + sizeof(int)); - return err; -} -#endif - -/** - Performs a self-test of the Noekeon block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ -int noekeon_test(void) -{ - #ifndef LTC_TEST - return CRYPT_NOP; - #else - static const struct { - int keylen; - unsigned char key[16], pt[16], ct[16]; - } tests[] = { - { - 16, - { 0xAA, 0x3C, 0x8C, 0x86, 0xD9, 0x8B, 0xF8, 0xBE, 0x21, 0xE0, 0x36, 0x09, 0x78, 0xFB, 0xE4, 0x90 }, - { 0xE4, 0x96, 0x6C, 0xD3, 0x13, 0xA0, 0x6C, 0xAF, 0xD0, 0x23, 0xC9, 0xFD, 0x45, 0x32, 0x23, 0x16 }, - { 0xA6, 0xEC, 0xB8, 0xA8, 0x61, 0xFD, 0x62, 0xD9, 0x13, 0x02, 0xFE, 0x9E, 0x47, 0x01, 0x3F, 0xC3 } - }, - { - 16, - { 0xED, 0x43, 0xD1, 0x87, 0x21, 0x7E, 0xE0, 0x97, 0x3D, 0x76, 0xC3, 0x37, 0x2E, 0x7D, 0xAE, 0xD3 }, - { 0xE3, 0x38, 0x32, 0xCC, 0xF2, 0x2F, 0x2F, 0x0A, 0x4A, 0x8B, 0x8F, 0x18, 0x12, 0x20, 0x17, 0xD3 }, - { 0x94, 0xA5, 0xDF, 0xF5, 0xAE, 0x1C, 0xBB, 0x22, 0xAD, 0xEB, 0xA7, 0x0D, 0xB7, 0x82, 0x90, 0xA0 } - }, - { - 16, - { 0x6F, 0xDC, 0x23, 0x38, 0xF2, 0x10, 0xFB, 0xD3, 0xC1, 0x8C, 0x02, 0xF6, 0xB4, 0x6A, 0xD5, 0xA8 }, - { 0xDB, 0x29, 0xED, 0xB5, 0x5F, 0xB3, 0x60, 0x3A, 0x92, 0xA8, 0xEB, 0x9C, 0x6D, 0x9D, 0x3E, 0x8F }, - { 0x78, 0xF3, 0x6F, 0xF8, 0x9E, 0xBB, 0x8C, 0x6A, 0xE8, 0x10, 0xF7, 0x00, 0x22, 0x15, 0x30, 0x3D } - }, - { - 16, - { 0x2C, 0x0C, 0x02, 0xEF, 0x6B, 0xC4, 0xF2, 0x0B, 0x2E, 0xB9, 0xE0, 0xBF, 0xD9, 0x36, 0xC2, 0x4E }, - { 0x84, 0xE2, 0xFE, 0x64, 0xB1, 0xB9, 0xFE, 0x76, 0xA8, 0x3F, 0x45, 0xC7, 0x40, 0x7A, 0xAF, 0xEE }, - { 0x2A, 0x08, 0xD6, 0xA2, 0x1C, 0x63, 0x08, 0xB0, 0xF8, 0xBC, 0xB3, 0xA1, 0x66, 0xF7, 0xAE, 0xCF } - }, - { - 16, - { 0x6F, 0x30, 0xF8, 0x9F, 0xDA, 0x6E, 0xA0, 0x91, 0x04, 0x0F, 0x6C, 0x8B, 0x7D, 0xF7, 0x2A, 0x4B }, - { 0x65, 0xB6, 0xA6, 0xD0, 0x42, 0x14, 0x08, 0x60, 0x34, 0x8D, 0x37, 0x2F, 0x01, 0xF0, 0x46, 0xBE }, - { 0x66, 0xAC, 0x0B, 0x62, 0x1D, 0x68, 0x11, 0xF5, 0x27, 0xB1, 0x13, 0x5D, 0xF3, 0x2A, 0xE9, 0x18 } - }, - { - 16, - { 0xCA, 0xA4, 0x16, 0xB7, 0x1C, 0x92, 0x2E, 0xAD, 0xEB, 0xA7, 0xDB, 0x69, 0x92, 0xCB, 0x35, 0xEF }, - { 0x81, 0x6F, 0x8E, 0x4D, 0x96, 0xC6, 0xB3, 0x67, 0x83, 0xF5, 0x63, 0xC7, 0x20, 0x6D, 0x40, 0x23 }, - { 0x44, 0xF7, 0x63, 0x62, 0xF0, 0x43, 0xBB, 0x67, 0x4A, 0x75, 0x12, 0x42, 0x46, 0x29, 0x28, 0x19 } - }, - { - 16, - { 0x6B, 0xCF, 0x22, 0x2F, 0xE0, 0x1B, 0xB0, 0xAA, 0xD8, 0x3C, 0x91, 0x99, 0x18, 0xB2, 0x28, 0xE8 }, - { 0x7C, 0x37, 0xC7, 0xD0, 0xAC, 0x92, 0x29, 0xF1, 0x60, 0x82, 0x93, 0x89, 0xAA, 0x61, 0xAA, 0xA9 }, - { 0xE5, 0x89, 0x1B, 0xB3, 0xFE, 0x8B, 0x0C, 0xA1, 0xA6, 0xC7, 0xBE, 0x12, 0x73, 0x0F, 0xC1, 0x19 } - }, - { - 16, - { 0xE6, 0xD0, 0xF1, 0x03, 0x2E, 0xDE, 0x70, 0x8D, 0xD8, 0x9E, 0x36, 0x5C, 0x05, 0x52, 0xE7, 0x0D }, - { 0xE2, 0x42, 0xE7, 0x92, 0x0E, 0xF7, 0x82, 0xA2, 0xB8, 0x21, 0x8D, 0x26, 0xBA, 0x2D, 0xE6, 0x32 }, - { 0x1E, 0xDD, 0x75, 0x22, 0xB9, 0x36, 0x8A, 0x0F, 0x32, 0xFD, 0xD4, 0x48, 0x65, 0x12, 0x5A, 0x2F } - } - }; - symmetric_key key; - unsigned char tmp[2][16]; - int err, i, y; - - for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) { - zeromem(&key, sizeof(key)); - if ((err = noekeon_setup(tests[i].key, tests[i].keylen, 0, &key)) != CRYPT_OK) { - return err; - } - - noekeon_ecb_encrypt(tests[i].pt, tmp[0], &key); - noekeon_ecb_decrypt(tmp[0], tmp[1], &key); - if (ltc_compare_testvector(tmp[0], 16, tests[i].ct, 16, "Noekeon Encrypt", i) || - ltc_compare_testvector(tmp[1], 16, tests[i].pt, 16, "Noekeon Decrypt", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ - for (y = 0; y < 16; y++) tmp[0][y] = 0; - for (y = 0; y < 1000; y++) noekeon_ecb_encrypt(tmp[0], tmp[0], &key); - for (y = 0; y < 1000; y++) noekeon_ecb_decrypt(tmp[0], tmp[0], &key); - for (y = 0; y < 16; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; - } - return CRYPT_OK; - #endif -} - -/** Terminate the context - @param skey The scheduled key -*/ -void noekeon_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int noekeon_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize < 16) { - return CRYPT_INVALID_KEYSIZE; - } - *keysize = 16; - return CRYPT_OK; -} - -#undef kTHETA -#undef THETA -#undef GAMMA -#undef PI1 -#undef PI2 -#undef ROUND - -#endif - diff --git a/src/ciphers/rc2.c b/src/ciphers/rc2.c deleted file mode 100644 index 9a468c1d..00000000 --- a/src/ciphers/rc2.c +++ /dev/null @@ -1,408 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/**********************************************************************\ -* To commemorate the 1996 RSA Data Security Conference, the following * -* code is released into the public domain by its author. Prost! * -* * -* This cipher uses 16-bit words and little-endian byte ordering. * -* I wonder which processor it was optimized for? * -* * -* Thanks to CodeView, SoftIce, and D86 for helping bring this code to * -* the public. * -\**********************************************************************/ -#include "tomcrypt_private.h" - -/** - @file rc2.c - Implementation of RC2 with fixed effective key length of 64bits -*/ - -#ifdef LTC_RC2 - -const struct ltc_cipher_descriptor rc2_desc = { - "rc2", - 12, 8, 128, 8, 16, - &rc2_setup, - &rc2_ecb_encrypt, - &rc2_ecb_decrypt, - &rc2_test, - &rc2_done, - &rc2_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -/* 256-entry permutation table, probably derived somehow from pi */ -static const unsigned char permute[256] = { - 217,120,249,196, 25,221,181,237, 40,233,253,121, 74,160,216,157, - 198,126, 55,131, 43,118, 83,142, 98, 76,100,136, 68,139,251,162, - 23,154, 89,245,135,179, 79, 19, 97, 69,109,141, 9,129,125, 50, - 189,143, 64,235,134,183,123, 11,240,149, 33, 34, 92,107, 78,130, - 84,214,101,147,206, 96,178, 28,115, 86,192, 20,167,140,241,220, - 18,117,202, 31, 59,190,228,209, 66, 61,212, 48,163, 60,182, 38, - 111,191, 14,218, 70,105, 7, 87, 39,242, 29,155,188,148, 67, 3, - 248, 17,199,246,144,239, 62,231, 6,195,213, 47,200,102, 30,215, - 8,232,234,222,128, 82,238,247,132,170,114,172, 53, 77,106, 42, - 150, 26,210,113, 90, 21, 73,116, 75,159,208, 94, 4, 24,164,236, - 194,224, 65,110, 15, 81,203,204, 36,145,175, 80,161,244,112, 57, - 153,124, 58,133, 35,184,180,122,252, 2, 54, 91, 37, 85,151, 49, - 45, 93,250,152,227,138,146,174, 5,223, 41, 16,103,108,186,201, - 211, 0,230,207,225,158,168, 44, 99, 22, 1, 63, 88,226,137,169, - 13, 56, 52, 27,171, 51,255,176,187, 72, 12, 95,185,177,205, 46, - 197,243,219, 71,229,165,156,119, 10,166, 32,104,254,127,193,173 -}; - - /** - Initialize the RC2 block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param bits The effective key length in bits - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ -int rc2_setup_ex(const unsigned char *key, int keylen, int bits, int num_rounds, symmetric_key *skey) -{ - unsigned *xkey = skey->rc2.xkey; - unsigned char tmp[128]; - unsigned T8, TM; - int i; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - - if (keylen == 0 || keylen > 128 || bits > 1024) { - return CRYPT_INVALID_KEYSIZE; - } - if (bits == 0) { - bits = 1024; - } - - if (num_rounds != 0 && num_rounds != 16) { - return CRYPT_INVALID_ROUNDS; - } - - for (i = 0; i < keylen; i++) { - tmp[i] = key[i] & 255; - } - - /* Phase 1: Expand input key to 128 bytes */ - if (keylen < 128) { - for (i = keylen; i < 128; i++) { - tmp[i] = permute[(tmp[i - 1] + tmp[i - keylen]) & 255]; - } - } - - /* Phase 2 - reduce effective key size to "bits" */ - T8 = (unsigned)(bits+7)>>3; - TM = (255 >> (unsigned)(7 & -bits)); - tmp[128 - T8] = permute[tmp[128 - T8] & TM]; - for (i = 127 - T8; i >= 0; i--) { - tmp[i] = permute[tmp[i + 1] ^ tmp[i + T8]]; - } - - /* Phase 3 - copy to xkey in little-endian order */ - for (i = 0; i < 64; i++) { - xkey[i] = (unsigned)tmp[2*i] + ((unsigned)tmp[2*i+1] << 8); - } - -#ifdef LTC_CLEAN_STACK - zeromem(tmp, sizeof(tmp)); -#endif - - return CRYPT_OK; -} - -/** - Initialize the RC2 block cipher - - The effective key length is here always keylen * 8 - - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful -*/ -int rc2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - return rc2_setup_ex(key, keylen, keylen * 8, num_rounds, skey); -} - -/**********************************************************************\ -* Encrypt an 8-byte block of plaintext using the given key. * -\**********************************************************************/ -/** - Encrypts a block of text with RC2 - @param pt The input plaintext (8 bytes) - @param ct The output ciphertext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -#ifdef LTC_CLEAN_STACK -static int s_rc2_ecb_encrypt( const unsigned char *pt, - unsigned char *ct, - const symmetric_key *skey) -#else -int rc2_ecb_encrypt( const unsigned char *pt, - unsigned char *ct, - const symmetric_key *skey) -#endif -{ - const unsigned *xkey; - unsigned x76, x54, x32, x10, i; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - xkey = skey->rc2.xkey; - - x76 = ((unsigned)pt[7] << 8) + (unsigned)pt[6]; - x54 = ((unsigned)pt[5] << 8) + (unsigned)pt[4]; - x32 = ((unsigned)pt[3] << 8) + (unsigned)pt[2]; - x10 = ((unsigned)pt[1] << 8) + (unsigned)pt[0]; - - for (i = 0; i < 16; i++) { - x10 = (x10 + (x32 & ~x76) + (x54 & x76) + xkey[4*i+0]) & 0xFFFF; - x10 = ((x10 << 1) | (x10 >> 15)); - - x32 = (x32 + (x54 & ~x10) + (x76 & x10) + xkey[4*i+1]) & 0xFFFF; - x32 = ((x32 << 2) | (x32 >> 14)); - - x54 = (x54 + (x76 & ~x32) + (x10 & x32) + xkey[4*i+2]) & 0xFFFF; - x54 = ((x54 << 3) | (x54 >> 13)); - - x76 = (x76 + (x10 & ~x54) + (x32 & x54) + xkey[4*i+3]) & 0xFFFF; - x76 = ((x76 << 5) | (x76 >> 11)); - - if (i == 4 || i == 10) { - x10 = (x10 + xkey[x76 & 63]) & 0xFFFF; - x32 = (x32 + xkey[x10 & 63]) & 0xFFFF; - x54 = (x54 + xkey[x32 & 63]) & 0xFFFF; - x76 = (x76 + xkey[x54 & 63]) & 0xFFFF; - } - } - - ct[0] = (unsigned char)x10; - ct[1] = (unsigned char)(x10 >> 8); - ct[2] = (unsigned char)x32; - ct[3] = (unsigned char)(x32 >> 8); - ct[4] = (unsigned char)x54; - ct[5] = (unsigned char)(x54 >> 8); - ct[6] = (unsigned char)x76; - ct[7] = (unsigned char)(x76 >> 8); - - return CRYPT_OK; -} - -#ifdef LTC_CLEAN_STACK -int rc2_ecb_encrypt( const unsigned char *pt, - unsigned char *ct, - const symmetric_key *skey) -{ - int err = s_rc2_ecb_encrypt(pt, ct, skey); - burn_stack(sizeof(unsigned *) + sizeof(unsigned) * 5); - return err; -} -#endif - -/**********************************************************************\ -* Decrypt an 8-byte block of ciphertext using the given key. * -\**********************************************************************/ -/** - Decrypts a block of text with RC2 - @param ct The input ciphertext (8 bytes) - @param pt The output plaintext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -#ifdef LTC_CLEAN_STACK -static int s_rc2_ecb_decrypt( const unsigned char *ct, - unsigned char *pt, - const symmetric_key *skey) -#else -int rc2_ecb_decrypt( const unsigned char *ct, - unsigned char *pt, - const symmetric_key *skey) -#endif -{ - unsigned x76, x54, x32, x10; - const unsigned *xkey; - int i; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - xkey = skey->rc2.xkey; - - x76 = ((unsigned)ct[7] << 8) + (unsigned)ct[6]; - x54 = ((unsigned)ct[5] << 8) + (unsigned)ct[4]; - x32 = ((unsigned)ct[3] << 8) + (unsigned)ct[2]; - x10 = ((unsigned)ct[1] << 8) + (unsigned)ct[0]; - - for (i = 15; i >= 0; i--) { - if (i == 4 || i == 10) { - x76 = (x76 - xkey[x54 & 63]) & 0xFFFF; - x54 = (x54 - xkey[x32 & 63]) & 0xFFFF; - x32 = (x32 - xkey[x10 & 63]) & 0xFFFF; - x10 = (x10 - xkey[x76 & 63]) & 0xFFFF; - } - - x76 = ((x76 << 11) | (x76 >> 5)); - x76 = (x76 - ((x10 & ~x54) + (x32 & x54) + xkey[4*i+3])) & 0xFFFF; - - x54 = ((x54 << 13) | (x54 >> 3)); - x54 = (x54 - ((x76 & ~x32) + (x10 & x32) + xkey[4*i+2])) & 0xFFFF; - - x32 = ((x32 << 14) | (x32 >> 2)); - x32 = (x32 - ((x54 & ~x10) + (x76 & x10) + xkey[4*i+1])) & 0xFFFF; - - x10 = ((x10 << 15) | (x10 >> 1)); - x10 = (x10 - ((x32 & ~x76) + (x54 & x76) + xkey[4*i+0])) & 0xFFFF; - } - - pt[0] = (unsigned char)x10; - pt[1] = (unsigned char)(x10 >> 8); - pt[2] = (unsigned char)x32; - pt[3] = (unsigned char)(x32 >> 8); - pt[4] = (unsigned char)x54; - pt[5] = (unsigned char)(x54 >> 8); - pt[6] = (unsigned char)x76; - pt[7] = (unsigned char)(x76 >> 8); - - return CRYPT_OK; -} - -#ifdef LTC_CLEAN_STACK -int rc2_ecb_decrypt( const unsigned char *ct, - unsigned char *pt, - const symmetric_key *skey) -{ - int err = s_rc2_ecb_decrypt(ct, pt, skey); - burn_stack(sizeof(unsigned *) + sizeof(unsigned) * 4 + sizeof(int)); - return err; -} -#endif - -/** - Performs a self-test of the RC2 block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ -int rc2_test(void) -{ - #ifndef LTC_TEST - return CRYPT_NOP; - #else - static const struct { - int keylen, bits; - unsigned char key[16], pt[8], ct[8]; - } tests[] = { - - { 8, 63, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xeb, 0xb7, 0x73, 0xf9, 0x93, 0x27, 0x8e, 0xff } - }, - { 8, 64, - { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, - { 0x27, 0x8b, 0x27, 0xe4, 0x2e, 0x2f, 0x0d, 0x49 } - }, - { 8, 64, - { 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, - { 0x30, 0x64, 0x9e, 0xdf, 0x9b, 0xe7, 0xd2, 0xc2 } - }, - { 1, 64, - { 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x61, 0xa8, 0xa2, 0x44, 0xad, 0xac, 0xcc, 0xf0 } - }, - { 7, 64, - { 0x88, 0xbc, 0xa9, 0x0e, 0x90, 0x87, 0x5a, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x6c, 0xcf, 0x43, 0x08, 0x97, 0x4c, 0x26, 0x7f } - }, - { 16, 64, - { 0x88, 0xbc, 0xa9, 0x0e, 0x90, 0x87, 0x5a, 0x7f, - 0x0f, 0x79, 0xc3, 0x84, 0x62, 0x7b, 0xaf, 0xb2 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x1a, 0x80, 0x7d, 0x27, 0x2b, 0xbe, 0x5d, 0xb1 } - }, - { 16, 128, - { 0x88, 0xbc, 0xa9, 0x0e, 0x90, 0x87, 0x5a, 0x7f, - 0x0f, 0x79, 0xc3, 0x84, 0x62, 0x7b, 0xaf, 0xb2 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x22, 0x69, 0x55, 0x2a, 0xb0, 0xf8, 0x5c, 0xa6 } - } - }; - int x, y, err; - symmetric_key skey; - unsigned char tmp[2][8]; - - for (x = 0; x < (int)(sizeof(tests) / sizeof(tests[0])); x++) { - zeromem(tmp, sizeof(tmp)); - if (tests[x].bits == (tests[x].keylen * 8)) { - if ((err = rc2_setup(tests[x].key, tests[x].keylen, 0, &skey)) != CRYPT_OK) { - return err; - } - } - else { - if ((err = rc2_setup_ex(tests[x].key, tests[x].keylen, tests[x].bits, 0, &skey)) != CRYPT_OK) { - return err; - } - } - - rc2_ecb_encrypt(tests[x].pt, tmp[0], &skey); - rc2_ecb_decrypt(tmp[0], tmp[1], &skey); - - if (ltc_compare_testvector(tmp[0], 8, tests[x].ct, 8, "RC2 CT", x) || - ltc_compare_testvector(tmp[1], 8, tests[x].pt, 8, "RC2 PT", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ - for (y = 0; y < 8; y++) tmp[0][y] = 0; - for (y = 0; y < 1000; y++) rc2_ecb_encrypt(tmp[0], tmp[0], &skey); - for (y = 0; y < 1000; y++) rc2_ecb_decrypt(tmp[0], tmp[0], &skey); - for (y = 0; y < 8; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; - } - return CRYPT_OK; - #endif -} - -/** Terminate the context - @param skey The scheduled key -*/ -void rc2_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int rc2_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize < 1) { - return CRYPT_INVALID_KEYSIZE; - } - if (*keysize > 128) { - *keysize = 128; - } - return CRYPT_OK; -} - -#endif - - - diff --git a/src/ciphers/serpent.c b/src/ciphers/serpent.c deleted file mode 100644 index 8b8d1f8e..00000000 --- a/src/ciphers/serpent.c +++ /dev/null @@ -1,759 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* Based on serpent.cpp - originally written and placed in the public domain by Wei Dai - https://github.com/weidai11/cryptopp/blob/master/serpent.cpp - - On 2017-10-16 wikipedia says: - "The Serpent cipher algorithm is in the public domain and has not been patented." - https://en.wikipedia.org/wiki/Serpent_(cipher) - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SERPENT - -const struct ltc_cipher_descriptor serpent_desc = { - "serpent", - 25, /* cipher_ID */ - 16, 32, 16, 32, /* min_key_len, max_key_len, block_len, default_rounds */ - &serpent_setup, - &serpent_ecb_encrypt, - &serpent_ecb_decrypt, - &serpent_test, - &serpent_done, - &serpent_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -/* linear transformation */ -#define s_lt(i,a,b,c,d,e) { \ - a = ROLc(a, 13); \ - c = ROLc(c, 3); \ - d = ROLc(d ^ c ^ (a << 3), 7); \ - b = ROLc(b ^ a ^ c, 1); \ - a = ROLc(a ^ b ^ d, 5); \ - c = ROLc(c ^ d ^ (b << 7), 22); \ - } - -/* inverse linear transformation */ -#define s_ilt(i,a,b,c,d,e) { \ - c = RORc(c, 22); \ - a = RORc(a, 5); \ - c ^= d ^ (b << 7); \ - a ^= b ^ d; \ - b = RORc(b, 1); \ - d = RORc(d, 7) ^ c ^ (a << 3); \ - b ^= a ^ c; \ - c = RORc(c, 3); \ - a = RORc(a, 13); \ - } - -/* order of output from S-box functions */ -#define s_beforeS0(f) f(0,a,b,c,d,e) -#define s_afterS0(f) f(1,b,e,c,a,d) -#define s_afterS1(f) f(2,c,b,a,e,d) -#define s_afterS2(f) f(3,a,e,b,d,c) -#define s_afterS3(f) f(4,e,b,d,c,a) -#define s_afterS4(f) f(5,b,a,e,c,d) -#define s_afterS5(f) f(6,a,c,b,e,d) -#define s_afterS6(f) f(7,a,c,d,b,e) -#define s_afterS7(f) f(8,d,e,b,a,c) - -/* order of output from inverse S-box functions */ -#define s_beforeI7(f) f(8,a,b,c,d,e) -#define s_afterI7(f) f(7,d,a,b,e,c) -#define s_afterI6(f) f(6,a,b,c,e,d) -#define s_afterI5(f) f(5,b,d,e,c,a) -#define s_afterI4(f) f(4,b,c,e,a,d) -#define s_afterI3(f) f(3,a,b,e,c,d) -#define s_afterI2(f) f(2,b,d,e,c,a) -#define s_afterI1(f) f(1,a,b,c,e,d) -#define s_afterI0(f) f(0,a,d,b,e,c) - -/* The instruction sequences for the S-box functions - * come from Dag Arne Osvik's paper "Speeding up Serpent". - */ - -#define s_s0(i, r0, r1, r2, r3, r4) { \ - r3 ^= r0; \ - r4 = r1; \ - r1 &= r3; \ - r4 ^= r2; \ - r1 ^= r0; \ - r0 |= r3; \ - r0 ^= r4; \ - r4 ^= r3; \ - r3 ^= r2; \ - r2 |= r1; \ - r2 ^= r4; \ - r4 = ~r4; \ - r4 |= r1; \ - r1 ^= r3; \ - r1 ^= r4; \ - r3 |= r0; \ - r1 ^= r3; \ - r4 ^= r3; \ -} - -#define s_i0(i, r0, r1, r2, r3, r4) { \ - r2 = ~r2; \ - r4 = r1; \ - r1 |= r0; \ - r4 = ~r4; \ - r1 ^= r2; \ - r2 |= r4; \ - r1 ^= r3; \ - r0 ^= r4; \ - r2 ^= r0; \ - r0 &= r3; \ - r4 ^= r0; \ - r0 |= r1; \ - r0 ^= r2; \ - r3 ^= r4; \ - r2 ^= r1; \ - r3 ^= r0; \ - r3 ^= r1; \ - r2 &= r3; \ - r4 ^= r2; \ -} - -#define s_s1(i, r0, r1, r2, r3, r4) { \ - r0 = ~r0; \ - r2 = ~r2; \ - r4 = r0; \ - r0 &= r1; \ - r2 ^= r0; \ - r0 |= r3; \ - r3 ^= r2; \ - r1 ^= r0; \ - r0 ^= r4; \ - r4 |= r1; \ - r1 ^= r3; \ - r2 |= r0; \ - r2 &= r4; \ - r0 ^= r1; \ - r1 &= r2; \ - r1 ^= r0; \ - r0 &= r2; \ - r0 ^= r4; \ -} - -#define s_i1(i, r0, r1, r2, r3, r4) { \ - r4 = r1; \ - r1 ^= r3; \ - r3 &= r1; \ - r4 ^= r2; \ - r3 ^= r0; \ - r0 |= r1; \ - r2 ^= r3; \ - r0 ^= r4; \ - r0 |= r2; \ - r1 ^= r3; \ - r0 ^= r1; \ - r1 |= r3; \ - r1 ^= r0; \ - r4 = ~r4; \ - r4 ^= r1; \ - r1 |= r0; \ - r1 ^= r0; \ - r1 |= r4; \ - r3 ^= r1; \ -} - -#define s_s2(i, r0, r1, r2, r3, r4) { \ - r4 = r0; \ - r0 &= r2; \ - r0 ^= r3; \ - r2 ^= r1; \ - r2 ^= r0; \ - r3 |= r4; \ - r3 ^= r1; \ - r4 ^= r2; \ - r1 = r3; \ - r3 |= r4; \ - r3 ^= r0; \ - r0 &= r1; \ - r4 ^= r0; \ - r1 ^= r3; \ - r1 ^= r4; \ - r4 = ~r4; \ -} - -#define s_i2(i, r0, r1, r2, r3, r4) { \ - r2 ^= r3; \ - r3 ^= r0; \ - r4 = r3; \ - r3 &= r2; \ - r3 ^= r1; \ - r1 |= r2; \ - r1 ^= r4; \ - r4 &= r3; \ - r2 ^= r3; \ - r4 &= r0; \ - r4 ^= r2; \ - r2 &= r1; \ - r2 |= r0; \ - r3 = ~r3; \ - r2 ^= r3; \ - r0 ^= r3; \ - r0 &= r1; \ - r3 ^= r4; \ - r3 ^= r0; \ -} - -#define s_s3(i, r0, r1, r2, r3, r4) { \ - r4 = r0; \ - r0 |= r3; \ - r3 ^= r1; \ - r1 &= r4; \ - r4 ^= r2; \ - r2 ^= r3; \ - r3 &= r0; \ - r4 |= r1; \ - r3 ^= r4; \ - r0 ^= r1; \ - r4 &= r0; \ - r1 ^= r3; \ - r4 ^= r2; \ - r1 |= r0; \ - r1 ^= r2; \ - r0 ^= r3; \ - r2 = r1; \ - r1 |= r3; \ - r1 ^= r0; \ -} - -#define s_i3(i, r0, r1, r2, r3, r4) { \ - r4 = r2; \ - r2 ^= r1; \ - r1 &= r2; \ - r1 ^= r0; \ - r0 &= r4; \ - r4 ^= r3; \ - r3 |= r1; \ - r3 ^= r2; \ - r0 ^= r4; \ - r2 ^= r0; \ - r0 |= r3; \ - r0 ^= r1; \ - r4 ^= r2; \ - r2 &= r3; \ - r1 |= r3; \ - r1 ^= r2; \ - r4 ^= r0; \ - r2 ^= r4; \ -} - -#define s_s4(i, r0, r1, r2, r3, r4) { \ - r1 ^= r3; \ - r3 = ~r3; \ - r2 ^= r3; \ - r3 ^= r0; \ - r4 = r1; \ - r1 &= r3; \ - r1 ^= r2; \ - r4 ^= r3; \ - r0 ^= r4; \ - r2 &= r4; \ - r2 ^= r0; \ - r0 &= r1; \ - r3 ^= r0; \ - r4 |= r1; \ - r4 ^= r0; \ - r0 |= r3; \ - r0 ^= r2; \ - r2 &= r3; \ - r0 = ~r0; \ - r4 ^= r2; \ -} - -#define s_i4(i, r0, r1, r2, r3, r4) { \ - r4 = r2; \ - r2 &= r3; \ - r2 ^= r1; \ - r1 |= r3; \ - r1 &= r0; \ - r4 ^= r2; \ - r4 ^= r1; \ - r1 &= r2; \ - r0 = ~r0; \ - r3 ^= r4; \ - r1 ^= r3; \ - r3 &= r0; \ - r3 ^= r2; \ - r0 ^= r1; \ - r2 &= r0; \ - r3 ^= r0; \ - r2 ^= r4; \ - r2 |= r3; \ - r3 ^= r0; \ - r2 ^= r1; \ -} - -#define s_s5(i, r0, r1, r2, r3, r4) { \ - r0 ^= r1; \ - r1 ^= r3; \ - r3 = ~r3; \ - r4 = r1; \ - r1 &= r0; \ - r2 ^= r3; \ - r1 ^= r2; \ - r2 |= r4; \ - r4 ^= r3; \ - r3 &= r1; \ - r3 ^= r0; \ - r4 ^= r1; \ - r4 ^= r2; \ - r2 ^= r0; \ - r0 &= r3; \ - r2 = ~r2; \ - r0 ^= r4; \ - r4 |= r3; \ - r2 ^= r4; \ -} - -#define s_i5(i, r0, r1, r2, r3, r4) { \ - r1 = ~r1; \ - r4 = r3; \ - r2 ^= r1; \ - r3 |= r0; \ - r3 ^= r2; \ - r2 |= r1; \ - r2 &= r0; \ - r4 ^= r3; \ - r2 ^= r4; \ - r4 |= r0; \ - r4 ^= r1; \ - r1 &= r2; \ - r1 ^= r3; \ - r4 ^= r2; \ - r3 &= r4; \ - r4 ^= r1; \ - r3 ^= r0; \ - r3 ^= r4; \ - r4 = ~r4; \ -} - -#define s_s6(i, r0, r1, r2, r3, r4) { \ - r2 = ~r2; \ - r4 = r3; \ - r3 &= r0; \ - r0 ^= r4; \ - r3 ^= r2; \ - r2 |= r4; \ - r1 ^= r3; \ - r2 ^= r0; \ - r0 |= r1; \ - r2 ^= r1; \ - r4 ^= r0; \ - r0 |= r3; \ - r0 ^= r2; \ - r4 ^= r3; \ - r4 ^= r0; \ - r3 = ~r3; \ - r2 &= r4; \ - r2 ^= r3; \ -} - -#define s_i6(i, r0, r1, r2, r3, r4) { \ - r0 ^= r2; \ - r4 = r2; \ - r2 &= r0; \ - r4 ^= r3; \ - r2 = ~r2; \ - r3 ^= r1; \ - r2 ^= r3; \ - r4 |= r0; \ - r0 ^= r2; \ - r3 ^= r4; \ - r4 ^= r1; \ - r1 &= r3; \ - r1 ^= r0; \ - r0 ^= r3; \ - r0 |= r2; \ - r3 ^= r1; \ - r4 ^= r0; \ -} - -#define s_s7(i, r0, r1, r2, r3, r4) { \ - r4 = r2; \ - r2 &= r1; \ - r2 ^= r3; \ - r3 &= r1; \ - r4 ^= r2; \ - r2 ^= r1; \ - r1 ^= r0; \ - r0 |= r4; \ - r0 ^= r2; \ - r3 ^= r1; \ - r2 ^= r3; \ - r3 &= r0; \ - r3 ^= r4; \ - r4 ^= r2; \ - r2 &= r0; \ - r4 = ~r4; \ - r2 ^= r4; \ - r4 &= r0; \ - r1 ^= r3; \ - r4 ^= r1; \ -} - -#define s_i7(i, r0, r1, r2, r3, r4) { \ - r4 = r2; \ - r2 ^= r0; \ - r0 &= r3; \ - r2 = ~r2; \ - r4 |= r3; \ - r3 ^= r1; \ - r1 |= r0; \ - r0 ^= r2; \ - r2 &= r4; \ - r1 ^= r2; \ - r2 ^= r0; \ - r0 |= r2; \ - r3 &= r4; \ - r0 ^= r3; \ - r4 ^= r1; \ - r3 ^= r4; \ - r4 |= r0; \ - r3 ^= r2; \ - r4 ^= r2; \ -} - -/* key xor */ -#define s_kx(r, a, b, c, d, e) { \ - a ^= k[4 * r + 0]; \ - b ^= k[4 * r + 1]; \ - c ^= k[4 * r + 2]; \ - d ^= k[4 * r + 3]; \ -} - -#define s_lk(r, a, b, c, d, e) { \ - a = k[(8-r)*4 + 0]; \ - b = k[(8-r)*4 + 1]; \ - c = k[(8-r)*4 + 2]; \ - d = k[(8-r)*4 + 3]; \ -} - -#define s_sk(r, a, b, c, d, e) { \ - k[(8-r)*4 + 4] = a; \ - k[(8-r)*4 + 5] = b; \ - k[(8-r)*4 + 6] = c; \ - k[(8-r)*4 + 7] = d; \ -} - -#define s_setup_key s_serpent_setup_key -static int s_setup_key(const unsigned char *key, int keylen, int rounds, ulong32 *k) -{ - int i; - ulong32 t; - ulong32 k0[8] = { 0 }; /* zero-initialize */ - ulong32 a, b, c, d, e; - - for (i = 0; i < 8 && i < keylen/4; ++i) { - LOAD32L(k0[i], key + i * 4); - } - if (keylen < 32) { - k0[keylen/4] |= (ulong32)1 << ((keylen%4)*8); - } - - t = k0[7]; - for (i = 0; i < 8; ++i) { - k[i] = k0[i] = t = ROLc(k0[i] ^ k0[(i+3)%8] ^ k0[(i+5)%8] ^ t ^ 0x9e3779b9 ^ i, 11); - } - for (i = 8; i < 4*(rounds+1); ++i) { - k[i] = t = ROLc(k[i-8] ^ k[i-5] ^ k[i-3] ^ t ^ 0x9e3779b9 ^ i, 11); - } - k -= 20; - - for (i = 0; i < rounds/8; i++) { - s_afterS2(s_lk); s_afterS2(s_s3); s_afterS3(s_sk); - s_afterS1(s_lk); s_afterS1(s_s2); s_afterS2(s_sk); - s_afterS0(s_lk); s_afterS0(s_s1); s_afterS1(s_sk); - s_beforeS0(s_lk); s_beforeS0(s_s0); s_afterS0(s_sk); - k += 8*4; - s_afterS6(s_lk); s_afterS6(s_s7); s_afterS7(s_sk); - s_afterS5(s_lk); s_afterS5(s_s6); s_afterS6(s_sk); - s_afterS4(s_lk); s_afterS4(s_s5); s_afterS5(s_sk); - s_afterS3(s_lk); s_afterS3(s_s4); s_afterS4(s_sk); - } - s_afterS2(s_lk); s_afterS2(s_s3); s_afterS3(s_sk); - - return CRYPT_OK; -} - -static int s_enc_block(const unsigned char *in, unsigned char *out, const ulong32 *k) -{ - ulong32 a, b, c, d, e; - unsigned int i = 1; - - LOAD32L(a, in + 0); - LOAD32L(b, in + 4); - LOAD32L(c, in + 8); - LOAD32L(d, in + 12); - - do { - s_beforeS0(s_kx); s_beforeS0(s_s0); s_afterS0(s_lt); - s_afterS0(s_kx); s_afterS0(s_s1); s_afterS1(s_lt); - s_afterS1(s_kx); s_afterS1(s_s2); s_afterS2(s_lt); - s_afterS2(s_kx); s_afterS2(s_s3); s_afterS3(s_lt); - s_afterS3(s_kx); s_afterS3(s_s4); s_afterS4(s_lt); - s_afterS4(s_kx); s_afterS4(s_s5); s_afterS5(s_lt); - s_afterS5(s_kx); s_afterS5(s_s6); s_afterS6(s_lt); - s_afterS6(s_kx); s_afterS6(s_s7); - - if (i == 4) break; - - ++i; - c = b; - b = e; - e = d; - d = a; - a = e; - k += 32; - s_beforeS0(s_lt); - } while (1); - - s_afterS7(s_kx); - - STORE32L(d, out + 0); - STORE32L(e, out + 4); - STORE32L(b, out + 8); - STORE32L(a, out + 12); - - return CRYPT_OK; -} - -static int s_dec_block(const unsigned char *in, unsigned char *out, const ulong32 *k) -{ - ulong32 a, b, c, d, e; - unsigned int i; - - LOAD32L(a, in + 0); - LOAD32L(b, in + 4); - LOAD32L(c, in + 8); - LOAD32L(d, in + 12); - e = 0; LTC_UNUSED_PARAM(e); /* avoid scan-build warning */ - i = 4; - k += 96; - - s_beforeI7(s_kx); - goto start; - - do { - c = b; - b = d; - d = e; - k -= 32; - s_beforeI7(s_ilt); -start: - s_beforeI7(s_i7); s_afterI7(s_kx); - s_afterI7(s_ilt); s_afterI7(s_i6); s_afterI6(s_kx); - s_afterI6(s_ilt); s_afterI6(s_i5); s_afterI5(s_kx); - s_afterI5(s_ilt); s_afterI5(s_i4); s_afterI4(s_kx); - s_afterI4(s_ilt); s_afterI4(s_i3); s_afterI3(s_kx); - s_afterI3(s_ilt); s_afterI3(s_i2); s_afterI2(s_kx); - s_afterI2(s_ilt); s_afterI2(s_i1); s_afterI1(s_kx); - s_afterI1(s_ilt); s_afterI1(s_i0); s_afterI0(s_kx); - } while (--i != 0); - - STORE32L(a, out + 0); - STORE32L(d, out + 4); - STORE32L(b, out + 8); - STORE32L(e, out + 12); - - return CRYPT_OK; -} - -int serpent_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - - if (num_rounds != 0 && num_rounds != 32) return CRYPT_INVALID_ROUNDS; - if (keylen != 16 && keylen != 24 && keylen != 32) return CRYPT_INVALID_KEYSIZE; - - err = s_setup_key(key, keylen, 32, skey->serpent.k); -#ifdef LTC_CLEAN_STACK - burn_stack(sizeof(ulong32) * 14 + sizeof(int)); -#endif - return err; -} - -int serpent_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - int err = s_enc_block(pt, ct, skey->serpent.k); -#ifdef LTC_CLEAN_STACK - burn_stack(sizeof(ulong32) * 5 + sizeof(int)); -#endif - return err; -} - -int serpent_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - int err = s_dec_block(ct, pt, skey->serpent.k); -#ifdef LTC_CLEAN_STACK - burn_stack(sizeof(ulong32) * 5 + sizeof(int)); -#endif - return err; -} - -void serpent_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - -int serpent_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - - if (*keysize >= 32) { *keysize = 32; } - else if (*keysize >= 24) { *keysize = 24; } - else if (*keysize >= 16) { *keysize = 16; } - else return CRYPT_INVALID_KEYSIZE; - return CRYPT_OK; -} - -int serpent_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - unsigned char key[32]; - int keylen; - unsigned char pt[16], ct[16]; - } tests[] = { - { - /* key */ {0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* keylen */ 32, - /* pt */ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* ct */ {0xA2,0x23,0xAA,0x12,0x88,0x46,0x3C,0x0E,0x2B,0xE3,0x8E,0xBD,0x82,0x56,0x16,0xC0} - }, - { - /* key */ {0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* keylen */ 32, - /* pt */ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* ct */ {0xEA,0xE1,0xD4,0x05,0x57,0x01,0x74,0xDF,0x7D,0xF2,0xF9,0x96,0x6D,0x50,0x91,0x59} - }, - { - /* key */ {0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* keylen */ 32, - /* pt */ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* ct */ {0x65,0xF3,0x76,0x84,0x47,0x1E,0x92,0x1D,0xC8,0xA3,0x0F,0x45,0xB4,0x3C,0x44,0x99} - }, - { - /* key */ {0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* keylen */ 24, - /* pt */ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* ct */ {0x9E,0x27,0x4E,0xAD,0x9B,0x73,0x7B,0xB2,0x1E,0xFC,0xFC,0xA5,0x48,0x60,0x26,0x89} - }, - { - /* key */ {0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* keylen */ 24, - /* pt */ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* ct */ {0x92,0xFC,0x8E,0x51,0x03,0x99,0xE4,0x6A,0x04,0x1B,0xF3,0x65,0xE7,0xB3,0xAE,0x82} - }, - { - /* key */ {0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* keylen */ 24, - /* pt */ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* ct */ {0x5E,0x0D,0xA3,0x86,0xC4,0x6A,0xD4,0x93,0xDE,0xA2,0x03,0xFD,0xC6,0xF5,0x7D,0x70} - }, - { - /* key */ {0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* keylen */ 16, - /* pt */ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* ct */ {0x26,0x4E,0x54,0x81,0xEF,0xF4,0x2A,0x46,0x06,0xAB,0xDA,0x06,0xC0,0xBF,0xDA,0x3D} - }, - { - /* key */ {0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* keylen */ 16, - /* pt */ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* ct */ {0x4A,0x23,0x1B,0x3B,0xC7,0x27,0x99,0x34,0x07,0xAC,0x6E,0xC8,0x35,0x0E,0x85,0x24} - }, - { - /* key */ {0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* keylen */ 16, - /* pt */ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, - /* ct */ {0xE0,0x32,0x69,0xF9,0xE9,0xFD,0x85,0x3C,0x7D,0x81,0x56,0xDF,0x14,0xB9,0x8D,0x56} - } - }; - - unsigned char buf[2][16]; - symmetric_key key; - int err, x; - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { - if ((err = serpent_setup(tests[x].key, tests[x].keylen, 0, &key)) != CRYPT_OK) { - return err; - } - if ((err = serpent_ecb_encrypt(tests[x].pt, buf[0], &key)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf[0], 16, tests[x].ct, 16, "SERPENT Encrypt", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - if ((err = serpent_ecb_decrypt(tests[x].ct, buf[1], &key)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf[1], 16, tests[x].pt, 16, "SERPENT Decrypt", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - - return CRYPT_OK; -#endif -} - -#undef s_lt -#undef s_ilt -#undef s_beforeS0 -#undef s_afterS0 -#undef s_afterS1 -#undef s_afterS2 -#undef s_afterS3 -#undef s_afterS4 -#undef s_afterS5 -#undef s_afterS6 -#undef s_afterS7 -#undef s_beforeI7 -#undef s_afterI7 -#undef s_afterI6 -#undef s_afterI5 -#undef s_afterI4 -#undef s_afterI3 -#undef s_afterI2 -#undef s_afterI1 -#undef s_afterI0 -#undef s_s0 -#undef s_i0 -#undef s_s1 -#undef s_i1 -#undef s_s2 -#undef s_i2 -#undef s_s3 -#undef s_i3 -#undef s_s4 -#undef s_i4 -#undef s_s5 -#undef s_i5 -#undef s_s6 -#undef s_i6 -#undef s_s7 -#undef s_i7 -#undef s_kx -#undef s_lk -#undef s_sk -#undef s_setup_key - -#endif diff --git a/src/ciphers/sm4.c b/src/ciphers/sm4.c deleted file mode 100644 index 355be68a..00000000 --- a/src/ciphers/sm4.c +++ /dev/null @@ -1,377 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @brief SM4 block cipher algorithm - @date Oct 2018 - @author Chao Wei - - SM4 (formerly SMS4) is a block cipher used in the Chinese National - Standard for Wireless LAN WAPI (Wired Authentication and Privacy - Infrastructure). - --from wikipedia: - https://en.wikipedia.org/wiki/SM4_(cipher) - - This implimentation follows Chinese National Standard - GM/T 0002-2012 - */ -#include "tomcrypt_private.h" - -#ifdef LTC_SM4 - -/*porting to libtomcrypt*/ -/*char always 8bits long*/ -typedef unsigned char sm4_u8_t; -typedef ulong32 sm4_u32_t; - -/* - * S-box defined in section 6.2 - * (1) Nonlinear transformation - */ -static const sm4_u8_t sm4_sbox_table[16][16] = { - {0xd6, 0x90, 0xe9, 0xfe, 0xcc, 0xe1, 0x3d, 0xb7, - 0x16, 0xb6, 0x14, 0xc2, 0x28, 0xfb, 0x2c, 0x05}, - {0x2b, 0x67, 0x9a, 0x76, 0x2a, 0xbe, 0x04, 0xc3, - 0xaa, 0x44, 0x13, 0x26, 0x49, 0x86, 0x06, 0x99}, - {0x9c, 0x42, 0x50, 0xf4, 0x91, 0xef, 0x98, 0x7a, - 0x33, 0x54, 0x0b, 0x43, 0xed, 0xcf, 0xac, 0x62}, - {0xe4, 0xb3, 0x1c, 0xa9, 0xc9, 0x08, 0xe8, 0x95, - 0x80, 0xdf, 0x94, 0xfa, 0x75, 0x8f, 0x3f, 0xa6}, - {0x47, 0x07, 0xa7, 0xfc, 0xf3, 0x73, 0x17, 0xba, - 0x83, 0x59, 0x3c, 0x19, 0xe6, 0x85, 0x4f, 0xa8}, - {0x68, 0x6b, 0x81, 0xb2, 0x71, 0x64, 0xda, 0x8b, - 0xf8, 0xeb, 0x0f, 0x4b, 0x70, 0x56, 0x9d, 0x35}, - {0x1e, 0x24, 0x0e, 0x5e, 0x63, 0x58, 0xd1, 0xa2, - 0x25, 0x22, 0x7c, 0x3b, 0x01, 0x21, 0x78, 0x87}, - {0xd4, 0x00, 0x46, 0x57, 0x9f, 0xd3, 0x27, 0x52, - 0x4c, 0x36, 0x02, 0xe7, 0xa0, 0xc4, 0xc8, 0x9e}, - {0xea, 0xbf, 0x8a, 0xd2, 0x40, 0xc7, 0x38, 0xb5, - 0xa3, 0xf7, 0xf2, 0xce, 0xf9, 0x61, 0x15, 0xa1}, - {0xe0, 0xae, 0x5d, 0xa4, 0x9b, 0x34, 0x1a, 0x55, - 0xad, 0x93, 0x32, 0x30, 0xf5, 0x8c, 0xb1, 0xe3}, - {0x1d, 0xf6, 0xe2, 0x2e, 0x82, 0x66, 0xca, 0x60, - 0xc0, 0x29, 0x23, 0xab, 0x0d, 0x53, 0x4e, 0x6f}, - {0xd5, 0xdb, 0x37, 0x45, 0xde, 0xfd, 0x8e, 0x2f, - 0x03, 0xff, 0x6a, 0x72, 0x6d, 0x6c, 0x5b, 0x51}, - {0x8d, 0x1b, 0xaf, 0x92, 0xbb, 0xdd, 0xbc, 0x7f, - 0x11, 0xd9, 0x5c, 0x41, 0x1f, 0x10, 0x5a, 0xd8}, - {0x0a, 0xc1, 0x31, 0x88, 0xa5, 0xcd, 0x7b, 0xbd, - 0x2d, 0x74, 0xd0, 0x12, 0xb8, 0xe5, 0xb4, 0xb0}, - {0x89, 0x69, 0x97, 0x4a, 0x0c, 0x96, 0x77, 0x7e, - 0x65, 0xb9, 0xf1, 0x09, 0xc5, 0x6e, 0xc6, 0x84}, - {0x18, 0xf0, 0x7d, 0xec, 0x3a, 0xdc, 0x4d, 0x20, - 0x79, 0xee, 0x5f, 0x3e, 0xd7, 0xcb, 0x39, 0x48}, -}; - -/* - * S-box - * defined in section 2.6 S-box - */ -static LTC_INLINE sm4_u8_t s_sm4_sbox(sm4_u8_t a) -{ - return sm4_sbox_table[(a >> 4) & 0x0f][a & 0x0f]; -} - -/* - * Nonlinear transformation t - * defined in section 6.2 (1) Nonelinear transformation t - * - * Here should be big endian. - * But we just convert a 32bit word byte by byte. - * So it's OK if we don't convert the endian order - */ -static LTC_INLINE sm4_u32_t s_sm4_t(sm4_u32_t A) -{ - sm4_u8_t a[4]; - sm4_u8_t b[4]; - sm4_u32_t B; - - STORE32H(A, a); - b[0] = s_sm4_sbox(a[0]); - b[1] = s_sm4_sbox(a[1]); - b[2] = s_sm4_sbox(a[2]); - b[3] = s_sm4_sbox(a[3]); - LOAD32H(B, b); - return B; -} - -/* - * defined in section 6.2 (2) Linear transformation L - */ -static LTC_INLINE sm4_u32_t s_sm4_L62(sm4_u32_t B) -{ - return B ^ ROLc(B, 2) ^ ROLc(B, 10) ^ ROLc(B, 18) ^ ROLc(B, 24); -} - -/* - * defined in section 6.2 Permutation T - */ -static LTC_INLINE sm4_u32_t s_sm4_T62(sm4_u32_t Z) -{ - return s_sm4_L62(s_sm4_t(Z)); -} - -/* - * defined in section 7.3 (2) The system parameter FK - */ -static const sm4_u32_t sm4_FK[4] = { - 0xa3b1bac6, 0x56aa3350, 0x677d9197, 0xb27022dc -}; - -/* - * defined in section 7.3 (3) The fixed parameter CK - * The fixed parameter CK is used in the key expansion algorithm - */ -static const sm4_u32_t sm4_CK[32] = -{ - 0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269, - 0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9, - 0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249, - 0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9, - 0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229, - 0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299, - 0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209, - 0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279, -}; - -/* - * defined in section 7.3 (1) L' - */ -static LTC_INLINE sm4_u32_t s_sm4_L73(sm4_u32_t B) -{ - return B ^ ROLc(B, 13) ^ ROLc(B, 23); -} - -/* - * defined in section 7.3 (1) T' - */ -static LTC_INLINE sm4_u32_t s_sm4_T73(sm4_u32_t Z) -{ - return s_sm4_L73(s_sm4_t(Z)); -} - -/* - * defined in section 7.3 Key Expansion - */ -static LTC_INLINE void s_sm4_mk2rk(sm4_u32_t rk[32], sm4_u8_t mk[16]) -{ - sm4_u32_t MK[4] = { 0 }; - sm4_u32_t K[4+32] = { 0 }; - int i; - - LOAD32H(MK[0], mk ); - LOAD32H(MK[1], mk + 4); - LOAD32H(MK[2], mk + 8); - LOAD32H(MK[3], mk + 12); - - for (i = 0; i < 4; ++i) - K[i] = MK[i] ^ sm4_FK[i]; - for (i = 0; i < 32; ++i) - K[i+4] = K[i] ^ s_sm4_T73(K[i+1] ^ K[i+2] ^ K[i+3] ^ sm4_CK[i]); - for (i = 0; i < 32; ++i) - rk[i] = K[i+4]; -} - -/* - * defined in section 6 Round Function F - */ -static LTC_INLINE sm4_u32_t s_sm4_F(sm4_u32_t X[4], sm4_u32_t rk) -{ - return X[0] ^ s_sm4_T62(X[1] ^ X[2] ^ X[3] ^ rk); -} - -/* - * defined in section 7.1 (2) The reverse transformation - */ -static LTC_INLINE void s_sm4_R(sm4_u32_t Y[4], sm4_u32_t X[32+4]) -{ - Y[0] = X[35]; - Y[1] = X[34]; - Y[2] = X[33]; - Y[3] = X[32]; -} - -/* - * defined in section 7.1 (En)cryption - */ -static LTC_INLINE void s_sm4_crypt(sm4_u32_t Y[4], sm4_u32_t X[4+32], const sm4_u32_t rk[32]) -{ - int i; - - for (i = 0; i < 32; ++i) - X[i+4] = s_sm4_F(X+i, rk[i]); - s_sm4_R(Y, X); -} - -static LTC_INLINE void s_sm4_setkey(struct sm4_key *sm4, const unsigned char *key) -{ - int i; - - s_sm4_mk2rk(sm4->ek,(void*)key); - /*swap key sequence when decrypt cipher*/ - for (i = 0; i < 32; ++i) - sm4->dk[i] = sm4->ek[32 - 1 - i]; -} - -int sm4_setup(const unsigned char *key, int keylen, - int num_rounds, symmetric_key *skey) -{ - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - if (num_rounds != 0 && num_rounds != 32) - return CRYPT_INVALID_ROUNDS; - if (keylen != 16) - return CRYPT_INVALID_KEYSIZE; - s_sm4_setkey(&(skey->sm4), key); - return CRYPT_OK; -} - -/* - * SM4 encryption. - */ -static LTC_INLINE void s_sm4_do(void *output, const void *input, const sm4_u32_t rk[32]) -{ - sm4_u32_t Y[4]; - sm4_u32_t X[32+4]; - - LOAD32H(X[0], (sm4_u8_t *)input ); - LOAD32H(X[1], (sm4_u8_t *)input + 4); - LOAD32H(X[2], (sm4_u8_t *)input + 8); - LOAD32H(X[3], (sm4_u8_t *)input + 12); - - s_sm4_crypt(Y, X, rk); - - STORE32H(Y[0], (sm4_u8_t *)output ); - STORE32H(Y[1], (sm4_u8_t *)output + 4); - STORE32H(Y[2], (sm4_u8_t *)output + 8); - STORE32H(Y[3], (sm4_u8_t *)output + 12); -} - -int sm4_ecb_encrypt(const unsigned char *pt, unsigned char *ct, - const symmetric_key *skey) -{ - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - s_sm4_do(ct, pt, skey->sm4.ek); - return CRYPT_OK; -} -int sm4_ecb_decrypt(const unsigned char *ct, unsigned char *pt, - const symmetric_key *skey) -{ - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - s_sm4_do(pt, ct, skey->sm4.dk); - return CRYPT_OK; -} - -void sm4_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} -int sm4_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if(*keysize < 16) { - return CRYPT_INVALID_KEYSIZE; - } - *keysize = 16; - return CRYPT_OK; -} - -/* - * libtomcrypt interface is used - */ - -#ifdef LTC_TEST -static int sm4_self_test_ltc(void) -{ - int result; - int i; - int keysize; - symmetric_key skey; - - sm4_u8_t output[16]; - sm4_u8_t plaintext[] = { - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, - }; - sm4_u8_t key[] = { - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, - }; - sm4_u8_t ciphertext[] = { - 0x68, 0x1E, 0xDF, 0x34, 0xD2, 0x06, 0x96, 0x5E, - 0x86, 0xB3, 0xE9, 0x4F, 0x53, 0x6E, 0x42, 0x46, - }; - sm4_u8_t ciphertext_1000000t[] = { - 0x59, 0x52, 0x98, 0xC7, 0xC6, 0xFD, 0x27, 0x1F, - 0x04, 0x02, 0xF8, 0x04, 0xC3, 0x3D, 0x3F, 0x66, - }; - - result = CRYPT_OK; /* Assume the best */ - - sm4_setup(key, sizeof(key), 32, &skey); - - /*A.1 example 1*/ - sm4_ecb_encrypt(plaintext, output, &skey); - if (ltc_compare_testvector(output, 16, ciphertext, 16, "SM4 single encryption", 0) != 0) - result = CRYPT_ERROR; - - sm4_ecb_decrypt(ciphertext, output, &skey); - if (ltc_compare_testvector(output, 16, plaintext, 16, "SM4 single decryption", 0) != 0) - result = CRYPT_ERROR; - - /*A.2 example 2*/ - XMEMCPY(output, plaintext, 16); - for (i = 0; i < 1000000; ++i) - sm4_ecb_encrypt(output, output, &skey); - if (ltc_compare_testvector(output, 16, ciphertext_1000000t, 16, "SM4 1000000 times encryption", 0) != 0) - result = CRYPT_ERROR; - - XMEMCPY(output, ciphertext_1000000t, 16); - for (i = 0; i < 1000000; ++i) - sm4_ecb_decrypt(output, output, &skey); - if (ltc_compare_testvector(output, 16, plaintext, 16, "SM4 1000000 times encryption", 0) != 0) - result = CRYPT_ERROR; - - keysize = 128; - if (sm4_keysize(&keysize) != CRYPT_OK) { - fprintf(stderr, "Getting the max SM4 keysize failed\n"); - result = CRYPT_ERROR; - } else if (keysize != 16) { - fprintf(stderr, "SM4 maximum key size is faulty:\nSHOULD be 16\nIS %d\n", keysize); - result = CRYPT_ERROR; - } - - sm4_done(&skey); - - return result; -} -#endif - -int sm4_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - return sm4_self_test_ltc(); -#endif -} - -const struct ltc_cipher_descriptor sm4_desc = { - "sm4", - 28, - 16, 16, 16, 32, /* min_key_len, max_key_len, block_len, default_rounds */ - &sm4_setup, - &sm4_ecb_encrypt, - &sm4_ecb_decrypt, - &sm4_test, - &sm4_done, - &sm4_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, -}; - -#endif /*LTC_SM4*/ diff --git a/src/ciphers/tea.c b/src/ciphers/tea.c deleted file mode 100644 index 028d8c2f..00000000 --- a/src/ciphers/tea.c +++ /dev/null @@ -1,212 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file tea.c - Implementation of TEA, Steffen Jaeckel -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_TEA - -const struct ltc_cipher_descriptor tea_desc = -{ - "tea", - 26, - 16, 16, 8, 32, - &tea_setup, - &tea_ecb_encrypt, - &tea_ecb_decrypt, - &tea_test, - &tea_done, - &tea_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -#define DELTA 0x9E3779B9uL -#define SUM 0xC6EF3720uL - -int tea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - - /* check arguments */ - if (keylen != 16) { - return CRYPT_INVALID_KEYSIZE; - } - - if (num_rounds != 0 && num_rounds != 32) { - return CRYPT_INVALID_ROUNDS; - } - - /* load key */ - LOAD32H(skey->tea.k[0], key+0); - LOAD32H(skey->tea.k[1], key+4); - LOAD32H(skey->tea.k[2], key+8); - LOAD32H(skey->tea.k[3], key+12); - - return CRYPT_OK; -} - -/** - Encrypts a block of text with TEA - @param pt The input plaintext (8 bytes) - @param ct The output ciphertext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int tea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - ulong32 y, z, sum = 0; - const ulong32 delta = DELTA; - int r; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - LOAD32H(y, &pt[0]); - LOAD32H(z, &pt[4]); - for (r = 0; r < 32; r++) { - sum += delta; - y += ((z<<4) + skey->tea.k[0]) ^ (z + sum) ^ ((z>>5) + skey->tea.k[1]); - z += ((y<<4) + skey->tea.k[2]) ^ (y + sum) ^ ((y>>5) + skey->tea.k[3]); - } - STORE32H(y, &ct[0]); - STORE32H(z, &ct[4]); - return CRYPT_OK; -} - -/** - Decrypts a block of text with TEA - @param ct The input ciphertext (8 bytes) - @param pt The output plaintext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int tea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - ulong32 v0, v1, sum = SUM; - const ulong32 delta = DELTA; - int r; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - LOAD32H(v0, &ct[0]); - LOAD32H(v1, &ct[4]); - - for (r = 0; r < 32; r++) { - v1 -= ((v0 << 4) + skey->tea.k[2]) ^ (v0 + sum) ^ ((v0 >> 5) + skey->tea.k[3]); - v0 -= ((v1 << 4) + skey->tea.k[0]) ^ (v1 + sum) ^ ((v1 >> 5) + skey->tea.k[1]); - sum -= delta; - } - - STORE32H(v0, &pt[0]); - STORE32H(v1, &pt[4]); - return CRYPT_OK; -} - -/** - Performs a self-test of the TEA block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ -int tea_test(void) -{ - #ifndef LTC_TEST - return CRYPT_NOP; - #else - static const struct { - const char *key, *pt, *ct; - } tests[] = { - { - "00000000000000000000000000000000", - "0000000000000000", - "41ea3a0a94baa940" - }, { - "32a1e65408b63bb9214105744ec5d2e2", - "5ada1d89a9c3801a", - "dd46249e28aa0b4b" - }, { - "60388adadf70a1f5d9cb4e097d2c6c57", - "7a6adb4d69c53e0f", - "44b71215cf25368a" - }, { - "4368d2249bd0321eb7c56d5b63a1bfac", - "5a5d7ca2e186c41a", - "91f56dff7281794f" - }, { - "5c60bff27072d01c4513c5eb8f3a38ab", - "80d9c4adcf899635", - "2bb0f1b3c023ed11" - } - }; - unsigned char ptct[2][8]; - unsigned char tmp[2][8]; - unsigned char key[16]; - unsigned long l; - symmetric_key skey; - size_t i; - int err, y; - for (i = 0; i < LTC_ARRAY_SIZE(tests); i++) { - zeromem(&skey, sizeof(skey)); - - l = sizeof(key); - if ((err = base16_decode(tests[i].key, XSTRLEN(tests[i].key), key, &l)) != CRYPT_OK) return err; - l = sizeof(ptct[0]); - if ((err = base16_decode(tests[i].pt, XSTRLEN(tests[i].pt), ptct[0], &l)) != CRYPT_OK) return err; - l = sizeof(ptct[1]); - if ((err = base16_decode(tests[i].ct, XSTRLEN(tests[i].ct), ptct[1], &l)) != CRYPT_OK) return err; - - if ((err = tea_setup(key, 16, 0, &skey)) != CRYPT_OK) { - return err; - } - tea_ecb_encrypt(ptct[0], tmp[0], &skey); - tea_ecb_decrypt(tmp[0], tmp[1], &skey); - - if (ltc_compare_testvector(tmp[0], 8, ptct[1], 8, "TEA Encrypt", i) != 0 || - ltc_compare_testvector(tmp[1], 8, ptct[0], 8, "TEA Decrypt", i) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ - for (y = 0; y < 8; y++) tmp[0][y] = 0; - for (y = 0; y < 1000; y++) tea_ecb_encrypt(tmp[0], tmp[0], &skey); - for (y = 0; y < 1000; y++) tea_ecb_decrypt(tmp[0], tmp[0], &skey); - for (y = 0; y < 8; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; - } /* for */ - - return CRYPT_OK; - #endif -} - -/** Terminate the context - @param skey The scheduled key -*/ -void tea_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int tea_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize < 16) { - return CRYPT_INVALID_KEYSIZE; - } - *keysize = 16; - return CRYPT_OK; -} - -#undef DELTA -#undef SUM - -#endif - diff --git a/src/ciphers/xtea.c b/src/ciphers/xtea.c deleted file mode 100644 index 0120eb61..00000000 --- a/src/ciphers/xtea.c +++ /dev/null @@ -1,251 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file xtea.c - Implementation of eXtended TEA, Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_XTEA - -const struct ltc_cipher_descriptor xtea_desc = -{ - "xtea", - 1, - 16, 16, 8, 32, - &xtea_setup, - &xtea_ecb_encrypt, - &xtea_ecb_decrypt, - &xtea_test, - &xtea_done, - &xtea_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -int xtea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) -{ - ulong32 x, sum, K[4]; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); - - /* check arguments */ - if (keylen != 16) { - return CRYPT_INVALID_KEYSIZE; - } - - if (num_rounds != 0 && num_rounds != 32) { - return CRYPT_INVALID_ROUNDS; - } - - /* load key */ - LOAD32H(K[0], key+0); - LOAD32H(K[1], key+4); - LOAD32H(K[2], key+8); - LOAD32H(K[3], key+12); - - for (x = sum = 0; x < 32; x++) { - skey->xtea.A[x] = (sum + K[sum&3]) & 0xFFFFFFFFUL; - sum = (sum + 0x9E3779B9UL) & 0xFFFFFFFFUL; - skey->xtea.B[x] = (sum + K[(sum>>11)&3]) & 0xFFFFFFFFUL; - } - -#ifdef LTC_CLEAN_STACK - zeromem(&K, sizeof(K)); -#endif - - return CRYPT_OK; -} - -/** - Encrypts a block of text with LTC_XTEA - @param pt The input plaintext (8 bytes) - @param ct The output ciphertext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) -{ - ulong32 y, z; - int r; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - LOAD32H(y, &pt[0]); - LOAD32H(z, &pt[4]); - for (r = 0; r < 32; r += 4) { - y = (y + ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r])) & 0xFFFFFFFFUL; - z = (z + ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r])) & 0xFFFFFFFFUL; - - y = (y + ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r+1])) & 0xFFFFFFFFUL; - z = (z + ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r+1])) & 0xFFFFFFFFUL; - - y = (y + ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r+2])) & 0xFFFFFFFFUL; - z = (z + ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r+2])) & 0xFFFFFFFFUL; - - y = (y + ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r+3])) & 0xFFFFFFFFUL; - z = (z + ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r+3])) & 0xFFFFFFFFUL; - } - STORE32H(y, &ct[0]); - STORE32H(z, &ct[4]); - return CRYPT_OK; -} - -/** - Decrypts a block of text with LTC_XTEA - @param ct The input ciphertext (8 bytes) - @param pt The output plaintext (8 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -int xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) -{ - ulong32 y, z; - int r; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - - LOAD32H(y, &ct[0]); - LOAD32H(z, &ct[4]); - for (r = 31; r >= 0; r -= 4) { - z = (z - ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r])) & 0xFFFFFFFFUL; - y = (y - ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r])) & 0xFFFFFFFFUL; - - z = (z - ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r-1])) & 0xFFFFFFFFUL; - y = (y - ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r-1])) & 0xFFFFFFFFUL; - - z = (z - ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r-2])) & 0xFFFFFFFFUL; - y = (y - ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r-2])) & 0xFFFFFFFFUL; - - z = (z - ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r-3])) & 0xFFFFFFFFUL; - y = (y - ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r-3])) & 0xFFFFFFFFUL; - } - STORE32H(y, &pt[0]); - STORE32H(z, &pt[4]); - return CRYPT_OK; -} - -/** - Performs a self-test of the LTC_XTEA block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ -int xtea_test(void) -{ - #ifndef LTC_TEST - return CRYPT_NOP; - #else - static const struct { - unsigned char key[16], pt[8], ct[8]; - } tests[] = { - { - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xde, 0xe9, 0xd4, 0xd8, 0xf7, 0x13, 0x1e, 0xd9 } - }, { - { 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xa5, 0x97, 0xab, 0x41, 0x76, 0x01, 0x4d, 0x72 } - }, { - { 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06 }, - { 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02 }, - { 0xb1, 0xfd, 0x5d, 0xa9, 0xcc, 0x6d, 0xc9, 0xdc } - }, { - { 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f, - 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 }, - { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 }, - { 0x70, 0x4b, 0x31, 0x34, 0x47, 0x44, 0xdf, 0xab } - }, { - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48 }, - { 0x49, 0x7d, 0xf3, 0xd0, 0x72, 0x61, 0x2c, 0xb5 } - }, { - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }, - { 0xe7, 0x8f, 0x2d, 0x13, 0x74, 0x43, 0x41, 0xd8 } - }, { - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x5a, 0x5b, 0x6e, 0x27, 0x89, 0x48, 0xd7, 0x7f }, - { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 } - }, { - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48 }, - { 0xa0, 0x39, 0x05, 0x89, 0xf8, 0xb8, 0xef, 0xa5 } - }, { - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }, - { 0xed, 0x23, 0x37, 0x5a, 0x82, 0x1a, 0x8c, 0x2d } - }, { - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x70, 0xe1, 0x22, 0x5d, 0x6e, 0x4e, 0x76, 0x55 }, - { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 } - } - }; - unsigned char tmp[2][8]; - symmetric_key skey; - int i, err, y; - for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) { - zeromem(&skey, sizeof(skey)); - if ((err = xtea_setup(tests[i].key, 16, 0, &skey)) != CRYPT_OK) { - return err; - } - xtea_ecb_encrypt(tests[i].pt, tmp[0], &skey); - xtea_ecb_decrypt(tmp[0], tmp[1], &skey); - - if (ltc_compare_testvector(tmp[0], 8, tests[i].ct, 8, "XTEA Encrypt", i) != 0 || - ltc_compare_testvector(tmp[1], 8, tests[i].pt, 8, "XTEA Decrypt", i) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ - for (y = 0; y < 8; y++) tmp[0][y] = 0; - for (y = 0; y < 1000; y++) xtea_ecb_encrypt(tmp[0], tmp[0], &skey); - for (y = 0; y < 1000; y++) xtea_ecb_decrypt(tmp[0], tmp[0], &skey); - for (y = 0; y < 8; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; - } /* for */ - - return CRYPT_OK; - #endif -} - -/** Terminate the context - @param skey The scheduled key -*/ -void xtea_done(symmetric_key *skey) -{ - LTC_UNUSED_PARAM(skey); -} - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int xtea_keysize(int *keysize) -{ - LTC_ARGCHK(keysize != NULL); - if (*keysize < 16) { - return CRYPT_INVALID_KEYSIZE; - } - *keysize = 16; - return CRYPT_OK; -} - - -#endif - - - diff --git a/src/encauth/ccm/ccm_add_aad.c b/src/encauth/ccm/ccm_add_aad.c deleted file mode 100644 index 94d2e2b5..00000000 --- a/src/encauth/ccm/ccm_add_aad.c +++ /dev/null @@ -1,53 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_CCM_MODE - -/** - Add AAD to the CCM state - @param ccm The CCM state - @param adata The additional authentication data to add to the CCM state - @param adatalen The length of the AAD data. - @return CRYPT_OK on success - */ -int ccm_add_aad(ccm_state *ccm, - const unsigned char *adata, unsigned long adatalen) -{ - unsigned long y; - int err; - - LTC_ARGCHK(ccm != NULL); - LTC_ARGCHK(adata != NULL); - - if (ccm->aadlen < ccm->current_aadlen + adatalen) { - return CRYPT_INVALID_ARG; - } - ccm->current_aadlen += adatalen; - - /* now add the data */ - for (y = 0; y < adatalen; y++) { - if (ccm->x == 16) { - /* full block so let's encrypt it */ - if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) { - return err; - } - ccm->x = 0; - } - ccm->PAD[ccm->x++] ^= adata[y]; - } - - /* remainder? */ - if (ccm->aadlen == ccm->current_aadlen) { - if (ccm->x != 0) { - if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) { - return err; - } - } - ccm->x = 0; - } - - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/ccm/ccm_add_nonce.c b/src/encauth/ccm/ccm_add_nonce.c deleted file mode 100644 index d187e143..00000000 --- a/src/encauth/ccm/ccm_add_nonce.c +++ /dev/null @@ -1,112 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_CCM_MODE - -/** - Add nonce data to the CCM state - @param ccm The CCM state - @param nonce The nonce data to add - @param noncelen The length of the nonce - @return CRYPT_OK on success - */ -int ccm_add_nonce(ccm_state *ccm, - const unsigned char *nonce, unsigned long noncelen) -{ - unsigned long x, y, len; - int err; - - LTC_ARGCHK(ccm != NULL); - LTC_ARGCHK(nonce != NULL); - - /* CCM nonce is 7..13 bytes */ - if (noncelen < 7 || noncelen > 13) { - return CRYPT_INVALID_ARG; - } - ccm->noncelen = noncelen; - if ((15 - ccm->noncelen) > ccm->L) { - ccm->L = 15 - ccm->noncelen; - } - if (ccm->L > 8) { - return CRYPT_INVALID_ARG; - } - - /* flags byte + nonce + length field must fit the 16-byte block */ - if ((ccm->noncelen + ccm->L) > 15) { - return CRYPT_INVALID_ARG; - } - - /* form B_0 == flags | Nonce N | l(m) */ - x = 0; - ccm->PAD[x++] = (unsigned char)(((ccm->aadlen > 0) ? (1<<6) : 0) | - (((ccm->taglen - 2)>>1)<<3) | - (ccm->L-1)); - - /* nonce */ - for (y = 0; y < 15 - ccm->L; y++) { - ccm->PAD[x++] = nonce[y]; - } - - /* store len */ - len = ccm->ptlen; - - /* shift len so the upper bytes of len are the contents of the length */ - for (y = ccm->L; y < 4; y++) { - len <<= 8; - } - - /* store l(m) (only store 32-bits) */ - for (y = 0; ccm->L > 4 && (ccm->L-y)>4; y++) { - ccm->PAD[x++] = 0; - } - for (; y < ccm->L; y++) { - if (x >= sizeof(ccm->PAD)) { - return CRYPT_INVALID_ARG; - } - ccm->PAD[x++] = (unsigned char)((len >> 24) & 255); - len <<= 8; - } - - /* encrypt PAD */ - if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) { - return err; - } - - /* handle header */ - ccm->x = 0; - if (ccm->aadlen > 0) { - /* store length */ - if (ccm->aadlen < ((1UL<<16) - (1UL<<8))) { - ccm->PAD[ccm->x++] ^= (ccm->aadlen>>8) & 255; - ccm->PAD[ccm->x++] ^= ccm->aadlen & 255; - } else { - ccm->PAD[ccm->x++] ^= 0xFF; - ccm->PAD[ccm->x++] ^= 0xFE; - ccm->PAD[ccm->x++] ^= (ccm->aadlen>>24) & 255; - ccm->PAD[ccm->x++] ^= (ccm->aadlen>>16) & 255; - ccm->PAD[ccm->x++] ^= (ccm->aadlen>>8) & 255; - ccm->PAD[ccm->x++] ^= ccm->aadlen & 255; - } - } - - /* setup the ctr counter */ - x = 0; - - /* flags */ - ccm->ctr[x++] = (unsigned char)ccm->L-1; - - /* nonce */ - for (y = 0; y < (16 - (ccm->L+1)); ++y) { - ccm->ctr[x++] = nonce[y]; - } - /* offset */ - while (x < 16) { - ccm->ctr[x++] = 0; - } - - ccm->CTRlen = 16; - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/ccm/ccm_done.c b/src/encauth/ccm/ccm_done.c deleted file mode 100644 index 51ce6ccd..00000000 --- a/src/encauth/ccm/ccm_done.c +++ /dev/null @@ -1,55 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_CCM_MODE - -/** - Terminate a CCM stream - @param ccm The CCM state - @param tag [out] The destination for the MAC tag - @param taglen [in/out] The length of the MAC tag - @return CRYPT_OK on success - */ -int ccm_done(ccm_state *ccm, - unsigned char *tag, unsigned long *taglen) -{ - unsigned long x, y; - int err; - - LTC_ARGCHK(ccm != NULL); - - /* Check all data have been processed */ - if (ccm->ptlen != ccm->current_ptlen) { - return CRYPT_ERROR; - } - - LTC_ARGCHK(tag != NULL); - LTC_ARGCHK(taglen != NULL); - - if (ccm->x != 0) { - if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) { - return err; - } - } - - /* setup CTR for the TAG (zero the count) */ - for (y = 15; y > 15 - ccm->L; y--) { - ccm->ctr[y] = 0x00; - } - if ((err = ecb_encrypt_block(ccm->ctr, ccm->CTRPAD, &ccm->K)) != CRYPT_OK) { - return err; - } - - ecb_done(&ccm->K); - - /* store the TAG */ - for (x = 0; x < 16 && x < *taglen; x++) { - tag[x] = ccm->PAD[x] ^ ccm->CTRPAD[x]; - } - *taglen = x; - - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/ccm/ccm_init.c b/src/encauth/ccm/ccm_init.c deleted file mode 100644 index 3578bcf1..00000000 --- a/src/encauth/ccm/ccm_init.c +++ /dev/null @@ -1,63 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_CCM_MODE - -/** - Initialize a CCM state - @param ccm The CCM state to initialize - @param cipher The index of the cipher to use - @param key The secret key - @param keylen The length of the secret key - @param ptlen The length of the plain/cipher text that will be processed - @param taglen The max length of the MAC tag - @param aadlen The length of the AAD - - @return CRYPT_OK on success - */ -int ccm_init(ccm_state *ccm, int cipher, - const unsigned char *key, int keylen, int ptlen, int taglen, int aadlen) -{ - int err; - - LTC_ARGCHK(ccm != NULL); - LTC_ARGCHK(key != NULL); - - XMEMSET(ccm, 0, sizeof(ccm_state)); - - /* check cipher input */ - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - if (cipher_descriptor[cipher].block_length != 16) { - return CRYPT_INVALID_CIPHER; - } - - /* make sure the taglen is valid */ - if (taglen < 4 || taglen > 16 || (taglen % 2) == 1 || aadlen < 0 || ptlen < 0) { - return CRYPT_INVALID_ARG; - } - ccm->taglen = taglen; - - /* schedule key */ - if ((err = ecb_start(cipher, key, keylen, 0, &ccm->K)) != CRYPT_OK) { - return err; - } - - /* let's get the L value */ - ccm->ptlen = ptlen; - ccm->L = 0; - while (ptlen) { - ++ccm->L; - ptlen >>= 8; - } - if (ccm->L <= 1) { - ccm->L = 2; - } - - ccm->aadlen = aadlen; - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/ccm/ccm_memory.c b/src/encauth/ccm/ccm_memory.c deleted file mode 100644 index 4611a432..00000000 --- a/src/encauth/ccm/ccm_memory.c +++ /dev/null @@ -1,384 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ccm_memory.c - CCM support, process a block of memory, Tom St Denis -*/ - -#ifdef LTC_CCM_MODE - -/** - CCM encrypt/decrypt and produce an authentication tag - - *1 'pt', 'ct' and 'tag' can both be 'in' or 'out', depending on 'direction' - - @param cipher The index of the cipher desired - @param key The secret key to use - @param keylen The length of the secret key (octets) - @param uskey A previously scheduled key [optional can be NULL] - @param nonce The session nonce [use once] - @param noncelen The length of the nonce - @param header The header for the session - @param headerlen The length of the header (octets) - @param pt [*1] The plaintext - @param ptlen The length of the plaintext (octets) - @param ct [*1] The ciphertext - @param tag [*1] The destination tag - @param taglen The max size and resulting size of the authentication tag - @param direction Encrypt or Decrypt direction (0 or 1) - @return CRYPT_OK if successful -*/ -int ccm_memory(int cipher, - const unsigned char *key, unsigned long keylen, - symmetric_ECB *uskey, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *header, unsigned long headerlen, - unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - unsigned char *tag, unsigned long *taglen, - int direction) -{ - unsigned char PAD[16], ctr[16], CTRPAD[16], ptTag[16], b, *pt_real; - unsigned char *pt_work = NULL; - symmetric_ECB *skey; - int err; - unsigned long len, L, x, y, z, CTRlen; - - if (uskey == NULL) { - LTC_ARGCHK(key != NULL); - } - LTC_ARGCHK(nonce != NULL); - if (headerlen > 0) { - LTC_ARGCHK(header != NULL); - } - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(tag != NULL); - LTC_ARGCHK(taglen != NULL); - - pt_real = pt; - -#ifdef LTC_FAST - if (16 % sizeof(LTC_FAST_TYPE)) { - return CRYPT_INVALID_ARG; - } -#endif - - /* check cipher input */ - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - if (cipher_descriptor[cipher].block_length != 16) { - return CRYPT_INVALID_CIPHER; - } - - /* make sure the taglen is valid */ - if (*taglen < 4 || *taglen > 16 || (*taglen % 2) == 1 || headerlen > 0x7fffffffu) { - return CRYPT_INVALID_ARG; - } - /* CCM nonce is 7..13 bytes */ - if (noncelen < 7 || noncelen > 13) { - return CRYPT_INVALID_ARG; - } - - /* is there an accelerator? */ - if (cipher_descriptor[cipher].accel_ccm_memory != NULL) { - return cipher_descriptor[cipher].accel_ccm_memory( - key, keylen, - &uskey->key, - nonce, noncelen, - header, headerlen, - pt, ptlen, - ct, - tag, taglen, - direction); - } - - /* let's get the L value */ - len = ptlen; - L = 0; - while (len) { - ++L; - len >>= 8; - } - if (L <= 1) { - L = 2; - } - - /* increase L to match the nonce len */ - if ((15 - noncelen) > L) { - L = 15 - noncelen; - } - if (L > 8) { - return CRYPT_INVALID_ARG; - } - - /* flags byte + nonce + length field must fit the 16-byte block */ - if ((noncelen + L) > 15) { - return CRYPT_INVALID_ARG; - } - - /* allocate mem for the symmetric key */ - if (uskey == NULL) { - skey = XMALLOC(sizeof(*skey)); - if (skey == NULL) { - return CRYPT_MEM; - } - - /* initialize the cipher */ - if ((err = ecb_start(cipher, key, keylen, 0, skey)) != CRYPT_OK) { - XFREE(skey); - return err; - } - } else { - skey = uskey; - } - - /* initialize buffer for pt */ - if (direction == CCM_DECRYPT && ptlen > 0) { - pt_work = XMALLOC(ptlen); - if (pt_work == NULL) { - goto error; - } - pt = pt_work; - } - - /* form B_0 == flags | Nonce N | l(m) */ - x = 0; - PAD[x++] = (unsigned char)(((headerlen > 0) ? (1<<6) : 0) | - (((*taglen - 2)>>1)<<3) | - (L-1)); - - /* nonce */ - for (y = 0; y < noncelen; y++) { - PAD[x++] = nonce[y]; - } - - /* store len */ - len = ptlen; - - /* shift len so the upper bytes of len are the contents of the length */ - for (y = L; y < 4; y++) { - len <<= 8; - } - - /* store l(m) (only store 32-bits) */ - for (y = 0; L > 4 && (L-y)>4; y++) { - PAD[x++] = 0; - } - for (; y < L; y++) { - if (x >= sizeof(PAD)) { - err = CRYPT_INVALID_ARG; - goto error; - } - PAD[x++] = (unsigned char)((len >> 24) & 255); - len <<= 8; - } - - /* encrypt PAD */ - if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) { - goto error; - } - - /* handle header */ - if (headerlen > 0) { - x = 0; - - /* store length */ - if (headerlen < ((1UL<<16) - (1UL<<8))) { - PAD[x++] ^= (headerlen>>8) & 255; - PAD[x++] ^= headerlen & 255; - } else { - PAD[x++] ^= 0xFF; - PAD[x++] ^= 0xFE; - PAD[x++] ^= (headerlen>>24) & 255; - PAD[x++] ^= (headerlen>>16) & 255; - PAD[x++] ^= (headerlen>>8) & 255; - PAD[x++] ^= headerlen & 255; - } - - /* now add the data */ - for (y = 0; y < headerlen; y++) { - if (x == 16) { - /* full block so let's encrypt it */ - if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) { - goto error; - } - x = 0; - } - PAD[x++] ^= header[y]; - } - - /* remainder */ - if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) { - goto error; - } - } - - /* setup the ctr counter */ - x = 0; - - /* flags */ - ctr[x++] = (unsigned char)L-1; - - /* nonce */ - for (y = 0; y < (16 - (L+1)); ++y) { - ctr[x++] = nonce[y]; - } - /* offset */ - while (x < 16) { - ctr[x++] = 0; - } - - x = 0; - CTRlen = 16; - - /* now handle the PT */ - if (ptlen > 0) { - y = 0; -#ifdef LTC_FAST - if (ptlen & ~15) { - if (direction == CCM_ENCRYPT) { - for (; y < (ptlen & ~15); y += 16) { - /* increment the ctr? */ - for (z = 15; z > 15-L; z--) { - ctr[z] = (ctr[z] + 1) & 255; - if (ctr[z]) break; - } - if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) { - goto error; - } - - /* xor the PT against the pad first */ - for (z = 0; z < 16; z += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2(&PAD[z], &pt[y+z]); - LTC_FAST_XOR3(&ct[y+z], &pt[y+z], &CTRPAD[z]); - } - if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) { - goto error; - } - } - } else { /* direction == CCM_DECRYPT */ - for (; y < (ptlen & ~15); y += 16) { - /* increment the ctr? */ - for (z = 15; z > 15-L; z--) { - ctr[z] = (ctr[z] + 1) & 255; - if (ctr[z]) break; - } - if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) { - goto error; - } - - /* xor the PT against the pad last */ - for (z = 0; z < 16; z += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR3(&pt[y+z], &ct[y+z], &CTRPAD[z]); - LTC_FAST_XOR2(&PAD[z], &pt[y+z]); - } - if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) { - goto error; - } - } - } - } -#endif - - for (; y < ptlen; y++) { - /* increment the ctr? */ - if (CTRlen == 16) { - for (z = 15; z > 15-L; z--) { - ctr[z] = (ctr[z] + 1) & 255; - if (ctr[z]) break; - } - if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) { - goto error; - } - CTRlen = 0; - } - - /* if we encrypt we add the bytes to the MAC first */ - if (direction == CCM_ENCRYPT) { - b = pt[y]; - ct[y] = b ^ CTRPAD[CTRlen++]; - } else { - b = ct[y] ^ CTRPAD[CTRlen++]; - pt[y] = b; - } - - if (x == 16) { - if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) { - goto error; - } - x = 0; - } - PAD[x++] ^= b; - } - - if (x != 0) { - if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) { - goto error; - } - } - } - - /* setup CTR for the TAG (zero the count) */ - for (y = 15; y > 15 - L; y--) { - ctr[y] = 0x00; - } - if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) { - goto error; - } - - if (skey != uskey) { - ecb_done(skey); -#ifdef LTC_CLEAN_STACK - zeromem(skey, sizeof(*skey)); -#endif - } - - if (direction == CCM_ENCRYPT) { - /* store the TAG */ - for (x = 0; x < 16 && x < *taglen; x++) { - tag[x] = PAD[x] ^ CTRPAD[x]; - } - *taglen = x; - } else { /* direction == CCM_DECRYPT */ - /* decrypt the tag */ - for (x = 0; x < 16 && x < *taglen; x++) { - ptTag[x] = tag[x] ^ CTRPAD[x]; - } - *taglen = x; - - /* check validity of the decrypted tag against the computed PAD (in constant time) */ - /* HACK: the boolean value of XMEM_NEQ becomes either 0 (CRYPT_OK) or 1 (CRYPT_ERR). - * there should be a better way of setting the correct error code in constant - * time. - */ - err = XMEM_NEQ(ptTag, PAD, *taglen); - - /* Zero the plaintext if the tag was invalid (in constant time) */ - if (ptlen > 0) { - copy_or_zeromem(pt, pt_real, ptlen, err); - } - } - -#ifdef LTC_CLEAN_STACK - zeromem(PAD, sizeof(PAD)); - zeromem(CTRPAD, sizeof(CTRPAD)); - if (pt_work != NULL) { - zeromem(pt_work, ptlen); - } -#endif -error: - if (pt_work) { - XFREE(pt_work); - } - if (skey != uskey) { - XFREE(skey); - } - - return err; -} - -#endif diff --git a/src/encauth/ccm/ccm_process.c b/src/encauth/ccm/ccm_process.c deleted file mode 100644 index b5f973d5..00000000 --- a/src/encauth/ccm/ccm_process.c +++ /dev/null @@ -1,78 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_CCM_MODE - -/** - Process plaintext/ciphertext through CCM - @param ccm The CCM state - @param pt The plaintext - @param ptlen The plaintext length (ciphertext length is the same) - @param ct The ciphertext - @param direction Encrypt or Decrypt mode (CCM_ENCRYPT or CCM_DECRYPT) - @return CRYPT_OK on success - */ -int ccm_process(ccm_state *ccm, - unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - int direction) -{ - unsigned char z, b; - unsigned long y; - int err; - - LTC_ARGCHK(ccm != NULL); - - /* Check aad has been correctly added */ - if (ccm->aadlen != ccm->current_aadlen) { - return CRYPT_ERROR; - } - - /* Check we do not process too much data */ - if (ccm->ptlen < ccm->current_ptlen + ptlen) { - return CRYPT_ERROR; - } - ccm->current_ptlen += ptlen; - - /* now handle the PT */ - if (ptlen > 0) { - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - - for (y = 0; y < ptlen; y++) { - /* increment the ctr? */ - if (ccm->CTRlen == 16) { - for (z = 15; z > 15-ccm->L; z--) { - ccm->ctr[z] = (ccm->ctr[z] + 1) & 255; - if (ccm->ctr[z]) break; - } - if ((err = ecb_encrypt_block(ccm->ctr, ccm->CTRPAD, &ccm->K)) != CRYPT_OK) { - return err; - } - ccm->CTRlen = 0; - } - - /* if we encrypt we add the bytes to the MAC first */ - if (direction == CCM_ENCRYPT) { - b = pt[y]; - ct[y] = b ^ ccm->CTRPAD[ccm->CTRlen++]; - } else { - b = ct[y] ^ ccm->CTRPAD[ccm->CTRlen++]; - pt[y] = b; - } - - if (ccm->x == 16) { - if ((err = ecb_encrypt_block(ccm->PAD, ccm->PAD, &ccm->K)) != CRYPT_OK) { - return err; - } - ccm->x = 0; - } - ccm->PAD[ccm->x++] ^= b; - } - } - - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/ccm/ccm_reset.c b/src/encauth/ccm/ccm_reset.c deleted file mode 100644 index 93b8fecc..00000000 --- a/src/encauth/ccm/ccm_reset.c +++ /dev/null @@ -1,25 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_CCM_MODE - -/** - Reset a CCM state to as if you just called ccm_init(). This saves the initialization time. - @param ccm The CCM state to reset - @return CRYPT_OK on success -*/ -int ccm_reset(ccm_state *ccm) -{ - LTC_ARGCHK(ccm != NULL); - zeromem(ccm->PAD, sizeof(ccm->PAD)); - zeromem(ccm->ctr, sizeof(ccm->ctr)); - zeromem(ccm->CTRPAD, sizeof(ccm->CTRPAD)); - ccm->CTRlen = 0; - ccm->current_ptlen = 0; - ccm->current_aadlen = 0; - - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/ccm/ccm_test.c b/src/encauth/ccm/ccm_test.c deleted file mode 100644 index 69cf8be5..00000000 --- a/src/encauth/ccm/ccm_test.c +++ /dev/null @@ -1,318 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ccm_test.c - CCM support, process a block of memory, Tom St Denis -*/ - -#ifdef LTC_CCM_MODE - -int ccm_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - unsigned char key[16]; - unsigned char nonce[16]; - int noncelen; - unsigned char header[64]; - int headerlen; - unsigned char pt[64]; - int ptlen; - unsigned char ct[64]; - unsigned char tag[16]; - unsigned long taglen; - } tests[] = { - -/* 13 byte nonce, 8 byte auth, 23 byte pt */ -{ - { 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF }, - { 0x00, 0x00, 0x00, 0x03, 0x02, 0x01, 0x00, 0xA0, - 0xA1, 0xA2, 0xA3, 0xA4, 0xA5 }, - 13, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }, - 8, - { 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E }, - 23, - { 0x58, 0x8C, 0x97, 0x9A, 0x61, 0xC6, 0x63, 0xD2, - 0xF0, 0x66, 0xD0, 0xC2, 0xC0, 0xF9, 0x89, 0x80, - 0x6D, 0x5F, 0x6B, 0x61, 0xDA, 0xC3, 0x84 }, - { 0x17, 0xe8, 0xd1, 0x2c, 0xfd, 0xf9, 0x26, 0xe0 }, - 8 -}, - -/* 13 byte nonce, 12 byte header, 19 byte pt */ -{ - { 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF }, - { 0x00, 0x00, 0x00, 0x06, 0x05, 0x04, 0x03, 0xA0, - 0xA1, 0xA2, 0xA3, 0xA4, 0xA5 }, - 13, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B }, - 12, - { 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, - 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, - 0x1C, 0x1D, 0x1E }, - 19, - { 0xA2, 0x8C, 0x68, 0x65, 0x93, 0x9A, 0x9A, 0x79, - 0xFA, 0xAA, 0x5C, 0x4C, 0x2A, 0x9D, 0x4A, 0x91, - 0xCD, 0xAC, 0x8C }, - { 0x96, 0xC8, 0x61, 0xB9, 0xC9, 0xE6, 0x1E, 0xF1 }, - 8 -}, - -/* supplied by Brian Gladman */ -{ - { 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f }, - { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 }, - 7, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }, - 8, - { 0x20, 0x21, 0x22, 0x23 }, - 4, - { 0x71, 0x62, 0x01, 0x5b }, - { 0x4d, 0xac, 0x25, 0x5d }, - 4 -}, - -{ - { 0xc9, 0x7c, 0x1f, 0x67, 0xce, 0x37, 0x11, 0x85, - 0x51, 0x4a, 0x8a, 0x19, 0xf2, 0xbd, 0xd5, 0x2f }, - { 0x00, 0x50, 0x30, 0xf1, 0x84, 0x44, 0x08, 0xb5, - 0x03, 0x97, 0x76, 0xe7, 0x0c }, - 13, - { 0x08, 0x40, 0x0f, 0xd2, 0xe1, 0x28, 0xa5, 0x7c, - 0x50, 0x30, 0xf1, 0x84, 0x44, 0x08, 0xab, 0xae, - 0xa5, 0xb8, 0xfc, 0xba, 0x00, 0x00 }, - 22, - { 0xf8, 0xba, 0x1a, 0x55, 0xd0, 0x2f, 0x85, 0xae, - 0x96, 0x7b, 0xb6, 0x2f, 0xb6, 0xcd, 0xa8, 0xeb, - 0x7e, 0x78, 0xa0, 0x50 }, - 20, - { 0xf3, 0xd0, 0xa2, 0xfe, 0x9a, 0x3d, 0xbf, 0x23, - 0x42, 0xa6, 0x43, 0xe4, 0x32, 0x46, 0xe8, 0x0c, - 0x3c, 0x04, 0xd0, 0x19 }, - { 0x78, 0x45, 0xce, 0x0b, 0x16, 0xf9, 0x76, 0x23 }, - 8 -}, - -}; - unsigned long taglen, x, y; - unsigned char buf[64], buf2[64], tag[16], tag2[16], tag3[16], zero[64]; - int err, idx; - symmetric_ECB skey; - ccm_state ccm; - - zeromem(zero, 64); - - idx = find_cipher("aes"); - if (idx == -1) { - idx = find_cipher("rijndael"); - if (idx == -1) { - return CRYPT_NOP; - } - } - - for (x = 0; x < LTC_ARRAY_SIZE(tests); x++) { - for (y = 0; y < 2; y++) { - taglen = tests[x].taglen; - if (y == 0) { - if ((err = ecb_start(idx, tests[x].key, 16, 0, &skey)) != CRYPT_OK) { - return err; - } - - if ((err = ccm_memory(idx, - tests[x].key, 16, - &skey, - tests[x].nonce, tests[x].noncelen, - tests[x].header, tests[x].headerlen, - (unsigned char*)tests[x].pt, tests[x].ptlen, - buf, - tag, &taglen, 0)) != CRYPT_OK) { - return err; - } - /* run a second time to make sure skey is not touched */ - if ((err = ccm_memory(idx, - tests[x].key, 16, - &skey, - tests[x].nonce, tests[x].noncelen, - tests[x].header, tests[x].headerlen, - (unsigned char*)tests[x].pt, tests[x].ptlen, - buf, - tag, &taglen, 0)) != CRYPT_OK) { - return err; - } - } else { - if ((err = ccm_init(&ccm, idx, tests[x].key, 16, tests[x].ptlen, tests[x].taglen, tests[x].headerlen)) != CRYPT_OK) { - return err; - } - if ((err = ccm_add_nonce(&ccm, tests[x].nonce, tests[x].noncelen)) != CRYPT_OK) { - return err; - } - if ((err = ccm_add_aad(&ccm, tests[x].header, tests[x].headerlen)) != CRYPT_OK) { - return err; - } - if ((err = ccm_process(&ccm, (unsigned char*)tests[x].pt, tests[x].ptlen, buf, CCM_ENCRYPT)) != CRYPT_OK) { - return err; - } - if ((err = ccm_done(&ccm, tag, &taglen)) != CRYPT_OK) { - return err; - } - } - - if (ltc_compare_testvector(buf, tests[x].ptlen, tests[x].ct, tests[x].ptlen, "CCM encrypt data", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - if (ltc_compare_testvector(tag, taglen, tests[x].tag, tests[x].taglen, "CCM encrypt tag", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - - if (y == 0) { - XMEMCPY(tag3, tests[x].tag, tests[x].taglen); - taglen = tests[x].taglen; - if ((err = ccm_memory(idx, - tests[x].key, 16, - NULL, - tests[x].nonce, tests[x].noncelen, - tests[x].header, tests[x].headerlen, - buf2, tests[x].ptlen, - buf, - tag3, &taglen, 1 )) != CRYPT_OK) { - return err; - } - } else { - if ((err = ccm_init(&ccm, idx, tests[x].key, 16, tests[x].ptlen, tests[x].taglen, tests[x].headerlen)) != CRYPT_OK) { - return err; - } - if ((err = ccm_add_nonce(&ccm, tests[x].nonce, tests[x].noncelen)) != CRYPT_OK) { - return err; - } - if ((err = ccm_add_aad(&ccm, tests[x].header, tests[x].headerlen)) != CRYPT_OK) { - return err; - } - if ((err = ccm_process(&ccm, buf2, tests[x].ptlen, buf, CCM_DECRYPT)) != CRYPT_OK) { - return err; - } - if ((err = ccm_done(&ccm, tag2, &taglen)) != CRYPT_OK) { - return err; - } - } - - - if (ltc_compare_testvector(buf2, tests[x].ptlen, tests[x].pt, tests[x].ptlen, "CCM decrypt data", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - if (y == 0) { - /* check if decryption with the wrong tag does not reveal the plaintext */ - XMEMCPY(tag3, tests[x].tag, tests[x].taglen); - tag3[0] ^= 0xff; /* set the tag to the wrong value */ - taglen = tests[x].taglen; - if (ccm_memory(idx, - tests[x].key, 16, - NULL, - tests[x].nonce, tests[x].noncelen, - tests[x].header, tests[x].headerlen, - buf2, tests[x].ptlen, - buf, - tag3, &taglen, 1 ) != CRYPT_ERROR) { - return CRYPT_FAIL_TESTVECTOR; - } - if (ltc_compare_testvector(buf2, tests[x].ptlen, zero, tests[x].ptlen, "CCM decrypt wrong tag", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } else { - if (ltc_compare_testvector(tag2, taglen, tests[x].tag, tests[x].taglen, "CCM decrypt tag", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - - if (y == 0) { - ecb_done(&skey); - } - } - } - - /* wycheproof failing test - https://github.com/libtom/libtomcrypt/pull/452 */ - { - unsigned char key[] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }; - unsigned char iv[] = { 0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51 }; - unsigned char valid_tag[] = { 0x23,0x1a,0x2d,0x8f }; - unsigned char invalid_tag[] = { 0x23,0x1a,0x2d,0x8f,0x6a }; - unsigned char msg[] = { 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f }; - unsigned char ct[] = { 0xd3,0xda,0xb1,0xee,0x49,0x4c,0xc2,0x29,0x09,0x9d,0x6c,0xac,0x7d,0xf1,0x4a,0xdd }; - unsigned char pt[20] = { 0 }; - - /* VALID tag */ - taglen = sizeof(valid_tag); - err = ccm_memory(idx, key, sizeof(key), NULL, iv, sizeof(iv), NULL, 0, - pt, sizeof(ct), ct, valid_tag, &taglen, CCM_DECRYPT); - if ((err != CRYPT_OK) || (XMEMCMP(msg, pt, sizeof(msg)) != 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* INVALID tag */ - taglen = sizeof(invalid_tag); - err = ccm_memory(idx, key, sizeof(key), NULL, iv, sizeof(iv), NULL, 0, - pt, sizeof(ct), ct, invalid_tag, &taglen, CCM_DECRYPT); - if (err == CRYPT_OK) { - return CRYPT_FAIL_TESTVECTOR; /* should fail */ - } - } - - /* invalid nonce lengths and nonce/L combinations must be rejected not silently adjusted */ - { - unsigned char key[16] = { 0 }; - unsigned char nonce[16] = { 0 }; - unsigned char pt[16] = { 0 }; - unsigned char ct[16]; - - /* CCM nonce is 7..13 bytes */ - taglen = 8; - if (ccm_memory(idx, key, sizeof(key), NULL, nonce, 6, NULL, 0, pt, sizeof(pt), ct, tag, &taglen, CCM_ENCRYPT) != CRYPT_INVALID_ARG) { - return CRYPT_FAIL_TESTVECTOR; - } - taglen = 8; - if (ccm_memory(idx, key, sizeof(key), NULL, nonce, 14, NULL, 0, pt, sizeof(pt), ct, tag, &taglen, CCM_ENCRYPT) != CRYPT_INVALID_ARG) { - return CRYPT_FAIL_TESTVECTOR; - } - if ((err = ccm_init(&ccm, idx, key, sizeof(key), sizeof(pt), 8, 0)) != CRYPT_OK) { - return err; - } - if (ccm_add_nonce(&ccm, nonce, 6) != CRYPT_INVALID_ARG) { - return CRYPT_FAIL_TESTVECTOR; - } - if ((err = ccm_init(&ccm, idx, key, sizeof(key), sizeof(pt), 8, 0)) != CRYPT_OK) { - return err; - } - if (ccm_add_nonce(&ccm, nonce, 14) != CRYPT_INVALID_ARG) { - return CRYPT_FAIL_TESTVECTOR; - } - /* ptlen >= 2^16 forces L=3, so a 13-byte nonce no longer fits B_0 (13+3 > 15) */ - if ((err = ccm_init(&ccm, idx, key, sizeof(key), 65536, 8, 0)) != CRYPT_OK) { - return err; - } - if (ccm_add_nonce(&ccm, nonce, 13) != CRYPT_INVALID_ARG) { - return CRYPT_FAIL_TESTVECTOR; - } - /* 12-byte nonce still fits (12+3 == 15) */ - if ((err = ccm_init(&ccm, idx, key, sizeof(key), 65536, 8, 0)) != CRYPT_OK) { - return err; - } - if ((err = ccm_add_nonce(&ccm, nonce, 12)) != CRYPT_OK) { - return err; - } - } - - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/encauth/chachapoly/chacha20poly1305_add_aad.c b/src/encauth/chachapoly/chacha20poly1305_add_aad.c deleted file mode 100644 index dc6b5bb9..00000000 --- a/src/encauth/chachapoly/chacha20poly1305_add_aad.c +++ /dev/null @@ -1,28 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA20POLY1305_MODE - -/** - Add AAD to the ChaCha20Poly1305 state - @param st The ChaCha20Poly1305 state - @param in The additional authentication data to add to the ChaCha20Poly1305 state - @param inlen The length of the ChaCha20Poly1305 data. - @return CRYPT_OK on success - */ -int chacha20poly1305_add_aad(chacha20poly1305_state *st, const unsigned char *in, unsigned long inlen) -{ - int err; - - if (inlen == 0) return CRYPT_OK; /* nothing to do */ - LTC_ARGCHK(st != NULL); - - if (st->aadflg == 0) return CRYPT_ERROR; - if ((err = poly1305_process(&st->poly, in, inlen)) != CRYPT_OK) return err; - st->aadlen += (ulong64)inlen; - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/chachapoly/chacha20poly1305_decrypt.c b/src/encauth/chachapoly/chacha20poly1305_decrypt.c deleted file mode 100644 index e51322a5..00000000 --- a/src/encauth/chachapoly/chacha20poly1305_decrypt.c +++ /dev/null @@ -1,38 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA20POLY1305_MODE - -/** - Decrypt bytes of ciphertext with ChaCha20Poly1305 - @param st The ChaCha20Poly1305 state - @param in The ciphertext - @param inlen The length of the input (octets) - @param out [out] The plaintext (length inlen) - @return CRYPT_OK if successful -*/ -int chacha20poly1305_decrypt(chacha20poly1305_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out) -{ - unsigned char padzero[16] = { 0 }; - unsigned long padlen; - int err; - - LTC_ARGCHK(st != NULL); - - if (st->aadflg) { - padlen = 16 - (unsigned long)(st->aadlen % 16); - if (padlen < 16) { - if ((err = poly1305_process(&st->poly, padzero, padlen)) != CRYPT_OK) return err; - } - st->aadflg = 0; /* no more AAD */ - } - if (st->aadflg) st->aadflg = 0; /* no more AAD */ - if ((err = poly1305_process(&st->poly, in, inlen)) != CRYPT_OK) return err; - if ((err = chacha_crypt(&st->chacha, in, inlen, out)) != CRYPT_OK) return err; - st->ctlen += (ulong64)inlen; - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/chachapoly/chacha20poly1305_done.c b/src/encauth/chachapoly/chacha20poly1305_done.c deleted file mode 100644 index b27ae661..00000000 --- a/src/encauth/chachapoly/chacha20poly1305_done.c +++ /dev/null @@ -1,38 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA20POLY1305_MODE - -/** - Terminate a ChaCha20Poly1305 stream - @param st The ChaCha20Poly1305 state - @param tag [out] The destination for the MAC tag - @param taglen [in/out] The length of the MAC tag - @return CRYPT_OK on success - */ -int chacha20poly1305_done(chacha20poly1305_state *st, unsigned char *tag, unsigned long *taglen) -{ - unsigned char padzero[16] = { 0 }; - unsigned long padlen; - unsigned char buf[16]; - int err; - - LTC_ARGCHK(st != NULL); - - if (!st->openssh_compat) { - padlen = 16 - (unsigned long)(st->ctlen % 16); - if (padlen < 16) { - if ((err = poly1305_process(&st->poly, padzero, padlen)) != CRYPT_OK) return err; - } - STORE64L(st->aadlen, buf); - STORE64L(st->ctlen, buf + 8); - if ((err = poly1305_process(&st->poly, buf, 16)) != CRYPT_OK) return err; - } - if ((err = poly1305_done(&st->poly, tag, taglen)) != CRYPT_OK) return err; - if ((err = chacha_done(&st->chacha)) != CRYPT_OK) return err; - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/chachapoly/chacha20poly1305_encrypt.c b/src/encauth/chachapoly/chacha20poly1305_encrypt.c deleted file mode 100644 index 2a4208e3..00000000 --- a/src/encauth/chachapoly/chacha20poly1305_encrypt.c +++ /dev/null @@ -1,37 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA20POLY1305_MODE - -/** - Encrypt bytes of ciphertext with ChaCha20Poly1305 - @param st The ChaCha20Poly1305 state - @param in The plaintext - @param inlen The length of the input (octets) - @param out [out] The ciphertext (length inlen) - @return CRYPT_OK if successful -*/ -int chacha20poly1305_encrypt(chacha20poly1305_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out) -{ - unsigned char padzero[16] = { 0 }; - unsigned long padlen; - int err; - - LTC_ARGCHK(st != NULL); - - if ((err = chacha_crypt(&st->chacha, in, inlen, out)) != CRYPT_OK) return err; - if (st->aadflg) { - padlen = 16 - (unsigned long)(st->aadlen % 16); - if (padlen < 16) { - if ((err = poly1305_process(&st->poly, padzero, padlen)) != CRYPT_OK) return err; - } - st->aadflg = 0; /* no more AAD */ - } - if ((err = poly1305_process(&st->poly, out, inlen)) != CRYPT_OK) return err; - st->ctlen += (ulong64)inlen; - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/chachapoly/chacha20poly1305_init.c b/src/encauth/chachapoly/chacha20poly1305_init.c deleted file mode 100644 index 14ddb6c1..00000000 --- a/src/encauth/chachapoly/chacha20poly1305_init.c +++ /dev/null @@ -1,21 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA20POLY1305_MODE - -/** - Initialize an ChaCha20Poly1305 context (only the key) - @param st [out] The destination of the ChaCha20Poly1305 state - @param key The secret key - @param keylen The length of the secret key (octets) - @return CRYPT_OK if successful -*/ -int chacha20poly1305_init(chacha20poly1305_state *st, const unsigned char *key, unsigned long keylen) -{ - XMEMSET(st, 0, sizeof(*st)); - return chacha_setup(&st->chacha, key, keylen, 20); -} - -#endif diff --git a/src/encauth/chachapoly/chacha20poly1305_memory.c b/src/encauth/chachapoly/chacha20poly1305_memory.c deleted file mode 100644 index e0f4bd94..00000000 --- a/src/encauth/chachapoly/chacha20poly1305_memory.c +++ /dev/null @@ -1,76 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA20POLY1305_MODE - -/** - Process an entire ChaCha20Poly1305 packet in one call. - @param key The secret key - @param keylen The length of the secret key - @param iv The initialization vector - @param ivlen The length of the initialization vector - @param aad The additional authentication data (header) - @param aadlen The length of the aad - @param in The plaintext - @param inlen The length of the plaintext (ciphertext length is the same) - @param out The ciphertext - @param tag [out] The MAC tag - @param taglen [in/out] The MAC tag length - @param direction Encrypt or Decrypt mode (CHACHA20POLY1305_ENCRYPT or CHACHA20POLY1305_DECRYPT) - @return CRYPT_OK on success - */ -int chacha20poly1305_memory(const unsigned char *key, unsigned long keylen, - const unsigned char *iv, unsigned long ivlen, - const unsigned char *aad, unsigned long aadlen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, - unsigned char *tag, unsigned long *taglen, - int direction) -{ - chacha20poly1305_state st; - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(iv != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(tag != NULL); - LTC_ARGCHK(taglen != NULL); - - if ((err = chacha20poly1305_init(&st, key, keylen)) != CRYPT_OK) { goto LBL_ERR; } - - st.openssh_compat = (direction & CHACHA20POLY1305_OPENSSH_COMPAT) ? 1 : 0; - direction &= ~(CHACHA20POLY1305_OPENSSH_COMPAT); - - if ((err = chacha20poly1305_setiv(&st, iv, ivlen)) != CRYPT_OK) { goto LBL_ERR; } - if (aad && aadlen > 0) { - if ((err = chacha20poly1305_add_aad(&st, aad, aadlen)) != CRYPT_OK) { goto LBL_ERR; } - } - if (direction == CHACHA20POLY1305_ENCRYPT) { - if ((err = chacha20poly1305_encrypt(&st, in, inlen, out)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = chacha20poly1305_done(&st, tag, taglen)) != CRYPT_OK) { goto LBL_ERR; } - } - else if (direction == CHACHA20POLY1305_DECRYPT) { - unsigned char buf[MAXBLOCKSIZE]; - unsigned long buflen = sizeof(buf); - if ((err = chacha20poly1305_decrypt(&st, in, inlen, out)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = chacha20poly1305_done(&st, buf, &buflen)) != CRYPT_OK) { goto LBL_ERR; } - if (buflen != *taglen || XMEM_NEQ(buf, tag, buflen) != 0) { - err = CRYPT_ERROR; - goto LBL_ERR; - } - } - else { - err = CRYPT_INVALID_ARG; - goto LBL_ERR; - } -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&st, sizeof(chacha20poly1305_state)); -#endif - return err; -} - -#endif diff --git a/src/encauth/chachapoly/chacha20poly1305_setiv.c b/src/encauth/chachapoly/chacha20poly1305_setiv.c deleted file mode 100644 index e5937b41..00000000 --- a/src/encauth/chachapoly/chacha20poly1305_setiv.c +++ /dev/null @@ -1,113 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA20POLY1305_MODE - -/** - Set IV + counter data to the ChaCha20Poly1305 state and reset the context - @param st The ChaCha20Poly1305 state - @param iv The IV data to add - @param ivlen The length of the IV (must be 12 or 8, or 24 when LTC_XCHACHA20 is enabled) - @return CRYPT_OK on success - */ -int chacha20poly1305_setiv(chacha20poly1305_state *st, const unsigned char *iv, unsigned long ivlen) -{ - chacha_state tmp_st; - int i, err; - unsigned char polykey[32]; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(iv != NULL); -#ifdef LTC_XCHACHA20 - LTC_ARGCHK(ivlen == 12 || ivlen == 8 || ivlen == 24); -#else - LTC_ARGCHK(ivlen == 12 || ivlen == 8); -#endif - -#ifdef LTC_XCHACHA20 - if (ivlen == 24) { - unsigned char orig_key[32]; - - /* extract the original key from state (stored by chacha_setup via chacha20poly1305_init) */ - STORE32L(st->chacha.input[4], orig_key + 0); - STORE32L(st->chacha.input[5], orig_key + 4); - STORE32L(st->chacha.input[6], orig_key + 8); - STORE32L(st->chacha.input[7], orig_key + 12); - STORE32L(st->chacha.input[8], orig_key + 16); - STORE32L(st->chacha.input[9], orig_key + 20); - STORE32L(st->chacha.input[10], orig_key + 24); - STORE32L(st->chacha.input[11], orig_key + 28); - - /* derive subkey via HChaCha20 and set up state with counter=0 */ - if ((err = xchacha20_setup(&st->chacha, orig_key, 32, iv, 24, 20)) != CRYPT_OK) { - zeromem(orig_key, sizeof(orig_key)); - return err; - } - - /* copy state to temporary for Poly1305 key derivation (counter=0) */ - for (i = 0; i < 16; i++) tmp_st.input[i] = st->chacha.input[i]; - tmp_st.input[12] = 0; - tmp_st.rounds = st->chacha.rounds; - tmp_st.ksleft = 0; - tmp_st.ivlen = 12; /* use IETF counter mode for keystream generation */ - - /* generate Poly1305 key from block 0 */ - if ((err = chacha_keystream(&tmp_st, polykey, 32)) != CRYPT_OK) { - zeromem(orig_key, sizeof(orig_key)); - return err; - } - - /* set main state counter to 1 for encryption */ - st->chacha.input[12] = 1; - st->chacha.ksleft = 0; - - /* initialize Poly1305 */ - if ((err = poly1305_init(&st->poly, polykey, 32)) != CRYPT_OK) { - zeromem(orig_key, sizeof(orig_key)); - return err; - } - st->ctlen = 0; - st->aadlen = 0; - st->aadflg = 1; - - zeromem(orig_key, sizeof(orig_key)); - return CRYPT_OK; - } -#endif - - /* set IV for chacha20 */ - if (ivlen == 12) { - /* IV 96bit */ - if ((err = chacha_ivctr32(&st->chacha, iv, ivlen, 1)) != CRYPT_OK) return err; - } - else { - /* IV 64bit */ - if ((err = chacha_ivctr64(&st->chacha, iv, ivlen, 1)) != CRYPT_OK) return err; - } - - /* copy chacha20 key to temporary state */ - for(i = 0; i < 12; i++) tmp_st.input[i] = st->chacha.input[i]; - tmp_st.rounds = 20; - /* set IV */ - if (ivlen == 12) { - /* IV 32bit */ - if ((err = chacha_ivctr32(&tmp_st, iv, ivlen, 0)) != CRYPT_OK) return err; - } - else { - /* IV 64bit */ - if ((err = chacha_ivctr64(&tmp_st, iv, ivlen, 0)) != CRYPT_OK) return err; - } - /* (re)generate new poly1305 key */ - if ((err = chacha_keystream(&tmp_st, polykey, 32)) != CRYPT_OK) return err; - /* (re)initialise poly1305 */ - if ((err = poly1305_init(&st->poly, polykey, 32)) != CRYPT_OK) return err; - st->ctlen = 0; - st->aadlen = 0; - st->aadflg = 1; - - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/chachapoly/chacha20poly1305_setiv_rfc7905.c b/src/encauth/chachapoly/chacha20poly1305_setiv_rfc7905.c deleted file mode 100644 index 75da634f..00000000 --- a/src/encauth/chachapoly/chacha20poly1305_setiv_rfc7905.c +++ /dev/null @@ -1,30 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA20POLY1305_MODE - -/** - Set IV + counter data (with RFC7905-magic) to the ChaCha20Poly1305 state and reset the context - @param st The ChaCha20Poly1305 state - @param iv The IV data to add - @param ivlen The length of the IV (must be 12 or 8) - @param sequence_number 64bit sequence number which is incorporated into IV as described in RFC7905 - @return CRYPT_OK on success - */ -int chacha20poly1305_setiv_rfc7905(chacha20poly1305_state *st, const unsigned char *iv, unsigned long ivlen, ulong64 sequence_number) -{ - int i; - unsigned char combined_iv[12] = { 0 }; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(iv != NULL); - LTC_ARGCHK(ivlen == 12); - - STORE64L(sequence_number, combined_iv + 4); - for (i = 0; i < 12; i++) combined_iv[i] = iv[i] ^ combined_iv[i]; - return chacha20poly1305_setiv(st, combined_iv, 12); -} - -#endif diff --git a/src/encauth/chachapoly/chacha20poly1305_test.c b/src/encauth/chachapoly/chacha20poly1305_test.c deleted file mode 100644 index 902985c3..00000000 --- a/src/encauth/chachapoly/chacha20poly1305_test.c +++ /dev/null @@ -1,224 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA20POLY1305_MODE - -int chacha20poly1305_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - chacha20poly1305_state st1, st2; - unsigned char k[] = { 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f }; - unsigned char i12[] = { 0x07, 0x00, 0x00, 0x00, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47 }; - unsigned char i8[] = { 0x07, 0x00, 0x00, 0x00, 0x40, 0x41, 0x42, 0x43 }; - unsigned char aad[] = { 0x50, 0x51, 0x52, 0x53, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7 }; - unsigned char enc[] = { 0xD3, 0x1A, 0x8D, 0x34, 0x64, 0x8E, 0x60, 0xDB, 0x7B, 0x86, 0xAF, 0xBC, 0x53, 0xEF, 0x7E, 0xC2, - 0xA4, 0xAD, 0xED, 0x51, 0x29, 0x6E, 0x08, 0xFE, 0xA9, 0xE2, 0xB5, 0xA7, 0x36, 0xEE, 0x62, 0xD6, - 0x3D, 0xBE, 0xA4, 0x5E, 0x8C, 0xA9, 0x67, 0x12, 0x82, 0xFA, 0xFB, 0x69, 0xDA, 0x92, 0x72, 0x8B, - 0x1A, 0x71, 0xDE, 0x0A, 0x9E, 0x06, 0x0B, 0x29, 0x05, 0xD6, 0xA5, 0xB6, 0x7E, 0xCD, 0x3B, 0x36, - 0x92, 0xDD, 0xBD, 0x7F, 0x2D, 0x77, 0x8B, 0x8C, 0x98, 0x03, 0xAE, 0xE3, 0x28, 0x09, 0x1B, 0x58, - 0xFA, 0xB3, 0x24, 0xE4, 0xFA, 0xD6, 0x75, 0x94, 0x55, 0x85, 0x80, 0x8B, 0x48, 0x31, 0xD7, 0xBC, - 0x3F, 0xF4, 0xDE, 0xF0, 0x8E, 0x4B, 0x7A, 0x9D, 0xE5, 0x76, 0xD2, 0x65, 0x86, 0xCE, 0xC6, 0x4B, - 0x61, 0x16 }; - unsigned char tag[] = { 0x1A, 0xE1, 0x0B, 0x59, 0x4F, 0x09, 0xE2, 0x6A, 0x7E, 0x90, 0x2E, 0xCB, 0xD0, 0x60, 0x06, 0x91 }; - char m[] = "Ladies and Gentlemen of the class of '99: If I could offer you only one tip for the future, sunscreen would be it."; - unsigned long mlen = XSTRLEN(m); - unsigned long len; - unsigned char rfc7905_pt[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; - unsigned char rfc7905_enc[] = { 0xE4, 0x62, 0x85, 0xB4, 0x29, 0x95, 0x34, 0x96, 0xAB, 0xFB, 0x67, 0xCD, 0xAE, 0xAC, 0x94, 0x1E }; - unsigned char rfc7905_tag[] = { 0x16, 0x2C, 0x92, 0x48, 0x2A, 0xDB, 0xD3, 0x5D, 0x48, 0xBE, 0xC6, 0xFF, 0x10, 0x9C, 0xBA, 0xE4 }; - unsigned char ct[1000], pt[1000], emac[16], dmac[16]; - int err; - - /* encrypt IV 96bit */ - if ((err = chacha20poly1305_init(&st1, k, sizeof(k))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_setiv(&st1, i12, sizeof(i12))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_add_aad(&st1, aad, sizeof(aad))) != CRYPT_OK) return err; - /* encrypt piece by piece */ - if ((err = chacha20poly1305_encrypt(&st1, (unsigned char *)m, 25, ct)) != CRYPT_OK) return err; - if ((err = chacha20poly1305_encrypt(&st1, (unsigned char *)m + 25, 10, ct + 25)) != CRYPT_OK) return err; - if ((err = chacha20poly1305_encrypt(&st1, (unsigned char *)m + 35, 35, ct + 35)) != CRYPT_OK) return err; - if ((err = chacha20poly1305_encrypt(&st1, (unsigned char *)m + 70, 5, ct + 70)) != CRYPT_OK) return err; - if ((err = chacha20poly1305_encrypt(&st1, (unsigned char *)m + 75, 5, ct + 75)) != CRYPT_OK) return err; - if ((err = chacha20poly1305_encrypt(&st1, (unsigned char *)m + 80, mlen - 80, ct + 80)) != CRYPT_OK) return err; - len = sizeof(emac); - if ((err = chacha20poly1305_done(&st1, emac, &len)) != CRYPT_OK) return err; - - if (ltc_compare_testvector(ct, mlen, enc, sizeof(enc), "ENC-CT", 1) != 0) return CRYPT_FAIL_TESTVECTOR; - if (ltc_compare_testvector(emac, len, tag, sizeof(tag), "ENC-TAG", 2) != 0) return CRYPT_FAIL_TESTVECTOR; - - /* decrypt IV 96bit */ - if ((err = chacha20poly1305_init(&st2, k, sizeof(k))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_setiv(&st2, i12, sizeof(i12))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_add_aad(&st2, aad, sizeof(aad))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_decrypt(&st2, ct, 21, pt)) != CRYPT_OK) return err; - if ((err = chacha20poly1305_decrypt(&st2, ct + 21, mlen - 21, pt + 21)) != CRYPT_OK) return err; - len = sizeof(dmac); - if ((err = chacha20poly1305_done(&st2, dmac, &len)) != CRYPT_OK) return err; - - if (ltc_compare_testvector(pt, mlen, m, mlen, "DEC-PT", 3) != 0) return CRYPT_FAIL_TESTVECTOR; - if (ltc_compare_testvector(dmac, len, tag, sizeof(tag), "DEC-TAG", 4) != 0) return CRYPT_FAIL_TESTVECTOR; - - /* chacha20poly1305_memory - encrypt */ - len = sizeof(emac); - if ((err = chacha20poly1305_memory(k, sizeof(k), i12, sizeof(i12), aad, sizeof(aad), (unsigned char *)m, - mlen, ct, emac, &len, CHACHA20POLY1305_ENCRYPT)) != CRYPT_OK) return err; - if (ltc_compare_testvector(ct, mlen, enc, sizeof(enc), "ENC-CT2", 1) != 0) return CRYPT_FAIL_TESTVECTOR; - if (ltc_compare_testvector(emac, len, tag, sizeof(tag), "ENC-TAG2", 2) != 0) return CRYPT_FAIL_TESTVECTOR; - - /* chacha20poly1305_memory - decrypt */ - len = sizeof(dmac); - XMEMCPY(dmac, tag, sizeof(tag)); - if ((err = chacha20poly1305_memory(k, sizeof(k), i12, sizeof(i12), aad, sizeof(aad), - ct, mlen, pt, dmac, &len, CHACHA20POLY1305_DECRYPT)) != CRYPT_OK) return err; - if (ltc_compare_testvector(pt, mlen, m, mlen, "DEC-PT2", 3) != 0) return CRYPT_FAIL_TESTVECTOR; - - /* encrypt - rfc7905 */ - if ((err = chacha20poly1305_init(&st1, k, sizeof(k))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_setiv_rfc7905(&st1, i12, sizeof(i12), CONST64(0x1122334455667788))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_add_aad(&st1, aad, sizeof(aad))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_encrypt(&st1, rfc7905_pt, 16, ct)) != CRYPT_OK) return err; - len = sizeof(emac); - if ((err = chacha20poly1305_done(&st1, emac, &len)) != CRYPT_OK) return err; - - if (ltc_compare_testvector(ct, 16, rfc7905_enc, 16, "ENC-CT3", 1) != 0) return CRYPT_FAIL_TESTVECTOR; - if (ltc_compare_testvector(emac, len, rfc7905_tag, 16, "ENC-TAG3", 2) != 0) return CRYPT_FAIL_TESTVECTOR; - - /* decrypt - rfc7905 */ - if ((err = chacha20poly1305_init(&st1, k, sizeof(k))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_setiv_rfc7905(&st1, i12, sizeof(i12), CONST64(0x1122334455667788))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_add_aad(&st1, aad, sizeof(aad))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_decrypt(&st1, ct, 16, pt)) != CRYPT_OK) return err; - len = sizeof(dmac); - if ((err = chacha20poly1305_done(&st1, dmac, &len)) != CRYPT_OK) return err; - - if (ltc_compare_testvector(pt, 16, rfc7905_pt, 16, "DEC-CT3", 1) != 0) return CRYPT_FAIL_TESTVECTOR; - if (ltc_compare_testvector(dmac, len, rfc7905_tag, 16, "DEC-TAG3", 2) != 0) return CRYPT_FAIL_TESTVECTOR; - - /* encrypt IV 64bit */ - if ((err = chacha20poly1305_init(&st1, k, sizeof(k))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_setiv(&st1, i8, sizeof(i8))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_add_aad(&st1, aad, sizeof(aad))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_encrypt(&st1, (unsigned char *)m, mlen, ct)) != CRYPT_OK) return err; - len = sizeof(emac); - if ((err = chacha20poly1305_done(&st1, emac, &len)) != CRYPT_OK) return err; - - /* decrypt IV 64bit */ - if ((err = chacha20poly1305_init(&st2, k, sizeof(k))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_setiv(&st2, i8, sizeof(i8))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_add_aad(&st2, aad, sizeof(aad))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_decrypt(&st2, ct, mlen, pt)) != CRYPT_OK) return err; - len = sizeof(dmac); - if ((err = chacha20poly1305_done(&st2, dmac, &len)) != CRYPT_OK) return err; - - if (ltc_compare_testvector(pt, mlen, m, mlen, "DEC-PT4", 1) != 0) return CRYPT_FAIL_TESTVECTOR; - if (ltc_compare_testvector(dmac, len, emac, len, "DEC-TAG4", 2) != 0) return CRYPT_FAIL_TESTVECTOR; - - /* wycheproof failing test - https://github.com/libtom/libtomcrypt/pull/451 */ - { - unsigned char key[] = { 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff, - 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff }; - unsigned char iv[] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b }; - unsigned char valid_tag[] = { 0xa3,0xe3,0xfd,0xf9,0xfb,0xa6,0x86,0x1b,0x5a,0xd2,0x60,0x7f,0x40,0xb7,0xf4,0x47 }; - unsigned char invalid_tag[] = { 0xa2,0xe3,0xfd,0xf9,0xfb,0xa6,0x86,0x1b,0x5a,0xd2,0x60,0x7f,0x40,0xb7,0xf4,0x47 }; - unsigned char waad[] = { 0x61,0x61,0x64 }; - unsigned char wct[] = { 0x00 }; - unsigned char wpt[20] = { 0 }; - unsigned char wtag[20] = { 0 }; - unsigned long taglen; - - /* encrypt */ - taglen = sizeof(wtag); - err = chacha20poly1305_memory(key, sizeof(key), iv, sizeof(iv), waad, sizeof(waad), - wpt, 0, wct, wtag, &taglen, CHACHA20POLY1305_ENCRYPT); - if (err != CRYPT_OK) return CRYPT_FAIL_TESTVECTOR; - if (ltc_compare_testvector(wtag, taglen, valid_tag, sizeof(valid_tag), "WYCH", 1) != 0) return CRYPT_FAIL_TESTVECTOR; - - /* VALID tag */ - taglen = sizeof(valid_tag); - err = chacha20poly1305_memory(key, sizeof(key), iv, sizeof(iv), waad, sizeof(waad), - wpt, 0, wct, valid_tag, &taglen, CHACHA20POLY1305_DECRYPT); - if (err != CRYPT_OK) return CRYPT_FAIL_TESTVECTOR; - - /* INVALID tag */ - taglen = sizeof(invalid_tag); - err = chacha20poly1305_memory(key, sizeof(key), iv, sizeof(iv), waad, sizeof(waad), - wpt, 0, wct, invalid_tag, &taglen, CHACHA20POLY1305_DECRYPT); - if (err == CRYPT_OK) { - return CRYPT_FAIL_TESTVECTOR; /* should fail */ - } - } - -#ifdef LTC_XCHACHA20 - /* XChaCha20-Poly1305 AEAD test (draft-irtf-cfrg-xchacha, Appendix A.3.1) */ - { - unsigned char xk[] = { 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, - 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f }; - unsigned char xi24[] = { 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b, - 0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57 }; - unsigned char xaad[] = { 0x50,0x51,0x52,0x53,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7 }; - unsigned char xpt[] = { 0x4c,0x61,0x64,0x69,0x65,0x73,0x20,0x61,0x6e,0x64,0x20,0x47,0x65,0x6e,0x74,0x6c, - 0x65,0x6d,0x65,0x6e,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x63,0x6c,0x61,0x73, - 0x73,0x20,0x6f,0x66,0x20,0x27,0x39,0x39,0x3a,0x20,0x49,0x66,0x20,0x49,0x20,0x63, - 0x6f,0x75,0x6c,0x64,0x20,0x6f,0x66,0x66,0x65,0x72,0x20,0x79,0x6f,0x75,0x20,0x6f, - 0x6e,0x6c,0x79,0x20,0x6f,0x6e,0x65,0x20,0x74,0x69,0x70,0x20,0x66,0x6f,0x72,0x20, - 0x74,0x68,0x65,0x20,0x66,0x75,0x74,0x75,0x72,0x65,0x2c,0x20,0x73,0x75,0x6e,0x73, - 0x63,0x72,0x65,0x65,0x6e,0x20,0x77,0x6f,0x75,0x6c,0x64,0x20,0x62,0x65,0x20,0x69, - 0x74,0x2e }; - unsigned char xenc[] = { 0xbd,0x6d,0x17,0x9d,0x3e,0x83,0xd4,0x3b,0x95,0x76,0x57,0x94,0x93,0xc0,0xe9,0x39, - 0x57,0x2a,0x17,0x00,0x25,0x2b,0xfa,0xcc,0xbe,0xd2,0x90,0x2c,0x21,0x39,0x6c,0xbb, - 0x73,0x1c,0x7f,0x1b,0x0b,0x4a,0xa6,0x44,0x0b,0xf3,0xa8,0x2f,0x4e,0xda,0x7e,0x39, - 0xae,0x64,0xc6,0x70,0x8c,0x54,0xc2,0x16,0xcb,0x96,0xb7,0x2e,0x12,0x13,0xb4,0x52, - 0x2f,0x8c,0x9b,0xa4,0x0d,0xb5,0xd9,0x45,0xb1,0x1b,0x69,0xb9,0x82,0xc1,0xbb,0x9e, - 0x3f,0x3f,0xac,0x2b,0xc3,0x69,0x48,0x8f,0x76,0xb2,0x38,0x35,0x65,0xd3,0xff,0xf9, - 0x21,0xf9,0x66,0x4c,0x97,0x63,0x7d,0xa9,0x76,0x88,0x12,0xf6,0x15,0xc6,0x8b,0x13, - 0xb5,0x2e }; - unsigned char xtag[] = { 0xc0,0x87,0x59,0x24,0xc1,0xc7,0x98,0x79,0x47,0xde,0xaf,0xd8,0x78,0x0a,0xcf,0x49 }; - unsigned long xptlen = sizeof(xpt); - - /* encrypt with incremental API */ - if ((err = chacha20poly1305_init(&st1, xk, sizeof(xk))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_setiv(&st1, xi24, sizeof(xi24))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_add_aad(&st1, xaad, sizeof(xaad))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_encrypt(&st1, xpt, xptlen, ct)) != CRYPT_OK) return err; - len = sizeof(emac); - if ((err = chacha20poly1305_done(&st1, emac, &len)) != CRYPT_OK) return err; - - if (ltc_compare_testvector(ct, xptlen, xenc, sizeof(xenc), "XCHACHA20POLY1305-ENC-CT", 1) != 0) return CRYPT_FAIL_TESTVECTOR; - if (ltc_compare_testvector(emac, len, xtag, sizeof(xtag), "XCHACHA20POLY1305-ENC-TAG", 2) != 0) return CRYPT_FAIL_TESTVECTOR; - - /* decrypt with incremental API */ - if ((err = chacha20poly1305_init(&st2, xk, sizeof(xk))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_setiv(&st2, xi24, sizeof(xi24))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_add_aad(&st2, xaad, sizeof(xaad))) != CRYPT_OK) return err; - if ((err = chacha20poly1305_decrypt(&st2, ct, xptlen, pt)) != CRYPT_OK) return err; - len = sizeof(dmac); - if ((err = chacha20poly1305_done(&st2, dmac, &len)) != CRYPT_OK) return err; - - if (ltc_compare_testvector(pt, xptlen, xpt, xptlen, "XCHACHA20POLY1305-DEC-PT", 3) != 0) return CRYPT_FAIL_TESTVECTOR; - if (ltc_compare_testvector(dmac, len, xtag, sizeof(xtag), "XCHACHA20POLY1305-DEC-TAG", 4) != 0) return CRYPT_FAIL_TESTVECTOR; - - /* chacha20poly1305_memory - encrypt with 24-byte IV */ - len = sizeof(emac); - if ((err = chacha20poly1305_memory(xk, sizeof(xk), xi24, sizeof(xi24), xaad, sizeof(xaad), xpt, - xptlen, ct, emac, &len, CHACHA20POLY1305_ENCRYPT)) != CRYPT_OK) return err; - if (ltc_compare_testvector(ct, xptlen, xenc, sizeof(xenc), "XCHACHA20POLY1305-MEM-CT", 1) != 0) return CRYPT_FAIL_TESTVECTOR; - if (ltc_compare_testvector(emac, len, xtag, sizeof(xtag), "XCHACHA20POLY1305-MEM-TAG", 2) != 0) return CRYPT_FAIL_TESTVECTOR; - - /* chacha20poly1305_memory - decrypt with 24-byte IV */ - len = sizeof(dmac); - XMEMCPY(dmac, xtag, sizeof(xtag)); - if ((err = chacha20poly1305_memory(xk, sizeof(xk), xi24, sizeof(xi24), xaad, sizeof(xaad), - ct, xptlen, pt, dmac, &len, CHACHA20POLY1305_DECRYPT)) != CRYPT_OK) return err; - if (ltc_compare_testvector(pt, xptlen, xpt, xptlen, "XCHACHA20POLY1305-MEM-PT", 3) != 0) return CRYPT_FAIL_TESTVECTOR; - } -#endif - - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/encauth/eax/eax_addheader.c b/src/encauth/eax/eax_addheader.c deleted file mode 100644 index a6b8f76c..00000000 --- a/src/encauth/eax/eax_addheader.c +++ /dev/null @@ -1,26 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/** - @file eax_addheader.c - EAX implementation, add meta-data, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_EAX_MODE - -/** - add header (metadata) to the stream - @param eax The current EAX state - @param header The header (meta-data) data you wish to add to the state - @param length The length of the header data - @return CRYPT_OK if successful -*/ -int eax_addheader(eax_state *eax, const unsigned char *header, - unsigned long length) -{ - LTC_ARGCHK(eax != NULL); - LTC_ARGCHK(header != NULL); - return omac_process(&eax->headeromac, header, length); -} - -#endif diff --git a/src/encauth/eax/eax_decrypt.c b/src/encauth/eax/eax_decrypt.c deleted file mode 100644 index cc03c5c5..00000000 --- a/src/encauth/eax/eax_decrypt.c +++ /dev/null @@ -1,38 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file eax_decrypt.c - EAX implementation, decrypt block, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_EAX_MODE - -/** - Decrypt data with the EAX protocol - @param eax The EAX state - @param ct The ciphertext - @param pt [out] The plaintext - @param length The length (octets) of the ciphertext - @return CRYPT_OK if successful -*/ -int eax_decrypt(eax_state *eax, const unsigned char *ct, unsigned char *pt, - unsigned long length) -{ - int err; - - LTC_ARGCHK(eax != NULL); - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - - /* omac ciphertext */ - if ((err = omac_process(&eax->ctomac, ct, length)) != CRYPT_OK) { - return err; - } - - /* decrypt */ - return ctr_decrypt(ct, pt, length, &eax->ctr); -} - -#endif diff --git a/src/encauth/eax/eax_decrypt_verify_memory.c b/src/encauth/eax/eax_decrypt_verify_memory.c deleted file mode 100644 index 9c4203a0..00000000 --- a/src/encauth/eax/eax_decrypt_verify_memory.c +++ /dev/null @@ -1,104 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file eax_decrypt_verify_memory.c - EAX implementation, decrypt block of memory, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_EAX_MODE - -/** - Decrypt a block of memory and verify the provided MAC tag with EAX - @param cipher The index of the cipher desired - @param key The secret key - @param keylen The length of the key (octets) - @param nonce The nonce data (use once) for the session - @param noncelen The length of the nonce data. - @param header The session header data - @param headerlen The length of the header (octets) - @param ct The ciphertext - @param ctlen The length of the ciphertext (octets) - @param pt [out] The plaintext - @param tag The authentication tag provided by the encoder - @param taglen [in/out] The length of the tag (octets) - @param stat [out] The result of the decryption (1==valid tag, 0==invalid) - @return CRYPT_OK if successful regardless of the resulting tag comparison -*/ -int eax_decrypt_verify_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *header, unsigned long headerlen, - const unsigned char *ct, unsigned long ctlen, - unsigned char *pt, - const unsigned char *tag, unsigned long taglen, - int *stat) -{ - int err; - eax_state *eax; - unsigned char *buf; - unsigned long buflen; - - /* stat is cleared before anything else can return, it stays 0 unless the tag is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(tag != NULL); - - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - /* NOTE: zero-length tag is legal (it just provides no authenticity) */ - if (taglen > (unsigned long)cipher_descriptor[cipher].block_length) { - return CRYPT_INVALID_ARG; - } - - /* allocate ram */ - buf = XMALLOC(taglen); - eax = XMALLOC(sizeof(*eax)); - if (eax == NULL || buf == NULL) { - if (eax != NULL) { - XFREE(eax); - } - if (buf != NULL) { - XFREE(buf); - } - return CRYPT_MEM; - } - - if ((err = eax_init(eax, cipher, key, keylen, nonce, noncelen, header, headerlen)) != CRYPT_OK) { - goto LBL_ERR; - } - - if ((err = eax_decrypt(eax, ct, pt, ctlen)) != CRYPT_OK) { - goto LBL_ERR; - } - - buflen = taglen; - if ((err = eax_done(eax, buf, &buflen)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* compare tags */ - if (buflen >= taglen && XMEM_NEQ(buf, tag, taglen) == 0) { - *stat = 1; - } - - err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(buf, taglen); - zeromem(eax, sizeof(*eax)); -#endif - - XFREE(eax); - XFREE(buf); - - return err; -} - -#endif diff --git a/src/encauth/eax/eax_encrypt.c b/src/encauth/eax/eax_encrypt.c deleted file mode 100644 index dba32390..00000000 --- a/src/encauth/eax/eax_encrypt.c +++ /dev/null @@ -1,39 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file eax_encrypt.c - EAX implementation, encrypt block by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_EAX_MODE - -/** - Encrypt with EAX a block of data. - @param eax The EAX state - @param pt The plaintext to encrypt - @param ct [out] The ciphertext as encrypted - @param length The length of the plaintext (octets) - @return CRYPT_OK if successful -*/ -int eax_encrypt(eax_state *eax, const unsigned char *pt, unsigned char *ct, - unsigned long length) -{ - int err; - - LTC_ARGCHK(eax != NULL); - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - - /* encrypt */ - if ((err = ctr_encrypt(pt, ct, length, &eax->ctr)) != CRYPT_OK) { - return err; - } - - /* omac ciphertext */ - return omac_process(&eax->ctomac, ct, length); -} - -#endif - diff --git a/src/encauth/eax/eax_encrypt_authenticate_memory.c b/src/encauth/eax/eax_encrypt_authenticate_memory.c deleted file mode 100644 index 76aeec2b..00000000 --- a/src/encauth/eax/eax_encrypt_authenticate_memory.c +++ /dev/null @@ -1,70 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file eax_encrypt_authenticate_memory.c - EAX implementation, encrypt a block of memory, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_EAX_MODE - -/** - EAX encrypt and produce an authentication tag - @param cipher The index of the cipher desired - @param key The secret key to use - @param keylen The length of the secret key (octets) - @param nonce The session nonce [use once] - @param noncelen The length of the nonce - @param header The header for the session - @param headerlen The length of the header (octets) - @param pt The plaintext - @param ptlen The length of the plaintext (octets) - @param ct [out] The ciphertext - @param tag [out] The destination tag - @param taglen [in/out] The max size and resulting size of the authentication tag - @return CRYPT_OK if successful -*/ -int eax_encrypt_authenticate_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *header, unsigned long headerlen, - const unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - unsigned char *tag, unsigned long *taglen) -{ - int err; - eax_state *eax; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(tag != NULL); - LTC_ARGCHK(taglen != NULL); - - eax = XMALLOC(sizeof(*eax)); - - if ((err = eax_init(eax, cipher, key, keylen, nonce, noncelen, header, headerlen)) != CRYPT_OK) { - goto LBL_ERR; - } - - if ((err = eax_encrypt(eax, pt, ct, ptlen)) != CRYPT_OK) { - goto LBL_ERR; - } - - if ((err = eax_done(eax, tag, taglen)) != CRYPT_OK) { - goto LBL_ERR; - } - - err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(eax, sizeof(*eax)); -#endif - - XFREE(eax); - - return err; -} - -#endif diff --git a/src/encauth/gcm/gcm_add_aad.c b/src/encauth/gcm/gcm_add_aad.c deleted file mode 100644 index 77577647..00000000 --- a/src/encauth/gcm/gcm_add_aad.c +++ /dev/null @@ -1,109 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file gcm_add_aad.c - GCM implementation, Add AAD data to the stream, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_GCM_MODE - -/** - Add AAD to the GCM state - @param gcm The GCM state - @param adata The additional authentication data to add to the GCM state - @param adatalen The length of the AAD data. - @return CRYPT_OK on success - */ -int gcm_add_aad(gcm_state *gcm, - const unsigned char *adata, unsigned long adatalen) -{ - unsigned long x; -#ifdef LTC_FAST - unsigned long y; -#endif - - LTC_ARGCHK(gcm != NULL); - if (adatalen > 0) { - LTC_ARGCHK(adata != NULL); - } - - if (gcm->buflen > 16 || gcm->buflen < 0) { - return CRYPT_INVALID_ARG; - } - - /* in IV mode? */ - if (gcm->mode == LTC_GCM_MODE_IV) { - /* IV length must be > 0 */ - if (gcm->buflen == 0 && gcm->totlen == 0) return CRYPT_ERROR; - /* let's process the IV */ - if (gcm->ivmode || gcm->buflen != 12) { - for (x = 0; x < (unsigned long)gcm->buflen; x++) { - gcm->X[x] ^= gcm->buf[x]; - } - if (gcm->buflen) { - gcm->totlen += gcm->buflen * CONST64(8); - gcm_mult_h(gcm, gcm->X); - } - - /* mix in the length */ - zeromem(gcm->buf, 8); - STORE64H(gcm->totlen, gcm->buf+8); - for (x = 0; x < 16; x++) { - gcm->X[x] ^= gcm->buf[x]; - } - gcm_mult_h(gcm, gcm->X); - - /* copy counter out */ - XMEMCPY(gcm->Y, gcm->X, 16); - zeromem(gcm->X, 16); - } else { - XMEMCPY(gcm->Y, gcm->buf, 12); - gcm->Y[12] = 0; - gcm->Y[13] = 0; - gcm->Y[14] = 0; - gcm->Y[15] = 1; - } - XMEMCPY(gcm->Y_0, gcm->Y, 16); - zeromem(gcm->buf, 16); - gcm->buflen = 0; - gcm->totlen = 0; - gcm->mode = LTC_GCM_MODE_AAD; - } - - if (gcm->mode != LTC_GCM_MODE_AAD || gcm->buflen >= 16) { - return CRYPT_INVALID_ARG; - } - - x = 0; -#ifdef LTC_FAST - if (gcm->buflen == 0 && adatalen > 15) { - for (x = 0; x < (adatalen & ~15); x += 16) { - for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2(&gcm->X[y], &adata[x + y]); - } - gcm_mult_h(gcm, gcm->X); - gcm->totlen += 128; - } - adata += x; - } -#endif - - - /* start adding AAD data to the state */ - for (; x < adatalen; x++) { - gcm->X[gcm->buflen++] ^= *adata++; - - if (gcm->buflen == 16) { - /* GF mult it */ - gcm_mult_h(gcm, gcm->X); - gcm->buflen = 0; - gcm->totlen += 128; - } - } - - return CRYPT_OK; -} -#endif - diff --git a/src/encauth/gcm/gcm_add_iv.c b/src/encauth/gcm/gcm_add_iv.c deleted file mode 100644 index 7b5446e5..00000000 --- a/src/encauth/gcm/gcm_add_iv.c +++ /dev/null @@ -1,76 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file gcm_add_iv.c - GCM implementation, add IV data to the state, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_GCM_MODE - -/** - Add IV data to the GCM state - @param gcm The GCM state - @param IV The initial value data to add - @param IVlen The length of the IV - @return CRYPT_OK on success - */ -int gcm_add_iv(gcm_state *gcm, - const unsigned char *IV, unsigned long IVlen) -{ - unsigned long x, y; - - LTC_ARGCHK(gcm != NULL); - if (IVlen > 0) { - LTC_ARGCHK(IV != NULL); - } - - /* must be in IV mode */ - if (gcm->mode != LTC_GCM_MODE_IV) { - return CRYPT_INVALID_ARG; - } - - if (gcm->buflen >= 16 || gcm->buflen < 0) { - return CRYPT_INVALID_ARG; - } - - /* trip the ivmode flag */ - if (IVlen + gcm->buflen > 12) { - gcm->ivmode |= 1; - } - - x = 0; -#ifdef LTC_FAST - if (gcm->buflen == 0) { - for (x = 0; x < (IVlen & ~15); x += 16) { - for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2(&gcm->X[y], &IV[x + y]); - } - gcm_mult_h(gcm, gcm->X); - gcm->totlen += 128; - } - IV += x; - } -#endif - - /* start adding IV data to the state */ - for (; x < IVlen; x++) { - gcm->buf[gcm->buflen++] = *IV++; - - if (gcm->buflen == 16) { - /* GF mult it */ - for (y = 0; y < 16; y++) { - gcm->X[y] ^= gcm->buf[y]; - } - gcm_mult_h(gcm, gcm->X); - gcm->buflen = 0; - gcm->totlen += 128; - } - } - - return CRYPT_OK; -} - -#endif - diff --git a/src/encauth/gcm/gcm_done.c b/src/encauth/gcm/gcm_done.c deleted file mode 100644 index 5e135d14..00000000 --- a/src/encauth/gcm/gcm_done.c +++ /dev/null @@ -1,76 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file gcm_done.c - GCM implementation, Terminate the stream, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_GCM_MODE - -/** - Terminate a GCM stream - @param gcm The GCM state - @param tag [out] The destination for the MAC tag - @param taglen [in/out] The length of the MAC tag - @return CRYPT_OK on success - */ -int gcm_done(gcm_state *gcm, - unsigned char *tag, unsigned long *taglen) -{ - unsigned long x; - int err; - - LTC_ARGCHK(gcm != NULL); - LTC_ARGCHK(tag != NULL); - LTC_ARGCHK(taglen != NULL); - - if (gcm->buflen > 16 || gcm->buflen < 0) { - return CRYPT_INVALID_ARG; - } - - if (gcm->mode == LTC_GCM_MODE_IV) { - /* let's process the IV */ - if ((err = gcm_add_aad(gcm, NULL, 0)) != CRYPT_OK) return err; - } - - if (gcm->mode == LTC_GCM_MODE_AAD) { - /* let's process the AAD */ - if ((err = gcm_process(gcm, NULL, 0, NULL, 0)) != CRYPT_OK) return err; - } - - if (gcm->mode != LTC_GCM_MODE_TEXT) { - return CRYPT_INVALID_ARG; - } - - /* handle remaining ciphertext */ - if (gcm->buflen) { - gcm->pttotlen += gcm->buflen * CONST64(8); - gcm_mult_h(gcm, gcm->X); - } - - /* length */ - STORE64H(gcm->totlen, gcm->buf); - STORE64H(gcm->pttotlen, gcm->buf+8); - for (x = 0; x < 16; x++) { - gcm->X[x] ^= gcm->buf[x]; - } - gcm_mult_h(gcm, gcm->X); - - /* encrypt original counter */ - if ((err = ecb_encrypt_block(gcm->Y_0, gcm->buf, &gcm->K)) != CRYPT_OK) { - return err; - } - for (x = 0; x < 16 && x < *taglen; x++) { - tag[x] = gcm->buf[x] ^ gcm->X[x]; - } - *taglen = x; - - ecb_done(&gcm->K); - - return CRYPT_OK; -} - -#endif - diff --git a/src/encauth/gcm/gcm_gf_mult.c b/src/encauth/gcm/gcm_gf_mult.c deleted file mode 100644 index fb694a73..00000000 --- a/src/encauth/gcm/gcm_gf_mult.c +++ /dev/null @@ -1,505 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file gcm_gf_mult.c - GCM implementation, do the GF mult, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#if defined(LTC_GCM_MODE) || defined(LTC_LRW_MODE) || defined(LTC_GCM_SIV_MODE) -#if defined(LTC_GCM_PCLMUL) - -#define LTC_GCM_PCLMUL_TARGET LTC_TARGET("pclmul,ssse3") - -#if defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wcast-align" -#pragma GCC diagnostic ignored "-Wdeclaration-after-statement" -#endif -#if defined(_MSC_VER) -#include -#else -#include -#endif -#include -#include -#include -#if defined(__GNUC__) -#pragma GCC diagnostic pop -#endif - -#if !defined (LTC_S_X86_CPUID) -#define LTC_S_X86_CPUID -static LTC_INLINE void s_x86_cpuid(int* regs, int leaf) -{ -#if defined _MSC_VER - __cpuid(regs, leaf); -#else - int a, b, c, d; - - a = leaf; - b = c = d = 0; - __asm__ volatile ("cpuid" - :"=a"(a), "=b"(b), "=c"(c), "=d"(d) - :"a"(a), "c"(c) - ); - regs[0] = a; - regs[1] = b; - regs[2] = c; - regs[3] = d; -#endif -} -#endif /* LTC_S_X86_CPUID */ - -static LTC_INLINE int s_pclmul_is_supported(void) -{ - static int initialized = 0, is_supported = 0; - - if (initialized == 0) { - int regs[4]; - s_x86_cpuid(regs, 1); - /* Test CPUID.1.0.ECX[1] (PCLMUL) and CPUID.1.0.ECX[9] (SSSE3) */ - is_supported = ((regs[2] >> 1) & 1) && ((regs[2] >> 9) & 1); - initialized = 1; - } - - return is_supported; -} - -/* - * 128x128-bit binary polynomial multiplication for Intel x86 and x86_64 - * Based on "Intel Carry-Less Multiplication Instruction and its Usage for - * Computing the GCM Mode", Shay Gueron, Michael E. Kounavis - * https://cdrdv2-public.intel.com/836172/clmul-wp-rev-2-02-2014-04-20.pdf - */ -LTC_GCM_PCLMUL_TARGET -static void s_gfmul_pclmul(__m128i a, __m128i b, __m128i *res){ - /* Page 25. Figure 5. Code Sample - Performing Ghash Using Algorithms 1 and 5 (C) */ - __m128i /*tmp0, tmp1,*/ tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9; - tmp3 = _mm_clmulepi64_si128(a, b, 0x00); - tmp4 = _mm_clmulepi64_si128(a, b, 0x10); - tmp5 = _mm_clmulepi64_si128(a, b, 0x01); - tmp6 = _mm_clmulepi64_si128(a, b, 0x11); - tmp4 = _mm_xor_si128(tmp4, tmp5); - tmp5 = _mm_slli_si128(tmp4, 8); - tmp4 = _mm_srli_si128(tmp4, 8); - tmp3 = _mm_xor_si128(tmp3, tmp5); - tmp6 = _mm_xor_si128(tmp6, tmp4); - tmp7 = _mm_srli_epi32(tmp3, 31); - tmp8 = _mm_srli_epi32(tmp6, 31); - tmp3 = _mm_slli_epi32(tmp3, 1); - tmp6 = _mm_slli_epi32(tmp6, 1); - tmp9 = _mm_srli_si128(tmp7, 12); - tmp8 = _mm_slli_si128(tmp8, 4); - tmp7 = _mm_slli_si128(tmp7, 4); - tmp3 = _mm_or_si128(tmp3, tmp7); - tmp6 = _mm_or_si128(tmp6, tmp8); - tmp6 = _mm_or_si128(tmp6, tmp9); - tmp7 = _mm_slli_epi32(tmp3, 31); - tmp8 = _mm_slli_epi32(tmp3, 30); - tmp9 = _mm_slli_epi32(tmp3, 25); - tmp7 = _mm_xor_si128(tmp7, tmp8); - tmp7 = _mm_xor_si128(tmp7, tmp9); - tmp8 = _mm_srli_si128(tmp7, 4); - tmp7 = _mm_slli_si128(tmp7, 12); - tmp3 = _mm_xor_si128(tmp3, tmp7); - tmp2 = _mm_srli_epi32(tmp3, 1); - tmp4 = _mm_srli_epi32(tmp3, 2); - tmp5 = _mm_srli_epi32(tmp3, 7); - tmp2 = _mm_xor_si128(tmp2, tmp4); - tmp2 = _mm_xor_si128(tmp2, tmp5); - tmp2 = _mm_xor_si128(tmp2, tmp8); - tmp3 = _mm_xor_si128(tmp3, tmp2); - tmp6 = _mm_xor_si128(tmp6, tmp3); - *res = tmp6; -} - -LTC_GCM_PCLMUL_TARGET -static void s_gcm_gf_mult_pclmul(const unsigned char *a, const unsigned char *b, unsigned char *c) -{ - __m128i ci; - __m128i BSWAP_MASK = _mm_set_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); - __m128i ai = _mm_loadu_si128((const __m128i *) a); - __m128i bi = _mm_loadu_si128((const __m128i *) b); - - ai = _mm_shuffle_epi8(ai, BSWAP_MASK); - bi = _mm_shuffle_epi8(bi, BSWAP_MASK); - - s_gfmul_pclmul(ai, bi, &ci); - - ci = _mm_shuffle_epi8(ci, BSWAP_MASK); - - XMEMCPY(c, &ci, sizeof(ci)); -} -#endif /* defined(LTC_GCM_PCLMUL) */ - -#if defined(LTC_GCM_PMULL) - -#define LTC_GCM_PMULL_TARGET LTC_TARGET("+crypto") - -#if defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wbad-function-cast" -#pragma GCC diagnostic ignored "-Wcast-align" -#pragma GCC diagnostic ignored "-Wmissing-braces" -#pragma GCC diagnostic ignored "-Wshadow" -#pragma GCC diagnostic ignored "-Wsign-compare" -#pragma GCC diagnostic ignored "-Wunused-parameter" -#endif -#include -#if defined(__GNUC__) -#pragma GCC diagnostic pop -#endif - -#if defined(__APPLE__) -#include -#elif defined(_WIN32) -#include -#elif defined(__linux__) -#include -#include -#elif defined(__FreeBSD__) -#include -#endif - -static LTC_INLINE int s_pmull_is_supported(void) -{ - static int initialized = 0, is_supported = 0; - - if (initialized == 0) { -#if defined(__APPLE__) - int val = 0; - size_t len = sizeof(val); - if (sysctlbyname("hw.optional.arm.FEAT_PMULL", &val, &len, NULL, 0) == 0) { - is_supported = (val != 0); - } -#elif defined (_WIN32) - is_supported = IsProcessorFeaturePresent(PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE); -#elif defined(__linux__) - unsigned long hwcaps = getauxval(AT_HWCAP); - is_supported = (hwcaps & HWCAP_PMULL); -#elif defined(__FreeBSD__) - unsigned long hwcaps = 0; - if (elf_aux_info(AT_HWCAP, &hwcaps, sizeof(hwcaps)) == 0) { - is_supported = (hwcaps & HWCAP_PMULL) != 0; - } -#endif - initialized = 1; - } - - return is_supported; -} - -/* - * 128x128-bit binary polynomial multiplication for AArch64 using PMULL/PMULL2 - * Based on "Implementing GCM on ARMv8", Conrado P. L. Gouvea and Julio Lopez - * https://conradoplg.modp.net/files/2010/12/gcm14.pdf - */ -#if defined(_MSC_VER) -#define GET_LOW_P64(x) vreinterpret_p64_u64(vcreate_u64((uint64_t)vgetq_lane_p64((x), 0))) -#else -#define GET_LOW_P64(x) vgetq_lane_p64((x), 0) -#endif - -LTC_GCM_PMULL_TARGET -static void s_gfmul_pmull(uint8x16_t a, uint8x16_t b, uint8x16_t *res) { - uint8x16_t r0, r1, t0, t1, z, p; - poly64x2_t pa, pb, pt0, pr1, pp; - - z = vdupq_n_u8(0); - - pa = vreinterpretq_p64_u8(a); - pb = vreinterpretq_p64_u8(b); - - /* Page 7. Algorithm 3 128 x 128-bit binary polynomial multiplier for ARMv8 AArch64 (PMULL) */ - r0 = vreinterpretq_u8_p128(vmull_p64(GET_LOW_P64(pa), GET_LOW_P64(pb))); - r1 = vreinterpretq_u8_p128(vmull_high_p64(pa, pb)); - t0 = vextq_u8(b, b, 8); - pt0 = vreinterpretq_p64_u8(t0); - - t1 = vreinterpretq_u8_p128(vmull_p64(GET_LOW_P64(pa), GET_LOW_P64(pt0))); - t0 = vreinterpretq_u8_p128(vmull_high_p64(pa, pt0)); - t0 = veorq_u8(t0, t1); - t1 = vextq_u8(z, t0, 8); - r0 = veorq_u8(r0, t1); - t1 = vextq_u8(t0, z, 8); - r1 = veorq_u8(r1, t1); - - /* Page 8. Algorithm 5 256-bit to 128-bit GCM polynomial reduction for ARMv8 AAarch64 using PMULL */ - p = vreinterpretq_u8_u64(vdupq_n_u64(0x0000000000000087ULL)); - pp = vreinterpretq_p64_u8(p); - pr1 = vreinterpretq_p64_u8(r1); - t0 = vreinterpretq_u8_p128(vmull_high_p64(pr1, pp)); - t1 = vextq_u8(t0, z, 8); - r1 = veorq_u8(r1, t1); - t1 = vextq_u8(z, t0, 8); - r0 = veorq_u8(r0, t1); - pr1 = vreinterpretq_p64_u8(r1); - - t0 = vreinterpretq_u8_p128(vmull_p64(GET_LOW_P64(pr1), GET_LOW_P64(pp))); - a = veorq_u8(r0, t0); - - *res = a; -} - -LTC_GCM_PMULL_TARGET -static void s_gcm_gf_mult_pmull(const unsigned char *a, const unsigned char *b, unsigned char *c) -{ - uint8x16_t va, vb, vc; - - va = vld1q_u8(a); - vb = vld1q_u8(b); - va = vrbitq_u8(va); - vb = vrbitq_u8(vb); - - s_gfmul_pmull(va, vb, &vc); - - vc = vrbitq_u8(vc); - - XMEMCPY(c, &vc, sizeof(vc)); -} - -#endif /* defined(LTC_GCM_PMULL) */ -#endif /* defined(LTC_GCM_MODE) || defined(LTC_LRW_MODE) */ - -#if defined(LTC_GCM_TABLES) || defined(LTC_LRW_TABLES) || ((defined(LTC_GCM_MODE) || defined(LTC_GCM_SIV_MODE)) && defined(LTC_FAST)) - -/* this is x*2^128 mod p(x) ... the results are 16 bytes each stored in a packed format. Since only the - * lower 16 bits are not zero'ed I removed the upper 14 bytes */ -const unsigned char gcm_shift_table[256*2] = { -0x00, 0x00, 0x01, 0xc2, 0x03, 0x84, 0x02, 0x46, 0x07, 0x08, 0x06, 0xca, 0x04, 0x8c, 0x05, 0x4e, -0x0e, 0x10, 0x0f, 0xd2, 0x0d, 0x94, 0x0c, 0x56, 0x09, 0x18, 0x08, 0xda, 0x0a, 0x9c, 0x0b, 0x5e, -0x1c, 0x20, 0x1d, 0xe2, 0x1f, 0xa4, 0x1e, 0x66, 0x1b, 0x28, 0x1a, 0xea, 0x18, 0xac, 0x19, 0x6e, -0x12, 0x30, 0x13, 0xf2, 0x11, 0xb4, 0x10, 0x76, 0x15, 0x38, 0x14, 0xfa, 0x16, 0xbc, 0x17, 0x7e, -0x38, 0x40, 0x39, 0x82, 0x3b, 0xc4, 0x3a, 0x06, 0x3f, 0x48, 0x3e, 0x8a, 0x3c, 0xcc, 0x3d, 0x0e, -0x36, 0x50, 0x37, 0x92, 0x35, 0xd4, 0x34, 0x16, 0x31, 0x58, 0x30, 0x9a, 0x32, 0xdc, 0x33, 0x1e, -0x24, 0x60, 0x25, 0xa2, 0x27, 0xe4, 0x26, 0x26, 0x23, 0x68, 0x22, 0xaa, 0x20, 0xec, 0x21, 0x2e, -0x2a, 0x70, 0x2b, 0xb2, 0x29, 0xf4, 0x28, 0x36, 0x2d, 0x78, 0x2c, 0xba, 0x2e, 0xfc, 0x2f, 0x3e, -0x70, 0x80, 0x71, 0x42, 0x73, 0x04, 0x72, 0xc6, 0x77, 0x88, 0x76, 0x4a, 0x74, 0x0c, 0x75, 0xce, -0x7e, 0x90, 0x7f, 0x52, 0x7d, 0x14, 0x7c, 0xd6, 0x79, 0x98, 0x78, 0x5a, 0x7a, 0x1c, 0x7b, 0xde, -0x6c, 0xa0, 0x6d, 0x62, 0x6f, 0x24, 0x6e, 0xe6, 0x6b, 0xa8, 0x6a, 0x6a, 0x68, 0x2c, 0x69, 0xee, -0x62, 0xb0, 0x63, 0x72, 0x61, 0x34, 0x60, 0xf6, 0x65, 0xb8, 0x64, 0x7a, 0x66, 0x3c, 0x67, 0xfe, -0x48, 0xc0, 0x49, 0x02, 0x4b, 0x44, 0x4a, 0x86, 0x4f, 0xc8, 0x4e, 0x0a, 0x4c, 0x4c, 0x4d, 0x8e, -0x46, 0xd0, 0x47, 0x12, 0x45, 0x54, 0x44, 0x96, 0x41, 0xd8, 0x40, 0x1a, 0x42, 0x5c, 0x43, 0x9e, -0x54, 0xe0, 0x55, 0x22, 0x57, 0x64, 0x56, 0xa6, 0x53, 0xe8, 0x52, 0x2a, 0x50, 0x6c, 0x51, 0xae, -0x5a, 0xf0, 0x5b, 0x32, 0x59, 0x74, 0x58, 0xb6, 0x5d, 0xf8, 0x5c, 0x3a, 0x5e, 0x7c, 0x5f, 0xbe, -0xe1, 0x00, 0xe0, 0xc2, 0xe2, 0x84, 0xe3, 0x46, 0xe6, 0x08, 0xe7, 0xca, 0xe5, 0x8c, 0xe4, 0x4e, -0xef, 0x10, 0xee, 0xd2, 0xec, 0x94, 0xed, 0x56, 0xe8, 0x18, 0xe9, 0xda, 0xeb, 0x9c, 0xea, 0x5e, -0xfd, 0x20, 0xfc, 0xe2, 0xfe, 0xa4, 0xff, 0x66, 0xfa, 0x28, 0xfb, 0xea, 0xf9, 0xac, 0xf8, 0x6e, -0xf3, 0x30, 0xf2, 0xf2, 0xf0, 0xb4, 0xf1, 0x76, 0xf4, 0x38, 0xf5, 0xfa, 0xf7, 0xbc, 0xf6, 0x7e, -0xd9, 0x40, 0xd8, 0x82, 0xda, 0xc4, 0xdb, 0x06, 0xde, 0x48, 0xdf, 0x8a, 0xdd, 0xcc, 0xdc, 0x0e, -0xd7, 0x50, 0xd6, 0x92, 0xd4, 0xd4, 0xd5, 0x16, 0xd0, 0x58, 0xd1, 0x9a, 0xd3, 0xdc, 0xd2, 0x1e, -0xc5, 0x60, 0xc4, 0xa2, 0xc6, 0xe4, 0xc7, 0x26, 0xc2, 0x68, 0xc3, 0xaa, 0xc1, 0xec, 0xc0, 0x2e, -0xcb, 0x70, 0xca, 0xb2, 0xc8, 0xf4, 0xc9, 0x36, 0xcc, 0x78, 0xcd, 0xba, 0xcf, 0xfc, 0xce, 0x3e, -0x91, 0x80, 0x90, 0x42, 0x92, 0x04, 0x93, 0xc6, 0x96, 0x88, 0x97, 0x4a, 0x95, 0x0c, 0x94, 0xce, -0x9f, 0x90, 0x9e, 0x52, 0x9c, 0x14, 0x9d, 0xd6, 0x98, 0x98, 0x99, 0x5a, 0x9b, 0x1c, 0x9a, 0xde, -0x8d, 0xa0, 0x8c, 0x62, 0x8e, 0x24, 0x8f, 0xe6, 0x8a, 0xa8, 0x8b, 0x6a, 0x89, 0x2c, 0x88, 0xee, -0x83, 0xb0, 0x82, 0x72, 0x80, 0x34, 0x81, 0xf6, 0x84, 0xb8, 0x85, 0x7a, 0x87, 0x3c, 0x86, 0xfe, -0xa9, 0xc0, 0xa8, 0x02, 0xaa, 0x44, 0xab, 0x86, 0xae, 0xc8, 0xaf, 0x0a, 0xad, 0x4c, 0xac, 0x8e, -0xa7, 0xd0, 0xa6, 0x12, 0xa4, 0x54, 0xa5, 0x96, 0xa0, 0xd8, 0xa1, 0x1a, 0xa3, 0x5c, 0xa2, 0x9e, -0xb5, 0xe0, 0xb4, 0x22, 0xb6, 0x64, 0xb7, 0xa6, 0xb2, 0xe8, 0xb3, 0x2a, 0xb1, 0x6c, 0xb0, 0xae, -0xbb, 0xf0, 0xba, 0x32, 0xb8, 0x74, 0xb9, 0xb6, 0xbc, 0xf8, 0xbd, 0x3a, 0xbf, 0x7c, 0xbe, 0xbe }; - -#endif - - -#if defined(LTC_GCM_MODE) || defined(LTC_LRW_MODE) || defined(LTC_GCM_SIV_MODE) - - -#ifndef LTC_FAST -/* right shift */ -static void s_gcm_rightshift(unsigned char *a) -{ - int x; - for (x = 15; x > 0; x--) { - a[x] = (a[x]>>1) | ((a[x-1]<<7)&0x80); - } - a[0] >>= 1; -} - -/* c = b*a */ -static const unsigned char mask[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; -static const unsigned char poly[] = { 0x00, 0xE1 }; - - -/** - GCM GF multiplier (internal use only) bitserial - @param a First value - @param b Second value - @param c Destination for a * b - */ -static void s_gcm_gf_mult_sw(const unsigned char *a, const unsigned char *b, unsigned char *c) -{ - unsigned char Z[16], V[16]; - unsigned char x, y, z; - - zeromem(Z, 16); - XMEMCPY(V, a, 16); - for (x = 0; x < 128; x++) { - if (b[x>>3] & mask[x&7]) { - for (y = 0; y < 16; y++) { - Z[y] ^= V[y]; - } - } - z = V[15] & 0x01; - s_gcm_rightshift(V); - V[0] ^= poly[z]; - } - XMEMCPY(c, Z, 16); -} - -#else - -/* map normal numbers to "ieee" way ... e.g. bit reversed */ -#define M(x) ( ((x&8)>>3) | ((x&4)>>1) | ((x&2)<<1) | ((x&1)<<3) ) - -#define BPD (sizeof(LTC_FAST_TYPE) * 8) -#define WPV (1 + (16 / sizeof(LTC_FAST_TYPE))) - -/** - GCM GF multiplier (internal use only) word oriented - @param a First value - @param b Second value - @param c Destination for a * b - */ -static void s_gcm_gf_mult_sw(const unsigned char *a, const unsigned char *b, unsigned char *c) -{ - int i, j, k, u; - LTC_FAST_TYPE B[16][WPV], tmp[32 / sizeof(LTC_FAST_TYPE)], pB[16 / sizeof(LTC_FAST_TYPE)], zz, z; - unsigned char pTmp[32]; - - /* create simple tables */ - zeromem(B[0], sizeof(B[0])); - zeromem(B[M(1)], sizeof(B[M(1)])); - -#ifdef ENDIAN_32BITWORD - for (i = 0; i < 4; i++) { - LOAD32H(B[M(1)][i], a + (i<<2)); - LOAD32L(pB[i], b + (i<<2)); - } -#else - for (i = 0; i < 2; i++) { - LOAD64H(B[M(1)][i], a + (i<<3)); - LOAD64L(pB[i], b + (i<<3)); - } -#endif - - /* now create 2, 4 and 8 */ - B[M(2)][0] = B[M(1)][0] >> 1; - B[M(4)][0] = B[M(1)][0] >> 2; - B[M(8)][0] = B[M(1)][0] >> 3; - for (i = 1; i < (int)WPV; i++) { - B[M(2)][i] = (B[M(1)][i-1] << (BPD-1)) | (B[M(1)][i] >> 1); - B[M(4)][i] = (B[M(1)][i-1] << (BPD-2)) | (B[M(1)][i] >> 2); - B[M(8)][i] = (B[M(1)][i-1] << (BPD-3)) | (B[M(1)][i] >> 3); - } - - /* now all values with two bits which are 3, 5, 6, 9, 10, 12 */ - for (i = 0; i < (int)WPV; i++) { - B[M(3)][i] = B[M(1)][i] ^ B[M(2)][i]; - B[M(5)][i] = B[M(1)][i] ^ B[M(4)][i]; - B[M(6)][i] = B[M(2)][i] ^ B[M(4)][i]; - B[M(9)][i] = B[M(1)][i] ^ B[M(8)][i]; - B[M(10)][i] = B[M(2)][i] ^ B[M(8)][i]; - B[M(12)][i] = B[M(8)][i] ^ B[M(4)][i]; - - /* now all 3 bit values and the only 4 bit value: 7, 11, 13, 14, 15 */ - B[M(7)][i] = B[M(3)][i] ^ B[M(4)][i]; - B[M(11)][i] = B[M(3)][i] ^ B[M(8)][i]; - B[M(13)][i] = B[M(1)][i] ^ B[M(12)][i]; - B[M(14)][i] = B[M(6)][i] ^ B[M(8)][i]; - B[M(15)][i] = B[M(7)][i] ^ B[M(8)][i]; - } - - zeromem(tmp, sizeof(tmp)); - - /* compute product four bits of each word at a time */ - /* for each nibble */ - for (i = (BPD/4)-1; i >= 0; i--) { - /* for each word */ - for (j = 0; j < (int)(WPV-1); j++) { - /* grab the 4 bits recall the nibbles are backwards so it's a shift by (i^1)*4 */ - u = (pB[j] >> ((i^1)<<2)) & 15; - - /* add offset by the word count the table looked up value to the result */ - for (k = 0; k < (int)WPV; k++) { - tmp[k+j] ^= B[u][k]; - } - } - /* shift result up by 4 bits */ - if (i != 0) { - for (z = j = 0; j < (int)(32 / sizeof(LTC_FAST_TYPE)); j++) { - zz = tmp[j] << (BPD-4); - tmp[j] = (tmp[j] >> 4) | z; - z = zz; - } - } - } - - /* store product */ -#ifdef ENDIAN_32BITWORD - for (i = 0; i < 8; i++) { - STORE32H(tmp[i], pTmp + (i<<2)); - } -#else - for (i = 0; i < 4; i++) { - STORE64H(tmp[i], pTmp + (i<<3)); - } -#endif - - /* reduce by taking most significant byte and adding the appropriate two byte sequence 16 bytes down */ - for (i = 31; i >= 16; i--) { - pTmp[i-16] ^= gcm_shift_table[((unsigned)pTmp[i]<<1)]; - pTmp[i-15] ^= gcm_shift_table[((unsigned)pTmp[i]<<1)+1]; - } - - for (i = 0; i < 16; i++) { - c[i] = pTmp[i]; - } - -} - -#undef M -#undef BPD -#undef WPV - -#endif - -/** - GCM GF multiplier (internal use only) - @param a First value - @param b Second value - @param c Destination for a * b - */ -void gcm_gf_mult(const unsigned char *a, const unsigned char *b, unsigned char *c) -{ -#if defined(LTC_GCM_PCLMUL) - if(s_pclmul_is_supported()) { - s_gcm_gf_mult_pclmul(a, b, c); - return; - } -#endif -#if defined(LTC_GCM_PMULL) - if(s_pmull_is_supported()) { - s_gcm_gf_mult_pmull(a, b, c); - return; - } -#endif - s_gcm_gf_mult_sw(a, b, c); -} - - -#endif - -int gcm_hw_pmul_is_supported(void) -{ -#if defined(LTC_GCM_PCLMUL_TARGET) - return s_pclmul_is_supported(); -#elif defined(LTC_GCM_PMULL_TARGET) - return s_pmull_is_supported(); -#else - return 0; -#endif -} - diff --git a/src/encauth/gcm/gcm_init.c b/src/encauth/gcm/gcm_init.c deleted file mode 100644 index 96abfe2c..00000000 --- a/src/encauth/gcm/gcm_init.c +++ /dev/null @@ -1,94 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file gcm_init.c - GCM implementation, initialize state, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_GCM_MODE - -/** - Initialize a GCM state - @param gcm The GCM state to initialize - @param cipher The index of the cipher to use - @param key The secret key - @param keylen The length of the secret key - @return CRYPT_OK on success - */ -int gcm_init(gcm_state *gcm, int cipher, - const unsigned char *key, int keylen) -{ - int err; - unsigned char B[16]; -#ifdef LTC_GCM_TABLES - int x, y, z, t; -#endif - - LTC_ARGCHK(gcm != NULL); - LTC_ARGCHK(key != NULL); - -#ifdef LTC_FAST - if (16 % sizeof(LTC_FAST_TYPE)) { - return CRYPT_INVALID_ARG; - } -#endif - - /* is cipher valid? */ - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - if (cipher_descriptor[cipher].block_length != 16) { - return CRYPT_INVALID_CIPHER; - } - - /* schedule key */ - if ((err = ecb_start(cipher, key, keylen, 0, &gcm->K)) != CRYPT_OK) { - return err; - } - - /* H = E(0) */ - zeromem(B, 16); - if ((err = ecb_encrypt_block(B, gcm->H, &gcm->K)) != CRYPT_OK) { - return err; - } - - /* setup state */ - zeromem(gcm->buf, sizeof(gcm->buf)); - zeromem(gcm->X, sizeof(gcm->X)); - gcm->mode = LTC_GCM_MODE_IV; - gcm->ivmode = 0; - gcm->buflen = 0; - gcm->totlen = 0; - gcm->pttotlen = 0; - -#ifdef LTC_GCM_TABLES - /* setup tables */ - - /* generate the first table as it has no shifting (from which we make the other tables) */ - zeromem(B, 16); - for (y = 0; y < 256; y++) { - B[0] = y; - gcm_gf_mult(gcm->H, B, &gcm->PC[0][y][0]); - } - - /* now generate the rest of the tables based the previous table */ - for (x = 1; x < 16; x++) { - for (y = 0; y < 256; y++) { - /* now shift it right by 8 bits */ - t = gcm->PC[x-1][y][15]; - for (z = 15; z > 0; z--) { - gcm->PC[x][y][z] = gcm->PC[x-1][y][z-1]; - } - gcm->PC[x][y][0] = gcm_shift_table[t<<1]; - gcm->PC[x][y][1] ^= gcm_shift_table[(t<<1)+1]; - } - } - -#endif - - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/gcm/gcm_memory.c b/src/encauth/gcm/gcm_memory.c deleted file mode 100644 index 6de0b309..00000000 --- a/src/encauth/gcm/gcm_memory.c +++ /dev/null @@ -1,112 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file gcm_memory.c - GCM implementation, process a packet, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_GCM_MODE - -/** - Process an entire GCM packet in one call. - @param cipher Index of cipher to use - @param key The secret key - @param keylen The length of the secret key - @param IV The initialization vector - @param IVlen The length of the initialization vector - @param adata The additional authentication data (header) - @param adatalen The length of the adata - @param pt The plaintext - @param ptlen The length of the plaintext (ciphertext length is the same) - @param ct The ciphertext - @param tag [out] The MAC tag - @param taglen [in/out] The MAC tag length - @param direction Encrypt or Decrypt mode (GCM_ENCRYPT or GCM_DECRYPT) - @return CRYPT_OK on success - */ -int gcm_memory( int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *IV, unsigned long IVlen, - const unsigned char *adata, unsigned long adatalen, - unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - unsigned char *tag, unsigned long *taglen, - int direction) -{ - void *orig; - gcm_state *gcm; - int err; - - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - - if (cipher_descriptor[cipher].accel_gcm_memory != NULL) { - return cipher_descriptor[cipher].accel_gcm_memory - (key, keylen, - IV, IVlen, - adata, adatalen, - pt, ptlen, - ct, - tag, taglen, - direction); - } - - - -#ifndef LTC_GCM_TABLES_SSE2 - orig = gcm = XMALLOC(sizeof(*gcm)); -#else - orig = gcm = XMALLOC(sizeof(*gcm) + 16); -#endif - if (gcm == NULL) { - return CRYPT_MEM; - } - - /* Force GCM to be on a multiple of 16 so we can use 128-bit aligned operations - * note that we only modify gcm and keep orig intact. This code is not portable - * but again it's only for SSE2 anyways, so who cares? - */ -#ifdef LTC_GCM_TABLES_SSE2 - gcm = LTC_ALIGN_BUF(gcm, 16); -#endif - - if ((err = gcm_init(gcm, cipher, key, keylen)) != CRYPT_OK) { - goto LTC_ERR; - } - if ((err = gcm_add_iv(gcm, IV, IVlen)) != CRYPT_OK) { - goto LTC_ERR; - } - if ((err = gcm_add_aad(gcm, adata, adatalen)) != CRYPT_OK) { - goto LTC_ERR; - } - if ((err = gcm_process(gcm, pt, ptlen, ct, direction)) != CRYPT_OK) { - goto LTC_ERR; - } - if (direction == GCM_ENCRYPT) { - if ((err = gcm_done(gcm, tag, taglen)) != CRYPT_OK) { - goto LTC_ERR; - } - } - else if (direction == GCM_DECRYPT) { - unsigned char buf[MAXBLOCKSIZE]; - unsigned long buflen = sizeof(buf); - if ((err = gcm_done(gcm, buf, &buflen)) != CRYPT_OK) { - goto LTC_ERR; - } - if (buflen != *taglen || XMEM_NEQ(buf, tag, buflen) != 0) { - err = CRYPT_ERROR; - } - } - else { - err = CRYPT_INVALID_ARG; - } -LTC_ERR: - gcm_reset(gcm); - XFREE(orig); - return err; -} -#endif - diff --git a/src/encauth/gcm/gcm_mult_h.c b/src/encauth/gcm/gcm_mult_h.c deleted file mode 100644 index 0c90fac7..00000000 --- a/src/encauth/gcm/gcm_mult_h.c +++ /dev/null @@ -1,47 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file gcm_mult_h.c - GCM implementation, do the GF mult, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#if defined(LTC_GCM_MODE) -/** - GCM multiply by H - @param gcm The GCM state which holds the H value - @param I The value to multiply H by - */ -void gcm_mult_h(const gcm_state *gcm, unsigned char *I) -{ - unsigned char T[16]; -#ifdef LTC_GCM_TABLES - int x; -#ifdef LTC_GCM_TABLES_SSE2 - __asm__("movdqa (%0),%%xmm0"::"r"(&gcm->PC[0][I[0]][0])); - for (x = 1; x < 16; x++) { - __asm__("pxor (%0),%%xmm0"::"r"(&gcm->PC[x][I[x]][0])); - } - __asm__("movdqa %%xmm0,(%0)"::"r"(&T)); -#else - int y; - XMEMCPY(T, &gcm->PC[0][I[0]][0], 16); - for (x = 1; x < 16; x++) { -#ifdef LTC_FAST - for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2(T + y, &gcm->PC[x][I[x]][y]); - } -#else - for (y = 0; y < 16; y++) { - T[y] ^= gcm->PC[x][I[x]][y]; - } -#endif /* LTC_FAST */ - } -#endif /* LTC_GCM_TABLES_SSE2 */ -#else - gcm_gf_mult(gcm->H, I, T); -#endif - XMEMCPY(I, T, 16); -} -#endif diff --git a/src/encauth/gcm/gcm_process.c b/src/encauth/gcm/gcm_process.c deleted file mode 100644 index acaf1ed8..00000000 --- a/src/encauth/gcm/gcm_process.c +++ /dev/null @@ -1,146 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file gcm_process.c - GCM implementation, process message data, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_GCM_MODE - -/** - Process plaintext/ciphertext through GCM - @param gcm The GCM state - @param pt The plaintext - @param ptlen The plaintext length (ciphertext length is the same) - @param ct The ciphertext - @param direction Encrypt or Decrypt mode (GCM_ENCRYPT or GCM_DECRYPT) - @return CRYPT_OK on success - */ -int gcm_process(gcm_state *gcm, - unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - int direction) -{ - unsigned long x; - int y, err; - unsigned char b; - - LTC_ARGCHK(gcm != NULL); - if (ptlen > 0) { - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - } - - if (gcm->buflen > 16 || gcm->buflen < 0) { - return CRYPT_INVALID_ARG; - } - - /* 0xFFFFFFFE0 = ((2^39)-256)/8 */ - if (gcm->pttotlen / 8 + (ulong64)gcm->buflen + (ulong64)ptlen >= CONST64(0xFFFFFFFE0)) { - return CRYPT_INVALID_ARG; - } - - if (gcm->mode == LTC_GCM_MODE_IV) { - /* let's process the IV */ - if ((err = gcm_add_aad(gcm, NULL, 0)) != CRYPT_OK) return err; - } - - /* in AAD mode? */ - if (gcm->mode == LTC_GCM_MODE_AAD) { - /* let's process the AAD */ - if (gcm->buflen) { - gcm->totlen += gcm->buflen * CONST64(8); - gcm_mult_h(gcm, gcm->X); - } - - /* increment counter */ - for (y = 15; y >= 12; y--) { - if (++gcm->Y[y] & 255) { break; } - } - /* encrypt the counter */ - if ((err = ecb_encrypt_block(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { - return err; - } - - gcm->buflen = 0; - gcm->mode = LTC_GCM_MODE_TEXT; - } - - if (gcm->mode != LTC_GCM_MODE_TEXT) { - return CRYPT_INVALID_ARG; - } - - x = 0; -#ifdef LTC_FAST - if (gcm->buflen == 0) { - if (direction == GCM_ENCRYPT) { - for (x = 0; x < (ptlen & ~15); x += 16) { - /* ctr encrypt */ - for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR3(&ct[x + y], &pt[x+y], &gcm->buf[y]); - LTC_FAST_XOR2(&gcm->X[y], &ct[x+y]); - } - /* GMAC it */ - gcm->pttotlen += 128; - gcm_mult_h(gcm, gcm->X); - /* increment counter */ - for (y = 15; y >= 12; y--) { - if (++gcm->Y[y] & 255) { break; } - } - if ((err = ecb_encrypt_block(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { - return err; - } - } - } else { - for (x = 0; x < (ptlen & ~15); x += 16) { - /* ctr encrypt */ - for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2(&gcm->X[y], &ct[x+y]); - LTC_FAST_XOR3(&pt[x + y], &ct[x+y], &gcm->buf[y]); - } - /* GMAC it */ - gcm->pttotlen += 128; - gcm_mult_h(gcm, gcm->X); - /* increment counter */ - for (y = 15; y >= 12; y--) { - if (++gcm->Y[y] & 255) { break; } - } - if ((err = ecb_encrypt_block(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { - return err; - } - } - } - } -#endif - - /* process text */ - for (; x < ptlen; x++) { - if (gcm->buflen == 16) { - gcm->pttotlen += 128; - gcm_mult_h(gcm, gcm->X); - - /* increment counter */ - for (y = 15; y >= 12; y--) { - if (++gcm->Y[y] & 255) { break; } - } - if ((err = ecb_encrypt_block(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { - return err; - } - gcm->buflen = 0; - } - - if (direction == GCM_ENCRYPT) { - b = ct[x] = pt[x] ^ gcm->buf[gcm->buflen]; - } else { - b = ct[x]; - pt[x] = ct[x] ^ gcm->buf[gcm->buflen]; - } - gcm->X[gcm->buflen++] ^= b; - } - - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/gcm/gcm_reset.c b/src/encauth/gcm/gcm_reset.c deleted file mode 100644 index a071dcd8..00000000 --- a/src/encauth/gcm/gcm_reset.c +++ /dev/null @@ -1,32 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file gcm_reset.c - GCM implementation, reset a used state so it can accept IV data, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_GCM_MODE - -/** - Reset a GCM state to as if you just called gcm_init(). This saves the initialization time. - @param gcm The GCM state to reset - @return CRYPT_OK on success -*/ -int gcm_reset(gcm_state *gcm) -{ - LTC_ARGCHK(gcm != NULL); - - zeromem(gcm->buf, sizeof(gcm->buf)); - zeromem(gcm->X, sizeof(gcm->X)); - gcm->mode = LTC_GCM_MODE_IV; - gcm->ivmode = 0; - gcm->buflen = 0; - gcm->totlen = 0; - gcm->pttotlen = 0; - - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/gcm/gcm_test.c b/src/encauth/gcm/gcm_test.c deleted file mode 100644 index e3bb3f91..00000000 --- a/src/encauth/gcm/gcm_test.c +++ /dev/null @@ -1,407 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file gcm_test.c - GCM implementation, testing, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_GCM_MODE - -/** - Test the GCM code - @return CRYPT_OK on success - */ -int gcm_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - unsigned char K[32]; - int keylen; - unsigned char P[128]; - unsigned long ptlen; - unsigned char A[128]; - unsigned long alen; - unsigned char IV[128]; - unsigned long IVlen; - unsigned char C[128]; - unsigned char T[16]; - } tests[] = { - -/* test case #1 */ -{ - /* key */ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - 16, - - /* plaintext */ - { 0 }, - 0, - - /* AAD data */ - { 0 }, - 0, - - /* IV */ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 }, - 12, - - /* ciphertext */ - { 0 }, - - /* tag */ - { 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61, - 0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a } -}, - -/* test case #2 */ -{ - /* key */ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - 16, - - /* PT */ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - 16, - - /* ADATA */ - { 0 }, - 0, - - /* IV */ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 }, - 12, - - /* CT */ - { 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92, - 0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78 }, - - /* TAG */ - { 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd, - 0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf } -}, - -/* test case #3 */ -{ - /* key */ - { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, - 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, }, - 16, - - /* PT */ - { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55, }, - 64, - - /* ADATA */ - { 0 }, - 0, - - /* IV */ - { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, - 0xde, 0xca, 0xf8, 0x88, }, - 12, - - /* CT */ - { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, - 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, - 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, - 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, - 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, - 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, - 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, - 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85, }, - - /* TAG */ - { 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6, - 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4, } -}, - -/* test case #4 */ -{ - /* key */ - { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, - 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, }, - 16, - - /* PT */ - { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39, }, - 60, - - /* ADATA */ - { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xab, 0xad, 0xda, 0xd2, }, - 20, - - /* IV */ - { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, - 0xde, 0xca, 0xf8, 0x88, }, - 12, - - /* CT */ - { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, - 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, - 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, - 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, - 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, - 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, - 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, - 0x3d, 0x58, 0xe0, 0x91, }, - - /* TAG */ - { 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb, - 0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47, } - -}, - -/* test case #5 */ -{ - /* key */ - { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, - 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, }, - 16, - - /* PT */ - { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39, }, - 60, - - /* ADATA */ - { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xab, 0xad, 0xda, 0xd2, }, - 20, - - /* IV */ - { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, }, - 8, - - /* CT */ - { 0x61, 0x35, 0x3b, 0x4c, 0x28, 0x06, 0x93, 0x4a, - 0x77, 0x7f, 0xf5, 0x1f, 0xa2, 0x2a, 0x47, 0x55, - 0x69, 0x9b, 0x2a, 0x71, 0x4f, 0xcd, 0xc6, 0xf8, - 0x37, 0x66, 0xe5, 0xf9, 0x7b, 0x6c, 0x74, 0x23, - 0x73, 0x80, 0x69, 0x00, 0xe4, 0x9f, 0x24, 0xb2, - 0x2b, 0x09, 0x75, 0x44, 0xd4, 0x89, 0x6b, 0x42, - 0x49, 0x89, 0xb5, 0xe1, 0xeb, 0xac, 0x0f, 0x07, - 0xc2, 0x3f, 0x45, 0x98, }, - - /* TAG */ - { 0x36, 0x12, 0xd2, 0xe7, 0x9e, 0x3b, 0x07, 0x85, - 0x56, 0x1b, 0xe1, 0x4a, 0xac, 0xa2, 0xfc, 0xcb, } -}, - -/* test case #6 */ -{ - /* key */ - { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, - 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, }, - 16, - - /* PT */ - { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39, }, - 60, - - /* ADATA */ - { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xab, 0xad, 0xda, 0xd2, }, - 20, - - /* IV */ - { 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5, - 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa, - 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1, - 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28, - 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39, - 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54, - 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57, - 0xa6, 0x37, 0xb3, 0x9b, }, - 60, - - /* CT */ - { 0x8c, 0xe2, 0x49, 0x98, 0x62, 0x56, 0x15, 0xb6, - 0x03, 0xa0, 0x33, 0xac, 0xa1, 0x3f, 0xb8, 0x94, - 0xbe, 0x91, 0x12, 0xa5, 0xc3, 0xa2, 0x11, 0xa8, - 0xba, 0x26, 0x2a, 0x3c, 0xca, 0x7e, 0x2c, 0xa7, - 0x01, 0xe4, 0xa9, 0xa4, 0xfb, 0xa4, 0x3c, 0x90, - 0xcc, 0xdc, 0xb2, 0x81, 0xd4, 0x8c, 0x7c, 0x6f, - 0xd6, 0x28, 0x75, 0xd2, 0xac, 0xa4, 0x17, 0x03, - 0x4c, 0x34, 0xae, 0xe5, }, - - /* TAG */ - { 0x61, 0x9c, 0xc5, 0xae, 0xff, 0xfe, 0x0b, 0xfa, - 0x46, 0x2a, 0xf4, 0x3c, 0x16, 0x99, 0xd0, 0x50, } -}, - -/* test case #46 from BG (catches the LTC bug of v1.15) */ -{ - /* key */ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - 16, - - /* PT */ - { 0xa2, 0xaa, 0xb3, 0xad, 0x8b, 0x17, 0xac, 0xdd, - 0xa2, 0x88, 0x42, 0x6c, 0xd7, 0xc4, 0x29, 0xb7, - 0xca, 0x86, 0xb7, 0xac, 0xa0, 0x58, 0x09, 0xc7, - 0x0c, 0xe8, 0x2d, 0xb2, 0x57, 0x11, 0xcb, 0x53, - 0x02, 0xeb, 0x27, 0x43, 0xb0, 0x36, 0xf3, 0xd7, - 0x50, 0xd6, 0xcf, 0x0d, 0xc0, 0xac, 0xb9, 0x29, - 0x50, 0xd5, 0x46, 0xdb, 0x30, 0x8f, 0x93, 0xb4, - 0xff, 0x24, 0x4a, 0xfa, 0x9d, 0xc7, 0x2b, 0xcd, - 0x75, 0x8d, 0x2c }, - 67, - - /* ADATA */ - { 0x68, 0x8e, 0x1a, 0xa9, 0x84, 0xde, 0x92, 0x6d, - 0xc7, 0xb4, 0xc4, 0x7f, 0x44 }, - 13, - - /* IV */ - { 0xb7, 0x21, 0x38, 0xb5, 0xa0, 0x5f, 0xf5, 0x07, - 0x0e, 0x8c, 0xd9, 0x41, 0x83, 0xf7, 0x61, 0xd8 }, - 16, - - /* CT */ - { 0xcb, 0xc8, 0xd2, 0xf1, 0x54, 0x81, 0xa4, 0xcc, - 0x7d, 0xd1, 0xe1, 0x9a, 0xaa, 0x83, 0xde, 0x56, - 0x78, 0x48, 0x3e, 0xc3, 0x59, 0xae, 0x7d, 0xec, - 0x2a, 0xb8, 0xd5, 0x34, 0xe0, 0x90, 0x6f, 0x4b, - 0x46, 0x63, 0xfa, 0xff, 0x58, 0xa8, 0xb2, 0xd7, - 0x33, 0xb8, 0x45, 0xee, 0xf7, 0xc9, 0xb3, 0x31, - 0xe9, 0xe1, 0x0e, 0xb2, 0x61, 0x2c, 0x99, 0x5f, - 0xeb, 0x1a, 0xc1, 0x5a, 0x62, 0x86, 0xcc, 0xe8, - 0xb2, 0x97, 0xa8 }, - - /* TAG */ - { 0x8d, 0x2d, 0x2a, 0x93, 0x72, 0x62, 0x6f, 0x6b, - 0xee, 0x85, 0x80, 0x27, 0x6a, 0x63, 0x66, 0xbf } -} - -/* rest of test cases are the same except AES key size changes... ignored... */ -}; - int idx, err; - unsigned long x, y; - unsigned char out[2][128], T[2][16]; - gcm_state gcm; - - /* find aes */ - idx = find_cipher("aes"); - if (idx == -1) { - idx = find_cipher("rijndael"); - if (idx == -1) { - return CRYPT_NOP; - } - } - - /* Special test case for empty AAD + empty PT */ - y = sizeof(T[0]); - if ((err = gcm_init(&gcm, idx, tests[0].K, tests[0].keylen)) != CRYPT_OK) return err; - if ((err = gcm_add_iv(&gcm, tests[0].IV, tests[0].IVlen)) != CRYPT_OK) return err; - /* intentionally skip gcm_add_aad + gcm_process */ - if ((err = gcm_done(&gcm, T[0], &y)) != CRYPT_OK) return err; - if (ltc_compare_testvector(T[0], y, tests[0].T, 16, "GCM Encrypt Tag-special", 0)) return CRYPT_FAIL_TESTVECTOR; - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { - y = sizeof(T[0]); - if ((err = gcm_memory(idx, tests[x].K, tests[x].keylen, - tests[x].IV, tests[x].IVlen, - tests[x].A, tests[x].alen, - (unsigned char*)tests[x].P, tests[x].ptlen, - out[0], T[0], &y, GCM_ENCRYPT)) != CRYPT_OK) { - return err; - } - - if (ltc_compare_testvector(out[0], tests[x].ptlen, tests[x].C, tests[x].ptlen, "GCM CT", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - - if (ltc_compare_testvector(T[0], y, tests[x].T, 16, "GCM Encrypt Tag", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - - y = sizeof(T[1]); - XMEMCPY(T[1], tests[x].T, 16); - if ((err = gcm_memory(idx, tests[x].K, tests[x].keylen, - tests[x].IV, tests[x].IVlen, - tests[x].A, tests[x].alen, - out[1], tests[x].ptlen, - out[0], T[1], &y, GCM_DECRYPT)) != CRYPT_OK) { - return err; - } - - if (ltc_compare_testvector(out[1], tests[x].ptlen, tests[x].P, tests[x].ptlen, "GCM PT", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - - /* wycheproof failing test - https://github.com/libtom/libtomcrypt/pull/451 */ - { - unsigned char key[] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }; - unsigned char iv[] = { 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b }; - unsigned char valid_tag[] = { 0xd8,0x84,0x7d,0xbc,0x32,0x6a,0x06,0xe9,0x88,0xc7,0x7a,0xd3,0x86,0x3e,0x60,0x83 }; - unsigned char invalid_tag[] = { 0xd9,0x84,0x7d,0xbc,0x32,0x6a,0x06,0xe9,0x88,0xc7,0x7a,0xd3,0x86,0x3e,0x60,0x83 }; - unsigned char msg[] = { 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f }; - unsigned char ct[] = { 0xeb,0x15,0x6d,0x08,0x1e,0xd6,0xb6,0xb5,0x5f,0x46,0x12,0xf0,0x21,0xd8,0x7b,0x39 }; - unsigned char pt[20] = { 0 }; - unsigned long taglen; - - /* VALID tag */ - taglen = sizeof(valid_tag); - err = gcm_memory(idx, key, sizeof(key), iv, sizeof(iv), NULL, 0, - pt, sizeof(ct), ct, valid_tag, &taglen, GCM_DECRYPT); - if ((err != CRYPT_OK) || (XMEMCMP(msg, pt, sizeof(msg)) != 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* INVALID tag */ - taglen = sizeof(invalid_tag); - err = gcm_memory(idx, key, sizeof(key), iv, sizeof(iv), NULL, 0, - pt, sizeof(ct), ct, invalid_tag, &taglen, GCM_DECRYPT); - if (err == CRYPT_OK) { - return CRYPT_FAIL_TESTVECTOR; /* should fail */ - } - } - - return CRYPT_OK; -#endif -} - -#endif - diff --git a/src/encauth/gcm_siv/gcm_siv.c b/src/encauth/gcm_siv/gcm_siv.c deleted file mode 100644 index afc71fc5..00000000 --- a/src/encauth/gcm_siv/gcm_siv.c +++ /dev/null @@ -1,244 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file gcm_siv.c - RFC 8452 - AES-GCM-SIV: Nonce Misuse-Resistant AEAD -*/ - -#ifdef LTC_GCM_SIV_MODE - -/* Multiply by x in the GHASH field GF(2^128) defined by - x^128 + x^7 + x^2 + x + 1, using GHASH's bit-byte ordering - (bit 7 of byte 0 is x^0, bit 0 of byte 15 is x^127). This is used - once during key derivation per RFC 8452 Appendix A: the POLYVAL - authentication key is computed as mulX_GHASH(ByteReverse(H_polyval)) - so that GHASH multiplication can be reused for POLYVAL. -*/ -static void s_mulx_ghash(unsigned char *b) -{ - unsigned int carry = b[15] & 1; - int x; - - for (x = 15; x > 0; x--) { - b[x] = (unsigned char)((b[x] >> 1) | ((b[x-1] & 1) << 7)); - } - b[0] >>= 1; - if (carry) b[0] ^= 0xe1; -} - -typedef struct { - unsigned char H[16]; /* GHASH-form authentication key */ - unsigned char S[16]; /* GHASH-form accumulator */ -} polyval_state; - -static void s_polyval_init(polyval_state *st, const unsigned char *auth_key) -{ - int i; - - for (i = 0; i < 16; i++) st->H[i] = auth_key[15 - i]; - s_mulx_ghash(st->H); - zeromem(st->S, 16); -} - -static void s_polyval_block(polyval_state *st, const unsigned char *X) -{ - unsigned char T[16]; - int i; - - for (i = 0; i < 16; i++) st->S[i] ^= X[15 - i]; - gcm_gf_mult(st->S, st->H, T); - XMEMCPY(st->S, T, 16); -} - -static void s_polyval_data(polyval_state *st, const unsigned char *data, unsigned long len) -{ - unsigned long full = len / 16; - unsigned long rem = len % 16; - unsigned long i; - unsigned char block[16]; - - for (i = 0; i < full; i++) s_polyval_block(st, data + i * 16); - if (rem) { - zeromem(block, 16); - XMEMCPY(block, data + full * 16, rem); - s_polyval_block(st, block); - } -} - -static void s_polyval_done(polyval_state *st, unsigned char *out) -{ - int i; - for (i = 0; i < 16; i++) out[i] = st->S[15 - i]; -} - -/* Derive the POLYVAL authentication key and the AES message-encryption key from K and N as specified - in RFC 8452 Section 4. The cipher is scheduled with the message-encryption key in *enc_ecb on success -*/ -static int s_gcm_siv_derive_keys(int cipher, - const unsigned char *K, unsigned long keylen, - const unsigned char *N, - unsigned char *auth_key, - unsigned char *enc_key, - symmetric_ECB *enc_ecb) -{ - int err; - unsigned char input[16], block[16]; - unsigned long ctr, num_blocks; - symmetric_ECB ecb; - - if ((err = ecb_start(cipher, K, (int)keylen, 0, &ecb)) != CRYPT_OK) return err; - - XMEMCPY(input + 4, N, 12); - - /* counters 0..1 yield the 16-byte authentication key, counters 2.. yield the encryption key (16 or 32 bytes) */ - num_blocks = (keylen == 16) ? 4 : 6; - for (ctr = 0; ctr < num_blocks; ctr++) { - STORE32L((ulong32)ctr, input); - if ((err = ecb_encrypt_block(input, block, &ecb)) != CRYPT_OK) goto cleanup; - if (ctr < 2) { - XMEMCPY(auth_key + 8 * ctr, block, 8); - } else { - XMEMCPY(enc_key + 8 * (ctr - 2), block, 8); - } - } - - err = ecb_start(cipher, enc_key, (int)keylen, 0, enc_ecb); - -cleanup: - ecb_done(&ecb); -#ifdef LTC_CLEAN_STACK - zeromem(input, sizeof(input)); - zeromem(block, sizeof(block)); -#endif - return err; -} - -/** - AES-GCM-SIV one-shot encryption/decryption (RFC 8452). - - @param cipher The index of the cipher (must be a 128-bit block cipher; AES per RFC) - @param key The 16- or 32-byte key - @param keylen The length of the key (16 or 32) - @param nonce The 12-byte nonce - @param noncelen The length of the nonce (must be 12) - @param aad The associated data - @param aadlen The length of the associated data - @param in The input (plaintext on encrypt, ciphertext on decrypt) - @param inlen The length of the input - @param out The output (ciphertext on encrypt, plaintext on decrypt) - @param tag [in/out] The 16-byte tag (output on encrypt, input on decrypt) - @param taglen [in/out] The length of the tag (must be >= 16; set to 16 on output) - @param direction LTC_ENCRYPT or LTC_DECRYPT - @return CRYPT_OK on success, CRYPT_ERROR on tag mismatch during decrypt -*/ -int gcm_siv_memory( int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *aad, unsigned long aadlen, - unsigned char *in, unsigned long inlen, - unsigned char *out, - unsigned char *tag, unsigned long *taglen, - int direction) -{ - int err, ecb_started = 0, ctr_started = 0; - unsigned char auth_key[16]; - unsigned char enc_key[32]; - unsigned char S[16], IC[16], expected_tag[16]; - unsigned char lenblk[16]; - const unsigned char *plaintext; - symmetric_ECB enc_ecb; - symmetric_CTR ctr; - polyval_state pv; - unsigned long i; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(nonce != NULL); - LTC_ARGCHK(aad != NULL || aadlen == 0); - LTC_ARGCHK(in != NULL || inlen == 0); - LTC_ARGCHK(out != NULL || inlen == 0); - LTC_ARGCHK(tag != NULL); - LTC_ARGCHK(taglen != NULL); - - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) return err; - if (cipher_descriptor[cipher].block_length != 16) return CRYPT_INVALID_CIPHER; - if (keylen != 16 && keylen != 32) return CRYPT_INVALID_KEYSIZE; - if (noncelen != 12) return CRYPT_INVALID_ARG; - if (*taglen < 16) { - *taglen = 16; - return CRYPT_BUFFER_OVERFLOW; - } - - if ((err = s_gcm_siv_derive_keys(cipher, key, keylen, nonce, auth_key, enc_key, &enc_ecb)) != CRYPT_OK) goto cleanup; - ecb_started = 1; - - if (direction == LTC_DECRYPT) { - /* CTR mode in RFC 8452: the supplied tag is the initial counter block with the MSB of the last - byte forced to 1; only the first 4 bytes (interpreted as little-endian uint32) advance - */ - XMEMCPY(IC, tag, 16); - IC[15] |= 0x80; - if ((err = ctr_start(cipher, IC, enc_key, (int)keylen, 0, CTR_COUNTER_LITTLE_ENDIAN | 4, &ctr)) != CRYPT_OK) goto cleanup; - ctr_started = 1; - if (inlen) { - if ((err = ctr_decrypt(in, out, inlen, &ctr)) != CRYPT_OK) goto cleanup; - } - ctr_done(&ctr); - ctr_started = 0; - plaintext = out; - } - else { - plaintext = in; - } - - s_polyval_init(&pv, auth_key); - s_polyval_data(&pv, aad, aadlen); - s_polyval_data(&pv, plaintext, inlen); - STORE64L((ulong64)aadlen * 8, lenblk); - STORE64L((ulong64)inlen * 8, lenblk + 8); - s_polyval_block(&pv, lenblk); - s_polyval_done(&pv, S); - - for (i = 0; i < 12; i++) S[i] ^= nonce[i]; - S[15] &= 0x7f; - - if ((err = ecb_encrypt_block(S, expected_tag, &enc_ecb)) != CRYPT_OK) goto cleanup; - - if (direction == LTC_DECRYPT) { - err = XMEM_NEQ(expected_tag, tag, 16); - if (err != CRYPT_OK) { - if (inlen) zeromem(out, inlen); /* tag mismatch: do not release plaintext */ - goto cleanup; - } - } - else { - XMEMCPY(IC, expected_tag, 16); - IC[15] |= 0x80; - if ((err = ctr_start(cipher, IC, enc_key, (int)keylen, 0, CTR_COUNTER_LITTLE_ENDIAN | 4, &ctr)) != CRYPT_OK) { - goto cleanup; - } - ctr_started = 1; - if (inlen) { - if ((err = ctr_encrypt(in, out, inlen, &ctr)) != CRYPT_OK) goto cleanup; - } - XMEMCPY(tag, expected_tag, 16); - *taglen = 16; - } - -cleanup: - if (ctr_started) ctr_done(&ctr); - if (ecb_started) ecb_done(&enc_ecb); -#ifdef LTC_CLEAN_STACK - zeromem(auth_key, sizeof(auth_key)); - zeromem(enc_key, sizeof(enc_key)); - zeromem(S, sizeof(S)); - zeromem(IC, sizeof(IC)); - zeromem(expected_tag, sizeof(expected_tag)); - zeromem(lenblk, sizeof(lenblk)); - zeromem(&pv, sizeof(pv)); -#endif - return err; -} - -#endif diff --git a/src/encauth/gcm_siv/gcm_siv_test.c b/src/encauth/gcm_siv/gcm_siv_test.c deleted file mode 100644 index dd02be9a..00000000 --- a/src/encauth/gcm_siv/gcm_siv_test.c +++ /dev/null @@ -1,489 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_GCM_SIV_MODE - -#ifdef LTC_TEST - -typedef struct { - const char *key; /* 32 (AES128) or 64 (AES256) hex chars */ - const char *nonce; /* 24 hex chars */ - const char *aad; /* hex */ - const char *pt; /* hex */ - const char *result; /* ciphertext || tag, hex */ -} gcm_siv_kat_t; - -/* RFC 8452 Appendix C.1 - AEAD_AES_128_GCM_SIV */ -static const gcm_siv_kat_t s_kat_128[] = { - { - "01000000000000000000000000000000", - "030000000000000000000000", - "", - "", - "dc20e2d83f25705bb49e439eca56de25" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "", - "0100000000000000", - "b5d839330ac7b786578782fff6013b815b287c22493a364c" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "", - "010000000000000000000000", - "7323ea61d05932260047d942a4978db357391a0bc4fdec8b0d106639" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "", - "01000000000000000000000000000000", - "743f7c8077ab25f8624e2e948579cf77303aaf90f6fe21199c6068577437a0c4" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "", - "0100000000000000000000000000000002000000000000000000000000000000", - "84e07e62ba83a6585417245d7ec413a9fe427d6315c09b57ce45f2e3936a94451a8e45dcd4578c667cd86847bf6155ff" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "", - "010000000000000000000000000000000200000000000000000000000000000003000000000000000000000000000000", - "3fd24ce1f5a67b75bf2351f181a475c7b800a5b4d3dcf70106b1eea82fa1d64df42bf7226122fa92e17a40eeaac1201b5e6e311dbf395d35b0fe39c2714388f8" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "", - "01000000000000000000000000000000020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000", - "2433668f1058190f6d43e360f4f35cd8e475127cfca7028ea8ab5c20f7ab2af02516a2bdcbc08d521be37ff28c152bba36697f25b4cd169c6590d1dd39566d3f8a263dd317aa88d56bdf3936dba75bb8" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "01", - "0200000000000000", - "1e6daba35669f4273b0a1a2560969cdf790d99759abd1508" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "01", - "020000000000000000000000", - "296c7889fd99f41917f4462008299c5102745aaa3a0c469fad9e075a" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "01", - "02000000000000000000000000000000", - "e2b0c5da79a901c1745f700525cb335b8f8936ec039e4e4bb97ebd8c4457441f" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "01", - "0200000000000000000000000000000003000000000000000000000000000000", - "620048ef3c1e73e57e02bb8562c416a319e73e4caac8e96a1ecb2933145a1d71e6af6a7f87287da059a71684ed3498e1" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "01", - "020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000", - "50c8303ea93925d64090d07bd109dfd9515a5a33431019c17d93465999a8b0053201d723120a8562b838cdff25bf9d1e6a8cc3865f76897c2e4b245cf31c51f2" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "01", - "02000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000005000000000000000000000000000000", - "2f5c64059db55ee0fb847ed513003746aca4e61c711b5de2e7a77ffd02da42feec601910d3467bb8b36ebbaebce5fba30d36c95f48a3e7980f0e7ac299332a80cdc46ae475563de037001ef84ae21744" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "010000000000000000000000", - "02000000", - "a8fe3e8707eb1f84fb28f8cb73de8e99e2f48a14" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "010000000000000000000000000000000200", - "0300000000000000000000000000000004000000", - "6bb0fecf5ded9b77f902c7d5da236a4391dd029724afc9805e976f451e6d87f6fe106514" - }, - { - "01000000000000000000000000000000", - "030000000000000000000000", - "0100000000000000000000000000000002000000", - "030000000000000000000000000000000400", - "44d0aaf6fb2f1f34add5e8064e83e12a2adabff9b2ef00fb47920cc72a0c0f13b9fd" - }, - { - "e66021d5eb8e4f4066d4adb9c33560e4", - "f46e44bb3da0015c94f70887", - "", - "", - "a4194b79071b01a87d65f706e3949578" - }, - { - "36864200e0eaf5284d884a0e77d31646", - "bae8e37fc83441b16034566b", - "46bb91c3c5", - "7a806c", - "af60eb711bd85bc1e4d3e0a462e074eea428a8" - }, - { - "aedb64a6c590bc84d1a5e269e4b47801", - "afc0577e34699b9e671fdd4f", - "fc880c94a95198874296", - "bdc66f146545", - "bb93a3e34d3cd6a9c45545cfc11f03ad743dba20f966" - }, - { - "d5cc1fd161320b6920ce07787f86743b", - "275d1ab32f6d1f0434d8848c", - "046787f3ea22c127aaf195d1894728", - "1177441f195495860f", - "4f37281f7ad12949d01d02fd0cd174c84fc5dae2f60f52fd2b" - }, - { - "b3fed1473c528b8426a582995929a149", - "9e9ad8780c8d63d0ab4149c0", - "c9882e5386fd9f92ec489c8fde2be2cf97e74e93", - "9f572c614b4745914474e7c7", - "f54673c5ddf710c745641c8bc1dc2f871fb7561da1286e655e24b7b0" - }, - { - "2d4ed87da44102952ef94b02b805249b", - "ac80e6f61455bfac8308a2d4", - "2950a70d5a1db2316fd568378da107b52b0da55210cc1c1b0a", - "0d8c8451178082355c9e940fea2f58", - "c9ff545e07b88a015f05b274540aa183b3449b9f39552de99dc214a1190b0b" - }, - { - "bde3b2f204d1e9f8b06bc47f9745b3d1", - "ae06556fb6aa7890bebc18fe", - "1860f762ebfbd08284e421702de0de18baa9c9596291b08466f37de21c7f", - "6b3db4da3d57aa94842b9803a96e07fb6de7", - "6298b296e24e8cc35dce0bed484b7f30d5803e377094f04709f64d7b985310a4db84" - }, - { - "f901cfe8a69615a93fdf7a98cad48179", - "6245709fb18853f68d833640", - "7576f7028ec6eb5ea7e298342a94d4b202b370ef9768ec6561c4fe6b7e7296fa859c21", - "e42a3c02c25b64869e146d7b233987bddfc240871d", - "391cc328d484a4f46406181bcd62efd9b3ee197d052d15506c84a9edd65e13e9d24a2a6e70" - } -}; - -/* RFC 8452 Appendix C.2 - AEAD_AES_256_GCM_SIV */ -static const gcm_siv_kat_t s_kat_256[] = { - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "", - "", - "07f5f4169bbf55a8400cd47ea6fd400f" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "", - "0100000000000000", - "c2ef328e5c71c83b843122130f7364b761e0b97427e3df28" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "", - "010000000000000000000000", - "9aab2aeb3faa0a34aea8e2b18ca50da9ae6559e48fd10f6e5c9ca17e" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "", - "01000000000000000000000000000000", - "85a01b63025ba19b7fd3ddfc033b3e76c9eac6fa700942702e90862383c6c366" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "", - "0100000000000000000000000000000002000000000000000000000000000000", - "4a6a9db4c8c6549201b9edb53006cba821ec9cf850948a7c86c68ac7539d027fe819e63abcd020b006a976397632eb5d" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "", - "010000000000000000000000000000000200000000000000000000000000000003000000000000000000000000000000", - "c00d121893a9fa603f48ccc1ca3c57ce7499245ea0046db16c53c7c66fe717e39cf6c748837b61f6ee3adcee17534ed5790bc96880a99ba804bd12c0e6a22cc4" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "", - "01000000000000000000000000000000020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000", - "c2d5160a1f8683834910acdafc41fbb1632d4a353e8b905ec9a5499ac34f96c7e1049eb080883891a4db8caaa1f99dd004d80487540735234e3744512c6f90ce112864c269fc0d9d88c61fa47e39aa08" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "01", - "0200000000000000", - "1de22967237a813291213f267e3b452f02d01ae33e4ec854" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "01", - "020000000000000000000000", - "163d6f9cc1b346cd453a2e4cc1a4a19ae800941ccdc57cc8413c277f" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "01", - "02000000000000000000000000000000", - "c91545823cc24f17dbb0e9e807d5ec17b292d28ff61189e8e49f3875ef91aff7" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "01", - "0200000000000000000000000000000003000000000000000000000000000000", - "07dad364bfc2b9da89116d7bef6daaaf6f255510aa654f920ac81b94e8bad365aea1bad12702e1965604374aab96dbbc" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "01", - "020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000", - "c67a1f0f567a5198aa1fcc8e3f21314336f7f51ca8b1af61feac35a86416fa47fbca3b5f749cdf564527f2314f42fe2503332742b228c647173616cfd44c54eb" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "01", - "02000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000005000000000000000000000000000000", - "67fd45e126bfb9a79930c43aad2d36967d3f0e4d217c1e551f59727870beefc98cb933a8fce9de887b1e40799988db1fc3f91880ed405b2dd298318858467c895bde0285037c5de81e5b570a049b62a0" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "010000000000000000000000", - "02000000", - "22b3f4cd1835e517741dfddccfa07fa4661b74cf" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "010000000000000000000000000000000200", - "0300000000000000000000000000000004000000", - "43dd0163cdb48f9fe3212bf61b201976067f342bb879ad976d8242acc188ab59cabfe307" - }, - { - "0100000000000000000000000000000000000000000000000000000000000000", - "030000000000000000000000", - "0100000000000000000000000000000002000000", - "030000000000000000000000000000000400", - "462401724b5ce6588d5a54aae5375513a075cfcdf5042112aa29685c912fc2056543" - }, - { - "e66021d5eb8e4f4066d4adb9c33560e4f46e44bb3da0015c94f7088736864200", - "e0eaf5284d884a0e77d31646", - "", - "", - "169fbb2fbf389a995f6390af22228a62" - }, - { - "bae8e37fc83441b16034566b7a806c46bb91c3c5aedb64a6c590bc84d1a5e269", - "e4b47801afc0577e34699b9e", - "4fbdc66f14", - "671fdd", - "0eaccb93da9bb81333aee0c785b240d319719d" - }, - { - "6545fc880c94a95198874296d5cc1fd161320b6920ce07787f86743b275d1ab3", - "2f6d1f0434d8848c1177441f", - "6787f3ea22c127aaf195", - "195495860f04", - "a254dad4f3f96b62b84dc40c84636a5ec12020ec8c2c" - }, - { - "d1894728b3fed1473c528b8426a582995929a1499e9ad8780c8d63d0ab4149c0", - "9f572c614b4745914474e7c7", - "489c8fde2be2cf97e74e932d4ed87d", - "c9882e5386fd9f92ec", - "0df9e308678244c44bc0fd3dc6628dfe55ebb0b9fb2295c8c2" - }, - { - "a44102952ef94b02b805249bac80e6f61455bfac8308a2d40d8c845117808235", - "5c9e940fea2f582950a70d5a", - "0da55210cc1c1b0abde3b2f204d1e9f8b06bc47f", - "1db2316fd568378da107b52b", - "8dbeb9f7255bf5769dd56692404099c2587f64979f21826706d497d5" - }, - { - "9745b3d1ae06556fb6aa7890bebc18fe6b3db4da3d57aa94842b9803a96e07fb", - "6de71860f762ebfbd08284e4", - "f37de21c7ff901cfe8a69615a93fdf7a98cad481796245709f", - "21702de0de18baa9c9596291b08466", - "793576dfa5c0f88729a7ed3c2f1bffb3080d28f6ebb5d3648ce97bd5ba67fd" - }, - { - "b18853f68d833640e42a3c02c25b64869e146d7b233987bddfc240871d7576f7", - "028ec6eb5ea7e298342a94d4", - "9c2159058b1f0fe91433a5bdc20e214eab7fecef4454a10ef0657df21ac7", - "b202b370ef9768ec6561c4fe6b7e7296fa85", - "857e16a64915a787637687db4a9519635cdd454fc2a154fea91f8363a39fec7d0a49" - }, - { - "3c535de192eaed3822a2fbbe2ca9dfc88255e14a661b8aa82cc54236093bbc23", - "688089e55540db1872504e1c", - "734320ccc9d9bbbb19cb81b2af4ecbc3e72834321f7aa0f70b7282b4f33df23f167541", - "ced532ce4159b035277d4dfbb7db62968b13cd4eec", - "626660c26ea6612fb17ad91e8e767639edd6c9faee9d6c7029675b89eaf4ba1ded1a286594" - } -}; - -/* RFC 8452 Appendix C.3 - Counter Wrap Tests (AES-256) */ -static const gcm_siv_kat_t s_kat_wrap[] = { - { - "0000000000000000000000000000000000000000000000000000000000000000", - "000000000000000000000000", - "", - "000000000000000000000000000000004db923dc793ee6497c76dcc03a98e108", - "f3f80f2cf0cb2dd9c5984fcda908456cc537703b5ba70324a6793a7bf218d3eaffffffff000000000000000000000000" - }, - { - "0000000000000000000000000000000000000000000000000000000000000000", - "000000000000000000000000", - "", - "eb3640277c7ffd1303c7a542d02d3e4c0000000000000000", - "18ce4f0b8cb4d0cac65fea8f79257b20888e53e72299e56dffffffff000000000000000000000000" - } -}; - -static int s_run_kat(int cipher, unsigned long keylen, const gcm_siv_kat_t *vec, unsigned long n, const char *name) -{ - unsigned char key[32], nonce[12]; - unsigned char *aad = NULL, *pt = NULL, *exp = NULL; - unsigned char *ct = NULL, *out = NULL, tag[16]; - unsigned long aadlen, ptlen, explen, ctlen, taglen; - unsigned long klen, nlen, slen; - unsigned long i; - int err = CRYPT_OK; - - for (i = 0; i < n; i++) { - klen = sizeof(key); - if ((err = base16_decode(vec[i].key, XSTRLEN(vec[i].key), key, &klen)) != CRYPT_OK) return err; - if (klen != keylen) return CRYPT_FAIL_TESTVECTOR; - - nlen = sizeof(nonce); - if ((err = base16_decode(vec[i].nonce, XSTRLEN(vec[i].nonce), nonce, &nlen)) != CRYPT_OK) return err; - if (nlen != 12) return CRYPT_FAIL_TESTVECTOR; - - aadlen = XSTRLEN(vec[i].aad) / 2; - ptlen = XSTRLEN(vec[i].pt) / 2; - explen = XSTRLEN(vec[i].result) / 2; - if (explen != ptlen + 16) return CRYPT_FAIL_TESTVECTOR; - ctlen = ptlen; - - aad = aadlen ? XMALLOC(aadlen) : NULL; - pt = ptlen ? XMALLOC(ptlen) : NULL; - exp = XMALLOC(explen); - ct = ctlen ? XMALLOC(ctlen) : NULL; - out = ptlen ? XMALLOC(ptlen) : NULL; - if (explen == 0 || (aadlen && !aad) || (ptlen && (!pt || !out)) || !exp || (ctlen && !ct)) { - err = CRYPT_MEM; - goto cleanup; - } - - if (aadlen) { - slen = aadlen; - if ((err = base16_decode(vec[i].aad, XSTRLEN(vec[i].aad), aad, &slen)) != CRYPT_OK) goto cleanup; - } - if (ptlen) { - slen = ptlen; - if ((err = base16_decode(vec[i].pt, XSTRLEN(vec[i].pt), pt, &slen)) != CRYPT_OK) goto cleanup; - } - slen = explen; - if ((err = base16_decode(vec[i].result, XSTRLEN(vec[i].result), exp, &slen)) != CRYPT_OK) goto cleanup; - - /* encrypt */ - taglen = sizeof(tag); - if ((err = gcm_siv_memory(cipher, key, keylen, nonce, 12, aad, aadlen, pt, ptlen, ct, tag, &taglen, LTC_ENCRYPT)) != CRYPT_OK) { - goto cleanup; - } - if (ctlen && (ltc_compare_testvector(ct, ctlen, exp, ctlen, name, (int)i) != 0)) { - err = CRYPT_FAIL_TESTVECTOR; - goto cleanup; - } - if (ltc_compare_testvector(tag, 16, exp + ctlen, 16, name, (int)(i + 0x100)) != 0) { - err = CRYPT_FAIL_TESTVECTOR; - goto cleanup; - } - - /* decrypt */ - if ((err = gcm_siv_memory(cipher, key, keylen, nonce, 12, aad, aadlen, ct, ctlen, out, tag, &taglen, LTC_DECRYPT)) != CRYPT_OK) { - goto cleanup; - } - if (ptlen && (ltc_compare_testvector(out, ptlen, pt, ptlen, name, (int)(i + 0x200)) != 0)) { - err = CRYPT_FAIL_TESTVECTOR; - goto cleanup; - } - - /* tampered tag must fail */ - tag[0] ^= 0x80; - err = gcm_siv_memory(cipher, key, keylen, nonce, 12, aad, aadlen, ct, ctlen, out, tag, &taglen, LTC_DECRYPT); - if (err == CRYPT_OK) { - err = CRYPT_FAIL_TESTVECTOR; - goto cleanup; - } - err = CRYPT_OK; - - XFREE(aad); aad = NULL; - XFREE(pt); pt = NULL; - XFREE(exp); exp = NULL; - XFREE(ct); ct = NULL; - XFREE(out); out = NULL; - } - -cleanup: - if (aad) XFREE(aad); - if (pt) XFREE(pt); - if (exp) XFREE(exp); - if (ct) XFREE(ct); - if (out) XFREE(out); - return err; -} - -#endif /* LTC_TEST */ - -int gcm_siv_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - int cipher, err; - if ((cipher = find_cipher("aes")) == -1) return CRYPT_NOP; - if ((err = s_run_kat(cipher, 16, s_kat_128, LTC_ARRAY_SIZE(s_kat_128), "AES-128-GCM-SIV")) != CRYPT_OK) return err; - if ((err = s_run_kat(cipher, 32, s_kat_256, LTC_ARRAY_SIZE(s_kat_256), "AES-256-GCM-SIV")) != CRYPT_OK) return err; - if ((err = s_run_kat(cipher, 32, s_kat_wrap, LTC_ARRAY_SIZE(s_kat_wrap), "AES-256-GCM-SIV-wrap")) != CRYPT_OK) return err; - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/encauth/ocb3/ocb3_add_aad.c b/src/encauth/ocb3/ocb3_add_aad.c deleted file mode 100644 index 5e5d3987..00000000 --- a/src/encauth/ocb3/ocb3_add_aad.c +++ /dev/null @@ -1,96 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file ocb3_add_aad.c - OCB implementation, add AAD data, by Karel Miko -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_OCB3_MODE - -/** - Add one block of AAD data (internal function) - @param ocb The OCB state - @param aad_block [in] AAD data (block_len size) - @return CRYPT_OK if successful -*/ -static int s_ocb3_int_aad_add_block(ocb3_state *ocb, const unsigned char *aad_block) -{ - unsigned char tmp[MAXBLOCKSIZE]; - int err; - - /* Offset_i = Offset_{i-1} xor L_{ntz(i)} */ - ocb3_int_xor_blocks(ocb->aOffset_current, ocb->aOffset_current, ocb->L_[ocb3_int_ntz(ocb->ablock_index)], ocb->block_len); - - /* Sum_i = Sum_{i-1} xor ENCIPHER(K, A_i xor Offset_i) */ - ocb3_int_xor_blocks(tmp, aad_block, ocb->aOffset_current, ocb->block_len); - if ((err = ecb_encrypt_block(tmp, tmp, &ocb->key)) != CRYPT_OK) { - return err; - } - ocb3_int_xor_blocks(ocb->aSum_current, ocb->aSum_current, tmp, ocb->block_len); - - ocb->ablock_index++; - - return CRYPT_OK; -} - -/** - Add AAD - additional associated data - @param ocb The OCB state - @param aad The AAD data - @param aadlen The size of AAD data (octets) - @return CRYPT_OK if successful -*/ -int ocb3_add_aad(ocb3_state *ocb, const unsigned char *aad, unsigned long aadlen) -{ - int err, x, full_blocks, full_blocks_len, last_block_len; - unsigned char *data; - unsigned long datalen, l; - - LTC_ARGCHK(ocb != NULL); - if (aadlen == 0) return CRYPT_OK; - LTC_ARGCHK(aad != NULL); - - if (ocb->adata_buffer_bytes > 0) { - l = ocb->block_len - ocb->adata_buffer_bytes; - if (l > aadlen) l = aadlen; - XMEMCPY(ocb->adata_buffer+ocb->adata_buffer_bytes, aad, l); - ocb->adata_buffer_bytes += l; - - if (ocb->adata_buffer_bytes == ocb->block_len) { - if ((err = s_ocb3_int_aad_add_block(ocb, ocb->adata_buffer)) != CRYPT_OK) { - return err; - } - ocb->adata_buffer_bytes = 0; - } - - data = (unsigned char *)aad + l; - datalen = aadlen - l; - } - else { - data = (unsigned char *)aad; - datalen = aadlen; - } - - if (datalen == 0) return CRYPT_OK; - - full_blocks = datalen/ocb->block_len; - full_blocks_len = full_blocks * ocb->block_len; - last_block_len = datalen - full_blocks_len; - - for (x=0; xblock_len)) != CRYPT_OK) { - return err; - } - } - - if (last_block_len>0) { - XMEMCPY(ocb->adata_buffer, data+full_blocks_len, last_block_len); - ocb->adata_buffer_bytes = last_block_len; - } - - return CRYPT_OK; -} - -#endif diff --git a/src/encauth/ocb3/ocb3_decrypt.c b/src/encauth/ocb3/ocb3_decrypt.c deleted file mode 100644 index a0b2d301..00000000 --- a/src/encauth/ocb3/ocb3_decrypt.c +++ /dev/null @@ -1,69 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file ocb3_decrypt.c - OCB implementation, decrypt data, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_OCB3_MODE - -/** - Decrypt blocks of ciphertext with OCB - @param ocb The OCB state - @param ct The ciphertext (length multiple of the block size of the block cipher) - @param ctlen The length of the input (octets) - @param pt [out] The plaintext (length of ct) - @return CRYPT_OK if successful -*/ -int ocb3_decrypt(ocb3_state *ocb, const unsigned char *ct, unsigned long ctlen, unsigned char *pt) -{ - unsigned char tmp[MAXBLOCKSIZE]; - int err, i, full_blocks; - unsigned char *pt_b, *ct_b; - - LTC_ARGCHK(ocb != NULL); - if (ctlen == 0) return CRYPT_OK; /* no data, nothing to do */ - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(pt != NULL); - - if (ctlen % ocb->block_len) { /* ctlen has to be multiple of block_len */ - return CRYPT_INVALID_ARG; - } - - full_blocks = ctlen/ocb->block_len; - for(i=0; iblock_len; - ct_b = (unsigned char *)ct+i*ocb->block_len; - - /* ocb->Offset_current[] = ocb->Offset_current[] ^ Offset_{ntz(block_index)} */ - ocb3_int_xor_blocks(ocb->Offset_current, ocb->Offset_current, ocb->L_[ocb3_int_ntz(ocb->block_index)], ocb->block_len); - - /* tmp[] = ct[] XOR ocb->Offset_current[] */ - ocb3_int_xor_blocks(tmp, ct_b, ocb->Offset_current, ocb->block_len); - - /* decrypt */ - if ((err = ecb_decrypt_block(tmp, tmp, &ocb->key)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* pt[] = tmp[] XOR ocb->Offset_current[] */ - ocb3_int_xor_blocks(pt_b, tmp, ocb->Offset_current, ocb->block_len); - - /* ocb->checksum[] = ocb->checksum[] XOR pt[] */ - ocb3_int_xor_blocks(ocb->checksum, ocb->checksum, pt_b, ocb->block_len); - - ocb->block_index++; - } - - err = CRYPT_OK; - -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(tmp, sizeof(tmp)); -#endif - return err; -} - -#endif diff --git a/src/encauth/ocb3/ocb3_decrypt_last.c b/src/encauth/ocb3/ocb3_decrypt_last.c deleted file mode 100644 index 0bb4f608..00000000 --- a/src/encauth/ocb3/ocb3_decrypt_last.c +++ /dev/null @@ -1,97 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file ocb3_decrypt_last.c - OCB implementation, internal helper, by Karel Miko -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_OCB3_MODE - -/** - Finish an OCB (decryption) stream - @param ocb The OCB state - @param ct The remaining ciphertext - @param ctlen The length of the ciphertext (octets) - @param pt [out] The output buffer - @return CRYPT_OK if successful -*/ -int ocb3_decrypt_last(ocb3_state *ocb, const unsigned char *ct, unsigned long ctlen, unsigned char *pt) -{ - unsigned char iOffset_star[MAXBLOCKSIZE]; - unsigned char iPad[MAXBLOCKSIZE]; - int err, x, full_blocks, full_blocks_len, last_block_len; - - LTC_ARGCHK(ocb != NULL); - if (ct == NULL) LTC_ARGCHK(ctlen == 0); - if (ctlen != 0) { - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(pt != NULL); - } - - full_blocks = ctlen/ocb->block_len; - full_blocks_len = full_blocks * ocb->block_len; - last_block_len = ctlen - full_blocks_len; - - /* process full blocks first */ - if (full_blocks>0) { - if ((err = ocb3_decrypt(ocb, ct, full_blocks_len, pt)) != CRYPT_OK) { - goto LBL_ERR; - } - } - - if (last_block_len>0) { - /* Offset_* = Offset_m xor L_* */ - ocb3_int_xor_blocks(iOffset_star, ocb->Offset_current, ocb->L_star, ocb->block_len); - - /* Pad = ENCIPHER(K, Offset_*) */ - if ((err = ecb_encrypt_block(iOffset_star, iPad, &ocb->key)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* P_* = C_* xor Pad[1..bitlen(C_*)] */ - ocb3_int_xor_blocks(pt+full_blocks_len, (unsigned char *)ct+full_blocks_len, iPad, last_block_len); - - /* Checksum_* = Checksum_m xor (P_* || 1 || zeros(127-bitlen(P_*))) */ - ocb3_int_xor_blocks(ocb->checksum, ocb->checksum, pt+full_blocks_len, last_block_len); - for(x=last_block_len; xblock_len; x++) { - if (x == last_block_len) { - ocb->checksum[x] ^= 0x80; - } else { - ocb->checksum[x] ^= 0x00; - } - } - - /* Tag = ENCIPHER(K, Checksum_* xor Offset_* xor L_$) xor HASH(K,A) */ - /* at this point we calculate only: Tag_part = ENCIPHER(K, Checksum_* xor Offset_* xor L_$) */ - for(x=0; xblock_len; x++) { - ocb->tag_part[x] = (ocb->checksum[x] ^ iOffset_star[x]) ^ ocb->L_dollar[x]; - } - if ((err = ecb_encrypt_block(ocb->tag_part, ocb->tag_part, &ocb->key)) != CRYPT_OK) { - goto LBL_ERR; - } - } - else { - /* Tag = ENCIPHER(K, Checksum_m xor Offset_m xor L_$) xor HASH(K,A) */ - /* at this point we calculate only: Tag_part = ENCIPHER(K, Checksum_m xor Offset_m xor L_$) */ - for(x=0; xblock_len; x++) { - ocb->tag_part[x] = (ocb->checksum[x] ^ ocb->Offset_current[x]) ^ ocb->L_dollar[x]; - } - if ((err = ecb_encrypt_block(ocb->tag_part, ocb->tag_part, &ocb->key)) != CRYPT_OK) { - goto LBL_ERR; - } - } - - err = CRYPT_OK; - -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(iOffset_star, MAXBLOCKSIZE); - zeromem(iPad, MAXBLOCKSIZE); -#endif - - return err; -} - -#endif diff --git a/src/encauth/ocb3/ocb3_decrypt_verify_memory.c b/src/encauth/ocb3/ocb3_decrypt_verify_memory.c deleted file mode 100644 index 93c63a28..00000000 --- a/src/encauth/ocb3/ocb3_decrypt_verify_memory.c +++ /dev/null @@ -1,99 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file ocb3_decrypt_verify_memory.c - OCB implementation, helper to decrypt block of memory, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_OCB3_MODE - -/** - Decrypt and compare the tag with OCB - @param cipher The index of the cipher desired - @param key The secret key - @param keylen The length of the secret key (octets) - @param nonce The session nonce (length of the block size of the block cipher) - @param noncelen The length of the nonce (octets) - @param adata The AAD - additional associated data - @param adatalen The length of AAD (octets) - @param ct The ciphertext - @param ctlen The length of the ciphertext (octets) - @param pt [out] The plaintext - @param tag The tag to compare against - @param taglen The length of the tag (octets) - @param stat [out] The result of the tag comparison (1==valid, 0==invalid) - @return CRYPT_OK if successful regardless of the tag comparison -*/ -int ocb3_decrypt_verify_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *adata, unsigned long adatalen, - const unsigned char *ct, unsigned long ctlen, - unsigned char *pt, - const unsigned char *tag, unsigned long taglen, - int *stat) -{ - int err; - ocb3_state *ocb; - unsigned char *buf; - unsigned long buflen; - - /* stat is cleared before anything else can return, it stays 0 unless the tag is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - /* limit taglen */ - taglen = MIN(taglen, MAXBLOCKSIZE); - - /* allocate memory */ - buf = XMALLOC(taglen); - ocb = XMALLOC(sizeof(ocb3_state)); - if (ocb == NULL || buf == NULL) { - if (ocb != NULL) { - XFREE(ocb); - } - if (buf != NULL) { - XFREE(buf); - } - return CRYPT_MEM; - } - - if ((err = ocb3_init(ocb, cipher, key, keylen, nonce, noncelen, taglen)) != CRYPT_OK) { - goto LBL_ERR; - } - - if (adata != NULL || adatalen != 0) { - if ((err = ocb3_add_aad(ocb, adata, adatalen)) != CRYPT_OK) { - goto LBL_ERR; - } - } - - if ((err = ocb3_decrypt_last(ocb, ct, ctlen, pt)) != CRYPT_OK) { - goto LBL_ERR; - } - - buflen = taglen; - if ((err = ocb3_done(ocb, buf, &buflen)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* compare tags */ - if (buflen >= taglen && XMEM_NEQ(buf, tag, taglen) == 0) { - *stat = 1; - } - - err = CRYPT_OK; - -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(ocb, sizeof(ocb3_state)); -#endif - - XFREE(ocb); - XFREE(buf); - return err; -} - -#endif diff --git a/src/encauth/ocb3/ocb3_done.c b/src/encauth/ocb3/ocb3_done.c deleted file mode 100644 index 00a8c292..00000000 --- a/src/encauth/ocb3/ocb3_done.c +++ /dev/null @@ -1,79 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file ocb3_done.c - OCB implementation, INTERNAL ONLY helper, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_OCB3_MODE - -/** - Finish OCB processing and compute the tag - @param ocb The OCB state - @param tag [out] The destination for the authentication tag - @param taglen [in/out] The max size and resulting size of the authentication tag - @return CRYPT_OK if successful -*/ -int ocb3_done(ocb3_state *ocb, unsigned char *tag, unsigned long *taglen) -{ - unsigned char tmp[MAXBLOCKSIZE]; - int err, x; - - LTC_ARGCHK(ocb != NULL); - LTC_ARGCHK(tag != NULL); - LTC_ARGCHK(taglen != NULL); - - /* check taglen */ - if ((int)*taglen < ocb->tag_len) { - *taglen = (unsigned long)ocb->tag_len; - return CRYPT_BUFFER_OVERFLOW; - } - - /* finalize AAD processing */ - - if (ocb->adata_buffer_bytes>0) { - /* Offset_* = Offset_m xor L_* */ - ocb3_int_xor_blocks(ocb->aOffset_current, ocb->aOffset_current, ocb->L_star, ocb->block_len); - - /* CipherInput = (A_* || 1 || zeros(127-bitlen(A_*))) xor Offset_* */ - ocb3_int_xor_blocks(tmp, ocb->adata_buffer, ocb->aOffset_current, ocb->adata_buffer_bytes); - for(x=ocb->adata_buffer_bytes; xblock_len; x++) { - if (x == ocb->adata_buffer_bytes) { - tmp[x] = 0x80 ^ ocb->aOffset_current[x]; - } - else { - tmp[x] = 0x00 ^ ocb->aOffset_current[x]; - } - } - - /* Sum = Sum_m xor ENCIPHER(K, CipherInput) */ - if ((err = ecb_encrypt_block(tmp, tmp, &ocb->key)) != CRYPT_OK) { - goto LBL_ERR; - } - ocb3_int_xor_blocks(ocb->aSum_current, ocb->aSum_current, tmp, ocb->block_len); - } - - /* finalize TAG computing */ - - /* at this point ocb->aSum_current = HASH(K, A) */ - /* tag = tag ^ HASH(K, A) */ - ocb3_int_xor_blocks(tmp, ocb->tag_part, ocb->aSum_current, ocb->block_len); - - /* copy tag bytes */ - for(x = 0; x < ocb->tag_len; x++) tag[x] = tmp[x]; - *taglen = (unsigned long)ocb->tag_len; - - err = CRYPT_OK; - -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(tmp, MAXBLOCKSIZE); - zeromem(ocb, sizeof(*ocb)); -#endif - - return err; -} - -#endif diff --git a/src/encauth/ocb3/ocb3_encrypt.c b/src/encauth/ocb3/ocb3_encrypt.c deleted file mode 100644 index 57162a8a..00000000 --- a/src/encauth/ocb3/ocb3_encrypt.c +++ /dev/null @@ -1,69 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file ocb3_encrypt.c - OCB implementation, encrypt data, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_OCB3_MODE - -/** - Encrypt blocks of data with OCB - @param ocb The OCB state - @param pt The plaintext (length multiple of the block size of the block cipher) - @param ptlen The length of the input (octets) - @param ct [out] The ciphertext (same size as the pt) - @return CRYPT_OK if successful -*/ -int ocb3_encrypt(ocb3_state *ocb, const unsigned char *pt, unsigned long ptlen, unsigned char *ct) -{ - unsigned char tmp[MAXBLOCKSIZE]; - int err, i, full_blocks; - unsigned char *pt_b, *ct_b; - - LTC_ARGCHK(ocb != NULL); - if (ptlen == 0) return CRYPT_OK; /* no data, nothing to do */ - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - - if (ptlen % ocb->block_len) { /* ptlen has to be multiple of block_len */ - return CRYPT_INVALID_ARG; - } - - full_blocks = ptlen/ocb->block_len; - for(i=0; iblock_len; - ct_b = (unsigned char *)ct+i*ocb->block_len; - - /* ocb->Offset_current[] = ocb->Offset_current[] ^ Offset_{ntz(block_index)} */ - ocb3_int_xor_blocks(ocb->Offset_current, ocb->Offset_current, ocb->L_[ocb3_int_ntz(ocb->block_index)], ocb->block_len); - - /* tmp[] = pt[] XOR ocb->Offset_current[] */ - ocb3_int_xor_blocks(tmp, pt_b, ocb->Offset_current, ocb->block_len); - - /* encrypt */ - if ((err = ecb_encrypt_block(tmp, tmp, &ocb->key)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* ct[] = tmp[] XOR ocb->Offset_current[] */ - ocb3_int_xor_blocks(ct_b, tmp, ocb->Offset_current, ocb->block_len); - - /* ocb->checksum[] = ocb->checksum[] XOR pt[] */ - ocb3_int_xor_blocks(ocb->checksum, ocb->checksum, pt_b, ocb->block_len); - - ocb->block_index++; - } - - err = CRYPT_OK; - -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(tmp, sizeof(tmp)); -#endif - return err; -} - -#endif diff --git a/src/encauth/ocb3/ocb3_encrypt_authenticate_memory.c b/src/encauth/ocb3/ocb3_encrypt_authenticate_memory.c deleted file mode 100644 index b1189252..00000000 --- a/src/encauth/ocb3/ocb3_encrypt_authenticate_memory.c +++ /dev/null @@ -1,72 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file ocb3_encrypt_authenticate_memory.c - OCB implementation, encrypt block of memory, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_OCB3_MODE - -/** - Encrypt and generate an authentication code for a buffer of memory - @param cipher The index of the cipher desired - @param key The secret key - @param keylen The length of the secret key (octets) - @param nonce The session nonce (length of the block ciphers block size) - @param noncelen The length of the nonce (octets) - @param adata The AAD - additional associated data - @param adatalen The length of AAD (octets) - @param pt The plaintext - @param ptlen The length of the plaintext (octets) - @param ct [out] The ciphertext - @param tag [out] The authentication tag - @param taglen [in/out] The max size and resulting size of the authentication tag - @return CRYPT_OK if successful -*/ -int ocb3_encrypt_authenticate_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *adata, unsigned long adatalen, - const unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - unsigned char *tag, unsigned long *taglen) -{ - int err; - ocb3_state *ocb; - - LTC_ARGCHK(taglen != NULL); - - /* allocate memory */ - ocb = XMALLOC(sizeof(ocb3_state)); - if (ocb == NULL) { - return CRYPT_MEM; - } - - if ((err = ocb3_init(ocb, cipher, key, keylen, nonce, noncelen, *taglen)) != CRYPT_OK) { - goto LBL_ERR; - } - - if (adata != NULL || adatalen != 0) { - if ((err = ocb3_add_aad(ocb, adata, adatalen)) != CRYPT_OK) { - goto LBL_ERR; - } - } - - if ((err = ocb3_encrypt_last(ocb, pt, ptlen, ct)) != CRYPT_OK) { - goto LBL_ERR; - } - - err = ocb3_done(ocb, tag, taglen); - -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(ocb, sizeof(ocb3_state)); -#endif - - XFREE(ocb); - return err; -} - -#endif diff --git a/src/encauth/ocb3/ocb3_encrypt_last.c b/src/encauth/ocb3/ocb3_encrypt_last.c deleted file mode 100644 index c0122a0e..00000000 --- a/src/encauth/ocb3/ocb3_encrypt_last.c +++ /dev/null @@ -1,98 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file ocb3_encrypt_last.c - OCB implementation, internal helper, by Karel Miko -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_OCB3_MODE - -/** - Finish an OCB (encryption) stream - @param ocb The OCB state - @param pt The remaining plaintext - @param ptlen The length of the plaintext (octets) - @param ct [out] The output buffer - @return CRYPT_OK if successful -*/ -int ocb3_encrypt_last(ocb3_state *ocb, const unsigned char *pt, unsigned long ptlen, unsigned char *ct) -{ - unsigned char iOffset_star[MAXBLOCKSIZE]; - unsigned char iPad[MAXBLOCKSIZE]; - int err, x, full_blocks, full_blocks_len, last_block_len; - - LTC_ARGCHK(ocb != NULL); - if (pt == NULL) LTC_ARGCHK(ptlen == 0); - if (ptlen != 0) { - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - } - - full_blocks = ptlen/ocb->block_len; - full_blocks_len = full_blocks * ocb->block_len; - last_block_len = ptlen - full_blocks_len; - - /* process full blocks first */ - if (full_blocks>0) { - if ((err = ocb3_encrypt(ocb, pt, full_blocks_len, ct)) != CRYPT_OK) { - goto LBL_ERR; - } - } - - /* at this point: m = ocb->block_index (last block index), Offset_m = ocb->Offset_current */ - - if (last_block_len>0) { - /* Offset_* = Offset_m xor L_* */ - ocb3_int_xor_blocks(iOffset_star, ocb->Offset_current, ocb->L_star, ocb->block_len); - - /* Pad = ENCIPHER(K, Offset_*) */ - if ((err = ecb_encrypt_block(iOffset_star, iPad, &ocb->key)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* C_* = P_* xor Pad[1..bitlen(P_*)] */ - ocb3_int_xor_blocks(ct+full_blocks_len, pt+full_blocks_len, iPad, last_block_len); - - /* Checksum_* = Checksum_m xor (P_* || 1 || zeros(127-bitlen(P_*))) */ - ocb3_int_xor_blocks(ocb->checksum, ocb->checksum, pt+full_blocks_len, last_block_len); - for(x=last_block_len; xblock_len; x++) { - if (x == last_block_len) { - ocb->checksum[x] ^= 0x80; - } else { - ocb->checksum[x] ^= 0x00; - } - } - - /* Tag = ENCIPHER(K, Checksum_* xor Offset_* xor L_$) xor HASH(K,A) */ - /* at this point we calculate only: Tag_part = ENCIPHER(K, Checksum_* xor Offset_* xor L_$) */ - for(x=0; xblock_len; x++) { - ocb->tag_part[x] = (ocb->checksum[x] ^ iOffset_star[x]) ^ ocb->L_dollar[x]; - } - if ((err = ecb_encrypt_block(ocb->tag_part, ocb->tag_part, &ocb->key)) != CRYPT_OK) { - goto LBL_ERR; - } - } else { - /* Tag = ENCIPHER(K, Checksum_m xor Offset_m xor L_$) xor HASH(K,A) */ - /* at this point we calculate only: Tag_part = ENCIPHER(K, Checksum_m xor Offset_m xor L_$) */ - for(x=0; xblock_len; x++) { - ocb->tag_part[x] = (ocb->checksum[x] ^ ocb->Offset_current[x]) ^ ocb->L_dollar[x]; - } - if ((err = ecb_encrypt_block(ocb->tag_part, ocb->tag_part, &ocb->key)) != CRYPT_OK) { - goto LBL_ERR; - } - } - - err = CRYPT_OK; - -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(iOffset_star, MAXBLOCKSIZE); - zeromem(iPad, MAXBLOCKSIZE); -#endif - - return err; -} - -#endif diff --git a/src/encauth/ocb3/ocb3_init.c b/src/encauth/ocb3/ocb3_init.c deleted file mode 100644 index 700d9bfd..00000000 --- a/src/encauth/ocb3/ocb3_init.c +++ /dev/null @@ -1,188 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file ocb3_init.c - OCB implementation, initialize state, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_OCB3_MODE - -static void s_ocb3_int_calc_offset_zero(ocb3_state *ocb, const unsigned char *nonce, unsigned long noncelen, unsigned long taglen) -{ - int x, y, bottom; - int idx, shift; - unsigned char iNonce[MAXBLOCKSIZE]; - unsigned char iKtop[MAXBLOCKSIZE]; - unsigned char iStretch[MAXBLOCKSIZE+8]; - - /* Nonce = zeros(127-bitlen(N)) || 1 || N */ - zeromem(iNonce, sizeof(iNonce)); - for (x = ocb->block_len-1, y=0; y<(int)noncelen; x--, y++) { - iNonce[x] = nonce[noncelen-y-1]; - } - iNonce[x] = 0x01; - iNonce[0] |= ((taglen*8) % 128) << 1; - - /* bottom = str2num(Nonce[123..128]) */ - bottom = iNonce[ocb->block_len-1] & 0x3F; - - /* Ktop = ENCIPHER(K, Nonce[1..122] || zeros(6)) */ - iNonce[ocb->block_len-1] = iNonce[ocb->block_len-1] & 0xC0; - if ((ecb_encrypt_block(iNonce, iKtop, &ocb->key)) != CRYPT_OK) { - zeromem(ocb->Offset_current, ocb->block_len); - return; - } - - /* Stretch = Ktop || (Ktop[1..64] xor Ktop[9..72]) */ - for (x = 0; x < ocb->block_len; x++) { - iStretch[x] = iKtop[x]; - } - for (y = 0; y < 8; y++) { - iStretch[x+y] = iKtop[y] ^ iKtop[y+1]; - } - - /* Offset_0 = Stretch[1+bottom..128+bottom] */ - idx = bottom / 8; - shift = (bottom % 8); - for (x = 0; x < ocb->block_len; x++) { - ocb->Offset_current[x] = iStretch[idx+x] << shift; - if (shift > 0) { - ocb->Offset_current[x] |= iStretch[idx+x+1] >> (8-shift); - } - } -} - -#define polys ocb3_polys -static const struct { - int len; - unsigned char poly_mul[MAXBLOCKSIZE]; -} polys[] = { -{ - 8, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B } -}, { - 16, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87 } -} -}; - -/** - Initialize an OCB context - @param ocb [out] The destination of the OCB state - @param cipher The index of the desired cipher - @param key The secret key - @param keylen The length of the secret key (octets) - @param nonce The session nonce - @param noncelen The length of the session nonce (octets, up to 15) - @param taglen The length of the tag (octets, up to 16) - @return CRYPT_OK if successful -*/ -int ocb3_init(ocb3_state *ocb, int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - unsigned long taglen) -{ - int poly, x, y, m, err; - unsigned char *previous, *current; - - LTC_ARGCHK(ocb != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(nonce != NULL); - - /* valid cipher? */ - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - - /* Valid Nonce? - * As of RFC7253: "string of no more than 120 bits" */ - if (noncelen > (120/8)) { - return CRYPT_INVALID_ARG; - } - - /* The blockcipher must have a 128-bit blocksize */ - if (cipher_descriptor[cipher].block_length != 16) { - return CRYPT_INVALID_ARG; - } - - /* The TAGLEN may be any value up to 128 (bits) */ - if (taglen > 16) { - return CRYPT_INVALID_ARG; - } - ocb->tag_len = taglen; - - /* determine which polys to use */ - ocb->block_len = cipher_descriptor[cipher].block_length; - x = (int)LTC_ARRAY_SIZE(polys); - for (poly = 0; poly < x; poly++) { - if (polys[poly].len == ocb->block_len) { - break; - } - } - if (poly == x) { - return CRYPT_INVALID_ARG; /* block_len not found in polys */ - } - if (polys[poly].len != ocb->block_len) { - return CRYPT_INVALID_ARG; - } - - /* schedule the key */ - if ((err = ecb_start(cipher, key, keylen, 0, &ocb->key)) != CRYPT_OK) { - return err; - } - - /* L_* = ENCIPHER(K, zeros(128)) */ - zeromem(ocb->L_star, ocb->block_len); - if ((err = ecb_encrypt_block(ocb->L_star, ocb->L_star, &ocb->key)) != CRYPT_OK) { - return err; - } - - /* compute L_$, L_0, L_1, ... */ - for (x = -1; x < 32; x++) { - if (x == -1) { /* gonna compute: L_$ = double(L_*) */ - current = ocb->L_dollar; - previous = ocb->L_star; - } - else if (x == 0) { /* gonna compute: L_0 = double(L_$) */ - current = ocb->L_[0]; - previous = ocb->L_dollar; - } - else { /* gonna compute: L_i = double(L_{i-1}) for every integer i > 0 */ - current = ocb->L_[x]; - previous = ocb->L_[x-1]; - } - m = previous[0] >> 7; - for (y = 0; y < ocb->block_len-1; y++) { - current[y] = ((previous[y] << 1) | (previous[y+1] >> 7)) & 255; - } - current[ocb->block_len-1] = (previous[ocb->block_len-1] << 1) & 255; - if (m == 1) { - /* current[] = current[] XOR polys[poly].poly_mul[]*/ - ocb3_int_xor_blocks(current, current, polys[poly].poly_mul, ocb->block_len); - } - } - - /* initialize ocb->Offset_current = Offset_0 */ - s_ocb3_int_calc_offset_zero(ocb, nonce, noncelen, taglen); - - /* initialize checksum to all zeros */ - zeromem(ocb->checksum, ocb->block_len); - - /* set block index */ - ocb->block_index = 1; - - /* initialize AAD related stuff */ - ocb->ablock_index = 1; - ocb->adata_buffer_bytes = 0; - zeromem(ocb->aOffset_current, ocb->block_len); - zeromem(ocb->aSum_current, ocb->block_len); - - return CRYPT_OK; -} - -#undef polys - -#endif diff --git a/src/encauth/ocb3/ocb3_int_ntz.c b/src/encauth/ocb3/ocb3_int_ntz.c deleted file mode 100644 index a667ff60..00000000 --- a/src/encauth/ocb3/ocb3_int_ntz.c +++ /dev/null @@ -1,35 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file ocb3_int_ntz.c - OCB implementation, INTERNAL ONLY helper, by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_OCB3_MODE - -/** - Returns the number of leading zero bits [from lsb up] (internal function) - @param x The 32-bit value to observe - @return The number of bits [from the lsb up] that are zero -*/ -int ocb3_int_ntz(unsigned long x) -{ -#if defined(LTC_HAVE_CTZL_BUILTIN) - if (x == 0) - return sizeof(unsigned long) * CHAR_BIT; - return __builtin_ctzl(x); -#else - int c; - x &= 0xFFFFFFFFUL; - c = 0; - while ((x & 1) == 0) { - ++c; - x >>= 1; - } - return c; -#endif -} - -#endif diff --git a/src/encauth/ocb3/ocb3_int_xor_blocks.c b/src/encauth/ocb3/ocb3_int_xor_blocks.c deleted file mode 100644 index f9f342aa..00000000 --- a/src/encauth/ocb3/ocb3_int_xor_blocks.c +++ /dev/null @@ -1,30 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file ocb3_int_xor_blocks.c - OCB implementation, INTERNAL ONLY helper, by Karel Miko -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_OCB3_MODE - -/** - Compute xor for two blocks of bytes 'out = block_a XOR block_b' (internal function) - @param out The block of bytes (output) - @param block_a The block of bytes (input) - @param block_b The block of bytes (input) - @param block_len The size of block_a, block_b, out -*/ -void ocb3_int_xor_blocks(unsigned char *out, const unsigned char *block_a, const unsigned char *block_b, unsigned long block_len) -{ - int x; - if (out == block_a) { - for (x = 0; x < (int)block_len; x++) out[x] ^= block_b[x]; - } - else { - for (x = 0; x < (int)block_len; x++) out[x] = block_a[x] ^ block_b[x]; - } -} - -#endif diff --git a/src/encauth/ocb3/ocb3_test.c b/src/encauth/ocb3/ocb3_test.c deleted file mode 100644 index 4082ccaa..00000000 --- a/src/encauth/ocb3/ocb3_test.c +++ /dev/null @@ -1,299 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file ocb3_test.c - OCB implementation, self-test by Tom St Denis -*/ -#include "tomcrypt_private.h" - -#ifdef LTC_OCB3_MODE - -/** - Test the OCB protocol - @return CRYPT_OK if successful -*/ -int ocb3_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - /* test vectors from: http://tools.ietf.org/html/draft-krovetz-ocb-03 */ - unsigned char key[16] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F }; - unsigned char nonce[12] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B }; - const struct { - int ptlen; - int aadlen; - unsigned char pt[64], aad[64], ct[64], tag[16]; - } tests[] = { - - { /* index:0 */ - 0, /* PLAINTEXT length */ - 0, /* AAD length */ - { 0 }, /* PLAINTEXT */ - { 0 }, /* AAD */ - { 0 }, /* CIPHERTEXT */ - { 0x19,0x7b,0x9c,0x3c,0x44,0x1d,0x3c,0x83,0xea,0xfb,0x2b,0xef,0x63,0x3b,0x91,0x82 }, /* TAG */ - }, - { /* index:1 */ - 8, /* PLAINTEXT length */ - 8, /* AAD length */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 }, /* PLAINTEXT */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 }, /* AAD */ - { 0x92,0xb6,0x57,0x13,0x0a,0x74,0xb8,0x5a }, /* CIPHERTEXT */ - { 0x16,0xdc,0x76,0xa4,0x6d,0x47,0xe1,0xea,0xd5,0x37,0x20,0x9e,0x8a,0x96,0xd1,0x4e }, /* TAG */ - }, - { /* index:2 */ - 0, /* PLAINTEXT length */ - 8, /* AAD length */ - { 0 }, /* PLAINTEXT */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 }, /* AAD */ - { 0 }, /* CIPHERTEXT */ - { 0x98,0xb9,0x15,0x52,0xc8,0xc0,0x09,0x18,0x50,0x44,0xe3,0x0a,0x6e,0xb2,0xfe,0x21 }, /* TAG */ - }, - { /* index:3 */ - 8, /* PLAINTEXT length */ - 0, /* AAD length */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 }, /* PLAINTEXT */ - { 0 }, /* AAD */ - { 0x92,0xb6,0x57,0x13,0x0a,0x74,0xb8,0x5a }, /* CIPHERTEXT */ - { 0x97,0x1e,0xff,0xca,0xe1,0x9a,0xd4,0x71,0x6f,0x88,0xe8,0x7b,0x87,0x1f,0xbe,0xed }, /* TAG */ - }, - { /* index:4 */ - 16, /* PLAINTEXT length */ - 16, /* AAD length */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }, /* PLAINTEXT */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }, /* AAD */ - { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22 }, /* CIPHERTEXT */ - { 0x77,0x6c,0x99,0x24,0xd6,0x72,0x3a,0x1f,0xc4,0x52,0x45,0x32,0xac,0x3e,0x5b,0xeb }, /* TAG */ - }, - { /* index:5 */ - 0, /* PLAINTEXT length */ - 16, /* AAD length */ - { 0 }, /* PLAINTEXT */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }, /* AAD */ - { 0 }, /* CIPHERTEXT */ - { 0x7d,0xdb,0x8e,0x6c,0xea,0x68,0x14,0x86,0x62,0x12,0x50,0x96,0x19,0xb1,0x9c,0xc6 }, /* TAG */ - }, - { /* index:6 */ - 16, /* PLAINTEXT length */ - 0, /* AAD length */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }, /* PLAINTEXT */ - { 0 }, /* AAD */ - { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22 }, /* CIPHERTEXT */ - { 0x13,0xcc,0x8b,0x74,0x78,0x07,0x12,0x1a,0x4c,0xbb,0x3e,0x4b,0xd6,0xb4,0x56,0xaf }, /* TAG */ - }, - { /* index:7 */ - 24, /* PLAINTEXT length */ - 24, /* AAD length */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17 }, /* PLAINTEXT */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17 }, /* AAD */ - { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22,0xfc,0xfc,0xee,0x7a,0x2a,0x8d,0x4d,0x48 }, /* CIPHERTEXT */ - { 0x5f,0xa9,0x4f,0xc3,0xf3,0x88,0x20,0xf1,0xdc,0x3f,0x3d,0x1f,0xd4,0xe5,0x5e,0x1c }, /* TAG */ - }, - { /* index:8 */ - 0, /* PLAINTEXT length */ - 24, /* AAD length */ - { 0 }, /* PLAINTEXT */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17 }, /* AAD */ - { 0 }, /* CIPHERTEXT */ - { 0x28,0x20,0x26,0xda,0x30,0x68,0xbc,0x9f,0xa1,0x18,0x68,0x1d,0x55,0x9f,0x10,0xf6 }, /* TAG */ - }, - { /* index:9 */ - 24, /* PLAINTEXT length */ - 0, /* AAD length */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17 }, /* PLAINTEXT */ - { 0 }, /* AAD */ - { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22,0xfc,0xfc,0xee,0x7a,0x2a,0x8d,0x4d,0x48 }, /* CIPHERTEXT */ - { 0x6e,0xf2,0xf5,0x25,0x87,0xfd,0xa0,0xed,0x97,0xdc,0x7e,0xed,0xe2,0x41,0xdf,0x68 }, /* TAG */ - }, - { /* index:10 */ - 32, /* PLAINTEXT length */ - 32, /* AAD length */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f }, /* PLAINTEXT */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f }, /* AAD */ - { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22,0xce,0xaa,0xb9,0xb0,0x5d,0xf7,0x71,0xa6,0x57,0x14,0x9d,0x53,0x77,0x34,0x63,0xcb }, /* CIPHERTEXT */ - { 0xb2,0xa0,0x40,0xdd,0x3b,0xd5,0x16,0x43,0x72,0xd7,0x6d,0x7b,0xb6,0x82,0x42,0x40 }, /* TAG */ - }, - { /* index:11 */ - 0, /* PLAINTEXT length */ - 32, /* AAD length */ - { 0 }, /* PLAINTEXT */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f }, /* AAD */ - { 0 }, /* CIPHERTEXT */ - { 0xe1,0xe0,0x72,0x63,0x3b,0xad,0xe5,0x1a,0x60,0xe8,0x59,0x51,0xd9,0xc4,0x2a,0x1b }, /* TAG */ - }, - { /* index:12 */ - 32, /* PLAINTEXT length */ - 0, /* AAD length */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f }, /* PLAINTEXT */ - { 0 }, /* AAD */ - { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22,0xce,0xaa,0xb9,0xb0,0x5d,0xf7,0x71,0xa6,0x57,0x14,0x9d,0x53,0x77,0x34,0x63,0xcb }, /* CIPHERTEXT */ - { 0x4a,0x3b,0xae,0x82,0x44,0x65,0xcf,0xda,0xf8,0xc4,0x1f,0xc5,0x0c,0x7d,0xf9,0xd9 }, /* TAG */ - }, - { /* index:13 */ - 40, /* PLAINTEXT length */ - 40, /* AAD length */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 }, /* PLAINTEXT */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 }, /* AAD */ - { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22,0xce,0xaa,0xb9,0xb0,0x5d,0xf7,0x71,0xa6,0x57,0x14,0x9d,0x53,0x77,0x34,0x63,0xcb,0x68,0xc6,0x57,0x78,0xb0,0x58,0xa6,0x35 }, /* CIPHERTEXT */ - { 0x65,0x9c,0x62,0x32,0x11,0xde,0xea,0x0d,0xe3,0x0d,0x2c,0x38,0x18,0x79,0xf4,0xc8 }, /* TAG */ - }, - { /* index:14 */ - 0, /* PLAINTEXT length */ - 40, /* AAD length */ - { 0 }, /* PLAINTEXT */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 }, /* AAD */ - { 0 }, /* CIPHERTEXT */ - { 0x7a,0xeb,0x7a,0x69,0xa1,0x68,0x7d,0xd0,0x82,0xca,0x27,0xb0,0xd9,0xa3,0x70,0x96 }, /* TAG */ - }, - { /* index:15 */ - 40, /* PLAINTEXT length */ - 0, /* AAD length */ - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 }, /* PLAINTEXT */ - { 0 }, /* AAD */ - { 0xbe,0xa5,0xe8,0x79,0x8d,0xbe,0x71,0x10,0x03,0x1c,0x14,0x4d,0xa0,0xb2,0x61,0x22,0xce,0xaa,0xb9,0xb0,0x5d,0xf7,0x71,0xa6,0x57,0x14,0x9d,0x53,0x77,0x34,0x63,0xcb,0x68,0xc6,0x57,0x78,0xb0,0x58,0xa6,0x35 }, /* CIPHERTEXT */ - { 0x06,0x0c,0x84,0x67,0xf4,0xab,0xab,0x5e,0x8b,0x3c,0x20,0x67,0xa2,0xe1,0x15,0xdc }, /* TAG */ - }, - -}; - /* As of RFC 7253 - 'Appendix A. Sample Results' - * The next tuple shows a result with a tag length of 96 bits and a - different key. - - K: 0F0E0D0C0B0A09080706050403020100 - - N: BBAA9988776655443322110D - A: 000102030405060708090A0B0C0D0E0F1011121314151617 - 18191A1B1C1D1E1F2021222324252627 - P: 000102030405060708090A0B0C0D0E0F1011121314151617 - 18191A1B1C1D1E1F2021222324252627 - C: 1792A4E31E0755FB03E31B22116E6C2DDF9EFD6E33D536F1 - A0124B0A55BAE884ED93481529C76B6AD0C515F4D1CDD4FD - AC4F02AA - - The C has been split up in C and T (tag) - */ - const unsigned char K[] = { 0x0F,0x0E,0x0D,0x0C,0x0B,0x0A,0x09,0x08, - 0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00 }; - const unsigned char N[] = { 0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44, - 0x33,0x22,0x11,0x0D }; - const unsigned char A[] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, - 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, - 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, - 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, - 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 }; - const unsigned char P[] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, - 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, - 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, - 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, - 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 }; - const unsigned char C[] = { 0x17,0x92,0xA4,0xE3,0x1E,0x07,0x55,0xFB, - 0x03,0xE3,0x1B,0x22,0x11,0x6E,0x6C,0x2D, - 0xDF,0x9E,0xFD,0x6E,0x33,0xD5,0x36,0xF1, - 0xA0,0x12,0x4B,0x0A,0x55,0xBA,0xE8,0x84, - 0xED,0x93,0x48,0x15,0x29,0xC7,0x6B,0x6A }; - const unsigned char T[] = { 0xD0,0xC5,0x15,0xF4,0xD1,0xCD,0xD4,0xFD, - 0xAC,0x4F,0x02,0xAA }; - - int err, x, idx, res; - unsigned long len; - unsigned char outct[MAXBLOCKSIZE] = { 0 }; - unsigned char outtag[MAXBLOCKSIZE] = { 0 }; - ocb3_state ocb; - - /* AES can be under rijndael or aes... try to find it */ - if ((idx = find_cipher("aes")) == -1) { - if ((idx = find_cipher("rijndael")) == -1) { - return CRYPT_NOP; - } - } - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { - len = 16; /* must be the same as the required taglen */ - if ((err = ocb3_encrypt_authenticate_memory(idx, - key, sizeof(key), - nonce, sizeof(nonce), - tests[x].aadlen != 0 ? tests[x].aad : NULL, tests[x].aadlen, - tests[x].ptlen != 0 ? tests[x].pt : NULL, tests[x].ptlen, - tests[x].ptlen != 0 ? outct : NULL, outtag, &len)) != CRYPT_OK) { - return err; - } - - if (ltc_compare_testvector(outtag, len, tests[x].tag, sizeof(tests[x].tag), "OCB3 Tag", x) || - ltc_compare_testvector(outct, tests[x].ptlen, tests[x].ct, tests[x].ptlen, "OCB3 CT", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - - if ((err = ocb3_decrypt_verify_memory(idx, - key, sizeof(key), - nonce, sizeof(nonce), - tests[x].aadlen != 0 ? tests[x].aad : NULL, tests[x].aadlen, - tests[x].ptlen != 0 ? outct : NULL, tests[x].ptlen, - tests[x].ptlen != 0 ? outct : NULL, tests[x].tag, len, &res)) != CRYPT_OK) { - return err; - } - if ((res != 1) || ltc_compare_testvector(outct, tests[x].ptlen, tests[x].pt, tests[x].ptlen, "OCB3", x)) { -#ifdef LTC_TEST_DBG - printf("\n\nOCB3: Failure-decrypt - res = %d\n", res); -#endif - return CRYPT_FAIL_TESTVECTOR; - } - } - - /* RFC 7253 - test vector with a tag length of 96 bits - part 1 */ - x = 99; - len = 12; - if ((err = ocb3_encrypt_authenticate_memory(idx, - K, sizeof(K), - N, sizeof(N), - A, sizeof(A), - P, sizeof(P), - outct, outtag, &len)) != CRYPT_OK) { - return err; - } - - if (ltc_compare_testvector(outtag, len, T, sizeof(T), "OCB3 Tag", x) || - ltc_compare_testvector(outct, sizeof(P), C, sizeof(C), "OCB3 CT", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - - if ((err = ocb3_decrypt_verify_memory(idx, - K, sizeof(K), - N, sizeof(N), - A, sizeof(A), - C, sizeof(C), - outct, T, sizeof(T), &res)) != CRYPT_OK) { - return err; - } - if ((res != 1) || ltc_compare_testvector(outct, sizeof(C), P, sizeof(P), "OCB3", x)) { -#ifdef LTC_TEST_DBG - printf("\n\nOCB3: Failure-decrypt - res = %d\n", res); -#endif - return CRYPT_FAIL_TESTVECTOR; - } - - /* RFC 7253 - test vector with a tag length of 96 bits - part 2 */ - x = 100; - if ((err = ocb3_init(&ocb, idx, K, sizeof(K), N, sizeof(N), 12)) != CRYPT_OK) return err; - if ((err = ocb3_add_aad(&ocb, A, sizeof(A))) != CRYPT_OK) return err; - if ((err = ocb3_encrypt(&ocb, P, 32, outct)) != CRYPT_OK) return err; - if ((err = ocb3_encrypt_last(&ocb, P+32, sizeof(P)-32, outct+32)) != CRYPT_OK) return err; - len = sizeof(outtag); /* intentionally more than 12 */ - if ((err = ocb3_done(&ocb, outtag, &len)) != CRYPT_OK) return err; - if (ltc_compare_testvector(outct, sizeof(P), C, sizeof(C), "OCB3 CT", x)) return CRYPT_FAIL_TESTVECTOR; - if (ltc_compare_testvector(outtag, len, T, sizeof(T), "OCB3 Tag.enc", x)) return CRYPT_FAIL_TESTVECTOR; - if ((err = ocb3_init(&ocb, idx, K, sizeof(K), N, sizeof(N), 12)) != CRYPT_OK) return err; - if ((err = ocb3_add_aad(&ocb, A, sizeof(A))) != CRYPT_OK) return err; - if ((err = ocb3_decrypt(&ocb, C, 32, outct)) != CRYPT_OK) return err; - if ((err = ocb3_decrypt_last(&ocb, C+32, sizeof(C)-32, outct+32)) != CRYPT_OK) return err; - len = sizeof(outtag); /* intentionally more than 12 */ - if ((err = ocb3_done(&ocb, outtag, &len)) != CRYPT_OK) return err; - if (ltc_compare_testvector(outct, sizeof(C), P, sizeof(P), "OCB3 PT", x)) return CRYPT_FAIL_TESTVECTOR; - if (ltc_compare_testvector(outtag, len, T, sizeof(T), "OCB3 Tag.dec", x)) return CRYPT_FAIL_TESTVECTOR; - - return CRYPT_OK; -#endif /* LTC_TEST */ -} - -#endif /* LTC_OCB3_MODE */ diff --git a/src/encauth/siv/siv.c b/src/encauth/siv/siv.c deleted file mode 100644 index 66e7967c..00000000 --- a/src/encauth/siv/siv.c +++ /dev/null @@ -1,874 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file siv.c - RFC 5297 SIV - Synthetic Initialization Vector, Steffen Jaeckel -*/ - -#ifdef LTC_SIV_MODE - -/* RFC 5297 - Chapter 7 - Security Considerations - * - * [...] S2V must not be - * passed more than 127 components. Since SIV includes the plaintext as - * a component to S2V, that limits the number of components of - * associated data that can be safely passed to SIV to 126. - */ -static const unsigned long s_siv_max_aad_components = 126; - -LTC_ALIGN_MSVC(16) -typedef struct siv_buf_t { - union { -#ifdef LTC_FAST - LTC_FAST_TYPE word[16/sizeof(LTC_FAST_TYPE)]; -#endif - unsigned char byte[16]; - } u; -} siv_buf_t LTC_ALIGN(16); - -LTC_STATIC_ASSERT(size_of_siv_buf_t_is_16_bytes, sizeof(siv_buf_t) == 16); - -static LTC_INLINE void s_siv_dbl(siv_buf_t *D_) -{ - unsigned char *D = D_->u.byte; - unsigned int y, mask, msb, len; - - /* setup the system */ - mask = 0x87; - len = 16; - - /* if msb(L * u^(x+1)) = 0 then just shift, otherwise shift and xor constant mask */ - msb = D[0] >> 7; - - /* shift left */ - for (y = 0; y < (len - 1); y++) { - D[y] = ((D[y] << 1) | (D[y + 1] >> 7)) & 255; - } - D[len - 1] = ((D[len - 1] << 1) ^ (msb ? mask : 0)) & 255; -} - -typedef struct siv_omac_ctx_t { - omac_state omac; - int cipher; -} siv_omac_ctx_t; - -static LTC_INLINE void s_siv_xor_buf(const siv_buf_t *a, siv_buf_t *b) -{ - unsigned int n; -#ifdef LTC_FAST -#ifdef ENDIAN_64BITWORD - LTC_UNUSED_PARAM(n); - b->u.word[0] ^= a->u.word[0]; - b->u.word[1] ^= a->u.word[1]; -#else - for (n = 0; n < LTC_ARRAY_SIZE(a->u.word); ++n) { - b->u.word[n] ^= a->u.word[n]; - } -#endif -#else - for (n = 0; n < LTC_ARRAY_SIZE(a->u.byte); ++n) { - b->u.byte[n] ^= a->u.byte[n]; - } -#endif -} - -static LTC_INLINE int s_siv_ctx_init(int cipher, - const unsigned char *key, unsigned long keylen, - siv_omac_ctx_t *ctx) -{ - ctx->cipher = cipher; - return omac_init(&ctx->omac, cipher, key, keylen); -} - -static LTC_INLINE int s_siv_omac_memory(siv_omac_ctx_t *ctx, - const unsigned char *in, unsigned long inlen, - siv_buf_t *out) -{ - int err; - unsigned long len = sizeof(*out); - omac_state omac = ctx->omac; - if ((err = omac_process(&omac, in, inlen)) != CRYPT_OK) { - return err; - } - err = omac_done(&omac, out->u.byte, &len); - zeromem(&omac, sizeof(omac)); - return err; -} - -static LTC_INLINE int s_siv_S2V_zero(siv_omac_ctx_t *ctx, siv_buf_t *D) -{ - /* D = AES-CMAC(K, ) */ - const siv_buf_t zero = {0}; - return s_siv_omac_memory(ctx, zero.u.byte, sizeof(zero), D); -} - -static LTC_INLINE int s_siv_S2V_dbl_xor_cmac(siv_omac_ctx_t *ctx, - const unsigned char *aad, unsigned long aadlen, - siv_buf_t *D) -{ - /* for i = 1 to n-1 do - * D = dbl(D) xor AES-CMAC(K, Si) - * done - */ - int err; - siv_buf_t TMP; - if ((err = s_siv_omac_memory(ctx, aad, aadlen, &TMP)) != CRYPT_OK) { - return err; - } - s_siv_dbl(D); - s_siv_xor_buf(&TMP, D); - return err; -} - -static LTC_INLINE int s_siv_omac_memory_multi(siv_omac_ctx_t *ctx, - siv_buf_t *out, - const unsigned char *in, unsigned long inlen, - ...) -{ - int err; - va_list args; - unsigned long len = sizeof(*out); - omac_state omac = ctx->omac; - va_start(args, inlen); - - if ((err = omac_vprocess(&omac, in, inlen, args)) != CRYPT_OK) { - return err; - } - err = omac_done(&omac, out->u.byte, &len); - zeromem(&omac, sizeof(omac)); - return err; -} - -static LTC_INLINE int s_siv_S2V_T(siv_omac_ctx_t *ctx, - const unsigned char *in, unsigned long inlen, - siv_buf_t *D, siv_buf_t *V) -{ - siv_buf_t T; - int err; - - /* if len(Sn) >= 128 then - * T = Sn xorend D - * else - * T = dbl(D) xor pad(Sn) - * fi - */ - if (inlen >= 16) { - XMEMCPY(&T, &in[inlen - 16], 16); - s_siv_xor_buf(D, &T); - err = s_siv_omac_memory_multi(ctx, V, in, inlen - 16, &T, sizeof(T), LTC_NULL); - } else { - s_siv_dbl(D); - XMEMSET(&T, 0, sizeof(T)); - if (inlen != 0) XMEMCPY(&T, in, inlen); - T.u.byte[inlen] = 0x80; - s_siv_xor_buf(D, &T); - - err = s_siv_omac_memory(ctx, T.u.byte, sizeof(T), V); - } - return err; -} - -static int s_siv_S2V(int cipher, - const unsigned char *key, unsigned long keylen, - unsigned long adnum, - const unsigned char **ad, unsigned long *adlen, - const unsigned char *in, unsigned long inlen, - siv_buf_t *V) -{ - int err; - siv_buf_t D; - unsigned long n = 0; - siv_omac_ctx_t ctx; - - if ((err = s_siv_ctx_init(cipher, key, keylen, &ctx)) != CRYPT_OK) { - return err; - } - /* RFC 5297 sec 2.6: S2V(K1, AD1..ADm, P). With zero ADs this is n=1 - * (P only), not n=0 - the plaintext must still be folded into V. */ - if ((err = s_siv_S2V_zero(&ctx, &D)) != CRYPT_OK) { - return err; - } - - /* With zero AD components the loop runs zero times. */ - while (n < adnum) { - if (n >= s_siv_max_aad_components) { - return CRYPT_INPUT_TOO_LONG; - } - if ((err = s_siv_S2V_dbl_xor_cmac(&ctx, ad ? ad[n] : NULL, adlen ? adlen[n] : 0, &D)) != CRYPT_OK) { - return err; - } - n++; - } - - return s_siv_S2V_T(&ctx, in, inlen, &D, V); -} - -static LTC_INLINE void s_siv_bitand(const void* V, siv_buf_t* Q) -{ - XMEMCPY(Q, V, sizeof(*Q)); - Q->u.byte[8] &= 0x7F; - Q->u.byte[12] &= 0x7F; -} - -static LTC_INLINE int s_ctr_crypt_memory(int cipher, - const unsigned char *IV, - const unsigned char *key, int keylen, - const unsigned char *in, - unsigned char *out, unsigned long len) -{ - int err; - symmetric_CTR ctr; - - if ((err = ctr_start(cipher, IV, key, keylen, 0, CTR_COUNTER_BIG_ENDIAN | 16, &ctr)) != CRYPT_OK) { - goto out; - } - if ((err = ctr_encrypt(in, out, len, &ctr)) != CRYPT_OK) { - goto out; - } - if ((err = ctr_done(&ctr)) != CRYPT_OK) { - goto out; - } - -out: -#ifdef LTC_CLEAN_STACK - zeromem(&ctr, sizeof(ctr)); -#endif - return err; -} - -typedef struct { - siv_buf_t Q, V; -} siv_state; - -/** - SIV encrypt - - @param cipher The index of the cipher desired - @param key The secret key to use - @param keylen The length of the secret key (octets) - @param ad An array of Associated Data pointers (must be NULL terminated) - @param adlen An array with the lengths of the Associated Data - @param pt The plaintext - @param ptlen The length of the plaintext - @param ct The ciphertext - @param ctlen [in/out] The length of the ciphertext - @return CRYPT_OK if successful -*/ -int siv_encrypt_memory( int cipher, - const unsigned char *key, unsigned long keylen, - unsigned long adnum, - const unsigned char *ad[], unsigned long adlen[], - const unsigned char *pt, unsigned long ptlen, - unsigned char *ct, unsigned long *ctlen) -{ - int err; - const unsigned char *K1, *K2; - void *work = NULL; - siv_state siv; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ad != NULL || adnum == 0); - LTC_ARGCHK(adlen != NULL || adnum == 0); - LTC_ARGCHK(pt != NULL || ptlen == 0); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(ctlen != NULL); - - if (ptlen + 16 < ptlen) { - return CRYPT_OVERFLOW; - } - if (*ctlen < ptlen + 16) { - *ctlen = ptlen + 16; - return CRYPT_BUFFER_OVERFLOW; - } - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - - work = XMALLOC(ptlen + 16); - if (work == NULL) { - return CRYPT_MEM; - } - - K1 = key; - K2 = &key[keylen/2]; - - if ((err = s_siv_S2V(cipher, K1, keylen/2, adnum, ad, adlen, pt, ptlen, &siv.V)) != CRYPT_OK) { - goto out; - } - - s_siv_bitand(&siv.V, &siv.Q); - - if ((err = s_ctr_crypt_memory(cipher, siv.Q.u.byte, K2, keylen/2, pt, work, ptlen)) != CRYPT_OK) { - goto out; - } - XMEMCPY(ct, &siv.V, 16); - XMEMCPY(ct + 16, work, ptlen); - *ctlen = ptlen + 16; - -out: -#ifdef LTC_CLEAN_STACK - zeromem(&siv, sizeof(siv)); -#endif - zeromem(work, ptlen + 16); - XFREE(work); - - return err; -} - -/** - SIV decrypt - - @param cipher The index of the cipher desired - @param key The secret key to use - @param keylen The length of the secret key (octets) - @param ad An array of Associated Data pointers (must be NULL terminated) - @param adlen An array with the lengths of the Associated Data - @param ct The ciphertext - @param ctlen The length of the ciphertext - @param pt The plaintext - @param ptlen [in/out] The length of the plaintext - @return CRYPT_OK if successful -*/ -int siv_decrypt_memory( int cipher, - const unsigned char *key, unsigned long keylen, - unsigned long adnum, - const unsigned char *ad[], unsigned long adlen[], - const unsigned char *ct, unsigned long ctlen, - unsigned char *pt, unsigned long *ptlen) -{ - int err; - unsigned char *pt_work; - const unsigned char *K1, *K2, *ct_work; - siv_state siv; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ad != NULL || adnum == 0); - LTC_ARGCHK(adlen != NULL || adnum == 0); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ptlen != NULL); - - if (ctlen < 16) { - return CRYPT_INVALID_ARG; - } - if (*ptlen < (ctlen - 16)) { - *ptlen = ctlen - 16; - return CRYPT_BUFFER_OVERFLOW; - } - - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - *ptlen = ctlen - 16; - pt_work = XMALLOC(*ptlen); - if (pt_work == NULL) { - return CRYPT_MEM; - } - - K1 = key; - K2 = &key[keylen/2]; - - ct_work = ct; - s_siv_bitand(ct_work, &siv.Q); - ct_work += 16; - - if ((err = s_ctr_crypt_memory(cipher, siv.Q.u.byte, K2, keylen/2, ct_work, pt_work, *ptlen)) != CRYPT_OK) { - goto out; - } - if ((err = s_siv_S2V(cipher, K1, keylen/2, adnum, ad, adlen, pt_work, *ptlen, &siv.V)) != CRYPT_OK) { - goto out; - } - - err = XMEM_NEQ(&siv.V, ct, sizeof(siv.V)); - copy_or_zeromem(pt_work, pt, *ptlen, err); -out: -#ifdef LTC_CLEAN_STACK - zeromem(&siv, sizeof(siv)); -#endif - zeromem(pt_work, *ptlen); - XFREE(pt_work); - - return err; -} - -/** - Process an entire SIV packet in one call. - - @param cipher The index of the cipher desired - @param direction Encrypt or Decrypt mode (LTC_ENCRYPT or LTC_DECRYPT) - @param key The secret key to use - @param keylen The length of the secret key (octets) - @param in The input - @param inlen The length of the input - @param out The output - @param outlen [in/out] The max size and resulting size of the output - @remark <...> is of the form (void*, unsigned long) and contains the Associated Data - @return CRYPT_OK on success - */ -int siv_memory( int cipher, int direction, - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - unsigned long adnum, - ...) -{ - int err; - va_list args; - siv_omac_ctx_t ctx; - siv_state siv; - siv_buf_t D; - unsigned char *buf = NULL; - const unsigned char *aad, *K1, *K2, *in_work; - unsigned long n = 0, aadlen, in_work_len, buf_len; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(in != NULL || inlen == 0); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - if (direction == LTC_ENCRYPT && *outlen < inlen + 16) { - *outlen = inlen + 16; - return CRYPT_BUFFER_OVERFLOW; - } else if (direction == LTC_DECRYPT && (inlen < 16 || *outlen < inlen - 16)) { - *outlen = inlen - 16; - return CRYPT_BUFFER_OVERFLOW; - } - - K1 = key; - K2 = &key[keylen/2]; - in_work = in; - in_work_len = inlen; - - if (direction == LTC_DECRYPT) { - in_work_len -= 16; - buf_len = in_work_len; - } else { - buf_len = inlen; - } - buf = XMALLOC(buf_len); - if (buf == NULL) - return CRYPT_MEM; - - if (direction == LTC_DECRYPT) { - s_siv_bitand(in_work, &siv.Q); - in_work += 16; - - if ((err = s_ctr_crypt_memory(cipher, siv.Q.u.byte, K2, keylen/2, in_work, buf, in_work_len)) != CRYPT_OK) { - goto err_out; - } - in_work = buf; - } - - if ((err = s_siv_ctx_init(cipher, K1, keylen/2, &ctx)) != CRYPT_OK) { - goto err_out; - } - if ((err = s_siv_S2V_zero(&ctx, &D)) != CRYPT_OK) { - goto err_out; - } - va_start(args, adnum); - /* With zero AD components the loop runs zero times. */ - while (n < adnum) { - if (n >= s_siv_max_aad_components) { - err = CRYPT_INPUT_TOO_LONG; - goto err_out2; - } - aad = va_arg(args, const unsigned char*); - aadlen = va_arg(args, unsigned long); - if ((err = s_siv_S2V_dbl_xor_cmac(&ctx, aad, aadlen, &D)) != CRYPT_OK) { - goto err_out2; - } - n++; - } - - if ((err = s_siv_S2V_T(&ctx, in_work, in_work_len, &D, &siv.V)) != CRYPT_OK) { - goto err_out2; - } - - if (direction == LTC_DECRYPT) { - err = XMEM_NEQ(&siv.V, in, sizeof(siv.V)); - copy_or_zeromem(in_work, out, in_work_len, err); - *outlen = in_work_len; - } else { - s_siv_bitand(&siv.V, &siv.Q); - - if ((err = s_ctr_crypt_memory(cipher, siv.Q.u.byte, K2, keylen/2, in_work, buf, inlen)) != CRYPT_OK) { - goto err_out2; - } - XMEMCPY(out, &siv.V, 16); - XMEMCPY(out + 16, buf, inlen); - *outlen = inlen + 16; - } -err_out2: - va_end(args); -err_out: -#ifdef LTC_CLEAN_STACK - zeromem(&ctx, sizeof(ctx)); - zeromem(&siv, sizeof(siv)); - zeromem(&D, sizeof(D)); -#endif - zeromem(buf, in_work_len); - XFREE(buf); - return err; -} - -int siv_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - /* - * RFC5297 - A.1. Deterministic Authenticated Encryption Example - */ - const unsigned char Key_A1[] = - { 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, - 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }; - const unsigned char AD_A1[] = - { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27 }; - const unsigned char Plaintext_A1[] = - { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, - 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee }; - const unsigned char output_A1[] = - { 0x85, 0x63, 0x2d, 0x07, 0xc6, 0xe8, 0xf3, 0x7f, - 0x95, 0x0a, 0xcd, 0x32, 0x0a, 0x2e, 0xcc, 0x93, - 0x40, 0xc0, 0x2b, 0x96, 0x90, 0xc4, 0xdc, 0x04, - 0xda, 0xef, 0x7f, 0x6a, 0xfe, 0x5c }; - const unsigned char *ad_A1[] = - { AD_A1, NULL }; - unsigned long adlen_A1[] = - { sizeof(AD_A1), 0 }; - - const unsigned char Key_A2[] = - { 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x78, - 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x70, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f }; - const unsigned char AD1_A2[] = - { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, - 0xde, 0xad, 0xda, 0xda, 0xde, 0xad, 0xda, 0xda, - 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88, - 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00 }; - const unsigned char AD2_A2[] = - { 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, - 0x90, 0xa0 }; - const unsigned char AD3_A2[] = - { 0x09, 0xf9, 0x11, 0x02, 0x9d, 0x74, 0xe3, 0x5b, - 0xd8, 0x41, 0x56, 0xc5, 0x63, 0x56, 0x88, 0xc0 }; - const unsigned char Plaintext_A2[] = - { 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, - 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x70, 0x6c, 0x61, - 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x74, - 0x6f, 0x20, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, - 0x53, 0x49, 0x56, 0x2d, 0x41, 0x45, 0x53 }; - const unsigned char output_A2[] = - { 0x7b, 0xdb, 0x6e, 0x3b, 0x43, 0x26, 0x67, 0xeb, - 0x06, 0xf4, 0xd1, 0x4b, 0xff, 0x2f, 0xbd, 0x0f, - 0xcb, 0x90, 0x0f, 0x2f, 0xdd, 0xbe, 0x40, 0x43, - 0x26, 0x60, 0x19, 0x65, 0xc8, 0x89, 0xbf, 0x17, - 0xdb, 0xa7, 0x7c, 0xeb, 0x09, 0x4f, 0xa6, 0x63, - 0xb7, 0xa3, 0xf7, 0x48, 0xba, 0x8a, 0xf8, 0x29, - 0xea, 0x64, 0xad, 0x54, 0x4a, 0x27, 0x2e, 0x9c, - 0x48, 0x5b, 0x62, 0xa3, 0xfd, 0x5c, 0x0d }; - const unsigned char *ad_A2[] = - { AD1_A2, AD2_A2, AD3_A2, NULL }; - unsigned long adlen_A2[] = - { sizeof(AD1_A2), sizeof(AD2_A2), sizeof(AD3_A2), 0 }; - const unsigned char *ad_ossl0[] = - { AD1_A2, NULL, AD3_A2, NULL }; - unsigned long adlen_ossl0[] = - { sizeof(AD1_A2), 0, sizeof(AD3_A2), 0 }; - const unsigned char output_ossl0[] = - { 0x83, 0xce, 0x65, 0x93, 0xa8, 0xfa, 0x67, 0xeb, - 0x6f, 0xcd, 0x28, 0x19, 0xce, 0xdf, 0xc0, 0x11, - 0x30, 0xd9, 0x37, 0xb4, 0x2f, 0x71, 0xf7, 0x1f, - 0x93, 0xfc, 0x2d, 0x8d, 0x70, 0x2d, 0x3e, 0xac, - 0x8d, 0xc7, 0x65, 0x1e, 0xef, 0xcd, 0x81, 0x12, - 0x00, 0x81, 0xff, 0x29, 0xd6, 0x26, 0xf9, 0x7f, - 0x3d, 0xe1, 0x7f, 0x29, 0x69, 0xb6, 0x91, 0xc9, - 0x1b, 0x69, 0xb6, 0x52, 0xbf, 0x3a, 0x6d }; - const unsigned char *ad_ossl1[] = - { NULL, AD1_A2, AD3_A2, NULL }; - unsigned long adlen_ossl1[] = - { 0, sizeof(AD1_A2), sizeof(AD3_A2), 0 }; - const unsigned char output_ossl1[] = - { 0x77, 0xdd, 0x4a, 0x44, 0xf5, 0xa6, 0xb4, 0x13, - 0x02, 0x12, 0x1e, 0xe7, 0xf3, 0x78, 0xde, 0x25, - 0x0f, 0xcd, 0x66, 0x4c, 0x92, 0x24, 0x64, 0xc8, - 0x89, 0x39, 0xd7, 0x1f, 0xad, 0x7a, 0xef, 0xb8, - 0x64, 0xe5, 0x01, 0xb0, 0x84, 0x8a, 0x07, 0xd3, - 0x92, 0x01, 0xc1, 0x06, 0x7a, 0x72, 0x88, 0xf3, - 0xda, 0xdf, 0x01, 0x31, 0xa8, 0x23, 0xa0, 0xbc, - 0x3d, 0x58, 0x8e, 0x85, 0x64, 0xa5, 0xfe }; - - - /* Zero AD components vs. a single *empty* AD component (vectors were cross-checked against OpenSSL 3.5.6) */ - const unsigned char output_A1_zeroad[] = - { 0xf1, 0xc5, 0xfd, 0xea, 0xc1, 0xf1, 0x5a, 0x26, - 0x77, 0x9c, 0x15, 0x01, 0xf9, 0xfb, 0x75, 0x88, - 0x27, 0xe9, 0x46, 0xc6, 0x69, 0x08, 0x8a, 0xb0, - 0x6d, 0xa5, 0x8c, 0x5c, 0x83, 0x1c }; - const unsigned char output_A1_emptyad[] = - { 0xd1, 0x02, 0x2f, 0x5b, 0x36, 0x64, 0xe5, 0xa4, - 0xdf, 0xaf, 0x90, 0xf8, 0x5b, 0xe6, 0xf2, 0x8a, - 0xb6, 0x6c, 0xff, 0x6b, 0x8e, 0xca, 0x0b, 0x79, - 0xf0, 0x83, 0xb3, 0x9a, 0x09, 0x01 }; - const unsigned char *ad_emptyad[] = { NULL, NULL }; - unsigned long adlen_emptyad[] = { 0, 0 }; - -#define PL_PAIR(n) n, sizeof(n) - struct { - const unsigned char* Key; - unsigned long Keylen; - const unsigned char* Plaintext; - unsigned long Plaintextlen; - unsigned long ADnum; - const void* ADs; - void* ADlens; - const unsigned char* output; - unsigned long outputlen; - const char* name; - } siv_tests[] = { - { PL_PAIR(Key_A1), PL_PAIR(Plaintext_A1), 1, &ad_A1, &adlen_A1, PL_PAIR(output_A1), "RFC5297 - A.1. Deterministic Authenticated Encryption Example" }, - { PL_PAIR(Key_A2), PL_PAIR(Plaintext_A2), 3, &ad_A2, &adlen_A2, PL_PAIR(output_A2), "RFC5297 - A.2. Nonce-Based Authenticated Encryption Example" }, - { PL_PAIR(Key_A2), PL_PAIR(Plaintext_A2), 3, &ad_ossl0, &adlen_ossl0, PL_PAIR(output_ossl0), "OpenSSL based example 0" }, - { PL_PAIR(Key_A2), PL_PAIR(Plaintext_A2), 3, &ad_ossl1, &adlen_ossl1, PL_PAIR(output_ossl1), "OpenSSL based example 1" }, - { PL_PAIR(Key_A1), PL_PAIR(Plaintext_A1), 0, NULL, NULL, PL_PAIR(output_A1_zeroad), "Zero AD components (ad = adlen = NULL)" }, - { PL_PAIR(Key_A1), PL_PAIR(Plaintext_A1), 1, &ad_emptyad, &adlen_emptyad, PL_PAIR(output_A1_emptyad), "One empty AD component" }, - }; -#undef PL_PAIR - - int err, cipher; - unsigned n; - unsigned long buflen, tmplen; - unsigned char buf[MAX(sizeof(output_A1), sizeof(output_A2))]; - const unsigned long niter = 1000; - unsigned char *tmp[3] = {0}; - const unsigned long tmpmax = 16 + niter * 16; - - cipher = find_cipher("aes"); - - for (n = 0; n < LTC_ARRAY_SIZE(siv_tests); ++n) { - buflen = sizeof(buf); - if ((err = siv_encrypt_memory(cipher, - siv_tests[n].Key, siv_tests[n].Keylen, - siv_tests[n].ADnum, - (const unsigned char **)siv_tests[n].ADs, siv_tests[n].ADlens, - siv_tests[n].Plaintext, siv_tests[n].Plaintextlen, - buf, &buflen)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf, buflen, siv_tests[n].output, siv_tests[n].outputlen, siv_tests[n].name, n) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - buflen = sizeof(buf); - if ((err = siv_decrypt_memory(cipher, - siv_tests[n].Key, siv_tests[n].Keylen, - siv_tests[n].ADnum, - (const unsigned char **)siv_tests[n].ADs, siv_tests[n].ADlens, - siv_tests[n].output, siv_tests[n].outputlen, - buf, &buflen)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf, buflen, siv_tests[n].Plaintext, siv_tests[n].Plaintextlen, siv_tests[n].name, n + 0x1000) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - } - - /* Testcase 0x2 */ - buflen = sizeof(buf); - if ((err = siv_memory(cipher, LTC_ENCRYPT, - siv_tests[0].Key, siv_tests[0].Keylen, - siv_tests[0].Plaintext, siv_tests[0].Plaintextlen, - buf, &buflen, - 1, - AD_A1, sizeof(AD_A1), - NULL)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf, buflen, siv_tests[0].output, siv_tests[0].outputlen, siv_tests[0].name, n) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - /* Testcase 0x1002 */ - buflen = sizeof(buf); - if ((err = siv_memory(cipher, LTC_DECRYPT, - siv_tests[0].Key, siv_tests[0].Keylen, - siv_tests[0].output, siv_tests[0].outputlen, - buf, &buflen, - 1, - AD_A1, sizeof(AD_A1), - NULL)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf, buflen, siv_tests[0].Plaintext, siv_tests[0].Plaintextlen, siv_tests[0].name, n + 0x1000) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - n++; - - /* Testcase 0x3 */ - buflen = sizeof(buf); - if ((err = siv_memory(cipher, LTC_ENCRYPT, - siv_tests[1].Key, siv_tests[1].Keylen, - siv_tests[1].Plaintext, siv_tests[1].Plaintextlen, - buf, &buflen, - 3, - ad_A2[0], adlen_A2[0], - ad_A2[1], adlen_A2[1], - ad_A2[2], adlen_A2[2], - NULL)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf, buflen, siv_tests[1].output, siv_tests[1].outputlen, siv_tests[1].name, n) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - /* Testcase 0x1003 */ - buflen = sizeof(buf); - if ((err = siv_memory(cipher, LTC_DECRYPT, - siv_tests[1].Key, siv_tests[1].Keylen, - siv_tests[1].output, siv_tests[1].outputlen, - buf, &buflen, - 3, - ad_A2[0], adlen_A2[0], - ad_A2[1], adlen_A2[1], - ad_A2[2], adlen_A2[2], - NULL)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf, buflen, siv_tests[1].Plaintext, siv_tests[1].Plaintextlen, siv_tests[1].name, n + 0x1000) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - n++; - - /* Testcase 0x4 - siv_memory() - zero AD components - encrypt */ - buflen = sizeof(buf); - if ((err = siv_memory(cipher, LTC_ENCRYPT, Key_A1, sizeof(Key_A1), Plaintext_A1, sizeof(Plaintext_A1), buf, &buflen, 0, NULL)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf, buflen, output_A1_zeroad, sizeof(output_A1_zeroad), "siv_memory() - zero AD components", n) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - /* Testcase 0x1004 - siv_memory() - zero AD components - decrypt */ - buflen = sizeof(buf); - if ((err = siv_memory(cipher, LTC_DECRYPT, Key_A1, sizeof(Key_A1), output_A1_zeroad, sizeof(output_A1_zeroad), buf, &buflen, 0, NULL)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf, buflen, Plaintext_A1, sizeof(Plaintext_A1), "siv_memory() - zero AD components", n + 0x1000) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - n++; - - /* Testcase 0x5 - siv_memory() - one empty AD component - encrypt */ - buflen = sizeof(buf); - if ((err = siv_memory(cipher, LTC_ENCRYPT, Key_A1, sizeof(Key_A1), Plaintext_A1, sizeof(Plaintext_A1), buf, &buflen, 1, NULL, 0UL, NULL)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf, buflen, output_A1_emptyad, sizeof(output_A1_emptyad), "siv_memory() - one empty AD component", n) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - /* Testcase 0x1005 - siv_memory() - one empty AD component - decrypt */ - buflen = sizeof(buf); - if ((err = siv_memory(cipher, LTC_DECRYPT, Key_A1, sizeof(Key_A1), output_A1_emptyad, sizeof(output_A1_emptyad), buf, &buflen, 1, NULL, 0UL, NULL)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(buf, buflen, Plaintext_A1, sizeof(Plaintext_A1), "siv_memory() - one empty AD component", n + 0x1000) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - for (n = 0; n < LTC_ARRAY_SIZE(tmp); ++n) { - tmp[n] = XCALLOC(1, tmpmax); - if (tmp[n] == NULL) { - err = CRYPT_MEM; - goto out; - } - - } - tmplen = 16; - for (n = 0; n < niter; ++n) { - buflen = tmpmax; - if ((err = siv_encrypt_memory(cipher, - siv_tests[0].Key, siv_tests[0].Keylen, - 0, - NULL, NULL, - tmp[0], tmplen, - tmp[0], &buflen)) != CRYPT_OK) { - goto out; - } - tmplen = buflen; - } - if (ltc_compare_testvector(&buflen, sizeof(buflen), &tmpmax, sizeof(tmpmax), "Multiple encrypt length", -(int)niter)) { - err = CRYPT_FAIL_TESTVECTOR; - goto out; - } - XMEMCPY(tmp[1], tmp[0], buflen); - for (n = 0; n < niter; ++n) { - buflen = tmpmax; - if ((err = siv_decrypt_memory(cipher, - siv_tests[0].Key, siv_tests[0].Keylen, - 0, - NULL, NULL, - tmp[1], tmplen, - tmp[1], &buflen)) != CRYPT_OK) { - goto out; - } - tmplen = buflen; - } - if (ltc_compare_testvector(tmp[1], tmplen, tmp[2], tmplen, "Multi decrypt", niter + 0x2000)) { - err = CRYPT_FAIL_TESTVECTOR; - } - tmplen = 16; - XMEMSET(tmp[0], 0, tmplen); - for (n = 0; n < niter; ++n) { - buflen = tmpmax; - if ((err = siv_memory(cipher, LTC_ENCRYPT, - siv_tests[0].Key, siv_tests[0].Keylen, - tmp[0], tmplen, - tmp[0], &buflen, - 0, - NULL)) != CRYPT_OK) { - goto out; - } - tmplen = buflen; - } - if (ltc_compare_testvector(&buflen, sizeof(buflen), &tmpmax, sizeof(tmpmax), "Multiple encrypt length", -(int)(niter + 0x4000))) { - err = CRYPT_FAIL_TESTVECTOR; - goto out; - } - XMEMCPY(tmp[1], tmp[0], buflen); - for (n = 0; n < niter; ++n) { - buflen = tmpmax; - if ((err = siv_memory(cipher, LTC_DECRYPT, - siv_tests[0].Key, siv_tests[0].Keylen, - tmp[1], tmplen, - tmp[1], &buflen, - 0, - NULL)) != CRYPT_OK) { - goto out; - } - tmplen = buflen; - } - if (ltc_compare_testvector(tmp[1], tmplen, tmp[2], tmplen, "Multi decrypt", niter + 0x4000)) { - err = CRYPT_FAIL_TESTVECTOR; - } - -out: - for (n = LTC_ARRAY_SIZE(tmp); n --> 0;) { - XFREE(tmp[n]); - } - - return err; -#endif -} - -#endif diff --git a/src/hashes/blake2b.c b/src/hashes/blake2b.c deleted file mode 100644 index cafdb7a0..00000000 --- a/src/hashes/blake2b.c +++ /dev/null @@ -1,628 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* - BLAKE2 reference source code package - reference C implementations - - Copyright 2012, Samuel Neves . You may use this under the - terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at - your option. The terms of these licenses can be found at: - - - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - - OpenSSL license : https://www.openssl.org/source/license.html - - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - - More information about the BLAKE2 hash function can be found at - https://blake2.net. -*/ -/* see also https://www.ietf.org/rfc/rfc7693.txt */ - -#include "tomcrypt_private.h" - -#ifdef LTC_BLAKE2B - -enum blake2b_constant { - BLAKE2B_BLOCKBYTES = 128, - BLAKE2B_OUTBYTES = 64, - BLAKE2B_KEYBYTES = 64, - BLAKE2B_SALTBYTES = 16, - BLAKE2B_PERSONALBYTES = 16, - BLAKE2B_PARAM_SIZE = 64 -}; - -/* param offsets */ -enum { - BLAKE2B_O_DIGEST_LENGTH = 0, - BLAKE2B_O_KEY_LENGTH = 1, - BLAKE2B_O_FANOUT = 2, - BLAKE2B_O_DEPTH = 3, - BLAKE2B_O_LEAF_LENGTH = 4, - BLAKE2B_O_NODE_OFFSET = 8, - BLAKE2B_O_XOF_LENGTH = 12, - BLAKE2B_O_NODE_DEPTH = 16, - BLAKE2B_O_INNER_LENGTH = 17, - BLAKE2B_O_RESERVED = 18, - BLAKE2B_O_SALT = 32, - BLAKE2B_O_PERSONAL = 48 -}; - -/* -struct blake2b_param { - unsigned char digest_length; - unsigned char key_length; - unsigned char fanout; - unsigned char depth; - ulong32 leaf_length; - ulong32 node_offset; - ulong32 xof_length; - unsigned char node_depth; - unsigned char inner_length; - unsigned char reserved[14]; - unsigned char salt[BLAKE2B_SALTBYTES]; - unsigned char personal[BLAKE2B_PERSONALBYTES]; -}; -*/ - -const struct ltc_hash_descriptor blake2b_160_desc = -{ - "blake2b-160", - 25, - 20, - 128, - { 1, 3, 6, 1, 4, 1, 1722, 12, 2, 1, 5 }, - 11, - &blake2b_160_init, - &blake2b_process, - &blake2b_done, - &blake2b_160_test, - NULL -}; - -const struct ltc_hash_descriptor blake2b_256_desc = -{ - "blake2b-256", - 26, - 32, - 128, - { 1, 3, 6, 1, 4, 1, 1722, 12, 2, 1, 8 }, - 11, - &blake2b_256_init, - &blake2b_process, - &blake2b_done, - &blake2b_256_test, - NULL -}; - -const struct ltc_hash_descriptor blake2b_384_desc = -{ - "blake2b-384", - 27, - 48, - 128, - { 1, 3, 6, 1, 4, 1, 1722, 12, 2, 1, 12 }, - 11, - &blake2b_384_init, - &blake2b_process, - &blake2b_done, - &blake2b_384_test, - NULL -}; - -const struct ltc_hash_descriptor blake2b_512_desc = -{ - "blake2b-512", - 28, - 64, - 128, - { 1, 3, 6, 1, 4, 1, 1722, 12, 2, 1, 16 }, - 11, - &blake2b_512_init, - &blake2b_process, - &blake2b_done, - &blake2b_512_test, - NULL -}; - -static const ulong64 blake2b_IV[8] = -{ - CONST64(0x6a09e667f3bcc908), CONST64(0xbb67ae8584caa73b), - CONST64(0x3c6ef372fe94f82b), CONST64(0xa54ff53a5f1d36f1), - CONST64(0x510e527fade682d1), CONST64(0x9b05688c2b3e6c1f), - CONST64(0x1f83d9abfb41bd6b), CONST64(0x5be0cd19137e2179) -}; - -static const unsigned char blake2b_sigma[12][16] = -{ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , - { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } , - { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 } , - { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 } , - { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 } , - { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 } , - { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 } , - { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 } , - { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 } , - { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 } , - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , - { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } -}; - -static void s_blake2b_set_lastnode(hash_state *md) { md->blake2b.f[1] = CONST64(0xffffffffffffffff); } - -/* Some helper functions, not necessarily useful */ -static int s_blake2b_is_lastblock(const hash_state *md) { return md->blake2b.f[0] != 0; } - -static void s_blake2b_set_lastblock(hash_state *md) -{ - if (md->blake2b.last_node) { - s_blake2b_set_lastnode(md); - } - md->blake2b.f[0] = CONST64(0xffffffffffffffff); -} - -static void s_blake2b_increment_counter(hash_state *md, ulong64 inc) -{ - md->blake2b.t[0] += inc; - if (md->blake2b.t[0] < inc) md->blake2b.t[1]++; -} - -static void s_blake2b_init0(hash_state *md) -{ - unsigned long i; - XMEMSET(&md->blake2b, 0, sizeof(md->blake2b)); - - for (i = 0; i < 8; ++i) { - md->blake2b.h[i] = blake2b_IV[i]; - } -} - -/* init xors IV with input parameter block */ -static int s_blake2b_init_param(hash_state *md, const unsigned char *P) -{ - unsigned long i; - - s_blake2b_init0(md); - - /* IV XOR ParamBlock */ - for (i = 0; i < 8; ++i) { - ulong64 tmp; - LOAD64L(tmp, P + i * 8); - md->blake2b.h[i] ^= tmp; - } - - md->blake2b.outlen = P[BLAKE2B_O_DIGEST_LENGTH]; - return CRYPT_OK; -} - -/** - Initialize the hash/MAC state - - Use this function to init for arbitrary sizes. - - Give a key and keylen to init for MAC mode. - - @param md The hash state you wish to initialize - @param outlen The desired output-length - @param key The key of the MAC - @param keylen The length of the key - @return CRYPT_OK if successful -*/ -int blake2b_init(hash_state *md, unsigned long outlen, const unsigned char *key, unsigned long keylen) -{ - unsigned char P[BLAKE2B_PARAM_SIZE]; - int err; - - LTC_ARGCHK(md != NULL); - - if ((!outlen) || (outlen > BLAKE2B_OUTBYTES)) { - return CRYPT_INVALID_ARG; - } - if ((key && !keylen) || (keylen && !key) || (keylen > BLAKE2B_KEYBYTES)) { - return CRYPT_INVALID_ARG; - } - - XMEMSET(P, 0, sizeof(P)); - - P[BLAKE2B_O_DIGEST_LENGTH] = (unsigned char)outlen; - P[BLAKE2B_O_KEY_LENGTH] = (unsigned char)keylen; - P[BLAKE2B_O_FANOUT] = 1; - P[BLAKE2B_O_DEPTH] = 1; - - err = s_blake2b_init_param(md, P); - if (err != CRYPT_OK) return err; - - if (key) { - unsigned char block[BLAKE2B_BLOCKBYTES]; - - XMEMSET(block, 0, BLAKE2B_BLOCKBYTES); - XMEMCPY(block, key, keylen); - blake2b_process(md, block, BLAKE2B_BLOCKBYTES); - -#ifdef LTC_CLEAN_STACK - zeromem(block, sizeof(block)); -#endif - } - - return CRYPT_OK; -} - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int blake2b_160_init(hash_state *md) { return blake2b_init(md, 20, NULL, 0); } - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int blake2b_256_init(hash_state *md) { return blake2b_init(md, 32, NULL, 0); } - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int blake2b_384_init(hash_state *md) { return blake2b_init(md, 48, NULL, 0); } - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int blake2b_512_init(hash_state *md) { return blake2b_init(md, 64, NULL, 0); } - -#define G(r, i, a, b, c, d) \ - do { \ - a = a + b + m[blake2b_sigma[r][2 * i + 0]]; \ - d = ROR64(d ^ a, 32); \ - c = c + d; \ - b = ROR64(b ^ c, 24); \ - a = a + b + m[blake2b_sigma[r][2 * i + 1]]; \ - d = ROR64(d ^ a, 16); \ - c = c + d; \ - b = ROR64(b ^ c, 63); \ - } while (0) - -#define ROUND(r) \ - do { \ - G(r, 0, v[0], v[4], v[8], v[12]); \ - G(r, 1, v[1], v[5], v[9], v[13]); \ - G(r, 2, v[2], v[6], v[10], v[14]); \ - G(r, 3, v[3], v[7], v[11], v[15]); \ - G(r, 4, v[0], v[5], v[10], v[15]); \ - G(r, 5, v[1], v[6], v[11], v[12]); \ - G(r, 6, v[2], v[7], v[8], v[13]); \ - G(r, 7, v[3], v[4], v[9], v[14]); \ - } while (0) - -#ifdef LTC_CLEAN_STACK -static int ss_blake2b_compress(hash_state *md, const unsigned char *buf) -#else -static int s_blake2b_compress(hash_state *md, const unsigned char *buf) -#endif -{ - ulong64 m[16]; - ulong64 v[16]; - unsigned long i; - - for (i = 0; i < 16; ++i) { - LOAD64L(m[i], buf + i * sizeof(m[i])); - } - - for (i = 0; i < 8; ++i) { - v[i] = md->blake2b.h[i]; - } - - v[8] = blake2b_IV[0]; - v[9] = blake2b_IV[1]; - v[10] = blake2b_IV[2]; - v[11] = blake2b_IV[3]; - v[12] = blake2b_IV[4] ^ md->blake2b.t[0]; - v[13] = blake2b_IV[5] ^ md->blake2b.t[1]; - v[14] = blake2b_IV[6] ^ md->blake2b.f[0]; - v[15] = blake2b_IV[7] ^ md->blake2b.f[1]; - - ROUND(0); - ROUND(1); - ROUND(2); - ROUND(3); - ROUND(4); - ROUND(5); - ROUND(6); - ROUND(7); - ROUND(8); - ROUND(9); - ROUND(10); - ROUND(11); - - for (i = 0; i < 8; ++i) { - md->blake2b.h[i] = md->blake2b.h[i] ^ v[i] ^ v[i + 8]; - } - return CRYPT_OK; -} - -#undef G -#undef ROUND - -#ifdef LTC_CLEAN_STACK -static int s_blake2b_compress(hash_state *md, const unsigned char *buf) -{ - int err; - err = ss_blake2b_compress(md, buf); - burn_stack(sizeof(ulong64) * 32 + sizeof(unsigned long)); - return err; -} -#endif - -/** - Process a block of memory through the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -int blake2b_process(hash_state *md, const unsigned char *in, unsigned long inlen) -{ - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(in != NULL); - - if (md->blake2b.curlen > sizeof(md->blake2b.buf)) { - return CRYPT_INVALID_ARG; - } - - if (inlen > 0) { - unsigned long left = md->blake2b.curlen; - unsigned long fill = BLAKE2B_BLOCKBYTES - left; - if (inlen > fill) { - md->blake2b.curlen = 0; - XMEMCPY(md->blake2b.buf + (left % sizeof(md->blake2b.buf)), in, fill); /* Fill buffer */ - s_blake2b_increment_counter(md, BLAKE2B_BLOCKBYTES); - s_blake2b_compress(md, md->blake2b.buf); /* Compress */ - in += fill; - inlen -= fill; - while (inlen > BLAKE2B_BLOCKBYTES) { - s_blake2b_increment_counter(md, BLAKE2B_BLOCKBYTES); - s_blake2b_compress(md, in); - in += BLAKE2B_BLOCKBYTES; - inlen -= BLAKE2B_BLOCKBYTES; - } - } - XMEMCPY(md->blake2b.buf + md->blake2b.curlen, in, inlen); - md->blake2b.curlen += inlen; - } - return CRYPT_OK; -} - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (size depending on the length used on init) - @return CRYPT_OK if successful -*/ -int blake2b_done(hash_state *md, unsigned char *out) -{ - unsigned char buffer[BLAKE2B_OUTBYTES] = { 0 }; - unsigned long i; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - /* if(md->blakebs.outlen != outlen) return CRYPT_INVALID_ARG; */ - - if (s_blake2b_is_lastblock(md)) { - return CRYPT_ERROR; - } - - s_blake2b_increment_counter(md, md->blake2b.curlen); - s_blake2b_set_lastblock(md); - XMEMSET(md->blake2b.buf + md->blake2b.curlen, 0, BLAKE2B_BLOCKBYTES - md->blake2b.curlen); /* Padding */ - s_blake2b_compress(md, md->blake2b.buf); - - for (i = 0; i < 8; ++i) { /* Output full hash to temp buffer */ - STORE64L(md->blake2b.h[i], buffer + i * 8); - } - - XMEMCPY(out, buffer, md->blake2b.outlen); - zeromem(md, sizeof(hash_state)); -#ifdef LTC_CLEAN_STACK - zeromem(buffer, sizeof(buffer)); -#endif - return CRYPT_OK; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int blake2b_512_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[64]; - } tests[] = { - { "", - { 0x78, 0x6a, 0x02, 0xf7, 0x42, 0x01, 0x59, 0x03, - 0xc6, 0xc6, 0xfd, 0x85, 0x25, 0x52, 0xd2, 0x72, - 0x91, 0x2f, 0x47, 0x40, 0xe1, 0x58, 0x47, 0x61, - 0x8a, 0x86, 0xe2, 0x17, 0xf7, 0x1f, 0x54, 0x19, - 0xd2, 0x5e, 0x10, 0x31, 0xaf, 0xee, 0x58, 0x53, - 0x13, 0x89, 0x64, 0x44, 0x93, 0x4e, 0xb0, 0x4b, - 0x90, 0x3a, 0x68, 0x5b, 0x14, 0x48, 0xb7, 0x55, - 0xd5, 0x6f, 0x70, 0x1a, 0xfe, 0x9b, 0xe2, 0xce } }, - { "abc", - { 0xba, 0x80, 0xa5, 0x3f, 0x98, 0x1c, 0x4d, 0x0d, - 0x6a, 0x27, 0x97, 0xb6, 0x9f, 0x12, 0xf6, 0xe9, - 0x4c, 0x21, 0x2f, 0x14, 0x68, 0x5a, 0xc4, 0xb7, - 0x4b, 0x12, 0xbb, 0x6f, 0xdb, 0xff, 0xa2, 0xd1, - 0x7d, 0x87, 0xc5, 0x39, 0x2a, 0xab, 0x79, 0x2d, - 0xc2, 0x52, 0xd5, 0xde, 0x45, 0x33, 0xcc, 0x95, - 0x18, 0xd3, 0x8a, 0xa8, 0xdb, 0xf1, 0x92, 0x5a, - 0xb9, 0x23, 0x86, 0xed, 0xd4, 0x00, 0x99, 0x23 } }, - - { NULL, { 0 } } - }; - - int i; - unsigned char tmp[64]; - hash_state md; - - for (i = 0; tests[i].msg != NULL; i++) { - blake2b_512_init(&md); - blake2b_process(&md, (unsigned char *)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - blake2b_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "BLAKE2B_512", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int blake2b_384_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[48]; - } tests[] = { - { "", - { 0xb3, 0x28, 0x11, 0x42, 0x33, 0x77, 0xf5, 0x2d, - 0x78, 0x62, 0x28, 0x6e, 0xe1, 0xa7, 0x2e, 0xe5, - 0x40, 0x52, 0x43, 0x80, 0xfd, 0xa1, 0x72, 0x4a, - 0x6f, 0x25, 0xd7, 0x97, 0x8c, 0x6f, 0xd3, 0x24, - 0x4a, 0x6c, 0xaf, 0x04, 0x98, 0x81, 0x26, 0x73, - 0xc5, 0xe0, 0x5e, 0xf5, 0x83, 0x82, 0x51, 0x00 } }, - { "abc", - { 0x6f, 0x56, 0xa8, 0x2c, 0x8e, 0x7e, 0xf5, 0x26, - 0xdf, 0xe1, 0x82, 0xeb, 0x52, 0x12, 0xf7, 0xdb, - 0x9d, 0xf1, 0x31, 0x7e, 0x57, 0x81, 0x5d, 0xbd, - 0xa4, 0x60, 0x83, 0xfc, 0x30, 0xf5, 0x4e, 0xe6, - 0xc6, 0x6b, 0xa8, 0x3b, 0xe6, 0x4b, 0x30, 0x2d, - 0x7c, 0xba, 0x6c, 0xe1, 0x5b, 0xb5, 0x56, 0xf4 } }, - - { NULL, { 0 } } - }; - - int i; - unsigned char tmp[48]; - hash_state md; - - for (i = 0; tests[i].msg != NULL; i++) { - blake2b_384_init(&md); - blake2b_process(&md, (unsigned char *)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - blake2b_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "BLAKE2B_384", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int blake2b_256_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[32]; - } tests[] = { - { "", - { 0x0e, 0x57, 0x51, 0xc0, 0x26, 0xe5, 0x43, 0xb2, - 0xe8, 0xab, 0x2e, 0xb0, 0x60, 0x99, 0xda, 0xa1, - 0xd1, 0xe5, 0xdf, 0x47, 0x77, 0x8f, 0x77, 0x87, - 0xfa, 0xab, 0x45, 0xcd, 0xf1, 0x2f, 0xe3, 0xa8 } }, - { "abc", - { 0xbd, 0xdd, 0x81, 0x3c, 0x63, 0x42, 0x39, 0x72, - 0x31, 0x71, 0xef, 0x3f, 0xee, 0x98, 0x57, 0x9b, - 0x94, 0x96, 0x4e, 0x3b, 0xb1, 0xcb, 0x3e, 0x42, - 0x72, 0x62, 0xc8, 0xc0, 0x68, 0xd5, 0x23, 0x19 } }, - { "12345678901234567890123456789012345678901234567890" - "12345678901234567890123456789012345678901234567890" - "12345678901234567890123456789012345678901234567890" - "12345678901234567890123456789012345678901234567890" - "12345678901234567890123456789012345678901234567890" - "12345678901234567890123456789012345678901234567890", - { 0x0f, 0x6e, 0x01, 0x8d, 0x38, 0xd6, 0x3f, 0x08, - 0x4d, 0x58, 0xe3, 0x0c, 0x90, 0xfb, 0xa2, 0x41, - 0x5f, 0xca, 0x17, 0xfa, 0x66, 0x26, 0x49, 0xf3, - 0x8a, 0x30, 0x41, 0x7c, 0x57, 0xcd, 0xa8, 0x14 } }, - - { NULL, { 0 } } - }; - - int i; - unsigned char tmp[32]; - hash_state md; - - for (i = 0; tests[i].msg != NULL; i++) { - blake2b_256_init(&md); - blake2b_process(&md, (unsigned char *)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - blake2b_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "BLAKE2B_256", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int blake2b_160_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[20]; - } tests[] = { - { "", - { 0x33, 0x45, 0x52, 0x4a, 0xbf, 0x6b, 0xbe, 0x18, - 0x09, 0x44, 0x92, 0x24, 0xb5, 0x97, 0x2c, 0x41, - 0x79, 0x0b, 0x6c, 0xf2 } }, - { "abc", - { 0x38, 0x42, 0x64, 0xf6, 0x76, 0xf3, 0x95, 0x36, - 0x84, 0x05, 0x23, 0xf2, 0x84, 0x92, 0x1c, 0xdc, - 0x68, 0xb6, 0x84, 0x6b } }, - - { NULL, { 0 } } - }; - - int i; - unsigned char tmp[20]; - hash_state md; - - for (i = 0; tests[i].msg != NULL; i++) { - blake2b_160_init(&md); - blake2b_process(&md, (unsigned char *)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - blake2b_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "BLAKE2B_160", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/hashes/blake2s.c b/src/hashes/blake2s.c deleted file mode 100644 index 21684bf3..00000000 --- a/src/hashes/blake2s.c +++ /dev/null @@ -1,603 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* - BLAKE2 reference source code package - reference C implementations - - Copyright 2012, Samuel Neves . You may use this under the - terms of the CC0, the OpenSSL Licence, or the Apache Public License 2.0, at - your option. The terms of these licenses can be found at: - - - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - - OpenSSL license : https://www.openssl.org/source/license.html - - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - - More information about the BLAKE2 hash function can be found at - https://blake2.net. -*/ -/* see also https://www.ietf.org/rfc/rfc7693.txt */ - -#include "tomcrypt_private.h" - -#ifdef LTC_BLAKE2S - -enum blake2s_constant { - BLAKE2S_BLOCKBYTES = 64, - BLAKE2S_OUTBYTES = 32, - BLAKE2S_KEYBYTES = 32, - BLAKE2S_SALTBYTES = 8, - BLAKE2S_PERSONALBYTES = 8, - BLAKE2S_PARAM_SIZE = 32 -}; - -/* param offsets */ -enum { - BLAKE2S_O_DIGEST_LENGTH = 0, - BLAKE2S_O_KEY_LENGTH = 1, - BLAKE2S_O_FANOUT = 2, - BLAKE2S_O_DEPTH = 3, - BLAKE2S_O_LEAF_LENGTH = 4, - BLAKE2S_O_NODE_OFFSET = 8, - BLAKE2S_O_XOF_LENGTH = 12, - BLAKE2S_O_NODE_DEPTH = 14, - BLAKE2S_O_INNER_LENGTH = 15, - BLAKE2S_O_SALT = 16, - BLAKE2S_O_PERSONAL = 24 -}; - -/* -struct blake2s_param { - unsigned char digest_length; - unsigned char key_length; - unsigned char fanout; - unsigned char depth; - ulong32 leaf_length; - ulong32 node_offset; - ushort16 xof_length; - unsigned char node_depth; - unsigned char inner_length; - unsigned char salt[BLAKE2S_SALTBYTES]; - unsigned char personal[BLAKE2S_PERSONALBYTES]; -}; -*/ - -const struct ltc_hash_descriptor blake2s_128_desc = -{ - "blake2s-128", - 21, - 16, - 64, - { 1, 3, 6, 1, 4, 1, 1722, 12, 2, 2, 4 }, - 11, - &blake2s_128_init, - &blake2s_process, - &blake2s_done, - &blake2s_128_test, - NULL -}; - -const struct ltc_hash_descriptor blake2s_160_desc = -{ - "blake2s-160", - 22, - 20, - 64, - { 1, 3, 6, 1, 4, 1, 1722, 12, 2, 2, 5 }, - 11, - &blake2s_160_init, - &blake2s_process, - &blake2s_done, - &blake2s_160_test, - NULL -}; - -const struct ltc_hash_descriptor blake2s_224_desc = -{ - "blake2s-224", - 23, - 28, - 64, - { 1, 3, 6, 1, 4, 1, 1722, 12, 2, 2, 7 }, - 11, - &blake2s_224_init, - &blake2s_process, - &blake2s_done, - &blake2s_224_test, - NULL -}; - -const struct ltc_hash_descriptor blake2s_256_desc = -{ - "blake2s-256", - 24, - 32, - 64, - { 1, 3, 6, 1, 4, 1, 1722, 12, 2, 2, 8 }, - 11, - &blake2s_256_init, - &blake2s_process, - &blake2s_done, - &blake2s_256_test, - NULL -}; - -static const ulong32 blake2s_IV[8] = { - 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL, - 0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL -}; - -static const unsigned char blake2s_sigma[10][16] = { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, - { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 }, - { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 }, - { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 }, - { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 }, - { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 }, - { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 }, - { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 }, - { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 }, - { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0 }, -}; - -static void s_blake2s_set_lastnode(hash_state *md) { md->blake2s.f[1] = 0xffffffffUL; } - -/* Some helper functions, not necessarily useful */ -static int s_blake2s_is_lastblock(const hash_state *md) { return md->blake2s.f[0] != 0; } - -static void s_blake2s_set_lastblock(hash_state *md) -{ - if (md->blake2s.last_node) { - s_blake2s_set_lastnode(md); - } - md->blake2s.f[0] = 0xffffffffUL; -} - -static void s_blake2s_increment_counter(hash_state *md, const ulong32 inc) -{ - md->blake2s.t[0] += inc; - if (md->blake2s.t[0] < inc) md->blake2s.t[1]++; -} - -static int s_blake2s_init0(hash_state *md) -{ - int i; - XMEMSET(&md->blake2s, 0, sizeof(struct blake2s_state)); - - for (i = 0; i < 8; ++i) { - md->blake2s.h[i] = blake2s_IV[i]; - } - - return CRYPT_OK; -} - -/* init2 xors IV with input parameter block */ -static int s_blake2s_init_param(hash_state *md, const unsigned char *P) -{ - unsigned long i; - - s_blake2s_init0(md); - - /* IV XOR ParamBlock */ - for (i = 0; i < 8; ++i) { - ulong32 tmp; - LOAD32L(tmp, P + i * 4); - md->blake2s.h[i] ^= tmp; - } - - md->blake2s.outlen = P[BLAKE2S_O_DIGEST_LENGTH]; - return CRYPT_OK; -} - -/** - Initialize the hash/MAC state - - Use this function to init for arbitrary sizes. - - Give a key and keylen to init for MAC mode. - - @param md The hash state you wish to initialize - @param outlen The desired output-length - @param key The key of the MAC - @param keylen The length of the key - @return CRYPT_OK if successful -*/ -int blake2s_init(hash_state *md, unsigned long outlen, const unsigned char *key, unsigned long keylen) -{ - unsigned char P[BLAKE2S_PARAM_SIZE]; - int err; - - LTC_ARGCHK(md != NULL); - - if ((!outlen) || (outlen > BLAKE2S_OUTBYTES)) { - return CRYPT_INVALID_ARG; - } - if ((key && !keylen) || (keylen && !key) || (keylen > BLAKE2S_KEYBYTES)) { - return CRYPT_INVALID_ARG; - } - - XMEMSET(P, 0, sizeof(P)); - - P[BLAKE2S_O_DIGEST_LENGTH] = (unsigned char)outlen; - P[BLAKE2S_O_KEY_LENGTH] = (unsigned char)keylen; - P[BLAKE2S_O_FANOUT] = 1; - P[BLAKE2S_O_DEPTH] = 1; - - err = s_blake2s_init_param(md, P); - if (err != CRYPT_OK) return err; - - if (key) { - unsigned char block[BLAKE2S_BLOCKBYTES]; - - XMEMSET(block, 0, BLAKE2S_BLOCKBYTES); - XMEMCPY(block, key, keylen); - blake2s_process(md, block, BLAKE2S_BLOCKBYTES); - -#ifdef LTC_CLEAN_STACK - zeromem(block, sizeof(block)); -#endif - } - return CRYPT_OK; -} - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int blake2s_128_init(hash_state *md) { return blake2s_init(md, 16, NULL, 0); } - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int blake2s_160_init(hash_state *md) { return blake2s_init(md, 20, NULL, 0); } - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int blake2s_224_init(hash_state *md) { return blake2s_init(md, 28, NULL, 0); } - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int blake2s_256_init(hash_state *md) { return blake2s_init(md, 32, NULL, 0); } - -#define G(r, i, a, b, c, d) \ - do { \ - a = a + b + m[blake2s_sigma[r][2 * i + 0]]; \ - d = ROR(d ^ a, 16); \ - c = c + d; \ - b = ROR(b ^ c, 12); \ - a = a + b + m[blake2s_sigma[r][2 * i + 1]]; \ - d = ROR(d ^ a, 8); \ - c = c + d; \ - b = ROR(b ^ c, 7); \ - } while (0) -#define ROUND(r) \ - do { \ - G(r, 0, v[0], v[4], v[8], v[12]); \ - G(r, 1, v[1], v[5], v[9], v[13]); \ - G(r, 2, v[2], v[6], v[10], v[14]); \ - G(r, 3, v[3], v[7], v[11], v[15]); \ - G(r, 4, v[0], v[5], v[10], v[15]); \ - G(r, 5, v[1], v[6], v[11], v[12]); \ - G(r, 6, v[2], v[7], v[8], v[13]); \ - G(r, 7, v[3], v[4], v[9], v[14]); \ - } while (0) - -#ifdef LTC_CLEAN_STACK -static int ss_blake2s_compress(hash_state *md, const unsigned char *buf) -#else -static int s_blake2s_compress(hash_state *md, const unsigned char *buf) -#endif -{ - unsigned long i; - ulong32 m[16]; - ulong32 v[16]; - - for (i = 0; i < 16; ++i) { - LOAD32L(m[i], buf + i * sizeof(m[i])); - } - - for (i = 0; i < 8; ++i) { - v[i] = md->blake2s.h[i]; - } - - v[8] = blake2s_IV[0]; - v[9] = blake2s_IV[1]; - v[10] = blake2s_IV[2]; - v[11] = blake2s_IV[3]; - v[12] = md->blake2s.t[0] ^ blake2s_IV[4]; - v[13] = md->blake2s.t[1] ^ blake2s_IV[5]; - v[14] = md->blake2s.f[0] ^ blake2s_IV[6]; - v[15] = md->blake2s.f[1] ^ blake2s_IV[7]; - - ROUND(0); - ROUND(1); - ROUND(2); - ROUND(3); - ROUND(4); - ROUND(5); - ROUND(6); - ROUND(7); - ROUND(8); - ROUND(9); - - for (i = 0; i < 8; ++i) { - md->blake2s.h[i] = md->blake2s.h[i] ^ v[i] ^ v[i + 8]; - } - return CRYPT_OK; -} -#undef G -#undef ROUND - -#ifdef LTC_CLEAN_STACK -static int s_blake2s_compress(hash_state *md, const unsigned char *buf) -{ - int err; - err = ss_blake2s_compress(md, buf); - burn_stack(sizeof(ulong32) * (32) + sizeof(unsigned long)); - return err; -} -#endif - -/** - Process a block of memory through the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -int blake2s_process(hash_state *md, const unsigned char *in, unsigned long inlen) -{ - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(in != NULL); - - if (md->blake2s.curlen > sizeof(md->blake2s.buf)) { - return CRYPT_INVALID_ARG; - } - - if (inlen > 0) { - unsigned long left = md->blake2s.curlen; - unsigned long fill = BLAKE2S_BLOCKBYTES - left; - if (inlen > fill) { - md->blake2s.curlen = 0; - XMEMCPY(md->blake2s.buf + (left % sizeof(md->blake2s.buf)), in, fill); /* Fill buffer */ - s_blake2s_increment_counter(md, BLAKE2S_BLOCKBYTES); - s_blake2s_compress(md, md->blake2s.buf); /* Compress */ - in += fill; - inlen -= fill; - while (inlen > BLAKE2S_BLOCKBYTES) { - s_blake2s_increment_counter(md, BLAKE2S_BLOCKBYTES); - s_blake2s_compress(md, in); - in += BLAKE2S_BLOCKBYTES; - inlen -= BLAKE2S_BLOCKBYTES; - } - } - XMEMCPY(md->blake2s.buf + md->blake2s.curlen, in, inlen); - md->blake2s.curlen += inlen; - } - return CRYPT_OK; -} - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (size depending on the length used on init) - @return CRYPT_OK if successful -*/ -int blake2s_done(hash_state *md, unsigned char *out) -{ - unsigned char buffer[BLAKE2S_OUTBYTES] = { 0 }; - unsigned long i; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - /* if(md->blake2s.outlen != outlen) return CRYPT_INVALID_ARG; */ - - if (s_blake2s_is_lastblock(md)) { - return CRYPT_ERROR; - } - s_blake2s_increment_counter(md, md->blake2s.curlen); - s_blake2s_set_lastblock(md); - XMEMSET(md->blake2s.buf + md->blake2s.curlen, 0, BLAKE2S_BLOCKBYTES - md->blake2s.curlen); /* Padding */ - s_blake2s_compress(md, md->blake2s.buf); - - for (i = 0; i < 8; ++i) { /* Output full hash to temp buffer */ - STORE32L(md->blake2s.h[i], buffer + i * 4); - } - - XMEMCPY(out, buffer, md->blake2s.outlen); - zeromem(md, sizeof(hash_state)); -#ifdef LTC_CLEAN_STACK - zeromem(buffer, sizeof(buffer)); -#endif - return CRYPT_OK; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int blake2s_256_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[32]; - } tests[] = { - { "", - { 0x69, 0x21, 0x7a, 0x30, 0x79, 0x90, 0x80, 0x94, - 0xe1, 0x11, 0x21, 0xd0, 0x42, 0x35, 0x4a, 0x7c, - 0x1f, 0x55, 0xb6, 0x48, 0x2c, 0xa1, 0xa5, 0x1e, - 0x1b, 0x25, 0x0d, 0xfd, 0x1e, 0xd0, 0xee, 0xf9 } }, - { "abc", - { 0x50, 0x8c, 0x5e, 0x8c, 0x32, 0x7c, 0x14, 0xe2, - 0xe1, 0xa7, 0x2b, 0xa3, 0x4e, 0xeb, 0x45, 0x2f, - 0x37, 0x45, 0x8b, 0x20, 0x9e, 0xd6, 0x3a, 0x29, - 0x4d, 0x99, 0x9b, 0x4c, 0x86, 0x67, 0x59, 0x82 } }, - { "12345678901234567890123456789012345678901234567890" - "12345678901234567890123456789012345678901234567890" - "12345678901234567890123456789012345678901234567890" - "12345678901234567890123456789012345678901234567890" - "12345678901234567890123456789012345678901234567890" - "12345678901234567890123456789012345678901234567890", - { 0xa3, 0x78, 0x8b, 0x5b, 0x59, 0xee, 0xe4, 0x41, - 0x95, 0x23, 0x58, 0x00, 0xa4, 0xf9, 0xfa, 0x41, - 0x86, 0x0c, 0x7b, 0x1c, 0x35, 0xa2, 0x42, 0x70, - 0x50, 0x80, 0x79, 0x56, 0xe3, 0xbe, 0x31, 0x74 } }, - - { NULL, { 0 } } - }; - - int i; - unsigned char tmp[32]; - hash_state md; - - for (i = 0; tests[i].msg != NULL; i++) { - blake2s_256_init(&md); - blake2s_process(&md, (unsigned char *)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - blake2s_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "BLAKE2S_256", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - - } - return CRYPT_OK; -#endif -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int blake2s_224_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[28]; - } tests[] = { - { "", - { 0x1f, 0xa1, 0x29, 0x1e, 0x65, 0x24, 0x8b, 0x37, - 0xb3, 0x43, 0x34, 0x75, 0xb2, 0xa0, 0xdd, 0x63, - 0xd5, 0x4a, 0x11, 0xec, 0xc4, 0xe3, 0xe0, 0x34, - 0xe7, 0xbc, 0x1e, 0xf4 } }, - { "abc", - { 0x0b, 0x03, 0x3f, 0xc2, 0x26, 0xdf, 0x7a, 0xbd, - 0xe2, 0x9f, 0x67, 0xa0, 0x5d, 0x3d, 0xc6, 0x2c, - 0xf2, 0x71, 0xef, 0x3d, 0xfe, 0xa4, 0xd3, 0x87, - 0x40, 0x7f, 0xbd, 0x55 } }, - - { NULL, { 0 } } - }; - - int i; - unsigned char tmp[28]; - hash_state md; - - for (i = 0; tests[i].msg != NULL; i++) { - blake2s_224_init(&md); - blake2s_process(&md, (unsigned char *)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - blake2s_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "BLAKE2S_224", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - - } - return CRYPT_OK; -#endif -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int blake2s_160_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[20]; - } tests[] = { - { "", - { 0x35, 0x4c, 0x9c, 0x33, 0xf7, 0x35, 0x96, 0x24, - 0x18, 0xbd, 0xac, 0xb9, 0x47, 0x98, 0x73, 0x42, - 0x9c, 0x34, 0x91, 0x6f} }, - { "abc", - { 0x5a, 0xe3, 0xb9, 0x9b, 0xe2, 0x9b, 0x01, 0x83, - 0x4c, 0x3b, 0x50, 0x85, 0x21, 0xed, 0xe6, 0x04, - 0x38, 0xf8, 0xde, 0x17 } }, - - { NULL, { 0 } } - }; - - int i; - unsigned char tmp[20]; - hash_state md; - - for (i = 0; tests[i].msg != NULL; i++) { - blake2s_160_init(&md); - blake2s_process(&md, (unsigned char *)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - blake2s_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "BLAKE2S_160", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - - } - return CRYPT_OK; -#endif -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int blake2s_128_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[16]; - } tests[] = { - { "", - { 0x64, 0x55, 0x0d, 0x6f, 0xfe, 0x2c, 0x0a, 0x01, - 0xa1, 0x4a, 0xba, 0x1e, 0xad, 0xe0, 0x20, 0x0c } }, - { "abc", - { 0xaa, 0x49, 0x38, 0x11, 0x9b, 0x1d, 0xc7, 0xb8, - 0x7c, 0xba, 0xd0, 0xff, 0xd2, 0x00, 0xd0, 0xae } }, - - { NULL, { 0 } } - }; - - int i; - unsigned char tmp[16]; - hash_state md; - - for (i = 0; tests[i].msg != NULL; i++) { - blake2s_128_init(&md); - blake2s_process(&md, (unsigned char *)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - blake2s_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "BLAKE2S_128", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/hashes/blake3.c b/src/hashes/blake3.c deleted file mode 100644 index 909b8c95..00000000 --- a/src/hashes/blake3.c +++ /dev/null @@ -1,396 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file blake3.c - BLAKE3 hash, keyed hash and key derivation, - based on blake3-tiny by Michael Forney (public domain) - https://github.com/michaelforney/blake3-tiny -*/ - -#ifdef LTC_BLAKE3 - -/* Domain-separation flags */ -#define BLAKE3_CHUNK_START (1u << 0) -#define BLAKE3_CHUNK_END (1u << 1) -#define BLAKE3_PARENT (1u << 2) -#define BLAKE3_ROOT (1u << 3) -#define BLAKE3_KEYED_HASH (1u << 4) -#define BLAKE3_DERIVE_KEY_CONTEXT (1u << 5) -#define BLAKE3_DERIVE_KEY_MATERIAL (1u << 6) - -/* BLAKE3 IV -- same as SHA-256 constants */ -static const ulong32 s_iv[8] = { 0x6a09e667UL, 0xbb67ae85UL, 0x3c6ef372UL, 0xa54ff53aUL, 0x510e527fUL, 0x9b05688cUL, 0x1f83d9abUL, 0x5be0cd19UL }; - -/* Load 16 little-endian 32-bit words from a 64-byte buffer */ -static void s_load(ulong32 d[16], const unsigned char *s) -{ - int i; - for (i = 0; i < 16; ++i, s += 4) { - d[i] = (ulong32)s[0] - | ((ulong32)s[1] << 8) - | ((ulong32)s[2] << 16) - | ((ulong32)s[3] << 24); - } -} - -/* Load 8 little-endian 32-bit words from a 32-byte key */ -static void s_load_key(ulong32 d[8], const unsigned char *s) -{ - int i; - for (i = 0; i < 8; ++i, s += 4) { - d[i] = (ulong32)s[0] - | ((ulong32)s[1] << 8) - | ((ulong32)s[2] << 16) - | ((ulong32)s[3] << 24); - } -} - -/* BLAKE3 compression function - out - output words (8 always; 16 when BLAKE3_ROOT is set in d) - m - 16-word message block (may alias out) - h - 8-word chaining value - t - chunk counter (64-bit) - b - byte count for this block (0-64) - d - domain flags -*/ -static void s_compress(ulong32 *out, const ulong32 *m, const ulong32 *h, ulong64 t, ulong32 b, ulong32 d) -{ - static const unsigned char s_sigma[7][16] = { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - { 2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8}, - { 3, 4, 10, 12, 13, 2, 7, 14, 6, 5, 9, 0, 11, 15, 8, 1}, - {10, 7, 12, 9, 14, 3, 13, 15, 4, 0, 11, 2, 5, 8, 1, 6}, - {12, 13, 9, 11, 15, 10, 14, 8, 7, 2, 5, 3, 0, 1, 6, 4}, - { 9, 14, 11, 5, 8, 12, 15, 1, 13, 3, 0, 10, 2, 6, 4, 7}, - {11, 15, 5, 0, 1, 9, 8, 6, 14, 10, 2, 12, 3, 4, 7, 13}, - }; - ulong32 v[16]; - unsigned int i; - - v[0] = h[0]; v[1] = h[1]; v[2] = h[2]; v[3] = h[3]; - v[4] = h[4]; v[5] = h[5]; v[6] = h[6]; v[7] = h[7]; - v[8] = s_iv[0]; v[9] = s_iv[1]; v[10] = s_iv[2]; v[11] = s_iv[3]; - v[12] = (ulong32)t; - v[13] = (ulong32)(t >> 32); - v[14] = b; - v[15] = d; - -#define B3G(ri, ai, bi, ci, di, mx, my) \ - v[ai] += v[bi] + m[s_sigma[ri][mx]]; \ - v[di] = RORc(v[di] ^ v[ai], 16); \ - v[ci] += v[di]; \ - v[bi] = RORc(v[bi] ^ v[ci], 12); \ - v[ai] += v[bi] + m[s_sigma[ri][my]]; \ - v[di] = RORc(v[di] ^ v[ai], 8); \ - v[ci] += v[di]; \ - v[bi] = RORc(v[bi] ^ v[ci], 7); - -#define B3ROUND(ri) \ - B3G(ri, 0, 4, 8, 12, 0, 1) \ - B3G(ri, 1, 5, 9, 13, 2, 3) \ - B3G(ri, 2, 6, 10, 14, 4, 5) \ - B3G(ri, 3, 7, 11, 15, 6, 7) \ - B3G(ri, 0, 5, 10, 15, 8, 9) \ - B3G(ri, 1, 6, 11, 12, 10, 11) \ - B3G(ri, 2, 7, 8, 13, 12, 13) \ - B3G(ri, 3, 4, 9, 14, 14, 15) - - B3ROUND(0) B3ROUND(1) B3ROUND(2) B3ROUND(3) - B3ROUND(4) B3ROUND(5) B3ROUND(6) - -#undef B3G -#undef B3ROUND - - if (d & BLAKE3_ROOT) { - for (i = 8; i < 16; ++i) out[i] = v[i] ^ h[i - 8]; - } - for (i = 0; i < 8; ++i) out[i] = v[i] ^ v[i + 8]; -} - -/* Process one 64-byte block during update (only called when more data follows, so this block is never the ROOT) */ -static void s_blake3_block(hash_state *md, const unsigned char *buf) -{ - ulong32 m[16]; - ulong32 *cv; - ulong64 t; - ulong32 flags; - - flags = md->blake3.flags; - if (md->blake3.block == 0) flags |= BLAKE3_CHUNK_START; - if (md->blake3.block == 15) flags |= BLAKE3_CHUNK_END; - - cv = &md->blake3.cv_buf[md->blake3.cv_off * 8u]; - s_load(m, buf); - s_compress(cv, m, cv, md->blake3.chunk, 64, flags); - - if (++md->blake3.block == 16) { - md->blake3.block = 0; - for (t = ++md->blake3.chunk; (t & 1) == 0; t >>= 1) { - --md->blake3.cv_off; - cv = &md->blake3.cv_buf[md->blake3.cv_off * 8u]; - s_compress(cv, cv, md->blake3.key, 0, 64, BLAKE3_PARENT | md->blake3.flags); - } - ++md->blake3.cv_off; - cv = &md->blake3.cv_buf[md->blake3.cv_off * 8u]; - XMEMCPY(cv, md->blake3.key, sizeof(md->blake3.key)); - } -} - -/** - Initialize a BLAKE3 hash state (unkeyed hash mode). - @param md The hash state to initialize - @return CRYPT_OK on success -*/ -int blake3_init(hash_state *md) -{ - LTC_ARGCHK(md != NULL); - XMEMSET(&md->blake3, 0, sizeof(md->blake3)); - XMEMCPY(md->blake3.key, s_iv, sizeof(md->blake3.key)); - XMEMCPY(md->blake3.cv_buf, s_iv, sizeof(md->blake3.key)); - return CRYPT_OK; -} - -/** - Initialize a BLAKE3 keyed-hash state (MAC / PRF mode). - @param md The hash state to initialize - @param key The 32-byte key - @param keylen Length of key (must be 32) - @return CRYPT_OK on success -*/ -int blake3_keyed_init(hash_state *md, const unsigned char *key, unsigned long keylen) -{ - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(key != NULL); - if (keylen != 32) return CRYPT_INVALID_KEYSIZE; - - XMEMSET(&md->blake3, 0, sizeof(md->blake3)); - s_load_key(md->blake3.key, key); - XMEMCPY(md->blake3.cv_buf, md->blake3.key, sizeof(md->blake3.key)); - md->blake3.flags = BLAKE3_KEYED_HASH; - return CRYPT_OK; -} - -/** - Initialize a BLAKE3 key-derivation state. - Hashes the context string internally, then prepares the state so that - subsequent process/done calls derive a key from the input material. - @param md The hash state to initialize - @param context Application-specific context string - @param contextlen Length of the context string in bytes - @return CRYPT_OK on success -*/ -int blake3_derive_key_init(hash_state *md, const unsigned char *context, unsigned long contextlen) -{ - unsigned char context_key[32]; - int err; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(context != NULL); - - /* Pass 1: hash the context string with DERIVE_KEY_CONTEXT */ - XMEMSET(&md->blake3, 0, sizeof(md->blake3)); - XMEMCPY(md->blake3.key, s_iv, sizeof(md->blake3.key)); - XMEMCPY(md->blake3.cv_buf, s_iv, sizeof(md->blake3.key)); - md->blake3.flags = BLAKE3_DERIVE_KEY_CONTEXT; - - if ((err = blake3_process(md, context, contextlen)) != CRYPT_OK) return err; - if ((err = blake3_done(md, context_key)) != CRYPT_OK) return err; - - /* Pass 2: set up for key material hashing with DERIVE_KEY_MATERIAL; blake3_done already zeroed the state */ - s_load_key(md->blake3.key, context_key); - XMEMCPY(md->blake3.cv_buf, md->blake3.key, sizeof(md->blake3.key)); - md->blake3.flags = BLAKE3_DERIVE_KEY_MATERIAL; - - zeromem(context_key, sizeof(context_key)); - return CRYPT_OK; -} - -/** - Process data through BLAKE3. - @param md The hash state - @param in Data to hash - @param inlen Length of data in bytes - @return CRYPT_OK on success -*/ -int blake3_process(hash_state *md, const unsigned char *in, unsigned long inlen) -{ - unsigned long n; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(in != NULL); - - if (md->blake3.bytes > 0) { - n = 64uL - md->blake3.bytes; - if (inlen < n) n = inlen; - XMEMCPY(md->blake3.input + md->blake3.bytes, in, n); - in += n; - inlen -= n; - md->blake3.bytes += (ulong32)n; - if (inlen == 0) return CRYPT_OK; - s_blake3_block(md, md->blake3.input); - } - while (inlen > 64) { - s_blake3_block(md, in); - in += 64; - inlen -= 64; - } - md->blake3.bytes = (ulong32)inlen; - XMEMCPY(md->blake3.input, in, inlen); - return CRYPT_OK; -} - -/** - Finalize BLAKE3 and produce the 32-byte digest. - @param md The hash state - @param out [out] 32-byte digest - @return CRYPT_OK on success -*/ -int blake3_done(hash_state *md, unsigned char *out) -{ - ulong32 m[16], root[16]; - ulong32 flags, b, x; - unsigned long i; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - XMEMSET(md->blake3.input + md->blake3.bytes, 0, 64u - md->blake3.bytes); - s_load(m, md->blake3.input); - - flags = BLAKE3_CHUNK_END | md->blake3.flags; - if (md->blake3.block == 0) flags |= BLAKE3_CHUNK_START; - - if (md->blake3.cv_off == 0) { - b = md->blake3.bytes; - s_compress(root, m, md->blake3.cv_buf, 0, b, flags | BLAKE3_ROOT); - } - else { - ulong32 *cv = &md->blake3.cv_buf[md->blake3.cv_off * 8u]; - s_compress(cv, m, cv, md->blake3.chunk, md->blake3.bytes, flags); - while ((cv -= 8) != md->blake3.cv_buf) s_compress(cv, cv, md->blake3.key, 0, 64, BLAKE3_PARENT | md->blake3.flags); - s_compress(root, md->blake3.cv_buf, md->blake3.key, 0, 64, BLAKE3_PARENT | BLAKE3_ROOT | md->blake3.flags); - } - - for (i = 0, x = 0; i < 32; ++i) { - if ((i & 3) == 0) x = root[i >> 2]; - out[i] = (unsigned char)(x & 0xff); - x >>= 8; - } - - zeromem(&md->blake3, sizeof(md->blake3)); - return CRYPT_OK; -} - -/* - Self-test with official BLAKE3 test vectors - https://github.com/BLAKE3-team/BLAKE3/blob/master/test_vectors/test_vectors.json - - Input: byte[i] = i % 251. Key: "whats the Elvish word for friend" - Context: "BLAKE3 2019-12-27 16:29:52 test vectors context" -*/ - -int blake3_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - unsigned long input_len; - unsigned char hash[32]; - unsigned char keyed_hash[32]; - unsigned char derive_key[32]; - } tests[] = { - /* input_len = 0 */ - { 0, - { 0xaf, 0x13, 0x49, 0xb9, 0xf5, 0xf9, 0xa1, 0xa6, 0xa0, 0x40, 0x4d, 0xea, 0x36, 0xdc, 0xc9, 0x49, - 0x9b, 0xcb, 0x25, 0xc9, 0xad, 0xc1, 0x12, 0xb7, 0xcc, 0x9a, 0x93, 0xca, 0xe4, 0x1f, 0x32, 0x62 }, - { 0x92, 0xb2, 0xb7, 0x56, 0x04, 0xed, 0x3c, 0x76, 0x1f, 0x9d, 0x6f, 0x62, 0x39, 0x2c, 0x8a, 0x92, - 0x27, 0xad, 0x0e, 0xa3, 0xf0, 0x95, 0x73, 0xe7, 0x83, 0xf1, 0x49, 0x8a, 0x4e, 0xd6, 0x0d, 0x26 }, - { 0x2c, 0xc3, 0x97, 0x83, 0xc2, 0x23, 0x15, 0x4f, 0xea, 0x8d, 0xfb, 0x7c, 0x1b, 0x16, 0x60, 0xf2, - 0xac, 0x2d, 0xcb, 0xd1, 0xc1, 0xde, 0x82, 0x77, 0xb0, 0xb0, 0xdd, 0x39, 0xb7, 0xe5, 0x0d, 0x7d } - }, - /* input_len = 1 */ - { 1, - { 0x2d, 0x3a, 0xde, 0xdf, 0xf1, 0x1b, 0x61, 0xf1, 0x4c, 0x88, 0x6e, 0x35, 0xaf, 0xa0, 0x36, 0x73, - 0x6d, 0xcd, 0x87, 0xa7, 0x4d, 0x27, 0xb5, 0xc1, 0x51, 0x02, 0x25, 0xd0, 0xf5, 0x92, 0xe2, 0x13 }, - { 0x6d, 0x78, 0x78, 0xdf, 0xff, 0x2f, 0x48, 0x56, 0x35, 0xd3, 0x90, 0x13, 0x27, 0x8a, 0xe1, 0x4f, - 0x14, 0x54, 0xb8, 0xc0, 0xa3, 0xa2, 0xd3, 0x4b, 0xc1, 0xab, 0x38, 0x22, 0x8a, 0x80, 0xc9, 0x5b }, - { 0xb3, 0xe2, 0xe3, 0x40, 0xa1, 0x17, 0xa4, 0x99, 0xc6, 0xcf, 0x23, 0x98, 0xa1, 0x9e, 0xe0, 0xd2, - 0x9c, 0xca, 0x2b, 0xb7, 0x40, 0x4c, 0x73, 0x06, 0x33, 0x82, 0x69, 0x3b, 0xf6, 0x6c, 0xb0, 0x6c } - }, - /* input_len = 65 */ - { 65, - { 0xde, 0x1e, 0x5f, 0xa0, 0xbe, 0x70, 0xdf, 0x6d, 0x2b, 0xe8, 0xff, 0xfd, 0x0e, 0x99, 0xce, 0xaa, - 0x8e, 0xb6, 0xe8, 0xc9, 0x3a, 0x63, 0xf2, 0xd8, 0xd1, 0xc3, 0x0e, 0xcb, 0x6b, 0x26, 0x3d, 0xee }, - { 0xc0, 0xa4, 0xed, 0xef, 0xa2, 0xd2, 0xac, 0xcb, 0x92, 0x77, 0xc3, 0x71, 0xac, 0x12, 0xfc, 0xdb, - 0xb5, 0x29, 0x88, 0xa8, 0x6e, 0xdc, 0x54, 0xf0, 0x71, 0x6e, 0x15, 0x91, 0xb4, 0x32, 0x6e, 0x72 }, - { 0x51, 0xfd, 0x05, 0xc3, 0xc1, 0xcf, 0xbc, 0x8e, 0xd6, 0x7d, 0x13, 0x9a, 0xd7, 0x6f, 0x5c, 0xf8, - 0x23, 0x6c, 0xd2, 0xac, 0xd2, 0x66, 0x27, 0xa3, 0x0c, 0x10, 0x4d, 0xfd, 0x9d, 0x3f, 0xf8, 0xa8 } - }, - /* input_len = 1024 (single chunk boundary) */ - { 1024, - { 0x42, 0x21, 0x47, 0x39, 0xf0, 0x95, 0xa4, 0x06, 0xf3, 0xfc, 0x83, 0xde, 0xb8, 0x89, 0x74, 0x4a, - 0xc0, 0x0d, 0xf8, 0x31, 0xc1, 0x0d, 0xaa, 0x55, 0x18, 0x9b, 0x5d, 0x12, 0x1c, 0x85, 0x5a, 0xf7 }, - { 0x75, 0xc4, 0x6f, 0x6f, 0x3d, 0x9e, 0xb4, 0xf5, 0x5e, 0xca, 0xae, 0xe4, 0x80, 0xdb, 0x73, 0x2e, - 0x6c, 0x21, 0x05, 0x54, 0x6f, 0x1e, 0x67, 0x50, 0x03, 0x68, 0x7c, 0x31, 0x71, 0x9c, 0x7b, 0xa4 }, - { 0x73, 0x56, 0xcd, 0x77, 0x20, 0xd5, 0xb6, 0x6b, 0x6d, 0x06, 0x97, 0xeb, 0x31, 0x77, 0xd9, 0xf8, - 0xd7, 0x3a, 0x4a, 0x5c, 0x5e, 0x96, 0x88, 0x96, 0xeb, 0x6a, 0x68, 0x96, 0x84, 0x30, 0x27, 0x06 } - }, - /* input_len = 1025 (multi-chunk) */ - { 1025, - { 0xd0, 0x02, 0x78, 0xae, 0x47, 0xeb, 0x27, 0xb3, 0x4f, 0xae, 0xcf, 0x67, 0xb4, 0xfe, 0x26, 0x3f, - 0x82, 0xd5, 0x41, 0x29, 0x16, 0xc1, 0xff, 0xd9, 0x7c, 0x8c, 0xb7, 0xfb, 0x81, 0x4b, 0x84, 0x44 }, - { 0x35, 0x7d, 0xc5, 0x5d, 0xe0, 0xc7, 0xe3, 0x82, 0xc9, 0x00, 0xfd, 0x6e, 0x32, 0x0a, 0xcc, 0x04, - 0x14, 0x6b, 0xe0, 0x1d, 0xb6, 0xa8, 0xce, 0x72, 0x10, 0xb7, 0x18, 0x9b, 0xd6, 0x64, 0xea, 0x69 }, - { 0xef, 0xfa, 0xa2, 0x45, 0xf0, 0x65, 0xfb, 0xf8, 0x2a, 0xc1, 0x86, 0x83, 0x9a, 0x24, 0x97, 0x07, - 0xc3, 0xbd, 0xdf, 0x6d, 0x3f, 0xdd, 0xa2, 0x2d, 0x1b, 0x95, 0xa3, 0xc9, 0x70, 0x37, 0x9b, 0xcb } - }, - }; - - static const unsigned char test_key[32] = "whats the Elvish word for friend"; - static const char test_context[] = "BLAKE3 2019-12-27 16:29:52 test vectors context"; - unsigned char input[1025], tmp[32]; - hash_state md; - unsigned long j; - int i; - - /* Build test input: byte[i] = i % 251 */ - for (j = 0; j < sizeof(input); ++j) input[j] = (unsigned char)(j % 251); - - for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); ++i) { - /* hash mode */ - blake3_init(&md); - blake3_process(&md, input, tests[i].input_len); - blake3_done(&md, tmp); - if (ltc_compare_testvector(tmp, 32, tests[i].hash, 32, "BLAKE3", i)) return CRYPT_FAIL_TESTVECTOR; - /* keyed_hash mode */ - blake3_keyed_init(&md, test_key, 32); - blake3_process(&md, input, tests[i].input_len); - blake3_done(&md, tmp); - if (ltc_compare_testvector(tmp, 32, tests[i].keyed_hash, 32, "BLAKE3 keyed", i)) return CRYPT_FAIL_TESTVECTOR; - /* derive_key mode */ - blake3_derive_key_init(&md, (const unsigned char *)test_context, XSTRLEN(test_context)); - blake3_process(&md, input, tests[i].input_len); - blake3_done(&md, tmp); - if (ltc_compare_testvector(tmp, 32, tests[i].derive_key, 32, "BLAKE3 derive_key", i)) return CRYPT_FAIL_TESTVECTOR; - } - return CRYPT_OK; -#endif -} - -const struct ltc_hash_descriptor blake3_desc = { - "blake3", - 37, /* unique internal ID */ - 32, /* 256-bit digest */ - 64, /* 64-byte input block */ - { 0 }, 0, /* no ASN.1 OID assigned yet */ - &blake3_init, - &blake3_process, - &blake3_done, - &blake3_test, - NULL -}; - -#endif /* LTC_BLAKE3 */ diff --git a/src/hashes/chc/chc.c b/src/hashes/chc/chc.c deleted file mode 100644 index 2ac077ab..00000000 --- a/src/hashes/chc/chc.c +++ /dev/null @@ -1,302 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file chc.c - CHC support. (Tom St Denis) -*/ - -#ifdef LTC_CHC_HASH - -#define UNDEFED_HASH -17 - -/* chc settings */ -static int cipher_idx=UNDEFED_HASH, /* which cipher */ - cipher_blocksize; /* blocksize of cipher */ - - -const struct ltc_hash_descriptor chc_desc = { - "chc_hash", 12, 0, 0, { 0 }, 0, - &chc_init, - &chc_process, - &chc_done, - &chc_test, - NULL -}; - -/** - Initialize the CHC state with a given cipher - @param cipher The index of the cipher you wish to bind - @return CRYPT_OK if successful -*/ -int chc_register(int cipher) -{ - int err, kl, idx; - - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - - /* will it be valid? */ - kl = cipher_descriptor[cipher].block_length; - - /* must be >64 bit block */ - if (kl <= 8) { - return CRYPT_INVALID_CIPHER; - } - - /* can we use the ideal keysize? */ - if ((err = cipher_descriptor[cipher].keysize(&kl)) != CRYPT_OK) { - return err; - } - /* we require that key size == block size be a valid choice */ - if (kl != cipher_descriptor[cipher].block_length) { - return CRYPT_INVALID_CIPHER; - } - - /* determine if chc_hash has been register_hash'ed already */ - if ((err = hash_is_valid(idx = find_hash("chc_hash"))) != CRYPT_OK) { - return err; - } - - /* store into descriptor */ - hash_descriptor[idx].hashsize = - hash_descriptor[idx].blocksize = cipher_descriptor[cipher].block_length; - - /* store the idx and block size */ - cipher_idx = cipher; - cipher_blocksize = cipher_descriptor[cipher].block_length; - return CRYPT_OK; -} - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int chc_init(hash_state *md) -{ - symmetric_key *key; - unsigned char buf[MAXBLOCKSIZE]; - int err; - - LTC_ARGCHK(md != NULL); - - /* is the cipher valid? */ - if ((err = cipher_is_valid(cipher_idx)) != CRYPT_OK) { - return err; - } - - if (cipher_blocksize != cipher_descriptor[cipher_idx].block_length) { - return CRYPT_INVALID_CIPHER; - } - - if ((key = XMALLOC(sizeof(*key))) == NULL) { - return CRYPT_MEM; - } - - /* zero key and what not */ - zeromem(buf, cipher_blocksize); - if ((err = cipher_descriptor[cipher_idx].setup(buf, cipher_blocksize, 0, key)) != CRYPT_OK) { - XFREE(key); - return err; - } - - /* encrypt zero block */ - cipher_descriptor[cipher_idx].ecb_encrypt(buf, md->chc.state, key); - - /* zero other members */ - md->chc.length = 0; - md->chc.curlen = 0; - zeromem(md->chc.buf, sizeof(md->chc.buf)); - XFREE(key); - return CRYPT_OK; -} - -/* - key <= state - T0,T1 <= block - T0 <= encrypt T0 - state <= state xor T0 xor T1 -*/ -static int s_chc_compress(hash_state *md, const unsigned char *buf) -{ - unsigned char T[2][MAXBLOCKSIZE]; - symmetric_key *key; - int err, x; - - if ((key = XMALLOC(sizeof(*key))) == NULL) { - return CRYPT_MEM; - } - if ((err = cipher_descriptor[cipher_idx].setup(md->chc.state, cipher_blocksize, 0, key)) != CRYPT_OK) { - XFREE(key); - return err; - } - XMEMCPY(T[1], buf, cipher_blocksize); - cipher_descriptor[cipher_idx].ecb_encrypt(buf, T[0], key); - for (x = 0; x < cipher_blocksize; x++) { - md->chc.state[x] ^= T[0][x] ^ T[1][x]; - } -#ifdef LTC_CLEAN_STACK - zeromem(T, sizeof(T)); - zeromem(key, sizeof(*key)); -#endif - XFREE(key); - return CRYPT_OK; -} - -/** - Function for processing blocks - @param md The hash state - @param buf The data to hash - @param len The length of the data (octets) - @return CRYPT_OK if successful -*/ -static int ss_chc_process(hash_state * md, const unsigned char *in, unsigned long inlen); -static HASH_PROCESS(ss_chc_process, s_chc_compress, chc, (unsigned long)cipher_blocksize) - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -int chc_process(hash_state * md, const unsigned char *in, unsigned long inlen) -{ - int err; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(in != NULL); - - /* is the cipher valid? */ - if ((err = cipher_is_valid(cipher_idx)) != CRYPT_OK) { - return err; - } - if (cipher_blocksize != cipher_descriptor[cipher_idx].block_length) { - return CRYPT_INVALID_CIPHER; - } - - return ss_chc_process(md, in, inlen); -} - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (length of the block size of the block cipher) - @return CRYPT_OK if successful -*/ -int chc_done(hash_state *md, unsigned char *out) -{ - int err; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - /* is the cipher valid? */ - if ((err = cipher_is_valid(cipher_idx)) != CRYPT_OK) { - return err; - } - if (cipher_blocksize != cipher_descriptor[cipher_idx].block_length) { - return CRYPT_INVALID_CIPHER; - } - - if (md->chc.curlen >= sizeof(md->chc.buf)) { - return CRYPT_INVALID_ARG; - } - - /* increase the length of the message */ - md->chc.length += md->chc.curlen * 8; - - /* append the '1' bit */ - md->chc.buf[md->chc.curlen++] = (unsigned char)0x80; - - /* if the length is currently above l-8 bytes we append zeros - * then compress. Then we can fall back to padding zeros and length - * encoding like normal. - */ - if (md->chc.curlen > (unsigned long)(cipher_blocksize - 8)) { - while (md->chc.curlen < (unsigned long)cipher_blocksize) { - md->chc.buf[md->chc.curlen++] = (unsigned char)0; - } - s_chc_compress(md, md->chc.buf); - md->chc.curlen = 0; - } - - /* pad upto l-8 bytes of zeroes */ - while (md->chc.curlen < (unsigned long)(cipher_blocksize - 8)) { - md->chc.buf[md->chc.curlen++] = (unsigned char)0; - } - - /* store length */ - STORE64L(md->chc.length, md->chc.buf+(cipher_blocksize-8)); - s_chc_compress(md, md->chc.buf); - - /* copy output */ - XMEMCPY(out, md->chc.state, cipher_blocksize); - -#ifdef LTC_CLEAN_STACK - zeromem(md, sizeof(hash_state)); -#endif - return CRYPT_OK; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int chc_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - unsigned char *msg, - hash[MAXBLOCKSIZE]; - int len; - } tests[] = { -{ - (unsigned char *)"hello world", - { 0xcf, 0x57, 0x9d, 0xc3, 0x0a, 0x0e, 0xea, 0x61, - 0x0d, 0x54, 0x47, 0xc4, 0x3c, 0x06, 0xf5, 0x4e }, - 16 -} -}; - int i, oldhashidx, idx, err; - unsigned char tmp[MAXBLOCKSIZE]; - hash_state md; - - /* AES can be under rijndael or aes... try to find it */ - if ((idx = find_cipher("aes")) == -1) { - if ((idx = find_cipher("rijndael")) == -1) { - return CRYPT_NOP; - } - } - oldhashidx = cipher_idx; - chc_register(idx); - - for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) { - if ((err = chc_init(&md)) != CRYPT_OK) { - return err; - } - if ((err = chc_process(&md, tests[i].msg, XSTRLEN((char *)tests[i].msg))) != CRYPT_OK) { - return err; - } - if ((err = chc_done(&md, tmp)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(tmp, tests[i].len, tests[i].hash, tests[i].len, "CHC", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - if (oldhashidx != UNDEFED_HASH) { - chc_register(oldhashidx); - } - - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/hashes/helper/hash_file.c b/src/hashes/helper/hash_file.c deleted file mode 100644 index d2711db2..00000000 --- a/src/hashes/helper/hash_file.c +++ /dev/null @@ -1,43 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifndef LTC_NO_FILE -/** - @file hash_file.c - Hash a file, Tom St Denis -*/ - -/** - @param hash The index of the hash desired - @param fname The name of the file you wish to hash - @param out [out] The destination of the digest - @param outlen [in/out] The max size and resulting size of the message digest - @result CRYPT_OK if successful -*/ -int hash_file(int hash, const char *fname, unsigned char *out, unsigned long *outlen) -{ - FILE *in; - int err; - LTC_ARGCHK(fname != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((err = hash_is_valid(hash)) != CRYPT_OK) { - return err; - } - - in = fopen(fname, "rb"); - if (in == NULL) { - return CRYPT_FILE_NOTFOUND; - } - - err = hash_filehandle(hash, in, out, outlen); - if (fclose(in) != 0) { - return CRYPT_ERROR; - } - - return err; -} -#endif /* #ifndef LTC_NO_FILE */ - diff --git a/src/hashes/helper/hash_filehandle.c b/src/hashes/helper/hash_filehandle.c deleted file mode 100644 index f4eee7fb..00000000 --- a/src/hashes/helper/hash_filehandle.c +++ /dev/null @@ -1,64 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifndef LTC_NO_FILE -/** - @file hash_filehandle.c - Hash open files, Tom St Denis -*/ - -/** - Hash data from an open file handle. - @param hash The index of the hash you want to use - @param in The FILE* handle of the file you want to hash - @param out [out] The destination of the digest - @param outlen [in/out] The max size and resulting size of the digest - @result CRYPT_OK if successful -*/ -int hash_filehandle(int hash, FILE *in, unsigned char *out, unsigned long *outlen) -{ - hash_state md; - unsigned char *buf; - size_t x; - int err; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(in != NULL); - - if ((buf = XMALLOC(LTC_FILE_READ_BUFSIZE)) == NULL) { - return CRYPT_MEM; - } - - if ((err = hash_is_valid(hash)) != CRYPT_OK) { - goto LBL_ERR; - } - - if (*outlen < hash_descriptor[hash].hashsize) { - *outlen = hash_descriptor[hash].hashsize; - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; - } - if ((err = hash_descriptor[hash].init(&md)) != CRYPT_OK) { - goto LBL_ERR; - } - - do { - x = fread(buf, 1, LTC_FILE_READ_BUFSIZE, in); - if ((err = hash_descriptor[hash].process(&md, buf, (unsigned long)x)) != CRYPT_OK) { - goto LBL_CLEANBUF; - } - } while (x == LTC_FILE_READ_BUFSIZE); - if ((err = hash_descriptor[hash].done(&md, out)) == CRYPT_OK) { - *outlen = hash_descriptor[hash].hashsize; - } - -LBL_CLEANBUF: - zeromem(buf, LTC_FILE_READ_BUFSIZE); -LBL_ERR: - XFREE(buf); - return err; -} -#endif /* #ifndef LTC_NO_FILE */ - diff --git a/src/hashes/helper/hash_memory.c b/src/hashes/helper/hash_memory.c deleted file mode 100644 index f38f51ca..00000000 --- a/src/hashes/helper/hash_memory.c +++ /dev/null @@ -1,59 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_HASH_HELPERS -/** - @file hash_memory.c - Hash memory helper, Tom St Denis -*/ - -/** - Hash a block of memory and store the digest. - @param hash The index of the hash you wish to use - @param in The data you wish to hash - @param inlen The length of the data to hash (octets) - @param out [out] Where to store the digest - @param outlen [in/out] Max size and resulting size of the digest - @return CRYPT_OK if successful -*/ -int hash_memory(int hash, const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen) -{ - hash_state *md; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((err = hash_is_valid(hash)) != CRYPT_OK) { - return err; - } - - if (*outlen < hash_descriptor[hash].hashsize) { - *outlen = hash_descriptor[hash].hashsize; - return CRYPT_BUFFER_OVERFLOW; - } - - md = XMALLOC(sizeof(hash_state)); - if (md == NULL) { - return CRYPT_MEM; - } - - if ((err = hash_descriptor[hash].init(md)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[hash].process(md, in, inlen)) != CRYPT_OK) { - goto LBL_ERR; - } - err = hash_descriptor[hash].done(md, out); - *outlen = hash_descriptor[hash].hashsize; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(md, sizeof(hash_state)); -#endif - XFREE(md); - - return err; -} -#endif /* #ifdef LTC_HASH_HELPERS */ diff --git a/src/hashes/helper/hash_memory_multi.c b/src/hashes/helper/hash_memory_multi.c deleted file mode 100644 index 4c72efcc..00000000 --- a/src/hashes/helper/hash_memory_multi.c +++ /dev/null @@ -1,77 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_HASH_HELPERS -/** - @file hash_memory_multi.c - Hash (multiple buffers) memory helper, Tom St Denis -*/ - -/** - Hash multiple (non-adjacent) blocks of memory at once. - @param hash The index of the hash you wish to use - @param out [out] Where to store the digest - @param outlen [in/out] Max size and resulting size of the digest - @param in The data you wish to hash - @param inlen The length of the data to hash (octets) - @param ... tuples of (data,len) pairs to hash, terminated with a (NULL,x) (x=don't care) - @return CRYPT_OK if successful -*/ -int hash_memory_multi(int hash, unsigned char *out, unsigned long *outlen, - const unsigned char *in, unsigned long inlen, ...) -{ - hash_state *md; - int err; - va_list args; - const unsigned char *curptr; - unsigned long curlen; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((err = hash_is_valid(hash)) != CRYPT_OK) { - return err; - } - - if (*outlen < hash_descriptor[hash].hashsize) { - *outlen = hash_descriptor[hash].hashsize; - return CRYPT_BUFFER_OVERFLOW; - } - - md = XMALLOC(sizeof(hash_state)); - if (md == NULL) { - return CRYPT_MEM; - } - - if ((err = hash_descriptor[hash].init(md)) != CRYPT_OK) { - goto LBL_ERR; - } - - va_start(args, inlen); - curptr = in; - curlen = inlen; - for (;;) { - /* process buf */ - if ((err = hash_descriptor[hash].process(md, curptr, curlen)) != CRYPT_OK) { - goto LBL_ERR; - } - /* step to next */ - curptr = va_arg(args, const unsigned char*); - if (curptr == NULL) { - break; - } - curlen = va_arg(args, unsigned long); - } - err = hash_descriptor[hash].done(md, out); - *outlen = hash_descriptor[hash].hashsize; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(md, sizeof(hash_state)); -#endif - XFREE(md); - va_end(args); - return err; -} -#endif /* #ifdef LTC_HASH_HELPERS */ diff --git a/src/hashes/md4.c b/src/hashes/md4.c deleted file mode 100644 index 51f5329e..00000000 --- a/src/hashes/md4.c +++ /dev/null @@ -1,316 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @param md4.c - Submitted by Dobes Vandermeer (dobes@smartt.com) -*/ - -#ifdef LTC_MD4 - -const struct ltc_hash_descriptor md4_desc = -{ - "md4", - 6, - 16, - 64, - - /* OID */ - { 1, 2, 840, 113549, 2, 4, }, - 6, - - &md4_init, - &md4_process, - &md4_done, - &md4_test, - NULL -}; - -#define S11 3 -#define S12 7 -#define S13 11 -#define S14 19 -#define S21 3 -#define S22 5 -#define S23 9 -#define S24 13 -#define S31 3 -#define S32 9 -#define S33 11 -#define S34 15 - -/* F, G and H are basic LTC_MD4 functions. */ -#define F(x, y, z) (z ^ (x & (y ^ z))) -#define G(x, y, z) ((x & y) | (z & (x | y))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) - -/* ROTATE_LEFT rotates x left n bits. */ -#define ROTATE_LEFT(x, n) ROLc(x, n) - -/* FF, GG and HH are transformations for rounds 1, 2 and 3 */ -/* Rotation is separate from addition to prevent recomputation */ - -#define FF(a, b, c, d, x, s) { \ - (a) += F ((b), (c), (d)) + (x); \ - (a) = ROTATE_LEFT ((a), (s)); \ - } -#define GG(a, b, c, d, x, s) { \ - (a) += G ((b), (c), (d)) + (x) + 0x5a827999UL; \ - (a) = ROTATE_LEFT ((a), (s)); \ - } -#define HH(a, b, c, d, x, s) { \ - (a) += H ((b), (c), (d)) + (x) + 0x6ed9eba1UL; \ - (a) = ROTATE_LEFT ((a), (s)); \ - } - -#ifdef LTC_CLEAN_STACK -static int ss_md4_compress(hash_state *md, const unsigned char *buf) -#else -static int s_md4_compress(hash_state *md, const unsigned char *buf) -#endif -{ - ulong32 x[16], a, b, c, d; - int i; - - /* copy state */ - a = md->md4.state[0]; - b = md->md4.state[1]; - c = md->md4.state[2]; - d = md->md4.state[3]; - - /* copy the state into 512-bits into W[0..15] */ - for (i = 0; i < 16; i++) { - LOAD32L(x[i], buf + (4*i)); - } - - /* Round 1 */ - FF (a, b, c, d, x[ 0], S11); /* 1 */ - FF (d, a, b, c, x[ 1], S12); /* 2 */ - FF (c, d, a, b, x[ 2], S13); /* 3 */ - FF (b, c, d, a, x[ 3], S14); /* 4 */ - FF (a, b, c, d, x[ 4], S11); /* 5 */ - FF (d, a, b, c, x[ 5], S12); /* 6 */ - FF (c, d, a, b, x[ 6], S13); /* 7 */ - FF (b, c, d, a, x[ 7], S14); /* 8 */ - FF (a, b, c, d, x[ 8], S11); /* 9 */ - FF (d, a, b, c, x[ 9], S12); /* 10 */ - FF (c, d, a, b, x[10], S13); /* 11 */ - FF (b, c, d, a, x[11], S14); /* 12 */ - FF (a, b, c, d, x[12], S11); /* 13 */ - FF (d, a, b, c, x[13], S12); /* 14 */ - FF (c, d, a, b, x[14], S13); /* 15 */ - FF (b, c, d, a, x[15], S14); /* 16 */ - - /* Round 2 */ - GG (a, b, c, d, x[ 0], S21); /* 17 */ - GG (d, a, b, c, x[ 4], S22); /* 18 */ - GG (c, d, a, b, x[ 8], S23); /* 19 */ - GG (b, c, d, a, x[12], S24); /* 20 */ - GG (a, b, c, d, x[ 1], S21); /* 21 */ - GG (d, a, b, c, x[ 5], S22); /* 22 */ - GG (c, d, a, b, x[ 9], S23); /* 23 */ - GG (b, c, d, a, x[13], S24); /* 24 */ - GG (a, b, c, d, x[ 2], S21); /* 25 */ - GG (d, a, b, c, x[ 6], S22); /* 26 */ - GG (c, d, a, b, x[10], S23); /* 27 */ - GG (b, c, d, a, x[14], S24); /* 28 */ - GG (a, b, c, d, x[ 3], S21); /* 29 */ - GG (d, a, b, c, x[ 7], S22); /* 30 */ - GG (c, d, a, b, x[11], S23); /* 31 */ - GG (b, c, d, a, x[15], S24); /* 32 */ - - /* Round 3 */ - HH (a, b, c, d, x[ 0], S31); /* 33 */ - HH (d, a, b, c, x[ 8], S32); /* 34 */ - HH (c, d, a, b, x[ 4], S33); /* 35 */ - HH (b, c, d, a, x[12], S34); /* 36 */ - HH (a, b, c, d, x[ 2], S31); /* 37 */ - HH (d, a, b, c, x[10], S32); /* 38 */ - HH (c, d, a, b, x[ 6], S33); /* 39 */ - HH (b, c, d, a, x[14], S34); /* 40 */ - HH (a, b, c, d, x[ 1], S31); /* 41 */ - HH (d, a, b, c, x[ 9], S32); /* 42 */ - HH (c, d, a, b, x[ 5], S33); /* 43 */ - HH (b, c, d, a, x[13], S34); /* 44 */ - HH (a, b, c, d, x[ 3], S31); /* 45 */ - HH (d, a, b, c, x[11], S32); /* 46 */ - HH (c, d, a, b, x[ 7], S33); /* 47 */ - HH (b, c, d, a, x[15], S34); /* 48 */ - - - /* Update our state */ - md->md4.state[0] = md->md4.state[0] + a; - md->md4.state[1] = md->md4.state[1] + b; - md->md4.state[2] = md->md4.state[2] + c; - md->md4.state[3] = md->md4.state[3] + d; - - return CRYPT_OK; -} - -#ifdef LTC_CLEAN_STACK -static int s_md4_compress(hash_state *md, const unsigned char *buf) -{ - int err; - err = ss_md4_compress(md, buf); - burn_stack(sizeof(ulong32) * 20 + sizeof(int)); - return err; -} -#endif - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int md4_init(hash_state * md) -{ - LTC_ARGCHK(md != NULL); - md->md4.state[0] = 0x67452301UL; - md->md4.state[1] = 0xefcdab89UL; - md->md4.state[2] = 0x98badcfeUL; - md->md4.state[3] = 0x10325476UL; - md->md4.length = 0; - md->md4.curlen = 0; - return CRYPT_OK; -} - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(md4_process, s_md4_compress, md4, 64) - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (16 bytes) - @return CRYPT_OK if successful -*/ -int md4_done(hash_state * md, unsigned char *out) -{ - int i; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - if (md->md4.curlen >= sizeof(md->md4.buf)) { - return CRYPT_INVALID_ARG; - } - - /* increase the length of the message */ - md->md4.length += md->md4.curlen * 8; - - /* append the '1' bit */ - md->md4.buf[md->md4.curlen++] = (unsigned char)0x80; - - /* if the length is currently above 56 bytes we append zeros - * then compress. Then we can fall back to padding zeros and length - * encoding like normal. - */ - if (md->md4.curlen > 56) { - while (md->md4.curlen < 64) { - md->md4.buf[md->md4.curlen++] = (unsigned char)0; - } - s_md4_compress(md, md->md4.buf); - md->md4.curlen = 0; - } - - /* pad upto 56 bytes of zeroes */ - while (md->md4.curlen < 56) { - md->md4.buf[md->md4.curlen++] = (unsigned char)0; - } - - /* store length */ - STORE64L(md->md4.length, md->md4.buf+56); - s_md4_compress(md, md->md4.buf); - - /* copy output */ - for (i = 0; i < 4; i++) { - STORE32L(md->md4.state[i], out+(4*i)); - } -#ifdef LTC_CLEAN_STACK - zeromem(md, sizeof(hash_state)); -#endif - return CRYPT_OK; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int md4_test(void) -{ - #ifndef LTC_TEST - return CRYPT_NOP; - #else - static const struct md4_test_case { - const char *input; - unsigned char hash[16]; - } tests[] = { - { "", - {0x31, 0xd6, 0xcf, 0xe0, 0xd1, 0x6a, 0xe9, 0x31, - 0xb7, 0x3c, 0x59, 0xd7, 0xe0, 0xc0, 0x89, 0xc0} }, - { "a", - {0xbd, 0xe5, 0x2c, 0xb3, 0x1d, 0xe3, 0x3e, 0x46, - 0x24, 0x5e, 0x05, 0xfb, 0xdb, 0xd6, 0xfb, 0x24} }, - { "abc", - {0xa4, 0x48, 0x01, 0x7a, 0xaf, 0x21, 0xd8, 0x52, - 0x5f, 0xc1, 0x0a, 0xe8, 0x7a, 0xa6, 0x72, 0x9d} }, - { "message digest", - {0xd9, 0x13, 0x0a, 0x81, 0x64, 0x54, 0x9f, 0xe8, - 0x18, 0x87, 0x48, 0x06, 0xe1, 0xc7, 0x01, 0x4b} }, - { "abcdefghijklmnopqrstuvwxyz", - {0xd7, 0x9e, 0x1c, 0x30, 0x8a, 0xa5, 0xbb, 0xcd, - 0xee, 0xa8, 0xed, 0x63, 0xdf, 0x41, 0x2d, 0xa9} }, - { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", - {0x04, 0x3f, 0x85, 0x82, 0xf2, 0x41, 0xdb, 0x35, - 0x1c, 0xe6, 0x27, 0xe1, 0x53, 0xe7, 0xf0, 0xe4} }, - { "12345678901234567890123456789012345678901234567890123456789012345678901234567890", - {0xe3, 0x3b, 0x4d, 0xdc, 0x9c, 0x38, 0xf2, 0x19, - 0x9c, 0x3e, 0x7b, 0x16, 0x4f, 0xcc, 0x05, 0x36} }, - }; - - int i; - unsigned char tmp[16]; - hash_state md; - - for(i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { - md4_init(&md); - md4_process(&md, (unsigned char *)tests[i].input, (unsigned long)XSTRLEN(tests[i].input)); - md4_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "MD4", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - - } - return CRYPT_OK; - #endif -} - -#undef F -#undef G -#undef H -#undef FF -#undef GG -#undef HH -#undef S11 -#undef S12 -#undef S13 -#undef S14 -#undef S21 -#undef S22 -#undef S23 -#undef S24 -#undef S31 -#undef S32 -#undef S33 -#undef S34 -#undef ROTATE_LEFT - -#endif - - diff --git a/src/hashes/rmd256.c b/src/hashes/rmd256.c deleted file mode 100644 index e2601514..00000000 --- a/src/hashes/rmd256.c +++ /dev/null @@ -1,433 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @param rmd256.c - RLTC_MD256 Hash function -*/ - -#ifdef LTC_RIPEMD256 - -const struct ltc_hash_descriptor rmd256_desc = -{ - "rmd256", - 13, - 32, - 64, - - /* OID */ - { 1, 3, 36, 3, 2, 3 }, - 6, - - &rmd256_init, - &rmd256_process, - &rmd256_done, - &rmd256_test, - NULL -}; - -/* the four basic functions F(), G() and H() */ -#define F(x, y, z) ((x) ^ (y) ^ (z)) -#define G(x, y, z) (((x) & (y)) | (~(x) & (z))) -#define H(x, y, z) (((x) | ~(y)) ^ (z)) -#define I(x, y, z) (((x) & (z)) | ((y) & ~(z))) - -/* the eight basic operations FF() through III() */ -#define FF(a, b, c, d, x, s) \ - (a) += F((b), (c), (d)) + (x);\ - (a) = ROLc((a), (s)); - -#define GG(a, b, c, d, x, s) \ - (a) += G((b), (c), (d)) + (x) + 0x5a827999UL;\ - (a) = ROLc((a), (s)); - -#define HH(a, b, c, d, x, s) \ - (a) += H((b), (c), (d)) + (x) + 0x6ed9eba1UL;\ - (a) = ROLc((a), (s)); - -#define II(a, b, c, d, x, s) \ - (a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcUL;\ - (a) = ROLc((a), (s)); - -#define FFF(a, b, c, d, x, s) \ - (a) += F((b), (c), (d)) + (x);\ - (a) = ROLc((a), (s)); - -#define GGG(a, b, c, d, x, s) \ - (a) += G((b), (c), (d)) + (x) + 0x6d703ef3UL;\ - (a) = ROLc((a), (s)); - -#define HHH(a, b, c, d, x, s) \ - (a) += H((b), (c), (d)) + (x) + 0x5c4dd124UL;\ - (a) = ROLc((a), (s)); - -#define III(a, b, c, d, x, s) \ - (a) += I((b), (c), (d)) + (x) + 0x50a28be6UL;\ - (a) = ROLc((a), (s)); - -#ifdef LTC_CLEAN_STACK -static int ss_rmd256_compress(hash_state *md, const unsigned char *buf) -#else -static int s_rmd256_compress(hash_state *md, const unsigned char *buf) -#endif -{ - ulong32 aa,bb,cc,dd,aaa,bbb,ccc,ddd,tmp,X[16]; - int i; - - /* load words X */ - for (i = 0; i < 16; i++){ - LOAD32L(X[i], buf + (4 * i)); - } - - /* load state */ - aa = md->rmd256.state[0]; - bb = md->rmd256.state[1]; - cc = md->rmd256.state[2]; - dd = md->rmd256.state[3]; - aaa = md->rmd256.state[4]; - bbb = md->rmd256.state[5]; - ccc = md->rmd256.state[6]; - ddd = md->rmd256.state[7]; - - /* round 1 */ - FF(aa, bb, cc, dd, X[ 0], 11); - FF(dd, aa, bb, cc, X[ 1], 14); - FF(cc, dd, aa, bb, X[ 2], 15); - FF(bb, cc, dd, aa, X[ 3], 12); - FF(aa, bb, cc, dd, X[ 4], 5); - FF(dd, aa, bb, cc, X[ 5], 8); - FF(cc, dd, aa, bb, X[ 6], 7); - FF(bb, cc, dd, aa, X[ 7], 9); - FF(aa, bb, cc, dd, X[ 8], 11); - FF(dd, aa, bb, cc, X[ 9], 13); - FF(cc, dd, aa, bb, X[10], 14); - FF(bb, cc, dd, aa, X[11], 15); - FF(aa, bb, cc, dd, X[12], 6); - FF(dd, aa, bb, cc, X[13], 7); - FF(cc, dd, aa, bb, X[14], 9); - FF(bb, cc, dd, aa, X[15], 8); - - /* parallel round 1 */ - III(aaa, bbb, ccc, ddd, X[ 5], 8); - III(ddd, aaa, bbb, ccc, X[14], 9); - III(ccc, ddd, aaa, bbb, X[ 7], 9); - III(bbb, ccc, ddd, aaa, X[ 0], 11); - III(aaa, bbb, ccc, ddd, X[ 9], 13); - III(ddd, aaa, bbb, ccc, X[ 2], 15); - III(ccc, ddd, aaa, bbb, X[11], 15); - III(bbb, ccc, ddd, aaa, X[ 4], 5); - III(aaa, bbb, ccc, ddd, X[13], 7); - III(ddd, aaa, bbb, ccc, X[ 6], 7); - III(ccc, ddd, aaa, bbb, X[15], 8); - III(bbb, ccc, ddd, aaa, X[ 8], 11); - III(aaa, bbb, ccc, ddd, X[ 1], 14); - III(ddd, aaa, bbb, ccc, X[10], 14); - III(ccc, ddd, aaa, bbb, X[ 3], 12); - III(bbb, ccc, ddd, aaa, X[12], 6); - - tmp = aa; aa = aaa; aaa = tmp; - - /* round 2 */ - GG(aa, bb, cc, dd, X[ 7], 7); - GG(dd, aa, bb, cc, X[ 4], 6); - GG(cc, dd, aa, bb, X[13], 8); - GG(bb, cc, dd, aa, X[ 1], 13); - GG(aa, bb, cc, dd, X[10], 11); - GG(dd, aa, bb, cc, X[ 6], 9); - GG(cc, dd, aa, bb, X[15], 7); - GG(bb, cc, dd, aa, X[ 3], 15); - GG(aa, bb, cc, dd, X[12], 7); - GG(dd, aa, bb, cc, X[ 0], 12); - GG(cc, dd, aa, bb, X[ 9], 15); - GG(bb, cc, dd, aa, X[ 5], 9); - GG(aa, bb, cc, dd, X[ 2], 11); - GG(dd, aa, bb, cc, X[14], 7); - GG(cc, dd, aa, bb, X[11], 13); - GG(bb, cc, dd, aa, X[ 8], 12); - - /* parallel round 2 */ - HHH(aaa, bbb, ccc, ddd, X[ 6], 9); - HHH(ddd, aaa, bbb, ccc, X[11], 13); - HHH(ccc, ddd, aaa, bbb, X[ 3], 15); - HHH(bbb, ccc, ddd, aaa, X[ 7], 7); - HHH(aaa, bbb, ccc, ddd, X[ 0], 12); - HHH(ddd, aaa, bbb, ccc, X[13], 8); - HHH(ccc, ddd, aaa, bbb, X[ 5], 9); - HHH(bbb, ccc, ddd, aaa, X[10], 11); - HHH(aaa, bbb, ccc, ddd, X[14], 7); - HHH(ddd, aaa, bbb, ccc, X[15], 7); - HHH(ccc, ddd, aaa, bbb, X[ 8], 12); - HHH(bbb, ccc, ddd, aaa, X[12], 7); - HHH(aaa, bbb, ccc, ddd, X[ 4], 6); - HHH(ddd, aaa, bbb, ccc, X[ 9], 15); - HHH(ccc, ddd, aaa, bbb, X[ 1], 13); - HHH(bbb, ccc, ddd, aaa, X[ 2], 11); - - tmp = bb; bb = bbb; bbb = tmp; - - /* round 3 */ - HH(aa, bb, cc, dd, X[ 3], 11); - HH(dd, aa, bb, cc, X[10], 13); - HH(cc, dd, aa, bb, X[14], 6); - HH(bb, cc, dd, aa, X[ 4], 7); - HH(aa, bb, cc, dd, X[ 9], 14); - HH(dd, aa, bb, cc, X[15], 9); - HH(cc, dd, aa, bb, X[ 8], 13); - HH(bb, cc, dd, aa, X[ 1], 15); - HH(aa, bb, cc, dd, X[ 2], 14); - HH(dd, aa, bb, cc, X[ 7], 8); - HH(cc, dd, aa, bb, X[ 0], 13); - HH(bb, cc, dd, aa, X[ 6], 6); - HH(aa, bb, cc, dd, X[13], 5); - HH(dd, aa, bb, cc, X[11], 12); - HH(cc, dd, aa, bb, X[ 5], 7); - HH(bb, cc, dd, aa, X[12], 5); - - /* parallel round 3 */ - GGG(aaa, bbb, ccc, ddd, X[15], 9); - GGG(ddd, aaa, bbb, ccc, X[ 5], 7); - GGG(ccc, ddd, aaa, bbb, X[ 1], 15); - GGG(bbb, ccc, ddd, aaa, X[ 3], 11); - GGG(aaa, bbb, ccc, ddd, X[ 7], 8); - GGG(ddd, aaa, bbb, ccc, X[14], 6); - GGG(ccc, ddd, aaa, bbb, X[ 6], 6); - GGG(bbb, ccc, ddd, aaa, X[ 9], 14); - GGG(aaa, bbb, ccc, ddd, X[11], 12); - GGG(ddd, aaa, bbb, ccc, X[ 8], 13); - GGG(ccc, ddd, aaa, bbb, X[12], 5); - GGG(bbb, ccc, ddd, aaa, X[ 2], 14); - GGG(aaa, bbb, ccc, ddd, X[10], 13); - GGG(ddd, aaa, bbb, ccc, X[ 0], 13); - GGG(ccc, ddd, aaa, bbb, X[ 4], 7); - GGG(bbb, ccc, ddd, aaa, X[13], 5); - - tmp = cc; cc = ccc; ccc = tmp; - - /* round 4 */ - II(aa, bb, cc, dd, X[ 1], 11); - II(dd, aa, bb, cc, X[ 9], 12); - II(cc, dd, aa, bb, X[11], 14); - II(bb, cc, dd, aa, X[10], 15); - II(aa, bb, cc, dd, X[ 0], 14); - II(dd, aa, bb, cc, X[ 8], 15); - II(cc, dd, aa, bb, X[12], 9); - II(bb, cc, dd, aa, X[ 4], 8); - II(aa, bb, cc, dd, X[13], 9); - II(dd, aa, bb, cc, X[ 3], 14); - II(cc, dd, aa, bb, X[ 7], 5); - II(bb, cc, dd, aa, X[15], 6); - II(aa, bb, cc, dd, X[14], 8); - II(dd, aa, bb, cc, X[ 5], 6); - II(cc, dd, aa, bb, X[ 6], 5); - II(bb, cc, dd, aa, X[ 2], 12); - - /* parallel round 4 */ - FFF(aaa, bbb, ccc, ddd, X[ 8], 15); - FFF(ddd, aaa, bbb, ccc, X[ 6], 5); - FFF(ccc, ddd, aaa, bbb, X[ 4], 8); - FFF(bbb, ccc, ddd, aaa, X[ 1], 11); - FFF(aaa, bbb, ccc, ddd, X[ 3], 14); - FFF(ddd, aaa, bbb, ccc, X[11], 14); - FFF(ccc, ddd, aaa, bbb, X[15], 6); - FFF(bbb, ccc, ddd, aaa, X[ 0], 14); - FFF(aaa, bbb, ccc, ddd, X[ 5], 6); - FFF(ddd, aaa, bbb, ccc, X[12], 9); - FFF(ccc, ddd, aaa, bbb, X[ 2], 12); - FFF(bbb, ccc, ddd, aaa, X[13], 9); - FFF(aaa, bbb, ccc, ddd, X[ 9], 12); - FFF(ddd, aaa, bbb, ccc, X[ 7], 5); - FFF(ccc, ddd, aaa, bbb, X[10], 15); - FFF(bbb, ccc, ddd, aaa, X[14], 8); - - tmp = dd; dd = ddd; ddd = tmp; - - /* combine results */ - md->rmd256.state[0] += aa; - md->rmd256.state[1] += bb; - md->rmd256.state[2] += cc; - md->rmd256.state[3] += dd; - md->rmd256.state[4] += aaa; - md->rmd256.state[5] += bbb; - md->rmd256.state[6] += ccc; - md->rmd256.state[7] += ddd; - - return CRYPT_OK; -} - -#ifdef LTC_CLEAN_STACK -static int s_rmd256_compress(hash_state *md, const unsigned char *buf) -{ - int err; - err = ss_rmd256_compress(md, buf); - burn_stack(sizeof(ulong32) * 25 + sizeof(int)); - return err; -} -#endif - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int rmd256_init(hash_state * md) -{ - LTC_ARGCHK(md != NULL); - md->rmd256.state[0] = 0x67452301UL; - md->rmd256.state[1] = 0xefcdab89UL; - md->rmd256.state[2] = 0x98badcfeUL; - md->rmd256.state[3] = 0x10325476UL; - md->rmd256.state[4] = 0x76543210UL; - md->rmd256.state[5] = 0xfedcba98UL; - md->rmd256.state[6] = 0x89abcdefUL; - md->rmd256.state[7] = 0x01234567UL; - md->rmd256.curlen = 0; - md->rmd256.length = 0; - return CRYPT_OK; -} - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(rmd256_process, s_rmd256_compress, rmd256, 64) - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (16 bytes) - @return CRYPT_OK if successful -*/ -int rmd256_done(hash_state * md, unsigned char *out) -{ - int i; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - if (md->rmd256.curlen >= sizeof(md->rmd256.buf)) { - return CRYPT_INVALID_ARG; - } - - - /* increase the length of the message */ - md->rmd256.length += md->rmd256.curlen * 8; - - /* append the '1' bit */ - md->rmd256.buf[md->rmd256.curlen++] = (unsigned char)0x80; - - /* if the length is currently above 56 bytes we append zeros - * then compress. Then we can fall back to padding zeros and length - * encoding like normal. - */ - if (md->rmd256.curlen > 56) { - while (md->rmd256.curlen < 64) { - md->rmd256.buf[md->rmd256.curlen++] = (unsigned char)0; - } - s_rmd256_compress(md, md->rmd256.buf); - md->rmd256.curlen = 0; - } - - /* pad upto 56 bytes of zeroes */ - while (md->rmd256.curlen < 56) { - md->rmd256.buf[md->rmd256.curlen++] = (unsigned char)0; - } - - /* store length */ - STORE64L(md->rmd256.length, md->rmd256.buf+56); - s_rmd256_compress(md, md->rmd256.buf); - - /* copy output */ - for (i = 0; i < 8; i++) { - STORE32L(md->rmd256.state[i], out+(4*i)); - } -#ifdef LTC_CLEAN_STACK - zeromem(md, sizeof(hash_state)); -#endif - return CRYPT_OK; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int rmd256_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[32]; - } tests[] = { - { "", - { 0x02, 0xba, 0x4c, 0x4e, 0x5f, 0x8e, 0xcd, 0x18, - 0x77, 0xfc, 0x52, 0xd6, 0x4d, 0x30, 0xe3, 0x7a, - 0x2d, 0x97, 0x74, 0xfb, 0x1e, 0x5d, 0x02, 0x63, - 0x80, 0xae, 0x01, 0x68, 0xe3, 0xc5, 0x52, 0x2d } - }, - { "a", - { 0xf9, 0x33, 0x3e, 0x45, 0xd8, 0x57, 0xf5, 0xd9, - 0x0a, 0x91, 0xba, 0xb7, 0x0a, 0x1e, 0xba, 0x0c, - 0xfb, 0x1b, 0xe4, 0xb0, 0x78, 0x3c, 0x9a, 0xcf, - 0xcd, 0x88, 0x3a, 0x91, 0x34, 0x69, 0x29, 0x25 } - }, - { "abc", - { 0xaf, 0xbd, 0x6e, 0x22, 0x8b, 0x9d, 0x8c, 0xbb, - 0xce, 0xf5, 0xca, 0x2d, 0x03, 0xe6, 0xdb, 0xa1, - 0x0a, 0xc0, 0xbc, 0x7d, 0xcb, 0xe4, 0x68, 0x0e, - 0x1e, 0x42, 0xd2, 0xe9, 0x75, 0x45, 0x9b, 0x65 } - }, - { "message digest", - { 0x87, 0xe9, 0x71, 0x75, 0x9a, 0x1c, 0xe4, 0x7a, - 0x51, 0x4d, 0x5c, 0x91, 0x4c, 0x39, 0x2c, 0x90, - 0x18, 0xc7, 0xc4, 0x6b, 0xc1, 0x44, 0x65, 0x55, - 0x4a, 0xfc, 0xdf, 0x54, 0xa5, 0x07, 0x0c, 0x0e } - }, - { "abcdefghijklmnopqrstuvwxyz", - { 0x64, 0x9d, 0x30, 0x34, 0x75, 0x1e, 0xa2, 0x16, - 0x77, 0x6b, 0xf9, 0xa1, 0x8a, 0xcc, 0x81, 0xbc, - 0x78, 0x96, 0x11, 0x8a, 0x51, 0x97, 0x96, 0x87, - 0x82, 0xdd, 0x1f, 0xd9, 0x7d, 0x8d, 0x51, 0x33 } - }, - { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", - { 0x57, 0x40, 0xa4, 0x08, 0xac, 0x16, 0xb7, 0x20, - 0xb8, 0x44, 0x24, 0xae, 0x93, 0x1c, 0xbb, 0x1f, - 0xe3, 0x63, 0xd1, 0xd0, 0xbf, 0x40, 0x17, 0xf1, - 0xa8, 0x9f, 0x7e, 0xa6, 0xde, 0x77, 0xa0, 0xb8 } - } - }; - - int i; - unsigned char tmp[32]; - hash_state md; - - for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) { - rmd256_init(&md); - rmd256_process(&md, (unsigned char *)tests[i].msg, XSTRLEN(tests[i].msg)); - rmd256_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "RIPEMD256", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#undef F -#undef G -#undef H -#undef I -#undef FF -#undef GG -#undef HH -#undef II -#undef FFF -#undef GGG -#undef HHH -#undef III - -#endif diff --git a/src/hashes/rmd320.c b/src/hashes/rmd320.c deleted file mode 100644 index 9a93b590..00000000 --- a/src/hashes/rmd320.c +++ /dev/null @@ -1,501 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file rmd320.c - RMD320 hash function -*/ - -#ifdef LTC_RIPEMD320 - -const struct ltc_hash_descriptor rmd320_desc = -{ - "rmd320", - 14, - 40, - 64, - - /* OID ... does not exist - * http://oid-info.com/get/1.3.36.3.2 */ - { 0 }, - 0, - - &rmd320_init, - &rmd320_process, - &rmd320_done, - &rmd320_test, - NULL -}; - -/* the five basic functions F(), G() and H() */ -#define F(x, y, z) ((x) ^ (y) ^ (z)) -#define G(x, y, z) (((x) & (y)) | (~(x) & (z))) -#define H(x, y, z) (((x) | ~(y)) ^ (z)) -#define I(x, y, z) (((x) & (z)) | ((y) & ~(z))) -#define J(x, y, z) ((x) ^ ((y) | ~(z))) - -/* the ten basic operations FF() through III() */ -#define FF(a, b, c, d, e, x, s) \ - (a) += F((b), (c), (d)) + (x);\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); - -#define GG(a, b, c, d, e, x, s) \ - (a) += G((b), (c), (d)) + (x) + 0x5a827999UL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); - -#define HH(a, b, c, d, e, x, s) \ - (a) += H((b), (c), (d)) + (x) + 0x6ed9eba1UL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); - -#define II(a, b, c, d, e, x, s) \ - (a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcUL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); - -#define JJ(a, b, c, d, e, x, s) \ - (a) += J((b), (c), (d)) + (x) + 0xa953fd4eUL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); - -#define FFF(a, b, c, d, e, x, s) \ - (a) += F((b), (c), (d)) + (x);\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); - -#define GGG(a, b, c, d, e, x, s) \ - (a) += G((b), (c), (d)) + (x) + 0x7a6d76e9UL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); - -#define HHH(a, b, c, d, e, x, s) \ - (a) += H((b), (c), (d)) + (x) + 0x6d703ef3UL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); - -#define III(a, b, c, d, e, x, s) \ - (a) += I((b), (c), (d)) + (x) + 0x5c4dd124UL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); - -#define JJJ(a, b, c, d, e, x, s) \ - (a) += J((b), (c), (d)) + (x) + 0x50a28be6UL;\ - (a) = ROLc((a), (s)) + (e);\ - (c) = ROLc((c), 10); - - -#ifdef LTC_CLEAN_STACK -static int ss_rmd320_compress(hash_state *md, const unsigned char *buf) -#else -static int s_rmd320_compress(hash_state *md, const unsigned char *buf) -#endif -{ - ulong32 aa,bb,cc,dd,ee,aaa,bbb,ccc,ddd,eee,tmp,X[16]; - int i; - - /* load words X */ - for (i = 0; i < 16; i++){ - LOAD32L(X[i], buf + (4 * i)); - } - - /* load state */ - aa = md->rmd320.state[0]; - bb = md->rmd320.state[1]; - cc = md->rmd320.state[2]; - dd = md->rmd320.state[3]; - ee = md->rmd320.state[4]; - aaa = md->rmd320.state[5]; - bbb = md->rmd320.state[6]; - ccc = md->rmd320.state[7]; - ddd = md->rmd320.state[8]; - eee = md->rmd320.state[9]; - - /* round 1 */ - FF(aa, bb, cc, dd, ee, X[ 0], 11); - FF(ee, aa, bb, cc, dd, X[ 1], 14); - FF(dd, ee, aa, bb, cc, X[ 2], 15); - FF(cc, dd, ee, aa, bb, X[ 3], 12); - FF(bb, cc, dd, ee, aa, X[ 4], 5); - FF(aa, bb, cc, dd, ee, X[ 5], 8); - FF(ee, aa, bb, cc, dd, X[ 6], 7); - FF(dd, ee, aa, bb, cc, X[ 7], 9); - FF(cc, dd, ee, aa, bb, X[ 8], 11); - FF(bb, cc, dd, ee, aa, X[ 9], 13); - FF(aa, bb, cc, dd, ee, X[10], 14); - FF(ee, aa, bb, cc, dd, X[11], 15); - FF(dd, ee, aa, bb, cc, X[12], 6); - FF(cc, dd, ee, aa, bb, X[13], 7); - FF(bb, cc, dd, ee, aa, X[14], 9); - FF(aa, bb, cc, dd, ee, X[15], 8); - - /* parallel round 1 */ - JJJ(aaa, bbb, ccc, ddd, eee, X[ 5], 8); - JJJ(eee, aaa, bbb, ccc, ddd, X[14], 9); - JJJ(ddd, eee, aaa, bbb, ccc, X[ 7], 9); - JJJ(ccc, ddd, eee, aaa, bbb, X[ 0], 11); - JJJ(bbb, ccc, ddd, eee, aaa, X[ 9], 13); - JJJ(aaa, bbb, ccc, ddd, eee, X[ 2], 15); - JJJ(eee, aaa, bbb, ccc, ddd, X[11], 15); - JJJ(ddd, eee, aaa, bbb, ccc, X[ 4], 5); - JJJ(ccc, ddd, eee, aaa, bbb, X[13], 7); - JJJ(bbb, ccc, ddd, eee, aaa, X[ 6], 7); - JJJ(aaa, bbb, ccc, ddd, eee, X[15], 8); - JJJ(eee, aaa, bbb, ccc, ddd, X[ 8], 11); - JJJ(ddd, eee, aaa, bbb, ccc, X[ 1], 14); - JJJ(ccc, ddd, eee, aaa, bbb, X[10], 14); - JJJ(bbb, ccc, ddd, eee, aaa, X[ 3], 12); - JJJ(aaa, bbb, ccc, ddd, eee, X[12], 6); - - tmp = aa; aa = aaa; aaa = tmp; - - /* round 2 */ - GG(ee, aa, bb, cc, dd, X[ 7], 7); - GG(dd, ee, aa, bb, cc, X[ 4], 6); - GG(cc, dd, ee, aa, bb, X[13], 8); - GG(bb, cc, dd, ee, aa, X[ 1], 13); - GG(aa, bb, cc, dd, ee, X[10], 11); - GG(ee, aa, bb, cc, dd, X[ 6], 9); - GG(dd, ee, aa, bb, cc, X[15], 7); - GG(cc, dd, ee, aa, bb, X[ 3], 15); - GG(bb, cc, dd, ee, aa, X[12], 7); - GG(aa, bb, cc, dd, ee, X[ 0], 12); - GG(ee, aa, bb, cc, dd, X[ 9], 15); - GG(dd, ee, aa, bb, cc, X[ 5], 9); - GG(cc, dd, ee, aa, bb, X[ 2], 11); - GG(bb, cc, dd, ee, aa, X[14], 7); - GG(aa, bb, cc, dd, ee, X[11], 13); - GG(ee, aa, bb, cc, dd, X[ 8], 12); - - /* parallel round 2 */ - III(eee, aaa, bbb, ccc, ddd, X[ 6], 9); - III(ddd, eee, aaa, bbb, ccc, X[11], 13); - III(ccc, ddd, eee, aaa, bbb, X[ 3], 15); - III(bbb, ccc, ddd, eee, aaa, X[ 7], 7); - III(aaa, bbb, ccc, ddd, eee, X[ 0], 12); - III(eee, aaa, bbb, ccc, ddd, X[13], 8); - III(ddd, eee, aaa, bbb, ccc, X[ 5], 9); - III(ccc, ddd, eee, aaa, bbb, X[10], 11); - III(bbb, ccc, ddd, eee, aaa, X[14], 7); - III(aaa, bbb, ccc, ddd, eee, X[15], 7); - III(eee, aaa, bbb, ccc, ddd, X[ 8], 12); - III(ddd, eee, aaa, bbb, ccc, X[12], 7); - III(ccc, ddd, eee, aaa, bbb, X[ 4], 6); - III(bbb, ccc, ddd, eee, aaa, X[ 9], 15); - III(aaa, bbb, ccc, ddd, eee, X[ 1], 13); - III(eee, aaa, bbb, ccc, ddd, X[ 2], 11); - - tmp = bb; bb = bbb; bbb = tmp; - - /* round 3 */ - HH(dd, ee, aa, bb, cc, X[ 3], 11); - HH(cc, dd, ee, aa, bb, X[10], 13); - HH(bb, cc, dd, ee, aa, X[14], 6); - HH(aa, bb, cc, dd, ee, X[ 4], 7); - HH(ee, aa, bb, cc, dd, X[ 9], 14); - HH(dd, ee, aa, bb, cc, X[15], 9); - HH(cc, dd, ee, aa, bb, X[ 8], 13); - HH(bb, cc, dd, ee, aa, X[ 1], 15); - HH(aa, bb, cc, dd, ee, X[ 2], 14); - HH(ee, aa, bb, cc, dd, X[ 7], 8); - HH(dd, ee, aa, bb, cc, X[ 0], 13); - HH(cc, dd, ee, aa, bb, X[ 6], 6); - HH(bb, cc, dd, ee, aa, X[13], 5); - HH(aa, bb, cc, dd, ee, X[11], 12); - HH(ee, aa, bb, cc, dd, X[ 5], 7); - HH(dd, ee, aa, bb, cc, X[12], 5); - - /* parallel round 3 */ - HHH(ddd, eee, aaa, bbb, ccc, X[15], 9); - HHH(ccc, ddd, eee, aaa, bbb, X[ 5], 7); - HHH(bbb, ccc, ddd, eee, aaa, X[ 1], 15); - HHH(aaa, bbb, ccc, ddd, eee, X[ 3], 11); - HHH(eee, aaa, bbb, ccc, ddd, X[ 7], 8); - HHH(ddd, eee, aaa, bbb, ccc, X[14], 6); - HHH(ccc, ddd, eee, aaa, bbb, X[ 6], 6); - HHH(bbb, ccc, ddd, eee, aaa, X[ 9], 14); - HHH(aaa, bbb, ccc, ddd, eee, X[11], 12); - HHH(eee, aaa, bbb, ccc, ddd, X[ 8], 13); - HHH(ddd, eee, aaa, bbb, ccc, X[12], 5); - HHH(ccc, ddd, eee, aaa, bbb, X[ 2], 14); - HHH(bbb, ccc, ddd, eee, aaa, X[10], 13); - HHH(aaa, bbb, ccc, ddd, eee, X[ 0], 13); - HHH(eee, aaa, bbb, ccc, ddd, X[ 4], 7); - HHH(ddd, eee, aaa, bbb, ccc, X[13], 5); - - tmp = cc; cc = ccc; ccc = tmp; - - /* round 4 */ - II(cc, dd, ee, aa, bb, X[ 1], 11); - II(bb, cc, dd, ee, aa, X[ 9], 12); - II(aa, bb, cc, dd, ee, X[11], 14); - II(ee, aa, bb, cc, dd, X[10], 15); - II(dd, ee, aa, bb, cc, X[ 0], 14); - II(cc, dd, ee, aa, bb, X[ 8], 15); - II(bb, cc, dd, ee, aa, X[12], 9); - II(aa, bb, cc, dd, ee, X[ 4], 8); - II(ee, aa, bb, cc, dd, X[13], 9); - II(dd, ee, aa, bb, cc, X[ 3], 14); - II(cc, dd, ee, aa, bb, X[ 7], 5); - II(bb, cc, dd, ee, aa, X[15], 6); - II(aa, bb, cc, dd, ee, X[14], 8); - II(ee, aa, bb, cc, dd, X[ 5], 6); - II(dd, ee, aa, bb, cc, X[ 6], 5); - II(cc, dd, ee, aa, bb, X[ 2], 12); - - /* parallel round 4 */ - GGG(ccc, ddd, eee, aaa, bbb, X[ 8], 15); - GGG(bbb, ccc, ddd, eee, aaa, X[ 6], 5); - GGG(aaa, bbb, ccc, ddd, eee, X[ 4], 8); - GGG(eee, aaa, bbb, ccc, ddd, X[ 1], 11); - GGG(ddd, eee, aaa, bbb, ccc, X[ 3], 14); - GGG(ccc, ddd, eee, aaa, bbb, X[11], 14); - GGG(bbb, ccc, ddd, eee, aaa, X[15], 6); - GGG(aaa, bbb, ccc, ddd, eee, X[ 0], 14); - GGG(eee, aaa, bbb, ccc, ddd, X[ 5], 6); - GGG(ddd, eee, aaa, bbb, ccc, X[12], 9); - GGG(ccc, ddd, eee, aaa, bbb, X[ 2], 12); - GGG(bbb, ccc, ddd, eee, aaa, X[13], 9); - GGG(aaa, bbb, ccc, ddd, eee, X[ 9], 12); - GGG(eee, aaa, bbb, ccc, ddd, X[ 7], 5); - GGG(ddd, eee, aaa, bbb, ccc, X[10], 15); - GGG(ccc, ddd, eee, aaa, bbb, X[14], 8); - - tmp = dd; dd = ddd; ddd = tmp; - - /* round 5 */ - JJ(bb, cc, dd, ee, aa, X[ 4], 9); - JJ(aa, bb, cc, dd, ee, X[ 0], 15); - JJ(ee, aa, bb, cc, dd, X[ 5], 5); - JJ(dd, ee, aa, bb, cc, X[ 9], 11); - JJ(cc, dd, ee, aa, bb, X[ 7], 6); - JJ(bb, cc, dd, ee, aa, X[12], 8); - JJ(aa, bb, cc, dd, ee, X[ 2], 13); - JJ(ee, aa, bb, cc, dd, X[10], 12); - JJ(dd, ee, aa, bb, cc, X[14], 5); - JJ(cc, dd, ee, aa, bb, X[ 1], 12); - JJ(bb, cc, dd, ee, aa, X[ 3], 13); - JJ(aa, bb, cc, dd, ee, X[ 8], 14); - JJ(ee, aa, bb, cc, dd, X[11], 11); - JJ(dd, ee, aa, bb, cc, X[ 6], 8); - JJ(cc, dd, ee, aa, bb, X[15], 5); - JJ(bb, cc, dd, ee, aa, X[13], 6); - - /* parallel round 5 */ - FFF(bbb, ccc, ddd, eee, aaa, X[12] , 8); - FFF(aaa, bbb, ccc, ddd, eee, X[15] , 5); - FFF(eee, aaa, bbb, ccc, ddd, X[10] , 12); - FFF(ddd, eee, aaa, bbb, ccc, X[ 4] , 9); - FFF(ccc, ddd, eee, aaa, bbb, X[ 1] , 12); - FFF(bbb, ccc, ddd, eee, aaa, X[ 5] , 5); - FFF(aaa, bbb, ccc, ddd, eee, X[ 8] , 14); - FFF(eee, aaa, bbb, ccc, ddd, X[ 7] , 6); - FFF(ddd, eee, aaa, bbb, ccc, X[ 6] , 8); - FFF(ccc, ddd, eee, aaa, bbb, X[ 2] , 13); - FFF(bbb, ccc, ddd, eee, aaa, X[13] , 6); - FFF(aaa, bbb, ccc, ddd, eee, X[14] , 5); - FFF(eee, aaa, bbb, ccc, ddd, X[ 0] , 15); - FFF(ddd, eee, aaa, bbb, ccc, X[ 3] , 13); - FFF(ccc, ddd, eee, aaa, bbb, X[ 9] , 11); - FFF(bbb, ccc, ddd, eee, aaa, X[11] , 11); - - tmp = ee; ee = eee; eee = tmp; - - /* combine results */ - md->rmd320.state[0] += aa; - md->rmd320.state[1] += bb; - md->rmd320.state[2] += cc; - md->rmd320.state[3] += dd; - md->rmd320.state[4] += ee; - md->rmd320.state[5] += aaa; - md->rmd320.state[6] += bbb; - md->rmd320.state[7] += ccc; - md->rmd320.state[8] += ddd; - md->rmd320.state[9] += eee; - - return CRYPT_OK; -} - -#ifdef LTC_CLEAN_STACK -static int s_rmd320_compress(hash_state *md, const unsigned char *buf) -{ - int err; - err = ss_rmd320_compress(md, buf); - burn_stack(sizeof(ulong32) * 27 + sizeof(int)); - return err; -} -#endif - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int rmd320_init(hash_state * md) -{ - LTC_ARGCHK(md != NULL); - md->rmd320.state[0] = 0x67452301UL; - md->rmd320.state[1] = 0xefcdab89UL; - md->rmd320.state[2] = 0x98badcfeUL; - md->rmd320.state[3] = 0x10325476UL; - md->rmd320.state[4] = 0xc3d2e1f0UL; - md->rmd320.state[5] = 0x76543210UL; - md->rmd320.state[6] = 0xfedcba98UL; - md->rmd320.state[7] = 0x89abcdefUL; - md->rmd320.state[8] = 0x01234567UL; - md->rmd320.state[9] = 0x3c2d1e0fUL; - md->rmd320.curlen = 0; - md->rmd320.length = 0; - return CRYPT_OK; -} - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(rmd320_process, s_rmd320_compress, rmd320, 64) - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (20 bytes) - @return CRYPT_OK if successful -*/ -int rmd320_done(hash_state * md, unsigned char *out) -{ - int i; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - if (md->rmd320.curlen >= sizeof(md->rmd320.buf)) { - return CRYPT_INVALID_ARG; - } - - - /* increase the length of the message */ - md->rmd320.length += md->rmd320.curlen * 8; - - /* append the '1' bit */ - md->rmd320.buf[md->rmd320.curlen++] = (unsigned char)0x80; - - /* if the length is currently above 56 bytes we append zeros - * then compress. Then we can fall back to padding zeros and length - * encoding like normal. - */ - if (md->rmd320.curlen > 56) { - while (md->rmd320.curlen < 64) { - md->rmd320.buf[md->rmd320.curlen++] = (unsigned char)0; - } - s_rmd320_compress(md, md->rmd320.buf); - md->rmd320.curlen = 0; - } - - /* pad upto 56 bytes of zeroes */ - while (md->rmd320.curlen < 56) { - md->rmd320.buf[md->rmd320.curlen++] = (unsigned char)0; - } - - /* store length */ - STORE64L(md->rmd320.length, md->rmd320.buf+56); - s_rmd320_compress(md, md->rmd320.buf); - - /* copy output */ - for (i = 0; i < 10; i++) { - STORE32L(md->rmd320.state[i], out+(4*i)); - } -#ifdef LTC_CLEAN_STACK - zeromem(md, sizeof(hash_state)); -#endif - return CRYPT_OK; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int rmd320_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[40]; - } tests[] = { - { "", - { 0x22, 0xd6, 0x5d, 0x56, 0x61, 0x53, 0x6c, 0xdc, 0x75, 0xc1, - 0xfd, 0xf5, 0xc6, 0xde, 0x7b, 0x41, 0xb9, 0xf2, 0x73, 0x25, - 0xeb, 0xc6, 0x1e, 0x85, 0x57, 0x17, 0x7d, 0x70, 0x5a, 0x0e, - 0xc8, 0x80, 0x15, 0x1c, 0x3a, 0x32, 0xa0, 0x08, 0x99, 0xb8 } - }, - { "a", - { 0xce, 0x78, 0x85, 0x06, 0x38, 0xf9, 0x26, 0x58, 0xa5, 0xa5, - 0x85, 0x09, 0x75, 0x79, 0x92, 0x6d, 0xda, 0x66, 0x7a, 0x57, - 0x16, 0x56, 0x2c, 0xfc, 0xf6, 0xfb, 0xe7, 0x7f, 0x63, 0x54, - 0x2f, 0x99, 0xb0, 0x47, 0x05, 0xd6, 0x97, 0x0d, 0xff, 0x5d } - }, - { "abc", - { 0xde, 0x4c, 0x01, 0xb3, 0x05, 0x4f, 0x89, 0x30, 0xa7, 0x9d, - 0x09, 0xae, 0x73, 0x8e, 0x92, 0x30, 0x1e, 0x5a, 0x17, 0x08, - 0x5b, 0xef, 0xfd, 0xc1, 0xb8, 0xd1, 0x16, 0x71, 0x3e, 0x74, - 0xf8, 0x2f, 0xa9, 0x42, 0xd6, 0x4c, 0xdb, 0xc4, 0x68, 0x2d } - }, - { "message digest", - { 0x3a, 0x8e, 0x28, 0x50, 0x2e, 0xd4, 0x5d, 0x42, 0x2f, 0x68, - 0x84, 0x4f, 0x9d, 0xd3, 0x16, 0xe7, 0xb9, 0x85, 0x33, 0xfa, - 0x3f, 0x2a, 0x91, 0xd2, 0x9f, 0x84, 0xd4, 0x25, 0xc8, 0x8d, - 0x6b, 0x4e, 0xff, 0x72, 0x7d, 0xf6, 0x6a, 0x7c, 0x01, 0x97 } - }, - { "abcdefghijklmnopqrstuvwxyz", - { 0xca, 0xbd, 0xb1, 0x81, 0x0b, 0x92, 0x47, 0x0a, 0x20, 0x93, - 0xaa, 0x6b, 0xce, 0x05, 0x95, 0x2c, 0x28, 0x34, 0x8c, 0xf4, - 0x3f, 0xf6, 0x08, 0x41, 0x97, 0x51, 0x66, 0xbb, 0x40, 0xed, - 0x23, 0x40, 0x04, 0xb8, 0x82, 0x44, 0x63, 0xe6, 0xb0, 0x09 } - }, - { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - { 0xd0, 0x34, 0xa7, 0x95, 0x0c, 0xf7, 0x22, 0x02, 0x1b, 0xa4, - 0xb8, 0x4d, 0xf7, 0x69, 0xa5, 0xde, 0x20, 0x60, 0xe2, 0x59, - 0xdf, 0x4c, 0x9b, 0xb4, 0xa4, 0x26, 0x8c, 0x0e, 0x93, 0x5b, - 0xbc, 0x74, 0x70, 0xa9, 0x69, 0xc9, 0xd0, 0x72, 0xa1, 0xac } - } - }; - - int i; - unsigned char tmp[40]; - hash_state md; - - for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) { - rmd320_init(&md); - rmd320_process(&md, (unsigned char *)tests[i].msg, XSTRLEN(tests[i].msg)); - rmd320_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "RIPEMD320", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#undef F -#undef G -#undef H -#undef I -#undef J -#undef FF -#undef GG -#undef HH -#undef II -#undef JJ -#undef FFF -#undef GGG -#undef HHH -#undef III -#undef JJJ - -#endif diff --git a/src/hashes/sha1.c b/src/hashes/sha1.c deleted file mode 100644 index bfa86a6f..00000000 --- a/src/hashes/sha1.c +++ /dev/null @@ -1,265 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sha1.c - SHA1 code by Tom St Denis -*/ - - -#ifdef LTC_SHA1 - -/* While implementing the SMALL STACK option in https://github.com/libtom/libtomcrypt/pull/709 - * we came to the conclusion that SHA1 profits from the SMALL STACK option when the SMALL CODE - * option is enabled, so let's do that. - */ -#if defined(LTC_SMALL_STACK) || defined(LTC_SMALL_CODE) -#define LTC_SMALL_STACK_SHA1 -#endif - -const struct ltc_hash_descriptor sha1_portable_desc = -{ - "sha1", - 2, - 20, - 64, - - /* OID */ - { 1, 3, 14, 3, 2, 26, }, - 6, - - &sha1_c_init, - &sha1_c_process, - &sha1_c_done, - &sha1_c_test, - NULL -}; - -#define F0(x,y,z) (z ^ (x & (y ^ z))) -#define F1(x,y,z) (x ^ y ^ z) -#define F2(x,y,z) ((x & y) | (z & (x | y))) -#define F3(x,y,z) (x ^ y ^ z) - -#ifdef LTC_CLEAN_STACK -static int ss_sha1_c_compress(hash_state *md, const unsigned char *buf) -#else -static int s_sha1_c_compress(hash_state *md, const unsigned char *buf) -#endif -{ - ulong32 a,b,c,d,e,i; -#ifdef LTC_SMALL_STACK_SHA1 - ulong32 W[16]; -#else - ulong32 W[80]; -#endif -#ifdef LTC_SMALL_CODE - ulong32 t; -#endif - - /* copy the state into 512-bits into W[0..15] */ - for (i = 0; i < 16; i++) { - LOAD32H(W[i], buf + (4*i)); - } - - /* copy state */ - a = md->sha1.state[0]; - b = md->sha1.state[1]; - c = md->sha1.state[2]; - d = md->sha1.state[3]; - e = md->sha1.state[4]; - -#ifdef LTC_SMALL_STACK_SHA1 - #define Wi(i) do { W[(i) % 16] = ROL(W[((i) - 3) % 16] ^ W[((i) - 8) % 16] ^ W[((i) - 14) % 16] ^ W[((i) - 16) % 16], 1); } while(0) - #define Windex(i) ((i) % 16) -#else - #define Wi(i) do { } while(0) - #define Windex(i) (i) - /* expand it */ - for (i = 16; i < 80; i++) { - W[i] = ROL(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1); - } -#endif - - /* compress */ - /* round one */ - #define FF0(a,b,c,d,e,i) e = (ROLc(a, 5) + F0(b,c,d) + e + W[Windex(i)] + 0x5a827999UL); b = ROLc(b, 30); - #define FF1(a,b,c,d,e,i) e = (ROLc(a, 5) + F1(b,c,d) + e + W[Windex(i)] + 0x6ed9eba1UL); b = ROLc(b, 30); - #define FF2(a,b,c,d,e,i) e = (ROLc(a, 5) + F2(b,c,d) + e + W[Windex(i)] + 0x8f1bbcdcUL); b = ROLc(b, 30); - #define FF3(a,b,c,d,e,i) e = (ROLc(a, 5) + F3(b,c,d) + e + W[Windex(i)] + 0xca62c1d6UL); b = ROLc(b, 30); - -#ifdef LTC_SMALL_CODE - - for (i = 0; i < 16; ) { - FF0(a,b,c,d,e,i++); t = e; e = d; d = c; c = b; b = a; a = t; - } - for (; i < 20; ) { - Wi(i); FF0(a,b,c,d,e,i++); t = e; e = d; d = c; c = b; b = a; a = t; - } - - for (; i < 40; ) { - Wi(i); FF1(a,b,c,d,e,i++); t = e; e = d; d = c; c = b; b = a; a = t; - } - - for (; i < 60; ) { - Wi(i); FF2(a,b,c,d,e,i++); t = e; e = d; d = c; c = b; b = a; a = t; - } - - for (; i < 80; ) { - Wi(i); FF3(a,b,c,d,e,i++); t = e; e = d; d = c; c = b; b = a; a = t; - } - -#else - - for (i = 0; i < 15; ) { - FF0(a,b,c,d,e,i++); - FF0(e,a,b,c,d,i++); - FF0(d,e,a,b,c,i++); - FF0(c,d,e,a,b,i++); - FF0(b,c,d,e,a,i++); - } - FF0(a,b,c,d,e,i++); - Wi(i); FF0(e,a,b,c,d,i++); - Wi(i); FF0(d,e,a,b,c,i++); - Wi(i); FF0(c,d,e,a,b,i++); - Wi(i); FF0(b,c,d,e,a,i++); - - /* round two */ - for (; i < 40; ) { - Wi(i); FF1(a,b,c,d,e,i++); - Wi(i); FF1(e,a,b,c,d,i++); - Wi(i); FF1(d,e,a,b,c,i++); - Wi(i); FF1(c,d,e,a,b,i++); - Wi(i); FF1(b,c,d,e,a,i++); - } - - /* round three */ - for (; i < 60; ) { - Wi(i); FF2(a,b,c,d,e,i++); - Wi(i); FF2(e,a,b,c,d,i++); - Wi(i); FF2(d,e,a,b,c,i++); - Wi(i); FF2(c,d,e,a,b,i++); - Wi(i); FF2(b,c,d,e,a,i++); - } - - /* round four */ - for (; i < 80; ) { - Wi(i); FF3(a,b,c,d,e,i++); - Wi(i); FF3(e,a,b,c,d,i++); - Wi(i); FF3(d,e,a,b,c,i++); - Wi(i); FF3(c,d,e,a,b,i++); - Wi(i); FF3(b,c,d,e,a,i++); - } -#endif - - #undef FF0 - #undef FF1 - #undef FF2 - #undef FF3 - #undef Wi - #undef Windex - - /* store */ - md->sha1.state[0] = md->sha1.state[0] + a; - md->sha1.state[1] = md->sha1.state[1] + b; - md->sha1.state[2] = md->sha1.state[2] + c; - md->sha1.state[3] = md->sha1.state[3] + d; - md->sha1.state[4] = md->sha1.state[4] + e; - - return CRYPT_OK; -} - -#ifdef LTC_CLEAN_STACK -static int s_sha1_c_compress(hash_state *md, const unsigned char *buf) -{ - int err; - err = ss_sha1_c_compress(md, buf); - burn_stack(sizeof(ulong32) * 87); - return err; -} -#endif - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(sha1_c_process, s_sha1_c_compress, sha1, 64) - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (20 bytes) - @return CRYPT_OK if successful -*/ -int sha1_c_done(hash_state * md, unsigned char *out) -{ - int i; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - if (md->sha1.curlen >= sizeof(md->sha1.buf)) { - return CRYPT_INVALID_ARG; - } - - /* increase the length of the message */ - md->sha1.length += md->sha1.curlen * 8; - - /* append the '1' bit */ - md->sha1.buf[md->sha1.curlen++] = (unsigned char)0x80; - - /* if the length is currently above 56 bytes we append zeros - * then compress. Then we can fall back to padding zeros and length - * encoding like normal. - */ - if (md->sha1.curlen > 56) { - while (md->sha1.curlen < 64) { - md->sha1.buf[md->sha1.curlen++] = (unsigned char)0; - } - s_sha1_c_compress(md, md->sha1.buf); - md->sha1.curlen = 0; - } - - /* pad upto 56 bytes of zeroes */ - while (md->sha1.curlen < 56) { - md->sha1.buf[md->sha1.curlen++] = (unsigned char)0; - } - - /* store length */ - STORE64H(md->sha1.length, md->sha1.buf+56); - s_sha1_c_compress(md, md->sha1.buf); - - /* copy output */ - for (i = 0; i < 5; i++) { - STORE32H(md->sha1.state[i], out+(4*i)); - } -#ifdef LTC_CLEAN_STACK - zeromem(md, sizeof(hash_state)); -#endif - return CRYPT_OK; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha1_c_test(void) -{ - return sha1_test_desc(&sha1_portable_desc, "SHA1 portable"); -} - -#undef F0 -#undef F1 -#undef F2 -#undef F3 -#undef FF0 -#undef FF1 -#undef FF2 -#undef FF3 - -#endif - - diff --git a/src/hashes/sha1_desc.c b/src/hashes/sha1_desc.c deleted file mode 100644 index e027a1fa..00000000 --- a/src/hashes/sha1_desc.c +++ /dev/null @@ -1,185 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_SHA1 - -const struct ltc_hash_descriptor sha1_desc = -{ - "sha1", - 2, - 20, - 64, - - /* OID */ - { 1, 3, 14, 3, 2, 26, }, - 6, - - &sha1_init, - &sha1_process, - &sha1_done, - &sha1_test, - NULL -}; - -#if defined LTC_SHA1_X86 - -#if defined(_MSC_VER) -#include -#endif - -#if !defined (LTC_S_X86_CPUID) -#define LTC_S_X86_CPUID -static LTC_INLINE void s_x86_cpuid(int* regs, int leaf) -{ -#if defined _MSC_VER - __cpuid(regs, leaf); -#else - int a, b, c, d; - - a = leaf; - b = c = d = 0; - __asm__ volatile ("cpuid" - :"=a"(a), "=b"(b), "=c"(c), "=d"(d) - :"a"(a), "c"(c) - ); - regs[0] = a; - regs[1] = b; - regs[2] = c; - regs[3] = d; -#endif -} -#endif /* LTC_S_X86_CPUID */ - -static LTC_INLINE int s_sha1_x86_is_supported(void) -{ - static int initialized = 0; - static int is_supported = 0; - - if (initialized == 0) { - int regs[4]; - int sse2, ssse3, sse41, sha; - /* Leaf 0, Reg 0 contains the number of leafs available */ - s_x86_cpuid(regs, 0); - if(regs[0] >= 7) { - s_x86_cpuid(regs, 1); - sse2 = ((((unsigned int)(regs[3])) >> 26) & 1u) != 0; /* SSE2, leaf 1, edx, bit 26 */ - ssse3 = ((((unsigned int)(regs[2])) >> 9) & 1u) != 0; /* SSSE3, leaf 1, ecx, bit 9 */ - sse41 = ((((unsigned int)(regs[2])) >> 19) & 1u) != 0; /* SSE4.1, leaf 1, ecx, bit 19 */ - s_x86_cpuid(regs, 7); - sha = ((((unsigned int)(regs[1])) >> 29) & 1u) != 0; /* SHA, leaf 7, ebx, bit 29 */ - is_supported = sse2 && ssse3 && sse41 && sha; - } - initialized = 1; - } - return is_supported; -} -#endif /* LTC_SHA1_X86 */ - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int sha1_init(hash_state * md) -{ - LTC_ARGCHK(md != NULL); - - md->sha1.state[0] = 0x67452301UL; - md->sha1.state[1] = 0xefcdab89UL; - md->sha1.state[2] = 0x98badcfeUL; - md->sha1.state[3] = 0x10325476UL; - md->sha1.state[4] = 0xc3d2e1f0UL; - md->sha1.curlen = 0; - md->sha1.length = 0; - return CRYPT_OK; -} - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -int sha1_process(hash_state * md, const unsigned char *in, unsigned long inlen) -{ -#if defined LTC_SHA1_X86 - if(s_sha1_x86_is_supported()) { - return sha1_x86_process(md, in, inlen); - } -#endif - return sha1_c_process(md, in, inlen); -} - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (20 bytes) - @return CRYPT_OK if successful -*/ -int sha1_done(hash_state * md, unsigned char *out) -{ -#if defined LTC_SHA1_X86 - if(s_sha1_x86_is_supported()) { - return sha1_x86_done(md, out); - } -#endif - return sha1_c_done(md, out); -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha1_test(void) -{ - return sha1_test_desc(&sha1_desc, "SHA1"); -} - -int sha1_test_desc(const struct ltc_hash_descriptor *desc, const char *name) -{ -#ifndef LTC_TEST - LTC_UNUSED_PARAM(desc); - LTC_UNUSED_PARAM(name); - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[20]; - } tests[] = { - { "abc", - { 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, - 0xba, 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c, - 0x9c, 0xd0, 0xd8, 0x9d } - }, - { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, - 0xBA, 0xAE, 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, - 0xE5, 0x46, 0x70, 0xF1 } - } - }; - - int i; - unsigned char tmp[20]; - hash_state md; - - LTC_ARGCHK(desc != NULL); - LTC_ARGCHK(desc->init != NULL); - LTC_ARGCHK(desc->process != NULL); - LTC_ARGCHK(desc->done != NULL); - LTC_ARGCHK(name != NULL); - - for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { - desc->init(&md); - desc->process(&md, (unsigned char*)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - desc->done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), name, i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/hashes/sha1_x86.c b/src/hashes/sha1_x86.c deleted file mode 100644 index c65de5b3..00000000 --- a/src/hashes/sha1_x86.c +++ /dev/null @@ -1,267 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sha1_x86.c - SHA1 code by Marek Knapek -*/ - -#if defined(LTC_SHA1) && defined(LTC_SHA1_X86) - -#if defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wcast-align" -#pragma GCC diagnostic ignored "-Wdeclaration-after-statement" -#pragma GCC diagnostic ignored "-Wuninitialized" -#pragma GCC diagnostic ignored "-Wunused-function" -#endif -#if defined(_MSC_VER) -#include -#endif -#include /* SSE2 _mm_loadu_si128 _mm_storeu_si128 _mm_set_epi32 _mm_set_epi64x _mm_setzero_si128 _mm_xor_si128 _mm_add_epi32 _mm_shuffle_epi32 */ -#include /* SSSE3 _mm_shuffle_epi8 */ -#include /* SSE4.1 _mm_extract_epi32 */ -#include /* SHA _mm_sha1msg1_epu32 _mm_sha1msg2_epu32 _mm_sha1rnds4_epu32 _mm_sha1nexte_epu32 */ - -#if defined(__GNUC__) -#pragma GCC diagnostic pop -#endif - -const struct ltc_hash_descriptor sha1_x86_desc = -{ - "sha1", - 2, - 20, - 64, - - /* OID */ - { 1, 3, 14, 3, 2, 26, }, - 6, - - &sha1_x86_init, - &sha1_x86_process, - &sha1_x86_done, - &sha1_x86_test, - NULL -}; - -#ifdef LTC_CLEAN_STACK -static int LTC_SHA_TARGET ss_sha1_x86_compress(hash_state *md, const unsigned char *buf) -#else -static int LTC_SHA_TARGET s_sha1_x86_compress(hash_state *md, const unsigned char *buf) -#endif -{ -#define k_reverse_32 ((0x0 << (3 * 2)) | (0x1 << (2 * 2)) | (0x2 << (1 * 2)) | (0x3 << (0 * 2))) - - __m128i reverse_8; - __m128i abcdx; - __m128i e; - __m128i old_abcd; - __m128i old_e; - __m128i msg_0; - __m128i abcdy; - __m128i msg_1; - __m128i msg_2; - __m128i msg_3; - - reverse_8 = _mm_set_epi64x(0x0001020304050607ull, 0x08090a0b0c0d0e0full); - abcdx = _mm_loadu_si128(((__m128i const*)(&md->sha1.state[0]))); - abcdx = _mm_shuffle_epi32(abcdx, k_reverse_32); - e = _mm_set_epi32(*((int const*)(&md->sha1.state[4])), 0, 0, 0); - - old_abcd = abcdx; - old_e = e; - msg_0 = _mm_loadu_si128(((__m128i const*)(&buf[0 * 16]))); - msg_0 = _mm_shuffle_epi8(msg_0, reverse_8); - e = _mm_add_epi32(e, msg_0); - abcdy = _mm_sha1rnds4_epu32(abcdx, e, 0); - msg_1 = _mm_loadu_si128(((__m128i const*)(&buf[1 * 16]))); - msg_1 = _mm_shuffle_epi8(msg_1, reverse_8); - e = _mm_sha1nexte_epu32(abcdx, msg_1); - abcdx = _mm_sha1rnds4_epu32(abcdy, e, 0); - msg_2 = _mm_loadu_si128(((__m128i const*)(&buf[2 * 16]))); - msg_2 = _mm_shuffle_epi8(msg_2, reverse_8); - e = _mm_sha1nexte_epu32(abcdy, msg_2); - abcdy = _mm_sha1rnds4_epu32(abcdx, e, 0); - msg_3 = _mm_loadu_si128(((__m128i const*)(&buf[3 * 16]))); - msg_3 = _mm_shuffle_epi8(msg_3, reverse_8); - e = _mm_sha1nexte_epu32(abcdx, msg_3); - abcdx = _mm_sha1rnds4_epu32(abcdy, e, 0); - msg_0 = _mm_sha1msg1_epu32(msg_0, msg_1); - msg_0 = _mm_xor_si128(msg_0, msg_2); - msg_0 = _mm_sha1msg2_epu32(msg_0, msg_3); - e = _mm_sha1nexte_epu32(abcdy, msg_0); - abcdy = _mm_sha1rnds4_epu32(abcdx, e, 0); - msg_1 = _mm_sha1msg1_epu32(msg_1, msg_2); - msg_1 = _mm_xor_si128(msg_1, msg_3); - msg_1 = _mm_sha1msg2_epu32(msg_1, msg_0); - e = _mm_sha1nexte_epu32(abcdx, msg_1); - abcdx = _mm_sha1rnds4_epu32(abcdy, e, 1); - msg_2 = _mm_sha1msg1_epu32(msg_2, msg_3); - msg_2 = _mm_xor_si128(msg_2, msg_0); - msg_2 = _mm_sha1msg2_epu32(msg_2, msg_1); - e = _mm_sha1nexte_epu32(abcdy, msg_2); - abcdy = _mm_sha1rnds4_epu32(abcdx, e, 1); - msg_3 = _mm_sha1msg1_epu32(msg_3, msg_0); - msg_3 = _mm_xor_si128(msg_3, msg_1); - msg_3 = _mm_sha1msg2_epu32(msg_3, msg_2); - e = _mm_sha1nexte_epu32(abcdx, msg_3); - abcdx = _mm_sha1rnds4_epu32(abcdy, e, 1); - msg_0 = _mm_sha1msg1_epu32(msg_0, msg_1); - msg_0 = _mm_xor_si128(msg_0, msg_2); - msg_0 = _mm_sha1msg2_epu32(msg_0, msg_3); - e = _mm_sha1nexte_epu32(abcdy, msg_0); - abcdy = _mm_sha1rnds4_epu32(abcdx, e, 1); - msg_1 = _mm_sha1msg1_epu32(msg_1, msg_2); - msg_1 = _mm_xor_si128(msg_1, msg_3); - msg_1 = _mm_sha1msg2_epu32(msg_1, msg_0); - e = _mm_sha1nexte_epu32(abcdx, msg_1); - abcdx = _mm_sha1rnds4_epu32(abcdy, e, 1); - msg_2 = _mm_sha1msg1_epu32(msg_2, msg_3); - msg_2 = _mm_xor_si128(msg_2, msg_0); - msg_2 = _mm_sha1msg2_epu32(msg_2, msg_1); - e = _mm_sha1nexte_epu32(abcdy, msg_2); - abcdy = _mm_sha1rnds4_epu32(abcdx, e, 2); - msg_3 = _mm_sha1msg1_epu32(msg_3, msg_0); - msg_3 = _mm_xor_si128(msg_3, msg_1); - msg_3 = _mm_sha1msg2_epu32(msg_3, msg_2); - e = _mm_sha1nexte_epu32(abcdx, msg_3); - abcdx = _mm_sha1rnds4_epu32(abcdy, e, 2); - msg_0 = _mm_sha1msg1_epu32(msg_0, msg_1); - msg_0 = _mm_xor_si128(msg_0, msg_2); - msg_0 = _mm_sha1msg2_epu32(msg_0, msg_3); - e = _mm_sha1nexte_epu32(abcdy, msg_0); - abcdy = _mm_sha1rnds4_epu32(abcdx, e, 2); - msg_1 = _mm_sha1msg1_epu32(msg_1, msg_2); - msg_1 = _mm_xor_si128(msg_1, msg_3); - msg_1 = _mm_sha1msg2_epu32(msg_1, msg_0); - e = _mm_sha1nexte_epu32(abcdx, msg_1); - abcdx = _mm_sha1rnds4_epu32(abcdy, e, 2); - msg_2 = _mm_sha1msg1_epu32(msg_2, msg_3); - msg_2 = _mm_xor_si128(msg_2, msg_0); - msg_2 = _mm_sha1msg2_epu32(msg_2, msg_1); - e = _mm_sha1nexte_epu32(abcdy, msg_2); - abcdy = _mm_sha1rnds4_epu32(abcdx, e, 2); - msg_3 = _mm_sha1msg1_epu32(msg_3, msg_0); - msg_3 = _mm_xor_si128(msg_3, msg_1); - msg_3 = _mm_sha1msg2_epu32(msg_3, msg_2); - e = _mm_sha1nexte_epu32(abcdx, msg_3); - abcdx = _mm_sha1rnds4_epu32(abcdy, e, 3); - msg_0 = _mm_sha1msg1_epu32(msg_0, msg_1); - msg_0 = _mm_xor_si128(msg_0, msg_2); - msg_0 = _mm_sha1msg2_epu32(msg_0, msg_3); - e = _mm_sha1nexte_epu32(abcdy, msg_0); - abcdy = _mm_sha1rnds4_epu32(abcdx, e, 3); - msg_1 = _mm_sha1msg1_epu32(msg_1, msg_2); - msg_1 = _mm_xor_si128(msg_1, msg_3); - msg_1 = _mm_sha1msg2_epu32(msg_1, msg_0); - e = _mm_sha1nexte_epu32(abcdx, msg_1); - abcdx = _mm_sha1rnds4_epu32(abcdy, e, 3); - msg_2 = _mm_sha1msg1_epu32(msg_2, msg_3); - msg_2 = _mm_xor_si128(msg_2, msg_0); - msg_2 = _mm_sha1msg2_epu32(msg_2, msg_1); - e = _mm_sha1nexte_epu32(abcdy, msg_2); - abcdy = _mm_sha1rnds4_epu32(abcdx, e, 3); - msg_3 = _mm_sha1msg1_epu32(msg_3, msg_0); - msg_3 = _mm_xor_si128(msg_3, msg_1); - msg_3 = _mm_sha1msg2_epu32(msg_3, msg_2); - e = _mm_sha1nexte_epu32(abcdx, msg_3); - abcdx = _mm_sha1rnds4_epu32(abcdy, e, 3); - msg_0 = _mm_setzero_si128(); - e = _mm_sha1nexte_epu32(abcdy, msg_0); - abcdx = _mm_add_epi32(abcdx, old_abcd); - e = _mm_add_epi32(e, old_e); - - abcdx = _mm_shuffle_epi32(abcdx, k_reverse_32); - _mm_storeu_si128(((__m128i*)(&md->sha1.state[0])), abcdx); - *((int*)(&md->sha1.state[4])) = _mm_extract_epi32(e, 3); - - return CRYPT_OK; - -#undef k_reverse_32 -} - -#ifdef LTC_CLEAN_STACK -static int s_sha1_x86_compress(hash_state *md, const unsigned char *buf) -{ - int err; - err = ss_sha1_x86_compress(md, buf); - burn_stack(sizeof(ulong32) * 87); - return err; -} -#endif - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(sha1_x86_process, s_sha1_x86_compress, sha1, 64) - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (20 bytes) - @return CRYPT_OK if successful -*/ -int sha1_x86_done(hash_state * md, unsigned char *out) -{ - int i; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - if (md->sha1.curlen >= ((int)(sizeof(md->sha1.buf)))) { - return CRYPT_INVALID_ARG; - } - - /* increase the length of the message */ - md->sha1.length += md->sha1.curlen * 8; - - /* append the '1' bit */ - md->sha1.buf[md->sha1.curlen++] = (unsigned char)0x80; - - /* if the length is currently above 56 bytes we append zeros - * then compress. Then we can fall back to padding zeros and length - * encoding like normal. - */ - if (md->sha1.curlen > 56) { - while (md->sha1.curlen < 64) { - md->sha1.buf[md->sha1.curlen++] = (unsigned char)0; - } - s_sha1_x86_compress(md, md->sha1.buf); - md->sha1.curlen = 0; - } - - /* pad upto 56 bytes of zeroes */ - while (md->sha1.curlen < 56) { - md->sha1.buf[md->sha1.curlen++] = (unsigned char)0; - } - - /* store length */ - STORE64H(md->sha1.length, md->sha1.buf+56); - s_sha1_x86_compress(md, md->sha1.buf); - - /* copy output */ - for (i = 0; i < 5; i++) { - STORE32H(md->sha1.state[i], out+(4*i)); - } -#ifdef LTC_CLEAN_STACK - zeromem(md, sizeof(hash_state)); -#endif - return CRYPT_OK; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha1_x86_test(void) -{ - return sha1_test_desc(&sha1_x86_desc, "SHA1 x86"); -} - -#endif diff --git a/src/hashes/sha2/sha224.c b/src/hashes/sha2/sha224.c deleted file mode 100644 index 69ccf90b..00000000 --- a/src/hashes/sha2/sha224.c +++ /dev/null @@ -1,62 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/** - @param sha224.c - LTC_SHA-224 new NIST standard based off of LTC_SHA-256 truncated to 224 bits (Tom St Denis) -*/ - -#include "tomcrypt_private.h" - -#if defined(LTC_SHA224) && defined(LTC_SHA256) - -const struct ltc_hash_descriptor sha224_portable_desc = -{ - "sha224", - 10, - 28, - 64, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 4, }, - 9, - - &sha224_init, - &sha224_c_process, - &sha224_c_done, - &sha224_c_test, - NULL -}; - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (28 bytes) - @return CRYPT_OK if successful -*/ -int sha224_c_done(hash_state * md, unsigned char *out) -{ - unsigned char buf[32]; - int err; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - err = sha256_c_done(md, buf); - XMEMCPY(out, buf, 28); -#ifdef LTC_CLEAN_STACK - zeromem(buf, sizeof(buf)); -#endif - return err; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha224_c_test(void) -{ - return sha224_test_desc(&sha224_portable_desc, "SHA224 portable"); -} - -#endif /* defined(LTC_SHA224) && defined(LTC_SHA256) */ - diff --git a/src/hashes/sha2/sha224_desc.c b/src/hashes/sha2/sha224_desc.c deleted file mode 100644 index 02513c81..00000000 --- a/src/hashes/sha2/sha224_desc.c +++ /dev/null @@ -1,180 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/** - @param sha224.c - LTC_SHA-224 new NIST standard based off of LTC_SHA-256 truncated to 224 bits (Tom St Denis) -*/ - -#include "tomcrypt_private.h" - -#if defined(LTC_SHA224) && defined(LTC_SHA256) - -const struct ltc_hash_descriptor sha224_desc = -{ - "sha224", - 10, - 28, - 64, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 4, }, - 9, - - &sha224_init, - &sha256_process, - &sha224_done, - &sha224_test, - NULL -}; - -#if defined LTC_SHA224_X86 - -#if defined(_MSC_VER) -#include -#endif - -#if !defined (LTC_S_X86_CPUID) -#define LTC_S_X86_CPUID -static LTC_INLINE void s_x86_cpuid(int* regs, int leaf) -{ -#if defined _MSC_VER - __cpuid(regs, leaf); -#else - int a, b, c, d; - - a = leaf; - b = c = d = 0; - __asm__ volatile ("cpuid" - :"=a"(a), "=b"(b), "=c"(c), "=d"(d) - :"a"(a), "c"(c) - ); - regs[0] = a; - regs[1] = b; - regs[2] = c; - regs[3] = d; -#endif -} -#endif /* LTC_S_X86_CPUID */ - -static LTC_INLINE int s_sha224_x86_is_supported(void) -{ - static int initialized = 0; - static int is_supported = 0; - - if (initialized == 0) { - int regs[4]; - int sse2, ssse3, sse41, sha; - /* Leaf 0, Reg 0 contains the number of leafs available */ - s_x86_cpuid(regs, 0); - if(regs[0] >= 7) { - s_x86_cpuid(regs, 1); - sse2 = ((((unsigned int)(regs[3])) >> 26) & 1u) != 0; /* SSE2, leaf 1, edx, bit 26 */ - ssse3 = ((((unsigned int)(regs[2])) >> 9) & 1u) != 0; /* SSSE3, leaf 1, ecx, bit 9 */ - sse41 = ((((unsigned int)(regs[2])) >> 19) & 1u) != 0; /* SSE4.1, leaf 1, ecx, bit 19 */ - s_x86_cpuid(regs, 7); - sha = ((((unsigned int)(regs[1])) >> 29) & 1u) != 0; /* SHA, leaf 7, ebx, bit 29 */ - is_supported = sse2 && ssse3 && sse41 && sha; - } - initialized = 1; - } - return is_supported; -} -#endif /* LTC_SHA224_X86 */ - -/* init the sha256 er... sha224 state ;-) */ -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int sha224_init(hash_state * md) -{ - LTC_ARGCHK(md != NULL); - - md->sha256.curlen = 0; - md->sha256.length = 0; - md->sha256.state[0] = 0xc1059ed8UL; - md->sha256.state[1] = 0x367cd507UL; - md->sha256.state[2] = 0x3070dd17UL; - md->sha256.state[3] = 0xf70e5939UL; - md->sha256.state[4] = 0xffc00b31UL; - md->sha256.state[5] = 0x68581511UL; - md->sha256.state[6] = 0x64f98fa7UL; - md->sha256.state[7] = 0xbefa4fa4UL; - return CRYPT_OK; -} - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (28 bytes) - @return CRYPT_OK if successful -*/ -int sha224_done(hash_state * md, unsigned char *out) -{ -#if defined LTC_SHA224_X86 - if(s_sha224_x86_is_supported()) { - return sha224_x86_done(md, out); - } -#endif - return sha224_c_done(md, out); -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha224_test(void) -{ - return sha224_test_desc(&sha224_desc, "SHA224"); -} - -int sha224_test_desc(const struct ltc_hash_descriptor *desc, const char *name) -{ - #ifndef LTC_TEST - (void)desc; - (void)name; - return CRYPT_NOP; - #else - static const struct { - const char *msg; - unsigned char hash[28]; - } tests[] = { - { "abc", - { 0x23, 0x09, 0x7d, 0x22, 0x34, 0x05, 0xd8, - 0x22, 0x86, 0x42, 0xa4, 0x77, 0xbd, 0xa2, - 0x55, 0xb3, 0x2a, 0xad, 0xbc, 0xe4, 0xbd, - 0xa0, 0xb3, 0xf7, 0xe3, 0x6c, 0x9d, 0xa7 } - }, - { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - { 0x75, 0x38, 0x8b, 0x16, 0x51, 0x27, 0x76, - 0xcc, 0x5d, 0xba, 0x5d, 0xa1, 0xfd, 0x89, - 0x01, 0x50, 0xb0, 0xc6, 0x45, 0x5c, 0xb4, - 0xf5, 0x8b, 0x19, 0x52, 0x52, 0x25, 0x25 } - }, - }; - - int i; - unsigned char tmp[32]; - hash_state md; - - LTC_ARGCHK(desc != NULL); - LTC_ARGCHK(desc->init != NULL); - LTC_ARGCHK(desc->process != NULL); - LTC_ARGCHK(desc->done != NULL); - LTC_ARGCHK(name != NULL); - - for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { - desc->init(&md); - desc->process(&md, (unsigned char*)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - desc->done(&md, tmp); - if (ltc_compare_testvector(tmp, 28, tests[i].hash, sizeof(tests[i].hash), name, i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#endif /* defined(LTC_SHA224) && defined(LTC_SHA256) */ - diff --git a/src/hashes/sha2/sha224_x86.c b/src/hashes/sha2/sha224_x86.c deleted file mode 100644 index 980ae80d..00000000 --- a/src/hashes/sha2/sha224_x86.c +++ /dev/null @@ -1,62 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/** - @param sha224.c - LTC_SHA-224 new NIST standard based off of LTC_SHA-256 truncated to 224 bits (Tom St Denis) -*/ - -#include "tomcrypt_private.h" - -#if defined(LTC_SHA224) && defined(LTC_SHA256) && defined(LTC_SHA224_X86) && defined(LTC_SHA256_X86) - -const struct ltc_hash_descriptor sha224_x86_desc = -{ - "sha224", - 10, - 28, - 64, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 4, }, - 9, - - &sha224_init, - &sha224_x86_process, - &sha224_x86_done, - &sha224_x86_test, - NULL -}; - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (28 bytes) - @return CRYPT_OK if successful -*/ -int sha224_x86_done(hash_state * md, unsigned char *out) -{ - unsigned char buf[32]; - int err; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - err = sha256_x86_done(md, buf); - XMEMCPY(out, buf, 28); -#ifdef LTC_CLEAN_STACK - zeromem(buf, sizeof(buf)); -#endif - return err; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha224_x86_test(void) -{ - return sha224_test_desc(&sha224_x86_desc, "SHA224 x86"); -} - -#endif /* defined(LTC_SHA224) && defined(LTC_SHA256) */ - diff --git a/src/hashes/sha2/sha256.c b/src/hashes/sha2/sha256.c deleted file mode 100644 index acc0a18e..00000000 --- a/src/hashes/sha2/sha256.c +++ /dev/null @@ -1,313 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sha256.c - SHA256 by Tom St Denis -*/ - -#ifdef LTC_SHA256 - -const struct ltc_hash_descriptor sha256_portable_desc = -{ - "sha256", - 0, - 32, - 64, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 1, }, - 9, - - &sha256_init, - &sha256_c_process, - &sha256_c_done, - &sha256_c_test, - NULL -}; - -/* While implementing the SMALL STACK option in https://github.com/libtom/libtomcrypt/pull/709 - * we came to the conclusion that SHA256 profits from the SMALL STACK option when the SMALL CODE - * option is disabled. - * So enable it either when it's enabled explicitly, or when SMALL CODE is disabled. - */ -#if !defined(LTC_SMALL_CODE) || defined(LTC_SMALL_STACK) -#define LTC_SMALL_STACK_SHA256 -#endif - -#ifdef LTC_SMALL_CODE -/* the K array */ -static const ulong32 K[64] = { - 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL, - 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL, - 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, - 0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, - 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL, - 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL, - 0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, - 0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, - 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL, - 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL, - 0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, - 0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, - 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL -}; -#endif - -/* Various logical functions */ -#define Ch(x,y,z) (z ^ (x & (y ^ z))) -#define Maj(x,y,z) (((x | y) & z) | (x & y)) -#define S(x, n) RORc((x),(n)) -#define R(x, n) (((x)&0xFFFFFFFFUL)>>(n)) -#define Sigma0(x) (S(x, 2) ^ S(x, 13) ^ S(x, 22)) -#define Sigma1(x) (S(x, 6) ^ S(x, 11) ^ S(x, 25)) -#define Gamma0(x) (S(x, 7) ^ S(x, 18) ^ R(x, 3)) -#define Gamma1(x) (S(x, 17) ^ S(x, 19) ^ R(x, 10)) - -/* compress 512-bits */ -#ifdef LTC_CLEAN_STACK -static int ss_sha256_compress(hash_state * md, const unsigned char *buf) -#else -static int s_sha256_compress(hash_state * md, const unsigned char *buf) -#endif -{ - ulong32 S[8], t0, t1; -#ifdef LTC_SMALL_STACK_SHA256 - ulong32 W[16]; -#else - ulong32 W[64]; -#endif -#ifdef LTC_SMALL_CODE - ulong32 t; -#endif - int i; - - /* copy state into S */ - for (i = 0; i < 8; i++) { - S[i] = md->sha256.state[i]; - } - - /* copy the state into 512-bits into W[0..15] */ - for (i = 0; i < 16; i++) { - LOAD32H(W[i], buf + (4*i)); - } - -#ifdef LTC_SMALL_STACK_SHA256 - #define Wi(i) W[(i) % 16] = Gamma1(W[((i) - 2) % 16]) + W[((i) - 7) % 16] + Gamma0(W[((i) - 15) % 16]) + W[((i) - 16) % 16] - #define Windex(i) ((i) % 16) -#else - #define Wi(i) do { } while(0) - #define Windex(i) (i) - - /* fill W[16..63] */ - for (i = 16; i < 64; i++) { - W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16]; - } -#endif - - /* Compress */ -#ifdef LTC_SMALL_CODE -#define RND(a,b,c,d,e,f,g,h,i) \ - t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[Windex(i)]; \ - t1 = Sigma0(a) + Maj(a, b, c); \ - d += t0; \ - h = t0 + t1; - -#ifdef LTC_SMALL_STACK_SHA256 - for (i = 0; i < 16; ++i) { - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],i); - t = S[7]; S[7] = S[6]; S[6] = S[5]; S[5] = S[4]; - S[4] = S[3]; S[3] = S[2]; S[2] = S[1]; S[1] = S[0]; S[0] = t; - } - for (; i < 64; ++i) { - Wi(i); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],i); - t = S[7]; S[7] = S[6]; S[6] = S[5]; S[5] = S[4]; - S[4] = S[3]; S[3] = S[2]; S[2] = S[1]; S[1] = S[0]; S[0] = t; - } -#else - for (i = 0; i < 64; ++i) { - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],i); - t = S[7]; S[7] = S[6]; S[6] = S[5]; S[5] = S[4]; - S[4] = S[3]; S[3] = S[2]; S[2] = S[1]; S[1] = S[0]; S[0] = t; - } -#endif /* LTC_SMALL_STACK_SHA256 */ -#else -#define RND(a,b,c,d,e,f,g,h,i,ki) \ - t0 = h + Sigma1(e) + Ch(e, f, g) + ki + W[Windex(i)]; \ - t1 = Sigma0(a) + Maj(a, b, c); \ - d += t0; \ - h = t0 + t1; - - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],0,0x428a2f98); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],1,0x71374491); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],2,0xb5c0fbcf); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],3,0xe9b5dba5); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],4,0x3956c25b); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],5,0x59f111f1); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],6,0x923f82a4); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],7,0xab1c5ed5); - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],8,0xd807aa98); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],9,0x12835b01); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],10,0x243185be); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],11,0x550c7dc3); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],12,0x72be5d74); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],13,0x80deb1fe); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],14,0x9bdc06a7); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],15,0xc19bf174); - Wi(16); RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],16,0xe49b69c1); - Wi(17); RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],17,0xefbe4786); - Wi(18); RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],18,0x0fc19dc6); - Wi(19); RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],19,0x240ca1cc); - Wi(20); RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],20,0x2de92c6f); - Wi(21); RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],21,0x4a7484aa); - Wi(22); RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],22,0x5cb0a9dc); - Wi(23); RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],23,0x76f988da); - Wi(24); RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],24,0x983e5152); - Wi(25); RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],25,0xa831c66d); - Wi(26); RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],26,0xb00327c8); - Wi(27); RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],27,0xbf597fc7); - Wi(28); RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],28,0xc6e00bf3); - Wi(29); RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],29,0xd5a79147); - Wi(30); RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],30,0x06ca6351); - Wi(31); RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],31,0x14292967); - Wi(32); RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],32,0x27b70a85); - Wi(33); RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],33,0x2e1b2138); - Wi(34); RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],34,0x4d2c6dfc); - Wi(35); RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],35,0x53380d13); - Wi(36); RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],36,0x650a7354); - Wi(37); RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],37,0x766a0abb); - Wi(38); RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],38,0x81c2c92e); - Wi(39); RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],39,0x92722c85); - Wi(40); RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],40,0xa2bfe8a1); - Wi(41); RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],41,0xa81a664b); - Wi(42); RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],42,0xc24b8b70); - Wi(43); RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],43,0xc76c51a3); - Wi(44); RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],44,0xd192e819); - Wi(45); RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],45,0xd6990624); - Wi(46); RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],46,0xf40e3585); - Wi(47); RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],47,0x106aa070); - Wi(48); RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],48,0x19a4c116); - Wi(49); RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],49,0x1e376c08); - Wi(50); RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],50,0x2748774c); - Wi(51); RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],51,0x34b0bcb5); - Wi(52); RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],52,0x391c0cb3); - Wi(53); RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],53,0x4ed8aa4a); - Wi(54); RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],54,0x5b9cca4f); - Wi(55); RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],55,0x682e6ff3); - Wi(56); RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],56,0x748f82ee); - Wi(57); RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],57,0x78a5636f); - Wi(58); RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],58,0x84c87814); - Wi(59); RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],59,0x8cc70208); - Wi(60); RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],60,0x90befffa); - Wi(61); RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],61,0xa4506ceb); - Wi(62); RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],62,0xbef9a3f7); - Wi(63); RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],63,0xc67178f2); -#endif -#undef RND -#undef Wi -#undef Windex - - /* feedback */ - for (i = 0; i < 8; i++) { - md->sha256.state[i] = md->sha256.state[i] + S[i]; - } - return CRYPT_OK; -} - -#ifdef LTC_CLEAN_STACK -static int s_sha256_compress(hash_state * md, const unsigned char *buf) -{ - int err; - err = ss_sha256_compress(md, buf); - burn_stack(sizeof(ulong32) * 74); - return err; -} -#endif - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(sha256_c_process,s_sha256_compress, sha256, 64) - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (32 bytes) - @return CRYPT_OK if successful -*/ -int sha256_c_done(hash_state * md, unsigned char *out) -{ - int i; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - if (md->sha256.curlen >= sizeof(md->sha256.buf)) { - return CRYPT_INVALID_ARG; - } - - - /* increase the length of the message */ - md->sha256.length += md->sha256.curlen * 8; - - /* append the '1' bit */ - md->sha256.buf[md->sha256.curlen++] = (unsigned char)0x80; - - /* if the length is currently above 56 bytes we append zeros - * then compress. Then we can fall back to padding zeros and length - * encoding like normal. - */ - if (md->sha256.curlen > 56) { - while (md->sha256.curlen < 64) { - md->sha256.buf[md->sha256.curlen++] = (unsigned char)0; - } - s_sha256_compress(md, md->sha256.buf); - md->sha256.curlen = 0; - } - - /* pad upto 56 bytes of zeroes */ - while (md->sha256.curlen < 56) { - md->sha256.buf[md->sha256.curlen++] = (unsigned char)0; - } - - /* store length */ - STORE64H(md->sha256.length, md->sha256.buf+56); - s_sha256_compress(md, md->sha256.buf); - - /* copy output */ - for (i = 0; i < 8; i++) { - STORE32H(md->sha256.state[i], out+(4*i)); - } -#ifdef LTC_CLEAN_STACK - zeromem(md, sizeof(hash_state)); -#endif - return CRYPT_OK; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha256_c_test(void) -{ - return sha256_test_desc(&sha256_portable_desc, "SHA256 portable"); -} - -#undef Ch -#undef Maj -#undef S -#undef R -#undef Sigma0 -#undef Sigma1 -#undef Gamma0 -#undef Gamma1 - -#endif - - diff --git a/src/hashes/sha2/sha256_desc.c b/src/hashes/sha2/sha256_desc.c deleted file mode 100644 index fa8f2050..00000000 --- a/src/hashes/sha2/sha256_desc.c +++ /dev/null @@ -1,199 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#if defined LTC_ARCH_X86 - -#if defined(_MSC_VER) -#include -#endif - -#if !defined (LTC_S_X86_CPUID) -#define LTC_S_X86_CPUID -static LTC_INLINE void s_x86_cpuid(int* regs, int leaf) -{ -#if defined _MSC_VER - __cpuid(regs, leaf); -#else - int a, b, c, d; - - a = leaf; - b = c = d = 0; - __asm__ volatile ("cpuid" - :"=a"(a), "=b"(b), "=c"(c), "=d"(d) - :"a"(a), "c"(c) - ); - regs[0] = a; - regs[1] = b; - regs[2] = c; - regs[3] = d; -#endif -} -#endif /* LTC_S_X86_CPUID */ - -static LTC_INLINE int s_sha256_x86_is_supported(void) -{ - static int initialized = 0; - static int is_supported = 0; - - if (initialized == 0) { - int regs[4]; - int sse2, ssse3, sse41, sha; - /* Leaf 0, Reg 0 contains the number of leafs available */ - s_x86_cpuid(regs, 0); - if(regs[0] >= 7) { - s_x86_cpuid(regs, 1); - sse2 = ((((unsigned int)(regs[3])) >> 26) & 1u) != 0; /* SSE2, leaf 1, edx, bit 26 */ - ssse3 = ((((unsigned int)(regs[2])) >> 9) & 1u) != 0; /* SSSE3, leaf 1, ecx, bit 9 */ - sse41 = ((((unsigned int)(regs[2])) >> 19) & 1u) != 0; /* SSE4.1, leaf 1, ecx, bit 19 */ - s_x86_cpuid(regs, 7); - sha = ((((unsigned int)(regs[1])) >> 29) & 1u) != 0; /* SHA, leaf 7, ebx, bit 29 */ - is_supported = sse2 && ssse3 && sse41 && sha; - } - initialized = 1; - } - return is_supported; -} -#endif /* LTC_ARCH_X86 */ - -int shani_is_supported(void) -{ -#ifdef LTC_ARCH_X86 - return s_sha256_x86_is_supported(); -#else - return 0; -#endif -} - -#ifdef LTC_SHA256 - -const struct ltc_hash_descriptor sha256_desc = -{ - "sha256", - 0, - 32, - 64, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 1, }, - 9, - - &sha256_init, - &sha256_process, - &sha256_done, - &sha256_test, - NULL -}; - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int sha256_init(hash_state * md) -{ - LTC_ARGCHK(md != NULL); - - md->sha256.curlen = 0; - md->sha256.length = 0; - md->sha256.state[0] = 0x6A09E667UL; - md->sha256.state[1] = 0xBB67AE85UL; - md->sha256.state[2] = 0x3C6EF372UL; - md->sha256.state[3] = 0xA54FF53AUL; - md->sha256.state[4] = 0x510E527FUL; - md->sha256.state[5] = 0x9B05688CUL; - md->sha256.state[6] = 0x1F83D9ABUL; - md->sha256.state[7] = 0x5BE0CD19UL; - return CRYPT_OK; -} - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -int sha256_process(hash_state * md, const unsigned char *in, unsigned long inlen) -{ -#if defined LTC_SHA256_X86 - if(s_sha256_x86_is_supported()) { - return sha256_x86_process(md, in, inlen); - } -#endif - return sha256_c_process(md, in, inlen); -} - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (32 bytes) - @return CRYPT_OK if successful -*/ -int sha256_done(hash_state * md, unsigned char *out) -{ -#if defined LTC_SHA256_X86 - if(s_sha256_x86_is_supported()) { - return sha256_x86_done(md, out); - } -#endif - return sha256_c_done(md, out); -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha256_test(void) -{ - return sha256_test_desc(&sha256_desc, "SHA256"); -} - -int sha256_test_desc(const struct ltc_hash_descriptor *desc, const char *name) -{ -#ifndef LTC_TEST - LTC_UNUSED_PARAM(desc); - LTC_UNUSED_PARAM(name); - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[32]; - } tests[] = { - { "abc", - { 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, - 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, - 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, - 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad } - }, - { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - { 0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8, - 0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39, - 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67, - 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1 } - }, - }; - - int i; - unsigned char tmp[32]; - hash_state md; - - LTC_ARGCHK(desc != NULL); - LTC_ARGCHK(desc->init != NULL); - LTC_ARGCHK(desc->process != NULL); - LTC_ARGCHK(desc->done != NULL); - LTC_ARGCHK(name != NULL); - - for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { - desc->init(&md); - desc->process(&md, (unsigned char*)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - desc->done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), name, i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/hashes/sha2/sha256_x86.c b/src/hashes/sha2/sha256_x86.c deleted file mode 100644 index 68258c30..00000000 --- a/src/hashes/sha2/sha256_x86.c +++ /dev/null @@ -1,335 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sha256_x86.c - SHA256 by Marek Knapek -*/ - -#if defined(LTC_SHA256) && defined(LTC_SHA256_X86) - -#if defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wcast-align" -#pragma GCC diagnostic ignored "-Wdeclaration-after-statement" -#pragma GCC diagnostic ignored "-Wuninitialized" -#pragma GCC diagnostic ignored "-Wunused-function" -#endif -#if defined(_MSC_VER) -#include -#endif -#include /* SSE2 _mm_load_si128 _mm_loadu_si128 _mm_storeu_si128 _mm_set_epi64x _mm_add_epi32 _mm_shuffle_epi32 */ -#include /* SSSE3 _mm_alignr_epi8 _mm_shuffle_epi8 */ -#include /* SSE4.1 _mm_blend_epi16 */ -#include /* SHA _mm_sha256msg1_epu32 _mm_sha256msg2_epu32 _mm_sha256rnds2_epu32 */ -#if defined(__GNUC__) -#pragma GCC diagnostic pop -#endif - -const struct ltc_hash_descriptor sha256_x86_desc = -{ - "sha256", - 0, - 32, - 64, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 1, }, - 9, - - &sha256_init, - &sha256_x86_process, - &sha256_x86_done, - &sha256_x86_test, - NULL -}; - -/* the K array */ -#define K sha256_x86_K -LTC_ALIGN_MSVC(16) -static const ulong32 K[64] LTC_ALIGN(16) = { - 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL, - 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL, - 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, - 0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, - 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL, - 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL, - 0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, - 0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, - 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL, - 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL, - 0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, - 0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, - 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL -}; - -/* compress 512-bits */ -#ifdef LTC_CLEAN_STACK -static int LTC_SHA_TARGET ss_sha256_x86_compress(hash_state * md, const unsigned char *buf) -#else -static int LTC_SHA_TARGET s_sha256_x86_compress(hash_state * md, const unsigned char *buf) -#endif -{ -#define k_blend_epi16(a, b, c, d, e, f, g, h) ((((a) & 0x1) << 7) | (((b) & 0x1) << 6) | (((c) & 0x1) << 5) | (((d) & 0x1) << 4) | (((e) & 0x1) << 3) | (((f) & 0x1) << 2) | (((g) & 0x1) << 1) | (((h) & 0x1) << 0)) -#define ltc_mm_blend_epi32(a, b, c) _mm_blend_epi16((a), (b), k_blend_epi16((((c) >> 3) & 0x1), (((c) >> 3) & 0x1), (((c) >> 2) & 0x1), (((c) >> 2) & 0x1), (((c) >> 1) & 0x1), (((c) >> 1) & 0x1), (((c) >> 0) & 0x1), (((c) >> 0) & 0x1))) -#define k_shuffle_epi32(a, b, c, d) ((((a) & 0x3) << (3 * 2)) | (((b) & 0x3) << (2 * 2)) | (((c) & 0x3) << (1 * 2)) | (((d) & 0x3) << (0 * 2))) -#define k_blend_epi32(a, b, c, d) ((((a) & 0x1) << (3 * 1)) | (((b) & 0x1) << (2 * 1)) | (((c) & 0x1) << (1 * 1)) | (((d) & 0x1) << (0 * 1))) -#define k_alignr_epi8(a) (((a) & 0x3) * 4) -#define k_any 0x0 - - __m128i reverse; - __m128i state_0; - __m128i state_1; - __m128i tmp; - __m128i old_0; - __m128i old_1; - __m128i msg_0; - __m128i msg; - __m128i msg_1; - __m128i msg_2; - __m128i msg_3; - - reverse = _mm_set_epi64x(0x0c0d0e0f08090a0bull, 0x0405060700010203ull); - state_0 = _mm_loadu_si128(((__m128i const*)(&md->sha256.state[0]))); - state_1 = _mm_loadu_si128(((__m128i const*)(&md->sha256.state[4]))); - tmp = _mm_shuffle_epi32(state_0, k_shuffle_epi32(0x2, 0x3, 0x0, 0x1)); - state_1 = _mm_shuffle_epi32(state_1, k_shuffle_epi32(0x0, 0x1, 0x2, 0x3)); - state_0 = _mm_alignr_epi8(tmp, state_1, k_alignr_epi8(2)); - state_1 = ltc_mm_blend_epi32(state_1, tmp, k_blend_epi32(0x1, 0x1, 0x0, 0x0)); - - old_0 = state_0; - old_1 = state_1; - msg_0 = _mm_loadu_si128(((__m128i const*)(&buf[0 * 16]))); - msg_0 = _mm_shuffle_epi8(msg_0, reverse); - tmp = _mm_load_si128(((__m128i const*)(&K[0 * 4]))); - msg = _mm_add_epi32(msg_0, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_1 = _mm_loadu_si128(((__m128i const*)(&buf[1 * 16]))); - msg_1 = _mm_shuffle_epi8(msg_1, reverse); - tmp = _mm_load_si128(((__m128i const*)(&K[1 * 4]))); - msg = _mm_add_epi32(msg_1, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_2 = _mm_loadu_si128(((__m128i const*)(&buf[2 * 16]))); - msg_2 = _mm_shuffle_epi8(msg_2, reverse); - tmp = _mm_load_si128(((__m128i const*)(&K[2 * 4]))); - msg = _mm_add_epi32(msg_2, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_3 = _mm_loadu_si128(((__m128i const*)(&buf[3 * 16]))); - msg_3 = _mm_shuffle_epi8(msg_3, reverse); - tmp = _mm_load_si128(((__m128i const*)(&K[3 * 4]))); - msg = _mm_add_epi32(msg_3, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_0 = _mm_sha256msg1_epu32(msg_0, msg_1); - tmp = _mm_alignr_epi8(msg_3, msg_2, k_alignr_epi8(1)); - msg_0 = _mm_add_epi32(msg_0, tmp); - msg_0 = _mm_sha256msg2_epu32(msg_0, msg_3); - tmp = _mm_load_si128(((__m128i const*)(&K[4 * 4]))); - msg = _mm_add_epi32(msg_0, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_1 = _mm_sha256msg1_epu32(msg_1, msg_2); - tmp = _mm_alignr_epi8(msg_0, msg_3, k_alignr_epi8(1)); - msg_1 = _mm_add_epi32(msg_1, tmp); - msg_1 = _mm_sha256msg2_epu32(msg_1, msg_0); - tmp = _mm_load_si128(((__m128i const*)(&K[5 * 4]))); - msg = _mm_add_epi32(msg_1, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_2 = _mm_sha256msg1_epu32(msg_2, msg_3); - tmp = _mm_alignr_epi8(msg_1, msg_0, k_alignr_epi8(1)); - msg_2 = _mm_add_epi32(msg_2, tmp); - msg_2 = _mm_sha256msg2_epu32(msg_2, msg_1); - tmp = _mm_load_si128(((__m128i const*)(&K[6 * 4]))); - msg = _mm_add_epi32(msg_2, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_3 = _mm_sha256msg1_epu32(msg_3, msg_0); - tmp = _mm_alignr_epi8(msg_2, msg_1, k_alignr_epi8(1)); - msg_3 = _mm_add_epi32(msg_3, tmp); - msg_3 = _mm_sha256msg2_epu32(msg_3, msg_2); - tmp = _mm_load_si128(((__m128i const*)(&K[7 * 4]))); - msg = _mm_add_epi32(msg_3, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_0 = _mm_sha256msg1_epu32(msg_0, msg_1); - tmp = _mm_alignr_epi8(msg_3, msg_2, k_alignr_epi8(1)); - msg_0 = _mm_add_epi32(msg_0, tmp); - msg_0 = _mm_sha256msg2_epu32(msg_0, msg_3); - tmp = _mm_load_si128(((__m128i const*)(&K[8 * 4]))); - msg = _mm_add_epi32(msg_0, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_1 = _mm_sha256msg1_epu32(msg_1, msg_2); - tmp = _mm_alignr_epi8(msg_0, msg_3, k_alignr_epi8(1)); - msg_1 = _mm_add_epi32(msg_1, tmp); - msg_1 = _mm_sha256msg2_epu32(msg_1, msg_0); - tmp = _mm_load_si128(((__m128i const*)(&K[9 * 4]))); - msg = _mm_add_epi32(msg_1, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_2 = _mm_sha256msg1_epu32(msg_2, msg_3); - tmp = _mm_alignr_epi8(msg_1, msg_0, k_alignr_epi8(1)); - msg_2 = _mm_add_epi32(msg_2, tmp); - msg_2 = _mm_sha256msg2_epu32(msg_2, msg_1); - tmp = _mm_load_si128(((__m128i const*)(&K[10 * 4]))); - msg = _mm_add_epi32(msg_2, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_3 = _mm_sha256msg1_epu32(msg_3, msg_0); - tmp = _mm_alignr_epi8(msg_2, msg_1, k_alignr_epi8(1)); - msg_3 = _mm_add_epi32(msg_3, tmp); - msg_3 = _mm_sha256msg2_epu32(msg_3, msg_2); - tmp = _mm_load_si128(((__m128i const*)(&K[11 * 4]))); - msg = _mm_add_epi32(msg_3, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_0 = _mm_sha256msg1_epu32(msg_0, msg_1); - tmp = _mm_alignr_epi8(msg_3, msg_2, k_alignr_epi8(1)); - msg_0 = _mm_add_epi32(msg_0, tmp); - msg_0 = _mm_sha256msg2_epu32(msg_0, msg_3); - tmp = _mm_load_si128(((__m128i const*)(&K[12 * 4]))); - msg = _mm_add_epi32(msg_0, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_1 = _mm_sha256msg1_epu32(msg_1, msg_2); - tmp = _mm_alignr_epi8(msg_0, msg_3, k_alignr_epi8(1)); - msg_1 = _mm_add_epi32(msg_1, tmp); - msg_1 = _mm_sha256msg2_epu32(msg_1, msg_0); - tmp = _mm_load_si128(((__m128i const*)(&K[13 * 4]))); - msg = _mm_add_epi32(msg_1, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_2 = _mm_sha256msg1_epu32(msg_2, msg_3); - tmp = _mm_alignr_epi8(msg_1, msg_0, k_alignr_epi8(1)); - msg_2 = _mm_add_epi32(msg_2, tmp); - msg_2 = _mm_sha256msg2_epu32(msg_2, msg_1); - tmp = _mm_load_si128(((__m128i const*)(&K[14 * 4]))); - msg = _mm_add_epi32(msg_2, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - msg_3 = _mm_sha256msg1_epu32(msg_3, msg_0); - tmp = _mm_alignr_epi8(msg_2, msg_1, k_alignr_epi8(1)); - msg_3 = _mm_add_epi32(msg_3, tmp); - msg_3 = _mm_sha256msg2_epu32(msg_3, msg_2); - tmp = _mm_load_si128(((__m128i const*)(&K[15 * 4]))); - msg = _mm_add_epi32(msg_3, tmp); - state_1 = _mm_sha256rnds2_epu32(state_1, state_0, msg); - msg = _mm_shuffle_epi32(msg, k_shuffle_epi32(k_any, k_any, 0x3, 0x2)); - state_0 = _mm_sha256rnds2_epu32(state_0, state_1, msg); - state_0 = _mm_add_epi32(state_0, old_0); - state_1 = _mm_add_epi32(state_1, old_1); - - tmp = _mm_shuffle_epi32(state_0, k_shuffle_epi32(0x0, 0x1, 0x2, 0x3)); - state_1 = _mm_shuffle_epi32(state_1, k_shuffle_epi32(0x2, 0x3, 0x0, 0x1)); - state_0 = ltc_mm_blend_epi32(tmp, state_1, k_blend_epi32(0x1, 0x1, 0x0, 0x0)); - state_1 = _mm_alignr_epi8(state_1, tmp, k_alignr_epi8(2)); - _mm_storeu_si128(((__m128i*)(&md->sha256.state[0])), state_0); - _mm_storeu_si128(((__m128i*)(&md->sha256.state[4])), state_1); - return CRYPT_OK; -} -#undef K - -#ifdef LTC_CLEAN_STACK -static int s_sha256_x86_compress(hash_state * md, const unsigned char *buf) -{ - int err; - err = ss_sha256_x86_compress(md, buf); - burn_stack(sizeof(ulong32) * 74); - return err; -} -#endif - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(sha256_x86_process,s_sha256_x86_compress, sha256, 64) - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (32 bytes) - @return CRYPT_OK if successful -*/ -int sha256_x86_done(hash_state * md, unsigned char *out) -{ - int i; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - if (md->sha256.curlen >= sizeof(md->sha256.buf)) { - return CRYPT_INVALID_ARG; - } - - - /* increase the length of the message */ - md->sha256.length += md->sha256.curlen * 8; - - /* append the '1' bit */ - md->sha256.buf[md->sha256.curlen++] = (unsigned char)0x80; - - /* if the length is currently above 56 bytes we append zeros - * then compress. Then we can fall back to padding zeros and length - * encoding like normal. - */ - if (md->sha256.curlen > 56) { - while (md->sha256.curlen < 64) { - md->sha256.buf[md->sha256.curlen++] = (unsigned char)0; - } - s_sha256_x86_compress(md, md->sha256.buf); - md->sha256.curlen = 0; - } - - /* pad upto 56 bytes of zeroes */ - while (md->sha256.curlen < 56) { - md->sha256.buf[md->sha256.curlen++] = (unsigned char)0; - } - - /* store length */ - STORE64H(md->sha256.length, md->sha256.buf+56); - s_sha256_x86_compress(md, md->sha256.buf); - - /* copy output */ - for (i = 0; i < 8; i++) { - STORE32H(md->sha256.state[i], out+(4*i)); - } -#ifdef LTC_CLEAN_STACK - zeromem(md, sizeof(hash_state)); -#endif - return CRYPT_OK; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha256_x86_test(void) -{ - return sha256_test_desc(&sha256_x86_desc, "SHA256 x86"); -} - -#endif diff --git a/src/hashes/sha2/sha384.c b/src/hashes/sha2/sha384.c deleted file mode 100644 index f06de33b..00000000 --- a/src/hashes/sha2/sha384.c +++ /dev/null @@ -1,61 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/** - @param sha384.c - LTC_SHA384 hash included in sha512.c, Tom St Denis -*/ - -#include "tomcrypt_private.h" - -#if defined(LTC_SHA384) && defined(LTC_SHA512) - -const struct ltc_hash_descriptor sha384_portable_desc = -{ - "sha384", - 4, - 48, - 128, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 2, }, - 9, - - &sha384_init, - &sha384_c_process, - &sha384_c_done, - &sha384_c_test, - NULL -}; - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (48 bytes) - @return CRYPT_OK if successful -*/ -int sha384_c_done(hash_state * md, unsigned char *out) -{ - unsigned char buf[64]; - int err; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - err = sha512_c_done(md, buf); - XMEMCPY(out, buf, 48); -#ifdef LTC_CLEAN_STACK - zeromem(buf, sizeof(buf)); -#endif - return err; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha384_c_test(void) -{ - return sha384_test_desc(&sha384_portable_desc, "SHA384 portable"); -} - -#endif /* defined(LTC_SHA384) && defined(LTC_SHA512) */ diff --git a/src/hashes/sha2/sha384_desc.c b/src/hashes/sha2/sha384_desc.c deleted file mode 100644 index 97bbbcde..00000000 --- a/src/hashes/sha2/sha384_desc.c +++ /dev/null @@ -1,128 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sha384_desc.c - SHA384 multiplexer between the portable and the x86 implementation -*/ - -#if defined(LTC_SHA384) && defined(LTC_SHA512) - -const struct ltc_hash_descriptor sha384_desc = -{ - "sha384", - 4, - 48, - 128, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 2, }, - 9, - - &sha384_init, - &sha512_process, - &sha384_done, - &sha384_test, - NULL -}; - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int sha384_init(hash_state * md) -{ - LTC_ARGCHK(md != NULL); - - md->sha512.curlen = 0; - md->sha512.length = 0; - md->sha512.state[0] = CONST64(0xcbbb9d5dc1059ed8); - md->sha512.state[1] = CONST64(0x629a292a367cd507); - md->sha512.state[2] = CONST64(0x9159015a3070dd17); - md->sha512.state[3] = CONST64(0x152fecd8f70e5939); - md->sha512.state[4] = CONST64(0x67332667ffc00b31); - md->sha512.state[5] = CONST64(0x8eb44a8768581511); - md->sha512.state[6] = CONST64(0xdb0c2e0d64f98fa7); - md->sha512.state[7] = CONST64(0x47b5481dbefa4fa4); - return CRYPT_OK; -} - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (48 bytes) - @return CRYPT_OK if successful -*/ -int sha384_done(hash_state * md, unsigned char *out) -{ -#if defined LTC_SHA384_X86 - if(sha512ni_is_supported()) { - return sha384_x86_done(md, out); - } -#endif - return sha384_c_done(md, out); -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha384_test(void) -{ - return sha384_test_desc(&sha384_desc, "SHA384"); -} - -int sha384_test_desc(const struct ltc_hash_descriptor *desc, const char *name) -{ -#ifndef LTC_TEST - LTC_UNUSED_PARAM(desc); - LTC_UNUSED_PARAM(name); - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[48]; - } tests[] = { - { "abc", - { 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, - 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07, - 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63, - 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed, - 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23, - 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7 } - }, - { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", - { 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8, - 0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47, - 0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2, - 0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12, - 0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9, - 0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39 } - }, - }; - - int i; - unsigned char tmp[48]; - hash_state md; - - LTC_ARGCHK(desc != NULL); - LTC_ARGCHK(desc->init != NULL); - LTC_ARGCHK(desc->process != NULL); - LTC_ARGCHK(desc->done != NULL); - LTC_ARGCHK(name != NULL); - - for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { - desc->init(&md); - desc->process(&md, (unsigned char*)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - desc->done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), name, i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#endif /* defined(LTC_SHA384) && defined(LTC_SHA512) */ diff --git a/src/hashes/sha2/sha384_x86.c b/src/hashes/sha2/sha384_x86.c deleted file mode 100644 index 29636f91..00000000 --- a/src/hashes/sha2/sha384_x86.c +++ /dev/null @@ -1,61 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sha384_x86.c - SHA384 using the Intel SHA512 extension (SHA512 truncated to 384 bits) -*/ - -#if defined(LTC_SHA384) && defined(LTC_SHA512) && defined(LTC_SHA384_X86) && defined(LTC_SHA512_X86) - -const struct ltc_hash_descriptor sha384_x86_desc = -{ - "sha384", - 4, - 48, - 128, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 2, }, - 9, - - &sha384_init, - &sha384_x86_process, - &sha384_x86_done, - &sha384_x86_test, - NULL -}; - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (48 bytes) - @return CRYPT_OK if successful -*/ -int sha384_x86_done(hash_state * md, unsigned char *out) -{ - unsigned char buf[64]; - int err; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - err = sha512_x86_done(md, buf); - XMEMCPY(out, buf, 48); -#ifdef LTC_CLEAN_STACK - zeromem(buf, sizeof(buf)); -#endif - return err; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha384_x86_test(void) -{ - return sha384_test_desc(&sha384_x86_desc, "SHA384 x86"); -} - -#endif /* defined(LTC_SHA384) && defined(LTC_SHA512) */ diff --git a/src/hashes/sha2/sha512.c b/src/hashes/sha2/sha512.c deleted file mode 100644 index 91774569..00000000 --- a/src/hashes/sha2/sha512.c +++ /dev/null @@ -1,287 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @param sha512.c - SHA512 by Tom St Denis -*/ - -#ifdef LTC_SHA512 - -const struct ltc_hash_descriptor sha512_portable_desc = -{ - "sha512", - 5, - 64, - 128, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 3, }, - 9, - - &sha512_init, - &sha512_c_process, - &sha512_c_done, - &sha512_c_test, - NULL -}; - -/* the K array */ -#define K sha512_K -static const ulong64 K[80] = { -CONST64(0x428a2f98d728ae22), CONST64(0x7137449123ef65cd), -CONST64(0xb5c0fbcfec4d3b2f), CONST64(0xe9b5dba58189dbbc), -CONST64(0x3956c25bf348b538), CONST64(0x59f111f1b605d019), -CONST64(0x923f82a4af194f9b), CONST64(0xab1c5ed5da6d8118), -CONST64(0xd807aa98a3030242), CONST64(0x12835b0145706fbe), -CONST64(0x243185be4ee4b28c), CONST64(0x550c7dc3d5ffb4e2), -CONST64(0x72be5d74f27b896f), CONST64(0x80deb1fe3b1696b1), -CONST64(0x9bdc06a725c71235), CONST64(0xc19bf174cf692694), -CONST64(0xe49b69c19ef14ad2), CONST64(0xefbe4786384f25e3), -CONST64(0x0fc19dc68b8cd5b5), CONST64(0x240ca1cc77ac9c65), -CONST64(0x2de92c6f592b0275), CONST64(0x4a7484aa6ea6e483), -CONST64(0x5cb0a9dcbd41fbd4), CONST64(0x76f988da831153b5), -CONST64(0x983e5152ee66dfab), CONST64(0xa831c66d2db43210), -CONST64(0xb00327c898fb213f), CONST64(0xbf597fc7beef0ee4), -CONST64(0xc6e00bf33da88fc2), CONST64(0xd5a79147930aa725), -CONST64(0x06ca6351e003826f), CONST64(0x142929670a0e6e70), -CONST64(0x27b70a8546d22ffc), CONST64(0x2e1b21385c26c926), -CONST64(0x4d2c6dfc5ac42aed), CONST64(0x53380d139d95b3df), -CONST64(0x650a73548baf63de), CONST64(0x766a0abb3c77b2a8), -CONST64(0x81c2c92e47edaee6), CONST64(0x92722c851482353b), -CONST64(0xa2bfe8a14cf10364), CONST64(0xa81a664bbc423001), -CONST64(0xc24b8b70d0f89791), CONST64(0xc76c51a30654be30), -CONST64(0xd192e819d6ef5218), CONST64(0xd69906245565a910), -CONST64(0xf40e35855771202a), CONST64(0x106aa07032bbd1b8), -CONST64(0x19a4c116b8d2d0c8), CONST64(0x1e376c085141ab53), -CONST64(0x2748774cdf8eeb99), CONST64(0x34b0bcb5e19b48a8), -CONST64(0x391c0cb3c5c95a63), CONST64(0x4ed8aa4ae3418acb), -CONST64(0x5b9cca4f7763e373), CONST64(0x682e6ff3d6b2b8a3), -CONST64(0x748f82ee5defb2fc), CONST64(0x78a5636f43172f60), -CONST64(0x84c87814a1f0ab72), CONST64(0x8cc702081a6439ec), -CONST64(0x90befffa23631e28), CONST64(0xa4506cebde82bde9), -CONST64(0xbef9a3f7b2c67915), CONST64(0xc67178f2e372532b), -CONST64(0xca273eceea26619c), CONST64(0xd186b8c721c0c207), -CONST64(0xeada7dd6cde0eb1e), CONST64(0xf57d4f7fee6ed178), -CONST64(0x06f067aa72176fba), CONST64(0x0a637dc5a2c898a6), -CONST64(0x113f9804bef90dae), CONST64(0x1b710b35131c471b), -CONST64(0x28db77f523047d84), CONST64(0x32caab7b40c72493), -CONST64(0x3c9ebe0a15c9bebc), CONST64(0x431d67c49c100d4c), -CONST64(0x4cc5d4becb3e42b6), CONST64(0x597f299cfc657e2a), -CONST64(0x5fcb6fab3ad6faec), CONST64(0x6c44198c4a475817) -}; - -/* Various logical functions */ -#define Ch(x,y,z) (z ^ (x & (y ^ z))) -#define Maj(x,y,z) (((x | y) & z) | (x & y)) -#define S(x, n) ROR64c(x, n) -#define R(x, n) (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)n)) -#define Sigma0(x) (S(x, 28) ^ S(x, 34) ^ S(x, 39)) -#define Sigma1(x) (S(x, 14) ^ S(x, 18) ^ S(x, 41)) -#define Gamma0(x) (S(x, 1) ^ S(x, 8) ^ R(x, 7)) -#define Gamma1(x) (S(x, 19) ^ S(x, 61) ^ R(x, 6)) - -/* compress 1024-bits */ -#ifdef LTC_CLEAN_STACK -static int ss_sha512_compress(hash_state * md, const unsigned char *buf) -#else -static int s_sha512_compress(hash_state * md, const unsigned char *buf) -#endif -{ - ulong64 S[8], t0, t1; -#ifdef LTC_SMALL_STACK - ulong64 W[16]; -#else - ulong64 W[80]; -#endif - int i; - - /* copy state into S */ - for (i = 0; i < 8; i++) { - S[i] = md->sha512.state[i]; - } - - /* copy the state into 1024-bits into W[0..15] */ - for (i = 0; i < 16; i++) { - LOAD64H(W[i], buf + (8*i)); - } - -#ifdef LTC_SMALL_STACK - #define Wi(i) W[(i) % 16] = Gamma1(W[((i) - 2) % 16]) + W[((i) - 7) % 16] + Gamma0(W[((i) - 15) % 16]) + W[((i) - 16) % 16]; - #define Windex(i) ((i) % 16) -#else - #define Wi(i) do { } while(0) - #define Windex(i) (i) - - /* fill W[16..79] */ - for (i = 16; i < 80; i++) { - W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16]; - } -#endif - - /* Compress */ -#ifdef LTC_SMALL_CODE - for (i = 0; i < 16; i++) { - t0 = S[7] + Sigma1(S[4]) + Ch(S[4], S[5], S[6]) + K[i] + W[Windex(i)]; - t1 = Sigma0(S[0]) + Maj(S[0], S[1], S[2]); - S[7] = S[6]; - S[6] = S[5]; - S[5] = S[4]; - S[4] = S[3] + t0; - S[3] = S[2]; - S[2] = S[1]; - S[1] = S[0]; - S[0] = t0 + t1; - } - for (; i < 80; i++) { - Wi(i); - t0 = S[7] + Sigma1(S[4]) + Ch(S[4], S[5], S[6]) + K[i] + W[Windex(i)]; - t1 = Sigma0(S[0]) + Maj(S[0], S[1], S[2]); - S[7] = S[6]; - S[6] = S[5]; - S[5] = S[4]; - S[4] = S[3] + t0; - S[3] = S[2]; - S[2] = S[1]; - S[1] = S[0]; - S[0] = t0 + t1; - } -#else -#define RND(a,b,c,d,e,f,g,h,i) \ - t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[Windex(i)]; \ - t1 = Sigma0(a) + Maj(a, b, c); \ - d += t0; \ - h = t0 + t1; - - for (i = 0; i < 16; i += 8) { - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],i+0); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],i+1); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],i+2); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],i+3); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],i+4); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],i+5); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],i+6); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],i+7); - } - for (; i < 80; i += 8) { - Wi(i+0); RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],i+0); - Wi(i+1); RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],i+1); - Wi(i+2); RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],i+2); - Wi(i+3); RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],i+3); - Wi(i+4); RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],i+4); - Wi(i+5); RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],i+5); - Wi(i+6); RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],i+6); - Wi(i+7); RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],i+7); - } -#undef RND -#endif -#undef Wi -#undef Windex - - - /* feedback */ - for (i = 0; i < 8; i++) { - md->sha512.state[i] = md->sha512.state[i] + S[i]; - } - - return CRYPT_OK; -} -#undef K - -/* compress 1024-bits */ -#ifdef LTC_CLEAN_STACK -static int s_sha512_compress(hash_state * md, const unsigned char *buf) -{ - int err; - err = ss_sha512_compress(md, buf); - burn_stack(sizeof(ulong64) * 90 + sizeof(int)); - return err; -} -#endif - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(sha512_c_process, s_sha512_compress, sha512, 128) - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (64 bytes) - @return CRYPT_OK if successful -*/ -int sha512_c_done(hash_state * md, unsigned char *out) -{ - int i; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - if (md->sha512.curlen >= sizeof(md->sha512.buf)) { - return CRYPT_INVALID_ARG; - } - - /* increase the length of the message */ - md->sha512.length += md->sha512.curlen * CONST64(8); - - /* append the '1' bit */ - md->sha512.buf[md->sha512.curlen++] = (unsigned char)0x80; - - /* if the length is currently above 112 bytes we append zeros - * then compress. Then we can fall back to padding zeros and length - * encoding like normal. - */ - if (md->sha512.curlen > 112) { - while (md->sha512.curlen < 128) { - md->sha512.buf[md->sha512.curlen++] = (unsigned char)0; - } - s_sha512_compress(md, md->sha512.buf); - md->sha512.curlen = 0; - } - - /* pad upto 120 bytes of zeroes - * note: that from 112 to 120 is the 64 MSB of the length. We assume that you won't hash - * > 2^64 bits of data... :-) - */ - while (md->sha512.curlen < 120) { - md->sha512.buf[md->sha512.curlen++] = (unsigned char)0; - } - - /* store length */ - STORE64H(md->sha512.length, md->sha512.buf+120); - s_sha512_compress(md, md->sha512.buf); - - /* copy output */ - for (i = 0; i < 8; i++) { - STORE64H(md->sha512.state[i], out+(8*i)); - } -#ifdef LTC_CLEAN_STACK - zeromem(md, sizeof(hash_state)); -#endif - return CRYPT_OK; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha512_c_test(void) -{ - return sha512_test_desc(&sha512_portable_desc, "SHA512 portable"); -} - -#undef Ch -#undef Maj -#undef S -#undef R -#undef Sigma0 -#undef Sigma1 -#undef Gamma0 -#undef Gamma1 - -#endif diff --git a/src/hashes/sha2/sha512_224.c b/src/hashes/sha2/sha512_224.c deleted file mode 100644 index 850bc7cb..00000000 --- a/src/hashes/sha2/sha512_224.c +++ /dev/null @@ -1,61 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/** - @param sha512_224.c - SHA512/224 hash included in sha512.c -*/ - -#include "tomcrypt_private.h" - -#if defined(LTC_SHA512_224) && defined(LTC_SHA512) - -const struct ltc_hash_descriptor sha512_224_portable_desc = -{ - "sha512-224", - 15, - 28, - 128, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 5, }, - 9, - - &sha512_224_init, - &sha512_224_c_process, - &sha512_224_c_done, - &sha512_224_c_test, - NULL -}; - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (28 bytes) - @return CRYPT_OK if successful -*/ -int sha512_224_c_done(hash_state * md, unsigned char *out) -{ - unsigned char buf[64]; - int err; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - err = sha512_c_done(md, buf); - XMEMCPY(out, buf, 28); -#ifdef LTC_CLEAN_STACK - zeromem(buf, sizeof(buf)); -#endif - return err; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha512_224_c_test(void) -{ - return sha512_224_test_desc(&sha512_224_portable_desc, "SHA512-224 portable"); -} - -#endif /* defined(LTC_SHA512_224) && defined(LTC_SHA512) */ diff --git a/src/hashes/sha2/sha512_224_desc.c b/src/hashes/sha2/sha512_224_desc.c deleted file mode 100644 index d13880ea..00000000 --- a/src/hashes/sha2/sha512_224_desc.c +++ /dev/null @@ -1,124 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sha512_224_desc.c - SHA512/224 multiplexer between the portable and the x86 implementation -*/ - -#if defined(LTC_SHA512_224) && defined(LTC_SHA512) - -const struct ltc_hash_descriptor sha512_224_desc = -{ - "sha512-224", - 15, - 28, - 128, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 5, }, - 9, - - &sha512_224_init, - &sha512_process, - &sha512_224_done, - &sha512_224_test, - NULL -}; - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int sha512_224_init(hash_state * md) -{ - LTC_ARGCHK(md != NULL); - - md->sha512.curlen = 0; - md->sha512.length = 0; - md->sha512.state[0] = CONST64(0x8C3D37C819544DA2); - md->sha512.state[1] = CONST64(0x73E1996689DCD4D6); - md->sha512.state[2] = CONST64(0x1DFAB7AE32FF9C82); - md->sha512.state[3] = CONST64(0x679DD514582F9FCF); - md->sha512.state[4] = CONST64(0x0F6D2B697BD44DA8); - md->sha512.state[5] = CONST64(0x77E36F7304C48942); - md->sha512.state[6] = CONST64(0x3F9D85A86A1D36C8); - md->sha512.state[7] = CONST64(0x1112E6AD91D692A1); - return CRYPT_OK; -} - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (28 bytes) - @return CRYPT_OK if successful -*/ -int sha512_224_done(hash_state * md, unsigned char *out) -{ -#if defined LTC_SHA512_224_X86 - if(sha512ni_is_supported()) { - return sha512_224_x86_done(md, out); - } -#endif - return sha512_224_c_done(md, out); -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha512_224_test(void) -{ - return sha512_224_test_desc(&sha512_224_desc, "SHA512-224"); -} - -int sha512_224_test_desc(const struct ltc_hash_descriptor *desc, const char *name) -{ -#ifndef LTC_TEST - LTC_UNUSED_PARAM(desc); - LTC_UNUSED_PARAM(name); - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[28]; - } tests[] = { - { "abc", - { 0x46, 0x34, 0x27, 0x0F, 0x70, 0x7B, 0x6A, 0x54, - 0xDA, 0xAE, 0x75, 0x30, 0x46, 0x08, 0x42, 0xE2, - 0x0E, 0x37, 0xED, 0x26, 0x5C, 0xEE, 0xE9, 0xA4, - 0x3E, 0x89, 0x24, 0xAA } - }, - { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", - { 0x23, 0xFE, 0xC5, 0xBB, 0x94, 0xD6, 0x0B, 0x23, - 0x30, 0x81, 0x92, 0x64, 0x0B, 0x0C, 0x45, 0x33, - 0x35, 0xD6, 0x64, 0x73, 0x4F, 0xE4, 0x0E, 0x72, - 0x68, 0x67, 0x4A, 0xF9 } - }, - }; - - int i; - unsigned char tmp[28]; - hash_state md; - - LTC_ARGCHK(desc != NULL); - LTC_ARGCHK(desc->init != NULL); - LTC_ARGCHK(desc->process != NULL); - LTC_ARGCHK(desc->done != NULL); - LTC_ARGCHK(name != NULL); - - for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { - desc->init(&md); - desc->process(&md, (unsigned char*)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - desc->done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), name, i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#endif /* defined(LTC_SHA512_224) && defined(LTC_SHA512) */ diff --git a/src/hashes/sha2/sha512_224_x86.c b/src/hashes/sha2/sha512_224_x86.c deleted file mode 100644 index 063902ab..00000000 --- a/src/hashes/sha2/sha512_224_x86.c +++ /dev/null @@ -1,61 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sha512_224_x86.c - SHA512/224 using the Intel SHA512 extension (SHA512 truncated to 224 bits) -*/ - -#if defined(LTC_SHA512_224) && defined(LTC_SHA512) && defined(LTC_SHA512_224_X86) && defined(LTC_SHA512_X86) - -const struct ltc_hash_descriptor sha512_224_x86_desc = -{ - "sha512-224", - 15, - 28, - 128, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 5, }, - 9, - - &sha512_224_init, - &sha512_224_x86_process, - &sha512_224_x86_done, - &sha512_224_x86_test, - NULL -}; - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (28 bytes) - @return CRYPT_OK if successful -*/ -int sha512_224_x86_done(hash_state * md, unsigned char *out) -{ - unsigned char buf[64]; - int err; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - err = sha512_x86_done(md, buf); - XMEMCPY(out, buf, 28); -#ifdef LTC_CLEAN_STACK - zeromem(buf, sizeof(buf)); -#endif - return err; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha512_224_x86_test(void) -{ - return sha512_224_test_desc(&sha512_224_x86_desc, "SHA512-224 x86"); -} - -#endif /* defined(LTC_SHA512_224) && defined(LTC_SHA512) */ diff --git a/src/hashes/sha2/sha512_256.c b/src/hashes/sha2/sha512_256.c deleted file mode 100644 index 653e9435..00000000 --- a/src/hashes/sha2/sha512_256.c +++ /dev/null @@ -1,61 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/** - @param sha512_256.c - SHA512/256 hash included in sha512.c -*/ - -#include "tomcrypt_private.h" - -#if defined(LTC_SHA512_256) && defined(LTC_SHA512) - -const struct ltc_hash_descriptor sha512_256_portable_desc = -{ - "sha512-256", - 16, - 32, - 128, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 6, }, - 9, - - &sha512_256_init, - &sha512_256_c_process, - &sha512_256_c_done, - &sha512_256_c_test, - NULL -}; - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (32 bytes) - @return CRYPT_OK if successful -*/ -int sha512_256_c_done(hash_state * md, unsigned char *out) -{ - unsigned char buf[64]; - int err; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - err = sha512_c_done(md, buf); - XMEMCPY(out, buf, 32); -#ifdef LTC_CLEAN_STACK - zeromem(buf, sizeof(buf)); -#endif - return err; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha512_256_c_test(void) -{ - return sha512_256_test_desc(&sha512_256_portable_desc, "SHA512-256 portable"); -} - -#endif /* defined(LTC_SHA512_256) && defined(LTC_SHA512) */ diff --git a/src/hashes/sha2/sha512_256_desc.c b/src/hashes/sha2/sha512_256_desc.c deleted file mode 100644 index ab648a1a..00000000 --- a/src/hashes/sha2/sha512_256_desc.c +++ /dev/null @@ -1,124 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sha512_256_desc.c - SHA512/256 multiplexer between the portable and the x86 implementation -*/ - -#if defined(LTC_SHA512_256) && defined(LTC_SHA512) - -const struct ltc_hash_descriptor sha512_256_desc = -{ - "sha512-256", - 16, - 32, - 128, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 6, }, - 9, - - &sha512_256_init, - &sha512_process, - &sha512_256_done, - &sha512_256_test, - NULL -}; - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int sha512_256_init(hash_state * md) -{ - LTC_ARGCHK(md != NULL); - - md->sha512.curlen = 0; - md->sha512.length = 0; - md->sha512.state[0] = CONST64(0x22312194FC2BF72C); - md->sha512.state[1] = CONST64(0x9F555FA3C84C64C2); - md->sha512.state[2] = CONST64(0x2393B86B6F53B151); - md->sha512.state[3] = CONST64(0x963877195940EABD); - md->sha512.state[4] = CONST64(0x96283EE2A88EFFE3); - md->sha512.state[5] = CONST64(0xBE5E1E2553863992); - md->sha512.state[6] = CONST64(0x2B0199FC2C85B8AA); - md->sha512.state[7] = CONST64(0x0EB72DDC81C52CA2); - return CRYPT_OK; -} - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (32 bytes) - @return CRYPT_OK if successful -*/ -int sha512_256_done(hash_state * md, unsigned char *out) -{ -#if defined LTC_SHA512_256_X86 - if(sha512ni_is_supported()) { - return sha512_256_x86_done(md, out); - } -#endif - return sha512_256_c_done(md, out); -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha512_256_test(void) -{ - return sha512_256_test_desc(&sha512_256_desc, "SHA512-256"); -} - -int sha512_256_test_desc(const struct ltc_hash_descriptor *desc, const char *name) -{ -#ifndef LTC_TEST - LTC_UNUSED_PARAM(desc); - LTC_UNUSED_PARAM(name); - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[32]; - } tests[] = { - { "abc", - { 0x53, 0x04, 0x8E, 0x26, 0x81, 0x94, 0x1E, 0xF9, - 0x9B, 0x2E, 0x29, 0xB7, 0x6B, 0x4C, 0x7D, 0xAB, - 0xE4, 0xC2, 0xD0, 0xC6, 0x34, 0xFC, 0x6D, 0x46, - 0xE0, 0xE2, 0xF1, 0x31, 0x07, 0xE7, 0xAF, 0x23 } - }, - { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", - { 0x39, 0x28, 0xE1, 0x84, 0xFB, 0x86, 0x90, 0xF8, - 0x40, 0xDA, 0x39, 0x88, 0x12, 0x1D, 0x31, 0xBE, - 0x65, 0xCB, 0x9D, 0x3E, 0xF8, 0x3E, 0xE6, 0x14, - 0x6F, 0xEA, 0xC8, 0x61, 0xE1, 0x9B, 0x56, 0x3A } - }, - }; - - int i; - unsigned char tmp[32]; - hash_state md; - - LTC_ARGCHK(desc != NULL); - LTC_ARGCHK(desc->init != NULL); - LTC_ARGCHK(desc->process != NULL); - LTC_ARGCHK(desc->done != NULL); - LTC_ARGCHK(name != NULL); - - for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { - desc->init(&md); - desc->process(&md, (unsigned char*)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - desc->done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), name, i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#endif /* defined(LTC_SHA512_256) && defined(LTC_SHA512) */ diff --git a/src/hashes/sha2/sha512_256_x86.c b/src/hashes/sha2/sha512_256_x86.c deleted file mode 100644 index 9c6771c0..00000000 --- a/src/hashes/sha2/sha512_256_x86.c +++ /dev/null @@ -1,61 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sha512_256_x86.c - SHA512/256 using the Intel SHA512 extension (SHA512 truncated to 256 bits) -*/ - -#if defined(LTC_SHA512_256) && defined(LTC_SHA512) && defined(LTC_SHA512_256_X86) && defined(LTC_SHA512_X86) - -const struct ltc_hash_descriptor sha512_256_x86_desc = -{ - "sha512-256", - 16, - 32, - 128, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 6, }, - 9, - - &sha512_256_init, - &sha512_256_x86_process, - &sha512_256_x86_done, - &sha512_256_x86_test, - NULL -}; - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (32 bytes) - @return CRYPT_OK if successful -*/ -int sha512_256_x86_done(hash_state * md, unsigned char *out) -{ - unsigned char buf[64]; - int err; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - err = sha512_x86_done(md, buf); - XMEMCPY(out, buf, 32); -#ifdef LTC_CLEAN_STACK - zeromem(buf, sizeof(buf)); -#endif - return err; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha512_256_x86_test(void) -{ - return sha512_256_test_desc(&sha512_256_x86_desc, "SHA512-256 x86"); -} - -#endif /* defined(LTC_SHA512_256) && defined(LTC_SHA512) */ diff --git a/src/hashes/sha2/sha512_desc.c b/src/hashes/sha2/sha512_desc.c deleted file mode 100644 index 74f97395..00000000 --- a/src/hashes/sha2/sha512_desc.c +++ /dev/null @@ -1,263 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sha512_desc.c - SHA512 multiplexer between the portable and the x86 implementation -*/ - -#if defined LTC_ARCH_X86 - -#if defined(_MSC_VER) -#include -#endif - -#if defined _MSC_VER && (!defined _MSC_FULL_VER || _MSC_FULL_VER < 160040219) -/* __cpuidex() / _xgetbv() require at least VS2008 SP1 / VS2010 SP1 */ -#define LTC_SHA512_CPUID_UNAVAILABLE -#endif - -#ifndef LTC_SHA512_CPUID_UNAVAILABLE -#if !defined (LTC_S_X86_CPUID) -#define LTC_S_X86_CPUID -static LTC_INLINE void s_x86_cpuid(int* regs, int leaf) -{ -#if defined _MSC_VER - __cpuid(regs, leaf); -#else - int a, b, c, d; - - a = leaf; - b = c = d = 0; - __asm__ volatile ("cpuid" - :"=a"(a), "=b"(b), "=c"(c), "=d"(d) - :"a"(a), "c"(c) - ); - regs[0] = a; - regs[1] = b; - regs[2] = c; - regs[3] = d; -#endif -} -#endif /* LTC_S_X86_CPUID */ - -static LTC_INLINE void s_x86_cpuid_ex(int* regs, int leaf, int subleaf) -{ -#if defined _MSC_VER - __cpuidex(regs, leaf, subleaf); -#else - int a, b, c, d; - - a = leaf; - c = subleaf; - b = d = 0; - __asm__ volatile ("cpuid" - :"=a"(a), "=b"(b), "=c"(c), "=d"(d) - :"a"(a), "c"(c) - ); - regs[0] = a; - regs[1] = b; - regs[2] = c; - regs[3] = d; -#endif -} - -static LTC_INLINE unsigned int s_x86_xgetbv0(void) -{ -#if defined _MSC_VER - return (unsigned int)_xgetbv(0); -#else - unsigned int eax_, edx_; - - __asm__ ("xgetbv" - :"=a"(eax_), "=d"(edx_) - :"c"(0) - ); - return eax_; -#endif -} -#endif /* LTC_SHA512_CPUID_UNAVAILABLE */ - -static LTC_INLINE int s_sha512_x86_is_supported(void) -{ -#ifdef LTC_SHA512_CPUID_UNAVAILABLE - return 0; -#else - static int initialized = 0; - static int is_supported = 0; - - if (initialized == 0) { - int regs[4]; - int osxsave, avx2, sha512, ymm; - /* Leaf 0, Reg 0 contains the number of leafs available */ - s_x86_cpuid(regs, 0); - if(regs[0] >= 7) { - s_x86_cpuid(regs, 1); - osxsave = ((((unsigned int)(regs[2])) >> 27) & 1u) != 0; /* OSXSAVE, leaf 1, ecx, bit 27 */ - s_x86_cpuid(regs, 7); - avx2 = ((((unsigned int)(regs[1])) >> 5) & 1u) != 0; /* AVX2, leaf 7, ebx, bit 5 */ - sha512 = 0; - if (regs[0] >= 1) { - s_x86_cpuid_ex(regs, 7, 1); - sha512 = ((((unsigned int)(regs[0])) >> 0) & 1u) != 0; /* SHA512, leaf 7 subleaf 1, eax, bit 0 */ - } - /* the OS must enable XMM+YMM state management, XCR0 bits 1 and 2 */ - ymm = osxsave && ((s_x86_xgetbv0() & 0x6u) == 0x6u); - is_supported = avx2 && sha512 && ymm; - } - initialized = 1; - } - return is_supported; -#endif /* LTC_SHA512_CPUID_UNAVAILABLE */ -} -#endif /* LTC_ARCH_X86 */ - -int sha512ni_is_supported(void) -{ -#ifdef LTC_ARCH_X86 - return s_sha512_x86_is_supported(); -#else - return 0; -#endif -} - -#ifdef LTC_SHA512 - -const struct ltc_hash_descriptor sha512_desc = -{ - "sha512", - 5, - 64, - 128, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 3, }, - 9, - - &sha512_init, - &sha512_process, - &sha512_done, - &sha512_test, - NULL -}; - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int sha512_init(hash_state * md) -{ - LTC_ARGCHK(md != NULL); - md->sha512.curlen = 0; - md->sha512.length = 0; - md->sha512.state[0] = CONST64(0x6a09e667f3bcc908); - md->sha512.state[1] = CONST64(0xbb67ae8584caa73b); - md->sha512.state[2] = CONST64(0x3c6ef372fe94f82b); - md->sha512.state[3] = CONST64(0xa54ff53a5f1d36f1); - md->sha512.state[4] = CONST64(0x510e527fade682d1); - md->sha512.state[5] = CONST64(0x9b05688c2b3e6c1f); - md->sha512.state[6] = CONST64(0x1f83d9abfb41bd6b); - md->sha512.state[7] = CONST64(0x5be0cd19137e2179); - return CRYPT_OK; -} - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -int sha512_process(hash_state * md, const unsigned char *in, unsigned long inlen) -{ -#if defined LTC_SHA512_X86 - if(s_sha512_x86_is_supported()) { - return sha512_x86_process(md, in, inlen); - } -#endif - return sha512_c_process(md, in, inlen); -} - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (64 bytes) - @return CRYPT_OK if successful -*/ -int sha512_done(hash_state * md, unsigned char *out) -{ -#if defined LTC_SHA512_X86 - if(s_sha512_x86_is_supported()) { - return sha512_x86_done(md, out); - } -#endif - return sha512_c_done(md, out); -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha512_test(void) -{ - return sha512_test_desc(&sha512_desc, "SHA512"); -} - -int sha512_test_desc(const struct ltc_hash_descriptor *desc, const char *name) -{ -#ifndef LTC_TEST - LTC_UNUSED_PARAM(desc); - LTC_UNUSED_PARAM(name); - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[64]; - } tests[] = { - { "abc", - { 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, - 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, - 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, - 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a, - 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, - 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd, - 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, - 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f } - }, - { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", - { 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda, - 0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f, - 0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1, - 0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18, - 0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4, - 0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a, - 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54, - 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09 } - }, - }; - - int i; - unsigned char tmp[64]; - hash_state md; - - LTC_ARGCHK(desc != NULL); - LTC_ARGCHK(desc->init != NULL); - LTC_ARGCHK(desc->process != NULL); - LTC_ARGCHK(desc->done != NULL); - LTC_ARGCHK(name != NULL); - - for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { - desc->init(&md); - desc->process(&md, (unsigned char *)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); - desc->done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), name, i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/hashes/sha2/sha512_x86.c b/src/hashes/sha2/sha512_x86.c deleted file mode 100644 index 97f9266b..00000000 --- a/src/hashes/sha2/sha512_x86.c +++ /dev/null @@ -1,445 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sha512_x86.c - SHA512 by Marek Knapek -*/ - -#if defined(LTC_SHA512) && defined(LTC_SHA512_X86) - -#if defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wcast-align" -#pragma GCC diagnostic ignored "-Wdeclaration-after-statement" -#pragma GCC diagnostic ignored "-Wuninitialized" -#pragma GCC diagnostic ignored "-Wunused-function" -#endif -#if defined(_MSC_VER) -#include -#endif -#include /* SSE2 _mm_set_epi64x */ -#include /* AVX _mm256_castsi128_si256 _mm256_castsi256_si128 _mm256_load_si256 _mm256_loadu_si256 _mm256_storeu_si256 - AVX2 _mm256_add_epi64 _mm256_blend_epi32 _mm256_permute4x64_epi64 _mm256_shuffle_epi8 - SHA512 _mm256_sha512msg1_epi64 _mm256_sha512msg2_epi64 _mm256_sha512rnds2_epi64 */ -#if defined(__GNUC__) -#pragma GCC diagnostic pop -#endif - -const struct ltc_hash_descriptor sha512_x86_desc = -{ - "sha512", - 5, - 64, - 128, - - /* OID */ - { 2, 16, 840, 1, 101, 3, 4, 2, 3, }, - 9, - - &sha512_init, - &sha512_x86_process, - &sha512_x86_done, - &sha512_x86_test, - NULL -}; - -/* the K array */ -#define K sha512_x86_K -LTC_ALIGN_MSVC(32) -static const ulong64 K[80] LTC_ALIGN(32) = { -CONST64(0x428a2f98d728ae22), CONST64(0x7137449123ef65cd), -CONST64(0xb5c0fbcfec4d3b2f), CONST64(0xe9b5dba58189dbbc), -CONST64(0x3956c25bf348b538), CONST64(0x59f111f1b605d019), -CONST64(0x923f82a4af194f9b), CONST64(0xab1c5ed5da6d8118), -CONST64(0xd807aa98a3030242), CONST64(0x12835b0145706fbe), -CONST64(0x243185be4ee4b28c), CONST64(0x550c7dc3d5ffb4e2), -CONST64(0x72be5d74f27b896f), CONST64(0x80deb1fe3b1696b1), -CONST64(0x9bdc06a725c71235), CONST64(0xc19bf174cf692694), -CONST64(0xe49b69c19ef14ad2), CONST64(0xefbe4786384f25e3), -CONST64(0x0fc19dc68b8cd5b5), CONST64(0x240ca1cc77ac9c65), -CONST64(0x2de92c6f592b0275), CONST64(0x4a7484aa6ea6e483), -CONST64(0x5cb0a9dcbd41fbd4), CONST64(0x76f988da831153b5), -CONST64(0x983e5152ee66dfab), CONST64(0xa831c66d2db43210), -CONST64(0xb00327c898fb213f), CONST64(0xbf597fc7beef0ee4), -CONST64(0xc6e00bf33da88fc2), CONST64(0xd5a79147930aa725), -CONST64(0x06ca6351e003826f), CONST64(0x142929670a0e6e70), -CONST64(0x27b70a8546d22ffc), CONST64(0x2e1b21385c26c926), -CONST64(0x4d2c6dfc5ac42aed), CONST64(0x53380d139d95b3df), -CONST64(0x650a73548baf63de), CONST64(0x766a0abb3c77b2a8), -CONST64(0x81c2c92e47edaee6), CONST64(0x92722c851482353b), -CONST64(0xa2bfe8a14cf10364), CONST64(0xa81a664bbc423001), -CONST64(0xc24b8b70d0f89791), CONST64(0xc76c51a30654be30), -CONST64(0xd192e819d6ef5218), CONST64(0xd69906245565a910), -CONST64(0xf40e35855771202a), CONST64(0x106aa07032bbd1b8), -CONST64(0x19a4c116b8d2d0c8), CONST64(0x1e376c085141ab53), -CONST64(0x2748774cdf8eeb99), CONST64(0x34b0bcb5e19b48a8), -CONST64(0x391c0cb3c5c95a63), CONST64(0x4ed8aa4ae3418acb), -CONST64(0x5b9cca4f7763e373), CONST64(0x682e6ff3d6b2b8a3), -CONST64(0x748f82ee5defb2fc), CONST64(0x78a5636f43172f60), -CONST64(0x84c87814a1f0ab72), CONST64(0x8cc702081a6439ec), -CONST64(0x90befffa23631e28), CONST64(0xa4506cebde82bde9), -CONST64(0xbef9a3f7b2c67915), CONST64(0xc67178f2e372532b), -CONST64(0xca273eceea26619c), CONST64(0xd186b8c721c0c207), -CONST64(0xeada7dd6cde0eb1e), CONST64(0xf57d4f7fee6ed178), -CONST64(0x06f067aa72176fba), CONST64(0x0a637dc5a2c898a6), -CONST64(0x113f9804bef90dae), CONST64(0x1b710b35131c471b), -CONST64(0x28db77f523047d84), CONST64(0x32caab7b40c72493), -CONST64(0x3c9ebe0a15c9bebc), CONST64(0x431d67c49c100d4c), -CONST64(0x4cc5d4becb3e42b6), CONST64(0x597f299cfc657e2a), -CONST64(0x5fcb6fab3ad6faec), CONST64(0x6c44198c4a475817) -}; - -/* compress 1024-bits */ -#ifdef LTC_CLEAN_STACK -static int LTC_SHA512_TARGET ss_sha512_x86_compress(hash_state * md, const unsigned char *buf) -#else -static int LTC_SHA512_TARGET s_sha512_x86_compress(hash_state * md, const unsigned char *buf) -#endif -{ -#define ltc_permute_epi64_k(a, b, c, d) ((((a) & 0x3) << (3 * 2)) | (((b) & 0x3) << (2 * 2)) | (((c) & 0x3) << (1 * 2)) | (((d) & 0x3) << (0 * 2))) -#define ltc_blend_epi32_k(a, b, c, d, e, f, g, h) ((((a) & 0x1) << 7) | (((b) & 0x1) << 6) | (((c) & 0x1) << 5) | (((d) & 0x1) << 4) | (((e) & 0x1) << 3) | (((f) & 0x1) << 2) | (((g) & 0x1) << 1) | (((h) & 0x1) << 0)) -#define ltc_blend_epi64_k(a, b, c, d) ((((a) & 0x1) << 3) | (((b) & 0x1) << 2) | (((c) & 0x1) << 1) | (((d) & 0x1) << 0)) -#define ltc_mm256_blend_epi64(a, b, c) _mm256_blend_epi32((a), (b), ltc_blend_epi32_k((((c) >> 3) & 0x1), (((c) >> 3) & 0x1), (((c) >> 2) & 0x1), (((c) >> 2) & 0x1), (((c) >> 1) & 0x1), (((c) >> 1) & 0x1), (((c) >> 0) & 0x1), (((c) >> 0) & 0x1))) -#define any 0 - - __m256i reverse; - __m256i state_a; - __m256i state_b; - __m256i tmp_a; - __m256i tmp_b; - __m256i tmp_c; - __m256i tmp_d; - __m256i old_a; - __m256i old_b; - __m256i msg_a; - __m256i msg_b; - __m256i msg_c; - __m256i msg_d; - - reverse = _mm256_permute4x64_epi64(_mm256_castsi128_si256(_mm_set_epi64x(0x08090a0b0c0d0e0full, 0x0001020304050607ull)), ltc_permute_epi64_k(0x1, 0x0, 0x1, 0x0)); - state_a = _mm256_loadu_si256(((__m256i const*)(&md->sha512.state[0]))); - state_b = _mm256_loadu_si256(((__m256i const*)(&md->sha512.state[4]))); - tmp_a = _mm256_permute4x64_epi64(state_b, ltc_permute_epi64_k(any, any, 0x2, 0x3)); - tmp_b = _mm256_permute4x64_epi64(state_a, ltc_permute_epi64_k(0x2, 0x3, any, any)); - tmp_c = _mm256_permute4x64_epi64(state_b, ltc_permute_epi64_k(any, any, 0x0, 0x1)); - tmp_d = _mm256_permute4x64_epi64(state_a, ltc_permute_epi64_k(0x0, 0x1, any, any)); - state_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x1, 0x0, 0x0)); - state_b = ltc_mm256_blend_epi64(tmp_c, tmp_d, ltc_blend_epi64_k(0x1, 0x1, 0x0, 0x0)); - - old_a = state_a; - old_b = state_b; - tmp_a = _mm256_load_si256(((__m256i const*)(&K[0 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - msg_a = _mm256_loadu_si256(((__m256i const*)(&buf[0 * (256 / CHAR_BIT)]))); - msg_a = _mm256_shuffle_epi8(msg_a, reverse); - tmp_a = _mm256_add_epi64(tmp_a, msg_a); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[1 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - msg_b = _mm256_loadu_si256(((__m256i const*)(&buf[1 * (256 / CHAR_BIT)]))); - msg_b = _mm256_shuffle_epi8(msg_b, reverse); - tmp_a = _mm256_add_epi64(tmp_a, msg_b); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[2 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - msg_c = _mm256_loadu_si256(((__m256i const*)(&buf[2 * (256 / CHAR_BIT)]))); - msg_c = _mm256_shuffle_epi8(msg_c, reverse); - tmp_a = _mm256_add_epi64(tmp_a, msg_c); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[3 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - msg_d = _mm256_loadu_si256(((__m256i const*)(&buf[3 * (256 / CHAR_BIT)]))); - msg_d = _mm256_shuffle_epi8(msg_d, reverse); - tmp_a = _mm256_add_epi64(tmp_a, msg_d); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_a = _mm256_sha512msg1_epi64(msg_a, _mm256_castsi256_si128(msg_b)); - tmp_a = _mm256_permute4x64_epi64(msg_c, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_d, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_a); - msg_a = _mm256_sha512msg2_epi64(tmp_a, msg_d); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[4 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_a); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_b = _mm256_sha512msg1_epi64(msg_b, _mm256_castsi256_si128(msg_c)); - tmp_a = _mm256_permute4x64_epi64(msg_d, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_a, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_b); - msg_b = _mm256_sha512msg2_epi64(tmp_a, msg_a); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[5 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_b); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_c = _mm256_sha512msg1_epi64(msg_c, _mm256_castsi256_si128(msg_d)); - tmp_a = _mm256_permute4x64_epi64(msg_a, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_b, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_c); - msg_c = _mm256_sha512msg2_epi64(tmp_a, msg_b); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[6 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_c); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_d = _mm256_sha512msg1_epi64(msg_d, _mm256_castsi256_si128(msg_a)); - tmp_a = _mm256_permute4x64_epi64(msg_b, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_c, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_d); - msg_d = _mm256_sha512msg2_epi64(tmp_a, msg_c); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[7 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_d); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_a = _mm256_sha512msg1_epi64(msg_a, _mm256_castsi256_si128(msg_b)); - tmp_a = _mm256_permute4x64_epi64(msg_c, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_d, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_a); - msg_a = _mm256_sha512msg2_epi64(tmp_a, msg_d); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[8 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_a); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_b = _mm256_sha512msg1_epi64(msg_b, _mm256_castsi256_si128(msg_c)); - tmp_a = _mm256_permute4x64_epi64(msg_d, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_a, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_b); - msg_b = _mm256_sha512msg2_epi64(tmp_a, msg_a); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[9 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_b); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_c = _mm256_sha512msg1_epi64(msg_c, _mm256_castsi256_si128(msg_d)); - tmp_a = _mm256_permute4x64_epi64(msg_a, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_b, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_c); - msg_c = _mm256_sha512msg2_epi64(tmp_a, msg_b); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[10 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_c); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_d = _mm256_sha512msg1_epi64(msg_d, _mm256_castsi256_si128(msg_a)); - tmp_a = _mm256_permute4x64_epi64(msg_b, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_c, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_d); - msg_d = _mm256_sha512msg2_epi64(tmp_a, msg_c); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[11 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_d); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_a = _mm256_sha512msg1_epi64(msg_a, _mm256_castsi256_si128(msg_b)); - tmp_a = _mm256_permute4x64_epi64(msg_c, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_d, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_a); - msg_a = _mm256_sha512msg2_epi64(tmp_a, msg_d); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[12 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_a); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_b = _mm256_sha512msg1_epi64(msg_b, _mm256_castsi256_si128(msg_c)); - tmp_a = _mm256_permute4x64_epi64(msg_d, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_a, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_b); - msg_b = _mm256_sha512msg2_epi64(tmp_a, msg_a); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[13 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_b); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_c = _mm256_sha512msg1_epi64(msg_c, _mm256_castsi256_si128(msg_d)); - tmp_a = _mm256_permute4x64_epi64(msg_a, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_b, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_c); - msg_c = _mm256_sha512msg2_epi64(tmp_a, msg_b); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[14 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_c); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_d = _mm256_sha512msg1_epi64(msg_d, _mm256_castsi256_si128(msg_a)); - tmp_a = _mm256_permute4x64_epi64(msg_b, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_c, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_d); - msg_d = _mm256_sha512msg2_epi64(tmp_a, msg_c); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[15 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_d); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_a = _mm256_sha512msg1_epi64(msg_a, _mm256_castsi256_si128(msg_b)); - tmp_a = _mm256_permute4x64_epi64(msg_c, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_d, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_a); - msg_a = _mm256_sha512msg2_epi64(tmp_a, msg_d); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[16 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_a); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_b = _mm256_sha512msg1_epi64(msg_b, _mm256_castsi256_si128(msg_c)); - tmp_a = _mm256_permute4x64_epi64(msg_d, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_a, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_b); - msg_b = _mm256_sha512msg2_epi64(tmp_a, msg_a); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[17 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_b); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_c = _mm256_sha512msg1_epi64(msg_c, _mm256_castsi256_si128(msg_d)); - tmp_a = _mm256_permute4x64_epi64(msg_a, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_b, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_c); - msg_c = _mm256_sha512msg2_epi64(tmp_a, msg_b); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[18 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_c); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - msg_d = _mm256_sha512msg1_epi64(msg_d, _mm256_castsi256_si128(msg_a)); - tmp_a = _mm256_permute4x64_epi64(msg_b, ltc_permute_epi64_k(any, 0x3, 0x2, 0x1)); - tmp_b = _mm256_permute4x64_epi64(msg_c, ltc_permute_epi64_k(0x0, any, any, any)); - tmp_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x0, 0x0, 0x0)); - tmp_a = _mm256_add_epi64(tmp_a, msg_d); - msg_d = _mm256_sha512msg2_epi64(tmp_a, msg_c); - tmp_a = _mm256_load_si256(((__m256i const*)(&K[19 * (256 / (sizeof(ulong64) * CHAR_BIT))]))); - tmp_a = _mm256_add_epi64(tmp_a, msg_d); - state_a = _mm256_sha512rnds2_epi64(state_a, state_b, _mm256_castsi256_si128(tmp_a)); - tmp_a = _mm256_permute4x64_epi64(tmp_a, ltc_permute_epi64_k(any, any, 0x3, 0x2)); - state_b = _mm256_sha512rnds2_epi64(state_b, state_a, _mm256_castsi256_si128(tmp_a)); - state_a = _mm256_add_epi64(state_a, old_a); - state_b = _mm256_add_epi64(state_b, old_b); - - tmp_a = _mm256_permute4x64_epi64(state_b, ltc_permute_epi64_k(any, any, 0x2, 0x3)); - tmp_b = _mm256_permute4x64_epi64(state_a, ltc_permute_epi64_k(0x2, 0x3, any, any)); - tmp_c = _mm256_permute4x64_epi64(state_b, ltc_permute_epi64_k(any, any, 0x0, 0x1)); - tmp_d = _mm256_permute4x64_epi64(state_a, ltc_permute_epi64_k(0x0, 0x1, any, any)); - state_a = ltc_mm256_blend_epi64(tmp_a, tmp_b, ltc_blend_epi64_k(0x1, 0x1, 0x0, 0x0)); - state_b = ltc_mm256_blend_epi64(tmp_c, tmp_d, ltc_blend_epi64_k(0x1, 0x1, 0x0, 0x0)); - _mm256_storeu_si256(((__m256i*)(&md->sha512.state[0])), state_a); - _mm256_storeu_si256(((__m256i*)(&md->sha512.state[4])), state_b); - return CRYPT_OK; - -#undef ltc_permute_epi64_k -#undef ltc_blend_epi32_k -#undef ltc_blend_epi64_k -#undef ltc_mm256_blend_epi64 -#undef any -} -#undef K - -/* compress 1024-bits */ -#ifdef LTC_CLEAN_STACK -static int s_sha512_x86_compress(hash_state * md, const unsigned char *buf) -{ - int err; - err = ss_sha512_x86_compress(md, buf); - burn_stack(sizeof(ulong64) * 90 + sizeof(int)); - return err; -} -#endif - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(sha512_x86_process, s_sha512_x86_compress, sha512, 128) - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (64 bytes) - @return CRYPT_OK if successful -*/ -int sha512_x86_done(hash_state * md, unsigned char *out) -{ - int i; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - if (md->sha512.curlen >= sizeof(md->sha512.buf)) { - return CRYPT_INVALID_ARG; - } - - - /* increase the length of the message */ - md->sha512.length += md->sha512.curlen * CONST64(8); - - /* append the '1' bit */ - md->sha512.buf[md->sha512.curlen++] = (unsigned char)0x80; - - /* if the length is currently above 112 bytes we append zeros - * then compress. Then we can fall back to padding zeros and length - * encoding like normal. - */ - if (md->sha512.curlen > 112) { - while (md->sha512.curlen < 128) { - md->sha512.buf[md->sha512.curlen++] = (unsigned char)0; - } - s_sha512_x86_compress(md, md->sha512.buf); - md->sha512.curlen = 0; - } - - /* pad upto 120 bytes of zeroes - * note: that from 112 to 120 is the 64 MSB of the length. We assume that you won't hash - * > 2^64 bits of data... :-) - */ - while (md->sha512.curlen < 120) { - md->sha512.buf[md->sha512.curlen++] = (unsigned char)0; - } - - /* store length */ - STORE64H(md->sha512.length, md->sha512.buf+120); - s_sha512_x86_compress(md, md->sha512.buf); - - /* copy output */ - for (i = 0; i < 8; i++) { - STORE64H(md->sha512.state[i], out+(8*i)); - } -#ifdef LTC_CLEAN_STACK - zeromem(md, sizeof(hash_state)); -#endif - return CRYPT_OK; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha512_x86_test(void) -{ - return sha512_test_desc(&sha512_x86_desc, "SHA512 x86"); -} - -#endif /* defined(LTC_SHA512) && defined(LTC_SHA512_X86) */ diff --git a/src/hashes/sha3.c b/src/hashes/sha3.c deleted file mode 100644 index ec29e386..00000000 --- a/src/hashes/sha3.c +++ /dev/null @@ -1,639 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* based on https://github.com/brainhub/SHA3IUF (public domain) */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SHA3 - -const struct ltc_hash_descriptor sha3_224_desc = -{ - "sha3-224", /* name of hash */ - 17, /* internal ID */ - 28, /* Size of digest in octets */ - 144, /* Input block size in octets */ - { 2,16,840,1,101,3,4,2,7 }, /* ASN.1 OID */ - 9, /* Length OID */ - &sha3_224_init, - &sha3_process, - &sha3_done, - &sha3_224_test, - NULL -}; - -const struct ltc_hash_descriptor sha3_256_desc = -{ - "sha3-256", /* name of hash */ - 18, /* internal ID */ - 32, /* Size of digest in octets */ - 136, /* Input block size in octets */ - { 2,16,840,1,101,3,4,2,8 }, /* ASN.1 OID */ - 9, /* Length OID */ - &sha3_256_init, - &sha3_process, - &sha3_done, - &sha3_256_test, - NULL -}; - -const struct ltc_hash_descriptor sha3_384_desc = -{ - "sha3-384", /* name of hash */ - 19, /* internal ID */ - 48, /* Size of digest in octets */ - 104, /* Input block size in octets */ - { 2,16,840,1,101,3,4,2,9 }, /* ASN.1 OID */ - 9, /* Length OID */ - &sha3_384_init, - &sha3_process, - &sha3_done, - &sha3_384_test, - NULL -}; - -const struct ltc_hash_descriptor sha3_512_desc = -{ - "sha3-512", /* name of hash */ - 20, /* internal ID */ - 64, /* Size of digest in octets */ - 72, /* Input block size in octets */ - { 2,16,840,1,101,3,4,2,10 }, /* ASN.1 OID */ - 9, /* Length OID */ - &sha3_512_init, - &sha3_process, - &sha3_done, - &sha3_512_test, - NULL -}; - -const struct ltc_hash_descriptor shake128_desc = -{ - "shake128", /* name of hash */ - 34, /* internal ID */ - 32, /* Size of digest in octets */ - 168, /* Input block size in octets */ - { 2,16,840,1,101,3,4,2,11 }, /* ASN.1 OID */ - 9, /* Length OID */ - &sha3_shake128_init, - &sha3_process, - &sha3_shake128_done, - &sha3_shake128_test, - NULL -}; - -const struct ltc_hash_descriptor shake256_desc = -{ - "shake256", /* name of hash */ - 35, /* internal ID */ - 64, /* Size of digest in octets */ - 136, /* Input block size in octets */ - { 2,16,840,1,101,3,4,2,12 }, /* ASN.1 OID */ - 9, /* Length OID */ - &sha3_shake256_init, - &sha3_process, - &sha3_shake256_done, - &sha3_shake256_test, - NULL -}; -#endif - -#ifdef LTC_KECCAK -const struct ltc_hash_descriptor keccak224_desc = -{ - "keccak224", /* name of hash */ - 29, /* internal ID */ - 28, /* Size of digest in octets */ - 144, /* Input block size in octets */ - { 0 }, 0, /* no ASN.1 OID */ - &sha3_224_init, - &sha3_process, - &keccak_done, - &keccak_224_test, - NULL -}; - -const struct ltc_hash_descriptor keccak256_desc = -{ - "keccak256", /* name of hash */ - 30, /* internal ID */ - 32, /* Size of digest in octets */ - 136, /* Input block size in octets */ - { 0 }, 0, /* no ASN.1 OID */ - &sha3_256_init, - &sha3_process, - &keccak_done, - &keccak_256_test, - NULL -}; - -const struct ltc_hash_descriptor keccak384_desc = -{ - "keccak384", /* name of hash */ - 31, /* internal ID */ - 48, /* Size of digest in octets */ - 104, /* Input block size in octets */ - { 0 }, 0, /* no ASN.1 OID */ - &sha3_384_init, - &sha3_process, - &keccak_done, - &keccak_384_test, - NULL -}; - -const struct ltc_hash_descriptor keccak512_desc = -{ - "keccak512", /* name of hash */ - 32, /* internal ID */ - 64, /* Size of digest in octets */ - 72, /* Input block size in octets */ - { 0 }, 0, /* no ASN.1 OID */ - &sha3_512_init, - &sha3_process, - &keccak_done, - &keccak_512_test, - NULL -}; -#endif - -#if defined(LTC_SHA3) || defined(LTC_KECCAK) - -#define SHA3_KECCAK_SPONGE_WORDS 25 /* 1600 bits > 200 bytes > 25 x ulong64 */ -#define SHA3_KECCAK_ROUNDS 24 -#define SHA3_KECCAK_RC_OFFSET 0 -#define SHA3_KECCAK_TURBO_ROUNDS 12 -#define SHA3_KECCAK_TURBO_RC_OFFSET 12 - -static const ulong64 s_keccakf_rndc[24] = { - CONST64(0x0000000000000001), CONST64(0x0000000000008082), - CONST64(0x800000000000808a), CONST64(0x8000000080008000), - CONST64(0x000000000000808b), CONST64(0x0000000080000001), - CONST64(0x8000000080008081), CONST64(0x8000000000008009), - CONST64(0x000000000000008a), CONST64(0x0000000000000088), - CONST64(0x0000000080008009), CONST64(0x000000008000000a), - CONST64(0x000000008000808b), CONST64(0x800000000000008b), - CONST64(0x8000000000008089), CONST64(0x8000000000008003), - CONST64(0x8000000000008002), CONST64(0x8000000000000080), - CONST64(0x000000000000800a), CONST64(0x800000008000000a), - CONST64(0x8000000080008081), CONST64(0x8000000000008080), - CONST64(0x0000000080000001), CONST64(0x8000000080008008) -}; - -static const unsigned s_keccakf_rotc[24] = { - 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 2, 14, 27, 41, 56, 8, 25, 43, 62, 18, 39, 61, 20, 44 -}; - -static const unsigned s_keccakf_piln[24] = { - 10, 7, 11, 17, 18, 3, 5, 16, 8, 21, 24, 4, 15, 23, 19, 13, 12, 2, 20, 14, 22, 9, 6, 1 -}; - -static LTC_INLINE void s_keccak_f(ulong64 s[25], int max_rounds, int rc_offset) -{ - int i, j, round; - ulong64 t, bc[5]; - - for(round = 0; round < max_rounds; round++) { - /* Theta */ - for(i = 0; i < 5; i++) { - bc[i] = s[i] ^ s[i + 5] ^ s[i + 10] ^ s[i + 15] ^ s[i + 20]; - } - for(i = 0; i < 5; i++) { - t = bc[(i + 4) % 5] ^ ROL64(bc[(i + 1) % 5], 1); - for(j = 0; j < 25; j += 5) { - s[j + i] ^= t; - } - } - /* Rho Pi */ - t = s[1]; - for(i = 0; i < 24; i++) { - j = s_keccakf_piln[i]; - bc[0] = s[j]; - s[j] = ROL64(t, s_keccakf_rotc[i]); - t = bc[0]; - } - /* Chi */ - for(j = 0; j < 25; j += 5) { - for(i = 0; i < 5; i++) { - bc[i] = s[j + i]; - } - for(i = 0; i < 5; i++) { - s[j + i] ^= (~bc[(i + 1) % 5]) & bc[(i + 2) % 5]; - } - } - /* Iota */ - s[0] ^= s_keccakf_rndc[rc_offset + round]; - } -} - -static void s_keccakf(ulong64 s[25]) -{ - s_keccak_f(s, SHA3_KECCAK_ROUNDS, SHA3_KECCAK_RC_OFFSET); -} - -#if defined LTC_TURBO_SHAKE -static void s_keccak_turbo_f(ulong64 s[25]) -{ - s_keccak_f(s, SHA3_KECCAK_TURBO_ROUNDS, SHA3_KECCAK_TURBO_RC_OFFSET); -} -#endif - - -static LTC_INLINE int s_sha3_done(struct sha3_state *sha3, unsigned char *hash, ulong64 pad) -{ - unsigned i; - - LTC_ARGCHK(sha3 != NULL); - LTC_ARGCHK(hash != NULL); - - sha3->s[sha3->word_index] ^= (sha3->saved ^ (pad << (sha3->byte_index * 8))); - sha3->s[SHA3_KECCAK_SPONGE_WORDS - sha3->capacity_words - 1] ^= CONST64(0x8000000000000000); - s_keccakf(sha3->s); - - /* store s[] as little-endian bytes into sb */ - for(i = 0; i < SHA3_KECCAK_SPONGE_WORDS; i++) { - STORE64L(sha3->s[i], sha3->sb + i * 8); - } - - XMEMCPY(hash, sha3->sb, sha3->capacity_words * 4); - return CRYPT_OK; -} - -/* Public Inteface */ - -int sha3_224_init(hash_state *md) -{ - LTC_ARGCHK(md != NULL); - XMEMSET(&md->sha3, 0, sizeof(md->sha3)); - md->sha3.capacity_words = 2 * 224 / (8 * sizeof(ulong64)); - return CRYPT_OK; -} - -int sha3_256_init(hash_state *md) -{ - LTC_ARGCHK(md != NULL); - XMEMSET(&md->sha3, 0, sizeof(md->sha3)); - md->sha3.capacity_words = 2 * 256 / (8 * sizeof(ulong64)); - return CRYPT_OK; -} - -int sha3_384_init(hash_state *md) -{ - LTC_ARGCHK(md != NULL); - XMEMSET(&md->sha3, 0, sizeof(md->sha3)); - md->sha3.capacity_words = 2 * 384 / (8 * sizeof(ulong64)); - return CRYPT_OK; -} - -int sha3_512_init(hash_state *md) -{ - LTC_ARGCHK(md != NULL); - XMEMSET(&md->sha3, 0, sizeof(md->sha3)); - md->sha3.capacity_words = 2 * 512 / (8 * sizeof(ulong64)); - return CRYPT_OK; -} - -#ifdef LTC_SHA3 -static LTC_INLINE int s_sha3_shake_init(struct sha3_state *sha3, int num) -{ - LTC_ARGCHK(sha3 != NULL); - if (num != 128 && num != 256) return CRYPT_INVALID_ARG; - XMEMSET(sha3, 0, sizeof(*sha3)); - sha3->capacity_words = (unsigned short)(2 * num / (8 * sizeof(ulong64))); - return CRYPT_OK; -} - -int sha3_shake128_init(hash_state *md) -{ - return s_sha3_shake_init(&md->sha3, 128); -} - -int sha3_shake256_init(hash_state *md) -{ - return s_sha3_shake_init(&md->sha3, 256); -} - -int sha3_shake_init(hash_state *md, int num) -{ - return s_sha3_shake_init(&md->sha3, num); -} -#endif - -typedef void (*process_fn)(ulong64 s[25]); -static LTC_INLINE int s_sha3_process(struct sha3_state *sha3, const unsigned char *in, unsigned long inlen, process_fn proc_f) -{ - unsigned long words; - unsigned old_tail, tail; - unsigned long i; - - LTC_ARGCHK(sha3 != NULL); - LTC_ARGCHK(in != NULL); - - if (inlen == 0) return CRYPT_OK; /* nothing to do */ - - /* 0...7 -- how much is needed to have a word */ - old_tail = (8 - sha3->byte_index) & 7; - - if(inlen < old_tail) { /* have no complete word or haven't started the word yet */ - while (inlen--) sha3->saved |= (ulong64) (*(in++)) << ((sha3->byte_index++) * 8); - return CRYPT_OK; - } - - if(old_tail) { /* will have one word to process */ - inlen -= old_tail; - while (old_tail--) sha3->saved |= (ulong64) (*(in++)) << ((sha3->byte_index++) * 8); - /* now ready to add saved to the sponge */ - sha3->s[sha3->word_index] ^= sha3->saved; - sha3->byte_index = 0; - sha3->saved = 0; - if(++sha3->word_index == (SHA3_KECCAK_SPONGE_WORDS - sha3->capacity_words)) { - proc_f(sha3->s); - sha3->word_index = 0; - } - } - - /* now work in full words directly from input */ - words = inlen / sizeof(ulong64); - tail = inlen - words * sizeof(ulong64); - - for(i = 0; i < words; i++, in += sizeof(ulong64)) { - ulong64 t; - LOAD64L(t, in); - sha3->s[sha3->word_index] ^= t; - if(++sha3->word_index == (SHA3_KECCAK_SPONGE_WORDS - sha3->capacity_words)) { - proc_f(sha3->s); - sha3->word_index = 0; - } - } - - /* finally, save the partial word */ - while (tail--) { - sha3->saved |= (ulong64) (*(in++)) << ((sha3->byte_index++) * 8); - } - return CRYPT_OK; -} - -int sha3_process(hash_state *md, const unsigned char *in, unsigned long inlen) -{ - return s_sha3_process(&md->sha3, in, inlen, s_keccakf); -} - -#if defined LTC_TURBO_SHAKE -static LTC_INLINE int s_turbo_shake_process(struct sha3_state *sha3, const unsigned char *in, unsigned long inlen) -{ - return s_sha3_process(sha3, in, inlen, s_keccak_turbo_f); -} - -int turbo_shake_process(hash_state *md, const unsigned char *in, unsigned long inlen) -{ - return s_turbo_shake_process(&md->sha3, in, inlen); -} -#endif - -#ifdef LTC_SHA3 -int sha3_done(hash_state *md, unsigned char *out) -{ - return s_sha3_done(&md->sha3, out, CONST64(0x06)); -} -#endif - -#ifdef LTC_KECCAK -int keccak_done(hash_state *md, unsigned char *out) -{ - return s_sha3_done(&md->sha3, out, CONST64(0x01)); -} -#endif - -#ifdef LTC_SHA3 -static LTC_INLINE int s_sha3_shake_done(struct sha3_state *sha3, unsigned char *out, unsigned long outlen, unsigned char domain, process_fn proc_f) -{ - /* IMPORTANT NOTE: sha3_shake_done can be called many times */ - unsigned long idx; - unsigned i; - - if (outlen == 0) return CRYPT_OK; /* nothing to do */ - LTC_ARGCHK(sha3 != NULL); - LTC_ARGCHK(out != NULL); - - if (!sha3->xof_flag) { - /* shake_xof operation must be done only once */ - sha3->s[sha3->word_index] ^= (sha3->saved ^ (((ulong64)(domain)) << (sha3->byte_index * 8))); - sha3->s[SHA3_KECCAK_SPONGE_WORDS - sha3->capacity_words - 1] ^= CONST64(0x8000000000000000); - proc_f(sha3->s); - /* store s[] as little-endian bytes into sb */ - for(i = 0; i < SHA3_KECCAK_SPONGE_WORDS; i++) { - STORE64L(sha3->s[i], sha3->sb + i * 8); - } - sha3->byte_index = 0; - sha3->xof_flag = 1; - } - - for (idx = 0; idx < outlen; idx++) { - if(sha3->byte_index >= (SHA3_KECCAK_SPONGE_WORDS - sha3->capacity_words) * 8) { - proc_f(sha3->s); - /* store s[] as little-endian bytes into sb */ - for(i = 0; i < SHA3_KECCAK_SPONGE_WORDS; i++) { - STORE64L(sha3->s[i], sha3->sb + i * 8); - } - sha3->byte_index = 0; - } - out[idx] = sha3->sb[sha3->byte_index++]; - } - return CRYPT_OK; -} - -int sha3_shake_done(hash_state *md, unsigned char *out, unsigned long outlen) -{ - return s_sha3_shake_done(&md->sha3, out, outlen, 0x1f, s_keccakf); -} - -#ifdef LTC_KMAC -int sha3_shake_done_ex(hash_state *md, unsigned char *out, unsigned long outlen, unsigned char domain) -{ - return s_sha3_shake_done(&md->sha3, out, outlen, domain, s_keccakf); -} -#endif - -int sha3_shake128_done(hash_state *md, unsigned char *out) -{ - return sha3_shake_done(md, out, 32); -} - -int sha3_shake256_done(hash_state *md, unsigned char *out) -{ - return sha3_shake_done(md, out, 64); -} - -#if defined LTC_TURBO_SHAKE -static LTC_INLINE int s_turbo_shake_done(struct sha3_state *sha3, unsigned char *out, unsigned long outlen) -{ - return s_sha3_shake_done(sha3, out, outlen, 0x1f, s_keccak_turbo_f); -} -int turbo_shake_done(hash_state *md, unsigned char *out, unsigned long outlen) -{ - return s_turbo_shake_done(&md->sha3, out, outlen); -} -#endif - -int sha3_shake_memory(int num, const unsigned char *in, unsigned long inlen, unsigned char *out, const unsigned long *outlen) -{ - hash_state md; - int err; - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - if ((err = sha3_shake_init(&md, num)) != CRYPT_OK) return err; - if ((err = sha3_shake_process(&md, in, inlen)) != CRYPT_OK) return err; - if ((err = sha3_shake_done(&md, out, *outlen)) != CRYPT_OK) return err; - return CRYPT_OK; -} -#endif - -#ifdef LTC_KANGAROO_TWELVE - -static const unsigned char kangaroo_twelve_filler[] = { 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -int kangaroo_twelve_init(hash_state *md, int num) -{ - int err; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(num == 128 || num == 256); - - if ((err = s_sha3_shake_init(&md->kt.outer, num)) != CRYPT_OK) return err; - if ((err = s_sha3_shake_init(&md->kt.inner, num)) != CRYPT_OK) return err; - md->kt.blocks_count = 0; - md->kt.customization_len = 0; - md->kt.remaining = 8 * 1024; - md->kt.phase = 0; - md->kt.finished = 0; - return CRYPT_OK; -} - -static LTC_INLINE int s_kangaroo_twelve_process(hash_state *md, const unsigned char *in, unsigned long inlen) -{ - unsigned long rem; - unsigned long amount; - int err; - int variant; - int digest_len; - unsigned char digest_buf[64]; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(in != NULL || inlen == 0); - - if (md->kt.phase == 0) - { - rem = md->kt.remaining; - amount = rem < inlen ? rem : inlen; - md->kt.remaining -= amount; - if ((err = s_turbo_shake_process(&md->kt.outer, in, amount)) != CRYPT_OK) return err; - in += amount; - inlen -= amount; - if (md->kt.remaining == 0 && inlen != 0) - { - md->kt.remaining = 8 * 1024; - md->kt.phase = 1; - md->kt.blocks_count += 1; - if ((err = s_turbo_shake_process(&md->kt.outer, kangaroo_twelve_filler, sizeof(kangaroo_twelve_filler))) != CRYPT_OK) return err; - } - } - if (md->kt.phase == 1) - { - do - { - rem = md->kt.remaining; - amount = rem < inlen ? rem : inlen; - md->kt.remaining -= amount; - if ((err = s_turbo_shake_process(&md->kt.inner, in, amount)) != CRYPT_OK) return err; - in += amount; - inlen -= amount; - if (md->kt.remaining == 0 && inlen != 0) - { - md->kt.remaining = 8 * 1024; - md->kt.blocks_count += 1; - assert(md->kt.outer.capacity_words == 4 || md->kt.outer.capacity_words == 8); - variant = md->kt.outer.capacity_words == 4 ? 128 : 256; - digest_len = variant == 128 ? 32 : 64; - if ((err = s_sha3_shake_done(&md->kt.inner, digest_buf, digest_len, 0x0b, s_keccak_turbo_f)) != CRYPT_OK) return err; - if ((err = s_sha3_shake_init(&md->kt.inner, variant)) != CRYPT_OK) return err; - if ((err = s_turbo_shake_process(&md->kt.outer, digest_buf, digest_len)) != CRYPT_OK) return err; - } - } while (inlen != 0); - } - return CRYPT_OK; -} - -int kangaroo_twelve_process(hash_state *md, const unsigned char *in, unsigned long inlen) -{ - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(in != NULL || inlen == 0); - LTC_ARGCHK(md->kt.customization_len == 0); - LTC_ARGCHK(md->kt.finished == 0); - - return s_kangaroo_twelve_process(md, in, inlen); -} - -int kangaroo_twelve_customization(hash_state *md, const unsigned char *in, unsigned long inlen) -{ - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(in != NULL || inlen == 0); - LTC_ARGCHK(md->kt.finished == 0); - - md->kt.customization_len += inlen; - return s_kangaroo_twelve_process(md, in, inlen); -} - -int kangaroo_twelve_done(hash_state *md, unsigned char *out, unsigned long outlen) -{ - int couner_len; - unsigned char couner_buf[sizeof(ulong64) + 1]; - int err; - int variant; - int digest_len; - unsigned char digest_buf[64]; - unsigned char ffff[2]; - unsigned char domain; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL || outlen == 0); - - if (md->kt.finished == 0) - { - md->kt.finished = 1; - couner_len = 0; - while (md->kt.customization_len != 0) - { - couner_buf[LTC_ARRAY_SIZE(couner_buf) - 1 - 1 - couner_len] = md->kt.customization_len & 0xff; - md->kt.customization_len >>= 8; - ++couner_len; - } - couner_buf[LTC_ARRAY_SIZE(couner_buf) - 1] = couner_len; - if ((err = s_kangaroo_twelve_process(md, &couner_buf[LTC_ARRAY_SIZE(couner_buf) - 1 - couner_len], couner_len + 1)) != CRYPT_OK) return err; - if(md->kt.phase != 0) - { - assert(md->kt.outer.capacity_words == 4 || md->kt.outer.capacity_words == 8); - variant = md->kt.outer.capacity_words == 4 ? 128 : 256; - digest_len = variant == 128 ? 32 : 64; - if ((err = s_sha3_shake_done(&md->kt.inner, digest_buf, digest_len, 0x0b, s_keccak_turbo_f)) != CRYPT_OK) return err; - if ((err = s_turbo_shake_process(&md->kt.outer, digest_buf, digest_len)) != CRYPT_OK) return err; - couner_len = 0; - while (md->kt.blocks_count != 0) - { - couner_buf[LTC_ARRAY_SIZE(couner_buf) - 1 - 1 - couner_len] = md->kt.blocks_count & 0xff; - md->kt.blocks_count >>= 8; - ++couner_len; - } - couner_buf[LTC_ARRAY_SIZE(couner_buf) - 1] = couner_len; - if ((err = s_turbo_shake_process(&md->kt.outer, &couner_buf[LTC_ARRAY_SIZE(couner_buf) - 1 - couner_len], couner_len + 1)) != CRYPT_OK) return err; - ffff[0] = 0xff; - ffff[1] = 0xff; - if ((err = s_turbo_shake_process(&md->kt.outer, ffff, LTC_ARRAY_SIZE(ffff))) != CRYPT_OK) return err; - } - } - domain = md->kt.phase == 0 ? 0x07 : 0x06; - return s_sha3_shake_done(&md->kt.outer, out, outlen, domain, s_keccak_turbo_f); -} - -#endif - -#endif diff --git a/src/hashes/sha3_test.c b/src/hashes/sha3_test.c deleted file mode 100644 index 7c512853..00000000 --- a/src/hashes/sha3_test.c +++ /dev/null @@ -1,1041 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* based on https://github.com/brainhub/SHA3IUF (public domain) */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SHA3 - -int sha3_224_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - unsigned char buf[200], hash[224 / 8]; - int i; - hash_state c; - const unsigned char c1 = 0xa3; - - const unsigned char sha3_224_empty[224 / 8] = { - 0x6b, 0x4e, 0x03, 0x42, 0x36, 0x67, 0xdb, 0xb7, - 0x3b, 0x6e, 0x15, 0x45, 0x4f, 0x0e, 0xb1, 0xab, - 0xd4, 0x59, 0x7f, 0x9a, 0x1b, 0x07, 0x8e, 0x3f, - 0x5b, 0x5a, 0x6b, 0xc7 - }; - - const unsigned char sha3_224_0xa3_200_times[224 / 8] = { - 0x93, 0x76, 0x81, 0x6a, 0xba, 0x50, 0x3f, 0x72, - 0xf9, 0x6c, 0xe7, 0xeb, 0x65, 0xac, 0x09, 0x5d, - 0xee, 0xe3, 0xbe, 0x4b, 0xf9, 0xbb, 0xc2, 0xa1, - 0xcb, 0x7e, 0x11, 0xe0 - }; - - XMEMSET(buf, c1, sizeof(buf)); - - /* SHA3-224 on an empty buffer */ - sha3_224_init(&c); - sha3_done(&c, hash); - if (ltc_compare_testvector(hash, sizeof(hash), sha3_224_empty, sizeof(sha3_224_empty), "SHA3-224", 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHA3-224 in two steps. [FIPS 202] */ - sha3_224_init(&c); - sha3_process(&c, buf, sizeof(buf) / 2); - sha3_process(&c, buf + sizeof(buf) / 2, sizeof(buf) / 2); - sha3_done(&c, hash); - if (ltc_compare_testvector(hash, sizeof(hash), sha3_224_0xa3_200_times, sizeof(sha3_224_0xa3_200_times), "SHA3-224", 1)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHA3-224 byte-by-byte: 200 steps. [FIPS 202] */ - i = 200; - sha3_224_init(&c); - while (i--) { - sha3_process(&c, &c1, 1); - } - sha3_done(&c, hash); - if (ltc_compare_testvector(hash, sizeof(hash), sha3_224_0xa3_200_times, sizeof(sha3_224_0xa3_200_times), "SHA3-224", 2)) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -int sha3_256_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - unsigned char buf[200], hash[256 / 8]; - int i; - hash_state c; - const unsigned char c1 = 0xa3; - - const unsigned char sha3_256_empty[256 / 8] = { - 0xa7, 0xff, 0xc6, 0xf8, 0xbf, 0x1e, 0xd7, 0x66, - 0x51, 0xc1, 0x47, 0x56, 0xa0, 0x61, 0xd6, 0x62, - 0xf5, 0x80, 0xff, 0x4d, 0xe4, 0x3b, 0x49, 0xfa, - 0x82, 0xd8, 0x0a, 0x4b, 0x80, 0xf8, 0x43, 0x4a - }; - const unsigned char sha3_256_0xa3_200_times[256 / 8] = { - 0x79, 0xf3, 0x8a, 0xde, 0xc5, 0xc2, 0x03, 0x07, - 0xa9, 0x8e, 0xf7, 0x6e, 0x83, 0x24, 0xaf, 0xbf, - 0xd4, 0x6c, 0xfd, 0x81, 0xb2, 0x2e, 0x39, 0x73, - 0xc6, 0x5f, 0xa1, 0xbd, 0x9d, 0xe3, 0x17, 0x87 - }; - - XMEMSET(buf, c1, sizeof(buf)); - - /* SHA3-256 on an empty buffer */ - sha3_256_init(&c); - sha3_done(&c, hash); - if (ltc_compare_testvector(hash, sizeof(hash), sha3_256_empty, sizeof(sha3_256_empty), "SHA3-256", 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHA3-256 as a single buffer. [FIPS 202] */ - sha3_256_init(&c); - sha3_process(&c, buf, sizeof(buf)); - sha3_done(&c, hash); - if (ltc_compare_testvector(hash, sizeof(hash), sha3_256_0xa3_200_times, sizeof(sha3_256_0xa3_200_times), "SHA3-256", 1)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHA3-256 in two steps. [FIPS 202] */ - sha3_256_init(&c); - sha3_process(&c, buf, sizeof(buf) / 2); - sha3_process(&c, buf + sizeof(buf) / 2, sizeof(buf) / 2); - sha3_done(&c, hash); - if (ltc_compare_testvector(hash, sizeof(hash), sha3_256_0xa3_200_times, sizeof(sha3_256_0xa3_200_times), "SHA3-256", 2)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHA3-256 byte-by-byte: 200 steps. [FIPS 202] */ - i = 200; - sha3_256_init(&c); - while (i--) { - sha3_process(&c, &c1, 1); - } - sha3_done(&c, hash); - if (ltc_compare_testvector(hash, sizeof(hash), sha3_256_0xa3_200_times, sizeof(sha3_256_0xa3_200_times), "SHA3-256", 3)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHA3-256 byte-by-byte: 135 bytes. Input from [Keccak]. Output - * matched with sha3sum. */ - sha3_256_init(&c); - sha3_process(&c, (unsigned char*) - "\xb7\x71\xd5\xce\xf5\xd1\xa4\x1a" - "\x93\xd1\x56\x43\xd7\x18\x1d\x2a" - "\x2e\xf0\xa8\xe8\x4d\x91\x81\x2f" - "\x20\xed\x21\xf1\x47\xbe\xf7\x32" - "\xbf\x3a\x60\xef\x40\x67\xc3\x73" - "\x4b\x85\xbc\x8c\xd4\x71\x78\x0f" - "\x10\xdc\x9e\x82\x91\xb5\x83\x39" - "\xa6\x77\xb9\x60\x21\x8f\x71\xe7" - "\x93\xf2\x79\x7a\xea\x34\x94\x06" - "\x51\x28\x29\x06\x5d\x37\xbb\x55" - "\xea\x79\x6f\xa4\xf5\x6f\xd8\x89" - "\x6b\x49\xb2\xcd\x19\xb4\x32\x15" - "\xad\x96\x7c\x71\x2b\x24\xe5\x03" - "\x2d\x06\x52\x32\xe0\x2c\x12\x74" - "\x09\xd2\xed\x41\x46\xb9\xd7\x5d" - "\x76\x3d\x52\xdb\x98\xd9\x49\xd3" - "\xb0\xfe\xd6\xa8\x05\x2f\xbb", 1080 / 8); - sha3_done(&c, hash); - if(ltc_compare_testvector(hash, sizeof(hash), - "\xa1\x9e\xee\x92\xbb\x20\x97\xb6" - "\x4e\x82\x3d\x59\x77\x98\xaa\x18" - "\xbe\x9b\x7c\x73\x6b\x80\x59\xab" - "\xfd\x67\x79\xac\x35\xac\x81\xb5", 256 / 8, "SHA3-256", 4)) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -int sha3_384_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - unsigned char buf[200], hash[384 / 8]; - int i; - hash_state c; - const unsigned char c1 = 0xa3; - - const unsigned char sha3_384_0xa3_200_times[384 / 8] = { - 0x18, 0x81, 0xde, 0x2c, 0xa7, 0xe4, 0x1e, 0xf9, - 0x5d, 0xc4, 0x73, 0x2b, 0x8f, 0x5f, 0x00, 0x2b, - 0x18, 0x9c, 0xc1, 0xe4, 0x2b, 0x74, 0x16, 0x8e, - 0xd1, 0x73, 0x26, 0x49, 0xce, 0x1d, 0xbc, 0xdd, - 0x76, 0x19, 0x7a, 0x31, 0xfd, 0x55, 0xee, 0x98, - 0x9f, 0x2d, 0x70, 0x50, 0xdd, 0x47, 0x3e, 0x8f - }; - - XMEMSET(buf, c1, sizeof(buf)); - - /* SHA3-384 as a single buffer. [FIPS 202] */ - sha3_384_init(&c); - sha3_process(&c, buf, sizeof(buf)); - sha3_done(&c, hash); - if (ltc_compare_testvector(hash, sizeof(hash), sha3_384_0xa3_200_times, sizeof(sha3_384_0xa3_200_times), "SHA3-384", 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHA3-384 in two steps. [FIPS 202] */ - sha3_384_init(&c); - sha3_process(&c, buf, sizeof(buf) / 2); - sha3_process(&c, buf + sizeof(buf) / 2, sizeof(buf) / 2); - sha3_done(&c, hash); - if (ltc_compare_testvector(hash, sizeof(hash), sha3_384_0xa3_200_times, sizeof(sha3_384_0xa3_200_times), "SHA3-384", 1)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHA3-384 byte-by-byte: 200 steps. [FIPS 202] */ - i = 200; - sha3_384_init(&c); - while (i--) { - sha3_process(&c, &c1, 1); - } - sha3_done(&c, hash); - if (ltc_compare_testvector(hash, sizeof(hash), sha3_384_0xa3_200_times, sizeof(sha3_384_0xa3_200_times), "SHA3-384", 2)) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -int sha3_512_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - unsigned char buf[200], hash[512 / 8]; - int i; - hash_state c; - const unsigned char c1 = 0xa3; - - const unsigned char sha3_512_0xa3_200_times[512 / 8] = { - 0xe7, 0x6d, 0xfa, 0xd2, 0x20, 0x84, 0xa8, 0xb1, - 0x46, 0x7f, 0xcf, 0x2f, 0xfa, 0x58, 0x36, 0x1b, - 0xec, 0x76, 0x28, 0xed, 0xf5, 0xf3, 0xfd, 0xc0, - 0xe4, 0x80, 0x5d, 0xc4, 0x8c, 0xae, 0xec, 0xa8, - 0x1b, 0x7c, 0x13, 0xc3, 0x0a, 0xdf, 0x52, 0xa3, - 0x65, 0x95, 0x84, 0x73, 0x9a, 0x2d, 0xf4, 0x6b, - 0xe5, 0x89, 0xc5, 0x1c, 0xa1, 0xa4, 0xa8, 0x41, - 0x6d, 0xf6, 0x54, 0x5a, 0x1c, 0xe8, 0xba, 0x00 - }; - - XMEMSET(buf, c1, sizeof(buf)); - - /* SHA3-512 as a single buffer. [FIPS 202] */ - sha3_512_init(&c); - sha3_process(&c, buf, sizeof(buf)); - sha3_done(&c, hash); - if (ltc_compare_testvector(hash, sizeof(hash), sha3_512_0xa3_200_times, sizeof(sha3_512_0xa3_200_times), "SHA3-512", 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHA3-512 in two steps. [FIPS 202] */ - sha3_512_init(&c); - sha3_process(&c, buf, sizeof(buf) / 2); - sha3_process(&c, buf + sizeof(buf) / 2, sizeof(buf) / 2); - sha3_done(&c, hash); - if (ltc_compare_testvector(hash, sizeof(hash), sha3_512_0xa3_200_times, sizeof(sha3_512_0xa3_200_times), "SHA3-512", 1)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHA3-512 byte-by-byte: 200 steps. [FIPS 202] */ - i = 200; - sha3_512_init(&c); - while (i--) { - sha3_process(&c, &c1, 1); - } - sha3_done(&c, hash); - if (ltc_compare_testvector(hash, sizeof(hash), sha3_512_0xa3_200_times, sizeof(sha3_512_0xa3_200_times), "SHA3-512", 2)) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -int sha3_shake256_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - unsigned char hash[64]; - int err; - hash_state c; - const unsigned char msg[] = "abc"; - - /* Fixed-size descriptor API: RFC 8702 uses SHAKE256 with 64-byte output. */ - const unsigned char shake256_abc[64] = { - 0x48, 0x33, 0x66, 0x60, 0x13, 0x60, 0xa8, 0x77, - 0x1c, 0x68, 0x63, 0x08, 0x0c, 0xc4, 0x11, 0x4d, - 0x8d, 0xb4, 0x45, 0x30, 0xf8, 0xf1, 0xe1, 0xee, - 0x4f, 0x94, 0xea, 0x37, 0xe7, 0x8b, 0x57, 0x39, - 0xd5, 0xa1, 0x5b, 0xef, 0x18, 0x6a, 0x53, 0x86, - 0xc7, 0x57, 0x44, 0xc0, 0x52, 0x7e, 0x1f, 0xaa, - 0x9f, 0x87, 0x26, 0xe4, 0x62, 0xa1, 0x2a, 0x4f, - 0xeb, 0x06, 0xbd, 0x88, 0x01, 0xe7, 0x51, 0xe4 - }; - - if ((err = sha3_shake256_init(&c)) != CRYPT_OK) return err; - if ((err = sha3_shake256_process(&c, msg, 3)) != CRYPT_OK) return err; - if ((err = sha3_shake256_done(&c, hash)) != CRYPT_OK) return err; - if (ltc_compare_testvector(hash, sizeof(hash), shake256_abc, sizeof(shake256_abc), "SHAKE256", 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -int sha3_shake128_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - unsigned char hash[32]; - int err; - hash_state c; - const unsigned char msg[] = "abc"; - - /* Fixed-size descriptor API: RFC 8702 uses SHAKE128 with 32-byte output. */ - const unsigned char shake128_abc[32] = { - 0x58, 0x81, 0x09, 0x2d, 0xd8, 0x18, 0xbf, 0x5c, - 0xf8, 0xa3, 0xdd, 0xb7, 0x93, 0xfb, 0xcb, 0xa7, - 0x40, 0x97, 0xd5, 0xc5, 0x26, 0xa6, 0xd3, 0x5f, - 0x97, 0xb8, 0x33, 0x51, 0x94, 0x0f, 0x2c, 0xc8 - }; - - if ((err = sha3_shake128_init(&c)) != CRYPT_OK) return err; - if ((err = sha3_shake128_process(&c, msg, 3)) != CRYPT_OK) return err; - if ((err = sha3_shake128_done(&c, hash)) != CRYPT_OK) return err; - if (ltc_compare_testvector(hash, sizeof(hash), shake128_abc, sizeof(shake128_abc), "SHAKE128", 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -int sha3_shake_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - unsigned char buf[200], hash[512]; - int i; - hash_state c; - const unsigned char c1 = 0xa3; - unsigned long len; - - const unsigned char shake256_empty[32] = { - 0xab, 0x0b, 0xae, 0x31, 0x63, 0x39, 0x89, 0x43, - 0x04, 0xe3, 0x58, 0x77, 0xb0, 0xc2, 0x8a, 0x9b, - 0x1f, 0xd1, 0x66, 0xc7, 0x96, 0xb9, 0xcc, 0x25, - 0x8a, 0x06, 0x4a, 0x8f, 0x57, 0xe2, 0x7f, 0x2a - }; - const unsigned char shake256_0xa3_200_times[32] = { - 0x6a, 0x1a, 0x9d, 0x78, 0x46, 0x43, 0x6e, 0x4d, - 0xca, 0x57, 0x28, 0xb6, 0xf7, 0x60, 0xee, 0xf0, - 0xca, 0x92, 0xbf, 0x0b, 0xe5, 0x61, 0x5e, 0x96, - 0x95, 0x9d, 0x76, 0x71, 0x97, 0xa0, 0xbe, 0xeb - }; - const unsigned char shake128_empty[32] = { - 0x43, 0xe4, 0x1b, 0x45, 0xa6, 0x53, 0xf2, 0xa5, - 0xc4, 0x49, 0x2c, 0x1a, 0xdd, 0x54, 0x45, 0x12, - 0xdd, 0xa2, 0x52, 0x98, 0x33, 0x46, 0x2b, 0x71, - 0xa4, 0x1a, 0x45, 0xbe, 0x97, 0x29, 0x0b, 0x6f - }; - const unsigned char shake128_0xa3_200_times[32] = { - 0x44, 0xc9, 0xfb, 0x35, 0x9f, 0xd5, 0x6a, 0xc0, - 0xa9, 0xa7, 0x5a, 0x74, 0x3c, 0xff, 0x68, 0x62, - 0xf1, 0x7d, 0x72, 0x59, 0xab, 0x07, 0x52, 0x16, - 0xc0, 0x69, 0x95, 0x11, 0x64, 0x3b, 0x64, 0x39 - }; - - XMEMSET(buf, c1, sizeof(buf)); - - /* SHAKE256 on an empty buffer */ - sha3_shake_init(&c, 256); - for (i = 0; i < 16; i++) sha3_shake_done(&c, hash, 32); /* get 512 bytes, keep in hash the last 32 */ - if (ltc_compare_testvector(hash, sizeof(shake256_empty), shake256_empty, sizeof(shake256_empty), "SHAKE256", 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHAKE256 via sha3_shake_memory [FIPS 202] */ - len = 512; - sha3_shake_memory(256, buf, sizeof(buf), hash, &len); - if (ltc_compare_testvector(hash + 480, sizeof(shake256_0xa3_200_times), shake256_0xa3_200_times, sizeof(shake256_0xa3_200_times), "SHAKE256", 1)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHAKE256 as a single buffer. [FIPS 202] */ - sha3_shake_init(&c, 256); - sha3_shake_process(&c, buf, sizeof(buf)); - for (i = 0; i < 16; i++) sha3_shake_done(&c, hash, 32); /* get 512 bytes, keep in hash the last 32 */ - if (ltc_compare_testvector(hash, sizeof(shake256_0xa3_200_times), shake256_0xa3_200_times, sizeof(shake256_0xa3_200_times), "SHAKE256", 2)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHAKE256 in two steps. [FIPS 202] */ - sha3_shake_init(&c, 256); - sha3_shake_process(&c, buf, sizeof(buf) / 2); - sha3_shake_process(&c, buf + sizeof(buf) / 2, sizeof(buf) / 2); - for (i = 0; i < 16; i++) sha3_shake_done(&c, hash, 32); /* get 512 bytes, keep in hash the last 32 */ - if (ltc_compare_testvector(hash, sizeof(shake256_0xa3_200_times), shake256_0xa3_200_times, sizeof(shake256_0xa3_200_times), "SHAKE256", 3)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHAKE256 byte-by-byte: 200 steps. [FIPS 202] */ - i = 200; - sha3_shake_init(&c, 256); - while (i--) sha3_shake_process(&c, &c1, 1); - for (i = 0; i < 16; i++) sha3_shake_done(&c, hash, 32); /* get 512 bytes, keep in hash the last 32 */ - if (ltc_compare_testvector(hash, sizeof(shake256_0xa3_200_times), shake256_0xa3_200_times, sizeof(shake256_0xa3_200_times), "SHAKE256", 4)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHAKE128 on an empty buffer */ - sha3_shake_init(&c, 128); - for (i = 0; i < 16; i++) sha3_shake_done(&c, hash, 32); /* get 512 bytes, keep in hash the last 32 */ - if (ltc_compare_testvector(hash, sizeof(shake128_empty), shake128_empty, sizeof(shake128_empty), "SHAKE128", 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHAKE128 via sha3_shake_memory [FIPS 202] */ - len = 512; - sha3_shake_memory(128, buf, sizeof(buf), hash, &len); - if (ltc_compare_testvector(hash + 480, sizeof(shake128_0xa3_200_times), shake128_0xa3_200_times, sizeof(shake128_0xa3_200_times), "SHAKE128", 1)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHAKE128 as a single buffer. [FIPS 202] */ - sha3_shake_init(&c, 128); - sha3_shake_process(&c, buf, sizeof(buf)); - for (i = 0; i < 16; i++) sha3_shake_done(&c, hash, 32); /* get 512 bytes, keep in hash the last 32 */ - if (ltc_compare_testvector(hash, sizeof(shake128_0xa3_200_times), shake128_0xa3_200_times, sizeof(shake128_0xa3_200_times), "SHAKE128", 2)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHAKE128 in two steps. [FIPS 202] */ - sha3_shake_init(&c, 128); - sha3_shake_process(&c, buf, sizeof(buf) / 2); - sha3_shake_process(&c, buf + sizeof(buf) / 2, sizeof(buf) / 2); - for (i = 0; i < 16; i++) sha3_shake_done(&c, hash, 32); /* get 512 bytes, keep in hash the last 32 */ - if (ltc_compare_testvector(hash, sizeof(shake128_0xa3_200_times), shake128_0xa3_200_times, sizeof(shake128_0xa3_200_times), "SHAKE128", 3)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* SHAKE128 byte-by-byte: 200 steps. [FIPS 202] */ - i = 200; - sha3_shake_init(&c, 128); - while (i--) sha3_shake_process(&c, &c1, 1); - for (i = 0; i < 16; i++) sha3_shake_done(&c, hash, 32); /* get 512 bytes, keep in hash the last 32 */ - if (ltc_compare_testvector(hash, sizeof(shake128_0xa3_200_times), shake128_0xa3_200_times, sizeof(shake128_0xa3_200_times), "SHAKE128", 4)) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -#if (defined LTC_TURBO_SHAKE || defined LTC_KANGAROO_TWELVE) && defined LTC_TEST -static LTC_INLINE int s_turbo_shake_generate_ptn(unsigned char* buffer, long offset, long amount) -{ - long i; - - LTC_ARGCHK(buffer != NULL || amount == 0); - LTC_ARGCHK(offset >= 0); - LTC_ARGCHK(amount >= 0); - - for(i = 0; i != amount; ++i) - { - buffer[i] = ((unsigned char)(((offset + i) % 0xfb) & 0xff)); - } - return CRYPT_OK; -} -#endif - -#if defined(LTC_TURBO_SHAKE) && defined(LTC_TEST) -typedef struct turbo_shake_test_case { - int bits_count; - unsigned long input_bytes_count, skip_digest_bytes, digest_bytes_count; - const char *expected_digest_hex; -} turbo_shake_test_case; - -static LTC_INLINE int s_turbo_shake_test_one(const turbo_shake_test_case *testcase, int counter) -{ - int err; - hash_state md; - unsigned long offset; - unsigned long rem; - unsigned long count; - unsigned char input[1024] = {0}; - unsigned char digest[64]; - const char *expected_hex; - unsigned char expected_digest_bin[sizeof(digest)]; - unsigned long decoded; - - LTC_ARGCHK(testcase != NULL); - LTC_ARGCHK(testcase->bits_count == 128 || testcase->bits_count == 256); - LTC_ARGCHK(testcase->digest_bytes_count >= 1); - LTC_ARGCHK(testcase->expected_digest_hex && testcase->expected_digest_hex[0] != '\0'); - LTC_ARGCHK(counter >= 0); - - if ((err = turbo_shake_init(&md, testcase->bits_count)) != CRYPT_OK) return err; - offset = 0; - rem = testcase->input_bytes_count; - do - { - count = rem < sizeof(input) ? rem : sizeof(input); - if ((err = s_turbo_shake_generate_ptn(input, offset, count)) != CRYPT_OK) return err; - if ((err = turbo_shake_process(&md, input, count)) != CRYPT_OK) return err; - offset += count; - rem -= count; - }while(rem != 0); - rem = testcase->skip_digest_bytes; - do - { - count = rem < sizeof(digest) ? rem : sizeof(digest); - if ((err = turbo_shake_done(&md, digest, count)) != CRYPT_OK) return err; - rem -= count; - }while(rem != 0); - rem = testcase->digest_bytes_count; - expected_hex = testcase->expected_digest_hex; - do - { - count = rem < sizeof(digest) ? rem : sizeof(digest); - decoded = count; - if ((err = base16_decode(expected_hex, count * 2, expected_digest_bin, &decoded)) != CRYPT_OK) return err; - if (decoded != (unsigned long)count) return CRYPT_ERROR; - if ((err = turbo_shake_done(&md, digest, count)) != CRYPT_OK) return err; - LTC_COMPARE_TESTVECTOR(digest, count, expected_digest_bin, count, "TurboSHAKE", counter); - rem -= count; - expected_hex += count * 2; - }while(rem != 0); - return CRYPT_OK; -} -#endif - -#ifdef LTC_TURBO_SHAKE -int turbo_shake_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - int counter; - int err; - - /* https://datatracker.ietf.org/doc/html/rfc9861#name-test-vectors */ - /* https://www.rfc-editor.org/rfc/rfc9861.txt */ - - const turbo_shake_test_case testcases[] = { - { 128, 0, 0, 32, "1e415f1c5983aff2169217277d17bb538cd945a397ddec541f1ce41af2c1b74c" }, - { 128, 0, 0, 64, "1e415f1c5983aff2169217277d17bb538cd945a397ddec541f1ce41af2c1b74c3e8ccae2a4dae56c84a04c2385c03c15e8193bdf58737363321691c05462c8df" }, - { 128, 0, 10000, 32, "a3b9b0385900ce761f22aed548e754da10a5242d62e8c658e3f3a923a7555607" }, - { 128, 1, 0, 32, "55cedd6f60af7bb29a4042ae832ef3f58db7299f893ebb9247247d856958daa9" }, - { 128, 17, 0, 32, "9c97d036a3bac819db70ede0ca554ec6e4c2a1a4ffbfd9ec269ca6a111161233" }, - { 128, 17*17, 0, 32, "96c77c279e0126f7fc07c9b07f5cdae1e0be60bdbe10620040e75d7223a624d2" }, - { 128, 17*17*17, 0, 32, "d4976eb56bcf118520582b709f73e1d6853e001fdaf80e1b13e0d0599d5fb372" }, - { 128, 17*17*17*17, 0, 32, "da67c7039e98bf530cf7a37830c6664e14cbab7f540f58403b1b82951318ee5c" }, - { 128, 17*17*17*17*17, 0, 32, "b97a906fbf83ef7c812517abf3b2d0aea0c4f60318ce11cf103925127f59eecd" }, - { 128, 17*17*17*17*17*17, 0, 32, "35cd494adeded2f25239af09a7b8ef0c4d1ca4fe2d1ac370fa63216fe7b4c2b1" }, - { 256, 0, 0, 64, "367a329dafea871c7802ec67f905ae13c57695dc2c6663c61035f59a18f8e7db11edc0e12e91ea60eb6b32df06dd7f002fbafabb6e13ec1cc20d995547600db0" }, - { 256, 0, 10000, 32, "abefa11630c661269249742685ec082f207265dccf2f43534e9c61ba0c9d1d75" }, - { 256, 1, 0, 64, "3e1712f928f8eaf1054632b2aa0a246ed8b0c378728f60bc970410155c28820e90cc90d8a3006aa2372c5c5ea176b0682bf22bae7467ac94f74d43d39b0482e2" }, - { 256, 17, 0, 64, "b3bab0300e6a191fbe6137939835923578794ea54843f5011090fa2f3780a9e5cb22c59d78b40a0fbff9e672c0fbe0970bd2c845091c6044d687054da5d8e9c7" }, - { 256, 17*17, 0, 64, "66b810db8e90780424c0847372fdc95710882fde31c6df75beb9d4cd9305cfcae35e7b83e8b7e6eb4b78605880116316fe2c078a09b94ad7b8213c0a738b65c0" }, - { 256, 17*17*17, 0, 64, "c74ebc919a5b3b0dd1228185ba02d29ef442d69d3d4276a93efe0bf9a16a7dc0cd4eabadab8cd7a5edd96695f5d360abe09e2c6511a3ec397da3b76b9e1674fb" }, - { 256, 17*17*17*17, 0, 64, "02cc3a8897e6f4f6ccb6fd46631b1f5207b66c6de9c7b55b2d1a23134a170afdac234eaba9a77cff88c1f020b73724618c5687b362c430b248cd38647f848a1d" }, - { 256, 17*17*17*17*17, 0, 64, "add53b06543e584b5823f626996aee50fe45ed15f20243a7165485acb4aa76b4ffda75cedf6d8cdc95c332bd56f4b986b58bb17d1778bfc1b1a97545cdf4ec9f" }, - { 256, 17*17*17*17*17*17, 0, 64, "9e11bc59c24e73993c1484ec66358ef71db74aefd84e123f7800ba9c4853e02cfe701d9e6bb765a304f0dc34a4ee3ba82c410f0da70e86bfbd90ea877c2d6104" }, - }; - for (counter = 0; counter < (int)LTC_ARRAY_SIZE(testcases); counter++) { - if ((err = s_turbo_shake_test_one(&testcases[counter], counter)) != CRYPT_OK) { - return err; - } - } - return CRYPT_OK; -#endif -} -#endif - -#if defined(LTC_KANGAROO_TWELVE) && defined(LTC_TEST) -typedef struct kangaroo_twelve_test_case { - int bits_count, is_ptn; - unsigned long input_bytes_count, customization_bytes_count, skip_digest_bytes, digest_bytes_count; - const char *expected_digest_hex; -} kangaroo_twelve_test_case; - -static LTC_INLINE int s_kangaroo_twelve_test_one(const kangaroo_twelve_test_case *testcase, int counter) -{ - int err; - hash_state md; - unsigned long offset; - unsigned long rem; - unsigned long count; - unsigned char input[1024] = {0}; - unsigned char digest[64]; - const char *expected_hex; - unsigned char expected_digest_bin[sizeof(digest)]; - unsigned long decoded; - - LTC_ARGCHK(testcase != NULL); - LTC_ARGCHK(testcase->bits_count == 128 || testcase->bits_count == 256); - LTC_ARGCHK(testcase->is_ptn == 0 || testcase->is_ptn == 1); - LTC_ARGCHK(testcase->digest_bytes_count >= 1); - LTC_ARGCHK(testcase->expected_digest_hex && testcase->expected_digest_hex[0] != '\0'); - LTC_ARGCHK(counter >= 0); - - if ((err = kangaroo_twelve_init(&md, testcase->bits_count)) != CRYPT_OK) return err; - offset = 0; - rem = testcase->input_bytes_count; - do - { - count = rem < sizeof(input) ? rem : sizeof(input); - if (testcase->is_ptn) - { - if ((err = s_turbo_shake_generate_ptn(input, offset, count)) != CRYPT_OK) return err; - } - else - { - XMEMSET(input, 0xff, count); - } - if ((err = kangaroo_twelve_process(&md, input, count)) != CRYPT_OK) return err; - offset += count; - rem -= count; - }while(rem != 0); - offset = 0; - rem = testcase->customization_bytes_count; - do - { - count = rem < sizeof(input) ? rem : sizeof(input); - if ((err = s_turbo_shake_generate_ptn(input, offset, count)) != CRYPT_OK) return err; - if ((err = kangaroo_twelve_customization(&md, input, count)) != CRYPT_OK) return err; - offset += count; - rem -= count; - }while(rem != 0); - rem = testcase->skip_digest_bytes; - do - { - count = rem < sizeof(digest) ? rem : sizeof(digest); - if ((err = kangaroo_twelve_done(&md, digest, count)) != CRYPT_OK) return err; - rem -= count; - }while(rem != 0); - rem = testcase->digest_bytes_count; - expected_hex = testcase->expected_digest_hex; - do - { - count = rem < sizeof(digest) ? rem : sizeof(digest); - decoded = count; - if ((err = base16_decode(expected_hex, count * 2, expected_digest_bin, &decoded)) != CRYPT_OK) return err; - if (decoded != (unsigned long)count) return CRYPT_ERROR; - if ((err = kangaroo_twelve_done(&md, digest, count)) != CRYPT_OK) return err; - LTC_COMPARE_TESTVECTOR(digest, count, expected_digest_bin, count, "KangarooTwelve", counter); - rem -= count; - expected_hex += count * 2; - }while(rem != 0); - return CRYPT_OK; -} -#endif - -#ifdef LTC_KANGAROO_TWELVE -int kangaroo_twelve_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - int counter; - int err; - - /* https://datatracker.ietf.org/doc/html/rfc9861#name-test-vectors */ - /* https://www.rfc-editor.org/rfc/rfc9861.txt */ - - const kangaroo_twelve_test_case testcases[] = { - { 128, 1, 0, 0, 0, 32, "1ac2d450fc3b4205d19da7bfca1b37513c0803577ac7167f06fe2ce1f0ef39e5" }, - { 128, 1, 0, 0, 0, 64, "1ac2d450fc3b4205d19da7bfca1b37513c0803577ac7167f06fe2ce1f0ef39e54269c056b8c82e48276038b6d292966cc07a3d4645272e31ff38508139eb0a71" }, - { 128, 1, 0, 0, 10000, 32, "e8dc563642f7228c84684c898405d3a834799158c079b12880277a1d28e2ff6d" }, - { 128, 1, 1, 0, 0, 32, "2bda92450e8b147f8a7cb629e784a058efca7cf7d8218e02d345dfaa65244a1f" }, - { 128, 1, 17, 0, 0, 32, "6bf75fa2239198db4772e36478f8e19b0f371205f6a9a93a273f51df37122888" }, - { 128, 1, 17*17, 0, 0, 32, "0c315ebcdedbf61426de7dcf8fb725d1e74675d7f5327a5067f367b108ecb67c" }, - { 128, 1, 17*17*17, 0, 0, 32, "cb552e2ec77d9910701d578b457ddf772c12e322e4ee7fe417f92c758f0d59d0" }, - { 128, 1, 17*17*17*17, 0, 0, 32, "8701045e22205345ff4dda05555cbb5c3af1a771c2b89baef37db43d9998b9fe" }, - { 128, 1, 17*17*17*17*17, 0, 0, 32, "844d610933b1b9963cbdeb5ae3b6b05cc7cbd67ceedf883eb678a0a8e0371682" }, - { 128, 1, 17*17*17*17*17*17, 0, 0, 32, "3c390782a8a4e89fa6367f72feaaf13255c8d95878481d3cd8ce85f58e880af8" }, - { 128, 1, 0, 1, 0, 32, "fab658db63e94a246188bf7af69a133045f46ee984c56e3c3328caaf1aa1a583" }, - { 128, 0, 1, 41, 0, 32, "d848c5068ced736f4462159b9867fd4c20b808acc3d5bc48e0b06ba0a3762ec4" }, - { 128, 0, 3, 41*41, 0, 32, "c389e5009ae57120854c2e8c64670ac01358cf4c1baf89447a724234dc7ced74" }, - { 128, 0, 7, 41*41*41, 0, 32, "75d2f86a2e644566726b4fbcfc5657b9dbcf070c7b0dca06450ab291d7443bcf" }, - { 128, 1, 8191, 0, 0, 32, "1b577636f723643e990cc7d6a659837436fd6a103626600eb8301cd1dbe553d6" }, - { 128, 1, 8192, 0, 0, 32, "48f256f6772f9edfb6a8b661ec92dc93b95ebd05a08a17b39ae3490870c926c3" }, - { 128, 1, 8192, 8189, 0, 32, "3ed12f70fb05ddb58689510ab3e4d23c6c6033849aa01e1d8c220a297fedcd0b" }, - { 128, 1, 8192, 8190, 0, 32, "6a7c1b6a5cd0d8c9ca943a4a216cc64604559a2ea45f78570a15253d67ba00ae" }, - { 256, 1, 0, 0, 0, 64, "b23d2e9cea9f4904e02bec06817fc10ce38ce8e93ef4c89e6537076af8646404e3e8b68107b8833a5d30490aa33482353fd4adc7148ecb782855003aaebde4a9" }, - { 256, 1, 0, 0, 0, 128, "b23d2e9cea9f4904e02bec06817fc10ce38ce8e93ef4c89e6537076af8646404e3e8b68107b8833a5d30490aa33482353fd4adc7148ecb782855003aaebde4a9b0925319d8ea1e121a609821ec19efea89e6d08daee1662b69c840289f188ba860f55760b61f82114c030c97e5178449608ccd2cd2d919fc7829ff69931ac4d0" }, - { 256, 1, 0, 0, 10000, 64, "ad4a1d718cf950506709a4c33396139b4449041fc79a05d68da35f1e453522e056c64fe94958e7085f2964888259b9932752f3ccd855288efee5fcbb8b563069" }, - { 256, 1, 1, 0, 0, 64, "0d005a194085360217128cf17f91e1f71314efa5564539d444912e3437efa17f82db6f6ffe76e781eaa068bce01f2bbf81eacb983d7230f2fb02834a21b1ddd0" }, - { 256, 1, 17, 0, 0, 64, "1ba3c02b1fc514474f06c8979978a9056c8483f4a1b63d0dccefe3a28a2f323e1cdcca40ebf006ac76ef0397152346837b1277d3e7faa9c9653b19075098527b" }, - { 256, 1, 17*17, 0, 0, 64, "de8ccbc63e0f133ebb4416814d4c66f691bbf8b6a61ec0a7700f836b086cb029d54f12ac7159472c72db118c35b4e6aa213c6562caaa9dcc518959e69b10f3ba" }, - { 256, 1, 17*17*17, 0, 0, 64, "647efb49fe9d717500171b41e7f11bd491544443209997ce1c2530d15eb1ffbb598935ef954528ffc152b1e4d731ee2683680674365cd191d562bae753b84aa5" }, - { 256, 1, 17*17*17*17, 0, 0, 64, "b06275d284cd1cf205bcbe57dccd3ec1ff6686e3ed15776383e1f2fa3c6ac8f08bf8a162829db1a44b2a43ff83dd89c3cf1ceb61ede659766d5ccf817a62ba8d" }, - { 256, 1, 17*17*17*17*17, 0, 0, 64, "9473831d76a4c7bf77ace45b59f1458b1673d64bcd877a7c66b2664aa6dd149e60eab71b5c2bab858c074ded81ddce2b4022b5215935c0d4d19bf511aeeb0772" }, - { 256, 1, 17*17*17*17*17*17, 0, 0, 64, "0652b740d78c5e1f7c8dcc1777097382768b7ff38f9a7a20f29f413bb1b3045b31a5578f568f911e09cf44746da84224a5266e96a4a535e871324e4f9c7004da" }, - { 256, 1, 0, 1, 0, 64, "9280f5cc39b54a5a594ec63de0bb99371e4609d44bf845c2f5b8c316d72b159811f748f23e3fabbe5c3226ec96c62186df2d33e9df74c5069ceecbb4dd10eff6" }, - { 256, 0, 1, 41, 0, 64, "47ef96dd616f200937aa7847e34ec2feae8087e3761dc0f8c1a154f51dc9ccf845d7adbce57ff64b639722c6a1672e3bf5372d87e00aff89be97240756998853" }, - { 256, 0, 3, 41*41, 0, 64, "3b48667a5051c5966c53c5d42b95de451e05584e7806e2fb765eda959074172cb438a9e91dde337c98e9c41bed94c4e0aef431d0b64ef2324f7932caa6f54969" }, - { 256, 0, 7, 41*41*41, 0, 64, "e0911cc00025e1540831e266d94add9b98712142b80d2629e643aac4efaf5a3a30a88cbf4ac2a91a2432743054fbcc9897670e86ba8cec2fc2ace9c966369724" }, - { 256, 1, 8191, 0, 0, 64, "3081434d93a4108d8d8a3305b89682cebedc7ca4ea8a3ce869fbb73cbe4a58eef6f24de38ffc170514c70e7ab2d01f03812616e863d769afb3753193ba045b20" }, - { 256, 1, 8192, 0, 0, 64, "c6ee8e2ad3200c018ac87aaa031cdac22121b412d07dc6e0dccbb53423747e9a1c18834d99df596cf0cf4b8dfafb7bf02d139d0c9035725adc1a01b7230a41fa" }, - { 256, 1, 8192, 8189, 0, 64, "74e47879f10a9c5d11bd2da7e194fe57e86378bf3c3f7448eff3c576a0f18c5caae0999979512090a7f348af4260d4de3c37f1ecaf8d2c2c96c1d16c64b12496" }, - { 256, 1, 8192, 8190, 0, 64, "f4b5908b929ffe01e0f79ec2f21243d41a396b2e7303a6af1d6399cd6c7a0a2dd7c4f607e8277f9c9b1cb4ab9ddc59d4b92d1fc7558441f1832c3279a4241b8b" }, - }; - for (counter = 0; counter < (int)LTC_ARRAY_SIZE(testcases); counter++) { - if ((err = s_kangaroo_twelve_test_one(&testcases[counter], counter)) != CRYPT_OK) { - return err; - } - } - return CRYPT_OK; -#endif -} -#endif - -#endif - -#ifdef LTC_KECCAK - -int keccak_224_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - hash_state c; - unsigned char hash[MAXBLOCKSIZE]; - - keccak_224_init(&c); - keccak_process(&c, (unsigned char*) "\xcc", 1); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 28, - "\xa9\xca\xb5\x9e\xb4\x0a\x10\xb2" - "\x46\x29\x0f\x2d\x60\x86\xe3\x2e" - "\x36\x89\xfa\xf1\xd2\x6b\x47\x0c" - "\x89\x9f\x28\x02", 28, - "KECCAK-224", 0) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - keccak_224_init(&c); - keccak_process(&c, (unsigned char*)"\x41\xfb", 2); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 28, - "\x61\x5b\xa3\x67\xaf\xdc\x35\xaa" - "\xc3\x97\xbc\x7e\xb5\xd5\x8d\x10" - "\x6a\x73\x4b\x24\x98\x6d\x5d\x97" - "\x8f\xef\xd6\x2c", 28, - "KECCAK-224", 1) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - keccak_224_init(&c); - keccak_process(&c, (unsigned char*) - "\x52\xa6\x08\xab\x21\xcc\xdd\x8a" - "\x44\x57\xa5\x7e\xde\x78\x21\x76", 16); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 28, - "\x56\x79\xcd\x50\x9c\x51\x20\xaf" - "\x54\x79\x5c\xf4\x77\x14\x96\x41" - "\xcf\x27\xb2\xeb\xb6\xa5\xf9\x03" - "\x40\x70\x4e\x57", 28, - "KECCAK-224", 2) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - keccak_224_init(&c); - keccak_process(&c, (unsigned char*) - "\x43\x3c\x53\x03\x13\x16\x24\xc0" - "\x02\x1d\x86\x8a\x30\x82\x54\x75" - "\xe8\xd0\xbd\x30\x52\xa0\x22\x18" - "\x03\x98\xf4\xca\x44\x23\xb9\x82" - "\x14\xb6\xbe\xaa\xc2\x1c\x88\x07" - "\xa2\xc3\x3f\x8c\x93\xbd\x42\xb0" - "\x92\xcc\x1b\x06\xce\xdf\x32\x24" - "\xd5\xed\x1e\xc2\x97\x84\x44\x4f" - "\x22\xe0\x8a\x55\xaa\x58\x54\x2b" - "\x52\x4b\x02\xcd\x3d\x5d\x5f\x69" - "\x07\xaf\xe7\x1c\x5d\x74\x62\x22" - "\x4a\x3f\x9d\x9e\x53\xe7\xe0\x84" - "\x6d\xcb\xb4\xce", 100); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 28, - "\x62\xb1\x0f\x1b\x62\x36\xeb\xc2" - "\xda\x72\x95\x77\x42\xa8\xd4\xe4" - "\x8e\x21\x3b\x5f\x89\x34\x60\x4b" - "\xfd\x4d\x2c\x3a", 28, - "KECCAK-224", 3) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -int keccak_256_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - hash_state c; - unsigned char hash[MAXBLOCKSIZE]; - - keccak_256_init(&c); - keccak_process(&c, (unsigned char*) "\xcc", 1); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 32, - "\xee\xad\x6d\xbf\xc7\x34\x0a\x56" - "\xca\xed\xc0\x44\x69\x6a\x16\x88" - "\x70\x54\x9a\x6a\x7f\x6f\x56\x96" - "\x1e\x84\xa5\x4b\xd9\x97\x0b\x8a", 32, - "KECCAK-256", 0) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - keccak_256_init(&c); - keccak_process(&c, (unsigned char*)"\x41\xfb", 2); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 32, - "\xa8\xea\xce\xda\x4d\x47\xb3\x28" - "\x1a\x79\x5a\xd9\xe1\xea\x21\x22" - "\xb4\x07\xba\xf9\xaa\xbc\xb9\xe1" - "\x8b\x57\x17\xb7\x87\x35\x37\xd2", 32, - "KECCAK-256", 1) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - keccak_256_init(&c); - keccak_process(&c, (unsigned char*) - "\x52\xa6\x08\xab\x21\xcc\xdd\x8a" - "\x44\x57\xa5\x7e\xde\x78\x21\x76", 16); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 32, - "\x0e\x32\xde\xfa\x20\x71\xf0\xb5" - "\xac\x0e\x6a\x10\x8b\x84\x2e\xd0" - "\xf1\xd3\x24\x97\x12\xf5\x8e\xe0" - "\xdd\xf9\x56\xfe\x33\x2a\x5f\x95", 32, - "KECCAK-256", 2) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - keccak_256_init(&c); - keccak_process(&c, (unsigned char*) - "\x43\x3c\x53\x03\x13\x16\x24\xc0" - "\x02\x1d\x86\x8a\x30\x82\x54\x75" - "\xe8\xd0\xbd\x30\x52\xa0\x22\x18" - "\x03\x98\xf4\xca\x44\x23\xb9\x82" - "\x14\xb6\xbe\xaa\xc2\x1c\x88\x07" - "\xa2\xc3\x3f\x8c\x93\xbd\x42\xb0" - "\x92\xcc\x1b\x06\xce\xdf\x32\x24" - "\xd5\xed\x1e\xc2\x97\x84\x44\x4f" - "\x22\xe0\x8a\x55\xaa\x58\x54\x2b" - "\x52\x4b\x02\xcd\x3d\x5d\x5f\x69" - "\x07\xaf\xe7\x1c\x5d\x74\x62\x22" - "\x4a\x3f\x9d\x9e\x53\xe7\xe0\x84" - "\x6d\xcb\xb4\xce", 100); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 32, - "\xce\x87\xa5\x17\x3b\xff\xd9\x23" - "\x99\x22\x16\x58\xf8\x01\xd4\x5c" - "\x29\x4d\x90\x06\xee\x9f\x3f\x9d" - "\x41\x9c\x8d\x42\x77\x48\xdc\x41", 32, - "KECCAK-256", 3) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -int keccak_384_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - hash_state c; - unsigned char hash[MAXBLOCKSIZE]; - - keccak_384_init(&c); - keccak_process(&c, (unsigned char*) "\xcc", 1); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 48, - "\x1b\x84\xe6\x2a\x46\xe5\xa2\x01" - "\x86\x17\x54\xaf\x5d\xc9\x5c\x4a" - "\x1a\x69\xca\xf4\xa7\x96\xae\x40" - "\x56\x80\x16\x1e\x29\x57\x26\x41" - "\xf5\xfa\x1e\x86\x41\xd7\x95\x83" - "\x36\xee\x7b\x11\xc5\x8f\x73\xe9", 48, - "KECCAK-384", 0) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - keccak_384_init(&c); - keccak_process(&c, (unsigned char*)"\x41\xfb", 2); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 48, - "\x49\x5c\xce\x27\x14\xcd\x72\xc8" - "\xc5\x3c\x33\x63\xd2\x2c\x58\xb5" - "\x59\x60\xfe\x26\xbe\x0b\xf3\xbb" - "\xc7\xa3\x31\x6d\xd5\x63\xad\x1d" - "\xb8\x41\x0e\x75\xee\xfe\xa6\x55" - "\xe3\x9d\x46\x70\xec\x0b\x17\x92", 48, - "KECCAK-384", 1) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - keccak_384_init(&c); - keccak_process(&c, (unsigned char*) - "\x52\xa6\x08\xab\x21\xcc\xdd\x8a" - "\x44\x57\xa5\x7e\xde\x78\x21\x76", 16); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 48, - "\x18\x42\x2a\xc1\xd3\xa1\xe5\x4b" - "\xad\x87\x68\x83\xd2\xd6\xdd\x65" - "\xf6\x5c\x1d\x5f\x33\xa7\x12\x5c" - "\xc4\xc1\x86\x40\x5a\x12\xed\x64" - "\xba\x96\x67\x2e\xed\xda\x8c\x5a" - "\x63\x31\xd2\x86\x83\xf4\x88\xeb", 48, - "KECCAK-384", 2) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - keccak_384_init(&c); - keccak_process(&c, (unsigned char*) - "\x43\x3c\x53\x03\x13\x16\x24\xc0" - "\x02\x1d\x86\x8a\x30\x82\x54\x75" - "\xe8\xd0\xbd\x30\x52\xa0\x22\x18" - "\x03\x98\xf4\xca\x44\x23\xb9\x82" - "\x14\xb6\xbe\xaa\xc2\x1c\x88\x07" - "\xa2\xc3\x3f\x8c\x93\xbd\x42\xb0" - "\x92\xcc\x1b\x06\xce\xdf\x32\x24" - "\xd5\xed\x1e\xc2\x97\x84\x44\x4f" - "\x22\xe0\x8a\x55\xaa\x58\x54\x2b" - "\x52\x4b\x02\xcd\x3d\x5d\x5f\x69" - "\x07\xaf\xe7\x1c\x5d\x74\x62\x22" - "\x4a\x3f\x9d\x9e\x53\xe7\xe0\x84" - "\x6d\xcb\xb4\xce", 100); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 48, - "\x13\x51\x14\x50\x8d\xd6\x3e\x27" - "\x9e\x70\x9c\x26\xf7\x81\x7c\x04" - "\x82\x76\x6c\xde\x49\x13\x2e\x3e" - "\xdf\x2e\xed\xd8\x99\x6f\x4e\x35" - "\x96\xd1\x84\x10\x0b\x38\x48\x68" - "\x24\x9f\x1d\x8b\x8f\xda\xa2\xc9", 48, - "KECCAK-384", 3) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -int keccak_512_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - hash_state c; - unsigned char hash[MAXBLOCKSIZE]; - - keccak_512_init(&c); - keccak_process(&c, (unsigned char*) "\xcc", 1); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 64, - "\x86\x30\xc1\x3c\xbd\x06\x6e\xa7" - "\x4b\xbe\x7f\xe4\x68\xfe\xc1\xde" - "\xe1\x0e\xdc\x12\x54\xfb\x4c\x1b" - "\x7c\x5f\xd6\x9b\x64\x6e\x44\x16" - "\x0b\x8c\xe0\x1d\x05\xa0\x90\x8c" - "\xa7\x90\xdf\xb0\x80\xf4\xb5\x13" - "\xbc\x3b\x62\x25\xec\xe7\xa8\x10" - "\x37\x14\x41\xa5\xac\x66\x6e\xb9", 64, - "KECCAK-512", 0) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - keccak_512_init(&c); - keccak_process(&c, (unsigned char*)"\x41\xfb", 2); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 64, - "\x55\x1d\xa6\x23\x6f\x8b\x96\xfc" - "\xe9\xf9\x7f\x11\x90\xe9\x01\x32" - "\x4f\x0b\x45\xe0\x6d\xbb\xb5\xcd" - "\xb8\x35\x5d\x6e\xd1\xdc\x34\xb3" - "\xf0\xea\xe7\xdc\xb6\x86\x22\xff" - "\x23\x2f\xa3\xce\xce\x0d\x46\x16" - "\xcd\xeb\x39\x31\xf9\x38\x03\x66" - "\x2a\x28\xdf\x1c\xd5\x35\xb7\x31", 64, - "KECCAK-512", 1) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - keccak_512_init(&c); - keccak_process(&c, (unsigned char*) - "\x52\xa6\x08\xab\x21\xcc\xdd\x8a" - "\x44\x57\xa5\x7e\xde\x78\x21\x76", 16); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 64, - "\x4b\x39\xd3\xda\x5b\xcd\xf4\xd9" - "\xb7\x69\x01\x59\x95\x64\x43\x11" - "\xc1\x4c\x43\x5b\xf7\x2b\x10\x09" - "\xd6\xdd\x71\xb0\x1a\x63\xb9\x7c" - "\xfb\x59\x64\x18\xe8\xe4\x23\x42" - "\xd1\x17\xe0\x74\x71\xa8\x91\x43" - "\x14\xba\x7b\x0e\x26\x4d\xad\xf0" - "\xce\xa3\x81\x86\x8c\xbd\x43\xd1", 64, - "KECCAK-512", 2) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - keccak_512_init(&c); - keccak_process(&c, (unsigned char*) - "\x43\x3c\x53\x03\x13\x16\x24\xc0" - "\x02\x1d\x86\x8a\x30\x82\x54\x75" - "\xe8\xd0\xbd\x30\x52\xa0\x22\x18" - "\x03\x98\xf4\xca\x44\x23\xb9\x82" - "\x14\xb6\xbe\xaa\xc2\x1c\x88\x07" - "\xa2\xc3\x3f\x8c\x93\xbd\x42\xb0" - "\x92\xcc\x1b\x06\xce\xdf\x32\x24" - "\xd5\xed\x1e\xc2\x97\x84\x44\x4f" - "\x22\xe0\x8a\x55\xaa\x58\x54\x2b" - "\x52\x4b\x02\xcd\x3d\x5d\x5f\x69" - "\x07\xaf\xe7\x1c\x5d\x74\x62\x22" - "\x4a\x3f\x9d\x9e\x53\xe7\xe0\x84" - "\x6d\xcb\xb4\xce", 100); - keccak_done(&c, hash); - if(ltc_compare_testvector(hash, 64, - "\x52\x7d\x28\xe3\x41\xe6\xb1\x4f" - "\x46\x84\xad\xb4\xb8\x24\xc4\x96" - "\xc6\x48\x2e\x51\x14\x95\x65\xd3" - "\xd1\x72\x26\x82\x88\x84\x30\x6b" - "\x51\xd6\x14\x8a\x72\x62\x2c\x2b" - "\x75\xf5\xd3\x51\x0b\x79\x9d\x8b" - "\xdc\x03\xea\xed\xe4\x53\x67\x6a" - "\x6e\xc8\xfe\x03\xa1\xad\x0e\xab", 64, - "KECCAK-512", 3) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/hashes/sm3.c b/src/hashes/sm3.c deleted file mode 100644 index f72ae81d..00000000 --- a/src/hashes/sm3.c +++ /dev/null @@ -1,423 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sm3.c - SM3 hash function (GM/T 0004-2012) - - Based on the Crypto++ implementation by Jeffrey Walton and Han Lulu, - which was placed in the public domain. - Also see https://tools.ietf.org/html/draft-shen-sm3-hash -*/ - -#ifdef LTC_SM3 - -const struct ltc_hash_descriptor sm3_desc = -{ - "sm3", /* name of hash */ - 36, /* internal ID */ - 32, /* Size of digest in octets */ - 64, /* Input block size in octets */ - {1,2,156,10197,1,401}, /* ASN.1 OID 1.2.156.10197.1.401 */ - 6, /* Length OID */ - &sm3_init, - &sm3_process, - &sm3_done, - &sm3_test, - NULL -}; - -/* Permutation functions */ -static LTC_INLINE ulong32 s_sm3_P0(ulong32 X) -{ - return X ^ ROLc(X, 9) ^ ROLc(X, 17); -} - -static LTC_INLINE ulong32 s_sm3_P1(ulong32 X) -{ - return X ^ ROLc(X, 15) ^ ROLc(X, 23); -} - -/* Message expansion */ -static LTC_INLINE ulong32 s_sm3_EE(ulong32 W0, ulong32 W7, ulong32 W13, ulong32 W3, ulong32 W10) -{ - return s_sm3_P1(W0 ^ W7 ^ ROLc(W13, 15)) ^ ROLc(W3, 7) ^ W10; -} - -/* Boolean functions for rounds 0-15 */ -#define FF0(X, Y, Z) ((X) ^ (Y) ^ (Z)) -#define GG0(X, Y, Z) ((X) ^ (Y) ^ (Z)) - -/* Boolean functions for rounds 16-63 */ -#define FF1(X, Y, Z) (((X) & (Y)) | (((X) | (Y)) & (Z))) -#define GG1(X, Y, Z) ((Z) ^ ((X) & ((Y) ^ (Z)))) - -/* Round function for rounds 0-15 */ -#define R1(A, B, C, D, E, F, G, H, TJ, Wi, Wj) do { \ - const ulong32 A12 = ROLc((A), 12); \ - const ulong32 TT0 = ROLc(A12 + (E) + (TJ), 7); \ - const ulong32 TT1 = FF0((A), (B), (C)) + (D) + (TT0 ^ A12) + (Wj); \ - const ulong32 TT2 = GG0((E), (F), (G)) + (H) + TT0 + (Wi); \ - (B) = ROLc((B), 9); \ - (D) = TT1; \ - (F) = ROLc((F), 19); \ - (H) = s_sm3_P0(TT2); \ -} while(0) - -/* Round function for rounds 16-63 */ -#define R2(A, B, C, D, E, F, G, H, TJ, Wi, Wj) do { \ - const ulong32 A12 = ROLc((A), 12); \ - const ulong32 TT0 = ROLc(A12 + (E) + (TJ), 7); \ - const ulong32 TT1 = FF1((A), (B), (C)) + (D) + (TT0 ^ A12) + (Wj); \ - const ulong32 TT2 = GG1((E), (F), (G)) + (H) + TT0 + (Wi); \ - (B) = ROLc((B), 9); \ - (D) = TT1; \ - (F) = ROLc((F), 19); \ - (H) = s_sm3_P0(TT2); \ -} while(0) - -static int s_sm3_compress(hash_state *md, const unsigned char *buf) -{ - ulong32 A, B, C, D, E, F, G, H; - ulong32 W00, W01, W02, W03, W04, W05, W06, W07; - ulong32 W08, W09, W10, W11, W12, W13, W14, W15; - - /* load state */ - A = md->sm3.state[0]; - B = md->sm3.state[1]; - C = md->sm3.state[2]; - D = md->sm3.state[3]; - E = md->sm3.state[4]; - F = md->sm3.state[5]; - G = md->sm3.state[6]; - H = md->sm3.state[7]; - - /* load message block (big-endian) */ - LOAD32H(W00, buf + 0); LOAD32H(W01, buf + 4); - LOAD32H(W02, buf + 8); LOAD32H(W03, buf + 12); - LOAD32H(W04, buf + 16); LOAD32H(W05, buf + 20); - LOAD32H(W06, buf + 24); LOAD32H(W07, buf + 28); - LOAD32H(W08, buf + 32); LOAD32H(W09, buf + 36); - LOAD32H(W10, buf + 40); LOAD32H(W11, buf + 44); - LOAD32H(W12, buf + 48); LOAD32H(W13, buf + 52); - LOAD32H(W14, buf + 56); LOAD32H(W15, buf + 60); - - /* rounds 0-15 (R1) */ - R1(A, B, C, D, E, F, G, H, 0x79CC4519UL, W00, W00 ^ W04); - W00 = s_sm3_EE(W00, W07, W13, W03, W10); - R1(D, A, B, C, H, E, F, G, 0xF3988A32UL, W01, W01 ^ W05); - W01 = s_sm3_EE(W01, W08, W14, W04, W11); - R1(C, D, A, B, G, H, E, F, 0xE7311465UL, W02, W02 ^ W06); - W02 = s_sm3_EE(W02, W09, W15, W05, W12); - R1(B, C, D, A, F, G, H, E, 0xCE6228CBUL, W03, W03 ^ W07); - W03 = s_sm3_EE(W03, W10, W00, W06, W13); - R1(A, B, C, D, E, F, G, H, 0x9CC45197UL, W04, W04 ^ W08); - W04 = s_sm3_EE(W04, W11, W01, W07, W14); - R1(D, A, B, C, H, E, F, G, 0x3988A32FUL, W05, W05 ^ W09); - W05 = s_sm3_EE(W05, W12, W02, W08, W15); - R1(C, D, A, B, G, H, E, F, 0x7311465EUL, W06, W06 ^ W10); - W06 = s_sm3_EE(W06, W13, W03, W09, W00); - R1(B, C, D, A, F, G, H, E, 0xE6228CBCUL, W07, W07 ^ W11); - W07 = s_sm3_EE(W07, W14, W04, W10, W01); - R1(A, B, C, D, E, F, G, H, 0xCC451979UL, W08, W08 ^ W12); - W08 = s_sm3_EE(W08, W15, W05, W11, W02); - R1(D, A, B, C, H, E, F, G, 0x988A32F3UL, W09, W09 ^ W13); - W09 = s_sm3_EE(W09, W00, W06, W12, W03); - R1(C, D, A, B, G, H, E, F, 0x311465E7UL, W10, W10 ^ W14); - W10 = s_sm3_EE(W10, W01, W07, W13, W04); - R1(B, C, D, A, F, G, H, E, 0x6228CBCEUL, W11, W11 ^ W15); - W11 = s_sm3_EE(W11, W02, W08, W14, W05); - R1(A, B, C, D, E, F, G, H, 0xC451979CUL, W12, W12 ^ W00); - W12 = s_sm3_EE(W12, W03, W09, W15, W06); - R1(D, A, B, C, H, E, F, G, 0x88A32F39UL, W13, W13 ^ W01); - W13 = s_sm3_EE(W13, W04, W10, W00, W07); - R1(C, D, A, B, G, H, E, F, 0x11465E73UL, W14, W14 ^ W02); - W14 = s_sm3_EE(W14, W05, W11, W01, W08); - R1(B, C, D, A, F, G, H, E, 0x228CBCE6UL, W15, W15 ^ W03); - W15 = s_sm3_EE(W15, W06, W12, W02, W09); - - /* rounds 16-63 (R2) */ - R2(A, B, C, D, E, F, G, H, 0x9D8A7A87UL, W00, W00 ^ W04); - W00 = s_sm3_EE(W00, W07, W13, W03, W10); - R2(D, A, B, C, H, E, F, G, 0x3B14F50FUL, W01, W01 ^ W05); - W01 = s_sm3_EE(W01, W08, W14, W04, W11); - R2(C, D, A, B, G, H, E, F, 0x7629EA1EUL, W02, W02 ^ W06); - W02 = s_sm3_EE(W02, W09, W15, W05, W12); - R2(B, C, D, A, F, G, H, E, 0xEC53D43CUL, W03, W03 ^ W07); - W03 = s_sm3_EE(W03, W10, W00, W06, W13); - R2(A, B, C, D, E, F, G, H, 0xD8A7A879UL, W04, W04 ^ W08); - W04 = s_sm3_EE(W04, W11, W01, W07, W14); - R2(D, A, B, C, H, E, F, G, 0xB14F50F3UL, W05, W05 ^ W09); - W05 = s_sm3_EE(W05, W12, W02, W08, W15); - R2(C, D, A, B, G, H, E, F, 0x629EA1E7UL, W06, W06 ^ W10); - W06 = s_sm3_EE(W06, W13, W03, W09, W00); - R2(B, C, D, A, F, G, H, E, 0xC53D43CEUL, W07, W07 ^ W11); - W07 = s_sm3_EE(W07, W14, W04, W10, W01); - R2(A, B, C, D, E, F, G, H, 0x8A7A879DUL, W08, W08 ^ W12); - W08 = s_sm3_EE(W08, W15, W05, W11, W02); - R2(D, A, B, C, H, E, F, G, 0x14F50F3BUL, W09, W09 ^ W13); - W09 = s_sm3_EE(W09, W00, W06, W12, W03); - R2(C, D, A, B, G, H, E, F, 0x29EA1E76UL, W10, W10 ^ W14); - W10 = s_sm3_EE(W10, W01, W07, W13, W04); - R2(B, C, D, A, F, G, H, E, 0x53D43CECUL, W11, W11 ^ W15); - W11 = s_sm3_EE(W11, W02, W08, W14, W05); - R2(A, B, C, D, E, F, G, H, 0xA7A879D8UL, W12, W12 ^ W00); - W12 = s_sm3_EE(W12, W03, W09, W15, W06); - R2(D, A, B, C, H, E, F, G, 0x4F50F3B1UL, W13, W13 ^ W01); - W13 = s_sm3_EE(W13, W04, W10, W00, W07); - R2(C, D, A, B, G, H, E, F, 0x9EA1E762UL, W14, W14 ^ W02); - W14 = s_sm3_EE(W14, W05, W11, W01, W08); - R2(B, C, D, A, F, G, H, E, 0x3D43CEC5UL, W15, W15 ^ W03); - W15 = s_sm3_EE(W15, W06, W12, W02, W09); - - R2(A, B, C, D, E, F, G, H, 0x7A879D8AUL, W00, W00 ^ W04); - W00 = s_sm3_EE(W00, W07, W13, W03, W10); - R2(D, A, B, C, H, E, F, G, 0xF50F3B14UL, W01, W01 ^ W05); - W01 = s_sm3_EE(W01, W08, W14, W04, W11); - R2(C, D, A, B, G, H, E, F, 0xEA1E7629UL, W02, W02 ^ W06); - W02 = s_sm3_EE(W02, W09, W15, W05, W12); - R2(B, C, D, A, F, G, H, E, 0xD43CEC53UL, W03, W03 ^ W07); - W03 = s_sm3_EE(W03, W10, W00, W06, W13); - R2(A, B, C, D, E, F, G, H, 0xA879D8A7UL, W04, W04 ^ W08); - W04 = s_sm3_EE(W04, W11, W01, W07, W14); - R2(D, A, B, C, H, E, F, G, 0x50F3B14FUL, W05, W05 ^ W09); - W05 = s_sm3_EE(W05, W12, W02, W08, W15); - R2(C, D, A, B, G, H, E, F, 0xA1E7629EUL, W06, W06 ^ W10); - W06 = s_sm3_EE(W06, W13, W03, W09, W00); - R2(B, C, D, A, F, G, H, E, 0x43CEC53DUL, W07, W07 ^ W11); - W07 = s_sm3_EE(W07, W14, W04, W10, W01); - R2(A, B, C, D, E, F, G, H, 0x879D8A7AUL, W08, W08 ^ W12); - W08 = s_sm3_EE(W08, W15, W05, W11, W02); - R2(D, A, B, C, H, E, F, G, 0x0F3B14F5UL, W09, W09 ^ W13); - W09 = s_sm3_EE(W09, W00, W06, W12, W03); - R2(C, D, A, B, G, H, E, F, 0x1E7629EAUL, W10, W10 ^ W14); - W10 = s_sm3_EE(W10, W01, W07, W13, W04); - R2(B, C, D, A, F, G, H, E, 0x3CEC53D4UL, W11, W11 ^ W15); - W11 = s_sm3_EE(W11, W02, W08, W14, W05); - R2(A, B, C, D, E, F, G, H, 0x79D8A7A8UL, W12, W12 ^ W00); - W12 = s_sm3_EE(W12, W03, W09, W15, W06); - R2(D, A, B, C, H, E, F, G, 0xF3B14F50UL, W13, W13 ^ W01); - W13 = s_sm3_EE(W13, W04, W10, W00, W07); - R2(C, D, A, B, G, H, E, F, 0xE7629EA1UL, W14, W14 ^ W02); - W14 = s_sm3_EE(W14, W05, W11, W01, W08); - R2(B, C, D, A, F, G, H, E, 0xCEC53D43UL, W15, W15 ^ W03); - W15 = s_sm3_EE(W15, W06, W12, W02, W09); - - R2(A, B, C, D, E, F, G, H, 0x9D8A7A87UL, W00, W00 ^ W04); - W00 = s_sm3_EE(W00, W07, W13, W03, W10); - R2(D, A, B, C, H, E, F, G, 0x3B14F50FUL, W01, W01 ^ W05); - W01 = s_sm3_EE(W01, W08, W14, W04, W11); - R2(C, D, A, B, G, H, E, F, 0x7629EA1EUL, W02, W02 ^ W06); - W02 = s_sm3_EE(W02, W09, W15, W05, W12); - R2(B, C, D, A, F, G, H, E, 0xEC53D43CUL, W03, W03 ^ W07); - W03 = s_sm3_EE(W03, W10, W00, W06, W13); - R2(A, B, C, D, E, F, G, H, 0xD8A7A879UL, W04, W04 ^ W08); - R2(D, A, B, C, H, E, F, G, 0xB14F50F3UL, W05, W05 ^ W09); - R2(C, D, A, B, G, H, E, F, 0x629EA1E7UL, W06, W06 ^ W10); - R2(B, C, D, A, F, G, H, E, 0xC53D43CEUL, W07, W07 ^ W11); - R2(A, B, C, D, E, F, G, H, 0x8A7A879DUL, W08, W08 ^ W12); - R2(D, A, B, C, H, E, F, G, 0x14F50F3BUL, W09, W09 ^ W13); - R2(C, D, A, B, G, H, E, F, 0x29EA1E76UL, W10, W10 ^ W14); - R2(B, C, D, A, F, G, H, E, 0x53D43CECUL, W11, W11 ^ W15); - R2(A, B, C, D, E, F, G, H, 0xA7A879D8UL, W12, W12 ^ W00); - R2(D, A, B, C, H, E, F, G, 0x4F50F3B1UL, W13, W13 ^ W01); - R2(C, D, A, B, G, H, E, F, 0x9EA1E762UL, W14, W14 ^ W02); - R2(B, C, D, A, F, G, H, E, 0x3D43CEC5UL, W15, W15 ^ W03); - - /* feedback */ - md->sm3.state[0] ^= A; - md->sm3.state[1] ^= B; - md->sm3.state[2] ^= C; - md->sm3.state[3] ^= D; - md->sm3.state[4] ^= E; - md->sm3.state[5] ^= F; - md->sm3.state[6] ^= G; - md->sm3.state[7] ^= H; - - return CRYPT_OK; -} - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int sm3_init(hash_state * md) -{ - LTC_ARGCHK(md != NULL); - md->sm3.state[0] = 0x7380166FUL; - md->sm3.state[1] = 0x4914B2B9UL; - md->sm3.state[2] = 0x172442D7UL; - md->sm3.state[3] = 0xDA8A0600UL; - md->sm3.state[4] = 0xA96F30BCUL; - md->sm3.state[5] = 0x163138AAUL; - md->sm3.state[6] = 0xE38DEE4DUL; - md->sm3.state[7] = 0xB0FB0E4EUL; - md->sm3.curlen = 0; - md->sm3.length = 0; - return CRYPT_OK; -} - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(sm3_process, s_sm3_compress, sm3, 64) - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (32 bytes) - @return CRYPT_OK if successful -*/ -int sm3_done(hash_state * md, unsigned char *out) -{ - int i; - - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); - - if (md->sm3.curlen >= sizeof(md->sm3.buf)) { - return CRYPT_INVALID_ARG; - } - - /* increase the length of the message */ - md->sm3.length += md->sm3.curlen * 8; - - /* append the '1' bit */ - md->sm3.buf[md->sm3.curlen++] = (unsigned char)0x80; - - /* if the length is currently above 56 bytes we append zeros - * then compress. Then we can fall back to padding zeros and length - * encoding like normal. - */ - if (md->sm3.curlen > 56) { - while (md->sm3.curlen < 64) { - md->sm3.buf[md->sm3.curlen++] = (unsigned char)0; - } - s_sm3_compress(md, md->sm3.buf); - md->sm3.curlen = 0; - } - - /* pad upto 56 bytes of zeroes */ - while (md->sm3.curlen < 56) { - md->sm3.buf[md->sm3.curlen++] = (unsigned char)0; - } - - /* store length (big-endian) */ - STORE64H(md->sm3.length, md->sm3.buf+56); - s_sm3_compress(md, md->sm3.buf); - - /* copy output (big-endian) */ - for (i = 0; i < 8; i++) { - STORE32H(md->sm3.state[i], out+(4*i)); - } - return CRYPT_OK; -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sm3_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - const char *msg; - unsigned char hash[32]; - } tests[] = { - /* Example 1 from the SM3 specification (GM/T 0004-2012) */ - { "abc", - { 0x66, 0xc7, 0xf0, 0xf4, 0x62, 0xee, 0xed, 0xd9, - 0xd1, 0xf2, 0xd4, 0x6b, 0xdc, 0x10, 0xe4, 0xe2, - 0x41, 0x67, 0xc4, 0x87, 0x5c, 0xf2, 0xf7, 0xa2, - 0x29, 0x7d, 0xa0, 0x2b, 0x8f, 0x4b, 0xa8, 0xe0 } - }, - /* Example 2 from the SM3 specification (GM/T 0004-2012) */ - { "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd", - { 0xde, 0xbe, 0x9f, 0xf9, 0x22, 0x75, 0xb8, 0xa1, - 0x38, 0x60, 0x48, 0x89, 0xc1, 0x8e, 0x5a, 0x4d, - 0x6f, 0xdb, 0x70, 0xe5, 0x38, 0x7e, 0x57, 0x65, - 0x29, 0x3d, 0xcb, 0xa3, 0x9c, 0x0c, 0x57, 0x32 } - }, - /* Additional test vectors generated by `openssl dgst -sm3` (OpenSSL 3.0.13) */ - { "", - { 0x1a, 0xb2, 0x1d, 0x83, 0x55, 0xcf, 0xa1, 0x7f, - 0x8e, 0x61, 0x19, 0x48, 0x31, 0xe8, 0x1a, 0x8f, - 0x22, 0xbe, 0xc8, 0xc7, 0x28, 0xfe, 0xfb, 0x74, - 0x7e, 0xd0, 0x35, 0xeb, 0x50, 0x82, 0xaa, 0x2b } - }, - { "a", - { 0x62, 0x34, 0x76, 0xac, 0x18, 0xf6, 0x5a, 0x29, - 0x09, 0xe4, 0x3c, 0x7f, 0xec, 0x61, 0xb4, 0x9c, - 0x7e, 0x76, 0x4a, 0x91, 0xa1, 0x8c, 0xcb, 0x82, - 0xf1, 0x91, 0x7a, 0x29, 0xc8, 0x6c, 0x5e, 0x88 } - }, - { "abcdefghijklmnopqrstuvwxyz", - { 0xb8, 0x0f, 0xe9, 0x7a, 0x4d, 0xa2, 0x4a, 0xfc, - 0x27, 0x75, 0x64, 0xf6, 0x6a, 0x35, 0x9e, 0xf4, - 0x40, 0x46, 0x2a, 0xd2, 0x8d, 0xcc, 0x6d, 0x63, - 0xad, 0xb2, 0x4d, 0x5c, 0x20, 0xa6, 0x15, 0x95 } - }, - { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", - { 0x29, 0x71, 0xd1, 0x0c, 0x88, 0x42, 0xb7, 0x0c, - 0x97, 0x9e, 0x55, 0x06, 0x34, 0x80, 0xc5, 0x0b, - 0xac, 0xff, 0xd9, 0x0e, 0x98, 0xe2, 0xe6, 0x0d, - 0x25, 0x12, 0xab, 0x8a, 0xbf, 0xdf, 0xce, 0xc5 } - }, - { "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", - { 0x28, 0x83, 0x37, 0xee, 0xf5, 0x1e, 0xec, 0x62, - 0xe7, 0x54, 0x4d, 0x72, 0x70, 0x42, 0x4c, 0x8d, - 0xbe, 0x65, 0x62, 0x54, 0xc9, 0x98, 0x52, 0x87, - 0x0a, 0x73, 0xb2, 0x45, 0x3a, 0x6a, 0x7f, 0xb1 } - }, - { "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", - { 0xba, 0x00, 0xeb, 0xed, 0xaa, 0xb5, 0x40, 0x65, - 0xa5, 0xfd, 0x4f, 0x9f, 0x56, 0x32, 0x60, 0x16, - 0x20, 0x31, 0x66, 0xbc, 0xee, 0x3e, 0xed, 0x44, - 0xea, 0x86, 0x8d, 0x59, 0xd6, 0x7a, 0xa3, 0xc8 } - }, - { "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", - { 0x58, 0x73, 0x08, 0x54, 0x35, 0x51, 0x88, 0x1e, - 0xbd, 0x70, 0xd2, 0x7a, 0xd3, 0x58, 0xff, 0x5d, - 0xcd, 0xf2, 0x4a, 0xc5, 0x48, 0x22, 0xe2, 0xf7, - 0xb7, 0xc3, 0xed, 0xce, 0x09, 0x85, 0xd2, 0x1b } - }, - { "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", - { 0x61, 0x6e, 0xc4, 0x33, 0xc3, 0x59, 0xe7, 0xc2, - 0xb1, 0x9f, 0x36, 0x0e, 0x2b, 0x8f, 0x2a, 0x1b, - 0x6e, 0x9e, 0xd7, 0x6b, 0x8d, 0xc1, 0xa7, 0xd2, - 0x07, 0xb3, 0x1a, 0x53, 0x41, 0xc6, 0x11, 0xe9 } - } - }; - - int i; - unsigned char tmp[32]; - hash_state md; - - for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) { - sm3_init(&md); - sm3_process(&md, (const unsigned char *)tests[i].msg, XSTRLEN(tests[i].msg)); - sm3_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "SM3", i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#undef FF0 -#undef GG0 -#undef FF1 -#undef GG1 -#undef R1 -#undef R2 - -#endif diff --git a/src/headers/tomcrypt_argchk.h b/src/headers/tomcrypt_argchk.h deleted file mode 100644 index 25f75b9f..00000000 --- a/src/headers/tomcrypt_argchk.h +++ /dev/null @@ -1,38 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* Defines the LTC_ARGCHK macro used within the library */ -/* ARGTYPE is defined in tomcrypt_cfg.h */ - -/* ARGTYPE is per default defined to 0 */ -#if ARGTYPE == 0 - -#include - -LTC_NORETURN void crypt_argchk(const char *v, const char *s, int d); -#define LTC_ARGCHK(x) do { if (!(x)) { crypt_argchk(#x, __FILE__, __LINE__); } }while(0) - -#elif ARGTYPE == 1 - -/* fatal type of error */ -#define LTC_ARGCHK(x) assert((x)) - -#elif ARGTYPE == 2 - -#define LTC_ARGCHK(x) if (!(x)) { fprintf(stderr, "\nwarning: ARGCHK failed at %s:%d\n", __FILE__, __LINE__); } - -#elif ARGTYPE == 3 - -#define LTC_ARGCHK(x) LTC_UNUSED_PARAM(x) - -#elif ARGTYPE == 4 - -#define LTC_ARGCHK(x) if (!(x)) return CRYPT_INVALID_ARG; -#define LTC_ARGCHKVD(x) if (!(x)) return; - -#endif - -#if defined(LTC_ARGCHK) && !defined(LTC_ARGCHKVD) -#define LTC_ARGCHKVD(x) LTC_ARGCHK(x) -#endif - diff --git a/src/headers/tomcrypt_cfg.h b/src/headers/tomcrypt_cfg.h deleted file mode 100644 index 93c08de8..00000000 --- a/src/headers/tomcrypt_cfg.h +++ /dev/null @@ -1,450 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* This is the build config file. - * - * With this you can setup what to include/exclude automatically during any build. Just comment - * out the line that #define's the word for the thing you want to remove. phew! - */ - -#ifndef TOMCRYPT_CFG_H -#define TOMCRYPT_CFG_H - -#if defined(_WIN32) || defined(_MSC_VER) - #define LTC_CALL __cdecl -#elif !defined(LTC_CALL) - #define LTC_CALL -#endif - -#ifndef LTC_EXPORT - #define LTC_EXPORT -#endif - -/* certain platforms use macros for these, making the prototypes broken */ -#ifndef LTC_NO_PROTOTYPES - -/* you can change how memory allocation works ... */ -LTC_EXPORT void * LTC_CALL XMALLOC(size_t n); -LTC_EXPORT void * LTC_CALL XREALLOC(void *p, size_t n); -LTC_EXPORT void * LTC_CALL XCALLOC(size_t n, size_t s); -LTC_EXPORT void LTC_CALL XFREE(void *p); - -LTC_EXPORT void LTC_CALL XQSORT(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); - -/* change the clock function too */ -LTC_EXPORT clock_t LTC_CALL XCLOCK(void); - -/* various other functions */ -LTC_EXPORT void * LTC_CALL XMEMCPY(void *dest, const void *src, size_t n); -LTC_EXPORT int LTC_CALL XMEMCMP(const void *s1, const void *s2, size_t n); -LTC_EXPORT void * LTC_CALL XMEMSET(void *s, int c, size_t n); - -LTC_EXPORT int LTC_CALL XSTRCMP(const char *s1, const char *s2); - -#endif - -/* some compilers do not like "inline" (or maybe "static inline"), namely: HP cc, IBM xlc */ -#if !defined(LTC_NO_INLINE) -#if defined(__GNUC__) || defined(__xlc__) - #define LTC_INLINE __inline__ -#elif defined(_MSC_VER) || defined(__HP_cc) - #define LTC_INLINE __inline -#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define LTC_INLINE inline -#endif -#endif -#if !defined(LTC_INLINE) - #if !defined(LTC_NO_INLINE) - #define LTC_NO_INLINE - #endif - #define LTC_INLINE -#endif - -#if defined(__clang__) || defined(__GNUC_MINOR__) -#define LTC_NORETURN __attribute__ ((noreturn)) -#elif defined(_MSC_VER) -#define LTC_NORETURN __declspec(noreturn) -#else -#define LTC_NORETURN -#endif - -/* type of argument checking, 0=default, 1=fatal and 2=error+continue, 3=nothing */ -#ifndef ARGTYPE - #define ARGTYPE 0 -#endif - -#undef LTC_ENCRYPT -#define LTC_ENCRYPT 0 -#undef LTC_DECRYPT -#define LTC_DECRYPT 1 - -/* Controls endianess and size of registers. Leave uncommented to get platform neutral [slower] code - * - * Note: in order to use the optimized macros your platform must support unaligned 32 and 64 bit read/writes. - * The x86 platforms allow this but some others [ARM for instance] do not. On those platforms you **MUST** - * use the portable [slower] macros. - */ -/* detect x86/i386/ARM 32bit */ -#if defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_ARM) - #define ENDIAN_LITTLE - #define ENDIAN_32BITWORD - #define LTC_FAST -#endif - -/* detect amd64/x64/arm64 */ -#if defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) || defined(_M_ARM64) - #define ENDIAN_LITTLE - #define ENDIAN_64BITWORD - #define LTC_FAST -#endif - -/* detect PPC32 */ -#if defined(LTC_PPC32) - #define ENDIAN_BIG - #define ENDIAN_32BITWORD - #define LTC_FAST -#endif - -/* detects MIPS R5900 processors (PS2) */ -#if (defined(__R5900) || defined(R5900) || defined(__R5900__)) && (defined(_mips) || defined(__mips__) || defined(mips)) - #define ENDIAN_64BITWORD - #if defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__) - #define ENDIAN_BIG - #else - #define ENDIAN_LITTLE - #endif -#endif - -/* detect AIX */ -#if defined(_AIX) && defined(_BIG_ENDIAN) - #define ENDIAN_BIG - #if defined(__LP64__) || defined(_ARCH_PPC64) - #define ENDIAN_64BITWORD - #else - #define ENDIAN_32BITWORD - #endif -#endif - -/* detect HP-UX */ -#if defined(__hpux) || defined(__hpux__) - #define ENDIAN_BIG - #if defined(__ia64) || defined(__ia64__) || defined(__LP64__) - #define ENDIAN_64BITWORD - #else - #define ENDIAN_32BITWORD - #endif -#endif - -/* detect Apple OS X */ -#if defined(__APPLE__) && defined(__MACH__) - #if defined(__LITTLE_ENDIAN__) || defined(__x86_64__) - #define ENDIAN_LITTLE - #else - #define ENDIAN_BIG - #endif - #if defined(__LP64__) || defined(__x86_64__) - #define ENDIAN_64BITWORD - #else - #define ENDIAN_32BITWORD - #endif -#endif - -/* detect SPARC and SPARC64 */ -#if defined(__sparc__) || defined(__sparc) - #define ENDIAN_BIG - #if defined(__arch64__) || defined(__sparcv9) || defined(__sparc_v9__) - #define ENDIAN_64BITWORD - #else - #define ENDIAN_32BITWORD - #endif -#endif - -/* detect IBM S390(x) */ -#if defined(__s390x__) || defined(__s390__) - #define ENDIAN_BIG - #if defined(__s390x__) - #define ENDIAN_64BITWORD - #else - #define ENDIAN_32BITWORD - #endif -#endif - -/* detect PPC64 */ -#if defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) - #define ENDIAN_64BITWORD - #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ - #define ENDIAN_BIG - #elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - #define ENDIAN_LITTLE - #endif - #define LTC_FAST -#endif - -/* Detect ILP32, commonly known as x32 on Linux and also possible on AIX */ -#if defined(_ILP32) || defined(__ILP32__) - #define ENDIAN_64BITWORD_ILP32 -#endif - -/* endianness fallback */ -#if !defined(ENDIAN_BIG) && !defined(ENDIAN_LITTLE) - #if defined(_BYTE_ORDER) && _BYTE_ORDER == _BIG_ENDIAN || \ - defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN || \ - defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ || \ - defined(__BIG_ENDIAN__) || \ - defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \ - defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__) || \ - defined(__m68k__) - #define ENDIAN_BIG - #elif defined(_BYTE_ORDER) && _BYTE_ORDER == _LITTLE_ENDIAN || \ - defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN || \ - defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ || \ - defined(__LITTLE_ENDIAN__) || \ - defined(__ARMEL__) || defined(__THUMBEL__) || defined(__AARCH64EL__) || \ - defined(_MIPSEL) || defined(__MIPSEL) || defined(__MIPSEL__) || \ - defined(_M_ARM) || defined(_M_ARM64) - #define ENDIAN_LITTLE - #else - #error Cannot detect endianness - #endif -#endif - -/* ulong64: 64-bit data type */ -#ifdef _MSC_VER - #define CONST64(n) n ## ui64 - typedef unsigned __int64 ulong64; - typedef __int64 long64; -#else - #define CONST64(n) n ## uLL - typedef unsigned long long ulong64; - typedef long long long64; -#endif - -/* ulong32: "32-bit at least" data type */ -#if defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) || \ - defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) || \ - defined(__s390x__) || defined(__arch64__) || defined(__aarch64__) || \ - defined(__sparcv9) || defined(__sparc_v9__) || defined(__sparc64__) || \ - defined(__ia64) || defined(__ia64__) || defined(__itanium__) || defined(_M_IA64) || \ - defined(__LP64__) || defined(_LP64) || defined(__64BIT__) || defined(_M_ARM64) - typedef unsigned ulong32; - #if !defined(ENDIAN_64BITWORD) && !defined(ENDIAN_32BITWORD) - #define ENDIAN_64BITWORD - #endif -#else - typedef unsigned long ulong32; - #if !defined(ENDIAN_64BITWORD) && !defined(ENDIAN_32BITWORD) - #define ENDIAN_32BITWORD - #endif -#endif - -#if defined(ENDIAN_64BITWORD) && !defined(_MSC_VER) -typedef unsigned long long ltc_mp_digit; -#else -typedef unsigned long ltc_mp_digit; -#endif - -/* No asm is a quick way to disable anything "not portable" */ -#ifdef LTC_NO_ASM - #define ENDIAN_NEUTRAL - #undef ENDIAN_32BITWORD - #undef ENDIAN_64BITWORD - #undef LTC_FAST - #define LTC_NO_ACCEL - #define LTC_NO_BSWAP - #define LTC_NO_CLZL - #define LTC_NO_CTZL - #define LTC_NO_ROLC - #define LTC_NO_ROTATE -#endif - -/* Just portable C implementations */ -#ifdef LTC_NO_ACCEL - #define LTC_NO_AES_NI - #define LTC_NO_GCM_PCLMUL - #define LTC_NO_GCM_PMULL - #define LTC_NO_SHA1_X86 - #define LTC_NO_SHA224_X86 - #define LTC_NO_SHA256_X86 -#endif - -/* No LTC_FAST if explicitly disabled */ -#if defined(LTC_NO_FAST) - #undef LTC_FAST -#endif - -#ifdef LTC_FAST - #ifdef ENDIAN_64BITWORD - typedef ulong64 LTC_FAST_TYPE; - #else - typedef ulong32 LTC_FAST_TYPE; - #endif -#endif - -#if !defined(ENDIAN_NEUTRAL) && (defined(ENDIAN_BIG) || defined(ENDIAN_LITTLE)) && !(defined(ENDIAN_32BITWORD) || defined(ENDIAN_64BITWORD)) - #error You must specify a word size as well as endianess in tomcrypt_cfg.h -#endif - -#if !(defined(ENDIAN_BIG) || defined(ENDIAN_LITTLE)) - #define ENDIAN_NEUTRAL -#endif - -#if (defined(ENDIAN_32BITWORD) && defined(ENDIAN_64BITWORD)) - #error Cannot be 32 and 64 bit words... -#endif - -/* gcc 4.3 and up has a bswap builtin; detect it by gcc version. - * clang also supports the bswap builtin, and although clang pretends - * to be gcc (macro-wise, anyway), clang pretends to be a version - * prior to gcc 4.3, so we can't detect bswap that way. Instead, - * clang has a __has_builtin mechanism that can be used to check - * for builtins: - * http://clang.llvm.org/docs/LanguageExtensions.html#feature_check */ -#ifndef __has_builtin - #define __has_builtin(x) 0 -#endif -#if !defined(LTC_NO_BSWAP) && defined(__GNUC__) && \ - ((__GNUC__ * 100 + __GNUC_MINOR__ >= 403) || \ - (__has_builtin(__builtin_bswap32) && __has_builtin(__builtin_bswap64))) - #define LTC_HAVE_BSWAP_BUILTIN -#endif - -#if !defined(LTC_NO_ROTATE) && (__has_builtin(__builtin_rotateleft32) && __has_builtin(__builtin_rotateright32)) - #define LTC_HAVE_ROTATE_BUILTIN -#endif - -#if !defined(LTC_NO_CLZL) && __has_builtin(__builtin_clzl) - #define LTC_HAVE_CLZL_BUILTIN -#endif - -#if !defined(LTC_NO_CTZL) && __has_builtin(__builtin_ctzl) - #define LTC_HAVE_CTZL_BUILTIN -#endif - -#if (defined(__x86_64__) || defined(__i386__) || defined(_M_X64) || defined(_M_IX86)) - #define LTC_ARCH_X86 - #if !defined(LTC_NO_AES_NI) - #define LTC_AES_NI - #endif - #if !defined(LTC_NO_GCM_PCLMUL) - #define LTC_GCM_PCLMUL - #undef LTC_GCM_TABLES - #endif - #if (defined __GNUC__ && (__GNUC__ * 100 + __GNUC_MINOR__ >= 409)) || \ - (defined __clang__ && (__clang_major__ * 100 + __clang_minor__ >= 308)) || \ - (defined _MSC_VER && defined _MSC_FULL_VER && (_MSC_VER) >= 1900) - #if !defined(LTC_NO_SHA1_X86) - #define LTC_SHA1_X86 - #endif - #if !defined(LTC_NO_SHA224_X86) - #define LTC_SHA224_X86 - #endif - #if !defined(LTC_NO_SHA256_X86) - #define LTC_SHA256_X86 - #endif - #endif - /* the SHA512 extension intrinsics require GCC 14 resp. clang 17 */ - #if (defined __GNUC__ && !defined __clang__ && (__GNUC__ >= 14)) || \ - (defined __clang__ && (__clang_major__ >= 17)) || \ - (defined _MSC_FULL_VER && (_MSC_FULL_VER) >= 194033813l) /* MSVC 2022 17.10 */ - #if !defined(LTC_NO_SHA384_X86) - #define LTC_SHA384_X86 - #endif - #if !defined(LTC_NO_SHA512_X86) - #define LTC_SHA512_X86 - #endif - #if !defined(LTC_NO_SHA512_224_X86) - #define LTC_SHA512_224_X86 - #endif - #if !defined(LTC_NO_SHA512_256_X86) - #define LTC_SHA512_256_X86 - #endif - #endif -#endif - -#if defined(__aarch64__) || defined(_M_ARM64) - #define LTC_ARCH_AARCH64 - #if !defined(LTC_NO_GCM_PMULL) - #define LTC_GCM_PMULL - #undef LTC_GCM_TABLES - #endif -#endif - -#if defined(__GNUC__) - #define LTC_ALIGN_MSVC(n) - #define LTC_ALIGN(n) __attribute__((aligned(n))) -#elif defined(_MSC_VER) - #define LTC_ALIGN_MSVC(n) __declspec(align(n)) - #define LTC_ALIGN(n) -#else - #define LTC_ALIGN_MSVC(n) - #define LTC_ALIGN(n) -#endif - -/* Choose Windows Vista as minimum Version if we're compiling with at least VS2019 - * This is done in order to test the bcrypt RNG and can still be overridden by the user. */ -#if defined(_MSC_VER) && _MSC_VER >= 1920 -# ifndef _WIN32_WINNT -# define _WIN32_WINNT 0x0600 -# endif -# ifndef WINVER -# define WINVER 0x0600 -# endif -#endif - -/* Define `LTC_NO_NULL_TERMINATION_CHECK` in the user code - * before including `tomcrypt.h` to disable this functionality. - */ -#if defined(__GNUC__) && __GNUC__ >= 4 && !defined(LTC_NO_NULL_TERMINATION_CHECK) -# define LTC_NULL_TERMINATED __attribute__((sentinel)) -#else -# define LTC_NULL_TERMINATED -#endif - -#ifndef LTC_DEPRECATED -#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 405) -# define LTC_DEPRECATED(s) __attribute__((deprecated("replaced by " #s))) -#elif defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 301) -# define LTC_DEPRECATED(s) __attribute__((deprecated)) -#elif defined(_MSC_VER) && _MSC_VER >= 1500 - /* supported since Visual Studio 2008 */ -# define LTC_DEPRECATED(s) __declspec(deprecated("replaced by " #s)) -#else -# define LTC_DEPRECATED(s) -#endif -#endif - -#ifndef LTC_DEPRECATED_PRAGMA -#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 405) -# define PRIVATE_LTC_DEPRECATED_PRAGMA(s) _Pragma(#s) -# define LTC_DEPRECATED_PRAGMA(s) PRIVATE_LTC_DEPRECATED_PRAGMA(GCC warning s) -#elif defined(_MSC_VER) && _MSC_VER >= 1500 - /* supported since Visual Studio 2008 */ -# define LTC_DEPRECATED_PRAGMA(s) __pragma(message(s)) -#else -# define LTC_DEPRECATED_PRAGMA(s) -#endif -#endif - -#ifndef __has_attribute -# define __has_attribute(x) 0 -#endif -#if defined(__GNUC__) || defined(__clang__) -# define LTC_ATTRIBUTE(x) __attribute__(x) -#else -# define LTC_ATTRIBUTE(x) -#endif - -#if __has_attribute(fallthrough) -# define LTC_FALLTHROUGH LTC_ATTRIBUTE((fallthrough)) -#endif -#ifndef LTC_FALLTHROUGH -# define LTC_FALLTHROUGH -#endif -#if __has_attribute(target) -# define LTC_TARGET(x) LTC_ATTRIBUTE((target(x))) -#endif -#ifndef LTC_TARGET -# define LTC_TARGET(x) -#endif - -#endif /* TOMCRYPT_CFG_H */ diff --git a/src/headers/tomcrypt_cipher.h b/src/headers/tomcrypt_cipher.h deleted file mode 100644 index 0cf7feec..00000000 --- a/src/headers/tomcrypt_cipher.h +++ /dev/null @@ -1,1224 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* ---- SYMMETRIC KEY STUFF ----- - * - * We put each of the ciphers scheduled keys in their own structs then we put all of - * the key formats in one union. This makes the function prototypes easier to use. - */ -#ifdef LTC_BLOWFISH -struct blowfish_key { - ulong32 S[4][256]; - ulong32 K[18]; -}; -#endif - -#ifdef LTC_RC5 -struct rc5_key { - int rounds; - ulong32 K[50]; -}; -#endif - -#ifdef LTC_RC6 -struct rc6_key { - ulong32 K[44]; -}; -#endif - -#ifdef LTC_SAFERP -struct saferp_key { - unsigned char K[33][16]; - long rounds; -}; -#endif - -#ifdef LTC_RIJNDAEL -struct rijndael_key { - unsigned char K[LTC_ALIGNED_BUF_SIZE(ulong32, 60 + 60, 16)]; - ulong32 *eK; - ulong32 *dK; - int Nr; -}; -#endif - -#ifdef LTC_KSEED -struct kseed_key { - ulong32 K[32], dK[32]; -}; -#endif - -#ifdef LTC_KASUMI -struct kasumi_key { - ulong32 KLi1[8], KLi2[8], - KOi1[8], KOi2[8], KOi3[8], - KIi1[8], KIi2[8], KIi3[8]; -}; -#endif - -#ifdef LTC_XTEA -struct xtea_key { - unsigned long A[32], B[32]; -}; -#endif - -#ifdef LTC_TWOFISH -#ifndef LTC_TWOFISH_SMALL - struct twofish_key { - ulong32 S[4][256], K[40]; - }; -#else - struct twofish_key { - ulong32 K[40]; - unsigned char S[32], start; - }; -#endif -#endif - -#ifdef LTC_SAFER -#define LTC_SAFER_K64_DEFAULT_NOF_ROUNDS 6 -#define LTC_SAFER_K128_DEFAULT_NOF_ROUNDS 10 -#define LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS 8 -#define LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS 10 -#define LTC_SAFER_MAX_NOF_ROUNDS 13 -#define LTC_SAFER_BLOCK_LEN 8 -#define LTC_SAFER_KEY_LEN (1 + LTC_SAFER_BLOCK_LEN * (1 + 2 * LTC_SAFER_MAX_NOF_ROUNDS)) -typedef unsigned char safer_block_t[LTC_SAFER_BLOCK_LEN]; -typedef unsigned char safer_key_t[LTC_SAFER_KEY_LEN]; -struct safer_key { safer_key_t key; }; -#endif - -#ifdef LTC_RC2 -struct rc2_key { unsigned xkey[64]; }; -#endif - -#ifdef LTC_DES -struct des_key { - ulong32 ek[32], dk[32]; -}; - -struct desx_key { - ulong32 ek[32], dk[32]; - ulong32 k[2][2]; -}; - -struct des3_key { - ulong32 ek[3][32], dk[3][32]; -}; -#endif - -#ifdef LTC_SM4 -struct sm4_key { - ulong32 ek[32], dk[32]; -}; -#endif - -#ifdef LTC_CAST5 -struct cast5_key { - ulong32 K[32], keylen; -}; -#endif - -#ifdef LTC_NOEKEON -struct noekeon_key { - ulong32 K[4], dK[4]; -}; -#endif - -#ifdef LTC_SKIPJACK -struct skipjack_key { - unsigned char key[10]; -}; -#endif - -#ifdef LTC_KHAZAD -struct khazad_key { - ulong64 roundKeyEnc[8 + 1]; - ulong64 roundKeyDec[8 + 1]; -}; -#endif - -#ifdef LTC_ANUBIS -struct anubis_key { - ulong32 roundKeyEnc[18 + 1][4]; - ulong32 roundKeyDec[18 + 1][4]; - int keyBits; - int R; -}; -#endif - -#ifdef LTC_MULTI2 -struct multi2_key { - ulong32 uk[8]; - int N; -}; -#endif - -#ifdef LTC_CAMELLIA -struct camellia_key { - ulong64 kw[4], k[24], kl[6]; - int R; -}; -#endif - -#ifdef LTC_IDEA -/* rounds */ -#define LTC_IDEA_ROUNDS 8 -/* key schedule length in # of unsigned shorts */ -#define LTC_IDEA_KEYLEN 6*LTC_IDEA_ROUNDS+4 -struct idea_key { - unsigned short int ek[LTC_IDEA_KEYLEN]; /* enc key */ - unsigned short int dk[LTC_IDEA_KEYLEN]; /* dec key */ -}; -#endif - -#ifdef LTC_SERPENT -struct serpent_key { - ulong32 k[33*4]; -}; -#endif - -#ifdef LTC_TEA -struct tea_key { - ulong32 k[4]; -}; -#endif - -#ifdef LTC_ARIA -struct aria_key { - unsigned char ek[17 * 16], dk[17 * 16]; - int R; -}; -#endif - -typedef union Symmetric_key { -#ifdef LTC_DES - struct des_key des; - struct desx_key desx; - struct des3_key des3; -#endif -#ifdef LTC_SM4 - struct sm4_key sm4; -#endif -#ifdef LTC_RC2 - struct rc2_key rc2; -#endif -#ifdef LTC_SAFER - struct safer_key safer; -#endif -#ifdef LTC_TWOFISH - struct twofish_key twofish; -#endif -#ifdef LTC_BLOWFISH - struct blowfish_key blowfish; -#endif -#ifdef LTC_RC5 - struct rc5_key rc5; -#endif -#ifdef LTC_RC6 - struct rc6_key rc6; -#endif -#ifdef LTC_SAFERP - struct saferp_key saferp; -#endif -#ifdef LTC_RIJNDAEL - struct rijndael_key rijndael; -#endif -#ifdef LTC_XTEA - struct xtea_key xtea; -#endif -#ifdef LTC_CAST5 - struct cast5_key cast5; -#endif -#ifdef LTC_NOEKEON - struct noekeon_key noekeon; -#endif -#ifdef LTC_SKIPJACK - struct skipjack_key skipjack; -#endif -#ifdef LTC_KHAZAD - struct khazad_key khazad; -#endif -#ifdef LTC_ANUBIS - struct anubis_key anubis; -#endif -#ifdef LTC_KSEED - struct kseed_key kseed; -#endif -#ifdef LTC_KASUMI - struct kasumi_key kasumi; -#endif -#ifdef LTC_MULTI2 - struct multi2_key multi2; -#endif -#ifdef LTC_CAMELLIA - struct camellia_key camellia; -#endif -#ifdef LTC_IDEA - struct idea_key idea; -#endif -#ifdef LTC_SERPENT - struct serpent_key serpent; -#endif -#ifdef LTC_TEA - struct tea_key tea; -#endif -#ifdef LTC_ARIA - struct aria_key aria; -#endif - void *data; -} symmetric_key; - -#ifdef LTC_ECB_MODE -/** A block cipher ECB structure */ -typedef struct { - /** The scheduled key */ - symmetric_key key; - /** The index of the cipher chosen */ - int cipher, - /** The block size of the given cipher */ - blocklen; -} symmetric_ECB; -#endif - -#ifdef LTC_CFB_MODE -/** A block cipher CFB structure */ -typedef struct { - /** The ECB context of the cipher */ - symmetric_ECB ecb; - /** The current IV */ - unsigned char IV[MAXBLOCKSIZE], - /** The pad used to encrypt/decrypt */ - pad[MAXBLOCKSIZE]; - /** The width of the mode: 1, 8, 64, or 128 */ - int width, - /** The padding offset */ - padlen; -} symmetric_CFB; -#endif - -#ifdef LTC_OFB_MODE -/** A block cipher OFB structure */ -typedef struct { - /** The ECB context of the cipher */ - symmetric_ECB ecb; - /** The current IV */ - unsigned char IV[MAXBLOCKSIZE]; - /** The padding offset */ - int padlen; - -} symmetric_OFB; -#endif - -#ifdef LTC_CBC_MODE -/** A block cipher CBC structure */ -typedef struct { - /** The ECB context of the cipher */ - symmetric_ECB ecb; - /** The current IV */ - unsigned char IV[MAXBLOCKSIZE]; -} symmetric_CBC; -#endif - - -#ifdef LTC_CTR_MODE -/** A block cipher CTR structure */ -typedef struct { - /** The ECB context of the cipher */ - symmetric_ECB ecb; - /** The counter */ - unsigned char ctr[MAXBLOCKSIZE]; - /** The pad used to encrypt/decrypt */ - unsigned char pad[MAXBLOCKSIZE]; - - /** The padding offset */ - int padlen, - /** The mode (endianess) of the CTR, 0==little, 1==big */ - mode, - /** counter width */ - ctrlen; -} symmetric_CTR; -#endif - - -#ifdef LTC_LRW_MODE -/** A LRW structure */ -typedef struct { - /** The ECB context of the cipher */ - symmetric_ECB ecb; - /** The current IV */ - unsigned char IV[16], - /** the tweak key */ - tweak[16], - /** The current pad, it's the product of the first 15 bytes against the tweak key */ - pad[16]; -#ifdef LTC_LRW_TABLES - /** The pre-computed multiplication table */ - unsigned char PC[16][256][16]; -#endif - - /** The index of the cipher chosen (must be a 128-bit block cipher) */ - int cipher; -} symmetric_LRW; -#endif - -#ifdef LTC_F8_MODE -/** A block cipher F8 structure */ -typedef struct { - /** The ECB context of the cipher */ - symmetric_ECB ecb; - /** The current IV */ - unsigned char IV[MAXBLOCKSIZE], - MIV[MAXBLOCKSIZE]; - /** The padding offset */ - int padlen; - /** Current block count */ - ulong32 blockcnt; -} symmetric_F8; -#endif - - -/** cipher descriptor table, last entry has "name == NULL" to mark the end of table */ -extern struct ltc_cipher_descriptor { - /** name of cipher */ - const char *name; - /** internal ID */ - unsigned char ID; - /** min keysize (octets) */ - int min_key_length, - /** max keysize (octets) */ - max_key_length, - /** block size (octets) */ - block_length, - /** default number of rounds */ - default_rounds; - /** Setup the cipher - @param key The input symmetric key - @param keylen The length of the input key (octets) - @param num_rounds The requested number of rounds (0==default) - @param skey [out] The destination of the scheduled key - @return CRYPT_OK if successful - */ - int (*setup)(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); - /** Encrypt a block - @param pt The plaintext - @param ct [out] The ciphertext - @param skey The scheduled key - @return CRYPT_OK if successful - */ - int (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); - /** Decrypt a block - @param ct The ciphertext - @param pt [out] The plaintext - @param skey The scheduled key - @return CRYPT_OK if successful - */ - int (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); - /** Test the block cipher - @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled - */ - int (*test)(void); - - /** Terminate the context - @param skey The scheduled key - */ - void (*done)(symmetric_key *skey); - - /** Determine a key size - @param keysize [in/out] The size of the key desired and the suggested size - @return CRYPT_OK if successful - */ - int (*keysize)(int *keysize); - -/** Accelerators **/ - /** Accelerated ECB encryption - @param pt Plaintext - @param ct Ciphertext - @param blocks The number of complete blocks to process - @param skey The scheduled key context - @return CRYPT_OK if successful - */ - int (*accel_ecb_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, const symmetric_key *skey); - - /** Accelerated ECB decryption - @param pt Plaintext - @param ct Ciphertext - @param blocks The number of complete blocks to process - @param skey The scheduled key context - @return CRYPT_OK if successful - */ - int (*accel_ecb_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, const symmetric_key *skey); - - /** Accelerated CBC encryption - @param pt Plaintext - @param ct Ciphertext - @param blocks The number of complete blocks to process - @param IV The initial value (input/output) - @param skey The scheduled key context - @return CRYPT_OK if successful - */ - int (*accel_cbc_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, const symmetric_key *skey); - - /** Accelerated CBC decryption - @param pt Plaintext - @param ct Ciphertext - @param blocks The number of complete blocks to process - @param IV The initial value (input/output) - @param skey The scheduled key context - @return CRYPT_OK if successful - */ - int (*accel_cbc_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, const symmetric_key *skey); - - /** Accelerated CTR encryption - @param pt Plaintext - @param ct Ciphertext - @param blocks The number of complete blocks to process - @param IV The initial value (input/output) - @param mode little or big endian counter (mode=0 or mode=1) - @param skey The scheduled key context - @return CRYPT_OK if successful - */ - int (*accel_ctr_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, int mode, const symmetric_key *skey); - - /** Accelerated LRW - @param pt Plaintext - @param ct Ciphertext - @param blocks The number of complete blocks to process - @param IV The initial value (input/output) - @param tweak The LRW tweak - @param skey The scheduled key context - @return CRYPT_OK if successful - */ - int (*accel_lrw_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, const symmetric_key *skey); - - /** Accelerated LRW - @param ct Ciphertext - @param pt Plaintext - @param blocks The number of complete blocks to process - @param IV The initial value (input/output) - @param tweak The LRW tweak - @param skey The scheduled key context - @return CRYPT_OK if successful - */ - int (*accel_lrw_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, const symmetric_key *skey); - - /** Accelerated CCM packet (one-shot) - @param key The secret key to use - @param keylen The length of the secret key (octets) - @param uskey A previously scheduled key [optional can be NULL] - @param nonce The session nonce [use once] - @param noncelen The length of the nonce - @param header The header for the session - @param headerlen The length of the header (octets) - @param pt [out] The plaintext - @param ptlen The length of the plaintext (octets) - @param ct [out] The ciphertext - @param tag [out] The destination tag - @param taglen [in/out] The max size and resulting size of the authentication tag - @param direction Encrypt or Decrypt direction (0 or 1) - @return CRYPT_OK if successful - */ - int (*accel_ccm_memory)( - const unsigned char *key, unsigned long keylen, - const symmetric_key *uskey, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *header, unsigned long headerlen, - unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - unsigned char *tag, unsigned long *taglen, - int direction); - - /** Accelerated GCM packet (one shot) - @param key The secret key - @param keylen The length of the secret key - @param IV The initialization vector - @param IVlen The length of the initialization vector - @param adata The additional authentication data (header) - @param adatalen The length of the adata - @param pt The plaintext - @param ptlen The length of the plaintext (ciphertext length is the same) - @param ct The ciphertext - @param tag [out] The MAC tag - @param taglen [in/out] The MAC tag length - @param direction Encrypt or Decrypt mode (GCM_ENCRYPT or GCM_DECRYPT) - @return CRYPT_OK on success - */ - int (*accel_gcm_memory)( - const unsigned char *key, unsigned long keylen, - const unsigned char *IV, unsigned long IVlen, - const unsigned char *adata, unsigned long adatalen, - unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - unsigned char *tag, unsigned long *taglen, - int direction); - - /** Accelerated one shot LTC_OMAC - @param key The secret key - @param keylen The key length (octets) - @param in The message - @param inlen Length of message (octets) - @param out [out] Destination for tag - @param outlen [in/out] Initial and final size of out - @return CRYPT_OK on success - */ - int (*omac_memory)( - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); - - /** Accelerated one shot XCBC - @param key The secret key - @param keylen The key length (octets) - @param in The message - @param inlen Length of message (octets) - @param out [out] Destination for tag - @param outlen [in/out] Initial and final size of out - @return CRYPT_OK on success - */ - int (*xcbc_memory)( - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); - - /** Accelerated one shot F9 - @param key The secret key - @param keylen The key length (octets) - @param in The message - @param inlen Length of message (octets) - @param out [out] Destination for tag - @param outlen [in/out] Initial and final size of out - @return CRYPT_OK on success - @remark Requires manual padding - */ - int (*f9_memory)( - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); - - /** Accelerated XTS encryption - @param pt Plaintext - @param ct Ciphertext - @param blocks The number of complete blocks to process - @param tweak The 128-bit encryption tweak (input/output). - The tweak should not be encrypted on input, but - next tweak will be copied encrypted on output. - @param skey1 The first scheduled key context - @param skey2 The second scheduled key context - @return CRYPT_OK if successful - */ - int (*accel_xts_encrypt)(const unsigned char *pt, unsigned char *ct, - unsigned long blocks, unsigned char *tweak, - const symmetric_key *skey1, const symmetric_key *skey2); - - /** Accelerated XTS decryption - @param ct Ciphertext - @param pt Plaintext - @param blocks The number of complete blocks to process - @param tweak The 128-bit encryption tweak (input/output). - The tweak should not be encrypted on input, but - next tweak will be copied encrypted on output. - @param skey1 The first scheduled key context - @param skey2 The second scheduled key context - @return CRYPT_OK if successful - */ - int (*accel_xts_decrypt)(const unsigned char *ct, unsigned char *pt, - unsigned long blocks, unsigned char *tweak, - const symmetric_key *skey1, const symmetric_key *skey2); -} cipher_descriptor[]; - -#ifdef LTC_BLOWFISH -int blowfish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int blowfish_test(void); -void blowfish_done(symmetric_key *skey); -int blowfish_keysize(int *keysize); -extern const struct ltc_cipher_descriptor blowfish_desc; -#endif - -#ifdef LTC_RC5 -int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int rc5_test(void); -void rc5_done(symmetric_key *skey); -int rc5_keysize(int *keysize); -extern const struct ltc_cipher_descriptor rc5_desc; -#endif - -#ifdef LTC_RC6 -int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int rc6_test(void); -void rc6_done(symmetric_key *skey); -int rc6_keysize(int *keysize); -extern const struct ltc_cipher_descriptor rc6_desc; -#endif - -#ifdef LTC_RC2 -int rc2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int rc2_setup_ex(const unsigned char *key, int keylen, int bits, int num_rounds, symmetric_key *skey); -int rc2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int rc2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int rc2_test(void); -void rc2_done(symmetric_key *skey); -int rc2_keysize(int *keysize); -extern const struct ltc_cipher_descriptor rc2_desc; -#endif - -#ifdef LTC_SAFERP -int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int saferp_test(void); -void saferp_done(symmetric_key *skey); -int saferp_keysize(int *keysize); -extern const struct ltc_cipher_descriptor saferp_desc; -#endif - -#ifdef LTC_SAFER -int safer_k64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int safer_sk64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int safer_k128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int safer_sk128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int safer_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int safer_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int safer_k64_test(void); -int safer_sk64_test(void); -int safer_sk128_test(void); -void safer_done(symmetric_key *skey); -int safer_64_keysize(int *keysize); -int safer_128_keysize(int *keysize); -extern const struct ltc_cipher_descriptor safer_k64_desc, safer_k128_desc, safer_sk64_desc, safer_sk128_desc; -#endif - -#ifdef LTC_RIJNDAEL -/* declare aes properly now */ -int aes_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int aes_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int aes_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int aes_test(void); -void aes_done(symmetric_key *skey); -int aes_keysize(int *keysize); -int aes_enc_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int aes_enc_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int aes_enc_test(void); -void aes_enc_done(symmetric_key *skey); -int aes_enc_keysize(int *keysize); -extern const struct ltc_cipher_descriptor aes_desc; -extern const struct ltc_cipher_descriptor aes_enc_desc; - -int rijndael_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int rijndael_test(void); -void rijndael_done(symmetric_key *skey); -int rijndael_keysize(int *keysize); -int rijndael_enc_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int rijndael_enc_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -void rijndael_enc_done(symmetric_key *skey); -int rijndael_enc_keysize(int *keysize); -extern const struct ltc_cipher_descriptor rijndael_desc; -extern const struct ltc_cipher_descriptor rijndael_enc_desc; -#endif - -int aesni_is_supported(void); - -#if defined(LTC_AES_NI) -int aesni_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int aesni_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int aesni_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int aesni_test(void); -void aesni_done(symmetric_key *skey); -int aesni_keysize(int *keysize); -extern const struct ltc_cipher_descriptor aesni_desc; -#endif - -#ifdef LTC_XTEA -int xtea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int xtea_test(void); -void xtea_done(symmetric_key *skey); -int xtea_keysize(int *keysize); -extern const struct ltc_cipher_descriptor xtea_desc; -#endif - -#ifdef LTC_TWOFISH -int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int twofish_test(void); -void twofish_done(symmetric_key *skey); -int twofish_keysize(int *keysize); -extern const struct ltc_cipher_descriptor twofish_desc; -#endif - -#ifdef LTC_DES -int des_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int des_test(void); -void des_done(symmetric_key *skey); -int des_keysize(int *keysize); -int desx_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int desx_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int desx_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int desx_test(void); -void desx_done(symmetric_key *skey); -int desx_keysize(int *keysize); -int des3_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int des3_test(void); -void des3_done(symmetric_key *skey); -int des3_keysize(int *keysize); -extern const struct ltc_cipher_descriptor des_desc, desx_desc, des3_desc; -#endif - -#ifdef LTC_SM4 -int sm4_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int sm4_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int sm4_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int sm4_test(void); -void sm4_done(symmetric_key *skey); -int sm4_keysize(int *keysize); -extern const struct ltc_cipher_descriptor sm4_desc; -#endif - -#ifdef LTC_CAST5 -int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int cast5_test(void); -void cast5_done(symmetric_key *skey); -int cast5_keysize(int *keysize); -extern const struct ltc_cipher_descriptor cast5_desc; -#endif - -#ifdef LTC_NOEKEON -int noekeon_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int noekeon_test(void); -void noekeon_done(symmetric_key *skey); -int noekeon_keysize(int *keysize); -extern const struct ltc_cipher_descriptor noekeon_desc; -#endif - -#ifdef LTC_SKIPJACK -int skipjack_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int skipjack_test(void); -void skipjack_done(symmetric_key *skey); -int skipjack_keysize(int *keysize); -extern const struct ltc_cipher_descriptor skipjack_desc; -#endif - -#ifdef LTC_KHAZAD -int khazad_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int khazad_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int khazad_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int khazad_test(void); -void khazad_done(symmetric_key *skey); -int khazad_keysize(int *keysize); -extern const struct ltc_cipher_descriptor khazad_desc; -#endif - -#ifdef LTC_ANUBIS -int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int anubis_test(void); -void anubis_done(symmetric_key *skey); -int anubis_keysize(int *keysize); -extern const struct ltc_cipher_descriptor anubis_desc; -#endif - -#ifdef LTC_KSEED -int kseed_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int kseed_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int kseed_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int kseed_test(void); -void kseed_done(symmetric_key *skey); -int kseed_keysize(int *keysize); -extern const struct ltc_cipher_descriptor kseed_desc; -#endif - -#ifdef LTC_KASUMI -int kasumi_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int kasumi_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int kasumi_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int kasumi_test(void); -void kasumi_done(symmetric_key *skey); -int kasumi_keysize(int *keysize); -extern const struct ltc_cipher_descriptor kasumi_desc; -#endif - - -#ifdef LTC_MULTI2 -int multi2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int multi2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int multi2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int multi2_test(void); -void multi2_done(symmetric_key *skey); -int multi2_keysize(int *keysize); -extern const struct ltc_cipher_descriptor multi2_desc; -#endif - -#ifdef LTC_CAMELLIA -int camellia_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int camellia_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int camellia_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int camellia_test(void); -void camellia_done(symmetric_key *skey); -int camellia_keysize(int *keysize); -extern const struct ltc_cipher_descriptor camellia_desc; -#endif - -#ifdef LTC_IDEA -int idea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int idea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int idea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int idea_test(void); -void idea_done(symmetric_key *skey); -int idea_keysize(int *keysize); -extern const struct ltc_cipher_descriptor idea_desc; -#endif - -#ifdef LTC_SERPENT -int serpent_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int serpent_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int serpent_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int serpent_test(void); -void serpent_done(symmetric_key *skey); -int serpent_keysize(int *keysize); -extern const struct ltc_cipher_descriptor serpent_desc; -#endif - -#ifdef LTC_TEA -int tea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int tea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int tea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int tea_test(void); -void tea_done(symmetric_key *skey); -int tea_keysize(int *keysize); -extern const struct ltc_cipher_descriptor tea_desc; -#endif - -#ifdef LTC_ARIA -int aria_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int aria_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); -int aria_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); -int aria_test(void); -void aria_done(symmetric_key *skey); -int aria_keysize(int *keysize); -extern const struct ltc_cipher_descriptor aria_desc; -#endif - -#ifdef LTC_ECB_MODE -int ecb_start(int cipher, const unsigned char *key, - int keylen, int num_rounds, symmetric_ECB *ecb); -int ecb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, const symmetric_ECB *ecb); -int ecb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, const symmetric_ECB *ecb); -int ecb_done(symmetric_ECB *ecb); -#endif - -#ifdef LTC_CFB_MODE -int cfb_start(int cipher, const unsigned char *IV, const unsigned char *key, - int keylen, int num_rounds, symmetric_CFB *cfb); -int cfb_start_ex(int cipher, const unsigned char *IV, const unsigned char *key, - int keylen, int num_rounds, int width, symmetric_CFB *cfb); -int cfb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CFB *cfb); -int cfb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CFB *cfb); -int cfb_getiv(unsigned char *IV, unsigned long *len, const symmetric_CFB *cfb); -int cfb_setiv(const unsigned char *IV, unsigned long len, symmetric_CFB *cfb); -int cfb_done(symmetric_CFB *cfb); -#endif - -#ifdef LTC_OFB_MODE -int ofb_start(int cipher, const unsigned char *IV, const unsigned char *key, - int keylen, int num_rounds, symmetric_OFB *ofb); -int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_OFB *ofb); -int ofb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_OFB *ofb); -int ofb_getiv(unsigned char *IV, unsigned long *len, const symmetric_OFB *ofb); -int ofb_setiv(const unsigned char *IV, unsigned long len, symmetric_OFB *ofb); -int ofb_done(symmetric_OFB *ofb); -#endif - -#ifdef LTC_CBC_MODE -int cbc_start(int cipher, const unsigned char *IV, const unsigned char *key, - int keylen, int num_rounds, symmetric_CBC *cbc); -int cbc_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CBC *cbc); -int cbc_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CBC *cbc); -int cbc_getiv(unsigned char *IV, unsigned long *len, const symmetric_CBC *cbc); -int cbc_setiv(const unsigned char *IV, unsigned long len, symmetric_CBC *cbc); -int cbc_done(symmetric_CBC *cbc); -#endif - -#ifdef LTC_CTR_MODE - -#define CTR_COUNTER_LITTLE_ENDIAN 0x0000 -#define CTR_COUNTER_BIG_ENDIAN 0x1000 -#define LTC_CTR_RFC3686 0x2000 - -int ctr_start( int cipher, - const unsigned char *IV, - const unsigned char *key, int keylen, - int num_rounds, int ctr_mode, - symmetric_CTR *ctr); -int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CTR *ctr); -int ctr_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CTR *ctr); -int ctr_getiv(unsigned char *IV, unsigned long *len, const symmetric_CTR *ctr); -int ctr_setiv(const unsigned char *IV, unsigned long len, symmetric_CTR *ctr); -int ctr_done(symmetric_CTR *ctr); -int ctr_test(void); -#endif - -#ifdef LTC_LRW_MODE - -#define LRW_ENCRYPT LTC_ENCRYPT -#define LRW_DECRYPT LTC_DECRYPT - -int lrw_start( int cipher, - const unsigned char *IV, - const unsigned char *key, int keylen, - const unsigned char *tweak, - int num_rounds, - symmetric_LRW *lrw); -int lrw_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_LRW *lrw); -int lrw_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_LRW *lrw); -int lrw_getiv(unsigned char *IV, unsigned long *len, const symmetric_LRW *lrw); -int lrw_setiv(const unsigned char *IV, unsigned long len, symmetric_LRW *lrw); -int lrw_done(symmetric_LRW *lrw); -int lrw_test(void); - -/* don't call */ -int lrw_process(const unsigned char *pt, unsigned char *ct, unsigned long len, int mode, symmetric_LRW *lrw); -#endif - -#ifdef LTC_F8_MODE -int f8_start( int cipher, const unsigned char *IV, - const unsigned char *key, int keylen, - const unsigned char *salt_key, int skeylen, - int num_rounds, symmetric_F8 *f8); -int f8_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_F8 *f8); -int f8_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_F8 *f8); -int f8_getiv(unsigned char *IV, unsigned long *len, const symmetric_F8 *f8); -int f8_setiv(const unsigned char *IV, unsigned long len, symmetric_F8 *f8); -int f8_done(symmetric_F8 *f8); -int f8_test_mode(void); -#endif - -#ifdef LTC_XTS_MODE -typedef struct { - symmetric_ECB key1, key2; - int cipher; -} symmetric_xts; - -int xts_start( int cipher, - const unsigned char *key1, - const unsigned char *key2, - unsigned long keylen, - int num_rounds, - symmetric_xts *xts); - -int xts_encrypt( - const unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - unsigned char *tweak, - const symmetric_xts *xts); -int xts_decrypt( - const unsigned char *ct, unsigned long ptlen, - unsigned char *pt, - unsigned char *tweak, - const symmetric_xts *xts); - -void xts_done(symmetric_xts *xts); -int xts_test(void); -void xts_mult_x(unsigned char *I); -#endif - -int find_cipher(const char *name); -int find_cipher_any(const char *name, int blocklen, int keylen); -int find_cipher_id(unsigned char ID); -int register_cipher(const struct ltc_cipher_descriptor *cipher); -int unregister_cipher(const struct ltc_cipher_descriptor *cipher); -int register_all_ciphers(void); -int cipher_is_valid(int idx); - -LTC_MUTEX_PROTO(ltc_cipher_mutex) - -/* ---- stream ciphers ---- */ - -#ifdef LTC_CHACHA - -typedef struct { - ulong32 input[16]; - unsigned char kstream[64]; - unsigned long ksleft; - unsigned long ivlen; - int rounds; -} chacha_state; - -int chacha_setup(chacha_state *st, const unsigned char *key, unsigned long keylen, int rounds); -int chacha_ivctr32(chacha_state *st, const unsigned char *iv, unsigned long ivlen, ulong32 counter); -int chacha_ivctr64(chacha_state *st, const unsigned char *iv, unsigned long ivlen, ulong64 counter); -int chacha_crypt(chacha_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out); -int chacha_keystream(chacha_state *st, unsigned char *out, unsigned long outlen); -int chacha_done(chacha_state *st); -int chacha_test(void); -int chacha_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds, - const unsigned char *iv, unsigned long ivlen, ulong64 counter, - const unsigned char *datain, unsigned long datalen, unsigned char *dataout); - -#endif /* LTC_CHACHA */ - -#ifdef LTC_XCHACHA20 - -int xchacha20_hchacha20(unsigned char *out, unsigned long outlen, - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - int rounds); -int xchacha20_setup(chacha_state *st, const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - int rounds); -int xchacha20_test(void); -int xchacha20_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *datain, unsigned long datalen, unsigned char *dataout); - -#endif /* LTC_XCHACHA20 */ - -#ifdef LTC_SALSA20 - -typedef struct { - ulong32 input[16]; - unsigned char kstream[64]; - unsigned long ksleft; - unsigned long ivlen; - int rounds; -} salsa20_state; - -int salsa20_setup(salsa20_state *st, const unsigned char *key, unsigned long keylen, int rounds); -int salsa20_ivctr64(salsa20_state *st, const unsigned char *iv, unsigned long ivlen, ulong64 counter); -int salsa20_crypt(salsa20_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out); -int salsa20_keystream(salsa20_state *st, unsigned char *out, unsigned long outlen); -int salsa20_done(salsa20_state *st); -int salsa20_test(void); -int salsa20_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds, - const unsigned char *iv, unsigned long ivlen, ulong64 counter, - const unsigned char *datain, unsigned long datalen, unsigned char *dataout); - -#endif /* LTC_SALSA20 */ - -#ifdef LTC_XSALSA20 - -int xsalsa20_setup(salsa20_state *st, const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - int rounds); -int xsalsa20_test(void); -int xsalsa20_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *datain, unsigned long datalen, unsigned char *dataout); - -#endif /* LTC_XSALSA20 */ - -#ifdef LTC_SOSEMANUK - -typedef struct { - ulong32 kc[100]; /* key_context */ - ulong32 s00, s01, s02, s03, s04, s05, s06, s07, s08, s09; - ulong32 r1, r2; - /* - * Buffering: the stream cipher produces output data by - * blocks of 640 bits. buf[] contains such a block, and - * "ptr" is the index of the next output byte. - */ - unsigned char buf[80]; - unsigned ptr; -} sosemanuk_state; - -int sosemanuk_setup(sosemanuk_state *st, const unsigned char *key, unsigned long keylen); -int sosemanuk_setiv(sosemanuk_state *st, const unsigned char *iv, unsigned long ivlen); -int sosemanuk_crypt(sosemanuk_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out); -int sosemanuk_keystream(sosemanuk_state *st, unsigned char *out, unsigned long outlen); -int sosemanuk_done(sosemanuk_state *st); -int sosemanuk_test(void); -int sosemanuk_memory(const unsigned char *key, unsigned long keylen, - const unsigned char *iv, unsigned long ivlen, - const unsigned char *datain, unsigned long datalen, - unsigned char *dataout); - -#endif /* LTC_SOSEMANUK */ - -#ifdef LTC_RABBIT - -typedef struct { - ulong32 x[8]; - ulong32 c[8]; - ulong32 carry; -} rabbit_ctx; - -typedef struct { - rabbit_ctx master_ctx; - rabbit_ctx work_ctx; - unsigned char block[16]; /* last keystream block containing unused bytes */ - ulong32 unused; /* count fm right */ -} rabbit_state; - -int rabbit_setup(rabbit_state* st, const unsigned char *key, unsigned long keylen); -int rabbit_setiv(rabbit_state* st, const unsigned char *iv, unsigned long ivlen); -int rabbit_crypt(rabbit_state* st, const unsigned char *in, unsigned long inlen, unsigned char *out); -int rabbit_keystream(rabbit_state* st, unsigned char *out, unsigned long outlen); -int rabbit_done(rabbit_state *st); -int rabbit_test(void); -int rabbit_memory(const unsigned char *key, unsigned long keylen, - const unsigned char *iv, unsigned long ivlen, - const unsigned char *datain, unsigned long datalen, - unsigned char *dataout); - -#endif /* LTC_RABBIT */ - -#ifdef LTC_RC4_STREAM - -typedef struct { - unsigned int x, y; - unsigned char buf[256]; -} rc4_state; - -int rc4_stream_setup(rc4_state *st, const unsigned char *key, unsigned long keylen); -int rc4_stream_crypt(rc4_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out); -int rc4_stream_keystream(rc4_state *st, unsigned char *out, unsigned long outlen); -int rc4_stream_done(rc4_state *st); -int rc4_stream_test(void); -int rc4_stream_memory(const unsigned char *key, unsigned long keylen, - const unsigned char *datain, unsigned long datalen, - unsigned char *dataout); - -#endif /* LTC_RC4_STREAM */ - -#ifdef LTC_SOBER128_STREAM - -typedef struct { - ulong32 R[17], /* Working storage for the shift register */ - initR[17], /* saved register contents */ - konst, /* key dependent constant */ - sbuf; /* partial word encryption buffer */ - int nbuf; /* number of part-word stream bits buffered */ -} sober128_state; - -int sober128_stream_setup(sober128_state *st, const unsigned char *key, unsigned long keylen); -int sober128_stream_setiv(sober128_state *st, const unsigned char *iv, unsigned long ivlen); -int sober128_stream_crypt(sober128_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out); -int sober128_stream_keystream(sober128_state *st, unsigned char *out, unsigned long outlen); -int sober128_stream_done(sober128_state *st); -int sober128_stream_test(void); -int sober128_stream_memory(const unsigned char *key, unsigned long keylen, - const unsigned char *iv, unsigned long ivlen, - const unsigned char *datain, unsigned long datalen, - unsigned char *dataout); - -#endif /* LTC_SOBER128_STREAM */ diff --git a/src/headers/tomcrypt_custom.h b/src/headers/tomcrypt_custom.h deleted file mode 100644 index 016f3d70..00000000 --- a/src/headers/tomcrypt_custom.h +++ /dev/null @@ -1,839 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#ifndef TOMCRYPT_CUSTOM_H_ -#define TOMCRYPT_CUSTOM_H_ - -/* macros for various libc functions you can change for embedded targets */ -#ifndef XMALLOC -#define XMALLOC malloc -#endif -#ifndef XREALLOC -#define XREALLOC realloc -#endif -#ifndef XCALLOC -#define XCALLOC calloc -#endif -#ifndef XFREE -#define XFREE free -#endif - -#ifndef XMEMSET -#define XMEMSET memset -#endif -#ifndef XMEMCPY -#define XMEMCPY memcpy -#endif -#ifndef XMEMMOVE -#define XMEMMOVE memmove -#endif -#ifndef XMEMCMP -#define XMEMCMP memcmp -#endif -/* A memory compare function that has to run in constant time, - * c.f. mem_neq() API summary. - */ -#ifndef XMEM_NEQ -#define XMEM_NEQ mem_neq -#endif -#ifndef XSTRCMP -#define XSTRCMP strcmp -#endif -#ifndef XSTRLEN -#define XSTRLEN strlen -#endif -#ifndef XSTRNCPY -#define XSTRNCPY strncpy -#endif - -#ifndef XCLOCK -#define XCLOCK clock -#endif - -#ifndef XQSORT -#define XQSORT qsort -#endif - -#if ( defined(malloc) || defined(realloc) || defined(calloc) || defined(free) || \ - defined(memset) || defined(memcpy) || defined(memcmp) || defined(strcmp) || \ - defined(strlen) || defined(strncpy) || defined(clock) || defined(qsort) ) \ - && !defined(LTC_NO_PROTOTYPES) -#define LTC_NO_PROTOTYPES -#endif - -/* shortcut to disable automatic inclusion */ -#if defined LTC_NOTHING && !defined LTC_EASY - #define LTC_NO_CIPHERS - #define LTC_NO_MODES - #define LTC_NO_HASHES - #define LTC_NO_MACS - #define LTC_NO_PRNGS - #define LTC_NO_PK - #define LTC_NO_PKCS - #define LTC_NO_MISC -#endif /* LTC_NOTHING */ - -/* Easy button? */ -#ifdef LTC_EASY - #define LTC_NO_CIPHERS - #define LTC_RIJNDAEL - #define LTC_BLOWFISH - #define LTC_DES - #define LTC_SM4 - #define LTC_CAST5 - - #define LTC_NO_MODES - #define LTC_ECB_MODE - #define LTC_CBC_MODE - #define LTC_CTR_MODE - - #define LTC_NO_HASHES - #define LTC_SHA1 - #define LTC_SHA3 - #define LTC_SHA512 - #define LTC_SHA512_256 - #define LTC_SHA512_224 - #define LTC_SHA384 - #define LTC_SHA256 - #define LTC_SHA224 - #define LTC_HASH_HELPERS - - #define LTC_NO_MACS - #define LTC_HMAC - #define LTC_OMAC - #define LTC_CCM_MODE - - #define LTC_NO_PRNGS - #define LTC_SPRNG - #define LTC_YARROW - #define LTC_DEVRANDOM - #define LTC_TRY_URANDOM_FIRST - #define LTC_RNG_GET_BYTES - #define LTC_RNG_MAKE_PRNG - - #define LTC_NO_PK - #define LTC_MRSA - #define LTC_MECC - - #define LTC_NO_MISC - #define LTC_BASE64 - #define LTC_BASE16 - #define LTC_PEM -#endif /* LTC_EASY */ - -/* The minimal set of functionality to run the tests */ -#ifdef LTC_MINIMAL - #define LTC_RIJNDAEL - #define LTC_SHA256 - #define LTC_YARROW - #define LTC_ECB_MODE - #define LTC_CTR_MODE - - #define LTC_RNG_MAKE_PRNG - #define LTC_RNG_GET_BYTES - #define LTC_DEVRANDOM - #define LTC_TRY_URANDOM_FIRST - - #undef LTC_NO_FILE -#endif /* LTC_MINIMAL */ - -/* Enable self-test test vector checking */ -#ifndef LTC_NO_TEST - #define LTC_TEST -#endif -/* Enable extended self-tests */ -/* #define LTC_TEST_EXT */ - -/* Use small code where possible */ -/* #define LTC_SMALL_CODE */ - -/* Always use small stack sizes where possible */ -/* #define LTC_SMALL_STACK */ - -/* clean the stack of functions which put private information on stack */ -/* #define LTC_CLEAN_STACK */ - -/* disable all file related functions */ -/* #define LTC_NO_FILE */ - -/* disable all forms of ASM */ -/* #define LTC_NO_ASM */ - -/* disable FAST mode */ -/* #define LTC_NO_FAST */ - -/* disable BSWAP on x86 */ -/* #define LTC_NO_BSWAP */ - -/* ---> math provider? <--- */ -#ifndef LTC_NO_MATH - -/* LibTomMath */ -/* #define LTM_DESC */ - -/* TomsFastMath */ -/* #define TFM_DESC */ - -/* GNU Multiple Precision Arithmetic Library */ -/* #define GMP_DESC */ - -#endif /* LTC_NO_MATH */ - -/* ---> Symmetric Block Ciphers <--- */ -#ifndef LTC_NO_CIPHERS - -#define LTC_BLOWFISH -#define LTC_RC2 -#define LTC_RC5 -#define LTC_RC6 -#define LTC_SAFERP -#define LTC_RIJNDAEL -#define LTC_XTEA -/* _TABLES tells it to use tables during setup, _SMALL means to use the smaller scheduled key format - * (saves 4KB of ram), _ALL_TABLES enables all tables during setup */ -#define LTC_TWOFISH -#ifndef LTC_NO_TABLES - #define LTC_TWOFISH_TABLES - /* #define LTC_TWOFISH_ALL_TABLES */ -#else - #define LTC_TWOFISH_SMALL -#endif -/* #define LTC_TWOFISH_SMALL */ -/* LTC_DES includes EDE triple-DES */ -#define LTC_DES -#define LTC_SM4 -#define LTC_CAST5 -#define LTC_NOEKEON -#define LTC_SKIPJACK -#define LTC_SAFER -#define LTC_KHAZAD -#define LTC_ANUBIS -#define LTC_ANUBIS_TWEAK -#define LTC_KSEED -#define LTC_KASUMI -#define LTC_MULTI2 -#define LTC_CAMELLIA -#define LTC_IDEA -#define LTC_SERPENT -#define LTC_TEA -#define LTC_ARIA - -/* stream ciphers */ -#define LTC_CHACHA -#define LTC_XCHACHA20 -#define LTC_SALSA20 -#define LTC_XSALSA20 -#define LTC_SOSEMANUK -#define LTC_RABBIT -#define LTC_RC4_STREAM -#define LTC_SOBER128_STREAM - -#endif /* LTC_NO_CIPHERS */ - - -/* ---> Block Cipher Modes of Operation <--- */ -#ifndef LTC_NO_MODES - -#define LTC_CFB_MODE -#define LTC_OFB_MODE -#define LTC_ECB_MODE -#define LTC_CBC_MODE -#define LTC_CTR_MODE - -/* F8 chaining mode */ -#define LTC_F8_MODE - -/* LRW mode */ -#define LTC_LRW_MODE -#ifndef LTC_NO_TABLES - /* like GCM mode this will enable 16 8x128 tables [64KB] that make - * seeking very fast. - */ - #define LTC_LRW_TABLES -#endif - -/* XTS mode */ -#define LTC_XTS_MODE - -#endif /* LTC_NO_MODES */ - -/* ---> One-Way Hash Functions <--- */ -#ifndef LTC_NO_HASHES - -#define LTC_CHC_HASH -#define LTC_WHIRLPOOL -#define LTC_SHA3 -#define LTC_KECCAK -#define LTC_TURBO_SHAKE -#define LTC_KANGAROO_TWELVE -#define LTC_SHA512 -#define LTC_SHA512_256 -#define LTC_SHA512_224 -#define LTC_SHA384 -#define LTC_SHA256 -#define LTC_SHA224 -#define LTC_TIGER -#define LTC_SHA1 -#define LTC_MD5 -#define LTC_MD4 -#define LTC_MD2 -#define LTC_RIPEMD128 -#define LTC_RIPEMD160 -#define LTC_RIPEMD256 -#define LTC_RIPEMD320 -#define LTC_BLAKE2S -#define LTC_BLAKE2B -#define LTC_SM3 -#define LTC_BLAKE3 - -#define LTC_HASH_HELPERS - -#endif /* LTC_NO_HASHES */ - - -/* ---> MAC functions <--- */ -#ifndef LTC_NO_MACS - -#define LTC_HMAC -#define LTC_OMAC -#define LTC_PMAC -#define LTC_XCBC -#define LTC_F9_MODE -#define LTC_PELICAN -#define LTC_POLY1305 -#define LTC_BLAKE2SMAC -#define LTC_BLAKE2BMAC -#define LTC_KMAC - -/* ---> Encrypt + Authenticate Modes <--- */ - -#define LTC_EAX_MODE - -#define LTC_OCB3_MODE -#define LTC_CCM_MODE -#define LTC_GCM_MODE -#define LTC_CHACHA20POLY1305_MODE -#define LTC_SIV_MODE -#define LTC_GCM_SIV_MODE - -/* Use 64KiB tables */ -#ifndef LTC_NO_TABLES - #define LTC_GCM_TABLES -#endif - -/* USE SSE2? requires GCC works on x86_32 and x86_64*/ -#ifdef LTC_GCM_TABLES -/* #define LTC_GCM_TABLES_SSE2 */ -#endif - -#endif /* LTC_NO_MACS */ - - -/* --> Pseudo Random Number Generators <--- */ -#ifndef LTC_NO_PRNGS - -/* Yarrow */ -#define LTC_YARROW - -/* a PRNG that simply reads from an available system source */ -#define LTC_SPRNG - -/* The RC4 stream cipher based PRNG */ -#define LTC_RC4 - -/* The ChaCha20 stream cipher based PRNG */ -#define LTC_CHACHA20_PRNG - -/* Fortuna PRNG */ -#define LTC_FORTUNA - -/* Greg's SOBER128 stream cipher based PRNG */ -#define LTC_SOBER128 - -#if !defined(_WIN32) && !defined(_WIN32_WCE) -/* the *nix style /dev/random device */ -#define LTC_DEVRANDOM -/* try /dev/urandom before trying /dev/random - * are you sure you want to disable this? http://www.2uo.de/myths-about-urandom/ */ -#define LTC_TRY_URANDOM_FIRST -#endif /* not Windows */ - -/* rng_get_bytes() */ -#define LTC_RNG_GET_BYTES -/* rng_make_prng() */ -#define LTC_RNG_MAKE_PRNG - -/* enable the ltc_rng hook to integrate e.g. embedded hardware RNG's easily */ -/* #define LTC_PRNG_ENABLE_LTC_RNG */ - -#endif /* LTC_NO_PRNGS */ - -#ifdef LTC_YARROW - -/* which descriptor of AES to use? */ -/* 0 = rijndael_enc 1 = aes_enc, 2 = rijndael [full], 3 = aes [full] */ -#ifdef ENCRYPT_ONLY - #define LTC_YARROW_AES 0 -#else - #define LTC_YARROW_AES 2 -#endif - -#endif /* LTC_YARROW */ - -#ifdef LTC_FORTUNA - -#if !defined(LTC_FORTUNA_RESEED_RATELIMIT_STATIC) && \ - ((defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L) || defined(_WIN32)) - -/* time-based rate limit of the reseeding */ -#define LTC_FORTUNA_RESEED_RATELIMIT_TIMED - -/* with non-glibc or glibc 2.17+ prefer clock_gettime over gettimeofday */ -#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) - #if __GLIBC_PREREQ(2, 17) - #define LTC_CLOCK_GETTIME - #endif -#elif defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L - #define LTC_CLOCK_GETTIME -#endif - -#else - -#ifndef LTC_FORTUNA_WD -/* reseed every N calls to the read function */ -#define LTC_FORTUNA_WD 10 -#endif - -#ifdef LTC_FORTUNA_RESEED_RATELIMIT_TIMED -/* make sure only one of - * LTC_FORTUNA_RESEED_RATELIMIT_STATIC - * and - * LTC_FORTUNA_RESEED_RATELIMIT_TIMED - * is defined. - */ -#undef LTC_FORTUNA_RESEED_RATELIMIT_TIMED -#warning "undef'ed LTC_FORTUNA_RESEED_RATELIMIT_TIMED, looks like your architecture doesn't support it" -#endif - -#endif - -#ifndef LTC_FORTUNA_POOLS -/* number of pools (4..32) can save a bit of ram by lowering the count */ -#define LTC_FORTUNA_POOLS 32 -#endif - -/* at compile time you can decide whether fortuna uses the regular AES APIs - * or whether it will use the 'encrypt_only' variants. - * This is useful for custom builds of libtomcrypt for size-constrained targets. */ -/* #define LTC_FORTUNA_USE_ENCRYPT_ONLY */ - -#endif /* LTC_FORTUNA */ - - -/* ---> Public Key Crypto <--- */ -#ifndef LTC_NO_PK - -/* Include RSA support */ -#define LTC_MRSA - -/* Include Diffie-Hellman support */ -/* is_prime fails for GMP */ -#define LTC_MDH -/* Supported Key Sizes */ -#define LTC_DH768 -#define LTC_DH1024 -#define LTC_DH1536 -#define LTC_DH2048 - -#if defined(LTM_DESC) || defined(GMP_DESC) -/* tfm has a problem in fp_isprime for larger key sizes */ -#define LTC_DH3072 -#define LTC_DH4096 -#define LTC_DH6144 -#define LTC_DH8192 -#endif - -/* Digital Signature Algorithm */ -#define LTC_MDSA - -/* Ed25519 & X25519 */ -#define LTC_CURVE25519 - -/* Ed448 & X448 */ -#define LTC_CURVE448 - -/* ECC */ -#define LTC_MECC - -/* use Shamir's trick for point mul (speeds up signature verification) */ -#define LTC_ECC_SHAMIR - -#if defined(TFM_DESC) && defined(LTC_MECC) - #define LTC_MECC_ACCEL -#endif - -/* do we want fixed point ECC */ -/* #define LTC_MECC_FP */ - -#endif /* LTC_NO_PK */ - -#if defined(LTC_MRSA) && !defined(LTC_NO_RSA_BLINDING) -/* Enable RSA blinding when doing private key operations by default */ -#define LTC_RSA_BLINDING -#endif /* LTC_NO_RSA_BLINDING */ - -#if defined(LTC_MRSA) && !defined(LTC_NO_RSA_CRT_HARDENING) -/* Enable RSA CRT hardening when doing private key operations by default */ -#define LTC_RSA_CRT_HARDENING -#endif /* LTC_NO_RSA_CRT_HARDENING */ - -#if defined(LTC_MECC) && !defined(LTC_NO_ECC_TIMING_RESISTANT) -/* Enable ECC timing resistant version by default */ -#define LTC_ECC_TIMING_RESISTANT -#endif - -/* PKCS #1 (RSA) and #5 (Password Handling) stuff */ -#ifndef LTC_NO_PKCS - -#define LTC_PKCS_1 -#define LTC_PKCS_5 -#define LTC_PKCS_8 -#define LTC_PKCS_12 - -/* Include ASN.1 DER (required by DSA/RSA) */ -#define LTC_DER - -#endif /* LTC_NO_PKCS */ - -/* misc stuff */ -#ifndef LTC_NO_MISC - -/* Various tidbits of modern neatoness */ -#define LTC_BASE64 -/* ... and it's URL safe version */ -#define LTC_BASE64_URL -/* Base32 encoding/decoding */ -#define LTC_BASE32 -/* Base16/hex encoding/decoding */ -#define LTC_BASE16 - -#define LTC_BCRYPT - -#ifndef LTC_BCRYPT_DEFAULT_ROUNDS -#define LTC_BCRYPT_DEFAULT_ROUNDS 10 -#endif - -#define LTC_ARGON2 - -#define LTC_SCRYPT - -/* Keep LTC_NO_HKDF for compatibility reasons - * superseeded by LTC_NO_MISC*/ -#ifndef LTC_NO_HKDF -/* HKDF Key Derivation/Expansion stuff */ -#define LTC_HKDF -#endif /* LTC_NO_HKDF */ - -#define LTC_ADLER32 - -#define LTC_CRC32 - -#define LTC_SSH - -#define LTC_PADDING - -#define LTC_PBES - -#define LTC_PEM - -#endif /* LTC_NO_MISC */ - -/* cleanup */ - -#ifdef LTC_MECC -/* Supported ECC Key Sizes */ -#ifndef LTC_NO_CURVES - #define LTC_ECC_BRAINPOOLP160R1 - #define LTC_ECC_BRAINPOOLP160T1 - #define LTC_ECC_BRAINPOOLP192R1 - #define LTC_ECC_BRAINPOOLP192T1 - #define LTC_ECC_BRAINPOOLP224R1 - #define LTC_ECC_BRAINPOOLP224T1 - #define LTC_ECC_BRAINPOOLP256R1 - #define LTC_ECC_BRAINPOOLP256T1 - #define LTC_ECC_BRAINPOOLP320R1 - #define LTC_ECC_BRAINPOOLP320T1 - #define LTC_ECC_BRAINPOOLP384R1 - #define LTC_ECC_BRAINPOOLP384T1 - #define LTC_ECC_BRAINPOOLP512R1 - #define LTC_ECC_BRAINPOOLP512T1 - #define LTC_ECC_PRIME192V2 - #define LTC_ECC_PRIME192V3 - #define LTC_ECC_PRIME239V1 - #define LTC_ECC_PRIME239V2 - #define LTC_ECC_PRIME239V3 - #define LTC_ECC_SECP112R1 - #define LTC_ECC_SECP112R2 - #define LTC_ECC_SECP128R1 - #define LTC_ECC_SECP128R2 - #define LTC_ECC_SECP160K1 - #define LTC_ECC_SECP160R1 - #define LTC_ECC_SECP160R2 - #define LTC_ECC_SECP192K1 - #define LTC_ECC_SECP192R1 - #define LTC_ECC_SECP224K1 - #define LTC_ECC_SECP224R1 - #define LTC_ECC_SECP256K1 - #define LTC_ECC_SECP256R1 - #define LTC_ECC_SECP384R1 - #define LTC_ECC_SECP521R1 - #define LTC_ECC_FRP256V1 -#endif -#endif /* LTC_MECC */ - -#ifndef LTC_NO_FILE - /* buffer size for reading from a file via fread(..) */ - #ifndef LTC_FILE_READ_BUFSIZE - #define LTC_FILE_READ_BUFSIZE 8192 - #endif -#endif - -#if defined(LTC_PEM) - /* Size of the line-buffer */ - #ifndef LTC_PEM_DECODE_BUFSZ - #define LTC_PEM_DECODE_BUFSZ 80 - #elif LTC_PEM_DECODE_BUFSZ < 72 - #error "LTC_PEM_DECODE_BUFSZ shall not be < 72 bytes" - #endif - /* Size of the decoded data buffer */ - #ifndef LTC_PEM_READ_BUFSIZE - #ifdef LTC_FILE_READ_BUFSIZE - #define LTC_PEM_READ_BUFSIZE LTC_FILE_READ_BUFSIZE - #else - #define LTC_PEM_READ_BUFSIZE 4096 - #endif - #endif - #if defined(LTC_SSH) - #define LTC_PEM_SSH - #endif -#endif - -#if defined(LTC_DER) - #ifndef LTC_DER_MAX_RECURSION - /* Maximum recursion limit when processing nested ASN.1 types. */ - #define LTC_DER_MAX_RECURSION 30 - #endif - #ifndef LTC_DER_OID_DEFAULT_NODES - /* Default number of nodes when decoding an OID. */ - #define LTC_DER_OID_DEFAULT_NODES 12 - #endif -#endif - -#if defined(LTC_MECC) || defined(LTC_MRSA) || defined(LTC_MDSA) || defined(LTC_SSH) - /* Include the MPI functionality? (required by the PK algorithms) */ - #define LTC_MPI - - #ifndef LTC_PK_MAX_RETRIES - /* iterations limit for retry-loops */ - #define LTC_PK_MAX_RETRIES 20 - #endif -#endif - -#ifdef LTC_MRSA - #define LTC_PKCS_1 -#endif - -#if defined(LTC_MRSA) || defined(LTC_MECC) - #define LTC_PKCS_8 -#endif - -#if defined(LTC_PKCS_8) && defined(LTC_DER) - #define LTC_PADDING - #define LTC_PBES -#else - #undef LTC_PKCS_8 -#endif - -#if defined(LTC_CLEAN_STACK) -/* if you're sure that you want to use it, remove the line below */ - #error LTC_CLEAN_STACK is considered as broken -#endif - -#if defined(LTC_PBES) && !defined(LTC_PKCS_5) - #error LTC_PBES requires LTC_PKCS_5 -#endif - -#if defined(LTC_PBES) && !defined(LTC_PKCS_12) - #error LTC_PBES requires LTC_PKCS_12 -#endif - -#if defined(LTC_PKCS_5) && !defined(LTC_HMAC) - #error LTC_PKCS_5 requires LTC_HMAC -#endif - -#if defined(LTC_PKCS_5) && !defined(LTC_HASH_HELPERS) - #error LTC_PKCS_5 requires LTC_HASH_HELPERS -#endif - -#if defined(LTC_PELICAN) && !defined(LTC_RIJNDAEL) - #error Pelican-MAC requires LTC_RIJNDAEL -#endif - -#if defined(LTC_EAX_MODE) && !(defined(LTC_CTR_MODE) && defined(LTC_OMAC)) - #error LTC_EAX_MODE requires CTR and LTC_OMAC mode -#endif - -#if defined(LTC_YARROW) && !defined(LTC_CTR_MODE) - #error LTC_YARROW requires LTC_CTR_MODE chaining mode to be defined! -#endif - -#if defined(LTC_DER) && !defined(LTC_MPI) - #error ASN.1 DER requires MPI functionality -#endif - -#if (defined(LTC_MDSA) || defined(LTC_MRSA)) && !defined(LTC_DER) - #error PK requires ASN.1 DER functionality, make sure LTC_DER is enabled -#endif - -#if defined(LTC_BCRYPT) && !defined(LTC_BLOWFISH) - #error LTC_BCRYPT requires LTC_BLOWFISH -#endif - -#if defined(LTC_ARGON2) && !defined(LTC_BLAKE2B) - #error LTC_ARGON2 requires LTC_BLAKE2B -#endif - -#if defined(LTC_SCRYPT) && (!defined(LTC_PKCS_5) || !defined(LTC_SHA256)) - #error LTC_SCRYPT requires LTC_PKCS_5 and LTC_SHA256 -#endif - -#if defined(LTC_CHACHA20POLY1305_MODE) && (!defined(LTC_CHACHA) || !defined(LTC_POLY1305)) - #error LTC_CHACHA20POLY1305_MODE requires LTC_CHACHA + LTC_POLY1305 -#endif - -#if defined(LTC_CHACHA20_PRNG) && !defined(LTC_CHACHA) - #error LTC_CHACHA20_PRNG requires LTC_CHACHA -#endif - -#if defined(LTC_XCHACHA20) && !defined(LTC_CHACHA) - #error LTC_XCHACHA20 requires LTC_CHACHA -#endif - -#if defined(LTC_XSALSA20) && !defined(LTC_SALSA20) - #error LTC_XSALSA20 requires LTC_SALSA20 -#endif - -#if defined(LTC_RC4) && !defined(LTC_RC4_STREAM) - #error LTC_RC4 requires LTC_RC4_STREAM -#endif - -#if defined(LTC_SOBER128) && !defined(LTC_SOBER128_STREAM) - #error LTC_SOBER128 requires LTC_SOBER128_STREAM -#endif - -#if defined(LTC_BLAKE2SMAC) && !defined(LTC_BLAKE2S) - #error LTC_BLAKE2SMAC requires LTC_BLAKE2S -#endif - -#if defined(LTC_BLAKE2BMAC) && !defined(LTC_BLAKE2B) - #error LTC_BLAKE2BMAC requires LTC_BLAKE2B -#endif - -#if defined(LTC_KMAC) && !defined(LTC_SHA3) - #error LTC_KMAC requires LTC_SHA3 -#endif - -#if defined(LTC_SPRNG) && !defined(LTC_RNG_GET_BYTES) - #error LTC_SPRNG requires LTC_RNG_GET_BYTES -#endif - -#if defined(LTC_TURBO_SHAKE) && !defined(LTC_SHA3) - #error LTC_TURBO_SHAKE requires LTC_SHA3 -#endif - -#if defined(LTC_KANGAROO_TWELVE) && !defined(LTC_TURBO_SHAKE) - #error LTC_KANGAROO_TWELVE requires LTC_TURBO_SHAKE -#endif - -#if defined(LTC_NO_MATH) && (defined(LTM_DESC) || defined(TFM_DESC) || defined(GMP_DESC)) - #error LTC_NO_MATH defined, but also a math descriptor -#endif - -#if !defined(LTC_ECB_MODE) -#if defined(LTC_CFB_MODE) || defined(LTC_OFB_MODE) || defined(LTC_CBC_MODE) || defined(LTC_CTR_MODE) || \ - defined(LTC_F8_MODE) || defined(LTC_LRW_MODE) || defined(LTC_XTS_MODE) ) - #error LTC_ECB_MODE not defined, but all other modes depend on it -#endif -#if defined(LTC_OMAC) || defined(LTC_PMAC) || defined(LTC_XCBC) || defined(LTC_F9_MODE) || defined(LTC_EAX_MODE) || \ - defined(LTC_OCB3_MODE) || defined(LTC_CCM_MODE) || defined(LTC_GCM_MODE) ) - #error LTC_ECB_MODE not defined, but most MAC and AEAD modes depend on it -#endif -#endif - - -/* THREAD management */ -#ifdef LTC_PTHREAD - -#include - -#define LTC_MUTEX_GLOBAL(x) pthread_mutex_t x = PTHREAD_MUTEX_INITIALIZER; -#define LTC_MUTEX_PROTO(x) extern pthread_mutex_t x; -#define LTC_MUTEX_TYPE(x) pthread_mutex_t x; -#define LTC_MUTEX_INIT(x) LTC_ARGCHK(pthread_mutex_init(x, NULL) == 0); -#define LTC_MUTEX_LOCK(x) LTC_ARGCHK(pthread_mutex_lock(x) == 0); -#define LTC_MUTEX_UNLOCK(x) LTC_ARGCHK(pthread_mutex_unlock(x) == 0); -#define LTC_MUTEX_DESTROY(x) LTC_ARGCHK(pthread_mutex_destroy(x) == 0); - -#else - -/* default no functions */ -#define LTC_MUTEX_GLOBAL(x) -#define LTC_MUTEX_PROTO(x) -#define LTC_MUTEX_TYPE(x) -#define LTC_MUTEX_INIT(x) -#define LTC_MUTEX_LOCK(x) -#define LTC_MUTEX_UNLOCK(x) -#define LTC_MUTEX_DESTROY(x) - -#endif /* LTC_PTHREAD */ - -/* Debuggers */ - -/* define this if you use Valgrind, note: it CHANGES the way SOBER-128 and RC4 work (see the code) */ -/* #define LTC_VALGRIND */ - -/* ECC backwards compatibility */ -#if !defined(LTC_ECC_SECP112R1) && defined(LTC_ECC112) -#define LTC_ECC_SECP112R1 -#undef LTC_ECC112 -#endif -#if !defined(LTC_ECC_SECP128R1) && defined(LTC_ECC128) -#define LTC_ECC_SECP128R1 -#undef LTC_ECC128 -#endif -#if !defined(LTC_ECC_SECP160R1) && defined(LTC_ECC160) -#define LTC_ECC_SECP160R1 -#undef LTC_ECC160 -#endif -#if !defined(LTC_ECC_SECP192R1) && defined(LTC_ECC192) -#define LTC_ECC_SECP192R1 -#undef LTC_ECC192 -#endif -#if !defined(LTC_ECC_SECP224R1) && defined(LTC_ECC224) -#define LTC_ECC_SECP224R1 -#undef LTC_ECC224 -#endif -#if !defined(LTC_ECC_SECP256R1) && defined(LTC_ECC256) -#define LTC_ECC_SECP256R1 -#undef LTC_ECC256 -#endif -#if !defined(LTC_ECC_SECP384R1) && defined(LTC_ECC384) -#define LTC_ECC_SECP384R1 -#undef LTC_ECC384 -#endif -#if !defined(LTC_ECC_SECP512R1) && defined(LTC_ECC521) -#define LTC_ECC_SECP521R1 -#undef LTC_ECC521 -#endif - -#endif /* TOMCRYPT_CUSTOM_H_ */ diff --git a/src/headers/tomcrypt_hash.h b/src/headers/tomcrypt_hash.h deleted file mode 100644 index 3f89f57c..00000000 --- a/src/headers/tomcrypt_hash.h +++ /dev/null @@ -1,697 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* ---- HASH FUNCTIONS ---- */ -#if defined(LTC_SHA3) || defined(LTC_KECCAK) -struct sha3_state { - ulong64 saved; /* the portion of the input message that we didn't consume yet */ - ulong64 s[25]; - unsigned char sb[25 * 8]; /* used for storing `ulong64 s[25]` as little-endian bytes */ - unsigned short byte_index; /* 0..7--the next byte after the set one (starts from 0; 0--none are buffered) */ - unsigned short word_index; /* 0..24--the next word to integrate input (starts from 0) */ - unsigned short capacity_words; /* the double size of the hash output in words (e.g. 16 for Keccak 512) */ - unsigned short xof_flag; -}; -#endif - -#ifdef LTC_KANGAROO_TWELVE -struct kangaroo_twelve_state { - struct sha3_state outer; - struct sha3_state inner; - ulong64 blocks_count; - ulong64 customization_len; - unsigned short remaining; /* bytes out of 8kB block */ - unsigned char phase; /* 0 -- initial, 1 -- additional */ - unsigned char finished; /* 0 -- false, 1 -- true */ -}; -#endif - -#ifdef LTC_SHA512 -struct sha512_state { - ulong64 length, state[8]; - unsigned long curlen; - unsigned char buf[128]; -}; -#endif - -#ifdef LTC_SHA256 -struct sha256_state { - ulong64 length; - ulong32 state[8], curlen; - unsigned char buf[64]; -}; -#endif - -#ifdef LTC_SHA1 -struct sha1_state { - ulong64 length; - ulong32 state[5], curlen; - unsigned char buf[64]; -}; -#endif - -#ifdef LTC_MD5 -struct md5_state { - ulong64 length; - ulong32 state[4], curlen; - unsigned char buf[64]; -}; -#endif - -#ifdef LTC_MD4 -struct md4_state { - ulong64 length; - ulong32 state[4], curlen; - unsigned char buf[64]; -}; -#endif - -#ifdef LTC_TIGER -struct tiger_state { - ulong64 state[3], length; - unsigned long curlen, passes; - unsigned char buf[64], pad; -}; -#endif - -#ifdef LTC_MD2 -struct md2_state { - unsigned char chksum[16], X[48], buf[16]; - unsigned long curlen; -}; -#endif - -#ifdef LTC_RIPEMD128 -struct rmd128_state { - ulong64 length; - unsigned char buf[64]; - ulong32 curlen, state[4]; -}; -#endif - -#ifdef LTC_RIPEMD160 -struct rmd160_state { - ulong64 length; - unsigned char buf[64]; - ulong32 curlen, state[5]; -}; -#endif - -#ifdef LTC_RIPEMD256 -struct rmd256_state { - ulong64 length; - unsigned char buf[64]; - ulong32 curlen, state[8]; -}; -#endif - -#ifdef LTC_RIPEMD320 -struct rmd320_state { - ulong64 length; - unsigned char buf[64]; - ulong32 curlen, state[10]; -}; -#endif - -#ifdef LTC_WHIRLPOOL -struct whirlpool_state { - ulong64 length, state[8]; - unsigned char buf[64]; - ulong32 curlen; -}; -#endif - -#ifdef LTC_CHC_HASH -struct chc_state { - ulong64 length; - unsigned char state[MAXBLOCKSIZE], buf[MAXBLOCKSIZE]; - ulong32 curlen; -}; -#endif - -#ifdef LTC_SM3 -struct sm3_state { - ulong64 length; - ulong32 state[8], curlen; - unsigned char buf[64]; -}; -#endif - -#ifdef LTC_BLAKE2S -struct blake2s_state { - ulong32 h[8]; - ulong32 t[2]; - ulong32 f[2]; - unsigned char buf[64]; - unsigned long curlen; - unsigned long outlen; - unsigned char last_node; -}; -#endif - -#ifdef LTC_BLAKE2B -struct blake2b_state { - ulong64 h[8]; - ulong64 t[2]; - ulong64 f[2]; - unsigned char buf[128]; - unsigned long curlen; - unsigned long outlen; - unsigned char last_node; -}; -#endif - -#ifdef LTC_BLAKE3 -struct blake3_state { - unsigned char input[64]; /* current input block (not yet compressed) */ - ulong32 cv_buf[54 * 8]; /* chaining-value stack (54 levels x 8 words) */ - ulong32 key[8]; /* mode key: IV, user key, or derived context key */ - ulong32 cv_off; /* top-of-stack index into cv_buf (units: 8 words) */ - ulong32 bytes; /* bytes buffered in input[] */ - ulong32 block; /* block index within current chunk (0-15) */ - ulong32 flags; /* mode flags ORed into every compress call */ - ulong64 chunk; /* completed-chunk counter */ -}; -#endif - -typedef union Hash_state { - char dummy[1]; -#ifdef LTC_CHC_HASH - struct chc_state chc; -#endif -#ifdef LTC_WHIRLPOOL - struct whirlpool_state whirlpool; -#endif -#if defined(LTC_SHA3) || defined(LTC_KECCAK) - struct sha3_state sha3; -#endif -#ifdef LTC_KANGAROO_TWELVE - struct kangaroo_twelve_state kt; -#endif -#ifdef LTC_SHA512 - struct sha512_state sha512; -#endif -#ifdef LTC_SHA256 - struct sha256_state sha256; -#endif -#ifdef LTC_SHA1 - struct sha1_state sha1; -#endif -#ifdef LTC_MD5 - struct md5_state md5; -#endif -#ifdef LTC_MD4 - struct md4_state md4; -#endif -#ifdef LTC_MD2 - struct md2_state md2; -#endif -#ifdef LTC_TIGER - struct tiger_state tiger; -#endif -#ifdef LTC_RIPEMD128 - struct rmd128_state rmd128; -#endif -#ifdef LTC_RIPEMD160 - struct rmd160_state rmd160; -#endif -#ifdef LTC_RIPEMD256 - struct rmd256_state rmd256; -#endif -#ifdef LTC_RIPEMD320 - struct rmd320_state rmd320; -#endif -#ifdef LTC_BLAKE2S - struct blake2s_state blake2s; -#endif -#ifdef LTC_BLAKE2B - struct blake2b_state blake2b; -#endif -#ifdef LTC_SM3 - struct sm3_state sm3; -#endif -#ifdef LTC_BLAKE3 - struct blake3_state blake3; -#endif - - void *data; -} hash_state; - -/** hash descriptor */ -extern struct ltc_hash_descriptor { - /** name of hash */ - const char *name; - /** internal ID */ - unsigned char ID; - /** Size of digest in octets */ - unsigned long hashsize; - /** Input block size in octets */ - unsigned long blocksize; - /** ASN.1 OID */ - unsigned long OID[16]; - /** Length of DER encoding */ - unsigned long OIDlen; - - /** Init a hash state - @param hash The hash to initialize - @return CRYPT_OK if successful - */ - int (*init)(hash_state *hash); - /** Process a block of data - @param hash The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful - */ - int (*process)(hash_state *hash, const unsigned char *in, unsigned long inlen); - /** Produce the digest and store it - @param hash The hash state - @param out [out] The destination of the digest - @return CRYPT_OK if successful - */ - int (*done)(hash_state *hash, unsigned char *out); - /** Self-test - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled - */ - int (*test)(void); - - /* accelerated hmac callback: if you need to-do multiple packets just use the generic hmac_memory and provide a hash callback */ - int (*hmac_block)(const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); - -} hash_descriptor[]; - -#ifdef LTC_CHC_HASH -int chc_register(int cipher); -int chc_init(hash_state * md); -int chc_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int chc_done(hash_state * md, unsigned char *out); -int chc_test(void); -extern const struct ltc_hash_descriptor chc_desc; -#endif - -#ifdef LTC_WHIRLPOOL -int whirlpool_init(hash_state * md); -int whirlpool_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int whirlpool_done(hash_state * md, unsigned char *out); -int whirlpool_test(void); -extern const struct ltc_hash_descriptor whirlpool_desc; -#endif - -#if defined(LTC_SHA3) || defined(LTC_KECCAK) -/* sha3_NNN_init are shared by SHA3 and KECCAK */ -int sha3_512_init(hash_state * md); -int sha3_384_init(hash_state * md); -int sha3_256_init(hash_state * md); -int sha3_224_init(hash_state * md); -/* sha3_process is the same for all variants of SHA3 + KECCAK */ -int sha3_process(hash_state * md, const unsigned char *in, unsigned long inlen); -#endif - -#ifdef LTC_SHA3 -int sha3_512_test(void); -extern const struct ltc_hash_descriptor sha3_512_desc; -int sha3_384_test(void); -extern const struct ltc_hash_descriptor sha3_384_desc; -int sha3_256_test(void); -extern const struct ltc_hash_descriptor sha3_256_desc; -int sha3_224_test(void); -extern const struct ltc_hash_descriptor sha3_224_desc; -int sha3_done(hash_state *md, unsigned char *out); -/* SHAKE128 with digest length according to RFC 8702 */ -int sha3_shake128_init(hash_state *md); -#define sha3_shake128_process(a,b,c) sha3_process(a,b,c) -int sha3_shake128_done(hash_state *md, unsigned char *out); -int sha3_shake128_test(void); -extern const struct ltc_hash_descriptor shake128_desc; -/* SHAKE256 with digest length according to RFC 8702 */ -int sha3_shake256_init(hash_state *md); -#define sha3_shake256_process(a,b,c) sha3_process(a,b,c) -int sha3_shake256_done(hash_state *md, unsigned char *out); -int sha3_shake256_test(void); -extern const struct ltc_hash_descriptor shake256_desc; -/* SHAKE128 + SHAKE256 */ -int sha3_shake_init(hash_state *md, int num); -#define sha3_shake_process(a,b,c) sha3_process(a,b,c) -int sha3_shake_done(hash_state *md, unsigned char *out, unsigned long outlen); -int sha3_shake_test(void); -int sha3_shake_memory(int num, const unsigned char *in, unsigned long inlen, unsigned char *out, const unsigned long *outlen); -#endif - -#ifdef LTC_KECCAK -#define keccak_512_init(a) sha3_512_init(a) -#define keccak_384_init(a) sha3_384_init(a) -#define keccak_256_init(a) sha3_256_init(a) -#define keccak_224_init(a) sha3_224_init(a) -#define keccak_process(a,b,c) sha3_process(a,b,c) -extern const struct ltc_hash_descriptor keccak512_desc; -int keccak_512_test(void); -extern const struct ltc_hash_descriptor keccak384_desc; -int keccak_384_test(void); -extern const struct ltc_hash_descriptor keccak256_desc; -int keccak_256_test(void); -extern const struct ltc_hash_descriptor keccak224_desc; -int keccak_224_test(void); -int keccak_done(hash_state *md, unsigned char *out); -#endif - -#ifdef LTC_TURBO_SHAKE -#define turbo_shake_init(a, b) sha3_shake_init(a, b) -int turbo_shake_process(hash_state *md, const unsigned char *in, unsigned long inlen); -int turbo_shake_done(hash_state *md, unsigned char *out, unsigned long outlen); -int turbo_shake_test(void); -#endif - -#ifdef LTC_KANGAROO_TWELVE -int kangaroo_twelve_init(hash_state *md, int num); -int kangaroo_twelve_process(hash_state *md, const unsigned char *in, unsigned long inlen); -int kangaroo_twelve_customization(hash_state *md, const unsigned char *in, unsigned long inlen); -int kangaroo_twelve_done(hash_state *md, unsigned char *out, unsigned long outlen); -int kangaroo_twelve_test(void); -#endif - -#ifdef LTC_SHA512 -int sha512_init(hash_state * md); -int sha512_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int sha512_done(hash_state * md, unsigned char *out); -int sha512_test(void); -extern const struct ltc_hash_descriptor sha512_desc; - -#define sha512_c_init sha512_init -int sha512_c_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int sha512_c_done(hash_state * md, unsigned char *out); -int sha512_c_test(void); -extern const struct ltc_hash_descriptor sha512_portable_desc; - -#ifdef LTC_SHA512_X86 -#define sha512_x86_init sha512_init -int sha512_x86_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int sha512_x86_done(hash_state * md, unsigned char *out); -int sha512_x86_test(void); -extern const struct ltc_hash_descriptor sha512_x86_desc; -#endif /* LTC_SHA512_X86 */ -#endif /* LTC_SHA512 */ - -#ifdef LTC_SHA384 -#ifndef LTC_SHA512 - #error LTC_SHA512 is required for LTC_SHA384 -#endif -int sha384_init(hash_state * md); -#define sha384_process sha512_process -int sha384_done(hash_state * md, unsigned char *out); -int sha384_test(void); -extern const struct ltc_hash_descriptor sha384_desc; - -#define sha384_c_init sha384_init -#define sha384_c_process sha512_c_process -int sha384_c_done(hash_state * md, unsigned char *out); -int sha384_c_test(void); -extern const struct ltc_hash_descriptor sha384_portable_desc; - -#ifdef LTC_SHA384_X86 -#define sha384_x86_init sha384_init -#define sha384_x86_process sha512_x86_process -int sha384_x86_done(hash_state * md, unsigned char *out); -int sha384_x86_test(void); -extern const struct ltc_hash_descriptor sha384_x86_desc; -#endif /* LTC_SHA384_X86 */ -#endif /* LTC_SHA384 */ - -#ifdef LTC_SHA512_256 -#ifndef LTC_SHA512 - #error LTC_SHA512 is required for LTC_SHA512_256 -#endif -int sha512_256_init(hash_state * md); -#define sha512_256_process sha512_process -int sha512_256_done(hash_state * md, unsigned char *out); -int sha512_256_test(void); -extern const struct ltc_hash_descriptor sha512_256_desc; - -#define sha512_256_c_init sha512_256_init -#define sha512_256_c_process sha512_c_process -int sha512_256_c_done(hash_state * md, unsigned char *out); -int sha512_256_c_test(void); -extern const struct ltc_hash_descriptor sha512_256_portable_desc; - -#ifdef LTC_SHA512_256_X86 -#define sha512_256_x86_init sha512_256_init -#define sha512_256_x86_process sha512_x86_process -int sha512_256_x86_done(hash_state * md, unsigned char *out); -int sha512_256_x86_test(void); -extern const struct ltc_hash_descriptor sha512_256_x86_desc; -#endif /* LTC_SHA512_256_X86 */ -#endif /* LTC_SHA512_256 */ - -#ifdef LTC_SHA512_224 -#ifndef LTC_SHA512 - #error LTC_SHA512 is required for LTC_SHA512_224 -#endif -int sha512_224_init(hash_state * md); -#define sha512_224_process sha512_process -int sha512_224_done(hash_state * md, unsigned char *out); -int sha512_224_test(void); -extern const struct ltc_hash_descriptor sha512_224_desc; - -#define sha512_224_c_init sha512_224_init -#define sha512_224_c_process sha512_c_process -int sha512_224_c_done(hash_state * md, unsigned char *out); -int sha512_224_c_test(void); -extern const struct ltc_hash_descriptor sha512_224_portable_desc; - -#ifdef LTC_SHA512_224_X86 -#define sha512_224_x86_init sha512_224_init -#define sha512_224_x86_process sha512_x86_process -int sha512_224_x86_done(hash_state * md, unsigned char *out); -int sha512_224_x86_test(void); -extern const struct ltc_hash_descriptor sha512_224_x86_desc; -#endif /* LTC_SHA512_224_X86 */ -#endif /* LTC_SHA512_224 */ - -int shani_is_supported(void); -int sha512ni_is_supported(void); - -#ifdef LTC_SHA256 -int sha256_init(hash_state * md); -int sha256_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int sha256_done(hash_state * md, unsigned char *out); -int sha256_test(void); -extern const struct ltc_hash_descriptor sha256_desc; - -#define sha256_c_init sha256_init -int sha256_c_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int sha256_c_done(hash_state * md, unsigned char *out); -int sha256_c_test(void); -extern const struct ltc_hash_descriptor sha256_portable_desc; - -#ifdef LTC_SHA256_X86 -#define sha256_x86_init sha256_init -int sha256_x86_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int sha256_x86_done(hash_state * md, unsigned char *out); -int sha256_x86_test(void); -extern const struct ltc_hash_descriptor sha256_x86_desc; -#endif /* LTC_SHA256_X86 */ -#endif /* LTC_SHA256 */ - -#ifdef LTC_SHA224 -#ifndef LTC_SHA256 - #error LTC_SHA256 is required for LTC_SHA224 -#endif -int sha224_init(hash_state * md); -#define sha224_process sha256_process -int sha224_done(hash_state * md, unsigned char *out); -int sha224_test(void); -extern const struct ltc_hash_descriptor sha224_desc; - -#define sha224_c_init sha224_init -#define sha224_c_process sha256_c_process -int sha224_c_done(hash_state * md, unsigned char *out); -int sha224_c_test(void); -extern const struct ltc_hash_descriptor sha224_portable_desc; - -#ifdef LTC_SHA224_X86 -#define sha224_x86_init sha224_init -#define sha224_x86_process sha256_x86_process -int sha224_x86_done(hash_state * md, unsigned char *out); -int sha224_x86_test(void); -extern const struct ltc_hash_descriptor sha224_x86_desc; -#endif /* LTC_SHA224_X86 */ -#endif /* LTC_SHA224 */ - -#ifdef LTC_SHA1 -int sha1_init(hash_state * md); -int sha1_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int sha1_done(hash_state * md, unsigned char *out); -int sha1_test(void); -extern const struct ltc_hash_descriptor sha1_desc; - -#define sha1_c_init sha1_init -int sha1_c_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int sha1_c_done(hash_state * md, unsigned char *out); -int sha1_c_test(void); -extern const struct ltc_hash_descriptor sha1_portable_desc; - -#ifdef LTC_SHA1_X86 -#define sha1_x86_init sha1_init -int sha1_x86_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int sha1_x86_done(hash_state * md, unsigned char *out); -int sha1_x86_test(void); -extern const struct ltc_hash_descriptor sha1_x86_desc; -#endif /* LTC_SHA1_X86 */ -#endif /* LTC_SHA1 */ - -#ifdef LTC_BLAKE2S -extern const struct ltc_hash_descriptor blake2s_256_desc; -int blake2s_256_init(hash_state * md); -int blake2s_256_test(void); - -extern const struct ltc_hash_descriptor blake2s_224_desc; -int blake2s_224_init(hash_state * md); -int blake2s_224_test(void); - -extern const struct ltc_hash_descriptor blake2s_160_desc; -int blake2s_160_init(hash_state * md); -int blake2s_160_test(void); - -extern const struct ltc_hash_descriptor blake2s_128_desc; -int blake2s_128_init(hash_state * md); -int blake2s_128_test(void); - -int blake2s_init(hash_state * md, unsigned long outlen, const unsigned char *key, unsigned long keylen); -int blake2s_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int blake2s_done(hash_state * md, unsigned char *out); -#endif - -#ifdef LTC_BLAKE2B -extern const struct ltc_hash_descriptor blake2b_512_desc; -int blake2b_512_init(hash_state * md); -int blake2b_512_test(void); - -extern const struct ltc_hash_descriptor blake2b_384_desc; -int blake2b_384_init(hash_state * md); -int blake2b_384_test(void); - -extern const struct ltc_hash_descriptor blake2b_256_desc; -int blake2b_256_init(hash_state * md); -int blake2b_256_test(void); - -extern const struct ltc_hash_descriptor blake2b_160_desc; -int blake2b_160_init(hash_state * md); -int blake2b_160_test(void); - -int blake2b_init(hash_state * md, unsigned long outlen, const unsigned char *key, unsigned long keylen); -int blake2b_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int blake2b_done(hash_state * md, unsigned char *out); -#endif - -#ifdef LTC_SM3 -int sm3_init(hash_state * md); -int sm3_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int sm3_done(hash_state * md, unsigned char *out); -int sm3_test(void); -extern const struct ltc_hash_descriptor sm3_desc; -#endif - -#ifdef LTC_BLAKE3 -int blake3_init(hash_state *md); -int blake3_keyed_init(hash_state *md, const unsigned char *key, unsigned long keylen); -int blake3_derive_key_init(hash_state *md, const unsigned char *context, unsigned long contextlen); -int blake3_process(hash_state *md, const unsigned char *in, unsigned long inlen); -int blake3_done(hash_state *md, unsigned char *out); -int blake3_test(void); -extern const struct ltc_hash_descriptor blake3_desc; -#endif - -#ifdef LTC_MD5 -int md5_init(hash_state * md); -int md5_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int md5_done(hash_state * md, unsigned char *out); -int md5_test(void); -extern const struct ltc_hash_descriptor md5_desc; -#endif - -#ifdef LTC_MD4 -int md4_init(hash_state * md); -int md4_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int md4_done(hash_state * md, unsigned char *out); -int md4_test(void); -extern const struct ltc_hash_descriptor md4_desc; -#endif - -#ifdef LTC_MD2 -int md2_init(hash_state * md); -int md2_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int md2_done(hash_state * md, unsigned char *out); -int md2_test(void); -extern const struct ltc_hash_descriptor md2_desc; -#endif - -#ifdef LTC_TIGER -int tiger_init(hash_state * md); -int tiger_init_ex(hash_state *md, unsigned long passes); -int tiger_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int tiger_done(hash_state * md, unsigned char *out); -int tiger_test(void); -int tiger2_init(hash_state *md); -int tiger2_init_ex(hash_state *md, unsigned long passes); -#define tiger2_process(m, i, l) tiger_process(m, i, l) -#define tiger2_done(m, o) tiger_done(m, o) -int tiger2_test(void); -extern const struct ltc_hash_descriptor tiger_desc, tiger2_desc; -#endif - -#ifdef LTC_RIPEMD128 -int rmd128_init(hash_state * md); -int rmd128_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int rmd128_done(hash_state * md, unsigned char *out); -int rmd128_test(void); -extern const struct ltc_hash_descriptor rmd128_desc; -#endif - -#ifdef LTC_RIPEMD160 -int rmd160_init(hash_state * md); -int rmd160_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int rmd160_done(hash_state * md, unsigned char *out); -int rmd160_test(void); -extern const struct ltc_hash_descriptor rmd160_desc; -#endif - -#ifdef LTC_RIPEMD256 -int rmd256_init(hash_state * md); -int rmd256_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int rmd256_done(hash_state * md, unsigned char *out); -int rmd256_test(void); -extern const struct ltc_hash_descriptor rmd256_desc; -#endif - -#ifdef LTC_RIPEMD320 -int rmd320_init(hash_state * md); -int rmd320_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int rmd320_done(hash_state * md, unsigned char *out); -int rmd320_test(void); -extern const struct ltc_hash_descriptor rmd320_desc; -#endif - - -int find_hash(const char *name); -int find_hash_id(unsigned char ID); -int find_hash_oid(const unsigned long *ID, unsigned long IDlen); -int find_hash_any(const char *name, int digestlen); -int register_hash(const struct ltc_hash_descriptor *hash); -int unregister_hash(const struct ltc_hash_descriptor *hash); -int register_all_hashes(void); -int hash_is_valid(int idx); - -LTC_MUTEX_PROTO(ltc_hash_mutex) - -int hash_memory(int hash, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int hash_memory_multi(int hash, unsigned char *out, unsigned long *outlen, - const unsigned char *in, unsigned long inlen, ...) - LTC_NULL_TERMINATED; - -#ifndef LTC_NO_FILE -int hash_filehandle(int hash, FILE *in, unsigned char *out, unsigned long *outlen); -int hash_file(int hash, const char *fname, unsigned char *out, unsigned long *outlen); -#endif diff --git a/src/headers/tomcrypt_mac.h b/src/headers/tomcrypt_mac.h deleted file mode 100644 index fe907615..00000000 --- a/src/headers/tomcrypt_mac.h +++ /dev/null @@ -1,576 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#ifdef LTC_HMAC -typedef struct Hmac_state { - hash_state md; - int hash; - unsigned char key[MAXBLOCKSIZE]; -} hmac_state; - -int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned long keylen); -int hmac_process(hmac_state *hmac, const unsigned char *in, unsigned long inlen); -int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen); -int hmac_test(void); -int hmac_memory(int hash, - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int hmac_memory_multi(int hash, - const unsigned char *key, unsigned long keylen, - unsigned char *out, unsigned long *outlen, - const unsigned char *in, unsigned long inlen, ...) - LTC_NULL_TERMINATED; -int hmac_file(int hash, const char *fname, const unsigned char *key, - unsigned long keylen, - unsigned char *out, unsigned long *outlen); -#endif - -#ifdef LTC_OMAC - -typedef struct { - int buflen, - blklen; - unsigned char block[MAXBLOCKSIZE], - prev[MAXBLOCKSIZE], - Lu[2][MAXBLOCKSIZE]; - symmetric_ECB key; -} omac_state; - -int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned long keylen); -int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen); -int omac_done(omac_state *omac, unsigned char *out, unsigned long *outlen); -int omac_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int omac_memory_multi(int cipher, - const unsigned char *key, unsigned long keylen, - unsigned char *out, unsigned long *outlen, - const unsigned char *in, unsigned long inlen, ...) - LTC_NULL_TERMINATED; -int omac_file(int cipher, - const unsigned char *key, unsigned long keylen, - const char *filename, - unsigned char *out, unsigned long *outlen); -int omac_test(void); -#endif /* LTC_OMAC */ - -#ifdef LTC_PMAC - -typedef struct { - unsigned char Ls[32][MAXBLOCKSIZE], /* L shifted by i bits to the left */ - Li[MAXBLOCKSIZE], /* value of Li [current value, we calc from previous recall] */ - Lr[MAXBLOCKSIZE], /* L * x^-1 */ - block[MAXBLOCKSIZE], /* currently accumulated block */ - checksum[MAXBLOCKSIZE]; /* current checksum */ - - symmetric_ECB key; /* scheduled key for cipher */ - unsigned long block_index; /* index # for current block */ - int block_len, /* length of block */ - buflen; /* number of bytes in the buffer */ -} pmac_state; - -int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned long keylen); -int pmac_process(pmac_state *pmac, const unsigned char *in, unsigned long inlen); -int pmac_done(pmac_state *pmac, unsigned char *out, unsigned long *outlen); - -int pmac_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); - -int pmac_memory_multi(int cipher, - const unsigned char *key, unsigned long keylen, - unsigned char *out, unsigned long *outlen, - const unsigned char *in, unsigned long inlen, ...) - LTC_NULL_TERMINATED; - -int pmac_file(int cipher, - const unsigned char *key, unsigned long keylen, - const char *filename, - unsigned char *out, unsigned long *outlen); - -int pmac_test(void); - -/* internal functions */ -int pmac_ntz(unsigned long x); -void pmac_shift_xor(pmac_state *pmac); - -#endif /* PMAC */ - -#ifdef LTC_POLY1305 -typedef struct { - ulong32 r[5]; - ulong32 h[5]; - ulong32 pad[4]; - unsigned long leftover; - unsigned char buffer[16]; - int final; -} poly1305_state; - -int poly1305_init(poly1305_state *st, const unsigned char *key, unsigned long keylen); -int poly1305_process(poly1305_state *st, const unsigned char *in, unsigned long inlen); -int poly1305_done(poly1305_state *st, unsigned char *mac, unsigned long *maclen); -int poly1305_memory(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *mac, unsigned long *maclen); -int poly1305_memory_multi(const unsigned char *key, unsigned long keylen, - unsigned char *mac, unsigned long *maclen, - const unsigned char *in, unsigned long inlen, ...) - LTC_NULL_TERMINATED; -int poly1305_file(const char *fname, const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen); -int poly1305_test(void); -#endif /* LTC_POLY1305 */ - -#ifdef LTC_BLAKE2SMAC -typedef hash_state blake2smac_state; -int blake2smac_init(blake2smac_state *st, unsigned long outlen, const unsigned char *key, unsigned long keylen); -int blake2smac_process(blake2smac_state *st, const unsigned char *in, unsigned long inlen); -int blake2smac_done(blake2smac_state *st, unsigned char *mac, unsigned long *maclen); -int blake2smac_memory(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *mac, unsigned long *maclen); -int blake2smac_memory_multi(const unsigned char *key, unsigned long keylen, - unsigned char *mac, unsigned long *maclen, - const unsigned char *in, unsigned long inlen, ...) - LTC_NULL_TERMINATED; -int blake2smac_file(const char *fname, const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen); -int blake2smac_test(void); -#endif /* LTC_BLAKE2SMAC */ - -#ifdef LTC_KMAC -/* values for the `variant` argument of kmac_init() and friends */ -#define LTC_KMAC128 1 -#define LTC_KMAC256 2 -#define LTC_KMAC128_XOF 3 -#define LTC_KMAC256_XOF 4 - -typedef struct Kmac_state { - hash_state sha3; - int xof; -} kmac_state; - -int kmac_init(kmac_state *st, int variant, - const unsigned char *key, unsigned long keylen, - const unsigned char *cust, unsigned long custlen); -int kmac_process(kmac_state *st, const unsigned char *in, unsigned long inlen); -int kmac_done(kmac_state *st, unsigned char *out, unsigned long *outlen); -int kmac_memory(int variant, - const unsigned char *key, unsigned long keylen, - const unsigned char *cust, unsigned long custlen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int kmac_memory_multi(int variant, - const unsigned char *key, unsigned long keylen, - const unsigned char *cust, unsigned long custlen, - unsigned char *out, unsigned long *outlen, - const unsigned char *in, unsigned long inlen, ...) - LTC_NULL_TERMINATED; -int kmac_file(int variant, - const unsigned char *key, unsigned long keylen, - const unsigned char *cust, unsigned long custlen, - const char *fname, - unsigned char *out, unsigned long *outlen); -int kmac_test(void); -#endif /* LTC_KMAC */ - -#ifdef LTC_BLAKE2BMAC -typedef hash_state blake2bmac_state; -int blake2bmac_init(blake2bmac_state *st, unsigned long outlen, const unsigned char *key, unsigned long keylen); -int blake2bmac_process(blake2bmac_state *st, const unsigned char *in, unsigned long inlen); -int blake2bmac_done(blake2bmac_state *st, unsigned char *mac, unsigned long *maclen); -int blake2bmac_memory(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *mac, unsigned long *maclen); -int blake2bmac_memory_multi(const unsigned char *key, unsigned long keylen, - unsigned char *mac, unsigned long *maclen, - const unsigned char *in, unsigned long inlen, ...) - LTC_NULL_TERMINATED; -int blake2bmac_file(const char *fname, const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen); -int blake2bmac_test(void); -#endif /* LTC_BLAKE2BMAC */ - - -#ifdef LTC_PELICAN - -typedef struct pelican_state -{ - symmetric_key K; - unsigned char state[16]; - int buflen; -} pelican_state; - -int pelican_init(pelican_state *pelmac, const unsigned char *key, unsigned long keylen); -int pelican_process(pelican_state *pelmac, const unsigned char *in, unsigned long inlen); -int pelican_done(pelican_state *pelmac, unsigned char *out); -int pelican_test(void); - -int pelican_memory(const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out); - -#endif - -#ifdef LTC_XCBC - -/* add this to "keylen" to xcbc_init to use a pure three-key XCBC MAC */ -#define LTC_XCBC_PURE 0x8000UL - -typedef struct { - unsigned char K[3][MAXBLOCKSIZE], - IV[MAXBLOCKSIZE]; - - symmetric_ECB key; - - int buflen, - blocksize; -} xcbc_state; - -int xcbc_init(xcbc_state *xcbc, int cipher, const unsigned char *key, unsigned long keylen); -int xcbc_process(xcbc_state *xcbc, const unsigned char *in, unsigned long inlen); -int xcbc_done(xcbc_state *xcbc, unsigned char *out, unsigned long *outlen); -int xcbc_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int xcbc_memory_multi(int cipher, - const unsigned char *key, unsigned long keylen, - unsigned char *out, unsigned long *outlen, - const unsigned char *in, unsigned long inlen, ...) - LTC_NULL_TERMINATED; -int xcbc_file(int cipher, - const unsigned char *key, unsigned long keylen, - const char *filename, - unsigned char *out, unsigned long *outlen); -int xcbc_test(void); - -#endif - -#ifdef LTC_F9_MODE - -typedef struct { - unsigned char akey[MAXBLOCKSIZE], - ACC[MAXBLOCKSIZE], - IV[MAXBLOCKSIZE]; - - symmetric_ECB key; - - int cipher, - buflen, - keylen, - blocksize; -} f9_state; - -int f9_init(f9_state *f9, int cipher, const unsigned char *key, unsigned long keylen); -int f9_process(f9_state *f9, const unsigned char *in, unsigned long inlen); -int f9_done(f9_state *f9, unsigned char *out, unsigned long *outlen); -int f9_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int f9_memory_multi(int cipher, - const unsigned char *key, unsigned long keylen, - unsigned char *out, unsigned long *outlen, - const unsigned char *in, unsigned long inlen, ...) - LTC_NULL_TERMINATED; -int f9_file(int cipher, - const unsigned char *key, unsigned long keylen, - const char *fname, - unsigned char *out, unsigned long *outlen); -int f9_test(void); - -#endif - -/* - * ENC+AUTH modes - */ - -#ifdef LTC_EAX_MODE - -#if !(defined(LTC_OMAC) && defined(LTC_CTR_MODE)) - #error LTC_EAX_MODE requires LTC_OMAC and CTR -#endif - -typedef struct { - unsigned char N[MAXBLOCKSIZE]; - symmetric_CTR ctr; - omac_state headeromac, ctomac; -} eax_state; - -int eax_init(eax_state *eax, int cipher, const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *header, unsigned long headerlen); - -int eax_encrypt(eax_state *eax, const unsigned char *pt, unsigned char *ct, unsigned long length); -int eax_decrypt(eax_state *eax, const unsigned char *ct, unsigned char *pt, unsigned long length); -int eax_addheader(eax_state *eax, const unsigned char *header, unsigned long length); -int eax_done(eax_state *eax, unsigned char *tag, unsigned long *taglen); - -int eax_encrypt_authenticate_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *header, unsigned long headerlen, - const unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - unsigned char *tag, unsigned long *taglen); - -int eax_decrypt_verify_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *header, unsigned long headerlen, - const unsigned char *ct, unsigned long ctlen, - unsigned char *pt, - const unsigned char *tag, unsigned long taglen, - int *stat); - - int eax_test(void); -#endif /* EAX MODE */ - -#ifdef LTC_OCB3_MODE -typedef struct { - unsigned char Offset_0[MAXBLOCKSIZE], /* Offset_0 value */ - Offset_current[MAXBLOCKSIZE], /* Offset_{current_block_index} value */ - L_dollar[MAXBLOCKSIZE], /* L_$ value */ - L_star[MAXBLOCKSIZE], /* L_* value */ - L_[32][MAXBLOCKSIZE], /* L_{i} values */ - tag_part[MAXBLOCKSIZE], /* intermediate result of tag calculation */ - checksum[MAXBLOCKSIZE]; /* current checksum */ - - /* AAD related members */ - unsigned char aSum_current[MAXBLOCKSIZE], /* AAD related helper variable */ - aOffset_current[MAXBLOCKSIZE], /* AAD related helper variable */ - adata_buffer[MAXBLOCKSIZE]; /* AAD buffer */ - - symmetric_ECB key; /* scheduled key for cipher */ - int adata_buffer_bytes; /* bytes in AAD buffer */ - unsigned long ablock_index; /* index # for current adata (AAD) block */ - unsigned long block_index; /* index # for current data block */ - int tag_len, /* length of tag */ - block_len; /* length of block */ -} ocb3_state; - -int ocb3_init(ocb3_state *ocb, int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - unsigned long taglen); - -int ocb3_encrypt(ocb3_state *ocb, const unsigned char *pt, unsigned long ptlen, unsigned char *ct); -int ocb3_decrypt(ocb3_state *ocb, const unsigned char *ct, unsigned long ctlen, unsigned char *pt); -int ocb3_encrypt_last(ocb3_state *ocb, const unsigned char *pt, unsigned long ptlen, unsigned char *ct); -int ocb3_decrypt_last(ocb3_state *ocb, const unsigned char *ct, unsigned long ctlen, unsigned char *pt); -int ocb3_add_aad(ocb3_state *ocb, const unsigned char *aad, unsigned long aadlen); -int ocb3_done(ocb3_state *ocb, unsigned char *tag, unsigned long *taglen); - -int ocb3_encrypt_authenticate_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *adata, unsigned long adatalen, - const unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - unsigned char *tag, unsigned long *taglen); - -int ocb3_decrypt_verify_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *adata, unsigned long adatalen, - const unsigned char *ct, unsigned long ctlen, - unsigned char *pt, - const unsigned char *tag, unsigned long taglen, - int *stat); - -int ocb3_test(void); - -#endif /* LTC_OCB3_MODE */ - -#ifdef LTC_CCM_MODE - -#define CCM_ENCRYPT LTC_ENCRYPT -#define CCM_DECRYPT LTC_DECRYPT - -typedef struct { - symmetric_ECB K; - unsigned char PAD[16], /* flags | Nonce N | l(m) */ - ctr[16], - CTRPAD[16]; - - - int taglen, /* length of the tag (encoded in M value) */ - x; /* index in PAD */ - - unsigned long L, /* L value */ - ptlen, /* length that will be enc / dec */ - current_ptlen, /* current processed length */ - aadlen, /* length of the aad */ - current_aadlen, /* length of the currently provided add */ - noncelen; /* length of the nonce */ - - unsigned char CTRlen; -} ccm_state; - -int ccm_init(ccm_state *ccm, int cipher, - const unsigned char *key, int keylen, int ptlen, int taglen, int aadlen); - -int ccm_reset(ccm_state *ccm); - -int ccm_add_nonce(ccm_state *ccm, - const unsigned char *nonce, unsigned long noncelen); - -int ccm_add_aad(ccm_state *ccm, - const unsigned char *adata, unsigned long adatalen); - -int ccm_process(ccm_state *ccm, - unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - int direction); - -int ccm_done(ccm_state *ccm, - unsigned char *tag, unsigned long *taglen); - -int ccm_memory(int cipher, - const unsigned char *key, unsigned long keylen, - symmetric_ECB *uskey, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *header, unsigned long headerlen, - unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - unsigned char *tag, unsigned long *taglen, - int direction); - -int ccm_test(void); - -#endif /* LTC_CCM_MODE */ - -#if defined(LTC_LRW_MODE) || defined(LTC_GCM_MODE) || defined(LTC_GCM_SIV_MODE) -void gcm_gf_mult(const unsigned char *a, const unsigned char *b, unsigned char *c); -#endif - -int gcm_hw_pmul_is_supported(void); - -/* table shared between GCM and LRW */ -#if defined(LTC_GCM_TABLES) || defined(LTC_LRW_TABLES) || ((defined(LTC_GCM_MODE) || defined(LTC_GCM_SIV_MODE)) && defined(LTC_FAST)) -extern const unsigned char gcm_shift_table[]; -#endif - -#ifdef LTC_GCM_MODE - -#define GCM_ENCRYPT LTC_ENCRYPT -#define GCM_DECRYPT LTC_DECRYPT - -#define LTC_GCM_MODE_IV 0 -#define LTC_GCM_MODE_AAD 1 -#define LTC_GCM_MODE_TEXT 2 - -typedef struct { - symmetric_ECB K; - unsigned char H[16], /* multiplier */ - X[16], /* accumulator */ - Y[16], /* counter */ - Y_0[16], /* initial counter */ - buf[16]; /* buffer for stuff */ - -#ifdef LTC_GCM_TABLES - unsigned char PC[16][256][16]; /* 16 tables of 8x128 */ -#endif - int ivmode, /* Which mode is the IV in? */ - mode, /* mode the GCM code is in */ - buflen; /* length of data in buf */ - - ulong64 totlen, /* 64-bit counter used for IV and AAD */ - pttotlen; /* 64-bit counter for the PT */ -} gcm_state; - -void gcm_mult_h(const gcm_state *gcm, unsigned char *I); - -int gcm_init(gcm_state *gcm, int cipher, - const unsigned char *key, int keylen); - -int gcm_reset(gcm_state *gcm); - -int gcm_add_iv(gcm_state *gcm, - const unsigned char *IV, unsigned long IVlen); - -int gcm_add_aad(gcm_state *gcm, - const unsigned char *adata, unsigned long adatalen); - -int gcm_process(gcm_state *gcm, - unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - int direction); - -int gcm_done(gcm_state *gcm, - unsigned char *tag, unsigned long *taglen); - -int gcm_memory( int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *IV, unsigned long IVlen, - const unsigned char *adata, unsigned long adatalen, - unsigned char *pt, unsigned long ptlen, - unsigned char *ct, - unsigned char *tag, unsigned long *taglen, - int direction); -int gcm_test(void); - -#endif /* LTC_GCM_MODE */ - -#ifdef LTC_CHACHA20POLY1305_MODE - -typedef struct { - poly1305_state poly; - chacha_state chacha; - ulong64 aadlen; - ulong64 ctlen; - int aadflg, openssh_compat; -} chacha20poly1305_state; - -#define CHACHA20POLY1305_ENCRYPT LTC_ENCRYPT -#define CHACHA20POLY1305_DECRYPT LTC_DECRYPT -#define CHACHA20POLY1305_OPENSSH_COMPAT 2 - -int chacha20poly1305_init(chacha20poly1305_state *st, const unsigned char *key, unsigned long keylen); -int chacha20poly1305_setiv(chacha20poly1305_state *st, const unsigned char *iv, unsigned long ivlen); -int chacha20poly1305_setiv_rfc7905(chacha20poly1305_state *st, const unsigned char *iv, unsigned long ivlen, ulong64 sequence_number); -int chacha20poly1305_add_aad(chacha20poly1305_state *st, const unsigned char *in, unsigned long inlen); -int chacha20poly1305_encrypt(chacha20poly1305_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out); -int chacha20poly1305_decrypt(chacha20poly1305_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out); -int chacha20poly1305_done(chacha20poly1305_state *st, unsigned char *tag, unsigned long *taglen); -int chacha20poly1305_memory(const unsigned char *key, unsigned long keylen, - const unsigned char *iv, unsigned long ivlen, - const unsigned char *aad, unsigned long aadlen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, - unsigned char *tag, unsigned long *taglen, - int direction); -int chacha20poly1305_test(void); - -#endif /* LTC_CHACHA20POLY1305_MODE */ -#ifdef LTC_SIV_MODE - -int siv_encrypt_memory( int cipher, - const unsigned char *key, unsigned long keylen, - unsigned long adnum, - const unsigned char *ad[], unsigned long adlen[], - const unsigned char *pt, unsigned long ptlen, - unsigned char *ct, unsigned long *ctlen); -int siv_decrypt_memory( int cipher, - const unsigned char *key, unsigned long keylen, - unsigned long adnum, - const unsigned char *ad[], unsigned long adlen[], - const unsigned char *ct, unsigned long ctlen, - unsigned char *pt, unsigned long *ptlen); -int siv_memory( int cipher, int direction, - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - unsigned long adnum, - ...) LTC_NULL_TERMINATED; -int siv_test(void); - -#endif - -#ifdef LTC_GCM_SIV_MODE -/* RFC 8452 - AES-GCM-SIV */ -int gcm_siv_memory( int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *aad, unsigned long aadlen, - unsigned char *in, unsigned long inlen, - unsigned char *out, - unsigned char *tag, unsigned long *taglen, - int direction); -int gcm_siv_test(void); -#endif diff --git a/src/headers/tomcrypt_macros.h b/src/headers/tomcrypt_macros.h deleted file mode 100644 index 16e37054..00000000 --- a/src/headers/tomcrypt_macros.h +++ /dev/null @@ -1,464 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - - -#define LTC_TMPVAR__(n, l) n ## l -#define LTC_TMPVAR_(n, l) LTC_TMPVAR__(n, l) -#define LTC_TMPVAR(n) LTC_TMPVAR_(LTC_ ## n ## _, __LINE__) - -/* ---- HELPER MACROS ---- */ -#ifdef ENDIAN_NEUTRAL - -#define STORE32L(x, y) \ - do { (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ - (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } while(0) - -#define LOAD32L(x, y) \ - do { x = ((ulong32)((y)[3] & 255)<<24) | \ - ((ulong32)((y)[2] & 255)<<16) | \ - ((ulong32)((y)[1] & 255)<<8) | \ - ((ulong32)((y)[0] & 255)); } while(0) - -#define STORE64L(x, y) \ - do { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \ - (y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \ - (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ - (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } while(0) - -#define LOAD64L(x, y) \ - do { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48)| \ - (((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32)| \ - (((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16)| \ - (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } while(0) - -#define STORE32H(x, y) \ - do { (y)[0] = (unsigned char)(((x)>>24)&255); (y)[1] = (unsigned char)(((x)>>16)&255); \ - (y)[2] = (unsigned char)(((x)>>8)&255); (y)[3] = (unsigned char)((x)&255); } while(0) - -#define LOAD32H(x, y) \ - do { x = ((ulong32)((y)[0] & 255)<<24) | \ - ((ulong32)((y)[1] & 255)<<16) | \ - ((ulong32)((y)[2] & 255)<<8) | \ - ((ulong32)((y)[3] & 255)); } while(0) - -#define STORE64H(x, y) \ -do { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \ - (y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \ - (y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \ - (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } while(0) - -#define LOAD64H(x, y) \ -do { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48) | \ - (((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32) | \ - (((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16) | \ - (((ulong64)((y)[6] & 255))<<8)|(((ulong64)((y)[7] & 255))); } while(0) - - -#elif defined(ENDIAN_LITTLE) - -#ifdef LTC_HAVE_BSWAP_BUILTIN - -#define STORE32H(x, y) \ -do { ulong32 LTC_TMPVAR(ttt) = __builtin_bswap32 ((x)); \ - XMEMCPY ((y), <C_TMPVAR(ttt), 4); } while(0) - -#define LOAD32H(x, y) \ -do { XMEMCPY (&(x), (y), 4); \ - (x) = __builtin_bswap32 ((x)); } while(0) - -#elif !defined(LTC_NO_BSWAP) && (defined(INTEL_CC) || (defined(__GNUC__) && (defined(__DJGPP__) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__i386__) || defined(__x86_64__)))) - -#define STORE32H(x, y) \ -__asm__ volatile ( \ - "bswapl %0 \n\t" \ - "movl %0,(%1)\n\t" \ - "bswapl %0 \n\t" \ - ::"r"(x), "r"(y): "memory"); - -#define LOAD32H(x, y) \ -__asm__ volatile ( \ - "movl (%1),%0\n\t" \ - "bswapl %0\n\t" \ - :"=r"(x): "r"(y): "memory"); - -#else - -#define STORE32H(x, y) \ - do { (y)[0] = (unsigned char)(((x)>>24)&255); (y)[1] = (unsigned char)(((x)>>16)&255); \ - (y)[2] = (unsigned char)(((x)>>8)&255); (y)[3] = (unsigned char)((x)&255); } while(0) - -#define LOAD32H(x, y) \ - do { x = ((ulong32)((y)[0] & 255)<<24) | \ - ((ulong32)((y)[1] & 255)<<16) | \ - ((ulong32)((y)[2] & 255)<<8) | \ - ((ulong32)((y)[3] & 255)); } while(0) - -#endif - -#ifdef LTC_HAVE_BSWAP_BUILTIN - -#define STORE64H(x, y) \ -do { ulong64 LTC_TMPVAR(ttt) = __builtin_bswap64 ((x)); \ - XMEMCPY ((y), <C_TMPVAR(ttt), 8); } while(0) - -#define LOAD64H(x, y) \ -do { XMEMCPY (&(x), (y), 8); \ - (x) = __builtin_bswap64 ((x)); } while(0) - -/* x86_64 processor */ -#elif !defined(LTC_NO_BSWAP) && (defined(__GNUC__) && defined(__x86_64__)) - -#define STORE64H(x, y) \ -__asm__ volatile ( \ - "bswapq %0 \n\t" \ - "movq %0,(%1)\n\t" \ - "bswapq %0 \n\t" \ - ::"r"(x), "r"(y): "memory"); - -#define LOAD64H(x, y) \ -__asm__ volatile ( \ - "movq (%1),%0\n\t" \ - "bswapq %0\n\t" \ - :"=r"(x): "r"(y): "memory"); - -#else - -#define STORE64H(x, y) \ -do { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \ - (y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \ - (y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \ - (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } while(0) - -#define LOAD64H(x, y) \ -do { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48) | \ - (((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32) | \ - (((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16) | \ - (((ulong64)((y)[6] & 255))<<8)|(((ulong64)((y)[7] & 255))); } while(0) - -#endif - -#ifdef ENDIAN_32BITWORD - -#define STORE32L(x, y) \ - do { ulong32 LTC_TMPVAR(ttt) = (x); XMEMCPY(y, <C_TMPVAR(ttt), 4); } while(0) - -#define LOAD32L(x, y) \ - do { XMEMCPY(&(x), y, 4); } while(0) - -#define STORE64L(x, y) \ - do { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \ - (y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \ - (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ - (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } while(0) - -#define LOAD64L(x, y) \ - do { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48)| \ - (((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32)| \ - (((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16)| \ - (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } while(0) - -#else /* 64-bit words then */ - -#define STORE32L(x, y) \ - do { ulong32 LTC_TMPVAR(ttt) = (x); XMEMCPY(y, <C_TMPVAR(ttt), 4); } while(0) - -#define LOAD32L(x, y) \ - do { XMEMCPY(&(x), y, 4); x &= 0xFFFFFFFF; } while(0) - -#define STORE64L(x, y) \ - do { ulong64 LTC_TMPVAR(ttt) = (x); XMEMCPY(y, <C_TMPVAR(ttt), 8); } while(0) - -#define LOAD64L(x, y) \ - do { XMEMCPY(&(x), y, 8); } while(0) - -#endif /* ENDIAN_64BITWORD */ - -#elif defined(ENDIAN_BIG) - -#define STORE32L(x, y) \ - do { (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ - (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } while(0) - -#define LOAD32L(x, y) \ - do { x = ((ulong32)((y)[3] & 255)<<24) | \ - ((ulong32)((y)[2] & 255)<<16) | \ - ((ulong32)((y)[1] & 255)<<8) | \ - ((ulong32)((y)[0] & 255)); } while(0) - -#define STORE64L(x, y) \ -do { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \ - (y)[5] = (unsigned char)(((x)>>40)&255); (y)[4] = (unsigned char)(((x)>>32)&255); \ - (y)[3] = (unsigned char)(((x)>>24)&255); (y)[2] = (unsigned char)(((x)>>16)&255); \ - (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } while(0) - -#define LOAD64L(x, y) \ -do { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48) | \ - (((ulong64)((y)[5] & 255))<<40)|(((ulong64)((y)[4] & 255))<<32) | \ - (((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16) | \ - (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } while(0) - -#ifdef ENDIAN_32BITWORD - -#define STORE32H(x, y) \ - do { ulong32 LTC_TMPVAR(ttt) = (x); XMEMCPY(y, <C_TMPVAR(ttt), 4); } while(0) - -#define LOAD32H(x, y) \ - do { XMEMCPY(&(x), y, 4); } while(0) - -#define STORE64H(x, y) \ - do { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \ - (y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \ - (y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \ - (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } while(0) - -#define LOAD64H(x, y) \ - do { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48)| \ - (((ulong64)((y)[2] & 255))<<40)|(((ulong64)((y)[3] & 255))<<32)| \ - (((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16)| \ - (((ulong64)((y)[6] & 255))<<8)| (((ulong64)((y)[7] & 255))); } while(0) - -#else /* 64-bit words then */ - -#define STORE32H(x, y) \ - do { ulong32 LTC_TMPVAR(ttt) = (x); XMEMCPY(y, <C_TMPVAR(ttt), 4); } while(0) - -#define LOAD32H(x, y) \ - do { XMEMCPY(&(x), y, 4); x &= 0xFFFFFFFF; } while(0) - -#define STORE64H(x, y) \ - do { ulong64 LTC_TMPVAR(ttt) = (x); XMEMCPY(y, <C_TMPVAR(ttt), 8); } while(0) - -#define LOAD64H(x, y) \ - do { XMEMCPY(&(x), y, 8); } while(0) - -#endif /* ENDIAN_64BITWORD */ -#endif /* ENDIAN_BIG */ - -#define BSWAP(x) ( ((x>>24)&0x000000FFUL) | ((x<<24)&0xFF000000UL) | \ - ((x>>8)&0x0000FF00UL) | ((x<<8)&0x00FF0000UL) ) - - -/* 32-bit Rotates */ -#if defined(_MSC_VER) -#define LTC_ROx_BUILTIN - -/* instrinsic rotate */ -#include -#pragma intrinsic(_rotr,_rotl) -#define ROR(x,n) _rotr(x,n) -#define ROL(x,n) _rotl(x,n) -#define RORc(x,n) ROR(x,n) -#define ROLc(x,n) ROL(x,n) - -#elif defined(LTC_HAVE_ROTATE_BUILTIN) -#define LTC_ROx_BUILTIN - -#define ROR(x,n) __builtin_rotateright32(x,n) -#define ROL(x,n) __builtin_rotateleft32(x,n) -#define ROLc(x,n) ROL(x,n) -#define RORc(x,n) ROR(x,n) - -#elif !defined(__STRICT_ANSI__) && defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && !defined(INTEL_CC) && !defined(LTC_NO_ASM) -#define LTC_ROx_ASM - -static inline ulong32 ROL(ulong32 word, int i) -{ - __asm__ ("roll %%cl,%0" - :"=r" (word) - :"0" (word),"c" (i)); - return word; -} - -static inline ulong32 ROR(ulong32 word, int i) -{ - __asm__ ("rorl %%cl,%0" - :"=r" (word) - :"0" (word),"c" (i)); - return word; -} - -#ifndef LTC_NO_ROLC - -#define ROLc(word,i) ({ \ - ulong32 LTC_TMPVAR(ROLc) = (word); \ - __asm__ ("roll %2, %0" : \ - "=r" (LTC_TMPVAR(ROLc)) : \ - "0" (LTC_TMPVAR(ROLc)), \ - "I" (i)); \ - LTC_TMPVAR(ROLc); \ - }) -#define RORc(word,i) ({ \ - ulong32 LTC_TMPVAR(RORc) = (word); \ - __asm__ ("rorl %2, %0" : \ - "=r" (LTC_TMPVAR(RORc)) : \ - "0" (LTC_TMPVAR(RORc)), \ - "I" (i)); \ - LTC_TMPVAR(RORc); \ - }) - -#else - -#define ROLc ROL -#define RORc ROR - -#endif - -#elif !defined(__STRICT_ANSI__) && defined(LTC_PPC32) -#define LTC_ROx_ASM - -static inline ulong32 ROL(ulong32 word, int i) -{ - __asm__ ("rotlw %0,%0,%2" - :"=r" (word) - :"0" (word),"r" (i)); - return word; -} - -static inline ulong32 ROR(ulong32 word, int i) -{ - __asm__ ("rotlw %0,%0,%2" - :"=r" (word) - :"0" (word),"r" (32-i)); - return word; -} - -#ifndef LTC_NO_ROLC - -static inline ulong32 ROLc(ulong32 word, const int i) -{ - __asm__ ("rotlwi %0,%0,%2" - :"=r" (word) - :"0" (word),"I" (i)); - return word; -} - -static inline ulong32 RORc(ulong32 word, const int i) -{ - __asm__ ("rotrwi %0,%0,%2" - :"=r" (word) - :"0" (word),"I" (i)); - return word; -} - -#else - -#define ROLc ROL -#define RORc ROR - -#endif - - -#else - -/* rotates the hard way */ -#define ROL(x, y) ( (((ulong32)(x)<<(ulong32)((y)&31)) | (((ulong32)(x)&0xFFFFFFFFUL)>>(ulong32)((32-((y)&31))&31))) & 0xFFFFFFFFUL) -#define ROR(x, y) ( ((((ulong32)(x)&0xFFFFFFFFUL)>>(ulong32)((y)&31)) | ((ulong32)(x)<<(ulong32)((32-((y)&31))&31))) & 0xFFFFFFFFUL) -#define ROLc(x, y) ( (((ulong32)(x)<<(ulong32)((y)&31)) | (((ulong32)(x)&0xFFFFFFFFUL)>>(ulong32)((32-((y)&31))&31))) & 0xFFFFFFFFUL) -#define RORc(x, y) ( ((((ulong32)(x)&0xFFFFFFFFUL)>>(ulong32)((y)&31)) | ((ulong32)(x)<<(ulong32)((32-((y)&31))&31))) & 0xFFFFFFFFUL) - -#endif - - -/* 64-bit Rotates */ -#if defined(_MSC_VER) - -/* instrinsic rotate */ -#include -#pragma intrinsic(_rotr64,_rotr64) -#define ROR64(x,n) _rotr64(x,n) -#define ROL64(x,n) _rotl64(x,n) -#define ROR64c(x,n) ROR64(x,n) -#define ROL64c(x,n) ROL64(x,n) - -#elif defined(LTC_HAVE_ROTATE_BUILTIN) - -#define ROR64(x,n) __builtin_rotateright64(x,n) -#define ROL64(x,n) __builtin_rotateleft64(x,n) -#define ROR64c(x,n) ROR64(x,n) -#define ROL64c(x,n) ROL64(x,n) - -#elif !defined(__STRICT_ANSI__) && defined(__GNUC__) && defined(__x86_64__) && !defined(INTEL_CC) && !defined(LTC_NO_ASM) - -static inline ulong64 ROL64(ulong64 word, int i) -{ - __asm__("rolq %%cl,%0" - :"=r" (word) - :"0" (word),"c" (i)); - return word; -} - -static inline ulong64 ROR64(ulong64 word, int i) -{ - __asm__("rorq %%cl,%0" - :"=r" (word) - :"0" (word),"c" (i)); - return word; -} - -#ifndef LTC_NO_ROLC - -#define ROL64c(word,i) ({ \ - ulong64 LTC_TMPVAR(ROL64c) = word; \ - __asm__ ("rolq %2, %0" : \ - "=r" (LTC_TMPVAR(ROL64c)) : \ - "0" (LTC_TMPVAR(ROL64c)), \ - "J" (i)); \ - LTC_TMPVAR(ROL64c); \ - }) -#define ROR64c(word,i) ({ \ - ulong64 LTC_TMPVAR(ROR64c) = word; \ - __asm__ ("rorq %2, %0" : \ - "=r" (LTC_TMPVAR(ROR64c)) : \ - "0" (LTC_TMPVAR(ROR64c)), \ - "J" (i)); \ - LTC_TMPVAR(ROR64c); \ - }) - -#else /* LTC_NO_ROLC */ - -#define ROL64c ROL64 -#define ROR64c ROR64 - -#endif - -#else /* Not x86_64 */ - -#define ROL64(x, y) \ - ( (((x)<<((ulong64)(y)&63)) | \ - (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>(((ulong64)64-((y)&63))&63))) & CONST64(0xFFFFFFFFFFFFFFFF)) - -#define ROR64(x, y) \ - ( ((((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)(y)&CONST64(63))) | \ - ((x)<<(((ulong64)64-((y)&63))&63))) & CONST64(0xFFFFFFFFFFFFFFFF)) - -#define ROL64c(x, y) \ - ( (((x)<<((ulong64)(y)&63)) | \ - (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>(((ulong64)64-((y)&63))&63))) & CONST64(0xFFFFFFFFFFFFFFFF)) - -#define ROR64c(x, y) \ - ( ((((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)(y)&CONST64(63))) | \ - ((x)<<(((ulong64)64-((y)&63))&63))) & CONST64(0xFFFFFFFFFFFFFFFF)) - -#endif - -#ifndef MAX - #define MAX(x, y) ( ((x)>(y))?(x):(y) ) -#endif - -#ifndef MIN - #define MIN(x, y) ( ((x)<(y))?(x):(y) ) -#endif - -#ifndef LTC_UNUSED_PARAM - #define LTC_UNUSED_PARAM(x) (void)(x) -#endif - -/* Calculates the number of bytes required to hold a buffer that will later on be - * aligned by using LTC_ALIGN_BUF(). - */ -#define LTC_ALIGNED_BUF_SIZE(type, n, align) (((n) + ((align)/sizeof(type))) * sizeof(type)) - -/* there is no snprintf before Visual C++ 2015 */ -#if defined(_MSC_VER) && _MSC_VER < 1900 -#define snprintf _snprintf -#endif diff --git a/src/headers/tomcrypt_math.h b/src/headers/tomcrypt_math.h deleted file mode 100644 index 3ce45acf..00000000 --- a/src/headers/tomcrypt_math.h +++ /dev/null @@ -1,519 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** math functions **/ - -#define LTC_MP_LT -1 -#define LTC_MP_EQ 0 -#define LTC_MP_GT 1 - -#define LTC_MP_NO 0 -#define LTC_MP_YES 1 - -#ifndef LTC_MECC - typedef void ecc_point; -#endif - -#ifndef LTC_MRSA - typedef void rsa_key; -#endif - -#ifndef LTC_MILLER_RABIN_REPS - /* Number of rounds of the Miller-Rabin test - * "Reasonable values of reps are between 15 and 50." c.f. gmp doc of mpz_probab_prime_p() - * As of https://security.stackexchange.com/a/4546 we should use 40 rounds */ - #define LTC_MILLER_RABIN_REPS 40 -#endif - -int radix_to_bin(const void *in, int radix, void *out, unsigned long *len); - -/** math descriptor */ -typedef struct { - /** Name of the math provider */ - const char *name; - - /** Bits per digit, amount of bits must fit in an unsigned long */ - int bits_per_digit; - -/* ---- init/deinit functions ---- */ - - /** initialize a bignum - @param a The number to initialize - @return CRYPT_OK on success - */ - int (*init)(void **a); - - /** init copy - @param dst The number to initialize and write to - @param src The number to copy from - @return CRYPT_OK on success - */ - int (*init_copy)(void **dst, const void *src); - - /** deinit - @param a The number to free - @return CRYPT_OK on success - */ - void (*deinit)(void *a); - -/* ---- data movement ---- */ - - /** negate - @param src The number to negate - @param dst The destination - @return CRYPT_OK on success - */ - int (*neg)(const void *src, void *dst); - - /** copy - @param src The number to copy from - @param dst The number to write to - @return CRYPT_OK on success - */ - int (*copy)(const void *src, void *dst); - -/* ---- trivial low level functions ---- */ - - /** set small constant - @param a Number to write to - @param n Source upto bits_per_digit (actually meant for very small constants) - @return CRYPT_OK on success - */ - int (*set_int)(void *a, ltc_mp_digit n); - - /** get small constant - @param a Small number to read, - only fetches up to bits_per_digit from the number - @return The lower bits_per_digit of the integer (unsigned) - */ - unsigned long (*get_int)(const void *a); - - /** get digit n - @param a The number to read from - @param n The number of the digit to fetch - @return The bits_per_digit sized n'th digit of a - */ - ltc_mp_digit (*get_digit)(const void *a, int n); - - /** Get the number of digits that represent the number - @param a The number to count - @return The number of digits used to represent the number - */ - int (*get_digit_count)(const void *a); - - /** compare two integers - @param a The left side integer - @param b The right side integer - @return LTC_MP_LT if a < b, - LTC_MP_GT if a > b and - LTC_MP_EQ otherwise. (signed comparison) - */ - int (*compare)(const void *a, const void *b); - - /** compare against int - @param a The left side integer - @param b The right side integer (upto bits_per_digit) - @return LTC_MP_LT if a < b, - LTC_MP_GT if a > b and - LTC_MP_EQ otherwise. (signed comparison) - */ - int (*compare_d)(const void *a, ltc_mp_digit n); - - /** Count the number of bits used to represent the integer - @param a The integer to count - @return The number of bits required to represent the integer - */ - int (*count_bits)(const void * a); - - /** Count the number of LSB bits which are zero - @param a The integer to count - @return The number of contiguous zero LSB bits - */ - int (*count_lsb_bits)(const void *a); - - /** Compute a power of two - @param a The integer to store the power in - @param n The power of two you want to store (a = 2^n) - @return CRYPT_OK on success - */ - int (*twoexpt)(void *a , int n); - -/* ---- radix conversions ---- */ - - /** read ascii string - @param a The integer to store into - @param str The string to read - @param radix The radix the integer has been represented in (2-64) - @return CRYPT_OK on success - */ - int (*read_radix)(void *a, const char *str, int radix); - - /** write number to string - @param a The integer to store - @param str The destination for the string - @param radix The radix the integer is to be represented in (2-64) - @return CRYPT_OK on success - */ - int (*write_radix)(const void *a, char *str, int radix); - - /** get size as unsigned char string - @param a The integer to get the size (when stored in array of octets) - @return The length of the integer in octets - */ - unsigned long (*unsigned_size)(const void *a); - - /** store an integer as an array of octets - @param src The integer to store - @param dst The buffer to store the integer in - @return CRYPT_OK on success - */ - int (*unsigned_write)(const void *src, unsigned char *dst); - - /** read an array of octets and store as integer - @param dst The integer to load - @param src The array of octets - @param len The number of octets - @return CRYPT_OK on success - */ - int (*unsigned_read)( void *dst, - const unsigned char *src, - unsigned long len); - -/* ---- basic math ---- */ - - /** add two integers - @param a The first source integer - @param b The second source integer - @param c The destination of "a + b" - @return CRYPT_OK on success - */ - int (*add)(const void *a, const void *b, void *c); - - /** add two integers - @param a The first source integer - @param b The second source integer - (single digit of upto bits_per_digit in length) - @param c The destination of "a + b" - @return CRYPT_OK on success - */ - int (*addi)(const void *a, ltc_mp_digit b, void *c); - - /** subtract two integers - @param a The first source integer - @param b The second source integer - @param c The destination of "a - b" - @return CRYPT_OK on success - */ - int (*sub)(const void *a, const void *b, void *c); - - /** subtract two integers - @param a The first source integer - @param b The second source integer - (single digit of upto bits_per_digit in length) - @param c The destination of "a - b" - @return CRYPT_OK on success - */ - int (*subi)(const void *a, ltc_mp_digit b, void *c); - - /** multiply two integers - @param a The first source integer - @param b The second source integer - (single digit of upto bits_per_digit in length) - @param c The destination of "a * b" - @return CRYPT_OK on success - */ - int (*mul)(const void *a, const void *b, void *c); - - /** multiply two integers - @param a The first source integer - @param b The second source integer - (single digit of upto bits_per_digit in length) - @param c The destination of "a * b" - @return CRYPT_OK on success - */ - int (*muli)(const void *a, ltc_mp_digit b, void *c); - - /** Square an integer - @param a The integer to square - @param b The destination - @return CRYPT_OK on success - */ - int (*sqr)(const void *a, void *b); - - /** Square root (mod prime) - @param a The integer to compute square root mod prime from - @param b The prime - @param c The destination - @return CRYPT_OK on success - */ - int (*sqrtmod_prime)(const void *a, const void *b, void *c); - - /** Divide an integer - @param a The dividend - @param b The divisor - @param c The quotient (can be NULL to signify don't care) - @param d The remainder (can be NULL to signify don't care) - @return CRYPT_OK on success - */ - int (*mpdiv)(const void *a, const void *b, void *c, void *d); - - /** divide by two - @param a The integer to divide (shift right) - @param b The destination - @return CRYPT_OK on success - */ - int (*div_2)(const void *a, void *b); - - /** Get remainder (small value) - @param a The integer to reduce - @param b The modulus (upto bits_per_digit in length) - @param c The destination for the residue - @return CRYPT_OK on success - */ - int (*modi)(const void *a, ltc_mp_digit b, ltc_mp_digit *c); - - /** gcd - @param a The first integer - @param b The second integer - @param c The destination for (a, b) - @return CRYPT_OK on success - */ - int (*gcd)(const void *a, const void *b, void *c); - - /** lcm - @param a The first integer - @param b The second integer - @param c The destination for [a, b] - @return CRYPT_OK on success - */ - int (*lcm)(const void *a, const void *b, void *c); - - /** Modular multiplication - @param a The first source - @param b The second source - @param c The modulus - @param d The destination (a*b mod c) - @return CRYPT_OK on success - */ - int (*mulmod)(const void *a, const void *b, const void *c, void *d); - - /** Modular squaring - @param a The first source - @param b The modulus - @param c The destination (a*a mod b) - @return CRYPT_OK on success - */ - int (*sqrmod)(const void *a, const void *b, void *c); - - /** Modular inversion - @param a The value to invert - @param b The modulus - @param c The destination (1/a mod b) - @return CRYPT_OK on success - */ - int (*invmod)(const void *a, const void *b, void *c); - -/* ---- reduction ---- */ - - /** setup Montgomery - @param a The modulus - @param b The destination for the reduction digit - @return CRYPT_OK on success - */ - int (*montgomery_setup)(const void *a, void **b); - - /** get normalization value - @param a The destination for the normalization value - @param b The modulus - @return CRYPT_OK on success - */ - int (*montgomery_normalization)(void *a, const void *b); - - /** reduce a number - @param a The number [and dest] to reduce - @param b The modulus - @param c The value "b" from montgomery_setup() - @return CRYPT_OK on success - */ - int (*montgomery_reduce)(void *a, const void *b, void *c); - - /** clean up (frees memory) - @param a The value "b" from montgomery_setup() - @return CRYPT_OK on success - */ - void (*montgomery_deinit)(void *a); - -/* ---- exponentiation ---- */ - - /** Modular exponentiation - @param a The base integer - @param b The power (can be negative) integer - @param c The modulus integer - @param d The destination - @return CRYPT_OK on success - */ - int (*exptmod)(const void *a, const void *b, const void *c, void *d); - - /** Primality testing - @param a The integer to test - @param b The number of Miller-Rabin tests that shall be executed - @param c The destination of the result (FP_YES if prime) - @return CRYPT_OK on success - */ - int (*isprime)(const void *a, int b, int *c); - -/* ---- (optional) ecc point math ---- */ - - /** ECC GF(p) point multiplication (from the NIST curves) - @param k The integer to multiply the point by - @param G The point to multiply - @param R The destination for kG - @param a ECC curve parameter a - @param modulus The modulus for the field - @param map Boolean indicated whether to map back to affine or not - (can be ignored if you work in affine only) - @return CRYPT_OK on success - */ - int (*ecc_ptmul)( const void *k, - const ecc_point *G, - ecc_point *R, - const void *a, - const void *modulus, - int map); - - /** ECC GF(p) point addition - @param P The first point - @param Q The second point - @param R The destination of P + Q - @param ma The curve parameter "a" in montgomery form - @param modulus The modulus - @param mp The "b" value from montgomery_setup() - @return CRYPT_OK on success - */ - int (*ecc_ptadd)(const ecc_point *P, - const ecc_point *Q, - ecc_point *R, - const void *ma, - const void *modulus, - void *mp); - - /** ECC GF(p) point double - @param P The first point - @param R The destination of 2P - @param ma The curve parameter "a" in montgomery form - @param modulus The modulus - @param mp The "b" value from montgomery_setup() - @return CRYPT_OK on success - */ - int (*ecc_ptdbl)(const ecc_point *P, - ecc_point *R, - const void *ma, - const void *modulus, - void *mp); - - /** ECC mapping from projective to affine, - currently uses (x,y,z) => (x/z^2, y/z^3, 1) - @param P The point to map - @param modulus The modulus - @param mp The "b" value from montgomery_setup() - @return CRYPT_OK on success - @remark The mapping can be different but keep in mind a - ecc_point only has three integers (x,y,z) so if - you use a different mapping you have to make it fit. - */ - int (*ecc_map)(ecc_point *P, const void *modulus, void *mp); - - /** Computes kA*A + kB*B = C using Shamir's Trick - @param A First point to multiply - @param kA What to multiple A by - @param B Second point to multiply - @param kB What to multiple B by - @param C [out] Destination point (can overlap with A or B) - @param ma The curve parameter "a" in montgomery form - @param modulus Modulus for curve - @return CRYPT_OK on success - */ - int (*ecc_mul2add)(const ecc_point *A, void *kA, - const ecc_point *B, void *kB, - ecc_point *C, - const void *ma, - const void *modulus); - -/* ---- (optional) rsa optimized math (for internal CRT) ---- */ - - /** RSA Key Generation - @param prng An active PRNG state - @param wprng The index of the PRNG desired - @param size The size of the key in octets - @param e The "e" value (public key). - e==65537 is a good choice - @param key [out] Destination of a newly created private key pair - @return CRYPT_OK if successful, upon error all allocated ram is freed - */ - int (*rsa_keygen)(prng_state *prng, - int wprng, - int size, - long e, - rsa_key *key); - - /** RSA exponentiation - @param in The octet array representing the base - @param inlen The length of the input - @param out The destination (to be stored in an octet array format) - @param outlen The length of the output buffer and the resulting size - (zero padded to the size of the modulus) - @param which PK_PUBLIC for public RSA and PK_PRIVATE for private RSA - @param key The RSA key to use - @return CRYPT_OK on success - */ - int (*rsa_me)(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, int which, - const rsa_key *key); - -/* ---- basic math continued ---- */ - - /** Modular addition - @param a The first source - @param b The second source - @param c The modulus - @param d The destination (a + b mod c) - @return CRYPT_OK on success - */ - int (*addmod)(const void *a, const void *b, const void *c, void *d); - - /** Modular substraction - @param a The first source - @param b The second source - @param c The modulus - @param d The destination (a - b mod c) - @return CRYPT_OK on success - */ - int (*submod)(const void *a, const void *b, const void *c, void *d); - -/* ---- misc stuff ---- */ - - /** Make a pseudo-random mpi - @param a The mpi to make random - @param size The desired length - @return CRYPT_OK on success - */ - int (*rand)(void *a, int size); -} ltc_math_descriptor; - -extern ltc_math_descriptor ltc_mp; - -int ltc_mp_init_multi(void **a, ...) LTC_NULL_TERMINATED; -void ltc_mp_deinit_multi(void *a, ...) LTC_NULL_TERMINATED; -void ltc_mp_cleanup_multi(void **a, ...) LTC_NULL_TERMINATED; - -#ifdef LTM_DESC -extern const ltc_math_descriptor ltm_desc; -#endif - -#ifdef TFM_DESC -extern const ltc_math_descriptor tfm_desc; -#endif - -#ifdef GMP_DESC -extern const ltc_math_descriptor gmp_desc; -#endif diff --git a/src/headers/tomcrypt_misc.h b/src/headers/tomcrypt_misc.h deleted file mode 100644 index be63f550..00000000 --- a/src/headers/tomcrypt_misc.h +++ /dev/null @@ -1,231 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* ---- LTC_BASE64 Routines ---- */ -#ifdef LTC_BASE64 -int base64_encode(const unsigned char *in, unsigned long inlen, - char *out, unsigned long *outlen); - -int base64_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int base64_strict_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int base64_sane_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -#endif - -#ifdef LTC_BASE64_URL -int base64url_encode(const unsigned char *in, unsigned long inlen, - char *out, unsigned long *outlen); -int base64url_strict_encode(const unsigned char *in, unsigned long inlen, - char *out, unsigned long *outlen); - -int base64url_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int base64url_strict_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int base64url_sane_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -#endif - -/* ---- BASE32 Routines ---- */ -#ifdef LTC_BASE32 -typedef enum { - BASE32_RFC4648 = 0, - BASE32_BASE32HEX = 1, - BASE32_ZBASE32 = 2, - BASE32_CROCKFORD = 3 -} base32_alphabet; -int base32_encode(const unsigned char *in, unsigned long inlen, - char *out, unsigned long *outlen, - base32_alphabet id); -int base32_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - base32_alphabet id); -#endif - -/* ---- BASE16 Routines ---- */ -#ifdef LTC_BASE16 -int base16_encode(const unsigned char *in, unsigned long inlen, - char *out, unsigned long *outlen, - unsigned int options); -int base16_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -#endif - -/* ---- Argon2 password hashing function (RFC 9106) ---- */ -#ifdef LTC_ARGON2 -typedef enum argon2_type { - ARGON2_D = 0, - ARGON2_I = 1, - ARGON2_ID = 2 -} argon2_type; - -int argon2_hash(const unsigned char *pwd, unsigned long pwdlen, - const unsigned char *salt, unsigned long saltlen, - const unsigned char *secret, unsigned long secretlen, - const unsigned char *ad, unsigned long adlen, - unsigned int t_cost, unsigned int m_cost, - unsigned int parallelism, - argon2_type type, - unsigned char *out, unsigned long outlen); -#endif /* LTC_ARGON2 */ - -/* ---- scrypt password-based KDF (RFC 7914) ---- */ -#ifdef LTC_SCRYPT -int scrypt_pbkdf(const unsigned char *password, unsigned long password_len, - const unsigned char *salt, unsigned long salt_len, - unsigned long N, unsigned long r, unsigned long p, - unsigned char *out, unsigned long outlen); -#endif /* LTC_SCRYPT */ - -#ifdef LTC_BCRYPT -int bcrypt_pbkdf_openbsd(const void *secret, unsigned long secret_len, - const unsigned char *salt, unsigned long salt_len, - unsigned int rounds, int hash_idx, - unsigned char *out, unsigned long *outlen); -#endif - -/* ===> LTC_HKDF -- RFC5869 HMAC-based Key Derivation Function <=== */ -#ifdef LTC_HKDF - -int hkdf_test(void); - -int hkdf_extract(int hash_idx, - const unsigned char *salt, unsigned long saltlen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); - -int hkdf_expand(int hash_idx, - const unsigned char *info, unsigned long infolen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long outlen); - -int hkdf(int hash_idx, - const unsigned char *salt, unsigned long saltlen, - const unsigned char *info, unsigned long infolen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long outlen); - -#endif /* LTC_HKDF */ - -/* ---- MEM routines ---- */ -int mem_neq(const void *a, const void *b, size_t len); -void zeromem(volatile void *out, size_t outlen); -void burn_stack(unsigned long len); - -const char *error_to_string(int err); - -extern const char *crypt_build_settings; - -/* ---- HMM ---- */ -int crypt_fsa(void *mp, ...) LTC_NULL_TERMINATED; - -/* ---- Dynamic language support ---- */ -int crypt_get_constant(const char* namein, int *valueout); -int crypt_list_all_constants(char *names_list, unsigned int *names_list_size); - -int crypt_get_size(const char* namein, unsigned int *sizeout); -int crypt_list_all_sizes(char *names_list, unsigned int *names_list_size); - -int crypt_mp_init(const char* mpi); - -#ifdef LTC_ADLER32 -typedef struct adler32_state_s -{ - unsigned short s[2]; -} adler32_state; - -void adler32_init(adler32_state *ctx); -void adler32_update(adler32_state *ctx, const unsigned char *input, unsigned long length); -void adler32_finish(const adler32_state *ctx, void *hash, unsigned long size); -int adler32_test(void); -#endif - -#ifdef LTC_CRC32 -typedef struct crc32_state_s -{ - ulong32 crc; -} crc32_state; - -void crc32_init(crc32_state *ctx); -void crc32_update(crc32_state *ctx, const unsigned char *input, unsigned long length); -void crc32_finish(const crc32_state *ctx, void *hash, unsigned long size); -int crc32_test(void); -#endif - - -#ifdef LTC_PADDING - -enum padding_type { - LTC_PAD_PKCS7 = 0x0000U, -#ifdef LTC_RNG_GET_BYTES - LTC_PAD_ISO_10126 = 0x1000U, -#endif - LTC_PAD_ANSI_X923 = 0x2000U, - LTC_PAD_SSH = 0x3000U, - /* The following padding modes don't contain the padding - * length as last byte of the padding. - */ - LTC_PAD_ONE_AND_ZERO = 0x8000U, - LTC_PAD_ZERO = 0x9000U, - LTC_PAD_ZERO_ALWAYS = 0xA000U, -}; - -int padding_pad(unsigned char *data, unsigned long length, unsigned long* padded_length, unsigned long mode); -int padding_depad(const unsigned char *data, unsigned long *length, unsigned long mode); -#endif /* LTC_PADDING */ - -#ifdef LTC_PEM -/* Buffer-based API */ -int pem_decode(const void *buf, unsigned long len, ltc_pka_key *k, const password_ctx *pw_ctx); -int pem_decode_pkcs(const void *buf, unsigned long len, ltc_pka_key *k, const password_ctx *pw_ctx); - -#ifdef LTC_SSH -/** - Callback function for each key in an `authorized_keys` file. - - This function takes ownership of the `k` parameter passed. - `k` must be free'd by calling `pka_key_destroy(&k)`. - - @param k Pointer to the PKA key. - @param comment Pointer to a string with the comment. - @param ctx The `ctx` pointer as passed to the read function. -*/ -typedef int (*ssh_authorized_key_cb)(ltc_pka_key *k, const char *comment, void *ctx); - -int pem_decode_openssh(const void *buf, unsigned long len, ltc_pka_key *k, const password_ctx *pw_ctx); -int ssh_read_authorized_keys(const void *buf, unsigned long len, ssh_authorized_key_cb cb, void *ctx); -#endif /* LTC_SSH */ - -/* FILE*-based API */ -#ifndef LTC_NO_FILE -int pem_decode_filehandle(FILE *f, ltc_pka_key *k, const password_ctx *pw_ctx); -int pem_decode_pkcs_filehandle(FILE *f, ltc_pka_key *k, const password_ctx *pw_ctx); -#ifdef LTC_SSH -int pem_decode_openssh_filehandle(FILE *f, ltc_pka_key *k, const password_ctx *pw_ctx); -int ssh_read_authorized_keys_filehandle(FILE *f, ssh_authorized_key_cb cb, void *ctx); -#endif /* LTC_SSH */ -#endif /* LTC_NO_FILE */ - -#endif /* LTC_PEM */ - -#ifdef LTC_SSH -typedef enum ssh_data_type_ { - LTC_SSHDATA_EOL, - LTC_SSHDATA_BYTE, - LTC_SSHDATA_BOOLEAN, - LTC_SSHDATA_UINT32, - LTC_SSHDATA_UINT64, - LTC_SSHDATA_STRING, - LTC_SSHDATA_MPINT, - LTC_SSHDATA_NAMELIST, -} ssh_data_type; - -/* VA list handy helpers with tuples of */ -int ssh_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...) LTC_NULL_TERMINATED; -int ssh_decode_sequence_multi(const unsigned char *in, unsigned long *inlen, ...) LTC_NULL_TERMINATED; -#endif /* LTC_SSH */ - -LTC_DEPRECATED(nothing. API will be internal) -int compare_testvector(const void* is, const unsigned long is_len, const void* should, const unsigned long should_len, const char* what, int which); diff --git a/src/headers/tomcrypt_pk.h b/src/headers/tomcrypt_pk.h deleted file mode 100644 index b2d1e8bf..00000000 --- a/src/headers/tomcrypt_pk.h +++ /dev/null @@ -1,1145 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -typedef struct password_ctx { - /** - Callback function that is called when a password is required. - - Please be aware that the library takes ownership of the pointer that is - returned to the library via `str`. - The data will be zeroed and `free()`'d as soon as it isn't required anymore. - c.f. the documentation of the `free()` function pointer for details. - - @param str Pointer to pointer where the password will be stored. - @param len Pointer to the length of the password. - @param userdata `userdata` that was passed in the `password_ctx` struct. - @return CRYPT_OK on success - */ - int (*callback)(void **str, unsigned long *len, void *userdata); - /** - Optional free function to free the allocated buffer. - - At the point where the value returned by `callback()` is not required - anymore the library will free it by either calling this `free()` function - or `XFREE()` in case this `free()` function is set to `NULL`. - - @param str Pointer to the buffer to be free'd. - */ - void (*free)(void *str); - /** Opaque `userdata` pointer passed when the callback is called */ - void *userdata; -} password_ctx; - -/* ---- NUMBER THEORY ---- */ - -enum ltc_pka_id { - LTC_PKA_UNDEF = 0, - LTC_PKA_RSA, - LTC_PKA_DSA, - LTC_PKA_EC, - LTC_PKA_X25519, - LTC_PKA_ED25519, - LTC_PKA_DH, - LTC_PKA_RSA_PSS, - LTC_PKA_X448, - LTC_PKA_ED448, - LTC_PKA_NUM -}; - -enum public_key_type { - /* Refers to the public key */ - PK_PUBLIC = 0x0000, - /* Refers to the private key */ - PK_PRIVATE = 0x0001, - - /* Indicates standard output formats that can be read e.g. by OpenSSL or GnuTLS */ - PK_STD = 0x1000, - /* Indicates compressed public ECC key */ - PK_COMPRESSED = 0x2000, - /* Indicates ECC key with the curve specified by OID */ - PK_CURVEOID = 0x4000 -}; - -int rand_prime(void *N, long len, prng_state *prng, int wprng); - -/* ---- RSA ---- */ -#ifdef LTC_MRSA - -typedef struct ltc_rsa_parameters { - /** saltLength for PSS */ - unsigned long saltlen; - /** Hash algorithm index for OAEP/PSS, -1 if unset */ - int hash_idx; - /** MGF1 hash algorithm index, -1 if unset */ - int mgf1_hash_idx; -} ltc_rsa_parameters; - -/** RSA key */ -typedef struct Rsa_key { - /** Type of key, PK_PRIVATE or PK_PUBLIC */ - int type; - /** The public exponent */ - void *e; - /** The private exponent */ - void *d; - /** The modulus */ - void *N; - /** The p factor of N */ - void *p; - /** The q factor of N */ - void *q; - /** The 1/q mod p CRT param */ - void *qP; - /** The d mod (p - 1) CRT param */ - void *dP; - /** The d mod (q - 1) CRT param */ - void *dQ; - /** Key is constrained to PSS/OAEP operations */ - int pss_oaep; - /** PSS/OAEP parameters of the RSA key */ - ltc_rsa_parameters params; -} rsa_key; - -int rsa_make_key(prng_state *prng, int wprng, int size, long e, rsa_key *key); -int rsa_make_key_ubin_e(prng_state *prng, int wprng, int size, - const unsigned char *e, unsigned long elen, rsa_key *key); -int rsa_get_size(const rsa_key *key); - -int rsa_exptmod(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, int which, - const rsa_key *key); - -void rsa_free(rsa_key *key); - -typedef struct ltc_rsa_op_parameters { - ltc_rsa_parameters params; - /* The padding type */ - int padding; - /* The PRNG to use. - * Only required for signing and encryption. */ - int wprng; - prng_state *prng; - /* Operation-specific parameters */ - union { - struct { - const unsigned char *lparam; - unsigned long lparamlen; - } crypt; - /* let's make space for potential future extensions */ - ulong64 dummy[8]; - } u; -} ltc_rsa_op_parameters; - -int rsa_encrypt_key_v2(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - ltc_rsa_op_parameters *params, - const rsa_key *key); - -int rsa_decrypt_key_v2(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - ltc_rsa_op_parameters *params, - int *stat, - const rsa_key *key); - -int rsa_sign_hash_v2(const unsigned char *hash, unsigned long hashlen, - unsigned char *sig, unsigned long *siglen, - ltc_rsa_op_parameters *params, - const rsa_key *key); - -int rsa_verify_hash_v2(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - ltc_rsa_op_parameters *params, - int *stat, - const rsa_key *key); - -/* These use PKCS #1 v2.0 padding */ -#define ltc_rsa_encrypt_key(in, inlen, out, outlen, lp, lplen, prng_, prng_idx, hash_idx_, key) \ - rsa_encrypt_key_v2(in, inlen, out, outlen, \ - &(ltc_rsa_op_parameters){ \ - .u.crypt.lparam = lp, \ - .u.crypt.lparamlen = lplen,\ - .prng = prng_, \ - .wprng = prng_idx, \ - .params.mgf1_hash_idx = hash_idx_, \ - .params.hash_idx = hash_idx_, \ - .padding = LTC_PKCS_1_OAEP, \ - }, key) - -#define ltc_rsa_decrypt_key(in, inlen, out, outlen, lp, lplen, hash_idx_, stat, key) \ - rsa_decrypt_key_v2(in, inlen, out, outlen, \ - &(ltc_rsa_op_parameters){ \ - .u.crypt.lparam = lp, \ - .u.crypt.lparamlen = lplen,\ - .params.mgf1_hash_idx = hash_idx_, \ - .params.hash_idx = hash_idx_, \ - .padding = LTC_PKCS_1_OAEP, \ - }, stat, key) - -#define ltc_rsa_sign_hash(hash, hashlen, sig, siglen, prng_, prng_idx, hash_idx_, saltlen_, key) \ - rsa_sign_hash_v2(hash, hashlen, sig, siglen, \ - &(ltc_rsa_op_parameters){ \ - .prng = prng_, \ - .wprng = prng_idx, \ - .params.mgf1_hash_idx = hash_idx_, \ - .params.hash_idx = hash_idx_, \ - .params.saltlen = saltlen_, \ - .padding = LTC_PKCS_1_PSS, \ - }, key) - -#define ltc_rsa_verify_hash(sig, siglen, hash, hashlen, hash_idx_, saltlen_, stat, key) \ - rsa_verify_hash_v2(sig, siglen, hash, hashlen, \ - &(ltc_rsa_op_parameters){ \ - .params.mgf1_hash_idx = hash_idx_, \ - .params.hash_idx = hash_idx_, \ - .params.saltlen = saltlen_, \ - .padding = LTC_PKCS_1_PSS, \ - }, stat, key) - -/* If you used those in v1, they're still working */ -#define rsa_encrypt_key ltc_rsa_encrypt_key -#define rsa_decrypt_key ltc_rsa_decrypt_key -#define rsa_sign_hash ltc_rsa_sign_hash -#define rsa_verify_hash ltc_rsa_verify_hash - -#ifndef LTC_NO_DEPRECATED_APIS -/* These can be switched between PKCS #1 v2.x and PKCS #1 v1.5 paddings */ -LTC_DEPRECATED(rsa_encrypt_key_v2) -int rsa_encrypt_key_ex(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - const unsigned char *lparam, unsigned long lparamlen, - prng_state *prng, int prng_idx, - int hash_idx, int padding, - const rsa_key *key); - -LTC_DEPRECATED(rsa_decrypt_key_v2) -int rsa_decrypt_key_ex(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - const unsigned char *lparam, unsigned long lparamlen, - int hash_idx, int padding, - int *stat, const rsa_key *key); - -LTC_DEPRECATED(rsa_sign_hash_v2) -int rsa_sign_hash_ex(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - int padding, - prng_state *prng, int prng_idx, - int hash_idx, unsigned long saltlen, - const rsa_key *key); - -LTC_DEPRECATED(rsa_verify_hash_v2) -int rsa_verify_hash_ex(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int padding, - int hash_idx, unsigned long saltlen, - int *stat, const rsa_key *key); -#endif /* LTC_NO_DEPRECATED_APIS */ - -#define rsa_sign_saltlen_get_max(hash_idx, key) \ - rsa_sign_saltlen_get_max_ex(LTC_PKCS_1_PSS, hash_idx, key) - -int rsa_sign_saltlen_get_max_ex(int padding, int hash_idx, const rsa_key *key); - -/* PKCS #1 import/export */ -int rsa_export(unsigned char *out, unsigned long *outlen, int type, const rsa_key *key); -int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key); - -int rsa_import_x509(const unsigned char *in, unsigned long inlen, rsa_key *key); -int rsa_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, rsa_key *key); - -int rsa_set_key(const unsigned char *N, unsigned long Nlen, - const unsigned char *e, unsigned long elen, - const unsigned char *d, unsigned long dlen, - rsa_key *key); -int rsa_set_factors(const unsigned char *p, unsigned long plen, - const unsigned char *q, unsigned long qlen, - rsa_key *key); -int rsa_set_crt_params(const unsigned char *dP, unsigned long dPlen, - const unsigned char *dQ, unsigned long dQlen, - const unsigned char *qP, unsigned long qPlen, - rsa_key *key); -#endif - -/* ---- DH Routines ---- */ -#ifdef LTC_MDH - -typedef struct { - int type; - void *x; - void *y; - void *base; - void *prime; -} dh_key; - -int dh_get_groupsize(const dh_key *key); - -int dh_export(unsigned char *out, unsigned long *outlen, int type, const dh_key *key); -int dh_import(const unsigned char *in, unsigned long inlen, dh_key *key); -int dh_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, dh_key *key); - -int dh_set_pg(const unsigned char *p, unsigned long plen, - const unsigned char *g, unsigned long glen, - dh_key *key); -int dh_set_pg_dhparam(const unsigned char *dhparam, unsigned long dhparamlen, dh_key *key); -int dh_set_pg_groupsize(int groupsize, dh_key *key); - -int dh_set_key(const unsigned char *in, unsigned long inlen, int type, dh_key *key); -int dh_generate_key(prng_state *prng, int wprng, dh_key *key); - -int dh_shared_secret(const dh_key *private_key, const dh_key *public_key, - unsigned char *out, unsigned long *outlen); - -void dh_free(dh_key *key); - -int dh_export_key(void *out, unsigned long *outlen, int type, const dh_key *key); -#endif /* LTC_MDH */ - - -/* ---- ECC Routines ---- */ -#ifdef LTC_MECC - -/* size of our temp buffers for exported keys */ -#define ECC_BUF_SIZE 256 - -/* max private key size */ -#define ECC_MAXSIZE 66 - -/** Structure defines a GF(p) curve */ -typedef struct { - /** The prime that defines the field the curve is in (encoded in hex) */ - const char *prime; - - /** The fields A param (hex) */ - const char *A; - - /** The fields B param (hex) */ - const char *B; - - /** The order of the curve (hex) */ - const char *order; - - /** The x co-ordinate of the base point on the curve (hex) */ - const char *Gx; - - /** The y co-ordinate of the base point on the curve (hex) */ - const char *Gy; - - /** The co-factor */ - unsigned long cofactor; - - /** The OID */ - const char *OID; -} ltc_ecc_curve; - -/** A point on a ECC curve, stored in Jacbobian format such that (x,y,z) => (x/z^2, y/z^3, 1) when interpretted as affine */ -typedef struct { - /** The x co-ordinate */ - void *x; - - /** The y co-ordinate */ - void *y; - - /** The z co-ordinate */ - void *z; -} ecc_point; - -/** ECC key's domain parameters */ -typedef struct { - /** The size of the curve in octets */ - int size; - /** The prime that defines the field the curve is in */ - void *prime; - /** The fields A param */ - void *A; - /** The fields B param */ - void *B; - /** The order of the curve */ - void *order; - /** The base point G on the curve */ - ecc_point base; - /** The co-factor */ - unsigned long cofactor; - /** The OID */ - unsigned long oid[16]; - unsigned long oidlen; -} ltc_ecc_dp; - -/** An ECC key */ -typedef struct { - /** Type of key, PK_PRIVATE or PK_PUBLIC */ - int type; - - /** Structure with domain parameters */ - ltc_ecc_dp dp; - - /** Structure with the public key */ - ecc_point pubkey; - - /** The private key */ - void *k; -} ecc_key; - -/** Formats of ECC signatures */ -typedef enum ecc_signature_type { - /* ASN.1 encoded, ANSI X9.62 */ - LTC_ECCSIG_ANSIX962 = 0x0, - /* raw R, S values */ - LTC_ECCSIG_RFC7518 = 0x1, - /* raw R, S, V (+27) values */ - LTC_ECCSIG_ETH27 = 0x2, - /* SSH + ECDSA signature format defined by RFC5656 */ - LTC_ECCSIG_RFC5656 = 0x3, -} ecc_signature_type; - -typedef struct ltc_ecc_sig_opts { - /** Signature type */ - ecc_signature_type type; - /** The PRNG to use. - * This must be set in case deterministic signature generation - * according to RFC6979 is not enabled. - */ - prng_state *prng; - int wprng; - - /** Enable generation of a recovery ID. - * This must be set in case one requires the recovery ID of a - * signature operation. - */ - unsigned char enable_recovery_id; - int recovery_id; - - /** The hash algorithm to use when creating a signature. - * Setting this will enable RFC6979 compatible signature generation. - */ - const char *rfc6979_hash_alg; -} ltc_ecc_sig_opts; - -/** the ECC params provided */ -extern const ltc_ecc_curve ltc_ecc_curves[]; - -void ecc_sizes(int *low, int *high); -int ecc_get_size(const ecc_key *key); - -int ecc_find_curve(const char* name_or_oid, const ltc_ecc_curve** cu); -int ecc_set_curve(const ltc_ecc_curve *cu, ecc_key *key); -int ecc_generate_key(prng_state *prng, int wprng, ecc_key *key); -int ecc_set_key(const unsigned char *in, unsigned long inlen, int type, ecc_key *key); -int ecc_get_key(unsigned char *out, unsigned long *outlen, int type, const ecc_key *key); -int ecc_get_oid_str(char *out, unsigned long *outlen, const ecc_key *key); - -int ecc_make_key(prng_state *prng, int wprng, int keysize, ecc_key *key); -int ecc_make_key_ex(prng_state *prng, int wprng, ecc_key *key, const ltc_ecc_curve *cu); -void ecc_free(ecc_key *key); - -#if defined(LTC_DER) -int ecc_export(unsigned char *out, unsigned long *outlen, int type, const ecc_key *key); -int ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key); -int ecc_import_ex(const unsigned char *in, unsigned long inlen, ecc_key *key, const ltc_ecc_curve *cu); - -int ecc_export_openssl(unsigned char *out, unsigned long *outlen, int type, const ecc_key *key); -int ecc_import_openssl(const unsigned char *in, unsigned long inlen, ecc_key *key); -int ecc_import_pkcs8(const unsigned char *in, unsigned long inlen, const password_ctx *pw_ctx, ecc_key *key); -int ecc_import_x509(const unsigned char *in, unsigned long inlen, ecc_key *key); -#endif - -int ecc_ansi_x963_export(const ecc_key *key, unsigned char *out, unsigned long *outlen); -int ecc_ansi_x963_import(const unsigned char *in, unsigned long inlen, ecc_key *key); -int ecc_ansi_x963_import_ex(const unsigned char *in, unsigned long inlen, ecc_key *key, const ltc_ecc_curve *cu); - -int ecc_shared_secret(const ecc_key *private_key, const ecc_key *public_key, - unsigned char *out, unsigned long *outlen); - -int ecc_sign_hash_v2(const unsigned char *in, - unsigned long inlen, - unsigned char *out, - unsigned long *outlen, - ltc_ecc_sig_opts *opts, - const ecc_key *key); - -int ecc_verify_hash_v2(const unsigned char *sig, - unsigned long siglen, - const unsigned char *hash, - unsigned long hashlen, - ltc_ecc_sig_opts *opts, - int *stat, - const ecc_key *key); - -#if defined(LTC_DER) -int ecc_encrypt_key(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int wprng, int hash, - const ecc_key *key); - -int ecc_decrypt_key(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - const ecc_key *key); -#endif /* LTC_DER */ - -#define ltc_ecc_sign_hash(i, il, o, ol, p, wp, k) \ - ecc_sign_hash_v2(i, il, o, ol, \ - &(ltc_ecc_sig_opts){ \ - .type = LTC_ECCSIG_ANSIX962, \ - .prng = p, \ - .wprng = wp, \ - }, k) -#define ltc_ecc_sign_hash_rfc7518(i, il, o, ol, p, wp, k) \ - ecc_sign_hash_v2(i, il, o, ol, \ - &(ltc_ecc_sig_opts){ \ - .type = LTC_ECCSIG_RFC7518, \ - .prng = p, \ - .wprng = wp, \ - }, k) - -#define ltc_ecc_verify_hash(s, sl, h, hl, st, k) \ - ecc_verify_hash_v2(s, sl, h, hl, \ - &(ltc_ecc_sig_opts){ \ - .type = LTC_ECCSIG_ANSIX962, \ - }, st, k) -#define ltc_ecc_verify_hash_rfc7518(s, sl, h, hl, st, k) \ - ecc_verify_hash_v2(s, sl, h, hl, \ - &(ltc_ecc_sig_opts){ \ - .type = LTC_ECCSIG_RFC7518, \ - }, st, k) - -#ifdef LTC_NO_DEPRECATED_APIS -#define ecc_sign_hash ltc_ecc_sign_hash -#define ecc_verify_hash ltc_ecc_verify_hash -#define ecc_sign_hash_rfc7518 ltc_ecc_sign_hash_rfc7518 -#define ecc_verify_hash_rfc7518 ltc_ecc_verify_hash_rfc7518 -#else /* LTC_NO_DEPRECATED_APIS */ -#if defined(LTC_DER) -LTC_DEPRECATED(ecc_sign_hash_v2) -int ecc_sign_hash(const unsigned char *in, - unsigned long inlen, - unsigned char *out, - unsigned long *outlen, - prng_state *prng, - int wprng, - const ecc_key *key); - -LTC_DEPRECATED(ecc_verify_hash_v2) -int ecc_verify_hash(const unsigned char *sig, - unsigned long siglen, - const unsigned char *hash, - unsigned long hashlen, - int *stat, - const ecc_key *key); -#endif /* LTC_DER */ - -LTC_DEPRECATED(ecc_sign_hash_v2) -int ecc_sign_hash_rfc7518(const unsigned char *in, - unsigned long inlen, - unsigned char *out, - unsigned long *outlen, - prng_state *prng, - int wprng, - const ecc_key *key); - -LTC_DEPRECATED(ecc_verify_hash_v2) -int ecc_verify_hash_rfc7518(const unsigned char *sig, - unsigned long siglen, - const unsigned char *hash, - unsigned long hashlen, - int *stat, - const ecc_key *key); -#endif /* LTC_NO_DEPRECATED_APIS */ - -int ecc_recover_key(const unsigned char *sig, - unsigned long siglen, - const unsigned char *hash, - unsigned long hashlen, - ltc_ecc_sig_opts *opts, - ecc_key *key); - -#endif - -#ifdef LTC_CURVE25519 - -typedef struct { - /** The key type, PK_PRIVATE or PK_PUBLIC */ - enum public_key_type type; - - /** The PK-algorithm, LTC_PKA_ED25519 or LTC_PKA_X25519 */ - enum ltc_pka_id pka; - - /** The private key */ - unsigned char priv[32]; - - /** The public key */ - unsigned char pub[32]; -} curve25519_key; - - -/** Ed25519 Signature API */ -int ed25519_make_key(prng_state *prng, int wprng, curve25519_key *key); - -int ed25519_export( unsigned char *out, unsigned long *outlen, - int which, - const curve25519_key *key); - -int ed25519_import(const unsigned char *in, unsigned long inlen, curve25519_key *key); -int ed25519_import_raw(const unsigned char *in, unsigned long inlen, int which, curve25519_key *key); -int ed25519_import_x509(const unsigned char *in, unsigned long inlen, curve25519_key *key); -int ed25519_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - curve25519_key *key); - -int ed25519_sign(const unsigned char *msg, unsigned long msglen, - unsigned char *sig, unsigned long *siglen, - const curve25519_key *private_key); -int ed25519ctx_sign(const unsigned char *msg, unsigned long msglen, - unsigned char *sig, unsigned long *siglen, - const unsigned char *ctx, unsigned long ctxlen, - const curve25519_key *private_key); -int ed25519ph_sign(const unsigned char *msg, unsigned long msglen, - unsigned char *sig, unsigned long *siglen, - const unsigned char *ctx, unsigned long ctxlen, - const curve25519_key *private_key); -int ed25519_verify(const unsigned char *msg, unsigned long msglen, - const unsigned char *sig, unsigned long siglen, - int *stat, - const curve25519_key *public_key); -int ed25519ctx_verify(const unsigned char *msg, unsigned long msglen, - const unsigned char *sig, unsigned long siglen, - const unsigned char *ctx, unsigned long ctxlen, - int *stat, - const curve25519_key *public_key); -int ed25519ph_verify(const unsigned char *msg, unsigned long msglen, - const unsigned char *sig, unsigned long siglen, - const unsigned char *ctx, unsigned long ctxlen, - int *stat, - const curve25519_key *public_key); - -/** X25519 Key-Exchange API */ -int x25519_make_key(prng_state *prng, int wprng, curve25519_key *key); - -int x25519_export( unsigned char *out, unsigned long *outlen, - int which, - const curve25519_key *key); - -int x25519_import(const unsigned char *in, unsigned long inlen, curve25519_key *key); -int x25519_import_raw(const unsigned char *in, unsigned long inlen, int which, curve25519_key *key); -int x25519_import_x509(const unsigned char *in, unsigned long inlen, curve25519_key *key); -int x25519_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - curve25519_key *key); - -int x25519_shared_secret(const curve25519_key *private_key, - const curve25519_key *public_key, - unsigned char *out, unsigned long *outlen); - -#endif /* LTC_CURVE25519 */ - - -#ifdef LTC_CURVE448 - -typedef struct { - /** Type of key, PK_PRIVATE or PK_PUBLIC */ - enum public_key_type type; - /** Algorithm: LTC_PKA_X448 or LTC_PKA_ED448 */ - enum ltc_pka_id pka; - /** The private key (56 bytes for X448, 57 bytes for Ed448) */ - unsigned char priv[57]; - /** The public key (56 bytes for X448, 57 bytes for Ed448) */ - unsigned char pub[57]; -} curve448_key; - -/** X448 Diffie-Hellman key exchange */ -int x448_make_key(prng_state *prng, int wprng, curve448_key *key); - -int x448_export( unsigned char *out, unsigned long *outlen, - int which, - const curve448_key *key); - -int x448_import(const unsigned char *in, unsigned long inlen, curve448_key *key); -int x448_import_raw(const unsigned char *in, unsigned long inlen, int which, curve448_key *key); -int x448_import_x509(const unsigned char *in, unsigned long inlen, curve448_key *key); -int x448_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - curve448_key *key); - -int x448_shared_secret(const curve448_key *private_key, - const curve448_key *public_key, - unsigned char *out, unsigned long *outlen); - -/** Ed448 Signature API */ -int ed448_make_key(prng_state *prng, int wprng, curve448_key *key); - -int ed448_export( unsigned char *out, unsigned long *outlen, - int which, - const curve448_key *key); - -int ed448_import(const unsigned char *in, unsigned long inlen, curve448_key *key); -int ed448_import_raw(const unsigned char *in, unsigned long inlen, int which, curve448_key *key); -int ed448_import_x509(const unsigned char *in, unsigned long inlen, curve448_key *key); -int ed448_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - curve448_key *key); - -int ed448_sign(const unsigned char *msg, unsigned long msglen, - unsigned char *sig, unsigned long *siglen, - const curve448_key *private_key); -int ed448ctx_sign(const unsigned char *msg, unsigned long msglen, - unsigned char *sig, unsigned long *siglen, - const unsigned char *ctx, unsigned long ctxlen, - const curve448_key *private_key); -int ed448ph_sign(const unsigned char *msg, unsigned long msglen, - unsigned char *sig, unsigned long *siglen, - const unsigned char *ctx, unsigned long ctxlen, - const curve448_key *private_key); -int ed448_verify(const unsigned char *msg, unsigned long msglen, - const unsigned char *sig, unsigned long siglen, - int *stat, - const curve448_key *public_key); -int ed448ctx_verify(const unsigned char *msg, unsigned long msglen, - const unsigned char *sig, unsigned long siglen, - const unsigned char *ctx, unsigned long ctxlen, - int *stat, - const curve448_key *public_key); -int ed448ph_verify(const unsigned char *msg, unsigned long msglen, - const unsigned char *sig, unsigned long siglen, - const unsigned char *ctx, unsigned long ctxlen, - int *stat, - const curve448_key *public_key); - -#endif /* LTC_CURVE448 */ - -#ifdef LTC_MDSA - -/* Max diff between group and modulus size in bytes (max case: L=8192bits, N=256bits) */ -#define LTC_MDSA_DELTA 992 - -/* Max DSA group size in bytes */ -#define LTC_MDSA_MAX_GROUP 64 - -/* Max DSA modulus size in bytes (the actual DSA size, max 8192 bits) */ -#define LTC_MDSA_MAX_MODULUS 1024 - -/** DSA key structure */ -typedef struct { - /** The key type, PK_PRIVATE or PK_PUBLIC */ - int type; - - /** The order of the sub-group used in octets */ - int qord; - - /** The generator */ - void *g; - - /** The prime used to generate the sub-group */ - void *q; - - /** The large prime that generats the field the contains the sub-group */ - void *p; - - /** The private key */ - void *x; - - /** The public key */ - void *y; -} dsa_key; - -int dsa_make_key(prng_state *prng, int wprng, int group_size, int modulus_size, dsa_key *key); - -int dsa_set_pqg(const unsigned char *p, unsigned long plen, - const unsigned char *q, unsigned long qlen, - const unsigned char *g, unsigned long glen, - dsa_key *key); -int dsa_set_pqg_dsaparam(const unsigned char *dsaparam, unsigned long dsaparamlen, dsa_key *key); -int dsa_generate_pqg(prng_state *prng, int wprng, int group_size, int modulus_size, dsa_key *key); - -int dsa_set_key(const unsigned char *in, unsigned long inlen, int type, dsa_key *key); -int dsa_generate_key(prng_state *prng, int wprng, dsa_key *key); - -void dsa_free(dsa_key *key); - -int dsa_sign_hash_raw(const unsigned char *in, unsigned long inlen, - void *r, void *s, - prng_state *prng, int wprng, const dsa_key *key); - -int dsa_sign_hash(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int wprng, const dsa_key *key); - -int dsa_verify_hash_raw( void *r, void *s, - const unsigned char *hash, unsigned long hashlen, - int *stat, const dsa_key *key); - -int dsa_verify_hash(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int *stat, const dsa_key *key); - -int dsa_encrypt_key(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int wprng, int hash, - const dsa_key *key); - -int dsa_decrypt_key(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - const dsa_key *key); - -int dsa_import(const unsigned char *in, unsigned long inlen, dsa_key *key); -int dsa_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - dsa_key *key); -int dsa_export(unsigned char *out, unsigned long *outlen, int type, const dsa_key *key); -int dsa_verify_key(const dsa_key *key, int *stat); -int dsa_shared_secret(void *private_key, void *base, - const dsa_key *public_key, - unsigned char *out, unsigned long *outlen); -#endif /* LTC_MDSA */ - -/* - * LibTomCrypt tagged-union for holding a Public Key - */ - -typedef struct { - union { -#ifdef LTC_CURVE25519 - curve25519_key x25519; - curve25519_key ed25519; -#endif -#ifdef LTC_CURVE448 - curve448_key x448; - curve448_key ed448; -#endif -#ifdef LTC_MDH - dh_key dh; -#endif -#ifdef LTC_MDSA - dsa_key dsa; -#endif -#ifdef LTC_MECC - ecc_key ecc; -#endif -#ifdef LTC_MRSA - rsa_key rsa; -#endif - char dummy; - } u; - enum ltc_pka_id id; -} ltc_pka_key; - -void pka_key_free(ltc_pka_key *key); -void pka_key_destroy(ltc_pka_key **key); - -#ifdef LTC_DER -/* DER handling */ - -typedef enum ltc_asn1_type_ { - /* 0 */ - LTC_ASN1_EOL, - LTC_ASN1_BOOLEAN, - LTC_ASN1_INTEGER, - LTC_ASN1_SHORT_INTEGER, - LTC_ASN1_BIT_STRING, - /* 5 */ - LTC_ASN1_OCTET_STRING, - LTC_ASN1_NULL, - LTC_ASN1_OBJECT_IDENTIFIER, - LTC_ASN1_IA5_STRING, - LTC_ASN1_PRINTABLE_STRING, - /* 10 */ - LTC_ASN1_UTF8_STRING, - LTC_ASN1_UTCTIME, - LTC_ASN1_CHOICE, - LTC_ASN1_SEQUENCE, - LTC_ASN1_SET, - /* 15 */ - LTC_ASN1_SETOF, - LTC_ASN1_RAW_BIT_STRING, - LTC_ASN1_TELETEX_STRING, - LTC_ASN1_GENERALIZEDTIME, - LTC_ASN1_CUSTOM_TYPE, -} ltc_asn1_type; - -typedef enum { - LTC_ASN1_CL_UNIVERSAL = 0x0, - LTC_ASN1_CL_APPLICATION = 0x1, - LTC_ASN1_CL_CONTEXT_SPECIFIC = 0x2, - LTC_ASN1_CL_PRIVATE = 0x3, -} ltc_asn1_class; - -typedef enum { - LTC_ASN1_PC_PRIMITIVE = 0x0, - LTC_ASN1_PC_CONSTRUCTED = 0x1, -} ltc_asn1_pc; - -/** A LTC ASN.1 list type */ -typedef struct ltc_asn1_list_ { - /** The LTC ASN.1 enumerated type identifier */ - ltc_asn1_type type; - /** The data to encode or place for decoding */ - void *data; - /** The size of the input or resulting output */ - unsigned long size; - /** The used flag - * 1. This is used by the CHOICE ASN.1 type to indicate which choice was made - * 2. This is used by the ASN.1 decoder to indicate if an element is used - * 3. This is used by the flexi-decoder to indicate the first byte of the identifier */ - int used; - /** Flag used to indicate optional items in ASN.1 sequences */ - int optional; - /** ASN.1 identifier */ - ltc_asn1_class klass; - ltc_asn1_pc pc; - ulong64 tag; - /** prev/next entry in the list */ - struct ltc_asn1_list_ *prev, *next, *child, *parent; -} ltc_asn1_list; - -#define LTC_SET_ASN1(list, index, Type, Data, Size) \ - do { \ - int LTC_TMPVAR(SA) = (index); \ - ltc_asn1_list *LTC_TMPVAR(SA_list) = (list); \ - LTC_TMPVAR(SA_list)[LTC_TMPVAR(SA)].type = (Type); \ - LTC_TMPVAR(SA_list)[LTC_TMPVAR(SA)].data = (void*)(Data); \ - LTC_TMPVAR(SA_list)[LTC_TMPVAR(SA)].size = (Size); \ - LTC_TMPVAR(SA_list)[LTC_TMPVAR(SA)].used = 0; \ - LTC_TMPVAR(SA_list)[LTC_TMPVAR(SA)].optional = 0; \ - LTC_TMPVAR(SA_list)[LTC_TMPVAR(SA)].klass = 0; \ - LTC_TMPVAR(SA_list)[LTC_TMPVAR(SA)].pc = 0; \ - LTC_TMPVAR(SA_list)[LTC_TMPVAR(SA)].tag = 0; \ - } while (0) - -#define LTC_SET_ASN1_IDENTIFIER(list, index, Class, Pc, Tag) \ - do { \ - int LTC_TMPVAR(SAI) = (index); \ - ltc_asn1_list *LTC_TMPVAR(SAI_list) = (list); \ - LTC_TMPVAR(SAI_list)[LTC_TMPVAR(SAI)].type = LTC_ASN1_CUSTOM_TYPE; \ - LTC_TMPVAR(SAI_list)[LTC_TMPVAR(SAI)].klass = (Class); \ - LTC_TMPVAR(SAI_list)[LTC_TMPVAR(SAI)].pc = (Pc); \ - LTC_TMPVAR(SAI_list)[LTC_TMPVAR(SAI)].tag = (Tag); \ - } while (0) - -#define LTC_SET_ASN1_CUSTOM_CONSTRUCTED(list, index, Class, Tag, Data) \ - do { \ - int LTC_TMPVAR(SACC) = (index); \ - LTC_SET_ASN1(list, LTC_TMPVAR(SACC), LTC_ASN1_CUSTOM_TYPE, Data, 1); \ - LTC_SET_ASN1_IDENTIFIER(list, LTC_TMPVAR(SACC), Class, LTC_ASN1_PC_CONSTRUCTED, Tag); \ - } while (0) - -#define LTC_SET_ASN1_CUSTOM_PRIMITIVE(list, index, Class, Tag, Type, Data, Size) \ - do { \ - int LTC_TMPVAR(SACP) = (index); \ - ltc_asn1_list *LTC_TMPVAR(SACP_list) = (list); \ - LTC_SET_ASN1(list, LTC_TMPVAR(SACP), LTC_ASN1_CUSTOM_TYPE, Data, Size); \ - LTC_SET_ASN1_IDENTIFIER(list, LTC_TMPVAR(SACP), Class, LTC_ASN1_PC_PRIMITIVE, Tag); \ - LTC_TMPVAR(SACP_list)[LTC_TMPVAR(SACP)].used = (int)(Type); \ - } while (0) - -extern const char* der_asn1_class_to_string_map[]; -extern const unsigned long der_asn1_class_to_string_map_sz; - -extern const char* der_asn1_pc_to_string_map[]; -extern const unsigned long der_asn1_pc_to_string_map_sz; - -extern const char* der_asn1_tag_to_string_map[]; -extern const unsigned long der_asn1_tag_to_string_map_sz; - -/* SEQUENCE */ -int der_encode_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, - unsigned char *out, unsigned long *outlen, int type_of); - -#define der_encode_sequence(list, inlen, out, outlen) der_encode_sequence_ex(list, inlen, out, outlen, LTC_ASN1_SEQUENCE) - -/** The supported bitmap for all the - * decoders with a `flags` argument. - */ -enum ltc_der_seq { - LTC_DER_SEQ_ZERO = 0x0u, - - /** Bit0 - [0]=Unordered (SET or SETOF) - * [1]=Ordered (SEQUENCE) */ - LTC_DER_SEQ_UNORDERED = LTC_DER_SEQ_ZERO, - LTC_DER_SEQ_ORDERED = 0x1u, - - /** Bit1 - [0]=Relaxed - * [1]=Strict */ - LTC_DER_SEQ_RELAXED = LTC_DER_SEQ_ZERO, - LTC_DER_SEQ_STRICT = 0x2u, - - /** Bit2 - [0]=Relaxed Length Check - * [1]=Strict Length Check */ - LTC_DER_SEQ_LEN_RELAXED = LTC_DER_SEQ_ZERO, - LTC_DER_SEQ_LEN_STRICT = 0x4u, - - /** Alternative naming */ - LTC_DER_SEQ_SET = LTC_DER_SEQ_UNORDERED, - LTC_DER_SEQ_SEQUENCE = LTC_DER_SEQ_ORDERED, - - LTC_DER_SEQ_ALL_STRICT = LTC_DER_SEQ_STRICT | LTC_DER_SEQ_LEN_STRICT, - -}; - -int der_decode_sequence_ex(const unsigned char *in, unsigned long inlen, - ltc_asn1_list *list, unsigned long outlen, unsigned int flags); - -#define der_decode_sequence(in, inlen, list, outlen) der_decode_sequence_ex(in, inlen, list, outlen, LTC_DER_SEQ_SEQUENCE | LTC_DER_SEQ_RELAXED) -#define der_decode_sequence_strict(in, inlen, list, outlen) der_decode_sequence_ex(in, inlen, list, outlen, LTC_DER_SEQ_SEQUENCE | LTC_DER_SEQ_STRICT) - -int der_length_sequence(const ltc_asn1_list *list, unsigned long inlen, - unsigned long *outlen); - - -/* Custom-types */ -int der_encode_custom_type(const ltc_asn1_list *root, - unsigned char *out, unsigned long *outlen); - -int der_decode_custom_type(const unsigned char *in, unsigned long inlen, - ltc_asn1_list *root); - -int der_length_custom_type(const ltc_asn1_list *root, - unsigned long *outlen, - unsigned long *payloadlen); - -/* SET */ -#define der_decode_set(in, inlen, list, outlen) der_decode_sequence_ex(in, inlen, list, outlen, LTC_DER_SEQ_SET) -#define der_length_set der_length_sequence -int der_encode_set(const ltc_asn1_list *list, unsigned long inlen, - unsigned char *out, unsigned long *outlen); - -int der_encode_setof(const ltc_asn1_list *list, unsigned long inlen, - unsigned char *out, unsigned long *outlen); - -/* VA list handy helpers with triplets of */ -int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...) LTC_NULL_TERMINATED; -int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...) LTC_NULL_TERMINATED; - -/* FLEXI DECODER handle unknown list decoder */ -int der_decode_sequence_flexi(const unsigned char *in, unsigned long *inlen, ltc_asn1_list **out); -#define der_free_sequence_flexi der_sequence_free -void der_sequence_free(ltc_asn1_list *in); -void der_sequence_shrink(ltc_asn1_list *in); - -/* BOOLEAN */ -int der_length_boolean(unsigned long *outlen); -int der_encode_boolean(int in, - unsigned char *out, unsigned long *outlen); -int der_decode_boolean(const unsigned char *in, unsigned long inlen, - int *out); -/* INTEGER */ -int der_encode_integer(void *num, unsigned char *out, unsigned long *outlen); -int der_decode_integer(const unsigned char *in, unsigned long inlen, void *num); -int der_length_integer(void *num, unsigned long *outlen); - -/* INTEGER -- handy for 0..2^32-1 values */ -int der_decode_short_integer(const unsigned char *in, unsigned long inlen, unsigned long *num); -int der_encode_short_integer(unsigned long num, unsigned char *out, unsigned long *outlen); -int der_length_short_integer(unsigned long num, unsigned long *outlen); - -/* BIT STRING */ -int der_encode_bit_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int der_decode_bit_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int der_encode_raw_bit_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int der_decode_raw_bit_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int der_length_bit_string(unsigned long nbits, unsigned long *outlen); - -/* OCTET STRING */ -int der_encode_octet_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int der_decode_octet_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int der_length_octet_string(unsigned long noctets, unsigned long *outlen); - -/* OBJECT IDENTIFIER */ -int der_encode_object_identifier(const unsigned long *words, unsigned long nwords, - unsigned char *out, unsigned long *outlen); -int der_decode_object_identifier(const unsigned char *in, unsigned long inlen, - unsigned long *words, unsigned long *outlen); -int der_length_object_identifier(const unsigned long *words, unsigned long nwords, unsigned long *outlen); - -/* IA5 STRING */ -int der_encode_ia5_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int der_decode_ia5_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int der_length_ia5_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen); - -/* TELETEX STRING */ -int der_decode_teletex_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int der_length_teletex_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen); - -/* PRINTABLE STRING */ -int der_encode_printable_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int der_decode_printable_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); -int der_length_printable_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen); - -/* UTF-8 */ -#if (defined(SIZE_MAX) || __STDC_VERSION__ >= 199901L || defined(WCHAR_MAX) || defined(__WCHAR_MAX__) || defined(_WCHAR_T) || defined(_WCHAR_T_DEFINED) || defined (__WCHAR_TYPE__)) && !defined(LTC_NO_WCHAR) - #if defined(__WCHAR_MAX__) - #define LTC_WCHAR_MAX __WCHAR_MAX__ - #else - #include - #define LTC_WCHAR_MAX WCHAR_MAX - #endif -/* please note that it might happen that LTC_WCHAR_MAX is undefined */ -#else - typedef ulong32 wchar_t; - #define LTC_WCHAR_MAX 0xFFFFFFFF -#endif - -int der_encode_utf8_string(const wchar_t *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); - -int der_decode_utf8_string(const unsigned char *in, unsigned long inlen, - wchar_t *out, unsigned long *outlen); -int der_length_utf8_string(const wchar_t *in, unsigned long noctets, unsigned long *outlen); - - -/* CHOICE */ -int der_decode_choice(const unsigned char *in, unsigned long *inlen, - ltc_asn1_list *list, unsigned long outlen); - -/* UTCTime */ -typedef struct { - unsigned YY, /* year */ - MM, /* month */ - DD, /* day */ - hh, /* hour */ - mm, /* minute */ - ss, /* second */ - off_dir, /* timezone offset direction 0 == +, 1 == - */ - off_hh, /* timezone offset hours */ - off_mm; /* timezone offset minutes */ -} ltc_utctime; - -int der_encode_utctime(const ltc_utctime *utctime, - unsigned char *out, unsigned long *outlen); - -int der_decode_utctime(const unsigned char *in, unsigned long *inlen, - ltc_utctime *out); - -int der_length_utctime(const ltc_utctime *utctime, unsigned long *outlen); - -/* GeneralizedTime */ -typedef struct { - unsigned YYYY, /* year */ - MM, /* month */ - DD, /* day */ - hh, /* hour */ - mm, /* minute */ - ss, /* second */ - fs, /* fractional seconds */ - off_dir, /* timezone offset direction 0 == +, 1 == - */ - off_hh, /* timezone offset hours */ - off_mm; /* timezone offset minutes */ -} ltc_generalizedtime; - -int der_encode_generalizedtime(const ltc_generalizedtime *gtime, - unsigned char *out, unsigned long *outlen); - -int der_decode_generalizedtime(const unsigned char *in, unsigned long *inlen, - ltc_generalizedtime *out); - -int der_length_generalizedtime(const ltc_generalizedtime *gtime, unsigned long *outlen); - -#endif diff --git a/src/headers/tomcrypt_pkcs.h b/src/headers/tomcrypt_pkcs.h deleted file mode 100644 index f3037f14..00000000 --- a/src/headers/tomcrypt_pkcs.h +++ /dev/null @@ -1,110 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* PKCS Header Info */ - -/* ===> PKCS #1 -- RSA Cryptography <=== */ -#ifdef LTC_PKCS_1 - -enum ltc_pkcs_1_v1_5_blocks -{ - LTC_PKCS_1_EMSA = 1, /* Block type 1 (PKCS #1 v1.5 signature padding) */ - LTC_PKCS_1_EME = 2 /* Block type 2 (PKCS #1 v1.5 encryption padding) */ -}; - -enum ltc_pkcs_1_paddings -{ - LTC_PKCS_1_V1_5 = 1, /* PKCS #1 v1.5 padding (\sa ltc_pkcs_1_v1_5_blocks) */ - LTC_PKCS_1_OAEP = 2, /* PKCS #1 v2.0 encryption padding */ - LTC_PKCS_1_PSS = 3, /* PKCS #1 v2.1 signature padding */ - LTC_PKCS_1_V1_5_NA1 = 4 /* PKCS #1 v1.5 padding - No ASN.1 (\sa ltc_pkcs_1_v1_5_blocks) */ -}; - -#ifndef LTC_NO_DEPRECATED_APIS -LTC_DEPRECATED(nothing. API will be internal) -int pkcs_1_mgf1( int hash_idx, - const unsigned char *seed, unsigned long seedlen, - unsigned char *mask, unsigned long masklen); - -LTC_DEPRECATED(nothing. API will be removed) -int pkcs_1_i2osp(void *n, unsigned long modulus_len, unsigned char *out); -LTC_DEPRECATED(nothing. API will be removed) -int pkcs_1_os2ip(void *n, unsigned char *in, unsigned long inlen); - -/* *** v1.5 padding */ -LTC_DEPRECATED(nothing. API will be internal) -int pkcs_1_v1_5_encode(const unsigned char *msg, - unsigned long msglen, - int block_type, - unsigned long modulus_bitlen, - prng_state *prng, - int prng_idx, - unsigned char *out, - unsigned long *outlen); - -LTC_DEPRECATED(nothing. API will be internal) -int pkcs_1_v1_5_decode(const unsigned char *msg, - unsigned long msglen, - int block_type, - unsigned long modulus_bitlen, - unsigned char *out, - unsigned long *outlen, - int *is_valid); - -/* *** v2.1 padding */ -LTC_DEPRECATED(nothing. API will be internal) -int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, - const unsigned char *lparam, unsigned long lparamlen, - unsigned long modulus_bitlen, prng_state *prng, - int prng_idx, int hash_idx, - unsigned char *out, unsigned long *outlen); - -LTC_DEPRECATED(nothing. API will be internal) -int pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, - const unsigned char *lparam, unsigned long lparamlen, - unsigned long modulus_bitlen, int hash_idx, - unsigned char *out, unsigned long *outlen, - int *res); - -LTC_DEPRECATED(nothing. API will be internal) -int pkcs_1_pss_encode(const unsigned char *msghash, unsigned long msghashlen, - unsigned long saltlen, prng_state *prng, - int prng_idx, int hash_idx, - unsigned long modulus_bitlen, - unsigned char *out, unsigned long *outlen); - -LTC_DEPRECATED(nothing. API will be internal) -int pkcs_1_pss_decode(const unsigned char *msghash, unsigned long msghashlen, - const unsigned char *sig, unsigned long siglen, - unsigned long saltlen, int hash_idx, - unsigned long modulus_bitlen, int *res); -#endif /* LTC_NO_DEPRECATED_APIS */ - -#endif /* LTC_PKCS_1 */ - -/* ===> PKCS #5 -- Password Based Cryptography <=== */ -#ifdef LTC_PKCS_5 - -/* Algorithm #1 (PBKDF1) */ -int pkcs_5_alg1(const unsigned char *password, unsigned long password_len, - const unsigned char *salt, - int iteration_count, int hash_idx, - unsigned char *out, unsigned long *outlen); - -/* Algorithm #1 (PBKDF1) - OpenSSL-compatible variant for arbitrarily-long keys. - Compatible with EVP_BytesToKey() */ -int pkcs_5_alg1_openssl(const unsigned char *password, - unsigned long password_len, - const unsigned char *salt, - int iteration_count, int hash_idx, - unsigned char *out, unsigned long *outlen); - -/* Algorithm #2 (PBKDF2) */ -int pkcs_5_alg2(const unsigned char *password, unsigned long password_len, - const unsigned char *salt, unsigned long salt_len, - int iteration_count, int hash_idx, - unsigned char *out, unsigned long *outlen); - -int pkcs_5_test (void); -#endif /* LTC_PKCS_5 */ - diff --git a/src/headers/tomcrypt_private.h b/src/headers/tomcrypt_private.h deleted file mode 100644 index bd31a3b0..00000000 --- a/src/headers/tomcrypt_private.h +++ /dev/null @@ -1,1096 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt.h" -#include - -#ifndef TOMCRYPT_PRIVATE_H_ -#define TOMCRYPT_PRIVATE_H_ - -/* - * Internal Macros - */ -/* Static assertion */ -#define LTC_STATIC_ASSERT(msg, cond) typedef char ltc_static_assert_##msg[(cond) ? 1 : -1]; - -#define LTC_PAD_MASK (0xF000U) - -/* only real 64bit, not ILP32 */ -#if defined(ENDIAN_64BITWORD) && !defined(ENDIAN_64BITWORD_ILP32) - #define CONSTPTR(n) CONST64(n) -#else - #define CONSTPTR(n) n ## uL -#endif - -LTC_STATIC_ASSERT(correct_CONSTPTR_size, sizeof(CONSTPTR(1)) == sizeof(void*)) - -/* Poor-man's `uintptr_t` since we can't use stdint.h - * c.f. https://github.com/DCIT/perl-CryptX/issues/95#issuecomment-1745280962 */ -typedef size_t ltc_uintptr; - -LTC_STATIC_ASSERT(correct_ltc_uintptr_size, sizeof(ltc_uintptr) == sizeof(void*)) - -/* Aligns a `unsigned char` buffer `buf` to `n` bytes and returns that aligned address. - * Make sure that the buffer that is passed is huge enough. - */ -#define LTC_ALIGN_BUF(buf, align) ((void*)((ltc_uintptr)&((unsigned char*)(buf))[(align) - 1] & (~(CONSTPTR(align) - CONSTPTR(1))))) - -#define LTC_OID_MAX_STRLEN 256 - -/* `NULL` as defined by the standard is not guaranteed to be of a pointer - * type. In order to make sure that in vararg API's a pointer type is used, - * define our own version and use that one internally. - */ -#ifndef LTC_NULL - #define LTC_NULL ((void *)0) -#endif - -#define LTC_ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) - -#if defined(LTC_FAST) -#if !defined(LTC_NO_INLINE) -/* The LTC_FAST helpers operate on byte buffers that are not guaranteed to be aligned for LTC_FAST_TYPE. - Use memcpy for loads/stores to avoid undefined behavior from unaligned or aliasing-unsafe typed-pointer dereferences. - On GCC/Clang prefer __builtin_memcpy: it is guaranteed to be inlined for constant sizes regardless of any - user override of XMEMCPY (e.g. embedded builds). Other compilers fall back to XMEMCPY. -*/ -static LTC_INLINE LTC_FAST_TYPE LTC_FAST_LOAD(const void *p) -{ - LTC_FAST_TYPE v; -#if defined(__GNUC__) - __builtin_memcpy(&v, p, sizeof(v)); -#else - XMEMCPY(&v, p, sizeof(v)); -#endif - return v; -} - -static LTC_INLINE void LTC_FAST_STORE(void *p, LTC_FAST_TYPE v) -{ -#if defined(__GNUC__) - __builtin_memcpy(p, &v, sizeof(v)); -#else - XMEMCPY(p, &v, sizeof(v)); -#endif -} - -static LTC_INLINE void LTC_FAST_STOREP(void *dst, void *src) -{ -#if defined(__GNUC__) - __builtin_memcpy(dst, src, sizeof(LTC_FAST_TYPE)); -#else - XMEMCPY(dst, src, sizeof(LTC_FAST_TYPE)); -#endif -} - -static LTC_INLINE void LTC_FAST_XOR2(void *dst, const void *src) -{ - LTC_FAST_STORE(dst, LTC_FAST_LOAD(dst) ^ LTC_FAST_LOAD(src)); -} - -static LTC_INLINE void LTC_FAST_XOR3(void *dst, const void *src1, const void *src2) -{ - LTC_FAST_STORE(dst, LTC_FAST_LOAD(src1) ^ LTC_FAST_LOAD(src2)); -} - -static LTC_INLINE void LTC_FAST_MASK(void *dst, const void *src, LTC_FAST_TYPE mask) -{ - LTC_FAST_STORE(dst, LTC_FAST_LOAD(src) & mask); -} -#else -#define LTC_FAST_LOAD(src) \ - ({ \ - LTC_FAST_TYPE LTC_TMPVAR(fast_tmp); \ - XMEMCPY(<C_TMPVAR(fast_tmp), (src), sizeof(LTC_FAST_TYPE)); \ - LTC_TMPVAR(fast_tmp); \ - }) -#define LTC_FAST_STORE(dst, v) \ - do { \ - XMEMCPY((dst), &(v), sizeof(v)); \ - } while (0) -#define LTC_FAST_STOREP(dst, src) \ - do { \ - XMEMCPY((dst), (src), sizeof(LTC_FAST_TYPE)); \ - } while (0) -#define LTC_FAST_XOR3(dst, src1, src2) \ - do { \ - LTC_FAST_TYPE LTC_TMPVAR(fast_src1), LTC_TMPVAR(fast_src2), LTC_TMPVAR(fast_dst); \ - XMEMCPY(<C_TMPVAR(fast_src1), (src1), sizeof(LTC_FAST_TYPE)); \ - XMEMCPY(<C_TMPVAR(fast_src2), (src2), sizeof(LTC_FAST_TYPE)); \ - LTC_TMPVAR(fast_dst) = LTC_TMPVAR(fast_src1) ^ LTC_TMPVAR(fast_src2); \ - XMEMCPY((dst), <C_TMPVAR(fast_dst), sizeof(LTC_FAST_TYPE)); \ - } while (0) -#define LTC_FAST_XOR2(dst, src) LTC_FAST_XOR3((dst), (dst), (src)) -#define LTC_FAST_MASK(dst, src, mask) \ - do { \ - LTC_FAST_TYPE LTC_TMPVAR(fast_src), LTC_TMPVAR(fast_dst); \ - XMEMCPY(<C_TMPVAR(fast_src), (src), sizeof(LTC_FAST_TYPE)); \ - LTC_TMPVAR(fast_dst) = LTC_TMPVAR(fast_src) & (mask); \ - XMEMCPY((dst), <C_TMPVAR(fast_dst), sizeof(LTC_FAST_TYPE)); \ - } while (0) -#endif /* if !defined(LTC_NO_INLINE) */ -#endif /* #if defined(LTC_FAST) */ - -/* - * Internal Enums - */ - -enum ltc_oid_id { - LTC_OID_UNDEF, - LTC_OID_RSA, - LTC_OID_DSA, - LTC_OID_EC, - LTC_OID_EC_PRIMEF, - LTC_OID_X25519, - LTC_OID_ED25519, - LTC_OID_X448, - LTC_OID_ED448, - LTC_OID_DH, - LTC_OID_RSA_OAEP, - LTC_OID_RSA_MGF1, - LTC_OID_RSA_PSS, - LTC_OID_NUM -}; - -/* - * Internal Types - */ - -typedef struct { - int size; - const char *name, *base, *prime; -} ltc_dh_set_type; - - -struct password { - /* usually a `char*` but could also contain binary data - * so use a `void*` + length to be on the safe side. - */ - void *pw; - unsigned long l; -}; - -typedef int (*fn_kdf_t)(const struct password *pwd, - const unsigned char *salt, unsigned long salt_len, - int iteration_count, int hash_idx, - unsigned char *out, unsigned long *outlen); - -#if defined(LTC_PBES) -typedef struct { - /* KDF */ - fn_kdf_t kdf; - /* Hash or HMAC */ - const char* h; - /* cipher */ - const char* c; - unsigned long keylen; - /* not used for pbkdf2 */ - unsigned long blocklen; -} pbes_properties; - -typedef struct -{ - pbes_properties type; - struct password pw; - ltc_asn1_list *enc_data; - ltc_asn1_list *salt; - ltc_asn1_list *iv; - unsigned long iterations; - /* only used for RC2 */ - unsigned long key_bits; -} pbes_arg; - -typedef struct { - const pbes_properties *data; - const char *oid; -} oid_to_pbes; -#endif - -/* - * Internal functions - */ - - -/* tomcrypt_cipher.h */ - -int ecb_encrypt_block(const unsigned char *pt, unsigned char *ct, const symmetric_ECB *ecb); -int ecb_decrypt_block(const unsigned char *ct, unsigned char *pt, const symmetric_ECB *ecb); - - -void blowfish_enc(ulong32 *data, unsigned long blocks, const symmetric_key *skey); -int blowfish_expand(const unsigned char *key, int keylen, - const unsigned char *data, int datalen, - symmetric_key *skey); -int blowfish_setup_with_data(const unsigned char *key, int keylen, - const unsigned char *data, int datalen, - symmetric_key *skey); - -/* tomcrypt_hash.h */ - -/* a simple macro for making hash "process" functions */ -#define HASH_PROCESS(func_name, compress_name, state_var, block_size) \ -int func_name (hash_state * md, const unsigned char *in, unsigned long inlen) \ -{ \ - unsigned long n; \ - int err; \ - LTC_ARGCHK(md != NULL); \ - LTC_ARGCHK(in != NULL); \ - if (md-> state_var .curlen > sizeof(md-> state_var .buf)) { \ - return CRYPT_INVALID_ARG; \ - } \ - if (((md-> state_var .length + inlen * 8) < md-> state_var .length) \ - || ((inlen * 8) < inlen)) { \ - return CRYPT_HASH_OVERFLOW; \ - } \ - while (inlen > 0) { \ - if (md-> state_var .curlen == 0 && inlen >= block_size) { \ - if ((err = compress_name (md, in)) != CRYPT_OK) { \ - return err; \ - } \ - md-> state_var .length += block_size * 8; \ - in += block_size; \ - inlen -= block_size; \ - } else { \ - n = MIN(inlen, (block_size - md-> state_var .curlen)); \ - XMEMCPY(md-> state_var .buf + md-> state_var.curlen, in, (size_t)n); \ - md-> state_var .curlen += n; \ - in += n; \ - inlen -= n; \ - if (md-> state_var .curlen == block_size) { \ - if ((err = compress_name (md, md-> state_var .buf)) != CRYPT_OK) { \ - return err; \ - } \ - md-> state_var .length += 8*block_size; \ - md-> state_var .curlen = 0; \ - } \ - } \ - } \ - return CRYPT_OK; \ -} - - -#define LTC_SHA_TARGET LTC_ATTRIBUTE((__target__("sse2,ssse3,sse4.1,sha"))) -#define LTC_SHA512_TARGET LTC_ATTRIBUTE((__target__("avx2,sha512"))) - -#ifdef LTC_SHA1 -int sha1_test_desc(const struct ltc_hash_descriptor *desc, const char *name); -#endif -#ifdef LTC_SHA224 -int sha224_test_desc(const struct ltc_hash_descriptor *desc, const char *name); -#endif -#ifdef LTC_SHA256 -int sha256_test_desc(const struct ltc_hash_descriptor *desc, const char *name); -#endif -#ifdef LTC_SHA384 -int sha384_test_desc(const struct ltc_hash_descriptor *desc, const char *name); -#endif -#ifdef LTC_SHA512 -int sha512_test_desc(const struct ltc_hash_descriptor *desc, const char *name); -#endif -#ifdef LTC_SHA512_224 -int sha512_224_test_desc(const struct ltc_hash_descriptor *desc, const char *name); -#endif -#ifdef LTC_SHA512_256 -int sha512_256_test_desc(const struct ltc_hash_descriptor *desc, const char *name); -#endif - -#ifdef LTC_KMAC -int sha3_shake_done_ex(hash_state *md, unsigned char *out, unsigned long outlen, unsigned char domain); -#endif - -/* tomcrypt_mac.h */ - -int ocb3_int_ntz(unsigned long x); -void ocb3_int_xor_blocks(unsigned char *out, const unsigned char *block_a, const unsigned char *block_b, unsigned long block_len); - -#ifdef LTC_OMAC -int omac_vprocess(omac_state *omac, const unsigned char *in, unsigned long inlen, va_list args); -#endif -/* tomcrypt_math.h */ - -#if !defined(DESC_DEF_ONLY) - -#define LTC_MP_DIGIT_BIT ltc_mp.bits_per_digit - -/* some handy macros */ -#define ltc_mp_init(a) ltc_mp.init(a) -#define ltc_mp_clear(a) ltc_mp.deinit(a) -#define ltc_mp_init_copy(a, b) ltc_mp.init_copy(a, b) - -#define ltc_mp_neg(a, b) ltc_mp.neg(a, b) -#define ltc_mp_copy(a, b) ltc_mp.copy(a, b) - -#define ltc_mp_set(a, b) ltc_mp.set_int(a, b) -#define ltc_mp_set_int(a, b) ltc_mp.set_int(a, b) -#define ltc_mp_get_int(a) ltc_mp.get_int(a) -#define ltc_mp_get_digit(a, n) ltc_mp.get_digit(a, n) -#define ltc_mp_get_digit_count(a) ltc_mp.get_digit_count(a) -#define ltc_mp_cmp(a, b) ltc_mp.compare(a, b) -#define ltc_mp_cmp_d(a, b) ltc_mp.compare_d(a, b) -#define ltc_mp_count_bits(a) ltc_mp.count_bits(a) -#define ltc_mp_cnt_lsb(a) ltc_mp.count_lsb_bits(a) -#define ltc_mp_2expt(a, b) ltc_mp.twoexpt(a, b) - -#define ltc_mp_read_radix(a, b, c) ltc_mp.read_radix(a, b, c) -#define ltc_mp_toradix(a, b, c) ltc_mp.write_radix(a, b, c) -#define ltc_mp_unsigned_bin_size(a) ltc_mp.unsigned_size(a) -#define ltc_mp_to_unsigned_bin(a, b) ltc_mp.unsigned_write(a, b) -#define ltc_mp_read_unsigned_bin(a, b, c) ltc_mp.unsigned_read(a, b, c) - -#define ltc_mp_add(a, b, c) ltc_mp.add(a, b, c) -#define ltc_mp_add_d(a, b, c) ltc_mp.addi(a, b, c) -#define ltc_mp_sub(a, b, c) ltc_mp.sub(a, b, c) -#define ltc_mp_sub_d(a, b, c) ltc_mp.subi(a, b, c) -#define ltc_mp_mul(a, b, c) ltc_mp.mul(a, b, c) -#define ltc_mp_mul_d(a, b, c) ltc_mp.muli(a, b, c) -#define ltc_mp_sqr(a, b) ltc_mp.sqr(a, b) -#define ltc_mp_sqrtmod_prime(a, b, c) ltc_mp.sqrtmod_prime(a, b, c) -#define ltc_mp_div(a, b, c, d) ltc_mp.mpdiv(a, b, c, d) -#define ltc_mp_div_2(a, b) ltc_mp.div_2(a, b) -#define ltc_mp_mod(a, b, c) ltc_mp.mpdiv(a, b, NULL, c) -#define ltc_mp_mod_d(a, b, c) ltc_mp.modi(a, b, c) -#define ltc_mp_gcd(a, b, c) ltc_mp.gcd(a, b, c) -#define ltc_mp_lcm(a, b, c) ltc_mp.lcm(a, b, c) - -#define ltc_mp_addmod(a, b, c, d) ltc_mp.addmod(a, b, c, d) -#define ltc_mp_submod(a, b, c, d) ltc_mp.submod(a, b, c, d) -#define ltc_mp_mulmod(a, b, c, d) ltc_mp.mulmod(a, b, c, d) -#define ltc_mp_sqrmod(a, b, c) ltc_mp.sqrmod(a, b, c) -#define ltc_mp_invmod(a, b, c) ltc_mp.invmod(a, b, c) - -#define ltc_mp_montgomery_setup(a, b) ltc_mp.montgomery_setup(a, b) -#define ltc_mp_montgomery_normalization(a, b) ltc_mp.montgomery_normalization(a, b) -#define ltc_mp_montgomery_reduce(a, b, c) ltc_mp.montgomery_reduce(a, b, c) -#define ltc_mp_montgomery_free(a) ltc_mp.montgomery_deinit(a) - -#define ltc_mp_exptmod(a,b,c,d) ltc_mp.exptmod(a,b,c,d) -#define ltc_mp_prime_is_prime(a, b, c) ltc_mp.isprime(a, b, c) - -#define ltc_mp_iszero(a) (ltc_mp_cmp_d(a, 0) == LTC_MP_EQ ? LTC_MP_YES : LTC_MP_NO) -#define ltc_mp_isodd(a) (ltc_mp_get_digit_count(a) > 0 ? (ltc_mp_get_digit(a, 0) & 1 ? LTC_MP_YES : LTC_MP_NO) : LTC_MP_NO) -#define ltc_mp_exch(a, b) do { void *ABC__tmp = a; a = b; b = ABC__tmp; } while(0) - -#define ltc_mp_tohex(a, b) ltc_mp_toradix(a, b, 16) - -#define ltc_mp_rand(a, b) ltc_mp.rand(a, b) - -#endif - - -/* tomcrypt_misc.h */ - -typedef enum { - /** Use `\r\n` as line separator */ - BASE64_PEM_CRLF = 1, - /** Create output with 72 chars line length */ - BASE64_PEM_SSH = 2, -} base64_pem_flags; - -int base64_encode_pem(const unsigned char *in, unsigned long inlen, - char *out, unsigned long *outlen, - unsigned int flags); - -/* PEM related */ - -#ifdef LTC_PEM -enum cipher_mode { - cm_modes = 0x00ff, - cm_flags = 0xff00, - /* Flags */ - cm_openssh = 0x0100, - cm_1bit = 0x0200, - cm_8bit = 0x0400, - /* Modes */ - cm_none = 0x0000, - cm_cbc = 0x0001, - cm_cfb = 0x0002, - cm_ctr = 0x0003, - cm_ofb = 0x0004, - cm_stream = 0x0005, - cm_gcm = 0x0006, - cm_cfb1 = cm_cfb | cm_1bit, - cm_cfb8 = cm_cfb | cm_8bit, - cm_stream_openssh = cm_stream | cm_openssh, -}; - -struct blockcipher_info { - const char *name; - const char *algo; - unsigned long keylen; - enum cipher_mode mode; - /* should use `MAXBLOCKSIZE` here, but all supported - * blockciphers require max 16 bytes IV */ - char iv[16 * 2 + 1]; -}; - -struct str { - char *p; - unsigned long len; -}; - -#define SET_STR(n, s) n.p = s, n.len = XSTRLEN(s) -#define SET_CSTR(n, s) n.p = (char*)s, n.len = (sizeof s) - 1 -#define COPY_STR(n, s, l) do { XMEMCPY(n.p, s, l); n.len = l; } while(0) -#define RESET_STR(n) do { n.p = NULL; n.len = 0; } while(0) - -enum more_headers { - no, - yes, - maybe -}; - -enum pem_flags { - pf_encrypted = 0x01u, - pf_pkcs8 = 0x02u, - pf_public = 0x04u, - pf_x509 = 0x08u, - pf_encrypted_pkcs8 = pf_encrypted | pf_pkcs8, -}; - -struct pem_header_id { - struct str start, end; - enum more_headers has_more_headers; - enum pem_flags flags; - enum ltc_pka_id pka; - int (*decrypt)(void *, unsigned long *, void *); -}; - -struct pem_headers { - const struct pem_header_id *id; - int encrypted; - struct blockcipher_info info; - struct password *pw; -}; - -struct bufp { - /* `end` points to one byte after the last - * element of the allocated buffer - */ - char *start, *work, *end; -}; - -#define SET_BUFP(n, d, l) n.start = (char*)d, n.work = (char*)d, n.end = (char*)d + l -#define UPDATE_BUFP(n, d, w, l) n.start = (char*)d, n.work = (char*)d + w, n.end = (char*)d + l - -struct get_char; -struct get_char_api { - int (*get)(struct get_char*); -}; - -struct get_char { - struct get_char_api api; - union { -#ifndef LTC_NO_FILE - struct { - FILE *f; - } f; -#endif /* LTC_NO_FILE */ - struct bufp buf; - } data; - struct str unget_buf; - char unget_buf_[LTC_PEM_DECODE_BUFSZ]; - int prev_get; - unsigned long total_read; -}; - -#define pem_get_char_init(b, l) { \ - .api = get_char_buffer_api, \ - SET_BUFP(.data.buf, (b), (l)), \ - .total_read = 0, \ -} - -#define pem_get_char_init_filehandle(fi) { \ - .api = get_char_filehandle_api, \ - .data.f.f = (fi), \ - .total_read = 0, \ -} -#endif - -/* others */ - -void copy_or_zeromem(const unsigned char* src, unsigned char* dest, unsigned long len, int coz); -void password_free(struct password *pw, const struct password_ctx *ctx); - -/* Case-insensitive ASCII compare that ignores ' ', '-' and '_'. Returns 1 on match, 0 otherwise. */ -int ltc_algname_match(const char *left, const char *right); - -int ltc_compare_testvector(const void* is, const unsigned long is_len, const void* should, const unsigned long should_len, const char* what, int which); -int ltc_do_compare_testvector(const void* is, const unsigned long is_len, const void* should, const unsigned long should_len, const char* what, int which); - -#define LTC_COMPARE_TESTVECTOR(i, il, s, sl, wa, wi) \ - do { \ - int LTC_TMPVAR(ret) = ltc_do_compare_testvector((i), (il), (s), (sl), (wa), (wi)); \ - if (LTC_TMPVAR(ret) != CRYPT_OK) { \ - return LTC_TMPVAR(ret); \ - } \ - } while(0) - -#if defined(LTC_PBES) -int pbes_decrypt(const pbes_arg *arg, unsigned char *dec_data, unsigned long *dec_size); - -int pbes1_extract(const ltc_asn1_list *s, pbes_arg *res); -int pbes2_extract(const ltc_asn1_list *s, pbes_arg *res); -#endif - -#ifdef LTC_PEM -extern const struct pem_header_id pem_std_headers[]; -extern const unsigned long pem_std_headers_num; -extern const struct str pem_proc_type_encrypted; -#ifdef LTC_SSH -extern const struct str pem_ssh_comment; -#endif -extern const struct str pem_dek_info_start; -extern const struct blockcipher_info pem_dek_infos[]; -extern const unsigned long pem_dek_infos_num; -#ifdef LTC_PEM_SSH -extern const struct blockcipher_info ssh_ciphers[]; -extern const unsigned long ssh_ciphers_num; -#endif - -int pem_decrypt(unsigned char *data, unsigned long *datalen, - unsigned char *key, unsigned long keylen, - unsigned char *iv, unsigned long ivlen, - unsigned char *tag, unsigned long taglen, - const struct blockcipher_info *info, - enum padding_type padding); -#ifndef LTC_NO_FILE -extern const struct get_char_api get_char_filehandle_api; -#endif /* LTC_NO_FILE */ -extern const struct get_char_api get_char_buffer_api; -int pem_read(void **dest, unsigned long *len, struct pem_headers *hdr, struct get_char *g); -#endif - -/* tomcrypt_pk.h */ - -int rand_bn_bits(void *N, int bits, prng_state *prng, int wprng); -int rand_bn_upto(void *N, void *limit, prng_state *prng, int wprng); - -int pk_get_oid(enum ltc_oid_id id, const char **st); -int pk_get_pka_id(enum ltc_oid_id id, enum ltc_pka_id *pka); -int pk_get_oid_id(enum ltc_pka_id pka, enum ltc_oid_id *oid); -#ifdef LTC_DER -int pk_get_oid_from_asn1(const ltc_asn1_list *oid, enum ltc_oid_id *id); -#endif -int pk_oid_str_to_num(const char *OID, unsigned long *oid, unsigned long *oidlen); -int pk_oid_num_to_str(const unsigned long *oid, unsigned long oidlen, char *OID, unsigned long *outlen); - -int pk_oid_cmp_with_ulong(const char *o1, const unsigned long *o2, unsigned long o2size); - -/* ---- RSA Routines ---- */ -#ifdef LTC_MRSA -/* Receiving side, i.e. Decrypt or Verify */ -#define LTC_RSA_OP_RECV 0x00u -/* Sending side, i.e. Encrypt or Sign */ -#define LTC_RSA_OP_SEND 0x01u -/* En- or Decrypt */ -#define LTC_RSA_OP_CRYPT 0x00u -/* Sign or Verify */ -#define LTC_RSA_OP_SIGN 0x02u -/* All combinations of the above - * but only the PKCS#1 de-/encoding part */ -#define LTC_RSA_OP_PKCS1 0x04u - -typedef enum ltc_rsa_op { - LTC_RSA_DECRYPT = LTC_RSA_OP_CRYPT | LTC_RSA_OP_RECV, - LTC_RSA_ENCRYPT = LTC_RSA_OP_CRYPT | LTC_RSA_OP_SEND, - LTC_RSA_VERIFY = LTC_RSA_OP_SIGN | LTC_RSA_OP_RECV, - LTC_RSA_SIGN = LTC_RSA_OP_SIGN | LTC_RSA_OP_SEND, - LTC_PKCS1_ENCRYPT = LTC_RSA_OP_PKCS1 | LTC_RSA_ENCRYPT, - LTC_PKCS1_DECRYPT = LTC_RSA_OP_PKCS1 | LTC_RSA_DECRYPT, - LTC_PKCS1_SIGN = LTC_RSA_OP_PKCS1 | LTC_RSA_SIGN, - LTC_PKCS1_VERIFY = LTC_RSA_OP_PKCS1 | LTC_RSA_VERIFY, -} ltc_rsa_op; - -typedef struct ltc_rsa_op_checked { - const rsa_key *key; - ltc_rsa_op_parameters *params; - int hash_alg, mgf1_hash_alg; -} ltc_rsa_op_checked; - -#define ltc_rsa_op_checked_init(k, p) { \ - .key = k, \ - .params = p, \ - .hash_alg = -1, \ - .mgf1_hash_alg = -1, \ -} - -#define ltc_pkcs1_op_checked_init(p) ltc_rsa_op_checked_init(NULL, p) - -int rsa_init(rsa_key *key); -void rsa_shrink_key(rsa_key *key); -int rsa_args_to_op_params(const unsigned char *lparam, unsigned long lparamlen, - prng_state *prng, int prng_idx, int hash_idx, - int padding, unsigned long saltlen, - ltc_rsa_op_parameters *params); -int rsa_key_valid_op(ltc_rsa_op op, ltc_rsa_op_checked *params); -int rsa_params_equal(const ltc_rsa_parameters *a, const ltc_rsa_parameters *b); -int rsa_make_key_bn_e(prng_state *prng, int wprng, int size, void *e, - rsa_key *key); /* used by op-tee */ -int rsa_import_pkcs1(const unsigned char *in, unsigned long inlen, rsa_key *key); -int rsa_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, rsa_key *key); -int rsa_import_spki(const unsigned char *in, unsigned long inlen, rsa_key *key); -int rsa_decode_parameters(const ltc_asn1_list *parameters, rsa_key *key); -#endif /* LTC_MRSA */ - -/* ---- DH Routines ---- */ -#ifdef LTC_MDH -extern const ltc_dh_set_type ltc_dh_sets[]; - -int dh_init(dh_key *key); -int dh_check_pubkey(const dh_key *key); -int dh_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, dh_key *key); -#endif /* LTC_MDH */ - -/* ---- ECC Routines ---- */ -#ifdef LTC_MECC -int ecc_set_curve_from_mpis(void *a, void *b, void *prime, void *order, void *gx, void *gy, unsigned long cofactor, ecc_key *key); -int ecc_copy_curve(const ecc_key *srckey, ecc_key *key); -int ecc_set_curve_by_size(int size, ecc_key *key); -int ecc_get_curve_names(const char *oid, const char * const **names); -int ecc_import_subject_public_key_info(const unsigned char *in, unsigned long inlen, ecc_key *key); -#ifdef LTC_DER -int ecc_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, ecc_key *key); -#endif -int ecc_import_with_curve(const unsigned char *in, unsigned long inlen, int type, ecc_key *key); -int ecc_import_with_oid(const unsigned char *in, unsigned long inlen, unsigned long *oid, unsigned long oid_len, int type, ecc_key *key); - -int ecc_sign_hash_rfc7518_internal(const unsigned char *in, - unsigned long inlen, - unsigned char *out, - unsigned long *outlen, - ltc_ecc_sig_opts *opts, - const ecc_key *key); - -int ecc_verify_hash_rfc7518_internal(const unsigned char *sig, - unsigned long siglen, - const unsigned char *hash, - unsigned long hashlen, - int *stat, - const ecc_key *key); - -#ifdef LTC_DER -int ecc_verify_hash_x962(const unsigned char *sig, - unsigned long siglen, - const unsigned char *hash, - unsigned long hashlen, - int *stat, - const ecc_key *key); -int ecc_sign_hash_x962(const unsigned char *in, - unsigned long inlen, - unsigned char *out, - unsigned long *outlen, - ltc_ecc_sig_opts *opts, - const ecc_key *key); -#endif - -#if defined(LTC_SSH) -int ecc_sign_hash_rfc5656(const unsigned char *in, - unsigned long inlen, - unsigned char *out, - unsigned long *outlen, - ltc_ecc_sig_opts *opts, - const ecc_key *key); - -int ecc_verify_hash_rfc5656(const unsigned char *sig, - unsigned long siglen, - const unsigned char *hash, - unsigned long hashlen, - int *stat, - const ecc_key *key); -#endif - -int ecc_sign_hash_eth27(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - ltc_ecc_sig_opts *opts, const ecc_key *key); - -int ecc_verify_hash_eth27(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int *stat, const ecc_key *key); -int ecc_sign_hash_internal(const unsigned char *in, unsigned long inlen, - void *r, void *s, ltc_ecc_sig_opts *opts, const ecc_key *key); - -int ecc_verify_hash_internal(void *r, void *s, - const unsigned char *hash, unsigned long hashlen, - int *stat, const ecc_key *key); - -int ecc_rfc6979_key(const ecc_key *priv, const unsigned char *in, unsigned long inlen, const char *rfc6979_hash_alg, ecc_key *key); - -#ifdef LTC_SSH -int ecc_ssh_ecdsa_encode_name(char *buffer, unsigned long *buflen, const ecc_key *key); -#endif - -/* low level functions */ -ecc_point *ltc_ecc_new_point(void); -void ltc_ecc_del_point(ecc_point *p); -int ltc_ecc_set_point_xyz(ltc_mp_digit x, ltc_mp_digit y, ltc_mp_digit z, ecc_point *p); -int ltc_ecc_copy_point(const ecc_point *src, ecc_point *dst); -int ltc_ecc_is_point(const ltc_ecc_dp *dp, void *x, void *y); -int ltc_ecc_is_point_at_infinity(const ecc_point *P, const void *modulus, int *retval); -int ltc_ecc_import_point(const unsigned char *in, unsigned long inlen, void *prime, void *a, void *b, void *x, void *y); -int ltc_ecc_export_point(unsigned char *out, unsigned long *outlen, void *x, void *y, unsigned long size, int compressed); -int ltc_ecc_verify_key(const ecc_key *key); - -/* point ops (mp == montgomery digit) */ -#if !defined(LTC_MECC_ACCEL) || defined(LTM_DESC) || defined(GMP_DESC) -/* R = 2P */ -int ltc_ecc_projective_dbl_point(const ecc_point *P, ecc_point *R, - const void *ma, const void *modulus, void *mp); - -/* R = P + Q */ -int ltc_ecc_projective_add_point(const ecc_point *P, const ecc_point *Q, ecc_point *R, - const void *ma, const void *modulus, void *mp); -#endif - -#if defined(LTC_MECC_FP) -/* optimized point multiplication using fixed point cache (HAC algorithm 14.117) */ -int ltc_ecc_fp_mulmod(const void *k, const ecc_point *G, ecc_point *R, const void *ma, const void *modulus, int map); - -/* functions for saving/loading/freeing/adding to fixed point cache */ -int ltc_ecc_fp_save_state(unsigned char **out, unsigned long *outlen); -int ltc_ecc_fp_restore_state(unsigned char *in, unsigned long inlen); -int ltc_ecc_fp_free(void); -int ltc_ecc_fp_add_point(const ecc_point *g, const void *ma, const void *modulus, int lock); - -/* lock/unlock all points currently in fixed point cache */ -int ltc_ecc_fp_tablelock(int lock); -#endif - -/* R = kG */ -int ltc_ecc_mulmod(const void *k, const ecc_point *G, ecc_point *R, - const void *a, const void *modulus, int map); - -#ifdef LTC_ECC_SHAMIR -/* kA*A + kB*B = C */ -int ltc_ecc_mul2add(const ecc_point *A, void *kA, - const ecc_point *B, void *kB, - ecc_point *C, - const void *ma, - const void *modulus); - -#ifdef LTC_MECC_FP -/* Shamir's trick with optimized point multiplication using fixed point cache */ -int ltc_ecc_fp_mul2add(const ecc_point *A, void *kA, - const ecc_point *B, void *kB, - ecc_point *C, - const void *ma, - const void *modulus); -#endif - -#endif - - -/* map P to affine from projective */ -int ltc_ecc_map(ecc_point *P, const void *modulus, void *mp); -#endif /* LTC_MECC */ - -#ifdef LTC_MDSA -int dsa_int_init(dsa_key *key); -int dsa_int_validate(const dsa_key *key, int *stat); -int dsa_int_validate_xy(const dsa_key *key, int *stat); -int dsa_int_validate_pqg(const dsa_key *key, int *stat); -int dsa_int_validate_primes(const dsa_key *key, int *stat); -int dsa_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, dsa_key *key); -int dsa_import_spki(const unsigned char *in, unsigned long inlen, dsa_key *key); -#endif /* LTC_MDSA */ - - -#ifdef LTC_CURVE25519 - -int tweetnacl_crypto_sign( - unsigned char *sm,unsigned long long *smlen, - const unsigned char *m,unsigned long long mlen, - const unsigned char *sk,const unsigned char *pk, - const unsigned char *ctx,unsigned long long cs); -int tweetnacl_crypto_sign_open( - int *stat, - unsigned char *m,unsigned long long *mlen, - const unsigned char *sm,unsigned long long smlen, - const unsigned char *ctx, unsigned long long cs, - const unsigned char *pk); -int tweetnacl_crypto_sign_keypair(prng_state *prng, int wprng, unsigned char *pk,unsigned char *sk); -int tweetnacl_crypto_sk_to_pk(unsigned char *pk, const unsigned char *sk); -int tweetnacl_crypto_scalarmult(unsigned char *q, const unsigned char *n, const unsigned char *p); -int tweetnacl_crypto_scalarmult_base(unsigned char *q,const unsigned char *n); -int tweetnacl_crypto_ph(unsigned char *out, const unsigned char *msg, unsigned long long msglen); - -int ed25519_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, - curve25519_key *key); -int x25519_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, - curve25519_key *key); - -int ec25519_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, - enum ltc_oid_id id, - curve25519_key *key); -int ec25519_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - enum ltc_oid_id id, - curve25519_key *key); -int ec25519_export( unsigned char *out, unsigned long *outlen, - int which, - const curve25519_key *key); -int ec25519_crypto_ctx( unsigned char *out, unsigned long *outlen, - unsigned char flag, - const unsigned char *ctx, unsigned long ctxlen); -#endif /* LTC_CURVE25519 */ - -#ifdef LTC_CURVE448 -int ec448_export(unsigned char *out, unsigned long *outlen, int which, const curve448_key *key); -int ec448_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, enum ltc_oid_id id, curve448_key *key); -int ec448_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, - enum ltc_oid_id id, curve448_key *key); -int x448_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, - curve448_key *key); -int ec448_keypair_internal(prng_state *prng, int wprng, unsigned char *pk, unsigned char *sk); -int ec448_sk_to_pk_internal(unsigned char *pk, const unsigned char *sk); -int ec448_sign_internal(unsigned char *sm, unsigned long long *smlen, - const unsigned char *m, unsigned long long mlen, - const unsigned char *sk, const unsigned char *pk, - const unsigned char *ctx, unsigned long long cs); -int ec448_verify_internal(int *stat, unsigned char *m, unsigned long long *mlen, - const unsigned char *sm, unsigned long long smlen, - const unsigned char *ctx, unsigned long long cs, - const unsigned char *pk); -int ec448_prehash_internal(unsigned char *out, const unsigned char *msg, unsigned long long msglen); -int ec448_crypto_ctx(unsigned char *out, unsigned long *outlen, unsigned char flag, - const unsigned char *ctx, unsigned long ctxlen); -int ec448_scalarmult_internal(unsigned char *out, const unsigned char *scalar, const unsigned char *point); -int ec448_scalarmult_base_internal(unsigned char *out, const unsigned char *scalar); -int ed448_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, - curve448_key *key); -#endif /* LTC_CURVE448 */ - -#ifdef LTC_DER - -#define LTC_ASN1_IS_TYPE(e, t) (((e) != NULL) && ((e)->type == (t))) - -/* DER handling */ -int der_decode_custom_type_ex(const unsigned char *in, unsigned long inlen, - ltc_asn1_list *root, - ltc_asn1_list *list, unsigned long outlen, unsigned int flags); - -int der_encode_asn1_identifier(const ltc_asn1_list *id, unsigned char *out, unsigned long *outlen); -int der_decode_asn1_identifier(const unsigned char *in, unsigned long *inlen, ltc_asn1_list *id); -int der_length_asn1_identifier(const ltc_asn1_list *id, unsigned long *idlen); - -int der_encode_asn1_length(unsigned long len, unsigned char* out, unsigned long* outlen); -int der_decode_asn1_length_ex(const unsigned char *in, unsigned long *inlen, unsigned long *outlen, unsigned int flags); -#define der_decode_asn1_length(i, il, ol) der_decode_asn1_length_ex(i, il, ol, 0) -int der_length_asn1_length(unsigned long len, unsigned long *outlen); - -int der_length_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, - unsigned long *outlen, unsigned long *payloadlen); - -int der_length_object_identifier_full(const unsigned long *words, unsigned long nwords, - unsigned long *outlen, unsigned long *datalen); - -int der_ia5_char_encode(int c); -int der_ia5_value_decode(int v); - -int der_printable_char_encode(int c); -int der_printable_value_decode(int v); - -unsigned long der_utf8_charsize(const wchar_t c); - -typedef int (*der_flexi_handler)(const ltc_asn1_list*, void*); - -typedef struct der_flexi_check { - ltc_asn1_type t; - int optional; - ltc_asn1_list **pp; - der_flexi_handler handler; - void *userdata; -} der_flexi_check; - -#define LTC_PRIV_SET_DER_FLEXI_CHECK(list, index, Type, P, Opt, Hndl, Udata) \ - do { \ - int LTC_SDFC_temp##__LINE__ = (index); \ - list[LTC_SDFC_temp##__LINE__].t = Type; \ - list[LTC_SDFC_temp##__LINE__].pp = P; \ - list[LTC_SDFC_temp##__LINE__].optional = Opt; \ - list[LTC_SDFC_temp##__LINE__].handler = (der_flexi_handler)Hndl; \ - list[LTC_SDFC_temp##__LINE__].userdata = Udata; \ - } while (0) -#define LTC_SET_DER_FLEXI_CHECK(list, index, Type, P) LTC_PRIV_SET_DER_FLEXI_CHECK(list, index, Type, P, 0, NULL, NULL) -#define LTC_SET_DER_FLEXI_CHECK_OPT(list, index, Type, P) LTC_PRIV_SET_DER_FLEXI_CHECK(list, index, Type, P, 1, NULL, NULL) -#define LTC_SET_DER_FLEXI_HANDLER(list, index, Type, Hndl, Udata) LTC_PRIV_SET_DER_FLEXI_CHECK(list, index, Type, NULL, 0, Hndl, Udata) -#define LTC_SET_DER_FLEXI_HANDLER_OPT(list, index, Type, Hndl, Udata) LTC_PRIV_SET_DER_FLEXI_CHECK(list, index, Type, NULL, 1, Hndl, Udata) - - -extern const ltc_asn1_type der_asn1_tag_to_type_map[]; -extern const unsigned long der_asn1_tag_to_type_map_sz; - -extern const int der_asn1_type_to_identifier_map[]; -extern const unsigned long der_asn1_type_to_identifier_map_sz; - -int der_flexi_sequence_cmp(const ltc_asn1_list *flexi, der_flexi_check *check); - -int der_decode_sequence_multi_ex(const unsigned char *in, unsigned long inlen, unsigned int flags, ...) - LTC_NULL_TERMINATED; - -int der_teletex_char_encode(int c); -int der_teletex_value_decode(int v); - -int der_utf8_valid_char(const wchar_t c); - -typedef int (*public_key_decode_cb)(const unsigned char *in, unsigned long inlen, void *key); - -int x509_decode_public_key_from_certificate(const unsigned char *in, unsigned long inlen, - enum ltc_oid_id algorithm, ltc_asn1_type param_type, - ltc_asn1_list* parameters, unsigned long *parameters_len, - public_key_decode_cb callback, void *key); -int x509_decode_spki(const unsigned char *in, unsigned long inlen, ltc_asn1_list **out, const ltc_asn1_list **spki); -int x509_process_public_key_from_spki(const unsigned char *in, unsigned long inlen, - enum ltc_oid_id algorithm, ltc_asn1_type param_type, - ltc_asn1_list* parameters, unsigned long *parameters_len, - public_key_decode_cb callback, void *key); - -/* SUBJECT PUBLIC KEY INFO */ -int x509_encode_subject_public_key_info(unsigned char *out, unsigned long *outlen, - enum ltc_oid_id algorithm, const void* public_key, unsigned long public_key_len, - ltc_asn1_type parameters_type, ltc_asn1_list* parameters, unsigned long parameters_len); - -int x509_decode_subject_public_key_info(const unsigned char *in, unsigned long inlen, - enum ltc_oid_id algorithm, void *public_key, unsigned long *public_key_len, - ltc_asn1_type parameters_type, ltc_asn1_list* parameters, unsigned long *parameters_len); - -int x509_get_pka(const ltc_asn1_list *pub, enum ltc_pka_id *pka); -int x509_import_spki(const unsigned char *asn1_cert, unsigned long asn1_len, ltc_pka_key *k, ltc_asn1_list **root); - -int pk_oid_cmp_with_asn1(const char *o1, const ltc_asn1_list *o2); - -#endif /* LTC_DER */ - -/* tomcrypt_pkcs.h */ - -#ifdef LTC_PKCS_1 -int ltc_pkcs_1_mgf1(int hash_idx, - const unsigned char *seed, unsigned long seedlen, - unsigned char *mask, unsigned long masklen); - -int ltc_pkcs_1_pss_encode_mgf1(const unsigned char *msghash, unsigned long msghashlen, - ltc_rsa_op_parameters *params, - unsigned long modulus_bitlen, - unsigned char *out, unsigned long *outlen); -int ltc_pkcs_1_pss_decode_mgf1(const unsigned char *msghash, unsigned long msghashlen, - const unsigned char *sig, unsigned long siglen, - ltc_rsa_op_parameters *params, - unsigned long modulus_bitlen, int *res); -int ltc_pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, - ltc_rsa_op_parameters *params, - unsigned long modulus_bitlen, - unsigned char *out, unsigned long *outlen); -int ltc_pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, - ltc_rsa_op_parameters *params, - unsigned long modulus_bitlen, - unsigned char *out, unsigned long *outlen, - int *res); - -int ltc_pkcs_1_v1_5_encode(const unsigned char *msg, - unsigned long msglen, - int block_type, - unsigned long modulus_bitlen, - prng_state *prng, - int prng_idx, - unsigned char *out, - unsigned long *outlen); -int ltc_pkcs_1_v1_5_decode(const unsigned char *msg, - unsigned long msglen, - int block_type, - unsigned long modulus_bitlen, - unsigned char *out, - unsigned long *outlen, - int *is_valid); -#endif /* LTC_PKCS_1 */ - -#ifdef LTC_PKCS_8 - -/* Public-Key Cryptography Standards (PKCS) #8: - * Private-Key Information Syntax Specification Version 1.2 - * https://tools.ietf.org/html/rfc5208 - * - * PrivateKeyInfo ::= SEQUENCE { - * version Version, - * privateKeyAlgorithm PrivateKeyAlgorithmIdentifier, - * privateKey PrivateKey, - * attributes [0] IMPLICIT Attributes OPTIONAL } - * where: - * - Version ::= INTEGER - * - PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier - * - PrivateKey ::= OCTET STRING - * - Attributes ::= SET OF Attribute - * - * EncryptedPrivateKeyInfo ::= SEQUENCE { - * encryptionAlgorithm EncryptionAlgorithmIdentifier, - * encryptedData EncryptedData } - * where: - * - EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier - * - EncryptedData ::= OCTET STRING - */ - -int pkcs8_decode_flexi(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - ltc_asn1_list **decoded_list); - -int pkcs8_get_children(const ltc_asn1_list *decoded_list, enum ltc_oid_id *pka, - ltc_asn1_list **alg_id, ltc_asn1_list **priv_key); - -#endif /* LTC_PKCS_8 */ - - -#ifdef LTC_PKCS_12 - -int pkcs12_utf8_to_utf16(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen); - -int pkcs12_kdf( int hash_id, - const unsigned char *pw, unsigned long pwlen, - const unsigned char *salt, unsigned long saltlen, - unsigned int iterations, unsigned char purpose, - unsigned char *out, unsigned long outlen); - -#endif /* LTC_PKCS_12 */ - -/* tomcrypt_prng.h */ - -#define LTC_PRNG_EXPORT(which) \ -int which ## _export(unsigned char *out, unsigned long *outlen, prng_state *prng) \ -{ \ - unsigned long len = which ## _desc.export_size; \ - \ - LTC_ARGCHK(prng != NULL); \ - LTC_ARGCHK(out != NULL); \ - LTC_ARGCHK(outlen != NULL); \ - \ - if (*outlen < len) { \ - *outlen = len; \ - return CRYPT_BUFFER_OVERFLOW; \ - } \ - \ - if (which ## _read(out, len, prng) != len) { \ - return CRYPT_ERROR_READPRNG; \ - } \ - \ - *outlen = len; \ - return CRYPT_OK; \ -} - -/* extract a byte portably */ -#ifdef _MSC_VER - #define LTC_BYTE(x, n) ((unsigned char)((x) >> (8 * (n)))) -#else - #define LTC_BYTE(x, n) (((x) >> (8 * (n))) & 255) -#endif - -/* - * On Windows, choose whether to use CryptGenRandom() [older Windows versions] - * or BCryptGenRandom() [newer Windows versions]. - * If CryptGenRandom() is desired, define LTC_NO_WIN32_BCRYPT when building. - */ -#if defined(_MSC_VER) && defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0600 - #if !defined(LTC_NO_WIN32_BCRYPT) - #define LTC_WIN32_BCRYPT - #endif -#endif - -#endif /* TOMCRYPT_PRIVATE_H_ */ diff --git a/src/headers/tomcrypt_prng.h b/src/headers/tomcrypt_prng.h deleted file mode 100644 index b8fa5854..00000000 --- a/src/headers/tomcrypt_prng.h +++ /dev/null @@ -1,223 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* ---- PRNG Stuff ---- */ -#ifdef LTC_YARROW -struct yarrow_prng { - int cipher, hash; - unsigned char pool[MAXBLOCKSIZE]; - symmetric_CTR ctr; -}; -#endif - -#ifdef LTC_RC4 -struct rc4_prng { - rc4_state s; -}; -#endif - -#ifdef LTC_CHACHA20_PRNG -struct chacha20_prng { - chacha_state s; /* chacha state */ - unsigned char ent[40]; /* entropy buffer */ - unsigned long idx; /* entropy counter */ -}; -#endif - -#ifdef LTC_FORTUNA -struct fortuna_prng { - hash_state pool[LTC_FORTUNA_POOLS]; /* the pools */ - - symmetric_key skey; - - unsigned char K[32], /* the current key */ - IV[16]; /* IV for CTR mode */ - - unsigned long pool_idx, /* current pool we will add to */ - pool0_len; /* length of 0'th pool */ - ulong64 wd; - ulong64 reset_cnt; /* number of times we have reseeded */ -}; -#endif - -#ifdef LTC_SOBER128 -struct sober128_prng { - sober128_state s; /* sober128 state */ - unsigned char ent[40]; /* entropy buffer */ - unsigned long idx; /* entropy counter */ -}; -#endif - -typedef struct { - union { - char dummy[1]; -#ifdef LTC_YARROW - struct yarrow_prng yarrow; -#endif -#ifdef LTC_RC4 - struct rc4_prng rc4; -#endif -#ifdef LTC_CHACHA20_PRNG - struct chacha20_prng chacha; -#endif -#ifdef LTC_FORTUNA - struct fortuna_prng fortuna; -#endif -#ifdef LTC_SOBER128 - struct sober128_prng sober128; -#endif - } u; - short ready; /* ready flag 0-1 */ - LTC_MUTEX_TYPE(lock) /* lock */ -} prng_state; - -/** PRNG descriptor */ -extern struct ltc_prng_descriptor { - /** Name of the PRNG */ - const char *name; - /** size in bytes of exported state */ - int export_size; - /** Start a PRNG state - @param prng [out] The state to initialize - @return CRYPT_OK if successful - */ - int (*start)(prng_state *prng); - /** Add entropy to the PRNG - @param in The entropy - @param inlen Length of the entropy (octets)\ - @param prng The PRNG state - @return CRYPT_OK if successful - */ - int (*add_entropy)(const unsigned char *in, unsigned long inlen, prng_state *prng); - /** Ready a PRNG state to read from - @param prng The PRNG state to ready - @return CRYPT_OK if successful - */ - int (*ready)(prng_state *prng); - /** Read from the PRNG - @param out [out] Where to store the data - @param outlen Length of data desired (octets) - @param prng The PRNG state to read from - @return Number of octets read - */ - unsigned long (*read)(unsigned char *out, unsigned long outlen, prng_state *prng); - /** Terminate a PRNG state - @param prng The PRNG state to terminate - @return CRYPT_OK if successful - */ - int (*done)(prng_state *prng); - /** Export a PRNG state - @param out [out] The destination for the state - @param outlen [in/out] The max size and resulting size of the PRNG state - @param prng The PRNG to export - @return CRYPT_OK if successful - */ - int (*pexport)(unsigned char *out, unsigned long *outlen, prng_state *prng); - /** Import a PRNG state - @param in The data to import - @param inlen The length of the data to import (octets) - @param prng The PRNG to initialize/import - @return CRYPT_OK if successful - */ - int (*pimport)(const unsigned char *in, unsigned long inlen, prng_state *prng); - /** Self-test the PRNG - @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled - */ - int (*test)(void); -} prng_descriptor[]; - -#ifdef LTC_YARROW -int yarrow_start(prng_state *prng); -int yarrow_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); -int yarrow_ready(prng_state *prng); -unsigned long yarrow_read(unsigned char *out, unsigned long outlen, prng_state *prng); -int yarrow_done(prng_state *prng); -int yarrow_export(unsigned char *out, unsigned long *outlen, prng_state *prng); -int yarrow_import(const unsigned char *in, unsigned long inlen, prng_state *prng); -int yarrow_test(void); -extern const struct ltc_prng_descriptor yarrow_desc; -#endif - -#ifdef LTC_FORTUNA -int fortuna_start(prng_state *prng); -int fortuna_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); -int fortuna_add_random_event(unsigned long source, unsigned long pool, const unsigned char *in, unsigned long inlen, prng_state *prng); -int fortuna_ready(prng_state *prng); -unsigned long fortuna_read(unsigned char *out, unsigned long outlen, prng_state *prng); -int fortuna_done(prng_state *prng); -int fortuna_export(unsigned char *out, unsigned long *outlen, prng_state *prng); -int fortuna_import(const unsigned char *in, unsigned long inlen, prng_state *prng); -int fortuna_update_seed(const unsigned char *in, unsigned long inlen, prng_state *prng); -int fortuna_test(void); -extern const struct ltc_prng_descriptor fortuna_desc; -#endif - -#ifdef LTC_RC4 -int rc4_start(prng_state *prng); -int rc4_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); -int rc4_ready(prng_state *prng); -unsigned long rc4_read(unsigned char *out, unsigned long outlen, prng_state *prng); -int rc4_done(prng_state *prng); -int rc4_export(unsigned char *out, unsigned long *outlen, prng_state *prng); -int rc4_import(const unsigned char *in, unsigned long inlen, prng_state *prng); -int rc4_test(void); -extern const struct ltc_prng_descriptor rc4_desc; -#endif - -#ifdef LTC_CHACHA20_PRNG -int chacha20_prng_start(prng_state *prng); -int chacha20_prng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); -int chacha20_prng_ready(prng_state *prng); -unsigned long chacha20_prng_read(unsigned char *out, unsigned long outlen, prng_state *prng); -int chacha20_prng_done(prng_state *prng); -int chacha20_prng_export(unsigned char *out, unsigned long *outlen, prng_state *prng); -int chacha20_prng_import(const unsigned char *in, unsigned long inlen, prng_state *prng); -int chacha20_prng_test(void); -extern const struct ltc_prng_descriptor chacha20_prng_desc; -#endif - -#ifdef LTC_SPRNG -int sprng_start(prng_state *prng); -int sprng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); -int sprng_ready(prng_state *prng); -unsigned long sprng_read(unsigned char *out, unsigned long outlen, prng_state *prng); -int sprng_done(prng_state *prng); -int sprng_export(unsigned char *out, unsigned long *outlen, prng_state *prng); -int sprng_import(const unsigned char *in, unsigned long inlen, prng_state *prng); -int sprng_test(void); -extern const struct ltc_prng_descriptor sprng_desc; -#endif - -#ifdef LTC_SOBER128 -int sober128_start(prng_state *prng); -int sober128_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); -int sober128_ready(prng_state *prng); -unsigned long sober128_read(unsigned char *out, unsigned long outlen, prng_state *prng); -int sober128_done(prng_state *prng); -int sober128_export(unsigned char *out, unsigned long *outlen, prng_state *prng); -int sober128_import(const unsigned char *in, unsigned long inlen, prng_state *prng); -int sober128_test(void); -extern const struct ltc_prng_descriptor sober128_desc; -#endif - -int find_prng(const char *name); -int register_prng(const struct ltc_prng_descriptor *prng); -int unregister_prng(const struct ltc_prng_descriptor *prng); -int register_all_prngs(void); -int prng_is_valid(int idx); -LTC_MUTEX_PROTO(ltc_prng_mutex) - -/* Slow RNG you **might** be able to use to seed a PRNG with. Be careful as this - * might not work on all platforms as planned - */ -unsigned long rng_get_bytes(unsigned char *out, - unsigned long outlen, - void (*callback)(void)); - -int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void)); - -#ifdef LTC_PRNG_ENABLE_LTC_RNG -extern unsigned long (*ltc_rng)(unsigned char *out, unsigned long outlen, - void (*callback)(void)); -#endif - diff --git a/src/mac/blake2/blake2bmac.c b/src/mac/blake2/blake2bmac.c deleted file mode 100644 index ac26e106..00000000 --- a/src/mac/blake2/blake2bmac.c +++ /dev/null @@ -1,56 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_BLAKE2BMAC - -/** - Initialize an BLAKE2B MAC context. - @param st The BLAKE2B MAC state - @param outlen The size of the MAC output (octets) - @param key The secret key - @param keylen The length of the secret key (octets) - @return CRYPT_OK if successful -*/ -int blake2bmac_init(blake2bmac_state *st, unsigned long outlen, const unsigned char *key, unsigned long keylen) -{ - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(key != NULL); - return blake2b_init(st, outlen, key, keylen); -} - -/** - Process data through BLAKE2B MAC - @param st The BLAKE2B MAC state - @param in The data to send through HMAC - @param inlen The length of the data to HMAC (octets) - @return CRYPT_OK if successful -*/ -int blake2bmac_process(blake2bmac_state *st, const unsigned char *in, unsigned long inlen) -{ - if (inlen == 0) return CRYPT_OK; /* nothing to do */ - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(in != NULL); - return blake2b_process(st, in, inlen); -} - -/** - Terminate a BLAKE2B MAC session - @param st The BLAKE2B MAC state - @param mac [out] The destination of the BLAKE2B MAC authentication tag - @param maclen [in/out] The max size and resulting size of the BLAKE2B MAC authentication tag - @return CRYPT_OK if successful -*/ -int blake2bmac_done(blake2bmac_state *st, unsigned char *mac, unsigned long *maclen) -{ - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(mac != NULL); - LTC_ARGCHK(maclen != NULL); - LTC_ARGCHK(*maclen >= st->blake2b.outlen); - - *maclen = st->blake2b.outlen; - return blake2b_done(st, mac); -} - -#endif diff --git a/src/mac/blake2/blake2bmac_file.c b/src/mac/blake2/blake2bmac_file.c deleted file mode 100644 index 831e845d..00000000 --- a/src/mac/blake2/blake2bmac_file.c +++ /dev/null @@ -1,78 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_BLAKE2BMAC - -/** - BLAKE2B MAC a file - @param fname The name of the file you wish to BLAKE2B MAC - @param key The secret key - @param keylen The length of the secret key - @param mac [out] The BLAKE2B MAC authentication tag - @param maclen [in/out] The max size and resulting size of the authentication tag - @return CRYPT_OK if successful, CRYPT_NOP if file support has been disabled -*/ -int blake2bmac_file(const char *fname, const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen) -{ -#ifdef LTC_NO_FILE - LTC_UNUSED_PARAM(fname); - LTC_UNUSED_PARAM(key); - LTC_UNUSED_PARAM(keylen); - LTC_UNUSED_PARAM(mac); - LTC_UNUSED_PARAM(maclen); - return CRYPT_NOP; -#else - blake2bmac_state st; - FILE *in; - unsigned char *buf; - size_t x; - int err; - - LTC_ARGCHK(fname != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(mac != NULL); - LTC_ARGCHK(maclen != NULL); - - if ((buf = XMALLOC(LTC_FILE_READ_BUFSIZE)) == NULL) { - return CRYPT_MEM; - } - - if ((err = blake2bmac_init(&st, *maclen, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - - in = fopen(fname, "rb"); - if (in == NULL) { - err = CRYPT_FILE_NOTFOUND; - goto LBL_ERR; - } - - do { - x = fread(buf, 1, LTC_FILE_READ_BUFSIZE, in); - if ((err = blake2bmac_process(&st, buf, (unsigned long)x)) != CRYPT_OK) { - fclose(in); - goto LBL_CLEANBUF; - } - } while (x == LTC_FILE_READ_BUFSIZE); - - if (fclose(in) != 0) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; - } - - err = blake2bmac_done(&st, mac, maclen); - -LBL_CLEANBUF: - zeromem(buf, LTC_FILE_READ_BUFSIZE); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&st, sizeof(blake2bmac_state)); -#endif - XFREE(buf); - return err; -#endif -} - -#endif diff --git a/src/mac/blake2/blake2bmac_memory.c b/src/mac/blake2/blake2bmac_memory.c deleted file mode 100644 index 3f5e309a..00000000 --- a/src/mac/blake2/blake2bmac_memory.c +++ /dev/null @@ -1,38 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_BLAKE2BMAC - -/** - BLAKE2B MAC a block of memory to produce the authentication tag - @param key The secret key - @param keylen The length of the secret key (octets) - @param in The data to BLAKE2B MAC - @param inlen The length of the data to BLAKE2B MAC (octets) - @param mac [out] Destination of the authentication tag - @param maclen [in/out] Max size and resulting size of authentication tag - @return CRYPT_OK if successful -*/ -int blake2bmac_memory(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *mac, unsigned long *maclen) -{ - blake2bmac_state st; - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(mac != NULL); - LTC_ARGCHK(maclen != NULL); - - if ((err = blake2bmac_init(&st, *maclen, key, keylen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = blake2bmac_process(&st, in, inlen)) != CRYPT_OK) { goto LBL_ERR; } - err = blake2bmac_done(&st, mac, maclen); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&st, sizeof(blake2bmac_state)); -#endif - return err; -} - -#endif diff --git a/src/mac/blake2/blake2bmac_memory_multi.c b/src/mac/blake2/blake2bmac_memory_multi.c deleted file mode 100644 index 3ce33a6a..00000000 --- a/src/mac/blake2/blake2bmac_memory_multi.c +++ /dev/null @@ -1,51 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_BLAKE2BMAC - -/** - BLAKE2B MAC multiple blocks of memory to produce the authentication tag - @param key The secret key - @param keylen The length of the secret key (octets) - @param mac [out] Destination of the authentication tag - @param maclen [in/out] Max size and resulting size of authentication tag - @param in The data to BLAKE2B MAC - @param inlen The length of the data to BLAKE2B MAC (octets) - @param ... tuples of (data,len) pairs to BLAKE2B MAC, terminated with a (NULL,x) (x=don't care) - @return CRYPT_OK if successful -*/ -int blake2bmac_memory_multi(const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen, const unsigned char *in, unsigned long inlen, ...) -{ - blake2bmac_state st; - int err; - va_list args; - const unsigned char *curptr; - unsigned long curlen; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(mac != NULL); - LTC_ARGCHK(maclen != NULL); - - va_start(args, inlen); - curptr = in; - curlen = inlen; - if ((err = blake2bmac_init(&st, *maclen, key, keylen)) != CRYPT_OK) { goto LBL_ERR; } - for (;;) { - if ((err = blake2bmac_process(&st, curptr, curlen)) != CRYPT_OK) { goto LBL_ERR; } - curptr = va_arg(args, const unsigned char*); - if (curptr == NULL) break; - curlen = va_arg(args, unsigned long); - } - err = blake2bmac_done(&st, mac, maclen); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&st, sizeof(blake2bmac_state)); -#endif - va_end(args); - return err; -} - -#endif diff --git a/src/mac/blake2/blake2bmac_test.c b/src/mac/blake2/blake2bmac_test.c deleted file mode 100644 index 7827af54..00000000 --- a/src/mac/blake2/blake2bmac_test.c +++ /dev/null @@ -1,304 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_BLAKE2BMAC - -int blake2bmac_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const unsigned char tests[256][64] = { - /* source: https://github.com/BLAKE2/BLAKE2/blob/master/testvectors/blake2b-kat.txt */ - { 0x10, 0xeb, 0xb6, 0x77, 0x00, 0xb1, 0x86, 0x8e, 0xfb, 0x44, 0x17, 0x98, 0x7a, 0xcf, 0x46, 0x90, 0xae, 0x9d, 0x97, 0x2f, 0xb7, 0xa5, 0x90, 0xc2, 0xf0, 0x28, 0x71, 0x79, 0x9a, 0xaa, 0x47, 0x86, 0xb5, 0xe9, 0x96, 0xe8, 0xf0, 0xf4, 0xeb, 0x98, 0x1f, 0xc2, 0x14, 0xb0, 0x05, 0xf4, 0x2d, 0x2f, 0xf4, 0x23, 0x34, 0x99, 0x39, 0x16, 0x53, 0xdf, 0x7a, 0xef, 0xcb, 0xc1, 0x3f, 0xc5, 0x15, 0x68 }, - { 0x96, 0x1f, 0x6d, 0xd1, 0xe4, 0xdd, 0x30, 0xf6, 0x39, 0x01, 0x69, 0x0c, 0x51, 0x2e, 0x78, 0xe4, 0xb4, 0x5e, 0x47, 0x42, 0xed, 0x19, 0x7c, 0x3c, 0x5e, 0x45, 0xc5, 0x49, 0xfd, 0x25, 0xf2, 0xe4, 0x18, 0x7b, 0x0b, 0xc9, 0xfe, 0x30, 0x49, 0x2b, 0x16, 0xb0, 0xd0, 0xbc, 0x4e, 0xf9, 0xb0, 0xf3, 0x4c, 0x70, 0x03, 0xfa, 0xc0, 0x9a, 0x5e, 0xf1, 0x53, 0x2e, 0x69, 0x43, 0x02, 0x34, 0xce, 0xbd }, - { 0xda, 0x2c, 0xfb, 0xe2, 0xd8, 0x40, 0x9a, 0x0f, 0x38, 0x02, 0x61, 0x13, 0x88, 0x4f, 0x84, 0xb5, 0x01, 0x56, 0x37, 0x1a, 0xe3, 0x04, 0xc4, 0x43, 0x01, 0x73, 0xd0, 0x8a, 0x99, 0xd9, 0xfb, 0x1b, 0x98, 0x31, 0x64, 0xa3, 0x77, 0x07, 0x06, 0xd5, 0x37, 0xf4, 0x9e, 0x0c, 0x91, 0x6d, 0x9f, 0x32, 0xb9, 0x5c, 0xc3, 0x7a, 0x95, 0xb9, 0x9d, 0x85, 0x74, 0x36, 0xf0, 0x23, 0x2c, 0x88, 0xa9, 0x65 }, - { 0x33, 0xd0, 0x82, 0x5d, 0xdd, 0xf7, 0xad, 0xa9, 0x9b, 0x0e, 0x7e, 0x30, 0x71, 0x04, 0xad, 0x07, 0xca, 0x9c, 0xfd, 0x96, 0x92, 0x21, 0x4f, 0x15, 0x61, 0x35, 0x63, 0x15, 0xe7, 0x84, 0xf3, 0xe5, 0xa1, 0x7e, 0x36, 0x4a, 0xe9, 0xdb, 0xb1, 0x4c, 0xb2, 0x03, 0x6d, 0xf9, 0x32, 0xb7, 0x7f, 0x4b, 0x29, 0x27, 0x61, 0x36, 0x5f, 0xb3, 0x28, 0xde, 0x7a, 0xfd, 0xc6, 0xd8, 0x99, 0x8f, 0x5f, 0xc1 }, - { 0xbe, 0xaa, 0x5a, 0x3d, 0x08, 0xf3, 0x80, 0x71, 0x43, 0xcf, 0x62, 0x1d, 0x95, 0xcd, 0x69, 0x05, 0x14, 0xd0, 0xb4, 0x9e, 0xff, 0xf9, 0xc9, 0x1d, 0x24, 0xb5, 0x92, 0x41, 0xec, 0x0e, 0xef, 0xa5, 0xf6, 0x01, 0x96, 0xd4, 0x07, 0x04, 0x8b, 0xba, 0x8d, 0x21, 0x46, 0x82, 0x8e, 0xbc, 0xb0, 0x48, 0x8d, 0x88, 0x42, 0xfd, 0x56, 0xbb, 0x4f, 0x6d, 0xf8, 0xe1, 0x9c, 0x4b, 0x4d, 0xaa, 0xb8, 0xac }, - { 0x09, 0x80, 0x84, 0xb5, 0x1f, 0xd1, 0x3d, 0xea, 0xe5, 0xf4, 0x32, 0x0d, 0xe9, 0x4a, 0x68, 0x8e, 0xe0, 0x7b, 0xae, 0xa2, 0x80, 0x04, 0x86, 0x68, 0x9a, 0x86, 0x36, 0x11, 0x7b, 0x46, 0xc1, 0xf4, 0xc1, 0xf6, 0xaf, 0x7f, 0x74, 0xae, 0x7c, 0x85, 0x76, 0x00, 0x45, 0x6a, 0x58, 0xa3, 0xaf, 0x25, 0x1d, 0xc4, 0x72, 0x3a, 0x64, 0xcc, 0x7c, 0x0a, 0x5a, 0xb6, 0xd9, 0xca, 0xc9, 0x1c, 0x20, 0xbb }, - { 0x60, 0x44, 0x54, 0x0d, 0x56, 0x08, 0x53, 0xeb, 0x1c, 0x57, 0xdf, 0x00, 0x77, 0xdd, 0x38, 0x10, 0x94, 0x78, 0x1c, 0xdb, 0x90, 0x73, 0xe5, 0xb1, 0xb3, 0xd3, 0xf6, 0xc7, 0x82, 0x9e, 0x12, 0x06, 0x6b, 0xba, 0xca, 0x96, 0xd9, 0x89, 0xa6, 0x90, 0xde, 0x72, 0xca, 0x31, 0x33, 0xa8, 0x36, 0x52, 0xba, 0x28, 0x4a, 0x6d, 0x62, 0x94, 0x2b, 0x27, 0x1f, 0xfa, 0x26, 0x20, 0xc9, 0xe7, 0x5b, 0x1f }, - { 0x7a, 0x8c, 0xfe, 0x9b, 0x90, 0xf7, 0x5f, 0x7e, 0xcb, 0x3a, 0xcc, 0x05, 0x3a, 0xae, 0xd6, 0x19, 0x31, 0x12, 0xb6, 0xf6, 0xa4, 0xae, 0xeb, 0x3f, 0x65, 0xd3, 0xde, 0x54, 0x19, 0x42, 0xde, 0xb9, 0xe2, 0x22, 0x81, 0x52, 0xa3, 0xc4, 0xbb, 0xbe, 0x72, 0xfc, 0x3b, 0x12, 0x62, 0x95, 0x28, 0xcf, 0xbb, 0x09, 0xfe, 0x63, 0x0f, 0x04, 0x74, 0x33, 0x9f, 0x54, 0xab, 0xf4, 0x53, 0xe2, 0xed, 0x52 }, - { 0x38, 0x0b, 0xea, 0xf6, 0xea, 0x7c, 0xc9, 0x36, 0x5e, 0x27, 0x0e, 0xf0, 0xe6, 0xf3, 0xa6, 0x4f, 0xb9, 0x02, 0xac, 0xae, 0x51, 0xdd, 0x55, 0x12, 0xf8, 0x42, 0x59, 0xad, 0x2c, 0x91, 0xf4, 0xbc, 0x41, 0x08, 0xdb, 0x73, 0x19, 0x2a, 0x5b, 0xbf, 0xb0, 0xcb, 0xcf, 0x71, 0xe4, 0x6c, 0x3e, 0x21, 0xae, 0xe1, 0xc5, 0xe8, 0x60, 0xdc, 0x96, 0xe8, 0xeb, 0x0b, 0x7b, 0x84, 0x26, 0xe6, 0xab, 0xe9 }, - { 0x60, 0xfe, 0x3c, 0x45, 0x35, 0xe1, 0xb5, 0x9d, 0x9a, 0x61, 0xea, 0x85, 0x00, 0xbf, 0xac, 0x41, 0xa6, 0x9d, 0xff, 0xb1, 0xce, 0xad, 0xd9, 0xac, 0xa3, 0x23, 0xe9, 0xa6, 0x25, 0xb6, 0x4d, 0xa5, 0x76, 0x3b, 0xad, 0x72, 0x26, 0xda, 0x02, 0xb9, 0xc8, 0xc4, 0xf1, 0xa5, 0xde, 0x14, 0x0a, 0xc5, 0xa6, 0xc1, 0x12, 0x4e, 0x4f, 0x71, 0x8c, 0xe0, 0xb2, 0x8e, 0xa4, 0x73, 0x93, 0xaa, 0x66, 0x37 }, - { 0x4f, 0xe1, 0x81, 0xf5, 0x4a, 0xd6, 0x3a, 0x29, 0x83, 0xfe, 0xaa, 0xf7, 0x7d, 0x1e, 0x72, 0x35, 0xc2, 0xbe, 0xb1, 0x7f, 0xa3, 0x28, 0xb6, 0xd9, 0x50, 0x5b, 0xda, 0x32, 0x7d, 0xf1, 0x9f, 0xc3, 0x7f, 0x02, 0xc4, 0xb6, 0xf0, 0x36, 0x8c, 0xe2, 0x31, 0x47, 0x31, 0x3a, 0x8e, 0x57, 0x38, 0xb5, 0xfa, 0x2a, 0x95, 0xb2, 0x9d, 0xe1, 0xc7, 0xf8, 0x26, 0x4e, 0xb7, 0x7b, 0x69, 0xf5, 0x85, 0xcd }, - { 0xf2, 0x28, 0x77, 0x3c, 0xe3, 0xf3, 0xa4, 0x2b, 0x5f, 0x14, 0x4d, 0x63, 0x23, 0x7a, 0x72, 0xd9, 0x96, 0x93, 0xad, 0xb8, 0x83, 0x7d, 0x0e, 0x11, 0x2a, 0x8a, 0x0f, 0x8f, 0xff, 0xf2, 0xc3, 0x62, 0x85, 0x7a, 0xc4, 0x9c, 0x11, 0xec, 0x74, 0x0d, 0x15, 0x00, 0x74, 0x9d, 0xac, 0x9b, 0x1f, 0x45, 0x48, 0x10, 0x8b, 0xf3, 0x15, 0x57, 0x94, 0xdc, 0xc9, 0xe4, 0x08, 0x28, 0x49, 0xe2, 0xb8, 0x5b }, - { 0x96, 0x24, 0x52, 0xa8, 0x45, 0x5c, 0xc5, 0x6c, 0x85, 0x11, 0x31, 0x7e, 0x3b, 0x1f, 0x3b, 0x2c, 0x37, 0xdf, 0x75, 0xf5, 0x88, 0xe9, 0x43, 0x25, 0xfd, 0xd7, 0x70, 0x70, 0x35, 0x9c, 0xf6, 0x3a, 0x9a, 0xe6, 0xe9, 0x30, 0x93, 0x6f, 0xdf, 0x8e, 0x1e, 0x08, 0xff, 0xca, 0x44, 0x0c, 0xfb, 0x72, 0xc2, 0x8f, 0x06, 0xd8, 0x9a, 0x21, 0x51, 0xd1, 0xc4, 0x6c, 0xd5, 0xb2, 0x68, 0xef, 0x85, 0x63 }, - { 0x43, 0xd4, 0x4b, 0xfa, 0x18, 0x76, 0x8c, 0x59, 0x89, 0x6b, 0xf7, 0xed, 0x17, 0x65, 0xcb, 0x2d, 0x14, 0xaf, 0x8c, 0x26, 0x02, 0x66, 0x03, 0x90, 0x99, 0xb2, 0x5a, 0x60, 0x3e, 0x4d, 0xdc, 0x50, 0x39, 0xd6, 0xef, 0x3a, 0x91, 0x84, 0x7d, 0x10, 0x88, 0xd4, 0x01, 0xc0, 0xc7, 0xe8, 0x47, 0x78, 0x1a, 0x8a, 0x59, 0x0d, 0x33, 0xa3, 0xc6, 0xcb, 0x4d, 0xf0, 0xfa, 0xb1, 0xc2, 0xf2, 0x23, 0x55 }, - { 0xdc, 0xff, 0xa9, 0xd5, 0x8c, 0x2a, 0x4c, 0xa2, 0xcd, 0xbb, 0x0c, 0x7a, 0xa4, 0xc4, 0xc1, 0xd4, 0x51, 0x65, 0x19, 0x00, 0x89, 0xf4, 0xe9, 0x83, 0xbb, 0x1c, 0x2c, 0xab, 0x4a, 0xae, 0xff, 0x1f, 0xa2, 0xb5, 0xee, 0x51, 0x6f, 0xec, 0xd7, 0x80, 0x54, 0x02, 0x40, 0xbf, 0x37, 0xe5, 0x6c, 0x8b, 0xcc, 0xa7, 0xfa, 0xb9, 0x80, 0xe1, 0xe6, 0x1c, 0x94, 0x00, 0xd8, 0xa9, 0xa5, 0xb1, 0x4a, 0xc6 }, - { 0x6f, 0xbf, 0x31, 0xb4, 0x5a, 0xb0, 0xc0, 0xb8, 0xda, 0xd1, 0xc0, 0xf5, 0xf4, 0x06, 0x13, 0x79, 0x91, 0x2d, 0xde, 0x5a, 0xa9, 0x22, 0x09, 0x9a, 0x03, 0x0b, 0x72, 0x5c, 0x73, 0x34, 0x6c, 0x52, 0x42, 0x91, 0xad, 0xef, 0x89, 0xd2, 0xf6, 0xfd, 0x8d, 0xfc, 0xda, 0x6d, 0x07, 0xda, 0xd8, 0x11, 0xa9, 0x31, 0x45, 0x36, 0xc2, 0x91, 0x5e, 0xd4, 0x5d, 0xa3, 0x49, 0x47, 0xe8, 0x3d, 0xe3, 0x4e }, - { 0xa0, 0xc6, 0x5b, 0xdd, 0xde, 0x8a, 0xde, 0xf5, 0x72, 0x82, 0xb0, 0x4b, 0x11, 0xe7, 0xbc, 0x8a, 0xab, 0x10, 0x5b, 0x99, 0x23, 0x1b, 0x75, 0x0c, 0x02, 0x1f, 0x4a, 0x73, 0x5c, 0xb1, 0xbc, 0xfa, 0xb8, 0x75, 0x53, 0xbb, 0xa3, 0xab, 0xb0, 0xc3, 0xe6, 0x4a, 0x0b, 0x69, 0x55, 0x28, 0x51, 0x85, 0xa0, 0xbd, 0x35, 0xfb, 0x8c, 0xfd, 0xe5, 0x57, 0x32, 0x9b, 0xeb, 0xb1, 0xf6, 0x29, 0xee, 0x93 }, - { 0xf9, 0x9d, 0x81, 0x55, 0x50, 0x55, 0x8e, 0x81, 0xec, 0xa2, 0xf9, 0x67, 0x18, 0xae, 0xd1, 0x0d, 0x86, 0xf3, 0xf1, 0xcf, 0xb6, 0x75, 0xcc, 0xe0, 0x6b, 0x0e, 0xff, 0x02, 0xf6, 0x17, 0xc5, 0xa4, 0x2c, 0x5a, 0xa7, 0x60, 0x27, 0x0f, 0x26, 0x79, 0xda, 0x26, 0x77, 0xc5, 0xae, 0xb9, 0x4f, 0x11, 0x42, 0x27, 0x7f, 0x21, 0xc7, 0xf7, 0x9f, 0x3c, 0x4f, 0x0c, 0xce, 0x4e, 0xd8, 0xee, 0x62, 0xb1 }, - { 0x95, 0x39, 0x1d, 0xa8, 0xfc, 0x7b, 0x91, 0x7a, 0x20, 0x44, 0xb3, 0xd6, 0xf5, 0x37, 0x4e, 0x1c, 0xa0, 0x72, 0xb4, 0x14, 0x54, 0xd5, 0x72, 0xc7, 0x35, 0x6c, 0x05, 0xfd, 0x4b, 0xc1, 0xe0, 0xf4, 0x0b, 0x8b, 0xb8, 0xb4, 0xa9, 0xf6, 0xbc, 0xe9, 0xbe, 0x2c, 0x46, 0x23, 0xc3, 0x99, 0xb0, 0xdc, 0xa0, 0xda, 0xb0, 0x5c, 0xb7, 0x28, 0x1b, 0x71, 0xa2, 0x1b, 0x0e, 0xbc, 0xd9, 0xe5, 0x56, 0x70 }, - { 0x04, 0xb9, 0xcd, 0x3d, 0x20, 0xd2, 0x21, 0xc0, 0x9a, 0xc8, 0x69, 0x13, 0xd3, 0xdc, 0x63, 0x04, 0x19, 0x89, 0xa9, 0xa1, 0xe6, 0x94, 0xf1, 0xe6, 0x39, 0xa3, 0xba, 0x7e, 0x45, 0x18, 0x40, 0xf7, 0x50, 0xc2, 0xfc, 0x19, 0x1d, 0x56, 0xad, 0x61, 0xf2, 0xe7, 0x93, 0x6b, 0xc0, 0xac, 0x8e, 0x09, 0x4b, 0x60, 0xca, 0xee, 0xd8, 0x78, 0xc1, 0x87, 0x99, 0x04, 0x54, 0x02, 0xd6, 0x1c, 0xea, 0xf9 }, - { 0xec, 0x0e, 0x0e, 0xf7, 0x07, 0xe4, 0xed, 0x6c, 0x0c, 0x66, 0xf9, 0xe0, 0x89, 0xe4, 0x95, 0x4b, 0x05, 0x80, 0x30, 0xd2, 0xdd, 0x86, 0x39, 0x8f, 0xe8, 0x40, 0x59, 0x63, 0x1f, 0x9e, 0xe5, 0x91, 0xd9, 0xd7, 0x73, 0x75, 0x35, 0x51, 0x49, 0x17, 0x8c, 0x0c, 0xf8, 0xf8, 0xe7, 0xc4, 0x9e, 0xd2, 0xa5, 0xe4, 0xf9, 0x54, 0x88, 0xa2, 0x24, 0x70, 0x67, 0xc2, 0x08, 0x51, 0x0f, 0xad, 0xc4, 0x4c }, - { 0x9a, 0x37, 0xcc, 0xe2, 0x73, 0xb7, 0x9c, 0x09, 0x91, 0x36, 0x77, 0x51, 0x0e, 0xaf, 0x76, 0x88, 0xe8, 0x9b, 0x33, 0x14, 0xd3, 0x53, 0x2f, 0xd2, 0x76, 0x4c, 0x39, 0xde, 0x02, 0x2a, 0x29, 0x45, 0xb5, 0x71, 0x0d, 0x13, 0x51, 0x7a, 0xf8, 0xdd, 0xc0, 0x31, 0x66, 0x24, 0xe7, 0x3b, 0xec, 0x1c, 0xe6, 0x7d, 0xf1, 0x52, 0x28, 0x30, 0x20, 0x36, 0xf3, 0x30, 0xab, 0x0c, 0xb4, 0xd2, 0x18, 0xdd }, - { 0x4c, 0xf9, 0xbb, 0x8f, 0xb3, 0xd4, 0xde, 0x8b, 0x38, 0xb2, 0xf2, 0x62, 0xd3, 0xc4, 0x0f, 0x46, 0xdf, 0xe7, 0x47, 0xe8, 0xfc, 0x0a, 0x41, 0x4c, 0x19, 0x3d, 0x9f, 0xcf, 0x75, 0x31, 0x06, 0xce, 0x47, 0xa1, 0x8f, 0x17, 0x2f, 0x12, 0xe8, 0xa2, 0xf1, 0xc2, 0x67, 0x26, 0x54, 0x53, 0x58, 0xe5, 0xee, 0x28, 0xc9, 0xe2, 0x21, 0x3a, 0x87, 0x87, 0xaa, 0xfb, 0xc5, 0x16, 0xd2, 0x34, 0x31, 0x52 }, - { 0x64, 0xe0, 0xc6, 0x3a, 0xf9, 0xc8, 0x08, 0xfd, 0x89, 0x31, 0x37, 0x12, 0x98, 0x67, 0xfd, 0x91, 0x93, 0x9d, 0x53, 0xf2, 0xaf, 0x04, 0xbe, 0x4f, 0xa2, 0x68, 0x00, 0x61, 0x00, 0x06, 0x9b, 0x2d, 0x69, 0xda, 0xa5, 0xc5, 0xd8, 0xed, 0x7f, 0xdd, 0xcb, 0x2a, 0x70, 0xee, 0xec, 0xdf, 0x2b, 0x10, 0x5d, 0xd4, 0x6a, 0x1e, 0x3b, 0x73, 0x11, 0x72, 0x8f, 0x63, 0x9a, 0xb4, 0x89, 0x32, 0x6b, 0xc9 }, - { 0x5e, 0x9c, 0x93, 0x15, 0x8d, 0x65, 0x9b, 0x2d, 0xef, 0x06, 0xb0, 0xc3, 0xc7, 0x56, 0x50, 0x45, 0x54, 0x26, 0x62, 0xd6, 0xee, 0xe8, 0xa9, 0x6a, 0x89, 0xb7, 0x8a, 0xde, 0x09, 0xfe, 0x8b, 0x3d, 0xcc, 0x09, 0x6d, 0x4f, 0xe4, 0x88, 0x15, 0xd8, 0x8d, 0x8f, 0x82, 0x62, 0x01, 0x56, 0x60, 0x2a, 0xf5, 0x41, 0x95, 0x5e, 0x1f, 0x6c, 0xa3, 0x0d, 0xce, 0x14, 0xe2, 0x54, 0xc3, 0x26, 0xb8, 0x8f }, - { 0x77, 0x75, 0xdf, 0xf8, 0x89, 0x45, 0x8d, 0xd1, 0x1a, 0xef, 0x41, 0x72, 0x76, 0x85, 0x3e, 0x21, 0x33, 0x5e, 0xb8, 0x8e, 0x4d, 0xec, 0x9c, 0xfb, 0x4e, 0x9e, 0xdb, 0x49, 0x82, 0x00, 0x88, 0x55, 0x1a, 0x2c, 0xa6, 0x03, 0x39, 0xf1, 0x20, 0x66, 0x10, 0x11, 0x69, 0xf0, 0xdf, 0xe8, 0x4b, 0x09, 0x8f, 0xdd, 0xb1, 0x48, 0xd9, 0xda, 0x6b, 0x3d, 0x61, 0x3d, 0xf2, 0x63, 0x88, 0x9a, 0xd6, 0x4b }, - { 0xf0, 0xd2, 0x80, 0x5a, 0xfb, 0xb9, 0x1f, 0x74, 0x39, 0x51, 0x35, 0x1a, 0x6d, 0x02, 0x4f, 0x93, 0x53, 0xa2, 0x3c, 0x7c, 0xe1, 0xfc, 0x2b, 0x05, 0x1b, 0x3a, 0x8b, 0x96, 0x8c, 0x23, 0x3f, 0x46, 0xf5, 0x0f, 0x80, 0x6e, 0xcb, 0x15, 0x68, 0xff, 0xaa, 0x0b, 0x60, 0x66, 0x1e, 0x33, 0x4b, 0x21, 0xdd, 0xe0, 0x4f, 0x8f, 0xa1, 0x55, 0xac, 0x74, 0x0e, 0xeb, 0x42, 0xe2, 0x0b, 0x60, 0xd7, 0x64 }, - { 0x86, 0xa2, 0xaf, 0x31, 0x6e, 0x7d, 0x77, 0x54, 0x20, 0x1b, 0x94, 0x2e, 0x27, 0x53, 0x64, 0xac, 0x12, 0xea, 0x89, 0x62, 0xab, 0x5b, 0xd8, 0xd7, 0xfb, 0x27, 0x6d, 0xc5, 0xfb, 0xff, 0xc8, 0xf9, 0xa2, 0x8c, 0xae, 0x4e, 0x48, 0x67, 0xdf, 0x67, 0x80, 0xd9, 0xb7, 0x25, 0x24, 0x16, 0x09, 0x27, 0xc8, 0x55, 0xda, 0x5b, 0x60, 0x78, 0xe0, 0xb5, 0x54, 0xaa, 0x91, 0xe3, 0x1c, 0xb9, 0xca, 0x1d }, - { 0x10, 0xbd, 0xf0, 0xca, 0xa0, 0x80, 0x27, 0x05, 0xe7, 0x06, 0x36, 0x9b, 0xaf, 0x8a, 0x3f, 0x79, 0xd7, 0x2c, 0x0a, 0x03, 0xa8, 0x06, 0x75, 0xa7, 0xbb, 0xb0, 0x0b, 0xe3, 0xa4, 0x5e, 0x51, 0x64, 0x24, 0xd1, 0xee, 0x88, 0xef, 0xb5, 0x6f, 0x6d, 0x57, 0x77, 0x54, 0x5a, 0xe6, 0xe2, 0x77, 0x65, 0xc3, 0xa8, 0xf5, 0xe4, 0x93, 0xfc, 0x30, 0x89, 0x15, 0x63, 0x89, 0x33, 0xa1, 0xdf, 0xee, 0x55 }, - { 0xb0, 0x17, 0x81, 0x09, 0x2b, 0x17, 0x48, 0x45, 0x9e, 0x2e, 0x4e, 0xc1, 0x78, 0x69, 0x66, 0x27, 0xbf, 0x4e, 0xba, 0xfe, 0xbb, 0xa7, 0x74, 0xec, 0xf0, 0x18, 0xb7, 0x9a, 0x68, 0xae, 0xb8, 0x49, 0x17, 0xbf, 0x0b, 0x84, 0xbb, 0x79, 0xd1, 0x7b, 0x74, 0x31, 0x51, 0x14, 0x4c, 0xd6, 0x6b, 0x7b, 0x33, 0xa4, 0xb9, 0xe5, 0x2c, 0x76, 0xc4, 0xe1, 0x12, 0x05, 0x0f, 0xf5, 0x38, 0x5b, 0x7f, 0x0b }, - { 0xc6, 0xdb, 0xc6, 0x1d, 0xec, 0x6e, 0xae, 0xac, 0x81, 0xe3, 0xd5, 0xf7, 0x55, 0x20, 0x3c, 0x8e, 0x22, 0x05, 0x51, 0x53, 0x4a, 0x0b, 0x2f, 0xd1, 0x05, 0xa9, 0x18, 0x89, 0x94, 0x5a, 0x63, 0x85, 0x50, 0x20, 0x4f, 0x44, 0x09, 0x3d, 0xd9, 0x98, 0xc0, 0x76, 0x20, 0x5d, 0xff, 0xad, 0x70, 0x3a, 0x0e, 0x5c, 0xd3, 0xc7, 0xf4, 0x38, 0xa7, 0xe6, 0x34, 0xcd, 0x59, 0xfe, 0xde, 0xdb, 0x53, 0x9e }, - { 0xeb, 0xa5, 0x1a, 0xcf, 0xfb, 0x4c, 0xea, 0x31, 0xdb, 0x4b, 0x8d, 0x87, 0xe9, 0xbf, 0x7d, 0xd4, 0x8f, 0xe9, 0x7b, 0x02, 0x53, 0xae, 0x67, 0xaa, 0x58, 0x0f, 0x9a, 0xc4, 0xa9, 0xd9, 0x41, 0xf2, 0xbe, 0xa5, 0x18, 0xee, 0x28, 0x68, 0x18, 0xcc, 0x9f, 0x63, 0x3f, 0x2a, 0x3b, 0x9f, 0xb6, 0x8e, 0x59, 0x4b, 0x48, 0xcd, 0xd6, 0xd5, 0x15, 0xbf, 0x1d, 0x52, 0xba, 0x6c, 0x85, 0xa2, 0x03, 0xa7 }, - { 0x86, 0x22, 0x1f, 0x3a, 0xda, 0x52, 0x03, 0x7b, 0x72, 0x22, 0x4f, 0x10, 0x5d, 0x79, 0x99, 0x23, 0x1c, 0x5e, 0x55, 0x34, 0xd0, 0x3d, 0xa9, 0xd9, 0xc0, 0xa1, 0x2a, 0xcb, 0x68, 0x46, 0x0c, 0xd3, 0x75, 0xda, 0xf8, 0xe2, 0x43, 0x86, 0x28, 0x6f, 0x96, 0x68, 0xf7, 0x23, 0x26, 0xdb, 0xf9, 0x9b, 0xa0, 0x94, 0x39, 0x24, 0x37, 0xd3, 0x98, 0xe9, 0x5b, 0xb8, 0x16, 0x1d, 0x71, 0x7f, 0x89, 0x91 }, - { 0x55, 0x95, 0xe0, 0x5c, 0x13, 0xa7, 0xec, 0x4d, 0xc8, 0xf4, 0x1f, 0xb7, 0x0c, 0xb5, 0x0a, 0x71, 0xbc, 0xe1, 0x7c, 0x02, 0x4f, 0xf6, 0xde, 0x7a, 0xf6, 0x18, 0xd0, 0xcc, 0x4e, 0x9c, 0x32, 0xd9, 0x57, 0x0d, 0x6d, 0x3e, 0xa4, 0x5b, 0x86, 0x52, 0x54, 0x91, 0x03, 0x0c, 0x0d, 0x8f, 0x2b, 0x18, 0x36, 0xd5, 0x77, 0x8c, 0x1c, 0xe7, 0x35, 0xc1, 0x77, 0x07, 0xdf, 0x36, 0x4d, 0x05, 0x43, 0x47 }, - { 0xce, 0x0f, 0x4f, 0x6a, 0xca, 0x89, 0x59, 0x0a, 0x37, 0xfe, 0x03, 0x4d, 0xd7, 0x4d, 0xd5, 0xfa, 0x65, 0xeb, 0x1c, 0xbd, 0x0a, 0x41, 0x50, 0x8a, 0xad, 0xdc, 0x09, 0x35, 0x1a, 0x3c, 0xea, 0x6d, 0x18, 0xcb, 0x21, 0x89, 0xc5, 0x4b, 0x70, 0x0c, 0x00, 0x9f, 0x4c, 0xbf, 0x05, 0x21, 0xc7, 0xea, 0x01, 0xbe, 0x61, 0xc5, 0xae, 0x09, 0xcb, 0x54, 0xf2, 0x7b, 0xc1, 0xb4, 0x4d, 0x65, 0x8c, 0x82 }, - { 0x7e, 0xe8, 0x0b, 0x06, 0xa2, 0x15, 0xa3, 0xbc, 0xa9, 0x70, 0xc7, 0x7c, 0xda, 0x87, 0x61, 0x82, 0x2b, 0xc1, 0x03, 0xd4, 0x4f, 0xa4, 0xb3, 0x3f, 0x4d, 0x07, 0xdc, 0xb9, 0x97, 0xe3, 0x6d, 0x55, 0x29, 0x8b, 0xce, 0xae, 0x12, 0x24, 0x1b, 0x3f, 0xa0, 0x7f, 0xa6, 0x3b, 0xe5, 0x57, 0x60, 0x68, 0xda, 0x38, 0x7b, 0x8d, 0x58, 0x59, 0xae, 0xab, 0x70, 0x13, 0x69, 0x84, 0x8b, 0x17, 0x6d, 0x42 }, - { 0x94, 0x0a, 0x84, 0xb6, 0xa8, 0x4d, 0x10, 0x9a, 0xab, 0x20, 0x8c, 0x02, 0x4c, 0x6c, 0xe9, 0x64, 0x76, 0x76, 0xba, 0x0a, 0xaa, 0x11, 0xf8, 0x6d, 0xbb, 0x70, 0x18, 0xf9, 0xfd, 0x22, 0x20, 0xa6, 0xd9, 0x01, 0xa9, 0x02, 0x7f, 0x9a, 0xbc, 0xf9, 0x35, 0x37, 0x27, 0x27, 0xcb, 0xf0, 0x9e, 0xbd, 0x61, 0xa2, 0xa2, 0xee, 0xb8, 0x76, 0x53, 0xe8, 0xec, 0xad, 0x1b, 0xab, 0x85, 0xdc, 0x83, 0x27 }, - { 0x20, 0x20, 0xb7, 0x82, 0x64, 0xa8, 0x2d, 0x9f, 0x41, 0x51, 0x14, 0x1a, 0xdb, 0xa8, 0xd4, 0x4b, 0xf2, 0x0c, 0x5e, 0xc0, 0x62, 0xee, 0xe9, 0xb5, 0x95, 0xa1, 0x1f, 0x9e, 0x84, 0x90, 0x1b, 0xf1, 0x48, 0xf2, 0x98, 0xe0, 0xc9, 0xf8, 0x77, 0x7d, 0xcd, 0xbc, 0x7c, 0xc4, 0x67, 0x0a, 0xac, 0x35, 0x6c, 0xc2, 0xad, 0x8c, 0xcb, 0x16, 0x29, 0xf1, 0x6f, 0x6a, 0x76, 0xbc, 0xef, 0xbe, 0xe7, 0x60 }, - { 0xd1, 0xb8, 0x97, 0xb0, 0xe0, 0x75, 0xba, 0x68, 0xab, 0x57, 0x2a, 0xdf, 0x9d, 0x9c, 0x43, 0x66, 0x63, 0xe4, 0x3e, 0xb3, 0xd8, 0xe6, 0x2d, 0x92, 0xfc, 0x49, 0xc9, 0xbe, 0x21, 0x4e, 0x6f, 0x27, 0x87, 0x3f, 0xe2, 0x15, 0xa6, 0x51, 0x70, 0xe6, 0xbe, 0xa9, 0x02, 0x40, 0x8a, 0x25, 0xb4, 0x95, 0x06, 0xf4, 0x7b, 0xab, 0xd0, 0x7c, 0xec, 0xf7, 0x11, 0x3e, 0xc1, 0x0c, 0x5d, 0xd3, 0x12, 0x52 }, - { 0xb1, 0x4d, 0x0c, 0x62, 0xab, 0xfa, 0x46, 0x9a, 0x35, 0x71, 0x77, 0xe5, 0x94, 0xc1, 0x0c, 0x19, 0x42, 0x43, 0xed, 0x20, 0x25, 0xab, 0x8a, 0xa5, 0xad, 0x2f, 0xa4, 0x1a, 0xd3, 0x18, 0xe0, 0xff, 0x48, 0xcd, 0x5e, 0x60, 0xbe, 0xc0, 0x7b, 0x13, 0x63, 0x4a, 0x71, 0x1d, 0x23, 0x26, 0xe4, 0x88, 0xa9, 0x85, 0xf3, 0x1e, 0x31, 0x15, 0x33, 0x99, 0xe7, 0x30, 0x88, 0xef, 0xc8, 0x6a, 0x5c, 0x55 }, - { 0x41, 0x69, 0xc5, 0xcc, 0x80, 0x8d, 0x26, 0x97, 0xdc, 0x2a, 0x82, 0x43, 0x0d, 0xc2, 0x3e, 0x3c, 0xd3, 0x56, 0xdc, 0x70, 0xa9, 0x45, 0x66, 0x81, 0x05, 0x02, 0xb8, 0xd6, 0x55, 0xb3, 0x9a, 0xbf, 0x9e, 0x7f, 0x90, 0x2f, 0xe7, 0x17, 0xe0, 0x38, 0x92, 0x19, 0x85, 0x9e, 0x19, 0x45, 0xdf, 0x1a, 0xf6, 0xad, 0xa4, 0x2e, 0x4c, 0xcd, 0xa5, 0x5a, 0x19, 0x7b, 0x71, 0x00, 0xa3, 0x0c, 0x30, 0xa1 }, - { 0x25, 0x8a, 0x4e, 0xdb, 0x11, 0x3d, 0x66, 0xc8, 0x39, 0xc8, 0xb1, 0xc9, 0x1f, 0x15, 0xf3, 0x5a, 0xde, 0x60, 0x9f, 0x11, 0xcd, 0x7f, 0x86, 0x81, 0xa4, 0x04, 0x5b, 0x9f, 0xef, 0x7b, 0x0b, 0x24, 0xc8, 0x2c, 0xda, 0x06, 0xa5, 0xf2, 0x06, 0x7b, 0x36, 0x88, 0x25, 0xe3, 0x91, 0x4e, 0x53, 0xd6, 0x94, 0x8e, 0xde, 0x92, 0xef, 0xd6, 0xe8, 0x38, 0x7f, 0xa2, 0xe5, 0x37, 0x23, 0x9b, 0x5b, 0xee }, - { 0x79, 0xd2, 0xd8, 0x69, 0x6d, 0x30, 0xf3, 0x0f, 0xb3, 0x46, 0x57, 0x76, 0x11, 0x71, 0xa1, 0x1e, 0x6c, 0x3f, 0x1e, 0x64, 0xcb, 0xe7, 0xbe, 0xbe, 0xe1, 0x59, 0xcb, 0x95, 0xbf, 0xaf, 0x81, 0x2b, 0x4f, 0x41, 0x1e, 0x2f, 0x26, 0xd9, 0xc4, 0x21, 0xdc, 0x2c, 0x28, 0x4a, 0x33, 0x42, 0xd8, 0x23, 0xec, 0x29, 0x38, 0x49, 0xe4, 0x2d, 0x1e, 0x46, 0xb0, 0xa4, 0xac, 0x1e, 0x3c, 0x86, 0xab, 0xaa }, - { 0x8b, 0x94, 0x36, 0x01, 0x0d, 0xc5, 0xde, 0xe9, 0x92, 0xae, 0x38, 0xae, 0xa9, 0x7f, 0x2c, 0xd6, 0x3b, 0x94, 0x6d, 0x94, 0xfe, 0xdd, 0x2e, 0xc9, 0x67, 0x1d, 0xcd, 0xe3, 0xbd, 0x4c, 0xe9, 0x56, 0x4d, 0x55, 0x5c, 0x66, 0xc1, 0x5b, 0xb2, 0xb9, 0x00, 0xdf, 0x72, 0xed, 0xb6, 0xb8, 0x91, 0xeb, 0xca, 0xdf, 0xef, 0xf6, 0x3c, 0x9e, 0xa4, 0x03, 0x6a, 0x99, 0x8b, 0xe7, 0x97, 0x39, 0x81, 0xe7 }, - { 0xc8, 0xf6, 0x8e, 0x69, 0x6e, 0xd2, 0x82, 0x42, 0xbf, 0x99, 0x7f, 0x5b, 0x3b, 0x34, 0x95, 0x95, 0x08, 0xe4, 0x2d, 0x61, 0x38, 0x10, 0xf1, 0xe2, 0xa4, 0x35, 0xc9, 0x6e, 0xd2, 0xff, 0x56, 0x0c, 0x70, 0x22, 0xf3, 0x61, 0xa9, 0x23, 0x4b, 0x98, 0x37, 0xfe, 0xee, 0x90, 0xbf, 0x47, 0x92, 0x2e, 0xe0, 0xfd, 0x5f, 0x8d, 0xdf, 0x82, 0x37, 0x18, 0xd8, 0x6d, 0x1e, 0x16, 0xc6, 0x09, 0x00, 0x71 }, - { 0xb0, 0x2d, 0x3e, 0xee, 0x48, 0x60, 0xd5, 0x86, 0x8b, 0x2c, 0x39, 0xce, 0x39, 0xbf, 0xe8, 0x10, 0x11, 0x29, 0x05, 0x64, 0xdd, 0x67, 0x8c, 0x85, 0xe8, 0x78, 0x3f, 0x29, 0x30, 0x2d, 0xfc, 0x13, 0x99, 0xba, 0x95, 0xb6, 0xb5, 0x3c, 0xd9, 0xeb, 0xbf, 0x40, 0x0c, 0xca, 0x1d, 0xb0, 0xab, 0x67, 0xe1, 0x9a, 0x32, 0x5f, 0x2d, 0x11, 0x58, 0x12, 0xd2, 0x5d, 0x00, 0x97, 0x8a, 0xd1, 0xbc, 0xa4 }, - { 0x76, 0x93, 0xea, 0x73, 0xaf, 0x3a, 0xc4, 0xda, 0xd2, 0x1c, 0xa0, 0xd8, 0xda, 0x85, 0xb3, 0x11, 0x8a, 0x7d, 0x1c, 0x60, 0x24, 0xcf, 0xaf, 0x55, 0x76, 0x99, 0x86, 0x82, 0x17, 0xbc, 0x0c, 0x2f, 0x44, 0xa1, 0x99, 0xbc, 0x6c, 0x0e, 0xdd, 0x51, 0x97, 0x98, 0xba, 0x05, 0xbd, 0x5b, 0x1b, 0x44, 0x84, 0x34, 0x6a, 0x47, 0xc2, 0xca, 0xdf, 0x6b, 0xf3, 0x0b, 0x78, 0x5c, 0xc8, 0x8b, 0x2b, 0xaf }, - { 0xa0, 0xe5, 0xc1, 0xc0, 0x03, 0x1c, 0x02, 0xe4, 0x8b, 0x7f, 0x09, 0xa5, 0xe8, 0x96, 0xee, 0x9a, 0xef, 0x2f, 0x17, 0xfc, 0x9e, 0x18, 0xe9, 0x97, 0xd7, 0xf6, 0xca, 0xc7, 0xae, 0x31, 0x64, 0x22, 0xc2, 0xb1, 0xe7, 0x79, 0x84, 0xe5, 0xf3, 0xa7, 0x3c, 0xb4, 0x5d, 0xee, 0xd5, 0xd3, 0xf8, 0x46, 0x00, 0x10, 0x5e, 0x6e, 0xe3, 0x8f, 0x2d, 0x09, 0x0c, 0x7d, 0x04, 0x42, 0xea, 0x34, 0xc4, 0x6d }, - { 0x41, 0xda, 0xa6, 0xad, 0xcf, 0xdb, 0x69, 0xf1, 0x44, 0x0c, 0x37, 0xb5, 0x96, 0x44, 0x01, 0x65, 0xc1, 0x5a, 0xda, 0x59, 0x68, 0x13, 0xe2, 0xe2, 0x2f, 0x06, 0x0f, 0xcd, 0x55, 0x1f, 0x24, 0xde, 0xe8, 0xe0, 0x4b, 0xa6, 0x89, 0x03, 0x87, 0x88, 0x6c, 0xee, 0xc4, 0xa7, 0xa0, 0xd7, 0xfc, 0x6b, 0x44, 0x50, 0x63, 0x92, 0xec, 0x38, 0x22, 0xc0, 0xd8, 0xc1, 0xac, 0xfc, 0x7d, 0x5a, 0xeb, 0xe8 }, - { 0x14, 0xd4, 0xd4, 0x0d, 0x59, 0x84, 0xd8, 0x4c, 0x5c, 0xf7, 0x52, 0x3b, 0x77, 0x98, 0xb2, 0x54, 0xe2, 0x75, 0xa3, 0xa8, 0xcc, 0x0a, 0x1b, 0xd0, 0x6e, 0xbc, 0x0b, 0xee, 0x72, 0x68, 0x56, 0xac, 0xc3, 0xcb, 0xf5, 0x16, 0xff, 0x66, 0x7c, 0xda, 0x20, 0x58, 0xad, 0x5c, 0x34, 0x12, 0x25, 0x44, 0x60, 0xa8, 0x2c, 0x92, 0x18, 0x70, 0x41, 0x36, 0x3c, 0xc7, 0x7a, 0x4d, 0xc2, 0x15, 0xe4, 0x87 }, - { 0xd0, 0xe7, 0xa1, 0xe2, 0xb9, 0xa4, 0x47, 0xfe, 0xe8, 0x3e, 0x22, 0x77, 0xe9, 0xff, 0x80, 0x10, 0xc2, 0xf3, 0x75, 0xae, 0x12, 0xfa, 0x7a, 0xaa, 0x8c, 0xa5, 0xa6, 0x31, 0x78, 0x68, 0xa2, 0x6a, 0x36, 0x7a, 0x0b, 0x69, 0xfb, 0xc1, 0xcf, 0x32, 0xa5, 0x5d, 0x34, 0xeb, 0x37, 0x06, 0x63, 0x01, 0x6f, 0x3d, 0x21, 0x10, 0x23, 0x0e, 0xba, 0x75, 0x40, 0x28, 0xa5, 0x6f, 0x54, 0xac, 0xf5, 0x7c }, - { 0xe7, 0x71, 0xaa, 0x8d, 0xb5, 0xa3, 0xe0, 0x43, 0xe8, 0x17, 0x8f, 0x39, 0xa0, 0x85, 0x7b, 0xa0, 0x4a, 0x3f, 0x18, 0xe4, 0xaa, 0x05, 0x74, 0x3c, 0xf8, 0xd2, 0x22, 0xb0, 0xb0, 0x95, 0x82, 0x53, 0x50, 0xba, 0x42, 0x2f, 0x63, 0x38, 0x2a, 0x23, 0xd9, 0x2e, 0x41, 0x49, 0x07, 0x4e, 0x81, 0x6a, 0x36, 0xc1, 0xcd, 0x28, 0x28, 0x4d, 0x14, 0x62, 0x67, 0x94, 0x0b, 0x31, 0xf8, 0x81, 0x8e, 0xa2 }, - { 0xfe, 0xb4, 0xfd, 0x6f, 0x9e, 0x87, 0xa5, 0x6b, 0xef, 0x39, 0x8b, 0x32, 0x84, 0xd2, 0xbd, 0xa5, 0xb5, 0xb0, 0xe1, 0x66, 0x58, 0x3a, 0x66, 0xb6, 0x1e, 0x53, 0x84, 0x57, 0xff, 0x05, 0x84, 0x87, 0x2c, 0x21, 0xa3, 0x29, 0x62, 0xb9, 0x92, 0x8f, 0xfa, 0xb5, 0x8d, 0xe4, 0xaf, 0x2e, 0xdd, 0x4e, 0x15, 0xd8, 0xb3, 0x55, 0x70, 0x52, 0x32, 0x07, 0xff, 0x4e, 0x2a, 0x5a, 0xa7, 0x75, 0x4c, 0xaa }, - { 0x46, 0x2f, 0x17, 0xbf, 0x00, 0x5f, 0xb1, 0xc1, 0xb9, 0xe6, 0x71, 0x77, 0x9f, 0x66, 0x52, 0x09, 0xec, 0x28, 0x73, 0xe3, 0xe4, 0x11, 0xf9, 0x8d, 0xab, 0xf2, 0x40, 0xa1, 0xd5, 0xec, 0x3f, 0x95, 0xce, 0x67, 0x96, 0xb6, 0xfc, 0x23, 0xfe, 0x17, 0x19, 0x03, 0xb5, 0x02, 0x02, 0x34, 0x67, 0xde, 0xc7, 0x27, 0x3f, 0xf7, 0x48, 0x79, 0xb9, 0x29, 0x67, 0xa2, 0xa4, 0x3a, 0x5a, 0x18, 0x3d, 0x33 }, - { 0xd3, 0x33, 0x81, 0x93, 0xb6, 0x45, 0x53, 0xdb, 0xd3, 0x8d, 0x14, 0x4b, 0xea, 0x71, 0xc5, 0x91, 0x5b, 0xb1, 0x10, 0xe2, 0xd8, 0x81, 0x80, 0xdb, 0xc5, 0xdb, 0x36, 0x4f, 0xd6, 0x17, 0x1d, 0xf3, 0x17, 0xfc, 0x72, 0x68, 0x83, 0x1b, 0x5a, 0xef, 0x75, 0xe4, 0x34, 0x2b, 0x2f, 0xad, 0x87, 0x97, 0xba, 0x39, 0xed, 0xdc, 0xef, 0x80, 0xe6, 0xec, 0x08, 0x15, 0x93, 0x50, 0xb1, 0xad, 0x69, 0x6d }, - { 0xe1, 0x59, 0x0d, 0x58, 0x5a, 0x3d, 0x39, 0xf7, 0xcb, 0x59, 0x9a, 0xbd, 0x47, 0x90, 0x70, 0x96, 0x64, 0x09, 0xa6, 0x84, 0x6d, 0x43, 0x77, 0xac, 0xf4, 0x47, 0x1d, 0x06, 0x5d, 0x5d, 0xb9, 0x41, 0x29, 0xcc, 0x9b, 0xe9, 0x25, 0x73, 0xb0, 0x5e, 0xd2, 0x26, 0xbe, 0x1e, 0x9b, 0x7c, 0xb0, 0xca, 0xbe, 0x87, 0x91, 0x85, 0x89, 0xf8, 0x0d, 0xad, 0xd4, 0xef, 0x5e, 0xf2, 0x5a, 0x93, 0xd2, 0x8e }, - { 0xf8, 0xf3, 0x72, 0x6a, 0xc5, 0xa2, 0x6c, 0xc8, 0x01, 0x32, 0x49, 0x3a, 0x6f, 0xed, 0xcb, 0x0e, 0x60, 0x76, 0x0c, 0x09, 0xcf, 0xc8, 0x4c, 0xad, 0x17, 0x81, 0x75, 0x98, 0x68, 0x19, 0x66, 0x5e, 0x76, 0x84, 0x2d, 0x7b, 0x9f, 0xed, 0xf7, 0x6d, 0xdd, 0xeb, 0xf5, 0xd3, 0xf5, 0x6f, 0xaa, 0xad, 0x44, 0x77, 0x58, 0x7a, 0xf2, 0x16, 0x06, 0xd3, 0x96, 0xae, 0x57, 0x0d, 0x8e, 0x71, 0x9a, 0xf2 }, - { 0x30, 0x18, 0x60, 0x55, 0xc0, 0x79, 0x49, 0x94, 0x81, 0x83, 0xc8, 0x50, 0xe9, 0xa7, 0x56, 0xcc, 0x09, 0x93, 0x7e, 0x24, 0x7d, 0x9d, 0x92, 0x8e, 0x86, 0x9e, 0x20, 0xba, 0xfc, 0x3c, 0xd9, 0x72, 0x17, 0x19, 0xd3, 0x4e, 0x04, 0xa0, 0x89, 0x9b, 0x92, 0xc7, 0x36, 0x08, 0x45, 0x50, 0x18, 0x68, 0x86, 0xef, 0xba, 0x2e, 0x79, 0x0d, 0x8b, 0xe6, 0xeb, 0xf0, 0x40, 0xb2, 0x09, 0xc4, 0x39, 0xa4 }, - { 0xf3, 0xc4, 0x27, 0x6c, 0xb8, 0x63, 0x63, 0x77, 0x12, 0xc2, 0x41, 0xc4, 0x44, 0xc5, 0xcc, 0x1e, 0x35, 0x54, 0xe0, 0xfd, 0xdb, 0x17, 0x4d, 0x03, 0x58, 0x19, 0xdd, 0x83, 0xeb, 0x70, 0x0b, 0x4c, 0xe8, 0x8d, 0xf3, 0xab, 0x38, 0x41, 0xba, 0x02, 0x08, 0x5e, 0x1a, 0x99, 0xb4, 0xe1, 0x73, 0x10, 0xc5, 0x34, 0x10, 0x75, 0xc0, 0x45, 0x8b, 0xa3, 0x76, 0xc9, 0x5a, 0x68, 0x18, 0xfb, 0xb3, 0xe2 }, - { 0x0a, 0xa0, 0x07, 0xc4, 0xdd, 0x9d, 0x58, 0x32, 0x39, 0x30, 0x40, 0xa1, 0x58, 0x3c, 0x93, 0x0b, 0xca, 0x7d, 0xc5, 0xe7, 0x7e, 0xa5, 0x3a, 0xdd, 0x7e, 0x2b, 0x3f, 0x7c, 0x8e, 0x23, 0x13, 0x68, 0x04, 0x35, 0x20, 0xd4, 0xa3, 0xef, 0x53, 0xc9, 0x69, 0xb6, 0xbb, 0xfd, 0x02, 0x59, 0x46, 0xf6, 0x32, 0xbd, 0x7f, 0x76, 0x5d, 0x53, 0xc2, 0x10, 0x03, 0xb8, 0xf9, 0x83, 0xf7, 0x5e, 0x2a, 0x6a }, - { 0x08, 0xe9, 0x46, 0x47, 0x20, 0x53, 0x3b, 0x23, 0xa0, 0x4e, 0xc2, 0x4f, 0x7a, 0xe8, 0xc1, 0x03, 0x14, 0x5f, 0x76, 0x53, 0x87, 0xd7, 0x38, 0x77, 0x7d, 0x3d, 0x34, 0x34, 0x77, 0xfd, 0x1c, 0x58, 0xdb, 0x05, 0x21, 0x42, 0xca, 0xb7, 0x54, 0xea, 0x67, 0x43, 0x78, 0xe1, 0x87, 0x66, 0xc5, 0x35, 0x42, 0xf7, 0x19, 0x70, 0x17, 0x1c, 0xc4, 0xf8, 0x16, 0x94, 0x24, 0x6b, 0x71, 0x7d, 0x75, 0x64 }, - { 0xd3, 0x7f, 0xf7, 0xad, 0x29, 0x79, 0x93, 0xe7, 0xec, 0x21, 0xe0, 0xf1, 0xb4, 0xb5, 0xae, 0x71, 0x9c, 0xdc, 0x83, 0xc5, 0xdb, 0x68, 0x75, 0x27, 0xf2, 0x75, 0x16, 0xcb, 0xff, 0xa8, 0x22, 0x88, 0x8a, 0x68, 0x10, 0xee, 0x5c, 0x1c, 0xa7, 0xbf, 0xe3, 0x32, 0x11, 0x19, 0xbe, 0x1a, 0xb7, 0xbf, 0xa0, 0xa5, 0x02, 0x67, 0x1c, 0x83, 0x29, 0x49, 0x4d, 0xf7, 0xad, 0x6f, 0x52, 0x2d, 0x44, 0x0f }, - { 0xdd, 0x90, 0x42, 0xf6, 0xe4, 0x64, 0xdc, 0xf8, 0x6b, 0x12, 0x62, 0xf6, 0xac, 0xcf, 0xaf, 0xbd, 0x8c, 0xfd, 0x90, 0x2e, 0xd3, 0xed, 0x89, 0xab, 0xf7, 0x8f, 0xfa, 0x48, 0x2d, 0xbd, 0xee, 0xb6, 0x96, 0x98, 0x42, 0x39, 0x4c, 0x9a, 0x11, 0x68, 0xae, 0x3d, 0x48, 0x1a, 0x01, 0x78, 0x42, 0xf6, 0x60, 0x00, 0x2d, 0x42, 0x44, 0x7c, 0x6b, 0x22, 0xf7, 0xb7, 0x2f, 0x21, 0xaa, 0xe0, 0x21, 0xc9 }, - { 0xbd, 0x96, 0x5b, 0xf3, 0x1e, 0x87, 0xd7, 0x03, 0x27, 0x53, 0x6f, 0x2a, 0x34, 0x1c, 0xeb, 0xc4, 0x76, 0x8e, 0xca, 0x27, 0x5f, 0xa0, 0x5e, 0xf9, 0x8f, 0x7f, 0x1b, 0x71, 0xa0, 0x35, 0x12, 0x98, 0xde, 0x00, 0x6f, 0xba, 0x73, 0xfe, 0x67, 0x33, 0xed, 0x01, 0xd7, 0x58, 0x01, 0xb4, 0xa9, 0x28, 0xe5, 0x42, 0x31, 0xb3, 0x8e, 0x38, 0xc5, 0x62, 0xb2, 0xe3, 0x3e, 0xa1, 0x28, 0x49, 0x92, 0xfa }, - { 0x65, 0x67, 0x6d, 0x80, 0x06, 0x17, 0x97, 0x2f, 0xbd, 0x87, 0xe4, 0xb9, 0x51, 0x4e, 0x1c, 0x67, 0x40, 0x2b, 0x7a, 0x33, 0x10, 0x96, 0xd3, 0xbf, 0xac, 0x22, 0xf1, 0xab, 0xb9, 0x53, 0x74, 0xab, 0xc9, 0x42, 0xf1, 0x6e, 0x9a, 0xb0, 0xea, 0xd3, 0x3b, 0x87, 0xc9, 0x19, 0x68, 0xa6, 0xe5, 0x09, 0xe1, 0x19, 0xff, 0x07, 0x78, 0x7b, 0x3e, 0xf4, 0x83, 0xe1, 0xdc, 0xdc, 0xcf, 0x6e, 0x30, 0x22 }, - { 0x93, 0x9f, 0xa1, 0x89, 0x69, 0x9c, 0x5d, 0x2c, 0x81, 0xdd, 0xd1, 0xff, 0xc1, 0xfa, 0x20, 0x7c, 0x97, 0x0b, 0x6a, 0x36, 0x85, 0xbb, 0x29, 0xce, 0x1d, 0x3e, 0x99, 0xd4, 0x2f, 0x2f, 0x74, 0x42, 0xda, 0x53, 0xe9, 0x5a, 0x72, 0x90, 0x73, 0x14, 0xf4, 0x58, 0x83, 0x99, 0xa3, 0xff, 0x5b, 0x0a, 0x92, 0xbe, 0xb3, 0xf6, 0xbe, 0x26, 0x94, 0xf9, 0xf8, 0x6e, 0xcf, 0x29, 0x52, 0xd5, 0xb4, 0x1c }, - { 0xc5, 0x16, 0x54, 0x17, 0x01, 0x86, 0x3f, 0x91, 0x00, 0x5f, 0x31, 0x41, 0x08, 0xce, 0xec, 0xe3, 0xc6, 0x43, 0xe0, 0x4f, 0xc8, 0xc4, 0x2f, 0xd2, 0xff, 0x55, 0x62, 0x20, 0xe6, 0x16, 0xaa, 0xa6, 0xa4, 0x8a, 0xeb, 0x97, 0xa8, 0x4b, 0xad, 0x74, 0x78, 0x2e, 0x8d, 0xff, 0x96, 0xa1, 0xa2, 0xfa, 0x94, 0x93, 0x39, 0xd7, 0x22, 0xed, 0xca, 0xa3, 0x2b, 0x57, 0x06, 0x70, 0x41, 0xdf, 0x88, 0xcc }, - { 0x98, 0x7f, 0xd6, 0xe0, 0xd6, 0x85, 0x7c, 0x55, 0x3e, 0xae, 0xbb, 0x3d, 0x34, 0x97, 0x0a, 0x2c, 0x2f, 0x6e, 0x89, 0xa3, 0x54, 0x8f, 0x49, 0x25, 0x21, 0x72, 0x2b, 0x80, 0xa1, 0xc2, 0x1a, 0x15, 0x38, 0x92, 0x34, 0x6d, 0x2c, 0xba, 0x64, 0x44, 0x21, 0x2d, 0x56, 0xda, 0x9a, 0x26, 0xe3, 0x24, 0xdc, 0xcb, 0xc0, 0xdc, 0xde, 0x85, 0xd4, 0xd2, 0xee, 0x43, 0x99, 0xee, 0xc5, 0xa6, 0x4e, 0x8f }, - { 0xae, 0x56, 0xde, 0xb1, 0xc2, 0x32, 0x8d, 0x9c, 0x40, 0x17, 0x70, 0x6b, 0xce, 0x6e, 0x99, 0xd4, 0x13, 0x49, 0x05, 0x3b, 0xa9, 0xd3, 0x36, 0xd6, 0x77, 0xc4, 0xc2, 0x7d, 0x9f, 0xd5, 0x0a, 0xe6, 0xae, 0xe1, 0x7e, 0x85, 0x31, 0x54, 0xe1, 0xf4, 0xfe, 0x76, 0x72, 0x34, 0x6d, 0xa2, 0xea, 0xa3, 0x1e, 0xea, 0x53, 0xfc, 0xf2, 0x4a, 0x22, 0x80, 0x4f, 0x11, 0xd0, 0x3d, 0xa6, 0xab, 0xfc, 0x2b }, - { 0x49, 0xd6, 0xa6, 0x08, 0xc9, 0xbd, 0xe4, 0x49, 0x18, 0x70, 0x49, 0x85, 0x72, 0xac, 0x31, 0xaa, 0xc3, 0xfa, 0x40, 0x93, 0x8b, 0x38, 0xa7, 0x81, 0x8f, 0x72, 0x38, 0x3e, 0xb0, 0x40, 0xad, 0x39, 0x53, 0x2b, 0xc0, 0x65, 0x71, 0xe1, 0x3d, 0x76, 0x7e, 0x69, 0x45, 0xab, 0x77, 0xc0, 0xbd, 0xc3, 0xb0, 0x28, 0x42, 0x53, 0x34, 0x3f, 0x9f, 0x6c, 0x12, 0x44, 0xeb, 0xf2, 0xff, 0x0d, 0xf8, 0x66 }, - { 0xda, 0x58, 0x2a, 0xd8, 0xc5, 0x37, 0x0b, 0x44, 0x69, 0xaf, 0x86, 0x2a, 0xa6, 0x46, 0x7a, 0x22, 0x93, 0xb2, 0xb2, 0x8b, 0xd8, 0x0a, 0xe0, 0xe9, 0x1f, 0x42, 0x5a, 0xd3, 0xd4, 0x72, 0x49, 0xfd, 0xf9, 0x88, 0x25, 0xcc, 0x86, 0xf1, 0x40, 0x28, 0xc3, 0x30, 0x8c, 0x98, 0x04, 0xc7, 0x8b, 0xfe, 0xee, 0xee, 0x46, 0x14, 0x44, 0xce, 0x24, 0x36, 0x87, 0xe1, 0xa5, 0x05, 0x22, 0x45, 0x6a, 0x1d }, - { 0xd5, 0x26, 0x6a, 0xa3, 0x33, 0x11, 0x94, 0xae, 0xf8, 0x52, 0xee, 0xd8, 0x6d, 0x7b, 0x5b, 0x26, 0x33, 0xa0, 0xaf, 0x1c, 0x73, 0x59, 0x06, 0xf2, 0xe1, 0x32, 0x79, 0xf1, 0x49, 0x31, 0xa9, 0xfc, 0x3b, 0x0e, 0xac, 0x5c, 0xe9, 0x24, 0x52, 0x73, 0xbd, 0x1a, 0xa9, 0x29, 0x05, 0xab, 0xe1, 0x62, 0x78, 0xef, 0x7e, 0xfd, 0x47, 0x69, 0x47, 0x89, 0xa7, 0x28, 0x3b, 0x77, 0xda, 0x3c, 0x70, 0xf8 }, - { 0x29, 0x62, 0x73, 0x4c, 0x28, 0x25, 0x21, 0x86, 0xa9, 0xa1, 0x11, 0x1c, 0x73, 0x2a, 0xd4, 0xde, 0x45, 0x06, 0xd4, 0xb4, 0x48, 0x09, 0x16, 0x30, 0x3e, 0xb7, 0x99, 0x1d, 0x65, 0x9c, 0xcd, 0xa0, 0x7a, 0x99, 0x11, 0x91, 0x4b, 0xc7, 0x5c, 0x41, 0x8a, 0xb7, 0xa4, 0x54, 0x17, 0x57, 0xad, 0x05, 0x47, 0x96, 0xe2, 0x67, 0x97, 0xfe, 0xaf, 0x36, 0xe9, 0xf6, 0xad, 0x43, 0xf1, 0x4b, 0x35, 0xa4 }, - { 0xe8, 0xb7, 0x9e, 0xc5, 0xd0, 0x6e, 0x11, 0x1b, 0xdf, 0xaf, 0xd7, 0x1e, 0x9f, 0x57, 0x60, 0xf0, 0x0a, 0xc8, 0xac, 0x5d, 0x8b, 0xf7, 0x68, 0xf9, 0xff, 0x6f, 0x08, 0xb8, 0xf0, 0x26, 0x09, 0x6b, 0x1c, 0xc3, 0xa4, 0xc9, 0x73, 0x33, 0x30, 0x19, 0xf1, 0xe3, 0x55, 0x3e, 0x77, 0xda, 0x3f, 0x98, 0xcb, 0x9f, 0x54, 0x2e, 0x0a, 0x90, 0xe5, 0xf8, 0xa9, 0x40, 0xcc, 0x58, 0xe5, 0x98, 0x44, 0xb3 }, - { 0xdf, 0xb3, 0x20, 0xc4, 0x4f, 0x9d, 0x41, 0xd1, 0xef, 0xdc, 0xc0, 0x15, 0xf0, 0x8d, 0xd5, 0x53, 0x9e, 0x52, 0x6e, 0x39, 0xc8, 0x7d, 0x50, 0x9a, 0xe6, 0x81, 0x2a, 0x96, 0x9e, 0x54, 0x31, 0xbf, 0x4f, 0xa7, 0xd9, 0x1f, 0xfd, 0x03, 0xb9, 0x81, 0xe0, 0xd5, 0x44, 0xcf, 0x72, 0xd7, 0xb1, 0xc0, 0x37, 0x4f, 0x88, 0x01, 0x48, 0x2e, 0x6d, 0xea, 0x2e, 0xf9, 0x03, 0x87, 0x7e, 0xba, 0x67, 0x5e }, - { 0xd8, 0x86, 0x75, 0x11, 0x8f, 0xdb, 0x55, 0xa5, 0xfb, 0x36, 0x5a, 0xc2, 0xaf, 0x1d, 0x21, 0x7b, 0xf5, 0x26, 0xce, 0x1e, 0xe9, 0xc9, 0x4b, 0x2f, 0x00, 0x90, 0xb2, 0xc5, 0x8a, 0x06, 0xca, 0x58, 0x18, 0x7d, 0x7f, 0xe5, 0x7c, 0x7b, 0xed, 0x9d, 0x26, 0xfc, 0xa0, 0x67, 0xb4, 0x11, 0x0e, 0xef, 0xcd, 0x9a, 0x0a, 0x34, 0x5d, 0xe8, 0x72, 0xab, 0xe2, 0x0d, 0xe3, 0x68, 0x00, 0x1b, 0x07, 0x45 }, - { 0xb8, 0x93, 0xf2, 0xfc, 0x41, 0xf7, 0xb0, 0xdd, 0x6e, 0x2f, 0x6a, 0xa2, 0xe0, 0x37, 0x0c, 0x0c, 0xff, 0x7d, 0xf0, 0x9e, 0x3a, 0xcf, 0xcc, 0x0e, 0x92, 0x0b, 0x6e, 0x6f, 0xad, 0x0e, 0xf7, 0x47, 0xc4, 0x06, 0x68, 0x41, 0x7d, 0x34, 0x2b, 0x80, 0xd2, 0x35, 0x1e, 0x8c, 0x17, 0x5f, 0x20, 0x89, 0x7a, 0x06, 0x2e, 0x97, 0x65, 0xe6, 0xc6, 0x7b, 0x53, 0x9b, 0x6b, 0xa8, 0xb9, 0x17, 0x05, 0x45 }, - { 0x6c, 0x67, 0xec, 0x56, 0x97, 0xac, 0xcd, 0x23, 0x5c, 0x59, 0xb4, 0x86, 0xd7, 0xb7, 0x0b, 0xae, 0xed, 0xcb, 0xd4, 0xaa, 0x64, 0xeb, 0xd4, 0xee, 0xf3, 0xc7, 0xea, 0xc1, 0x89, 0x56, 0x1a, 0x72, 0x62, 0x50, 0xae, 0xc4, 0xd4, 0x8c, 0xad, 0xca, 0xfb, 0xbe, 0x2c, 0xe3, 0xc1, 0x6c, 0xe2, 0xd6, 0x91, 0xa8, 0xcc, 0xe0, 0x6e, 0x88, 0x79, 0x55, 0x6d, 0x44, 0x83, 0xed, 0x71, 0x65, 0xc0, 0x63 }, - { 0xf1, 0xaa, 0x2b, 0x04, 0x4f, 0x8f, 0x0c, 0x63, 0x8a, 0x3f, 0x36, 0x2e, 0x67, 0x7b, 0x5d, 0x89, 0x1d, 0x6f, 0xd2, 0xab, 0x07, 0x65, 0xf6, 0xee, 0x1e, 0x49, 0x87, 0xde, 0x05, 0x7e, 0xad, 0x35, 0x78, 0x83, 0xd9, 0xb4, 0x05, 0xb9, 0xd6, 0x09, 0xee, 0xa1, 0xb8, 0x69, 0xd9, 0x7f, 0xb1, 0x6d, 0x9b, 0x51, 0x01, 0x7c, 0x55, 0x3f, 0x3b, 0x93, 0xc0, 0xa1, 0xe0, 0xf1, 0x29, 0x6f, 0xed, 0xcd }, - { 0xcb, 0xaa, 0x25, 0x95, 0x72, 0xd4, 0xae, 0xbf, 0xc1, 0x91, 0x7a, 0xcd, 0xdc, 0x58, 0x2b, 0x9f, 0x8d, 0xfa, 0xa9, 0x28, 0xa1, 0x98, 0xca, 0x7a, 0xcd, 0x0f, 0x2a, 0xa7, 0x6a, 0x13, 0x4a, 0x90, 0x25, 0x2e, 0x62, 0x98, 0xa6, 0x5b, 0x08, 0x18, 0x6a, 0x35, 0x0d, 0x5b, 0x76, 0x26, 0x69, 0x9f, 0x8c, 0xb7, 0x21, 0xa3, 0xea, 0x59, 0x21, 0xb7, 0x53, 0xae, 0x3a, 0x2d, 0xce, 0x24, 0xba, 0x3a }, - { 0xfa, 0x15, 0x49, 0xc9, 0x79, 0x6c, 0xd4, 0xd3, 0x03, 0xdc, 0xf4, 0x52, 0xc1, 0xfb, 0xd5, 0x74, 0x4f, 0xd9, 0xb9, 0xb4, 0x70, 0x03, 0xd9, 0x20, 0xb9, 0x2d, 0xe3, 0x48, 0x39, 0xd0, 0x7e, 0xf2, 0xa2, 0x9d, 0xed, 0x68, 0xf6, 0xfc, 0x9e, 0x6c, 0x45, 0xe0, 0x71, 0xa2, 0xe4, 0x8b, 0xd5, 0x0c, 0x50, 0x84, 0xe9, 0x6b, 0x65, 0x7d, 0xd0, 0x40, 0x40, 0x45, 0xa1, 0xdd, 0xef, 0xe2, 0x82, 0xed }, - { 0x5c, 0xf2, 0xac, 0x89, 0x7a, 0xb4, 0x44, 0xdc, 0xb5, 0xc8, 0xd8, 0x7c, 0x49, 0x5d, 0xbd, 0xb3, 0x4e, 0x18, 0x38, 0xb6, 0xb6, 0x29, 0x42, 0x7c, 0xaa, 0x51, 0x70, 0x2a, 0xd0, 0xf9, 0x68, 0x85, 0x25, 0xf1, 0x3b, 0xec, 0x50, 0x3a, 0x3c, 0x3a, 0x2c, 0x80, 0xa6, 0x5e, 0x0b, 0x57, 0x15, 0xe8, 0xaf, 0xab, 0x00, 0xff, 0xa5, 0x6e, 0xc4, 0x55, 0xa4, 0x9a, 0x1a, 0xd3, 0x0a, 0xa2, 0x4f, 0xcd }, - { 0x9a, 0xaf, 0x80, 0x20, 0x7b, 0xac, 0xe1, 0x7b, 0xb7, 0xab, 0x14, 0x57, 0x57, 0xd5, 0x69, 0x6b, 0xde, 0x32, 0x40, 0x6e, 0xf2, 0x2b, 0x44, 0x29, 0x2e, 0xf6, 0x5d, 0x45, 0x19, 0xc3, 0xbb, 0x2a, 0xd4, 0x1a, 0x59, 0xb6, 0x2c, 0xc3, 0xe9, 0x4b, 0x6f, 0xa9, 0x6d, 0x32, 0xa7, 0xfa, 0xad, 0xae, 0x28, 0xaf, 0x7d, 0x35, 0x09, 0x72, 0x19, 0xaa, 0x3f, 0xd8, 0xcd, 0xa3, 0x1e, 0x40, 0xc2, 0x75 }, - { 0xaf, 0x88, 0xb1, 0x63, 0x40, 0x2c, 0x86, 0x74, 0x5c, 0xb6, 0x50, 0xc2, 0x98, 0x8f, 0xb9, 0x52, 0x11, 0xb9, 0x4b, 0x03, 0xef, 0x29, 0x0e, 0xed, 0x96, 0x62, 0x03, 0x42, 0x41, 0xfd, 0x51, 0xcf, 0x39, 0x8f, 0x80, 0x73, 0xe3, 0x69, 0x35, 0x4c, 0x43, 0xea, 0xe1, 0x05, 0x2f, 0x9b, 0x63, 0xb0, 0x81, 0x91, 0xca, 0xa1, 0x38, 0xaa, 0x54, 0xfe, 0xa8, 0x89, 0xcc, 0x70, 0x24, 0x23, 0x68, 0x97 }, - { 0x48, 0xfa, 0x7d, 0x64, 0xe1, 0xce, 0xee, 0x27, 0xb9, 0x86, 0x4d, 0xb5, 0xad, 0xa4, 0xb5, 0x3d, 0x00, 0xc9, 0xbc, 0x76, 0x26, 0x55, 0x58, 0x13, 0xd3, 0xcd, 0x67, 0x30, 0xab, 0x3c, 0xc0, 0x6f, 0xf3, 0x42, 0xd7, 0x27, 0x90, 0x5e, 0x33, 0x17, 0x1b, 0xde, 0x6e, 0x84, 0x76, 0xe7, 0x7f, 0xb1, 0x72, 0x08, 0x61, 0xe9, 0x4b, 0x73, 0xa2, 0xc5, 0x38, 0xd2, 0x54, 0x74, 0x62, 0x85, 0xf4, 0x30 }, - { 0x0e, 0x6f, 0xd9, 0x7a, 0x85, 0xe9, 0x04, 0xf8, 0x7b, 0xfe, 0x85, 0xbb, 0xeb, 0x34, 0xf6, 0x9e, 0x1f, 0x18, 0x10, 0x5c, 0xf4, 0xed, 0x4f, 0x87, 0xae, 0xc3, 0x6c, 0x6e, 0x8b, 0x5f, 0x68, 0xbd, 0x2a, 0x6f, 0x3d, 0xc8, 0xa9, 0xec, 0xb2, 0xb6, 0x1d, 0xb4, 0xee, 0xdb, 0x6b, 0x2e, 0xa1, 0x0b, 0xf9, 0xcb, 0x02, 0x51, 0xfb, 0x0f, 0x8b, 0x34, 0x4a, 0xbf, 0x7f, 0x36, 0x6b, 0x6d, 0xe5, 0xab }, - { 0x06, 0x62, 0x2d, 0xa5, 0x78, 0x71, 0x76, 0x28, 0x7f, 0xdc, 0x8f, 0xed, 0x44, 0x0b, 0xad, 0x18, 0x7d, 0x83, 0x00, 0x99, 0xc9, 0x4e, 0x6d, 0x04, 0xc8, 0xe9, 0xc9, 0x54, 0xcd, 0xa7, 0x0c, 0x8b, 0xb9, 0xe1, 0xfc, 0x4a, 0x6d, 0x0b, 0xaa, 0x83, 0x1b, 0x9b, 0x78, 0xef, 0x66, 0x48, 0x68, 0x1a, 0x48, 0x67, 0xa1, 0x1d, 0xa9, 0x3e, 0xe3, 0x6e, 0x5e, 0x6a, 0x37, 0xd8, 0x7f, 0xc6, 0x3f, 0x6f }, - { 0x1d, 0xa6, 0x77, 0x2b, 0x58, 0xfa, 0xbf, 0x9c, 0x61, 0xf6, 0x8d, 0x41, 0x2c, 0x82, 0xf1, 0x82, 0xc0, 0x23, 0x6d, 0x7d, 0x57, 0x5e, 0xf0, 0xb5, 0x8d, 0xd2, 0x24, 0x58, 0xd6, 0x43, 0xcd, 0x1d, 0xfc, 0x93, 0xb0, 0x38, 0x71, 0xc3, 0x16, 0xd8, 0x43, 0x0d, 0x31, 0x29, 0x95, 0xd4, 0x19, 0x7f, 0x08, 0x74, 0xc9, 0x91, 0x72, 0xba, 0x00, 0x4a, 0x01, 0xee, 0x29, 0x5a, 0xba, 0xc2, 0x4e, 0x46 }, - { 0x3c, 0xd2, 0xd9, 0x32, 0x0b, 0x7b, 0x1d, 0x5f, 0xb9, 0xaa, 0xb9, 0x51, 0xa7, 0x60, 0x23, 0xfa, 0x66, 0x7b, 0xe1, 0x4a, 0x91, 0x24, 0xe3, 0x94, 0x51, 0x39, 0x18, 0xa3, 0xf4, 0x40, 0x96, 0xae, 0x49, 0x04, 0xba, 0x0f, 0xfc, 0x15, 0x0b, 0x63, 0xbc, 0x7a, 0xb1, 0xee, 0xb9, 0xa6, 0xe2, 0x57, 0xe5, 0xc8, 0xf0, 0x00, 0xa7, 0x03, 0x94, 0xa5, 0xaf, 0xd8, 0x42, 0x71, 0x5d, 0xe1, 0x5f, 0x29 }, - { 0x04, 0xcd, 0xc1, 0x4f, 0x74, 0x34, 0xe0, 0xb4, 0xbe, 0x70, 0xcb, 0x41, 0xdb, 0x4c, 0x77, 0x9a, 0x88, 0xea, 0xef, 0x6a, 0xcc, 0xeb, 0xcb, 0x41, 0xf2, 0xd4, 0x2f, 0xff, 0xe7, 0xf3, 0x2a, 0x8e, 0x28, 0x1b, 0x5c, 0x10, 0x3a, 0x27, 0x02, 0x1d, 0x0d, 0x08, 0x36, 0x22, 0x50, 0x75, 0x3c, 0xdf, 0x70, 0x29, 0x21, 0x95, 0xa5, 0x3a, 0x48, 0x72, 0x8c, 0xeb, 0x58, 0x44, 0xc2, 0xd9, 0x8b, 0xab }, - { 0x90, 0x71, 0xb7, 0xa8, 0xa0, 0x75, 0xd0, 0x09, 0x5b, 0x8f, 0xb3, 0xae, 0x51, 0x13, 0x78, 0x57, 0x35, 0xab, 0x98, 0xe2, 0xb5, 0x2f, 0xaf, 0x91, 0xd5, 0xb8, 0x9e, 0x44, 0xaa, 0xc5, 0xb5, 0xd4, 0xeb, 0xbf, 0x91, 0x22, 0x3b, 0x0f, 0xf4, 0xc7, 0x19, 0x05, 0xda, 0x55, 0x34, 0x2e, 0x64, 0x65, 0x5d, 0x6e, 0xf8, 0xc8, 0x9a, 0x47, 0x68, 0xc3, 0xf9, 0x3a, 0x6d, 0xc0, 0x36, 0x6b, 0x5b, 0xc8 }, - { 0xeb, 0xb3, 0x02, 0x40, 0xdd, 0x96, 0xc7, 0xbc, 0x8d, 0x0a, 0xbe, 0x49, 0xaa, 0x4e, 0xdc, 0xbb, 0x4a, 0xfd, 0xc5, 0x1f, 0xf9, 0xaa, 0xf7, 0x20, 0xd3, 0xf9, 0xe7, 0xfb, 0xb0, 0xf9, 0xc6, 0xd6, 0x57, 0x13, 0x50, 0x50, 0x17, 0x69, 0xfc, 0x4e, 0xbd, 0x0b, 0x21, 0x41, 0x24, 0x7f, 0xf4, 0x00, 0xd4, 0xfd, 0x4b, 0xe4, 0x14, 0xed, 0xf3, 0x77, 0x57, 0xbb, 0x90, 0xa3, 0x2a, 0xc5, 0xc6, 0x5a }, - { 0x85, 0x32, 0xc5, 0x8b, 0xf3, 0xc8, 0x01, 0x5d, 0x9d, 0x1c, 0xbe, 0x00, 0xee, 0xf1, 0xf5, 0x08, 0x2f, 0x8f, 0x36, 0x32, 0xfb, 0xe9, 0xf1, 0xed, 0x4f, 0x9d, 0xfb, 0x1f, 0xa7, 0x9e, 0x82, 0x83, 0x06, 0x6d, 0x77, 0xc4, 0x4c, 0x4a, 0xf9, 0x43, 0xd7, 0x6b, 0x30, 0x03, 0x64, 0xae, 0xcb, 0xd0, 0x64, 0x8c, 0x8a, 0x89, 0x39, 0xbd, 0x20, 0x41, 0x23, 0xf4, 0xb5, 0x62, 0x60, 0x42, 0x2d, 0xec }, - { 0xfe, 0x98, 0x46, 0xd6, 0x4f, 0x7c, 0x77, 0x08, 0x69, 0x6f, 0x84, 0x0e, 0x2d, 0x76, 0xcb, 0x44, 0x08, 0xb6, 0x59, 0x5c, 0x2f, 0x81, 0xec, 0x6a, 0x28, 0xa7, 0xf2, 0xf2, 0x0c, 0xb8, 0x8c, 0xfe, 0x6a, 0xc0, 0xb9, 0xe9, 0xb8, 0x24, 0x4f, 0x08, 0xbd, 0x70, 0x95, 0xc3, 0x50, 0xc1, 0xd0, 0x84, 0x2f, 0x64, 0xfb, 0x01, 0xbb, 0x7f, 0x53, 0x2d, 0xfc, 0xd4, 0x73, 0x71, 0xb0, 0xae, 0xeb, 0x79 }, - { 0x28, 0xf1, 0x7e, 0xa6, 0xfb, 0x6c, 0x42, 0x09, 0x2d, 0xc2, 0x64, 0x25, 0x7e, 0x29, 0x74, 0x63, 0x21, 0xfb, 0x5b, 0xda, 0xea, 0x98, 0x73, 0xc2, 0xa7, 0xfa, 0x9d, 0x8f, 0x53, 0x81, 0x8e, 0x89, 0x9e, 0x16, 0x1b, 0xc7, 0x7d, 0xfe, 0x80, 0x90, 0xaf, 0xd8, 0x2b, 0xf2, 0x26, 0x6c, 0x5c, 0x1b, 0xc9, 0x30, 0xa8, 0xd1, 0x54, 0x76, 0x24, 0x43, 0x9e, 0x66, 0x2e, 0xf6, 0x95, 0xf2, 0x6f, 0x24 }, - { 0xec, 0x6b, 0x7d, 0x7f, 0x03, 0x0d, 0x48, 0x50, 0xac, 0xae, 0x3c, 0xb6, 0x15, 0xc2, 0x1d, 0xd2, 0x52, 0x06, 0xd6, 0x3e, 0x84, 0xd1, 0xdb, 0x8d, 0x95, 0x73, 0x70, 0x73, 0x7b, 0xa0, 0xe9, 0x84, 0x67, 0xea, 0x0c, 0xe2, 0x74, 0xc6, 0x61, 0x99, 0x90, 0x1e, 0xae, 0xc1, 0x8a, 0x08, 0x52, 0x57, 0x15, 0xf5, 0x3b, 0xfd, 0xb0, 0xaa, 0xcb, 0x61, 0x3d, 0x34, 0x2e, 0xbd, 0xce, 0xed, 0xdc, 0x3b }, - { 0xb4, 0x03, 0xd3, 0x69, 0x1c, 0x03, 0xb0, 0xd3, 0x41, 0x8d, 0xf3, 0x27, 0xd5, 0x86, 0x0d, 0x34, 0xbb, 0xfc, 0xc4, 0x51, 0x9b, 0xfb, 0xce, 0x36, 0xbf, 0x33, 0xb2, 0x08, 0x38, 0x5f, 0xad, 0xb9, 0x18, 0x6b, 0xc7, 0x8a, 0x76, 0xc4, 0x89, 0xd8, 0x9f, 0xd5, 0x7e, 0x7d, 0xc7, 0x54, 0x12, 0xd2, 0x3b, 0xcd, 0x1d, 0xae, 0x84, 0x70, 0xce, 0x92, 0x74, 0x75, 0x4b, 0xb8, 0x58, 0x5b, 0x13, 0xc5 }, - { 0x31, 0xfc, 0x79, 0x73, 0x8b, 0x87, 0x72, 0xb3, 0xf5, 0x5c, 0xd8, 0x17, 0x88, 0x13, 0xb3, 0xb5, 0x2d, 0x0d, 0xb5, 0xa4, 0x19, 0xd3, 0x0b, 0xa9, 0x49, 0x5c, 0x4b, 0x9d, 0xa0, 0x21, 0x9f, 0xac, 0x6d, 0xf8, 0xe7, 0xc2, 0x3a, 0x81, 0x15, 0x51, 0xa6, 0x2b, 0x82, 0x7f, 0x25, 0x6e, 0xcd, 0xb8, 0x12, 0x4a, 0xc8, 0xa6, 0x79, 0x2c, 0xcf, 0xec, 0xc3, 0xb3, 0x01, 0x27, 0x22, 0xe9, 0x44, 0x63 }, - { 0xbb, 0x20, 0x39, 0xec, 0x28, 0x70, 0x91, 0xbc, 0xc9, 0x64, 0x2f, 0xc9, 0x00, 0x49, 0xe7, 0x37, 0x32, 0xe0, 0x2e, 0x57, 0x7e, 0x28, 0x62, 0xb3, 0x22, 0x16, 0xae, 0x9b, 0xed, 0xcd, 0x73, 0x0c, 0x4c, 0x28, 0x4e, 0xf3, 0x96, 0x8c, 0x36, 0x8b, 0x7d, 0x37, 0x58, 0x4f, 0x97, 0xbd, 0x4b, 0x4d, 0xc6, 0xef, 0x61, 0x27, 0xac, 0xfe, 0x2e, 0x6a, 0xe2, 0x50, 0x91, 0x24, 0xe6, 0x6c, 0x8a, 0xf4 }, - { 0xf5, 0x3d, 0x68, 0xd1, 0x3f, 0x45, 0xed, 0xfc, 0xb9, 0xbd, 0x41, 0x5e, 0x28, 0x31, 0xe9, 0x38, 0x35, 0x0d, 0x53, 0x80, 0xd3, 0x43, 0x22, 0x78, 0xfc, 0x1c, 0x0c, 0x38, 0x1f, 0xcb, 0x7c, 0x65, 0xc8, 0x2d, 0xaf, 0xe0, 0x51, 0xd8, 0xc8, 0xb0, 0xd4, 0x4e, 0x09, 0x74, 0xa0, 0xe5, 0x9e, 0xc7, 0xbf, 0x7e, 0xd0, 0x45, 0x9f, 0x86, 0xe9, 0x6f, 0x32, 0x9f, 0xc7, 0x97, 0x52, 0x51, 0x0f, 0xd3 }, - { 0x8d, 0x56, 0x8c, 0x79, 0x84, 0xf0, 0xec, 0xdf, 0x76, 0x40, 0xfb, 0xc4, 0x83, 0xb5, 0xd8, 0xc9, 0xf8, 0x66, 0x34, 0xf6, 0xf4, 0x32, 0x91, 0x84, 0x1b, 0x30, 0x9a, 0x35, 0x0a, 0xb9, 0xc1, 0x13, 0x7d, 0x24, 0x06, 0x6b, 0x09, 0xda, 0x99, 0x44, 0xba, 0xc5, 0x4d, 0x5b, 0xb6, 0x58, 0x0d, 0x83, 0x60, 0x47, 0xaa, 0xc7, 0x4a, 0xb7, 0x24, 0xb8, 0x87, 0xeb, 0xf9, 0x3d, 0x4b, 0x32, 0xec, 0xa9 }, - { 0xc0, 0xb6, 0x5c, 0xe5, 0xa9, 0x6f, 0xf7, 0x74, 0xc4, 0x56, 0xca, 0xc3, 0xb5, 0xf2, 0xc4, 0xcd, 0x35, 0x9b, 0x4f, 0xf5, 0x3e, 0xf9, 0x3a, 0x3d, 0xa0, 0x77, 0x8b, 0xe4, 0x90, 0x0d, 0x1e, 0x8d, 0xa1, 0x60, 0x1e, 0x76, 0x9e, 0x8f, 0x1b, 0x02, 0xd2, 0xa2, 0xf8, 0xc5, 0xb9, 0xfa, 0x10, 0xb4, 0x4f, 0x1c, 0x18, 0x69, 0x85, 0x46, 0x8f, 0xee, 0xb0, 0x08, 0x73, 0x02, 0x83, 0xa6, 0x65, 0x7d }, - { 0x49, 0x00, 0xbb, 0xa6, 0xf5, 0xfb, 0x10, 0x3e, 0xce, 0x8e, 0xc9, 0x6a, 0xda, 0x13, 0xa5, 0xc3, 0xc8, 0x54, 0x88, 0xe0, 0x55, 0x51, 0xda, 0x6b, 0x6b, 0x33, 0xd9, 0x88, 0xe6, 0x11, 0xec, 0x0f, 0xe2, 0xe3, 0xc2, 0xaa, 0x48, 0xea, 0x6a, 0xe8, 0x98, 0x6a, 0x3a, 0x23, 0x1b, 0x22, 0x3c, 0x5d, 0x27, 0xce, 0xc2, 0xea, 0xdd, 0xe9, 0x1c, 0xe0, 0x79, 0x81, 0xee, 0x65, 0x28, 0x62, 0xd1, 0xe4 }, - { 0xc7, 0xf5, 0xc3, 0x7c, 0x72, 0x85, 0xf9, 0x27, 0xf7, 0x64, 0x43, 0x41, 0x4d, 0x43, 0x57, 0xff, 0x78, 0x96, 0x47, 0xd7, 0xa0, 0x05, 0xa5, 0xa7, 0x87, 0xe0, 0x3c, 0x34, 0x6b, 0x57, 0xf4, 0x9f, 0x21, 0xb6, 0x4f, 0xa9, 0xcf, 0x4b, 0x7e, 0x45, 0x57, 0x3e, 0x23, 0x04, 0x90, 0x17, 0x56, 0x71, 0x21, 0xa9, 0xc3, 0xd4, 0xb2, 0xb7, 0x3e, 0xc5, 0xe9, 0x41, 0x35, 0x77, 0x52, 0x5d, 0xb4, 0x5a }, - { 0xec, 0x70, 0x96, 0x33, 0x07, 0x36, 0xfd, 0xb2, 0xd6, 0x4b, 0x56, 0x53, 0xe7, 0x47, 0x5d, 0xa7, 0x46, 0xc2, 0x3a, 0x46, 0x13, 0xa8, 0x26, 0x87, 0xa2, 0x80, 0x62, 0xd3, 0x23, 0x63, 0x64, 0x28, 0x4a, 0xc0, 0x17, 0x20, 0xff, 0xb4, 0x06, 0xcf, 0xe2, 0x65, 0xc0, 0xdf, 0x62, 0x6a, 0x18, 0x8c, 0x9e, 0x59, 0x63, 0xac, 0xe5, 0xd3, 0xd5, 0xbb, 0x36, 0x3e, 0x32, 0xc3, 0x8c, 0x21, 0x90, 0xa6 }, - { 0x82, 0xe7, 0x44, 0xc7, 0x5f, 0x46, 0x49, 0xec, 0x52, 0xb8, 0x07, 0x71, 0xa7, 0x7d, 0x47, 0x5a, 0x3b, 0xc0, 0x91, 0x98, 0x95, 0x56, 0x96, 0x0e, 0x27, 0x6a, 0x5f, 0x9e, 0xad, 0x92, 0xa0, 0x3f, 0x71, 0x87, 0x42, 0xcd, 0xcf, 0xea, 0xee, 0x5c, 0xb8, 0x5c, 0x44, 0xaf, 0x19, 0x8a, 0xdc, 0x43, 0xa4, 0xa4, 0x28, 0xf5, 0xf0, 0xc2, 0xdd, 0xb0, 0xbe, 0x36, 0x05, 0x9f, 0x06, 0xd7, 0xdf, 0x73 }, - { 0x28, 0x34, 0xb7, 0xa7, 0x17, 0x0f, 0x1f, 0x5b, 0x68, 0x55, 0x9a, 0xb7, 0x8c, 0x10, 0x50, 0xec, 0x21, 0xc9, 0x19, 0x74, 0x0b, 0x78, 0x4a, 0x90, 0x72, 0xf6, 0xe5, 0xd6, 0x9f, 0x82, 0x8d, 0x70, 0xc9, 0x19, 0xc5, 0x03, 0x9f, 0xb1, 0x48, 0xe3, 0x9e, 0x2c, 0x8a, 0x52, 0x11, 0x83, 0x78, 0xb0, 0x64, 0xca, 0x8d, 0x50, 0x01, 0xcd, 0x10, 0xa5, 0x47, 0x83, 0x87, 0xb9, 0x66, 0x71, 0x5e, 0xd6 }, - { 0x16, 0xb4, 0xad, 0xa8, 0x83, 0xf7, 0x2f, 0x85, 0x3b, 0xb7, 0xef, 0x25, 0x3e, 0xfc, 0xab, 0x0c, 0x3e, 0x21, 0x61, 0x68, 0x7a, 0xd6, 0x15, 0x43, 0xa0, 0xd2, 0x82, 0x4f, 0x91, 0xc1, 0xf8, 0x13, 0x47, 0xd8, 0x6b, 0xe7, 0x09, 0xb1, 0x69, 0x96, 0xe1, 0x7f, 0x2d, 0xd4, 0x86, 0x92, 0x7b, 0x02, 0x88, 0xad, 0x38, 0xd1, 0x30, 0x63, 0xc4, 0xa9, 0x67, 0x2c, 0x39, 0x39, 0x7d, 0x37, 0x89, 0xb6 }, - { 0x78, 0xd0, 0x48, 0xf3, 0xa6, 0x9d, 0x8b, 0x54, 0xae, 0x0e, 0xd6, 0x3a, 0x57, 0x3a, 0xe3, 0x50, 0xd8, 0x9f, 0x7c, 0x6c, 0xf1, 0xf3, 0x68, 0x89, 0x30, 0xde, 0x89, 0x9a, 0xfa, 0x03, 0x76, 0x97, 0x62, 0x9b, 0x31, 0x4e, 0x5c, 0xd3, 0x03, 0xaa, 0x62, 0xfe, 0xea, 0x72, 0xa2, 0x5b, 0xf4, 0x2b, 0x30, 0x4b, 0x6c, 0x6b, 0xcb, 0x27, 0xfa, 0xe2, 0x1c, 0x16, 0xd9, 0x25, 0xe1, 0xfb, 0xda, 0xc3 }, - { 0x0f, 0x74, 0x6a, 0x48, 0x74, 0x92, 0x87, 0xad, 0xa7, 0x7a, 0x82, 0x96, 0x1f, 0x05, 0xa4, 0xda, 0x4a, 0xbd, 0xb7, 0xd7, 0x7b, 0x12, 0x20, 0xf8, 0x36, 0xd0, 0x9e, 0xc8, 0x14, 0x35, 0x9c, 0x0e, 0xc0, 0x23, 0x9b, 0x8c, 0x7b, 0x9f, 0xf9, 0xe0, 0x2f, 0x56, 0x9d, 0x1b, 0x30, 0x1e, 0xf6, 0x7c, 0x46, 0x12, 0xd1, 0xde, 0x4f, 0x73, 0x0f, 0x81, 0xc1, 0x2c, 0x40, 0xcc, 0x06, 0x3c, 0x5c, 0xaa }, - { 0xf0, 0xfc, 0x85, 0x9d, 0x3b, 0xd1, 0x95, 0xfb, 0xdc, 0x2d, 0x59, 0x1e, 0x4c, 0xda, 0xc1, 0x51, 0x79, 0xec, 0x0f, 0x1d, 0xc8, 0x21, 0xc1, 0x1d, 0xf1, 0xf0, 0xc1, 0xd2, 0x6e, 0x62, 0x60, 0xaa, 0xa6, 0x5b, 0x79, 0xfa, 0xfa, 0xca, 0xfd, 0x7d, 0x3a, 0xd6, 0x1e, 0x60, 0x0f, 0x25, 0x09, 0x05, 0xf5, 0x87, 0x8c, 0x87, 0x45, 0x28, 0x97, 0x64, 0x7a, 0x35, 0xb9, 0x95, 0xbc, 0xad, 0xc3, 0xa3 }, - { 0x26, 0x20, 0xf6, 0x87, 0xe8, 0x62, 0x5f, 0x6a, 0x41, 0x24, 0x60, 0xb4, 0x2e, 0x2c, 0xef, 0x67, 0x63, 0x42, 0x08, 0xce, 0x10, 0xa0, 0xcb, 0xd4, 0xdf, 0xf7, 0x04, 0x4a, 0x41, 0xb7, 0x88, 0x00, 0x77, 0xe9, 0xf8, 0xdc, 0x3b, 0x8d, 0x12, 0x16, 0xd3, 0x37, 0x6a, 0x21, 0xe0, 0x15, 0xb5, 0x8f, 0xb2, 0x79, 0xb5, 0x21, 0xd8, 0x3f, 0x93, 0x88, 0xc7, 0x38, 0x2c, 0x85, 0x05, 0x59, 0x0b, 0x9b }, - { 0x22, 0x7e, 0x3a, 0xed, 0x8d, 0x2c, 0xb1, 0x0b, 0x91, 0x8f, 0xcb, 0x04, 0xf9, 0xde, 0x3e, 0x6d, 0x0a, 0x57, 0xe0, 0x84, 0x76, 0xd9, 0x37, 0x59, 0xcd, 0x7b, 0x2e, 0xd5, 0x4a, 0x1c, 0xbf, 0x02, 0x39, 0xc5, 0x28, 0xfb, 0x04, 0xbb, 0xf2, 0x88, 0x25, 0x3e, 0x60, 0x1d, 0x3b, 0xc3, 0x8b, 0x21, 0x79, 0x4a, 0xfe, 0xf9, 0x0b, 0x17, 0x09, 0x4a, 0x18, 0x2c, 0xac, 0x55, 0x77, 0x45, 0xe7, 0x5f }, - { 0x1a, 0x92, 0x99, 0x01, 0xb0, 0x9c, 0x25, 0xf2, 0x7d, 0x6b, 0x35, 0xbe, 0x7b, 0x2f, 0x1c, 0x47, 0x45, 0x13, 0x1f, 0xde, 0xbc, 0xa7, 0xf3, 0xe2, 0x45, 0x19, 0x26, 0x72, 0x04, 0x34, 0xe0, 0xdb, 0x6e, 0x74, 0xfd, 0x69, 0x3a, 0xd2, 0x9b, 0x77, 0x7d, 0xc3, 0x35, 0x5c, 0x59, 0x2a, 0x36, 0x1c, 0x48, 0x73, 0xb0, 0x11, 0x33, 0xa5, 0x7c, 0x2e, 0x3b, 0x70, 0x75, 0xcb, 0xdb, 0x86, 0xf4, 0xfc }, - { 0x5f, 0xd7, 0x96, 0x8b, 0xc2, 0xfe, 0x34, 0xf2, 0x20, 0xb5, 0xe3, 0xdc, 0x5a, 0xf9, 0x57, 0x17, 0x42, 0xd7, 0x3b, 0x7d, 0x60, 0x81, 0x9f, 0x28, 0x88, 0xb6, 0x29, 0x07, 0x2b, 0x96, 0xa9, 0xd8, 0xab, 0x2d, 0x91, 0xb8, 0x2d, 0x0a, 0x9a, 0xab, 0xa6, 0x1b, 0xbd, 0x39, 0x95, 0x81, 0x32, 0xfc, 0xc4, 0x25, 0x70, 0x23, 0xd1, 0xec, 0xa5, 0x91, 0xb3, 0x05, 0x4e, 0x2d, 0xc8, 0x1c, 0x82, 0x00 }, - { 0xdf, 0xcc, 0xe8, 0xcf, 0x32, 0x87, 0x0c, 0xc6, 0xa5, 0x03, 0xea, 0xda, 0xfc, 0x87, 0xfd, 0x6f, 0x78, 0x91, 0x8b, 0x9b, 0x4d, 0x07, 0x37, 0xdb, 0x68, 0x10, 0xbe, 0x99, 0x6b, 0x54, 0x97, 0xe7, 0xe5, 0xcc, 0x80, 0xe3, 0x12, 0xf6, 0x1e, 0x71, 0xff, 0x3e, 0x96, 0x24, 0x43, 0x60, 0x73, 0x15, 0x64, 0x03, 0xf7, 0x35, 0xf5, 0x6b, 0x0b, 0x01, 0x84, 0x5c, 0x18, 0xf6, 0xca, 0xf7, 0x72, 0xe6 }, - { 0x02, 0xf7, 0xef, 0x3a, 0x9c, 0xe0, 0xff, 0xf9, 0x60, 0xf6, 0x70, 0x32, 0xb2, 0x96, 0xef, 0xca, 0x30, 0x61, 0xf4, 0x93, 0x4d, 0x69, 0x07, 0x49, 0xf2, 0xd0, 0x1c, 0x35, 0xc8, 0x1c, 0x14, 0xf3, 0x9a, 0x67, 0xfa, 0x35, 0x0b, 0xc8, 0xa0, 0x35, 0x9b, 0xf1, 0x72, 0x4b, 0xff, 0xc3, 0xbc, 0xa6, 0xd7, 0xc7, 0xbb, 0xa4, 0x79, 0x1f, 0xd5, 0x22, 0xa3, 0xad, 0x35, 0x3c, 0x02, 0xec, 0x5a, 0xa8 }, - { 0x64, 0xbe, 0x5c, 0x6a, 0xba, 0x65, 0xd5, 0x94, 0x84, 0x4a, 0xe7, 0x8b, 0xb0, 0x22, 0xe5, 0xbe, 0xbe, 0x12, 0x7f, 0xd6, 0xb6, 0xff, 0xa5, 0xa1, 0x37, 0x03, 0x85, 0x5a, 0xb6, 0x3b, 0x62, 0x4d, 0xcd, 0x1a, 0x36, 0x3f, 0x99, 0x20, 0x3f, 0x63, 0x2e, 0xc3, 0x86, 0xf3, 0xea, 0x76, 0x7f, 0xc9, 0x92, 0xe8, 0xed, 0x96, 0x86, 0x58, 0x6a, 0xa2, 0x75, 0x55, 0xa8, 0x59, 0x9d, 0x5b, 0x80, 0x8f }, - { 0xf7, 0x85, 0x85, 0x50, 0x5c, 0x4e, 0xaa, 0x54, 0xa8, 0xb5, 0xbe, 0x70, 0xa6, 0x1e, 0x73, 0x5e, 0x0f, 0xf9, 0x7a, 0xf9, 0x44, 0xdd, 0xb3, 0x00, 0x1e, 0x35, 0xd8, 0x6c, 0x4e, 0x21, 0x99, 0xd9, 0x76, 0x10, 0x4b, 0x6a, 0xe3, 0x17, 0x50, 0xa3, 0x6a, 0x72, 0x6e, 0xd2, 0x85, 0x06, 0x4f, 0x59, 0x81, 0xb5, 0x03, 0x88, 0x9f, 0xef, 0x82, 0x2f, 0xcd, 0xc2, 0x89, 0x8d, 0xdd, 0xb7, 0x88, 0x9a }, - { 0xe4, 0xb5, 0x56, 0x60, 0x33, 0x86, 0x95, 0x72, 0xed, 0xfd, 0x87, 0x47, 0x9a, 0x5b, 0xb7, 0x3c, 0x80, 0xe8, 0x75, 0x9b, 0x91, 0x23, 0x28, 0x79, 0xd9, 0x6b, 0x1d, 0xda, 0x36, 0xc0, 0x12, 0x07, 0x6e, 0xe5, 0xa2, 0xed, 0x7a, 0xe2, 0xde, 0x63, 0xef, 0x84, 0x06, 0xa0, 0x6a, 0xea, 0x82, 0xc1, 0x88, 0x03, 0x1b, 0x56, 0x0b, 0xea, 0xfb, 0x58, 0x3f, 0xb3, 0xde, 0x9e, 0x57, 0x95, 0x2a, 0x7e }, - { 0xe1, 0xb3, 0xe7, 0xed, 0x86, 0x7f, 0x6c, 0x94, 0x84, 0xa2, 0xa9, 0x7f, 0x77, 0x15, 0xf2, 0x5e, 0x25, 0x29, 0x4e, 0x99, 0x2e, 0x41, 0xf6, 0xa7, 0xc1, 0x61, 0xff, 0xc2, 0xad, 0xc6, 0xda, 0xae, 0xb7, 0x11, 0x31, 0x02, 0xd5, 0xe6, 0x09, 0x02, 0x87, 0xfe, 0x6a, 0xd9, 0x4c, 0xe5, 0xd6, 0xb7, 0x39, 0xc6, 0xca, 0x24, 0x0b, 0x05, 0xc7, 0x6f, 0xb7, 0x3f, 0x25, 0xdd, 0x02, 0x4b, 0xf9, 0x35 }, - { 0x85, 0xfd, 0x08, 0x5f, 0xdc, 0x12, 0xa0, 0x80, 0x98, 0x3d, 0xf0, 0x7b, 0xd7, 0x01, 0x2b, 0x0d, 0x40, 0x2a, 0x0f, 0x40, 0x43, 0xfc, 0xb2, 0x77, 0x5a, 0xdf, 0x0b, 0xad, 0x17, 0x4f, 0x9b, 0x08, 0xd1, 0x67, 0x6e, 0x47, 0x69, 0x85, 0x78, 0x5c, 0x0a, 0x5d, 0xcc, 0x41, 0xdb, 0xff, 0x6d, 0x95, 0xef, 0x4d, 0x66, 0xa3, 0xfb, 0xdc, 0x4a, 0x74, 0xb8, 0x2b, 0xa5, 0x2d, 0xa0, 0x51, 0x2b, 0x74 }, - { 0xae, 0xd8, 0xfa, 0x76, 0x4b, 0x0f, 0xbf, 0xf8, 0x21, 0xe0, 0x52, 0x33, 0xd2, 0xf7, 0xb0, 0x90, 0x0e, 0xc4, 0x4d, 0x82, 0x6f, 0x95, 0xe9, 0x3c, 0x34, 0x3c, 0x1b, 0xc3, 0xba, 0x5a, 0x24, 0x37, 0x4b, 0x1d, 0x61, 0x6e, 0x7e, 0x7a, 0xba, 0x45, 0x3a, 0x0a, 0xda, 0x5e, 0x4f, 0xab, 0x53, 0x82, 0x40, 0x9e, 0x0d, 0x42, 0xce, 0x9c, 0x2b, 0xc7, 0xfb, 0x39, 0xa9, 0x9c, 0x34, 0x0c, 0x20, 0xf0 }, - { 0x7b, 0xa3, 0xb2, 0xe2, 0x97, 0x23, 0x35, 0x22, 0xee, 0xb3, 0x43, 0xbd, 0x3e, 0xbc, 0xfd, 0x83, 0x5a, 0x04, 0x00, 0x77, 0x35, 0xe8, 0x7f, 0x0c, 0xa3, 0x00, 0xcb, 0xee, 0x6d, 0x41, 0x65, 0x65, 0x16, 0x21, 0x71, 0x58, 0x1e, 0x40, 0x20, 0xff, 0x4c, 0xf1, 0x76, 0x45, 0x0f, 0x12, 0x91, 0xea, 0x22, 0x85, 0xcb, 0x9e, 0xbf, 0xfe, 0x4c, 0x56, 0x66, 0x06, 0x27, 0x68, 0x51, 0x45, 0x05, 0x1c }, - { 0xde, 0x74, 0x8b, 0xcf, 0x89, 0xec, 0x88, 0x08, 0x47, 0x21, 0xe1, 0x6b, 0x85, 0xf3, 0x0a, 0xdb, 0x1a, 0x61, 0x34, 0xd6, 0x64, 0xb5, 0x84, 0x35, 0x69, 0xba, 0xbc, 0x5b, 0xbd, 0x1a, 0x15, 0xca, 0x9b, 0x61, 0x80, 0x3c, 0x90, 0x1a, 0x4f, 0xef, 0x32, 0x96, 0x5a, 0x17, 0x49, 0xc9, 0xf3, 0xa4, 0xe2, 0x43, 0xe1, 0x73, 0x93, 0x9d, 0xc5, 0xa8, 0xdc, 0x49, 0x5c, 0x67, 0x1a, 0xb5, 0x21, 0x45 }, - { 0xaa, 0xf4, 0xd2, 0xbd, 0xf2, 0x00, 0xa9, 0x19, 0x70, 0x6d, 0x98, 0x42, 0xdc, 0xe1, 0x6c, 0x98, 0x14, 0x0d, 0x34, 0xbc, 0x43, 0x3d, 0xf3, 0x20, 0xab, 0xa9, 0xbd, 0x42, 0x9e, 0x54, 0x9a, 0xa7, 0xa3, 0x39, 0x76, 0x52, 0xa4, 0xd7, 0x68, 0x27, 0x77, 0x86, 0xcf, 0x99, 0x3c, 0xde, 0x23, 0x38, 0x67, 0x3e, 0xd2, 0xe6, 0xb6, 0x6c, 0x96, 0x1f, 0xef, 0xb8, 0x2c, 0xd2, 0x0c, 0x93, 0x33, 0x8f }, - { 0xc4, 0x08, 0x21, 0x89, 0x68, 0xb7, 0x88, 0xbf, 0x86, 0x4f, 0x09, 0x97, 0xe6, 0xbc, 0x4c, 0x3d, 0xba, 0x68, 0xb2, 0x76, 0xe2, 0x12, 0x5a, 0x48, 0x43, 0x29, 0x60, 0x52, 0xff, 0x93, 0xbf, 0x57, 0x67, 0xb8, 0xcd, 0xce, 0x71, 0x31, 0xf0, 0x87, 0x64, 0x30, 0xc1, 0x16, 0x5f, 0xec, 0x6c, 0x4f, 0x47, 0xad, 0xaa, 0x4f, 0xd8, 0xbc, 0xfa, 0xce, 0xf4, 0x63, 0xb5, 0xd3, 0xd0, 0xfa, 0x61, 0xa0 }, - { 0x76, 0xd2, 0xd8, 0x19, 0xc9, 0x2b, 0xce, 0x55, 0xfa, 0x8e, 0x09, 0x2a, 0xb1, 0xbf, 0x9b, 0x9e, 0xab, 0x23, 0x7a, 0x25, 0x26, 0x79, 0x86, 0xca, 0xcf, 0x2b, 0x8e, 0xe1, 0x4d, 0x21, 0x4d, 0x73, 0x0d, 0xc9, 0xa5, 0xaa, 0x2d, 0x7b, 0x59, 0x6e, 0x86, 0xa1, 0xfd, 0x8f, 0xa0, 0x80, 0x4c, 0x77, 0x40, 0x2d, 0x2f, 0xcd, 0x45, 0x08, 0x36, 0x88, 0xb2, 0x18, 0xb1, 0xcd, 0xfa, 0x0d, 0xcb, 0xcb }, - { 0x72, 0x06, 0x5e, 0xe4, 0xdd, 0x91, 0xc2, 0xd8, 0x50, 0x9f, 0xa1, 0xfc, 0x28, 0xa3, 0x7c, 0x7f, 0xc9, 0xfa, 0x7d, 0x5b, 0x3f, 0x8a, 0xd3, 0xd0, 0xd7, 0xa2, 0x56, 0x26, 0xb5, 0x7b, 0x1b, 0x44, 0x78, 0x8d, 0x4c, 0xaf, 0x80, 0x62, 0x90, 0x42, 0x5f, 0x98, 0x90, 0xa3, 0xa2, 0xa3, 0x5a, 0x90, 0x5a, 0xb4, 0xb3, 0x7a, 0xcf, 0xd0, 0xda, 0x6e, 0x45, 0x17, 0xb2, 0x52, 0x5c, 0x96, 0x51, 0xe4 }, - { 0x64, 0x47, 0x5d, 0xfe, 0x76, 0x00, 0xd7, 0x17, 0x1b, 0xea, 0x0b, 0x39, 0x4e, 0x27, 0xc9, 0xb0, 0x0d, 0x8e, 0x74, 0xdd, 0x1e, 0x41, 0x6a, 0x79, 0x47, 0x36, 0x82, 0xad, 0x3d, 0xfd, 0xbb, 0x70, 0x66, 0x31, 0x55, 0x80, 0x55, 0xcf, 0xc8, 0xa4, 0x0e, 0x07, 0xbd, 0x01, 0x5a, 0x45, 0x40, 0xdc, 0xde, 0xa1, 0x58, 0x83, 0xcb, 0xbf, 0x31, 0x41, 0x2d, 0xf1, 0xde, 0x1c, 0xd4, 0x15, 0x2b, 0x91 }, - { 0x12, 0xcd, 0x16, 0x74, 0xa4, 0x48, 0x8a, 0x5d, 0x7c, 0x2b, 0x31, 0x60, 0xd2, 0xe2, 0xc4, 0xb5, 0x83, 0x71, 0xbe, 0xda, 0xd7, 0x93, 0x41, 0x8d, 0x6f, 0x19, 0xc6, 0xee, 0x38, 0x5d, 0x70, 0xb3, 0xe0, 0x67, 0x39, 0x36, 0x9d, 0x4d, 0xf9, 0x10, 0xed, 0xb0, 0xb0, 0xa5, 0x4c, 0xbf, 0xf4, 0x3d, 0x54, 0x54, 0x4c, 0xd3, 0x7a, 0xb3, 0xa0, 0x6c, 0xfa, 0x0a, 0x3d, 0xda, 0xc8, 0xb6, 0x6c, 0x89 }, - { 0x60, 0x75, 0x69, 0x66, 0x47, 0x9d, 0xed, 0xc6, 0xdd, 0x4b, 0xcf, 0xf8, 0xea, 0x7d, 0x1d, 0x4c, 0xe4, 0xd4, 0xaf, 0x2e, 0x7b, 0x09, 0x7e, 0x32, 0xe3, 0x76, 0x35, 0x18, 0x44, 0x11, 0x47, 0xcc, 0x12, 0xb3, 0xc0, 0xee, 0x6d, 0x2e, 0xca, 0xbf, 0x11, 0x98, 0xce, 0xc9, 0x2e, 0x86, 0xa3, 0x61, 0x6f, 0xba, 0x4f, 0x4e, 0x87, 0x2f, 0x58, 0x25, 0x33, 0x0a, 0xdb, 0xb4, 0xc1, 0xde, 0xe4, 0x44 }, - { 0xa7, 0x80, 0x3b, 0xcb, 0x71, 0xbc, 0x1d, 0x0f, 0x43, 0x83, 0xdd, 0xe1, 0xe0, 0x61, 0x2e, 0x04, 0xf8, 0x72, 0xb7, 0x15, 0xad, 0x30, 0x81, 0x5c, 0x22, 0x49, 0xcf, 0x34, 0xab, 0xb8, 0xb0, 0x24, 0x91, 0x5c, 0xb2, 0xfc, 0x9f, 0x4e, 0x7c, 0xc4, 0xc8, 0xcf, 0xd4, 0x5b, 0xe2, 0xd5, 0xa9, 0x1e, 0xab, 0x09, 0x41, 0xc7, 0xd2, 0x70, 0xe2, 0xda, 0x4c, 0xa4, 0xa9, 0xf7, 0xac, 0x68, 0x66, 0x3a }, - { 0xb8, 0x4e, 0xf6, 0xa7, 0x22, 0x9a, 0x34, 0xa7, 0x50, 0xd9, 0xa9, 0x8e, 0xe2, 0x52, 0x98, 0x71, 0x81, 0x6b, 0x87, 0xfb, 0xe3, 0xbc, 0x45, 0xb4, 0x5f, 0xa5, 0xae, 0x82, 0xd5, 0x14, 0x15, 0x40, 0x21, 0x11, 0x65, 0xc3, 0xc5, 0xd7, 0xa7, 0x47, 0x6b, 0xa5, 0xa4, 0xaa, 0x06, 0xd6, 0x64, 0x76, 0xf0, 0xd9, 0xdc, 0x49, 0xa3, 0xf1, 0xee, 0x72, 0xc3, 0xac, 0xab, 0xd4, 0x98, 0x96, 0x74, 0x14 }, - { 0xfa, 0xe4, 0xb6, 0xd8, 0xef, 0xc3, 0xf8, 0xc8, 0xe6, 0x4d, 0x00, 0x1d, 0xab, 0xec, 0x3a, 0x21, 0xf5, 0x44, 0xe8, 0x27, 0x14, 0x74, 0x52, 0x51, 0xb2, 0xb4, 0xb3, 0x93, 0xf2, 0xf4, 0x3e, 0x0d, 0xa3, 0xd4, 0x03, 0xc6, 0x4d, 0xb9, 0x5a, 0x2c, 0xb6, 0xe2, 0x3e, 0xbb, 0x7b, 0x9e, 0x94, 0xcd, 0xd5, 0xdd, 0xac, 0x54, 0xf0, 0x7c, 0x4a, 0x61, 0xbd, 0x3c, 0xb1, 0x0a, 0xa6, 0xf9, 0x3b, 0x49 }, - { 0x34, 0xf7, 0x28, 0x66, 0x05, 0xa1, 0x22, 0x36, 0x95, 0x40, 0x14, 0x1d, 0xed, 0x79, 0xb8, 0x95, 0x72, 0x55, 0xda, 0x2d, 0x41, 0x55, 0xab, 0xbf, 0x5a, 0x8d, 0xbb, 0x89, 0xc8, 0xeb, 0x7e, 0xde, 0x8e, 0xee, 0xf1, 0xda, 0xa4, 0x6d, 0xc2, 0x9d, 0x75, 0x1d, 0x04, 0x5d, 0xc3, 0xb1, 0xd6, 0x58, 0xbb, 0x64, 0xb8, 0x0f, 0xf8, 0x58, 0x9e, 0xdd, 0xb3, 0x82, 0x4b, 0x13, 0xda, 0x23, 0x5a, 0x6b }, - { 0x3b, 0x3b, 0x48, 0x43, 0x4b, 0xe2, 0x7b, 0x9e, 0xab, 0xab, 0xba, 0x43, 0xbf, 0x6b, 0x35, 0xf1, 0x4b, 0x30, 0xf6, 0xa8, 0x8d, 0xc2, 0xe7, 0x50, 0xc3, 0x58, 0x47, 0x0d, 0x6b, 0x3a, 0xa3, 0xc1, 0x8e, 0x47, 0xdb, 0x40, 0x17, 0xfa, 0x55, 0x10, 0x6d, 0x82, 0x52, 0xf0, 0x16, 0x37, 0x1a, 0x00, 0xf5, 0xf8, 0xb0, 0x70, 0xb7, 0x4b, 0xa5, 0xf2, 0x3c, 0xff, 0xc5, 0x51, 0x1c, 0x9f, 0x09, 0xf0 }, - { 0xba, 0x28, 0x9e, 0xbd, 0x65, 0x62, 0xc4, 0x8c, 0x3e, 0x10, 0xa8, 0xad, 0x6c, 0xe0, 0x2e, 0x73, 0x43, 0x3d, 0x1e, 0x93, 0xd7, 0xc9, 0x27, 0x9d, 0x4d, 0x60, 0xa7, 0xe8, 0x79, 0xee, 0x11, 0xf4, 0x41, 0xa0, 0x00, 0xf4, 0x8e, 0xd9, 0xf7, 0xc4, 0xed, 0x87, 0xa4, 0x51, 0x36, 0xd7, 0xdc, 0xcd, 0xca, 0x48, 0x21, 0x09, 0xc7, 0x8a, 0x51, 0x06, 0x2b, 0x3b, 0xa4, 0x04, 0x4a, 0xda, 0x24, 0x69 }, - { 0x02, 0x29, 0x39, 0xe2, 0x38, 0x6c, 0x5a, 0x37, 0x04, 0x98, 0x56, 0xc8, 0x50, 0xa2, 0xbb, 0x10, 0xa1, 0x3d, 0xfe, 0xa4, 0x21, 0x2b, 0x4c, 0x73, 0x2a, 0x88, 0x40, 0xa9, 0xff, 0xa5, 0xfa, 0xf5, 0x48, 0x75, 0xc5, 0x44, 0x88, 0x16, 0xb2, 0x78, 0x5a, 0x00, 0x7d, 0xa8, 0xa8, 0xd2, 0xbc, 0x7d, 0x71, 0xa5, 0x4e, 0x4e, 0x65, 0x71, 0xf1, 0x0b, 0x60, 0x0c, 0xbd, 0xb2, 0x5d, 0x13, 0xed, 0xe3 }, - { 0xe6, 0xfe, 0xc1, 0x9d, 0x89, 0xce, 0x87, 0x17, 0xb1, 0xa0, 0x87, 0x02, 0x46, 0x70, 0xfe, 0x02, 0x6f, 0x6c, 0x7c, 0xbd, 0xa1, 0x1c, 0xae, 0xf9, 0x59, 0xbb, 0x2d, 0x35, 0x1b, 0xf8, 0x56, 0xf8, 0x05, 0x5d, 0x1c, 0x0e, 0xbd, 0xaa, 0xa9, 0xd1, 0xb1, 0x78, 0x86, 0xfc, 0x2c, 0x56, 0x2b, 0x5e, 0x99, 0x64, 0x2f, 0xc0, 0x64, 0x71, 0x0c, 0x0d, 0x34, 0x88, 0xa0, 0x2b, 0x5e, 0xd7, 0xf6, 0xfd }, - { 0x94, 0xc9, 0x6f, 0x02, 0xa8, 0xf5, 0x76, 0xac, 0xa3, 0x2b, 0xa6, 0x1c, 0x2b, 0x20, 0x6f, 0x90, 0x72, 0x85, 0xd9, 0x29, 0x9b, 0x83, 0xac, 0x17, 0x5c, 0x20, 0x9a, 0x8d, 0x43, 0xd5, 0x3b, 0xfe, 0x68, 0x3d, 0xd1, 0xd8, 0x3e, 0x75, 0x49, 0xcb, 0x90, 0x6c, 0x28, 0xf5, 0x9a, 0xb7, 0xc4, 0x6f, 0x87, 0x51, 0x36, 0x6a, 0x28, 0xc3, 0x9d, 0xd5, 0xfe, 0x26, 0x93, 0xc9, 0x01, 0x96, 0x66, 0xc8 }, - { 0x31, 0xa0, 0xcd, 0x21, 0x5e, 0xbd, 0x2c, 0xb6, 0x1d, 0xe5, 0xb9, 0xed, 0xc9, 0x1e, 0x61, 0x95, 0xe3, 0x1c, 0x59, 0xa5, 0x64, 0x8d, 0x5c, 0x9f, 0x73, 0x7e, 0x12, 0x5b, 0x26, 0x05, 0x70, 0x8f, 0x2e, 0x32, 0x5a, 0xb3, 0x38, 0x1c, 0x8d, 0xce, 0x1a, 0x3e, 0x95, 0x88, 0x86, 0xf1, 0xec, 0xdc, 0x60, 0x31, 0x8f, 0x88, 0x2c, 0xfe, 0x20, 0xa2, 0x41, 0x91, 0x35, 0x2e, 0x61, 0x7b, 0x0f, 0x21 }, - { 0x91, 0xab, 0x50, 0x4a, 0x52, 0x2d, 0xce, 0x78, 0x77, 0x9f, 0x4c, 0x6c, 0x6b, 0xa2, 0xe6, 0xb6, 0xdb, 0x55, 0x65, 0xc7, 0x6d, 0x3e, 0x7e, 0x7c, 0x92, 0x0c, 0xaf, 0x7f, 0x75, 0x7e, 0xf9, 0xdb, 0x7c, 0x8f, 0xcf, 0x10, 0xe5, 0x7f, 0x03, 0x37, 0x9e, 0xa9, 0xbf, 0x75, 0xeb, 0x59, 0x89, 0x5d, 0x96, 0xe1, 0x49, 0x80, 0x0b, 0x6a, 0xae, 0x01, 0xdb, 0x77, 0x8b, 0xb9, 0x0a, 0xfb, 0xc9, 0x89 }, - { 0xd8, 0x5c, 0xab, 0xc6, 0xbd, 0x5b, 0x1a, 0x01, 0xa5, 0xaf, 0xd8, 0xc6, 0x73, 0x47, 0x40, 0xda, 0x9f, 0xd1, 0xc1, 0xac, 0xc6, 0xdb, 0x29, 0xbf, 0xc8, 0xa2, 0xe5, 0xb6, 0x68, 0xb0, 0x28, 0xb6, 0xb3, 0x15, 0x4b, 0xfb, 0x87, 0x03, 0xfa, 0x31, 0x80, 0x25, 0x1d, 0x58, 0x9a, 0xd3, 0x80, 0x40, 0xce, 0xb7, 0x07, 0xc4, 0xba, 0xd1, 0xb5, 0x34, 0x3c, 0xb4, 0x26, 0xb6, 0x1e, 0xaa, 0x49, 0xc1 }, - { 0xd6, 0x2e, 0xfb, 0xec, 0x2c, 0xa9, 0xc1, 0xf8, 0xbd, 0x66, 0xce, 0x8b, 0x3f, 0x6a, 0x89, 0x8c, 0xb3, 0xf7, 0x56, 0x6b, 0xa6, 0x56, 0x8c, 0x61, 0x8a, 0xd1, 0xfe, 0xb2, 0xb6, 0x5b, 0x76, 0xc3, 0xce, 0x1d, 0xd2, 0x0f, 0x73, 0x95, 0x37, 0x2f, 0xaf, 0x28, 0x42, 0x7f, 0x61, 0xc9, 0x27, 0x80, 0x49, 0xcf, 0x01, 0x40, 0xdf, 0x43, 0x4f, 0x56, 0x33, 0x04, 0x8c, 0x86, 0xb8, 0x1e, 0x03, 0x99 }, - { 0x7c, 0x8f, 0xdc, 0x61, 0x75, 0x43, 0x9e, 0x2c, 0x3d, 0xb1, 0x5b, 0xaf, 0xa7, 0xfb, 0x06, 0x14, 0x3a, 0x6a, 0x23, 0xbc, 0x90, 0xf4, 0x49, 0xe7, 0x9d, 0xee, 0xf7, 0x3c, 0x3d, 0x49, 0x2a, 0x67, 0x17, 0x15, 0xc1, 0x93, 0xb6, 0xfe, 0xa9, 0xf0, 0x36, 0x05, 0x0b, 0x94, 0x60, 0x69, 0x85, 0x6b, 0x89, 0x7e, 0x08, 0xc0, 0x07, 0x68, 0xf5, 0xee, 0x5d, 0xdc, 0xf7, 0x0b, 0x7c, 0xd6, 0xd0, 0xe0 }, - { 0x58, 0x60, 0x2e, 0xe7, 0x46, 0x8e, 0x6b, 0xc9, 0xdf, 0x21, 0xbd, 0x51, 0xb2, 0x3c, 0x00, 0x5f, 0x72, 0xd6, 0xcb, 0x01, 0x3f, 0x0a, 0x1b, 0x48, 0xcb, 0xec, 0x5e, 0xca, 0x29, 0x92, 0x99, 0xf9, 0x7f, 0x09, 0xf5, 0x4a, 0x9a, 0x01, 0x48, 0x3e, 0xae, 0xb3, 0x15, 0xa6, 0x47, 0x8b, 0xad, 0x37, 0xba, 0x47, 0xca, 0x13, 0x47, 0xc7, 0xc8, 0xfc, 0x9e, 0x66, 0x95, 0x59, 0x2c, 0x91, 0xd7, 0x23 }, - { 0x27, 0xf5, 0xb7, 0x9e, 0xd2, 0x56, 0xb0, 0x50, 0x99, 0x3d, 0x79, 0x34, 0x96, 0xed, 0xf4, 0x80, 0x7c, 0x1d, 0x85, 0xa7, 0xb0, 0xa6, 0x7c, 0x9c, 0x4f, 0xa9, 0x98, 0x60, 0x75, 0x0b, 0x0a, 0xe6, 0x69, 0x89, 0x67, 0x0a, 0x8f, 0xfd, 0x78, 0x56, 0xd7, 0xce, 0x41, 0x15, 0x99, 0xe5, 0x8c, 0x4d, 0x77, 0xb2, 0x32, 0xa6, 0x2b, 0xef, 0x64, 0xd1, 0x52, 0x75, 0xbe, 0x46, 0xa6, 0x82, 0x35, 0xff }, - { 0x39, 0x57, 0xa9, 0x76, 0xb9, 0xf1, 0x88, 0x7b, 0xf0, 0x04, 0xa8, 0xdc, 0xa9, 0x42, 0xc9, 0x2d, 0x2b, 0x37, 0xea, 0x52, 0x60, 0x0f, 0x25, 0xe0, 0xc9, 0xbc, 0x57, 0x07, 0xd0, 0x27, 0x9c, 0x00, 0xc6, 0xe8, 0x5a, 0x83, 0x9b, 0x0d, 0x2d, 0x8e, 0xb5, 0x9c, 0x51, 0xd9, 0x47, 0x88, 0xeb, 0xe6, 0x24, 0x74, 0xa7, 0x91, 0xca, 0xdf, 0x52, 0xcc, 0xcf, 0x20, 0xf5, 0x07, 0x0b, 0x65, 0x73, 0xfc }, - { 0xea, 0xa2, 0x37, 0x6d, 0x55, 0x38, 0x0b, 0xf7, 0x72, 0xec, 0xca, 0x9c, 0xb0, 0xaa, 0x46, 0x68, 0xc9, 0x5c, 0x70, 0x71, 0x62, 0xfa, 0x86, 0xd5, 0x18, 0xc8, 0xce, 0x0c, 0xa9, 0xbf, 0x73, 0x62, 0xb9, 0xf2, 0xa0, 0xad, 0xc3, 0xff, 0x59, 0x92, 0x2d, 0xf9, 0x21, 0xb9, 0x45, 0x67, 0xe8, 0x1e, 0x45, 0x2f, 0x6c, 0x1a, 0x07, 0xfc, 0x81, 0x7c, 0xeb, 0xe9, 0x96, 0x04, 0xb3, 0x50, 0x5d, 0x38 }, - { 0xc1, 0xe2, 0xc7, 0x8b, 0x6b, 0x27, 0x34, 0xe2, 0x48, 0x0e, 0xc5, 0x50, 0x43, 0x4c, 0xb5, 0xd6, 0x13, 0x11, 0x1a, 0xdc, 0xc2, 0x1d, 0x47, 0x55, 0x45, 0xc3, 0xb1, 0xb7, 0xe6, 0xff, 0x12, 0x44, 0x44, 0x76, 0xe5, 0xc0, 0x55, 0x13, 0x2e, 0x22, 0x29, 0xdc, 0x0f, 0x80, 0x70, 0x44, 0xbb, 0x91, 0x9b, 0x1a, 0x56, 0x62, 0xdd, 0x38, 0xa9, 0xee, 0x65, 0xe2, 0x43, 0xa3, 0x91, 0x1a, 0xed, 0x1a }, - { 0x8a, 0xb4, 0x87, 0x13, 0x38, 0x9d, 0xd0, 0xfc, 0xf9, 0xf9, 0x65, 0xd3, 0xce, 0x66, 0xb1, 0xe5, 0x59, 0xa1, 0xf8, 0xc5, 0x87, 0x41, 0xd6, 0x76, 0x83, 0xcd, 0x97, 0x13, 0x54, 0xf4, 0x52, 0xe6, 0x2d, 0x02, 0x07, 0xa6, 0x5e, 0x43, 0x6c, 0x5d, 0x5d, 0x8f, 0x8e, 0xe7, 0x1c, 0x6a, 0xbf, 0xe5, 0x0e, 0x66, 0x90, 0x04, 0xc3, 0x02, 0xb3, 0x1a, 0x7e, 0xa8, 0x31, 0x1d, 0x4a, 0x91, 0x60, 0x51 }, - { 0x24, 0xce, 0x0a, 0xdd, 0xaa, 0x4c, 0x65, 0x03, 0x8b, 0xd1, 0xb1, 0xc0, 0xf1, 0x45, 0x2a, 0x0b, 0x12, 0x87, 0x77, 0xaa, 0xbc, 0x94, 0xa2, 0x9d, 0xf2, 0xfd, 0x6c, 0x7e, 0x2f, 0x85, 0xf8, 0xab, 0x9a, 0xc7, 0xef, 0xf5, 0x16, 0xb0, 0xe0, 0xa8, 0x25, 0xc8, 0x4a, 0x24, 0xcf, 0xe4, 0x92, 0xea, 0xad, 0x0a, 0x63, 0x08, 0xe4, 0x6d, 0xd4, 0x2f, 0xe8, 0x33, 0x3a, 0xb9, 0x71, 0xbb, 0x30, 0xca }, - { 0x51, 0x54, 0xf9, 0x29, 0xee, 0x03, 0x04, 0x5b, 0x6b, 0x0c, 0x00, 0x04, 0xfa, 0x77, 0x8e, 0xde, 0xe1, 0xd1, 0x39, 0x89, 0x32, 0x67, 0xcc, 0x84, 0x82, 0x5a, 0xd7, 0xb3, 0x6c, 0x63, 0xde, 0x32, 0x79, 0x8e, 0x4a, 0x16, 0x6d, 0x24, 0x68, 0x65, 0x61, 0x35, 0x4f, 0x63, 0xb0, 0x07, 0x09, 0xa1, 0x36, 0x4b, 0x3c, 0x24, 0x1d, 0xe3, 0xfe, 0xbf, 0x07, 0x54, 0x04, 0x58, 0x97, 0x46, 0x7c, 0xd4 }, - { 0xe7, 0x4e, 0x90, 0x79, 0x20, 0xfd, 0x87, 0xbd, 0x5a, 0xd6, 0x36, 0xdd, 0x11, 0x08, 0x5e, 0x50, 0xee, 0x70, 0x45, 0x9c, 0x44, 0x3e, 0x1c, 0xe5, 0x80, 0x9a, 0xf2, 0xbc, 0x2e, 0xba, 0x39, 0xf9, 0xe6, 0xd7, 0x12, 0x8e, 0x0e, 0x37, 0x12, 0xc3, 0x16, 0xda, 0x06, 0xf4, 0x70, 0x5d, 0x78, 0xa4, 0x83, 0x8e, 0x28, 0x12, 0x1d, 0x43, 0x44, 0xa2, 0xc7, 0x9c, 0x5e, 0x0d, 0xb3, 0x07, 0xa6, 0x77 }, - { 0xbf, 0x91, 0xa2, 0x23, 0x34, 0xba, 0xc2, 0x0f, 0x3f, 0xd8, 0x06, 0x63, 0xb3, 0xcd, 0x06, 0xc4, 0xe8, 0x80, 0x2f, 0x30, 0xe6, 0xb5, 0x9f, 0x90, 0xd3, 0x03, 0x5c, 0xc9, 0x79, 0x8a, 0x21, 0x7e, 0xd5, 0xa3, 0x1a, 0xbb, 0xda, 0x7f, 0xa6, 0x84, 0x28, 0x27, 0xbd, 0xf2, 0xa7, 0xa1, 0xc2, 0x1f, 0x6f, 0xcf, 0xcc, 0xbb, 0x54, 0xc6, 0xc5, 0x29, 0x26, 0xf3, 0x2d, 0xa8, 0x16, 0x26, 0x9b, 0xe1 }, - { 0xd9, 0xd5, 0xc7, 0x4b, 0xe5, 0x12, 0x1b, 0x0b, 0xd7, 0x42, 0xf2, 0x6b, 0xff, 0xb8, 0xc8, 0x9f, 0x89, 0x17, 0x1f, 0x3f, 0x93, 0x49, 0x13, 0x49, 0x2b, 0x09, 0x03, 0xc2, 0x71, 0xbb, 0xe2, 0xb3, 0x39, 0x5e, 0xf2, 0x59, 0x66, 0x9b, 0xef, 0x43, 0xb5, 0x7f, 0x7f, 0xcc, 0x30, 0x27, 0xdb, 0x01, 0x82, 0x3f, 0x6b, 0xae, 0xe6, 0x6e, 0x4f, 0x9f, 0xea, 0xd4, 0xd6, 0x72, 0x6c, 0x74, 0x1f, 0xce }, - { 0x50, 0xc8, 0xb8, 0xcf, 0x34, 0xcd, 0x87, 0x9f, 0x80, 0xe2, 0xfa, 0xab, 0x32, 0x30, 0xb0, 0xc0, 0xe1, 0xcc, 0x3e, 0x9d, 0xca, 0xde, 0xb1, 0xb9, 0xd9, 0x7a, 0xb9, 0x23, 0x41, 0x5d, 0xd9, 0xa1, 0xfe, 0x38, 0xad, 0xdd, 0x5c, 0x11, 0x75, 0x6c, 0x67, 0x99, 0x0b, 0x25, 0x6e, 0x95, 0xad, 0x6d, 0x8f, 0x9f, 0xed, 0xce, 0x10, 0xbf, 0x1c, 0x90, 0x67, 0x9c, 0xde, 0x0e, 0xcf, 0x1b, 0xe3, 0x47 }, - { 0x0a, 0x38, 0x6e, 0x7c, 0xd5, 0xdd, 0x9b, 0x77, 0xa0, 0x35, 0xe0, 0x9f, 0xe6, 0xfe, 0xe2, 0xc8, 0xce, 0x61, 0xb5, 0x38, 0x3c, 0x87, 0xea, 0x43, 0x20, 0x50, 0x59, 0xc5, 0xe4, 0xcd, 0x4f, 0x44, 0x08, 0x31, 0x9b, 0xb0, 0xa8, 0x23, 0x60, 0xf6, 0xa5, 0x8e, 0x6c, 0x9c, 0xe3, 0xf4, 0x87, 0xc4, 0x46, 0x06, 0x3b, 0xf8, 0x13, 0xbc, 0x6b, 0xa5, 0x35, 0xe1, 0x7f, 0xc1, 0x82, 0x6c, 0xfc, 0x91 }, - { 0x1f, 0x14, 0x59, 0xcb, 0x6b, 0x61, 0xcb, 0xac, 0x5f, 0x0e, 0xfe, 0x8f, 0xc4, 0x87, 0x53, 0x8f, 0x42, 0x54, 0x89, 0x87, 0xfc, 0xd5, 0x62, 0x21, 0xcf, 0xa7, 0xbe, 0xb2, 0x25, 0x04, 0x76, 0x9e, 0x79, 0x2c, 0x45, 0xad, 0xfb, 0x1d, 0x6b, 0x3d, 0x60, 0xd7, 0xb7, 0x49, 0xc8, 0xa7, 0x5b, 0x0b, 0xdf, 0x14, 0xe8, 0xea, 0x72, 0x1b, 0x95, 0xdc, 0xa5, 0x38, 0xca, 0x6e, 0x25, 0x71, 0x12, 0x09 }, - { 0xe5, 0x8b, 0x38, 0x36, 0xb7, 0xd8, 0xfe, 0xdb, 0xb5, 0x0c, 0xa5, 0x72, 0x5c, 0x65, 0x71, 0xe7, 0x4c, 0x07, 0x85, 0xe9, 0x78, 0x21, 0xda, 0xb8, 0xb6, 0x29, 0x8c, 0x10, 0xe4, 0xc0, 0x79, 0xd4, 0xa6, 0xcd, 0xf2, 0x2f, 0x0f, 0xed, 0xb5, 0x50, 0x32, 0x92, 0x5c, 0x16, 0x74, 0x81, 0x15, 0xf0, 0x1a, 0x10, 0x5e, 0x77, 0xe0, 0x0c, 0xee, 0x3d, 0x07, 0x92, 0x4d, 0xc0, 0xd8, 0xf9, 0x06, 0x59 }, - { 0xb9, 0x29, 0xcc, 0x65, 0x05, 0xf0, 0x20, 0x15, 0x86, 0x72, 0xde, 0xda, 0x56, 0xd0, 0xdb, 0x08, 0x1a, 0x2e, 0xe3, 0x4c, 0x00, 0xc1, 0x10, 0x00, 0x29, 0xbd, 0xf8, 0xea, 0x98, 0x03, 0x4f, 0xa4, 0xbf, 0x3e, 0x86, 0x55, 0xec, 0x69, 0x7f, 0xe3, 0x6f, 0x40, 0x55, 0x3c, 0x5b, 0xb4, 0x68, 0x01, 0x64, 0x4a, 0x62, 0x7d, 0x33, 0x42, 0xf4, 0xfc, 0x92, 0xb6, 0x1f, 0x03, 0x29, 0x0f, 0xb3, 0x81 }, - { 0x72, 0xd3, 0x53, 0x99, 0x4b, 0x49, 0xd3, 0xe0, 0x31, 0x53, 0x92, 0x9a, 0x1e, 0x4d, 0x4f, 0x18, 0x8e, 0xe5, 0x8a, 0xb9, 0xe7, 0x2e, 0xe8, 0xe5, 0x12, 0xf2, 0x9b, 0xc7, 0x73, 0x91, 0x38, 0x19, 0xce, 0x05, 0x7d, 0xdd, 0x70, 0x02, 0xc0, 0x43, 0x3e, 0xe0, 0xa1, 0x61, 0x14, 0xe3, 0xd1, 0x56, 0xdd, 0x2c, 0x4a, 0x7e, 0x80, 0xee, 0x53, 0x37, 0x8b, 0x86, 0x70, 0xf2, 0x3e, 0x33, 0xef, 0x56 }, - { 0xc7, 0x0e, 0xf9, 0xbf, 0xd7, 0x75, 0xd4, 0x08, 0x17, 0x67, 0x37, 0xa0, 0x73, 0x6d, 0x68, 0x51, 0x7c, 0xe1, 0xaa, 0xad, 0x7e, 0x81, 0xa9, 0x3c, 0x8c, 0x1e, 0xd9, 0x67, 0xea, 0x21, 0x4f, 0x56, 0xc8, 0xa3, 0x77, 0xb1, 0x76, 0x3e, 0x67, 0x66, 0x15, 0xb6, 0x0f, 0x39, 0x88, 0x24, 0x1e, 0xae, 0x6e, 0xab, 0x96, 0x85, 0xa5, 0x12, 0x49, 0x29, 0xd2, 0x81, 0x88, 0xf2, 0x9e, 0xab, 0x06, 0xf7 }, - { 0xc2, 0x30, 0xf0, 0x80, 0x26, 0x79, 0xcb, 0x33, 0x82, 0x2e, 0xf8, 0xb3, 0xb2, 0x1b, 0xf7, 0xa9, 0xa2, 0x89, 0x42, 0x09, 0x29, 0x01, 0xd7, 0xda, 0xc3, 0x76, 0x03, 0x00, 0x83, 0x10, 0x26, 0xcf, 0x35, 0x4c, 0x92, 0x32, 0xdf, 0x3e, 0x08, 0x4d, 0x99, 0x03, 0x13, 0x0c, 0x60, 0x1f, 0x63, 0xc1, 0xf4, 0xa4, 0xa4, 0xb8, 0x10, 0x6e, 0x46, 0x8c, 0xd4, 0x43, 0xbb, 0xe5, 0xa7, 0x34, 0xf4, 0x5f }, - { 0x6f, 0x43, 0x09, 0x4c, 0xaf, 0xb5, 0xeb, 0xf1, 0xf7, 0xa4, 0x93, 0x7e, 0xc5, 0x0f, 0x56, 0xa4, 0xc9, 0xda, 0x30, 0x3c, 0xbb, 0x55, 0xac, 0x1f, 0x27, 0xf1, 0xf1, 0x97, 0x6c, 0xd9, 0x6b, 0xed, 0xa9, 0x46, 0x4f, 0x0e, 0x7b, 0x9c, 0x54, 0x62, 0x0b, 0x8a, 0x9f, 0xba, 0x98, 0x31, 0x64, 0xb8, 0xbe, 0x35, 0x78, 0x42, 0x5a, 0x02, 0x4f, 0x5f, 0xe1, 0x99, 0xc3, 0x63, 0x56, 0xb8, 0x89, 0x72 }, - { 0x37, 0x45, 0x27, 0x3f, 0x4c, 0x38, 0x22, 0x5d, 0xb2, 0x33, 0x73, 0x81, 0x87, 0x1a, 0x0c, 0x6a, 0xaf, 0xd3, 0xaf, 0x9b, 0x01, 0x8c, 0x88, 0xaa, 0x02, 0x02, 0x58, 0x50, 0xa5, 0xdc, 0x3a, 0x42, 0xa1, 0xa3, 0xe0, 0x3e, 0x56, 0xcb, 0xf1, 0xb0, 0x87, 0x6d, 0x63, 0xa4, 0x41, 0xf1, 0xd2, 0x85, 0x6a, 0x39, 0xb8, 0x80, 0x1e, 0xb5, 0xaf, 0x32, 0x52, 0x01, 0xc4, 0x15, 0xd6, 0x5e, 0x97, 0xfe }, - { 0xc5, 0x0c, 0x44, 0xcc, 0xa3, 0xec, 0x3e, 0xda, 0xae, 0x77, 0x9a, 0x7e, 0x17, 0x94, 0x50, 0xeb, 0xdd, 0xa2, 0xf9, 0x70, 0x67, 0xc6, 0x90, 0xaa, 0x6c, 0x5a, 0x4a, 0xc7, 0xc3, 0x01, 0x39, 0xbb, 0x27, 0xc0, 0xdf, 0x4d, 0xb3, 0x22, 0x0e, 0x63, 0xcb, 0x11, 0x0d, 0x64, 0xf3, 0x7f, 0xfe, 0x07, 0x8d, 0xb7, 0x26, 0x53, 0xe2, 0xda, 0xac, 0xf9, 0x3a, 0xe3, 0xf0, 0xa2, 0xd1, 0xa7, 0xeb, 0x2e }, - { 0x8a, 0xef, 0x26, 0x3e, 0x38, 0x5c, 0xbc, 0x61, 0xe1, 0x9b, 0x28, 0x91, 0x42, 0x43, 0x26, 0x2a, 0xf5, 0xaf, 0xe8, 0x72, 0x6a, 0xf3, 0xce, 0x39, 0xa7, 0x9c, 0x27, 0x02, 0x8c, 0xf3, 0xec, 0xd3, 0xf8, 0xd2, 0xdf, 0xd9, 0xcf, 0xc9, 0xad, 0x91, 0xb5, 0x8f, 0x6f, 0x20, 0x77, 0x8f, 0xd5, 0xf0, 0x28, 0x94, 0xa3, 0xd9, 0x1c, 0x7d, 0x57, 0xd1, 0xe4, 0xb8, 0x66, 0xa7, 0xf3, 0x64, 0xb6, 0xbe }, - { 0x28, 0x69, 0x61, 0x41, 0xde, 0x6e, 0x2d, 0x9b, 0xcb, 0x32, 0x35, 0x57, 0x8a, 0x66, 0x16, 0x6c, 0x14, 0x48, 0xd3, 0xe9, 0x05, 0xa1, 0xb4, 0x82, 0xd4, 0x23, 0xbe, 0x4b, 0xc5, 0x36, 0x9b, 0xc8, 0xc7, 0x4d, 0xae, 0x0a, 0xcc, 0x9c, 0xc1, 0x23, 0xe1, 0xd8, 0xdd, 0xce, 0x9f, 0x97, 0x91, 0x7e, 0x8c, 0x01, 0x9c, 0x55, 0x2d, 0xa3, 0x2d, 0x39, 0xd2, 0x21, 0x9b, 0x9a, 0xbf, 0x0f, 0xa8, 0xc8 }, - { 0x2f, 0xb9, 0xeb, 0x20, 0x85, 0x83, 0x01, 0x81, 0x90, 0x3a, 0x9d, 0xaf, 0xe3, 0xdb, 0x42, 0x8e, 0xe1, 0x5b, 0xe7, 0x66, 0x22, 0x24, 0xef, 0xd6, 0x43, 0x37, 0x1f, 0xb2, 0x56, 0x46, 0xae, 0xe7, 0x16, 0xe5, 0x31, 0xec, 0xa6, 0x9b, 0x2b, 0xdc, 0x82, 0x33, 0xf1, 0xa8, 0x08, 0x1f, 0xa4, 0x3d, 0xa1, 0x50, 0x03, 0x02, 0x97, 0x5a, 0x77, 0xf4, 0x2f, 0xa5, 0x92, 0x13, 0x67, 0x10, 0xe9, 0xdc }, - { 0x66, 0xf9, 0xa7, 0x14, 0x3f, 0x7a, 0x33, 0x14, 0xa6, 0x69, 0xbf, 0x2e, 0x24, 0xbb, 0xb3, 0x50, 0x14, 0x26, 0x1d, 0x63, 0x9f, 0x49, 0x5b, 0x6c, 0x9c, 0x1f, 0x10, 0x4f, 0xe8, 0xe3, 0x20, 0xac, 0xa6, 0x0d, 0x45, 0x50, 0xd6, 0x9d, 0x52, 0xed, 0xbd, 0x5a, 0x3c, 0xde, 0xb4, 0x01, 0x4a, 0xe6, 0x5b, 0x1d, 0x87, 0xaa, 0x77, 0x0b, 0x69, 0xae, 0x5c, 0x15, 0xf4, 0x33, 0x0b, 0x0b, 0x0a, 0xd8 }, - { 0xf4, 0xc4, 0xdd, 0x1d, 0x59, 0x4c, 0x35, 0x65, 0xe3, 0xe2, 0x5c, 0xa4, 0x3d, 0xad, 0x82, 0xf6, 0x2a, 0xbe, 0xa4, 0x83, 0x5e, 0xd4, 0xcd, 0x81, 0x1b, 0xcd, 0x97, 0x5e, 0x46, 0x27, 0x98, 0x28, 0xd4, 0x4d, 0x4c, 0x62, 0xc3, 0x67, 0x9f, 0x1b, 0x7f, 0x7b, 0x9d, 0xd4, 0x57, 0x1d, 0x7b, 0x49, 0x55, 0x73, 0x47, 0xb8, 0xc5, 0x46, 0x0c, 0xbd, 0xc1, 0xbe, 0xf6, 0x90, 0xfb, 0x2a, 0x08, 0xc0 }, - { 0x8f, 0x1d, 0xc9, 0x64, 0x9c, 0x3a, 0x84, 0x55, 0x1f, 0x8f, 0x6e, 0x91, 0xca, 0xc6, 0x82, 0x42, 0xa4, 0x3b, 0x1f, 0x8f, 0x32, 0x8e, 0xe9, 0x22, 0x80, 0x25, 0x73, 0x87, 0xfa, 0x75, 0x59, 0xaa, 0x6d, 0xb1, 0x2e, 0x4a, 0xea, 0xdc, 0x2d, 0x26, 0x09, 0x91, 0x78, 0x74, 0x9c, 0x68, 0x64, 0xb3, 0x57, 0xf3, 0xf8, 0x3b, 0x2f, 0xb3, 0xef, 0xa8, 0xd2, 0xa8, 0xdb, 0x05, 0x6b, 0xed, 0x6b, 0xcc }, - { 0x31, 0x39, 0xc1, 0xa7, 0xf9, 0x7a, 0xfd, 0x16, 0x75, 0xd4, 0x60, 0xeb, 0xbc, 0x07, 0xf2, 0x72, 0x8a, 0xa1, 0x50, 0xdf, 0x84, 0x96, 0x24, 0x51, 0x1e, 0xe0, 0x4b, 0x74, 0x3b, 0xa0, 0xa8, 0x33, 0x09, 0x2f, 0x18, 0xc1, 0x2d, 0xc9, 0x1b, 0x4d, 0xd2, 0x43, 0xf3, 0x33, 0x40, 0x2f, 0x59, 0xfe, 0x28, 0xab, 0xdb, 0xbb, 0xae, 0x30, 0x1e, 0x7b, 0x65, 0x9c, 0x7a, 0x26, 0xd5, 0xc0, 0xf9, 0x79 }, - { 0x06, 0xf9, 0x4a, 0x29, 0x96, 0x15, 0x8a, 0x81, 0x9f, 0xe3, 0x4c, 0x40, 0xde, 0x3c, 0xf0, 0x37, 0x9f, 0xd9, 0xfb, 0x85, 0xb3, 0xe3, 0x63, 0xba, 0x39, 0x26, 0xa0, 0xe7, 0xd9, 0x60, 0xe3, 0xf4, 0xc2, 0xe0, 0xc7, 0x0c, 0x7c, 0xe0, 0xcc, 0xb2, 0xa6, 0x4f, 0xc2, 0x98, 0x69, 0xf6, 0xe7, 0xab, 0x12, 0xbd, 0x4d, 0x3f, 0x14, 0xfc, 0xe9, 0x43, 0x27, 0x90, 0x27, 0xe7, 0x85, 0xfb, 0x5c, 0x29 }, - { 0xc2, 0x9c, 0x39, 0x9e, 0xf3, 0xee, 0xe8, 0x96, 0x1e, 0x87, 0x56, 0x5c, 0x1c, 0xe2, 0x63, 0x92, 0x5f, 0xc3, 0xd0, 0xce, 0x26, 0x7d, 0x13, 0xe4, 0x8d, 0xd9, 0xe7, 0x32, 0xee, 0x67, 0xb0, 0xf6, 0x9f, 0xad, 0x56, 0x40, 0x1b, 0x0f, 0x10, 0xfc, 0xaa, 0xc1, 0x19, 0x20, 0x10, 0x46, 0xcc, 0xa2, 0x8c, 0x5b, 0x14, 0xab, 0xde, 0xa3, 0x21, 0x2a, 0xe6, 0x55, 0x62, 0xf7, 0xf1, 0x38, 0xdb, 0x3d }, - { 0x4c, 0xec, 0x4c, 0x9d, 0xf5, 0x2e, 0xef, 0x05, 0xc3, 0xf6, 0xfa, 0xaa, 0x97, 0x91, 0xbc, 0x74, 0x45, 0x93, 0x71, 0x83, 0x22, 0x4e, 0xcc, 0x37, 0xa1, 0xe5, 0x8d, 0x01, 0x32, 0xd3, 0x56, 0x17, 0x53, 0x1d, 0x7e, 0x79, 0x5f, 0x52, 0xaf, 0x7b, 0x1e, 0xb9, 0xd1, 0x47, 0xde, 0x12, 0x92, 0xd3, 0x45, 0xfe, 0x34, 0x18, 0x23, 0xf8, 0xe6, 0xbc, 0x1e, 0x5b, 0xad, 0xca, 0x5c, 0x65, 0x61, 0x08 }, - { 0x89, 0x8b, 0xfb, 0xae, 0x93, 0xb3, 0xe1, 0x8d, 0x00, 0x69, 0x7e, 0xab, 0x7d, 0x97, 0x04, 0xfa, 0x36, 0xec, 0x33, 0x9d, 0x07, 0x61, 0x31, 0xce, 0xfd, 0xf3, 0x0e, 0xdb, 0xe8, 0xd9, 0xcc, 0x81, 0xc3, 0xa8, 0x0b, 0x12, 0x96, 0x59, 0xb1, 0x63, 0xa3, 0x23, 0xba, 0xb9, 0x79, 0x3d, 0x4f, 0xee, 0xd9, 0x2d, 0x54, 0xda, 0xe9, 0x66, 0xc7, 0x75, 0x29, 0x76, 0x4a, 0x09, 0xbe, 0x88, 0xdb, 0x45 }, - { 0xee, 0x9b, 0xd0, 0x46, 0x9d, 0x3a, 0xaf, 0x4f, 0x14, 0x03, 0x5b, 0xe4, 0x8a, 0x2c, 0x3b, 0x84, 0xd9, 0xb4, 0xb1, 0xff, 0xf1, 0xd9, 0x45, 0xe1, 0xf1, 0xc1, 0xd3, 0x89, 0x80, 0xa9, 0x51, 0xbe, 0x19, 0x7b, 0x25, 0xfe, 0x22, 0xc7, 0x31, 0xf2, 0x0a, 0xea, 0xcc, 0x93, 0x0b, 0xa9, 0xc4, 0xa1, 0xf4, 0x76, 0x22, 0x27, 0x61, 0x7a, 0xd3, 0x50, 0xfd, 0xab, 0xb4, 0xe8, 0x02, 0x73, 0xa0, 0xf4 }, - { 0x3d, 0x4d, 0x31, 0x13, 0x30, 0x05, 0x81, 0xcd, 0x96, 0xac, 0xbf, 0x09, 0x1c, 0x3d, 0x0f, 0x3c, 0x31, 0x01, 0x38, 0xcd, 0x69, 0x79, 0xe6, 0x02, 0x6c, 0xde, 0x62, 0x3e, 0x2d, 0xd1, 0xb2, 0x4d, 0x4a, 0x86, 0x38, 0xbe, 0xd1, 0x07, 0x33, 0x44, 0x78, 0x3a, 0xd0, 0x64, 0x9c, 0xc6, 0x30, 0x5c, 0xce, 0xc0, 0x4b, 0xeb, 0x49, 0xf3, 0x1c, 0x63, 0x30, 0x88, 0xa9, 0x9b, 0x65, 0x13, 0x02, 0x67 }, - { 0x95, 0xc0, 0x59, 0x1a, 0xd9, 0x1f, 0x92, 0x1a, 0xc7, 0xbe, 0x6d, 0x9c, 0xe3, 0x7e, 0x06, 0x63, 0xed, 0x80, 0x11, 0xc1, 0xcf, 0xd6, 0xd0, 0x16, 0x2a, 0x55, 0x72, 0xe9, 0x43, 0x68, 0xba, 0xc0, 0x20, 0x24, 0x48, 0x5e, 0x6a, 0x39, 0x85, 0x4a, 0xa4, 0x6f, 0xe3, 0x8e, 0x97, 0xd6, 0xc6, 0xb1, 0x94, 0x7c, 0xd2, 0x72, 0xd8, 0x6b, 0x06, 0xbb, 0x5b, 0x2f, 0x78, 0xb9, 0xb6, 0x8d, 0x55, 0x9d }, - { 0x22, 0x7b, 0x79, 0xde, 0xd3, 0x68, 0x15, 0x3b, 0xf4, 0x6c, 0x0a, 0x3c, 0xa9, 0x78, 0xbf, 0xdb, 0xef, 0x31, 0xf3, 0x02, 0x4a, 0x56, 0x65, 0x84, 0x24, 0x68, 0x49, 0x0b, 0x0f, 0xf7, 0x48, 0xae, 0x04, 0xe7, 0x83, 0x2e, 0xd4, 0xc9, 0xf4, 0x9d, 0xe9, 0xb1, 0x70, 0x67, 0x09, 0xd6, 0x23, 0xe5, 0xc8, 0xc1, 0x5e, 0x3c, 0xae, 0xca, 0xe8, 0xd5, 0xe4, 0x33, 0x43, 0x0f, 0xf7, 0x2f, 0x20, 0xeb }, - { 0x5d, 0x34, 0xf3, 0x95, 0x2f, 0x01, 0x05, 0xee, 0xf8, 0x8a, 0xe8, 0xb6, 0x4c, 0x6c, 0xe9, 0x5e, 0xbf, 0xad, 0xe0, 0xe0, 0x2c, 0x69, 0xb0, 0x87, 0x62, 0xa8, 0x71, 0x2d, 0x2e, 0x49, 0x11, 0xad, 0x3f, 0x94, 0x1f, 0xc4, 0x03, 0x4d, 0xc9, 0xb2, 0xe4, 0x79, 0xfd, 0xbc, 0xd2, 0x79, 0xb9, 0x02, 0xfa, 0xf5, 0xd8, 0x38, 0xbb, 0x2e, 0x0c, 0x64, 0x95, 0xd3, 0x72, 0xb5, 0xb7, 0x02, 0x98, 0x13 }, - { 0x7f, 0x93, 0x9b, 0xf8, 0x35, 0x3a, 0xbc, 0xe4, 0x9e, 0x77, 0xf1, 0x4f, 0x37, 0x50, 0xaf, 0x20, 0xb7, 0xb0, 0x39, 0x02, 0xe1, 0xa1, 0xe7, 0xfb, 0x6a, 0xaf, 0x76, 0xd0, 0x25, 0x9c, 0xd4, 0x01, 0xa8, 0x31, 0x90, 0xf1, 0x56, 0x40, 0xe7, 0x4f, 0x3e, 0x6c, 0x5a, 0x90, 0xe8, 0x39, 0xc7, 0x82, 0x1f, 0x64, 0x74, 0x75, 0x7f, 0x75, 0xc7, 0xbf, 0x90, 0x02, 0x08, 0x4d, 0xdc, 0x7a, 0x62, 0xdc }, - { 0x06, 0x2b, 0x61, 0xa2, 0xf9, 0xa3, 0x3a, 0x71, 0xd7, 0xd0, 0xa0, 0x61, 0x19, 0x64, 0x4c, 0x70, 0xb0, 0x71, 0x6a, 0x50, 0x4d, 0xe7, 0xe5, 0xe1, 0xbe, 0x49, 0xbd, 0x7b, 0x86, 0xe7, 0xed, 0x68, 0x17, 0x71, 0x4f, 0x9f, 0x0f, 0xc3, 0x13, 0xd0, 0x61, 0x29, 0x59, 0x7e, 0x9a, 0x22, 0x35, 0xec, 0x85, 0x21, 0xde, 0x36, 0xf7, 0x29, 0x0a, 0x90, 0xcc, 0xfc, 0x1f, 0xfa, 0x6d, 0x0a, 0xee, 0x29 }, - { 0xf2, 0x9e, 0x01, 0xee, 0xae, 0x64, 0x31, 0x1e, 0xb7, 0xf1, 0xc6, 0x42, 0x2f, 0x94, 0x6b, 0xf7, 0xbe, 0xa3, 0x63, 0x79, 0x52, 0x3e, 0x7b, 0x2b, 0xba, 0xba, 0x7d, 0x1d, 0x34, 0xa2, 0x2d, 0x5e, 0xa5, 0xf1, 0xc5, 0xa0, 0x9d, 0x5c, 0xe1, 0xfe, 0x68, 0x2c, 0xce, 0xd9, 0xa4, 0x79, 0x8d, 0x1a, 0x05, 0xb4, 0x6c, 0xd7, 0x2d, 0xff, 0x5c, 0x1b, 0x35, 0x54, 0x40, 0xb2, 0xa2, 0xd4, 0x76, 0xbc }, - { 0xec, 0x38, 0xcd, 0x3b, 0xba, 0xb3, 0xef, 0x35, 0xd7, 0xcb, 0x6d, 0x5c, 0x91, 0x42, 0x98, 0x35, 0x1d, 0x8a, 0x9d, 0xc9, 0x7f, 0xce, 0xe0, 0x51, 0xa8, 0xa0, 0x2f, 0x58, 0xe3, 0xed, 0x61, 0x84, 0xd0, 0xb7, 0x81, 0x0a, 0x56, 0x15, 0x41, 0x1a, 0xb1, 0xb9, 0x52, 0x09, 0xc3, 0xc8, 0x10, 0x11, 0x4f, 0xde, 0xb2, 0x24, 0x52, 0x08, 0x4e, 0x77, 0xf3, 0xf8, 0x47, 0xc6, 0xdb, 0xaa, 0xfe, 0x16 }, - { 0xc2, 0xae, 0xf5, 0xe0, 0xca, 0x43, 0xe8, 0x26, 0x41, 0x56, 0x5b, 0x8c, 0xb9, 0x43, 0xaa, 0x8b, 0xa5, 0x35, 0x50, 0xca, 0xef, 0x79, 0x3b, 0x65, 0x32, 0xfa, 0xfa, 0xd9, 0x4b, 0x81, 0x60, 0x82, 0xf0, 0x11, 0x3a, 0x3e, 0xa2, 0xf6, 0x36, 0x08, 0xab, 0x40, 0x43, 0x7e, 0xcc, 0x0f, 0x02, 0x29, 0xcb, 0x8f, 0xa2, 0x24, 0xdc, 0xf1, 0xc4, 0x78, 0xa6, 0x7d, 0x9b, 0x64, 0x16, 0x2b, 0x92, 0xd1 }, - { 0x15, 0xf5, 0x34, 0xef, 0xff, 0x71, 0x05, 0xcd, 0x1c, 0x25, 0x4d, 0x07, 0x4e, 0x27, 0xd5, 0x89, 0x8b, 0x89, 0x31, 0x3b, 0x7d, 0x36, 0x6d, 0xc2, 0xd7, 0xd8, 0x71, 0x13, 0xfa, 0x7d, 0x53, 0xaa, 0xe1, 0x3f, 0x6d, 0xba, 0x48, 0x7a, 0xd8, 0x10, 0x3d, 0x5e, 0x85, 0x4c, 0x91, 0xfd, 0xb6, 0xe1, 0xe7, 0x4b, 0x2e, 0xf6, 0xd1, 0x43, 0x17, 0x69, 0xc3, 0x07, 0x67, 0xdd, 0xe0, 0x67, 0xa3, 0x5c }, - { 0x89, 0xac, 0xbc, 0xa0, 0xb1, 0x69, 0x89, 0x7a, 0x0a, 0x27, 0x14, 0xc2, 0xdf, 0x8c, 0x95, 0xb5, 0xb7, 0x9c, 0xb6, 0x93, 0x90, 0x14, 0x2b, 0x7d, 0x60, 0x18, 0xbb, 0x3e, 0x30, 0x76, 0xb0, 0x99, 0xb7, 0x9a, 0x96, 0x41, 0x52, 0xa9, 0xd9, 0x12, 0xb1, 0xb8, 0x64, 0x12, 0xb7, 0xe3, 0x72, 0xe9, 0xce, 0xca, 0xd7, 0xf2, 0x5d, 0x4c, 0xba, 0xb8, 0xa3, 0x17, 0xbe, 0x36, 0x49, 0x2a, 0x67, 0xd7 }, - { 0xe3, 0xc0, 0x73, 0x91, 0x90, 0xed, 0x84, 0x9c, 0x9c, 0x96, 0x2f, 0xd9, 0xdb, 0xb5, 0x5e, 0x20, 0x7e, 0x62, 0x4f, 0xca, 0xc1, 0xeb, 0x41, 0x76, 0x91, 0x51, 0x54, 0x99, 0xee, 0xa8, 0xd8, 0x26, 0x7b, 0x7e, 0x8f, 0x12, 0x87, 0xa6, 0x36, 0x33, 0xaf, 0x50, 0x11, 0xfd, 0xe8, 0xc4, 0xdd, 0xf5, 0x5b, 0xfd, 0xf7, 0x22, 0xed, 0xf8, 0x88, 0x31, 0x41, 0x4f, 0x2c, 0xfa, 0xed, 0x59, 0xcb, 0x9a }, - { 0x8d, 0x6c, 0xf8, 0x7c, 0x08, 0x38, 0x0d, 0x2d, 0x15, 0x06, 0xee, 0xe4, 0x6f, 0xd4, 0x22, 0x2d, 0x21, 0xd8, 0xc0, 0x4e, 0x58, 0x5f, 0xbf, 0xd0, 0x82, 0x69, 0xc9, 0x8f, 0x70, 0x28, 0x33, 0xa1, 0x56, 0x32, 0x6a, 0x07, 0x24, 0x65, 0x64, 0x00, 0xee, 0x09, 0x35, 0x1d, 0x57, 0xb4, 0x40, 0x17, 0x5e, 0x2a, 0x5d, 0xe9, 0x3c, 0xc5, 0xf8, 0x0d, 0xb6, 0xda, 0xf8, 0x35, 0x76, 0xcf, 0x75, 0xfa }, - { 0xda, 0x24, 0xbe, 0xde, 0x38, 0x36, 0x66, 0xd5, 0x63, 0xee, 0xed, 0x37, 0xf6, 0x31, 0x9b, 0xaf, 0x20, 0xd5, 0xc7, 0x5d, 0x16, 0x35, 0xa6, 0xba, 0x5e, 0xf4, 0xcf, 0xa1, 0xac, 0x95, 0x48, 0x7e, 0x96, 0xf8, 0xc0, 0x8a, 0xf6, 0x00, 0xaa, 0xb8, 0x7c, 0x98, 0x6e, 0xba, 0xd4, 0x9f, 0xc7, 0x0a, 0x58, 0xb4, 0x89, 0x0b, 0x9c, 0x87, 0x6e, 0x09, 0x10, 0x16, 0xda, 0xf4, 0x9e, 0x1d, 0x32, 0x2e }, - { 0xf9, 0xd1, 0xd1, 0xb1, 0xe8, 0x7e, 0xa7, 0xae, 0x75, 0x3a, 0x02, 0x97, 0x50, 0xcc, 0x1c, 0xf3, 0xd0, 0x15, 0x7d, 0x41, 0x80, 0x5e, 0x24, 0x5c, 0x56, 0x17, 0xbb, 0x93, 0x4e, 0x73, 0x2f, 0x0a, 0xe3, 0x18, 0x0b, 0x78, 0xe0, 0x5b, 0xfe, 0x76, 0xc7, 0xc3, 0x05, 0x1e, 0x3e, 0x3a, 0xc7, 0x8b, 0x9b, 0x50, 0xc0, 0x51, 0x42, 0x65, 0x7e, 0x1e, 0x03, 0x21, 0x5d, 0x6e, 0xc7, 0xbf, 0xd0, 0xfc }, - { 0x11, 0xb7, 0xbc, 0x16, 0x68, 0x03, 0x20, 0x48, 0xaa, 0x43, 0x34, 0x3d, 0xe4, 0x76, 0x39, 0x5e, 0x81, 0x4b, 0xbb, 0xc2, 0x23, 0x67, 0x8d, 0xb9, 0x51, 0xa1, 0xb0, 0x3a, 0x02, 0x1e, 0xfa, 0xc9, 0x48, 0xcf, 0xbe, 0x21, 0x5f, 0x97, 0xfe, 0x9a, 0x72, 0xa2, 0xf6, 0xbc, 0x03, 0x9e, 0x39, 0x56, 0xbf, 0xa4, 0x17, 0xc1, 0xa9, 0xf1, 0x0d, 0x6d, 0x7b, 0xa5, 0xd3, 0xd3, 0x2f, 0xf3, 0x23, 0xe5 }, - { 0xb8, 0xd9, 0x00, 0x0e, 0x4f, 0xc2, 0xb0, 0x66, 0xed, 0xb9, 0x1a, 0xfe, 0xe8, 0xe7, 0xeb, 0x0f, 0x24, 0xe3, 0xa2, 0x01, 0xdb, 0x8b, 0x67, 0x93, 0xc0, 0x60, 0x85, 0x81, 0xe6, 0x28, 0xed, 0x0b, 0xcc, 0x4e, 0x5a, 0xa6, 0x78, 0x79, 0x92, 0xa4, 0xbc, 0xc4, 0x4e, 0x28, 0x80, 0x93, 0xe6, 0x3e, 0xe8, 0x3a, 0xbd, 0x0b, 0xc3, 0xec, 0x6d, 0x09, 0x34, 0xa6, 0x74, 0xa4, 0xda, 0x13, 0x83, 0x8a }, - { 0xce, 0x32, 0x5e, 0x29, 0x4f, 0x9b, 0x67, 0x19, 0xd6, 0xb6, 0x12, 0x78, 0x27, 0x6a, 0xe0, 0x6a, 0x25, 0x64, 0xc0, 0x3b, 0xb0, 0xb7, 0x83, 0xfa, 0xfe, 0x78, 0x5b, 0xdf, 0x89, 0xc7, 0xd5, 0xac, 0xd8, 0x3e, 0x78, 0x75, 0x6d, 0x30, 0x1b, 0x44, 0x56, 0x99, 0x02, 0x4e, 0xae, 0xb7, 0x7b, 0x54, 0xd4, 0x77, 0x33, 0x6e, 0xc2, 0xa4, 0xf3, 0x32, 0xf2, 0xb3, 0xf8, 0x87, 0x65, 0xdd, 0xb0, 0xc3 }, - { 0x29, 0xac, 0xc3, 0x0e, 0x96, 0x03, 0xae, 0x2f, 0xcc, 0xf9, 0x0b, 0xf9, 0x7e, 0x6c, 0xc4, 0x63, 0xeb, 0xe2, 0x8c, 0x1b, 0x2f, 0x9b, 0x4b, 0x76, 0x5e, 0x70, 0x53, 0x7c, 0x25, 0xc7, 0x02, 0xa2, 0x9d, 0xcb, 0xfb, 0xf1, 0x4c, 0x99, 0xc5, 0x43, 0x45, 0xba, 0x2b, 0x51, 0xf1, 0x7b, 0x77, 0xb5, 0xf1, 0x5d, 0xb9, 0x2b, 0xba, 0xd8, 0xfa, 0x95, 0xc4, 0x71, 0xf5, 0xd0, 0x70, 0xa1, 0x37, 0xcc }, - { 0x33, 0x79, 0xcb, 0xaa, 0xe5, 0x62, 0xa8, 0x7b, 0x4c, 0x04, 0x25, 0x55, 0x0f, 0xfd, 0xd6, 0xbf, 0xe1, 0x20, 0x3f, 0x0d, 0x66, 0x6c, 0xc7, 0xea, 0x09, 0x5b, 0xe4, 0x07, 0xa5, 0xdf, 0xe6, 0x1e, 0xe9, 0x14, 0x41, 0xcd, 0x51, 0x54, 0xb3, 0xe5, 0x3b, 0x4f, 0x5f, 0xb3, 0x1a, 0xd4, 0xc7, 0xa9, 0xad, 0x5c, 0x7a, 0xf4, 0xae, 0x67, 0x9a, 0xa5, 0x1a, 0x54, 0x00, 0x3a, 0x54, 0xca, 0x6b, 0x2d }, - { 0x30, 0x95, 0xa3, 0x49, 0xd2, 0x45, 0x70, 0x8c, 0x7c, 0xf5, 0x50, 0x11, 0x87, 0x03, 0xd7, 0x30, 0x2c, 0x27, 0xb6, 0x0a, 0xf5, 0xd4, 0xe6, 0x7f, 0xc9, 0x78, 0xf8, 0xa4, 0xe6, 0x09, 0x53, 0xc7, 0xa0, 0x4f, 0x92, 0xfc, 0xf4, 0x1a, 0xee, 0x64, 0x32, 0x1c, 0xcb, 0x70, 0x7a, 0x89, 0x58, 0x51, 0x55, 0x2b, 0x1e, 0x37, 0xb0, 0x0b, 0xc5, 0xe6, 0xb7, 0x2f, 0xa5, 0xbc, 0xef, 0x9e, 0x3f, 0xff }, - { 0x07, 0x26, 0x2d, 0x73, 0x8b, 0x09, 0x32, 0x1f, 0x4d, 0xbc, 0xce, 0xc4, 0xbb, 0x26, 0xf4, 0x8c, 0xb0, 0xf0, 0xed, 0x24, 0x6c, 0xe0, 0xb3, 0x1b, 0x9a, 0x6e, 0x7b, 0xc6, 0x83, 0x04, 0x9f, 0x1f, 0x3e, 0x55, 0x45, 0xf2, 0x8c, 0xe9, 0x32, 0xdd, 0x98, 0x5c, 0x5a, 0xb0, 0xf4, 0x3b, 0xd6, 0xde, 0x07, 0x70, 0x56, 0x0a, 0xf3, 0x29, 0x06, 0x5e, 0xd2, 0xe4, 0x9d, 0x34, 0x62, 0x4c, 0x2c, 0xbb }, - { 0xb6, 0x40, 0x5e, 0xca, 0x8e, 0xe3, 0x31, 0x6c, 0x87, 0x06, 0x1c, 0xc6, 0xec, 0x18, 0xdb, 0xa5, 0x3e, 0x6c, 0x25, 0x0c, 0x63, 0xba, 0x1f, 0x3b, 0xae, 0x9e, 0x55, 0xdd, 0x34, 0x98, 0x03, 0x6a, 0xf0, 0x8c, 0xd2, 0x72, 0xaa, 0x24, 0xd7, 0x13, 0xc6, 0x02, 0x0d, 0x77, 0xab, 0x2f, 0x39, 0x19, 0xaf, 0x1a, 0x32, 0xf3, 0x07, 0x42, 0x06, 0x18, 0xab, 0x97, 0xe7, 0x39, 0x53, 0x99, 0x4f, 0xb4 }, - { 0x7e, 0xe6, 0x82, 0xf6, 0x31, 0x48, 0xee, 0x45, 0xf6, 0xe5, 0x31, 0x5d, 0xa8, 0x1e, 0x5c, 0x6e, 0x55, 0x7c, 0x2c, 0x34, 0x64, 0x1f, 0xc5, 0x09, 0xc7, 0xa5, 0x70, 0x10, 0x88, 0xc3, 0x8a, 0x74, 0x75, 0x61, 0x68, 0xe2, 0xcd, 0x8d, 0x35, 0x1e, 0x88, 0xfd, 0x1a, 0x45, 0x1f, 0x36, 0x0a, 0x01, 0xf5, 0xb2, 0x58, 0x0f, 0x9b, 0x5a, 0x2e, 0x8c, 0xfc, 0x13, 0x8f, 0x3d, 0xd5, 0x9a, 0x3f, 0xfc }, - { 0x1d, 0x26, 0x3c, 0x17, 0x9d, 0x6b, 0x26, 0x8f, 0x6f, 0xa0, 0x16, 0xf3, 0xa4, 0xf2, 0x9e, 0x94, 0x38, 0x91, 0x12, 0x5e, 0xd8, 0x59, 0x3c, 0x81, 0x25, 0x60, 0x59, 0xf5, 0xa7, 0xb4, 0x4a, 0xf2, 0xdc, 0xb2, 0x03, 0x0d, 0x17, 0x5c, 0x00, 0xe6, 0x2e, 0xca, 0xf7, 0xee, 0x96, 0x68, 0x2a, 0xa0, 0x7a, 0xb2, 0x0a, 0x61, 0x10, 0x24, 0xa2, 0x85, 0x32, 0xb1, 0xc2, 0x5b, 0x86, 0x65, 0x79, 0x02 }, - { 0x10, 0x6d, 0x13, 0x2c, 0xbd, 0xb4, 0xcd, 0x25, 0x97, 0x81, 0x28, 0x46, 0xe2, 0xbc, 0x1b, 0xf7, 0x32, 0xfe, 0xc5, 0xf0, 0xa5, 0xf6, 0x5d, 0xbb, 0x39, 0xec, 0x4e, 0x6d, 0xc6, 0x4a, 0xb2, 0xce, 0x6d, 0x24, 0x63, 0x0d, 0x0f, 0x15, 0xa8, 0x05, 0xc3, 0x54, 0x00, 0x25, 0xd8, 0x4a, 0xfa, 0x98, 0xe3, 0x67, 0x03, 0xc3, 0xdb, 0xee, 0x71, 0x3e, 0x72, 0xdd, 0xe8, 0x46, 0x5b, 0xc1, 0xbe, 0x7e }, - { 0x0e, 0x79, 0x96, 0x82, 0x26, 0x65, 0x06, 0x67, 0xa8, 0xd8, 0x62, 0xea, 0x8d, 0xa4, 0x89, 0x1a, 0xf5, 0x6a, 0x4e, 0x3a, 0x8b, 0x6d, 0x17, 0x50, 0xe3, 0x94, 0xf0, 0xde, 0xa7, 0x6d, 0x64, 0x0d, 0x85, 0x07, 0x7b, 0xce, 0xc2, 0xcc, 0x86, 0x88, 0x6e, 0x50, 0x67, 0x51, 0xb4, 0xf6, 0xa5, 0x83, 0x8f, 0x7f, 0x0b, 0x5f, 0xef, 0x76, 0x5d, 0x9d, 0xc9, 0x0d, 0xcd, 0xcb, 0xaf, 0x07, 0x9f, 0x08 }, - { 0x52, 0x11, 0x56, 0xa8, 0x2a, 0xb0, 0xc4, 0xe5, 0x66, 0xe5, 0x84, 0x4d, 0x5e, 0x31, 0xad, 0x9a, 0xaf, 0x14, 0x4b, 0xbd, 0x5a, 0x46, 0x4f, 0xdc, 0xa3, 0x4d, 0xbd, 0x57, 0x17, 0xe8, 0xff, 0x71, 0x1d, 0x3f, 0xfe, 0xbb, 0xfa, 0x08, 0x5d, 0x67, 0xfe, 0x99, 0x6a, 0x34, 0xf6, 0xd3, 0xe4, 0xe6, 0x0b, 0x13, 0x96, 0xbf, 0x4b, 0x16, 0x10, 0xc2, 0x63, 0xbd, 0xbb, 0x83, 0x4d, 0x56, 0x08, 0x16 }, - { 0x1a, 0xba, 0x88, 0xbe, 0xfc, 0x55, 0xbc, 0x25, 0xef, 0xbc, 0xe0, 0x2d, 0xb8, 0xb9, 0x93, 0x3e, 0x46, 0xf5, 0x76, 0x61, 0xba, 0xea, 0xbe, 0xb2, 0x1c, 0xc2, 0x57, 0x4d, 0x2a, 0x51, 0x8a, 0x3c, 0xba, 0x5d, 0xc5, 0xa3, 0x8e, 0x49, 0x71, 0x34, 0x40, 0xb2, 0x5f, 0x9c, 0x74, 0x4e, 0x75, 0xf6, 0xb8, 0x5c, 0x9d, 0x8f, 0x46, 0x81, 0xf6, 0x76, 0x16, 0x0f, 0x61, 0x05, 0x35, 0x7b, 0x84, 0x06 }, - { 0x5a, 0x99, 0x49, 0xfc, 0xb2, 0xc4, 0x73, 0xcd, 0xa9, 0x68, 0xac, 0x1b, 0x5d, 0x08, 0x56, 0x6d, 0xc2, 0xd8, 0x16, 0xd9, 0x60, 0xf5, 0x7e, 0x63, 0xb8, 0x98, 0xfa, 0x70, 0x1c, 0xf8, 0xeb, 0xd3, 0xf5, 0x9b, 0x12, 0x4d, 0x95, 0xbf, 0xbb, 0xed, 0xc5, 0xf1, 0xcf, 0x0e, 0x17, 0xd5, 0xea, 0xed, 0x0c, 0x02, 0xc5, 0x0b, 0x69, 0xd8, 0xa4, 0x02, 0xca, 0xbc, 0xca, 0x44, 0x33, 0xb5, 0x1f, 0xd4 }, - { 0xb0, 0xce, 0xad, 0x09, 0x80, 0x7c, 0x67, 0x2a, 0xf2, 0xeb, 0x2b, 0x0f, 0x06, 0xdd, 0xe4, 0x6c, 0xf5, 0x37, 0x0e, 0x15, 0xa4, 0x09, 0x6b, 0x1a, 0x7d, 0x7c, 0xbb, 0x36, 0xec, 0x31, 0xc2, 0x05, 0xfb, 0xef, 0xca, 0x00, 0xb7, 0xa4, 0x16, 0x2f, 0xa8, 0x9f, 0xb4, 0xfb, 0x3e, 0xb7, 0x8d, 0x79, 0x77, 0x0c, 0x23, 0xf4, 0x4e, 0x72, 0x06, 0x66, 0x4c, 0xe3, 0xcd, 0x93, 0x1c, 0x29, 0x1e, 0x5d }, - { 0xbb, 0x66, 0x64, 0x93, 0x1e, 0xc9, 0x70, 0x44, 0xe4, 0x5b, 0x2a, 0xe4, 0x20, 0xae, 0x1c, 0x55, 0x1a, 0x88, 0x74, 0xbc, 0x93, 0x7d, 0x08, 0xe9, 0x69, 0x39, 0x9c, 0x39, 0x64, 0xeb, 0xdb, 0xa8, 0x34, 0x6c, 0xdd, 0x5d, 0x09, 0xca, 0xaf, 0xe4, 0xc2, 0x8b, 0xa7, 0xec, 0x78, 0x81, 0x91, 0xce, 0xca, 0x65, 0xdd, 0xd6, 0xf9, 0x5f, 0x18, 0x58, 0x3e, 0x04, 0x0d, 0x0f, 0x30, 0xd0, 0x36, 0x4d }, - { 0x65, 0xbc, 0x77, 0x0a, 0x5f, 0xaa, 0x37, 0x92, 0x36, 0x98, 0x03, 0x68, 0x3e, 0x84, 0x4b, 0x0b, 0xe7, 0xee, 0x96, 0xf2, 0x9f, 0x6d, 0x6a, 0x35, 0x56, 0x80, 0x06, 0xbd, 0x55, 0x90, 0xf9, 0xa4, 0xef, 0x63, 0x9b, 0x7a, 0x80, 0x61, 0xc7, 0xb0, 0x42, 0x4b, 0x66, 0xb6, 0x0a, 0xc3, 0x4a, 0xf3, 0x11, 0x99, 0x05, 0xf3, 0x3a, 0x9d, 0x8c, 0x3a, 0xe1, 0x83, 0x82, 0xca, 0x9b, 0x68, 0x99, 0x00 }, - { 0xea, 0x9b, 0x4d, 0xca, 0x33, 0x33, 0x36, 0xaa, 0xf8, 0x39, 0xa4, 0x5c, 0x6e, 0xaa, 0x48, 0xb8, 0xcb, 0x4c, 0x7d, 0xda, 0xbf, 0xfe, 0xa4, 0xf6, 0x43, 0xd6, 0x35, 0x7e, 0xa6, 0x62, 0x8a, 0x48, 0x0a, 0x5b, 0x45, 0xf2, 0xb0, 0x52, 0xc1, 0xb0, 0x7d, 0x1f, 0xed, 0xca, 0x91, 0x8b, 0x6f, 0x11, 0x39, 0xd8, 0x0f, 0x74, 0xc2, 0x45, 0x10, 0xdc, 0xba, 0xa4, 0xbe, 0x70, 0xea, 0xcc, 0x1b, 0x06 }, - { 0xe6, 0x34, 0x2f, 0xb4, 0xa7, 0x80, 0xad, 0x97, 0x5d, 0x0e, 0x24, 0xbc, 0xe1, 0x49, 0x98, 0x9b, 0x91, 0xd3, 0x60, 0x55, 0x7e, 0x87, 0x99, 0x4f, 0x6b, 0x45, 0x7b, 0x89, 0x55, 0x75, 0xcc, 0x02, 0xd0, 0xc1, 0x5b, 0xad, 0x3c, 0xe7, 0x57, 0x7f, 0x4c, 0x63, 0x92, 0x7f, 0xf1, 0x3f, 0x3e, 0x38, 0x1f, 0xf7, 0xe7, 0x2b, 0xdb, 0xe7, 0x45, 0x32, 0x48, 0x44, 0xa9, 0xd2, 0x7e, 0x3f, 0x1c, 0x01 }, - { 0x3e, 0x20, 0x9c, 0x9b, 0x33, 0xe8, 0xe4, 0x61, 0x17, 0x8a, 0xb4, 0x6b, 0x1c, 0x64, 0xb4, 0x9a, 0x07, 0xfb, 0x74, 0x5f, 0x1c, 0x8b, 0xc9, 0x5f, 0xbf, 0xb9, 0x4c, 0x6b, 0x87, 0xc6, 0x95, 0x16, 0x65, 0x1b, 0x26, 0x4e, 0xf9, 0x80, 0x93, 0x7f, 0xad, 0x41, 0x23, 0x8b, 0x91, 0xdd, 0xc0, 0x11, 0xa5, 0xdd, 0x77, 0x7c, 0x7e, 0xfd, 0x44, 0x94, 0xb4, 0xb6, 0xec, 0xd3, 0xa9, 0xc2, 0x2a, 0xc0 }, - { 0xfd, 0x6a, 0x3d, 0x5b, 0x18, 0x75, 0xd8, 0x04, 0x86, 0xd6, 0xe6, 0x96, 0x94, 0xa5, 0x6d, 0xbb, 0x04, 0xa9, 0x9a, 0x4d, 0x05, 0x1f, 0x15, 0xdb, 0x26, 0x89, 0x77, 0x6b, 0xa1, 0xc4, 0x88, 0x2e, 0x6d, 0x46, 0x2a, 0x60, 0x3b, 0x70, 0x15, 0xdc, 0x9f, 0x4b, 0x74, 0x50, 0xf0, 0x53, 0x94, 0x30, 0x3b, 0x86, 0x52, 0xcf, 0xb4, 0x04, 0xa2, 0x66, 0x96, 0x2c, 0x41, 0xba, 0xe6, 0xe1, 0x8a, 0x94 }, - { 0x95, 0x1e, 0x27, 0x51, 0x7e, 0x6b, 0xad, 0x9e, 0x41, 0x95, 0xfc, 0x86, 0x71, 0xde, 0xe3, 0xe7, 0xe9, 0xbe, 0x69, 0xce, 0xe1, 0x42, 0x2c, 0xb9, 0xfe, 0xcf, 0xce, 0x0d, 0xba, 0x87, 0x5f, 0x7b, 0x31, 0x0b, 0x93, 0xee, 0x3a, 0x3d, 0x55, 0x8f, 0x94, 0x1f, 0x63, 0x5f, 0x66, 0x8f, 0xf8, 0x32, 0xd2, 0xc1, 0xd0, 0x33, 0xc5, 0xe2, 0xf0, 0x99, 0x7e, 0x4c, 0x66, 0xf1, 0x47, 0x34, 0x4e, 0x02 }, - { 0x8e, 0xba, 0x2f, 0x87, 0x4f, 0x1a, 0xe8, 0x40, 0x41, 0x90, 0x3c, 0x7c, 0x42, 0x53, 0xc8, 0x22, 0x92, 0x53, 0x0f, 0xc8, 0x50, 0x95, 0x50, 0xbf, 0xdc, 0x34, 0xc9, 0x5c, 0x7e, 0x28, 0x89, 0xd5, 0x65, 0x0b, 0x0a, 0xd8, 0xcb, 0x98, 0x8e, 0x5c, 0x48, 0x94, 0xcb, 0x87, 0xfb, 0xfb, 0xb1, 0x96, 0x12, 0xea, 0x93, 0xcc, 0xc4, 0xc5, 0xca, 0xd1, 0x71, 0x58, 0xb9, 0x76, 0x34, 0x64, 0xb4, 0x92 }, - { 0x16, 0xf7, 0x12, 0xea, 0xa1, 0xb7, 0xc6, 0x35, 0x47, 0x19, 0xa8, 0xe7, 0xdb, 0xdf, 0xaf, 0x55, 0xe4, 0x06, 0x3a, 0x4d, 0x27, 0x7d, 0x94, 0x75, 0x50, 0x01, 0x9b, 0x38, 0xdf, 0xb5, 0x64, 0x83, 0x09, 0x11, 0x05, 0x7d, 0x50, 0x50, 0x61, 0x36, 0xe2, 0x39, 0x4c, 0x3b, 0x28, 0x94, 0x5c, 0xc9, 0x64, 0x96, 0x7d, 0x54, 0xe3, 0x00, 0x0c, 0x21, 0x81, 0x62, 0x6c, 0xfb, 0x9b, 0x73, 0xef, 0xd2 }, - { 0xc3, 0x96, 0x39, 0xe7, 0xd5, 0xc7, 0xfb, 0x8c, 0xdd, 0x0f, 0xd3, 0xe6, 0xa5, 0x20, 0x96, 0x03, 0x94, 0x37, 0x12, 0x2f, 0x21, 0xc7, 0x8f, 0x16, 0x79, 0xce, 0xa9, 0xd7, 0x8a, 0x73, 0x4c, 0x56, 0xec, 0xbe, 0xb2, 0x86, 0x54, 0xb4, 0xf1, 0x8e, 0x34, 0x2c, 0x33, 0x1f, 0x6f, 0x72, 0x29, 0xec, 0x4b, 0x4b, 0xc2, 0x81, 0xb2, 0xd8, 0x0a, 0x6e, 0xb5, 0x00, 0x43, 0xf3, 0x17, 0x96, 0xc8, 0x8c }, - { 0x72, 0xd0, 0x81, 0xaf, 0x99, 0xf8, 0xa1, 0x73, 0xdc, 0xc9, 0xa0, 0xac, 0x4e, 0xb3, 0x55, 0x74, 0x05, 0x63, 0x9a, 0x29, 0x08, 0x4b, 0x54, 0xa4, 0x01, 0x72, 0x91, 0x2a, 0x2f, 0x8a, 0x39, 0x51, 0x29, 0xd5, 0x53, 0x6f, 0x09, 0x18, 0xe9, 0x02, 0xf9, 0xe8, 0xfa, 0x60, 0x00, 0x99, 0x5f, 0x41, 0x68, 0xdd, 0xc5, 0xf8, 0x93, 0x01, 0x1b, 0xe6, 0xa0, 0xdb, 0xc9, 0xb8, 0xa1, 0xa3, 0xf5, 0xbb }, - { 0xc1, 0x1a, 0xa8, 0x1e, 0x5e, 0xfd, 0x24, 0xd5, 0xfc, 0x27, 0xee, 0x58, 0x6c, 0xfd, 0x88, 0x47, 0xfb, 0xb0, 0xe2, 0x76, 0x01, 0xcc, 0xec, 0xe5, 0xec, 0xca, 0x01, 0x98, 0xe3, 0xc7, 0x76, 0x53, 0x93, 0xbb, 0x74, 0x45, 0x7c, 0x7e, 0x7a, 0x27, 0xeb, 0x91, 0x70, 0x35, 0x0e, 0x1f, 0xb5, 0x38, 0x57, 0x17, 0x75, 0x06, 0xbe, 0x3e, 0x76, 0x2c, 0xc0, 0xf1, 0x4d, 0x8c, 0x3a, 0xfe, 0x90, 0x77 }, - { 0xc2, 0x8f, 0x21, 0x50, 0xb4, 0x52, 0xe6, 0xc0, 0xc4, 0x24, 0xbc, 0xde, 0x6f, 0x8d, 0x72, 0x00, 0x7f, 0x93, 0x10, 0xfe, 0xd7, 0xf2, 0xf8, 0x7d, 0xe0, 0xdb, 0xb6, 0x4f, 0x44, 0x79, 0xd6, 0xc1, 0x44, 0x1b, 0xa6, 0x6f, 0x44, 0xb2, 0xac, 0xce, 0xe6, 0x16, 0x09, 0x17, 0x7e, 0xd3, 0x40, 0x12, 0x8b, 0x40, 0x7e, 0xce, 0xc7, 0xc6, 0x4b, 0xbe, 0x50, 0xd6, 0x3d, 0x22, 0xd8, 0x62, 0x77, 0x27 }, - { 0xf6, 0x3d, 0x88, 0x12, 0x28, 0x77, 0xec, 0x30, 0xb8, 0xc8, 0xb0, 0x0d, 0x22, 0xe8, 0x90, 0x00, 0xa9, 0x66, 0x42, 0x61, 0x12, 0xbd, 0x44, 0x16, 0x6e, 0x2f, 0x52, 0x5b, 0x76, 0x9c, 0xcb, 0xe9, 0xb2, 0x86, 0xd4, 0x37, 0xa0, 0x12, 0x91, 0x30, 0xdd, 0xe1, 0xa8, 0x6c, 0x43, 0xe0, 0x4b, 0xed, 0xb5, 0x94, 0xe6, 0x71, 0xd9, 0x82, 0x83, 0xaf, 0xe6, 0x4c, 0xe3, 0x31, 0xde, 0x98, 0x28, 0xfd }, - { 0x34, 0x8b, 0x05, 0x32, 0x88, 0x0b, 0x88, 0xa6, 0x61, 0x4a, 0x8d, 0x74, 0x08, 0xc3, 0xf9, 0x13, 0x35, 0x7f, 0xbb, 0x60, 0xe9, 0x95, 0xc6, 0x02, 0x05, 0xbe, 0x91, 0x39, 0xe7, 0x49, 0x98, 0xae, 0xde, 0x7f, 0x45, 0x81, 0xe4, 0x2f, 0x6b, 0x52, 0x69, 0x8f, 0x7f, 0xa1, 0x21, 0x97, 0x08, 0xc1, 0x44, 0x98, 0x06, 0x7f, 0xd1, 0xe0, 0x95, 0x02, 0xde, 0x83, 0xa7, 0x7d, 0xd2, 0x81, 0x15, 0x0c }, - { 0x51, 0x33, 0xdc, 0x8b, 0xef, 0x72, 0x53, 0x59, 0xdf, 0xf5, 0x97, 0x92, 0xd8, 0x5e, 0xaf, 0x75, 0xb7, 0xe1, 0xdc, 0xd1, 0x97, 0x8b, 0x01, 0xc3, 0x5b, 0x1b, 0x85, 0xfc, 0xeb, 0xc6, 0x33, 0x88, 0xad, 0x99, 0xa1, 0x7b, 0x63, 0x46, 0xa2, 0x17, 0xdc, 0x1a, 0x96, 0x22, 0xeb, 0xd1, 0x22, 0xec, 0xf6, 0x91, 0x3c, 0x4d, 0x31, 0xa6, 0xb5, 0x2a, 0x69, 0x5b, 0x86, 0xaf, 0x00, 0xd7, 0x41, 0xa0 }, - { 0x27, 0x53, 0xc4, 0xc0, 0xe9, 0x8e, 0xca, 0xd8, 0x06, 0xe8, 0x87, 0x80, 0xec, 0x27, 0xfc, 0xcd, 0x0f, 0x5c, 0x1a, 0xb5, 0x47, 0xf9, 0xe4, 0xbf, 0x16, 0x59, 0xd1, 0x92, 0xc2, 0x3a, 0xa2, 0xcc, 0x97, 0x1b, 0x58, 0xb6, 0x80, 0x25, 0x80, 0xba, 0xef, 0x8a, 0xdc, 0x3b, 0x77, 0x6e, 0xf7, 0x08, 0x6b, 0x25, 0x45, 0xc2, 0x98, 0x7f, 0x34, 0x8e, 0xe3, 0x71, 0x9c, 0xde, 0xf2, 0x58, 0xc4, 0x03 }, - { 0xb1, 0x66, 0x35, 0x73, 0xce, 0x4b, 0x9d, 0x8c, 0xae, 0xfc, 0x86, 0x50, 0x12, 0xf3, 0xe3, 0x97, 0x14, 0xb9, 0x89, 0x8a, 0x5d, 0xa6, 0xce, 0x17, 0xc2, 0x5a, 0x6a, 0x47, 0x93, 0x1a, 0x9d, 0xdb, 0x9b, 0xbe, 0x98, 0xad, 0xaa, 0x55, 0x3b, 0xee, 0xd4, 0x36, 0xe8, 0x95, 0x78, 0x45, 0x54, 0x16, 0xc2, 0xa5, 0x2a, 0x52, 0x5c, 0xf2, 0x86, 0x2b, 0x8d, 0x1d, 0x49, 0xa2, 0x53, 0x1b, 0x73, 0x91 }, - { 0x64, 0xf5, 0x8b, 0xd6, 0xbf, 0xc8, 0x56, 0xf5, 0xe8, 0x73, 0xb2, 0xa2, 0x95, 0x6e, 0xa0, 0xed, 0xa0, 0xd6, 0xdb, 0x0d, 0xa3, 0x9c, 0x8c, 0x7f, 0xc6, 0x7c, 0x9f, 0x9f, 0xee, 0xfc, 0xff, 0x30, 0x72, 0xcd, 0xf9, 0xe6, 0xea, 0x37, 0xf6, 0x9a, 0x44, 0xf0, 0xc6, 0x1a, 0xa0, 0xda, 0x36, 0x93, 0xc2, 0xdb, 0x5b, 0x54, 0x96, 0x0c, 0x02, 0x81, 0xa0, 0x88, 0x15, 0x1d, 0xb4, 0x2b, 0x11, 0xe8 }, - { 0x07, 0x64, 0xc7, 0xbe, 0x28, 0x12, 0x5d, 0x90, 0x65, 0xc4, 0xb9, 0x8a, 0x69, 0xd6, 0x0a, 0xed, 0xe7, 0x03, 0x54, 0x7c, 0x66, 0xa1, 0x2e, 0x17, 0xe1, 0xc6, 0x18, 0x99, 0x41, 0x32, 0xf5, 0xef, 0x82, 0x48, 0x2c, 0x1e, 0x3f, 0xe3, 0x14, 0x6c, 0xc6, 0x53, 0x76, 0xcc, 0x10, 0x9f, 0x01, 0x38, 0xed, 0x9a, 0x80, 0xe4, 0x9f, 0x1f, 0x3c, 0x7d, 0x61, 0x0d, 0x2f, 0x24, 0x32, 0xf2, 0x06, 0x05 }, - { 0xf7, 0x48, 0x78, 0x43, 0x98, 0xa2, 0xff, 0x03, 0xeb, 0xeb, 0x07, 0xe1, 0x55, 0xe6, 0x61, 0x16, 0xa8, 0x39, 0x74, 0x1a, 0x33, 0x6e, 0x32, 0xda, 0x71, 0xec, 0x69, 0x60, 0x01, 0xf0, 0xad, 0x1b, 0x25, 0xcd, 0x48, 0xc6, 0x9c, 0xfc, 0xa7, 0x26, 0x5e, 0xca, 0x1d, 0xd7, 0x19, 0x04, 0xa0, 0xce, 0x74, 0x8a, 0xc4, 0x12, 0x4f, 0x35, 0x71, 0x07, 0x6d, 0xfa, 0x71, 0x16, 0xa9, 0xcf, 0x00, 0xe9 }, - { 0x3f, 0x0d, 0xbc, 0x01, 0x86, 0xbc, 0xeb, 0x6b, 0x78, 0x5b, 0xa7, 0x8d, 0x2a, 0x2a, 0x01, 0x3c, 0x91, 0x0b, 0xe1, 0x57, 0xbd, 0xaf, 0xfa, 0xe8, 0x1b, 0xb6, 0x66, 0x3b, 0x1a, 0x73, 0x72, 0x2f, 0x7f, 0x12, 0x28, 0x79, 0x5f, 0x3e, 0xca, 0xda, 0x87, 0xcf, 0x6e, 0xf0, 0x07, 0x84, 0x74, 0xaf, 0x73, 0xf3, 0x1e, 0xca, 0x0c, 0xc2, 0x00, 0xed, 0x97, 0x5b, 0x68, 0x93, 0xf7, 0x61, 0xcb, 0x6d }, - { 0xd4, 0x76, 0x2c, 0xd4, 0x59, 0x98, 0x76, 0xca, 0x75, 0xb2, 0xb8, 0xfe, 0x24, 0x99, 0x44, 0xdb, 0xd2, 0x7a, 0xce, 0x74, 0x1f, 0xda, 0xb9, 0x36, 0x16, 0xcb, 0xc6, 0xe4, 0x25, 0x46, 0x0f, 0xeb, 0x51, 0xd4, 0xe7, 0xad, 0xcc, 0x38, 0x18, 0x0e, 0x7f, 0xc4, 0x7c, 0x89, 0x02, 0x4a, 0x7f, 0x56, 0x19, 0x1a, 0xdb, 0x87, 0x8d, 0xfd, 0xe4, 0xea, 0xd6, 0x22, 0x23, 0xf5, 0xa2, 0x61, 0x0e, 0xfe }, - { 0xcd, 0x36, 0xb3, 0xd5, 0xb4, 0xc9, 0x1b, 0x90, 0xfc, 0xbb, 0xa7, 0x95, 0x13, 0xcf, 0xee, 0x19, 0x07, 0xd8, 0x64, 0x5a, 0x16, 0x2a, 0xfd, 0x0c, 0xd4, 0xcf, 0x41, 0x92, 0xd4, 0xa5, 0xf4, 0xc8, 0x92, 0x18, 0x3a, 0x8e, 0xac, 0xdb, 0x2b, 0x6b, 0x6a, 0x9d, 0x9a, 0xa8, 0xc1, 0x1a, 0xc1, 0xb2, 0x61, 0xb3, 0x80, 0xdb, 0xee, 0x24, 0xca, 0x46, 0x8f, 0x1b, 0xfd, 0x04, 0x3c, 0x58, 0xee, 0xfe }, - { 0x98, 0x59, 0x34, 0x52, 0x28, 0x16, 0x61, 0xa5, 0x3c, 0x48, 0xa9, 0xd8, 0xcd, 0x79, 0x08, 0x26, 0xc1, 0xa1, 0xce, 0x56, 0x77, 0x38, 0x05, 0x3d, 0x0b, 0xee, 0x4a, 0x91, 0xa3, 0xd5, 0xbd, 0x92, 0xee, 0xfd, 0xba, 0xbe, 0xbe, 0x32, 0x04, 0xf2, 0x03, 0x1c, 0xa5, 0xf7, 0x81, 0xbd, 0xa9, 0x9e, 0xf5, 0xd8, 0xae, 0x56, 0xe5, 0xb0, 0x4a, 0x9e, 0x1e, 0xcd, 0x21, 0xb0, 0xeb, 0x05, 0xd3, 0xe1 }, - { 0x77, 0x1f, 0x57, 0xdd, 0x27, 0x75, 0xcc, 0xda, 0xb5, 0x59, 0x21, 0xd3, 0xe8, 0xe3, 0x0c, 0xcf, 0x48, 0x4d, 0x61, 0xfe, 0x1c, 0x1b, 0x9c, 0x2a, 0xe8, 0x19, 0xd0, 0xfb, 0x2a, 0x12, 0xfa, 0xb9, 0xbe, 0x70, 0xc4, 0xa7, 0xa1, 0x38, 0xda, 0x84, 0xe8, 0x28, 0x04, 0x35, 0xda, 0xad, 0xe5, 0xbb, 0xe6, 0x6a, 0xf0, 0x83, 0x6a, 0x15, 0x4f, 0x81, 0x7f, 0xb1, 0x7f, 0x33, 0x97, 0xe7, 0x25, 0xa3 }, - { 0xc6, 0x08, 0x97, 0xc6, 0xf8, 0x28, 0xe2, 0x1f, 0x16, 0xfb, 0xb5, 0xf1, 0x5b, 0x32, 0x3f, 0x87, 0xb6, 0xc8, 0x95, 0x5e, 0xab, 0xf1, 0xd3, 0x80, 0x61, 0xf7, 0x07, 0xf6, 0x08, 0xab, 0xdd, 0x99, 0x3f, 0xac, 0x30, 0x70, 0x63, 0x3e, 0x28, 0x6c, 0xf8, 0x33, 0x9c, 0xe2, 0x95, 0xdd, 0x35, 0x2d, 0xf4, 0xb4, 0xb4, 0x0b, 0x2f, 0x29, 0xda, 0x1d, 0xd5, 0x0b, 0x3a, 0x05, 0xd0, 0x79, 0xe6, 0xbb }, - { 0x82, 0x10, 0xcd, 0x2c, 0x2d, 0x3b, 0x13, 0x5c, 0x2c, 0xf0, 0x7f, 0xa0, 0xd1, 0x43, 0x3c, 0xd7, 0x71, 0xf3, 0x25, 0xd0, 0x75, 0xc6, 0x46, 0x9d, 0x9c, 0x7f, 0x1b, 0xa0, 0x94, 0x3c, 0xd4, 0xab, 0x09, 0x80, 0x8c, 0xab, 0xf4, 0xac, 0xb9, 0xce, 0x5b, 0xb8, 0x8b, 0x49, 0x89, 0x29, 0xb4, 0xb8, 0x47, 0xf6, 0x81, 0xad, 0x2c, 0x49, 0x0d, 0x04, 0x2d, 0xb2, 0xae, 0xc9, 0x42, 0x14, 0xb0, 0x6b }, - { 0x1d, 0x4e, 0xdf, 0xff, 0xd8, 0xfd, 0x80, 0xf7, 0xe4, 0x10, 0x78, 0x40, 0xfa, 0x3a, 0xa3, 0x1e, 0x32, 0x59, 0x84, 0x91, 0xe4, 0xaf, 0x70, 0x13, 0xc1, 0x97, 0xa6, 0x5b, 0x7f, 0x36, 0xdd, 0x3a, 0xc4, 0xb4, 0x78, 0x45, 0x61, 0x11, 0xcd, 0x43, 0x09, 0xd9, 0x24, 0x35, 0x10, 0x78, 0x2f, 0xa3, 0x1b, 0x7c, 0x4c, 0x95, 0xfa, 0x95, 0x15, 0x20, 0xd0, 0x20, 0xeb, 0x7e, 0x5c, 0x36, 0xe4, 0xef }, - { 0xaf, 0x8e, 0x6e, 0x91, 0xfa, 0xb4, 0x6c, 0xe4, 0x87, 0x3e, 0x1a, 0x50, 0xa8, 0xef, 0x44, 0x8c, 0xc2, 0x91, 0x21, 0xf7, 0xf7, 0x4d, 0xee, 0xf3, 0x4a, 0x71, 0xef, 0x89, 0xcc, 0x00, 0xd9, 0x27, 0x4b, 0xc6, 0xc2, 0x45, 0x4b, 0xbb, 0x32, 0x30, 0xd8, 0xb2, 0xec, 0x94, 0xc6, 0x2b, 0x1d, 0xec, 0x85, 0xf3, 0x59, 0x3b, 0xfa, 0x30, 0xea, 0x6f, 0x7a, 0x44, 0xd7, 0xc0, 0x94, 0x65, 0xa2, 0x53 }, - { 0x29, 0xfd, 0x38, 0x4e, 0xd4, 0x90, 0x6f, 0x2d, 0x13, 0xaa, 0x9f, 0xe7, 0xaf, 0x90, 0x59, 0x90, 0x93, 0x8b, 0xed, 0x80, 0x7f, 0x18, 0x32, 0x45, 0x4a, 0x37, 0x2a, 0xb4, 0x12, 0xee, 0xa1, 0xf5, 0x62, 0x5a, 0x1f, 0xcc, 0x9a, 0xc8, 0x34, 0x3b, 0x7c, 0x67, 0xc5, 0xab, 0xa6, 0xe0, 0xb1, 0xcc, 0x46, 0x44, 0x65, 0x49, 0x13, 0x69, 0x2c, 0x6b, 0x39, 0xeb, 0x91, 0x87, 0xce, 0xac, 0xd3, 0xec }, - { 0xa2, 0x68, 0xc7, 0x88, 0x5d, 0x98, 0x74, 0xa5, 0x1c, 0x44, 0xdf, 0xfe, 0xd8, 0xea, 0x53, 0xe9, 0x4f, 0x78, 0x45, 0x6e, 0x0b, 0x2e, 0xd9, 0x9f, 0xf5, 0xa3, 0x92, 0x47, 0x60, 0x81, 0x38, 0x26, 0xd9, 0x60, 0xa1, 0x5e, 0xdb, 0xed, 0xbb, 0x5d, 0xe5, 0x22, 0x6b, 0xa4, 0xb0, 0x74, 0xe7, 0x1b, 0x05, 0xc5, 0x5b, 0x97, 0x56, 0xbb, 0x79, 0xe5, 0x5c, 0x02, 0x75, 0x4c, 0x2c, 0x7b, 0x6c, 0x8a }, - { 0x0c, 0xf8, 0x54, 0x54, 0x88, 0xd5, 0x6a, 0x86, 0x81, 0x7c, 0xd7, 0xec, 0xb1, 0x0f, 0x71, 0x16, 0xb7, 0xea, 0x53, 0x0a, 0x45, 0xb6, 0xea, 0x49, 0x7b, 0x6c, 0x72, 0xc9, 0x97, 0xe0, 0x9e, 0x3d, 0x0d, 0xa8, 0x69, 0x8f, 0x46, 0xbb, 0x00, 0x6f, 0xc9, 0x77, 0xc2, 0xcd, 0x3d, 0x11, 0x77, 0x46, 0x3a, 0xc9, 0x05, 0x7f, 0xdd, 0x16, 0x62, 0xc8, 0x5d, 0x0c, 0x12, 0x64, 0x43, 0xc1, 0x04, 0x73 }, - { 0xb3, 0x96, 0x14, 0x26, 0x8f, 0xdd, 0x87, 0x81, 0x51, 0x5e, 0x2c, 0xfe, 0xbf, 0x89, 0xb4, 0xd5, 0x40, 0x2b, 0xab, 0x10, 0xc2, 0x26, 0xe6, 0x34, 0x4e, 0x6b, 0x9a, 0xe0, 0x00, 0xfb, 0x0d, 0x6c, 0x79, 0xcb, 0x2f, 0x3e, 0xc8, 0x0e, 0x80, 0xea, 0xeb, 0x19, 0x80, 0xd2, 0xf8, 0x69, 0x89, 0x16, 0xbd, 0x2e, 0x9f, 0x74, 0x72, 0x36, 0x65, 0x51, 0x16, 0x64, 0x9c, 0xd3, 0xca, 0x23, 0xa8, 0x37 }, - { 0x74, 0xbe, 0xf0, 0x92, 0xfc, 0x6f, 0x1e, 0x5d, 0xba, 0x36, 0x63, 0xa3, 0xfb, 0x00, 0x3b, 0x2a, 0x5b, 0xa2, 0x57, 0x49, 0x65, 0x36, 0xd9, 0x9f, 0x62, 0xb9, 0xd7, 0x3f, 0x8f, 0x9e, 0xb3, 0xce, 0x9f, 0xf3, 0xee, 0xc7, 0x09, 0xeb, 0x88, 0x36, 0x55, 0xec, 0x9e, 0xb8, 0x96, 0xb9, 0x12, 0x8f, 0x2a, 0xfc, 0x89, 0xcf, 0x7d, 0x1a, 0xb5, 0x8a, 0x72, 0xf4, 0xa3, 0xbf, 0x03, 0x4d, 0x2b, 0x4a }, - { 0x3a, 0x98, 0x8d, 0x38, 0xd7, 0x56, 0x11, 0xf3, 0xef, 0x38, 0xb8, 0x77, 0x49, 0x80, 0xb3, 0x3e, 0x57, 0x3b, 0x6c, 0x57, 0xbe, 0xe0, 0x46, 0x9b, 0xa5, 0xee, 0xd9, 0xb4, 0x4f, 0x29, 0x94, 0x5e, 0x73, 0x47, 0x96, 0x7f, 0xba, 0x2c, 0x16, 0x2e, 0x1c, 0x3b, 0xe7, 0xf3, 0x10, 0xf2, 0xf7, 0x5e, 0xe2, 0x38, 0x1e, 0x7b, 0xfd, 0x6b, 0x3f, 0x0b, 0xae, 0xa8, 0xd9, 0x5d, 0xfb, 0x1d, 0xaf, 0xb1 }, - { 0x58, 0xae, 0xdf, 0xce, 0x6f, 0x67, 0xdd, 0xc8, 0x5a, 0x28, 0xc9, 0x92, 0xf1, 0xc0, 0xbd, 0x09, 0x69, 0xf0, 0x41, 0xe6, 0x6f, 0x1e, 0xe8, 0x80, 0x20, 0xa1, 0x25, 0xcb, 0xfc, 0xfe, 0xbc, 0xd6, 0x17, 0x09, 0xc9, 0xc4, 0xeb, 0xa1, 0x92, 0xc1, 0x5e, 0x69, 0xf0, 0x20, 0xd4, 0x62, 0x48, 0x60, 0x19, 0xfa, 0x8d, 0xea, 0x0c, 0xd7, 0xa4, 0x29, 0x21, 0xa1, 0x9d, 0x2f, 0xe5, 0x46, 0xd4, 0x3d }, - { 0x93, 0x47, 0xbd, 0x29, 0x14, 0x73, 0xe6, 0xb4, 0xe3, 0x68, 0x43, 0x7b, 0x8e, 0x56, 0x1e, 0x06, 0x5f, 0x64, 0x9a, 0x6d, 0x8a, 0xda, 0x47, 0x9a, 0xd0, 0x9b, 0x19, 0x99, 0xa8, 0xf2, 0x6b, 0x91, 0xcf, 0x61, 0x20, 0xfd, 0x3b, 0xfe, 0x01, 0x4e, 0x83, 0xf2, 0x3a, 0xcf, 0xa4, 0xc0, 0xad, 0x7b, 0x37, 0x12, 0xb2, 0xc3, 0xc0, 0x73, 0x32, 0x70, 0x66, 0x31, 0x12, 0xcc, 0xd9, 0x28, 0x5c, 0xd9 }, - { 0xb3, 0x21, 0x63, 0xe7, 0xc5, 0xdb, 0xb5, 0xf5, 0x1f, 0xdc, 0x11, 0xd2, 0xea, 0xc8, 0x75, 0xef, 0xbb, 0xcb, 0x7e, 0x76, 0x99, 0x09, 0x0a, 0x7e, 0x7f, 0xf8, 0xa8, 0xd5, 0x07, 0x95, 0xaf, 0x5d, 0x74, 0xd9, 0xff, 0x98, 0x54, 0x3e, 0xf8, 0xcd, 0xf8, 0x9a, 0xc1, 0x3d, 0x04, 0x85, 0x27, 0x87, 0x56, 0xe0, 0xef, 0x00, 0xc8, 0x17, 0x74, 0x56, 0x61, 0xe1, 0xd5, 0x9f, 0xe3, 0x8e, 0x75, 0x37 }, - { 0x10, 0x85, 0xd7, 0x83, 0x07, 0xb1, 0xc4, 0xb0, 0x08, 0xc5, 0x7a, 0x2e, 0x7e, 0x5b, 0x23, 0x46, 0x58, 0xa0, 0xa8, 0x2e, 0x4f, 0xf1, 0xe4, 0xaa, 0xac, 0x72, 0xb3, 0x12, 0xfd, 0xa0, 0xfe, 0x27, 0xd2, 0x33, 0xbc, 0x5b, 0x10, 0xe9, 0xcc, 0x17, 0xfd, 0xc7, 0x69, 0x7b, 0x54, 0x0c, 0x7d, 0x95, 0xeb, 0x21, 0x5a, 0x19, 0xa1, 0xa0, 0xe2, 0x0e, 0x1a, 0xbf, 0xa1, 0x26, 0xef, 0xd5, 0x68, 0xc7 }, - { 0x4e, 0x5c, 0x73, 0x4c, 0x7d, 0xde, 0x01, 0x1d, 0x83, 0xea, 0xc2, 0xb7, 0x34, 0x7b, 0x37, 0x35, 0x94, 0xf9, 0x2d, 0x70, 0x91, 0xb9, 0xca, 0x34, 0xcb, 0x9c, 0x6f, 0x39, 0xbd, 0xf5, 0xa8, 0xd2, 0xf1, 0x34, 0x37, 0x9e, 0x16, 0xd8, 0x22, 0xf6, 0x52, 0x21, 0x70, 0xcc, 0xf2, 0xdd, 0xd5, 0x5c, 0x84, 0xb9, 0xe6, 0xc6, 0x4f, 0xc9, 0x27, 0xac, 0x4c, 0xf8, 0xdf, 0xb2, 0xa1, 0x77, 0x01, 0xf2 }, - { 0x69, 0x5d, 0x83, 0xbd, 0x99, 0x0a, 0x11, 0x17, 0xb3, 0xd0, 0xce, 0x06, 0xcc, 0x88, 0x80, 0x27, 0xd1, 0x2a, 0x05, 0x4c, 0x26, 0x77, 0xfd, 0x82, 0xf0, 0xd4, 0xfb, 0xfc, 0x93, 0x57, 0x55, 0x23, 0xe7, 0x99, 0x1a, 0x5e, 0x35, 0xa3, 0x75, 0x2e, 0x9b, 0x70, 0xce, 0x62, 0x99, 0x2e, 0x26, 0x8a, 0x87, 0x77, 0x44, 0xcd, 0xd4, 0x35, 0xf5, 0xf1, 0x30, 0x86, 0x9c, 0x9a, 0x20, 0x74, 0xb3, 0x38 }, - { 0xa6, 0x21, 0x37, 0x43, 0x56, 0x8e, 0x3b, 0x31, 0x58, 0xb9, 0x18, 0x43, 0x01, 0xf3, 0x69, 0x08, 0x47, 0x55, 0x4c, 0x68, 0x45, 0x7c, 0xb4, 0x0f, 0xc9, 0xa4, 0xb8, 0xcf, 0xd8, 0xd4, 0xa1, 0x18, 0xc3, 0x01, 0xa0, 0x77, 0x37, 0xae, 0xda, 0x0f, 0x92, 0x9c, 0x68, 0x91, 0x3c, 0x5f, 0x51, 0xc8, 0x03, 0x94, 0xf5, 0x3b, 0xff, 0x1c, 0x3e, 0x83, 0xb2, 0xe4, 0x0c, 0xa9, 0x7e, 0xba, 0x9e, 0x15 }, - { 0xd4, 0x44, 0xbf, 0xa2, 0x36, 0x2a, 0x96, 0xdf, 0x21, 0x3d, 0x07, 0x0e, 0x33, 0xfa, 0x84, 0x1f, 0x51, 0x33, 0x4e, 0x4e, 0x76, 0x86, 0x6b, 0x81, 0x39, 0xe8, 0xaf, 0x3b, 0xb3, 0x39, 0x8b, 0xe2, 0xdf, 0xad, 0xdc, 0xbc, 0x56, 0xb9, 0x14, 0x6d, 0xe9, 0xf6, 0x81, 0x18, 0xdc, 0x58, 0x29, 0xe7, 0x4b, 0x0c, 0x28, 0xd7, 0x71, 0x19, 0x07, 0xb1, 0x21, 0xf9, 0x16, 0x1c, 0xb9, 0x2b, 0x69, 0xa9 }, - { 0x14, 0x27, 0x09, 0xd6, 0x2e, 0x28, 0xfc, 0xcc, 0xd0, 0xaf, 0x97, 0xfa, 0xd0, 0xf8, 0x46, 0x5b, 0x97, 0x1e, 0x82, 0x20, 0x1d, 0xc5, 0x10, 0x70, 0xfa, 0xa0, 0x37, 0x2a, 0xa4, 0x3e, 0x92, 0x48, 0x4b, 0xe1, 0xc1, 0xe7, 0x3b, 0xa1, 0x09, 0x06, 0xd5, 0xd1, 0x85, 0x3d, 0xb6, 0xa4, 0x10, 0x6e, 0x0a, 0x7b, 0xf9, 0x80, 0x0d, 0x37, 0x3d, 0x6d, 0xee, 0x2d, 0x46, 0xd6, 0x2e, 0xf2, 0xa4, 0x61 }, - }; - unsigned char inp[1000], out[1000]; - unsigned char key[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f }; - unsigned long ilen, klen = sizeof(key), mlen = 64; - blake2bmac_state st; - - for (ilen = 0; ilen < 256; ilen++) inp[ilen] = (unsigned char)ilen; - - for (ilen = 0; ilen < 256; ilen++) { - const unsigned char *mac = tests[ilen]; - unsigned long olen = mlen; - /* process piece by piece */ - if (ilen > 15) { - blake2bmac_init(&st, olen, key, klen); - blake2bmac_process(&st, (unsigned char*)inp, 5); - blake2bmac_process(&st, (unsigned char*)inp + 5, 4); - blake2bmac_process(&st, (unsigned char*)inp + 9, 3); - blake2bmac_process(&st, (unsigned char*)inp + 12, 2); - blake2bmac_process(&st, (unsigned char*)inp + 14, 1); - blake2bmac_process(&st, (unsigned char*)inp + 15, ilen - 15); - blake2bmac_done(&st, out, &olen); - if (ltc_compare_testvector(out, olen, mac, mlen, "BLAKE2B MAC multi", ilen) != 0) return CRYPT_FAIL_TESTVECTOR; - } - /* process in one go */ - blake2bmac_init(&st, olen, key, klen); - blake2bmac_process(&st, (unsigned char*)inp, ilen); - blake2bmac_done(&st, out, &olen); - if (ltc_compare_testvector(out, olen, mac, mlen, "BLAKE2B MAC single", ilen) != 0) return CRYPT_FAIL_TESTVECTOR; - } - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/mac/blake2/blake2smac.c b/src/mac/blake2/blake2smac.c deleted file mode 100644 index f42c7aec..00000000 --- a/src/mac/blake2/blake2smac.c +++ /dev/null @@ -1,56 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_BLAKE2SMAC - -/** - Initialize an BLAKE2S MAC context. - @param st The BLAKE2S MAC state - @param outlen The size of the MAC output (octets) - @param key The secret key - @param keylen The length of the secret key (octets) - @return CRYPT_OK if successful -*/ -int blake2smac_init(blake2smac_state *st, unsigned long outlen, const unsigned char *key, unsigned long keylen) -{ - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(key != NULL); - return blake2s_init(st, outlen, key, keylen); -} - -/** - Process data through BLAKE2S MAC - @param st The BLAKE2S MAC state - @param in The data to send through HMAC - @param inlen The length of the data to HMAC (octets) - @return CRYPT_OK if successful -*/ -int blake2smac_process(blake2smac_state *st, const unsigned char *in, unsigned long inlen) -{ - if (inlen == 0) return CRYPT_OK; /* nothing to do */ - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(in != NULL); - return blake2s_process(st, in, inlen); -} - -/** - Terminate a BLAKE2S MAC session - @param st The BLAKE2S MAC state - @param mac [out] The destination of the BLAKE2S MAC authentication tag - @param maclen [in/out] The max size and resulting size of the BLAKE2S MAC authentication tag - @return CRYPT_OK if successful -*/ -int blake2smac_done(blake2smac_state *st, unsigned char *mac, unsigned long *maclen) -{ - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(mac != NULL); - LTC_ARGCHK(maclen != NULL); - LTC_ARGCHK(*maclen >= st->blake2s.outlen); - - *maclen = st->blake2s.outlen; - return blake2s_done(st, mac); -} - -#endif diff --git a/src/mac/blake2/blake2smac_file.c b/src/mac/blake2/blake2smac_file.c deleted file mode 100644 index bcfbe062..00000000 --- a/src/mac/blake2/blake2smac_file.c +++ /dev/null @@ -1,78 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_BLAKE2SMAC - -/** - BLAKE2S MAC a file - @param fname The name of the file you wish to BLAKE2S MAC - @param key The secret key - @param keylen The length of the secret key - @param mac [out] The BLAKE2S MAC authentication tag - @param maclen [in/out] The max size and resulting size of the authentication tag - @return CRYPT_OK if successful, CRYPT_NOP if file support has been disabled -*/ -int blake2smac_file(const char *fname, const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen) -{ -#ifdef LTC_NO_FILE - LTC_UNUSED_PARAM(fname); - LTC_UNUSED_PARAM(key); - LTC_UNUSED_PARAM(keylen); - LTC_UNUSED_PARAM(mac); - LTC_UNUSED_PARAM(maclen); - return CRYPT_NOP; -#else - blake2smac_state st; - FILE *in; - unsigned char *buf; - size_t x; - int err; - - LTC_ARGCHK(fname != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(mac != NULL); - LTC_ARGCHK(maclen != NULL); - - if ((buf = XMALLOC(LTC_FILE_READ_BUFSIZE)) == NULL) { - return CRYPT_MEM; - } - - if ((err = blake2smac_init(&st, *maclen, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - - in = fopen(fname, "rb"); - if (in == NULL) { - err = CRYPT_FILE_NOTFOUND; - goto LBL_ERR; - } - - do { - x = fread(buf, 1, LTC_FILE_READ_BUFSIZE, in); - if ((err = blake2smac_process(&st, buf, (unsigned long)x)) != CRYPT_OK) { - fclose(in); - goto LBL_CLEANBUF; - } - } while (x == LTC_FILE_READ_BUFSIZE); - - if (fclose(in) != 0) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; - } - - err = blake2smac_done(&st, mac, maclen); - -LBL_CLEANBUF: - zeromem(buf, LTC_FILE_READ_BUFSIZE); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&st, sizeof(blake2smac_state)); -#endif - XFREE(buf); - return err; -#endif -} - -#endif diff --git a/src/mac/blake2/blake2smac_memory.c b/src/mac/blake2/blake2smac_memory.c deleted file mode 100644 index 755267b0..00000000 --- a/src/mac/blake2/blake2smac_memory.c +++ /dev/null @@ -1,38 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_BLAKE2SMAC - -/** - BLAKE2S MAC a block of memory to produce the authentication tag - @param key The secret key - @param keylen The length of the secret key (octets) - @param in The data to BLAKE2S MAC - @param inlen The length of the data to BLAKE2S MAC (octets) - @param mac [out] Destination of the authentication tag - @param maclen [in/out] Max size and resulting size of authentication tag - @return CRYPT_OK if successful -*/ -int blake2smac_memory(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *mac, unsigned long *maclen) -{ - blake2smac_state st; - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(mac != NULL); - LTC_ARGCHK(maclen != NULL); - - if ((err = blake2smac_init(&st, *maclen, key, keylen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = blake2smac_process(&st, in, inlen)) != CRYPT_OK) { goto LBL_ERR; } - err = blake2smac_done(&st, mac, maclen); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&st, sizeof(blake2smac_state)); -#endif - return err; -} - -#endif diff --git a/src/mac/blake2/blake2smac_memory_multi.c b/src/mac/blake2/blake2smac_memory_multi.c deleted file mode 100644 index a3d62c3a..00000000 --- a/src/mac/blake2/blake2smac_memory_multi.c +++ /dev/null @@ -1,51 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_BLAKE2SMAC - -/** - BLAKE2S MAC multiple blocks of memory to produce the authentication tag - @param key The secret key - @param keylen The length of the secret key (octets) - @param mac [out] Destination of the authentication tag - @param maclen [in/out] Max size and resulting size of authentication tag - @param in The data to BLAKE2S MAC - @param inlen The length of the data to BLAKE2S MAC (octets) - @param ... tuples of (data,len) pairs to BLAKE2S MAC, terminated with a (NULL,x) (x=don't care) - @return CRYPT_OK if successful -*/ -int blake2smac_memory_multi(const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen, const unsigned char *in, unsigned long inlen, ...) -{ - blake2smac_state st; - int err; - va_list args; - const unsigned char *curptr; - unsigned long curlen; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(mac != NULL); - LTC_ARGCHK(maclen != NULL); - - va_start(args, inlen); - curptr = in; - curlen = inlen; - if ((err = blake2smac_init(&st, *maclen, key, keylen)) != CRYPT_OK) { goto LBL_ERR; } - for (;;) { - if ((err = blake2smac_process(&st, curptr, curlen)) != CRYPT_OK) { goto LBL_ERR; } - curptr = va_arg(args, const unsigned char*); - if (curptr == NULL) break; - curlen = va_arg(args, unsigned long); - } - err = blake2smac_done(&st, mac, maclen); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&st, sizeof(blake2smac_state)); -#endif - va_end(args); - return err; -} - -#endif diff --git a/src/mac/blake2/blake2smac_test.c b/src/mac/blake2/blake2smac_test.c deleted file mode 100644 index 2cf73985..00000000 --- a/src/mac/blake2/blake2smac_test.c +++ /dev/null @@ -1,304 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_BLAKE2SMAC - -int blake2smac_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const unsigned char tests[256][32] = { - /* source: https://github.com/BLAKE2/BLAKE2/blob/master/testvectors/blake2s-kat.txt */ - { 0x48, 0xa8, 0x99, 0x7d, 0xa4, 0x07, 0x87, 0x6b, 0x3d, 0x79, 0xc0, 0xd9, 0x23, 0x25, 0xad, 0x3b, 0x89, 0xcb, 0xb7, 0x54, 0xd8, 0x6a, 0xb7, 0x1a, 0xee, 0x04, 0x7a, 0xd3, 0x45, 0xfd, 0x2c, 0x49 }, - { 0x40, 0xd1, 0x5f, 0xee, 0x7c, 0x32, 0x88, 0x30, 0x16, 0x6a, 0xc3, 0xf9, 0x18, 0x65, 0x0f, 0x80, 0x7e, 0x7e, 0x01, 0xe1, 0x77, 0x25, 0x8c, 0xdc, 0x0a, 0x39, 0xb1, 0x1f, 0x59, 0x80, 0x66, 0xf1 }, - { 0x6b, 0xb7, 0x13, 0x00, 0x64, 0x4c, 0xd3, 0x99, 0x1b, 0x26, 0xcc, 0xd4, 0xd2, 0x74, 0xac, 0xd1, 0xad, 0xea, 0xb8, 0xb1, 0xd7, 0x91, 0x45, 0x46, 0xc1, 0x19, 0x8b, 0xbe, 0x9f, 0xc9, 0xd8, 0x03 }, - { 0x1d, 0x22, 0x0d, 0xbe, 0x2e, 0xe1, 0x34, 0x66, 0x1f, 0xdf, 0x6d, 0x9e, 0x74, 0xb4, 0x17, 0x04, 0x71, 0x05, 0x56, 0xf2, 0xf6, 0xe5, 0xa0, 0x91, 0xb2, 0x27, 0x69, 0x74, 0x45, 0xdb, 0xea, 0x6b }, - { 0xf6, 0xc3, 0xfb, 0xad, 0xb4, 0xcc, 0x68, 0x7a, 0x00, 0x64, 0xa5, 0xbe, 0x6e, 0x79, 0x1b, 0xec, 0x63, 0xb8, 0x68, 0xad, 0x62, 0xfb, 0xa6, 0x1b, 0x37, 0x57, 0xef, 0x9c, 0xa5, 0x2e, 0x05, 0xb2 }, - { 0x49, 0xc1, 0xf2, 0x11, 0x88, 0xdf, 0xd7, 0x69, 0xae, 0xa0, 0xe9, 0x11, 0xdd, 0x6b, 0x41, 0xf1, 0x4d, 0xab, 0x10, 0x9d, 0x2b, 0x85, 0x97, 0x7a, 0xa3, 0x08, 0x8b, 0x5c, 0x70, 0x7e, 0x85, 0x98 }, - { 0xfd, 0xd8, 0x99, 0x3d, 0xcd, 0x43, 0xf6, 0x96, 0xd4, 0x4f, 0x3c, 0xea, 0x0f, 0xf3, 0x53, 0x45, 0x23, 0x4e, 0xc8, 0xee, 0x08, 0x3e, 0xb3, 0xca, 0xda, 0x01, 0x7c, 0x7f, 0x78, 0xc1, 0x71, 0x43 }, - { 0xe6, 0xc8, 0x12, 0x56, 0x37, 0x43, 0x8d, 0x09, 0x05, 0xb7, 0x49, 0xf4, 0x65, 0x60, 0xac, 0x89, 0xfd, 0x47, 0x1c, 0xf8, 0x69, 0x2e, 0x28, 0xfa, 0xb9, 0x82, 0xf7, 0x3f, 0x01, 0x9b, 0x83, 0xa9 }, - { 0x19, 0xfc, 0x8c, 0xa6, 0x97, 0x9d, 0x60, 0xe6, 0xed, 0xd3, 0xb4, 0x54, 0x1e, 0x2f, 0x96, 0x7c, 0xed, 0x74, 0x0d, 0xf6, 0xec, 0x1e, 0xae, 0xbb, 0xfe, 0x81, 0x38, 0x32, 0xe9, 0x6b, 0x29, 0x74 }, - { 0xa6, 0xad, 0x77, 0x7c, 0xe8, 0x81, 0xb5, 0x2b, 0xb5, 0xa4, 0x42, 0x1a, 0xb6, 0xcd, 0xd2, 0xdf, 0xba, 0x13, 0xe9, 0x63, 0x65, 0x2d, 0x4d, 0x6d, 0x12, 0x2a, 0xee, 0x46, 0x54, 0x8c, 0x14, 0xa7 }, - { 0xf5, 0xc4, 0xb2, 0xba, 0x1a, 0x00, 0x78, 0x1b, 0x13, 0xab, 0xa0, 0x42, 0x52, 0x42, 0xc6, 0x9c, 0xb1, 0x55, 0x2f, 0x3f, 0x71, 0xa9, 0xa3, 0xbb, 0x22, 0xb4, 0xa6, 0xb4, 0x27, 0x7b, 0x46, 0xdd }, - { 0xe3, 0x3c, 0x4c, 0x9b, 0xd0, 0xcc, 0x7e, 0x45, 0xc8, 0x0e, 0x65, 0xc7, 0x7f, 0xa5, 0x99, 0x7f, 0xec, 0x70, 0x02, 0x73, 0x85, 0x41, 0x50, 0x9e, 0x68, 0xa9, 0x42, 0x38, 0x91, 0xe8, 0x22, 0xa3 }, - { 0xfb, 0xa1, 0x61, 0x69, 0xb2, 0xc3, 0xee, 0x10, 0x5b, 0xe6, 0xe1, 0xe6, 0x50, 0xe5, 0xcb, 0xf4, 0x07, 0x46, 0xb6, 0x75, 0x3d, 0x03, 0x6a, 0xb5, 0x51, 0x79, 0x01, 0x4a, 0xd7, 0xef, 0x66, 0x51 }, - { 0xf5, 0xc4, 0xbe, 0xc6, 0xd6, 0x2f, 0xc6, 0x08, 0xbf, 0x41, 0xcc, 0x11, 0x5f, 0x16, 0xd6, 0x1c, 0x7e, 0xfd, 0x3f, 0xf6, 0xc6, 0x56, 0x92, 0xbb, 0xe0, 0xaf, 0xff, 0xb1, 0xfe, 0xde, 0x74, 0x75 }, - { 0xa4, 0x86, 0x2e, 0x76, 0xdb, 0x84, 0x7f, 0x05, 0xba, 0x17, 0xed, 0xe5, 0xda, 0x4e, 0x7f, 0x91, 0xb5, 0x92, 0x5c, 0xf1, 0xad, 0x4b, 0xa1, 0x27, 0x32, 0xc3, 0x99, 0x57, 0x42, 0xa5, 0xcd, 0x6e }, - { 0x65, 0xf4, 0xb8, 0x60, 0xcd, 0x15, 0xb3, 0x8e, 0xf8, 0x14, 0xa1, 0xa8, 0x04, 0x31, 0x4a, 0x55, 0xbe, 0x95, 0x3c, 0xaa, 0x65, 0xfd, 0x75, 0x8a, 0xd9, 0x89, 0xff, 0x34, 0xa4, 0x1c, 0x1e, 0xea }, - { 0x19, 0xba, 0x23, 0x4f, 0x0a, 0x4f, 0x38, 0x63, 0x7d, 0x18, 0x39, 0xf9, 0xd9, 0xf7, 0x6a, 0xd9, 0x1c, 0x85, 0x22, 0x30, 0x71, 0x43, 0xc9, 0x7d, 0x5f, 0x93, 0xf6, 0x92, 0x74, 0xce, 0xc9, 0xa7 }, - { 0x1a, 0x67, 0x18, 0x6c, 0xa4, 0xa5, 0xcb, 0x8e, 0x65, 0xfc, 0xa0, 0xe2, 0xec, 0xbc, 0x5d, 0xdc, 0x14, 0xae, 0x38, 0x1b, 0xb8, 0xbf, 0xfe, 0xb9, 0xe0, 0xa1, 0x03, 0x44, 0x9e, 0x3e, 0xf0, 0x3c }, - { 0xaf, 0xbe, 0xa3, 0x17, 0xb5, 0xa2, 0xe8, 0x9c, 0x0b, 0xd9, 0x0c, 0xcf, 0x5d, 0x7f, 0xd0, 0xed, 0x57, 0xfe, 0x58, 0x5e, 0x4b, 0xe3, 0x27, 0x1b, 0x0a, 0x6b, 0xf0, 0xf5, 0x78, 0x6b, 0x0f, 0x26 }, - { 0xf1, 0xb0, 0x15, 0x58, 0xce, 0x54, 0x12, 0x62, 0xf5, 0xec, 0x34, 0x29, 0x9d, 0x6f, 0xb4, 0x09, 0x00, 0x09, 0xe3, 0x43, 0x4b, 0xe2, 0xf4, 0x91, 0x05, 0xcf, 0x46, 0xaf, 0x4d, 0x2d, 0x41, 0x24 }, - { 0x13, 0xa0, 0xa0, 0xc8, 0x63, 0x35, 0x63, 0x5e, 0xaa, 0x74, 0xca, 0x2d, 0x5d, 0x48, 0x8c, 0x79, 0x7b, 0xbb, 0x4f, 0x47, 0xdc, 0x07, 0x10, 0x50, 0x15, 0xed, 0x6a, 0x1f, 0x33, 0x09, 0xef, 0xce }, - { 0x15, 0x80, 0xaf, 0xee, 0xbe, 0xbb, 0x34, 0x6f, 0x94, 0xd5, 0x9f, 0xe6, 0x2d, 0xa0, 0xb7, 0x92, 0x37, 0xea, 0xd7, 0xb1, 0x49, 0x1f, 0x56, 0x67, 0xa9, 0x0e, 0x45, 0xed, 0xf6, 0xca, 0x8b, 0x03 }, - { 0x20, 0xbe, 0x1a, 0x87, 0x5b, 0x38, 0xc5, 0x73, 0xdd, 0x7f, 0xaa, 0xa0, 0xde, 0x48, 0x9d, 0x65, 0x5c, 0x11, 0xef, 0xb6, 0xa5, 0x52, 0x69, 0x8e, 0x07, 0xa2, 0xd3, 0x31, 0xb5, 0xf6, 0x55, 0xc3 }, - { 0xbe, 0x1f, 0xe3, 0xc4, 0xc0, 0x40, 0x18, 0xc5, 0x4c, 0x4a, 0x0f, 0x6b, 0x9a, 0x2e, 0xd3, 0xc5, 0x3a, 0xbe, 0x3a, 0x9f, 0x76, 0xb4, 0xd2, 0x6d, 0xe5, 0x6f, 0xc9, 0xae, 0x95, 0x05, 0x9a, 0x99 }, - { 0xe3, 0xe3, 0xac, 0xe5, 0x37, 0xeb, 0x3e, 0xdd, 0x84, 0x63, 0xd9, 0xad, 0x35, 0x82, 0xe1, 0x3c, 0xf8, 0x65, 0x33, 0xff, 0xde, 0x43, 0xd6, 0x68, 0xdd, 0x2e, 0x93, 0xbb, 0xdb, 0xd7, 0x19, 0x5a }, - { 0x11, 0x0c, 0x50, 0xc0, 0xbf, 0x2c, 0x6e, 0x7a, 0xeb, 0x7e, 0x43, 0x5d, 0x92, 0xd1, 0x32, 0xab, 0x66, 0x55, 0x16, 0x8e, 0x78, 0xa2, 0xde, 0xcd, 0xec, 0x33, 0x30, 0x77, 0x76, 0x84, 0xd9, 0xc1 }, - { 0xe9, 0xba, 0x8f, 0x50, 0x5c, 0x9c, 0x80, 0xc0, 0x86, 0x66, 0xa7, 0x01, 0xf3, 0x36, 0x7e, 0x6c, 0xc6, 0x65, 0xf3, 0x4b, 0x22, 0xe7, 0x3c, 0x3c, 0x04, 0x17, 0xeb, 0x1c, 0x22, 0x06, 0x08, 0x2f }, - { 0x26, 0xcd, 0x66, 0xfc, 0xa0, 0x23, 0x79, 0xc7, 0x6d, 0xf1, 0x23, 0x17, 0x05, 0x2b, 0xca, 0xfd, 0x6c, 0xd8, 0xc3, 0xa7, 0xb8, 0x90, 0xd8, 0x05, 0xf3, 0x6c, 0x49, 0x98, 0x97, 0x82, 0x43, 0x3a }, - { 0x21, 0x3f, 0x35, 0x96, 0xd6, 0xe3, 0xa5, 0xd0, 0xe9, 0x93, 0x2c, 0xd2, 0x15, 0x91, 0x46, 0x01, 0x5e, 0x2a, 0xbc, 0x94, 0x9f, 0x47, 0x29, 0xee, 0x26, 0x32, 0xfe, 0x1e, 0xdb, 0x78, 0xd3, 0x37 }, - { 0x10, 0x15, 0xd7, 0x01, 0x08, 0xe0, 0x3b, 0xe1, 0xc7, 0x02, 0xfe, 0x97, 0x25, 0x36, 0x07, 0xd1, 0x4a, 0xee, 0x59, 0x1f, 0x24, 0x13, 0xea, 0x67, 0x87, 0x42, 0x7b, 0x64, 0x59, 0xff, 0x21, 0x9a }, - { 0x3c, 0xa9, 0x89, 0xde, 0x10, 0xcf, 0xe6, 0x09, 0x90, 0x94, 0x72, 0xc8, 0xd3, 0x56, 0x10, 0x80, 0x5b, 0x2f, 0x97, 0x77, 0x34, 0xcf, 0x65, 0x2c, 0xc6, 0x4b, 0x3b, 0xfc, 0x88, 0x2d, 0x5d, 0x89 }, - { 0xb6, 0x15, 0x6f, 0x72, 0xd3, 0x80, 0xee, 0x9e, 0xa6, 0xac, 0xd1, 0x90, 0x46, 0x4f, 0x23, 0x07, 0xa5, 0xc1, 0x79, 0xef, 0x01, 0xfd, 0x71, 0xf9, 0x9f, 0x2d, 0x0f, 0x7a, 0x57, 0x36, 0x0a, 0xea }, - { 0xc0, 0x3b, 0xc6, 0x42, 0xb2, 0x09, 0x59, 0xcb, 0xe1, 0x33, 0xa0, 0x30, 0x3e, 0x0c, 0x1a, 0xbf, 0xf3, 0xe3, 0x1e, 0xc8, 0xe1, 0xa3, 0x28, 0xec, 0x85, 0x65, 0xc3, 0x6d, 0xec, 0xff, 0x52, 0x65 }, - { 0x2c, 0x3e, 0x08, 0x17, 0x6f, 0x76, 0x0c, 0x62, 0x64, 0xc3, 0xa2, 0xcd, 0x66, 0xfe, 0xc6, 0xc3, 0xd7, 0x8d, 0xe4, 0x3f, 0xc1, 0x92, 0x45, 0x7b, 0x2a, 0x4a, 0x66, 0x0a, 0x1e, 0x0e, 0xb2, 0x2b }, - { 0xf7, 0x38, 0xc0, 0x2f, 0x3c, 0x1b, 0x19, 0x0c, 0x51, 0x2b, 0x1a, 0x32, 0xde, 0xab, 0xf3, 0x53, 0x72, 0x8e, 0x0e, 0x9a, 0xb0, 0x34, 0x49, 0x0e, 0x3c, 0x34, 0x09, 0x94, 0x6a, 0x97, 0xae, 0xec }, - { 0x8b, 0x18, 0x80, 0xdf, 0x30, 0x1c, 0xc9, 0x63, 0x41, 0x88, 0x11, 0x08, 0x89, 0x64, 0x83, 0x92, 0x87, 0xff, 0x7f, 0xe3, 0x1c, 0x49, 0xea, 0x6e, 0xbd, 0x9e, 0x48, 0xbd, 0xee, 0xe4, 0x97, 0xc5 }, - { 0x1e, 0x75, 0xcb, 0x21, 0xc6, 0x09, 0x89, 0x02, 0x03, 0x75, 0xf1, 0xa7, 0xa2, 0x42, 0x83, 0x9f, 0x0b, 0x0b, 0x68, 0x97, 0x3a, 0x4c, 0x2a, 0x05, 0xcf, 0x75, 0x55, 0xed, 0x5a, 0xae, 0xc4, 0xc1 }, - { 0x62, 0xbf, 0x8a, 0x9c, 0x32, 0xa5, 0xbc, 0xcf, 0x29, 0x0b, 0x6c, 0x47, 0x4d, 0x75, 0xb2, 0xa2, 0xa4, 0x09, 0x3f, 0x1a, 0x9e, 0x27, 0x13, 0x94, 0x33, 0xa8, 0xf2, 0xb3, 0xbc, 0xe7, 0xb8, 0xd7 }, - { 0x16, 0x6c, 0x83, 0x50, 0xd3, 0x17, 0x3b, 0x5e, 0x70, 0x2b, 0x78, 0x3d, 0xfd, 0x33, 0xc6, 0x6e, 0xe0, 0x43, 0x27, 0x42, 0xe9, 0xb9, 0x2b, 0x99, 0x7f, 0xd2, 0x3c, 0x60, 0xdc, 0x67, 0x56, 0xca }, - { 0x04, 0x4a, 0x14, 0xd8, 0x22, 0xa9, 0x0c, 0xac, 0xf2, 0xf5, 0xa1, 0x01, 0x42, 0x8a, 0xdc, 0x8f, 0x41, 0x09, 0x38, 0x6c, 0xcb, 0x15, 0x8b, 0xf9, 0x05, 0xc8, 0x61, 0x8b, 0x8e, 0xe2, 0x4e, 0xc3 }, - { 0x38, 0x7d, 0x39, 0x7e, 0xa4, 0x3a, 0x99, 0x4b, 0xe8, 0x4d, 0x2d, 0x54, 0x4a, 0xfb, 0xe4, 0x81, 0xa2, 0x00, 0x0f, 0x55, 0x25, 0x26, 0x96, 0xbb, 0xa2, 0xc5, 0x0c, 0x8e, 0xbd, 0x10, 0x13, 0x47 }, - { 0x56, 0xf8, 0xcc, 0xf1, 0xf8, 0x64, 0x09, 0xb4, 0x6c, 0xe3, 0x61, 0x66, 0xae, 0x91, 0x65, 0x13, 0x84, 0x41, 0x57, 0x75, 0x89, 0xdb, 0x08, 0xcb, 0xc5, 0xf6, 0x6c, 0xa2, 0x97, 0x43, 0xb9, 0xfd }, - { 0x97, 0x06, 0xc0, 0x92, 0xb0, 0x4d, 0x91, 0xf5, 0x3d, 0xff, 0x91, 0xfa, 0x37, 0xb7, 0x49, 0x3d, 0x28, 0xb5, 0x76, 0xb5, 0xd7, 0x10, 0x46, 0x9d, 0xf7, 0x94, 0x01, 0x66, 0x22, 0x36, 0xfc, 0x03 }, - { 0x87, 0x79, 0x68, 0x68, 0x6c, 0x06, 0x8c, 0xe2, 0xf7, 0xe2, 0xad, 0xcf, 0xf6, 0x8b, 0xf8, 0x74, 0x8e, 0xdf, 0x3c, 0xf8, 0x62, 0xcf, 0xb4, 0xd3, 0x94, 0x7a, 0x31, 0x06, 0x95, 0x80, 0x54, 0xe3 }, - { 0x88, 0x17, 0xe5, 0x71, 0x98, 0x79, 0xac, 0xf7, 0x02, 0x47, 0x87, 0xec, 0xcd, 0xb2, 0x71, 0x03, 0x55, 0x66, 0xcf, 0xa3, 0x33, 0xe0, 0x49, 0x40, 0x7c, 0x01, 0x78, 0xcc, 0xc5, 0x7a, 0x5b, 0x9f }, - { 0x89, 0x38, 0x24, 0x9e, 0x4b, 0x50, 0xca, 0xda, 0xcc, 0xdf, 0x5b, 0x18, 0x62, 0x13, 0x26, 0xcb, 0xb1, 0x52, 0x53, 0xe3, 0x3a, 0x20, 0xf5, 0x63, 0x6e, 0x99, 0x5d, 0x72, 0x47, 0x8d, 0xe4, 0x72 }, - { 0xf1, 0x64, 0xab, 0xba, 0x49, 0x63, 0xa4, 0x4d, 0x10, 0x72, 0x57, 0xe3, 0x23, 0x2d, 0x90, 0xac, 0xa5, 0xe6, 0x6a, 0x14, 0x08, 0x24, 0x8c, 0x51, 0x74, 0x1e, 0x99, 0x1d, 0xb5, 0x22, 0x77, 0x56 }, - { 0xd0, 0x55, 0x63, 0xe2, 0xb1, 0xcb, 0xa0, 0xc4, 0xa2, 0xa1, 0xe8, 0xbd, 0xe3, 0xa1, 0xa0, 0xd9, 0xf5, 0xb4, 0x0c, 0x85, 0xa0, 0x70, 0xd6, 0xf5, 0xfb, 0x21, 0x06, 0x6e, 0xad, 0x5d, 0x06, 0x01 }, - { 0x03, 0xfb, 0xb1, 0x63, 0x84, 0xf0, 0xa3, 0x86, 0x6f, 0x4c, 0x31, 0x17, 0x87, 0x76, 0x66, 0xef, 0xbf, 0x12, 0x45, 0x97, 0x56, 0x4b, 0x29, 0x3d, 0x4a, 0xab, 0x0d, 0x26, 0x9f, 0xab, 0xdd, 0xfa }, - { 0x5f, 0xa8, 0x48, 0x6a, 0xc0, 0xe5, 0x29, 0x64, 0xd1, 0x88, 0x1b, 0xbe, 0x33, 0x8e, 0xb5, 0x4b, 0xe2, 0xf7, 0x19, 0x54, 0x92, 0x24, 0x89, 0x20, 0x57, 0xb4, 0xda, 0x04, 0xba, 0x8b, 0x34, 0x75 }, - { 0xcd, 0xfa, 0xbc, 0xee, 0x46, 0x91, 0x11, 0x11, 0x23, 0x6a, 0x31, 0x70, 0x8b, 0x25, 0x39, 0xd7, 0x1f, 0xc2, 0x11, 0xd9, 0xb0, 0x9c, 0x0d, 0x85, 0x30, 0xa1, 0x1e, 0x1d, 0xbf, 0x6e, 0xed, 0x01 }, - { 0x4f, 0x82, 0xde, 0x03, 0xb9, 0x50, 0x47, 0x93, 0xb8, 0x2a, 0x07, 0xa0, 0xbd, 0xcd, 0xff, 0x31, 0x4d, 0x75, 0x9e, 0x7b, 0x62, 0xd2, 0x6b, 0x78, 0x49, 0x46, 0xb0, 0xd3, 0x6f, 0x91, 0x6f, 0x52 }, - { 0x25, 0x9e, 0xc7, 0xf1, 0x73, 0xbc, 0xc7, 0x6a, 0x09, 0x94, 0xc9, 0x67, 0xb4, 0xf5, 0xf0, 0x24, 0xc5, 0x60, 0x57, 0xfb, 0x79, 0xc9, 0x65, 0xc4, 0xfa, 0xe4, 0x18, 0x75, 0xf0, 0x6a, 0x0e, 0x4c }, - { 0x19, 0x3c, 0xc8, 0xe7, 0xc3, 0xe0, 0x8b, 0xb3, 0x0f, 0x54, 0x37, 0xaa, 0x27, 0xad, 0xe1, 0xf1, 0x42, 0x36, 0x9b, 0x24, 0x6a, 0x67, 0x5b, 0x23, 0x83, 0xe6, 0xda, 0x9b, 0x49, 0xa9, 0x80, 0x9e }, - { 0x5c, 0x10, 0x89, 0x6f, 0x0e, 0x28, 0x56, 0xb2, 0xa2, 0xee, 0xe0, 0xfe, 0x4a, 0x2c, 0x16, 0x33, 0x56, 0x5d, 0x18, 0xf0, 0xe9, 0x3e, 0x1f, 0xab, 0x26, 0xc3, 0x73, 0xe8, 0xf8, 0x29, 0x65, 0x4d }, - { 0xf1, 0x60, 0x12, 0xd9, 0x3f, 0x28, 0x85, 0x1a, 0x1e, 0xb9, 0x89, 0xf5, 0xd0, 0xb4, 0x3f, 0x3f, 0x39, 0xca, 0x73, 0xc9, 0xa6, 0x2d, 0x51, 0x81, 0xbf, 0xf2, 0x37, 0x53, 0x6b, 0xd3, 0x48, 0xc3 }, - { 0x29, 0x66, 0xb3, 0xcf, 0xae, 0x1e, 0x44, 0xea, 0x99, 0x6d, 0xc5, 0xd6, 0x86, 0xcf, 0x25, 0xfa, 0x05, 0x3f, 0xb6, 0xf6, 0x72, 0x01, 0xb9, 0xe4, 0x6e, 0xad, 0xe8, 0x5d, 0x0a, 0xd6, 0xb8, 0x06 }, - { 0xdd, 0xb8, 0x78, 0x24, 0x85, 0xe9, 0x00, 0xbc, 0x60, 0xbc, 0xf4, 0xc3, 0x3a, 0x6f, 0xd5, 0x85, 0x68, 0x0c, 0xc6, 0x83, 0xd5, 0x16, 0xef, 0xa0, 0x3e, 0xb9, 0x98, 0x5f, 0xad, 0x87, 0x15, 0xfb }, - { 0x4c, 0x4d, 0x6e, 0x71, 0xae, 0xa0, 0x57, 0x86, 0x41, 0x31, 0x48, 0xfc, 0x7a, 0x78, 0x6b, 0x0e, 0xca, 0xf5, 0x82, 0xcf, 0xf1, 0x20, 0x9f, 0x5a, 0x80, 0x9f, 0xba, 0x85, 0x04, 0xce, 0x66, 0x2c }, - { 0xfb, 0x4c, 0x5e, 0x86, 0xd7, 0xb2, 0x22, 0x9b, 0x99, 0xb8, 0xba, 0x6d, 0x94, 0xc2, 0x47, 0xef, 0x96, 0x4a, 0xa3, 0xa2, 0xba, 0xe8, 0xed, 0xc7, 0x75, 0x69, 0xf2, 0x8d, 0xbb, 0xff, 0x2d, 0x4e }, - { 0xe9, 0x4f, 0x52, 0x6d, 0xe9, 0x01, 0x96, 0x33, 0xec, 0xd5, 0x4a, 0xc6, 0x12, 0x0f, 0x23, 0x95, 0x8d, 0x77, 0x18, 0xf1, 0xe7, 0x71, 0x7b, 0xf3, 0x29, 0x21, 0x1a, 0x4f, 0xae, 0xed, 0x4e, 0x6d }, - { 0xcb, 0xd6, 0x66, 0x0a, 0x10, 0xdb, 0x3f, 0x23, 0xf7, 0xa0, 0x3d, 0x4b, 0x9d, 0x40, 0x44, 0xc7, 0x93, 0x2b, 0x28, 0x01, 0xac, 0x89, 0xd6, 0x0b, 0xc9, 0xeb, 0x92, 0xd6, 0x5a, 0x46, 0xc2, 0xa0 }, - { 0x88, 0x18, 0xbb, 0xd3, 0xdb, 0x4d, 0xc1, 0x23, 0xb2, 0x5c, 0xbb, 0xa5, 0xf5, 0x4c, 0x2b, 0xc4, 0xb3, 0xfc, 0xf9, 0xbf, 0x7d, 0x7a, 0x77, 0x09, 0xf4, 0xae, 0x58, 0x8b, 0x26, 0x7c, 0x4e, 0xce }, - { 0xc6, 0x53, 0x82, 0x51, 0x3f, 0x07, 0x46, 0x0d, 0xa3, 0x98, 0x33, 0xcb, 0x66, 0x6c, 0x5e, 0xd8, 0x2e, 0x61, 0xb9, 0xe9, 0x98, 0xf4, 0xb0, 0xc4, 0x28, 0x7c, 0xee, 0x56, 0xc3, 0xcc, 0x9b, 0xcd }, - { 0x89, 0x75, 0xb0, 0x57, 0x7f, 0xd3, 0x55, 0x66, 0xd7, 0x50, 0xb3, 0x62, 0xb0, 0x89, 0x7a, 0x26, 0xc3, 0x99, 0x13, 0x6d, 0xf0, 0x7b, 0xab, 0xab, 0xbd, 0xe6, 0x20, 0x3f, 0xf2, 0x95, 0x4e, 0xd4 }, - { 0x21, 0xfe, 0x0c, 0xeb, 0x00, 0x52, 0xbe, 0x7f, 0xb0, 0xf0, 0x04, 0x18, 0x7c, 0xac, 0xd7, 0xde, 0x67, 0xfa, 0x6e, 0xb0, 0x93, 0x8d, 0x92, 0x76, 0x77, 0xf2, 0x39, 0x8c, 0x13, 0x23, 0x17, 0xa8 }, - { 0x2e, 0xf7, 0x3f, 0x3c, 0x26, 0xf1, 0x2d, 0x93, 0x88, 0x9f, 0x3c, 0x78, 0xb6, 0xa6, 0x6c, 0x1d, 0x52, 0xb6, 0x49, 0xdc, 0x9e, 0x85, 0x6e, 0x2c, 0x17, 0x2e, 0xa7, 0xc5, 0x8a, 0xc2, 0xb5, 0xe3 }, - { 0x38, 0x8a, 0x3c, 0xd5, 0x6d, 0x73, 0x86, 0x7a, 0xbb, 0x5f, 0x84, 0x01, 0x49, 0x2b, 0x6e, 0x26, 0x81, 0xeb, 0x69, 0x85, 0x1e, 0x76, 0x7f, 0xd8, 0x42, 0x10, 0xa5, 0x60, 0x76, 0xfb, 0x3d, 0xd3 }, - { 0xaf, 0x53, 0x3e, 0x02, 0x2f, 0xc9, 0x43, 0x9e, 0x4e, 0x3c, 0xb8, 0x38, 0xec, 0xd1, 0x86, 0x92, 0x23, 0x2a, 0xdf, 0x6f, 0xe9, 0x83, 0x95, 0x26, 0xd3, 0xc3, 0xdd, 0x1b, 0x71, 0x91, 0x0b, 0x1a }, - { 0x75, 0x1c, 0x09, 0xd4, 0x1a, 0x93, 0x43, 0x88, 0x2a, 0x81, 0xcd, 0x13, 0xee, 0x40, 0x81, 0x8d, 0x12, 0xeb, 0x44, 0xc6, 0xc7, 0xf4, 0x0d, 0xf1, 0x6e, 0x4a, 0xea, 0x8f, 0xab, 0x91, 0x97, 0x2a }, - { 0x5b, 0x73, 0xdd, 0xb6, 0x8d, 0x9d, 0x2b, 0x0a, 0xa2, 0x65, 0xa0, 0x79, 0x88, 0xd6, 0xb8, 0x8a, 0xe9, 0xaa, 0xc5, 0x82, 0xaf, 0x83, 0x03, 0x2f, 0x8a, 0x9b, 0x21, 0xa2, 0xe1, 0xb7, 0xbf, 0x18 }, - { 0x3d, 0xa2, 0x91, 0x26, 0xc7, 0xc5, 0xd7, 0xf4, 0x3e, 0x64, 0x24, 0x2a, 0x79, 0xfe, 0xaa, 0x4e, 0xf3, 0x45, 0x9c, 0xde, 0xcc, 0xc8, 0x98, 0xed, 0x59, 0xa9, 0x7f, 0x6e, 0xc9, 0x3b, 0x9d, 0xab }, - { 0x56, 0x6d, 0xc9, 0x20, 0x29, 0x3d, 0xa5, 0xcb, 0x4f, 0xe0, 0xaa, 0x8a, 0xbd, 0xa8, 0xbb, 0xf5, 0x6f, 0x55, 0x23, 0x13, 0xbf, 0xf1, 0x90, 0x46, 0x64, 0x1e, 0x36, 0x15, 0xc1, 0xe3, 0xed, 0x3f }, - { 0x41, 0x15, 0xbe, 0xa0, 0x2f, 0x73, 0xf9, 0x7f, 0x62, 0x9e, 0x5c, 0x55, 0x90, 0x72, 0x0c, 0x01, 0xe7, 0xe4, 0x49, 0xae, 0x2a, 0x66, 0x97, 0xd4, 0xd2, 0x78, 0x33, 0x21, 0x30, 0x36, 0x92, 0xf9 }, - { 0x4c, 0xe0, 0x8f, 0x47, 0x62, 0x46, 0x8a, 0x76, 0x70, 0x01, 0x21, 0x64, 0x87, 0x8d, 0x68, 0x34, 0x0c, 0x52, 0xa3, 0x5e, 0x66, 0xc1, 0x88, 0x4d, 0x5c, 0x86, 0x48, 0x89, 0xab, 0xc9, 0x66, 0x77 }, - { 0x81, 0xea, 0x0b, 0x78, 0x04, 0x12, 0x4e, 0x0c, 0x22, 0xea, 0x5f, 0xc7, 0x11, 0x04, 0xa2, 0xaf, 0xcb, 0x52, 0xa1, 0xfa, 0x81, 0x6f, 0x3e, 0xcb, 0x7d, 0xcb, 0x5d, 0x9d, 0xea, 0x17, 0x86, 0xd0 }, - { 0xfe, 0x36, 0x27, 0x33, 0xb0, 0x5f, 0x6b, 0xed, 0xaf, 0x93, 0x79, 0xd7, 0xf7, 0x93, 0x6e, 0xde, 0x20, 0x9b, 0x1f, 0x83, 0x23, 0xc3, 0x92, 0x25, 0x49, 0xd9, 0xe7, 0x36, 0x81, 0xb5, 0xdb, 0x7b }, - { 0xef, 0xf3, 0x7d, 0x30, 0xdf, 0xd2, 0x03, 0x59, 0xbe, 0x4e, 0x73, 0xfd, 0xf4, 0x0d, 0x27, 0x73, 0x4b, 0x3d, 0xf9, 0x0a, 0x97, 0xa5, 0x5e, 0xd7, 0x45, 0x29, 0x72, 0x94, 0xca, 0x85, 0xd0, 0x9f }, - { 0x17, 0x2f, 0xfc, 0x67, 0x15, 0x3d, 0x12, 0xe0, 0xca, 0x76, 0xa8, 0xb6, 0xcd, 0x5d, 0x47, 0x31, 0x88, 0x5b, 0x39, 0xce, 0x0c, 0xac, 0x93, 0xa8, 0x97, 0x2a, 0x18, 0x00, 0x6c, 0x8b, 0x8b, 0xaf }, - { 0xc4, 0x79, 0x57, 0xf1, 0xcc, 0x88, 0xe8, 0x3e, 0xf9, 0x44, 0x58, 0x39, 0x70, 0x9a, 0x48, 0x0a, 0x03, 0x6b, 0xed, 0x5f, 0x88, 0xac, 0x0f, 0xcc, 0x8e, 0x1e, 0x70, 0x3f, 0xfa, 0xac, 0x13, 0x2c }, - { 0x30, 0xf3, 0x54, 0x83, 0x70, 0xcf, 0xdc, 0xed, 0xa5, 0xc3, 0x7b, 0x56, 0x9b, 0x61, 0x75, 0xe7, 0x99, 0xee, 0xf1, 0xa6, 0x2a, 0xaa, 0x94, 0x32, 0x45, 0xae, 0x76, 0x69, 0xc2, 0x27, 0xa7, 0xb5 }, - { 0xc9, 0x5d, 0xcb, 0x3c, 0xf1, 0xf2, 0x7d, 0x0e, 0xef, 0x2f, 0x25, 0xd2, 0x41, 0x38, 0x70, 0x90, 0x4a, 0x87, 0x7c, 0x4a, 0x56, 0xc2, 0xde, 0x1e, 0x83, 0xe2, 0xbc, 0x2a, 0xe2, 0xe4, 0x68, 0x21 }, - { 0xd5, 0xd0, 0xb5, 0xd7, 0x05, 0x43, 0x4c, 0xd4, 0x6b, 0x18, 0x57, 0x49, 0xf6, 0x6b, 0xfb, 0x58, 0x36, 0xdc, 0xdf, 0x6e, 0xe5, 0x49, 0xa2, 0xb7, 0xa4, 0xae, 0xe7, 0xf5, 0x80, 0x07, 0xca, 0xaf }, - { 0xbb, 0xc1, 0x24, 0xa7, 0x12, 0xf1, 0x5d, 0x07, 0xc3, 0x00, 0xe0, 0x5b, 0x66, 0x83, 0x89, 0xa4, 0x39, 0xc9, 0x17, 0x77, 0xf7, 0x21, 0xf8, 0x32, 0x0c, 0x1c, 0x90, 0x78, 0x06, 0x6d, 0x2c, 0x7e }, - { 0xa4, 0x51, 0xb4, 0x8c, 0x35, 0xa6, 0xc7, 0x85, 0x4c, 0xfa, 0xae, 0x60, 0x26, 0x2e, 0x76, 0x99, 0x08, 0x16, 0x38, 0x2a, 0xc0, 0x66, 0x7e, 0x5a, 0x5c, 0x9e, 0x1b, 0x46, 0xc4, 0x34, 0x2d, 0xdf }, - { 0xb0, 0xd1, 0x50, 0xfb, 0x55, 0xe7, 0x78, 0xd0, 0x11, 0x47, 0xf0, 0xb5, 0xd8, 0x9d, 0x99, 0xec, 0xb2, 0x0f, 0xf0, 0x7e, 0x5e, 0x67, 0x60, 0xd6, 0xb6, 0x45, 0xeb, 0x5b, 0x65, 0x4c, 0x62, 0x2b }, - { 0x34, 0xf7, 0x37, 0xc0, 0xab, 0x21, 0x99, 0x51, 0xee, 0xe8, 0x9a, 0x9f, 0x8d, 0xac, 0x29, 0x9c, 0x9d, 0x4c, 0x38, 0xf3, 0x3f, 0xa4, 0x94, 0xc5, 0xc6, 0xee, 0xfc, 0x92, 0xb6, 0xdb, 0x08, 0xbc }, - { 0x1a, 0x62, 0xcc, 0x3a, 0x00, 0x80, 0x0d, 0xcb, 0xd9, 0x98, 0x91, 0x08, 0x0c, 0x1e, 0x09, 0x84, 0x58, 0x19, 0x3a, 0x8c, 0xc9, 0xf9, 0x70, 0xea, 0x99, 0xfb, 0xef, 0xf0, 0x03, 0x18, 0xc2, 0x89 }, - { 0xcf, 0xce, 0x55, 0xeb, 0xaf, 0xc8, 0x40, 0xd7, 0xae, 0x48, 0x28, 0x1c, 0x7f, 0xd5, 0x7e, 0xc8, 0xb4, 0x82, 0xd4, 0xb7, 0x04, 0x43, 0x74, 0x95, 0x49, 0x5a, 0xc4, 0x14, 0xcf, 0x4a, 0x37, 0x4b }, - { 0x67, 0x46, 0xfa, 0xcf, 0x71, 0x14, 0x6d, 0x99, 0x9d, 0xab, 0xd0, 0x5d, 0x09, 0x3a, 0xe5, 0x86, 0x64, 0x8d, 0x1e, 0xe2, 0x8e, 0x72, 0x61, 0x7b, 0x99, 0xd0, 0xf0, 0x08, 0x6e, 0x1e, 0x45, 0xbf }, - { 0x57, 0x1c, 0xed, 0x28, 0x3b, 0x3f, 0x23, 0xb4, 0xe7, 0x50, 0xbf, 0x12, 0xa2, 0xca, 0xf1, 0x78, 0x18, 0x47, 0xbd, 0x89, 0x0e, 0x43, 0x60, 0x3c, 0xdc, 0x59, 0x76, 0x10, 0x2b, 0x7b, 0xb1, 0x1b }, - { 0xcf, 0xcb, 0x76, 0x5b, 0x04, 0x8e, 0x35, 0x02, 0x2c, 0x5d, 0x08, 0x9d, 0x26, 0xe8, 0x5a, 0x36, 0xb0, 0x05, 0xa2, 0xb8, 0x04, 0x93, 0xd0, 0x3a, 0x14, 0x4e, 0x09, 0xf4, 0x09, 0xb6, 0xaf, 0xd1 }, - { 0x40, 0x50, 0xc7, 0xa2, 0x77, 0x05, 0xbb, 0x27, 0xf4, 0x20, 0x89, 0xb2, 0x99, 0xf3, 0xcb, 0xe5, 0x05, 0x4e, 0xad, 0x68, 0x72, 0x7e, 0x8e, 0xf9, 0x31, 0x8c, 0xe6, 0xf2, 0x5c, 0xd6, 0xf3, 0x1d }, - { 0x18, 0x40, 0x70, 0xbd, 0x5d, 0x26, 0x5f, 0xbd, 0xc1, 0x42, 0xcd, 0x1c, 0x5c, 0xd0, 0xd7, 0xe4, 0x14, 0xe7, 0x03, 0x69, 0xa2, 0x66, 0xd6, 0x27, 0xc8, 0xfb, 0xa8, 0x4f, 0xa5, 0xe8, 0x4c, 0x34 }, - { 0x9e, 0xdd, 0xa9, 0xa4, 0x44, 0x39, 0x02, 0xa9, 0x58, 0x8c, 0x0d, 0x0c, 0xcc, 0x62, 0xb9, 0x30, 0x21, 0x84, 0x79, 0xa6, 0x84, 0x1e, 0x6f, 0xe7, 0xd4, 0x30, 0x03, 0xf0, 0x4b, 0x1f, 0xd6, 0x43 }, - { 0xe4, 0x12, 0xfe, 0xef, 0x79, 0x08, 0x32, 0x4a, 0x6d, 0xa1, 0x84, 0x16, 0x29, 0xf3, 0x5d, 0x3d, 0x35, 0x86, 0x42, 0x01, 0x93, 0x10, 0xec, 0x57, 0xc6, 0x14, 0x83, 0x6b, 0x63, 0xd3, 0x07, 0x63 }, - { 0x1a, 0x2b, 0x8e, 0xdf, 0xf3, 0xf9, 0xac, 0xc1, 0x55, 0x4f, 0xcb, 0xae, 0x3c, 0xf1, 0xd6, 0x29, 0x8c, 0x64, 0x62, 0xe2, 0x2e, 0x5e, 0xb0, 0x25, 0x96, 0x84, 0xf8, 0x35, 0x01, 0x2b, 0xd1, 0x3f }, - { 0x28, 0x8c, 0x4a, 0xd9, 0xb9, 0x40, 0x97, 0x62, 0xea, 0x07, 0xc2, 0x4a, 0x41, 0xf0, 0x4f, 0x69, 0xa7, 0xd7, 0x4b, 0xee, 0x2d, 0x95, 0x43, 0x53, 0x74, 0xbd, 0xe9, 0x46, 0xd7, 0x24, 0x1c, 0x7b }, - { 0x80, 0x56, 0x91, 0xbb, 0x28, 0x67, 0x48, 0xcf, 0xb5, 0x91, 0xd3, 0xae, 0xbe, 0x7e, 0x6f, 0x4e, 0x4d, 0xc6, 0xe2, 0x80, 0x8c, 0x65, 0x14, 0x3c, 0xc0, 0x04, 0xe4, 0xeb, 0x6f, 0xd0, 0x9d, 0x43 }, - { 0xd4, 0xac, 0x8d, 0x3a, 0x0a, 0xfc, 0x6c, 0xfa, 0x7b, 0x46, 0x0a, 0xe3, 0x00, 0x1b, 0xae, 0xb3, 0x6d, 0xad, 0xb3, 0x7d, 0xa0, 0x7d, 0x2e, 0x8a, 0xc9, 0x18, 0x22, 0xdf, 0x34, 0x8a, 0xed, 0x3d }, - { 0xc3, 0x76, 0x61, 0x70, 0x14, 0xd2, 0x01, 0x58, 0xbc, 0xed, 0x3d, 0x3b, 0xa5, 0x52, 0xb6, 0xec, 0xcf, 0x84, 0xe6, 0x2a, 0xa3, 0xeb, 0x65, 0x0e, 0x90, 0x02, 0x9c, 0x84, 0xd1, 0x3e, 0xea, 0x69 }, - { 0xc4, 0x1f, 0x09, 0xf4, 0x3c, 0xec, 0xae, 0x72, 0x93, 0xd6, 0x00, 0x7c, 0xa0, 0xa3, 0x57, 0x08, 0x7d, 0x5a, 0xe5, 0x9b, 0xe5, 0x00, 0xc1, 0xcd, 0x5b, 0x28, 0x9e, 0xe8, 0x10, 0xc7, 0xb0, 0x82 }, - { 0x03, 0xd1, 0xce, 0xd1, 0xfb, 0xa5, 0xc3, 0x91, 0x55, 0xc4, 0x4b, 0x77, 0x65, 0xcb, 0x76, 0x0c, 0x78, 0x70, 0x8d, 0xcf, 0xc8, 0x0b, 0x0b, 0xd8, 0xad, 0xe3, 0xa5, 0x6d, 0xa8, 0x83, 0x0b, 0x29 }, - { 0x09, 0xbd, 0xe6, 0xf1, 0x52, 0x21, 0x8d, 0xc9, 0x2c, 0x41, 0xd7, 0xf4, 0x53, 0x87, 0xe6, 0x3e, 0x58, 0x69, 0xd8, 0x07, 0xec, 0x70, 0xb8, 0x21, 0x40, 0x5d, 0xbd, 0x88, 0x4b, 0x7f, 0xcf, 0x4b }, - { 0x71, 0xc9, 0x03, 0x6e, 0x18, 0x17, 0x9b, 0x90, 0xb3, 0x7d, 0x39, 0xe9, 0xf0, 0x5e, 0xb8, 0x9c, 0xc5, 0xfc, 0x34, 0x1f, 0xd7, 0xc4, 0x77, 0xd0, 0xd7, 0x49, 0x32, 0x85, 0xfa, 0xca, 0x08, 0xa4 }, - { 0x59, 0x16, 0x83, 0x3e, 0xbb, 0x05, 0xcd, 0x91, 0x9c, 0xa7, 0xfe, 0x83, 0xb6, 0x92, 0xd3, 0x20, 0x5b, 0xef, 0x72, 0x39, 0x2b, 0x2c, 0xf6, 0xbb, 0x0a, 0x6d, 0x43, 0xf9, 0x94, 0xf9, 0x5f, 0x11 }, - { 0xf6, 0x3a, 0xab, 0x3e, 0xc6, 0x41, 0xb3, 0xb0, 0x24, 0x96, 0x4c, 0x2b, 0x43, 0x7c, 0x04, 0xf6, 0x04, 0x3c, 0x4c, 0x7e, 0x02, 0x79, 0x23, 0x99, 0x95, 0x40, 0x19, 0x58, 0xf8, 0x6b, 0xbe, 0x54 }, - { 0xf1, 0x72, 0xb1, 0x80, 0xbf, 0xb0, 0x97, 0x40, 0x49, 0x31, 0x20, 0xb6, 0x32, 0x6c, 0xbd, 0xc5, 0x61, 0xe4, 0x77, 0xde, 0xf9, 0xbb, 0xcf, 0xd2, 0x8c, 0xc8, 0xc1, 0xc5, 0xe3, 0x37, 0x9a, 0x31 }, - { 0xcb, 0x9b, 0x89, 0xcc, 0x18, 0x38, 0x1d, 0xd9, 0x14, 0x1a, 0xde, 0x58, 0x86, 0x54, 0xd4, 0xe6, 0xa2, 0x31, 0xd5, 0xbf, 0x49, 0xd4, 0xd5, 0x9a, 0xc2, 0x7d, 0x86, 0x9c, 0xbe, 0x10, 0x0c, 0xf3 }, - { 0x7b, 0xd8, 0x81, 0x50, 0x46, 0xfd, 0xd8, 0x10, 0xa9, 0x23, 0xe1, 0x98, 0x4a, 0xae, 0xbd, 0xcd, 0xf8, 0x4d, 0x87, 0xc8, 0x99, 0x2d, 0x68, 0xb5, 0xee, 0xb4, 0x60, 0xf9, 0x3e, 0xb3, 0xc8, 0xd7 }, - { 0x60, 0x7b, 0xe6, 0x68, 0x62, 0xfd, 0x08, 0xee, 0x5b, 0x19, 0xfa, 0xca, 0xc0, 0x9d, 0xfd, 0xbc, 0xd4, 0x0c, 0x31, 0x21, 0x01, 0xd6, 0x6e, 0x6e, 0xbd, 0x2b, 0x84, 0x1f, 0x1b, 0x9a, 0x93, 0x25 }, - { 0x9f, 0xe0, 0x3b, 0xbe, 0x69, 0xab, 0x18, 0x34, 0xf5, 0x21, 0x9b, 0x0d, 0xa8, 0x8a, 0x08, 0xb3, 0x0a, 0x66, 0xc5, 0x91, 0x3f, 0x01, 0x51, 0x96, 0x3c, 0x36, 0x05, 0x60, 0xdb, 0x03, 0x87, 0xb3 }, - { 0x90, 0xa8, 0x35, 0x85, 0x71, 0x7b, 0x75, 0xf0, 0xe9, 0xb7, 0x25, 0xe0, 0x55, 0xee, 0xee, 0xb9, 0xe7, 0xa0, 0x28, 0xea, 0x7e, 0x6c, 0xbc, 0x07, 0xb2, 0x09, 0x17, 0xec, 0x03, 0x63, 0xe3, 0x8c }, - { 0x33, 0x6e, 0xa0, 0x53, 0x0f, 0x4a, 0x74, 0x69, 0x12, 0x6e, 0x02, 0x18, 0x58, 0x7e, 0xbb, 0xde, 0x33, 0x58, 0xa0, 0xb3, 0x1c, 0x29, 0xd2, 0x00, 0xf7, 0xdc, 0x7e, 0xb1, 0x5c, 0x6a, 0xad, 0xd8 }, - { 0xa7, 0x9e, 0x76, 0xdc, 0x0a, 0xbc, 0xa4, 0x39, 0x6f, 0x07, 0x47, 0xcd, 0x7b, 0x74, 0x8d, 0xf9, 0x13, 0x00, 0x76, 0x26, 0xb1, 0xd6, 0x59, 0xda, 0x0c, 0x1f, 0x78, 0xb9, 0x30, 0x3d, 0x01, 0xa3 }, - { 0x44, 0xe7, 0x8a, 0x77, 0x37, 0x56, 0xe0, 0x95, 0x15, 0x19, 0x50, 0x4d, 0x70, 0x38, 0xd2, 0x8d, 0x02, 0x13, 0xa3, 0x7e, 0x0c, 0xe3, 0x75, 0x37, 0x17, 0x57, 0xbc, 0x99, 0x63, 0x11, 0xe3, 0xb8 }, - { 0x77, 0xac, 0x01, 0x2a, 0x3f, 0x75, 0x4d, 0xcf, 0xea, 0xb5, 0xeb, 0x99, 0x6b, 0xe9, 0xcd, 0x2d, 0x1f, 0x96, 0x11, 0x1b, 0x6e, 0x49, 0xf3, 0x99, 0x4d, 0xf1, 0x81, 0xf2, 0x85, 0x69, 0xd8, 0x25 }, - { 0xce, 0x5a, 0x10, 0xdb, 0x6f, 0xcc, 0xda, 0xf1, 0x40, 0xaa, 0xa4, 0xde, 0xd6, 0x25, 0x0a, 0x9c, 0x06, 0xe9, 0x22, 0x2b, 0xc9, 0xf9, 0xf3, 0x65, 0x8a, 0x4a, 0xff, 0x93, 0x5f, 0x2b, 0x9f, 0x3a }, - { 0xec, 0xc2, 0x03, 0xa7, 0xfe, 0x2b, 0xe4, 0xab, 0xd5, 0x5b, 0xb5, 0x3e, 0x6e, 0x67, 0x35, 0x72, 0xe0, 0x07, 0x8d, 0xa8, 0xcd, 0x37, 0x5e, 0xf4, 0x30, 0xcc, 0x97, 0xf9, 0xf8, 0x00, 0x83, 0xaf }, - { 0x14, 0xa5, 0x18, 0x6d, 0xe9, 0xd7, 0xa1, 0x8b, 0x04, 0x12, 0xb8, 0x56, 0x3e, 0x51, 0xcc, 0x54, 0x33, 0x84, 0x0b, 0x4a, 0x12, 0x9a, 0x8f, 0xf9, 0x63, 0xb3, 0x3a, 0x3c, 0x4a, 0xfe, 0x8e, 0xbb }, - { 0x13, 0xf8, 0xef, 0x95, 0xcb, 0x86, 0xe6, 0xa6, 0x38, 0x93, 0x1c, 0x8e, 0x10, 0x76, 0x73, 0xeb, 0x76, 0xba, 0x10, 0xd7, 0xc2, 0xcd, 0x70, 0xb9, 0xd9, 0x92, 0x0b, 0xbe, 0xed, 0x92, 0x94, 0x09 }, - { 0x0b, 0x33, 0x8f, 0x4e, 0xe1, 0x2f, 0x2d, 0xfc, 0xb7, 0x87, 0x13, 0x37, 0x79, 0x41, 0xe0, 0xb0, 0x63, 0x21, 0x52, 0x58, 0x1d, 0x13, 0x32, 0x51, 0x6e, 0x4a, 0x2c, 0xab, 0x19, 0x42, 0xcc, 0xa4 }, - { 0xea, 0xab, 0x0e, 0xc3, 0x7b, 0x3b, 0x8a, 0xb7, 0x96, 0xe9, 0xf5, 0x72, 0x38, 0xde, 0x14, 0xa2, 0x64, 0xa0, 0x76, 0xf3, 0x88, 0x7d, 0x86, 0xe2, 0x9b, 0xb5, 0x90, 0x6d, 0xb5, 0xa0, 0x0e, 0x02 }, - { 0x23, 0xcb, 0x68, 0xb8, 0xc0, 0xe6, 0xdc, 0x26, 0xdc, 0x27, 0x76, 0x6d, 0xdc, 0x0a, 0x13, 0xa9, 0x94, 0x38, 0xfd, 0x55, 0x61, 0x7a, 0xa4, 0x09, 0x5d, 0x8f, 0x96, 0x97, 0x20, 0xc8, 0x72, 0xdf }, - { 0x09, 0x1d, 0x8e, 0xe3, 0x0d, 0x6f, 0x29, 0x68, 0xd4, 0x6b, 0x68, 0x7d, 0xd6, 0x52, 0x92, 0x66, 0x57, 0x42, 0xde, 0x0b, 0xb8, 0x3d, 0xcc, 0x00, 0x04, 0xc7, 0x2c, 0xe1, 0x00, 0x07, 0xa5, 0x49 }, - { 0x7f, 0x50, 0x7a, 0xbc, 0x6d, 0x19, 0xba, 0x00, 0xc0, 0x65, 0xa8, 0x76, 0xec, 0x56, 0x57, 0x86, 0x88, 0x82, 0xd1, 0x8a, 0x22, 0x1b, 0xc4, 0x6c, 0x7a, 0x69, 0x12, 0x54, 0x1f, 0x5b, 0xc7, 0xba }, - { 0xa0, 0x60, 0x7c, 0x24, 0xe1, 0x4e, 0x8c, 0x22, 0x3d, 0xb0, 0xd7, 0x0b, 0x4d, 0x30, 0xee, 0x88, 0x01, 0x4d, 0x60, 0x3f, 0x43, 0x7e, 0x9e, 0x02, 0xaa, 0x7d, 0xaf, 0xa3, 0xcd, 0xfb, 0xad, 0x94 }, - { 0xdd, 0xbf, 0xea, 0x75, 0xcc, 0x46, 0x78, 0x82, 0xeb, 0x34, 0x83, 0xce, 0x5e, 0x2e, 0x75, 0x6a, 0x4f, 0x47, 0x01, 0xb7, 0x6b, 0x44, 0x55, 0x19, 0xe8, 0x9f, 0x22, 0xd6, 0x0f, 0xa8, 0x6e, 0x06 }, - { 0x0c, 0x31, 0x1f, 0x38, 0xc3, 0x5a, 0x4f, 0xb9, 0x0d, 0x65, 0x1c, 0x28, 0x9d, 0x48, 0x68, 0x56, 0xcd, 0x14, 0x13, 0xdf, 0x9b, 0x06, 0x77, 0xf5, 0x3e, 0xce, 0x2c, 0xd9, 0xe4, 0x77, 0xc6, 0x0a }, - { 0x46, 0xa7, 0x3a, 0x8d, 0xd3, 0xe7, 0x0f, 0x59, 0xd3, 0x94, 0x2c, 0x01, 0xdf, 0x59, 0x9d, 0xef, 0x78, 0x3c, 0x9d, 0xa8, 0x2f, 0xd8, 0x32, 0x22, 0xcd, 0x66, 0x2b, 0x53, 0xdc, 0xe7, 0xdb, 0xdf }, - { 0xad, 0x03, 0x8f, 0xf9, 0xb1, 0x4d, 0xe8, 0x4a, 0x80, 0x1e, 0x4e, 0x62, 0x1c, 0xe5, 0xdf, 0x02, 0x9d, 0xd9, 0x35, 0x20, 0xd0, 0xc2, 0xfa, 0x38, 0xbf, 0xf1, 0x76, 0xa8, 0xb1, 0xd1, 0x69, 0x8c }, - { 0xab, 0x70, 0xc5, 0xdf, 0xbd, 0x1e, 0xa8, 0x17, 0xfe, 0xd0, 0xcd, 0x06, 0x72, 0x93, 0xab, 0xf3, 0x19, 0xe5, 0xd7, 0x90, 0x1c, 0x21, 0x41, 0xd5, 0xd9, 0x9b, 0x23, 0xf0, 0x3a, 0x38, 0xe7, 0x48 }, - { 0x1f, 0xff, 0xda, 0x67, 0x93, 0x2b, 0x73, 0xc8, 0xec, 0xaf, 0x00, 0x9a, 0x34, 0x91, 0xa0, 0x26, 0x95, 0x3b, 0xab, 0xfe, 0x1f, 0x66, 0x3b, 0x06, 0x97, 0xc3, 0xc4, 0xae, 0x8b, 0x2e, 0x7d, 0xcb }, - { 0xb0, 0xd2, 0xcc, 0x19, 0x47, 0x2d, 0xd5, 0x7f, 0x2b, 0x17, 0xef, 0xc0, 0x3c, 0x8d, 0x58, 0xc2, 0x28, 0x3d, 0xbb, 0x19, 0xda, 0x57, 0x2f, 0x77, 0x55, 0x85, 0x5a, 0xa9, 0x79, 0x43, 0x17, 0xa0 }, - { 0xa0, 0xd1, 0x9a, 0x6e, 0xe3, 0x39, 0x79, 0xc3, 0x25, 0x51, 0x0e, 0x27, 0x66, 0x22, 0xdf, 0x41, 0xf7, 0x15, 0x83, 0xd0, 0x75, 0x01, 0xb8, 0x70, 0x71, 0x12, 0x9a, 0x0a, 0xd9, 0x47, 0x32, 0xa5 }, - { 0x72, 0x46, 0x42, 0xa7, 0x03, 0x2d, 0x10, 0x62, 0xb8, 0x9e, 0x52, 0xbe, 0xa3, 0x4b, 0x75, 0xdf, 0x7d, 0x8f, 0xe7, 0x72, 0xd9, 0xfe, 0x3c, 0x93, 0xdd, 0xf3, 0xc4, 0x54, 0x5a, 0xb5, 0xa9, 0x9b }, - { 0xad, 0xe5, 0xea, 0xa7, 0xe6, 0x1f, 0x67, 0x2d, 0x58, 0x7e, 0xa0, 0x3d, 0xae, 0x7d, 0x7b, 0x55, 0x22, 0x9c, 0x01, 0xd0, 0x6b, 0xc0, 0xa5, 0x70, 0x14, 0x36, 0xcb, 0xd1, 0x83, 0x66, 0xa6, 0x26 }, - { 0x01, 0x3b, 0x31, 0xeb, 0xd2, 0x28, 0xfc, 0xdd, 0xa5, 0x1f, 0xab, 0xb0, 0x3b, 0xb0, 0x2d, 0x60, 0xac, 0x20, 0xca, 0x21, 0x5a, 0xaf, 0xa8, 0x3b, 0xdd, 0x85, 0x5e, 0x37, 0x55, 0xa3, 0x5f, 0x0b }, - { 0x33, 0x2e, 0xd4, 0x0b, 0xb1, 0x0d, 0xde, 0x3c, 0x95, 0x4a, 0x75, 0xd7, 0xb8, 0x99, 0x9d, 0x4b, 0x26, 0xa1, 0xc0, 0x63, 0xc1, 0xdc, 0x6e, 0x32, 0xc1, 0xd9, 0x1b, 0xab, 0x7b, 0xbb, 0x7d, 0x16 }, - { 0xc7, 0xa1, 0x97, 0xb3, 0xa0, 0x5b, 0x56, 0x6b, 0xcc, 0x9f, 0xac, 0xd2, 0x0e, 0x44, 0x1d, 0x6f, 0x6c, 0x28, 0x60, 0xac, 0x96, 0x51, 0xcd, 0x51, 0xd6, 0xb9, 0xd2, 0xcd, 0xee, 0xea, 0x03, 0x90 }, - { 0xbd, 0x9c, 0xf6, 0x4e, 0xa8, 0x95, 0x3c, 0x03, 0x71, 0x08, 0xe6, 0xf6, 0x54, 0x91, 0x4f, 0x39, 0x58, 0xb6, 0x8e, 0x29, 0xc1, 0x67, 0x00, 0xdc, 0x18, 0x4d, 0x94, 0xa2, 0x17, 0x08, 0xff, 0x60 }, - { 0x88, 0x35, 0xb0, 0xac, 0x02, 0x11, 0x51, 0xdf, 0x71, 0x64, 0x74, 0xce, 0x27, 0xce, 0x4d, 0x3c, 0x15, 0xf0, 0xb2, 0xda, 0xb4, 0x80, 0x03, 0xcf, 0x3f, 0x3e, 0xfd, 0x09, 0x45, 0x10, 0x6b, 0x9a }, - { 0x3b, 0xfe, 0xfa, 0x33, 0x01, 0xaa, 0x55, 0xc0, 0x80, 0x19, 0x0c, 0xff, 0xda, 0x8e, 0xae, 0x51, 0xd9, 0xaf, 0x48, 0x8b, 0x4c, 0x1f, 0x24, 0xc3, 0xd9, 0xa7, 0x52, 0x42, 0xfd, 0x8e, 0xa0, 0x1d }, - { 0x08, 0x28, 0x4d, 0x14, 0x99, 0x3c, 0xd4, 0x7d, 0x53, 0xeb, 0xae, 0xcf, 0x0d, 0xf0, 0x47, 0x8c, 0xc1, 0x82, 0xc8, 0x9c, 0x00, 0xe1, 0x85, 0x9c, 0x84, 0x85, 0x16, 0x86, 0xdd, 0xf2, 0xc1, 0xb7 }, - { 0x1e, 0xd7, 0xef, 0x9f, 0x04, 0xc2, 0xac, 0x8d, 0xb6, 0xa8, 0x64, 0xdb, 0x13, 0x10, 0x87, 0xf2, 0x70, 0x65, 0x09, 0x8e, 0x69, 0xc3, 0xfe, 0x78, 0x71, 0x8d, 0x9b, 0x94, 0x7f, 0x4a, 0x39, 0xd0 }, - { 0xc1, 0x61, 0xf2, 0xdc, 0xd5, 0x7e, 0x9c, 0x14, 0x39, 0xb3, 0x1a, 0x9d, 0xd4, 0x3d, 0x8f, 0x3d, 0x7d, 0xd8, 0xf0, 0xeb, 0x7c, 0xfa, 0xc6, 0xfb, 0x25, 0xa0, 0xf2, 0x8e, 0x30, 0x6f, 0x06, 0x61 }, - { 0xc0, 0x19, 0x69, 0xad, 0x34, 0xc5, 0x2c, 0xaf, 0x3d, 0xc4, 0xd8, 0x0d, 0x19, 0x73, 0x5c, 0x29, 0x73, 0x1a, 0xc6, 0xe7, 0xa9, 0x20, 0x85, 0xab, 0x92, 0x50, 0xc4, 0x8d, 0xea, 0x48, 0xa3, 0xfc }, - { 0x17, 0x20, 0xb3, 0x65, 0x56, 0x19, 0xd2, 0xa5, 0x2b, 0x35, 0x21, 0xae, 0x0e, 0x49, 0xe3, 0x45, 0xcb, 0x33, 0x89, 0xeb, 0xd6, 0x20, 0x8a, 0xca, 0xf9, 0xf1, 0x3f, 0xda, 0xcc, 0xa8, 0xbe, 0x49 }, - { 0x75, 0x62, 0x88, 0x36, 0x1c, 0x83, 0xe2, 0x4c, 0x61, 0x7c, 0xf9, 0x5c, 0x90, 0x5b, 0x22, 0xd0, 0x17, 0xcd, 0xc8, 0x6f, 0x0b, 0xf1, 0xd6, 0x58, 0xf4, 0x75, 0x6c, 0x73, 0x79, 0x87, 0x3b, 0x7f }, - { 0xe7, 0xd0, 0xed, 0xa3, 0x45, 0x26, 0x93, 0xb7, 0x52, 0xab, 0xcd, 0xa1, 0xb5, 0x5e, 0x27, 0x6f, 0x82, 0x69, 0x8f, 0x5f, 0x16, 0x05, 0x40, 0x3e, 0xff, 0x83, 0x0b, 0xea, 0x00, 0x71, 0xa3, 0x94 }, - { 0x2c, 0x82, 0xec, 0xaa, 0x6b, 0x84, 0x80, 0x3e, 0x04, 0x4a, 0xf6, 0x31, 0x18, 0xaf, 0xe5, 0x44, 0x68, 0x7c, 0xb6, 0xe6, 0xc7, 0xdf, 0x49, 0xed, 0x76, 0x2d, 0xfd, 0x7c, 0x86, 0x93, 0xa1, 0xbc }, - { 0x61, 0x36, 0xcb, 0xf4, 0xb4, 0x41, 0x05, 0x6f, 0xa1, 0xe2, 0x72, 0x24, 0x98, 0x12, 0x5d, 0x6d, 0xed, 0x45, 0xe1, 0x7b, 0x52, 0x14, 0x39, 0x59, 0xc7, 0xf4, 0xd4, 0xe3, 0x95, 0x21, 0x8a, 0xc2 }, - { 0x72, 0x1d, 0x32, 0x45, 0xaa, 0xfe, 0xf2, 0x7f, 0x6a, 0x62, 0x4f, 0x47, 0x95, 0x4b, 0x6c, 0x25, 0x50, 0x79, 0x52, 0x6f, 0xfa, 0x25, 0xe9, 0xff, 0x77, 0xe5, 0xdc, 0xff, 0x47, 0x3b, 0x15, 0x97 }, - { 0x9d, 0xd2, 0xfb, 0xd8, 0xce, 0xf1, 0x6c, 0x35, 0x3c, 0x0a, 0xc2, 0x11, 0x91, 0xd5, 0x09, 0xeb, 0x28, 0xdd, 0x9e, 0x3e, 0x0d, 0x8c, 0xea, 0x5d, 0x26, 0xca, 0x83, 0x93, 0x93, 0x85, 0x1c, 0x3a }, - { 0xb2, 0x39, 0x4c, 0xea, 0xcd, 0xeb, 0xf2, 0x1b, 0xf9, 0xdf, 0x2c, 0xed, 0x98, 0xe5, 0x8f, 0x1c, 0x3a, 0x4b, 0xbb, 0xff, 0x66, 0x0d, 0xd9, 0x00, 0xf6, 0x22, 0x02, 0xd6, 0x78, 0x5c, 0xc4, 0x6e }, - { 0x57, 0x08, 0x9f, 0x22, 0x27, 0x49, 0xad, 0x78, 0x71, 0x76, 0x5f, 0x06, 0x2b, 0x11, 0x4f, 0x43, 0xba, 0x20, 0xec, 0x56, 0x42, 0x2a, 0x8b, 0x1e, 0x3f, 0x87, 0x19, 0x2c, 0x0e, 0xa7, 0x18, 0xc6 }, - { 0xe4, 0x9a, 0x94, 0x59, 0x96, 0x1c, 0xd3, 0x3c, 0xdf, 0x4a, 0xae, 0x1b, 0x10, 0x78, 0xa5, 0xde, 0xa7, 0xc0, 0x40, 0xe0, 0xfe, 0xa3, 0x40, 0xc9, 0x3a, 0x72, 0x48, 0x72, 0xfc, 0x4a, 0xf8, 0x06 }, - { 0xed, 0xe6, 0x7f, 0x72, 0x0e, 0xff, 0xd2, 0xca, 0x9c, 0x88, 0x99, 0x41, 0x52, 0xd0, 0x20, 0x1d, 0xee, 0x6b, 0x0a, 0x2d, 0x2c, 0x07, 0x7a, 0xca, 0x6d, 0xae, 0x29, 0xf7, 0x3f, 0x8b, 0x63, 0x09 }, - { 0xe0, 0xf4, 0x34, 0xbf, 0x22, 0xe3, 0x08, 0x80, 0x39, 0xc2, 0x1f, 0x71, 0x9f, 0xfc, 0x67, 0xf0, 0xf2, 0xcb, 0x5e, 0x98, 0xa7, 0xa0, 0x19, 0x4c, 0x76, 0xe9, 0x6b, 0xf4, 0xe8, 0xe1, 0x7e, 0x61 }, - { 0x27, 0x7c, 0x04, 0xe2, 0x85, 0x34, 0x84, 0xa4, 0xeb, 0xa9, 0x10, 0xad, 0x33, 0x6d, 0x01, 0xb4, 0x77, 0xb6, 0x7c, 0xc2, 0x00, 0xc5, 0x9f, 0x3c, 0x8d, 0x77, 0xee, 0xf8, 0x49, 0x4f, 0x29, 0xcd }, - { 0x15, 0x6d, 0x57, 0x47, 0xd0, 0xc9, 0x9c, 0x7f, 0x27, 0x09, 0x7d, 0x7b, 0x7e, 0x00, 0x2b, 0x2e, 0x18, 0x5c, 0xb7, 0x2d, 0x8d, 0xd7, 0xeb, 0x42, 0x4a, 0x03, 0x21, 0x52, 0x81, 0x61, 0x21, 0x9f }, - { 0x20, 0xdd, 0xd1, 0xed, 0x9b, 0x1c, 0xa8, 0x03, 0x94, 0x6d, 0x64, 0xa8, 0x3a, 0xe4, 0x65, 0x9d, 0xa6, 0x7f, 0xba, 0x7a, 0x1a, 0x3e, 0xdd, 0xb1, 0xe1, 0x03, 0xc0, 0xf5, 0xe0, 0x3e, 0x3a, 0x2c }, - { 0xf0, 0xaf, 0x60, 0x4d, 0x3d, 0xab, 0xbf, 0x9a, 0x0f, 0x2a, 0x7d, 0x3d, 0xda, 0x6b, 0xd3, 0x8b, 0xba, 0x72, 0xc6, 0xd0, 0x9b, 0xe4, 0x94, 0xfc, 0xef, 0x71, 0x3f, 0xf1, 0x01, 0x89, 0xb6, 0xe6 }, - { 0x98, 0x02, 0xbb, 0x87, 0xde, 0xf4, 0xcc, 0x10, 0xc4, 0xa5, 0xfd, 0x49, 0xaa, 0x58, 0xdf, 0xe2, 0xf3, 0xfd, 0xdb, 0x46, 0xb4, 0x70, 0x88, 0x14, 0xea, 0xd8, 0x1d, 0x23, 0xba, 0x95, 0x13, 0x9b }, - { 0x4f, 0x8c, 0xe1, 0xe5, 0x1d, 0x2f, 0xe7, 0xf2, 0x40, 0x43, 0xa9, 0x04, 0xd8, 0x98, 0xeb, 0xfc, 0x91, 0x97, 0x54, 0x18, 0x75, 0x34, 0x13, 0xaa, 0x09, 0x9b, 0x79, 0x5e, 0xcb, 0x35, 0xce, 0xdb }, - { 0xbd, 0xdc, 0x65, 0x14, 0xd7, 0xee, 0x6a, 0xce, 0x0a, 0x4a, 0xc1, 0xd0, 0xe0, 0x68, 0x11, 0x22, 0x88, 0xcb, 0xcf, 0x56, 0x04, 0x54, 0x64, 0x27, 0x05, 0x63, 0x01, 0x77, 0xcb, 0xa6, 0x08, 0xbd }, - { 0xd6, 0x35, 0x99, 0x4f, 0x62, 0x91, 0x51, 0x7b, 0x02, 0x81, 0xff, 0xdd, 0x49, 0x6a, 0xfa, 0x86, 0x27, 0x12, 0xe5, 0xb3, 0xc4, 0xe5, 0x2e, 0x4c, 0xd5, 0xfd, 0xae, 0x8c, 0x0e, 0x72, 0xfb, 0x08 }, - { 0x87, 0x8d, 0x9c, 0xa6, 0x00, 0xcf, 0x87, 0xe7, 0x69, 0xcc, 0x30, 0x5c, 0x1b, 0x35, 0x25, 0x51, 0x86, 0x61, 0x5a, 0x73, 0xa0, 0xda, 0x61, 0x3b, 0x5f, 0x1c, 0x98, 0xdb, 0xf8, 0x12, 0x83, 0xea }, - { 0xa6, 0x4e, 0xbe, 0x5d, 0xc1, 0x85, 0xde, 0x9f, 0xdd, 0xe7, 0x60, 0x7b, 0x69, 0x98, 0x70, 0x2e, 0xb2, 0x34, 0x56, 0x18, 0x49, 0x57, 0x30, 0x7d, 0x2f, 0xa7, 0x2e, 0x87, 0xa4, 0x77, 0x02, 0xd6 }, - { 0xce, 0x50, 0xea, 0xb7, 0xb5, 0xeb, 0x52, 0xbd, 0xc9, 0xad, 0x8e, 0x5a, 0x48, 0x0a, 0xb7, 0x80, 0xca, 0x93, 0x20, 0xe4, 0x43, 0x60, 0xb1, 0xfe, 0x37, 0xe0, 0x3f, 0x2f, 0x7a, 0xd7, 0xde, 0x01 }, - { 0xee, 0xdd, 0xb7, 0xc0, 0xdb, 0x6e, 0x30, 0xab, 0xe6, 0x6d, 0x79, 0xe3, 0x27, 0x51, 0x1e, 0x61, 0xfc, 0xeb, 0xbc, 0x29, 0xf1, 0x59, 0xb4, 0x0a, 0x86, 0xb0, 0x46, 0xec, 0xf0, 0x51, 0x38, 0x23 }, - { 0x78, 0x7f, 0xc9, 0x34, 0x40, 0xc1, 0xec, 0x96, 0xb5, 0xad, 0x01, 0xc1, 0x6c, 0xf7, 0x79, 0x16, 0xa1, 0x40, 0x5f, 0x94, 0x26, 0x35, 0x6e, 0xc9, 0x21, 0xd8, 0xdf, 0xf3, 0xea, 0x63, 0xb7, 0xe0 }, - { 0x7f, 0x0d, 0x5e, 0xab, 0x47, 0xee, 0xfd, 0xa6, 0x96, 0xc0, 0xbf, 0x0f, 0xbf, 0x86, 0xab, 0x21, 0x6f, 0xce, 0x46, 0x1e, 0x93, 0x03, 0xab, 0xa6, 0xac, 0x37, 0x41, 0x20, 0xe8, 0x90, 0xe8, 0xdf }, - { 0xb6, 0x80, 0x04, 0xb4, 0x2f, 0x14, 0xad, 0x02, 0x9f, 0x4c, 0x2e, 0x03, 0xb1, 0xd5, 0xeb, 0x76, 0xd5, 0x71, 0x60, 0xe2, 0x64, 0x76, 0xd2, 0x11, 0x31, 0xbe, 0xf2, 0x0a, 0xda, 0x7d, 0x27, 0xf4 }, - { 0xb0, 0xc4, 0xeb, 0x18, 0xae, 0x25, 0x0b, 0x51, 0xa4, 0x13, 0x82, 0xea, 0xd9, 0x2d, 0x0d, 0xc7, 0x45, 0x5f, 0x93, 0x79, 0xfc, 0x98, 0x84, 0x42, 0x8e, 0x47, 0x70, 0x60, 0x8d, 0xb0, 0xfa, 0xec }, - { 0xf9, 0x2b, 0x7a, 0x87, 0x0c, 0x05, 0x9f, 0x4d, 0x46, 0x46, 0x4c, 0x82, 0x4e, 0xc9, 0x63, 0x55, 0x14, 0x0b, 0xdc, 0xe6, 0x81, 0x32, 0x2c, 0xc3, 0xa9, 0x92, 0xff, 0x10, 0x3e, 0x3f, 0xea, 0x52 }, - { 0x53, 0x64, 0x31, 0x26, 0x14, 0x81, 0x33, 0x98, 0xcc, 0x52, 0x5d, 0x4c, 0x4e, 0x14, 0x6e, 0xde, 0xb3, 0x71, 0x26, 0x5f, 0xba, 0x19, 0x13, 0x3a, 0x2c, 0x3d, 0x21, 0x59, 0x29, 0x8a, 0x17, 0x42 }, - { 0xf6, 0x62, 0x0e, 0x68, 0xd3, 0x7f, 0xb2, 0xaf, 0x50, 0x00, 0xfc, 0x28, 0xe2, 0x3b, 0x83, 0x22, 0x97, 0xec, 0xd8, 0xbc, 0xe9, 0x9e, 0x8b, 0xe4, 0xd0, 0x4e, 0x85, 0x30, 0x9e, 0x3d, 0x33, 0x74 }, - { 0x53, 0x16, 0xa2, 0x79, 0x69, 0xd7, 0xfe, 0x04, 0xff, 0x27, 0xb2, 0x83, 0x96, 0x1b, 0xff, 0xc3, 0xbf, 0x5d, 0xfb, 0x32, 0xfb, 0x6a, 0x89, 0xd1, 0x01, 0xc6, 0xc3, 0xb1, 0x93, 0x7c, 0x28, 0x71 }, - { 0x81, 0xd1, 0x66, 0x4f, 0xdf, 0x3c, 0xb3, 0x3c, 0x24, 0xee, 0xba, 0xc0, 0xbd, 0x64, 0x24, 0x4b, 0x77, 0xc4, 0xab, 0xea, 0x90, 0xbb, 0xe8, 0xb5, 0xee, 0x0b, 0x2a, 0xaf, 0xcf, 0x2d, 0x6a, 0x53 }, - { 0x34, 0x57, 0x82, 0xf2, 0x95, 0xb0, 0x88, 0x03, 0x52, 0xe9, 0x24, 0xa0, 0x46, 0x7b, 0x5f, 0xbc, 0x3e, 0x8f, 0x3b, 0xfb, 0xc3, 0xc7, 0xe4, 0x8b, 0x67, 0x09, 0x1f, 0xb5, 0xe8, 0x0a, 0x94, 0x42 }, - { 0x79, 0x41, 0x11, 0xea, 0x6c, 0xd6, 0x5e, 0x31, 0x1f, 0x74, 0xee, 0x41, 0xd4, 0x76, 0xcb, 0x63, 0x2c, 0xe1, 0xe4, 0xb0, 0x51, 0xdc, 0x1d, 0x9e, 0x9d, 0x06, 0x1a, 0x19, 0xe1, 0xd0, 0xbb, 0x49 }, - { 0x2a, 0x85, 0xda, 0xf6, 0x13, 0x88, 0x16, 0xb9, 0x9b, 0xf8, 0xd0, 0x8b, 0xa2, 0x11, 0x4b, 0x7a, 0xb0, 0x79, 0x75, 0xa7, 0x84, 0x20, 0xc1, 0xa3, 0xb0, 0x6a, 0x77, 0x7c, 0x22, 0xdd, 0x8b, 0xcb }, - { 0x89, 0xb0, 0xd5, 0xf2, 0x89, 0xec, 0x16, 0x40, 0x1a, 0x06, 0x9a, 0x96, 0x0d, 0x0b, 0x09, 0x3e, 0x62, 0x5d, 0xa3, 0xcf, 0x41, 0xee, 0x29, 0xb5, 0x9b, 0x93, 0x0c, 0x58, 0x20, 0x14, 0x54, 0x55 }, - { 0xd0, 0xfd, 0xcb, 0x54, 0x39, 0x43, 0xfc, 0x27, 0xd2, 0x08, 0x64, 0xf5, 0x21, 0x81, 0x47, 0x1b, 0x94, 0x2c, 0xc7, 0x7c, 0xa6, 0x75, 0xbc, 0xb3, 0x0d, 0xf3, 0x1d, 0x35, 0x8e, 0xf7, 0xb1, 0xeb }, - { 0xb1, 0x7e, 0xa8, 0xd7, 0x70, 0x63, 0xc7, 0x09, 0xd4, 0xdc, 0x6b, 0x87, 0x94, 0x13, 0xc3, 0x43, 0xe3, 0x79, 0x0e, 0x9e, 0x62, 0xca, 0x85, 0xb7, 0x90, 0x0b, 0x08, 0x6f, 0x6b, 0x75, 0xc6, 0x72 }, - { 0xe7, 0x1a, 0x3e, 0x2c, 0x27, 0x4d, 0xb8, 0x42, 0xd9, 0x21, 0x14, 0xf2, 0x17, 0xe2, 0xc0, 0xea, 0xc8, 0xb4, 0x50, 0x93, 0xfd, 0xfd, 0x9d, 0xf4, 0xca, 0x71, 0x62, 0x39, 0x48, 0x62, 0xd5, 0x01 }, - { 0xc0, 0x47, 0x67, 0x59, 0xab, 0x7a, 0xa3, 0x33, 0x23, 0x4f, 0x6b, 0x44, 0xf5, 0xfd, 0x85, 0x83, 0x90, 0xec, 0x23, 0x69, 0x4c, 0x62, 0x2c, 0xb9, 0x86, 0xe7, 0x69, 0xc7, 0x8e, 0xdd, 0x73, 0x3e }, - { 0x9a, 0xb8, 0xea, 0xbb, 0x14, 0x16, 0x43, 0x4d, 0x85, 0x39, 0x13, 0x41, 0xd5, 0x69, 0x93, 0xc5, 0x54, 0x58, 0x16, 0x7d, 0x44, 0x18, 0xb1, 0x9a, 0x0f, 0x2a, 0xd8, 0xb7, 0x9a, 0x83, 0xa7, 0x5b }, - { 0x79, 0x92, 0xd0, 0xbb, 0xb1, 0x5e, 0x23, 0x82, 0x6f, 0x44, 0x3e, 0x00, 0x50, 0x5d, 0x68, 0xd3, 0xed, 0x73, 0x72, 0x99, 0x5a, 0x5c, 0x3e, 0x49, 0x86, 0x54, 0x10, 0x2f, 0xbc, 0xd0, 0x96, 0x4e }, - { 0xc0, 0x21, 0xb3, 0x00, 0x85, 0x15, 0x14, 0x35, 0xdf, 0x33, 0xb0, 0x07, 0xcc, 0xec, 0xc6, 0x9d, 0xf1, 0x26, 0x9f, 0x39, 0xba, 0x25, 0x09, 0x2b, 0xed, 0x59, 0xd9, 0x32, 0xac, 0x0f, 0xdc, 0x28 }, - { 0x91, 0xa2, 0x5e, 0xc0, 0xec, 0x0d, 0x9a, 0x56, 0x7f, 0x89, 0xc4, 0xbf, 0xe1, 0xa6, 0x5a, 0x0e, 0x43, 0x2d, 0x07, 0x06, 0x4b, 0x41, 0x90, 0xe2, 0x7d, 0xfb, 0x81, 0x90, 0x1f, 0xd3, 0x13, 0x9b }, - { 0x59, 0x50, 0xd3, 0x9a, 0x23, 0xe1, 0x54, 0x5f, 0x30, 0x12, 0x70, 0xaa, 0x1a, 0x12, 0xf2, 0xe6, 0xc4, 0x53, 0x77, 0x6e, 0x4d, 0x63, 0x55, 0xde, 0x42, 0x5c, 0xc1, 0x53, 0xf9, 0x81, 0x88, 0x67 }, - { 0xd7, 0x9f, 0x14, 0x72, 0x0c, 0x61, 0x0a, 0xf1, 0x79, 0xa3, 0x76, 0x5d, 0x4b, 0x7c, 0x09, 0x68, 0xf9, 0x77, 0x96, 0x2d, 0xbf, 0x65, 0x5b, 0x52, 0x12, 0x72, 0xb6, 0xf1, 0xe1, 0x94, 0x48, 0x8e }, - { 0xe9, 0x53, 0x1b, 0xfc, 0x8b, 0x02, 0x99, 0x5a, 0xea, 0xa7, 0x5b, 0xa2, 0x70, 0x31, 0xfa, 0xdb, 0xcb, 0xf4, 0xa0, 0xda, 0xb8, 0x96, 0x1d, 0x92, 0x96, 0xcd, 0x7e, 0x84, 0xd2, 0x5d, 0x60, 0x06 }, - { 0x34, 0xe9, 0xc2, 0x6a, 0x01, 0xd7, 0xf1, 0x61, 0x81, 0xb4, 0x54, 0xa9, 0xd1, 0x62, 0x3c, 0x23, 0x3c, 0xb9, 0x9d, 0x31, 0xc6, 0x94, 0x65, 0x6e, 0x94, 0x13, 0xac, 0xa3, 0xe9, 0x18, 0x69, 0x2f }, - { 0xd9, 0xd7, 0x42, 0x2f, 0x43, 0x7b, 0xd4, 0x39, 0xdd, 0xd4, 0xd8, 0x83, 0xda, 0xe2, 0xa0, 0x83, 0x50, 0x17, 0x34, 0x14, 0xbe, 0x78, 0x15, 0x51, 0x33, 0xff, 0xf1, 0x96, 0x4c, 0x3d, 0x79, 0x72 }, - { 0x4a, 0xee, 0x0c, 0x7a, 0xaf, 0x07, 0x54, 0x14, 0xff, 0x17, 0x93, 0xea, 0xd7, 0xea, 0xca, 0x60, 0x17, 0x75, 0xc6, 0x15, 0xdb, 0xd6, 0x0b, 0x64, 0x0b, 0x0a, 0x9f, 0x0c, 0xe5, 0x05, 0xd4, 0x35 }, - { 0x6b, 0xfd, 0xd1, 0x54, 0x59, 0xc8, 0x3b, 0x99, 0xf0, 0x96, 0xbf, 0xb4, 0x9e, 0xe8, 0x7b, 0x06, 0x3d, 0x69, 0xc1, 0x97, 0x4c, 0x69, 0x28, 0xac, 0xfc, 0xfb, 0x40, 0x99, 0xf8, 0xc4, 0xef, 0x67 }, - { 0x9f, 0xd1, 0xc4, 0x08, 0xfd, 0x75, 0xc3, 0x36, 0x19, 0x3a, 0x2a, 0x14, 0xd9, 0x4f, 0x6a, 0xf5, 0xad, 0xf0, 0x50, 0xb8, 0x03, 0x87, 0xb4, 0xb0, 0x10, 0xfb, 0x29, 0xf4, 0xcc, 0x72, 0x70, 0x7c }, - { 0x13, 0xc8, 0x84, 0x80, 0xa5, 0xd0, 0x0d, 0x6c, 0x8c, 0x7a, 0xd2, 0x11, 0x0d, 0x76, 0xa8, 0x2d, 0x9b, 0x70, 0xf4, 0xfa, 0x66, 0x96, 0xd4, 0xe5, 0xdd, 0x42, 0xa0, 0x66, 0xdc, 0xaf, 0x99, 0x20 }, - { 0x82, 0x0e, 0x72, 0x5e, 0xe2, 0x5f, 0xe8, 0xfd, 0x3a, 0x8d, 0x5a, 0xbe, 0x4c, 0x46, 0xc3, 0xba, 0x88, 0x9d, 0xe6, 0xfa, 0x91, 0x91, 0xaa, 0x22, 0xba, 0x67, 0xd5, 0x70, 0x54, 0x21, 0x54, 0x2b }, - { 0x32, 0xd9, 0x3a, 0x0e, 0xb0, 0x2f, 0x42, 0xfb, 0xbc, 0xaf, 0x2b, 0xad, 0x00, 0x85, 0xb2, 0x82, 0xe4, 0x60, 0x46, 0xa4, 0xdf, 0x7a, 0xd1, 0x06, 0x57, 0xc9, 0xd6, 0x47, 0x63, 0x75, 0xb9, 0x3e }, - { 0xad, 0xc5, 0x18, 0x79, 0x05, 0xb1, 0x66, 0x9c, 0xd8, 0xec, 0x9c, 0x72, 0x1e, 0x19, 0x53, 0x78, 0x6b, 0x9d, 0x89, 0xa9, 0xba, 0xe3, 0x07, 0x80, 0xf1, 0xe1, 0xea, 0xb2, 0x4a, 0x00, 0x52, 0x3c }, - { 0xe9, 0x07, 0x56, 0xff, 0x7f, 0x9a, 0xd8, 0x10, 0xb2, 0x39, 0xa1, 0x0c, 0xed, 0x2c, 0xf9, 0xb2, 0x28, 0x43, 0x54, 0xc1, 0xf8, 0xc7, 0xe0, 0xac, 0xcc, 0x24, 0x61, 0xdc, 0x79, 0x6d, 0x6e, 0x89 }, - { 0x12, 0x51, 0xf7, 0x6e, 0x56, 0x97, 0x84, 0x81, 0x87, 0x53, 0x59, 0x80, 0x1d, 0xb5, 0x89, 0xa0, 0xb2, 0x2f, 0x86, 0xd8, 0xd6, 0x34, 0xdc, 0x04, 0x50, 0x6f, 0x32, 0x2e, 0xd7, 0x8f, 0x17, 0xe8 }, - { 0x3a, 0xfa, 0x89, 0x9f, 0xd9, 0x80, 0xe7, 0x3e, 0xcb, 0x7f, 0x4d, 0x8b, 0x8f, 0x29, 0x1d, 0xc9, 0xaf, 0x79, 0x6b, 0xc6, 0x5d, 0x27, 0xf9, 0x74, 0xc6, 0xf1, 0x93, 0xc9, 0x19, 0x1a, 0x09, 0xfd }, - { 0xaa, 0x30, 0x5b, 0xe2, 0x6e, 0x5d, 0xed, 0xdc, 0x3c, 0x10, 0x10, 0xcb, 0xc2, 0x13, 0xf9, 0x5f, 0x05, 0x1c, 0x78, 0x5c, 0x5b, 0x43, 0x1e, 0x6a, 0x7c, 0xd0, 0x48, 0xf1, 0x61, 0x78, 0x75, 0x28 }, - { 0x8e, 0xa1, 0x88, 0x4f, 0xf3, 0x2e, 0x9d, 0x10, 0xf0, 0x39, 0xb4, 0x07, 0xd0, 0xd4, 0x4e, 0x7e, 0x67, 0x0a, 0xbd, 0x88, 0x4a, 0xee, 0xe0, 0xfb, 0x75, 0x7a, 0xe9, 0x4e, 0xaa, 0x97, 0x37, 0x3d }, - { 0xd4, 0x82, 0xb2, 0x15, 0x5d, 0x4d, 0xec, 0x6b, 0x47, 0x36, 0xa1, 0xf1, 0x61, 0x7b, 0x53, 0xaa, 0xa3, 0x73, 0x10, 0x27, 0x7d, 0x3f, 0xef, 0x0c, 0x37, 0xad, 0x41, 0x76, 0x8f, 0xc2, 0x35, 0xb4 }, - { 0x4d, 0x41, 0x39, 0x71, 0x38, 0x7e, 0x7a, 0x88, 0x98, 0xa8, 0xdc, 0x2a, 0x27, 0x50, 0x07, 0x78, 0x53, 0x9e, 0xa2, 0x14, 0xa2, 0xdf, 0xe9, 0xb3, 0xd7, 0xe8, 0xeb, 0xdc, 0xe5, 0xcf, 0x3d, 0xb3 }, - { 0x69, 0x6e, 0x5d, 0x46, 0xe6, 0xc5, 0x7e, 0x87, 0x96, 0xe4, 0x73, 0x5d, 0x08, 0x91, 0x6e, 0x0b, 0x79, 0x29, 0xb3, 0xcf, 0x29, 0x8c, 0x29, 0x6d, 0x22, 0xe9, 0xd3, 0x01, 0x96, 0x53, 0x37, 0x1c }, - { 0x1f, 0x56, 0x47, 0xc1, 0xd3, 0xb0, 0x88, 0x22, 0x88, 0x85, 0x86, 0x5c, 0x89, 0x40, 0x90, 0x8b, 0xf4, 0x0d, 0x1a, 0x82, 0x72, 0x82, 0x19, 0x73, 0xb1, 0x60, 0x00, 0x8e, 0x7a, 0x3c, 0xe2, 0xeb }, - { 0xb6, 0xe7, 0x6c, 0x33, 0x0f, 0x02, 0x1a, 0x5b, 0xda, 0x65, 0x87, 0x50, 0x10, 0xb0, 0xed, 0xf0, 0x91, 0x26, 0xc0, 0xf5, 0x10, 0xea, 0x84, 0x90, 0x48, 0x19, 0x20, 0x03, 0xae, 0xf4, 0xc6, 0x1c }, - { 0x3c, 0xd9, 0x52, 0xa0, 0xbe, 0xad, 0xa4, 0x1a, 0xbb, 0x42, 0x4c, 0xe4, 0x7f, 0x94, 0xb4, 0x2b, 0xe6, 0x4e, 0x1f, 0xfb, 0x0f, 0xd0, 0x78, 0x22, 0x76, 0x80, 0x79, 0x46, 0xd0, 0xd0, 0xbc, 0x55 }, - { 0x98, 0xd9, 0x26, 0x77, 0x43, 0x9b, 0x41, 0xb7, 0xbb, 0x51, 0x33, 0x12, 0xaf, 0xb9, 0x2b, 0xcc, 0x8e, 0xe9, 0x68, 0xb2, 0xe3, 0xb2, 0x38, 0xce, 0xcb, 0x9b, 0x0f, 0x34, 0xc9, 0xbb, 0x63, 0xd0 }, - { 0xec, 0xbc, 0xa2, 0xcf, 0x08, 0xae, 0x57, 0xd5, 0x17, 0xad, 0x16, 0x15, 0x8a, 0x32, 0xbf, 0xa7, 0xdc, 0x03, 0x82, 0xea, 0xed, 0xa1, 0x28, 0xe9, 0x18, 0x86, 0x73, 0x4c, 0x24, 0xa0, 0xb2, 0x9d }, - { 0x94, 0x2c, 0xc7, 0xc0, 0xb5, 0x2e, 0x2b, 0x16, 0xa4, 0xb8, 0x9f, 0xa4, 0xfc, 0x7e, 0x0b, 0xf6, 0x09, 0xe2, 0x9a, 0x08, 0xc1, 0xa8, 0x54, 0x34, 0x52, 0xb7, 0x7c, 0x7b, 0xfd, 0x11, 0xbb, 0x28 }, - { 0x8a, 0x06, 0x5d, 0x8b, 0x61, 0xa0, 0xdf, 0xfb, 0x17, 0x0d, 0x56, 0x27, 0x73, 0x5a, 0x76, 0xb0, 0xe9, 0x50, 0x60, 0x37, 0x80, 0x8c, 0xba, 0x16, 0xc3, 0x45, 0x00, 0x7c, 0x9f, 0x79, 0xcf, 0x8f }, - { 0x1b, 0x9f, 0xa1, 0x97, 0x14, 0x65, 0x9c, 0x78, 0xff, 0x41, 0x38, 0x71, 0x84, 0x92, 0x15, 0x36, 0x10, 0x29, 0xac, 0x80, 0x2b, 0x1c, 0xbc, 0xd5, 0x4e, 0x40, 0x8b, 0xd8, 0x72, 0x87, 0xf8, 0x1f }, - { 0x8d, 0xab, 0x07, 0x1b, 0xcd, 0x6c, 0x72, 0x92, 0xa9, 0xef, 0x72, 0x7b, 0x4a, 0xe0, 0xd8, 0x67, 0x13, 0x30, 0x1d, 0xa8, 0x61, 0x8d, 0x9a, 0x48, 0xad, 0xce, 0x55, 0xf3, 0x03, 0xa8, 0x69, 0xa1 }, - { 0x82, 0x53, 0xe3, 0xe7, 0xc7, 0xb6, 0x84, 0xb9, 0xcb, 0x2b, 0xeb, 0x01, 0x4c, 0xe3, 0x30, 0xff, 0x3d, 0x99, 0xd1, 0x7a, 0xbb, 0xdb, 0xab, 0xe4, 0xf4, 0xd6, 0x74, 0xde, 0xd5, 0x3f, 0xfc, 0x6b }, - { 0xf1, 0x95, 0xf3, 0x21, 0xe9, 0xe3, 0xd6, 0xbd, 0x7d, 0x07, 0x45, 0x04, 0xdd, 0x2a, 0xb0, 0xe6, 0x24, 0x1f, 0x92, 0xe7, 0x84, 0xb1, 0xaa, 0x27, 0x1f, 0xf6, 0x48, 0xb1, 0xca, 0xb6, 0xd7, 0xf6 }, - { 0x27, 0xe4, 0xcc, 0x72, 0x09, 0x0f, 0x24, 0x12, 0x66, 0x47, 0x6a, 0x7c, 0x09, 0x49, 0x5f, 0x2d, 0xb1, 0x53, 0xd5, 0xbc, 0xbd, 0x76, 0x19, 0x03, 0xef, 0x79, 0x27, 0x5e, 0xc5, 0x6b, 0x2e, 0xd8 }, - { 0x89, 0x9c, 0x24, 0x05, 0x78, 0x8e, 0x25, 0xb9, 0x9a, 0x18, 0x46, 0x35, 0x5e, 0x64, 0x6d, 0x77, 0xcf, 0x40, 0x00, 0x83, 0x41, 0x5f, 0x7d, 0xc5, 0xaf, 0xe6, 0x9d, 0x6e, 0x17, 0xc0, 0x00, 0x23 }, - { 0xa5, 0x9b, 0x78, 0xc4, 0x90, 0x57, 0x44, 0x07, 0x6b, 0xfe, 0xe8, 0x94, 0xde, 0x70, 0x7d, 0x4f, 0x12, 0x0b, 0x5c, 0x68, 0x93, 0xea, 0x04, 0x00, 0x29, 0x7d, 0x0b, 0xb8, 0x34, 0x72, 0x76, 0x32 }, - { 0x59, 0xdc, 0x78, 0xb1, 0x05, 0x64, 0x97, 0x07, 0xa2, 0xbb, 0x44, 0x19, 0xc4, 0x8f, 0x00, 0x54, 0x00, 0xd3, 0x97, 0x3d, 0xe3, 0x73, 0x66, 0x10, 0x23, 0x04, 0x35, 0xb1, 0x04, 0x24, 0xb2, 0x4f }, - { 0xc0, 0x14, 0x9d, 0x1d, 0x7e, 0x7a, 0x63, 0x53, 0xa6, 0xd9, 0x06, 0xef, 0xe7, 0x28, 0xf2, 0xf3, 0x29, 0xfe, 0x14, 0xa4, 0x14, 0x9a, 0x3e, 0xa7, 0x76, 0x09, 0xbc, 0x42, 0xb9, 0x75, 0xdd, 0xfa }, - { 0xa3, 0x2f, 0x24, 0x14, 0x74, 0xa6, 0xc1, 0x69, 0x32, 0xe9, 0x24, 0x3b, 0xe0, 0xcf, 0x09, 0xbc, 0xdc, 0x7e, 0x0c, 0xa0, 0xe7, 0xa6, 0xa1, 0xb9, 0xb1, 0xa0, 0xf0, 0x1e, 0x41, 0x50, 0x23, 0x77 }, - { 0xb2, 0x39, 0xb2, 0xe4, 0xf8, 0x18, 0x41, 0x36, 0x1c, 0x13, 0x39, 0xf6, 0x8e, 0x2c, 0x35, 0x9f, 0x92, 0x9a, 0xf9, 0xad, 0x9f, 0x34, 0xe0, 0x1a, 0xab, 0x46, 0x31, 0xad, 0x6d, 0x55, 0x00, 0xb0 }, - { 0x85, 0xfb, 0x41, 0x9c, 0x70, 0x02, 0xa3, 0xe0, 0xb4, 0xb6, 0xea, 0x09, 0x3b, 0x4c, 0x1a, 0xc6, 0x93, 0x66, 0x45, 0xb6, 0x5d, 0xac, 0x5a, 0xc1, 0x5a, 0x85, 0x28, 0xb7, 0xb9, 0x4c, 0x17, 0x54 }, - { 0x96, 0x19, 0x72, 0x06, 0x25, 0xf1, 0x90, 0xb9, 0x3a, 0x3f, 0xad, 0x18, 0x6a, 0xb3, 0x14, 0x18, 0x96, 0x33, 0xc0, 0xd3, 0xa0, 0x1e, 0x6f, 0x9b, 0xc8, 0xc4, 0xa8, 0xf8, 0x2f, 0x38, 0x3d, 0xbf }, - { 0x7d, 0x62, 0x0d, 0x90, 0xfe, 0x69, 0xfa, 0x46, 0x9a, 0x65, 0x38, 0x38, 0x89, 0x70, 0xa1, 0xaa, 0x09, 0xbb, 0x48, 0xa2, 0xd5, 0x9b, 0x34, 0x7b, 0x97, 0xe8, 0xce, 0x71, 0xf4, 0x8c, 0x7f, 0x46 }, - { 0x29, 0x43, 0x83, 0x56, 0x85, 0x96, 0xfb, 0x37, 0xc7, 0x5b, 0xba, 0xcd, 0x97, 0x9c, 0x5f, 0xf6, 0xf2, 0x0a, 0x55, 0x6b, 0xf8, 0x87, 0x9c, 0xc7, 0x29, 0x24, 0x85, 0x5d, 0xf9, 0xb8, 0x24, 0x0e }, - { 0x16, 0xb1, 0x8a, 0xb3, 0x14, 0x35, 0x9c, 0x2b, 0x83, 0x3c, 0x1c, 0x69, 0x86, 0xd4, 0x8c, 0x55, 0xa9, 0xfc, 0x97, 0xcd, 0xe9, 0xa3, 0xc1, 0xf1, 0x0a, 0x31, 0x77, 0x14, 0x0f, 0x73, 0xf7, 0x38 }, - { 0x8c, 0xbb, 0xdd, 0x14, 0xbc, 0x33, 0xf0, 0x4c, 0xf4, 0x58, 0x13, 0xe4, 0xa1, 0x53, 0xa2, 0x73, 0xd3, 0x6a, 0xda, 0xd5, 0xce, 0x71, 0xf4, 0x99, 0xee, 0xb8, 0x7f, 0xb8, 0xac, 0x63, 0xb7, 0x29 }, - { 0x69, 0xc9, 0xa4, 0x98, 0xdb, 0x17, 0x4e, 0xca, 0xef, 0xcc, 0x5a, 0x3a, 0xc9, 0xfd, 0xed, 0xf0, 0xf8, 0x13, 0xa5, 0xbe, 0xc7, 0x27, 0xf1, 0xe7, 0x75, 0xba, 0xbd, 0xec, 0x77, 0x18, 0x81, 0x6e }, - { 0xb4, 0x62, 0xc3, 0xbe, 0x40, 0x44, 0x8f, 0x1d, 0x4f, 0x80, 0x62, 0x62, 0x54, 0xe5, 0x35, 0xb0, 0x8b, 0xc9, 0xcd, 0xcf, 0xf5, 0x99, 0xa7, 0x68, 0x57, 0x8d, 0x4b, 0x28, 0x81, 0xa8, 0xe3, 0xf0 }, - { 0x55, 0x3e, 0x9d, 0x9c, 0x5f, 0x36, 0x0a, 0xc0, 0xb7, 0x4a, 0x7d, 0x44, 0xe5, 0xa3, 0x91, 0xda, 0xd4, 0xce, 0xd0, 0x3e, 0x0c, 0x24, 0x18, 0x3b, 0x7e, 0x8e, 0xca, 0xbd, 0xf1, 0x71, 0x5a, 0x64 }, - { 0x7a, 0x7c, 0x55, 0xa5, 0x6f, 0xa9, 0xae, 0x51, 0xe6, 0x55, 0xe0, 0x19, 0x75, 0xd8, 0xa6, 0xff, 0x4a, 0xe9, 0xe4, 0xb4, 0x86, 0xfc, 0xbe, 0x4e, 0xac, 0x04, 0x45, 0x88, 0xf2, 0x45, 0xeb, 0xea }, - { 0x2a, 0xfd, 0xf3, 0xc8, 0x2a, 0xbc, 0x48, 0x67, 0xf5, 0xde, 0x11, 0x12, 0x86, 0xc2, 0xb3, 0xbe, 0x7d, 0x6e, 0x48, 0x65, 0x7b, 0xa9, 0x23, 0xcf, 0xbf, 0x10, 0x1a, 0x6d, 0xfc, 0xf9, 0xdb, 0x9a }, - { 0x41, 0x03, 0x7d, 0x2e, 0xdc, 0xdc, 0xe0, 0xc4, 0x9b, 0x7f, 0xb4, 0xa6, 0xaa, 0x09, 0x99, 0xca, 0x66, 0x97, 0x6c, 0x74, 0x83, 0xaf, 0xe6, 0x31, 0xd4, 0xed, 0xa2, 0x83, 0x14, 0x4f, 0x6d, 0xfc }, - { 0xc4, 0x46, 0x6f, 0x84, 0x97, 0xca, 0x2e, 0xeb, 0x45, 0x83, 0xa0, 0xb0, 0x8e, 0x9d, 0x9a, 0xc7, 0x43, 0x95, 0x70, 0x9f, 0xda, 0x10, 0x9d, 0x24, 0xf2, 0xe4, 0x46, 0x21, 0x96, 0x77, 0x9c, 0x5d }, - { 0x75, 0xf6, 0x09, 0x33, 0x8a, 0xa6, 0x7d, 0x96, 0x9a, 0x2a, 0xe2, 0xa2, 0x36, 0x2b, 0x2d, 0xa9, 0xd7, 0x7c, 0x69, 0x5d, 0xfd, 0x1d, 0xf7, 0x22, 0x4a, 0x69, 0x01, 0xdb, 0x93, 0x2c, 0x33, 0x64 }, - { 0x68, 0x60, 0x6c, 0xeb, 0x98, 0x9d, 0x54, 0x88, 0xfc, 0x7c, 0xf6, 0x49, 0xf3, 0xd7, 0xc2, 0x72, 0xef, 0x05, 0x5d, 0xa1, 0xa9, 0x3f, 0xae, 0xcd, 0x55, 0xfe, 0x06, 0xf6, 0x96, 0x70, 0x98, 0xca }, - { 0x44, 0x34, 0x6b, 0xde, 0xb7, 0xe0, 0x52, 0xf6, 0x25, 0x50, 0x48, 0xf0, 0xd9, 0xb4, 0x2c, 0x42, 0x5b, 0xab, 0x9c, 0x3d, 0xd2, 0x41, 0x68, 0x21, 0x2c, 0x3e, 0xcf, 0x1e, 0xbf, 0x34, 0xe6, 0xae }, - { 0x8e, 0x9c, 0xf6, 0xe1, 0xf3, 0x66, 0x47, 0x1f, 0x2a, 0xc7, 0xd2, 0xee, 0x9b, 0x5e, 0x62, 0x66, 0xfd, 0xa7, 0x1f, 0x8f, 0x2e, 0x41, 0x09, 0xf2, 0x23, 0x7e, 0xd5, 0xf8, 0x81, 0x3f, 0xc7, 0x18 }, - { 0x84, 0xbb, 0xeb, 0x84, 0x06, 0xd2, 0x50, 0x95, 0x1f, 0x8c, 0x1b, 0x3e, 0x86, 0xa7, 0xc0, 0x10, 0x08, 0x29, 0x21, 0x83, 0x3d, 0xfd, 0x95, 0x55, 0xa2, 0xf9, 0x09, 0xb1, 0x08, 0x6e, 0xb4, 0xb8 }, - { 0xee, 0x66, 0x6f, 0x3e, 0xef, 0x0f, 0x7e, 0x2a, 0x9c, 0x22, 0x29, 0x58, 0xc9, 0x7e, 0xaf, 0x35, 0xf5, 0x1c, 0xed, 0x39, 0x3d, 0x71, 0x44, 0x85, 0xab, 0x09, 0xa0, 0x69, 0x34, 0x0f, 0xdf, 0x88 }, - { 0xc1, 0x53, 0xd3, 0x4a, 0x65, 0xc4, 0x7b, 0x4a, 0x62, 0xc5, 0xca, 0xcf, 0x24, 0x01, 0x09, 0x75, 0xd0, 0x35, 0x6b, 0x2f, 0x32, 0xc8, 0xf5, 0xda, 0x53, 0x0d, 0x33, 0x88, 0x16, 0xad, 0x5d, 0xe6 }, - { 0x9f, 0xc5, 0x45, 0x01, 0x09, 0xe1, 0xb7, 0x79, 0xf6, 0xc7, 0xae, 0x79, 0xd5, 0x6c, 0x27, 0x63, 0x5c, 0x8d, 0xd4, 0x26, 0xc5, 0xa9, 0xd5, 0x4e, 0x25, 0x78, 0xdb, 0x98, 0x9b, 0x8c, 0x3b, 0x4e }, - { 0xd1, 0x2b, 0xf3, 0x73, 0x2e, 0xf4, 0xaf, 0x5c, 0x22, 0xfa, 0x90, 0x35, 0x6a, 0xf8, 0xfc, 0x50, 0xfc, 0xb4, 0x0f, 0x8f, 0x2e, 0xa5, 0xc8, 0x59, 0x47, 0x37, 0xa3, 0xb3, 0xd5, 0xab, 0xdb, 0xd7 }, - { 0x11, 0x03, 0x0b, 0x92, 0x89, 0xbb, 0xa5, 0xaf, 0x65, 0x26, 0x06, 0x72, 0xab, 0x6f, 0xee, 0x88, 0xb8, 0x74, 0x20, 0xac, 0xef, 0x4a, 0x17, 0x89, 0xa2, 0x07, 0x3b, 0x7e, 0xc2, 0xf2, 0xa0, 0x9e }, - { 0x69, 0xcb, 0x19, 0x2b, 0x84, 0x44, 0x00, 0x5c, 0x8c, 0x0c, 0xeb, 0x12, 0xc8, 0x46, 0x86, 0x07, 0x68, 0x18, 0x8c, 0xda, 0x0a, 0xec, 0x27, 0xa9, 0xc8, 0xa5, 0x5c, 0xde, 0xe2, 0x12, 0x36, 0x32 }, - { 0xdb, 0x44, 0x4c, 0x15, 0x59, 0x7b, 0x5f, 0x1a, 0x03, 0xd1, 0xf9, 0xed, 0xd1, 0x6e, 0x4a, 0x9f, 0x43, 0xa6, 0x67, 0xcc, 0x27, 0x51, 0x75, 0xdf, 0xa2, 0xb7, 0x04, 0xe3, 0xbb, 0x1a, 0x9b, 0x83 }, - { 0x3f, 0xb7, 0x35, 0x06, 0x1a, 0xbc, 0x51, 0x9d, 0xfe, 0x97, 0x9e, 0x54, 0xc1, 0xee, 0x5b, 0xfa, 0xd0, 0xa9, 0xd8, 0x58, 0xb3, 0x31, 0x5b, 0xad, 0x34, 0xbd, 0xe9, 0x99, 0xef, 0xd7, 0x24, 0xdd }, - }; - unsigned char inp[1000], out[1000]; - unsigned char key[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }; - unsigned long ilen, klen = sizeof(key), mlen = 32; - blake2smac_state st; - - for (ilen = 0; ilen < 256; ilen++) inp[ilen] = (unsigned char)ilen; - - for (ilen = 0; ilen < 256; ilen++) { - const unsigned char *mac = tests[ilen]; - unsigned long olen = mlen; - /* process piece by piece */ - if (ilen > 15) { - blake2smac_init(&st, olen, key, klen); - blake2smac_process(&st, (unsigned char*)inp, 5); - blake2smac_process(&st, (unsigned char*)inp + 5, 4); - blake2smac_process(&st, (unsigned char*)inp + 9, 3); - blake2smac_process(&st, (unsigned char*)inp + 12, 2); - blake2smac_process(&st, (unsigned char*)inp + 14, 1); - blake2smac_process(&st, (unsigned char*)inp + 15, ilen - 15); - blake2smac_done(&st, out, &olen); - if (ltc_compare_testvector(out, olen, mac, mlen, "BLAKE2S MAC multi", ilen) != 0) return CRYPT_FAIL_TESTVECTOR; - } - /* process in one go */ - blake2smac_init(&st, olen, key, klen); - blake2smac_process(&st, (unsigned char*)inp, ilen); - blake2smac_done(&st, out, &olen); - if (ltc_compare_testvector(out, olen, mac, mlen, "BLAKE2S MAC single", ilen) != 0) return CRYPT_FAIL_TESTVECTOR; - } - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/mac/f9/f9_done.c b/src/mac/f9/f9_done.c deleted file mode 100644 index 596a33ba..00000000 --- a/src/mac/f9/f9_done.c +++ /dev/null @@ -1,65 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file f9_done.c - f9 Support, terminate the state -*/ - -#ifdef LTC_F9_MODE - -/** Terminate the f9-MAC state - @param f9 f9 state to terminate - @param out [out] Destination for the MAC tag - @param outlen [in/out] Destination size and final tag size - Return CRYPT_OK on success -*/ -int f9_done(f9_state *f9, unsigned char *out, unsigned long *outlen) -{ - int err, x; - LTC_ARGCHK(f9 != NULL); - LTC_ARGCHK(out != NULL); - - /* check structure */ - if ((err = cipher_is_valid(f9->cipher)) != CRYPT_OK) { - return err; - } - - if ((f9->blocksize > cipher_descriptor[f9->cipher].block_length) || (f9->blocksize < 0) || - (f9->buflen > f9->blocksize) || (f9->buflen < 0)) { - return CRYPT_INVALID_ARG; - } - - if (f9->buflen != 0) { - /* encrypt */ - ecb_encrypt_block(f9->IV, f9->IV, &f9->key); - f9->buflen = 0; - for (x = 0; x < f9->blocksize; x++) { - f9->ACC[x] ^= f9->IV[x]; - } - } - - /* schedule modified key */ - if ((err = ecb_start(f9->cipher, f9->akey, f9->keylen, 0, &f9->key)) != CRYPT_OK) { - return err; - } - - /* encrypt the ACC */ - ecb_encrypt_block(f9->ACC, f9->ACC, &f9->key); - ecb_done(&f9->key); - - /* extract tag */ - for (x = 0; x < f9->blocksize && (unsigned long)x < *outlen; x++) { - out[x] = f9->ACC[x]; - } - *outlen = x; - -#ifdef LTC_CLEAN_STACK - zeromem(f9, sizeof(*f9)); -#endif - return CRYPT_OK; -} - -#endif - diff --git a/src/mac/f9/f9_file.c b/src/mac/f9/f9_file.c deleted file mode 100644 index c06f5480..00000000 --- a/src/mac/f9/f9_file.c +++ /dev/null @@ -1,87 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file f9_file.c - f9 support, process a file, Tom St Denis -*/ - -#ifdef LTC_F9_MODE - -/** - f9 a file - @param cipher The index of the cipher desired - @param key The secret key - @param keylen The length of the secret key (octets) - @param fname The name of the file you wish to f9 - @param out [out] Where the authentication tag is to be stored - @param outlen [in/out] The max size and resulting size of the authentication tag - @return CRYPT_OK if successful, CRYPT_NOP if file support has been disabled -*/ -int f9_file(int cipher, - const unsigned char *key, unsigned long keylen, - const char *fname, - unsigned char *out, unsigned long *outlen) -{ -#ifdef LTC_NO_FILE - LTC_UNUSED_PARAM(cipher); - LTC_UNUSED_PARAM(key); - LTC_UNUSED_PARAM(keylen); - LTC_UNUSED_PARAM(fname); - LTC_UNUSED_PARAM(out); - LTC_UNUSED_PARAM(outlen); - return CRYPT_NOP; -#else - size_t x; - int err; - f9_state f9; - FILE *in; - unsigned char *buf; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(fname != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((buf = XMALLOC(LTC_FILE_READ_BUFSIZE)) == NULL) { - return CRYPT_MEM; - } - - if ((err = f9_init(&f9, cipher, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - - in = fopen(fname, "rb"); - if (in == NULL) { - err = CRYPT_FILE_NOTFOUND; - goto LBL_ERR; - } - - do { - x = fread(buf, 1, LTC_FILE_READ_BUFSIZE, in); - if ((err = f9_process(&f9, buf, (unsigned long)x)) != CRYPT_OK) { - fclose(in); - goto LBL_CLEANBUF; - } - } while (x == LTC_FILE_READ_BUFSIZE); - - if (fclose(in) != 0) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; - } - - err = f9_done(&f9, out, outlen); - -LBL_CLEANBUF: - zeromem(buf, LTC_FILE_READ_BUFSIZE); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&f9, sizeof(f9_state)); -#endif - XFREE(buf); - return err; -#endif -} - -#endif diff --git a/src/mac/f9/f9_init.c b/src/mac/f9/f9_init.c deleted file mode 100644 index e619cbf5..00000000 --- a/src/mac/f9/f9_init.c +++ /dev/null @@ -1,58 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file f9_init.c - F9 Support, start an F9 state -*/ - -#ifdef LTC_F9_MODE - -/** Initialize F9-MAC state - @param f9 [out] f9 state to initialize - @param cipher Index of cipher to use - @param key [in] Secret key - @param keylen Length of secret key in octets - Return CRYPT_OK on success -*/ -int f9_init(f9_state *f9, int cipher, const unsigned char *key, unsigned long keylen) -{ - int x, err; - - LTC_ARGCHK(f9 != NULL); - LTC_ARGCHK(key != NULL); - - /* schedule the key */ - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - -#ifdef LTC_FAST - if (cipher_descriptor[cipher].block_length % sizeof(LTC_FAST_TYPE)) { - return CRYPT_INVALID_ARG; - } -#endif - - if ((err = ecb_start(cipher, key, keylen, 0, &f9->key)) != CRYPT_OK) { - goto done; - } - - /* make the second key */ - for (x = 0; (unsigned)x < keylen; x++) { - f9->akey[x] = key[x] ^ 0xAA; - } - - /* setup struct */ - zeromem(f9->IV, cipher_descriptor[cipher].block_length); - zeromem(f9->ACC, cipher_descriptor[cipher].block_length); - f9->blocksize = cipher_descriptor[cipher].block_length; - f9->cipher = cipher; - f9->buflen = 0; - f9->keylen = keylen; -done: - return err; -} - -#endif - diff --git a/src/mac/f9/f9_memory.c b/src/mac/f9/f9_memory.c deleted file mode 100644 index 5f05209a..00000000 --- a/src/mac/f9/f9_memory.c +++ /dev/null @@ -1,59 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file f9_process.c - f9 Support, Process a block through F9-MAC -*/ - -#ifdef LTC_F9_MODE - -/** f9-MAC a block of memory - @param cipher Index of cipher to use - @param key [in] Secret key - @param keylen Length of key in octets - @param in [in] Message to MAC - @param inlen Length of input in octets - @param out [out] Destination for the MAC tag - @param outlen [in/out] Output size and final tag size - Return CRYPT_OK on success. -*/ -int f9_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - f9_state *f9; - int err; - - /* is the cipher valid? */ - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - - /* Use accelerator if found */ - if (cipher_descriptor[cipher].f9_memory != NULL) { - return cipher_descriptor[cipher].f9_memory(key, keylen, in, inlen, out, outlen); - } - - f9 = XCALLOC(1, sizeof(*f9)); - if (f9 == NULL) { - return CRYPT_MEM; - } - - if ((err = f9_init(f9, cipher, key, keylen)) != CRYPT_OK) { - goto done; - } - - if ((err = f9_process(f9, in, inlen)) != CRYPT_OK) { - goto done; - } - - err = f9_done(f9, out, outlen); -done: - XFREE(f9); - return err; -} - -#endif diff --git a/src/mac/f9/f9_memory_multi.c b/src/mac/f9/f9_memory_multi.c deleted file mode 100644 index 0357cd8d..00000000 --- a/src/mac/f9/f9_memory_multi.c +++ /dev/null @@ -1,77 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file f9_memory_multi.c - f9 support, process multiple blocks of memory, Tom St Denis -*/ - -#ifdef LTC_F9_MODE - -/** - f9 multiple blocks of memory - @param cipher The index of the desired cipher - @param key The secret key - @param keylen The length of the secret key (octets) - @param out [out] The destination of the authentication tag - @param outlen [in/out] The max size and resulting size of the authentication tag (octets) - @param in The data to send through f9 - @param inlen The length of the data to send through f9 (octets) - @param ... tuples of (data,len) pairs to f9, terminated with a (NULL,x) (x=don't care) - @return CRYPT_OK if successful -*/ -int f9_memory_multi(int cipher, - const unsigned char *key, unsigned long keylen, - unsigned char *out, unsigned long *outlen, - const unsigned char *in, unsigned long inlen, ...) -{ - int err; - f9_state *f9; - va_list args; - const unsigned char *curptr; - unsigned long curlen; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* allocate ram for f9 state */ - f9 = XMALLOC(sizeof(f9_state)); - if (f9 == NULL) { - return CRYPT_MEM; - } - - /* f9 process the message */ - if ((err = f9_init(f9, cipher, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - va_start(args, inlen); - curptr = in; - curlen = inlen; - for (;;) { - /* process buf */ - if ((err = f9_process(f9, curptr, curlen)) != CRYPT_OK) { - goto LBL_ERR; - } - /* step to next */ - curptr = va_arg(args, const unsigned char*); - if (curptr == NULL) { - break; - } - curlen = va_arg(args, unsigned long); - } - if ((err = f9_done(f9, out, outlen)) != CRYPT_OK) { - goto LBL_ERR; - } -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(f9, sizeof(f9_state)); -#endif - XFREE(f9); - va_end(args); - return err; -} - -#endif diff --git a/src/mac/f9/f9_process.c b/src/mac/f9/f9_process.c deleted file mode 100644 index cd29d30c..00000000 --- a/src/mac/f9/f9_process.c +++ /dev/null @@ -1,66 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file f9_process.c - f9 Support, process blocks with f9 -*/ - -#ifdef LTC_F9_MODE - -/** Process data through f9-MAC - @param f9 The f9-MAC state - @param in Input data to process - @param inlen Length of input in octets - Return CRYPT_OK on success -*/ -int f9_process(f9_state *f9, const unsigned char *in, unsigned long inlen) -{ - int err, x; - - LTC_ARGCHK(f9 != NULL); - LTC_ARGCHK(in != NULL); - - /* check structure */ - if ((err = cipher_is_valid(f9->cipher)) != CRYPT_OK) { - return err; - } - - if ((f9->blocksize > cipher_descriptor[f9->cipher].block_length) || (f9->blocksize < 0) || - (f9->buflen > f9->blocksize) || (f9->buflen < 0)) { - return CRYPT_INVALID_ARG; - } - -#ifdef LTC_FAST - if (f9->buflen == 0) { - while (inlen >= (unsigned long)f9->blocksize) { - for (x = 0; x < f9->blocksize; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2(&(f9->IV[x]), &(in[x])); - } - ecb_encrypt_block(f9->IV, f9->IV, &f9->key); - for (x = 0; x < f9->blocksize; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2(&(f9->ACC[x]), &(f9->IV[x])); - } - in += f9->blocksize; - inlen -= f9->blocksize; - } - } -#endif - - while (inlen) { - if (f9->buflen == f9->blocksize) { - ecb_encrypt_block(f9->IV, f9->IV, &f9->key); - for (x = 0; x < f9->blocksize; x++) { - f9->ACC[x] ^= f9->IV[x]; - } - f9->buflen = 0; - } - f9->IV[f9->buflen++] ^= *in++; - --inlen; - } - return CRYPT_OK; -} - -#endif - diff --git a/src/mac/f9/f9_test.c b/src/mac/f9/f9_test.c deleted file mode 100644 index d811757a..00000000 --- a/src/mac/f9/f9_test.c +++ /dev/null @@ -1,66 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file f9_test.c - f9 Support, Test F9 mode -*/ - -#ifdef LTC_F9_MODE - -/** Test f9-MAC mode - Return CRYPT_OK on success -*/ -int f9_test(void) -{ -#ifdef LTC_NO_TEST - return CRYPT_NOP; -#else - static const struct { - int msglen; - unsigned char K[16], M[128], T[4]; - } tests[] = { -{ - 20, - { 0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00, 0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48 }, - { 0x38, 0xA6, 0xF0, 0x56, 0xB8, 0xAE, 0xFD, 0xA9, 0x33, 0x32, 0x34, 0x62, 0x63, 0x39, 0x38, 0x61, 0x37, 0x34, 0x79, 0x40 }, - { 0x46, 0xE0, 0x0D, 0x4B } -}, - -{ - 105, - { 0x83, 0xFD, 0x23, 0xA2, 0x44, 0xA7, 0x4C, 0xF3, 0x58, 0xDA, 0x30, 0x19, 0xF1, 0x72, 0x26, 0x35 }, - { 0x36, 0xAF, 0x61, 0x44, 0x4F, 0x30, 0x2A, 0xD2, - 0x35, 0xC6, 0x87, 0x16, 0x63, 0x3C, 0x66, 0xFB, 0x75, 0x0C, 0x26, 0x68, 0x65, 0xD5, 0x3C, 0x11, 0xEA, 0x05, 0xB1, 0xE9, 0xFA, 0x49, 0xC8, 0x39, 0x8D, 0x48, 0xE1, 0xEF, 0xA5, 0x90, 0x9D, 0x39, - 0x47, 0x90, 0x28, 0x37, 0xF5, 0xAE, 0x96, 0xD5, 0xA0, 0x5B, 0xC8, 0xD6, 0x1C, 0xA8, 0xDB, 0xEF, 0x1B, 0x13, 0xA4, 0xB4, 0xAB, 0xFE, 0x4F, 0xB1, 0x00, 0x60, 0x45, 0xB6, 0x74, 0xBB, 0x54, 0x72, - 0x93, 0x04, 0xC3, 0x82, 0xBE, 0x53, 0xA5, 0xAF, 0x05, 0x55, 0x61, 0x76, 0xF6, 0xEA, 0xA2, 0xEF, 0x1D, 0x05, 0xE4, 0xB0, 0x83, 0x18, 0x1E, 0xE6, 0x74, 0xCD, 0xA5, 0xA4, 0x85, 0xF7, 0x4D, 0x7A, - 0x40|0x80 }, - { 0x95, 0xAE, 0x41, 0xBA }, -} -}; - unsigned char T[16]; - unsigned long taglen; - int err, x, idx; - - /* find kasumi */ - if ((idx = find_cipher("kasumi")) == -1) { - return CRYPT_NOP; - } - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { - taglen = 4; - if ((err = f9_memory(idx, tests[x].K, 16, tests[x].M, tests[x].msglen, T, &taglen)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(T, taglen, tests[x].T, 4, "F9", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - - return CRYPT_OK; -#endif -} - -#endif - diff --git a/src/mac/hmac/hmac_done.c b/src/mac/hmac/hmac_done.c deleted file mode 100644 index a3d3c382..00000000 --- a/src/mac/hmac/hmac_done.c +++ /dev/null @@ -1,96 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file hmac_done.c - HMAC support, terminate stream, Tom St Denis/Dobes Vandermeer -*/ - -#ifdef LTC_HMAC - -#define LTC_HMAC_BLOCKSIZE hash_descriptor[hash].blocksize - -/** - Terminate an HMAC session - @param hmac The HMAC state - @param out [out] The destination of the HMAC authentication tag - @param outlen [in/out] The max size and resulting size of the HMAC authentication tag - @return CRYPT_OK if successful -*/ -int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen) -{ - unsigned char *buf, *isha; - unsigned long hashsize, i; - int hash, err; - - LTC_ARGCHK(hmac != NULL); - LTC_ARGCHK(out != NULL); - - /* test hash */ - hash = hmac->hash; - if((err = hash_is_valid(hash)) != CRYPT_OK) { - return err; - } - - /* get the hash message digest size */ - hashsize = hash_descriptor[hash].hashsize; - - /* allocate buffers */ - buf = XMALLOC(LTC_HMAC_BLOCKSIZE); - isha = XMALLOC(hashsize); - if (buf == NULL || isha == NULL) { - if (buf != NULL) { - XFREE(buf); - } - if (isha != NULL) { - XFREE(isha); - } - return CRYPT_MEM; - } - - /* Get the hash of the first HMAC vector plus the data */ - if ((err = hash_descriptor[hash].done(&hmac->md, isha)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* Create the second HMAC vector vector for step (3) */ - for(i=0; i < LTC_HMAC_BLOCKSIZE; i++) { - buf[i] = hmac->key[i] ^ 0x5C; - } - - /* Now calculate the "outer" hash for step (5), (6), and (7) */ - if ((err = hash_descriptor[hash].init(&hmac->md)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[hash].process(&hmac->md, buf, LTC_HMAC_BLOCKSIZE)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[hash].process(&hmac->md, isha, hashsize)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[hash].done(&hmac->md, buf)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* copy to output */ - for (i = 0; i < hashsize && i < *outlen; i++) { - out[i] = buf[i]; - } - *outlen = i; - - err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(isha, hashsize); - zeromem(buf, hashsize); - zeromem(hmac, sizeof(*hmac)); -#endif - - XFREE(isha); - XFREE(buf); - - return err; -} - -#endif diff --git a/src/mac/hmac/hmac_file.c b/src/mac/hmac/hmac_file.c deleted file mode 100644 index d0d1ce00..00000000 --- a/src/mac/hmac/hmac_file.c +++ /dev/null @@ -1,90 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file hmac_file.c - HMAC support, process a file, Tom St Denis/Dobes Vandermeer -*/ - -#ifdef LTC_HMAC - -/** - HMAC a file - @param hash The index of the hash you wish to use - @param fname The name of the file you wish to HMAC - @param key The secret key - @param keylen The length of the secret key - @param out [out] The HMAC authentication tag - @param outlen [in/out] The max size and resulting size of the authentication tag - @return CRYPT_OK if successful, CRYPT_NOP if file support has been disabled -*/ -int hmac_file(int hash, const char *fname, - const unsigned char *key, unsigned long keylen, - unsigned char *out, unsigned long *outlen) -{ -#ifdef LTC_NO_FILE - LTC_UNUSED_PARAM(hash); - LTC_UNUSED_PARAM(fname); - LTC_UNUSED_PARAM(key); - LTC_UNUSED_PARAM(keylen); - LTC_UNUSED_PARAM(out); - LTC_UNUSED_PARAM(outlen); - return CRYPT_NOP; -#else - hmac_state hmac; - FILE *in; - unsigned char *buf; - size_t x; - int err; - - LTC_ARGCHK(fname != NULL); - LTC_ARGCHK(key != NULL || keylen == 0); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((buf = XMALLOC(LTC_FILE_READ_BUFSIZE)) == NULL) { - return CRYPT_MEM; - } - - if ((err = hash_is_valid(hash)) != CRYPT_OK) { - goto LBL_ERR; - } - - if ((err = hmac_init(&hmac, hash, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - - in = fopen(fname, "rb"); - if (in == NULL) { - err = CRYPT_FILE_NOTFOUND; - goto LBL_ERR; - } - - do { - x = fread(buf, 1, LTC_FILE_READ_BUFSIZE, in); - if ((err = hmac_process(&hmac, buf, (unsigned long)x)) != CRYPT_OK) { - fclose(in); /* we don't trap this error since we're already returning an error! */ - goto LBL_CLEANBUF; - } - } while (x == LTC_FILE_READ_BUFSIZE); - - if (fclose(in) != 0) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; - } - - err = hmac_done(&hmac, out, outlen); - -LBL_CLEANBUF: - zeromem(buf, LTC_FILE_READ_BUFSIZE); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&hmac, sizeof(hmac_state)); -#endif - XFREE(buf); - return err; -#endif -} - -#endif diff --git a/src/mac/hmac/hmac_init.c b/src/mac/hmac/hmac_init.c deleted file mode 100644 index a4c40eb2..00000000 --- a/src/mac/hmac/hmac_init.c +++ /dev/null @@ -1,89 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file hmac_init.c - HMAC support, initialize state, Tom St Denis/Dobes Vandermeer -*/ - -#ifdef LTC_HMAC - -#define LTC_HMAC_BLOCKSIZE hash_descriptor[hash].blocksize - -/** - Initialize an HMAC context. - @param hmac The HMAC state - @param hash The index of the hash you want to use - @param key The secret key - @param keylen The length of the secret key (octets) - @return CRYPT_OK if successful -*/ -int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned long keylen) -{ - unsigned char *buf; - unsigned long hashsize; - unsigned long i, z; - int err; - - LTC_ARGCHK(hmac != NULL); - LTC_ARGCHK(key != NULL || keylen == 0); - - /* valid hash? */ - if ((err = hash_is_valid(hash)) != CRYPT_OK) { - return err; - } - hmac->hash = hash; - hashsize = hash_descriptor[hash].hashsize; - - /* allocate ram for buf */ - buf = XMALLOC(LTC_HMAC_BLOCKSIZE); - if (buf == NULL) { - return CRYPT_MEM; - } - - /* check hash block fits */ - if (sizeof(hmac->key) < LTC_HMAC_BLOCKSIZE) { - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; - } - - /* (1) make sure we have a large enough key */ - if(keylen > LTC_HMAC_BLOCKSIZE) { - z = LTC_HMAC_BLOCKSIZE; - if ((err = hash_memory(hash, key, keylen, hmac->key, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - keylen = hashsize; - } else if (keylen != 0) { - XMEMCPY(hmac->key, key, (size_t)keylen); - } - - if(keylen < LTC_HMAC_BLOCKSIZE) { - zeromem((hmac->key) + keylen, (size_t)(LTC_HMAC_BLOCKSIZE - keylen)); - } - - /* Create the initialization vector for step (3) */ - for(i=0; i < LTC_HMAC_BLOCKSIZE; i++) { - buf[i] = hmac->key[i] ^ 0x36; - } - - /* Pre-pend that to the hash data */ - if ((err = hash_descriptor[hash].init(&hmac->md)) != CRYPT_OK) { - goto LBL_ERR; - } - - if ((err = hash_descriptor[hash].process(&hmac->md, buf, LTC_HMAC_BLOCKSIZE)) != CRYPT_OK) { - goto LBL_ERR; - } - -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(buf, LTC_HMAC_BLOCKSIZE); -#endif - - XFREE(buf); - return err; -} - -#endif diff --git a/src/mac/hmac/hmac_memory.c b/src/mac/hmac/hmac_memory.c deleted file mode 100644 index acbb86ab..00000000 --- a/src/mac/hmac/hmac_memory.c +++ /dev/null @@ -1,76 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file hmac_memory.c - HMAC support, process a block of memory, Tom St Denis/Dobes Vandermeer -*/ - -#ifdef LTC_HMAC - -/** - HMAC a block of memory to produce the authentication tag - @param hash The index of the hash to use - @param key The secret key - @param keylen The length of the secret key (octets) - @param in The data to HMAC - @param inlen The length of the data to HMAC (octets) - @param out [out] Destination of the authentication tag - @param outlen [in/out] Max size and resulting size of authentication tag - @return CRYPT_OK if successful -*/ -int hmac_memory(int hash, - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - hmac_state *hmac; - int err; - - LTC_ARGCHK(key != NULL || keylen == 0); - LTC_ARGCHK(in != NULL || inlen == 0); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* make sure hash descriptor is valid */ - if ((err = hash_is_valid(hash)) != CRYPT_OK) { - return err; - } - - /* is there a descriptor? */ - if (hash_descriptor[hash].hmac_block != NULL) { - return hash_descriptor[hash].hmac_block(key, keylen, in, inlen, out, outlen); - } - - /* nope, so call the hmac functions */ - /* allocate ram for hmac state */ - hmac = XMALLOC(sizeof(hmac_state)); - if (hmac == NULL) { - return CRYPT_MEM; - } - - if ((err = hmac_init(hmac, hash, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - - if ((err = hmac_process(hmac, in, inlen)) != CRYPT_OK) { - goto LBL_ERR; - } - - if ((err = hmac_done(hmac, out, outlen)) != CRYPT_OK) { - goto LBL_ERR; - } - - err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(hmac, sizeof(hmac_state)); -#endif - - XFREE(hmac); - return err; -} - -#endif - diff --git a/src/mac/hmac/hmac_memory_multi.c b/src/mac/hmac/hmac_memory_multi.c deleted file mode 100644 index 403bd6d7..00000000 --- a/src/mac/hmac/hmac_memory_multi.c +++ /dev/null @@ -1,80 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file hmac_memory_multi.c - HMAC support, process multiple blocks of memory, Tom St Denis/Dobes Vandermeer -*/ - -#ifdef LTC_HMAC - -/** - HMAC multiple blocks of memory to produce the authentication tag - @param hash The index of the hash to use - @param key The secret key - @param keylen The length of the secret key (octets) - @param out [out] Destination of the authentication tag - @param outlen [in/out] Max size and resulting size of authentication tag - @param in The data to HMAC - @param inlen The length of the data to HMAC (octets) - @param ... tuples of (data,len) pairs of type (unsigned char*,unsigned long) to HMAC, - terminated with a (NULL,x) (x=don't care) - @return CRYPT_OK if successful -*/ -int hmac_memory_multi(int hash, - const unsigned char *key, unsigned long keylen, - unsigned char *out, unsigned long *outlen, - const unsigned char *in, unsigned long inlen, ...) - -{ - hmac_state *hmac; - int err; - va_list args; - const unsigned char *curptr; - unsigned long curlen; - - LTC_ARGCHK(key != NULL || keylen == 0); - LTC_ARGCHK(in != NULL || inlen == 0); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* allocate ram for hmac state */ - hmac = XMALLOC(sizeof(hmac_state)); - if (hmac == NULL) { - return CRYPT_MEM; - } - - if ((err = hmac_init(hmac, hash, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - - va_start(args, inlen); - curptr = in; - curlen = inlen; - for (;;) { - /* process buf */ - if ((err = hmac_process(hmac, curptr, curlen)) != CRYPT_OK) { - goto LBL_ERR; - } - /* step to next */ - curptr = va_arg(args, const unsigned char*); - if (curptr == NULL) { - break; - } - curlen = va_arg(args, unsigned long); - } - if ((err = hmac_done(hmac, out, outlen)) != CRYPT_OK) { - goto LBL_ERR; - } -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(hmac, sizeof(hmac_state)); -#endif - XFREE(hmac); - va_end(args); - return err; -} - -#endif - diff --git a/src/mac/hmac/hmac_process.c b/src/mac/hmac/hmac_process.c deleted file mode 100644 index 86d731e4..00000000 --- a/src/mac/hmac/hmac_process.c +++ /dev/null @@ -1,32 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file hmac_process.c - HMAC support, process data, Tom St Denis/Dobes Vandermeer -*/ - -#ifdef LTC_HMAC - -/** - Process data through HMAC - @param hmac The hmac state - @param in The data to send through HMAC - @param inlen The length of the data to HMAC (octets) - @return CRYPT_OK if successful -*/ -int hmac_process(hmac_state *hmac, const unsigned char *in, unsigned long inlen) -{ - int err; - LTC_ARGCHK(hmac != NULL); - LTC_ARGCHK(in != NULL || inlen == 0); - if (inlen == 0) return CRYPT_OK; - if ((err = hash_is_valid(hmac->hash)) != CRYPT_OK) { - return err; - } - return hash_descriptor[hmac->hash].process(&hmac->md, in, inlen); -} - -#endif - diff --git a/src/mac/hmac/hmac_test.c b/src/mac/hmac/hmac_test.c deleted file mode 100644 index 75a48285..00000000 --- a/src/mac/hmac/hmac_test.c +++ /dev/null @@ -1,670 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file hmac_test.c - HMAC support, self-test, Tom St Denis/Dobes Vandermeer/Steffen Jaeckel -*/ - -#ifdef LTC_HMAC - -/* - TEST CASES SOURCE: - -Network Working Group P. Cheng -Request for Comments: 2202 IBM -Category: Informational R. Glenn - NIST - September 1997 - - Test Cases for HMAC-MD5 and HMAC-SHA-1 - -******************************************************************************* - -Network Working Group J. Kapp -Request for Comments: 2286 Reaper Technologies -Category: Informational February 1998 - - Test Cases for HMAC-RIPEMD160 and HMAC-RIPEMD128 - -******************************************************************************* - -Network Working Group M. Nystrom -Request for Comments: 4231 RSA Security -Category: Standards Track December 2005 - - Identifiers and Test Vectors for HMAC-SHA-224, HMAC-SHA-256, - HMAC-SHA-384, and HMAC-SHA-512 -*/ - -/** - HMAC self-test - @return CRYPT_OK if successful, CRYPT_NOP if tests have been disabled. -*/ -int hmac_test(void) -{ - #ifndef LTC_TEST - return CRYPT_NOP; - #else - unsigned char digest[MAXBLOCKSIZE]; - static const unsigned char empty_key_sha256_expected[32] = { - 0xfd, 0x7a, 0xdb, 0x15, 0x2c, 0x05, 0xef, 0x80, - 0xdc, 0xcf, 0x50, 0xa1, 0xfa, 0x4c, 0x05, 0xd5, - 0xa3, 0xec, 0x6d, 0xa9, 0x55, 0x75, 0xfc, 0x31, - 0x2a, 0xe7, 0xc5, 0xd0, 0x91, 0x83, 0x63, 0x51 - }; - static const unsigned char empty_key_msg[] = { 'a', 'b', 'c' }; - int i; - - static const unsigned char hmac_test_case_keys[][136] = { - { /* 1 */ - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b - }, -#ifdef LTC_TEST_EXT - { /* 2 */ - 0x4a, 0x65, 0x66, 0x65 - }, - { /* 4 */ - 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, - 0x15, 0x16, 0x17, 0x18, 0x19 - }, - { /* 5 */ - 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, - 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, - 0x0c, 0x0c, 0x0c, 0x0c - }, - { /* 3, 6, 7 */ - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa - } -#endif /* LTC_TEST_EXT */ - }; - - - static const unsigned char hmac_test_case_data[][153] = { - { - "Hi There" - }, -#ifdef LTC_TEST_EXT - { - "what do ya want for nothing?" - }, - { - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd - }, - { - 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd - }, - { - "Test With Truncation" - }, - { - "Test Using Larger Than Block-Size Key - Hash Key First" - }, - { - "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data" - }, - { - "This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm." - } -#endif /* LTC_TEST_EXT */ - }; - - static const struct hmac_test_case { - const char *num; - const char *algo; - const unsigned char *key; - unsigned long keylen; - const unsigned char *data; - unsigned long datalen; - unsigned char digest[MAXBLOCKSIZE]; - } cases[] = { - /* - RFC 2202 3. Test Cases for HMAC-SHA-1 - */ - { "rfc2202 3.1", "sha1", - hmac_test_case_keys[0], 20, - hmac_test_case_data[0], 8, - {0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, - 0xe2, 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e, - 0xf1, 0x46, 0xbe, 0x00} }, - -#ifdef LTC_TEST_EXT - { "rfc2202 3.2", "sha1", - hmac_test_case_keys[1], 4, - hmac_test_case_data[1], 28, - {0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2, - 0xd2, 0x74, 0x16, 0xd5, 0xf1, 0x84, 0xdf, 0x9c, - 0x25, 0x9a, 0x7c, 0x79} }, - - { "rfc2202 3.3", "sha1", - hmac_test_case_keys[4], 20, - hmac_test_case_data[2], 50, - {0x12, 0x5d, 0x73, 0x42, 0xb9, 0xac, 0x11, 0xcd, - 0x91, 0xa3, 0x9a, 0xf4, 0x8a, 0xa1, 0x7b, 0x4f, - 0x63, 0xf1, 0x75, 0xd3} }, - - { "rfc2202 3.4", "sha1", - hmac_test_case_keys[2], 25, - hmac_test_case_data[3], 50, - {0x4c, 0x90, 0x07, 0xf4, 0x02, 0x62, 0x50, 0xc6, - 0xbc, 0x84, 0x14, 0xf9, 0xbf, 0x50, 0xc8, 0x6c, - 0x2d, 0x72, 0x35, 0xda} }, - - { "rfc2202 3.5", "sha1", - hmac_test_case_keys[3], 20, - hmac_test_case_data[4], 20, - {0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f, 0xe7, 0xf2, - 0x7b, 0xe1, 0xd5, 0x8b, 0xb9, 0x32, 0x4a, 0x9a, 0x5a, 0x04} }, - - { "rfc2202 3.6", "sha1", - hmac_test_case_keys[4], 80, - hmac_test_case_data[5], 54, - {0xaa, 0x4a, 0xe5, 0xe1, 0x52, 0x72, 0xd0, 0x0e, - 0x95, 0x70, 0x56, 0x37, 0xce, 0x8a, 0x3b, 0x55, - 0xed, 0x40, 0x21, 0x12} }, - - { "rfc2202 3.7", "sha1", - hmac_test_case_keys[4], 80, - hmac_test_case_data[6], 73, - {0xe8, 0xe9, 0x9d, 0x0f, 0x45, 0x23, 0x7d, 0x78, 0x6d, - 0x6b, 0xba, 0xa7, 0x96, 0x5c, 0x78, 0x08, 0xbb, 0xff, 0x1a, 0x91} }, -#endif /* LTC_TEST_EXT */ - - /* - RFC 2202 2. Test Cases for HMAC-MD5 - */ - { "rfc2202 2.1", "md5", - hmac_test_case_keys[0], 16, - hmac_test_case_data[0], 8, - {0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c, - 0x13, 0xf4, 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d} }, - -#ifdef LTC_TEST_EXT - { "rfc2202 2.2", "md5", - hmac_test_case_keys[1], 4, - hmac_test_case_data[1], 28, - {0x75, 0x0c, 0x78, 0x3e, 0x6a, 0xb0, 0xb5, 0x03, - 0xea, 0xa8, 0x6e, 0x31, 0x0a, 0x5d, 0xb7, 0x38} }, - - { "rfc2202 2.3", "md5", - hmac_test_case_keys[4], 16, - hmac_test_case_data[2], 50, - {0x56, 0xbe, 0x34, 0x52, 0x1d, 0x14, 0x4c, 0x88, - 0xdb, 0xb8, 0xc7, 0x33, 0xf0, 0xe8, 0xb3, 0xf6} }, - - { "rfc2202 2.4", "md5", - hmac_test_case_keys[2], 25, - hmac_test_case_data[3], 50, - {0x69, 0x7e, 0xaf, 0x0a, 0xca, 0x3a, 0x3a, 0xea, - 0x3a, 0x75, 0x16, 0x47, 0x46, 0xff, 0xaa, 0x79} }, - - { "rfc2202 2.5", "md5", - hmac_test_case_keys[3], 16, - hmac_test_case_data[4], 20, - {0x56, 0x46, 0x1e, 0xf2, 0x34, 0x2e, 0xdc, 0x00, - 0xf9, 0xba, 0xb9, 0x95, 0x69, 0x0e, 0xfd, 0x4c} }, - - { "rfc2202 2.6", "md5", - hmac_test_case_keys[4], 80, - hmac_test_case_data[5], 54, - {0x6b, 0x1a, 0xb7, 0xfe, 0x4b, 0xd7, 0xbf, 0x8f, - 0x0b, 0x62, 0xe6, 0xce, 0x61, 0xb9, 0xd0, 0xcd} }, - - { "rfc2202 2.7", "md5", - hmac_test_case_keys[4], 80, - hmac_test_case_data[6], 73, - {0x6f, 0x63, 0x0f, 0xad, 0x67, 0xcd, 0xa0, 0xee, - 0x1f, 0xb1, 0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e} }, -#endif /* LTC_TEST_EXT */ - - /* - RFC 2286 2. Test Cases for HMAC-RIPEMD160 - */ - { "rfc2286 2.1", "rmd160", - hmac_test_case_keys[0], 20, - hmac_test_case_data[0], 8, - {0x24, 0xcb, 0x4b, 0xd6, 0x7d, 0x20, 0xfc, 0x1a, - 0x5d, 0x2e, 0xd7, 0x73, 0x2d, 0xcc, 0x39, 0x37, - 0x7f, 0x0a, 0x56, 0x68} }, - -#ifdef LTC_TEST_EXT - { "rfc2286 2.2", "rmd160", - hmac_test_case_keys[1], 4, - hmac_test_case_data[1], 28, - {0xdd, 0xa6, 0xc0, 0x21, 0x3a, 0x48, 0x5a, 0x9e, - 0x24, 0xf4, 0x74, 0x20, 0x64, 0xa7, 0xf0, 0x33, - 0xb4, 0x3c, 0x40, 0x69} }, - - { "rfc2286 2.3", "rmd160", - hmac_test_case_keys[4], 20, - hmac_test_case_data[2], 50, - {0xb0, 0xb1, 0x05, 0x36, 0x0d, 0xe7, 0x59, 0x96, - 0x0a, 0xb4, 0xf3, 0x52, 0x98, 0xe1, 0x16, 0xe2, - 0x95, 0xd8, 0xe7, 0xc1} }, - - { "rfc2286 2.4", "rmd160", - hmac_test_case_keys[2], 25, - hmac_test_case_data[3], 50, - {0xd5, 0xca, 0x86, 0x2f, 0x4d, 0x21, 0xd5, 0xe6, - 0x10, 0xe1, 0x8b, 0x4c, 0xf1, 0xbe, 0xb9, 0x7a, - 0x43, 0x65, 0xec, 0xf4} }, - - { "rfc2286 2.5", "rmd160", - hmac_test_case_keys[3], 20, - hmac_test_case_data[4], 20, - {0x76, 0x19, 0x69, 0x39, 0x78, 0xf9, 0x1d, 0x90, - 0x53, 0x9a, 0xe7, 0x86, 0x50, 0x0f, 0xf3, 0xd8, - 0xe0, 0x51, 0x8e, 0x39} }, - - { "rfc2286 2.6", "rmd160", - hmac_test_case_keys[4], 80, - hmac_test_case_data[5], 54, - {0x64, 0x66, 0xca, 0x07, 0xac, 0x5e, 0xac, 0x29, - 0xe1, 0xbd, 0x52, 0x3e, 0x5a, 0xda, 0x76, 0x05, - 0xb7, 0x91, 0xfd, 0x8b} }, - - { "rfc2286 2.7", "rmd160", - hmac_test_case_keys[4], 80, - hmac_test_case_data[6], 73, - {0x69, 0xea, 0x60, 0x79, 0x8d, 0x71, 0x61, 0x6c, - 0xce, 0x5f, 0xd0, 0x87, 0x1e, 0x23, 0x75, 0x4c, - 0xd7, 0x5d, 0x5a, 0x0a} }, -#endif /* LTC_TEST_EXT */ - - /* - RFC 2286 3. Test Cases for HMAC-RIPEMD128 - */ - { "rfc2286 3.1", "rmd128", - hmac_test_case_keys[0], 16, - hmac_test_case_data[0], 8, - {0xfb, 0xf6, 0x1f, 0x94, 0x92, 0xaa, 0x4b, 0xbf, - 0x81, 0xc1, 0x72, 0xe8, 0x4e, 0x07, 0x34, 0xdb} }, - -#ifdef LTC_TEST_EXT - { "rfc2286 3.2", "rmd128", - hmac_test_case_keys[1], 4, - hmac_test_case_data[1], 28, - {0x87, 0x5f, 0x82, 0x88, 0x62, 0xb6, 0xb3, 0x34, - 0xb4, 0x27, 0xc5, 0x5f, 0x9f, 0x7f, 0xf0, 0x9b} }, - - { "rfc2286 3.3", "rmd128", - hmac_test_case_keys[4], 16, - hmac_test_case_data[2], 50, - {0x09, 0xf0, 0xb2, 0x84, 0x6d, 0x2f, 0x54, 0x3d, - 0xa3, 0x63, 0xcb, 0xec, 0x8d, 0x62, 0xa3, 0x8d} }, - - { "rfc2286 3.4", "rmd128", - hmac_test_case_keys[2], 25, - hmac_test_case_data[3], 50, - {0xbd, 0xbb, 0xd7, 0xcf, 0x03, 0xe4, 0x4b, 0x5a, - 0xa6, 0x0a, 0xf8, 0x15, 0xbe, 0x4d, 0x22, 0x94} }, - - { "rfc2286 3.5", "rmd128", - hmac_test_case_keys[3], 16, - hmac_test_case_data[4], 20, - {0xe7, 0x98, 0x08, 0xf2, 0x4b, 0x25, 0xfd, 0x03, - 0x1c, 0x15, 0x5f, 0x0d, 0x55, 0x1d, 0x9a, 0x3a} }, - - { "rfc2286 3.6", "rmd128", - hmac_test_case_keys[4], 80, - hmac_test_case_data[5], 54, - {0xdc, 0x73, 0x29, 0x28, 0xde, 0x98, 0x10, 0x4a, - 0x1f, 0x59, 0xd3, 0x73, 0xc1, 0x50, 0xac, 0xbb} }, - - { "rfc2286 3.7", "rmd128", - hmac_test_case_keys[4], 80, - hmac_test_case_data[6], 73, - {0x5c, 0x6b, 0xec, 0x96, 0x79, 0x3e, 0x16, 0xd4, - 0x06, 0x90, 0xc2, 0x37, 0x63, 0x5f, 0x30, 0xc5} }, -#endif /* LTC_TEST_EXT */ - - /* - RFC 4231 4. Test Vectors - Ch. 4.6 with truncated output left out to simplify tests - */ - { "rfc4231 4.2", "sha224", - hmac_test_case_keys[0], 20, - hmac_test_case_data[0], 8, - {0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19, - 0x68, 0x32, 0x10, 0x7c, 0xd4, 0x9d, 0xf3, 0x3f, - 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f, - 0x53, 0x68, 0x4b, 0x22} }, - -#ifdef LTC_TEST_EXT - { "rfc4231 4.3", "sha224", - hmac_test_case_keys[1], 4, - hmac_test_case_data[1], 28, - {0xa3, 0x0e, 0x01, 0x09, 0x8b, 0xc6, 0xdb, 0xbf, - 0x45, 0x69, 0x0f, 0x3a, 0x7e, 0x9e, 0x6d, 0x0f, - 0x8b, 0xbe, 0xa2, 0xa3, 0x9e, 0x61, 0x48, 0x00, - 0x8f, 0xd0, 0x5e, 0x44} }, - - { "rfc4231 4.4", "sha224", - hmac_test_case_keys[4], 20, - hmac_test_case_data[2], 50, - {0x7f, 0xb3, 0xcb, 0x35, 0x88, 0xc6, 0xc1, 0xf6, - 0xff, 0xa9, 0x69, 0x4d, 0x7d, 0x6a, 0xd2, 0x64, - 0x93, 0x65, 0xb0, 0xc1, 0xf6, 0x5d, 0x69, 0xd1, - 0xec, 0x83, 0x33, 0xea} }, - - { "rfc4231 4.5", "sha224", - hmac_test_case_keys[2], 25, - hmac_test_case_data[3], 50, - {0x6c, 0x11, 0x50, 0x68, 0x74, 0x01, 0x3c, 0xac, - 0x6a, 0x2a, 0xbc, 0x1b, 0xb3, 0x82, 0x62, 0x7c, - 0xec, 0x6a, 0x90, 0xd8, 0x6e, 0xfc, 0x01, 0x2d, - 0xe7, 0xaf, 0xec, 0x5a} }, - - { "rfc4231 4.7", "sha224", - hmac_test_case_keys[4], 131, - hmac_test_case_data[5], 54, - {0x95, 0xe9, 0xa0, 0xdb, 0x96, 0x20, 0x95, 0xad, - 0xae, 0xbe, 0x9b, 0x2d, 0x6f, 0x0d, 0xbc, 0xe2, - 0xd4, 0x99, 0xf1, 0x12, 0xf2, 0xd2, 0xb7, 0x27, - 0x3f, 0xa6, 0x87, 0x0e} }, - - { "rfc4231 4.8", "sha224", - hmac_test_case_keys[4], 131, - hmac_test_case_data[7], 152, - {0x3a, 0x85, 0x41, 0x66, 0xac, 0x5d, 0x9f, 0x02, - 0x3f, 0x54, 0xd5, 0x17, 0xd0, 0xb3, 0x9d, 0xbd, - 0x94, 0x67, 0x70, 0xdb, 0x9c, 0x2b, 0x95, 0xc9, - 0xf6, 0xf5, 0x65, 0xd1} }, -#endif /* LTC_TEST_EXT */ - - { "rfc4231 4.2", "sha256", - hmac_test_case_keys[0], 20, - hmac_test_case_data[0], 8, - {0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53, - 0x5c, 0xa8, 0xaf, 0xce, 0xaf, 0x0b, 0xf1, 0x2b, - 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7, - 0x26, 0xe9, 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7} }, - -#ifdef LTC_TEST_EXT - { "rfc4231 4.3", "sha256", - hmac_test_case_keys[1], 4, - hmac_test_case_data[1], 28, - {0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e, - 0x6a, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xc7, - 0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27, 0x39, 0x83, - 0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43} }, - - { "rfc4231 4.4", "sha256", - hmac_test_case_keys[4], 20, - hmac_test_case_data[2], 50, - {0x77, 0x3e, 0xa9, 0x1e, 0x36, 0x80, 0x0e, 0x46, - 0x85, 0x4d, 0xb8, 0xeb, 0xd0, 0x91, 0x81, 0xa7, - 0x29, 0x59, 0x09, 0x8b, 0x3e, 0xf8, 0xc1, 0x22, - 0xd9, 0x63, 0x55, 0x14, 0xce, 0xd5, 0x65, 0xfe} }, - - { "rfc4231 4.5", "sha256", - hmac_test_case_keys[2], 25, - hmac_test_case_data[3], 50, - {0x82, 0x55, 0x8a, 0x38, 0x9a, 0x44, 0x3c, 0x0e, - 0xa4, 0xcc, 0x81, 0x98, 0x99, 0xf2, 0x08, 0x3a, - 0x85, 0xf0, 0xfa, 0xa3, 0xe5, 0x78, 0xf8, 0x07, - 0x7a, 0x2e, 0x3f, 0xf4, 0x67, 0x29, 0x66, 0x5b} }, - - { "rfc4231 4.7", "sha256", - hmac_test_case_keys[4], 131, - hmac_test_case_data[5], 54, - {0x60, 0xe4, 0x31, 0x59, 0x1e, 0xe0, 0xb6, 0x7f, - 0x0d, 0x8a, 0x26, 0xaa, 0xcb, 0xf5, 0xb7, 0x7f, - 0x8e, 0x0b, 0xc6, 0x21, 0x37, 0x28, 0xc5, 0x14, - 0x05, 0x46, 0x04, 0x0f, 0x0e, 0xe3, 0x7f, 0x54} }, - - { "rfc4231 4.8", "sha256", - hmac_test_case_keys[4], 131, - hmac_test_case_data[7], 152, - {0x9b, 0x09, 0xff, 0xa7, 0x1b, 0x94, 0x2f, 0xcb, - 0x27, 0x63, 0x5f, 0xbc, 0xd5, 0xb0, 0xe9, 0x44, - 0xbf, 0xdc, 0x63, 0x64, 0x4f, 0x07, 0x13, 0x93, - 0x8a, 0x7f, 0x51, 0x53, 0x5c, 0x3a, 0x35, 0xe2} }, -#endif /* LTC_TEST_EXT */ - - { "rfc4231 4.2", "sha384", - hmac_test_case_keys[0], 20, - hmac_test_case_data[0], 8, - {0xaf, 0xd0, 0x39, 0x44, 0xd8, 0x48, 0x95, 0x62, - 0x6b, 0x08, 0x25, 0xf4, 0xab, 0x46, 0x90, 0x7f, - 0x15, 0xf9, 0xda, 0xdb, 0xe4, 0x10, 0x1e, 0xc6, - 0x82, 0xaa, 0x03, 0x4c, 0x7c, 0xeb, 0xc5, 0x9c, - 0xfa, 0xea, 0x9e, 0xa9, 0x07, 0x6e, 0xde, 0x7f, - 0x4a, 0xf1, 0x52, 0xe8, 0xb2, 0xfa, 0x9c, 0xb6} }, - -#ifdef LTC_TEST_EXT - { "rfc4231 4.3", "sha384", - hmac_test_case_keys[1], 4, - hmac_test_case_data[1], 28, - {0xaf, 0x45, 0xd2, 0xe3, 0x76, 0x48, 0x40, 0x31, - 0x61, 0x7f, 0x78, 0xd2, 0xb5, 0x8a, 0x6b, 0x1b, - 0x9c, 0x7e, 0xf4, 0x64, 0xf5, 0xa0, 0x1b, 0x47, - 0xe4, 0x2e, 0xc3, 0x73, 0x63, 0x22, 0x44, 0x5e, - 0x8e, 0x22, 0x40, 0xca, 0x5e, 0x69, 0xe2, 0xc7, - 0x8b, 0x32, 0x39, 0xec, 0xfa, 0xb2, 0x16, 0x49} }, - - { "rfc4231 4.4", "sha384", - hmac_test_case_keys[4], 20, - hmac_test_case_data[2], 50, - {0x88, 0x06, 0x26, 0x08, 0xd3, 0xe6, 0xad, 0x8a, - 0x0a, 0xa2, 0xac, 0xe0, 0x14, 0xc8, 0xa8, 0x6f, - 0x0a, 0xa6, 0x35, 0xd9, 0x47, 0xac, 0x9f, 0xeb, - 0xe8, 0x3e, 0xf4, 0xe5, 0x59, 0x66, 0x14, 0x4b, - 0x2a, 0x5a, 0xb3, 0x9d, 0xc1, 0x38, 0x14, 0xb9, - 0x4e, 0x3a, 0xb6, 0xe1, 0x01, 0xa3, 0x4f, 0x27} }, - - { "rfc4231 4.5", "sha384", - hmac_test_case_keys[2], 25, - hmac_test_case_data[3], 50, - {0x3e, 0x8a, 0x69, 0xb7, 0x78, 0x3c, 0x25, 0x85, - 0x19, 0x33, 0xab, 0x62, 0x90, 0xaf, 0x6c, 0xa7, - 0x7a, 0x99, 0x81, 0x48, 0x08, 0x50, 0x00, 0x9c, - 0xc5, 0x57, 0x7c, 0x6e, 0x1f, 0x57, 0x3b, 0x4e, - 0x68, 0x01, 0xdd, 0x23, 0xc4, 0xa7, 0xd6, 0x79, - 0xcc, 0xf8, 0xa3, 0x86, 0xc6, 0x74, 0xcf, 0xfb} }, - - { "rfc4231 4.7", "sha384", - hmac_test_case_keys[4], 131, - hmac_test_case_data[5], 54, - {0x4e, 0xce, 0x08, 0x44, 0x85, 0x81, 0x3e, 0x90, - 0x88, 0xd2, 0xc6, 0x3a, 0x04, 0x1b, 0xc5, 0xb4, - 0x4f, 0x9e, 0xf1, 0x01, 0x2a, 0x2b, 0x58, 0x8f, - 0x3c, 0xd1, 0x1f, 0x05, 0x03, 0x3a, 0xc4, 0xc6, - 0x0c, 0x2e, 0xf6, 0xab, 0x40, 0x30, 0xfe, 0x82, - 0x96, 0x24, 0x8d, 0xf1, 0x63, 0xf4, 0x49, 0x52} }, - - { "rfc4231 4.8", "sha384", - hmac_test_case_keys[4], 131, - hmac_test_case_data[7], 152, - {0x66, 0x17, 0x17, 0x8e, 0x94, 0x1f, 0x02, 0x0d, - 0x35, 0x1e, 0x2f, 0x25, 0x4e, 0x8f, 0xd3, 0x2c, - 0x60, 0x24, 0x20, 0xfe, 0xb0, 0xb8, 0xfb, 0x9a, - 0xdc, 0xce, 0xbb, 0x82, 0x46, 0x1e, 0x99, 0xc5, - 0xa6, 0x78, 0xcc, 0x31, 0xe7, 0x99, 0x17, 0x6d, - 0x38, 0x60, 0xe6, 0x11, 0x0c, 0x46, 0x52, 0x3e} }, -#endif /* LTC_TEST_EXT */ - - { "rfc4231 4.2", "sha512", - hmac_test_case_keys[0], 20, - hmac_test_case_data[0], 8, - {0x87, 0xaa, 0x7c, 0xde, 0xa5, 0xef, 0x61, 0x9d, - 0x4f, 0xf0, 0xb4, 0x24, 0x1a, 0x1d, 0x6c, 0xb0, - 0x23, 0x79, 0xf4, 0xe2, 0xce, 0x4e, 0xc2, 0x78, - 0x7a, 0xd0, 0xb3, 0x05, 0x45, 0xe1, 0x7c, 0xde, - 0xda, 0xa8, 0x33, 0xb7, 0xd6, 0xb8, 0xa7, 0x02, - 0x03, 0x8b, 0x27, 0x4e, 0xae, 0xa3, 0xf4, 0xe4, - 0xbe, 0x9d, 0x91, 0x4e, 0xeb, 0x61, 0xf1, 0x70, - 0x2e, 0x69, 0x6c, 0x20, 0x3a, 0x12, 0x68, 0x54} }, - -#ifdef LTC_TEST_EXT - { "rfc4231 4.3", "sha512", - hmac_test_case_keys[1], 4, - hmac_test_case_data[1], 28, - {0x16, 0x4b, 0x7a, 0x7b, 0xfc, 0xf8, 0x19, 0xe2, - 0xe3, 0x95, 0xfb, 0xe7, 0x3b, 0x56, 0xe0, 0xa3, - 0x87, 0xbd, 0x64, 0x22, 0x2e, 0x83, 0x1f, 0xd6, - 0x10, 0x27, 0x0c, 0xd7, 0xea, 0x25, 0x05, 0x54, - 0x97, 0x58, 0xbf, 0x75, 0xc0, 0x5a, 0x99, 0x4a, - 0x6d, 0x03, 0x4f, 0x65, 0xf8, 0xf0, 0xe6, 0xfd, - 0xca, 0xea, 0xb1, 0xa3, 0x4d, 0x4a, 0x6b, 0x4b, - 0x63, 0x6e, 0x07, 0x0a, 0x38, 0xbc, 0xe7, 0x37} }, - - { "rfc4231 4.4", "sha512", - hmac_test_case_keys[4], 20, - hmac_test_case_data[2], 50, - {0xfa, 0x73, 0xb0, 0x08, 0x9d, 0x56, 0xa2, 0x84, - 0xef, 0xb0, 0xf0, 0x75, 0x6c, 0x89, 0x0b, 0xe9, - 0xb1, 0xb5, 0xdb, 0xdd, 0x8e, 0xe8, 0x1a, 0x36, - 0x55, 0xf8, 0x3e, 0x33, 0xb2, 0x27, 0x9d, 0x39, - 0xbf, 0x3e, 0x84, 0x82, 0x79, 0xa7, 0x22, 0xc8, - 0x06, 0xb4, 0x85, 0xa4, 0x7e, 0x67, 0xc8, 0x07, - 0xb9, 0x46, 0xa3, 0x37, 0xbe, 0xe8, 0x94, 0x26, - 0x74, 0x27, 0x88, 0x59, 0xe1, 0x32, 0x92, 0xfb} }, - - { "rfc4231 4.5", "sha512", - hmac_test_case_keys[2], 25, - hmac_test_case_data[3], 50, - {0xb0, 0xba, 0x46, 0x56, 0x37, 0x45, 0x8c, 0x69, - 0x90, 0xe5, 0xa8, 0xc5, 0xf6, 0x1d, 0x4a, 0xf7, - 0xe5, 0x76, 0xd9, 0x7f, 0xf9, 0x4b, 0x87, 0x2d, - 0xe7, 0x6f, 0x80, 0x50, 0x36, 0x1e, 0xe3, 0xdb, - 0xa9, 0x1c, 0xa5, 0xc1, 0x1a, 0xa2, 0x5e, 0xb4, - 0xd6, 0x79, 0x27, 0x5c, 0xc5, 0x78, 0x80, 0x63, - 0xa5, 0xf1, 0x97, 0x41, 0x12, 0x0c, 0x4f, 0x2d, - 0xe2, 0xad, 0xeb, 0xeb, 0x10, 0xa2, 0x98, 0xdd} }, - - { "rfc4231 4.7", "sha512", - hmac_test_case_keys[4], 131, - hmac_test_case_data[5], 54, - {0x80, 0xb2, 0x42, 0x63, 0xc7, 0xc1, 0xa3, 0xeb, - 0xb7, 0x14, 0x93, 0xc1, 0xdd, 0x7b, 0xe8, 0xb4, - 0x9b, 0x46, 0xd1, 0xf4, 0x1b, 0x4a, 0xee, 0xc1, - 0x12, 0x1b, 0x01, 0x37, 0x83, 0xf8, 0xf3, 0x52, - 0x6b, 0x56, 0xd0, 0x37, 0xe0, 0x5f, 0x25, 0x98, - 0xbd, 0x0f, 0xd2, 0x21, 0x5d, 0x6a, 0x1e, 0x52, - 0x95, 0xe6, 0x4f, 0x73, 0xf6, 0x3f, 0x0a, 0xec, - 0x8b, 0x91, 0x5a, 0x98, 0x5d, 0x78, 0x65, 0x98} }, - - { "rfc4231 4.8", "sha512", - hmac_test_case_keys[4], 131, - hmac_test_case_data[7], 152, - {0xe3, 0x7b, 0x6a, 0x77, 0x5d, 0xc8, 0x7d, 0xba, - 0xa4, 0xdf, 0xa9, 0xf9, 0x6e, 0x5e, 0x3f, 0xfd, - 0xde, 0xbd, 0x71, 0xf8, 0x86, 0x72, 0x89, 0x86, - 0x5d, 0xf5, 0xa3, 0x2d, 0x20, 0xcd, 0xc9, 0x44, - 0xb6, 0x02, 0x2c, 0xac, 0x3c, 0x49, 0x82, 0xb1, - 0x0d, 0x5e, 0xeb, 0x55, 0xc3, 0xe4, 0xde, 0x15, - 0x13, 0x46, 0x76, 0xfb, 0x6d, 0xe0, 0x44, 0x60, - 0x65, 0xc9, 0x74, 0x40, 0xfa, 0x8c, 0x6a, 0x58} }, -#endif /* LTC_TEST_EXT */ - - { "sm3 1", "sm3", - hmac_test_case_keys[0], 20, - hmac_test_case_data[0], 8, - {0x51, 0xb0, 0x0d, 0x1f, 0xb4, 0x98, 0x32, 0xbf, - 0xb0, 0x1c, 0x3c, 0xe2, 0x78, 0x48, 0xe5, 0x9f, - 0x87, 0x1d, 0x9b, 0xa9, 0x38, 0xdc, 0x56, 0x3b, - 0x33, 0x8c, 0xa9, 0x64, 0x75, 0x5c, 0xce, 0x70} }, - -#ifdef LTC_TEST_EXT - { "sm3 2", "sm3", - hmac_test_case_keys[1], 4, - hmac_test_case_data[1], 28, - {0x2e, 0x87, 0xf1, 0xd1, 0x68, 0x62, 0xe6, 0xd9, - 0x64, 0xb5, 0x0a, 0x52, 0x00, 0xbf, 0x2b, 0x10, - 0xb7, 0x64, 0xfa, 0xa9, 0x68, 0x0a, 0x29, 0x6a, - 0x24, 0x05, 0xf2, 0x4b, 0xec, 0x39, 0xf8, 0x82} }, - - { "sm3 3", "sm3", - hmac_test_case_keys[4], 131, - hmac_test_case_data[5], 54, - {0x73, 0x6f, 0x6a, 0xbd, 0x55, 0x72, 0xf0, 0xd5, - 0x96, 0xc9, 0x57, 0xb9, 0x30, 0x6b, 0x3c, 0x5c, - 0xe8, 0x13, 0xb2, 0xc4, 0x5c, 0xd7, 0x44, 0x52, - 0xbc, 0x6f, 0xbb, 0x37, 0xd1, 0xed, 0x25, 0xfa} }, - - { "sm3 4", "sm3", - hmac_test_case_keys[4], 131, - hmac_test_case_data[7], 152, - {0x8d, 0x1c, 0xa1, 0xb7, 0x22, 0x53, 0xe7, 0xe9, - 0xc8, 0x22, 0x68, 0x4d, 0x2e, 0x75, 0xfb, 0x6c, - 0x6e, 0x04, 0x42, 0x86, 0x6e, 0x66, 0x1b, 0xb9, - 0xa3, 0x66, 0x8c, 0xd9, 0xc6, 0xa3, 0x2f, 0xb7} }, -#endif /* LTC_TEST_EXT */ - - }; - - unsigned long outlen; - int err; - int tested=0,failed=0; - for(i=0; i < (int)(sizeof(cases) / sizeof(cases[0])); i++) { - int hash = find_hash(cases[i].algo); - if (hash == -1) continue; - ++tested; - outlen = sizeof(digest); - if((err = hmac_memory(hash, cases[i].key, cases[i].keylen, cases[i].data, cases[i].datalen, digest, &outlen)) != CRYPT_OK) { -#ifdef LTC_TEST_DBG - printf("HMAC-%s test %s, %s\n", cases[i].algo, cases[i].num, error_to_string(err)); -#endif - return err; - } - - if(ltc_compare_testvector(digest, outlen, cases[i].digest, (size_t)hash_descriptor[hash].hashsize, cases[i].num, i)) { - failed++; - } - } - - if (failed != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - if (tested == 0) { - return CRYPT_NOP; - } - - i = find_hash("sha256"); - if (i != -1) { - outlen = sizeof(digest); - if ((err = hmac_memory(i, NULL, 0, empty_key_msg, sizeof(empty_key_msg), digest, &outlen)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(digest, outlen, empty_key_sha256_expected, sizeof(empty_key_sha256_expected), "empty-key sha256", (unsigned long)i)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; - #endif -} - -#endif - diff --git a/src/mac/kmac/kmac.c b/src/mac/kmac/kmac.c deleted file mode 100644 index 1a0af38e..00000000 --- a/src/mac/kmac/kmac.c +++ /dev/null @@ -1,171 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file kmac.c - KMAC as defined in NIST SP 800-185 -*/ - -#ifdef LTC_KMAC - -/* Encoding helpers from NIST SP 800-185 2.3 - encoded output never exceeds 9 bytes (8 byte payload + 1 length byte) */ -static unsigned long s_left_encode(ulong64 x, unsigned char *out) -{ - int i, n = 1; - for (i = 7; i > 0; --i) { - if ((x >> (i * 8)) & 0xff) { - n = i + 1; - break; - } - } - out[0] = (unsigned char)n; - for (i = 0; i < n; ++i) { - out[1 + i] = (unsigned char)(x >> ((n - 1 - i) * 8)); - } - return (unsigned long)(n + 1); -} - -static unsigned long s_right_encode(ulong64 x, unsigned char *out) -{ - int i, n = 1; - for (i = 7; i > 0; --i) { - if ((x >> (i * 8)) & 0xff) { - n = i + 1; - break; - } - } - for (i = 0; i < n; ++i) { - out[i] = (unsigned char)(x >> ((n - 1 - i) * 8)); - } - out[n] = (unsigned char)n; - return (unsigned long)(n + 1); -} - -static int s_feed_encode_string(hash_state *md, const unsigned char *s, unsigned long slen, unsigned long *total) -{ - unsigned char enc[9]; - unsigned long enclen; - int err; - enclen = s_left_encode((ulong64)slen * 8, enc); - if ((err = sha3_process(md, enc, enclen)) != CRYPT_OK) return err; - *total += enclen; - if (slen != 0) { - if ((err = sha3_process(md, s, slen)) != CRYPT_OK) return err; - *total += slen; - } - return CRYPT_OK; -} - -static int s_feed_bytepad_zero_fill(hash_state *md, unsigned long rate, unsigned long total) -{ - unsigned long pad = (rate - (total % rate)) % rate; - if (pad != 0) { - unsigned char zeros[168]; /* >= max SHAKE rate */ - XMEMSET(zeros, 0, sizeof(zeros)); - return sha3_process(md, zeros, pad); - } - return CRYPT_OK; -} - -static int s_feed_bytepad_prefix(hash_state *md, unsigned long rate, unsigned long *total) -{ - unsigned char enc[9]; - unsigned long enclen = s_left_encode(rate, enc); - int err = sha3_process(md, enc, enclen); - if (err == CRYPT_OK) *total = enclen; - return err; -} - -/** - Initialize a KMAC context - - @param st The KMAC state - @param variant one of LTC_KMAC128, LTC_KMAC256, LTC_KMAC128_XOF, LTC_KMAC256_XOF - @param key The secret key - @param keylen The length of the secret key (octets) - @param cust Optional customization string (may be NULL when custlen == 0) - @param custlen Length of the customization string (octets) - @return CRYPT_OK if successful -*/ -int kmac_init(kmac_state *st, int variant, - const unsigned char *key, unsigned long keylen, - const unsigned char *cust, unsigned long custlen) -{ - static const unsigned char kmac_name[4] = { 'K', 'M', 'A', 'C' }; - int err, num; - unsigned long rate, total; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(key != NULL || keylen == 0); - LTC_ARGCHK(cust != NULL || custlen == 0); - - switch (variant) { - case LTC_KMAC128: num = 128; st->xof = 0; rate = 168; break; - case LTC_KMAC256: num = 256; st->xof = 0; rate = 136; break; - case LTC_KMAC128_XOF: num = 128; st->xof = 1; rate = 168; break; - case LTC_KMAC256_XOF: num = 256; st->xof = 1; rate = 136; break; - default: return CRYPT_INVALID_ARG; - } - - if ((err = sha3_shake_init(&st->sha3, num)) != CRYPT_OK) return err; - - /* bytepad(encode_string("KMAC") || encode_string(cust), rate) */ - if ((err = s_feed_bytepad_prefix(&st->sha3, rate, &total)) != CRYPT_OK) return err; - if ((err = s_feed_encode_string(&st->sha3, kmac_name, sizeof(kmac_name), &total)) != CRYPT_OK) return err; - if ((err = s_feed_encode_string(&st->sha3, cust, custlen, &total)) != CRYPT_OK) return err; - if ((err = s_feed_bytepad_zero_fill(&st->sha3, rate, total)) != CRYPT_OK) return err; - - /* bytepad(encode_string(key), rate) */ - if ((err = s_feed_bytepad_prefix(&st->sha3, rate, &total)) != CRYPT_OK) return err; - if ((err = s_feed_encode_string(&st->sha3, key, keylen, &total)) != CRYPT_OK) return err; - if ((err = s_feed_bytepad_zero_fill(&st->sha3, rate, total)) != CRYPT_OK) return err; - - return CRYPT_OK; -} - -/** - Process data through KMAC - - @param st The KMAC state - @param in The data to authenticate - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -int kmac_process(kmac_state *st, const unsigned char *in, unsigned long inlen) -{ - if (inlen == 0) return CRYPT_OK; - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(in != NULL); - return sha3_process(&st->sha3, in, inlen); -} - -/** - Terminate a KMAC session - - @param st The KMAC state - @param out [out] The destination of the MAC - @param outlen [in/out] The requested length on entry, the produced length on return - @return CRYPT_OK if successful -*/ -int kmac_done(kmac_state *st, unsigned char *out, unsigned long *outlen) -{ - unsigned char enc[9]; - unsigned long enclen; - int err; - ulong64 L; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* SP 800-185 4: append right_encode(L) where L is the requested output length in bits or right_encode(0) for the XOF flavour */ - L = st->xof ? 0 : (ulong64)(*outlen) * 8; - enclen = s_right_encode(L, enc); - if ((err = sha3_process(&st->sha3, enc, enclen)) != CRYPT_OK) return err; - - return sha3_shake_done_ex(&st->sha3, out, *outlen, 0x04); -} - -#endif diff --git a/src/mac/kmac/kmac_file.c b/src/mac/kmac/kmac_file.c deleted file mode 100644 index c3cc1faf..00000000 --- a/src/mac/kmac/kmac_file.c +++ /dev/null @@ -1,90 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_KMAC - -/** - KMAC a file - - @param variant 128 or 256 (optionally OR-ed with LTC_KMAC_XOF) - @param key The secret key - @param keylen The length of the secret key (octets) - @param cust Optional customization string (may be NULL when custlen == 0) - @param custlen Length of the customization string (octets) - @param fname The name of the file you wish to MAC - @param out [out] Destination of the MAC - @param outlen [in/out] Requested length on entry, produced length on return - @return CRYPT_OK if successful, CRYPT_NOP if file support has been disabled -*/ -int kmac_file(int variant, - const unsigned char *key, unsigned long keylen, - const unsigned char *cust, unsigned long custlen, - const char *fname, - unsigned char *out, unsigned long *outlen) -{ -#ifdef LTC_NO_FILE - LTC_UNUSED_PARAM(variant); - LTC_UNUSED_PARAM(key); - LTC_UNUSED_PARAM(keylen); - LTC_UNUSED_PARAM(cust); - LTC_UNUSED_PARAM(custlen); - LTC_UNUSED_PARAM(fname); - LTC_UNUSED_PARAM(out); - LTC_UNUSED_PARAM(outlen); - return CRYPT_NOP; -#else - kmac_state st; - FILE *in; - unsigned char *buf; - size_t x; - int err; - - LTC_ARGCHK(fname != NULL); - LTC_ARGCHK(key != NULL || keylen == 0); - LTC_ARGCHK(cust != NULL || custlen == 0); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((buf = XMALLOC(LTC_FILE_READ_BUFSIZE)) == NULL) { - return CRYPT_MEM; - } - - if ((err = kmac_init(&st, variant, key, keylen, cust, custlen)) != CRYPT_OK) { - goto LBL_ERR; - } - - in = fopen(fname, "rb"); - if (in == NULL) { - err = CRYPT_FILE_NOTFOUND; - goto LBL_ERR; - } - - do { - x = fread(buf, 1, LTC_FILE_READ_BUFSIZE, in); - if ((err = kmac_process(&st, buf, (unsigned long)x)) != CRYPT_OK) { - fclose(in); - goto LBL_CLEANBUF; - } - } while (x == LTC_FILE_READ_BUFSIZE); - - if (fclose(in) != 0) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; - } - - err = kmac_done(&st, out, outlen); - -LBL_CLEANBUF: - zeromem(buf, LTC_FILE_READ_BUFSIZE); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&st, sizeof(st)); -#endif - XFREE(buf); - return err; -#endif -} - -#endif diff --git a/src/mac/kmac/kmac_memory.c b/src/mac/kmac/kmac_memory.c deleted file mode 100644 index 0b950460..00000000 --- a/src/mac/kmac/kmac_memory.c +++ /dev/null @@ -1,47 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_KMAC - -/** - KMAC a block of memory to produce the authentication tag - - @param variant 128 or 256 (optionally OR-ed with LTC_KMAC_XOF) - @param key The secret key - @param keylen The length of the secret key (octets) - @param cust Optional customization string (may be NULL when custlen == 0) - @param custlen Length of the customization string (octets) - @param in The data to authenticate - @param inlen The length of the data (octets) - @param out [out] Destination of the MAC - @param outlen [in/out] Requested length on entry, produced length on return - @return CRYPT_OK if successful -*/ -int kmac_memory(int variant, - const unsigned char *key, unsigned long keylen, - const unsigned char *cust, unsigned long custlen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - kmac_state st; - int err; - - LTC_ARGCHK(key != NULL || keylen == 0); - LTC_ARGCHK(cust != NULL || custlen == 0); - LTC_ARGCHK(in != NULL || inlen == 0); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((err = kmac_init(&st, variant, key, keylen, cust, custlen)) != CRYPT_OK) goto LBL_ERR; - if ((err = kmac_process(&st, in, inlen)) != CRYPT_OK) goto LBL_ERR; - err = kmac_done(&st, out, outlen); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&st, sizeof(st)); -#endif - return err; -} - -#endif diff --git a/src/mac/kmac/kmac_memory_multi.c b/src/mac/kmac/kmac_memory_multi.c deleted file mode 100644 index f5ba283c..00000000 --- a/src/mac/kmac/kmac_memory_multi.c +++ /dev/null @@ -1,60 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_KMAC - -/** - KMAC multiple blocks of memory to produce the authentication tag - - @param variant 128 or 256 (optionally OR-ed with LTC_KMAC_XOF) - @param key The secret key - @param keylen The length of the secret key (octets) - @param cust Optional customization string (may be NULL when custlen == 0) - @param custlen Length of the customization string (octets) - @param out [out] Destination of the MAC - @param outlen [in/out] Requested length on entry, produced length on return - @param in The data to authenticate - @param inlen The length of the data (octets) - @param ... tuples of (data, len) pairs to authenticate, terminated with (NULL, x) - @return CRYPT_OK if successful -*/ -int kmac_memory_multi(int variant, - const unsigned char *key, unsigned long keylen, - const unsigned char *cust, unsigned long custlen, - unsigned char *out, unsigned long *outlen, - const unsigned char *in, unsigned long inlen, ...) -{ - kmac_state st; - int err; - va_list args; - const unsigned char *curptr; - unsigned long curlen; - - LTC_ARGCHK(key != NULL || keylen == 0); - LTC_ARGCHK(cust != NULL || custlen == 0); - LTC_ARGCHK(in != NULL || inlen == 0); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - va_start(args, inlen); - curptr = in; - curlen = inlen; - if ((err = kmac_init(&st, variant, key, keylen, cust, custlen)) != CRYPT_OK) goto LBL_ERR; - for (;;) { - if ((err = kmac_process(&st, curptr, curlen)) != CRYPT_OK) goto LBL_ERR; - curptr = va_arg(args, const unsigned char*); - if (curptr == NULL) break; - curlen = va_arg(args, unsigned long); - } - err = kmac_done(&st, out, outlen); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&st, sizeof(st)); -#endif - va_end(args); - return err; -} - -#endif diff --git a/src/mac/kmac/kmac_test.c b/src/mac/kmac/kmac_test.c deleted file mode 100644 index cf8a003d..00000000 --- a/src/mac/kmac/kmac_test.c +++ /dev/null @@ -1,123 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_KMAC - -/* Test vectors from NIST SP 800-185 sample document (KMAC_samples.pdf) */ -int kmac_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const unsigned char key[32] = { - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, - 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F - }; - static const unsigned char data4[4] = { 0x00, 0x01, 0x02, 0x03 }; - static unsigned char data200[200]; - static const char tag_app[] = "My Tagged Application"; - - static const struct { - int variant; - unsigned long custlen; - unsigned long inlen; - unsigned long outlen; - const unsigned char *in; - unsigned char out[64]; - } tests[] = { - /* sample #1: KMAC128, S="" */ - { LTC_KMAC128, 0, 4, 32, data4, { - 0xE5, 0x78, 0x0B, 0x0D, 0x3E, 0xA6, 0xF7, 0xD3, 0xA4, 0x29, 0xC5, 0x70, 0x6A, 0xA4, 0x3A, 0x00, - 0xFA, 0xDB, 0xD7, 0xD4, 0x96, 0x28, 0x83, 0x9E, 0x31, 0x87, 0x24, 0x3F, 0x45, 0x6E, 0xE1, 0x4E } }, - /* sample #2: KMAC128, S="My Tagged Application" */ - { LTC_KMAC128, 21, 4, 32, data4, { - 0x3B, 0x1F, 0xBA, 0x96, 0x3C, 0xD8, 0xB0, 0xB5, 0x9E, 0x8C, 0x1A, 0x6D, 0x71, 0x88, 0x8B, 0x71, - 0x43, 0x65, 0x1A, 0xF8, 0xBA, 0x0A, 0x70, 0x70, 0xC0, 0x97, 0x9E, 0x28, 0x11, 0x32, 0x4A, 0xA5 } }, - /* sample #3: KMAC128, 200-byte input, S="My Tagged Application" */ - { LTC_KMAC128, 21, 200, 32, data200, { - 0x1F, 0x5B, 0x4E, 0x6C, 0xCA, 0x02, 0x20, 0x9E, 0x0D, 0xCB, 0x5C, 0xA6, 0x35, 0xB8, 0x9A, 0x15, - 0xE2, 0x71, 0xEC, 0xC7, 0x60, 0x07, 0x1D, 0xFD, 0x80, 0x5F, 0xAA, 0x38, 0xF9, 0x72, 0x92, 0x30 } }, - /* sample #4: KMAC256, S="My Tagged Application" */ - { LTC_KMAC256, 21, 4, 64, data4, { - 0x20, 0xC5, 0x70, 0xC3, 0x13, 0x46, 0xF7, 0x03, 0xC9, 0xAC, 0x36, 0xC6, 0x1C, 0x03, 0xCB, 0x64, - 0xC3, 0x97, 0x0D, 0x0C, 0xFC, 0x78, 0x7E, 0x9B, 0x79, 0x59, 0x9D, 0x27, 0x3A, 0x68, 0xD2, 0xF7, - 0xF6, 0x9D, 0x4C, 0xC3, 0xDE, 0x9D, 0x10, 0x4A, 0x35, 0x16, 0x89, 0xF2, 0x7C, 0xF6, 0xF5, 0x95, - 0x1F, 0x01, 0x03, 0xF3, 0x3F, 0x4F, 0x24, 0x87, 0x10, 0x24, 0xD9, 0xC2, 0x77, 0x73, 0xA8, 0xDD } }, - /* sample #5: KMAC256, 200-byte input, S="" */ - { LTC_KMAC256, 0, 200, 64, data200, { - 0x75, 0x35, 0x8C, 0xF3, 0x9E, 0x41, 0x49, 0x4E, 0x94, 0x97, 0x07, 0x92, 0x7C, 0xEE, 0x0A, 0xF2, - 0x0A, 0x3F, 0xF5, 0x53, 0x90, 0x4C, 0x86, 0xB0, 0x8F, 0x21, 0xCC, 0x41, 0x4B, 0xCF, 0xD6, 0x91, - 0x58, 0x9D, 0x27, 0xCF, 0x5E, 0x15, 0x36, 0x9C, 0xBB, 0xFF, 0x8B, 0x9A, 0x4C, 0x2E, 0xB1, 0x78, - 0x00, 0x85, 0x5D, 0x02, 0x35, 0xFF, 0x63, 0x5D, 0xA8, 0x25, 0x33, 0xEC, 0x6B, 0x75, 0x9B, 0x69 } }, - /* sample #7: KMACXOF128, S="" */ - { LTC_KMAC128_XOF, 0, 4, 32, data4, { - 0xCD, 0x83, 0x74, 0x0B, 0xBD, 0x92, 0xCC, 0xC8, 0xCF, 0x03, 0x2B, 0x14, 0x81, 0xA0, 0xF4, 0x46, - 0x0E, 0x7C, 0xA9, 0xDD, 0x12, 0xB0, 0x8A, 0x0C, 0x40, 0x31, 0x17, 0x8B, 0xAC, 0xD6, 0xEC, 0x35 } }, - /* sample #8: KMACXOF128, S="My Tagged Application" */ - { LTC_KMAC128_XOF, 21, 4, 32, data4, { - 0x31, 0xA4, 0x45, 0x27, 0xB4, 0xED, 0x9F, 0x5C, 0x61, 0x01, 0xD1, 0x1D, 0xE6, 0xD2, 0x6F, 0x06, - 0x20, 0xAA, 0x5C, 0x34, 0x1D, 0xEF, 0x41, 0x29, 0x96, 0x57, 0xFE, 0x9D, 0xF1, 0xA3, 0xB1, 0x6C } }, - /* sample #9: KMACXOF128, 200-byte input, S="My Tagged Application" */ - { LTC_KMAC128_XOF, 21, 200, 32, data200, { - 0x47, 0x02, 0x6C, 0x7C, 0xD7, 0x93, 0x08, 0x4A, 0xA0, 0x28, 0x3C, 0x25, 0x3E, 0xF6, 0x58, 0x49, - 0x0C, 0x0D, 0xB6, 0x14, 0x38, 0xB8, 0x32, 0x6F, 0xE9, 0xBD, 0xDF, 0x28, 0x1B, 0x83, 0xAE, 0x0F } }, - /* sample #10: KMACXOF256, S="My Tagged Application" */ - { LTC_KMAC256_XOF, 21, 4, 64, data4, { - 0x17, 0x55, 0x13, 0x3F, 0x15, 0x34, 0x75, 0x2A, 0xAD, 0x07, 0x48, 0xF2, 0xC7, 0x06, 0xFB, 0x5C, - 0x78, 0x45, 0x12, 0xCA, 0xB8, 0x35, 0xCD, 0x15, 0x67, 0x6B, 0x16, 0xC0, 0xC6, 0x64, 0x7F, 0xA9, - 0x6F, 0xAA, 0x7A, 0xF6, 0x34, 0xA0, 0xBF, 0x8F, 0xF6, 0xDF, 0x39, 0x37, 0x4F, 0xA0, 0x0F, 0xAD, - 0x9A, 0x39, 0xE3, 0x22, 0xA7, 0xC9, 0x20, 0x65, 0xA6, 0x4E, 0xB1, 0xFB, 0x08, 0x01, 0xEB, 0x2B } }, - /* sample #11: KMACXOF256, 200-byte input, S="" */ - { LTC_KMAC256_XOF, 0, 200, 64, data200, { - 0xFF, 0x7B, 0x17, 0x1F, 0x1E, 0x8A, 0x2B, 0x24, 0x68, 0x3E, 0xED, 0x37, 0x83, 0x0E, 0xE7, 0x97, - 0x53, 0x8B, 0xA8, 0xDC, 0x56, 0x3F, 0x6D, 0xA1, 0xE6, 0x67, 0x39, 0x1A, 0x75, 0xED, 0xC0, 0x2C, - 0xA6, 0x33, 0x07, 0x9F, 0x81, 0xCE, 0x12, 0xA2, 0x5F, 0x45, 0x61, 0x5E, 0xC8, 0x99, 0x72, 0x03, - 0x1D, 0x18, 0x33, 0x73, 0x31, 0xD2, 0x4C, 0xEB, 0x8F, 0x8C, 0xA8, 0xE6, 0xA1, 0x9F, 0xD9, 0x8B } } - }; - unsigned int i; - unsigned char buf[64]; - unsigned long buflen; - int err; - - for (i = 0; i < sizeof(data200); ++i) data200[i] = (unsigned char)i; - - for (i = 0; i < sizeof(tests) / sizeof(tests[0]); ++i) { - const unsigned char *cust = (tests[i].custlen == 0) ? NULL : (const unsigned char*)tag_app; - buflen = tests[i].outlen; - if ((err = kmac_memory(tests[i].variant, key, sizeof(key), cust, tests[i].custlen, - tests[i].in, tests[i].inlen, buf, &buflen)) != CRYPT_OK) return err; - if (ltc_compare_testvector(buf, buflen, tests[i].out, tests[i].outlen, "kmac", (int)i) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - } - - /* sample #6: KMAC256, 200-byte input, S="My Tagged Application", processed one byte at a time */ - { - static const unsigned char sample6[64] = { - 0xB5, 0x86, 0x18, 0xF7, 0x1F, 0x92, 0xE1, 0xD5, 0x6C, 0x1B, 0x8C, 0x55, 0xDD, 0xD7, 0xCD, 0x18, - 0x8B, 0x97, 0xB4, 0xCA, 0x4D, 0x99, 0x83, 0x1E, 0xB2, 0x69, 0x9A, 0x83, 0x7D, 0xA2, 0xE4, 0xD9, - 0x70, 0xFB, 0xAC, 0xFD, 0xE5, 0x00, 0x33, 0xAE, 0xA5, 0x85, 0xF1, 0xA2, 0x70, 0x85, 0x10, 0xC3, - 0x2D, 0x07, 0x88, 0x08, 0x01, 0xBD, 0x18, 0x28, 0x98, 0xFE, 0x47, 0x68, 0x76, 0xFC, 0x89, 0x65 - }; - kmac_state st; - unsigned int j; - if ((err = kmac_init(&st, LTC_KMAC256, key, sizeof(key), (const unsigned char*)tag_app, 21)) != CRYPT_OK) return err; - for (j = 0; j < sizeof(data200); ++j) { - if ((err = kmac_process(&st, &data200[j], 1)) != CRYPT_OK) return err; - } - buflen = 64; - if ((err = kmac_done(&st, buf, &buflen)) != CRYPT_OK) return err; - if (ltc_compare_testvector(buf, buflen, sample6, sizeof(sample6), "kmac stream", 0) != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - } - - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/mac/omac/omac_done.c b/src/mac/omac/omac_done.c deleted file mode 100644 index 7997d7a3..00000000 --- a/src/mac/omac/omac_done.c +++ /dev/null @@ -1,71 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file omac_done.c - OMAC1 support, terminate a stream, Tom St Denis -*/ - -#ifdef LTC_OMAC - -/** - Terminate an OMAC stream - @param omac The OMAC state - @param out [out] Destination for the authentication tag - @param outlen [in/out] The max size and resulting size of the authentication tag - @return CRYPT_OK if successful -*/ -int omac_done(omac_state *omac, unsigned char *out, unsigned long *outlen) -{ - int err, mode; - unsigned x; - - LTC_ARGCHK(omac != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((omac->buflen > (int)sizeof(omac->block)) || (omac->buflen < 0) || - (omac->blklen > (int)sizeof(omac->block)) || (omac->buflen > omac->blklen)) { - return CRYPT_INVALID_ARG; - } - - /* figure out mode */ - if (omac->buflen != omac->blklen) { - /* add the 0x80 byte */ - omac->block[omac->buflen++] = 0x80; - - /* pad with 0x00 */ - while (omac->buflen < omac->blklen) { - omac->block[omac->buflen++] = 0x00; - } - mode = 1; - } else { - mode = 0; - } - - /* now xor prev + Lu[mode] */ - for (x = 0; x < (unsigned)omac->blklen; x++) { - omac->block[x] ^= omac->prev[x] ^ omac->Lu[mode][x]; - } - - /* encrypt it */ - if ((err = ecb_encrypt_block(omac->block, omac->block, &omac->key)) != CRYPT_OK) { - return err; - } - ecb_done(&omac->key); - - /* output it */ - for (x = 0; x < (unsigned)omac->blklen && x < *outlen; x++) { - out[x] = omac->block[x]; - } - *outlen = x; - -#ifdef LTC_CLEAN_STACK - zeromem(omac, sizeof(*omac)); -#endif - return CRYPT_OK; -} - -#endif - diff --git a/src/mac/omac/omac_file.c b/src/mac/omac/omac_file.c deleted file mode 100644 index 012958a4..00000000 --- a/src/mac/omac/omac_file.c +++ /dev/null @@ -1,87 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file omac_file.c - OMAC1 support, process a file, Tom St Denis -*/ - -#ifdef LTC_OMAC - -/** - OMAC a file - @param cipher The index of the cipher desired - @param key The secret key - @param keylen The length of the secret key (octets) - @param filename The name of the file you wish to OMAC - @param out [out] Where the authentication tag is to be stored - @param outlen [in/out] The max size and resulting size of the authentication tag - @return CRYPT_OK if successful, CRYPT_NOP if file support has been disabled -*/ -int omac_file(int cipher, - const unsigned char *key, unsigned long keylen, - const char *filename, - unsigned char *out, unsigned long *outlen) -{ -#ifdef LTC_NO_FILE - LTC_UNUSED_PARAM(cipher); - LTC_UNUSED_PARAM(key); - LTC_UNUSED_PARAM(keylen); - LTC_UNUSED_PARAM(filename); - LTC_UNUSED_PARAM(out); - LTC_UNUSED_PARAM(outlen); - return CRYPT_NOP; -#else - size_t x; - int err; - omac_state omac; - FILE *in; - unsigned char *buf; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(filename != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((buf = XMALLOC(LTC_FILE_READ_BUFSIZE)) == NULL) { - return CRYPT_MEM; - } - - if ((err = omac_init(&omac, cipher, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - - in = fopen(filename, "rb"); - if (in == NULL) { - err = CRYPT_FILE_NOTFOUND; - goto LBL_ERR; - } - - do { - x = fread(buf, 1, LTC_FILE_READ_BUFSIZE, in); - if ((err = omac_process(&omac, buf, (unsigned long)x)) != CRYPT_OK) { - fclose(in); - goto LBL_CLEANBUF; - } - } while (x == LTC_FILE_READ_BUFSIZE); - - if (fclose(in) != 0) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; - } - - err = omac_done(&omac, out, outlen); - -LBL_CLEANBUF: - zeromem(buf, LTC_FILE_READ_BUFSIZE); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&omac, sizeof(omac_state)); -#endif - XFREE(buf); - return err; -#endif -} - -#endif diff --git a/src/mac/omac/omac_memory.c b/src/mac/omac/omac_memory.c deleted file mode 100644 index 56ac137a..00000000 --- a/src/mac/omac/omac_memory.c +++ /dev/null @@ -1,73 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file omac_memory.c - OMAC1 support, process a block of memory, Tom St Denis -*/ - -#ifdef LTC_OMAC - -/** - OMAC a block of memory - @param cipher The index of the desired cipher - @param key The secret key - @param keylen The length of the secret key (octets) - @param in The data to send through OMAC - @param inlen The length of the data to send through OMAC (octets) - @param out [out] The destination of the authentication tag - @param outlen [in/out] The max size and resulting size of the authentication tag (octets) - @return CRYPT_OK if successful -*/ -int omac_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - int err; - omac_state *omac; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* is the cipher valid? */ - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - - /* Use accelerator if found */ - if (cipher_descriptor[cipher].omac_memory != NULL) { - return cipher_descriptor[cipher].omac_memory(key, keylen, in, inlen, out, outlen); - } - - /* allocate ram for omac state */ - omac = XMALLOC(sizeof(omac_state)); - if (omac == NULL) { - return CRYPT_MEM; - } - - /* omac process the message */ - if ((err = omac_init(omac, cipher, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = omac_process(omac, in, inlen)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = omac_done(omac, out, outlen)) != CRYPT_OK) { - goto LBL_ERR; - } - - err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(omac, sizeof(omac_state)); -#endif - - XFREE(omac); - return err; -} - -#endif diff --git a/src/mac/omac/omac_memory_multi.c b/src/mac/omac/omac_memory_multi.c deleted file mode 100644 index 94d4cbac..00000000 --- a/src/mac/omac/omac_memory_multi.c +++ /dev/null @@ -1,87 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file omac_memory_multi.c - OMAC1 support, process multiple blocks of memory, Tom St Denis -*/ - -#ifdef LTC_OMAC - -static LTC_INLINE int s_omac_vprocess(omac_state *omac, const unsigned char *in, unsigned long inlen, va_list args) -{ - const unsigned char * curptr = in; - unsigned long curlen = inlen; - int err; - for (;;) { - /* process buf */ - if ((err = omac_process(omac, curptr, curlen)) != CRYPT_OK) { - return err; - } - /* step to next */ - curptr = va_arg(args, const unsigned char*); - if (curptr == NULL) { - break; - } - curlen = va_arg(args, unsigned long); - } - return CRYPT_OK; -} - -int omac_vprocess(omac_state *omac, const unsigned char *in, unsigned long inlen, va_list args) -{ - return s_omac_vprocess(omac, in, inlen, args); -} - -/** - OMAC multiple blocks of memory - @param cipher The index of the desired cipher - @param key The secret key - @param keylen The length of the secret key (octets) - @param out [out] The destination of the authentication tag - @param outlen [in/out] The max size and resulting size of the authentication tag (octets) - @param in The data to send through OMAC - @param inlen The length of the data to send through OMAC (octets) - @param ... tuples of (data,len) pairs to OMAC, terminated with a (NULL,x) (x=don't care) - @return CRYPT_OK if successful -*/ -int omac_memory_multi(int cipher, - const unsigned char *key, unsigned long keylen, - unsigned char *out, unsigned long *outlen, - const unsigned char *in, unsigned long inlen, ...) -{ - int err; - omac_state *omac; - va_list args; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* allocate ram for omac state */ - omac = XMALLOC(sizeof(omac_state)); - if (omac == NULL) { - return CRYPT_MEM; - } - - /* omac process the message */ - if ((err = omac_init(omac, cipher, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - va_start(args, inlen); - if ((err = s_omac_vprocess(omac, in, inlen, args)) != CRYPT_OK) { - goto LBL_ERR; - } - err = omac_done(omac, out, outlen); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(omac, sizeof(omac_state)); -#endif - XFREE(omac); - va_end(args); - return err; -} - -#endif diff --git a/src/mac/omac/omac_process.c b/src/mac/omac/omac_process.c deleted file mode 100644 index a86145ac..00000000 --- a/src/mac/omac/omac_process.c +++ /dev/null @@ -1,72 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file omac_process.c - OMAC1 support, process data, Tom St Denis -*/ - - -#ifdef LTC_OMAC - -/** - Process data through OMAC - @param omac The OMAC state - @param in The input data to send through OMAC - @param inlen The length of the input (octets) - @return CRYPT_OK if successful -*/ -int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen) -{ - unsigned long n, x; - int err; - - LTC_ARGCHK(omac != NULL); - LTC_ARGCHK(in != NULL || inlen == 0); - - if ((omac->buflen > (int)sizeof(omac->block)) || (omac->buflen < 0) || - (omac->blklen > (int)sizeof(omac->block)) || (omac->buflen > omac->blklen)) { - return CRYPT_INVALID_ARG; - } - -#ifdef LTC_FAST - if (omac->buflen == 0 && inlen > (unsigned long)omac->blklen) { - for (x = 0; x < (inlen - omac->blklen); x += omac->blklen) { - for (n = 0; n < (unsigned long)omac->blklen; n += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2(&omac->prev[n], &in[n]); - } - in += omac->blklen; - if ((err = ecb_encrypt_block(omac->prev, omac->prev, &omac->key)) != CRYPT_OK) { - return err; - } - } - inlen -= x; - } -#endif - - while (inlen != 0) { - /* ok if the block is full we xor in prev, encrypt and replace prev */ - if (omac->buflen == omac->blklen) { - for (x = 0; x < (unsigned long)omac->blklen; x++) { - omac->block[x] ^= omac->prev[x]; - } - if ((err = ecb_encrypt_block(omac->block, omac->prev, &omac->key)) != CRYPT_OK) { - return err; - } - omac->buflen = 0; - } - - /* add bytes */ - n = MIN(inlen, (unsigned long)(omac->blklen - omac->buflen)); - XMEMCPY(omac->block + omac->buflen, in, n); - omac->buflen += n; - inlen -= n; - in += n; - } - - return CRYPT_OK; -} - -#endif - diff --git a/src/mac/pelican/pelican.c b/src/mac/pelican/pelican.c deleted file mode 100644 index 53c1e3eb..00000000 --- a/src/mac/pelican/pelican.c +++ /dev/null @@ -1,156 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pelican.c - Pelican MAC, initialize state, by Tom St Denis -*/ - -#ifdef LTC_PELICAN - -#ifndef LTC_AES_TAB_C -#define LTC_AES_TAB_C -#define ENCRYPT_ONLY -#define PELI_TAB -#include "../../ciphers/aes/aes_tab.c" -#endif - -/** - Initialize a Pelican state - @param pelmac The Pelican state to initialize - @param key The secret key - @param keylen The length of the secret key (octets) - @return CRYPT_OK if successful -*/ -int pelican_init(pelican_state *pelmac, const unsigned char *key, unsigned long keylen) -{ - int err; - - LTC_ARGCHK(pelmac != NULL); - LTC_ARGCHK(key != NULL); - -#ifdef LTC_FAST - if (16 % sizeof(LTC_FAST_TYPE)) { - return CRYPT_INVALID_ARG; - } -#endif - - if ((err = aes_setup(key, keylen, 0, &pelmac->K)) != CRYPT_OK) { - return err; - } - - zeromem(pelmac->state, 16); - aes_ecb_encrypt(pelmac->state, pelmac->state, &pelmac->K); - pelmac->buflen = 0; - - return CRYPT_OK; -} - -static void s_four_rounds(pelican_state *pelmac) -{ - ulong32 s0, s1, s2, s3, t0, t1, t2, t3; - int r; - - LOAD32H(s0, pelmac->state ); - LOAD32H(s1, pelmac->state + 4); - LOAD32H(s2, pelmac->state + 8); - LOAD32H(s3, pelmac->state + 12); - for (r = 0; r < 4; r++) { - t0 = - Te0(LTC_BYTE(s0, 3)) ^ - Te1(LTC_BYTE(s1, 2)) ^ - Te2(LTC_BYTE(s2, 1)) ^ - Te3(LTC_BYTE(s3, 0)); - t1 = - Te0(LTC_BYTE(s1, 3)) ^ - Te1(LTC_BYTE(s2, 2)) ^ - Te2(LTC_BYTE(s3, 1)) ^ - Te3(LTC_BYTE(s0, 0)); - t2 = - Te0(LTC_BYTE(s2, 3)) ^ - Te1(LTC_BYTE(s3, 2)) ^ - Te2(LTC_BYTE(s0, 1)) ^ - Te3(LTC_BYTE(s1, 0)); - t3 = - Te0(LTC_BYTE(s3, 3)) ^ - Te1(LTC_BYTE(s0, 2)) ^ - Te2(LTC_BYTE(s1, 1)) ^ - Te3(LTC_BYTE(s2, 0)); - s0 = t0; s1 = t1; s2 = t2; s3 = t3; - } - STORE32H(s0, pelmac->state ); - STORE32H(s1, pelmac->state + 4); - STORE32H(s2, pelmac->state + 8); - STORE32H(s3, pelmac->state + 12); -} - -/** - Process a block of text through Pelican - @param pelmac The Pelican MAC state - @param in The input - @param inlen The length input (octets) - @return CRYPT_OK on success - */ -int pelican_process(pelican_state *pelmac, const unsigned char *in, unsigned long inlen) -{ - - LTC_ARGCHK(pelmac != NULL); - LTC_ARGCHK(in != NULL); - - /* check range */ - if (pelmac->buflen < 0 || pelmac->buflen > 15) { - return CRYPT_INVALID_ARG; - } - -#ifdef LTC_FAST - if (pelmac->buflen == 0) { - while (inlen & ~15) { - int x; - for (x = 0; x < 16; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2((unsigned char *)pelmac->state + x, (unsigned char *)in + x); - } - s_four_rounds(pelmac); - in += 16; - inlen -= 16; - } - } -#endif - - while (inlen--) { - pelmac->state[pelmac->buflen++] ^= *in++; - if (pelmac->buflen == 16) { - s_four_rounds(pelmac); - pelmac->buflen = 0; - } - } - return CRYPT_OK; -} - -/** - Terminate Pelican MAC - @param pelmac The Pelican MAC state - @param out [out] The TAG - @return CRYPT_OK on sucess -*/ -int pelican_done(pelican_state *pelmac, unsigned char *out) -{ - LTC_ARGCHK(pelmac != NULL); - LTC_ARGCHK(out != NULL); - - /* check range */ - if (pelmac->buflen < 0 || pelmac->buflen > 16) { - return CRYPT_INVALID_ARG; - } - - if (pelmac->buflen == 16) { - s_four_rounds(pelmac); - pelmac->buflen = 0; - } - pelmac->state[pelmac->buflen++] ^= 0x80; - aes_ecb_encrypt(pelmac->state, out, &pelmac->K); - aes_done(&pelmac->K); - return CRYPT_OK; -} - -#endif diff --git a/src/mac/pelican/pelican_memory.c b/src/mac/pelican/pelican_memory.c deleted file mode 100644 index f67eaee2..00000000 --- a/src/mac/pelican/pelican_memory.c +++ /dev/null @@ -1,47 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pelican_memory.c - Pelican MAC, MAC a block of memory, by Tom St Denis -*/ - -#ifdef LTC_PELICAN - -/** - Pelican block of memory - @param key The key for the MAC - @param keylen The length of the key (octets) - @param in The input to MAC - @param inlen The length of the input (octets) - @param out [out] The output TAG - @return CRYPT_OK on success -*/ -int pelican_memory(const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out) -{ - pelican_state *pel; - int err; - - pel = XMALLOC(sizeof(*pel)); - if (pel == NULL) { - return CRYPT_MEM; - } - - if ((err = pelican_init(pel, key, keylen)) != CRYPT_OK) { - XFREE(pel); - return err; - } - if ((err = pelican_process(pel, in ,inlen)) != CRYPT_OK) { - XFREE(pel); - return err; - } - err = pelican_done(pel, out); - XFREE(pel); - return err; -} - - -#endif diff --git a/src/mac/pelican/pelican_test.c b/src/mac/pelican/pelican_test.c deleted file mode 100644 index 7540701a..00000000 --- a/src/mac/pelican/pelican_test.c +++ /dev/null @@ -1,103 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pelican_test.c - Pelican MAC, test, by Tom St Denis -*/ - -#ifdef LTC_PELICAN - -int pelican_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - unsigned char K[32], MSG[64], T[16]; - int keylen, ptlen; - } tests[] = { -/* K=16, M=0 */ -{ - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }, - { 0 }, - { 0xeb, 0x58, 0x37, 0x15, 0xf8, 0x34, 0xde, 0xe5, - 0xa4, 0xd1, 0x6e, 0xe4, 0xb9, 0xd7, 0x76, 0x0e, }, - 16, 0 -}, - -/* K=16, M=3 */ -{ - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }, - { 0x00, 0x01, 0x02 }, - { 0x1c, 0x97, 0x40, 0x60, 0x6c, 0x58, 0x17, 0x2d, - 0x03, 0x94, 0x19, 0x70, 0x81, 0xc4, 0x38, 0x54, }, - 16, 3 -}, - -/* K=16, M=16 */ -{ - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }, - { 0x03, 0xcc, 0x46, 0xb8, 0xac, 0xa7, 0x9c, 0x36, - 0x1e, 0x8c, 0x6e, 0xa6, 0x7b, 0x89, 0x32, 0x49, }, - 16, 16 -}, - -/* K=16, M=32 */ -{ - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F }, - { 0x89, 0xcc, 0x36, 0x58, 0x1b, 0xdd, 0x4d, 0xb5, - 0x78, 0xbb, 0xac, 0xf0, 0xff, 0x8b, 0x08, 0x15, }, - 16, 32 -}, - -/* K=16, M=35 */ -{ - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x23 }, - { 0x4a, 0x7d, 0x45, 0x4d, 0xcd, 0xb5, 0xda, 0x8d, - 0x48, 0x78, 0x16, 0x48, 0x5d, 0x45, 0x95, 0x99, }, - 16, 35 -}, -}; - int x, err; - unsigned char out[16]; - pelican_state pel; - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { - if ((err = pelican_init(&pel, tests[x].K, tests[x].keylen)) != CRYPT_OK) { - return err; - } - if ((err = pelican_process(&pel, tests[x].MSG, tests[x].ptlen)) != CRYPT_OK) { - return err; - } - if ((err = pelican_done(&pel, out)) != CRYPT_OK) { - return err; - } - - if (ltc_compare_testvector(out, 16, tests[x].T, 16, "PELICAN", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - - -#endif diff --git a/src/mac/pmac/pmac_done.c b/src/mac/pmac/pmac_done.c deleted file mode 100644 index bcad06ad..00000000 --- a/src/mac/pmac/pmac_done.c +++ /dev/null @@ -1,59 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pmac_done.c - PMAC implementation, terminate a session, by Tom St Denis -*/ - -#ifdef LTC_PMAC - -int pmac_done(pmac_state *pmac, unsigned char *out, unsigned long *outlen) -{ - int err, x; - - LTC_ARGCHK(pmac != NULL); - LTC_ARGCHK(out != NULL); - - if ((pmac->buflen > (int)sizeof(pmac->block)) || (pmac->buflen < 0) || - (pmac->block_len > (int)sizeof(pmac->block)) || (pmac->buflen > pmac->block_len)) { - return CRYPT_INVALID_ARG; - } - - - /* handle padding. If multiple xor in L/x */ - - if (pmac->buflen == pmac->block_len) { - /* xor Lr against the checksum */ - for (x = 0; x < pmac->block_len; x++) { - pmac->checksum[x] ^= pmac->block[x] ^ pmac->Lr[x]; - } - } else { - /* otherwise xor message bytes then the 0x80 byte */ - for (x = 0; x < pmac->buflen; x++) { - pmac->checksum[x] ^= pmac->block[x]; - } - pmac->checksum[x] ^= 0x80; - } - - /* encrypt it */ - if ((err = ecb_encrypt_block(pmac->checksum, pmac->checksum, &pmac->key)) != CRYPT_OK) { - return err; - } - ecb_done(&pmac->key); - - /* store it */ - for (x = 0; x < pmac->block_len && x < (int)*outlen; x++) { - out[x] = pmac->checksum[x]; - } - *outlen = x; - -#ifdef LTC_CLEAN_STACK - zeromem(pmac, sizeof(*pmac)); -#endif - return CRYPT_OK; -} - -#endif - diff --git a/src/mac/pmac/pmac_file.c b/src/mac/pmac/pmac_file.c deleted file mode 100644 index fca9b001..00000000 --- a/src/mac/pmac/pmac_file.c +++ /dev/null @@ -1,88 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pmac_file.c - PMAC implementation, process a file, by Tom St Denis -*/ - -#ifdef LTC_PMAC - -/** - PMAC a file - @param cipher The index of the cipher desired - @param key The secret key - @param keylen The length of the secret key (octets) - @param filename The name of the file to send through PMAC - @param out [out] Destination for the authentication tag - @param outlen [in/out] Max size and resulting size of the authentication tag - @return CRYPT_OK if successful, CRYPT_NOP if file support has been disabled -*/ -int pmac_file(int cipher, - const unsigned char *key, unsigned long keylen, - const char *filename, - unsigned char *out, unsigned long *outlen) -{ -#ifdef LTC_NO_FILE - LTC_UNUSED_PARAM(cipher); - LTC_UNUSED_PARAM(key); - LTC_UNUSED_PARAM(keylen); - LTC_UNUSED_PARAM(filename); - LTC_UNUSED_PARAM(out); - LTC_UNUSED_PARAM(outlen); - return CRYPT_NOP; -#else - size_t x; - int err; - pmac_state pmac; - FILE *in; - unsigned char *buf; - - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(filename != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((buf = XMALLOC(LTC_FILE_READ_BUFSIZE)) == NULL) { - return CRYPT_MEM; - } - - if ((err = pmac_init(&pmac, cipher, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - - in = fopen(filename, "rb"); - if (in == NULL) { - err = CRYPT_FILE_NOTFOUND; - goto LBL_ERR; - } - - do { - x = fread(buf, 1, LTC_FILE_READ_BUFSIZE, in); - if ((err = pmac_process(&pmac, buf, (unsigned long)x)) != CRYPT_OK) { - fclose(in); - goto LBL_CLEANBUF; - } - } while (x == LTC_FILE_READ_BUFSIZE); - - if (fclose(in) != 0) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; - } - - err = pmac_done(&pmac, out, outlen); - -LBL_CLEANBUF: - zeromem(buf, LTC_FILE_READ_BUFSIZE); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&pmac, sizeof(pmac_state)); -#endif - XFREE(buf); - return err; -#endif -} - -#endif diff --git a/src/mac/pmac/pmac_init.c b/src/mac/pmac/pmac_init.c deleted file mode 100644 index 46f645c4..00000000 --- a/src/mac/pmac/pmac_init.c +++ /dev/null @@ -1,140 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pmac_init.c - PMAC implementation, initialize state, by Tom St Denis -*/ - -#ifdef LTC_PMAC - -#define polys pmac_polys -static const struct { - int len; - unsigned char poly_div[MAXBLOCKSIZE], - poly_mul[MAXBLOCKSIZE]; -} polys[] = { -{ - 8, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B } -}, { - 16, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87 } -} -}; - -/** - Initialize a PMAC state - @param pmac The PMAC state to initialize - @param cipher The index of the desired cipher - @param key The secret key - @param keylen The length of the secret key (octets) - @return CRYPT_OK if successful -*/ -int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned long keylen) -{ - int poly, x, y, m, err; - unsigned char *L; - - LTC_ARGCHK(pmac != NULL); - LTC_ARGCHK(key != NULL); - - /* valid cipher? */ - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - - /* determine which polys to use */ - pmac->block_len = cipher_descriptor[cipher].block_length; - for (poly = 0; poly < (int)LTC_ARRAY_SIZE(polys); poly++) { - if (polys[poly].len == pmac->block_len) { - break; - } - } - if (poly >= (int)LTC_ARRAY_SIZE(polys)) { - return CRYPT_INVALID_ARG; - } - if (polys[poly].len != pmac->block_len) { - return CRYPT_INVALID_ARG; - } - -#ifdef LTC_FAST - if (pmac->block_len % sizeof(LTC_FAST_TYPE)) { - return CRYPT_INVALID_ARG; - } -#endif - - - /* schedule the key */ - if ((err = ecb_start(cipher, key, keylen, 0, &pmac->key)) != CRYPT_OK) { - return err; - } - - /* allocate L */ - L = XMALLOC(pmac->block_len); - if (L == NULL) { - return CRYPT_MEM; - } - - /* find L = E[0] */ - zeromem(L, pmac->block_len); - if ((err = ecb_encrypt_block(L, L, &pmac->key)) != CRYPT_OK) { - goto error; - } - - /* find Ls[i] = L << i for i == 0..31 */ - XMEMCPY(pmac->Ls[0], L, pmac->block_len); - for (x = 1; x < 32; x++) { - m = pmac->Ls[x-1][0] >> 7; - for (y = 0; y < pmac->block_len-1; y++) { - pmac->Ls[x][y] = ((pmac->Ls[x-1][y] << 1) | (pmac->Ls[x-1][y+1] >> 7)) & 255; - } - pmac->Ls[x][pmac->block_len-1] = (pmac->Ls[x-1][pmac->block_len-1] << 1) & 255; - - if (m == 1) { - for (y = 0; y < pmac->block_len; y++) { - pmac->Ls[x][y] ^= polys[poly].poly_mul[y]; - } - } - } - - /* find Lr = L / x */ - m = L[pmac->block_len-1] & 1; - - /* shift right */ - for (x = pmac->block_len - 1; x > 0; x--) { - pmac->Lr[x] = ((L[x] >> 1) | (L[x-1] << 7)) & 255; - } - pmac->Lr[0] = L[0] >> 1; - - if (m == 1) { - for (x = 0; x < pmac->block_len; x++) { - pmac->Lr[x] ^= polys[poly].poly_div[x]; - } - } - - /* zero buffer, counters, etc... */ - pmac->block_index = 1; - pmac->buflen = 0; - zeromem(pmac->block, sizeof(pmac->block)); - zeromem(pmac->Li, sizeof(pmac->Li)); - zeromem(pmac->checksum, sizeof(pmac->checksum)); - err = CRYPT_OK; -error: -#ifdef LTC_CLEAN_STACK - zeromem(L, pmac->block_len); -#endif - - XFREE(L); - - return err; -} - -#undef polys - -#endif diff --git a/src/mac/pmac/pmac_memory.c b/src/mac/pmac/pmac_memory.c deleted file mode 100644 index 46715471..00000000 --- a/src/mac/pmac/pmac_memory.c +++ /dev/null @@ -1,62 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pmac_memory.c - PMAC implementation, process a block of memory, by Tom St Denis -*/ - -#ifdef LTC_PMAC - -/** - PMAC a block of memory - @param cipher The index of the cipher desired - @param key The secret key - @param keylen The length of the secret key (octets) - @param in The data you wish to send through PMAC - @param inlen The length of data you wish to send through PMAC (octets) - @param out [out] Destination for the authentication tag - @param outlen [in/out] The max size and resulting size of the authentication tag - @return CRYPT_OK if successful -*/ -int pmac_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - int err; - pmac_state *pmac; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* allocate ram for pmac state */ - pmac = XMALLOC(sizeof(pmac_state)); - if (pmac == NULL) { - return CRYPT_MEM; - } - - if ((err = pmac_init(pmac, cipher, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = pmac_process(pmac, in, inlen)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = pmac_done(pmac, out, outlen)) != CRYPT_OK) { - goto LBL_ERR; - } - - err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(pmac, sizeof(pmac_state)); -#endif - - XFREE(pmac); - return err; -} - -#endif diff --git a/src/mac/pmac/pmac_memory_multi.c b/src/mac/pmac/pmac_memory_multi.c deleted file mode 100644 index 16ba8f65..00000000 --- a/src/mac/pmac/pmac_memory_multi.c +++ /dev/null @@ -1,76 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pmac_memory_multi.c - PMAC implementation, process multiple blocks of memory, by Tom St Denis -*/ - -#ifdef LTC_PMAC - -/** - PMAC multiple blocks of memory - @param cipher The index of the cipher desired - @param key The secret key - @param keylen The length of the secret key (octets) - @param out [out] Destination for the authentication tag - @param outlen [in/out] The max size and resulting size of the authentication tag - @param in The data you wish to send through PMAC - @param inlen The length of data you wish to send through PMAC (octets) - @param ... tuples of (data,len) pairs to PMAC, terminated with a (NULL,x) (x=don't care) - @return CRYPT_OK if successful -*/ -int pmac_memory_multi(int cipher, - const unsigned char *key, unsigned long keylen, - unsigned char *out, unsigned long *outlen, - const unsigned char *in, unsigned long inlen, ...) -{ - int err; - pmac_state *pmac; - va_list args; - const unsigned char *curptr; - unsigned long curlen; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* allocate ram for pmac state */ - pmac = XMALLOC(sizeof(pmac_state)); - if (pmac == NULL) { - return CRYPT_MEM; - } - - if ((err = pmac_init(pmac, cipher, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - va_start(args, inlen); - curptr = in; - curlen = inlen; - for (;;) { - /* process buf */ - if ((err = pmac_process(pmac, curptr, curlen)) != CRYPT_OK) { - goto LBL_ERR; - } - /* step to next */ - curptr = va_arg(args, const unsigned char*); - if (curptr == NULL) { - break; - } - curlen = va_arg(args, unsigned long); - } - if ((err = pmac_done(pmac, out, outlen)) != CRYPT_OK) { - goto LBL_ERR; - } -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(pmac, sizeof(pmac_state)); -#endif - XFREE(pmac); - va_end(args); - return err; -} - -#endif diff --git a/src/mac/pmac/pmac_ntz.c b/src/mac/pmac/pmac_ntz.c deleted file mode 100644 index 86142ba0..00000000 --- a/src/mac/pmac/pmac_ntz.c +++ /dev/null @@ -1,33 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pmac_ntz.c - PMAC implementation, internal function, by Tom St Denis -*/ - -#ifdef LTC_PMAC - -/** - Internal PMAC function -*/ -int pmac_ntz(unsigned long x) -{ -#if defined(LTC_HAVE_CTZL_BUILTIN) - if (x == 0) - return sizeof(unsigned long) * CHAR_BIT; - return __builtin_ctzl(x); -#else - int c; - x &= 0xFFFFFFFFUL; - c = 0; - while ((x & 1) == 0) { - ++c; - x >>= 1; - } - return c; -#endif -} - -#endif diff --git a/src/mac/pmac/pmac_process.c b/src/mac/pmac/pmac_process.c deleted file mode 100644 index 9872e9ba..00000000 --- a/src/mac/pmac/pmac_process.c +++ /dev/null @@ -1,85 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pmac_process.c - PMAC implementation, process data, by Tom St Denis -*/ - - -#ifdef LTC_PMAC - -/** - Process data in a PMAC stream - @param pmac The PMAC state - @param in The data to send through PMAC - @param inlen The length of the data to send through PMAC - @return CRYPT_OK if successful -*/ -int pmac_process(pmac_state *pmac, const unsigned char *in, unsigned long inlen) -{ - int err, n; - unsigned long x; - unsigned char Z[MAXBLOCKSIZE]; - - LTC_ARGCHK(pmac != NULL); - LTC_ARGCHK(in != NULL); - - if ((pmac->buflen > (int)sizeof(pmac->block)) || (pmac->buflen < 0) || - (pmac->block_len > (int)sizeof(pmac->block)) || (pmac->buflen > pmac->block_len)) { - return CRYPT_INVALID_ARG; - } - -#ifdef LTC_FAST - if (pmac->buflen == 0 && inlen > 16) { - unsigned long y; - for (x = 0; x < (inlen - 16); x += 16) { - pmac_shift_xor(pmac); - for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR3(&Z[y], &in[y], &pmac->Li[y]); - } - if ((err = ecb_encrypt_block(Z, Z, &pmac->key)) != CRYPT_OK) { - return err; - } - for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2(&pmac->checksum[y], &Z[y]); - } - in += 16; - } - inlen -= x; - } -#endif - - while (inlen != 0) { - /* ok if the block is full we xor in prev, encrypt and replace prev */ - if (pmac->buflen == pmac->block_len) { - pmac_shift_xor(pmac); - for (x = 0; x < (unsigned long)pmac->block_len; x++) { - Z[x] = pmac->Li[x] ^ pmac->block[x]; - } - if ((err = ecb_encrypt_block(Z, Z, &pmac->key)) != CRYPT_OK) { - return err; - } - for (x = 0; x < (unsigned long)pmac->block_len; x++) { - pmac->checksum[x] ^= Z[x]; - } - pmac->buflen = 0; - } - - /* add bytes */ - n = MIN(inlen, (unsigned long)(pmac->block_len - pmac->buflen)); - XMEMCPY(pmac->block + pmac->buflen, in, n); - pmac->buflen += n; - inlen -= n; - in += n; - } - -#ifdef LTC_CLEAN_STACK - zeromem(Z, sizeof(Z)); -#endif - - return CRYPT_OK; -} - -#endif diff --git a/src/mac/pmac/pmac_shift_xor.c b/src/mac/pmac/pmac_shift_xor.c deleted file mode 100644 index 764f3919..00000000 --- a/src/mac/pmac/pmac_shift_xor.c +++ /dev/null @@ -1,31 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pmac_shift_xor.c - PMAC implementation, internal function, by Tom St Denis -*/ - -#ifdef LTC_PMAC - -/** - Internal function. Performs the state update (adding correct multiple) - @param pmac The PMAC state. -*/ -void pmac_shift_xor(pmac_state *pmac) -{ - int x, y; - y = pmac_ntz(pmac->block_index++); -#ifdef LTC_FAST - for (x = 0; x < pmac->block_len; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2((unsigned char *)pmac->Li + x, (unsigned char *)pmac->Ls[y] + x); - } -#else - for (x = 0; x < pmac->block_len; x++) { - pmac->Li[x] ^= pmac->Ls[y][x]; - } -#endif -} - -#endif diff --git a/src/mac/poly1305/poly1305.c b/src/mac/poly1305/poly1305.c deleted file mode 100644 index 32cdb550..00000000 --- a/src/mac/poly1305/poly1305.c +++ /dev/null @@ -1,258 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * Public Domain poly1305 from Andrew Moon - * https://github.com/floodyberry/poly1305-donna - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_POLY1305 - -/* internal only */ -static void s_poly1305_block(poly1305_state *st, const unsigned char *in, unsigned long inlen) -{ - const unsigned long hibit = (st->final) ? 0 : (1UL << 24); /* 1 << 128 */ - ulong32 r0,r1,r2,r3,r4; - ulong32 s1,s2,s3,s4; - ulong32 h0,h1,h2,h3,h4; - ulong32 tmp; - ulong64 d0,d1,d2,d3,d4; - ulong32 c; - - r0 = st->r[0]; - r1 = st->r[1]; - r2 = st->r[2]; - r3 = st->r[3]; - r4 = st->r[4]; - - s1 = r1 * 5; - s2 = r2 * 5; - s3 = r3 * 5; - s4 = r4 * 5; - - h0 = st->h[0]; - h1 = st->h[1]; - h2 = st->h[2]; - h3 = st->h[3]; - h4 = st->h[4]; - - while (inlen >= 16) { - /* h += in[i] */ - LOAD32L(tmp, in+ 0); h0 += (tmp ) & 0x3ffffff; - LOAD32L(tmp, in+ 3); h1 += (tmp >> 2) & 0x3ffffff; - LOAD32L(tmp, in+ 6); h2 += (tmp >> 4) & 0x3ffffff; - LOAD32L(tmp, in+ 9); h3 += (tmp >> 6) & 0x3ffffff; - LOAD32L(tmp, in+12); h4 += (tmp >> 8) | hibit; - - /* h *= r */ - d0 = ((ulong64)h0 * r0) + ((ulong64)h1 * s4) + ((ulong64)h2 * s3) + ((ulong64)h3 * s2) + ((ulong64)h4 * s1); - d1 = ((ulong64)h0 * r1) + ((ulong64)h1 * r0) + ((ulong64)h2 * s4) + ((ulong64)h3 * s3) + ((ulong64)h4 * s2); - d2 = ((ulong64)h0 * r2) + ((ulong64)h1 * r1) + ((ulong64)h2 * r0) + ((ulong64)h3 * s4) + ((ulong64)h4 * s3); - d3 = ((ulong64)h0 * r3) + ((ulong64)h1 * r2) + ((ulong64)h2 * r1) + ((ulong64)h3 * r0) + ((ulong64)h4 * s4); - d4 = ((ulong64)h0 * r4) + ((ulong64)h1 * r3) + ((ulong64)h2 * r2) + ((ulong64)h3 * r1) + ((ulong64)h4 * r0); - - /* (partial) h %= p */ - c = (ulong32)(d0 >> 26); h0 = (ulong32)d0 & 0x3ffffff; - d1 += c; c = (ulong32)(d1 >> 26); h1 = (ulong32)d1 & 0x3ffffff; - d2 += c; c = (ulong32)(d2 >> 26); h2 = (ulong32)d2 & 0x3ffffff; - d3 += c; c = (ulong32)(d3 >> 26); h3 = (ulong32)d3 & 0x3ffffff; - d4 += c; c = (ulong32)(d4 >> 26); h4 = (ulong32)d4 & 0x3ffffff; - h0 += c * 5; c = (h0 >> 26); h0 = h0 & 0x3ffffff; - h1 += c; - - in += 16; - inlen -= 16; - } - - st->h[0] = h0; - st->h[1] = h1; - st->h[2] = h2; - st->h[3] = h3; - st->h[4] = h4; -} - -/** - Initialize an POLY1305 context. - @param st The POLY1305 state - @param key The secret key - @param keylen The length of the secret key (octets) - @return CRYPT_OK if successful -*/ -int poly1305_init(poly1305_state *st, const unsigned char *key, unsigned long keylen) -{ - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(keylen == 32); - - /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */ - LOAD32L(st->r[0], key + 0); st->r[0] = (st->r[0] ) & 0x3ffffff; - LOAD32L(st->r[1], key + 3); st->r[1] = (st->r[1] >> 2) & 0x3ffff03; - LOAD32L(st->r[2], key + 6); st->r[2] = (st->r[2] >> 4) & 0x3ffc0ff; - LOAD32L(st->r[3], key + 9); st->r[3] = (st->r[3] >> 6) & 0x3f03fff; - LOAD32L(st->r[4], key + 12); st->r[4] = (st->r[4] >> 8) & 0x00fffff; - - /* h = 0 */ - st->h[0] = 0; - st->h[1] = 0; - st->h[2] = 0; - st->h[3] = 0; - st->h[4] = 0; - - /* save pad for later */ - LOAD32L(st->pad[0], key + 16); - LOAD32L(st->pad[1], key + 20); - LOAD32L(st->pad[2], key + 24); - LOAD32L(st->pad[3], key + 28); - - st->leftover = 0; - st->final = 0; - return CRYPT_OK; -} - -/** - Process data through POLY1305 - @param st The POLY1305 state - @param in The data to send through HMAC - @param inlen The length of the data to HMAC (octets) - @return CRYPT_OK if successful -*/ -int poly1305_process(poly1305_state *st, const unsigned char *in, unsigned long inlen) -{ - unsigned long i; - - if (inlen == 0) return CRYPT_OK; /* nothing to do */ - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(in != NULL); - - /* handle leftover */ - if (st->leftover) { - unsigned long want = (16 - st->leftover); - if (want > inlen) want = inlen; - for (i = 0; i < want; i++) st->buffer[st->leftover + i] = in[i]; - inlen -= want; - in += want; - st->leftover += want; - if (st->leftover < 16) return CRYPT_OK; - s_poly1305_block(st, st->buffer, 16); - st->leftover = 0; - } - - /* process full blocks */ - if (inlen >= 16) { - unsigned long want = (inlen & ~(16 - 1)); - s_poly1305_block(st, in, want); - in += want; - inlen -= want; - } - - /* store leftover */ - if (inlen) { - for (i = 0; i < inlen; i++) st->buffer[st->leftover + i] = in[i]; - st->leftover += inlen; - } - return CRYPT_OK; -} - -/** - Terminate a POLY1305 session - @param st The POLY1305 state - @param mac [out] The destination of the POLY1305 authentication tag - @param maclen [in/out] The max size and resulting size of the POLY1305 authentication tag - @return CRYPT_OK if successful -*/ -int poly1305_done(poly1305_state *st, unsigned char *mac, unsigned long *maclen) -{ - ulong32 h0,h1,h2,h3,h4,c; - ulong32 g0,g1,g2,g3,g4; - ulong64 f; - ulong32 mask; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(mac != NULL); - LTC_ARGCHK(maclen != NULL); - LTC_ARGCHK(*maclen >= 16); - - /* process the remaining block */ - if (st->leftover) { - unsigned long i = st->leftover; - st->buffer[i++] = 1; - for (; i < 16; i++) st->buffer[i] = 0; - st->final = 1; - s_poly1305_block(st, st->buffer, 16); - } - - /* fully carry h */ - h0 = st->h[0]; - h1 = st->h[1]; - h2 = st->h[2]; - h3 = st->h[3]; - h4 = st->h[4]; - - c = h1 >> 26; h1 = h1 & 0x3ffffff; - h2 += c; c = h2 >> 26; h2 = h2 & 0x3ffffff; - h3 += c; c = h3 >> 26; h3 = h3 & 0x3ffffff; - h4 += c; c = h4 >> 26; h4 = h4 & 0x3ffffff; - h0 += c * 5; c = h0 >> 26; h0 = h0 & 0x3ffffff; - h1 += c; - - /* compute h + -p */ - g0 = h0 + 5; c = g0 >> 26; g0 &= 0x3ffffff; - g1 = h1 + c; c = g1 >> 26; g1 &= 0x3ffffff; - g2 = h2 + c; c = g2 >> 26; g2 &= 0x3ffffff; - g3 = h3 + c; c = g3 >> 26; g3 &= 0x3ffffff; - g4 = h4 + c - (1UL << 26); - - /* select h if h < p, or h + -p if h >= p */ - mask = (g4 >> 31) - 1; - g0 &= mask; - g1 &= mask; - g2 &= mask; - g3 &= mask; - g4 &= mask; - mask = ~mask; - h0 = (h0 & mask) | g0; - h1 = (h1 & mask) | g1; - h2 = (h2 & mask) | g2; - h3 = (h3 & mask) | g3; - h4 = (h4 & mask) | g4; - - /* h = h % (2^128) */ - h0 = ((h0 ) | (h1 << 26)) & 0xffffffff; - h1 = ((h1 >> 6) | (h2 << 20)) & 0xffffffff; - h2 = ((h2 >> 12) | (h3 << 14)) & 0xffffffff; - h3 = ((h3 >> 18) | (h4 << 8)) & 0xffffffff; - - /* mac = (h + pad) % (2^128) */ - f = (ulong64)h0 + st->pad[0] ; h0 = (ulong32)f; - f = (ulong64)h1 + st->pad[1] + (f >> 32); h1 = (ulong32)f; - f = (ulong64)h2 + st->pad[2] + (f >> 32); h2 = (ulong32)f; - f = (ulong64)h3 + st->pad[3] + (f >> 32); h3 = (ulong32)f; - - STORE32L(h0, mac + 0); - STORE32L(h1, mac + 4); - STORE32L(h2, mac + 8); - STORE32L(h3, mac + 12); - - /* zero out the state */ - st->h[0] = 0; - st->h[1] = 0; - st->h[2] = 0; - st->h[3] = 0; - st->h[4] = 0; - st->r[0] = 0; - st->r[1] = 0; - st->r[2] = 0; - st->r[3] = 0; - st->r[4] = 0; - st->pad[0] = 0; - st->pad[1] = 0; - st->pad[2] = 0; - st->pad[3] = 0; - - *maclen = 16; - return CRYPT_OK; -} - -#endif diff --git a/src/mac/poly1305/poly1305_file.c b/src/mac/poly1305/poly1305_file.c deleted file mode 100644 index e09c9942..00000000 --- a/src/mac/poly1305/poly1305_file.c +++ /dev/null @@ -1,83 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * Public Domain poly1305 from Andrew Moon - * https://github.com/floodyberry/poly1305-donna - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_POLY1305 - -/** - POLY1305 a file - @param fname The name of the file you wish to POLY1305 - @param key The secret key - @param keylen The length of the secret key - @param mac [out] The POLY1305 authentication tag - @param maclen [in/out] The max size and resulting size of the authentication tag - @return CRYPT_OK if successful, CRYPT_NOP if file support has been disabled -*/ -int poly1305_file(const char *fname, const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen) -{ -#ifdef LTC_NO_FILE - LTC_UNUSED_PARAM(fname); - LTC_UNUSED_PARAM(key); - LTC_UNUSED_PARAM(keylen); - LTC_UNUSED_PARAM(mac); - LTC_UNUSED_PARAM(maclen); - return CRYPT_NOP; -#else - poly1305_state st; - FILE *in; - unsigned char *buf; - size_t x; - int err; - - LTC_ARGCHK(fname != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(mac != NULL); - LTC_ARGCHK(maclen != NULL); - - if ((buf = XMALLOC(LTC_FILE_READ_BUFSIZE)) == NULL) { - return CRYPT_MEM; - } - - if ((err = poly1305_init(&st, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - - in = fopen(fname, "rb"); - if (in == NULL) { - err = CRYPT_FILE_NOTFOUND; - goto LBL_ERR; - } - - do { - x = fread(buf, 1, LTC_FILE_READ_BUFSIZE, in); - if ((err = poly1305_process(&st, buf, (unsigned long)x)) != CRYPT_OK) { - fclose(in); - goto LBL_CLEANBUF; - } - } while (x == LTC_FILE_READ_BUFSIZE); - - if (fclose(in) != 0) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; - } - - err = poly1305_done(&st, mac, maclen); - -LBL_CLEANBUF: - zeromem(buf, LTC_FILE_READ_BUFSIZE); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&st, sizeof(poly1305_state)); -#endif - XFREE(buf); - return err; -#endif -} - -#endif diff --git a/src/mac/poly1305/poly1305_memory.c b/src/mac/poly1305/poly1305_memory.c deleted file mode 100644 index 8a9fea69..00000000 --- a/src/mac/poly1305/poly1305_memory.c +++ /dev/null @@ -1,43 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * Public Domain poly1305 from Andrew Moon - * https://github.com/floodyberry/poly1305-donna - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_POLY1305 - -/** - POLY1305 a block of memory to produce the authentication tag - @param key The secret key - @param keylen The length of the secret key (octets) - @param in The data to POLY1305 - @param inlen The length of the data to POLY1305 (octets) - @param mac [out] Destination of the authentication tag - @param maclen [in/out] Max size and resulting size of authentication tag - @return CRYPT_OK if successful -*/ -int poly1305_memory(const unsigned char *key, unsigned long keylen, const unsigned char *in, unsigned long inlen, unsigned char *mac, unsigned long *maclen) -{ - poly1305_state st; - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(mac != NULL); - LTC_ARGCHK(maclen != NULL); - - if ((err = poly1305_init(&st, key, keylen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = poly1305_process(&st, in, inlen)) != CRYPT_OK) { goto LBL_ERR; } - err = poly1305_done(&st, mac, maclen); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&st, sizeof(poly1305_state)); -#endif - return err; -} - -#endif diff --git a/src/mac/poly1305/poly1305_memory_multi.c b/src/mac/poly1305/poly1305_memory_multi.c deleted file mode 100644 index 07dbde4c..00000000 --- a/src/mac/poly1305/poly1305_memory_multi.c +++ /dev/null @@ -1,56 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * Public Domain poly1305 from Andrew Moon - * https://github.com/floodyberry/poly1305-donna - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_POLY1305 - -/** - POLY1305 multiple blocks of memory to produce the authentication tag - @param key The secret key - @param keylen The length of the secret key (octets) - @param mac [out] Destination of the authentication tag - @param maclen [in/out] Max size and resulting size of authentication tag - @param in The data to POLY1305 - @param inlen The length of the data to POLY1305 (octets) - @param ... tuples of (data,len) pairs to POLY1305, terminated with a (NULL,x) (x=don't care) - @return CRYPT_OK if successful -*/ -int poly1305_memory_multi(const unsigned char *key, unsigned long keylen, unsigned char *mac, unsigned long *maclen, const unsigned char *in, unsigned long inlen, ...) -{ - poly1305_state st; - int err; - va_list args; - const unsigned char *curptr; - unsigned long curlen; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(mac != NULL); - LTC_ARGCHK(maclen != NULL); - - va_start(args, inlen); - curptr = in; - curlen = inlen; - if ((err = poly1305_init(&st, key, keylen)) != CRYPT_OK) { goto LBL_ERR; } - for (;;) { - if ((err = poly1305_process(&st, curptr, curlen)) != CRYPT_OK) { goto LBL_ERR; } - curptr = va_arg(args, const unsigned char*); - if (curptr == NULL) break; - curlen = va_arg(args, unsigned long); - } - err = poly1305_done(&st, mac, maclen); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&st, sizeof(poly1305_state)); -#endif - va_end(args); - return err; -} - -#endif diff --git a/src/mac/poly1305/poly1305_test.c b/src/mac/poly1305/poly1305_test.c deleted file mode 100644 index 673d7580..00000000 --- a/src/mac/poly1305/poly1305_test.c +++ /dev/null @@ -1,46 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * Public Domain poly1305 from Andrew Moon - * https://github.com/floodyberry/poly1305-donna - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_POLY1305 - -int poly1305_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - /* https://tools.ietf.org/html/rfc7539#section-2.5.2 */ - unsigned char k[] = { 0x85, 0xd6, 0xbe, 0x78, 0x57, 0x55, 0x6d, 0x33, 0x7f, 0x44, 0x52, 0xfe, 0x42, 0xd5, 0x06, 0xa8, 0x01, 0x03, 0x80, 0x8a, 0xfb, 0x0d, 0xb2, 0xfd, 0x4a, 0xbf, 0xf6, 0xaf, 0x41, 0x49, 0xf5, 0x1b }; - unsigned char tag[] = { 0xA8, 0x06, 0x1D, 0xC1, 0x30, 0x51, 0x36, 0xC6, 0xC2, 0x2B, 0x8B, 0xAF, 0x0C, 0x01, 0x27, 0xA9 }; - char m[] = "Cryptographic Forum Research Group"; - unsigned long len = 16, mlen = XSTRLEN(m); - unsigned char out[1000]; - poly1305_state st; - int err; - - /* process piece by piece */ - if ((err = poly1305_init(&st, k, 32)) != CRYPT_OK) return err; - if ((err = poly1305_process(&st, (unsigned char*)m, 5)) != CRYPT_OK) return err; - if ((err = poly1305_process(&st, (unsigned char*)m + 5, 4)) != CRYPT_OK) return err; - if ((err = poly1305_process(&st, (unsigned char*)m + 9, 3)) != CRYPT_OK) return err; - if ((err = poly1305_process(&st, (unsigned char*)m + 12, 2)) != CRYPT_OK) return err; - if ((err = poly1305_process(&st, (unsigned char*)m + 14, 1)) != CRYPT_OK) return err; - if ((err = poly1305_process(&st, (unsigned char*)m + 15, mlen - 15)) != CRYPT_OK) return err; - if ((err = poly1305_done(&st, out, &len)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, len, tag, sizeof(tag), "POLY1305-TV1", 1) != 0) return CRYPT_FAIL_TESTVECTOR; - /* process in one go */ - if ((err = poly1305_init(&st, k, 32)) != CRYPT_OK) return err; - if ((err = poly1305_process(&st, (unsigned char*)m, mlen)) != CRYPT_OK) return err; - if ((err = poly1305_done(&st, out, &len)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, len, tag, sizeof(tag), "POLY1305-TV2", 1) != 0) return CRYPT_FAIL_TESTVECTOR; - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/mac/xcbc/xcbc_done.c b/src/mac/xcbc/xcbc_done.c deleted file mode 100644 index 4163e224..00000000 --- a/src/mac/xcbc/xcbc_done.c +++ /dev/null @@ -1,59 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file xcbc_done.c - XCBC Support, terminate the state -*/ - -#ifdef LTC_XCBC - -/** Terminate the XCBC-MAC state - @param xcbc XCBC state to terminate - @param out [out] Destination for the MAC tag - @param outlen [in/out] Destination size and final tag size - Return CRYPT_OK on success -*/ -int xcbc_done(xcbc_state *xcbc, unsigned char *out, unsigned long *outlen) -{ - int x; - LTC_ARGCHK(xcbc != NULL); - LTC_ARGCHK(out != NULL); - - if ((xcbc->blocksize < 0) || (xcbc->buflen > xcbc->blocksize) || (xcbc->buflen < 0)) { - return CRYPT_INVALID_ARG; - } - - /* which key do we use? */ - if (xcbc->buflen == xcbc->blocksize) { - /* k2 */ - for (x = 0; x < xcbc->blocksize; x++) { - xcbc->IV[x] ^= xcbc->K[1][x]; - } - } else { - xcbc->IV[xcbc->buflen] ^= 0x80; - /* k3 */ - for (x = 0; x < xcbc->blocksize; x++) { - xcbc->IV[x] ^= xcbc->K[2][x]; - } - } - - /* encrypt */ - ecb_encrypt_block(xcbc->IV, xcbc->IV, &xcbc->key); - ecb_done(&xcbc->key); - - /* extract tag */ - for (x = 0; x < xcbc->blocksize && (unsigned long)x < *outlen; x++) { - out[x] = xcbc->IV[x]; - } - *outlen = x; - -#ifdef LTC_CLEAN_STACK - zeromem(xcbc, sizeof(*xcbc)); -#endif - return CRYPT_OK; -} - -#endif - diff --git a/src/mac/xcbc/xcbc_file.c b/src/mac/xcbc/xcbc_file.c deleted file mode 100644 index d8612df4..00000000 --- a/src/mac/xcbc/xcbc_file.c +++ /dev/null @@ -1,87 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file xcbc_file.c - XCBC support, process a file, Tom St Denis -*/ - -#ifdef LTC_XCBC - -/** - XCBC a file - @param cipher The index of the cipher desired - @param key The secret key - @param keylen The length of the secret key (octets) - @param filename The name of the file you wish to XCBC - @param out [out] Where the authentication tag is to be stored - @param outlen [in/out] The max size and resulting size of the authentication tag - @return CRYPT_OK if successful, CRYPT_NOP if file support has been disabled -*/ -int xcbc_file(int cipher, - const unsigned char *key, unsigned long keylen, - const char *filename, - unsigned char *out, unsigned long *outlen) -{ -#ifdef LTC_NO_FILE - LTC_UNUSED_PARAM(cipher); - LTC_UNUSED_PARAM(key); - LTC_UNUSED_PARAM(keylen); - LTC_UNUSED_PARAM(filename); - LTC_UNUSED_PARAM(out); - LTC_UNUSED_PARAM(outlen); - return CRYPT_NOP; -#else - size_t x; - int err; - xcbc_state xcbc; - FILE *in; - unsigned char *buf; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(filename != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((buf = XMALLOC(LTC_FILE_READ_BUFSIZE)) == NULL) { - return CRYPT_MEM; - } - - if ((err = xcbc_init(&xcbc, cipher, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - - in = fopen(filename, "rb"); - if (in == NULL) { - err = CRYPT_FILE_NOTFOUND; - goto LBL_ERR; - } - - do { - x = fread(buf, 1, LTC_FILE_READ_BUFSIZE, in); - if ((err = xcbc_process(&xcbc, buf, (unsigned long)x)) != CRYPT_OK) { - fclose(in); - goto LBL_CLEANBUF; - } - } while (x == LTC_FILE_READ_BUFSIZE); - - if (fclose(in) != 0) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; - } - - err = xcbc_done(&xcbc, out, outlen); - -LBL_CLEANBUF: - zeromem(buf, LTC_FILE_READ_BUFSIZE); -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(&xcbc, sizeof(xcbc_state)); -#endif - XFREE(buf); - return err; -#endif -} - -#endif diff --git a/src/mac/xcbc/xcbc_init.c b/src/mac/xcbc/xcbc_init.c deleted file mode 100644 index 80964ef9..00000000 --- a/src/mac/xcbc/xcbc_init.c +++ /dev/null @@ -1,95 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file xcbc_init.c - XCBC Support, start an XCBC state -*/ - -#ifdef LTC_XCBC - -/** Initialize XCBC-MAC state - @param xcbc [out] XCBC state to initialize - @param cipher Index of cipher to use - @param key [in] Secret key - @param keylen Length of secret key in octets - Return CRYPT_OK on success -*/ -int xcbc_init(xcbc_state *xcbc, int cipher, const unsigned char *key, unsigned long keylen) -{ - int x, y, err; - symmetric_ECB *skey; - unsigned long k1; - - LTC_ARGCHK(xcbc != NULL); - LTC_ARGCHK(key != NULL); - - /* schedule the key */ - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - -#ifdef LTC_FAST - if (cipher_descriptor[cipher].block_length % sizeof(LTC_FAST_TYPE)) { - return CRYPT_INVALID_ARG; - } -#endif - - skey = NULL; - - /* are we in pure XCBC mode with three keys? */ - if (keylen & LTC_XCBC_PURE) { - keylen &= ~LTC_XCBC_PURE; - - if (keylen < 2UL*cipher_descriptor[cipher].block_length) { - return CRYPT_INVALID_ARG; - } - - k1 = keylen - 2*cipher_descriptor[cipher].block_length; - XMEMCPY(xcbc->K[0], key, k1); - XMEMCPY(xcbc->K[1], key+k1, cipher_descriptor[cipher].block_length); - XMEMCPY(xcbc->K[2], key+k1 + cipher_descriptor[cipher].block_length, cipher_descriptor[cipher].block_length); - } else { - /* use the key expansion */ - k1 = cipher_descriptor[cipher].block_length; - - /* schedule the user key */ - skey = XCALLOC(1, sizeof(*skey)); - if (skey == NULL) { - return CRYPT_MEM; - } - - if ((err = ecb_start(cipher, key, keylen, 0, skey)) != CRYPT_OK) { - goto done; - } - - /* make the three keys */ - for (y = 0; y < 3; y++) { - for (x = 0; x < cipher_descriptor[cipher].block_length; x++) { - xcbc->K[y][x] = y + 1; - } - ecb_encrypt_block(xcbc->K[y], xcbc->K[y], skey); - } - } - - /* setup K1 */ - err = ecb_start(cipher, xcbc->K[0], k1, 0, &xcbc->key); - - /* setup struct */ - zeromem(xcbc->IV, cipher_descriptor[cipher].block_length); - xcbc->blocksize = cipher_descriptor[cipher].block_length; - xcbc->buflen = 0; -done: - ecb_done(skey); - if (skey != NULL) { -#ifdef LTC_CLEAN_STACK - zeromem(skey, sizeof(*skey)); -#endif - XFREE(skey); - } - return err; -} - -#endif - diff --git a/src/mac/xcbc/xcbc_memory.c b/src/mac/xcbc/xcbc_memory.c deleted file mode 100644 index bd7f3887..00000000 --- a/src/mac/xcbc/xcbc_memory.c +++ /dev/null @@ -1,59 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file xcbc_process.c - XCBC Support, XCBC-MAC a block of memory -*/ - -#ifdef LTC_XCBC - -/** XCBC-MAC a block of memory - @param cipher Index of cipher to use - @param key [in] Secret key - @param keylen Length of key in octets - @param in [in] Message to MAC - @param inlen Length of input in octets - @param out [out] Destination for the MAC tag - @param outlen [in/out] Output size and final tag size - Return CRYPT_OK on success. -*/ -int xcbc_memory(int cipher, - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - xcbc_state *xcbc; - int err; - - /* is the cipher valid? */ - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - - /* Use accelerator if found */ - if (cipher_descriptor[cipher].xcbc_memory != NULL) { - return cipher_descriptor[cipher].xcbc_memory(key, keylen, in, inlen, out, outlen); - } - - xcbc = XCALLOC(1, sizeof(*xcbc)); - if (xcbc == NULL) { - return CRYPT_MEM; - } - - if ((err = xcbc_init(xcbc, cipher, key, keylen)) != CRYPT_OK) { - goto done; - } - - if ((err = xcbc_process(xcbc, in, inlen)) != CRYPT_OK) { - goto done; - } - - err = xcbc_done(xcbc, out, outlen); -done: - XFREE(xcbc); - return err; -} - -#endif diff --git a/src/mac/xcbc/xcbc_memory_multi.c b/src/mac/xcbc/xcbc_memory_multi.c deleted file mode 100644 index f53de361..00000000 --- a/src/mac/xcbc/xcbc_memory_multi.c +++ /dev/null @@ -1,77 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file xcbc_memory_multi.c - XCBC support, process multiple blocks of memory, Tom St Denis -*/ - -#ifdef LTC_XCBC - -/** - XCBC multiple blocks of memory - @param cipher The index of the desired cipher - @param key The secret key - @param keylen The length of the secret key (octets) - @param out [out] The destination of the authentication tag - @param outlen [in/out] The max size and resulting size of the authentication tag (octets) - @param in The data to send through XCBC - @param inlen The length of the data to send through XCBC (octets) - @param ... tuples of (data,len) pairs to XCBC, terminated with a (NULL,x) (x=don't care) - @return CRYPT_OK if successful -*/ -int xcbc_memory_multi(int cipher, - const unsigned char *key, unsigned long keylen, - unsigned char *out, unsigned long *outlen, - const unsigned char *in, unsigned long inlen, ...) -{ - int err; - xcbc_state *xcbc; - va_list args; - const unsigned char *curptr; - unsigned long curlen; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* allocate ram for xcbc state */ - xcbc = XMALLOC(sizeof(xcbc_state)); - if (xcbc == NULL) { - return CRYPT_MEM; - } - - /* xcbc process the message */ - if ((err = xcbc_init(xcbc, cipher, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; - } - va_start(args, inlen); - curptr = in; - curlen = inlen; - for (;;) { - /* process buf */ - if ((err = xcbc_process(xcbc, curptr, curlen)) != CRYPT_OK) { - goto LBL_ERR; - } - /* step to next */ - curptr = va_arg(args, const unsigned char*); - if (curptr == NULL) { - break; - } - curlen = va_arg(args, unsigned long); - } - if ((err = xcbc_done(xcbc, out, outlen)) != CRYPT_OK) { - goto LBL_ERR; - } -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(xcbc, sizeof(xcbc_state)); -#endif - XFREE(xcbc); - va_end(args); - return err; -} - -#endif diff --git a/src/mac/xcbc/xcbc_process.c b/src/mac/xcbc/xcbc_process.c deleted file mode 100644 index e4d23f30..00000000 --- a/src/mac/xcbc/xcbc_process.c +++ /dev/null @@ -1,56 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file xcbc_process.c - XCBC Support, process blocks with XCBC -*/ - -#ifdef LTC_XCBC - -/** Process data through XCBC-MAC - @param xcbc The XCBC-MAC state - @param in Input data to process - @param inlen Length of input in octets - Return CRYPT_OK on success -*/ -int xcbc_process(xcbc_state *xcbc, const unsigned char *in, unsigned long inlen) -{ -#ifdef LTC_FAST - int x; -#endif - - LTC_ARGCHK(xcbc != NULL); - LTC_ARGCHK(in != NULL); - - if ((xcbc->blocksize < 0) || (xcbc->buflen > xcbc->blocksize) || (xcbc->buflen < 0)) { - return CRYPT_INVALID_ARG; - } - -#ifdef LTC_FAST - if (xcbc->buflen == 0) { - while (inlen > (unsigned long)xcbc->blocksize) { - for (x = 0; x < xcbc->blocksize; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2(&(xcbc->IV[x]), &(in[x])); - } - ecb_encrypt_block(xcbc->IV, xcbc->IV, &xcbc->key); - in += xcbc->blocksize; - inlen -= xcbc->blocksize; - } - } -#endif - - while (inlen) { - if (xcbc->buflen == xcbc->blocksize) { - ecb_encrypt_block(xcbc->IV, xcbc->IV, &xcbc->key); - xcbc->buflen = 0; - } - xcbc->IV[xcbc->buflen++] ^= *in++; - --inlen; - } - return CRYPT_OK; -} - -#endif - diff --git a/src/mac/xcbc/xcbc_test.c b/src/mac/xcbc/xcbc_test.c deleted file mode 100644 index 2e38858a..00000000 --- a/src/mac/xcbc/xcbc_test.c +++ /dev/null @@ -1,116 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file xcbc_test.c - XCBC Support, Test XCBC-MAC mode -*/ - -#ifdef LTC_XCBC - -/** Test XCBC-MAC mode - Return CRYPT_OK on success -*/ -int xcbc_test(void) -{ -#ifdef LTC_NO_TEST - return CRYPT_NOP; -#else - static const struct { - int msglen; - unsigned char K[16], M[34], T[16]; - } tests[] = { -{ - 0, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, - - { 0 }, - - { 0x75, 0xf0, 0x25, 0x1d, 0x52, 0x8a, 0xc0, 0x1c, - 0x45, 0x73, 0xdf, 0xd5, 0x84, 0xd7, 0x9f, 0x29 } -}, - -{ - 3, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, - - { 0x00, 0x01, 0x02 }, - - { 0x5b, 0x37, 0x65, 0x80, 0xae, 0x2f, 0x19, 0xaf, - 0xe7, 0x21, 0x9c, 0xee, 0xf1, 0x72, 0x75, 0x6f } -}, - -{ - 16, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, - - { 0xd2, 0xa2, 0x46, 0xfa, 0x34, 0x9b, 0x68, 0xa7, - 0x99, 0x98, 0xa4, 0x39, 0x4f, 0xf7, 0xa2, 0x63 } -}, - -{ - 32, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }, - - { 0xf5, 0x4f, 0x0e, 0xc8, 0xd2, 0xb9, 0xf3, 0xd3, - 0x68, 0x07, 0x73, 0x4b, 0xd5, 0x28, 0x3f, 0xd4 } -}, - -{ - 34, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21 }, - - { 0xbe, 0xcb, 0xb3, 0xbc, 0xcd, 0xb5, 0x18, 0xa3, - 0x06, 0x77, 0xd5, 0x48, 0x1f, 0xb6, 0xb4, 0xd8 }, -}, - - - -}; - unsigned char T[16]; - unsigned long taglen; - int err, x, idx; - - /* AES can be under rijndael or aes... try to find it */ - if ((idx = find_cipher("aes")) == -1) { - if ((idx = find_cipher("rijndael")) == -1) { - return CRYPT_NOP; - } - } - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { - taglen = 16; - if ((err = xcbc_memory(idx, tests[x].K, 16, tests[x].M, tests[x].msglen, T, &taglen)) != CRYPT_OK) { - return err; - } - if (ltc_compare_testvector(T, taglen, tests[x].T, 16, "XCBC", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - - return CRYPT_OK; -#endif -} - -#endif - diff --git a/src/math/fp/ltc_ecc_fp_mulmod.c b/src/math/fp/ltc_ecc_fp_mulmod.c deleted file mode 100644 index f5dd3a1d..00000000 --- a/src/math/fp/ltc_ecc_fp_mulmod.c +++ /dev/null @@ -1,1650 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ltc_ecc_fp_mulmod.c - ECC Crypto, Tom St Denis -*/ - -#if defined(LTC_MECC) && defined(LTC_MECC_FP) -#include - -/* number of entries in the cache */ -#ifndef FP_ENTRIES -#define FP_ENTRIES 16 -#endif - -/* number of bits in LUT */ -#ifndef FP_LUT -#define FP_LUT 8U -#endif - -#if (FP_LUT > 12) || (FP_LUT < 2) - #error FP_LUT must be between 2 and 12 inclusively -#endif - -/** Our FP cache */ -static struct { - ecc_point *g, /* cached COPY of base point */ - *LUT[1U< 6 - { 1, 0, 0 }, { 2, 1, 64 }, { 2, 2, 64 }, { 3, 3, 64 }, { 2, 4, 64 }, { 3, 5, 64 }, { 3, 6, 64 }, { 4, 7, 64 }, - { 2, 8, 64 }, { 3, 9, 64 }, { 3, 10, 64 }, { 4, 11, 64 }, { 3, 12, 64 }, { 4, 13, 64 }, { 4, 14, 64 }, { 5, 15, 64 }, - { 2, 16, 64 }, { 3, 17, 64 }, { 3, 18, 64 }, { 4, 19, 64 }, { 3, 20, 64 }, { 4, 21, 64 }, { 4, 22, 64 }, { 5, 23, 64 }, - { 3, 24, 64 }, { 4, 25, 64 }, { 4, 26, 64 }, { 5, 27, 64 }, { 4, 28, 64 }, { 5, 29, 64 }, { 5, 30, 64 }, { 6, 31, 64 }, - { 2, 32, 64 }, { 3, 33, 64 }, { 3, 34, 64 }, { 4, 35, 64 }, { 3, 36, 64 }, { 4, 37, 64 }, { 4, 38, 64 }, { 5, 39, 64 }, - { 3, 40, 64 }, { 4, 41, 64 }, { 4, 42, 64 }, { 5, 43, 64 }, { 4, 44, 64 }, { 5, 45, 64 }, { 5, 46, 64 }, { 6, 47, 64 }, - { 3, 48, 64 }, { 4, 49, 64 }, { 4, 50, 64 }, { 5, 51, 64 }, { 4, 52, 64 }, { 5, 53, 64 }, { 5, 54, 64 }, { 6, 55, 64 }, - { 4, 56, 64 }, { 5, 57, 64 }, { 5, 58, 64 }, { 6, 59, 64 }, { 5, 60, 64 }, { 6, 61, 64 }, { 6, 62, 64 }, { 7, 63, 64 }, -#if FP_LUT > 7 - { 1, 0, 0 }, { 2, 1, 128 }, { 2, 2, 128 }, { 3, 3, 128 }, { 2, 4, 128 }, { 3, 5, 128 }, { 3, 6, 128 }, { 4, 7, 128 }, - { 2, 8, 128 }, { 3, 9, 128 }, { 3, 10, 128 }, { 4, 11, 128 }, { 3, 12, 128 }, { 4, 13, 128 }, { 4, 14, 128 }, { 5, 15, 128 }, - { 2, 16, 128 }, { 3, 17, 128 }, { 3, 18, 128 }, { 4, 19, 128 }, { 3, 20, 128 }, { 4, 21, 128 }, { 4, 22, 128 }, { 5, 23, 128 }, - { 3, 24, 128 }, { 4, 25, 128 }, { 4, 26, 128 }, { 5, 27, 128 }, { 4, 28, 128 }, { 5, 29, 128 }, { 5, 30, 128 }, { 6, 31, 128 }, - { 2, 32, 128 }, { 3, 33, 128 }, { 3, 34, 128 }, { 4, 35, 128 }, { 3, 36, 128 }, { 4, 37, 128 }, { 4, 38, 128 }, { 5, 39, 128 }, - { 3, 40, 128 }, { 4, 41, 128 }, { 4, 42, 128 }, { 5, 43, 128 }, { 4, 44, 128 }, { 5, 45, 128 }, { 5, 46, 128 }, { 6, 47, 128 }, - { 3, 48, 128 }, { 4, 49, 128 }, { 4, 50, 128 }, { 5, 51, 128 }, { 4, 52, 128 }, { 5, 53, 128 }, { 5, 54, 128 }, { 6, 55, 128 }, - { 4, 56, 128 }, { 5, 57, 128 }, { 5, 58, 128 }, { 6, 59, 128 }, { 5, 60, 128 }, { 6, 61, 128 }, { 6, 62, 128 }, { 7, 63, 128 }, - { 2, 64, 128 }, { 3, 65, 128 }, { 3, 66, 128 }, { 4, 67, 128 }, { 3, 68, 128 }, { 4, 69, 128 }, { 4, 70, 128 }, { 5, 71, 128 }, - { 3, 72, 128 }, { 4, 73, 128 }, { 4, 74, 128 }, { 5, 75, 128 }, { 4, 76, 128 }, { 5, 77, 128 }, { 5, 78, 128 }, { 6, 79, 128 }, - { 3, 80, 128 }, { 4, 81, 128 }, { 4, 82, 128 }, { 5, 83, 128 }, { 4, 84, 128 }, { 5, 85, 128 }, { 5, 86, 128 }, { 6, 87, 128 }, - { 4, 88, 128 }, { 5, 89, 128 }, { 5, 90, 128 }, { 6, 91, 128 }, { 5, 92, 128 }, { 6, 93, 128 }, { 6, 94, 128 }, { 7, 95, 128 }, - { 3, 96, 128 }, { 4, 97, 128 }, { 4, 98, 128 }, { 5, 99, 128 }, { 4, 100, 128 }, { 5, 101, 128 }, { 5, 102, 128 }, { 6, 103, 128 }, - { 4, 104, 128 }, { 5, 105, 128 }, { 5, 106, 128 }, { 6, 107, 128 }, { 5, 108, 128 }, { 6, 109, 128 }, { 6, 110, 128 }, { 7, 111, 128 }, - { 4, 112, 128 }, { 5, 113, 128 }, { 5, 114, 128 }, { 6, 115, 128 }, { 5, 116, 128 }, { 6, 117, 128 }, { 6, 118, 128 }, { 7, 119, 128 }, - { 5, 120, 128 }, { 6, 121, 128 }, { 6, 122, 128 }, { 7, 123, 128 }, { 6, 124, 128 }, { 7, 125, 128 }, { 7, 126, 128 }, { 8, 127, 128 }, -#if FP_LUT > 8 - { 1, 0, 0 }, { 2, 1, 256 }, { 2, 2, 256 }, { 3, 3, 256 }, { 2, 4, 256 }, { 3, 5, 256 }, { 3, 6, 256 }, { 4, 7, 256 }, - { 2, 8, 256 }, { 3, 9, 256 }, { 3, 10, 256 }, { 4, 11, 256 }, { 3, 12, 256 }, { 4, 13, 256 }, { 4, 14, 256 }, { 5, 15, 256 }, - { 2, 16, 256 }, { 3, 17, 256 }, { 3, 18, 256 }, { 4, 19, 256 }, { 3, 20, 256 }, { 4, 21, 256 }, { 4, 22, 256 }, { 5, 23, 256 }, - { 3, 24, 256 }, { 4, 25, 256 }, { 4, 26, 256 }, { 5, 27, 256 }, { 4, 28, 256 }, { 5, 29, 256 }, { 5, 30, 256 }, { 6, 31, 256 }, - { 2, 32, 256 }, { 3, 33, 256 }, { 3, 34, 256 }, { 4, 35, 256 }, { 3, 36, 256 }, { 4, 37, 256 }, { 4, 38, 256 }, { 5, 39, 256 }, - { 3, 40, 256 }, { 4, 41, 256 }, { 4, 42, 256 }, { 5, 43, 256 }, { 4, 44, 256 }, { 5, 45, 256 }, { 5, 46, 256 }, { 6, 47, 256 }, - { 3, 48, 256 }, { 4, 49, 256 }, { 4, 50, 256 }, { 5, 51, 256 }, { 4, 52, 256 }, { 5, 53, 256 }, { 5, 54, 256 }, { 6, 55, 256 }, - { 4, 56, 256 }, { 5, 57, 256 }, { 5, 58, 256 }, { 6, 59, 256 }, { 5, 60, 256 }, { 6, 61, 256 }, { 6, 62, 256 }, { 7, 63, 256 }, - { 2, 64, 256 }, { 3, 65, 256 }, { 3, 66, 256 }, { 4, 67, 256 }, { 3, 68, 256 }, { 4, 69, 256 }, { 4, 70, 256 }, { 5, 71, 256 }, - { 3, 72, 256 }, { 4, 73, 256 }, { 4, 74, 256 }, { 5, 75, 256 }, { 4, 76, 256 }, { 5, 77, 256 }, { 5, 78, 256 }, { 6, 79, 256 }, - { 3, 80, 256 }, { 4, 81, 256 }, { 4, 82, 256 }, { 5, 83, 256 }, { 4, 84, 256 }, { 5, 85, 256 }, { 5, 86, 256 }, { 6, 87, 256 }, - { 4, 88, 256 }, { 5, 89, 256 }, { 5, 90, 256 }, { 6, 91, 256 }, { 5, 92, 256 }, { 6, 93, 256 }, { 6, 94, 256 }, { 7, 95, 256 }, - { 3, 96, 256 }, { 4, 97, 256 }, { 4, 98, 256 }, { 5, 99, 256 }, { 4, 100, 256 }, { 5, 101, 256 }, { 5, 102, 256 }, { 6, 103, 256 }, - { 4, 104, 256 }, { 5, 105, 256 }, { 5, 106, 256 }, { 6, 107, 256 }, { 5, 108, 256 }, { 6, 109, 256 }, { 6, 110, 256 }, { 7, 111, 256 }, - { 4, 112, 256 }, { 5, 113, 256 }, { 5, 114, 256 }, { 6, 115, 256 }, { 5, 116, 256 }, { 6, 117, 256 }, { 6, 118, 256 }, { 7, 119, 256 }, - { 5, 120, 256 }, { 6, 121, 256 }, { 6, 122, 256 }, { 7, 123, 256 }, { 6, 124, 256 }, { 7, 125, 256 }, { 7, 126, 256 }, { 8, 127, 256 }, - { 2, 128, 256 }, { 3, 129, 256 }, { 3, 130, 256 }, { 4, 131, 256 }, { 3, 132, 256 }, { 4, 133, 256 }, { 4, 134, 256 }, { 5, 135, 256 }, - { 3, 136, 256 }, { 4, 137, 256 }, { 4, 138, 256 }, { 5, 139, 256 }, { 4, 140, 256 }, { 5, 141, 256 }, { 5, 142, 256 }, { 6, 143, 256 }, - { 3, 144, 256 }, { 4, 145, 256 }, { 4, 146, 256 }, { 5, 147, 256 }, { 4, 148, 256 }, { 5, 149, 256 }, { 5, 150, 256 }, { 6, 151, 256 }, - { 4, 152, 256 }, { 5, 153, 256 }, { 5, 154, 256 }, { 6, 155, 256 }, { 5, 156, 256 }, { 6, 157, 256 }, { 6, 158, 256 }, { 7, 159, 256 }, - { 3, 160, 256 }, { 4, 161, 256 }, { 4, 162, 256 }, { 5, 163, 256 }, { 4, 164, 256 }, { 5, 165, 256 }, { 5, 166, 256 }, { 6, 167, 256 }, - { 4, 168, 256 }, { 5, 169, 256 }, { 5, 170, 256 }, { 6, 171, 256 }, { 5, 172, 256 }, { 6, 173, 256 }, { 6, 174, 256 }, { 7, 175, 256 }, - { 4, 176, 256 }, { 5, 177, 256 }, { 5, 178, 256 }, { 6, 179, 256 }, { 5, 180, 256 }, { 6, 181, 256 }, { 6, 182, 256 }, { 7, 183, 256 }, - { 5, 184, 256 }, { 6, 185, 256 }, { 6, 186, 256 }, { 7, 187, 256 }, { 6, 188, 256 }, { 7, 189, 256 }, { 7, 190, 256 }, { 8, 191, 256 }, - { 3, 192, 256 }, { 4, 193, 256 }, { 4, 194, 256 }, { 5, 195, 256 }, { 4, 196, 256 }, { 5, 197, 256 }, { 5, 198, 256 }, { 6, 199, 256 }, - { 4, 200, 256 }, { 5, 201, 256 }, { 5, 202, 256 }, { 6, 203, 256 }, { 5, 204, 256 }, { 6, 205, 256 }, { 6, 206, 256 }, { 7, 207, 256 }, - { 4, 208, 256 }, { 5, 209, 256 }, { 5, 210, 256 }, { 6, 211, 256 }, { 5, 212, 256 }, { 6, 213, 256 }, { 6, 214, 256 }, { 7, 215, 256 }, - { 5, 216, 256 }, { 6, 217, 256 }, { 6, 218, 256 }, { 7, 219, 256 }, { 6, 220, 256 }, { 7, 221, 256 }, { 7, 222, 256 }, { 8, 223, 256 }, - { 4, 224, 256 }, { 5, 225, 256 }, { 5, 226, 256 }, { 6, 227, 256 }, { 5, 228, 256 }, { 6, 229, 256 }, { 6, 230, 256 }, { 7, 231, 256 }, - { 5, 232, 256 }, { 6, 233, 256 }, { 6, 234, 256 }, { 7, 235, 256 }, { 6, 236, 256 }, { 7, 237, 256 }, { 7, 238, 256 }, { 8, 239, 256 }, - { 5, 240, 256 }, { 6, 241, 256 }, { 6, 242, 256 }, { 7, 243, 256 }, { 6, 244, 256 }, { 7, 245, 256 }, { 7, 246, 256 }, { 8, 247, 256 }, - { 6, 248, 256 }, { 7, 249, 256 }, { 7, 250, 256 }, { 8, 251, 256 }, { 7, 252, 256 }, { 8, 253, 256 }, { 8, 254, 256 }, { 9, 255, 256 }, -#if FP_LUT > 9 - { 1, 0, 0 }, { 2, 1, 512 }, { 2, 2, 512 }, { 3, 3, 512 }, { 2, 4, 512 }, { 3, 5, 512 }, { 3, 6, 512 }, { 4, 7, 512 }, - { 2, 8, 512 }, { 3, 9, 512 }, { 3, 10, 512 }, { 4, 11, 512 }, { 3, 12, 512 }, { 4, 13, 512 }, { 4, 14, 512 }, { 5, 15, 512 }, - { 2, 16, 512 }, { 3, 17, 512 }, { 3, 18, 512 }, { 4, 19, 512 }, { 3, 20, 512 }, { 4, 21, 512 }, { 4, 22, 512 }, { 5, 23, 512 }, - { 3, 24, 512 }, { 4, 25, 512 }, { 4, 26, 512 }, { 5, 27, 512 }, { 4, 28, 512 }, { 5, 29, 512 }, { 5, 30, 512 }, { 6, 31, 512 }, - { 2, 32, 512 }, { 3, 33, 512 }, { 3, 34, 512 }, { 4, 35, 512 }, { 3, 36, 512 }, { 4, 37, 512 }, { 4, 38, 512 }, { 5, 39, 512 }, - { 3, 40, 512 }, { 4, 41, 512 }, { 4, 42, 512 }, { 5, 43, 512 }, { 4, 44, 512 }, { 5, 45, 512 }, { 5, 46, 512 }, { 6, 47, 512 }, - { 3, 48, 512 }, { 4, 49, 512 }, { 4, 50, 512 }, { 5, 51, 512 }, { 4, 52, 512 }, { 5, 53, 512 }, { 5, 54, 512 }, { 6, 55, 512 }, - { 4, 56, 512 }, { 5, 57, 512 }, { 5, 58, 512 }, { 6, 59, 512 }, { 5, 60, 512 }, { 6, 61, 512 }, { 6, 62, 512 }, { 7, 63, 512 }, - { 2, 64, 512 }, { 3, 65, 512 }, { 3, 66, 512 }, { 4, 67, 512 }, { 3, 68, 512 }, { 4, 69, 512 }, { 4, 70, 512 }, { 5, 71, 512 }, - { 3, 72, 512 }, { 4, 73, 512 }, { 4, 74, 512 }, { 5, 75, 512 }, { 4, 76, 512 }, { 5, 77, 512 }, { 5, 78, 512 }, { 6, 79, 512 }, - { 3, 80, 512 }, { 4, 81, 512 }, { 4, 82, 512 }, { 5, 83, 512 }, { 4, 84, 512 }, { 5, 85, 512 }, { 5, 86, 512 }, { 6, 87, 512 }, - { 4, 88, 512 }, { 5, 89, 512 }, { 5, 90, 512 }, { 6, 91, 512 }, { 5, 92, 512 }, { 6, 93, 512 }, { 6, 94, 512 }, { 7, 95, 512 }, - { 3, 96, 512 }, { 4, 97, 512 }, { 4, 98, 512 }, { 5, 99, 512 }, { 4, 100, 512 }, { 5, 101, 512 }, { 5, 102, 512 }, { 6, 103, 512 }, - { 4, 104, 512 }, { 5, 105, 512 }, { 5, 106, 512 }, { 6, 107, 512 }, { 5, 108, 512 }, { 6, 109, 512 }, { 6, 110, 512 }, { 7, 111, 512 }, - { 4, 112, 512 }, { 5, 113, 512 }, { 5, 114, 512 }, { 6, 115, 512 }, { 5, 116, 512 }, { 6, 117, 512 }, { 6, 118, 512 }, { 7, 119, 512 }, - { 5, 120, 512 }, { 6, 121, 512 }, { 6, 122, 512 }, { 7, 123, 512 }, { 6, 124, 512 }, { 7, 125, 512 }, { 7, 126, 512 }, { 8, 127, 512 }, - { 2, 128, 512 }, { 3, 129, 512 }, { 3, 130, 512 }, { 4, 131, 512 }, { 3, 132, 512 }, { 4, 133, 512 }, { 4, 134, 512 }, { 5, 135, 512 }, - { 3, 136, 512 }, { 4, 137, 512 }, { 4, 138, 512 }, { 5, 139, 512 }, { 4, 140, 512 }, { 5, 141, 512 }, { 5, 142, 512 }, { 6, 143, 512 }, - { 3, 144, 512 }, { 4, 145, 512 }, { 4, 146, 512 }, { 5, 147, 512 }, { 4, 148, 512 }, { 5, 149, 512 }, { 5, 150, 512 }, { 6, 151, 512 }, - { 4, 152, 512 }, { 5, 153, 512 }, { 5, 154, 512 }, { 6, 155, 512 }, { 5, 156, 512 }, { 6, 157, 512 }, { 6, 158, 512 }, { 7, 159, 512 }, - { 3, 160, 512 }, { 4, 161, 512 }, { 4, 162, 512 }, { 5, 163, 512 }, { 4, 164, 512 }, { 5, 165, 512 }, { 5, 166, 512 }, { 6, 167, 512 }, - { 4, 168, 512 }, { 5, 169, 512 }, { 5, 170, 512 }, { 6, 171, 512 }, { 5, 172, 512 }, { 6, 173, 512 }, { 6, 174, 512 }, { 7, 175, 512 }, - { 4, 176, 512 }, { 5, 177, 512 }, { 5, 178, 512 }, { 6, 179, 512 }, { 5, 180, 512 }, { 6, 181, 512 }, { 6, 182, 512 }, { 7, 183, 512 }, - { 5, 184, 512 }, { 6, 185, 512 }, { 6, 186, 512 }, { 7, 187, 512 }, { 6, 188, 512 }, { 7, 189, 512 }, { 7, 190, 512 }, { 8, 191, 512 }, - { 3, 192, 512 }, { 4, 193, 512 }, { 4, 194, 512 }, { 5, 195, 512 }, { 4, 196, 512 }, { 5, 197, 512 }, { 5, 198, 512 }, { 6, 199, 512 }, - { 4, 200, 512 }, { 5, 201, 512 }, { 5, 202, 512 }, { 6, 203, 512 }, { 5, 204, 512 }, { 6, 205, 512 }, { 6, 206, 512 }, { 7, 207, 512 }, - { 4, 208, 512 }, { 5, 209, 512 }, { 5, 210, 512 }, { 6, 211, 512 }, { 5, 212, 512 }, { 6, 213, 512 }, { 6, 214, 512 }, { 7, 215, 512 }, - { 5, 216, 512 }, { 6, 217, 512 }, { 6, 218, 512 }, { 7, 219, 512 }, { 6, 220, 512 }, { 7, 221, 512 }, { 7, 222, 512 }, { 8, 223, 512 }, - { 4, 224, 512 }, { 5, 225, 512 }, { 5, 226, 512 }, { 6, 227, 512 }, { 5, 228, 512 }, { 6, 229, 512 }, { 6, 230, 512 }, { 7, 231, 512 }, - { 5, 232, 512 }, { 6, 233, 512 }, { 6, 234, 512 }, { 7, 235, 512 }, { 6, 236, 512 }, { 7, 237, 512 }, { 7, 238, 512 }, { 8, 239, 512 }, - { 5, 240, 512 }, { 6, 241, 512 }, { 6, 242, 512 }, { 7, 243, 512 }, { 6, 244, 512 }, { 7, 245, 512 }, { 7, 246, 512 }, { 8, 247, 512 }, - { 6, 248, 512 }, { 7, 249, 512 }, { 7, 250, 512 }, { 8, 251, 512 }, { 7, 252, 512 }, { 8, 253, 512 }, { 8, 254, 512 }, { 9, 255, 512 }, - { 2, 256, 512 }, { 3, 257, 512 }, { 3, 258, 512 }, { 4, 259, 512 }, { 3, 260, 512 }, { 4, 261, 512 }, { 4, 262, 512 }, { 5, 263, 512 }, - { 3, 264, 512 }, { 4, 265, 512 }, { 4, 266, 512 }, { 5, 267, 512 }, { 4, 268, 512 }, { 5, 269, 512 }, { 5, 270, 512 }, { 6, 271, 512 }, - { 3, 272, 512 }, { 4, 273, 512 }, { 4, 274, 512 }, { 5, 275, 512 }, { 4, 276, 512 }, { 5, 277, 512 }, { 5, 278, 512 }, { 6, 279, 512 }, - { 4, 280, 512 }, { 5, 281, 512 }, { 5, 282, 512 }, { 6, 283, 512 }, { 5, 284, 512 }, { 6, 285, 512 }, { 6, 286, 512 }, { 7, 287, 512 }, - { 3, 288, 512 }, { 4, 289, 512 }, { 4, 290, 512 }, { 5, 291, 512 }, { 4, 292, 512 }, { 5, 293, 512 }, { 5, 294, 512 }, { 6, 295, 512 }, - { 4, 296, 512 }, { 5, 297, 512 }, { 5, 298, 512 }, { 6, 299, 512 }, { 5, 300, 512 }, { 6, 301, 512 }, { 6, 302, 512 }, { 7, 303, 512 }, - { 4, 304, 512 }, { 5, 305, 512 }, { 5, 306, 512 }, { 6, 307, 512 }, { 5, 308, 512 }, { 6, 309, 512 }, { 6, 310, 512 }, { 7, 311, 512 }, - { 5, 312, 512 }, { 6, 313, 512 }, { 6, 314, 512 }, { 7, 315, 512 }, { 6, 316, 512 }, { 7, 317, 512 }, { 7, 318, 512 }, { 8, 319, 512 }, - { 3, 320, 512 }, { 4, 321, 512 }, { 4, 322, 512 }, { 5, 323, 512 }, { 4, 324, 512 }, { 5, 325, 512 }, { 5, 326, 512 }, { 6, 327, 512 }, - { 4, 328, 512 }, { 5, 329, 512 }, { 5, 330, 512 }, { 6, 331, 512 }, { 5, 332, 512 }, { 6, 333, 512 }, { 6, 334, 512 }, { 7, 335, 512 }, - { 4, 336, 512 }, { 5, 337, 512 }, { 5, 338, 512 }, { 6, 339, 512 }, { 5, 340, 512 }, { 6, 341, 512 }, { 6, 342, 512 }, { 7, 343, 512 }, - { 5, 344, 512 }, { 6, 345, 512 }, { 6, 346, 512 }, { 7, 347, 512 }, { 6, 348, 512 }, { 7, 349, 512 }, { 7, 350, 512 }, { 8, 351, 512 }, - { 4, 352, 512 }, { 5, 353, 512 }, { 5, 354, 512 }, { 6, 355, 512 }, { 5, 356, 512 }, { 6, 357, 512 }, { 6, 358, 512 }, { 7, 359, 512 }, - { 5, 360, 512 }, { 6, 361, 512 }, { 6, 362, 512 }, { 7, 363, 512 }, { 6, 364, 512 }, { 7, 365, 512 }, { 7, 366, 512 }, { 8, 367, 512 }, - { 5, 368, 512 }, { 6, 369, 512 }, { 6, 370, 512 }, { 7, 371, 512 }, { 6, 372, 512 }, { 7, 373, 512 }, { 7, 374, 512 }, { 8, 375, 512 }, - { 6, 376, 512 }, { 7, 377, 512 }, { 7, 378, 512 }, { 8, 379, 512 }, { 7, 380, 512 }, { 8, 381, 512 }, { 8, 382, 512 }, { 9, 383, 512 }, - { 3, 384, 512 }, { 4, 385, 512 }, { 4, 386, 512 }, { 5, 387, 512 }, { 4, 388, 512 }, { 5, 389, 512 }, { 5, 390, 512 }, { 6, 391, 512 }, - { 4, 392, 512 }, { 5, 393, 512 }, { 5, 394, 512 }, { 6, 395, 512 }, { 5, 396, 512 }, { 6, 397, 512 }, { 6, 398, 512 }, { 7, 399, 512 }, - { 4, 400, 512 }, { 5, 401, 512 }, { 5, 402, 512 }, { 6, 403, 512 }, { 5, 404, 512 }, { 6, 405, 512 }, { 6, 406, 512 }, { 7, 407, 512 }, - { 5, 408, 512 }, { 6, 409, 512 }, { 6, 410, 512 }, { 7, 411, 512 }, { 6, 412, 512 }, { 7, 413, 512 }, { 7, 414, 512 }, { 8, 415, 512 }, - { 4, 416, 512 }, { 5, 417, 512 }, { 5, 418, 512 }, { 6, 419, 512 }, { 5, 420, 512 }, { 6, 421, 512 }, { 6, 422, 512 }, { 7, 423, 512 }, - { 5, 424, 512 }, { 6, 425, 512 }, { 6, 426, 512 }, { 7, 427, 512 }, { 6, 428, 512 }, { 7, 429, 512 }, { 7, 430, 512 }, { 8, 431, 512 }, - { 5, 432, 512 }, { 6, 433, 512 }, { 6, 434, 512 }, { 7, 435, 512 }, { 6, 436, 512 }, { 7, 437, 512 }, { 7, 438, 512 }, { 8, 439, 512 }, - { 6, 440, 512 }, { 7, 441, 512 }, { 7, 442, 512 }, { 8, 443, 512 }, { 7, 444, 512 }, { 8, 445, 512 }, { 8, 446, 512 }, { 9, 447, 512 }, - { 4, 448, 512 }, { 5, 449, 512 }, { 5, 450, 512 }, { 6, 451, 512 }, { 5, 452, 512 }, { 6, 453, 512 }, { 6, 454, 512 }, { 7, 455, 512 }, - { 5, 456, 512 }, { 6, 457, 512 }, { 6, 458, 512 }, { 7, 459, 512 }, { 6, 460, 512 }, { 7, 461, 512 }, { 7, 462, 512 }, { 8, 463, 512 }, - { 5, 464, 512 }, { 6, 465, 512 }, { 6, 466, 512 }, { 7, 467, 512 }, { 6, 468, 512 }, { 7, 469, 512 }, { 7, 470, 512 }, { 8, 471, 512 }, - { 6, 472, 512 }, { 7, 473, 512 }, { 7, 474, 512 }, { 8, 475, 512 }, { 7, 476, 512 }, { 8, 477, 512 }, { 8, 478, 512 }, { 9, 479, 512 }, - { 5, 480, 512 }, { 6, 481, 512 }, { 6, 482, 512 }, { 7, 483, 512 }, { 6, 484, 512 }, { 7, 485, 512 }, { 7, 486, 512 }, { 8, 487, 512 }, - { 6, 488, 512 }, { 7, 489, 512 }, { 7, 490, 512 }, { 8, 491, 512 }, { 7, 492, 512 }, { 8, 493, 512 }, { 8, 494, 512 }, { 9, 495, 512 }, - { 6, 496, 512 }, { 7, 497, 512 }, { 7, 498, 512 }, { 8, 499, 512 }, { 7, 500, 512 }, { 8, 501, 512 }, { 8, 502, 512 }, { 9, 503, 512 }, - { 7, 504, 512 }, { 8, 505, 512 }, { 8, 506, 512 }, { 9, 507, 512 }, { 8, 508, 512 }, { 9, 509, 512 }, { 9, 510, 512 }, { 10, 511, 512 }, -#if FP_LUT > 10 - { 1, 0, 0 }, { 2, 1, 1024 }, { 2, 2, 1024 }, { 3, 3, 1024 }, { 2, 4, 1024 }, { 3, 5, 1024 }, { 3, 6, 1024 }, { 4, 7, 1024 }, - { 2, 8, 1024 }, { 3, 9, 1024 }, { 3, 10, 1024 }, { 4, 11, 1024 }, { 3, 12, 1024 }, { 4, 13, 1024 }, { 4, 14, 1024 }, { 5, 15, 1024 }, - { 2, 16, 1024 }, { 3, 17, 1024 }, { 3, 18, 1024 }, { 4, 19, 1024 }, { 3, 20, 1024 }, { 4, 21, 1024 }, { 4, 22, 1024 }, { 5, 23, 1024 }, - { 3, 24, 1024 }, { 4, 25, 1024 }, { 4, 26, 1024 }, { 5, 27, 1024 }, { 4, 28, 1024 }, { 5, 29, 1024 }, { 5, 30, 1024 }, { 6, 31, 1024 }, - { 2, 32, 1024 }, { 3, 33, 1024 }, { 3, 34, 1024 }, { 4, 35, 1024 }, { 3, 36, 1024 }, { 4, 37, 1024 }, { 4, 38, 1024 }, { 5, 39, 1024 }, - { 3, 40, 1024 }, { 4, 41, 1024 }, { 4, 42, 1024 }, { 5, 43, 1024 }, { 4, 44, 1024 }, { 5, 45, 1024 }, { 5, 46, 1024 }, { 6, 47, 1024 }, - { 3, 48, 1024 }, { 4, 49, 1024 }, { 4, 50, 1024 }, { 5, 51, 1024 }, { 4, 52, 1024 }, { 5, 53, 1024 }, { 5, 54, 1024 }, { 6, 55, 1024 }, - { 4, 56, 1024 }, { 5, 57, 1024 }, { 5, 58, 1024 }, { 6, 59, 1024 }, { 5, 60, 1024 }, { 6, 61, 1024 }, { 6, 62, 1024 }, { 7, 63, 1024 }, - { 2, 64, 1024 }, { 3, 65, 1024 }, { 3, 66, 1024 }, { 4, 67, 1024 }, { 3, 68, 1024 }, { 4, 69, 1024 }, { 4, 70, 1024 }, { 5, 71, 1024 }, - { 3, 72, 1024 }, { 4, 73, 1024 }, { 4, 74, 1024 }, { 5, 75, 1024 }, { 4, 76, 1024 }, { 5, 77, 1024 }, { 5, 78, 1024 }, { 6, 79, 1024 }, - { 3, 80, 1024 }, { 4, 81, 1024 }, { 4, 82, 1024 }, { 5, 83, 1024 }, { 4, 84, 1024 }, { 5, 85, 1024 }, { 5, 86, 1024 }, { 6, 87, 1024 }, - { 4, 88, 1024 }, { 5, 89, 1024 }, { 5, 90, 1024 }, { 6, 91, 1024 }, { 5, 92, 1024 }, { 6, 93, 1024 }, { 6, 94, 1024 }, { 7, 95, 1024 }, - { 3, 96, 1024 }, { 4, 97, 1024 }, { 4, 98, 1024 }, { 5, 99, 1024 }, { 4, 100, 1024 }, { 5, 101, 1024 }, { 5, 102, 1024 }, { 6, 103, 1024 }, - { 4, 104, 1024 }, { 5, 105, 1024 }, { 5, 106, 1024 }, { 6, 107, 1024 }, { 5, 108, 1024 }, { 6, 109, 1024 }, { 6, 110, 1024 }, { 7, 111, 1024 }, - { 4, 112, 1024 }, { 5, 113, 1024 }, { 5, 114, 1024 }, { 6, 115, 1024 }, { 5, 116, 1024 }, { 6, 117, 1024 }, { 6, 118, 1024 }, { 7, 119, 1024 }, - { 5, 120, 1024 }, { 6, 121, 1024 }, { 6, 122, 1024 }, { 7, 123, 1024 }, { 6, 124, 1024 }, { 7, 125, 1024 }, { 7, 126, 1024 }, { 8, 127, 1024 }, - { 2, 128, 1024 }, { 3, 129, 1024 }, { 3, 130, 1024 }, { 4, 131, 1024 }, { 3, 132, 1024 }, { 4, 133, 1024 }, { 4, 134, 1024 }, { 5, 135, 1024 }, - { 3, 136, 1024 }, { 4, 137, 1024 }, { 4, 138, 1024 }, { 5, 139, 1024 }, { 4, 140, 1024 }, { 5, 141, 1024 }, { 5, 142, 1024 }, { 6, 143, 1024 }, - { 3, 144, 1024 }, { 4, 145, 1024 }, { 4, 146, 1024 }, { 5, 147, 1024 }, { 4, 148, 1024 }, { 5, 149, 1024 }, { 5, 150, 1024 }, { 6, 151, 1024 }, - { 4, 152, 1024 }, { 5, 153, 1024 }, { 5, 154, 1024 }, { 6, 155, 1024 }, { 5, 156, 1024 }, { 6, 157, 1024 }, { 6, 158, 1024 }, { 7, 159, 1024 }, - { 3, 160, 1024 }, { 4, 161, 1024 }, { 4, 162, 1024 }, { 5, 163, 1024 }, { 4, 164, 1024 }, { 5, 165, 1024 }, { 5, 166, 1024 }, { 6, 167, 1024 }, - { 4, 168, 1024 }, { 5, 169, 1024 }, { 5, 170, 1024 }, { 6, 171, 1024 }, { 5, 172, 1024 }, { 6, 173, 1024 }, { 6, 174, 1024 }, { 7, 175, 1024 }, - { 4, 176, 1024 }, { 5, 177, 1024 }, { 5, 178, 1024 }, { 6, 179, 1024 }, { 5, 180, 1024 }, { 6, 181, 1024 }, { 6, 182, 1024 }, { 7, 183, 1024 }, - { 5, 184, 1024 }, { 6, 185, 1024 }, { 6, 186, 1024 }, { 7, 187, 1024 }, { 6, 188, 1024 }, { 7, 189, 1024 }, { 7, 190, 1024 }, { 8, 191, 1024 }, - { 3, 192, 1024 }, { 4, 193, 1024 }, { 4, 194, 1024 }, { 5, 195, 1024 }, { 4, 196, 1024 }, { 5, 197, 1024 }, { 5, 198, 1024 }, { 6, 199, 1024 }, - { 4, 200, 1024 }, { 5, 201, 1024 }, { 5, 202, 1024 }, { 6, 203, 1024 }, { 5, 204, 1024 }, { 6, 205, 1024 }, { 6, 206, 1024 }, { 7, 207, 1024 }, - { 4, 208, 1024 }, { 5, 209, 1024 }, { 5, 210, 1024 }, { 6, 211, 1024 }, { 5, 212, 1024 }, { 6, 213, 1024 }, { 6, 214, 1024 }, { 7, 215, 1024 }, - { 5, 216, 1024 }, { 6, 217, 1024 }, { 6, 218, 1024 }, { 7, 219, 1024 }, { 6, 220, 1024 }, { 7, 221, 1024 }, { 7, 222, 1024 }, { 8, 223, 1024 }, - { 4, 224, 1024 }, { 5, 225, 1024 }, { 5, 226, 1024 }, { 6, 227, 1024 }, { 5, 228, 1024 }, { 6, 229, 1024 }, { 6, 230, 1024 }, { 7, 231, 1024 }, - { 5, 232, 1024 }, { 6, 233, 1024 }, { 6, 234, 1024 }, { 7, 235, 1024 }, { 6, 236, 1024 }, { 7, 237, 1024 }, { 7, 238, 1024 }, { 8, 239, 1024 }, - { 5, 240, 1024 }, { 6, 241, 1024 }, { 6, 242, 1024 }, { 7, 243, 1024 }, { 6, 244, 1024 }, { 7, 245, 1024 }, { 7, 246, 1024 }, { 8, 247, 1024 }, - { 6, 248, 1024 }, { 7, 249, 1024 }, { 7, 250, 1024 }, { 8, 251, 1024 }, { 7, 252, 1024 }, { 8, 253, 1024 }, { 8, 254, 1024 }, { 9, 255, 1024 }, - { 2, 256, 1024 }, { 3, 257, 1024 }, { 3, 258, 1024 }, { 4, 259, 1024 }, { 3, 260, 1024 }, { 4, 261, 1024 }, { 4, 262, 1024 }, { 5, 263, 1024 }, - { 3, 264, 1024 }, { 4, 265, 1024 }, { 4, 266, 1024 }, { 5, 267, 1024 }, { 4, 268, 1024 }, { 5, 269, 1024 }, { 5, 270, 1024 }, { 6, 271, 1024 }, - { 3, 272, 1024 }, { 4, 273, 1024 }, { 4, 274, 1024 }, { 5, 275, 1024 }, { 4, 276, 1024 }, { 5, 277, 1024 }, { 5, 278, 1024 }, { 6, 279, 1024 }, - { 4, 280, 1024 }, { 5, 281, 1024 }, { 5, 282, 1024 }, { 6, 283, 1024 }, { 5, 284, 1024 }, { 6, 285, 1024 }, { 6, 286, 1024 }, { 7, 287, 1024 }, - { 3, 288, 1024 }, { 4, 289, 1024 }, { 4, 290, 1024 }, { 5, 291, 1024 }, { 4, 292, 1024 }, { 5, 293, 1024 }, { 5, 294, 1024 }, { 6, 295, 1024 }, - { 4, 296, 1024 }, { 5, 297, 1024 }, { 5, 298, 1024 }, { 6, 299, 1024 }, { 5, 300, 1024 }, { 6, 301, 1024 }, { 6, 302, 1024 }, { 7, 303, 1024 }, - { 4, 304, 1024 }, { 5, 305, 1024 }, { 5, 306, 1024 }, { 6, 307, 1024 }, { 5, 308, 1024 }, { 6, 309, 1024 }, { 6, 310, 1024 }, { 7, 311, 1024 }, - { 5, 312, 1024 }, { 6, 313, 1024 }, { 6, 314, 1024 }, { 7, 315, 1024 }, { 6, 316, 1024 }, { 7, 317, 1024 }, { 7, 318, 1024 }, { 8, 319, 1024 }, - { 3, 320, 1024 }, { 4, 321, 1024 }, { 4, 322, 1024 }, { 5, 323, 1024 }, { 4, 324, 1024 }, { 5, 325, 1024 }, { 5, 326, 1024 }, { 6, 327, 1024 }, - { 4, 328, 1024 }, { 5, 329, 1024 }, { 5, 330, 1024 }, { 6, 331, 1024 }, { 5, 332, 1024 }, { 6, 333, 1024 }, { 6, 334, 1024 }, { 7, 335, 1024 }, - { 4, 336, 1024 }, { 5, 337, 1024 }, { 5, 338, 1024 }, { 6, 339, 1024 }, { 5, 340, 1024 }, { 6, 341, 1024 }, { 6, 342, 1024 }, { 7, 343, 1024 }, - { 5, 344, 1024 }, { 6, 345, 1024 }, { 6, 346, 1024 }, { 7, 347, 1024 }, { 6, 348, 1024 }, { 7, 349, 1024 }, { 7, 350, 1024 }, { 8, 351, 1024 }, - { 4, 352, 1024 }, { 5, 353, 1024 }, { 5, 354, 1024 }, { 6, 355, 1024 }, { 5, 356, 1024 }, { 6, 357, 1024 }, { 6, 358, 1024 }, { 7, 359, 1024 }, - { 5, 360, 1024 }, { 6, 361, 1024 }, { 6, 362, 1024 }, { 7, 363, 1024 }, { 6, 364, 1024 }, { 7, 365, 1024 }, { 7, 366, 1024 }, { 8, 367, 1024 }, - { 5, 368, 1024 }, { 6, 369, 1024 }, { 6, 370, 1024 }, { 7, 371, 1024 }, { 6, 372, 1024 }, { 7, 373, 1024 }, { 7, 374, 1024 }, { 8, 375, 1024 }, - { 6, 376, 1024 }, { 7, 377, 1024 }, { 7, 378, 1024 }, { 8, 379, 1024 }, { 7, 380, 1024 }, { 8, 381, 1024 }, { 8, 382, 1024 }, { 9, 383, 1024 }, - { 3, 384, 1024 }, { 4, 385, 1024 }, { 4, 386, 1024 }, { 5, 387, 1024 }, { 4, 388, 1024 }, { 5, 389, 1024 }, { 5, 390, 1024 }, { 6, 391, 1024 }, - { 4, 392, 1024 }, { 5, 393, 1024 }, { 5, 394, 1024 }, { 6, 395, 1024 }, { 5, 396, 1024 }, { 6, 397, 1024 }, { 6, 398, 1024 }, { 7, 399, 1024 }, - { 4, 400, 1024 }, { 5, 401, 1024 }, { 5, 402, 1024 }, { 6, 403, 1024 }, { 5, 404, 1024 }, { 6, 405, 1024 }, { 6, 406, 1024 }, { 7, 407, 1024 }, - { 5, 408, 1024 }, { 6, 409, 1024 }, { 6, 410, 1024 }, { 7, 411, 1024 }, { 6, 412, 1024 }, { 7, 413, 1024 }, { 7, 414, 1024 }, { 8, 415, 1024 }, - { 4, 416, 1024 }, { 5, 417, 1024 }, { 5, 418, 1024 }, { 6, 419, 1024 }, { 5, 420, 1024 }, { 6, 421, 1024 }, { 6, 422, 1024 }, { 7, 423, 1024 }, - { 5, 424, 1024 }, { 6, 425, 1024 }, { 6, 426, 1024 }, { 7, 427, 1024 }, { 6, 428, 1024 }, { 7, 429, 1024 }, { 7, 430, 1024 }, { 8, 431, 1024 }, - { 5, 432, 1024 }, { 6, 433, 1024 }, { 6, 434, 1024 }, { 7, 435, 1024 }, { 6, 436, 1024 }, { 7, 437, 1024 }, { 7, 438, 1024 }, { 8, 439, 1024 }, - { 6, 440, 1024 }, { 7, 441, 1024 }, { 7, 442, 1024 }, { 8, 443, 1024 }, { 7, 444, 1024 }, { 8, 445, 1024 }, { 8, 446, 1024 }, { 9, 447, 1024 }, - { 4, 448, 1024 }, { 5, 449, 1024 }, { 5, 450, 1024 }, { 6, 451, 1024 }, { 5, 452, 1024 }, { 6, 453, 1024 }, { 6, 454, 1024 }, { 7, 455, 1024 }, - { 5, 456, 1024 }, { 6, 457, 1024 }, { 6, 458, 1024 }, { 7, 459, 1024 }, { 6, 460, 1024 }, { 7, 461, 1024 }, { 7, 462, 1024 }, { 8, 463, 1024 }, - { 5, 464, 1024 }, { 6, 465, 1024 }, { 6, 466, 1024 }, { 7, 467, 1024 }, { 6, 468, 1024 }, { 7, 469, 1024 }, { 7, 470, 1024 }, { 8, 471, 1024 }, - { 6, 472, 1024 }, { 7, 473, 1024 }, { 7, 474, 1024 }, { 8, 475, 1024 }, { 7, 476, 1024 }, { 8, 477, 1024 }, { 8, 478, 1024 }, { 9, 479, 1024 }, - { 5, 480, 1024 }, { 6, 481, 1024 }, { 6, 482, 1024 }, { 7, 483, 1024 }, { 6, 484, 1024 }, { 7, 485, 1024 }, { 7, 486, 1024 }, { 8, 487, 1024 }, - { 6, 488, 1024 }, { 7, 489, 1024 }, { 7, 490, 1024 }, { 8, 491, 1024 }, { 7, 492, 1024 }, { 8, 493, 1024 }, { 8, 494, 1024 }, { 9, 495, 1024 }, - { 6, 496, 1024 }, { 7, 497, 1024 }, { 7, 498, 1024 }, { 8, 499, 1024 }, { 7, 500, 1024 }, { 8, 501, 1024 }, { 8, 502, 1024 }, { 9, 503, 1024 }, - { 7, 504, 1024 }, { 8, 505, 1024 }, { 8, 506, 1024 }, { 9, 507, 1024 }, { 8, 508, 1024 }, { 9, 509, 1024 }, { 9, 510, 1024 }, { 10, 511, 1024 }, - { 2, 512, 1024 }, { 3, 513, 1024 }, { 3, 514, 1024 }, { 4, 515, 1024 }, { 3, 516, 1024 }, { 4, 517, 1024 }, { 4, 518, 1024 }, { 5, 519, 1024 }, - { 3, 520, 1024 }, { 4, 521, 1024 }, { 4, 522, 1024 }, { 5, 523, 1024 }, { 4, 524, 1024 }, { 5, 525, 1024 }, { 5, 526, 1024 }, { 6, 527, 1024 }, - { 3, 528, 1024 }, { 4, 529, 1024 }, { 4, 530, 1024 }, { 5, 531, 1024 }, { 4, 532, 1024 }, { 5, 533, 1024 }, { 5, 534, 1024 }, { 6, 535, 1024 }, - { 4, 536, 1024 }, { 5, 537, 1024 }, { 5, 538, 1024 }, { 6, 539, 1024 }, { 5, 540, 1024 }, { 6, 541, 1024 }, { 6, 542, 1024 }, { 7, 543, 1024 }, - { 3, 544, 1024 }, { 4, 545, 1024 }, { 4, 546, 1024 }, { 5, 547, 1024 }, { 4, 548, 1024 }, { 5, 549, 1024 }, { 5, 550, 1024 }, { 6, 551, 1024 }, - { 4, 552, 1024 }, { 5, 553, 1024 }, { 5, 554, 1024 }, { 6, 555, 1024 }, { 5, 556, 1024 }, { 6, 557, 1024 }, { 6, 558, 1024 }, { 7, 559, 1024 }, - { 4, 560, 1024 }, { 5, 561, 1024 }, { 5, 562, 1024 }, { 6, 563, 1024 }, { 5, 564, 1024 }, { 6, 565, 1024 }, { 6, 566, 1024 }, { 7, 567, 1024 }, - { 5, 568, 1024 }, { 6, 569, 1024 }, { 6, 570, 1024 }, { 7, 571, 1024 }, { 6, 572, 1024 }, { 7, 573, 1024 }, { 7, 574, 1024 }, { 8, 575, 1024 }, - { 3, 576, 1024 }, { 4, 577, 1024 }, { 4, 578, 1024 }, { 5, 579, 1024 }, { 4, 580, 1024 }, { 5, 581, 1024 }, { 5, 582, 1024 }, { 6, 583, 1024 }, - { 4, 584, 1024 }, { 5, 585, 1024 }, { 5, 586, 1024 }, { 6, 587, 1024 }, { 5, 588, 1024 }, { 6, 589, 1024 }, { 6, 590, 1024 }, { 7, 591, 1024 }, - { 4, 592, 1024 }, { 5, 593, 1024 }, { 5, 594, 1024 }, { 6, 595, 1024 }, { 5, 596, 1024 }, { 6, 597, 1024 }, { 6, 598, 1024 }, { 7, 599, 1024 }, - { 5, 600, 1024 }, { 6, 601, 1024 }, { 6, 602, 1024 }, { 7, 603, 1024 }, { 6, 604, 1024 }, { 7, 605, 1024 }, { 7, 606, 1024 }, { 8, 607, 1024 }, - { 4, 608, 1024 }, { 5, 609, 1024 }, { 5, 610, 1024 }, { 6, 611, 1024 }, { 5, 612, 1024 }, { 6, 613, 1024 }, { 6, 614, 1024 }, { 7, 615, 1024 }, - { 5, 616, 1024 }, { 6, 617, 1024 }, { 6, 618, 1024 }, { 7, 619, 1024 }, { 6, 620, 1024 }, { 7, 621, 1024 }, { 7, 622, 1024 }, { 8, 623, 1024 }, - { 5, 624, 1024 }, { 6, 625, 1024 }, { 6, 626, 1024 }, { 7, 627, 1024 }, { 6, 628, 1024 }, { 7, 629, 1024 }, { 7, 630, 1024 }, { 8, 631, 1024 }, - { 6, 632, 1024 }, { 7, 633, 1024 }, { 7, 634, 1024 }, { 8, 635, 1024 }, { 7, 636, 1024 }, { 8, 637, 1024 }, { 8, 638, 1024 }, { 9, 639, 1024 }, - { 3, 640, 1024 }, { 4, 641, 1024 }, { 4, 642, 1024 }, { 5, 643, 1024 }, { 4, 644, 1024 }, { 5, 645, 1024 }, { 5, 646, 1024 }, { 6, 647, 1024 }, - { 4, 648, 1024 }, { 5, 649, 1024 }, { 5, 650, 1024 }, { 6, 651, 1024 }, { 5, 652, 1024 }, { 6, 653, 1024 }, { 6, 654, 1024 }, { 7, 655, 1024 }, - { 4, 656, 1024 }, { 5, 657, 1024 }, { 5, 658, 1024 }, { 6, 659, 1024 }, { 5, 660, 1024 }, { 6, 661, 1024 }, { 6, 662, 1024 }, { 7, 663, 1024 }, - { 5, 664, 1024 }, { 6, 665, 1024 }, { 6, 666, 1024 }, { 7, 667, 1024 }, { 6, 668, 1024 }, { 7, 669, 1024 }, { 7, 670, 1024 }, { 8, 671, 1024 }, - { 4, 672, 1024 }, { 5, 673, 1024 }, { 5, 674, 1024 }, { 6, 675, 1024 }, { 5, 676, 1024 }, { 6, 677, 1024 }, { 6, 678, 1024 }, { 7, 679, 1024 }, - { 5, 680, 1024 }, { 6, 681, 1024 }, { 6, 682, 1024 }, { 7, 683, 1024 }, { 6, 684, 1024 }, { 7, 685, 1024 }, { 7, 686, 1024 }, { 8, 687, 1024 }, - { 5, 688, 1024 }, { 6, 689, 1024 }, { 6, 690, 1024 }, { 7, 691, 1024 }, { 6, 692, 1024 }, { 7, 693, 1024 }, { 7, 694, 1024 }, { 8, 695, 1024 }, - { 6, 696, 1024 }, { 7, 697, 1024 }, { 7, 698, 1024 }, { 8, 699, 1024 }, { 7, 700, 1024 }, { 8, 701, 1024 }, { 8, 702, 1024 }, { 9, 703, 1024 }, - { 4, 704, 1024 }, { 5, 705, 1024 }, { 5, 706, 1024 }, { 6, 707, 1024 }, { 5, 708, 1024 }, { 6, 709, 1024 }, { 6, 710, 1024 }, { 7, 711, 1024 }, - { 5, 712, 1024 }, { 6, 713, 1024 }, { 6, 714, 1024 }, { 7, 715, 1024 }, { 6, 716, 1024 }, { 7, 717, 1024 }, { 7, 718, 1024 }, { 8, 719, 1024 }, - { 5, 720, 1024 }, { 6, 721, 1024 }, { 6, 722, 1024 }, { 7, 723, 1024 }, { 6, 724, 1024 }, { 7, 725, 1024 }, { 7, 726, 1024 }, { 8, 727, 1024 }, - { 6, 728, 1024 }, { 7, 729, 1024 }, { 7, 730, 1024 }, { 8, 731, 1024 }, { 7, 732, 1024 }, { 8, 733, 1024 }, { 8, 734, 1024 }, { 9, 735, 1024 }, - { 5, 736, 1024 }, { 6, 737, 1024 }, { 6, 738, 1024 }, { 7, 739, 1024 }, { 6, 740, 1024 }, { 7, 741, 1024 }, { 7, 742, 1024 }, { 8, 743, 1024 }, - { 6, 744, 1024 }, { 7, 745, 1024 }, { 7, 746, 1024 }, { 8, 747, 1024 }, { 7, 748, 1024 }, { 8, 749, 1024 }, { 8, 750, 1024 }, { 9, 751, 1024 }, - { 6, 752, 1024 }, { 7, 753, 1024 }, { 7, 754, 1024 }, { 8, 755, 1024 }, { 7, 756, 1024 }, { 8, 757, 1024 }, { 8, 758, 1024 }, { 9, 759, 1024 }, - { 7, 760, 1024 }, { 8, 761, 1024 }, { 8, 762, 1024 }, { 9, 763, 1024 }, { 8, 764, 1024 }, { 9, 765, 1024 }, { 9, 766, 1024 }, { 10, 767, 1024 }, - { 3, 768, 1024 }, { 4, 769, 1024 }, { 4, 770, 1024 }, { 5, 771, 1024 }, { 4, 772, 1024 }, { 5, 773, 1024 }, { 5, 774, 1024 }, { 6, 775, 1024 }, - { 4, 776, 1024 }, { 5, 777, 1024 }, { 5, 778, 1024 }, { 6, 779, 1024 }, { 5, 780, 1024 }, { 6, 781, 1024 }, { 6, 782, 1024 }, { 7, 783, 1024 }, - { 4, 784, 1024 }, { 5, 785, 1024 }, { 5, 786, 1024 }, { 6, 787, 1024 }, { 5, 788, 1024 }, { 6, 789, 1024 }, { 6, 790, 1024 }, { 7, 791, 1024 }, - { 5, 792, 1024 }, { 6, 793, 1024 }, { 6, 794, 1024 }, { 7, 795, 1024 }, { 6, 796, 1024 }, { 7, 797, 1024 }, { 7, 798, 1024 }, { 8, 799, 1024 }, - { 4, 800, 1024 }, { 5, 801, 1024 }, { 5, 802, 1024 }, { 6, 803, 1024 }, { 5, 804, 1024 }, { 6, 805, 1024 }, { 6, 806, 1024 }, { 7, 807, 1024 }, - { 5, 808, 1024 }, { 6, 809, 1024 }, { 6, 810, 1024 }, { 7, 811, 1024 }, { 6, 812, 1024 }, { 7, 813, 1024 }, { 7, 814, 1024 }, { 8, 815, 1024 }, - { 5, 816, 1024 }, { 6, 817, 1024 }, { 6, 818, 1024 }, { 7, 819, 1024 }, { 6, 820, 1024 }, { 7, 821, 1024 }, { 7, 822, 1024 }, { 8, 823, 1024 }, - { 6, 824, 1024 }, { 7, 825, 1024 }, { 7, 826, 1024 }, { 8, 827, 1024 }, { 7, 828, 1024 }, { 8, 829, 1024 }, { 8, 830, 1024 }, { 9, 831, 1024 }, - { 4, 832, 1024 }, { 5, 833, 1024 }, { 5, 834, 1024 }, { 6, 835, 1024 }, { 5, 836, 1024 }, { 6, 837, 1024 }, { 6, 838, 1024 }, { 7, 839, 1024 }, - { 5, 840, 1024 }, { 6, 841, 1024 }, { 6, 842, 1024 }, { 7, 843, 1024 }, { 6, 844, 1024 }, { 7, 845, 1024 }, { 7, 846, 1024 }, { 8, 847, 1024 }, - { 5, 848, 1024 }, { 6, 849, 1024 }, { 6, 850, 1024 }, { 7, 851, 1024 }, { 6, 852, 1024 }, { 7, 853, 1024 }, { 7, 854, 1024 }, { 8, 855, 1024 }, - { 6, 856, 1024 }, { 7, 857, 1024 }, { 7, 858, 1024 }, { 8, 859, 1024 }, { 7, 860, 1024 }, { 8, 861, 1024 }, { 8, 862, 1024 }, { 9, 863, 1024 }, - { 5, 864, 1024 }, { 6, 865, 1024 }, { 6, 866, 1024 }, { 7, 867, 1024 }, { 6, 868, 1024 }, { 7, 869, 1024 }, { 7, 870, 1024 }, { 8, 871, 1024 }, - { 6, 872, 1024 }, { 7, 873, 1024 }, { 7, 874, 1024 }, { 8, 875, 1024 }, { 7, 876, 1024 }, { 8, 877, 1024 }, { 8, 878, 1024 }, { 9, 879, 1024 }, - { 6, 880, 1024 }, { 7, 881, 1024 }, { 7, 882, 1024 }, { 8, 883, 1024 }, { 7, 884, 1024 }, { 8, 885, 1024 }, { 8, 886, 1024 }, { 9, 887, 1024 }, - { 7, 888, 1024 }, { 8, 889, 1024 }, { 8, 890, 1024 }, { 9, 891, 1024 }, { 8, 892, 1024 }, { 9, 893, 1024 }, { 9, 894, 1024 }, { 10, 895, 1024 }, - { 4, 896, 1024 }, { 5, 897, 1024 }, { 5, 898, 1024 }, { 6, 899, 1024 }, { 5, 900, 1024 }, { 6, 901, 1024 }, { 6, 902, 1024 }, { 7, 903, 1024 }, - { 5, 904, 1024 }, { 6, 905, 1024 }, { 6, 906, 1024 }, { 7, 907, 1024 }, { 6, 908, 1024 }, { 7, 909, 1024 }, { 7, 910, 1024 }, { 8, 911, 1024 }, - { 5, 912, 1024 }, { 6, 913, 1024 }, { 6, 914, 1024 }, { 7, 915, 1024 }, { 6, 916, 1024 }, { 7, 917, 1024 }, { 7, 918, 1024 }, { 8, 919, 1024 }, - { 6, 920, 1024 }, { 7, 921, 1024 }, { 7, 922, 1024 }, { 8, 923, 1024 }, { 7, 924, 1024 }, { 8, 925, 1024 }, { 8, 926, 1024 }, { 9, 927, 1024 }, - { 5, 928, 1024 }, { 6, 929, 1024 }, { 6, 930, 1024 }, { 7, 931, 1024 }, { 6, 932, 1024 }, { 7, 933, 1024 }, { 7, 934, 1024 }, { 8, 935, 1024 }, - { 6, 936, 1024 }, { 7, 937, 1024 }, { 7, 938, 1024 }, { 8, 939, 1024 }, { 7, 940, 1024 }, { 8, 941, 1024 }, { 8, 942, 1024 }, { 9, 943, 1024 }, - { 6, 944, 1024 }, { 7, 945, 1024 }, { 7, 946, 1024 }, { 8, 947, 1024 }, { 7, 948, 1024 }, { 8, 949, 1024 }, { 8, 950, 1024 }, { 9, 951, 1024 }, - { 7, 952, 1024 }, { 8, 953, 1024 }, { 8, 954, 1024 }, { 9, 955, 1024 }, { 8, 956, 1024 }, { 9, 957, 1024 }, { 9, 958, 1024 }, { 10, 959, 1024 }, - { 5, 960, 1024 }, { 6, 961, 1024 }, { 6, 962, 1024 }, { 7, 963, 1024 }, { 6, 964, 1024 }, { 7, 965, 1024 }, { 7, 966, 1024 }, { 8, 967, 1024 }, - { 6, 968, 1024 }, { 7, 969, 1024 }, { 7, 970, 1024 }, { 8, 971, 1024 }, { 7, 972, 1024 }, { 8, 973, 1024 }, { 8, 974, 1024 }, { 9, 975, 1024 }, - { 6, 976, 1024 }, { 7, 977, 1024 }, { 7, 978, 1024 }, { 8, 979, 1024 }, { 7, 980, 1024 }, { 8, 981, 1024 }, { 8, 982, 1024 }, { 9, 983, 1024 }, - { 7, 984, 1024 }, { 8, 985, 1024 }, { 8, 986, 1024 }, { 9, 987, 1024 }, { 8, 988, 1024 }, { 9, 989, 1024 }, { 9, 990, 1024 }, { 10, 991, 1024 }, - { 6, 992, 1024 }, { 7, 993, 1024 }, { 7, 994, 1024 }, { 8, 995, 1024 }, { 7, 996, 1024 }, { 8, 997, 1024 }, { 8, 998, 1024 }, { 9, 999, 1024 }, - { 7, 1000, 1024 }, { 8, 1001, 1024 }, { 8, 1002, 1024 }, { 9, 1003, 1024 }, { 8, 1004, 1024 }, { 9, 1005, 1024 }, { 9, 1006, 1024 }, { 10, 1007, 1024 }, - { 7, 1008, 1024 }, { 8, 1009, 1024 }, { 8, 1010, 1024 }, { 9, 1011, 1024 }, { 8, 1012, 1024 }, { 9, 1013, 1024 }, { 9, 1014, 1024 }, { 10, 1015, 1024 }, - { 8, 1016, 1024 }, { 9, 1017, 1024 }, { 9, 1018, 1024 }, { 10, 1019, 1024 }, { 9, 1020, 1024 }, { 10, 1021, 1024 }, { 10, 1022, 1024 }, { 11, 1023, 1024 }, -#if FP_LUT > 11 - { 1, 0, 0 }, { 2, 1, 2048 }, { 2, 2, 2048 }, { 3, 3, 2048 }, { 2, 4, 2048 }, { 3, 5, 2048 }, { 3, 6, 2048 }, { 4, 7, 2048 }, - { 2, 8, 2048 }, { 3, 9, 2048 }, { 3, 10, 2048 }, { 4, 11, 2048 }, { 3, 12, 2048 }, { 4, 13, 2048 }, { 4, 14, 2048 }, { 5, 15, 2048 }, - { 2, 16, 2048 }, { 3, 17, 2048 }, { 3, 18, 2048 }, { 4, 19, 2048 }, { 3, 20, 2048 }, { 4, 21, 2048 }, { 4, 22, 2048 }, { 5, 23, 2048 }, - { 3, 24, 2048 }, { 4, 25, 2048 }, { 4, 26, 2048 }, { 5, 27, 2048 }, { 4, 28, 2048 }, { 5, 29, 2048 }, { 5, 30, 2048 }, { 6, 31, 2048 }, - { 2, 32, 2048 }, { 3, 33, 2048 }, { 3, 34, 2048 }, { 4, 35, 2048 }, { 3, 36, 2048 }, { 4, 37, 2048 }, { 4, 38, 2048 }, { 5, 39, 2048 }, - { 3, 40, 2048 }, { 4, 41, 2048 }, { 4, 42, 2048 }, { 5, 43, 2048 }, { 4, 44, 2048 }, { 5, 45, 2048 }, { 5, 46, 2048 }, { 6, 47, 2048 }, - { 3, 48, 2048 }, { 4, 49, 2048 }, { 4, 50, 2048 }, { 5, 51, 2048 }, { 4, 52, 2048 }, { 5, 53, 2048 }, { 5, 54, 2048 }, { 6, 55, 2048 }, - { 4, 56, 2048 }, { 5, 57, 2048 }, { 5, 58, 2048 }, { 6, 59, 2048 }, { 5, 60, 2048 }, { 6, 61, 2048 }, { 6, 62, 2048 }, { 7, 63, 2048 }, - { 2, 64, 2048 }, { 3, 65, 2048 }, { 3, 66, 2048 }, { 4, 67, 2048 }, { 3, 68, 2048 }, { 4, 69, 2048 }, { 4, 70, 2048 }, { 5, 71, 2048 }, - { 3, 72, 2048 }, { 4, 73, 2048 }, { 4, 74, 2048 }, { 5, 75, 2048 }, { 4, 76, 2048 }, { 5, 77, 2048 }, { 5, 78, 2048 }, { 6, 79, 2048 }, - { 3, 80, 2048 }, { 4, 81, 2048 }, { 4, 82, 2048 }, { 5, 83, 2048 }, { 4, 84, 2048 }, { 5, 85, 2048 }, { 5, 86, 2048 }, { 6, 87, 2048 }, - { 4, 88, 2048 }, { 5, 89, 2048 }, { 5, 90, 2048 }, { 6, 91, 2048 }, { 5, 92, 2048 }, { 6, 93, 2048 }, { 6, 94, 2048 }, { 7, 95, 2048 }, - { 3, 96, 2048 }, { 4, 97, 2048 }, { 4, 98, 2048 }, { 5, 99, 2048 }, { 4, 100, 2048 }, { 5, 101, 2048 }, { 5, 102, 2048 }, { 6, 103, 2048 }, - { 4, 104, 2048 }, { 5, 105, 2048 }, { 5, 106, 2048 }, { 6, 107, 2048 }, { 5, 108, 2048 }, { 6, 109, 2048 }, { 6, 110, 2048 }, { 7, 111, 2048 }, - { 4, 112, 2048 }, { 5, 113, 2048 }, { 5, 114, 2048 }, { 6, 115, 2048 }, { 5, 116, 2048 }, { 6, 117, 2048 }, { 6, 118, 2048 }, { 7, 119, 2048 }, - { 5, 120, 2048 }, { 6, 121, 2048 }, { 6, 122, 2048 }, { 7, 123, 2048 }, { 6, 124, 2048 }, { 7, 125, 2048 }, { 7, 126, 2048 }, { 8, 127, 2048 }, - { 2, 128, 2048 }, { 3, 129, 2048 }, { 3, 130, 2048 }, { 4, 131, 2048 }, { 3, 132, 2048 }, { 4, 133, 2048 }, { 4, 134, 2048 }, { 5, 135, 2048 }, - { 3, 136, 2048 }, { 4, 137, 2048 }, { 4, 138, 2048 }, { 5, 139, 2048 }, { 4, 140, 2048 }, { 5, 141, 2048 }, { 5, 142, 2048 }, { 6, 143, 2048 }, - { 3, 144, 2048 }, { 4, 145, 2048 }, { 4, 146, 2048 }, { 5, 147, 2048 }, { 4, 148, 2048 }, { 5, 149, 2048 }, { 5, 150, 2048 }, { 6, 151, 2048 }, - { 4, 152, 2048 }, { 5, 153, 2048 }, { 5, 154, 2048 }, { 6, 155, 2048 }, { 5, 156, 2048 }, { 6, 157, 2048 }, { 6, 158, 2048 }, { 7, 159, 2048 }, - { 3, 160, 2048 }, { 4, 161, 2048 }, { 4, 162, 2048 }, { 5, 163, 2048 }, { 4, 164, 2048 }, { 5, 165, 2048 }, { 5, 166, 2048 }, { 6, 167, 2048 }, - { 4, 168, 2048 }, { 5, 169, 2048 }, { 5, 170, 2048 }, { 6, 171, 2048 }, { 5, 172, 2048 }, { 6, 173, 2048 }, { 6, 174, 2048 }, { 7, 175, 2048 }, - { 4, 176, 2048 }, { 5, 177, 2048 }, { 5, 178, 2048 }, { 6, 179, 2048 }, { 5, 180, 2048 }, { 6, 181, 2048 }, { 6, 182, 2048 }, { 7, 183, 2048 }, - { 5, 184, 2048 }, { 6, 185, 2048 }, { 6, 186, 2048 }, { 7, 187, 2048 }, { 6, 188, 2048 }, { 7, 189, 2048 }, { 7, 190, 2048 }, { 8, 191, 2048 }, - { 3, 192, 2048 }, { 4, 193, 2048 }, { 4, 194, 2048 }, { 5, 195, 2048 }, { 4, 196, 2048 }, { 5, 197, 2048 }, { 5, 198, 2048 }, { 6, 199, 2048 }, - { 4, 200, 2048 }, { 5, 201, 2048 }, { 5, 202, 2048 }, { 6, 203, 2048 }, { 5, 204, 2048 }, { 6, 205, 2048 }, { 6, 206, 2048 }, { 7, 207, 2048 }, - { 4, 208, 2048 }, { 5, 209, 2048 }, { 5, 210, 2048 }, { 6, 211, 2048 }, { 5, 212, 2048 }, { 6, 213, 2048 }, { 6, 214, 2048 }, { 7, 215, 2048 }, - { 5, 216, 2048 }, { 6, 217, 2048 }, { 6, 218, 2048 }, { 7, 219, 2048 }, { 6, 220, 2048 }, { 7, 221, 2048 }, { 7, 222, 2048 }, { 8, 223, 2048 }, - { 4, 224, 2048 }, { 5, 225, 2048 }, { 5, 226, 2048 }, { 6, 227, 2048 }, { 5, 228, 2048 }, { 6, 229, 2048 }, { 6, 230, 2048 }, { 7, 231, 2048 }, - { 5, 232, 2048 }, { 6, 233, 2048 }, { 6, 234, 2048 }, { 7, 235, 2048 }, { 6, 236, 2048 }, { 7, 237, 2048 }, { 7, 238, 2048 }, { 8, 239, 2048 }, - { 5, 240, 2048 }, { 6, 241, 2048 }, { 6, 242, 2048 }, { 7, 243, 2048 }, { 6, 244, 2048 }, { 7, 245, 2048 }, { 7, 246, 2048 }, { 8, 247, 2048 }, - { 6, 248, 2048 }, { 7, 249, 2048 }, { 7, 250, 2048 }, { 8, 251, 2048 }, { 7, 252, 2048 }, { 8, 253, 2048 }, { 8, 254, 2048 }, { 9, 255, 2048 }, - { 2, 256, 2048 }, { 3, 257, 2048 }, { 3, 258, 2048 }, { 4, 259, 2048 }, { 3, 260, 2048 }, { 4, 261, 2048 }, { 4, 262, 2048 }, { 5, 263, 2048 }, - { 3, 264, 2048 }, { 4, 265, 2048 }, { 4, 266, 2048 }, { 5, 267, 2048 }, { 4, 268, 2048 }, { 5, 269, 2048 }, { 5, 270, 2048 }, { 6, 271, 2048 }, - { 3, 272, 2048 }, { 4, 273, 2048 }, { 4, 274, 2048 }, { 5, 275, 2048 }, { 4, 276, 2048 }, { 5, 277, 2048 }, { 5, 278, 2048 }, { 6, 279, 2048 }, - { 4, 280, 2048 }, { 5, 281, 2048 }, { 5, 282, 2048 }, { 6, 283, 2048 }, { 5, 284, 2048 }, { 6, 285, 2048 }, { 6, 286, 2048 }, { 7, 287, 2048 }, - { 3, 288, 2048 }, { 4, 289, 2048 }, { 4, 290, 2048 }, { 5, 291, 2048 }, { 4, 292, 2048 }, { 5, 293, 2048 }, { 5, 294, 2048 }, { 6, 295, 2048 }, - { 4, 296, 2048 }, { 5, 297, 2048 }, { 5, 298, 2048 }, { 6, 299, 2048 }, { 5, 300, 2048 }, { 6, 301, 2048 }, { 6, 302, 2048 }, { 7, 303, 2048 }, - { 4, 304, 2048 }, { 5, 305, 2048 }, { 5, 306, 2048 }, { 6, 307, 2048 }, { 5, 308, 2048 }, { 6, 309, 2048 }, { 6, 310, 2048 }, { 7, 311, 2048 }, - { 5, 312, 2048 }, { 6, 313, 2048 }, { 6, 314, 2048 }, { 7, 315, 2048 }, { 6, 316, 2048 }, { 7, 317, 2048 }, { 7, 318, 2048 }, { 8, 319, 2048 }, - { 3, 320, 2048 }, { 4, 321, 2048 }, { 4, 322, 2048 }, { 5, 323, 2048 }, { 4, 324, 2048 }, { 5, 325, 2048 }, { 5, 326, 2048 }, { 6, 327, 2048 }, - { 4, 328, 2048 }, { 5, 329, 2048 }, { 5, 330, 2048 }, { 6, 331, 2048 }, { 5, 332, 2048 }, { 6, 333, 2048 }, { 6, 334, 2048 }, { 7, 335, 2048 }, - { 4, 336, 2048 }, { 5, 337, 2048 }, { 5, 338, 2048 }, { 6, 339, 2048 }, { 5, 340, 2048 }, { 6, 341, 2048 }, { 6, 342, 2048 }, { 7, 343, 2048 }, - { 5, 344, 2048 }, { 6, 345, 2048 }, { 6, 346, 2048 }, { 7, 347, 2048 }, { 6, 348, 2048 }, { 7, 349, 2048 }, { 7, 350, 2048 }, { 8, 351, 2048 }, - { 4, 352, 2048 }, { 5, 353, 2048 }, { 5, 354, 2048 }, { 6, 355, 2048 }, { 5, 356, 2048 }, { 6, 357, 2048 }, { 6, 358, 2048 }, { 7, 359, 2048 }, - { 5, 360, 2048 }, { 6, 361, 2048 }, { 6, 362, 2048 }, { 7, 363, 2048 }, { 6, 364, 2048 }, { 7, 365, 2048 }, { 7, 366, 2048 }, { 8, 367, 2048 }, - { 5, 368, 2048 }, { 6, 369, 2048 }, { 6, 370, 2048 }, { 7, 371, 2048 }, { 6, 372, 2048 }, { 7, 373, 2048 }, { 7, 374, 2048 }, { 8, 375, 2048 }, - { 6, 376, 2048 }, { 7, 377, 2048 }, { 7, 378, 2048 }, { 8, 379, 2048 }, { 7, 380, 2048 }, { 8, 381, 2048 }, { 8, 382, 2048 }, { 9, 383, 2048 }, - { 3, 384, 2048 }, { 4, 385, 2048 }, { 4, 386, 2048 }, { 5, 387, 2048 }, { 4, 388, 2048 }, { 5, 389, 2048 }, { 5, 390, 2048 }, { 6, 391, 2048 }, - { 4, 392, 2048 }, { 5, 393, 2048 }, { 5, 394, 2048 }, { 6, 395, 2048 }, { 5, 396, 2048 }, { 6, 397, 2048 }, { 6, 398, 2048 }, { 7, 399, 2048 }, - { 4, 400, 2048 }, { 5, 401, 2048 }, { 5, 402, 2048 }, { 6, 403, 2048 }, { 5, 404, 2048 }, { 6, 405, 2048 }, { 6, 406, 2048 }, { 7, 407, 2048 }, - { 5, 408, 2048 }, { 6, 409, 2048 }, { 6, 410, 2048 }, { 7, 411, 2048 }, { 6, 412, 2048 }, { 7, 413, 2048 }, { 7, 414, 2048 }, { 8, 415, 2048 }, - { 4, 416, 2048 }, { 5, 417, 2048 }, { 5, 418, 2048 }, { 6, 419, 2048 }, { 5, 420, 2048 }, { 6, 421, 2048 }, { 6, 422, 2048 }, { 7, 423, 2048 }, - { 5, 424, 2048 }, { 6, 425, 2048 }, { 6, 426, 2048 }, { 7, 427, 2048 }, { 6, 428, 2048 }, { 7, 429, 2048 }, { 7, 430, 2048 }, { 8, 431, 2048 }, - { 5, 432, 2048 }, { 6, 433, 2048 }, { 6, 434, 2048 }, { 7, 435, 2048 }, { 6, 436, 2048 }, { 7, 437, 2048 }, { 7, 438, 2048 }, { 8, 439, 2048 }, - { 6, 440, 2048 }, { 7, 441, 2048 }, { 7, 442, 2048 }, { 8, 443, 2048 }, { 7, 444, 2048 }, { 8, 445, 2048 }, { 8, 446, 2048 }, { 9, 447, 2048 }, - { 4, 448, 2048 }, { 5, 449, 2048 }, { 5, 450, 2048 }, { 6, 451, 2048 }, { 5, 452, 2048 }, { 6, 453, 2048 }, { 6, 454, 2048 }, { 7, 455, 2048 }, - { 5, 456, 2048 }, { 6, 457, 2048 }, { 6, 458, 2048 }, { 7, 459, 2048 }, { 6, 460, 2048 }, { 7, 461, 2048 }, { 7, 462, 2048 }, { 8, 463, 2048 }, - { 5, 464, 2048 }, { 6, 465, 2048 }, { 6, 466, 2048 }, { 7, 467, 2048 }, { 6, 468, 2048 }, { 7, 469, 2048 }, { 7, 470, 2048 }, { 8, 471, 2048 }, - { 6, 472, 2048 }, { 7, 473, 2048 }, { 7, 474, 2048 }, { 8, 475, 2048 }, { 7, 476, 2048 }, { 8, 477, 2048 }, { 8, 478, 2048 }, { 9, 479, 2048 }, - { 5, 480, 2048 }, { 6, 481, 2048 }, { 6, 482, 2048 }, { 7, 483, 2048 }, { 6, 484, 2048 }, { 7, 485, 2048 }, { 7, 486, 2048 }, { 8, 487, 2048 }, - { 6, 488, 2048 }, { 7, 489, 2048 }, { 7, 490, 2048 }, { 8, 491, 2048 }, { 7, 492, 2048 }, { 8, 493, 2048 }, { 8, 494, 2048 }, { 9, 495, 2048 }, - { 6, 496, 2048 }, { 7, 497, 2048 }, { 7, 498, 2048 }, { 8, 499, 2048 }, { 7, 500, 2048 }, { 8, 501, 2048 }, { 8, 502, 2048 }, { 9, 503, 2048 }, - { 7, 504, 2048 }, { 8, 505, 2048 }, { 8, 506, 2048 }, { 9, 507, 2048 }, { 8, 508, 2048 }, { 9, 509, 2048 }, { 9, 510, 2048 }, { 10, 511, 2048 }, - { 2, 512, 2048 }, { 3, 513, 2048 }, { 3, 514, 2048 }, { 4, 515, 2048 }, { 3, 516, 2048 }, { 4, 517, 2048 }, { 4, 518, 2048 }, { 5, 519, 2048 }, - { 3, 520, 2048 }, { 4, 521, 2048 }, { 4, 522, 2048 }, { 5, 523, 2048 }, { 4, 524, 2048 }, { 5, 525, 2048 }, { 5, 526, 2048 }, { 6, 527, 2048 }, - { 3, 528, 2048 }, { 4, 529, 2048 }, { 4, 530, 2048 }, { 5, 531, 2048 }, { 4, 532, 2048 }, { 5, 533, 2048 }, { 5, 534, 2048 }, { 6, 535, 2048 }, - { 4, 536, 2048 }, { 5, 537, 2048 }, { 5, 538, 2048 }, { 6, 539, 2048 }, { 5, 540, 2048 }, { 6, 541, 2048 }, { 6, 542, 2048 }, { 7, 543, 2048 }, - { 3, 544, 2048 }, { 4, 545, 2048 }, { 4, 546, 2048 }, { 5, 547, 2048 }, { 4, 548, 2048 }, { 5, 549, 2048 }, { 5, 550, 2048 }, { 6, 551, 2048 }, - { 4, 552, 2048 }, { 5, 553, 2048 }, { 5, 554, 2048 }, { 6, 555, 2048 }, { 5, 556, 2048 }, { 6, 557, 2048 }, { 6, 558, 2048 }, { 7, 559, 2048 }, - { 4, 560, 2048 }, { 5, 561, 2048 }, { 5, 562, 2048 }, { 6, 563, 2048 }, { 5, 564, 2048 }, { 6, 565, 2048 }, { 6, 566, 2048 }, { 7, 567, 2048 }, - { 5, 568, 2048 }, { 6, 569, 2048 }, { 6, 570, 2048 }, { 7, 571, 2048 }, { 6, 572, 2048 }, { 7, 573, 2048 }, { 7, 574, 2048 }, { 8, 575, 2048 }, - { 3, 576, 2048 }, { 4, 577, 2048 }, { 4, 578, 2048 }, { 5, 579, 2048 }, { 4, 580, 2048 }, { 5, 581, 2048 }, { 5, 582, 2048 }, { 6, 583, 2048 }, - { 4, 584, 2048 }, { 5, 585, 2048 }, { 5, 586, 2048 }, { 6, 587, 2048 }, { 5, 588, 2048 }, { 6, 589, 2048 }, { 6, 590, 2048 }, { 7, 591, 2048 }, - { 4, 592, 2048 }, { 5, 593, 2048 }, { 5, 594, 2048 }, { 6, 595, 2048 }, { 5, 596, 2048 }, { 6, 597, 2048 }, { 6, 598, 2048 }, { 7, 599, 2048 }, - { 5, 600, 2048 }, { 6, 601, 2048 }, { 6, 602, 2048 }, { 7, 603, 2048 }, { 6, 604, 2048 }, { 7, 605, 2048 }, { 7, 606, 2048 }, { 8, 607, 2048 }, - { 4, 608, 2048 }, { 5, 609, 2048 }, { 5, 610, 2048 }, { 6, 611, 2048 }, { 5, 612, 2048 }, { 6, 613, 2048 }, { 6, 614, 2048 }, { 7, 615, 2048 }, - { 5, 616, 2048 }, { 6, 617, 2048 }, { 6, 618, 2048 }, { 7, 619, 2048 }, { 6, 620, 2048 }, { 7, 621, 2048 }, { 7, 622, 2048 }, { 8, 623, 2048 }, - { 5, 624, 2048 }, { 6, 625, 2048 }, { 6, 626, 2048 }, { 7, 627, 2048 }, { 6, 628, 2048 }, { 7, 629, 2048 }, { 7, 630, 2048 }, { 8, 631, 2048 }, - { 6, 632, 2048 }, { 7, 633, 2048 }, { 7, 634, 2048 }, { 8, 635, 2048 }, { 7, 636, 2048 }, { 8, 637, 2048 }, { 8, 638, 2048 }, { 9, 639, 2048 }, - { 3, 640, 2048 }, { 4, 641, 2048 }, { 4, 642, 2048 }, { 5, 643, 2048 }, { 4, 644, 2048 }, { 5, 645, 2048 }, { 5, 646, 2048 }, { 6, 647, 2048 }, - { 4, 648, 2048 }, { 5, 649, 2048 }, { 5, 650, 2048 }, { 6, 651, 2048 }, { 5, 652, 2048 }, { 6, 653, 2048 }, { 6, 654, 2048 }, { 7, 655, 2048 }, - { 4, 656, 2048 }, { 5, 657, 2048 }, { 5, 658, 2048 }, { 6, 659, 2048 }, { 5, 660, 2048 }, { 6, 661, 2048 }, { 6, 662, 2048 }, { 7, 663, 2048 }, - { 5, 664, 2048 }, { 6, 665, 2048 }, { 6, 666, 2048 }, { 7, 667, 2048 }, { 6, 668, 2048 }, { 7, 669, 2048 }, { 7, 670, 2048 }, { 8, 671, 2048 }, - { 4, 672, 2048 }, { 5, 673, 2048 }, { 5, 674, 2048 }, { 6, 675, 2048 }, { 5, 676, 2048 }, { 6, 677, 2048 }, { 6, 678, 2048 }, { 7, 679, 2048 }, - { 5, 680, 2048 }, { 6, 681, 2048 }, { 6, 682, 2048 }, { 7, 683, 2048 }, { 6, 684, 2048 }, { 7, 685, 2048 }, { 7, 686, 2048 }, { 8, 687, 2048 }, - { 5, 688, 2048 }, { 6, 689, 2048 }, { 6, 690, 2048 }, { 7, 691, 2048 }, { 6, 692, 2048 }, { 7, 693, 2048 }, { 7, 694, 2048 }, { 8, 695, 2048 }, - { 6, 696, 2048 }, { 7, 697, 2048 }, { 7, 698, 2048 }, { 8, 699, 2048 }, { 7, 700, 2048 }, { 8, 701, 2048 }, { 8, 702, 2048 }, { 9, 703, 2048 }, - { 4, 704, 2048 }, { 5, 705, 2048 }, { 5, 706, 2048 }, { 6, 707, 2048 }, { 5, 708, 2048 }, { 6, 709, 2048 }, { 6, 710, 2048 }, { 7, 711, 2048 }, - { 5, 712, 2048 }, { 6, 713, 2048 }, { 6, 714, 2048 }, { 7, 715, 2048 }, { 6, 716, 2048 }, { 7, 717, 2048 }, { 7, 718, 2048 }, { 8, 719, 2048 }, - { 5, 720, 2048 }, { 6, 721, 2048 }, { 6, 722, 2048 }, { 7, 723, 2048 }, { 6, 724, 2048 }, { 7, 725, 2048 }, { 7, 726, 2048 }, { 8, 727, 2048 }, - { 6, 728, 2048 }, { 7, 729, 2048 }, { 7, 730, 2048 }, { 8, 731, 2048 }, { 7, 732, 2048 }, { 8, 733, 2048 }, { 8, 734, 2048 }, { 9, 735, 2048 }, - { 5, 736, 2048 }, { 6, 737, 2048 }, { 6, 738, 2048 }, { 7, 739, 2048 }, { 6, 740, 2048 }, { 7, 741, 2048 }, { 7, 742, 2048 }, { 8, 743, 2048 }, - { 6, 744, 2048 }, { 7, 745, 2048 }, { 7, 746, 2048 }, { 8, 747, 2048 }, { 7, 748, 2048 }, { 8, 749, 2048 }, { 8, 750, 2048 }, { 9, 751, 2048 }, - { 6, 752, 2048 }, { 7, 753, 2048 }, { 7, 754, 2048 }, { 8, 755, 2048 }, { 7, 756, 2048 }, { 8, 757, 2048 }, { 8, 758, 2048 }, { 9, 759, 2048 }, - { 7, 760, 2048 }, { 8, 761, 2048 }, { 8, 762, 2048 }, { 9, 763, 2048 }, { 8, 764, 2048 }, { 9, 765, 2048 }, { 9, 766, 2048 }, { 10, 767, 2048 }, - { 3, 768, 2048 }, { 4, 769, 2048 }, { 4, 770, 2048 }, { 5, 771, 2048 }, { 4, 772, 2048 }, { 5, 773, 2048 }, { 5, 774, 2048 }, { 6, 775, 2048 }, - { 4, 776, 2048 }, { 5, 777, 2048 }, { 5, 778, 2048 }, { 6, 779, 2048 }, { 5, 780, 2048 }, { 6, 781, 2048 }, { 6, 782, 2048 }, { 7, 783, 2048 }, - { 4, 784, 2048 }, { 5, 785, 2048 }, { 5, 786, 2048 }, { 6, 787, 2048 }, { 5, 788, 2048 }, { 6, 789, 2048 }, { 6, 790, 2048 }, { 7, 791, 2048 }, - { 5, 792, 2048 }, { 6, 793, 2048 }, { 6, 794, 2048 }, { 7, 795, 2048 }, { 6, 796, 2048 }, { 7, 797, 2048 }, { 7, 798, 2048 }, { 8, 799, 2048 }, - { 4, 800, 2048 }, { 5, 801, 2048 }, { 5, 802, 2048 }, { 6, 803, 2048 }, { 5, 804, 2048 }, { 6, 805, 2048 }, { 6, 806, 2048 }, { 7, 807, 2048 }, - { 5, 808, 2048 }, { 6, 809, 2048 }, { 6, 810, 2048 }, { 7, 811, 2048 }, { 6, 812, 2048 }, { 7, 813, 2048 }, { 7, 814, 2048 }, { 8, 815, 2048 }, - { 5, 816, 2048 }, { 6, 817, 2048 }, { 6, 818, 2048 }, { 7, 819, 2048 }, { 6, 820, 2048 }, { 7, 821, 2048 }, { 7, 822, 2048 }, { 8, 823, 2048 }, - { 6, 824, 2048 }, { 7, 825, 2048 }, { 7, 826, 2048 }, { 8, 827, 2048 }, { 7, 828, 2048 }, { 8, 829, 2048 }, { 8, 830, 2048 }, { 9, 831, 2048 }, - { 4, 832, 2048 }, { 5, 833, 2048 }, { 5, 834, 2048 }, { 6, 835, 2048 }, { 5, 836, 2048 }, { 6, 837, 2048 }, { 6, 838, 2048 }, { 7, 839, 2048 }, - { 5, 840, 2048 }, { 6, 841, 2048 }, { 6, 842, 2048 }, { 7, 843, 2048 }, { 6, 844, 2048 }, { 7, 845, 2048 }, { 7, 846, 2048 }, { 8, 847, 2048 }, - { 5, 848, 2048 }, { 6, 849, 2048 }, { 6, 850, 2048 }, { 7, 851, 2048 }, { 6, 852, 2048 }, { 7, 853, 2048 }, { 7, 854, 2048 }, { 8, 855, 2048 }, - { 6, 856, 2048 }, { 7, 857, 2048 }, { 7, 858, 2048 }, { 8, 859, 2048 }, { 7, 860, 2048 }, { 8, 861, 2048 }, { 8, 862, 2048 }, { 9, 863, 2048 }, - { 5, 864, 2048 }, { 6, 865, 2048 }, { 6, 866, 2048 }, { 7, 867, 2048 }, { 6, 868, 2048 }, { 7, 869, 2048 }, { 7, 870, 2048 }, { 8, 871, 2048 }, - { 6, 872, 2048 }, { 7, 873, 2048 }, { 7, 874, 2048 }, { 8, 875, 2048 }, { 7, 876, 2048 }, { 8, 877, 2048 }, { 8, 878, 2048 }, { 9, 879, 2048 }, - { 6, 880, 2048 }, { 7, 881, 2048 }, { 7, 882, 2048 }, { 8, 883, 2048 }, { 7, 884, 2048 }, { 8, 885, 2048 }, { 8, 886, 2048 }, { 9, 887, 2048 }, - { 7, 888, 2048 }, { 8, 889, 2048 }, { 8, 890, 2048 }, { 9, 891, 2048 }, { 8, 892, 2048 }, { 9, 893, 2048 }, { 9, 894, 2048 }, { 10, 895, 2048 }, - { 4, 896, 2048 }, { 5, 897, 2048 }, { 5, 898, 2048 }, { 6, 899, 2048 }, { 5, 900, 2048 }, { 6, 901, 2048 }, { 6, 902, 2048 }, { 7, 903, 2048 }, - { 5, 904, 2048 }, { 6, 905, 2048 }, { 6, 906, 2048 }, { 7, 907, 2048 }, { 6, 908, 2048 }, { 7, 909, 2048 }, { 7, 910, 2048 }, { 8, 911, 2048 }, - { 5, 912, 2048 }, { 6, 913, 2048 }, { 6, 914, 2048 }, { 7, 915, 2048 }, { 6, 916, 2048 }, { 7, 917, 2048 }, { 7, 918, 2048 }, { 8, 919, 2048 }, - { 6, 920, 2048 }, { 7, 921, 2048 }, { 7, 922, 2048 }, { 8, 923, 2048 }, { 7, 924, 2048 }, { 8, 925, 2048 }, { 8, 926, 2048 }, { 9, 927, 2048 }, - { 5, 928, 2048 }, { 6, 929, 2048 }, { 6, 930, 2048 }, { 7, 931, 2048 }, { 6, 932, 2048 }, { 7, 933, 2048 }, { 7, 934, 2048 }, { 8, 935, 2048 }, - { 6, 936, 2048 }, { 7, 937, 2048 }, { 7, 938, 2048 }, { 8, 939, 2048 }, { 7, 940, 2048 }, { 8, 941, 2048 }, { 8, 942, 2048 }, { 9, 943, 2048 }, - { 6, 944, 2048 }, { 7, 945, 2048 }, { 7, 946, 2048 }, { 8, 947, 2048 }, { 7, 948, 2048 }, { 8, 949, 2048 }, { 8, 950, 2048 }, { 9, 951, 2048 }, - { 7, 952, 2048 }, { 8, 953, 2048 }, { 8, 954, 2048 }, { 9, 955, 2048 }, { 8, 956, 2048 }, { 9, 957, 2048 }, { 9, 958, 2048 }, { 10, 959, 2048 }, - { 5, 960, 2048 }, { 6, 961, 2048 }, { 6, 962, 2048 }, { 7, 963, 2048 }, { 6, 964, 2048 }, { 7, 965, 2048 }, { 7, 966, 2048 }, { 8, 967, 2048 }, - { 6, 968, 2048 }, { 7, 969, 2048 }, { 7, 970, 2048 }, { 8, 971, 2048 }, { 7, 972, 2048 }, { 8, 973, 2048 }, { 8, 974, 2048 }, { 9, 975, 2048 }, - { 6, 976, 2048 }, { 7, 977, 2048 }, { 7, 978, 2048 }, { 8, 979, 2048 }, { 7, 980, 2048 }, { 8, 981, 2048 }, { 8, 982, 2048 }, { 9, 983, 2048 }, - { 7, 984, 2048 }, { 8, 985, 2048 }, { 8, 986, 2048 }, { 9, 987, 2048 }, { 8, 988, 2048 }, { 9, 989, 2048 }, { 9, 990, 2048 }, { 10, 991, 2048 }, - { 6, 992, 2048 }, { 7, 993, 2048 }, { 7, 994, 2048 }, { 8, 995, 2048 }, { 7, 996, 2048 }, { 8, 997, 2048 }, { 8, 998, 2048 }, { 9, 999, 2048 }, - { 7, 1000, 2048 }, { 8, 1001, 2048 }, { 8, 1002, 2048 }, { 9, 1003, 2048 }, { 8, 1004, 2048 }, { 9, 1005, 2048 }, { 9, 1006, 2048 }, { 10, 1007, 2048 }, - { 7, 1008, 2048 }, { 8, 1009, 2048 }, { 8, 1010, 2048 }, { 9, 1011, 2048 }, { 8, 1012, 2048 }, { 9, 1013, 2048 }, { 9, 1014, 2048 }, { 10, 1015, 2048 }, - { 8, 1016, 2048 }, { 9, 1017, 2048 }, { 9, 1018, 2048 }, { 10, 1019, 2048 }, { 9, 1020, 2048 }, { 10, 1021, 2048 }, { 10, 1022, 2048 }, { 11, 1023, 2048 }, - { 2, 1024, 2048 }, { 3, 1025, 2048 }, { 3, 1026, 2048 }, { 4, 1027, 2048 }, { 3, 1028, 2048 }, { 4, 1029, 2048 }, { 4, 1030, 2048 }, { 5, 1031, 2048 }, - { 3, 1032, 2048 }, { 4, 1033, 2048 }, { 4, 1034, 2048 }, { 5, 1035, 2048 }, { 4, 1036, 2048 }, { 5, 1037, 2048 }, { 5, 1038, 2048 }, { 6, 1039, 2048 }, - { 3, 1040, 2048 }, { 4, 1041, 2048 }, { 4, 1042, 2048 }, { 5, 1043, 2048 }, { 4, 1044, 2048 }, { 5, 1045, 2048 }, { 5, 1046, 2048 }, { 6, 1047, 2048 }, - { 4, 1048, 2048 }, { 5, 1049, 2048 }, { 5, 1050, 2048 }, { 6, 1051, 2048 }, { 5, 1052, 2048 }, { 6, 1053, 2048 }, { 6, 1054, 2048 }, { 7, 1055, 2048 }, - { 3, 1056, 2048 }, { 4, 1057, 2048 }, { 4, 1058, 2048 }, { 5, 1059, 2048 }, { 4, 1060, 2048 }, { 5, 1061, 2048 }, { 5, 1062, 2048 }, { 6, 1063, 2048 }, - { 4, 1064, 2048 }, { 5, 1065, 2048 }, { 5, 1066, 2048 }, { 6, 1067, 2048 }, { 5, 1068, 2048 }, { 6, 1069, 2048 }, { 6, 1070, 2048 }, { 7, 1071, 2048 }, - { 4, 1072, 2048 }, { 5, 1073, 2048 }, { 5, 1074, 2048 }, { 6, 1075, 2048 }, { 5, 1076, 2048 }, { 6, 1077, 2048 }, { 6, 1078, 2048 }, { 7, 1079, 2048 }, - { 5, 1080, 2048 }, { 6, 1081, 2048 }, { 6, 1082, 2048 }, { 7, 1083, 2048 }, { 6, 1084, 2048 }, { 7, 1085, 2048 }, { 7, 1086, 2048 }, { 8, 1087, 2048 }, - { 3, 1088, 2048 }, { 4, 1089, 2048 }, { 4, 1090, 2048 }, { 5, 1091, 2048 }, { 4, 1092, 2048 }, { 5, 1093, 2048 }, { 5, 1094, 2048 }, { 6, 1095, 2048 }, - { 4, 1096, 2048 }, { 5, 1097, 2048 }, { 5, 1098, 2048 }, { 6, 1099, 2048 }, { 5, 1100, 2048 }, { 6, 1101, 2048 }, { 6, 1102, 2048 }, { 7, 1103, 2048 }, - { 4, 1104, 2048 }, { 5, 1105, 2048 }, { 5, 1106, 2048 }, { 6, 1107, 2048 }, { 5, 1108, 2048 }, { 6, 1109, 2048 }, { 6, 1110, 2048 }, { 7, 1111, 2048 }, - { 5, 1112, 2048 }, { 6, 1113, 2048 }, { 6, 1114, 2048 }, { 7, 1115, 2048 }, { 6, 1116, 2048 }, { 7, 1117, 2048 }, { 7, 1118, 2048 }, { 8, 1119, 2048 }, - { 4, 1120, 2048 }, { 5, 1121, 2048 }, { 5, 1122, 2048 }, { 6, 1123, 2048 }, { 5, 1124, 2048 }, { 6, 1125, 2048 }, { 6, 1126, 2048 }, { 7, 1127, 2048 }, - { 5, 1128, 2048 }, { 6, 1129, 2048 }, { 6, 1130, 2048 }, { 7, 1131, 2048 }, { 6, 1132, 2048 }, { 7, 1133, 2048 }, { 7, 1134, 2048 }, { 8, 1135, 2048 }, - { 5, 1136, 2048 }, { 6, 1137, 2048 }, { 6, 1138, 2048 }, { 7, 1139, 2048 }, { 6, 1140, 2048 }, { 7, 1141, 2048 }, { 7, 1142, 2048 }, { 8, 1143, 2048 }, - { 6, 1144, 2048 }, { 7, 1145, 2048 }, { 7, 1146, 2048 }, { 8, 1147, 2048 }, { 7, 1148, 2048 }, { 8, 1149, 2048 }, { 8, 1150, 2048 }, { 9, 1151, 2048 }, - { 3, 1152, 2048 }, { 4, 1153, 2048 }, { 4, 1154, 2048 }, { 5, 1155, 2048 }, { 4, 1156, 2048 }, { 5, 1157, 2048 }, { 5, 1158, 2048 }, { 6, 1159, 2048 }, - { 4, 1160, 2048 }, { 5, 1161, 2048 }, { 5, 1162, 2048 }, { 6, 1163, 2048 }, { 5, 1164, 2048 }, { 6, 1165, 2048 }, { 6, 1166, 2048 }, { 7, 1167, 2048 }, - { 4, 1168, 2048 }, { 5, 1169, 2048 }, { 5, 1170, 2048 }, { 6, 1171, 2048 }, { 5, 1172, 2048 }, { 6, 1173, 2048 }, { 6, 1174, 2048 }, { 7, 1175, 2048 }, - { 5, 1176, 2048 }, { 6, 1177, 2048 }, { 6, 1178, 2048 }, { 7, 1179, 2048 }, { 6, 1180, 2048 }, { 7, 1181, 2048 }, { 7, 1182, 2048 }, { 8, 1183, 2048 }, - { 4, 1184, 2048 }, { 5, 1185, 2048 }, { 5, 1186, 2048 }, { 6, 1187, 2048 }, { 5, 1188, 2048 }, { 6, 1189, 2048 }, { 6, 1190, 2048 }, { 7, 1191, 2048 }, - { 5, 1192, 2048 }, { 6, 1193, 2048 }, { 6, 1194, 2048 }, { 7, 1195, 2048 }, { 6, 1196, 2048 }, { 7, 1197, 2048 }, { 7, 1198, 2048 }, { 8, 1199, 2048 }, - { 5, 1200, 2048 }, { 6, 1201, 2048 }, { 6, 1202, 2048 }, { 7, 1203, 2048 }, { 6, 1204, 2048 }, { 7, 1205, 2048 }, { 7, 1206, 2048 }, { 8, 1207, 2048 }, - { 6, 1208, 2048 }, { 7, 1209, 2048 }, { 7, 1210, 2048 }, { 8, 1211, 2048 }, { 7, 1212, 2048 }, { 8, 1213, 2048 }, { 8, 1214, 2048 }, { 9, 1215, 2048 }, - { 4, 1216, 2048 }, { 5, 1217, 2048 }, { 5, 1218, 2048 }, { 6, 1219, 2048 }, { 5, 1220, 2048 }, { 6, 1221, 2048 }, { 6, 1222, 2048 }, { 7, 1223, 2048 }, - { 5, 1224, 2048 }, { 6, 1225, 2048 }, { 6, 1226, 2048 }, { 7, 1227, 2048 }, { 6, 1228, 2048 }, { 7, 1229, 2048 }, { 7, 1230, 2048 }, { 8, 1231, 2048 }, - { 5, 1232, 2048 }, { 6, 1233, 2048 }, { 6, 1234, 2048 }, { 7, 1235, 2048 }, { 6, 1236, 2048 }, { 7, 1237, 2048 }, { 7, 1238, 2048 }, { 8, 1239, 2048 }, - { 6, 1240, 2048 }, { 7, 1241, 2048 }, { 7, 1242, 2048 }, { 8, 1243, 2048 }, { 7, 1244, 2048 }, { 8, 1245, 2048 }, { 8, 1246, 2048 }, { 9, 1247, 2048 }, - { 5, 1248, 2048 }, { 6, 1249, 2048 }, { 6, 1250, 2048 }, { 7, 1251, 2048 }, { 6, 1252, 2048 }, { 7, 1253, 2048 }, { 7, 1254, 2048 }, { 8, 1255, 2048 }, - { 6, 1256, 2048 }, { 7, 1257, 2048 }, { 7, 1258, 2048 }, { 8, 1259, 2048 }, { 7, 1260, 2048 }, { 8, 1261, 2048 }, { 8, 1262, 2048 }, { 9, 1263, 2048 }, - { 6, 1264, 2048 }, { 7, 1265, 2048 }, { 7, 1266, 2048 }, { 8, 1267, 2048 }, { 7, 1268, 2048 }, { 8, 1269, 2048 }, { 8, 1270, 2048 }, { 9, 1271, 2048 }, - { 7, 1272, 2048 }, { 8, 1273, 2048 }, { 8, 1274, 2048 }, { 9, 1275, 2048 }, { 8, 1276, 2048 }, { 9, 1277, 2048 }, { 9, 1278, 2048 }, { 10, 1279, 2048 }, - { 3, 1280, 2048 }, { 4, 1281, 2048 }, { 4, 1282, 2048 }, { 5, 1283, 2048 }, { 4, 1284, 2048 }, { 5, 1285, 2048 }, { 5, 1286, 2048 }, { 6, 1287, 2048 }, - { 4, 1288, 2048 }, { 5, 1289, 2048 }, { 5, 1290, 2048 }, { 6, 1291, 2048 }, { 5, 1292, 2048 }, { 6, 1293, 2048 }, { 6, 1294, 2048 }, { 7, 1295, 2048 }, - { 4, 1296, 2048 }, { 5, 1297, 2048 }, { 5, 1298, 2048 }, { 6, 1299, 2048 }, { 5, 1300, 2048 }, { 6, 1301, 2048 }, { 6, 1302, 2048 }, { 7, 1303, 2048 }, - { 5, 1304, 2048 }, { 6, 1305, 2048 }, { 6, 1306, 2048 }, { 7, 1307, 2048 }, { 6, 1308, 2048 }, { 7, 1309, 2048 }, { 7, 1310, 2048 }, { 8, 1311, 2048 }, - { 4, 1312, 2048 }, { 5, 1313, 2048 }, { 5, 1314, 2048 }, { 6, 1315, 2048 }, { 5, 1316, 2048 }, { 6, 1317, 2048 }, { 6, 1318, 2048 }, { 7, 1319, 2048 }, - { 5, 1320, 2048 }, { 6, 1321, 2048 }, { 6, 1322, 2048 }, { 7, 1323, 2048 }, { 6, 1324, 2048 }, { 7, 1325, 2048 }, { 7, 1326, 2048 }, { 8, 1327, 2048 }, - { 5, 1328, 2048 }, { 6, 1329, 2048 }, { 6, 1330, 2048 }, { 7, 1331, 2048 }, { 6, 1332, 2048 }, { 7, 1333, 2048 }, { 7, 1334, 2048 }, { 8, 1335, 2048 }, - { 6, 1336, 2048 }, { 7, 1337, 2048 }, { 7, 1338, 2048 }, { 8, 1339, 2048 }, { 7, 1340, 2048 }, { 8, 1341, 2048 }, { 8, 1342, 2048 }, { 9, 1343, 2048 }, - { 4, 1344, 2048 }, { 5, 1345, 2048 }, { 5, 1346, 2048 }, { 6, 1347, 2048 }, { 5, 1348, 2048 }, { 6, 1349, 2048 }, { 6, 1350, 2048 }, { 7, 1351, 2048 }, - { 5, 1352, 2048 }, { 6, 1353, 2048 }, { 6, 1354, 2048 }, { 7, 1355, 2048 }, { 6, 1356, 2048 }, { 7, 1357, 2048 }, { 7, 1358, 2048 }, { 8, 1359, 2048 }, - { 5, 1360, 2048 }, { 6, 1361, 2048 }, { 6, 1362, 2048 }, { 7, 1363, 2048 }, { 6, 1364, 2048 }, { 7, 1365, 2048 }, { 7, 1366, 2048 }, { 8, 1367, 2048 }, - { 6, 1368, 2048 }, { 7, 1369, 2048 }, { 7, 1370, 2048 }, { 8, 1371, 2048 }, { 7, 1372, 2048 }, { 8, 1373, 2048 }, { 8, 1374, 2048 }, { 9, 1375, 2048 }, - { 5, 1376, 2048 }, { 6, 1377, 2048 }, { 6, 1378, 2048 }, { 7, 1379, 2048 }, { 6, 1380, 2048 }, { 7, 1381, 2048 }, { 7, 1382, 2048 }, { 8, 1383, 2048 }, - { 6, 1384, 2048 }, { 7, 1385, 2048 }, { 7, 1386, 2048 }, { 8, 1387, 2048 }, { 7, 1388, 2048 }, { 8, 1389, 2048 }, { 8, 1390, 2048 }, { 9, 1391, 2048 }, - { 6, 1392, 2048 }, { 7, 1393, 2048 }, { 7, 1394, 2048 }, { 8, 1395, 2048 }, { 7, 1396, 2048 }, { 8, 1397, 2048 }, { 8, 1398, 2048 }, { 9, 1399, 2048 }, - { 7, 1400, 2048 }, { 8, 1401, 2048 }, { 8, 1402, 2048 }, { 9, 1403, 2048 }, { 8, 1404, 2048 }, { 9, 1405, 2048 }, { 9, 1406, 2048 }, { 10, 1407, 2048 }, - { 4, 1408, 2048 }, { 5, 1409, 2048 }, { 5, 1410, 2048 }, { 6, 1411, 2048 }, { 5, 1412, 2048 }, { 6, 1413, 2048 }, { 6, 1414, 2048 }, { 7, 1415, 2048 }, - { 5, 1416, 2048 }, { 6, 1417, 2048 }, { 6, 1418, 2048 }, { 7, 1419, 2048 }, { 6, 1420, 2048 }, { 7, 1421, 2048 }, { 7, 1422, 2048 }, { 8, 1423, 2048 }, - { 5, 1424, 2048 }, { 6, 1425, 2048 }, { 6, 1426, 2048 }, { 7, 1427, 2048 }, { 6, 1428, 2048 }, { 7, 1429, 2048 }, { 7, 1430, 2048 }, { 8, 1431, 2048 }, - { 6, 1432, 2048 }, { 7, 1433, 2048 }, { 7, 1434, 2048 }, { 8, 1435, 2048 }, { 7, 1436, 2048 }, { 8, 1437, 2048 }, { 8, 1438, 2048 }, { 9, 1439, 2048 }, - { 5, 1440, 2048 }, { 6, 1441, 2048 }, { 6, 1442, 2048 }, { 7, 1443, 2048 }, { 6, 1444, 2048 }, { 7, 1445, 2048 }, { 7, 1446, 2048 }, { 8, 1447, 2048 }, - { 6, 1448, 2048 }, { 7, 1449, 2048 }, { 7, 1450, 2048 }, { 8, 1451, 2048 }, { 7, 1452, 2048 }, { 8, 1453, 2048 }, { 8, 1454, 2048 }, { 9, 1455, 2048 }, - { 6, 1456, 2048 }, { 7, 1457, 2048 }, { 7, 1458, 2048 }, { 8, 1459, 2048 }, { 7, 1460, 2048 }, { 8, 1461, 2048 }, { 8, 1462, 2048 }, { 9, 1463, 2048 }, - { 7, 1464, 2048 }, { 8, 1465, 2048 }, { 8, 1466, 2048 }, { 9, 1467, 2048 }, { 8, 1468, 2048 }, { 9, 1469, 2048 }, { 9, 1470, 2048 }, { 10, 1471, 2048 }, - { 5, 1472, 2048 }, { 6, 1473, 2048 }, { 6, 1474, 2048 }, { 7, 1475, 2048 }, { 6, 1476, 2048 }, { 7, 1477, 2048 }, { 7, 1478, 2048 }, { 8, 1479, 2048 }, - { 6, 1480, 2048 }, { 7, 1481, 2048 }, { 7, 1482, 2048 }, { 8, 1483, 2048 }, { 7, 1484, 2048 }, { 8, 1485, 2048 }, { 8, 1486, 2048 }, { 9, 1487, 2048 }, - { 6, 1488, 2048 }, { 7, 1489, 2048 }, { 7, 1490, 2048 }, { 8, 1491, 2048 }, { 7, 1492, 2048 }, { 8, 1493, 2048 }, { 8, 1494, 2048 }, { 9, 1495, 2048 }, - { 7, 1496, 2048 }, { 8, 1497, 2048 }, { 8, 1498, 2048 }, { 9, 1499, 2048 }, { 8, 1500, 2048 }, { 9, 1501, 2048 }, { 9, 1502, 2048 }, { 10, 1503, 2048 }, - { 6, 1504, 2048 }, { 7, 1505, 2048 }, { 7, 1506, 2048 }, { 8, 1507, 2048 }, { 7, 1508, 2048 }, { 8, 1509, 2048 }, { 8, 1510, 2048 }, { 9, 1511, 2048 }, - { 7, 1512, 2048 }, { 8, 1513, 2048 }, { 8, 1514, 2048 }, { 9, 1515, 2048 }, { 8, 1516, 2048 }, { 9, 1517, 2048 }, { 9, 1518, 2048 }, { 10, 1519, 2048 }, - { 7, 1520, 2048 }, { 8, 1521, 2048 }, { 8, 1522, 2048 }, { 9, 1523, 2048 }, { 8, 1524, 2048 }, { 9, 1525, 2048 }, { 9, 1526, 2048 }, { 10, 1527, 2048 }, - { 8, 1528, 2048 }, { 9, 1529, 2048 }, { 9, 1530, 2048 }, { 10, 1531, 2048 }, { 9, 1532, 2048 }, { 10, 1533, 2048 }, { 10, 1534, 2048 }, { 11, 1535, 2048 }, - { 3, 1536, 2048 }, { 4, 1537, 2048 }, { 4, 1538, 2048 }, { 5, 1539, 2048 }, { 4, 1540, 2048 }, { 5, 1541, 2048 }, { 5, 1542, 2048 }, { 6, 1543, 2048 }, - { 4, 1544, 2048 }, { 5, 1545, 2048 }, { 5, 1546, 2048 }, { 6, 1547, 2048 }, { 5, 1548, 2048 }, { 6, 1549, 2048 }, { 6, 1550, 2048 }, { 7, 1551, 2048 }, - { 4, 1552, 2048 }, { 5, 1553, 2048 }, { 5, 1554, 2048 }, { 6, 1555, 2048 }, { 5, 1556, 2048 }, { 6, 1557, 2048 }, { 6, 1558, 2048 }, { 7, 1559, 2048 }, - { 5, 1560, 2048 }, { 6, 1561, 2048 }, { 6, 1562, 2048 }, { 7, 1563, 2048 }, { 6, 1564, 2048 }, { 7, 1565, 2048 }, { 7, 1566, 2048 }, { 8, 1567, 2048 }, - { 4, 1568, 2048 }, { 5, 1569, 2048 }, { 5, 1570, 2048 }, { 6, 1571, 2048 }, { 5, 1572, 2048 }, { 6, 1573, 2048 }, { 6, 1574, 2048 }, { 7, 1575, 2048 }, - { 5, 1576, 2048 }, { 6, 1577, 2048 }, { 6, 1578, 2048 }, { 7, 1579, 2048 }, { 6, 1580, 2048 }, { 7, 1581, 2048 }, { 7, 1582, 2048 }, { 8, 1583, 2048 }, - { 5, 1584, 2048 }, { 6, 1585, 2048 }, { 6, 1586, 2048 }, { 7, 1587, 2048 }, { 6, 1588, 2048 }, { 7, 1589, 2048 }, { 7, 1590, 2048 }, { 8, 1591, 2048 }, - { 6, 1592, 2048 }, { 7, 1593, 2048 }, { 7, 1594, 2048 }, { 8, 1595, 2048 }, { 7, 1596, 2048 }, { 8, 1597, 2048 }, { 8, 1598, 2048 }, { 9, 1599, 2048 }, - { 4, 1600, 2048 }, { 5, 1601, 2048 }, { 5, 1602, 2048 }, { 6, 1603, 2048 }, { 5, 1604, 2048 }, { 6, 1605, 2048 }, { 6, 1606, 2048 }, { 7, 1607, 2048 }, - { 5, 1608, 2048 }, { 6, 1609, 2048 }, { 6, 1610, 2048 }, { 7, 1611, 2048 }, { 6, 1612, 2048 }, { 7, 1613, 2048 }, { 7, 1614, 2048 }, { 8, 1615, 2048 }, - { 5, 1616, 2048 }, { 6, 1617, 2048 }, { 6, 1618, 2048 }, { 7, 1619, 2048 }, { 6, 1620, 2048 }, { 7, 1621, 2048 }, { 7, 1622, 2048 }, { 8, 1623, 2048 }, - { 6, 1624, 2048 }, { 7, 1625, 2048 }, { 7, 1626, 2048 }, { 8, 1627, 2048 }, { 7, 1628, 2048 }, { 8, 1629, 2048 }, { 8, 1630, 2048 }, { 9, 1631, 2048 }, - { 5, 1632, 2048 }, { 6, 1633, 2048 }, { 6, 1634, 2048 }, { 7, 1635, 2048 }, { 6, 1636, 2048 }, { 7, 1637, 2048 }, { 7, 1638, 2048 }, { 8, 1639, 2048 }, - { 6, 1640, 2048 }, { 7, 1641, 2048 }, { 7, 1642, 2048 }, { 8, 1643, 2048 }, { 7, 1644, 2048 }, { 8, 1645, 2048 }, { 8, 1646, 2048 }, { 9, 1647, 2048 }, - { 6, 1648, 2048 }, { 7, 1649, 2048 }, { 7, 1650, 2048 }, { 8, 1651, 2048 }, { 7, 1652, 2048 }, { 8, 1653, 2048 }, { 8, 1654, 2048 }, { 9, 1655, 2048 }, - { 7, 1656, 2048 }, { 8, 1657, 2048 }, { 8, 1658, 2048 }, { 9, 1659, 2048 }, { 8, 1660, 2048 }, { 9, 1661, 2048 }, { 9, 1662, 2048 }, { 10, 1663, 2048 }, - { 4, 1664, 2048 }, { 5, 1665, 2048 }, { 5, 1666, 2048 }, { 6, 1667, 2048 }, { 5, 1668, 2048 }, { 6, 1669, 2048 }, { 6, 1670, 2048 }, { 7, 1671, 2048 }, - { 5, 1672, 2048 }, { 6, 1673, 2048 }, { 6, 1674, 2048 }, { 7, 1675, 2048 }, { 6, 1676, 2048 }, { 7, 1677, 2048 }, { 7, 1678, 2048 }, { 8, 1679, 2048 }, - { 5, 1680, 2048 }, { 6, 1681, 2048 }, { 6, 1682, 2048 }, { 7, 1683, 2048 }, { 6, 1684, 2048 }, { 7, 1685, 2048 }, { 7, 1686, 2048 }, { 8, 1687, 2048 }, - { 6, 1688, 2048 }, { 7, 1689, 2048 }, { 7, 1690, 2048 }, { 8, 1691, 2048 }, { 7, 1692, 2048 }, { 8, 1693, 2048 }, { 8, 1694, 2048 }, { 9, 1695, 2048 }, - { 5, 1696, 2048 }, { 6, 1697, 2048 }, { 6, 1698, 2048 }, { 7, 1699, 2048 }, { 6, 1700, 2048 }, { 7, 1701, 2048 }, { 7, 1702, 2048 }, { 8, 1703, 2048 }, - { 6, 1704, 2048 }, { 7, 1705, 2048 }, { 7, 1706, 2048 }, { 8, 1707, 2048 }, { 7, 1708, 2048 }, { 8, 1709, 2048 }, { 8, 1710, 2048 }, { 9, 1711, 2048 }, - { 6, 1712, 2048 }, { 7, 1713, 2048 }, { 7, 1714, 2048 }, { 8, 1715, 2048 }, { 7, 1716, 2048 }, { 8, 1717, 2048 }, { 8, 1718, 2048 }, { 9, 1719, 2048 }, - { 7, 1720, 2048 }, { 8, 1721, 2048 }, { 8, 1722, 2048 }, { 9, 1723, 2048 }, { 8, 1724, 2048 }, { 9, 1725, 2048 }, { 9, 1726, 2048 }, { 10, 1727, 2048 }, - { 5, 1728, 2048 }, { 6, 1729, 2048 }, { 6, 1730, 2048 }, { 7, 1731, 2048 }, { 6, 1732, 2048 }, { 7, 1733, 2048 }, { 7, 1734, 2048 }, { 8, 1735, 2048 }, - { 6, 1736, 2048 }, { 7, 1737, 2048 }, { 7, 1738, 2048 }, { 8, 1739, 2048 }, { 7, 1740, 2048 }, { 8, 1741, 2048 }, { 8, 1742, 2048 }, { 9, 1743, 2048 }, - { 6, 1744, 2048 }, { 7, 1745, 2048 }, { 7, 1746, 2048 }, { 8, 1747, 2048 }, { 7, 1748, 2048 }, { 8, 1749, 2048 }, { 8, 1750, 2048 }, { 9, 1751, 2048 }, - { 7, 1752, 2048 }, { 8, 1753, 2048 }, { 8, 1754, 2048 }, { 9, 1755, 2048 }, { 8, 1756, 2048 }, { 9, 1757, 2048 }, { 9, 1758, 2048 }, { 10, 1759, 2048 }, - { 6, 1760, 2048 }, { 7, 1761, 2048 }, { 7, 1762, 2048 }, { 8, 1763, 2048 }, { 7, 1764, 2048 }, { 8, 1765, 2048 }, { 8, 1766, 2048 }, { 9, 1767, 2048 }, - { 7, 1768, 2048 }, { 8, 1769, 2048 }, { 8, 1770, 2048 }, { 9, 1771, 2048 }, { 8, 1772, 2048 }, { 9, 1773, 2048 }, { 9, 1774, 2048 }, { 10, 1775, 2048 }, - { 7, 1776, 2048 }, { 8, 1777, 2048 }, { 8, 1778, 2048 }, { 9, 1779, 2048 }, { 8, 1780, 2048 }, { 9, 1781, 2048 }, { 9, 1782, 2048 }, { 10, 1783, 2048 }, - { 8, 1784, 2048 }, { 9, 1785, 2048 }, { 9, 1786, 2048 }, { 10, 1787, 2048 }, { 9, 1788, 2048 }, { 10, 1789, 2048 }, { 10, 1790, 2048 }, { 11, 1791, 2048 }, - { 4, 1792, 2048 }, { 5, 1793, 2048 }, { 5, 1794, 2048 }, { 6, 1795, 2048 }, { 5, 1796, 2048 }, { 6, 1797, 2048 }, { 6, 1798, 2048 }, { 7, 1799, 2048 }, - { 5, 1800, 2048 }, { 6, 1801, 2048 }, { 6, 1802, 2048 }, { 7, 1803, 2048 }, { 6, 1804, 2048 }, { 7, 1805, 2048 }, { 7, 1806, 2048 }, { 8, 1807, 2048 }, - { 5, 1808, 2048 }, { 6, 1809, 2048 }, { 6, 1810, 2048 }, { 7, 1811, 2048 }, { 6, 1812, 2048 }, { 7, 1813, 2048 }, { 7, 1814, 2048 }, { 8, 1815, 2048 }, - { 6, 1816, 2048 }, { 7, 1817, 2048 }, { 7, 1818, 2048 }, { 8, 1819, 2048 }, { 7, 1820, 2048 }, { 8, 1821, 2048 }, { 8, 1822, 2048 }, { 9, 1823, 2048 }, - { 5, 1824, 2048 }, { 6, 1825, 2048 }, { 6, 1826, 2048 }, { 7, 1827, 2048 }, { 6, 1828, 2048 }, { 7, 1829, 2048 }, { 7, 1830, 2048 }, { 8, 1831, 2048 }, - { 6, 1832, 2048 }, { 7, 1833, 2048 }, { 7, 1834, 2048 }, { 8, 1835, 2048 }, { 7, 1836, 2048 }, { 8, 1837, 2048 }, { 8, 1838, 2048 }, { 9, 1839, 2048 }, - { 6, 1840, 2048 }, { 7, 1841, 2048 }, { 7, 1842, 2048 }, { 8, 1843, 2048 }, { 7, 1844, 2048 }, { 8, 1845, 2048 }, { 8, 1846, 2048 }, { 9, 1847, 2048 }, - { 7, 1848, 2048 }, { 8, 1849, 2048 }, { 8, 1850, 2048 }, { 9, 1851, 2048 }, { 8, 1852, 2048 }, { 9, 1853, 2048 }, { 9, 1854, 2048 }, { 10, 1855, 2048 }, - { 5, 1856, 2048 }, { 6, 1857, 2048 }, { 6, 1858, 2048 }, { 7, 1859, 2048 }, { 6, 1860, 2048 }, { 7, 1861, 2048 }, { 7, 1862, 2048 }, { 8, 1863, 2048 }, - { 6, 1864, 2048 }, { 7, 1865, 2048 }, { 7, 1866, 2048 }, { 8, 1867, 2048 }, { 7, 1868, 2048 }, { 8, 1869, 2048 }, { 8, 1870, 2048 }, { 9, 1871, 2048 }, - { 6, 1872, 2048 }, { 7, 1873, 2048 }, { 7, 1874, 2048 }, { 8, 1875, 2048 }, { 7, 1876, 2048 }, { 8, 1877, 2048 }, { 8, 1878, 2048 }, { 9, 1879, 2048 }, - { 7, 1880, 2048 }, { 8, 1881, 2048 }, { 8, 1882, 2048 }, { 9, 1883, 2048 }, { 8, 1884, 2048 }, { 9, 1885, 2048 }, { 9, 1886, 2048 }, { 10, 1887, 2048 }, - { 6, 1888, 2048 }, { 7, 1889, 2048 }, { 7, 1890, 2048 }, { 8, 1891, 2048 }, { 7, 1892, 2048 }, { 8, 1893, 2048 }, { 8, 1894, 2048 }, { 9, 1895, 2048 }, - { 7, 1896, 2048 }, { 8, 1897, 2048 }, { 8, 1898, 2048 }, { 9, 1899, 2048 }, { 8, 1900, 2048 }, { 9, 1901, 2048 }, { 9, 1902, 2048 }, { 10, 1903, 2048 }, - { 7, 1904, 2048 }, { 8, 1905, 2048 }, { 8, 1906, 2048 }, { 9, 1907, 2048 }, { 8, 1908, 2048 }, { 9, 1909, 2048 }, { 9, 1910, 2048 }, { 10, 1911, 2048 }, - { 8, 1912, 2048 }, { 9, 1913, 2048 }, { 9, 1914, 2048 }, { 10, 1915, 2048 }, { 9, 1916, 2048 }, { 10, 1917, 2048 }, { 10, 1918, 2048 }, { 11, 1919, 2048 }, - { 5, 1920, 2048 }, { 6, 1921, 2048 }, { 6, 1922, 2048 }, { 7, 1923, 2048 }, { 6, 1924, 2048 }, { 7, 1925, 2048 }, { 7, 1926, 2048 }, { 8, 1927, 2048 }, - { 6, 1928, 2048 }, { 7, 1929, 2048 }, { 7, 1930, 2048 }, { 8, 1931, 2048 }, { 7, 1932, 2048 }, { 8, 1933, 2048 }, { 8, 1934, 2048 }, { 9, 1935, 2048 }, - { 6, 1936, 2048 }, { 7, 1937, 2048 }, { 7, 1938, 2048 }, { 8, 1939, 2048 }, { 7, 1940, 2048 }, { 8, 1941, 2048 }, { 8, 1942, 2048 }, { 9, 1943, 2048 }, - { 7, 1944, 2048 }, { 8, 1945, 2048 }, { 8, 1946, 2048 }, { 9, 1947, 2048 }, { 8, 1948, 2048 }, { 9, 1949, 2048 }, { 9, 1950, 2048 }, { 10, 1951, 2048 }, - { 6, 1952, 2048 }, { 7, 1953, 2048 }, { 7, 1954, 2048 }, { 8, 1955, 2048 }, { 7, 1956, 2048 }, { 8, 1957, 2048 }, { 8, 1958, 2048 }, { 9, 1959, 2048 }, - { 7, 1960, 2048 }, { 8, 1961, 2048 }, { 8, 1962, 2048 }, { 9, 1963, 2048 }, { 8, 1964, 2048 }, { 9, 1965, 2048 }, { 9, 1966, 2048 }, { 10, 1967, 2048 }, - { 7, 1968, 2048 }, { 8, 1969, 2048 }, { 8, 1970, 2048 }, { 9, 1971, 2048 }, { 8, 1972, 2048 }, { 9, 1973, 2048 }, { 9, 1974, 2048 }, { 10, 1975, 2048 }, - { 8, 1976, 2048 }, { 9, 1977, 2048 }, { 9, 1978, 2048 }, { 10, 1979, 2048 }, { 9, 1980, 2048 }, { 10, 1981, 2048 }, { 10, 1982, 2048 }, { 11, 1983, 2048 }, - { 6, 1984, 2048 }, { 7, 1985, 2048 }, { 7, 1986, 2048 }, { 8, 1987, 2048 }, { 7, 1988, 2048 }, { 8, 1989, 2048 }, { 8, 1990, 2048 }, { 9, 1991, 2048 }, - { 7, 1992, 2048 }, { 8, 1993, 2048 }, { 8, 1994, 2048 }, { 9, 1995, 2048 }, { 8, 1996, 2048 }, { 9, 1997, 2048 }, { 9, 1998, 2048 }, { 10, 1999, 2048 }, - { 7, 2000, 2048 }, { 8, 2001, 2048 }, { 8, 2002, 2048 }, { 9, 2003, 2048 }, { 8, 2004, 2048 }, { 9, 2005, 2048 }, { 9, 2006, 2048 }, { 10, 2007, 2048 }, - { 8, 2008, 2048 }, { 9, 2009, 2048 }, { 9, 2010, 2048 }, { 10, 2011, 2048 }, { 9, 2012, 2048 }, { 10, 2013, 2048 }, { 10, 2014, 2048 }, { 11, 2015, 2048 }, - { 7, 2016, 2048 }, { 8, 2017, 2048 }, { 8, 2018, 2048 }, { 9, 2019, 2048 }, { 8, 2020, 2048 }, { 9, 2021, 2048 }, { 9, 2022, 2048 }, { 10, 2023, 2048 }, - { 8, 2024, 2048 }, { 9, 2025, 2048 }, { 9, 2026, 2048 }, { 10, 2027, 2048 }, { 9, 2028, 2048 }, { 10, 2029, 2048 }, { 10, 2030, 2048 }, { 11, 2031, 2048 }, - { 8, 2032, 2048 }, { 9, 2033, 2048 }, { 9, 2034, 2048 }, { 10, 2035, 2048 }, { 9, 2036, 2048 }, { 10, 2037, 2048 }, { 10, 2038, 2048 }, { 11, 2039, 2048 }, - { 9, 2040, 2048 }, { 10, 2041, 2048 }, { 10, 2042, 2048 }, { 11, 2043, 2048 }, { 10, 2044, 2048 }, { 11, 2045, 2048 }, { 11, 2046, 2048 }, { 12, 2047, 2048 }, -#endif -#endif -#endif -#endif -#endif -#endif -}; - -static int s_find_order_for_modulus(const void *modulus, void **order) -{ - void *bn; - int err; - const ltc_ecc_curve *curve; - - if ((err = ltc_mp_init(&bn)) != CRYPT_OK) return err; - for (curve = ltc_ecc_curves; curve->prime != NULL; curve++) { - if (ltc_mp_read_radix(bn, curve->prime, 16) != CRYPT_OK) continue; - if (ltc_mp_cmp(bn, modulus) != LTC_MP_EQ) continue; - break; /* found */ - } - ltc_mp_clear(bn); - if (curve->order == NULL) return CRYPT_ERROR; - if ((err = ltc_mp_init(order)) != CRYPT_OK) { - return err; - } - if ((err = ltc_mp_read_radix(*order, curve->order, 16)) != CRYPT_OK) { - ltc_mp_clear(*order); - return err; - } - return CRYPT_OK; -} - -/* find a hole and free as required, return -1 if no hole found */ -static int s_find_hole(void) -{ - unsigned x; - int y, z; - for (z = -1, y = INT_MAX, x = 0; x < FP_ENTRIES; x++) { - if (fp_cache[x].lru_count < y && fp_cache[x].lock == 0) { - z = x; - y = fp_cache[x].lru_count; - } - } - - /* decrease all */ - for (x = 0; x < FP_ENTRIES; x++) { - if (fp_cache[x].lru_count > 3) { - --(fp_cache[x].lru_count); - } - } - - /* free entry z */ - if (z >= 0 && fp_cache[z].g) { - if (fp_cache[z].mu != NULL) { - ltc_mp_clear(fp_cache[z].mu); - fp_cache[z].mu = NULL; - } - ltc_ecc_del_point(fp_cache[z].g); - fp_cache[z].g = NULL; - for (x = 0; x < (1U<x, g->x) == LTC_MP_EQ && - ltc_mp_cmp(fp_cache[x].g->y, g->y) == LTC_MP_EQ && - ltc_mp_cmp(fp_cache[x].g->z, g->z) == LTC_MP_EQ) { - break; - } - } - if (x == FP_ENTRIES) { - x = -1; - } - return x; -} - -/* add a new base to the cache */ -static int s_add_entry(int idx, const ecc_point *g) -{ - unsigned x, y; - - /* allocate base and LUT */ - fp_cache[idx].g = ltc_ecc_new_point(); - if (fp_cache[idx].g == NULL) { - return CRYPT_MEM; - } - - /* copy x and y */ - if ((ltc_mp_copy(g->x, fp_cache[idx].g->x) != CRYPT_OK) || - (ltc_mp_copy(g->y, fp_cache[idx].g->y) != CRYPT_OK) || - (ltc_mp_copy(g->z, fp_cache[idx].g->z) != CRYPT_OK)) { - ltc_ecc_del_point(fp_cache[idx].g); - fp_cache[idx].g = NULL; - return CRYPT_MEM; - } - - for (x = 0; x < (1U<x, mu, modulus, fp_cache[idx].LUT[1]->x) != CRYPT_OK) || - (ltc_mp_mulmod(fp_cache[idx].g->y, mu, modulus, fp_cache[idx].LUT[1]->y) != CRYPT_OK) || - (ltc_mp_mulmod(fp_cache[idx].g->z, mu, modulus, fp_cache[idx].LUT[1]->z) != CRYPT_OK)) { err = CRYPT_ERROR; goto DONE; } - - /* make all single bit entries */ - for (x = 1; x < FP_LUT; x++) { - if ((ltc_mp_copy(fp_cache[idx].LUT[1<<(x-1)]->x, fp_cache[idx].LUT[1<x) != CRYPT_OK) || - (ltc_mp_copy(fp_cache[idx].LUT[1<<(x-1)]->y, fp_cache[idx].LUT[1<y) != CRYPT_OK) || - (ltc_mp_copy(fp_cache[idx].LUT[1<<(x-1)]->z, fp_cache[idx].LUT[1<z) != CRYPT_OK)) { err = CRYPT_MEM; goto DONE; } - - /* now double it bitlen/FP_LUT times */ - for (y = 0; y < lut_gap; y++) { - if ((err = ltc_mp.ecc_ptdbl(fp_cache[idx].LUT[1<z, modulus, mp)) != CRYPT_OK) { goto DONE; } - - /* invert it */ - if ((err = ltc_mp_invmod(fp_cache[idx].LUT[x]->z, modulus, fp_cache[idx].LUT[x]->z)) != CRYPT_OK) { goto DONE; } - - /* now square it */ - if ((err = ltc_mp_sqrmod(fp_cache[idx].LUT[x]->z, modulus, tmp)) != CRYPT_OK) { goto DONE; } - - /* fix x */ - if ((err = ltc_mp_mulmod(fp_cache[idx].LUT[x]->x, tmp, modulus, fp_cache[idx].LUT[x]->x)) != CRYPT_OK) { goto DONE; } - - /* get 1/z^3 */ - if ((err = ltc_mp_mulmod(tmp, fp_cache[idx].LUT[x]->z, modulus, tmp)) != CRYPT_OK) { goto DONE; } - - /* fix y */ - if ((err = ltc_mp_mulmod(fp_cache[idx].LUT[x]->y, tmp, modulus, fp_cache[idx].LUT[x]->y)) != CRYPT_OK) { goto DONE; } - - /* affine LUT points are stored without z so point-add can use the fast affine path */ - ltc_mp_clear(fp_cache[idx].LUT[x]->z); - fp_cache[idx].LUT[x]->z = NULL; - } - ltc_mp_clear(tmp); - - return CRYPT_OK; -DONE: - for (y = 0; y < (1U< ltc_mp_unsigned_bin_size(modulus)) { - /* find order */ - if ((err = s_find_order_for_modulus(modulus, &order)) != CRYPT_OK) { - return err; - } - - /* k must be less than modulus */ - if (ltc_mp_cmp(k, order) != LTC_MP_LT) { - if ((err = ltc_mp_init(&tmpk)) != CRYPT_OK) { - ltc_mp_clear(order); - return err; - } - if ((err = ltc_mp_mod(k, order, tmpk)) != CRYPT_OK) { - ltc_mp_clear(tmpk); - ltc_mp_clear(order); - return err; - } - tk = tmpk; - } else { - tk = k; - } - ltc_mp_clear(order); - } else { - tk = k; - } - - /* get bitlen and round up to next multiple of FP_LUT */ - bitlen = ltc_mp_unsigned_bin_size(modulus) << 3; - x = bitlen % FP_LUT; - if (x) { - bitlen += FP_LUT - x; - } - lut_gap = bitlen / FP_LUT; - - /* get the k value */ - if (ltc_mp_unsigned_bin_size(tk) > (sizeof(kb) - 2)) { - if (tmpk != NULL) { - ltc_mp_clear(tmpk); - } - return CRYPT_BUFFER_OVERFLOW; - } - - /* store k */ - zeromem(kb, sizeof(kb)); - if ((err = ltc_mp_to_unsigned_bin(tk, kb)) != CRYPT_OK) { - if (tmpk != NULL) { - ltc_mp_clear(tmpk); - } - return err; - } - - /* let's reverse kb so it's little endian */ - x = 0; - y = ltc_mp_unsigned_bin_size(tk) - 1; - if (tmpk != NULL) { - ltc_mp_clear(tmpk); - } - while ((unsigned)x < y) { - z = kb[x]; kb[x] = kb[y]; kb[y] = z; - ++x; --y; - } - - /* at this point we can start, yipee */ - first = 1; - for (x = lut_gap-1; x >= 0; x--) { - /* extract FP_LUT bits from kb spread out by lut_gap bits and offset by x bits from the start */ - bitpos = x; - for (y = z = 0; y < FP_LUT; y++) { - z |= ((kb[bitpos>>3] >> (bitpos&7)) & 1) << y; - bitpos += lut_gap; /* it's y*lut_gap + x, but here we can avoid the mult in each loop */ - } - - /* double if not first */ - if (!first) { - if ((err = ltc_mp.ecc_ptdbl(R, R, ma, modulus, mp)) != CRYPT_OK) { - return err; - } - } - - /* add if not first, otherwise copy */ - if (!first && z) { - if ((err = ltc_mp.ecc_ptadd(R, fp_cache[idx].LUT[z], R, ma, modulus, mp)) != CRYPT_OK) { - return err; - } - } else if (z) { - if ((ltc_mp_copy(fp_cache[idx].LUT[z]->x, R->x) != CRYPT_OK) || - (ltc_mp_copy(fp_cache[idx].LUT[z]->y, R->y) != CRYPT_OK) || - (ltc_mp_copy(fp_cache[idx].mu, R->z) != CRYPT_OK)) { return CRYPT_MEM; } - first = 0; - } - } - z = 0; - zeromem(kb, sizeof(kb)); - /* map R back from projective space */ - if (map) { - err = ltc_ecc_map(R, modulus, mp); - } else { - err = CRYPT_OK; - } - return err; -} - -#ifdef LTC_ECC_SHAMIR -/* perform a fixed point ECC mulmod */ -static int ss_accel_fp_mul2add(int idx1, int idx2, - void *kA, void *kB, - ecc_point *R, const void *a, const void *modulus, void *mp) -{ - unsigned char kb[2][128]; - long x, y; - unsigned z, err, bitlen, bitpos, lut_gap, first, zA, zB; - void *tka, *tkb, *order; - - /* if it's smaller than modulus we fine */ - if (ltc_mp_unsigned_bin_size(kA) > ltc_mp_unsigned_bin_size(modulus)) { - /* find order */ - if ((err = s_find_order_for_modulus(modulus, &order)) != CRYPT_OK) { - return err; - } - - /* kA must be less than modulus */ - if (ltc_mp_cmp(kA, order) != LTC_MP_LT) { - if ((err = ltc_mp_init(&tka)) != CRYPT_OK) { - ltc_mp_clear(order); - return err; - } - if ((err = ltc_mp_mod(kA, order, tka)) != CRYPT_OK) { - ltc_mp_clear(tka); - ltc_mp_clear(order); - return err; - } - } else { - tka = kA; - } - ltc_mp_clear(order); - } else { - tka = kA; - } - - /* if it's smaller than modulus we fine */ - if (ltc_mp_unsigned_bin_size(kB) > ltc_mp_unsigned_bin_size(modulus)) { - /* find order */ - if ((err = s_find_order_for_modulus(modulus, &order)) != CRYPT_OK) { - return err; - } - - /* kB must be less than modulus */ - if (ltc_mp_cmp(kB, order) != LTC_MP_LT) { - if ((err = ltc_mp_init(&tkb)) != CRYPT_OK) { - ltc_mp_clear(order); - return err; - } - if ((err = ltc_mp_mod(kB, order, tkb)) != CRYPT_OK) { - ltc_mp_clear(tkb); - ltc_mp_clear(order); - return err; - } - } else { - tkb = kB; - } - ltc_mp_clear(order); - } else { - tkb = kB; - } - - /* get bitlen and round up to next multiple of FP_LUT */ - bitlen = ltc_mp_unsigned_bin_size(modulus) << 3; - x = bitlen % FP_LUT; - if (x) { - bitlen += FP_LUT - x; - } - lut_gap = bitlen / FP_LUT; - - /* get the k value */ - if ((ltc_mp_unsigned_bin_size(tka) > (sizeof(kb[0]) - 2)) || (ltc_mp_unsigned_bin_size(tkb) > (sizeof(kb[0]) - 2)) ) { - if (tka != kA) { - ltc_mp_clear(tka); - } - if (tkb != kB) { - ltc_mp_clear(tkb); - } - return CRYPT_BUFFER_OVERFLOW; - } - - /* store k */ - zeromem(kb, sizeof(kb)); - if ((err = ltc_mp_to_unsigned_bin(tka, kb[0])) != CRYPT_OK) { - if (tka != kA) { - ltc_mp_clear(tka); - } - if (tkb != kB) { - ltc_mp_clear(tkb); - } - return err; - } - - /* let's reverse kb so it's little endian */ - x = 0; - y = ltc_mp_unsigned_bin_size(tka) - 1; - if (tka != kA) { - ltc_mp_clear(tka); - } - while (x < y) { - z = kb[0][x]; kb[0][x] = kb[0][y]; kb[0][y] = z; - ++x; --y; - } - - /* store b */ - if ((err = ltc_mp_to_unsigned_bin(tkb, kb[1])) != CRYPT_OK) { - if (tkb != kB) { - ltc_mp_clear(tkb); - } - return err; - } - - x = 0; - y = ltc_mp_unsigned_bin_size(tkb) - 1; - if (tkb != kB) { - ltc_mp_clear(tkb); - } - while ((unsigned)x < y) { - z = kb[1][x]; kb[1][x] = kb[1][y]; kb[1][y] = z; - ++x; --y; - } - - /* at this point we can start, yipee */ - first = 1; - for (x = lut_gap-1; x >= 0; x--) { - /* extract FP_LUT bits from kb spread out by lut_gap bits and offset by x bits from the start */ - bitpos = x; - for (y = zA = zB = 0; y < FP_LUT; y++) { - zA |= ((kb[0][bitpos>>3] >> (bitpos&7)) & 1) << y; - zB |= ((kb[1][bitpos>>3] >> (bitpos&7)) & 1) << y; - bitpos += lut_gap; /* it's y*lut_gap + x, but here we can avoid the mult in each loop */ - } - - /* double if not first */ - if (!first) { - if ((err = ltc_mp.ecc_ptdbl(R, R, a, modulus, mp)) != CRYPT_OK) { - return err; - } - } - - /* add if not first, otherwise copy */ - if (!first) { - if (zA) { - if ((err = ltc_mp.ecc_ptadd(R, fp_cache[idx1].LUT[zA], R, a, modulus, mp)) != CRYPT_OK) { - return err; - } - } - if (zB) { - if ((err = ltc_mp.ecc_ptadd(R, fp_cache[idx2].LUT[zB], R, a, modulus, mp)) != CRYPT_OK) { - return err; - } - } - } else { - if (zA) { - if ((ltc_mp_copy(fp_cache[idx1].LUT[zA]->x, R->x) != CRYPT_OK) || - (ltc_mp_copy(fp_cache[idx1].LUT[zA]->y, R->y) != CRYPT_OK) || - (ltc_mp_copy(fp_cache[idx1].mu, R->z) != CRYPT_OK)) { - return CRYPT_MEM; - } - first = 0; - } - if (zB) { - if (!first) { - if ((err = ltc_mp.ecc_ptadd(R, fp_cache[idx2].LUT[zB], R, a, modulus, mp)) != CRYPT_OK) { - return err; - } - } else { - if ((ltc_mp_copy(fp_cache[idx2].LUT[zB]->x, R->x) != CRYPT_OK) || - (ltc_mp_copy(fp_cache[idx2].LUT[zB]->y, R->y) != CRYPT_OK) || - (ltc_mp_copy(fp_cache[idx2].mu, R->z) != CRYPT_OK)) { - return CRYPT_MEM; - } - first = 0; - } - } - } - } - zeromem(kb, sizeof(kb)); - return ltc_ecc_map(R, modulus, mp); -} - -/** ECC Fixed Point mulmod global - Computes kA*A + kB*B = C using Shamir's Trick - @param A First point to multiply - @param kA What to multiple A by - @param B Second point to multiply - @param kB What to multiple B by - @param C [out] Destination point (can overlap with A or B) - @param ma ECC curve parameter a in montgomery form - @param modulus Modulus for curve - @return CRYPT_OK on success -*/ -int ltc_ecc_fp_mul2add(const ecc_point *A, void *kA, - const ecc_point *B, void *kB, - ecc_point *C, - const void *ma, - const void *modulus) -{ - int idx1, idx2, err; - void *mp, *mu; - - mp = NULL; - mu = NULL; - LTC_MUTEX_LOCK(<c_ecc_fp_lock); - /* find point */ - idx1 = s_find_base(A); - - /* no entry? */ - if (idx1 == -1) { - /* find hole and add it */ - if ((idx1 = s_find_hole()) >= 0) { - if ((err = s_add_entry(idx1, A)) != CRYPT_OK) { - goto LBL_ERR; - } - } - } - if (idx1 >= 0) { - /* increment LRU */ - ++(fp_cache[idx1].lru_count); - } - - /* find point */ - idx2 = s_find_base(B); - - /* no entry? */ - if (idx2 == -1) { - /* find hole and add it */ - if ((idx2 = s_find_hole()) >= 0) { - if ((err = s_add_entry(idx2, B)) != CRYPT_OK) { - goto LBL_ERR; - } - } - } - if (idx2 >= 0) { - /* increment LRU */ - ++(fp_cache[idx2].lru_count); - } - - /* if it's 2 build the LUT, if it's higher just use the LUT */ - if (idx1 >= 0 && fp_cache[idx1].lru_count == 2) { - /* compute mp */ - if ((err = ltc_mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { goto LBL_ERR; } - - /* compute mu */ - if ((err = ltc_mp_init(&mu)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = ltc_mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* build the LUT */ - if ((err = s_build_lut(idx1,ma, modulus, mp, mu)) != CRYPT_OK) { - goto LBL_ERR;; - } - } - - /* if it's 2 build the LUT, if it's higher just use the LUT */ - if (idx2 >= 0 && fp_cache[idx2].lru_count == 2) { - if (mp == NULL) { - /* compute mp */ - if ((err = ltc_mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { goto LBL_ERR; } - - /* compute mu */ - if ((err = ltc_mp_init(&mu)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = ltc_mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) { - goto LBL_ERR; - } - } - - /* build the LUT */ - if ((err = s_build_lut(idx2, ma, modulus, mp, mu)) != CRYPT_OK) { - goto LBL_ERR;; - } - } - - - if (idx1 >=0 && idx2 >= 0 && fp_cache[idx1].lru_count >= 2 && fp_cache[idx2].lru_count >= 2) { - if (mp == NULL) { - /* compute mp */ - if ((err = ltc_mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { goto LBL_ERR; } - } - err = ss_accel_fp_mul2add(idx1, idx2, kA, kB, C, ma, modulus, mp); - } else { - err = ltc_ecc_mul2add(A, kA, B, kB, C, ma, modulus); - } -LBL_ERR: - LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); - if (mp != NULL) { - ltc_mp_montgomery_free(mp); - } - if (mu != NULL) { - ltc_mp_clear(mu); - } - return err; -} -#endif - -/** ECC Fixed Point mulmod global - @param k The multiplicand - @param G Base point to multiply - @param R [out] Destination of product - @param a ECC curve parameter a - @param modulus The modulus for the curve - @param map [boolean] If non-zero maps the point back to affine co-ordinates, otherwise it's left in jacobian-montgomery form - @return CRYPT_OK if successful -*/ -int ltc_ecc_fp_mulmod(const void *k, const ecc_point *G, ecc_point *R, const void *a, const void *modulus, int map) -{ - int idx, err; - void *mp, *mu, *ma, *a_plus3; - - if (ltc_mp_iszero(k) == LTC_MP_YES) { - /* 0 * G is the point at infinity */ - return ltc_ecc_set_point_xyz(1, 1, 0, R); - } - - mp = NULL; - mu = NULL; - ma = NULL; - a_plus3 = NULL; - LTC_MUTEX_LOCK(<c_ecc_fp_lock); - /* find point */ - idx = s_find_base(G); - - /* no entry? */ - if (idx == -1) { - /* find hole and add it */ - idx = s_find_hole(); - - if (idx >= 0) { - if ((err = s_add_entry(idx, G)) != CRYPT_OK) { - goto LBL_ERR; - } - } - } - if (idx >= 0) { - /* increment LRU */ - ++(fp_cache[idx].lru_count); - } - - if (idx >= 0 && fp_cache[idx].lru_count >= 2) { - /* compute mp */ - if ((err = ltc_mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { goto LBL_ERR; } - - /* match ltc_ecc_mulmod(): keep ma == NULL for curves with a == -3 */ - if ((err = ltc_mp_init(&a_plus3)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = ltc_mp_add_d(a, 3, a_plus3)) != CRYPT_OK) { - goto LBL_ERR; - } - if (ltc_mp_cmp(a_plus3, modulus) != LTC_MP_EQ) { - if ((err = ltc_mp_init(&ma)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = ltc_mp_init(&mu)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = ltc_mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = ltc_mp_mulmod(a, mu, modulus, ma)) != CRYPT_OK) { - goto LBL_ERR; - } - } else if (fp_cache[idx].lru_count == 2) { - if ((err = ltc_mp_init(&mu)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = ltc_mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) { - goto LBL_ERR; - } - } - - /* if it's 2 build the LUT, if it's higher just use the LUT */ - if (fp_cache[idx].lru_count == 2) { - if ((err = s_build_lut(idx, ma, modulus, mp, mu)) != CRYPT_OK) { - goto LBL_ERR; - } - } - } - - if (idx >= 0 && fp_cache[idx].lru_count >= 2) { - err = s_accel_fp_mul(idx, k, R, ma, modulus, mp, map); - } else { - err = ltc_ecc_mulmod(k, G, R, a, modulus, map); - } -LBL_ERR: - LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); - if (mp != NULL) { - ltc_mp_montgomery_free(mp); - } - if (mu != NULL) { - ltc_mp_clear(mu); - } - if (ma != NULL) { - ltc_mp_clear(ma); - } - if (a_plus3 != NULL) { - ltc_mp_clear(a_plus3); - } - return err; -} - -/* helper function for freeing the cache ... must be called with the cache mutex locked */ -static void s_ltc_ecc_fp_free_cache(void) -{ - unsigned x, y; - for (x = 0; x < FP_ENTRIES; x++) { - if (fp_cache[x].g != NULL) { - for (y = 0; y < (1U<= 0) { - /* it is already in the cache ... just check that the LUT is initialized */ - if(fp_cache[idx].lru_count >= 2) { - LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); - return CRYPT_OK; - } - } - - if (idx == -1 && (idx = s_find_hole()) == -1) { - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; - } - - if (idx >= 0 && fp_cache[idx].g == NULL) { - if ((err = s_add_entry(idx, g)) != CRYPT_OK) { - goto LBL_ERR; - } - } - - /* compute mp */ - if ((err = ltc_mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* compute mu */ - if ((err = ltc_mp_init(&mu)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = ltc_mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) { - goto LBL_ERR; - } - - if ((err = s_build_lut(idx, ma, modulus, mp, mu)) != CRYPT_OK) { - goto LBL_ERR; - } - fp_cache[idx].lru_count = 2; - fp_cache[idx].lock = lock; -LBL_ERR: - LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); - if (mp != NULL) { - ltc_mp_montgomery_free(mp); - } - if (mu != NULL) { - ltc_mp_clear(mu); - } - return err; -} - -/** Prevent/permit the FP cache from being updated - @param flag If flag is 0, remove cache lock (unlock), otherwise lock it -*/ -int ltc_ecc_fp_tablelock(int lock) -{ - int i; - - LTC_MUTEX_LOCK(<c_ecc_fp_lock); - for (i = 0; i < FP_ENTRIES; i++) { - fp_cache[i].lock = lock; - } - LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); - return CRYPT_OK; -} - -/** Export the current cache as a binary packet - @param out [out] pointer to malloc'ed space containing the packet - @param outlen [out] size of exported packet - @return CRYPT_OK if successful -*/ -int ltc_ecc_fp_save_state(unsigned char **out, unsigned long *outlen) -{ - ltc_asn1_list *cache_entry; - unsigned int i, j, k; - unsigned long fp_entries, fp_lut, num_entries; - int err; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - fp_entries = FP_ENTRIES; - fp_lut = FP_LUT; - num_entries = 0; - - LTC_MUTEX_LOCK(<c_ecc_fp_lock); - /* - * build the list; - Cache DEFINITIONS ::= - BEGIN - CacheDump ::= SEQUENCE { - numEntries SHORTINTEGER, - maxEntries SHORTINTEGER, - numLUT SHORTINTEGER, - cache SEQUENCE OF INTEGER - } - END - * - */ - /* - * The cache itself is a point (3 INTEGERS), - * the LUT as pairs of INTEGERS (2 * 1<x, 1); - LTC_SET_ASN1(cache_entry, j++, LTC_ASN1_INTEGER, fp_cache[i].g->y, 1); - LTC_SET_ASN1(cache_entry, j++, LTC_ASN1_INTEGER, fp_cache[i].g->z, 1); - for (k = 0; k < (1U<x, 1); - LTC_SET_ASN1(cache_entry, j++, LTC_ASN1_INTEGER, fp_cache[i].LUT[k]->y, 1); - } - LTC_SET_ASN1(cache_entry, j++, LTC_ASN1_INTEGER, fp_cache[i].mu, 1); - } - LTC_SET_ASN1(cache_entry, j++, LTC_ASN1_EOL, 0, 0); - - LTC_SET_ASN1(cache_entry, 0, LTC_ASN1_SHORT_INTEGER, &num_entries, 1); - - if ((err = der_length_sequence(cache_entry, j, outlen)) != CRYPT_OK) { - goto save_err; - } - if ((*out = XMALLOC(*outlen)) == NULL) { - err = CRYPT_MEM; - goto save_err; - } - err = der_encode_sequence(cache_entry, j, *out, outlen); -save_err: - XFREE(cache_entry); - LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); - return err; -} - -/** Import a binary packet into the current cache - @param in [in] pointer to packet - @param inlen [in] size of packet (bytes) - @return CRYPT_OK if successful -*/ -int ltc_ecc_fp_restore_state(unsigned char *in, unsigned long inlen) -{ - int err; - ltc_asn1_list *decoded_list, *cur; - unsigned long num_entries, fp_entries, fp_lut; - unsigned long i, decoded_len; - unsigned int x; - - LTC_ARGCHK(in != NULL); - if (inlen == 0) { - return CRYPT_INVALID_ARG; - } - - decoded_list = NULL; - cur = NULL; - decoded_len = inlen; - - LTC_MUTEX_LOCK(<c_ecc_fp_lock); - /* - * start with an empty cache - */ - s_ltc_ecc_fp_free_cache(); - - if ((err = der_decode_sequence_flexi(in, &decoded_len, &decoded_list)) != CRYPT_OK) { - goto ERR_OUT; - } - if (decoded_len != inlen) { - err = CRYPT_INVALID_PACKET; - goto ERR_OUT; - } - - cur = decoded_list; - if (cur == NULL || cur->type != LTC_ASN1_SEQUENCE || cur->child == NULL || cur->next != NULL) { - err = CRYPT_INVALID_PACKET; - goto ERR_OUT; - } - - cur = cur->child; - if (cur->type != LTC_ASN1_INTEGER) { - err = CRYPT_INVALID_PACKET; - goto ERR_OUT; - } - num_entries = ltc_mp_get_int(cur->data); - cur = cur->next; - - if (cur == NULL || cur->type != LTC_ASN1_INTEGER) { - err = CRYPT_INVALID_PACKET; - goto ERR_OUT; - } - fp_entries = ltc_mp_get_int(cur->data); - cur = cur->next; - - if (cur == NULL || cur->type != LTC_ASN1_INTEGER) { - err = CRYPT_INVALID_PACKET; - goto ERR_OUT; - } - fp_lut = ltc_mp_get_int(cur->data); - cur = cur->next; - - if (fp_entries != FP_ENTRIES || fp_lut != FP_LUT || num_entries > fp_entries) { - err = CRYPT_INVALID_PACKET; - goto ERR_OUT; - } - - for (i = 0; i < num_entries; i++) { - if((fp_cache[i].g = ltc_ecc_new_point()) == NULL) { - err = CRYPT_MEM; - goto ERR_OUT; - } - - if (cur == NULL || cur->type != LTC_ASN1_INTEGER || (err = ltc_mp_copy(cur->data, fp_cache[i].g->x)) != CRYPT_OK) { - if (err == CRYPT_OK) err = CRYPT_INVALID_PACKET; - goto ERR_OUT; - } - cur = cur->next; - if (cur == NULL || cur->type != LTC_ASN1_INTEGER || (err = ltc_mp_copy(cur->data, fp_cache[i].g->y)) != CRYPT_OK) { - if (err == CRYPT_OK) err = CRYPT_INVALID_PACKET; - goto ERR_OUT; - } - cur = cur->next; - if (cur == NULL || cur->type != LTC_ASN1_INTEGER || (err = ltc_mp_copy(cur->data, fp_cache[i].g->z)) != CRYPT_OK) { - if (err == CRYPT_OK) err = CRYPT_INVALID_PACKET; - goto ERR_OUT; - } - cur = cur->next; - - for (x = 0; x < (1U<x, &p->y, LTC_NULL)) != CRYPT_OK) { - goto ERR_OUT; - } - p->z = NULL; - - if (cur == NULL || cur->type != LTC_ASN1_INTEGER || (err = ltc_mp_copy(cur->data, p->x)) != CRYPT_OK) { - if (err == CRYPT_OK) err = CRYPT_INVALID_PACKET; - goto ERR_OUT; - } - cur = cur->next; - if (cur == NULL || cur->type != LTC_ASN1_INTEGER || (err = ltc_mp_copy(cur->data, p->y)) != CRYPT_OK) { - if (err == CRYPT_OK) err = CRYPT_INVALID_PACKET; - goto ERR_OUT; - } - cur = cur->next; - } - - if (cur == NULL || cur->type != LTC_ASN1_INTEGER) { - err = CRYPT_INVALID_PACKET; - goto ERR_OUT; - } - if((err = ltc_mp_init_copy(&fp_cache[i].mu, cur->data)) != CRYPT_OK) { - goto ERR_OUT; - } - cur = cur->next; - fp_cache[i].lru_count = 3; - fp_cache[i].lock = 1; - } - - if (cur != NULL) { - err = CRYPT_INVALID_PACKET; - goto ERR_OUT; - } - der_sequence_free(decoded_list); - LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); - return CRYPT_OK; -ERR_OUT: - if (decoded_list != NULL) { - der_sequence_free(decoded_list); - } - s_ltc_ecc_fp_free_cache(); - LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); - return err; -} - -#endif diff --git a/src/math/gmp_desc.c b/src/math/gmp_desc.c deleted file mode 100644 index 943f37e4..00000000 --- a/src/math/gmp_desc.c +++ /dev/null @@ -1,658 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#define DESC_DEF_ONLY -#include "tomcrypt_private.h" - -#ifdef GMP_DESC - -#include -#include - -static int init(void **a) -{ - LTC_ARGCHK(a != NULL); - - *a = XCALLOC(1, sizeof(__mpz_struct)); - if (*a == NULL) { - return CRYPT_MEM; - } - mpz_init(*a); - return CRYPT_OK; -} - -static void deinit(void *a) -{ - LTC_ARGCHKVD(a != NULL); - mpz_clear(a); - XFREE(a); -} - -static int neg(const void *a, void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - mpz_neg(b, a); - return CRYPT_OK; -} - -static int copy(const void *a, void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - mpz_set(b, a); - return CRYPT_OK; -} - -static int init_copy(void **a, const void *b) -{ - if (init(a) != CRYPT_OK) { - return CRYPT_MEM; - } - return copy(b, *a); -} - -/* ---- trivial ---- */ -static int set_int(void *a, ltc_mp_digit b) -{ - LTC_ARGCHK(a != NULL); - mpz_set_ui(a, b); - return CRYPT_OK; -} - -static unsigned long get_int(const void *a) -{ - LTC_ARGCHK(a != NULL); - return mpz_get_ui(a); -} - -static ltc_mp_digit get_digit(const void *a, int n) -{ - LTC_ARGCHK(a != NULL); - return mpz_getlimbn(a, n); -} - -static int get_digit_count(const void *a) -{ - LTC_ARGCHK(a != NULL); - return mpz_size(a); -} - -static int compare(const void *a, const void *b) -{ - int ret; - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - ret = mpz_cmp(a, b); - if (ret < 0) { - return LTC_MP_LT; - } else if (ret > 0) { - return LTC_MP_GT; - } else { - return LTC_MP_EQ; - } -} - -static int compare_d(const void *a, ltc_mp_digit b) -{ - int ret; - LTC_ARGCHK(a != NULL); - ret = mpz_cmp_ui((__mpz_struct *)a, b); - if (ret < 0) { - return LTC_MP_LT; - } else if (ret > 0) { - return LTC_MP_GT; - } else { - return LTC_MP_EQ; - } -} - -static int count_bits(const void *a) -{ - LTC_ARGCHK(a != NULL); - return mpz_sizeinbase(a, 2); -} - -static int count_lsb_bits(const void *a) -{ - LTC_ARGCHK(a != NULL); - return mpz_scan1(a, 0); -} - - -static int twoexpt(void *a, int n) -{ - LTC_ARGCHK(a != NULL); - mpz_set_ui(a, 0); - mpz_setbit(a, n); - return CRYPT_OK; -} - -/* ---- conversions ---- */ - -static const char rmap[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/"; - -/* read ascii string */ -static int read_radix(void *a, const char *b, int radix) -{ - int ret; - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - if (radix == 64) { - /* Sadly, GMP only supports radixes up to 62, but we need 64. - * So, although this is not the most elegant or efficient way, - * let's just convert the base 64 string (6 bits per digit) to - * an octal string (3 bits per digit) that's twice as long. */ - char c, *tmp, *q; - const char *p; - int i; - tmp = XMALLOC (1 + 2 * XSTRLEN (b)); - if (tmp == NULL) { - return CRYPT_MEM; - } - p = b; - q = tmp; - while ((c = *p++) != 0) { - for (i = 0; i < 64; i++) { - if (c == rmap[i]) - break; - } - if (i == 64) { - XFREE (tmp); - /* printf ("c = '%c'\n", c); */ - return CRYPT_ERROR; - } - *q++ = '0' + (i / 8); - *q++ = '0' + (i % 8); - } - *q = 0; - ret = mpz_set_str(a, tmp, 8); - /* printf ("ret = %d for '%s'\n", ret, tmp); */ - XFREE (tmp); - } else { - ret = mpz_set_str(a, b, radix); - } - return (ret == 0 ? CRYPT_OK : CRYPT_ERROR); -} - -/* write one */ -static int write_radix(const void *a, char *b, int radix) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - if (radix >= 11 && radix <= 36) - /* If radix is positive, GMP uses lowercase, and if negative, uppercase. - * We want it to use uppercase, to match the test vectors (presumably - * generated with LibTomMath). */ - radix = -radix; - mpz_get_str(b, radix, a); - return CRYPT_OK; -} - -/* get size as unsigned char string */ -static unsigned long unsigned_size(const void *a) -{ - unsigned long t; - LTC_ARGCHK(a != NULL); - t = mpz_sizeinbase(a, 2); - if (mpz_cmp_ui((__mpz_struct *)a, 0) == 0) return 0; - return (t>>3) + ((t&7)?1:0); -} - -/* store */ -static int unsigned_write(const void *a, unsigned char *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - mpz_export(b, NULL, 1, 1, 1, 0, a); - return CRYPT_OK; -} - -/* read */ -static int unsigned_read(void *a, const unsigned char *b, unsigned long len) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - mpz_import(a, len, 1, 1, 1, 0, b); - return CRYPT_OK; -} - -/* add */ -static int add(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - mpz_add(c, a, b); - return CRYPT_OK; -} - -static int addi(const void *a, ltc_mp_digit b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - mpz_add_ui(c, a, b); - return CRYPT_OK; -} - -/* sub */ -static int sub(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - mpz_sub(c, a, b); - return CRYPT_OK; -} - -static int subi(const void *a, ltc_mp_digit b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - mpz_sub_ui(c, a, b); - return CRYPT_OK; -} - -/* mul */ -static int mul(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - mpz_mul(c, a, b); - return CRYPT_OK; -} - -static int muli(const void *a, ltc_mp_digit b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - mpz_mul_ui(c, a, b); - return CRYPT_OK; -} - -/* sqr */ -static int sqr(const void *a, void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - mpz_mul(b, a, a); - return CRYPT_OK; -} - -/* sqrtmod_prime */ -static int sqrtmod_prime(const void *n, const void *prime, void *ret) -{ - int res, legendre, i; - mpz_t t1, C, Q, S, Z, M, T, R, two; - - LTC_ARGCHK(n != NULL); - LTC_ARGCHK(prime != NULL); - LTC_ARGCHK(ret != NULL); - - /* first handle the simple cases */ - if (mpz_cmp_ui((__mpz_struct *)n, 0) == 0) { - mpz_set_ui(ret, 0); - return CRYPT_OK; - } - if (mpz_cmp_ui((__mpz_struct *)prime, 2) == 0) return CRYPT_ERROR; /* prime must be odd */ - legendre = mpz_legendre(n, prime); - if (legendre == -1) return CRYPT_ERROR; /* quadratic non-residue mod prime */ - - mpz_init(t1); mpz_init(C); mpz_init(Q); - mpz_init(S); mpz_init(Z); mpz_init(M); - mpz_init(T); mpz_init(R); mpz_init(two); - - /* SPECIAL CASE: if prime mod 4 == 3 - * compute directly: res = n^(prime+1)/4 mod prime - * Handbook of Applied Cryptography algorithm 3.36 - */ - i = mpz_mod_ui(t1, prime, 4); /* t1 is ignored here */ - if (i == 3) { - mpz_add_ui(t1, prime, 1); - mpz_fdiv_q_2exp(t1, t1, 2); - mpz_powm(ret, n, t1, prime); - res = CRYPT_OK; - goto cleanup; - } - - /* NOW: Tonelli-Shanks algorithm */ - - /* factor out powers of 2 from prime-1, defining Q and S as: prime-1 = Q*2^S */ - mpz_set(Q, prime); - mpz_sub_ui(Q, Q, 1); - /* Q = prime - 1 */ - mpz_set_ui(S, 0); - /* S = 0 */ - while (mpz_even_p(Q)) { - mpz_fdiv_q_2exp(Q, Q, 1); - /* Q = Q / 2 */ - mpz_add_ui(S, S, 1); - /* S = S + 1 */ - } - - /* find a Z such that the Legendre symbol (Z|prime) == -1 */ - mpz_set_ui(Z, 2); - /* Z = 2 */ - while(1) { - legendre = mpz_legendre(Z, prime); - if (legendre == -1) break; - mpz_add_ui(Z, Z, 1); - /* Z = Z + 1 */ - } - - mpz_powm(C, Z, Q, prime); - /* C = Z ^ Q mod prime */ - mpz_add_ui(t1, Q, 1); - mpz_fdiv_q_2exp(t1, t1, 1); - /* t1 = (Q + 1) / 2 */ - mpz_powm(R, n, t1, prime); - /* R = n ^ ((Q + 1) / 2) mod prime */ - mpz_powm(T, n, Q, prime); - /* T = n ^ Q mod prime */ - mpz_set(M, S); - /* M = S */ - mpz_set_ui(two, 2); - - while (1) { - mpz_set(t1, T); - i = 0; - while (1) { - if (mpz_cmp_ui(t1, 1) == 0) break; - mpz_powm(t1, t1, two, prime); - i++; - } - if (i == 0) { - mpz_set(ret, R); - res = CRYPT_OK; - goto cleanup; - } - mpz_sub_ui(t1, M, i); - mpz_sub_ui(t1, t1, 1); - mpz_powm(t1, two, t1, prime); - /* t1 = 2 ^ (M - i - 1) */ - mpz_powm(t1, C, t1, prime); - /* t1 = C ^ (2 ^ (M - i - 1)) mod prime */ - mpz_mul(C, t1, t1); - mpz_mod(C, C, prime); - /* C = (t1 * t1) mod prime */ - mpz_mul(R, R, t1); - mpz_mod(R, R, prime); - /* R = (R * t1) mod prime */ - mpz_mul(T, T, C); - mpz_mod(T, T, prime); - /* T = (T * C) mod prime */ - mpz_set_ui(M, i); - /* M = i */ - } - -cleanup: - mpz_clear(t1); mpz_clear(C); mpz_clear(Q); - mpz_clear(S); mpz_clear(Z); mpz_clear(M); - mpz_clear(T); mpz_clear(R); mpz_clear(two); - return res; -} - -/* div */ -static int divide(const void *a, const void *b, void *c, void *d) -{ - mpz_t tmp; - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - if (c != NULL) { - mpz_init(tmp); - mpz_divexact(tmp, a, b); - } - if (d != NULL) { - mpz_mod(d, a, b); - } - if (c != NULL) { - mpz_set(c, tmp); - mpz_clear(tmp); - } - return CRYPT_OK; -} - -static int div_2(const void *a, void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - mpz_divexact_ui(b, a, 2); - return CRYPT_OK; -} - -/* modi */ -static int modi(const void *a, ltc_mp_digit b, ltc_mp_digit *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - - *c = mpz_fdiv_ui(a, b); - return CRYPT_OK; -} - -/* gcd */ -static int gcd(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - mpz_gcd(c, a, b); - return CRYPT_OK; -} - -/* lcm */ -static int lcm(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - mpz_lcm(c, a, b); - return CRYPT_OK; -} - -static int addmod(const void *a, const void *b, const void *c, void *d) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - LTC_ARGCHK(d != NULL); - mpz_add(d, a, b); - mpz_mod(d, d, c); - return CRYPT_OK; -} - -static int submod(const void *a, const void *b, const void *c, void *d) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - LTC_ARGCHK(d != NULL); - mpz_sub(d, a, b); - mpz_mod(d, d, c); - return CRYPT_OK; -} - -static int mulmod(const void *a, const void *b, const void *c, void *d) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - LTC_ARGCHK(d != NULL); - mpz_mul(d, a, b); - mpz_mod(d, d, c); - return CRYPT_OK; -} - -static int sqrmod(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - mpz_mul(c, a, a); - mpz_mod(c, c, b); - return CRYPT_OK; -} - -/* invmod */ -static int invmod(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - mpz_invert(c, a, b); - return CRYPT_OK; -} - -/* setup */ -static int montgomery_setup(const void *a, void **b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - *b = (void *)1; - return CRYPT_OK; -} - -/* get normalization value */ -static int montgomery_normalization(void *a, const void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - mpz_set_ui(a, 1); - return CRYPT_OK; -} - -/* reduce */ -static int montgomery_reduce(void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - mpz_mod(a, a, b); - return CRYPT_OK; -} - -/* clean up */ -static void montgomery_deinit(void *a) -{ - LTC_UNUSED_PARAM(a); -} - -static int exptmod(const void *a, const void *b, const void *c, void *d) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - LTC_ARGCHK(d != NULL); - mpz_powm(d, a, b, c); - return CRYPT_OK; -} - -static int isprime(const void *a, int b, int *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - if (b == 0) { - b = LTC_MILLER_RABIN_REPS; - } /* if */ - *c = mpz_probab_prime_p(a, b) > 0 ? LTC_MP_YES : LTC_MP_NO; - return CRYPT_OK; -} - -static int set_rand(void *a, int size) -{ - LTC_ARGCHK(a != NULL); - mpz_random(a, size); - return CRYPT_OK; -} - -const ltc_math_descriptor gmp_desc = { - "GNU MP", - sizeof(mp_limb_t) * CHAR_BIT - GMP_NAIL_BITS, - - &init, - &init_copy, - &deinit, - - &neg, - ©, - - &set_int, - &get_int, - &get_digit, - &get_digit_count, - &compare, - &compare_d, - &count_bits, - &count_lsb_bits, - &twoexpt, - - &read_radix, - &write_radix, - &unsigned_size, - &unsigned_write, - &unsigned_read, - - &add, - &addi, - &sub, - &subi, - &mul, - &muli, - &sqr, - &sqrtmod_prime, - ÷, - &div_2, - &modi, - &gcd, - &lcm, - - &mulmod, - &sqrmod, - &invmod, - - &montgomery_setup, - &montgomery_normalization, - &montgomery_reduce, - &montgomery_deinit, - - &exptmod, - &isprime, - -#ifdef LTC_MECC -#ifdef LTC_MECC_FP - <c_ecc_fp_mulmod, -#else - <c_ecc_mulmod, -#endif /* LTC_MECC_FP */ - <c_ecc_projective_add_point, - <c_ecc_projective_dbl_point, - <c_ecc_map, -#ifdef LTC_ECC_SHAMIR -#ifdef LTC_MECC_FP - <c_ecc_fp_mul2add, -#else - <c_ecc_mul2add, -#endif /* LTC_MECC_FP */ -#else - NULL, -#endif /* LTC_ECC_SHAMIR */ -#else - NULL, NULL, NULL, NULL, NULL, -#endif /* LTC_MECC */ - -#ifdef LTC_MRSA - &rsa_make_key, - &rsa_exptmod, -#else - NULL, NULL, -#endif - &addmod, - &submod, - - &set_rand, - -}; - - -#endif diff --git a/src/math/ltm_desc.c b/src/math/ltm_desc.c deleted file mode 100644 index 99c9f14b..00000000 --- a/src/math/ltm_desc.c +++ /dev/null @@ -1,560 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#define DESC_DEF_ONLY -#include "tomcrypt_private.h" - -#ifdef LTM_DESC - -#include -#if !defined(PRIVATE_MP_WARRAY) && !defined(BN_MP_PRIME_IS_PRIME_C) -#include -#endif - -static const struct { - mp_err mpi_code; - int ltc_code; -} mpi_to_ltc_codes[] = { - { MP_OKAY , CRYPT_OK}, - { MP_MEM , CRYPT_MEM}, - { MP_VAL , CRYPT_INVALID_ARG}, -#if defined(MP_BUF) || defined(MP_USE_ENUMS) - { MP_ITER , CRYPT_INVALID_PACKET}, - { MP_BUF , CRYPT_BUFFER_OVERFLOW}, -#endif -}; - -/** - Convert a MPI error to a LTC error (Possibly the most powerful function ever! Oh wait... no) - @param err The error to convert - @return The equivalent LTC error code or CRYPT_ERROR if none found -*/ -static int mpi_to_ltc_error(mp_err err) -{ - size_t x; - - for (x = 0; x < LTC_ARRAY_SIZE(mpi_to_ltc_codes); x++) { - if (err == mpi_to_ltc_codes[x].mpi_code) { - return mpi_to_ltc_codes[x].ltc_code; - } - } - return CRYPT_ERROR; -} - -static int init_mpi(void **a) -{ - LTC_ARGCHK(a != NULL); - - *a = XCALLOC(1, sizeof(mp_int)); - if (*a == NULL) { - return CRYPT_MEM; - } else { - return CRYPT_OK; - } -} - -static int init(void **a) -{ - int err; - - LTC_ARGCHK(a != NULL); - - if ((err = init_mpi(a)) != CRYPT_OK) { - return err; - } - if ((err = mpi_to_ltc_error(mp_init(*a))) != CRYPT_OK) { - XFREE(*a); - } - return err; -} - -static void deinit(void *a) -{ - LTC_ARGCHKVD(a != NULL); - mp_clear(a); - XFREE(a); -} - -static int neg(const void *a, void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - return mpi_to_ltc_error(mp_neg(a, b)); -} - -static int copy(const void *a, void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - return mpi_to_ltc_error(mp_copy(a, b)); -} - -static int init_copy(void **a, const void *b) -{ - int err; - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - if ((err = init_mpi(a)) != CRYPT_OK) return err; - return mpi_to_ltc_error(mp_init_copy(*a, b)); -} - -/* ---- trivial ---- */ -static int set_int(void *a, ltc_mp_digit b) -{ - LTC_ARGCHK(a != NULL); -#ifdef BN_MP_SET_INT_C - return mpi_to_ltc_error(mp_set_int(a, b)); -#else - mp_set_u32(a, b); - return CRYPT_OK; -#endif -} - -static unsigned long get_int(const void *a) -{ - LTC_ARGCHK(a != NULL); -#ifdef BN_MP_GET_INT_C - return mp_get_int(a); -#else - return mp_get_ul(a); -#endif -} - -static ltc_mp_digit get_digit(const void *a, int n) -{ - const mp_int *A; - LTC_ARGCHK(a != NULL); - A = a; - return (n >= A->used || n < 0) ? 0 : A->dp[n]; -} - -static int get_digit_count(const void *a) -{ - const mp_int *A; - LTC_ARGCHK(a != NULL); - A = a; - return A->used; -} - -static int compare(const void *a, const void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - switch (mp_cmp(a, b)) { - case MP_LT: return LTC_MP_LT; - case MP_EQ: return LTC_MP_EQ; - case MP_GT: return LTC_MP_GT; - default: return 0; - } -} - -static int compare_d(const void *a, ltc_mp_digit b) -{ - LTC_ARGCHK(a != NULL); - switch (mp_cmp_d(a, b)) { - case MP_LT: return LTC_MP_LT; - case MP_EQ: return LTC_MP_EQ; - case MP_GT: return LTC_MP_GT; - default: return 0; - } -} - -static int count_bits(const void *a) -{ - LTC_ARGCHK(a != NULL); - return mp_count_bits(a); -} - -static int count_lsb_bits(const void *a) -{ - LTC_ARGCHK(a != NULL); - return mp_cnt_lsb(a); -} - - -static int twoexpt(void *a, int n) -{ - LTC_ARGCHK(a != NULL); - return mpi_to_ltc_error(mp_2expt(a, n)); -} - -/* ---- conversions ---- */ - -/* read ascii string */ -static int read_radix(void *a, const char *b, int radix) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - return mpi_to_ltc_error(mp_read_radix(a, b, radix)); -} - -/* write one */ -static int write_radix(const void *a, char *b, int radix) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); -#ifdef BN_MP_TORADIX_C - return mpi_to_ltc_error(mp_toradix(a, b, radix)); -#else - return mpi_to_ltc_error(mp_to_radix(a, b, SIZE_MAX, NULL, radix)); -#endif -} - -/* get size as unsigned char string */ -static unsigned long unsigned_size(const void *a) -{ - LTC_ARGCHK(a != NULL); -#ifdef BN_MP_UNSIGNED_BIN_SIZE_C - return mp_unsigned_bin_size(a); -#else - return (unsigned long)mp_ubin_size(a); -#endif -} - -/* store */ -static int unsigned_write(const void *a, unsigned char *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); -#ifdef BN_MP_TO_UNSIGNED_BIN_C - return mpi_to_ltc_error(mp_to_unsigned_bin(a, b)); -#else - return mpi_to_ltc_error(mp_to_ubin(a, b, SIZE_MAX, NULL)); -#endif -} - -/* read */ -static int unsigned_read(void *a, const unsigned char *b, unsigned long len) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); -#ifdef BN_MP_READ_UNSIGNED_BIN_C - return mpi_to_ltc_error(mp_read_unsigned_bin(a, b, len)); -#else - return mpi_to_ltc_error(mp_from_ubin(a, b, (size_t)len)); -#endif -} - -/* add */ -static int add(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - return mpi_to_ltc_error(mp_add(a, b, c)); -} - -static int addi(const void *a, ltc_mp_digit b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - return mpi_to_ltc_error(mp_add_d(a, b, c)); -} - -/* sub */ -static int sub(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - return mpi_to_ltc_error(mp_sub(a, b, c)); -} - -static int subi(const void *a, ltc_mp_digit b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - return mpi_to_ltc_error(mp_sub_d(a, b, c)); -} - -/* mul */ -static int mul(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - return mpi_to_ltc_error(mp_mul(a, b, c)); -} - -static int muli(const void *a, ltc_mp_digit b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - return mpi_to_ltc_error(mp_mul_d(a, b, c)); -} - -/* sqr */ -static int sqr(const void *a, void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - return mpi_to_ltc_error(mp_sqr(a, b)); -} - -/* sqrtmod_prime */ -static int sqrtmod_prime(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - return mpi_to_ltc_error(mp_sqrtmod_prime(a, b, c)); -} - -/* div */ -static int divide(const void *a, const void *b, void *c, void *d) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - return mpi_to_ltc_error(mp_div(a, b, c, d)); -} - -static int div_2(const void *a, void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - return mpi_to_ltc_error(mp_div_2(a, b)); -} - -/* modi */ -static int modi(const void *a, ltc_mp_digit b, ltc_mp_digit *c) -{ - mp_digit tmp; - int err; - - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - - if ((err = mpi_to_ltc_error(mp_mod_d(a, b, &tmp))) != CRYPT_OK) { - return err; - } - *c = tmp; - return CRYPT_OK; -} - -/* gcd */ -static int gcd(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - return mpi_to_ltc_error(mp_gcd(a, b, c)); -} - -/* lcm */ -static int lcm(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - return mpi_to_ltc_error(mp_lcm(a, b, c)); -} - -static int addmod(const void *a, const void *b, const void *c, void *d) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - LTC_ARGCHK(d != NULL); - return mpi_to_ltc_error(mp_addmod(a,b,c,d)); -} - -static int submod(const void *a, const void *b, const void *c, void *d) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - LTC_ARGCHK(d != NULL); - return mpi_to_ltc_error(mp_submod(a,b,c,d)); -} - -static int mulmod(const void *a, const void *b, const void *c, void *d) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - LTC_ARGCHK(d != NULL); - return mpi_to_ltc_error(mp_mulmod(a,b,c,d)); -} - -static int sqrmod(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - return mpi_to_ltc_error(mp_sqrmod(a,b,c)); -} - -/* invmod */ -static int invmod(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - return mpi_to_ltc_error(mp_invmod(a, b, c)); -} - -/* setup */ -static int montgomery_setup(const void *a, void **b) -{ - int err; - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - *b = XCALLOC(1, sizeof(mp_digit)); - if (*b == NULL) { - return CRYPT_MEM; - } - if ((err = mpi_to_ltc_error(mp_montgomery_setup(a, *b))) != CRYPT_OK) { - XFREE(*b); - } - return err; -} - -/* get normalization value */ -static int montgomery_normalization(void *a, const void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - return mpi_to_ltc_error(mp_montgomery_calc_normalization(a, b)); -} - -/* reduce */ -static int montgomery_reduce(void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - return mpi_to_ltc_error(mp_montgomery_reduce(a, b, *((mp_digit *)c))); -} - -/* clean up */ -static void montgomery_deinit(void *a) -{ - XFREE(a); -} - -static int exptmod(const void *a, const void *b, const void *c, void *d) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - LTC_ARGCHK(d != NULL); - return mpi_to_ltc_error(mp_exptmod(a,b,c,d)); -} - -static int isprime(const void *a, int b, int *c) -{ - int err; -#if defined(PRIVATE_MP_WARRAY) || defined(BN_MP_PRIME_IS_PRIME_C) - int res; -#else - bool res; -#endif - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - b = mp_prime_rabin_miller_trials(mp_count_bits(a)); - err = mpi_to_ltc_error(mp_prime_is_prime(a, b, &res)); - *c = res ? LTC_MP_YES : LTC_MP_NO; - return err; -} - -static int set_rand(void *a, int size) -{ - LTC_ARGCHK(a != NULL); - return mpi_to_ltc_error(mp_rand(a, size)); -} - -#ifndef MP_DIGIT_BIT -#define MP_DIGIT_BIT DIGIT_BIT -#endif - -const ltc_math_descriptor ltm_desc = { - - "LibTomMath", - (int)MP_DIGIT_BIT, - - &init, - &init_copy, - &deinit, - - &neg, - ©, - - &set_int, - &get_int, - &get_digit, - &get_digit_count, - &compare, - &compare_d, - &count_bits, - &count_lsb_bits, - &twoexpt, - - &read_radix, - &write_radix, - &unsigned_size, - &unsigned_write, - &unsigned_read, - - &add, - &addi, - &sub, - &subi, - &mul, - &muli, - &sqr, - &sqrtmod_prime, - ÷, - &div_2, - &modi, - &gcd, - &lcm, - - &mulmod, - &sqrmod, - &invmod, - - &montgomery_setup, - &montgomery_normalization, - &montgomery_reduce, - &montgomery_deinit, - - &exptmod, - &isprime, - -#ifdef LTC_MECC -#ifdef LTC_MECC_FP - <c_ecc_fp_mulmod, -#else - <c_ecc_mulmod, -#endif - <c_ecc_projective_add_point, - <c_ecc_projective_dbl_point, - <c_ecc_map, -#ifdef LTC_ECC_SHAMIR -#ifdef LTC_MECC_FP - <c_ecc_fp_mul2add, -#else - <c_ecc_mul2add, -#endif /* LTC_MECC_FP */ -#else - NULL, -#endif /* LTC_ECC_SHAMIR */ -#else - NULL, NULL, NULL, NULL, NULL, -#endif /* LTC_MECC */ - -#ifdef LTC_MRSA - &rsa_make_key, - &rsa_exptmod, -#else - NULL, NULL, -#endif - &addmod, - &submod, - - &set_rand, - -}; - - -#endif diff --git a/src/math/multi.c b/src/math/multi.c deleted file mode 100644 index 1b7058fa..00000000 --- a/src/math/multi.c +++ /dev/null @@ -1,64 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_MPI -int ltc_mp_init_multi(void **a, ...) -{ - void **cur = a; - int np = 0; - va_list args; - - va_start(args, a); - while (cur != NULL) { - if (ltc_mp_init(cur) != CRYPT_OK) { - /* failed */ - va_list clean_list; - - va_start(clean_list, a); - cur = a; - while (np--) { - ltc_mp_clear(*cur); - cur = va_arg(clean_list, void**); - } - va_end(clean_list); - va_end(args); - return CRYPT_MEM; - } - ++np; - cur = va_arg(args, void**); - } - va_end(args); - return CRYPT_OK; -} - -void ltc_mp_deinit_multi(void *a, ...) -{ - void *cur = a; - va_list args; - - va_start(args, a); - while (cur != NULL) { - ltc_mp_clear(cur); - cur = va_arg(args, void *); - } - va_end(args); -} - -void ltc_mp_cleanup_multi(void **a, ...) -{ - void **cur = a; - va_list args; - - va_start(args, a); - while (cur != NULL) { - if (*cur != NULL) { - ltc_mp_clear(*cur); - *cur = NULL; - } - cur = va_arg(args, void**); - } - va_end(args); -} - -#endif diff --git a/src/math/radix_to_bin.c b/src/math/radix_to_bin.c deleted file mode 100644 index 9a7d02d9..00000000 --- a/src/math/radix_to_bin.c +++ /dev/null @@ -1,52 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file radix_to_bin.c - Convert data from a specific radix to binary. - Steffen Jaeckel -*/ - -/** - Convert data from a specific radix to binary - - The default MPI descriptors #ltm_desc, #tfm_desc and #gmp_desc - have the following restrictions on parameters: - - \p in - NUL-terminated char buffer - - \p radix - 2..64 - - @param in The input - @param radix The radix of the input - @param out The output buffer - @param len [in/out] The length of the output buffer - - @return CRYPT_OK on success. -*/ -int radix_to_bin(const void *in, int radix, void *out, unsigned long *len) -{ - unsigned long l; - void* mpi; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(len != NULL); - - if ((err = ltc_mp_init(&mpi)) != CRYPT_OK) return err; - if ((err = ltc_mp_read_radix(mpi, in, radix)) != CRYPT_OK) goto LBL_ERR; - - if ((l = ltc_mp_unsigned_bin_size(mpi)) > *len) { - *len = l; - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; - } - *len = l; - - if ((err = ltc_mp_to_unsigned_bin(mpi, out)) != CRYPT_OK) goto LBL_ERR; - -LBL_ERR: - ltc_mp_clear(mpi); - return err; -} diff --git a/src/math/rand_bn.c b/src/math/rand_bn.c deleted file mode 100644 index 4f9f4f2f..00000000 --- a/src/math/rand_bn.c +++ /dev/null @@ -1,65 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#if defined(LTC_MDSA) || defined(LTC_MECC) -/** - Generate a random number N with given bitlength (note: MSB can be 0) -*/ - -int rand_bn_bits(void *N, int bits, prng_state *prng, int wprng) -{ - int res, bytes; - unsigned char *buf, mask; - - LTC_ARGCHK(N != NULL); - LTC_ARGCHK(bits > 1); - - /* check PRNG */ - if ((res = prng_is_valid(wprng)) != CRYPT_OK) return res; - - bytes = (bits+7) >> 3; - mask = 0xff >> (bits % 8 == 0 ? 0 : 8 - bits % 8); - - /* allocate buffer */ - if ((buf = XCALLOC(1, bytes)) == NULL) return CRYPT_MEM; - - /* generate random bytes */ - if (prng_descriptor[wprng].read(buf, bytes, prng) != (unsigned long)bytes) { - res = CRYPT_ERROR_READPRNG; - goto cleanup; - } - /* mask bits */ - buf[0] &= mask; - /* load value */ - if ((res = ltc_mp_read_unsigned_bin(N, buf, bytes)) != CRYPT_OK) goto cleanup; - - res = CRYPT_OK; - -cleanup: -#ifdef LTC_CLEAN_STACK - zeromem(buf, bytes); -#endif - XFREE(buf); - return res; -} - -/** - Generate a random number N in a range: 1 <= N < limit -*/ -int rand_bn_upto(void *N, void *limit, prng_state *prng, int wprng) -{ - int res, bits; - - LTC_ARGCHK(N != NULL); - LTC_ARGCHK(limit != NULL); - - bits = ltc_mp_count_bits(limit); - do { - res = rand_bn_bits(N, bits, prng, wprng); - if (res != CRYPT_OK) return res; - } while (ltc_mp_cmp_d(N, 0) != LTC_MP_GT || ltc_mp_cmp(N, limit) != LTC_MP_LT); - - return CRYPT_OK; -} -#endif diff --git a/src/math/rand_prime.c b/src/math/rand_prime.c deleted file mode 100644 index 6f13806c..00000000 --- a/src/math/rand_prime.c +++ /dev/null @@ -1,76 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#if defined(LTC_MRSA) || (!defined(LTC_NO_MATH) && !defined(LTC_NO_PRNGS)) - -/** - @file rand_prime.c - Generate a random prime, Tom St Denis -*/ - -int rand_prime(void *N, long len, prng_state *prng, int wprng) -{ - int err, res; - unsigned char *buf, bbs; - - LTC_ARGCHK(N != NULL); - - if (len < 0) { - /* Create BBS (Blum Blum Shub) style prime */ - bbs = 0x02; - len = -len; - } else { - bbs = 0x00; - } - - /* allow sizes between 2 and 512 bytes for a prime size */ - if (len < 2 || len > 512) { - return CRYPT_INVALID_PRIME_SIZE; - } - - /* valid PRNG? Better be! */ - if ((err = prng_is_valid(wprng)) != CRYPT_OK) { - return err; - } - - /* allocate buffer to work with */ - buf = XCALLOC(1, len); - if (buf == NULL) { - return CRYPT_MEM; - } - - do { - /* generate value */ - if (prng_descriptor[wprng].read(buf, len, prng) != (unsigned long)len) { - XFREE(buf); - return CRYPT_ERROR_READPRNG; - } - - /* munge bits */ - buf[0] |= 0x80 | 0x40; - buf[len-1] |= 0x01 | bbs; - - /* load value */ - if ((err = ltc_mp_read_unsigned_bin(N, buf, len)) != CRYPT_OK) { - XFREE(buf); - return err; - } - - /* test */ - if ((err = ltc_mp_prime_is_prime(N, LTC_MILLER_RABIN_REPS, &res)) != CRYPT_OK) { - XFREE(buf); - return err; - } - } while (res == LTC_MP_NO); - -#ifdef LTC_CLEAN_STACK - zeromem(buf, len); -#endif - - XFREE(buf); - return CRYPT_OK; -} - -#endif /* LTC_NO_MATH */ - diff --git a/src/math/tfm_desc.c b/src/math/tfm_desc.c deleted file mode 100644 index b951b1a4..00000000 --- a/src/math/tfm_desc.c +++ /dev/null @@ -1,916 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#define DESC_DEF_ONLY -#include "tomcrypt_private.h" - -#ifdef TFM_DESC - -#include - -#if !defined(TFM_VERSION_3) -# if 0 /* Enable if desirable */ -# warning "pre-constification TFM used (TFM_VERSION_3 undefined)" -# endif -# define TFM_UNCONST(type) (type) -#elif TFM_VERSION <= TFM_VERSION_3(0, 13, 89) -# if 0 /* Enable if desirable */ -# warning "pre-constification TFM used (older version detected)" -# endif -# define TFM_UNCONST(type) (type) -#else -# define TFM_UNCONST(type) -#endif - -static const struct { - int tfm_code, ltc_code; -} tfm_to_ltc_codes[] = { - { FP_OKAY , CRYPT_OK}, - { FP_MEM , CRYPT_MEM}, - { FP_VAL , CRYPT_INVALID_ARG}, -}; - -/** - Convert a tfm error to a LTC error (Possibly the most powerful function ever! Oh wait... no) - @param err The error to convert - @return The equivalent LTC error code or CRYPT_ERROR if none found -*/ -static int tfm_to_ltc_error(int err) -{ - int x; - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tfm_to_ltc_codes); x++) { - if (err == tfm_to_ltc_codes[x].tfm_code) { - return tfm_to_ltc_codes[x].ltc_code; - } - } - return CRYPT_ERROR; -} - -static int init(void **a) -{ - LTC_ARGCHK(a != NULL); - - *a = XCALLOC(1, sizeof(fp_int)); - if (*a == NULL) { - return CRYPT_MEM; - } - fp_init(*a); - return CRYPT_OK; -} - -static void deinit(void *a) -{ - LTC_ARGCHKVD(a != NULL); - XFREE(a); -} - -static int neg(const void *a, void *b) -{ - /* fp_neg() is a macro that accesses the internals of the b */ - fp_int *tmpb = b; - - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - fp_neg(a, tmpb); - return CRYPT_OK; -} - -static int copy(const void *a, void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - fp_copy(a, b); - return CRYPT_OK; -} - -static int init_copy(void **a, const void *b) -{ - if (init(a) != CRYPT_OK) { - return CRYPT_MEM; - } - return copy(b, *a); -} - -/* ---- trivial ---- */ -static int set_int(void *a, ltc_mp_digit b) -{ - LTC_ARGCHK(a != NULL); - fp_set(a, b); - return CRYPT_OK; -} - -static unsigned long get_int(const void *a) -{ - const fp_int *A; - LTC_ARGCHK(a != NULL); - A = a; - return A->used > 0 ? A->dp[0] : 0; -} - -static ltc_mp_digit get_digit(const void *a, int n) -{ - const fp_int *A; - LTC_ARGCHK(a != NULL); - A = a; - return (n >= A->used || n < 0) ? 0 : A->dp[n]; -} - -static int get_digit_count(const void *a) -{ - const fp_int *A; - LTC_ARGCHK(a != NULL); - A = a; - return A->used; -} - -static int compare(const void *a, const void *b) -{ - int ret; - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - ret = fp_cmp(TFM_UNCONST(void *)a, TFM_UNCONST(void *)b); - switch (ret) { - case FP_LT: return LTC_MP_LT; - case FP_EQ: return LTC_MP_EQ; - case FP_GT: return LTC_MP_GT; - } - return 0; -} - -static int compare_d(const void *a, ltc_mp_digit b) -{ - int ret; - LTC_ARGCHK(a != NULL); - ret = fp_cmp_d(TFM_UNCONST(void *)a, b); - switch (ret) { - case FP_LT: return LTC_MP_LT; - case FP_EQ: return LTC_MP_EQ; - case FP_GT: return LTC_MP_GT; - } - return 0; -} - -static int count_bits(const void *a) -{ - LTC_ARGCHK(a != NULL); - return fp_count_bits(TFM_UNCONST(void *)a); -} - -static int count_lsb_bits(const void *a) -{ - LTC_ARGCHK(a != NULL); - return fp_cnt_lsb(TFM_UNCONST(void *)a); -} - -static int twoexpt(void *a, int n) -{ - LTC_ARGCHK(a != NULL); - fp_2expt(a, n); - return CRYPT_OK; -} - -/* ---- conversions ---- */ - -/* read ascii string */ -static int read_radix(void *a, const char *b, int radix) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - return tfm_to_ltc_error(fp_read_radix(a, b, radix)); -} - -/* write one */ -static int write_radix(const void *a, char *b, int radix) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - return tfm_to_ltc_error(fp_toradix(TFM_UNCONST(void *)a, b, radix)); -} - -/* get size as unsigned char string */ -static unsigned long unsigned_size(const void *a) -{ - LTC_ARGCHK(a != NULL); - return fp_unsigned_bin_size(TFM_UNCONST(void *)a); -} - -/* store */ -static int unsigned_write(const void *a, unsigned char *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - fp_to_unsigned_bin(TFM_UNCONST(void *)a, b); - return CRYPT_OK; -} - -/* read */ -static int unsigned_read(void *a, const unsigned char *b, unsigned long len) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - fp_read_unsigned_bin(a, b, len); - return CRYPT_OK; -} - -/* add */ -static int add(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - fp_add(TFM_UNCONST(void *)a, TFM_UNCONST(void *)b, c); - return CRYPT_OK; -} - -static int addi(const void *a, ltc_mp_digit b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - fp_add_d(TFM_UNCONST(void *)a, b, c); - return CRYPT_OK; -} - -/* sub */ -static int sub(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - fp_sub(TFM_UNCONST(void *)a, TFM_UNCONST(void *)b, c); - return CRYPT_OK; -} - -static int subi(const void *a, ltc_mp_digit b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - fp_sub_d(TFM_UNCONST(void *)a, b, c); - return CRYPT_OK; -} - -/* mul */ -static int mul(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - fp_mul(TFM_UNCONST(void *)a, TFM_UNCONST(void *)b, c); - return CRYPT_OK; -} - -static int muli(const void *a, ltc_mp_digit b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - fp_mul_d(TFM_UNCONST(void *)a, b, c); - return CRYPT_OK; -} - -/* sqr */ -static int sqr(const void *a, void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - fp_sqr(TFM_UNCONST(void *)a, b); - return CRYPT_OK; -} - -/* sqrtmod_prime - NOT SUPPORTED */ - -/* div */ -static int divide(const void *a, const void *b, void *c, void *d) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - return tfm_to_ltc_error(fp_div(TFM_UNCONST(void *)a, TFM_UNCONST(void *)b, c, d)); -} - -static int div_2(const void *a, void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - fp_div_2(TFM_UNCONST(void *)a, b); - return CRYPT_OK; -} - -/* modi */ -static int modi(const void *a, ltc_mp_digit b, ltc_mp_digit *c) -{ - fp_digit tmp; - int err; - - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - - if ((err = tfm_to_ltc_error(fp_mod_d(TFM_UNCONST(void *)a, b, &tmp))) != CRYPT_OK) { - return err; - } - *c = tmp; - return CRYPT_OK; -} - -/* gcd */ -static int gcd(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - fp_gcd(TFM_UNCONST(void *)a, TFM_UNCONST(void *)b, c); - return CRYPT_OK; -} - -/* lcm */ -static int lcm(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - fp_lcm(TFM_UNCONST(void *)a, TFM_UNCONST(void *)b, c); - return CRYPT_OK; -} - -static int addmod(const void *a, const void *b, const void *c, void *d) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - LTC_ARGCHK(d != NULL); - return tfm_to_ltc_error(fp_addmod(TFM_UNCONST(void *)a,TFM_UNCONST(void *)b,TFM_UNCONST(void *)c,d)); -} - -static int submod(const void *a, const void *b, const void *c, void *d) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - LTC_ARGCHK(d != NULL); - return tfm_to_ltc_error(fp_submod(TFM_UNCONST(void *)a,TFM_UNCONST(void *)b,TFM_UNCONST(void *)c,d)); -} - -static int mulmod(const void *a, const void *b, const void *c, void *d) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - LTC_ARGCHK(d != NULL); - return tfm_to_ltc_error(fp_mulmod(TFM_UNCONST(void *)a,TFM_UNCONST(void *)b,TFM_UNCONST(void *)c,d)); -} - -static int sqrmod(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - return tfm_to_ltc_error(fp_sqrmod(TFM_UNCONST(void *)a,TFM_UNCONST(void *)b,c)); -} - -/* invmod */ -static int invmod(const void *a, const void *b, void *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - return tfm_to_ltc_error(fp_invmod(TFM_UNCONST(void *)a, TFM_UNCONST(void *)b, c)); -} - -/* setup */ -static int montgomery_setup(const void *a, void **b) -{ - int err; - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - *b = XCALLOC(1, sizeof(fp_digit)); - if (*b == NULL) { - return CRYPT_MEM; - } - if ((err = tfm_to_ltc_error(fp_montgomery_setup(TFM_UNCONST(void *)a, *b))) != CRYPT_OK) { - XFREE(*b); - } - return err; -} - -/* get normalization value */ -static int montgomery_normalization(void *a, const void *b) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - fp_montgomery_calc_normalization(a, TFM_UNCONST(void *)b); - return CRYPT_OK; -} - -/* reduce */ -static int montgomery_reduce(void *a, const void *b, void *c) -{ - fp_digit *tmpc = c; - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - fp_montgomery_reduce(a, TFM_UNCONST(void *)b, *tmpc); - return CRYPT_OK; -} - -/* clean up */ -static void montgomery_deinit(void *a) -{ - XFREE(a); -} - -static int exptmod(const void *a, const void *b, const void *c, void *d) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(c != NULL); - LTC_ARGCHK(d != NULL); - return tfm_to_ltc_error(fp_exptmod(TFM_UNCONST(void *)a,TFM_UNCONST(void *)b,TFM_UNCONST(void *)c,d)); -} - -static int isprime(const void *a, int b, int *c) -{ - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(c != NULL); - if (b == 0) { - b = LTC_MILLER_RABIN_REPS; - } /* if */ - *c = (fp_isprime_ex(TFM_UNCONST(void *)a, b) == FP_YES) ? LTC_MP_YES : LTC_MP_NO; - return CRYPT_OK; -} - -#if defined(LTC_MECC) && defined(LTC_MECC_ACCEL) - -static int tfm_ecc_projective_dbl_point(const ecc_point *P, ecc_point *R, const void *ma, const void *modulus, void *Mp) -{ - fp_int t1, t2; - fp_digit mp; - int err, inf; - - LTC_ARGCHK(P != NULL); - LTC_ARGCHK(R != NULL); - LTC_ARGCHK(modulus != NULL); - LTC_ARGCHK(Mp != NULL); - - mp = *((fp_digit*)Mp); - - fp_init(&t1); - fp_init(&t2); - - if (P != R) { - fp_copy(P->x, R->x); - fp_copy(P->y, R->y); - fp_copy(P->z, R->z); - } - - if ((err = ltc_ecc_is_point_at_infinity(P, modulus, &inf)) != CRYPT_OK) return err; - if (inf) { - /* if P is point at infinity >> Result = point at infinity */ - ltc_mp.set_int(R->x, 1); - ltc_mp.set_int(R->y, 1); - ltc_mp.set_int(R->z, 0); - return CRYPT_OK; - } - - /* Y == 0 or Z == 0 doubles to infinity. */ - if (fp_cmp_d(R->y, 0) == FP_EQ || fp_cmp_d(R->z, 0) == FP_EQ) { - ltc_mp.set_int(R->x, 1); - ltc_mp.set_int(R->y, 1); - ltc_mp.set_int(R->z, 0); - return CRYPT_OK; - } - - /* t1 = Z * Z */ - fp_sqr(R->z, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); - /* Z = Y * Z */ - fp_mul(R->z, R->y, R->z); - fp_montgomery_reduce(R->z, TFM_UNCONST(void *)modulus, mp); - /* Z = 2Z */ - fp_add(R->z, R->z, R->z); - if (fp_cmp(R->z, TFM_UNCONST(void *)modulus) != FP_LT) { - fp_sub(R->z, TFM_UNCONST(void *)modulus, R->z); - } - - if (ma == NULL) { /* special case for curves with a == -3 (10% faster than general case) */ - /* T2 = X - T1 */ - fp_sub(R->x, &t1, &t2); - if (fp_cmp_d(&t2, 0) == LTC_MP_LT) { - fp_add(&t2, TFM_UNCONST(void *)modulus, &t2); - } - /* T1 = X + T1 */ - fp_add(&t1, R->x, &t1); - if (fp_cmp(&t1, TFM_UNCONST(void *)modulus) != FP_LT) { - fp_sub(&t1, TFM_UNCONST(void *)modulus, &t1); - } - /* T2 = T1 * T2 */ - fp_mul(&t1, &t2, &t2); - fp_montgomery_reduce(&t2, TFM_UNCONST(void *)modulus, mp); - /* T1 = 2T2 */ - fp_add(&t2, &t2, &t1); - if (fp_cmp(&t1, TFM_UNCONST(void *)modulus) != FP_LT) { - fp_sub(&t1, TFM_UNCONST(void *)modulus, &t1); - } - /* T1 = T1 + T2 */ - fp_add(&t1, &t2, &t1); - if (fp_cmp(&t1, TFM_UNCONST(void *)modulus) != FP_LT) { - fp_sub(&t1, TFM_UNCONST(void *)modulus, &t1); - } - } - else { - /* T2 = T1 * T1 */ - fp_sqr(&t1, &t2); - fp_montgomery_reduce(&t2, TFM_UNCONST(void *)modulus, mp); - /* T1 = T2 * a */ - fp_mul(&t2, TFM_UNCONST(void *)ma, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); - /* T2 = X * X */ - fp_sqr(R->x, &t2); - fp_montgomery_reduce(&t2, TFM_UNCONST(void *)modulus, mp); - /* T1 = T1 + T2 */ - fp_add(&t1, &t2, &t1); - if (fp_cmp(&t1, TFM_UNCONST(void *)modulus) != FP_LT) { - fp_sub(&t1, TFM_UNCONST(void *)modulus, &t1); - } - /* T1 = T1 + T2 */ - fp_add(&t1, &t2, &t1); - if (fp_cmp(&t1, TFM_UNCONST(void *)modulus) != FP_LT) { - fp_sub(&t1, TFM_UNCONST(void *)modulus, &t1); - } - /* T1 = T1 + T2 */ - fp_add(&t1, &t2, &t1); - if (fp_cmp(&t1, TFM_UNCONST(void *)modulus) != FP_LT) { - fp_sub(&t1, TFM_UNCONST(void *)modulus, &t1); - } - } - - /* Y = 2Y */ - fp_add(R->y, R->y, R->y); - if (fp_cmp(R->y, TFM_UNCONST(void *)modulus) != FP_LT) { - fp_sub(R->y, TFM_UNCONST(void *)modulus, R->y); - } - /* Y = Y * Y */ - fp_sqr(R->y, R->y); - fp_montgomery_reduce(R->y, TFM_UNCONST(void *)modulus, mp); - /* T2 = Y * Y */ - fp_sqr(R->y, &t2); - fp_montgomery_reduce(&t2, TFM_UNCONST(void *)modulus, mp); - /* T2 = T2/2 */ - if (fp_isodd(&t2)) { - fp_add(&t2, TFM_UNCONST(void *)modulus, &t2); - } - fp_div_2(&t2, &t2); - /* Y = Y * X */ - fp_mul(R->y, R->x, R->y); - fp_montgomery_reduce(R->y, TFM_UNCONST(void *)modulus, mp); - - /* X = T1 * T1 */ - fp_sqr(&t1, R->x); - fp_montgomery_reduce(R->x, TFM_UNCONST(void *)modulus, mp); - /* X = X - Y */ - fp_sub(R->x, R->y, R->x); - if (fp_cmp_d(R->x, 0) == FP_LT) { - fp_add(R->x, TFM_UNCONST(void *)modulus, R->x); - } - /* X = X - Y */ - fp_sub(R->x, R->y, R->x); - if (fp_cmp_d(R->x, 0) == FP_LT) { - fp_add(R->x, TFM_UNCONST(void *)modulus, R->x); - } - - /* Y = Y - X */ - fp_sub(R->y, R->x, R->y); - if (fp_cmp_d(R->y, 0) == FP_LT) { - fp_add(R->y, TFM_UNCONST(void *)modulus, R->y); - } - /* Y = Y * T1 */ - fp_mul(R->y, &t1, R->y); - fp_montgomery_reduce(R->y, TFM_UNCONST(void *)modulus, mp); - /* Y = Y - T2 */ - fp_sub(R->y, &t2, R->y); - if (fp_cmp_d(R->y, 0) == FP_LT) { - fp_add(R->y, TFM_UNCONST(void *)modulus, R->y); - } - - return CRYPT_OK; -} - -/** - Add two ECC points - @param P The point to add - @param Q The point to add - @param R [out] The destination of the double - @param modulus The modulus of the field the ECC curve is in - @param Mp The "b" value from montgomery_setup() - @return CRYPT_OK on success -*/ -static int tfm_ecc_projective_add_point(const ecc_point *P, const ecc_point *Q, ecc_point *R, const void *ma, const void *modulus, void *Mp) -{ - fp_int t1, t2, x, y, z; - fp_digit mp; - int err, inf; - - LTC_ARGCHK(P != NULL); - LTC_ARGCHK(Q != NULL); - LTC_ARGCHK(R != NULL); - LTC_ARGCHK(modulus != NULL); - LTC_ARGCHK(Mp != NULL); - - mp = *((fp_digit*)Mp); - - fp_init(&t1); - fp_init(&t2); - fp_init(&x); - fp_init(&y); - fp_init(&z); - - /* treat internal Z == 0 states as infinity */ - if (P->z != NULL && fp_cmp_d(P->z, 0) == FP_EQ) { - if (Q->z != NULL && fp_cmp_d(Q->z, 0) == FP_EQ) { - /* inf + inf = inf */ - ltc_mp.set_int(R->x, 1); - ltc_mp.set_int(R->y, 1); - ltc_mp.set_int(R->z, 0); - } else { - /* inf + Q = Q */ - ltc_mp.copy(Q->x, R->x); - ltc_mp.copy(Q->y, R->y); - ltc_mp.copy(Q->z, R->z); - } - return CRYPT_OK; - } - if (Q->z != NULL && fp_cmp_d(Q->z, 0) == FP_EQ) { - /* P + inf = P */ - ltc_mp.copy(P->x, R->x); - ltc_mp.copy(P->y, R->y); - ltc_mp.copy(P->z, R->z); - return CRYPT_OK; - } - - if ((err = ltc_ecc_is_point_at_infinity(P, modulus, &inf)) != CRYPT_OK) return err; - if (inf) { - /* P is point at infinity >> Result = Q */ - ltc_mp.copy(Q->x, R->x); - ltc_mp.copy(Q->y, R->y); - ltc_mp.copy(Q->z, R->z); - return CRYPT_OK; - } - - if ((err = ltc_ecc_is_point_at_infinity(Q, modulus, &inf)) != CRYPT_OK) return err; - if (inf) { - /* Q is point at infinity >> Result = P */ - ltc_mp.copy(P->x, R->x); - ltc_mp.copy(P->y, R->y); - ltc_mp.copy(P->z, R->z); - return CRYPT_OK; - } - - /* should we dbl instead? */ - fp_sub(TFM_UNCONST(void *)modulus, Q->y, &t1); - if ( (fp_cmp(P->x, Q->x) == FP_EQ) && - (Q->z != NULL && fp_cmp(P->z, Q->z) == FP_EQ) && - (fp_cmp(P->y, Q->y) == FP_EQ || fp_cmp(P->y, &t1) == FP_EQ)) { -dbl_point: - return tfm_ecc_projective_dbl_point(P, R, ma, modulus, Mp); - } - - fp_copy(P->x, &x); - fp_copy(P->y, &y); - fp_copy(P->z, &z); - - /* if Z is one then these are no-operations */ - if (Q->z != NULL) { - /* T1 = Z' * Z' */ - fp_sqr(Q->z, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); - /* X = X * T1 */ - fp_mul(&t1, &x, &x); - fp_montgomery_reduce(&x, TFM_UNCONST(void *)modulus, mp); - /* T1 = Z' * T1 */ - fp_mul(Q->z, &t1, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); - /* Y = Y * T1 */ - fp_mul(&t1, &y, &y); - fp_montgomery_reduce(&y, TFM_UNCONST(void *)modulus, mp); - } - - /* T1 = Z*Z */ - fp_sqr(&z, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); - /* T2 = X' * T1 */ - fp_mul(Q->x, &t1, &t2); - fp_montgomery_reduce(&t2, TFM_UNCONST(void *)modulus, mp); - /* T1 = Z * T1 */ - fp_mul(&z, &t1, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); - /* T1 = Y' * T1 */ - fp_mul(Q->y, &t1, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); - - /* Same-affine dispatch (mirror of ltc_ecc_projective_add_point): A==B means P,Q share affine x; dispatch to dbl or O before the formulas */ - if (fp_cmp(&x, &t2) == FP_EQ) { - if (fp_cmp(&y, &t1) == FP_EQ) goto dbl_point; - ltc_mp.set_int(R->x, 1); - ltc_mp.set_int(R->y, 1); - ltc_mp.set_int(R->z, 0); - return CRYPT_OK; - } - - /* Y = Y - T1 */ - fp_sub(&y, &t1, &y); - if (fp_cmp_d(&y, 0) == FP_LT) { - fp_add(&y, TFM_UNCONST(void *)modulus, &y); - } - /* T1 = 2T1 */ - fp_add(&t1, &t1, &t1); - if (fp_cmp(&t1, TFM_UNCONST(void *)modulus) != FP_LT) { - fp_sub(&t1, TFM_UNCONST(void *)modulus, &t1); - } - /* T1 = Y + T1 */ - fp_add(&t1, &y, &t1); - if (fp_cmp(&t1, TFM_UNCONST(void *)modulus) != FP_LT) { - fp_sub(&t1, TFM_UNCONST(void *)modulus, &t1); - } - /* X = X - T2 */ - fp_sub(&x, &t2, &x); - if (fp_cmp_d(&x, 0) == FP_LT) { - fp_add(&x, TFM_UNCONST(void *)modulus, &x); - } - /* T2 = 2T2 */ - fp_add(&t2, &t2, &t2); - if (fp_cmp(&t2, TFM_UNCONST(void *)modulus) != FP_LT) { - fp_sub(&t2, TFM_UNCONST(void *)modulus, &t2); - } - /* T2 = X + T2 */ - fp_add(&t2, &x, &t2); - if (fp_cmp(&t2, TFM_UNCONST(void *)modulus) != FP_LT) { - fp_sub(&t2, TFM_UNCONST(void *)modulus, &t2); - } - - /* if Z' != 1 */ - if (Q->z != NULL) { - /* Z = Z * Z' */ - fp_mul(&z, Q->z, &z); - fp_montgomery_reduce(&z, TFM_UNCONST(void *)modulus, mp); - } - - /* Z = Z * X */ - fp_mul(&z, &x, &z); - fp_montgomery_reduce(&z, TFM_UNCONST(void *)modulus, mp); - - /* T1 = T1 * X */ - fp_mul(&t1, &x, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); - /* X = X * X */ - fp_sqr(&x, &x); - fp_montgomery_reduce(&x, TFM_UNCONST(void *)modulus, mp); - /* T2 = T2 * x */ - fp_mul(&t2, &x, &t2); - fp_montgomery_reduce(&t2, TFM_UNCONST(void *)modulus, mp); - /* T1 = T1 * X */ - fp_mul(&t1, &x, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); - - /* X = Y*Y */ - fp_sqr(&y, &x); - fp_montgomery_reduce(&x, TFM_UNCONST(void *)modulus, mp); - /* X = X - T2 */ - fp_sub(&x, &t2, &x); - if (fp_cmp_d(&x, 0) == FP_LT) { - fp_add(&x, TFM_UNCONST(void *)modulus, &x); - } - - /* T2 = T2 - X */ - fp_sub(&t2, &x, &t2); - if (fp_cmp_d(&t2, 0) == FP_LT) { - fp_add(&t2, TFM_UNCONST(void *)modulus, &t2); - } - /* T2 = T2 - X */ - fp_sub(&t2, &x, &t2); - if (fp_cmp_d(&t2, 0) == FP_LT) { - fp_add(&t2, TFM_UNCONST(void *)modulus, &t2); - } - /* T2 = T2 * Y */ - fp_mul(&t2, &y, &t2); - fp_montgomery_reduce(&t2, TFM_UNCONST(void *)modulus, mp); - /* Y = T2 - T1 */ - fp_sub(&t2, &t1, &y); - if (fp_cmp_d(&y, 0) == FP_LT) { - fp_add(&y, TFM_UNCONST(void *)modulus, &y); - } - /* Y = Y/2 */ - if (fp_isodd(&y)) { - fp_add(&y, TFM_UNCONST(void *)modulus, &y); - } - fp_div_2(&y, &y); - - fp_copy(&x, R->x); - fp_copy(&y, R->y); - fp_copy(&z, R->z); - - return CRYPT_OK; -} - - -#endif - -static int set_rand(void *a, int size) -{ - LTC_ARGCHK(a != NULL); - fp_rand(a, size); - return CRYPT_OK; -} - -const ltc_math_descriptor tfm_desc = { - - "TomsFastMath", - (int)DIGIT_BIT, - - &init, - &init_copy, - &deinit, - - &neg, - ©, - - &set_int, - &get_int, - &get_digit, - &get_digit_count, - &compare, - &compare_d, - &count_bits, - &count_lsb_bits, - &twoexpt, - - &read_radix, - &write_radix, - &unsigned_size, - &unsigned_write, - &unsigned_read, - - &add, - &addi, - &sub, - &subi, - &mul, - &muli, - &sqr, - NULL, /* TODO: &sqrtmod_prime */ - ÷, - &div_2, - &modi, - &gcd, - &lcm, - - &mulmod, - &sqrmod, - &invmod, - - &montgomery_setup, - &montgomery_normalization, - &montgomery_reduce, - &montgomery_deinit, - - &exptmod, - &isprime, - -#ifdef LTC_MECC -#ifdef LTC_MECC_FP - <c_ecc_fp_mulmod, -#else - <c_ecc_mulmod, -#endif /* LTC_MECC_FP */ -#ifdef LTC_MECC_ACCEL - &tfm_ecc_projective_add_point, - &tfm_ecc_projective_dbl_point, -#else - <c_ecc_projective_add_point, - <c_ecc_projective_dbl_point, -#endif /* LTC_MECC_ACCEL */ - <c_ecc_map, -#ifdef LTC_ECC_SHAMIR -#ifdef LTC_MECC_FP - <c_ecc_fp_mul2add, -#else - <c_ecc_mul2add, -#endif /* LTC_MECC_FP */ -#else - NULL, -#endif /* LTC_ECC_SHAMIR */ -#else - NULL, NULL, NULL, NULL, NULL, -#endif /* LTC_MECC */ - -#ifdef LTC_MRSA - &rsa_make_key, - &rsa_exptmod, -#else - NULL, NULL, -#endif - &addmod, - &submod, - - set_rand, - -}; - - -#endif diff --git a/src/misc/adler32.c b/src/misc/adler32.c deleted file mode 100644 index 265977d5..00000000 --- a/src/misc/adler32.c +++ /dev/null @@ -1,123 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file adler32.c - Adler-32 checksum algorithm - Written and placed in the public domain by Wei Dai - Adapted for libtomcrypt by Steffen Jaeckel -*/ -#ifdef LTC_ADLER32 - -static const unsigned long s_adler32_base = 65521; - -void adler32_init(adler32_state *ctx) -{ - LTC_ARGCHKVD(ctx != NULL); - ctx->s[0] = 1; - ctx->s[1] = 0; -} - -void adler32_update(adler32_state *ctx, const unsigned char *input, unsigned long length) -{ - unsigned long s1, s2; - - LTC_ARGCHKVD(ctx != NULL); - LTC_ARGCHKVD(input != NULL); - s1 = ctx->s[0]; - s2 = ctx->s[1]; - - if (length % 8 != 0) { - do { - s1 += *input++; - s2 += s1; - length--; - } while (length % 8 != 0); - - if (s1 >= s_adler32_base) { - s1 -= s_adler32_base; - } - s2 %= s_adler32_base; - } - - while (length > 0) { - s1 += input[0]; - s2 += s1; - s1 += input[1]; - s2 += s1; - s1 += input[2]; - s2 += s1; - s1 += input[3]; - s2 += s1; - s1 += input[4]; - s2 += s1; - s1 += input[5]; - s2 += s1; - s1 += input[6]; - s2 += s1; - s1 += input[7]; - s2 += s1; - - length -= 8; - input += 8; - - if (s1 >= s_adler32_base) { - s1 -= s_adler32_base; - } - s2 %= s_adler32_base; - } - - LTC_ARGCHKVD(s1 < s_adler32_base); - LTC_ARGCHKVD(s2 < s_adler32_base); - - ctx->s[0] = (unsigned short)s1; - ctx->s[1] = (unsigned short)s2; -} - -void adler32_finish(const adler32_state *ctx, void *hash, unsigned long size) -{ - unsigned char* h; - - LTC_ARGCHKVD(ctx != NULL); - LTC_ARGCHKVD(hash != NULL); - - h = hash; - - switch (size) { - default: - h[3] = ctx->s[0] & 0x0ff; - LTC_FALLTHROUGH; /* FALLTHROUGH */ - case 3: - h[2] = (ctx->s[0] >> 8) & 0x0ff; - LTC_FALLTHROUGH; /* FALLTHROUGH */ - case 2: - h[1] = ctx->s[1] & 0x0ff; - LTC_FALLTHROUGH; /* FALLTHROUGH */ - case 1: - h[0] = (ctx->s[1] >> 8) & 0x0ff; - LTC_FALLTHROUGH; /* FALLTHROUGH */ - case 0: - ; - } -} - -int adler32_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - const void* in = "libtomcrypt"; - const unsigned char adler32[] = { 0x1b, 0xe8, 0x04, 0xba }; - unsigned char out[4]; - adler32_state ctx; - adler32_init(&ctx); - adler32_update(&ctx, in, XSTRLEN(in)); - adler32_finish(&ctx, out, 4); - if (ltc_compare_testvector(adler32, 4, out, 4, "adler32", 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - return CRYPT_OK; -#endif -} -#endif diff --git a/src/misc/algname_match.c b/src/misc/algname_match.c deleted file mode 100644 index d46fb8b8..00000000 --- a/src/misc/algname_match.c +++ /dev/null @@ -1,40 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file algname_match.c - Shared relaxed name-matching helper for algorithm lookup tables. -*/ - -/** - Compare two algorithm-name strings. - - Matching is case-insensitive (ASCII) and ignores ' ', '-' and '_' on both sides - e.g. "SECP256R1", "secp_256_r1", "secp-256-r1" and "secp 256 r1" all match - @param left First NUL-terminated string - @param right Second NUL-terminated string - @return 1 if the strings match under the relaxed rules, 0 otherwise -*/ -int ltc_algname_match(const char *left, const char *right) -{ - char lc_r, lc_l; - - if (left == NULL || right == NULL) return 0; - - while ((*left != '\0') && (*right != '\0')) { - while ((*left == ' ') || (*left == '-') || (*left == '_')) left++; - while ((*right == ' ') || (*right == '-') || (*right == '_')) right++; - if (*left == '\0' || *right == '\0') break; - lc_r = *right; - lc_l = *left; - if ((lc_r >= 'A') && (lc_r <= 'Z')) lc_r += 32; - if ((lc_l >= 'A') && (lc_l <= 'Z')) lc_l += 32; - if (lc_l != lc_r) return 0; - left++; - right++; - } - - if ((*left == '\0') && (*right == '\0')) return 1; - return 0; -} diff --git a/src/misc/argon2/argon2.c b/src/misc/argon2/argon2.c deleted file mode 100644 index d1d10eb2..00000000 --- a/src/misc/argon2/argon2.c +++ /dev/null @@ -1,567 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file argon2.c - Argon2 password hashing function (RFC 9106) -*/ -#ifdef LTC_ARGON2 - -#define ARGON2_BLOCK_SIZE 1024 -#define ARGON2_QWORDS_IN_BLOCK 128 -#define ARGON2_ADDRESSES_IN_BLOCK 128 -#define ARGON2_PREHASH_DIGEST_LEN 64 -#define ARGON2_PREHASH_SEED_LEN 72 -#define ARGON2_SYNC_POINTS 4 -#define ARGON2_MAX_LANES 0xFFFFFF /* RFC 9106: parallelism p is at most 2^24-1 */ -#define ARGON2_VERSION 0x13 -#define ARGON2_MIN_OUTLEN 4 -#define ARGON2_BLAKE2B_OUTBYTES 64 - -/* 1024-byte memory block */ -typedef struct argon2_block { - ulong64 v[ARGON2_QWORDS_IN_BLOCK]; -} argon2_block; - -/* instance state */ -typedef struct argon2_instance { - argon2_block *memory; - ulong32 passes; - ulong32 memory_blocks; - ulong32 segment_length; - ulong32 lane_length; - ulong32 lanes; - int type; /* 0=d 1=i 2=id */ -} argon2_instance; - -/* position within the memory matrix */ -typedef struct argon2_position { - ulong32 pass; - ulong32 lane; - unsigned char slice; - ulong32 index; -} argon2_position; - -static void s_block_init(argon2_block *b, unsigned char v) -{ - XMEMSET(b->v, v, sizeof(b->v)); -} - -static void s_block_copy(argon2_block *dst, const argon2_block *src) -{ - XMEMCPY(dst->v, src->v, sizeof(dst->v)); -} - -static void s_block_xor(argon2_block *dst, const argon2_block *src) -{ - unsigned i; - for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { - dst->v[i] ^= src->v[i]; - } -} - -static void s_block_load(argon2_block *dst, const unsigned char *input) -{ - unsigned i; - for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { - LOAD64L(dst->v[i], input + i * 8); - } -} - -static void s_block_store(unsigned char *output, const argon2_block *src) -{ - unsigned i; - for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { - STORE64L(src->v[i], output + i * 8); - } -} - -/* Variable-length hash H' (RFC 9106 Section 3.2) */ -static int s_blake2b_hash(unsigned char *out, unsigned long outlen, const unsigned char *in, unsigned long inlen) -{ - hash_state md; - int err; - - if ((err = blake2b_init(&md, outlen, NULL, 0)) != CRYPT_OK) return err; - if ((err = blake2b_process(&md, in, inlen)) != CRYPT_OK) return err; - if ((err = blake2b_done(&md, out)) != CRYPT_OK) return err; - return CRYPT_OK; -} - -static int s_blake2b_long(unsigned char *out, unsigned long outlen, const unsigned char *in, unsigned long inlen) -{ - unsigned char outlen_le[4]; - int err; - - STORE32L((ulong32)outlen, outlen_le); - - if (outlen <= ARGON2_BLAKE2B_OUTBYTES) { - /* single hash with truncated output */ - hash_state md; - if ((err = blake2b_init(&md, outlen, NULL, 0)) != CRYPT_OK) return err; - if ((err = blake2b_process(&md, outlen_le, 4)) != CRYPT_OK) return err; - if ((err = blake2b_process(&md, in, inlen)) != CRYPT_OK) return err; - if ((err = blake2b_done(&md, out)) != CRYPT_OK) return err; - } - else { - /* chained hashing for longer outputs */ - ulong32 toproduce; - unsigned char out_buffer[ARGON2_BLAKE2B_OUTBYTES]; - unsigned char in_buffer[ARGON2_BLAKE2B_OUTBYTES]; - hash_state md; - - if ((err = blake2b_init(&md, ARGON2_BLAKE2B_OUTBYTES, NULL, 0)) != CRYPT_OK) return err; - if ((err = blake2b_process(&md, outlen_le, 4)) != CRYPT_OK) return err; - if ((err = blake2b_process(&md, in, inlen)) != CRYPT_OK) return err; - if ((err = blake2b_done(&md, out_buffer)) != CRYPT_OK) return err; - - XMEMCPY(out, out_buffer, ARGON2_BLAKE2B_OUTBYTES / 2); - out += ARGON2_BLAKE2B_OUTBYTES / 2; - toproduce = (ulong32)outlen - ARGON2_BLAKE2B_OUTBYTES / 2; - - while (toproduce > ARGON2_BLAKE2B_OUTBYTES) { - XMEMCPY(in_buffer, out_buffer, ARGON2_BLAKE2B_OUTBYTES); - if ((err = s_blake2b_hash(out_buffer, ARGON2_BLAKE2B_OUTBYTES, in_buffer, ARGON2_BLAKE2B_OUTBYTES)) != CRYPT_OK) return err; - XMEMCPY(out, out_buffer, ARGON2_BLAKE2B_OUTBYTES / 2); - out += ARGON2_BLAKE2B_OUTBYTES / 2; - toproduce -= ARGON2_BLAKE2B_OUTBYTES / 2; - } - - XMEMCPY(in_buffer, out_buffer, ARGON2_BLAKE2B_OUTBYTES); - if ((err = s_blake2b_hash(out_buffer, toproduce, in_buffer, ARGON2_BLAKE2B_OUTBYTES)) != CRYPT_OK) return err; - XMEMCPY(out, out_buffer, toproduce); - } - return CRYPT_OK; -} - -/* BlaMka compression G (RFC 9106 Section 3.4 / 3.5) */ -static LTC_INLINE ulong64 s_fBlaMka(ulong64 x, ulong64 y) -{ - ulong64 m = CONST64(0xFFFFFFFF); - ulong64 xy = (x & m) * (y & m); - return x + y + 2 * xy; -} - -#define ARGON2_GB(a, b, c, d) \ - do { \ - a = s_fBlaMka(a, b); \ - d = ROR64(d ^ a, 32); \ - c = s_fBlaMka(c, d); \ - b = ROR64(b ^ c, 24); \ - a = s_fBlaMka(a, b); \ - d = ROR64(d ^ a, 16); \ - c = s_fBlaMka(c, d); \ - b = ROR64(b ^ c, 63); \ - } while (0) - -#define ARGON2_ROUND(v0,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15) \ - do { \ - ARGON2_GB(v0, v4, v8, v12); \ - ARGON2_GB(v1, v5, v9, v13); \ - ARGON2_GB(v2, v6, v10, v14); \ - ARGON2_GB(v3, v7, v11, v15); \ - ARGON2_GB(v0, v5, v10, v15); \ - ARGON2_GB(v1, v6, v11, v12); \ - ARGON2_GB(v2, v7, v8, v13); \ - ARGON2_GB(v3, v4, v9, v14); \ - } while (0) - -/* Fill a new block from prev_block and ref_block. If with_xor, XOR result with existing next_block content. */ -static void s_fill_block(const argon2_block *prev_block, const argon2_block *ref_block, argon2_block *next_block, int with_xor) -{ - argon2_block blockR, block_tmp; - unsigned i; - - s_block_copy(&blockR, ref_block); - s_block_xor(&blockR, prev_block); - s_block_copy(&block_tmp, &blockR); - - if (with_xor) { - s_block_xor(&block_tmp, next_block); - } - - /* Apply P on columns: (0..15), (16..31), ..., (112..127) */ - for (i = 0; i < 8; ++i) { - ARGON2_ROUND( - blockR.v[16*i], blockR.v[16*i+1], blockR.v[16*i+2], blockR.v[16*i+3], - blockR.v[16*i+4], blockR.v[16*i+5], blockR.v[16*i+6], blockR.v[16*i+7], - blockR.v[16*i+8], blockR.v[16*i+9], blockR.v[16*i+10], blockR.v[16*i+11], - blockR.v[16*i+12], blockR.v[16*i+13], blockR.v[16*i+14], blockR.v[16*i+15]); - } - - /* Apply P on rows: (0,1,16,17,32,33,...,112,113), etc. */ - for (i = 0; i < 8; ++i) { - ARGON2_ROUND( - blockR.v[2*i], blockR.v[2*i+1], blockR.v[2*i+16], blockR.v[2*i+17], - blockR.v[2*i+32], blockR.v[2*i+33], blockR.v[2*i+48], blockR.v[2*i+49], - blockR.v[2*i+64], blockR.v[2*i+65], blockR.v[2*i+80], blockR.v[2*i+81], - blockR.v[2*i+96], blockR.v[2*i+97], blockR.v[2*i+112],blockR.v[2*i+113]); - } - - s_block_copy(next_block, &block_tmp); - s_block_xor(next_block, &blockR); -} - -/* Generate next pseudo-random addresses for data-independent indexing */ -static void s_next_addresses(argon2_block *address_block, argon2_block *input_block, const argon2_block *zero_block) -{ - input_block->v[6]++; - s_fill_block(zero_block, input_block, address_block, 0); - s_fill_block(zero_block, address_block, address_block, 0); -} - -/* Index computation (RFC 9106 Section 3.3) */ -static ulong32 s_index_alpha(const argon2_instance *instance, const argon2_position *position, ulong32 pseudo_rand, int same_lane) -{ - ulong32 reference_area_size; - ulong64 relative_position; - ulong32 start_position, absolute_position; - - if (position->pass == 0) { - if (position->slice == 0) { - reference_area_size = position->index - 1; - } - else { - if (same_lane) { - reference_area_size = position->slice * instance->segment_length + position->index - 1; - } - else { - reference_area_size = position->slice * instance->segment_length + ((position->index == 0) ? ((ulong32)-1) : 0); - } - } - } - else { - if (same_lane) { - reference_area_size = instance->lane_length - instance->segment_length + position->index - 1; - } - else { - reference_area_size = instance->lane_length - instance->segment_length + ((position->index == 0) ? ((ulong32)-1) : 0); - } - } - - /* Map pseudo_rand to 0..reference_area_size-1 */ - relative_position = (ulong64)pseudo_rand; - relative_position = relative_position * relative_position >> 32; - relative_position = reference_area_size - 1 - ((ulong64)reference_area_size * relative_position >> 32); - - start_position = 0; - if (position->pass != 0) { - start_position = (position->slice == ARGON2_SYNC_POINTS - 1) ? 0 : (position->slice + 1) * instance->segment_length; - } - absolute_position = (start_position + (ulong32)relative_position) % instance->lane_length; - return absolute_position; -} - -/* Fill one segment (lane x slice intersection) */ -static void s_fill_segment(const argon2_instance *instance, argon2_position position) -{ - argon2_block *ref_block, *curr_block; - argon2_block address_block, input_block, zero_block; - ulong64 pseudo_rand; - ulong32 ref_index, prev_offset, curr_offset; - ulong32 starting_index, i; - ulong64 ref_lane; - int data_independent; - - data_independent = (instance->type == ARGON2_I) || (instance->type == ARGON2_ID && position.pass == 0 && position.slice < ARGON2_SYNC_POINTS / 2); - - if (data_independent) { - s_block_init(&zero_block, 0); - s_block_init(&input_block, 0); - input_block.v[0] = position.pass; - input_block.v[1] = position.lane; - input_block.v[2] = position.slice; - input_block.v[3] = instance->memory_blocks; - input_block.v[4] = instance->passes; - input_block.v[5] = instance->type; - } - - starting_index = 0; - if (position.pass == 0 && position.slice == 0) { - starting_index = 2; - if (data_independent) { - s_next_addresses(&address_block, &input_block, &zero_block); - } - } - - curr_offset = position.lane * instance->lane_length + position.slice * instance->segment_length + starting_index; - - if (curr_offset % instance->lane_length == 0) { - prev_offset = curr_offset + instance->lane_length - 1; - } - else { - prev_offset = curr_offset - 1; - } - - for (i = starting_index; i < instance->segment_length; ++i, ++curr_offset, ++prev_offset) { - if (curr_offset % instance->lane_length == 1) { - prev_offset = curr_offset - 1; - } - - /* Get pseudo-random value */ - if (data_independent) { - if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) { - s_next_addresses(&address_block, &input_block, &zero_block); - } - pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK]; - } - else { - pseudo_rand = instance->memory[prev_offset].v[0]; - } - - ref_lane = (pseudo_rand >> 32) % instance->lanes; - if (position.pass == 0 && position.slice == 0) { - ref_lane = position.lane; - } - - position.index = i; - ref_index = s_index_alpha(instance, &position, (ulong32)(pseudo_rand & CONST64(0xFFFFFFFF)), ref_lane == position.lane); - ref_block = instance->memory + instance->lane_length * (ulong32)ref_lane + ref_index; - curr_block = instance->memory + curr_offset; - - if (position.pass == 0) { - s_fill_block(instance->memory + prev_offset, ref_block, curr_block, 0); - } - else { - s_fill_block(instance->memory + prev_offset, ref_block, curr_block, 1); - } - } -} - -/* Initial hash H_0 (RFC 9106 Section 3.1 step 1) */ -static int s_initial_hash(unsigned char *blockhash, - const unsigned char *pwd, unsigned long pwdlen, - const unsigned char *salt, unsigned long saltlen, - const unsigned char *secret, unsigned long secretlen, - const unsigned char *ad, unsigned long adlen, - ulong32 t_cost, ulong32 m_cost, ulong32 parallelism, - ulong32 outlen, int type) -{ - hash_state md; - unsigned char value[4]; - int err; - - if ((err = blake2b_init(&md, ARGON2_PREHASH_DIGEST_LEN, NULL, 0)) != CRYPT_OK) return err; - - STORE32L(parallelism, value); - if ((err = blake2b_process(&md, value, 4)) != CRYPT_OK) return err; - - STORE32L(outlen, value); - if ((err = blake2b_process(&md, value, 4)) != CRYPT_OK) return err; - - STORE32L(m_cost, value); - if ((err = blake2b_process(&md, value, 4)) != CRYPT_OK) return err; - - STORE32L(t_cost, value); - if ((err = blake2b_process(&md, value, 4)) != CRYPT_OK) return err; - - STORE32L((ulong32)ARGON2_VERSION, value); - if ((err = blake2b_process(&md, value, 4)) != CRYPT_OK) return err; - - STORE32L((ulong32)type, value); - if ((err = blake2b_process(&md, value, 4)) != CRYPT_OK) return err; - - STORE32L((ulong32)pwdlen, value); - if ((err = blake2b_process(&md, value, 4)) != CRYPT_OK) return err; - if (pwdlen > 0) { - if ((err = blake2b_process(&md, pwd, pwdlen)) != CRYPT_OK) return err; - } - - STORE32L((ulong32)saltlen, value); - if ((err = blake2b_process(&md, value, 4)) != CRYPT_OK) return err; - if (saltlen > 0) { - if ((err = blake2b_process(&md, salt, saltlen)) != CRYPT_OK) return err; - } - - STORE32L((ulong32)secretlen, value); - if ((err = blake2b_process(&md, value, 4)) != CRYPT_OK) return err; - if (secretlen > 0 && secret != NULL) { - if ((err = blake2b_process(&md, secret, secretlen)) != CRYPT_OK) return err; - } - - STORE32L((ulong32)adlen, value); - if ((err = blake2b_process(&md, value, 4)) != CRYPT_OK) return err; - if (adlen > 0 && ad != NULL) { - if ((err = blake2b_process(&md, ad, adlen)) != CRYPT_OK) return err; - } - - if ((err = blake2b_done(&md, blockhash)) != CRYPT_OK) return err; - return CRYPT_OK; -} - -/* Generate first two blocks in each lane */ - -static int s_fill_first_blocks(unsigned char *blockhash, const argon2_instance *instance) -{ - ulong32 l; - unsigned char blockhash_bytes[ARGON2_BLOCK_SIZE]; - int err; - - for (l = 0; l < instance->lanes; ++l) { - /* B[i][0] = H'(H_0 || LE32(0) || LE32(i)) */ - STORE32L(0, blockhash + ARGON2_PREHASH_DIGEST_LEN); - STORE32L(l, blockhash + ARGON2_PREHASH_DIGEST_LEN + 4); - if ((err = s_blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash, ARGON2_PREHASH_SEED_LEN)) != CRYPT_OK) return err; - s_block_load(&instance->memory[l * instance->lane_length + 0], blockhash_bytes); - - /* B[i][1] = H'(H_0 || LE32(1) || LE32(i)) */ - STORE32L(1, blockhash + ARGON2_PREHASH_DIGEST_LEN); - if ((err = s_blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash, ARGON2_PREHASH_SEED_LEN)) != CRYPT_OK) return err; - s_block_load(&instance->memory[l * instance->lane_length + 1], blockhash_bytes); - } - - zeromem(blockhash_bytes, ARGON2_BLOCK_SIZE); - return CRYPT_OK; -} - -/* Finalize: XOR last blocks, produce tag */ -static int s_finalize(unsigned char *out, unsigned long outlen, - const argon2_instance *instance) -{ - argon2_block blockhash; - unsigned char blockhash_bytes[ARGON2_BLOCK_SIZE]; - ulong32 l; - int err; - - s_block_copy(&blockhash, instance->memory + instance->lane_length - 1); - - for (l = 1; l < instance->lanes; ++l) { - ulong32 last = l * instance->lane_length + (instance->lane_length - 1); - s_block_xor(&blockhash, instance->memory + last); - } - - s_block_store(blockhash_bytes, &blockhash); - err = s_blake2b_long(out, outlen, blockhash_bytes, ARGON2_BLOCK_SIZE); - - zeromem(blockhash.v, ARGON2_BLOCK_SIZE); - zeromem(blockhash_bytes, ARGON2_BLOCK_SIZE); - return err; -} - -/* Fill the entire memory */ -static void s_fill_memory(argon2_instance *instance) -{ - ulong32 r, s, l; - - for (r = 0; r < instance->passes; ++r) { - for (s = 0; s < ARGON2_SYNC_POINTS; ++s) { - for (l = 0; l < instance->lanes; ++l) { - argon2_position position; - position.pass = r; - position.lane = l; - position.slice = (unsigned char)s; - position.index = 0; - s_fill_segment(instance, position); - } - } - } -} - -/** - Hash a password with Argon2 (RFC 9106) - - @param pwd Password (or message) - @param pwdlen Length of password - @param salt Salt - @param saltlen Length of salt - @param secret Optional secret value (may be NULL) - @param secretlen Length of secret - @param ad Optional associated data (may be NULL) - @param adlen Length of associated data - @param t_cost Number of passes (iterations), minimum 1 - @param m_cost Memory size in KiB, minimum 8*parallelism - @param parallelism Degree of parallelism (number of lanes), minimum 1 - @param type ARGON2_D, ARGON2_I, or ARGON2_ID - @param out [out] Output tag - @param outlen Desired output length (4..2^32-1) - @return CRYPT_OK on success -*/ -int argon2_hash(const unsigned char *pwd, unsigned long pwdlen, - const unsigned char *salt, unsigned long saltlen, - const unsigned char *secret, unsigned long secretlen, - const unsigned char *ad, unsigned long adlen, - unsigned int t_cost, unsigned int m_cost, - unsigned int parallelism, - argon2_type type, - unsigned char *out, unsigned long outlen) -{ - argon2_instance instance; - unsigned char blockhash[ARGON2_PREHASH_SEED_LEN]; - ulong32 memory_blocks, segment_length; - int err; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen >= ARGON2_MIN_OUTLEN); - LTC_ARGCHK(pwd != NULL || pwdlen == 0); - LTC_ARGCHK(salt != NULL || saltlen == 0); - LTC_ARGCHK(secret != NULL || secretlen == 0); - LTC_ARGCHK(ad != NULL || adlen == 0); - LTC_ARGCHK(t_cost >= 1); - LTC_ARGCHK(type == ARGON2_D || type == ARGON2_I || type == ARGON2_ID); - - if (parallelism < 1 || parallelism > ARGON2_MAX_LANES || m_cost < 8 * parallelism) { - return CRYPT_INVALID_ARG; - } - - /* Align memory: ensure memory_blocks is a multiple of 4*parallelism */ - memory_blocks = (ulong32)m_cost; - if (memory_blocks < 2 * ARGON2_SYNC_POINTS * (ulong32)parallelism) { - memory_blocks = 2 * ARGON2_SYNC_POINTS * (ulong32)parallelism; - } - segment_length = memory_blocks / ((ulong32)parallelism * ARGON2_SYNC_POINTS); - memory_blocks = segment_length * ((ulong32)parallelism * ARGON2_SYNC_POINTS); - - /* Set up instance */ - instance.passes = (ulong32)t_cost; - instance.memory_blocks = memory_blocks; - instance.segment_length = segment_length; - instance.lane_length = segment_length * ARGON2_SYNC_POINTS; - instance.lanes = (ulong32)parallelism; - instance.type = (int)type; - instance.memory = NULL; - - /* Allocate memory */ - { - unsigned long alloc_size = (unsigned long)memory_blocks * sizeof(argon2_block); - /* overflow check */ - if (alloc_size / sizeof(argon2_block) != memory_blocks) { - return CRYPT_OVERFLOW; - } - instance.memory = XMALLOC(alloc_size); - if (instance.memory == NULL) { - return CRYPT_MEM; - } - } - - /* Initial hash H_0 */ - err = s_initial_hash(blockhash, pwd, pwdlen, salt, saltlen, - secret, secretlen, ad, adlen, - (ulong32)t_cost, (ulong32)m_cost, - (ulong32)parallelism, (ulong32)outlen, - (int)type); - if (err != CRYPT_OK) goto cleanup; - - /* Zero the extra 8 bytes after digest */ - XMEMSET(blockhash + ARGON2_PREHASH_DIGEST_LEN, 0, ARGON2_PREHASH_SEED_LEN - ARGON2_PREHASH_DIGEST_LEN); - - /* Generate first blocks */ - err = s_fill_first_blocks(blockhash, &instance); - if (err != CRYPT_OK) goto cleanup; - - /* Fill memory */ - s_fill_memory(&instance); - - /* Finalize */ - err = s_finalize(out, outlen, &instance); - -cleanup: - if (instance.memory != NULL) { - zeromem(instance.memory, (unsigned long)memory_blocks * sizeof(argon2_block)); - XFREE(instance.memory); - } - zeromem(blockhash, ARGON2_PREHASH_SEED_LEN); - return err; -} - -#endif /* LTC_ARGON2 */ diff --git a/src/misc/base16/base16_decode.c b/src/misc/base16/base16_decode.c deleted file mode 100644 index 8ebc9eac..00000000 --- a/src/misc/base16/base16_decode.c +++ /dev/null @@ -1,65 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file base16_decode.c - Base16/Hex decode a string. - Based on https://stackoverflow.com/a/23898449 - Adapted for libtomcrypt by Steffen Jaeckel -*/ - -#ifdef LTC_BASE16 - -/** - Base16 decode a string - @param in The Base16 string to decode - @param inlen The length of the Base16 data - @param out [out] The destination of the binary decoded data - @param outlen [in/out] The max size and resulting size of the decoded data - @return CRYPT_OK if successful -*/ -int base16_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long pos, out_len; - unsigned char idx0, idx1; - char in0, in1; - - const unsigned char hashmap[] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 01234567 */ - 0x08, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 89:;<=>? */ - 0xff, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, /* @ABCDEFG */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* HIJKLMNO */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* PQRSTUVW */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* XYZ[\]^_ */ - 0xff, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xff, /* `abcdefg */ - }; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((inlen % 2) == 1) return CRYPT_INVALID_PACKET; - out_len = *outlen * 2; - for (pos = 0; ((pos + 1 < out_len) && (pos + 1 < inlen)); pos += 2) { - in0 = in[pos + 0]; - in1 = in[pos + 1]; - - if ((in0 < '0') || (in0 > 'g')) return CRYPT_INVALID_PACKET; - if ((in1 < '0') || (in1 > 'g')) return CRYPT_INVALID_PACKET; - - idx0 = (unsigned char) (in0 & 0x1F) ^ 0x10; - idx1 = (unsigned char) (in1 & 0x1F) ^ 0x10; - - if (hashmap[idx0] == 0xff) return CRYPT_INVALID_PACKET; - if (hashmap[idx1] == 0xff) return CRYPT_INVALID_PACKET; - - out[pos / 2] = (unsigned char) (hashmap[idx0] << 4) | hashmap[idx1]; - } - *outlen = pos / 2; - return CRYPT_OK; -} - -#endif diff --git a/src/misc/base16/base16_encode.c b/src/misc/base16/base16_encode.c deleted file mode 100644 index 206827ca..00000000 --- a/src/misc/base16/base16_encode.c +++ /dev/null @@ -1,65 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file base16_encode.c - Base16/Hex encode a string, Steffen Jaeckel -*/ - -#ifdef LTC_BASE16 - -/** - Base16 encode a buffer - @param in The input buffer to encode - @param inlen The length of the input buffer - @param out [out] The destination of the Base16 encoded data - @param outlen [in/out] The max size and resulting size of the encoded data - @param options Output 'a-f' on 0 and 'A-F' otherwise. - @return CRYPT_OK if successful -*/ -int base16_encode(const unsigned char *in, unsigned long inlen, - char *out, unsigned long *outlen, - unsigned int options) -{ - unsigned long i, x; - const char *alphabet; - const char *alphabets[2] = { - "0123456789abcdef", - "0123456789ABCDEF", - }; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* check the sizes */ - x = inlen * 2 + 1; - - if (x < inlen) return CRYPT_OVERFLOW; - - if (*outlen < x) { - *outlen = x; - return CRYPT_BUFFER_OVERFLOW; - } - x--; - *outlen = x; /* returning the length without terminating NUL */ - - if (options == 0) { - alphabet = alphabets[0]; - } else { - alphabet = alphabets[1]; - } - - for (i = x; i > 0; i -= 2) { - out[i-2] = alphabet[(in[(i-1)/2] >> 4) & 0x0f]; - out[i-1] = alphabet[in[(i-1)/2] & 0x0f]; - } - - out[x] = '\0'; - - return CRYPT_OK; -} - -#endif diff --git a/src/misc/base32/base32_decode.c b/src/misc/base32/base32_decode.c deleted file mode 100644 index fc98ccea..00000000 --- a/src/misc/base32/base32_decode.c +++ /dev/null @@ -1,111 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_BASE32 - -/** - Base32 decode a buffer - @param in The Base32 data to decode - @param inlen The length of the Base32 data - @param out [out] The destination of the binary decoded data - @param outlen [in/out] The max size and resulting size of the decoded data - @param id Alphabet to use BASE32_RFC4648, BASE32_BASE32HEX, BASE32_ZBASE32 or BASE32_CROCKFORD - @return CRYPT_OK if successful -*/ -int base32_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - base32_alphabet id) -{ - unsigned long x; - int y = 0; - ulong64 t = 0; - char c; - const unsigned char *map; - const unsigned char tables[4][43] = { - { /* id = BASE32_RFC4648 : ABCDEFGHIJKLMNOPQRSTUVWXYZ234567 */ - 99/*0*/,99/*1*/,26/*2*/,27/*3*/,28/*4*/,29/*5*/,30/*6*/,31/*7*/,99/*8*/,99/*9*/, - 99/*:*/,99/*;*/,99/*<*/,99/*=*/,99/*>*/,99/*?*/,99/*@*/, - 0/*A*/, 1/*B*/, 2/*C*/, 3/*D*/, 4/*E*/, 5/*F*/, 6/*G*/, 7/*H*/, 8/*I*/, 9/*J*/,10/*K*/,11/*L*/,12/*M*/, - 13/*N*/,14/*O*/,15/*P*/,16/*Q*/,17/*R*/,18/*S*/,19/*T*/,20/*U*/,21/*V*/,22/*W*/,23/*X*/,24/*Y*/,25/*Z*/ - }, - { /* id = BASE32_BASE32HEX : 0123456789ABCDEFGHIJKLMNOPQRSTUV */ - 0/*0*/, 1/*1*/, 2/*2*/, 3/*3*/, 4/*4*/, 5/*5*/, 6/*6*/, 7/*7*/, 8/*8*/, 9/*9*/, - 99/*:*/,99/*;*/,99/*<*/,99/*=*/,99/*>*/,99/*?*/,99/*@*/, - 10/*A*/,11/*B*/,12/*C*/,13/*D*/,14/*E*/,15/*F*/,16/*G*/,17/*H*/,18/*I*/,19/*J*/,20/*K*/,21/*L*/,22/*M*/, - 23/*N*/,24/*O*/,25/*P*/,26/*Q*/,27/*R*/,28/*S*/,29/*T*/,30/*U*/,31/*V*/,99/*W*/,99/*X*/,99/*Y*/,99/*Z*/ - }, - { /* id = BASE32_ZBASE32 : YBNDRFG8EJKMCPQXOT1UWISZA345H769 */ - 99/*0*/,18/*1*/,99/*2*/,25/*3*/,26/*4*/,27/*5*/,30/*6*/,29/*7*/, 7/*8*/,31/*9*/, - 99/*:*/,99/*;*/,99/*<*/,99/*=*/,99/*>*/,99/*?*/,99/*@*/, - 24/*A*/, 1/*B*/,12/*C*/, 3/*D*/, 8/*E*/, 5/*F*/, 6/*G*/,28/*H*/,21/*I*/, 9/*J*/,10/*K*/,99/*L*/,11/*M*/, - 2/*N*/,16/*O*/,13/*P*/,14/*Q*/, 4/*R*/,22/*S*/,17/*T*/,19/*U*/,99/*V*/,20/*W*/,15/*X*/, 0/*Y*/,23/*Z*/ - }, - { /* id = BASE32_CROCKFORD : 0123456789ABCDEFGHJKMNPQRSTVWXYZ + O=>0 + IL=>1 */ - 0/*0*/, 1/*1*/, 2/*2*/, 3/*3*/, 4/*4*/, 5/*5*/, 6/*6*/, 7/*7*/, 8/*8*/, 9/*9*/, - 99/*:*/,99/*;*/,99/*<*/,99/*=*/,99/*>*/,99/*?*/,99/*@*/, - 10/*A*/,11/*B*/,12/*C*/,13/*D*/,14/*E*/,15/*F*/,16/*G*/,17/*H*/, 1/*I*/,18/*J*/,19/*K*/, 1/*L*/,20/*M*/, - 21/*N*/, 0/*O*/,22/*P*/,23/*Q*/,24/*R*/,25/*S*/,26/*T*/,99/*U*/,27/*V*/,28/*W*/,29/*X*/,30/*Y*/,31/*Z*/ - } - }; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(id >= BASE32_RFC4648); - LTC_ARGCHK(id <= BASE32_CROCKFORD); - - /* ignore all trailing = */ - while (inlen > 0 && in[inlen-1] == '=') inlen--; - - /* no input, nothing to do */ - if (inlen == 0) { - *outlen = 0; - return CRYPT_OK; - } - - /* check the size of output buffer */ - x = (inlen * 5) / 8; - if (*outlen < x) { - *outlen = x; - return CRYPT_BUFFER_OVERFLOW; - } - *outlen = x; - - /* check input data length */ - x = inlen % 8; - if (x == 1 || x == 3 || x == 6) { - return CRYPT_INVALID_PACKET; - } - - map = tables[id]; - for (x = 0; x < inlen; x++) { - c = in[x]; - /* convert to upper case */ - if ((c >= 'a') && (c <= 'z')) c -= 32; - if (c < '0' || c > 'Z' || map[c-'0'] > 31) { - return CRYPT_INVALID_PACKET; - } - t = (t<<5) | map[c-'0']; - if (++y == 8) { - *out++ = (unsigned char)((t>>32) & 255); - *out++ = (unsigned char)((t>>24) & 255); - *out++ = (unsigned char)((t>>16) & 255); - *out++ = (unsigned char)((t>> 8) & 255); - *out++ = (unsigned char)( t & 255); - y = 0; - t = 0; - } - } - if (y > 0) { - t = t << (5 * (8 - y)); - if (y >= 2) *out++ = (unsigned char)((t>>32) & 255); - if (y >= 4) *out++ = (unsigned char)((t>>24) & 255); - if (y >= 5) *out++ = (unsigned char)((t>>16) & 255); - if (y >= 7) *out++ = (unsigned char)((t>> 8) & 255); - } - return CRYPT_OK; -} - -#endif diff --git a/src/misc/base32/base32_encode.c b/src/misc/base32/base32_encode.c deleted file mode 100644 index 29519bf7..00000000 --- a/src/misc/base32/base32_encode.c +++ /dev/null @@ -1,86 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_BASE32 - -/** - Base32 encode a buffer - @param in The input buffer to encode - @param inlen The length of the input buffer - @param out [out] The destination of the Base32 encoded data - @param outlen [in/out] The max size and resulting size of the encoded data - @param id Alphabet to use BASE32_RFC4648, BASE32_BASE32HEX, BASE32_ZBASE32 or BASE32_CROCKFORD - @return CRYPT_OK if successful -*/ -int base32_encode(const unsigned char *in, unsigned long inlen, - char *out, unsigned long *outlen, - base32_alphabet id) -{ - unsigned long i, x; - const char *codes; - const char *alphabet[4] = { - "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567", /* id = BASE32_RFC4648 */ - "0123456789ABCDEFGHIJKLMNOPQRSTUV", /* id = BASE32_BASE32HEX */ - "ybndrfg8ejkmcpqxot1uwisza345h769", /* id = BASE32_ZBASE32 */ - "0123456789ABCDEFGHJKMNPQRSTVWXYZ" /* id = BASE32_CROCKFORD */ - }; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(id >= BASE32_RFC4648); - LTC_ARGCHK(id <= BASE32_CROCKFORD); - - /* check the size of output buffer +1 byte for terminating NUL */ - x = (8 * inlen + 4) / 5 + 1; - if (*outlen < x) { - *outlen = x; - return CRYPT_BUFFER_OVERFLOW; - } - *outlen = x - 1; /* returning the length without terminating NUL */ - - /* no input, nothing to do */ - if (inlen == 0) { - *out = '\0'; - return CRYPT_OK; - } - - codes = alphabet[id]; - x = 5 * (inlen / 5); - for (i = 0; i < x; i += 5) { - *out++ = codes[(in[0] >> 3) & 0x1F]; - *out++ = codes[(((in[0] & 0x7) << 2) + (in[1] >> 6)) & 0x1F]; - *out++ = codes[(in[1] >> 1) & 0x1F]; - *out++ = codes[(((in[1] & 0x1) << 4) + (in[2] >> 4)) & 0x1F]; - *out++ = codes[(((in[2] & 0xF) << 1) + (in[3] >> 7)) & 0x1F]; - *out++ = codes[(in[3] >> 2) & 0x1F]; - *out++ = codes[(((in[3] & 0x3) << 3) + (in[4] >> 5)) & 0x1F]; - *out++ = codes[in[4] & 0x1F]; - in += 5; - } - if (i < inlen) { - unsigned a = in[0]; - unsigned b = (i+1 < inlen) ? in[1] : 0; - unsigned c = (i+2 < inlen) ? in[2] : 0; - unsigned d = (i+3 < inlen) ? in[3] : 0; - *out++ = codes[(a >> 3) & 0x1F]; - *out++ = codes[(((a & 0x7) << 2) + (b >> 6)) & 0x1F]; - if (i+1 < inlen) { - *out++ = codes[(b >> 1) & 0x1F]; - *out++ = codes[(((b & 0x1) << 4) + (c >> 4)) & 0x1F]; - } - if (i+2 < inlen) { - *out++ = codes[(((c & 0xF) << 1) + (d >> 7)) & 0x1F]; - } - if (i+3 < inlen) { - *out++ = codes[(d >> 2) & 0x1F]; - *out++ = codes[((d & 0x3) << 3) & 0x1F]; - } - } - *out = '\0'; - return CRYPT_OK; -} - -#endif diff --git a/src/misc/base64/base64_decode.c b/src/misc/base64/base64_decode.c deleted file mode 100644 index 20a9ef3e..00000000 --- a/src/misc/base64/base64_decode.c +++ /dev/null @@ -1,231 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file base64_decode.c - Compliant base64 code donated by Wayne Scott (wscott@bitmover.com) - base64 URL Safe variant (RFC 4648 section 5) by Karel Miko -*/ - - -#if defined(LTC_BASE64) || defined (LTC_BASE64_URL) - -/* 253 - ignored in "relaxed" + "insane" mode: TAB(9), CR(13), LF(10), space(32) - * 254 - padding character '=' (allowed only at the end) - * 255 - ignored in "insane" mode, but not allowed in "relaxed" + "strict" mode - */ - -#if defined(LTC_BASE64) -static const unsigned char map_base64[256] = { -255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 253, 255, -255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, -255, 254, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, -255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255 }; -#endif /* LTC_BASE64 */ - -#if defined(LTC_BASE64_URL) -static const unsigned char map_base64url[] = { -255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 253, 255, -255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, -255, 254, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 63, -255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, -255, 255, 255, 255 -}; -#endif /* LTC_BASE64_URL */ - -enum { - insane = 0, - strict = 1, - relaxed = 2 -}; - -static int s_base64_decode_internal(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - const unsigned char *map, int mode) -{ - unsigned long t, x, y, z; - unsigned char c; - int g; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - g = 0; /* '=' counter */ - for (x = y = z = t = 0; x < inlen; x++) { - if ((in[x] == 0) && (x == (inlen - 1)) && (mode != strict)) { - continue; /* allow the last byte to be NUL (relaxed+insane) */ - } - c = map[(unsigned char)in[x]&0xFF]; - if (c == 254) { - g++; - continue; - } - if (c == 253) { - if (mode == strict) { - return CRYPT_INVALID_PACKET; - } - continue; /* allow to ignore white-spaces (relaxed+insane) */ - } - if (c == 255) { - if (mode == insane) { - continue; /* allow to ignore invalid garbage (insane) */ - } - return CRYPT_INVALID_PACKET; - } - if ((g > 0) && (mode != insane)) { - /* we only allow '=' to be at the end (strict+relaxed) */ - return CRYPT_INVALID_PACKET; - } - - t = (t<<6)|c; - - if (++y == 4) { - if (z + 3 > *outlen) return CRYPT_BUFFER_OVERFLOW; - out[z++] = (unsigned char)((t>>16)&255); - out[z++] = (unsigned char)((t>>8)&255); - out[z++] = (unsigned char)(t&255); - y = t = 0; - } - } - - if (y != 0) { - if (y == 1) return CRYPT_INVALID_PACKET; -#if defined(LTC_BASE64) - if (((y + g) != 4) && (mode == strict) && (map == map_base64)) return CRYPT_INVALID_PACKET; -#endif /* LTC_BASE64 */ - t = t << (6 * (4 - y)); - if (z + y - 1 > *outlen) return CRYPT_BUFFER_OVERFLOW; - if (y >= 2) out[z++] = (unsigned char) ((t >> 16) & 255); - if (y == 3) out[z++] = (unsigned char) ((t >> 8) & 255); - } - *outlen = z; - return CRYPT_OK; -} - -#if defined(LTC_BASE64) -/** - Dangerously relaxed base64 decode a block of memory - @param in The base64 data to decode - @param inlen The length of the base64 data - @param out [out] The destination of the binary decoded data - @param outlen [in/out] The max size and resulting size of the decoded data - @return CRYPT_OK if successful -*/ -int base64_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - return s_base64_decode_internal(in, inlen, out, outlen, map_base64, insane); -} - -/** - Strict base64 decode a block of memory - @param in The base64 data to decode - @param inlen The length of the base64 data - @param out [out] The destination of the binary decoded data - @param outlen [in/out] The max size and resulting size of the decoded data - @return CRYPT_OK if successful -*/ -int base64_strict_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - return s_base64_decode_internal(in, inlen, out, outlen, map_base64, strict); -} - -/** - Sane base64 decode a block of memory - @param in The base64 data to decode - @param inlen The length of the base64 data - @param out [out] The destination of the binary decoded data - @param outlen [in/out] The max size and resulting size of the decoded data - @return CRYPT_OK if successful -*/ -int base64_sane_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - return s_base64_decode_internal(in, inlen, out, outlen, map_base64, relaxed); -} -#endif /* LTC_BASE64 */ - -#if defined(LTC_BASE64_URL) -/** - Dangerously relaxed base64 (URL Safe, RFC 4648 section 5) decode a block of memory - @param in The base64 data to decode - @param inlen The length of the base64 data - @param out [out] The destination of the binary decoded data - @param outlen [in/out] The max size and resulting size of the decoded data - @return CRYPT_OK if successful -*/ -int base64url_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - return s_base64_decode_internal(in, inlen, out, outlen, map_base64url, insane); -} - -/** - Strict base64 (URL Safe, RFC 4648 section 5) decode a block of memory - @param in The base64 data to decode - @param inlen The length of the base64 data - @param out [out] The destination of the binary decoded data - @param outlen [in/out] The max size and resulting size of the decoded data - @return CRYPT_OK if successful -*/ -int base64url_strict_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - return s_base64_decode_internal(in, inlen, out, outlen, map_base64url, strict); -} - -/** - Sane base64 (URL Safe, RFC 4648 section 5) decode a block of memory - @param in The base64 data to decode - @param inlen The length of the base64 data - @param out [out] The destination of the binary decoded data - @param outlen [in/out] The max size and resulting size of the decoded data - @return CRYPT_OK if successful -*/ -int base64url_sane_decode(const char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - return s_base64_decode_internal(in, inlen, out, outlen, map_base64url, relaxed); -} -#endif /* LTC_BASE64_URL */ - -#endif - diff --git a/src/misc/base64/base64_encode.c b/src/misc/base64/base64_encode.c deleted file mode 100644 index ef8aee90..00000000 --- a/src/misc/base64/base64_encode.c +++ /dev/null @@ -1,159 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file base64_encode.c - Compliant base64 encoder donated by Wayne Scott (wscott@bitmover.com) - base64 URL Safe variant (RFC 4648 section 5) by Karel Miko -*/ - - -#if defined(LTC_BASE64) || defined (LTC_BASE64_URL) - -#if defined(LTC_BASE64) -static const char * const codes_base64 = -"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -#endif /* LTC_BASE64 */ - -#if defined(LTC_BASE64_URL) -static const char * const codes_base64url = -"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; -#endif /* LTC_BASE64_URL */ - -enum mode { - nopad = 0, - pad = 1, - lf = 2, - cr = 4, - ssh = 8, - crlf = lf | cr, -}; - -static int s_base64_encode_internal(const unsigned char *in, unsigned long inlen, - char *out, unsigned long *outlen, - const char *codes, unsigned int mode) -{ - unsigned long i, len2, leven, linelen; - char *p; - - LTC_ARGCHK(outlen != NULL); - - linelen = (mode & ssh) ? 72 : 64; - - /* valid output size ? */ - len2 = 4 * ((inlen + 2) / 3); - if ((mode & crlf) == lf) { - len2 += len2 / linelen; - } else if ((mode & crlf) == crlf) { - len2 += (len2 / linelen) * 2; - } - if (*outlen < len2 + 1) { - *outlen = len2 + 1; - return CRYPT_BUFFER_OVERFLOW; - } - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - - if ((void*)in == out) { - return CRYPT_INVALID_ARG; - } - - p = out; - leven = 3*(inlen / 3); - for (i = 0; i < leven; i += 3) { - *p++ = codes[(in[0] >> 2) & 0x3F]; - *p++ = codes[(((in[0] & 3) << 4) + (in[1] >> 4)) & 0x3F]; - *p++ = codes[(((in[1] & 0xf) << 2) + (in[2] >> 6)) & 0x3F]; - *p++ = codes[in[2] & 0x3F]; - in += 3; - if ((p - out) % linelen == 0) { - if (mode & cr) *p++ = '\r'; - if (mode & lf) *p++ = '\n'; - } - } - /* Pad it if necessary... */ - if (i < inlen) { - unsigned a = in[0]; - unsigned b = (i+1 < inlen) ? in[1] : 0; - - *p++ = codes[(a >> 2) & 0x3F]; - *p++ = codes[(((a & 3) << 4) + (b >> 4)) & 0x3F]; - if (mode & pad) { - *p++ = (i+1 < inlen) ? codes[(((b & 0xf) << 2)) & 0x3F] : '='; - *p++ = '='; - } - else { - if (i+1 < inlen) *p++ = codes[(((b & 0xf) << 2)) & 0x3F]; - } - } - - /* append a NULL byte */ - *p = '\0'; - - /* return ok */ - *outlen = (unsigned long)(p - out); /* the length without terminating NUL */ - return CRYPT_OK; -} - -#if defined(LTC_BASE64) -/** - base64 Encode a buffer (NUL terminated) - @param in The input buffer to encode - @param inlen The length of the input buffer - @param out [out] The destination of the base64 encoded data - @param outlen [in/out] The max size and resulting size - @return CRYPT_OK if successful -*/ -int base64_encode(const unsigned char *in, unsigned long inlen, - char *out, unsigned long *outlen) -{ - return s_base64_encode_internal(in, inlen, out, outlen, codes_base64, pad); -} - -/** - base64 Encode a buffer for PEM output - (NUL terminated with line-break at 64 chars) - @param in The input buffer to encode - @param inlen The length of the input buffer - @param out [out] The destination of the base64 encoded data - @param outlen [in/out] The max size and resulting size - @param flags \ref base64_pem_flags - @return CRYPT_OK if successful -*/ -int base64_encode_pem(const unsigned char *in, unsigned long inlen, - char *out, unsigned long *outlen, - unsigned int flags) -{ - int use_crlf = flags & BASE64_PEM_CRLF ? pad | crlf : pad | lf; - int ssh_style = flags & BASE64_PEM_SSH ? ssh : 0; - return s_base64_encode_internal(in, inlen, out, outlen, codes_base64, ssh_style | use_crlf); -} -#endif /* LTC_BASE64 */ - - -#if defined(LTC_BASE64_URL) -/** - base64 (URL Safe, RFC 4648 section 5) Encode a buffer (NUL terminated) - @param in The input buffer to encode - @param inlen The length of the input buffer - @param out [out] The destination of the base64 encoded data - @param outlen [in/out] The max size and resulting size - @return CRYPT_OK if successful -*/ -int base64url_encode(const unsigned char *in, unsigned long inlen, - char *out, unsigned long *outlen) -{ - return s_base64_encode_internal(in, inlen, out, outlen, codes_base64url, nopad); -} - -int base64url_strict_encode(const unsigned char *in, unsigned long inlen, - char *out, unsigned long *outlen) -{ - return s_base64_encode_internal(in, inlen, out, outlen, codes_base64url, pad); -} -#endif /* LTC_BASE64_URL */ - -#endif - diff --git a/src/misc/bcrypt/bcrypt.c b/src/misc/bcrypt/bcrypt.c deleted file mode 100644 index 1bebdffa..00000000 --- a/src/misc/bcrypt/bcrypt.c +++ /dev/null @@ -1,191 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file bcrypt.c - bcrypt pbkdf, Steffen Jaeckel -*/ -#ifdef LTC_BCRYPT - -#define BCRYPT_WORDS 8 -#define BCRYPT_HASHSIZE (BCRYPT_WORDS * 4) - -static int s_bcrypt_hash(const unsigned char *pt, - const unsigned char *pass, unsigned long passlen, - const unsigned char *salt, unsigned long saltlen, - unsigned char *out, unsigned long *outlen) -{ - symmetric_key key; - int err, n; - ulong32 ct[BCRYPT_WORDS]; - - if ((err = blowfish_setup_with_data(pass, passlen, salt, saltlen, &key)) != CRYPT_OK) { - return err; - } - for (n = 0; n < 64; ++n) { - if ((err = blowfish_expand(salt, saltlen, NULL, 0, &key)) != CRYPT_OK) { - return err; - } - if ((err = blowfish_expand(pass, passlen, NULL, 0, &key)) != CRYPT_OK) { - return err; - } - } - - for (n = 0; n < BCRYPT_WORDS; ++n) { - LOAD32H(ct[n], &pt[n*4]); - } - - for (n = 0; n < 64; ++n) { - blowfish_enc(ct, BCRYPT_WORDS/2, &key); - } - - for (n = 0; n < BCRYPT_WORDS; ++n) { - STORE32L(ct[n], &out[4 * n]); - } - *outlen = sizeof(ct); -#ifdef LTC_CLEAN_STACK - zeromem(&key, sizeof(key)); - zeromem(ct, sizeof(ct)); -#endif - - return CRYPT_OK; -} - -static int s_bcrypt_pbkdf_hash(const unsigned char *pass, unsigned long passlen, - const unsigned char *salt, unsigned long saltlen, - unsigned char *out, unsigned long *outlen) -{ - const unsigned char pt[] = "OxychromaticBlowfishSwatDynamite"; - return s_bcrypt_hash(pt, pass, passlen, salt, saltlen, out, outlen); -} - -/** - Compatible to bcrypt_pbkdf() as provided in OpenBSD - @param password The input password (or key) - @param password_len The length of the password (octets) - @param salt The salt (or nonce) - @param salt_len The length of the salt (octets) - @param rounds # of iterations desired [read specs for more] - @param hash_idx The index of the hash desired - @param out [out] The destination for this algorithm - @param outlen [in/out] The desired size of the algorithm output - @return CRYPT_OK if successful -*/ -int bcrypt_pbkdf_openbsd(const void *secret, unsigned long secret_len, - const unsigned char *salt, unsigned long salt_len, - unsigned int rounds, int hash_idx, - unsigned char *out, unsigned long *outlen) -{ - int err; - ulong32 blkno; - unsigned long left, itts, x, y, hashed_pass_len, step_size, steps, dest, used_rounds; - unsigned char *buf[3], blkbuf[4]; - unsigned char *hashed_pass; - - LTC_ARGCHK(secret != NULL); - LTC_ARGCHK(salt != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((secret_len == 0) || (salt_len == 0) || (*outlen == 0)) { - return CRYPT_INVALID_ARG; - } - /* test hash IDX */ - if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { - return err; - } - /* set default value for rounds if not given */ - if (rounds == 0) { - used_rounds = LTC_BCRYPT_DEFAULT_ROUNDS; - } else { - used_rounds = rounds; - } - - buf[0] = XMALLOC(MAXBLOCKSIZE * 3); - hashed_pass = XMALLOC(MAXBLOCKSIZE); - if (buf[0] == NULL || hashed_pass == NULL) { - if (hashed_pass != NULL) { - XFREE(hashed_pass); - } - if (buf[0] != NULL) { - XFREE(buf[0]); - } - return CRYPT_MEM; - } - /* buf[1] points to the second block of MAXBLOCKSIZE bytes */ - buf[1] = buf[0] + MAXBLOCKSIZE; - buf[2] = buf[1] + MAXBLOCKSIZE; - - step_size = (*outlen + BCRYPT_HASHSIZE - 1) / BCRYPT_HASHSIZE; - steps = (*outlen + step_size - 1) / step_size; - - hashed_pass_len = MAXBLOCKSIZE; - if ((err = hash_memory(hash_idx, (unsigned char*)secret, secret_len, hashed_pass, &hashed_pass_len)) != CRYPT_OK) { - goto LBL_ERR; - } - - left = *outlen; - blkno = 0; - while (left != 0) { - /* increment and store current block number */ - ++blkno; - STORE32H(blkno, blkbuf); - - /* process block number blkno */ - zeromem(buf[0], MAXBLOCKSIZE*2); - - x = MAXBLOCKSIZE; - if ((err = hash_memory_multi(hash_idx, buf[0], &x, - salt, salt_len, - blkbuf, 4uL, - LTC_NULL)) != CRYPT_OK) { - goto LBL_ERR; - } - y = MAXBLOCKSIZE; - if ((err = s_bcrypt_pbkdf_hash(hashed_pass, hashed_pass_len, buf[0], x, buf[1], &y)) != CRYPT_OK) { - goto LBL_ERR; - } - XMEMCPY(buf[2], buf[1], y); - - /* now compute repeated and XOR it in buf[2] */ - for (itts = 1; itts < used_rounds; ++itts) { - x = MAXBLOCKSIZE; - if ((err = hash_memory(hash_idx, buf[1], y, buf[0], &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y = MAXBLOCKSIZE; - if ((err = s_bcrypt_pbkdf_hash(hashed_pass, hashed_pass_len, buf[0], x, buf[1], &y)) != CRYPT_OK) { - goto LBL_ERR; - } - for (x = 0; x < y; x++) { - buf[2][x] ^= buf[1][x]; - } - } - - /* now emit upto `steps` bytes of buf[2] to output */ - steps = MIN(steps, left); - for (y = 0; y < steps; ++y) { - dest = y * step_size + (blkno - 1); - if (dest >= *outlen) - break; - out[dest] = buf[2][y]; - } - left -= y; - } - - err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(buf[0], MAXBLOCKSIZE*3); - zeromem(hashed_pass, MAXBLOCKSIZE); -#endif - - XFREE(hashed_pass); - XFREE(buf[0]); - - return err; -} - -#endif - diff --git a/src/misc/burn_stack.c b/src/misc/burn_stack.c deleted file mode 100644 index 5d276a45..00000000 --- a/src/misc/burn_stack.c +++ /dev/null @@ -1,23 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file burn_stack.c - Burn stack, Tom St Denis -*/ - -/** - Burn some stack memory - @param len amount of stack to burn in bytes -*/ -void burn_stack(unsigned long len) -{ - unsigned char buf[32]; - zeromem(buf, sizeof(buf)); - if (len > (unsigned long)sizeof(buf)) { - burn_stack(len - sizeof(buf)); - } -} - - diff --git a/src/misc/compare_testvector.c b/src/misc/compare_testvector.c deleted file mode 100644 index fd8ae0c7..00000000 --- a/src/misc/compare_testvector.c +++ /dev/null @@ -1,92 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file compare_testvector.c - Function to compare two testvectors and print a (detailed) error-message if required, Steffen Jaeckel -*/ - -#if defined(LTC_TEST) && defined(LTC_TEST_DBG) -static void s_print_hex(const char* what, const void* v, const unsigned long l) -{ - const unsigned char* p = v; - unsigned long x, y = 0, z; - fprintf(stderr, "%s contents: \n", what); - for (x = 0; x < l; ) { - fprintf(stderr, "%02X ", p[x]); - if (!(++x % 16) || x == l) { - if((x % 16) != 0) { - z = 16 - (x % 16); - if(z >= 8) - fprintf(stderr, " "); - for (; z != 0; --z) { - fprintf(stderr, " "); - } - } - fprintf(stderr, " | "); - for(; y < x; y++) { - if((y % 8) == 0) - fprintf(stderr, " "); - if(isgraph(p[y])) - fprintf(stderr, "%c", p[y]); - else - fprintf(stderr, "."); - } - fprintf(stderr, "\n"); - } - else if((x % 8) == 0) { - fprintf(stderr, " "); - } - } -} -#endif - -/** - Compare two test-vectors - - @param is The data as it is - @param is_len The length of is - @param should The data as it should - @param should_len The length of should - @param what The type of the data - @param which The iteration count - @return 0 on equality, -1 or 1 on difference -*/ -int ltc_compare_testvector(const void* is, const unsigned long is_len, const void* should, const unsigned long should_len, const char* what, int which) -{ - int res = 0; - if(is_len != should_len) { - res = is_len > should_len ? -1 : 1; - } else if (is_len == 0 && (!is || !should)) { - res = 0; - } else { - res = XMEMCMP(is, should, is_len); - } -#if defined(LTC_TEST) && defined(LTC_TEST_DBG) - if (res != 0) { - fprintf(stderr, "Testvector #%i(0x%x) of %s failed:\n", which, which, what); - s_print_hex("SHOULD", should, should_len); - s_print_hex("IS ", is, is_len); -#if LTC_TEST_DBG > 1 - } else { - fprintf(stderr, "Testvector #%i(0x%x) of %s passed!\n", which, which, what); -#endif - } -#else - LTC_UNUSED_PARAM(which); - LTC_UNUSED_PARAM(what); -#endif - - return res; -} - -int ltc_do_compare_testvector(const void* is, const unsigned long is_len, const void* should, const unsigned long should_len, const char* what, int which) -{ - if (ltc_compare_testvector(is, is_len, should, should_len, what, which) == 0) { - return CRYPT_OK; - } else { - return CRYPT_FAIL_TESTVECTOR; - } -} diff --git a/src/misc/copy_or_zeromem.c b/src/misc/copy_or_zeromem.c deleted file mode 100644 index cd741bf9..00000000 --- a/src/misc/copy_or_zeromem.c +++ /dev/null @@ -1,51 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file copy_or_zeromem.c - Either copy or zero a block of memory in constant time, Steffen Jaeckel -*/ - -/** - Either copy or zero a block of memory in constant time - @param src The source where to read from - @param dest The destination where to write to - @param len The length of the area to process (octets) - @param coz Copy (on 0) Or Zero (> 0) -*/ -void copy_or_zeromem(const unsigned char* src, unsigned char* dest, unsigned long len, int coz) -{ - unsigned long y; -#ifdef LTC_FAST - unsigned long z; - LTC_FAST_TYPE fastMask = ~(LTC_FAST_TYPE)0; /* initialize fastMask at all ones */ -#endif - unsigned char mask = 0xff; /* initialize mask at all ones */ - - LTC_ARGCHKVD(src != NULL); - LTC_ARGCHKVD(dest != NULL); - - if (coz != 0) coz = 1; - y = 0; - mask *= 1 - coz; /* mask = ( coz ? 0 : 0xff ) */ -#ifdef LTC_FAST - fastMask *= 1 - coz; - if (len & ~15) { - for (; y < (len & ~15); y += 16) { - for (z = 0; z < 16; z += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_MASK(&dest[y+z], &src[y+z], fastMask); - } - } - } -#endif - for (; y < len; y++) { - dest[y] = src[y] & mask; - } -#ifdef LTC_CLEAN_STACK -#ifdef LTC_FAST - fastMask = 0; -#endif - mask = 0; -#endif -} diff --git a/src/misc/crc32.c b/src/misc/crc32.c deleted file mode 100644 index b507a52c..00000000 --- a/src/misc/crc32.c +++ /dev/null @@ -1,193 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crc32.c - CRC-32 checksum algorithm - Written and placed in the public domain by Wei Dai - Adapted for libtomcrypt by Steffen Jaeckel -*/ -#ifdef LTC_CRC32 - -static const ulong32 CRC32_NEGL = 0xffffffffUL; - -#if defined(ENDIAN_LITTLE) -#define CRC32_INDEX(c) (c & 0xff) -#define CRC32_SHIFTED(c) (c >> 8) -#elif defined(ENDIAN_BIG) -#define CRC32_INDEX(c) (c >> 24) -#define CRC32_SHIFTED(c) (c << 8) -#else -#error The existing CRC32 implementation only works properly when the endianness of the target platform is known. -#endif - -/* Table of CRC-32's of all single byte values (made by makecrc.c) */ -static const ulong32 crc32_m_tab[] = -{ -#if defined(ENDIAN_LITTLE) - 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, - 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, - 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, - 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, - 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, - 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, - 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, - 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, - 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, - 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, - 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, - 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, - 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, - 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, - 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, - 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, - 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, - 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, - 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, - 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, - 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, - 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, - 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, - 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, - 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, - 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, - 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, - 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, - 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, - 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, - 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, - 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, - 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, - 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, - 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, - 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, - 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, - 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, - 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, - 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, - 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, - 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, - 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, - 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, - 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, - 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, - 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, - 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, - 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, - 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, - 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, - 0x2d02ef8dL -#else - 0x00000000L, 0x96300777L, 0x2c610eeeL, 0xba510999L, 0x19c46d07L, - 0x8ff46a70L, 0x35a563e9L, 0xa395649eL, 0x3288db0eL, 0xa4b8dc79L, - 0x1ee9d5e0L, 0x88d9d297L, 0x2b4cb609L, 0xbd7cb17eL, 0x072db8e7L, - 0x911dbf90L, 0x6410b71dL, 0xf220b06aL, 0x4871b9f3L, 0xde41be84L, - 0x7dd4da1aL, 0xebe4dd6dL, 0x51b5d4f4L, 0xc785d383L, 0x56986c13L, - 0xc0a86b64L, 0x7af962fdL, 0xecc9658aL, 0x4f5c0114L, 0xd96c0663L, - 0x633d0ffaL, 0xf50d088dL, 0xc8206e3bL, 0x5e10694cL, 0xe44160d5L, - 0x727167a2L, 0xd1e4033cL, 0x47d4044bL, 0xfd850dd2L, 0x6bb50aa5L, - 0xfaa8b535L, 0x6c98b242L, 0xd6c9bbdbL, 0x40f9bcacL, 0xe36cd832L, - 0x755cdf45L, 0xcf0dd6dcL, 0x593dd1abL, 0xac30d926L, 0x3a00de51L, - 0x8051d7c8L, 0x1661d0bfL, 0xb5f4b421L, 0x23c4b356L, 0x9995bacfL, - 0x0fa5bdb8L, 0x9eb80228L, 0x0888055fL, 0xb2d90cc6L, 0x24e90bb1L, - 0x877c6f2fL, 0x114c6858L, 0xab1d61c1L, 0x3d2d66b6L, 0x9041dc76L, - 0x0671db01L, 0xbc20d298L, 0x2a10d5efL, 0x8985b171L, 0x1fb5b606L, - 0xa5e4bf9fL, 0x33d4b8e8L, 0xa2c90778L, 0x34f9000fL, 0x8ea80996L, - 0x18980ee1L, 0xbb0d6a7fL, 0x2d3d6d08L, 0x976c6491L, 0x015c63e6L, - 0xf4516b6bL, 0x62616c1cL, 0xd8306585L, 0x4e0062f2L, 0xed95066cL, - 0x7ba5011bL, 0xc1f40882L, 0x57c40ff5L, 0xc6d9b065L, 0x50e9b712L, - 0xeab8be8bL, 0x7c88b9fcL, 0xdf1ddd62L, 0x492dda15L, 0xf37cd38cL, - 0x654cd4fbL, 0x5861b24dL, 0xce51b53aL, 0x7400bca3L, 0xe230bbd4L, - 0x41a5df4aL, 0xd795d83dL, 0x6dc4d1a4L, 0xfbf4d6d3L, 0x6ae96943L, - 0xfcd96e34L, 0x468867adL, 0xd0b860daL, 0x732d0444L, 0xe51d0333L, - 0x5f4c0aaaL, 0xc97c0dddL, 0x3c710550L, 0xaa410227L, 0x10100bbeL, - 0x86200cc9L, 0x25b56857L, 0xb3856f20L, 0x09d466b9L, 0x9fe461ceL, - 0x0ef9de5eL, 0x98c9d929L, 0x2298d0b0L, 0xb4a8d7c7L, 0x173db359L, - 0x810db42eL, 0x3b5cbdb7L, 0xad6cbac0L, 0x2083b8edL, 0xb6b3bf9aL, - 0x0ce2b603L, 0x9ad2b174L, 0x3947d5eaL, 0xaf77d29dL, 0x1526db04L, - 0x8316dc73L, 0x120b63e3L, 0x843b6494L, 0x3e6a6d0dL, 0xa85a6a7aL, - 0x0bcf0ee4L, 0x9dff0993L, 0x27ae000aL, 0xb19e077dL, 0x44930ff0L, - 0xd2a30887L, 0x68f2011eL, 0xfec20669L, 0x5d5762f7L, 0xcb676580L, - 0x71366c19L, 0xe7066b6eL, 0x761bd4feL, 0xe02bd389L, 0x5a7ada10L, - 0xcc4add67L, 0x6fdfb9f9L, 0xf9efbe8eL, 0x43beb717L, 0xd58eb060L, - 0xe8a3d6d6L, 0x7e93d1a1L, 0xc4c2d838L, 0x52f2df4fL, 0xf167bbd1L, - 0x6757bca6L, 0xdd06b53fL, 0x4b36b248L, 0xda2b0dd8L, 0x4c1b0aafL, - 0xf64a0336L, 0x607a0441L, 0xc3ef60dfL, 0x55df67a8L, 0xef8e6e31L, - 0x79be6946L, 0x8cb361cbL, 0x1a8366bcL, 0xa0d26f25L, 0x36e26852L, - 0x95770cccL, 0x03470bbbL, 0xb9160222L, 0x2f260555L, 0xbe3bbac5L, - 0x280bbdb2L, 0x925ab42bL, 0x046ab35cL, 0xa7ffd7c2L, 0x31cfd0b5L, - 0x8b9ed92cL, 0x1daede5bL, 0xb0c2649bL, 0x26f263ecL, 0x9ca36a75L, - 0x0a936d02L, 0xa906099cL, 0x3f360eebL, 0x85670772L, 0x13570005L, - 0x824abf95L, 0x147ab8e2L, 0xae2bb17bL, 0x381bb60cL, 0x9b8ed292L, - 0x0dbed5e5L, 0xb7efdc7cL, 0x21dfdb0bL, 0xd4d2d386L, 0x42e2d4f1L, - 0xf8b3dd68L, 0x6e83da1fL, 0xcd16be81L, 0x5b26b9f6L, 0xe177b06fL, - 0x7747b718L, 0xe65a0888L, 0x706a0fffL, 0xca3b0666L, 0x5c0b0111L, - 0xff9e658fL, 0x69ae62f8L, 0xd3ff6b61L, 0x45cf6c16L, 0x78e20aa0L, - 0xeed20dd7L, 0x5483044eL, 0xc2b30339L, 0x612667a7L, 0xf71660d0L, - 0x4d476949L, 0xdb776e3eL, 0x4a6ad1aeL, 0xdc5ad6d9L, 0x660bdf40L, - 0xf03bd837L, 0x53aebca9L, 0xc59ebbdeL, 0x7fcfb247L, 0xe9ffb530L, - 0x1cf2bdbdL, 0x8ac2bacaL, 0x3093b353L, 0xa6a3b424L, 0x0536d0baL, - 0x9306d7cdL, 0x2957de54L, 0xbf67d923L, 0x2e7a66b3L, 0xb84a61c4L, - 0x021b685dL, 0x942b6f2aL, 0x37be0bb4L, 0xa18e0cc3L, 0x1bdf055aL, - 0x8def022dL -#endif -}; - -void crc32_init(crc32_state *ctx) -{ - LTC_ARGCHKVD(ctx != NULL); - ctx->crc = CRC32_NEGL; -} - -void crc32_update(crc32_state *ctx, const unsigned char *input, unsigned long length) -{ - ulong32 crc; - LTC_ARGCHKVD(ctx != NULL); - LTC_ARGCHKVD(input != NULL); - crc = ctx->crc; - - while (length--) { - crc = crc32_m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc); - } - - ctx->crc = crc; -} - -void crc32_finish(const crc32_state *ctx, void *hash, unsigned long size) -{ - unsigned long i; - unsigned char* h; - ulong32 crc; - LTC_ARGCHKVD(ctx != NULL); - LTC_ARGCHKVD(hash != NULL); - - h = hash; - crc = ctx->crc; - crc ^= CRC32_NEGL; - - if (size > 4) size = 4; - for (i = 0; i < size; i++) { - h[i] = ((unsigned char*)&(crc))[size-i-1]; - } -} - -int crc32_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - const void* in = "libtomcrypt"; - const unsigned char crc32[] = { 0xb3, 0x73, 0x76, 0xef }; - unsigned char out[4]; - crc32_state ctx; - crc32_init(&ctx); - crc32_update(&ctx, in, XSTRLEN(in)); - crc32_finish(&ctx, out, 4); - if (ltc_compare_testvector(crc32, 4, out, 4, "CRC32", 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - return CRYPT_OK; -#endif -} -#endif diff --git a/src/misc/crypt/crypt.c b/src/misc/crypt/crypt.c deleted file mode 100644 index 1a6fd669..00000000 --- a/src/misc/crypt/crypt.c +++ /dev/null @@ -1,659 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt.c - Build strings, Tom St Denis -*/ -#define NAME_VALUE(s) #s"="NAME(s) -#define NAME(s) #s - -const char *crypt_build_settings = - "LibTomCrypt " SCRYPT " (www.libtom.net)\n" - "LibTomCrypt is public domain software.\n" -#if defined(INCLUDE_BUILD_DATE) - "Built on " __DATE__ " at " __TIME__ "\n\n" -#endif - "\nEndianness: " -#if defined(ENDIAN_NEUTRAL) - "neutral/" -#endif -#if defined(ENDIAN_LITTLE) - "little" -#elif defined(ENDIAN_BIG) - "big" -#endif - #if defined(ENDIAN_32BITWORD) - " (32-bit words)\n" - #elif defined(ENDIAN_64BITWORD) - " (64-bit words)\n" - #else - " (no wordsize defined)\n" - #endif - "Clean stack: " -#if defined(LTC_CLEAN_STACK) - "enabled\n" -#else - "disabled\n" -#endif - "\nCiphers built-in:\n" -#if defined(LTC_BLOWFISH) - " Blowfish\n" -#endif -#if defined(LTC_RC2) - " RC2\n" -#endif -#if defined(LTC_RC5) - " RC5\n" -#endif -#if defined(LTC_RC6) - " RC6\n" -#endif -#if defined(LTC_SAFERP) - " Safer+\n" -#endif -#if defined(LTC_SAFER) - " Safer\n" -#endif -#if defined(LTC_RIJNDAEL) - " Rijndael\n" -#endif -#if defined(LTC_XTEA) - " XTEA\n" -#endif -#if defined(LTC_TWOFISH) - " Twofish " - #if defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_TABLES) && defined(LTC_TWOFISH_ALL_TABLES) - "(small, tables, all_tables)\n" - #elif defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_TABLES) - "(small, tables)\n" - #elif defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_ALL_TABLES) - "(small, all_tables)\n" - #elif defined(LTC_TWOFISH_TABLES) && defined(LTC_TWOFISH_ALL_TABLES) - "(tables, all_tables)\n" - #elif defined(LTC_TWOFISH_SMALL) - "(small)\n" - #elif defined(LTC_TWOFISH_TABLES) - "(tables)\n" - #elif defined(LTC_TWOFISH_ALL_TABLES) - "(all_tables)\n" - #else - "\n" - #endif -#endif -#if defined(LTC_DES) - " DES\n" - " DES-X\n" - " 3DES\n" -#endif -#if defined(LTC_SM4) - " SM4\n" -#endif -#if defined(LTC_CAST5) - " CAST5\n" -#endif -#if defined(LTC_NOEKEON) - " Noekeon\n" -#endif -#if defined(LTC_SKIPJACK) - " Skipjack\n" -#endif -#if defined(LTC_KHAZAD) - " Khazad\n" -#endif -#if defined(LTC_ANUBIS) - " Anubis " -#endif -#if defined(LTC_ANUBIS_TWEAK) - " (tweaked)" -#endif - "\n" -#if defined(LTC_KSEED) - " KSEED\n" -#endif -#if defined(LTC_KASUMI) - " KASUMI\n" -#endif -#if defined(LTC_MULTI2) - " MULTI2\n" -#endif -#if defined(LTC_CAMELLIA) - " Camellia\n" -#endif -#if defined(LTC_IDEA) - " IDEA\n" -#endif -#if defined(LTC_SERPENT) - " Serpent\n" -#endif -#if defined(LTC_TEA) - " TEA\n" -#endif -#if defined(LTC_ARIA) - " ARIA\n" -#endif - "Stream ciphers built-in:\n" -#if defined(LTC_CHACHA) - " ChaCha\n" -#endif -#if defined(LTC_XCHACHA20) - " XChaCha20\n" -#endif -#if defined(LTC_SALSA20) - " Salsa20\n" -#endif -#if defined(LTC_XSALSA20) - " XSalsa20\n" -#endif -#if defined(LTC_SOSEMANUK) - " Sosemanuk\n" -#endif -#if defined(LTC_RABBIT) - " Rabbit\n" -#endif -#if defined(LTC_RC4_STREAM) - " RC4\n" -#endif -#if defined(LTC_SOBER128_STREAM) - " SOBER128\n" -#endif - - "\nHashes built-in:\n" -#if defined(LTC_SHA3) - " SHA3\n" -#endif -#if defined(LTC_TURBO_SHAKE) - " TurboSHAKE\n" -#endif -#if defined(LTC_KANGAROO_TWELVE) - " KangarooTwelve\n" -#endif -#if defined(LTC_KECCAK) - " KECCAK\n" -#endif -#if defined(LTC_SHA512) - " SHA-512\n" -#endif -#if defined(LTC_SHA384) - " SHA-384\n" -#endif -#if defined(LTC_SHA512_256) - " SHA-512/256\n" -#endif -#if defined(LTC_SHA256) - " SHA-256\n" -#endif -#if defined(LTC_SHA512_224) - " SHA-512/224\n" -#endif -#if defined(LTC_SHA224) - " SHA-224\n" -#endif -#if defined(LTC_TIGER) - " TIGER\n" -#endif -#if defined(LTC_SHA1) - " SHA1\n" -#endif -#if defined(LTC_MD5) - " MD5\n" -#endif -#if defined(LTC_MD4) - " MD4\n" -#endif -#if defined(LTC_MD2) - " MD2\n" -#endif -#if defined(LTC_RIPEMD128) - " RIPEMD128\n" -#endif -#if defined(LTC_RIPEMD160) - " RIPEMD160\n" -#endif -#if defined(LTC_RIPEMD256) - " RIPEMD256\n" -#endif -#if defined(LTC_RIPEMD320) - " RIPEMD320\n" -#endif -#if defined(LTC_WHIRLPOOL) - " WHIRLPOOL\n" -#endif -#if defined(LTC_BLAKE2S) - " BLAKE2S\n" -#endif -#if defined(LTC_BLAKE2B) - " BLAKE2B\n" -#endif -#if defined(LTC_SM3) - " SM3\n" -#endif -#if defined(LTC_BLAKE3) - " BLAKE3\n" -#endif -#if defined(LTC_CHC_HASH) - " CHC_HASH\n" -#endif - - "\nBlock Chaining Modes:\n" -#if defined(LTC_CFB_MODE) - " CFB\n" -#endif -#if defined(LTC_OFB_MODE) - " OFB\n" -#endif -#if defined(LTC_ECB_MODE) - " ECB\n" -#endif -#if defined(LTC_CBC_MODE) - " CBC\n" -#endif -#if defined(LTC_CTR_MODE) - " CTR\n" -#endif -#if defined(LTC_LRW_MODE) - " LRW" -#if defined(LTC_LRW_TABLES) - " (tables) " -#endif - "\n" -#endif -#if defined(LTC_F8_MODE) - " F8\n" -#endif -#if defined(LTC_XTS_MODE) - " XTS\n" -#endif - - "\nMACs:\n" -#if defined(LTC_HMAC) - " HMAC\n" -#endif -#if defined(LTC_OMAC) - " OMAC\n" -#endif -#if defined(LTC_PMAC) - " PMAC\n" -#endif -#if defined(LTC_PELICAN) - " PELICAN\n" -#endif -#if defined(LTC_XCBC) - " XCBC\n" -#endif -#if defined(LTC_F9_MODE) - " F9\n" -#endif -#if defined(LTC_POLY1305) - " POLY1305\n" -#endif -#if defined(LTC_BLAKE2SMAC) - " BLAKE2S MAC\n" -#endif -#if defined(LTC_BLAKE2BMAC) - " BLAKE2B MAC\n" -#endif -#if defined(LTC_KMAC) - " KMAC\n" -#endif - - "\nENC + AUTH modes:\n" -#if defined(LTC_EAX_MODE) - " EAX\n" -#endif -#if defined(LTC_OCB_MODE) - " OCB\n" -#endif -#if defined(LTC_OCB3_MODE) - " OCB3\n" -#endif -#if defined(LTC_CCM_MODE) - " CCM\n" -#endif -#if defined(LTC_GCM_MODE) - " GCM" -#if defined(LTC_GCM_TABLES) - " (tables) " -#endif -#if defined(LTC_GCM_TABLES_SSE2) - " (SSE2) " -#endif - "\n" -#endif -#if defined(LTC_CHACHA20POLY1305_MODE) - " CHACHA20POLY1305\n" -#endif -#if defined(LTC_SIV_MODE) - " SIV\n" -#endif -#if defined(LTC_GCM_SIV_MODE) - " GCM-SIV\n" -#endif - - "\nPRNG:\n" -#if defined(LTC_YARROW) - " Yarrow ("NAME_VALUE(LTC_YARROW_AES)")\n" -#endif -#if defined(LTC_SPRNG) - " SPRNG\n" -#endif -#if defined(LTC_RC4) - " RC4\n" -#endif -#if defined(LTC_CHACHA20_PRNG) - " ChaCha20\n" -#endif -#if defined(LTC_FORTUNA) - " Fortuna (" NAME_VALUE(LTC_FORTUNA_POOLS) ", " -#if defined(LTC_FORTUNA_RESEED_RATELIMIT_TIMED) - "LTC_FORTUNA_RESEED_RATELIMIT_TIMED" -#else - "LTC_FORTUNA_RESEED_RATELIMIT_STATIC, " NAME_VALUE(LTC_FORTUNA_WD) -#endif -#if defined(LTC_FORTUNA_USE_ENCRYPT_ONLY) - ", LTC_FORTUNA_USE_ENCRYPT_ONLY" -#endif - ")\n" -#endif -#if defined(LTC_SOBER128) - " SOBER128\n" -#endif -#if defined(LTC_WIN32_BCRYPT) - " WIN32_BCRYPT\n" -#endif - - "\nPK Crypto:\n" -#if defined(LTC_MRSA) - " RSA" -#if defined(LTC_RSA_BLINDING) && defined(LTC_RSA_CRT_HARDENING) - " (with blinding and CRT hardening)" -#elif defined(LTC_RSA_BLINDING) - " (with blinding)" -#elif defined(LTC_RSA_CRT_HARDENING) - " (with CRT hardening)" -#endif - "\n" -#endif -#if defined(LTC_MDH) - " DH\n" -#endif -#if defined(LTC_MECC) - " ECC" -#if defined(LTC_ECC_TIMING_RESISTANT) - " (with blinding)" -#endif - "\n" -#endif -#if defined(LTC_MDSA) - " DSA\n" -#endif -#if defined(LTC_CURVE25519) -#if defined(LTC_CURVE25519) - " Ed25519\n" -#endif -#if defined(LTC_CURVE25519) - " X25519\n" -#endif -#endif -#if defined(LTC_CURVE448) - " Ed448\n" - " X448\n" -#endif -#if defined(LTC_PK_MAX_RETRIES) - " "NAME_VALUE(LTC_PK_MAX_RETRIES)"\n" -#endif - - "\nMPI (Math):\n" -#if defined(LTC_MPI) - " LTC_MPI\n" -#endif -#if defined(LTM_DESC) - " LTM_DESC\n" -#endif -#if defined(TFM_DESC) - " TFM_DESC\n" -#endif -#if defined(GMP_DESC) - " GMP_DESC\n" -#endif -#if defined(LTC_MILLER_RABIN_REPS) - " "NAME_VALUE(LTC_MILLER_RABIN_REPS)"\n" -#endif - - "\nCompiler:\n" -#if defined(_WIN64) - " WIN64 platform detected.\n" -#elif defined(_WIN32) - " WIN32 platform detected.\n" -#endif -#if defined(__CYGWIN__) - " CYGWIN Detected.\n" -#endif -#if defined(__DJGPP__) - " DJGPP Detected.\n" -#endif -#if defined(_MSC_VER) - " MSVC compiler detected.\n" -#endif -#if defined(__clang_version__) - " Clang compiler " __clang_version__ ".\n" -#elif defined(INTEL_CC) - " Intel C Compiler " __VERSION__ ".\n" -#elif defined(__GNUC__) /* clang and icc also define __GNUC__ */ - " GCC compiler " __VERSION__ ".\n" -#endif - -#if defined(__x86_64__) - " x86-64 detected.\n" -#endif -#if defined(LTC_PPC32) - " PPC32 detected.\n" -#endif -#if defined(LTC_ARCH_X86) - " LTC_ARCH_X86\n" -#endif -#if defined(LTC_ARCH_AARCH64) - " LTC_ARCH_AARCH64\n" -#endif - - "\nVarious others: " -#if defined(ARGTYPE) - " " NAME_VALUE(ARGTYPE) " " -#endif -#if defined(LTC_ADLER32) - " ADLER32 " -#endif -#if defined(LTC_AES_NI) - " AES-NI " -#endif -#if defined(LTC_BASE64) - " BASE64 " -#endif -#if defined(LTC_BASE64_URL) - " BASE64-URL-SAFE " -#endif -#if defined(LTC_BASE32) - " BASE32 " -#endif -#if defined(LTC_BASE16) - " BASE16 " -#endif -#if defined(LTC_ARGON2) - " ARGON2 " -#endif -#if defined(LTC_BCRYPT) - " BCRYPT " - " " NAME_VALUE(LTC_BCRYPT_DEFAULT_ROUNDS) " " -#endif -#if defined(LTC_SCRYPT) - " SCRYPT " -#endif -#if defined(LTC_CRC32) - " CRC32 " -#endif -#if defined(LTC_DER) - " DER " - " " NAME_VALUE(LTC_DER_MAX_RECURSION) " " - " " NAME_VALUE(LTC_DER_OID_DEFAULT_NODES) " " -#endif -#if defined(LTC_PKCS_1) - " PKCS#1 " -#endif -#if defined(LTC_PKCS_5) - " PKCS#5 " -#endif -#if defined(LTC_PKCS_8) - " PKCS#8 " -#endif -#if defined(LTC_PKCS_12) - " PKCS#12 " -#endif -#if defined(LTC_PADDING) - " PADDING " -#endif -#if defined(LTC_HKDF) - " HKDF " -#endif -#if defined(LTC_PBES) - " PBES1 " - " PBES2 " -#endif -#if defined(LTC_PEM) - " PEM " - " " NAME_VALUE(LTC_PEM_DECODE_BUFSZ) " " - " " NAME_VALUE(LTC_PEM_READ_BUFSIZE) " " -#endif -#if defined(LTC_SSH) - " SSH " -#endif -#if defined(LTC_PEM_SSH) - " OpenSSH-PEM " -#endif -#if defined(LTC_SHA1) && defined(LTC_SHA1_X86) - " SHA1-NI " -#endif -#if defined(LTC_SHA224) && defined(LTC_SHA224_X86) - " SHA224-NI " -#endif -#if defined(LTC_SHA256) && defined(LTC_SHA256_X86) - " SHA256-NI " -#endif -#if defined(LTC_SHA384) && defined(LTC_SHA384_X86) - " SHA384-NI " -#endif -#if defined(LTC_SHA512) && defined(LTC_SHA512_X86) - " SHA512-NI " -#endif -#if defined(LTC_SHA512_224) && defined(LTC_SHA512_224_X86) - " SHA512-224-NI " -#endif -#if defined(LTC_SHA512_256) && defined(LTC_SHA512_256_X86) - " SHA512-256-NI " -#endif -#if defined(LTC_DEVRANDOM) - " LTC_DEVRANDOM " -#endif -#if defined(LTC_TRY_URANDOM_FIRST) - " LTC_TRY_URANDOM_FIRST " -#endif -#if defined(LTC_RNG_GET_BYTES) - " LTC_RNG_GET_BYTES " -#endif -#if defined(LTC_RNG_MAKE_PRNG) - " LTC_RNG_MAKE_PRNG " -#endif -#if defined(LTC_PRNG_ENABLE_LTC_RNG) - " LTC_PRNG_ENABLE_LTC_RNG " -#endif -#if defined(LTC_HASH_HELPERS) - " LTC_HASH_HELPERS " -#endif -#if defined(LTC_VALGRIND) - " LTC_VALGRIND " -#endif -#if defined(LTC_TEST) - " LTC_TEST " -#endif -#if defined(LTC_TEST_DBG) - " " NAME_VALUE(LTC_TEST_DBG) " " -#endif -#if defined(LTC_TEST_EXT) - " LTC_TEST_EXT " -#endif -#if defined(LTC_SMALL_CODE) - " LTC_SMALL_CODE " -#endif -#if defined(LTC_SMALL_STACK) - " LTC_SMALL_STACK " -#endif -#if defined(LTC_NO_FILE) - " LTC_NO_FILE " -#endif -#if defined(LTC_FILE_READ_BUFSIZE) - " " NAME_VALUE(LTC_FILE_READ_BUFSIZE) " " -#endif -#if defined(LTC_FAST) - " LTC_FAST " -#endif -#if defined(LTC_NO_FAST) - " LTC_NO_FAST " -#endif -#if defined(LTC_NO_INLINE) - " LTC_NO_INLINE " -#else - " " NAME_VALUE(LTC_INLINE) " " -#endif -#if defined(LTC_NO_BSWAP) - " LTC_NO_BSWAP " -#endif -#if defined(LTC_NO_ASM) - " LTC_NO_ASM " -#endif -#if defined(LTC_ROx_BUILTIN) - " LTC_ROx_BUILTIN " -#elif defined(LTC_ROx_ASM) - " LTC_ROx_ASM " -#if defined(LTC_NO_ROLC) - " LTC_NO_ROLC " -#endif -#endif -#if defined(LTC_HAVE_ROTATE_BUILTIN) - " LTC_HAVE_ROTATE_BUILTIN " -#endif -#if defined(LTC_HAVE_CLZL_BUILTIN) - " LTC_HAVE_CLZL_BUILTIN " -#endif -#if defined(LTC_HAVE_CTZL_BUILTIN) - " LTC_HAVE_CTZL_BUILTIN " -#endif -#if defined(LTC_NO_TEST) - " LTC_NO_TEST " -#endif -#if defined(LTC_NO_TABLES) - " LTC_NO_TABLES " -#endif -#if defined(LTC_PTHREAD) - " LTC_PTHREAD " -#endif -#if defined(LTC_EASY) - " LTC_EASY " -#endif -#if defined(LTC_MECC_ACCEL) - " LTC_MECC_ACCEL " -#endif -#if defined(LTC_MECC_FP) - " LTC_MECC_FP " -#endif -#if defined(LTC_ECC_SHAMIR) - " LTC_ECC_SHAMIR " -#endif -#if defined(LTC_CLOCK_GETTIME) - " LTC_CLOCK_GETTIME " -#endif -#if defined(LTC_NO_DEPRECATED_APIS) - " LTC_NO_DEPRECATED_APIS " -#endif - "\n" - ; - diff --git a/src/misc/crypt/crypt_argchk.c b/src/misc/crypt/crypt_argchk.c deleted file mode 100644 index 85b562a4..00000000 --- a/src/misc/crypt/crypt_argchk.c +++ /dev/null @@ -1,17 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_argchk.c - Perform argument checking, Tom St Denis -*/ - -#if (ARGTYPE == 0) -void crypt_argchk(const char *v, const char *s, int d) -{ - fprintf(stderr, "LTC_ARGCHK '%s' failure on line %d of file %s\n", - v, d, s); - abort(); -} -#endif diff --git a/src/misc/crypt/crypt_cipher_descriptor.c b/src/misc/crypt/crypt_cipher_descriptor.c deleted file mode 100644 index b79ff33b..00000000 --- a/src/misc/crypt/crypt_cipher_descriptor.c +++ /dev/null @@ -1,15 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_cipher_descriptor.c - Stores the cipher descriptor table, Tom St Denis -*/ - -struct ltc_cipher_descriptor cipher_descriptor[TAB_SIZE] = { -{ NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } - }; - -LTC_MUTEX_GLOBAL(ltc_cipher_mutex) - diff --git a/src/misc/crypt/crypt_cipher_is_valid.c b/src/misc/crypt/crypt_cipher_is_valid.c deleted file mode 100644 index 8745acea..00000000 --- a/src/misc/crypt/crypt_cipher_is_valid.c +++ /dev/null @@ -1,24 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_cipher_is_valid.c - Determine if cipher is valid, Tom St Denis -*/ - -/* - Test if a cipher index is valid - @param idx The index of the cipher to search for - @return CRYPT_OK if valid -*/ -int cipher_is_valid(int idx) -{ - LTC_MUTEX_LOCK(<c_cipher_mutex); - if (idx < 0 || idx >= TAB_SIZE || cipher_descriptor[idx].name == NULL) { - LTC_MUTEX_UNLOCK(<c_cipher_mutex); - return CRYPT_INVALID_CIPHER; - } - LTC_MUTEX_UNLOCK(<c_cipher_mutex); - return CRYPT_OK; -} diff --git a/src/misc/crypt/crypt_constants.c b/src/misc/crypt/crypt_constants.c deleted file mode 100644 index eac6daec..00000000 --- a/src/misc/crypt/crypt_constants.c +++ /dev/null @@ -1,290 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_constants.c - - Make various constants available to dynamic languages - like Python - Larry Bugbee, February 2013 - - LB - Dec 2013 - revised to include compiler define options - LB - Mar 2014 - added endianness and word size -*/ - -typedef struct { - const char *name; - const int value; -} crypt_constant; - -#define C_STRINGIFY(s) { #s, s } - -static const crypt_constant s_crypt_constants[] = { - - C_STRINGIFY(CRYPT_OK), - C_STRINGIFY(CRYPT_ERROR), - C_STRINGIFY(CRYPT_NOP), - C_STRINGIFY(CRYPT_INVALID_KEYSIZE), - C_STRINGIFY(CRYPT_INVALID_ROUNDS), - C_STRINGIFY(CRYPT_FAIL_TESTVECTOR), - C_STRINGIFY(CRYPT_BUFFER_OVERFLOW), - C_STRINGIFY(CRYPT_INVALID_PACKET), - C_STRINGIFY(CRYPT_INVALID_PRNGSIZE), - C_STRINGIFY(CRYPT_ERROR_READPRNG), - C_STRINGIFY(CRYPT_INVALID_CIPHER), - C_STRINGIFY(CRYPT_INVALID_HASH), - C_STRINGIFY(CRYPT_INVALID_PRNG), - C_STRINGIFY(CRYPT_MEM), - C_STRINGIFY(CRYPT_PK_TYPE_MISMATCH), - C_STRINGIFY(CRYPT_PK_NOT_PRIVATE), - C_STRINGIFY(CRYPT_INVALID_ARG), - C_STRINGIFY(CRYPT_FILE_NOTFOUND), - C_STRINGIFY(CRYPT_PK_INVALID_TYPE), - C_STRINGIFY(CRYPT_OVERFLOW), - C_STRINGIFY(CRYPT_PK_ASN1_ERROR), - C_STRINGIFY(CRYPT_INPUT_TOO_LONG), - C_STRINGIFY(CRYPT_PK_INVALID_SIZE), - C_STRINGIFY(CRYPT_INVALID_PRIME_SIZE), - C_STRINGIFY(CRYPT_PK_INVALID_PADDING), - C_STRINGIFY(CRYPT_HASH_OVERFLOW), - - C_STRINGIFY(PK_PUBLIC), - C_STRINGIFY(PK_PRIVATE), - - C_STRINGIFY(LTC_ENCRYPT), - C_STRINGIFY(LTC_DECRYPT), - -#ifdef LTC_PKCS_1 - {"LTC_PKCS_1", 1}, - /* Block types */ - C_STRINGIFY(LTC_PKCS_1_EMSA), - C_STRINGIFY(LTC_PKCS_1_EME), - - /* Padding types */ - C_STRINGIFY(LTC_PKCS_1_V1_5), - C_STRINGIFY(LTC_PKCS_1_OAEP), - C_STRINGIFY(LTC_PKCS_1_PSS), - C_STRINGIFY(LTC_PKCS_1_V1_5_NA1), -#else - {"LTC_PKCS_1", 0}, -#endif - -#ifdef LTC_PADDING - {"LTC_PADDING", 1}, - - C_STRINGIFY(LTC_PAD_PKCS7), -#ifdef LTC_RNG_GET_BYTES - C_STRINGIFY(LTC_PAD_ISO_10126), -#endif - C_STRINGIFY(LTC_PAD_ANSI_X923), - C_STRINGIFY(LTC_PAD_ONE_AND_ZERO), - C_STRINGIFY(LTC_PAD_ZERO), - C_STRINGIFY(LTC_PAD_ZERO_ALWAYS), -#else - {"LTC_PADDING", 0}, -#endif - -#ifdef LTC_MRSA - {"LTC_MRSA", 1}, -#else - {"LTC_MRSA", 0}, -#endif - -#ifdef LTC_MECC - {"LTC_MECC", 1}, - C_STRINGIFY(ECC_BUF_SIZE), - C_STRINGIFY(ECC_MAXSIZE), -#else - {"LTC_MECC", 0}, -#endif - -#ifdef LTC_MDSA - {"LTC_MDSA", 1}, - C_STRINGIFY(LTC_MDSA_DELTA), - C_STRINGIFY(LTC_MDSA_MAX_GROUP), - C_STRINGIFY(LTC_MDSA_MAX_MODULUS), -#else - {"LTC_MDSA", 0}, -#endif - -#ifdef LTC_MILLER_RABIN_REPS - C_STRINGIFY(LTC_MILLER_RABIN_REPS), -#endif - -#ifdef LTC_DER -/* DER handling */ - {"LTC_DER", 1}, - C_STRINGIFY(LTC_ASN1_EOL), - C_STRINGIFY(LTC_ASN1_BOOLEAN), - C_STRINGIFY(LTC_ASN1_INTEGER), - C_STRINGIFY(LTC_ASN1_SHORT_INTEGER), - C_STRINGIFY(LTC_ASN1_BIT_STRING), - C_STRINGIFY(LTC_ASN1_OCTET_STRING), - C_STRINGIFY(LTC_ASN1_NULL), - C_STRINGIFY(LTC_ASN1_OBJECT_IDENTIFIER), - C_STRINGIFY(LTC_ASN1_IA5_STRING), - C_STRINGIFY(LTC_ASN1_PRINTABLE_STRING), - C_STRINGIFY(LTC_ASN1_UTF8_STRING), - C_STRINGIFY(LTC_ASN1_UTCTIME), - C_STRINGIFY(LTC_ASN1_CHOICE), - C_STRINGIFY(LTC_ASN1_SEQUENCE), - C_STRINGIFY(LTC_ASN1_SET), - C_STRINGIFY(LTC_ASN1_SETOF), - C_STRINGIFY(LTC_ASN1_RAW_BIT_STRING), - C_STRINGIFY(LTC_ASN1_TELETEX_STRING), - C_STRINGIFY(LTC_ASN1_GENERALIZEDTIME), - C_STRINGIFY(LTC_ASN1_CUSTOM_TYPE), - C_STRINGIFY(LTC_DER_MAX_RECURSION), -#else - {"LTC_DER", 0}, -#endif - -#ifdef LTC_CTR_MODE - {"LTC_CTR_MODE", 1}, - C_STRINGIFY(CTR_COUNTER_LITTLE_ENDIAN), - C_STRINGIFY(CTR_COUNTER_BIG_ENDIAN), - C_STRINGIFY(LTC_CTR_RFC3686), -#else - {"LTC_CTR_MODE", 0}, -#endif -#ifdef LTC_GCM_MODE - C_STRINGIFY(LTC_GCM_MODE_IV), - C_STRINGIFY(LTC_GCM_MODE_AAD), - C_STRINGIFY(LTC_GCM_MODE_TEXT), -#endif - - C_STRINGIFY(LTC_MP_LT), - C_STRINGIFY(LTC_MP_EQ), - C_STRINGIFY(LTC_MP_GT), - - C_STRINGIFY(LTC_MP_NO), - C_STRINGIFY(LTC_MP_YES), - - C_STRINGIFY(MAXBLOCKSIZE), - C_STRINGIFY(TAB_SIZE), - C_STRINGIFY(ARGTYPE), - -#ifdef LTM_DESC - {"LTM_DESC", 1}, -#else - {"LTM_DESC", 0}, -#endif -#ifdef TFM_DESC - {"TFM_DESC", 1}, -#else - {"TFM_DESC", 0}, -#endif -#ifdef GMP_DESC - {"GMP_DESC", 1}, -#else - {"GMP_DESC", 0}, -#endif - -#ifdef LTC_FAST - {"LTC_FAST", 1}, -#else - {"LTC_FAST", 0}, -#endif - -#ifdef LTC_NO_FILE - {"LTC_NO_FILE", 1}, -#else - {"LTC_NO_FILE", 0}, -#endif - -#ifdef ENDIAN_LITTLE - {"ENDIAN_LITTLE", 1}, -#else - {"ENDIAN_LITTLE", 0}, -#endif - -#ifdef ENDIAN_BIG - {"ENDIAN_BIG", 1}, -#else - {"ENDIAN_BIG", 0}, -#endif - -#ifdef ENDIAN_32BITWORD - {"ENDIAN_32BITWORD", 1}, -#else - {"ENDIAN_32BITWORD", 0}, -#endif - -#ifdef ENDIAN_64BITWORD - {"ENDIAN_64BITWORD", 1}, -#else - {"ENDIAN_64BITWORD", 0}, -#endif - -#ifdef ENDIAN_NEUTRAL - {"ENDIAN_NEUTRAL", 1}, -#else - {"ENDIAN_NEUTRAL", 0}, -#endif -}; - - -/* crypt_get_constant() - * valueout will be the value of the named constant - * return -1 if named item not found - */ -int crypt_get_constant(const char* namein, int *valueout) { - int i; - int count = sizeof(s_crypt_constants) / sizeof(s_crypt_constants[0]); - for (i=0; i *names_list_size) { - return -1; - } - /* build the names list */ - ptr = names_list; - for (i=0; i total_len) return -1; - total_len -= number_len; - ptr += number_len; - } - /* to remove the trailing new-line */ - ptr -= 1; - *ptr = 0; - } - return 0; -} - diff --git a/src/misc/crypt/crypt_find_cipher.c b/src/misc/crypt/crypt_find_cipher.c deleted file mode 100644 index e45da9cd..00000000 --- a/src/misc/crypt/crypt_find_cipher.c +++ /dev/null @@ -1,29 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_find_cipher.c - Find a cipher in the descriptor tables, Tom St Denis -*/ - -/** - Find a registered cipher by name - @param name The name of the cipher to look for - @return >= 0 if found, -1 if not present -*/ -int find_cipher(const char *name) -{ - int x; - LTC_ARGCHK(name != NULL); - LTC_MUTEX_LOCK(<c_cipher_mutex); - for (x = 0; x < TAB_SIZE; x++) { - if (cipher_descriptor[x].name != NULL && !XSTRCMP(cipher_descriptor[x].name, name)) { - LTC_MUTEX_UNLOCK(<c_cipher_mutex); - return x; - } - } - LTC_MUTEX_UNLOCK(<c_cipher_mutex); - return -1; -} - diff --git a/src/misc/crypt/crypt_find_cipher_any.c b/src/misc/crypt/crypt_find_cipher_any.c deleted file mode 100644 index 5089733a..00000000 --- a/src/misc/crypt/crypt_find_cipher_any.c +++ /dev/null @@ -1,38 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_find_cipher_any.c - Find a cipher in the descriptor tables, Tom St Denis -*/ - -/** - Find a cipher flexibly. First by name then if not present by block and key size - @param name The name of the cipher desired - @param blocklen The minimum length of the block cipher desired (octets) - @param keylen The minimum length of the key size desired (octets) - @return >= 0 if found, -1 if not present -*/ -int find_cipher_any(const char *name, int blocklen, int keylen) -{ - int x; - - if(name != NULL) { - x = find_cipher(name); - if (x != -1) return x; - } - - LTC_MUTEX_LOCK(<c_cipher_mutex); - for (x = 0; x < TAB_SIZE; x++) { - if (cipher_descriptor[x].name == NULL) { - continue; - } - if (blocklen <= (int)cipher_descriptor[x].block_length && keylen <= (int)cipher_descriptor[x].max_key_length) { - LTC_MUTEX_UNLOCK(<c_cipher_mutex); - return x; - } - } - LTC_MUTEX_UNLOCK(<c_cipher_mutex); - return -1; -} diff --git a/src/misc/crypt/crypt_find_cipher_id.c b/src/misc/crypt/crypt_find_cipher_id.c deleted file mode 100644 index 4876e4a1..00000000 --- a/src/misc/crypt/crypt_find_cipher_id.c +++ /dev/null @@ -1,28 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_find_cipher_id.c - Find cipher by ID, Tom St Denis -*/ - -/** - Find a cipher by ID number - @param ID The ID (not same as index) of the cipher to find - @return >= 0 if found, -1 if not present -*/ -int find_cipher_id(unsigned char ID) -{ - int x; - LTC_MUTEX_LOCK(<c_cipher_mutex); - for (x = 0; x < TAB_SIZE; x++) { - if (cipher_descriptor[x].ID == ID) { - x = (cipher_descriptor[x].name == NULL) ? -1 : x; - LTC_MUTEX_UNLOCK(<c_cipher_mutex); - return x; - } - } - LTC_MUTEX_UNLOCK(<c_cipher_mutex); - return -1; -} diff --git a/src/misc/crypt/crypt_find_hash.c b/src/misc/crypt/crypt_find_hash.c deleted file mode 100644 index 4d8ae49e..00000000 --- a/src/misc/crypt/crypt_find_hash.c +++ /dev/null @@ -1,28 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_find_hash.c - Find a hash, Tom St Denis -*/ - -/** - Find a registered hash by name - @param name The name of the hash to look for - @return >= 0 if found, -1 if not present -*/ -int find_hash(const char *name) -{ - int x; - LTC_ARGCHK(name != NULL); - LTC_MUTEX_LOCK(<c_hash_mutex); - for (x = 0; x < TAB_SIZE; x++) { - if (hash_descriptor[x].name != NULL && XSTRCMP(hash_descriptor[x].name, name) == 0) { - LTC_MUTEX_UNLOCK(<c_hash_mutex); - return x; - } - } - LTC_MUTEX_UNLOCK(<c_hash_mutex); - return -1; -} diff --git a/src/misc/crypt/crypt_find_hash_any.c b/src/misc/crypt/crypt_find_hash_any.c deleted file mode 100644 index 118e777e..00000000 --- a/src/misc/crypt/crypt_find_hash_any.c +++ /dev/null @@ -1,38 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_find_hash_any.c - Find a hash, Tom St Denis -*/ - -/** - Find a hash flexibly. First by name then if not present by digest size - @param name The name of the hash desired - @param digestlen The minimum length of the digest size (octets) - @return >= 0 if found, -1 if not present -*/ -int find_hash_any(const char *name, int digestlen) -{ - int x, y, z; - LTC_ARGCHK(name != NULL); - - x = find_hash(name); - if (x != -1) return x; - - LTC_MUTEX_LOCK(<c_hash_mutex); - y = MAXBLOCKSIZE+1; - z = -1; - for (x = 0; x < TAB_SIZE; x++) { - if (hash_descriptor[x].name == NULL) { - continue; - } - if ((int)hash_descriptor[x].hashsize >= digestlen && (int)hash_descriptor[x].hashsize < y) { - z = x; - y = hash_descriptor[x].hashsize; - } - } - LTC_MUTEX_UNLOCK(<c_hash_mutex); - return z; -} diff --git a/src/misc/crypt/crypt_find_hash_id.c b/src/misc/crypt/crypt_find_hash_id.c deleted file mode 100644 index 5de40951..00000000 --- a/src/misc/crypt/crypt_find_hash_id.c +++ /dev/null @@ -1,28 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_find_hash_id.c - Find hash by ID, Tom St Denis -*/ - -/** - Find a hash by ID number - @param ID The ID (not same as index) of the hash to find - @return >= 0 if found, -1 if not present -*/ -int find_hash_id(unsigned char ID) -{ - int x; - LTC_MUTEX_LOCK(<c_hash_mutex); - for (x = 0; x < TAB_SIZE; x++) { - if (hash_descriptor[x].ID == ID) { - x = (hash_descriptor[x].name == NULL) ? -1 : x; - LTC_MUTEX_UNLOCK(<c_hash_mutex); - return x; - } - } - LTC_MUTEX_UNLOCK(<c_hash_mutex); - return -1; -} diff --git a/src/misc/crypt/crypt_find_hash_oid.c b/src/misc/crypt/crypt_find_hash_oid.c deleted file mode 100644 index 0e10235b..00000000 --- a/src/misc/crypt/crypt_find_hash_oid.c +++ /dev/null @@ -1,23 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_find_hash_oid.c - Find a hash, Tom St Denis -*/ - -int find_hash_oid(const unsigned long *ID, unsigned long IDlen) -{ - int x; - LTC_ARGCHK(ID != NULL); - LTC_MUTEX_LOCK(<c_hash_mutex); - for (x = 0; x < TAB_SIZE; x++) { - if (hash_descriptor[x].name != NULL && hash_descriptor[x].OIDlen == IDlen && !XMEMCMP(hash_descriptor[x].OID, ID, sizeof(unsigned long) * IDlen)) { - LTC_MUTEX_UNLOCK(<c_hash_mutex); - return x; - } - } - LTC_MUTEX_UNLOCK(<c_hash_mutex); - return -1; -} diff --git a/src/misc/crypt/crypt_find_prng.c b/src/misc/crypt/crypt_find_prng.c deleted file mode 100644 index 7297982b..00000000 --- a/src/misc/crypt/crypt_find_prng.c +++ /dev/null @@ -1,29 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_find_prng.c - Find a PRNG, Tom St Denis -*/ - -/** - Find a registered PRNG by name - @param name The name of the PRNG to look for - @return >= 0 if found, -1 if not present -*/ -int find_prng(const char *name) -{ - int x; - LTC_ARGCHK(name != NULL); - LTC_MUTEX_LOCK(<c_prng_mutex); - for (x = 0; x < TAB_SIZE; x++) { - if ((prng_descriptor[x].name != NULL) && XSTRCMP(prng_descriptor[x].name, name) == 0) { - LTC_MUTEX_UNLOCK(<c_prng_mutex); - return x; - } - } - LTC_MUTEX_UNLOCK(<c_prng_mutex); - return -1; -} - diff --git a/src/misc/crypt/crypt_fsa.c b/src/misc/crypt/crypt_fsa.c deleted file mode 100644 index 0cee0293..00000000 --- a/src/misc/crypt/crypt_fsa.c +++ /dev/null @@ -1,45 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_fsa.c - LibTomCrypt FULL SPEED AHEAD!, Tom St Denis -*/ - -/* format is ltc_mp, cipher_desc, [cipher_desc], NULL, hash_desc, [hash_desc], NULL, prng_desc, [prng_desc], NULL */ -int crypt_fsa(void *mp, ...) -{ - va_list args; - void *p; - - va_start(args, mp); - if (mp != NULL) { - XMEMCPY(<c_mp, mp, sizeof(ltc_mp)); - } - - while ((p = va_arg(args, void*)) != NULL) { - if (register_cipher(p) == -1) { - va_end(args); - return CRYPT_INVALID_CIPHER; - } - } - - while ((p = va_arg(args, void*)) != NULL) { - if (register_hash(p) == -1) { - va_end(args); - return CRYPT_INVALID_HASH; - } - } - - while ((p = va_arg(args, void*)) != NULL) { - if (register_prng(p) == -1) { - va_end(args); - return CRYPT_INVALID_PRNG; - } - } - - va_end(args); - return CRYPT_OK; -} - diff --git a/src/misc/crypt/crypt_hash_descriptor.c b/src/misc/crypt/crypt_hash_descriptor.c deleted file mode 100644 index 08e0238c..00000000 --- a/src/misc/crypt/crypt_hash_descriptor.c +++ /dev/null @@ -1,15 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_hash_descriptor.c - Stores the hash descriptor table, Tom St Denis -*/ - -struct ltc_hash_descriptor hash_descriptor[TAB_SIZE] = { -{ NULL, 0, 0, 0, { 0 }, 0, NULL, NULL, NULL, NULL, NULL } -}; - -LTC_MUTEX_GLOBAL(ltc_hash_mutex) - diff --git a/src/misc/crypt/crypt_hash_is_valid.c b/src/misc/crypt/crypt_hash_is_valid.c deleted file mode 100644 index c2d9fd93..00000000 --- a/src/misc/crypt/crypt_hash_is_valid.c +++ /dev/null @@ -1,24 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_hash_is_valid.c - Determine if hash is valid, Tom St Denis -*/ - -/* - Test if a hash index is valid - @param idx The index of the hash to search for - @return CRYPT_OK if valid -*/ -int hash_is_valid(int idx) -{ - LTC_MUTEX_LOCK(<c_hash_mutex); - if (idx < 0 || idx >= TAB_SIZE || hash_descriptor[idx].name == NULL) { - LTC_MUTEX_UNLOCK(<c_hash_mutex); - return CRYPT_INVALID_HASH; - } - LTC_MUTEX_UNLOCK(<c_hash_mutex); - return CRYPT_OK; -} diff --git a/src/misc/crypt/crypt_inits.c b/src/misc/crypt/crypt_inits.c deleted file mode 100644 index b95c22e1..00000000 --- a/src/misc/crypt/crypt_inits.c +++ /dev/null @@ -1,59 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_inits.c - - Provide math library functions for dynamic languages - like Python - Larry Bugbee, February 2013 -*/ - -int crypt_mp_init(const char* mpi) -{ - if (mpi == NULL) return CRYPT_ERROR; - switch (mpi[0]) { -#ifdef LTM_DESC - case 'l': - case 'L': - ltc_mp = ltm_desc; - return CRYPT_OK; -#endif -#ifdef TFM_DESC - case 't': - case 'T': - ltc_mp = tfm_desc; - return CRYPT_OK; -#endif -#ifdef GMP_DESC - case 'g': - case 'G': - ltc_mp = gmp_desc; - return CRYPT_OK; -#endif -#ifdef EXT_MATH_LIB - case 'e': - case 'E': - { - extern ltc_math_descriptor EXT_MATH_LIB; - ltc_mp = EXT_MATH_LIB; - } - -#if defined(LTC_TEST_DBG) -#define NAME_VALUE(s) #s"="NAME(s) -#define NAME(s) #s - printf("EXT_MATH_LIB = %s\n", NAME_VALUE(EXT_MATH_LIB)); -#undef NAME_VALUE -#undef NAME -#endif - - return CRYPT_OK; -#endif - default: -#if defined(LTC_TEST_DBG) - printf("Unknown/Invalid MPI provider: %s\n", mpi); -#endif - return CRYPT_ERROR; - } -} - diff --git a/src/misc/crypt/crypt_ltc_mp_descriptor.c b/src/misc/crypt/crypt_ltc_mp_descriptor.c deleted file mode 100644 index 760ba634..00000000 --- a/src/misc/crypt/crypt_ltc_mp_descriptor.c +++ /dev/null @@ -1,6 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/* Initialize ltc_mp to nulls, to force allocation on all platforms, including macOS. */ -ltc_math_descriptor ltc_mp = { 0 }; diff --git a/src/misc/crypt/crypt_prng_descriptor.c b/src/misc/crypt/crypt_prng_descriptor.c deleted file mode 100644 index 94c26b8d..00000000 --- a/src/misc/crypt/crypt_prng_descriptor.c +++ /dev/null @@ -1,14 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_prng_descriptor.c - Stores the PRNG descriptors, Tom St Denis -*/ -struct ltc_prng_descriptor prng_descriptor[TAB_SIZE] = { -{ NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } -}; - -LTC_MUTEX_GLOBAL(ltc_prng_mutex) - diff --git a/src/misc/crypt/crypt_prng_is_valid.c b/src/misc/crypt/crypt_prng_is_valid.c deleted file mode 100644 index f1ba67b1..00000000 --- a/src/misc/crypt/crypt_prng_is_valid.c +++ /dev/null @@ -1,24 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_prng_is_valid.c - Determine if PRNG is valid, Tom St Denis -*/ - -/* - Test if a PRNG index is valid - @param idx The index of the PRNG to search for - @return CRYPT_OK if valid -*/ -int prng_is_valid(int idx) -{ - LTC_MUTEX_LOCK(<c_prng_mutex); - if (idx < 0 || idx >= TAB_SIZE || prng_descriptor[idx].name == NULL) { - LTC_MUTEX_UNLOCK(<c_prng_mutex); - return CRYPT_INVALID_PRNG; - } - LTC_MUTEX_UNLOCK(<c_prng_mutex); - return CRYPT_OK; -} diff --git a/src/misc/crypt/crypt_prng_rng_descriptor.c b/src/misc/crypt/crypt_prng_rng_descriptor.c deleted file mode 100644 index 49a456fb..00000000 --- a/src/misc/crypt/crypt_prng_rng_descriptor.c +++ /dev/null @@ -1,7 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_PRNG_ENABLE_LTC_RNG -unsigned long (*ltc_rng)(unsigned char *out, unsigned long outlen, void (*callback)(void)); -#endif diff --git a/src/misc/crypt/crypt_register_all_ciphers.c b/src/misc/crypt/crypt_register_all_ciphers.c deleted file mode 100644 index 5622595d..00000000 --- a/src/misc/crypt/crypt_register_all_ciphers.c +++ /dev/null @@ -1,107 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file crypt_register_all_ciphers.c - - Steffen Jaeckel -*/ - -#define REGISTER_CIPHER(h) do {\ - LTC_ARGCHK(register_cipher(h) != -1); \ -} while(0) - -int register_all_ciphers(void) -{ -#ifdef LTC_RIJNDAEL - /* `aesni_desc` is explicitely not registered, since it's handled from within the `aes_desc` */ -#ifdef ENCRYPT_ONLY - /* alternative would be - * register_cipher(&rijndael_enc_desc); - */ - REGISTER_CIPHER(&aes_enc_desc); -#else - /* alternative would be - * register_cipher(&rijndael_desc); - */ - REGISTER_CIPHER(&aes_desc); -#endif -#endif -#ifdef LTC_BLOWFISH - REGISTER_CIPHER(&blowfish_desc); -#endif -#ifdef LTC_XTEA - REGISTER_CIPHER(&xtea_desc); -#endif -#ifdef LTC_RC5 - REGISTER_CIPHER(&rc5_desc); -#endif -#ifdef LTC_RC6 - REGISTER_CIPHER(&rc6_desc); -#endif -#ifdef LTC_SAFERP - REGISTER_CIPHER(&saferp_desc); -#endif -#ifdef LTC_TWOFISH - REGISTER_CIPHER(&twofish_desc); -#endif -#ifdef LTC_SAFER - REGISTER_CIPHER(&safer_k64_desc); - REGISTER_CIPHER(&safer_sk64_desc); - REGISTER_CIPHER(&safer_k128_desc); - REGISTER_CIPHER(&safer_sk128_desc); -#endif -#ifdef LTC_RC2 - REGISTER_CIPHER(&rc2_desc); -#endif -#ifdef LTC_DES - REGISTER_CIPHER(&des_desc); - REGISTER_CIPHER(&desx_desc); - REGISTER_CIPHER(&des3_desc); -#endif -#ifdef LTC_SM4 - REGISTER_CIPHER(&sm4_desc); -#endif -#ifdef LTC_CAST5 - REGISTER_CIPHER(&cast5_desc); -#endif -#ifdef LTC_NOEKEON - REGISTER_CIPHER(&noekeon_desc); -#endif -#ifdef LTC_SKIPJACK - REGISTER_CIPHER(&skipjack_desc); -#endif -#ifdef LTC_ANUBIS - REGISTER_CIPHER(&anubis_desc); -#endif -#ifdef LTC_KHAZAD - REGISTER_CIPHER(&khazad_desc); -#endif -#ifdef LTC_KSEED - REGISTER_CIPHER(&kseed_desc); -#endif -#ifdef LTC_KASUMI - REGISTER_CIPHER(&kasumi_desc); -#endif -#ifdef LTC_MULTI2 - REGISTER_CIPHER(&multi2_desc); -#endif -#ifdef LTC_CAMELLIA - REGISTER_CIPHER(&camellia_desc); -#endif -#ifdef LTC_IDEA - REGISTER_CIPHER(&idea_desc); -#endif -#ifdef LTC_SERPENT - REGISTER_CIPHER(&serpent_desc); -#endif -#ifdef LTC_TEA - REGISTER_CIPHER(&tea_desc); -#endif -#ifdef LTC_ARIA - REGISTER_CIPHER(&aria_desc); -#endif - return CRYPT_OK; -} diff --git a/src/misc/crypt/crypt_register_all_hashes.c b/src/misc/crypt/crypt_register_all_hashes.c deleted file mode 100644 index a94c76a7..00000000 --- a/src/misc/crypt/crypt_register_all_hashes.c +++ /dev/null @@ -1,122 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file crypt_register_all_hashes.c - - Steffen Jaeckel -*/ - -#define REGISTER_HASH(h) do {\ - LTC_ARGCHK(register_hash(h) != -1); \ -} while(0) - -int register_all_hashes(void) -{ -#ifdef LTC_SHA512 - /* `sha512_desc` does the multiplexing into `sha512_x86_desc` resp. `sha512_portable_desc` depending on the capabilities of the CPU. */ - REGISTER_HASH(&sha512_desc); -#endif -#ifdef LTC_SHA256 - /* `sha256_desc` does the multiplexing into `sha256_x86_desc` resp. `sha256_portable_desc` - * depending on the capabilities of the CPU. - */ - REGISTER_HASH(&sha256_desc); -#endif -#ifdef LTC_SHA3 - REGISTER_HASH(&sha3_512_desc); - REGISTER_HASH(&sha3_384_desc); - REGISTER_HASH(&sha3_256_desc); - REGISTER_HASH(&sha3_224_desc); - REGISTER_HASH(&shake128_desc); - REGISTER_HASH(&shake256_desc); -#endif -#ifdef LTC_SHA512_256 - /* `sha512_256_desc` does the multiplexing into `sha512_256_x86_desc` resp. `sha512_256_portable_desc` depending on the capabilities of the CPU. */ - REGISTER_HASH(&sha512_256_desc); -#endif -#ifdef LTC_SHA512_224 - /* `sha512_224_desc` does the multiplexing into `sha512_224_x86_desc` resp. `sha512_224_portable_desc` depending on the capabilities of the CPU. */ - REGISTER_HASH(&sha512_224_desc); -#endif -#ifdef LTC_SHA224 - /* `sha224_desc` does the multiplexing into `sha224_x86_desc` resp. `sha224_portable_desc` - * depending on the capabilities of the CPU. - */ - REGISTER_HASH(&sha224_desc); -#endif -#ifdef LTC_SHA384 - /* `sha384_desc` does the multiplexing into `sha384_x86_desc` resp. `sha384_portable_desc` depending on the capabilities of the CPU. */ - REGISTER_HASH(&sha384_desc); -#endif -#ifdef LTC_SHA1 - /* `sha1_desc` does the multiplexing into `sha1_x86_desc` resp. `sha1_portable_desc` - * depending on the capabilities of the CPU. - */ - REGISTER_HASH(&sha1_desc); -#endif -#ifdef LTC_MD5 - REGISTER_HASH(&md5_desc); -#endif -#ifdef LTC_BLAKE2S - REGISTER_HASH(&blake2s_128_desc); - REGISTER_HASH(&blake2s_160_desc); - REGISTER_HASH(&blake2s_224_desc); - REGISTER_HASH(&blake2s_256_desc); -#endif -#ifdef LTC_BLAKE2B - REGISTER_HASH(&blake2b_160_desc); - REGISTER_HASH(&blake2b_256_desc); - REGISTER_HASH(&blake2b_384_desc); - REGISTER_HASH(&blake2b_512_desc); -#endif -#ifdef LTC_BLAKE3 - REGISTER_HASH(&blake3_desc); -#endif -#ifdef LTC_KECCAK - REGISTER_HASH(&keccak224_desc); - REGISTER_HASH(&keccak256_desc); - REGISTER_HASH(&keccak384_desc); - REGISTER_HASH(&keccak512_desc); -#endif -#ifdef LTC_RIPEMD128 - REGISTER_HASH(&rmd128_desc); -#endif -#ifdef LTC_RIPEMD160 - REGISTER_HASH(&rmd160_desc); -#endif -#ifdef LTC_RIPEMD256 - REGISTER_HASH(&rmd256_desc); -#endif -#ifdef LTC_RIPEMD320 - REGISTER_HASH(&rmd320_desc); -#endif -#ifdef LTC_WHIRLPOOL - REGISTER_HASH(&whirlpool_desc); -#endif -#ifdef LTC_TIGER - REGISTER_HASH(&tiger_desc); - REGISTER_HASH(&tiger2_desc); -#endif -#ifdef LTC_MD2 - REGISTER_HASH(&md2_desc); -#endif -#ifdef LTC_MD4 - REGISTER_HASH(&md4_desc); -#endif -#ifdef LTC_SM3 - REGISTER_HASH(&sm3_desc); -#endif -#ifdef LTC_CHC_HASH - { - int aes_index = find_cipher_any("aes", 8, 16); - if (aes_index != -1) { - REGISTER_HASH(&chc_desc); - LTC_ARGCHK(chc_register(aes_index) == CRYPT_OK); - } - } -#endif - return CRYPT_OK; -} diff --git a/src/misc/crypt/crypt_register_all_prngs.c b/src/misc/crypt/crypt_register_all_prngs.c deleted file mode 100644 index 4a2e2ef5..00000000 --- a/src/misc/crypt/crypt_register_all_prngs.c +++ /dev/null @@ -1,38 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file crypt_register_all_prngs.c - - Steffen Jaeckel -*/ - -#define REGISTER_PRNG(h) do {\ - LTC_ARGCHK(register_prng(h) != -1); \ -} while(0) - -int register_all_prngs(void) -{ -#ifdef LTC_YARROW - REGISTER_PRNG(&yarrow_desc); -#endif -#ifdef LTC_FORTUNA - REGISTER_PRNG(&fortuna_desc); -#endif -#ifdef LTC_RC4 - REGISTER_PRNG(&rc4_desc); -#endif -#ifdef LTC_CHACHA20_PRNG - REGISTER_PRNG(&chacha20_prng_desc); -#endif -#ifdef LTC_SOBER128 - REGISTER_PRNG(&sober128_desc); -#endif -#ifdef LTC_SPRNG - REGISTER_PRNG(&sprng_desc); -#endif - - return CRYPT_OK; -} diff --git a/src/misc/crypt/crypt_register_cipher.c b/src/misc/crypt/crypt_register_cipher.c deleted file mode 100644 index 6998ca4c..00000000 --- a/src/misc/crypt/crypt_register_cipher.c +++ /dev/null @@ -1,44 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_register_cipher.c - Register a cipher, Tom St Denis -*/ - -/** - Register a cipher with the descriptor table - @param cipher The cipher you wish to register - @return value >= 0 if successfully added (or already present), -1 if unsuccessful -*/ -int register_cipher(const struct ltc_cipher_descriptor *cipher) -{ - int x, blank = -1; - - LTC_ARGCHK(cipher != NULL); - - if (cipher->name == NULL) - return -1; - - /* is it already registered? */ - LTC_MUTEX_LOCK(<c_cipher_mutex); - for (x = 0; x < TAB_SIZE; x++) { - if (cipher_descriptor[x].name != NULL && cipher_descriptor[x].ID == cipher->ID) { - LTC_MUTEX_UNLOCK(<c_cipher_mutex); - return x; - } - if (cipher_descriptor[x].name == NULL && blank == -1) { - blank = x; - } - } - - /* find a blank spot */ - if (blank != -1) { - XMEMCPY(&cipher_descriptor[blank], cipher, sizeof(struct ltc_cipher_descriptor)); - } - - /* no spot */ - LTC_MUTEX_UNLOCK(<c_cipher_mutex); - return blank; -} diff --git a/src/misc/crypt/crypt_register_hash.c b/src/misc/crypt/crypt_register_hash.c deleted file mode 100644 index 6390df9d..00000000 --- a/src/misc/crypt/crypt_register_hash.c +++ /dev/null @@ -1,44 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_register_hash.c - Register a HASH, Tom St Denis -*/ - -/** - Register a hash with the descriptor table - @param hash The hash you wish to register - @return value >= 0 if successfully added (or already present), -1 if unsuccessful -*/ -int register_hash(const struct ltc_hash_descriptor *hash) -{ - int x, blank = -1; - - LTC_ARGCHK(hash != NULL); - - if (hash->name == NULL) - return -1; - - /* is it already registered? */ - LTC_MUTEX_LOCK(<c_hash_mutex); - for (x = 0; x < TAB_SIZE; x++) { - if (XMEMCMP(&hash_descriptor[x], hash, sizeof(struct ltc_hash_descriptor)) == 0) { - LTC_MUTEX_UNLOCK(<c_hash_mutex); - return x; - } - if (hash_descriptor[x].name == NULL && blank == -1) { - blank = x; - } - } - - /* fill in blank spot */ - if (blank != -1) { - XMEMCPY(&hash_descriptor[blank], hash, sizeof(struct ltc_hash_descriptor)); - } - - /* no spot */ - LTC_MUTEX_UNLOCK(<c_hash_mutex); - return blank; -} diff --git a/src/misc/crypt/crypt_register_prng.c b/src/misc/crypt/crypt_register_prng.c deleted file mode 100644 index fb0782eb..00000000 --- a/src/misc/crypt/crypt_register_prng.c +++ /dev/null @@ -1,44 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_register_prng.c - Register a PRNG, Tom St Denis -*/ - -/** - Register a PRNG with the descriptor table - @param prng The PRNG you wish to register - @return value >= 0 if successfully added (or already present), -1 if unsuccessful -*/ -int register_prng(const struct ltc_prng_descriptor *prng) -{ - int x, blank = -1; - - LTC_ARGCHK(prng != NULL); - - if (prng->name == NULL) - return -1; - - /* is it already registered? */ - LTC_MUTEX_LOCK(<c_prng_mutex); - for (x = 0; x < TAB_SIZE; x++) { - if (XMEMCMP(&prng_descriptor[x], prng, sizeof(struct ltc_prng_descriptor)) == 0) { - LTC_MUTEX_UNLOCK(<c_prng_mutex); - return x; - } - if (prng_descriptor[x].name == NULL && blank == -1) { - blank = x; - } - } - - /* find a blank spot */ - if (blank != -1) { - XMEMCPY(&prng_descriptor[blank], prng, sizeof(struct ltc_prng_descriptor)); - } - - /* no spot */ - LTC_MUTEX_UNLOCK(<c_prng_mutex); - return blank; -} diff --git a/src/misc/crypt/crypt_sizes.c b/src/misc/crypt/crypt_sizes.c deleted file mode 100644 index 47830aed..00000000 --- a/src/misc/crypt/crypt_sizes.c +++ /dev/null @@ -1,351 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_sizes.c - - Make various struct sizes available to dynamic languages - like Python - Larry Bugbee, February 2013 - - LB - Dec 2013 - revised to include compiler define options -*/ - - -typedef struct { - const char *name; - const unsigned int size; -} crypt_size; - -#define SZ_STRINGIFY_S(s) { #s, sizeof(struct s) } -#define SZ_STRINGIFY_T(s) { #s, sizeof(s) } - -static const crypt_size s_crypt_sizes[] = { - /* hash state sizes */ - SZ_STRINGIFY_S(ltc_hash_descriptor), - SZ_STRINGIFY_T(hash_state), -#ifdef LTC_CHC_HASH - SZ_STRINGIFY_S(chc_state), -#endif -#ifdef LTC_WHIRLPOOL - SZ_STRINGIFY_S(whirlpool_state), -#endif -#ifdef LTC_SHA3 - SZ_STRINGIFY_S(sha3_state), -#endif -#ifdef LTC_SHA512 - SZ_STRINGIFY_S(sha512_state), -#endif -#ifdef LTC_SHA256 - SZ_STRINGIFY_S(sha256_state), -#endif -#ifdef LTC_SHA1 - SZ_STRINGIFY_S(sha1_state), -#endif -#ifdef LTC_MD5 - SZ_STRINGIFY_S(md5_state), -#endif -#ifdef LTC_MD4 - SZ_STRINGIFY_S(md4_state), -#endif -#ifdef LTC_MD2 - SZ_STRINGIFY_S(md2_state), -#endif -#ifdef LTC_TIGER - SZ_STRINGIFY_S(tiger_state), -#endif -#ifdef LTC_RIPEMD128 - SZ_STRINGIFY_S(rmd128_state), -#endif -#ifdef LTC_RIPEMD160 - SZ_STRINGIFY_S(rmd160_state), -#endif -#ifdef LTC_RIPEMD256 - SZ_STRINGIFY_S(rmd256_state), -#endif -#ifdef LTC_RIPEMD320 - SZ_STRINGIFY_S(rmd320_state), -#endif -#ifdef LTC_BLAKE2S - SZ_STRINGIFY_S(blake2s_state), -#endif -#ifdef LTC_BLAKE2B - SZ_STRINGIFY_S(blake2b_state), -#endif - - /* block cipher key sizes */ - SZ_STRINGIFY_S(ltc_cipher_descriptor), - SZ_STRINGIFY_T(symmetric_key), -#ifdef LTC_ANUBIS - SZ_STRINGIFY_S(anubis_key), -#endif -#ifdef LTC_CAMELLIA - SZ_STRINGIFY_S(camellia_key), -#endif -#ifdef LTC_BLOWFISH - SZ_STRINGIFY_S(blowfish_key), -#endif -#ifdef LTC_CAST5 - SZ_STRINGIFY_S(cast5_key), -#endif -#ifdef LTC_DES - SZ_STRINGIFY_S(des_key), - SZ_STRINGIFY_S(des3_key), -#endif -#ifdef LTC_SM4 - SZ_STRINGIFY_S(sm4_key), -#endif -#ifdef LTC_IDEA - SZ_STRINGIFY_S(idea_key), -#endif -#ifdef LTC_KASUMI - SZ_STRINGIFY_S(kasumi_key), -#endif -#ifdef LTC_KHAZAD - SZ_STRINGIFY_S(khazad_key), -#endif -#ifdef LTC_KSEED - SZ_STRINGIFY_S(kseed_key), -#endif -#ifdef LTC_MULTI2 - SZ_STRINGIFY_S(multi2_key), -#endif -#ifdef LTC_NOEKEON - SZ_STRINGIFY_S(noekeon_key), -#endif -#ifdef LTC_RC2 - SZ_STRINGIFY_S(rc2_key), -#endif -#ifdef LTC_RC5 - SZ_STRINGIFY_S(rc5_key), -#endif -#ifdef LTC_RC6 - SZ_STRINGIFY_S(rc6_key), -#endif -#ifdef LTC_SERPENT - SZ_STRINGIFY_S(serpent_key), -#endif -#ifdef LTC_SKIPJACK - SZ_STRINGIFY_S(skipjack_key), -#endif -#ifdef LTC_XTEA - SZ_STRINGIFY_S(xtea_key), -#endif -#ifdef LTC_RIJNDAEL - SZ_STRINGIFY_S(rijndael_key), -#endif -#ifdef LTC_SAFER - SZ_STRINGIFY_S(safer_key), -#endif -#ifdef LTC_SAFERP - SZ_STRINGIFY_S(saferp_key), -#endif -#ifdef LTC_TWOFISH - SZ_STRINGIFY_S(twofish_key), -#endif - - /* mode sizes */ -#ifdef LTC_ECB_MODE - SZ_STRINGIFY_T(symmetric_ECB), -#endif -#ifdef LTC_CFB_MODE - SZ_STRINGIFY_T(symmetric_CFB), -#endif -#ifdef LTC_OFB_MODE - SZ_STRINGIFY_T(symmetric_OFB), -#endif -#ifdef LTC_CBC_MODE - SZ_STRINGIFY_T(symmetric_CBC), -#endif -#ifdef LTC_CTR_MODE - SZ_STRINGIFY_T(symmetric_CTR), -#endif -#ifdef LTC_LRW_MODE - SZ_STRINGIFY_T(symmetric_LRW), -#endif -#ifdef LTC_F8_MODE - SZ_STRINGIFY_T(symmetric_F8), -#endif -#ifdef LTC_XTS_MODE - SZ_STRINGIFY_T(symmetric_xts), -#endif - - /* stream cipher sizes */ -#ifdef LTC_CHACHA - SZ_STRINGIFY_T(chacha_state), -#endif -#ifdef LTC_SALSA20 - SZ_STRINGIFY_T(salsa20_state), -#endif -#ifdef LTC_SOSEMANUK - SZ_STRINGIFY_T(sosemanuk_state), -#endif -#ifdef LTC_RABBIT - SZ_STRINGIFY_T(rabbit_state), -#endif -#ifdef LTC_RC4_STREAM - SZ_STRINGIFY_T(rc4_state), -#endif -#ifdef LTC_SOBER128_STREAM - SZ_STRINGIFY_T(sober128_state), -#endif - - /* MAC sizes -- no states for ccm, lrw */ -#ifdef LTC_HMAC - SZ_STRINGIFY_T(hmac_state), -#endif -#ifdef LTC_OMAC - SZ_STRINGIFY_T(omac_state), -#endif -#ifdef LTC_PMAC - SZ_STRINGIFY_T(pmac_state), -#endif -#ifdef LTC_POLY1305 - SZ_STRINGIFY_T(poly1305_state), -#endif -#ifdef LTC_EAX_MODE - SZ_STRINGIFY_T(eax_state), -#endif -#ifdef LTC_OCB3_MODE - SZ_STRINGIFY_T(ocb3_state), -#endif -#ifdef LTC_CCM_MODE - SZ_STRINGIFY_T(ccm_state), -#endif -#ifdef LTC_GCM_MODE - SZ_STRINGIFY_T(gcm_state), -#endif -#ifdef LTC_PELICAN - SZ_STRINGIFY_T(pelican_state), -#endif -#ifdef LTC_XCBC - SZ_STRINGIFY_T(xcbc_state), -#endif -#ifdef LTC_F9_MODE - SZ_STRINGIFY_T(f9_state), -#endif -#ifdef LTC_CHACHA20POLY1305_MODE - SZ_STRINGIFY_T(chacha20poly1305_state), -#endif - - /* asymmetric keys */ -#ifdef LTC_MRSA - SZ_STRINGIFY_T(rsa_key), -#endif -#ifdef LTC_MDSA - SZ_STRINGIFY_T(dsa_key), -#endif -#ifdef LTC_MDH - SZ_STRINGIFY_T(dh_key), -#endif -#ifdef LTC_MECC - SZ_STRINGIFY_T(ltc_ecc_curve), - SZ_STRINGIFY_T(ecc_point), - SZ_STRINGIFY_T(ecc_key), -#endif - - /* DER handling */ -#ifdef LTC_DER - SZ_STRINGIFY_T(ltc_asn1_list), /* a list entry */ - SZ_STRINGIFY_T(ltc_utctime), - SZ_STRINGIFY_T(ltc_generalizedtime), -#endif - - /* prng state sizes */ - SZ_STRINGIFY_S(ltc_prng_descriptor), - SZ_STRINGIFY_T(prng_state), -#ifdef LTC_FORTUNA - SZ_STRINGIFY_S(fortuna_prng), -#endif -#ifdef LTC_CHACHA20_PRNG - SZ_STRINGIFY_S(chacha20_prng), -#endif -#ifdef LTC_RC4 - SZ_STRINGIFY_S(rc4_prng), -#endif -#ifdef LTC_SOBER128 - SZ_STRINGIFY_S(sober128_prng), -#endif -#ifdef LTC_YARROW - SZ_STRINGIFY_S(yarrow_prng), -#endif - /* sprng has no state as it uses other potentially available sources */ - /* like /dev/random. See Developers Guide for more info. */ - -#ifdef LTC_ADLER32 - SZ_STRINGIFY_T(adler32_state), -#endif -#ifdef LTC_CRC32 - SZ_STRINGIFY_T(crc32_state), -#endif - - SZ_STRINGIFY_T(ltc_mp_digit), - SZ_STRINGIFY_T(ltc_math_descriptor) - -}; - -/* crypt_get_size() - * sizeout will be the size (bytes) of the named struct or union - * return -1 if named item not found - */ -int crypt_get_size(const char* namein, unsigned int *sizeout) { - int i; - int count = sizeof(s_crypt_sizes) / sizeof(s_crypt_sizes[0]); - for (i=0; i *names_list_size) { - return -1; - } - /* build the names list */ - ptr = names_list; - for (i=0; i total_len) return -1; - total_len -= number_len; - ptr += number_len; - } - /* to remove the trailing new-line */ - ptr -= 1; - *ptr = 0; - } - return 0; -} - diff --git a/src/misc/crypt/crypt_unregister_cipher.c b/src/misc/crypt/crypt_unregister_cipher.c deleted file mode 100644 index bebf9206..00000000 --- a/src/misc/crypt/crypt_unregister_cipher.c +++ /dev/null @@ -1,33 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_unregister_cipher.c - Unregister a cipher, Tom St Denis -*/ - -/** - Unregister a cipher from the descriptor table - @param cipher The cipher descriptor to remove - @return CRYPT_OK on success -*/ -int unregister_cipher(const struct ltc_cipher_descriptor *cipher) -{ - int x; - - LTC_ARGCHK(cipher != NULL); - - /* is it already registered? */ - LTC_MUTEX_LOCK(<c_cipher_mutex); - for (x = 0; x < TAB_SIZE; x++) { - if (XMEMCMP(&cipher_descriptor[x], cipher, sizeof(struct ltc_cipher_descriptor)) == 0) { - cipher_descriptor[x].name = NULL; - cipher_descriptor[x].ID = 255; - LTC_MUTEX_UNLOCK(<c_cipher_mutex); - return CRYPT_OK; - } - } - LTC_MUTEX_UNLOCK(<c_cipher_mutex); - return CRYPT_ERROR; -} diff --git a/src/misc/crypt/crypt_unregister_hash.c b/src/misc/crypt/crypt_unregister_hash.c deleted file mode 100644 index c2374d01..00000000 --- a/src/misc/crypt/crypt_unregister_hash.c +++ /dev/null @@ -1,32 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_unregister_hash.c - Unregister a hash, Tom St Denis -*/ - -/** - Unregister a hash from the descriptor table - @param hash The hash descriptor to remove - @return CRYPT_OK on success -*/ -int unregister_hash(const struct ltc_hash_descriptor *hash) -{ - int x; - - LTC_ARGCHK(hash != NULL); - - /* is it already registered? */ - LTC_MUTEX_LOCK(<c_hash_mutex); - for (x = 0; x < TAB_SIZE; x++) { - if (XMEMCMP(&hash_descriptor[x], hash, sizeof(struct ltc_hash_descriptor)) == 0) { - hash_descriptor[x].name = NULL; - LTC_MUTEX_UNLOCK(<c_hash_mutex); - return CRYPT_OK; - } - } - LTC_MUTEX_UNLOCK(<c_hash_mutex); - return CRYPT_ERROR; -} diff --git a/src/misc/crypt/crypt_unregister_prng.c b/src/misc/crypt/crypt_unregister_prng.c deleted file mode 100644 index 1aa11e00..00000000 --- a/src/misc/crypt/crypt_unregister_prng.c +++ /dev/null @@ -1,32 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file crypt_unregister_prng.c - Unregister a PRNG, Tom St Denis -*/ - -/** - Unregister a PRNG from the descriptor table - @param prng The PRNG descriptor to remove - @return CRYPT_OK on success -*/ -int unregister_prng(const struct ltc_prng_descriptor *prng) -{ - int x; - - LTC_ARGCHK(prng != NULL); - - /* is it already registered? */ - LTC_MUTEX_LOCK(<c_prng_mutex); - for (x = 0; x < TAB_SIZE; x++) { - if (XMEMCMP(&prng_descriptor[x], prng, sizeof(struct ltc_prng_descriptor)) == 0) { - prng_descriptor[x].name = NULL; - LTC_MUTEX_UNLOCK(<c_prng_mutex); - return CRYPT_OK; - } - } - LTC_MUTEX_UNLOCK(<c_prng_mutex); - return CRYPT_ERROR; -} diff --git a/src/misc/deprecated.c b/src/misc/deprecated.c deleted file mode 100644 index 6043007a..00000000 --- a/src/misc/deprecated.c +++ /dev/null @@ -1,444 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifndef LTC_NO_DEPRECATED_APIS - -#ifdef LTC_MECC -/** - Sign a message digest (ANSI X9.62 format) - @param in The message digest to sign - @param inlen The length of the digest - @param out [out] The destination for the signature - @param outlen [in/out] The max size and resulting size of the signature - @param prng An active PRNG state - @param wprng The index of the PRNG you wish to use - @param key A private ECC key - @return CRYPT_OK if successful -*/ -int ecc_sign_hash(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int wprng, const ecc_key *key) -{ - return ltc_ecc_sign_hash(in, inlen, out, outlen, prng, wprng, key); -} - -/** - Verify an ECC signature (ANSI X9.62 format) - @param sig The signature to verify - @param siglen The length of the signature (octets) - @param hash The hash (message digest) that was signed - @param hashlen The length of the hash (octets) - @param stat [out] Result of signature, 1==valid, 0==invalid - @param key The corresponding public ECC key - @return CRYPT_OK if successful (even if the signature is not valid) -*/ -int ecc_verify_hash(const unsigned char *sig, - unsigned long siglen, - const unsigned char *hash, - unsigned long hashlen, - int *stat, - const ecc_key *key) -{ - return ltc_ecc_verify_hash(sig, siglen, hash, hashlen, stat, key); -} - -/** - Sign a message digest (RFC7518 format) - @param in The message digest to sign - @param inlen The length of the digest - @param out [out] The destination for the signature - @param outlen [in/out] The max size and resulting size of the signature - @param opts The signature options that shall be applied - @param key A private ECC key - @return CRYPT_OK if successful -*/ -int ecc_sign_hash_rfc7518(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int wprng, const ecc_key *key) -{ - return ltc_ecc_sign_hash_rfc7518(in, inlen, out, outlen, prng, wprng, key); -} - -/** - Verify an ECC signature (RFC7518 format) - @param sig The signature to verify - @param siglen The length of the signature (octets) - @param hash The hash (message digest) that was signed - @param hashlen The length of the hash (octets) - @param stat [out] Result of signature, 1==valid, 0==invalid - @param key The corresponding public ECC key - @return CRYPT_OK if successful (even if the signature is not valid) -*/ -int ecc_verify_hash_rfc7518(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int *stat, const ecc_key *key) -{ - return ltc_ecc_verify_hash_rfc7518(sig, siglen, hash, hashlen, stat, key); -} -#endif /* LTC_MECC */ - -#ifdef LTC_MRSA -/** - (PKCS #1 v2.0) OAEP pad then encrypt - @param in The plaintext - @param inlen The length of the plaintext (octets) - @param out [out] The ciphertext - @param outlen [in/out] The max size and resulting size of the ciphertext - @param lparam The system "lparam" for the encryption - @param lparamlen The length of lparam (octets) - @param prng An active PRNG - @param prng_idx The index of the desired prng - @param hash_idx The index of the desired hash - @param padding Type of padding (LTC_PKCS_1_OAEP or LTC_PKCS_1_V1_5) - @param key The RSA key to encrypt to - @return CRYPT_OK if successful -*/ -int rsa_encrypt_key_ex(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - const unsigned char *lparam, unsigned long lparamlen, - prng_state *prng, int prng_idx, - int hash_idx, int padding, - const rsa_key *key) -{ - int err; - ltc_rsa_op_parameters params; - if ((err = rsa_args_to_op_params(lparam, lparamlen, - prng, prng_idx, - hash_idx, - padding, 0, - ¶ms)) != CRYPT_OK) { - return err; - } - return rsa_encrypt_key_v2(in, inlen, out, outlen, ¶ms, key); -} - -/** - PKCS #1 decrypt then v1.5 or OAEP depad - @param in The ciphertext - @param inlen The length of the ciphertext (octets) - @param out [out] The plaintext - @param outlen [in/out] The max size and resulting size of the plaintext (octets) - @param lparam The system "lparam" value - @param lparamlen The length of the lparam value (octets) - @param hash_idx The hash algorithm used - @param padding Type of padding (LTC_PKCS_1_OAEP or LTC_PKCS_1_V1_5) - @param stat [out] Result of the decryption, 1==valid, 0==invalid - @param key The corresponding private RSA key - @return CRYPT_OK if succcessul (even if invalid) -*/ -int rsa_decrypt_key_ex(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - const unsigned char *lparam, unsigned long lparamlen, - int hash_idx, int padding, - int *stat, const rsa_key *key) -{ - int err; - ltc_rsa_op_parameters params; - if ((err = rsa_args_to_op_params(lparam, lparamlen, - NULL, -1, - hash_idx, - padding, 0, - ¶ms)) != CRYPT_OK) { - return err; - } - return rsa_decrypt_key_v2(in, inlen, out, outlen, ¶ms, stat, key); -} - -/** - PKCS #1 pad then sign - @param in The hash to sign - @param inlen The length of the hash to sign (octets) - @param out [out] The signature - @param outlen [in/out] The max size and resulting size of the signature - @param padding Type of padding (LTC_PKCS_1_PSS, LTC_PKCS_1_V1_5 or LTC_PKCS_1_V1_5_NA1) - @param prng An active PRNG state - @param prng_idx The index of the PRNG desired - @param hash_idx The index of the hash desired - @param saltlen The length of the salt desired (octets) - @param key The private RSA key to use - @return CRYPT_OK if successful -*/ -int rsa_sign_hash_ex(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - int padding, - prng_state *prng, int prng_idx, - int hash_idx, unsigned long saltlen, - const rsa_key *key) -{ - int err; - ltc_rsa_op_parameters params; - if ((err = rsa_args_to_op_params(NULL, 0, - prng, prng_idx, - hash_idx, - padding, saltlen, - ¶ms)) != CRYPT_OK) { - return err; - } - return rsa_sign_hash_v2(in, inlen, out, outlen, ¶ms, key); -} - -/** - PKCS #1 de-sign then v1.5 or PSS depad - @param sig The signature data - @param siglen The length of the signature data (octets) - @param hash The hash of the message that was signed - @param hashlen The length of the hash of the message that was signed (octets) - @param padding Type of padding (LTC_PKCS_1_PSS, LTC_PKCS_1_V1_5 or LTC_PKCS_1_V1_5_NA1) - @param hash_idx The index of the desired hash - @param saltlen The length of the salt used during signature - @param stat [out] The result of the signature comparison, 1==valid, 0==invalid - @param key The public RSA key corresponding to the key that performed the signature - @return CRYPT_OK on success (even if the signature is invalid) -*/ -int rsa_verify_hash_ex(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int padding, - int hash_idx, unsigned long saltlen, - int *stat, const rsa_key *key) -{ - int err; - ltc_rsa_op_parameters params; - if ((err = rsa_args_to_op_params(NULL, 0, - NULL, -1, - hash_idx, - padding, saltlen, - ¶ms)) != CRYPT_OK) { - return err; - } - return rsa_verify_hash_v2(sig, siglen, hash, hashlen, ¶ms, stat, key); -} - -int rsa_args_to_op_params(const unsigned char *lparam, unsigned long lparamlen, - prng_state *prng, int prng_idx, int hash_idx, - int padding, unsigned long saltlen, - ltc_rsa_op_parameters *params) -{ - int err; - ltc_rsa_op_parameters p = { - .u.crypt.lparam = lparam, - .u.crypt.lparamlen = lparamlen, - .prng = prng, - .wprng = prng_idx, - .padding = padding, - .params.saltlen = saltlen, - .params.hash_idx = -1, - .params.mgf1_hash_idx = -1, - }; - if ((err = hash_is_valid(hash_idx)) == CRYPT_OK) { - p.params.hash_idx = hash_idx; - p.params.mgf1_hash_idx = hash_idx; - *params = p; - } else if (padding == LTC_PKCS_1_V1_5 || padding == LTC_PKCS_1_V1_5_NA1) { - /* PKCS#1 1.5 does not necessarily require a hash */ - err = CRYPT_OK; - *params = p; - } - return err; -} -#endif /* LTC_MRSA */ - - -#ifdef LTC_PKCS_1 -/** - Perform PKCS #1 MGF1 (internal) - @param hash_idx The index of the hash desired - @param seed The seed for MGF1 - @param seedlen The length of the seed - @param mask [out] The destination - @param masklen The length of the mask desired - @return CRYPT_OK if successful -*/ -int pkcs_1_mgf1(int hash_idx, - const unsigned char *seed, unsigned long seedlen, - unsigned char *mask, unsigned long masklen) -{ - return ltc_pkcs_1_mgf1(hash_idx, seed, seedlen, mask, masklen); -} -/** - PKCS #1 v2.00 OAEP encode - @param msg The data to encode - @param msglen The length of the data to encode (octets) - @param lparam A session or system parameter (can be NULL) - @param lparamlen The length of the lparam data - @param modulus_bitlen The bit length of the RSA modulus - @param prng An active PRNG state - @param prng_idx The index of the PRNG desired - @param hash_idx The index of the hash desired - @param out [out] The destination for the encoded data - @param outlen [in/out] The max size and resulting size of the encoded data - @return CRYPT_OK if successful -*/ -int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, - const unsigned char *lparam, unsigned long lparamlen, - unsigned long modulus_bitlen, prng_state *prng, - int prng_idx, int hash_idx, - unsigned char *out, unsigned long *outlen) -{ - int err; - ltc_rsa_op_parameters params; - if ((err = rsa_args_to_op_params(lparam, lparamlen, - prng, prng_idx, - hash_idx, - LTC_PKCS_1_OAEP, 0, - ¶ms)) != CRYPT_OK) { - return err; - } - return ltc_pkcs_1_oaep_encode(msg, msglen, ¶ms, modulus_bitlen, out, outlen); -} - -/** - PKCS #1 v2.00 OAEP decode - @param msg The encoded data to decode - @param msglen The length of the encoded data (octets) - @param lparam The session or system data (can be NULL) - @param lparamlen The length of the lparam - @param modulus_bitlen The bit length of the RSA modulus - @param mgf_hash The hash algorithm used for the MGF - @param lparam_hash The hash algorithm used when hashing the lparam (can be -1) - @param out [out] Destination of decoding - @param outlen [in/out] The max size and resulting size of the decoding - @param res [out] Result of decoding, 1==valid, 0==invalid - @return CRYPT_OK if successful -*/ -int pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, - const unsigned char *lparam, unsigned long lparamlen, - unsigned long modulus_bitlen, int hash_idx, - unsigned char *out, unsigned long *outlen, - int *res) -{ - int err; - ltc_rsa_op_parameters params; - if ((err = rsa_args_to_op_params(lparam, lparamlen, - NULL, -1, - hash_idx, - LTC_PKCS_1_OAEP, 0, - ¶ms)) != CRYPT_OK) { - return err; - } - return ltc_pkcs_1_oaep_decode(msg, msglen, ¶ms, modulus_bitlen, out, outlen, res); -} - -/** - PKCS #1 v2.00 Signature Encoding using MGF1 and both hashes are the same - @param msghash The hash to encode - @param msghashlen The length of the hash (octets) - @param saltlen The length of the salt desired (octets) - @param prng An active PRNG context - @param prng_idx The index of the PRNG desired - @param hash_idx The index of the hash desired - @param modulus_bitlen The bit length of the RSA modulus - @param out [out] The destination of the encoding - @param outlen [in/out] The max size and resulting size of the encoded data - @return CRYPT_OK if successful -*/ -int pkcs_1_pss_encode(const unsigned char *msghash, unsigned long msghashlen, - unsigned long saltlen, prng_state *prng, - int prng_idx, int hash_idx, - unsigned long modulus_bitlen, - unsigned char *out, unsigned long *outlen) -{ - int err; - ltc_rsa_op_parameters params; - if ((err = rsa_args_to_op_params(NULL, 0, - prng, prng_idx, - hash_idx, - LTC_PKCS_1_PSS, saltlen, - ¶ms)) != CRYPT_OK) { - return err; - } - return ltc_pkcs_1_pss_encode_mgf1(msghash, msghashlen, ¶ms, modulus_bitlen, out, outlen); -} - -/** - PKCS #1 v2.00 PSS decode - @param msghash The hash to verify - @param msghashlen The length of the hash (octets) - @param sig The signature data (encoded data) - @param siglen The length of the signature data (octets) - @param saltlen The length of the salt used (octets) - @param hash_idx The index of the hash desired - @param modulus_bitlen The bit length of the RSA modulus - @param res [out] The result of the comparison, 1==valid, 0==invalid - @return CRYPT_OK if successful (even if the comparison failed) -*/ -int pkcs_1_pss_decode(const unsigned char *msghash, unsigned long msghashlen, - const unsigned char *sig, unsigned long siglen, - unsigned long saltlen, int hash_idx, - unsigned long modulus_bitlen, int *res) -{ - int err; - ltc_rsa_op_parameters params; - if ((err = rsa_args_to_op_params(NULL, 0, - NULL, -1, - hash_idx, - LTC_PKCS_1_PSS, saltlen, - ¶ms)) != CRYPT_OK) { - return err; - } - return ltc_pkcs_1_pss_decode_mgf1(msghash, msghashlen, sig, siglen, ¶ms, modulus_bitlen, res); -} - - -/*! \brief PKCS #1 v1.5 encode. - * - * \param msg The data to encode - * \param msglen The length of the data to encode (octets) - * \param block_type Block type to use in padding (\sa ltc_pkcs_1_v1_5_blocks) - * \param modulus_bitlen The bit length of the RSA modulus - * \param prng An active PRNG state (only for LTC_PKCS_1_EME) - * \param prng_idx The index of the PRNG desired (only for LTC_PKCS_1_EME) - * \param out [out] The destination for the encoded data - * \param outlen [in/out] The max size and resulting size of the encoded data - * - * \return CRYPT_OK if successful - */ -int pkcs_1_v1_5_encode(const unsigned char *msg, - unsigned long msglen, - int block_type, - unsigned long modulus_bitlen, - prng_state *prng, - int prng_idx, - unsigned char *out, - unsigned long *outlen) -{ - return ltc_pkcs_1_v1_5_encode(msg, msglen, - block_type, modulus_bitlen, - prng, prng_idx, - out, outlen); -} - -/** @brief PKCS #1 v1.5 decode. - * - * @param msg The encoded data to decode - * @param msglen The length of the encoded data (octets) - * @param block_type Block type to use in padding (\sa ltc_pkcs_1_v1_5_blocks) - * @param modulus_bitlen The bit length of the RSA modulus - * @param out [out] Destination of decoding - * @param outlen [in/out] The max size and resulting size of the decoding - * @param is_valid [out] Boolean whether the padding was valid - * - * @return CRYPT_OK if successful - */ -int pkcs_1_v1_5_decode(const unsigned char *msg, - unsigned long msglen, - int block_type, - unsigned long modulus_bitlen, - unsigned char *out, - unsigned long *outlen, - int *is_valid) -{ - return ltc_pkcs_1_v1_5_decode(msg, msglen, - block_type, modulus_bitlen, - out, outlen, - is_valid); -} -#endif /* LTC_PKCS_1 */ - -int compare_testvector(const void* is, const unsigned long is_len, const void* should, const unsigned long should_len, const char* what, int which) -{ - return ltc_compare_testvector(is, is_len, should, should_len, what, which); -} - -#endif /* LTC_NO_DEPRECATED_APIS */ diff --git a/src/misc/error_to_string.c b/src/misc/error_to_string.c deleted file mode 100644 index fd306bba..00000000 --- a/src/misc/error_to_string.c +++ /dev/null @@ -1,71 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file error_to_string.c - Convert error codes to ASCII strings, Tom St Denis -*/ - -static const char * const err_2_str[CRYPT_ERR_NUM] = -{ - "CRYPT_OK", - "CRYPT_ERROR", - "Non-fatal 'no-operation' requested.", - - "Invalid key size.", - "Invalid number of rounds for block cipher.", - "Algorithm failed test vectors.", - - "Buffer overflow.", - "Invalid input packet.", - - "Invalid number of bits for a PRNG.", - "Error reading the PRNG.", - - "Invalid cipher specified.", - "Invalid hash specified.", - "Invalid PRNG specified.", - - "Out of memory.", - - "Invalid PK key or key type specified for function.", - "A private PK key is required.", - - "Invalid argument provided.", - "File Not Found", - - "Invalid PK type.", - - "An overflow of a value was detected/prevented.", - - "An ASN.1 decoding error occurred.", - - "The input was longer than expected.", - - "Invalid size input for PK parameters.", - - "Invalid size for prime.", - "Invalid padding.", - - "Hash applied to too many bits.", - "Password context to decrypt key file is missing.", - "The PEM header was not recognized", -}; - -LTC_STATIC_ASSERT(correct_err_2_str_size, LTC_ARRAY_SIZE(err_2_str) == CRYPT_ERR_NUM) - -/** - Convert an LTC error code to ASCII - @param err The error code - @return A pointer to the ASCII NUL terminated string for the error or "Invalid error code." if the err code was not valid. -*/ -const char *error_to_string(int err) -{ - if (err < 0 || err >= CRYPT_ERR_NUM) { - return "Invalid error code."; - } - return err_2_str[err]; -} - diff --git a/src/misc/hkdf/hkdf.c b/src/misc/hkdf/hkdf.c deleted file mode 100644 index 86b4ee8d..00000000 --- a/src/misc/hkdf/hkdf.c +++ /dev/null @@ -1,135 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include -#include -#include - -#include "tomcrypt_private.h" - -#ifdef LTC_HKDF - -/* This is mostly just a wrapper around hmac_memory */ -int hkdf_extract(int hash_idx, const unsigned char *salt, unsigned long saltlen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - /* libtomcrypt chokes on a zero length HMAC key, so we need to check for - that. HMAC specifies that keys shorter than the hash's blocksize are - 0 padded to the block size. HKDF specifies that a NULL salt is to be - substituted with a salt comprised of hashLen 0 bytes. HMAC's padding - means that in either case the HMAC is actually using a blocksize long - zero filled key. Unless blocksize < hashLen (which wouldn't make any - sense), we can use a single 0 byte as the HMAC key and still generate - valid results for HKDF. */ - if (salt == NULL || saltlen == 0) { - return hmac_memory(hash_idx, (const unsigned char *)"", 1, in, inlen, out, outlen); - } - return hmac_memory(hash_idx, salt, saltlen, in, inlen, out, outlen); -} - -int hkdf_expand(int hash_idx, const unsigned char *info, unsigned long infolen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long outlen) -{ - unsigned long hashsize; - int err; - unsigned char N; - unsigned long Noutlen, outoff; - - unsigned char *T, *dat; - unsigned long Tlen, datlen; - - /* make sure hash descriptor is valid */ - if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { - return err; - } - - hashsize = hash_descriptor[hash_idx].hashsize; - - /* RFC5869 parameter restrictions */ - if (inlen < hashsize || outlen > hashsize * 255) { - return CRYPT_INVALID_ARG; - } - if (info == NULL && infolen != 0) { - return CRYPT_INVALID_ARG; - } - LTC_ARGCHK(out != NULL); - - Tlen = hashsize + infolen + 1; - T = XMALLOC(Tlen); /* Replace with static buffer? */ - if (T == NULL) { - return CRYPT_MEM; - } - if (info != NULL) { - XMEMCPY(T + hashsize, info, infolen); - } - - /* HMAC data T(1) doesn't include a previous hash value */ - dat = T + hashsize; - datlen = Tlen - hashsize; - - N = 0; - outoff = 0; /* offset in out to write to */ - while (1) { /* an exit condition breaks mid-loop */ - Noutlen = MIN(hashsize, outlen - outoff); - T[Tlen - 1] = ++N; - if ((err = hmac_memory(hash_idx, in, inlen, dat, datlen, - out + outoff, &Noutlen)) != CRYPT_OK) { - zeromem(T, Tlen); - XFREE(T); - return err; - } - outoff += Noutlen; - - if (outoff >= outlen) { /* loop exit condition */ - break; - } - - /* All subsequent HMAC data T(N) DOES include the previous hash value */ - XMEMCPY(T, out + hashsize * (N-1), hashsize); - if (N == 1) { - dat = T; - datlen = Tlen; - } - } - zeromem(T, Tlen); - XFREE(T); - return CRYPT_OK; -} - -/* all in one step */ -int hkdf(int hash_idx, const unsigned char *salt, unsigned long saltlen, - const unsigned char *info, unsigned long infolen, - const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long outlen) -{ - unsigned long hashsize; - int err; - unsigned char *extracted; - - /* make sure hash descriptor is valid */ - if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { - return err; - } - - hashsize = hash_descriptor[hash_idx].hashsize; - - extracted = XMALLOC(hashsize); /* replace with static buffer? */ - if (extracted == NULL) { - return CRYPT_MEM; - } - if ((err = hkdf_extract(hash_idx, salt, saltlen, in, inlen, extracted, &hashsize)) != 0) { - zeromem(extracted, hashsize); - XFREE(extracted); - return err; - } - err = hkdf_expand(hash_idx, info, infolen, extracted, hashsize, out, outlen); - zeromem(extracted, hashsize); - XFREE(extracted); - return err; -} -#endif /* LTC_HKDF */ - - -/* vim: set ts=2 sw=2 et ai si: */ diff --git a/src/misc/hkdf/hkdf_test.c b/src/misc/hkdf/hkdf_test.c deleted file mode 100644 index a87abbda..00000000 --- a/src/misc/hkdf/hkdf_test.c +++ /dev/null @@ -1,284 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file hkdf_test.c - LTC_HKDF support, self-test, Steffen Jaeckel -*/ - -#ifdef LTC_HKDF - -/* - TEST CASES SOURCE: - -Internet Engineering Task Force (IETF) H. Krawczyk -Request for Comments: 5869 IBM Research -Category: Informational P. Eronen -ISSN: 2070-1721 Nokia - May 2010 -Appendix A. Test Vectors -*/ - -/** - LTC_HKDF self-test - @return CRYPT_OK if successful, CRYPT_NOP if tests have been disabled. -*/ -int hkdf_test(void) -{ - #ifndef LTC_TEST - return CRYPT_NOP; - #else - unsigned char OKM[82]; - int i; - - static const struct hkdf_test_case { - int num; - const char* Hash; - unsigned char IKM[80]; - unsigned long IKM_l; - unsigned char salt[80]; - unsigned long salt_l; - unsigned char info[80]; - unsigned long info_l; - unsigned char PRK[32]; - unsigned long PRK_l; - unsigned char OKM[82]; - unsigned long OKM_l; - } cases[] = { -#ifdef LTC_SHA256 - /* - Basic test case with SHA-256 - - Hash = SHA-256 - IKM = 0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b (22 octets) - salt = 0x000102030405060708090a0b0c (13 octets) - info = 0xf0f1f2f3f4f5f6f7f8f9 (10 octets) - L = 42 - - PRK = 0x077709362c2e32df0ddc3f0dc47bba63 - 90b6c73bb50f9c3122ec844ad7c2b3e5 (32 octets) - OKM = 0x3cb25f25faacd57a90434f64d0362f2a - 2d2d0a90cf1a5a4c5db02d56ecc4c5bf - 34007208d5b887185865 (42 octets) - */ - {1, "sha256", - {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 22, - {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c}, 13, - {0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9}, 10, - {0x07, 0x77, 0x09, 0x36, 0x2c, 0x2e, 0x32, 0xdf, - 0x0d, 0xdc, 0x3f, 0x0d, 0xc4, 0x7b, 0xba, 0x63, - 0x90, 0xb6, 0xc7, 0x3b, 0xb5, 0x0f, 0x9c, 0x31, - 0x22, 0xec, 0x84, 0x4a, 0xd7, 0xc2, 0xb3, 0xe5}, 32, - {0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a, - 0x90, 0x43, 0x4f, 0x64, 0xd0, 0x36, 0x2f, 0x2a, - 0x2d, 0x2d, 0x0a, 0x90, 0xcf, 0x1a, 0x5a, 0x4c, - 0x5d, 0xb0, 0x2d, 0x56, 0xec, 0xc4, 0xc5, 0xbf, - 0x34, 0x00, 0x72, 0x08, 0xd5, 0xb8, 0x87, 0x18, - 0x58, 0x65}, 42}, -#ifdef LTC_TEST_EXT - /* Test with SHA-256 and longer inputs/outputs */ - {2, "sha256", - {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f}, 80, - {0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf}, 80, - {0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}, 80, - {0x06, 0xa6, 0xb8, 0x8c, 0x58, 0x53, 0x36, 0x1a, - 0x06, 0x10, 0x4c, 0x9c, 0xeb, 0x35, 0xb4, 0x5c, - 0xef, 0x76, 0x00, 0x14, 0x90, 0x46, 0x71, 0x01, - 0x4a, 0x19, 0x3f, 0x40, 0xc1, 0x5f, 0xc2, 0x44}, 32, - {0xb1, 0x1e, 0x39, 0x8d, 0xc8, 0x03, 0x27, 0xa1, - 0xc8, 0xe7, 0xf7, 0x8c, 0x59, 0x6a, 0x49, 0x34, - 0x4f, 0x01, 0x2e, 0xda, 0x2d, 0x4e, 0xfa, 0xd8, - 0xa0, 0x50, 0xcc, 0x4c, 0x19, 0xaf, 0xa9, 0x7c, - 0x59, 0x04, 0x5a, 0x99, 0xca, 0xc7, 0x82, 0x72, - 0x71, 0xcb, 0x41, 0xc6, 0x5e, 0x59, 0x0e, 0x09, - 0xda, 0x32, 0x75, 0x60, 0x0c, 0x2f, 0x09, 0xb8, - 0x36, 0x77, 0x93, 0xa9, 0xac, 0xa3, 0xdb, 0x71, - 0xcc, 0x30, 0xc5, 0x81, 0x79, 0xec, 0x3e, 0x87, - 0xc1, 0x4c, 0x01, 0xd5, 0xc1, 0xf3, 0x43, 0x4f, - 0x1d, 0x87}, 82}, - /* Test with SHA-256 and zero length salt/info */ - {3, "sha256", - {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 22, - {0}, 0, - {0}, 0, - {0x19, 0xef, 0x24, 0xa3, 0x2c, 0x71, 0x7b, 0x16, - 0x7f, 0x33, 0xa9, 0x1d, 0x6f, 0x64, 0x8b, 0xdf, - 0x96, 0x59, 0x67, 0x76, 0xaf, 0xdb, 0x63, 0x77, - 0xac, 0x43, 0x4c, 0x1c, 0x29, 0x3c, 0xcb, 0x04}, 32, - {0x8d, 0xa4, 0xe7, 0x75, 0xa5, 0x63, 0xc1, 0x8f, - 0x71, 0x5f, 0x80, 0x2a, 0x06, 0x3c, 0x5a, 0x31, - 0xb8, 0xa1, 0x1f, 0x5c, 0x5e, 0xe1, 0x87, 0x9e, - 0xc3, 0x45, 0x4e, 0x5f, 0x3c, 0x73, 0x8d, 0x2d, - 0x9d, 0x20, 0x13, 0x95, 0xfa, 0xa4, 0xb6, 0x1a, - 0x96, 0xc8}, 42}, -#endif /* LTC_TEST_EXT */ -#endif /* LTC_SHA256 */ -#ifdef LTC_SHA1 - /* Basic test case with SHA-1 */ - {4, "sha1", - {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b}, 11, - {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c}, 13, - {0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9}, 10, - {0x9b, 0x6c, 0x18, 0xc4, 0x32, 0xa7, 0xbf, 0x8f, - 0x0e, 0x71, 0xc8, 0xeb, 0x88, 0xf4, 0xb3, 0x0b, - 0xaa, 0x2b, 0xa2, 0x43}, 20, - {0x08, 0x5a, 0x01, 0xea, 0x1b, 0x10, 0xf3, 0x69, - 0x33, 0x06, 0x8b, 0x56, 0xef, 0xa5, 0xad, 0x81, - 0xa4, 0xf1, 0x4b, 0x82, 0x2f, 0x5b, 0x09, 0x15, - 0x68, 0xa9, 0xcd, 0xd4, 0xf1, 0x55, 0xfd, 0xa2, - 0xc2, 0x2e, 0x42, 0x24, 0x78, 0xd3, 0x05, 0xf3, - 0xf8, 0x96}, 42}, -#ifdef LTC_TEST_EXT - /* Test with SHA-1 and longer inputs/outputs */ - {5, "sha1", - {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f}, 80, - {0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf}, 80, - {0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}, 80, - {0x8a, 0xda, 0xe0, 0x9a, 0x2a, 0x30, 0x70, 0x59, - 0x47, 0x8d, 0x30, 0x9b, 0x26, 0xc4, 0x11, 0x5a, - 0x22, 0x4c, 0xfa, 0xf6}, 20, - {0x0b, 0xd7, 0x70, 0xa7, 0x4d, 0x11, 0x60, 0xf7, - 0xc9, 0xf1, 0x2c, 0xd5, 0x91, 0x2a, 0x06, 0xeb, - 0xff, 0x6a, 0xdc, 0xae, 0x89, 0x9d, 0x92, 0x19, - 0x1f, 0xe4, 0x30, 0x56, 0x73, 0xba, 0x2f, 0xfe, - 0x8f, 0xa3, 0xf1, 0xa4, 0xe5, 0xad, 0x79, 0xf3, - 0xf3, 0x34, 0xb3, 0xb2, 0x02, 0xb2, 0x17, 0x3c, - 0x48, 0x6e, 0xa3, 0x7c, 0xe3, 0xd3, 0x97, 0xed, - 0x03, 0x4c, 0x7f, 0x9d, 0xfe, 0xb1, 0x5c, 0x5e, - 0x92, 0x73, 0x36, 0xd0, 0x44, 0x1f, 0x4c, 0x43, - 0x00, 0xe2, 0xcf, 0xf0, 0xd0, 0x90, 0x0b, 0x52, - 0xd3, 0xb4}, 82}, - /* Test with SHA-1 and zero-length salt/info */ - {6, "sha1", - {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b}, 22, - {0}, 0, - {0}, 0, - {0xda, 0x8c, 0x8a, 0x73, 0xc7, 0xfa, 0x77, 0x28, - 0x8e, 0xc6, 0xf5, 0xe7, 0xc2, 0x97, 0x78, 0x6a, - 0xa0, 0xd3, 0x2d, 0x01}, 20, - {0x0a, 0xc1, 0xaf, 0x70, 0x02, 0xb3, 0xd7, 0x61, - 0xd1, 0xe5, 0x52, 0x98, 0xda, 0x9d, 0x05, 0x06, - 0xb9, 0xae, 0x52, 0x05, 0x72, 0x20, 0xa3, 0x06, - 0xe0, 0x7b, 0x6b, 0x87, 0xe8, 0xdf, 0x21, 0xd0, - 0xea, 0x00, 0x03, 0x3d, 0xe0, 0x39, 0x84, 0xd3, - 0x49, 0x18}, 42}, - /* Test with SHA-1, salt not provided (defaults to HashLen zero octets), - zero-length info */ - {7, "sha1", - {0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, - 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, - 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c}, 22, - {0}, 0, /* pass a null pointer */ - {0}, 0, - {0x2a, 0xdc, 0xca, 0xda, 0x18, 0x77, 0x9e, 0x7c, - 0x20, 0x77, 0xad, 0x2e, 0xb1, 0x9d, 0x3f, 0x3e, - 0x73, 0x13, 0x85, 0xdd}, 20, - {0x2c, 0x91, 0x11, 0x72, 0x04, 0xd7, 0x45, 0xf3, - 0x50, 0x0d, 0x63, 0x6a, 0x62, 0xf6, 0x4f, 0x0a, - 0xb3, 0xba, 0xe5, 0x48, 0xaa, 0x53, 0xd4, 0x23, - 0xb0, 0xd1, 0xf2, 0x7e, 0xbb, 0xa6, 0xf5, 0xe5, - 0x67, 0x3a, 0x08, 0x1d, 0x70, 0xcc, 0xe7, 0xac, - 0xfc, 0x48}, 42}, -#endif /* LTC_TEST_EXT */ -#endif /* LTC_SHA1 */ - }; - - int err; - int tested=0,failed=0; - for(i=0; i < (int)(sizeof(cases) / sizeof(cases[0])); i++) { - int hash = find_hash(cases[i].Hash); - if (hash == -1) continue; - ++tested; - if((err = hkdf(hash, cases[i].salt, cases[i].salt_l, - cases[i].info, cases[i].info_l, - cases[i].IKM, cases[i].IKM_l, - OKM, cases[i].OKM_l)) != CRYPT_OK) { -#if defined(LTC_TEST_DBG) && (LTC_TEST_DBG > 1) - printf("LTC_HKDF-%s test #%d, %s\n", cases[i].Hash, i, error_to_string(err)); -#endif - return err; - } - - if(ltc_compare_testvector(OKM, cases[i].OKM_l, cases[i].OKM, (size_t)cases[i].OKM_l, "HKDF", cases[i].num)) { - failed++; - } - } - - if (failed != 0) { - return CRYPT_FAIL_TESTVECTOR; - } - if (tested == 0) { - return CRYPT_NOP; - } - return CRYPT_OK; - #endif -} - -#endif - diff --git a/src/misc/mem_neq.c b/src/misc/mem_neq.c deleted file mode 100644 index 8078a0a8..00000000 --- a/src/misc/mem_neq.c +++ /dev/null @@ -1,53 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file mem_neq.c - Compare two blocks of memory for inequality in constant time. - Steffen Jaeckel -*/ - -/** - Compare two blocks of memory for inequality in constant time. - - The usage is similar to that of standard memcmp, but you can only test - if the memory is equal or not - you can not determine by how much the - first different byte differs. - - This function shall be used to compare results of cryptographic - operations where inequality means most likely usage of a wrong key. - The execution time has therefore to be constant as otherwise - timing attacks could be possible. - - @param a The first memory region - @param b The second memory region - @param len The length of the area to compare (octets) - - @return 0 when a and b are equal for len bytes, 1 they are not equal. -*/ -int mem_neq(const void *a, const void *b, size_t len) -{ - unsigned char ret = 0; - const unsigned char* pa; - const unsigned char* pb; - - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - - pa = a; - pb = b; - - while (len-- > 0) { - ret |= *pa ^ *pb; - ++pa; - ++pb; - } - - ret |= ret >> 4; - ret |= ret >> 2; - ret |= ret >> 1; - ret &= 1; - - return ret; -} diff --git a/src/misc/padding/padding_depad.c b/src/misc/padding/padding_depad.c deleted file mode 100644 index 83c7c13f..00000000 --- a/src/misc/padding/padding_depad.c +++ /dev/null @@ -1,103 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_PADDING - -/** - Remove padding from your data - - This depads your data. - - @param data The data to depad - @param length [in/out] The size of the data before/after (removing padding) - @param mode One of the LTC_PAD_xx flags - @return CRYPT_OK on success -*/ -int padding_depad(const unsigned char *data, unsigned long *length, unsigned long mode) -{ - unsigned long padded_length, unpadded_length, n; - unsigned char pad, data_xor_pad = 0; - enum padding_type type; - - LTC_ARGCHK(data != NULL); - LTC_ARGCHK(length != NULL); - - padded_length = *length; - - type = mode & LTC_PAD_MASK; - - /* LTC_PAD_ZERO is the only mode where padding_pad() can produce a 0-byte output. - Every other mode always emits at least one padding byte, so a 0-byte buffer is malformed. - */ - if (padded_length == 0 && type != LTC_PAD_ZERO) { - return CRYPT_INVALID_PACKET; - } - - if (type < LTC_PAD_ONE_AND_ZERO) { - pad = data[padded_length - 1]; - - if (pad > padded_length || pad == 0) { - unpadded_length = padded_length - (padded_length > 16 ? padded_length - 16 : padded_length); - data_xor_pad = 1; - } else { - unpadded_length = padded_length - pad; - } - } else { - /* init pad to calm old compilers */ - pad = 0x0; - unpadded_length = padded_length; - } - - switch (type) { - case LTC_PAD_ANSI_X923: - pad = 0x0; - LTC_FALLTHROUGH; /* FALLTHROUGH */ - case LTC_PAD_PKCS7: - for (n = unpadded_length; n < padded_length - 1; ++n) { - data_xor_pad |= data[n] ^ pad; - } - break; -#ifdef LTC_RNG_GET_BYTES - case LTC_PAD_ISO_10126: - /* nop */ - break; -#endif - case LTC_PAD_SSH: - pad = 0x1; - for (n = unpadded_length; n < padded_length; ++n) { - data_xor_pad |= data[n] ^ pad++; - } - break; - case LTC_PAD_ONE_AND_ZERO: - while (unpadded_length > 0 && data[unpadded_length - 1] != 0x80) { - data_xor_pad |= data[unpadded_length - 1]; - unpadded_length--; - } - if (unpadded_length == 0) data_xor_pad |= 1; - else unpadded_length--; - if (data[unpadded_length] != 0x80) data_xor_pad |= 1; - break; - case LTC_PAD_ZERO: - case LTC_PAD_ZERO_ALWAYS: - while (unpadded_length > 0 && data[unpadded_length - 1] == 0x0) { - unpadded_length--; - } - if (type == LTC_PAD_ZERO_ALWAYS) { - if (unpadded_length == padded_length) return CRYPT_INVALID_PACKET; - if (data[unpadded_length] != 0x0) return CRYPT_INVALID_PACKET; - } - break; - default: - return CRYPT_INVALID_ARG; - } - - if (data_xor_pad != 0) - return CRYPT_INVALID_PACKET; - - *length = unpadded_length; - - return CRYPT_OK; -} - -#endif diff --git a/src/misc/padding/padding_pad.c b/src/misc/padding/padding_pad.c deleted file mode 100644 index b229a2a7..00000000 --- a/src/misc/padding/padding_pad.c +++ /dev/null @@ -1,151 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_PADDING - -/** - Determine the to-be-padded length. - - @param length [in/out] The size of the data before/after padding - @param mode Mask of (LTC_PAD_xxx | block_length) - @return CRYPT_OK on success -*/ -static int s_padding_padded_length(unsigned long *length, unsigned long mode) -{ - enum padding_type padding; - unsigned char pad, block_length, r, t; - - LTC_ARGCHK(length != NULL); - - block_length = mode & 0xff; - padding = mode & LTC_PAD_MASK; - r = *length % block_length; - - switch (padding) { - case LTC_PAD_ZERO: - if (r == 0) { - t = 0; - break; - } - LTC_FALLTHROUGH; /* FALLTHROUGH */ - case LTC_PAD_PKCS7: - case LTC_PAD_ONE_AND_ZERO: - case LTC_PAD_ZERO_ALWAYS: - case LTC_PAD_SSH: - t = 1; - break; -#ifdef LTC_RNG_GET_BYTES - case LTC_PAD_ISO_10126: - do { - if (rng_get_bytes(&t, sizeof(t), NULL) != sizeof(t)) { - return CRYPT_ERROR_READPRNG; - } - t %= (256 / block_length); - } while (t == 0); - break; -#endif - case LTC_PAD_ANSI_X923: - if (block_length != 16) { - return CRYPT_INVALID_ARG; - } - t = 1; - break; - default: - return CRYPT_INVALID_ARG; - } - - pad = (t * block_length) - r; - - if ((pad == 0) && (padding != LTC_PAD_ZERO)) { - pad = block_length; - } - - *length += pad; - - return CRYPT_OK; -} - -/** - Add padding to data. - - This pads your data. - - @param data The data to depad - @param length The size of the data before padding - @param padded_length [in/out] The size of the data available/after padding - @param mode One of the LTC_PAD_xx flags - @return CRYPT_OK on success -*/ -int padding_pad(unsigned char *data, unsigned long length, unsigned long* padded_length, unsigned long mode) -{ - unsigned long l, n; - enum padding_type type; - int err; - unsigned char diff, pad; - - LTC_ARGCHK(data != NULL); - LTC_ARGCHK(padded_length != NULL); - - l = length; - if ((err = s_padding_padded_length(&l, mode)) != CRYPT_OK) { - return err; - } - - type = mode & LTC_PAD_MASK; - - if (*padded_length < l) { -#ifdef LTC_RNG_GET_BYTES - if (type != LTC_PAD_ISO_10126) { - *padded_length = l; - } else { - *padded_length = length + 256; - } -#else - *padded_length = l; -#endif - return CRYPT_BUFFER_OVERFLOW; - } - - if (l - length > 255) return CRYPT_INVALID_ARG; - diff = (unsigned char)(l - length); - - switch (type) { - case LTC_PAD_PKCS7: - XMEMSET(&data[length], diff, diff); - break; -#ifdef LTC_RNG_GET_BYTES - case LTC_PAD_ISO_10126: - if (rng_get_bytes(&data[length], diff-1u, NULL) != diff-1u) { - return CRYPT_ERROR_READPRNG; - } - data[l-1] = diff; - break; -#endif - case LTC_PAD_ANSI_X923: - XMEMSET(&data[length], 0, diff-1); - data[l-1] = diff; - break; - case LTC_PAD_SSH: - pad = 0x1; - for (n = length; n < l; ++n) { - data[n] = pad++; - } - break; - case LTC_PAD_ONE_AND_ZERO: - XMEMSET(&data[length + 1], 0, diff); - data[length] = 0x80; - break; - case LTC_PAD_ZERO: - case LTC_PAD_ZERO_ALWAYS: - XMEMSET(&data[length], 0, diff); - break; - default: - return CRYPT_INVALID_ARG; - } - *padded_length = l; - - return CRYPT_OK; -} - -#endif diff --git a/src/misc/password_free.c b/src/misc/password_free.c deleted file mode 100644 index e88b700c..00000000 --- a/src/misc/password_free.c +++ /dev/null @@ -1,28 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file password_free.c - Free the password inside a `struct password`, Steffen Jaeckel -*/ - -/** - Free a password - @param pw The password to be free'd - @param ctx The password context -*/ -void password_free(struct password *pw, const struct password_ctx *ctx) -{ - if (!ctx || !pw || !pw->pw) - return; - - zeromem(pw->pw, pw->l); - if (ctx->free) { - ctx->free(pw->pw); - } else { - XFREE(pw->pw); - } - pw->pw = NULL; - pw->l = 0; -} diff --git a/src/misc/pbes/pbes.c b/src/misc/pbes/pbes.c deleted file mode 100644 index 22e71158..00000000 --- a/src/misc/pbes/pbes.c +++ /dev/null @@ -1,75 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_PBES - -/** - Decrypt Data encrypted via either PBES1 or PBES2 - - @param arg The according PBES parameters - @param dec_data [out] The decrypted data - @param dec_size [in/out] The length of the encrypted resp. decrypted data - @return CRYPT_OK on success -*/ -int pbes_decrypt(const pbes_arg *arg, unsigned char *dec_data, unsigned long *dec_size) -{ - int err, hid, cid; - unsigned char k[32], *iv; - unsigned long klen, keylen, dlen; - long diff; - symmetric_CBC cbc; - - LTC_ARGCHK(arg != NULL); - LTC_ARGCHK(arg->type.kdf != NULL); - LTC_ARGCHK(dec_data != NULL); - LTC_ARGCHK(dec_size != NULL); - - hid = find_hash(arg->type.h); - if (hid == -1) return CRYPT_INVALID_HASH; - cid = find_cipher(arg->type.c); - if (cid == -1) return CRYPT_INVALID_CIPHER; - - klen = arg->type.keylen; - - /* RC2 special case */ - if (arg->key_bits != 0) { - /* We can't handle odd lengths of Key Bits */ - if ((arg->key_bits % 8) != 0) return CRYPT_INVALID_KEYSIZE; - /* Internally we use bytes, not bits */ - klen = arg->key_bits / 8; - } - keylen = klen; - - if (arg->iv != NULL) { - iv = arg->iv->data; - } else { - /* PBES1 derives key and IV in one go, the IV follows the key in k; blocklen is 0 for PBES2, which has no IV to derive from */ - if (arg->type.blocklen != (unsigned long)cipher_descriptor[cid].block_length) return CRYPT_INVALID_PACKET; - iv = k + klen; - klen += arg->type.blocklen; - } - - if (klen > sizeof(k)) return CRYPT_INVALID_ARG; - - if ((err = arg->type.kdf(&arg->pw, arg->salt->data, arg->salt->size, arg->iterations, hid, k, &klen)) != CRYPT_OK) goto LBL_ERROR; - if ((err = cbc_start(cid, iv, k, keylen, 0, &cbc)) != CRYPT_OK) goto LBL_ERROR; - if ((err = cbc_decrypt(arg->enc_data->data, dec_data, arg->enc_data->size, &cbc)) != CRYPT_OK) goto LBL_ERROR; - if ((err = cbc_done(&cbc)) != CRYPT_OK) goto LBL_ERROR; - dlen = arg->enc_data->size; - if ((err = padding_depad(dec_data, &dlen, LTC_PAD_PKCS7)) != CRYPT_OK) goto LBL_ERROR; - diff = (long)arg->enc_data->size - (long)dlen; - if ((diff <= 0) || (diff > cipher_descriptor[cid].block_length)) { - err = CRYPT_PK_INVALID_PADDING; - goto LBL_ERROR; - } - *dec_size = dlen; - return CRYPT_OK; - -LBL_ERROR: - zeromem(k, sizeof(k)); - zeromem(dec_data, *dec_size); - return err; -} - -#endif diff --git a/src/misc/pbes/pbes1.c b/src/misc/pbes/pbes1.c deleted file mode 100644 index 86daa47c..00000000 --- a/src/misc/pbes/pbes1.c +++ /dev/null @@ -1,112 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_PBES - -static int s_pkcs_5_alg1_wrap(const struct password *pwd, - const unsigned char *salt, unsigned long salt_len, - int iteration_count, int hash_idx, - unsigned char *out, unsigned long *outlen) -{ - LTC_UNUSED_PARAM(salt_len); - return pkcs_5_alg1(pwd->pw, pwd->l, salt, iteration_count, hash_idx, out, outlen); -} - -static int s_pkcs_12_wrap(const struct password *pwd, - const unsigned char *salt, unsigned long salt_len, - int iteration_count, int hash_idx, - unsigned char *out, unsigned long *outlen) -{ - int err; - /* convert password to unicode/utf16-be */ - unsigned long pwlen = pwd->l * 2; - unsigned char* pw; - if (*outlen < 32) return CRYPT_INVALID_ARG; - pw = XMALLOC(pwlen + 2); - if (pw == NULL) return CRYPT_MEM; - if ((err = pkcs12_utf8_to_utf16(pwd->pw, pwd->l, pw, &pwlen)) != CRYPT_OK) goto LBL_ERROR; - pw[pwlen++] = 0; - pw[pwlen++] = 0; - /* derive KEY */ - if ((err = pkcs12_kdf(hash_idx, pw, pwlen, salt, salt_len, iteration_count, 1, out, 24)) != CRYPT_OK) goto LBL_ERROR; - /* derive IV */ - if ((err = pkcs12_kdf(hash_idx, pw, pwlen, salt, salt_len, iteration_count, 2, out+24, 8)) != CRYPT_OK) goto LBL_ERROR; - - *outlen = 32; -LBL_ERROR: - zeromem(pw, pwlen); - XFREE(pw); - return err; -} - -static const pbes_properties s_pbes1_types[] = { - { s_pkcs_5_alg1_wrap, "md2", "des", 8, 8 }, - { s_pkcs_5_alg1_wrap, "md2", "rc2", 8, 8 }, - { s_pkcs_5_alg1_wrap, "md5", "des", 8, 8 }, - { s_pkcs_5_alg1_wrap, "md5", "rc2", 8, 8 }, - { s_pkcs_5_alg1_wrap, "sha1", "des", 8, 8 }, - { s_pkcs_5_alg1_wrap, "sha1", "rc2", 8, 8 }, - { s_pkcs_12_wrap, "sha1", "3des", 24, 8 }, -}; - -static const oid_to_pbes s_pbes1_list[] = { - { &s_pbes1_types[0], "1.2.840.113549.1.5.1" }, /* http://www.oid-info.com/get/1.2.840.113549.1.5.1 pbeWithMD2AndDES-CBC */ - { &s_pbes1_types[1], "1.2.840.113549.1.5.4" }, /* http://www.oid-info.com/get/1.2.840.113549.1.5.4 pbeWithMD2AndRC2-CBC */ - { &s_pbes1_types[2], "1.2.840.113549.1.5.3" }, /* http://www.oid-info.com/get/1.2.840.113549.1.5.3 pbeWithMD5AndDES-CBC */ - { &s_pbes1_types[3], "1.2.840.113549.1.5.6" }, /* http://www.oid-info.com/get/1.2.840.113549.1.5.6 pbeWithMD5AndRC2-CBC */ - { &s_pbes1_types[4], "1.2.840.113549.1.5.10" }, /* http://www.oid-info.com/get/1.2.840.113549.1.5.10 pbeWithSHA1AndDES-CBC */ - { &s_pbes1_types[5], "1.2.840.113549.1.5.11" }, /* http://www.oid-info.com/get/1.2.840.113549.1.5.11 pbeWithSHA1AndRC2-CBC */ - { &s_pbes1_types[6], "1.2.840.113549.1.12.1.3" }, /* http://www.oid-info.com/get/1.2.840.113549.1.12.1.3 pbeWithSHAAnd3-KeyTripleDES-CBC */ - { 0 }, -}; - -static int s_pbes1_from_oid(const ltc_asn1_list *oid, pbes_properties *res) -{ - unsigned int i; - for (i = 0; s_pbes1_list[i].data != NULL; ++i) { - if (pk_oid_cmp_with_asn1(s_pbes1_list[i].oid, oid) == CRYPT_OK) { - if (res != NULL) *res = *s_pbes1_list[i].data; - return CRYPT_OK; - } - } - return CRYPT_INVALID_ARG; -} - -/** - Extract PBES1 parameters - - @param s The start of the sequence with potential PBES1 parameters - @param res Pointer to where the extracted parameters should be stored - @return CRYPT_OK on success -*/ -int pbes1_extract(const ltc_asn1_list *s, pbes_arg *res) -{ - int err; - - LTC_ARGCHK(s != NULL); - LTC_ARGCHK(res != NULL); - - if ((err = s_pbes1_from_oid(s, &res->type)) != CRYPT_OK) return err; - - if (!LTC_ASN1_IS_TYPE(s->next, LTC_ASN1_SEQUENCE) || - !LTC_ASN1_IS_TYPE(s->next->child, LTC_ASN1_OCTET_STRING) || - !LTC_ASN1_IS_TYPE(s->next->child->next, LTC_ASN1_INTEGER)) { - return CRYPT_INVALID_PACKET; - } - /* PBES1: encrypted pkcs8 - pbeWithMD5AndDES-CBC: - * 0:d=0 hl=4 l= 329 cons: SEQUENCE - * 4:d=1 hl=2 l= 27 cons: SEQUENCE - * 6:d=2 hl=2 l= 9 prim: OBJECT :pbeWithMD5AndDES-CBC (== 1.2.840.113549.1.5.3) (== *s) - * 17:d=2 hl=2 l= 14 cons: SEQUENCE (== *lalgparam) - * 19:d=3 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:8EDF749A06CCDE51 (== salt) - * 29:d=3 hl=2 l= 2 prim: INTEGER :0800 (== iterations) - * 33:d=1 hl=4 l= 296 prim: OCTET STRING :bytes (== encrypted data) - */ - res->salt = s->next->child; - res->iterations = ltc_mp_get_int(s->next->child->next->data); - - return CRYPT_OK; -} - -#endif diff --git a/src/misc/pbes/pbes2.c b/src/misc/pbes/pbes2.c deleted file mode 100644 index 1b6ebf81..00000000 --- a/src/misc/pbes/pbes2.c +++ /dev/null @@ -1,208 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_PBES - -static const char * const s_oid_pbes2 = "1.2.840.113549.1.5.13"; -static const char * const s_oid_pbkdf2 = "1.2.840.113549.1.5.12"; - -typedef struct { - const char *oid; - const char *id; -} oid_id_st; - -static const oid_id_st s_hmac_oid_names[] = { - { "1.2.840.113549.2.7", "sha1" }, - { "1.2.840.113549.2.8", "sha224" }, - { "1.2.840.113549.2.9", "sha256" }, - { "1.2.840.113549.2.10", "sha384" }, - { "1.2.840.113549.2.11", "sha512" }, - { "1.2.840.113549.2.12", "sha512-224" }, - { "1.2.840.113549.2.13", "sha512-256" }, - { "2.16.840.1.101.3.4.2.13", "sha3-224" }, - { "2.16.840.1.101.3.4.2.14", "sha3-256" }, - { "2.16.840.1.101.3.4.2.15", "sha3-384" }, - { "2.16.840.1.101.3.4.2.16", "sha3-512" }, -}; - -static int s_pkcs_5_alg2_wrap(const struct password *pwd, - const unsigned char *salt, unsigned long salt_len, - int iteration_count, int hash_idx, - unsigned char *out, unsigned long *outlen) -{ - return pkcs_5_alg2(pwd->pw, pwd->l, salt, salt_len, iteration_count, hash_idx, out, outlen); -} - -static const pbes_properties s_pbes2_default_types[] = { - { s_pkcs_5_alg2_wrap, "sha1", "des", 8, 0 }, - { s_pkcs_5_alg2_wrap, "sha1", "rc2", 4, 0 }, - { s_pkcs_5_alg2_wrap, "sha1", "3des", 24, 0 }, - { s_pkcs_5_alg2_wrap, "sha1", "aes", 16, 0 }, - { s_pkcs_5_alg2_wrap, "sha1", "aes", 24, 0 }, - { s_pkcs_5_alg2_wrap, "sha1", "aes", 32, 0 }, -}; - -static const oid_to_pbes s_pbes2_list[] = { - { &s_pbes2_default_types[0], "1.3.14.3.2.7" }, /* http://www.oid-info.com/get/1.3.14.3.2.7 desCBC */ - { &s_pbes2_default_types[1], "1.2.840.113549.3.2" }, /* http://www.oid-info.com/get/1.2.840.113549.3.2 rc2CBC */ - { &s_pbes2_default_types[2], "1.2.840.113549.3.7" }, /* http://www.oid-info.com/get/1.2.840.113549.3.7 des-EDE3-CBC */ - { &s_pbes2_default_types[3], "2.16.840.1.101.3.4.1.2" }, /* http://www.oid-info.com/get/2.16.840.1.101.3.4.1.2 aes128-CBC */ - { &s_pbes2_default_types[4], "2.16.840.1.101.3.4.1.22" }, /* http://www.oid-info.com/get/2.16.840.1.101.3.4.1.22 aes192-CBC */ - { &s_pbes2_default_types[5], "2.16.840.1.101.3.4.1.42" }, /* http://www.oid-info.com/get/2.16.840.1.101.3.4.1.42 aes256-CBC */ -}; - -static int s_pbes2_from_oid(const ltc_asn1_list *cipher_oid, const ltc_asn1_list *hmac_oid, pbes_properties *res) -{ - unsigned int i; - for (i = 0; i < LTC_ARRAY_SIZE(s_pbes2_list); ++i) { - if (pk_oid_cmp_with_asn1(s_pbes2_list[i].oid, cipher_oid) == CRYPT_OK) { - *res = *s_pbes2_list[i].data; - break; - } - } - if (res->c == NULL) return CRYPT_INVALID_CIPHER; - if (hmac_oid != NULL) { - for (i = 0; i < LTC_ARRAY_SIZE(s_hmac_oid_names); ++i) { - if (pk_oid_cmp_with_asn1(s_hmac_oid_names[i].oid, hmac_oid) == CRYPT_OK) { - res->h = s_hmac_oid_names[i].id; - return CRYPT_OK; - } - } - return CRYPT_INVALID_HASH; - } - return CRYPT_OK; -} - - -/** - Extract PBES2 parameters - - @param s The start of the sequence with potential PBES2 parameters - @param res Pointer to where the extracted parameters should be stored - @return CRYPT_OK on success -*/ -int pbes2_extract(const ltc_asn1_list *s, pbes_arg *res) -{ - unsigned long klen; - ltc_asn1_list *lkdf, *lenc, *loptseq, *liter, *lhmac; - int err; - - LTC_ARGCHK(s != NULL); - LTC_ARGCHK(res != NULL); - - if ((err = pk_oid_cmp_with_asn1(s_oid_pbes2, s)) != CRYPT_OK) return err; - - if (!LTC_ASN1_IS_TYPE(s->next, LTC_ASN1_SEQUENCE) || - !LTC_ASN1_IS_TYPE(s->next->child, LTC_ASN1_SEQUENCE) || - !LTC_ASN1_IS_TYPE(s->next->child->child, LTC_ASN1_OBJECT_IDENTIFIER) || - !LTC_ASN1_IS_TYPE(s->next->child->child->next, LTC_ASN1_SEQUENCE) || - !LTC_ASN1_IS_TYPE(s->next->child->next, LTC_ASN1_SEQUENCE) || - !LTC_ASN1_IS_TYPE(s->next->child->next->child, LTC_ASN1_OBJECT_IDENTIFIER)) { - return CRYPT_INVALID_PACKET; - } - /* PBES2: encrypted pkcs8 - PBES2+PBKDF2+des-ede3-cbc: - * 0:d=0 hl=4 l= 380 cons: SEQUENCE - * 4:d=1 hl=2 l= 78 cons: SEQUENCE - * 6:d=2 hl=2 l= 9 prim: OBJECT :PBES2 (== 1.2.840.113549.1.5.13) (== *s) - * 17:d=2 hl=2 l= 65 cons: SEQUENCE - * 19:d=3 hl=2 l= 41 cons: SEQUENCE - * 21:d=4 hl=2 l= 9 prim: OBJECT :PBKDF2 (== *lkdf) - * 32:d=4 hl=2 l= 28 cons: SEQUENCE - * 34:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:28BA4ABF6AA76A3D (== res->salt) - * 44:d=5 hl=2 l= 2 prim: INTEGER :0800 (== res->iterations, *liter) - * 48:d=5 hl=2 l= 12 cons: SEQUENCE (== *loptseq - this sequence is optional, may be missing) - * 50:d=6 hl=2 l= 8 prim: OBJECT :hmacWithSHA256 (== *lhmac) - * 60:d=6 hl=2 l= 0 prim: NULL - * 62:d=3 hl=2 l= 20 cons: SEQUENCE - * 64:d=4 hl=2 l= 8 prim: OBJECT :des-ede3-cbc (== *lenc) - * 74:d=4 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:B1404C4688DC9A5A - * 84:d=1 hl=4 l= 296 prim: OCTET STRING :bytes (== encrypted data) - */ - lkdf = s->next->child->child; - lenc = s->next->child->next->child; - - if ((err = pk_oid_cmp_with_asn1(s_oid_pbkdf2, lkdf)) != CRYPT_OK) return err; - - if (!LTC_ASN1_IS_TYPE(lkdf->next, LTC_ASN1_SEQUENCE) || - !LTC_ASN1_IS_TYPE(lkdf->next->child, LTC_ASN1_OCTET_STRING) || - !LTC_ASN1_IS_TYPE(lkdf->next->child->next, LTC_ASN1_INTEGER)) { - return CRYPT_INVALID_PACKET; - } - - liter = lkdf->next->child->next; - loptseq = liter->next; - res->salt = lkdf->next->child; - res->iterations = ltc_mp_get_int(liter->data); - - /* There's an optional INTEGER keyLength after the iterations, skip that if it's there. - * c.f. RFC 2898 A.2 PBKDF2 */ - if(LTC_ASN1_IS_TYPE(loptseq, LTC_ASN1_INTEGER)) { - loptseq = loptseq->next; - } - - /* this sequence is optional */ - lhmac = NULL; - if (LTC_ASN1_IS_TYPE(loptseq, LTC_ASN1_SEQUENCE) && - LTC_ASN1_IS_TYPE(loptseq->child, LTC_ASN1_OBJECT_IDENTIFIER)) { - lhmac = loptseq->child; - } - if ((err = s_pbes2_from_oid(lenc, lhmac, &res->type)) != CRYPT_OK) return err; - - if (LTC_ASN1_IS_TYPE(lenc->next, LTC_ASN1_OCTET_STRING)) { - /* 'NON-RC2'-CBC */ - res->iv = lenc->next; - } else if (LTC_ASN1_IS_TYPE(lenc->next, LTC_ASN1_SEQUENCE)) { - /* RC2-CBC is a bit special ... - * - * RC2-CBC-Parameter ::= SEQUENCE { - * rc2ParameterVersion INTEGER OPTIONAL, - * iv OCTET STRING (SIZE(8)) } - */ - if (LTC_ASN1_IS_TYPE(lenc->next->child, LTC_ASN1_INTEGER) && - LTC_ASN1_IS_TYPE(lenc->next->child->next, LTC_ASN1_OCTET_STRING)) { - klen = ltc_mp_get_int(lenc->next->child->data); - res->iv = lenc->next->child->next; - /* - * Effective Key Bits Encoding - * 40 160 - * 64 120 - * 128 58 - * b >= 256 b - */ - switch (klen) { - case 160: - res->key_bits = 40; - break; - case 120: - res->key_bits = 64; - break; - case 58: - res->key_bits = 128; - break; - default: - /* We don't handle undefined Key Bits */ - if (klen < 256) return CRYPT_INVALID_KEYSIZE; - - res->key_bits = klen; - break; - } - } else if (LTC_ASN1_IS_TYPE(lenc->next->child, LTC_ASN1_OCTET_STRING)) { - res->iv = lenc->next->child; - /* - * If the rc2ParameterVersion field is omitted, the "effective key bits" - * defaults to 32. - */ - res->key_bits = 32; - } else { - return CRYPT_INVALID_PACKET; - } - } else { - /* PBES2 always carries the IV in the parameters, there is nothing to derive it from */ - return CRYPT_INVALID_PACKET; - } - - return CRYPT_OK; -} - -#endif diff --git a/src/misc/pem/pem.c b/src/misc/pem/pem.c deleted file mode 100644 index ac42facd..00000000 --- a/src/misc/pem/pem.c +++ /dev/null @@ -1,356 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pem.c - Const declarations for PEM, Steffen Jaeckel -*/ - -#ifdef LTC_PEM - -const struct pem_header_id pem_std_headers[] = { - { - /* X.509 Certificates */ - SET_CSTR(.start, "-----BEGIN CERTIFICATE-----"), - SET_CSTR(.end, "-----END CERTIFICATE-----"), - .has_more_headers = no, - .flags = pf_x509, - }, - { - /* PKCS#8 encrypted */ - SET_CSTR(.start, "-----BEGIN ENCRYPTED PRIVATE KEY-----"), - SET_CSTR(.end, "-----END ENCRYPTED PRIVATE KEY-----"), - .has_more_headers = no, - .flags = pf_encrypted_pkcs8, - }, - { - /* PKCS#8 plain */ - SET_CSTR(.start, "-----BEGIN PRIVATE KEY-----"), - SET_CSTR(.end, "-----END PRIVATE KEY-----"), - .has_more_headers = no, - .flags = pf_pkcs8, - }, - { - /* Regular (plain) public keys */ - SET_CSTR(.start, "-----BEGIN PUBLIC KEY-----"), - SET_CSTR(.end, "-----END PUBLIC KEY-----"), - .has_more_headers = no, - .flags = pf_public, - }, - { - SET_CSTR(.start, "-----BEGIN RSA PUBLIC KEY-----"), - SET_CSTR(.end, "-----END RSA PUBLIC KEY-----"), - .has_more_headers = no, - .pka = LTC_PKA_RSA, - .flags = pf_public, - }, - /* Regular plain or encrypted private keys */ - { - SET_CSTR(.start, "-----BEGIN RSA PRIVATE KEY-----"), - SET_CSTR(.end, "-----END RSA PRIVATE KEY-----"), - .has_more_headers = maybe, - .pka = LTC_PKA_RSA, - }, - { - SET_CSTR(.start, "-----BEGIN EC PRIVATE KEY-----"), - SET_CSTR(.end, "-----END EC PRIVATE KEY-----"), - .has_more_headers = maybe, - .pka = LTC_PKA_EC, - }, - { - SET_CSTR(.start, "-----BEGIN DSA PRIVATE KEY-----"), - SET_CSTR(.end, "-----END DSA PRIVATE KEY-----"), - .has_more_headers = maybe, - .pka = LTC_PKA_DSA, - }, -}; -const unsigned long pem_std_headers_num = LTC_ARRAY_SIZE(pem_std_headers); - -/* Encrypted PEM files */ -const struct str pem_proc_type_encrypted = { SET_CSTR(, "Proc-Type: 4,ENCRYPTED") }; -#if defined(LTC_SSH) -const struct str pem_ssh_comment = { SET_CSTR(, "Comment: ") }; -#endif -const struct str pem_dek_info_start = { SET_CSTR(, "DEK-Info: ") }; -const struct blockcipher_info pem_dek_infos[] = - { - { .name = "AES-128-CBC,", .algo = "aes", .keylen = 128 / 8, .mode = cm_cbc, }, - { .name = "AES-192-CBC,", .algo = "aes", .keylen = 192 / 8, .mode = cm_cbc, }, - { .name = "AES-256-CBC,", .algo = "aes", .keylen = 256 / 8, .mode = cm_cbc, }, - { .name = "AES-128-CFB,", .algo = "aes", .keylen = 128 / 8, .mode = cm_cfb, }, - { .name = "AES-192-CFB,", .algo = "aes", .keylen = 192 / 8, .mode = cm_cfb, }, - { .name = "AES-256-CFB,", .algo = "aes", .keylen = 256 / 8, .mode = cm_cfb, }, - { .name = "AES-128-CFB1,", .algo = "aes", .keylen = 128 / 8, .mode = cm_cfb1, }, - { .name = "AES-192-CFB1,", .algo = "aes", .keylen = 192 / 8, .mode = cm_cfb1, }, - { .name = "AES-256-CFB1,", .algo = "aes", .keylen = 256 / 8, .mode = cm_cfb1, }, - { .name = "AES-128-CFB8,", .algo = "aes", .keylen = 128 / 8, .mode = cm_cfb8, }, - { .name = "AES-192-CFB8,", .algo = "aes", .keylen = 192 / 8, .mode = cm_cfb8, }, - { .name = "AES-256-CFB8,", .algo = "aes", .keylen = 256 / 8, .mode = cm_cfb8, }, - { .name = "AES-128-CTR,", .algo = "aes", .keylen = 128 / 8, .mode = cm_ctr, }, - { .name = "AES-192-CTR,", .algo = "aes", .keylen = 192 / 8, .mode = cm_ctr, }, - { .name = "AES-256-CTR,", .algo = "aes", .keylen = 256 / 8, .mode = cm_ctr, }, - { .name = "AES-128-OFB,", .algo = "aes", .keylen = 128 / 8, .mode = cm_ofb, }, - { .name = "AES-192-OFB,", .algo = "aes", .keylen = 192 / 8, .mode = cm_ofb, }, - { .name = "AES-256-OFB,", .algo = "aes", .keylen = 256 / 8, .mode = cm_ofb, }, - { .name = "ARIA-128-CBC,", .algo = "aria", .keylen = 128 / 8, .mode = cm_cbc, }, - { .name = "ARIA-192-CBC,", .algo = "aria", .keylen = 192 / 8, .mode = cm_cbc, }, - { .name = "ARIA-256-CBC,", .algo = "aria", .keylen = 256 / 8, .mode = cm_cbc, }, - { .name = "ARIA-128-CFB,", .algo = "aria", .keylen = 128 / 8, .mode = cm_cfb, }, - { .name = "ARIA-192-CFB,", .algo = "aria", .keylen = 192 / 8, .mode = cm_cfb, }, - { .name = "ARIA-256-CFB,", .algo = "aria", .keylen = 256 / 8, .mode = cm_cfb, }, - { .name = "ARIA-128-CFB1,", .algo = "aria", .keylen = 128 / 8, .mode = cm_cfb1, }, - { .name = "ARIA-192-CFB1,", .algo = "aria", .keylen = 192 / 8, .mode = cm_cfb1, }, - { .name = "ARIA-256-CFB1,", .algo = "aria", .keylen = 256 / 8, .mode = cm_cfb1, }, - { .name = "ARIA-128-CFB8,", .algo = "aria", .keylen = 128 / 8, .mode = cm_cfb8, }, - { .name = "ARIA-192-CFB8,", .algo = "aria", .keylen = 192 / 8, .mode = cm_cfb8, }, - { .name = "ARIA-256-CFB8,", .algo = "aria", .keylen = 256 / 8, .mode = cm_cfb8, }, - { .name = "ARIA-128-CTR,", .algo = "aria", .keylen = 128 / 8, .mode = cm_ctr, }, - { .name = "ARIA-192-CTR,", .algo = "aria", .keylen = 192 / 8, .mode = cm_ctr, }, - { .name = "ARIA-256-CTR,", .algo = "aria", .keylen = 256 / 8, .mode = cm_ctr, }, - { .name = "ARIA-128-OFB,", .algo = "aria", .keylen = 128 / 8, .mode = cm_ofb, }, - { .name = "ARIA-192-OFB,", .algo = "aria", .keylen = 192 / 8, .mode = cm_ofb, }, - { .name = "ARIA-256-OFB,", .algo = "aria", .keylen = 256 / 8, .mode = cm_ofb, }, - { .name = "BF-CBC,", .algo = "blowfish", .keylen = 128 / 8, .mode = cm_cbc, }, - { .name = "BF-CFB,", .algo = "blowfish", .keylen = 128 / 8, .mode = cm_cfb, }, - { .name = "BF-OFB,", .algo = "blowfish", .keylen = 128 / 8, .mode = cm_ofb, }, - { .name = "CAMELLIA-128-CBC,", .algo = "camellia", .keylen = 128 / 8, .mode = cm_cbc, }, - { .name = "CAMELLIA-192-CBC,", .algo = "camellia", .keylen = 192 / 8, .mode = cm_cbc, }, - { .name = "CAMELLIA-256-CBC,", .algo = "camellia", .keylen = 256 / 8, .mode = cm_cbc, }, - { .name = "CAMELLIA-128-CFB,", .algo = "camellia", .keylen = 128 / 8, .mode = cm_cfb, }, - { .name = "CAMELLIA-192-CFB,", .algo = "camellia", .keylen = 192 / 8, .mode = cm_cfb, }, - { .name = "CAMELLIA-256-CFB,", .algo = "camellia", .keylen = 256 / 8, .mode = cm_cfb, }, - { .name = "CAMELLIA-128-CFB1,", .algo = "camellia", .keylen = 128 / 8, .mode = cm_cfb1, }, - { .name = "CAMELLIA-192-CFB1,", .algo = "camellia", .keylen = 192 / 8, .mode = cm_cfb1, }, - { .name = "CAMELLIA-256-CFB1,", .algo = "camellia", .keylen = 256 / 8, .mode = cm_cfb1, }, - { .name = "CAMELLIA-128-CFB8,", .algo = "camellia", .keylen = 128 / 8, .mode = cm_cfb8, }, - { .name = "CAMELLIA-192-CFB8,", .algo = "camellia", .keylen = 192 / 8, .mode = cm_cfb8, }, - { .name = "CAMELLIA-256-CFB8,", .algo = "camellia", .keylen = 256 / 8, .mode = cm_cfb8, }, - { .name = "CAMELLIA-128-CTR,", .algo = "camellia", .keylen = 128 / 8, .mode = cm_ctr, }, - { .name = "CAMELLIA-192-CTR,", .algo = "camellia", .keylen = 192 / 8, .mode = cm_ctr, }, - { .name = "CAMELLIA-256-CTR,", .algo = "camellia", .keylen = 256 / 8, .mode = cm_ctr, }, - { .name = "CAMELLIA-128-OFB,", .algo = "camellia", .keylen = 128 / 8, .mode = cm_ofb, }, - { .name = "CAMELLIA-192-OFB,", .algo = "camellia", .keylen = 192 / 8, .mode = cm_ofb, }, - { .name = "CAMELLIA-256-OFB,", .algo = "camellia", .keylen = 256 / 8, .mode = cm_ofb, }, - { .name = "CAST5-CBC,", .algo = "cast5", .keylen = 128 / 8, .mode = cm_cbc, }, - { .name = "CAST5-CFB,", .algo = "cast5", .keylen = 128 / 8, .mode = cm_cfb, }, - { .name = "CAST5-OFB,", .algo = "cast5", .keylen = 128 / 8, .mode = cm_ofb, }, - { .name = "ChaCha20,", .algo = "chacha20", .keylen = 256 / 8, .mode = cm_stream, }, - { .name = "DES-EDE-CBC,", .algo = "3des", .keylen = 128 / 8, .mode = cm_cbc, }, - { .name = "DES-EDE-CFB,", .algo = "3des", .keylen = 128 / 8, .mode = cm_cfb, }, - { .name = "DES-EDE-OFB,", .algo = "3des", .keylen = 128 / 8, .mode = cm_ofb, }, - { .name = "DES-EDE3-CBC,", .algo = "3des", .keylen = 192 / 8, .mode = cm_cbc, }, - { .name = "DES-EDE3-CFB,", .algo = "3des", .keylen = 192 / 8, .mode = cm_cfb, }, - { .name = "DES-EDE3-CFB1,", .algo = "3des", .keylen = 192 / 8, .mode = cm_cfb1, }, - { .name = "DES-EDE3-CFB8,", .algo = "3des", .keylen = 192 / 8, .mode = cm_cfb8, }, - { .name = "DES-EDE3-OFB,", .algo = "3des", .keylen = 192 / 8, .mode = cm_ofb, }, - { .name = "DES-CBC,", .algo = "des", .keylen = 64 / 8, .mode = cm_cbc, }, - { .name = "DES-CFB,", .algo = "des", .keylen = 64 / 8, .mode = cm_cfb, }, - { .name = "DES-CFB1,", .algo = "des", .keylen = 64 / 8, .mode = cm_cfb1, }, - { .name = "DES-CFB8,", .algo = "des", .keylen = 64 / 8, .mode = cm_cfb8, }, - { .name = "DES-OFB,", .algo = "des", .keylen = 64 / 8, .mode = cm_ofb, }, - { .name = "DESX-CBC,", .algo = "desx", .keylen = 192 / 8, .mode = cm_cbc, }, - { .name = "IDEA-CBC,", .algo = "idea", .keylen = 128 / 8, .mode = cm_cbc, }, - { .name = "IDEA-CFB,", .algo = "idea", .keylen = 128 / 8, .mode = cm_cfb, }, - { .name = "IDEA-OFB,", .algo = "idea", .keylen = 128 / 8, .mode = cm_ofb, }, - { .name = "RC5-CBC,", .algo = "rc5", .keylen = 128 / 8, .mode = cm_cbc, }, - { .name = "RC5-CFB,", .algo = "rc5", .keylen = 128 / 8, .mode = cm_cfb, }, - { .name = "RC5-OFB,", .algo = "rc5", .keylen = 128 / 8, .mode = cm_ofb, }, - { .name = "RC2-40-CBC,", .algo = "rc2", .keylen = 40 / 8, .mode = cm_cbc, }, - { .name = "RC2-64-CBC,", .algo = "rc2", .keylen = 64 / 8, .mode = cm_cbc, }, - { .name = "RC2-CBC,", .algo = "rc2", .keylen = 128 / 8, .mode = cm_cbc, }, - { .name = "RC2-CFB,", .algo = "rc2", .keylen = 128 / 8, .mode = cm_cfb, }, - { .name = "RC2-OFB,", .algo = "rc2", .keylen = 128 / 8, .mode = cm_ofb, }, - { .name = "SEED-CBC,", .algo = "seed", .keylen = 128 / 8, .mode = cm_cbc, }, - { .name = "SEED-CFB,", .algo = "seed", .keylen = 128 / 8, .mode = cm_cfb, }, - { .name = "SEED-OFB,", .algo = "seed", .keylen = 128 / 8, .mode = cm_ofb, }, - }; -const unsigned long pem_dek_infos_num = LTC_ARRAY_SIZE(pem_dek_infos); - -int pem_decrypt(unsigned char *data, unsigned long *datalen, - unsigned char *key, unsigned long keylen, - unsigned char *iv, unsigned long ivlen, - unsigned char *tag, unsigned long taglen, - const struct blockcipher_info *info, - enum padding_type padding) -{ - int err, cipher = -1; - struct { - union { -#ifdef LTC_CBC_MODE - symmetric_CBC cbc; -#endif -#ifdef LTC_CFB_MODE - symmetric_CFB cfb; -#endif -#ifdef LTC_CTR_MODE - symmetric_CTR ctr; -#endif -#ifdef LTC_OFB_MODE - symmetric_OFB ofb; -#endif - } ctx; - } s; - enum cipher_mode mode = info->mode & cm_modes; - - if (mode != cm_stream) { - cipher = find_cipher(info->algo); - if (cipher == -1) { - return CRYPT_INVALID_CIPHER; - } - } - - switch (info->mode) { - case cm_cbc: -#ifdef LTC_CBC_MODE - LTC_ARGCHK(ivlen == (unsigned long)cipher_descriptor[cipher].block_length); - - if ((err = cbc_start(cipher, iv, key, keylen, 0, &s.ctx.cbc)) != CRYPT_OK) { - goto error_out; - } - if ((err = cbc_decrypt(data, data, *datalen, &s.ctx.cbc)) != CRYPT_OK) { - goto error_out; - } - if ((err = cbc_done(&s.ctx.cbc)) != CRYPT_OK) { - goto error_out; - } - - if ((err = padding_depad(data, datalen, padding | s.ctx.cbc.ecb.blocklen)) != CRYPT_OK) { - goto error_out; - } -#else - return CRYPT_INVALID_CIPHER; -#endif - break; - case cm_cfb: - case cm_cfb1: - case cm_cfb8: -#ifdef LTC_CFB_MODE - if (info->mode == cm_cfb) { - if ((err = cfb_start(cipher, iv, key, keylen, 0, &s.ctx.cfb)) != CRYPT_OK) { - goto error_out; - } - } else { - if ((err = cfb_start_ex(cipher, iv, key, keylen, 0, info->mode == cm_cfb1 ? 1 : 8, &s.ctx.cfb)) != CRYPT_OK) { - goto error_out; - } - } - if ((err = cfb_decrypt(data, data, *datalen, &s.ctx.cfb)) != CRYPT_OK) { - goto error_out; - } - if ((err = cfb_done(&s.ctx.cfb)) != CRYPT_OK) { - goto error_out; - } -#else - return CRYPT_INVALID_CIPHER; -#endif - break; - case cm_ctr: -#ifdef LTC_CTR_MODE - if ((err = ctr_start(cipher, iv, key, keylen, 0, CTR_COUNTER_BIG_ENDIAN, &s.ctx.ctr)) != CRYPT_OK) { - goto error_out; - } - if ((err = ctr_decrypt(data, data, *datalen, &s.ctx.ctr)) != CRYPT_OK) { - goto error_out; - } - if ((err = ctr_done(&s.ctx.ctr)) != CRYPT_OK) { - goto error_out; - } -#else - return CRYPT_INVALID_CIPHER; -#endif - break; - case cm_ofb: -#ifdef LTC_OFB_MODE - if ((err = ofb_start(cipher, iv, key, keylen, 0, &s.ctx.ofb)) != CRYPT_OK) { - goto error_out; - } - if ((err = ofb_decrypt(data, data, *datalen, &s.ctx.ofb)) != CRYPT_OK) { - goto error_out; - } - if ((err = ofb_done(&s.ctx.ofb)) != CRYPT_OK) { - goto error_out; - } -#else - return CRYPT_INVALID_CIPHER; -#endif - break; - case cm_gcm: -#ifdef LTC_GCM_MODE - if ((err = gcm_memory(cipher, - key, keylen, - iv, ivlen, - NULL, 0, - data, *datalen, data, - tag, &taglen, - GCM_DECRYPT)) != CRYPT_OK) { - goto error_out; - } -#else - LTC_UNUSED_PARAM(tag); - LTC_UNUSED_PARAM(taglen); - return CRYPT_INVALID_CIPHER; -#endif - break; - case cm_stream: -#ifdef LTC_CHACHA - LTC_ARGCHK(ivlen == 16); - - if ((err = chacha_memory(key, keylen, 20, - iv, ivlen, 0, - data, *datalen, data)) != CRYPT_OK) { - goto error_out; - } -#else - return CRYPT_INVALID_CIPHER; -#endif - break; - case cm_stream_openssh: -#ifdef LTC_CHACHA20POLY1305_MODE - if ((err = chacha20poly1305_memory(key, 32, - iv, ivlen, - NULL, 0, - data, *datalen, data, - tag, &taglen, - CHACHA20POLY1305_DECRYPT | CHACHA20POLY1305_OPENSSH_COMPAT)) != CRYPT_OK) { - goto error_out; - } -#else - return CRYPT_INVALID_CIPHER; -#endif - break; - default: - err = CRYPT_INVALID_ARG; - break; - } - -error_out: - return err; -} - -#ifndef LTC_NO_FILE -int pem_decode_filehandle(FILE *f, ltc_pka_key *k, const password_ctx *pw_ctx) -{ - int err = pem_decode_pkcs_filehandle(f, k, pw_ctx); - if (err == CRYPT_OK || err != CRYPT_UNKNOWN_PEM) - return err; -#if defined(LTC_SSH) - rewind(f); - err = pem_decode_openssh_filehandle(f, k, pw_ctx); -#endif - return err; -} -#endif - -int pem_decode(const void *buf, unsigned long len, ltc_pka_key *k, const password_ctx *pw_ctx) -{ - int err = pem_decode_pkcs(buf, len, k, pw_ctx); - if (err == CRYPT_OK || err != CRYPT_UNKNOWN_PEM) - return err; -#if defined(LTC_SSH) - err = pem_decode_openssh(buf, len, k, pw_ctx); -#endif - return err; -} - -#endif /* LTC_PEM */ diff --git a/src/misc/pem/pem_pkcs.c b/src/misc/pem/pem_pkcs.c deleted file mode 100644 index ebf0b44e..00000000 --- a/src/misc/pem/pem_pkcs.c +++ /dev/null @@ -1,226 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pem_decode.c - Decode a PEM file, Steffen Jaeckel -*/ - -#ifdef LTC_PEM - -static int s_decrypt_pem(unsigned char *asn1_cert, unsigned long *asn1_len, const struct pem_headers *hdr) -{ - unsigned char iv[MAXBLOCKSIZE], key[MAXBLOCKSIZE]; - unsigned long ivlen, klen; - int err; - - if (hdr->info.keylen > sizeof(key)) { - return CRYPT_BUFFER_OVERFLOW; - } - if (!hdr->pw->pw) { - return CRYPT_INVALID_ARG; - } - - ivlen = sizeof(iv); - if ((err = base16_decode(hdr->info.iv, XSTRLEN(hdr->info.iv), iv, &ivlen)) != CRYPT_OK) { - return err; - } - klen = hdr->info.keylen; - if ((err = pkcs_5_alg1_openssl(hdr->pw->pw, hdr->pw->l, iv, 1, find_hash("md5"), key, &klen))) { - return err; - } - - err = pem_decrypt(asn1_cert, asn1_len, key, klen, iv, ivlen, NULL, 0, &hdr->info, LTC_PAD_PKCS7); - - zeromem(key, sizeof(key)); - zeromem(iv, sizeof(iv)); - return err; -} - -typedef int (*pkcs8_import_fn)(ltc_asn1_list *, ltc_asn1_list *, void*); - -static const struct { - enum ltc_pka_id id; - pkcs8_import_fn fn; -} s_import_pkcs8_map[LTC_OID_NUM] = { -#ifdef LTC_MDH - [LTC_OID_DH] = { LTC_PKA_DH, (pkcs8_import_fn)dh_import_pkcs8_asn1 }, -#endif -#ifdef LTC_MDSA - [LTC_OID_DSA] = { LTC_PKA_DSA, (pkcs8_import_fn)dsa_import_pkcs8_asn1 }, -#endif -#ifdef LTC_MRSA - [LTC_OID_RSA] = { LTC_PKA_RSA, (pkcs8_import_fn)rsa_import_pkcs8_asn1 }, -#endif -#ifdef LTC_MECC - [LTC_OID_EC] = { LTC_PKA_EC, (pkcs8_import_fn)ecc_import_pkcs8_asn1 }, -#endif -#ifdef LTC_CURVE25519 - [LTC_OID_X25519] = { LTC_PKA_X25519, (pkcs8_import_fn)x25519_import_pkcs8_asn1 }, - [LTC_OID_ED25519] = { LTC_PKA_ED25519, (pkcs8_import_fn)ed25519_import_pkcs8_asn1 }, -#endif -#ifdef LTC_CURVE448 - [LTC_OID_X448] = { LTC_PKA_X448, (pkcs8_import_fn)x448_import_pkcs8_asn1 }, - [LTC_OID_ED448] = { LTC_PKA_ED448, (pkcs8_import_fn)ed448_import_pkcs8_asn1 }, -#endif -}; - -static int s_import_pkcs8(unsigned char *asn1_cert, unsigned long asn1_len, ltc_pka_key *k, const password_ctx *pw_ctx) -{ - int err; - enum ltc_oid_id oid_id; - ltc_asn1_list *alg_id = NULL, *priv_key = NULL; - ltc_asn1_list *p8_asn1 = NULL; - if ((err = pkcs8_decode_flexi(asn1_cert, asn1_len, pw_ctx, &p8_asn1)) != CRYPT_OK) { - goto cleanup; - } - if ((err = pkcs8_get_children(p8_asn1, &oid_id, &alg_id, &priv_key)) != CRYPT_OK) { - goto cleanup; - } - if (oid_id < 0 - || oid_id > LTC_ARRAY_SIZE(s_import_pkcs8_map) - || s_import_pkcs8_map[oid_id].fn == NULL) { - err = CRYPT_PK_INVALID_TYPE; - goto cleanup; - } - if ((err = s_import_pkcs8_map[oid_id].fn(alg_id, priv_key, &k->u)) == CRYPT_OK) { - k->id = s_import_pkcs8_map[oid_id].id; - } - -cleanup: - if (p8_asn1) { - der_sequence_free(p8_asn1); - } - return err; -} - -static int s_extract_pka(unsigned char *asn1_cert, unsigned long asn1_len, enum ltc_pka_id *pka) -{ - ltc_asn1_list *pub; - int err = CRYPT_ERROR; - if ((err = der_decode_sequence_flexi(asn1_cert, &asn1_len, &pub)) != CRYPT_OK) { - return err; - } - err = x509_get_pka(pub, pka); - der_sequence_free(pub); - return err; -} - -typedef int (*import_fn)(const unsigned char *, unsigned long, void*); - -static const import_fn s_import_openssl_fns[LTC_PKA_NUM] = { -#ifdef LTC_MRSA - [LTC_PKA_RSA] = (import_fn)rsa_import, - [LTC_PKA_RSA_PSS] = (import_fn)rsa_import, -#endif -#ifdef LTC_MDSA - [LTC_PKA_DSA] = (import_fn)dsa_import, -#endif -#ifdef LTC_MECC - [LTC_PKA_EC] = (import_fn)ecc_import_openssl, -#endif -#ifdef LTC_CURVE25519 - [LTC_PKA_X25519] = (import_fn)x25519_import, - [LTC_PKA_ED25519] = (import_fn)ed25519_import, -#endif -#ifdef LTC_CURVE448 - [LTC_PKA_X448] = (import_fn)x448_import, - [LTC_PKA_ED448] = (import_fn)ed448_import, -#endif -}; - -static int s_decode(struct get_char *g, ltc_pka_key *k, const password_ctx *pw_ctx) -{ - unsigned char *asn1_cert = NULL; - unsigned long w = 0, asn1_len, n; - int err = CRYPT_ERROR; - struct pem_headers hdr = { 0 }; - struct password pw = { 0 }; - enum ltc_pka_id pka; - XMEMSET(k, 0, sizeof(*k)); - for (n = 0; n < pem_std_headers_num; ++n) { - hdr.id = &pem_std_headers[n]; - err = pem_read((void**)&asn1_cert, &w, &hdr, g); - if (err == CRYPT_OK) { - break; - } else if (err != CRYPT_UNKNOWN_PEM) { - goto cleanup; - } - hdr.id = NULL; - } - /* id not found */ - if (hdr.id == NULL) - goto cleanup; - asn1_len = w; - if (hdr.id->flags & pf_pkcs8) { - err = s_import_pkcs8(asn1_cert, asn1_len, k, pw_ctx); - goto cleanup; - } else if (hdr.id->flags == pf_x509) { - err = x509_import_spki(asn1_cert, asn1_len, k, NULL); - goto cleanup; - } else if ((hdr.id->flags & pf_public) && hdr.id->pka == LTC_PKA_UNDEF) { - if ((err = s_extract_pka(asn1_cert, asn1_len, &pka)) != CRYPT_OK) { - goto cleanup; - } - } else if (hdr.encrypted) { - if ((pw_ctx == NULL) || (pw_ctx->callback == NULL)) { - err = CRYPT_PW_CTX_MISSING; - goto cleanup; - } - - hdr.pw = &pw; - if (pw_ctx->callback(&hdr.pw->pw, &hdr.pw->l, pw_ctx->userdata)) { - err = CRYPT_ERROR; - goto cleanup; - } - - if ((err = s_decrypt_pem(asn1_cert, &asn1_len, &hdr)) != CRYPT_OK) { - goto cleanup; - } - pka = hdr.id->pka; - } else { - pka = hdr.id->pka; - } - - if (pka < 0 - || pka > LTC_ARRAY_SIZE(s_import_openssl_fns) - || s_import_openssl_fns[pka] == NULL) { - err = CRYPT_PK_INVALID_TYPE; - goto cleanup; - } - if ((err = s_import_openssl_fns[pka](asn1_cert, asn1_len, &k->u)) == CRYPT_OK) { - k->id = pka; - } - -cleanup: - password_free(hdr.pw, pw_ctx); - XFREE(asn1_cert); - return err; -} - -#ifndef LTC_NO_FILE -int pem_decode_pkcs_filehandle(FILE *f, ltc_pka_key *k, const password_ctx *pw_ctx) -{ - LTC_ARGCHK(f != NULL); - LTC_ARGCHK(k != NULL); - { - struct get_char g = pem_get_char_init_filehandle(f); - return s_decode(&g, k, pw_ctx); - } -} -#endif /* LTC_NO_FILE */ - -int pem_decode_pkcs(const void *buf, unsigned long len, ltc_pka_key *k, const password_ctx *pw_ctx) -{ - LTC_ARGCHK(buf != NULL || len == 0); - LTC_ARGCHK(k != NULL); - if (len == 0) - return CRYPT_OK; - { - struct get_char g = pem_get_char_init(buf, len); - return s_decode(&g, k, pw_ctx); - } -} - -#endif /* LTC_PEM */ diff --git a/src/misc/pem/pem_read.c b/src/misc/pem/pem_read.c deleted file mode 100644 index 902f4112..00000000 --- a/src/misc/pem/pem_read.c +++ /dev/null @@ -1,310 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pem_read.c - Read and interpret a PEM file, Steffen Jaeckel -*/ - -#ifdef LTC_PEM - -static LTC_INLINE unsigned long s_bufp_alloc_len(struct bufp *buf) -{ - if (buf->start == NULL || buf->end == NULL) - return 0; - return buf->end - buf->start; -} - -static LTC_INLINE unsigned long s_bufp_used_len(struct bufp *buf) -{ - if (buf->start == NULL || buf->end == NULL) - return 0; - return buf->work - buf->start; -} - -static LTC_INLINE int s_bufp_grow(struct bufp *buf) -{ - int err = CRYPT_OK; - void *ret; - unsigned long alloc_len = s_bufp_alloc_len(buf), realloc_len; - unsigned long work_offset = s_bufp_used_len(buf); - if (alloc_len == 0) - realloc_len = LTC_PEM_READ_BUFSIZE; - else - realloc_len = alloc_len * 2; - if (realloc_len < alloc_len) - return CRYPT_OVERFLOW; - ret = XREALLOC(buf->start, realloc_len); - if (ret == NULL) { - err = CRYPT_MEM; - } else { - UPDATE_BUFP((*buf), ret, work_offset, realloc_len); - } - return err; -} - -static LTC_INLINE int s_bufp_fits(struct bufp *buf, unsigned long to_write) -{ - char *d = buf->work; - char *e = buf->end; - char *w; - if (d == NULL || e == NULL) - return 0; - w = d + to_write; - if (w < d || w > e) - return 0; - return 1; -} - -static LTC_INLINE int s_bufp_add(struct bufp *buf, const void *src, unsigned long len) -{ - int err; - if (!s_bufp_fits(buf, len)) { - if ((err = s_bufp_grow(buf)) != CRYPT_OK) { - return err; - } - } - XMEMCPY(buf->work, src, len); - buf->work += len; - return CRYPT_OK; -} - -#ifndef LTC_NO_FILE -static int s_pem_get_char_from_file(struct get_char *g) -{ - return getc(g->data.f.f); -} - -const struct get_char_api get_char_filehandle_api = { - .get = s_pem_get_char_from_file, -}; -#endif /* LTC_NO_FILE */ - -static int s_pem_get_char_from_buf(struct get_char *g) -{ - int ret; - if (g->data.buf.work == g->data.buf.end) { - return -1; - } - ret = *g->data.buf.work; - g->data.buf.work++; - return ret; -} - -const struct get_char_api get_char_buffer_api = { - .get = s_pem_get_char_from_buf, -}; - -static void s_unget_line(char *buf, unsigned long buflen, struct get_char *g) -{ - if (buflen > sizeof(g->unget_buf_)) - return; - g->unget_buf.p = g->unget_buf_; - COPY_STR(g->unget_buf, buf, buflen); -} - -static void s_tts(char *buf, unsigned long *buflen) -{ - while(1) { - unsigned long blen = *buflen; - if (blen < 2) - return; - blen--; - switch (buf[blen]) { - case ' ': - case '\t': - buf[blen] = '\0'; - *buflen = blen; - break; - default: - return; - } - } -} - -static char* s_get_line_i(char *buf, unsigned long *buflen, struct get_char *g, int search_for_start) -{ - unsigned long blen = 0, wr = 0; - int c_; - if (g->unget_buf.p) { - if (*buflen < g->unget_buf.len) { - return NULL; - } - XMEMCPY(buf, g->unget_buf.p, g->unget_buf.len); - *buflen = g->unget_buf.len; - RESET_STR(g->unget_buf); - return buf; - } - if (g->prev_get == -1) { - return NULL; - } - while(blen < *buflen || search_for_start) { - wr = blen < *buflen ? blen : *buflen - 1; - c_ = g->prev_get; - g->prev_get = g->api.get(g); - if (g->prev_get == '\n') { - buf[wr] = '\0'; - if (c_ == '\r') { - buf[--wr] = '\0'; - } - s_tts(buf, &wr); - *buflen = wr; - g->total_read++; - return buf; - } - if (g->prev_get == -1 || g->prev_get == '\0') { - buf[wr] = '\0'; - s_tts(buf, &wr); - *buflen = wr; - return buf; - } - buf[wr] = g->prev_get; - blen++; - g->total_read++; - } - return NULL; -} - -static LTC_INLINE char* s_get_first_line(char *buf, unsigned long *buflen, struct get_char *g) -{ - return s_get_line_i(buf, buflen, g, 1); -} - -static LTC_INLINE char* s_get_line(char *buf, unsigned long *buflen, struct get_char *g) -{ - return s_get_line_i(buf, buflen, g, 0); -} - -static int s_pem_decode_headers(struct pem_headers *hdr, struct get_char *g) -{ - char buf[LTC_PEM_DECODE_BUFSZ], *alg_start; - unsigned long slen, tmplen, n; - int has_more_headers = hdr->id->has_more_headers == no ? 0 : 3; - - /* Make sure the PEM has the appropriate extension headers if required. - * - * ``` - * Proc-Type: 4,ENCRYPTED[\r]\n - * DEK-Info: ,[\r]\n - * [\r]\n - * ``` - */ - while (has_more_headers) { - slen = sizeof(buf); - if (!s_get_line(buf, &slen, g) || (has_more_headers > 1 && slen == 0)) { - return CRYPT_INVALID_PACKET; - } - switch (has_more_headers) { - case 3: - if (XMEMCMP(buf, pem_proc_type_encrypted.p, pem_proc_type_encrypted.len)) { -#ifdef LTC_SSH - if (XMEMCMP(buf, pem_ssh_comment.p, pem_ssh_comment.len)) -#endif - s_unget_line(buf, slen, g); - if (hdr->id->has_more_headers == maybe) - return CRYPT_OK; - else - return CRYPT_INVALID_PACKET; - } - hdr->encrypted = 1; - break; - case 2: - hdr->info.algo = NULL; - if (XMEMCMP(buf, pem_dek_info_start.p, pem_dek_info_start.len)) - return CRYPT_INVALID_PACKET; - alg_start = &buf[pem_dek_info_start.len]; - for (n = 0; n < pem_dek_infos_num; ++n) { - unsigned long namelen = XSTRLEN(pem_dek_infos[n].name); - if (slen >= namelen + pem_dek_info_start.len && !XMEMCMP(alg_start, pem_dek_infos[n].name, namelen)) { - char *iv = alg_start + namelen; - hdr->info = pem_dek_infos[n]; - tmplen = XSTRLEN(iv); - if (tmplen > sizeof(hdr->info.iv)) - return CRYPT_INVALID_KEYSIZE; - XMEMCPY(hdr->info.iv, iv, tmplen); - break; - } - } - if (hdr->info.algo == NULL) { - return CRYPT_INVALID_CIPHER; - } - break; - case 1: - /* Make sure that there's an empty line in between */ - if (buf[0] != '\0') - return CRYPT_INVALID_PACKET; - break; - default: - return CRYPT_INVALID_CIPHER; - } - has_more_headers--; - } - return CRYPT_OK; -} - -int pem_read(void **dest, unsigned long *len, struct pem_headers *hdr, struct get_char *g) -{ - char line[LTC_PEM_DECODE_BUFSZ]; - struct bufp b_ = {0}, *b = &b_; - const char pem_start[] = "----"; - unsigned long slen; - int err, hdr_ok = 0; - unsigned char empty_lines = 0; - - g->prev_get = 0; - do { - slen = sizeof(line); - if (s_get_first_line(line, &slen, g) == NULL) { - if (g->prev_get == -1) - return CRYPT_NOP; - else - return CRYPT_INVALID_PACKET; - } - if (slen < sizeof(pem_start) - 1) - continue; - } while(XMEMCMP(line, pem_start, sizeof(pem_start) - 1) != 0); - if (hdr->id->start.len != slen || XMEMCMP(line, hdr->id->start.p, hdr->id->start.len)) { - s_unget_line(line, slen, g); - return CRYPT_UNKNOWN_PEM; - } - - hdr->encrypted = hdr->id->flags & pf_encrypted; - if ((err = s_pem_decode_headers(hdr, g)) != CRYPT_OK) - return err; - - /* Read the base64 encoded part of the PEM */ - slen = sizeof(line); - while (s_get_line(line, &slen, g)) { - if (slen == hdr->id->end.len && !XMEMCMP(line, hdr->id->end.p, slen)) { - hdr_ok = 1; - break; - } - if (!slen) { - if (empty_lines) - break; - empty_lines++; - } - if ((err = s_bufp_add(b, line, slen)) != CRYPT_OK) { - goto error_out; - } - slen = sizeof(line); - } - if (!hdr_ok) { - err = CRYPT_INVALID_PACKET; - } else { - slen = s_bufp_alloc_len(b); - err = base64_strict_decode(b->start, s_bufp_used_len(b), (void*)b->start, &slen); - } - if (err == CRYPT_OK) { - *dest = b->start; - *len = slen; - - } else { -error_out: - XFREE(b->start); - } - return err; -} - -#endif /* LTC_PEM */ diff --git a/src/misc/pem/pem_ssh.c b/src/misc/pem/pem_ssh.c deleted file mode 100644 index bf4008db..00000000 --- a/src/misc/pem/pem_ssh.c +++ /dev/null @@ -1,861 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pem_ssh.c - SSH specific functionality to process PEM files, Steffen Jaeckel - - The basic format of the key is described here: - https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key -*/ - -#if defined(LTC_PEM_SSH) - -/* Table as of - * https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xhtml#ssh-parameters-17 - */ -const struct blockcipher_info ssh_ciphers[] = -{ - { .name = "none", .algo = "", .keylen = 0, .mode = cm_none }, - { .name = "aes128-cbc", .algo = "aes", .keylen = 128 / 8, .mode = cm_cbc }, - { .name = "aes128-ctr", .algo = "aes", .keylen = 128 / 8, .mode = cm_ctr }, - { .name = "aes192-cbc", .algo = "aes", .keylen = 192 / 8, .mode = cm_cbc }, - { .name = "aes192-ctr", .algo = "aes", .keylen = 192 / 8, .mode = cm_ctr }, - { .name = "aes256-cbc", .algo = "aes", .keylen = 256 / 8, .mode = cm_cbc }, - { .name = "aes256-ctr", .algo = "aes", .keylen = 256 / 8, .mode = cm_ctr }, - { .name = "aes128-gcm@openssh.com", .algo = "aes", .keylen = 128 / 8, .mode = cm_gcm }, - { .name = "aes256-gcm@openssh.com", .algo = "aes", .keylen = 256 / 8, .mode = cm_gcm }, - { .name = "blowfish128-cbc", .algo = "blowfish", .keylen = 128 / 8, .mode = cm_cbc }, - { .name = "blowfish128-ctr", .algo = "blowfish", .keylen = 128 / 8, .mode = cm_ctr }, - /* The algo name doesn't matter, it's only used in latex-tables */ - { .name = "chacha20-poly1305@openssh.com", .algo = "c20p1305", .keylen = 256 / 8, .mode = cm_stream | cm_openssh }, - { .name = "des-cbc", .algo = "des", .keylen = 64 / 8, .mode = cm_cbc }, - { .name = "3des-cbc", .algo = "3des", .keylen = 192 / 8, .mode = cm_cbc }, - { .name = "3des-ctr", .algo = "3des", .keylen = 192 / 8, .mode = cm_ctr }, - { .name = "serpent128-cbc", .algo = "serpent", .keylen = 128 / 8, .mode = cm_cbc }, - { .name = "serpent128-ctr", .algo = "serpent", .keylen = 128 / 8, .mode = cm_ctr }, - { .name = "serpent192-cbc", .algo = "serpent", .keylen = 192 / 8, .mode = cm_cbc }, - { .name = "serpent192-ctr", .algo = "serpent", .keylen = 192 / 8, .mode = cm_ctr }, - { .name = "serpent256-cbc", .algo = "serpent", .keylen = 256 / 8, .mode = cm_cbc }, - { .name = "serpent256-ctr", .algo = "serpent", .keylen = 256 / 8, .mode = cm_ctr }, - { .name = "twofish128-cbc", .algo = "twofish", .keylen = 128 / 8, .mode = cm_cbc }, - { .name = "twofish128-ctr", .algo = "twofish", .keylen = 128 / 8, .mode = cm_ctr }, - { .name = "twofish192-cbc", .algo = "twofish", .keylen = 192 / 8, .mode = cm_cbc }, - { .name = "twofish192-ctr", .algo = "twofish", .keylen = 192 / 8, .mode = cm_ctr }, - { .name = "twofish-cbc", .algo = "twofish", .keylen = 256 / 8, .mode = cm_cbc }, - { .name = "twofish256-cbc", .algo = "twofish", .keylen = 256 / 8, .mode = cm_cbc }, - { .name = "twofish256-ctr", .algo = "twofish", .keylen = 256 / 8, .mode = cm_ctr }, -}; -const unsigned long ssh_ciphers_num = LTC_ARRAY_SIZE(ssh_ciphers); - -struct kdf_options { - const char *name; - const struct blockcipher_info *cipher; - unsigned char salt[64]; - unsigned long saltlen; - ulong32 num_rounds; - struct password pw; -}; - -#ifdef LTC_MECC -static int s_ssh_find_ecc(const char *pka, const ltc_ecc_curve **curve) -{ - int err; - const char* prefix = "ecdsa-sha2-"; - unsigned long prefixlen = XSTRLEN(prefix); - if (strstr(pka, prefix) == NULL) return CRYPT_PK_INVALID_TYPE; - if ((err = ecc_find_curve(pka + prefixlen, curve)) != CRYPT_OK) return err; - return CRYPT_OK; -} - -static int s_ssh_find_init_ecc(const char *pka, ltc_pka_key *key) -{ - int err; - const ltc_ecc_curve *cu; - if ((err = s_ssh_find_ecc(pka, &cu)) != CRYPT_OK) return err; - return ecc_set_curve(cu, &key->u.ecc); -} - -static int s_ssh_decode_ecdsa(const unsigned char *in, unsigned long *inlen, ltc_pka_key *pka_key, enum pem_flags type) -{ - int err; - unsigned char groupname[64], buf0[512], buf1[512]; - unsigned long groupnamelen = sizeof(groupname), buf0len = sizeof(buf0), buf1len = sizeof(buf1); - unsigned long remaining, cur_len, keylen; - const unsigned char *p, *key; - - p = in; - cur_len = *inlen; - remaining = *inlen; - - err = ssh_decode_sequence_multi(p, &cur_len, - LTC_SSHDATA_STRING, groupname, &groupnamelen, - LTC_SSHDATA_STRING, buf0, &buf0len, - LTC_SSHDATA_STRING, buf1, &buf1len, - LTC_SSHDATA_EOL, LTC_NULL); - if (err == CRYPT_OK) { - key = buf1; - keylen = buf1len; - } else if (err == CRYPT_BUFFER_OVERFLOW && buf0len != sizeof(buf0) && buf1len == sizeof(buf1)) { - key = buf0; - keylen = buf0len; - } else { - goto cleanup; - } - - remaining -= cur_len; - cur_len = remaining; - - err = ecc_set_key(key, keylen, type == pf_public ? PK_PUBLIC : PK_PRIVATE, &pka_key->u.ecc); - -cleanup: - zeromem(groupname, sizeof(groupname)); - zeromem(buf0, sizeof(buf0)); - zeromem(buf1, sizeof(buf1)); - if (err == CRYPT_OK) { - pka_key->id = LTC_PKA_EC; - *inlen -= remaining; - } - - return err; -} -#endif - -#ifdef LTC_CURVE25519 -static int s_ssh_decode_ed25519(const unsigned char *in, unsigned long *inlen, ltc_pka_key *key, enum pem_flags type) -{ - int err; - unsigned char pubkey[64], privkey[96]; - unsigned long pubkeylen = sizeof(pubkey), privkeylen = sizeof(privkey); - unsigned long remaining, cur_len; - const unsigned char *p; - - p = in; - cur_len = *inlen; - remaining = *inlen; - - if ((err = ssh_decode_sequence_multi(p, &cur_len, - LTC_SSHDATA_STRING, pubkey, &pubkeylen, - LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) { - goto cleanup; - } - - if (type == pf_public) { - if ((err = ed25519_import_raw(pubkey, pubkeylen, PK_PUBLIC, &key->u.ed25519)) != CRYPT_OK) { - goto cleanup; - } - key->id = LTC_PKA_ED25519; - goto cleanup; - } - - p += cur_len; - remaining -= cur_len; - cur_len = remaining; - - if ((err = ssh_decode_sequence_multi(p, &cur_len, - LTC_SSHDATA_STRING, privkey, &privkeylen, - LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) { - goto cleanup; - } - if ((err = ed25519_import_raw(privkey, privkeylen, PK_PRIVATE, &key->u.ed25519)) != CRYPT_OK) { - goto cleanup; - } - - key->id = LTC_PKA_ED25519; - -cleanup: - zeromem(pubkey, sizeof(pubkey)); - zeromem(privkey, sizeof(privkey)); - if (err == CRYPT_OK) { - remaining -= cur_len; - *inlen -= remaining; - } - - return err; -} -#endif - -#ifdef LTC_MRSA -static int s_ssh_decode_dsa(const unsigned char *in, unsigned long *inlen, ltc_pka_key *key, enum pem_flags type) -{ - int err, stat; - unsigned long remaining, cur_len; - const unsigned char *p; - if ((err = dsa_int_init(&key->u.dsa)) != CRYPT_OK) { - return err; - } - - p = in; - cur_len = *inlen; - remaining = *inlen; - - if ((err = ssh_decode_sequence_multi(p, &cur_len, - LTC_SSHDATA_MPINT, key->u.dsa.p, - LTC_SSHDATA_MPINT, key->u.dsa.q, - LTC_SSHDATA_MPINT, key->u.dsa.g, - LTC_SSHDATA_MPINT, key->u.dsa.y, - LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) { - goto cleanup; - } - key->u.dsa.qord = ltc_mp_unsigned_bin_size(key->u.dsa.q); - if ((err = dsa_int_validate_pqg(&key->u.dsa, &stat)) != CRYPT_OK) { - goto cleanup; - } - if (stat == 0) { - err = CRYPT_INVALID_PACKET; - goto cleanup; - } - - if (type == pf_public) { - key->id = LTC_PKA_DSA; - key->u.dsa.type = PK_PUBLIC; - goto cleanup; - } - - p += cur_len; - remaining -= cur_len; - cur_len = remaining; - - if ((err = ssh_decode_sequence_multi(p, &cur_len, - LTC_SSHDATA_MPINT, key->u.dsa.x, - LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) { - goto cleanup; - } - - key->id = LTC_PKA_DSA; - key->u.dsa.type = PK_PRIVATE; - -cleanup: - if (err != CRYPT_OK) { - dsa_free(&key->u.dsa); - } else { - remaining -= cur_len; - *inlen -= remaining; - } - - return err; - -} -#endif - -#ifdef LTC_MRSA -static int s_ssh_decode_rsa(const unsigned char *in, unsigned long *inlen, ltc_pka_key *key, enum pem_flags type) -{ - int err; - void *tmp1, *tmp2; - unsigned long remaining, cur_len; - const unsigned char *p; - - if ((err = rsa_init(&key->u.rsa)) != CRYPT_OK) { - return err; - } - - p = in; - cur_len = *inlen; - remaining = *inlen; - - /* ssh-rsa public and private keys contain `e` and `N` in a different order - * public contains `e`, then `N` - * private contains `N`, then `e` - * change the order later on if we import a public key */ - if ((err = ssh_decode_sequence_multi(p, &cur_len, - LTC_SSHDATA_MPINT, key->u.rsa.N, - LTC_SSHDATA_MPINT, key->u.rsa.e, - LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) { - goto cleanup; - } - - p += cur_len; - remaining -= cur_len; - cur_len = remaining; - - if (type == pf_public) { - /* c.f. comment above */ - void *exch = key->u.rsa.N; - key->u.rsa.N = key->u.rsa.e; - key->u.rsa.e = exch; - key->id = LTC_PKA_RSA; - key->u.rsa.type = PK_PUBLIC; - *inlen -= remaining; - goto cleanup; - } - - if ((err = ltc_mp_init_multi(&tmp1, &tmp2, LTC_NULL)) != CRYPT_OK) { - goto cleanup; - } - - if ((err = ssh_decode_sequence_multi(p, &cur_len, - LTC_SSHDATA_MPINT, key->u.rsa.d, - LTC_SSHDATA_MPINT, key->u.rsa.qP, - LTC_SSHDATA_MPINT, key->u.rsa.p, - LTC_SSHDATA_MPINT, key->u.rsa.q, - LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) { - goto cleanup_tmps; - } - - if ((err = ltc_mp_sub_d(key->u.rsa.p, 1, tmp1)) != CRYPT_OK) { goto cleanup_tmps; } /* tmp1 = q-1 */ - if ((err = ltc_mp_sub_d(key->u.rsa.q, 1, tmp2)) != CRYPT_OK) { goto cleanup_tmps; } /* tmp2 = p-1 */ - if ((err = ltc_mp_mod(key->u.rsa.d, tmp1, key->u.rsa.dP)) != CRYPT_OK) { goto cleanup_tmps; } /* dP = d mod p-1 */ - if ((err = ltc_mp_mod(key->u.rsa.d, tmp2, key->u.rsa.dQ)) != CRYPT_OK) { goto cleanup_tmps; } /* dQ = d mod q-1 */ - - key->id = LTC_PKA_RSA; - key->u.rsa.type = PK_PRIVATE; - -cleanup_tmps: - ltc_mp_deinit_multi(tmp2, tmp1, LTC_NULL); -cleanup: - if (err != CRYPT_OK) { - rsa_free(&key->u.rsa); - } else { - remaining -= cur_len; - *inlen -= remaining; - } - - return err; -} -#endif - -struct ssh_pka { - struct str name; - enum ltc_pka_id id; - int (*find)(const char*, const ltc_ecc_curve **); - int (*init)(const char*, ltc_pka_key*); - int (*decode)(const unsigned char*, unsigned long*, ltc_pka_key*, enum pem_flags); -}; - -static struct ssh_pka ssh_pkas[] = { -#ifdef LTC_CURVE25519 - { SET_CSTR(.name, "ssh-ed25519"), - LTC_PKA_ED25519, - NULL, - NULL, - s_ssh_decode_ed25519 }, -#endif -#ifdef LTC_MRSA - { SET_CSTR(.name, "ssh-rsa"), - LTC_PKA_RSA, - NULL, - NULL, - s_ssh_decode_rsa }, -#endif -#ifdef LTC_MDSA - { SET_CSTR(.name, "ssh-dss"), - LTC_PKA_DSA, - NULL, - NULL, - s_ssh_decode_dsa }, -#endif -#ifdef LTC_MECC - { { NULL, 0 }, - LTC_PKA_EC, - s_ssh_find_ecc, - s_ssh_find_init_ecc, - s_ssh_decode_ecdsa }, -#endif -}; - -static int s_decode_key(const unsigned char *in, unsigned long *inlen, ltc_pka_key *key, char **comment, enum pem_flags type) -{ - int err; - ulong32 check1, check2; - unsigned char pka[64]; - unsigned long pkalen = sizeof(pka); - unsigned long remaining, cur_len; - const unsigned char *p; - unsigned long n; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen != NULL); - LTC_ARGCHK(key != NULL); - - p = in; - cur_len = *inlen; - remaining = *inlen; - - if (type != pf_public) { - if ((err = ssh_decode_sequence_multi(p, &cur_len, - LTC_SSHDATA_UINT32, &check1, - LTC_SSHDATA_UINT32, &check2, - LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) { - return err; - } - if (check1 != check2) { - return CRYPT_INVALID_PACKET; - } - - p += cur_len; - remaining -= cur_len; - cur_len = remaining; - } - if ((err = ssh_decode_sequence_multi(p, &cur_len, - LTC_SSHDATA_STRING, pka, &pkalen, - LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) { - return err; - } - - p += cur_len; - remaining -= cur_len; - cur_len = remaining; - - for (n = 0; n < LTC_ARRAY_SIZE(ssh_pkas); ++n) { - if (ssh_pkas[n].name.p != NULL) { - if (pkalen != ssh_pkas[n].name.len - || XMEMCMP(pka, ssh_pkas[n].name.p, ssh_pkas[n].name.len) != 0) continue; - } else { - if ((ssh_pkas[n].init == NULL) || - (ssh_pkas[n].init((char*)pka, key) != CRYPT_OK)) continue; - } - if ((err = ssh_pkas[n].decode(p, &cur_len, key, type)) != CRYPT_OK) { - return err; - } - break; - } - if (n == LTC_ARRAY_SIZE(ssh_pkas)) { - return CRYPT_PK_INVALID_TYPE; - } - - p += cur_len; - remaining -= cur_len; - cur_len = remaining; - - if (cur_len != 0 && comment) { - unsigned long commentlen = cur_len; - char *c = XMALLOC(commentlen); - if (c == NULL) { - return CRYPT_MEM; - } - if ((err = ssh_decode_sequence_multi(p, &cur_len, - LTC_SSHDATA_STRING, c, &commentlen, - LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) { - return err; - } - if (commentlen == 0) { - XFREE(c); - } else { - *comment = c; - } - } - - p += cur_len; - remaining -= cur_len; - - return remaining ? padding_depad(p, &remaining, LTC_PAD_SSH) : CRYPT_OK; -} - -static LTC_INLINE void skip_spaces(char **r, unsigned long *l) -{ - while(*l && (**r == ' ' || **r == '\t')) { - (*r)++; - (*l)--; - } -} - -static LTC_INLINE void skip_chars(char **r, unsigned long *l) -{ - while(*l && (**r != ' ' && **r != '\t')) { - (*l)--; - if (**r == '\n' || **r == '\r') { - *l = 0; - } else { - (*r)++; - } - } -} - -static LTC_INLINE void skip_to_eol(char **r, unsigned long *l) -{ - while(*l && (**r != '\n' && **r != '\r')) { - (*l)--; - (*r)++; - } -} - -static int s_parse_line(char *line, unsigned long *len, ltc_pka_key *key, char **comment) -{ - int err; - unsigned long n, rlen, olen; - enum authorized_keys_elements { - ake_algo_name = 0, - ake_b64_encoded_key = 1, - ake_comment = 2 - }; - struct str elements[3] = { 0 }; - char *r = line; - unsigned char *buf = NULL; - - rlen = *len; - /* Chop up string into the three authorized_keys_elements */ - for (n = 0; n < LTC_ARRAY_SIZE(elements) && rlen; ++n) { - skip_spaces(&r, &rlen); - elements[n].p = r; - if (n != 2) - skip_chars(&r, &rlen); - else - skip_to_eol(&r, &rlen); - elements[n].len = r - elements[n].p; - *r = '\0'; - r++; - } - - for (n = 0; n < LTC_ARRAY_SIZE(ssh_pkas); ++n) { - if (ssh_pkas[n].name.p != NULL) { - if (elements[ake_algo_name].len != ssh_pkas[n].name.len - || XMEMCMP(elements[ake_algo_name].p, ssh_pkas[n].name.p, ssh_pkas[n].name.len) != 0) continue; - } else { - if ((ssh_pkas[n].find == NULL) || - (ssh_pkas[n].find(elements[ake_algo_name].p, NULL) != CRYPT_OK)) continue; - } - olen = elements[ake_b64_encoded_key].len; - buf = XMALLOC(olen); - if (buf == NULL) { - return CRYPT_MEM; - } - if ((err = base64_strict_decode(elements[ake_b64_encoded_key].p, elements[ake_b64_encoded_key].len, buf, &olen)) == CRYPT_OK) { - err = s_decode_key(buf, &olen, key, comment, pf_public); - if (err == CRYPT_OK && key->id != ssh_pkas[n].id) { - err = CRYPT_PK_INVALID_TYPE; - } - } - XFREE(buf); - - if (err == CRYPT_OK) { - /* Only use the comment that was maybe in the text we just processed, in case when - * there was no comment inside the SSH key. - */ - if (*comment == NULL && elements[ake_comment].p) { - *comment = XMALLOC(elements[ake_comment].len + 1); - if (*comment == NULL) { - return CRYPT_MEM; - } - XMEMCPY(*comment, elements[ake_comment].p, elements[ake_comment].len); - (*comment)[elements[ake_comment].len] = '\0'; - } - *len = r - line; - return CRYPT_OK; - } - } - return CRYPT_PK_INVALID_TYPE; -} - -static int s_read_authorized_keys(const void *buf, unsigned long len, ssh_authorized_key_cb cb, void *ctx) -{ - char *s; - int err = CRYPT_OK; - unsigned long clen = len; - ltc_pka_key *key = NULL; - char *comment = NULL; - void *cpy = NULL; - if (clen == 0) - return CRYPT_OK; - key = XCALLOC(1, sizeof(*key)); - cpy = XMALLOC(len); - if (key == NULL || cpy == NULL) { - if (cpy) - XFREE(cpy); - if (key) - XFREE(key); - return CRYPT_MEM; - } - XMEMCPY(cpy, buf, len); - s = cpy; - err = CRYPT_ERROR; - while (clen && (err = s_parse_line(s, &clen, key, &comment)) == CRYPT_OK) { - if (cb(key, comment, ctx)) { - break; - } - s += clen; - len -= clen; - clen = len; - key = XCALLOC(1, sizeof(*key)); - if (key == NULL) { - err = CRYPT_MEM; - break; - } - if (comment) { - XFREE(comment); - comment = NULL; - } - } - if (comment) - XFREE(comment); - if (cpy) - XFREE(cpy); - if (key) - XFREE(key); - return err; -} - -static int s_decrypt_private_keys(unsigned char *in, unsigned long *inlen, - unsigned char *tag, unsigned long taglen, - struct kdf_options *opts) -{ - int err, cipher; - unsigned long symkey_len, iv_len; - unsigned char symkey[MAXBLOCKSIZE], *iv, iv_[8] = { 0 }; - enum cipher_mode mode = opts->cipher->mode & cm_modes; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen != NULL); - LTC_ARGCHK(opts != NULL); - - if (mode != cm_stream) { - cipher = find_cipher(opts->cipher->algo); - if (cipher == -1) { - return CRYPT_INVALID_CIPHER; - } - - iv = symkey + opts->cipher->keylen; - iv_len = mode == cm_gcm ? 12 : cipher_descriptor[cipher].block_length; - symkey_len = opts->cipher->keylen + iv_len; - } else { - iv = iv_; - iv_len = sizeof(iv_); - symkey_len = 64; - } - - if (sizeof(symkey) < symkey_len) { - return CRYPT_OVERFLOW; - } - - if ((err = bcrypt_pbkdf_openbsd(opts->pw.pw, opts->pw.l, opts->salt, opts->saltlen, - opts->num_rounds, find_hash("sha512"), symkey, &symkey_len)) != CRYPT_OK) { - return err; - } - err = pem_decrypt(in, inlen, - symkey, opts->cipher->keylen, - iv, iv_len, - tag, taglen, - opts->cipher, LTC_PAD_SSH); - zeromem(symkey, sizeof(symkey)); - - return err; -} - -static int s_decode_header(unsigned char *in, unsigned long *inlen, struct kdf_options *opts) -{ - int err; - unsigned char ciphername[64], kdfname[64], kdfoptions[128], pubkey1[2048]; - unsigned long ciphernamelen = sizeof(ciphername), kdfnamelen = sizeof(kdfname); - unsigned long kdfoptionslen = sizeof(kdfoptions), pubkey1len = sizeof(pubkey1); - ulong32 num_keys; - unsigned long i; - - void *magic = strstr((const char*)in, "openssh-key-v1"); - unsigned long slen = XSTRLEN("openssh-key-v1"); - unsigned char *start = &in[slen + 1]; - unsigned long len = *inlen - slen - 1; - - if (magic == NULL || magic != in) { - return CRYPT_INVALID_PACKET; - } - - if ((err = ssh_decode_sequence_multi(start, &len, - LTC_SSHDATA_STRING, ciphername, &ciphernamelen, - LTC_SSHDATA_STRING, kdfname, &kdfnamelen, - LTC_SSHDATA_STRING, kdfoptions, &kdfoptionslen, - LTC_SSHDATA_UINT32, &num_keys, - LTC_SSHDATA_STRING, pubkey1, &pubkey1len, - LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) { - return err; - } - if (num_keys != 1) { - return CRYPT_INVALID_PACKET; - } - - *inlen = len + slen + 1; - - for (i = 0; i < ssh_ciphers_num; ++i) { - if (XSTRCMP((char*)ciphername, ssh_ciphers[i].name) == 0) { - opts->cipher = &ssh_ciphers[i]; - break; - } - } - if (opts->cipher == NULL) { - return CRYPT_INVALID_CIPHER; - } - - if (XSTRCMP((char*)kdfname, "none") == 0) { - /* NOP */ - opts->name = "none"; - } else if (XSTRCMP((char*)kdfname, "bcrypt") == 0) { - opts->name = "bcrypt"; - opts->saltlen = sizeof(opts->salt); - len = kdfoptionslen; - if ((err = ssh_decode_sequence_multi(kdfoptions, &len, - LTC_SSHDATA_STRING, opts->salt, &opts->saltlen, - LTC_SSHDATA_UINT32, &opts->num_rounds, - LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) { - return err; - } - if (len != kdfoptionslen) { - return CRYPT_INPUT_TOO_LONG; - } - } else { - return CRYPT_INVALID_PACKET; - } - - return err; -} - - -static const struct pem_header_id pem_openssh[] = { - { - SET_CSTR(.start, "-----BEGIN OPENSSH PRIVATE KEY-----"), - SET_CSTR(.end, "-----END OPENSSH PRIVATE KEY-----"), - .has_more_headers = no - }, - { - SET_CSTR(.start, "---- BEGIN SSH2 PUBLIC KEY ----"), - SET_CSTR(.end, "---- END SSH2 PUBLIC KEY ----"), - .has_more_headers = maybe, - .flags = pf_public - }, -}; -static const unsigned long pem_openssh_num = LTC_ARRAY_SIZE(pem_openssh); - -static int s_decode_openssh(struct get_char *g, ltc_pka_key *k, const password_ctx *pw_ctx) -{ - unsigned char *pem = NULL, *p, *privkey = NULL, *tag; - unsigned long n, w = 0, l, privkey_len, taglen; - int err; - struct pem_headers hdr; - struct kdf_options opts = { 0 }; - XMEMSET(k, 0, sizeof(*k)); - for (n = 0; n < pem_openssh_num; ++n) { - hdr.id = &pem_openssh[n]; - err = pem_read((void**)&pem, &w, &hdr, g); - if (err == CRYPT_OK) { - break; - } else if (err != CRYPT_UNKNOWN_PEM) { - goto cleanup; - } - hdr.id = NULL; - } - /* id not found */ - if (hdr.id == NULL) { - goto cleanup; - } - p = pem; - l = w; - if (hdr.id->flags != pf_public) { - if ((err = s_decode_header(pem, &w, &opts)) != CRYPT_OK) { - goto cleanup; - } - p = pem + w; - l -= w; - w = l; - - privkey_len = l; - privkey = XMALLOC(privkey_len); - if (privkey == NULL) { - return CRYPT_MEM; - } - - if ((err = ssh_decode_sequence_multi(p, &w, - LTC_SSHDATA_STRING, privkey, &privkey_len, - LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) { - goto cleanup; - } - - if (XSTRCMP(opts.name, "none") != 0) { - if ((pw_ctx == NULL) || (pw_ctx->callback == NULL)) { - err = CRYPT_PW_CTX_MISSING; - goto cleanup; - } - if (pw_ctx->callback(&opts.pw.pw, &opts.pw.l, pw_ctx->userdata)) { - err = CRYPT_ERROR; - goto cleanup; - } - tag = p + w; - taglen = l - w; - w = privkey_len; - if ((err = s_decrypt_private_keys(privkey, &privkey_len, - tag, taglen, - &opts)) != CRYPT_OK) { - goto cleanup; - } - zeromem(opts.pw.pw, opts.pw.l); - } - - p = privkey; - w = privkey_len; - } - if ((err = s_decode_key(p, &w, k, NULL, hdr.id->flags)) != CRYPT_OK) { - goto cleanup; - } - -cleanup: - password_free(&opts.pw, pw_ctx); - if (privkey) { - zeromem(privkey, privkey_len); - XFREE(privkey); - } - if (pem) { - XFREE(pem); - } - return err; -} - -#ifndef LTC_NO_FILE -int pem_decode_openssh_filehandle(FILE *f, ltc_pka_key *k, const password_ctx *pw_ctx) -{ - LTC_ARGCHK(f != NULL); - LTC_ARGCHK(k != NULL); - { - struct get_char g = pem_get_char_init_filehandle(f); - return s_decode_openssh(&g, k, pw_ctx); - } -} - -int ssh_read_authorized_keys_filehandle(FILE *f, ssh_authorized_key_cb cb, void *ctx) -{ - size_t tot_data; - void *buf; - int err; - - LTC_ARGCHK(f != NULL); - LTC_ARGCHK(cb != NULL); - - if (fseek(f, 0, SEEK_END) == -1) - return CRYPT_ERROR; - tot_data = ftell(f); - if (fseek(f, 0, SEEK_SET) == -1) - return CRYPT_ERROR; - buf = XMALLOC(tot_data); - if (buf == NULL) { - return CRYPT_MEM; - } - if (fread(buf, 1, tot_data, f) != tot_data) { - err = CRYPT_ERROR; - } else { - err = s_read_authorized_keys(buf, tot_data, cb, ctx); - } - XFREE(buf); - - return err; -} -#endif /* LTC_NO_FILE */ - -int pem_decode_openssh(const void *buf, unsigned long len, ltc_pka_key *k, const password_ctx *pw_ctx) -{ - LTC_ARGCHK(buf != NULL || len == 0); - LTC_ARGCHK(k != NULL); - if (len == 0) - return CRYPT_OK; - { - struct get_char g = pem_get_char_init(buf, len); - return s_decode_openssh(&g, k, pw_ctx); - } -} - -int ssh_read_authorized_keys(const void *buf, unsigned long len, ssh_authorized_key_cb cb, void *ctx) -{ - LTC_ARGCHK(buf != NULL || len == 0); - LTC_ARGCHK(cb != NULL); - if (len == 0) - return CRYPT_OK; - - return s_read_authorized_keys(buf, len, cb, ctx); -} -#endif /* defined(LTC_PEM_SSH) */ diff --git a/src/misc/pkcs12/pkcs12_kdf.c b/src/misc/pkcs12/pkcs12_kdf.c deleted file mode 100644 index 1739af73..00000000 --- a/src/misc/pkcs12/pkcs12_kdf.c +++ /dev/null @@ -1,82 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_PKCS_12 - -int pkcs12_kdf( int hash_id, - const unsigned char *pw, unsigned long pwlen, - const unsigned char *salt, unsigned long saltlen, - unsigned int iterations, unsigned char purpose, - unsigned char *out, unsigned long outlen) -{ - unsigned long u = hash_descriptor[hash_id].hashsize; - unsigned long v = hash_descriptor[hash_id].blocksize; - unsigned long c = (outlen + u - 1) / u; - unsigned long Slen = ((saltlen + v - 1) / v) * v; - unsigned long Plen = ((pwlen + v - 1) / v) * v; - unsigned long k = (Plen + Slen) / v; - unsigned long Alen, keylen = 0; - unsigned int tmp, i, j, n; - unsigned char ch; - unsigned char D[MAXBLOCKSIZE], A[MAXBLOCKSIZE], B[MAXBLOCKSIZE]; - unsigned char *I, *key; - int err = CRYPT_ERROR; - - LTC_ARGCHK(pw != NULL); - LTC_ARGCHK(salt != NULL); - LTC_ARGCHK(out != NULL); - - key = XMALLOC(u * c); - I = XMALLOC(Plen + Slen); - if (key == NULL || I == NULL) goto DONE; - zeromem(key, u * c); - - for (i = 0; i < v; i++) D[i] = purpose; /* D - diversifier */ - for (i = 0; i < Slen; i++) I[i] = salt[i % saltlen]; - for (i = 0; i < Plen; i++) I[Slen + i] = pw[i % pwlen]; /* I = Salt || Pass */ - - for (i = 0; i < c; i++) { - Alen = sizeof(A); - err = hash_memory_multi(hash_id, A, &Alen, D, v, I, Slen + Plen, LTC_NULL); /* A = HASH(D || I) */ - if (err != CRYPT_OK) goto DONE; - for (j = 1; j < iterations; j++) { - err = hash_memory(hash_id, A, Alen, A, &Alen); /* A = HASH(A) */ - if (err != CRYPT_OK) goto DONE; - } - /* fill buffer B with A */ - for (j = 0; j < v; j++) B[j] = A[j % Alen]; - /* B += 1 */ - for (j = v; j > 0; j--) { - if (++B[j - 1] != 0) break; - } - /* I_n += B */ - for (n = 0; n < k; n++) { - ch = 0; - for (j = v; j > 0; j--) { - tmp = I[n * v + j - 1] + B[j - 1] + ch; - ch = (unsigned char)((tmp >> 8) & 0xFF); - I[n * v + j - 1] = (unsigned char)(tmp & 0xFF); - } - } - /* store derived key block */ - XMEMCPY(&key[keylen], A, Alen); - keylen += Alen; - } - - XMEMCPY(out, key, outlen); - err = CRYPT_OK; -DONE: - if (I) { - zeromem(I, Plen + Slen); - XFREE(I); - } - if (key) { - zeromem(key, u * c); - XFREE(key); - } - return err; -} - -#endif diff --git a/src/misc/pkcs12/pkcs12_utf8_to_utf16.c b/src/misc/pkcs12/pkcs12_utf8_to_utf16.c deleted file mode 100644 index 75edecc3..00000000 --- a/src/misc/pkcs12/pkcs12_utf8_to_utf16.c +++ /dev/null @@ -1,59 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_PKCS_12 - -int pkcs12_utf8_to_utf16(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) { - unsigned long len = 0; - const unsigned char* in_end = in + inlen; - const ulong32 offset[6] = { - 0x00000000UL, 0x00003080UL, 0x000E2080UL, - 0x03C82080UL, 0xFA082080UL, 0x82082080UL - }; - int err = CRYPT_ERROR; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - while (in < in_end) { - ulong32 ch = 0; - unsigned short extra = 0; /* 0 */ - if (*in >= 192) extra++; /* 1 */ - if (*in >= 224) extra++; /* 2 */ - if (*in >= 240) extra++; /* 3 */ - if (*in >= 248) extra++; /* 4 */ - if (*in >= 252) extra++; /* 5 */ - if (in + extra >= in_end) goto ERROR; - switch (extra) { - case 5: ch += *in++; ch <<= 6; - LTC_FALLTHROUGH; /* FALLTHROUGH */ - case 4: ch += *in++; ch <<= 6; - LTC_FALLTHROUGH; /* FALLTHROUGH */ - case 3: ch += *in++; ch <<= 6; - LTC_FALLTHROUGH; /* FALLTHROUGH */ - case 2: ch += *in++; ch <<= 6; - LTC_FALLTHROUGH; /* FALLTHROUGH */ - case 1: ch += *in++; ch <<= 6; - LTC_FALLTHROUGH; /* FALLTHROUGH */ - case 0: ch += *in++; - } - ch -= offset[extra]; - if (ch > 0xFFFF) goto ERROR; - if (*outlen >= len + 2) { - out[len] = (unsigned short)((ch >> 8) & 0xFF); - out[len + 1] = (unsigned char)(ch & 0xFF); - } - len += 2; - } - - err = len > *outlen ? CRYPT_BUFFER_OVERFLOW : CRYPT_OK; - *outlen = len; -ERROR: - return err; -} - -#endif diff --git a/src/misc/pkcs5/pkcs_5_1.c b/src/misc/pkcs5/pkcs_5_1.c deleted file mode 100644 index ea9c19ce..00000000 --- a/src/misc/pkcs5/pkcs_5_1.c +++ /dev/null @@ -1,185 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pkcs_5_1.c - PKCS #5, Algorithm #1, Tom St Denis -*/ -#ifdef LTC_PKCS_5 -/** - Execute PKCS #5 v1 in strict or OpenSSL EVP_BytesToKey()-compat mode. - - PKCS#5 v1 specifies that the output key length can be no larger than - the hash output length. OpenSSL unilaterally extended that by repeating - the hash process on a block-by-block basis for as long as needed to make - bigger keys. If you want to be compatible with KDF for e.g. "openssl enc", - you'll want that. - - If you want strict PKCS behavior, turn openssl_compat off. Or (more - likely), use one of the convenience functions below. - - @param password The password (or key) - @param password_len The length of the password (octet) - @param salt The salt (or nonce) which is 8 octets long - @param iteration_count The PKCS #5 v1 iteration count - @param hash_idx The index of the hash desired - @param out [out] The destination for this algorithm - @param outlen [in/out] The max size and resulting size of the algorithm output - @param openssl_compat [in] Whether or not to grow the key to the buffer size ala OpenSSL - @return CRYPT_OK if successful -*/ -static int s_pkcs_5_alg1_common(const unsigned char *password, - unsigned long password_len, - const unsigned char *salt, - int iteration_count, int hash_idx, - unsigned char *out, unsigned long *outlen, - int openssl_compat) -{ - int err; - unsigned long x; - hash_state *md; - unsigned char *buf; - /* Storage vars in case we need to support > hashsize (OpenSSL compat) */ - unsigned long block = 0, iter; - /* How many bytes to put in the outbut buffer (convenience calc) */ - unsigned long outidx = 0, nb = 0; - - LTC_ARGCHK(password != NULL); - LTC_ARGCHK(salt != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if (iteration_count <= 0) { - return CRYPT_INVALID_ARG; - } - - /* test hash IDX */ - if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { - return err; - } - - /* allocate memory */ - md = XMALLOC(sizeof(hash_state)); - buf = XMALLOC(MAXBLOCKSIZE); - if (md == NULL || buf == NULL) { - if (md != NULL) { - XFREE(md); - } - if (buf != NULL) { - XFREE(buf); - } - return CRYPT_MEM; - } - - while(block * hash_descriptor[hash_idx].hashsize < *outlen) { - - /* hash initial (maybe previous hash) + password + salt */ - if ((err = hash_descriptor[hash_idx].init(md)) != CRYPT_OK) { - goto LBL_ERR; - } - /* in OpenSSL mode, we first hash the previous result for blocks 2-n */ - if (openssl_compat && block) { - if ((err = hash_descriptor[hash_idx].process(md, buf, hash_descriptor[hash_idx].hashsize)) != CRYPT_OK) { - goto LBL_ERR; - } - } - if ((err = hash_descriptor[hash_idx].process(md, password, password_len)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[hash_idx].process(md, salt, 8)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[hash_idx].done(md, buf)) != CRYPT_OK) { - goto LBL_ERR; - } - - iter = iteration_count; - while (--iter) { - /* code goes here. */ - x = MAXBLOCKSIZE; - if ((err = hash_memory(hash_idx, buf, hash_descriptor[hash_idx].hashsize, buf, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - } - - /* limit the size of the copy to however many bytes we have left in - the output buffer (and how many bytes we have to copy) */ - outidx = block*hash_descriptor[hash_idx].hashsize; - nb = hash_descriptor[hash_idx].hashsize; - if(outidx+nb > *outlen) { - nb = *outlen - outidx; - } - if(nb > 0) { - XMEMCPY(out+outidx, buf, nb); - } - - block++; - if (!openssl_compat) { - break; - } - } - /* In strict mode, we always return the hashsize, in compat we filled it - as much as was requested, so we leave it alone. */ - if(!openssl_compat) { - *outlen = hash_descriptor[hash_idx].hashsize; - } - - err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(buf, MAXBLOCKSIZE); - zeromem(md, sizeof(hash_state)); -#endif - - XFREE(buf); - XFREE(md); - - return err; -} - -/** - Execute PKCS #5 v1 - Strict mode (no OpenSSL-compatible extension) - @param password The password (or key) - @param password_len The length of the password (octet) - @param salt The salt (or nonce) which is 8 octets long - @param iteration_count The PKCS #5 v1 iteration count - @param hash_idx The index of the hash desired - @param out [out] The destination for this algorithm - @param outlen [in/out] The max size and resulting size of the algorithm output - @return CRYPT_OK if successful -*/ -int pkcs_5_alg1(const unsigned char *password, unsigned long password_len, - const unsigned char *salt, - int iteration_count, int hash_idx, - unsigned char *out, unsigned long *outlen) -{ - return s_pkcs_5_alg1_common(password, password_len, salt, iteration_count, - hash_idx, out, outlen, 0); -} - -/** - Execute PKCS #5 v1 - OpenSSL-extension-compatible mode - - Use this one if you need to derive keys as "openssl enc" does by default. - OpenSSL (for better or worse), uses MD5 as the hash and iteration_count=1. - @param password The password (or key) - @param password_len The length of the password (octet) - @param salt The salt (or nonce) which is 8 octets long - @param iteration_count The PKCS #5 v1 iteration count - @param hash_idx The index of the hash desired - @param out [out] The destination for this algorithm - @param outlen [in/out] The max size and resulting size of the algorithm output - @return CRYPT_OK if successful -*/ -int pkcs_5_alg1_openssl(const unsigned char *password, - unsigned long password_len, - const unsigned char *salt, - int iteration_count, int hash_idx, - unsigned char *out, unsigned long *outlen) -{ - return s_pkcs_5_alg1_common(password, password_len, salt, iteration_count, - hash_idx, out, outlen, 1); -} - -#endif diff --git a/src/misc/pkcs5/pkcs_5_test.c b/src/misc/pkcs5/pkcs_5_test.c deleted file mode 100644 index fb31c6f6..00000000 --- a/src/misc/pkcs5/pkcs_5_test.c +++ /dev/null @@ -1,224 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file hkdf_test.c - PKCS #5 support, self-test, Steffen Jaeckel -*/ - -#ifdef LTC_PKCS_5 - -/* - TEST CASES SOURCE: - -Internet Engineering Task Force (IETF) S. Josefsson -Request for Comments: 6070 SJD AB -Category: Informational January 2011 -ISSN: 2070-1721 -*/ - -/** - PKCS #5 self-test - @return CRYPT_OK if successful, CRYPT_NOP if tests have been disabled. -*/ -int pkcs_5_test (void) -{ - #ifndef LTC_TEST - return CRYPT_NOP; - #else - - typedef struct { - const char* P; - unsigned long P_len; - const char* S; - unsigned long S_len; - int c; - unsigned long dkLen; - unsigned char DK[40]; - } case_item; - - static const case_item cases_5_2[] = { - { - "password", - 8, - "salt", - 4, - 1, - 20, - { 0x0c, 0x60, 0xc8, 0x0f, 0x96, 0x1f, 0x0e, 0x71, - 0xf3, 0xa9, 0xb5, 0x24, 0xaf, 0x60, 0x12, 0x06, - 0x2f, 0xe0, 0x37, 0xa6 } - }, - { - "password", - 8, - "salt", - 4, - 2, - 20, - { 0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, - 0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0, - 0xd8, 0xde, 0x89, 0x57 } - }, -#ifdef LTC_TEST_EXT - { - "password", - 8, - "salt", - 4, - 4096, - 20, - { 0x4b, 0x00, 0x79, 0x01, 0xb7, 0x65, 0x48, 0x9a, - 0xbe, 0xad, 0x49, 0xd9, 0x26, 0xf7, 0x21, 0xd0, - 0x65, 0xa4, 0x29, 0xc1 } - }, - { - "password", - 8, - "salt", - 4, - 16777216, - 20, - { 0xee, 0xfe, 0x3d, 0x61, 0xcd, 0x4d, 0xa4, 0xe4, - 0xe9, 0x94, 0x5b, 0x3d, 0x6b, 0xa2, 0x15, 0x8c, - 0x26, 0x34, 0xe9, 0x84 } - }, - { - "passwordPASSWORDpassword", - 25, - "saltSALTsaltSALTsaltSALTsaltSALTsalt", - 36, - 4096, - 25, - { 0x3d, 0x2e, 0xec, 0x4f, 0xe4, 0x1c, 0x84, 0x9b, - 0x80, 0xc8, 0xd8, 0x36, 0x62, 0xc0, 0xe4, 0x4a, - 0x8b, 0x29, 0x1a, 0x96, 0x4c, 0xf2, 0xf0, 0x70, - 0x38 } - }, - { - "pass\0word", - 9, - "sa\0lt", - 5, - 4096, - 16, - { 0x56, 0xfa, 0x6a, 0xa7, 0x55, 0x48, 0x09, 0x9d, - 0xcc, 0x37, 0xd7, 0xf0, 0x34, 0x25, 0xe0, 0xc3 } - }, -#endif /* LTC_TEST_EXT */ - }; - - static const case_item cases_5_1[] = { - { - "password", - 8, - "saltsalt", /* must be 8 octects */ - 8, /* ignored by alg1 */ - 1, - 20, - { 0xca, 0xb8, 0x6d, 0xd6, 0x26, 0x17, 0x10, 0x89, 0x1e, 0x8c, - 0xb5, 0x6e, 0xe3, 0x62, 0x56, 0x91, 0xa7, 0x5d, 0xf3, 0x44 } - }, - }; - - static const case_item cases_5_1o[] = { - { - "password", - 8, - "saltsalt", /* must be 8 octects */ - 8, /* ignored by alg1_openssl */ - 1, - 20, - { 0xca, 0xb8, 0x6d, 0xd6, 0x26, 0x17, 0x10, 0x89, 0x1e, 0x8c, - 0xb5, 0x6e, 0xe3, 0x62, 0x56, 0x91, 0xa7, 0x5d, 0xf3, 0x44 } - - }, - { - "password", - 8, - "saltsalt", /* must be 8 octects */ - 8, /* ignored by alg1_openssl */ - 1, - 30, - { 0xca, 0xb8, 0x6d, 0xd6, 0x26, 0x17, 0x10, 0x89, 0x1e, 0x8c, - 0xb5, 0x6e, 0xe3, 0x62, 0x56, 0x91, 0xa7, 0x5d, 0xf3, 0x44, - 0xf0, 0xbf, 0xf4, 0xc1, 0x2c, 0xf3, 0x59, 0x6f, 0xc0, 0x0b } - - } - }; - - unsigned char DK[40]; - unsigned long dkLen; - int i, err; - int tested=0, failed=0; - int hash = find_hash("sha1"); - if (hash == -1) - { -#ifdef LTC_TEST_DBG - printf("PKCS#5 test failed: 'sha1' hash not found\n"); -#endif - return CRYPT_ERROR; - } - - /* testing alg 2 */ - for(i=0; i < (int)(sizeof(cases_5_2) / sizeof(cases_5_2[0])); i++) { - ++tested; - dkLen = cases_5_2[i].dkLen; - if((err = pkcs_5_alg2((unsigned char*)cases_5_2[i].P, cases_5_2[i].P_len, - (unsigned char*)cases_5_2[i].S, cases_5_2[i].S_len, - cases_5_2[i].c, hash, - DK, &dkLen)) != CRYPT_OK) { - LTC_UNUSED_PARAM(err); -#ifdef LTC_TEST_DBG - printf("\npkcs_5_alg2() #%d: Failed/1 (%s)\n", i, error_to_string(err)); -#endif - ++failed; - } - else if (ltc_compare_testvector(DK, dkLen, cases_5_2[i].DK, cases_5_2[i].dkLen, "PKCS#5_2", i)) { - ++failed; - } - } - - /* testing alg 1 */ - for(i=0; i < (int)(sizeof(cases_5_1) / sizeof(case_item)); i++, tested++) { - dkLen = cases_5_1[i].dkLen; - if((err = pkcs_5_alg1((unsigned char*)cases_5_1[i].P, cases_5_1[i].P_len, - (unsigned char*)cases_5_1[i].S, - cases_5_1[i].c, hash, - DK, &dkLen)) != CRYPT_OK) { - LTC_UNUSED_PARAM(err); -#ifdef LTC_TEST_DBG - printf("\npkcs_5_alg1() #%d: Failed/1 (%s)\n", i, error_to_string(err)); -#endif - ++failed; - } - else if (ltc_compare_testvector(DK, dkLen, cases_5_1[i].DK, cases_5_1[i].dkLen, "PKCS#5_1", i)) { - ++failed; - } - } - - /* testing alg 1_openssl */ - for(i = 0; i < (int)(sizeof(cases_5_1o) / sizeof(cases_5_1o[0])); i++, tested++) { - dkLen = cases_5_1o[i].dkLen; - if ((err = pkcs_5_alg1_openssl((unsigned char*)cases_5_1o[i].P, cases_5_1o[i].P_len, - (unsigned char*)cases_5_1o[i].S, - cases_5_1o[i].c, hash, - DK, &dkLen)) != CRYPT_OK) { - LTC_UNUSED_PARAM(err); -#ifdef LTC_TEST_DBG - printf("\npkcs_5_alg1_openssl() #%d: Failed/1 (%s)\n", i, error_to_string(err)); -#endif - ++failed; - } - else if (ltc_compare_testvector(DK, dkLen, cases_5_1o[i].DK, cases_5_1o[i].dkLen, "PKCS#5_1o", i)) { - ++failed; - } - } - - return (failed != 0) ? CRYPT_FAIL_TESTVECTOR : CRYPT_OK; - #endif -} - -#endif - diff --git a/src/misc/scrypt/scrypt.c b/src/misc/scrypt/scrypt.c deleted file mode 100644 index 44ecde29..00000000 --- a/src/misc/scrypt/scrypt.c +++ /dev/null @@ -1,179 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file scrypt.c - scrypt password-based key derivation function (RFC 7914) -*/ -#ifdef LTC_SCRYPT - -/* Salsa20/8 Core (RFC 7914 Section 3) */ -#define SCRYPT_QR(a,b,c,d) \ - x[b] ^= ROL(x[a] + x[d], 7); \ - x[c] ^= ROL(x[b] + x[a], 9); \ - x[d] ^= ROL(x[c] + x[b], 13); \ - x[a] ^= ROL(x[d] + x[c], 18); - -static void s_salsa20_8(unsigned char B[64]) -{ - ulong32 x[16], b32[16]; - int i; - - for (i = 0; i < 16; ++i) { - LOAD32L(b32[i], B + i * 4); - } - XMEMCPY(x, b32, sizeof(x)); - for (i = 8; i > 0; i -= 2) { - SCRYPT_QR( 0, 4, 8,12) - SCRYPT_QR( 5, 9,13, 1) - SCRYPT_QR(10,14, 2, 6) - SCRYPT_QR(15, 3, 7,11) - SCRYPT_QR( 0, 1, 2, 3) - SCRYPT_QR( 5, 6, 7, 4) - SCRYPT_QR(10,11, 8, 9) - SCRYPT_QR(15,12,13,14) - } - for (i = 0; i < 16; ++i) { - STORE32L(x[i] + b32[i], B + i * 4); - } -} - -/* scryptBlockMix (RFC 7914 Section 4) */ -static void s_blockmix(unsigned char *B, unsigned char *Y, unsigned long r) -{ - unsigned char X[64]; - unsigned long i; - unsigned long blen = 128 * r; - - /* 1: X = B[2r - 1] */ - XMEMCPY(X, B + blen - 64, 64); - /* 2: for i = 0 to 2r-1 */ - for (i = 0; i < 2 * r; ++i) { - unsigned long j; - for (j = 0; j < 64; ++j) X[j] ^= B[i * 64 + j]; - s_salsa20_8(X); - XMEMCPY(Y + i * 64, X, 64); - } - /* 3: B' = (Y[0], Y[2], ..., Y[2r-2], Y[1], Y[3], ..., Y[2r-1]) */ - for (i = 0; i < r; ++i) { - XMEMCPY(B + i * 64, Y + (2 * i) * 64, 64); - } - for (i = 0; i < r; ++i) { - XMEMCPY(B + (i + r) * 64, Y + (2 * i + 1) * 64, 64); - } -} - -/* Integerify: interpret last 64-byte block as little-endian and return low 64 bits */ -static LTC_INLINE ulong64 s_integerify(const unsigned char *B, unsigned long r) -{ - const unsigned char *X = B + (2 * r - 1) * 64; - ulong64 v; - - LOAD64L(v, X); - return v; -} - -/* scryptROMix (RFC 7914 Section 5) */ -static void s_romix(unsigned char *B, unsigned long r, ulong64 N, unsigned char *V, unsigned char *XY) -{ - unsigned char *X = XY; - unsigned char *Y = XY + 128 * r; - unsigned long blen = 128 * r; - ulong64 i, j; - - /* 1: X = B */ - XMEMCPY(X, B, blen); - /* 2: for i = 0 to N-1: V[i] = X; X = BlockMix(X) */ - for (i = 0; i < N; ++i) { - XMEMCPY(V + i * blen, X, blen); - s_blockmix(X, Y, r); - } - /* 3: for i = 0 to N-1 */ - for (i = 0; i < N; ++i) { - j = s_integerify(X, r) & (N - 1); - { - unsigned long k; - unsigned char *Vj = V + j * blen; - for (k = 0; k < blen; ++k) X[k] ^= Vj[k]; - } - s_blockmix(X, Y, r); - } - /* 4: B' = X */ - XMEMCPY(B, X, blen); -} - -/** - Derive a key using scrypt (RFC 7914) - - @param password Password - @param password_len Length of password - @param salt Salt - @param salt_len Length of salt - @param N CPU/memory cost parameter (must be > 1 and a power of 2) - @param r Block size parameter (minimum 1) - @param p Parallelisation parameter (minimum 1) - @param out [out] Derived key - @param outlen Desired output length - @return CRYPT_OK on success -*/ -int scrypt_pbkdf(const unsigned char *password, unsigned long password_len, - const unsigned char *salt, unsigned long salt_len, - unsigned long N, unsigned long r, unsigned long p, - unsigned char *out, unsigned long outlen) -{ - unsigned char *B = NULL, *V = NULL, *XY = NULL; - unsigned long Blen, Vlen, XYlen, i; - int err, hash_idx; - - LTC_ARGCHK(out != NULL); - - LTC_ARGCHK(password != NULL || password_len == 0); - LTC_ARGCHK(salt != NULL || salt_len == 0); - LTC_ARGCHK(N >= 2 && (N & (N - 1)) == 0); /* must be > 1 and power of 2 */ - LTC_ARGCHK(r >= 1); - LTC_ARGCHK(p >= 1); - LTC_ARGCHK(outlen >= 1); - LTC_ARGCHK(r <= ULONG_MAX / 128 / p); - LTC_ARGCHK(r <= ULONG_MAX / 256); - LTC_ARGCHK(N <= ULONG_MAX / 128 / r); - - hash_idx = find_hash("sha256"); - if (hash_idx == -1) return CRYPT_INVALID_HASH; - - Blen = 128 * r * p; - Vlen = 128 * r * N; - XYlen = 256 * r; - - B = (unsigned char *)XMALLOC(Blen); - V = (unsigned char *)XMALLOC(Vlen); - XY = (unsigned char *)XMALLOC(XYlen); - if (B == NULL || V == NULL || XY == NULL) { - err = CRYPT_MEM; - goto cleanup; - } - - /* 1: B = PBKDF2-HMAC-SHA256(password, salt, 1, p * 128 * r) */ - { - unsigned long blen_out = Blen; - err = pkcs_5_alg2(password, password_len, salt, salt_len, 1, hash_idx, B, &blen_out); - if (err != CRYPT_OK) goto cleanup; - } - /* 2: for i = 0 to p-1: B[i] = ROMix(r, B[i], N) */ - for (i = 0; i < p; ++i) { - s_romix(B + i * 128 * r, r, (ulong64)N, V, XY); - } - /* 3: DK = PBKDF2-HMAC-SHA256(password, B, 1, dkLen) */ - { - unsigned long outlen_out = outlen; - err = pkcs_5_alg2(password, password_len, B, Blen, 1, hash_idx, out, &outlen_out); - } - -cleanup: - if (XY != NULL) { zeromem(XY, XYlen); XFREE(XY); } - if (V != NULL) { zeromem(V, Vlen); XFREE(V); } - if (B != NULL) { zeromem(B, Blen); XFREE(B); } - return err; -} - -#endif /* LTC_SCRYPT */ diff --git a/src/misc/ssh/ssh_decode_sequence_multi.c b/src/misc/ssh/ssh_decode_sequence_multi.c deleted file mode 100644 index 3c4bb44e..00000000 --- a/src/misc/ssh/ssh_decode_sequence_multi.c +++ /dev/null @@ -1,164 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ssh_decode_sequence_multi.c - SSH data type representation as per RFC4251, Russ Williams -*/ - -#ifdef LTC_SSH - -/** - Decode a SSH sequence using a VA list - @param in The input buffer - @param inlen [in/out] The length of the input buffer and on output the amount of decoded data - @remark <...> is of the form (int, ) except for string&name-list (int, void*, unsigned long*) - @return CRYPT_OK on success -*/ -int ssh_decode_sequence_multi(const unsigned char *in, unsigned long *inlen, ...) -{ - int err; - va_list args; - ssh_data_type type; - void *vdata; - unsigned char *cdata; - char *sdata; - ulong32 *u32data; - ulong64 *u64data; - unsigned long *bufsize; - ulong32 size; - unsigned long remaining; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen != NULL); - - remaining = *inlen; - /* Decode values from buffer */ - va_start(args, inlen); - while ((type = (ssh_data_type)va_arg(args, int)) != LTC_SSHDATA_EOL) { - /* Size of length field */ - if (type == LTC_SSHDATA_STRING || - type == LTC_SSHDATA_NAMELIST || - type == LTC_SSHDATA_MPINT) - { - /* Check we'll not read too far */ - if (remaining < 4) { - err = CRYPT_BUFFER_OVERFLOW; - goto error; - } - } - - /* Calculate (or read) length of data */ - size = 0xFFFFFFFFU; - switch (type) { - case LTC_SSHDATA_BYTE: - case LTC_SSHDATA_BOOLEAN: - size = 1; - break; - case LTC_SSHDATA_UINT32: - size = 4; - break; - case LTC_SSHDATA_UINT64: - size = 8; - break; - case LTC_SSHDATA_STRING: - case LTC_SSHDATA_NAMELIST: - case LTC_SSHDATA_MPINT: - LOAD32H(size, in); - in += 4; - remaining -= 4; - break; - - case LTC_SSHDATA_EOL: - /* Should never get here */ - err = CRYPT_INVALID_ARG; - goto error; - } - - /* Check we'll not read too far */ - if (remaining < size) { - err = CRYPT_BUFFER_OVERFLOW; - goto error; - } else { - remaining -= size; - } - - vdata = va_arg(args, void*); - if (vdata == NULL) { - err = CRYPT_INVALID_ARG; - goto error; - } - - /* Read data */ - switch (type) { - case LTC_SSHDATA_BYTE: - cdata = vdata; - *cdata = *in++; - break; - case LTC_SSHDATA_BOOLEAN: - cdata = vdata; - /* - The value 0 represents FALSE, and the value 1 represents TRUE. All non-zero values MUST be - interpreted as TRUE; however, applications MUST NOT store values other than 0 and 1. - */ - *cdata = (*in++)?1:0; - break; - case LTC_SSHDATA_UINT32: - u32data = vdata; - LOAD32H(*u32data, in); - in += 4; - break; - case LTC_SSHDATA_UINT64: - u64data = vdata; - LOAD64H(*u64data, in); - in += 8; - break; - case LTC_SSHDATA_STRING: - case LTC_SSHDATA_NAMELIST: - sdata = vdata; - bufsize = va_arg(args, unsigned long*); - if (bufsize == NULL) { - err = CRYPT_INVALID_ARG; - goto error; - } - if (size + 1 >= *bufsize) { - err = CRYPT_BUFFER_OVERFLOW; - goto error; - } - if (size > 0) { - XMEMCPY(sdata, (const char *)in, size); - } - sdata[size] = '\0'; - *bufsize = size; - in += size; - break; - case LTC_SSHDATA_MPINT: - if (size == 0) { - if ((err = ltc_mp_set(vdata, 0)) != CRYPT_OK) { goto error; } - } else if ((in[0] & 0x80) != 0) { - /* Negative number - not supported */ - err = CRYPT_INVALID_PACKET; - goto error; - } else { - if ((err = ltc_mp_read_unsigned_bin(vdata, in, size)) != CRYPT_OK) { goto error; } - } - in += size; - break; - - case LTC_SSHDATA_EOL: - /* Should never get here */ - err = CRYPT_INVALID_ARG; - goto error; - } - } - err = CRYPT_OK; - - *inlen -= remaining; - -error: - va_end(args); - return err; -} - -#endif diff --git a/src/misc/ssh/ssh_encode_sequence_multi.c b/src/misc/ssh/ssh_encode_sequence_multi.c deleted file mode 100644 index a2ad7043..00000000 --- a/src/misc/ssh/ssh_encode_sequence_multi.c +++ /dev/null @@ -1,157 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ssh_encode_sequence_multi.c - SSH data type representation as per RFC4251, Russ Williams -*/ - -#ifdef LTC_SSH - -/** - Encode a SSH sequence using a VA list - @param out [out] Destination for data - @param outlen [in/out] Length of buffer and resulting length of output - @remark <...> is of the form (int, ) except for string&name-list (int, void*, unsigned long) - @return CRYPT_OK on success -*/ -int ssh_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...) -{ - int err; - va_list args; - ulong32 size; - ssh_data_type type; - void *vdata; - const char *sdata; - int idata; - ulong32 u32data; - ulong64 u64data; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* Check values and calculate output size */ - size = 0; - va_start(args, outlen); - while ((type = (ssh_data_type)va_arg(args, int)) != LTC_SSHDATA_EOL) { - switch (type) { - case LTC_SSHDATA_BYTE: - case LTC_SSHDATA_BOOLEAN: /* Both stored as 1 byte */ - LTC_UNUSED_PARAM( va_arg(args, int) ); - size++; - break; - case LTC_SSHDATA_UINT32: - LTC_UNUSED_PARAM( va_arg(args, ulong32) ); - size += 4; - break; - case LTC_SSHDATA_UINT64: - LTC_UNUSED_PARAM( va_arg(args, ulong64) ); - size += 8; - break; - case LTC_SSHDATA_STRING: - case LTC_SSHDATA_NAMELIST: - LTC_UNUSED_PARAM( va_arg(args, char*) ); - size += va_arg(args, unsigned long); - size += 4; - break; - case LTC_SSHDATA_MPINT: - vdata = va_arg(args, void*); - /* Calculate size */ - size += 4; - if (ltc_mp_iszero(vdata) != LTC_MP_YES) { - size += ltc_mp_unsigned_bin_size(vdata); - if ((ltc_mp_count_bits(vdata) & 7) == 0) size++; /* Zero padding if high bit set */ - } - break; - - case LTC_SSHDATA_EOL: /* Should never get here */ - err = CRYPT_INVALID_ARG; - goto error; - } - } - va_end(args); - - /* Check we have sufficient space */ - if (*outlen < size) { - *outlen = size; - err = CRYPT_BUFFER_OVERFLOW; - goto errornoargs; - } - *outlen = size; - - /* Encode values into buffer */ - va_start(args, outlen); - while ((type = (ssh_data_type)va_arg(args, int)) != LTC_SSHDATA_EOL) { - switch (type) { - case LTC_SSHDATA_BYTE: - idata = va_arg(args, int); - - *out++ = (unsigned char)(idata & 255); - break; - case LTC_SSHDATA_BOOLEAN: - idata = va_arg(args, int); - - /* - The value 0 represents FALSE, and the value 1 represents TRUE. All non-zero values MUST be - interpreted as TRUE; however, applications MUST NOT store values other than 0 and 1. - */ - *out++ = (idata)?1:0; - break; - case LTC_SSHDATA_UINT32: - u32data = va_arg(args, ulong32); - STORE32H(u32data, out); - out += 4; - break; - case LTC_SSHDATA_UINT64: - u64data = va_arg(args, ulong64); - STORE64H(u64data, out); - out += 8; - break; - case LTC_SSHDATA_STRING: - case LTC_SSHDATA_NAMELIST: - sdata = va_arg(args, char*); - size = va_arg(args, unsigned long); - STORE32H(size, out); - out += 4; - XMEMCPY(out, sdata, size); - out += size; - break; - case LTC_SSHDATA_MPINT: - vdata = va_arg(args, void*); - if (ltc_mp_iszero(vdata) == LTC_MP_YES) { - STORE32H(0, out); - out += 4; - } else { - size = ltc_mp_unsigned_bin_size(vdata); - if ((ltc_mp_count_bits(vdata) & 7) == 0) { - /* Zero padding if high bit set */ - STORE32H(size+1, out); - out += 4; - *out++ = 0; - } else { - STORE32H(size, out); - out += 4; - } - if (ltc_mp_to_unsigned_bin(vdata, out) != CRYPT_OK) { - err = CRYPT_ERROR; - goto error; - } - out += size; - } - break; - - case LTC_SSHDATA_EOL: /* Should never get here */ - err = CRYPT_INVALID_ARG; - goto error; - } - } - err = CRYPT_OK; - -error: - va_end(args); -errornoargs: - return err; -} - -#endif diff --git a/src/misc/zeromem.c b/src/misc/zeromem.c deleted file mode 100644 index 7d149948..00000000 --- a/src/misc/zeromem.c +++ /dev/null @@ -1,22 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file zeromem.c - Zero a block of memory, Tom St Denis -*/ - -/** - Zero a block of memory - @param out The destination of the area to zero - @param outlen The length of the area to zero (octets) -*/ -void zeromem(volatile void *out, size_t outlen) -{ - volatile char *mem = out; - LTC_ARGCHKVD(out != NULL); - while (outlen-- > 0) { - *mem++ = '\0'; - } -} diff --git a/src/modes/cbc/cbc_decrypt.c b/src/modes/cbc/cbc_decrypt.c deleted file mode 100644 index 99c947d5..00000000 --- a/src/modes/cbc/cbc_decrypt.c +++ /dev/null @@ -1,84 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file cbc_decrypt.c - CBC implementation, encrypt block, Tom St Denis -*/ - - -#ifdef LTC_CBC_MODE - -/** - CBC decrypt - @param ct Ciphertext - @param pt [out] Plaintext - @param len The number of bytes to process (must be multiple of block length) - @param cbc CBC state - @return CRYPT_OK if successful -*/ -int cbc_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CBC *cbc) -{ - int x, err; - unsigned char tmp[16]; -#ifdef LTC_FAST - LTC_FAST_TYPE tmpy; -#else - unsigned char tmpy; -#endif - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(cbc != NULL); - - if ((err = cipher_is_valid(cbc->ecb.cipher)) != CRYPT_OK) { - return err; - } - - /* is blocklen valid? */ - if (cbc->ecb.blocklen < 1 || cbc->ecb.blocklen > (int)sizeof(cbc->IV) || cbc->ecb.blocklen > (int)sizeof(tmp)) { - return CRYPT_INVALID_ARG; - } - - if (len % cbc->ecb.blocklen) { - return CRYPT_INVALID_ARG; - } -#ifdef LTC_FAST - if (cbc->ecb.blocklen % sizeof(LTC_FAST_TYPE)) { - return CRYPT_INVALID_ARG; - } -#endif - - if (cipher_descriptor[cbc->ecb.cipher].accel_cbc_decrypt != NULL) { - return cipher_descriptor[cbc->ecb.cipher].accel_cbc_decrypt(ct, pt, len / cbc->ecb.blocklen, cbc->IV, &cbc->ecb.key); - } - while (len) { - /* decrypt */ - if ((err = ecb_decrypt_block(ct, tmp, &cbc->ecb)) != CRYPT_OK) { - return err; - } - - /* xor IV against plaintext */ -#if defined(LTC_FAST) - for (x = 0; x < cbc->ecb.blocklen; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR3(&tmpy, (unsigned char *)cbc->IV + x, (unsigned char *)tmp + x); - LTC_FAST_STOREP((unsigned char *)cbc->IV + x, (unsigned char *)ct + x); - LTC_FAST_STOREP((unsigned char *)pt + x, &tmpy); - } -#else - for (x = 0; x < cbc->ecb.blocklen; x++) { - tmpy = tmp[x] ^ cbc->IV[x]; - cbc->IV[x] = ct[x]; - pt[x] = tmpy; - } -#endif - - ct += cbc->ecb.blocklen; - pt += cbc->ecb.blocklen; - len -= cbc->ecb.blocklen; - } - return CRYPT_OK; -} - -#endif diff --git a/src/modes/cbc/cbc_done.c b/src/modes/cbc/cbc_done.c deleted file mode 100644 index d66e86fb..00000000 --- a/src/modes/cbc/cbc_done.c +++ /dev/null @@ -1,25 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file cbc_done.c - CBC implementation, finish chain, Tom St Denis -*/ - -#ifdef LTC_CBC_MODE - -/** Terminate the chain - @param cbc The CBC chain to terminate - @return CRYPT_OK on success -*/ -int cbc_done(symmetric_CBC *cbc) -{ - LTC_ARGCHK(cbc != NULL); - - return ecb_done(&cbc->ecb); -} - - - -#endif diff --git a/src/modes/cbc/cbc_encrypt.c b/src/modes/cbc/cbc_encrypt.c deleted file mode 100644 index 6e2954a4..00000000 --- a/src/modes/cbc/cbc_encrypt.c +++ /dev/null @@ -1,85 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file cbc_encrypt.c - CBC implementation, encrypt block, Tom St Denis -*/ - - -#ifdef LTC_CBC_MODE - -/** - CBC encrypt - @param pt Plaintext - @param ct [out] Ciphertext - @param len The number of bytes to process (must be multiple of block length) - @param cbc CBC state - @return CRYPT_OK if successful -*/ -int cbc_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CBC *cbc) -{ - int x, err; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(cbc != NULL); - - if ((err = cipher_is_valid(cbc->ecb.cipher)) != CRYPT_OK) { - return err; - } - - /* is blocklen valid? */ - if (cbc->ecb.blocklen < 1 || cbc->ecb.blocklen > (int)sizeof(cbc->IV)) { - return CRYPT_INVALID_ARG; - } - - if (len % cbc->ecb.blocklen) { - return CRYPT_INVALID_ARG; - } -#ifdef LTC_FAST - if (cbc->ecb.blocklen % sizeof(LTC_FAST_TYPE)) { - return CRYPT_INVALID_ARG; - } -#endif - - if (cipher_descriptor[cbc->ecb.cipher].accel_cbc_encrypt != NULL) { - return cipher_descriptor[cbc->ecb.cipher].accel_cbc_encrypt(pt, ct, len / cbc->ecb.blocklen, cbc->IV, &cbc->ecb.key); - } - while (len) { - /* xor IV against plaintext */ -#if defined(LTC_FAST) - for (x = 0; x < cbc->ecb.blocklen; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2((unsigned char *)cbc->IV + x, (unsigned char *)pt + x); - } -#else - for (x = 0; x < cbc->ecb.blocklen; x++) { - cbc->IV[x] ^= pt[x]; - } -#endif - - /* encrypt */ - if ((err = ecb_encrypt_block(cbc->IV, ct, &cbc->ecb)) != CRYPT_OK) { - return err; - } - - /* store IV [ciphertext] for a future block */ -#if defined(LTC_FAST) - for (x = 0; x < cbc->ecb.blocklen; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_STOREP((unsigned char *)cbc->IV + x, (unsigned char *)ct + x); - } -#else - for (x = 0; x < cbc->ecb.blocklen; x++) { - cbc->IV[x] = ct[x]; - } -#endif - - ct += cbc->ecb.blocklen; - pt += cbc->ecb.blocklen; - len -= cbc->ecb.blocklen; - } - return CRYPT_OK; -} - -#endif diff --git a/src/modes/cbc/cbc_getiv.c b/src/modes/cbc/cbc_getiv.c deleted file mode 100644 index 37bf600c..00000000 --- a/src/modes/cbc/cbc_getiv.c +++ /dev/null @@ -1,34 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file cbc_getiv.c - CBC implementation, get IV, Tom St Denis -*/ - -#ifdef LTC_CBC_MODE - -/** - Get the current initialization vector - @param IV [out] The destination of the initialization vector - @param len [in/out] The max size and resulting size of the initialization vector - @param cbc The CBC state - @return CRYPT_OK if successful -*/ -int cbc_getiv(unsigned char *IV, unsigned long *len, const symmetric_CBC *cbc) -{ - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(len != NULL); - LTC_ARGCHK(cbc != NULL); - if ((unsigned long)cbc->ecb.blocklen > *len) { - *len = cbc->ecb.blocklen; - return CRYPT_BUFFER_OVERFLOW; - } - XMEMCPY(IV, cbc->IV, cbc->ecb.blocklen); - *len = cbc->ecb.blocklen; - - return CRYPT_OK; -} - -#endif diff --git a/src/modes/cbc/cbc_setiv.c b/src/modes/cbc/cbc_setiv.c deleted file mode 100644 index 92620b0d..00000000 --- a/src/modes/cbc/cbc_setiv.c +++ /dev/null @@ -1,32 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file cbc_setiv.c - CBC implementation, set IV, Tom St Denis -*/ - - -#ifdef LTC_CBC_MODE - -/** - Set an initialization vector - @param IV The initialization vector - @param len The length of the vector (in octets) - @param cbc The CBC state - @return CRYPT_OK if successful -*/ -int cbc_setiv(const unsigned char *IV, unsigned long len, symmetric_CBC *cbc) -{ - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(cbc != NULL); - if (len != (unsigned long)cbc->ecb.blocklen) { - return CRYPT_INVALID_ARG; - } - XMEMCPY(cbc->IV, IV, len); - return CRYPT_OK; -} - -#endif - diff --git a/src/modes/cbc/cbc_start.c b/src/modes/cbc/cbc_start.c deleted file mode 100644 index 58322e17..00000000 --- a/src/modes/cbc/cbc_start.c +++ /dev/null @@ -1,43 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file cbc_start.c - CBC implementation, start chain, Tom St Denis -*/ - -#ifdef LTC_CBC_MODE - -/** - Initialize a CBC context - @param cipher The index of the cipher desired - @param IV The initialization vector - @param key The secret key - @param keylen The length of the secret key (octets) - @param num_rounds Number of rounds in the cipher desired (0 for default) - @param cbc The CBC state to initialize - @return CRYPT_OK if successful -*/ -int cbc_start(int cipher, const unsigned char *IV, const unsigned char *key, - int keylen, int num_rounds, symmetric_CBC *cbc) -{ - int x, err; - - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(cbc != NULL); - - /* setup cipher */ - if ((err = ecb_start(cipher, key, keylen, num_rounds, &cbc->ecb)) != CRYPT_OK) { - return err; - } - - /* copy IV */ - for (x = 0; x < cbc->ecb.blocklen; x++) { - cbc->IV[x] = IV[x]; - } - return CRYPT_OK; -} - -#endif diff --git a/src/modes/cfb/cfb_decrypt.c b/src/modes/cfb/cfb_decrypt.c deleted file mode 100644 index 69026e3e..00000000 --- a/src/modes/cfb/cfb_decrypt.c +++ /dev/null @@ -1,120 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file cfb_decrypt.c - CFB implementation, decrypt data, Tom St Denis -*/ - -#ifdef LTC_CFB_MODE - -#ifndef LTC_CFB_SHIFT1LEFT -#define LTC_CFB_SHIFT1LEFT -static LTC_INLINE void s_shift1left_64(unsigned char *b, unsigned char v) -{ - ulong64 bval; - LOAD64H(bval, b); - bval <<= 1; - bval |= v & 0x01u; - STORE64H(bval, b); -} - -static LTC_INLINE void s_shift1left_128(unsigned char *b, unsigned char v) -{ - ulong64 bval[2]; - LOAD64H(bval[0], b); - LOAD64H(bval[1], b + 8); - bval[0] <<= 1; - bval[0] |= (bval[1] >> 63) & 0x01u; - bval[1] <<= 1; - bval[1] |= v & 0x01u; - STORE64H(bval[0], b); - STORE64H(bval[1], b + 8); -} -#endif /* LTC_CFB_SHIFT1LEFT */ - -/** - CFB decrypt - @param ct Ciphertext - @param pt [out] Plaintext - @param len Length of ciphertext (octets) - @param cfb CFB state - @return CRYPT_OK if successful -*/ -int cfb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CFB *cfb) -{ - int err; - ulong64 bitlen = len * 8, bits_per_round; - unsigned int cur_bit = 0; - unsigned char pt_ = 0, ct_ = 0; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(cfb != NULL); - - if (bitlen < len) { - return CRYPT_OVERFLOW; - } - - if ((err = cipher_is_valid(cfb->ecb.cipher)) != CRYPT_OK) { - return err; - } - - /* is blocklen/padlen valid? */ - if (cfb->ecb.blocklen < 0 || cfb->ecb.blocklen > (int)sizeof(cfb->IV) || - cfb->padlen < 0 || cfb->padlen > (int)sizeof(cfb->pad)) { - return CRYPT_INVALID_ARG; - } - - bits_per_round = cfb->width == 1 ? 1 : 8; - - while (bitlen > 0) { - if (cfb->padlen == cfb->ecb.blocklen) { - if ((err = ecb_encrypt_block(cfb->pad, cfb->IV, &cfb->ecb)) != CRYPT_OK) { - return err; - } - cfb->padlen = 0; - } - switch (cfb->width) { - case 1: - if (cur_bit++ % 8 == 0) { - ct_ = *ct++; - pt_ = 0; - } else { - ct_ <<= 1; - pt_ <<= 1; - } - if (cfb->ecb.blocklen == 16) - s_shift1left_128(cfb->pad, ct_ >> 7); - else - s_shift1left_64(cfb->pad, ct_ >> 7); - pt_ |= ((ct_ ^ cfb->IV[0]) >> 7) & 0x01u; - cfb->padlen = cfb->ecb.blocklen; - if (cur_bit % 8 == 0) { - *pt++ = pt_; - cur_bit = 0; - } - break; - case 8: - XMEMMOVE(cfb->pad, cfb->pad + 1, cfb->ecb.blocklen - 1); - cfb->pad[cfb->ecb.blocklen - 1] = *ct; - *pt++ = *ct++ ^ cfb->IV[0]; - cfb->padlen = cfb->ecb.blocklen; - break; - case 64: - case 128: - cfb->pad[cfb->padlen] = *ct; - *pt++ = *ct++ ^ cfb->IV[cfb->padlen]; - ++(cfb->padlen); - break; - default: - return CRYPT_INVALID_ARG; - } - bitlen -= bits_per_round; - } - return CRYPT_OK; -} - -#endif - diff --git a/src/modes/cfb/cfb_done.c b/src/modes/cfb/cfb_done.c deleted file mode 100644 index 881a17c7..00000000 --- a/src/modes/cfb/cfb_done.c +++ /dev/null @@ -1,25 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file cfb_done.c - CFB implementation, finish chain, Tom St Denis -*/ - -#ifdef LTC_CFB_MODE - -/** Terminate the chain - @param cfb The CFB chain to terminate - @return CRYPT_OK on success -*/ -int cfb_done(symmetric_CFB *cfb) -{ - LTC_ARGCHK(cfb != NULL); - - return ecb_done(&cfb->ecb); -} - - - -#endif diff --git a/src/modes/cfb/cfb_encrypt.c b/src/modes/cfb/cfb_encrypt.c deleted file mode 100644 index 22e27aa3..00000000 --- a/src/modes/cfb/cfb_encrypt.c +++ /dev/null @@ -1,119 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file cfb_encrypt.c - CFB implementation, encrypt data, Tom St Denis -*/ - -#ifdef LTC_CFB_MODE - -#ifndef LTC_CFB_SHIFT1LEFT -#define LTC_CFB_SHIFT1LEFT -static LTC_INLINE void s_shift1left_64(unsigned char *b, unsigned char v) -{ - ulong64 bval; - LOAD64H(bval, b); - bval <<= 1; - bval |= v & 0x01u; - STORE64H(bval, b); -} - -static LTC_INLINE void s_shift1left_128(unsigned char *b, unsigned char v) -{ - ulong64 bval[2]; - LOAD64H(bval[0], b); - LOAD64H(bval[1], b + 8); - bval[0] <<= 1; - bval[0] |= (bval[1] >> 63) & 0x01u; - bval[1] <<= 1; - bval[1] |= v & 0x01u; - STORE64H(bval[0], b); - STORE64H(bval[1], b + 8); -} -#endif /* LTC_CFB_SHIFT1LEFT */ - -/** - CFB encrypt - @param pt Plaintext - @param ct [out] Ciphertext - @param len Length of plaintext (octets) - @param cfb CFB state - @return CRYPT_OK if successful -*/ -int cfb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CFB *cfb) -{ - int err; - ulong64 bitlen = len * 8, bits_per_round; - unsigned int cur_bit = 0; - unsigned char pt_ = 0, ct_ = 0; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(cfb != NULL); - - if (bitlen < len) { - return CRYPT_OVERFLOW; - } - - if ((err = cipher_is_valid(cfb->ecb.cipher)) != CRYPT_OK) { - return err; - } - - /* is blocklen/padlen valid? */ - if (cfb->ecb.blocklen < 0 || cfb->ecb.blocklen > (int)sizeof(cfb->IV) || - cfb->padlen < 0 || cfb->padlen > (int)sizeof(cfb->pad)) { - return CRYPT_INVALID_ARG; - } - - bits_per_round = cfb->width == 1 ? 1 : 8; - - while (bitlen > 0) { - if (cfb->padlen == cfb->ecb.blocklen) { - if ((err = ecb_encrypt_block(cfb->pad, cfb->IV, &cfb->ecb)) != CRYPT_OK) { - return err; - } - cfb->padlen = 0; - } - switch (cfb->width) { - case 1: - if (cur_bit++ % 8 == 0) { - pt_ = *pt++; - ct_ = 0; - } else { - pt_ <<= 1; - ct_ <<= 1; - } - ct_ |= ((pt_ ^ cfb->IV[0]) >> 7) & 0x01u; - if (cfb->ecb.blocklen == 16) - s_shift1left_128(cfb->pad, ct_); - else - s_shift1left_64(cfb->pad, ct_); - cfb->padlen = cfb->ecb.blocklen; - if (cur_bit % 8 == 0) { - *ct++ = ct_; - cur_bit = 0; - } - break; - case 8: - XMEMMOVE(cfb->pad, cfb->pad + 1, cfb->ecb.blocklen - 1); - cfb->pad[cfb->ecb.blocklen - 1] = (*ct = *pt ^ cfb->IV[0]); - ++pt; - ++ct; - cfb->padlen = cfb->ecb.blocklen; - break; - case 64: - case 128: - cfb->pad[cfb->padlen] = (*ct = *pt ^ cfb->IV[cfb->padlen]); - ++pt; - ++ct; - ++(cfb->padlen); - break; - } - bitlen -= bits_per_round; - } - return CRYPT_OK; -} - -#endif diff --git a/src/modes/cfb/cfb_getiv.c b/src/modes/cfb/cfb_getiv.c deleted file mode 100644 index 75ce264a..00000000 --- a/src/modes/cfb/cfb_getiv.c +++ /dev/null @@ -1,34 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file cfb_getiv.c - CFB implementation, get IV, Tom St Denis -*/ - -#ifdef LTC_CFB_MODE - -/** - Get the current initialization vector - @param IV [out] The destination of the initialization vector - @param len [in/out] The max size and resulting size of the initialization vector - @param cfb The CFB state - @return CRYPT_OK if successful -*/ -int cfb_getiv(unsigned char *IV, unsigned long *len, const symmetric_CFB *cfb) -{ - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(len != NULL); - LTC_ARGCHK(cfb != NULL); - if ((unsigned long)cfb->ecb.blocklen > *len) { - *len = cfb->ecb.blocklen; - return CRYPT_BUFFER_OVERFLOW; - } - XMEMCPY(IV, cfb->pad, cfb->ecb.blocklen); - *len = cfb->ecb.blocklen; - - return CRYPT_OK; -} - -#endif diff --git a/src/modes/cfb/cfb_setiv.c b/src/modes/cfb/cfb_setiv.c deleted file mode 100644 index 1758d64c..00000000 --- a/src/modes/cfb/cfb_setiv.c +++ /dev/null @@ -1,41 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file cfb_setiv.c - CFB implementation, set IV, Tom St Denis -*/ - -#ifdef LTC_CFB_MODE - -/** - Set an initialization vector - @param IV The initialization vector - @param len The length of the vector (in octets) - @param cfb The CFB state - @return CRYPT_OK if successful -*/ -int cfb_setiv(const unsigned char *IV, unsigned long len, symmetric_CFB *cfb) -{ - int err; - - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(cfb != NULL); - - if ((err = cipher_is_valid(cfb->ecb.cipher)) != CRYPT_OK) { - return err; - } - - if (len != (unsigned long)cfb->ecb.blocklen) { - return CRYPT_INVALID_ARG; - } - - /* force next block */ - cfb->padlen = 0; - XMEMCPY(cfb->pad, IV, len); - return ecb_encrypt_block(IV, cfb->IV, &cfb->ecb); -} - -#endif - diff --git a/src/modes/cfb/cfb_start.c b/src/modes/cfb/cfb_start.c deleted file mode 100644 index 8b78b347..00000000 --- a/src/modes/cfb/cfb_start.c +++ /dev/null @@ -1,86 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file cfb_start.c - CFB implementation, start chain, Tom St Denis -*/ - - -#ifdef LTC_CFB_MODE - - -/** - Extended initialization of a CFB context - @param cipher The index of the cipher desired - @param IV The initialization vector - @param key The secret key - @param keylen The length of the secret key (octets) - @param num_rounds Number of rounds in the cipher desired (0 for default) - @param width The width of the mode in bits (0 for default) - @param cfb The CFB state to initialize - @return CRYPT_OK if successful -*/ -int cfb_start_ex(int cipher, const unsigned char *IV, const unsigned char *key, - int keylen, int num_rounds, int width, symmetric_CFB *cfb) -{ - int x, err; - - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(cfb != NULL); - - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - - switch (width) { - case 0: - width = cipher_descriptor[cipher].block_length * 8; - break; - case 1: - case 8: - LTC_ARGCHK(cipher_descriptor[cipher].block_length == 8 - || cipher_descriptor[cipher].block_length == 16); - break; - case 64: - case 128: - LTC_ARGCHK(width == cipher_descriptor[cipher].block_length * 8); - break; - default: - return CRYPT_INVALID_ARG; - } - - cfb->width = width; - /* init the cipher */ - if ((err = ecb_start(cipher, key, keylen, num_rounds, &cfb->ecb)) != CRYPT_OK) { - return err; - } - /* copy data */ - for (x = 0; x < cfb->ecb.blocklen; x++) { - cfb->pad[x] = IV[x]; - } - - /* encrypt the IV */ - cfb->padlen = 0; - return ecb_encrypt_block(cfb->pad, cfb->IV, &cfb->ecb); -} - -/** - Initialize a CFB context - @param cipher The index of the cipher desired - @param IV The initialization vector - @param key The secret key - @param keylen The length of the secret key (octets) - @param num_rounds Number of rounds in the cipher desired (0 for default) - @param cfb The CFB state to initialize - @return CRYPT_OK if successful -*/ -int cfb_start(int cipher, const unsigned char *IV, const unsigned char *key, - int keylen, int num_rounds, symmetric_CFB *cfb) -{ - return cfb_start_ex(cipher, IV, key, keylen, num_rounds, 0, cfb); -} - -#endif diff --git a/src/modes/ctr/ctr_decrypt.c b/src/modes/ctr/ctr_decrypt.c deleted file mode 100644 index ac421fa2..00000000 --- a/src/modes/ctr/ctr_decrypt.c +++ /dev/null @@ -1,30 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ctr_decrypt.c - CTR implementation, decrypt data, Tom St Denis -*/ - -#ifdef LTC_CTR_MODE - -/** - CTR decrypt - @param ct Ciphertext - @param pt [out] Plaintext - @param len Length of ciphertext (octets) - @param ctr CTR state - @return CRYPT_OK if successful -*/ -int ctr_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CTR *ctr) -{ - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL || len == 0); - LTC_ARGCHK(ctr != NULL); - - return ctr_encrypt(ct, pt, len, ctr); -} - -#endif - diff --git a/src/modes/ctr/ctr_done.c b/src/modes/ctr/ctr_done.c deleted file mode 100644 index 670c63b4..00000000 --- a/src/modes/ctr/ctr_done.c +++ /dev/null @@ -1,25 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ctr_done.c - CTR implementation, finish chain, Tom St Denis -*/ - -#ifdef LTC_CTR_MODE - -/** Terminate the chain - @param ctr The CTR chain to terminate - @return CRYPT_OK on success -*/ -int ctr_done(symmetric_CTR *ctr) -{ - LTC_ARGCHK(ctr != NULL); - - return ecb_done(&ctr->ecb); -} - - - -#endif diff --git a/src/modes/ctr/ctr_encrypt.c b/src/modes/ctr/ctr_encrypt.c deleted file mode 100644 index 2ebc5feb..00000000 --- a/src/modes/ctr/ctr_encrypt.c +++ /dev/null @@ -1,128 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ctr_encrypt.c - CTR implementation, encrypt data, Tom St Denis -*/ - - -#ifdef LTC_CTR_MODE - -/** - CTR encrypt software implementation - @param pt Plaintext - @param ct [out] Ciphertext - @param len Length of plaintext (octets) - @param ctr CTR state - @return CRYPT_OK if successful -*/ -static int s_ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CTR *ctr) -{ - int x, err; - - while (len) { - /* is the pad empty? */ - if (ctr->padlen == ctr->ecb.blocklen) { - /* increment counter */ - if (ctr->mode == CTR_COUNTER_LITTLE_ENDIAN) { - /* little-endian */ - for (x = 0; x < ctr->ctrlen; x++) { - ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; - if (ctr->ctr[x] != (unsigned char)0) { - break; - } - } - } else { - /* big-endian */ - for (x = ctr->ecb.blocklen-1; x >= ctr->ctrlen; x--) { - ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; - if (ctr->ctr[x] != (unsigned char)0) { - break; - } - } - } - - /* encrypt it */ - if ((err = ecb_encrypt_block(ctr->ctr, ctr->pad, &ctr->ecb)) != CRYPT_OK) { - return err; - } - ctr->padlen = 0; - } -#ifdef LTC_FAST - if ((ctr->padlen == 0) && (len >= (unsigned long)ctr->ecb.blocklen)) { - for (x = 0; x < ctr->ecb.blocklen; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR3((unsigned char *)ct + x, (unsigned char *)pt + x, (unsigned char *)ctr->pad + x); - } - pt += ctr->ecb.blocklen; - ct += ctr->ecb.blocklen; - len -= ctr->ecb.blocklen; - ctr->padlen = ctr->ecb.blocklen; - continue; - } -#endif - *ct++ = *pt++ ^ ctr->pad[ctr->padlen++]; - --len; - } - return CRYPT_OK; -} - -/** - CTR encrypt - @param pt Plaintext - @param ct [out] Ciphertext - @param len Length of plaintext (octets) - @param ctr CTR state - @return CRYPT_OK if successful -*/ -int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CTR *ctr) -{ - int err, fr; - - LTC_ARGCHK(pt != NULL || len == 0); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(ctr != NULL); - - if ((err = cipher_is_valid(ctr->ecb.cipher)) != CRYPT_OK) { - return err; - } - - /* is blocklen/padlen valid? */ - if ((ctr->ecb.blocklen < 1) || (ctr->ecb.blocklen > (int)sizeof(ctr->ctr)) || - (ctr->padlen < 0) || (ctr->padlen > (int)sizeof(ctr->pad))) { - return CRYPT_INVALID_ARG; - } - -#ifdef LTC_FAST - if (ctr->ecb.blocklen % sizeof(LTC_FAST_TYPE)) { - return CRYPT_INVALID_ARG; - } -#endif - - /* handle acceleration only if pad is empty, accelerator is present and length is >= a block size */ - if ((cipher_descriptor[ctr->ecb.cipher].accel_ctr_encrypt != NULL) && (len >= (unsigned long)ctr->ecb.blocklen)) { - if (ctr->padlen < ctr->ecb.blocklen) { - fr = ctr->ecb.blocklen - ctr->padlen; - if ((err = s_ctr_encrypt(pt, ct, fr, ctr)) != CRYPT_OK) { - return err; - } - pt += fr; - ct += fr; - len -= fr; - } - - if (len >= (unsigned long)ctr->ecb.blocklen) { - if ((err = cipher_descriptor[ctr->ecb.cipher].accel_ctr_encrypt(pt, ct, len/ctr->ecb.blocklen, ctr->ctr, ctr->mode, &ctr->ecb.key)) != CRYPT_OK) { - return err; - } - pt += (len / ctr->ecb.blocklen) * ctr->ecb.blocklen; - ct += (len / ctr->ecb.blocklen) * ctr->ecb.blocklen; - len %= ctr->ecb.blocklen; - } - } - - return s_ctr_encrypt(pt, ct, len, ctr); -} - -#endif diff --git a/src/modes/ctr/ctr_getiv.c b/src/modes/ctr/ctr_getiv.c deleted file mode 100644 index 7704a7f2..00000000 --- a/src/modes/ctr/ctr_getiv.c +++ /dev/null @@ -1,34 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ctr_getiv.c - CTR implementation, get IV, Tom St Denis -*/ - -#ifdef LTC_CTR_MODE - -/** - Get the current initialization vector - @param IV [out] The destination of the initialization vector - @param len [in/out] The max size and resulting size of the initialization vector - @param ctr The CTR state - @return CRYPT_OK if successful -*/ -int ctr_getiv(unsigned char *IV, unsigned long *len, const symmetric_CTR *ctr) -{ - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(len != NULL); - LTC_ARGCHK(ctr != NULL); - if ((unsigned long)ctr->ecb.blocklen > *len) { - *len = ctr->ecb.blocklen; - return CRYPT_BUFFER_OVERFLOW; - } - XMEMCPY(IV, ctr->ctr, ctr->ecb.blocklen); - *len = ctr->ecb.blocklen; - - return CRYPT_OK; -} - -#endif diff --git a/src/modes/ctr/ctr_setiv.c b/src/modes/ctr/ctr_setiv.c deleted file mode 100644 index 75ea1ab3..00000000 --- a/src/modes/ctr/ctr_setiv.c +++ /dev/null @@ -1,44 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ctr_setiv.c - CTR implementation, set IV, Tom St Denis -*/ - -#ifdef LTC_CTR_MODE - -/** - Set an initialization vector - @param IV The initialization vector - @param len The length of the vector (in octets) - @param ctr The CTR state - @return CRYPT_OK if successful -*/ -int ctr_setiv(const unsigned char *IV, unsigned long len, symmetric_CTR *ctr) -{ - int err; - - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(ctr != NULL); - - /* bad param? */ - if ((err = cipher_is_valid(ctr->ecb.cipher)) != CRYPT_OK) { - return err; - } - - if (len != (unsigned long)ctr->ecb.blocklen) { - return CRYPT_INVALID_ARG; - } - - /* set IV */ - XMEMCPY(ctr->ctr, IV, len); - - /* force next block */ - ctr->padlen = 0; - return ecb_encrypt_block(IV, ctr->pad, &ctr->ecb); -} - -#endif - diff --git a/src/modes/ctr/ctr_start.c b/src/modes/ctr/ctr_start.c deleted file mode 100644 index 03b18a46..00000000 --- a/src/modes/ctr/ctr_start.c +++ /dev/null @@ -1,87 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ctr_start.c - CTR implementation, start chain, Tom St Denis -*/ - - -#ifdef LTC_CTR_MODE - -/** - Initialize a CTR context - @param cipher The index of the cipher desired - @param IV The initialization vector - @param key The secret key - @param keylen The length of the secret key (octets) - @param num_rounds Number of rounds in the cipher desired (0 for default) - @param ctr_mode The counter mode (CTR_COUNTER_LITTLE_ENDIAN or CTR_COUNTER_BIG_ENDIAN) - @param ctr The CTR state to initialize - @return CRYPT_OK if successful -*/ -int ctr_start( int cipher, - const unsigned char *IV, - const unsigned char *key, int keylen, - int num_rounds, int ctr_mode, - symmetric_CTR *ctr) -{ - int x, err; - - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ctr != NULL); - - /* bad param? */ - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - - /* ctrlen == counter width */ - ctr->ctrlen = (ctr_mode & 255) ? (ctr_mode & 255) : cipher_descriptor[cipher].block_length; - if (ctr->ctrlen > cipher_descriptor[cipher].block_length) { - return CRYPT_INVALID_ARG; - } - - if ((ctr_mode & 0x1000) == CTR_COUNTER_BIG_ENDIAN) { - ctr->ctrlen = cipher_descriptor[cipher].block_length - ctr->ctrlen; - } - - /* setup cipher */ - if ((err = ecb_start(cipher, key, keylen, num_rounds, &ctr->ecb)) != CRYPT_OK) { - return err; - } - - /* copy ctr */ - ctr->padlen = 0; - ctr->mode = ctr_mode & 0x1000; - for (x = 0; x < ctr->ecb.blocklen; x++) { - ctr->ctr[x] = IV[x]; - } - - if (ctr_mode & LTC_CTR_RFC3686) { - /* increment the IV as per RFC 3686 */ - if (ctr->mode == CTR_COUNTER_LITTLE_ENDIAN) { - /* little-endian */ - for (x = 0; x < ctr->ctrlen; x++) { - ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; - if (ctr->ctr[x] != (unsigned char)0) { - break; - } - } - } else { - /* big-endian */ - for (x = ctr->ecb.blocklen-1; x >= ctr->ctrlen; x--) { - ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; - if (ctr->ctr[x] != (unsigned char)0) { - break; - } - } - } - } - - return ecb_encrypt_block(ctr->ctr, ctr->pad, &ctr->ecb); -} - -#endif diff --git a/src/modes/ctr/ctr_test.c b/src/modes/ctr/ctr_test.c deleted file mode 100644 index 0f7f03f1..00000000 --- a/src/modes/ctr/ctr_test.c +++ /dev/null @@ -1,73 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ctr_test.c - CTR implementation, Tests again RFC 3686, Tom St Denis -*/ - -#ifdef LTC_CTR_MODE - -int ctr_test(void) -{ -#ifdef LTC_NO_TEST - return CRYPT_NOP; -#else - static const struct { - int keylen, msglen; - unsigned char key[32], IV[16], pt[64], ct[64]; - } tests[] = { -/* 128-bit key, 16-byte pt */ -{ - 16, 16, - {0xAE,0x68,0x52,0xF8,0x12,0x10,0x67,0xCC,0x4B,0xF7,0xA5,0x76,0x55,0x77,0xF3,0x9E }, - {0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - {0x53,0x69,0x6E,0x67,0x6C,0x65,0x20,0x62,0x6C,0x6F,0x63,0x6B,0x20,0x6D,0x73,0x67 }, - {0xE4,0x09,0x5D,0x4F,0xB7,0xA7,0xB3,0x79,0x2D,0x61,0x75,0xA3,0x26,0x13,0x11,0xB8 }, -}, - -/* 128-bit key, 36-byte pt */ -{ - 16, 36, - {0x76,0x91,0xBE,0x03,0x5E,0x50,0x20,0xA8,0xAC,0x6E,0x61,0x85,0x29,0xF9,0xA0,0xDC }, - {0x00,0xE0,0x01,0x7B,0x27,0x77,0x7F,0x3F,0x4A,0x17,0x86,0xF0,0x00,0x00,0x00,0x00 }, - {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, - 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, - 0x20,0x21,0x22,0x23}, - {0xC1,0xCF,0x48,0xA8,0x9F,0x2F,0xFD,0xD9,0xCF,0x46,0x52,0xE9,0xEF,0xDB,0x72,0xD7, - 0x45,0x40,0xA4,0x2B,0xDE,0x6D,0x78,0x36,0xD5,0x9A,0x5C,0xEA,0xAE,0xF3,0x10,0x53, - 0x25,0xB2,0x07,0x2F }, -}, -}; - int idx, err, x; - unsigned char buf[64]; - symmetric_CTR ctr; - - /* AES can be under rijndael or aes... try to find it */ - if ((idx = find_cipher("aes")) == -1) { - if ((idx = find_cipher("rijndael")) == -1) { - return CRYPT_NOP; - } - } - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { - if ((err = ctr_start(idx, tests[x].IV, tests[x].key, tests[x].keylen, 0, CTR_COUNTER_BIG_ENDIAN|LTC_CTR_RFC3686, &ctr)) != CRYPT_OK) { - return err; - } - if ((err = ctr_encrypt(tests[x].pt, buf, tests[x].msglen, &ctr)) != CRYPT_OK) { - return err; - } - ctr_done(&ctr); - if (ltc_compare_testvector(buf, tests[x].msglen, tests[x].ct, tests[x].msglen, "CTR", x)) { - return CRYPT_FAIL_TESTVECTOR; - } - } - return CRYPT_OK; -#endif -} - -#endif - - - diff --git a/src/modes/ecb/ecb_decrypt.c b/src/modes/ecb/ecb_decrypt.c deleted file mode 100644 index b8a48b00..00000000 --- a/src/modes/ecb/ecb_decrypt.c +++ /dev/null @@ -1,56 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ecb_decrypt.c - ECB implementation, decrypt a block, Tom St Denis -*/ - -#ifdef LTC_ECB_MODE -int ecb_decrypt_block(const unsigned char *ct, unsigned char *pt, const symmetric_ECB *ecb) -{ - /* check for accel */ - if (cipher_descriptor[ecb->cipher].accel_ecb_decrypt != NULL) { - return cipher_descriptor[ecb->cipher].accel_ecb_decrypt(ct, pt, 1, &ecb->key); - } - return cipher_descriptor[ecb->cipher].ecb_decrypt(ct, pt, &ecb->key); -} - -/** - ECB decrypt - @param ct Ciphertext - @param pt [out] Plaintext - @param len The number of octets to process (must be multiple of the cipher block size) - @param ecb ECB state - @return CRYPT_OK if successful -*/ -int ecb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, const symmetric_ECB *ecb) -{ - int err; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(ecb != NULL); - if ((err = cipher_is_valid(ecb->cipher)) != CRYPT_OK) { - return err; - } - if (len % cipher_descriptor[ecb->cipher].block_length) { - return CRYPT_INVALID_ARG; - } - - /* check for accel */ - if (cipher_descriptor[ecb->cipher].accel_ecb_decrypt != NULL) { - return cipher_descriptor[ecb->cipher].accel_ecb_decrypt(ct, pt, len / cipher_descriptor[ecb->cipher].block_length, &ecb->key); - } - while (len) { - if ((err = cipher_descriptor[ecb->cipher].ecb_decrypt(ct, pt, &ecb->key)) != CRYPT_OK) { - return err; - } - pt += cipher_descriptor[ecb->cipher].block_length; - ct += cipher_descriptor[ecb->cipher].block_length; - len -= cipher_descriptor[ecb->cipher].block_length; - } - return CRYPT_OK; -} - -#endif diff --git a/src/modes/ecb/ecb_done.c b/src/modes/ecb/ecb_done.c deleted file mode 100644 index e1c0c593..00000000 --- a/src/modes/ecb/ecb_done.c +++ /dev/null @@ -1,30 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ecb_done.c - ECB implementation, finish chain, Tom St Denis -*/ - -#ifdef LTC_ECB_MODE - -/** Terminate the chain - @param ecb The ECB chain to terminate - @return CRYPT_OK on success -*/ -int ecb_done(symmetric_ECB *ecb) -{ - int err; - LTC_ARGCHK(ecb != NULL); - - if ((err = cipher_is_valid(ecb->cipher)) != CRYPT_OK) { - return err; - } - cipher_descriptor[ecb->cipher].done(&ecb->key); - return CRYPT_OK; -} - - - -#endif diff --git a/src/modes/ecb/ecb_encrypt.c b/src/modes/ecb/ecb_encrypt.c deleted file mode 100644 index 07e86726..00000000 --- a/src/modes/ecb/ecb_encrypt.c +++ /dev/null @@ -1,56 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ecb_encrypt.c - ECB implementation, encrypt a block, Tom St Denis -*/ - -#ifdef LTC_ECB_MODE -int ecb_encrypt_block(const unsigned char *pt, unsigned char *ct, const symmetric_ECB *ecb) -{ - /* check for accel */ - if (cipher_descriptor[ecb->cipher].accel_ecb_encrypt != NULL) { - return cipher_descriptor[ecb->cipher].accel_ecb_encrypt(pt, ct, 1, &ecb->key); - } - return cipher_descriptor[ecb->cipher].ecb_encrypt(pt, ct, &ecb->key); -} - -/** - ECB encrypt - @param pt Plaintext - @param ct [out] Ciphertext - @param len The number of octets to process (must be multiple of the cipher block size) - @param ecb ECB state - @return CRYPT_OK if successful -*/ -int ecb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, const symmetric_ECB *ecb) -{ - int err; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(ecb != NULL); - if ((err = cipher_is_valid(ecb->cipher)) != CRYPT_OK) { - return err; - } - if (len % cipher_descriptor[ecb->cipher].block_length) { - return CRYPT_INVALID_ARG; - } - - /* check for accel */ - if (cipher_descriptor[ecb->cipher].accel_ecb_encrypt != NULL) { - return cipher_descriptor[ecb->cipher].accel_ecb_encrypt(pt, ct, len / cipher_descriptor[ecb->cipher].block_length, &ecb->key); - } - while (len) { - if ((err = cipher_descriptor[ecb->cipher].ecb_encrypt(pt, ct, &ecb->key)) != CRYPT_OK) { - return err; - } - pt += cipher_descriptor[ecb->cipher].block_length; - ct += cipher_descriptor[ecb->cipher].block_length; - len -= cipher_descriptor[ecb->cipher].block_length; - } - return CRYPT_OK; -} - -#endif diff --git a/src/modes/ecb/ecb_start.c b/src/modes/ecb/ecb_start.c deleted file mode 100644 index d5bc28ef..00000000 --- a/src/modes/ecb/ecb_start.c +++ /dev/null @@ -1,36 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ecb_start.c - ECB implementation, start chain, Tom St Denis -*/ - - -#ifdef LTC_ECB_MODE - -/** - Initialize a ECB context - @param cipher The index of the cipher desired - @param key The secret key - @param keylen The length of the secret key (octets) - @param num_rounds Number of rounds in the cipher desired (0 for default) - @param ecb The ECB state to initialize - @return CRYPT_OK if successful -*/ -int ecb_start(int cipher, const unsigned char *key, int keylen, int num_rounds, symmetric_ECB *ecb) -{ - int err; - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ecb != NULL); - - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - ecb->cipher = cipher; - ecb->blocklen = cipher_descriptor[cipher].block_length; - return cipher_descriptor[cipher].setup(key, keylen, num_rounds, &ecb->key); -} - -#endif diff --git a/src/modes/f8/f8_decrypt.c b/src/modes/f8/f8_decrypt.c deleted file mode 100644 index f9e3a54d..00000000 --- a/src/modes/f8/f8_decrypt.c +++ /dev/null @@ -1,31 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file f8_decrypt.c - F8 implementation, decrypt data, Tom St Denis -*/ - -#ifdef LTC_F8_MODE - -/** - F8 decrypt - @param ct Ciphertext - @param pt [out] Plaintext - @param len Length of ciphertext (octets) - @param f8 F8 state - @return CRYPT_OK if successful -*/ -int f8_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_F8 *f8) -{ - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(f8 != NULL); - return f8_encrypt(ct, pt, len, f8); -} - - -#endif - - diff --git a/src/modes/f8/f8_done.c b/src/modes/f8/f8_done.c deleted file mode 100644 index 78ee9fe4..00000000 --- a/src/modes/f8/f8_done.c +++ /dev/null @@ -1,25 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file f8_done.c - F8 implementation, finish chain, Tom St Denis -*/ - -#ifdef LTC_F8_MODE - -/** Terminate the chain - @param f8 The F8 chain to terminate - @return CRYPT_OK on success -*/ -int f8_done(symmetric_F8 *f8) -{ - LTC_ARGCHK(f8 != NULL); - - return ecb_done(&f8->ecb); -} - - - -#endif diff --git a/src/modes/f8/f8_encrypt.c b/src/modes/f8/f8_encrypt.c deleted file mode 100644 index dada37d8..00000000 --- a/src/modes/f8/f8_encrypt.c +++ /dev/null @@ -1,93 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file f8_encrypt.c - F8 implementation, encrypt data, Tom St Denis -*/ - -#ifdef LTC_F8_MODE - -/** - F8 encrypt - @param pt Plaintext - @param ct [out] Ciphertext - @param len Length of plaintext (octets) - @param f8 F8 state - @return CRYPT_OK if successful -*/ -int f8_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_F8 *f8) -{ - int err, x; - unsigned char buf[MAXBLOCKSIZE]; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(f8 != NULL); - if ((err = cipher_is_valid(f8->ecb.cipher)) != CRYPT_OK) { - return err; - } - - /* is blocklen/padlen valid? */ - if (f8->ecb.blocklen < 0 || f8->ecb.blocklen > (int)sizeof(f8->IV) || - f8->padlen < 0 || f8->padlen > (int)sizeof(f8->IV)) { - return CRYPT_INVALID_ARG; - } - - zeromem(buf, sizeof(buf)); - - /* make sure the pad is empty */ - if (f8->padlen == f8->ecb.blocklen) { - /* xor of IV, MIV and blockcnt == what goes into cipher */ - STORE32H(f8->blockcnt, (buf+(f8->ecb.blocklen-4))); - ++(f8->blockcnt); - for (x = 0; x < f8->ecb.blocklen; x++) { - f8->IV[x] ^= f8->MIV[x] ^ buf[x]; - } - if ((err = ecb_encrypt_block(f8->IV, f8->IV, &f8->ecb)) != CRYPT_OK) { - return err; - } - f8->padlen = 0; - } - -#ifdef LTC_FAST - if (f8->padlen == 0) { - while (len >= (unsigned long)f8->ecb.blocklen) { - STORE32H(f8->blockcnt, (buf+(f8->ecb.blocklen-4))); - ++(f8->blockcnt); - for (x = 0; x < f8->ecb.blocklen; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_TYPE tmp; - LTC_FAST_XOR3(&ct[x], &pt[x], &f8->IV[x]); - LTC_FAST_XOR3(&tmp, &f8->MIV[x], &buf[x]); - LTC_FAST_XOR2(&f8->IV[x], &tmp); - } - if ((err = ecb_encrypt_block(f8->IV, f8->IV, &f8->ecb)) != CRYPT_OK) { - return err; - } - len -= x; - pt += x; - ct += x; - } - } -#endif - - while (len > 0) { - if (f8->padlen == f8->ecb.blocklen) { - /* xor of IV, MIV and blockcnt == what goes into cipher */ - STORE32H(f8->blockcnt, (buf+(f8->ecb.blocklen-4))); - ++(f8->blockcnt); - for (x = 0; x < f8->ecb.blocklen; x++) { - f8->IV[x] ^= f8->MIV[x] ^ buf[x]; - } - if ((err = ecb_encrypt_block(f8->IV, f8->IV, &f8->ecb)) != CRYPT_OK) { - return err; - } - f8->padlen = 0; - } - *ct++ = *pt++ ^ f8->IV[f8->padlen++]; - --len; - } - return CRYPT_OK; -} - -#endif diff --git a/src/modes/f8/f8_getiv.c b/src/modes/f8/f8_getiv.c deleted file mode 100644 index a38ffde8..00000000 --- a/src/modes/f8/f8_getiv.c +++ /dev/null @@ -1,34 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ofb_getiv.c - F8 implementation, get IV, Tom St Denis -*/ - -#ifdef LTC_F8_MODE - -/** - Get the current initialization vector - @param IV [out] The destination of the initialization vector - @param len [in/out] The max size and resulting size of the initialization vector - @param f8 The F8 state - @return CRYPT_OK if successful -*/ -int f8_getiv(unsigned char *IV, unsigned long *len, const symmetric_F8 *f8) -{ - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(len != NULL); - LTC_ARGCHK(f8 != NULL); - if ((unsigned long)f8->ecb.blocklen > *len) { - *len = f8->ecb.blocklen; - return CRYPT_BUFFER_OVERFLOW; - } - XMEMCPY(IV, f8->IV, f8->ecb.blocklen); - *len = f8->ecb.blocklen; - - return CRYPT_OK; -} - -#endif diff --git a/src/modes/f8/f8_setiv.c b/src/modes/f8/f8_setiv.c deleted file mode 100644 index fd5411e4..00000000 --- a/src/modes/f8/f8_setiv.c +++ /dev/null @@ -1,40 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file f8_setiv.c - F8 implementation, set IV, Tom St Denis -*/ - -#ifdef LTC_F8_MODE - -/** - Set an initialization vector - @param IV The initialization vector - @param len The length of the vector (in octets) - @param f8 The F8 state - @return CRYPT_OK if successful -*/ -int f8_setiv(const unsigned char *IV, unsigned long len, symmetric_F8 *f8) -{ - int err; - - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(f8 != NULL); - - if ((err = cipher_is_valid(f8->ecb.cipher)) != CRYPT_OK) { - return err; - } - - if (len != (unsigned long)f8->ecb.blocklen) { - return CRYPT_INVALID_ARG; - } - - /* force next block */ - f8->padlen = 0; - return ecb_encrypt_block(IV, f8->IV, &f8->ecb); -} - -#endif - diff --git a/src/modes/f8/f8_start.c b/src/modes/f8/f8_start.c deleted file mode 100644 index cb608036..00000000 --- a/src/modes/f8/f8_start.c +++ /dev/null @@ -1,84 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file f8_start.c - F8 implementation, start chain, Tom St Denis -*/ - - -#ifdef LTC_F8_MODE - -/** - Initialize an F8 context - @param cipher The index of the cipher desired - @param IV The initialization vector - @param key The secret key - @param keylen The length of the secret key (octets) - @param salt_key The salting key for the IV - @param skeylen The length of the salting key (octets) - @param num_rounds Number of rounds in the cipher desired (0 for default) - @param f8 The F8 state to initialize - @return CRYPT_OK if successful -*/ -int f8_start( int cipher, const unsigned char *IV, - const unsigned char *key, int keylen, - const unsigned char *salt_key, int skeylen, - int num_rounds, symmetric_F8 *f8) -{ - int x, err; - unsigned char tkey[MAXBLOCKSIZE]; - - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(salt_key != NULL); - LTC_ARGCHK(f8 != NULL); - - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - -#ifdef LTC_FAST - if (cipher_descriptor[cipher].block_length % sizeof(LTC_FAST_TYPE)) { - return CRYPT_INVALID_ARG; - } -#endif - - /* copy details */ - f8->blockcnt = 0; - f8->padlen = cipher_descriptor[cipher].block_length; - - /* now get key ^ salt_key [extend salt_ket with 0x55 as required to match length] */ - zeromem(tkey, sizeof(tkey)); - for (x = 0; x < keylen && x < (int)sizeof(tkey); x++) { - tkey[x] = key[x]; - } - for (x = 0; x < skeylen && x < (int)sizeof(tkey); x++) { - tkey[x] ^= salt_key[x]; - } - for (; x < keylen && x < (int)sizeof(tkey); x++) { - tkey[x] ^= 0x55; - } - - /* now encrypt with tkey[0..keylen-1] the IV and use that as the IV */ - if ((err = ecb_start(cipher, tkey, keylen, num_rounds, &f8->ecb)) != CRYPT_OK) { - return err; - } - - /* encrypt IV */ - if ((err = ecb_encrypt_block(IV, f8->MIV, &f8->ecb)) != CRYPT_OK) { - ecb_done(&f8->ecb); - return err; - } - zeromem(tkey, sizeof(tkey)); - zeromem(f8->IV, sizeof(f8->IV)); - - /* terminate this cipher */ - ecb_done(&f8->ecb); - - /* init the cipher */ - return ecb_start(cipher, key, keylen, num_rounds, &f8->ecb); -} - -#endif diff --git a/src/modes/f8/f8_test_mode.c b/src/modes/f8/f8_test_mode.c deleted file mode 100644 index cb6e2913..00000000 --- a/src/modes/f8/f8_test_mode.c +++ /dev/null @@ -1,64 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file f8_test_mode.c - F8 implementation, test, Tom St Denis -*/ - - -#ifdef LTC_F8_MODE - -int f8_test_mode(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const unsigned char key[16] = { 0x23, 0x48, 0x29, 0x00, 0x84, 0x67, 0xbe, 0x18, - 0x6c, 0x3d, 0xe1, 0x4a, 0xae, 0x72, 0xd6, 0x2c }; - static const unsigned char salt[4] = { 0x32, 0xf2, 0x87, 0x0d }; - static const unsigned char IV[16] = { 0x00, 0x6e, 0x5c, 0xba, 0x50, 0x68, 0x1d, 0xe5, - 0x5c, 0x62, 0x15, 0x99, 0xd4, 0x62, 0x56, 0x4a }; - static const unsigned char pt[39] = { 0x70, 0x73, 0x65, 0x75, 0x64, 0x6f, 0x72, 0x61, - 0x6e, 0x64, 0x6f, 0x6d, 0x6e, 0x65, 0x73, 0x73, - 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6e, 0x65, 0x78, 0x74, 0x20, 0x62, 0x65, 0x73, - 0x74, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67 }; - static const unsigned char ct[39] = { 0x01, 0x9c, 0xe7, 0xa2, 0x6e, 0x78, 0x54, 0x01, - 0x4a, 0x63, 0x66, 0xaa, 0x95, 0xd4, 0xee, 0xfd, - 0x1a, 0xd4, 0x17, 0x2a, 0x14, 0xf9, 0xfa, 0xf4, - 0x55, 0xb7, 0xf1, 0xd4, 0xb6, 0x2b, 0xd0, 0x8f, - 0x56, 0x2c, 0x0e, 0xef, 0x7c, 0x48, 0x02 }; - unsigned char buf[39]; - symmetric_F8 f8; - int err, idx; - - idx = find_cipher("aes"); - if (idx == -1) { - idx = find_cipher("rijndael"); - if (idx == -1) return CRYPT_NOP; - } - - /* initialize the context */ - if ((err = f8_start(idx, IV, key, sizeof(key), salt, sizeof(salt), 0, &f8)) != CRYPT_OK) { - return err; - } - - /* encrypt block */ - if ((err = f8_encrypt(pt, buf, sizeof(pt), &f8)) != CRYPT_OK) { - f8_done(&f8); - return err; - } - f8_done(&f8); - - /* compare */ - if (ltc_compare_testvector(buf, sizeof(ct), ct, sizeof(ct), "f8", 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/modes/lrw/lrw_decrypt.c b/src/modes/lrw/lrw_decrypt.c deleted file mode 100644 index b4f4059e..00000000 --- a/src/modes/lrw/lrw_decrypt.c +++ /dev/null @@ -1,39 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file lrw_decrypt.c - LRW_MODE implementation, Decrypt blocks, Tom St Denis -*/ - -#ifdef LTC_LRW_MODE - -/** - LRW decrypt blocks - @param ct The ciphertext - @param pt [out] The plaintext - @param len The length in octets, must be a multiple of 16 - @param lrw The LRW state -*/ -int lrw_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_LRW *lrw) -{ - int err; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(lrw != NULL); - - if ((err = cipher_is_valid(lrw->ecb.cipher)) != CRYPT_OK) { - return err; - } - - if (cipher_descriptor[lrw->ecb.cipher].accel_lrw_decrypt != NULL) { - return cipher_descriptor[lrw->ecb.cipher].accel_lrw_decrypt(ct, pt, len, lrw->IV, lrw->tweak, &lrw->ecb.key); - } - - return lrw_process(ct, pt, len, LRW_DECRYPT, lrw); -} - - -#endif diff --git a/src/modes/lrw/lrw_done.c b/src/modes/lrw/lrw_done.c deleted file mode 100644 index 83ad5f34..00000000 --- a/src/modes/lrw/lrw_done.c +++ /dev/null @@ -1,24 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file lrw_done.c - LRW_MODE implementation, Free resources, Tom St Denis -*/ - -#ifdef LTC_LRW_MODE - -/** - Terminate a LRW state - @param lrw The state to terminate - @return CRYPT_OK if successful -*/ -int lrw_done(symmetric_LRW *lrw) -{ - LTC_ARGCHK(lrw != NULL); - - return ecb_done(&lrw->ecb); -} - -#endif diff --git a/src/modes/lrw/lrw_encrypt.c b/src/modes/lrw/lrw_encrypt.c deleted file mode 100644 index 7c8e1ba5..00000000 --- a/src/modes/lrw/lrw_encrypt.c +++ /dev/null @@ -1,39 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file lrw_encrypt.c - LRW_MODE implementation, Encrypt blocks, Tom St Denis -*/ - -#ifdef LTC_LRW_MODE - -/** - LRW encrypt blocks - @param pt The plaintext - @param ct [out] The ciphertext - @param len The length in octets, must be a multiple of 16 - @param lrw The LRW state -*/ -int lrw_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_LRW *lrw) -{ - int err; - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(lrw != NULL); - - if ((err = cipher_is_valid(lrw->ecb.cipher)) != CRYPT_OK) { - return err; - } - - if (cipher_descriptor[lrw->ecb.cipher].accel_lrw_encrypt != NULL) { - return cipher_descriptor[lrw->ecb.cipher].accel_lrw_encrypt(pt, ct, len, lrw->IV, lrw->tweak, &lrw->ecb.key); - } - - return lrw_process(pt, ct, len, LRW_ENCRYPT, lrw); -} - - -#endif diff --git a/src/modes/lrw/lrw_getiv.c b/src/modes/lrw/lrw_getiv.c deleted file mode 100644 index 9da1aabc..00000000 --- a/src/modes/lrw/lrw_getiv.c +++ /dev/null @@ -1,34 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file lrw_getiv.c - LRW_MODE implementation, Retrieve the current IV, Tom St Denis -*/ - -#ifdef LTC_LRW_MODE - -/** - Get the IV for LRW - @param IV [out] The IV, must be 16 octets - @param len Length ... must be at least 16 :-) - @param lrw The LRW state to read - @return CRYPT_OK if successful -*/ -int lrw_getiv(unsigned char *IV, unsigned long *len, const symmetric_LRW *lrw) -{ - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(len != NULL); - LTC_ARGCHK(lrw != NULL); - if (*len < 16) { - *len = 16; - return CRYPT_BUFFER_OVERFLOW; - } - - XMEMCPY(IV, lrw->IV, 16); - *len = 16; - return CRYPT_OK; -} - -#endif diff --git a/src/modes/lrw/lrw_process.c b/src/modes/lrw/lrw_process.c deleted file mode 100644 index 1132e6a9..00000000 --- a/src/modes/lrw/lrw_process.c +++ /dev/null @@ -1,111 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file lrw_process.c - LRW_MODE implementation, Encrypt/decrypt blocks, Tom St Denis -*/ - -#ifdef LTC_LRW_MODE - -/** - Process blocks with LRW, since decrypt/encrypt are largely the same they share this code. - @param pt The "input" data - @param ct [out] The "output" data - @param len The length of the input, must be a multiple of 128-bits (16 octets) - @param mode LRW_ENCRYPT or LRW_DECRYPT - @param lrw The LRW state - @return CRYPT_OK if successful -*/ -int lrw_process(const unsigned char *pt, unsigned char *ct, unsigned long len, int mode, symmetric_LRW *lrw) -{ - unsigned char prod[16]; - int x, err; -#ifdef LTC_LRW_TABLES - int y; -#endif - - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(lrw != NULL); - - if (len & 15) { - return CRYPT_INVALID_ARG; - } - - while (len) { - /* copy pad */ - XMEMCPY(prod, lrw->pad, 16); - - /* increment IV */ - for (x = 15; x >= 0; x--) { - lrw->IV[x] = (lrw->IV[x] + 1) & 255; - if (lrw->IV[x]) { - break; - } - } - - /* update pad */ -#ifdef LTC_LRW_TABLES - /* for each byte changed we undo it's affect on the pad then add the new product */ - for (; x < 16; x++) { -#ifdef LTC_FAST - for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_TYPE tmp; - LTC_FAST_XOR3(&tmp, &lrw->PC[x][lrw->IV[x]][y], &lrw->PC[x][(lrw->IV[x]-1)&255][y]); - LTC_FAST_XOR2(lrw->pad + y, &tmp); - } -#else - for (y = 0; y < 16; y++) { - lrw->pad[y] ^= lrw->PC[x][lrw->IV[x]][y] ^ lrw->PC[x][(lrw->IV[x]-1)&255][y]; - } -#endif - } -#else - gcm_gf_mult(lrw->tweak, lrw->IV, lrw->pad); -#endif - - /* xor prod */ -#ifdef LTC_FAST - for (x = 0; x < 16; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR3(ct + x, pt + x, prod + x); - } -#else - for (x = 0; x < 16; x++) { - ct[x] = pt[x] ^ prod[x]; - } -#endif - - /* send through cipher */ - if (mode == LRW_ENCRYPT) { - if ((err = ecb_encrypt_block(ct, ct, &lrw->ecb)) != CRYPT_OK) { - return err; - } - } else { - if ((err = ecb_decrypt_block(ct, ct, &lrw->ecb)) != CRYPT_OK) { - return err; - } - } - - /* xor prod */ -#ifdef LTC_FAST - for (x = 0; x < 16; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR3(ct + x, ct + x, prod + x); - } -#else - for (x = 0; x < 16; x++) { - ct[x] = ct[x] ^ prod[x]; - } -#endif - - /* move to next */ - pt += 16; - ct += 16; - len -= 16; - } - - return CRYPT_OK; -} - -#endif diff --git a/src/modes/lrw/lrw_setiv.c b/src/modes/lrw/lrw_setiv.c deleted file mode 100644 index fb2db8f7..00000000 --- a/src/modes/lrw/lrw_setiv.c +++ /dev/null @@ -1,68 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file lrw_setiv.c - LRW_MODE implementation, Set the current IV, Tom St Denis -*/ - -#ifdef LTC_LRW_MODE - -/** - Set the IV for LRW - @param IV The IV, must be 16 octets - @param len Length ... must be 16 :-) - @param lrw The LRW state to update - @return CRYPT_OK if successful -*/ -int lrw_setiv(const unsigned char *IV, unsigned long len, symmetric_LRW *lrw) -{ - int err; -#ifdef LTC_LRW_TABLES - unsigned char T[16]; - int x, y; -#endif - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(lrw != NULL); - - if (len != 16) { - return CRYPT_INVALID_ARG; - } - - if ((err = cipher_is_valid(lrw->ecb.cipher)) != CRYPT_OK) { - return err; - } - - /* copy the IV */ - XMEMCPY(lrw->IV, IV, 16); - - /* check if we have to actually do work */ - if (cipher_descriptor[lrw->ecb.cipher].accel_lrw_encrypt != NULL && cipher_descriptor[lrw->ecb.cipher].accel_lrw_decrypt != NULL) { - /* we have accelerators, let's bail since they don't use lrw->pad anyways */ - return CRYPT_OK; - } - -#ifdef LTC_LRW_TABLES - XMEMCPY(T, &lrw->PC[0][IV[0]][0], 16); - for (x = 1; x < 16; x++) { -#ifdef LTC_FAST - for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2(T + y, &lrw->PC[x][IV[x]][y]); - } -#else - for (y = 0; y < 16; y++) { - T[y] ^= lrw->PC[x][IV[x]][y]; - } -#endif - } - XMEMCPY(lrw->pad, T, 16); -#else - gcm_gf_mult(lrw->tweak, IV, lrw->pad); -#endif - - return CRYPT_OK; -} - - -#endif diff --git a/src/modes/lrw/lrw_start.c b/src/modes/lrw/lrw_start.c deleted file mode 100644 index fb0b95ef..00000000 --- a/src/modes/lrw/lrw_start.c +++ /dev/null @@ -1,92 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file lrw_start.c - LRW_MODE implementation, start mode, Tom St Denis -*/ - -#ifdef LTC_LRW_MODE - -/** - Initialize the LRW context - @param cipher The cipher desired, must be a 128-bit block cipher - @param IV The index value, must be 128-bits - @param key The cipher key - @param keylen The length of the cipher key in octets - @param tweak The tweak value (second key), must be 128-bits - @param num_rounds The number of rounds for the cipher (0 == default) - @param lrw [out] The LRW state - @return CRYPT_OK on success. -*/ -int lrw_start( int cipher, - const unsigned char *IV, - const unsigned char *key, int keylen, - const unsigned char *tweak, - int num_rounds, - symmetric_LRW *lrw) -{ - int err; -#ifdef LTC_LRW_TABLES - unsigned char B[16]; - int x, y, z, t; -#endif - - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(tweak != NULL); - LTC_ARGCHK(lrw != NULL); - -#ifdef LTC_FAST - if (16 % sizeof(LTC_FAST_TYPE)) { - return CRYPT_INVALID_ARG; - } -#endif - - /* is cipher valid? */ - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - if (cipher_descriptor[cipher].block_length != 16) { - return CRYPT_INVALID_CIPHER; - } - - /* schedule key */ - if ((err = ecb_start(cipher, key, keylen, num_rounds, &lrw->ecb)) != CRYPT_OK) { - return err; - } - lrw->ecb.cipher = cipher; - - /* copy the IV and tweak */ - XMEMCPY(lrw->tweak, tweak, 16); - -#ifdef LTC_LRW_TABLES - /* setup tables */ - /* generate the first table as it has no shifting (from which we make the other tables) */ - zeromem(B, 16); - for (y = 0; y < 256; y++) { - B[0] = y; - gcm_gf_mult(tweak, B, &lrw->PC[0][y][0]); - } - - /* now generate the rest of the tables based the previous table */ - for (x = 1; x < 16; x++) { - for (y = 0; y < 256; y++) { - /* now shift it right by 8 bits */ - t = lrw->PC[x-1][y][15]; - for (z = 15; z > 0; z--) { - lrw->PC[x][y][z] = lrw->PC[x-1][y][z-1]; - } - lrw->PC[x][y][0] = gcm_shift_table[t<<1]; - lrw->PC[x][y][1] ^= gcm_shift_table[(t<<1)+1]; - } - } -#endif - - /* generate first pad */ - return lrw_setiv(IV, 16, lrw); -} - - -#endif diff --git a/src/modes/lrw/lrw_test.c b/src/modes/lrw/lrw_test.c deleted file mode 100644 index 38a7bded..00000000 --- a/src/modes/lrw/lrw_test.c +++ /dev/null @@ -1,124 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file lrw_test.c - LRW_MODE implementation, test LRW, Tom St Denis -*/ - -#ifdef LTC_LRW_MODE - -/** - Test LRW against specs - @return CRYPT_OK if goodly -*/ -int lrw_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - static const struct { - unsigned char key[16], tweak[16], IV[16], P[16], expected_tweak[16], C[16]; - } tests[] = { - -{ -{ 0x45, 0x62, 0xac, 0x25, 0xf8, 0x28, 0x17, 0x6d, 0x4c, 0x26, 0x84, 0x14, 0xb5, 0x68, 0x01, 0x85 }, -{ 0x25, 0x8e, 0x2a, 0x05, 0xe7, 0x3e, 0x9d, 0x03, 0xee, 0x5a, 0x83, 0x0c, 0xcc, 0x09, 0x4c, 0x87 }, -{ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, -{ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 }, -{ 0x25, 0x8e, 0x2a, 0x05, 0xe7, 0x3e, 0x9d, 0x03, 0xee, 0x5a, 0x83, 0x0c, 0xcc, 0x09, 0x4c, 0x87 }, -{ 0xf1, 0xb2, 0x73, 0xcd, 0x65, 0xa3, 0xdf, 0x5f, 0xe9, 0x5d, 0x48, 0x92, 0x54, 0x63, 0x4e, 0xb8 } -}, - -{ -{ 0x59, 0x70, 0x47, 0x14, 0xf5, 0x57, 0x47, 0x8c, 0xd7, 0x79, 0xe8, 0x0f, 0x54, 0x88, 0x79, 0x44 }, -{ 0x35, 0x23, 0xc2, 0xde, 0xc5, 0x69, 0x4f, 0xa8, 0x72, 0xa9, 0xac, 0xa7, 0x0b, 0x2b, 0xee, 0xbc }, -{ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, -{ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 }, -{ 0x1a, 0x91, 0xe1, 0x6f, 0x62, 0xb4, 0xa7, 0xd4, 0x39, 0x54, 0xd6, 0x53, 0x85, 0x95, 0xf7, 0x5e }, -{ 0x00, 0xc8, 0x2b, 0xae, 0x95, 0xbb, 0xcd, 0xe5, 0x27, 0x4f, 0x07, 0x69, 0xb2, 0x60, 0xe1, 0x36 }, -}, - -{ -{ 0x59, 0x70, 0x47, 0x14, 0xf5, 0x57, 0x47, 0x8c, 0xd7, 0x79, 0xe8, 0x0f, 0x54, 0x88, 0x79, 0x44 }, -{ 0x67, 0x53, 0xc9, 0x0c, 0xb7, 0xd8, 0xcd, 0xe5, 0x06, 0xa0, 0x47, 0x78, 0x1a, 0xad, 0x85, 0x11 }, -{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }, -{ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 }, -{ 0x1a, 0x91, 0xe1, 0x6f, 0x62, 0xb4, 0xa7, 0xd4, 0x39, 0x54, 0xd6, 0x53, 0x85, 0x95, 0xf7, 0x5e }, -{ 0x00, 0xc8, 0x2b, 0xae, 0x95, 0xbb, 0xcd, 0xe5, 0x27, 0x4f, 0x07, 0x69, 0xb2, 0x60, 0xe1, 0x36 }, -}, - -{ - -{ 0xd8, 0x2a, 0x91, 0x34, 0xb2, 0x6a, 0x56, 0x50, 0x30, 0xfe, 0x69, 0xe2, 0x37, 0x7f, 0x98, 0x47 }, -{ 0x4e, 0xb5, 0x5d, 0x31, 0x05, 0x97, 0x3a, 0x3f, 0x5e, 0x23, 0xda, 0xfb, 0x5a, 0x45, 0xd6, 0xc0 }, -{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 }, -{ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 }, -{ 0x18, 0xc9, 0x1f, 0x6d, 0x60, 0x1a, 0x1a, 0x37, 0x5d, 0x0b, 0x0e, 0xf7, 0x3a, 0xd5, 0x74, 0xc4 }, -{ 0x76, 0x32, 0x21, 0x83, 0xed, 0x8f, 0xf1, 0x82, 0xf9, 0x59, 0x62, 0x03, 0x69, 0x0e, 0x5e, 0x01 }, - -} -}; - - int idx, err, x; - symmetric_LRW lrw; - unsigned char buf[2][16]; - - idx = find_cipher("aes"); - if (idx == -1) { - idx = find_cipher("rijndael"); - if (idx == -1) { - return CRYPT_NOP; - } - } - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { - /* schedule it */ - if ((err = lrw_start(idx, tests[x].IV, tests[x].key, 16, tests[x].tweak, 0, &lrw)) != CRYPT_OK) { - return err; - } - - /* check pad against expected tweak */ - if (ltc_compare_testvector(tests[x].expected_tweak, 16, lrw.pad, 16, "LRW Tweak", x)) { - lrw_done(&lrw); - return CRYPT_FAIL_TESTVECTOR; - } - - /* process block */ - if ((err = lrw_encrypt(tests[x].P, buf[0], 16, &lrw)) != CRYPT_OK) { - lrw_done(&lrw); - return err; - } - - if (ltc_compare_testvector(buf[0], 16, tests[x].C, 16, "LRW Encrypt", x)) { - lrw_done(&lrw); - return CRYPT_FAIL_TESTVECTOR; - } - - /* process block */ - if ((err = lrw_setiv(tests[x].IV, 16, &lrw)) != CRYPT_OK) { - lrw_done(&lrw); - return err; - } - - if ((err = lrw_decrypt(buf[0], buf[1], 16, &lrw)) != CRYPT_OK) { - lrw_done(&lrw); - return err; - } - - if (ltc_compare_testvector(buf[1], 16, tests[x].P, 16, "LRW Decrypt", x)) { - lrw_done(&lrw); - return CRYPT_FAIL_TESTVECTOR; - } - if ((err = lrw_done(&lrw)) != CRYPT_OK) { - return err; - } - } - return CRYPT_OK; -#endif -} - -#endif - - diff --git a/src/modes/ofb/ofb_decrypt.c b/src/modes/ofb/ofb_decrypt.c deleted file mode 100644 index cebcd7b1..00000000 --- a/src/modes/ofb/ofb_decrypt.c +++ /dev/null @@ -1,31 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ofb_decrypt.c - OFB implementation, decrypt data, Tom St Denis -*/ - -#ifdef LTC_OFB_MODE - -/** - OFB decrypt - @param ct Ciphertext - @param pt [out] Plaintext - @param len Length of ciphertext (octets) - @param ofb OFB state - @return CRYPT_OK if successful -*/ -int ofb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_OFB *ofb) -{ - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(ofb != NULL); - return ofb_encrypt(ct, pt, len, ofb); -} - - -#endif - - diff --git a/src/modes/ofb/ofb_done.c b/src/modes/ofb/ofb_done.c deleted file mode 100644 index 15cf1f66..00000000 --- a/src/modes/ofb/ofb_done.c +++ /dev/null @@ -1,25 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ofb_done.c - OFB implementation, finish chain, Tom St Denis -*/ - -#ifdef LTC_OFB_MODE - -/** Terminate the chain - @param ofb The OFB chain to terminate - @return CRYPT_OK on success -*/ -int ofb_done(symmetric_OFB *ofb) -{ - LTC_ARGCHK(ofb != NULL); - - return ecb_done(&ofb->ecb); -} - - - -#endif diff --git a/src/modes/ofb/ofb_encrypt.c b/src/modes/ofb/ofb_encrypt.c deleted file mode 100644 index 211efcc1..00000000 --- a/src/modes/ofb/ofb_encrypt.c +++ /dev/null @@ -1,48 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ofb_encrypt.c - OFB implementation, encrypt data, Tom St Denis -*/ - -#ifdef LTC_OFB_MODE - -/** - OFB encrypt - @param pt Plaintext - @param ct [out] Ciphertext - @param len Length of plaintext (octets) - @param ofb OFB state - @return CRYPT_OK if successful -*/ -int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_OFB *ofb) -{ - int err; - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(ofb != NULL); - if ((err = cipher_is_valid(ofb->ecb.cipher)) != CRYPT_OK) { - return err; - } - - /* is blocklen/padlen valid? */ - if (ofb->ecb.blocklen < 0 || ofb->ecb.blocklen > (int)sizeof(ofb->IV) || - ofb->padlen < 0 || ofb->padlen > (int)sizeof(ofb->IV)) { - return CRYPT_INVALID_ARG; - } - - while (len-- > 0) { - if (ofb->padlen == ofb->ecb.blocklen) { - if ((err = ecb_encrypt_block(ofb->IV, ofb->IV, &ofb->ecb)) != CRYPT_OK) { - return err; - } - ofb->padlen = 0; - } - *ct++ = *pt++ ^ ofb->IV[(ofb->padlen)++]; - } - return CRYPT_OK; -} - -#endif diff --git a/src/modes/ofb/ofb_getiv.c b/src/modes/ofb/ofb_getiv.c deleted file mode 100644 index 6a40c1ba..00000000 --- a/src/modes/ofb/ofb_getiv.c +++ /dev/null @@ -1,34 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ofb_getiv.c - OFB implementation, get IV, Tom St Denis -*/ - -#ifdef LTC_OFB_MODE - -/** - Get the current initialization vector - @param IV [out] The destination of the initialization vector - @param len [in/out] The max size and resulting size of the initialization vector - @param ofb The OFB state - @return CRYPT_OK if successful -*/ -int ofb_getiv(unsigned char *IV, unsigned long *len, const symmetric_OFB *ofb) -{ - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(len != NULL); - LTC_ARGCHK(ofb != NULL); - if ((unsigned long)ofb->ecb.blocklen > *len) { - *len = ofb->ecb.blocklen; - return CRYPT_BUFFER_OVERFLOW; - } - XMEMCPY(IV, ofb->IV, ofb->ecb.blocklen); - *len = ofb->ecb.blocklen; - - return CRYPT_OK; -} - -#endif diff --git a/src/modes/ofb/ofb_setiv.c b/src/modes/ofb/ofb_setiv.c deleted file mode 100644 index 9a06cc57..00000000 --- a/src/modes/ofb/ofb_setiv.c +++ /dev/null @@ -1,40 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ofb_setiv.c - OFB implementation, set IV, Tom St Denis -*/ - -#ifdef LTC_OFB_MODE - -/** - Set an initialization vector - @param IV The initialization vector - @param len The length of the vector (in octets) - @param ofb The OFB state - @return CRYPT_OK if successful -*/ -int ofb_setiv(const unsigned char *IV, unsigned long len, symmetric_OFB *ofb) -{ - int err; - - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(ofb != NULL); - - if ((err = cipher_is_valid(ofb->ecb.cipher)) != CRYPT_OK) { - return err; - } - - if (len != (unsigned long)ofb->ecb.blocklen) { - return CRYPT_INVALID_ARG; - } - - /* force next block */ - ofb->padlen = 0; - return ecb_encrypt_block(IV, ofb->IV, &ofb->ecb); -} - -#endif - diff --git a/src/modes/ofb/ofb_start.c b/src/modes/ofb/ofb_start.c deleted file mode 100644 index 2998f3fc..00000000 --- a/src/modes/ofb/ofb_start.c +++ /dev/null @@ -1,50 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ofb_start.c - OFB implementation, start chain, Tom St Denis -*/ - - -#ifdef LTC_OFB_MODE - -/** - Initialize a OFB context - @param cipher The index of the cipher desired - @param IV The initialization vector - @param key The secret key - @param keylen The length of the secret key (octets) - @param num_rounds Number of rounds in the cipher desired (0 for default) - @param ofb The OFB state to initialize - @return CRYPT_OK if successful -*/ -int ofb_start(int cipher, const unsigned char *IV, const unsigned char *key, - int keylen, int num_rounds, symmetric_OFB *ofb) -{ - int x, err; - - LTC_ARGCHK(IV != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ofb != NULL); - - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - - /* init the cipher */ - if ((err = ecb_start(cipher, key, keylen, num_rounds, &ofb->ecb)) != CRYPT_OK) { - return err; - } - ofb->padlen = cipher_descriptor[cipher].block_length; - - /* copy details */ - for (x = 0; x < ofb->ecb.blocklen; x++) { - ofb->IV[x] = IV[x]; - } - - return CRYPT_OK; -} - -#endif diff --git a/src/modes/xts/xts_decrypt.c b/src/modes/xts/xts_decrypt.c deleted file mode 100644 index 4ae755fa..00000000 --- a/src/modes/xts/xts_decrypt.c +++ /dev/null @@ -1,146 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - Source donated by Elliptic Semiconductor Inc (www.ellipticsemi.com) to the LibTom Projects - */ - -#ifdef LTC_XTS_MODE - -static int s_tweak_uncrypt(const unsigned char *C, unsigned char *P, unsigned char *T, const symmetric_xts *xts) -{ - unsigned long x; - int err; - - /* tweak encrypt block i */ -#ifdef LTC_FAST - for (x = 0; x < 16; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR3(&P[x], &C[x], &T[x]); - } -#else - for (x = 0; x < 16; x++) { - P[x] = C[x] ^ T[x]; - } -#endif - - err = ecb_decrypt_block(P, P, &xts->key1); - -#ifdef LTC_FAST - for (x = 0; x < 16; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2(&P[x], &T[x]); - } -#else - for (x = 0; x < 16; x++) { - P[x] = P[x] ^ T[x]; - } -#endif - - /* LFSR the tweak */ - xts_mult_x(T); - - return err; -} - -/** XTS Decryption - @param ct [in] Ciphertext - @param ptlen Length of plaintext (and ciphertext) - @param pt [out] Plaintext - @param tweak [in] The 128--bit encryption tweak (e.g. sector number) - @param xts The XTS structure - Returns CRYPT_OK upon success - */ -int xts_decrypt(const unsigned char *ct, unsigned long ptlen, unsigned char *pt, unsigned char *tweak, - const symmetric_xts *xts) -{ - unsigned char PP[16] = {0}, CC[16], T[16]; - unsigned long i, m, mo, lim; - int err; - - /* check inputs */ - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(tweak != NULL); - LTC_ARGCHK(xts != NULL); - - /* check if valid */ - if ((err = cipher_is_valid(xts->cipher)) != CRYPT_OK) { - return err; - } - - /* get number of blocks */ - m = ptlen >> 4; - mo = ptlen & 15; - - /* must have at least one full block */ - if (m == 0) { - return CRYPT_INVALID_ARG; - } - - if (mo == 0) { - lim = m; - } else { - lim = m - 1; - } - - if (cipher_descriptor[xts->cipher].accel_xts_decrypt && lim > 0) { - - /* use accelerated decryption for whole blocks */ - if ((err = cipher_descriptor[xts->cipher].accel_xts_decrypt(ct, pt, lim, tweak, &xts->key1.key, &xts->key2.key)) != - CRYPT_OK) { - return err; - } - ct += lim * 16; - pt += lim * 16; - - /* tweak is encrypted on output */ - XMEMCPY(T, tweak, sizeof(T)); - } else { - /* encrypt the tweak */ - if ((err = ecb_encrypt_block(tweak, T, &xts->key2)) != CRYPT_OK) { - return err; - } - - for (i = 0; i < lim; i++) { - if ((err = s_tweak_uncrypt(ct, pt, T, xts)) != CRYPT_OK) { - return err; - } - ct += 16; - pt += 16; - } - } - - /* if ptlen not divide 16 then */ - if (mo > 0) { - XMEMCPY(CC, T, 16); - xts_mult_x(CC); - - /* PP = tweak decrypt block m-1 */ - if ((err = s_tweak_uncrypt(ct, PP, CC, xts)) != CRYPT_OK) { - return err; - } - - /* Pm = first ptlen % 16 bytes of PP */ - for (i = 0; i < mo; i++) { - CC[i] = ct[16 + i]; - pt[16 + i] = PP[i]; - } - for (; i < 16; i++) { - CC[i] = PP[i]; - } - - /* Pm-1 = Tweak uncrypt CC */ - if ((err = s_tweak_uncrypt(CC, pt, T, xts)) != CRYPT_OK) { - return err; - } - } - - /* Decrypt the tweak back */ - if ((err = ecb_decrypt_block(T, tweak, &xts->key2)) != CRYPT_OK) { - return err; - } - - return CRYPT_OK; -} - -#endif diff --git a/src/modes/xts/xts_done.c b/src/modes/xts/xts_done.c deleted file mode 100644 index dd7ed25c..00000000 --- a/src/modes/xts/xts_done.c +++ /dev/null @@ -1,21 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - Source donated by Elliptic Semiconductor Inc (www.ellipticsemi.com) to the LibTom Projects -*/ - -#ifdef LTC_XTS_MODE - -/** Terminate XTS state - @param xts The state to terminate -*/ -void xts_done(symmetric_xts *xts) -{ - LTC_ARGCHKVD(xts != NULL); - ecb_done(&xts->key1); - ecb_done(&xts->key2); -} - -#endif diff --git a/src/modes/xts/xts_encrypt.c b/src/modes/xts/xts_encrypt.c deleted file mode 100644 index dab234c9..00000000 --- a/src/modes/xts/xts_encrypt.c +++ /dev/null @@ -1,147 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - Source donated by Elliptic Semiconductor Inc (www.ellipticsemi.com) to the LibTom Projects - */ - -#ifdef LTC_XTS_MODE - -static int s_tweak_crypt(const unsigned char *P, unsigned char *C, unsigned char *T, const symmetric_xts *xts) -{ - unsigned long x; - int err; - - /* tweak encrypt block i */ -#ifdef LTC_FAST - for (x = 0; x < 16; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR3(&C[x], &P[x], &T[x]); - } -#else - for (x = 0; x < 16; x++) { - C[x] = P[x] ^ T[x]; - } -#endif - - if ((err = ecb_encrypt_block(C, C, &xts->key1)) != CRYPT_OK) { - return err; - } - -#ifdef LTC_FAST - for (x = 0; x < 16; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR2(&C[x], &T[x]); - } -#else - for (x = 0; x < 16; x++) { - C[x] = C[x] ^ T[x]; - } -#endif - - /* LFSR the tweak */ - xts_mult_x(T); - - return CRYPT_OK; -} - -/** XTS Encryption - @param pt [in] Plaintext - @param ptlen Length of plaintext (and ciphertext) - @param ct [out] Ciphertext - @param tweak [in] The 128--bit encryption tweak (e.g. sector number) - @param xts The XTS structure - Returns CRYPT_OK upon success - */ -int xts_encrypt(const unsigned char *pt, unsigned long ptlen, unsigned char *ct, unsigned char *tweak, - const symmetric_xts *xts) -{ - unsigned char PP[16], CC[16] = {0}, T[16]; - unsigned long i, m, mo, lim; - int err; - - /* check inputs */ - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(tweak != NULL); - LTC_ARGCHK(xts != NULL); - - /* check if valid */ - if ((err = cipher_is_valid(xts->cipher)) != CRYPT_OK) { - return err; - } - - /* get number of blocks */ - m = ptlen >> 4; - mo = ptlen & 15; - - /* must have at least one full block */ - if (m == 0) { - return CRYPT_INVALID_ARG; - } - - if (mo == 0) { - lim = m; - } else { - lim = m - 1; - } - - if (cipher_descriptor[xts->cipher].accel_xts_encrypt && lim > 0) { - - /* use accelerated encryption for whole blocks */ - if ((err = cipher_descriptor[xts->cipher].accel_xts_encrypt(pt, ct, lim, tweak, &xts->key1.key, &xts->key2.key)) != - CRYPT_OK) { - return err; - } - ct += lim * 16; - pt += lim * 16; - - /* tweak is encrypted on output */ - XMEMCPY(T, tweak, sizeof(T)); - } else { - - /* encrypt the tweak */ - if ((err = ecb_encrypt_block(tweak, T, &xts->key2)) != CRYPT_OK) { - return err; - } - - for (i = 0; i < lim; i++) { - if ((err = s_tweak_crypt(pt, ct, T, xts)) != CRYPT_OK) { - return err; - } - ct += 16; - pt += 16; - } - } - - /* if ptlen not divide 16 then */ - if (mo > 0) { - /* CC = tweak encrypt block m-1 */ - if ((err = s_tweak_crypt(pt, CC, T, xts)) != CRYPT_OK) { - return err; - } - - /* Cm = first ptlen % 16 bytes of CC */ - for (i = 0; i < mo; i++) { - PP[i] = pt[16 + i]; - ct[16 + i] = CC[i]; - } - - for (; i < 16; i++) { - PP[i] = CC[i]; - } - - /* Cm-1 = Tweak encrypt PP */ - if ((err = s_tweak_crypt(PP, ct, T, xts)) != CRYPT_OK) { - return err; - } - } - - /* Decrypt the tweak back */ - if ((err = ecb_decrypt_block(T, tweak, &xts->key2)) != CRYPT_OK) { - return err; - } - - return err; -} - -#endif diff --git a/src/modes/xts/xts_init.c b/src/modes/xts/xts_init.c deleted file mode 100644 index d0158471..00000000 --- a/src/modes/xts/xts_init.c +++ /dev/null @@ -1,51 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - Source donated by Elliptic Semiconductor Inc (www.ellipticsemi.com) to the LibTom Projects -*/ - -#ifdef LTC_XTS_MODE - -/** Start XTS mode - @param cipher The index of the cipher to use - @param key1 The encrypt key - @param key2 The tweak encrypt key - @param keylen The length of the keys (each) in octets - @param num_rounds The number of rounds for the cipher (0 == default) - @param xts [out] XTS structure - Returns CRYPT_OK upon success. -*/ -int xts_start(int cipher, const unsigned char *key1, const unsigned char *key2, unsigned long keylen, int num_rounds, - symmetric_xts *xts) -{ - int err; - - /* check inputs */ - LTC_ARGCHK(key1 != NULL); - LTC_ARGCHK(key2 != NULL); - LTC_ARGCHK(xts != NULL); - - /* check if valid */ - if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { - return err; - } - - if (cipher_descriptor[cipher].block_length != 16) { - return CRYPT_INVALID_ARG; - } - - /* schedule the two ciphers */ - if ((err = ecb_start(cipher, key1, keylen, num_rounds, &xts->key1)) != CRYPT_OK) { - return err; - } - if ((err = ecb_start(cipher, key2, keylen, num_rounds, &xts->key2)) != CRYPT_OK) { - return err; - } - xts->cipher = cipher; - - return err; -} - -#endif diff --git a/src/modes/xts/xts_mult_x.c b/src/modes/xts/xts_mult_x.c deleted file mode 100644 index 20947a54..00000000 --- a/src/modes/xts/xts_mult_x.c +++ /dev/null @@ -1,29 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - Source donated by Elliptic Semiconductor Inc (www.ellipticsemi.com) to the LibTom Projects -*/ - -#ifdef LTC_XTS_MODE - -/** multiply by x - @param I The value to multiply by x (LFSR shift) -*/ -void xts_mult_x(unsigned char *I) -{ - int x; - unsigned char t, tt; - - for (x = t = 0; x < 16; x++) { - tt = I[x] >> 7; - I[x] = ((I[x] << 1) | t) & 0xFF; - t = tt; - } - if (tt) { - I[0] ^= 0x87; - } -} - -#endif diff --git a/src/modes/xts/xts_test.c b/src/modes/xts/xts_test.c deleted file mode 100644 index e0b06e12..00000000 --- a/src/modes/xts/xts_test.c +++ /dev/null @@ -1,300 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_XTS_MODE - -#ifndef LTC_NO_TEST -static int s_xts_test_accel_xts_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long blocks, - unsigned char *tweak, const symmetric_key *skey1, const symmetric_key *skey2) -{ - int ret; - symmetric_xts xts; - int (*orig)(const unsigned char *, unsigned char *, - unsigned long , unsigned char *, - const symmetric_key *, const symmetric_key *); - - /* AES can be under rijndael or aes... try to find it */ - if ((xts.cipher = find_cipher("aes")) == -1) { - if ((xts.cipher = find_cipher("rijndael")) == -1) { - return CRYPT_NOP; - } - } - orig = cipher_descriptor[xts.cipher].accel_xts_encrypt; - cipher_descriptor[xts.cipher].accel_xts_encrypt = NULL; - - XMEMCPY(&xts.key1.key, skey1, sizeof(xts.key1)); - XMEMCPY(&xts.key2.key, skey2, sizeof(xts.key2)); - xts.key1.cipher = xts.key2.cipher = xts.cipher; - xts.key1.blocklen = xts.key2.blocklen = cipher_descriptor[xts.cipher].block_length; - - ret = xts_encrypt(pt, blocks << 4, ct, tweak, &xts); - cipher_descriptor[xts.cipher].accel_xts_encrypt = orig; - - return ret; -} - -static int s_xts_test_accel_xts_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long blocks, - unsigned char *tweak, const symmetric_key *skey1, const symmetric_key *skey2) -{ - int ret; - symmetric_xts xts; - int (*orig)(const unsigned char *, unsigned char *, - unsigned long , unsigned char *, - const symmetric_key *, const symmetric_key *); - - /* AES can be under rijndael or aes... try to find it */ - if ((xts.cipher = find_cipher("aes")) == -1) { - if ((xts.cipher = find_cipher("rijndael")) == -1) { - return CRYPT_NOP; - } - } - orig = cipher_descriptor[xts.cipher].accel_xts_decrypt; - cipher_descriptor[xts.cipher].accel_xts_decrypt = NULL; - - XMEMCPY(&xts.key1.key, skey1, sizeof(xts.key1)); - XMEMCPY(&xts.key2.key, skey2, sizeof(xts.key2)); - xts.key1.cipher = xts.key2.cipher = xts.cipher; - xts.key1.blocklen = xts.key2.blocklen = cipher_descriptor[xts.cipher].block_length; - - ret = xts_decrypt(ct, blocks << 4, pt, tweak, &xts); - cipher_descriptor[xts.cipher].accel_xts_decrypt = orig; - - return ret; -} -#endif - -/** - Source donated by Elliptic Semiconductor Inc (www.ellipticsemi.com) to the LibTom Projects - - Returns CRYPT_OK upon success. -*/ -int xts_test(void) -{ -#ifdef LTC_NO_TEST - return CRYPT_NOP; -#else - static const struct - { - int keylen; - unsigned char key1[32]; - unsigned char key2[32]; - ulong64 seqnum; - unsigned long PTLEN; - unsigned char PTX[512], CTX[512]; - } tests[] = { - -/* #1 32 byte key, 32 byte PTX */ -{ - 32, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - 0, - 32, - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, - { 0x91,0x7c,0xf6,0x9e,0xbd,0x68,0xb2,0xec,0x9b,0x9f,0xe9,0xa3,0xea,0xdd,0xa6,0x92,0xcd,0x43,0xd2,0xf5,0x95,0x98,0xed,0x85,0x8c,0x02,0xc2,0x65,0x2f,0xbf,0x92,0x2e }, -}, - -/* #2, 32 byte key, 32 byte PTX */ -{ - 32, - { 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11 }, - { 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22 }, - CONST64(0x3333333333), - 32, - { 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44 }, - { 0xc4,0x54,0x18,0x5e,0x6a,0x16,0x93,0x6e,0x39,0x33,0x40,0x38,0xac,0xef,0x83,0x8b,0xfb,0x18,0x6f,0xff,0x74,0x80,0xad,0xc4,0x28,0x93,0x82,0xec,0xd6,0xd3,0x94,0xf0 }, -}, - -/* #5 from xts.7, 32 byte key, 32 byte PTX */ -{ - 32, - { 0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0 }, - { 0xbf,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb4,0xb3,0xb2,0xb1,0xb0 }, - CONST64(0x123456789a), - 32, - { 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44 }, - { 0xb0,0x1f,0x86,0xf8,0xed,0xc1,0x86,0x37,0x06,0xfa,0x8a,0x42,0x53,0xe3,0x4f,0x28,0xaf,0x31,0x9d,0xe3,0x83,0x34,0x87,0x0f,0x4d,0xd1,0xf9,0x4c,0xbe,0x98,0x32,0xf1 }, -}, - -/* #4, 32 byte key, 512 byte PTX */ -{ - 32, - { 0x27,0x18,0x28,0x18,0x28,0x45,0x90,0x45,0x23,0x53,0x60,0x28,0x74,0x71,0x35,0x26 }, - { 0x31,0x41,0x59,0x26,0x53,0x58,0x97,0x93,0x23,0x84,0x62,0x64,0x33,0x83,0x27,0x95 }, - 0, - 512, - { -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, -0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, -0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, -0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff, -0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, -0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, -0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, -0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, -0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, -0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, -0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff, - }, - { -0x27,0xa7,0x47,0x9b,0xef,0xa1,0xd4,0x76,0x48,0x9f,0x30,0x8c,0xd4,0xcf,0xa6,0xe2,0xa9,0x6e,0x4b,0xbe,0x32,0x08,0xff,0x25,0x28,0x7d,0xd3,0x81,0x96,0x16,0xe8,0x9c, -0xc7,0x8c,0xf7,0xf5,0xe5,0x43,0x44,0x5f,0x83,0x33,0xd8,0xfa,0x7f,0x56,0x00,0x00,0x05,0x27,0x9f,0xa5,0xd8,0xb5,0xe4,0xad,0x40,0xe7,0x36,0xdd,0xb4,0xd3,0x54,0x12, -0x32,0x80,0x63,0xfd,0x2a,0xab,0x53,0xe5,0xea,0x1e,0x0a,0x9f,0x33,0x25,0x00,0xa5,0xdf,0x94,0x87,0xd0,0x7a,0x5c,0x92,0xcc,0x51,0x2c,0x88,0x66,0xc7,0xe8,0x60,0xce, -0x93,0xfd,0xf1,0x66,0xa2,0x49,0x12,0xb4,0x22,0x97,0x61,0x46,0xae,0x20,0xce,0x84,0x6b,0xb7,0xdc,0x9b,0xa9,0x4a,0x76,0x7a,0xae,0xf2,0x0c,0x0d,0x61,0xad,0x02,0x65, -0x5e,0xa9,0x2d,0xc4,0xc4,0xe4,0x1a,0x89,0x52,0xc6,0x51,0xd3,0x31,0x74,0xbe,0x51,0xa1,0x0c,0x42,0x11,0x10,0xe6,0xd8,0x15,0x88,0xed,0xe8,0x21,0x03,0xa2,0x52,0xd8, -0xa7,0x50,0xe8,0x76,0x8d,0xef,0xff,0xed,0x91,0x22,0x81,0x0a,0xae,0xb9,0x9f,0x91,0x72,0xaf,0x82,0xb6,0x04,0xdc,0x4b,0x8e,0x51,0xbc,0xb0,0x82,0x35,0xa6,0xf4,0x34, -0x13,0x32,0xe4,0xca,0x60,0x48,0x2a,0x4b,0xa1,0xa0,0x3b,0x3e,0x65,0x00,0x8f,0xc5,0xda,0x76,0xb7,0x0b,0xf1,0x69,0x0d,0xb4,0xea,0xe2,0x9c,0x5f,0x1b,0xad,0xd0,0x3c, -0x5c,0xcf,0x2a,0x55,0xd7,0x05,0xdd,0xcd,0x86,0xd4,0x49,0x51,0x1c,0xeb,0x7e,0xc3,0x0b,0xf1,0x2b,0x1f,0xa3,0x5b,0x91,0x3f,0x9f,0x74,0x7a,0x8a,0xfd,0x1b,0x13,0x0e, -0x94,0xbf,0xf9,0x4e,0xff,0xd0,0x1a,0x91,0x73,0x5c,0xa1,0x72,0x6a,0xcd,0x0b,0x19,0x7c,0x4e,0x5b,0x03,0x39,0x36,0x97,0xe1,0x26,0x82,0x6f,0xb6,0xbb,0xde,0x8e,0xcc, -0x1e,0x08,0x29,0x85,0x16,0xe2,0xc9,0xed,0x03,0xff,0x3c,0x1b,0x78,0x60,0xf6,0xde,0x76,0xd4,0xce,0xcd,0x94,0xc8,0x11,0x98,0x55,0xef,0x52,0x97,0xca,0x67,0xe9,0xf3, -0xe7,0xff,0x72,0xb1,0xe9,0x97,0x85,0xca,0x0a,0x7e,0x77,0x20,0xc5,0xb3,0x6d,0xc6,0xd7,0x2c,0xac,0x95,0x74,0xc8,0xcb,0xbc,0x2f,0x80,0x1e,0x23,0xe5,0x6f,0xd3,0x44, -0xb0,0x7f,0x22,0x15,0x4b,0xeb,0xa0,0xf0,0x8c,0xe8,0x89,0x1e,0x64,0x3e,0xd9,0x95,0xc9,0x4d,0x9a,0x69,0xc9,0xf1,0xb5,0xf4,0x99,0x02,0x7a,0x78,0x57,0x2a,0xee,0xbd, -0x74,0xd2,0x0c,0xc3,0x98,0x81,0xc2,0x13,0xee,0x77,0x0b,0x10,0x10,0xe4,0xbe,0xa7,0x18,0x84,0x69,0x77,0xae,0x11,0x9f,0x7a,0x02,0x3a,0xb5,0x8c,0xca,0x0a,0xd7,0x52, -0xaf,0xe6,0x56,0xbb,0x3c,0x17,0x25,0x6a,0x9f,0x6e,0x9b,0xf1,0x9f,0xdd,0x5a,0x38,0xfc,0x82,0xbb,0xe8,0x72,0xc5,0x53,0x9e,0xdb,0x60,0x9e,0xf4,0xf7,0x9c,0x20,0x3e, -0xbb,0x14,0x0f,0x2e,0x58,0x3c,0xb2,0xad,0x15,0xb4,0xaa,0x5b,0x65,0x50,0x16,0xa8,0x44,0x92,0x77,0xdb,0xd4,0x77,0xef,0x2c,0x8d,0x6c,0x01,0x7d,0xb7,0x38,0xb1,0x8d, -0xeb,0x4a,0x42,0x7d,0x19,0x23,0xce,0x3f,0xf2,0x62,0x73,0x57,0x79,0xa4,0x18,0xf2,0x0a,0x28,0x2d,0xf9,0x20,0x14,0x7b,0xea,0xbe,0x42,0x1e,0xe5,0x31,0x9d,0x05,0x68, - } -}, - -/* #7, 32 byte key, 17 byte PTX */ -{ - 32, - { 0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0 }, - { 0xbf,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb4,0xb3,0xb2,0xb1,0xb0 }, - CONST64(0x123456789a), - 17, - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10 }, - { 0x6c,0x16,0x25,0xdb,0x46,0x71,0x52,0x2d,0x3d,0x75,0x99,0x60,0x1d,0xe7,0xca,0x09,0xed }, -}, - -/* #15, 32 byte key, 25 byte PTX */ -{ - 32, - { 0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0 }, - { 0xbf,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb4,0xb3,0xb2,0xb1,0xb0 }, - CONST64(0x123456789a), - 25, - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18 }, - { 0x8f,0x4d,0xcb,0xad,0x55,0x55,0x8d,0x7b,0x4e,0x01,0xd9,0x37,0x9c,0xd4,0xea,0x22,0xed,0xbf,0x9d,0xac,0xe4,0x5d,0x6f,0x6a,0x73 }, -}, - -/* #21, 32 byte key, 31 byte PTX */ -{ - 32, - { 0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0 }, - { 0xbf,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb4,0xb3,0xb2,0xb1,0xb0 }, - CONST64(0x123456789a), - 31, - { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e }, - { 0xd0,0x5b,0xc0,0x90,0xa8,0xe0,0x4f,0x1b,0x3d,0x3e,0xcd,0xd5,0xba,0xec,0x0f,0xd4,0xed,0xbf,0x9d,0xac,0xe4,0x5d,0x6f,0x6a,0x73,0x06,0xe6,0x4b,0xe5,0xdd,0x82 }, -}, - -}; - unsigned char OUT[512], Torg[16], T[16]; - ulong64 seq; - symmetric_xts xts; - int i, j, k, err, idx; - unsigned long len; - - /* AES can be under rijndael or aes... try to find it */ - if ((idx = find_cipher("aes")) == -1) { - if ((idx = find_cipher("rijndael")) == -1) { - return CRYPT_NOP; - } - } - for (k = 0; k < 4; ++k) { - cipher_descriptor[idx].accel_xts_encrypt = NULL; - cipher_descriptor[idx].accel_xts_decrypt = NULL; - if (k & 0x1) { - cipher_descriptor[idx].accel_xts_encrypt = s_xts_test_accel_xts_encrypt; - } - if (k & 0x2) { - cipher_descriptor[idx].accel_xts_decrypt = s_xts_test_accel_xts_decrypt; - } - for (j = 0; j < 2; j++) { - for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { - /* skip the cases where - * the length is smaller than 2*blocklen - * or the length is not a multiple of 32 - */ - if ((j == 1) && ((tests[i].PTLEN < 32) || (tests[i].PTLEN % 32))) { - continue; - } - if ((k > 0) && (j == 1)) { - continue; - } - len = tests[i].PTLEN / 2; - - err = xts_start(idx, tests[i].key1, tests[i].key2, tests[i].keylen / 2, 0, &xts); - if (err != CRYPT_OK) { - return err; - } - - seq = tests[i].seqnum; - STORE64L(seq, Torg); - XMEMSET(Torg + 8, 0, 8); - - XMEMCPY(T, Torg, sizeof(T)); - if (j == 0) { - err = xts_encrypt(tests[i].PTX, tests[i].PTLEN, OUT, T, &xts); - if (err != CRYPT_OK) { - xts_done(&xts); - return err; - } - } else { - err = xts_encrypt(tests[i].PTX, len, OUT, T, &xts); - if (err != CRYPT_OK) { - xts_done(&xts); - return err; - } - err = xts_encrypt(&tests[i].PTX[len], len, &OUT[len], T, &xts); - if (err != CRYPT_OK) { - xts_done(&xts); - return err; - } - } - - if (ltc_compare_testvector(OUT, tests[i].PTLEN, tests[i].CTX, tests[i].PTLEN, "XTS encrypt", i)) { - xts_done(&xts); - return CRYPT_FAIL_TESTVECTOR; - } - - XMEMCPY(T, Torg, sizeof(T)); - if (j == 0) { - err = xts_decrypt(tests[i].CTX, tests[i].PTLEN, OUT, T, &xts); - if (err != CRYPT_OK) { - xts_done(&xts); - return err; - } - } else { - err = xts_decrypt(tests[i].CTX, len, OUT, T, &xts); - if (err != CRYPT_OK) { - xts_done(&xts); - return err; - } - err = xts_decrypt(&tests[i].CTX[len], len, &OUT[len], T, &xts); - if (err != CRYPT_OK) { - xts_done(&xts); - return err; - } - } - - if (ltc_compare_testvector(OUT, tests[i].PTLEN, tests[i].PTX, tests[i].PTLEN, "XTS decrypt", i)) { - xts_done(&xts); - return CRYPT_FAIL_TESTVECTOR; - } - xts_done(&xts); - } - } - } - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/pk/asn1/der/bit/der_decode_bit_string.c b/src/pk/asn1/der/bit/der_decode_bit_string.c deleted file mode 100644 index fc41cfcd..00000000 --- a/src/pk/asn1/der/bit/der_decode_bit_string.c +++ /dev/null @@ -1,88 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_bit_string.c - ASN.1 DER, encode a BIT STRING, Tom St Denis -*/ - - -#ifdef LTC_DER - -/** - Store a BIT STRING - @param in The DER encoded BIT STRING - @param inlen The size of the DER BIT STRING - @param out [out] The array of bits stored (one per char) - @param outlen [in/out] The number of bits stored - @return CRYPT_OK if successful -*/ -int der_decode_bit_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long dlen, blen, x, y, unused; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* packet must be at least 3 bytes */ - if (inlen < 3) { - return CRYPT_INVALID_ARG; - } - - /* check for 0x03 */ - if ((in[0]&0x1F) != 0x03) { - return CRYPT_INVALID_PACKET; - } - - /* offset in the data */ - x = 1; - - /* get the length of the data */ - y = inlen - 1; - if ((err = der_decode_asn1_length(in + x, &y, &dlen)) != CRYPT_OK) { - return err; - } - x += y; - /* is the data len too long or too short? */ - if ((dlen == 0) || (dlen > (inlen - x))) { - return CRYPT_INVALID_PACKET; - } - - /* DER permits 0..7 unused bits, and any declared padding bits must be zero. */ - unused = in[x]; - if (unused > 7) { - return CRYPT_INVALID_PACKET; - } - if ((dlen == 1) && (unused != 0)) { - return CRYPT_INVALID_PACKET; - } - if ((unused != 0) && ((in[x + dlen - 1] & ((1uL << unused) - 1uL)) != 0)) { - return CRYPT_INVALID_PACKET; - } - x++; - blen = ((dlen - 1) << 3) - unused; - - /* too many bits? */ - if (blen > *outlen) { - *outlen = blen; - return CRYPT_BUFFER_OVERFLOW; - } - - /* decode/store the bits */ - for (y = 0; y < blen; y++) { - out[y] = (in[x] & (1 << (7 - (y & 7)))) ? 1 : 0; - if ((y & 7) == 7) { - ++x; - } - } - - /* we done */ - *outlen = blen; - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/bit/der_decode_raw_bit_string.c b/src/pk/asn1/der/bit/der_decode_raw_bit_string.c deleted file mode 100644 index 96c266c0..00000000 --- a/src/pk/asn1/der/bit/der_decode_raw_bit_string.c +++ /dev/null @@ -1,95 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_bit_string.c - ASN.1 DER, encode a BIT STRING, Tom St Denis -*/ - - -#ifdef LTC_DER - -#define SETBIT(v, n) (v=((unsigned char)(v) | (1U << (unsigned char)(n)))) -#define CLRBIT(v, n) (v=((unsigned char)(v) & ~(1U << (unsigned char)(n)))) - -/** - Store a BIT STRING - @param in The DER encoded BIT STRING - @param inlen The size of the DER BIT STRING - @param out [out] The array of bits stored (8 per char) - @param outlen [in/out] The number of bits stored - @return CRYPT_OK if successful -*/ -int der_decode_raw_bit_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long dlen, blen, x, y, unused; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* packet must be at least 3 bytes */ - if (inlen < 3) { - return CRYPT_INVALID_ARG; - } - - /* check for 0x03 */ - if ((in[0]&0x1F) != 0x03) { - return CRYPT_INVALID_PACKET; - } - - /* offset in the data */ - x = 1; - - /* get the length of the data */ - y = inlen - 1; - if ((err = der_decode_asn1_length(in + x, &y, &dlen)) != CRYPT_OK) { - return err; - } - x += y; - /* is the data len too long or too short? */ - if ((dlen == 0) || (dlen > (inlen - x))) { - return CRYPT_INVALID_PACKET; - } - - /* DER permits 0..7 unused bits, and any declared padding bits must be zero. */ - unused = in[x]; - if (unused > 7) { - return CRYPT_INVALID_PACKET; - } - if ((dlen == 1) && (unused != 0)) { - return CRYPT_INVALID_PACKET; - } - if ((unused != 0) && ((in[x + dlen - 1] & ((1uL << unused) - 1uL)) != 0)) { - return CRYPT_INVALID_PACKET; - } - x++; - blen = ((dlen - 1) << 3) - unused; - - /* too many bits? */ - if (blen > *outlen) { - *outlen = blen; - return CRYPT_BUFFER_OVERFLOW; - } - - /* decode/store the bits */ - for (y = 0; y < blen; y++) { - if (in[x] & (1 << (7 - (y & 7)))) { - SETBIT(out[y/8], 7-(y%8)); - } else { - CLRBIT(out[y/8], 7-(y%8)); - } - if ((y & 7) == 7) { - ++x; - } - } - - /* we done */ - *outlen = blen; - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/bit/der_encode_bit_string.c b/src/pk/asn1/der/bit/der_encode_bit_string.c deleted file mode 100644 index 0c2cd168..00000000 --- a/src/pk/asn1/der/bit/der_encode_bit_string.c +++ /dev/null @@ -1,72 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_bit_string.c - ASN.1 DER, encode a BIT STRING, Tom St Denis -*/ - - -#ifdef LTC_DER - -/** - Store a BIT STRING - @param in The array of bits to store (one per char) - @param inlen The number of bits tostore - @param out [out] The destination for the DER encoded BIT STRING - @param outlen [in/out] The max size and resulting size of the DER BIT STRING - @return CRYPT_OK if successful -*/ -int der_encode_bit_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long len, x, y; - unsigned char buf; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* avoid overflows */ - if ((err = der_length_bit_string(inlen, &len)) != CRYPT_OK) { - return err; - } - - if (len > *outlen) { - *outlen = len; - return CRYPT_BUFFER_OVERFLOW; - } - - /* store header (include bit padding count in length) */ - x = 0; - y = ((inlen + 7) >> 3) + 1; - - out[x++] = 0x03; - len = *outlen - x; - if ((err = der_encode_asn1_length(y, out + x, &len)) != CRYPT_OK) { - return err; - } - x += len; - - /* store number of zero padding bits */ - out[x++] = (unsigned char)((8 - inlen) & 7); - - /* store the bits in big endian format */ - for (y = buf = 0; y < inlen; y++) { - buf |= (in[y] ? 1 : 0) << (7 - (y & 7)); - if ((y & 7) == 7) { - out[x++] = buf; - buf = 0; - } - } - /* store last byte */ - if (inlen & 7) { - out[x++] = buf; - } - *outlen = x; - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/bit/der_encode_raw_bit_string.c b/src/pk/asn1/der/bit/der_encode_raw_bit_string.c deleted file mode 100644 index 9cc23aec..00000000 --- a/src/pk/asn1/der/bit/der_encode_raw_bit_string.c +++ /dev/null @@ -1,75 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_bit_string.c - ASN.1 DER, encode a BIT STRING, Tom St Denis -*/ - - -#ifdef LTC_DER - -#define getbit(n, k) (((n) & ( 1 << (k) )) >> (k)) - -/** - Store a BIT STRING - @param in The array of bits to store (8 per char) - @param inlen The number of bits to store - @param out [out] The destination for the DER encoded BIT STRING - @param outlen [in/out] The max size and resulting size of the DER BIT STRING - @return CRYPT_OK if successful -*/ -int der_encode_raw_bit_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long len, x, y; - unsigned char buf; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* avoid overflows */ - if ((err = der_length_bit_string(inlen, &len)) != CRYPT_OK) { - return err; - } - - if (len > *outlen) { - *outlen = len; - return CRYPT_BUFFER_OVERFLOW; - } - - /* store header (include bit padding count in length) */ - x = 0; - y = ((inlen + 7) >> 3) + 1; - - out[x++] = 0x03; - len = *outlen - x; - if ((err = der_encode_asn1_length(y, out + x, &len)) != CRYPT_OK) { - return err; - } - x += len; - - /* store number of zero padding bits */ - out[x++] = (unsigned char)((8 - inlen) & 7); - - /* store the bits in big endian format */ - for (y = buf = 0; y < inlen; y++) { - buf |= (getbit(in[y/8],7-y%8)?1:0) << (7 - (y & 7)); - if ((y & 7) == 7) { - out[x++] = buf; - buf = 0; - } - } - /* store last byte */ - if (inlen & 7) { - out[x++] = buf; - } - - *outlen = x; - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/bit/der_length_bit_string.c b/src/pk/asn1/der/bit/der_length_bit_string.c deleted file mode 100644 index 4554a801..00000000 --- a/src/pk/asn1/der/bit/der_length_bit_string.c +++ /dev/null @@ -1,36 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_bit_string.c - ASN.1 DER, get length of BIT STRING, Tom St Denis -*/ - -#ifdef LTC_DER -/** - Gets length of DER encoding of BIT STRING - @param nbits The number of bits in the string to encode - @param outlen [out] The length of the DER encoding for the given string - @return CRYPT_OK if successful -*/ -int der_length_bit_string(unsigned long nbits, unsigned long *outlen) -{ - unsigned long nbytes, x; - int err; - - LTC_ARGCHK(outlen != NULL); - - /* get the number of the bytes */ - nbytes = (nbits >> 3) + ((nbits & 7) ? 1 : 0) + 1; - - if ((err = der_length_asn1_length(nbytes, &x)) != CRYPT_OK) { - return err; - } - *outlen = 1 + x + nbytes; - - return CRYPT_OK; -} - -#endif - diff --git a/src/pk/asn1/der/boolean/der_decode_boolean.c b/src/pk/asn1/der/boolean/der_decode_boolean.c deleted file mode 100644 index 35ac7ece..00000000 --- a/src/pk/asn1/der/boolean/der_decode_boolean.c +++ /dev/null @@ -1,35 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_boolean.c - ASN.1 DER, decode a BOOLEAN, Tom St Denis -*/ - - -#ifdef LTC_DER - -/** - Read a BOOLEAN - @param in The destination for the DER encoded BOOLEAN - @param inlen The size of the DER BOOLEAN - @param out [out] The boolean to decode - @return CRYPT_OK if successful -*/ -int der_decode_boolean(const unsigned char *in, unsigned long inlen, - int *out) -{ - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - - if (inlen < 3 || in[0] != 0x01 || in[1] != 0x01 || (in[2] != 0x00 && in[2] != 0xFF)) { - return CRYPT_INVALID_ARG; - } - - *out = (in[2]==0xFF) ? 1 : 0; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/boolean/der_encode_boolean.c b/src/pk/asn1/der/boolean/der_encode_boolean.c deleted file mode 100644 index a77aefb7..00000000 --- a/src/pk/asn1/der/boolean/der_encode_boolean.c +++ /dev/null @@ -1,39 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_boolean.c - ASN.1 DER, encode a BOOLEAN, Tom St Denis -*/ - - -#ifdef LTC_DER - -/** - Store a BOOLEAN - @param in The boolean to encode - @param out [out] The destination for the DER encoded BOOLEAN - @param outlen [in/out] The max size and resulting size of the DER BOOLEAN - @return CRYPT_OK if successful -*/ -int der_encode_boolean(int in, - unsigned char *out, unsigned long *outlen) -{ - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(out != NULL); - - if (*outlen < 3) { - *outlen = 3; - return CRYPT_BUFFER_OVERFLOW; - } - - *outlen = 3; - out[0] = 0x01; - out[1] = 0x01; - out[2] = in ? 0xFF : 0x00; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/boolean/der_length_boolean.c b/src/pk/asn1/der/boolean/der_length_boolean.c deleted file mode 100644 index f1b9e576..00000000 --- a/src/pk/asn1/der/boolean/der_length_boolean.c +++ /dev/null @@ -1,23 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_boolean.c - ASN.1 DER, get length of a BOOLEAN, Tom St Denis -*/ - -#ifdef LTC_DER -/** - Gets length of DER encoding of a BOOLEAN - @param outlen [out] The length of the DER encoding - @return CRYPT_OK if successful -*/ -int der_length_boolean(unsigned long *outlen) -{ - LTC_ARGCHK(outlen != NULL); - *outlen = 3; - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/choice/der_decode_choice.c b/src/pk/asn1/der/choice/der_decode_choice.c deleted file mode 100644 index cf4422a5..00000000 --- a/src/pk/asn1/der/choice/der_decode_choice.c +++ /dev/null @@ -1,221 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_choice.c - ASN.1 DER, decode a CHOICE, Tom St Denis -*/ - -#ifdef LTC_DER - -/** - Decode a CHOICE - @param in The DER encoded input - @param inlen [in/out] The size of the input and resulting size of read type - @param list The list of items to decode - @param outlen The number of items in the list - @return CRYPT_OK on success -*/ -int der_decode_choice(const unsigned char *in, unsigned long *inlen, - ltc_asn1_list *list, unsigned long outlen) -{ - unsigned long size, x, z; - void *data; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen != NULL); - LTC_ARGCHK(list != NULL); - - /* get blk size */ - if (*inlen < 2) { - return CRYPT_INVALID_PACKET; - } - - /* set all of the "used" flags to zero */ - for (x = 0; x < outlen; x++) { - list[x].used = 0; - } - - /* now scan until we have a winner */ - for (x = 0; x < outlen; x++) { - size = list[x].size; - data = list[x].data; - - switch (list[x].type) { - case LTC_ASN1_BOOLEAN: - if (der_decode_boolean(in, *inlen, data) == CRYPT_OK) { - if (der_length_boolean(&z) == CRYPT_OK) { - list[x].used = 1; - *inlen = z; - return CRYPT_OK; - } - } - break; - - case LTC_ASN1_INTEGER: - if (der_decode_integer(in, *inlen, data) == CRYPT_OK) { - if (der_length_integer(data, &z) == CRYPT_OK) { - list[x].used = 1; - *inlen = z; - return CRYPT_OK; - } - } - break; - - case LTC_ASN1_SHORT_INTEGER: - if (der_decode_short_integer(in, *inlen, data) == CRYPT_OK) { - if (der_length_short_integer(*(unsigned long*)data, &z) == CRYPT_OK) { - list[x].used = 1; - *inlen = z; - return CRYPT_OK; - } - } - break; - - case LTC_ASN1_BIT_STRING: - if (der_decode_bit_string(in, *inlen, data, &size) == CRYPT_OK) { - if (der_length_bit_string(size, &z) == CRYPT_OK) { - list[x].used = 1; - list[x].size = size; - *inlen = z; - return CRYPT_OK; - } - } - break; - - case LTC_ASN1_RAW_BIT_STRING: - if (der_decode_raw_bit_string(in, *inlen, data, &size) == CRYPT_OK) { - if (der_length_bit_string(size, &z) == CRYPT_OK) { - list[x].used = 1; - list[x].size = size; - *inlen = z; - return CRYPT_OK; - } - } - break; - - case LTC_ASN1_OCTET_STRING: - if (der_decode_octet_string(in, *inlen, data, &size) == CRYPT_OK) { - if (der_length_octet_string(size, &z) == CRYPT_OK) { - list[x].used = 1; - list[x].size = size; - *inlen = z; - return CRYPT_OK; - } - } - break; - - case LTC_ASN1_NULL: - if (*inlen == 2 && in[x] == 0x05 && in[x+1] == 0x00) { - *inlen = 2; - list[x].used = 1; - return CRYPT_OK; - } - break; - - case LTC_ASN1_OBJECT_IDENTIFIER: - if (der_decode_object_identifier(in, *inlen, data, &size) == CRYPT_OK) { - if (der_length_object_identifier(data, size, &z) == CRYPT_OK) { - list[x].used = 1; - list[x].size = size; - *inlen = z; - return CRYPT_OK; - } - } - break; - - case LTC_ASN1_TELETEX_STRING: - if (der_decode_teletex_string(in, *inlen, data, &size) == CRYPT_OK) { - if (der_length_teletex_string(data, size, &z) == CRYPT_OK) { - list[x].used = 1; - list[x].size = size; - *inlen = z; - return CRYPT_OK; - } - } - break; - - case LTC_ASN1_IA5_STRING: - if (der_decode_ia5_string(in, *inlen, data, &size) == CRYPT_OK) { - if (der_length_ia5_string(data, size, &z) == CRYPT_OK) { - list[x].used = 1; - list[x].size = size; - *inlen = z; - return CRYPT_OK; - } - } - break; - - case LTC_ASN1_PRINTABLE_STRING: - if (der_decode_printable_string(in, *inlen, data, &size) == CRYPT_OK) { - if (der_length_printable_string(data, size, &z) == CRYPT_OK) { - list[x].used = 1; - list[x].size = size; - *inlen = z; - return CRYPT_OK; - } - } - break; - - case LTC_ASN1_UTF8_STRING: - if (der_decode_utf8_string(in, *inlen, data, &size) == CRYPT_OK) { - if (der_length_utf8_string(data, size, &z) == CRYPT_OK) { - list[x].used = 1; - list[x].size = size; - *inlen = z; - return CRYPT_OK; - } - } - break; - - case LTC_ASN1_UTCTIME: - z = *inlen; - if (der_decode_utctime(in, &z, data) == CRYPT_OK) { - list[x].used = 1; - *inlen = z; - return CRYPT_OK; - } - break; - - case LTC_ASN1_GENERALIZEDTIME: - z = *inlen; - if (der_decode_generalizedtime(in, &z, data) == CRYPT_OK) { - list[x].used = 1; - *inlen = z; - return CRYPT_OK; - } - break; - - case LTC_ASN1_SET: - case LTC_ASN1_SETOF: - case LTC_ASN1_SEQUENCE: - if (der_decode_sequence(in, *inlen, data, size) == CRYPT_OK) { - if (der_length_sequence(data, size, &z) == CRYPT_OK) { - list[x].used = 1; - *inlen = z; - return CRYPT_OK; - } - } - break; - - case LTC_ASN1_CUSTOM_TYPE: - if (der_decode_custom_type(in, *inlen, &list[x]) == CRYPT_OK) { - if (der_length_custom_type(&list[x], &z, NULL) == CRYPT_OK) { - list[x].used = 1; - *inlen = z; - return CRYPT_OK; - } - } - break; - - case LTC_ASN1_CHOICE: - case LTC_ASN1_EOL: - return CRYPT_INVALID_ARG; - } - } - - return CRYPT_INVALID_PACKET; -} - -#endif diff --git a/src/pk/asn1/der/custom_type/der_decode_custom_type.c b/src/pk/asn1/der/custom_type/der_decode_custom_type.c deleted file mode 100644 index 07f8f2d4..00000000 --- a/src/pk/asn1/der/custom_type/der_decode_custom_type.c +++ /dev/null @@ -1,433 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - - -/** - @file der_decode_custom_type.c - ASN.1 DER, decode a Custom type, Steffen Jaeckel -*/ - -#ifdef LTC_DER - -/** - Decode a Custom type - @param in The DER encoded input - @param inlen The size of the input - @param root The item that defines the custom type to decode - @return CRYPT_OK on success -*/ -int der_decode_custom_type(const unsigned char *in, unsigned long inlen, - ltc_asn1_list *root) -{ - LTC_ARGCHK(root != NULL); - return der_decode_custom_type_ex(in, inlen, root, NULL, 0, LTC_DER_SEQ_ORDERED | LTC_DER_SEQ_RELAXED); -} - -/** - Extended-decode a Custom type - - This function is used to decode custom types and sequences/sets - For custom types root is used - For sequences/sets list and outlen are used - - @param in The DER encoded input - @param inlen The size of the input - @param root The item that defines the custom type to decode - @param list The list of items to decode - @param outlen The number of items in the list - @param flags c.f. enum ltc_der_seq - @return CRYPT_OK on success -*/ -int der_decode_custom_type_ex(const unsigned char *in, unsigned long inlen, - ltc_asn1_list *root, - ltc_asn1_list *list, unsigned long outlen, - unsigned int flags) -{ - int err, seq_err, i, ordered; - ltc_asn1_type type; - ltc_asn1_list ident; - unsigned int f; - unsigned long size, x, y, z, blksize; - unsigned char* in_new = NULL; - void *data; - - LTC_ARGCHK(in != NULL); - - /* get blk size */ - if (inlen < 2) { - return CRYPT_INVALID_PACKET; - } - x = 0; - - if (root == NULL) { - LTC_ARGCHK(list != NULL); - - /* sequence type? We allow 0x30 SEQUENCE and 0x31 SET since fundamentally they're the same structure */ - f = flags & ~(LTC_DER_SEQ_ALL_STRICT); - if (((f == LTC_DER_SEQ_SEQUENCE) && (in[x] != 0x30)) || (((f == LTC_DER_SEQ_SET) && (in[x] != 0x31)))) { - return CRYPT_INVALID_PACKET; - } - ++x; - } else { - if (root->type != LTC_ASN1_CUSTOM_TYPE) { - return CRYPT_INVALID_PACKET; - } - - /* Alloc a copy of the data for primitive handling. */ - if (root->pc == LTC_ASN1_PC_PRIMITIVE) { - in_new = XMALLOC(inlen); - if (in_new == NULL) { - return CRYPT_MEM; - } - XMEMCPY(in_new, in, inlen); - in = in_new; - } - - y = inlen; - if ((err = der_decode_asn1_identifier(in, &y, &ident)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((ident.type != root->type) || - (ident.klass != root->klass) || - (ident.pc != root->pc) || - (ident.tag != root->tag)) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - x += y; - - list = root->data; - outlen = root->size; - } - - if (root != NULL && root->pc == LTC_ASN1_PC_PRIMITIVE) { - if (((unsigned long)root->used >= der_asn1_type_to_identifier_map_sz) || - (der_asn1_type_to_identifier_map[root->used] == -1)) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - - root->type = (ltc_asn1_type)root->used; - list = root; - outlen = 1; - - x -= 1; - in_new[x] = (unsigned char)der_asn1_type_to_identifier_map[list[0].type]; - blksize = inlen - x; - } else { - - y = inlen - x; - if ((err = der_decode_asn1_length_ex(&in[x], &y, &blksize, flags)) != CRYPT_OK) { - goto LBL_ERR; - } - x += y; - } - - /* would this blksize overflow? */ - if (blksize > (inlen - x)) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - - /* mark all as unused */ - for (i = 0; i < (int)outlen; i++) { - list[i].used = 0; - } - ordered = flags & LTC_DER_SEQ_ORDERED; - - /* ok read data */ - seq_err = CRYPT_OK; - blksize += x; - inlen -= x; - for (i = 0; i < (int)outlen; i++) { - z = 0; - type = list[i].type; - size = list[i].size; - data = list[i].data; - if (!ordered && list[i].used == 1) { continue; } - - if (type == LTC_ASN1_EOL) { - break; - } - - if (root != NULL && root->pc == LTC_ASN1_PC_PRIMITIVE && i != 0) { - err = CRYPT_PK_ASN1_ERROR; - goto LBL_ERR; - } - - switch (type) { - case LTC_ASN1_CUSTOM_TYPE: - case LTC_ASN1_SET: - case LTC_ASN1_SETOF: - case LTC_ASN1_SEQUENCE: - break; - default: - /* Verify that all basic types are indeed UNIVERSAL&PRIMITIVE */ - if (((flags & LTC_DER_SEQ_STRICT) == LTC_DER_SEQ_STRICT) && (inlen > 0)) { - if (in[x] & 0xE0u) { - err = CRYPT_PK_ASN1_ERROR; - goto LBL_ERR; - } - } - } - - switch (type) { - case LTC_ASN1_BOOLEAN: - z = inlen; - if ((err = der_decode_boolean(in + x, z, ((int *)data))) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - if ((err = der_length_boolean(&z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_INTEGER: - z = inlen; - if ((err = der_decode_integer(in + x, z, data)) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - if ((err = der_length_integer(data, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_SHORT_INTEGER: - z = inlen; - if ((err = der_decode_short_integer(in + x, z, data)) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - if ((err = der_length_short_integer(((unsigned long*)data)[0], &z)) != CRYPT_OK) { - goto LBL_ERR; - } - - break; - - case LTC_ASN1_BIT_STRING: - z = inlen; - if ((err = der_decode_bit_string(in + x, z, data, &size)) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - list[i].size = size; - if ((err = der_length_bit_string(size, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_RAW_BIT_STRING: - z = inlen; - if ((err = der_decode_raw_bit_string(in + x, z, data, &size)) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - list[i].size = size; - if ((err = der_length_bit_string(size, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_OCTET_STRING: - z = inlen; - if ((err = der_decode_octet_string(in + x, z, data, &size)) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - list[i].size = size; - if ((err = der_length_octet_string(size, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_NULL: - if (inlen < 2 || in[x] != 0x05 || in[x+1] != 0x00) { - if (!ordered || list[i].optional) { continue; } - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - z = 2; - break; - - case LTC_ASN1_OBJECT_IDENTIFIER: - z = inlen; - if ((err = der_decode_object_identifier(in + x, z, data, &size)) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - list[i].size = size; - if ((err = der_length_object_identifier(data, size, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_TELETEX_STRING: - z = inlen; - if ((err = der_decode_teletex_string(in + x, z, data, &size)) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - list[i].size = size; - if ((err = der_length_teletex_string(data, size, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_IA5_STRING: - z = inlen; - if ((err = der_decode_ia5_string(in + x, z, data, &size)) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - list[i].size = size; - if ((err = der_length_ia5_string(data, size, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_PRINTABLE_STRING: - z = inlen; - if ((err = der_decode_printable_string(in + x, z, data, &size)) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - list[i].size = size; - if ((err = der_length_printable_string(data, size, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_UTF8_STRING: - z = inlen; - if ((err = der_decode_utf8_string(in + x, z, data, &size)) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - list[i].size = size; - if ((err = der_length_utf8_string(data, size, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_UTCTIME: - z = inlen; - if ((err = der_decode_utctime(in + x, &z, data)) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - break; - - case LTC_ASN1_GENERALIZEDTIME: - z = inlen; - if ((err = der_decode_generalizedtime(in + x, &z, data)) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - break; - - case LTC_ASN1_SET: - z = inlen; - if ((err = der_decode_set(in + x, z, data, size)) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - if ((err = der_length_sequence(data, size, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_SETOF: - case LTC_ASN1_SEQUENCE: - /* detect if we have the right type, the inlen test keeps in[x] inside the packet */ - if ((inlen == 0) || (type == LTC_ASN1_SETOF && (in[x] & 0x3F) != 0x31) || (type == LTC_ASN1_SEQUENCE && (in[x] & 0x3F) != 0x30)) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - - z = inlen; - err = der_decode_sequence_ex(in + x, z, data, size, flags); - if (err == CRYPT_INPUT_TOO_LONG) { - seq_err = CRYPT_INPUT_TOO_LONG; - err = CRYPT_OK; - } - if (err != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - if ((err = der_length_sequence(data, size, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_CUSTOM_TYPE: - z = inlen; - err = der_decode_custom_type(in + x, z, &list[i]); - if (err == CRYPT_INPUT_TOO_LONG) { - seq_err = CRYPT_INPUT_TOO_LONG; - err = CRYPT_OK; - } - if (err != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - if ((err = der_length_custom_type(&list[i], &z, NULL)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_CHOICE: - z = inlen; - if ((err = der_decode_choice(in + x, &z, data, size)) != CRYPT_OK) { - if (!ordered || list[i].optional) { continue; } - goto LBL_ERR; - } - break; - - case LTC_ASN1_EOL: - err = CRYPT_INVALID_ARG; - goto LBL_ERR; - } - /* z is the canonical length of the decoded value, not always the octets consumed; without this test inlen wraps and the next element is read OOB */ - if (z > inlen) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - x += z; - inlen -= z; - list[i].used = 1; - if (!ordered) { - /* restart the decoder */ - i = -1; - } - } - - for (i = 0; i < (int)outlen; i++) { - if (list[i].used == 0 && list[i].optional == 0) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - } - - if (blksize == x && seq_err == CRYPT_OK && inlen == 0) { - /* everything decoded and no errors in nested sequences */ - err = CRYPT_OK; - } else if (blksize == x && seq_err == CRYPT_INPUT_TOO_LONG && inlen == 0) { - /* a sequence reported too-long input, but now we've decoded everything */ - err = CRYPT_OK; - } else if (blksize != x && ((flags & LTC_DER_SEQ_STRICT) == LTC_DER_SEQ_STRICT)) { - err = CRYPT_INVALID_PACKET; - } else { - err = CRYPT_INPUT_TOO_LONG; - } - -LBL_ERR: - if (in_new != NULL) { - XFREE(in_new); - } - return err; -} - -#endif diff --git a/src/pk/asn1/der/custom_type/der_encode_custom_type.c b/src/pk/asn1/der/custom_type/der_encode_custom_type.c deleted file mode 100644 index 586fb316..00000000 --- a/src/pk/asn1/der/custom_type/der_encode_custom_type.c +++ /dev/null @@ -1,228 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - - -/** - @file der_encode_custom_type.c - ASN.1 DER, encode a Custom Type, Steffen Jaeckel -*/ - -#ifdef LTC_DER - -/** - Encode a Custom Type - - This function is a bit special compared to the others, as it requires the - root-ltc_asn1_list where the type is defined. - - @param root The root of the list of items to encode - @param out [out] The destination - @param outlen [in/out] The size of the output - @return CRYPT_OK on success -*/ -int der_encode_custom_type(const ltc_asn1_list *root, - unsigned char *out, unsigned long *outlen) -{ - int err; - ltc_asn1_type type; - const ltc_asn1_list *list; - unsigned long size, x, y, z, i, inlen, id_len; - void *data; - - LTC_ARGCHK(root != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* get size of output that will be required */ - y = 0; z = 0; - if (der_length_custom_type(root, &y, &z) != CRYPT_OK) return CRYPT_INVALID_ARG; - - /* too big ? */ - if (*outlen < y) { - *outlen = y; - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; - } - - /* get length of the identifier, so we know the offset where to start writing */ - if (der_length_asn1_identifier(root, &id_len) != CRYPT_OK) return CRYPT_INVALID_ARG; - x = id_len; - - - if (root->pc == LTC_ASN1_PC_PRIMITIVE) { - list = root; - inlen = 1; - /* In case it's a PRIMITIVE type we encode directly to the output - * but leave space for a potentially longer identifier as it will - * simply be replaced afterwards. - */ - x -= 1; - } else { - list = root->data; - inlen = root->size; - /* store length, identifier will be added later */ - y = *outlen - x; - if ((err = der_encode_asn1_length(z, &out[x], &y)) != CRYPT_OK) { - goto LBL_ERR; - } - x += y; - } - - /* store data */ - *outlen -= x; - for (i = 0; i < inlen; i++) { - if (root->pc == LTC_ASN1_PC_PRIMITIVE) { - type = (ltc_asn1_type)list[i].used; - } else { - type = list[i].type; - } - size = list[i].size; - data = list[i].data; - - if (type == LTC_ASN1_EOL) { - break; - } - - switch (type) { - case LTC_ASN1_BOOLEAN: - z = *outlen; - if ((err = der_encode_boolean(*((int *)data), out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_INTEGER: - z = *outlen; - if ((err = der_encode_integer(data, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_SHORT_INTEGER: - z = *outlen; - if ((err = der_encode_short_integer(*((unsigned long*)data), out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_BIT_STRING: - z = *outlen; - if ((err = der_encode_bit_string(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_RAW_BIT_STRING: - z = *outlen; - if ((err = der_encode_raw_bit_string(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_OCTET_STRING: - z = *outlen; - if ((err = der_encode_octet_string(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_NULL: - out[x] = 0x05; - out[x+1] = 0x00; - z = 2; - break; - - case LTC_ASN1_OBJECT_IDENTIFIER: - z = *outlen; - if ((err = der_encode_object_identifier(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_IA5_STRING: - z = *outlen; - if ((err = der_encode_ia5_string(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_PRINTABLE_STRING: - z = *outlen; - if ((err = der_encode_printable_string(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_UTF8_STRING: - z = *outlen; - if ((err = der_encode_utf8_string(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_UTCTIME: - z = *outlen; - if ((err = der_encode_utctime(data, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_GENERALIZEDTIME: - z = *outlen; - if ((err = der_encode_generalizedtime(data, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_SET: - z = *outlen; - if ((err = der_encode_set(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_SETOF: - z = *outlen; - if ((err = der_encode_setof(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_SEQUENCE: - z = *outlen; - if ((err = der_encode_sequence_ex(data, size, out + x, &z, type)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_CUSTOM_TYPE: - z = *outlen; - if ((err = der_encode_custom_type(&list[i], out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_CHOICE: - case LTC_ASN1_EOL: - case LTC_ASN1_TELETEX_STRING: - err = CRYPT_INVALID_ARG; - goto LBL_ERR; - } - - - x += z; - *outlen -= z; - } - - if ((err = der_encode_asn1_identifier(root, out, &id_len)) != CRYPT_OK) { - goto LBL_ERR; - } - *outlen = x; - err = CRYPT_OK; - -LBL_ERR: - return err; -} - -#endif diff --git a/src/pk/asn1/der/custom_type/der_length_custom_type.c b/src/pk/asn1/der/custom_type/der_length_custom_type.c deleted file mode 100644 index 01e58ec8..00000000 --- a/src/pk/asn1/der/custom_type/der_length_custom_type.c +++ /dev/null @@ -1,203 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_custom_type.c - ASN.1 DER, length of a custom type, Steffen Jaeckel -*/ - -#ifdef LTC_DER - -/** - Get the length of a DER custom type - - This function is a bit special compared to the others, as it requires the - root-ltc_asn1_list where the type is defined. - - @param root The root of the struct to encode - @param outlen [out] The length required in octets to store it - @param payloadlen [out] The length of the payload in octets - @return CRYPT_OK on success -*/ -int der_length_custom_type(const ltc_asn1_list *root, unsigned long *outlen, unsigned long *payloadlen) -{ - int err; - const ltc_asn1_list *list; - ltc_asn1_type type; - unsigned long size, x, y, i, inlen, id_len; - void *data; - - LTC_ARGCHK(root != NULL); - LTC_ARGCHK(outlen != NULL); - - /* get size of output that will be required */ - if ((err = der_length_asn1_identifier(root, &id_len)) != CRYPT_OK) { - return err; - } - y = id_len; - - if (root->pc == LTC_ASN1_PC_PRIMITIVE) { - list = root; - inlen = 1; - } else { - list = root->data; - inlen = root->size; - } - for (i = 0; i < inlen; i++) { - if (root->pc == LTC_ASN1_PC_PRIMITIVE) { - type = (ltc_asn1_type)list[i].used; - } else { - type = list[i].type; - } - size = list[i].size; - data = list[i].data; - - if (type == LTC_ASN1_EOL) { - break; - } - - /* some items may be optional during import */ - if (!list[i].used && list[i].optional) continue; - - switch (type) { - case LTC_ASN1_BOOLEAN: - if ((err = der_length_boolean(&x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_INTEGER: - if ((err = der_length_integer(data, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_SHORT_INTEGER: - if ((err = der_length_short_integer(*((unsigned long *)data), &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_BIT_STRING: - case LTC_ASN1_RAW_BIT_STRING: - if ((err = der_length_bit_string(size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_OCTET_STRING: - if ((err = der_length_octet_string(size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_NULL: - y += 2; - break; - - case LTC_ASN1_OBJECT_IDENTIFIER: - if ((err = der_length_object_identifier(data, size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_IA5_STRING: - if ((err = der_length_ia5_string(data, size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_TELETEX_STRING: - if ((err = der_length_teletex_string(data, size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_PRINTABLE_STRING: - if ((err = der_length_printable_string(data, size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_UTCTIME: - if ((err = der_length_utctime(data, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_GENERALIZEDTIME: - if ((err = der_length_generalizedtime(data, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_UTF8_STRING: - if ((err = der_length_utf8_string(data, size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_CUSTOM_TYPE: - if ((err = der_length_custom_type(&list[i], &x, NULL)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_SET: - case LTC_ASN1_SETOF: - case LTC_ASN1_SEQUENCE: - if ((err = der_length_sequence(data, size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_CHOICE: - case LTC_ASN1_EOL: - err = CRYPT_INVALID_ARG; - goto LBL_ERR; - } - } - - if (root->pc == LTC_ASN1_PC_PRIMITIVE) { - /* In case it's a PRIMITIVE element we're going - * to only replace the identifier of the one element - * by the custom identifier. - */ - y -= 1; - if (payloadlen != NULL) { - *payloadlen = y - id_len; - } - } else { - /* calc length of length */ - if ((err = der_length_asn1_length(y - id_len, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - if (payloadlen != NULL) { - *payloadlen = y - id_len; - } - y += x; - } - - /* store size */ - *outlen = y; - -LBL_ERR: - return err; -} - -#endif diff --git a/src/pk/asn1/der/general/der_asn1_maps.c b/src/pk/asn1/der/general/der_asn1_maps.c deleted file mode 100644 index e98ab393..00000000 --- a/src/pk/asn1/der/general/der_asn1_maps.c +++ /dev/null @@ -1,157 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_asn1_maps.c - ASN.1 DER, a collection of maps to convert between different representations, Steffen Jaeckel -*/ - -#ifdef LTC_DER - -/** - A Map from ltc_asn1_type to the regularly used ASN.1 identifier -*/ -const int der_asn1_type_to_identifier_map[] = -{ - /* 0 */ - -1, /* LTC_ASN1_EOL, */ - 1, /* LTC_ASN1_BOOLEAN, */ - 2, /* LTC_ASN1_INTEGER, */ - 2, /* LTC_ASN1_SHORT_INTEGER, */ - 3, /* LTC_ASN1_BIT_STRING, */ - /* 5 */ - 4, /* LTC_ASN1_OCTET_STRING, */ - 5, /* LTC_ASN1_NULL, */ - 6, /* LTC_ASN1_OBJECT_IDENTIFIER, */ - 22, /* LTC_ASN1_IA5_STRING, */ - 19, /* LTC_ASN1_PRINTABLE_STRING, */ - /* 10 */ - 12, /* LTC_ASN1_UTF8_STRING, */ - 23, /* LTC_ASN1_UTCTIME, */ - -1, /* LTC_ASN1_CHOICE, */ - 48, /* LTC_ASN1_SEQUENCE, */ - 49, /* LTC_ASN1_SET, */ - /* 15 */ - 49, /* LTC_ASN1_SETOF, */ - 3, /* LTC_ASN1_RAW_BIT_STRING, */ - 20, /* LTC_ASN1_TELETEX_STRING, */ - 24, /* LTC_ASN1_GENERALIZEDTIME, */ - -1, /* LTC_ASN1_CUSTOM_TYPE, */ -}; -const unsigned long der_asn1_type_to_identifier_map_sz = LTC_ARRAY_SIZE(der_asn1_type_to_identifier_map); - -/** - A Map from the ASN.1 Class to its string -*/ -const char* der_asn1_class_to_string_map[] = -{ - "UNIVERSAL", - "APPLICATION", - "CONTEXT-SPECIFIC", - "PRIVATE", -}; -const unsigned long der_asn1_class_to_string_map_sz = LTC_ARRAY_SIZE(der_asn1_class_to_string_map); - -/** - A Map from the ASN.1 P/C-bit to its string -*/ -const char* der_asn1_pc_to_string_map[] = -{ - "PRIMITIVE", - "CONSTRUCTED", -}; -const unsigned long der_asn1_pc_to_string_map_sz = LTC_ARRAY_SIZE(der_asn1_pc_to_string_map); - -/** - A Map from the ASN.1 tag to its string -*/ -const char* der_asn1_tag_to_string_map[] = -{ - "Reserved for use by the encoding rules", - "Boolean type", - "Integer type", - "Bitstring type", - "Octetstring type", - "Null type", - "Object identifier type", - "Object descriptor type", - "External type and Instance-of type", - "Real type", - "Enumerated type", - "Embedded-pdv type", - "UTF8String type", - "Relative object identifier type", - "The time type", - "Reserved for future editions of this Recommendation | International Standard", - "Sequence and Sequence-of types", - "Set and Set-of types", - "NumericString type", - "PrintableString type", - "TeletexString (T61String) type", - "VideotexString type", - "IA5String type", - "UTCTime type", - "GeneralizedTime type", - "GraphicString type", - "VisibleString (ISO646String) type", - "GeneralString type", - "UniversalString type", - "UnrestrictedCharacterString type", - "BMPString type", - "Date type", - "TimeOfDay type", - "DateTime type", - "Duration type", - "OID internationalized resource identifier type", - "Relative OID internationalized resource identifier type", -}; -const unsigned long der_asn1_tag_to_string_map_sz = LTC_ARRAY_SIZE(der_asn1_tag_to_string_map); - -/** - A Map from ASN.1 Tags to ltc_asn1_type -*/ -const ltc_asn1_type der_asn1_tag_to_type_map[] = -{ - /* 0 */ - LTC_ASN1_EOL, /* Reserved for use by the encoding rules */ - LTC_ASN1_BOOLEAN, /* Boolean type */ - LTC_ASN1_INTEGER, /* Integer type */ - LTC_ASN1_BIT_STRING, /* Bitstring type */ - LTC_ASN1_OCTET_STRING, /* Octetstring type */ - /* 5 */ - LTC_ASN1_NULL, /* Null type */ - LTC_ASN1_OBJECT_IDENTIFIER, /* Object identifier type */ - LTC_ASN1_CUSTOM_TYPE, /* Object descriptor type */ - LTC_ASN1_CUSTOM_TYPE, /* External type and Instance-of type */ - LTC_ASN1_CUSTOM_TYPE, /* Real type */ - /* 10 */ - LTC_ASN1_CUSTOM_TYPE, /* Enumerated type */ - LTC_ASN1_CUSTOM_TYPE, /* Embedded-pdv type */ - LTC_ASN1_UTF8_STRING, /* UTF8String type */ - LTC_ASN1_CUSTOM_TYPE, /* Relative object identifier type */ - LTC_ASN1_CUSTOM_TYPE, /* The time type */ - /* 15 */ - LTC_ASN1_EOL, /* Reserved for future editions of this Recommendation | International Standard */ - LTC_ASN1_SEQUENCE, /* Sequence and Sequence-of types */ - LTC_ASN1_SET, /* Set and Set-of types */ - LTC_ASN1_CUSTOM_TYPE, /* NumericString types */ - LTC_ASN1_PRINTABLE_STRING, /* PrintableString types */ - /* 20 */ - LTC_ASN1_TELETEX_STRING, /* TeletexString (T61String) types */ - LTC_ASN1_CUSTOM_TYPE, /* VideotexString types */ - LTC_ASN1_IA5_STRING, /* IA5String types */ - LTC_ASN1_UTCTIME, /* UTCTime types */ - LTC_ASN1_GENERALIZEDTIME, /* GeneralizedTime types */ - /* 25 */ - LTC_ASN1_CUSTOM_TYPE, /* GraphicString types */ - LTC_ASN1_CUSTOM_TYPE, /* VisibleString (ISO646String) types */ - LTC_ASN1_CUSTOM_TYPE, /* GeneralString types */ - LTC_ASN1_CUSTOM_TYPE, /* UniversalString types */ - LTC_ASN1_CUSTOM_TYPE, /* UnrestrictedCharacterString types */ - /* 30 */ - LTC_ASN1_CUSTOM_TYPE, /* BMPString types */ -}; -const unsigned long der_asn1_tag_to_type_map_sz = LTC_ARRAY_SIZE(der_asn1_tag_to_type_map); - -#endif diff --git a/src/pk/asn1/der/general/der_decode_asn1_identifier.c b/src/pk/asn1/der/general/der_decode_asn1_identifier.c deleted file mode 100644 index 695bc4fd..00000000 --- a/src/pk/asn1/der/general/der_decode_asn1_identifier.c +++ /dev/null @@ -1,123 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_asn1_identifier.c - ASN.1 DER, decode the ASN.1 Identifier, Steffen Jaeckel -*/ - -#ifdef LTC_DER -/* c.f. X.680 & X.690, some decisions backed by X.690 ch. 10.2 */ -static const unsigned char tag_constructed_map[] = -{ - /* 0 */ - 255, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - /* 5 */ - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - /* 10 */ - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - /* 15 */ - 255, - LTC_ASN1_PC_CONSTRUCTED, - LTC_ASN1_PC_CONSTRUCTED, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - /* 20 */ - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - /* 25 */ - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, - LTC_ASN1_PC_PRIMITIVE, -}; - static const unsigned long tag_constructed_map_sz = LTC_ARRAY_SIZE(tag_constructed_map); - -/** - Decode the ASN.1 Identifier - @param id Where to store the decoded Identifier - @param in Where to read the Identifier from - @param inlen [in/out] The size of in available/read - @return CRYPT_OK if successful -*/ -int der_decode_asn1_identifier(const unsigned char *in, unsigned long *inlen, ltc_asn1_list *id) -{ - ulong64 tmp; - unsigned long tag_len; - int err; - - LTC_ARGCHK(id != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen != NULL); - - if (*inlen == 0) { - return CRYPT_BUFFER_OVERFLOW; - } - - tag_len = 1; - id->klass = (in[0] >> 6) & 0x3; - id->pc = (in[0] >> 5) & 0x1; - id->tag = in[0] & 0x1f; - - err = CRYPT_OK; - if (id->tag == 0x1f) { - id->tag = 0; - do { - if (*inlen <= tag_len) { - /* break the loop and trigger the BOF error-code */ - tmp = 0xff; - break; - } - id->tag <<= 7; - id->tag |= in[tag_len] & 0x7f; - tmp = in[tag_len] & 0x80; - tag_len++; - } while ((tmp != 0) && (tag_len < 10)); - - if (tmp != 0) { - err = CRYPT_BUFFER_OVERFLOW; - } else if (id->tag < 0x1f) { - err = CRYPT_PK_ASN1_ERROR; - } - } - - if (err != CRYPT_OK) { - id->pc = 0; - id->klass = 0; - id->tag = 0; - } else { - *inlen = tag_len; - if ((id->klass == LTC_ASN1_CL_UNIVERSAL) && - (id->tag < der_asn1_tag_to_type_map_sz) && - (id->tag < tag_constructed_map_sz) && - (id->pc == tag_constructed_map[id->tag])) { - id->type = der_asn1_tag_to_type_map[id->tag]; - } else { - if ((id->klass == LTC_ASN1_CL_UNIVERSAL) && (id->tag == 0)) { - id->type = LTC_ASN1_EOL; - } else { - id->type = LTC_ASN1_CUSTOM_TYPE; - } - } - } - - return err; -} - -#endif diff --git a/src/pk/asn1/der/general/der_decode_asn1_length.c b/src/pk/asn1/der/general/der_decode_asn1_length.c deleted file mode 100644 index c46e02d6..00000000 --- a/src/pk/asn1/der/general/der_decode_asn1_length.c +++ /dev/null @@ -1,66 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_asn1_length.c - ASN.1 DER, decode the ASN.1 Length field, Steffen Jaeckel -*/ - -#ifdef LTC_DER -/** - Decode the ASN.1 Length field - @param in Where to read the length field from - @param inlen [in/out] The size of in available/read - @param outlen [out] The decoded ASN.1 length - @return CRYPT_OK if successful -*/ -int der_decode_asn1_length_ex(const unsigned char *in, unsigned long *inlen, unsigned long *outlen, unsigned int flags) -{ - unsigned long real_len, decoded_len, offset, i; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen != NULL); - - if (*inlen < 1) { - return CRYPT_BUFFER_OVERFLOW; - } - - real_len = in[0]; - - if (real_len < 128) { - decoded_len = real_len; - offset = 1; - } else { - real_len &= 0x7F; - if (real_len == 0) { - return CRYPT_PK_ASN1_ERROR; - } - if (real_len > sizeof(decoded_len)) { - return CRYPT_OVERFLOW; - } - if (real_len > (*inlen - 1)) { - return CRYPT_BUFFER_OVERFLOW; - } - flags &= LTC_DER_SEQ_LEN_STRICT; - decoded_len = 0; - offset = 1 + real_len; - for (i = 0; i < real_len; i++) { - decoded_len = (decoded_len << 8) | in[1 + i]; - if ((flags == LTC_DER_SEQ_LEN_STRICT) && (decoded_len == 0)) { - return CRYPT_PK_ASN1_ERROR; - } - } - if ((flags == LTC_DER_SEQ_LEN_STRICT) && (real_len == 1) && (decoded_len < 128)) { - return CRYPT_PK_ASN1_ERROR; - } - } - - if (outlen != NULL) *outlen = decoded_len; - if (decoded_len > (*inlen - offset)) return CRYPT_OVERFLOW; - *inlen = offset; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/general/der_encode_asn1_identifier.c b/src/pk/asn1/der/general/der_encode_asn1_identifier.c deleted file mode 100644 index 51d57ec1..00000000 --- a/src/pk/asn1/der/general/der_encode_asn1_identifier.c +++ /dev/null @@ -1,86 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_asn1_identifier.c - ASN.1 DER, encode the ASN.1 Identifier, Steffen Jaeckel -*/ - -#ifdef LTC_DER -/** - Encode the ASN.1 Identifier - @param id The ASN.1 Identifer to encode - @param out Where to write the identifier to - @param outlen [in/out] The size of out available/written - @return CRYPT_OK if successful -*/ -int der_encode_asn1_identifier(const ltc_asn1_list *id, unsigned char *out, unsigned long *outlen) -{ - ulong64 tmp; - unsigned long tag_len; - - LTC_ARGCHK(id != NULL); - LTC_ARGCHK(outlen != NULL); - - if (id->type != LTC_ASN1_CUSTOM_TYPE) { - if ((unsigned)id->type >= der_asn1_type_to_identifier_map_sz) { - return CRYPT_INVALID_ARG; - } - if (der_asn1_type_to_identifier_map[id->type] == -1) { - return CRYPT_INVALID_ARG; - } - if (out != NULL) { - *out = der_asn1_type_to_identifier_map[id->type]; - } - *outlen = 1; - return CRYPT_OK; - } - if (id->klass < LTC_ASN1_CL_UNIVERSAL || id->klass > LTC_ASN1_CL_PRIVATE) { - return CRYPT_INVALID_ARG; - } - if (id->pc < LTC_ASN1_PC_PRIMITIVE || id->pc > LTC_ASN1_PC_CONSTRUCTED) { - return CRYPT_INVALID_ARG; - } - if (id->tag > (ULONG_MAX >> (8 + 7))) { - return CRYPT_INVALID_ARG; - } - - if (out != NULL) { - if (*outlen < 1) { - return CRYPT_BUFFER_OVERFLOW; - } - - out[0] = id->klass << 6 | id->pc << 5; - } - - if (id->tag < 0x1f) { - if (out != NULL) { - out[0] |= id->tag & 0x1f; - } - *outlen = 1; - } else { - tag_len = 0; - tmp = id->tag; - do { - tag_len++; - tmp >>= 7; - } while (tmp); - - if (out != NULL) { - if (*outlen < tag_len + 1) { - return CRYPT_BUFFER_OVERFLOW; - } - out[0] |= 0x1f; - for (tmp = 1; tmp <= tag_len; ++tmp) { - out[tmp] = ((id->tag >> (7 * (tag_len - tmp))) & 0x7f) | 0x80; - } - out[tag_len] &= ~0x80; - } - *outlen = tag_len + 1; - } - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/general/der_encode_asn1_length.c b/src/pk/asn1/der/general/der_encode_asn1_length.c deleted file mode 100644 index e5bf77d6..00000000 --- a/src/pk/asn1/der/general/der_encode_asn1_length.c +++ /dev/null @@ -1,117 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_asn1_length.c - ASN.1 DER, encode the ASN.1 length field, Steffen Jaeckel -*/ - -#ifdef LTC_DER -/** - Encode the ASN.1 length field - @param len The length to encode - @param out Where to write the length field to - @param outlen [in/out] The size of out available/written - @return CRYPT_OK if successful -*/ -int der_encode_asn1_length(unsigned long len, unsigned char *out, unsigned long *outlen) -{ - unsigned long x, y; - - LTC_ARGCHK(outlen != NULL); - - x = len; - y = 0; - - while(x != 0) { - y++; - x >>= 8; - } - if (y == 0) { - y = 1; /* len == 0 is valid: short form, single byte 0x00 */ - } - - if (out == NULL) { - if (len < 128) { - x = y; - } else { - x = y + 1; - } - } else { - if (*outlen < y) { - return CRYPT_BUFFER_OVERFLOW; - } - x = 0; - if (len < 128) { - out[x++] = (unsigned char)len; - } else if (len <= 0xffUL) { - out[x++] = 0x81; - out[x++] = (unsigned char)len; - } else if (len <= 0xffffUL) { - out[x++] = 0x82; - out[x++] = (unsigned char)((len>>8UL)&255); - out[x++] = (unsigned char)(len&255); - } else if (len <= 0xffffffUL) { - out[x++] = 0x83; - out[x++] = (unsigned char)((len>>16UL)&255); - out[x++] = (unsigned char)((len>>8UL)&255); - out[x++] = (unsigned char)(len&255); - #if ULONG_MAX != ULLONG_MAX - } else { - out[x++] = 0x84; - out[x++] = (unsigned char)((len>>24UL)&255); - out[x++] = (unsigned char)((len>>16UL)&255); - out[x++] = (unsigned char)((len>>8UL)&255); - out[x++] = (unsigned char)(len&255); - } - #else - } else if (len <= 0xffffffffUL) { - out[x++] = 0x84; - out[x++] = (unsigned char)((len>>24UL)&255); - out[x++] = (unsigned char)((len>>16UL)&255); - out[x++] = (unsigned char)((len>>8UL)&255); - out[x++] = (unsigned char)(len&255); - } else if (len <= 0xffffffffffULL) { - out[x++] = 0x85; - out[x++] = (unsigned char)((len>>32ULL)&255); - out[x++] = (unsigned char)((len>>24ULL)&255); - out[x++] = (unsigned char)((len>>16ULL)&255); - out[x++] = (unsigned char)((len>>8ULL)&255); - out[x++] = (unsigned char)(len&255); - } else if (len <= 0xffffffffffffULL) { - out[x++] = 0x86; - out[x++] = (unsigned char)((len>>40ULL)&255); - out[x++] = (unsigned char)((len>>32ULL)&255); - out[x++] = (unsigned char)((len>>24ULL)&255); - out[x++] = (unsigned char)((len>>16ULL)&255); - out[x++] = (unsigned char)((len>>8ULL)&255); - out[x++] = (unsigned char)(len&255); - } else if (len <= 0xffffffffffffffULL) { - out[x++] = 0x87; - out[x++] = (unsigned char)((len>>48ULL)&255); - out[x++] = (unsigned char)((len>>40ULL)&255); - out[x++] = (unsigned char)((len>>32ULL)&255); - out[x++] = (unsigned char)((len>>24ULL)&255); - out[x++] = (unsigned char)((len>>16ULL)&255); - out[x++] = (unsigned char)((len>>8ULL)&255); - out[x++] = (unsigned char)(len&255); - } else { - out[x++] = 0x88; - out[x++] = (unsigned char)((len>>56ULL)&255); - out[x++] = (unsigned char)((len>>48ULL)&255); - out[x++] = (unsigned char)((len>>40ULL)&255); - out[x++] = (unsigned char)((len>>32ULL)&255); - out[x++] = (unsigned char)((len>>24ULL)&255); - out[x++] = (unsigned char)((len>>16ULL)&255); - out[x++] = (unsigned char)((len>>8ULL)&255); - out[x++] = (unsigned char)(len&255); - } - #endif - } - *outlen = x; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/general/der_length_asn1_identifier.c b/src/pk/asn1/der/general/der_length_asn1_identifier.c deleted file mode 100644 index 63e6bdd2..00000000 --- a/src/pk/asn1/der/general/der_length_asn1_identifier.c +++ /dev/null @@ -1,23 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_asn1_identifier.c - ASN.1 DER, determine the length when encoding the ASN.1 Identifier, Steffen Jaeckel -*/ - -#ifdef LTC_DER -/** - Determine the length required when encoding the ASN.1 Identifier - @param id The ASN.1 identifier to encode - @param idlen [out] The required length to encode list - @return CRYPT_OK if successful -*/ - -int der_length_asn1_identifier(const ltc_asn1_list *id, unsigned long *idlen) -{ - return der_encode_asn1_identifier(id, NULL, idlen); -} - -#endif diff --git a/src/pk/asn1/der/general/der_length_asn1_length.c b/src/pk/asn1/der/general/der_length_asn1_length.c deleted file mode 100644 index 1c81adb6..00000000 --- a/src/pk/asn1/der/general/der_length_asn1_length.c +++ /dev/null @@ -1,22 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_asn1_length.c - ASN.1 DER, determine the length of the ASN.1 length field, Steffen Jaeckel -*/ - -#ifdef LTC_DER -/** - Determine the length required to encode len in the ASN.1 length field - @param len The length to encode - @param outlen [out] The length that's required to store len - @return CRYPT_OK if successful -*/ -int der_length_asn1_length(unsigned long len, unsigned long *outlen) -{ - return der_encode_asn1_length(len, NULL, outlen); -} - -#endif diff --git a/src/pk/asn1/der/generalizedtime/der_decode_generalizedtime.c b/src/pk/asn1/der/generalizedtime/der_decode_generalizedtime.c deleted file mode 100644 index ef9d888c..00000000 --- a/src/pk/asn1/der/generalizedtime/der_decode_generalizedtime.c +++ /dev/null @@ -1,149 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_generalizedtime.c - ASN.1 DER, decode a GeneralizedTime, Steffen Jaeckel - Based on der_decode_utctime.c -*/ - -#ifdef LTC_DER - -#ifndef LTC_DER_CHAR_TO_INT -#define LTC_DER_CHAR_TO_INT -static LTC_INLINE int s_char_to_int(unsigned char x) -{ - switch (x) { - case '0': return 0; - case '1': return 1; - case '2': return 2; - case '3': return 3; - case '4': return 4; - case '5': return 5; - case '6': return 6; - case '7': return 7; - case '8': return 8; - case '9': return 9; - default: return 100; - } -} -#endif - -#define DECODE_V(y, max) do {\ - if (x + 2 > declen) return CRYPT_INVALID_PACKET; \ - y = s_char_to_int(buf[x])*10 + s_char_to_int(buf[x+1]); \ - if (y >= max) return CRYPT_INVALID_PACKET; \ - x += 2; \ -} while(0) - -#define DECODE_V4(y, max) do {\ - if (x + 4 > declen) return CRYPT_INVALID_PACKET; \ - y = s_char_to_int(buf[x])*1000 + s_char_to_int(buf[x+1])*100 + s_char_to_int(buf[x+2])*10 + s_char_to_int(buf[x+3]); \ - if (y >= max) return CRYPT_INVALID_PACKET; \ - x += 4; \ -} while(0) - -/** - Decodes a Generalized time structure in DER format (reads all 6 valid encoding formats) - @param in Input buffer - @param inlen Length of input buffer in octets - @param out [out] Destination of Generalized time structure - @return CRYPT_OK if successful -*/ -int der_decode_generalizedtime(const unsigned char *in, unsigned long *inlen, - ltc_generalizedtime *out) -{ - unsigned char buf[32] = { 0 }; /* initialize as all zeroes */ - unsigned long x, declen; - int y; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen != NULL); - LTC_ARGCHK(out != NULL); - - /* check header */ - if (*inlen < 2UL || (in[1] >= sizeof(buf)) || ((in[1] + 2UL) > *inlen)) { - return CRYPT_INVALID_PACKET; - } - - /* decode the string */ - for (x = 0; x < in[1]; x++) { - y = der_ia5_value_decode(in[x+2]); - if (y == -1) { - return CRYPT_INVALID_PACKET; - } - if (!((y >= '0' && y <= '9') - || y == 'Z' || y == '.' - || y == '+' || y == '-')) { - return CRYPT_INVALID_PACKET; - } - buf[x] = y; - } - declen = x; /* octets decoded into buf - the parsing below must not read past them */ - *inlen = 2 + x; - - if (declen < 15) { - return CRYPT_INVALID_PACKET; - } - - /* possible encodings are -YYYYMMDDhhmmssZ -YYYYMMDDhhmmss+hh'mm' -YYYYMMDDhhmmss-hh'mm' -YYYYMMDDhhmmss.fsZ -YYYYMMDDhhmmss.fs+hh'mm' -YYYYMMDDhhmmss.fs-hh'mm' - - So let's do a trivial decode upto [including] ss - */ - - x = 0; - DECODE_V4(out->YYYY, 10000); - DECODE_V(out->MM, 13); - DECODE_V(out->DD, 32); - DECODE_V(out->hh, 24); - DECODE_V(out->mm, 60); - DECODE_V(out->ss, 60); - - /* clear fractional seconds info */ - out->fs = 0; - - /* now is it Z or . */ - if (x >= declen) { - return CRYPT_INVALID_PACKET; - } - if (buf[x] == 'Z') { - return CRYPT_OK; - } - if (buf[x] == '.') { - x++; - while (x < declen && buf[x] >= '0' && buf[x] <= '9') { - unsigned fs = out->fs; - out->fs *= 10; - out->fs += s_char_to_int(buf[x]); - if (fs > out->fs) return CRYPT_OVERFLOW; - x++; - } - } - - /* now is it Z, +, - */ - if (x >= declen) { - return CRYPT_INVALID_PACKET; - } - if (buf[x] == 'Z') { - return CRYPT_OK; - } - if (buf[x] == '+' || buf[x] == '-') { - out->off_dir = (buf[x++] == '+') ? 0 : 1; - DECODE_V(out->off_hh, 24); - DECODE_V(out->off_mm, 60); - return CRYPT_OK; - } - return CRYPT_INVALID_PACKET; -} - -#undef DECODE_V -#undef DECODE_V4 - -#endif diff --git a/src/pk/asn1/der/generalizedtime/der_encode_generalizedtime.c b/src/pk/asn1/der/generalizedtime/der_encode_generalizedtime.c deleted file mode 100644 index ec17a68c..00000000 --- a/src/pk/asn1/der/generalizedtime/der_encode_generalizedtime.c +++ /dev/null @@ -1,100 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_utctime.c - ASN.1 DER, encode a GeneralizedTime, Steffen Jaeckel - Based on der_encode_utctime.c -*/ - -#ifdef LTC_DER - -#define STORE_V(y) do {\ - out[x++] = der_ia5_char_encode(baseten[(y/10) % 10]); \ - out[x++] = der_ia5_char_encode(baseten[y % 10]); \ -} while(0) - -#define STORE_V4(y) do {\ - out[x++] = der_ia5_char_encode(baseten[(y/1000) % 10]); \ - out[x++] = der_ia5_char_encode(baseten[(y/100) % 10]); \ - out[x++] = der_ia5_char_encode(baseten[(y/10) % 10]); \ - out[x++] = der_ia5_char_encode(baseten[y % 10]); \ -} while(0) - -/** - Encodes a Generalized time structure in DER format - @param gtime The GeneralizedTime structure to encode - @param out The destination of the DER encoding of the GeneralizedTime structure - @param outlen [in/out] The length of the DER encoding - @return CRYPT_OK if successful -*/ -int der_encode_generalizedtime(const ltc_generalizedtime *gtime, - unsigned char *out, unsigned long *outlen) -{ - const char * const baseten = "0123456789"; - unsigned long x, tmplen; - int err; - - LTC_ARGCHK(gtime != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((err = der_length_generalizedtime(gtime, &tmplen)) != CRYPT_OK) { - return err; - } - if (tmplen > *outlen) { - *outlen = tmplen; - return CRYPT_BUFFER_OVERFLOW; - } - - /* store header */ - out[0] = 0x18; - - /* store values */ - x = 2; - STORE_V4(gtime->YYYY); - STORE_V(gtime->MM); - STORE_V(gtime->DD); - STORE_V(gtime->hh); - STORE_V(gtime->mm); - STORE_V(gtime->ss); - - if (gtime->fs) { - unsigned long divisor; - unsigned fs = gtime->fs; - unsigned len = 0; - out[x++] = der_ia5_char_encode('.'); - divisor = 1; - do { - fs /= 10; - divisor *= 10; - len++; - } while(fs != 0); - while (len-- > 1) { - divisor /= 10; - out[x++] = der_ia5_char_encode(baseten[(gtime->fs/divisor) % 10]); - } - out[x++] = der_ia5_char_encode(baseten[gtime->fs % 10]); - } - - if (gtime->off_mm || gtime->off_hh) { - out[x++] = der_ia5_char_encode(gtime->off_dir ? '-' : '+'); - STORE_V(gtime->off_hh); - STORE_V(gtime->off_mm); - } else { - out[x++] = der_ia5_char_encode('Z'); - } - - /* store length */ - out[1] = (unsigned char)(x - 2); - - /* all good let's return */ - *outlen = x; - return CRYPT_OK; -} - -#undef STORE_V -#undef STORE_V4 - -#endif diff --git a/src/pk/asn1/der/generalizedtime/der_length_generalizedtime.c b/src/pk/asn1/der/generalizedtime/der_length_generalizedtime.c deleted file mode 100644 index dc237d30..00000000 --- a/src/pk/asn1/der/generalizedtime/der_length_generalizedtime.c +++ /dev/null @@ -1,48 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_utctime.c - ASN.1 DER, get length of GeneralizedTime, Steffen Jaeckel - Based on der_length_utctime.c -*/ - -#ifdef LTC_DER - -/** - Gets length of DER encoding of GeneralizedTime - @param gtime The GeneralizedTime structure to get the size of - @param outlen [out] The length of the DER encoding - @return CRYPT_OK if successful -*/ -int der_length_generalizedtime(const ltc_generalizedtime *gtime, unsigned long *outlen) -{ - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(gtime != NULL); - - if (gtime->fs == 0) { - /* we encode as YYYYMMDDhhmmssZ */ - *outlen = 2 + 14 + 1; - } else { - unsigned long len = 2 + 14 + 1; - unsigned fs = gtime->fs; - do { - fs /= 10; - len++; - } while(fs != 0); - if (gtime->off_hh == 0 && gtime->off_mm == 0) { - /* we encode as YYYYMMDDhhmmss.fsZ */ - len += 1; - } - else { - /* we encode as YYYYMMDDhhmmss.fs{+|-}hh'mm' */ - len += 5; - } - *outlen = len; - } - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/ia5/der_decode_ia5_string.c b/src/pk/asn1/der/ia5/der_decode_ia5_string.c deleted file mode 100644 index 8fd80cf1..00000000 --- a/src/pk/asn1/der/ia5/der_decode_ia5_string.c +++ /dev/null @@ -1,73 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_ia5_string.c - ASN.1 DER, encode a IA5 STRING, Tom St Denis -*/ - - -#ifdef LTC_DER - -/** - Store a IA5 STRING - @param in The DER encoded IA5 STRING - @param inlen The size of the DER IA5 STRING - @param out [out] The array of octets stored (one per char) - @param outlen [in/out] The number of octets stored - @return CRYPT_OK if successful -*/ -int der_decode_ia5_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long x, y, len; - int t, err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* must have header at least */ - if (inlen < 2) { - return CRYPT_INVALID_PACKET; - } - - /* check for 0x16 */ - if ((in[0] & 0x1F) != 0x16) { - return CRYPT_INVALID_PACKET; - } - x = 1; - - /* get the length of the data */ - y = inlen - x; - if ((err = der_decode_asn1_length(in + x, &y, &len)) != CRYPT_OK) { - return err; - } - x += y; - - /* is it too long? */ - if (len > *outlen) { - *outlen = len; - return CRYPT_BUFFER_OVERFLOW; - } - - if (len > (inlen - x)) { - return CRYPT_INVALID_PACKET; - } - - /* read the data */ - for (y = 0; y < len; y++) { - t = der_ia5_value_decode(in[x++]); - if (t == -1) { - return CRYPT_INVALID_ARG; - } - out[y] = t; - } - - *outlen = y; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/ia5/der_encode_ia5_string.c b/src/pk/asn1/der/ia5/der_encode_ia5_string.c deleted file mode 100644 index 8b8bd36b..00000000 --- a/src/pk/asn1/der/ia5/der_encode_ia5_string.c +++ /dev/null @@ -1,61 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_ia5_string.c - ASN.1 DER, encode a IA5 STRING, Tom St Denis -*/ - -#ifdef LTC_DER - -/** - Store an IA5 STRING - @param in The array of IA5 to store (one per char) - @param inlen The number of IA5 to store - @param out [out] The destination for the DER encoded IA5 STRING - @param outlen [in/out] The max size and resulting size of the DER IA5 STRING - @return CRYPT_OK if successful -*/ -int der_encode_ia5_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long x, y, len; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* get the size */ - if ((err = der_length_ia5_string(in, inlen, &len)) != CRYPT_OK) { - return err; - } - - /* too big? */ - if (len > *outlen) { - *outlen = len; - return CRYPT_BUFFER_OVERFLOW; - } - - /* encode the header+len */ - x = 0; - out[x++] = 0x16; - len = *outlen - x; - if ((err = der_encode_asn1_length(inlen, out + x, &len)) != CRYPT_OK) { - return err; - } - x += len; - - /* store octets */ - for (y = 0; y < inlen; y++) { - out[x++] = der_ia5_char_encode(in[y]); - } - - /* retun length */ - *outlen = x; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/ia5/der_length_ia5_string.c b/src/pk/asn1/der/ia5/der_length_ia5_string.c deleted file mode 100644 index 4bce85ef..00000000 --- a/src/pk/asn1/der/ia5/der_length_ia5_string.c +++ /dev/null @@ -1,172 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_ia5_string.c - ASN.1 DER, get length of IA5 STRING, Tom St Denis -*/ - -#ifdef LTC_DER - -static const struct { - int code, value; -} ia5_table[] = { -{ '\0', 0 }, -{ '\a', 7 }, -{ '\b', 8 }, -{ '\t', 9 }, -{ '\n', 10 }, -{ '\f', 12 }, -{ '\r', 13 }, -{ ' ', 32 }, -{ '!', 33 }, -{ '"', 34 }, -{ '#', 35 }, -{ '$', 36 }, -{ '%', 37 }, -{ '&', 38 }, -{ '\'', 39 }, -{ '(', 40 }, -{ ')', 41 }, -{ '*', 42 }, -{ '+', 43 }, -{ ',', 44 }, -{ '-', 45 }, -{ '.', 46 }, -{ '/', 47 }, -{ '0', 48 }, -{ '1', 49 }, -{ '2', 50 }, -{ '3', 51 }, -{ '4', 52 }, -{ '5', 53 }, -{ '6', 54 }, -{ '7', 55 }, -{ '8', 56 }, -{ '9', 57 }, -{ ':', 58 }, -{ ';', 59 }, -{ '<', 60 }, -{ '=', 61 }, -{ '>', 62 }, -{ '?', 63 }, -{ '@', 64 }, -{ 'A', 65 }, -{ 'B', 66 }, -{ 'C', 67 }, -{ 'D', 68 }, -{ 'E', 69 }, -{ 'F', 70 }, -{ 'G', 71 }, -{ 'H', 72 }, -{ 'I', 73 }, -{ 'J', 74 }, -{ 'K', 75 }, -{ 'L', 76 }, -{ 'M', 77 }, -{ 'N', 78 }, -{ 'O', 79 }, -{ 'P', 80 }, -{ 'Q', 81 }, -{ 'R', 82 }, -{ 'S', 83 }, -{ 'T', 84 }, -{ 'U', 85 }, -{ 'V', 86 }, -{ 'W', 87 }, -{ 'X', 88 }, -{ 'Y', 89 }, -{ 'Z', 90 }, -{ '[', 91 }, -{ '\\', 92 }, -{ ']', 93 }, -{ '^', 94 }, -{ '_', 95 }, -{ '`', 96 }, -{ 'a', 97 }, -{ 'b', 98 }, -{ 'c', 99 }, -{ 'd', 100 }, -{ 'e', 101 }, -{ 'f', 102 }, -{ 'g', 103 }, -{ 'h', 104 }, -{ 'i', 105 }, -{ 'j', 106 }, -{ 'k', 107 }, -{ 'l', 108 }, -{ 'm', 109 }, -{ 'n', 110 }, -{ 'o', 111 }, -{ 'p', 112 }, -{ 'q', 113 }, -{ 'r', 114 }, -{ 's', 115 }, -{ 't', 116 }, -{ 'u', 117 }, -{ 'v', 118 }, -{ 'w', 119 }, -{ 'x', 120 }, -{ 'y', 121 }, -{ 'z', 122 }, -{ '{', 123 }, -{ '|', 124 }, -{ '}', 125 }, -{ '~', 126 } -}; - -int der_ia5_char_encode(int c) -{ - int x; - for (x = 0; x < (int)LTC_ARRAY_SIZE(ia5_table); x++) { - if (ia5_table[x].code == c) { - return ia5_table[x].value; - } - } - return -1; -} - -int der_ia5_value_decode(int v) -{ - int x; - for (x = 0; x < (int)LTC_ARRAY_SIZE(ia5_table); x++) { - if (ia5_table[x].value == v) { - return ia5_table[x].code; - } - } - return -1; -} - -/** - Gets length of DER encoding of IA5 STRING - @param octets The values you want to encode - @param noctets The number of octets in the string to encode - @param outlen [out] The length of the DER encoding for the given string - @return CRYPT_OK if successful -*/ -int der_length_ia5_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen) -{ - unsigned long x; - int err; - - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(octets != NULL); - - /* scan string for validity */ - for (x = 0; x < noctets; x++) { - if (der_ia5_char_encode(octets[x]) == -1) { - return CRYPT_INVALID_ARG; - } - } - - if ((err = der_length_asn1_length(noctets, &x)) != CRYPT_OK) { - return err; - } - *outlen = 1 + x + noctets; - - return CRYPT_OK; -} - -#endif - diff --git a/src/pk/asn1/der/integer/der_decode_integer.c b/src/pk/asn1/der/integer/der_decode_integer.c deleted file mode 100644 index 79ff2801..00000000 --- a/src/pk/asn1/der/integer/der_decode_integer.c +++ /dev/null @@ -1,78 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_integer.c - ASN.1 DER, decode an integer, Tom St Denis -*/ - - -#ifdef LTC_DER - -/** - Read a mp_int integer - @param in The DER encoded data - @param inlen Size of DER encoded data - @param num The first mp_int to decode - @return CRYPT_OK if successful -*/ -int der_decode_integer(const unsigned char *in, unsigned long inlen, void *num) -{ - unsigned long x, y; - int err; - - LTC_ARGCHK(num != NULL); - LTC_ARGCHK(in != NULL); - - /* DER INTEGER decodes into an MPI, so fail cleanly when no math provider is active. */ - if (ltc_mp.name == NULL) { - return CRYPT_INVALID_ARG; - } - - /* min DER INTEGER is 0x02 01 00 == 0 */ - if (inlen < (1 + 1 + 1)) { - return CRYPT_INVALID_PACKET; - } - - /* ok expect 0x02 when we AND with 0001 1111 [1F] */ - x = 0; - if ((in[x++] & 0x1F) != 0x02) { - return CRYPT_INVALID_PACKET; - } - - /* get the length of the data */ - inlen -= x; - if ((err = der_decode_asn1_length(in + x, &inlen, &y)) != CRYPT_OK) { - return err; - } - x += inlen; - - /* an INTEGER holds at least one content octet, so in[x] below stays inside the packet */ - if (y == 0) { - return CRYPT_INVALID_PACKET; - } - - if ((err = ltc_mp_read_unsigned_bin(num, (unsigned char *)in + x, y)) != CRYPT_OK) { - return err; - } - - /* see if it's negative */ - if (in[x] & 0x80) { - void *tmp; - if (ltc_mp_init(&tmp) != CRYPT_OK) { - return CRYPT_MEM; - } - - if (ltc_mp_2expt(tmp, ltc_mp_count_bits(num)) != CRYPT_OK || ltc_mp_sub(num, tmp, num) != CRYPT_OK) { - ltc_mp_clear(tmp); - return CRYPT_MEM; - } - ltc_mp_clear(tmp); - } - - return CRYPT_OK; - -} - -#endif diff --git a/src/pk/asn1/der/integer/der_encode_integer.c b/src/pk/asn1/der/integer/der_encode_integer.c deleted file mode 100644 index 23e2106a..00000000 --- a/src/pk/asn1/der/integer/der_encode_integer.c +++ /dev/null @@ -1,105 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_integer.c - ASN.1 DER, encode an integer, Tom St Denis -*/ - - -#ifdef LTC_DER - -/* Exports a positive bignum as DER format (upto 2^32 bytes in size) */ -/** - Store a mp_int integer - @param num The first mp_int to encode - @param out [out] The destination for the DER encoded integers - @param outlen [in/out] The max size and resulting size of the DER encoded integers - @return CRYPT_OK if successful -*/ -int der_encode_integer(void *num, unsigned char *out, unsigned long *outlen) -{ - unsigned long tmplen, y, len; - int err, leading_zero; - - LTC_ARGCHK(num != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* find out how big this will be */ - if ((err = der_length_integer(num, &tmplen)) != CRYPT_OK) { - return err; - } - - if (*outlen < tmplen) { - *outlen = tmplen; - return CRYPT_BUFFER_OVERFLOW; - } - - if (ltc_mp_cmp_d(num, 0) != LTC_MP_LT) { - /* we only need a leading zero if the msb of the first byte is one */ - if ((ltc_mp_count_bits(num) & 7) == 0 || ltc_mp_iszero(num) == LTC_MP_YES) { - leading_zero = 1; - } else { - leading_zero = 0; - } - - /* get length of num in bytes (plus 1 since we force the msbyte to zero) */ - y = ltc_mp_unsigned_bin_size(num) + leading_zero; - } else { - leading_zero = 0; - y = ltc_mp_count_bits(num); - y = y + (8 - (y & 7)); - y = y >> 3; - if (((ltc_mp_cnt_lsb(num)+1)==ltc_mp_count_bits(num)) && ((ltc_mp_count_bits(num)&7)==0)) --y; - } - - /* now store initial data */ - *out++ = 0x02; - len = *outlen - 1; - if ((err = der_encode_asn1_length(y, out, &len)) != CRYPT_OK) { - return err; - } - out += len; - - /* now store msbyte of zero if num is non-zero */ - if (leading_zero) { - *out++ = 0x00; - } - - /* if it's not zero store it as big endian */ - if (ltc_mp_cmp_d(num, 0) == LTC_MP_GT) { - /* now store the mpint */ - if ((err = ltc_mp_to_unsigned_bin(num, out)) != CRYPT_OK) { - return err; - } - } else if (ltc_mp_iszero(num) != LTC_MP_YES) { - void *tmp; - - /* negative */ - if (ltc_mp_init(&tmp) != CRYPT_OK) { - return CRYPT_MEM; - } - - /* 2^roundup and subtract */ - y = ltc_mp_count_bits(num); - y = y + (8 - (y & 7)); - if (((ltc_mp_cnt_lsb(num)+1)==ltc_mp_count_bits(num)) && ((ltc_mp_count_bits(num)&7)==0)) y -= 8; - if (ltc_mp_2expt(tmp, y) != CRYPT_OK || ltc_mp_add(tmp, num, tmp) != CRYPT_OK) { - ltc_mp_clear(tmp); - return CRYPT_MEM; - } - if ((err = ltc_mp_to_unsigned_bin(tmp, out)) != CRYPT_OK) { - ltc_mp_clear(tmp); - return err; - } - ltc_mp_clear(tmp); - } - - /* we good */ - *outlen = tmplen; - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/integer/der_length_integer.c b/src/pk/asn1/der/integer/der_length_integer.c deleted file mode 100644 index 466f297c..00000000 --- a/src/pk/asn1/der/integer/der_length_integer.c +++ /dev/null @@ -1,55 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_integer.c - ASN.1 DER, get length of encoding, Tom St Denis -*/ - - -#ifdef LTC_DER -/** - Gets length of DER encoding of num - @param num The int to get the size of - @param outlen [out] The length of the DER encoding for the given integer - @return CRYPT_OK if successful -*/ -int der_length_integer(void *num, unsigned long *outlen) -{ - unsigned long z, len; - int leading_zero, err; - - LTC_ARGCHK(num != NULL); - LTC_ARGCHK(outlen != NULL); - - if (ltc_mp_cmp_d(num, 0) != LTC_MP_LT) { - /* positive */ - - /* we only need a leading zero if the msb of the first byte is one */ - if ((ltc_mp_count_bits(num) & 7) == 0 || ltc_mp_iszero(num) == LTC_MP_YES) { - leading_zero = 1; - } else { - leading_zero = 0; - } - - /* size for bignum */ - len = leading_zero + ltc_mp_unsigned_bin_size(num); - } else { - /* it's negative */ - /* find power of 2 that is a multiple of eight and greater than count bits */ - z = ltc_mp_count_bits(num); - z = z + (8 - (z & 7)); - if (((ltc_mp_cnt_lsb(num)+1)==ltc_mp_count_bits(num)) && ((ltc_mp_count_bits(num)&7)==0)) --z; - len = z >> 3; - } - - if ((err = der_length_asn1_length(len, &z)) != CRYPT_OK) { - return err; - } - *outlen = 1 + z + len; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/object_identifier/der_decode_object_identifier.c b/src/pk/asn1/der/object_identifier/der_decode_object_identifier.c deleted file mode 100644 index 72512477..00000000 --- a/src/pk/asn1/der/object_identifier/der_decode_object_identifier.c +++ /dev/null @@ -1,94 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_object_identifier.c - ASN.1 DER, Decode Object Identifier, Tom St Denis -*/ - -#ifdef LTC_DER -/** - Decode OID data and store the array of integers in words - @param in The OID DER encoded data - @param inlen The length of the OID data - @param words [out] The destination of the OID words - @param outlen [in/out] The number of OID words - @return CRYPT_OK if successful -*/ -int der_decode_object_identifier(const unsigned char *in, unsigned long inlen, - unsigned long *words, unsigned long *outlen) -{ - unsigned long x, y, t, len; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(words != NULL); - LTC_ARGCHK(outlen != NULL); - - /* header is at least 3 bytes */ - if (inlen < 3) { - return CRYPT_INVALID_PACKET; - } - - /* must be room for at least two words */ - if (*outlen < 2) { - *outlen = 2; - return CRYPT_BUFFER_OVERFLOW; - } - - /* decode the packet header */ - x = 0; - if ((in[x++] & 0x1F) != 0x06) { - return CRYPT_INVALID_PACKET; - } - - /* get the length of the data */ - y = inlen - x; - if ((err = der_decode_asn1_length(in + x, &y, &len)) != CRYPT_OK) { - return err; - } - x += y; - - if ((len == 0) || (len > (inlen - x))) { - return CRYPT_INVALID_PACKET; - } - - /* decode words */ - y = 0; - t = 0; - while (len--) { - t = (t << 7) | (in[x] & 0x7F); - if (!(in[x++] & 0x80)) { - /* store t */ - if (y >= *outlen) { - y++; - } else { - if (y == 0) { - if (t <= 79) { - words[0] = t / 40; - words[1] = t % 40; - } else { - words[0] = 2; - words[1] = t - 80; - } - y = 2; - } else { - words[y++] = t; - } - } - t = 0; - } - } - - if (y > *outlen) { - err = CRYPT_BUFFER_OVERFLOW; - } else { - err = CRYPT_OK; - } - - *outlen = y; - return err; -} - -#endif diff --git a/src/pk/asn1/der/object_identifier/der_encode_object_identifier.c b/src/pk/asn1/der/object_identifier/der_encode_object_identifier.c deleted file mode 100644 index af563542..00000000 --- a/src/pk/asn1/der/object_identifier/der_encode_object_identifier.c +++ /dev/null @@ -1,81 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_object_identifier.c - ASN.1 DER, Encode Object Identifier, Tom St Denis -*/ - -#ifdef LTC_DER -/** - Encode an OID - @param words The words to encode (upto 32-bits each) - @param nwords The number of words in the OID - @param out [out] Destination of OID data - @param outlen [in/out] The max and resulting size of the OID - @return CRYPT_OK if successful -*/ -int der_encode_object_identifier(const unsigned long *words, unsigned long nwords, - unsigned char *out, unsigned long *outlen) -{ - unsigned long i, x, y, z, t, mask, wordbuf; - int err; - - LTC_ARGCHK(words != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* check length */ - if ((err = der_length_object_identifier_full(words, nwords, &x, &z)) != CRYPT_OK) { - return err; - } - if (x > *outlen) { - *outlen = x; - return CRYPT_BUFFER_OVERFLOW; - } - - /* store header + length */ - x = 0; - out[x++] = 0x06; - y = *outlen - x; - if ((err = der_encode_asn1_length(z, out + x, &y)) != CRYPT_OK) { - return err; - } - x += y; - - /* store first byte */ - wordbuf = words[0] * 40 + words[1]; - for (i = 1; i < nwords; i++) { - /* store 7 bit words in little endian */ - t = wordbuf; - if (t) { - y = x; - mask = 0; - while (t) { - out[x++] = (unsigned char)((t & 0x7F) | mask); - t >>= 7; - mask |= 0x80; /* upper bit is set on all but the last byte */ - } - /* now swap bytes y...x-1 */ - z = x - 1; - while (y < z) { - t = out[y]; out[y] = out[z]; out[z] = (unsigned char)t; - ++y; - --z; - } - } else { - /* zero word */ - out[x++] = 0x00; - } - - if (i < nwords - 1) { - wordbuf = words[i + 1]; - } - } - - *outlen = x; - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/object_identifier/der_length_object_identifier.c b/src/pk/asn1/der/object_identifier/der_length_object_identifier.c deleted file mode 100644 index 8facf74e..00000000 --- a/src/pk/asn1/der/object_identifier/der_length_object_identifier.c +++ /dev/null @@ -1,89 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_object_identifier.c - ASN.1 DER, get length of Object Identifier, Tom St Denis -*/ - -#ifdef LTC_DER - -static LTC_INLINE unsigned long s_der_object_identifier_bits(unsigned long x) -{ -#if defined(LTC_HAVE_CLZL_BUILTIN) - if (x == 0) - return 0; - return sizeof(unsigned long) * CHAR_BIT - __builtin_clzl(x); -#else - unsigned long c; - c = 0; - while (x) { - ++c; - x >>= 1; - } - return c; -#endif -} - -int der_length_object_identifier_full(const unsigned long *words, unsigned long nwords, unsigned long *outlen, unsigned long *datalen) -{ - unsigned long y, z, t, wordbuf; - - LTC_ARGCHK(words != NULL); - LTC_ARGCHK(outlen != NULL); - - - /* must be >= 2 words */ - if (nwords < 2) { - return CRYPT_INVALID_ARG; - } - - /* word1 = 0,1,2 and word2 0..39 */ - if (words[0] > 2 || (words[0] < 2 && words[1] > 39)) { - return CRYPT_INVALID_ARG; - } - - /* leading word is the first two */ - z = 0; - wordbuf = words[0] * 40 + words[1]; - for (y = 1; y < nwords; y++) { - t = s_der_object_identifier_bits(wordbuf); - z += t/7 + ((t%7) ? 1 : 0) + (wordbuf == 0 ? 1 : 0); - if (y < nwords - 1) { - /* grab next word */ - wordbuf = words[y+1]; - } - } - - if (datalen) { - *datalen = z; - } - /* now depending on the length our length encoding changes */ - if (z < 128) { - z += 2; - } else if (z < 256) { - z += 3; - } else if (z < 65536UL) { - z += 4; - } else { - return CRYPT_INVALID_ARG; - } - - *outlen = z; - return CRYPT_OK; -} - -/** - Gets length of DER encoding of Object Identifier - @param nwords The number of OID words - @param words The actual OID words to get the size of - @param outlen [out] The length of the DER encoding for the given string - @return CRYPT_OK if successful -*/ -int der_length_object_identifier(const unsigned long *words, unsigned long nwords, unsigned long *outlen) -{ - return der_length_object_identifier_full(words, nwords, outlen, NULL); -} - -#endif diff --git a/src/pk/asn1/der/octet/der_decode_octet_string.c b/src/pk/asn1/der/octet/der_decode_octet_string.c deleted file mode 100644 index df847214..00000000 --- a/src/pk/asn1/der/octet/der_decode_octet_string.c +++ /dev/null @@ -1,69 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_octet_string.c - ASN.1 DER, encode a OCTET STRING, Tom St Denis -*/ - - -#ifdef LTC_DER - -/** - Store a OCTET STRING - @param in The DER encoded OCTET STRING - @param inlen The size of the DER OCTET STRING - @param out [out] The array of octets stored (one per char) - @param outlen [in/out] The number of octets stored - @return CRYPT_OK if successful -*/ -int der_decode_octet_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long x, y, len; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* must have header at least */ - if (inlen < 2) { - return CRYPT_INVALID_PACKET; - } - - /* check for 0x04 */ - if ((in[0] & 0x1F) != 0x04) { - return CRYPT_INVALID_PACKET; - } - x = 1; - - /* get the length of the data */ - y = inlen - x; - if ((err = der_decode_asn1_length(in + x, &y, &len)) != CRYPT_OK) { - return err; - } - x += y; - - /* is it too long? */ - if (len > *outlen) { - *outlen = len; - return CRYPT_BUFFER_OVERFLOW; - } - - if (len > (inlen - x)) { - return CRYPT_INVALID_PACKET; - } - - /* read the data */ - for (y = 0; y < len; y++) { - out[y] = in[x++]; - } - - *outlen = y; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/octet/der_encode_octet_string.c b/src/pk/asn1/der/octet/der_encode_octet_string.c deleted file mode 100644 index 73f1ee76..00000000 --- a/src/pk/asn1/der/octet/der_encode_octet_string.c +++ /dev/null @@ -1,62 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_octet_string.c - ASN.1 DER, encode a OCTET STRING, Tom St Denis -*/ - - -#ifdef LTC_DER - -/** - Store an OCTET STRING - @param in The array of OCTETS to store (one per char) - @param inlen The number of OCTETS to store - @param out [out] The destination for the DER encoded OCTET STRING - @param outlen [in/out] The max size and resulting size of the DER OCTET STRING - @return CRYPT_OK if successful -*/ -int der_encode_octet_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long x, y, len; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* get the size */ - if ((err = der_length_octet_string(inlen, &len)) != CRYPT_OK) { - return err; - } - - /* too big? */ - if (len > *outlen) { - *outlen = len; - return CRYPT_BUFFER_OVERFLOW; - } - - /* encode the header+len */ - x = 0; - out[x++] = 0x04; - len = *outlen - x; - if ((err = der_encode_asn1_length(inlen, out + x, &len)) != CRYPT_OK) { - return err; - } - x += len; - - /* store octets */ - for (y = 0; y < inlen; y++) { - out[x++] = in[y]; - } - - /* retun length */ - *outlen = x; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/octet/der_length_octet_string.c b/src/pk/asn1/der/octet/der_length_octet_string.c deleted file mode 100644 index 67b071e6..00000000 --- a/src/pk/asn1/der/octet/der_length_octet_string.c +++ /dev/null @@ -1,33 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_octet_string.c - ASN.1 DER, get length of OCTET STRING, Tom St Denis -*/ - -#ifdef LTC_DER -/** - Gets length of DER encoding of OCTET STRING - @param noctets The number of octets in the string to encode - @param outlen [out] The length of the DER encoding for the given string - @return CRYPT_OK if successful -*/ -int der_length_octet_string(unsigned long noctets, unsigned long *outlen) -{ - unsigned long x; - int err; - - LTC_ARGCHK(outlen != NULL); - - if ((err = der_length_asn1_length(noctets, &x)) != CRYPT_OK) { - return err; - } - *outlen = 1 + x + noctets; - - return CRYPT_OK; -} - -#endif - diff --git a/src/pk/asn1/der/printable_string/der_decode_printable_string.c b/src/pk/asn1/der/printable_string/der_decode_printable_string.c deleted file mode 100644 index 3f9b533e..00000000 --- a/src/pk/asn1/der/printable_string/der_decode_printable_string.c +++ /dev/null @@ -1,73 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_printable_string.c - ASN.1 DER, encode a printable STRING, Tom St Denis -*/ - - -#ifdef LTC_DER - -/** - Store a printable STRING - @param in The DER encoded printable STRING - @param inlen The size of the DER printable STRING - @param out [out] The array of octets stored (one per char) - @param outlen [in/out] The number of octets stored - @return CRYPT_OK if successful -*/ -int der_decode_printable_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long x, y, len; - int t, err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* must have header at least */ - if (inlen < 2) { - return CRYPT_INVALID_PACKET; - } - - /* check for 0x13 */ - if ((in[0] & 0x1F) != 0x13) { - return CRYPT_INVALID_PACKET; - } - x = 1; - - /* get the length of the data */ - y = inlen - x; - if ((err = der_decode_asn1_length(in + x, &y, &len)) != CRYPT_OK) { - return err; - } - x += y; - - /* is it too long? */ - if (len > *outlen) { - *outlen = len; - return CRYPT_BUFFER_OVERFLOW; - } - - if (len > (inlen - x)) { - return CRYPT_INVALID_PACKET; - } - - /* read the data */ - for (y = 0; y < len; y++) { - t = der_printable_value_decode(in[x++]); - if (t == -1) { - return CRYPT_INVALID_ARG; - } - out[y] = t; - } - - *outlen = y; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/printable_string/der_encode_printable_string.c b/src/pk/asn1/der/printable_string/der_encode_printable_string.c deleted file mode 100644 index 7b3aefd1..00000000 --- a/src/pk/asn1/der/printable_string/der_encode_printable_string.c +++ /dev/null @@ -1,61 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_printable_string.c - ASN.1 DER, encode a printable STRING, Tom St Denis -*/ - -#ifdef LTC_DER - -/** - Store an printable STRING - @param in The array of printable to store (one per char) - @param inlen The number of printable to store - @param out [out] The destination for the DER encoded printable STRING - @param outlen [in/out] The max size and resulting size of the DER printable STRING - @return CRYPT_OK if successful -*/ -int der_encode_printable_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long x, y, len; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* get the size */ - if ((err = der_length_printable_string(in, inlen, &len)) != CRYPT_OK) { - return err; - } - - /* too big? */ - if (len > *outlen) { - *outlen = len; - return CRYPT_BUFFER_OVERFLOW; - } - - /* encode the header+len */ - x = 0; - out[x++] = 0x13; - len = *outlen - x; - if ((err = der_encode_asn1_length(inlen, out + x, &len)) != CRYPT_OK) { - return err; - } - x += len; - - /* store octets */ - for (y = 0; y < inlen; y++) { - out[x++] = der_printable_char_encode(in[y]); - } - - /* retun length */ - *outlen = x; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/printable_string/der_length_printable_string.c b/src/pk/asn1/der/printable_string/der_length_printable_string.c deleted file mode 100644 index dcfcae9c..00000000 --- a/src/pk/asn1/der/printable_string/der_length_printable_string.c +++ /dev/null @@ -1,144 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_printable_string.c - ASN.1 DER, get length of Printable STRING, Tom St Denis -*/ - -#ifdef LTC_DER - -static const struct { - int code, value; -} printable_table[] = { -{ ' ', 32 }, -{ '\'', 39 }, -{ '(', 40 }, -{ ')', 41 }, -{ '+', 43 }, -{ ',', 44 }, -{ '-', 45 }, -{ '.', 46 }, -{ '/', 47 }, -{ '0', 48 }, -{ '1', 49 }, -{ '2', 50 }, -{ '3', 51 }, -{ '4', 52 }, -{ '5', 53 }, -{ '6', 54 }, -{ '7', 55 }, -{ '8', 56 }, -{ '9', 57 }, -{ ':', 58 }, -{ '=', 61 }, -{ '?', 63 }, -{ 'A', 65 }, -{ 'B', 66 }, -{ 'C', 67 }, -{ 'D', 68 }, -{ 'E', 69 }, -{ 'F', 70 }, -{ 'G', 71 }, -{ 'H', 72 }, -{ 'I', 73 }, -{ 'J', 74 }, -{ 'K', 75 }, -{ 'L', 76 }, -{ 'M', 77 }, -{ 'N', 78 }, -{ 'O', 79 }, -{ 'P', 80 }, -{ 'Q', 81 }, -{ 'R', 82 }, -{ 'S', 83 }, -{ 'T', 84 }, -{ 'U', 85 }, -{ 'V', 86 }, -{ 'W', 87 }, -{ 'X', 88 }, -{ 'Y', 89 }, -{ 'Z', 90 }, -{ 'a', 97 }, -{ 'b', 98 }, -{ 'c', 99 }, -{ 'd', 100 }, -{ 'e', 101 }, -{ 'f', 102 }, -{ 'g', 103 }, -{ 'h', 104 }, -{ 'i', 105 }, -{ 'j', 106 }, -{ 'k', 107 }, -{ 'l', 108 }, -{ 'm', 109 }, -{ 'n', 110 }, -{ 'o', 111 }, -{ 'p', 112 }, -{ 'q', 113 }, -{ 'r', 114 }, -{ 's', 115 }, -{ 't', 116 }, -{ 'u', 117 }, -{ 'v', 118 }, -{ 'w', 119 }, -{ 'x', 120 }, -{ 'y', 121 }, -{ 'z', 122 }, -}; - -int der_printable_char_encode(int c) -{ - int x; - for (x = 0; x < (int)LTC_ARRAY_SIZE(printable_table); x++) { - if (printable_table[x].code == c) { - return printable_table[x].value; - } - } - return -1; -} - -int der_printable_value_decode(int v) -{ - int x; - for (x = 0; x < (int)LTC_ARRAY_SIZE(printable_table); x++) { - if (printable_table[x].value == v) { - return printable_table[x].code; - } - } - return -1; -} - -/** - Gets length of DER encoding of Printable STRING - @param octets The values you want to encode - @param noctets The number of octets in the string to encode - @param outlen [out] The length of the DER encoding for the given string - @return CRYPT_OK if successful -*/ -int der_length_printable_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen) -{ - unsigned long x; - int err; - - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(octets != NULL); - - /* scan string for validity */ - for (x = 0; x < noctets; x++) { - if (der_printable_char_encode(octets[x]) == -1) { - return CRYPT_INVALID_ARG; - } - } - - if ((err = der_length_asn1_length(noctets, &x)) != CRYPT_OK) { - return err; - } - *outlen = 1 + x + noctets; - - return CRYPT_OK; -} - -#endif - diff --git a/src/pk/asn1/der/sequence/der_decode_sequence_ex.c b/src/pk/asn1/der/sequence/der_decode_sequence_ex.c deleted file mode 100644 index 6d7f8467..00000000 --- a/src/pk/asn1/der/sequence/der_decode_sequence_ex.c +++ /dev/null @@ -1,28 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - - -/** - @file der_decode_sequence_ex.c - ASN.1 DER, decode a SEQUENCE, Tom St Denis -*/ - -#ifdef LTC_DER - -/** - Decode a SEQUENCE - @param in The DER encoded input - @param inlen The size of the input - @param list The list of items to decode - @param outlen The number of items in the list - @param flags c.f. enum ltc_der_seq - @return CRYPT_OK on success -*/ -int der_decode_sequence_ex(const unsigned char *in, unsigned long inlen, - ltc_asn1_list *list, unsigned long outlen, unsigned int flags) -{ - return der_decode_custom_type_ex(in, inlen, NULL, list, outlen, flags); -} - -#endif diff --git a/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c b/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c deleted file mode 100644 index 422e12d9..00000000 --- a/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c +++ /dev/null @@ -1,553 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_sequence_flexi.c - ASN.1 DER, decode an array of ASN.1 types with a flexi parser, Tom St Denis -*/ - -#ifdef LTC_DER - -static int s_new_element(ltc_asn1_list **l) -{ - /* alloc new link */ - if (*l == NULL) { - *l = XCALLOC(1, sizeof(ltc_asn1_list)); - if (*l == NULL) { - return CRYPT_MEM; - } - } else { - (*l)->next = XCALLOC(1, sizeof(ltc_asn1_list)); - if ((*l)->next == NULL) { - return CRYPT_MEM; - } - (*l)->next->prev = *l; - *l = (*l)->next; - } - return CRYPT_OK; -} -#if defined(LTC_TEST_DBG) -void s_print_err(const char *errstr, ltc_asn1_list *l, int err, unsigned long identifier, unsigned long data_offset, unsigned long len) -{ -#if LTC_TEST_DBG <= 1 - if (err == CRYPT_OK) - return; -#endif - if (l->type == LTC_ASN1_CUSTOM_TYPE) { - fprintf(stderr, "%s %02lx: hl=%4lu l=%4lu - %s[%s %llu] (%s)\n", errstr, identifier, data_offset, len, der_asn1_class_to_string_map[l->klass], der_asn1_pc_to_string_map[l->pc], l->tag, error_to_string(err)); - } else { - fprintf(stderr, "%s %02lx: hl=%4lu l=%4lu - %s (%s)\n", errstr, identifier, data_offset, len, der_asn1_tag_to_string_map[l->tag], error_to_string(err)); - } -} -#else -#define s_print_err(errstr, l, err, identifier, data_offset, len) LTC_UNUSED_PARAM(data_offset) -#endif - -/** - ASN.1 DER Flexi(ble) decoder will decode arbitrary DER packets and create a linked list of the decoded elements. - @param in The input buffer - @param inlen [in/out] The length of the input buffer and on output the amount of decoded data - @param out [out] A pointer to the linked list - @param depth The depth/level of decoding recursion we've already reached - @return CRYPT_OK on success. -*/ -static int s_der_decode_sequence_flexi(const unsigned char *in, unsigned long *inlen, ltc_asn1_list **out, unsigned long depth) -{ - ltc_asn1_list *l; - int err; - unsigned long identifier, len, totlen, data_offset, id_len, len_len; - void *realloc_tmp; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen != NULL); - LTC_ARGCHK(out != NULL); - - l = NULL; - totlen = 0; - - if (*inlen == 0) { - /* alloc new link */ - if ((err = s_new_element(&l)) != CRYPT_OK) { - goto error; - } - } - - /* scan the input and and get lengths and what not */ - while (*inlen) { - /* alloc new link */ - if ((err = s_new_element(&l)) != CRYPT_OK) { - goto error; - } - - id_len = *inlen; - if ((err = der_decode_asn1_identifier(in, &id_len, l)) != CRYPT_OK) { - goto error; - } - /* read the type byte */ - identifier = *in; - - if (l->type != LTC_ASN1_EOL) { - /* fetch length */ - len_len = *inlen - id_len; - /* init with dummy values for error cases */ - data_offset = 666; - len = 0; - if ((err = der_decode_asn1_length(&in[id_len], &len_len, &len)) != CRYPT_OK) { - s_print_err("E1", l, err, identifier, data_offset, len); - goto error; - } else if (len > (*inlen - id_len - len_len)) { - err = CRYPT_INVALID_PACKET; - s_print_err("E2", l, err, identifier, data_offset, len); - goto error; - } - data_offset = id_len + len_len; - s_print_err("OK", l, err, identifier, data_offset, len); - len += data_offset; - - if (l->type == LTC_ASN1_CUSTOM_TYPE) { - /* Custom type, use the 'used' field to store the original identifier */ - l->used = identifier; - if (l->pc == LTC_ASN1_PC_CONSTRUCTED) { - /* treat constructed elements like SEQUENCEs */ - identifier = 0x20; - } else { - /* primitive elements are treated as opaque data */ - identifier = 0x80; - } - } - } else { - /* Init this so gcc won't complain, - * as this case will only be hit when we - * can't decode the identifier so the - * switch-case should go to default anyway... - */ - data_offset = 0; - len = 0; - } - - /* now switch on type */ - switch (identifier) { - case 0x01: /* BOOLEAN */ - if (l->type != LTC_ASN1_BOOLEAN) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - - /* init field */ - l->size = 1; - l->data = XCALLOC(1, sizeof(int)); - - if ((err = der_decode_boolean(in, *inlen, l->data)) != CRYPT_OK) { - goto error; - } - - if ((err = der_length_boolean(&len)) != CRYPT_OK) { - goto error; - } - break; - - case 0x02: /* INTEGER */ - if (l->type != LTC_ASN1_INTEGER) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - - /* Flexi INTEGER nodes are MPI-backed, so reject no-math builds before ltc_mp_init(). */ - if (ltc_mp.name == NULL) { - err = CRYPT_INVALID_ARG; - goto error; - } - - /* init field */ - l->size = 1; - if ((err = ltc_mp_init(&l->data)) != CRYPT_OK) { - goto error; - } - - /* decode field */ - if ((err = der_decode_integer(in, *inlen, l->data)) != CRYPT_OK) { - goto error; - } - - /* calc length of object */ - if ((err = der_length_integer(l->data, &len)) != CRYPT_OK) { - goto error; - } - break; - - case 0x03: /* BIT */ - if (l->type != LTC_ASN1_BIT_STRING) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - - /* init field */ - l->size = len * 8; /* *8 because we store decoded bits one per char and they are encoded 8 per char. */ - - if ((l->data = XCALLOC(1, l->size)) == NULL) { - err = CRYPT_MEM; - goto error; - } - - if ((err = der_decode_bit_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) { - goto error; - } - - if ((err = der_length_bit_string(l->size, &len)) != CRYPT_OK) { - goto error; - } - break; - - case 0x04: /* OCTET */ - if (l->type != LTC_ASN1_OCTET_STRING) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - - /* init field */ - l->size = len; - - if ((l->data = XCALLOC(1, l->size)) == NULL) { - err = CRYPT_MEM; - goto error; - } - - if ((err = der_decode_octet_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) { - goto error; - } - - if ((err = der_length_octet_string(l->size, &len)) != CRYPT_OK) { - goto error; - } - break; - - case 0x05: /* NULL */ - if (l->type != LTC_ASN1_NULL) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - - /* valid NULL is 0x05 0x00 */ - if (in[0] != 0x05 || in[1] != 0x00) { - err = CRYPT_INVALID_PACKET; - goto error; - } - - /* simple to store ;-) */ - l->data = NULL; - l->size = 0; - len = 2; - - break; - - case 0x06: /* OID */ - if (l->type != LTC_ASN1_OBJECT_IDENTIFIER) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - - /* init field */ - l->size = len; - - if ((l->data = XCALLOC(len, sizeof(unsigned long))) == NULL) { - err = CRYPT_MEM; - goto error; - } - - if ((err = der_decode_object_identifier(in, *inlen, l->data, &l->size)) != CRYPT_OK) { - goto error; - } - - if ((err = der_length_object_identifier(l->data, l->size, &len)) != CRYPT_OK) { - goto error; - } - - /* resize it to save a bunch of mem */ - if ((realloc_tmp = XREALLOC(l->data, l->size * sizeof(unsigned long))) == NULL) { - /* out of heap but this is not an error */ - break; - } - l->data = realloc_tmp; - break; - - case 0x0C: /* UTF8 */ - - /* init field */ - if (l->type != LTC_ASN1_UTF8_STRING) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - l->size = len; - - if ((l->data = XCALLOC(l->size, sizeof(wchar_t))) == NULL) { - err = CRYPT_MEM; - goto error; - } - - if ((err = der_decode_utf8_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) { - goto error; - } - - if ((err = der_length_utf8_string(l->data, l->size, &len)) != CRYPT_OK) { - goto error; - } - break; - - case 0x13: /* PRINTABLE */ - if (l->type != LTC_ASN1_PRINTABLE_STRING) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - - /* init field */ - l->size = len; - - if ((l->data = XCALLOC(1, l->size)) == NULL) { - err = CRYPT_MEM; - goto error; - } - - if ((err = der_decode_printable_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) { - goto error; - } - - if ((err = der_length_printable_string(l->data, l->size, &len)) != CRYPT_OK) { - goto error; - } - break; - - case 0x14: /* TELETEXT */ - if (l->type != LTC_ASN1_TELETEX_STRING) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - - /* init field */ - l->size = len; - - if ((l->data = XCALLOC(1, l->size)) == NULL) { - err = CRYPT_MEM; - goto error; - } - - if ((err = der_decode_teletex_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) { - goto error; - } - - if ((err = der_length_teletex_string(l->data, l->size, &len)) != CRYPT_OK) { - goto error; - } - break; - - case 0x16: /* IA5 */ - if (l->type != LTC_ASN1_IA5_STRING) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - - /* init field */ - l->size = len; - - if ((l->data = XCALLOC(1, l->size)) == NULL) { - err = CRYPT_MEM; - goto error; - } - - if ((err = der_decode_ia5_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) { - goto error; - } - - if ((err = der_length_ia5_string(l->data, l->size, &len)) != CRYPT_OK) { - goto error; - } - break; - - case 0x17: /* UTC TIME */ - if (l->type != LTC_ASN1_UTCTIME) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - - /* init field */ - l->size = 1; - - if ((l->data = XCALLOC(1, sizeof(ltc_utctime))) == NULL) { - err = CRYPT_MEM; - goto error; - } - - len = *inlen; - if ((err = der_decode_utctime(in, &len, l->data)) != CRYPT_OK) { - goto error; - } - - if ((err = der_length_utctime(l->data, &len)) != CRYPT_OK) { - goto error; - } - break; - - case 0x18: - if (l->type != LTC_ASN1_GENERALIZEDTIME) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - - /* init field */ - l->size = len; - - if ((l->data = XCALLOC(1, sizeof(ltc_generalizedtime))) == NULL) { - err = CRYPT_MEM; - goto error; - } - - if ((err = der_decode_generalizedtime(in, &len, l->data)) != CRYPT_OK) { - goto error; - } - - if ((err = der_length_generalizedtime(l->data, &len)) != CRYPT_OK) { - goto error; - } - - break; - - case 0x20: /* Any CONSTRUCTED element that is neither SEQUENCE nor SET */ - case 0x30: /* SEQUENCE */ - case 0x31: /* SET */ - - /* init field */ - if (identifier == 0x20) { - if (l->type != LTC_ASN1_CUSTOM_TYPE) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - } - else if (identifier == 0x30) { - if (l->type != LTC_ASN1_SEQUENCE) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - } - else { - if (l->type != LTC_ASN1_SET) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - } - - /* check that we don't go over the recursion limit */ - if (depth > LTC_DER_MAX_RECURSION) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - - if ((l->data = XMALLOC(len)) == NULL) { - err = CRYPT_MEM; - goto error; - } - - XMEMCPY(l->data, in, len); - l->size = len; - - - /* jump to the start of the data */ - in += data_offset; - *inlen -= data_offset; - len -= data_offset; - - /* save the decoded ASN.1 len */ - len_len = len; - - /* Sequence elements go as child */ - if ((err = s_der_decode_sequence_flexi(in, &len, &(l->child), depth+1)) != CRYPT_OK) { - goto error; - } - if (len_len != len) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - - /* len update */ - totlen += data_offset; - - /* the flexi decoder can also do nothing, so make sure a child has been allocated */ - if (l->child) { - /* link them up y0 */ - l->child->parent = l; - } - - break; - - case 0x80: /* Context-specific */ - if (l->type != LTC_ASN1_CUSTOM_TYPE) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - - if ((l->data = XCALLOC(1, len - data_offset)) == NULL) { - err = CRYPT_MEM; - goto error; - } - - XMEMCPY(l->data, in + data_offset, len - data_offset); - l->size = len - data_offset; - - break; - - default: - /* invalid byte ... this is a soft error */ - /* remove link */ - if (l->prev) { - l = l->prev; - XFREE(l->next); - l->next = NULL; - } - goto outside; - } - - /* advance pointers */ - totlen += len; - in += len; - *inlen -= len; - } - -outside: - - /* in case we processed anything */ - if (totlen) { - /* rewind l please */ - while (l->prev != NULL || l->parent != NULL) { - if (l->parent != NULL) { - l = l->parent; - } else { - l = l->prev; - } - } - } - - /* return */ - *out = l; - *inlen = totlen; - return CRYPT_OK; - -error: - /* free list */ - der_sequence_free(l); - - return err; -} - -/** - ASN.1 DER Flexi(ble) decoder will decode arbitrary DER packets and create a linked list of the decoded elements. - @param in The input buffer - @param inlen [in/out] The length of the input buffer and on output the amount of decoded data - @param out [out] A pointer to the linked list - @return CRYPT_OK on success. -*/ -int der_decode_sequence_flexi(const unsigned char *in, unsigned long *inlen, ltc_asn1_list **out) -{ - return s_der_decode_sequence_flexi(in, inlen, out, 0); -} - -#endif - diff --git a/src/pk/asn1/der/sequence/der_decode_sequence_multi.c b/src/pk/asn1/der/sequence/der_decode_sequence_multi.c deleted file mode 100644 index 78170abf..00000000 --- a/src/pk/asn1/der/sequence/der_decode_sequence_multi.c +++ /dev/null @@ -1,180 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - - -/** - @file der_decode_sequence_multi.c - ASN.1 DER, decode a SEQUENCE, Tom St Denis -*/ - -#ifdef LTC_DER - -/** - Decode a SEQUENCE type using a VA list - @param in Input buffer - @param inlen Length of input in octets - @param a1 Initialized argument list #1 - @param a2 Initialized argument list #2 (copy of #1) - @param flags c.f. enum ltc_der_seq - @return CRYPT_OK on success -*/ -static int s_der_decode_sequence_va(const unsigned char *in, unsigned long inlen, va_list a1, va_list a2, unsigned int flags) -{ - int err; - ltc_asn1_type type; - unsigned long size, x; - void *data; - ltc_asn1_list *list; - - LTC_ARGCHK(in != NULL); - - /* get size of output that will be required */ - x = 0; - for (;;) { - type = (ltc_asn1_type)va_arg(a1, int); - - if (type == LTC_ASN1_EOL) { - break; - } - - size = va_arg(a1, unsigned long); - data = va_arg(a1, void*); - LTC_UNUSED_PARAM(size); - LTC_UNUSED_PARAM(data); - - switch (type) { - case LTC_ASN1_BOOLEAN: - case LTC_ASN1_INTEGER: - case LTC_ASN1_SHORT_INTEGER: - case LTC_ASN1_BIT_STRING: - case LTC_ASN1_OCTET_STRING: - case LTC_ASN1_NULL: - case LTC_ASN1_OBJECT_IDENTIFIER: - case LTC_ASN1_IA5_STRING: - case LTC_ASN1_PRINTABLE_STRING: - case LTC_ASN1_UTF8_STRING: - case LTC_ASN1_UTCTIME: - case LTC_ASN1_SET: - case LTC_ASN1_SETOF: - case LTC_ASN1_SEQUENCE: - case LTC_ASN1_CHOICE: - case LTC_ASN1_RAW_BIT_STRING: - case LTC_ASN1_TELETEX_STRING: - case LTC_ASN1_GENERALIZEDTIME: - ++x; - break; - - case LTC_ASN1_EOL: - case LTC_ASN1_CUSTOM_TYPE: - return CRYPT_INVALID_ARG; - } - } - - /* allocate structure for x elements */ - if (x == 0) { - return CRYPT_NOP; - } - - list = XCALLOC(x, sizeof(*list)); - if (list == NULL) { - return CRYPT_MEM; - } - - /* fill in the structure */ - x = 0; - for (;;) { - type = (ltc_asn1_type)va_arg(a2, int); - size = va_arg(a2, unsigned long); - data = va_arg(a2, void*); - - if (type == LTC_ASN1_EOL) { - break; - } - - switch (type) { - case LTC_ASN1_BOOLEAN: - case LTC_ASN1_INTEGER: - case LTC_ASN1_SHORT_INTEGER: - case LTC_ASN1_BIT_STRING: - case LTC_ASN1_OCTET_STRING: - case LTC_ASN1_NULL: - case LTC_ASN1_OBJECT_IDENTIFIER: - case LTC_ASN1_IA5_STRING: - case LTC_ASN1_PRINTABLE_STRING: - case LTC_ASN1_UTF8_STRING: - case LTC_ASN1_UTCTIME: - case LTC_ASN1_SEQUENCE: - case LTC_ASN1_SET: - case LTC_ASN1_SETOF: - case LTC_ASN1_CHOICE: - case LTC_ASN1_RAW_BIT_STRING: - case LTC_ASN1_TELETEX_STRING: - case LTC_ASN1_GENERALIZEDTIME: - LTC_SET_ASN1(list, x++, type, data, size); - break; - /* coverity[dead_error_line] */ - case LTC_ASN1_EOL: - case LTC_ASN1_CUSTOM_TYPE: - break; - } - } - - err = der_decode_sequence_ex(in, inlen, list, x, flags); - XFREE(list); - return err; -} - -/** - Decode a SEQUENCE type using a VA list - @param in Input buffer - @param inlen Length of input in octets - @remark <...> is of the form (int, unsigned long, void*) - @return CRYPT_OK on success -*/ -int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...) -{ - va_list a1, a2; - int err; - - LTC_ARGCHK(in != NULL); - - va_start(a1, inlen); - va_start(a2, inlen); - - err = s_der_decode_sequence_va(in, inlen, a1, a2, LTC_DER_SEQ_SEQUENCE | LTC_DER_SEQ_RELAXED); - - va_end(a2); - va_end(a1); - - return err; -} - -/** - Decode a SEQUENCE type using a VA list - @param in Input buffer - @param inlen Length of input in octets - @param flags c.f. enum ltc_der_seq - @remark <...> is of the form (int, unsigned long, void*) - @return CRYPT_OK on success -*/ -int der_decode_sequence_multi_ex(const unsigned char *in, unsigned long inlen, unsigned int flags, ...) -{ - va_list a1, a2; - int err; - - LTC_ARGCHK(in != NULL); - - va_start(a1, flags); - va_start(a2, flags); - - err = s_der_decode_sequence_va(in, inlen, a1, a2, flags); - - va_end(a2); - va_end(a1); - - return err; -} - -#endif - diff --git a/src/pk/asn1/der/sequence/der_encode_sequence_ex.c b/src/pk/asn1/der/sequence/der_encode_sequence_ex.c deleted file mode 100644 index 2ea33a6d..00000000 --- a/src/pk/asn1/der/sequence/der_encode_sequence_ex.c +++ /dev/null @@ -1,202 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - - -/** - @file der_encode_sequence_ex.c - ASN.1 DER, encode a SEQUENCE, Tom St Denis -*/ - -#ifdef LTC_DER - -/** - Encode a SEQUENCE - @param list The list of items to encode - @param inlen The number of items in the list - @param out [out] The destination - @param outlen [in/out] The size of the output - @param type_of LTC_ASN1_SEQUENCE or LTC_ASN1_SET/LTC_ASN1_SETOF - @return CRYPT_OK on success -*/ -int der_encode_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, - unsigned char *out, unsigned long *outlen, int type_of) -{ - int err; - ltc_asn1_type type; - unsigned long size, x, y, z, i; - void *data; - - LTC_ARGCHK(list != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* get size of output that will be required */ - y = 0; z = 0; - if (der_length_sequence_ex(list, inlen, &y, &z) != CRYPT_OK) return CRYPT_INVALID_ARG; - - /* too big ? */ - if (*outlen < y) { - *outlen = y; - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; - } - - /* store header */ - x = 0; - out[x++] = (type_of == LTC_ASN1_SEQUENCE) ? 0x30 : 0x31; - - y = *outlen - x; - if ((err = der_encode_asn1_length(z, &out[x], &y)) != CRYPT_OK) { - goto LBL_ERR; - } - x += y; - - /* store data */ - *outlen -= x; - for (i = 0; i < inlen; i++) { - type = list[i].type; - size = list[i].size; - data = list[i].data; - - if (type == LTC_ASN1_EOL) { - break; - } - - switch (type) { - case LTC_ASN1_BOOLEAN: - z = *outlen; - if ((err = der_encode_boolean(*((int *)data), out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_INTEGER: - z = *outlen; - if ((err = der_encode_integer(data, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_SHORT_INTEGER: - z = *outlen; - if ((err = der_encode_short_integer(*((unsigned long*)data), out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_BIT_STRING: - z = *outlen; - if ((err = der_encode_bit_string(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_RAW_BIT_STRING: - z = *outlen; - if ((err = der_encode_raw_bit_string(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_OCTET_STRING: - z = *outlen; - if ((err = der_encode_octet_string(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_NULL: - out[x] = 0x05; - out[x+1] = 0x00; - z = 2; - break; - - case LTC_ASN1_OBJECT_IDENTIFIER: - z = *outlen; - if ((err = der_encode_object_identifier(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_IA5_STRING: - z = *outlen; - if ((err = der_encode_ia5_string(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_PRINTABLE_STRING: - z = *outlen; - if ((err = der_encode_printable_string(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_UTF8_STRING: - z = *outlen; - if ((err = der_encode_utf8_string(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_UTCTIME: - z = *outlen; - if ((err = der_encode_utctime(data, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_GENERALIZEDTIME: - z = *outlen; - if ((err = der_encode_generalizedtime(data, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_SET: - z = *outlen; - if ((err = der_encode_set(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_SETOF: - z = *outlen; - if ((err = der_encode_setof(data, size, out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_SEQUENCE: - z = *outlen; - if ((err = der_encode_sequence_ex(data, size, out + x, &z, type)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_CUSTOM_TYPE: - z = *outlen; - if ((err = der_encode_custom_type(&list[i], out + x, &z)) != CRYPT_OK) { - goto LBL_ERR; - } - break; - - case LTC_ASN1_CHOICE: - case LTC_ASN1_EOL: - case LTC_ASN1_TELETEX_STRING: - err = CRYPT_INVALID_ARG; - goto LBL_ERR; - } - - x += z; - *outlen -= z; - } - *outlen = x; - err = CRYPT_OK; - -LBL_ERR: - return err; -} - -#endif diff --git a/src/pk/asn1/der/sequence/der_encode_sequence_multi.c b/src/pk/asn1/der/sequence/der_encode_sequence_multi.c deleted file mode 100644 index 4202cf25..00000000 --- a/src/pk/asn1/der/sequence/der_encode_sequence_multi.c +++ /dev/null @@ -1,138 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - - -/** - @file der_encode_sequence_multi.c - ASN.1 DER, encode a SEQUENCE, Tom St Denis -*/ - -#ifdef LTC_DER - -/** - Encode a SEQUENCE type using a VA list - @param out [out] Destination for data - @param outlen [in/out] Length of buffer and resulting length of output - @remark <...> is of the form (int, unsigned long, void*) - @return CRYPT_OK on success -*/ -int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...) -{ - int err; - ltc_asn1_type type; - unsigned long size, x; - void *data; - va_list args; - ltc_asn1_list *list; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* get size of output that will be required */ - va_start(args, outlen); - x = 0; - for (;;) { - type = (ltc_asn1_type)va_arg(args, int); - - if (type == LTC_ASN1_EOL) { - break; - } - - size = va_arg(args, unsigned long); - data = va_arg(args, void*); - LTC_UNUSED_PARAM(size); - LTC_UNUSED_PARAM(data); - - switch (type) { - case LTC_ASN1_BOOLEAN: - case LTC_ASN1_INTEGER: - case LTC_ASN1_SHORT_INTEGER: - case LTC_ASN1_BIT_STRING: - case LTC_ASN1_OCTET_STRING: - case LTC_ASN1_NULL: - case LTC_ASN1_OBJECT_IDENTIFIER: - case LTC_ASN1_IA5_STRING: - case LTC_ASN1_PRINTABLE_STRING: - case LTC_ASN1_UTF8_STRING: - case LTC_ASN1_UTCTIME: - case LTC_ASN1_SEQUENCE: - case LTC_ASN1_SET: - case LTC_ASN1_SETOF: - case LTC_ASN1_RAW_BIT_STRING: - case LTC_ASN1_GENERALIZEDTIME: - ++x; - break; - - case LTC_ASN1_CHOICE: - case LTC_ASN1_CUSTOM_TYPE: - case LTC_ASN1_EOL: - case LTC_ASN1_TELETEX_STRING: - va_end(args); - return CRYPT_INVALID_ARG; - } - } - va_end(args); - - /* allocate structure for x elements */ - if (x == 0) { - return CRYPT_NOP; - } - - list = XCALLOC(x, sizeof(*list)); - if (list == NULL) { - return CRYPT_MEM; - } - - /* fill in the structure */ - va_start(args, outlen); - x = 0; - for (;;) { - type = (ltc_asn1_type)va_arg(args, int); - - if (type == LTC_ASN1_EOL) { - break; - } - - size = va_arg(args, unsigned long); - data = va_arg(args, void*); - - switch (type) { - case LTC_ASN1_BOOLEAN: - case LTC_ASN1_INTEGER: - case LTC_ASN1_SHORT_INTEGER: - case LTC_ASN1_BIT_STRING: - case LTC_ASN1_OCTET_STRING: - case LTC_ASN1_NULL: - case LTC_ASN1_OBJECT_IDENTIFIER: - case LTC_ASN1_IA5_STRING: - case LTC_ASN1_PRINTABLE_STRING: - case LTC_ASN1_UTF8_STRING: - case LTC_ASN1_UTCTIME: - case LTC_ASN1_SEQUENCE: - case LTC_ASN1_SET: - case LTC_ASN1_SETOF: - case LTC_ASN1_RAW_BIT_STRING: - case LTC_ASN1_GENERALIZEDTIME: - LTC_SET_ASN1(list, x++, type, data, size); - break; - - case LTC_ASN1_CHOICE: - case LTC_ASN1_CUSTOM_TYPE: - case LTC_ASN1_EOL: - case LTC_ASN1_TELETEX_STRING: - va_end(args); - err = CRYPT_INVALID_ARG; - goto LBL_ERR; - } - } - va_end(args); - - err = der_encode_sequence(list, x, out, outlen); -LBL_ERR: - XFREE(list); - return err; -} - -#endif - diff --git a/src/pk/asn1/der/sequence/der_flexi_sequence_cmp.c b/src/pk/asn1/der/sequence/der_flexi_sequence_cmp.c deleted file mode 100644 index 2acb7d9a..00000000 --- a/src/pk/asn1/der/sequence/der_flexi_sequence_cmp.c +++ /dev/null @@ -1,54 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_sequence.c - ASN.1 DER, length a SEQUENCE, Tom St Denis -*/ - -#ifdef LTC_DER - -/** - Get the length of a DER sequence - @param list The sequences of items in the SEQUENCE - @param inlen The number of items - @param outlen [out] The length required in octets to store it - @return CRYPT_OK on success -*/ - -int der_flexi_sequence_cmp(const ltc_asn1_list *flexi, der_flexi_check *check) -{ - ltc_asn1_list *cur; - if (flexi->type != LTC_ASN1_SEQUENCE) { - return CRYPT_INVALID_PACKET; - } - cur = flexi->child; - while(check->t != LTC_ASN1_EOL && cur) { - if (!LTC_ASN1_IS_TYPE(cur, check->t)) { - if (check->optional) { - check++; - continue; - } - return CRYPT_INVALID_PACKET; - } - if (check->pp != NULL) *check->pp = cur; - else if (check->handler) { - int err = check->handler(cur, check->userdata); - if (err != CRYPT_OK) - return err; - } - cur = cur->next; - check++; - } - /* the loop above also ends when the decoded list runs out early; returning CRYPT_OK then would leave the caller's output pointers unassigned */ - while (check->t != LTC_ASN1_EOL) { - if (!check->optional) { - return CRYPT_INVALID_PACKET; - } - check++; - } - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/sequence/der_length_sequence.c b/src/pk/asn1/der/sequence/der_length_sequence.c deleted file mode 100644 index 6d25391d..00000000 --- a/src/pk/asn1/der/sequence/der_length_sequence.c +++ /dev/null @@ -1,179 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_sequence.c - ASN.1 DER, length a SEQUENCE, Tom St Denis -*/ - -#ifdef LTC_DER - -/** - Get the length of a DER sequence - @param list The sequences of items in the SEQUENCE - @param inlen The number of items - @param outlen [out] The length required in octets to store it - @return CRYPT_OK on success -*/ -int der_length_sequence(const ltc_asn1_list *list, unsigned long inlen, - unsigned long *outlen) -{ - return der_length_sequence_ex(list, inlen, outlen, NULL); -} - -int der_length_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, - unsigned long *outlen, unsigned long *payloadlen) -{ - int err; - ltc_asn1_type type; - unsigned long size, x, y, i; - void *data; - - LTC_ARGCHK(list != NULL); - LTC_ARGCHK(outlen != NULL); - - /* get size of output that will be required */ - y = 0; - for (i = 0; i < inlen; i++) { - type = list[i].type; - size = list[i].size; - data = list[i].data; - - if (type == LTC_ASN1_EOL) { - break; - } - - /* some items may be optional during import */ - if (!list[i].used && list[i].optional) continue; - - switch (type) { - case LTC_ASN1_BOOLEAN: - if ((err = der_length_boolean(&x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_INTEGER: - if ((err = der_length_integer(data, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_SHORT_INTEGER: - if ((err = der_length_short_integer(*((unsigned long *)data), &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_BIT_STRING: - case LTC_ASN1_RAW_BIT_STRING: - if ((err = der_length_bit_string(size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_OCTET_STRING: - if ((err = der_length_octet_string(size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_NULL: - y += 2; - break; - - case LTC_ASN1_OBJECT_IDENTIFIER: - if ((err = der_length_object_identifier(data, size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_IA5_STRING: - if ((err = der_length_ia5_string(data, size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_TELETEX_STRING: - if ((err = der_length_teletex_string(data, size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_PRINTABLE_STRING: - if ((err = der_length_printable_string(data, size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_UTCTIME: - if ((err = der_length_utctime(data, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_GENERALIZEDTIME: - if ((err = der_length_generalizedtime(data, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_UTF8_STRING: - if ((err = der_length_utf8_string(data, size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_CUSTOM_TYPE: - if ((err = der_length_custom_type(&list[i], &x, NULL)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_SET: - case LTC_ASN1_SETOF: - case LTC_ASN1_SEQUENCE: - if ((err = der_length_sequence(data, size, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - y += x; - break; - - case LTC_ASN1_CHOICE: - case LTC_ASN1_EOL: - err = CRYPT_INVALID_ARG; - goto LBL_ERR; - } - } - - if ((err = der_length_asn1_length(y, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - - if (payloadlen != NULL) { - *payloadlen = y; - } - - /* store size */ - *outlen = y + x + 1; - err = CRYPT_OK; - -LBL_ERR: - return err; -} - -#endif diff --git a/src/pk/asn1/der/sequence/der_sequence_free.c b/src/pk/asn1/der/sequence/der_sequence_free.c deleted file mode 100644 index 63908a54..00000000 --- a/src/pk/asn1/der/sequence/der_sequence_free.c +++ /dev/null @@ -1,53 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_sequence_free.c - ASN.1 DER, free's a structure allocated by der_decode_sequence_flexi(), Tom St Denis -*/ - -#ifdef LTC_DER - -/** - Free memory allocated by der_decode_sequence_flexi() - @param in The list to free -*/ -void der_sequence_free(ltc_asn1_list *in) -{ - ltc_asn1_list *l; - - if (!in) return; - - /* walk to the start of the chain */ - while (in->prev != NULL || in->parent != NULL) { - if (in->parent != NULL) { - in = in->parent; - } else { - in = in->prev; - } - } - - /* now walk the list and free stuff */ - while (in != NULL) { - /* is there a child? */ - if (in->child) { - /* disconnect */ - in->child->parent = NULL; - der_sequence_free(in->child); - } - - switch (in->type) { - case LTC_ASN1_SETOF: break; - case LTC_ASN1_INTEGER : if (in->data != NULL) { ltc_mp_clear(in->data); } break; - default : if (in->data != NULL) { XFREE(in->data); } - } - - /* move to next and free current */ - l = in->next; - XFREE(in); - in = l; - } -} - -#endif diff --git a/src/pk/asn1/der/sequence/der_sequence_shrink.c b/src/pk/asn1/der/sequence/der_sequence_shrink.c deleted file mode 100644 index 22634a32..00000000 --- a/src/pk/asn1/der/sequence/der_sequence_shrink.c +++ /dev/null @@ -1,40 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_sequence_shrink.c - Free memory allocated for CONSTRUCTED, SET or SEQUENCE elements by der_decode_sequence_flexi(), Steffen Jaeckel -*/ - -#ifdef LTC_DER - -/** - Free memory allocated for CONSTRUCTED, - SET or SEQUENCE elements by der_decode_sequence_flexi() - @param in The list to shrink -*/ -void der_sequence_shrink(ltc_asn1_list *in) -{ - if (!in) return; - - /* now walk the list and free stuff */ - while (in != NULL) { - /* is there a child? */ - if (in->child) { - der_sequence_shrink(in->child); - } - - switch (in->type) { - case LTC_ASN1_CUSTOM_TYPE: - case LTC_ASN1_SET: - case LTC_ASN1_SEQUENCE : if (in->data != NULL) { XFREE(in->data); in->data = NULL; } break; - default: break; - } - - /* move to next and free current */ - in = in->next; - } -} - -#endif diff --git a/src/pk/asn1/der/set/der_encode_set.c b/src/pk/asn1/der/set/der_encode_set.c deleted file mode 100644 index 4f863e20..00000000 --- a/src/pk/asn1/der/set/der_encode_set.c +++ /dev/null @@ -1,75 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_set.c - ASN.1 DER, Encode a SET, Tom St Denis -*/ - -#ifdef LTC_DER - -/* LTC define to ASN.1 TAG */ -static int s_ltc_to_asn1(ltc_asn1_type v) -{ - return der_asn1_type_to_identifier_map[v]; -} - -#define s_qsort_helper s_set_qsort_helper -static int s_qsort_helper(const void *a, const void *b) -{ - ltc_asn1_list *A = (ltc_asn1_list *)a, *B = (ltc_asn1_list *)b; - int r; - - r = s_ltc_to_asn1(A->type) - s_ltc_to_asn1(B->type); - - /* for QSORT the order is UNDEFINED if they are "equal" which means it is NOT DETERMINISTIC. So we force it to be :-) */ - if (r == 0) { - /* their order in the original list now determines the position */ - return A->used - B->used; - } - return r; -} - -/* - Encode a SET type - @param list The list of items to encode - @param inlen The number of items in the list - @param out [out] The destination - @param outlen [in/out] The size of the output - @return CRYPT_OK on success -*/ -int der_encode_set(const ltc_asn1_list *list, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - ltc_asn1_list *copy; - unsigned long x; - int err; - - /* make copy of list */ - copy = XCALLOC(inlen, sizeof(*copy)); - if (copy == NULL) { - return CRYPT_MEM; - } - - /* fill in used member with index so we can fully sort it */ - for (x = 0; x < inlen; x++) { - copy[x] = list[x]; - copy[x].used = x; - } - - /* sort it by the "type" field */ - XQSORT(copy, inlen, sizeof(*copy), &s_qsort_helper); - - /* call der_encode_sequence_ex() */ - err = der_encode_sequence_ex(copy, inlen, out, outlen, LTC_ASN1_SET); - - /* free list */ - XFREE(copy); - - return err; -} - -#undef s_qsort_helper - -#endif diff --git a/src/pk/asn1/der/set/der_encode_setof.c b/src/pk/asn1/der/set/der_encode_setof.c deleted file mode 100644 index 6cf44b39..00000000 --- a/src/pk/asn1/der/set/der_encode_setof.c +++ /dev/null @@ -1,154 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_setof.c - ASN.1 DER, Encode SET OF, Tom St Denis -*/ - -#ifdef LTC_DER - -struct edge { - unsigned char *start; - unsigned long size; -}; - -#define s_qsort_helper s_setof_qsort_helper -static int s_qsort_helper(const void *a, const void *b) -{ - struct edge *A = (struct edge *)a, *B = (struct edge *)b; - int r; - unsigned long x; - - /* compare min length */ - r = XMEMCMP(A->start, B->start, MIN(A->size, B->size)); - - if (r == 0 && A->size != B->size) { - if (A->size > B->size) { - for (x = B->size; x < A->size; x++) { - if (A->start[x]) { - return 1; - } - } - } else { - for (x = A->size; x < B->size; x++) { - if (B->start[x]) { - return -1; - } - } - } - } - - return r; -} - -/** - Encode a SETOF stucture - @param list The list of items to encode - @param inlen The number of items in the list - @param out [out] The destination - @param outlen [in/out] The size of the output - @return CRYPT_OK on success -*/ -int der_encode_setof(const ltc_asn1_list *list, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long x, y, z; - ptrdiff_t hdrlen; - int err; - struct edge *edges; - unsigned char *ptr, *buf; - - /* check that they're all the same type */ - for (x = 1; x < inlen; x++) { - if (list[x].type != list[x-1].type) { - return CRYPT_INVALID_ARG; - } - } - - /* alloc buffer to store copy of output */ - buf = XCALLOC(1, *outlen); - if (buf == NULL) { - return CRYPT_MEM; - } - - /* encode list */ - if ((err = der_encode_sequence_ex(list, inlen, buf, outlen, LTC_ASN1_SETOF)) != CRYPT_OK) { - XFREE(buf); - return err; - } - - /* allocate edges */ - edges = XCALLOC(inlen, sizeof(*edges)); - if (edges == NULL) { - XFREE(buf); - return CRYPT_MEM; - } - - /* skip header */ - ptr = buf + 1; - - /* now skip length data */ - x = *ptr++; - if (x >= 0x80) { - ptr += (x & 0x7F); - } - - /* get the size of the static header */ - hdrlen = ptr - buf; - - - /* scan for edges */ - x = 0; - while (ptr < (buf + *outlen)) { - /* store start */ - edges[x].start = ptr; - - /* skip type */ - z = 1; - - /* parse length */ - y = ptr[z++]; - if (y < 128) { - edges[x].size = y; - } else { - y &= 0x7F; - edges[x].size = 0; - while (y--) { - edges[x].size = (edges[x].size << 8) | ((unsigned long)ptr[z++]); - } - } - - /* skip content */ - edges[x].size += z; - ptr += edges[x].size; - ++x; - } - - /* sort based on contents (using edges) */ - XQSORT(edges, inlen, sizeof(*edges), &s_qsort_helper); - - /* copy static header */ - XMEMCPY(out, buf, hdrlen); - - /* copy+sort using edges+indecies to output from buffer */ - for (y = (unsigned long)hdrlen, x = 0; x < inlen; x++) { - XMEMCPY(out+y, edges[x].start, edges[x].size); - y += edges[x].size; - } - -#ifdef LTC_CLEAN_STACK - zeromem(buf, *outlen); -#endif - - /* free buffers */ - XFREE(edges); - XFREE(buf); - - return CRYPT_OK; -} - -#undef s_qsort_helper - -#endif diff --git a/src/pk/asn1/der/short_integer/der_decode_short_integer.c b/src/pk/asn1/der/short_integer/der_decode_short_integer.c deleted file mode 100644 index fc01fd15..00000000 --- a/src/pk/asn1/der/short_integer/der_decode_short_integer.c +++ /dev/null @@ -1,65 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_short_integer.c - ASN.1 DER, decode an integer, Tom St Denis -*/ - - -#ifdef LTC_DER - -/** - Read a short integer - @param in The DER encoded data - @param inlen Size of data - @param num [out] The integer to decode - @return CRYPT_OK if successful -*/ -int der_decode_short_integer(const unsigned char *in, unsigned long inlen, unsigned long *num) -{ - unsigned long len, x, y; - - LTC_ARGCHK(num != NULL); - LTC_ARGCHK(in != NULL); - - /* check length */ - if (inlen < 2) { - return CRYPT_INVALID_PACKET; - } - - /* check header */ - x = 0; - if ((in[x++] & 0x1F) != 0x02) { - return CRYPT_INVALID_PACKET; - } - - /* get the packet len */ - len = in[x++]; - - if (x + len > inlen) { - return CRYPT_INVALID_PACKET; - } - - /* an INTEGER holds at least one content octet */ - if (len == 0) { - return CRYPT_INVALID_PACKET; - } - - if (len > sizeof(unsigned long)) { - return CRYPT_OVERFLOW; - } - - /* read number */ - y = 0; - while (len--) { - y = (y<<8) | (unsigned long)in[x++]; - } - *num = y; - - return CRYPT_OK; - -} - -#endif diff --git a/src/pk/asn1/der/short_integer/der_encode_short_integer.c b/src/pk/asn1/der/short_integer/der_encode_short_integer.c deleted file mode 100644 index 3af47c5f..00000000 --- a/src/pk/asn1/der/short_integer/der_encode_short_integer.c +++ /dev/null @@ -1,85 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_short_integer.c - ASN.1 DER, encode an integer, Tom St Denis -*/ - - -#ifdef LTC_DER - -/** - Store a short integer in the range (0,2^32-1) - @param num The integer to encode - @param out [out] The destination for the DER encoded integers - @param outlen [in/out] The max size and resulting size of the DER encoded integers - @return CRYPT_OK if successful -*/ -int der_encode_short_integer(unsigned long num, unsigned char *out, unsigned long *outlen) -{ - unsigned long len, x, y, z; - int err; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* force to 32 bits */ - num &= 0xFFFFFFFFUL; - - /* find out how big this will be */ - if ((err = der_length_short_integer(num, &len)) != CRYPT_OK) { - return err; - } - - if (*outlen < len) { - *outlen = len; - return CRYPT_BUFFER_OVERFLOW; - } - - /* get len of output */ - z = 0; - y = num; - while (y) { - ++z; - y >>= 8; - } - - /* handle zero */ - if (z == 0) { - z = 1; - } - - /* see if msb is set */ - z += (num&(1UL<<((z<<3) - 1))) ? 1 : 0; - - /* adjust the number so the msB is non-zero */ - for (x = 0; (z <= 4) && (x < (4 - z)); x++) { - num <<= 8; - } - - /* store header */ - x = 0; - out[x++] = 0x02; - out[x++] = (unsigned char)z; - - /* if 31st bit is set output a leading zero and decrement count */ - if (z == 5) { - out[x++] = 0; - --z; - } - - /* store values */ - for (y = 0; y < z; y++) { - out[x++] = (unsigned char)((num >> 24) & 0xFF); - num <<= 8; - } - - /* we good */ - *outlen = x; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/short_integer/der_length_short_integer.c b/src/pk/asn1/der/short_integer/der_length_short_integer.c deleted file mode 100644 index aeee9481..00000000 --- a/src/pk/asn1/der/short_integer/der_length_short_integer.c +++ /dev/null @@ -1,52 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_short_integer.c - ASN.1 DER, get length of encoding, Tom St Denis -*/ - - -#ifdef LTC_DER -/** - Gets length of DER encoding of num - @param num The integer to get the size of - @param outlen [out] The length of the DER encoding for the given integer - @return CRYPT_OK if successful -*/ -int der_length_short_integer(unsigned long num, unsigned long *outlen) -{ - unsigned long z, y; - int err; - - LTC_ARGCHK(outlen != NULL); - - /* force to 32 bits */ - num &= 0xFFFFFFFFUL; - - /* get the number of bytes */ - z = 0; - y = num; - while (y) { - ++z; - y >>= 8; - } - - /* handle zero */ - if (z == 0) { - z = 1; - } else if ((num&(1UL<<((z<<3) - 1))) != 0) { - /* in case msb is set */ - ++z; - } - - if ((err = der_length_asn1_length(z, &y)) != CRYPT_OK) { - return err; - } - *outlen = 1 + y + z; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/teletex_string/der_decode_teletex_string.c b/src/pk/asn1/der/teletex_string/der_decode_teletex_string.c deleted file mode 100644 index 6779cd56..00000000 --- a/src/pk/asn1/der/teletex_string/der_decode_teletex_string.c +++ /dev/null @@ -1,72 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_teletex_string.c - ASN.1 DER, encode a teletex STRING -*/ - -#ifdef LTC_DER - -/** - Store a teletex STRING - @param in The DER encoded teletex STRING - @param inlen The size of the DER teletex STRING - @param out [out] The array of octets stored (one per char) - @param outlen [in/out] The number of octets stored - @return CRYPT_OK if successful -*/ -int der_decode_teletex_string(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long x, y, len; - int t, err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* must have header at least */ - if (inlen < 2) { - return CRYPT_INVALID_PACKET; - } - - /* check for 0x14 */ - if ((in[0] & 0x1F) != 0x14) { - return CRYPT_INVALID_PACKET; - } - x = 1; - - /* get the length of the data */ - y = inlen - x; - if ((err = der_decode_asn1_length(in + x, &y, &len)) != CRYPT_OK) { - return err; - } - x += y; - - /* is it too long? */ - if (len > *outlen) { - *outlen = len; - return CRYPT_BUFFER_OVERFLOW; - } - - if (len > (inlen - x)) { - return CRYPT_INVALID_PACKET; - } - - /* read the data */ - for (y = 0; y < len; y++) { - t = der_teletex_value_decode(in[x++]); - if (t == -1) { - return CRYPT_INVALID_ARG; - } - out[y] = t; - } - - *outlen = y; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/teletex_string/der_length_teletex_string.c b/src/pk/asn1/der/teletex_string/der_length_teletex_string.c deleted file mode 100644 index 01b94a3f..00000000 --- a/src/pk/asn1/der/teletex_string/der_length_teletex_string.c +++ /dev/null @@ -1,188 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_teletex_string.c - ASN.1 DER, get length of teletex STRING -*/ - -#ifdef LTC_DER - -static const struct { - int code, value; -} teletex_table[] = { -{ '\0', 0 }, -{ '\a', 7 }, -{ '\b', 8 }, -{ '\t', 9 }, -{ '\n', 10 }, -{ '\v', 11 }, -{ '\f', 12 }, -{ '\r', 13 }, -{ ' ', 32 }, -{ '!', 33 }, -{ '"', 34 }, -{ '%', 37 }, -{ '&', 38 }, -{ '\'', 39 }, -{ '(', 40 }, -{ ')', 41 }, -{ '+', 43 }, -{ ',', 44 }, -{ '-', 45 }, -{ '.', 46 }, -{ '/', 47 }, -{ '0', 48 }, -{ '1', 49 }, -{ '2', 50 }, -{ '3', 51 }, -{ '4', 52 }, -{ '5', 53 }, -{ '6', 54 }, -{ '7', 55 }, -{ '8', 56 }, -{ '9', 57 }, -{ ':', 58 }, -{ ';', 59 }, -{ '<', 60 }, -{ '=', 61 }, -{ '>', 62 }, -{ '?', 63 }, -{ '@', 64 }, -{ 'A', 65 }, -{ 'B', 66 }, -{ 'C', 67 }, -{ 'D', 68 }, -{ 'E', 69 }, -{ 'F', 70 }, -{ 'G', 71 }, -{ 'H', 72 }, -{ 'I', 73 }, -{ 'J', 74 }, -{ 'K', 75 }, -{ 'L', 76 }, -{ 'M', 77 }, -{ 'N', 78 }, -{ 'O', 79 }, -{ 'P', 80 }, -{ 'Q', 81 }, -{ 'R', 82 }, -{ 'S', 83 }, -{ 'T', 84 }, -{ 'U', 85 }, -{ 'V', 86 }, -{ 'W', 87 }, -{ 'X', 88 }, -{ 'Y', 89 }, -{ 'Z', 90 }, -{ '[', 91 }, -{ ']', 93 }, -{ '_', 95 }, -{ 'a', 97 }, -{ 'b', 98 }, -{ 'c', 99 }, -{ 'd', 100 }, -{ 'e', 101 }, -{ 'f', 102 }, -{ 'g', 103 }, -{ 'h', 104 }, -{ 'i', 105 }, -{ 'j', 106 }, -{ 'k', 107 }, -{ 'l', 108 }, -{ 'm', 109 }, -{ 'n', 110 }, -{ 'o', 111 }, -{ 'p', 112 }, -{ 'q', 113 }, -{ 'r', 114 }, -{ 's', 115 }, -{ 't', 116 }, -{ 'u', 117 }, -{ 'v', 118 }, -{ 'w', 119 }, -{ 'x', 120 }, -{ 'y', 121 }, -{ 'z', 122 }, -{ '|', 124 }, -{ ' ', 160 }, -{ 0xa1, 161 }, -{ 0xa2, 162 }, -{ 0xa3, 163 }, -{ '$', 164 }, -{ 0xa5, 165 }, -{ '#', 166 }, -{ 0xa7, 167 }, -{ 0xa4, 168 }, -{ 0xab, 171 }, -{ 0xb0, 176 }, -{ 0xb1, 177 }, -{ 0xb2, 178 }, -{ 0xb3, 179 }, -{ 0xd7, 180 }, -{ 0xb5, 181 }, -{ 0xb6, 182 }, -{ 0xb7, 183 }, -{ 0xf7, 184 }, -{ 0xbb, 187 }, -{ 0xbc, 188 }, -{ 0xbd, 189 }, -{ 0xbe, 190 }, -{ 0xbf, 191 }, -}; - -int der_teletex_char_encode(int c) -{ - int x; - for (x = 0; x < (int)LTC_ARRAY_SIZE(teletex_table); x++) { - if (teletex_table[x].code == c) { - return teletex_table[x].value; - } - } - return -1; -} - -int der_teletex_value_decode(int v) -{ - int x; - for (x = 0; x < (int)LTC_ARRAY_SIZE(teletex_table); x++) { - if (teletex_table[x].value == v) { - return teletex_table[x].code; - } - } - return -1; -} - -/** - Gets length of DER encoding of teletex STRING - @param octets The values you want to encode - @param noctets The number of octets in the string to encode - @param outlen [out] The length of the DER encoding for the given string - @return CRYPT_OK if successful -*/ -int der_length_teletex_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen) -{ - unsigned long x; - int err; - - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(octets != NULL); - - /* scan string for validity */ - for (x = 0; x < noctets; x++) { - if (der_teletex_char_encode(octets[x]) == -1) { - return CRYPT_INVALID_ARG; - } - } - - if ((err = der_length_asn1_length(noctets, &x)) != CRYPT_OK) { - return err; - } - *outlen = 1 + x + noctets; - - return CRYPT_OK; -} - -#endif - diff --git a/src/pk/asn1/der/utctime/der_decode_utctime.c b/src/pk/asn1/der/utctime/der_decode_utctime.c deleted file mode 100644 index 2f1beaab..00000000 --- a/src/pk/asn1/der/utctime/der_decode_utctime.c +++ /dev/null @@ -1,129 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_utctime.c - ASN.1 DER, decode a UTCTIME, Tom St Denis -*/ - -#ifdef LTC_DER - -#ifndef LTC_DER_CHAR_TO_INT -#define LTC_DER_CHAR_TO_INT -static LTC_INLINE int s_char_to_int(unsigned char x) -{ - switch (x) { - case '0': return 0; - case '1': return 1; - case '2': return 2; - case '3': return 3; - case '4': return 4; - case '5': return 5; - case '6': return 6; - case '7': return 7; - case '8': return 8; - case '9': return 9; - default: return 100; - } -} -#endif - -#define DECODE_V(y, max) \ - if (x + 2 > declen) return CRYPT_INVALID_PACKET; \ - y = s_char_to_int(buf[x])*10 + s_char_to_int(buf[x+1]); \ - if (y >= max) return CRYPT_INVALID_PACKET; \ - x += 2; - -/** - Decodes a UTC time structure in DER format (reads all 6 valid encoding formats) - @param in Input buffer - @param inlen Length of input buffer in octets - @param out [out] Destination of UTC time structure - @return CRYPT_OK if successful -*/ -int der_decode_utctime(const unsigned char *in, unsigned long *inlen, - ltc_utctime *out) -{ - unsigned char buf[32] = { 0 }; /* initialize as all zeroes */ - unsigned long x, declen; - int y; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen != NULL); - LTC_ARGCHK(out != NULL); - - /* check header */ - if (*inlen < 2UL || (in[1] >= sizeof(buf)) || ((in[1] + 2UL) > *inlen)) { - return CRYPT_INVALID_PACKET; - } - - /* decode the string */ - for (x = 0; x < in[1]; x++) { - y = der_ia5_value_decode(in[x+2]); - if (y == -1) { - return CRYPT_INVALID_PACKET; - } - buf[x] = y; - } - declen = x; /* octets decoded into buf - the parsing below must not read past them */ - *inlen = 2 + x; - - - /* possible encodings are -YYMMDDhhmmZ -YYMMDDhhmm+hh'mm' -YYMMDDhhmm-hh'mm' -YYMMDDhhmmssZ -YYMMDDhhmmss+hh'mm' -YYMMDDhhmmss-hh'mm' - - So let's do a trivial decode upto [including] mm - */ - - x = 0; - DECODE_V(out->YY, 100); - DECODE_V(out->MM, 13); - DECODE_V(out->DD, 32); - DECODE_V(out->hh, 24); - DECODE_V(out->mm, 60); - - /* clear timezone and seconds info */ - out->off_dir = out->off_hh = out->off_mm = out->ss = 0; - - /* now is it Z, +, - or 0-9 */ - if (x >= declen) { - return CRYPT_INVALID_PACKET; - } - if (buf[x] == 'Z') { - return CRYPT_OK; - } - if (buf[x] == '+' || buf[x] == '-') { - out->off_dir = (buf[x++] == '+') ? 0 : 1; - DECODE_V(out->off_hh, 24); - DECODE_V(out->off_mm, 60); - return CRYPT_OK; - } - - /* decode seconds */ - DECODE_V(out->ss, 60); - - /* now is it Z, +, - */ - if (x >= declen) { - return CRYPT_INVALID_PACKET; - } - if (buf[x] == 'Z') { - return CRYPT_OK; - } - if (buf[x] == '+' || buf[x] == '-') { - out->off_dir = (buf[x++] == '+') ? 0 : 1; - DECODE_V(out->off_hh, 24); - DECODE_V(out->off_mm, 60); - return CRYPT_OK; - } - return CRYPT_INVALID_PACKET; -} - -#undef DECODE_V - -#endif diff --git a/src/pk/asn1/der/utctime/der_encode_utctime.c b/src/pk/asn1/der/utctime/der_encode_utctime.c deleted file mode 100644 index a48972ea..00000000 --- a/src/pk/asn1/der/utctime/der_encode_utctime.c +++ /dev/null @@ -1,72 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_utctime.c - ASN.1 DER, encode a UTCTIME, Tom St Denis -*/ - -#ifdef LTC_DER - -#define STORE_V(y) \ - out[x++] = der_ia5_char_encode(baseten[(y/10) % 10]); \ - out[x++] = der_ia5_char_encode(baseten[y % 10]); - -/** - Encodes a UTC time structure in DER format - @param utctime The UTC time structure to encode - @param out The destination of the DER encoding of the UTC time structure - @param outlen [in/out] The length of the DER encoding - @return CRYPT_OK if successful -*/ -int der_encode_utctime(const ltc_utctime *utctime, - unsigned char *out, unsigned long *outlen) -{ - const char * const baseten = "0123456789"; - unsigned long x, tmplen; - int err; - - LTC_ARGCHK(utctime != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((err = der_length_utctime(utctime, &tmplen)) != CRYPT_OK) { - return err; - } - if (tmplen > *outlen) { - *outlen = tmplen; - return CRYPT_BUFFER_OVERFLOW; - } - - /* store header */ - out[0] = 0x17; - - /* store values */ - x = 2; - STORE_V(utctime->YY); - STORE_V(utctime->MM); - STORE_V(utctime->DD); - STORE_V(utctime->hh); - STORE_V(utctime->mm); - STORE_V(utctime->ss); - - if (utctime->off_mm || utctime->off_hh) { - out[x++] = der_ia5_char_encode(utctime->off_dir ? '-' : '+'); - STORE_V(utctime->off_hh); - STORE_V(utctime->off_mm); - } else { - out[x++] = der_ia5_char_encode('Z'); - } - - /* store length */ - out[1] = (unsigned char)(x - 2); - - /* all good let's return */ - *outlen = x; - return CRYPT_OK; -} - -#undef STORE_V - -#endif diff --git a/src/pk/asn1/der/utctime/der_length_utctime.c b/src/pk/asn1/der/utctime/der_length_utctime.c deleted file mode 100644 index b93c25f8..00000000 --- a/src/pk/asn1/der/utctime/der_length_utctime.c +++ /dev/null @@ -1,34 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_utctime.c - ASN.1 DER, get length of UTCTIME, Tom St Denis -*/ - -#ifdef LTC_DER - -/** - Gets length of DER encoding of UTCTIME - @param utctime The UTC time structure to get the size of - @param outlen [out] The length of the DER encoding - @return CRYPT_OK if successful -*/ -int der_length_utctime(const ltc_utctime *utctime, unsigned long *outlen) -{ - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(utctime != NULL); - - if (utctime->off_hh == 0 && utctime->off_mm == 0) { - /* we encode as YYMMDDhhmmssZ */ - *outlen = 2 + 13; - } else { - /* we encode as YYMMDDhhmmss{+|-}hh'mm' */ - *outlen = 2 + 17; - } - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/utf8/der_decode_utf8_string.c b/src/pk/asn1/der/utf8/der_decode_utf8_string.c deleted file mode 100644 index ee543ddb..00000000 --- a/src/pk/asn1/der/utf8/der_decode_utf8_string.c +++ /dev/null @@ -1,118 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_decode_utf8_string.c - ASN.1 DER, encode a UTF8 STRING, Tom St Denis -*/ - - -#ifdef LTC_DER - -/** - Decode a UTF8 STRING and recover an array of unicode characters. - @param in The DER encoded UTF8 STRING - @param inlen The size of the DER UTF8 STRING - @param out [out] The array of unicode characters (wchar_t*) - @param outlen [in/out] The number of unicode characters in the array - @return CRYPT_OK if successful -*/ -int der_decode_utf8_string(const unsigned char *in, unsigned long inlen, - wchar_t *out, unsigned long *outlen) -{ - wchar_t tmp; - unsigned long x, y, z, len; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* must have header at least */ - if (inlen < 2) { - return CRYPT_INVALID_PACKET; - } - - /* check for 0x0C */ - if ((in[0] & 0x1F) != 0x0C) { - return CRYPT_INVALID_PACKET; - } - x = 1; - - /* get the length of the data */ - y = inlen - x; - if ((err = der_decode_asn1_length(in + x, &y, &len)) != CRYPT_OK) { - return err; - } - x += y; - - if (len > (inlen - x)) { - return CRYPT_INVALID_PACKET; - } - - /* proceed to recover unicode characters from utf8 data. - for reference see Section 3 of RFC 3629: - - https://tools.ietf.org/html/rfc3629#section-3 - */ - len += x; - for (y = 0; x < len; ) { - /* read first byte */ - tmp = in[x++]; - - /* a unicode character is recovered from a sequence of 1 to 4 utf8 bytes. - the form of those bytes must match a row in the following table: - - 0xxxxxxx - 110xxxxx 10xxxxxx - 1110xxxx 10xxxxxx 10xxxxxx - 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - - the number of leading ones in the first byte (0,2,3,4) determines the - number of remaining bytes to read (0,1,2,3) - */ - - /* determine z, the number of leading ones. - this is done by left-shifting tmp, which clears the ms-bits */ - for (z = 0; (tmp & 0x80) && (z <= 4); z++, tmp = (tmp << 1) & 0xFF); - - /* z should be in {0,2,3,4} */ - if (z == 1 || z > 4) { - return CRYPT_INVALID_PACKET; - } - - /* right-shift tmp to restore least-sig bits */ - tmp >>= z; - - /* now update z so it equals the number of additional bytes to read */ - if (z > 0) { --z; } - - if (x + z > len) { - return CRYPT_INVALID_PACKET; - } - - /* read remaining bytes */ - while (z-- != 0) { - if ((in[x] & 0xC0) != 0x80) { - return CRYPT_INVALID_PACKET; - } - tmp = (tmp << 6) | ((wchar_t)in[x++] & 0x3F); - } - - if (y < *outlen) { - out[y] = tmp; - } - y++; - } - if (y > *outlen) { - err = CRYPT_BUFFER_OVERFLOW; - } else { - err = CRYPT_OK; - } - *outlen = y; - - return err; -} - -#endif diff --git a/src/pk/asn1/der/utf8/der_encode_utf8_string.c b/src/pk/asn1/der/utf8/der_encode_utf8_string.c deleted file mode 100644 index f2c07c2a..00000000 --- a/src/pk/asn1/der/utf8/der_encode_utf8_string.c +++ /dev/null @@ -1,75 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_encode_utf8_string.c - ASN.1 DER, encode a UTF8 STRING, Tom St Denis -*/ - - -#ifdef LTC_DER - -/** - Store an UTF8 STRING - @param in The array of UTF8 to store (one per wchar_t) - @param inlen The number of UTF8 to store - @param out [out] The destination for the DER encoded UTF8 STRING - @param outlen [in/out] The max size and resulting size of the DER UTF8 STRING - @return CRYPT_OK if successful -*/ -int der_encode_utf8_string(const wchar_t *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long x, y, len; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* get the size */ - for (x = len = 0; x < inlen; x++) { - if (!der_utf8_valid_char(in[x])) return CRYPT_INVALID_ARG; - len += der_utf8_charsize(in[x]); - } - if ((err = der_length_asn1_length(len, &x)) != CRYPT_OK) { - return err; - } - x += len + 1; - - /* too big? */ - if (x > *outlen) { - *outlen = x; - return CRYPT_BUFFER_OVERFLOW; - } - - /* encode the header+len */ - x = 0; - out[x++] = 0x0C; - - y = *outlen - x; - if ((err = der_encode_asn1_length(len, out + x, &y)) != CRYPT_OK) { - return err; - } - x += y; - - /* store UTF8 */ - for (y = 0; y < inlen; y++) { - switch (der_utf8_charsize(in[y])) { - case 1: out[x++] = (unsigned char)in[y]; break; - case 2: out[x++] = 0xC0 | ((in[y] >> 6) & 0x1F); out[x++] = 0x80 | (in[y] & 0x3F); break; - case 3: out[x++] = 0xE0 | ((in[y] >> 12) & 0x0F); out[x++] = 0x80 | ((in[y] >> 6) & 0x3F); out[x++] = 0x80 | (in[y] & 0x3F); break; -#if !defined(LTC_WCHAR_MAX) || LTC_WCHAR_MAX > 0xFFFF - case 4: out[x++] = 0xF0 | ((in[y] >> 18) & 0x07); out[x++] = 0x80 | ((in[y] >> 12) & 0x3F); out[x++] = 0x80 | ((in[y] >> 6) & 0x3F); out[x++] = 0x80 | (in[y] & 0x3F); break; -#endif - } - } - - /* return length */ - *outlen = x; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/utf8/der_length_utf8_string.c b/src/pk/asn1/der/utf8/der_length_utf8_string.c deleted file mode 100644 index 424002b2..00000000 --- a/src/pk/asn1/der/utf8/der_length_utf8_string.c +++ /dev/null @@ -1,81 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file der_length_utf8_string.c - ASN.1 DER, get length of UTF8 STRING, Tom St Denis -*/ - -#ifdef LTC_DER - -/** Return the size in bytes of a UTF-8 character - @param c The UTF-8 character to measure - @return The size in bytes -*/ -unsigned long der_utf8_charsize(const wchar_t c) -{ - if (c <= 0x7F) { - return 1; - } - if (c <= 0x7FF) { - return 2; - } -#if LTC_WCHAR_MAX == 0xFFFF - return 3; -#else - if (c <= 0xFFFF) { - return 3; - } - return 4; -#endif -} - -/** - Test whether the given code point is valid character - @param c The UTF-8 character to test - @return 1 - valid, 0 - invalid -*/ -int der_utf8_valid_char(const wchar_t c) -{ - LTC_UNUSED_PARAM(c); -#if !defined(LTC_WCHAR_MAX) || LTC_WCHAR_MAX > 0xFFFF - if (c > 0x10FFFF) return 0; -#endif -#if LTC_WCHAR_MAX != 0xFFFF && LTC_WCHAR_MAX != 0xFFFFFFFF - if (c < 0) return 0; -#endif - return 1; -} - -/** - Gets length of DER encoding of UTF8 STRING - @param in The characters to measure the length of - @param noctets The number of octets in the string to encode - @param outlen [out] The length of the DER encoding for the given string - @return CRYPT_OK if successful -*/ -int der_length_utf8_string(const wchar_t *in, unsigned long noctets, unsigned long *outlen) -{ - unsigned long x, len; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(outlen != NULL); - - len = 0; - for (x = 0; x < noctets; x++) { - if (!der_utf8_valid_char(in[x])) return CRYPT_INVALID_ARG; - len += der_utf8_charsize(in[x]); - } - - if ((err = der_length_asn1_length(len, &x)) != CRYPT_OK) { - return err; - } - *outlen = 1 + x + len; - - return CRYPT_OK; -} - -#endif - diff --git a/src/pk/asn1/oid/pk_get.c b/src/pk/asn1/oid/pk_get.c deleted file mode 100644 index 11f58283..00000000 --- a/src/pk/asn1/oid/pk_get.c +++ /dev/null @@ -1,126 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_DER - -typedef struct { - enum ltc_oid_id id; - enum ltc_pka_id pka; - const char *hash; - const char *oid; -} oid_table_entry; - -static const oid_table_entry pka_oids[] = { - { LTC_OID_UNDEF, LTC_PKA_UNDEF, NULL, NULL }, - { LTC_OID_RSA, LTC_PKA_RSA, NULL, "1.2.840.113549.1.1.1" }, - { LTC_OID_DSA, LTC_PKA_DSA, NULL, "1.2.840.10040.4.1" }, - { LTC_OID_EC, LTC_PKA_EC, NULL, "1.2.840.10045.2.1" }, - { LTC_OID_EC_PRIMEF, LTC_PKA_EC, NULL, "1.2.840.10045.1.1" }, - { LTC_OID_X25519, LTC_PKA_X25519, NULL, "1.3.101.110" }, - { LTC_OID_ED25519, LTC_PKA_ED25519, NULL, "1.3.101.112" }, - { LTC_OID_X448, LTC_PKA_X448, NULL, "1.3.101.111" }, - { LTC_OID_ED448, LTC_PKA_ED448, NULL, "1.3.101.113" }, - { LTC_OID_DH, LTC_PKA_DH, NULL, "1.2.840.113549.1.3.1" }, - { LTC_OID_RSA_OAEP, LTC_PKA_RSA, NULL, "1.2.840.113549.1.1.7" }, - { LTC_OID_RSA_MGF1, LTC_PKA_RSA, NULL, "1.2.840.113549.1.1.8" }, - { LTC_OID_RSA_PSS, LTC_PKA_RSA_PSS, NULL, "1.2.840.113549.1.1.10" }, -}; - -static LTC_INLINE const oid_table_entry* s_get_entry(enum ltc_oid_id id) -{ - if (id < LTC_OID_NUM) - return &pka_oids[id]; - return NULL; -} - -/* - Returns the OID requested. - @return CRYPT_OK if valid -*/ -int pk_get_oid(enum ltc_oid_id id, const char **st) -{ - const oid_table_entry* e = s_get_entry(id); - LTC_ARGCHK(st != NULL); - if (e != NULL) { - *st = e->oid; - return CRYPT_OK; - } - return CRYPT_INVALID_ARG; -} - -static LTC_INLINE int s_get_values(enum ltc_oid_id id, enum ltc_pka_id *pka, const char **hash) -{ - const oid_table_entry* e = s_get_entry(id); - LTC_ARGCHK(pka != NULL); - if (e != NULL) { - *pka = e->pka; - if (hash) { - *hash = e->hash; - } else if (e->hash) { - /* If we don't want the hash result, but the entry has a hash, we're most likely - * confused and we prefer to stop processing then, instead of continuing with a - * maybe wrong assumption. - */ - return CRYPT_INVALID_ARG; - } - return CRYPT_OK; - } - return CRYPT_INVALID_ARG; -} - -/* - Returns the PKA ID requested. - @return CRYPT_OK if valid -*/ -int pk_get_pka_id(enum ltc_oid_id id, enum ltc_pka_id *pka) -{ - return s_get_values(id, pka, NULL); -} - -/* - Returns the OID ID requested. - @return CRYPT_OK if valid -*/ -int pk_get_oid_id(enum ltc_pka_id pka, enum ltc_oid_id *oid) -{ - unsigned int i; - LTC_ARGCHK(oid != NULL); - for (i = 1; i < LTC_ARRAY_SIZE(pka_oids); ++i) { - if (pka_oids[i].pka == pka) { - *oid = pka_oids[i].id; - return CRYPT_OK; - } - } - return CRYPT_INVALID_ARG; -} - -/* - Returns the PKA ID of an OID. - @return CRYPT_OK if valid -*/ -int pk_get_oid_from_asn1(const ltc_asn1_list *oid, enum ltc_oid_id *id) -{ - unsigned long i; - char tmp[LTC_OID_MAX_STRLEN] = { 0 }; - int err; - - LTC_ARGCHK(oid != NULL); - LTC_ARGCHK(id != NULL); - - if (oid->type != LTC_ASN1_OBJECT_IDENTIFIER) return CRYPT_INVALID_ARG; - - i = sizeof(tmp); - if ((err = pk_oid_num_to_str(oid->data, oid->size, tmp, &i)) != CRYPT_OK) { - return err; - } - - for (i = 1; i < LTC_ARRAY_SIZE(pka_oids); ++i) { - if (XSTRCMP(pka_oids[i].oid, tmp) == 0) { - *id = pka_oids[i].id; - return CRYPT_OK; - } - } - return CRYPT_INVALID_ARG; -} -#endif diff --git a/src/pk/asn1/oid/pk_oid_cmp.c b/src/pk/asn1/oid/pk_oid_cmp.c deleted file mode 100644 index a62d2c63..00000000 --- a/src/pk/asn1/oid/pk_oid_cmp.c +++ /dev/null @@ -1,44 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/* - Compare an OID string to an array of `unsigned long`. - @return CRYPT_OK if equal -*/ -int pk_oid_cmp_with_ulong(const char *o1, const unsigned long *o2, unsigned long o2size) -{ - unsigned long i; - char tmp[LTC_OID_MAX_STRLEN] = { 0 }; - int err; - - if (o1 == NULL || o2 == NULL) return CRYPT_ERROR; - - i = sizeof(tmp); - if ((err = pk_oid_num_to_str(o2, o2size, tmp, &i)) != CRYPT_OK) { - return err; - } - - if (XSTRCMP(o1, tmp) != 0) { - return CRYPT_PK_INVALID_TYPE; - } - - return CRYPT_OK; -} - -#ifdef LTC_DER - -/* - Compare an OID string to an OID element decoded from ASN.1. - @return CRYPT_OK if equal -*/ -int pk_oid_cmp_with_asn1(const char *o1, const ltc_asn1_list *o2) -{ - if (o1 == NULL || o2 == NULL) return CRYPT_ERROR; - - if (o2->type != LTC_ASN1_OBJECT_IDENTIFIER) return CRYPT_INVALID_ARG; - - return pk_oid_cmp_with_ulong(o1, o2->data, o2->size); -} - -#endif diff --git a/src/pk/asn1/oid/pk_oid_str.c b/src/pk/asn1/oid/pk_oid_str.c deleted file mode 100644 index 33459f63..00000000 --- a/src/pk/asn1/oid/pk_oid_str.c +++ /dev/null @@ -1,105 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -int pk_oid_str_to_num(const char *OID, unsigned long *oid, unsigned long *oidlen) -{ - unsigned long i, j, limit, oid_j; - - LTC_ARGCHK(oidlen != NULL); - - limit = *oidlen; - *oidlen = 0; /* make sure that we return zero oidlen on error */ - if (oid != NULL) { - XMEMSET(oid, 0, sizeof(*oid) * limit); - } - if (OID == NULL) return CRYPT_OK; - if (OID[0] == '\0') return CRYPT_OK; - - for (i = 0, j = 0; OID[i] != '\0'; i++) { - if (OID[i] == '.') { - if (++j >= limit) continue; - } - else if ((OID[i] >= '0') && (OID[i] <= '9')) { - if ((j >= limit) || (oid == NULL)) continue; - oid_j = oid[j]; - oid[j] = oid[j] * 10 + (OID[i] - '0'); - if (oid[j] < oid_j) return CRYPT_OVERFLOW; - } - else { - return CRYPT_ERROR; - } - } - if (j == 0) return CRYPT_ERROR; - *oidlen = j + 1; - if (j >= limit || oid == NULL) { - return CRYPT_BUFFER_OVERFLOW; - } - return CRYPT_OK; -} - -typedef struct num_to_str { - int err; - char *wr; - unsigned long max_len, res_len; -} num_to_str; - -static LTC_INLINE void s_wr(char c, num_to_str *w) -{ - if (w->res_len == ULONG_MAX) { - w->err = CRYPT_OVERFLOW; - return; - } - w->res_len++; - if (w->res_len > w->max_len) w->wr = NULL; - if (w->wr) w->wr[w->max_len - w->res_len] = c; -} - -int pk_oid_num_to_str(const unsigned long *oid, unsigned long oidlen, char *OID, unsigned long *outlen) -{ - int i; - num_to_str w; - unsigned long j; - - LTC_ARGCHK(oid != NULL); - LTC_ARGCHK(oidlen < INT_MAX); - LTC_ARGCHK(outlen != NULL); - - if (OID == NULL || *outlen == 0) { - w.max_len = ULONG_MAX; - w.wr = NULL; - } else { - w.max_len = *outlen; - w.wr = OID; - } - w.res_len = 0; - w.err = CRYPT_OK; - - s_wr('\0', &w); - for (i = oidlen; i --> 0;) { - j = oid[i]; - if (j == 0) { - s_wr('0', &w); - } else { - while (j > 0) { - s_wr('0' + (j % 10), &w); - j /= 10; - } - } - if (i > 0) { - s_wr('.', &w); - } - } - if (w.err != CRYPT_OK) { - return w.err; - } - if (*outlen < w.res_len || OID == NULL) { - *outlen = w.res_len; - return CRYPT_BUFFER_OVERFLOW; - } - LTC_ARGCHK(OID != NULL); - XMEMMOVE(OID, OID + (w.max_len - w.res_len), w.res_len); - *outlen = w.res_len; - return CRYPT_OK; -} diff --git a/src/pk/asn1/pkcs8/pkcs8_decode_flexi.c b/src/pk/asn1/pkcs8/pkcs8_decode_flexi.c deleted file mode 100644 index 42eac451..00000000 --- a/src/pk/asn1/pkcs8/pkcs8_decode_flexi.c +++ /dev/null @@ -1,106 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_PKCS_8 - -/** - PKCS#8 decrypt if necessary & flexi-decode - - @param in Pointer to the ASN.1 encoded input data - @param inlen Length of the input data - @param pwd Pointer to the password that was used when encrypting - @param pwdlen Length of the password - @param decoded_list Pointer to a pointer for the flexi-decoded list - @return CRYPT_OK on success -*/ -int pkcs8_decode_flexi(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - ltc_asn1_list **decoded_list) -{ - unsigned long len = inlen; - unsigned long dec_size; - unsigned char *dec_data = NULL; - ltc_asn1_list *l = NULL; - int err; - pbes_arg pbes; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(decoded_list != NULL); - - XMEMSET(&pbes, 0, sizeof(pbes)); - - *decoded_list = NULL; - if ((err = der_decode_sequence_flexi(in, &len, &l)) == CRYPT_OK) { - /* the following "if" detects whether it is encrypted or not */ - /* PKCS8 Setup - * 0:d=0 hl=4 l= 380 cons: SEQUENCE - * 4:d=1 hl=2 l= 78 cons: SEQUENCE - * 6:d=2 hl=2 l= 9 prim: OBJECT :OID indicating PBES1 or PBES2 (== *lalgoid) - * 17:d=2 hl=2 l= 65 cons: SEQUENCE - * Stuff in between is dependent on whether it's PBES1 or PBES2 - * 84:d=1 hl=4 l= 296 prim: OCTET STRING :bytes (== encrypted data) - */ - if (l->type == LTC_ASN1_SEQUENCE && - LTC_ASN1_IS_TYPE(l->child, LTC_ASN1_SEQUENCE) && - LTC_ASN1_IS_TYPE(l->child->child, LTC_ASN1_OBJECT_IDENTIFIER) && - LTC_ASN1_IS_TYPE(l->child->child->next, LTC_ASN1_SEQUENCE) && - LTC_ASN1_IS_TYPE(l->child->next, LTC_ASN1_OCTET_STRING)) { - ltc_asn1_list *lalgoid = l->child->child; - - if ((pw_ctx == NULL) || (pw_ctx->callback == NULL)) { - err = CRYPT_PW_CTX_MISSING; - goto LBL_DONE; - } - - if (pbes1_extract(lalgoid, &pbes) == CRYPT_OK) { - /* Successfully extracted PBES1 parameters */ - } else if (pbes2_extract(lalgoid, &pbes) == CRYPT_OK) { - /* Successfully extracted PBES2 parameters */ - } else { - /* unsupported encryption */ - err = CRYPT_INVALID_PACKET; - goto LBL_DONE; - } - - if (pw_ctx->callback(&pbes.pw.pw, &pbes.pw.l, pw_ctx->userdata)) { - err = CRYPT_ERROR; - goto LBL_DONE; - } - - pbes.enc_data = l->child->next; - - dec_size = pbes.enc_data->size; - if ((dec_data = XMALLOC(dec_size)) == NULL) { - err = CRYPT_MEM; - goto LBL_DONE; - } - - if ((err = pbes_decrypt(&pbes, dec_data, &dec_size)) != CRYPT_OK) goto LBL_DONE; - - der_free_sequence_flexi(l); - l = NULL; - err = der_decode_sequence_flexi(dec_data, &dec_size, &l); - if (err != CRYPT_OK) goto LBL_DONE; - *decoded_list = l; - } - else { - /* not encrypted */ - err = CRYPT_OK; - *decoded_list = l; - } - /* Set l to NULL so it won't be free'd */ - l = NULL; - } - -LBL_DONE: - if (dec_data) { - zeromem(dec_data, dec_size); - XFREE(dec_data); - } - password_free(&pbes.pw, pw_ctx); - if (l) der_free_sequence_flexi(l); - return err; -} - -#endif diff --git a/src/pk/asn1/pkcs8/pkcs8_get.c b/src/pk/asn1/pkcs8/pkcs8_get.c deleted file mode 100644 index 9dc34ab3..00000000 --- a/src/pk/asn1/pkcs8/pkcs8_get.c +++ /dev/null @@ -1,59 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pkcs8_get.c - PKCS#8 utility functions -*/ - -#ifdef LTC_PKCS_8 - -int pkcs8_get_children(const ltc_asn1_list *decoded_list, enum ltc_oid_id *pka, ltc_asn1_list **alg_id, ltc_asn1_list **priv_key) -{ - int err; - unsigned long n; - der_flexi_check flexi_should[4]; - ltc_asn1_list *seq_l = NULL, *priv_l = NULL, *version = NULL; - - LTC_ARGCHK(ltc_mp.name != NULL); - - if (alg_id == NULL) alg_id = &seq_l; - if (priv_key == NULL) priv_key = &priv_l; - - /* der_flexi_sequence_cmp() writes only matched outputs, so unmatched ones stay NULL */ - *alg_id = NULL; - *priv_key = NULL; - - /* Setup for basic structure */ - n=0; - LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_INTEGER, &version); - LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_SEQUENCE, alg_id); - LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_OCTET_STRING, priv_key); - LTC_SET_DER_FLEXI_CHECK(flexi_should, n, LTC_ASN1_EOL, NULL); - - err = der_flexi_sequence_cmp(decoded_list, flexi_should); - switch (err) { - case CRYPT_OK: - case CRYPT_INPUT_TOO_LONG: - /* If there are attributes added after the private_key it is tagged with version 1 and - * we get an 'input too long' error but the rest is already decoded and can be - * handled the same as for version 0 - */ - if (version == NULL) { - return CRYPT_INVALID_PACKET; - } - if (ltc_mp_cmp_d(version->data, 0) != LTC_MP_EQ && ltc_mp_cmp_d(version->data, 1) != LTC_MP_EQ) { - return CRYPT_INVALID_PACKET; - } - break; - default: - return err; - } - if ((*alg_id == NULL) || ((*alg_id)->child == NULL) || (*priv_key == NULL)) { - return CRYPT_INVALID_PACKET; - } - return pk_get_oid_from_asn1((*alg_id)->child, pka); -} - -#endif /* LTC_PKCS_8 */ diff --git a/src/pk/asn1/x509/x509_decode_public_key_from_certificate.c b/src/pk/asn1/x509/x509_decode_public_key_from_certificate.c deleted file mode 100644 index b96db443..00000000 --- a/src/pk/asn1/x509/x509_decode_public_key_from_certificate.c +++ /dev/null @@ -1,100 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x509_decode_public_key_from_certificate.c - ASN.1 DER/X.509, decode a certificate -*/ - -#ifdef LTC_DER - -/** - Process the public key from the SubjectPublicKeyInfo of a X.509 certificate - @param in The input buffer - @param inlen The length of the input buffer - @param algorithm One out of the enum #public_key_algorithms - @param param_type The parameters' type out of the enum ltc_asn1_type - @param parameters The parameters to include - @param parameters_len [in/out] The number of parameters to include - @param callback The callback - @param ctx The context passed to the callback - @return CRYPT_OK on success -*/ -int x509_process_public_key_from_spki(const unsigned char *in, unsigned long inlen, - enum ltc_oid_id algorithm, ltc_asn1_type param_type, - ltc_asn1_list* parameters, unsigned long *parameters_len, - public_key_decode_cb callback, void *key) -{ - int err; - unsigned char *tmpbuf = NULL; - unsigned long tmpbuf_len; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(callback != NULL); - - if (algorithm == LTC_OID_EC) { - err = callback(in, inlen, key); - } else { - - tmpbuf_len = inlen; - tmpbuf = XCALLOC(1, tmpbuf_len); - if (tmpbuf == NULL) { - return CRYPT_MEM; - } - - err = x509_decode_subject_public_key_info(in, inlen, - algorithm, tmpbuf, &tmpbuf_len, - param_type, parameters, parameters_len); - if (err == CRYPT_OK) { - err = callback(tmpbuf, tmpbuf_len, key); - } - } - - if (tmpbuf != NULL) XFREE(tmpbuf); - - return err; -} - -/** - Try to decode the public key from a X.509 certificate - @param in The input buffer - @param inlen The length of the input buffer - @param algorithm One out of the enum #public_key_algorithms - @param param_type The parameters' type out of the enum ltc_asn1_type - @param parameters The parameters to include - @param parameters_len [in/out] The number of parameters to include - @param callback The callback - @param ctx The context passed to the callback - @return CRYPT_OK on success, - CRYPT_NOP if no SubjectPublicKeyInfo was found, - another error if decoding or memory allocation failed -*/ -int x509_decode_public_key_from_certificate(const unsigned char *in, unsigned long inlen, - enum ltc_oid_id algorithm, ltc_asn1_type param_type, - ltc_asn1_list* parameters, unsigned long *parameters_len, - public_key_decode_cb callback, void *key) -{ - int err; - ltc_asn1_list *decoded_list; - const ltc_asn1_list *spki; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen != 0); - LTC_ARGCHK(callback != NULL); - - if ((err = x509_decode_spki(in, inlen, &decoded_list, &spki)) != CRYPT_OK) { - return err; - } - - err = x509_process_public_key_from_spki(spki->data, spki->size, - algorithm, param_type, - parameters, parameters_len, - callback, key); - - if (decoded_list) der_free_sequence_flexi(decoded_list); - - return err; -} - -#endif diff --git a/src/pk/asn1/x509/x509_decode_spki.c b/src/pk/asn1/x509/x509_decode_spki.c deleted file mode 100644 index 144441cd..00000000 --- a/src/pk/asn1/x509/x509_decode_spki.c +++ /dev/null @@ -1,102 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x509_decode_public_key_from_certificate.c - ASN.1 DER/X.509, decode a SubjectPublicKeyInfo -*/ - -#ifdef LTC_DER - -/* Check if it looks like a SubjectPublicKeyInfo */ -#define LOOKS_LIKE_SPKI(l) ((l) != NULL) \ -&& ((l)->type == LTC_ASN1_SEQUENCE) \ -&& ((l)->child != NULL) \ -&& ((l)->child->type == LTC_ASN1_OBJECT_IDENTIFIER) \ -&& ((l)->next != NULL) \ -&& ((l)->next->type == LTC_ASN1_BIT_STRING) - -/** - DER decode a X.509 certificate and return the SubjectPublicKeyInfo - @param in The input buffer - @param inlen The length of the input buffer - @param out [out] A pointer to the decoded linked list (you take ownership of this one and - `der_free_sequence_flexi()` it when you're done) - @param spki [out] A pointer to the SubjectPublicKeyInfo - @return CRYPT_OK on success, CRYPT_NOP if no SubjectPublicKeyInfo was found, another error if decoding failed -*/ -int x509_decode_spki(const unsigned char *in, unsigned long inlen, ltc_asn1_list **out, const ltc_asn1_list **spki) -{ - int err; - unsigned long tmp_inlen, n, element_is_spki; - ltc_asn1_list *decoded_list = NULL, *l; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen != 0); - - tmp_inlen = inlen; - if ((err = der_decode_sequence_flexi(in, &tmp_inlen, &decoded_list)) == CRYPT_OK) { - l = decoded_list; - - err = CRYPT_NOP; - - /* Move 2 levels up in the tree - SEQUENCE - SEQUENCE - ... - */ - if ((l->type == LTC_ASN1_SEQUENCE) && (l->child != NULL)) { - l = l->child; - if ((l->type == LTC_ASN1_SEQUENCE) && (l->child != NULL)) { - /* TBSCertificate ::= SEQUENCE { - * version [0] EXPLICIT Version DEFAULT v1, - * serialNumber CertificateSerialNumber, - * signature AlgorithmIdentifier, - * issuer Name, - * validity Validity, - * subject Name, - * subjectPublicKeyInfo SubjectPublicKeyInfo, - * issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, - * -- If present, version MUST be v2 or v3 - * subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, - * -- If present, version MUST be v2 or v3 - * extensions [3] EXPLICIT Extensions OPTIONAL - * -- If present, version MUST be v3 - * } - */ - l = l->child; - - /* `l` points now either to 'version' or 'serialNumber', depending on - * whether 'version' is included or defaults to 'v1'. - * 'version' is represented as a LTC_ASN1_CUSTOM_TYPE - * 'serialNumber' is represented as an LTC_ASN1_INTEGER - * Decide now whether to move 5 or 6 elements forward until - * `l` should point to subjectPublicKeyInfo. - */ - if (l->type == LTC_ASN1_CUSTOM_TYPE) - element_is_spki = 6; - else - element_is_spki = 5; - for (n = 0; n < element_is_spki && l; ++n) { - l = l->next; - } - /* The additional check for l->data is there to make sure - * we won't try to decode a list that has been 'shrunk' - */ - if ((l != NULL) - && (l->type == LTC_ASN1_SEQUENCE) - && (l->data != NULL) - && LOOKS_LIKE_SPKI(l->child)) { - *out = decoded_list; - *spki = l; - return CRYPT_OK; - } - } - } - } - if (decoded_list) der_free_sequence_flexi(decoded_list); - return err; -} - -#endif diff --git a/src/pk/asn1/x509/x509_decode_subject_public_key_info.c b/src/pk/asn1/x509/x509_decode_subject_public_key_info.c deleted file mode 100644 index 34c8eac7..00000000 --- a/src/pk/asn1/x509/x509_decode_subject_public_key_info.c +++ /dev/null @@ -1,121 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x509_decode_subject_public_key_info.c - ASN.1 DER/X.509, encode a SubjectPublicKeyInfo structure --nmav -*/ - -#ifdef LTC_DER - -/* AlgorithmIdentifier := SEQUENCE { - * algorithm OBJECT IDENTIFIER, - * parameters ANY DEFINED BY algorithm - * } - * - * SubjectPublicKeyInfo := SEQUENCE { - * algorithm AlgorithmIdentifier, - * subjectPublicKey BIT STRING - * } - */ -/** - Decode a SubjectPublicKeyInfo - @param in The input buffer - @param inlen The length of the input buffer - @param algorithm One out of the enum #public_key_algorithms - @param public_key The buffer for the public key - @param public_key_len [in/out] The length of the public key buffer and the written length - @param parameters_type The parameters' type out of the enum ltc_asn1_type - @param parameters The parameters to include - @param parameters_len [in/out] The number of parameters to include - @return CRYPT_OK on success -*/ -int x509_decode_subject_public_key_info(const unsigned char *in, unsigned long inlen, - enum ltc_oid_id algorithm, void *public_key, unsigned long *public_key_len, - ltc_asn1_type parameters_type, ltc_asn1_list* parameters, unsigned long *parameters_len) -{ - int err; - unsigned long len, alg_id_num, tmplen; - const char* oid; - unsigned char *tmpbuf; - unsigned long tmpoid[16]; - unsigned long *_parameters_len; - ltc_asn1_list alg_id[2]; - ltc_asn1_list subject_pubkey[2]; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen != 0); - LTC_ARGCHK(public_key_len != NULL); - - if (parameters_type != LTC_ASN1_EOL) { - if ((parameters == NULL) || (parameters_len == NULL)) { - tmplen = 0; - _parameters_len = &tmplen; - } else { - _parameters_len = parameters_len; - } - } - - err = pk_get_oid(algorithm, &oid); - if (err != CRYPT_OK) { - return err; - } - - /* see if the OpenSSL DER format RSA public key will work */ - tmpbuf = XCALLOC(1, inlen); - if (tmpbuf == NULL) { - err = CRYPT_MEM; - goto LBL_ERR; - } - - /* this includes the internal hash ID and optional params (NULL in this case) */ - LTC_SET_ASN1(alg_id, 0, LTC_ASN1_OBJECT_IDENTIFIER, tmpoid, LTC_ARRAY_SIZE(tmpoid)); - if (parameters_type == LTC_ASN1_EOL) { - alg_id_num = 1; - } else { - LTC_SET_ASN1(alg_id, 1, parameters_type, parameters, *_parameters_len); - if (parameters_type == LTC_ASN1_NULL) - alg_id[1].optional = 1; - alg_id_num = 2; - } - - /* the actual format of the SSL DER key is odd, it stores a RSAPublicKey - * in a **BIT** string ... so we have to extract it then proceed to convert bit to octet - */ - LTC_SET_ASN1(subject_pubkey, 0, LTC_ASN1_SEQUENCE, alg_id, alg_id_num); - LTC_SET_ASN1(subject_pubkey, 1, LTC_ASN1_RAW_BIT_STRING, tmpbuf, inlen*8U); - - err=der_decode_sequence(in, inlen, subject_pubkey, 2UL); - if (err != CRYPT_OK) { - goto LBL_ERR; - } - if (parameters_type != LTC_ASN1_EOL) { - *_parameters_len = alg_id[1].size; - } - - if ((err = pk_oid_cmp_with_asn1(oid, &alg_id[0])) != CRYPT_OK) { - /* OID mismatch */ - goto LBL_ERR; - } - - len = subject_pubkey[1].size/8; - if (*public_key_len >= len) { - XMEMCPY(public_key, subject_pubkey[1].data, len); - *public_key_len = len; - } else { - *public_key_len = len; - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; - } - - err = CRYPT_OK; - -LBL_ERR: - - XFREE(tmpbuf); - - return err; -} - -#endif diff --git a/src/pk/asn1/x509/x509_encode_subject_public_key_info.c b/src/pk/asn1/x509/x509_encode_subject_public_key_info.c deleted file mode 100644 index 52a80a1c..00000000 --- a/src/pk/asn1/x509/x509_encode_subject_public_key_info.c +++ /dev/null @@ -1,66 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x509_encode_subject_public_key_info.c - ASN.1 DER/X.509, encode a SubjectPublicKeyInfo structure --nmav -*/ - -#ifdef LTC_DER - -/* AlgorithmIdentifier := SEQUENCE { - * algorithm OBJECT IDENTIFIER, - * parameters ANY DEFINED BY algorithm - * } - * - * SubjectPublicKeyInfo := SEQUENCE { - * algorithm AlgorithmIdentifier, - * subjectPublicKey BIT STRING - * } - */ -/** - Encode a SubjectPublicKeyInfo - @param out The output buffer - @param outlen [in/out] Length of buffer and resulting length of output - @param algorithm One out of the enum #public_key_algorithms - @param public_key The buffer for the public key - @param public_key_len The length of the public key buffer - @param parameters_type The parameters' type out of the enum ltc_asn1_type - @param parameters The parameters to include - @param parameters_len The number of parameters to include - @return CRYPT_OK on success -*/ -int x509_encode_subject_public_key_info(unsigned char *out, unsigned long *outlen, - enum ltc_oid_id algorithm, const void* public_key, unsigned long public_key_len, - ltc_asn1_type parameters_type, ltc_asn1_list* parameters, unsigned long parameters_len) -{ - int err; - ltc_asn1_list alg_id[2]; - const char *OID; - unsigned long oid[16], oidlen; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((err = pk_get_oid(algorithm, &OID)) != CRYPT_OK) { - return err; - } - - oidlen = LTC_ARRAY_SIZE(oid); - if ((err = pk_oid_str_to_num(OID, oid, &oidlen)) != CRYPT_OK) { - return err; - } - - LTC_SET_ASN1(alg_id, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid, oidlen); - LTC_SET_ASN1(alg_id, 1, parameters_type, parameters, parameters_len); - - return der_encode_sequence_multi(out, outlen, - LTC_ASN1_SEQUENCE, (unsigned long)LTC_ARRAY_SIZE(alg_id), alg_id, - LTC_ASN1_RAW_BIT_STRING, public_key_len*8U, public_key, - LTC_ASN1_EOL, 0UL, NULL); - -} - -#endif - diff --git a/src/pk/asn1/x509/x509_get_pka.c b/src/pk/asn1/x509/x509_get_pka.c deleted file mode 100644 index 0236c761..00000000 --- a/src/pk/asn1/x509/x509_get_pka.c +++ /dev/null @@ -1,38 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x509_get_pka.c - Extract the PKA from an X.509 cert, Steffen Jaeckel -*/ - -#ifdef LTC_DER - -int x509_get_pka(const ltc_asn1_list *pub, enum ltc_pka_id *pka) -{ - der_flexi_check flexi_should[4]; - ltc_asn1_list *seqid, *id = NULL; - enum ltc_oid_id oid_id; - int err; - unsigned long n = 0; - LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_SEQUENCE, &seqid); - LTC_SET_DER_FLEXI_CHECK_OPT(flexi_should, n++, LTC_ASN1_BIT_STRING, NULL); - LTC_SET_DER_FLEXI_CHECK(flexi_should, n, LTC_ASN1_EOL, NULL); - if ((err = der_flexi_sequence_cmp(pub, flexi_should)) != CRYPT_OK) { - return err; - } - n = 0; - LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_OBJECT_IDENTIFIER, &id); - LTC_SET_DER_FLEXI_CHECK(flexi_should, n, LTC_ASN1_EOL, NULL); - err = der_flexi_sequence_cmp(seqid, flexi_should); - if (err != CRYPT_OK && err != CRYPT_INPUT_TOO_LONG) { - return err; - } - if ((err = pk_get_oid_from_asn1(id, &oid_id)) != CRYPT_OK) { - return err; - } - return pk_get_pka_id(oid_id, pka); -} - -#endif /* LTC_DER */ diff --git a/src/pk/asn1/x509/x509_import_spki.c b/src/pk/asn1/x509/x509_import_spki.c deleted file mode 100644 index b1b92ea5..00000000 --- a/src/pk/asn1/x509/x509_import_spki.c +++ /dev/null @@ -1,117 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x509_import_spki.c - Import the SubjectPublicKeyInfo of an X.509 cert, Steffen Jaeckel -*/ - -#ifdef LTC_DER - -typedef int (*import_fn)(const unsigned char *, unsigned long, void *); - -#ifdef LTC_CURVE25519 -static int s_x25519_import_pub(const unsigned char *in, unsigned long inlen, void *key) -{ - return x25519_import_raw(in, inlen, PK_PUBLIC, key); -} -static int s_x25519_import_spki(const unsigned char *in, unsigned long inlen, void *key) -{ - return x509_process_public_key_from_spki(in, inlen, - LTC_OID_X25519, - LTC_ASN1_EOL, NULL, NULL, - s_x25519_import_pub, key); -} - -static int s_ed25519_import_pub(const unsigned char *in, unsigned long inlen, void *key) -{ - return ed25519_import_raw(in, inlen, PK_PUBLIC, key); -} -static int s_ed25519_import_spki(const unsigned char *in, unsigned long inlen, void *key) -{ - return x509_process_public_key_from_spki(in, inlen, - LTC_OID_ED25519, - LTC_ASN1_EOL, NULL, NULL, - s_ed25519_import_pub, key); -} -#endif - -#ifdef LTC_CURVE448 -static int s_x448_import_pub(const unsigned char *in, unsigned long inlen, void *key) -{ - return x448_import_raw(in, inlen, PK_PUBLIC, key); -} -static int s_x448_import_spki(const unsigned char *in, unsigned long inlen, void *key) -{ - return x509_process_public_key_from_spki(in, inlen, - LTC_OID_X448, - LTC_ASN1_EOL, NULL, NULL, - s_x448_import_pub, key); -} - -static int s_ed448_import_pub(const unsigned char *in, unsigned long inlen, void *key) -{ - return ed448_import_raw(in, inlen, PK_PUBLIC, key); -} -static int s_ed448_import_spki(const unsigned char *in, unsigned long inlen, void *key) -{ - return x509_process_public_key_from_spki(in, inlen, - LTC_OID_ED448, - LTC_ASN1_EOL, NULL, NULL, - s_ed448_import_pub, key); -} -#endif - -static const import_fn s_import_spki_fns[LTC_PKA_NUM] = { -#ifdef LTC_MRSA - [LTC_PKA_RSA] = (import_fn)rsa_import_spki, - [LTC_PKA_RSA_PSS] = (import_fn)rsa_import_spki, -#endif -#ifdef LTC_MDSA - [LTC_PKA_DSA] = (import_fn)dsa_import_spki, -#endif -#ifdef LTC_MECC - [LTC_PKA_EC] = (import_fn)ecc_import_subject_public_key_info, -#endif -#ifdef LTC_CURVE25519 - [LTC_PKA_X25519] = (import_fn)s_x25519_import_spki, - [LTC_PKA_ED25519] = (import_fn)s_ed25519_import_spki, -#endif -#ifdef LTC_CURVE448 - [LTC_PKA_X448] = (import_fn)s_x448_import_spki, - [LTC_PKA_ED448] = (import_fn)s_ed448_import_spki, -#endif -}; - -int x509_import_spki(const unsigned char *asn1_cert, unsigned long asn1_len, ltc_pka_key *k, ltc_asn1_list **root) -{ - enum ltc_pka_id pka = LTC_PKA_UNDEF; - ltc_asn1_list *d; - const ltc_asn1_list *spki; - int err; - if ((err = x509_decode_spki(asn1_cert, asn1_len, &d, &spki)) != CRYPT_OK) { - return err; - } - if ((err = x509_get_pka(spki, &pka)) != CRYPT_OK) { - goto err_out; - } - if (pka < 0 - || pka > LTC_ARRAY_SIZE(s_import_spki_fns) - || s_import_spki_fns[pka] == NULL) { - err = CRYPT_PK_INVALID_TYPE; - goto err_out; - } - if ((err = s_import_spki_fns[pka](spki->data, spki->size, &k->u)) == CRYPT_OK) { - k->id = pka; - } -err_out: - if (err == CRYPT_OK && root) { - *root = d; - d = NULL; - } - der_free_sequence_flexi(d); - return err; -} - -#endif /* LTC_DER */ diff --git a/src/pk/dh/dh.c b/src/pk/dh/dh.c deleted file mode 100644 index a0491271..00000000 --- a/src/pk/dh/dh.c +++ /dev/null @@ -1,242 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MDH - -/* This holds the key settings. ***MUST*** be organized by size from smallest to largest. */ -const ltc_dh_set_type ltc_dh_sets[] = { -#ifdef LTC_DH768 -{ /* 768-bit MODP Group 1 - https://tools.ietf.org/html/rfc7296#appendix-B.1 */ - 96, - "DH-768", - "2", - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" - "E485B576625E7EC6F44C42E9A63A3620FFFFFFFFFFFFFFFF" -}, -#endif -#ifdef LTC_DH1024 -{ /* 1024-bit MODP Group 2 - https://tools.ietf.org/html/rfc7296#appendix-B.2 */ - 128, - "DH-1024", - "2", - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381" - "FFFFFFFFFFFFFFFF" -}, -#endif -#ifdef LTC_DH1536 -{ /* 1536-bit MODP Group 5 - https://tools.ietf.org/html/rfc3526#section-2 */ - 192, - "DH-1536", - "2", - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" - "83655D23DCA3AD961C62F356208552BB9ED529077096966D" - "670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF" -}, -#endif -#ifdef LTC_DH2048 -{ /* 2048-bit MODP Group 14 - https://tools.ietf.org/html/rfc3526#section-3 */ - 256, - "DH-2048", - "2", - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" - "83655D23DCA3AD961C62F356208552BB9ED529077096966D" - "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" - "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" - "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" - "15728E5A8AACAA68FFFFFFFFFFFFFFFF" -}, -#endif -#ifdef LTC_DH3072 -{ /* 3072-bit MODP Group 15 - https://tools.ietf.org/html/rfc3526#section-4 */ - 384, - "DH-3072", - "2", - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" - "83655D23DCA3AD961C62F356208552BB9ED529077096966D" - "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" - "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" - "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" - "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" - "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" - "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" - "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" - "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" - "43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF" -}, -#endif -#ifdef LTC_DH4096 -{ /* 4096-bit MODP Group 16 - https://tools.ietf.org/html/rfc3526#section-5 */ - 512, - "DH-4096", - "2", - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" - "83655D23DCA3AD961C62F356208552BB9ED529077096966D" - "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" - "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" - "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" - "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" - "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" - "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" - "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" - "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" - "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" - "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" - "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" - "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" - "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" - "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199" - "FFFFFFFFFFFFFFFF" -}, -#endif -#ifdef LTC_DH6144 -{ /* 6144-bit MODP Group 17 - https://tools.ietf.org/html/rfc3526#section-6 */ - 768, - "DH-6144", - "2", - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" - "83655D23DCA3AD961C62F356208552BB9ED529077096966D" - "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" - "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" - "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" - "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" - "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" - "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" - "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" - "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" - "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" - "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" - "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" - "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" - "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" - "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" - "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD" - "F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831" - "179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B" - "DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF" - "5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6" - "D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3" - "23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" - "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328" - "06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C" - "DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE" - "12BF2D5B0B7474D6E694F91E6DCC4024FFFFFFFFFFFFFFFF" -}, -#endif -#ifdef LTC_DH8192 -{ /* 8192-bit MODP Group 18 - https://tools.ietf.org/html/rfc3526#section-7 */ - 1024, - "DH-8192", - "2", - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" - "83655D23DCA3AD961C62F356208552BB9ED529077096966D" - "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" - "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" - "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" - "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" - "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" - "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" - "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" - "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" - "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" - "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" - "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" - "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" - "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" - "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" - "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD" - "F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831" - "179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B" - "DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF" - "5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6" - "D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3" - "23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" - "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328" - "06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C" - "DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE" - "12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4" - "38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300" - "741FA7BF8AFC47ED2576F6936BA424663AAB639C5AE4F568" - "3423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9" - "22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B" - "4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A" - "062B3CF5B3A278A66D2A13F83F44F82DDF310EE074AB6A36" - "4597E899A0255DC164F31CC50846851DF9AB48195DED7EA1" - "B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92" - "4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E47" - "9558E4475677E9AA9E3050E2765694DFC81F56E880B96E71" - "60C980DD98EDD3DFFFFFFFFFFFFFFFFF" -}, -#endif -{ - 0, - NULL, - NULL, - NULL -} -}; - -/** - Returns the DH group size (octets) for given key - @param key The DH key to get the size of - @return The group size in octets (0 on error) - */ -int dh_get_groupsize(const dh_key *key) -{ - if (key == NULL) return 0; - return ltc_mp_unsigned_bin_size(key->prime); -} - -/** - Init a DH key - @param key The DH key to initialize - @return CRYPT_OK if successful -*/ -int dh_init(dh_key *key) -{ - int err; - LTC_ARGCHK(key != NULL); - if ((err = ltc_mp_init_multi(&key->x, &key->y, &key->base, &key->prime, LTC_NULL)) != CRYPT_OK) { - return err; - } - return CRYPT_OK; -} - -#endif /* LTC_MDH */ diff --git a/src/pk/dh/dh_check_pubkey.c b/src/pk/dh/dh_check_pubkey.c deleted file mode 100644 index 88c252e0..00000000 --- a/src/pk/dh/dh_check_pubkey.c +++ /dev/null @@ -1,55 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MDH - -/** - Check DH public key (INTERNAL ONLY, not part of public API) - @param key The key you wish to test - @return CRYPT_OK if successful -*/ -int dh_check_pubkey(const dh_key *key) -{ - void *p_minus1; - ltc_mp_digit digit; - int i, digit_count, bits_set = 0, err; - - LTC_ARGCHK(key != NULL); - - if ((err = ltc_mp_init(&p_minus1)) != CRYPT_OK) { - return err; - } - - /* avoid: y <= 1 OR y >= p-1 */ - if ((err = ltc_mp_sub_d(key->prime, 1, p_minus1)) != CRYPT_OK) { - goto error; - } - if (ltc_mp_cmp(key->y, p_minus1) != LTC_MP_LT || ltc_mp_cmp_d(key->y, 1) != LTC_MP_GT) { - err = CRYPT_INVALID_ARG; - goto error; - } - - /* public key must have more than one bit set */ - digit_count = ltc_mp_get_digit_count(key->y); - for (i = 0; i < digit_count && bits_set < 2; i++) { - digit = ltc_mp_get_digit(key->y, i); - while (digit > 0) { - if (digit & 1) bits_set++; - digit >>= 1; - } - } - if (bits_set > 1) { - err = CRYPT_OK; - } - else { - err = CRYPT_INVALID_ARG; - } - -error: - ltc_mp_clear(p_minus1); - return err; -} - -#endif /* LTC_MDH */ diff --git a/src/pk/dh/dh_export.c b/src/pk/dh/dh_export.c deleted file mode 100644 index 19112c44..00000000 --- a/src/pk/dh/dh_export.c +++ /dev/null @@ -1,52 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MDH - -/** - Export a DH key to a binary packet - @param out [out] The destination for the key - @param outlen [in/out] The max size and resulting size of the DH key - @param type Which type of key (PK_PRIVATE or PK_PUBLIC) - @param key The key you wish to export - @return CRYPT_OK if successful -*/ -int dh_export(unsigned char *out, unsigned long *outlen, int type, const dh_key *key) -{ - unsigned char flags[1]; - int err; - unsigned long version = 0; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - if (type == PK_PRIVATE) { - /* export x - private key */ - flags[0] = 1; - err = der_encode_sequence_multi(out, outlen, - LTC_ASN1_SHORT_INTEGER, 1UL, &version, - LTC_ASN1_BIT_STRING, 1UL, flags, - LTC_ASN1_INTEGER, 1UL, key->prime, - LTC_ASN1_INTEGER, 1UL, key->base, - LTC_ASN1_INTEGER, 1UL, key->x, - LTC_ASN1_EOL, 0UL, NULL); - } - else { - /* export y - public key */ - flags[0] = 0; - err = der_encode_sequence_multi(out, outlen, - LTC_ASN1_SHORT_INTEGER, 1UL, &version, - LTC_ASN1_BIT_STRING, 1UL, flags, - LTC_ASN1_INTEGER, 1UL, key->prime, - LTC_ASN1_INTEGER, 1UL, key->base, - LTC_ASN1_INTEGER, 1UL, key->y, - LTC_ASN1_EOL, 0UL, NULL); - } - - return err; -} - -#endif /* LTC_MDH */ diff --git a/src/pk/dh/dh_export_key.c b/src/pk/dh/dh_export_key.c deleted file mode 100644 index dd5bcb70..00000000 --- a/src/pk/dh/dh_export_key.c +++ /dev/null @@ -1,37 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MDH - -/** - Binary export a DH key to a buffer - @param out [out] The destination for the key - @param outlen [in/out] The max size and resulting size of the DH key - @param type Which type of key (PK_PRIVATE or PK_PUBLIC) - @param key The key you wish to export - @return CRYPT_OK if successful -*/ -int dh_export_key(void *out, unsigned long *outlen, int type, const dh_key *key) -{ - unsigned long len; - void *k; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - k = (type == PK_PRIVATE) ? key->x : key->y; - len = ltc_mp_unsigned_bin_size(k); - - if (*outlen < len) { - *outlen = len; - return CRYPT_BUFFER_OVERFLOW; - } - *outlen = len; - - return ltc_mp_to_unsigned_bin(k, out); -} - -#endif /* LTC_MDH */ diff --git a/src/pk/dh/dh_free.c b/src/pk/dh/dh_free.c deleted file mode 100644 index 0801114f..00000000 --- a/src/pk/dh/dh_free.c +++ /dev/null @@ -1,18 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MDH - -/** - Free the allocated ram for a DH key - @param key The key which you wish to free -*/ -void dh_free(dh_key *key) -{ - LTC_ARGCHKVD(key != NULL); - ltc_mp_cleanup_multi(&key->prime, &key->base, &key->y, &key->x, LTC_NULL); -} - -#endif /* LTC_MDH */ diff --git a/src/pk/dh/dh_generate_key.c b/src/pk/dh/dh_generate_key.c deleted file mode 100644 index f415a4c6..00000000 --- a/src/pk/dh/dh_generate_key.c +++ /dev/null @@ -1,90 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MDH - -static int s_dh_groupsize_to_keysize(int groupsize) -{ - /* The strength estimates from https://tools.ietf.org/html/rfc3526#section-8 - * We use "Estimate 2" to get an appropriate private key (exponent) size. - */ - if (groupsize <= 0) { - return 0; - } - if (groupsize <= 192) { - return 30; /* 1536-bit => key size 240-bit */ - } - if (groupsize <= 256) { - return 40; /* 2048-bit => key size 320-bit */ - } - if (groupsize <= 384) { - return 52; /* 3072-bit => key size 416-bit */ - } - if (groupsize <= 512) { - return 60; /* 4096-bit => key size 480-bit */ - } - if (groupsize <= 768) { - return 67; /* 6144-bit => key size 536-bit */ - } - if (groupsize <= 1024) { - return 77; /* 8192-bit => key size 616-bit */ - } - return 0; -} - -int dh_generate_key(prng_state *prng, int wprng, dh_key *key) -{ - unsigned char *buf; - unsigned long keysize; - int err, max_iterations = LTC_PK_MAX_RETRIES; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - /* good prng? */ - if ((err = prng_is_valid(wprng)) != CRYPT_OK) { - return err; - } - - keysize = s_dh_groupsize_to_keysize(ltc_mp_unsigned_bin_size(key->prime)); - if (keysize == 0) { - err = CRYPT_INVALID_KEYSIZE; - goto freemp; - } - - /* allocate buffer */ - buf = XMALLOC(keysize); - if (buf == NULL) { - err = CRYPT_MEM; - goto freemp; - } - - key->type = PK_PRIVATE; - do { - /* make up random buf */ - if (prng_descriptor[wprng].read(buf, keysize, prng) != keysize) { - err = CRYPT_ERROR_READPRNG; - goto freebuf; - } - /* load the x value - private key */ - if ((err = ltc_mp_read_unsigned_bin(key->x, buf, keysize)) != CRYPT_OK) { - goto freebuf; - } - /* compute the y value - public key */ - if ((err = ltc_mp_exptmod(key->base, key->x, key->prime, key->y)) != CRYPT_OK) { - goto freebuf; - } - err = dh_check_pubkey(key); - } while (err != CRYPT_OK && max_iterations-- > 0); - -freebuf: - zeromem(buf, keysize); - XFREE(buf); -freemp: - if (err != CRYPT_OK) dh_free(key); - return err; -} - -#endif /* LTC_MDH */ diff --git a/src/pk/dh/dh_import.c b/src/pk/dh/dh_import.c deleted file mode 100644 index b18e4396..00000000 --- a/src/pk/dh/dh_import.c +++ /dev/null @@ -1,89 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MDH - -/** - Import a DH key from a binary packet - @param in The packet to read - @param inlen The length of the input packet - @param key [out] Where to import the key to - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int dh_import(const unsigned char *in, unsigned long inlen, dh_key *key) -{ - unsigned char flags[1]; - int err; - unsigned long version; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - - /* init */ - if ((err = dh_init(key)) != CRYPT_OK) { - return err; - } - - /* find out what type of key it is */ - err = der_decode_sequence_multi(in, inlen, - LTC_ASN1_SHORT_INTEGER, 1UL, &version, - LTC_ASN1_BIT_STRING, 1UL, &flags, - LTC_ASN1_EOL, 0UL, NULL); - if (err != CRYPT_OK && err != CRYPT_INPUT_TOO_LONG) { - goto error; - } - - if (version == 0) { - if (flags[0] == 1) { - key->type = PK_PRIVATE; - if ((err = der_decode_sequence_multi(in, inlen, - LTC_ASN1_SHORT_INTEGER, 1UL, &version, - LTC_ASN1_BIT_STRING, 1UL, flags, - LTC_ASN1_INTEGER, 1UL, key->prime, - LTC_ASN1_INTEGER, 1UL, key->base, - LTC_ASN1_INTEGER, 1UL, key->x, - LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { - goto error; - } - /* compute public key: y = (base ^ x) mod prime */ - if ((err = ltc_mp_exptmod(key->base, key->x, key->prime, key->y)) != CRYPT_OK) { - goto error; - } - } - else if (flags[0] == 0) { - key->type = PK_PUBLIC; - if ((err = der_decode_sequence_multi(in, inlen, - LTC_ASN1_SHORT_INTEGER, 1UL, &version, - LTC_ASN1_BIT_STRING, 1UL, flags, - LTC_ASN1_INTEGER, 1UL, key->prime, - LTC_ASN1_INTEGER, 1UL, key->base, - LTC_ASN1_INTEGER, 1UL, key->y, - LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { - goto error; - } - } - else { - err = CRYPT_INVALID_PACKET; - goto error; - } - } - else { - err = CRYPT_INVALID_PACKET; - goto error; - } - - /* check public key */ - if ((err = dh_check_pubkey(key)) != CRYPT_OK) { - goto error; - } - - return CRYPT_OK; - -error: - dh_free(key); - return err; -} - -#endif /* LTC_MDH */ diff --git a/src/pk/dh/dh_import_pkcs8.c b/src/pk/dh/dh_import_pkcs8.c deleted file mode 100644 index 2962bb1d..00000000 --- a/src/pk/dh/dh_import_pkcs8.c +++ /dev/null @@ -1,87 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MDH - -int dh_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, dh_key *key) -{ - int err; - - LTC_ARGCHK(key != NULL); - - if (!alg_id->child || - !LTC_ASN1_IS_TYPE(alg_id->child->next, LTC_ASN1_SEQUENCE) || - !LTC_ASN1_IS_TYPE(alg_id->child->next->child, LTC_ASN1_INTEGER) || - !LTC_ASN1_IS_TYPE(alg_id->child->next->child->next, LTC_ASN1_INTEGER)) { - return CRYPT_PK_INVALID_TYPE; - } - - if ((err = dh_init(key)) != CRYPT_OK) { - return err; - } - - if ((err = ltc_mp_copy(alg_id->child->next->child->data, key->prime)) != CRYPT_OK) { - goto error; - } - if ((err = ltc_mp_copy(alg_id->child->next->child->next->data, key->base)) != CRYPT_OK) { - goto error; - } - - if ((err = der_decode_integer(priv_key->data, priv_key->size, key->x)) != CRYPT_OK) { - goto error; - } - /* compute public key: y = (base ^ x) mod prime */ - if ((err = ltc_mp_exptmod(key->base, key->x, key->prime, key->y)) != CRYPT_OK) { - goto error; - } - /* check public key */ - if ((err = dh_check_pubkey(key)) != CRYPT_OK) { - goto error; - } - key->type = PK_PRIVATE; - - return CRYPT_OK; -error: - dh_free(key); - return err; -} - -/** - Import a DH key in PKCS#8 format - @param in The packet to import from - @param inlen It's length (octets) - @param pw_ctx The password context when decrypting the private key - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int dh_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, dh_key *key) -{ - int err; - ltc_asn1_list *l = NULL; - ltc_asn1_list *alg_id = NULL, *priv_key = NULL; - enum ltc_oid_id pka; - - LTC_ARGCHK(in != NULL); - - if ((err = pkcs8_decode_flexi(in, inlen, pw_ctx, &l)) != CRYPT_OK) { - return err; - } - if ((err = pkcs8_get_children(l, &pka, &alg_id, &priv_key)) != CRYPT_OK) { - goto LBL_DER_FREE; - } - if (pka != LTC_OID_DH) { - err = CRYPT_INVALID_PACKET; - goto LBL_DER_FREE; - } - - err = dh_import_pkcs8_asn1(alg_id, priv_key, key); - -LBL_DER_FREE: - der_free_sequence_flexi(l); - return err; -} - -#endif /* LTC_MDH */ diff --git a/src/pk/dh/dh_set.c b/src/pk/dh/dh_set.c deleted file mode 100644 index 1cc044f8..00000000 --- a/src/pk/dh/dh_set.c +++ /dev/null @@ -1,115 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MDH - -/** - Import DH key parts p and g from raw numbers - - @param p DH's p (prime) - @param plen DH's p's length - @param g DH's g (group) - @param glen DH's g's length - @param key [out] the destination for the imported key - @return CRYPT_OK if successful -*/ -int dh_set_pg(const unsigned char *p, unsigned long plen, - const unsigned char *g, unsigned long glen, - dh_key *key) -{ - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(p != NULL); - LTC_ARGCHK(g != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - if ((err = dh_init(key)) != CRYPT_OK) { - return err; - } - - if ((err = ltc_mp_read_unsigned_bin(key->base, (unsigned char*)g, glen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = ltc_mp_read_unsigned_bin(key->prime, (unsigned char*)p, plen)) != CRYPT_OK) { goto LBL_ERR; } - - return CRYPT_OK; - -LBL_ERR: - dh_free(key); - return err; -} - -/** - Import DH key parts p and g from built-in DH groups - - @param groupsize The size of the DH group to use - @param key [out] Where the newly created DH key will be stored - @return CRYPT_OK if successful, note: on error all allocated memory will be freed automatically. -*/ -int dh_set_pg_groupsize(int groupsize, dh_key *key) -{ - int err, i; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - LTC_ARGCHK(groupsize > 0); - - for (i = 0; (groupsize > ltc_dh_sets[i].size) && (ltc_dh_sets[i].size != 0); i++); - if (ltc_dh_sets[i].size == 0) return CRYPT_INVALID_KEYSIZE; - - if ((err = dh_init(key)) != CRYPT_OK) { - return err; - } - - if ((err = ltc_mp_read_radix(key->base, ltc_dh_sets[i].base, 16)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = ltc_mp_read_radix(key->prime, ltc_dh_sets[i].prime, 16)) != CRYPT_OK) { goto LBL_ERR; } - - return CRYPT_OK; - -LBL_ERR: - dh_free(key); - return err; -} - -/** - Import DH public or private key part from raw numbers - - NB: The p & g parts must be set beforehand - - @param in The key-part to import, either public or private. - @param inlen The key-part's length - @param type Which type of key (PK_PRIVATE or PK_PUBLIC) - @param key [out] the destination for the imported key - @return CRYPT_OK if successful -*/ -int dh_set_key(const unsigned char *in, unsigned long inlen, int type, dh_key *key) -{ - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - if (type == PK_PRIVATE) { - key->type = PK_PRIVATE; - if ((err = ltc_mp_read_unsigned_bin(key->x, (unsigned char*)in, inlen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = ltc_mp_exptmod(key->base, key->x, key->prime, key->y)) != CRYPT_OK) { goto LBL_ERR; } - } - else { - key->type = PK_PUBLIC; - if ((err = ltc_mp_read_unsigned_bin(key->y, (unsigned char*)in, inlen)) != CRYPT_OK) { goto LBL_ERR; } - } - - /* check public key */ - if ((err = dh_check_pubkey(key)) != CRYPT_OK) { - goto LBL_ERR; - } - - return CRYPT_OK; - -LBL_ERR: - dh_free(key); - return err; -} - -#endif /* LTC_MDH */ diff --git a/src/pk/dh/dh_set_pg_dhparam.c b/src/pk/dh/dh_set_pg_dhparam.c deleted file mode 100644 index 4d254fd2..00000000 --- a/src/pk/dh/dh_set_pg_dhparam.c +++ /dev/null @@ -1,44 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MDH - -/** - Import DH key parts p and g from dhparam - - dhparam data: openssl dhparam -outform DER -out dhparam.der 2048 - - @param dhparam The DH param DER encoded data - @param dhparamlen The length of dhparam data - @param key [out] Where the newly created DH key will be stored - @return CRYPT_OK if successful, note: on error all allocated memory will be freed automatically. -*/ -int dh_set_pg_dhparam(const unsigned char *dhparam, unsigned long dhparamlen, dh_key *key) -{ - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - LTC_ARGCHK(dhparam != NULL); - LTC_ARGCHK(dhparamlen > 0); - - if ((err = dh_init(key)) != CRYPT_OK) { - return err; - } - if ((err = der_decode_sequence_multi(dhparam, dhparamlen, - LTC_ASN1_INTEGER, 1UL, key->prime, - LTC_ASN1_INTEGER, 1UL, key->base, - LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { - goto LBL_ERR; - } - - return CRYPT_OK; - -LBL_ERR: - dh_free(key); - return err; -} - -#endif /* LTC_MDH */ diff --git a/src/pk/dh/dh_shared_secret.c b/src/pk/dh/dh_shared_secret.c deleted file mode 100644 index b60a8486..00000000 --- a/src/pk/dh/dh_shared_secret.c +++ /dev/null @@ -1,70 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MDH - -/** - Create a DH shared secret. - @param private_key The private DH key in the pair - @param public_key The public DH key in the pair - @param out [out] The destination of the shared data - @param outlen [in/out] The max size and resulting size of the shared data. - @return CRYPT_OK if successful -*/ -int dh_shared_secret(const dh_key *private_key, const dh_key *public_key, - unsigned char *out, unsigned long *outlen) -{ - void *tmp; - unsigned long x; - int err; - - LTC_ARGCHK(private_key != NULL); - LTC_ARGCHK(public_key != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* types valid? */ - if (private_key->type != PK_PRIVATE) { - return CRYPT_PK_NOT_PRIVATE; - } - - /* same DH group? */ - if (ltc_mp_cmp(private_key->prime, public_key->prime) != LTC_MP_EQ) { return CRYPT_PK_TYPE_MISMATCH; } - if (ltc_mp_cmp(private_key->base, public_key->base) != LTC_MP_EQ) { return CRYPT_PK_TYPE_MISMATCH; } - - /* init big numbers */ - if ((err = ltc_mp_init(&tmp)) != CRYPT_OK) { - return err; - } - - /* check public key */ - if ((err = dh_check_pubkey(public_key)) != CRYPT_OK) { - goto error; - } - - /* compute tmp = y^x mod p */ - if ((err = ltc_mp_exptmod(public_key->y, private_key->x, private_key->prime, tmp)) != CRYPT_OK) { - goto error; - } - - /* enough space for output? */ - x = (unsigned long)ltc_mp_unsigned_bin_size(tmp); - if (*outlen < x) { - *outlen = x; - err = CRYPT_BUFFER_OVERFLOW; - goto error; - } - if ((err = ltc_mp_to_unsigned_bin(tmp, out)) != CRYPT_OK) { - goto error; - } - *outlen = x; - err = CRYPT_OK; - -error: - ltc_mp_clear(tmp); - return err; -} - -#endif /* LTC_MDH */ diff --git a/src/pk/dsa/dsa_decrypt_key.c b/src/pk/dsa/dsa_decrypt_key.c deleted file mode 100644 index 734a2e0c..00000000 --- a/src/pk/dsa/dsa_decrypt_key.c +++ /dev/null @@ -1,129 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file dsa_decrypt_key.c - DSA Crypto, Tom St Denis -*/ - -#ifdef LTC_MDSA - -/** - Decrypt an DSA encrypted key - @param in The ciphertext - @param inlen The length of the ciphertext (octets) - @param out [out] The plaintext - @param outlen [in/out] The max size and resulting size of the plaintext - @param key The corresponding private DSA key - @return CRYPT_OK if successful -*/ -int dsa_decrypt_key(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - const dsa_key *key) -{ - unsigned char *skey, *expt; - void *g_pub; - unsigned long x, y; - unsigned long hashOID[32] = { 0 }; - int hash, err; - ltc_asn1_list decode[3]; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - /* right key type? */ - if (key->type != PK_PRIVATE) { - return CRYPT_PK_NOT_PRIVATE; - } - - /* decode to find out hash */ - LTC_SET_ASN1(decode, 0, LTC_ASN1_OBJECT_IDENTIFIER, hashOID, LTC_ARRAY_SIZE(hashOID)); - err = der_decode_sequence(in, inlen, decode, 1); - if (err != CRYPT_OK && err != CRYPT_INPUT_TOO_LONG) { - return err; - } - - hash = find_hash_oid(hashOID, decode[0].size); - if (hash_is_valid(hash) != CRYPT_OK) { - return CRYPT_INVALID_PACKET; - } - - /* we now have the hash! */ - - if ((err = ltc_mp_init(&g_pub)) != CRYPT_OK) { - return err; - } - - /* allocate memory */ - expt = XMALLOC(ltc_mp_unsigned_bin_size(key->p) + 1); - skey = XMALLOC(MAXBLOCKSIZE); - if (expt == NULL || skey == NULL) { - if (expt != NULL) { - XFREE(expt); - } - if (skey != NULL) { - XFREE(skey); - } - ltc_mp_clear(g_pub); - return CRYPT_MEM; - } - - LTC_SET_ASN1(decode, 1, LTC_ASN1_INTEGER, g_pub, 1UL); - LTC_SET_ASN1(decode, 2, LTC_ASN1_OCTET_STRING, skey, MAXBLOCKSIZE); - - /* read the structure in now */ - if ((err = der_decode_sequence(in, inlen, decode, 3)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* make shared key */ - x = ltc_mp_unsigned_bin_size(key->p) + 1; - if ((err = dsa_shared_secret(key->x, g_pub, key, expt, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - - y = ltc_mp_unsigned_bin_size(key->p) + 1; - y = MIN(y, MAXBLOCKSIZE); - if ((err = hash_memory(hash, expt, x, expt, &y)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* ensure the hash of the shared secret is at least as big as the encrypt itself */ - if (decode[2].size > y) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - - /* avoid buffer overflow */ - if (*outlen < decode[2].size) { - *outlen = decode[2].size; - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; - } - - /* Decrypt the key */ - for (x = 0; x < decode[2].size; x++) { - out[x] = expt[x] ^ skey[x]; - } - *outlen = x; - - err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(expt, ltc_mp_unsigned_bin_size(key->p) + 1); - zeromem(skey, MAXBLOCKSIZE); -#endif - - XFREE(expt); - XFREE(skey); - - ltc_mp_clear(g_pub); - - return err; -} - -#endif - diff --git a/src/pk/dsa/dsa_encrypt_key.c b/src/pk/dsa/dsa_encrypt_key.c deleted file mode 100644 index 30097651..00000000 --- a/src/pk/dsa/dsa_encrypt_key.c +++ /dev/null @@ -1,118 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file dsa_encrypt_key.c - DSA Crypto, Tom St Denis -*/ - -#ifdef LTC_MDSA - -/** - Encrypt a symmetric key with DSA - @param in The symmetric key you want to encrypt - @param inlen The length of the key to encrypt (octets) - @param out [out] The destination for the ciphertext - @param outlen [in/out] The max size and resulting size of the ciphertext - @param prng An active PRNG state - @param wprng The index of the PRNG you wish to use - @param hash The index of the hash you want to use - @param key The DSA key you want to encrypt to - @return CRYPT_OK if successful -*/ -int dsa_encrypt_key(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int wprng, int hash, - const dsa_key *key) -{ - unsigned char *expt, *skey; - void *g_pub, *g_priv; - unsigned long x, y; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - /* check that wprng/cipher/hash are not invalid */ - if ((err = prng_is_valid(wprng)) != CRYPT_OK) { - return err; - } - - if ((err = hash_is_valid(hash)) != CRYPT_OK) { - return err; - } - - if (inlen > hash_descriptor[hash].hashsize) { - return CRYPT_INVALID_HASH; - } - - /* make a random key and export the public copy */ - if ((err = ltc_mp_init_multi(&g_pub, &g_priv, LTC_NULL)) != CRYPT_OK) { - return err; - } - - expt = XMALLOC(ltc_mp_unsigned_bin_size(key->p) + 1); - skey = XMALLOC(MAXBLOCKSIZE); - if (expt == NULL || skey == NULL) { - if (expt != NULL) { - XFREE(expt); - } - if (skey != NULL) { - XFREE(skey); - } - ltc_mp_deinit_multi(g_pub, g_priv, LTC_NULL); - return CRYPT_MEM; - } - - /* make a random g_priv, g_pub = g^x pair - private key x should be in range: 1 <= x <= q-1 (see FIPS 186-4 B.1.2) - */ - if ((err = rand_bn_upto(g_priv, key->q, prng, wprng)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* compute y */ - if ((err = ltc_mp_exptmod(key->g, g_priv, key->p, g_pub)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* make random key */ - x = ltc_mp_unsigned_bin_size(key->p) + 1; - if ((err = dsa_shared_secret(g_priv, key->y, key, expt, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - - y = MAXBLOCKSIZE; - if ((err = hash_memory(hash, expt, x, skey, &y)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* Encrypt key */ - for (x = 0; x < inlen; x++) { - skey[x] ^= in[x]; - } - - err = der_encode_sequence_multi(out, outlen, - LTC_ASN1_OBJECT_IDENTIFIER, hash_descriptor[hash].OIDlen, hash_descriptor[hash].OID, - LTC_ASN1_INTEGER, 1UL, g_pub, - LTC_ASN1_OCTET_STRING, inlen, skey, - LTC_ASN1_EOL, 0UL, NULL); - -LBL_ERR: -#ifdef LTC_CLEAN_STACK - /* clean up */ - zeromem(expt, ltc_mp_unsigned_bin_size(key->p) + 1); - zeromem(skey, MAXBLOCKSIZE); -#endif - - XFREE(skey); - XFREE(expt); - - ltc_mp_deinit_multi(g_pub, g_priv, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/dsa/dsa_export.c b/src/pk/dsa/dsa_export.c deleted file mode 100644 index c26dd46a..00000000 --- a/src/pk/dsa/dsa_export.c +++ /dev/null @@ -1,100 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file dsa_export.c - DSA implementation, export key, Tom St Denis -*/ - -#ifdef LTC_MDSA - -/** - Export a DSA key to a binary packet - @param out [out] Where to store the packet - @param outlen [in/out] The max size and resulting size of the packet - @param type The type of key to export (PK_PRIVATE or PK_PUBLIC) - @param key The key to export - @return CRYPT_OK if successful -*/ -int dsa_export(unsigned char *out, unsigned long *outlen, int type, const dsa_key *key) -{ - unsigned long zero=0; - unsigned char flags[1]; - int err, std; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - std = type & PK_STD; - type &= ~PK_STD; - - if (type == PK_PRIVATE && key->type != PK_PRIVATE) { - return CRYPT_PK_TYPE_MISMATCH; - } - - if (type == PK_PRIVATE) { - if (std) { - return der_encode_sequence_multi(out, outlen, - LTC_ASN1_SHORT_INTEGER, 1UL, &zero, - LTC_ASN1_INTEGER, 1UL, key->p, - LTC_ASN1_INTEGER, 1UL, key->q, - LTC_ASN1_INTEGER, 1UL, key->g, - LTC_ASN1_INTEGER, 1UL, key->y, - LTC_ASN1_INTEGER, 1UL, key->x, - LTC_ASN1_EOL, 0UL, NULL); - } - flags[0] = 1; - return der_encode_sequence_multi(out, outlen, - LTC_ASN1_BIT_STRING, 1UL, flags, - LTC_ASN1_INTEGER, 1UL, key->g, - LTC_ASN1_INTEGER, 1UL, key->p, - LTC_ASN1_INTEGER, 1UL, key->q, - LTC_ASN1_INTEGER, 1UL, key->y, - LTC_ASN1_INTEGER, 1UL, key->x, - LTC_ASN1_EOL, 0UL, NULL); - } - - if (type == PK_PUBLIC) { - if (std) { - unsigned long tmplen = (unsigned long)(ltc_mp_count_bits(key->y) / 8) + 8; - unsigned char* tmp = XMALLOC(tmplen); - ltc_asn1_list int_list[3]; - - if (tmp == NULL) { - return CRYPT_MEM; - } - - err = der_encode_integer(key->y, tmp, &tmplen); - if (err != CRYPT_OK) { - goto error; - } - - LTC_SET_ASN1(int_list, 0, LTC_ASN1_INTEGER, key->p, 1UL); - LTC_SET_ASN1(int_list, 1, LTC_ASN1_INTEGER, key->q, 1UL); - LTC_SET_ASN1(int_list, 2, LTC_ASN1_INTEGER, key->g, 1UL); - - err = x509_encode_subject_public_key_info(out, outlen, LTC_OID_DSA, tmp, - tmplen, LTC_ASN1_SEQUENCE, int_list, - sizeof(int_list) / sizeof(int_list[0])); - -error: - XFREE(tmp); - return err; - } - flags[0] = 0; - return der_encode_sequence_multi(out, outlen, - LTC_ASN1_BIT_STRING, 1UL, flags, - LTC_ASN1_INTEGER, 1UL, key->g, - LTC_ASN1_INTEGER, 1UL, key->p, - LTC_ASN1_INTEGER, 1UL, key->q, - LTC_ASN1_INTEGER, 1UL, key->y, - LTC_ASN1_EOL, 0UL, NULL); - } - - return CRYPT_INVALID_ARG; -} - -#endif - diff --git a/src/pk/dsa/dsa_free.c b/src/pk/dsa/dsa_free.c deleted file mode 100644 index aa9294fd..00000000 --- a/src/pk/dsa/dsa_free.c +++ /dev/null @@ -1,23 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file dsa_free.c - DSA implementation, free a DSA key, Tom St Denis -*/ - -#ifdef LTC_MDSA - -/** - Free a DSA key - @param key The key to free from memory -*/ -void dsa_free(dsa_key *key) -{ - LTC_ARGCHKVD(key != NULL); - ltc_mp_cleanup_multi(&key->y, &key->x, &key->q, &key->g, &key->p, LTC_NULL); - key->type = key->qord = 0; -} - -#endif diff --git a/src/pk/dsa/dsa_generate_key.c b/src/pk/dsa/dsa_generate_key.c deleted file mode 100644 index 651cfb45..00000000 --- a/src/pk/dsa/dsa_generate_key.c +++ /dev/null @@ -1,37 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file dsa_make_key.c - DSA implementation, generate a DSA key -*/ - -#ifdef LTC_MDSA - -/** - Create a DSA key - @param prng An active PRNG state - @param wprng The index of the PRNG desired - @param key [in/out] Where to store the created key - @return CRYPT_OK if successful. -*/ -int dsa_generate_key(prng_state *prng, int wprng, dsa_key *key) -{ - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - /* so now we have our DH structure, generator g, order q, modulus p - Now we need a random exponent [mod q] and it's power g^x mod p - */ - /* private key x should be from range: 1 <= x <= q-1 (see FIPS 186-4 B.1.2) */ - if ((err = rand_bn_upto(key->x, key->q, prng, wprng)) != CRYPT_OK) { return err; } - if ((err = ltc_mp_exptmod(key->g, key->x, key->p, key->y)) != CRYPT_OK) { return err; } - key->type = PK_PRIVATE; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/dsa/dsa_generate_pqg.c b/src/pk/dsa/dsa_generate_pqg.c deleted file mode 100644 index 794bfddf..00000000 --- a/src/pk/dsa/dsa_generate_pqg.c +++ /dev/null @@ -1,229 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file dsa_generate_pqg.c - DSA implementation - generate DSA parameters p, q & g -*/ - -#ifdef LTC_MDSA - -/** - Create DSA parameters (INTERNAL ONLY, not part of public API) - @param prng An active PRNG state - @param wprng The index of the PRNG desired - @param group_size Size of the multiplicative group (octets) - @param modulus_size Size of the modulus (octets) - @param p [out] bignum where generated 'p' is stored (must be initialized by caller) - @param q [out] bignum where generated 'q' is stored (must be initialized by caller) - @param g [out] bignum where generated 'g' is stored (must be initialized by caller) - @return CRYPT_OK if successful, upon error this function will free all allocated memory -*/ -static int s_dsa_make_params(prng_state *prng, int wprng, int group_size, int modulus_size, void *p, void *q, void *g) -{ - unsigned long L, N, n, outbytes, seedbytes, counter, j, i; - int err, res, mr_tests_q, mr_tests_p, found_p, found_q, hash; - unsigned char *wbuf, *sbuf, digest[MAXBLOCKSIZE]; - void *t2L1, *t2N1, *t2q, *t2seedlen, *U, *W, *X, *c, *h, *e, *seedinc; - const char *accepted_hashes[] = { "sha3-512", "sha512", "sha3-384", "sha384", "sha3-256", "sha256" }; - - /* check size */ - if (group_size > LTC_MDSA_MAX_GROUP || group_size < 1 || group_size >= modulus_size || modulus_size > LTC_MDSA_MAX_MODULUS) { - return CRYPT_INVALID_ARG; - } - - /* FIPS-186-4 A.1.1.2 Generation of the Probable Primes p and q Using an Approved Hash Function - * - * L = The desired length of the prime p (in bits e.g. L = 1024) - * N = The desired length of the prime q (in bits e.g. N = 160) - * seedlen = The desired bit length of the domain parameter seed; seedlen shallbe equal to or greater than N - * outlen = The bit length of Hash function - * - * 1. Check that the (L, N) - * 2. If (seedlen = 2^(L-1)) { - * Test whether or not p is prime as specified in Appendix C.3. - * If p is determined to be prime, then return VALID and the values of p, qand (optionally) the values of domain_parameter_seed and counter - * } - * offset = offset + n + 1 Comment: Increment offset - * } - */ - - seedbytes = group_size; - L = (unsigned long)modulus_size * 8; - N = (unsigned long)group_size * 8; - - /* XXX-TODO no Lucas test */ -#ifdef LTC_MPI_HAS_LUCAS_TEST - /* M-R tests (when followed by one Lucas test) according FIPS-186-4 - Appendix C.3 - table C.1 */ - mr_tests_p = (L <= 2048) ? 3 : 2; - if (N <= 160) { mr_tests_q = 19; } - else if (N <= 224) { mr_tests_q = 24; } - else { mr_tests_q = 27; } -#else - /* M-R tests (without Lucas test) according FIPS-186-4 - Appendix C.3 - table C.1 */ - if (L <= 1024) { mr_tests_p = 40; } - else if (L <= 2048) { mr_tests_p = 56; } - else { mr_tests_p = 64; } - - if (N <= 160) { mr_tests_q = 40; } - else if (N <= 224) { mr_tests_q = 56; } - else { mr_tests_q = 64; } -#endif - - hash = -1; - for (i = 0; i < LTC_ARRAY_SIZE(accepted_hashes); ++i) { - hash = find_hash(accepted_hashes[i]); - if (hash != -1) break; - } - if (hash == -1) { - return CRYPT_INVALID_ARG; /* no appropriate hash function found */ - } - if (N > hash_descriptor[hash].hashsize * 8) { - return CRYPT_INVALID_ARG; /* group_size too big */ - } - - if ((err = hash_is_valid(hash)) != CRYPT_OK) { return err; } - outbytes = hash_descriptor[hash].hashsize; - - n = ((L + outbytes*8 - 1) / (outbytes*8)) - 1; - - if ((wbuf = XMALLOC((n+1)*outbytes)) == NULL) { err = CRYPT_MEM; goto cleanup3; } - if ((sbuf = XMALLOC(seedbytes)) == NULL) { err = CRYPT_MEM; goto cleanup2; } - - err = ltc_mp_init_multi(&t2L1, &t2N1, &t2q, &t2seedlen, &U, &W, &X, &c, &h, &e, &seedinc, LTC_NULL); - if (err != CRYPT_OK) { goto cleanup1; } - - if ((err = ltc_mp_2expt(t2L1, L-1)) != CRYPT_OK) { goto cleanup; } - /* t2L1 = 2^(L-1) */ - if ((err = ltc_mp_2expt(t2N1, N-1)) != CRYPT_OK) { goto cleanup; } - /* t2N1 = 2^(N-1) */ - if ((err = ltc_mp_2expt(t2seedlen, seedbytes*8)) != CRYPT_OK) { goto cleanup; } - /* t2seedlen = 2^seedlen */ - - for(found_p=0; !found_p;) { - /* q */ - for(found_q=0; !found_q;) { - if (prng_descriptor[wprng].read(sbuf, seedbytes, prng) != seedbytes) { err = CRYPT_ERROR_READPRNG; goto cleanup; } - i = outbytes; - if ((err = hash_memory(hash, sbuf, seedbytes, digest, &i)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_read_unsigned_bin(U, digest, outbytes)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_mod(U, t2N1, U)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_add(t2N1, U, q)) != CRYPT_OK) { goto cleanup; } - if (!ltc_mp_isodd(q)) ltc_mp_add_d(q, 1, q); - if ((err = ltc_mp_prime_is_prime(q, mr_tests_q, &res)) != CRYPT_OK) { goto cleanup; } - if (res == LTC_MP_YES) found_q = 1; - } - - /* p */ - if ((err = ltc_mp_read_unsigned_bin(seedinc, sbuf, seedbytes)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_add(q, q, t2q)) != CRYPT_OK) { goto cleanup; } - for(counter=0; counter < 4*L && !found_p; counter++) { - for(j=0; j<=n; j++) { - if ((err = ltc_mp_add_d(seedinc, 1, seedinc)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_mod(seedinc, t2seedlen, seedinc)) != CRYPT_OK) { goto cleanup; } - /* seedinc = (seedinc+1) % 2^seed_bitlen */ - if ((i = ltc_mp_unsigned_bin_size(seedinc)) > seedbytes) { err = CRYPT_INVALID_ARG; goto cleanup; } - zeromem(sbuf, seedbytes); - if ((err = ltc_mp_to_unsigned_bin(seedinc, sbuf + seedbytes-i)) != CRYPT_OK) { goto cleanup; } - i = outbytes; - err = hash_memory(hash, sbuf, seedbytes, wbuf+(n-j)*outbytes, &i); - if (err != CRYPT_OK) { goto cleanup; } - } - if ((err = ltc_mp_read_unsigned_bin(W, wbuf, (n+1)*outbytes)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_mod(W, t2L1, W)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_add(W, t2L1, X)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_mod(X, t2q, c)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_sub_d(c, 1, p)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_sub(X, p, p)) != CRYPT_OK) { goto cleanup; } - if (ltc_mp_cmp(p, t2L1) != LTC_MP_LT) { - /* p >= 2^(L-1) */ - if ((err = ltc_mp_prime_is_prime(p, mr_tests_p, &res)) != CRYPT_OK) { goto cleanup; } - if (res == LTC_MP_YES) { - found_p = 1; - } - } - } - } - - /* FIPS-186-4 A.2.1 Unverifiable Generation of the Generator g - * 1. e = (p - 1)/q - * 2. h = any integer satisfying: 1 < h < (p - 1) - * h could be obtained from a random number generator or from a counter that changes after each use - * 3. g = h^e mod p - * 4. if (g == 1), then go to step 2. - * - */ - - if ((err = ltc_mp_sub_d(p, 1, e)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_div(e, q, e, c)) != CRYPT_OK) { goto cleanup; } - /* e = (p - 1)/q */ - i = ltc_mp_count_bits(p); - do { - do { - if ((err = rand_bn_bits(h, i, prng, wprng)) != CRYPT_OK) { goto cleanup; } - } while (ltc_mp_cmp(h, p) != LTC_MP_LT || ltc_mp_cmp_d(h, 2) != LTC_MP_GT); - if ((err = ltc_mp_sub_d(h, 1, h)) != CRYPT_OK) { goto cleanup; } - /* h is randon and 1 < h < (p-1) */ - if ((err = ltc_mp_exptmod(h, e, p, g)) != CRYPT_OK) { goto cleanup; } - } while (ltc_mp_cmp_d(g, 1) == LTC_MP_EQ); - - err = CRYPT_OK; -cleanup: - ltc_mp_deinit_multi(t2L1, t2N1, t2q, t2seedlen, U, W, X, c, h, e, seedinc, LTC_NULL); -cleanup1: - XFREE(sbuf); -cleanup2: - XFREE(wbuf); -cleanup3: - return err; -} - -/** - Generate DSA parameters p, q & g - @param prng An active PRNG state - @param wprng The index of the PRNG desired - @param group_size Size of the multiplicative group (octets) - @param modulus_size Size of the modulus (octets) - @param key [out] Where to store the created key - @return CRYPT_OK if successful. -*/ -int dsa_generate_pqg(prng_state *prng, int wprng, int group_size, int modulus_size, dsa_key *key) -{ - int err; - - /* init key */ - if ((err = dsa_int_init(key)) != CRYPT_OK) return err; - /* generate params */ - err = s_dsa_make_params(prng, wprng, group_size, modulus_size, key->p, key->q, key->g); - if (err != CRYPT_OK) { - goto cleanup; - } - - key->qord = group_size; - - return CRYPT_OK; - -cleanup: - dsa_free(key); - return err; -} - -#endif diff --git a/src/pk/dsa/dsa_import.c b/src/pk/dsa/dsa_import.c deleted file mode 100644 index 91ddcc2b..00000000 --- a/src/pk/dsa/dsa_import.c +++ /dev/null @@ -1,212 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file dsa_import.c - DSA implementation, import a DSA key, Tom St Denis -*/ - -#ifdef LTC_MDSA - -static int s_dsa_import_pkcs1(const unsigned char *in, unsigned long inlen, dsa_key *key) -{ - int err; - unsigned long zero = 0; - /* get key type */ - if ((err = der_decode_sequence_multi(in, inlen, - LTC_ASN1_SHORT_INTEGER, 1UL, &zero, - LTC_ASN1_INTEGER, 1UL, key->p, - LTC_ASN1_INTEGER, 1UL, key->q, - LTC_ASN1_INTEGER, 1UL, key->g, - LTC_ASN1_INTEGER, 1UL, key->y, - LTC_ASN1_INTEGER, 1UL, key->x, - LTC_ASN1_EOL, 0UL, NULL)) == CRYPT_OK) { - - key->type = PK_PRIVATE; - } - return err; -} - -static int s_dsa_import_y(const unsigned char *in, unsigned long inlen, dsa_key *key) -{ - return der_decode_integer(in, inlen, key->y); -} - -static LTC_INLINE int s_dsa_set_params(dsa_key *key, ltc_asn1_list *params) -{ - LTC_SET_ASN1(params, 0, LTC_ASN1_INTEGER, key->p, 1UL); - LTC_SET_ASN1(params, 1, LTC_ASN1_INTEGER, key->q, 1UL); - LTC_SET_ASN1(params, 2, LTC_ASN1_INTEGER, key->g, 1UL); - return 3; -} - -static LTC_INLINE int s_dsa_validate(dsa_key *key) -{ - int err, stat; - key->qord = ltc_mp_unsigned_bin_size(key->q); - - /* quick p, q, g validation, without primality testing - * + x, y validation */ - if ((err = dsa_int_validate(key, &stat)) != CRYPT_OK) { - return err; - } - - if (stat == 0) { - return CRYPT_INVALID_PACKET; - } - - return CRYPT_OK; -} - -static int s_dsa_import_spki(const unsigned char *in, unsigned long inlen, dsa_key *key) -{ - int err; - unsigned char* tmpbuf = NULL; - ltc_asn1_list params[3]; - unsigned long tmpbuf_len = inlen, len; - - len = s_dsa_set_params(key, params); - - tmpbuf = XCALLOC(1, tmpbuf_len); - if (tmpbuf == NULL) { - return CRYPT_MEM; - } - - err = x509_decode_subject_public_key_info(in, inlen, - LTC_OID_DSA, tmpbuf, &tmpbuf_len, - LTC_ASN1_SEQUENCE, params, &len); - if (err != CRYPT_OK) { - goto LBL_ERR; - } - - if ((err = s_dsa_import_y(tmpbuf, tmpbuf_len, key)) != CRYPT_OK) { - goto LBL_ERR; - } - - key->type = PK_PUBLIC; -LBL_ERR: - XFREE(tmpbuf); - return err; -} - -int dsa_import_spki(const unsigned char *in, unsigned long inlen, dsa_key *key) -{ - int err; - - LTC_ARGCHK(in != NULL); - - /* init key */ - if ((err = dsa_int_init(key)) != CRYPT_OK) return err; - - if ((err = s_dsa_import_spki(in, inlen, key)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = s_dsa_validate(key)) != CRYPT_OK) { - goto LBL_ERR; - } - - return CRYPT_OK; -LBL_ERR: - dsa_free(key); - return err; -} - -static int s_dsa_import_x509(const unsigned char *in, unsigned long inlen, dsa_key *key) -{ - int err; - ltc_asn1_list params[3]; - unsigned long len; - - len = s_dsa_set_params(key, params); - - if ((err = x509_decode_public_key_from_certificate(in, inlen, - LTC_OID_DSA, - LTC_ASN1_SEQUENCE, params, &len, - (public_key_decode_cb)s_dsa_import_y, key)) == CRYPT_OK) { - key->type = PK_PUBLIC; - return CRYPT_OK; - } - - return err; -} - -/** - Import a DSA key - @param in The binary packet to import from - @param inlen The length of the binary packet - @param key [out] Where to store the imported key - @return CRYPT_OK if successful, upon error this function will free all allocated memory -*/ -int dsa_import(const unsigned char *in, unsigned long inlen, dsa_key *key) -{ - int err; - unsigned char flags[1]; - - LTC_ARGCHK(in != NULL); - - /* init key */ - if ((err = dsa_int_init(key)) != CRYPT_OK) return err; - - /* try to match the old libtomcrypt format */ - err = der_decode_sequence_multi(in, inlen, LTC_ASN1_BIT_STRING, 1UL, flags, - LTC_ASN1_EOL, 0UL, NULL); - - if (err == CRYPT_OK || err == CRYPT_INPUT_TOO_LONG) { - /* private key */ - if (flags[0] == 1) { - if ((err = der_decode_sequence_multi(in, inlen, - LTC_ASN1_BIT_STRING, 1UL, flags, - LTC_ASN1_INTEGER, 1UL, key->g, - LTC_ASN1_INTEGER, 1UL, key->p, - LTC_ASN1_INTEGER, 1UL, key->q, - LTC_ASN1_INTEGER, 1UL, key->y, - LTC_ASN1_INTEGER, 1UL, key->x, - LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { - goto LBL_ERR; - } - key->type = PK_PRIVATE; - goto LBL_OK; - } - /* public key */ - else if (flags[0] == 0) { - if ((err = der_decode_sequence_multi(in, inlen, - LTC_ASN1_BIT_STRING, 1UL, flags, - LTC_ASN1_INTEGER, 1UL, key->g, - LTC_ASN1_INTEGER, 1UL, key->p, - LTC_ASN1_INTEGER, 1UL, key->q, - LTC_ASN1_INTEGER, 1UL, key->y, - LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { - goto LBL_ERR; - } - key->type = PK_PUBLIC; - goto LBL_OK; - } - else { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - } - - if (s_dsa_import_pkcs1(in, inlen, key) == CRYPT_OK) { - goto LBL_OK; - } - if (s_dsa_import_spki(in, inlen, key) == CRYPT_OK) { - goto LBL_OK; - } - if ((err = s_dsa_import_x509(in, inlen, key)) != CRYPT_OK) { - goto LBL_ERR; - } - -LBL_OK: - if ((err = s_dsa_validate(key)) != CRYPT_OK) { - goto LBL_ERR; - } - - return CRYPT_OK; -LBL_ERR: - dsa_free(key); - return err; -} - -#endif diff --git a/src/pk/dsa/dsa_import_pkcs8.c b/src/pk/dsa/dsa_import_pkcs8.c deleted file mode 100644 index 974631ea..00000000 --- a/src/pk/dsa/dsa_import_pkcs8.c +++ /dev/null @@ -1,88 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file dsa_import_pkcs8.c - Import a PKCS DSA key -*/ - -#ifdef LTC_MDSA - -int dsa_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, dsa_key *key) -{ - int err, stat; - - LTC_UNUSED_PARAM(alg_id); - - if (!alg_id->child - || !LTC_ASN1_IS_TYPE(alg_id->child->next, LTC_ASN1_SEQUENCE) - || !LTC_ASN1_IS_TYPE(priv_key, LTC_ASN1_OCTET_STRING)) { - return CRYPT_INVALID_PACKET; - } - if ((err = dsa_set_pqg_dsaparam(alg_id->child->next->data, alg_id->child->next->size, key)) != CRYPT_OK) { - return err; - } - if ((err = der_decode_integer(priv_key->data, priv_key->size, key->x)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = ltc_mp_exptmod(key->g, key->x, key->p, key->y)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* quick p, q, g validation, without primality testing - * + x, y validation */ - if ((err = dsa_int_validate(key, &stat)) != CRYPT_OK) { - goto LBL_ERR; - } - if (stat == 0) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - - key->qord = ltc_mp_unsigned_bin_size(key->q); - key->type = PK_PRIVATE; - - return err; -LBL_ERR: - dsa_free(key); - return err; -} -/** - Import an RSAPrivateKey in PKCS#8 format - @param in The packet to import from - @param inlen It's length (octets) - @param pw_ctx The password context when decrypting the private key - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful, upon error allocated memory is freed -*/ -int dsa_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - dsa_key *key) -{ - int err; - ltc_asn1_list *l = NULL; - ltc_asn1_list *alg_id = NULL, *priv_key = NULL; - enum ltc_oid_id pka; - - LTC_ARGCHK(in != NULL); - - if ((err = pkcs8_decode_flexi(in, inlen, pw_ctx, &l)) != CRYPT_OK) { - return err; - } - if ((err = pkcs8_get_children(l, &pka, &alg_id, &priv_key)) != CRYPT_OK) { - goto LBL_DER_FREE; - } - if (pka != LTC_OID_DSA) { - err = CRYPT_INVALID_PACKET; - goto LBL_DER_FREE; - } - - err = dsa_import_pkcs8_asn1(alg_id, priv_key, key); - -LBL_DER_FREE: - der_free_sequence_flexi(l); - return err; -} - -#endif /* LTC_MRSA */ diff --git a/src/pk/dsa/dsa_init.c b/src/pk/dsa/dsa_init.c deleted file mode 100644 index 77625ebb..00000000 --- a/src/pk/dsa/dsa_init.c +++ /dev/null @@ -1,22 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - - -#ifdef LTC_MDSA - -/** - Init DSA key - @param key [out] the key to init - @return CRYPT_OK if successful. -*/ -int dsa_int_init(dsa_key *key) -{ - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - /* init key */ - return ltc_mp_init_multi(&key->p, &key->g, &key->q, &key->x, &key->y, LTC_NULL); -} - -#endif diff --git a/src/pk/dsa/dsa_make_key.c b/src/pk/dsa/dsa_make_key.c deleted file mode 100644 index 5a205b27..00000000 --- a/src/pk/dsa/dsa_make_key.c +++ /dev/null @@ -1,31 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file dsa_make_key.c - DSA implementation, generate a DSA key -*/ - -#ifdef LTC_MDSA - -/** - Old-style creation of a DSA key - @param prng An active PRNG state - @param wprng The index of the PRNG desired - @param group_size Size of the multiplicative group (octets) - @param modulus_size Size of the modulus (octets) - @param key [out] Where to store the created key - @return CRYPT_OK if successful. -*/ -int dsa_make_key(prng_state *prng, int wprng, int group_size, int modulus_size, dsa_key *key) -{ - int err; - - if ((err = dsa_generate_pqg(prng, wprng, group_size, modulus_size, key)) != CRYPT_OK) { return err; } - if ((err = dsa_generate_key(prng, wprng, key)) != CRYPT_OK) { return err; } - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/dsa/dsa_set.c b/src/pk/dsa/dsa_set.c deleted file mode 100644 index 6aee4d8f..00000000 --- a/src/pk/dsa/dsa_set.c +++ /dev/null @@ -1,99 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - - -#ifdef LTC_MDSA - -/** - Import DSA's p, q & g from raw numbers - @param p DSA's p in binary representation - @param plen The length of p - @param q DSA's q in binary representation - @param qlen The length of q - @param g DSA's g in binary representation - @param glen The length of g - @param key [out] the destination for the imported key - @return CRYPT_OK if successful. -*/ -int dsa_set_pqg(const unsigned char *p, unsigned long plen, - const unsigned char *q, unsigned long qlen, - const unsigned char *g, unsigned long glen, - dsa_key *key) -{ - int err, stat; - - LTC_ARGCHK(p != NULL); - LTC_ARGCHK(q != NULL); - LTC_ARGCHK(g != NULL); - - /* init key */ - if ((err = dsa_int_init(key)) != CRYPT_OK) return err; - - if ((err = ltc_mp_read_unsigned_bin(key->p, p , plen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = ltc_mp_read_unsigned_bin(key->g, g , glen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = ltc_mp_read_unsigned_bin(key->q, q , qlen)) != CRYPT_OK) { goto LBL_ERR; } - - key->qord = ltc_mp_unsigned_bin_size(key->q); - - /* do only a quick validation, without primality testing */ - if ((err = dsa_int_validate_pqg(key, &stat)) != CRYPT_OK) { goto LBL_ERR; } - if (stat == 0) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - - return CRYPT_OK; - -LBL_ERR: - dsa_free(key); - return err; -} - -/** - Import DSA public or private key-part from raw numbers - - NB: The p, q & g parts must be set beforehand - - @param in The key-part to import, either public or private. - @param inlen The key-part's length - @param type Which type of key (PK_PRIVATE or PK_PUBLIC) - @param key [out] the destination for the imported key - @return CRYPT_OK if successful. -*/ -int dsa_set_key(const unsigned char *in, unsigned long inlen, int type, dsa_key *key) -{ - int err, stat = 0; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(key->x != NULL); - LTC_ARGCHK(key->y != NULL); - LTC_ARGCHK(key->p != NULL); - LTC_ARGCHK(key->g != NULL); - LTC_ARGCHK(key->q != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - if (type == PK_PRIVATE) { - key->type = PK_PRIVATE; - if ((err = ltc_mp_read_unsigned_bin(key->x, in, inlen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = ltc_mp_exptmod(key->g, key->x, key->p, key->y)) != CRYPT_OK) { goto LBL_ERR; } - } - else { - key->type = PK_PUBLIC; - if ((err = ltc_mp_read_unsigned_bin(key->y, in, inlen)) != CRYPT_OK) { goto LBL_ERR; } - } - - if ((err = dsa_int_validate_xy(key, &stat)) != CRYPT_OK) { goto LBL_ERR; } - if (stat == 0) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - - return CRYPT_OK; - -LBL_ERR: - dsa_free(key); - return err; -} - -#endif diff --git a/src/pk/dsa/dsa_set_pqg_dsaparam.c b/src/pk/dsa/dsa_set_pqg_dsaparam.c deleted file mode 100644 index 3c9bf407..00000000 --- a/src/pk/dsa/dsa_set_pqg_dsaparam.c +++ /dev/null @@ -1,56 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - - -#ifdef LTC_MDSA - -/** - Import DSA's p, q & g from dsaparam - - dsaparam data: openssl dsaparam -outform DER -out dsaparam.der 2048 - - @param dsaparam The DSA param DER encoded data - @param dsaparamlen The length of dhparam data - @param key [out] the destination for the imported key - @return CRYPT_OK if successful. -*/ -int dsa_set_pqg_dsaparam(const unsigned char *dsaparam, unsigned long dsaparamlen, - dsa_key *key) -{ - int err, stat; - - LTC_ARGCHK(dsaparam != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - /* init key */ - if ((err = dsa_int_init(key)) != CRYPT_OK) return err; - - if ((err = der_decode_sequence_multi(dsaparam, dsaparamlen, - LTC_ASN1_INTEGER, 1UL, key->p, - LTC_ASN1_INTEGER, 1UL, key->q, - LTC_ASN1_INTEGER, 1UL, key->g, - LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { - goto LBL_ERR; - } - - key->qord = ltc_mp_unsigned_bin_size(key->q); - - /* quick p, q, g validation, without primality testing */ - if ((err = dsa_int_validate_pqg(key, &stat)) != CRYPT_OK) { - goto LBL_ERR; - } - if (stat == 0) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - - return CRYPT_OK; - -LBL_ERR: - dsa_free(key); - return err; -} - -#endif diff --git a/src/pk/dsa/dsa_shared_secret.c b/src/pk/dsa/dsa_shared_secret.c deleted file mode 100644 index 866832a7..00000000 --- a/src/pk/dsa/dsa_shared_secret.c +++ /dev/null @@ -1,60 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file dsa_shared_secret.c - DSA Crypto, Tom St Denis -*/ - -#ifdef LTC_MDSA - -/** - Create a DSA shared secret between two keys - @param private_key The private DSA key (the exponent) - @param base The base of the exponentiation (allows this to be used for both encrypt and decrypt) - @param public_key The public key - @param out [out] Destination of the shared secret - @param outlen [in/out] The max size and resulting size of the shared secret - @return CRYPT_OK if successful -*/ -int dsa_shared_secret(void *private_key, void *base, - const dsa_key *public_key, - unsigned char *out, unsigned long *outlen) -{ - unsigned long x; - void *res; - int err; - - LTC_ARGCHK(private_key != NULL); - LTC_ARGCHK(public_key != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* make new point */ - if ((err = ltc_mp_init(&res)) != CRYPT_OK) { - return err; - } - - if ((err = ltc_mp_exptmod(base, private_key, public_key->p, res)) != CRYPT_OK) { - ltc_mp_clear(res); - return err; - } - - x = (unsigned long)ltc_mp_unsigned_bin_size(res); - if (*outlen < x) { - *outlen = x; - err = CRYPT_BUFFER_OVERFLOW; - goto done; - } - zeromem(out, x); - if ((err = ltc_mp_to_unsigned_bin(res, out + (x - ltc_mp_unsigned_bin_size(res)))) != CRYPT_OK) { goto done; } - - err = CRYPT_OK; - *outlen = x; -done: - ltc_mp_clear(res); - return err; -} - -#endif diff --git a/src/pk/dsa/dsa_sign_hash.c b/src/pk/dsa/dsa_sign_hash.c deleted file mode 100644 index ab3e27ad..00000000 --- a/src/pk/dsa/dsa_sign_hash.c +++ /dev/null @@ -1,142 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file dsa_sign_hash.c - DSA implementation, sign a hash, Tom St Denis -*/ - -#ifdef LTC_MDSA - -/** - Sign a hash with DSA - @param in The hash to sign - @param inlen The length of the hash to sign - @param r The "r" integer of the signature (caller must initialize with ltc_mp_init() first) - @param s The "s" integer of the signature (caller must initialize with ltc_mp_init() first) - @param prng An active PRNG state - @param wprng The index of the PRNG desired - @param key A private DSA key - @return CRYPT_OK if successful -*/ -int dsa_sign_hash_raw(const unsigned char *in, unsigned long inlen, - void *r, void *s, - prng_state *prng, int wprng, const dsa_key *key) -{ - void *k, *kinv, *tmp; - unsigned char *buf; - int err, qbits; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(r != NULL); - LTC_ARGCHK(s != NULL); - LTC_ARGCHK(key != NULL); - - if ((err = prng_is_valid(wprng)) != CRYPT_OK) { - return err; - } - if (key->type != PK_PRIVATE) { - return CRYPT_PK_NOT_PRIVATE; - } - - /* check group order size */ - if (key->qord >= LTC_MDSA_MAX_GROUP) { - return CRYPT_INVALID_ARG; - } - - buf = XMALLOC(LTC_MDSA_MAX_GROUP); - if (buf == NULL) { - return CRYPT_MEM; - } - - /* Init our temps */ - if ((err = ltc_mp_init_multi(&k, &kinv, &tmp, LTC_NULL)) != CRYPT_OK) { goto ERRBUF; } - - qbits = ltc_mp_count_bits(key->q); -retry: - - do { - /* gen random k */ - if ((err = rand_bn_bits(k, qbits, prng, wprng)) != CRYPT_OK) { goto error; } - - /* k should be from range: 1 <= k <= q-1 (see FIPS 186-4 B.2.2) */ - if (ltc_mp_cmp_d(k, 0) != LTC_MP_GT || ltc_mp_cmp(k, key->q) != LTC_MP_LT) { goto retry; } - - /* test gcd */ - if ((err = ltc_mp_gcd(k, key->q, tmp)) != CRYPT_OK) { goto error; } - } while (ltc_mp_cmp_d(tmp, 1) != LTC_MP_EQ); - - /* now find 1/k mod q */ - if ((err = ltc_mp_invmod(k, key->q, kinv)) != CRYPT_OK) { goto error; } - - /* now find r = g^k mod p mod q */ - if ((err = ltc_mp_exptmod(key->g, k, key->p, r)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_mod(r, key->q, r)) != CRYPT_OK) { goto error; } - - if (ltc_mp_iszero(r) == LTC_MP_YES) { goto retry; } - - /* FIPS 186-4 4.6: use leftmost min(bitlen(q), bitlen(hash)) bits of 'hash'*/ - inlen = MIN(inlen, (unsigned long)(key->qord)); - - /* now find s = (in + xr)/k mod q */ - if ((err = ltc_mp_read_unsigned_bin(tmp, in, inlen)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_mul(key->x, r, s)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_add(s, tmp, s)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_mulmod(s, kinv, key->q, s)) != CRYPT_OK) { goto error; } - - if (ltc_mp_iszero(s) == LTC_MP_YES) { goto retry; } - - err = CRYPT_OK; -error: - ltc_mp_deinit_multi(k, kinv, tmp, LTC_NULL); -ERRBUF: -#ifdef LTC_CLEAN_STACK - zeromem(buf, LTC_MDSA_MAX_GROUP); -#endif - XFREE(buf); - return err; -} - -/** - Sign a hash with DSA - @param in The hash to sign - @param inlen The length of the hash to sign - @param out [out] Where to store the signature - @param outlen [in/out] The max size and resulting size of the signature - @param prng An active PRNG state - @param wprng The index of the PRNG desired - @param key A private DSA key - @return CRYPT_OK if successful -*/ -int dsa_sign_hash(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int wprng, const dsa_key *key) -{ - void *r, *s; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - if (ltc_mp_init_multi(&r, &s, LTC_NULL) != CRYPT_OK) { - return CRYPT_MEM; - } - - if ((err = dsa_sign_hash_raw(in, inlen, r, s, prng, wprng, key)) != CRYPT_OK) { - goto error; - } - - err = der_encode_sequence_multi(out, outlen, - LTC_ASN1_INTEGER, 1UL, r, - LTC_ASN1_INTEGER, 1UL, s, - LTC_ASN1_EOL, 0UL, NULL); - -error: - ltc_mp_deinit_multi(r, s, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/dsa/dsa_verify_hash.c b/src/pk/dsa/dsa_verify_hash.c deleted file mode 100644 index 7e79a5bb..00000000 --- a/src/pk/dsa/dsa_verify_hash.c +++ /dev/null @@ -1,128 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file dsa_verify_hash.c - DSA implementation, verify a signature, Tom St Denis -*/ - - -#ifdef LTC_MDSA - -/** - Verify a DSA signature - @param r DSA "r" parameter - @param s DSA "s" parameter - @param hash The hash that was signed - @param hashlen The length of the hash that was signed - @param stat [out] The result of the signature verification, 1==valid, 0==invalid - @param key The corresponding public DSA key - @return CRYPT_OK if successful (even if the signature is invalid) -*/ -int dsa_verify_hash_raw( void *r, void *s, - const unsigned char *hash, unsigned long hashlen, - int *stat, const dsa_key *key) -{ - void *w, *v, *u1, *u2; - int err; - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - LTC_ARGCHK(r != NULL); - LTC_ARGCHK(s != NULL); - LTC_ARGCHK(key != NULL); - - /* init our variables */ - if ((err = ltc_mp_init_multi(&w, &v, &u1, &u2, LTC_NULL)) != CRYPT_OK) { - return err; - } - - /* neither r or s can be null or >q*/ - if (ltc_mp_cmp_d(r, 0) != LTC_MP_GT || ltc_mp_cmp_d(s, 0) != LTC_MP_GT || ltc_mp_cmp(r, key->q) != LTC_MP_LT || ltc_mp_cmp(s, key->q) != LTC_MP_LT) { - err = CRYPT_INVALID_PACKET; - goto error; - } - - /* FIPS 186-4 4.7: use leftmost min(bitlen(q), bitlen(hash)) bits of 'hash' */ - hashlen = MIN(hashlen, (unsigned long)(key->qord)); - - /* w = 1/s mod q */ - if ((err = ltc_mp_invmod(s, key->q, w)) != CRYPT_OK) { goto error; } - - /* u1 = m * w mod q */ - if ((err = ltc_mp_read_unsigned_bin(u1, hash, hashlen)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_mulmod(u1, w, key->q, u1)) != CRYPT_OK) { goto error; } - - /* u2 = r*w mod q */ - if ((err = ltc_mp_mulmod(r, w, key->q, u2)) != CRYPT_OK) { goto error; } - - /* v = g^u1 * y^u2 mod p mod q */ - if ((err = ltc_mp_exptmod(key->g, u1, key->p, u1)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_exptmod(key->y, u2, key->p, u2)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_mulmod(u1, u2, key->p, v)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_mod(v, key->q, v)) != CRYPT_OK) { goto error; } - - /* if r = v then we're set */ - if (ltc_mp_cmp(r, v) == LTC_MP_EQ) { - *stat = 1; - } - - err = CRYPT_OK; -error: - ltc_mp_deinit_multi(w, v, u1, u2, LTC_NULL); - return err; -} - -/** - Verify a DSA signature - @param sig The signature - @param siglen The length of the signature (octets) - @param hash The hash that was signed - @param hashlen The length of the hash that was signed - @param stat [out] The result of the signature verification, 1==valid, 0==invalid - @param key The corresponding public DSA key - @return CRYPT_OK if successful (even if the signature is invalid) -*/ -int dsa_verify_hash(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int *stat, const dsa_key *key) -{ - int err; - void *r, *s; - ltc_asn1_list sig_seq[2]; - unsigned long reallen = 0; - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - if ((err = ltc_mp_init_multi(&r, &s, LTC_NULL)) != CRYPT_OK) { - return err; - } - - LTC_SET_ASN1(sig_seq, 0, LTC_ASN1_INTEGER, r, 1UL); - LTC_SET_ASN1(sig_seq, 1, LTC_ASN1_INTEGER, s, 1UL); - - err = der_decode_sequence_strict(sig, siglen, sig_seq, 2); - if (err != CRYPT_OK) { - goto LBL_ERR; - } - - err = der_length_sequence(sig_seq, 2, &reallen); - if (err != CRYPT_OK || reallen != siglen) { - goto LBL_ERR; - } - - /* do the op */ - err = dsa_verify_hash_raw(r, s, hash, hashlen, stat, key); - -LBL_ERR: - ltc_mp_deinit_multi(r, s, LTC_NULL); - return err; -} - -#endif - diff --git a/src/pk/dsa/dsa_verify_key.c b/src/pk/dsa/dsa_verify_key.c deleted file mode 100644 index 80ae6856..00000000 --- a/src/pk/dsa/dsa_verify_key.c +++ /dev/null @@ -1,207 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file dsa_verify_key.c - DSA implementation, verify a key, Tom St Denis -*/ - -#ifdef LTC_MDSA - -/** - Validate a DSA key - - Yeah, this function should've been called dsa_validate_key() - in the first place and for compat-reasons we keep it - as it was (for now). - - @param key The key to validate - @param stat [out] Result of test, 1==valid, 0==invalid - @return CRYPT_OK if successful -*/ -int dsa_verify_key(const dsa_key *key, int *stat) -{ - int err; - - err = dsa_int_validate_primes(key, stat); - if (err != CRYPT_OK || *stat == 0) return err; - - return dsa_int_validate(key, stat); -} - -/** - Non-complex part (no primality testing) of the validation - of DSA params (p, q, g) - - @param key The key to validate - @param stat [out] Result of test, 1==valid, 0==invalid - @return CRYPT_OK if successful -*/ -int dsa_int_validate_pqg(const dsa_key *key, int *stat) -{ - void *tmp1, *tmp2; - int err; - - /* stat is cleared before anything else can return, it stays 0 unless the params are valid */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - LTC_ARGCHK(key != NULL); - - /* check q-order */ - if ( key->qord >= LTC_MDSA_MAX_GROUP || key->qord <= 15 || - (unsigned long)key->qord >= ltc_mp_unsigned_bin_size(key->p) || - (ltc_mp_unsigned_bin_size(key->p) - key->qord) >= LTC_MDSA_DELTA ) { - return CRYPT_OK; - } - - /* FIPS 186-4 chapter 4.1: 1 < g < p */ - if (ltc_mp_cmp_d(key->g, 1) != LTC_MP_GT || ltc_mp_cmp(key->g, key->p) != LTC_MP_LT) { - return CRYPT_OK; - } - - if ((err = ltc_mp_init_multi(&tmp1, &tmp2, LTC_NULL)) != CRYPT_OK) { return err; } - - /* FIPS 186-4 chapter 4.1: q is a divisor of (p - 1) */ - if ((err = ltc_mp_sub_d(key->p, 1, tmp1)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_div(tmp1, key->q, tmp1, tmp2)) != CRYPT_OK) { goto error; } - if (ltc_mp_iszero(tmp2) != LTC_MP_YES) { - err = CRYPT_OK; - goto error; - } - - /* FIPS 186-4 chapter 4.1: g is a generator of a subgroup of order q in - * the multiplicative group of GF(p) - so we make sure that g^q mod p = 1 - */ - if ((err = ltc_mp_exptmod(key->g, key->q, key->p, tmp1)) != CRYPT_OK) { goto error; } - if (ltc_mp_cmp_d(tmp1, 1) != LTC_MP_EQ) { - err = CRYPT_OK; - goto error; - } - - err = CRYPT_OK; - *stat = 1; -error: - ltc_mp_deinit_multi(tmp2, tmp1, LTC_NULL); - return err; -} - -/** - Primality testing of DSA params p and q - - @param key The key to validate - @param stat [out] Result of test, 1==valid, 0==invalid - @return CRYPT_OK if successful -*/ -int dsa_int_validate_primes(const dsa_key *key, int *stat) -{ - int err, res; - - /* stat is cleared before anything else can return, it stays 0 unless the primes are valid */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - LTC_ARGCHK(key != NULL); - - /* key->q prime? */ - if ((err = ltc_mp_prime_is_prime(key->q, LTC_MILLER_RABIN_REPS, &res)) != CRYPT_OK) { - return err; - } - if (res == LTC_MP_NO) { - return CRYPT_OK; - } - - /* key->p prime? */ - if ((err = ltc_mp_prime_is_prime(key->p, LTC_MILLER_RABIN_REPS, &res)) != CRYPT_OK) { - return err; - } - if (res == LTC_MP_NO) { - return CRYPT_OK; - } - - *stat = 1; - return CRYPT_OK; -} - -/** - Validation of a DSA key (x and y values) - - @param key The key to validate - @param stat [out] Result of test, 1==valid, 0==invalid - @return CRYPT_OK if successful -*/ -int dsa_int_validate_xy(const dsa_key *key, int *stat) -{ - void *tmp; - int err; - - /* stat is cleared before anything else can return, it stays 0 unless the key is valid */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - LTC_ARGCHK(key != NULL); - - /* 1 < y < p-1 */ - if ((err = ltc_mp_init(&tmp)) != CRYPT_OK) { - return err; - } - if ((err = ltc_mp_sub_d(key->p, 1, tmp)) != CRYPT_OK) { - goto error; - } - if (ltc_mp_cmp_d(key->y, 1) != LTC_MP_GT || ltc_mp_cmp(key->y, tmp) != LTC_MP_LT) { - err = CRYPT_OK; - goto error; - } - - if (key->type == PK_PRIVATE) { - /* FIPS 186-4 chapter 4.1: 0 < x < q */ - if (ltc_mp_cmp_d(key->x, 0) != LTC_MP_GT || ltc_mp_cmp(key->x, key->q) != LTC_MP_LT) { - err = CRYPT_OK; - goto error; - } - /* FIPS 186-4 chapter 4.1: y = g^x mod p */ - if ((err = ltc_mp_exptmod(key->g, key->x, key->p, tmp)) != CRYPT_OK) { - goto error; - } - if (ltc_mp_cmp(tmp, key->y) != LTC_MP_EQ) { - err = CRYPT_OK; - goto error; - } - } - else { - /* with just a public key we cannot test y = g^x mod p therefore we - * only test that y^q mod p = 1, which makes sure y is in g^x mod p - */ - if ((err = ltc_mp_exptmod(key->y, key->q, key->p, tmp)) != CRYPT_OK) { - goto error; - } - if (ltc_mp_cmp_d(tmp, 1) != LTC_MP_EQ) { - err = CRYPT_OK; - goto error; - } - } - - err = CRYPT_OK; - *stat = 1; -error: - ltc_mp_clear(tmp); - return err; -} - -/** - Validation of DSA params (p, q, g) and DSA key (x and y) - - @param key The key to validate - @param stat [out] Result of test, 1==valid, 0==invalid - @return CRYPT_OK if successful -*/ -int dsa_int_validate(const dsa_key *key, int *stat) -{ - int err; - - err = dsa_int_validate_pqg(key, stat); - if (err != CRYPT_OK || *stat == 0) return err; - - return dsa_int_validate_xy(key, stat); - -} - -#endif diff --git a/src/pk/ec25519/ec25519_crypto_ctx.c b/src/pk/ec25519/ec25519_crypto_ctx.c deleted file mode 100644 index e1efb301..00000000 --- a/src/pk/ec25519/ec25519_crypto_ctx.c +++ /dev/null @@ -1,41 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ec25519_crypto_ctx.c - curve25519 crypto context helper -*/ - -#ifdef LTC_CURVE25519 - -int ec25519_crypto_ctx(unsigned char *out, unsigned long *outlen, unsigned char flag, const unsigned char *ctx, unsigned long ctxlen) -{ - unsigned char *buf = out; - - const char *prefix = "SigEd25519 no Ed25519 collisions"; - const unsigned long prefix_len = XSTRLEN(prefix); - const unsigned char ctxlen8 = (unsigned char)ctxlen; - - if (ctxlen > 255u) return CRYPT_INPUT_TOO_LONG; - if (*outlen < prefix_len + 2u + ctxlen) return CRYPT_BUFFER_OVERFLOW; - - XMEMCPY(buf, prefix, prefix_len); - buf += prefix_len; - XMEMCPY(buf, &flag, 1); - buf++; - XMEMCPY(buf, &ctxlen8, 1); - buf++; - - if (ctxlen > 0u) { - LTC_ARGCHK(ctx != NULL); - XMEMCPY(buf, ctx, ctxlen); - buf += ctxlen; - } - - *outlen = buf-out; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/ec25519/ec25519_export.c b/src/pk/ec25519/ec25519_export.c deleted file mode 100644 index 5cd7c10f..00000000 --- a/src/pk/ec25519/ec25519_export.c +++ /dev/null @@ -1,94 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ec25519_export.c - Generic export of a Curve/Ed25519 key to a binary packet, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -/** - Generic export of a Curve/Ed25519 key to a binary packet - @param out [out] The destination for the key - @param outlen [in/out] The max size and resulting size of the Ed25519 key - @param type Which type of key (PK_PRIVATE, PK_PUBLIC|PK_STD or PK_PUBLIC) - @param key The key you wish to export - @return CRYPT_OK if successful -*/ -int ec25519_export( unsigned char *out, unsigned long *outlen, - int which, - const curve25519_key *key) -{ - int err, std; - const char* OID; - unsigned long oid[16], oidlen; - ltc_asn1_list alg_id[1]; - enum ltc_oid_id oid_id; - unsigned char private_key[34]; - unsigned long version, private_key_len = sizeof(private_key); - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - std = which & PK_STD; - which &= ~PK_STD; - if ((err = pk_get_oid_id(key->pka, &oid_id)) != CRYPT_OK) { - return err; - } - - if (which == PK_PRIVATE) { - if(key->type != PK_PRIVATE) return CRYPT_PK_INVALID_TYPE; - - if (std == PK_STD) { - if ((err = pk_get_oid(oid_id, &OID)) != CRYPT_OK) { - return err; - } - oidlen = LTC_ARRAY_SIZE(oid); - if ((err = pk_oid_str_to_num(OID, oid, &oidlen)) != CRYPT_OK) { - return err; - } - - LTC_SET_ASN1(alg_id, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid, oidlen); - - /* encode private key as PKCS#8 */ - if ((err = der_encode_octet_string(key->priv, 32uL, private_key, &private_key_len)) != CRYPT_OK) { - return err; - } - - version = 0; - err = der_encode_sequence_multi(out, outlen, - LTC_ASN1_SHORT_INTEGER, 1uL, &version, - LTC_ASN1_SEQUENCE, 1uL, alg_id, - LTC_ASN1_OCTET_STRING, private_key_len, private_key, - LTC_ASN1_EOL, 0uL, NULL); - } else { - if (*outlen < sizeof(key->priv)) { - err = CRYPT_BUFFER_OVERFLOW; - } else { - XMEMCPY(out, key->priv, sizeof(key->priv)); - err = CRYPT_OK; - } - *outlen = sizeof(key->priv); - } - } else { - if (std == PK_STD) { - /* encode public key as SubjectPublicKeyInfo */ - err = x509_encode_subject_public_key_info(out, outlen, oid_id, key->pub, 32uL, LTC_ASN1_EOL, NULL, 0); - } else { - if (*outlen < sizeof(key->pub)) { - err = CRYPT_BUFFER_OVERFLOW; - } else { - XMEMCPY(out, key->pub, sizeof(key->pub)); - err = CRYPT_OK; - } - *outlen = sizeof(key->pub); - } - } - - return err; -} - -#endif diff --git a/src/pk/ec25519/ec25519_import_pkcs8.c b/src/pk/ec25519/ec25519_import_pkcs8.c deleted file mode 100644 index 9f9a6bcb..00000000 --- a/src/pk/ec25519/ec25519_import_pkcs8.c +++ /dev/null @@ -1,86 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ec25519_import_pkcs8.c - Generic import of a Curve/Ed25519 private key in PKCS#8 format, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -typedef int (*sk_to_pk)(unsigned char *pk , const unsigned char *sk); - -int ec25519_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, - enum ltc_oid_id id, - curve25519_key *key) -{ - int err; - unsigned long key_len; - sk_to_pk fp; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - LTC_UNUSED_PARAM(alg_id); - - switch (id) { - case LTC_OID_ED25519: - fp = tweetnacl_crypto_sk_to_pk; - break; - case LTC_OID_X25519: - fp = tweetnacl_crypto_scalarmult_base; - break; - default: - return CRYPT_PK_INVALID_TYPE; - } - - key_len = sizeof(key->priv); - if ((err = der_decode_octet_string(priv_key->data, priv_key->size, key->priv, &key_len)) == CRYPT_OK) { - fp(key->pub, key->priv); - key->type = PK_PRIVATE; - err = pk_get_pka_id(id, &key->pka); - } - return err; -} - -/** - Generic import of a Curve/Ed25519 private key in PKCS#8 format - @param in The packet to import from - @param inlen It's length (octets) - @param pw_ctx The password context when decrypting the private key - @param id The type of the private key - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int ec25519_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - enum ltc_oid_id id, - curve25519_key *key) -{ - int err; - ltc_asn1_list *l = NULL; - ltc_asn1_list *alg_id = NULL, *priv_key = NULL; - enum ltc_oid_id pka; - - LTC_ARGCHK(in != NULL); - - err = pkcs8_decode_flexi(in, inlen, pw_ctx, &l); - if (err != CRYPT_OK) return err; - - if ((err = pkcs8_get_children(l, &pka, &alg_id, &priv_key)) != CRYPT_OK) { - goto LBL_DER_FREE; - } - if (pka != id) { - err = CRYPT_INVALID_PACKET; - goto LBL_DER_FREE; - } - - err = ec25519_import_pkcs8_asn1(alg_id, priv_key, id, key); - -LBL_DER_FREE: - der_free_sequence_flexi(l); - return err; -} - -#endif diff --git a/src/pk/ec25519/tweetnacl.c b/src/pk/ec25519/tweetnacl.c deleted file mode 100644 index 02df12cd..00000000 --- a/src/pk/ec25519/tweetnacl.c +++ /dev/null @@ -1,514 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/* automatically generated file, do not edit */ - -#define add tnacl_add -#define FOR(i,n) for (i = 0;i < n;++i) -#define sv static void - -typedef unsigned char u8; -typedef ulong32 u32; -typedef ulong64 u64; -typedef long64 i64; -typedef i64 gf[16]; - -#define GF25519_RADIX (((i64)1) << 16) /* field limbs use base 2^16; multiplication avoids left-shifting negative carry values */ -#define MODL_RADIX (((i64)1) << 8) /* base used by modL carry reduction; multiplication avoids left-shifting negative carry values */ - -static const u8 - nine[32] = {9}; -static const gf - gf0, - gf1 = {1}, - gf121665 = {0xDB41,1}, - D = {0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203}, - D2 = {0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406}, - X = {0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169}, - Y = {0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666}, - I = {0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83}; - -static int vn(const u8 *x,const u8 *y,int n) -{ - int i; - u32 d = 0; - FOR(i,n) d |= x[i]^y[i]; - return (1 & ((d - 1) >> 8)) - 1; -} - -static int tweetnacl_crypto_verify_32(const u8 *x,const u8 *y) -{ - return vn(x,y,32); -} - -sv set25519(gf r, const gf a) -{ - int i; - FOR(i,16) r[i]=a[i]; -} - -sv car25519(gf o) -{ - int i; - i64 c; - FOR(i,16) { - o[i]+=GF25519_RADIX; - c=o[i]>>16; - o[(i+1)*(i<15)]+=c-1+37*(c-1)*(i==15); - o[i]-=c*GF25519_RADIX; - } -} - -sv sel25519(gf p,gf q,int b) -{ - i64 t,i,c=~(b-1); - FOR(i,16) { - t= c&(p[i]^q[i]); - p[i]^=t; - q[i]^=t; - } -} - -sv pack25519(u8 *o,const gf n) -{ - int i,j,b; - gf m,t; - FOR(i,16) t[i]=n[i]; - car25519(t); - car25519(t); - car25519(t); - FOR(j,2) { - m[0]=t[0]-0xffed; - for(i=1;i<15;i++) { - m[i]=t[i]-0xffff-((m[i-1]>>16)&1); - m[i-1]&=0xffff; - } - m[15]=t[15]-0x7fff-((m[14]>>16)&1); - b=(m[15]>>16)&1; - m[14]&=0xffff; - sel25519(t,m,1-b); - } - FOR(i,16) { - o[2*i]=t[i]&0xff; - o[2*i+1]=t[i]>>8; - } -} - -static int neq25519(const gf a, const gf b) -{ - u8 c[32],d[32]; - pack25519(c,a); - pack25519(d,b); - return tweetnacl_crypto_verify_32(c,d); -} - -static u8 par25519(const gf a) -{ - u8 d[32]; - pack25519(d,a); - return d[0]&1; -} - -sv unpack25519(gf o, const u8 *n) -{ - int i; - FOR(i,16) o[i]=n[2*i]+((i64)n[2*i+1]<<8); - o[15]&=0x7fff; -} - -sv A(gf o,const gf a,const gf b) -{ - int i; - FOR(i,16) o[i]=a[i]+b[i]; -} - -sv Z(gf o,const gf a,const gf b) -{ - int i; - FOR(i,16) o[i]=a[i]-b[i]; -} - -sv M(gf o,const gf a,const gf b) -{ - i64 i,j,t[31]; - FOR(i,31) t[i]=0; - FOR(i,16) FOR(j,16) t[i+j]+=a[i]*b[j]; - FOR(i,15) t[i]+=38*t[i+16]; - FOR(i,16) o[i]=t[i]; - car25519(o); - car25519(o); -} - -sv S(gf o,const gf a) -{ - M(o,a,a); -} - -sv inv25519(gf o,const gf i) -{ - gf c; - int a; - FOR(a,16) c[a]=i[a]; - for(a=253;a>=0;a--) { - S(c,c); - if(a!=2&&a!=4) M(c,c,i); - } - FOR(a,16) o[a]=c[a]; -} - -sv pow2523(gf o,const gf i) -{ - gf c; - int a; - FOR(a,16) c[a]=i[a]; - for(a=250;a>=0;a--) { - S(c,c); - if(a!=1) M(c,c,i); - } - FOR(a,16) o[a]=c[a]; -} - -int tweetnacl_crypto_scalarmult(u8 *q,const u8 *n,const u8 *p) -{ - u8 z[32]; - i64 x[80],r,i; - gf a,b,c,d,e,f; - FOR(i,31) z[i]=n[i]; - z[31]=(n[31]&127)|64; - z[0]&=248; - unpack25519(x,p); - FOR(i,16) { - b[i]=x[i]; - d[i]=a[i]=c[i]=0; - } - a[0]=d[0]=1; - for(i=254;i>=0;--i) { - r=(z[i>>3]>>(i&7))&1; - sel25519(a,b,r); - sel25519(c,d,r); - A(e,a,c); - Z(a,a,c); - A(c,b,d); - Z(b,b,d); - S(d,e); - S(f,a); - M(a,c,a); - M(c,b,e); - A(e,a,c); - Z(a,a,c); - S(b,a); - Z(c,d,f); - M(a,c,gf121665); - A(a,a,d); - M(c,c,a); - M(a,d,f); - M(d,b,x); - S(b,e); - sel25519(a,b,r); - sel25519(c,d,r); - } - FOR(i,16) { - x[i+16]=a[i]; - x[i+32]=c[i]; - x[i+48]=b[i]; - x[i+64]=d[i]; - } - inv25519(x+32,x+32); - M(x+16,x+16,x+32); - pack25519(q,x+16); - return 0; -} - -int tweetnacl_crypto_scalarmult_base(u8 *q,const u8 *n) -{ - return tweetnacl_crypto_scalarmult(q,n,nine); -} - -static LTC_INLINE int tweetnacl_crypto_hash_ctx(u8 *out,const u8 *m,u64 n,const u8 *ctx,u32 cs) -{ - unsigned long len = 64; - int hash_idx = find_hash("sha512"); - - if (n > ULONG_MAX) return CRYPT_OVERFLOW; - - if(cs == 0) - return hash_memory(hash_idx, m, n, out, &len); - - return hash_memory_multi(hash_idx, out, &len, ctx, cs, m, n, LTC_NULL); -} - -static LTC_INLINE int tweetnacl_crypto_hash(u8 *out,const u8 *m,u64 n) -{ - return tweetnacl_crypto_hash_ctx(out, m, n, NULL, 0); -} - -sv add(gf p[4],gf q[4]) -{ - gf a,b,c,d,t,e,f,g,h; - - Z(a, p[1], p[0]); - Z(t, q[1], q[0]); - M(a, a, t); - A(b, p[0], p[1]); - A(t, q[0], q[1]); - M(b, b, t); - M(c, p[3], q[3]); - M(c, c, D2); - M(d, p[2], q[2]); - A(d, d, d); - Z(e, b, a); - Z(f, d, c); - A(g, d, c); - A(h, b, a); - - M(p[0], e, f); - M(p[1], h, g); - M(p[2], g, f); - M(p[3], e, h); -} - -sv cswap(gf p[4],gf q[4],u8 b) -{ - int i; - FOR(i,4) - sel25519(p[i],q[i],b); -} - -sv pack(u8 *r,gf p[4]) -{ - gf tx, ty, zi; - inv25519(zi, p[2]); - M(tx, p[0], zi); - M(ty, p[1], zi); - pack25519(r, ty); - r[31] ^= par25519(tx) << 7; -} - -sv scalarmult(gf p[4],gf q[4],const u8 *s) -{ - int i; - set25519(p[0],gf0); - set25519(p[1],gf1); - set25519(p[2],gf1); - set25519(p[3],gf0); - for (i = 255;i >= 0;--i) { - u8 b = (s[i/8]>>(i&7))&1; - cswap(p,q,b); - add(q,p); - add(p,p); - cswap(p,q,b); - } -} - -sv scalarbase(gf p[4],const u8 *s) -{ - gf q[4]; - set25519(q[0],X); - set25519(q[1],Y); - set25519(q[2],gf1); - M(q[3],X,Y); - scalarmult(p,q,s); -} - -int tweetnacl_crypto_sk_to_pk(u8 *pk, const u8 *sk) -{ - u8 d[64]; - gf p[4]; - if (find_hash("sha512") == -1) return CRYPT_INVALID_HASH; - tweetnacl_crypto_hash(d, sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - - scalarbase(p,d); - pack(pk,p); - - return 0; -} - -int tweetnacl_crypto_sign_keypair(prng_state *prng, int wprng, u8 *pk, u8 *sk) -{ - int err; - - /* randombytes(sk,32); */ - if ((err = prng_is_valid(wprng)) != CRYPT_OK) { - return err; - } - - if (prng_descriptor[wprng].read(sk,32, prng) != 32) { - return CRYPT_ERROR_READPRNG; - } - - if ((err = tweetnacl_crypto_sk_to_pk(pk, sk)) != CRYPT_OK) { - return err; - } - - /* FOR(i,32) sk[32 + i] = pk[i]; - * we don't copy the pk in the sk */ - return CRYPT_OK; -} - -static const u64 L[32] = {0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10}; - -static int is_canonical_s(const u8 s[32]) -{ - int i; - for (i = 31; i >= 0; --i) { - if (s[i] < L[i]) return 1; - if (s[i] > L[i]) return 0; - } - return 0; -} - -sv modL(u8 *r,i64 x[64]) -{ - i64 carry,i,j; - for (i = 63;i >= 32;--i) { - carry = 0; - for (j = i - 32;j < i - 12;++j) { - x[j] += carry - 16 * x[i] * L[j - (i - 32)]; - carry = (x[j] + 128) >> 8; - x[j] -= carry * MODL_RADIX; - } - x[j] += carry; - x[i] = 0; - } - carry = 0; - FOR(j,32) { - x[j] += carry - (x[31] >> 4) * L[j]; - carry = x[j] >> 8; - x[j] &= 255; - } - FOR(j,32) x[j] -= carry * L[j]; - FOR(i,32) { - x[i+1] += x[i] >> 8; - r[i] = x[i] & 255; - } -} - -sv reduce(u8 *r) -{ - i64 x[64],i; - FOR(i,64) x[i] = (u64) r[i]; - FOR(i,64) r[i] = 0; - modL(r,x); -} - -int tweetnacl_crypto_sign(u8 *sm,u64 *smlen,const u8 *m,u64 mlen,const u8 *sk,const u8 *pk, const u8 *ctx, u64 cs) -{ - u8 d[64],h[64],r[64]; - i64 i,j,x[64]; - gf p[4]; - - if (find_hash("sha512") == -1) return CRYPT_INVALID_HASH; - - tweetnacl_crypto_hash(d, sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - - *smlen = mlen+64; - FOR(i,(i64)mlen) sm[64 + i] = m[i]; - FOR(i,32) sm[32 + i] = d[32 + i]; - - tweetnacl_crypto_hash_ctx(r, sm+32, mlen+32,ctx,cs); - reduce(r); - scalarbase(p,r); - pack(sm,p); - - FOR(i,32) sm[i+32] = pk[i]; - tweetnacl_crypto_hash_ctx(h,sm,mlen + 64,ctx,cs); - reduce(h); - - FOR(i,64) x[i] = 0; - FOR(i,32) x[i] = (u64) r[i]; - FOR(i,32) FOR(j,32) x[i+j] += h[i] * (u64) d[j]; - modL(sm + 32,x); - - return 0; -} - -static int unpackneg(gf r[4],const u8 p[32]) -{ - gf t, chk, num, den, den2, den4, den6; - set25519(r[2],gf1); - unpack25519(r[1],p); - S(num,r[1]); - M(den,num,D); - Z(num,num,r[2]); - A(den,r[2],den); - - S(den2,den); - S(den4,den2); - M(den6,den4,den2); - M(t,den6,num); - M(t,t,den); - - pow2523(t,t); - M(t,t,num); - M(t,t,den); - M(t,t,den); - M(r[0],t,den); - - S(chk,r[0]); - M(chk,chk,den); - if (neq25519(chk, num)) M(r[0],r[0],I); - - S(chk,r[0]); - M(chk,chk,den); - if (neq25519(chk, num)) return -1; - - if (par25519(r[0]) == (p[31]>>7)) Z(r[0],gf0,r[0]); - - M(r[3],r[0],r[1]); - return 0; -} - -int tweetnacl_crypto_sign_open(int *stat, u8 *m,u64 *mlen,const u8 *sm,u64 smlen,const u8 *ctx,u64 cs,const u8 *pk) -{ - u64 i; - u8 s[32],t[32],h[64]; - gf p[4],q[4]; - - *stat = 0; - if (find_hash("sha512") == -1) return CRYPT_INVALID_HASH; - if (*mlen < smlen) return CRYPT_BUFFER_OVERFLOW; - *mlen = -1; - if (smlen < 64) return CRYPT_INVALID_ARG; - if (!is_canonical_s(sm + 32)) return CRYPT_OK; - - if (unpackneg(q,pk)) return CRYPT_ERROR; - - XMEMMOVE(m,sm,smlen); - XMEMMOVE(s,m + 32,32); - XMEMMOVE(m + 32,pk,32); - tweetnacl_crypto_hash_ctx(h,m,smlen,ctx,cs); - reduce(h); - scalarmult(p,q,h); - - scalarbase(q,s); - add(p,q); - pack(t,p); - - smlen -= 64; - if (tweetnacl_crypto_verify_32(sm, t)) { - FOR(i,smlen) m[i] = 0; - zeromem(m, smlen); - return CRYPT_OK; - } - - *stat = 1; - XMEMMOVE(m,m + 64,smlen); - *mlen = smlen; - return CRYPT_OK; -} - -int tweetnacl_crypto_ph(u8 *out,const u8 *msg,u64 msglen) -{ - return tweetnacl_crypto_hash(out, msg, msglen); -} - -#undef add -#undef FOR -#undef sv diff --git a/src/pk/ec448/ec448_common.c b/src/pk/ec448/ec448_common.c deleted file mode 100644 index 6fca8373..00000000 --- a/src/pk/ec448/ec448_common.c +++ /dev/null @@ -1,960 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ec448_common.c - Shared field arithmetic and primitives for Ed448 and X448 - Field arithmetic over p = 2^448 - 2^224 - 1 (Goldilocks prime) - Edwards curve: x^2 + y^2 = 1 + d*x^2*y^2, d = -39081 - RFC 8032 Section 5.2 - - The field representation (16 limbs of 28 bits in long64) and the overall - code structure follow the TweetNaCl pattern used for Curve25519 in - ec25519/tweetnacl.c. TweetNaCl uses 16 limbs of 16 bits for GF(2^255-19); - here the limb width is scaled to 28 bits so that 16 * 28 = 448. This keeps - the same loop bounds, carry propagation shape and multiplication layout, - trading performance for code simplicity. -*/ - -#ifdef LTC_CURVE448 - -/* Field element: 16 limbs of 28 bits each (16 * 28 = 448) - Each limb nominally fits in 28 bits but may temporarily exceed that - during computation; we use long64 for headroom -*/ -typedef long64 gf448[16]; - -/* field limbs use base 2^28; multiplication avoids left-shifting negative carry values */ -#define GF448_RADIX (((long64)1) << 28) - -/* field constants */ -static const gf448 gf448_0 = {0}; -static const gf448 gf448_1 = {1}; - -/* d = -39081 mod p = p - 39081 - p in 28-bit limbs: all 0x0FFFFFFF except limb 8 = 0x0FFFFFFE - d: limb 0 = 0x0FFFFFFF - 39081 = 0x0FFF6756, limb 8 = 0x0FFFFFFE, rest 0x0FFFFFFF -*/ -static const gf448 ed448_d = { - 0x0FFF6756, 0x0FFFFFFF, 0x0FFFFFFF, 0x0FFFFFFF, - 0x0FFFFFFF, 0x0FFFFFFF, 0x0FFFFFFF, 0x0FFFFFFF, - 0x0FFFFFFE, 0x0FFFFFFF, 0x0FFFFFFF, 0x0FFFFFFF, - 0x0FFFFFFF, 0x0FFFFFFF, 0x0FFFFFFF, 0x0FFFFFFF -}; - -/* Ed448 base point in compressed bytes (57 bytes, little-endian y, sign bit in top of last byte) */ -static const unsigned char ed448_base_point[57] = { - 0x14, 0xfa, 0x30, 0xf2, 0x5b, 0x79, 0x08, 0x98, - 0xad, 0xc8, 0xd7, 0x4e, 0x2c, 0x13, 0xbd, 0xfd, - 0xc4, 0x39, 0x7c, 0xe6, 0x1c, 0xff, 0xd3, 0x3a, - 0xd7, 0xc2, 0xa0, 0x05, 0x1e, 0x9c, 0x78, 0x87, - 0x40, 0x98, 0xa3, 0x6c, 0x73, 0x73, 0xea, 0x4b, - 0x62, 0xc7, 0xc9, 0x56, 0x37, 0x20, 0x76, 0x88, - 0x24, 0xbc, 0xb6, 0x6e, 0x71, 0x46, 0x3f, 0x69, - 0x00 -}; - -/* Group order L (little-endian, 57 bytes) */ -static const unsigned char ed448_order[57] = { - 0xf3, 0x44, 0x58, 0xab, 0x92, 0xc2, 0x78, 0x23, - 0x55, 0x8f, 0xc5, 0x8d, 0x72, 0xc2, 0x6c, 0x21, - 0x90, 0x36, 0xd6, 0xae, 0x49, 0xdb, 0x4e, 0xc4, - 0xe9, 0x23, 0xca, 0x7c, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, - 0x00 -}; - -/* Group order L as ulong64 array for modular reduction (byte-wise) */ -static const ulong64 L448[57] = { - 0xf3, 0x44, 0x58, 0xab, 0x92, 0xc2, 0x78, 0x23, - 0x55, 0x8f, 0xc5, 0x8d, 0x72, 0xc2, 0x6c, 0x21, - 0x90, 0x36, 0xd6, 0xae, 0x49, 0xdb, 0x4e, 0xc4, - 0xe9, 0x23, 0xca, 0x7c, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, - 0x00 -}; - -/* Field arithmetic for GF(2^448 - 2^224 - 1) - 16 limbs, 28 bits each */ - -static LTC_INLINE void s_gf448_copy(gf448 r, const gf448 a) -{ - int i; - for (i = 0; i < 16; ++i) r[i] = a[i]; -} - -/* Carry propagation - Overflow from limb[15] wraps: 2^448 == 2^224 + 1 (mod p) - So excess from limb 15 adds to limb 0 and limb 8 -*/ -static void s_gf448_carry(gf448 o) -{ - int i; - long64 c; - /* propagate carries from limb 0 to 14 */ - for (i = 0; i < 15; ++i) { - c = o[i] >> 28; - o[i+1] += c; - o[i] -= c * GF448_RADIX; - } - /* limb 15 overflow: 2^(28*16) = 2^448 == 2^224 + 1 */ - c = o[15] >> 28; - o[0] += c; /* + c * 1 */ - o[8] += c; /* + c * 2^224 */ - o[15] -= c * GF448_RADIX; - /* one more pass to settle the extra from limb 0 and 8 */ - for (i = 0; i < 15; ++i) { - c = o[i] >> 28; - o[i+1] += c; - o[i] -= c * GF448_RADIX; - } - c = o[15] >> 28; - o[0] += c; - o[8] += c; - o[15] -= c * GF448_RADIX; -} - -/* Conditional swap: if b==1, swap p and q; if b==0, no-op. Constant-time */ -static void s_gf448_cswap(gf448 p, gf448 q, int b) -{ - long64 t, i, mask = ~((long64)b - 1); - for (i = 0; i < 16; ++i) { - t = mask & (p[i] ^ q[i]); - p[i] ^= t; - q[i] ^= t; - } -} - -/* Pack a field element into 56 bytes (little-endian); fully reduces mod p first */ -static void s_gf448_encode(unsigned char *o, const gf448 n) -{ - int i, j; - long64 b; - gf448 m, t; - for (i = 0; i < 16; ++i) t[i] = n[i]; - - /* carry 3 times to ensure all limbs in [0, 2^28) */ - s_gf448_carry(t); - s_gf448_carry(t); - s_gf448_carry(t); - - /* Subtract p and check borrow p: limbs 0..7 = 0x0FFFFFFF, limb 8 = 0x0FFFFFFE, limbs 9..15 = 0x0FFFFFFF */ - for (j = 0; j < 2; ++j) { - m[0] = t[0] - (long64)0x0FFFFFFF; - for (i = 1; i < 16; i++) { - long64 sub; - if (i == 8) sub = (long64)0x0FFFFFFE; - else sub = (long64)0x0FFFFFFF; - m[i] = t[i] - sub - ((m[i-1] >> 28) & 1); - m[i-1] &= 0x0FFFFFFF; - } - b = (m[15] >> 28) & 1; - m[15] &= 0x0FFFFFFF; - s_gf448_cswap(t, m, 1 - (int)b); - } - - /* Serialize: 16 limbs * 28 bits = 448 bits = 56 bytes - each limb contributes 28 bits = 3.5 bytes - Limb i holds bits [28*i .. 28*i+27] - Byte j holds bits [8*j .. 8*j+7] - */ - XMEMSET(o, 0, 56); - for (i = 0; i < 16; i++) { - /* limb i holds bits starting at bit_offset = 28*i */ - unsigned long bit_off = (unsigned long)i * 28; - unsigned long byte_off = bit_off / 8; - unsigned long bit_shift = bit_off % 8; - /* We need to spread 28 bits starting at byte_off, bit_shift */ - ulong64 val = (ulong64)(t[i] & 0x0FFFFFFF); - val <<= bit_shift; - for (j = 0; j < 5 && byte_off + (unsigned long)j < 56; j++) { - o[byte_off + j] |= (unsigned char)(val & 0xFF); - val >>= 8; - } - } -} - -/* Unpack 56 bytes (little-endian) into a field element */ -static void s_gf448_decode(gf448 o, const unsigned char *n) -{ - int i; - XMEMSET(o, 0, sizeof(gf448)); - for (i = 0; i < 16; i++) { - unsigned long bit_off = (unsigned long)i * 28; - unsigned long byte_off = bit_off / 8; - unsigned long bit_shift = bit_off % 8; - ulong64 val = 0; - int j; - for (j = 0; j < 5 && byte_off + (unsigned long)j < 56; j++) { - val |= ((ulong64)n[byte_off + j]) << (8 * (unsigned long)j); - } - val >>= bit_shift; - o[i] = (long64)(val & 0x0FFFFFFF); - } -} - -/* constant-time equality check */ -static int s_gf448_neq(const gf448 a, const gf448 b) -{ - unsigned char c[56], d[56]; - int i; - ulong32 diff = 0; - s_gf448_encode(c, a); - s_gf448_encode(d, b); - for (i = 0; i < 56; ++i) diff |= (ulong32)(c[i] ^ d[i]); - return (1 & ((diff - 1) >> 8)) - 1; -} - -/* return parity (low bit) of field element */ -static unsigned char s_gf448_parity(const gf448 a) -{ - unsigned char d[56]; - s_gf448_encode(d, a); - return d[0] & 1; -} - -/* Addition */ -static LTC_INLINE void s_gf448_add(gf448 o, const gf448 a, const gf448 b) -{ - int i; - for (i = 0; i < 16; ++i) o[i] = a[i] + b[i]; -} - -/* Subtraction */ -static LTC_INLINE void s_gf448_sub(gf448 o, const gf448 a, const gf448 b) -{ - int i; - for (i = 0; i < 16; ++i) o[i] = a[i] - b[i]; -} - -/* Multiplication: o = a * b mod p - Schoolbook 16x16 -> 31 limbs, then reduce using Goldilocks - 2^448 == 2^224 + 1, so for product limbs t[16..30]: - t[i] += t[i+16] (the "1" part) - t[i+8] += t[i+16] (the "2^224" part, since limb 8 = 224 bits) - Then carry -*/ -static void s_gf448_mul(gf448 o, const gf448 a, const gf448 b) -{ - long64 i, j, c; - long64 t[31]; - for (i = 0; i < 31; ++i) t[i] = 0; - for (i = 0; i < 16; ++i) - for (j = 0; j < 16; ++j) - t[i + j] += a[i] * b[j]; - - /* Normalize product limbs before reduction to avoid signed long64 overflow - Inputs can have limbs near 2^29 after add/sub operations in the X448 ladder, - making some t[k] values approach 2^62. The Goldilocks wrap can add up to 4 - contributions into t[8..14], overflowing signed long64. A carry pass over - t[0..29] bounds limbs to 2^28; t[30] carries the overflow and is folded as - 2^(28*30) == 2^393 + 2^168 (mod p), adding into limbs 14 (twice) and 6. - */ - for (i = 0; i < 30; ++i) { - c = t[i] >> 28; - t[i+1] += c; - t[i] -= c * GF448_RADIX; - } - t[14] += 2 * t[30]; - t[6] += t[30]; - t[30] = 0; - - /* reduce t[16..29] using 2^448 == 2^224 + 1 */ - for (i = 13; i >= 0; --i) { - t[i] += t[i + 16]; - t[i + 8] += t[i + 16]; - t[i + 16] = 0; - } - for (i = 0; i < 16; ++i) o[i] = t[i]; - s_gf448_carry(o); - s_gf448_carry(o); -} - -/* Squaring */ -static LTC_INLINE void s_gf448_sqr(gf448 o, const gf448 a) -{ - s_gf448_mul(o, a, a); -} - -/* Inversion: o = a^(p-2) mod p - p-2 = 2^448 - 2^224 - 3 - - p-2 in binary (bit 447 to bit 0): - bits 447..225: all 1 (223 ones) - bit 224: 0 - bits 223..2: all 1 (222 ones) - bit 1: 0 - bit 0: 1 - - Square-and-multiply from MSB: start with a^1, then for each bit: - square, then multiply by a if bit is 1 -*/ -static void s_gf448_inv(gf448 o, const gf448 inp) -{ - gf448 t; - int i; - - s_gf448_copy(t, inp); - - /* Process from bit 446 down (bit 447 is the leading 1, we start with a^1) */ - /* bits 446..225: all 1 (222 bits) */ - for (i = 0; i < 222; i++) { - s_gf448_sqr(t, t); - s_gf448_mul(t, t, inp); - } - - /* bit 224: 0 -> just square */ - s_gf448_sqr(t, t); - - /* bits 223..2: all 1 (222 bits) */ - for (i = 0; i < 222; i++) { - s_gf448_sqr(t, t); - s_gf448_mul(t, t, inp); - } - - /* bit 1: 0 -> just square */ - s_gf448_sqr(t, t); - - /* bit 0: 1 -> square and multiply */ - s_gf448_sqr(t, t); - s_gf448_mul(t, t, inp); - - s_gf448_copy(o, t); -} - -/* Square root: o = a^((p+1)/4) mod p - Since p == 3 (mod 4), this gives the square root of a when it exists - (p+1)/4 = 2^446 - 2^222 = 2^222 * (2^224 - 1) - In binary: 224 ones (bits 445..222) followed by 222 zeros (bits 221..0) -*/ -static void s_gf448_sqrt(gf448 o, const gf448 inp) -{ - gf448 t; - int i; - - s_gf448_copy(t, inp); - - /* bit 445 is the MSB; we start with a^1. bits 444..222: all 1 (223 bits) */ - for (i = 0; i < 223; i++) { - s_gf448_sqr(t, t); - s_gf448_mul(t, t, inp); - } - - /* bits 221..0: all 0 (222 bits) -> just square 222 times */ - for (i = 0; i < 222; i++) { - s_gf448_sqr(t, t); - } - - s_gf448_copy(o, t); -} - - -/* Edwards curve point operations - Curve: x^2 + y^2 = 1 + d*x^2*y^2 (a = 1) - Extended coordinates: (X : Y : Z : T) where x = X/Z, y = Y/Z, T = X*Y/Z -*/ - -/* Unified point addition (works for doubling too) - Extended coordinates on x^2 + y^2 = 1 + d*x^2*y^2 (a=1): - A = X1*X2, B = Y1*Y2, C = d*T1*T2, D = Z1*Z2 - E = (X1+Y1)(X2+Y2) - A - B - F = D - C, G = D + C, H = B - A - X3 = E*F, Y3 = G*H, T3 = E*H, Z3 = F*G -*/ -static void s_ed448_point_add(gf448 p[4], gf448 q[4]) -{ - gf448 a, b, c, d, e, f, g, h, t; - - s_gf448_mul(a, p[0], q[0]); /* A = X1*X2 */ - s_gf448_mul(b, p[1], q[1]); /* B = Y1*Y2 */ - s_gf448_mul(c, p[3], q[3]); - s_gf448_mul(c, c, ed448_d); /* C = d*T1*T2 */ - s_gf448_mul(d, p[2], q[2]); /* D = Z1*Z2 */ - - s_gf448_add(t, p[0], p[1]); /* X1+Y1 */ - s_gf448_add(e, q[0], q[1]); /* X2+Y2 */ - s_gf448_mul(e, t, e); /* (X1+Y1)(X2+Y2) */ - s_gf448_sub(e, e, a); /* - A */ - s_gf448_sub(e, e, b); /* - B -> E */ - - s_gf448_sub(f, d, c); /* F = D - C */ - s_gf448_add(g, d, c); /* G = D + C */ - s_gf448_sub(h, b, a); /* H = B - A (since a=1) */ - - s_gf448_mul(p[0], e, f); /* X3 = E*F */ - s_gf448_mul(p[1], g, h); /* Y3 = G*H */ - s_gf448_mul(p[2], f, g); /* Z3 = F*G */ - s_gf448_mul(p[3], e, h); /* T3 = E*H */ -} - -/* Conditional swap of two points (constant time) */ -static void s_ed448_point_cswap(gf448 p[4], gf448 q[4], unsigned char b) -{ - int i; - for (i = 0; i < 4; ++i) s_gf448_cswap(p[i], q[i], b); -} - -/* Ed448 encoding: 57 bytes = 456 bits - Bytes 0..55 contain the 448-bit little-endian y-coordinate. - Bits 0..6 of byte 56 are zero for canonical encodings. - Bit 7 of byte 56 stores the parity/sign bit of x. -*/ -static void s_ed448_point_encode(unsigned char *r, gf448 p[4]) -{ - gf448 tx, ty, zi; - s_gf448_inv(zi, p[2]); - s_gf448_mul(tx, p[0], zi); - s_gf448_mul(ty, p[1], zi); - s_gf448_encode(r, ty); - /* bit 455 = bit 7 of byte 56 = sign of x */ - r[56] = 0; - r[56] |= s_gf448_parity(tx) << 7; -} - -/* Scalar multiplication: p = [s] * q; Constant-time double-and-add with conditional swap */ -static void s_ed448_scalarmult(gf448 p[4], gf448 q[4], const unsigned char *s) -{ - int i; - /* p = identity = (0, 1, 1, 0) */ - s_gf448_copy(p[0], gf448_0); - s_gf448_copy(p[1], gf448_1); - s_gf448_copy(p[2], gf448_1); - s_gf448_copy(p[3], gf448_0); - - /* Ed448 scalars are 456 bits (57 bytes), but the group order is ~446 bits - Clamped scalar has at most 448 bits (a[56]=0, a[55]|=0x80 sets bit 447) - We scan all 456 bits to be safe - */ - for (i = 455; i >= 0; --i) { - unsigned char b = (s[i / 8] >> (i & 7)) & 1; - s_ed448_point_cswap(p, q, b); - s_ed448_point_add(q, p); - s_ed448_point_add(p, p); - s_ed448_point_cswap(p, q, b); - } -} - -/* Scalar base multiplication: p = [s] * B */ -static void s_ed448_scalarmult_base(gf448 p[4], const unsigned char *s) -{ - gf448 q[4]; - - /* decode base point: unpack y from first 56 bytes */ - s_gf448_decode(q[1], ed448_base_point); - - /* set Z = 1 */ - s_gf448_copy(q[2], gf448_1); - - /* recover x from y: - x^2 + y^2 = 1 + d*x^2*y^2 => x^2 = (1 - y^2) / (1 - d*y^2) */ - { - gf448 y2, num, den, den_inv, x2, x_cand; - s_gf448_sqr(y2, q[1]); /* y^2 */ - s_gf448_sub(num, gf448_1, y2); /* 1 - y^2 */ - s_gf448_mul(den, y2, ed448_d); /* d * y^2 */ - s_gf448_sub(den, gf448_1, den); /* 1 - d*y^2 */ - s_gf448_inv(den_inv, den); - s_gf448_mul(x2, num, den_inv); /* x^2 */ - - /* x = x2^((p+1)/4) -- works since p == 3 mod 4 */ - s_gf448_sqrt(x_cand, x2); - - /* Check sign bit. The base point encoding has sign bit = 0 */ - if (s_gf448_parity(x_cand) != ((ed448_base_point[56] >> 7) & 1)) { - /* negate x */ - s_gf448_sub(x_cand, gf448_0, x_cand); - } - s_gf448_copy(q[0], x_cand); - } - - /* T = X * Y */ - s_gf448_mul(q[3], q[0], q[1]); - - s_ed448_scalarmult(p, q, s); -} - -/* Decode a point from 57-byte encoding; returns 0 on success, -1 on failure */ -static int s_ed448_point_decode(gf448 r[4], const unsigned char p[57]) -{ - gf448 y2, num, den, den_inv, x2, x_cand, chk; - unsigned char sign_bit; - - /* RFC 8032 5.2.2: bits 0..6 of byte 56 must be zero in a canonical - encoding. Without this check a modified R that flips one of those - bits decodes to the same point as the canonical R and the signature - would still verify. - */ - if ((p[56] & 0x7F) != 0) return -1; - - /* y from the first 56 bytes (448 bits) */ - s_gf448_decode(r[1], p); - /* bit 7 of byte 56 is the x sign bit */ - sign_bit = (p[56] >> 7) & 1; - - s_gf448_copy(r[2], gf448_1); - - /* x^2 = (1 - y^2) / (1 - d*y^2) */ - s_gf448_sqr(y2, r[1]); - s_gf448_sub(num, gf448_1, y2); /* 1 - y^2 */ - s_gf448_mul(den, y2, ed448_d); /* d * y^2 */ - s_gf448_sub(den, gf448_1, den); /* 1 - d*y^2 */ - s_gf448_inv(den_inv, den); - s_gf448_mul(x2, num, den_inv); - - /* Compute square root candidate */ - s_gf448_sqrt(x_cand, x2); - - /* Verify: x_cand^2 == x2 ? */ - s_gf448_sqr(chk, x_cand); - if (s_gf448_neq(chk, x2)) { - /* Not a valid point */ - return -1; - } - - /* Adjust sign */ - if (s_gf448_parity(x_cand) != sign_bit) { - s_gf448_sub(x_cand, gf448_0, x_cand); - } - - s_gf448_copy(r[0], x_cand); - s_gf448_mul(r[3], r[0], r[1]); /* T = X * Y */ - - return 0; -} - -/* Scalar arithmetic modulo L (group order) */ - -/* Reduce x[0..113] modulo L, store 57-byte result in r - - Uses the relation 2^448 == 4*c (mod L), where c = 2^446 - L is a 28-byte number - Byte position i (for i >= 56) represents 2^(8*i) = 2^(8*(i-56)) * 2^448 - == 2^(8*(i-56)) * 4*c (mod L) - So x[i] for i >= 56 folds into positions (i-56)..(i-56+27) as 4*x[i]*c[j] -*/ -static void s_sc448_reduce(unsigned char *r, long64 x[114]) -{ - long64 carry, i, j; - int round; - - /* c = 2^446 - L (28 bytes, little-endian) */ - static const long64 C448[28] = { - 0x0D, 0xBB, 0xA7, 0x54, 0x6D, 0x3D, 0x87, 0xDC, - 0xAA, 0x70, 0x3A, 0x72, 0x8D, 0x3D, 0x93, 0xDE, - 0x6F, 0xC9, 0x29, 0x51, 0xB6, 0x24, 0xB1, 0x3B, - 0x16, 0xDC, 0x35, 0x83 - }; - - /* Perform up to 4 rounds of folding to guarantee full reduction */ - for (round = 0; round < 4; round++) { - /* Fold bytes 56..113 into lower positions */ - for (i = 113; i >= 56; --i) { - if (x[i] == 0) continue; - for (j = 0; j < 28; j++) { - x[i - 56 + j] += 4 * x[i] * C448[j]; - } - x[i] = 0; - } - - /* Carry normalize from 0 to 113 */ - carry = 0; - for (i = 0; i < 114; i++) { - x[i] += carry; - carry = x[i] >> 8; - x[i] &= 255; - } - /* If no overflow into high bytes, we can stop early */ - if (carry == 0) { - int done = 1; - for (i = 56; i < 114; i++) { - if (x[i] != 0) { done = 0; break; } - } - if (done) break; - } - } - - /* Now x[0..55] holds the value, x[56..113] should be zero - Up to 4 conditional subtractions of L ensure x < L */ - for (round = 0; round < 4; round++) { - long64 t[57], borrow; - borrow = 0; - for (i = 0; i < 57; i++) { - t[i] = x[i] - (long64)L448[i] - borrow; - borrow = (t[i] >> 63) & 1; - t[i] &= 255; - } - /* If borrow=0 => x >= L, replace x with t. If borrow=1 => x < L, keep x */ - if (borrow == 0) { - for (i = 0; i < 57; i++) x[i] = t[i]; - } - } - - for (i = 0; i < 57; i++) { - r[i] = (unsigned char)(x[i] & 255); - } -} - -static void s_sc448_reduce_buf(unsigned char *r) -{ - long64 x[114]; - int i; - for (i = 0; i < 114; ++i) x[i] = (ulong64)r[i]; - for (i = 0; i < 114; ++i) r[i] = 0; - s_sc448_reduce(r, x); -} - -/* Check if scalar s < L (group order); returns 1 if s < L, 0 otherwise */ -static int s_sc448_lt_order(const unsigned char *s) -{ - int i; - /* s and ed448_order are both 57 bytes LE */ - for (i = 56; i >= 0; i--) { - if (s[i] < ed448_order[i]) return 1; - if (s[i] > ed448_order[i]) return 0; - } - return 0; /* equal means not strictly less */ -} - -/* Ed448 internal API functions */ - -/** - Derive public key from secret key - RFC 8032 Section 5.2.5: - 1. SHAKE256(sk, 57) -> 114 bytes - 2. Clamp first 57 bytes: a[0] &= 0xFC, a[55] |= 0x80, a[56] = 0 - 3. pk = [a]B -*/ -int ec448_sk_to_pk_internal(unsigned char *pk, const unsigned char *sk) -{ - unsigned char az[114]; - gf448 p[4]; - int err; - - { unsigned long azlen = 114; if ((err = sha3_shake_memory(256, sk, 57, az, &azlen)) != CRYPT_OK) return err; } - - /* clamp */ - az[0] &= 0xFC; - az[55] |= 0x80; - az[56] = 0; - - s_ed448_scalarmult_base(p, az); - s_ed448_point_encode(pk, p); - - zeromem(az, sizeof(az)); - return CRYPT_OK; -} - -/** - Generate Ed448 keypair -*/ -int ec448_keypair_internal(prng_state *prng, int wprng, unsigned char *pk, unsigned char *sk) -{ - int err; - - if ((err = prng_is_valid(wprng)) != CRYPT_OK) return err; - - if (prng_descriptor[wprng].read(sk, 57, prng) != 57) { - return CRYPT_ERROR_READPRNG; - } - - if ((err = ec448_sk_to_pk_internal(pk, sk)) != CRYPT_OK) { - return err; - } - - return CRYPT_OK; -} - -/** - Ed448 sign - - RFC 8032 Section 5.2.6: - 1. SHAKE256(sk, 57) -> (a, prefix) where a is clamped first 57 bytes - 2. r = SHAKE256(DOM4(0,ctx) || prefix || msg) mod L - 3. R = [r]B encoded - 4. h = SHAKE256(DOM4(0,ctx) || R || pk || msg) mod L - 5. S = (r + h*a) mod L - 6. sig = R || S (114 bytes) - - The sm buffer receives R || S || msg (smlen = mlen + 114) - ctx/cs: DOM4 context; for plain Ed448, ctx=NULL, cs=0 but DOM4 is still prepended -*/ -int ec448_sign_internal(unsigned char *sm, unsigned long long *smlen, - const unsigned char *m, unsigned long long mlen, - const unsigned char *sk, const unsigned char *pk, - const unsigned char *ctx, unsigned long long cs) -{ - unsigned char az[114], nonce[114], hram[114]; - long64 x[114]; - long64 i, j; - gf448 p[4]; - int err; - - /* ctx/cs is a pre-built DOM4 prefix that gets prepended to all hashes - The wrapper functions build it: - ed448_sign -> DOM4(0, "") - ed448ctx_sign -> DOM4(0, ctx) - ed448ph_sign -> DOM4(1, ctx) - */ - - /* Hash secret key */ - { unsigned long azlen = 114; if ((err = sha3_shake_memory(256, sk, 57, az, &azlen)) != CRYPT_OK) return err; } - - /* Clamp scalar a */ - az[0] &= 0xFC; - az[55] |= 0x80; - az[56] = 0; - - /* Compute nonce r = SHAKE256(ctx || prefix || msg) mod L */ - /* ctx already contains DOM4 prefix from the wrapper */ - *smlen = mlen + 114; - - if (ctx != NULL && cs > 0) { - hash_state md; - if ((err = sha3_shake_init(&md, 256)) != CRYPT_OK) goto cleanup; - if ((err = sha3_shake_process(&md, ctx, (unsigned long)cs)) != CRYPT_OK) goto cleanup; - if ((err = sha3_shake_process(&md, az + 57, 57)) != CRYPT_OK) goto cleanup; - if ((err = sha3_shake_process(&md, m, (unsigned long)mlen)) != CRYPT_OK) goto cleanup; - if ((err = sha3_shake_done(&md, nonce, 114)) != CRYPT_OK) goto cleanup; - } - else { - hash_state md; - if ((err = sha3_shake_init(&md, 256)) != CRYPT_OK) goto cleanup; - if ((err = sha3_shake_process(&md, az + 57, 57)) != CRYPT_OK) goto cleanup; - if ((err = sha3_shake_process(&md, m, (unsigned long)mlen)) != CRYPT_OK) goto cleanup; - if ((err = sha3_shake_done(&md, nonce, 114)) != CRYPT_OK) goto cleanup; - } - - s_sc448_reduce_buf(nonce); - - /* R = [r]B */ - s_ed448_scalarmult_base(p, nonce); - s_ed448_point_encode(sm, p); /* sm[0..56] = R */ - - /* Compute h = SHAKE256(ctx || R || pk || msg) mod L */ - { - hash_state md; - if ((err = sha3_shake_init(&md, 256)) != CRYPT_OK) goto cleanup; - if (ctx != NULL && cs > 0) { - if ((err = sha3_shake_process(&md, ctx, (unsigned long)cs)) != CRYPT_OK) goto cleanup; - } - if ((err = sha3_shake_process(&md, sm, 57)) != CRYPT_OK) goto cleanup; /* R */ - if ((err = sha3_shake_process(&md, pk, 57)) != CRYPT_OK) goto cleanup; /* pk */ - if ((err = sha3_shake_process(&md, m, (unsigned long)mlen)) != CRYPT_OK) goto cleanup; /* msg */ - if ((err = sha3_shake_done(&md, hram, 114)) != CRYPT_OK) goto cleanup; - } - s_sc448_reduce_buf(hram); - - /* S = (r + h * a) mod L */ - for (i = 0; i < 114; ++i) x[i] = 0; - for (i = 0; i < 57; ++i) x[i] = (ulong64)nonce[i]; - for (i = 0; i < 57; ++i) - for (j = 0; j < 57; ++j) - x[i + j] += (long64)hram[i] * (long64)(ulong64)az[j]; - s_sc448_reduce(sm + 57, x); /* sm[57..113] = S */ - - err = CRYPT_OK; - -cleanup: - zeromem(az, sizeof(az)); - zeromem(nonce, sizeof(nonce)); - zeromem(hram, sizeof(hram)); - zeromem(x, sizeof(x)); - return err; -} - -/** - Ed448 verify - - RFC 8032 Section 5.2.7: - 1. Parse sig as R (57 bytes) || S (57 bytes) - 2. Decode R, pk as points - 3. Check S < L - 4. h = SHAKE256(DOM4(0,ctx) || R || pk || msg) mod L - 5. Check [S]B == R + [h]A - - sm = sig || msg (smlen = siglen + msglen, siglen = 114) - Returns stat=1 if valid, stat=0 if invalid -*/ -int ec448_verify_internal(int *stat, unsigned char *m, unsigned long long *mlen, - const unsigned char *sm, unsigned long long smlen, - const unsigned char *ctx, unsigned long long cs, - const unsigned char *pk) -{ - unsigned char hram[114]; - unsigned char t[57]; - gf448 p[4], q[4], r_point[4]; - unsigned long long i; - int err; - unsigned char s_bytes[57]; - - *stat = 0; - - if (*mlen < smlen) return CRYPT_BUFFER_OVERFLOW; - *mlen = (unsigned long long)-1; - if (smlen < 114) return CRYPT_INVALID_ARG; - - /* Decode public key A */ - if (s_ed448_point_decode(q, pk) != 0) return CRYPT_ERROR; - - /* Copy sm to m for manipulation */ - XMEMMOVE(m, sm, (unsigned long)smlen); - - /* Extract S (bytes 57..113 of signature) */ - XMEMCPY(s_bytes, m + 57, 57); - - /* Check S < L */ - if (!s_sc448_lt_order(s_bytes)) { - for (i = 0; i < smlen - 114; ++i) m[i] = 0; - return CRYPT_OK; - } - - /* Decode R (bytes 0..56 of signature) */ - if (s_ed448_point_decode(r_point, m) != 0) { - for (i = 0; i < smlen - 114; ++i) m[i] = 0; - return CRYPT_OK; - } - - /* Replace S in m with pk for hashing: m = R || pk || msg */ - XMEMCPY(m + 57, pk, 57); - - /* h = SHAKE256(ctx || R || pk || msg) mod L */ - { - hash_state md; - if ((err = sha3_shake_init(&md, 256)) != CRYPT_OK) return err; - if (ctx != NULL && cs > 0) { - if ((err = sha3_shake_process(&md, ctx, (unsigned long)cs)) != CRYPT_OK) return err; - } - if ((err = sha3_shake_process(&md, m, (unsigned long)smlen)) != CRYPT_OK) return err; - if ((err = sha3_shake_done(&md, hram, 114)) != CRYPT_OK) return err; - } - s_sc448_reduce_buf(hram); - - /* Compute [h]A */ - s_ed448_scalarmult(p, q, hram); - - /* Add R: p = R + [h]A */ - s_ed448_point_add(p, r_point); - - /* Compute [S]B */ - s_ed448_scalarmult_base(q, s_bytes); - - /* Compare: [S]B == R + [h]A */ - s_ed448_point_encode(t, q); - { - unsigned char t2[57]; - s_ed448_point_encode(t2, p); - - /* Constant-time comparison */ - { - ulong32 diff = 0; - int idx; - for (idx = 0; idx < 57; idx++) diff |= (ulong32)(t[idx] ^ t2[idx]); - if (diff == 0) { - *stat = 1; - smlen -= 114; - XMEMMOVE(m, m + 114, (unsigned long)smlen); - *mlen = smlen; - } - else { - for (i = 0; i < smlen - 114; ++i) m[i] = 0; - zeromem(m, (unsigned long)(smlen - 114)); - } - } - } - - return CRYPT_OK; -} - -/* Ed448 prehash: SHAKE256(msg) truncated to 64 bytes */ -int ec448_prehash_internal(unsigned char *out, const unsigned char *msg, unsigned long long msglen) -{ - unsigned long phlen = 64; - return sha3_shake_memory(256, msg, (unsigned long)msglen, out, &phlen); -} - - -/* X448 scalar multiplication (RFC 7748 Montgomery ladder) */ -int ec448_scalarmult_internal(unsigned char *out, const unsigned char *scalar, const unsigned char *point) -{ - unsigned char sk[56]; - gf448 x1, x2, z2, x3, z3; - gf448 a, aa, b, bb, e, c, d, da, cb, t; - static const gf448 a24 = {39081}; - int i; - unsigned char swap = 0; - - /* clamp scalar */ - XMEMCPY(sk, scalar, 56); - sk[0] &= 252; - sk[55] |= 128; - - /* decode u-coordinate */ - s_gf448_decode(x1, point); - - /* x_2 = 1, z_2 = 0, x_3 = u, z_3 = 1 */ - s_gf448_copy(x3, x1); - s_gf448_copy(x2, gf448_1); - s_gf448_copy(z2, gf448_0); - s_gf448_copy(z3, gf448_1); - - for (i = 447; i >= 0; --i) { - unsigned char k_t = (sk[i / 8] >> (i & 7)) & 1; - swap ^= k_t; - s_gf448_cswap(x2, x3, swap); - s_gf448_cswap(z2, z3, swap); - swap = k_t; - - s_gf448_add(a, x2, z2); /* A = x_2 + z_2 */ - s_gf448_sqr(aa, a); /* AA = A^2 */ - s_gf448_sub(b, x2, z2); /* B = x_2 - z_2 */ - s_gf448_sqr(bb, b); /* BB = B^2 */ - s_gf448_sub(e, aa, bb); /* E = AA - BB */ - s_gf448_add(c, x3, z3); /* C = x_3 + z_3 */ - s_gf448_sub(d, x3, z3); /* D = x_3 - z_3 */ - s_gf448_mul(da, d, a); /* DA = D * A */ - s_gf448_mul(cb, c, b); /* CB = C * B */ - - s_gf448_add(x3, da, cb); /* x_3 = (DA + CB)^2 */ - s_gf448_sqr(x3, x3); - - s_gf448_sub(z3, da, cb); /* z_3 = x_1*(DA-CB)^2 */ - s_gf448_sqr(z3, z3); - s_gf448_mul(z3, x1, z3); - - s_gf448_mul(x2, aa, bb); /* x_2 = AA * BB */ - - s_gf448_mul(t, a24, e); /* z_2 = E*(AA + a24*E) */ - s_gf448_add(t, aa, t); - s_gf448_mul(z2, e, t); - } - - s_gf448_cswap(x2, x3, swap); - s_gf448_cswap(z2, z3, swap); - - s_gf448_inv(t, z2); - s_gf448_mul(x2, x2, t); - - s_gf448_encode(out, x2); - - zeromem(sk, sizeof(sk)); - return CRYPT_OK; -} - -/* X448 scalar multiplication with base point u=5 */ -static const unsigned char s_x448_basepoint[56] = { - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0 -}; - -int ec448_scalarmult_base_internal(unsigned char *out, const unsigned char *scalar) -{ - ec448_scalarmult_internal(out, scalar, s_x448_basepoint); - return CRYPT_OK; -} - -#endif diff --git a/src/pk/ec448/ec448_crypto_ctx.c b/src/pk/ec448/ec448_crypto_ctx.c deleted file mode 100644 index 335d3c91..00000000 --- a/src/pk/ec448/ec448_crypto_ctx.c +++ /dev/null @@ -1,51 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ec448_crypto_ctx.c - Build DOM4 context prefix for Ed448ctx / Ed448ph (RFC 8032, Section 5.2). - DOM4(x, y) = "SigEd448" || octet(x) || octet(OLEN(y)) || y -*/ - -#ifdef LTC_CURVE448 - -/** - @param out [out] Destination buffer - @param outlen [in/out] Max size / resulting size - @param flag 0 for Ed448/Ed448ctx, 1 for Ed448ph - @param ctx Context string (may be NULL if ctxlen==0) - @param ctxlen Length of context (0..255) - @return CRYPT_OK if successful -*/ -int ec448_crypto_ctx(unsigned char *out, unsigned long *outlen, unsigned char flag, - const unsigned char *ctx, unsigned long ctxlen) -{ - unsigned char *buf = out; - - const char *prefix = "SigEd448"; - const unsigned long prefix_len = 8; - const unsigned char ctxlen8 = (unsigned char)ctxlen; - - if (ctxlen > 255u) return CRYPT_INPUT_TOO_LONG; - if (*outlen < prefix_len + 2u + ctxlen) return CRYPT_BUFFER_OVERFLOW; - - XMEMCPY(buf, prefix, prefix_len); - buf += prefix_len; - XMEMCPY(buf, &flag, 1); - buf++; - XMEMCPY(buf, &ctxlen8, 1); - buf++; - - if (ctxlen > 0u) { - LTC_ARGCHK(ctx != NULL); - XMEMCPY(buf, ctx, ctxlen); - buf += ctxlen; - } - - *outlen = (unsigned long)(buf - out); - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/ec448/ec448_export.c b/src/pk/ec448/ec448_export.c deleted file mode 100644 index 7b1934c1..00000000 --- a/src/pk/ec448/ec448_export.c +++ /dev/null @@ -1,98 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ec448_export.c - Generic export of a Curve448 key to a binary packet -*/ - -#ifdef LTC_CURVE448 - -/** - Generic export of a Curve448 key to a binary packet - @param out [out] The destination for the key - @param outlen [in/out] The max size and resulting size of the key - @param which Which type of key (PK_PRIVATE, PK_PUBLIC|PK_STD or PK_PUBLIC) - @param key The key you wish to export - @return CRYPT_OK if successful -*/ -int ec448_export( unsigned char *out, unsigned long *outlen, - int which, - const curve448_key *key) -{ - int err, std; - const char* OID; - unsigned long oid[16], oidlen; - ltc_asn1_list alg_id[1]; - enum ltc_oid_id oid_id; - unsigned char private_key[59]; - unsigned long version, private_key_len = sizeof(private_key); - unsigned long key_sz; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - std = which & PK_STD; - which &= ~PK_STD; - if ((err = pk_get_oid_id(key->pka, &oid_id)) != CRYPT_OK) { - return err; - } - - /* X448 keys are 56 bytes, Ed448 keys are 57 bytes */ - key_sz = (key->pka == LTC_PKA_ED448) ? 57uL : 56uL; - - if (which == PK_PRIVATE) { - if(key->type != PK_PRIVATE) return CRYPT_PK_INVALID_TYPE; - - if (std == PK_STD) { - if ((err = pk_get_oid(oid_id, &OID)) != CRYPT_OK) { - return err; - } - oidlen = LTC_ARRAY_SIZE(oid); - if ((err = pk_oid_str_to_num(OID, oid, &oidlen)) != CRYPT_OK) { - return err; - } - - LTC_SET_ASN1(alg_id, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid, oidlen); - - /* encode private key as PKCS#8 */ - if ((err = der_encode_octet_string(key->priv, key_sz, private_key, &private_key_len)) != CRYPT_OK) { - return err; - } - - version = 0; - err = der_encode_sequence_multi(out, outlen, - LTC_ASN1_SHORT_INTEGER, 1uL, &version, - LTC_ASN1_SEQUENCE, 1uL, alg_id, - LTC_ASN1_OCTET_STRING, private_key_len, private_key, - LTC_ASN1_EOL, 0uL, NULL); - } else { - if (*outlen < key_sz) { - err = CRYPT_BUFFER_OVERFLOW; - } else { - XMEMCPY(out, key->priv, key_sz); - err = CRYPT_OK; - } - *outlen = key_sz; - } - } else { - if (std == PK_STD) { - /* encode public key as SubjectPublicKeyInfo */ - err = x509_encode_subject_public_key_info(out, outlen, oid_id, key->pub, key_sz, LTC_ASN1_EOL, NULL, 0); - } else { - if (*outlen < key_sz) { - err = CRYPT_BUFFER_OVERFLOW; - } else { - XMEMCPY(out, key->pub, key_sz); - err = CRYPT_OK; - } - *outlen = key_sz; - } - } - - return err; -} - -#endif diff --git a/src/pk/ec448/ec448_import_pkcs8.c b/src/pk/ec448/ec448_import_pkcs8.c deleted file mode 100644 index 37ffba3b..00000000 --- a/src/pk/ec448/ec448_import_pkcs8.c +++ /dev/null @@ -1,86 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ec448_import_pkcs8.c - Generic import of a Curve448 private key in PKCS#8 format -*/ - -#ifdef LTC_CURVE448 - -typedef int (*sk_to_pk)(unsigned char *pk, const unsigned char *sk); - -int ec448_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, - enum ltc_oid_id id, - curve448_key *key) -{ - int err; - unsigned long key_len; - sk_to_pk fp; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - LTC_UNUSED_PARAM(alg_id); - - switch (id) { - case LTC_OID_X448: - fp = ec448_scalarmult_base_internal; - break; - case LTC_OID_ED448: - fp = ec448_sk_to_pk_internal; - break; - default: - return CRYPT_PK_INVALID_TYPE; - } - - key_len = sizeof(key->priv); - if ((err = der_decode_octet_string(priv_key->data, priv_key->size, key->priv, &key_len)) == CRYPT_OK) { - fp(key->pub, key->priv); - key->type = PK_PRIVATE; - err = pk_get_pka_id(id, &key->pka); - } - return err; -} - -/** - Generic import of a Curve448 private key in PKCS#8 format - @param in The packet to import from - @param inlen It's length (octets) - @param pw_ctx The password context when decrypting the private key - @param id The type of the private key - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int ec448_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - enum ltc_oid_id id, - curve448_key *key) -{ - int err; - ltc_asn1_list *l = NULL; - ltc_asn1_list *alg_id = NULL, *priv_key = NULL; - enum ltc_oid_id pka; - - LTC_ARGCHK(in != NULL); - - err = pkcs8_decode_flexi(in, inlen, pw_ctx, &l); - if (err != CRYPT_OK) return err; - - if ((err = pkcs8_get_children(l, &pka, &alg_id, &priv_key)) != CRYPT_OK) { - goto LBL_DER_FREE; - } - if (pka != id) { - err = CRYPT_INVALID_PACKET; - goto LBL_DER_FREE; - } - - err = ec448_import_pkcs8_asn1(alg_id, priv_key, id, key); - -LBL_DER_FREE: - der_free_sequence_flexi(l); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc.c b/src/pk/ecc/ecc.c deleted file mode 100644 index 56798981..00000000 --- a/src/pk/ecc/ecc.c +++ /dev/null @@ -1,447 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ecc.c - ECC Crypto, Tom St Denis -*/ - -#ifdef LTC_MECC - -/* This array holds the curve parameters. - * Curves (prime field only) are taken from: - * - http://www.secg.org/collateral/sec2_final.pdf (named: SECP*) - * - http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf (named: NISTP*) - * - ANS X9.62 (named: PRIMEP*) - * - http://www.ecc-brainpool.org/download/Domain-parameters.pdf (named: BRAINPOOLP*) - */ -const ltc_ecc_curve ltc_ecc_curves[] = { -#ifdef LTC_ECC_SECP112R1 -{ - /* prime */ "DB7C2ABF62E35E668076BEAD208B", - /* A */ "DB7C2ABF62E35E668076BEAD2088", - /* B */ "659EF8BA043916EEDE8911702B22", - /* order */ "DB7C2ABF62E35E7628DFAC6561C5", - /* Gx */ "09487239995A5EE76B55F9C2F098", - /* Gy */ "A89CE5AF8724C0A23E0E0FF77500", - /* cofactor */ 1, - /* OID */ "1.3.132.0.6" -}, -#endif -#ifdef LTC_ECC_SECP112R2 -{ - /* prime */ "DB7C2ABF62E35E668076BEAD208B", - /* A */ "6127C24C05F38A0AAAF65C0EF02C", - /* B */ "51DEF1815DB5ED74FCC34C85D709", - /* order */ "36DF0AAFD8B8D7597CA10520D04B", - /* Gx */ "4BA30AB5E892B4E1649DD0928643", - /* Gy */ "ADCD46F5882E3747DEF36E956E97", - /* cofactor */ 4, - /* OID */ "1.3.132.0.7" -}, -#endif -#ifdef LTC_ECC_SECP128R1 -{ - /* prime */ "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", - /* A */ "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC", - /* B */ "E87579C11079F43DD824993C2CEE5ED3", - /* order */ "FFFFFFFE0000000075A30D1B9038A115", - /* Gx */ "161FF7528B899B2D0C28607CA52C5B86", - /* Gy */ "CF5AC8395BAFEB13C02DA292DDED7A83", - /* cofactor */ 1, - /* OID */ "1.3.132.0.28" -}, -#endif -#ifdef LTC_ECC_SECP128R2 -{ - /* prime */ "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", - /* A */ "D6031998D1B3BBFEBF59CC9BBFF9AEE1", - /* B */ "5EEEFCA380D02919DC2C6558BB6D8A5D", - /* order */ "3FFFFFFF7FFFFFFFBE0024720613B5A3", - /* Gx */ "7B6AA5D85E572983E6FB32A7CDEBC140", - /* Gy */ "27B6916A894D3AEE7106FE805FC34B44", - /* cofactor */ 4, - /* OID */ "1.3.132.0.29" -}, -#endif -#ifdef LTC_ECC_SECP160R1 -{ - /* prime */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF", - /* A */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC", - /* B */ "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45", - /* order */ "0100000000000000000001F4C8F927AED3CA752257", - /* Gx */ "4A96B5688EF573284664698968C38BB913CBFC82", - /* Gy */ "23A628553168947D59DCC912042351377AC5FB32", - /* cofactor */ 1, - /* OID */ "1.3.132.0.8" -}, -#endif -#ifdef LTC_ECC_SECP160R2 -{ - /* prime */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", - /* A */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC70", - /* B */ "B4E134D3FB59EB8BAB57274904664D5AF50388BA", - /* order */ "0100000000000000000000351EE786A818F3A1A16B", - /* Gx */ "52DCB034293A117E1F4FF11B30F7199D3144CE6D", - /* Gy */ "FEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E", - /* cofactor */ 1, - /* OID */ "1.3.132.0.30" -}, -#endif -#ifdef LTC_ECC_SECP160K1 -{ - /* prime */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", - /* A */ "0000000000000000000000000000000000000000", - /* B */ "0000000000000000000000000000000000000007", - /* order */ "0100000000000000000001B8FA16DFAB9ACA16B6B3", - /* Gx */ "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", - /* Gy */ "938CF935318FDCED6BC28286531733C3F03C4FEE", - /* cofactor */ 1, - /* OID */ "1.3.132.0.9" -}, -#endif -#ifdef LTC_ECC_SECP192R1 -{ - /* prime */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", - /* A */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC", - /* B */ "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1", - /* order */ "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831", - /* Gx */ "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012", - /* Gy */ "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811", - /* cofactor */ 1, - /* OID */ "1.2.840.10045.3.1.1" -}, -#endif -#ifdef LTC_ECC_PRIME192V2 -{ - /* prime */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", - /* A */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC", - /* B */ "CC22D6DFB95C6B25E49C0D6364A4E5980C393AA21668D953", - /* order */ "FFFFFFFFFFFFFFFFFFFFFFFE5FB1A724DC80418648D8DD31", - /* Gx */ "EEA2BAE7E1497842F2DE7769CFE9C989C072AD696F48034A", - /* Gy */ "6574D11D69B6EC7A672BB82A083DF2F2B0847DE970B2DE15", - /* cofactor */ 1, - /* OID */ "1.2.840.10045.3.1.2" -}, -#endif -#ifdef LTC_ECC_PRIME192V3 -{ - /* prime */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", - /* A */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC", - /* B */ "22123DC2395A05CAA7423DAECCC94760A7D462256BD56916", - /* order */ "FFFFFFFFFFFFFFFFFFFFFFFF7A62D031C83F4294F640EC13", - /* Gx */ "7D29778100C65A1DA1783716588DCE2B8B4AEE8E228F1896", - /* Gy */ "38A90F22637337334B49DCB66A6DC8F9978ACA7648A943B0", - /* cofactor */ 1, - /* OID */ "1.2.840.10045.3.1.3" -}, -#endif -#ifdef LTC_ECC_SECP192K1 -{ - /* prime */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", - /* A */ "000000000000000000000000000000000000000000000000", - /* B */ "000000000000000000000000000000000000000000000003", - /* order */ "FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", - /* Gx */ "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D", - /* Gy */ "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", - /* cofactor */ 1, - /* OID */ "1.3.132.0.31" -}, -#endif -#ifdef LTC_ECC_SECP224R1 -{ - /* prime */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001", - /* A */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE", - /* B */ "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4", - /* order */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D", - /* Gx */ "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21", - /* Gy */ "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34", - /* cofactor */ 1, - /* OID */ "1.3.132.0.33" -}, -#endif -#ifdef LTC_ECC_SECP224K1 -{ - /* prime */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D", - /* A */ "00000000000000000000000000000000000000000000000000000000", - /* B */ "00000000000000000000000000000000000000000000000000000005", - /* order */ "010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7", - /* Gx */ "A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C", - /* Gy */ "7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5", - /* cofactor */ 1, - /* OID */ "1.3.132.0.32" -}, -#endif -#ifdef LTC_ECC_SECP256R1 -{ - /* prime */ "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", - /* A */ "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", - /* B */ "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", - /* order */ "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", - /* Gx */ "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", - /* Gy */ "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", - /* cofactor */ 1, - /* OID */ "1.2.840.10045.3.1.7" -}, -#endif -#ifdef LTC_ECC_SECP256K1 -{ - /* prime */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", - /* A */ "0000000000000000000000000000000000000000000000000000000000000000", - /* B */ "0000000000000000000000000000000000000000000000000000000000000007", - /* order */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", - /* Gx */ "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", - /* Gy */ "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", - /* cofactor */ 1, - /* OID */ "1.3.132.0.10" -}, -#endif -#ifdef LTC_ECC_SECP384R1 -{ - /* prime */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF", - /* A */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC", - /* B */ "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF", - /* order */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973", - /* Gx */ "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7", - /* Gy */ "3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F", - /* cofactor */ 1, - /* OID */ "1.3.132.0.34" -}, -#endif -#ifdef LTC_ECC_SECP521R1 -{ - /* prime */ "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", - /* A */ "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC", - /* B */ "0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00", - /* order */ "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409", - /* Gx */ "00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66", - /* Gy */ "011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650", - /* cofactor */ 1, - /* OID */ "1.3.132.0.35" -}, -#endif -#ifdef LTC_ECC_PRIME239V1 -{ - /* prime */ "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF", - /* A */ "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC", - /* B */ "6B016C3BDCF18941D0D654921475CA71A9DB2FB27D1D37796185C2942C0A", - /* order */ "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF9E5E9A9F5D9071FBD1522688909D0B", - /* Gx */ "0FFA963CDCA8816CCC33B8642BEDF905C3D358573D3F27FBBD3B3CB9AAAF", - /* Gy */ "7DEBE8E4E90A5DAE6E4054CA530BA04654B36818CE226B39FCCB7B02F1AE", - /* cofactor */ 1, - /* OID */ "1.2.840.10045.3.1.4" -}, -#endif -#ifdef LTC_ECC_PRIME239V2 -{ - /* prime */ "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF", - /* A */ "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC", - /* B */ "617FAB6832576CBBFED50D99F0249C3FEE58B94BA0038C7AE84C8C832F2C", - /* order */ "7FFFFFFFFFFFFFFFFFFFFFFF800000CFA7E8594377D414C03821BC582063", - /* Gx */ "38AF09D98727705120C921BB5E9E26296A3CDCF2F35757A0EAFD87B830E7", - /* Gy */ "5B0125E4DBEA0EC7206DA0FC01D9B081329FB555DE6EF460237DFF8BE4BA", - /* cofactor */ 1, - /* OID */ "1.2.840.10045.3.1.5" -}, -#endif -#ifdef LTC_ECC_PRIME239V3 -{ - /* prime */ "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF", - /* A */ "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC", - /* B */ "255705FA2A306654B1F4CB03D6A750A30C250102D4988717D9BA15AB6D3E", - /* order */ "7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF975DEB41B3A6057C3C432146526551", - /* Gx */ "6768AE8E18BB92CFCF005C949AA2C6D94853D0E660BBF854B1C9505FE95A", - /* Gy */ "1607E6898F390C06BC1D552BAD226F3B6FCFE48B6E818499AF18E3ED6CF3", - /* cofactor */ 1, - /* OID */ "1.2.840.10045.3.1.6" -}, -#endif -#ifdef LTC_ECC_BRAINPOOLP160R1 -{ - /* prime */ "E95E4A5F737059DC60DFC7AD95B3D8139515620F", - /* A */ "340E7BE2A280EB74E2BE61BADA745D97E8F7C300", - /* B */ "1E589A8595423412134FAA2DBDEC95C8D8675E58", - /* order */ "E95E4A5F737059DC60DF5991D45029409E60FC09", - /* Gx */ "BED5AF16EA3F6A4F62938C4631EB5AF7BDBCDBC3", - /* Gy */ "1667CB477A1A8EC338F94741669C976316DA6321", - /* cofactor */ 1, - /* OID */ "1.3.36.3.3.2.8.1.1.1" -}, -#endif -#ifdef LTC_ECC_BRAINPOOLP192R1 -{ - /* prime */ "C302F41D932A36CDA7A3463093D18DB78FCE476DE1A86297", - /* A */ "6A91174076B1E0E19C39C031FE8685C1CAE040E5C69A28EF", - /* B */ "469A28EF7C28CCA3DC721D044F4496BCCA7EF4146FBF25C9", - /* order */ "C302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1", - /* Gx */ "C0A0647EAAB6A48753B033C56CB0F0900A2F5C4853375FD6", - /* Gy */ "14B690866ABD5BB88B5F4828C1490002E6773FA2FA299B8F", - /* cofactor */ 1, - /* OID */ "1.3.36.3.3.2.8.1.1.3" -}, -#endif -#ifdef LTC_ECC_BRAINPOOLP224R1 -{ - /* prime */ "D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF", - /* A */ "68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43", - /* B */ "2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B", - /* order */ "D7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F", - /* Gx */ "0D9029AD2C7E5CF4340823B2A87DC68C9E4CE3174C1E6EFDEE12C07D", - /* Gy */ "58AA56F772C0726F24C6B89E4ECDAC24354B9E99CAA3F6D3761402CD", - /* cofactor */ 1, - /* OID */ "1.3.36.3.3.2.8.1.1.5" -}, -#endif -#ifdef LTC_ECC_BRAINPOOLP256R1 -{ - /* prime */ "A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", - /* A */ "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", - /* B */ "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", - /* order */ "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7", - /* Gx */ "8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262", - /* Gy */ "547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", - /* cofactor */ 1, - /* OID */ "1.3.36.3.3.2.8.1.1.7" -}, -#endif -#ifdef LTC_ECC_BRAINPOOLP320R1 -{ - /* prime */ "D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28FCD412B1F1B32E27", - /* A */ "3EE30B568FBAB0F883CCEBD46D3F3BB8A2A73513F5EB79DA66190EB085FFA9F492F375A97D860EB4", - /* B */ "520883949DFDBC42D3AD198640688A6FE13F41349554B49ACC31DCCD884539816F5EB4AC8FB1F1A6", - /* order */ "D35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D482EC7EE8658E98691555B44C59311", - /* Gx */ "43BD7E9AFB53D8B85289BCC48EE5BFE6F20137D10A087EB6E7871E2A10A599C710AF8D0D39E20611", - /* Gy */ "14FDD05545EC1CC8AB4093247F77275E0743FFED117182EAA9C77877AAAC6AC7D35245D1692E8EE1", - /* cofactor */ 1, - /* OID */ "1.3.36.3.3.2.8.1.1.9" -}, -#endif -#ifdef LTC_ECC_BRAINPOOLP384R1 -{ - /* prime */ "8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC53", - /* A */ "7BC382C63D8C150C3C72080ACE05AFA0C2BEA28E4FB22787139165EFBA91F90F8AA5814A503AD4EB04A8C7DD22CE2826", - /* B */ "04A8C7DD22CE28268B39B55416F0447C2FB77DE107DCD2A62E880EA53EEB62D57CB4390295DBC9943AB78696FA504C11", - /* order */ "8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565", - /* Gx */ "1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D646AAEF87B2E247D4AF1E", - /* Gy */ "8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E4646217791811142820341263C5315", - /* cofactor */ 1, - /* OID */ "1.3.36.3.3.2.8.1.1.11" -}, -#endif -#ifdef LTC_ECC_BRAINPOOLP512R1 -{ - /* prime */ "AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3", - /* A */ "7830A3318B603B89E2327145AC234CC594CBDD8D3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CA", - /* B */ "3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CADC083E67984050B75EBAE5DD2809BD638016F723", - /* order */ "AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA92619418661197FAC10471DB1D381085DDADDB58796829CA90069", - /* Gx */ "81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822", - /* Gy */ "7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892", - /* cofactor */ 1, - /* OID */ "1.3.36.3.3.2.8.1.1.13" -}, -#endif -#ifdef LTC_ECC_BRAINPOOLP160T1 -{ - /* prime */ "E95E4A5F737059DC60DFC7AD95B3D8139515620F", - /* A */ "E95E4A5F737059DC60DFC7AD95B3D8139515620C", - /* B */ "7A556B6DAE535B7B51ED2C4D7DAA7A0B5C55F380", - /* order */ "E95E4A5F737059DC60DF5991D45029409E60FC09", - /* Gx */ "B199B13B9B34EFC1397E64BAEB05ACC265FF2378", - /* Gy */ "ADD6718B7C7C1961F0991B842443772152C9E0AD", - /* cofactor */ 1, - /* OID */ "1.3.36.3.3.2.8.1.1.2" -}, -#endif -#ifdef LTC_ECC_BRAINPOOLP192T1 -{ - /* prime */ "C302F41D932A36CDA7A3463093D18DB78FCE476DE1A86297", - /* A */ "C302F41D932A36CDA7A3463093D18DB78FCE476DE1A86294", - /* B */ "13D56FFAEC78681E68F9DEB43B35BEC2FB68542E27897B79", - /* order */ "C302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1", - /* Gx */ "3AE9E58C82F63C30282E1FE7BBF43FA72C446AF6F4618129", - /* Gy */ "097E2C5667C2223A902AB5CA449D0084B7E5B3DE7CCC01C9", - /* cofactor */ 1, - /* OID */ "1.3.36.3.3.2.8.1.1.4" -}, -#endif -#ifdef LTC_ECC_BRAINPOOLP224T1 -{ - /* prime */ "D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF", - /* A */ "D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FC", - /* B */ "4B337D934104CD7BEF271BF60CED1ED20DA14C08B3BB64F18A60888D", - /* order */ "D7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F", - /* Gx */ "6AB1E344CE25FF3896424E7FFE14762ECB49F8928AC0C76029B4D580", - /* Gy */ "0374E9F5143E568CD23F3F4D7C0D4B1E41C8CC0D1C6ABD5F1A46DB4C", - /* cofactor */ 1, - /* OID */ "1.3.36.3.3.2.8.1.1.6" -}, -#endif -#ifdef LTC_ECC_BRAINPOOLP256T1 -{ - /* prime */ "A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", - /* A */ "A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5374", - /* B */ "662C61C430D84EA4FE66A7733D0B76B7BF93EBC4AF2F49256AE58101FEE92B04", - /* order */ "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7", - /* Gx */ "A3E8EB3CC1CFE7B7732213B23A656149AFA142C47AAFBC2B79A191562E1305F4", - /* Gy */ "2D996C823439C56D7F7B22E14644417E69BCB6DE39D027001DABE8F35B25C9BE", - /* cofactor */ 1, - /* OID */ "1.3.36.3.3.2.8.1.1.8" -}, -#endif -#ifdef LTC_ECC_BRAINPOOLP320T1 -{ - /* prime */ "D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28FCD412B1F1B32E27", - /* A */ "D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28FCD412B1F1B32E24", - /* B */ "A7F561E038EB1ED560B3D147DB782013064C19F27ED27C6780AAF77FB8A547CEB5B4FEF422340353", - /* order */ "D35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D482EC7EE8658E98691555B44C59311", - /* Gx */ "925BE9FB01AFC6FB4D3E7D4990010F813408AB106C4F09CB7EE07868CC136FFF3357F624A21BED52", - /* Gy */ "63BA3A7A27483EBF6671DBEF7ABB30EBEE084E58A0B077AD42A5A0989D1EE71B1B9BC0455FB0D2C3", - /* cofactor */ 1, - /* OID */ "1.3.36.3.3.2.8.1.1.10" -}, -#endif -#ifdef LTC_ECC_BRAINPOOLP384T1 -{ - /* prime */ "8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC53", - /* A */ "8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC50", - /* B */ "7F519EADA7BDA81BD826DBA647910F8C4B9346ED8CCDC64E4B1ABD11756DCE1D2074AA263B88805CED70355A33B471EE", - /* order */ "8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565", - /* Gx */ "18DE98B02DB9A306F2AFCD7235F72A819B80AB12EBD653172476FECD462AABFFC4FF191B946A5F54D8D0AA2F418808CC", - /* Gy */ "25AB056962D30651A114AFD2755AD336747F93475B7A1FCA3B88F2B6A208CCFE469408584DC2B2912675BF5B9E582928", - /* cofactor */ 1, - /* OID */ "1.3.36.3.3.2.8.1.1.12" -}, -#endif -#ifdef LTC_ECC_BRAINPOOLP512T1 -{ - /* prime */ "AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3", - /* A */ "AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F0", - /* B */ "7CBBBCF9441CFAB76E1890E46884EAE321F70C0BCB4981527897504BEC3E36A62BCDFA2304976540F6450085F2DAE145C22553B465763689180EA2571867423E", - /* order */ "AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA92619418661197FAC10471DB1D381085DDADDB58796829CA90069", - /* Gx */ "640ECE5C12788717B9C1BA06CBC2A6FEBA85842458C56DDE9DB1758D39C0313D82BA51735CDB3EA499AA77A7D6943A64F7A3F25FE26F06B51BAA2696FA9035DA", - /* Gy */ "5B534BD595F5AF0FA2C892376C84ACE1BB4E3019B71634C01131159CAE03CEE9D9932184BEEF216BD71DF2DADF86A627306ECFF96DBB8BACE198B61E00F8B332", - /* cofactor */ 1, - /* OID */ "1.3.36.3.3.2.8.1.1.14" -}, -#endif -#ifdef LTC_ECC_FRP256V1 -{ - /* prime */ "F1FD178C0B3AD58F10126DE8CE42435B3961ADBCABC8CA6DE8FCF353D86E9C03", - /* A */ "F1FD178C0B3AD58F10126DE8CE42435B3961ADBCABC8CA6DE8FCF353D86E9C00", - /* B */ "EE353FCA5428A9300D4ABA754A44C00FDFEC0C9AE4B1A1803075ED967B7BB73F", - /* order */ "F1FD178C0B3AD58F10126DE8CE42435B53DC67E140D2BF941FFDD459C6D655E1", - /* Gx */ "B6B3D4C356C139EB31183D4749D423958C27D2DCAF98B70164C97A2DD98F5CFF", - /* Gy */ "6142E0F7C8B204911F9271F0F3ECEF8C2701C307E8E4C9E183115A1554062CFB", - /* cofactor */ 1, - /* OID */ "1.2.250.1.223.101.256.1" -}, -#endif -{ - NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL -} -}; - -#endif - diff --git a/src/pk/ecc/ecc_ansi_x963_export.c b/src/pk/ecc/ecc_ansi_x963_export.c deleted file mode 100644 index 472e1b56..00000000 --- a/src/pk/ecc/ecc_ansi_x963_export.c +++ /dev/null @@ -1,24 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ecc_ansi_x963_export.c - ECC Crypto, Tom St Denis -*/ - -#ifdef LTC_MECC - -/** ECC X9.63 (Sec. 4.3.6) uncompressed export - @param key Key to export - @param out [out] destination of export - @param outlen [in/out] Length of destination and final output size - Return CRYPT_OK on success -*/ -int ecc_ansi_x963_export(const ecc_key *key, unsigned char *out, unsigned long *outlen) -{ - return ecc_get_key(out, outlen, PK_PUBLIC, key); -} - -#endif diff --git a/src/pk/ecc/ecc_ansi_x963_import.c b/src/pk/ecc/ecc_ansi_x963_import.c deleted file mode 100644 index 109750be..00000000 --- a/src/pk/ecc/ecc_ansi_x963_import.c +++ /dev/null @@ -1,52 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ecc_ansi_x963_import.c - ECC Crypto, Tom St Denis -*/ - -#ifdef LTC_MECC - -/** Import an ANSI X9.63 format public key - @param in The input data to read - @param inlen The length of the input data - @param key [out] destination to store imported key \ -*/ -int ecc_ansi_x963_import(const unsigned char *in, unsigned long inlen, ecc_key *key) -{ - return ecc_ansi_x963_import_ex(in, inlen, key, NULL); -} - -int ecc_ansi_x963_import_ex(const unsigned char *in, unsigned long inlen, ecc_key *key, const ltc_ecc_curve *cu) -{ - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - - /* must be odd */ - if ((inlen & 1) == 0) { - return CRYPT_INVALID_ARG; - } - - /* initialize key->dp */ - if (cu == NULL) { - /* this case works only for uncompressed public keys */ - if ((err = ecc_set_curve_by_size((inlen-1)>>1, key)) != CRYPT_OK) { return err; } - } - else { - /* this one works for both compressed / uncompressed pubkeys */ - if ((err = ecc_set_curve(cu, key)) != CRYPT_OK) { return err; } - } - - /* load public key */ - if ((err = ecc_set_key(in, inlen, PK_PUBLIC, key)) != CRYPT_OK) { return err; } - - /* we're done */ - return CRYPT_OK; -} - -#endif diff --git a/src/pk/ecc/ecc_decrypt_key.c b/src/pk/ecc/ecc_decrypt_key.c deleted file mode 100644 index 7a4fac2e..00000000 --- a/src/pk/ecc/ecc_decrypt_key.c +++ /dev/null @@ -1,133 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ecc_decrypt_key.c - ECC Crypto, Tom St Denis -*/ - -#if defined(LTC_MECC) && defined(LTC_DER) - -/** - Decrypt an ECC encrypted key - @param in The ciphertext - @param inlen The length of the ciphertext (octets) - @param out [out] The plaintext - @param outlen [in/out] The max size and resulting size of the plaintext - @param key The corresponding private ECC key - @return CRYPT_OK if successful -*/ -int ecc_decrypt_key(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - const ecc_key *key) -{ - unsigned char *ecc_shared, *skey, *pub_expt; - unsigned long x, y; - unsigned long hashOID[32] = { 0 }; - int hash, err; - ecc_key pubkey; - ltc_asn1_list decode[3]; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - /* right key type? */ - if (key->type != PK_PRIVATE) { - return CRYPT_PK_NOT_PRIVATE; - } - - /* decode to find out hash */ - LTC_SET_ASN1(decode, 0, LTC_ASN1_OBJECT_IDENTIFIER, hashOID, LTC_ARRAY_SIZE(hashOID)); - err = der_decode_sequence(in, inlen, decode, 1); - if (err != CRYPT_OK && err != CRYPT_INPUT_TOO_LONG) { - return err; - } - - hash = find_hash_oid(hashOID, decode[0].size); - if (hash_is_valid(hash) != CRYPT_OK) { - return CRYPT_INVALID_PACKET; - } - - /* we now have the hash! */ - - /* allocate memory */ - pub_expt = XMALLOC(ECC_BUF_SIZE); - ecc_shared = XMALLOC(ECC_BUF_SIZE); - skey = XMALLOC(MAXBLOCKSIZE); - if (pub_expt == NULL || ecc_shared == NULL || skey == NULL) { - if (pub_expt != NULL) { - XFREE(pub_expt); - } - if (ecc_shared != NULL) { - XFREE(ecc_shared); - } - if (skey != NULL) { - XFREE(skey); - } - return CRYPT_MEM; - } - LTC_SET_ASN1(decode, 1, LTC_ASN1_OCTET_STRING, pub_expt, ECC_BUF_SIZE); - LTC_SET_ASN1(decode, 2, LTC_ASN1_OCTET_STRING, skey, MAXBLOCKSIZE); - - /* read the structure in now */ - if ((err = der_decode_sequence(in, inlen, decode, 3)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* import ECC key from packet */ - if ((err = ecc_copy_curve(key, &pubkey)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = ecc_set_key(decode[1].data, decode[1].size, PK_PUBLIC, &pubkey)) != CRYPT_OK) { goto LBL_ERR; } - - /* make shared key */ - x = ECC_BUF_SIZE; - if ((err = ecc_shared_secret(key, &pubkey, ecc_shared, &x)) != CRYPT_OK) { - ecc_free(&pubkey); - goto LBL_ERR; - } - ecc_free(&pubkey); - - y = MIN(ECC_BUF_SIZE, MAXBLOCKSIZE); - if ((err = hash_memory(hash, ecc_shared, x, ecc_shared, &y)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* ensure the hash of the shared secret is at least as big as the encrypt itself */ - if (decode[2].size > y) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - - /* avoid buffer overflow */ - if (*outlen < decode[2].size) { - *outlen = decode[2].size; - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; - } - - /* Decrypt the key */ - for (x = 0; x < decode[2].size; x++) { - out[x] = skey[x] ^ ecc_shared[x]; - } - *outlen = x; - - err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(pub_expt, ECC_BUF_SIZE); - zeromem(ecc_shared, ECC_BUF_SIZE); - zeromem(skey, MAXBLOCKSIZE); -#endif - - XFREE(pub_expt); - XFREE(ecc_shared); - XFREE(skey); - - return err; -} - -#endif - diff --git a/src/pk/ecc/ecc_encrypt_key.c b/src/pk/ecc/ecc_encrypt_key.c deleted file mode 100644 index bac62bf7..00000000 --- a/src/pk/ecc/ecc_encrypt_key.c +++ /dev/null @@ -1,120 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ecc_encrypt_key.c - ECC Crypto, Tom St Denis -*/ - -#if defined(LTC_MECC) && defined(LTC_DER) - -/** - Encrypt a symmetric key with ECC - @param in The symmetric key you want to encrypt - @param inlen The length of the key to encrypt (octets) - @param out [out] The destination for the ciphertext - @param outlen [in/out] The max size and resulting size of the ciphertext - @param prng An active PRNG state - @param wprng The index of the PRNG you wish to use - @param hash The index of the hash you want to use - @param key The ECC key you want to encrypt to - @return CRYPT_OK if successful -*/ -int ecc_encrypt_key(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int wprng, int hash, - const ecc_key *key) -{ - unsigned char *pub_expt, *ecc_shared, *skey; - ecc_key pubkey; - unsigned long x, y, pubkeysize; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - if ((err = hash_is_valid(hash)) != CRYPT_OK) { - return err; - } - - if (inlen > hash_descriptor[hash].hashsize) { - return CRYPT_INVALID_HASH; - } - - /* make a random key and export the public copy */ - if ((err = ecc_copy_curve(key, &pubkey)) != CRYPT_OK) { return err; } - if ((err = ecc_generate_key(prng, wprng, &pubkey)) != CRYPT_OK) { return err; } - - pub_expt = XMALLOC(ECC_BUF_SIZE); - ecc_shared = XMALLOC(ECC_BUF_SIZE); - skey = XMALLOC(MAXBLOCKSIZE); - if (pub_expt == NULL || ecc_shared == NULL || skey == NULL) { - if (pub_expt != NULL) { - XFREE(pub_expt); - } - if (ecc_shared != NULL) { - XFREE(ecc_shared); - } - if (skey != NULL) { - XFREE(skey); - } - ecc_free(&pubkey); - return CRYPT_MEM; - } - - pubkeysize = ECC_BUF_SIZE; - if (ltc_mp.sqrtmod_prime != NULL) { - /* PK_COMPRESSED requires sqrtmod_prime */ - err = ecc_get_key(pub_expt, &pubkeysize, PK_PUBLIC|PK_COMPRESSED, &pubkey); - } - else { - err = ecc_get_key(pub_expt, &pubkeysize, PK_PUBLIC, &pubkey); - } - if (err != CRYPT_OK) { - ecc_free(&pubkey); - goto LBL_ERR; - } - - /* make random key */ - x = ECC_BUF_SIZE; - if ((err = ecc_shared_secret(&pubkey, key, ecc_shared, &x)) != CRYPT_OK) { - ecc_free(&pubkey); - goto LBL_ERR; - } - ecc_free(&pubkey); - y = MAXBLOCKSIZE; - if ((err = hash_memory(hash, ecc_shared, x, skey, &y)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* Encrypt key */ - for (x = 0; x < inlen; x++) { - skey[x] ^= in[x]; - } - - err = der_encode_sequence_multi(out, outlen, - LTC_ASN1_OBJECT_IDENTIFIER, hash_descriptor[hash].OIDlen, hash_descriptor[hash].OID, - LTC_ASN1_OCTET_STRING, pubkeysize, pub_expt, - LTC_ASN1_OCTET_STRING, inlen, skey, - LTC_ASN1_EOL, 0UL, NULL); - -LBL_ERR: -#ifdef LTC_CLEAN_STACK - /* clean up */ - zeromem(pub_expt, ECC_BUF_SIZE); - zeromem(ecc_shared, ECC_BUF_SIZE); - zeromem(skey, MAXBLOCKSIZE); -#endif - - XFREE(skey); - XFREE(ecc_shared); - XFREE(pub_expt); - - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_export.c b/src/pk/ecc/ecc_export.c deleted file mode 100644 index 69b53bc7..00000000 --- a/src/pk/ecc/ecc_export.c +++ /dev/null @@ -1,61 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ecc_export.c - ECC Crypto, Tom St Denis -*/ - -#if defined(LTC_MECC) && defined(LTC_DER) - -/** - Export an ECC key as a binary packet - @param out [out] Destination for the key - @param outlen [in/out] Max size and resulting size of the exported key - @param type The type of key you want to export (PK_PRIVATE or PK_PUBLIC) - @param key The key to export - @return CRYPT_OK if successful -*/ -int ecc_export(unsigned char *out, unsigned long *outlen, int type, const ecc_key *key) -{ - int err; - unsigned char flags[1]; - unsigned long key_size; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - /* type valid? */ - if (key->type != PK_PRIVATE && type == PK_PRIVATE) { - return CRYPT_PK_TYPE_MISMATCH; - } - - /* we store the NIST byte size */ - key_size = key->dp.size; - - if (type == PK_PRIVATE) { - flags[0] = 1; - err = der_encode_sequence_multi(out, outlen, - LTC_ASN1_BIT_STRING, 1UL, flags, - LTC_ASN1_SHORT_INTEGER, 1UL, &key_size, - LTC_ASN1_INTEGER, 1UL, key->pubkey.x, - LTC_ASN1_INTEGER, 1UL, key->pubkey.y, - LTC_ASN1_INTEGER, 1UL, key->k, - LTC_ASN1_EOL, 0UL, NULL); - } else { - flags[0] = 0; - err = der_encode_sequence_multi(out, outlen, - LTC_ASN1_BIT_STRING, 1UL, flags, - LTC_ASN1_SHORT_INTEGER, 1UL, &key_size, - LTC_ASN1_INTEGER, 1UL, key->pubkey.x, - LTC_ASN1_INTEGER, 1UL, key->pubkey.y, - LTC_ASN1_EOL, 0UL, NULL); - } - - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_export_openssl.c b/src/pk/ecc/ecc_export_openssl.c deleted file mode 100644 index a58f40eb..00000000 --- a/src/pk/ecc/ecc_export_openssl.c +++ /dev/null @@ -1,167 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#if defined(LTC_MECC) && defined(LTC_DER) - -/** - Export an ECC key as a binary packet - @param out [out] Destination for the key - @param outlen [in/out] Max size and resulting size of the exported key - @param type The type of key you want to export (PK_PRIVATE or PK_PUBLIC) - @param key The key to export - @return CRYPT_OK if successful -*/ - -int ecc_export_openssl(unsigned char *out, unsigned long *outlen, int type, const ecc_key *key) -{ - int err; - void *prime, *order, *a, *b, *gx, *gy; - unsigned char bin_a[256], bin_b[256], bin_k[256], bin_g[512], bin_xy[512]; - unsigned long len_a, len_b, len_k, len_g, len_xy; - unsigned long cofactor, one = 1; - const char *OID; - unsigned long oid[16], oidlen; - ltc_asn1_list seq_fieldid[2], seq_curve[2], seq_ecparams[6], seq_priv[4], pub_xy, ecparams; - int flag_oid = type & PK_CURVEOID ? 1 : 0; - int flag_com = type & PK_COMPRESSED ? 1 : 0; - int flag_pri = type & PK_PRIVATE ? 1 : 0; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - if (key->type != PK_PRIVATE && flag_pri) return CRYPT_PK_TYPE_MISMATCH; - - if (flag_oid) { - /* http://tools.ietf.org/html/rfc5912 - ECParameters ::= CHOICE { - namedCurve CURVE.&id({NamedCurve}) # OBJECT - } - */ - if (key->dp.oidlen == 0) { err = CRYPT_INVALID_ARG; goto error; } - LTC_SET_ASN1(&ecparams, 0, LTC_ASN1_OBJECT_IDENTIFIER, key->dp.oid, key->dp.oidlen); - } - else { - prime = key->dp.prime; - order = key->dp.order; - a = key->dp.A; - b = key->dp.B; - gx = key->dp.base.x; - gy = key->dp.base.y; - cofactor = key->dp.cofactor; - - /* curve param a */ - len_a = ltc_mp_unsigned_bin_size(a); - if (len_a > sizeof(bin_a)) { err = CRYPT_BUFFER_OVERFLOW; goto error; } - if ((err = ltc_mp_to_unsigned_bin(a, bin_a)) != CRYPT_OK) { goto error; } - if (len_a == 0) { len_a = 1; bin_a[0] = 0; } /* handle case a == 0 */ - - /* curve param b */ - len_b = ltc_mp_unsigned_bin_size(b); - if (len_b > sizeof(bin_b)) { err = CRYPT_BUFFER_OVERFLOW; goto error; } - if ((err = ltc_mp_to_unsigned_bin(b, bin_b)) != CRYPT_OK) { goto error; } - if (len_b == 0) { len_b = 1; bin_b[0] = 0; } /* handle case b == 0 */ - - /* base point - (un)compressed based on flag_com */ - len_g = sizeof(bin_g); - err = ltc_ecc_export_point(bin_g, &len_g, gx, gy, key->dp.size, flag_com); - if (err != CRYPT_OK) { goto error; } - - /* we support only prime-field EC */ - if ((err = pk_get_oid(LTC_OID_EC_PRIMEF, &OID)) != CRYPT_OK) { goto error; } - - /* http://tools.ietf.org/html/rfc3279 - ECParameters ::= SEQUENCE { # SEQUENCE - version INTEGER { ecpVer1(1) } (ecpVer1) # INTEGER :01 - FieldID ::= SEQUENCE { # SEQUENCE - fieldType FIELD-ID.&id({IOSet}), # OBJECT :prime-field - parameters FIELD-ID.&Type({IOSet}{@fieldType}) # INTEGER - } - Curve ::= SEQUENCE { # SEQUENCE - a FieldElement ::= OCTET STRING # OCTET STRING - b FieldElement ::= OCTET STRING # OCTET STRING - seed BIT STRING OPTIONAL - } - base ECPoint ::= OCTET STRING # OCTET STRING - order INTEGER, # INTEGER - cofactor INTEGER OPTIONAL # INTEGER - } - */ - - oidlen = LTC_ARRAY_SIZE(oid); - if ((err = pk_oid_str_to_num(OID, oid, &oidlen)) != CRYPT_OK) { - goto error; - } - - /* FieldID SEQUENCE */ - LTC_SET_ASN1(seq_fieldid, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid, oidlen); - LTC_SET_ASN1(seq_fieldid, 1, LTC_ASN1_INTEGER, prime, 1UL); - - /* Curve SEQUENCE */ - LTC_SET_ASN1(seq_curve, 0, LTC_ASN1_OCTET_STRING, bin_a, len_a); - LTC_SET_ASN1(seq_curve, 1, LTC_ASN1_OCTET_STRING, bin_b, len_b); - - /* ECParameters SEQUENCE */ - LTC_SET_ASN1(seq_ecparams, 0, LTC_ASN1_SHORT_INTEGER, &one, 1UL); - LTC_SET_ASN1(seq_ecparams, 1, LTC_ASN1_SEQUENCE, seq_fieldid, 2UL); - LTC_SET_ASN1(seq_ecparams, 2, LTC_ASN1_SEQUENCE, seq_curve, 2UL); - LTC_SET_ASN1(seq_ecparams, 3, LTC_ASN1_OCTET_STRING, bin_g, len_g); - LTC_SET_ASN1(seq_ecparams, 4, LTC_ASN1_INTEGER, order, 1UL); - LTC_SET_ASN1(seq_ecparams, 5, LTC_ASN1_SHORT_INTEGER, &cofactor, 1UL); - - /* ECParameters used by ECPrivateKey or SubjectPublicKeyInfo below */ - LTC_SET_ASN1(&ecparams, 0, LTC_ASN1_SEQUENCE, seq_ecparams, 6UL); - } - - /* public key - (un)compressed based on flag_com */ - len_xy = sizeof(bin_xy); - err = ltc_ecc_export_point(bin_xy, &len_xy, key->pubkey.x, key->pubkey.y, key->dp.size, flag_com); - if (err != CRYPT_OK) { - goto error; - } - - if (flag_pri) { - - /* http://tools.ietf.org/html/rfc5915 - ECPrivateKey ::= SEQUENCE { # SEQUENCE - version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1) # INTEGER :01 - privateKey OCTET STRING, # OCTET STRING - [0] ECParameters # see above - [1] publicKey # BIT STRING - } - */ - - /* private key */ - len_k = ltc_mp_unsigned_bin_size(key->k); - if (len_k > sizeof(bin_k)) { err = CRYPT_BUFFER_OVERFLOW; goto error; } - if ((err = ltc_mp_to_unsigned_bin(key->k, bin_k)) != CRYPT_OK) { goto error; } - - LTC_SET_ASN1(&pub_xy, 0, LTC_ASN1_RAW_BIT_STRING, bin_xy, 8*len_xy); - LTC_SET_ASN1(seq_priv, 0, LTC_ASN1_SHORT_INTEGER, &one, 1); - LTC_SET_ASN1(seq_priv, 1, LTC_ASN1_OCTET_STRING, bin_k, len_k); - LTC_SET_ASN1_CUSTOM_CONSTRUCTED(seq_priv, 2, LTC_ASN1_CL_CONTEXT_SPECIFIC, 0, &ecparams); /* context specific 0 */ - LTC_SET_ASN1_CUSTOM_CONSTRUCTED(seq_priv, 3, LTC_ASN1_CL_CONTEXT_SPECIFIC, 1, &pub_xy); /* context specific 1 */ - - err = der_encode_sequence(seq_priv, 4, out, outlen); - } - else { - /* http://tools.ietf.org/html/rfc5480 - SubjectPublicKeyInfo ::= SEQUENCE { # SEQUENCE - AlgorithmIdentifier ::= SEQUENCE { # SEQUENCE - algorithm OBJECT IDENTIFIER # OBJECT :id-ecPublicKey - ECParameters # see above - } - subjectPublicKey BIT STRING # BIT STRING - } - */ - err = x509_encode_subject_public_key_info( out, outlen, LTC_OID_EC, bin_xy, len_xy, - ecparams.type, ecparams.data, ecparams.size ); - } - -error: - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_find_curve.c b/src/pk/ecc/ecc_find_curve.c deleted file mode 100644 index cfcb5dd0..00000000 --- a/src/pk/ecc/ecc_find_curve.c +++ /dev/null @@ -1,240 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -static const struct { - const char *OID; - const char *names[6]; -} s_curve_names[] = { -#ifdef LTC_ECC_SECP112R1 - { - "1.3.132.0.6", { "SECP112R1", "ECC-112", NULL } - }, -#endif -#ifdef LTC_ECC_SECP112R2 - { - "1.3.132.0.7", { "SECP112R2", NULL } - }, -#endif -#ifdef LTC_ECC_SECP128R1 - { - "1.3.132.0.28", { "SECP128R1", "ECC-128", NULL } - }, -#endif -#ifdef LTC_ECC_SECP128R2 - { - "1.3.132.0.29", { "SECP128R2", NULL } - }, -#endif -#ifdef LTC_ECC_SECP160R1 - { - "1.3.132.0.8", { "SECP160R1", "ECC-160", NULL } - }, -#endif -#ifdef LTC_ECC_SECP160R2 - { - "1.3.132.0.30", { "SECP160R2", NULL } - }, -#endif -#ifdef LTC_ECC_SECP160K1 - { - "1.3.132.0.9", { "SECP160K1", NULL } - }, -#endif -#ifdef LTC_ECC_SECP192R1 - { - "1.2.840.10045.3.1.1", { "SECP192R1", "NISTP192", "PRIME192V1", "ECC-192", "P-192", NULL } - }, -#endif -#ifdef LTC_ECC_PRIME192V2 - { - "1.2.840.10045.3.1.2", { "PRIME192V2", NULL } - }, -#endif -#ifdef LTC_ECC_PRIME192V3 - { - "1.2.840.10045.3.1.3", { "PRIME192V3", NULL } - }, -#endif -#ifdef LTC_ECC_SECP192K1 - { - "1.3.132.0.31", { "SECP192K1", NULL } - }, -#endif -#ifdef LTC_ECC_SECP224R1 - { - "1.3.132.0.33", { "SECP224R1", "NISTP224", "ECC-224", "P-224", NULL } - }, -#endif -#ifdef LTC_ECC_SECP224K1 - { - "1.3.132.0.32", { "SECP224K1", NULL } - }, -#endif -#ifdef LTC_ECC_SECP256R1 - { - "1.2.840.10045.3.1.7", { "SECP256R1", "NISTP256", "PRIME256V1", "ECC-256", "P-256", NULL } - }, -#endif -#ifdef LTC_ECC_SECP256K1 - { - "1.3.132.0.10", { "SECP256K1", NULL } - }, -#endif -#ifdef LTC_ECC_SECP384R1 - { - "1.3.132.0.34", { "SECP384R1", "NISTP384", "ECC-384", "P-384", NULL } - }, -#endif -#ifdef LTC_ECC_SECP521R1 - { - "1.3.132.0.35", { "SECP521R1", "NISTP521", "ECC-521", "P-521", NULL } - }, -#endif -#ifdef LTC_ECC_PRIME239V1 - { - "1.2.840.10045.3.1.4", { "PRIME239V1", NULL } - }, -#endif -#ifdef LTC_ECC_PRIME239V2 - { - "1.2.840.10045.3.1.5", { "PRIME239V2", NULL } - }, -#endif -#ifdef LTC_ECC_PRIME239V3 - { - "1.2.840.10045.3.1.6", { "PRIME239V3", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP160R1 - { - "1.3.36.3.3.2.8.1.1.1", { "BRAINPOOLP160R1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP192R1 - { - "1.3.36.3.3.2.8.1.1.3", { "BRAINPOOLP192R1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP224R1 - { - "1.3.36.3.3.2.8.1.1.5", { "BRAINPOOLP224R1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP256R1 - { - "1.3.36.3.3.2.8.1.1.7", { "BRAINPOOLP256R1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP320R1 - { - "1.3.36.3.3.2.8.1.1.9", { "BRAINPOOLP320R1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP384R1 - { - "1.3.36.3.3.2.8.1.1.11", { "BRAINPOOLP384R1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP512R1 - { - "1.3.36.3.3.2.8.1.1.13", { "BRAINPOOLP512R1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP160T1 - { - "1.3.36.3.3.2.8.1.1.2", { "BRAINPOOLP160T1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP192T1 - { - "1.3.36.3.3.2.8.1.1.4", { "BRAINPOOLP192T1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP224T1 - { - "1.3.36.3.3.2.8.1.1.6", { "BRAINPOOLP224T1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP256T1 - { - "1.3.36.3.3.2.8.1.1.8", { "BRAINPOOLP256T1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP320T1 - { - "1.3.36.3.3.2.8.1.1.10", { "BRAINPOOLP320T1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP384T1 - { - "1.3.36.3.3.2.8.1.1.12", { "BRAINPOOLP384T1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP512T1 - { - "1.3.36.3.3.2.8.1.1.14", { "BRAINPOOLP512T1", NULL } - }, -#endif -#ifdef LTC_ECC_FRP256V1 - { - "1.2.250.1.223.101.256.1", { "FRP256V1", NULL } - }, -#endif - { - NULL, { NULL } - } -}; - -int ecc_get_curve_names(const char *oid, const char * const **names) -{ - unsigned long i; - - LTC_ARGCHK(oid != NULL); - LTC_ARGCHK(names != NULL); - - for (i = 0; s_curve_names[i].OID != NULL; ++i) { - if (XSTRCMP(s_curve_names[i].OID, oid) == 0) { - *names = s_curve_names[i].names; - return CRYPT_OK; - } - } - return CRYPT_INVALID_ARG; /* not found */ -} - -int ecc_find_curve(const char *name_or_oid, const ltc_ecc_curve **cu) -{ - int i, j; - const char *OID = NULL; - - LTC_ARGCHK(name_or_oid != NULL); - - if (cu) *cu = NULL; - - for (i = 0; s_curve_names[i].OID != NULL && !OID; i++) { - if (XSTRCMP(s_curve_names[i].OID, name_or_oid) == 0) { - OID = s_curve_names[i].OID; - } - for (j = 0; s_curve_names[i].names[j] != NULL && !OID; j++) { - if (ltc_algname_match(s_curve_names[i].names[j], name_or_oid)) { - OID = s_curve_names[i].OID; - } - } - } - - if (OID != NULL) { - for (i = 0; ltc_ecc_curves[i].prime != NULL; i++) { - if (XSTRCMP(ltc_ecc_curves[i].OID, OID) == 0) { - if (cu) *cu = <c_ecc_curves[i]; - return CRYPT_OK; - } - } - } - - return CRYPT_INVALID_ARG; /* not found */ -} - -#endif diff --git a/src/pk/ecc/ecc_free.c b/src/pk/ecc/ecc_free.c deleted file mode 100644 index fd954d62..00000000 --- a/src/pk/ecc/ecc_free.c +++ /dev/null @@ -1,28 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ecc_free.c - ECC Crypto, Tom St Denis -*/ - -#ifdef LTC_MECC - -/** - Free an ECC key from memory - @param key The key you wish to free -*/ -void ecc_free(ecc_key *key) -{ - LTC_ARGCHKVD(key != NULL); - - ltc_mp_cleanup_multi(&key->dp.prime, &key->dp.order, - &key->dp.A, &key->dp.B, - &key->dp.base.x, &key->dp.base.y, &key->dp.base.z, - &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, - &key->k, NULL); -} - -#endif diff --git a/src/pk/ecc/ecc_get_key.c b/src/pk/ecc/ecc_get_key.c deleted file mode 100644 index 05586eff..00000000 --- a/src/pk/ecc/ecc_get_key.c +++ /dev/null @@ -1,53 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -/** Export raw public or private key (public keys = ANS X9.63 compressed or uncompressed; private keys = raw bytes) - @param out [out] destination of export - @param outlen [in/out] Length of destination and final output size - @param type PK_PRIVATE, PK_PUBLIC or PK_PUBLIC|PK_COMPRESSED - @param key Key to export - Return CRYPT_OK on success -*/ - -int ecc_get_key(unsigned char *out, unsigned long *outlen, int type, const ecc_key *key) -{ - unsigned long size, ksize; - int err, compressed; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - size = key->dp.size; - compressed = type & PK_COMPRESSED ? 1 : 0; - type &= ~PK_COMPRESSED; - - if (type == PK_PUBLIC) { - if ((err = ltc_ecc_export_point(out, outlen, key->pubkey.x, key->pubkey.y, size, compressed)) != CRYPT_OK) { - return err; - } - } - else if (type == PK_PRIVATE) { - if (key->type != PK_PRIVATE) return CRYPT_PK_TYPE_MISMATCH; - if (size > *outlen) { - *outlen = size; - return CRYPT_BUFFER_OVERFLOW; - } - *outlen = size; - if ((ksize = ltc_mp_unsigned_bin_size(key->k)) > size) return CRYPT_BUFFER_OVERFLOW; - /* pad and store k */ - if ((err = ltc_mp_to_unsigned_bin(key->k, out + (size - ksize))) != CRYPT_OK) return err; - zeromem(out, size - ksize); - } - else { - return CRYPT_INVALID_ARG; - } - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/ecc/ecc_get_oid_str.c b/src/pk/ecc/ecc_get_oid_str.c deleted file mode 100644 index 756f641a..00000000 --- a/src/pk/ecc/ecc_get_oid_str.c +++ /dev/null @@ -1,22 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -/** Extract OID as a string from ECC key - @param out [out] destination buffer - @param outlen [in/out] Length of destination buffer and final output size (without terminating NUL byte) - @param key The ECC key - Return CRYPT_OK on success -*/ - -int ecc_get_oid_str(char *out, unsigned long *outlen, const ecc_key *key) -{ - LTC_ARGCHK(key != NULL); - - return pk_oid_num_to_str(key->dp.oid, key->dp.oidlen, out, outlen); -} - -#endif diff --git a/src/pk/ecc/ecc_get_size.c b/src/pk/ecc/ecc_get_size.c deleted file mode 100644 index e5633396..00000000 --- a/src/pk/ecc/ecc_get_size.c +++ /dev/null @@ -1,26 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ecc_get_size.c - ECC Crypto, Tom St Denis -*/ - -#ifdef LTC_MECC - -/** - Get the size of an ECC key - @param key The key to get the size of - @return The size (octets) of the key or INT_MAX on error -*/ -int ecc_get_size(const ecc_key *key) -{ - if (key == NULL) { - return INT_MAX; - } - return key->dp.size; -} - -#endif diff --git a/src/pk/ecc/ecc_import.c b/src/pk/ecc/ecc_import.c deleted file mode 100644 index 181fc9a9..00000000 --- a/src/pk/ecc/ecc_import.c +++ /dev/null @@ -1,100 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ecc_import.c - ECC Crypto, Tom St Denis -*/ - -#if defined(LTC_MECC) && defined(LTC_DER) - -/** - Import an ECC key from a binary packet - @param in The packet to import - @param inlen The length of the packet - @param key [out] The destination of the import - @return CRYPT_OK if successful, upon error all allocated memory will be freed -*/ -int ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key) -{ - return ecc_import_ex(in, inlen, key, NULL); -} - -/** - Import an ECC key from a binary packet, using user supplied domain params rather than one of the NIST ones - @param in The packet to import - @param inlen The length of the packet - @param key [out] The destination of the import - @param cu pointer to user supplied params; must be the same as the params used when exporting - @return CRYPT_OK if successful, upon error all allocated memory will be freed -*/ -int ecc_import_ex(const unsigned char *in, unsigned long inlen, ecc_key *key, const ltc_ecc_curve *cu) -{ - unsigned long key_size; - unsigned char flags[1]; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - /* find out what type of key it is */ - err = der_decode_sequence_multi(in, inlen, LTC_ASN1_BIT_STRING, 1UL, flags, - LTC_ASN1_SHORT_INTEGER, 1UL, &key_size, - LTC_ASN1_EOL, 0UL, NULL); - if (err != CRYPT_OK && err != CRYPT_INPUT_TOO_LONG) { - return err; - } - - /* allocate & initialize the key */ - if (cu == NULL) { - if ((err = ecc_set_curve_by_size(key_size, key)) != CRYPT_OK) { goto done; } - } else { - if ((err = ecc_set_curve(cu, key)) != CRYPT_OK) { goto done; } - } - - if (flags[0] == 1) { - /* private key */ - key->type = PK_PRIVATE; - if ((err = der_decode_sequence_multi(in, inlen, - LTC_ASN1_BIT_STRING, 1UL, flags, - LTC_ASN1_SHORT_INTEGER, 1UL, &key_size, - LTC_ASN1_INTEGER, 1UL, key->pubkey.x, - LTC_ASN1_INTEGER, 1UL, key->pubkey.y, - LTC_ASN1_INTEGER, 1UL, key->k, - LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { - goto done; - } - } else if (flags[0] == 0) { - /* public key */ - key->type = PK_PUBLIC; - if ((err = der_decode_sequence_multi(in, inlen, - LTC_ASN1_BIT_STRING, 1UL, flags, - LTC_ASN1_SHORT_INTEGER, 1UL, &key_size, - LTC_ASN1_INTEGER, 1UL, key->pubkey.x, - LTC_ASN1_INTEGER, 1UL, key->pubkey.y, - LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { - goto done; - } - } - else { - err = CRYPT_INVALID_PACKET; - goto done; - } - - /* set z */ - if ((err = ltc_mp_set(key->pubkey.z, 1)) != CRYPT_OK) { goto done; } - - /* point on the curve + other checks */ - if ((err = ltc_ecc_verify_key(key)) != CRYPT_OK) { goto done; } - - /* we're good */ - return CRYPT_OK; - -done: - ecc_free(key); - return err; -} -#endif diff --git a/src/pk/ecc/ecc_import_openssl.c b/src/pk/ecc/ecc_import_openssl.c deleted file mode 100644 index 7023b84f..00000000 --- a/src/pk/ecc/ecc_import_openssl.c +++ /dev/null @@ -1,142 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#if defined(LTC_MECC) && defined(LTC_DER) - -static int s_ecc_import_private_with_oid(const unsigned char *in, unsigned long inlen, ecc_key *key) -{ - ltc_asn1_list seq_priv[4], custom[2]; - unsigned char bin_xy[2*ECC_MAXSIZE+2], bin_k[ECC_MAXSIZE]; - unsigned long pkver = 0, curveoid[16]; - int err; - - /* ### try to load private key - no curve parameters just curve OID */ - - /* ECPrivateKey SEQUENCE */ - LTC_SET_ASN1(custom, 0, LTC_ASN1_OBJECT_IDENTIFIER, curveoid, 16UL); - LTC_SET_ASN1(custom, 1, LTC_ASN1_RAW_BIT_STRING, bin_xy, 8UL*sizeof(bin_xy)); - LTC_SET_ASN1(seq_priv, 0, LTC_ASN1_SHORT_INTEGER, &pkver, 1UL); - LTC_SET_ASN1(seq_priv, 1, LTC_ASN1_OCTET_STRING, bin_k, sizeof(bin_k)); - LTC_SET_ASN1_CUSTOM_CONSTRUCTED(seq_priv, 2, LTC_ASN1_CL_CONTEXT_SPECIFIC, 0, custom); /* context specific 0 */ - LTC_SET_ASN1_CUSTOM_CONSTRUCTED(seq_priv, 3, LTC_ASN1_CL_CONTEXT_SPECIFIC, 1, custom + 1); /* context specific 1 */ - - /* try to load private key */ - err = der_decode_sequence(in, inlen, seq_priv, 4); - if (err != CRYPT_OK) { goto error; } - err = ecc_import_with_oid(bin_k, seq_priv[1].size, curveoid, custom[0].size, PK_PRIVATE, key); -error: - return err; -} - -int ecc_import_with_oid(const unsigned char *in, unsigned long inlen, unsigned long *oid, unsigned long oid_len, int type, ecc_key *key) -{ - char OID[256]; - unsigned long len; - const ltc_ecc_curve *curve; - int err; - - /* load curve parameters for given curve OID */ - len = sizeof(OID); - if ((err = pk_oid_num_to_str(oid, oid_len, OID, &len)) != CRYPT_OK) { goto error; } - if ((err = ecc_find_curve(OID, &curve)) != CRYPT_OK) { goto error; } - if ((err = ecc_set_curve(curve, key)) != CRYPT_OK) { goto error; } - /* load public key */ - err = ecc_set_key(in, inlen, type, key); -error: - return err; -} - -int ecc_import_with_curve(const unsigned char *in, unsigned long inlen, int type, ecc_key *key) -{ - void *prime, *order, *a, *b, *gx, *gy; - ltc_asn1_list seq_fieldid[2], seq_curve[3], seq_ecparams[6], seq_priv[4], custom[2]; - unsigned char bin_a[ECC_MAXSIZE], bin_b[ECC_MAXSIZE], bin_k[ECC_MAXSIZE]; - unsigned char bin_g[2*ECC_MAXSIZE+1], bin_xy[2*ECC_MAXSIZE+2], bin_seed[128]; - unsigned long len_a, len_b, len_k, len_g, len_xy, len; - unsigned long cofactor = 0, ecver = 0, pkver = 0, tmpoid[16]; - int err; - - if ((err = ltc_mp_init_multi(&prime, &order, &a, &b, &gx, &gy, LTC_NULL)) != CRYPT_OK) { - return err; - } - - /* FieldID SEQUENCE */ - LTC_SET_ASN1(seq_fieldid, 0, LTC_ASN1_OBJECT_IDENTIFIER, tmpoid, 16UL); - LTC_SET_ASN1(seq_fieldid, 1, LTC_ASN1_INTEGER, prime, 1UL); - /* Curve SEQUENCE */ - LTC_SET_ASN1(seq_curve, 0, LTC_ASN1_OCTET_STRING, bin_a, sizeof(bin_a)); - LTC_SET_ASN1(seq_curve, 1, LTC_ASN1_OCTET_STRING, bin_b, sizeof(bin_b)); - LTC_SET_ASN1(seq_curve, 2, LTC_ASN1_RAW_BIT_STRING, bin_seed, 8UL*sizeof(bin_seed)); - seq_curve[2].optional = 1; - /* ECParameters SEQUENCE */ - LTC_SET_ASN1(seq_ecparams, 0, LTC_ASN1_SHORT_INTEGER, &ecver, 1UL); - LTC_SET_ASN1(seq_ecparams, 1, LTC_ASN1_SEQUENCE, seq_fieldid, 2UL); - LTC_SET_ASN1(seq_ecparams, 2, LTC_ASN1_SEQUENCE, seq_curve, 3UL); - LTC_SET_ASN1(seq_ecparams, 3, LTC_ASN1_OCTET_STRING, bin_g, sizeof(bin_g)); - LTC_SET_ASN1(seq_ecparams, 4, LTC_ASN1_INTEGER, order, 1UL); - LTC_SET_ASN1(seq_ecparams, 5, LTC_ASN1_SHORT_INTEGER, &cofactor, 1UL); - seq_ecparams[5].optional = 1; - if (type == PK_PRIVATE) { - /* ECPrivateKey SEQUENCE */ - LTC_SET_ASN1(custom, 0, LTC_ASN1_SEQUENCE, seq_ecparams, 6UL); - LTC_SET_ASN1(custom, 1, LTC_ASN1_RAW_BIT_STRING, bin_xy, 8UL*sizeof(bin_xy)); - LTC_SET_ASN1(seq_priv, 0, LTC_ASN1_SHORT_INTEGER, &pkver, 1UL); - LTC_SET_ASN1(seq_priv, 1, LTC_ASN1_OCTET_STRING, bin_k, sizeof(bin_k)); - LTC_SET_ASN1_CUSTOM_CONSTRUCTED(seq_priv, 2, LTC_ASN1_CL_CONTEXT_SPECIFIC, 0, custom); /* context specific 0 */ - LTC_SET_ASN1_CUSTOM_CONSTRUCTED(seq_priv, 3, LTC_ASN1_CL_CONTEXT_SPECIFIC, 1, custom + 1); /* context specific 1 */ - /* try to load private key */ - err = der_decode_sequence(in, inlen, seq_priv, 4); - } else if (type == PK_PUBLIC) { - /* try to load public key */ - len_xy = sizeof(bin_xy); - len = 6; - err = x509_decode_subject_public_key_info(in, inlen, LTC_OID_EC, bin_xy, &len_xy, LTC_ASN1_SEQUENCE, seq_ecparams, &len); - } else { - err = CRYPT_PK_INVALID_TYPE; - } - if (err == CRYPT_OK) { - len_a = seq_curve[0].size; - len_b = seq_curve[1].size; - len_g = seq_ecparams[3].size; - /* create bignums */ - if ((err = ltc_mp_read_unsigned_bin(a, bin_a, len_a)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_read_unsigned_bin(b, bin_b, len_b)) != CRYPT_OK) { goto error; } - if ((err = ltc_ecc_import_point(bin_g, len_g, prime, a, b, gx, gy)) != CRYPT_OK) { goto error; } - /* load curve parameters */ - if ((err = ecc_set_curve_from_mpis(a, b, prime, order, gx, gy, cofactor, key)) != CRYPT_OK) { goto error; } - - if (type == PK_PRIVATE) { - len_k = seq_priv[1].size; - /* load private+public key */ - err = ecc_set_key(bin_k, len_k, PK_PRIVATE, key); - } else { - /* load public key */ - err = ecc_set_key(bin_xy, len_xy, PK_PUBLIC, key); - } - } -error: - ltc_mp_deinit_multi(prime, order, a, b, gx, gy, LTC_NULL); - return err; -} - -int ecc_import_openssl(const unsigned char *in, unsigned long inlen, ecc_key *key) -{ - int err; - - if ((err = ecc_import_subject_public_key_info(in, inlen, key)) == CRYPT_OK) { - goto success; - } - - if ((err = s_ecc_import_private_with_oid(in, inlen, key)) == CRYPT_OK) { - goto success; - } - - err = ecc_import_with_curve(in, inlen, PK_PRIVATE, key); - -success: - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_import_pkcs8.c b/src/pk/ecc/ecc_import_pkcs8.c deleted file mode 100644 index ad32fa07..00000000 --- a/src/pk/ecc/ecc_import_pkcs8.c +++ /dev/null @@ -1,167 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#if defined(LTC_MECC) && defined(LTC_DER) - -int ecc_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, ecc_key *key) -{ - void *a, *b, *gx, *gy; - unsigned long len, cofactor, n; - int err; - char OID[256]; - const ltc_ecc_curve *curve; - ltc_asn1_list *p = NULL; - der_flexi_check case2_should[7]; - ltc_asn1_list *version, *field, *point, *point_g, *order, *p_cofactor; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - /* init key */ - err = ltc_mp_init_multi(&a, &b, &gx, &gy, LTC_NULL); - if (err != CRYPT_OK) goto LBL_DER_FREE; - - /* Setup for CASE 2 */ - n=0; - LTC_SET_DER_FLEXI_CHECK(case2_should, n++, LTC_ASN1_INTEGER, &version); - LTC_SET_DER_FLEXI_CHECK(case2_should, n++, LTC_ASN1_SEQUENCE, &field); - LTC_SET_DER_FLEXI_CHECK(case2_should, n++, LTC_ASN1_SEQUENCE, &point); - LTC_SET_DER_FLEXI_CHECK(case2_should, n++, LTC_ASN1_OCTET_STRING, &point_g); - LTC_SET_DER_FLEXI_CHECK(case2_should, n++, LTC_ASN1_INTEGER, &order); - LTC_SET_DER_FLEXI_CHECK(case2_should, n++, LTC_ASN1_INTEGER, &p_cofactor); - LTC_SET_DER_FLEXI_CHECK(case2_should, n, LTC_ASN1_EOL, NULL); - - if (LTC_ASN1_IS_TYPE(alg_id->child->next, LTC_ASN1_OBJECT_IDENTIFIER)) { - /* CASE 1: curve by OID (AKA short variant): - * 0:d=0 hl=2 l= 100 cons: SEQUENCE - * 2:d=1 hl=2 l= 1 prim: INTEGER :00 - * 5:d=1 hl=2 l= 16 cons: SEQUENCE (== *seq) - * 7:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey - * 16:d=2 hl=2 l= 5 prim: OBJECT :(== *curve_oid (e.g. secp256k1 (== 1.3.132.0.10))) - * 23:d=1 hl=2 l= 77 prim: OCTET STRING :bytes (== *priv_key) - */ - ltc_asn1_list *curve_oid = alg_id->child->next; - len = sizeof(OID); - if ((err = pk_oid_num_to_str(curve_oid->data, curve_oid->size, OID, &len)) != CRYPT_OK) { goto LBL_DONE; } - if ((err = ecc_find_curve(OID, &curve)) != CRYPT_OK) { goto LBL_DONE; } - if ((err = ecc_set_curve(curve, key)) != CRYPT_OK) { goto LBL_DONE; } - } else if (der_flexi_sequence_cmp(alg_id->child->next, case2_should) == CRYPT_OK) { - - /* CASE 2: explicit curve parameters (AKA long variant): - * 0:d=0 hl=3 l= 227 cons: SEQUENCE - * 3:d=1 hl=2 l= 1 prim: INTEGER :00 - * 6:d=1 hl=3 l= 142 cons: SEQUENCE (== *seq) - * 9:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey - * 18:d=2 hl=3 l= 130 cons: SEQUENCE - * 21:d=3 hl=2 l= 1 prim: INTEGER :01 - * 24:d=3 hl=2 l= 44 cons: SEQUENCE (== *field) - * 26:d=4 hl=2 l= 7 prim: OBJECT :prime-field - * 35:d=4 hl=2 l= 33 prim: INTEGER :(== *prime / curve.prime) - * 70:d=3 hl=2 l= 6 cons: SEQUENCE (== *point) - * 72:d=4 hl=2 l= 1 prim: OCTET STRING :bytes (== curve.A) - * 75:d=4 hl=2 l= 1 prim: OCTET STRING :bytes (== curve.B) - * 78:d=3 hl=2 l= 33 prim: OCTET STRING :bytes (== *g_point / curve.G-point) - * 113:d=3 hl=2 l= 33 prim: INTEGER :(== *order / curve.order) - * 148:d=3 hl=2 l= 1 prim: INTEGER :(== curve.cofactor) - * 151:d=1 hl=2 l= 77 prim: OCTET STRING :bytes (== *priv_key) - */ - - if (ltc_mp_cmp_d(version->data, 1) != LTC_MP_EQ) { - goto LBL_DONE; - } - cofactor = ltc_mp_get_int(p_cofactor->data); - - if (LTC_ASN1_IS_TYPE(field->child, LTC_ASN1_OBJECT_IDENTIFIER) && - LTC_ASN1_IS_TYPE(field->child->next, LTC_ASN1_INTEGER) && - LTC_ASN1_IS_TYPE(point->child, LTC_ASN1_OCTET_STRING) && - LTC_ASN1_IS_TYPE(point->child->next, LTC_ASN1_OCTET_STRING)) { - - ltc_asn1_list *prime = field->child->next; - if ((err = ltc_mp_read_unsigned_bin(a, point->child->data, point->child->size)) != CRYPT_OK) { - goto LBL_DONE; - } - if ((err = ltc_mp_read_unsigned_bin(b, point->child->next->data, point->child->next->size)) != CRYPT_OK) { - goto LBL_DONE; - } - if ((err = ltc_ecc_import_point(point_g->data, point_g->size, prime->data, a, b, gx, gy)) != CRYPT_OK) { - goto LBL_DONE; - } - if ((err = ecc_set_curve_from_mpis(a, b, prime->data, order->data, gx, gy, cofactor, key)) != CRYPT_OK) { - goto LBL_DONE; - } - } - } else { - err = CRYPT_INVALID_PACKET; - goto LBL_DONE; - } - - /* load private key value 'k' */ - len = priv_key->size; - if (der_decode_sequence_flexi(priv_key->data, &len, &p) == CRYPT_OK) { - if (p->type == LTC_ASN1_SEQUENCE && - LTC_ASN1_IS_TYPE(p->child, LTC_ASN1_INTEGER) && - LTC_ASN1_IS_TYPE(p->child->next, LTC_ASN1_OCTET_STRING)) { - ltc_asn1_list *lk = p->child->next; - if (ltc_mp_cmp_d(p->child->data, 1) != LTC_MP_EQ) { - err = CRYPT_INVALID_PACKET; - goto LBL_ECCFREE; - } - if ((err = ecc_set_key(lk->data, lk->size, PK_PRIVATE, key)) != CRYPT_OK) { - goto LBL_ECCFREE; - } - goto LBL_DONE; /* success */ - } - } - err = CRYPT_INVALID_PACKET; - goto LBL_DONE; - -LBL_ECCFREE: - ecc_free(key); -LBL_DONE: - ltc_mp_deinit_multi(a, b, gx, gy, LTC_NULL); -LBL_DER_FREE: - if (p) der_free_sequence_flexi(p); - return err; -} - -/** - Import an ECC private from in PKCS#8 format - @param in The packet to import from - @param inlen It's length (octets) - @param pw_ctx The password context when decrypting the private key - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful, upon error allocated memory is freed -*/ -int ecc_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - ecc_key *key) -{ - int err; - ltc_asn1_list *l = NULL; - ltc_asn1_list *alg_id = NULL, *priv_key = NULL; - enum ltc_oid_id pka; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - err = pkcs8_decode_flexi(in, inlen, pw_ctx, &l); - if (err != CRYPT_OK) return err; - - if ((err = pkcs8_get_children(l, &pka, &alg_id, &priv_key)) != CRYPT_OK) { - goto LBL_DER_FREE; - } - if (pka != LTC_OID_EC) { - err = CRYPT_INVALID_PACKET; - goto LBL_DER_FREE; - } - - err = ecc_import_pkcs8_asn1(alg_id, priv_key, key); - -LBL_DER_FREE: - der_free_sequence_flexi(l); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_import_x509.c b/src/pk/ecc/ecc_import_x509.c deleted file mode 100644 index 2b4ea77a..00000000 --- a/src/pk/ecc/ecc_import_x509.c +++ /dev/null @@ -1,54 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#if defined(LTC_MECC) && defined(LTC_DER) - -static int s_ecc_import_x509_with_oid(const unsigned char *in, unsigned long inlen, ecc_key *key) -{ - unsigned char bin_xy[2*ECC_MAXSIZE+2]; - unsigned long curveoid[16]; - unsigned long len_xy, len_oid; - int err; - - len_xy = sizeof(bin_xy); - len_oid = 16; - err = x509_decode_subject_public_key_info(in, inlen, LTC_OID_EC, bin_xy, &len_xy, - LTC_ASN1_OBJECT_IDENTIFIER, (void *)curveoid, &len_oid); - if (err != CRYPT_OK) { goto error; } - err = ecc_import_with_oid(bin_xy, len_xy, curveoid, len_oid, PK_PUBLIC, key); -error: - return err; -} - -int ecc_import_subject_public_key_info(const unsigned char *in, unsigned long inlen, ecc_key *key) -{ - int err; - - if ((err = s_ecc_import_x509_with_oid(in, inlen, key)) == CRYPT_OK) { - goto success; - } - - err = ecc_import_with_curve(in, inlen, PK_PUBLIC, key); - -success: - return err; -} - -/** - Import an ECC key from a X.509 certificate - @param in The packet to import from - @param inlen It's length (octets) - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful, upon error allocated memory is freed -*/ -int ecc_import_x509(const unsigned char *in, unsigned long inlen, ecc_key *key) -{ - return x509_decode_public_key_from_certificate(in, inlen, - LTC_OID_EC, - LTC_ASN1_EOL, NULL, NULL, - (public_key_decode_cb)ecc_import_subject_public_key_info, key); -} - -#endif /* LTC_MECC */ - diff --git a/src/pk/ecc/ecc_make_key.c b/src/pk/ecc/ecc_make_key.c deleted file mode 100644 index 1b047417..00000000 --- a/src/pk/ecc/ecc_make_key.c +++ /dev/null @@ -1,73 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ecc_make_key.c - ECC Crypto, Tom St Denis -*/ - -#ifdef LTC_MECC - -/** - Make a new ECC key - @param prng An active PRNG state - @param wprng The index of the PRNG you wish to use - @param keysize The keysize for the new key (in octets from 20 to 65 bytes) - @param key [out] Destination of the newly created key - @return CRYPT_OK if successful, upon error all allocated memory will be freed -*/ -int ecc_make_key(prng_state *prng, int wprng, int keysize, ecc_key *key) -{ - int err; - - if ((err = ecc_set_curve_by_size(keysize, key)) != CRYPT_OK) { return err; } - if ((err = ecc_generate_key(prng, wprng, key)) != CRYPT_OK) { return err; } - return CRYPT_OK; -} - -int ecc_make_key_ex(prng_state *prng, int wprng, ecc_key *key, const ltc_ecc_curve *cu) -{ - int err; - if ((err = ecc_set_curve(cu, key)) != CRYPT_OK) { return err; } - if ((err = ecc_generate_key(prng, wprng, key)) != CRYPT_OK) { return err; } - return CRYPT_OK; -} - -int ecc_generate_key(prng_state *prng, int wprng, ecc_key *key) -{ - int err; - - LTC_ARGCHK(ltc_mp.name != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(key->dp.size > 0); - - /* ECC key pair generation according to FIPS-186-4 (B.4.2 Key Pair Generation by Testing Candidates): - * the generated private key k should be the range [1, order-1] - * a/ N = bitlen(order) - * b/ generate N random bits and convert them into big integer k - * c/ if k not in [1, order-1] go to b/ - * e/ Q = k*G - */ - if ((err = rand_bn_upto(key->k, key->dp.order, prng, wprng)) != CRYPT_OK) { - goto error; - } - - /* make the public key */ - if ((err = ltc_mp.ecc_ptmul(key->k, &key->dp.base, &key->pubkey, key->dp.A, key->dp.prime, 1)) != CRYPT_OK) { - goto error; - } - key->type = PK_PRIVATE; - - /* success */ - err = CRYPT_OK; - goto cleanup; - -error: - ecc_free(key); -cleanup: - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_recover_key.c b/src/pk/ecc/ecc_recover_key.c deleted file mode 100644 index 7d1e01e4..00000000 --- a/src/pk/ecc/ecc_recover_key.c +++ /dev/null @@ -1,261 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#if defined(LTC_MECC) && defined(LTC_ECC_SHAMIR) - -/** - @file ecc_recover_key.c - ECC Crypto, Russ Williams -*/ - -/** - Recover ECC public key from signature and hash - @param sig The signature to verify - @param siglen The length of the signature (octets) - @param hash The hash (message digest) that was signed - @param hashlen The length of the hash (octets) - @param recid The recovery ID ("v"), can be -1 if signature contains it - @param sigformat The format of the signature (ecc_signature_type) - @param key The recovered public ECC key - @return CRYPT_OK if successful (even if the signature is not valid) -*/ -int ecc_recover_key(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - ltc_ecc_sig_opts *opts, ecc_key *key) -{ - ecc_point *mG = NULL, *mQ = NULL, *mR = NULL; - void *p, *m, *a, *b; - void *r, *s, *v, *w, *t1, *t2, *u1, *u2, *v1, *v2, *e, *x, *y, *a_plus3; - void *mu = NULL, *ma = NULL; - void *mp = NULL; - int err, recid; - unsigned long pbits, pbytes, i, shift_right; - unsigned char ch, buf[MAXBLOCKSIZE]; - - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(hash != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(opts != NULL); - - /* BEWARE: requires sqrtmod_prime */ - if (ltc_mp.sqrtmod_prime == NULL) { - return CRYPT_ERROR; - } - - /* allocate ints */ - if ((err = ltc_mp_init_multi(&r, &s, &v, &w, &t1, &t2, &u1, &u2, &v1, &v2, &e, &x, &y, &a_plus3, LTC_NULL)) != CRYPT_OK) { - return err; - } - - p = key->dp.order; - m = key->dp.prime; - a = key->dp.A; - b = key->dp.B; - if ((err = ltc_mp_add_d(a, 3, a_plus3)) != CRYPT_OK) { - goto error; - } - - /* allocate points */ - mG = ltc_ecc_new_point(); - mQ = ltc_ecc_new_point(); - mR = ltc_ecc_new_point(); - if (mR == NULL || mQ == NULL || mG == NULL) { - err = CRYPT_MEM; - goto error; - } - recid = (opts->enable_recovery_id) ? opts->recovery_id : -1; - - if (opts->type == LTC_ECCSIG_RFC7518) { - /* RFC7518 format - raw (r,s) */ - i = ltc_mp_unsigned_bin_size(key->dp.order); - if (siglen != (2*i)) { - err = CRYPT_INVALID_PACKET; - goto error; - } - if ((err = ltc_mp_read_unsigned_bin(r, sig, i)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_read_unsigned_bin(s, sig+i, i)) != CRYPT_OK) { goto error; } - } - else if (opts->type == LTC_ECCSIG_ETH27) { - /* Ethereum (v,r,s) format */ - if (pk_oid_cmp_with_ulong("1.3.132.0.10", key->dp.oid, key->dp.oidlen) != CRYPT_OK) { - /* Only valid for secp256k1 - OID 1.3.132.0.10 */ - err = CRYPT_ERROR; goto error; - } - if (siglen != 65) { /* Only secp256k1 curves use this format, so must be 65 bytes long */ - err = CRYPT_INVALID_PACKET; - goto error; - } - i = (unsigned long)sig[64]; - if ((i>=27) && (i<31)) i -= 27; /* Ethereum adds 27 to recovery ID */ - if (recid >= 0 && ((unsigned long)recid != i)) { - /* Recovery ID specified, but doesn't match signature */ - err = CRYPT_INVALID_PACKET; - goto error; - } - recid = i; - if ((err = ltc_mp_read_unsigned_bin(r, sig, 32)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_read_unsigned_bin(s, sig+32, 32)) != CRYPT_OK) { goto error; } - } -#ifdef LTC_DER - else if (opts->type == LTC_ECCSIG_ANSIX962) { - /* ANSI X9.62 format - ASN.1 encoded SEQUENCE{ INTEGER(r), INTEGER(s) } */ - if ((err = der_decode_sequence_multi_ex(sig, siglen, LTC_DER_SEQ_SEQUENCE | LTC_DER_SEQ_STRICT, - LTC_ASN1_INTEGER, 1UL, r, - LTC_ASN1_INTEGER, 1UL, s, - LTC_ASN1_EOL, 0UL, LTC_NULL)) != CRYPT_OK) { goto error; } - } -#endif -#ifdef LTC_SSH - else if (opts->type == LTC_ECCSIG_RFC5656) { - char name[64], name2[64]; - unsigned long namelen = sizeof(name); - unsigned long name2len = sizeof(name2); - - /* Decode as SSH data sequence, per RFC4251 */ - if ((err = ssh_decode_sequence_multi(sig, &siglen, - LTC_SSHDATA_STRING, name, &namelen, - LTC_SSHDATA_MPINT, r, - LTC_SSHDATA_MPINT, s, - LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) { goto error; } - - - /* Check curve matches identifier string */ - if ((err = ecc_ssh_ecdsa_encode_name(name2, &name2len, key)) != CRYPT_OK) { goto error; } - if ((namelen != name2len) || (XSTRCMP(name, name2) != 0)) { - err = CRYPT_INVALID_ARG; - goto error; - } - } -#endif - else { - /* Unknown signature format */ - err = CRYPT_ERROR; - goto error; - } - - if (recid < 0 || (unsigned long)recid >= 2*(key->dp.cofactor+1)) { - /* Recovery ID is out of range, reject it */ - err = CRYPT_INVALID_ARG; - goto error; - } - - /* check for zero */ - if (ltc_mp_cmp_d(r, 0) != LTC_MP_GT || ltc_mp_cmp_d(s, 0) != LTC_MP_GT || - ltc_mp_cmp(r, p) != LTC_MP_LT || ltc_mp_cmp(s, p) != LTC_MP_LT) { - err = CRYPT_INVALID_PACKET; - goto error; - } - - /* read hash - truncate if needed */ - pbits = ltc_mp_count_bits(p); - pbytes = (pbits+7) >> 3; - if (pbits > hashlen*8) { - if ((err = ltc_mp_read_unsigned_bin(e, hash, hashlen)) != CRYPT_OK) { goto error; } - } - else if (pbits % 8 == 0) { - if ((err = ltc_mp_read_unsigned_bin(e, hash, pbytes)) != CRYPT_OK) { goto error; } - } - else { - shift_right = 8 - pbits % 8; - for (i=0, ch=0; i> shift_right); - } - if ((err = ltc_mp_read_unsigned_bin(e, buf, pbytes)) != CRYPT_OK) { goto error; } - } - - /* decompress point from r=(x mod p) - BEWARE: requires sqrtmod_prime */ - /* x = r + p*(recid/2) */ - if ((err = ltc_mp_set(x, recid/2)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_mulmod(p, x, m, x)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_add(x, r, x)) != CRYPT_OK) { goto error; } - /* compute x^3 */ - if ((err = ltc_mp_sqr(x, t1)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_mulmod(t1, x, m, t1)) != CRYPT_OK) { goto error; } - /* compute x^3 + a*x */ - if ((err = ltc_mp_mulmod(a, x, m, t2)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_add(t1, t2, t1)) != CRYPT_OK) { goto error; } - /* compute x^3 + a*x + b */ - if ((err = ltc_mp_add(t1, b, t1)) != CRYPT_OK) { goto error; } - /* compute sqrt(x^3 + a*x + b) */ - if ((err = ltc_mp_sqrtmod_prime(t1, m, t2)) != CRYPT_OK) { goto error; } - - /* fill in mR */ - if ((err = ltc_mp_copy(x, mR->x)) != CRYPT_OK) { goto error; } - if ((ltc_mp_isodd(t2) && (recid%2)) || (!ltc_mp_isodd(t2) && !(recid%2))) { - if ((err = ltc_mp_mod(t2, m, mR->y)) != CRYPT_OK) { goto error; } - } - else { - if ((err = ltc_mp_submod(m, t2, m, mR->y)) != CRYPT_OK) { goto error; } - } - if ((err = ltc_mp_set(mR->z, 1)) != CRYPT_OK) { goto error; } - - /* w = r^-1 mod n */ - if ((err = ltc_mp_invmod(r, p, w)) != CRYPT_OK) { goto error; } - /* v1 = sw */ - if ((err = ltc_mp_mulmod(s, w, p, v1)) != CRYPT_OK) { goto error; } - /* v2 = -ew */ - if ((err = ltc_mp_mulmod(e, w, p, v2)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_submod(p, v2, p, v2)) != CRYPT_OK) { goto error; } - - /* w = s^-1 mod n */ - if ((err = ltc_mp_invmod(s, p, w)) != CRYPT_OK) { goto error; } - /* u1 = ew */ - if ((err = ltc_mp_mulmod(e, w, p, u1)) != CRYPT_OK) { goto error; } - /* u2 = rw */ - if ((err = ltc_mp_mulmod(r, w, p, u2)) != CRYPT_OK) { goto error; } - - /* find mG */ - if ((err = ltc_ecc_copy_point(&key->dp.base, mG)) != CRYPT_OK) { goto error; } - - /* find the montgomery mp */ - if ((err = ltc_mp_montgomery_setup(m, &mp)) != CRYPT_OK) { goto error; } - - /* for curves with a == -3 keep ma == NULL */ - if (ltc_mp_cmp(a_plus3, m) != LTC_MP_EQ) { - if ((err = ltc_mp_init_multi(&mu, &ma, LTC_NULL)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_montgomery_normalization(mu, m)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_mulmod(a, mu, m, ma)) != CRYPT_OK) { goto error; } - } - - /* recover mQ from mR */ - /* compute v1*mR + v2*mG = mQ using Shamir's trick */ - if ((err = ltc_mp.ecc_mul2add(mR, v1, mG, v2, mQ, ma, m)) != CRYPT_OK) { goto error; } - - /* compute u1*mG + u2*mQ = mG using Shamir's trick */ - if ((err = ltc_mp.ecc_mul2add(mG, u1, mQ, u2, mG, ma, m)) != CRYPT_OK) { goto error; } - - /* v = X_x1 mod n */ - if ((err = ltc_mp_mod(mG->x, p, v)) != CRYPT_OK) { goto error; } - - /* does v == r */ - if (ltc_mp_cmp(v, r) == LTC_MP_EQ) { - /* found public key which verifies signature */ - if ((err = ltc_ecc_copy_point(mQ, &key->pubkey)) != CRYPT_OK) { goto error; } - /* point on the curve + other checks */ - if ((err = ltc_ecc_verify_key(key)) != CRYPT_OK) { goto error; } - - key->type = PK_PUBLIC; - - err = CRYPT_OK; - } - else { - /* not found - recid is wrong or we're unable to calculate public key for some other reason */ - err = CRYPT_INVALID_ARG; - } - -error: - if (ma != NULL) ltc_mp_clear(ma); - if (mu != NULL) ltc_mp_clear(mu); - if (mp != NULL) ltc_mp_montgomery_free(mp); - if (mR != NULL) ltc_ecc_del_point(mR); - if (mQ != NULL) ltc_ecc_del_point(mQ); - if (mG != NULL) ltc_ecc_del_point(mG); - ltc_mp_deinit_multi(a_plus3, y, x, e, v2, v1, u2, u1, t2, t1, w, v, s, r, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_rfc6979_key.c b/src/pk/ecc/ecc_rfc6979_key.c deleted file mode 100644 index 1f313bd3..00000000 --- a/src/pk/ecc/ecc_rfc6979_key.c +++ /dev/null @@ -1,162 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ecc_rfc6979_key.c - ECC Crypto, Russ Williams -*/ - -#ifdef LTC_MECC -#ifdef LTC_SHA256 - -/** - Make deterministic ECC key using the RFC6979 method - @param priv [in] Private key for HMAC - @param in Message to sign for HMAC - @param inlen Length of the message - @param key [out] Newly created deterministic key - @return CRYPT_OK if successful, upon error all allocated memory will be freed -*/ -int ecc_rfc6979_key(const ecc_key *priv, const unsigned char *in, unsigned long inlen, const char *rfc6979_hash_alg, ecc_key *key) -{ - int err, hash = -1; - unsigned char v[MAXBLOCKSIZE], k[MAXBLOCKSIZE]; - unsigned char buffer[256], sep[1], privkey[128]; - unsigned long order_bits, len_diff, pk_len, zero_extend, outlen, klen, vlen, buflen, qlen, hashsize; - void *r, *d; - - LTC_ARGCHK(ltc_mp.name != NULL); - LTC_ARGCHK(priv != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(key->dp.size > 0); - - if (rfc6979_hash_alg == NULL) { - return CRYPT_INVALID_ARG; - } - hash = find_hash(rfc6979_hash_alg); - if ((err = hash_is_valid(hash)) != CRYPT_OK) { - return err; - } - - hashsize = hash_descriptor[hash].hashsize; - - if ((err = ltc_mp_init_multi(&r, &d, NULL)) != CRYPT_OK) { - return err; - } - - /* Length, in bytes, of key */ - order_bits = ltc_mp_count_bits(key->dp.order); - qlen = (order_bits+7) >> 3; - len_diff = qlen > inlen ? qlen - inlen : 0; - pk_len = (ltc_mp_count_bits(priv->k)+7) >> 3; - zero_extend = qlen - pk_len; - XMEMSET(buffer, 0x00, len_diff + zero_extend); - - /* RFC6979 3.2b, set V */ - XMEMSET(v, 0x01, hashsize); - - /* RFC6979 3.2c, set K */ - XMEMSET(k, 0x00, hashsize); - - if ((err = ltc_mp_to_unsigned_bin(priv->k, privkey) != CRYPT_OK)) { goto error; } - /* RFC6979 3.2d, set K to HMAC_K(V::0x00::priv::in) */ - sep[0] = 0; - klen = sizeof(k); - if((err = hmac_memory_multi(hash, - k, hashsize, - k, &klen, - v, hashsize, - sep, 1uL, - buffer, zero_extend, - privkey, qlen - zero_extend, - buffer, len_diff, - in, qlen - len_diff, - LTC_NULL)) != CRYPT_OK) { goto error; } - - /* RFC6979 3.2e, set V = HMAC_K(V) */ - vlen = sizeof(v); - if((err = hmac_memory(hash, k, klen, v, hashsize, v, &vlen)) != CRYPT_OK) { goto error; } - - /* RFC6979 3.2f, set K to HMAC_K(V::0x01::priv::in) */ - sep[0] = 0x01; - outlen = sizeof(k); - if((err = hmac_memory_multi(hash, - k, klen, - k, &klen, - v, hashsize, - sep, 1uL, - buffer, zero_extend, - privkey, qlen - zero_extend, - buffer, len_diff, - in, qlen - len_diff, - LTC_NULL)) != CRYPT_OK) { goto error; } - - /* RFC6979 3.2g, set V = HMAC_K(V) */ - outlen = sizeof(v); - if((err = hmac_memory(hash, k, klen, v, hashsize, v, &outlen)) != CRYPT_OK) { goto error; } - - /* RFC6979 3.2h, generate and check key */ - do { - /* concatenate hash bits into T */ - buflen = 0; - while (buflen < qlen) { - if (buflen + hashsize >= sizeof(buffer) || buflen + hashsize < buflen) { - err = CRYPT_BUFFER_OVERFLOW; - goto error; - } - outlen = sizeof(v); - if((err = hmac_memory(hash, k, klen, v, hashsize, v, &outlen)) != CRYPT_OK) { goto error; } - XMEMCPY(&buffer[buflen], v, hashsize); - buflen += hashsize; - } - - /* key->k = bits2int(T) */ - if ((err = ltc_mp_read_unsigned_bin(r, buffer, qlen)) != CRYPT_OK) { goto error; } - if ((qlen * 8) > order_bits) { - if ((err = ltc_mp_2expt(d, (qlen * 8) - order_bits)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_div(r, d, r, NULL)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_to_unsigned_bin(r, buffer)) != CRYPT_OK) { goto error; } - qlen = ltc_mp_unsigned_bin_size(r); - } - - if ((err = ecc_set_key(buffer, qlen, PK_PRIVATE, key))!= CRYPT_OK) { goto error; } - - /* check that k is in range [1,q-1] */ - if (ltc_mp_cmp_d(key->k, 0) == LTC_MP_GT && ltc_mp_cmp(key->k, key->dp.order) == LTC_MP_LT) { - /* Check that pubkey.x != 0 (mod p) */ - if ((err = ltc_mp_mod(key->pubkey.x, key->dp.order, r)) != CRYPT_OK) { goto error; } - - /* if we have a valid key, exit loop */ - if (ltc_mp_iszero(r) == LTC_MP_NO) - break; - } else { - /* K = HMAC_K(V::0x00) */ - buffer[0] = 0x0; - outlen = sizeof(k); - if((err = hmac_memory_multi(hash, k, klen, k, &klen, v, hashsize, buffer, 1, LTC_NULL)) != CRYPT_OK) { goto error; } - - /* V = HMAC_K(V) */ - outlen = sizeof(v); - if((err = hmac_memory(hash, k, klen, v, hashsize, v, &outlen)) != CRYPT_OK) { goto error; } - - /* ... and try again! */ - } - } while (1); - - key->type = PK_PRIVATE; - - /* success */ - err = CRYPT_OK; - goto cleanup; - -error: - ecc_free(key); -cleanup: - ltc_mp_cleanup_multi(&d, &r, NULL); - return err; -} - -#endif -#endif diff --git a/src/pk/ecc/ecc_set_curve.c b/src/pk/ecc/ecc_set_curve.c deleted file mode 100644 index 7947c6eb..00000000 --- a/src/pk/ecc/ecc_set_curve.c +++ /dev/null @@ -1,80 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -int ecc_set_curve(const ltc_ecc_curve *cu, ecc_key *key) -{ - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(cu != NULL); - - if ((err = ltc_mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B, - &key->dp.base.x, &key->dp.base.y, &key->dp.base.z, - &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, - NULL)) != CRYPT_OK) { - return err; - } - - /* A, B, order, prime, Gx, Gy */ - if ((err = ltc_mp_read_radix(key->dp.prime, cu->prime, 16)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_read_radix(key->dp.order, cu->order, 16)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_read_radix(key->dp.A, cu->A, 16)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_read_radix(key->dp.B, cu->B, 16)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_read_radix(key->dp.base.x, cu->Gx, 16)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_read_radix(key->dp.base.y, cu->Gy, 16)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_set(key->dp.base.z, 1)) != CRYPT_OK) { goto error; } - /* cofactor & size */ - key->dp.cofactor = cu->cofactor; - key->dp.size = ltc_mp_unsigned_bin_size(key->dp.prime); - /* OID string >> unsigned long oid[16] + oidlen */ - key->dp.oidlen = 16; - if ((err = pk_oid_str_to_num(cu->OID, key->dp.oid, &key->dp.oidlen)) != CRYPT_OK) { goto error; } - /* success */ - return CRYPT_OK; - -error: - ecc_free(key); - return err; -} - -int ecc_set_curve_by_size(int size, ecc_key *key) -{ - const ltc_ecc_curve *cu = NULL; - int err = CRYPT_ERROR; - - /* for compatibility with libtomcrypt-1.17 the sizes below must match the specific curves */ - if (size <= 14) { - err = ecc_find_curve("SECP112R1", &cu); - } - else if (size <= 16) { - err = ecc_find_curve("SECP128R1", &cu); - } - else if (size <= 20) { - err = ecc_find_curve("SECP160R1", &cu); - } - else if (size <= 24) { - err = ecc_find_curve("SECP192R1", &cu); - } - else if (size <= 28) { - err = ecc_find_curve("SECP224R1", &cu); - } - else if (size <= 32) { - err = ecc_find_curve("SECP256R1", &cu); - } - else if (size <= 48) { - err = ecc_find_curve("SECP384R1", &cu); - } - else if (size <= 66) { - err = ecc_find_curve("SECP521R1", &cu); - } - - if (err == CRYPT_OK && cu != NULL) return ecc_set_curve(cu, key); - - return CRYPT_INVALID_ARG; -} - -#endif diff --git a/src/pk/ecc/ecc_set_curve_internal.c b/src/pk/ecc/ecc_set_curve_internal.c deleted file mode 100644 index e1538607..00000000 --- a/src/pk/ecc/ecc_set_curve_internal.c +++ /dev/null @@ -1,119 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -static int s_ecc_cmp_hex_bn(const char *left_hex, void *right_bn, void *tmp_bn) -{ - if (ltc_mp_read_radix(tmp_bn, left_hex, 16) != CRYPT_OK) return 0; - if (ltc_mp_cmp(tmp_bn, right_bn) != LTC_MP_EQ) return 0; - return 1; -} - -static void s_ecc_oid_lookup(ecc_key *key) -{ - void *bn; - const ltc_ecc_curve *curve; - - key->dp.oidlen = 0; - if (ltc_mp_init(&bn) != CRYPT_OK) return; - for (curve = ltc_ecc_curves; curve->prime != NULL; curve++) { - if (s_ecc_cmp_hex_bn(curve->prime, key->dp.prime, bn) != 1) continue; - if (s_ecc_cmp_hex_bn(curve->order, key->dp.order, bn) != 1) continue; - if (s_ecc_cmp_hex_bn(curve->A, key->dp.A, bn) != 1) continue; - if (s_ecc_cmp_hex_bn(curve->B, key->dp.B, bn) != 1) continue; - if (s_ecc_cmp_hex_bn(curve->Gx, key->dp.base.x, bn) != 1) continue; - if (s_ecc_cmp_hex_bn(curve->Gy, key->dp.base.y, bn) != 1) continue; - if (key->dp.cofactor != curve->cofactor) continue; - break; /* found */ - } - ltc_mp_clear(bn); - if (curve->prime && curve->OID) { - key->dp.oidlen = 16; /* size of key->dp.oid */ - pk_oid_str_to_num(curve->OID, key->dp.oid, &key->dp.oidlen); - } -} - -int ecc_copy_curve(const ecc_key *srckey, ecc_key *key) -{ - unsigned long i; - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(srckey != NULL); - - if ((err = ltc_mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B, - &key->dp.base.x, &key->dp.base.y, &key->dp.base.z, - &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, - NULL)) != CRYPT_OK) { - return err; - } - - /* A, B, order, prime, Gx, Gy */ - if ((err = ltc_mp_copy(srckey->dp.prime, key->dp.prime )) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_copy(srckey->dp.order, key->dp.order )) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_copy(srckey->dp.A, key->dp.A )) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_copy(srckey->dp.B, key->dp.B )) != CRYPT_OK) { goto error; } - if ((err = ltc_ecc_copy_point(&srckey->dp.base, &key->dp.base)) != CRYPT_OK) { goto error; } - /* cofactor & size */ - key->dp.cofactor = srckey->dp.cofactor; - key->dp.size = srckey->dp.size; - /* OID */ - if (srckey->dp.oidlen > 0) { - key->dp.oidlen = srckey->dp.oidlen; - for (i = 0; i < key->dp.oidlen; i++) key->dp.oid[i] = srckey->dp.oid[i]; - } - else { - s_ecc_oid_lookup(key); /* try to find OID in ltc_ecc_curves */ - } - /* success */ - return CRYPT_OK; - -error: - ecc_free(key); - return err; -} - -int ecc_set_curve_from_mpis(void *a, void *b, void *prime, void *order, void *gx, void *gy, unsigned long cofactor, ecc_key *key) -{ - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(prime != NULL); - LTC_ARGCHK(order != NULL); - LTC_ARGCHK(gx != NULL); - LTC_ARGCHK(gy != NULL); - - if ((err = ltc_mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B, - &key->dp.base.x, &key->dp.base.y, &key->dp.base.z, - &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, - NULL)) != CRYPT_OK) { - return err; - } - - /* A, B, order, prime, Gx, Gy */ - if ((err = ltc_mp_copy(prime, key->dp.prime )) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_copy(order, key->dp.order )) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_copy(a, key->dp.A )) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_copy(b, key->dp.B )) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_copy(gx, key->dp.base.x)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_copy(gy, key->dp.base.y)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_set(key->dp.base.z, 1)) != CRYPT_OK) { goto error; } - /* cofactor & size */ - key->dp.cofactor = cofactor; - key->dp.size = ltc_mp_unsigned_bin_size(prime); - /* try to find OID in ltc_ecc_curves */ - s_ecc_oid_lookup(key); - /* success */ - return CRYPT_OK; - -error: - ecc_free(key); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_set_key.c b/src/pk/ecc/ecc_set_key.c deleted file mode 100644 index df8e7b13..00000000 --- a/src/pk/ecc/ecc_set_key.c +++ /dev/null @@ -1,56 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -int ecc_set_key(const unsigned char *in, unsigned long inlen, int type, ecc_key *key) -{ - int err; - void *prime, *a, *b; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen > 0); - - prime = key->dp.prime; - a = key->dp.A; - b = key->dp.B; - - if (type == PK_PRIVATE) { - /* load private key */ - if ((err = ltc_mp_read_unsigned_bin(key->k, in, inlen)) != CRYPT_OK) { - goto error; - } - if (ltc_mp_iszero(key->k) || (ltc_mp_cmp(key->k, key->dp.order) != LTC_MP_LT)) { - err = CRYPT_INVALID_PACKET; - goto error; - } - /* compute public key */ - if ((err = ltc_mp.ecc_ptmul(key->k, &key->dp.base, &key->pubkey, a, prime, 1)) != CRYPT_OK) { goto error; } - } - else if (type == PK_PUBLIC) { - /* load public key */ - if ((err = ltc_ecc_import_point(in, inlen, prime, a, b, key->pubkey.x, key->pubkey.y)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_set(key->pubkey.z, 1)) != CRYPT_OK) { goto error; } - } - else { - err = CRYPT_INVALID_PACKET; - goto error; - } - - /* point on the curve + other checks */ - if ((err = ltc_ecc_verify_key(key)) != CRYPT_OK) { - goto error; - } - - key->type = type; - return CRYPT_OK; - -error: - ecc_free(key); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_shared_secret.c b/src/pk/ecc/ecc_shared_secret.c deleted file mode 100644 index 56fb2342..00000000 --- a/src/pk/ecc/ecc_shared_secret.c +++ /dev/null @@ -1,89 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ecc_shared_secret.c - ECC Crypto, Tom St Denis -*/ - -#ifdef LTC_MECC - -/** - Create an ECC shared secret between two keys - @param private_key The private ECC key - @param public_key The public key - @param out [out] Destination of the shared secret (Conforms to EC-DH from ANSI X9.63) - @param outlen [in/out] The max size and resulting size of the shared secret - @return CRYPT_OK if successful -*/ -int ecc_shared_secret(const ecc_key *private_key, const ecc_key *public_key, - unsigned char *out, unsigned long *outlen) -{ - unsigned long x; - ecc_point *result; - void *prime, *a, *mp = NULL; - int err, inf; - - LTC_ARGCHK(private_key != NULL); - LTC_ARGCHK(public_key != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* type valid? */ - if (private_key->type != PK_PRIVATE) { - return CRYPT_PK_NOT_PRIVATE; - } - - /* Domain-parameter check: both keys must be on the same curve. Otherwise the scalar mul - below would silently use the private key's prime/A against a public point that lives - in a different group (scenarion from Wycheproof ecdh_*WrongCurve). - */ - if (ltc_mp_cmp(private_key->dp.prime, public_key->dp.prime) != LTC_MP_EQ || - ltc_mp_cmp(private_key->dp.order, public_key->dp.order) != LTC_MP_EQ || - ltc_mp_cmp(private_key->dp.A, public_key->dp.A) != LTC_MP_EQ || - ltc_mp_cmp(private_key->dp.B, public_key->dp.B) != LTC_MP_EQ || - ltc_mp_cmp(private_key->dp.base.x, public_key->dp.base.x) != LTC_MP_EQ || - ltc_mp_cmp(private_key->dp.base.y, public_key->dp.base.y) != LTC_MP_EQ || - private_key->dp.cofactor != public_key->dp.cofactor) { - return CRYPT_PK_TYPE_MISMATCH; - } - - /* make new point */ - result = ltc_ecc_new_point(); - if (result == NULL) { - return CRYPT_MEM; - } - - prime = private_key->dp.prime; - a = private_key->dp.A; - - if ((err = ltc_mp.ecc_ptmul(private_key->k, &public_key->pubkey, result, a, prime, 0)) != CRYPT_OK) { goto done; } - - /* reject small-subgroup / invalid-curve attacks: k*pubkey must not be O */ - if ((err = ltc_ecc_is_point_at_infinity(result, prime, &inf)) != CRYPT_OK) { goto done; } - if (inf) { err = CRYPT_ERROR; goto done; } - - /* map=0 above kept z meaningful for the infinity check; now finish the affine map */ - if ((err = ltc_mp_montgomery_setup(prime, &mp)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp.ecc_map(result, prime, mp)) != CRYPT_OK) { goto done; } - - x = (unsigned long)ltc_mp_unsigned_bin_size(prime); - if (*outlen < x) { - *outlen = x; - err = CRYPT_BUFFER_OVERFLOW; - goto done; - } - zeromem(out, x); - if ((err = ltc_mp_to_unsigned_bin(result->x, out + (x - ltc_mp_unsigned_bin_size(result->x)))) != CRYPT_OK) { goto done; } - - err = CRYPT_OK; - *outlen = x; -done: - if (mp != NULL) ltc_mp_montgomery_free(mp); - ltc_ecc_del_point(result); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_sign_hash.c b/src/pk/ecc/ecc_sign_hash.c deleted file mode 100644 index 97023ac8..00000000 --- a/src/pk/ecc/ecc_sign_hash.c +++ /dev/null @@ -1,50 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#if defined(LTC_MECC) - -typedef int (*ecc_sign_fn)(const unsigned char *in, - unsigned long inlen, - unsigned char *out, - unsigned long *outlen, - ltc_ecc_sig_opts *opts, - const ecc_key *key); - -static const ecc_sign_fn s_ecc_sign_hash[] = { -#ifdef LTC_DER - [LTC_ECCSIG_ANSIX962] = ecc_sign_hash_x962, -#endif - [LTC_ECCSIG_RFC7518] = ecc_sign_hash_rfc7518_internal, - [LTC_ECCSIG_ETH27] = ecc_sign_hash_eth27, -#ifdef LTC_SSH - [LTC_ECCSIG_RFC5656] = ecc_sign_hash_rfc5656, -#endif -}; - -/** - Sign a message digest (ANSI X9.62 format) - @param in The message digest to sign - @param inlen The length of the digest - @param out [out] The destination for the signature - @param outlen [in/out] The max size and resulting size of the signature - @param opts The signature options that shall be applied - @param key A private ECC key - @return CRYPT_OK if successful -*/ -int ecc_sign_hash_v2(const unsigned char *in, - unsigned long inlen, - unsigned char *out, - unsigned long *outlen, - ltc_ecc_sig_opts *opts, - const ecc_key *key) -{ - if (opts->type < 0 || opts->type >= LTC_ARRAY_SIZE(s_ecc_sign_hash)) - return CRYPT_PK_INVALID_TYPE; - if (s_ecc_sign_hash[opts->type] == NULL) - return CRYPT_PK_INVALID_TYPE; - return s_ecc_sign_hash[opts->type](in, inlen, out, outlen, opts, key); -} - -#endif diff --git a/src/pk/ecc/ecc_sign_hash_eth27.c b/src/pk/ecc/ecc_sign_hash_eth27.c deleted file mode 100644 index d340070d..00000000 --- a/src/pk/ecc/ecc_sign_hash_eth27.c +++ /dev/null @@ -1,59 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -/** - Sign a message digest (Ethereum format with recovery_id+27) - @param in The message digest to sign - @param inlen The length of the digest - @param out [out] The destination for the signature - @param outlen [in/out] The max size and resulting size of the signature - @param opts The signature options that shall be applied - @param key A private ECC key - @return CRYPT_OK if successful -*/ -int ecc_sign_hash_eth27(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - ltc_ecc_sig_opts *opts, const ecc_key *key) -{ - int err; - void *r, *s; - unsigned long i; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(opts != NULL); - LTC_ARGCHK(key != NULL); - - /* Only valid for secp256k1 - OID 1.3.132.0.10 */ - if (pk_oid_cmp_with_ulong("1.3.132.0.10", key->dp.oid, key->dp.oidlen) != CRYPT_OK) { - return CRYPT_ERROR; - } - if (*outlen < 65) { - *outlen = 65; - return CRYPT_BUFFER_OVERFLOW; - } - - opts->enable_recovery_id = 1; - - if ((err = ltc_mp_init_multi(&r, &s, LTC_NULL)) != CRYPT_OK) return err; - if ((err = ecc_sign_hash_internal(in, inlen, r, s, opts, key)) != CRYPT_OK) goto error; - - zeromem(out, 65); - *outlen = 65; - i = ltc_mp_unsigned_bin_size(r); - if ((err = ltc_mp_to_unsigned_bin(r, out + 32 - i)) != CRYPT_OK) goto error; - i = ltc_mp_unsigned_bin_size(s); - if ((err = ltc_mp_to_unsigned_bin(s, out + 64 - i)) != CRYPT_OK) goto error; - out[64] = (unsigned char)(opts->recovery_id + 27); /* Recovery ID is 27/28 for Ethereum */ - err = CRYPT_OK; - -error: - ltc_mp_deinit_multi(r, s, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_sign_hash_internal.c b/src/pk/ecc/ecc_sign_hash_internal.c deleted file mode 100644 index 670fbe66..00000000 --- a/src/pk/ecc/ecc_sign_hash_internal.c +++ /dev/null @@ -1,115 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -int ecc_sign_hash_internal(const unsigned char *in, unsigned long inlen, - void *r, void *s, ltc_ecc_sig_opts *opts, const ecc_key *key) -{ - ecc_key pubkey; - void *e, *p, *b; - int v = 0; - int err, max_iterations = LTC_PK_MAX_RETRIES; - unsigned long pbits, pbytes, i, shift_right; - unsigned char ch, buf[MAXBLOCKSIZE]; - - LTC_ARGCHK(r != NULL); - LTC_ARGCHK(s != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(opts != NULL); - LTC_ARGCHK(key != NULL); - - /* is this a private key? */ - if (key->type != PK_PRIVATE) { - return CRYPT_PK_NOT_PRIVATE; - } - - /* init the bignums */ - if ((err = ltc_mp_init_multi(&e, &b, LTC_NULL)) != CRYPT_OK) { - return err; - } - - /* get the hash and load it as a bignum into 'e' */ - p = key->dp.order; - pbits = ltc_mp_count_bits(p); - pbytes = (pbits+7) >> 3; - if (pbits > inlen*8) { - if ((err = ltc_mp_read_unsigned_bin(e, (unsigned char *)in, inlen)) != CRYPT_OK) { goto errnokey; } - } - else if (pbits % 8 == 0) { - if ((err = ltc_mp_read_unsigned_bin(e, (unsigned char *)in, pbytes)) != CRYPT_OK) { goto errnokey; } - } - else { - if (pbytes >= MAXBLOCKSIZE) { - err = CRYPT_BUFFER_OVERFLOW; - goto error; - } - shift_right = 8 - pbits % 8; - for (i=0, ch=0; i> shift_right); - } - if ((err = ltc_mp_read_unsigned_bin(e, (unsigned char *)buf, pbytes)) != CRYPT_OK) { goto errnokey; } - } - - /* make up a key and export the public copy */ - do { - if ((err = ecc_copy_curve(key, &pubkey)) != CRYPT_OK) { goto errnokey; } - if (opts->rfc6979_hash_alg != NULL) { - if ((err = ecc_rfc6979_key(key, in, inlen, opts->rfc6979_hash_alg, &pubkey)) != CRYPT_OK) { goto errnokey; } - } else { - if ((err = ecc_generate_key(opts->prng, opts->wprng, &pubkey)) != CRYPT_OK) { goto errnokey; } - } - - /* find r = x1 mod n */ - if ((err = ltc_mp_mod(pubkey.pubkey.x, p, r)) != CRYPT_OK) { goto error; } - - if (opts->enable_recovery_id) { - /* find recovery ID (if needed) */ - v = 0; - if (ltc_mp_copy(pubkey.pubkey.x, s) != CRYPT_OK) { goto error; } - while (ltc_mp_cmp_d(s, 0) == LTC_MP_GT && ltc_mp_cmp(s, p) != LTC_MP_LT) { - /* Compute x1 div n... this will almost never be reached for curves with order 1 */ - v += 2; - if ((err = ltc_mp_sub(s, p, s)) != CRYPT_OK) { goto error; } - } - if (ltc_mp_isodd(pubkey.pubkey.y)) v += 1; - } - - if (ltc_mp_iszero(r) == LTC_MP_YES) { - ecc_free(&pubkey); - } else { - if ((err = rand_bn_upto(b, p, opts->prng, opts->wprng)) != CRYPT_OK) { goto error; } /* b = blinding value */ - /* find s = (e + xr)/k */ - if ((err = ltc_mp_mulmod(pubkey.k, b, p, pubkey.k)) != CRYPT_OK) { goto error; } /* k = kb */ - if ((err = ltc_mp_invmod(pubkey.k, p, pubkey.k)) != CRYPT_OK) { goto error; } /* k = 1/kb */ - if ((err = ltc_mp_mulmod(key->k, r, p, s)) != CRYPT_OK) { goto error; } /* s = xr */ - if ((err = ltc_mp_mulmod(pubkey.k, s, p, s)) != CRYPT_OK) { goto error; } /* s = xr/kb */ - if ((err = ltc_mp_mulmod(pubkey.k, e, p, e)) != CRYPT_OK) { goto error; } /* e = e/kb */ - if ((err = ltc_mp_add(e, s, s)) != CRYPT_OK) { goto error; } /* s = e/kb + xr/kb */ - if ((err = ltc_mp_mulmod(s, b, p, s)) != CRYPT_OK) { goto error; } /* s = b(e/kb + xr/kb) = (e + xr)/k */ - ecc_free(&pubkey); - if (ltc_mp_iszero(s) == LTC_MP_NO) { - break; - } - } - } while (--max_iterations > 0); - - if (max_iterations == 0) { - goto errnokey; - } - - if (opts->enable_recovery_id) opts->recovery_id = v; - - goto errnokey; -error: - ecc_free(&pubkey); -errnokey: - ltc_mp_deinit_multi(e, b, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_sign_hash_rfc5656.c b/src/pk/ecc/ecc_sign_hash_rfc5656.c deleted file mode 100644 index 1330004c..00000000 --- a/src/pk/ecc/ecc_sign_hash_rfc5656.c +++ /dev/null @@ -1,47 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#if defined(LTC_MECC) && defined(LTC_SSH) - -/** - Sign a message digest (RFC5656 / SSH format) - @param in The message digest to sign - @param inlen The length of the digest - @param out [out] The destination for the signature - @param outlen [in/out] The max size and resulting size of the signature - @param opts The signature options that shall be applied - @param key A private ECC key - @return CRYPT_OK if successful -*/ -int ecc_sign_hash_rfc5656(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - ltc_ecc_sig_opts *opts, const ecc_key *key) -{ - int err; - void *r, *s; - char name[64]; - unsigned long namelen = sizeof(name); - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* Get identifier string */ - if ((err = ecc_ssh_ecdsa_encode_name(name, &namelen, key)) != CRYPT_OK) return err; - - if ((err = ltc_mp_init_multi(&r, &s, LTC_NULL)) != CRYPT_OK) return err; - if ((err = ecc_sign_hash_internal(in, inlen, r, s, opts, key)) != CRYPT_OK) goto error; - - /* Store as SSH data sequence, per RFC4251 */ - err = ssh_encode_sequence_multi(out, outlen, - LTC_SSHDATA_STRING, name, namelen, - LTC_SSHDATA_MPINT, r, - LTC_SSHDATA_MPINT, s, - LTC_SSHDATA_EOL, LTC_NULL); -error: - ltc_mp_deinit_multi(r, s, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_sign_hash_rfc7518.c b/src/pk/ecc/ecc_sign_hash_rfc7518.c deleted file mode 100644 index a28f0c36..00000000 --- a/src/pk/ecc/ecc_sign_hash_rfc7518.c +++ /dev/null @@ -1,52 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -/** - Sign a message digest (RFC7518 format + recovery_id) - @param in The message digest to sign - @param inlen The length of the digest - @param out [out] The destination for the signature - @param outlen [in/out] The max size and resulting size of the signature - @param opts The signature options that shall be applied - @param key A private ECC key - @return CRYPT_OK if successful -*/ -int ecc_sign_hash_rfc7518_internal(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - ltc_ecc_sig_opts *opts, const ecc_key *key) -{ - int err; - void *r, *s; - unsigned long pbytes, i; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - /* RFC7518 format - raw (r,s) */ - pbytes = ltc_mp_unsigned_bin_size(key->dp.order); - if (*outlen < 2 * pbytes) { - *outlen = 2 * pbytes; - return CRYPT_BUFFER_OVERFLOW; - } - - if ((err = ltc_mp_init_multi(&r, &s, LTC_NULL)) != CRYPT_OK) return err; - if ((err = ecc_sign_hash_internal(in, inlen, r, s, opts, key)) != CRYPT_OK) goto error; - - zeromem(out, 2 * pbytes); - *outlen = 2 * pbytes; - i = ltc_mp_unsigned_bin_size(r); - if ((err = ltc_mp_to_unsigned_bin(r, out + pbytes - i)) != CRYPT_OK) goto error; - i = ltc_mp_unsigned_bin_size(s); - err = ltc_mp_to_unsigned_bin(s, out + 2 * pbytes - i); - -error: - ltc_mp_deinit_multi(r, s, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_sign_hash_x962.c b/src/pk/ecc/ecc_sign_hash_x962.c deleted file mode 100644 index 8bf20fad..00000000 --- a/src/pk/ecc/ecc_sign_hash_x962.c +++ /dev/null @@ -1,44 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#if defined(LTC_MECC) && defined(LTC_DER) - -/** - Sign a message digest (ANSI X9.62 format) - @param in The message digest to sign - @param inlen The length of the digest - @param out [out] The destination for the signature - @param outlen [in/out] The max size and resulting size of the signature - @param opts The signature options that shall be applied - @param key A private ECC key - @return CRYPT_OK if successful -*/ -int ecc_sign_hash_x962(const unsigned char *in, - unsigned long inlen, - unsigned char *out, - unsigned long *outlen, - ltc_ecc_sig_opts *opts, - const ecc_key *key) -{ - int err; - void *r, *s; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((err = ltc_mp_init_multi(&r, &s, LTC_NULL)) != CRYPT_OK) return err; - if ((err = ecc_sign_hash_internal(in, inlen, r, s, opts, key)) != CRYPT_OK) goto error; - - /* store as ASN.1 SEQUENCE { r, s -- integer } */ - err = der_encode_sequence_multi(out, outlen, - LTC_ASN1_INTEGER, 1UL, r, - LTC_ASN1_INTEGER, 1UL, s, - LTC_ASN1_EOL, 0UL, NULL); -error: - ltc_mp_deinit_multi(r, s, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_sizes.c b/src/pk/ecc/ecc_sizes.c deleted file mode 100644 index ed8cfc96..00000000 --- a/src/pk/ecc/ecc_sizes.c +++ /dev/null @@ -1,36 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ecc_sizes.c - ECC Crypto, Tom St Denis -*/ - -#ifdef LTC_MECC - -void ecc_sizes(int *low, int *high) -{ - int i, size; - void *prime; - - LTC_ARGCHKVD(low != NULL); - LTC_ARGCHKVD(high != NULL); - - *low = INT_MAX; - *high = 0; - - if (ltc_mp_init(&prime) == CRYPT_OK) { - for (i = 0; ltc_ecc_curves[i].prime != NULL; i++) { - if (ltc_mp_read_radix(prime, ltc_ecc_curves[i].prime, 16) == CRYPT_OK) { - size = ltc_mp_unsigned_bin_size(prime); - if (size < *low) *low = size; - if (size > *high) *high = size; - } - } - ltc_mp_clear(prime); - } -} - -#endif diff --git a/src/pk/ecc/ecc_ssh_ecdsa_encode_name.c b/src/pk/ecc/ecc_ssh_ecdsa_encode_name.c deleted file mode 100644 index f10a2c68..00000000 --- a/src/pk/ecc/ecc_ssh_ecdsa_encode_name.c +++ /dev/null @@ -1,65 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ecc_ssh_ecdsa_encode_name.c - Curve/OID to SSH+ECDSA name string mapping per RFC5656 - Russ Williams -*/ - -#ifdef LTC_SSH - -/** - Curve/OID to SSH+ECDSA name string mapping - @param buffer [out] The destination for the name - @param buflen [in/out] The max size and resulting size (including terminator) of the name - @param key A public or private ECC key - @return CRYPT_OK if successful -*/ -int ecc_ssh_ecdsa_encode_name(char *buffer, unsigned long *buflen, const ecc_key *key) -{ - char oidstr[LTC_OID_MAX_STRLEN] = {0}; - unsigned long oidlen = sizeof(oidstr); - int err, size = 0; - - LTC_ARGCHK(buffer != NULL); - LTC_ARGCHK(buflen != NULL); - LTC_ARGCHK(key != NULL); - - /* Get the OID of the curve */ - if ((err = ecc_get_oid_str(oidstr, &oidlen, key)) != CRYPT_OK) goto error; - - /* Check for three named curves: nistp256, nistp384, nistp521 */ - if (XSTRCMP("1.2.840.10045.3.1.7", oidstr) == 0) { - /* nistp256 - secp256r1 - OID 1.2.840.10045.3.1.7 */ - size = snprintf(buffer, *buflen, "ecdsa-sha2-nistp256"); - } - else if (XSTRCMP("1.3.132.0.34", oidstr) == 0) { - /* nistp384 - secp384r1 - OID 1.3.132.0.34 */ - size = snprintf(buffer, *buflen, "ecdsa-sha2-nistp384"); - } - else if (XSTRCMP("1.3.132.0.35", oidstr) == 0) { - /* nistp521 - secp521r1 - OID 1.3.132.0.35 */ - size = snprintf(buffer, *buflen, "ecdsa-sha2-nistp521"); - } else { - /* Otherwise we use the OID... */ - size = snprintf(buffer, *buflen, "ecdsa-sha2-%s", oidstr); - } - - /* snprintf returns a negative value on error - * or the size that would have been written, but limits to buflen-1 chars plus terminator */ - if (size < 0) { - err = CRYPT_ERROR; - } else if ((unsigned)size >= *buflen) { - err = CRYPT_BUFFER_OVERFLOW; - } else { - err = CRYPT_OK; - } - *buflen = size + 1; /* the string length + NUL byte */ - -error: - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_verify_hash.c b/src/pk/ecc/ecc_verify_hash.c deleted file mode 100644 index b7a3fb89..00000000 --- a/src/pk/ecc/ecc_verify_hash.c +++ /dev/null @@ -1,60 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#if defined(LTC_MECC) && defined(LTC_DER) - -/** - @file ecc_verify_hash.c - ECC Crypto, Tom St Denis -*/ - -typedef int (*ecc_verify_fn)(const unsigned char *sig, - unsigned long siglen, - const unsigned char *hash, - unsigned long hashlen, - int *stat, - const ecc_key *key); - -static const ecc_verify_fn s_ecc_verify_hash[] = { -#ifdef LTC_DER - [LTC_ECCSIG_ANSIX962] = ecc_verify_hash_x962, -#endif - [LTC_ECCSIG_RFC7518] = ecc_verify_hash_rfc7518_internal, - [LTC_ECCSIG_ETH27] = ecc_verify_hash_eth27, -#ifdef LTC_SSH - [LTC_ECCSIG_RFC5656] = ecc_verify_hash_rfc5656, -#endif -}; - -/** - Verify an ECC signature - @param sig The signature to verify - @param siglen The length of the signature (octets) - @param hash The hash (message digest) that was signed - @param hashlen The length of the hash (octets) - @param stat [out] Result of signature, 1==valid, 0==invalid - @param key The corresponding public ECC key - @return CRYPT_OK if successful (even if the signature is not valid) -*/ -int ecc_verify_hash_v2(const unsigned char *sig, - unsigned long siglen, - const unsigned char *hash, - unsigned long hashlen, - ltc_ecc_sig_opts *opts, - int *stat, - const ecc_key *key) -{ - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - LTC_ARGCHK(opts != NULL); - if (opts->type < 0 || opts->type >= LTC_ARRAY_SIZE(s_ecc_verify_hash)) - return CRYPT_PK_INVALID_TYPE; - if (s_ecc_verify_hash[opts->type] == NULL) - return CRYPT_PK_INVALID_TYPE; - return s_ecc_verify_hash[opts->type](sig, siglen, hash, hashlen, stat, key); -} - -#endif diff --git a/src/pk/ecc/ecc_verify_hash_eth27.c b/src/pk/ecc/ecc_verify_hash_eth27.c deleted file mode 100644 index d3802d46..00000000 --- a/src/pk/ecc/ecc_verify_hash_eth27.c +++ /dev/null @@ -1,57 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -/** - @file ecc_verify_hash_eth27.c - ECC Crypto, Tom St Denis -*/ - -/** - Verify an ECC signature (Ethereum format with recovery_id+27) - @param sig The signature to verify - @param siglen The length of the signature (octets) - @param hash The hash (message digest) that was signed - @param hashlen The length of the hash (octets) - @param stat [out] Result of signature, 1==valid, 0==invalid - @param key The corresponding public ECC key - @return CRYPT_OK if successful (even if the signature is not valid) -*/ -int ecc_verify_hash_eth27(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int *stat, const ecc_key *key) -{ - void *r, *s; - int err; - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(key != NULL); - - /* Only valid for secp256k1 - OID 1.3.132.0.10 */ - if (pk_oid_cmp_with_ulong("1.3.132.0.10", key->dp.oid, key->dp.oidlen) != CRYPT_OK) { - return CRYPT_ERROR; - } - /* Only secp256k1 curves uses this format, so must be 65 bytes long */ - if (siglen != 65) { - return CRYPT_INVALID_PACKET; - } - - if ((err = ltc_mp_init_multi(&r, &s, LTC_NULL)) != CRYPT_OK) return err; - if ((err = ltc_mp_read_unsigned_bin(r, (unsigned char *)sig, 32)) != CRYPT_OK) goto error; - if ((err = ltc_mp_read_unsigned_bin(s, (unsigned char *)sig + 32, 32)) != CRYPT_OK) goto error; - - err = ecc_verify_hash_internal(r, s, hash, hashlen, stat, key); - -error: - ltc_mp_deinit_multi(r, s, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_verify_hash_internal.c b/src/pk/ecc/ecc_verify_hash_internal.c deleted file mode 100644 index 13be42cb..00000000 --- a/src/pk/ecc/ecc_verify_hash_internal.c +++ /dev/null @@ -1,137 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -int ecc_verify_hash_internal(void *r, void *s, - const unsigned char *hash, unsigned long hashlen, - int *stat, const ecc_key *key) -{ - ecc_point *mG = NULL, *mQ = NULL; - void *v, *w, *u1, *u2, *e, *p, *m, *a, *a_plus3; - void *mu = NULL, *ma = NULL; - void *mp = NULL; - int err; - unsigned long pbits, pbytes, i, shift_right; - unsigned char ch, buf[MAXBLOCKSIZE]; - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - LTC_ARGCHK(r != NULL); - LTC_ARGCHK(s != NULL); - LTC_ARGCHK(hash != NULL); - LTC_ARGCHK(key != NULL); - - /* allocate ints */ - if ((err = ltc_mp_init_multi(&v, &w, &u1, &u2, &e, &a_plus3, LTC_NULL)) != CRYPT_OK) { - return err; - } - - p = key->dp.order; - m = key->dp.prime; - a = key->dp.A; - if ((err = ltc_mp_add_d(a, 3, a_plus3)) != CRYPT_OK) { - goto error; - } - - /* allocate points */ - mG = ltc_ecc_new_point(); - mQ = ltc_ecc_new_point(); - if (mQ == NULL || mG == NULL) { - err = CRYPT_MEM; - goto error; - } - - /* check for zero */ - if (ltc_mp_cmp_d(r, 0) != LTC_MP_GT || ltc_mp_cmp_d(s, 0) != LTC_MP_GT || - ltc_mp_cmp(r, p) != LTC_MP_LT || ltc_mp_cmp(s, p) != LTC_MP_LT) { - err = CRYPT_INVALID_PACKET; - goto error; - } - - /* read hash - truncate if needed */ - pbits = ltc_mp_count_bits(p); - pbytes = (pbits+7) >> 3; - if (pbits > hashlen*8) { - if ((err = ltc_mp_read_unsigned_bin(e, (unsigned char *)hash, hashlen)) != CRYPT_OK) { goto error; } - } - else if (pbits % 8 == 0) { - if ((err = ltc_mp_read_unsigned_bin(e, (unsigned char *)hash, pbytes)) != CRYPT_OK) { goto error; } - } - else { - if (pbytes >= MAXBLOCKSIZE) { - err = CRYPT_BUFFER_OVERFLOW; - goto error; - } - shift_right = 8 - pbits % 8; - for (i=0, ch=0; i> shift_right); - } - if ((err = ltc_mp_read_unsigned_bin(e, (unsigned char *)buf, pbytes)) != CRYPT_OK) { goto error; } - } - - /* w = s^-1 mod n */ - if ((err = ltc_mp_invmod(s, p, w)) != CRYPT_OK) { goto error; } - - /* u1 = ew */ - if ((err = ltc_mp_mulmod(e, w, p, u1)) != CRYPT_OK) { goto error; } - - /* u2 = rw */ - if ((err = ltc_mp_mulmod(r, w, p, u2)) != CRYPT_OK) { goto error; } - - /* find mG and mQ */ - if ((err = ltc_ecc_copy_point(&key->dp.base, mG)) != CRYPT_OK) { goto error; } - if ((err = ltc_ecc_copy_point(&key->pubkey, mQ)) != CRYPT_OK) { goto error; } - - /* find the montgomery mp */ - if ((err = ltc_mp_montgomery_setup(m, &mp)) != CRYPT_OK) { goto error; } - - /* for curves with a == -3 keep ma == NULL */ - if (ltc_mp_cmp(a_plus3, m) != LTC_MP_EQ) { - if ((err = ltc_mp_init_multi(&mu, &ma, NULL)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_montgomery_normalization(mu, m)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_mulmod(a, mu, m, ma)) != CRYPT_OK) { goto error; } - } - - /* compute u1*mG + u2*mQ = mG */ - if (ltc_mp.ecc_mul2add == NULL) { - if ((err = ltc_mp.ecc_ptmul(u1, mG, mG, a, m, 0)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp.ecc_ptmul(u2, mQ, mQ, a, m, 0)) != CRYPT_OK) { goto error; } - - /* add them */ - if ((err = ltc_mp.ecc_ptadd(mQ, mG, mG, ma, m, mp)) != CRYPT_OK) { goto error; } - - /* reduce */ - if ((err = ltc_mp.ecc_map(mG, m, mp)) != CRYPT_OK) { goto error; } - } else { - /* use Shamir's trick to compute u1*mG + u2*mQ using half of the doubles */ - if ((err = ltc_mp.ecc_mul2add(mG, u1, mQ, u2, mG, ma, m)) != CRYPT_OK) { goto error; } - } - - /* v = X_x1 mod n */ - if ((err = ltc_mp_mod(mG->x, p, v)) != CRYPT_OK) { goto error; } - - /* does v == r */ - if (ltc_mp_cmp(v, r) == LTC_MP_EQ) { - *stat = 1; - } - - /* clear up and return */ - err = CRYPT_OK; -error: - if (mG != NULL) ltc_ecc_del_point(mG); - if (mQ != NULL) ltc_ecc_del_point(mQ); - if (mu != NULL) ltc_mp_clear(mu); - if (ma != NULL) ltc_mp_clear(ma); - ltc_mp_deinit_multi(v, w, u1, u2, e, a_plus3, LTC_NULL); - if (mp != NULL) ltc_mp_montgomery_free(mp); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_verify_hash_rfc5656.c b/src/pk/ecc/ecc_verify_hash_rfc5656.c deleted file mode 100644 index 1ad02e29..00000000 --- a/src/pk/ecc/ecc_verify_hash_rfc5656.c +++ /dev/null @@ -1,69 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#if defined(LTC_MECC) && defined(LTC_SSH) - -/** - @file ecc_verify_hash.c - ECC Crypto, Tom St Denis -*/ - -/** - Verify an ECC signature (RFC5656 / SSH format) - @param sig The signature to verify - @param siglen The length of the signature (octets) - @param hash The hash (message digest) that was signed - @param hashlen The length of the hash (octets) - @param stat [out] Result of signature, 1==valid, 0==invalid - @param key The corresponding public ECC key - @return CRYPT_OK if successful (even if the signature is not valid) -*/ -int ecc_verify_hash_rfc5656(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int *stat, const ecc_key *key) -{ - void *r, *s; - int err; - char name[64], name2[64]; - unsigned long namelen = sizeof(name); - unsigned long name2len = sizeof(name2); - unsigned long slen = siglen; - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(key != NULL); - - if ((err = ltc_mp_init_multi(&r, &s, LTC_NULL)) != CRYPT_OK) return err; - - /* Decode as SSH data sequence, per RFC4251 */ - if ((err = ssh_decode_sequence_multi(sig, &slen, - LTC_SSHDATA_STRING, name, &namelen, - LTC_SSHDATA_MPINT, r, - LTC_SSHDATA_MPINT, s, - LTC_SSHDATA_EOL, LTC_NULL)) != CRYPT_OK) goto error; - - if (slen != siglen) { - err = CRYPT_INVALID_PACKET; - goto error; - } - - /* Check curve matches identifier string */ - if ((err = ecc_ssh_ecdsa_encode_name(name2, &name2len, key)) != CRYPT_OK) goto error; - if (XSTRCMP(name,name2) != 0) { - err = CRYPT_INVALID_ARG; - goto error; - } - - err = ecc_verify_hash_internal(r, s, hash, hashlen, stat, key); - -error: - ltc_mp_deinit_multi(r, s, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_verify_hash_rfc7518.c b/src/pk/ecc/ecc_verify_hash_rfc7518.c deleted file mode 100644 index 51922a40..00000000 --- a/src/pk/ecc/ecc_verify_hash_rfc7518.c +++ /dev/null @@ -1,46 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -/** - @file ecc_verify_hash_rfc7518.c - ECC Crypto, Tom St Denis -*/ - -int ecc_verify_hash_rfc7518_internal(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int *stat, const ecc_key *key) -{ - void *r, *s; - int err; - unsigned long i; - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(key != NULL); - - if ((err = ltc_mp_init_multi(&r, &s, LTC_NULL)) != CRYPT_OK) return err; - - /* RFC7518 format - raw (r,s) */ - i = ltc_mp_unsigned_bin_size(key->dp.order); - if (siglen != (2 * i)) { - err = CRYPT_INVALID_PACKET; - goto error; - } - if ((err = ltc_mp_read_unsigned_bin(r, (unsigned char *)sig, i)) != CRYPT_OK) goto error; - if ((err = ltc_mp_read_unsigned_bin(s, (unsigned char *)sig + i, i)) != CRYPT_OK) goto error; - - err = ecc_verify_hash_internal(r, s, hash, hashlen, stat, key); - -error: - ltc_mp_deinit_multi(r, s, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/ecc/ecc_verify_hash_x962.c b/src/pk/ecc/ecc_verify_hash_x962.c deleted file mode 100644 index 477d798b..00000000 --- a/src/pk/ecc/ecc_verify_hash_x962.c +++ /dev/null @@ -1,41 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#if defined(LTC_MECC) && defined(LTC_DER) - -/** - @file ecc_verify_hash_x962.c - ECC Crypto, Tom St Denis -*/ - -int ecc_verify_hash_x962(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int *stat, const ecc_key *key) -{ - void *r, *s; - int err; - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - LTC_ARGCHK(sig != NULL); - - if ((err = ltc_mp_init_multi(&r, &s, NULL)) != CRYPT_OK) return err; - - /* ANSI X9.62 format - ASN.1 encoded SEQUENCE{ INTEGER(r), INTEGER(s) } */ - if ((err = der_decode_sequence_multi_ex(sig, siglen, LTC_DER_SEQ_SEQUENCE | LTC_DER_SEQ_ALL_STRICT, - LTC_ASN1_INTEGER, 1UL, r, - LTC_ASN1_INTEGER, 1UL, s, - LTC_ASN1_EOL, 0UL, LTC_NULL)) != CRYPT_OK) { goto error; } - - err = ecc_verify_hash_internal(r, s, hash, hashlen, stat, key); - -error: - ltc_mp_deinit_multi(r, s, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/ecc/ltc_ecc_export_point.c b/src/pk/ecc/ltc_ecc_export_point.c deleted file mode 100644 index 1586633b..00000000 --- a/src/pk/ecc/ltc_ecc_export_point.c +++ /dev/null @@ -1,53 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -int ltc_ecc_export_point(unsigned char *out, unsigned long *outlen, void *x, void *y, unsigned long size, int compressed) -{ - int err; - unsigned char buf[ECC_BUF_SIZE]; - unsigned long xsize, ysize; - - if (size > sizeof(buf)) return CRYPT_BUFFER_OVERFLOW; - if ((xsize = ltc_mp_unsigned_bin_size(x)) > size) return CRYPT_BUFFER_OVERFLOW; - if ((ysize = ltc_mp_unsigned_bin_size(y)) > size) return CRYPT_BUFFER_OVERFLOW; - - if(compressed) { - if (*outlen < (1 + size)) { - *outlen = 1 + size; - return CRYPT_BUFFER_OVERFLOW; - } - /* store first byte */ - out[0] = ltc_mp_isodd(y) ? 0x03 : 0x02; - /* pad and store x */ - zeromem(buf, sizeof(buf)); - if ((err = ltc_mp_to_unsigned_bin(x, buf + (size - xsize))) != CRYPT_OK) return err; - XMEMCPY(out+1, buf, size); - /* adjust outlen */ - *outlen = 1 + size; - } - else { - if (*outlen < (1 + 2*size)) { - *outlen = 1 + 2*size; - return CRYPT_BUFFER_OVERFLOW; - } - /* store byte 0x04 */ - out[0] = 0x04; - /* pad and store x */ - zeromem(buf, sizeof(buf)); - if ((err = ltc_mp_to_unsigned_bin(x, buf + (size - xsize))) != CRYPT_OK) return err; - XMEMCPY(out+1, buf, size); - /* pad and store y */ - zeromem(buf, sizeof(buf)); - if ((err = ltc_mp_to_unsigned_bin(y, buf + (size - ysize))) != CRYPT_OK) return err; - XMEMCPY(out+1+size, buf, size); - /* adjust outlen */ - *outlen = 1 + 2*size; - } - return CRYPT_OK; -} - -#endif diff --git a/src/pk/ecc/ltc_ecc_import_point.c b/src/pk/ecc/ltc_ecc_import_point.c deleted file mode 100644 index d16301f5..00000000 --- a/src/pk/ecc/ltc_ecc_import_point.c +++ /dev/null @@ -1,61 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -int ltc_ecc_import_point(const unsigned char *in, unsigned long inlen, void *prime, void *a, void *b, void *x, void *y) -{ - int err; - unsigned long size; - void *t1, *t2; - - /* init key + temporary numbers */ - if (ltc_mp_init_multi(&t1, &t2, LTC_NULL) != CRYPT_OK) { - return CRYPT_MEM; - } - - size = ltc_mp_unsigned_bin_size(prime); - - if (in[0] == 0x04 && (inlen&1) && ((inlen-1)>>1) == size) { - /* read uncompressed point */ - /* load x */ - if ((err = ltc_mp_read_unsigned_bin(x, in+1, size)) != CRYPT_OK) { goto cleanup; } - /* load y */ - if ((err = ltc_mp_read_unsigned_bin(y, in+1+size, size)) != CRYPT_OK) { goto cleanup; } - } - else if ((in[0] == 0x02 || in[0] == 0x03) && (inlen-1) == size && ltc_mp.sqrtmod_prime != NULL) { - /* read compressed point - BEWARE: requires sqrtmod_prime */ - /* load x */ - if ((err = ltc_mp_read_unsigned_bin(x, in+1, size)) != CRYPT_OK) { goto cleanup; } - /* compute x^3 */ - if ((err = ltc_mp_sqr(x, t1)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_mulmod(t1, x, prime, t1)) != CRYPT_OK) { goto cleanup; } - /* compute x^3 + a*x */ - if ((err = ltc_mp_mulmod(a, x, prime, t2)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_add(t1, t2, t1)) != CRYPT_OK) { goto cleanup; } - /* compute x^3 + a*x + b */ - if ((err = ltc_mp_add(t1, b, t1)) != CRYPT_OK) { goto cleanup; } - /* compute sqrt(x^3 + a*x + b) */ - if ((err = ltc_mp_sqrtmod_prime(t1, prime, t2)) != CRYPT_OK) { goto cleanup; } - /* adjust y */ - if ((ltc_mp_isodd(t2) && in[0] == 0x03) || (!ltc_mp_isodd(t2) && in[0] == 0x02)) { - if ((err = ltc_mp_mod(t2, prime, y)) != CRYPT_OK) { goto cleanup; } - } - else { - if ((err = ltc_mp_submod(prime, t2, prime, y)) != CRYPT_OK) { goto cleanup; } - } - } - else { - err = CRYPT_INVALID_PACKET; - goto cleanup; - } - - err = CRYPT_OK; -cleanup: - ltc_mp_deinit_multi(t1, t2, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/ecc/ltc_ecc_is_point.c b/src/pk/ecc/ltc_ecc_is_point.c deleted file mode 100644 index 9b558146..00000000 --- a/src/pk/ecc/ltc_ecc_is_point.c +++ /dev/null @@ -1,62 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -/** Returns whether [x,y] is a point on curve defined by dp - @param dp curve parameters - @param x x point coordinate - @param y y point coordinate - @return CRYPT_OK if valid -*/ - -int ltc_ecc_is_point(const ltc_ecc_dp *dp, void *x, void *y) -{ - void *prime, *a, *b, *t1, *t2; - int err; - - prime = dp->prime; - b = dp->B; - a = dp->A; - - if ((err = ltc_mp_init_multi(&t1, &t2, LTC_NULL)) != CRYPT_OK) return err; - - /* compute y^2 */ - if ((err = ltc_mp_sqr(y, t1)) != CRYPT_OK) goto cleanup; - - /* compute x^3 */ - if ((err = ltc_mp_sqr(x, t2)) != CRYPT_OK) goto cleanup; - if ((err = ltc_mp_mod(t2, prime, t2)) != CRYPT_OK) goto cleanup; - if ((err = ltc_mp_mul(x, t2, t2)) != CRYPT_OK) goto cleanup; - - /* compute y^2 - x^3 */ - if ((err = ltc_mp_sub(t1, t2, t1)) != CRYPT_OK) goto cleanup; - - /* compute y^2 - x^3 - a*x */ - if ((err = ltc_mp_submod(prime, a, prime, t2)) != CRYPT_OK) goto cleanup; - if ((err = ltc_mp_mulmod(t2, x, prime, t2)) != CRYPT_OK) goto cleanup; - if ((err = ltc_mp_addmod(t1, t2, prime, t1)) != CRYPT_OK) goto cleanup; - - /* adjust range (0, prime) */ - while (ltc_mp_cmp_d(t1, 0) == LTC_MP_LT) { - if ((err = ltc_mp_add(t1, prime, t1)) != CRYPT_OK) goto cleanup; - } - while (ltc_mp_cmp(t1, prime) != LTC_MP_LT) { - if ((err = ltc_mp_sub(t1, prime, t1)) != CRYPT_OK) goto cleanup; - } - - /* compare to b */ - if (ltc_mp_cmp(t1, b) != LTC_MP_EQ) { - err = CRYPT_INVALID_PACKET; - } else { - err = CRYPT_OK; - } - -cleanup: - ltc_mp_deinit_multi(t1, t2, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/ecc/ltc_ecc_is_point_at_infinity.c b/src/pk/ecc/ltc_ecc_is_point_at_infinity.c deleted file mode 100644 index ca22d50d..00000000 --- a/src/pk/ecc/ltc_ecc_is_point_at_infinity.c +++ /dev/null @@ -1,59 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -/* http://crypto.stackexchange.com/questions/41468/point-at-infinity-for-jacobian-coordinates - * a point at infinity is any point (x,y,0) such that y^2 == x^3, except (0,0,0) - */ - -int ltc_ecc_is_point_at_infinity(const ecc_point *P, const void *modulus, int *retval) -{ - int err; - void *x3, *y2; - - /* affine points in the fixed-point cache omit z entirely */ - if (P->z == NULL) { - *retval = 0; - return CRYPT_OK; - } - - /* trivial case */ - if (!ltc_mp_iszero(P->z)) { - *retval = 0; - return CRYPT_OK; - } - - /* point (0,0,0) is not at infinity */ - if (ltc_mp_iszero(P->x) && ltc_mp_iszero(P->y)) { - *retval = 0; - return CRYPT_OK; - } - - /* initialize */ - if ((err = ltc_mp_init_multi(&x3, &y2, LTC_NULL)) != CRYPT_OK) goto done; - - /* compute y^2 */ - if ((err = ltc_mp_mulmod(P->y, P->y, modulus, y2)) != CRYPT_OK) goto cleanup; - - /* compute x^3 */ - if ((err = ltc_mp_mulmod(P->x, P->x, modulus, x3)) != CRYPT_OK) goto cleanup; - if ((err = ltc_mp_mulmod(P->x, x3, modulus, x3)) != CRYPT_OK) goto cleanup; - - /* test y^2 == x^3 */ - err = CRYPT_OK; - if ((ltc_mp_cmp(x3, y2) == LTC_MP_EQ) && !ltc_mp_iszero(y2)) { - *retval = 1; - } else { - *retval = 0; - } - -cleanup: - ltc_mp_deinit_multi(x3, y2, LTC_NULL); -done: - return err; -} - -#endif diff --git a/src/pk/ecc/ltc_ecc_map.c b/src/pk/ecc/ltc_ecc_map.c deleted file mode 100644 index 228978d0..00000000 --- a/src/pk/ecc/ltc_ecc_map.c +++ /dev/null @@ -1,63 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ltc_ecc_map.c - ECC Crypto, Tom St Denis -*/ - -#ifdef LTC_MECC - -/** - Map a projective jacbobian point back to affine space - @param P [in/out] The point to map - @param modulus The modulus of the field the ECC curve is in - @param mp The "b" value from montgomery_setup() - @return CRYPT_OK on success -*/ -int ltc_ecc_map(ecc_point *P, const void *modulus, void *mp) -{ - void *t1, *t2; - int err; - - LTC_ARGCHK(P != NULL); - LTC_ARGCHK(modulus != NULL); - LTC_ARGCHK(mp != NULL); - - if (ltc_mp_iszero(P->z)) { - return ltc_ecc_set_point_xyz(0, 0, 1, P); - } - - if ((err = ltc_mp_init_multi(&t1, &t2, LTC_NULL)) != CRYPT_OK) { - return err; - } - - /* first map z back to normal */ - if ((err = ltc_mp_montgomery_reduce(P->z, modulus, mp)) != CRYPT_OK) { goto done; } - - /* get 1/z */ - if ((err = ltc_mp_invmod(P->z, modulus, t1)) != CRYPT_OK) { goto done; } - - /* get 1/z^2 and 1/z^3 */ - if ((err = ltc_mp_sqr(t1, t2)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_mod(t2, modulus, t2)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_mul(t1, t2, t1)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_mod(t1, modulus, t1)) != CRYPT_OK) { goto done; } - - /* multiply against x/y */ - if ((err = ltc_mp_mul(P->x, t2, P->x)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(P->x, modulus, mp)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_mul(P->y, t1, P->y)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(P->y, modulus, mp)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_set(P->z, 1)) != CRYPT_OK) { goto done; } - - err = CRYPT_OK; -done: - ltc_mp_deinit_multi(t1, t2, LTC_NULL); - return err; -} - -#endif - diff --git a/src/pk/ecc/ltc_ecc_mul2add.c b/src/pk/ecc/ltc_ecc_mul2add.c deleted file mode 100644 index d593efab..00000000 --- a/src/pk/ecc/ltc_ecc_mul2add.c +++ /dev/null @@ -1,192 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ltc_ecc_mul2add.c - ECC Crypto, Shamir's Trick, Tom St Denis -*/ - -#ifdef LTC_MECC - -#ifdef LTC_ECC_SHAMIR - -/** Computes kA*A + kB*B = C using Shamir's Trick - @param A First point to multiply - @param kA What to multiple A by - @param B Second point to multiply - @param kB What to multiple B by - @param C [out] Destination point (can overlap with A or B) - @param ma ECC curve parameter a in montgomery form - @param modulus Modulus for curve - @return CRYPT_OK on success -*/ -int ltc_ecc_mul2add(const ecc_point *A, void *kA, - const ecc_point *B, void *kB, - ecc_point *C, - const void *ma, - const void *modulus) -{ - ecc_point *precomp[16]; - unsigned bitbufA, bitbufB, lenA, lenB, len, nA, nB, nibble; - unsigned x, y; - unsigned char *tA, *tB; - int err, first; - void *mp, *mu; - - /* argchks */ - LTC_ARGCHK(A != NULL); - LTC_ARGCHK(B != NULL); - LTC_ARGCHK(C != NULL); - LTC_ARGCHK(kA != NULL); - LTC_ARGCHK(kB != NULL); - LTC_ARGCHK(modulus != NULL); - - /* allocate memory */ - tA = XCALLOC(1, ECC_BUF_SIZE); - if (tA == NULL) { - return CRYPT_MEM; - } - tB = XCALLOC(1, ECC_BUF_SIZE); - if (tB == NULL) { - XFREE(tA); - return CRYPT_MEM; - } - - /* get sizes */ - lenA = ltc_mp_unsigned_bin_size(kA); - lenB = ltc_mp_unsigned_bin_size(kB); - len = MAX(lenA, lenB); - - /* sanity check */ - if ((lenA > ECC_BUF_SIZE) || (lenB > ECC_BUF_SIZE)) { - err = CRYPT_INVALID_ARG; - goto ERR_T; - } - - /* extract and justify kA */ - ltc_mp_to_unsigned_bin(kA, (len - lenA) + tA); - - /* extract and justify kB */ - ltc_mp_to_unsigned_bin(kB, (len - lenB) + tB); - - /* allocate the table */ - for (x = 0; x < 16; x++) { - precomp[x] = ltc_ecc_new_point(); - if (precomp[x] == NULL) { - for (y = 0; y < x; ++y) { - ltc_ecc_del_point(precomp[y]); - } - err = CRYPT_MEM; - goto ERR_T; - } - } - - /* init montgomery reduction */ - if ((err = ltc_mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { - goto ERR_P; - } - if ((err = ltc_mp_init(&mu)) != CRYPT_OK) { - goto ERR_MP; - } - if ((err = ltc_mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) { - goto ERR_MU; - } - - /* copy ones ... */ - if ((err = ltc_mp_mulmod(A->x, mu, modulus, precomp[1]->x)) != CRYPT_OK) { goto ERR_MU; } - if ((err = ltc_mp_mulmod(A->y, mu, modulus, precomp[1]->y)) != CRYPT_OK) { goto ERR_MU; } - if ((err = ltc_mp_mulmod(A->z, mu, modulus, precomp[1]->z)) != CRYPT_OK) { goto ERR_MU; } - - if ((err = ltc_mp_mulmod(B->x, mu, modulus, precomp[1<<2]->x)) != CRYPT_OK) { goto ERR_MU; } - if ((err = ltc_mp_mulmod(B->y, mu, modulus, precomp[1<<2]->y)) != CRYPT_OK) { goto ERR_MU; } - if ((err = ltc_mp_mulmod(B->z, mu, modulus, precomp[1<<2]->z)) != CRYPT_OK) { goto ERR_MU; } - - /* precomp [i,0](A + B) table */ - if ((err = ltc_mp.ecc_ptdbl(precomp[1], precomp[2], ma, modulus, mp)) != CRYPT_OK) { goto ERR_MU; } - if ((err = ltc_mp.ecc_ptadd(precomp[1], precomp[2], precomp[3], ma, modulus, mp)) != CRYPT_OK) { goto ERR_MU; } - - /* precomp [0,i](A + B) table */ - if ((err = ltc_mp.ecc_ptdbl(precomp[1<<2], precomp[2<<2], ma, modulus, mp)) != CRYPT_OK) { goto ERR_MU; } - if ((err = ltc_mp.ecc_ptadd(precomp[1<<2], precomp[2<<2], precomp[3<<2], ma, modulus, mp)) != CRYPT_OK) { goto ERR_MU; } - - /* precomp [i,j](A + B) table (i != 0, j != 0) */ - for (x = 1; x < 4; x++) { - for (y = 1; y < 4; y++) { - if ((err = ltc_mp.ecc_ptadd(precomp[x], precomp[(y<<2)], precomp[x+(y<<2)], ma, modulus, mp)) != CRYPT_OK) { goto ERR_MU; } - } - } - - nibble = 3; - first = 1; - bitbufA = tA[0]; - bitbufB = tB[0]; - - /* for every byte of the multiplicands */ - for (x = 0;; ) { - /* grab a nibble */ - if (++nibble == 4) { - if (x == len) break; - bitbufA = tA[x]; - bitbufB = tB[x]; - nibble = 0; - ++x; - } - - /* extract two bits from both, shift/update */ - nA = (bitbufA >> 6) & 0x03; - nB = (bitbufB >> 6) & 0x03; - bitbufA = (bitbufA << 2) & 0xFF; - bitbufB = (bitbufB << 2) & 0xFF; - - /* if both zero, if first, continue */ - if ((nA == 0) && (nB == 0) && (first == 1)) { - continue; - } - - /* double twice, only if this isn't the first */ - if (first == 0) { - /* double twice */ - if ((err = ltc_mp.ecc_ptdbl(C, C, ma, modulus, mp)) != CRYPT_OK) { goto ERR_MU; } - if ((err = ltc_mp.ecc_ptdbl(C, C, ma, modulus, mp)) != CRYPT_OK) { goto ERR_MU; } - } - - /* if not both zero */ - if ((nA != 0) || (nB != 0)) { - if (first == 1) { - /* if first, copy from table */ - first = 0; - if ((err = ltc_ecc_copy_point(precomp[nA + (nB<<2)], C)) != CRYPT_OK) { goto ERR_MU; } - } else { - /* if not first, add from table */ - if ((err = ltc_mp.ecc_ptadd(C, precomp[nA + (nB<<2)], C, ma, modulus, mp)) != CRYPT_OK) { goto ERR_MU; } - } - } - } - - /* reduce to affine */ - err = ltc_ecc_map(C, modulus, mp); - - /* clean up */ -ERR_MU: - ltc_mp_clear(mu); -ERR_MP: - ltc_mp_montgomery_free(mp); -ERR_P: - for (x = 0; x < 16; x++) { - ltc_ecc_del_point(precomp[x]); - } -ERR_T: -#ifdef LTC_CLEAN_STACK - zeromem(tA, ECC_BUF_SIZE); - zeromem(tB, ECC_BUF_SIZE); -#endif - XFREE(tA); - XFREE(tB); - - return err; -} - -#endif -#endif diff --git a/src/pk/ecc/ltc_ecc_mulmod.c b/src/pk/ecc/ltc_ecc_mulmod.c deleted file mode 100644 index 230aad03..00000000 --- a/src/pk/ecc/ltc_ecc_mulmod.c +++ /dev/null @@ -1,209 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ltc_ecc_mulmod.c - ECC Crypto, Tom St Denis -*/ - -#ifdef LTC_MECC -#ifndef LTC_ECC_TIMING_RESISTANT - -/* size of sliding window, don't change this! */ -#define WINSIZE 4 - -/** - Perform a point multiplication - @param k The scalar to multiply by - @param G The base point - @param R [out] Destination for kG - @param a ECC curve parameter a - @param modulus The modulus of the field the ECC curve is in - @param map Boolean whether to map back to affine or not (1==map, 0 == leave in projective) - @return CRYPT_OK on success -*/ -int ltc_ecc_mulmod(const void *k, const ecc_point *G, ecc_point *R, const void *a, const void *modulus, int map) -{ - ecc_point *tG, *M[8]; - int i, j, err, inf; - void *mp = NULL, *mu = NULL, *ma = NULL, *a_plus3 = NULL; - ltc_mp_digit buf; - int first, bitbuf, bitcpy, bitcnt, mode, digidx; - - LTC_ARGCHK(k != NULL); - LTC_ARGCHK(G != NULL); - LTC_ARGCHK(R != NULL); - LTC_ARGCHK(modulus != NULL); - - if ((err = ltc_ecc_is_point_at_infinity(G, modulus, &inf)) != CRYPT_OK) return err; - if (inf) { - /* return the point at infinity */ - return ltc_ecc_set_point_xyz(1, 1, 0, R); - } - if (ltc_mp_iszero(k) == LTC_MP_YES) { - /* 0 * G is the point at infinity */ - return ltc_ecc_set_point_xyz(1, 1, 0, R); - } - - /* init montgomery reduction */ - if ((err = ltc_mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_init(&mu)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) { goto error; } - - /* for curves with a == -3 keep ma == NULL */ - if ((err = ltc_mp_init(&a_plus3)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_add_d(a, 3, a_plus3)) != CRYPT_OK) { goto error; } - if (ltc_mp_cmp(a_plus3, modulus) != LTC_MP_EQ) { - if ((err = ltc_mp_init(&ma)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_mulmod(a, mu, modulus, ma)) != CRYPT_OK) { goto error; } - } - - /* alloc ram for window temps */ - for (i = 0; i < 8; i++) { - M[i] = ltc_ecc_new_point(); - if (M[i] == NULL) { - for (j = 0; j < i; j++) { - ltc_ecc_del_point(M[j]); - } - err = CRYPT_MEM; - goto error; - } - } - - /* make a copy of G incase R==G */ - tG = ltc_ecc_new_point(); - if (tG == NULL) { err = CRYPT_MEM; goto done; } - - /* tG = G and convert to montgomery */ - if (ltc_mp_cmp_d(mu, 1) == LTC_MP_EQ) { - if ((err = ltc_ecc_copy_point(G, tG)) != CRYPT_OK) { goto done; } - } else { - if ((err = ltc_mp_mulmod(G->x, mu, modulus, tG->x)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_mulmod(G->y, mu, modulus, tG->y)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_mulmod(G->z, mu, modulus, tG->z)) != CRYPT_OK) { goto done; } - } - ltc_mp_clear(mu); - mu = NULL; - - /* calc the M tab, which holds kG for k==8..15 */ - /* M[0] == 8G */ - if ((err = ltc_mp.ecc_ptdbl(tG, M[0], ma, modulus, mp)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp.ecc_ptdbl(M[0], M[0], ma, modulus, mp)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp.ecc_ptdbl(M[0], M[0], ma, modulus, mp)) != CRYPT_OK) { goto done; } - - /* now find (8+k)G for k=1..7 */ - for (j = 9; j < 16; j++) { - if ((err = ltc_mp.ecc_ptadd(M[j-9], tG, M[j-8], ma, modulus, mp)) != CRYPT_OK) { goto done; } - } - - /* setup sliding window */ - mode = 0; - bitcnt = 1; - buf = 0; - digidx = ltc_mp_get_digit_count(k) - 1; - bitcpy = bitbuf = 0; - first = 1; - - /* perform ops */ - for (;;) { - /* grab next digit as required */ - if (--bitcnt == 0) { - if (digidx == -1) { - break; - } - buf = ltc_mp_get_digit(k, digidx); - bitcnt = (int) ltc_mp.bits_per_digit; - --digidx; - } - - /* grab the next msb from the ltiplicand */ - i = (buf >> (ltc_mp.bits_per_digit - 1)) & 1; - buf <<= 1; - - /* skip leading zero bits */ - if (mode == 0 && i == 0) { - continue; - } - - /* if the bit is zero and mode == 1 then we double */ - if (mode == 1 && i == 0) { - if ((err = ltc_mp.ecc_ptdbl(R, R, ma, modulus, mp)) != CRYPT_OK) { goto done; } - continue; - } - - /* else we add it to the window */ - bitbuf |= (i << (WINSIZE - ++bitcpy)); - mode = 2; - - if (bitcpy == WINSIZE) { - /* if this is the first window we do a simple copy */ - if (first == 1) { - /* R = kG [k = first window] */ - if ((err = ltc_ecc_copy_point(M[bitbuf-8], R)) != CRYPT_OK) { goto done; } - first = 0; - } else { - /* normal window */ - /* ok window is filled so double as required and add */ - /* double first */ - for (j = 0; j < WINSIZE; j++) { - if ((err = ltc_mp.ecc_ptdbl(R, R, ma, modulus, mp)) != CRYPT_OK) { goto done; } - } - - /* then add, bitbuf will be 8..15 [8..2^WINSIZE] guaranteed */ - if ((err = ltc_mp.ecc_ptadd(R, M[bitbuf-8], R, ma, modulus, mp)) != CRYPT_OK) { goto done; } - } - /* empty window and reset */ - bitcpy = bitbuf = 0; - mode = 1; - } - } - - /* if bits remain then double/add */ - if (mode == 2 && bitcpy > 0) { - /* double then add */ - for (j = 0; j < bitcpy; j++) { - /* only double if we have had at least one add first */ - if (first == 0) { - if ((err = ltc_mp.ecc_ptdbl(R, R, ma, modulus, mp)) != CRYPT_OK) { goto done; } - } - - bitbuf <<= 1; - if ((bitbuf & (1 << WINSIZE)) != 0) { - if (first == 1){ - /* first add, so copy */ - if ((err = ltc_ecc_copy_point(tG, R)) != CRYPT_OK) { goto done; } - first = 0; - } else { - /* then add */ - if ((err = ltc_mp.ecc_ptadd(R, tG, R, ma, modulus, mp)) != CRYPT_OK) { goto done; } - } - } - } - } - - /* map R back from projective space */ - if (map) { - err = ltc_ecc_map(R, modulus, mp); - } else { - err = CRYPT_OK; - } -done: - ltc_ecc_del_point(tG); - for (i = 0; i < 8; i++) { - ltc_ecc_del_point(M[i]); - } -error: - if (ma != NULL) ltc_mp_clear(ma); - if (a_plus3 != NULL) ltc_mp_clear(a_plus3); - if (mu != NULL) ltc_mp_clear(mu); - if (mp != NULL) ltc_mp_montgomery_free(mp); - return err; -} - -#endif - -#undef WINSIZE - -#endif diff --git a/src/pk/ecc/ltc_ecc_mulmod_timing.c b/src/pk/ecc/ltc_ecc_mulmod_timing.c deleted file mode 100644 index b263d37b..00000000 --- a/src/pk/ecc/ltc_ecc_mulmod_timing.c +++ /dev/null @@ -1,155 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ltc_ecc_mulmod_timing.c - ECC Crypto, Tom St Denis -*/ - -#ifdef LTC_MECC - -#ifdef LTC_ECC_TIMING_RESISTANT - -/** - Perform a point multiplication (timing resistant) - @param k The scalar to multiply by - @param G The base point - @param R [out] Destination for kG - @param a ECC curve parameter a - @param modulus The modulus of the field the ECC curve is in - @param map Boolean whether to map back to affine or not (1==map, 0 == leave in projective) - @return CRYPT_OK on success -*/ -int ltc_ecc_mulmod(const void *k, const ecc_point *G, ecc_point *R, const void *a, const void *modulus, int map) -{ - ecc_point *tG, *M[3]; - int i, j, err, inf; - void *mp = NULL, *mu = NULL, *ma = NULL, *a_plus3 = NULL; - ltc_mp_digit buf; - int bitcnt, mode, digidx; - - LTC_ARGCHK(k != NULL); - LTC_ARGCHK(G != NULL); - LTC_ARGCHK(R != NULL); - LTC_ARGCHK(modulus != NULL); - - if ((err = ltc_ecc_is_point_at_infinity(G, modulus, &inf)) != CRYPT_OK) return err; - if (inf) { - /* return the point at infinity */ - return ltc_ecc_set_point_xyz(1, 1, 0, R); - } - if (ltc_mp_iszero(k) == LTC_MP_YES) { - /* 0 * G is the point at infinity */ - return ltc_ecc_set_point_xyz(1, 1, 0, R); - } - - /* init montgomery reduction */ - if ((err = ltc_mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_init(&mu)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) { goto error; } - - /* for curves with a == -3 keep ma == NULL */ - if ((err = ltc_mp_init(&a_plus3)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_add_d(a, 3, a_plus3)) != CRYPT_OK) { goto error; } - if (ltc_mp_cmp(a_plus3, modulus) != LTC_MP_EQ) { - if ((err = ltc_mp_init(&ma)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_mulmod(a, mu, modulus, ma)) != CRYPT_OK) { goto error; } - } - - /* alloc ram for window temps */ - for (i = 0; i < 3; i++) { - M[i] = ltc_ecc_new_point(); - if (M[i] == NULL) { - for (j = 0; j < i; j++) { - ltc_ecc_del_point(M[j]); - } - ltc_mp_clear(mu); - ltc_mp_montgomery_free(mp); - return CRYPT_MEM; - } - } - - /* make a copy of G incase R==G */ - tG = ltc_ecc_new_point(); - if (tG == NULL) { err = CRYPT_MEM; goto done; } - - /* tG = G and convert to montgomery */ - if ((err = ltc_mp_mulmod(G->x, mu, modulus, tG->x)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_mulmod(G->y, mu, modulus, tG->y)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_mulmod(G->z, mu, modulus, tG->z)) != CRYPT_OK) { goto done; } - ltc_mp_clear(mu); - mu = NULL; - - /* calc the M tab */ - /* M[0] == G */ - if ((err = ltc_ecc_copy_point(tG, M[0])) != CRYPT_OK) { goto done; } - /* M[1] == 2G */ - if ((err = ltc_mp.ecc_ptdbl(tG, M[1], ma, modulus, mp)) != CRYPT_OK) { goto done; } - - /* setup sliding window */ - mode = 0; - bitcnt = 1; - buf = 0; - digidx = ltc_mp_get_digit_count(k) - 1; - - /* perform ops */ - for (;;) { - /* grab next digit as required */ - if (--bitcnt == 0) { - if (digidx == -1) { - break; - } - buf = ltc_mp_get_digit(k, digidx); - bitcnt = (int) LTC_MP_DIGIT_BIT; - --digidx; - } - - /* grab the next msb from the ltiplicand */ - i = (int)((buf >> (LTC_MP_DIGIT_BIT - 1)) & 1); - buf <<= 1; - - if (mode == 0 && i == 0) { - /* dummy operations */ - if ((err = ltc_mp.ecc_ptadd(M[0], M[1], M[2], ma, modulus, mp)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp.ecc_ptdbl(M[1], M[2], ma, modulus, mp)) != CRYPT_OK) { goto done; } - continue; - } - - if (mode == 0 && i == 1) { - mode = 1; - /* dummy operations */ - if ((err = ltc_mp.ecc_ptadd(M[0], M[1], M[2], ma, modulus, mp)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp.ecc_ptdbl(M[1], M[2], ma, modulus, mp)) != CRYPT_OK) { goto done; } - continue; - } - - if ((err = ltc_mp.ecc_ptadd(M[0], M[1], M[i^1], ma, modulus, mp)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp.ecc_ptdbl(M[i], M[i], ma, modulus, mp)) != CRYPT_OK) { goto done; } - } - - /* copy result out */ - if ((err = ltc_ecc_copy_point(M[0], R)) != CRYPT_OK) { goto done; } - - /* map R back from projective space */ - if (map) { - err = ltc_ecc_map(R, modulus, mp); - } else { - err = CRYPT_OK; - } -done: - ltc_ecc_del_point(tG); - for (i = 0; i < 3; i++) { - ltc_ecc_del_point(M[i]); - } -error: - if (ma != NULL) ltc_mp_clear(ma); - if (a_plus3 != NULL) ltc_mp_clear(a_plus3); - if (mu != NULL) ltc_mp_clear(mu); - if (mp != NULL) ltc_mp_montgomery_free(mp); - return err; -} - -#endif -#endif diff --git a/src/pk/ecc/ltc_ecc_points.c b/src/pk/ecc/ltc_ecc_points.c deleted file mode 100644 index 79adb55e..00000000 --- a/src/pk/ecc/ltc_ecc_points.c +++ /dev/null @@ -1,61 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ltc_ecc_points.c - ECC Crypto, Tom St Denis -*/ - -#ifdef LTC_MECC - -/** - Allocate a new ECC point - @return A newly allocated point or NULL on error -*/ -ecc_point *ltc_ecc_new_point(void) -{ - ecc_point *p; - p = XCALLOC(1, sizeof(*p)); - if (p == NULL) { - return NULL; - } - if (ltc_mp_init_multi(&p->x, &p->y, &p->z, LTC_NULL) != CRYPT_OK) { - XFREE(p); - return NULL; - } - return p; -} - -/** Free an ECC point from memory - @param p The point to free -*/ -void ltc_ecc_del_point(ecc_point *p) -{ - /* prevents free'ing null arguments */ - if (p != NULL) { - ltc_mp_deinit_multi(p->x, p->y, p->z, LTC_NULL); /* note: p->z may be NULL but that's ok with this function anyways */ - XFREE(p); - } -} - -int ltc_ecc_set_point_xyz(ltc_mp_digit x, ltc_mp_digit y, ltc_mp_digit z, ecc_point *p) -{ - int err; - if ((err = ltc_mp.set_int(p->x, x)) != CRYPT_OK) return err; - if ((err = ltc_mp.set_int(p->y, y)) != CRYPT_OK) return err; - if ((err = ltc_mp.set_int(p->z, z)) != CRYPT_OK) return err; - return CRYPT_OK; -} - -int ltc_ecc_copy_point(const ecc_point *src, ecc_point *dst) -{ - int err; - if ((err = ltc_mp.copy(src->x, dst->x)) != CRYPT_OK) return err; - if ((err = ltc_mp.copy(src->y, dst->y)) != CRYPT_OK) return err; - if ((err = ltc_mp.copy(src->z, dst->z)) != CRYPT_OK) return err; - return CRYPT_OK; -} - -#endif diff --git a/src/pk/ecc/ltc_ecc_projective_add_point.c b/src/pk/ecc/ltc_ecc_projective_add_point.c deleted file mode 100644 index 837710ad..00000000 --- a/src/pk/ecc/ltc_ecc_projective_add_point.c +++ /dev/null @@ -1,224 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file ltc_ecc_projective_add_point.c - ECC Crypto, Tom St Denis -*/ - -#if defined(LTC_MECC) && (!defined(LTC_MECC_ACCEL) || defined(LTM_DESC)) - -/** - Add two ECC points - @param P The point to add - @param Q The point to add - @param R [out] The destination of the double - @param ma ECC curve parameter a in montgomery form - @param modulus The modulus of the field the ECC curve is in - @param mp The "b" value from montgomery_setup() - @return CRYPT_OK on success -*/ -int ltc_ecc_projective_add_point(const ecc_point *P, const ecc_point *Q, ecc_point *R, - const void *ma, const void *modulus, void *mp) -{ - void *t1, *t2, *x, *y, *z; - int err, inf; - - LTC_ARGCHK(P != NULL); - LTC_ARGCHK(Q != NULL); - LTC_ARGCHK(R != NULL); - LTC_ARGCHK(modulus != NULL); - LTC_ARGCHK(mp != NULL); - - if ((err = ltc_mp_init_multi(&t1, &t2, &x, &y, &z, LTC_NULL)) != CRYPT_OK) { - return err; - } - - /* treat internal Z == 0 states as infinity (for elliptic-curve addition: infinity = identity element) */ - if (P->z != NULL && ltc_mp_iszero(P->z)) { - if (Q->z != NULL && ltc_mp_iszero(Q->z)) { - /* inf + inf = inf */ - err = ltc_ecc_set_point_xyz(1, 1, 0, R); - } - else { - /* inf + Q = Q */ - err = ltc_ecc_copy_point(Q, R); - } - goto done; - } - if (Q->z != NULL && ltc_mp_iszero(Q->z)) { - /* P + inf = P */ - err = ltc_ecc_copy_point(P, R); - goto done; - } - - if ((err = ltc_ecc_is_point_at_infinity(P, modulus, &inf)) != CRYPT_OK) return err; - if (inf) { - /* P is point at infinity >> Result = Q */ - err = ltc_ecc_copy_point(Q, R); - goto done; - } - - if ((err = ltc_ecc_is_point_at_infinity(Q, modulus, &inf)) != CRYPT_OK) return err; - if (inf) { - /* Q is point at infinity >> Result = P */ - err = ltc_ecc_copy_point(P, R); - goto done; - } - - if ((ltc_mp_cmp(P->x, Q->x) == LTC_MP_EQ) && (ltc_mp_cmp(P->z, Q->z) == LTC_MP_EQ)) { - if (ltc_mp_cmp(P->y, Q->y) == LTC_MP_EQ) { -dbl_point: - /* here P = Q >> Result = 2 * P (use doubling) */ - ltc_mp_deinit_multi(t1, t2, x, y, z, LTC_NULL); - return ltc_ecc_projective_dbl_point(P, R, ma, modulus, mp); - } - if ((err = ltc_mp_sub(modulus, Q->y, t1)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp(P->y, t1) == LTC_MP_EQ) { - /* here Q = -P >>> Result = the point at infinity */ - err = ltc_ecc_set_point_xyz(1, 1, 0, R); - goto done; - } - } - - if ((err = ltc_mp_copy(P->x, x)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_copy(P->y, y)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_copy(P->z, z)) != CRYPT_OK) { goto done; } - - /* if Z is one then these are no-operations */ - if (Q->z != NULL) { - /* T1 = Z' * Z' */ - if ((err = ltc_mp_sqr(Q->z, t1)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { goto done; } - /* X = X * T1 */ - if ((err = ltc_mp_mul(t1, x, x)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(x, modulus, mp)) != CRYPT_OK) { goto done; } - /* T1 = Z' * T1 */ - if ((err = ltc_mp_mul(Q->z, t1, t1)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { goto done; } - /* Y = Y * T1 */ - if ((err = ltc_mp_mul(t1, y, y)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(y, modulus, mp)) != CRYPT_OK) { goto done; } - } - - /* T1 = Z*Z */ - if ((err = ltc_mp_sqr(z, t1)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { goto done; } - /* T2 = X' * T1 */ - if ((err = ltc_mp_mul(Q->x, t1, t2)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK) { goto done; } - /* T1 = Z * T1 */ - if ((err = ltc_mp_mul(z, t1, t1)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { goto done; } - /* T1 = Y' * T1 */ - if ((err = ltc_mp_mul(Q->y, t1, t1)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { goto done; } - - /* Same-affine dispatch: A==B means P,Q share affine x; dispatch to dbl or O before the formulas */ - if (ltc_mp_cmp(x, t2) == LTC_MP_EQ) { - if (ltc_mp_cmp(y, t1) == LTC_MP_EQ) goto dbl_point; - err = ltc_ecc_set_point_xyz(1, 1, 0, R); - goto done; - } - - /* Y = Y - T1 */ - if ((err = ltc_mp_sub(y, t1, y)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp_d(y, 0) == LTC_MP_LT) { - if ((err = ltc_mp_add(y, modulus, y)) != CRYPT_OK) { goto done; } - } - /* T1 = 2T1 */ - if ((err = ltc_mp_add(t1, t1, t1)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp(t1, modulus) != LTC_MP_LT) { - if ((err = ltc_mp_sub(t1, modulus, t1)) != CRYPT_OK) { goto done; } - } - /* T1 = Y + T1 */ - if ((err = ltc_mp_add(t1, y, t1)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp(t1, modulus) != LTC_MP_LT) { - if ((err = ltc_mp_sub(t1, modulus, t1)) != CRYPT_OK) { goto done; } - } - /* X = X - T2 */ - if ((err = ltc_mp_sub(x, t2, x)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp_d(x, 0) == LTC_MP_LT) { - if ((err = ltc_mp_add(x, modulus, x)) != CRYPT_OK) { goto done; } - } - /* T2 = 2T2 */ - if ((err = ltc_mp_add(t2, t2, t2)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp(t2, modulus) != LTC_MP_LT) { - if ((err = ltc_mp_sub(t2, modulus, t2)) != CRYPT_OK) { goto done; } - } - /* T2 = X + T2 */ - if ((err = ltc_mp_add(t2, x, t2)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp(t2, modulus) != LTC_MP_LT) { - if ((err = ltc_mp_sub(t2, modulus, t2)) != CRYPT_OK) { goto done; } - } - - /* if Z' != 1 */ - if (Q->z != NULL) { - /* Z = Z * Z' */ - if ((err = ltc_mp_mul(z, Q->z, z)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(z, modulus, mp)) != CRYPT_OK) { goto done; } - } - - /* Z = Z * X */ - if ((err = ltc_mp_mul(z, x, z)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(z, modulus, mp)) != CRYPT_OK) { goto done; } - - /* T1 = T1 * X */ - if ((err = ltc_mp_mul(t1, x, t1)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { goto done; } - /* X = X * X */ - if ((err = ltc_mp_sqr(x, x)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(x, modulus, mp)) != CRYPT_OK) { goto done; } - /* T2 = T2 * x */ - if ((err = ltc_mp_mul(t2, x, t2)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK) { goto done; } - /* T1 = T1 * X */ - if ((err = ltc_mp_mul(t1, x, t1)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { goto done; } - - /* X = Y*Y */ - if ((err = ltc_mp_sqr(y, x)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(x, modulus, mp)) != CRYPT_OK) { goto done; } - /* X = X - T2 */ - if ((err = ltc_mp_sub(x, t2, x)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp_d(x, 0) == LTC_MP_LT) { - if ((err = ltc_mp_add(x, modulus, x)) != CRYPT_OK) { goto done; } - } - - /* T2 = T2 - X */ - if ((err = ltc_mp_sub(t2, x, t2)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp_d(t2, 0) == LTC_MP_LT) { - if ((err = ltc_mp_add(t2, modulus, t2)) != CRYPT_OK) { goto done; } - } - /* T2 = T2 - X */ - if ((err = ltc_mp_sub(t2, x, t2)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp_d(t2, 0) == LTC_MP_LT) { - if ((err = ltc_mp_add(t2, modulus, t2)) != CRYPT_OK) { goto done; } - } - /* T2 = T2 * Y */ - if ((err = ltc_mp_mul(t2, y, t2)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK) { goto done; } - /* Y = T2 - T1 */ - if ((err = ltc_mp_sub(t2, t1, y)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp_d(y, 0) == LTC_MP_LT) { - if ((err = ltc_mp_add(y, modulus, y)) != CRYPT_OK) { goto done; } - } - /* Y = Y/2 */ - if (ltc_mp_isodd(y)) { - if ((err = ltc_mp_add(y, modulus, y)) != CRYPT_OK) { goto done; } - } - if ((err = ltc_mp_div_2(y, y)) != CRYPT_OK) { goto done; } - - if ((err = ltc_mp_copy(x, R->x)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_copy(y, R->y)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_copy(z, R->z)) != CRYPT_OK) { goto done; } - - err = CRYPT_OK; -done: - ltc_mp_deinit_multi(t1, t2, x, y, z, LTC_NULL); - return err; -} - -#endif diff --git a/src/pk/ecc/ltc_ecc_projective_dbl_point.c b/src/pk/ecc/ltc_ecc_projective_dbl_point.c deleted file mode 100644 index 90c71f13..00000000 --- a/src/pk/ecc/ltc_ecc_projective_dbl_point.c +++ /dev/null @@ -1,188 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/* ### Point doubling in Jacobian coordinate system ### - * - * let us have a curve: y^2 = x^3 + a*x + b - * in Jacobian coordinates it becomes: y^2 = x^3 + a*x*z^4 + b*z^6 - * - * The doubling of P = (Xp, Yp, Zp) is given by R = (Xr, Yr, Zr) where: - * Xr = M^2 - 2*S - * Yr = M * (S - Xr) - 8*T - * Zr = 2 * Yp * Zp - * - * M = 3 * Xp^2 + a*Zp^4 - * T = Yp^4 - * S = 4 * Xp * Yp^2 - * - * SPECIAL CASE: when a == -3 we can compute M as - * M = 3 * (Xp^2 - Zp^4) = 3 * (Xp + Zp^2) * (Xp - Zp^2) - */ - -/** - @file ltc_ecc_projective_dbl_point.c - ECC Crypto, Tom St Denis -*/ - -#if defined(LTC_MECC) && (!defined(LTC_MECC_ACCEL) || defined(LTM_DESC)) - -/** - Double an ECC point - @param P The point to double - @param R [out] The destination of the double - @param ma ECC curve parameter a in montgomery form - @param modulus The modulus of the field the ECC curve is in - @param mp The "b" value from montgomery_setup() - @return CRYPT_OK on success -*/ -int ltc_ecc_projective_dbl_point(const ecc_point *P, ecc_point *R, const void *ma, const void *modulus, void *mp) -{ - void *t1, *t2; - int err, inf; - - LTC_ARGCHK(P != NULL); - LTC_ARGCHK(R != NULL); - LTC_ARGCHK(modulus != NULL); - LTC_ARGCHK(mp != NULL); - - if ((err = ltc_mp_init_multi(&t1, &t2, LTC_NULL)) != CRYPT_OK) { - return err; - } - - if (P != R) { - if ((err = ltc_ecc_copy_point(P, R)) != CRYPT_OK) { goto done; } - } - - if ((err = ltc_ecc_is_point_at_infinity(P, modulus, &inf)) != CRYPT_OK) return err; - if (inf) { - /* if P is point at infinity >> Result = point at infinity */ - err = ltc_ecc_set_point_xyz(1, 1, 0, R); - goto done; - } - - /* Y == 0 or Z == 0 doubles to infinity */ - if (ltc_mp_iszero(R->y) || ltc_mp_iszero(R->z)) { - err = ltc_ecc_set_point_xyz(1, 1, 0, R); - goto done; - } - - /* t1 = Z * Z */ - if ((err = ltc_mp_sqr(R->z, t1)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { goto done; } - /* Z = Y * Z */ - if ((err = ltc_mp_mul(R->z, R->y, R->z)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(R->z, modulus, mp)) != CRYPT_OK) { goto done; } - /* Z = 2Z */ - if ((err = ltc_mp_add(R->z, R->z, R->z)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp(R->z, modulus) != LTC_MP_LT) { - if ((err = ltc_mp_sub(R->z, modulus, R->z)) != CRYPT_OK) { goto done; } - } - - if (ma == NULL) { /* special case for curves with a == -3 (10% faster than general case) */ - /* T2 = X - T1 */ - if ((err = ltc_mp_sub(R->x, t1, t2)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp_d(t2, 0) == LTC_MP_LT) { - if ((err = ltc_mp_add(t2, modulus, t2)) != CRYPT_OK) { goto done; } - } - /* T1 = X + T1 */ - if ((err = ltc_mp_add(t1, R->x, t1)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp(t1, modulus) != LTC_MP_LT) { - if ((err = ltc_mp_sub(t1, modulus, t1)) != CRYPT_OK) { goto done; } - } - /* T2 = T1 * T2 */ - if ((err = ltc_mp_mul(t1, t2, t2)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK) { goto done; } - /* T1 = 2T2 */ - if ((err = ltc_mp_add(t2, t2, t1)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp(t1, modulus) != LTC_MP_LT) { - if ((err = ltc_mp_sub(t1, modulus, t1)) != CRYPT_OK) { goto done; } - } - /* T1 = T1 + T2 */ - if ((err = ltc_mp_add(t1, t2, t1)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp(t1, modulus) != LTC_MP_LT) { - if ((err = ltc_mp_sub(t1, modulus, t1)) != CRYPT_OK) { goto done; } - } - } - else { - /* T2 = T1 * T1 */ - if ((err = ltc_mp_sqr(t1, t2)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK) { goto done; } - /* T1 = T2 * a */ - if ((err = ltc_mp_mul(t2, ma, t1)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { goto done; } - /* T2 = X * X */ - if ((err = ltc_mp_sqr(R->x, t2)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK) { goto done; } - /* T1 = T2 + T1 */ - if ((err = ltc_mp_add(t1, t2, t1)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp(t1, modulus) != LTC_MP_LT) { - if ((err = ltc_mp_sub(t1, modulus, t1)) != CRYPT_OK) { goto done; } - } - /* T1 = T2 + T1 */ - if ((err = ltc_mp_add(t1, t2, t1)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp(t1, modulus) != LTC_MP_LT) { - if ((err = ltc_mp_sub(t1, modulus, t1)) != CRYPT_OK) { goto done; } - } - /* T1 = T2 + T1 */ - if ((err = ltc_mp_add(t1, t2, t1)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp(t1, modulus) != LTC_MP_LT) { - if ((err = ltc_mp_sub(t1, modulus, t1)) != CRYPT_OK) { goto done; } - } - } - - /* Y = 2Y */ - if ((err = ltc_mp_add(R->y, R->y, R->y)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp(R->y, modulus) != LTC_MP_LT) { - if ((err = ltc_mp_sub(R->y, modulus, R->y)) != CRYPT_OK) { goto done; } - } - /* Y = Y * Y */ - if ((err = ltc_mp_sqr(R->y, R->y)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(R->y, modulus, mp)) != CRYPT_OK) { goto done; } - /* T2 = Y * Y */ - if ((err = ltc_mp_sqr(R->y, t2)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK) { goto done; } - /* T2 = T2/2 */ - if (ltc_mp_isodd(t2)) { - if ((err = ltc_mp_add(t2, modulus, t2)) != CRYPT_OK) { goto done; } - } - if ((err = ltc_mp_div_2(t2, t2)) != CRYPT_OK) { goto done; } - /* Y = Y * X */ - if ((err = ltc_mp_mul(R->y, R->x, R->y)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(R->y, modulus, mp)) != CRYPT_OK) { goto done; } - - /* X = T1 * T1 */ - if ((err = ltc_mp_sqr(t1, R->x)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(R->x, modulus, mp)) != CRYPT_OK) { goto done; } - /* X = X - Y */ - if ((err = ltc_mp_sub(R->x, R->y, R->x)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp_d(R->x, 0) == LTC_MP_LT) { - if ((err = ltc_mp_add(R->x, modulus, R->x)) != CRYPT_OK) { goto done; } - } - /* X = X - Y */ - if ((err = ltc_mp_sub(R->x, R->y, R->x)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp_d(R->x, 0) == LTC_MP_LT) { - if ((err = ltc_mp_add(R->x, modulus, R->x)) != CRYPT_OK) { goto done; } - } - - /* Y = Y - X */ - if ((err = ltc_mp_sub(R->y, R->x, R->y)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp_d(R->y, 0) == LTC_MP_LT) { - if ((err = ltc_mp_add(R->y, modulus, R->y)) != CRYPT_OK) { goto done; } - } - /* Y = Y * T1 */ - if ((err = ltc_mp_mul(R->y, t1, R->y)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_montgomery_reduce(R->y, modulus, mp)) != CRYPT_OK) { goto done; } - /* Y = Y - T2 */ - if ((err = ltc_mp_sub(R->y, t2, R->y)) != CRYPT_OK) { goto done; } - if (ltc_mp_cmp_d(R->y, 0) == LTC_MP_LT) { - if ((err = ltc_mp_add(R->y, modulus, R->y)) != CRYPT_OK) { goto done; } - } - - err = CRYPT_OK; -done: - ltc_mp_deinit_multi(t2, t1, LTC_NULL); - return err; -} -#endif diff --git a/src/pk/ecc/ltc_ecc_verify_key.c b/src/pk/ecc/ltc_ecc_verify_key.c deleted file mode 100644 index d196a1df..00000000 --- a/src/pk/ecc/ltc_ecc_verify_key.c +++ /dev/null @@ -1,59 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/* origin of this code - OLPC */ - -#ifdef LTC_MECC - -/** - Verify a key according to ANSI spec - @param key The key to validate - @return CRYPT_OK if successful -*/ - -int ltc_ecc_verify_key(const ecc_key *key) -{ - int err, inf; - ecc_point *point; - void *prime = key->dp.prime; - void *order = key->dp.order; - void *a = key->dp.A; - - /* Test 1: Are the x and y points of the public key in the field? */ - if (ltc_mp.compare_d(key->pubkey.z, 1) == LTC_MP_EQ) { - if ((ltc_mp.compare(key->pubkey.x, prime) != LTC_MP_LT) || - (ltc_mp.compare(key->pubkey.y, prime) != LTC_MP_LT) || - (ltc_mp.compare_d(key->pubkey.x, 0) == LTC_MP_LT) || - (ltc_mp.compare_d(key->pubkey.y, 0) == LTC_MP_LT) || - (ltc_mp_iszero(key->pubkey.x) && ltc_mp_iszero(key->pubkey.y)) - ) - { - err = CRYPT_INVALID_PACKET; - goto done2; - } - } - - /* Test 2: is the public key on the curve? */ - if ((err = ltc_ecc_is_point(&key->dp, key->pubkey.x, key->pubkey.y)) != CRYPT_OK) { goto done2; } - - /* Test 3: does nG = O? (n = order, O = point at infinity, G = public key) */ - point = ltc_ecc_new_point(); - if ((err = ltc_ecc_mulmod(order, &(key->pubkey), point, a, prime, 0)) != CRYPT_OK) { goto done1; } - - err = ltc_ecc_is_point_at_infinity(point, prime, &inf); - if (err != CRYPT_OK || !inf) { - err = CRYPT_ERROR; - } - else { - err = CRYPT_OK; - } - -done1: - ltc_ecc_del_point(point); -done2: - return err; -} - -#endif diff --git a/src/pk/ed25519/ed25519_export.c b/src/pk/ed25519/ed25519_export.c deleted file mode 100644 index 5ec68eb2..00000000 --- a/src/pk/ed25519/ed25519_export.c +++ /dev/null @@ -1,31 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed25519_export.c - Export an Ed25519 key to a binary packet, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -/** - Export an Ed25519 key to a binary packet - @param out [out] The destination for the key - @param outlen [in/out] The max size and resulting size of the Ed25519 key - @param type Which type of key (PK_PRIVATE, PK_PUBLIC|PK_STD or PK_PUBLIC) - @param key The key you wish to export - @return CRYPT_OK if successful -*/ -int ed25519_export( unsigned char *out, unsigned long *outlen, - int which, - const curve25519_key *key) -{ - LTC_ARGCHK(key != NULL); - - if (key->pka != LTC_PKA_ED25519) return CRYPT_PK_INVALID_TYPE; - - return ec25519_export(out, outlen, which, key); -} - -#endif diff --git a/src/pk/ed25519/ed25519_import.c b/src/pk/ed25519/ed25519_import.c deleted file mode 100644 index 634780c4..00000000 --- a/src/pk/ed25519/ed25519_import.c +++ /dev/null @@ -1,35 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed25519_import.c - Import a Ed25519 key from a SubjectPublicKeyInfo, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -/** - Import an Ed25519 public key - @param in The packet to read - @param inlen The length of the input packet - @param key [out] Where to import the key to - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int ed25519_import(const unsigned char *in, unsigned long inlen, curve25519_key *key) -{ - int err; - unsigned long key_len; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - - key_len = sizeof(key->pub); - if ((err = x509_decode_subject_public_key_info(in, inlen, LTC_OID_ED25519, key->pub, &key_len, LTC_ASN1_EOL, NULL, 0uL)) == CRYPT_OK) { - key->type = PK_PUBLIC; - key->pka = LTC_PKA_ED25519; - } - return err; -} - -#endif diff --git a/src/pk/ed25519/ed25519_import_pkcs8.c b/src/pk/ed25519/ed25519_import_pkcs8.c deleted file mode 100644 index b1e68332..00000000 --- a/src/pk/ed25519/ed25519_import_pkcs8.c +++ /dev/null @@ -1,33 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed25519_import_pkcs8.c - Import an Ed25519 key in PKCS#8 format, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -int ed25519_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, - curve25519_key *key) -{ - return ec25519_import_pkcs8_asn1(alg_id, priv_key, LTC_OID_ED25519, key); -} - -/** - Import an Ed25519 private key in PKCS#8 format - @param in The packet to import from - @param inlen It's length (octets) - @param pw_ctx The password context when decrypting the private key - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int ed25519_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - curve25519_key *key) -{ - return ec25519_import_pkcs8(in, inlen, pw_ctx, LTC_OID_ED25519, key); -} - -#endif diff --git a/src/pk/ed25519/ed25519_import_raw.c b/src/pk/ed25519/ed25519_import_raw.c deleted file mode 100644 index 6d470739..00000000 --- a/src/pk/ed25519/ed25519_import_raw.c +++ /dev/null @@ -1,46 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed25519_import_raw.c - Set the parameters of an Ed25519 key, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -/** - Set the parameters of an Ed25519 key - - @param in The key - @param inlen The length of the key - @param which Which type of key (PK_PRIVATE or PK_PUBLIC) - @param key [out] Destination of the key - @return CRYPT_OK if successful -*/ -int ed25519_import_raw(const unsigned char *in, unsigned long inlen, int which, curve25519_key *key) -{ - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - - if (which == PK_PRIVATE) { - LTC_ARGCHK(inlen == 32uL || inlen == 64uL); - XMEMCPY(key->priv, in, sizeof(key->priv)); - if (inlen == 32) { - tweetnacl_crypto_sk_to_pk(key->pub, key->priv); - } else { - XMEMCPY(key->pub, in + 32, sizeof(key->pub)); - } - } else if (which == PK_PUBLIC) { - LTC_ARGCHK(inlen == 32uL); - XMEMCPY(key->pub, in, sizeof(key->pub)); - } else { - return CRYPT_INVALID_ARG; - } - key->pka = LTC_PKA_ED25519; - key->type = which; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/ed25519/ed25519_import_x509.c b/src/pk/ed25519/ed25519_import_x509.c deleted file mode 100644 index 306a0e1e..00000000 --- a/src/pk/ed25519/ed25519_import_x509.c +++ /dev/null @@ -1,45 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed25519_import_x509.c - Import an Ed25519 key from a X.509 certificate, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -static int s_ed25519_decode(const unsigned char *in, unsigned long inlen, curve25519_key *key) -{ - if (inlen != sizeof(key->pub)) return CRYPT_PK_INVALID_SIZE; - XMEMCPY(key->pub, in, sizeof(key->pub)); - return CRYPT_OK; -} - -/** - Import an Ed25519 public key from a X.509 certificate - @param in The DER encoded X.509 certificate - @param inlen The length of the certificate - @param key [out] Where to import the key to - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int ed25519_import_x509(const unsigned char *in, unsigned long inlen, curve25519_key *key) -{ - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - - if ((err = x509_decode_public_key_from_certificate(in, inlen, - LTC_OID_ED25519, - LTC_ASN1_EOL, NULL, NULL, - (public_key_decode_cb)s_ed25519_decode, key)) != CRYPT_OK) { - return err; - } - key->type = PK_PUBLIC; - key->pka = LTC_PKA_ED25519; - - return err; -} - -#endif diff --git a/src/pk/ed25519/ed25519_make_key.c b/src/pk/ed25519/ed25519_make_key.c deleted file mode 100644 index 289313b5..00000000 --- a/src/pk/ed25519/ed25519_make_key.c +++ /dev/null @@ -1,36 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed25519_make_key.c - Create an Ed25519 key, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -/** - Create an Ed25519 key - @param prng An active PRNG state - @param wprng The index of the PRNG desired - @param key [out] Destination of a newly created private key pair - @return CRYPT_OK if successful -*/ -int ed25519_make_key(prng_state *prng, int wprng, curve25519_key *key) -{ - int err; - - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(key != NULL); - - if ((err = tweetnacl_crypto_sign_keypair(prng, wprng, key->pub, key->priv)) != CRYPT_OK) { - return err; - } - - key->type = PK_PRIVATE; - key->pka = LTC_PKA_ED25519; - - return err; -} - -#endif diff --git a/src/pk/ed25519/ed25519_sign.c b/src/pk/ed25519/ed25519_sign.c deleted file mode 100644 index 193bfcdb..00000000 --- a/src/pk/ed25519/ed25519_sign.c +++ /dev/null @@ -1,127 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed25519_shared_secret.c - Create an Ed25519 signature, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -static int s_ed25519_sign(const unsigned char *msg, unsigned long msglen, - unsigned char *sig, unsigned long *siglen, - const unsigned char *ctx, unsigned long ctxlen, - const curve25519_key *private_key) -{ - unsigned char *s; - unsigned long long smlen; - int err; - - LTC_ARGCHK(msg != NULL); - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(siglen != NULL); - LTC_ARGCHK(private_key != NULL); - - if (find_hash("sha512") == -1) return CRYPT_INVALID_HASH; - if (private_key->pka != LTC_PKA_ED25519) return CRYPT_PK_INVALID_TYPE; - if (private_key->type != PK_PRIVATE) return CRYPT_PK_INVALID_TYPE; - - if (*siglen < 64uL) { - *siglen = 64uL; - return CRYPT_BUFFER_OVERFLOW; - } - - smlen = msglen + 64; - s = XMALLOC(smlen); - if (s == NULL) return CRYPT_MEM; - - err = tweetnacl_crypto_sign(s, &smlen, - msg, msglen, - private_key->priv, private_key->pub, - ctx, ctxlen); - - XMEMCPY(sig, s, 64uL); - *siglen = 64uL; - -#ifdef LTC_CLEAN_STACK - zeromem(s, smlen); -#endif - XFREE(s); - - return err; -} - -/** - Create an Ed25519ctx signature. - @param msg The data to be signed - @param msglen [in] The size of the date to be signed - @param sig [out] The destination of the shared data - @param siglen [in/out] The max size and resulting size of the shared data. - @param ctx [in] The context is a constant null terminated string - @param private_key The private Ed25519 key in the pair - @return CRYPT_OK if successful -*/ -int ed25519ctx_sign(const unsigned char *msg, unsigned long msglen, - unsigned char *sig, unsigned long *siglen, - const unsigned char *ctx, unsigned long ctxlen, - const curve25519_key *private_key) -{ - int err; - unsigned char ctx_prefix[292]; - unsigned long ctx_prefix_size = sizeof(ctx_prefix); - - LTC_ARGCHK(ctx != NULL); - - if ((err = ec25519_crypto_ctx(ctx_prefix, &ctx_prefix_size, 0, ctx, ctxlen)) != CRYPT_OK) - return err; - - return s_ed25519_sign(msg, msglen, sig, siglen, ctx_prefix, ctx_prefix_size, private_key); -} - -/** - Create an Ed25519ph signature. - @param msg The data to be signed - @param msglen [in] The size of the date to be signed - @param sig [out] The destination of the shared data - @param siglen [in/out] The max size and resulting size of the shared data. - @param ctx [in] The context is a constant null terminated string - @param private_key The private Ed25519 key in the pair - @return CRYPT_OK if successful -*/ -int ed25519ph_sign(const unsigned char *msg, unsigned long msglen, - unsigned char *sig, unsigned long *siglen, - const unsigned char *ctx, unsigned long ctxlen, - const curve25519_key *private_key) -{ - int err; - unsigned char msg_hash[64]; - unsigned char ctx_prefix[292]; - unsigned long ctx_prefix_size = sizeof(ctx_prefix); - - if ((err = ec25519_crypto_ctx(ctx_prefix, &ctx_prefix_size, 1, ctx, ctxlen)) != CRYPT_OK) - return err; - - if ((err = tweetnacl_crypto_ph(msg_hash, msg, msglen)) != CRYPT_OK) - return err; - - return s_ed25519_sign(msg_hash, sizeof(msg_hash), sig, siglen, ctx_prefix, ctx_prefix_size, private_key); -} - -/** - Create an Ed25519 signature. - @param msg The data to be signed - @param msglen [in] The size of the date to be signed - @param sig [out] The destination of the shared data - @param siglen [in/out] The max size and resulting size of the shared data. - @param private_key The private Ed25519 key in the pair - @return CRYPT_OK if successful -*/ -int ed25519_sign(const unsigned char *msg, unsigned long msglen, - unsigned char *sig, unsigned long *siglen, - const curve25519_key *private_key) -{ - return s_ed25519_sign(msg, msglen, sig, siglen, NULL, 0, private_key); -} - -#endif diff --git a/src/pk/ed25519/ed25519_verify.c b/src/pk/ed25519/ed25519_verify.c deleted file mode 100644 index 033b3932..00000000 --- a/src/pk/ed25519/ed25519_verify.c +++ /dev/null @@ -1,144 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed25519_verify.c - Verify an Ed25519 signature, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -static int s_ed25519_verify(const unsigned char *msg, unsigned long msglen, - const unsigned char *sig, unsigned long siglen, - const unsigned char *ctx, unsigned long ctxlen, - int *stat, - const curve25519_key *public_key) -{ - unsigned char* m; - unsigned long long mlen; - int err; - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - LTC_ARGCHK(msg != NULL); - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(public_key != NULL); - - if (find_hash("sha512") == -1) return CRYPT_INVALID_HASH; - if (siglen != 64uL) return CRYPT_INVALID_ARG; - if (public_key->pka != LTC_PKA_ED25519) return CRYPT_PK_INVALID_TYPE; - - mlen = msglen + siglen; - if ((mlen < msglen) || (mlen < siglen)) return CRYPT_OVERFLOW; - - m = XMALLOC(mlen); - if (m == NULL) return CRYPT_MEM; - - XMEMCPY(m, sig, siglen); - XMEMCPY(m + siglen, msg, msglen); - - err = tweetnacl_crypto_sign_open(stat, - m, &mlen, - m, mlen, - ctx, ctxlen, - public_key->pub); - -#ifdef LTC_CLEAN_STACK - zeromem(m, msglen + siglen); -#endif - XFREE(m); - - return err; -} - -/** - Verify an Ed25519ctx signature. - @param msg [in] The data to be verified - @param msglen [in] The size of the data to be verified - @param sig [in] The signature to be verified - @param siglen [in] The size of the signature to be verified - @param ctx [in] The context - @param ctxlen [in] The size of the context - @param stat [out] The result of the signature verification, 1==valid, 0==invalid - @param public_key [in] The public Ed25519 key in the pair - @return CRYPT_OK if successful -*/ -int ed25519ctx_verify(const unsigned char *msg, unsigned long msglen, - const unsigned char *sig, unsigned long siglen, - const unsigned char *ctx, unsigned long ctxlen, - int *stat, - const curve25519_key *public_key) -{ - unsigned char ctx_prefix[292]; - unsigned long ctx_prefix_size = sizeof(ctx_prefix); - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - LTC_ARGCHK(ctx != NULL); - - if (ec25519_crypto_ctx(ctx_prefix, &ctx_prefix_size, 0, ctx, ctxlen) != CRYPT_OK) - return CRYPT_INVALID_ARG; - - return s_ed25519_verify(msg, msglen, sig, siglen, ctx_prefix, ctx_prefix_size, stat, public_key); -} - -/** - Verify an Ed25519ph signature. - @param msg [in] The data to be verified - @param msglen [in] The size of the data to be verified - @param sig [in] The signature to be verified - @param siglen [in] The size of the signature to be verified - @param ctx [in] The context - @param ctxlen [in] The size of the context - @param stat [out] The result of the signature verification, 1==valid, 0==invalid - @param public_key [in] The public Ed25519 key in the pair - @return CRYPT_OK if successful -*/ -int ed25519ph_verify(const unsigned char *msg, unsigned long msglen, - const unsigned char *sig, unsigned long siglen, - const unsigned char *ctx, unsigned long ctxlen, - int *stat, - const curve25519_key *public_key) -{ - int err; - unsigned char msg_hash[64]; - unsigned char ctx_prefix[292]; - unsigned long ctx_prefix_size = sizeof(ctx_prefix); - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - if ((err = ec25519_crypto_ctx(ctx_prefix, &ctx_prefix_size, 1, ctx, ctxlen)) != CRYPT_OK) - return err; - - if ((err = tweetnacl_crypto_ph(msg_hash, msg, msglen)) != CRYPT_OK) - return err; - - return s_ed25519_verify(msg_hash, sizeof(msg_hash), sig, siglen, ctx_prefix, ctx_prefix_size, stat, public_key); -} - -/** - Verify an Ed25519 signature. - @param msg [in] The data to be verified - @param msglen [in] The size of the data to be verified - @param sig [in] The signature to be verified - @param siglen [in] The size of the signature to be verified - @param stat [out] The result of the signature verification, 1==valid, 0==invalid - @param public_key [in] The public Ed25519 key in the pair - @return CRYPT_OK if successful -*/ -int ed25519_verify(const unsigned char *msg, unsigned long msglen, - const unsigned char *sig, unsigned long siglen, - int *stat, - const curve25519_key *public_key) -{ - return s_ed25519_verify(msg, msglen, sig, siglen, NULL, 0, stat, public_key); -} - -#endif diff --git a/src/pk/ed448/ed448_export.c b/src/pk/ed448/ed448_export.c deleted file mode 100644 index 4e1b5856..00000000 --- a/src/pk/ed448/ed448_export.c +++ /dev/null @@ -1,31 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed448_export.c - Export an Ed448 key to a binary packet, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE448 - -/** - Export an Ed448 key to a binary packet - @param out [out] The destination for the key - @param outlen [in/out] The max size and resulting size of the Ed448 key - @param which Which type of key (PK_PRIVATE, PK_PUBLIC|PK_STD or PK_PUBLIC) - @param key The key you wish to export - @return CRYPT_OK if successful -*/ -int ed448_export( unsigned char *out, unsigned long *outlen, - int which, - const curve448_key *key) -{ - LTC_ARGCHK(key != NULL); - - if (key->pka != LTC_PKA_ED448) return CRYPT_PK_INVALID_TYPE; - - return ec448_export(out, outlen, which, key); -} - -#endif diff --git a/src/pk/ed448/ed448_import.c b/src/pk/ed448/ed448_import.c deleted file mode 100644 index f4db0918..00000000 --- a/src/pk/ed448/ed448_import.c +++ /dev/null @@ -1,35 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed448_import.c - Import an Ed448 key from a SubjectPublicKeyInfo, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE448 - -/** - Import an Ed448 public key - @param in The packet to read - @param inlen The length of the input packet - @param key [out] Where to import the key to - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int ed448_import(const unsigned char *in, unsigned long inlen, curve448_key *key) -{ - int err; - unsigned long key_len; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - - key_len = sizeof(key->pub); - if ((err = x509_decode_subject_public_key_info(in, inlen, LTC_OID_ED448, key->pub, &key_len, LTC_ASN1_EOL, NULL, 0uL)) == CRYPT_OK) { - key->type = PK_PUBLIC; - key->pka = LTC_PKA_ED448; - } - return err; -} - -#endif diff --git a/src/pk/ed448/ed448_import_pkcs8.c b/src/pk/ed448/ed448_import_pkcs8.c deleted file mode 100644 index 1a6ab4ed..00000000 --- a/src/pk/ed448/ed448_import_pkcs8.c +++ /dev/null @@ -1,33 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed448_import_pkcs8.c - Import an Ed448 key in PKCS#8 format, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE448 - -int ed448_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, - curve448_key *key) -{ - return ec448_import_pkcs8_asn1(alg_id, priv_key, LTC_OID_ED448, key); -} - -/** - Import an Ed448 private key in PKCS#8 format - @param in The packet to import from - @param inlen It's length (octets) - @param pw_ctx The password context when decrypting the private key - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int ed448_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - curve448_key *key) -{ - return ec448_import_pkcs8(in, inlen, pw_ctx, LTC_OID_ED448, key); -} - -#endif diff --git a/src/pk/ed448/ed448_import_raw.c b/src/pk/ed448/ed448_import_raw.c deleted file mode 100644 index b887d4b8..00000000 --- a/src/pk/ed448/ed448_import_raw.c +++ /dev/null @@ -1,42 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed448_import_raw.c - Set the parameters of an Ed448 key, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE448 - -/** - Set the parameters of an Ed448 key - - @param in The key - @param inlen The length of the key - @param which Which type of key (PK_PRIVATE or PK_PUBLIC) - @param key [out] Destination of the key - @return CRYPT_OK if successful -*/ -int ed448_import_raw(const unsigned char *in, unsigned long inlen, int which, curve448_key *key) -{ - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - - if (which == PK_PRIVATE) { - LTC_ARGCHK(inlen == 57uL); - XMEMCPY(key->priv, in, sizeof(key->priv)); - ec448_sk_to_pk_internal(key->pub, key->priv); - } else if (which == PK_PUBLIC) { - LTC_ARGCHK(inlen == 57uL); - XMEMCPY(key->pub, in, sizeof(key->pub)); - } else { - return CRYPT_INVALID_ARG; - } - key->pka = LTC_PKA_ED448; - key->type = which; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/ed448/ed448_import_x509.c b/src/pk/ed448/ed448_import_x509.c deleted file mode 100644 index c90acf42..00000000 --- a/src/pk/ed448/ed448_import_x509.c +++ /dev/null @@ -1,45 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed448_import_x509.c - Import an Ed448 key from a X.509 certificate, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE448 - -static int s_ed448_decode(const unsigned char *in, unsigned long inlen, curve448_key *key) -{ - if (inlen != sizeof(key->pub)) return CRYPT_PK_INVALID_SIZE; - XMEMCPY(key->pub, in, sizeof(key->pub)); - return CRYPT_OK; -} - -/** - Import an Ed448 public key from a X.509 certificate - @param in The DER encoded X.509 certificate - @param inlen The length of the certificate - @param key [out] Where to import the key to - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int ed448_import_x509(const unsigned char *in, unsigned long inlen, curve448_key *key) -{ - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - - if ((err = x509_decode_public_key_from_certificate(in, inlen, - LTC_OID_ED448, - LTC_ASN1_EOL, NULL, NULL, - (public_key_decode_cb)s_ed448_decode, key)) != CRYPT_OK) { - return err; - } - key->type = PK_PUBLIC; - key->pka = LTC_PKA_ED448; - - return err; -} - -#endif diff --git a/src/pk/ed448/ed448_make_key.c b/src/pk/ed448/ed448_make_key.c deleted file mode 100644 index 0170dff0..00000000 --- a/src/pk/ed448/ed448_make_key.c +++ /dev/null @@ -1,36 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed448_make_key.c - Create an Ed448 key, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE448 - -/** - Create an Ed448 key - @param prng An active PRNG state - @param wprng The index of the PRNG desired - @param key [out] Destination of a newly created private key pair - @return CRYPT_OK if successful -*/ -int ed448_make_key(prng_state *prng, int wprng, curve448_key *key) -{ - int err; - - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(key != NULL); - - if ((err = ec448_keypair_internal(prng, wprng, key->pub, key->priv)) != CRYPT_OK) { - return err; - } - - key->type = PK_PRIVATE; - key->pka = LTC_PKA_ED448; - - return err; -} - -#endif diff --git a/src/pk/ed448/ed448_sign.c b/src/pk/ed448/ed448_sign.c deleted file mode 100644 index 5f6d2dce..00000000 --- a/src/pk/ed448/ed448_sign.c +++ /dev/null @@ -1,136 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed448_sign.c - Create an Ed448 signature, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE448 - -static int s_ed448_sign(const unsigned char *msg, unsigned long msglen, - unsigned char *sig, unsigned long *siglen, - const unsigned char *ctx, unsigned long ctxlen, - const curve448_key *private_key) -{ - unsigned char *s; - unsigned long long smlen; - int err; - - LTC_ARGCHK(msg != NULL); - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(siglen != NULL); - LTC_ARGCHK(private_key != NULL); - - if (private_key->pka != LTC_PKA_ED448) return CRYPT_PK_INVALID_TYPE; - if (private_key->type != PK_PRIVATE) return CRYPT_PK_INVALID_TYPE; - - if (*siglen < 114uL) { - *siglen = 114uL; - return CRYPT_BUFFER_OVERFLOW; - } - - smlen = msglen + 114; - s = XMALLOC((unsigned long)smlen); - if (s == NULL) return CRYPT_MEM; - - err = ec448_sign_internal(s, &smlen, - msg, msglen, - private_key->priv, private_key->pub, - ctx, ctxlen); - - XMEMCPY(sig, s, 114uL); - *siglen = 114uL; - -#ifdef LTC_CLEAN_STACK - zeromem(s, (unsigned long)smlen); -#endif - XFREE(s); - - return err; -} - -/** - Create an Ed448ctx signature. - @param msg The data to be signed - @param msglen [in] The size of the data to be signed - @param sig [out] The destination of the signature - @param siglen [in/out] The max size and resulting size of the signature - @param ctx [in] The context - @param ctxlen [in] The size of the context - @param private_key The private Ed448 key in the pair - @return CRYPT_OK if successful -*/ -int ed448ctx_sign(const unsigned char *msg, unsigned long msglen, - unsigned char *sig, unsigned long *siglen, - const unsigned char *ctx, unsigned long ctxlen, - const curve448_key *private_key) -{ - int err; - unsigned char ctx_prefix[266]; - unsigned long ctx_prefix_size = sizeof(ctx_prefix); - - LTC_ARGCHK(ctx != NULL); - - if ((err = ec448_crypto_ctx(ctx_prefix, &ctx_prefix_size, 0, ctx, ctxlen)) != CRYPT_OK) - return err; - - return s_ed448_sign(msg, msglen, sig, siglen, ctx_prefix, ctx_prefix_size, private_key); -} - -/** - Create an Ed448ph signature. - @param msg The data to be signed - @param msglen [in] The size of the data to be signed - @param sig [out] The destination of the signature - @param siglen [in/out] The max size and resulting size of the signature - @param ctx [in] The context - @param ctxlen [in] The size of the context - @param private_key The private Ed448 key in the pair - @return CRYPT_OK if successful -*/ -int ed448ph_sign(const unsigned char *msg, unsigned long msglen, - unsigned char *sig, unsigned long *siglen, - const unsigned char *ctx, unsigned long ctxlen, - const curve448_key *private_key) -{ - int err; - unsigned char msg_hash[64]; - unsigned char ctx_prefix[266]; - unsigned long ctx_prefix_size = sizeof(ctx_prefix); - - if ((err = ec448_crypto_ctx(ctx_prefix, &ctx_prefix_size, 1, ctx, ctxlen)) != CRYPT_OK) - return err; - - if ((err = ec448_prehash_internal(msg_hash, msg, msglen)) != CRYPT_OK) - return err; - - return s_ed448_sign(msg_hash, sizeof(msg_hash), sig, siglen, ctx_prefix, ctx_prefix_size, private_key); -} - -/** - Create an Ed448 signature (pure mode). - @param msg The data to be signed - @param msglen [in] The size of the data to be signed - @param sig [out] The destination of the signature - @param siglen [in/out] The max size and resulting size of the signature - @param private_key The private Ed448 key in the pair - @return CRYPT_OK if successful -*/ -int ed448_sign(const unsigned char *msg, unsigned long msglen, - unsigned char *sig, unsigned long *siglen, - const curve448_key *private_key) -{ - int err; - unsigned char ctx_prefix[266]; - unsigned long ctx_prefix_size = sizeof(ctx_prefix); - - /* Pure Ed448 still uses DOM4 with flag=0 and empty context */ - if ((err = ec448_crypto_ctx(ctx_prefix, &ctx_prefix_size, 0, NULL, 0)) != CRYPT_OK) - return err; - - return s_ed448_sign(msg, msglen, sig, siglen, ctx_prefix, ctx_prefix_size, private_key); -} - -#endif diff --git a/src/pk/ed448/ed448_verify.c b/src/pk/ed448/ed448_verify.c deleted file mode 100644 index be04c76d..00000000 --- a/src/pk/ed448/ed448_verify.c +++ /dev/null @@ -1,156 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file ed448_verify.c - Verify an Ed448 signature, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE448 - -static int s_ed448_verify(const unsigned char *msg, unsigned long msglen, - const unsigned char *sig, unsigned long siglen, - const unsigned char *ctx, unsigned long ctxlen, - int *stat, - const curve448_key *public_key) -{ - unsigned char *m; - unsigned long long mlen; - int err; - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - LTC_ARGCHK(msg != NULL); - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(public_key != NULL); - - if (siglen != 114uL) return CRYPT_INVALID_ARG; - if (public_key->pka != LTC_PKA_ED448) return CRYPT_PK_INVALID_TYPE; - - mlen = msglen + siglen; - if ((mlen < msglen) || (mlen < siglen)) return CRYPT_OVERFLOW; - - m = XMALLOC((unsigned long)mlen); - if (m == NULL) return CRYPT_MEM; - - XMEMCPY(m, sig, siglen); - XMEMCPY(m + siglen, msg, msglen); - - err = ec448_verify_internal(stat, - m, &mlen, - m, mlen, - ctx, ctxlen, - public_key->pub); - -#ifdef LTC_CLEAN_STACK - zeromem(m, msglen + siglen); -#endif - XFREE(m); - - return err; -} - -/** - Verify an Ed448ctx signature. - @param msg [in] The data to be verified - @param msglen [in] The size of the data to be verified - @param sig [in] The signature to be verified - @param siglen [in] The size of the signature to be verified - @param ctx [in] The context - @param ctxlen [in] The size of the context - @param stat [out] The result of the signature verification, 1==valid, 0==invalid - @param public_key [in] The public Ed448 key in the pair - @return CRYPT_OK if successful -*/ -int ed448ctx_verify(const unsigned char *msg, unsigned long msglen, - const unsigned char *sig, unsigned long siglen, - const unsigned char *ctx, unsigned long ctxlen, - int *stat, - const curve448_key *public_key) -{ - int err; - unsigned char ctx_prefix[266]; - unsigned long ctx_prefix_size = sizeof(ctx_prefix); - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - LTC_ARGCHK(ctx != NULL); - - if ((err = ec448_crypto_ctx(ctx_prefix, &ctx_prefix_size, 0, ctx, ctxlen)) != CRYPT_OK) - return err; - - return s_ed448_verify(msg, msglen, sig, siglen, ctx_prefix, ctx_prefix_size, stat, public_key); -} - -/** - Verify an Ed448ph signature. - @param msg [in] The data to be verified - @param msglen [in] The size of the data to be verified - @param sig [in] The signature to be verified - @param siglen [in] The size of the signature to be verified - @param ctx [in] The context - @param ctxlen [in] The size of the context - @param stat [out] The result of the signature verification, 1==valid, 0==invalid - @param public_key [in] The public Ed448 key in the pair - @return CRYPT_OK if successful -*/ -int ed448ph_verify(const unsigned char *msg, unsigned long msglen, - const unsigned char *sig, unsigned long siglen, - const unsigned char *ctx, unsigned long ctxlen, - int *stat, - const curve448_key *public_key) -{ - int err; - unsigned char msg_hash[64]; - unsigned char ctx_prefix[266]; - unsigned long ctx_prefix_size = sizeof(ctx_prefix); - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - if ((err = ec448_crypto_ctx(ctx_prefix, &ctx_prefix_size, 1, ctx, ctxlen)) != CRYPT_OK) - return err; - - if ((err = ec448_prehash_internal(msg_hash, msg, msglen)) != CRYPT_OK) - return err; - - return s_ed448_verify(msg_hash, sizeof(msg_hash), sig, siglen, ctx_prefix, ctx_prefix_size, stat, public_key); -} - -/** - Verify an Ed448 signature (pure mode). - @param msg [in] The data to be verified - @param msglen [in] The size of the data to be verified - @param sig [in] The signature to be verified - @param siglen [in] The size of the signature to be verified - @param stat [out] The result of the signature verification, 1==valid, 0==invalid - @param public_key [in] The public Ed448 key in the pair - @return CRYPT_OK if successful -*/ -int ed448_verify(const unsigned char *msg, unsigned long msglen, - const unsigned char *sig, unsigned long siglen, - int *stat, - const curve448_key *public_key) -{ - int err; - unsigned char ctx_prefix[266]; - unsigned long ctx_prefix_size = sizeof(ctx_prefix); - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - /* Pure Ed448 still uses DOM4 with flag=0 and empty context */ - if ((err = ec448_crypto_ctx(ctx_prefix, &ctx_prefix_size, 0, NULL, 0)) != CRYPT_OK) - return err; - - return s_ed448_verify(msg, msglen, sig, siglen, ctx_prefix, ctx_prefix_size, stat, public_key); -} - -#endif diff --git a/src/pk/pka_key.c b/src/pk/pka_key.c deleted file mode 100644 index c682cfcb..00000000 --- a/src/pk/pka_key.c +++ /dev/null @@ -1,46 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -void pka_key_destroy(ltc_pka_key **key) -{ - LTC_ARGCHKVD(key != NULL); - - if (!*key) - return; - - pka_key_free(*key); - zeromem(*key, sizeof(**key)); - XFREE(*key); - *key = NULL; -} - -void pka_key_free(ltc_pka_key *key) -{ - LTC_ARGCHKVD(key != NULL); - switch (key->id) { - case LTC_PKA_DH: -#if defined(LTC_MDH) - dh_free(&key->u.dh); -#endif - break; - case LTC_PKA_DSA: -#if defined(LTC_MDSA) - dsa_free(&key->u.dsa); -#endif - break; - case LTC_PKA_RSA: - case LTC_PKA_RSA_PSS: -#if defined(LTC_MRSA) - rsa_free(&key->u.rsa); -#endif - break; - case LTC_PKA_EC: -#if defined(LTC_MECC) - ecc_free(&key->u.ecc); -#endif - break; - default: - break; - } -} diff --git a/src/pk/pkcs1/pkcs_1_i2osp.c b/src/pk/pkcs1/pkcs_1_i2osp.c deleted file mode 100644 index 513b03f3..00000000 --- a/src/pk/pkcs1/pkcs_1_i2osp.c +++ /dev/null @@ -1,39 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pkcs_1_i2osp.c - Integer to Octet I2OSP, Tom St Denis -*/ - -#ifdef LTC_PKCS_1 - -/* always stores the same # of bytes, pads with leading zero bytes - as required - */ - -/** - PKCS #1 Integer to binary - @param n The integer to store - @param modulus_len The length of the RSA modulus - @param out [out] The destination for the integer - @return CRYPT_OK if successful -*/ -int pkcs_1_i2osp(void *n, unsigned long modulus_len, unsigned char *out) -{ - unsigned long size; - - size = ltc_mp_unsigned_bin_size(n); - - if (size > modulus_len) { - return CRYPT_BUFFER_OVERFLOW; - } - - /* store it */ - zeromem(out, modulus_len); - return ltc_mp_to_unsigned_bin(n, out+(modulus_len-size)); -} - -#endif /* LTC_PKCS_1 */ - diff --git a/src/pk/pkcs1/pkcs_1_mgf1.c b/src/pk/pkcs1/pkcs_1_mgf1.c deleted file mode 100644 index a1ef64a1..00000000 --- a/src/pk/pkcs1/pkcs_1_mgf1.c +++ /dev/null @@ -1,108 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pkcs_1_mgf1.c - The Mask Generation Function (MGF1) for PKCS #1, Tom St Denis -*/ - -#ifdef LTC_PKCS_1 - -/** - Perform PKCS #1 MGF1 (internal) - @param hash_idx The index of the hash desired - @param seed The seed for MGF1 - @param seedlen The length of the seed - @param mask [out] The destination - @param masklen The length of the mask desired - @return CRYPT_OK if successful - - BEWARE: When hash_idx selects shake128 or shake256, this uses - SHAKE directly instead of MGF1(SHAKE), as required by RFC 8702. -*/ -int ltc_pkcs_1_mgf1(int hash_idx, - const unsigned char *seed, unsigned long seedlen, - unsigned char *mask, unsigned long masklen) -{ - unsigned long hLen, x; - ulong32 counter; - int err; - hash_state *md; - unsigned char *buf; - - LTC_ARGCHK(seed != NULL); - LTC_ARGCHK(mask != NULL); - - /* ensure valid hash */ - if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { - return err; - } - -#ifdef LTC_SHA3 - if (hash_descriptor[hash_idx].ID == shake128_desc.ID - || hash_descriptor[hash_idx].ID == shake256_desc.ID) { - /* The output hashsize is double the announced SHAKE bitsize - * and given in octets, so only multiply by 4 to arrive at 128 resp. 256. */ - return sha3_shake_memory(hash_descriptor[hash_idx].hashsize * 4, seed, seedlen, mask, &masklen); - } -#endif - - /* get hash output size */ - hLen = hash_descriptor[hash_idx].hashsize; - - /* allocate memory */ - md = XMALLOC(sizeof(hash_state)); - buf = XMALLOC(hLen); - if (md == NULL || buf == NULL) { - if (md != NULL) { - XFREE(md); - } - if (buf != NULL) { - XFREE(buf); - } - return CRYPT_MEM; - } - - /* start counter */ - counter = 0; - - while (masklen > 0) { - /* handle counter */ - STORE32H(counter, buf); - ++counter; - - /* get hash of seed || counter */ - if ((err = hash_descriptor[hash_idx].init(md)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[hash_idx].process(md, seed, seedlen)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[hash_idx].process(md, buf, 4)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[hash_idx].done(md, buf)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* store it */ - for (x = 0; x < hLen && masklen > 0; x++, masklen--) { - *mask++ = buf[x]; - } - } - - err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(buf, hLen); - zeromem(md, sizeof(hash_state)); -#endif - - XFREE(buf); - XFREE(md); - - return err; -} - -#endif /* LTC_PKCS_1 */ diff --git a/src/pk/pkcs1/pkcs_1_oaep_decode.c b/src/pk/pkcs1/pkcs_1_oaep_decode.c deleted file mode 100644 index f0f0deca..00000000 --- a/src/pk/pkcs1/pkcs_1_oaep_decode.c +++ /dev/null @@ -1,173 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pkcs_1_oaep_decode.c - OAEP Padding for PKCS #1, Tom St Denis -*/ - -#ifdef LTC_PKCS_1 -/** - PKCS #1 v2.00 OAEP decode - @param msg The encoded data to decode - @param msglen The length of the encoded data (octets) - @param params The PKCS#1 operation's parameters - @param modulus_bitlen The bit length of the RSA modulus - @param out [out] Destination of decoding - @param outlen [in/out] The max size and resulting size of the decoding - @param res [out] Result of decoding, 1==valid, 0==invalid - @return CRYPT_OK if successful -*/ -int ltc_pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, - ltc_rsa_op_parameters *params, - unsigned long modulus_bitlen, - unsigned char *out, unsigned long *outlen, - int *res) -{ - unsigned char *DB, *seed, *mask; - unsigned long hLen, x, y, modulus_len; - int err, ret; - ltc_rsa_op_checked op_checked = ltc_pkcs1_op_checked_init(params); - - /* res is cleared before anything else can return, it stays 0 unless the padding is valid */ - LTC_ARGCHK(res != NULL); - *res = 0; - - LTC_ARGCHK(msg != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((err = rsa_key_valid_op(LTC_PKCS1_DECRYPT, &op_checked)) != CRYPT_OK) { - return err; - } - - hLen = hash_descriptor[op_checked.hash_alg].hashsize; - modulus_len = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); - - /* test hash/message size */ - if ((2*hLen >= (modulus_len - 2)) || (msglen != modulus_len)) { - return CRYPT_PK_INVALID_SIZE; - } - - /* allocate ram for DB/mask/salt of size modulus_len */ - DB = XMALLOC(modulus_len); - mask = XMALLOC(modulus_len); - seed = XMALLOC(hLen); - if (DB == NULL || mask == NULL || seed == NULL) { - if (DB != NULL) { - XFREE(DB); - } - if (mask != NULL) { - XFREE(mask); - } - if (seed != NULL) { - XFREE(seed); - } - return CRYPT_MEM; - } - - /* ok so it's now in the form - - 0x00 || maskedseed || maskedDB - - 1 || hLen || modulus_len - hLen - 1 - - */ - - ret = CRYPT_OK; - - /* must have leading 0x00 byte */ - if (msg[0] != 0x00) { - ret = CRYPT_INVALID_PACKET; - } - - /* now read the masked seed */ - x = 1; - XMEMCPY(seed, msg + x, hLen); - x += hLen; - - /* now read the masked DB */ - XMEMCPY(DB, msg + x, modulus_len - hLen - 1); - x += modulus_len - hLen - 1; - - /* compute MGF1 of maskedDB (hLen) */ - if ((err = ltc_pkcs_1_mgf1(op_checked.mgf1_hash_alg, DB, modulus_len - hLen - 1, mask, hLen)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* XOR against seed */ - for (y = 0; y < hLen; y++) { - seed[y] ^= mask[y]; - } - - /* compute MGF1 of seed (k - hlen - 1) */ - if ((err = ltc_pkcs_1_mgf1(op_checked.mgf1_hash_alg, seed, hLen, mask, modulus_len - hLen - 1)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* xor against DB */ - for (y = 0; y < (modulus_len - hLen - 1); y++) { - DB[y] ^= mask[y]; - } - - /* now DB == lhash || PS || 0x01 || M, PS == k - mlen - 2hlen - 2 zeroes */ - - /* compute lhash and store it in seed [reuse temps!] */ - x = modulus_len; - if (op_checked.params->u.crypt.lparam != NULL) { - if ((err = hash_memory(op_checked.hash_alg, op_checked.params->u.crypt.lparam, op_checked.params->u.crypt.lparamlen, seed, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - } else { - /* can't pass hash_memory a NULL so use DB with zero length */ - if ((err = hash_memory(op_checked.hash_alg, DB, 0, seed, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - } - - /* compare the lhash'es */ - if (XMEM_NEQ(seed, DB, hLen) != 0) { - ret = CRYPT_INVALID_PACKET; - } - - /* now zeroes before a 0x01 */ - for (x = hLen; x < (modulus_len - hLen - 1) && DB[x] == 0x00; x++) { - /* step... */ - } - - /* error if wasn't 0x01 */ - if (x == (modulus_len - hLen - 1) || DB[x] != 0x01) { - ret = CRYPT_INVALID_PACKET; - } - - /* rest is the message (and skip 0x01) */ - if ((modulus_len - hLen - 1 - ++x) > *outlen) { - ret = CRYPT_INVALID_PACKET; - } - - if (ret == CRYPT_OK) { - /* copy message */ - *outlen = modulus_len - hLen - 1 - x; - XMEMCPY(out, DB + x, modulus_len - hLen - 1 - x); - - /* valid packet */ - *res = 1; - } - err = ret; - -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(DB, modulus_len); - zeromem(seed, hLen); - zeromem(mask, modulus_len); -#endif - - XFREE(seed); - XFREE(mask); - XFREE(DB); - - return err; -} - -#endif /* LTC_PKCS_1 */ diff --git a/src/pk/pkcs1/pkcs_1_oaep_encode.c b/src/pk/pkcs1/pkcs_1_oaep_encode.c deleted file mode 100644 index 7e323bd4..00000000 --- a/src/pk/pkcs1/pkcs_1_oaep_encode.c +++ /dev/null @@ -1,152 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pkcs_1_oaep_encode.c - OAEP Padding for PKCS #1, Tom St Denis -*/ - -#ifdef LTC_PKCS_1 -/** - PKCS #1 v2.00 OAEP encode - @param msg The data to encode - @param msglen The length of the data to encode (octets) - @param params The PKCS#1 operation's parameters - @param modulus_bitlen The bit length of the RSA modulus - @param out [out] The destination for the encoded data - @param outlen [in/out] The max size and resulting size of the encoded data - @return CRYPT_OK if successful -*/ -int ltc_pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, - ltc_rsa_op_parameters *params, - unsigned long modulus_bitlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned char *DB, *seed, *mask; - unsigned long hLen, x, y, modulus_len; - int err; - ltc_rsa_op_checked op_checked = ltc_pkcs1_op_checked_init(params); - - LTC_ARGCHK((msglen == 0) || (msg != NULL)); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((err = rsa_key_valid_op(LTC_PKCS1_ENCRYPT, &op_checked)) != CRYPT_OK) { - return err; - } - - hLen = hash_descriptor[op_checked.hash_alg].hashsize; - modulus_len = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); - - /* test message size */ - if ((2*hLen >= (modulus_len - 2)) || (msglen > (modulus_len - 2*hLen - 2))) { - return CRYPT_PK_INVALID_SIZE; - } - - /* allocate ram for DB/mask/salt of size modulus_len */ - DB = XMALLOC(modulus_len); - mask = XMALLOC(modulus_len); - seed = XMALLOC(hLen); - if (DB == NULL || mask == NULL || seed == NULL) { - if (DB != NULL) { - XFREE(DB); - } - if (mask != NULL) { - XFREE(mask); - } - if (seed != NULL) { - XFREE(seed); - } - return CRYPT_MEM; - } - - /* get lhash */ - /* DB == lhash || PS || 0x01 || M, PS == k - mlen - 2hlen - 2 zeroes */ - x = modulus_len; - if (op_checked.params->u.crypt.lparam != NULL) { - if ((err = hash_memory(op_checked.hash_alg, op_checked.params->u.crypt.lparam, op_checked.params->u.crypt.lparamlen, DB, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - } else { - /* can't pass hash_memory a NULL so use `out` with zero length */ - if ((err = hash_memory(op_checked.hash_alg, out, 0, DB, &x)) != CRYPT_OK) { - goto LBL_ERR; - } - } - - /* append PS then 0x01 (to lhash) */ - x = hLen; - y = modulus_len - msglen - 2*hLen - 2; - XMEMSET(DB+x, 0, y); - x += y; - - /* 0x01 byte */ - DB[x++] = 0x01; - - if (msglen != 0) { - /* message (length = msglen) */ - XMEMCPY(DB+x, msg, msglen); - x += msglen; - } - - /* now choose a random seed */ - if (prng_descriptor[op_checked.params->wprng].read(seed, hLen, op_checked.params->prng) != hLen) { - err = CRYPT_ERROR_READPRNG; - goto LBL_ERR; - } - - /* compute MGF1 of seed (k - hlen - 1) */ - if ((err = ltc_pkcs_1_mgf1(op_checked.mgf1_hash_alg, seed, hLen, mask, modulus_len - hLen - 1)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* xor against DB */ - for (y = 0; y < (modulus_len - hLen - 1); y++) { - DB[y] ^= mask[y]; - } - - /* compute MGF1 of maskedDB (hLen) */ - if ((err = ltc_pkcs_1_mgf1(op_checked.mgf1_hash_alg, DB, modulus_len - hLen - 1, mask, hLen)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* XOR against seed */ - for (y = 0; y < hLen; y++) { - seed[y] ^= mask[y]; - } - - /* create string of length modulus_len */ - if (*outlen < modulus_len) { - *outlen = modulus_len; - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; - } - - /* start output which is 0x00 || maskedSeed || maskedDB */ - x = 0; - out[x++] = 0x00; - XMEMCPY(out+x, seed, hLen); - x += hLen; - XMEMCPY(out+x, DB, modulus_len - hLen - 1); - x += modulus_len - hLen - 1; - - *outlen = x; - - err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(DB, modulus_len); - zeromem(seed, hLen); - zeromem(mask, modulus_len); -#endif - - XFREE(seed); - XFREE(mask); - XFREE(DB); - - return err; -} - -#endif /* LTC_PKCS_1 */ - diff --git a/src/pk/pkcs1/pkcs_1_os2ip.c b/src/pk/pkcs1/pkcs_1_os2ip.c deleted file mode 100644 index e009cc35..00000000 --- a/src/pk/pkcs1/pkcs_1_os2ip.c +++ /dev/null @@ -1,24 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pkcs_1_os2ip.c - Octet to Integer OS2IP, Tom St Denis -*/ -#ifdef LTC_PKCS_1 - -/** - Read a binary string into an mp_int - @param n [out] The mp_int destination - @param in The binary string to read - @param inlen The length of the binary string - @return CRYPT_OK if successful -*/ -int pkcs_1_os2ip(void *n, unsigned char *in, unsigned long inlen) -{ - return ltc_mp_read_unsigned_bin(n, in, inlen); -} - -#endif /* LTC_PKCS_1 */ - diff --git a/src/pk/pkcs1/pkcs_1_pss_decode.c b/src/pk/pkcs1/pkcs_1_pss_decode.c deleted file mode 100644 index 185dff12..00000000 --- a/src/pk/pkcs1/pkcs_1_pss_decode.c +++ /dev/null @@ -1,168 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pkcs_1_pss_decode.c - PKCS #1 PSS Signature Padding, Tom St Denis -*/ - -#ifdef LTC_PKCS_1 - -/** - PKCS #1 v2.00 Signature Verification - @param msghash The hash to verify - @param msghashlen The length of the hash (octets) - @param sig The signature data (encoded data) - @param siglen The length of the signature data (octets) - @param params The PKCS#1 operation's parameters - @param modulus_bitlen The bit length of the RSA modulus - @param res [out] The result of the comparison, 1==valid, 0==invalid - @return CRYPT_OK if successful (even if the comparison failed) -*/ -int ltc_pkcs_1_pss_decode_mgf1(const unsigned char *msghash, unsigned long msghashlen, - const unsigned char *sig, unsigned long siglen, - ltc_rsa_op_parameters *params, - unsigned long modulus_bitlen, int *res) -{ - unsigned char *DB, *mask, *salt, *hash; - unsigned long x, y, hLen, modulus_len, saltlen; - int err; - hash_state md; - ltc_rsa_op_checked op_checked = ltc_pkcs1_op_checked_init(params); - - /* res is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(res != NULL); - *res = 0; - - LTC_ARGCHK(msghash != NULL); - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(params != NULL); - - if ((err = rsa_key_valid_op(LTC_PKCS1_VERIFY, &op_checked)) != CRYPT_OK) { - return err; - } - - hLen = hash_descriptor[op_checked.hash_alg].hashsize; - saltlen = params->params.saltlen; - modulus_bitlen--; - modulus_len = (modulus_bitlen>>3) + (modulus_bitlen & 7 ? 1 : 0); - - /* check sizes */ - if ((saltlen > modulus_len) || - (modulus_len < hLen + saltlen + 2)) { - return CRYPT_PK_INVALID_SIZE; - } - - /* allocate ram for DB/mask/salt/hash of size modulus_len */ - DB = XMALLOC(modulus_len); - mask = XMALLOC(modulus_len); - salt = XMALLOC(modulus_len); - hash = XMALLOC(modulus_len); - if (DB == NULL || mask == NULL || salt == NULL || hash == NULL) { - if (DB != NULL) { - XFREE(DB); - } - if (mask != NULL) { - XFREE(mask); - } - if (salt != NULL) { - XFREE(salt); - } - if (hash != NULL) { - XFREE(hash); - } - return CRYPT_MEM; - } - - /* ensure the 0xBC byte */ - if (sig[siglen-1] != 0xBC) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - - /* copy out the DB */ - x = 0; - XMEMCPY(DB, sig + x, modulus_len - hLen - 1); - x += modulus_len - hLen - 1; - - /* copy out the hash */ - XMEMCPY(hash, sig + x, hLen); - /* x += hLen; */ - - /* check the MSB */ - if ((sig[0] & ~(0xFF >> ((modulus_len<<3) - (modulus_bitlen)))) != 0) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - - /* generate mask of length modulus_len - hLen - 1 from hash */ - if ((err = ltc_pkcs_1_mgf1(op_checked.mgf1_hash_alg, hash, hLen, mask, modulus_len - hLen - 1)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* xor against DB */ - for (y = 0; y < (modulus_len - hLen - 1); y++) { - DB[y] ^= mask[y]; - } - - /* now clear the first byte [make sure smaller than modulus] */ - DB[0] &= 0xFF >> ((modulus_len<<3) - (modulus_bitlen)); - - /* DB = PS || 0x01 || salt, PS == modulus_len - saltlen - hLen - 2 zero bytes */ - - /* check for zeroes and 0x01 */ - for (x = 0; x < modulus_len - saltlen - hLen - 2; x++) { - if (DB[x] != 0x00) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - } - - /* check for the 0x01 */ - if (DB[x++] != 0x01) { - err = CRYPT_INVALID_PACKET; - goto LBL_ERR; - } - - /* M = (eight) 0x00 || msghash || salt, mask = H(M) */ - if ((err = hash_descriptor[op_checked.hash_alg].init(&md)) != CRYPT_OK) { - goto LBL_ERR; - } - zeromem(mask, 8); - if ((err = hash_descriptor[op_checked.hash_alg].process(&md, mask, 8)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[op_checked.hash_alg].process(&md, msghash, msghashlen)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[op_checked.hash_alg].process(&md, DB+x, saltlen)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[op_checked.hash_alg].done(&md, mask)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* mask == hash means valid signature */ - if (XMEM_NEQ(mask, hash, hLen) == 0) { - *res = 1; - } - - err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(DB, modulus_len); - zeromem(mask, modulus_len); - zeromem(salt, modulus_len); - zeromem(hash, modulus_len); -#endif - - XFREE(hash); - XFREE(salt); - XFREE(mask); - XFREE(DB); - - return err; -} - -#endif /* LTC_PKCS_1 */ diff --git a/src/pk/pkcs1/pkcs_1_pss_encode.c b/src/pk/pkcs1/pkcs_1_pss_encode.c deleted file mode 100644 index bf5c2992..00000000 --- a/src/pk/pkcs1/pkcs_1_pss_encode.c +++ /dev/null @@ -1,159 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file pkcs_1_pss_encode.c - PKCS #1 PSS Signature Padding, Tom St Denis -*/ - -#ifdef LTC_PKCS_1 - -/** - PKCS #1 v2.00 Signature Encoding - @param msghash The hash to encode - @param msghashlen The length of the hash (octets) - @param params The PKCS#1 operation's parameters - @param modulus_bitlen The bit length of the RSA modulus - @param out [out] The destination of the encoding - @param outlen [in/out] The max size and resulting size of the encoded data - @return CRYPT_OK if successful -*/ -int ltc_pkcs_1_pss_encode_mgf1(const unsigned char *msghash, unsigned long msghashlen, - ltc_rsa_op_parameters *params, - unsigned long modulus_bitlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned char *DB, *mask, *salt, *hash; - unsigned long x, y, hLen, modulus_len, saltlen; - int err; - hash_state md; - ltc_rsa_op_checked op_checked = ltc_pkcs1_op_checked_init(params); - - LTC_ARGCHK(msghash != NULL); - LTC_ARGCHK(params != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((err = rsa_key_valid_op(LTC_PKCS1_SIGN, &op_checked)) != CRYPT_OK) { - return err; - } - - hLen = hash_descriptor[op_checked.hash_alg].hashsize; - saltlen = params->params.saltlen; - modulus_bitlen--; - modulus_len = (modulus_bitlen>>3) + (modulus_bitlen & 7 ? 1 : 0); - - /* check sizes */ - if ((saltlen > modulus_len) || (modulus_len < hLen + saltlen + 2)) { - return CRYPT_PK_INVALID_SIZE; - } - - /* allocate ram for DB/mask/salt/hash of size modulus_len */ - DB = XMALLOC(modulus_len); - mask = XMALLOC(modulus_len); - salt = XMALLOC(modulus_len); - hash = XMALLOC(modulus_len); - if (DB == NULL || mask == NULL || salt == NULL || hash == NULL) { - if (DB != NULL) { - XFREE(DB); - } - if (mask != NULL) { - XFREE(mask); - } - if (salt != NULL) { - XFREE(salt); - } - if (hash != NULL) { - XFREE(hash); - } - return CRYPT_MEM; - } - - - /* generate random salt */ - if (saltlen > 0) { - if (prng_descriptor[params->wprng].read(salt, saltlen, params->prng) != saltlen) { - err = CRYPT_ERROR_READPRNG; - goto LBL_ERR; - } - } - - /* M = (eight) 0x00 || msghash || salt, hash = H(M) */ - if ((err = hash_descriptor[op_checked.hash_alg].init(&md)) != CRYPT_OK) { - goto LBL_ERR; - } - zeromem(DB, 8); - if ((err = hash_descriptor[op_checked.hash_alg].process(&md, DB, 8)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[op_checked.hash_alg].process(&md, msghash, msghashlen)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[op_checked.hash_alg].process(&md, salt, saltlen)) != CRYPT_OK) { - goto LBL_ERR; - } - if ((err = hash_descriptor[op_checked.hash_alg].done(&md, hash)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* generate DB = PS || 0x01 || salt, PS == modulus_len - saltlen - hLen - 2 zero bytes */ - x = 0; - XMEMSET(DB + x, 0, modulus_len - saltlen - hLen - 2); - x += modulus_len - saltlen - hLen - 2; - DB[x++] = 0x01; - XMEMCPY(DB + x, salt, saltlen); - /* x += saltlen; */ - - /* generate mask of length modulus_len - hLen - 1 from hash */ - if ((err = ltc_pkcs_1_mgf1(op_checked.mgf1_hash_alg, hash, hLen, mask, modulus_len - hLen - 1)) != CRYPT_OK) { - goto LBL_ERR; - } - - /* xor against DB */ - for (y = 0; y < (modulus_len - hLen - 1); y++) { - DB[y] ^= mask[y]; - } - - /* output is DB || hash || 0xBC */ - if (*outlen < modulus_len) { - *outlen = modulus_len; - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; - } - - /* DB len = modulus_len - hLen - 1 */ - y = 0; - XMEMCPY(out + y, DB, modulus_len - hLen - 1); - y += modulus_len - hLen - 1; - - /* hash */ - XMEMCPY(out + y, hash, hLen); - y += hLen; - - /* 0xBC */ - out[y] = 0xBC; - - /* now clear the 8*modulus_len - modulus_bitlen most significant bits */ - out[0] &= 0xFF >> ((modulus_len<<3) - modulus_bitlen); - - /* store output size */ - *outlen = modulus_len; - err = CRYPT_OK; -LBL_ERR: -#ifdef LTC_CLEAN_STACK - zeromem(DB, modulus_len); - zeromem(mask, modulus_len); - zeromem(salt, modulus_len); - zeromem(hash, modulus_len); -#endif - - XFREE(hash); - XFREE(salt); - XFREE(mask); - XFREE(DB); - - return err; -} - -#endif /* LTC_PKCS_1 */ diff --git a/src/pk/pkcs1/pkcs_1_v1_5_decode.c b/src/pk/pkcs1/pkcs_1_v1_5_decode.c deleted file mode 100644 index ed1bd729..00000000 --- a/src/pk/pkcs1/pkcs_1_v1_5_decode.c +++ /dev/null @@ -1,103 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** @file pkcs_1_v1_5_decode.c - * - * PKCS #1 v1.5 Padding. (Andreas Lange) - */ - -#ifdef LTC_PKCS_1 - -/** @brief PKCS #1 v1.5 decode. - * - * @param msg The encoded data to decode - * @param msglen The length of the encoded data (octets) - * @param block_type Block type to use in padding (\sa ltc_pkcs_1_v1_5_blocks) - * @param modulus_bitlen The bit length of the RSA modulus - * @param out [out] Destination of decoding - * @param outlen [in/out] The max size and resulting size of the decoding - * @param is_valid [out] Boolean whether the padding was valid - * - * @return CRYPT_OK if successful - */ -int ltc_pkcs_1_v1_5_decode(const unsigned char *msg, - unsigned long msglen, - int block_type, - unsigned long modulus_bitlen, - unsigned char *out, - unsigned long *outlen, - int *is_valid) -{ - unsigned long modulus_len, ps_len, i; - int result; - - /* is_valid is cleared before anything else can return, it stays 0 unless the padding is valid */ - LTC_ARGCHK(is_valid != NULL); - *is_valid = 0; - - modulus_len = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); - - /* test message size - the encoded message is exactly as long as the modulus (RFC 8017 7.2.2, 8.2.2) and the code below reads modulus_len octets */ - - if ((msglen != modulus_len) || (modulus_len < 11)) { - return CRYPT_PK_INVALID_SIZE; - } - - result = CRYPT_OK; - - /* separate encoded message */ - - if ((msg[0] != 0x00) || (msg[1] != (unsigned char)block_type)) { - result = CRYPT_INVALID_PACKET; - } - - if (block_type == LTC_PKCS_1_EME) { - for (i = 2; i < modulus_len; i++) { - /* separator */ - if (msg[i] == 0x00) { break; } - } - ps_len = i++ - 2; - - if (i > modulus_len) { - /* There was no octet with hexadecimal value 0x00 to separate ps from m. - */ - result = CRYPT_INVALID_PACKET; - } - } else { - for (i = 2; i < modulus_len - 1; i++) { - if (msg[i] != 0xFF) { break; } - } - - /* separator check */ - if (msg[i] != 0) { - /* There was no octet with hexadecimal value 0x00 to separate ps from m. */ - result = CRYPT_INVALID_PACKET; - } - - ps_len = i - 2; - } - - if (ps_len < 8) - { - /* The length of ps is less than 8 octets. - */ - result = CRYPT_INVALID_PACKET; - } - - if (*outlen < (msglen - (2 + ps_len + 1))) { - result = CRYPT_INVALID_PACKET; - } - - if (result == CRYPT_OK) { - *outlen = (msglen - (2 + ps_len + 1)); - XMEMCPY(out, &msg[2 + ps_len + 1], *outlen); - - /* valid packet */ - *is_valid = 1; - } - - return result; -} /* pkcs_1_v1_5_decode */ - -#endif /* #ifdef LTC_PKCS_1 */ diff --git a/src/pk/pkcs1/pkcs_1_v1_5_encode.c b/src/pk/pkcs1/pkcs_1_v1_5_encode.c deleted file mode 100644 index 60ddf8ab..00000000 --- a/src/pk/pkcs1/pkcs_1_v1_5_encode.c +++ /dev/null @@ -1,105 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/*! \file pkcs_1_v1_5_encode.c - * - * PKCS #1 v1.5 Padding (Andreas Lange) - */ - -#ifdef LTC_PKCS_1 - -/*! \brief PKCS #1 v1.5 encode. - * - * \param msg The data to encode - * \param msglen The length of the data to encode (octets) - * \param block_type Block type to use in padding (\sa ltc_pkcs_1_v1_5_blocks) - * \param modulus_bitlen The bit length of the RSA modulus - * \param prng An active PRNG state (only for LTC_PKCS_1_EME) - * \param prng_idx The index of the PRNG desired (only for LTC_PKCS_1_EME) - * \param out [out] The destination for the encoded data - * \param outlen [in/out] The max size and resulting size of the encoded data - * - * \return CRYPT_OK if successful - */ -int ltc_pkcs_1_v1_5_encode(const unsigned char *msg, - unsigned long msglen, - int block_type, - unsigned long modulus_bitlen, - prng_state *prng, - int prng_idx, - unsigned char *out, - unsigned long *outlen) -{ - unsigned long modulus_len, ps_len, i; - unsigned char *ps; - int result; - - LTC_ARGCHK((msglen == 0) || (msg != NULL)); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* valid block_type? */ - if ((block_type != LTC_PKCS_1_EMSA) && - (block_type != LTC_PKCS_1_EME)) { - return CRYPT_PK_INVALID_PADDING; - } - - if (block_type == LTC_PKCS_1_EME) { /* encryption padding, we need a valid PRNG */ - if ((result = prng_is_valid(prng_idx)) != CRYPT_OK) { - return result; - } - } - - modulus_len = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); - - /* test message size */ - if ((msglen + 11) > modulus_len) { - return CRYPT_PK_INVALID_SIZE; - } - - if (*outlen < modulus_len) { - *outlen = modulus_len; - result = CRYPT_BUFFER_OVERFLOW; - goto bail; - } - - /* generate an octets string PS */ - ps = &out[2]; - ps_len = modulus_len - msglen - 3; - - if (block_type == LTC_PKCS_1_EME) { - /* now choose a random ps */ - if (prng_descriptor[prng_idx].read(ps, ps_len, prng) != ps_len) { - result = CRYPT_ERROR_READPRNG; - goto bail; - } - - /* transform zero bytes (if any) to non-zero random bytes */ - for (i = 0; i < ps_len; i++) { - while (ps[i] == 0) { - if (prng_descriptor[prng_idx].read(&ps[i], 1, prng) != 1) { - result = CRYPT_ERROR_READPRNG; - goto bail; - } - } - } - } else { - XMEMSET(ps, 0xFF, ps_len); - } - - /* create string of length modulus_len */ - out[0] = 0x00; - out[1] = (unsigned char)block_type; /* block_type 1 or 2 */ - out[2 + ps_len] = 0x00; - if (msglen != 0) { - XMEMCPY(&out[2 + ps_len + 1], msg, msglen); - } - *outlen = modulus_len; - - result = CRYPT_OK; -bail: - return result; -} /* pkcs_1_v1_5_encode */ - -#endif /* #ifdef LTC_PKCS_1 */ diff --git a/src/pk/rsa/rsa_decrypt_key.c b/src/pk/rsa/rsa_decrypt_key.c deleted file mode 100644 index b4cbc88b..00000000 --- a/src/pk/rsa/rsa_decrypt_key.c +++ /dev/null @@ -1,94 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file rsa_decrypt_key.c - RSA PKCS #1 Decryption, Tom St Denis and Andreas Lange -*/ - -#ifdef LTC_MRSA -/** - Decrypt then (PKCS #1 v2.0) OAEP or (PKCS #1 v1.5) EME depad - @param in The ciphertext - @param inlen The length of the ciphertext (octets) - @param out [out] The plaintext - @param outlen [in/out] The max size and resulting size of the plaintext (octets) - @param params The RSA operation's parameters - @param stat [out] Result of the decryption, 1==valid, 0==invalid - @param key The corresponding private RSA key - @return CRYPT_OK if succcessul (even if invalid) -*/ -int rsa_decrypt_key_v2(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - ltc_rsa_op_parameters *params, - int *stat, const rsa_key *key) -{ - int err; - unsigned char zero, one; - unsigned char *tmp; - unsigned long modulus_bitlen, modulus_bytelen, x; - ltc_rsa_op_checked op_checked = ltc_rsa_op_checked_init(key, params); - - /* stat is cleared before anything else can return, it stays 0 unless the padding is valid */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* valid padding? */ - if ((err = rsa_key_valid_op(LTC_RSA_DECRYPT, &op_checked)) != CRYPT_OK) { - return err; - } - - /* get modulus len in bits */ - modulus_bitlen = ltc_mp_count_bits( (key->N)); - - /* outlen must be at least the size of the modulus */ - modulus_bytelen = ltc_mp_unsigned_bin_size( (key->N)); - if (modulus_bytelen != inlen) { - return CRYPT_INVALID_PACKET; - } - - /* SP 800-56B Rev. 2 Section 7.1.2.1 says to reject ciphertext values 0 and 1 */ - if (params->padding == LTC_PKCS_1_OAEP) { - zero = one = 0; - for (x = 0; x < inlen; ++x) { - zero |= in[x]; - if (x == inlen - 1) { - one |= (unsigned char)(in[x] ^ 0x01); - } else { - one |= in[x]; - } - } - if (zero == 0 || one == 0) return CRYPT_INVALID_PACKET; - } - - /* allocate ram */ - tmp = XMALLOC(inlen); - if (tmp == NULL) { - return CRYPT_MEM; - } - - /* rsa exptmod the packet */ - x = inlen; - if ((err = ltc_mp.rsa_me(in, inlen, tmp, &x, PK_PRIVATE, key)) != CRYPT_OK) { - XFREE(tmp); - return err; - } - - if (params->padding == LTC_PKCS_1_OAEP) { - /* now OAEP depad the packet */ - err = ltc_pkcs_1_oaep_decode(tmp, x, params, modulus_bitlen, out, outlen, stat); - } else { - /* now PKCS #1 v1.5 depad the packet */ - err = ltc_pkcs_1_v1_5_decode(tmp, x, LTC_PKCS_1_EME, modulus_bitlen, out, outlen, stat); - } - - XFREE(tmp); - return err; -} - -#endif /* LTC_MRSA */ diff --git a/src/pk/rsa/rsa_encrypt_key.c b/src/pk/rsa/rsa_encrypt_key.c deleted file mode 100644 index b8797a16..00000000 --- a/src/pk/rsa/rsa_encrypt_key.c +++ /dev/null @@ -1,68 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file rsa_encrypt_key.c - RSA PKCS #1 encryption, Tom St Denis and Andreas Lange -*/ - -#ifdef LTC_MRSA -/** - (PKCS #1 v2.0) OAEP or (PKCS #1 v1.5) EME pad then encrypt - @param in The plaintext - @param inlen The length of the plaintext (octets) - @param out [out] The ciphertext - @param outlen [in/out] The max size and resulting size of the ciphertext - @param params The RSA operation's parameters - @param key The RSA key to encrypt to - @return CRYPT_OK if successful -*/ -int rsa_encrypt_key_v2(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - ltc_rsa_op_parameters *params, - const rsa_key *key) -{ - int err; - unsigned long modulus_bitlen, modulus_bytelen, x; - ltc_rsa_op_checked op_checked = ltc_rsa_op_checked_init(key, params); - - LTC_ARGCHK((inlen == 0) || (in != NULL)); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((err = rsa_key_valid_op(LTC_RSA_ENCRYPT, &op_checked)) != CRYPT_OK) { - return err; - } - - /* get modulus len in bits */ - modulus_bitlen = ltc_mp_count_bits( (key->N)); - - /* outlen must be at least the size of the modulus */ - modulus_bytelen = ltc_mp_unsigned_bin_size( (key->N)); - if (modulus_bytelen > *outlen) { - *outlen = modulus_bytelen; - return CRYPT_BUFFER_OVERFLOW; - } - - if (params->padding == LTC_PKCS_1_OAEP) { - /* OAEP pad the key */ - x = *outlen; - if ((err = ltc_pkcs_1_oaep_encode(in, inlen, params, modulus_bitlen, out, &x)) != CRYPT_OK) { - return err; - } - } else { - /* PKCS #1 v1.5 pad the key */ - x = *outlen; - if ((err = ltc_pkcs_1_v1_5_encode(in, inlen, LTC_PKCS_1_EME, - modulus_bitlen, params->prng, params->wprng, - out, &x)) != CRYPT_OK) { - return err; - } - } - - /* rsa exptmod the OAEP or PKCS #1 v1.5 pad */ - return ltc_mp.rsa_me(out, x, out, outlen, PK_PUBLIC, key); -} - -#endif /* LTC_MRSA */ diff --git a/src/pk/rsa/rsa_export.c b/src/pk/rsa/rsa_export.c deleted file mode 100644 index 7d99f47c..00000000 --- a/src/pk/rsa/rsa_export.c +++ /dev/null @@ -1,91 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file rsa_export.c - Export RSA PKCS keys, Tom St Denis -*/ - -#ifdef LTC_MRSA - -/** - This will export either an RSAPublicKey or RSAPrivateKey [defined in PKCS #1 v2.1] - @param out [out] Destination of the packet - @param outlen [in/out] The max size and resulting size of the packet - @param type The type of exported key (PK_PRIVATE or PK_PUBLIC) - @param key The RSA key to export - @return CRYPT_OK if successful -*/ -int rsa_export(unsigned char *out, unsigned long *outlen, int type, const rsa_key *key) -{ - unsigned long zero=0; - int err, std; - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - std = type & PK_STD; - type &= ~PK_STD; - - if (type == PK_PRIVATE && key->type != PK_PRIVATE) { - return CRYPT_PK_TYPE_MISMATCH; - } - - if (type == PK_PRIVATE) { - /* private key */ - /* output is - Version, n, e, d, p, q, d mod (p-1), d mod (q - 1), 1/q mod p - */ - return der_encode_sequence_multi(out, outlen, - LTC_ASN1_SHORT_INTEGER, 1UL, &zero, - LTC_ASN1_INTEGER, 1UL, key->N, - LTC_ASN1_INTEGER, 1UL, key->e, - LTC_ASN1_INTEGER, 1UL, key->d, - LTC_ASN1_INTEGER, 1UL, key->p, - LTC_ASN1_INTEGER, 1UL, key->q, - LTC_ASN1_INTEGER, 1UL, key->dP, - LTC_ASN1_INTEGER, 1UL, key->dQ, - LTC_ASN1_INTEGER, 1UL, key->qP, - LTC_ASN1_EOL, 0UL, NULL); - } - - if (type == PK_PUBLIC) { - /* public key */ - unsigned long tmplen, *ptmplen; - unsigned char* tmp = NULL; - - if (std) { - tmplen = (unsigned long)(ltc_mp_count_bits(key->N) / 8) * 2 + 8; - tmp = XMALLOC(tmplen); - ptmplen = &tmplen; - if (tmp == NULL) { - return CRYPT_MEM; - } - } - else { - tmp = out; - ptmplen = outlen; - } - - err = der_encode_sequence_multi(tmp, ptmplen, - LTC_ASN1_INTEGER, 1UL, key->N, - LTC_ASN1_INTEGER, 1UL, key->e, - LTC_ASN1_EOL, 0UL, NULL); - - if ((err != CRYPT_OK) || !std) { - goto finish; - } - - err = x509_encode_subject_public_key_info(out, outlen, - LTC_OID_RSA, tmp, tmplen, LTC_ASN1_NULL, NULL, 0); - -finish: - if (tmp != out) XFREE(tmp); - return err; - } - - return CRYPT_INVALID_ARG; -} - -#endif /* LTC_MRSA */ diff --git a/src/pk/rsa/rsa_exptmod.c b/src/pk/rsa/rsa_exptmod.c deleted file mode 100644 index 95ddddeb..00000000 --- a/src/pk/rsa/rsa_exptmod.c +++ /dev/null @@ -1,172 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file rsa_exptmod.c - RSA PKCS exptmod, Tom St Denis - Added RSA blinding --nmav -*/ - -#ifdef LTC_MRSA - -/** - Compute an RSA modular exponentiation - @param in The input data to send into RSA - @param inlen The length of the input (octets) - @param out [out] The destination - @param outlen [in/out] The max size and resulting size of the output - @param which Which exponent to use, e.g. PK_PRIVATE or PK_PUBLIC - @param key The RSA key to use - @return CRYPT_OK if successful -*/ -int rsa_exptmod(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, int which, - const rsa_key *key) -{ - void *tmp, *tmpa, *tmpb; - #ifdef LTC_RSA_BLINDING - void *rnd, *rndi /* inverse of rnd */; - #endif - unsigned long x; - int err, has_crt_parameters; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - /* is the key of the right type for the operation? */ - if (which == PK_PRIVATE && (key->type != PK_PRIVATE)) { - return CRYPT_PK_NOT_PRIVATE; - } - - /* must be a private or public operation */ - if (which != PK_PRIVATE && which != PK_PUBLIC) { - return CRYPT_PK_INVALID_TYPE; - } - - /* init and copy into tmp */ - if ((err = ltc_mp_init_multi(&tmp, &tmpa, &tmpb, -#ifdef LTC_RSA_BLINDING - &rnd, &rndi, -#endif /* LTC_RSA_BLINDING */ - NULL)) != CRYPT_OK) - { return err; } - if ((err = ltc_mp_read_unsigned_bin(tmp, in, (int)inlen)) != CRYPT_OK) - { goto error; } - - - /* sanity check on the input */ - if (ltc_mp_cmp(key->N, tmp) == LTC_MP_LT) { - err = CRYPT_PK_INVALID_SIZE; - goto error; - } - - /* are we using the private exponent and is the key optimized? */ - if (which == PK_PRIVATE) { - #ifdef LTC_RSA_BLINDING - /* do blinding */ - err = ltc_mp_rand(rnd, ltc_mp_get_digit_count(key->N)); - if (err != CRYPT_OK) { - goto error; - } - - /* rndi = 1/rnd mod N */ - err = ltc_mp_invmod(rnd, key->N, rndi); - if (err != CRYPT_OK) { - goto error; - } - - /* rnd = rnd^e */ - err = ltc_mp_exptmod( rnd, key->e, key->N, rnd); - if (err != CRYPT_OK) { - goto error; - } - - /* tmp = tmp*rnd mod N */ - err = ltc_mp_mulmod( tmp, rnd, key->N, tmp); - if (err != CRYPT_OK) { - goto error; - } - #endif /* LTC_RSA_BLINDING */ - - has_crt_parameters = (key->p != NULL) && (ltc_mp_get_digit_count(key->p) != 0) && - (key->q != NULL) && (ltc_mp_get_digit_count(key->q) != 0) && - (key->dP != NULL) && (ltc_mp_get_digit_count(key->dP) != 0) && - (key->dQ != NULL) && (ltc_mp_get_digit_count(key->dQ) != 0) && - (key->qP != NULL) && (ltc_mp_get_digit_count(key->qP) != 0); - - if (!has_crt_parameters) { - /* - * In case CRT optimization parameters are not provided, - * the private key is directly used to exptmod it - */ - if ((err = ltc_mp_exptmod(tmp, key->d, key->N, tmp)) != CRYPT_OK) { goto error; } - } else { - /* tmpa = tmp^dP mod p */ - if ((err = ltc_mp_exptmod(tmp, key->dP, key->p, tmpa)) != CRYPT_OK) { goto error; } - - /* tmpb = tmp^dQ mod q */ - if ((err = ltc_mp_exptmod(tmp, key->dQ, key->q, tmpb)) != CRYPT_OK) { goto error; } - - /* tmp = (tmpa - tmpb) * qInv (mod p) */ - if ((err = ltc_mp_sub(tmpa, tmpb, tmp)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_mulmod(tmp, key->qP, key->p, tmp)) != CRYPT_OK) { goto error; } - - /* tmp = tmpb + q * tmp */ - if ((err = ltc_mp_mul(tmp, key->q, tmp)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_add(tmp, tmpb, tmp)) != CRYPT_OK) { goto error; } - } - - #ifdef LTC_RSA_BLINDING - /* unblind */ - err = ltc_mp_mulmod( tmp, rndi, key->N, tmp); - if (err != CRYPT_OK) { - goto error; - } - #endif - - #ifdef LTC_RSA_CRT_HARDENING - if (has_crt_parameters) { - if ((err = ltc_mp_exptmod(tmp, key->e, key->N, tmpa)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_read_unsigned_bin(tmpb, in, (int)inlen)) != CRYPT_OK) { goto error; } - if (ltc_mp_cmp(tmpa, tmpb) != LTC_MP_EQ) { err = CRYPT_ERROR; goto error; } - } - #endif - } else { - /* exptmod it */ - if ((err = ltc_mp_exptmod(tmp, key->e, key->N, tmp)) != CRYPT_OK) { goto error; } - } - - /* read it back */ - x = (unsigned long)ltc_mp_unsigned_bin_size(key->N); - if (x > *outlen) { - *outlen = x; - err = CRYPT_BUFFER_OVERFLOW; - goto error; - } - - /* this should never happen ... */ - if (ltc_mp_unsigned_bin_size(tmp) > ltc_mp_unsigned_bin_size(key->N)) { - err = CRYPT_ERROR; - goto error; - } - *outlen = x; - - /* convert it */ - zeromem(out, x); - if ((err = ltc_mp_to_unsigned_bin(tmp, out+(x-ltc_mp_unsigned_bin_size(tmp)))) != CRYPT_OK) { goto error; } - - /* clean up and return */ - err = CRYPT_OK; -error: - ltc_mp_deinit_multi( -#ifdef LTC_RSA_BLINDING - rndi, rnd, -#endif /* LTC_RSA_BLINDING */ - tmpb, tmpa, tmp, NULL); - return err; -} - -#endif diff --git a/src/pk/rsa/rsa_get_size.c b/src/pk/rsa/rsa_get_size.c deleted file mode 100644 index efefc501..00000000 --- a/src/pk/rsa/rsa_get_size.c +++ /dev/null @@ -1,30 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file rsa_get_size.c - Retrieve the size of an RSA key, Steffen Jaeckel. -*/ - -#ifdef LTC_MRSA - -/** - Retrieve the size in bytes of an RSA key. - @param key The RSA key - @return The size in bytes of the RSA key or INT_MAX on error. -*/ -int rsa_get_size(const rsa_key *key) -{ - int ret = INT_MAX; - LTC_ARGCHK(key != NULL); - - if (key) - { - ret = ltc_mp_unsigned_bin_size(key->N); - } /* if */ - - return ret; -} - -#endif diff --git a/src/pk/rsa/rsa_import.c b/src/pk/rsa/rsa_import.c deleted file mode 100644 index bc201ad9..00000000 --- a/src/pk/rsa/rsa_import.c +++ /dev/null @@ -1,120 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file rsa_import.c - Import a PKCS RSA key, Tom St Denis -*/ - -#ifdef LTC_MRSA - -#ifndef S_RSA_DECODE -#define S_RSA_DECODE -static int s_rsa_decode(const unsigned char *in, unsigned long inlen, rsa_key *key) -{ - /* now it should be SEQUENCE { INTEGER, INTEGER } */ - return der_decode_sequence_multi(in, inlen, - LTC_ASN1_INTEGER, 1UL, key->N, - LTC_ASN1_INTEGER, 1UL, key->e, - LTC_ASN1_EOL, 0UL, NULL); -} -#endif - - -/** - Import an RSAPublicKey or RSAPrivateKey as defined in PKCS #1 v2.1 [two-prime only] - - The `key` passed into this function has to be already initialized and will - NOT be free'd on error! - - @param in The packet to import from - @param inlen It's length (octets) - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful -*/ -int rsa_import_pkcs1(const unsigned char *in, unsigned long inlen, rsa_key *key) -{ - int err; - unsigned long version = -1; - - err = der_decode_sequence_multi(in, inlen, LTC_ASN1_SHORT_INTEGER, 1UL, &version, - LTC_ASN1_EOL, 0UL, NULL); - - if (err == CRYPT_OVERFLOW) { - /* the version would fit into an LTC_ASN1_SHORT_INTEGER - * so we try to decode as a public key - */ - if ((err = s_rsa_decode(in, inlen, key)) == CRYPT_OK) { - key->type = PK_PUBLIC; - } - goto LBL_OUT; - } else if (err != CRYPT_INPUT_TOO_LONG) { - /* couldn't decode the version, so error out */ - goto LBL_OUT; - } - - if (version == 0) { - /* it's a private key */ - if ((err = der_decode_sequence_multi(in, inlen, - LTC_ASN1_SHORT_INTEGER, 1UL, &version, - LTC_ASN1_INTEGER, 1UL, key->N, - LTC_ASN1_INTEGER, 1UL, key->e, - LTC_ASN1_INTEGER, 1UL, key->d, - LTC_ASN1_INTEGER, 1UL, key->p, - LTC_ASN1_INTEGER, 1UL, key->q, - LTC_ASN1_INTEGER, 1UL, key->dP, - LTC_ASN1_INTEGER, 1UL, key->dQ, - LTC_ASN1_INTEGER, 1UL, key->qP, - LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { - goto LBL_OUT; - } - key->type = PK_PRIVATE; - } else if (version == 1) { - /* we don't support multi-prime RSA */ - err = CRYPT_PK_INVALID_TYPE; - goto LBL_OUT; - } - err = CRYPT_OK; -LBL_OUT: - return err; -} - -/** - Import multiple formats of RSA public and private keys. - - RSAPublicKey or RSAPrivateKey as defined in PKCS #1 v2.1 [two-prime only] - SubjectPublicKeyInfo formatted public keys - - @param in The packet to import from - @param inlen It's length (octets) - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful, upon error allocated memory is freed -*/ -int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key) -{ - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - /* SubjectPublicKeyInfo or X.509 certificate format */ - if (rsa_import_x509(in, inlen, key) == CRYPT_OK) { - return CRYPT_OK; - } - - /* init key */ - if ((err = rsa_init(key)) != CRYPT_OK) { - return err; - } - /* Try to match against PKCS #1 standards */ - if ((err = rsa_import_pkcs1(in, inlen, key)) != CRYPT_OK) { - rsa_free(key); - } - - return err; -} - -#endif /* LTC_MRSA */ - diff --git a/src/pk/rsa/rsa_import_pkcs8.c b/src/pk/rsa/rsa_import_pkcs8.c deleted file mode 100644 index 406772e0..00000000 --- a/src/pk/rsa/rsa_import_pkcs8.c +++ /dev/null @@ -1,70 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file rsa_import_pkcs8.c - Import a PKCS RSA key -*/ - -#ifdef LTC_MRSA - -int rsa_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, rsa_key *key) -{ - int err; - - LTC_ARGCHK(key != NULL); - - LTC_UNUSED_PARAM(alg_id); - - if ((err = rsa_init(key)) != CRYPT_OK) { - return err; - } - - if ((err = rsa_import_pkcs1(priv_key->data, priv_key->size, key)) != CRYPT_OK) { - rsa_free(key); - return err; - } - key->type = PK_PRIVATE; - - return err; -} - -/** - Import an RSAPrivateKey in PKCS#8 format - @param in The packet to import from - @param inlen It's length (octets) - @param pw_ctx The password context when decrypting the private key - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful, upon error allocated memory is freed -*/ -int rsa_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - rsa_key *key) -{ - int err; - ltc_asn1_list *l = NULL; - ltc_asn1_list *alg_id = NULL, *priv_key = NULL; - enum ltc_oid_id pka; - - LTC_ARGCHK(in != NULL); - - if ((err = pkcs8_decode_flexi(in, inlen, pw_ctx, &l)) != CRYPT_OK) { - return err; - } - if ((err = pkcs8_get_children(l, &pka, &alg_id, &priv_key)) != CRYPT_OK) { - goto LBL_DER_FREE; - } - if (pka != LTC_OID_RSA) { - err = CRYPT_INVALID_PACKET; - goto LBL_DER_FREE; - } - - err = rsa_import_pkcs8_asn1(alg_id, priv_key, key); - -LBL_DER_FREE: - der_free_sequence_flexi(l); - return err; -} - -#endif /* LTC_MRSA */ diff --git a/src/pk/rsa/rsa_import_x509.c b/src/pk/rsa/rsa_import_x509.c deleted file mode 100644 index 82d4efcd..00000000 --- a/src/pk/rsa/rsa_import_x509.c +++ /dev/null @@ -1,270 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file rsa_import.c - Import an RSA key from a X.509 certificate, Steffen Jaeckel -*/ - -#ifdef LTC_MRSA - -#ifndef S_RSA_DECODE -#define S_RSA_DECODE -static int s_rsa_decode(const unsigned char *in, unsigned long inlen, rsa_key *key) -{ - /* now it should be SEQUENCE { INTEGER, INTEGER } */ - return der_decode_sequence_multi(in, inlen, - LTC_ASN1_INTEGER, 1UL, key->N, - LTC_ASN1_INTEGER, 1UL, key->e, - LTC_ASN1_EOL, 0UL, NULL); -} -#endif - -typedef struct rsa_pss_parameters_data { - ltc_asn1_list params[4], inner[4], hash_alg[2], mgf[2], mgf_hash_alg[2]; - unsigned long hash_alg_oid[LTC_DER_OID_DEFAULT_NODES]; - unsigned long mgf_alg_oid[LTC_DER_OID_DEFAULT_NODES]; - unsigned long mgf1_hash_alg_oid[LTC_DER_OID_DEFAULT_NODES]; - unsigned long salt_length, trailer_field; -} rsa_pss_parameters_data; - -static LTC_INLINE void s_rsa_pss_parameters_data_setup(rsa_pss_parameters_data *d) -{ - unsigned long n; - /* RSASSA-PSS - * - * RSASSA-PSS-params ::= SEQUENCE { - * hashAlgorithm [0] HashAlgorithm DEFAULT sha1, - * maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT mgf1SHA1, - * saltLength [2] INTEGER DEFAULT 20, - * trailerField [3] TrailerField DEFAULT trailerFieldBC - * } - */ - - /* HashAlgorithm ::= AlgorithmIdentifier { - * {OAEP-PSSDigestAlgorithms} - * } - */ - LTC_SET_ASN1(d->hash_alg, 0, LTC_ASN1_OBJECT_IDENTIFIER, d->hash_alg_oid, LTC_ARRAY_SIZE(d->hash_alg_oid)); - LTC_SET_ASN1(d->hash_alg, 1, LTC_ASN1_NULL, NULL, 0); - d->hash_alg[1].optional = 1; - - /* MaskGenAlgorithm ::= AlgorithmIdentifier { {PKCS1MGFAlgorithms} } */ - LTC_SET_ASN1(d->mgf_hash_alg, 0, LTC_ASN1_OBJECT_IDENTIFIER, d->mgf1_hash_alg_oid, LTC_ARRAY_SIZE(d->mgf1_hash_alg_oid)); - LTC_SET_ASN1(d->mgf_hash_alg, 1, LTC_ASN1_NULL, NULL, 0); - d->mgf_hash_alg[1].optional = 1; - - /* PKCS1MGFAlgorithms ALGORITHM-IDENTIFIER ::= { - * { OID id-mgf1 PARAMETERS HashAlgorithm }, - * ... -- Allows for future expansion -- - * } - */ - LTC_SET_ASN1(d->mgf, 0, LTC_ASN1_OBJECT_IDENTIFIER, d->mgf_alg_oid, LTC_ARRAY_SIZE(d->mgf_alg_oid)); - LTC_SET_ASN1(d->mgf, 1, LTC_ASN1_SEQUENCE, d->mgf_hash_alg, LTC_ARRAY_SIZE(d->mgf_hash_alg)); - - LTC_SET_ASN1(d->inner, 0, LTC_ASN1_SEQUENCE, d->hash_alg, LTC_ARRAY_SIZE(d->hash_alg)); - LTC_SET_ASN1(d->inner, 1, LTC_ASN1_SEQUENCE, d->mgf, LTC_ARRAY_SIZE(d->mgf)); - LTC_SET_ASN1(d->inner, 2, LTC_ASN1_SHORT_INTEGER, &d->salt_length, 1UL); - LTC_SET_ASN1(d->inner, 3, LTC_ASN1_SHORT_INTEGER, &d->trailer_field, 1UL); - - LTC_SET_ASN1_CUSTOM_CONSTRUCTED(d->params, 0, LTC_ASN1_CL_CONTEXT_SPECIFIC, 0, d->inner); /* context specific 0 */ - LTC_SET_ASN1_CUSTOM_CONSTRUCTED(d->params, 1, LTC_ASN1_CL_CONTEXT_SPECIFIC, 1, d->inner + 1); /* context specific 1 */ - LTC_SET_ASN1_CUSTOM_CONSTRUCTED(d->params, 2, LTC_ASN1_CL_CONTEXT_SPECIFIC, 2, d->inner + 2); /* context specific 2 */ - LTC_SET_ASN1_CUSTOM_CONSTRUCTED(d->params, 3, LTC_ASN1_CL_CONTEXT_SPECIFIC, 3, d->inner + 3); /* context specific 3 */ - for (n = 0; n < 4; ++n) { - d->params[n].optional = 1; - } -} - -static int s_rsa_decode_parameters(const rsa_pss_parameters_data *d, ltc_rsa_parameters *rsa_params) -{ - unsigned long n; - enum ltc_oid_id oid_id; - int err, idx; - - rsa_params->saltlen = 20; - rsa_params->hash_idx = find_hash("sha1"); - rsa_params->mgf1_hash_idx = rsa_params->hash_idx; - - for (n = 0; n < 4; ++n) { - if (d->params[n].used == 0) - continue; - switch (n) { - case 0: - idx = find_hash_oid(d->hash_alg->data, d->hash_alg->size); - if (idx == -1) { - return CRYPT_INVALID_HASH; - } - rsa_params->hash_idx = idx; - break; - case 1: - if ((err = pk_get_oid_from_asn1(&d->mgf[0], &oid_id)) != CRYPT_OK) { - return err; - } - if (oid_id != LTC_OID_RSA_MGF1) { - return CRYPT_PK_ASN1_ERROR; - } - idx = find_hash_oid(d->mgf_hash_alg->data, d->mgf_hash_alg->size); - if (idx == -1) { - return CRYPT_INVALID_HASH; - } - rsa_params->mgf1_hash_idx = idx; - break; - case 2: - rsa_params->saltlen = d->salt_length; - break; - case 3: - if (d->trailer_field != 1) { - return CRYPT_PK_ASN1_ERROR; - } - break; - default: - return CRYPT_PK_ASN1_ERROR; - } - } - - return CRYPT_OK; -} - -int rsa_decode_parameters(const ltc_asn1_list *parameters, rsa_key *key) -{ - int err; - rsa_pss_parameters_data d; - - s_rsa_pss_parameters_data_setup(&d); - - if ((err = der_decode_sequence(parameters->data, parameters->size, d.params, 4)) != CRYPT_OK) { - return err; - } - - if ((err = s_rsa_decode_parameters(&d, &key->params)) != CRYPT_OK) { - return err; - } - key->pss_oaep = 1; - return CRYPT_OK; -} - -static LTC_INLINE int s_rsa_1_5_import_spki(const unsigned char *in, unsigned long inlen, rsa_key *key) -{ - return x509_process_public_key_from_spki(in, inlen, - LTC_OID_RSA, - LTC_ASN1_NULL, NULL, NULL, - (public_key_decode_cb)s_rsa_decode, key); -} - -static LTC_INLINE int s_rsa_pss_import_spki(const unsigned char *in, unsigned long inlen, rsa_key *key) -{ - int err; - rsa_pss_parameters_data d; - unsigned long n_params = LTC_ARRAY_SIZE(d.params); - - if (x509_process_public_key_from_spki(in, inlen, - LTC_OID_RSA_PSS, - LTC_ASN1_NULL, NULL, NULL, - (public_key_decode_cb)s_rsa_decode, key) == CRYPT_OK) { - return CRYPT_OK; - } - s_rsa_pss_parameters_data_setup(&d); - if ((err = x509_process_public_key_from_spki(in, inlen, - LTC_OID_RSA_PSS, - LTC_ASN1_SEQUENCE, d.params, &n_params, - (public_key_decode_cb)s_rsa_decode, key)) != CRYPT_OK) { - return err; - } - if ((err = s_rsa_decode_parameters(&d, &key->params)) != CRYPT_OK) { - return err; - } - key->pss_oaep = 1; - return CRYPT_OK; -} - -static LTC_INLINE int s_rsa_import_spki(const unsigned char *in, unsigned long inlen, rsa_key *key) -{ - int err; - if (s_rsa_1_5_import_spki(in, inlen, key) == CRYPT_OK) { - return CRYPT_OK; - } - - if ((err = s_rsa_pss_import_spki(in, inlen, key)) == CRYPT_OK) { - return CRYPT_OK; - } - return err; -} - -/** - Import an RSA key from SubjectPublicKeyInfo - @param in The packet to import from - @param inlen It's length (octets) - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful, upon error allocated memory is freed -*/ -int rsa_import_spki(const unsigned char *in, unsigned long inlen, rsa_key *key) -{ - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - /* init key */ - if ((err = rsa_init(key)) != CRYPT_OK) { - return err; - } - - if ((err = s_rsa_import_spki(in, inlen, key)) == CRYPT_OK) { - key->type = PK_PUBLIC; - return CRYPT_OK; - } - - rsa_free(key); - - return err; -} - -/** - Import an RSA key from a X.509 certificate - @param in The packet to import from - @param inlen It's length (octets) - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful, upon error allocated memory is freed -*/ -int rsa_import_x509(const unsigned char *in, unsigned long inlen, rsa_key *key) -{ - ltc_asn1_list *decoded_list; - const ltc_asn1_list *spki; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - /* init key */ - if ((err = rsa_init(key)) != CRYPT_OK) { - return err; - } - - /* First try to decode as SubjectPublicKeyInfo */ - if (s_rsa_import_spki(in, inlen, key) == CRYPT_OK) { - key->type = PK_PUBLIC; - return CRYPT_OK; - } - - /* Now try to extract the SubjectPublicKeyInfo from the Certificate */ - if ((err = x509_decode_spki(in, inlen, &decoded_list, &spki)) != CRYPT_OK) { - rsa_free(key); - return err; - } - err = s_rsa_import_spki(spki->data, spki->size, key); - - der_free_sequence_flexi(decoded_list); - if (err != CRYPT_OK) { - rsa_free(key); - return err; - } - key->type = PK_PUBLIC; - return CRYPT_OK; -} - -#endif /* LTC_MRSA */ - diff --git a/src/pk/rsa/rsa_key.c b/src/pk/rsa/rsa_key.c deleted file mode 100644 index 79015706..00000000 --- a/src/pk/rsa/rsa_key.c +++ /dev/null @@ -1,243 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file rsa_key.c - Free an RSA key, Tom St Denis - Basic operations on an RSA key, Steffen Jaeckel -*/ - -#ifdef LTC_MRSA -static void s_mpi_shrink_multi(void **a, ...) -{ - void **cur; - unsigned n; - int err; - va_list args; - void *tmp[10] = { 0 }; - void **arg[10] = { 0 }; - - /* We re-allocate in the order that we received the varargs */ - n = 0; - err = CRYPT_ERROR; - cur = a; - va_start(args, a); - while (cur != NULL) { - if (n >= LTC_ARRAY_SIZE(tmp)) { - goto out; - } - if (*cur != NULL) { - arg[n] = cur; - if ((err = ltc_mp_init_copy(&tmp[n], *arg[n])) != CRYPT_OK) { - goto out; - } - n++; - } - cur = va_arg(args, void**); - } - va_end(args); - - /* but we clear the old values in the reverse order */ - while (n != 0 && arg[--n] != NULL) { - ltc_mp_clear(*arg[n]); - *arg[n] = tmp[n]; - } -out: - va_end(args); - /* clean-up after an error - * or after this was called with too many args - */ - if ((err != CRYPT_OK) || - (n >= LTC_ARRAY_SIZE(tmp))) { - for (n = 0; n < LTC_ARRAY_SIZE(tmp); ++n) { - if (tmp[n] != NULL) { - ltc_mp_clear(tmp[n]); - } - } - } -} - -/** - This shrinks the allocated memory of a RSA key - - It will use up some more memory temporarily, - but then it will free-up the entire sequence that - was once allocated when the key was created/populated. - - This only works with libtommath >= 1.2.0 in earlier versions - it has the inverse effect due to the way it worked internally. - Also works for GNU MP, tomsfastmath naturally shows no effect. - - @param key The RSA key to shrink -*/ -void rsa_shrink_key(rsa_key *key) -{ - LTC_ARGCHKVD(key != NULL); - s_mpi_shrink_multi(&key->e, &key->d, &key->N, &key->dQ, &key->dP, &key->qP, &key->p, &key->q, NULL); -} - -/** - Init an RSA key - @param key The RSA key to initialize - @return CRYPT_OK if successful -*/ -int rsa_init(rsa_key *key) -{ - LTC_ARGCHK(key != NULL); - key->pss_oaep = 0; - XMEMSET(&key->params, 0, sizeof(key->params)); - return ltc_mp_init_multi(&key->e, &key->d, &key->N, &key->dQ, &key->dP, &key->qP, &key->p, &key->q, LTC_NULL); -} - -/** - Free an RSA key from memory - @param key The RSA key to free -*/ -void rsa_free(rsa_key *key) -{ - LTC_ARGCHKVD(key != NULL); - ltc_mp_cleanup_multi(&key->q, &key->p, &key->qP, &key->dP, &key->dQ, &key->N, &key->d, &key->e, LTC_NULL); - key->pss_oaep = 0; - XMEMSET(&key->params, 0, sizeof(key->params)); -} - -static LTC_INLINE int s_rsa_key_valid_rsa_params(ltc_rsa_op_checked *check) -{ - const ltc_rsa_parameters *key_params; - /* This is called from PKCS#1 de-/encoder code, so we can't check the key */ - if (check->key == NULL) { - return CRYPT_OK; - } - key_params = &check->key->params; - /* Key has no PSS/OAEP constraints */ - if (!check->key->pss_oaep) { - return CRYPT_OK; - } - /* Key is constrained - operation must use matching PSS/OAEP params */ - if (check->params->padding != LTC_PKCS_1_PSS - && check->params->padding != LTC_PKCS_1_OAEP) { - return CRYPT_PK_TYPE_MISMATCH; - } - if (key_params->hash_idx != check->hash_alg) { - return CRYPT_INVALID_HASH; - } - if (key_params->mgf1_hash_idx != check->mgf1_hash_alg) { - return CRYPT_INVALID_HASH; - } - return CRYPT_OK; -} - -static LTC_INLINE int s_rsa_key_set_hash_algs(ltc_rsa_op_checked *check) -{ - ltc_rsa_op_parameters *params = check->params; - if (hash_is_valid(params->params.hash_idx) != CRYPT_OK) { - return CRYPT_INVALID_HASH; - } - check->hash_alg = params->params.hash_idx; - if (params->params.mgf1_hash_idx == -1) { - if (params->padding != LTC_PKCS_1_PSS && params->padding != LTC_PKCS_1_OAEP) - return CRYPT_OK; - } else if (hash_is_valid(params->params.mgf1_hash_idx) == CRYPT_OK) { - check->mgf1_hash_alg = params->params.mgf1_hash_idx; - return CRYPT_OK; - } - return CRYPT_INVALID_HASH; -} - -static LTC_INLINE int s_rsa_key_valid_sign(ltc_rsa_op_checked *check) -{ - ltc_rsa_op_parameters *params = check->params; - if ((params->padding != LTC_PKCS_1_V1_5) - && (params->padding != LTC_PKCS_1_PSS) - && (params->padding != LTC_PKCS_1_V1_5_NA1)) { - return CRYPT_PK_INVALID_PADDING; - } - - if (params->padding != LTC_PKCS_1_V1_5_NA1) { - int err = s_rsa_key_set_hash_algs(check); - if (err != CRYPT_OK) { - return err; - } - } - if (params->padding == LTC_PKCS_1_V1_5) { - /* not all hashes have OIDs... so sad */ - if (check->hash_alg == -1 - || hash_descriptor[check->hash_alg].OIDlen == 0) { - return CRYPT_INVALID_ARG; - } - } - return s_rsa_key_valid_rsa_params(check); -} - -static LTC_INLINE int s_rsa_key_valid_crypt(ltc_rsa_op_checked *check) -{ - ltc_rsa_op_parameters *params = check->params; - if ((params->padding != LTC_PKCS_1_V1_5) && - (params->padding != LTC_PKCS_1_OAEP)) { - return CRYPT_PK_INVALID_PADDING; - } - - if (params->padding == LTC_PKCS_1_OAEP) { - int err = s_rsa_key_set_hash_algs(check); - if (err != CRYPT_OK) { - return err; - } - } - return s_rsa_key_valid_rsa_params(check); -} - -static LTC_INLINE int s_rsa_check_prng(ltc_rsa_op op, ltc_rsa_op_parameters *params) -{ - /* Only PSS signing needs a PRNG, v1.5 signing is deterministic. - * All encryption needs a PRNG (OAEP seed, v1.5 EME random padding). */ - if ((op & LTC_RSA_OP_SIGN) == LTC_RSA_OP_SIGN - && params->padding != LTC_PKCS_1_PSS) - return CRYPT_OK; - if (params->prng == NULL) - return CRYPT_INVALID_PRNG; - /* valid prng ? */ - return prng_is_valid(params->wprng); -} - -int rsa_key_valid_op(ltc_rsa_op op, ltc_rsa_op_checked *check) -{ - int err; - check->hash_alg = check->mgf1_hash_alg = -1; - LTC_ARGCHK(check->params != NULL); - if ((op & LTC_RSA_OP_PKCS1) != LTC_RSA_OP_PKCS1) { - /* PKCS#1 ops don't need an RSA key */ - LTC_ARGCHK(check->key != NULL); - } - if ((op & LTC_RSA_OP_SEND) == LTC_RSA_OP_SEND) { - if ((err = s_rsa_check_prng(op, check->params)) != CRYPT_OK) { - return err; - } - } - switch (op) { - case LTC_RSA_ENCRYPT: - case LTC_RSA_DECRYPT: - case LTC_PKCS1_ENCRYPT: - case LTC_PKCS1_DECRYPT: - return s_rsa_key_valid_crypt(check); - case LTC_RSA_SIGN: - case LTC_RSA_VERIFY: - case LTC_PKCS1_SIGN: - case LTC_PKCS1_VERIFY: - return s_rsa_key_valid_sign(check); - } - return CRYPT_ERROR; -} - -int rsa_params_equal(const ltc_rsa_parameters *a, const ltc_rsa_parameters *b) -{ - if (a->saltlen != b->saltlen) - return 0; - if (a->hash_idx != b->hash_idx) - return 0; - if (a->mgf1_hash_idx != b->mgf1_hash_idx) - return 0; - return 1; -} - -#endif diff --git a/src/pk/rsa/rsa_make_key.c b/src/pk/rsa/rsa_make_key.c deleted file mode 100644 index 7cbecaf4..00000000 --- a/src/pk/rsa/rsa_make_key.c +++ /dev/null @@ -1,165 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file rsa_make_key.c - RSA key generation, Tom St Denis -*/ - -#ifdef LTC_MRSA - -static int s_rsa_make_key(prng_state *prng, int wprng, int size, void *e, rsa_key *key) -{ - void *p, *q, *tmp1, *tmp2; - int err; - - LTC_ARGCHK(ltc_mp.name != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(size > 0); - - if ((err = prng_is_valid(wprng)) != CRYPT_OK) { - return err; - } - - if ((err = ltc_mp_init_multi(&p, &q, &tmp1, &tmp2, LTC_NULL)) != CRYPT_OK) { - return err; - } - - /* make primes p and q (optimization provided by Wayne Scott) */ - - /* make prime "p" */ - do { - if ((err = rand_prime( p, size/2, prng, wprng)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_sub_d( p, 1, tmp1)) != CRYPT_OK) { goto cleanup; } /* tmp1 = p-1 */ - if ((err = ltc_mp_gcd( tmp1, e, tmp2)) != CRYPT_OK) { goto cleanup; } /* tmp2 = gcd(p-1, e) */ - } while (ltc_mp_cmp_d( tmp2, 1) != 0); /* while e divides p-1 */ - - /* make prime "q" */ - do { - if ((err = rand_prime( q, size/2, prng, wprng)) != CRYPT_OK) { goto cleanup; } - if ((err = ltc_mp_sub_d( q, 1, tmp1)) != CRYPT_OK) { goto cleanup; } /* tmp1 = q-1 */ - if ((err = ltc_mp_gcd( tmp1, e, tmp2)) != CRYPT_OK) { goto cleanup; } /* tmp2 = gcd(q-1, e) */ - } while (ltc_mp_cmp_d( tmp2, 1) != 0); /* while e divides q-1 */ - - /* tmp1 = lcm(p-1, q-1) */ - if ((err = ltc_mp_sub_d( p, 1, tmp2)) != CRYPT_OK) { goto cleanup; } /* tmp2 = p-1 */ - /* tmp1 = q-1 (previous do/while loop) */ - if ((err = ltc_mp_lcm( tmp1, tmp2, tmp1)) != CRYPT_OK) { goto cleanup; } /* tmp1 = lcm(p-1, q-1) */ - - /* make key */ - if ((err = rsa_init(key)) != CRYPT_OK) { - goto errkey; - } - - if ((err = ltc_mp_copy( e, key->e)) != CRYPT_OK) { goto errkey; } /* key->e = e */ - if ((err = ltc_mp_invmod( key->e, tmp1, key->d)) != CRYPT_OK) { goto errkey; } /* key->d = 1/e mod lcm(p-1,q-1) */ - if ((err = ltc_mp_mul( p, q, key->N)) != CRYPT_OK) { goto errkey; } /* key->N = pq */ - - /* optimize for CRT now */ - /* find d mod q-1 and d mod p-1 */ - if ((err = ltc_mp_sub_d( p, 1, tmp1)) != CRYPT_OK) { goto errkey; } /* tmp1 = p-1 */ - if ((err = ltc_mp_sub_d( q, 1, tmp2)) != CRYPT_OK) { goto errkey; } /* tmp2 = q-1 */ - if ((err = ltc_mp_mod( key->d, tmp1, key->dP)) != CRYPT_OK) { goto errkey; } /* dP = d mod p-1 */ - if ((err = ltc_mp_mod( key->d, tmp2, key->dQ)) != CRYPT_OK) { goto errkey; } /* dQ = d mod q-1 */ - if ((err = ltc_mp_invmod( q, p, key->qP)) != CRYPT_OK) { goto errkey; } /* qP = 1/q mod p */ - - if ((err = ltc_mp_copy( p, key->p)) != CRYPT_OK) { goto errkey; } - if ((err = ltc_mp_copy( q, key->q)) != CRYPT_OK) { goto errkey; } - - /* set key type (in this case it's CRT optimized) */ - key->type = PK_PRIVATE; - - /* return ok and free temps */ - err = CRYPT_OK; - goto cleanup; -errkey: - rsa_free(key); -cleanup: - ltc_mp_deinit_multi(tmp2, tmp1, q, p, LTC_NULL); - return err; -} - -/** - Create an RSA key based on a long public exponent type - @param prng An active PRNG state - @param wprng The index of the PRNG desired - @param size The size of the modulus (key size) desired (octets) - @param e The "e" value (public key). e==65537 is a good choice - @param key [out] Destination of a newly created private key pair - @return CRYPT_OK if successful, upon error all allocated ram is freed -*/ -int rsa_make_key(prng_state *prng, int wprng, int size, long e, rsa_key *key) -{ - void *tltc_mp_e; - int err; - - if ((e < 3) || ((e & 1) == 0)) { - return CRYPT_INVALID_ARG; - } - - if ((err = ltc_mp_init(&tltc_mp_e)) != CRYPT_OK) { - return err; - } - - if ((err = ltc_mp_set_int(tltc_mp_e, e)) == CRYPT_OK) - err = s_rsa_make_key(prng, wprng, size, tltc_mp_e, key); - - ltc_mp_clear(tltc_mp_e); - - return err; -} - -/** - Create an RSA key based on a hexadecimal public exponent type - @param prng An active PRNG state - @param wprng The index of the PRNG desired - @param size The size of the modulus (key size) desired (octets) - @param e The "e" value (public key). e==65537 is a good choice - @param elen The length of e (octets) - @param key [out] Destination of a newly created private key pair - @return CRYPT_OK if successful, upon error all allocated ram is freed -*/ -int rsa_make_key_ubin_e(prng_state *prng, int wprng, int size, - const unsigned char *e, unsigned long elen, rsa_key *key) -{ - int err; - void *tmp_e; - - if ((err = ltc_mp_init(&tmp_e)) != CRYPT_OK) { - return err; - } - - if ((err = ltc_mp_read_unsigned_bin(tmp_e, e, elen)) == CRYPT_OK) - err = rsa_make_key_bn_e(prng, wprng, size, tmp_e, key); - - ltc_mp_clear(tmp_e); - - return err; -} - -/** - Create an RSA key based on a bignumber public exponent type - @param prng An active PRNG state - @param wprng The index of the PRNG desired - @param size The size of the modulus (key size) desired (octets) - @param e The "e" value (public key). e==65537 is a good choice - @param key [out] Destination of a newly created private key pair - @return CRYPT_OK if successful, upon error all allocated ram is freed -*/ -int rsa_make_key_bn_e(prng_state *prng, int wprng, int size, void *e, rsa_key *key) -{ - int err; - int e_bits; - - e_bits = ltc_mp_count_bits(e); - if ((e_bits > 1 && e_bits < 256) && (ltc_mp_get_digit(e, 0) & 1)) { - err = s_rsa_make_key(prng, wprng, size, e, key); - } else { - err = CRYPT_INVALID_ARG; - } - - return err; -} - -#endif diff --git a/src/pk/rsa/rsa_set.c b/src/pk/rsa/rsa_set.c deleted file mode 100644 index 55d6f7cb..00000000 --- a/src/pk/rsa/rsa_set.c +++ /dev/null @@ -1,123 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - - -#ifdef LTC_MRSA - -/** - Import RSA key from raw numbers - - @param N RSA's N - @param Nlen RSA's N's length - @param e RSA's e - @param elen RSA's e's length - @param d RSA's d (only private key, NULL for public key) - @param dlen RSA's d's length - @param key [out] the destination for the imported key - @return CRYPT_OK if successful -*/ -int rsa_set_key(const unsigned char *N, unsigned long Nlen, - const unsigned char *e, unsigned long elen, - const unsigned char *d, unsigned long dlen, - rsa_key *key) -{ - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(N != NULL); - LTC_ARGCHK(e != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - if ((err = rsa_init(key)) != CRYPT_OK) return err; - - if ((err = ltc_mp_read_unsigned_bin(key->N , N , Nlen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = ltc_mp_read_unsigned_bin(key->e , e , elen)) != CRYPT_OK) { goto LBL_ERR; } - if (d && dlen) { - if ((err = ltc_mp_read_unsigned_bin(key->d , d , dlen)) != CRYPT_OK) { goto LBL_ERR; } - key->type = PK_PRIVATE; - } - else { - key->type = PK_PUBLIC; - } - return CRYPT_OK; - -LBL_ERR: - rsa_free(key); - return err; -} - -/** - Import factors of an RSA key from raw numbers - - Only for private keys. - - @param p RSA's p - @param plen RSA's p's length - @param q RSA's q - @param qlen RSA's q's length - @param key [out] the destination for the imported key - @return CRYPT_OK if successful -*/ -int rsa_set_factors(const unsigned char *p, unsigned long plen, - const unsigned char *q, unsigned long qlen, - rsa_key *key) -{ - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(p != NULL); - LTC_ARGCHK(q != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - if (key->type != PK_PRIVATE) return CRYPT_PK_TYPE_MISMATCH; - - if ((err = ltc_mp_read_unsigned_bin(key->p , p , plen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = ltc_mp_read_unsigned_bin(key->q , q , qlen)) != CRYPT_OK) { goto LBL_ERR; } - return CRYPT_OK; - -LBL_ERR: - rsa_free(key); - return err; -} - -/** - Import CRT parameters of an RSA key from raw numbers - - Only for private keys. - - @param dP RSA's dP - @param dPlen RSA's dP's length - @param dQ RSA's dQ - @param dQlen RSA's dQ's length - @param qP RSA's qP - @param qPlen RSA's qP's length - @param key [out] the destination for the imported key - @return CRYPT_OK if successful -*/ -int rsa_set_crt_params(const unsigned char *dP, unsigned long dPlen, - const unsigned char *dQ, unsigned long dQlen, - const unsigned char *qP, unsigned long qPlen, - rsa_key *key) -{ - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(dP != NULL); - LTC_ARGCHK(dQ != NULL); - LTC_ARGCHK(qP != NULL); - LTC_ARGCHK(ltc_mp.name != NULL); - - if (key->type != PK_PRIVATE) return CRYPT_PK_TYPE_MISMATCH; - - if ((err = ltc_mp_read_unsigned_bin(key->dP, dP, dPlen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = ltc_mp_read_unsigned_bin(key->dQ, dQ, dQlen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = ltc_mp_read_unsigned_bin(key->qP, qP, qPlen)) != CRYPT_OK) { goto LBL_ERR; } - return CRYPT_OK; - -LBL_ERR: - rsa_free(key); - return err; -} - -#endif /* LTC_MRSA */ diff --git a/src/pk/rsa/rsa_sign_hash.c b/src/pk/rsa/rsa_sign_hash.c deleted file mode 100644 index e6d3dddc..00000000 --- a/src/pk/rsa/rsa_sign_hash.c +++ /dev/null @@ -1,110 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file rsa_sign_hash.c - RSA PKCS #1 v1.5 and v2 PSS sign hash, Tom St Denis and Andreas Lange -*/ - -#ifdef LTC_MRSA -/** - PKCS #1 pad then sign - @param hash The hash to sign - @param hashlen The length of the hash to sign (octets) - @param sig [out] The signature - @param siglen [in/out] The max size and resulting size of the signature - @param params The RSA operation parameters - @param key The private RSA key to use - @return CRYPT_OK if successful -*/ -int rsa_sign_hash_v2(const unsigned char *hash, unsigned long hashlen, - unsigned char *sig, unsigned long *siglen, - ltc_rsa_op_parameters *params, - const rsa_key *key) -{ - unsigned long modulus_bitlen, modulus_bytelen, x, y; - int err; - ltc_rsa_op_checked op_checked = ltc_rsa_op_checked_init(key, params); - - LTC_ARGCHK(hash != NULL); - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(siglen != NULL); - LTC_ARGCHK(key != NULL); - - if ((err = rsa_key_valid_op(LTC_RSA_SIGN, &op_checked)) != CRYPT_OK) { - return err; - } - - /* get modulus len in bits */ - modulus_bitlen = ltc_mp_count_bits((key->N)); - - /* siglen must be at least the size of the modulus */ - modulus_bytelen = ltc_mp_unsigned_bin_size((key->N)); - if (modulus_bytelen > *siglen) { - *siglen = modulus_bytelen; - return CRYPT_BUFFER_OVERFLOW; - } - - if (params->padding == LTC_PKCS_1_PSS) { - /* PSS pad the key */ - x = *siglen; - if ((err = ltc_pkcs_1_pss_encode_mgf1(hash, hashlen, params, modulus_bitlen, sig, &x)) != CRYPT_OK) { - return err; - } - } else { - /* PKCS #1 v1.5 pad the hash */ - unsigned char *tmpin = NULL; - const unsigned char *tmpin_ro; - - if (params->padding == LTC_PKCS_1_V1_5) { - ltc_asn1_list digestinfo[2], siginfo[2]; - - /* construct the SEQUENCE - SEQUENCE { - SEQUENCE {hashoid OID - blah NULL - } - hash OCTET STRING - } - */ - LTC_SET_ASN1(digestinfo, 0, LTC_ASN1_OBJECT_IDENTIFIER, hash_descriptor[op_checked.hash_alg].OID, hash_descriptor[op_checked.hash_alg].OIDlen); - LTC_SET_ASN1(digestinfo, 1, LTC_ASN1_NULL, NULL, 0); - LTC_SET_ASN1(siginfo, 0, LTC_ASN1_SEQUENCE, digestinfo, 2); - LTC_SET_ASN1(siginfo, 1, LTC_ASN1_OCTET_STRING, hash, hashlen); - - /* allocate memory for the encoding */ - y = ltc_mp_unsigned_bin_size(key->N); - tmpin = XMALLOC(y); - if (tmpin == NULL) { - return CRYPT_MEM; - } - - if ((err = der_encode_sequence(siginfo, 2, tmpin, &y)) != CRYPT_OK) { - XFREE(tmpin); - return err; - } - tmpin_ro = tmpin; - } else { - /* set the pointer and data-length to the input values */ - tmpin_ro = hash; - y = hashlen; - } - - x = *siglen; - err = ltc_pkcs_1_v1_5_encode(tmpin_ro, y, LTC_PKCS_1_EMSA, modulus_bitlen, NULL, 0, sig, &x); - - if (params->padding == LTC_PKCS_1_V1_5) { - XFREE(tmpin); - } - - if (err != CRYPT_OK) { - return err; - } - } - - /* RSA encode it */ - return ltc_mp.rsa_me(sig, x, sig, siglen, PK_PRIVATE, key); -} - -#endif /* LTC_MRSA */ diff --git a/src/pk/rsa/rsa_sign_saltlen_get.c b/src/pk/rsa/rsa_sign_saltlen_get.c deleted file mode 100644 index f1ae2638..00000000 --- a/src/pk/rsa/rsa_sign_saltlen_get.c +++ /dev/null @@ -1,37 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file rsa_sign_saltlen_get.c - Retrieve the maximum size of the salt, Steffen Jaeckel. -*/ - -#ifdef LTC_MRSA - -/** - Retrieve the maximum possible size of the salt when creating a PKCS#1 PSS signature. - @param padding Type of padding (LTC_PKCS_1_PSS only) - @param hash_idx The index of the desired hash - @param key The RSA key - @return The maximum salt length in bytes or INT_MAX on error. -*/ -int rsa_sign_saltlen_get_max_ex(int padding, int hash_idx, const rsa_key *key) -{ - int ret = INT_MAX; - LTC_ARGCHK(key != NULL); - - if ((hash_is_valid(hash_idx) == CRYPT_OK) && - (padding == LTC_PKCS_1_PSS)) - { - ret = rsa_get_size(key); - if (ret < INT_MAX) - { - ret -= (hash_descriptor[hash_idx].hashsize + 2); - } /* if */ - } /* if */ - - return ret; -} - -#endif diff --git a/src/pk/rsa/rsa_verify_hash.c b/src/pk/rsa/rsa_verify_hash.c deleted file mode 100644 index 2337186f..00000000 --- a/src/pk/rsa/rsa_verify_hash.c +++ /dev/null @@ -1,161 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file rsa_verify_hash.c - RSA PKCS #1 v1.5 or v2 PSS signature verification, Tom St Denis and Andreas Lange -*/ - -#ifdef LTC_MRSA -/** - PKCS #1 de-sign then v1.5 or PSS depad - @param sig The signature data - @param siglen The length of the signature data (octets) - @param hash The hash of the message that was signed - @param hashlen The length of the hash of the message that was signed (octets) - @param params The RSA operation parameters - @param stat [out] The result of the signature comparison, 1==valid, 0==invalid - @param key The public RSA key corresponding to the key that performed the signature - @return CRYPT_OK on success (even if the signature is invalid) -*/ -int rsa_verify_hash_v2(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - ltc_rsa_op_parameters *params, - int *stat, - const rsa_key *key) -{ - unsigned long modulus_bitlen, modulus_bytelen, x; - int err; - unsigned char *tmpbuf; - ltc_rsa_op_checked op_checked = ltc_rsa_op_checked_init(key, params); - - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ - LTC_ARGCHK(stat != NULL); - *stat = 0; - - LTC_ARGCHK(hash != NULL); - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(key != NULL); - - if ((err = rsa_key_valid_op(LTC_RSA_VERIFY, &op_checked)) != CRYPT_OK) { - return err; - } - - /* get modulus len in bits */ - modulus_bitlen = ltc_mp_count_bits( (key->N)); - - /* outlen must be at least the size of the modulus */ - modulus_bytelen = ltc_mp_unsigned_bin_size( (key->N)); - if (modulus_bytelen != siglen) { - return CRYPT_INVALID_PACKET; - } - - /* allocate temp buffer for decoded sig */ - tmpbuf = XMALLOC(siglen); - if (tmpbuf == NULL) { - return CRYPT_MEM; - } - - /* RSA decode it */ - x = siglen; - if ((err = ltc_mp.rsa_me(sig, siglen, tmpbuf, &x, PK_PUBLIC, key)) != CRYPT_OK) { - XFREE(tmpbuf); - return err; - } - - /* make sure the output is the right size */ - if (x != siglen) { - XFREE(tmpbuf); - return CRYPT_INVALID_PACKET; - } - - if (params->padding == LTC_PKCS_1_PSS) { - /* PSS decode and verify it */ - - if(modulus_bitlen%8 == 1){ - err = ltc_pkcs_1_pss_decode_mgf1(hash, hashlen, tmpbuf+1, x-1, params, modulus_bitlen, stat); - } - else{ - err = ltc_pkcs_1_pss_decode_mgf1(hash, hashlen, tmpbuf, x, params, modulus_bitlen, stat); - } - - } else { - /* PKCS #1 v1.5 decode it */ - unsigned char *out; - unsigned long outlen; - int decoded; - - /* allocate temp buffer for decoded hash */ - outlen = ((modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0)) - 3; - out = XMALLOC(outlen); - if (out == NULL) { - err = CRYPT_MEM; - goto bail_2; - } - - if ((err = ltc_pkcs_1_v1_5_decode(tmpbuf, x, LTC_PKCS_1_EMSA, modulus_bitlen, out, &outlen, &decoded)) != CRYPT_OK) { - XFREE(out); - goto bail_2; - } - - if (params->padding == LTC_PKCS_1_V1_5) { - unsigned long loid[16], reallen; - ltc_asn1_list digestinfo[2], siginfo[2]; - - /* now we must decode out[0...outlen-1] using ASN.1, test the OID and then test the hash */ - /* construct the SEQUENCE - SEQUENCE { - SEQUENCE {hashoid OID - blah NULL - } - hash OCTET STRING - } - */ - LTC_SET_ASN1(digestinfo, 0, LTC_ASN1_OBJECT_IDENTIFIER, loid, LTC_ARRAY_SIZE(loid)); - LTC_SET_ASN1(digestinfo, 1, LTC_ASN1_NULL, NULL, 0); - digestinfo[1].optional = 1; - LTC_SET_ASN1(siginfo, 0, LTC_ASN1_SEQUENCE, digestinfo, 2); - LTC_SET_ASN1(siginfo, 1, LTC_ASN1_OCTET_STRING, tmpbuf, siglen); - - if (der_decode_sequence_strict(out, outlen, siginfo, 2) != CRYPT_OK) { - XFREE(out); - goto bail_2; - } - - if ((err = der_length_sequence(siginfo, 2, &reallen)) != CRYPT_OK) { - XFREE(out); - goto bail_2; - } - - /* test OID */ - if ((reallen == outlen) && - (digestinfo[0].size == hash_descriptor[op_checked.hash_alg].OIDlen) && - (XMEMCMP(digestinfo[0].data, hash_descriptor[op_checked.hash_alg].OID, sizeof(unsigned long) * hash_descriptor[op_checked.hash_alg].OIDlen) == 0) && - (siginfo[1].size == hashlen) && - (XMEMCMP(siginfo[1].data, hash, hashlen) == 0)) { - *stat = 1; - } - } else { - /* only check if the hash is equal */ - if ((hashlen == outlen) && - (XMEMCMP(out, hash, hashlen) == 0)) { - *stat = 1; - } - } - -#ifdef LTC_CLEAN_STACK - zeromem(out, outlen); -#endif - XFREE(out); - } - -bail_2: -#ifdef LTC_CLEAN_STACK - zeromem(tmpbuf, siglen); -#endif - XFREE(tmpbuf); - return err; -} - -#endif /* LTC_MRSA */ diff --git a/src/pk/x25519/x25519_export.c b/src/pk/x25519/x25519_export.c deleted file mode 100644 index fd997223..00000000 --- a/src/pk/x25519/x25519_export.c +++ /dev/null @@ -1,31 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x25519_export.c - Export a X25519 key to a binary packet, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -/** - Export a X25519 key to a binary packet - @param out [out] The destination for the key - @param outlen [in/out] The max size and resulting size of the X25519 key - @param type Which type of key (PK_PRIVATE, PK_PUBLIC|PK_STD or PK_PUBLIC) - @param key The key you wish to export - @return CRYPT_OK if successful -*/ -int x25519_export( unsigned char *out, unsigned long *outlen, - int which, - const curve25519_key *key) -{ - LTC_ARGCHK(key != NULL); - - if (key->pka != LTC_PKA_X25519) return CRYPT_PK_INVALID_TYPE; - - return ec25519_export(out, outlen, which, key); -} - -#endif diff --git a/src/pk/x25519/x25519_import.c b/src/pk/x25519/x25519_import.c deleted file mode 100644 index a16c624d..00000000 --- a/src/pk/x25519/x25519_import.c +++ /dev/null @@ -1,35 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x25519_import.c - Import a X25519 key from a SubjectPublicKeyInfo, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -/** - Import a X25519 key - @param in The packet to read - @param inlen The length of the input packet - @param key [out] Where to import the key to - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int x25519_import(const unsigned char *in, unsigned long inlen, curve25519_key *key) -{ - int err; - unsigned long key_len; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - - key_len = sizeof(key->pub); - if ((err = x509_decode_subject_public_key_info(in, inlen, LTC_OID_X25519, key->pub, &key_len, LTC_ASN1_EOL, NULL, 0uL)) == CRYPT_OK) { - key->type = PK_PUBLIC; - key->pka = LTC_PKA_X25519; - } - return err; -} - -#endif diff --git a/src/pk/x25519/x25519_import_pkcs8.c b/src/pk/x25519/x25519_import_pkcs8.c deleted file mode 100644 index 5c8e9b68..00000000 --- a/src/pk/x25519/x25519_import_pkcs8.c +++ /dev/null @@ -1,32 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x25519_import_pkcs8.c - Import a X25519 key in PKCS#8 format, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -int x25519_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, - curve25519_key *key) -{ - return ec25519_import_pkcs8_asn1(alg_id, priv_key, LTC_OID_X25519, key); -} -/** - Import a X25519 private key in PKCS#8 format - @param in The packet to import from - @param inlen It's length (octets) - @param pw_ctx The password context when decrypting the private key - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int x25519_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - curve25519_key *key) -{ - return ec25519_import_pkcs8(in, inlen, pw_ctx, LTC_OID_X25519, key); -} - -#endif diff --git a/src/pk/x25519/x25519_import_raw.c b/src/pk/x25519/x25519_import_raw.c deleted file mode 100644 index da659201..00000000 --- a/src/pk/x25519/x25519_import_raw.c +++ /dev/null @@ -1,41 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x25519_import_raw.c - Set the parameters of a X25519 key, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -/** - Set the parameters of a X25519 key - - @param in The key - @param inlen The length of the key - @param which Which type of key (PK_PRIVATE or PK_PUBLIC) - @param key [out] Destination of the key - @return CRYPT_OK if successful -*/ -int x25519_import_raw(const unsigned char *in, unsigned long inlen, int which, curve25519_key *key) -{ - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen == 32uL); - LTC_ARGCHK(key != NULL); - - if (which == PK_PRIVATE) { - XMEMCPY(key->priv, in, sizeof(key->priv)); - tweetnacl_crypto_scalarmult_base(key->pub, key->priv); - } else if (which == PK_PUBLIC) { - XMEMCPY(key->pub, in, sizeof(key->pub)); - } else { - return CRYPT_INVALID_ARG; - } - key->pka = LTC_PKA_X25519; - key->type = which; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/x25519/x25519_import_x509.c b/src/pk/x25519/x25519_import_x509.c deleted file mode 100644 index a3d90cdc..00000000 --- a/src/pk/x25519/x25519_import_x509.c +++ /dev/null @@ -1,45 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x25519_import_x509.c - Import a X25519 key from a X.509 certificate, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -static int s_x25519_decode(const unsigned char *in, unsigned long inlen, curve25519_key *key) -{ - if (inlen != sizeof(key->pub)) return CRYPT_PK_INVALID_SIZE; - XMEMCPY(key->pub, in, sizeof(key->pub)); - return CRYPT_OK; -} - -/** - Import a X25519 public key from a X.509 certificate - @param in The DER encoded X.509 certificate - @param inlen The length of the certificate - @param key [out] Where to import the key to - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int x25519_import_x509(const unsigned char *in, unsigned long inlen, curve25519_key *key) -{ - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - - if ((err = x509_decode_public_key_from_certificate(in, inlen, - LTC_OID_X25519, - LTC_ASN1_EOL, NULL, NULL, - (public_key_decode_cb)s_x25519_decode, key)) != CRYPT_OK) { - return err; - } - key->type = PK_PUBLIC; - key->pka = LTC_PKA_X25519; - - return err; -} - -#endif diff --git a/src/pk/x25519/x25519_make_key.c b/src/pk/x25519/x25519_make_key.c deleted file mode 100644 index a30003cc..00000000 --- a/src/pk/x25519/x25519_make_key.c +++ /dev/null @@ -1,42 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x25519_make_key.c - Create a X25519 key, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -/** - Create a X25519 key - @param prng An active PRNG state - @param wprng The index of the PRNG desired - @param key [out] Destination of a newly created private key pair - @return CRYPT_OK if successful -*/ -int x25519_make_key(prng_state *prng, int wprng, curve25519_key *key) -{ - int err; - - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(key != NULL); - - if ((err = prng_is_valid(wprng)) != CRYPT_OK) { - return err; - } - - if (prng_descriptor[wprng].read(key->priv, sizeof(key->priv), prng) != sizeof(key->priv)) { - return CRYPT_ERROR_READPRNG; - } - - tweetnacl_crypto_scalarmult_base(key->pub, key->priv); - - key->type = PK_PRIVATE; - key->pka = LTC_PKA_X25519; - - return err; -} - -#endif diff --git a/src/pk/x25519/x25519_shared_secret.c b/src/pk/x25519/x25519_shared_secret.c deleted file mode 100644 index 9261cbd5..00000000 --- a/src/pk/x25519/x25519_shared_secret.c +++ /dev/null @@ -1,50 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x25519_shared_secret.c - Create a X25519 shared secret, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -/** - Create a X25519 shared secret. - @param private_key The private X25519 key in the pair - @param public_key The public X25519 key in the pair - @param out [out] The destination of the shared data - @param outlen [in/out] The max size and resulting size of the shared data. - @return CRYPT_OK if successful -*/ -int x25519_shared_secret(const curve25519_key *private_key, - const curve25519_key *public_key, - unsigned char *out, unsigned long *outlen) -{ - unsigned char nonzero = 0; - unsigned long x; - - LTC_ARGCHK(private_key != NULL); - LTC_ARGCHK(public_key != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if (public_key->pka != LTC_PKA_X25519) return CRYPT_PK_INVALID_TYPE; - if (private_key->type != PK_PRIVATE) return CRYPT_PK_INVALID_TYPE; - - if (*outlen < 32uL) { - *outlen = 32uL; - return CRYPT_BUFFER_OVERFLOW; - } - - tweetnacl_crypto_scalarmult(out, private_key->priv, public_key->pub); - *outlen = 32uL; - - /* Reject all-zero shared secrets; RFC 7748 Section 6.1 says peers MAY check for this */ - for (x = 0; x < *outlen; ++x) nonzero |= out[x]; - if (nonzero == 0) return CRYPT_INVALID_PACKET; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/x448/x448_export.c b/src/pk/x448/x448_export.c deleted file mode 100644 index 33d0b174..00000000 --- a/src/pk/x448/x448_export.c +++ /dev/null @@ -1,31 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x448_export.c - Export a X448 key to a binary packet -*/ - -#ifdef LTC_CURVE448 - -/** - Export a X448 key to a binary packet - @param out [out] The destination for the key - @param outlen [in/out] The max size and resulting size of the X448 key - @param which Which type of key (PK_PRIVATE, PK_PUBLIC|PK_STD or PK_PUBLIC) - @param key The key you wish to export - @return CRYPT_OK if successful -*/ -int x448_export( unsigned char *out, unsigned long *outlen, - int which, - const curve448_key *key) -{ - LTC_ARGCHK(key != NULL); - - if (key->pka != LTC_PKA_X448) return CRYPT_PK_INVALID_TYPE; - - return ec448_export(out, outlen, which, key); -} - -#endif diff --git a/src/pk/x448/x448_import.c b/src/pk/x448/x448_import.c deleted file mode 100644 index ea6f757e..00000000 --- a/src/pk/x448/x448_import.c +++ /dev/null @@ -1,35 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x448_import.c - Import a X448 key from a SubjectPublicKeyInfo -*/ - -#ifdef LTC_CURVE448 - -/** - Import a X448 key - @param in The packet to read - @param inlen The length of the input packet - @param key [out] Where to import the key to - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int x448_import(const unsigned char *in, unsigned long inlen, curve448_key *key) -{ - int err; - unsigned long key_len; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - - key_len = 56uL; - if ((err = x509_decode_subject_public_key_info(in, inlen, LTC_OID_X448, key->pub, &key_len, LTC_ASN1_EOL, NULL, 0uL)) == CRYPT_OK) { - key->type = PK_PUBLIC; - key->pka = LTC_PKA_X448; - } - return err; -} - -#endif diff --git a/src/pk/x448/x448_import_pkcs8.c b/src/pk/x448/x448_import_pkcs8.c deleted file mode 100644 index c0512923..00000000 --- a/src/pk/x448/x448_import_pkcs8.c +++ /dev/null @@ -1,33 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x448_import_pkcs8.c - Import a X448 key in PKCS#8 format -*/ - -#ifdef LTC_CURVE448 - -int x448_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, - curve448_key *key) -{ - return ec448_import_pkcs8_asn1(alg_id, priv_key, LTC_OID_X448, key); -} - -/** - Import a X448 private key in PKCS#8 format - @param in The packet to import from - @param inlen It's length (octets) - @param pw_ctx The password context when decrypting the private key - @param key [out] Destination for newly imported key - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int x448_import_pkcs8(const unsigned char *in, unsigned long inlen, - const password_ctx *pw_ctx, - curve448_key *key) -{ - return ec448_import_pkcs8(in, inlen, pw_ctx, LTC_OID_X448, key); -} - -#endif diff --git a/src/pk/x448/x448_import_raw.c b/src/pk/x448/x448_import_raw.c deleted file mode 100644 index 66ba3114..00000000 --- a/src/pk/x448/x448_import_raw.c +++ /dev/null @@ -1,41 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x448_import_raw.c - Set the parameters of a X448 key -*/ - -#ifdef LTC_CURVE448 - -/** - Set the parameters of a X448 key - - @param in The key - @param inlen The length of the key - @param which Which type of key (PK_PRIVATE or PK_PUBLIC) - @param key [out] Destination of the key - @return CRYPT_OK if successful -*/ -int x448_import_raw(const unsigned char *in, unsigned long inlen, int which, curve448_key *key) -{ - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen == 56uL); - LTC_ARGCHK(key != NULL); - - if (which == PK_PRIVATE) { - XMEMCPY(key->priv, in, 56uL); - ec448_scalarmult_base_internal(key->pub, key->priv); - } else if (which == PK_PUBLIC) { - XMEMCPY(key->pub, in, 56uL); - } else { - return CRYPT_INVALID_ARG; - } - key->pka = LTC_PKA_X448; - key->type = which; - - return CRYPT_OK; -} - -#endif diff --git a/src/pk/x448/x448_import_x509.c b/src/pk/x448/x448_import_x509.c deleted file mode 100644 index f6822908..00000000 --- a/src/pk/x448/x448_import_x509.c +++ /dev/null @@ -1,45 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x448_import_x509.c - Import a X448 key from a X.509 certificate -*/ - -#ifdef LTC_CURVE448 - -static int s_x448_decode(const unsigned char *in, unsigned long inlen, curve448_key *key) -{ - if (inlen != 56uL) return CRYPT_PK_INVALID_SIZE; - XMEMCPY(key->pub, in, 56uL); - return CRYPT_OK; -} - -/** - Import a X448 public key from a X.509 certificate - @param in The DER encoded X.509 certificate - @param inlen The length of the certificate - @param key [out] Where to import the key to - @return CRYPT_OK if successful, on error all allocated memory is freed automatically -*/ -int x448_import_x509(const unsigned char *in, unsigned long inlen, curve448_key *key) -{ - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); - - if ((err = x509_decode_public_key_from_certificate(in, inlen, - LTC_OID_X448, - LTC_ASN1_EOL, NULL, NULL, - (public_key_decode_cb)s_x448_decode, key)) != CRYPT_OK) { - return err; - } - key->type = PK_PUBLIC; - key->pka = LTC_PKA_X448; - - return err; -} - -#endif diff --git a/src/pk/x448/x448_make_key.c b/src/pk/x448/x448_make_key.c deleted file mode 100644 index 07b80ce1..00000000 --- a/src/pk/x448/x448_make_key.c +++ /dev/null @@ -1,42 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x448_make_key.c - Create a X448 key -*/ - -#ifdef LTC_CURVE448 - -/** - Create a X448 key - @param prng An active PRNG state - @param wprng The index of the PRNG desired - @param key [out] Destination of a newly created private key pair - @return CRYPT_OK if successful -*/ -int x448_make_key(prng_state *prng, int wprng, curve448_key *key) -{ - int err; - - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(key != NULL); - - if ((err = prng_is_valid(wprng)) != CRYPT_OK) { - return err; - } - - if (prng_descriptor[wprng].read(key->priv, 56uL, prng) != 56uL) { - return CRYPT_ERROR_READPRNG; - } - - ec448_scalarmult_base_internal(key->pub, key->priv); - - key->type = PK_PRIVATE; - key->pka = LTC_PKA_X448; - - return err; -} - -#endif diff --git a/src/pk/x448/x448_shared_secret.c b/src/pk/x448/x448_shared_secret.c deleted file mode 100644 index f328d206..00000000 --- a/src/pk/x448/x448_shared_secret.c +++ /dev/null @@ -1,50 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file x448_shared_secret.c - Create a X448 shared secret -*/ - -#ifdef LTC_CURVE448 - -/** - Create a X448 shared secret. - @param private_key The private X448 key in the pair - @param public_key The public X448 key in the pair - @param out [out] The destination of the shared data - @param outlen [in/out] The max size and resulting size of the shared data. - @return CRYPT_OK if successful -*/ -int x448_shared_secret(const curve448_key *private_key, - const curve448_key *public_key, - unsigned char *out, unsigned long *outlen) -{ - unsigned char nonzero = 0; - unsigned long x; - - LTC_ARGCHK(private_key != NULL); - LTC_ARGCHK(public_key != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if (public_key->pka != LTC_PKA_X448) return CRYPT_PK_INVALID_TYPE; - if (private_key->type != PK_PRIVATE) return CRYPT_PK_INVALID_TYPE; - - if (*outlen < 56uL) { - *outlen = 56uL; - return CRYPT_BUFFER_OVERFLOW; - } - - ec448_scalarmult_internal(out, private_key->priv, public_key->pub); - *outlen = 56uL; - - /* Reject all-zero shared secrets; RFC 7748 Section 6.2 says peers MAY check for this */ - for (x = 0; x < *outlen; ++x) nonzero |= out[x]; - if (nonzero == 0) return CRYPT_INVALID_PACKET; - - return CRYPT_OK; -} - -#endif diff --git a/src/prngs/chacha20.c b/src/prngs/chacha20.c deleted file mode 100644 index 30d879fe..00000000 --- a/src/prngs/chacha20.c +++ /dev/null @@ -1,218 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - - /* the idea of re-keying loosely follows the approach used in: - * http://bxr.su/OpenBSD/lib/libc/crypt/arc4random.c - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA20_PRNG - -const struct ltc_prng_descriptor chacha20_prng_desc = -{ - "chacha20", - 40, - &chacha20_prng_start, - &chacha20_prng_add_entropy, - &chacha20_prng_ready, - &chacha20_prng_read, - &chacha20_prng_done, - &chacha20_prng_export, - &chacha20_prng_import, - &chacha20_prng_test -}; - -/** - Start the PRNG - @param prng The PRNG state to initialize - @return CRYPT_OK if successful -*/ -int chacha20_prng_start(prng_state *prng) -{ - LTC_ARGCHK(prng != NULL); - prng->ready = 0; - XMEMSET(&prng->u.chacha.ent, 0, sizeof(prng->u.chacha.ent)); - prng->u.chacha.idx = 0; - LTC_MUTEX_INIT(&prng->lock) - return CRYPT_OK; -} - -/** - Add entropy to the PRNG state - @param in The data to add - @param inlen Length of the data to add - @param prng PRNG state to update - @return CRYPT_OK if successful -*/ -int chacha20_prng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - unsigned char buf[40]; - unsigned long i; - int err; - - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen > 0); - - LTC_MUTEX_LOCK(&prng->lock); - if (prng->ready) { - /* chacha20_prng_ready() was already called, do "rekey" operation */ - if ((err = chacha_keystream(&prng->u.chacha.s, buf, sizeof(buf))) != CRYPT_OK) goto LBL_UNLOCK; - for(i = 0; i < inlen; i++) buf[i % sizeof(buf)] ^= in[i]; - /* key 32 bytes, 20 rounds */ - if ((err = chacha_setup(&prng->u.chacha.s, buf, 32, 20)) != CRYPT_OK) goto LBL_UNLOCK; - /* iv 8 bytes */ - if ((err = chacha_ivctr64(&prng->u.chacha.s, buf + 32, 8, 0)) != CRYPT_OK) goto LBL_UNLOCK; - /* clear KEY + IV */ - zeromem(buf, sizeof(buf)); - } - else { - /* chacha20_prng_ready() was not called yet, add entropy to ent buffer */ - while (inlen--) prng->u.chacha.ent[prng->u.chacha.idx++ % sizeof(prng->u.chacha.ent)] ^= *in++; - } - err = CRYPT_OK; -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); - return err; -} - -/** - Make the PRNG ready to read from - @param prng The PRNG to make active - @return CRYPT_OK if successful -*/ -int chacha20_prng_ready(prng_state *prng) -{ - int err; - - LTC_ARGCHK(prng != NULL); - - LTC_MUTEX_LOCK(&prng->lock); - if (prng->ready) { err = CRYPT_OK; goto LBL_UNLOCK; } - /* key 32 bytes, 20 rounds */ - if ((err = chacha_setup(&prng->u.chacha.s, prng->u.chacha.ent, 32, 20)) != CRYPT_OK) goto LBL_UNLOCK; - /* iv 8 bytes */ - if ((err = chacha_ivctr64(&prng->u.chacha.s, prng->u.chacha.ent + 32, 8, 0)) != CRYPT_OK) goto LBL_UNLOCK; - XMEMSET(&prng->u.chacha.ent, 0, sizeof(prng->u.chacha.ent)); - prng->u.chacha.idx = 0; - prng->ready = 1; -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); - return err; -} - -/** - Read from the PRNG - @param out Destination - @param outlen Length of output - @param prng The active PRNG to read from - @return Number of octets read -*/ -unsigned long chacha20_prng_read(unsigned char *out, unsigned long outlen, prng_state *prng) -{ - if (outlen == 0 || prng == NULL || out == NULL) return 0; - LTC_MUTEX_LOCK(&prng->lock); - if (!prng->ready) { outlen = 0; goto LBL_UNLOCK; } - if (chacha_keystream(&prng->u.chacha.s, out, outlen) != CRYPT_OK) outlen = 0; -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); - return outlen; -} - -/** - Terminate the PRNG - @param prng The PRNG to terminate - @return CRYPT_OK if successful -*/ -int chacha20_prng_done(prng_state *prng) -{ - int err; - LTC_ARGCHK(prng != NULL); - LTC_MUTEX_LOCK(&prng->lock); - prng->ready = 0; - err = chacha_done(&prng->u.chacha.s); - LTC_MUTEX_UNLOCK(&prng->lock); - LTC_MUTEX_DESTROY(&prng->lock); - return err; -} - -/** - Export the PRNG state - @param out [out] Destination - @param outlen [in/out] Max size and resulting size of the state - @param prng The PRNG to export - @return CRYPT_OK if successful -*/ -LTC_PRNG_EXPORT(chacha20_prng) - -/** - Import a PRNG state - @param in The PRNG state - @param inlen Size of the state - @param prng The PRNG to import - @return CRYPT_OK if successful -*/ -int chacha20_prng_import(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - int err; - - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(in != NULL); - if (inlen < (unsigned long)chacha20_prng_desc.export_size) return CRYPT_INVALID_ARG; - - if ((err = chacha20_prng_start(prng)) != CRYPT_OK) return err; - if ((err = chacha20_prng_add_entropy(in, inlen, prng)) != CRYPT_OK) return err; - return CRYPT_OK; -} - -/** - PRNG self-test - @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled -*/ -int chacha20_prng_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - prng_state st; - unsigned char en[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, - 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, - 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, - 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32 }; - unsigned char dmp[300]; - unsigned long dmplen = sizeof(dmp); - unsigned char out[500]; - unsigned char t1[] = { 0x59, 0xB2, 0x26, 0x95, 0x2B, 0x01, 0x8F, 0x05, 0xBE, 0xD8 }; - unsigned char t2[] = { 0x47, 0xC9, 0x0D, 0x03, 0xE4, 0x75, 0x34, 0x27, 0xBD, 0xDE }; - unsigned char t3[] = { 0xBC, 0xFA, 0xEF, 0x59, 0x37, 0x7F, 0x1A, 0x91, 0x1A, 0xA6 }; - int err; - - if ((err = chacha20_prng_start(&st)) != CRYPT_OK) return err; - /* add entropy to uninitialized prng */ - if ((err = chacha20_prng_add_entropy(en, sizeof(en), &st)) != CRYPT_OK) return err; - if ((err = chacha20_prng_ready(&st)) != CRYPT_OK) return err; - if (chacha20_prng_read(out, 10, &st) != 10) return CRYPT_ERROR_READPRNG; /* 10 bytes for testing */ - if (ltc_compare_testvector(out, 10, t1, sizeof(t1), "CHACHA-PRNG", 1)) return CRYPT_FAIL_TESTVECTOR; - if (chacha20_prng_read(out, 500, &st) != 500) return CRYPT_ERROR_READPRNG; /* skip 500 bytes */ - /* add entropy to already initialized prng */ - if ((err = chacha20_prng_add_entropy(en, sizeof(en), &st)) != CRYPT_OK) return err; - if (chacha20_prng_read(out, 500, &st) != 500) return CRYPT_ERROR_READPRNG; /* skip 500 bytes */ - if ((err = chacha20_prng_export(dmp, &dmplen, &st)) != CRYPT_OK) return err; - if (chacha20_prng_read(out, 500, &st) != 500) return CRYPT_ERROR_READPRNG; /* skip 500 bytes */ - if (chacha20_prng_read(out, 10, &st) != 10) return CRYPT_ERROR_READPRNG; /* 10 bytes for testing */ - if (ltc_compare_testvector(out, 10, t2, sizeof(t2), "CHACHA-PRNG", 2)) return CRYPT_FAIL_TESTVECTOR; - if ((err = chacha20_prng_done(&st)) != CRYPT_OK) return err; - if ((err = chacha20_prng_import(dmp, dmplen, &st)) != CRYPT_OK) return err; - if ((err = chacha20_prng_ready(&st)) != CRYPT_OK) return err; - if (chacha20_prng_read(out, 500, &st) != 500) return CRYPT_ERROR_READPRNG; /* skip 500 bytes */ - if (chacha20_prng_read(out, 10, &st) != 10) return CRYPT_ERROR_READPRNG; /* 10 bytes for testing */ - if (ltc_compare_testvector(out, 10, t3, sizeof(t3), "CHACHA-PRNG", 3)) return CRYPT_FAIL_TESTVECTOR; - if ((err = chacha20_prng_done(&st)) != CRYPT_OK) return err; - - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/prngs/fortuna.c b/src/prngs/fortuna.c deleted file mode 100644 index af55fed4..00000000 --- a/src/prngs/fortuna.c +++ /dev/null @@ -1,537 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_FORTUNA_RESEED_RATELIMIT_TIMED -#if defined(_WIN32) - #include -#elif defined(LTC_CLOCK_GETTIME) - #include /* struct timespec + clock_gettime */ -#else - #include /* struct timeval + gettimeofday */ -#endif -#endif - -/** - @file fortuna.c - Fortuna PRNG, Tom St Denis -*/ - -/* Implementation of Fortuna by Tom St Denis - -We deviate slightly here for reasons of simplicity [and to fit in the API]. First all "sources" -in the AddEntropy function are fixed to 0. Second since no reliable timer is provided -we reseed automatically when len(pool0) >= 64 or every LTC_FORTUNA_WD calls to the read function */ - -#ifdef LTC_FORTUNA - -/* requries LTC_SHA256 and AES */ -#if !(defined(LTC_RIJNDAEL) && defined(LTC_SHA256)) - #error LTC_FORTUNA requires LTC_SHA256 and LTC_RIJNDAEL (AES) -#endif - -#ifndef LTC_FORTUNA_POOLS - #warning LTC_FORTUNA_POOLS was not previously defined (old headers?) - #define LTC_FORTUNA_POOLS 32 -#endif - -#if LTC_FORTUNA_POOLS < 4 || LTC_FORTUNA_POOLS > 32 - #error LTC_FORTUNA_POOLS must be in [4..32] -#endif - -#ifdef LTC_FORTUNA_USE_ENCRYPT_ONLY -#define AES_SETUP aes_enc_setup -#define AES_ENC aes_enc_ecb_encrypt -#define AES_DONE aes_enc_done -#define AES_TEST aes_enc_test -#else -#define AES_SETUP aes_setup -#define AES_ENC aes_ecb_encrypt -#define AES_DONE aes_done -#define AES_TEST aes_test -#endif - -const struct ltc_prng_descriptor fortuna_desc = { - "fortuna", - 64, - &fortuna_start, - &fortuna_add_entropy, - &fortuna_ready, - &fortuna_read, - &fortuna_done, - &fortuna_export, - &fortuna_import, - &fortuna_test -}; - -/* update the IV */ -static void s_fortuna_update_iv(prng_state *prng) -{ - int x; - unsigned char *IV; - /* update IV */ - IV = prng->u.fortuna.IV; - for (x = 0; x < 16; x++) { - IV[x] = (IV[x] + 1) & 255; - if (IV[x] != 0) break; - } -} - -#ifdef LTC_FORTUNA_RESEED_RATELIMIT_TIMED -/* get the current time in 100ms steps */ -static ulong64 s_fortuna_current_time(void) -{ - ulong64 cur_time; -#if defined(_WIN32) - FILETIME CurrentTime; - ULARGE_INTEGER ul; - GetSystemTimeAsFileTime(&CurrentTime); - ul.LowPart = CurrentTime.dwLowDateTime; - ul.HighPart = CurrentTime.dwHighDateTime; - cur_time = ul.QuadPart; /* now we have 100ns intervals since 1 January 1601 */ - cur_time -= CONST64(116444736000000000); /* subtract 100ns intervals between 1601-1970 */ - cur_time /= 10; /* 100ns intervals > microseconds */ -#elif defined(LTC_CLOCK_GETTIME) - struct timespec ts; - clock_gettime(CLOCK_MONOTONIC, &ts); - cur_time = (ulong64)(ts.tv_sec) * 1000000 + (ulong64)(ts.tv_nsec) / 1000; /* get microseconds */ -#else - struct timeval tv; - gettimeofday(&tv, NULL); - cur_time = (ulong64)(tv.tv_sec) * 1000000 + (ulong64)(tv.tv_usec); /* get microseconds */ -#endif - return cur_time / 100; -} -#endif - -/* reseed the PRNG */ -static int s_fortuna_reseed(prng_state *prng) -{ - unsigned char tmp[MAXBLOCKSIZE]; - hash_state md; - ulong64 reset_cnt; - int err, x; - -#ifdef LTC_FORTUNA_RESEED_RATELIMIT_TIMED - ulong64 now = s_fortuna_current_time(); - if (now == prng->u.fortuna.wd) { - return CRYPT_OK; - } -#else - if (++prng->u.fortuna.wd < LTC_FORTUNA_WD) { - return CRYPT_OK; - } -#endif - - /* new K == LTC_SHA256(K || s) where s == LTC_SHA256(P0) || LTC_SHA256(P1) ... */ - sha256_init(&md); - if ((err = sha256_process(&md, prng->u.fortuna.K, 32)) != CRYPT_OK) { - sha256_done(&md, tmp); - return err; - } - - reset_cnt = prng->u.fortuna.reset_cnt + 1; - - for (x = 0; x < LTC_FORTUNA_POOLS; x++) { - if (x == 0 || ((reset_cnt >> (x-1)) & 1) == 0) { - /* terminate this hash */ - if ((err = sha256_done(&prng->u.fortuna.pool[x], tmp)) != CRYPT_OK) { - sha256_done(&md, tmp); - return err; - } - /* add it to the string */ - if ((err = sha256_process(&md, tmp, 32)) != CRYPT_OK) { - sha256_done(&md, tmp); - return err; - } - /* reset this pool */ - if ((err = sha256_init(&prng->u.fortuna.pool[x])) != CRYPT_OK) { - sha256_done(&md, tmp); - return err; - } - } else { - break; - } - } - - /* finish key */ - if ((err = sha256_done(&md, prng->u.fortuna.K)) != CRYPT_OK) { - return err; - } - if ((err = AES_SETUP(prng->u.fortuna.K, 32, 0, &prng->u.fortuna.skey)) != CRYPT_OK) { - return err; - } - s_fortuna_update_iv(prng); - - /* reset/update internals */ - prng->u.fortuna.pool0_len = 0; -#ifdef LTC_FORTUNA_RESEED_RATELIMIT_TIMED - prng->u.fortuna.wd = now; -#else - prng->u.fortuna.wd = 0; -#endif - prng->u.fortuna.reset_cnt = reset_cnt; - - -#ifdef LTC_CLEAN_STACK - zeromem(&md, sizeof(md)); - zeromem(tmp, sizeof(tmp)); -#endif - - return CRYPT_OK; -} - -/** - "Update Seed File"-compliant update of K - - @param in The PRNG state - @param inlen Size of the state - @param prng The PRNG to import - @return CRYPT_OK if successful -*/ -int fortuna_update_seed(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - int err; - unsigned char tmp[MAXBLOCKSIZE]; - hash_state md; - - LTC_MUTEX_LOCK(&prng->lock); - /* new K = LTC_SHA256(K || in) */ - sha256_init(&md); - if ((err = sha256_process(&md, prng->u.fortuna.K, 32)) != CRYPT_OK) { - sha256_done(&md, tmp); - goto LBL_UNLOCK; - } - if ((err = sha256_process(&md, in, inlen)) != CRYPT_OK) { - sha256_done(&md, tmp); - goto LBL_UNLOCK; - } - /* finish key */ - if ((err = sha256_done(&md, prng->u.fortuna.K)) != CRYPT_OK) { - goto LBL_UNLOCK; - } - s_fortuna_update_iv(prng); - -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); -#ifdef LTC_CLEAN_STACK - zeromem(&md, sizeof(md)); -#endif - - return err; -} - -/** - Start the PRNG - @param prng [out] The PRNG state to initialize - @return CRYPT_OK if successful -*/ -int fortuna_start(prng_state *prng) -{ - int err, x, y; - unsigned char tmp[MAXBLOCKSIZE]; - - LTC_ARGCHK(prng != NULL); - prng->ready = 0; - - /* initialize the pools */ - for (x = 0; x < LTC_FORTUNA_POOLS; x++) { - if ((err = sha256_init(&prng->u.fortuna.pool[x])) != CRYPT_OK) { - for (y = 0; y < x; y++) { - sha256_done(&prng->u.fortuna.pool[y], tmp); - } - return err; - } - } - prng->u.fortuna.pool_idx = prng->u.fortuna.pool0_len = 0; - prng->u.fortuna.reset_cnt = prng->u.fortuna.wd = 0; - - /* reset bufs */ - zeromem(prng->u.fortuna.K, 32); - if ((err = AES_SETUP(prng->u.fortuna.K, 32, 0, &prng->u.fortuna.skey)) != CRYPT_OK) { - for (x = 0; x < LTC_FORTUNA_POOLS; x++) { - sha256_done(&prng->u.fortuna.pool[x], tmp); - } - return err; - } - zeromem(prng->u.fortuna.IV, 16); - - LTC_MUTEX_INIT(&prng->lock) - - return CRYPT_OK; -} - -static int s_fortuna_add(unsigned long source, unsigned long pool, const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - unsigned char tmp[2]; - int err; - - /* ensure inlen <= 32 */ - if (inlen > 32) { - inlen = 32; - } - - /* add s || length(in) || in to pool[pool_idx] */ - tmp[0] = (unsigned char)source; - tmp[1] = (unsigned char)inlen; - - if ((err = sha256_process(&prng->u.fortuna.pool[pool], tmp, 2)) != CRYPT_OK) { - return err; - } - if ((err = sha256_process(&prng->u.fortuna.pool[pool], in, inlen)) != CRYPT_OK) { - return err; - } - if (pool == 0) { - prng->u.fortuna.pool0_len += inlen; - } - return CRYPT_OK; /* success */ -} - -/** - Add random event to the PRNG state as proposed by the original paper. - @param source The source this random event comes from (0 .. 255) - @param pool The pool where to add the data to (0 .. LTC_FORTUNA_POOLS) - @param in The data to add - @param inlen Length of the data to add - @param prng PRNG state to update - @return CRYPT_OK if successful -*/ -int fortuna_add_random_event(unsigned long source, unsigned long pool, const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - int err; - - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen > 0); - LTC_ARGCHK(source <= 255); - LTC_ARGCHK(pool < LTC_FORTUNA_POOLS); - - LTC_MUTEX_LOCK(&prng->lock); - - err = s_fortuna_add(source, pool, in, inlen, prng); - - LTC_MUTEX_UNLOCK(&prng->lock); - - return err; -} - -/** - Add entropy to the PRNG state - @param in The data to add - @param inlen Length of the data to add - @param prng PRNG state to update - @return CRYPT_OK if successful -*/ -int fortuna_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - int err; - - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen > 0); - - LTC_MUTEX_LOCK(&prng->lock); - - err = s_fortuna_add(0, prng->u.fortuna.pool_idx, in, inlen, prng); - - if (err == CRYPT_OK) { - ++(prng->u.fortuna.pool_idx); - prng->u.fortuna.pool_idx %= LTC_FORTUNA_POOLS; - } - - LTC_MUTEX_UNLOCK(&prng->lock); - - return err; -} - -/** - Make the PRNG ready to read from - @param prng The PRNG to make active - @return CRYPT_OK if successful -*/ -int fortuna_ready(prng_state *prng) -{ - int err; - LTC_ARGCHK(prng != NULL); - - LTC_MUTEX_LOCK(&prng->lock); - /* make sure the reseed doesn't fail because - * of the chosen rate limit */ -#ifdef LTC_FORTUNA_RESEED_RATELIMIT_TIMED - prng->u.fortuna.wd = s_fortuna_current_time() - 1; -#else - prng->u.fortuna.wd = LTC_FORTUNA_WD; -#endif - err = s_fortuna_reseed(prng); - prng->ready = (err == CRYPT_OK) ? 1 : 0; - - LTC_MUTEX_UNLOCK(&prng->lock); - return err; -} - -/** - Read from the PRNG - @param out Destination - @param outlen Length of output - @param prng The active PRNG to read from - @return Number of octets read -*/ -unsigned long fortuna_read(unsigned char *out, unsigned long outlen, prng_state *prng) -{ - unsigned char tmp[16]; - unsigned long tlen = 0; - - if (outlen == 0 || prng == NULL || out == NULL) return 0; - - LTC_MUTEX_LOCK(&prng->lock); - - if (!prng->ready) { - goto LBL_UNLOCK; - } - - /* do we have to reseed? */ - if (prng->u.fortuna.pool0_len >= 64) { - if (s_fortuna_reseed(prng) != CRYPT_OK) { - goto LBL_UNLOCK; - } - } - - /* ensure that one reseed happened before allowing to read */ - if (prng->u.fortuna.reset_cnt == 0) { - goto LBL_UNLOCK; - } - - /* now generate the blocks required */ - tlen = outlen; - - /* handle whole blocks without the extra XMEMCPY */ - while (outlen >= 16) { - /* encrypt the IV and store it */ - AES_ENC(prng->u.fortuna.IV, out, &prng->u.fortuna.skey); - out += 16; - outlen -= 16; - s_fortuna_update_iv(prng); - } - - /* left over bytes? */ - if (outlen > 0) { - AES_ENC(prng->u.fortuna.IV, tmp, &prng->u.fortuna.skey); - XMEMCPY(out, tmp, outlen); - s_fortuna_update_iv(prng); - } - - /* generate new key */ - AES_ENC(prng->u.fortuna.IV, prng->u.fortuna.K , &prng->u.fortuna.skey); - s_fortuna_update_iv(prng); - - AES_ENC(prng->u.fortuna.IV, prng->u.fortuna.K+16, &prng->u.fortuna.skey); - s_fortuna_update_iv(prng); - - if (AES_SETUP(prng->u.fortuna.K, 32, 0, &prng->u.fortuna.skey) != CRYPT_OK) { - tlen = 0; - } - -LBL_UNLOCK: -#ifdef LTC_CLEAN_STACK - zeromem(tmp, sizeof(tmp)); -#endif - LTC_MUTEX_UNLOCK(&prng->lock); - return tlen; -} - -/** - Terminate the PRNG - @param prng The PRNG to terminate - @return CRYPT_OK if successful -*/ -int fortuna_done(prng_state *prng) -{ - int err, x; - unsigned char tmp[32]; - - LTC_ARGCHK(prng != NULL); - - LTC_MUTEX_LOCK(&prng->lock); - prng->ready = 0; - - /* terminate all the hashes */ - for (x = 0; x < LTC_FORTUNA_POOLS; x++) { - if ((err = sha256_done(&(prng->u.fortuna.pool[x]), tmp)) != CRYPT_OK) { - goto LBL_UNLOCK; - } - } - /* call cipher done when we invent one ;-) */ - err = CRYPT_OK; /* success */ - -LBL_UNLOCK: -#ifdef LTC_CLEAN_STACK - zeromem(tmp, sizeof(tmp)); -#endif - LTC_MUTEX_UNLOCK(&prng->lock); - LTC_MUTEX_DESTROY(&prng->lock); - return err; -} - -/** - Export the PRNG state - @param out [out] Destination - @param outlen [in/out] Max size and resulting size of the state - @param prng The PRNG to export - @return CRYPT_OK if successful -*/ -LTC_PRNG_EXPORT(fortuna) - -/** - Import a PRNG state - @param in The PRNG state - @param inlen Size of the state - @param prng The PRNG to import - @return CRYPT_OK if successful -*/ -int fortuna_import(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(prng != NULL); - - if (inlen < (unsigned long)fortuna_desc.export_size) { - return CRYPT_INVALID_ARG; - } - - if ((err = fortuna_start(prng)) != CRYPT_OK) { - return err; - } - - if ((err = fortuna_update_seed(in, inlen, prng)) != CRYPT_OK) { - return err; - } - - return err; -} - -/** - PRNG self-test - @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled -*/ -int fortuna_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - int err; - - if ((err = sha256_test()) != CRYPT_OK) { - return err; - } - return AES_TEST(); -#endif -} - -#undef AES_SETUP -#undef AES_ENC -#undef AES_DONE -#undef AES_TEST - -#endif /* LTC_FORTUNA */ - diff --git a/src/prngs/rc4.c b/src/prngs/rc4.c deleted file mode 100644 index eb82d908..00000000 --- a/src/prngs/rc4.c +++ /dev/null @@ -1,221 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file prngs/rc4.c - RC4 PRNG, Tom St Denis -*/ - -#ifdef LTC_RC4 - -const struct ltc_prng_descriptor rc4_desc = -{ - "rc4", - 32, - &rc4_start, - &rc4_add_entropy, - &rc4_ready, - &rc4_read, - &rc4_done, - &rc4_export, - &rc4_import, - &rc4_test -}; - -/** - Start the PRNG - @param prng [out] The PRNG state to initialize - @return CRYPT_OK if successful -*/ -int rc4_start(prng_state *prng) -{ - LTC_ARGCHK(prng != NULL); - prng->ready = 0; - /* set entropy (key) size to zero */ - prng->u.rc4.s.x = 0; - /* clear entropy (key) buffer */ - XMEMSET(&prng->u.rc4.s.buf, 0, sizeof(prng->u.rc4.s.buf)); - LTC_MUTEX_INIT(&prng->lock) - return CRYPT_OK; -} - -/** - Add entropy to the PRNG state - @param in The data to add - @param inlen Length of the data to add - @param prng PRNG state to update - @return CRYPT_OK if successful -*/ -int rc4_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - unsigned char buf[256]; - unsigned long i; - int err; - - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen > 0); - - LTC_MUTEX_LOCK(&prng->lock); - if (prng->ready) { - /* rc4_ready() was already called, do "rekey" operation */ - if ((err = rc4_stream_keystream(&prng->u.rc4.s, buf, sizeof(buf))) != CRYPT_OK) goto LBL_UNLOCK; - for(i = 0; i < inlen; i++) buf[i % sizeof(buf)] ^= in[i]; - /* initialize RC4 */ - if ((err = rc4_stream_setup(&prng->u.rc4.s, buf, sizeof(buf))) != CRYPT_OK) goto LBL_UNLOCK; - /* drop first 3072 bytes - https://en.wikipedia.org/wiki/RC4#Fluhrer.2C_Mantin_and_Shamir_attack */ - for (i = 0; i < 12; i++) rc4_stream_keystream(&prng->u.rc4.s, buf, sizeof(buf)); - zeromem(buf, sizeof(buf)); - } - else { - /* rc4_ready() was not called yet, add entropy to the buffer */ - while (inlen--) prng->u.rc4.s.buf[prng->u.rc4.s.x++ % sizeof(prng->u.rc4.s.buf)] ^= *in++; - } - err = CRYPT_OK; -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); - return err; -} - -/** - Make the PRNG ready to read from - @param prng The PRNG to make active - @return CRYPT_OK if successful -*/ -int rc4_ready(prng_state *prng) -{ - unsigned char buf[256] = { 0 }; - unsigned long len; - int err, i; - - LTC_ARGCHK(prng != NULL); - - LTC_MUTEX_LOCK(&prng->lock); - if (prng->ready) { err = CRYPT_OK; goto LBL_UNLOCK; } - XMEMCPY(buf, prng->u.rc4.s.buf, sizeof(buf)); - /* initialize RC4 */ - len = MIN(prng->u.rc4.s.x, 256); /* TODO: we can perhaps always use all 256 bytes */ - if ((err = rc4_stream_setup(&prng->u.rc4.s, buf, len)) != CRYPT_OK) goto LBL_UNLOCK; - /* drop first 3072 bytes - https://en.wikipedia.org/wiki/RC4#Fluhrer.2C_Mantin_and_Shamir_attack */ - for (i = 0; i < 12; i++) rc4_stream_keystream(&prng->u.rc4.s, buf, sizeof(buf)); - prng->ready = 1; -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); - return err; -} - -/** - Read from the PRNG - @param out Destination - @param outlen Length of output - @param prng The active PRNG to read from - @return Number of octets read -*/ -unsigned long rc4_read(unsigned char *out, unsigned long outlen, prng_state *prng) -{ - if (outlen == 0 || prng == NULL || out == NULL) return 0; - LTC_MUTEX_LOCK(&prng->lock); - if (!prng->ready) { outlen = 0; goto LBL_UNLOCK; } - if (rc4_stream_keystream(&prng->u.rc4.s, out, outlen) != CRYPT_OK) outlen = 0; -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); - return outlen; -} - -/** - Terminate the PRNG - @param prng The PRNG to terminate - @return CRYPT_OK if successful -*/ -int rc4_done(prng_state *prng) -{ - int err; - LTC_ARGCHK(prng != NULL); - LTC_MUTEX_LOCK(&prng->lock); - prng->ready = 0; - err = rc4_stream_done(&prng->u.rc4.s); - LTC_MUTEX_UNLOCK(&prng->lock); - LTC_MUTEX_DESTROY(&prng->lock); - return err; -} - -/** - Export the PRNG state - @param out [out] Destination - @param outlen [in/out] Max size and resulting size of the state - @param prng The PRNG to export - @return CRYPT_OK if successful -*/ -LTC_PRNG_EXPORT(rc4) - -/** - Import a PRNG state - @param in The PRNG state - @param inlen Size of the state - @param prng The PRNG to import - @return CRYPT_OK if successful -*/ -int rc4_import(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - int err; - - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(in != NULL); - if (inlen < (unsigned long)rc4_desc.export_size) return CRYPT_INVALID_ARG; - - if ((err = rc4_start(prng)) != CRYPT_OK) return err; - if ((err = rc4_add_entropy(in, inlen, prng)) != CRYPT_OK) return err; - return CRYPT_OK; -} - -/** - PRNG self-test - @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled -*/ -int rc4_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - prng_state st; - unsigned char en[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, - 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, - 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, - 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32 }; - unsigned char dmp[500]; - unsigned long dmplen = sizeof(dmp); - unsigned char out[1000]; - unsigned char t1[] = { 0xE0, 0x4D, 0x9A, 0xF6, 0xA8, 0x9D, 0x77, 0x53, 0xAE, 0x09 }; - unsigned char t2[] = { 0xEF, 0x80, 0xA2, 0xE6, 0x50, 0x91, 0xF3, 0x17, 0x4A, 0x8A }; - unsigned char t3[] = { 0x4B, 0xD6, 0x5C, 0x67, 0x99, 0x03, 0x56, 0x12, 0x80, 0x48 }; - int err; - - if ((err = rc4_start(&st)) != CRYPT_OK) return err; - /* add entropy to uninitialized prng */ - if ((err = rc4_add_entropy(en, sizeof(en), &st)) != CRYPT_OK) return err; - if ((err = rc4_ready(&st)) != CRYPT_OK) return err; - if (rc4_read(out, 10, &st) != 10) return CRYPT_ERROR_READPRNG; /* 10 bytes for testing */ - if (ltc_compare_testvector(out, 10, t1, sizeof(t1), "RC4-PRNG", 1)) return CRYPT_FAIL_TESTVECTOR; - if (rc4_read(out, 500, &st) != 500) return CRYPT_ERROR_READPRNG; /* skip 500 bytes */ - /* add entropy to already initialized prng */ - if ((err = rc4_add_entropy(en, sizeof(en), &st)) != CRYPT_OK) return err; - if (rc4_read(out, 500, &st) != 500) return CRYPT_ERROR_READPRNG; /* skip 500 bytes */ - if ((err = rc4_export(dmp, &dmplen, &st)) != CRYPT_OK) return err; - if (rc4_read(out, 500, &st) != 500) return CRYPT_ERROR_READPRNG; /* skip 500 bytes */ - if (rc4_read(out, 10, &st) != 10) return CRYPT_ERROR_READPRNG; /* 10 bytes for testing */ - if (ltc_compare_testvector(out, 10, t2, sizeof(t2), "RC4-PRNG", 2)) return CRYPT_FAIL_TESTVECTOR; - if ((err = rc4_done(&st)) != CRYPT_OK) return err; - if ((err = rc4_import(dmp, dmplen, &st)) != CRYPT_OK) return err; - if ((err = rc4_ready(&st)) != CRYPT_OK) return err; - if (rc4_read(out, 500, &st) != 500) return CRYPT_ERROR_READPRNG; /* skip 500 bytes */ - if (rc4_read(out, 10, &st) != 10) return CRYPT_ERROR_READPRNG; /* 10 bytes for testing */ - if (ltc_compare_testvector(out, 10, t3, sizeof(t3), "RC4-PRNG", 3)) return CRYPT_FAIL_TESTVECTOR; - if ((err = rc4_done(&st)) != CRYPT_OK) return err; - - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/prngs/rng_get_bytes.c b/src/prngs/rng_get_bytes.c deleted file mode 100644 index ecb1ed56..00000000 --- a/src/prngs/rng_get_bytes.c +++ /dev/null @@ -1,167 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_RNG_GET_BYTES -/** - @file rng_get_bytes.c - portable way to get secure random bits to feed a PRNG (Tom St Denis) -*/ - -#if defined(LTC_DEVRANDOM) && !defined(_WIN32) -/* on *NIX read /dev/random */ -static unsigned long s_rng_nix(unsigned char *buf, unsigned long len, - void (*callback)(void)) -{ -#ifdef LTC_NO_FILE - LTC_UNUSED_PARAM(callback); - LTC_UNUSED_PARAM(buf); - LTC_UNUSED_PARAM(len); - return 0; -#else - FILE *f; - unsigned long x; - LTC_UNUSED_PARAM(callback); -#ifdef LTC_TRY_URANDOM_FIRST - f = fopen("/dev/urandom", "rb"); - if (f == NULL) { - f = fopen("/dev/random", "rb"); - } -#else - f = fopen("/dev/random", "rb"); -#endif /* LTC_TRY_URANDOM_FIRST */ - - if (f == NULL) { - return 0; - } - - /* disable buffering */ - if (setvbuf(f, NULL, _IONBF, 0) != 0) { - fclose(f); - return 0; - } - - x = (unsigned long)fread(buf, 1, (size_t)len, f); - fclose(f); - return x; -#endif /* LTC_NO_FILE */ -} - -#endif /* LTC_DEVRANDOM */ - -#if !defined(_WIN32_WCE) - -#define ANSI_RNG - -static unsigned long s_rng_ansic(unsigned char *buf, unsigned long len, - void (*callback)(void)) -{ - clock_t t1; - int l, acc, bits, a, b; - - l = len; - bits = 8; - acc = a = b = 0; - while (len--) { - if (callback != NULL) callback(); - while (bits--) { - do { - t1 = XCLOCK(); while (t1 == XCLOCK()) a ^= 1; - t1 = XCLOCK(); while (t1 == XCLOCK()) b ^= 1; - } while (a == b); - acc = (acc << 1) | a; - } - *buf++ = acc; - acc = 0; - bits = 8; - } - return l; -} - -#endif - -/* Try the Microsoft CSP */ -#if defined(_WIN32) || defined(_WIN32_WCE) -#if defined(LTC_WIN32_BCRYPT) - -#include -#include -#pragma comment(lib, "bcrypt.lib") - -static unsigned long s_rng_win32(unsigned char *buf, unsigned long len, - void (*callback)(void)) -{ - LTC_UNUSED_PARAM(callback); - - return BCRYPT_SUCCESS(BCryptGenRandom(NULL, (PUCHAR)buf, (ULONG)len, BCRYPT_USE_SYSTEM_PREFERRED_RNG)) ? len : 0; -} - -#else - -#ifndef _WIN32_WINNT - #define _WIN32_WINNT 0x0501 -#endif -#ifndef WINVER - #define WINVER 0x0501 -#endif - -#define WIN32_LEAN_AND_MEAN -#include -#include - -static unsigned long s_rng_win32(unsigned char *buf, unsigned long len, - void (*callback)(void)) -{ - static HCRYPTPROV hProv = 0; - LTC_UNUSED_PARAM(callback); - - if (hProv == 0) { - HCRYPTPROV h = 0; - if (!CryptAcquireContextW(&h, NULL, MS_DEF_PROV_W, PROV_RSA_FULL, - (CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) && - !CryptAcquireContextW(&h, NULL, MS_DEF_PROV_W, PROV_RSA_FULL, - CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET | CRYPT_NEWKEYSET)) { - return 0; - } - hProv = h; - } - - return CryptGenRandom(hProv, (DWORD)len, (BYTE *)buf) == TRUE ? len : 0; -} -#endif /* Old WIN32 versions */ -#endif /* WIN32 */ - -/** - Read the system RNG - @param out Destination - @param outlen Length desired (octets) - @param callback Pointer to void function to act as "callback" when RNG is slow. This can be NULL - @return Number of octets read -*/ -unsigned long rng_get_bytes(unsigned char *out, unsigned long outlen, - void (*callback)(void)) -{ - unsigned long x; - - LTC_ARGCHK(out != NULL); - -#ifdef LTC_PRNG_ENABLE_LTC_RNG - if (ltc_rng) { - x = ltc_rng(out, outlen, callback); - if (x != 0) { - return x; - } - } -#endif - -#if defined(_WIN32) || defined(_WIN32_WCE) - x = s_rng_win32(out, outlen, callback); if (x != 0) { return x; } -#elif defined(LTC_DEVRANDOM) - x = s_rng_nix(out, outlen, callback); if (x != 0) { return x; } -#endif -#ifdef ANSI_RNG - x = s_rng_ansic(out, outlen, callback); if (x != 0) { return x; } -#endif - return 0; -} -#endif /* #ifdef LTC_RNG_GET_BYTES */ diff --git a/src/prngs/rng_make_prng.c b/src/prngs/rng_make_prng.c deleted file mode 100644 index a7b726ca..00000000 --- a/src/prngs/rng_make_prng.c +++ /dev/null @@ -1,81 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_RNG_MAKE_PRNG -/** - @file rng_make_prng.c - portable way to get secure random bits to feed a PRNG (Tom St Denis) -*/ - -/** - Create a PRNG from a RNG - - In case you pass bits as '-1' the PRNG will be setup - as if the export/import functionality has been used, - but the imported data comes directly from the RNG. - - @param bits Number of bits of entropy desired (-1 or 64 ... 1024) - @param wprng Index of which PRNG to setup - @param prng [out] PRNG state to initialize - @param callback A pointer to a void function for when the RNG is slow, this can be NULL - @return CRYPT_OK if successful -*/ -int rng_make_prng(int bits, int wprng, prng_state *prng, - void (*callback)(void)) -{ - unsigned char* buf; - unsigned long bytes; - int err; - - LTC_ARGCHK(prng != NULL); - - /* check parameter */ - if ((err = prng_is_valid(wprng)) != CRYPT_OK) { - return err; - } - - if (bits == -1) { - bytes = prng_descriptor[wprng].export_size; - } else if (bits < 64 || bits > 1024) { - return CRYPT_INVALID_PRNGSIZE; - } else { - bytes = (unsigned long)((bits+7)/8) * 2; - } - - if ((err = prng_descriptor[wprng].start(prng)) != CRYPT_OK) { - return err; - } - - buf = XMALLOC(bytes); - if (buf == NULL) { - return CRYPT_MEM; - } - - if (rng_get_bytes(buf, bytes, callback) != bytes) { - err = CRYPT_ERROR_READPRNG; - goto LBL_ERR; - } - - if (bits == -1) { - if ((err = prng_descriptor[wprng].pimport(buf, bytes, prng)) != CRYPT_OK) { - goto LBL_ERR; - } - } else { - if ((err = prng_descriptor[wprng].add_entropy(buf, bytes, prng)) != CRYPT_OK) { - goto LBL_ERR; - } - } - if ((err = prng_descriptor[wprng].ready(prng)) != CRYPT_OK) { - goto LBL_ERR; - } - -LBL_ERR: - #ifdef LTC_CLEAN_STACK - zeromem(buf, bytes); - #endif - XFREE(buf); - return err; -} -#endif /* #ifdef LTC_RNG_MAKE_PRNG */ - diff --git a/src/prngs/sober128.c b/src/prngs/sober128.c deleted file mode 100644 index fcd87d48..00000000 --- a/src/prngs/sober128.c +++ /dev/null @@ -1,220 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/** - @file prngs/sober128.c - Implementation of SOBER-128 by Tom St Denis. - Based on s128fast.c reference code supplied by Greg Rose of QUALCOMM. -*/ - -#ifdef LTC_SOBER128 - -const struct ltc_prng_descriptor sober128_desc = -{ - "sober128", - 40, - &sober128_start, - &sober128_add_entropy, - &sober128_ready, - &sober128_read, - &sober128_done, - &sober128_export, - &sober128_import, - &sober128_test -}; - -/** - Start the PRNG - @param prng [out] The PRNG state to initialize - @return CRYPT_OK if successful -*/ -int sober128_start(prng_state *prng) -{ - LTC_ARGCHK(prng != NULL); - prng->ready = 0; - XMEMSET(&prng->u.sober128.ent, 0, sizeof(prng->u.sober128.ent)); - prng->u.sober128.idx = 0; - LTC_MUTEX_INIT(&prng->lock) - return CRYPT_OK; -} - -/** - Add entropy to the PRNG state - @param in The data to add - @param inlen Length of the data to add - @param prng PRNG state to update - @return CRYPT_OK if successful -*/ -int sober128_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - unsigned char buf[40]; - unsigned long i; - int err; - - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen > 0); - - LTC_MUTEX_LOCK(&prng->lock); - if (prng->ready) { - /* sober128_ready() was already called, do "rekey" operation */ - if ((err = sober128_stream_keystream(&prng->u.sober128.s, buf, sizeof(buf))) != CRYPT_OK) goto LBL_UNLOCK; - for(i = 0; i < inlen; i++) buf[i % sizeof(buf)] ^= in[i]; - /* key 32 bytes, 20 rounds */ - if ((err = sober128_stream_setup(&prng->u.sober128.s, buf, 32)) != CRYPT_OK) goto LBL_UNLOCK; - /* iv 8 bytes */ - if ((err = sober128_stream_setiv(&prng->u.sober128.s, buf + 32, 8)) != CRYPT_OK) goto LBL_UNLOCK; - /* clear KEY + IV */ - zeromem(buf, sizeof(buf)); - } - else { - /* sober128_ready() was not called yet, add entropy to ent buffer */ - while (inlen--) prng->u.sober128.ent[prng->u.sober128.idx++ % sizeof(prng->u.sober128.ent)] ^= *in++; - } - err = CRYPT_OK; -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); - return err; -} - -/** - Make the PRNG ready to read from - @param prng The PRNG to make active - @return CRYPT_OK if successful -*/ -int sober128_ready(prng_state *prng) -{ - int err; - - LTC_ARGCHK(prng != NULL); - - LTC_MUTEX_LOCK(&prng->lock); - if (prng->ready) { err = CRYPT_OK; goto LBL_UNLOCK; } - /* key 32 bytes, 20 rounds */ - if ((err = sober128_stream_setup(&prng->u.sober128.s, prng->u.sober128.ent, 32)) != CRYPT_OK) goto LBL_UNLOCK; - /* iv 8 bytes */ - if ((err = sober128_stream_setiv(&prng->u.sober128.s, prng->u.sober128.ent + 32, 8)) != CRYPT_OK) goto LBL_UNLOCK; - XMEMSET(&prng->u.sober128.ent, 0, sizeof(prng->u.sober128.ent)); - prng->u.sober128.idx = 0; - prng->ready = 1; -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); - return err; -} - -/** - Read from the PRNG - @param out Destination - @param outlen Length of output - @param prng The active PRNG to read from - @return Number of octets read -*/ -unsigned long sober128_read(unsigned char *out, unsigned long outlen, prng_state *prng) -{ - if (outlen == 0 || prng == NULL || out == NULL) return 0; - LTC_MUTEX_LOCK(&prng->lock); - if (!prng->ready) { outlen = 0; goto LBL_UNLOCK; } - if (sober128_stream_keystream(&prng->u.sober128.s, out, outlen) != CRYPT_OK) outlen = 0; -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); - return outlen; -} - -/** - Terminate the PRNG - @param prng The PRNG to terminate - @return CRYPT_OK if successful -*/ -int sober128_done(prng_state *prng) -{ - int err; - LTC_ARGCHK(prng != NULL); - LTC_MUTEX_LOCK(&prng->lock); - prng->ready = 0; - err = sober128_stream_done(&prng->u.sober128.s); - LTC_MUTEX_UNLOCK(&prng->lock); - LTC_MUTEX_DESTROY(&prng->lock); - return err; -} - -/** - Export the PRNG state - @param out [out] Destination - @param outlen [in/out] Max size and resulting size of the state - @param prng The PRNG to export - @return CRYPT_OK if successful -*/ -LTC_PRNG_EXPORT(sober128) - -/** - Import a PRNG state - @param in The PRNG state - @param inlen Size of the state - @param prng The PRNG to import - @return CRYPT_OK if successful -*/ -int sober128_import(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - int err; - - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(in != NULL); - if (inlen < (unsigned long)sober128_desc.export_size) return CRYPT_INVALID_ARG; - - if ((err = sober128_start(prng)) != CRYPT_OK) return err; - if ((err = sober128_add_entropy(in, inlen, prng)) != CRYPT_OK) return err; - return CRYPT_OK; -} - -/** - PRNG self-test - @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled -*/ -int sober128_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - prng_state st; - unsigned char en[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, - 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, - 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, - 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32 }; - unsigned char dmp[300]; - unsigned long dmplen = sizeof(dmp); - unsigned char out[500]; - unsigned char t1[] = { 0x31, 0x82, 0xA7, 0xA5, 0x8B, 0xD7, 0xCB, 0x39, 0x86, 0x1A }; - unsigned char t2[] = { 0x6B, 0x43, 0x9E, 0xBC, 0xE7, 0x62, 0x9B, 0xE6, 0x9B, 0x83 }; - unsigned char t3[] = { 0x4A, 0x0E, 0x6C, 0xC1, 0xCF, 0xB4, 0x73, 0x49, 0x99, 0x05 }; - int err; - - if ((err = sober128_start(&st)) != CRYPT_OK) return err; - /* add entropy to uninitialized prng */ - if ((err = sober128_add_entropy(en, sizeof(en), &st)) != CRYPT_OK) return err; - if ((err = sober128_ready(&st)) != CRYPT_OK) return err; - if (sober128_read(out, 10, &st) != 10) return CRYPT_ERROR_READPRNG; /* 10 bytes for testing */ - if (ltc_compare_testvector(out, 10, t1, sizeof(t1), "SOBER128-PRNG", 1)) return CRYPT_FAIL_TESTVECTOR; - if (sober128_read(out, 500, &st) != 500) return CRYPT_ERROR_READPRNG; /* skip 500 bytes */ - /* add entropy to already initialized prng */ - if ((err = sober128_add_entropy(en, sizeof(en), &st)) != CRYPT_OK) return err; - if (sober128_read(out, 500, &st) != 500) return CRYPT_ERROR_READPRNG; /* skip 500 bytes */ - if ((err = sober128_export(dmp, &dmplen, &st)) != CRYPT_OK) return err; - if (sober128_read(out, 500, &st) != 500) return CRYPT_ERROR_READPRNG; /* skip 500 bytes */ - if (sober128_read(out, 10, &st) != 10) return CRYPT_ERROR_READPRNG; /* 10 bytes for testing */ - if (ltc_compare_testvector(out, 10, t2, sizeof(t2), "SOBER128-PRNG", 2)) return CRYPT_FAIL_TESTVECTOR; - if ((err = sober128_done(&st)) != CRYPT_OK) return err; - if ((err = sober128_import(dmp, dmplen, &st)) != CRYPT_OK) return err; - if ((err = sober128_ready(&st)) != CRYPT_OK) return err; - if (sober128_read(out, 500, &st) != 500) return CRYPT_ERROR_READPRNG; /* skip 500 bytes */ - if (sober128_read(out, 10, &st) != 10) return CRYPT_ERROR_READPRNG; /* 10 bytes for testing */ - if (ltc_compare_testvector(out, 10, t3, sizeof(t3), "SOBER128-PRNG", 3)) return CRYPT_FAIL_TESTVECTOR; - if ((err = sober128_done(&st)) != CRYPT_OK) return err; - - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/prngs/sprng.c b/src/prngs/sprng.c deleted file mode 100644 index e4047182..00000000 --- a/src/prngs/sprng.c +++ /dev/null @@ -1,152 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sprng.c - Secure PRNG, Tom St Denis -*/ - -/* A secure PRNG using the RNG functions. Basically this is a - * wrapper that allows you to use a secure RNG as a PRNG - * in the various other functions. - */ - -#ifdef LTC_SPRNG - -const struct ltc_prng_descriptor sprng_desc = -{ - "sprng", 0, - &sprng_start, - &sprng_add_entropy, - &sprng_ready, - &sprng_read, - &sprng_done, - &sprng_export, - &sprng_import, - &sprng_test -}; - -/** - Start the PRNG - @param prng [out] The PRNG state to initialize - @return CRYPT_OK if successful -*/ -int sprng_start(prng_state *prng) -{ - LTC_UNUSED_PARAM(prng); - return CRYPT_OK; -} - -/** - Add entropy to the PRNG state - @param in The data to add - @param inlen Length of the data to add - @param prng PRNG state to update - @return CRYPT_OK if successful -*/ -int sprng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - LTC_UNUSED_PARAM(in); - LTC_UNUSED_PARAM(inlen); - LTC_UNUSED_PARAM(prng); - return CRYPT_OK; -} - -/** - Make the PRNG ready to read from - @param prng The PRNG to make active - @return CRYPT_OK if successful -*/ -int sprng_ready(prng_state *prng) -{ - LTC_UNUSED_PARAM(prng); - return CRYPT_OK; -} - -/** - Read from the PRNG - @param out Destination - @param outlen Length of output - @param prng The active PRNG to read from - @return Number of octets read -*/ -unsigned long sprng_read(unsigned char *out, unsigned long outlen, prng_state *prng) -{ - LTC_ARGCHK(out != NULL); - LTC_UNUSED_PARAM(prng); - return rng_get_bytes(out, outlen, NULL); -} - -/** - Terminate the PRNG - @param prng The PRNG to terminate - @return CRYPT_OK if successful -*/ -int sprng_done(prng_state *prng) -{ - LTC_UNUSED_PARAM(prng); - return CRYPT_OK; -} - -/** - Export the PRNG state - @param out [out] Destination - @param outlen [in/out] Max size and resulting size of the state - @param prng The PRNG to export - @return CRYPT_OK if successful -*/ -/* NOLINTNEXTLINE(readability-non-const-parameter) - silence clang-tidy warning */ -int sprng_export(unsigned char *out, unsigned long *outlen, prng_state *prng) -{ - LTC_ARGCHK(outlen != NULL); - LTC_UNUSED_PARAM(out); - LTC_UNUSED_PARAM(prng); - - *outlen = 0; - return CRYPT_OK; -} - -/** - Import a PRNG state - @param in The PRNG state - @param inlen Size of the state - @param prng The PRNG to import - @return CRYPT_OK if successful -*/ -int sprng_import(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - LTC_UNUSED_PARAM(in); - LTC_UNUSED_PARAM(inlen); - LTC_UNUSED_PARAM(prng); - return CRYPT_OK; -} - -/** - PRNG self-test - @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled -*/ -int sprng_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - prng_state st; - unsigned char en[] = { 0x01, 0x02, 0x03, 0x04 }; - unsigned char out[1000]; - int err; - - if ((err = sprng_start(&st)) != CRYPT_OK) return err; - if ((err = sprng_add_entropy(en, sizeof(en), &st)) != CRYPT_OK) return err; - if ((err = sprng_ready(&st)) != CRYPT_OK) return err; - if (sprng_read(out, 500, &st) != 500) return CRYPT_ERROR_READPRNG; /* skip 500 bytes */ - if ((err = sprng_done(&st)) != CRYPT_OK) return err; - - return CRYPT_OK; -#endif -} - -#endif - - - diff --git a/src/prngs/yarrow.c b/src/prngs/yarrow.c deleted file mode 100644 index 40cb46a6..00000000 --- a/src/prngs/yarrow.c +++ /dev/null @@ -1,323 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file yarrow.c - Yarrow PRNG, Tom St Denis -*/ - -#ifdef LTC_YARROW - -const struct ltc_prng_descriptor yarrow_desc = -{ - "yarrow", 64, - &yarrow_start, - &yarrow_add_entropy, - &yarrow_ready, - &yarrow_read, - &yarrow_done, - &yarrow_export, - &yarrow_import, - &yarrow_test -}; - -/** - Start the PRNG - @param prng [out] The PRNG state to initialize - @return CRYPT_OK if successful -*/ -int yarrow_start(prng_state *prng) -{ - int err; - - LTC_ARGCHK(prng != NULL); - prng->ready = 0; - - /* these are the default hash/cipher combo used */ -#ifdef LTC_RIJNDAEL -#if LTC_YARROW_AES==0 - prng->u.yarrow.cipher = register_cipher(&rijndael_enc_desc); -#elif LTC_YARROW_AES==1 - prng->u.yarrow.cipher = register_cipher(&aes_enc_desc); -#elif LTC_YARROW_AES==2 - prng->u.yarrow.cipher = register_cipher(&rijndael_desc); -#elif LTC_YARROW_AES==3 - prng->u.yarrow.cipher = register_cipher(&aes_desc); -#endif -#elif defined(LTC_BLOWFISH) - prng->u.yarrow.cipher = register_cipher(&blowfish_desc); -#elif defined(LTC_TWOFISH) - prng->u.yarrow.cipher = register_cipher(&twofish_desc); -#elif defined(LTC_RC6) - prng->u.yarrow.cipher = register_cipher(&rc6_desc); -#elif defined(LTC_RC5) - prng->u.yarrow.cipher = register_cipher(&rc5_desc); -#elif defined(LTC_SAFERP) - prng->u.yarrow.cipher = register_cipher(&saferp_desc); -#elif defined(LTC_RC2) - prng->u.yarrow.cipher = register_cipher(&rc2_desc); -#elif defined(LTC_NOEKEON) - prng->u.yarrow.cipher = register_cipher(&noekeon_desc); -#elif defined(LTC_ANUBIS) - prng->u.yarrow.cipher = register_cipher(&anubis_desc); -#elif defined(LTC_KSEED) - prng->u.yarrow.cipher = register_cipher(&kseed_desc); -#elif defined(LTC_KHAZAD) - prng->u.yarrow.cipher = register_cipher(&khazad_desc); -#elif defined(LTC_CAST5) - prng->u.yarrow.cipher = register_cipher(&cast5_desc); -#elif defined(LTC_XTEA) - prng->u.yarrow.cipher = register_cipher(&xtea_desc); -#elif defined(LTC_SAFER) - prng->u.yarrow.cipher = register_cipher(&safer_sk128_desc); -#elif defined(LTC_DES) - prng->u.yarrow.cipher = register_cipher(&des3_desc); -#else - #error LTC_YARROW needs at least one CIPHER -#endif - if ((err = cipher_is_valid(prng->u.yarrow.cipher)) != CRYPT_OK) { - return err; - } - -#ifdef LTC_SHA256 - prng->u.yarrow.hash = register_hash(&sha256_desc); -#elif defined(LTC_SHA512) - prng->u.yarrow.hash = register_hash(&sha512_desc); -#elif defined(LTC_TIGER) - prng->u.yarrow.hash = register_hash(&tiger_desc); -#elif defined(LTC_SHA1) - prng->u.yarrow.hash = register_hash(&sha1_desc); -#elif defined(LTC_RIPEMD320) - prng->u.yarrow.hash = register_hash(&rmd320_desc); -#elif defined(LTC_RIPEMD256) - prng->u.yarrow.hash = register_hash(&rmd256_desc); -#elif defined(LTC_RIPEMD160) - prng->u.yarrow.hash = register_hash(&rmd160_desc); -#elif defined(LTC_RIPEMD128) - prng->u.yarrow.hash = register_hash(&rmd128_desc); -#elif defined(LTC_MD5) - prng->u.yarrow.hash = register_hash(&md5_desc); -#elif defined(LTC_MD4) - prng->u.yarrow.hash = register_hash(&md4_desc); -#elif defined(LTC_MD2) - prng->u.yarrow.hash = register_hash(&md2_desc); -#elif defined(LTC_WHIRLPOOL) - prng->u.yarrow.hash = register_hash(&whirlpool_desc); -#else - #error LTC_YARROW needs at least one HASH -#endif - if ((err = hash_is_valid(prng->u.yarrow.hash)) != CRYPT_OK) { - return err; - } - - /* zero the memory used */ - zeromem(prng->u.yarrow.pool, sizeof(prng->u.yarrow.pool)); - LTC_MUTEX_INIT(&prng->lock) - - return CRYPT_OK; -} - -/** - Add entropy to the PRNG state - @param in The data to add - @param inlen Length of the data to add - @param prng PRNG state to update - @return CRYPT_OK if successful -*/ -int yarrow_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - hash_state md; - int err; - - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen > 0); - - LTC_MUTEX_LOCK(&prng->lock); - - if ((err = hash_is_valid(prng->u.yarrow.hash)) != CRYPT_OK) { - goto LBL_UNLOCK; - } - - /* start the hash */ - if ((err = hash_descriptor[prng->u.yarrow.hash].init(&md)) != CRYPT_OK) { - goto LBL_UNLOCK; - } - - /* hash the current pool */ - if ((err = hash_descriptor[prng->u.yarrow.hash].process(&md, prng->u.yarrow.pool, - hash_descriptor[prng->u.yarrow.hash].hashsize)) != CRYPT_OK) { - goto LBL_UNLOCK; - } - - /* add the new entropy */ - if ((err = hash_descriptor[prng->u.yarrow.hash].process(&md, in, inlen)) != CRYPT_OK) { - goto LBL_UNLOCK; - } - - /* store result */ - err = hash_descriptor[prng->u.yarrow.hash].done(&md, prng->u.yarrow.pool); - -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); - return err; -} - -/** - Make the PRNG ready to read from - @param prng The PRNG to make active - @return CRYPT_OK if successful -*/ -int yarrow_ready(prng_state *prng) -{ - int ks, err; - - LTC_ARGCHK(prng != NULL); - - LTC_MUTEX_LOCK(&prng->lock); - - if ((err = hash_is_valid(prng->u.yarrow.hash)) != CRYPT_OK) { - goto LBL_UNLOCK; - } - - if ((err = cipher_is_valid(prng->u.yarrow.cipher)) != CRYPT_OK) { - goto LBL_UNLOCK; - } - - /* setup CTR mode using the "pool" as the key */ - ks = (int)hash_descriptor[prng->u.yarrow.hash].hashsize; - if ((err = cipher_descriptor[prng->u.yarrow.cipher].keysize(&ks)) != CRYPT_OK) { - goto LBL_UNLOCK; - } - - if ((err = ctr_start(prng->u.yarrow.cipher, /* what cipher to use */ - prng->u.yarrow.pool, /* IV */ - prng->u.yarrow.pool, ks, /* KEY and key size */ - 0, /* number of rounds */ - CTR_COUNTER_LITTLE_ENDIAN, /* little endian counter */ - &prng->u.yarrow.ctr)) != CRYPT_OK) { - goto LBL_UNLOCK; - } - prng->ready = 1; - -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); - return err; -} - -/** - Read from the PRNG - @param out Destination - @param outlen Length of output - @param prng The active PRNG to read from - @return Number of octets read -*/ -unsigned long yarrow_read(unsigned char *out, unsigned long outlen, prng_state *prng) -{ - if (outlen == 0 || prng == NULL || out == NULL) return 0; - - LTC_MUTEX_LOCK(&prng->lock); - - if (!prng->ready) { - outlen = 0; - goto LBL_UNLOCK; - } - - /* put out in predictable state first */ - zeromem(out, outlen); - - /* now randomize it */ - if (ctr_encrypt(out, out, outlen, &prng->u.yarrow.ctr) != CRYPT_OK) { - outlen = 0; - } - -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); - return outlen; -} - -/** - Terminate the PRNG - @param prng The PRNG to terminate - @return CRYPT_OK if successful -*/ -int yarrow_done(prng_state *prng) -{ - int err; - LTC_ARGCHK(prng != NULL); - - LTC_MUTEX_LOCK(&prng->lock); - prng->ready = 0; - - /* call cipher done when we invent one ;-) */ - - /* we invented one */ - err = ctr_done(&prng->u.yarrow.ctr); - - LTC_MUTEX_UNLOCK(&prng->lock); - LTC_MUTEX_DESTROY(&prng->lock); - return err; -} - -/** - Export the PRNG state - @param out [out] Destination - @param outlen [in/out] Max size and resulting size of the state - @param prng The PRNG to export - @return CRYPT_OK if successful -*/ -LTC_PRNG_EXPORT(yarrow) - -/** - Import a PRNG state - @param in The PRNG state - @param inlen Size of the state - @param prng The PRNG to import - @return CRYPT_OK if successful -*/ -int yarrow_import(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(prng != NULL); - if (inlen < (unsigned long)yarrow_desc.export_size) return CRYPT_INVALID_ARG; - - if ((err = yarrow_start(prng)) != CRYPT_OK) return err; - if ((err = yarrow_add_entropy(in, inlen, prng)) != CRYPT_OK) return err; - return CRYPT_OK; -} - -/** - PRNG self-test - @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled -*/ -int yarrow_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - int err; - prng_state prng; - - if ((err = yarrow_start(&prng)) != CRYPT_OK) { - return err; - } - - /* now let's test the hash/cipher that was chosen */ - if (cipher_descriptor[prng.u.yarrow.cipher].test && - ((err = cipher_descriptor[prng.u.yarrow.cipher].test()) != CRYPT_OK)) { - return err; - } - if (hash_descriptor[prng.u.yarrow.hash].test && - ((err = hash_descriptor[prng.u.yarrow.hash].test()) != CRYPT_OK)) { - return err; - } - - return CRYPT_OK; -#endif -} - -#endif - diff --git a/src/stream/chacha/chacha_crypt.c b/src/stream/chacha/chacha_crypt.c deleted file mode 100644 index 91500f81..00000000 --- a/src/stream/chacha/chacha_crypt.c +++ /dev/null @@ -1,93 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * chacha-ref.c version 20080118 - * Public domain from D. J. Bernstein - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA - -#define QUARTERROUND(a,b,c,d) \ - x[a] += x[b]; x[d] = ROL(x[d] ^ x[a], 16); \ - x[c] += x[d]; x[b] = ROL(x[b] ^ x[c], 12); \ - x[a] += x[b]; x[d] = ROL(x[d] ^ x[a], 8); \ - x[c] += x[d]; x[b] = ROL(x[b] ^ x[c], 7); - -static void s_chacha_block(unsigned char *output, const ulong32 *input, int rounds) -{ - ulong32 x[16]; - int i; - XMEMCPY(x, input, sizeof(x)); - for (i = rounds; i > 0; i -= 2) { - QUARTERROUND(0, 4, 8,12) - QUARTERROUND(1, 5, 9,13) - QUARTERROUND(2, 6,10,14) - QUARTERROUND(3, 7,11,15) - QUARTERROUND(0, 5,10,15) - QUARTERROUND(1, 6,11,12) - QUARTERROUND(2, 7, 8,13) - QUARTERROUND(3, 4, 9,14) - } - for (i = 0; i < 16; ++i) { - x[i] += input[i]; - STORE32L(x[i], output + 4 * i); - } -} - -/** - Encrypt (or decrypt) bytes of ciphertext (or plaintext) with ChaCha - @param st The ChaCha state - @param in The plaintext (or ciphertext) - @param inlen The length of the input (octets) - @param out [out] The ciphertext (or plaintext), length inlen - @return CRYPT_OK if successful -*/ -int chacha_crypt(chacha_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out) -{ - unsigned char buf[64]; - unsigned long i, j; - - if (inlen == 0) return CRYPT_OK; /* nothing to do */ - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(st->ivlen != 0); - - if (st->ksleft > 0) { - j = MIN(st->ksleft, inlen); - for (i = 0; i < j; ++i, st->ksleft--) out[i] = in[i] ^ st->kstream[64 - st->ksleft]; - inlen -= j; - if (inlen == 0) return CRYPT_OK; - out += j; - in += j; - } - for (;;) { - s_chacha_block(buf, st->input, st->rounds); - if (st->ivlen == 8) { - /* IV-64bit, increment 64bit counter */ - if (0 == ++st->input[12] && 0 == ++st->input[13]) return CRYPT_OVERFLOW; - } - else { - /* IV-96bit, increment 32bit counter */ - if (0 == ++st->input[12]) return CRYPT_OVERFLOW; - } - if (inlen <= 64) { - for (i = 0; i < inlen; ++i) out[i] = in[i] ^ buf[i]; - st->ksleft = 64 - inlen; - for (i = inlen; i < 64; ++i) st->kstream[i] = buf[i]; - return CRYPT_OK; - } - for (i = 0; i < 64; ++i) out[i] = in[i] ^ buf[i]; - inlen -= 64; - out += 64; - in += 64; - } -} - -#undef QUARTERROUND - -#endif diff --git a/src/stream/chacha/chacha_done.c b/src/stream/chacha/chacha_done.c deleted file mode 100644 index 1dc641e4..00000000 --- a/src/stream/chacha/chacha_done.c +++ /dev/null @@ -1,20 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA - -/** - Terminate and clear ChaCha state - @param st The ChaCha state - @return CRYPT_OK on success -*/ -int chacha_done(chacha_state *st) -{ - LTC_ARGCHK(st != NULL); - zeromem(st, sizeof(chacha_state)); - return CRYPT_OK; -} - -#endif diff --git a/src/stream/chacha/chacha_ivctr32.c b/src/stream/chacha/chacha_ivctr32.c deleted file mode 100644 index 08416f52..00000000 --- a/src/stream/chacha/chacha_ivctr32.c +++ /dev/null @@ -1,37 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * chacha-ref.c version 20080118 - * Public domain from D. J. Bernstein - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA - -/** - Set IV + counter data to the ChaCha state - @param st The ChaCha20 state - @param iv The IV data to add - @param ivlen The length of the IV (must be 12) - @param counter 32bit (unsigned) initial counter value - @return CRYPT_OK on success - */ -int chacha_ivctr32(chacha_state *st, const unsigned char *iv, unsigned long ivlen, ulong32 counter) -{ - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(iv != NULL); - /* 96bit IV + 32bit counter */ - LTC_ARGCHK(ivlen == 12); - - st->input[12] = counter; - LOAD32L(st->input[13], iv + 0); - LOAD32L(st->input[14], iv + 4); - LOAD32L(st->input[15], iv + 8); - st->ksleft = 0; - st->ivlen = ivlen; - return CRYPT_OK; -} - -#endif diff --git a/src/stream/chacha/chacha_ivctr64.c b/src/stream/chacha/chacha_ivctr64.c deleted file mode 100644 index 49c54590..00000000 --- a/src/stream/chacha/chacha_ivctr64.c +++ /dev/null @@ -1,37 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * chacha-ref.c version 20080118 - * Public domain from D. J. Bernstein - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA - -/** - Set IV + counter data to the ChaCha state - @param st The ChaCha20 state - @param iv The IV data to add - @param ivlen The length of the IV (must be 8) - @param counter 64bit (unsigned) initial counter value - @return CRYPT_OK on success - */ -int chacha_ivctr64(chacha_state *st, const unsigned char *iv, unsigned long ivlen, ulong64 counter) -{ - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(iv != NULL); - /* 64bit IV + 64bit counter */ - LTC_ARGCHK(ivlen == 8); - - st->input[12] = (ulong32)(counter & 0xFFFFFFFF); - st->input[13] = (ulong32)(counter >> 32); - LOAD32L(st->input[14], iv + 0); - LOAD32L(st->input[15], iv + 4); - st->ksleft = 0; - st->ivlen = ivlen; - return CRYPT_OK; -} - -#endif diff --git a/src/stream/chacha/chacha_keystream.c b/src/stream/chacha/chacha_keystream.c deleted file mode 100644 index b7fe6888..00000000 --- a/src/stream/chacha/chacha_keystream.c +++ /dev/null @@ -1,28 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * chacha-ref.c version 20080118 - * Public domain from D. J. Bernstein - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA - -/** - Generate a stream of random bytes via ChaCha - @param st The ChaCha20 state - @param out [out] The output buffer - @param outlen The output length - @return CRYPT_OK on success - */ -int chacha_keystream(chacha_state *st, unsigned char *out, unsigned long outlen) -{ - if (outlen == 0) return CRYPT_OK; /* nothing to do */ - LTC_ARGCHK(out != NULL); - XMEMSET(out, 0, outlen); - return chacha_crypt(st, out, outlen, out); -} - -#endif diff --git a/src/stream/chacha/chacha_memory.c b/src/stream/chacha/chacha_memory.c deleted file mode 100644 index 957af0f3..00000000 --- a/src/stream/chacha/chacha_memory.c +++ /dev/null @@ -1,51 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA - -/** - Encrypt (or decrypt) bytes of ciphertext (or plaintext) with ChaCha - @param key The key - @param keylen The key length - @param rounds The number of rounds - @param iv The initial vector - @param ivlen The initial vector length - @param counter initial counter value, either ignored, 32- or 64-bit, depending on ivlen - @param datain The plaintext (or ciphertext) - @param datalen The length of the input and output (octets) - @param dataout [out] The ciphertext (or plaintext) - @return CRYPT_OK if successful -*/ -int chacha_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds, - const unsigned char *iv, unsigned long ivlen, ulong64 counter, - const unsigned char *datain, unsigned long datalen, unsigned char *dataout) -{ - chacha_state st; - int err; - const unsigned char *iv_ = iv; - unsigned long ivlen_ = ivlen; - ulong64 counter_ = counter; - - if (ivlen == 16) { - LOAD64L(counter_, iv); - iv_ += 8; - ivlen_ -=8; - } - - LTC_ARGCHK(ivlen_ <= 8 || counter_ < CONST64(4294967296)); /* 2**32 */ - - if ((err = chacha_setup(&st, key, keylen, rounds)) != CRYPT_OK) goto WIPE_KEY; - if (ivlen_ > 8) { - if ((err = chacha_ivctr32(&st, iv_, ivlen_, (ulong32)counter_)) != CRYPT_OK) goto WIPE_KEY; - } else { - if ((err = chacha_ivctr64(&st, iv_, ivlen_, counter_)) != CRYPT_OK) goto WIPE_KEY; - } - err = chacha_crypt(&st, datain, datalen, dataout); -WIPE_KEY: - chacha_done(&st); - return err; -} - -#endif /* LTC_CHACHA */ diff --git a/src/stream/chacha/chacha_setup.c b/src/stream/chacha/chacha_setup.c deleted file mode 100644 index b04e0ea4..00000000 --- a/src/stream/chacha/chacha_setup.c +++ /dev/null @@ -1,56 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * chacha-ref.c version 20080118 - * Public domain from D. J. Bernstein - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA - -/** - Initialize an ChaCha context (only the key) - @param st [out] The destination of the ChaCha state - @param key The secret key - @param keylen The length of the secret key (octets) - @param rounds Number of rounds (e.g. 20 for ChaCha20) - @return CRYPT_OK if successful -*/ -int chacha_setup(chacha_state *st, const unsigned char *key, unsigned long keylen, int rounds) -{ - const char * const sigma = "expand 32-byte k"; - const char * const tau = "expand 16-byte k"; - const char *constants; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(keylen == 32 || keylen == 16); - - if (rounds == 0) rounds = 20; - - LOAD32L(st->input[4], key + 0); - LOAD32L(st->input[5], key + 4); - LOAD32L(st->input[6], key + 8); - LOAD32L(st->input[7], key + 12); - if (keylen == 32) { /* 256bit */ - key += 16; - constants = sigma; - } else { /* 128bit */ - constants = tau; - } - LOAD32L(st->input[8], key + 0); - LOAD32L(st->input[9], key + 4); - LOAD32L(st->input[10], key + 8); - LOAD32L(st->input[11], key + 12); - LOAD32L(st->input[0], constants + 0); - LOAD32L(st->input[1], constants + 4); - LOAD32L(st->input[2], constants + 8); - LOAD32L(st->input[3], constants + 12); - st->rounds = rounds; /* e.g. 20 for chacha20 */ - st->ivlen = 0; /* will be set later by chacha_ivctr(32|64) */ - return CRYPT_OK; -} - -#endif diff --git a/src/stream/chacha/chacha_test.c b/src/stream/chacha/chacha_test.c deleted file mode 100644 index 51aabd60..00000000 --- a/src/stream/chacha/chacha_test.c +++ /dev/null @@ -1,74 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * chacha-ref.c version 20080118 - * Public domain from D. J. Bernstein - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_CHACHA - -int chacha_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - unsigned long len; - unsigned char out[1000]; - /* https://tools.ietf.org/html/rfc7539#section-2.4.2 */ - unsigned char k[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }; - unsigned char n[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00 }; - unsigned char ct[] = { 0x6E, 0x2E, 0x35, 0x9A, 0x25, 0x68, 0xF9, 0x80, 0x41, 0xBA, 0x07, 0x28, 0xDD, 0x0D, 0x69, 0x81, - 0xE9, 0x7E, 0x7A, 0xEC, 0x1D, 0x43, 0x60, 0xC2, 0x0A, 0x27, 0xAF, 0xCC, 0xFD, 0x9F, 0xAE, 0x0B, - 0xF9, 0x1B, 0x65, 0xC5, 0x52, 0x47, 0x33, 0xAB, 0x8F, 0x59, 0x3D, 0xAB, 0xCD, 0x62, 0xB3, 0x57, - 0x16, 0x39, 0xD6, 0x24, 0xE6, 0x51, 0x52, 0xAB, 0x8F, 0x53, 0x0C, 0x35, 0x9F, 0x08, 0x61, 0xD8, - 0x07, 0xCA, 0x0D, 0xBF, 0x50, 0x0D, 0x6A, 0x61, 0x56, 0xA3, 0x8E, 0x08, 0x8A, 0x22, 0xB6, 0x5E, - 0x52, 0xBC, 0x51, 0x4D, 0x16, 0xCC, 0xF8, 0x06, 0x81, 0x8C, 0xE9, 0x1A, 0xB7, 0x79, 0x37, 0x36, - 0x5A, 0xF9, 0x0B, 0xBF, 0x74, 0xA3, 0x5B, 0xE6, 0xB4, 0x0B, 0x8E, 0xED, 0xF2, 0x78, 0x5E, 0x42, - 0x87, 0x4D }; - char pt[] = "Ladies and Gentlemen of the class of '99: If I could offer you only one tip for the future, sunscreen would be it."; - chacha_state st; - int err; - - len = XSTRLEN(pt); - - /* crypt piece by piece - using chacha_ivctr32() */ - if ((err = chacha_setup(&st, k, sizeof(k), 20)) != CRYPT_OK) return err; - if ((err = chacha_ivctr32(&st, n, sizeof(n), 1)) != CRYPT_OK) return err; - if ((err = chacha_crypt(&st, (unsigned char*)pt, 35, out )) != CRYPT_OK) return err; - if ((err = chacha_crypt(&st, (unsigned char*)pt + 35, 35, out + 35)) != CRYPT_OK) return err; - if ((err = chacha_crypt(&st, (unsigned char*)pt + 70, 5, out + 70)) != CRYPT_OK) return err; - if ((err = chacha_crypt(&st, (unsigned char*)pt + 75, 5, out + 75)) != CRYPT_OK) return err; - if ((err = chacha_crypt(&st, (unsigned char*)pt + 80, len - 80, out + 80)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, len, ct, sizeof(ct), "CHACHA-TV1", 1)) return CRYPT_FAIL_TESTVECTOR; - - /* crypt in one go - using chacha_ivctr32() */ - if ((err = chacha_setup(&st, k, sizeof(k), 20)) != CRYPT_OK) return err; - if ((err = chacha_ivctr32(&st, n, sizeof(n), 1)) != CRYPT_OK) return err; - if ((err = chacha_crypt(&st, (unsigned char*)pt, len, out)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, len, ct, sizeof(ct), "CHACHA-TV2", 1)) return CRYPT_FAIL_TESTVECTOR; - - /* crypt in one go - using chacha_ivctr64() */ - if ((err = chacha_setup(&st, k, sizeof(k), 20)) != CRYPT_OK) return err; - if ((err = chacha_ivctr64(&st, n + 4, sizeof(n) - 4, 1)) != CRYPT_OK) return err; - if ((err = chacha_crypt(&st, (unsigned char*)pt, len, out)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, len, ct, sizeof(ct), "CHACHA-TV3", 1)) return CRYPT_FAIL_TESTVECTOR; - - /* crypt in a single call using 32-bit counter with a value of 1 */ - if ((err = chacha_memory(k, sizeof(k), 20, - n, sizeof(n), 1, (unsigned char*)pt, len, out)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, len, ct, sizeof(ct), "CHACHA-TV4", 1)) return CRYPT_FAIL_TESTVECTOR; - - /* crypt in a single call using 64-bit counter with a value of 1 */ - if ((err = chacha_memory(k, sizeof(k), 20, - n + 4, sizeof(n) - 4, 1, (unsigned char*)pt, len, out)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, len, ct, sizeof(ct), "CHACHA-TV5", 1)) return CRYPT_FAIL_TESTVECTOR; - - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/stream/chacha/xchacha20_memory.c b/src/stream/chacha/xchacha20_memory.c deleted file mode 100644 index 3d4ccd18..00000000 --- a/src/stream/chacha/xchacha20_memory.c +++ /dev/null @@ -1,34 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_XCHACHA20 - -/** - Encrypt (or decrypt) bytes of ciphertext (or plaintext) with XChaCha20 - @param key The key - @param keylen The key length - @param rounds The number of rounds - @param nonce The nonce - @param noncelen The nonce length, must be 24 (octets) - @param datain The plaintext (or ciphertext) - @param datalen The length of the input and output (octets) - @param dataout [out] The ciphertext (or plaintext) - @return CRYPT_OK if successful -*/ -int xchacha20_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *datain, unsigned long datalen, unsigned char *dataout) -{ - chacha_state st; - int err; - - err = xchacha20_setup(&st, key, keylen, nonce, noncelen, rounds); - if (err == CRYPT_OK) { - err = chacha_crypt(&st, datain, datalen, dataout); - } - chacha_done(&st); - return err; -} - -#endif /* LTC_XCHACHA20 */ diff --git a/src/stream/chacha/xchacha20_setup.c b/src/stream/chacha/xchacha20_setup.c deleted file mode 100644 index c8d84329..00000000 --- a/src/stream/chacha/xchacha20_setup.c +++ /dev/null @@ -1,144 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/* The implementation is based on: - draft-irtf-cfrg-xchacha, "XChaCha: eXtended-nonce ChaCha and AEAD_XChaCha20_Poly1305" - RFC 8439, "ChaCha20 and Poly1305 for IETF Protocols" -*/ - -#ifdef LTC_XCHACHA20 - -#define QUARTERROUND(a,b,c,d) \ - x[a] += x[b]; x[d] = ROL(x[d] ^ x[a], 16); \ - x[c] += x[d]; x[b] = ROL(x[b] ^ x[c], 12); \ - x[a] += x[b]; x[d] = ROL(x[d] ^ x[a], 8); \ - x[c] += x[d]; x[b] = ROL(x[b] ^ x[c], 7); - -/* ChaCha20 double-round without the final addition */ -static void s_hchacha20(ulong32 *x, int rounds) -{ - int i; - - for (i = rounds; i > 0; i -= 2) { - /* columnround */ - QUARTERROUND( 0, 4, 8,12) - QUARTERROUND( 1, 5, 9,13) - QUARTERROUND( 2, 6,10,14) - QUARTERROUND( 3, 7,11,15) - /* diagonalround */ - QUARTERROUND( 0, 5,10,15) - QUARTERROUND( 1, 6,11,12) - QUARTERROUND( 2, 7, 8,13) - QUARTERROUND( 3, 4, 9,14) - } -} - -#undef QUARTERROUND - -/** - HChaCha20: derive a 256-bit subkey from a 256-bit key and 128-bit input. - This is the ChaCha20 core (double-rounds) without the final addition step, - extracting output from state positions {0,1,2,3,12,13,14,15}. - @param out [out] The derived 32-byte subkey - @param outlen The length of the output buffer, must be 32 (octets) - @param key The secret key - @param keylen The length of the secret key, must be 32 (octets) - @param in The 16-byte input (nonce or constant) - @param inlen The length of the input, must be 16 (octets) - @param rounds Number of rounds (must be evenly divisible by 2, default is 20) - @return CRYPT_OK if successful -*/ -int xchacha20_hchacha20(unsigned char *out, unsigned long outlen, - const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, - int rounds) -{ - const char * const constants = "expand 32-byte k"; - ulong32 x[16]; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen == 32); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(keylen == 32); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen == 16); - if (rounds == 0) rounds = 20; - LTC_ARGCHK(rounds % 2 == 0); - - LOAD32L(x[ 0], constants + 0); - LOAD32L(x[ 1], constants + 4); - LOAD32L(x[ 2], constants + 8); - LOAD32L(x[ 3], constants + 12); - LOAD32L(x[ 4], key + 0); - LOAD32L(x[ 5], key + 4); - LOAD32L(x[ 6], key + 8); - LOAD32L(x[ 7], key + 12); - LOAD32L(x[ 8], key + 16); - LOAD32L(x[ 9], key + 20); - LOAD32L(x[10], key + 24); - LOAD32L(x[11], key + 28); - LOAD32L(x[12], in + 0); - LOAD32L(x[13], in + 4); - LOAD32L(x[14], in + 8); - LOAD32L(x[15], in + 12); - - s_hchacha20(x, rounds); - - STORE32L(x[ 0], out + 0); - STORE32L(x[ 1], out + 4); - STORE32L(x[ 2], out + 8); - STORE32L(x[ 3], out + 12); - STORE32L(x[12], out + 16); - STORE32L(x[13], out + 20); - STORE32L(x[14], out + 24); - STORE32L(x[15], out + 28); - - zeromem(x, sizeof(x)); - return CRYPT_OK; -} - -/** - Initialize an XChaCha20 context (HChaCha20 subkey derivation + ChaCha20 IETF setup) - @param st [out] The destination of the ChaCha20 state - @param key The secret key - @param keylen The length of the secret key, must be 32 (octets) - @param nonce The nonce - @param noncelen The length of the nonce, must be 24 (octets) - @param rounds Number of rounds (must be evenly divisible by 2, default is 20) - @return CRYPT_OK if successful -*/ -int xchacha20_setup(chacha_state *st, const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - int rounds) -{ - unsigned char subkey[32]; - unsigned char iv[12]; - int err; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(nonce != NULL); - LTC_ARGCHK(noncelen == 24); - - /* HChaCha20: derive subkey from key and first 16 bytes of nonce */ - if ((err = xchacha20_hchacha20(subkey, 32, key, keylen, nonce, 16, rounds)) != CRYPT_OK) goto cleanup; - - /* set up ChaCha20 with the derived subkey */ - if ((err = chacha_setup(st, subkey, 32, rounds)) != CRYPT_OK) goto cleanup; - - /* build 12-byte IETF IV: 4 zero bytes + last 8 bytes of original nonce */ - XMEMSET(iv, 0, 4); - XMEMCPY(iv + 4, nonce + 16, 8); - if ((err = chacha_ivctr32(st, iv, 12, 0)) != CRYPT_OK) goto cleanup; - - /* mark as XChaCha20 */ - st->ivlen = 24; - -cleanup: - zeromem(subkey, sizeof(subkey)); - zeromem(iv, sizeof(iv)); - - return err; -} - -#endif /* LTC_XCHACHA20 */ diff --git a/src/stream/chacha/xchacha20_test.c b/src/stream/chacha/xchacha20_test.c deleted file mode 100644 index 4a280afd..00000000 --- a/src/stream/chacha/xchacha20_test.c +++ /dev/null @@ -1,119 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_XCHACHA20 - -int xchacha20_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - /* TV1: HChaCha20 known-answer test (draft-irtf-cfrg-xchacha, Section 2.2.1) */ - { - const unsigned char key[] = { - 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, - 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f - }; - const unsigned char in[] = { - 0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x00,0x31,0x41,0x59,0x27 - }; - const unsigned char expected_subkey[] = { - 0x82,0x41,0x3b,0x42,0x27,0xb2,0x7b,0xfe,0xd3,0x0e,0x42,0x50,0x8a,0x87,0x7d,0x73, - 0xa0,0xf9,0xe4,0xd5,0x8a,0x74,0xa8,0x53,0xc1,0x2e,0xc4,0x13,0x26,0xd3,0xec,0xdc - }; - unsigned char subkey[32]; - int err; - - if ((err = xchacha20_hchacha20(subkey, 32, key, 32, in, 16, 20)) != CRYPT_OK) return err; - - if (ltc_compare_testvector(subkey, 32, expected_subkey, 32, "XCHACHA20-TV1 (HChaCha20)", 1)) return CRYPT_FAIL_TESTVECTOR; - } - - /* TV2: XChaCha20 encryption test (draft-irtf-cfrg-xchacha, Appendix A.3.2) */ - { - const unsigned char key[] = { - 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, - 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f - }; - const unsigned char nonce[] = { - 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, - 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x58 - }; - /* "The dhole (pronounced "dole") is also known as the Asiatic wild dog, ..." */ - const unsigned char plaintext[] = { - 0x54,0x68,0x65,0x20,0x64,0x68,0x6f,0x6c,0x65,0x20,0x28,0x70,0x72,0x6f,0x6e,0x6f, - 0x75,0x6e,0x63,0x65,0x64,0x20,0x22,0x64,0x6f,0x6c,0x65,0x22,0x29,0x20,0x69,0x73, - 0x20,0x61,0x6c,0x73,0x6f,0x20,0x6b,0x6e,0x6f,0x77,0x6e,0x20,0x61,0x73,0x20,0x74, - 0x68,0x65,0x20,0x41,0x73,0x69,0x61,0x74,0x69,0x63,0x20,0x77,0x69,0x6c,0x64,0x20, - 0x64,0x6f,0x67,0x2c,0x20,0x72,0x65,0x64,0x20,0x64,0x6f,0x67,0x2c,0x20,0x61,0x6e, - 0x64,0x20,0x77,0x68,0x69,0x73,0x74,0x6c,0x69,0x6e,0x67,0x20,0x64,0x6f,0x67,0x2e, - 0x20,0x49,0x74,0x20,0x69,0x73,0x20,0x61,0x62,0x6f,0x75,0x74,0x20,0x74,0x68,0x65, - 0x20,0x73,0x69,0x7a,0x65,0x20,0x6f,0x66,0x20,0x61,0x20,0x47,0x65,0x72,0x6d,0x61, - 0x6e,0x20,0x73,0x68,0x65,0x70,0x68,0x65,0x72,0x64,0x20,0x62,0x75,0x74,0x20,0x6c, - 0x6f,0x6f,0x6b,0x73,0x20,0x6d,0x6f,0x72,0x65,0x20,0x6c,0x69,0x6b,0x65,0x20,0x61, - 0x20,0x6c,0x6f,0x6e,0x67,0x2d,0x6c,0x65,0x67,0x67,0x65,0x64,0x20,0x66,0x6f,0x78, - 0x2e,0x20,0x54,0x68,0x69,0x73,0x20,0x68,0x69,0x67,0x68,0x6c,0x79,0x20,0x65,0x6c, - 0x75,0x73,0x69,0x76,0x65,0x20,0x61,0x6e,0x64,0x20,0x73,0x6b,0x69,0x6c,0x6c,0x65, - 0x64,0x20,0x6a,0x75,0x6d,0x70,0x65,0x72,0x20,0x69,0x73,0x20,0x63,0x6c,0x61,0x73, - 0x73,0x69,0x66,0x69,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x77,0x6f,0x6c,0x76, - 0x65,0x73,0x2c,0x20,0x63,0x6f,0x79,0x6f,0x74,0x65,0x73,0x2c,0x20,0x6a,0x61,0x63, - 0x6b,0x61,0x6c,0x73,0x2c,0x20,0x61,0x6e,0x64,0x20,0x66,0x6f,0x78,0x65,0x73,0x20, - 0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x74,0x61,0x78,0x6f,0x6e,0x6f,0x6d,0x69,0x63, - 0x20,0x66,0x61,0x6d,0x69,0x6c,0x79,0x20,0x43,0x61,0x6e,0x69,0x64,0x61,0x65,0x2e - }; - const unsigned char expected_ct[] = { - 0x45,0x59,0xab,0xba,0x4e,0x48,0xc1,0x61,0x02,0xe8,0xbb,0x2c,0x05,0xe6,0x94,0x7f, - 0x50,0xa7,0x86,0xde,0x16,0x2f,0x9b,0x0b,0x7e,0x59,0x2a,0x9b,0x53,0xd0,0xd4,0xe9, - 0x8d,0x8d,0x64,0x10,0xd5,0x40,0xa1,0xa6,0x37,0x5b,0x26,0xd8,0x0d,0xac,0xe4,0xfa, - 0xb5,0x23,0x84,0xc7,0x31,0xac,0xbf,0x16,0xa5,0x92,0x3c,0x0c,0x48,0xd3,0x57,0x5d, - 0x4d,0x0d,0x2c,0x67,0x3b,0x66,0x6f,0xaa,0x73,0x10,0x61,0x27,0x77,0x01,0x09,0x3a, - 0x6b,0xf7,0xa1,0x58,0xa8,0x86,0x42,0x92,0xa4,0x1c,0x48,0xe3,0xa9,0xb4,0xc0,0xda, - 0xec,0xe0,0xf8,0xd9,0x8d,0x0d,0x7e,0x05,0xb3,0x7a,0x30,0x7b,0xbb,0x66,0x33,0x31, - 0x64,0xec,0x9e,0x1b,0x24,0xea,0x0d,0x6c,0x3f,0xfd,0xdc,0xec,0x4f,0x68,0xe7,0x44, - 0x30,0x56,0x19,0x3a,0x03,0xc8,0x10,0xe1,0x13,0x44,0xca,0x06,0xd8,0xed,0x8a,0x2b, - 0xfb,0x1e,0x8d,0x48,0xcf,0xa6,0xbc,0x0e,0xb4,0xe2,0x46,0x4b,0x74,0x81,0x42,0x40, - 0x7c,0x9f,0x43,0x1a,0xee,0x76,0x99,0x60,0xe1,0x5b,0xa8,0xb9,0x68,0x90,0x46,0x6e, - 0xf2,0x45,0x75,0x99,0x85,0x23,0x85,0xc6,0x61,0xf7,0x52,0xce,0x20,0xf9,0xda,0x0c, - 0x09,0xab,0x6b,0x19,0xdf,0x74,0xe7,0x6a,0x95,0x96,0x74,0x46,0xf8,0xd0,0xfd,0x41, - 0x5e,0x7b,0xee,0x2a,0x12,0xa1,0x14,0xc2,0x0e,0xb5,0x29,0x2a,0xe7,0xa3,0x49,0xae, - 0x57,0x78,0x20,0xd5,0x52,0x0a,0x1f,0x3f,0xb6,0x2a,0x17,0xce,0x6a,0x7e,0x68,0xfa, - 0x7c,0x79,0x11,0x1d,0x88,0x60,0x92,0x0b,0xc0,0x48,0xef,0x43,0xfe,0x84,0x48,0x6c, - 0xcb,0x87,0xc2,0x5f,0x0a,0xe0,0x45,0xf0,0xcc,0xe1,0xe7,0x98,0x9a,0x9a,0xa2,0x20, - 0xa2,0x8b,0xdd,0x48,0x27,0xe7,0x51,0xa2,0x4a,0x6d,0x5c,0x62,0xd7,0x90,0xa6,0x63, - 0x93,0xb9,0x31,0x11,0xc1,0xa5,0x5d,0xd7,0x42,0x1a,0x10,0x18,0x49,0x74,0xc7,0xc5 - }; - unsigned long ptlen = sizeof(plaintext); - unsigned char ciphertext[304]; - unsigned char msg2[304]; - chacha_state st; - int err; - - /* encrypt with incremental API */ - if ((err = xchacha20_setup(&st, key, 32, nonce, 24, 20)) != CRYPT_OK) return err; - if ((err = chacha_crypt(&st, plaintext, ptlen, ciphertext)) != CRYPT_OK) return err; - if ((err = chacha_done(&st)) != CRYPT_OK) return err; - - if (ltc_compare_testvector(ciphertext, ptlen, expected_ct, ptlen, "XCHACHA20-TV2", 1)) return CRYPT_FAIL_TESTVECTOR; - - /* decrypt and verify round-trip */ - if ((err = xchacha20_setup(&st, key, 32, nonce, 24, 20)) != CRYPT_OK) return err; - if ((err = chacha_crypt(&st, ciphertext, ptlen, msg2)) != CRYPT_OK) return err; - if ((err = chacha_done(&st)) != CRYPT_OK) return err; - - if (ltc_compare_testvector(msg2, ptlen, plaintext, ptlen, "XCHACHA20-TV3 (roundtrip)", 1)) - return CRYPT_FAIL_TESTVECTOR; - - /* round-trip with xchacha20_memory */ - if ((err = xchacha20_memory(key, 32, 20, nonce, 24, plaintext, ptlen, ciphertext)) != CRYPT_OK) return err; - if ((err = xchacha20_memory(key, 32, 20, nonce, 24, ciphertext, ptlen, msg2)) != CRYPT_OK) return err; - - if (ltc_compare_testvector(msg2, ptlen, plaintext, ptlen, "XCHACHA20-TV4 (memory roundtrip)", 1)) return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; - -#endif -} - -#endif /* LTC_XCHACHA20 */ diff --git a/src/stream/rabbit/rabbit.c b/src/stream/rabbit/rabbit.c deleted file mode 100644 index f397f80d..00000000 --- a/src/stream/rabbit/rabbit.c +++ /dev/null @@ -1,447 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/****************************************************************************** - * This Rabbit C source code was morphed fm the EU eSTREAM ECRYPT submission - * and should run on any conforming C implementation (C90 or later). - * - * This implementation supports any key length up to 128 bits (16 bytes) and - * works in increments of 8-bit bytes. Keys must be submitted as whole bytes - * and shorter keys will be right-null-padded to 16 bytes. Likewise, an iv - * may be any length up to 8 bytes and will be padded out to 8 bytes. - * - * The eSTREAM submission was rather picky about the calling sequence of - * ECRYPT_process_blocks() and ECRYPT_process_bytes(). That version allowed - * calling ECRYPT_process_blocks() multiple times for a multiple of whole - * 16-byte blocks, but once ECRYPT_process_bytes() was called. no more calls - * were supported correctly. This implementation handles the keystream - * differently and rabbit_crypt() may be called as many times as desired, - * crypting any number of bytes each time. - * - * http://www.ecrypt.eu.org/stream/e2-rabbit.html - * - * NB: One of the test vectors distributed by the eSTREAM site in the file - * "rabbit_p3source.zip" is in error. Referring to "test-vectors.txt" - * in that ZIP file, the 3rd line in "out1" should be - * "96 D6 73 16 88 D1 68 DA 51 D4 0C 70 C3 A1 16 F4". - * - * Here is the original legal notice accompanying the Rabbit submission - * to the EU eSTREAM competition. - *--------------------------------------------------------------------------- - * Copyright (C) Cryptico A/S. All rights reserved. - * - * YOU SHOULD CAREFULLY READ THIS LEGAL NOTICE BEFORE USING THIS SOFTWARE. - * - * This software is developed by Cryptico A/S and/or its suppliers. - * All title and intellectual property rights in and to the software, - * including but not limited to patent rights and copyrights, are owned - * by Cryptico A/S and/or its suppliers. - * - * The software may be used solely for non-commercial purposes - * without the prior written consent of Cryptico A/S. For further - * information on licensing terms and conditions please contact - * Cryptico A/S at info@cryptico.com - * - * Cryptico, CryptiCore, the Cryptico logo and "Re-thinking encryption" - * are either trademarks or registered trademarks of Cryptico A/S. - * - * Cryptico A/S shall not in any way be liable for any use of this - * software. The software is provided "as is" without any express or - * implied warranty. - *--------------------------------------------------------------------------- - * On October 6, 2008, Rabbit was "released into the public domain and - * may be used freely for any purpose." - * http://www.ecrypt.eu.org/stream/rabbitpf.html - * https://web.archive.org/web/20090630021733/http://www.ecrypt.eu.org/stream/phorum/read.php?1,1244 - ******************************************************************************/ - - -#include "tomcrypt_private.h" - -#ifdef LTC_RABBIT - -/* local/private prototypes (NB: rabbit_ctx and rabbit_state are different) */ -static LTC_INLINE ulong32 ss_rabbit_g_func(ulong32 x); -static LTC_INLINE void ss_rabbit_next_state(rabbit_ctx *p_instance); -static LTC_INLINE void ss_rabbit_gen_1_block(rabbit_state* st, unsigned char *out); - -/* -------------------------------------------------------------------------- */ - -/* Square a 32-bit unsigned integer to obtain the 64-bit result and return */ -/* the upper 32 bits XOR the lower 32 bits */ -static LTC_INLINE ulong32 ss_rabbit_g_func(ulong32 x) -{ - ulong32 a, b, h, l; - - /* Construct high and low argument for squaring */ - a = x & 0xFFFF; - b = x >> 16; - - /* Calculate high and low result of squaring */ - h = ((((ulong32)(a*a)>>17) + (ulong32)(a*b))>>15) + b*b; - l = x * x; - - /* Return high XOR low */ - return (ulong32)(h^l); -} - -/* -------------------------------------------------------------------------- */ - -/* Calculate the next internal state */ -static LTC_INLINE void ss_rabbit_next_state(rabbit_ctx *p_instance) -{ - ulong32 g[8], c_old[8], i; - - /* Save old counter values */ - for (i=0; i<8; i++) { - c_old[i] = p_instance->c[i]; - } - - /* Calculate new counter values */ - p_instance->c[0] = (ulong32)(p_instance->c[0] + 0x4D34D34D + p_instance->carry); - p_instance->c[1] = (ulong32)(p_instance->c[1] + 0xD34D34D3 + (p_instance->c[0] < c_old[0])); - p_instance->c[2] = (ulong32)(p_instance->c[2] + 0x34D34D34 + (p_instance->c[1] < c_old[1])); - p_instance->c[3] = (ulong32)(p_instance->c[3] + 0x4D34D34D + (p_instance->c[2] < c_old[2])); - p_instance->c[4] = (ulong32)(p_instance->c[4] + 0xD34D34D3 + (p_instance->c[3] < c_old[3])); - p_instance->c[5] = (ulong32)(p_instance->c[5] + 0x34D34D34 + (p_instance->c[4] < c_old[4])); - p_instance->c[6] = (ulong32)(p_instance->c[6] + 0x4D34D34D + (p_instance->c[5] < c_old[5])); - p_instance->c[7] = (ulong32)(p_instance->c[7] + 0xD34D34D3 + (p_instance->c[6] < c_old[6])); - p_instance->carry = (p_instance->c[7] < c_old[7]); - - /* Calculate the g-values */ - for (i=0;i<8;i++) { - g[i] = ss_rabbit_g_func((ulong32)(p_instance->x[i] + p_instance->c[i])); - } - - /* Calculate new state values */ - p_instance->x[0] = (ulong32)(g[0] + ROLc(g[7],16) + ROLc(g[6], 16)); - p_instance->x[1] = (ulong32)(g[1] + ROLc(g[0], 8) + g[7]); - p_instance->x[2] = (ulong32)(g[2] + ROLc(g[1],16) + ROLc(g[0], 16)); - p_instance->x[3] = (ulong32)(g[3] + ROLc(g[2], 8) + g[1]); - p_instance->x[4] = (ulong32)(g[4] + ROLc(g[3],16) + ROLc(g[2], 16)); - p_instance->x[5] = (ulong32)(g[5] + ROLc(g[4], 8) + g[3]); - p_instance->x[6] = (ulong32)(g[6] + ROLc(g[5],16) + ROLc(g[4], 16)); - p_instance->x[7] = (ulong32)(g[7] + ROLc(g[6], 8) + g[5]); -} - -/* ------------------------------------------------------------------------- */ - -static LTC_INLINE void ss_rabbit_gen_1_block(rabbit_state* st, unsigned char *out) -{ - ulong32 *ptr; - - /* Iterate the work context once */ - ss_rabbit_next_state(&(st->work_ctx)); - - /* Generate 16 bytes of pseudo-random data */ - ptr = (ulong32*)&(st->work_ctx.x); - STORE32L((ptr[0] ^ (ptr[5]>>16) ^ (ulong32)(ptr[3]<<16)), out+ 0); - STORE32L((ptr[2] ^ (ptr[7]>>16) ^ (ulong32)(ptr[5]<<16)), out+ 4); - STORE32L((ptr[4] ^ (ptr[1]>>16) ^ (ulong32)(ptr[7]<<16)), out+ 8); - STORE32L((ptr[6] ^ (ptr[3]>>16) ^ (ulong32)(ptr[1]<<16)), out+12); -} - -/* -------------------------------------------------------------------------- */ - -/* Key setup */ -int rabbit_setup(rabbit_state* st, const unsigned char *key, unsigned long keylen) -{ - ulong32 k0, k1, k2, k3, i; - unsigned char tmpkey[16] = {0}; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(keylen <= 16); - - /* init state */ - XMEMSET(st, 0, sizeof(rabbit_state)); - - /* pad key in tmpkey */ - XMEMCPY(tmpkey, key, keylen); - - /* Generate four subkeys */ - LOAD32L(k0, tmpkey+ 0); - LOAD32L(k1, tmpkey+ 4); - LOAD32L(k2, tmpkey+ 8); - LOAD32L(k3, tmpkey+12); - -#ifdef LTC_CLEAN_STACK - /* done with tmpkey, wipe it */ - zeromem(tmpkey, sizeof(tmpkey)); -#endif - - /* Generate initial state variables */ - st->master_ctx.x[0] = k0; - st->master_ctx.x[2] = k1; - st->master_ctx.x[4] = k2; - st->master_ctx.x[6] = k3; - st->master_ctx.x[1] = (ulong32)(k3<<16) | (k2>>16); - st->master_ctx.x[3] = (ulong32)(k0<<16) | (k3>>16); - st->master_ctx.x[5] = (ulong32)(k1<<16) | (k0>>16); - st->master_ctx.x[7] = (ulong32)(k2<<16) | (k1>>16); - - /* Generate initial counter values */ - st->master_ctx.c[0] = ROLc(k2, 16); - st->master_ctx.c[2] = ROLc(k3, 16); - st->master_ctx.c[4] = ROLc(k0, 16); - st->master_ctx.c[6] = ROLc(k1, 16); - st->master_ctx.c[1] = (k0&0xFFFF0000) | (k1&0xFFFF); - st->master_ctx.c[3] = (k1&0xFFFF0000) | (k2&0xFFFF); - st->master_ctx.c[5] = (k2&0xFFFF0000) | (k3&0xFFFF); - st->master_ctx.c[7] = (k3&0xFFFF0000) | (k0&0xFFFF); - - /* Clear carry bit */ - st->master_ctx.carry = 0; - - /* Iterate the master context four times */ - for (i=0; i<4; i++) { - ss_rabbit_next_state(&(st->master_ctx)); - } - - /* Modify the counters */ - for (i=0; i<8; i++) { - st->master_ctx.c[i] ^= st->master_ctx.x[(i+4)&0x7]; - } - - /* Copy master instance to work instance */ - for (i=0; i<8; i++) { - st->work_ctx.x[i] = st->master_ctx.x[i]; - st->work_ctx.c[i] = st->master_ctx.c[i]; - } - st->work_ctx.carry = st->master_ctx.carry; - /* ...and prepare block for crypt() */ - XMEMSET(&(st->block), 0, sizeof(st->block)); - st->unused = 0; - - return CRYPT_OK; -} - -/* -------------------------------------------------------------------------- */ - -/* IV setup */ -int rabbit_setiv(rabbit_state* st, const unsigned char *iv, unsigned long ivlen) -{ - ulong32 i0, i1, i2, i3, i; - unsigned char tmpiv[8] = {0}; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(iv != NULL || ivlen == 0); - LTC_ARGCHK(ivlen <= 8); - - /* pad iv in tmpiv */ - if (iv && ivlen > 0) XMEMCPY(tmpiv, iv, ivlen); - - /* Generate four subvectors */ - LOAD32L(i0, tmpiv+0); - LOAD32L(i2, tmpiv+4); - i1 = (i0>>16) | (i2&0xFFFF0000); - i3 = (i2<<16) | (i0&0x0000FFFF); - - /* Modify counter values */ - st->work_ctx.c[0] = st->master_ctx.c[0] ^ i0; - st->work_ctx.c[1] = st->master_ctx.c[1] ^ i1; - st->work_ctx.c[2] = st->master_ctx.c[2] ^ i2; - st->work_ctx.c[3] = st->master_ctx.c[3] ^ i3; - st->work_ctx.c[4] = st->master_ctx.c[4] ^ i0; - st->work_ctx.c[5] = st->master_ctx.c[5] ^ i1; - st->work_ctx.c[6] = st->master_ctx.c[6] ^ i2; - st->work_ctx.c[7] = st->master_ctx.c[7] ^ i3; - - /* Copy state variables */ - for (i=0; i<8; i++) { - st->work_ctx.x[i] = st->master_ctx.x[i]; - } - st->work_ctx.carry = st->master_ctx.carry; - - /* Iterate the work context four times */ - for (i=0; i<4; i++) { - ss_rabbit_next_state(&(st->work_ctx)); - } - - /* reset keystream buffer and unused count */ - XMEMSET(&(st->block), 0, sizeof(st->block)); - st->unused = 0; - - return CRYPT_OK; -} - -/* ------------------------------------------------------------------------- */ - -/* Crypt a chunk of any size (encrypt/decrypt) */ -int rabbit_crypt(rabbit_state* st, const unsigned char *in, unsigned long inlen, unsigned char *out) -{ - unsigned char buf[16]; - unsigned long i, j; - - if (inlen == 0) return CRYPT_OK; /* nothing to do */ - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - - if (st->unused > 0) { - j = MIN(st->unused, inlen); - for (i = 0; i < j; ++i, st->unused--) out[i] = in[i] ^ st->block[16 - st->unused]; - inlen -= j; - if (inlen == 0) return CRYPT_OK; - out += j; - in += j; - } - for (;;) { - /* gen a block for buf */ - ss_rabbit_gen_1_block(st, buf); - if (inlen <= 16) { - /* XOR and send to out */ - for (i = 0; i < inlen; ++i) out[i] = in[i] ^ buf[i]; - st->unused = 16 - inlen; - /* copy remainder to block */ - for (i = inlen; i < 16; ++i) st->block[i] = buf[i]; - return CRYPT_OK; - } - /* XOR entire buf and send to out */ - for (i = 0; i < 16; ++i) out[i] = in[i] ^ buf[i]; - inlen -= 16; - out += 16; - in += 16; - } -} - -/* ------------------------------------------------------------------------- */ - -int rabbit_keystream(rabbit_state *st, unsigned char *out, unsigned long outlen) -{ - if (outlen == 0) return CRYPT_OK; /* nothing to do */ - - LTC_ARGCHK(out != NULL); - - XMEMSET(out, 0, outlen); - return rabbit_crypt(st, out, outlen, out); -} - -/* -------------------------------------------------------------------------- */ - -int rabbit_done(rabbit_state *st) -{ - LTC_ARGCHK(st != NULL); - - zeromem(st, sizeof(rabbit_state)); - return CRYPT_OK; -} - -/* -------------------------------------------------------------------------- */ - -int rabbit_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - rabbit_state st; - int err; - unsigned char out[1000] = { 0 }; - { - /* all 3 tests use key and iv fm set 6, vector 3, the last vector in: - http://www.ecrypt.eu.org/stream/svn/viewcvs.cgi/ecrypt/trunk/submissions/rabbit/verified.test-vectors?rev=210&view=log - */ - - /* --- Test 1 (generate whole blocks) --------------------------------- */ - - { - unsigned char k[] = { 0x0F, 0x62, 0xB5, 0x08, 0x5B, 0xAE, 0x01, 0x54, - 0xA7, 0xFA, 0x4D, 0xA0, 0xF3, 0x46, 0x99, 0xEC }; - unsigned char iv[] = { 0x28, 0x8F, 0xF6, 0x5D, 0xC4, 0x2B, 0x92, 0xF9 }; - char pt[64] = { 0 }; - unsigned char ct[] = { 0x61, 0x3C, 0xB0, 0xBA, 0x96, 0xAF, 0xF6, 0xCA, - 0xCF, 0x2A, 0x45, 0x9A, 0x10, 0x2A, 0x7F, 0x78, - 0xCA, 0x98, 0x5C, 0xF8, 0xFD, 0xD1, 0x47, 0x40, - 0x18, 0x75, 0x8E, 0x36, 0xAE, 0x99, 0x23, 0xF5, - 0x19, 0xD1, 0x3D, 0x71, 0x8D, 0xAF, 0x8D, 0x7C, - 0x0C, 0x10, 0x9B, 0x79, 0xD5, 0x74, 0x94, 0x39, - 0xB7, 0xEF, 0xA4, 0xC4, 0xC9, 0xC8, 0xD2, 0x9D, - 0xC5, 0xB3, 0x88, 0x83, 0x14, 0xA6, 0x81, 0x6F }; - unsigned long ptlen = sizeof(pt); - - /* crypt 64 nulls */ - if ((err = rabbit_setup(&st, k, sizeof(k))) != CRYPT_OK) return err; - if ((err = rabbit_setiv(&st, iv, sizeof(iv))) != CRYPT_OK) return err; - if ((err = rabbit_crypt(&st, (unsigned char*)pt, ptlen, out)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, ptlen, ct, ptlen, "RABBIT-TV1", 1)) return CRYPT_FAIL_TESTVECTOR; - } - - /* --- Test 2 (generate unusual number of bytes each time) ------------ */ - - { - unsigned char k[] = { 0x0F, 0x62, 0xB5, 0x08, 0x5B, 0xAE, 0x01, 0x54, - 0xA7, 0xFA, 0x4D, 0xA0, 0xF3, 0x46, 0x99, 0xEC }; - unsigned char iv[] = { 0x28, 0x8F, 0xF6, 0x5D, 0xC4, 0x2B, 0x92, 0xF9 }; - char pt[39] = { 0 }; - unsigned char ct[] = { 0x61, 0x3C, 0xB0, 0xBA, 0x96, 0xAF, 0xF6, 0xCA, - 0xCF, 0x2A, 0x45, 0x9A, 0x10, 0x2A, 0x7F, 0x78, - 0xCA, 0x98, 0x5C, 0xF8, 0xFD, 0xD1, 0x47, 0x40, - 0x18, 0x75, 0x8E, 0x36, 0xAE, 0x99, 0x23, 0xF5, - 0x19, 0xD1, 0x3D, 0x71, 0x8D, 0xAF, 0x8D }; - unsigned long ptlen = sizeof(pt); - - /* crypt piece by piece (hit at least one 16-byte boundary) */ - if ((err = rabbit_setup(&st, k, sizeof(k))) != CRYPT_OK) return err; - if ((err = rabbit_setiv(&st, iv, sizeof(iv))) != CRYPT_OK) return err; - if ((err = rabbit_crypt(&st, (unsigned char*)pt, 5, out)) != CRYPT_OK) return err; - if ((err = rabbit_crypt(&st, (unsigned char*)pt + 5, 11, out + 5)) != CRYPT_OK) return err; - if ((err = rabbit_crypt(&st, (unsigned char*)pt + 16, 14, out + 16)) != CRYPT_OK) return err; - if ((err = rabbit_crypt(&st, (unsigned char*)pt + 30, 2, out + 30)) != CRYPT_OK) return err; - if ((err = rabbit_crypt(&st, (unsigned char*)pt + 32, 7, out + 32)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, ptlen, ct, ptlen, "RABBIT-TV2", 1)) return CRYPT_FAIL_TESTVECTOR; - } - - /* --- Test 3 (use non-null data) ------------------------------------- */ - - { - unsigned char k[] = { 0x0F, 0x62, 0xB5, 0x08, 0x5B, 0xAE, 0x01, 0x54, - 0xA7, 0xFA, 0x4D, 0xA0, 0xF3, 0x46, 0x99, 0xEC }; - unsigned char iv[] = { 0x28, 0x8F, 0xF6, 0x5D, 0xC4, 0x2B, 0x92, 0xF9 }; - char pt[] = "Kilroy was here, there, and everywhere!"; - unsigned char ct[] = { 0x2a, 0x55, 0xdc, 0xc8, 0xf9, 0xd6, 0xd6, 0xbd, - 0xae, 0x59, 0x65, 0xf2, 0x75, 0x58, 0x1a, 0x54, - 0xea, 0xec, 0x34, 0x9d, 0x8f, 0xb4, 0x6b, 0x60, - 0x79, 0x1b, 0xea, 0x16, 0xcb, 0xef, 0x46, 0x87, - 0x60, 0xa6, 0x55, 0x14, 0xff, 0xca, 0xac }; - unsigned long ptlen = XSTRLEN(pt); - unsigned char out2[1000] = { 0 }; - unsigned char nulls[1000] = { 0 }; - - /* crypt piece by piece */ - if ((err = rabbit_setup(&st, k, sizeof(k))) != CRYPT_OK) return err; - if ((err = rabbit_setiv(&st, iv, sizeof(iv))) != CRYPT_OK) return err; - if ((err = rabbit_crypt(&st, (unsigned char*)pt, 5, out)) != CRYPT_OK) return err; - if ((err = rabbit_crypt(&st, (unsigned char*)pt + 5, 29, out + 5)) != CRYPT_OK) return err; - if ((err = rabbit_crypt(&st, (unsigned char*)pt + 34, 5, out + 34)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, ptlen, ct, ptlen, "RABBIT-TV3", 1)) return CRYPT_FAIL_TESTVECTOR; - - /* --- Test 4 (crypt in a single call) ------------------------------------ */ - - if ((err = rabbit_memory(k, sizeof(k), iv, sizeof(iv), - (unsigned char*)pt, sizeof(pt), out)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, ptlen, ct, ptlen, "RABBIT-TV4", 1)) return CRYPT_FAIL_TESTVECTOR; - /* use 'out' (ciphertext) in the next decryption test */ - - /* --- Test 5 (decrypt ciphertext) ------------------------------------ */ - - /* decrypt ct (out) and compare with pt (start with only setiv() to reset) */ - if ((err = rabbit_setiv(&st, iv, sizeof(iv))) != CRYPT_OK) return err; - if ((err = rabbit_crypt(&st, out, ptlen, out2)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out2, ptlen, pt, ptlen, "RABBIT-TV5", 1)) return CRYPT_FAIL_TESTVECTOR; - - /* --- Test 6 (wipe state, incl key) ---------------------------------- */ - - if ((err = rabbit_done(&st)) != CRYPT_OK) return err; - if (ltc_compare_testvector(&st, sizeof(st), nulls, sizeof(st), "RABBIT-TV6", 1)) return CRYPT_FAIL_TESTVECTOR; - - } - - return CRYPT_OK; - } -#endif -} - -/* -------------------------------------------------------------------------- */ - -#endif diff --git a/src/stream/rabbit/rabbit_memory.c b/src/stream/rabbit/rabbit_memory.c deleted file mode 100644 index fee0234e..00000000 --- a/src/stream/rabbit/rabbit_memory.c +++ /dev/null @@ -1,40 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * chacha-ref.c version 20080118 - * Public domain from D. J. Bernstein - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_RABBIT - -/** - Encrypt (or decrypt) bytes of ciphertext (or plaintext) with Rabbit - @param key The key - @param keylen The key length - @param iv The initial vector - @param ivlen The initial vector length - @param datain The plaintext (or ciphertext) - @param datalen The length of the input and output (octets) - @param dataout [out] The ciphertext (or plaintext) - @return CRYPT_OK if successful -*/ -int rabbit_memory(const unsigned char *key, unsigned long keylen, - const unsigned char *iv, unsigned long ivlen, - const unsigned char *datain, unsigned long datalen, - unsigned char *dataout) -{ - rabbit_state st; - int err; - - if ((err = rabbit_setup(&st, key, keylen)) != CRYPT_OK) goto WIPE_KEY; - if ((err = rabbit_setiv(&st, iv, ivlen)) != CRYPT_OK) goto WIPE_KEY; - err = rabbit_crypt(&st, datain, datalen, dataout); -WIPE_KEY: - rabbit_done(&st); - return err; -} - -#endif /* LTC_RABBIT */ diff --git a/src/stream/rc4/rc4_stream.c b/src/stream/rc4/rc4_stream.c deleted file mode 100644 index 25877649..00000000 --- a/src/stream/rc4/rc4_stream.c +++ /dev/null @@ -1,101 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_RC4_STREAM - -/** - Initialize an RC4 context (only the key) - @param st [out] The destination of the RC4 state - @param key The secret key - @param keylen The length of the secret key (8 - 256 bytes) - @return CRYPT_OK if successful -*/ -int rc4_stream_setup(rc4_state *st, const unsigned char *key, unsigned long keylen) -{ - unsigned char tmp, *s; - int x, y; - unsigned long j; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(keylen >= 5); /* 40-2048 bits */ - - s = st->buf; - for (x = 0; x < 256; x++) { - s[x] = x; - } - - for (j = x = y = 0; x < 256; x++) { - y = (y + s[x] + key[j++]) & 255; - if (j == keylen) { - j = 0; - } - tmp = s[x]; s[x] = s[y]; s[y] = tmp; - } - st->x = 0; - st->y = 0; - - return CRYPT_OK; -} - -/** - Encrypt (or decrypt) bytes of ciphertext (or plaintext) with RC4 - @param st The RC4 state - @param in The plaintext (or ciphertext) - @param inlen The length of the input (octets) - @param out [out] The ciphertext (or plaintext), length inlen - @return CRYPT_OK if successful -*/ -int rc4_stream_crypt(rc4_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out) -{ - unsigned char x, y, *s, tmp; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - - x = st->x; - y = st->y; - s = st->buf; - while (inlen--) { - x = (x + 1) & 255; - y = (y + s[x]) & 255; - tmp = s[x]; s[x] = s[y]; s[y] = tmp; - tmp = (s[x] + s[y]) & 255; - *out++ = *in++ ^ s[tmp]; - } - st->x = x; - st->y = y; - return CRYPT_OK; -} - -/** - Generate a stream of random bytes via RC4 - @param st The RC420 state - @param out [out] The output buffer - @param outlen The output length - @return CRYPT_OK on success - */ -int rc4_stream_keystream(rc4_state *st, unsigned char *out, unsigned long outlen) -{ - if (outlen == 0) return CRYPT_OK; /* nothing to do */ - LTC_ARGCHK(out != NULL); - XMEMSET(out, 0, outlen); - return rc4_stream_crypt(st, out, outlen, out); -} - -/** - Terminate and clear RC4 state - @param st The RC4 state - @return CRYPT_OK on success -*/ -int rc4_stream_done(rc4_state *st) -{ - LTC_ARGCHK(st != NULL); - zeromem(st, sizeof(rc4_state)); - return CRYPT_OK; -} - -#endif diff --git a/src/stream/rc4/rc4_stream_memory.c b/src/stream/rc4/rc4_stream_memory.c deleted file mode 100644 index efe4888f..00000000 --- a/src/stream/rc4/rc4_stream_memory.c +++ /dev/null @@ -1,31 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_RC4_STREAM - -/** - Encrypt (or decrypt) bytes of ciphertext (or plaintext) with RC4 - @param key The key - @param keylen The key length - @param datain The plaintext (or ciphertext) - @param datalen The length of the input and output (octets) - @param dataout [out] The ciphertext (or plaintext) - @return CRYPT_OK if successful -*/ -int rc4_stream_memory(const unsigned char *key, unsigned long keylen, - const unsigned char *datain, unsigned long datalen, - unsigned char *dataout) -{ - rc4_state st; - int err; - - if ((err = rc4_stream_setup(&st, key, keylen)) != CRYPT_OK) goto WIPE_KEY; - err = rc4_stream_crypt(&st, datain, datalen, dataout); -WIPE_KEY: - rc4_stream_done(&st); - return err; -} - -#endif /* LTC_RC4_STREAM */ diff --git a/src/stream/rc4/rc4_test.c b/src/stream/rc4/rc4_test.c deleted file mode 100644 index cdc65aa3..00000000 --- a/src/stream/rc4/rc4_test.c +++ /dev/null @@ -1,33 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_RC4_STREAM - -int rc4_stream_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - rc4_state st; - int err; - const unsigned char key[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; - const unsigned char pt[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; - const unsigned char ct[] = { 0x75, 0xb7, 0x87, 0x80, 0x99, 0xe0, 0xc5, 0x96 }; - unsigned char buf[10]; - - if ((err = rc4_stream_setup(&st, key, sizeof(key))) != CRYPT_OK) return err; - if ((err = rc4_stream_crypt(&st, pt, sizeof(pt), buf)) != CRYPT_OK) return err; - if (ltc_compare_testvector(buf, sizeof(ct), ct, sizeof(ct), "RC4-TV1", 0)) return CRYPT_FAIL_TESTVECTOR; - if ((err = rc4_stream_done(&st)) != CRYPT_OK) return err; - - /* crypt in a single call */ - if ((err = rc4_stream_memory(key, sizeof(key), pt, sizeof(pt), buf)) != CRYPT_OK) return err; - if (ltc_compare_testvector(buf, sizeof(ct), ct, sizeof(ct), "RC4-TV2", 0)) return CRYPT_FAIL_TESTVECTOR; - - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/stream/salsa20/salsa20_crypt.c b/src/stream/salsa20/salsa20_crypt.c deleted file mode 100644 index e076d69f..00000000 --- a/src/stream/salsa20/salsa20_crypt.c +++ /dev/null @@ -1,88 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * "Salsa20 specification", http://cr.yp.to/snuffle/spec.pdf - * and salsa20-ref.c version 20051118 - * Public domain from D. J. Bernstein - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SALSA20 - -#define QUARTERROUND(a,b,c,d) \ - x[b] ^= (ROL((x[a] + x[d]), 7)); \ - x[c] ^= (ROL((x[b] + x[a]), 9)); \ - x[d] ^= (ROL((x[c] + x[b]), 13)); \ - x[a] ^= (ROL((x[d] + x[c]), 18)); - -static void s_salsa20_block(unsigned char *output, const ulong32 *input, int rounds) -{ - ulong32 x[16]; - int i; - XMEMCPY(x, input, sizeof(x)); - for (i = rounds; i > 0; i -= 2) { - QUARTERROUND( 0, 4, 8,12) - QUARTERROUND( 5, 9,13, 1) - QUARTERROUND(10,14, 2, 6) - QUARTERROUND(15, 3, 7,11) - QUARTERROUND( 0, 1, 2, 3) - QUARTERROUND( 5, 6, 7, 4) - QUARTERROUND(10,11, 8, 9) - QUARTERROUND(15,12,13,14) - } - for (i = 0; i < 16; ++i) { - x[i] += input[i]; - STORE32L(x[i], output + 4 * i); - } -} - -/** - Encrypt (or decrypt) bytes of ciphertext (or plaintext) with Salsa20 - @param st The Salsa20 state - @param in The plaintext (or ciphertext) - @param inlen The length of the input (octets) - @param out [out] The ciphertext (or plaintext), length inlen - @return CRYPT_OK if successful -*/ -int salsa20_crypt(salsa20_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out) -{ - unsigned char buf[64]; - unsigned long i, j; - - if (inlen == 0) return CRYPT_OK; /* nothing to do */ - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(st->ivlen == 8 || st->ivlen == 24); - - if (st->ksleft > 0) { - j = MIN(st->ksleft, inlen); - for (i = 0; i < j; ++i, st->ksleft--) out[i] = in[i] ^ st->kstream[64 - st->ksleft]; - inlen -= j; - if (inlen == 0) return CRYPT_OK; - out += j; - in += j; - } - for (;;) { - s_salsa20_block(buf, st->input, st->rounds); - /* Salsa20: 64-bit IV, increment 64-bit counter */ - if (0 == ++st->input[8] && 0 == ++st->input[9]) return CRYPT_OVERFLOW; - if (inlen <= 64) { - for (i = 0; i < inlen; ++i) out[i] = in[i] ^ buf[i]; - st->ksleft = 64 - inlen; - for (i = inlen; i < 64; ++i) st->kstream[i] = buf[i]; - return CRYPT_OK; - } - for (i = 0; i < 64; ++i) out[i] = in[i] ^ buf[i]; - inlen -= 64; - out += 64; - in += 64; - } -} - -#undef QUARTERROUND - -#endif diff --git a/src/stream/salsa20/salsa20_done.c b/src/stream/salsa20/salsa20_done.c deleted file mode 100644 index 9b8cbb6b..00000000 --- a/src/stream/salsa20/salsa20_done.c +++ /dev/null @@ -1,20 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SALSA20 - -/** - Terminate and clear Salsa20 state - @param st The Salsa20 state - @return CRYPT_OK on success -*/ -int salsa20_done(salsa20_state *st) -{ - LTC_ARGCHK(st != NULL); - zeromem(st, sizeof(salsa20_state)); - return CRYPT_OK; -} - -#endif diff --git a/src/stream/salsa20/salsa20_ivctr64.c b/src/stream/salsa20/salsa20_ivctr64.c deleted file mode 100644 index 8b25dfb3..00000000 --- a/src/stream/salsa20/salsa20_ivctr64.c +++ /dev/null @@ -1,38 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * "Salsa20 specification", http://cr.yp.to/snuffle/spec.pdf - * and salsa20-ref.c version 20051118 - * Public domain from D. J. Bernstein - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SALSA20 - -/** - Set IV + counter data to the Salsa20 state - @param st The Salsa20 state - @param iv The IV data to add - @param ivlen The length of the IV (must be 8) - @param counter 64bit (unsigned) initial counter value - @return CRYPT_OK on success - */ -int salsa20_ivctr64(salsa20_state *st, const unsigned char *iv, unsigned long ivlen, ulong64 counter) -{ - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(iv != NULL); - /* Salsa20: 64-bit IV (nonce) + 64-bit counter */ - LTC_ARGCHK(ivlen == 8); - - LOAD32L(st->input[6], iv + 0); - LOAD32L(st->input[7], iv + 4); - st->input[8] = (ulong32)(counter & 0xFFFFFFFF); - st->input[9] = (ulong32)(counter >> 32); - st->ksleft = 0; - st->ivlen = ivlen; - return CRYPT_OK; -} - -#endif diff --git a/src/stream/salsa20/salsa20_keystream.c b/src/stream/salsa20/salsa20_keystream.c deleted file mode 100644 index c51d0d64..00000000 --- a/src/stream/salsa20/salsa20_keystream.c +++ /dev/null @@ -1,29 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * "Salsa20 specification", http://cr.yp.to/snuffle/spec.pdf - * and salsa20-ref.c version 20051118 - * Public domain from D. J. Bernstein - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SALSA20 - -/** - Generate a stream of random bytes via Salsa20 - @param st The Salsa20 state - @param out [out] The output buffer - @param outlen The output length - @return CRYPT_OK on success - */ -int salsa20_keystream(salsa20_state *st, unsigned char *out, unsigned long outlen) -{ - if (outlen == 0) return CRYPT_OK; /* nothing to do */ - LTC_ARGCHK(out != NULL); - XMEMSET(out, 0, outlen); - return salsa20_crypt(st, out, outlen, out); -} - -#endif diff --git a/src/stream/salsa20/salsa20_memory.c b/src/stream/salsa20/salsa20_memory.c deleted file mode 100644 index 9408eb21..00000000 --- a/src/stream/salsa20/salsa20_memory.c +++ /dev/null @@ -1,35 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SALSA20 - -/** - Encrypt (or decrypt) bytes of ciphertext (or plaintext) with Salsa20 - @param key The key - @param keylen The key length - @param iv The initial vector - @param ivlen The initial vector length - @param datain The plaintext (or ciphertext) - @param datalen The length of the input and output (octets) - @param rounds The number of rounds - @param dataout [out] The ciphertext (or plaintext) - @return CRYPT_OK if successful -*/ -int salsa20_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds, - const unsigned char *iv, unsigned long ivlen, ulong64 counter, - const unsigned char *datain, unsigned long datalen, unsigned char *dataout) -{ - salsa20_state st; - int err; - - if ((err = salsa20_setup(&st, key, keylen, rounds)) != CRYPT_OK) goto WIPE_KEY; - if ((err = salsa20_ivctr64(&st, iv, ivlen, counter)) != CRYPT_OK) goto WIPE_KEY; - err = salsa20_crypt(&st, datain, datalen, dataout); -WIPE_KEY: - salsa20_done(&st); - return err; -} - -#endif /* LTC_SALSA20 */ diff --git a/src/stream/salsa20/salsa20_setup.c b/src/stream/salsa20/salsa20_setup.c deleted file mode 100644 index e7c9f2d1..00000000 --- a/src/stream/salsa20/salsa20_setup.c +++ /dev/null @@ -1,58 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * "Salsa20 specification", http://cr.yp.to/snuffle/spec.pdf - * and salsa20-ref.c version 20051118 - * Public domain from D. J. Bernstein - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SALSA20 - -/** - Initialize an Salsa20 context (only the key) - @param st [out] The destination of the Salsa20 state - @param key The secret key - @param keylen The length of the secret key (octets) - @param rounds Number of rounds (e.g. 20 for Salsa20) - @return CRYPT_OK if successful -*/ -int salsa20_setup(salsa20_state *st, const unsigned char *key, unsigned long keylen, int rounds) -{ - const char * const sigma = "expand 32-byte k"; - const char * const tau = "expand 16-byte k"; - const char *constants; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(keylen == 32 || keylen == 16); - - if (rounds == 0) rounds = 20; - LTC_ARGCHK(rounds % 2 == 0); /* number of rounds must be evenly divisible by 2 */ - - LOAD32L(st->input[1], key + 0); - LOAD32L(st->input[2], key + 4); - LOAD32L(st->input[3], key + 8); - LOAD32L(st->input[4], key + 12); - if (keylen == 32) { /* 256bit */ - key += 16; - constants = sigma; - } else { /* 128bit */ - constants = tau; - } - LOAD32L(st->input[11], key + 0); - LOAD32L(st->input[12], key + 4); - LOAD32L(st->input[13], key + 8); - LOAD32L(st->input[14], key + 12); - LOAD32L(st->input[ 0], constants + 0); - LOAD32L(st->input[ 5], constants + 4); - LOAD32L(st->input[10], constants + 8); - LOAD32L(st->input[15], constants + 12); - st->rounds = rounds; /* default is 20 for salsa20 */ - st->ivlen = 0; /* will be set later by salsa20_ivctr(32|64) */ - return CRYPT_OK; -} - -#endif diff --git a/src/stream/salsa20/salsa20_test.c b/src/stream/salsa20/salsa20_test.c deleted file mode 100644 index cebc2f67..00000000 --- a/src/stream/salsa20/salsa20_test.c +++ /dev/null @@ -1,86 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * "Salsa20 specification", http://cr.yp.to/snuffle/spec.pdf - * and salsa20-ref.c version 20051118 - * Public domain from D. J. Bernstein - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SALSA20 - -int salsa20_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - salsa20_state st; - unsigned char k[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }; - unsigned char n[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a }; - unsigned char ct[] = { 0x37, 0x37, 0x2e, 0x60, 0xb8, 0xae, 0x88, 0x1f, 0xf8, 0xdf, 0x00, 0x26, 0x6c, 0x30, 0x34, 0x2d, - 0xa1, 0xd7, 0x79, 0x60, 0x67, 0x72, 0xe0, 0x67, 0x26, 0x22, 0xad, 0x00, 0x9e, 0xd5, 0x59, 0x44, - 0x51, 0xd9, 0xe6, 0xaa, 0xc9, 0x59, 0x9e, 0x60, 0xff, 0x87, 0x90, 0xc1, 0xc9, 0x1e }; - unsigned char ct2[] = { 0xec, 0x06, 0x32, 0xb3, 0x83, 0x5c, 0xae, 0x91, 0x01, 0x82, 0x7a, 0x71, 0xd9, 0x7d, 0x45, 0xd7, - 0xa6, 0x5b, 0xa0, 0x89, 0x9d, 0xd2, 0x6c, 0xaa, 0xbb, 0x2f, 0x5f, 0x30, 0x89, 0x54, 0xff, 0x3e, - 0x83, 0xc3, 0x34, 0x10, 0xb6, 0xe1, 0xab, 0xe7, 0xf5, 0xab, 0xab, 0xed, 0xa4, 0xff }; - char pt[] = "Kilroy was here, and there. ...and everywhere!"; /* len = 46 bytes */ - unsigned long len; - unsigned char out[1000]; - int counter; - int rounds; - int err; - len = XSTRLEN(pt); - - /* crypt piece by piece */ - counter = 0; - rounds = 12; - if ((err = salsa20_setup(&st, k, sizeof(k), rounds)) != CRYPT_OK) return err; - if ((err = salsa20_ivctr64(&st, n, sizeof(n), counter)) != CRYPT_OK) return err; - if ((err = salsa20_crypt(&st, (unsigned char*)pt, 5, out)) != CRYPT_OK) return err; - if ((err = salsa20_crypt(&st, (unsigned char*)pt + 5, 25, out + 5)) != CRYPT_OK) return err; - if ((err = salsa20_crypt(&st, (unsigned char*)pt + 30, 10, out + 30)) != CRYPT_OK) return err; - if ((err = salsa20_crypt(&st, (unsigned char*)pt + 40, len - 40, out + 40)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, len, ct, sizeof(ct), "SALSA20-TV1", 1)) return CRYPT_FAIL_TESTVECTOR; - - /* crypt in one go - using salsa20_ivctr64() */ - counter = 0; - rounds = 20; - if ((err = salsa20_setup(&st, k, sizeof(k), rounds)) != CRYPT_OK) return err; - if ((err = salsa20_ivctr64(&st, n, sizeof(n), counter)) != CRYPT_OK) return err; - if ((err = salsa20_crypt(&st, (unsigned char*)pt, len, out)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, len, ct2, sizeof(ct2), "SALSA20-TV2", 1)) return CRYPT_FAIL_TESTVECTOR; - - /* crypt in a single call */ - if ((err = salsa20_memory(k, sizeof(k), rounds, n, sizeof(n), counter, - (unsigned char*)pt, len, out)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, len, ct2, sizeof(ct2), "SALSA20-TV3", 1)) return CRYPT_FAIL_TESTVECTOR; - - { - /* keystream - * http://www.ecrypt.eu.org/stream/svn/viewcvs.cgi/ecrypt/trunk/submissions/salsa20/full/verified.test-vectors?rev=161&view=markup - * Set 6, vector 0 - */ - unsigned char k3[] = { 0x00, 0x53, 0xA6, 0xF9, 0x4C, 0x9F, 0xF2, 0x45, 0x98, 0xEB, 0x3E, 0x91, 0xE4, 0x37, 0x8A, 0xDD, - 0x30, 0x83, 0xD6, 0x29, 0x7C, 0xCF, 0x22, 0x75, 0xC8, 0x1B, 0x6E, 0xC1, 0x14, 0x67, 0xBA, 0x0D }; - unsigned char n3[] = { 0x0D, 0x74, 0xDB, 0x42, 0xA9, 0x10, 0x77, 0xDE }; - unsigned char ct3[] = { 0xF5, 0xFA, 0xD5, 0x3F, 0x79, 0xF9, 0xDF, 0x58, 0xC4, 0xAE, 0xA0, 0xD0, 0xED, 0x9A, 0x96, 0x01, - 0xF2, 0x78, 0x11, 0x2C, 0xA7, 0x18, 0x0D, 0x56, 0x5B, 0x42, 0x0A, 0x48, 0x01, 0x96, 0x70, 0xEA, - 0xF2, 0x4C, 0xE4, 0x93, 0xA8, 0x62, 0x63, 0xF6, 0x77, 0xB4, 0x6A, 0xCE, 0x19, 0x24, 0x77, 0x3D, - 0x2B, 0xB2, 0x55, 0x71, 0xE1, 0xAA, 0x85, 0x93, 0x75, 0x8F, 0xC3, 0x82, 0xB1, 0x28, 0x0B, 0x71 }; - int counter3 = 0; - int rounds3 = 20; - if ((err = salsa20_setup(&st, k3, sizeof(k3), rounds3)) != CRYPT_OK) return err; - if ((err = salsa20_ivctr64(&st, n3, sizeof(n3), counter3)) != CRYPT_OK) return err; - if ((err = salsa20_keystream(&st, out, 64)) != CRYPT_OK) return err; - if ((err = salsa20_done(&st)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, 64, ct3, sizeof(ct3), "SALSA20-TV4", 1)) return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/stream/salsa20/xsalsa20_memory.c b/src/stream/salsa20/xsalsa20_memory.c deleted file mode 100644 index 1908cd56..00000000 --- a/src/stream/salsa20/xsalsa20_memory.c +++ /dev/null @@ -1,34 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_XSALSA20 - -/** - Encrypt (or decrypt) bytes of ciphertext (or plaintext) with XSalsa20 - @param key The key - @param keylen The key length - @param nonce The initial vector - @param noncelen The initial vector length - @param datain The plaintext (or ciphertext) - @param datalen The length of the input and output (octets) - @param rounds The number of rounds - @param dataout [out] The ciphertext (or plaintext) - @return CRYPT_OK if successful -*/ -int xsalsa20_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds, - const unsigned char *nonce, unsigned long noncelen, - const unsigned char *datain, unsigned long datalen, unsigned char *dataout) -{ - salsa20_state st; - int err; - - if ((err = xsalsa20_setup(&st, key, keylen, nonce, noncelen, rounds)) != CRYPT_OK) goto WIPE_KEY; - err = salsa20_crypt(&st, datain, datalen, dataout); -WIPE_KEY: - salsa20_done(&st); - return err; -} - -#endif /* LTC_XSALSA20 */ diff --git a/src/stream/salsa20/xsalsa20_setup.c b/src/stream/salsa20/xsalsa20_setup.c deleted file mode 100644 index c764a896..00000000 --- a/src/stream/salsa20/xsalsa20_setup.c +++ /dev/null @@ -1,126 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * "Extending the Salsa20 nonce", https://cr.yp.to/snuffle/xsalsa-20081128.pdf - * "Salsa20 specification", http://cr.yp.to/snuffle/spec.pdf - * and salsa20-ref.c version 20051118 - * Public domain from D. J. Bernstein - */ - -#include "tomcrypt.h" - -#ifdef LTC_XSALSA20 - -#define QUARTERROUND(a,b,c,d) \ - x[b] ^= (ROL((x[a] + x[d]), 7)); \ - x[c] ^= (ROL((x[b] + x[a]), 9)); \ - x[d] ^= (ROL((x[c] + x[b]), 13)); \ - x[a] ^= (ROL((x[d] + x[c]), 18)); - -/* use modified salsa20 doubleround (no final addition as in salsa20) */ -static void s_xsalsa20_doubleround(ulong32 *x, int rounds) -{ - int i; - - for (i = rounds; i > 0; i -= 2) { - /* columnround */ - QUARTERROUND( 0, 4, 8,12) - QUARTERROUND( 5, 9,13, 1) - QUARTERROUND(10,14, 2, 6) - QUARTERROUND(15, 3, 7,11) - /* rowround */ - QUARTERROUND( 0, 1, 2, 3) - QUARTERROUND( 5, 6, 7, 4) - QUARTERROUND(10,11, 8, 9) - QUARTERROUND(15,12,13,14) - } -} - -#undef QUARTERROUND - -/** - Initialize an XSalsa20 context - @param st [out] The destination of the XSalsa20 state - @param key The secret key - @param keylen The length of the secret key, must be 32 (octets) - @param nonce The nonce - @param noncelen The length of the nonce, must be 24 (octets) - @param rounds Number of rounds (must be evenly divisible by 2, default is 20) - @return CRYPT_OK if successful -*/ -int xsalsa20_setup(salsa20_state *st, const unsigned char *key, unsigned long keylen, - const unsigned char *nonce, unsigned long noncelen, - int rounds) -{ - const char * const constants = "expand 32-byte k"; - const int sti[] = {0, 5, 10, 15, 6, 7, 8, 9}; /* indices used to build subkey fm x */ - ulong32 x[64]; /* input to & output fm doubleround */ - unsigned char subkey[32]; - int i; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(keylen == 32); - LTC_ARGCHK(nonce != NULL); - LTC_ARGCHK(noncelen == 24); - if (rounds == 0) rounds = 20; - LTC_ARGCHK(rounds % 2 == 0); /* number of rounds must be evenly divisible by 2 */ - - /* load the state to "hash" the key */ - LOAD32L(x[ 0], constants + 0); - LOAD32L(x[ 5], constants + 4); - LOAD32L(x[10], constants + 8); - LOAD32L(x[15], constants + 12); - LOAD32L(x[ 1], key + 0); - LOAD32L(x[ 2], key + 4); - LOAD32L(x[ 3], key + 8); - LOAD32L(x[ 4], key + 12); - LOAD32L(x[11], key + 16); - LOAD32L(x[12], key + 20); - LOAD32L(x[13], key + 24); - LOAD32L(x[14], key + 28); - LOAD32L(x[ 6], nonce + 0); - LOAD32L(x[ 7], nonce + 4); - LOAD32L(x[ 8], nonce + 8); - LOAD32L(x[ 9], nonce + 12); - - /* use modified salsa20 doubleround (no final addition) */ - s_xsalsa20_doubleround(x, rounds); - - /* extract the subkey */ - for (i = 0; i < 8; ++i) { - STORE32L(x[sti[i]], subkey + 4 * i); - } - - /* load the final initial state */ - LOAD32L(st->input[ 0], constants + 0); - LOAD32L(st->input[ 5], constants + 4); - LOAD32L(st->input[10], constants + 8); - LOAD32L(st->input[15], constants + 12); - LOAD32L(st->input[ 1], subkey + 0); - LOAD32L(st->input[ 2], subkey + 4); - LOAD32L(st->input[ 3], subkey + 8); - LOAD32L(st->input[ 4], subkey + 12); - LOAD32L(st->input[11], subkey + 16); - LOAD32L(st->input[12], subkey + 20); - LOAD32L(st->input[13], subkey + 24); - LOAD32L(st->input[14], subkey + 28); - LOAD32L(st->input[ 6], &(nonce[16]) + 0); - LOAD32L(st->input[ 7], &(nonce[16]) + 4); - st->input[ 8] = 0; - st->input[ 9] = 0; - st->rounds = rounds; - st->ksleft = 0; - st->ivlen = 24; /* set switch to say nonce/IV has been loaded */ - -#ifdef LTC_CLEAN_STACK - zeromem(x, sizeof(x)); - zeromem(subkey, sizeof(subkey)); -#endif - - return CRYPT_OK; -} - - -#endif diff --git a/src/stream/salsa20/xsalsa20_test.c b/src/stream/salsa20/xsalsa20_test.c deleted file mode 100644 index a267cdaa..00000000 --- a/src/stream/salsa20/xsalsa20_test.c +++ /dev/null @@ -1,90 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* The implementation is based on: - * "Extending the Salsa20 nonce", https://cr.yp.to/snuffle/xsalsa-20081128.pdf - * "Salsa20 specification", http://cr.yp.to/snuffle/spec.pdf - * and salsa20-ref.c version 20051118 - * Public domain from D. J. Bernstein - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_XSALSA20 - -#if defined(LTC_SHA256) && defined(LTC_TEST) -static int s_sha256(unsigned char *hash, const unsigned char *data, const int datalen) { - hash_state md; - sha256_init(&md); - sha256_process(&md, data, datalen); - sha256_done(&md, hash); - return CRYPT_OK; -} -#endif - -int xsalsa20_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - - /*************************************************************************** - * verify a round trip: - */ - { - const unsigned char key[] = {0x1b,0x27,0x55,0x64,0x73,0xe9,0x85,0xd4,0x62,0xcd,0x51,0x19,0x7a,0x9a,0x46,0xc7,0x60,0x09,0x54,0x9e,0xac,0x64,0x74,0xf2,0x06,0xc4,0xee,0x08,0x44,0xf6,0x83,0x89}; - const unsigned char nonce[] = {0x69,0x69,0x6e,0xe9,0x55,0xb6,0x2b,0x73,0xcd,0x62,0xbd,0xa8,0x75,0xfc,0x73,0xd6,0x82,0x19,0xe0,0x03,0x6b,0x7a,0x0b,0x37}; - const void *msg = "Kilroy was here!"; - unsigned char msglen = 17; /* includes trailing NULL */ - int rounds = 20; - unsigned char ciphertext[17]; - unsigned char msg2[17]; - salsa20_state st; - int err; - - if ((err = xsalsa20_setup(&st, key, 32, nonce, 24, rounds)) != CRYPT_OK) return err; - if ((err = salsa20_crypt(&st, msg, msglen, ciphertext)) != CRYPT_OK) return err; - if ((err = salsa20_done(&st)) != CRYPT_OK) return err; - - if ((err = xsalsa20_setup(&st, key, 32, nonce, 24, rounds)) != CRYPT_OK) return err; - if ((err = salsa20_crypt(&st, ciphertext, msglen, msg2)) != CRYPT_OK) return err; - if ((err = salsa20_done(&st)) != CRYPT_OK) return err; - - if (ltc_compare_testvector(msg, msglen, msg2, msglen, "XSALSA20-TV1", 1)) return CRYPT_FAIL_TESTVECTOR; - - - /* round trip with two single function calls */ - if ((err = xsalsa20_memory(key, sizeof(key), 20, nonce, sizeof(nonce), msg, msglen, ciphertext)) != CRYPT_OK) return err; - if ((err = xsalsa20_memory(key, sizeof(key), 20, nonce, sizeof(nonce), ciphertext, msglen, msg2)) != CRYPT_OK) return err; - if (ltc_compare_testvector(msg, msglen, msg2, msglen, "XSALSA20-TV2", 1)) return CRYPT_FAIL_TESTVECTOR; - } - -#ifdef LTC_SHA256 - /*************************************************************************** - * verify correct generation of a keystream - */ - { - const unsigned char key[] = {0x1b,0x27,0x55,0x64,0x73,0xe9,0x85,0xd4,0x62,0xcd,0x51,0x19,0x7a,0x9a,0x46,0xc7,0x60,0x09,0x54,0x9e,0xac,0x64,0x74,0xf2,0x06,0xc4,0xee,0x08,0x44,0xf6,0x83,0x89}; - const unsigned char nonce[] = {0x69,0x69,0x6e,0xe9,0x55,0xb6,0x2b,0x73,0xcd,0x62,0xbd,0xa8,0x75,0xfc,0x73,0xd6,0x82,0x19,0xe0,0x03,0x6b,0x7a,0x0b,0x37}; - const unsigned char expecthash[] = {0x6a,0x60,0x57,0x65,0x27,0xe0,0x00,0x51,0x6d,0xb0,0xda,0x60,0x46,0x20,0xf6,0xd0,0x95,0x65,0x45,0x39,0xf4,0x86,0x83,0x43,0x64,0xdf,0xd9,0x5a,0x6f,0x3f,0xbe,0xb7}; - int rounds = 20; - unsigned char keystream[91101]; - unsigned long keystreamlen = 91101; - unsigned char hash[32]; - salsa20_state st; - int err; - - if ((err = xsalsa20_setup(&st, key, 32, nonce, 24, rounds)) != CRYPT_OK) return err; - if ((err = salsa20_keystream(&st, keystream, keystreamlen)) != CRYPT_OK) return err; - if ((err = salsa20_done(&st)) != CRYPT_OK) return err; - if ((err = s_sha256(hash, keystream, keystreamlen)) != CRYPT_OK) return err; - if (ltc_compare_testvector(hash, sizeof(hash), expecthash, sizeof(expecthash), "XSALSA20-TV3", 1)) return CRYPT_FAIL_TESTVECTOR; - } -#endif - - return CRYPT_OK; - -#endif -} - -#endif diff --git a/src/stream/sober128/sober128_stream.c b/src/stream/sober128/sober128_stream.c deleted file mode 100644 index ab1a7aab..00000000 --- a/src/stream/sober128/sober128_stream.c +++ /dev/null @@ -1,347 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -/** - @file sober128_stream.c - Implementation of SOBER-128 by Tom St Denis. - Based on s128fast.c reference code supplied by Greg Rose of QUALCOMM. -*/ - -#ifdef LTC_SOBER128 - -#ifndef LTC_SOBER128TAB_C -#define LTC_SOBER128TAB_C -#include "sober128tab.c" -#endif - -/* don't change these... */ -#define N 17 -#define INITKONST 0x6996c53a /* value of KONST to use during key loading */ -#define KEYP 15 /* where to insert key words */ -#define FOLDP 4 /* where to insert non-linear feedback */ - -static ulong32 BYTE2WORD(const unsigned char *b) -{ - ulong32 t; - LOAD32L(t, b); - return t; -} - -static void XORWORD(ulong32 w, const unsigned char *in, unsigned char *out) -{ - ulong32 t; - LOAD32L(t, in); - t ^= w; - STORE32L(t, out); -} - -/* give correct offset for the current position of the register, - * where logically R[0] is at position "zero". - */ -#define OFF(zero, i) (((zero)+(i)) % N) - -/* step the LFSR */ -/* After stepping, "zero" moves right one place */ -#define STEP(R,z) \ - R[OFF(z,0)] = R[OFF(z,15)] ^ R[OFF(z,4)] ^ (R[OFF(z,0)] << 8) ^ Multab[(R[OFF(z,0)] >> 24) & 0xFF]; - -static void cycle(ulong32 *R) -{ - ulong32 t; - int i; - - STEP(R,0); - t = R[0]; - for (i = 1; i < N; ++i) { - R[i-1] = R[i]; - } - R[N-1] = t; -} - -/* Return a non-linear function of some parts of the register. - */ -#define NLFUNC(st,z) \ -{ \ - t = st->R[OFF(z,0)] + st->R[OFF(z,16)]; \ - t ^= Sbox[(t >> 24) & 0xFF]; \ - t = RORc(t, 8); \ - t = ((t + st->R[OFF(z,1)]) ^ st->konst) + st->R[OFF(z,6)]; \ - t ^= Sbox[(t >> 24) & 0xFF]; \ - t = t + st->R[OFF(z,13)]; \ -} - -static ulong32 nltap(const sober128_state *st) -{ - ulong32 t; - NLFUNC(st, 0); - return t; -} - -/* Save the current register state - */ -static void s128_savestate(sober128_state *st) -{ - int i; - for (i = 0; i < N; ++i) { - st->initR[i] = st->R[i]; - } -} - -/* initialise to previously saved register state - */ -static void s128_reloadstate(sober128_state *st) -{ - int i; - - for (i = 0; i < N; ++i) { - st->R[i] = st->initR[i]; - } -} - -/* Initialise "konst" - */ -static void s128_genkonst(sober128_state *st) -{ - ulong32 newkonst; - - do { - cycle(st->R); - newkonst = nltap(st); - } while ((newkonst & 0xFF000000) == 0); - st->konst = newkonst; -} - -/* Load key material into the register - */ -#define ADDKEY(k) \ - st->R[KEYP] += (k); - -#define XORNL(nl) \ - st->R[FOLDP] ^= (nl); - -/* nonlinear diffusion of register for key */ -#define DROUND(z) STEP(st->R,z); NLFUNC(st,(z+1)); st->R[OFF((z+1),FOLDP)] ^= t; -static void s128_diffuse(sober128_state *st) -{ - ulong32 t; - /* relies on FOLD == N == 17! */ - DROUND(0); - DROUND(1); - DROUND(2); - DROUND(3); - DROUND(4); - DROUND(5); - DROUND(6); - DROUND(7); - DROUND(8); - DROUND(9); - DROUND(10); - DROUND(11); - DROUND(12); - DROUND(13); - DROUND(14); - DROUND(15); - DROUND(16); -} - -/** - Initialize an Sober128 context (only the key) - @param st [out] The destination of the Sober128 state - @param key The secret key - @param keylen The length of the secret key (octets) - @return CRYPT_OK if successful -*/ -int sober128_stream_setup(sober128_state *st, const unsigned char *key, unsigned long keylen) -{ - ulong32 i, k; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(keylen > 0); - - /* keylen must be multiple of 4 bytes */ - if ((keylen & 3) != 0) { - return CRYPT_INVALID_KEYSIZE; - } - - /* Register initialised to Fibonacci numbers */ - st->R[0] = 1; - st->R[1] = 1; - for (i = 2; i < N; ++i) { - st->R[i] = st->R[i-1] + st->R[i-2]; - } - st->konst = INITKONST; - - for (i = 0; i < keylen; i += 4) { - k = BYTE2WORD(&key[i]); - ADDKEY(k); - cycle(st->R); - XORNL(nltap(st)); - } - - /* also fold in the length of the key */ - ADDKEY(keylen); - - /* now diffuse */ - s128_diffuse(st); - s128_genkonst(st); - s128_savestate(st); - st->nbuf = 0; - - return CRYPT_OK; -} - -/** - Set IV to the Sober128 state - @param st The Sober12820 state - @param iv The IV data to add - @param ivlen The length of the IV (must be 12) - @return CRYPT_OK on success - */ -int sober128_stream_setiv(sober128_state *st, const unsigned char *iv, unsigned long ivlen) -{ - ulong32 i, k; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(iv != NULL); - LTC_ARGCHK(ivlen > 0); - - /* ok we are adding an IV then... */ - s128_reloadstate(st); - - /* ivlen must be multiple of 4 bytes */ - if ((ivlen & 3) != 0) { - return CRYPT_INVALID_KEYSIZE; - } - - for (i = 0; i < ivlen; i += 4) { - k = BYTE2WORD(&iv[i]); - ADDKEY(k); - cycle(st->R); - XORNL(nltap(st)); - } - - /* also fold in the length of the key */ - ADDKEY(ivlen); - - /* now diffuse */ - s128_diffuse(st); - st->nbuf = 0; - - return CRYPT_OK; -} - -/* XOR pseudo-random bytes into buffer - */ -#define SROUND(z) STEP(st->R,z); NLFUNC(st,(z+1)); XORWORD(t, in+(z*4), out+(z*4)); - -/** - Encrypt (or decrypt) bytes of ciphertext (or plaintext) with Sober128 - @param st The Sober128 state - @param in The plaintext (or ciphertext) - @param inlen The length of the input (octets) - @param out [out] The ciphertext (or plaintext), length inlen - @return CRYPT_OK if successful -*/ -int sober128_stream_crypt(sober128_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out) -{ - ulong32 t; - - if (inlen == 0) return CRYPT_OK; /* nothing to do */ - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(st != NULL); - - /* handle any previously buffered bytes */ - while (st->nbuf != 0 && inlen != 0) { - *out++ = *in++ ^ (unsigned char)(st->sbuf & 0xFF); - st->sbuf >>= 8; - st->nbuf -= 8; - --inlen; - } - -#ifndef LTC_SMALL_CODE - /* do lots at a time, if there's enough to do */ - while (inlen >= N*4) { - SROUND(0); - SROUND(1); - SROUND(2); - SROUND(3); - SROUND(4); - SROUND(5); - SROUND(6); - SROUND(7); - SROUND(8); - SROUND(9); - SROUND(10); - SROUND(11); - SROUND(12); - SROUND(13); - SROUND(14); - SROUND(15); - SROUND(16); - out += 4*N; - in += 4*N; - inlen -= 4*N; - } -#endif - - /* do small or odd size buffers the slow way */ - while (4 <= inlen) { - cycle(st->R); - t = nltap(st); - XORWORD(t, in, out); - out += 4; - in += 4; - inlen -= 4; - } - - /* handle any trailing bytes */ - if (inlen != 0) { - cycle(st->R); - st->sbuf = nltap(st); - st->nbuf = 32; - while (st->nbuf != 0 && inlen != 0) { - *out++ = *in++ ^ (unsigned char)(st->sbuf & 0xFF); - st->sbuf >>= 8; - st->nbuf -= 8; - --inlen; - } - } - - return CRYPT_OK; -} - -int sober128_stream_keystream(sober128_state *st, unsigned char *out, unsigned long outlen) -{ - if (outlen == 0) return CRYPT_OK; /* nothing to do */ - LTC_ARGCHK(out != NULL); - XMEMSET(out, 0, outlen); - return sober128_stream_crypt(st, out, outlen, out); -} - -/** - Terminate and clear Sober128 state - @param st The Sober128 state - @return CRYPT_OK on success -*/ -int sober128_stream_done(sober128_state *st) -{ - LTC_ARGCHK(st != NULL); - zeromem(st, sizeof(sober128_state)); - return CRYPT_OK; -} - -#undef N -#undef INITKONST -#undef KEYP -#undef FOLDP -#undef OFF -#undef STEP -#undef NLFUNC -#undef ADDKEY -#undef XORNL -#undef DROUND -#undef SROUND - -#endif diff --git a/src/stream/sober128/sober128_stream_memory.c b/src/stream/sober128/sober128_stream_memory.c deleted file mode 100644 index 5150b820..00000000 --- a/src/stream/sober128/sober128_stream_memory.c +++ /dev/null @@ -1,35 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SOBER128_STREAM - -/** - Encrypt (or decrypt) bytes of ciphertext (or plaintext) with SOBER128 - @param key The key - @param keylen The key length - @param iv The initial vector - @param ivlen The initial vector length - @param datain The plaintext (or ciphertext) - @param datalen The length of the input and output (octets) - @param dataout [out] The ciphertext (or plaintext) - @return CRYPT_OK if successful -*/ -int sober128_stream_memory(const unsigned char *key, unsigned long keylen, - const unsigned char *iv, unsigned long ivlen, - const unsigned char *datain, unsigned long datalen, - unsigned char *dataout) -{ - sober128_state st; - int err; - - if ((err = sober128_stream_setup(&st, key, keylen)) != CRYPT_OK) goto WIPE_KEY; - if ((err = sober128_stream_setiv(&st, iv, ivlen)) != CRYPT_OK) goto WIPE_KEY; - err = sober128_stream_crypt(&st, datain, datalen, dataout); -WIPE_KEY: - sober128_stream_done(&st); - return err; -} - -#endif /* LTC_SOBER128_STREAM */ diff --git a/src/stream/sober128/sober128_test.c b/src/stream/sober128/sober128_test.c deleted file mode 100644 index e161cbfb..00000000 --- a/src/stream/sober128/sober128_test.c +++ /dev/null @@ -1,43 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SOBER128 - -int sober128_stream_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - unsigned char key[16] = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6b, 0x65, 0x79, - 0x20, 0x31, 0x32, 0x38, 0x62, 0x69, 0x74, 0x73 }; - unsigned char iv[4] = { 0x00, 0x00, 0x00, 0x00 }; - unsigned char out[20] = { 0x43, 0x50, 0x0c, 0xcf, 0x89, 0x91, 0x9f, 0x1d, - 0xaa, 0x37, 0x74, 0x95, 0xf4, 0xb4, 0x58, 0xc2, - 0x40, 0x37, 0x8b, 0xbb }; - int err, len = 20; - unsigned char src[20], dst[20]; - sober128_state st; - - XMEMSET(src, 0, len); /* input */ - if ((err = sober128_stream_setup(&st, key, sizeof(key))) != CRYPT_OK) return err; - if ((err = sober128_stream_setiv(&st, iv, sizeof(iv))) != CRYPT_OK) return err; - if ((err = sober128_stream_crypt(&st, src, len, dst)) != CRYPT_OK) return err; - if ((err = sober128_stream_done(&st)) != CRYPT_OK) return err; - if (ltc_compare_testvector(dst, len, out, len, "SOBER-128-TV1", 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - - /* crypt in a single call */ - if ((err = sober128_stream_memory(key, sizeof(key), iv, sizeof(iv), - src, len, dst)) != CRYPT_OK) return err; - if (ltc_compare_testvector(dst, len, out, len, "SOBER-128-TV2", 0)) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -#endif diff --git a/src/stream/sober128/sober128tab.c b/src/stream/sober128/sober128tab.c deleted file mode 100644 index b3ae8260..00000000 --- a/src/stream/sober128/sober128tab.c +++ /dev/null @@ -1,166 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file sober128tab.c - SOBER-128 Tables -*/ - -#if defined(LTC_SOBER128) && defined(LTC_SOBER128TAB_C) - -/* $ID$ */ -/* @(#)TuringMultab.h 1.3 (QUALCOMM) 02/09/03 */ -/* Multiplication table for Turing using 0xD02B4367 */ -static const ulong32 Multab[256] = { - 0x00000000, 0xD02B4367, 0xED5686CE, 0x3D7DC5A9, - 0x97AC41D1, 0x478702B6, 0x7AFAC71F, 0xAAD18478, - 0x631582EF, 0xB33EC188, 0x8E430421, 0x5E684746, - 0xF4B9C33E, 0x24928059, 0x19EF45F0, 0xC9C40697, - 0xC62A4993, 0x16010AF4, 0x2B7CCF5D, 0xFB578C3A, - 0x51860842, 0x81AD4B25, 0xBCD08E8C, 0x6CFBCDEB, - 0xA53FCB7C, 0x7514881B, 0x48694DB2, 0x98420ED5, - 0x32938AAD, 0xE2B8C9CA, 0xDFC50C63, 0x0FEE4F04, - 0xC154926B, 0x117FD10C, 0x2C0214A5, 0xFC2957C2, - 0x56F8D3BA, 0x86D390DD, 0xBBAE5574, 0x6B851613, - 0xA2411084, 0x726A53E3, 0x4F17964A, 0x9F3CD52D, - 0x35ED5155, 0xE5C61232, 0xD8BBD79B, 0x089094FC, - 0x077EDBF8, 0xD755989F, 0xEA285D36, 0x3A031E51, - 0x90D29A29, 0x40F9D94E, 0x7D841CE7, 0xADAF5F80, - 0x646B5917, 0xB4401A70, 0x893DDFD9, 0x59169CBE, - 0xF3C718C6, 0x23EC5BA1, 0x1E919E08, 0xCEBADD6F, - 0xCFA869D6, 0x1F832AB1, 0x22FEEF18, 0xF2D5AC7F, - 0x58042807, 0x882F6B60, 0xB552AEC9, 0x6579EDAE, - 0xACBDEB39, 0x7C96A85E, 0x41EB6DF7, 0x91C02E90, - 0x3B11AAE8, 0xEB3AE98F, 0xD6472C26, 0x066C6F41, - 0x09822045, 0xD9A96322, 0xE4D4A68B, 0x34FFE5EC, - 0x9E2E6194, 0x4E0522F3, 0x7378E75A, 0xA353A43D, - 0x6A97A2AA, 0xBABCE1CD, 0x87C12464, 0x57EA6703, - 0xFD3BE37B, 0x2D10A01C, 0x106D65B5, 0xC04626D2, - 0x0EFCFBBD, 0xDED7B8DA, 0xE3AA7D73, 0x33813E14, - 0x9950BA6C, 0x497BF90B, 0x74063CA2, 0xA42D7FC5, - 0x6DE97952, 0xBDC23A35, 0x80BFFF9C, 0x5094BCFB, - 0xFA453883, 0x2A6E7BE4, 0x1713BE4D, 0xC738FD2A, - 0xC8D6B22E, 0x18FDF149, 0x258034E0, 0xF5AB7787, - 0x5F7AF3FF, 0x8F51B098, 0xB22C7531, 0x62073656, - 0xABC330C1, 0x7BE873A6, 0x4695B60F, 0x96BEF568, - 0x3C6F7110, 0xEC443277, 0xD139F7DE, 0x0112B4B9, - 0xD31DD2E1, 0x03369186, 0x3E4B542F, 0xEE601748, - 0x44B19330, 0x949AD057, 0xA9E715FE, 0x79CC5699, - 0xB008500E, 0x60231369, 0x5D5ED6C0, 0x8D7595A7, - 0x27A411DF, 0xF78F52B8, 0xCAF29711, 0x1AD9D476, - 0x15379B72, 0xC51CD815, 0xF8611DBC, 0x284A5EDB, - 0x829BDAA3, 0x52B099C4, 0x6FCD5C6D, 0xBFE61F0A, - 0x7622199D, 0xA6095AFA, 0x9B749F53, 0x4B5FDC34, - 0xE18E584C, 0x31A51B2B, 0x0CD8DE82, 0xDCF39DE5, - 0x1249408A, 0xC26203ED, 0xFF1FC644, 0x2F348523, - 0x85E5015B, 0x55CE423C, 0x68B38795, 0xB898C4F2, - 0x715CC265, 0xA1778102, 0x9C0A44AB, 0x4C2107CC, - 0xE6F083B4, 0x36DBC0D3, 0x0BA6057A, 0xDB8D461D, - 0xD4630919, 0x04484A7E, 0x39358FD7, 0xE91ECCB0, - 0x43CF48C8, 0x93E40BAF, 0xAE99CE06, 0x7EB28D61, - 0xB7768BF6, 0x675DC891, 0x5A200D38, 0x8A0B4E5F, - 0x20DACA27, 0xF0F18940, 0xCD8C4CE9, 0x1DA70F8E, - 0x1CB5BB37, 0xCC9EF850, 0xF1E33DF9, 0x21C87E9E, - 0x8B19FAE6, 0x5B32B981, 0x664F7C28, 0xB6643F4F, - 0x7FA039D8, 0xAF8B7ABF, 0x92F6BF16, 0x42DDFC71, - 0xE80C7809, 0x38273B6E, 0x055AFEC7, 0xD571BDA0, - 0xDA9FF2A4, 0x0AB4B1C3, 0x37C9746A, 0xE7E2370D, - 0x4D33B375, 0x9D18F012, 0xA06535BB, 0x704E76DC, - 0xB98A704B, 0x69A1332C, 0x54DCF685, 0x84F7B5E2, - 0x2E26319A, 0xFE0D72FD, 0xC370B754, 0x135BF433, - 0xDDE1295C, 0x0DCA6A3B, 0x30B7AF92, 0xE09CECF5, - 0x4A4D688D, 0x9A662BEA, 0xA71BEE43, 0x7730AD24, - 0xBEF4ABB3, 0x6EDFE8D4, 0x53A22D7D, 0x83896E1A, - 0x2958EA62, 0xF973A905, 0xC40E6CAC, 0x14252FCB, - 0x1BCB60CF, 0xCBE023A8, 0xF69DE601, 0x26B6A566, - 0x8C67211E, 0x5C4C6279, 0x6131A7D0, 0xB11AE4B7, - 0x78DEE220, 0xA8F5A147, 0x958864EE, 0x45A32789, - 0xEF72A3F1, 0x3F59E096, 0x0224253F, 0xD20F6658, -}; - -/* $ID$ */ -/* Sbox for SOBER-128 */ -/* - * This is really the combination of two SBoxes; the least significant - * 24 bits comes from: - * 8->32 Sbox generated by Millan et. al. at Queensland University of - * Technology. See: E. Dawson, W. Millan, L. Burnett, G. Carter, - * "On the Design of 8*32 S-boxes". Unpublished report, by the - * Information Systems Research Centre, - * Queensland University of Technology, 1999. - * - * The most significant 8 bits are the Skipjack "F table", which can be - * found at http://csrc.nist.gov/CryptoToolkit/skipjack/skipjack.pdf . - * In this optimised table, though, the intent is to XOR the word from - * the table selected by the high byte with the input word. Thus, the - * high byte is actually the Skipjack F-table entry XORED with its - * table index. - */ -static const ulong32 Sbox[256] = { - 0xa3aa1887, 0xd65e435c, 0x0b65c042, 0x800e6ef4, - 0xfc57ee20, 0x4d84fed3, 0xf066c502, 0xf354e8ae, - 0xbb2ee9d9, 0x281f38d4, 0x1f829b5d, 0x735cdf3c, - 0x95864249, 0xbc2e3963, 0xa1f4429f, 0xf6432c35, - 0xf7f40325, 0x3cc0dd70, 0x5f973ded, 0x9902dc5e, - 0xda175b42, 0x590012bf, 0xdc94d78c, 0x39aab26b, - 0x4ac11b9a, 0x8c168146, 0xc3ea8ec5, 0x058ac28f, - 0x52ed5c0f, 0x25b4101c, 0x5a2db082, 0x370929e1, - 0x2a1843de, 0xfe8299fc, 0x202fbc4b, 0x833915dd, - 0x33a803fa, 0xd446b2de, 0x46233342, 0x4fcee7c3, - 0x3ad607ef, 0x9e97ebab, 0x507f859b, 0xe81f2e2f, - 0xc55b71da, 0xd7e2269a, 0x1339c3d1, 0x7ca56b36, - 0xa6c9def2, 0xb5c9fc5f, 0x5927b3a3, 0x89a56ddf, - 0xc625b510, 0x560f85a7, 0xace82e71, 0x2ecb8816, - 0x44951e2a, 0x97f5f6af, 0xdfcbc2b3, 0xce4ff55d, - 0xcb6b6214, 0x2b0b83e3, 0x549ea6f5, 0x9de041af, - 0x792f1f17, 0xf73b99ee, 0x39a65ec0, 0x4c7016c6, - 0x857709a4, 0xd6326e01, 0xc7b280d9, 0x5cfb1418, - 0xa6aff227, 0xfd548203, 0x506b9d96, 0xa117a8c0, - 0x9cd5bf6e, 0xdcee7888, 0x61fcfe64, 0xf7a193cd, - 0x050d0184, 0xe8ae4930, 0x88014f36, 0xd6a87088, - 0x6bad6c2a, 0x1422c678, 0xe9204de7, 0xb7c2e759, - 0x0200248e, 0x013b446b, 0xda0d9fc2, 0x0414a895, - 0x3a6cc3a1, 0x56fef170, 0x86c19155, 0xcf7b8a66, - 0x551b5e69, 0xb4a8623e, 0xa2bdfa35, 0xc4f068cc, - 0x573a6acd, 0x6355e936, 0x03602db9, 0x0edf13c1, - 0x2d0bb16d, 0x6980b83c, 0xfeb23763, 0x3dd8a911, - 0x01b6bc13, 0xf55579d7, 0xf55c2fa8, 0x19f4196e, - 0xe7db5476, 0x8d64a866, 0xc06e16ad, 0xb17fc515, - 0xc46feb3c, 0x8bc8a306, 0xad6799d9, 0x571a9133, - 0x992466dd, 0x92eb5dcd, 0xac118f50, 0x9fafb226, - 0xa1b9cef3, 0x3ab36189, 0x347a19b1, 0x62c73084, - 0xc27ded5c, 0x6c8bc58f, 0x1cdde421, 0xed1e47fb, - 0xcdcc715e, 0xb9c0ff99, 0x4b122f0f, 0xc4d25184, - 0xaf7a5e6c, 0x5bbf18bc, 0x8dd7c6e0, 0x5fb7e420, - 0x521f523f, 0x4ad9b8a2, 0xe9da1a6b, 0x97888c02, - 0x19d1e354, 0x5aba7d79, 0xa2cc7753, 0x8c2d9655, - 0x19829da1, 0x531590a7, 0x19c1c149, 0x3d537f1c, - 0x50779b69, 0xed71f2b7, 0x463c58fa, 0x52dc4418, - 0xc18c8c76, 0xc120d9f0, 0xafa80d4d, 0x3b74c473, - 0xd09410e9, 0x290e4211, 0xc3c8082b, 0x8f6b334a, - 0x3bf68ed2, 0xa843cc1b, 0x8d3c0ff3, 0x20e564a0, - 0xf8f55a4f, 0x2b40f8e7, 0xfea7f15f, 0xcf00fe21, - 0x8a6d37d6, 0xd0d506f1, 0xade00973, 0xefbbde36, - 0x84670fa8, 0xfa31ab9e, 0xaedab618, 0xc01f52f5, - 0x6558eb4f, 0x71b9e343, 0x4b8d77dd, 0x8cb93da6, - 0x740fd52d, 0x425412f8, 0xc5a63360, 0x10e53ad0, - 0x5a700f1c, 0x8324ed0b, 0xe53dc1ec, 0x1a366795, - 0x6d549d15, 0xc5ce46d7, 0xe17abe76, 0x5f48e0a0, - 0xd0f07c02, 0x941249b7, 0xe49ed6ba, 0x37a47f78, - 0xe1cfffbd, 0xb007ca84, 0xbb65f4da, 0xb59f35da, - 0x33d2aa44, 0x417452ac, 0xc0d674a7, 0x2d61a46a, - 0xdc63152a, 0x3e12b7aa, 0x6e615927, 0xa14fb118, - 0xa151758d, 0xba81687b, 0xe152f0b3, 0x764254ed, - 0x34c77271, 0x0a31acab, 0x54f94aec, 0xb9e994cd, - 0x574d9e81, 0x5b623730, 0xce8a21e8, 0x37917f0b, - 0xe8a9b5d6, 0x9697adf8, 0xf3d30431, 0x5dcac921, - 0x76b35d46, 0xaa430a36, 0xc2194022, 0x22bca65e, - 0xdaec70ba, 0xdfaea8cc, 0x777bae8b, 0x242924d5, - 0x1f098a5a, 0x4b396b81, 0x55de2522, 0x435c1cb8, - 0xaeb8fe1d, 0x9db3c697, 0x5b164f83, 0xe0c16376, - 0xa319224c, 0xd0203b35, 0x433ac0fe, 0x1466a19a, - 0x45f0b24f, 0x51fda998, 0xc0d52d71, 0xfa0896a8, - 0xf9e6053f, 0xa4b0d300, 0xd499cbcc, 0xb95e3d40, -}; - -#endif /* LTC_SOBER128TAB_C */ diff --git a/src/stream/sosemanuk/sosemanuk.c b/src/stream/sosemanuk/sosemanuk.c deleted file mode 100644 index 6733450e..00000000 --- a/src/stream/sosemanuk/sosemanuk.c +++ /dev/null @@ -1,807 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/* - * This LTC implementation was adapted from: - * http://www.ecrypt.eu.org/stream/e2-sosemanuk.html - */ - -/* - * SOSEMANUK reference implementation. - * - * This code is supposed to run on any conforming C implementation (C90 - * or later). - * - * (c) 2005 X-CRYPT project. This software is provided 'as-is', without - * any express or implied warranty. In no event will the authors be held - * liable for any damages arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to no restriction. - * - * Technical remarks and questions can be addressed to - * - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SOSEMANUK - -/* ======================================================================== */ - -/* - * We want (and sometimes need) to perform explicit truncations to 32 bits. - */ -#define T32(x) ((x) & (ulong32)0xFFFFFFFF) - -/* - * Some of our functions will be tagged as "inline" to help the compiler - * optimize things. We use "inline" only if the compiler is advanced - * enough to understand it; C99 compilers, and pre-C99 versions of gcc, - * understand enough "inline" for our purposes. - */ - -/* ======================================================================== */ - -/* - * Serpent S-boxes, implemented in bitslice mode. These circuits have - * been published by Dag Arne Osvik ("Speeding up Serpent", published in - * the 3rd AES Candidate Conference) and work on five 32-bit registers: - * the four inputs, and a fifth scratch register. There are meant to be - * quite fast on Pentium-class processors. These are not the fastest - * published, but they are "fast enough" and they are unencumbered as - * far as intellectual property is concerned (note: these are rewritten - * from the article itself, and hence are not covered by the GPL on - * Dag's code, which was not used here). - * - * The output bits are permuted. Here is the correspondance: - * S0: 1420 - * S1: 2031 - * S2: 2314 - * S3: 1234 - * S4: 1403 - * S5: 1302 - * S6: 0142 - * S7: 4310 - * (for instance, the output of S0 is in "r1, r4, r2, r0"). - */ - -#define S0(r0, r1, r2, r3, r4) do { \ - r3 ^= r0; r4 = r1; \ - r1 &= r3; r4 ^= r2; \ - r1 ^= r0; r0 |= r3; \ - r0 ^= r4; r4 ^= r3; \ - r3 ^= r2; r2 |= r1; \ - r2 ^= r4; r4 = ~r4; \ - r4 |= r1; r1 ^= r3; \ - r1 ^= r4; r3 |= r0; \ - r1 ^= r3; r4 ^= r3; \ - } while (0) - -#define S1(r0, r1, r2, r3, r4) do { \ - r0 = ~r0; r2 = ~r2; \ - r4 = r0; r0 &= r1; \ - r2 ^= r0; r0 |= r3; \ - r3 ^= r2; r1 ^= r0; \ - r0 ^= r4; r4 |= r1; \ - r1 ^= r3; r2 |= r0; \ - r2 &= r4; r0 ^= r1; \ - r1 &= r2; \ - r1 ^= r0; r0 &= r2; \ - r0 ^= r4; \ - } while (0) - -#define S2(r0, r1, r2, r3, r4) do { \ - r4 = r0; r0 &= r2; \ - r0 ^= r3; r2 ^= r1; \ - r2 ^= r0; r3 |= r4; \ - r3 ^= r1; r4 ^= r2; \ - r1 = r3; r3 |= r4; \ - r3 ^= r0; r0 &= r1; \ - r4 ^= r0; r1 ^= r3; \ - r1 ^= r4; r4 = ~r4; \ - } while (0) - -#define S3(r0, r1, r2, r3, r4) do { \ - r4 = r0; r0 |= r3; \ - r3 ^= r1; r1 &= r4; \ - r4 ^= r2; r2 ^= r3; \ - r3 &= r0; r4 |= r1; \ - r3 ^= r4; r0 ^= r1; \ - r4 &= r0; r1 ^= r3; \ - r4 ^= r2; r1 |= r0; \ - r1 ^= r2; r0 ^= r3; \ - r2 = r1; r1 |= r3; \ - r1 ^= r0; \ - } while (0) - -#define S4(r0, r1, r2, r3, r4) do { \ - r1 ^= r3; r3 = ~r3; \ - r2 ^= r3; r3 ^= r0; \ - r4 = r1; r1 &= r3; \ - r1 ^= r2; r4 ^= r3; \ - r0 ^= r4; r2 &= r4; \ - r2 ^= r0; r0 &= r1; \ - r3 ^= r0; r4 |= r1; \ - r4 ^= r0; r0 |= r3; \ - r0 ^= r2; r2 &= r3; \ - r0 = ~r0; r4 ^= r2; \ - } while (0) - -#define S5(r0, r1, r2, r3, r4) do { \ - r0 ^= r1; r1 ^= r3; \ - r3 = ~r3; r4 = r1; \ - r1 &= r0; r2 ^= r3; \ - r1 ^= r2; r2 |= r4; \ - r4 ^= r3; r3 &= r1; \ - r3 ^= r0; r4 ^= r1; \ - r4 ^= r2; r2 ^= r0; \ - r0 &= r3; r2 = ~r2; \ - r0 ^= r4; r4 |= r3; \ - r2 ^= r4; \ - } while (0) - -#define S6(r0, r1, r2, r3, r4) do { \ - r2 = ~r2; r4 = r3; \ - r3 &= r0; r0 ^= r4; \ - r3 ^= r2; r2 |= r4; \ - r1 ^= r3; r2 ^= r0; \ - r0 |= r1; r2 ^= r1; \ - r4 ^= r0; r0 |= r3; \ - r0 ^= r2; r4 ^= r3; \ - r4 ^= r0; r3 = ~r3; \ - r2 &= r4; \ - r2 ^= r3; \ - } while (0) - -#define S7(r0, r1, r2, r3, r4) do { \ - r4 = r1; r1 |= r2; \ - r1 ^= r3; r4 ^= r2; \ - r2 ^= r1; r3 |= r4; \ - r3 &= r0; r4 ^= r2; \ - r3 ^= r1; r1 |= r4; \ - r1 ^= r0; r0 |= r4; \ - r0 ^= r2; r1 ^= r4; \ - r2 ^= r1; r1 &= r0; \ - r1 ^= r4; r2 = ~r2; \ - r2 |= r0; \ - r4 ^= r2; \ - } while (0) - -/* - * The Serpent linear transform. - */ -#define SERPENT_LT(x0, x1, x2, x3) do { \ - x0 = ROLc(x0, 13); \ - x2 = ROLc(x2, 3); \ - x1 = x1 ^ x0 ^ x2; \ - x3 = x3 ^ x2 ^ T32(x0 << 3); \ - x1 = ROLc(x1, 1); \ - x3 = ROLc(x3, 7); \ - x0 = x0 ^ x1 ^ x3; \ - x2 = x2 ^ x3 ^ T32(x1 << 7); \ - x0 = ROLc(x0, 5); \ - x2 = ROLc(x2, 22); \ - } while (0) - -/* ======================================================================== */ - -/* - * Initialize Sosemanuk's state by providing a key. The key is an array of - * 1 to 32 bytes. - * @param st The Sosemanuk state - * @param key Key - * @param keylen Length of key in bytes - * @return CRYPT_OK on success - */ -int sosemanuk_setup(sosemanuk_state *st, const unsigned char *key, unsigned long keylen) -{ - /* - * This key schedule is actually a truncated Serpent key schedule. - * The key-derived words (w_i) are computed within the eight - * local variables w0 to w7, which are reused again and again. - */ - -#define SKS(S, o0, o1, o2, o3, d0, d1, d2, d3) do { \ - ulong32 r0, r1, r2, r3, r4; \ - r0 = w ## o0; \ - r1 = w ## o1; \ - r2 = w ## o2; \ - r3 = w ## o3; \ - S(r0, r1, r2, r3, r4); \ - st->kc[i ++] = r ## d0; \ - st->kc[i ++] = r ## d1; \ - st->kc[i ++] = r ## d2; \ - st->kc[i ++] = r ## d3; \ - } while (0) - -#define SKS0 SKS(S0, 4, 5, 6, 7, 1, 4, 2, 0) -#define SKS1 SKS(S1, 0, 1, 2, 3, 2, 0, 3, 1) -#define SKS2 SKS(S2, 4, 5, 6, 7, 2, 3, 1, 4) -#define SKS3 SKS(S3, 0, 1, 2, 3, 1, 2, 3, 4) -#define SKS4 SKS(S4, 4, 5, 6, 7, 1, 4, 0, 3) -#define SKS5 SKS(S5, 0, 1, 2, 3, 1, 3, 0, 2) -#define SKS6 SKS(S6, 4, 5, 6, 7, 0, 1, 4, 2) -#define SKS7 SKS(S7, 0, 1, 2, 3, 4, 3, 1, 0) - -#define WUP(wi, wi5, wi3, wi1, cc) do { \ - ulong32 tt = (wi) ^ (wi5) ^ (wi3) \ - ^ (wi1) ^ (0x9E3779B9 ^ (ulong32)(cc)); \ - (wi) = ROLc(tt, 11); \ - } while (0) - -#define WUP0(cc) do { \ - WUP(w0, w3, w5, w7, cc); \ - WUP(w1, w4, w6, w0, cc + 1); \ - WUP(w2, w5, w7, w1, cc + 2); \ - WUP(w3, w6, w0, w2, cc + 3); \ - } while (0) - -#define WUP1(cc) do { \ - WUP(w4, w7, w1, w3, cc); \ - WUP(w5, w0, w2, w4, cc + 1); \ - WUP(w6, w1, w3, w5, cc + 2); \ - WUP(w7, w2, w4, w6, cc + 3); \ - } while (0) - - unsigned char wbuf[32]; - ulong32 w0, w1, w2, w3, w4, w5, w6, w7; - int i = 0; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(keylen > 0 && keylen <= 32); - - /* - * The key is copied into the wbuf[] buffer and padded to 256 bits - * as described in the Serpent specification. - */ - XMEMCPY(wbuf, key, keylen); - if (keylen < 32) { - wbuf[keylen] = 0x01; - if (keylen < 31) { - XMEMSET(wbuf + keylen + 1, 0, 31 - keylen); - } - } - - LOAD32L(w0, wbuf); - LOAD32L(w1, wbuf + 4); - LOAD32L(w2, wbuf + 8); - LOAD32L(w3, wbuf + 12); - LOAD32L(w4, wbuf + 16); - LOAD32L(w5, wbuf + 20); - LOAD32L(w6, wbuf + 24); - LOAD32L(w7, wbuf + 28); - - WUP0(0); SKS3; - WUP1(4); SKS2; - WUP0(8); SKS1; - WUP1(12); SKS0; - WUP0(16); SKS7; - WUP1(20); SKS6; - WUP0(24); SKS5; - WUP1(28); SKS4; - WUP0(32); SKS3; - WUP1(36); SKS2; - WUP0(40); SKS1; - WUP1(44); SKS0; - WUP0(48); SKS7; - WUP1(52); SKS6; - WUP0(56); SKS5; - WUP1(60); SKS4; - WUP0(64); SKS3; - WUP1(68); SKS2; - WUP0(72); SKS1; - WUP1(76); SKS0; - WUP0(80); SKS7; - WUP1(84); SKS6; - WUP0(88); SKS5; - WUP1(92); SKS4; - WUP0(96); SKS3; - -#undef SKS -#undef SKS0 -#undef SKS1 -#undef SKS2 -#undef SKS3 -#undef SKS4 -#undef SKS5 -#undef SKS6 -#undef SKS7 -#undef WUP -#undef WUP0 -#undef WUP1 - - return CRYPT_OK; -} - - -/* - * Initialization continues by setting the IV. The IV length is up to 16 bytes. - * If "ivlen" is 0 (no IV), then the "iv" parameter can be NULL. If multiple - * encryptions/decryptions are to be performed with the same key and - * sosemanuk_done() has not been called, only sosemanuk_setiv() need be called - * to set the state. - * @param st The Sosemanuk state - * @param iv Initialization vector - * @param ivlen Length of iv in bytes - * @return CRYPT_OK on success - */ -int sosemanuk_setiv(sosemanuk_state *st, const unsigned char *iv, unsigned long ivlen) -{ - - /* - * The Serpent key addition step. - */ -#define KA(zc, x0, x1, x2, x3) do { \ - x0 ^= st->kc[(zc)]; \ - x1 ^= st->kc[(zc) + 1]; \ - x2 ^= st->kc[(zc) + 2]; \ - x3 ^= st->kc[(zc) + 3]; \ - } while (0) - - /* - * One Serpent round. - * zc = current subkey counter - * S = S-box macro for this round - * i0 to i4 = input register numbers (the fifth is a scratch register) - * o0 to o3 = output register numbers - */ -#define FSS(zc, S, i0, i1, i2, i3, i4, o0, o1, o2, o3) do { \ - KA(zc, r ## i0, r ## i1, r ## i2, r ## i3); \ - S(r ## i0, r ## i1, r ## i2, r ## i3, r ## i4); \ - SERPENT_LT(r ## o0, r ## o1, r ## o2, r ## o3); \ - } while (0) - - /* - * Last Serpent round. Contrary to the "true" Serpent, we keep - * the linear transformation for that last round. - */ -#define FSF(zc, S, i0, i1, i2, i3, i4, o0, o1, o2, o3) do { \ - KA(zc, r ## i0, r ## i1, r ## i2, r ## i3); \ - S(r ## i0, r ## i1, r ## i2, r ## i3, r ## i4); \ - SERPENT_LT(r ## o0, r ## o1, r ## o2, r ## o3); \ - KA(zc + 4, r ## o0, r ## o1, r ## o2, r ## o3); \ - } while (0) - - ulong32 r0, r1, r2, r3, r4; - unsigned char ivtmp[16] = {0}; - - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(ivlen <= 16); - LTC_ARGCHK(iv != NULL || ivlen == 0); - - if (ivlen > 0) XMEMCPY(ivtmp, iv, ivlen); - - /* - * Decode IV into four 32-bit words (little-endian). - */ - LOAD32L(r0, ivtmp); - LOAD32L(r1, ivtmp + 4); - LOAD32L(r2, ivtmp + 8); - LOAD32L(r3, ivtmp + 12); - - /* - * Encrypt IV with Serpent24. Some values are extracted from the - * output of the twelfth, eighteenth and twenty-fourth rounds. - */ - FSS(0, S0, 0, 1, 2, 3, 4, 1, 4, 2, 0); - FSS(4, S1, 1, 4, 2, 0, 3, 2, 1, 0, 4); - FSS(8, S2, 2, 1, 0, 4, 3, 0, 4, 1, 3); - FSS(12, S3, 0, 4, 1, 3, 2, 4, 1, 3, 2); - FSS(16, S4, 4, 1, 3, 2, 0, 1, 0, 4, 2); - FSS(20, S5, 1, 0, 4, 2, 3, 0, 2, 1, 4); - FSS(24, S6, 0, 2, 1, 4, 3, 0, 2, 3, 1); - FSS(28, S7, 0, 2, 3, 1, 4, 4, 1, 2, 0); - FSS(32, S0, 4, 1, 2, 0, 3, 1, 3, 2, 4); - FSS(36, S1, 1, 3, 2, 4, 0, 2, 1, 4, 3); - FSS(40, S2, 2, 1, 4, 3, 0, 4, 3, 1, 0); - FSS(44, S3, 4, 3, 1, 0, 2, 3, 1, 0, 2); - st->s09 = r3; - st->s08 = r1; - st->s07 = r0; - st->s06 = r2; - - FSS(48, S4, 3, 1, 0, 2, 4, 1, 4, 3, 2); - FSS(52, S5, 1, 4, 3, 2, 0, 4, 2, 1, 3); - FSS(56, S6, 4, 2, 1, 3, 0, 4, 2, 0, 1); - FSS(60, S7, 4, 2, 0, 1, 3, 3, 1, 2, 4); - FSS(64, S0, 3, 1, 2, 4, 0, 1, 0, 2, 3); - FSS(68, S1, 1, 0, 2, 3, 4, 2, 1, 3, 0); - st->r1 = r2; - st->s04 = r1; - st->r2 = r3; - st->s05 = r0; - - FSS(72, S2, 2, 1, 3, 0, 4, 3, 0, 1, 4); - FSS(76, S3, 3, 0, 1, 4, 2, 0, 1, 4, 2); - FSS(80, S4, 0, 1, 4, 2, 3, 1, 3, 0, 2); - FSS(84, S5, 1, 3, 0, 2, 4, 3, 2, 1, 0); - FSS(88, S6, 3, 2, 1, 0, 4, 3, 2, 4, 1); - FSF(92, S7, 3, 2, 4, 1, 0, 0, 1, 2, 3); - st->s03 = r0; - st->s02 = r1; - st->s01 = r2; - st->s00 = r3; - - st->ptr = sizeof(st->buf); - -#undef KA -#undef FSS -#undef FSF - - return CRYPT_OK; -} - -/* - * Multiplication by alpha: alpha * x = T32(x << 8) ^ mul_a[x >> 24] - */ -static const ulong32 mul_a[] = { - 0x00000000, 0xE19FCF13, 0x6B973726, 0x8A08F835, - 0xD6876E4C, 0x3718A15F, 0xBD10596A, 0x5C8F9679, - 0x05A7DC98, 0xE438138B, 0x6E30EBBE, 0x8FAF24AD, - 0xD320B2D4, 0x32BF7DC7, 0xB8B785F2, 0x59284AE1, - 0x0AE71199, 0xEB78DE8A, 0x617026BF, 0x80EFE9AC, - 0xDC607FD5, 0x3DFFB0C6, 0xB7F748F3, 0x566887E0, - 0x0F40CD01, 0xEEDF0212, 0x64D7FA27, 0x85483534, - 0xD9C7A34D, 0x38586C5E, 0xB250946B, 0x53CF5B78, - 0x1467229B, 0xF5F8ED88, 0x7FF015BD, 0x9E6FDAAE, - 0xC2E04CD7, 0x237F83C4, 0xA9777BF1, 0x48E8B4E2, - 0x11C0FE03, 0xF05F3110, 0x7A57C925, 0x9BC80636, - 0xC747904F, 0x26D85F5C, 0xACD0A769, 0x4D4F687A, - 0x1E803302, 0xFF1FFC11, 0x75170424, 0x9488CB37, - 0xC8075D4E, 0x2998925D, 0xA3906A68, 0x420FA57B, - 0x1B27EF9A, 0xFAB82089, 0x70B0D8BC, 0x912F17AF, - 0xCDA081D6, 0x2C3F4EC5, 0xA637B6F0, 0x47A879E3, - 0x28CE449F, 0xC9518B8C, 0x435973B9, 0xA2C6BCAA, - 0xFE492AD3, 0x1FD6E5C0, 0x95DE1DF5, 0x7441D2E6, - 0x2D699807, 0xCCF65714, 0x46FEAF21, 0xA7616032, - 0xFBEEF64B, 0x1A713958, 0x9079C16D, 0x71E60E7E, - 0x22295506, 0xC3B69A15, 0x49BE6220, 0xA821AD33, - 0xF4AE3B4A, 0x1531F459, 0x9F390C6C, 0x7EA6C37F, - 0x278E899E, 0xC611468D, 0x4C19BEB8, 0xAD8671AB, - 0xF109E7D2, 0x109628C1, 0x9A9ED0F4, 0x7B011FE7, - 0x3CA96604, 0xDD36A917, 0x573E5122, 0xB6A19E31, - 0xEA2E0848, 0x0BB1C75B, 0x81B93F6E, 0x6026F07D, - 0x390EBA9C, 0xD891758F, 0x52998DBA, 0xB30642A9, - 0xEF89D4D0, 0x0E161BC3, 0x841EE3F6, 0x65812CE5, - 0x364E779D, 0xD7D1B88E, 0x5DD940BB, 0xBC468FA8, - 0xE0C919D1, 0x0156D6C2, 0x8B5E2EF7, 0x6AC1E1E4, - 0x33E9AB05, 0xD2766416, 0x587E9C23, 0xB9E15330, - 0xE56EC549, 0x04F10A5A, 0x8EF9F26F, 0x6F663D7C, - 0x50358897, 0xB1AA4784, 0x3BA2BFB1, 0xDA3D70A2, - 0x86B2E6DB, 0x672D29C8, 0xED25D1FD, 0x0CBA1EEE, - 0x5592540F, 0xB40D9B1C, 0x3E056329, 0xDF9AAC3A, - 0x83153A43, 0x628AF550, 0xE8820D65, 0x091DC276, - 0x5AD2990E, 0xBB4D561D, 0x3145AE28, 0xD0DA613B, - 0x8C55F742, 0x6DCA3851, 0xE7C2C064, 0x065D0F77, - 0x5F754596, 0xBEEA8A85, 0x34E272B0, 0xD57DBDA3, - 0x89F22BDA, 0x686DE4C9, 0xE2651CFC, 0x03FAD3EF, - 0x4452AA0C, 0xA5CD651F, 0x2FC59D2A, 0xCE5A5239, - 0x92D5C440, 0x734A0B53, 0xF942F366, 0x18DD3C75, - 0x41F57694, 0xA06AB987, 0x2A6241B2, 0xCBFD8EA1, - 0x977218D8, 0x76EDD7CB, 0xFCE52FFE, 0x1D7AE0ED, - 0x4EB5BB95, 0xAF2A7486, 0x25228CB3, 0xC4BD43A0, - 0x9832D5D9, 0x79AD1ACA, 0xF3A5E2FF, 0x123A2DEC, - 0x4B12670D, 0xAA8DA81E, 0x2085502B, 0xC11A9F38, - 0x9D950941, 0x7C0AC652, 0xF6023E67, 0x179DF174, - 0x78FBCC08, 0x9964031B, 0x136CFB2E, 0xF2F3343D, - 0xAE7CA244, 0x4FE36D57, 0xC5EB9562, 0x24745A71, - 0x7D5C1090, 0x9CC3DF83, 0x16CB27B6, 0xF754E8A5, - 0xABDB7EDC, 0x4A44B1CF, 0xC04C49FA, 0x21D386E9, - 0x721CDD91, 0x93831282, 0x198BEAB7, 0xF81425A4, - 0xA49BB3DD, 0x45047CCE, 0xCF0C84FB, 0x2E934BE8, - 0x77BB0109, 0x9624CE1A, 0x1C2C362F, 0xFDB3F93C, - 0xA13C6F45, 0x40A3A056, 0xCAAB5863, 0x2B349770, - 0x6C9CEE93, 0x8D032180, 0x070BD9B5, 0xE69416A6, - 0xBA1B80DF, 0x5B844FCC, 0xD18CB7F9, 0x301378EA, - 0x693B320B, 0x88A4FD18, 0x02AC052D, 0xE333CA3E, - 0xBFBC5C47, 0x5E239354, 0xD42B6B61, 0x35B4A472, - 0x667BFF0A, 0x87E43019, 0x0DECC82C, 0xEC73073F, - 0xB0FC9146, 0x51635E55, 0xDB6BA660, 0x3AF46973, - 0x63DC2392, 0x8243EC81, 0x084B14B4, 0xE9D4DBA7, - 0xB55B4DDE, 0x54C482CD, 0xDECC7AF8, 0x3F53B5EB -}; - -/* - * Multiplication by 1/alpha: 1/alpha * x = (x >> 8) ^ mul_ia[x & 0xFF] - */ -static const ulong32 mul_ia[] = { - 0x00000000, 0x180F40CD, 0x301E8033, 0x2811C0FE, - 0x603CA966, 0x7833E9AB, 0x50222955, 0x482D6998, - 0xC078FBCC, 0xD877BB01, 0xF0667BFF, 0xE8693B32, - 0xA04452AA, 0xB84B1267, 0x905AD299, 0x88559254, - 0x29F05F31, 0x31FF1FFC, 0x19EEDF02, 0x01E19FCF, - 0x49CCF657, 0x51C3B69A, 0x79D27664, 0x61DD36A9, - 0xE988A4FD, 0xF187E430, 0xD99624CE, 0xC1996403, - 0x89B40D9B, 0x91BB4D56, 0xB9AA8DA8, 0xA1A5CD65, - 0x5249BE62, 0x4A46FEAF, 0x62573E51, 0x7A587E9C, - 0x32751704, 0x2A7A57C9, 0x026B9737, 0x1A64D7FA, - 0x923145AE, 0x8A3E0563, 0xA22FC59D, 0xBA208550, - 0xF20DECC8, 0xEA02AC05, 0xC2136CFB, 0xDA1C2C36, - 0x7BB9E153, 0x63B6A19E, 0x4BA76160, 0x53A821AD, - 0x1B854835, 0x038A08F8, 0x2B9BC806, 0x339488CB, - 0xBBC11A9F, 0xA3CE5A52, 0x8BDF9AAC, 0x93D0DA61, - 0xDBFDB3F9, 0xC3F2F334, 0xEBE333CA, 0xF3EC7307, - 0xA492D5C4, 0xBC9D9509, 0x948C55F7, 0x8C83153A, - 0xC4AE7CA2, 0xDCA13C6F, 0xF4B0FC91, 0xECBFBC5C, - 0x64EA2E08, 0x7CE56EC5, 0x54F4AE3B, 0x4CFBEEF6, - 0x04D6876E, 0x1CD9C7A3, 0x34C8075D, 0x2CC74790, - 0x8D628AF5, 0x956DCA38, 0xBD7C0AC6, 0xA5734A0B, - 0xED5E2393, 0xF551635E, 0xDD40A3A0, 0xC54FE36D, - 0x4D1A7139, 0x551531F4, 0x7D04F10A, 0x650BB1C7, - 0x2D26D85F, 0x35299892, 0x1D38586C, 0x053718A1, - 0xF6DB6BA6, 0xEED42B6B, 0xC6C5EB95, 0xDECAAB58, - 0x96E7C2C0, 0x8EE8820D, 0xA6F942F3, 0xBEF6023E, - 0x36A3906A, 0x2EACD0A7, 0x06BD1059, 0x1EB25094, - 0x569F390C, 0x4E9079C1, 0x6681B93F, 0x7E8EF9F2, - 0xDF2B3497, 0xC724745A, 0xEF35B4A4, 0xF73AF469, - 0xBF179DF1, 0xA718DD3C, 0x8F091DC2, 0x97065D0F, - 0x1F53CF5B, 0x075C8F96, 0x2F4D4F68, 0x37420FA5, - 0x7F6F663D, 0x676026F0, 0x4F71E60E, 0x577EA6C3, - 0xE18D0321, 0xF98243EC, 0xD1938312, 0xC99CC3DF, - 0x81B1AA47, 0x99BEEA8A, 0xB1AF2A74, 0xA9A06AB9, - 0x21F5F8ED, 0x39FAB820, 0x11EB78DE, 0x09E43813, - 0x41C9518B, 0x59C61146, 0x71D7D1B8, 0x69D89175, - 0xC87D5C10, 0xD0721CDD, 0xF863DC23, 0xE06C9CEE, - 0xA841F576, 0xB04EB5BB, 0x985F7545, 0x80503588, - 0x0805A7DC, 0x100AE711, 0x381B27EF, 0x20146722, - 0x68390EBA, 0x70364E77, 0x58278E89, 0x4028CE44, - 0xB3C4BD43, 0xABCBFD8E, 0x83DA3D70, 0x9BD57DBD, - 0xD3F81425, 0xCBF754E8, 0xE3E69416, 0xFBE9D4DB, - 0x73BC468F, 0x6BB30642, 0x43A2C6BC, 0x5BAD8671, - 0x1380EFE9, 0x0B8FAF24, 0x239E6FDA, 0x3B912F17, - 0x9A34E272, 0x823BA2BF, 0xAA2A6241, 0xB225228C, - 0xFA084B14, 0xE2070BD9, 0xCA16CB27, 0xD2198BEA, - 0x5A4C19BE, 0x42435973, 0x6A52998D, 0x725DD940, - 0x3A70B0D8, 0x227FF015, 0x0A6E30EB, 0x12617026, - 0x451FD6E5, 0x5D109628, 0x750156D6, 0x6D0E161B, - 0x25237F83, 0x3D2C3F4E, 0x153DFFB0, 0x0D32BF7D, - 0x85672D29, 0x9D686DE4, 0xB579AD1A, 0xAD76EDD7, - 0xE55B844F, 0xFD54C482, 0xD545047C, 0xCD4A44B1, - 0x6CEF89D4, 0x74E0C919, 0x5CF109E7, 0x44FE492A, - 0x0CD320B2, 0x14DC607F, 0x3CCDA081, 0x24C2E04C, - 0xAC977218, 0xB49832D5, 0x9C89F22B, 0x8486B2E6, - 0xCCABDB7E, 0xD4A49BB3, 0xFCB55B4D, 0xE4BA1B80, - 0x17566887, 0x0F59284A, 0x2748E8B4, 0x3F47A879, - 0x776AC1E1, 0x6F65812C, 0x477441D2, 0x5F7B011F, - 0xD72E934B, 0xCF21D386, 0xE7301378, 0xFF3F53B5, - 0xB7123A2D, 0xAF1D7AE0, 0x870CBA1E, 0x9F03FAD3, - 0x3EA637B6, 0x26A9777B, 0x0EB8B785, 0x16B7F748, - 0x5E9A9ED0, 0x4695DE1D, 0x6E841EE3, 0x768B5E2E, - 0xFEDECC7A, 0xE6D18CB7, 0xCEC04C49, 0xD6CF0C84, - 0x9EE2651C, 0x86ED25D1, 0xAEFCE52F, 0xB6F3A5E2 -}; - - -/* - * Compute the next block of bits of output stream. This is equivalent - * to one full rotation of the shift register. - */ -static LTC_INLINE void s_sosemanuk_internal(sosemanuk_state *st) -{ - /* - * MUL_A(x) computes alpha * x (in F_{2^32}). - * MUL_G(x) computes 1/alpha * x (in F_{2^32}). - */ -#define MUL_A(x) (T32((x) << 8) ^ mul_a[(x) >> 24]) -#define MUL_G(x) (((x) >> 8) ^ mul_ia[(x) & 0xFF]) - - /* - * This macro computes the special multiplexer, which chooses - * between "x" and "x xor y", depending on the least significant - * bit of the control word. We use the C "?:" selection operator - * (which most compilers know how to optimise) except for Alpha, - * where the manual sign extension seems to perform equally well - * with DEC/Compaq/HP compiler, and much better with gcc. - */ -#ifdef __alpha -#define XMUX(c, x, y) ((((signed int)((c) << 31) >> 31) & (y)) ^ (x)) -#else -#define XMUX(c, x, y) (((c) & 0x1) ? ((x) ^ (y)) : (x)) -#endif - - /* - * FSM() updates the finite state machine. - */ -#define FSM(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9) do { \ - ulong32 tt, or1; \ - tt = XMUX(r1, s ## x1, s ## x8); \ - or1 = r1; \ - r1 = T32(r2 + tt); \ - tt = T32(or1 * 0x54655307); \ - r2 = ROLc(tt, 7); \ - } while (0) - - /* - * LRU updates the shift register; the dropped value is stored - * in variable "dd". - */ -#define LRU(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, dd) do { \ - dd = s ## x0; \ - s ## x0 = MUL_A(s ## x0) ^ MUL_G(s ## x3) ^ s ## x9; \ - } while (0) - - /* - * CC1 stores into variable "ee" the next intermediate word - * (combination of the new states of the LFSR and the FSM). - */ -#define CC1(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, ee) do { \ - ee = T32(s ## x9 + r1) ^ r2; \ - } while (0) - - /* - * STEP computes one internal round. "dd" receives the "s_t" - * value (dropped from the LFSR) and "ee" gets the value computed - * from the LFSR and FSM. - */ -#define STEP(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, dd, ee) do { \ - FSM(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9); \ - LRU(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, dd); \ - CC1(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, ee); \ - } while (0) - - /* - * Apply one Serpent round (with the provided S-box macro), XOR - * the result with the "v" values, and encode the result into - * the destination buffer, at the provided offset. The "x*" - * arguments encode the output permutation of the "S" macro. - */ -#define SRD(S, x0, x1, x2, x3, ooff) do { \ - S(u0, u1, u2, u3, u4); \ - STORE32L(u ## x0 ^ v0, st->buf + ooff); \ - STORE32L(u ## x1 ^ v1, st->buf + ooff + 4); \ - STORE32L(u ## x2 ^ v2, st->buf + ooff + 8); \ - STORE32L(u ## x3 ^ v3, st->buf + ooff + 12); \ - } while (0) - - ulong32 s00 = st->s00; - ulong32 s01 = st->s01; - ulong32 s02 = st->s02; - ulong32 s03 = st->s03; - ulong32 s04 = st->s04; - ulong32 s05 = st->s05; - ulong32 s06 = st->s06; - ulong32 s07 = st->s07; - ulong32 s08 = st->s08; - ulong32 s09 = st->s09; - ulong32 r1 = st->r1; - ulong32 r2 = st->r2; - ulong32 u0, u1, u2, u3, u4; - ulong32 v0, v1, v2, v3; - - STEP(00, 01, 02, 03, 04, 05, 06, 07, 08, 09, v0, u0); - STEP(01, 02, 03, 04, 05, 06, 07, 08, 09, 00, v1, u1); - STEP(02, 03, 04, 05, 06, 07, 08, 09, 00, 01, v2, u2); - STEP(03, 04, 05, 06, 07, 08, 09, 00, 01, 02, v3, u3); - SRD(S2, 2, 3, 1, 4, 0); - STEP(04, 05, 06, 07, 08, 09, 00, 01, 02, 03, v0, u0); - STEP(05, 06, 07, 08, 09, 00, 01, 02, 03, 04, v1, u1); - STEP(06, 07, 08, 09, 00, 01, 02, 03, 04, 05, v2, u2); - STEP(07, 08, 09, 00, 01, 02, 03, 04, 05, 06, v3, u3); - SRD(S2, 2, 3, 1, 4, 16); - STEP(08, 09, 00, 01, 02, 03, 04, 05, 06, 07, v0, u0); - STEP(09, 00, 01, 02, 03, 04, 05, 06, 07, 08, v1, u1); - STEP(00, 01, 02, 03, 04, 05, 06, 07, 08, 09, v2, u2); - STEP(01, 02, 03, 04, 05, 06, 07, 08, 09, 00, v3, u3); - SRD(S2, 2, 3, 1, 4, 32); - STEP(02, 03, 04, 05, 06, 07, 08, 09, 00, 01, v0, u0); - STEP(03, 04, 05, 06, 07, 08, 09, 00, 01, 02, v1, u1); - STEP(04, 05, 06, 07, 08, 09, 00, 01, 02, 03, v2, u2); - STEP(05, 06, 07, 08, 09, 00, 01, 02, 03, 04, v3, u3); - SRD(S2, 2, 3, 1, 4, 48); - STEP(06, 07, 08, 09, 00, 01, 02, 03, 04, 05, v0, u0); - STEP(07, 08, 09, 00, 01, 02, 03, 04, 05, 06, v1, u1); - STEP(08, 09, 00, 01, 02, 03, 04, 05, 06, 07, v2, u2); - STEP(09, 00, 01, 02, 03, 04, 05, 06, 07, 08, v3, u3); - SRD(S2, 2, 3, 1, 4, 64); - - st->s00 = s00; - st->s01 = s01; - st->s02 = s02; - st->s03 = s03; - st->s04 = s04; - st->s05 = s05; - st->s06 = s06; - st->s07 = s07; - st->s08 = s08; - st->s09 = s09; - st->r1 = r1; - st->r2 = r2; -} - -/* - * Combine buffers in1[] and in2[] by XOR, result in out[]. The length - * is "datalen" (in bytes). Partial overlap of out[] with either in1[] - * or in2[] is not allowed. Total overlap (out == in1 and/or out == in2) - * is allowed. - */ -static LTC_INLINE void s_xorbuf(const unsigned char *in1, const unsigned char *in2, - unsigned char *out, unsigned long datalen) -{ - while (datalen -- > 0) { - *out ++ = *in1 ++ ^ *in2 ++; - } -} - - -/* - * Cipher operation, as a stream cipher: data is read from the "in" - * buffer, combined by XOR with the stream, and the result is written - * in the "out" buffer. "in" and "out" must be either equal, or - * reference distinct buffers (no partial overlap is allowed). - * @param st The Sosemanuk state - * @param in Data in - * @param inlen Length of data in bytes - * @param out Data out - * @return CRYPT_OK on success - */ -int sosemanuk_crypt(sosemanuk_state *st, - const unsigned char *in, unsigned long inlen, unsigned char *out) -{ - LTC_ARGCHK(st != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - - if (st->ptr < (sizeof(st->buf))) { - unsigned long rlen = (sizeof(st->buf)) - st->ptr; - - if (rlen > inlen) { - rlen = inlen; - } - s_xorbuf(st->buf + st->ptr, in, out, rlen); - in += rlen; - out += rlen; - inlen -= rlen; - st->ptr += rlen; - } - while (inlen > 0) { - s_sosemanuk_internal(st); - if (inlen >= sizeof(st->buf)) { - s_xorbuf(st->buf, in, out, sizeof(st->buf)); - in += sizeof(st->buf); - out += sizeof(st->buf); - inlen -= sizeof(st->buf); - } else { - s_xorbuf(st->buf, in, out, inlen); - st->ptr = inlen; - inlen = 0; - } - } - return CRYPT_OK; -} - - - -/* - * Cipher operation, as a PRNG: the provided output buffer is filled with - * pseudo-random bytes as output from the stream cipher. - * @param st The Sosemanuk state - * @param out Data out - * @param outlen Length of output in bytes - * @return CRYPT_OK on success - */ -int sosemanuk_keystream(sosemanuk_state *st, unsigned char *out, unsigned long outlen) -{ - if (outlen == 0) return CRYPT_OK; /* nothing to do */ - LTC_ARGCHK(out != NULL); - XMEMSET(out, 0, outlen); - return sosemanuk_crypt(st, out, outlen, out); -} - - -/* - * Terminate and clear Sosemanuk key context - * @param st The Sosemanuk state - * @return CRYPT_OK on success - */ -int sosemanuk_done(sosemanuk_state *st) -{ - LTC_ARGCHK(st != NULL); - zeromem(st, sizeof(sosemanuk_state)); - return CRYPT_OK; -} - - -#endif diff --git a/src/stream/sosemanuk/sosemanuk_memory.c b/src/stream/sosemanuk/sosemanuk_memory.c deleted file mode 100644 index c0fac259..00000000 --- a/src/stream/sosemanuk/sosemanuk_memory.c +++ /dev/null @@ -1,35 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SOSEMANUK - -/** - Encrypt (or decrypt) bytes of ciphertext (or plaintext) with Sosemanuk - @param key The key - @param keylen The key length - @param iv The initial vector - @param ivlen The initial vector length - @param datain The plaintext (or ciphertext) - @param datalen The length of the input and output (octets) - @param dataout [out] The ciphertext (or plaintext) - @return CRYPT_OK if successful -*/ -int sosemanuk_memory(const unsigned char *key, unsigned long keylen, - const unsigned char *iv, unsigned long ivlen, - const unsigned char *datain, unsigned long datalen, - unsigned char *dataout) -{ - sosemanuk_state st; - int err; - - if ((err = sosemanuk_setup(&st, key, keylen)) != CRYPT_OK) goto WIPE_KEY; - if ((err = sosemanuk_setiv(&st, iv, ivlen)) != CRYPT_OK) goto WIPE_KEY; - err = sosemanuk_crypt(&st, datain, datalen, dataout); -WIPE_KEY: - sosemanuk_done(&st); - return err; -} - -#endif /* LTC_SOSEMANUK */ diff --git a/src/stream/sosemanuk/sosemanuk_test.c b/src/stream/sosemanuk/sosemanuk_test.c deleted file mode 100644 index 362dfcb0..00000000 --- a/src/stream/sosemanuk/sosemanuk_test.c +++ /dev/null @@ -1,79 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -#ifdef LTC_SOSEMANUK -int sosemanuk_test(void) -{ -#ifndef LTC_TEST - return CRYPT_NOP; -#else - sosemanuk_state st; - int err; - unsigned char out[1000]; - - { - unsigned char k[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }; - unsigned char n[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - unsigned char ct[] = { 0x7e, 0xfe, 0x2e, 0x6f, 0x8f, 0x77, 0x15, 0x72, 0x6a, 0x88, 0x14, 0xa6, 0x56, 0x88, 0x29, 0x9a, - 0x86, 0x32, 0x7f, 0x14, 0xd6, 0xb1, 0x94, 0x90, 0x25, 0xbc, 0x73, 0xfd, 0x02, 0x6c, 0x6a, 0xb8, - 0xda, 0x8e, 0x7f, 0x61, 0x70, 0x81, 0xe3, 0xbb, 0x99, 0xaf, 0x19, 0x9f, 0x20, 0x45 }; - char pt[] = "Kilroy was here, and there. ...and everywhere!"; /* len = 46 bytes */ - unsigned long len; - len = XSTRLEN(pt); - /* crypt piece by piece */ - if ((err = sosemanuk_setup(&st, k, sizeof(k))) != CRYPT_OK) return err; - if ((err = sosemanuk_setiv(&st, n, sizeof(n))) != CRYPT_OK) return err; - if ((err = sosemanuk_crypt(&st, (unsigned char*)pt, 5, out)) != CRYPT_OK) return err; - if ((err = sosemanuk_crypt(&st, (unsigned char*)pt + 5, 25, out + 5)) != CRYPT_OK) return err; - if ((err = sosemanuk_crypt(&st, (unsigned char*)pt + 30, 10, out + 30)) != CRYPT_OK) return err; - if ((err = sosemanuk_crypt(&st, (unsigned char*)pt + 40, len - 40, out + 40)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, len, ct, sizeof(ct), "SOSEMANUK-TV1", 1)) return CRYPT_FAIL_TESTVECTOR; - - /* crypt in one go - using sosemanuk_ivctr64() */ - if ((err = sosemanuk_setup(&st, k, sizeof(k))) != CRYPT_OK) return err; - if ((err = sosemanuk_setiv(&st, n, sizeof(n))) != CRYPT_OK) return err; - if ((err = sosemanuk_crypt(&st, (unsigned char*)pt, len, out)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, len, ct, sizeof(ct), "SOSEMANUK-TV2", 1)) return CRYPT_FAIL_TESTVECTOR; - - /* crypt in a single call */ - if ((err = sosemanuk_memory(k, sizeof(k), n, sizeof(n), - (unsigned char*)pt, len, out)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, len, ct, sizeof(ct), "SOSEMANUK-TV3", 1)) return CRYPT_FAIL_TESTVECTOR; - - } - { - /* keystream - * http://www.ecrypt.eu.org/stream/svn/viewcvs.cgi/ecrypt/trunk/submissions/sosemanuk/unverified.test-vectors?rev=210&view=auto - * Set 6, vector 0 - * key = 0053A6F94C9FF24598EB3E91E4378ADD - * 3083D6297CCF2275C81B6EC11467BA0D - * IV = 0D74DB42A91077DE45AC137AE148AF16 - * stream[0..63] = 55EB8D174C2E0351E5A53C90E84740EB - * 0F5A24AAFEC8E0C9F9D2CE48B2ADB0A3 - * 4D2E8C4E016102607368FFA43A0F9155 - * 0706E3548AD9E5EA15A53EB6F0EDE9DC - * - */ - - unsigned char k3[] = { 0x00, 0x53, 0xA6, 0xF9, 0x4C, 0x9F, 0xF2, 0x45, 0x98, 0xEB, 0x3E, 0x91, 0xE4, 0x37, 0x8A, 0xDD, - 0x30, 0x83, 0xD6, 0x29, 0x7C, 0xCF, 0x22, 0x75, 0xC8, 0x1B, 0x6E, 0xC1, 0x14, 0x67, 0xBA, 0x0D }; - unsigned char n3[] = { 0x0D, 0x74, 0xDB, 0x42, 0xA9, 0x10, 0x77, 0xDE, 0x45, 0xAC, 0x13, 0x7A, 0xE1, 0x48, 0xAF, 0x16 }; - unsigned char ct3[] = { 0x55, 0xEB, 0x8D, 0x17, 0x4C, 0x2E, 0x03, 0x51, 0xE5, 0xA5, 0x3C, 0x90, 0xE8, 0x47, 0x40, 0xEB, - 0x0F, 0x5A, 0x24, 0xAA, 0xFE, 0xC8, 0xE0, 0xC9, 0xF9, 0xD2, 0xCE, 0x48, 0xB2, 0xAD, 0xB0, 0xA3, - 0x4D, 0x2E, 0x8C, 0x4E, 0x01, 0x61, 0x02, 0x60, 0x73, 0x68, 0xFF, 0xA4, 0x3A, 0x0F, 0x91, 0x55, - 0x07, 0x06, 0xE3, 0x54, 0x8A, 0xD9, 0xE5, 0xEA, 0x15, 0xA5, 0x3E, 0xB6, 0xF0, 0xED, 0xE9, 0xDC }; - if ((err = sosemanuk_setup(&st, k3, sizeof(k3))) != CRYPT_OK) return err; - if ((err = sosemanuk_setiv(&st, n3, sizeof(n3))) != CRYPT_OK) return err; - if ((err = sosemanuk_keystream(&st, out, 64)) != CRYPT_OK) return err; - if ((err = sosemanuk_done(&st)) != CRYPT_OK) return err; - if (ltc_compare_testvector(out, 64, ct3, sizeof(ct3), "SOSEMANUK-TV4", 1)) return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -#endif -} - -#endif diff --git a/testme.sh b/testme.sh deleted file mode 100755 index 8cdf4c13..00000000 --- a/testme.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash - -if [ $# -lt 3 ] -then - echo "usage is: ${0##*/} " - echo "e.g. \"${0##*/} \"makefile -j9\" \"-DUSE_LTM -DLTM_DESC -I../libtommath\" ../libtommath/libtommath.a\"" - echo "to create aggregate coverage: pre-pend with LTC_COVERAGE=1" - exit -1 -fi - -# date -echo "date="`date` - -# check sources -bash .ci/check_source.sh "CHECK_SOURCES" " " "$1" "$2" "$3" || exit 1 - -mk="$1" - -[ "$LTC_COVERAGE" != "" ] && mk="$mk COVERAGE=1" - -# meta builds -bash .ci/meta_builds.sh "META_BUILS" " " "$mk" "$2" "$3" || exit 1 - -# valgrind build -bash .ci/valgrind.sh "VALGRIND" " " "$mk" "$2" "$3" || exit 1 - -# stock build -bash .ci/run.sh "STOCK" " " "$mk" "$2" "$3" || exit 1 - -# EASY build -bash .ci/run.sh "EASY" "-DLTC_EASY" "$mk" "$2" "$3" || exit 1 - -# SMALL code -bash .ci/run.sh "SMALL" "-DLTC_SMALL_CODE" "$mk" "$2" "$3" || exit 1 - -# NOTABLES -bash .ci/run.sh "NOTABLES" "-DLTC_NO_TABLES" "$mk" "$2" "$3" || exit 1 - -# SMALL+NOTABLES -bash .ci/run.sh "SMALL+NOTABLES" "-DLTC_SMALL_CODE -DLTC_NO_TABLES" "$mk" "$2" "$3" || exit 1 - -# CLEANSTACK -bash .ci/run.sh "CLEANSTACK" "-DLTC_CLEAN_STACK" "$mk" "$2" "$3" || exit 1 - -# CLEANSTACK + SMALL -bash .ci/run.sh "CLEANSTACK+SMALL" "-DLTC_SMALL_CODE -DLTC_CLEAN_STACK" "$mk" "$2" "$3" || exit 1 - -# CLEANSTACK + NOTABLES -bash .ci/run.sh "CLEANSTACK+NOTABLES" "-DLTC_NO_TABLES -DLTC_CLEAN_STACK" "$mk" "$2" "$3" || exit 1 - -# CLEANSTACK + NOTABLES + SMALL -bash .ci/run.sh "CLEANSTACK+NOTABLES+SMALL" "-DLTC_NO_TABLES -DLTC_CLEAN_STACK -DLTC_SMALL_CODE" "$mk" "$2" "$3" || exit 1 - -# NO_FAST -bash .ci/run.sh "NO_FAST" "-DLTC_NO_FAST" "$mk" "$2" "$3" || exit 1 - -# NO_FAST + NOTABLES -bash .ci/run.sh "NO_FAST+NOTABLES" "-DLTC_NO_FAST -DLTC_NO_TABLES" "$mk" "$2" "$3" || exit 1 - -# NO_ASM -bash .ci/run.sh "NO_ASM" "-DLTC_NO_ASM" "$mk" "$2" "$3" || exit 1 - -# NO_TIMING_RESISTANCE -bash .ci/run.sh "NO_TIMING_RESISTANCE" "-DLTC_NO_ECC_TIMING_RESISTANT -DLTC_NO_RSA_BLINDING" "$mk" "$2" "$3" || exit 1 - -# CLEANSTACK+NOTABLES+SMALL+NO_ASM+NO_TIMING_RESISTANCE -bash .ci/run.sh "CLEANSTACK+NOTABLES+SMALL+NO_ASM+NO_TIMING_RESISTANCE" "-DLTC_CLEAN_STACK -DLTC_NO_TABLES -DLTC_SMALL_CODE -DLTC_NO_ECC_TIMING_RESISTANT -DLTC_NO_RSA_BLINDING" "$mk" "$2" "$3" || exit 1 diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt deleted file mode 100644 index 487b10f2..00000000 --- a/tests/CMakeLists.txt +++ /dev/null @@ -1,60 +0,0 @@ -# SPDX-License-Identifier: Unlicense -# -# LibTomCrypt, modular cryptographic library -- Tom St Denis -# - -cmake_minimum_required(VERSION 3.10) - -set(LTC_TEST test-ltc) - -# This file can be included from the top level or used stand-alone -if(PROJECT_NAME) - set(LIBRARY_NAME ${PROJECT_NAME}) -else() - # Define an independent project and all the necessary stuff around - project(${LTC_TEST} LANGUAGES C) - set(LIBRARY_NAME libtomcrypt) - find_package(${LIBRARY_NAME}) - include(CTest) - if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE "Release") - endif() -endif() - -# ----------------------------------------------------------------------------- -# Compose CFLAGS etc. -# ----------------------------------------------------------------------------- - -if(NOT MSVC) - set(CMAKE_C_FLAGS_DEBUG "-g3 -O1") -endif() - -# ----------------------------------------------------------------------------- -# demo target -# ----------------------------------------------------------------------------- -include(sources.cmake) -set(PRIVATE_HEADERS common.h tomcrypt_test.h) - -add_executable(${LTC_TEST} ${SOURCES} ${PRIVATE_HEADERS}) - -target_include_directories( - ${LTC_TEST} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - $<$:${CMAKE_CURRENT_SOURCE_DIR}/..> -) - -target_link_libraries(${LTC_TEST} PRIVATE ${LIBRARY_NAME}) - -target_compile_options( - ${LTC_TEST} - PRIVATE $<$,SHARED_LIBRARY>:-DLTC_TEST_DYNAMIC> - -DCMAKE_SOURCE_DIR=\"${CMAKE_SOURCE_DIR}\" ${LTC_C_FLAGS} -) -target_link_options(${LTC_TEST} BEFORE PUBLIC ${LTC_LD_FLAGS}) - -# ----------------------------------------------------------------------------- -# CTest -# ----------------------------------------------------------------------------- -add_test(NAME ${LTC_TEST} COMMAND ${LTC_TEST}) - -find_program(MEMORYCHECK_COMMAND valgrind) -set(MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes --leak-check=full") diff --git a/tests/argon2_test.c b/tests/argon2_test.c deleted file mode 100644 index 77fd1511..00000000 --- a/tests/argon2_test.c +++ /dev/null @@ -1,91 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include - -#ifdef LTC_ARGON2 - -/* RFC 9106 test vectors */ - -int argon2_test(void) -{ - static const unsigned char password[32] = { - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 - }; - static const unsigned char salt[16] = { - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02 - }; - static const unsigned char secret[8] = { - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 - }; - static const unsigned char ad[12] = { - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04 - }; - - static const unsigned char expected_argon2d[32] = { - 0x51, 0x2b, 0x39, 0x1b, 0x6f, 0x11, 0x62, 0x97, - 0x53, 0x71, 0xd3, 0x09, 0x19, 0x73, 0x42, 0x94, - 0xf8, 0x68, 0xe3, 0xbe, 0x39, 0x84, 0xf3, 0xc1, - 0xa1, 0x3a, 0x4d, 0xb9, 0xfa, 0xbe, 0x4a, 0xcb - }; - static const unsigned char expected_argon2i[32] = { - 0xc8, 0x14, 0xd9, 0xd1, 0xdc, 0x7f, 0x37, 0xaa, - 0x13, 0xf0, 0xd7, 0x7f, 0x24, 0x94, 0xbd, 0xa1, - 0xc8, 0xde, 0x6b, 0x01, 0x6d, 0xd3, 0x88, 0xd2, - 0x99, 0x52, 0xa4, 0xc4, 0x67, 0x2b, 0x6c, 0xe8 - }; - static const unsigned char expected_argon2id[32] = { - 0x0d, 0x64, 0x0d, 0xf5, 0x8d, 0x78, 0x76, 0x6c, - 0x08, 0xc0, 0x37, 0xa3, 0x4a, 0x8b, 0x53, 0xc9, - 0xd0, 0x1e, 0xf0, 0x45, 0x2d, 0x75, 0xb6, 0x5e, - 0xb5, 0x25, 0x20, 0xe9, 0x6b, 0x01, 0xe6, 0x59 - }; - - unsigned char tag[32]; - - const struct { - const char *name; - argon2_type type; - const unsigned char *expected; - unsigned long elen; - } argon_testcase[] = { - { "Argon2d", ARGON2_D, expected_argon2d, sizeof(expected_argon2d) }, - { "Argon2i", ARGON2_I, expected_argon2i, sizeof(expected_argon2i) }, - { "Argon2id", ARGON2_ID, expected_argon2id, sizeof(expected_argon2id) }, - }; - - size_t n; - - for (n = 0; n < LTC_ARRAY_SIZE(argon_testcase); ++n) { - DO(argon2_hash(password, sizeof(password), - salt, sizeof(salt), - secret, sizeof(secret), - ad, sizeof(ad), - 3, 32, 4, - argon_testcase[n].type, - tag, sizeof(tag))); - COMPARE_TESTVECTOR(tag, sizeof(tag), argon_testcase[n].expected, argon_testcase[n].elen, argon_testcase[n].name, n); - } - - /* RFC 9106: parallelism is limited to 2^24-1 (16777216 == 2^24) */ - if (argon2_hash(password, sizeof(password), - salt, sizeof(salt), - secret, sizeof(secret), - ad, sizeof(ad), - 3, 134217728, 16777216, - ARGON2_ID, - tag, sizeof(tag)) != CRYPT_INVALID_ARG) { - return CRYPT_FAIL_TESTVECTOR; - } - - return CRYPT_OK; -} - -#else -LTC_NOP_TEST(argon2_test) -#endif diff --git a/tests/asn1/0x00.crt b/tests/asn1/0x00.crt deleted file mode 100644 index d7eec225..00000000 Binary files a/tests/asn1/0x00.crt and /dev/null differ diff --git a/tests/asn1/0x80.crt b/tests/asn1/0x80.crt deleted file mode 100644 index e663829b..00000000 Binary files a/tests/asn1/0x80.crt and /dev/null differ diff --git a/tests/asn1/0xff.crt b/tests/asn1/0xff.crt deleted file mode 100644 index f1894296..00000000 Binary files a/tests/asn1/0xff.crt and /dev/null differ diff --git a/tests/asn1/illegal_padding1.crt b/tests/asn1/illegal_padding1.crt deleted file mode 100644 index 5e1315ae..00000000 Binary files a/tests/asn1/illegal_padding1.crt and /dev/null differ diff --git a/tests/asn1/illegal_padding2.crt b/tests/asn1/illegal_padding2.crt deleted file mode 100644 index e5fbb6a5..00000000 Binary files a/tests/asn1/illegal_padding2.crt and /dev/null differ diff --git a/tests/asn1/illegal_padding3.crt b/tests/asn1/illegal_padding3.crt deleted file mode 100644 index 1a9b098e..00000000 Binary files a/tests/asn1/illegal_padding3.crt and /dev/null differ diff --git a/tests/asn1/oid_overflow_test.der b/tests/asn1/oid_overflow_test.der deleted file mode 100644 index 99a24d56..00000000 Binary files a/tests/asn1/oid_overflow_test.der and /dev/null differ diff --git a/tests/asn1/oid_size_test.der b/tests/asn1/oid_size_test.der deleted file mode 100644 index 52d382aa..00000000 Binary files a/tests/asn1/oid_size_test.der and /dev/null differ diff --git a/tests/asn1/private.der b/tests/asn1/private.der deleted file mode 100644 index f9ac5ef8..00000000 Binary files a/tests/asn1/private.der and /dev/null differ diff --git a/tests/asn1/root-ca.der b/tests/asn1/root-ca.der deleted file mode 100644 index 9d40cc07..00000000 Binary files a/tests/asn1/root-ca.der and /dev/null differ diff --git a/tests/asn1/type0x08.crt b/tests/asn1/type0x08.crt deleted file mode 100644 index 35b516ca..00000000 Binary files a/tests/asn1/type0x08.crt and /dev/null differ diff --git a/tests/base16_test.c b/tests/base16_test.c deleted file mode 100644 index 16ea312e..00000000 --- a/tests/base16_test.c +++ /dev/null @@ -1,48 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include - -#ifdef LTC_BASE16 - -int base16_test(void) -{ - unsigned char in[100], tmp[100]; - char out[201]; - unsigned char testin[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }; - const char *testout[2] = { - "0123456789abcdef", - "0123456789ABCDEF", - }; - const char *failing_decode = "test"; - unsigned long x, l1, l2; - int idx; - - for (idx = 0; idx < 2; idx++) { - for (x = 0; x < 100; x++) { - ENSURE(yarrow_read(in, x, &yarrow_prng) == x); - l1 = sizeof(out); - DO(base16_encode(in, x, out, &l1, idx)); - l2 = sizeof(tmp); - DO(base16_decode(out, l1, tmp, &l2)); - COMPARE_TESTVECTOR(tmp, l2, in, x, "random base16", idx * 100 + x); - } - } - - for (idx = 0; idx < 2; idx++) { - l1 = sizeof(out); - DO(base16_encode(testin, sizeof(testin), out, &l1, idx)); - COMPARE_TESTVECTOR(out, XSTRLEN(out), testout[idx], XSTRLEN(testout[idx]), "testout base16", idx); - l2 = sizeof(tmp); - DO(base16_decode(out, l1, tmp, &l2)); - COMPARE_TESTVECTOR(tmp, l2, testin, sizeof(testin), "testin base16", idx); - } - - l1 = 4; - l2 = sizeof(tmp); - SHOULD_FAIL(base16_decode(failing_decode, l1, tmp, &l2)); - - return CRYPT_OK; -} - -#endif diff --git a/tests/base32_test.c b/tests/base32_test.c deleted file mode 100644 index 3e5d73b1..00000000 --- a/tests/base32_test.c +++ /dev/null @@ -1,51 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include - -#ifdef LTC_BASE32 - -int base32_test(void) -{ - unsigned char in[100], tmp[100]; - char out[160]; - unsigned char testin[] = { 0x61,0xc2,0xcb,0xbc,0x5e,0x6d,0x2a,0x7a,0x1a,0x19,0x1a,0xae,0xc9,0x02,0xd4,0xbf,0x7d }; - const int testid[4] = { - BASE32_RFC4648, - BASE32_BASE32HEX, - BASE32_ZBASE32, - BASE32_CROCKFORD - }; - const char *testout[4] = { - "MHBMXPC6NUVHUGQZDKXMSAWUX56Q", - "C71CNF2UDKL7K6GP3ANCI0MKNTUG", - "c8bczxn6pwi8wgo3dkzc1yswz76o", - "C71CQF2YDMN7M6GS3AQCJ0PMQXYG" - }; - unsigned long x, l1, l2; - int idx; - - for (idx = 0; idx < 4; idx++) { - for (x = 0; x < 100; x++) { - ENSURE(yarrow_read(in, x, &yarrow_prng) == x); - l1 = sizeof(out); - DO(base32_encode(in, x, out, &l1, testid[idx])); - l2 = sizeof(tmp); - DO(base32_decode(out, l1, tmp, &l2, testid[idx])); - COMPARE_TESTVECTOR(tmp, l2, in, x, "random base32", idx * 100 + x); - } - } - - for (idx = 0; idx < 4; idx++) { - l1 = sizeof(out); - DO(base32_encode(testin, sizeof(testin), out, &l1, testid[idx])); - COMPARE_TESTVECTOR(out, l1, testout[idx], XSTRLEN(testout[idx]), "testout base32", idx); - l2 = sizeof(tmp); - DO(base32_decode(out, l1, tmp, &l2, testid[idx])); - COMPARE_TESTVECTOR(tmp, l2, testin, sizeof(testin), "testin base32", idx); - } - - return CRYPT_OK; -} - -#endif diff --git a/tests/base64_test.c b/tests/base64_test.c deleted file mode 100644 index bab041d1..00000000 --- a/tests/base64_test.c +++ /dev/null @@ -1,178 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#if defined(LTC_BASE64) || defined(LTC_BASE64_URL) -enum { insane = 0, strict = 1, relaxed = 2, invalid = 666 }; - -int base64_test(void) -{ - unsigned char in[64], tmp[64]; - char out[256]; - unsigned long x, l1, l2, slen1; - - const unsigned char special_case[] = { - 0xbe, 0xe8, 0x92, 0x3c, 0xa2, 0x25, 0xf0, 0xf8, - 0x91, 0xe4, 0xef, 0xab, 0x0b, 0x8c, 0xfd, 0xff, - 0x14, 0xd0, 0x29, 0x9d, 0x00 }; - /* 3 A's are encoded as QUFB */ - const char *As_lf = "QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB\nQUFB"; - const char *As_crlf = "QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB\r\nQUFB"; - const char *As_ssh_lf = "QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB\nQUFB"; - const char *As_ssh_crlf = "QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB\r\nQUFB"; - -#if defined(LTC_BASE64) - /* - TEST CASES SOURCE: - - Network Working Group S. Josefsson - Request for Comments: 4648 SJD - Obsoletes: 3548 October 2006 - Category: Standards Track - */ - const struct { - const char* s; - const char* b64; - } cases[] = { - {"", "" }, - {"f", "Zg==" }, - {"fo", "Zm8=" }, - {"foo", "Zm9v" }, - {"foob", "Zm9vYg==" }, - {"fooba", "Zm9vYmE=" }, - {"foobar", "Zm9vYmFy"}, - {(char*)special_case,"vuiSPKIl8PiR5O+rC4z9/xTQKZ0="} - }; -#endif - -#ifdef LTC_BASE64_URL - const struct { - const char* s; - int flag; - } url_cases[] = { - {"vuiSPKIl8PiR5O-rC4z9_xTQKZ0", strict}, /* 0 */ - {"vuiSPKIl8PiR5O-rC4z9_xTQKZ0=", strict}, - {"vuiS*PKIl8P*iR5O-rC4*z9_xTQKZ0", insane}, - {"vuiS*PKIl8P*iR5O-rC4*z9_xTQKZ0=", insane}, - {"vuiS*PKIl8P*iR5O-rC4*z9_xTQKZ0==", insane}, - {"vuiS*PKIl8P*iR5O-rC4*z9_xTQKZ0===", insane}, /* 5 */ - {"vuiS*PKIl8P*iR5O-rC4*z9_xTQKZ0====", insane}, - {"vuiS*=PKIl8P*iR5O-rC4*z9_xTQKZ0=", insane}, - {"vuiS*==PKIl8P*iR5O-rC4*z9_xTQKZ0=", insane}, - {"vuiS*==\xffPKIl8P*iR5O-rC4*z9_xTQKZ0=", insane}, - {"vuiS PKIl8P\niR5O-rC4\tz9_xTQKZ0", relaxed}, /* 10 */ - {"vuiS PKIl8P\niR5O-rC4\tz9_xTQKZ0=", relaxed}, - {"vuiS PKIl8P\niR5O-rC4\tz9_xTQKZ0==", relaxed}, - {"vuiS PKIl8P\niR5O-rC4\tz9_xTQKZ0===", relaxed}, - {"vuiS PKIl8P\niR5O-rC4\tz9_xTQKZ0====", relaxed}, - {"vuiS\rPKIl8P\niR5O-rC4\tz9_xTQKZ0=", relaxed}, /* 15 */ - {"vuiS\rPKIl8P\niR5O-rC4\tz9_xTQKZ0= = =\x00", relaxed}, - {"\nvuiS\rPKIl8P\niR5O-rC4\tz9_xTQKZ0=\n", relaxed}, - {"vuiSPKIl8PiR5O-rC4z9_xTQK", invalid}, - }; - - for (x = 0; x < LTC_ARRAY_SIZE(url_cases); ++x) { - slen1 = XSTRLEN(url_cases[x].s); - l1 = sizeof(tmp); - if(url_cases[x].flag == strict) { - DO(base64url_strict_decode(url_cases[x].s, slen1, tmp, &l1)); - COMPARE_TESTVECTOR(tmp, l1, special_case, sizeof(special_case) - 1, "base64url_strict_decode", x); - DO(base64url_sane_decode(url_cases[x].s, slen1, tmp, &l1)); - COMPARE_TESTVECTOR(tmp, l1, special_case, sizeof(special_case) - 1, "base64url_sane_decode/strict", x); - DO(base64url_decode(url_cases[x].s, slen1, tmp, &l1)); - COMPARE_TESTVECTOR(tmp, l1, special_case, sizeof(special_case) - 1, "base64url_decode/strict", x); - } - else if(url_cases[x].flag == relaxed) { - DO(base64url_strict_decode(url_cases[x].s, slen1, tmp, &l1) == CRYPT_INVALID_PACKET ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR); - DO(base64url_sane_decode(url_cases[x].s, slen1, tmp, &l1)); - COMPARE_TESTVECTOR(tmp, l1, special_case, sizeof(special_case) - 1, "base64url_sane_decode/relaxed", x); - DO(base64url_decode(url_cases[x].s, slen1, tmp, &l1)); - COMPARE_TESTVECTOR(tmp, l1, special_case, sizeof(special_case) - 1, "base64url_decode/relaxed", x); - } - else if(url_cases[x].flag == insane) { - DO(base64url_strict_decode(url_cases[x].s, slen1, tmp, &l1) == CRYPT_INVALID_PACKET ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR); - DO(base64url_sane_decode(url_cases[x].s, slen1, tmp, &l1) == CRYPT_INVALID_PACKET ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR); - DO(base64url_decode(url_cases[x].s, slen1, tmp, &l1)); - COMPARE_TESTVECTOR(tmp, l1, special_case, sizeof(special_case) - 1, "base64url_decode/insane", x); - } - else { /* invalid */ - DO(base64url_strict_decode(url_cases[x].s, slen1, tmp, &l1) == CRYPT_INVALID_PACKET ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR); - DO(base64url_sane_decode(url_cases[x].s, slen1, tmp, &l1) == CRYPT_INVALID_PACKET ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR); - DO(base64url_decode(url_cases[x].s, slen1, tmp, &l1) == CRYPT_INVALID_PACKET ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR); - } - l2 = sizeof(out); - if(x == 0) { - DO(base64url_encode(tmp, l1, out, &l2)); - COMPARE_TESTVECTOR(out, l2, url_cases[x].s, XSTRLEN(url_cases[x].s), "base64url_encode", x); - } - if(x == 1) { - DO(base64url_strict_encode(tmp, l1, out, &l2)); - COMPARE_TESTVECTOR(out, l2, url_cases[x].s, XSTRLEN(url_cases[x].s), "base64url_strict_encode", x); - } - } -#endif - -#if defined(LTC_BASE64) - for (x = 0; x < LTC_ARRAY_SIZE(cases); ++x) { - memset(out, 0, sizeof(out)); - memset(tmp, 0, sizeof(tmp)); - slen1 = XSTRLEN(cases[x].s); - l1 = sizeof(out); - DO(base64_encode((unsigned char*)cases[x].s, slen1, out, &l1)); - COMPARE_TESTVECTOR(out, l1, cases[x].b64, XSTRLEN(cases[x].b64), "base64_encode", x); - l2 = sizeof(tmp); - DO(base64_strict_decode(out, l1, tmp, &l2)); - COMPARE_TESTVECTOR(tmp, l2, cases[x].s, slen1, "base64_strict_decode", x); - DO(base64_sane_decode(out, l1, tmp, &l2)); - COMPARE_TESTVECTOR(tmp, l2, cases[x].s, slen1, "base64_sane_decode", x); - DO(base64_decode(out, l1, tmp, &l2)); - COMPARE_TESTVECTOR(tmp, l2, cases[x].s, slen1, "base64_decode", x); - } - - for (x = 0; x < 64; x++) { - ENSURE(yarrow_read(in, x, &yarrow_prng) == x); - l1 = sizeof(out); - DO(base64_encode(in, x, out, &l1)); - l2 = sizeof(tmp); - DO(base64_decode(out, l1, tmp, &l2)); - COMPARE_TESTVECTOR(tmp, x, in, x, "random base64", x); - } - - x--; - memmove(&out[11], &out[10], l1 - 10); - l1++; - l2 = sizeof(tmp); - - out[10] = 0; - DO(base64_decode(out, l1, tmp, &l2)); - COMPARE_TESTVECTOR(tmp, l2, in, l2, "insane base64 decoding (NUL)", 0); - DO(base64_sane_decode(out, l1, tmp, &l2) == CRYPT_INVALID_PACKET ? CRYPT_OK : CRYPT_INVALID_PACKET); - DO(base64_strict_decode(out, l1, tmp, &l2) == CRYPT_INVALID_PACKET ? CRYPT_OK : CRYPT_INVALID_PACKET); - - out[10] = 9; /* tab */ - DO(base64_decode(out, l1, tmp, &l2)); - COMPARE_TESTVECTOR(tmp, l2, in, l2, "insane base64 decoding (TAB)", 0); - DO(base64_sane_decode(out, l1, tmp, &l2)); - COMPARE_TESTVECTOR(tmp, l2, in, l2, "relaxed base64 decoding (TAB)", 0); - DO(base64_strict_decode(out, l1, tmp, &l2) == CRYPT_INVALID_PACKET ? CRYPT_OK : CRYPT_INVALID_PACKET); - - memset(in, 'A', sizeof(in)); - l1 = strlen(As_lf); - SHOULD_FAIL(base64_encode_pem(in, 51, out, &l1, 0)); - l1++; - DO(base64_encode_pem(in, 51, out, &l1, 0)); - COMPARE_TESTVECTOR(out, l1, As_lf, strlen(As_lf), "PEM output with \\n", 0); - l1 = strlen(As_crlf) + 1; - DO(base64_encode_pem(in, 51, out, &l1, BASE64_PEM_CRLF)); - COMPARE_TESTVECTOR(out, l1, As_crlf, strlen(As_crlf), "PEM output with \\r\\n", 0); - l1 = strlen(As_ssh_lf) + 1; - DO(base64_encode_pem(in, 57, out, &l1, BASE64_PEM_SSH)); - COMPARE_TESTVECTOR(out, l1, As_ssh_lf, strlen(As_ssh_lf), "PEM SSH-style output with \\n", 0); - l1 = strlen(As_ssh_crlf) + 1; - DO(base64_encode_pem(in, 57, out, &l1, BASE64_PEM_SSH | BASE64_PEM_CRLF)); - COMPARE_TESTVECTOR(out, l1, As_ssh_crlf, strlen(As_ssh_crlf), "PEM SSH-style output with \\r\\n", 0); -#endif - - return 0; -} -#endif diff --git a/tests/bcrypt_test.c b/tests/bcrypt_test.c deleted file mode 100644 index f3094515..00000000 --- a/tests/bcrypt_test.c +++ /dev/null @@ -1,140 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include - -#ifdef LTC_BCRYPT - -/** These tests were shamelessly c&p'ed from the OpenBSD sources - * https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/regress/lib/libutil/bcrypt_pbkdf/bcrypt_pbkdf_test.c */ - -struct test { - unsigned int rounds; - unsigned long passlen; - const char *password; - unsigned long saltlen; - const char *salt; - unsigned long keylen; - const char *key; -}; - -static struct test tests[] = { - /* basic */ - { 4, 8, "password", 4, "salt", 32, - "\x5b\xbf\x0c\xc2\x93\x58\x7f\x1c\x36\x35\x55\x5c\x27\x79\x65\x98" - "\xd4\x7e\x57\x90\x71\xbf\x42\x7e\x9d\x8f\xbe\x84\x2a\xba\x34\xd9" - }, - { 4, 8, "password", 1, "", 16, - "\xc1\x2b\x56\x62\x35\xee\xe0\x4c\x21\x25\x98\x97\x0a\x57\x9a\x67" - }, - { 4, 1, "", 4, "salt", 16, - "\x60\x51\xbe\x18\xc2\xf4\xf8\x2c\xbf\x0e\xfe\xe5\x47\x1b\x4b\xb9" - }, - /* nul bytes in password and string */ - { 4, 9, "password", 5, "salt", 32, - "\x74\x10\xe4\x4c\xf4\xfa\x07\xbf\xaa\xc8\xa9\x28\xb1\x72\x7f\xac" - "\x00\x13\x75\xe7\xbf\x73\x84\x37\x0f\x48\xef\xd1\x21\x74\x30\x50" - }, - { 4, 8, "pass\0word", 4, "sa\0lt", 16, - "\xc2\xbf\xfd\x9d\xb3\x8f\x65\x69\xef\xef\x43\x72\xf4\xde\x83\xc0" - }, - { 4, 9, "pass\0word", 5, "sa\0lt", 16, - "\x4b\xa4\xac\x39\x25\xc0\xe8\xd7\xf0\xcd\xb6\xbb\x16\x84\xa5\x6f" - }, - /* bigger key */ - { 8, 8, "password", 4, "salt", 64, - "\xe1\x36\x7e\xc5\x15\x1a\x33\xfa\xac\x4c\xc1\xc1\x44\xcd\x23\xfa" - "\x15\xd5\x54\x84\x93\xec\xc9\x9b\x9b\x5d\x9c\x0d\x3b\x27\xbe\xc7" - "\x62\x27\xea\x66\x08\x8b\x84\x9b\x20\xab\x7a\xa4\x78\x01\x02\x46" - "\xe7\x4b\xba\x51\x72\x3f\xef\xa9\xf9\x47\x4d\x65\x08\x84\x5e\x8d" - }, - /* more rounds */ - { 42, 8, "password", 4, "salt", 16, - "\x83\x3c\xf0\xdc\xf5\x6d\xb6\x56\x08\xe8\xf0\xdc\x0c\xe8\x82\xbd" - }, - /* longer password */ - { 8, 446, - "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do " - "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut " - "enim ad minim veniam, quis nostrud exercitation ullamco laboris " - "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor " - "in reprehenderit in voluptate velit esse cillum dolore eu fugiat " - "nulla pariatur. Excepteur sint occaecat cupidatat non proident, " - "sunt in culpa qui officia deserunt mollit anim id est laborum.", - 6, "salis", 16, - "\x10\x97\x8b\x07\x25\x3d\xf5\x7f\x71\xa1\x62\xeb\x0e\x8a\xd3\x0a" - }, - /* "unicode" */ - { 8, - 16, "\x0d\xb3\xac\x94\xb3\xee\x53\x28\x4f\x4a\x22\x89\x3b\x3c\x24\xae", - 16, "\x3a\x62\xf0\xf0\xdb\xce\xf8\x23\xcf\xcc\x85\x48\x56\xea\x10\x28", - 16, "\x20\x44\x38\x17\x5e\xee\x7c\xe1\x36\xc9\x1b\x49\xa6\x79\x23\xff" - }, - /* very large key */ - { 8, - 16, "\x0d\xb3\xac\x94\xb3\xee\x53\x28\x4f\x4a\x22\x89\x3b\x3c\x24\xae", - 16, "\x3a\x62\xf0\xf0\xdb\xce\xf8\x23\xcf\xcc\x85\x48\x56\xea\x10\x28", - 256, - "\x20\x54\xb9\xff\xf3\x4e\x37\x21\x44\x03\x34\x74\x68\x28\xe9\xed" - "\x38\xde\x4b\x72\xe0\xa6\x9a\xdc\x17\x0a\x13\xb5\xe8\xd6\x46\x38" - "\x5e\xa4\x03\x4a\xe6\xd2\x66\x00\xee\x23\x32\xc5\xed\x40\xad\x55" - "\x7c\x86\xe3\x40\x3f\xbb\x30\xe4\xe1\xdc\x1a\xe0\x6b\x99\xa0\x71" - "\x36\x8f\x51\x8d\x2c\x42\x66\x51\xc9\xe7\xe4\x37\xfd\x6c\x91\x5b" - "\x1b\xbf\xc3\xa4\xce\xa7\x14\x91\x49\x0e\xa7\xaf\xb7\xdd\x02\x90" - "\xa6\x78\xa4\xf4\x41\x12\x8d\xb1\x79\x2e\xab\x27\x76\xb2\x1e\xb4" - "\x23\x8e\x07\x15\xad\xd4\x12\x7d\xff\x44\xe4\xb3\xe4\xcc\x4c\x4f" - "\x99\x70\x08\x3f\x3f\x74\xbd\x69\x88\x73\xfd\xf6\x48\x84\x4f\x75" - "\xc9\xbf\x7f\x9e\x0c\x4d\x9e\x5d\x89\xa7\x78\x39\x97\x49\x29\x66" - "\x61\x67\x07\x61\x1c\xb9\x01\xde\x31\xa1\x97\x26\xb6\xe0\x8c\x3a" - "\x80\x01\x66\x1f\x2d\x5c\x9d\xcc\x33\xb4\xaa\x07\x2f\x90\xdd\x0b" - "\x3f\x54\x8d\x5e\xeb\xa4\x21\x13\x97\xe2\xfb\x06\x2e\x52\x6e\x1d" - "\x68\xf4\x6a\x4c\xe2\x56\x18\x5b\x4b\xad\xc2\x68\x5f\xbe\x78\xe1" - "\xc7\x65\x7b\x59\xf8\x3a\xb9\xab\x80\xcf\x93\x18\xd6\xad\xd1\xf5" - "\x93\x3f\x12\xd6\xf3\x61\x82\xc8\xe8\x11\x5f\x68\x03\x0a\x12\x44" - }, -}; - -int bcrypt_test(void) -{ - unsigned long l; - unsigned char key[1024]; - unsigned int i; - int idx; - struct test *t; - - idx = find_hash("sha512"); - - XMEMSET(key, 0, sizeof(key)); - l = 88; - DO(bcrypt_pbkdf_openbsd("password", 8, (unsigned char*)"salt", 4, 0, idx, key, &l)); - for (i = 1; i < 88; ++i) { - key[0] |= key[i]; - } - if (key[0] == 0) { - return CRYPT_FAIL_TESTVECTOR; - } - if (key[88] || key[89] || key[90]) { - return CRYPT_BUFFER_OVERFLOW; - } -#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1 - printf("BCRYPT overflow-test OK\n"); -#endif - - for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) { - t = &tests[i]; - l = t->keylen; - XMEMSET(key, 0, sizeof(key)); - DO(bcrypt_pbkdf_openbsd(t->password, t->passlen, (unsigned char*)t->salt, t->saltlen, t->rounds, idx, key, &l)); - COMPARE_TESTVECTOR(key, l, t->key, t->keylen, "OpenBSD testvectors", i); - -#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1 - printf("BCRYPT test #%d OK\n", i); -#endif - } - - return CRYPT_OK; -} - -#else -LTC_NOP_TEST(bcrypt_test) -#endif diff --git a/tests/cipher_hash_test.c b/tests/cipher_hash_test.c deleted file mode 100644 index f1ae0c85..00000000 --- a/tests/cipher_hash_test.c +++ /dev/null @@ -1,182 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/* test the ciphers and hashes using their built-in self-tests */ - -#include - -/* cloning a hash_state via memcpy must yield a working/independent copy */ -static int s_hash_state_clone_test(const struct ltc_hash_descriptor *desc, const char *name) -{ - hash_state md, clone1, *clone2; - unsigned char data[200], out[MAXBLOCKSIZE], expect1[MAXBLOCKSIZE], expect2[MAXBLOCKSIZE]; - unsigned long i, hashsize = desc->hashsize; - - for (i = 0; i < sizeof(data); i++) data[i] = (unsigned char)i; - - /* reference digests: expect1 = H(data[0..149]), expect2 = H(data[0..99] || data[150..199]) */ - DO(desc->init(&md)); - DO(desc->process(&md, data, 100)); - DO(desc->process(&md, data + 100, 50)); - DO(desc->done(&md, expect1)); - DO(desc->init(&md)); - DO(desc->process(&md, data, 100)); - DO(desc->process(&md, data + 150, 50)); - DO(desc->done(&md, expect2)); - - /* clone the state after the common prefix, then let the original and the clone diverge */ - DO(desc->init(&md)); - DO(desc->process(&md, data, 100)); - XMEMCPY(&clone1, &md, sizeof(hash_state)); - DO(desc->process(&md, data + 100, 50)); - DO(desc->done(&md, out)); - COMPARE_TESTVECTOR(out, hashsize, expect1, hashsize, name, 0); - DO(desc->process(&clone1, data + 150, 50)); - DO(desc->done(&clone1, out)); - COMPARE_TESTVECTOR(out, hashsize, expect2, hashsize, name, 1); - - /* clone into heap memory and wipe the original before using the clone */ - DO(desc->init(&md)); - DO(desc->process(&md, data, 100)); - clone2 = XMALLOC(sizeof(hash_state)); - if (clone2 == NULL) return CRYPT_MEM; - XMEMCPY(clone2, &md, sizeof(hash_state)); - zeromem(&md, sizeof(hash_state)); - DO(desc->process(clone2, data + 150, 50)); - DO(desc->done(clone2, out)); - XFREE(clone2); - COMPARE_TESTVECTOR(out, hashsize, expect2, hashsize, name, 2); - - return CRYPT_OK; -} - -int cipher_hash_test(void) -{ - int x; - - /* test block ciphers */ - for (x = 0; x < TAB_SIZE && cipher_descriptor[x].name != NULL; x++) { - DOX(cipher_descriptor[x].test(), cipher_descriptor[x].name); - } - - /* explicit AES-NI test */ -#if defined(LTC_AES_NI) - if (aesni_is_supported()) { - DO(aesni_test()); - } - DO(rijndael_test()); -#endif -#if defined(LTC_RIJNDAEL) -#ifndef ENCRYPT_ONLY - DO(aes_test()); -#else - DO(aes_enc_test()); -#endif -#endif - - /* test stream ciphers */ -#ifdef LTC_CHACHA - DO(chacha_test()); -#endif -#ifdef LTC_XCHACHA20 - DO(xchacha20_test()); -#endif -#ifdef LTC_SALSA20 - DO(salsa20_test()); -#endif -#ifdef LTC_XSALSA20 - DO(xsalsa20_test()); -#endif -#ifdef LTC_SOSEMANUK - DO(sosemanuk_test()); -#endif -#ifdef LTC_RABBIT - DO(rabbit_test()); -#endif -#ifdef LTC_RC4_STREAM - DO(rc4_stream_test()); -#endif -#ifdef LTC_SOBER128_STREAM - DO(sober128_stream_test()); -#endif - - /* test hashes */ - for (x = 0; x < TAB_SIZE && hash_descriptor[x].name != NULL; x++) { - DOX(hash_descriptor[x].test(), hash_descriptor[x].name); - /* test that state can be cloned via memcpy */ - DOX(s_hash_state_clone_test(&hash_descriptor[x], hash_descriptor[x].name), hash_descriptor[x].name); - } - - /* explicit SHA-NI + portable implementations tests */ - if (shani_is_supported()) { -#if defined(LTC_SHA256) && defined(LTC_SHA256_X86) - DO(sha256_x86_test()); - DO(s_hash_state_clone_test(&sha256_x86_desc, "sha256-x86-clone")); -#endif -#if defined(LTC_SHA224) && defined(LTC_SHA224_X86) - DO(sha224_x86_test()); - DO(s_hash_state_clone_test(&sha224_x86_desc, "sha224-x86-clone")); -#endif -#if defined(LTC_SHA1) && defined(LTC_SHA1_X86) - DO(sha1_x86_test()); - DO(s_hash_state_clone_test(&sha1_x86_desc, "sha1-x86-clone")); -#endif - } - if (sha512ni_is_supported()) { -#if defined(LTC_SHA512) && defined(LTC_SHA512_X86) - DO(sha512_x86_test()); - DO(s_hash_state_clone_test(&sha512_x86_desc, "sha512-x86-clone")); -#endif -#if defined(LTC_SHA384) && defined(LTC_SHA384_X86) - DO(sha384_x86_test()); - DO(s_hash_state_clone_test(&sha384_x86_desc, "sha384-x86-clone")); -#endif -#if defined(LTC_SHA512_224) && defined(LTC_SHA512_224_X86) - DO(sha512_224_x86_test()); - DO(s_hash_state_clone_test(&sha512_224_x86_desc, "sha512-224-x86-clone")); -#endif -#if defined(LTC_SHA512_256) && defined(LTC_SHA512_256_X86) - DO(sha512_256_x86_test()); - DO(s_hash_state_clone_test(&sha512_256_x86_desc, "sha512-256-x86-clone")); -#endif - } -#if defined(LTC_SHA256) - DO(sha256_c_test()); - DO(s_hash_state_clone_test(&sha256_portable_desc, "sha256-c-clone")); -#endif -#if defined(LTC_SHA224) - DO(sha224_c_test()); - DO(s_hash_state_clone_test(&sha224_portable_desc, "sha224-c-clone")); -#endif -#if defined(LTC_SHA1) - DO(sha1_c_test()); - DO(s_hash_state_clone_test(&sha1_portable_desc, "sha1-c-clone")); -#endif -#if defined(LTC_SHA512) - DO(sha512_c_test()); - DO(s_hash_state_clone_test(&sha512_portable_desc, "sha512-c-clone")); -#endif -#if defined(LTC_SHA384) - DO(sha384_c_test()); - DO(s_hash_state_clone_test(&sha384_portable_desc, "sha384-c-clone")); -#endif -#if defined(LTC_SHA512_224) - DO(sha512_224_c_test()); - DO(s_hash_state_clone_test(&sha512_224_portable_desc, "sha512-224-c-clone")); -#endif -#if defined(LTC_SHA512_256) - DO(sha512_256_c_test()); - DO(s_hash_state_clone_test(&sha512_256_portable_desc, "sha512-256-c-clone")); -#endif -#ifdef LTC_SHA3 - /* SHAKE128 + SHAKE256 tests are a bit special */ - DOX(sha3_shake_test(), "sha3_shake"); -#endif -#ifdef LTC_TURBO_SHAKE - DO(turbo_shake_test()); -#endif -#ifdef LTC_KANGAROO_TWELVE - DO(kangaroo_twelve_test()); -#endif - - return 0; -} diff --git a/tests/common.c b/tests/common.c deleted file mode 100644 index 2cfb3dea..00000000 --- a/tests/common.c +++ /dev/null @@ -1,191 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include - -/** - @file common.c - - Steffen Jaeckel -*/ - -LTC_NOP_TEST(nop_test) - -void run_cmd(int res, int line, const char *file, const char *cmd, const char *algorithm) -{ - if (res != CRYPT_OK) { -#ifdef LTC_NO_TEST - if (res == CRYPT_NOP) - return; -#endif - fprintf(stderr, "%s (%d)%s%s\n%s:%d:%s\n", - error_to_string(res), res, - (algorithm ? " - " : ""), (algorithm ? algorithm : ""), - file, line, cmd); - if (res != CRYPT_NOP) { - exit(EXIT_FAILURE); - } - } -} - -void print_hex(const char* what, const void* v, const unsigned long l) -{ - const unsigned char* p = v; - unsigned long x, y = 0, z; - fprintf(stderr, "%s contents: \n", what); - for (x = 0; x < l; ) { - fprintf(stderr, "%02X ", p[x]); - if (!(++x % 16) || x == l) { - if((x % 16) != 0) { - z = 16 - (x % 16); - if(z >= 8) - fprintf(stderr, " "); - for (; z != 0; --z) { - fprintf(stderr, " "); - } - } - fprintf(stderr, " | "); - for(; y < x; y++) { - if((y % 8) == 0) - fprintf(stderr, " "); - if(isgraph(p[y])) - fprintf(stderr, "%c", p[y]); - else - fprintf(stderr, "."); - } - fprintf(stderr, "\n"); - } - else if((x % 8) == 0) { - fprintf(stderr, " "); - } - } -} - -#ifdef LTC_TEST_READDIR - -#include -#include -#include - -static off_t fsize(const char *filename) -{ - struct stat st; - - if (stat(filename, &st) == 0) { - if (S_ISDIR(st.st_mode)) - return -2; - /* filename is no regular file */ - if (!S_ISREG(st.st_mode)) - return 0; - return st.st_size; - } - - return -1; -} -static DIR *s_opendir(const char *path, char *mypath, unsigned long l) -{ -#ifdef CMAKE_SOURCE_DIR -#define SOURCE_PREFIX CMAKE_SOURCE_DIR "/" -#else -#define SOURCE_PREFIX "" -#endif - DIR *d = NULL; - int r = snprintf(mypath, l, "%s%s", SOURCE_PREFIX, path); - if (r > 0 && (unsigned int)r < l) { - d = opendir(mypath); - } - - return d; -} - -static int s_read_and_process(FILE *f, unsigned long sz, void *ctx, dir_iter_cb process) -{ - int err = CRYPT_OK; - void* buf; - if (f == NULL) - return CRYPT_FILE_NOTFOUND; - buf = XMALLOC(sz + 1); - if (buf == NULL) - return CRYPT_MEM; - if (fread(buf, 1, sz, f) != sz) { - err = CRYPT_ERROR; - goto out; - } - ((unsigned char *)buf)[sz] = 0x0; - err = process(buf, sz, ctx); -out: - XFREE(buf); - return err; -} - -int test_process_dir(const char *path, void *ctx, dir_iter_cb iter, dir_fiter_cb fiter, dir_cleanup_cb cleanup, const char *test) -{ - char mypath[PATH_MAX]; - DIR *d = s_opendir(path, mypath, sizeof(mypath)); - struct dirent *de; - char fname[PATH_MAX]; - FILE *f = NULL; - off_t fsz; - int err = CRYPT_FILE_NOTFOUND; - if (d == NULL) - return CRYPT_FILE_NOTFOUND; - while((de = readdir(d)) != NULL) { - fname[0] = '\0'; - if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0 || strcmp(de->d_name, "README.txt") == 0) - continue; - strcat(fname, mypath); - strcat(fname, "/"); - strcat(fname, de->d_name); - fsz = fsize(fname); - if (fsz == -2) - continue; - if (fsz == -1) { - err = CRYPT_FILE_NOTFOUND; - break; - } -#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1 - fprintf(stderr, "%s: Try to process %s\n", test, fname); -#endif - f = fopen(fname, "rb"); - - if (iter) { - err = s_read_and_process(f, fsz, ctx, iter); - } else if (fiter) { - err = fiter(f, ctx); - } else { - err = CRYPT_NOP; -#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1 - fprintf(stderr, "%s: No call-back set for %s\n", test, fname); -#endif - } - - if (err == CRYPT_NOP) { -#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1 - fprintf(stderr, "%s: Skip: %s\n", test, fname); -#endif - err = CRYPT_OK; - goto continue_loop; - } else if (err != CRYPT_OK) { -#if defined(LTC_TEST_DBG) - fprintf(stderr, "%s: Test %s failed (cause: %s).\n\n", test, fname, error_to_string(err)); -#else - LTC_UNUSED_PARAM(test); -#endif - break; - } - if (cleanup != NULL) { - cleanup(ctx); - } - -continue_loop: - if (f != NULL) fclose(f); - f = NULL; - } - if (f != NULL) fclose(f); - closedir(d); - return err; -} -#endif - - -prng_state yarrow_prng; diff --git a/tests/common.h b/tests/common.h deleted file mode 100644 index 82823080..00000000 --- a/tests/common.h +++ /dev/null @@ -1,61 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#ifndef DEMOS_COMMON_H_ -#define DEMOS_COMMON_H_ - -#include - -extern prng_state yarrow_prng; -#if defined(LTC_MDSA) -extern const unsigned char ltc_dsa_private_test_key[]; -extern const unsigned long ltc_dsa_private_test_key_sz; -int dsa_key_cmp(const int should_type, const dsa_key *should, const dsa_key *is); -#endif -#if defined(LTC_MRSA) -extern const unsigned char ltc_rsa_private_test_key[]; -extern const unsigned long ltc_rsa_private_test_key_sz; -int rsa_key_cmp(const int should_type, const rsa_key *should, const rsa_key *is); -#endif -#if defined(LTC_MECC) -extern const unsigned char ltc_ecc_long_pri_test_key[]; -extern const unsigned long ltc_ecc_long_pri_test_key_sz; -int ecc_key_cmp(const int should_type, const ecc_key *should, const ecc_key *is); -#endif - -#ifdef LTC_VERBOSE -#define DO(x) do { fprintf(stderr, "%s:\n", #x); run_cmd((x), __LINE__, __FILE__, #x, NULL); } while (0) -#define DOX(x, str) do { fprintf(stderr, "%s - %s:\n", #x, (str)); run_cmd((x), __LINE__, __FILE__, #x, (str)); } while (0) -#define SHOULD_FAIL(x) do { fprintf(stderr, "%s:\n", #x); run_cmd((x) != CRYPT_OK ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR, __LINE__, __FILE__, #x, NULL); } while (0) -#define SHOULD_FAIL_WITH(x, e) do { fprintf(stderr, "%s:\n", #x); run_cmd((x) == (e) ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR, __LINE__, __FILE__, #x, NULL); } while (0) -#define ENSURE(x) do { fprintf(stderr, "%s:\n", #x); run_cmd(((x)) ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR, __LINE__, __FILE__, #x, NULL); } while (0) -#define ENSUREX(x, str) do { fprintf(stderr, "%s:\n", #x); run_cmd(((x)) ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR, __LINE__, __FILE__, #x, (str)); } while (0) -#else -#define DO(x) do { run_cmd((x), __LINE__, __FILE__, #x, NULL); } while (0) -#define DOX(x, str) do { run_cmd((x), __LINE__, __FILE__, #x, (str)); } while (0) -#define SHOULD_FAIL(x) do { run_cmd((x) != CRYPT_OK ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR, __LINE__, __FILE__, #x, NULL); } while (0) -#define SHOULD_FAIL_WITH(x, e) do { run_cmd((x) == (e) ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR, __LINE__, __FILE__, #x, NULL); } while (0) -#define ENSURE(x) do { run_cmd(((x)) ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR, __LINE__, __FILE__, #x, NULL); } while (0) -#define ENSUREX(x, str) do { run_cmd(((x)) ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR, __LINE__, __FILE__, #x, (str)); } while (0) -#endif - -#define COMPARE_TESTVECTOR(i, il, s, sl, wa, wi) do { DO(ltc_do_compare_testvector((i), (il), (s), (sl), (wa), (wi))); } while(0) - -#if !((defined(_WIN32) || defined(_WIN32_WCE)) && !defined(__GNUC__)) && !defined(LTC_NO_FILE) -#define LTC_TEST_READDIR - -typedef int (*dir_iter_cb)(const void *d, unsigned long l, void* ctx); -typedef int (*dir_fiter_cb)(FILE *f, void* ctx); -typedef void (*dir_cleanup_cb)(void* ctx); - -int test_process_dir(const char *path, void *ctx, dir_iter_cb iter, dir_fiter_cb fiter, dir_cleanup_cb cleanup, const char *test); -#endif - -int ltc_test_nop(void); -int nop_test(void); -#define LTC_NOP_TEST(n) int n(void) { return CRYPT_NOP; } - -void run_cmd(int res, int line, const char *file, const char *cmd, const char *algorithm); - -void print_hex(const char* what, const void* v, const unsigned long l); - -#endif /* DEMOS_COMMON_H_ */ diff --git a/tests/deprecated_test.c b/tests/deprecated_test.c deleted file mode 100644 index cce4432f..00000000 --- a/tests/deprecated_test.c +++ /dev/null @@ -1,88 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#ifndef LTC_NO_DEPRECATED_APIS -#define LTC_DEPRECATED(x) -#include - -#ifdef LTC_MECC -static void s_ecc_test(void) -{ - const ltc_ecc_curve* dp; - unsigned char buf[128]; - unsigned long len; - ecc_key key; - int stat; - unsigned char data16[16] = { 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1 }; - - /* We need an MPI provider for ECC */ - if (ltc_mp.name == NULL) return; - - ENSURE(ltc_ecc_curves[0].OID != NULL); - - DO(ecc_find_curve(ltc_ecc_curves[0].OID, &dp)); - DO(ecc_make_key_ex(&yarrow_prng, find_prng ("yarrow"), &key, dp)); - - len = sizeof(buf); - DO(ecc_sign_hash(data16, 16, buf, &len, &yarrow_prng, find_prng ("yarrow"), &key)); - stat = 0; - DO(ecc_verify_hash(buf, len, data16, 16, &stat, &key)); - - SHOULD_FAIL(ecc_verify_hash_rfc7518(buf, len, data16, 16, &stat, &key)); - - len = sizeof(buf); - DO(ecc_sign_hash_rfc7518(data16, 16, buf, &len, &yarrow_prng, find_prng ("yarrow"), &key)); - stat = 0; - DO(ecc_verify_hash_rfc7518(buf, len, data16, 16, &stat, &key)); - - SHOULD_FAIL(ecc_verify_hash(buf, len, data16, 16, &stat, &key)); - - ecc_free(&key); -} -#endif - -#ifdef LTC_MRSA -static void s_rsa_test(void) -{ - rsa_key key, pubkey; - int stat; - const unsigned char tv[] = "test"; - unsigned char buf0[1024], buf1[1024]; - unsigned long buf0len, buf1len; - - /* We need an MPI provider for RSA */ - if (ltc_mp.name == NULL) return; - - DO(rsa_import(ltc_rsa_private_test_key, ltc_rsa_private_test_key_sz, &key)); - DO(rsa_import(ltc_openssl_public_rsa, ltc_openssl_public_rsa_sz, &pubkey)); - - buf0len = sizeof(buf0); - DO(rsa_sign_hash_ex(tv, 4, buf0, &buf0len, LTC_PKCS_1_PSS, &yarrow_prng, find_prng("yarrow"), find_hash("sha1"), 8, &key)); - buf1len = sizeof(buf1); - DO(rsa_verify_hash_ex(buf0, buf0len, tv, 4, LTC_PKCS_1_PSS, find_hash("sha1"), 8, &stat, &pubkey)); - ENSURE(stat == 1); - - buf0len = sizeof(buf0); - DO(rsa_encrypt_key_ex(tv, 4, buf0, &buf0len, NULL, 0, &yarrow_prng, find_prng("yarrow"), find_hash("sha1"), LTC_PKCS_1_OAEP, &pubkey)); - buf1len = sizeof(buf1); - DO(rsa_decrypt_key_ex(buf0, buf0len, buf1, &buf1len, NULL, 0, find_hash("sha1"), LTC_PKCS_1_OAEP, &stat, &key)); - ENSURE(stat == 1); - COMPARE_TESTVECTOR(buf1, buf1len, tv, 4, "s_rsa_test", 0); - - rsa_free(&pubkey); - rsa_free(&key); -} -#endif -#endif /* LTC_NO_DEPRECATED_APIS */ - -int deprecated_test(void) -{ -#ifndef LTC_NO_DEPRECATED_APIS -#ifdef LTC_MECC - s_ecc_test(); -#endif -#ifdef LTC_MRSA - s_rsa_test(); -#endif -#endif /* LTC_NO_DEPRECATED_APIS */ - return 0; -} diff --git a/tests/der_test.c b/tests/der_test.c deleted file mode 100644 index f8625a2b..00000000 --- a/tests/der_test.c +++ /dev/null @@ -1,1750 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#if !defined(LTC_DER) -LTC_NOP_TEST(der_test) -#else - -#include - -#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 2 -#define LTC_DER_TESTS_PRINT_FLEXI -#endif - -static const char s_der_tests_stinky_root_cert[] = - "MIIFETCCA/mgAwIBAgIQbv53JNmv518t5lkCHE272jANBgkqhkiG9w0BAQUFADCB" - "lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug" - "Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho" - "dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt" - "T2JqZWN0MB4XDTA4MDQyOTAwMDAwMFoXDTEwMDQyOTIzNTk1OVowgbUxCzAJBgNV" - "BAYTAlVTMQ4wDAYDVQQRDAU0NDE0MzELMAkGA1UECAwCT0gxGTAXBgNVBAcMEE1h" - "eWZpZWxkIFZpbGxhZ2UxEDAOBgNVBAkMB1N1aXRlIEExFDASBgNVBAkMCzc2NyBC" - "ZXRhIERyMSIwIAYDVQQKDBlQcmVlbXB0aXZlIFNvbHV0aW9ucywgTExDMSIwIAYD" - "VQQDDBlQcmVlbXB0aXZlIFNvbHV0aW9ucywgTExDMIIBIjANBgkqhkiG9w0BAQEF" - "AAOCAQ8AMIIBCgKCAQEAzH7ZBkMcBuHx8d2f10RGTHAf7gzzVteGbOihJGH2BwlS" - "ZvNp6WEE4DfL+s1vp0wzk1XeLN5tRjg2qum9YqyCk7okh7pXGy46f5mWbLQiefGA" - "j5UXRcr6WJ3xeACdbXxKrYMV0REia+4Jb2UbFA8S81PjhRon6vcRz76ziUWwt8NC" - "igX+4ZC0skhhKzKszel6KGL7bJCtLG7ukw9DZCrvPCRcKFeM/GwQ6ACMgP88CSCL" - "t1fbIXDH1vd/x2XM3QlaSDN6hYDbef8m1T+9TCkXVKeqG1GYjSUrHzYnCZUmTRrR" - "38jgC3qXxiIpDKW105uM0nlXe2XF9c+ot2MdWvV4TwIDAQABo4IBOTCCATUwHwYD" - "VR0jBBgwFoAU2u1kdBScFDyr3ZmpvVsoTYs8ydgwHQYDVR0OBBYEFK+1HzZE4i28" - "oLIzuqlFR9SspiCIMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBMGA1Ud" - "JQQMMAoGCCsGAQUFBwMDMBEGCWCGSAGG+EIBAQQEAwIEEDBGBgNVHSAEPzA9MDsG" - "DCsGAQQBsjEBAgEDAjArMCkGCCsGAQUFBwIBFh1odHRwczovL3NlY3VyZS5jb21v" - "ZG8ubmV0L0NQUzBCBgNVHR8EOzA5MDegNaAzhjFodHRwOi8vY3JsLnVzZXJ0cnVz" - "dC5jb20vVVROLVVTRVJGaXJzdC1PYmplY3QuY3JsMCEGA1UdEQQaMBiBFnN1cHBv" - "cnRAcHJlZW1wdGl2ZS5jb20wDQYJKoZIhvcNAQEFBQADggEBAC+JM26Dokvonudl" - "JXe/Yun7IBhimkagZUjbk9l/GQWN6i+v1o95UJ1wGJtBdm2+MxbSaPoNTDZR4B+2" - "lYL9MW57UVmePrnfUPXQKZZG+8gTRDz8+7ol/CEAKmS3MLKCRcH5oe+J5345sGxi" - "FC/KWNKedTNraW95xlg8NTlL2yRP7TMsjvBxgLmkbaFUoXzPTbQWmtovIagIT8GC" - "JeXwdFaRjbamiz3Irl+u7x/mhxdza6RvgBYylXRFMudANpeGsV7gDXlnfzpFDKHQ" - "niVwB7P5sbPFIlmIc+4/xRItkLIRjCVXaepgN9KYu3VOgiSDI6wXiTwP44/LUXQM" - "hetwa7s="; -const char ltc_der_tests_cacert_root_cert[] = - "MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290" - "IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB" - "IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA" - "Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO" - "BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi" - "MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ" - "ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC" - "CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ" - "8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6" - "zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y" - "fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7" - "w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc" - "G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k" - "epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q" - "laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ" - "QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU" - "fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826" - "YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w" - "ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY" - "gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe" - "MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0" - "IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy" - "dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw" - "czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0" - "dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl" - "aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC" - "AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg" - "b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB" - "ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc" - "nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg" - "18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c" - "gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl" - "Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY" - "sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T" - "SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF" - "CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum" - "GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk" - "zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW" - "omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD"; -const unsigned long ltc_der_tests_cacert_root_cert_size = sizeof(ltc_der_tests_cacert_root_cert); - -#ifdef LTC_DER_TESTS_PRINT_FLEXI - -#define LTC_DER_PRINT_FLEXI_NO_MAIN -#include "../demos/der_print_flexi.c" - -static void s_der_tests_print_flexi(ltc_asn1_list* l) -{ - fprintf(stderr, "\n\n"); - s_der_print_flexi_i(l, 0); - fprintf(stderr, "\n\n"); -} - -#else -static void s_der_tests_print_flexi(ltc_asn1_list* l) -{ - LTC_UNUSED_PARAM(l); -} -#endif - -#ifndef ASN1_FMTSTRING_FMT -#define ASN1_FMTSTRING_FMT "line: %d, type=%d, size=%lu, data=%p, self=%p, next=%p, prev=%p, parent=%p, child=%p" -#define ASN1_FMTSTRING_VAL(l) __LINE__, (l)->type, (l)->size, (l)->data, (l), (l)->next, (l)->prev, (l)->parent, (l)->child -#endif - -#define ASN1_ERR(l) fprintf(stderr, ASN1_FMTSTRING_FMT "\n", ASN1_FMTSTRING_VAL(l)); \ - exit(EXIT_FAILURE) - -#define CHECK_ASN1_HAS(l, w) do { if ((l)->w == NULL) { \ - ASN1_ERR(l);\ -} } while(0) - -#define CHECK_ASN1_HAS_NO(l, w) do { if ((l)->w != NULL) { \ - ASN1_ERR(l);\ -} } while(0) - -#define CHECK_ASN1_TYPE(l, t) do { if ((l)->type != (t)) { \ - ASN1_ERR(l);\ -} } while(0) - -#define CHECK_ASN1_HAS_CHILD(l) CHECK_ASN1_HAS(l, child) -#define CHECK_ASN1_HAS_NO_CHILD(l) CHECK_ASN1_HAS_NO(l, child) -#define CHECK_ASN1_HAS_NEXT(l) CHECK_ASN1_HAS(l, next) -#define CHECK_ASN1_HAS_NO_NEXT(l) CHECK_ASN1_HAS_NO(l, next) -#define CHECK_ASN1_HAS_DATA(l) CHECK_ASN1_HAS(l, data) -#define CHECK_ASN1_HAS_NO_DATA(l) CHECK_ASN1_HAS_NO(l, data) - -static void der_cacert_test(void) -{ - unsigned char buf[sizeof(ltc_der_tests_cacert_root_cert)]; - unsigned long len1 = sizeof(buf), len2; - - ltc_asn1_list *decoded_list, *l, *l1, *l2; - - DO(base64_decode(s_der_tests_stinky_root_cert, sizeof(s_der_tests_stinky_root_cert), buf, &len1)); - len2 = len1; - DO(der_decode_sequence_flexi(buf, &len2, &decoded_list)); - der_free_sequence_flexi(decoded_list); - - len1 = sizeof(buf); - DO(base64_decode(ltc_der_tests_cacert_root_cert, sizeof(ltc_der_tests_cacert_root_cert), buf, &len1)); - len2 = len1; - DO(der_decode_sequence_flexi(buf, &len2, &decoded_list)); - CHECK_ASN1_TYPE(decoded_list, LTC_ASN1_SEQUENCE); - CHECK_ASN1_HAS_DATA(decoded_list); - - der_sequence_shrink(decoded_list); - - CHECK_ASN1_TYPE(decoded_list, LTC_ASN1_SEQUENCE); - CHECK_ASN1_HAS_NO_DATA(decoded_list); - - s_der_tests_print_flexi(decoded_list); - - l = decoded_list; - - /* -SEQUENCE(3 elem) - SEQUENCE(8 elem) - */ - - CHECK_ASN1_TYPE(l, LTC_ASN1_SEQUENCE); - CHECK_ASN1_HAS_CHILD(l); - CHECK_ASN1_HAS_NO_NEXT(l); - - l = l->child; - - CHECK_ASN1_TYPE(l, LTC_ASN1_SEQUENCE); - CHECK_ASN1_HAS_CHILD(l); - CHECK_ASN1_HAS_NEXT(l); - - l1 = l->child; - - /* - [0](1) - INTEGER 2 - */ - - CHECK_ASN1_TYPE(l1, LTC_ASN1_CUSTOM_TYPE); - CHECK_ASN1_HAS_CHILD(l1); - CHECK_ASN1_HAS_NEXT(l1); - - l2 = l1->child; - - CHECK_ASN1_TYPE(l2, LTC_ASN1_INTEGER); - CHECK_ASN1_HAS_NO_CHILD(l2); - CHECK_ASN1_HAS_NO_NEXT(l2); - - l1 = l1->next; - - /* - INTEGER 0 - */ - - CHECK_ASN1_TYPE(l1, LTC_ASN1_INTEGER); - CHECK_ASN1_HAS_NO_CHILD(l1); - CHECK_ASN1_HAS_NEXT(l1); - - l1 = l1->next; - - /* - SEQUENCE(2 elem) - OBJECT IDENTIFIER 1.2.840.113549.1.1.4 - NULL - */ - - CHECK_ASN1_TYPE(l1, LTC_ASN1_SEQUENCE); - CHECK_ASN1_HAS_CHILD(l1); - CHECK_ASN1_HAS_NEXT(l1); - - l2 = l1->child; - - CHECK_ASN1_TYPE(l2, LTC_ASN1_OBJECT_IDENTIFIER); - CHECK_ASN1_HAS_NO_CHILD(l2); - CHECK_ASN1_HAS_NEXT(l2); - - l2 = l2->next; - - CHECK_ASN1_TYPE(l2, LTC_ASN1_NULL); - CHECK_ASN1_HAS_NO_CHILD(l2); - CHECK_ASN1_HAS_NO_NEXT(l2); - - /* - SEQUENCE(4 elem) - SET(1 elem) - SEQUENCE(2 elem) - OBJECT IDENTIFIER 2.5.4.10 - PrintableString Root CA - SET(1 elem) - SEQUENCE(2 elem) - OBJECT IDENTIFIER 2.5.4.11 - PrintableString http://www.cacert.org - SET(1 elem) - SEQUENCE(2 elem) - OBJECT IDENTIFIER 2.5.4.3 - PrintableString CA Cert Signing Authority - SET(1 elem) - SEQUENCE(2 elem) - OBJECT IDENTIFIER 1.2.840.113549.1.9.1 - IA5String support@cacert.org - */ - - l = l->next; - - /* - SEQUENCE(2 elem) - OBJECT IDENTIFIER 1.2.840.113549.1.1.4 - NULL - */ - - CHECK_ASN1_TYPE(l, LTC_ASN1_SEQUENCE); - CHECK_ASN1_HAS_CHILD(l); - CHECK_ASN1_HAS_NEXT(l); - - l1 = l->child; - - CHECK_ASN1_TYPE(l1, LTC_ASN1_OBJECT_IDENTIFIER); - CHECK_ASN1_HAS_NO_CHILD(l1); - CHECK_ASN1_HAS_NEXT(l1); - - l1 = l1->next; - - CHECK_ASN1_TYPE(l1, LTC_ASN1_NULL); - CHECK_ASN1_HAS_NO_CHILD(l1); - CHECK_ASN1_HAS_NO_NEXT(l1); - - l = l->next; - - /* - BIT STRING(4096 bit) - */ - - CHECK_ASN1_TYPE(l, LTC_ASN1_BIT_STRING); - CHECK_ASN1_HAS_NO_CHILD(l); - CHECK_ASN1_HAS_NO_NEXT(l); - - der_free_sequence_flexi(decoded_list); -} - -static void der_set_test(void) -{ - ltc_asn1_list list[10]; - static const unsigned char oct_str[] = { 1, 2, 3, 4 }; - static const unsigned char bin_str[] = { 1, 0, 0, 1 }; - static const unsigned long int_val = 12345678UL; - - char strs[10][10]; - unsigned char outbuf[128]; - unsigned long x, val, outlen; - - /* make structure and encode it */ - LTC_SET_ASN1(list, 0, LTC_ASN1_OCTET_STRING, oct_str, sizeof(oct_str)); - LTC_SET_ASN1(list, 1, LTC_ASN1_BIT_STRING, bin_str, sizeof(bin_str)); - LTC_SET_ASN1(list, 2, LTC_ASN1_SHORT_INTEGER, &int_val, 1); - - /* encode it */ - outlen = sizeof(outbuf); - DO(der_encode_set(list, 3, outbuf, &outlen)); - - /* first let's test the set_decoder out of order to see what happens, we should get all the fields we expect even though they're in a diff order */ - LTC_SET_ASN1(list, 0, LTC_ASN1_BIT_STRING, strs[1], sizeof(strs[1])); - LTC_SET_ASN1(list, 1, LTC_ASN1_SHORT_INTEGER, &val, 1); - LTC_SET_ASN1(list, 2, LTC_ASN1_OCTET_STRING, strs[0], sizeof(strs[0])); - - DO(der_decode_set(outbuf, outlen, list, 3)); - - /* now compare the items */ - if (memcmp(strs[0], oct_str, sizeof(oct_str))) { - fprintf(stderr, "error decoding set using der_decode_set (oct_str is wrong):\n"); - exit(EXIT_FAILURE); - } - - if (memcmp(strs[1], bin_str, sizeof(bin_str))) { - fprintf(stderr, "error decoding set using der_decode_set (bin_str is wrong):\n"); - exit(EXIT_FAILURE); - } - - if (val != int_val) { - fprintf(stderr, "error decoding set using der_decode_set (int_val is wrong):\n"); - exit(EXIT_FAILURE); - } - - strcpy(strs[0], "one"); - strcpy(strs[1], "one2"); - strcpy(strs[2], "two"); - strcpy(strs[3], "aaa"); - strcpy(strs[4], "aaaa"); - strcpy(strs[5], "aab"); - strcpy(strs[6], "aaab"); - strcpy(strs[7], "bbb"); - strcpy(strs[8], "bbba"); - strcpy(strs[9], "bbbb"); - - for (x = 0; x < 10; x++) { - LTC_SET_ASN1(list, x, LTC_ASN1_PRINTABLE_STRING, strs[x], XSTRLEN(strs[x])); - } - - outlen = sizeof(outbuf); - DO(der_encode_setof(list, 10, outbuf, &outlen)); - - for (x = 0; x < 10; x++) { - LTC_SET_ASN1(list, x, LTC_ASN1_PRINTABLE_STRING, strs[x], sizeof(strs[x]) - 1); - } - XMEMSET(strs, 0, sizeof(strs)); - - DO(der_decode_set(outbuf, outlen, list, 10)); - - /* now compare */ - for (x = 1; x < 10; x++) { - if (!(XSTRLEN(strs[x-1]) <= XSTRLEN(strs[x])) && strcmp(strs[x-1], strs[x]) >= 0) { - fprintf(stderr, "error SET OF order at %lu is wrong\n", x); - exit(EXIT_FAILURE); - } - } - -} - -static void s_der_oid_test(void) -{ - static const unsigned char oid_x690_8_19_5_example[] = { 0x06, 0x03, 0x88, 0x37, 0x03 }; - unsigned long len, oid[3]; - unsigned char buf[64]; - - ltc_asn1_list *decoded_list, static_list[1]; - - len = sizeof(oid_x690_8_19_5_example); - DO(der_decode_sequence_flexi(oid_x690_8_19_5_example, &len, &decoded_list)); - - LTC_SET_ASN1(static_list, 0, LTC_ASN1_OBJECT_IDENTIFIER, (void *)decoded_list->data, decoded_list->size); - len = sizeof(buf); - DO(der_encode_object_identifier(decoded_list->data, decoded_list->size, buf, &len)); - der_sequence_free(decoded_list); - - COMPARE_TESTVECTOR(buf, len, oid_x690_8_19_5_example, sizeof(oid_x690_8_19_5_example), "OID X6.90 Ch. 8.19.5 Example", 0); - - oid[0] = 3; - oid[1] = 4; - oid[2] = 5; - - len = sizeof(buf); - SHOULD_FAIL(der_encode_object_identifier(oid, 3, buf, &len)); - len = sizeof(buf); - SHOULD_FAIL(der_length_object_identifier(oid, 3, &len)); -} - -/* we are encoding - - SEQUENCE { - PRINTABLE "printable" - IA5 "ia5" - SEQUENCE { - INTEGER 12345678 - UTCTIME { 91, 5, 6, 16, 45, 40, 1, 7, 0 } - GENERALIZEDTIME { 2017, 03, 21, 10, 21, 12, 4, 1, 2, 0 } - SEQUENCE { - OCTET STRING { 1, 2, 3, 4 } - BIT STRING { 1, 0, 0, 1 } - SEQUENCE { - OID { 1, 2, 840, 113549 } - NULL - SET OF { - PRINTABLE "333" -- WILL GET SORTED - PRINTABLE "222" - } - } - } - } - -*/ -static void der_flexi_test(void) -{ - static const char printable_str[] = "printable"; - static const char set1_str[] = "333"; - static const char set2_str[] = "222"; - static const char ia5_str[] = "ia5"; - static const unsigned long int_val = 12345678UL; - static const ltc_utctime utctime = { 91, 5, 6, 16, 45, 40, 1, 7, 0 }; - static const ltc_generalizedtime gtime = { 2017, 03, 21, 10, 21, 12, 421, 1, 2, 0 }; - static const unsigned char oct_str[] = { 1, 2, 3, 4 }; - static const unsigned char bit_str[] = { 1, 0, 0, 1 }; - static const unsigned long oid_str[] = { 1, 2, 840, 113549 }; - - unsigned char encode_buf[192]; - unsigned long encode_buf_len, decode_len; - - ltc_asn1_list static_list[5][4], *decoded_list, *l; - - /* build list */ - LTC_SET_ASN1(static_list[0], 0, LTC_ASN1_PRINTABLE_STRING, (void *)printable_str, XSTRLEN(printable_str)); - LTC_SET_ASN1(static_list[0], 1, LTC_ASN1_IA5_STRING, (void *)ia5_str, XSTRLEN(ia5_str)); - LTC_SET_ASN1(static_list[0], 2, LTC_ASN1_SEQUENCE, static_list[1], 4); - - LTC_SET_ASN1(static_list[1], 0, LTC_ASN1_SHORT_INTEGER, (void *)&int_val, 1); - LTC_SET_ASN1(static_list[1], 1, LTC_ASN1_UTCTIME, (void *)&utctime, 1); - LTC_SET_ASN1(static_list[1], 2, LTC_ASN1_GENERALIZEDTIME, (void *)>ime, 1); - LTC_SET_ASN1(static_list[1], 3, LTC_ASN1_SEQUENCE, static_list[2], 3); - - LTC_SET_ASN1(static_list[2], 0, LTC_ASN1_OCTET_STRING, (void *)oct_str, 4); - LTC_SET_ASN1(static_list[2], 1, LTC_ASN1_BIT_STRING, (void *)bit_str, 4); - LTC_SET_ASN1(static_list[2], 2, LTC_ASN1_SEQUENCE, static_list[3], 3); - - LTC_SET_ASN1(static_list[3], 0, LTC_ASN1_OBJECT_IDENTIFIER,(void *)oid_str, 4); - LTC_SET_ASN1(static_list[3], 1, LTC_ASN1_NULL, NULL, 0); - LTC_SET_ASN1(static_list[3], 2, LTC_ASN1_SETOF, static_list[4], 2); - - LTC_SET_ASN1(static_list[4], 0, LTC_ASN1_PRINTABLE_STRING, set1_str, XSTRLEN(set1_str)); - LTC_SET_ASN1(static_list[4], 1, LTC_ASN1_PRINTABLE_STRING, set2_str, XSTRLEN(set2_str)); - - /* encode it */ - encode_buf_len = sizeof(encode_buf); - DO(der_encode_sequence(&static_list[0][0], 3, encode_buf, &encode_buf_len)); - -#if 0 - { - FILE *f; - f = fopen("t.bin", "wb"); - fwrite(encode_buf, 1, encode_buf_len, f); - fclose(f); - } -#endif - - /* decode with flexi */ - decode_len = encode_buf_len; - DO(der_decode_sequence_flexi(encode_buf, &decode_len, &decoded_list)); - - if (decode_len != encode_buf_len) { - fprintf(stderr, "Decode len of %lu does not match encode len of %lu \n", decode_len, encode_buf_len); - exit(EXIT_FAILURE); - } - - /* we expect l->next to be NULL and l->child to not be */ - l = decoded_list; - if (l->next != NULL || l->child == NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - /* we expect a SEQUENCE */ - if (l->type != LTC_ASN1_SEQUENCE) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - l = l->child; - - /* PRINTABLE STRING */ - /* we expect printable_str */ - if (l->next == NULL || l->child != NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->type != LTC_ASN1_PRINTABLE_STRING) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->size != XSTRLEN(printable_str) || memcmp(printable_str, l->data, l->size)) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - /* move to next */ - l = l->next; - - /* IA5 STRING */ - /* we expect ia5_str */ - if (l->next == NULL || l->child != NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->type != LTC_ASN1_IA5_STRING) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->size != XSTRLEN(ia5_str) || memcmp(ia5_str, l->data, l->size)) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - /* move to next */ - l = l->next; - - /* expect child anve move down */ - - if (l->next != NULL || l->child == NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->type != LTC_ASN1_SEQUENCE) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - l = l->child; - - - /* INTEGER */ - - if (l->next == NULL || l->child != NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->type != LTC_ASN1_INTEGER) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (ltc_mp_cmp_d(l->data, 12345678UL) != LTC_MP_EQ) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - /* move to next */ - l = l->next; - - /* UTCTIME */ - - if (l->next == NULL || l->child != NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->type != LTC_ASN1_UTCTIME) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (memcmp(l->data, &utctime, sizeof(utctime))) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - /* move to next */ - l = l->next; - - /* GeneralizedTime */ - - if (l->next == NULL || l->child != NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->type != LTC_ASN1_GENERALIZEDTIME) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (memcmp(l->data, >ime, sizeof(gtime))) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - /* move to next */ - l = l->next; - - /* expect child anve move down */ - - if (l->next != NULL || l->child == NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->type != LTC_ASN1_SEQUENCE) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - l = l->child; - - - /* OCTET STRING */ - /* we expect oct_str */ - if (l->next == NULL || l->child != NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->type != LTC_ASN1_OCTET_STRING) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->size != sizeof(oct_str) || memcmp(oct_str, l->data, l->size)) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - /* move to next */ - l = l->next; - - /* BIT STRING */ - /* we expect oct_str */ - if (l->next == NULL || l->child != NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->type != LTC_ASN1_BIT_STRING) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->size != sizeof(bit_str) || memcmp(bit_str, l->data, l->size)) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - /* move to next */ - l = l->next; - - /* expect child anve move down */ - - if (l->next != NULL || l->child == NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->type != LTC_ASN1_SEQUENCE) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - l = l->child; - - - /* OID STRING */ - /* we expect oid_str */ - if (l->next == NULL || l->child != NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->type != LTC_ASN1_OBJECT_IDENTIFIER) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->size != LTC_ARRAY_SIZE(oid_str) || memcmp(oid_str, l->data, l->size*sizeof(oid_str[0]))) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - /* move to next */ - l = l->next; - - /* NULL */ - if (l->type != LTC_ASN1_NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - /* move to next */ - l = l->next; - - /* expect child anve move down */ - if (l->next != NULL || l->child == NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->type != LTC_ASN1_SET) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - l = l->child; - - /* PRINTABLE STRING */ - /* we expect printable_str */ - if (l->next == NULL || l->child != NULL) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->type != LTC_ASN1_PRINTABLE_STRING) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - -/* note we compare set2_str FIRST because the SET OF is sorted and "222" comes before "333" */ - if (l->size != XSTRLEN(set2_str) || memcmp(set2_str, l->data, l->size)) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - /* move to next */ - l = l->next; - - /* PRINTABLE STRING */ - /* we expect printable_str */ - if (l->type != LTC_ASN1_PRINTABLE_STRING) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - if (l->size != XSTRLEN(set1_str) || memcmp(set1_str, l->data, l->size)) { - fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child); - exit(EXIT_FAILURE); - } - - - der_sequence_free(l); - -} - -static int der_choice_n_custom_test(void) -{ - ltc_asn1_list types[10], host[1], custom[1], root[1], child[1]; - int boolean[1]; - unsigned char bitbuf[10], octetbuf[10], ia5buf[10], printbuf[10], outbuf[256], custbuf[256], x, y; - wchar_t utf8buf[10]; - unsigned long integer, oidbuf[10], outlen, custlen, inlen, n; - void *mpinteger; - ltc_utctime utctime = { 91, 5, 6, 16, 45, 40, 1, 7, 0 }; - ltc_generalizedtime gtime = { 2038, 01, 19, 3, 14, 8, 0, 0, 0, 0 }; - - /* setup variables */ - for (x = 0; x < sizeof(bitbuf); x++) { bitbuf[x] = x & 1; } - for (x = 0; x < sizeof(octetbuf); x++) { octetbuf[x] = x; } - for (x = 0; x < sizeof(ia5buf); x++) { ia5buf[x] = 'a'; } - for (x = 0; x < sizeof(printbuf); x++) { printbuf[x] = 'a'; } - for (x = 0; x < LTC_ARRAY_SIZE(utf8buf); x++) { utf8buf[x] = L'a'; } - integer = 1; - boolean[0] = 1; - for (x = 0; x < LTC_ARRAY_SIZE(oidbuf); x++) { oidbuf[x] = x + 1; } - DO(ltc_mp_init(&mpinteger)); - - n = LTC_ARRAY_SIZE(types); - for (x = 0; x < n * 2; x++) { - /* setup list */ - y = 0; - LTC_SET_ASN1(types, y++, LTC_ASN1_PRINTABLE_STRING, printbuf, sizeof(printbuf)); - if (x > n) { - LTC_SET_ASN1(types, y++, LTC_ASN1_BIT_STRING, bitbuf, sizeof(bitbuf)); - } else { - LTC_SET_ASN1(types, y++, LTC_ASN1_RAW_BIT_STRING, bitbuf, sizeof(bitbuf)); - } - LTC_SET_ASN1(types, y++, LTC_ASN1_OCTET_STRING, octetbuf, sizeof(octetbuf)); - LTC_SET_ASN1(types, y++, LTC_ASN1_IA5_STRING, ia5buf, sizeof(ia5buf)); - LTC_SET_ASN1(types, y++, LTC_ASN1_BOOLEAN, boolean, LTC_ARRAY_SIZE(boolean)); - if (x > n) { - LTC_SET_ASN1(types, y++, LTC_ASN1_SHORT_INTEGER, &integer, 1); - } else { - LTC_SET_ASN1(types, y++, LTC_ASN1_INTEGER, mpinteger, 1); - } - LTC_SET_ASN1(types, y++, LTC_ASN1_OBJECT_IDENTIFIER, oidbuf, LTC_ARRAY_SIZE(oidbuf)); - if (x > n) { - LTC_SET_ASN1(types, y++, LTC_ASN1_UTCTIME, &utctime, 1); - } else { - LTC_SET_ASN1(types, y++, LTC_ASN1_GENERALIZEDTIME, >ime, 1); - } - - LTC_SET_ASN1(custom, 0, LTC_ASN1_NULL, NULL, 0); - LTC_SET_ASN1_CUSTOM_CONSTRUCTED(types, y++, LTC_ASN1_CL_CONTEXT_SPECIFIC, 0, custom); - - LTC_SET_ASN1(types, y++, LTC_ASN1_UTF8_STRING, utf8buf, LTC_ARRAY_SIZE(utf8buf)); - - LTC_SET_ASN1(host, 0, LTC_ASN1_CHOICE, types, n); - - - /* encode */ - outlen = sizeof(outbuf); - DO(der_encode_sequence(&types[x % n], 1, outbuf, &outlen)); - - /* custom encode */ - child[0] = types[x % n]; - if (x < n) { - LTC_SET_ASN1_CUSTOM_CONSTRUCTED(root, 0, LTC_ASN1_CL_CONTEXT_SPECIFIC, 1uLL << (x % n), child); - } else { - LTC_SET_ASN1_CUSTOM_PRIMITIVE(root, 0, LTC_ASN1_CL_CONTEXT_SPECIFIC, 1uLL << (x % n), child->type, child->data, child->size); - } - custlen = sizeof(custbuf); - /* don't try to custom-encode a primitive custom-type */ - if (child[0].type != LTC_ASN1_CUSTOM_TYPE || root->pc != LTC_ASN1_PC_PRIMITIVE) { - DO(der_encode_custom_type(root, custbuf, &custlen)); - } - - /* decode it */ - inlen = outlen; - DO(der_decode_sequence(outbuf, inlen, host, 1)); - - for (y = 0; y < n; y++) { - if (types[y].used && y != (x % n)) { - fprintf(stderr, "CHOICE, flag %u in trial %u was incorrectly set to one\n", y, x); - return 1; - } - if (!types[y].used && y == (x % n)) { - fprintf(stderr, "CHOICE, flag %u in trial %u was incorrectly set to zero\n", y, x); - return 1; - } - } - - /* custom decode */ - if (child[0].type != LTC_ASN1_CUSTOM_TYPE || root->pc != LTC_ASN1_PC_PRIMITIVE) { - DO(der_decode_custom_type(custbuf, custlen, root)); - } - } - ltc_mp_clear(mpinteger); - return 0; -} - -static void s_der_decode_print(const void* p, unsigned long* plen) -{ - ltc_asn1_list *list; - DO(der_decode_sequence_flexi(p, plen, &list)); - s_der_tests_print_flexi(list); - der_sequence_free(list); -} - -static const unsigned char eckey_privc_der[] = { - 0x30, 0x81, 0xf0, 0x02, 0x01, 0x01, 0x04, 0x18, 0x96, 0x9d, 0x28, 0xf2, 0x40, 0x48, 0x19, 0x11, - 0x79, 0xb0, 0x47, 0x8e, 0x8c, 0x6b, 0x3d, 0x9b, 0xf2, 0x31, 0x16, 0x10, 0x08, 0x72, 0xb1, 0x86, - 0xa0, 0x81, 0xb2, 0x30, 0x81, 0xaf, 0x02, 0x01, 0x01, 0x30, 0x24, 0x06, 0x07, 0x2a, 0x86, 0x48, - 0xce, 0x3d, 0x01, 0x01, 0x02, 0x19, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, - 0x4b, 0x04, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x04, 0x18, 0x22, 0x12, 0x3d, - 0xc2, 0x39, 0x5a, 0x05, 0xca, 0xa7, 0x42, 0x3d, 0xae, 0xcc, 0xc9, 0x47, 0x60, 0xa7, 0xd4, 0x62, - 0x25, 0x6b, 0xd5, 0x69, 0x16, 0x03, 0x15, 0x00, 0xc4, 0x69, 0x68, 0x44, 0x35, 0xde, 0xb3, 0x78, - 0xc4, 0xb6, 0x5c, 0xa9, 0x59, 0x1e, 0x2a, 0x57, 0x63, 0x05, 0x9a, 0x2e, 0x04, 0x19, 0x02, 0x7d, - 0x29, 0x77, 0x81, 0x00, 0xc6, 0x5a, 0x1d, 0xa1, 0x78, 0x37, 0x16, 0x58, 0x8d, 0xce, 0x2b, 0x8b, - 0x4a, 0xee, 0x8e, 0x22, 0x8f, 0x18, 0x96, 0x02, 0x19, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a, 0x62, 0xd0, 0x31, 0xc8, 0x3f, 0x42, 0x94, 0xf6, 0x40, - 0xec, 0x13, 0x02, 0x01, 0x01, 0xa1, 0x1c, 0x03, 0x1a, 0x00, 0x02, 0x55, 0x2c, 0xb8, 0x73, 0x5c, - 0x9d, 0x98, 0xe4, 0x57, 0xfe, 0xd5, 0x96, 0x0a, 0x73, 0x8d, 0x82, 0xd7, 0xce, 0x05, 0xa9, 0x79, - 0x91, 0x5c, 0xf9 -}; - -static const unsigned char eckey_privs_der[] = { - 0x30, 0x50, 0x02, 0x01, 0x01, 0x04, 0x14, 0x82, 0xef, 0x42, 0x0b, 0xc7, 0xe2, 0x9f, 0x3a, 0x84, - 0xe5, 0x74, 0xec, 0x9c, 0xc5, 0x10, 0x26, 0x63, 0x8d, 0xb5, 0x46, 0xa0, 0x07, 0x06, 0x05, 0x2b, - 0x81, 0x04, 0x00, 0x09, 0xa1, 0x2c, 0x03, 0x2a, 0x00, 0x04, 0xb5, 0xb1, 0x5a, 0xb0, 0x2a, 0x10, - 0xd1, 0xf5, 0x4d, 0x6a, 0x41, 0xde, 0xcd, 0x69, 0x09, 0xb3, 0x5f, 0x26, 0xb0, 0xa2, 0xaf, 0xd3, - 0x02, 0x89, 0x5e, 0xd4, 0x96, 0x5c, 0xbc, 0x2a, 0x7e, 0x75, 0x85, 0x86, 0x29, 0xb3, 0x29, 0x13, - 0x77, 0xc3 -}; -static void der_custom_test(void) -{ - ltc_asn1_list bool_ean[1], seq1[1], custom[1]; - int boolean; - unsigned long len; - unsigned char buf[1024]; - unsigned char buf1[] = { 0xbf, 0xa0, 0x00, 0x04, 0x30, 0x02, 0x05, 0x00 }; - unsigned char buf2[] = { 0x30, 0x08, 0xbf, 0xa0, 0x00, 0x04, 0x30, 0x02, 0x05, 0x00 }; - - boolean = 0x1; - LTC_SET_ASN1(bool_ean, 0, LTC_ASN1_BOOLEAN, &boolean, 1); - LTC_SET_ASN1(seq1, 0, LTC_ASN1_SEQUENCE, bool_ean, 1); - LTC_SET_ASN1_CUSTOM_CONSTRUCTED(custom, 0, LTC_ASN1_CL_CONTEXT_SPECIFIC, 0x1000, seq1); - - DO(der_length_custom_type(custom, &len, NULL)); - len = sizeof(buf); - DO(der_encode_custom_type(custom, buf, &len)); - s_der_decode_print(buf, &len); - - boolean = 0x0; - DO(der_decode_custom_type(buf, len, custom)); - - DO(der_length_sequence(custom, 1, &len)); - len = sizeof(buf); - DO(der_encode_sequence(custom, 1, buf, &len)); - s_der_decode_print(buf, &len); - - boolean = 0x0; - DO(der_decode_sequence(buf, len, custom, 1)); - - LTC_SET_ASN1_CUSTOM_PRIMITIVE(bool_ean, 0, LTC_ASN1_CL_CONTEXT_SPECIFIC, 0x8000, LTC_ASN1_BOOLEAN, &boolean, 1); - DO(der_length_custom_type(bool_ean, &len, NULL)); - len = sizeof(buf); - DO(der_encode_custom_type(bool_ean, buf, &len)); - s_der_decode_print(buf, &len); - - LTC_SET_ASN1_CUSTOM_PRIMITIVE(bool_ean, 0, LTC_ASN1_CL_CONTEXT_SPECIFIC, 0x8000, LTC_ASN1_BOOLEAN, &boolean, 1); - DO(der_decode_custom_type(buf, len, bool_ean)); - - len = sizeof(buf1); - s_der_decode_print(buf1, &len); - - len = sizeof(buf2); - s_der_decode_print(buf2, &len); - - len = sizeof(eckey_privc_der); - s_der_decode_print(eckey_privc_der, &len); - - len = sizeof(eckey_privs_der); - s_der_decode_print(eckey_privs_der, &len); -} - -typedef int (*s_der_Xcode)(const void*, unsigned long, void*, unsigned long*); - -typedef struct { - s_der_Xcode encode; - s_der_Xcode decode; - const void* in; - size_t in_sz; - size_t factor; - size_t type_sz; - const char* what; -} der_Xcode_t; - -static void der_Xcode_run(const der_Xcode_t* x) -{ - unsigned long l1, l2, sz; - void *d1, *d2; - - l1 = 1; - d1 = XMALLOC(l1 * x->type_sz); - sz = (x->in_sz * x->factor)/x->type_sz; - - if (x->encode(x->in, sz, d1, &l1) == CRYPT_BUFFER_OVERFLOW) { - d1 = XREALLOC(d1, l1 * x->type_sz); - } - DO(x->encode(x->in, sz, d1, &l1)); - l2 = 1; - d2 = XMALLOC(l2 * x->type_sz); - while (x->decode(d1, l1, d2, &l2) == CRYPT_BUFFER_OVERFLOW) { - d2 = XREALLOC(d2, l2 * x->type_sz); - } - DO(x->decode(d1, l1, d2, &l2)); - COMPARE_TESTVECTOR(d2, (l2/x->factor) * x->type_sz, x->in, x->in_sz, x->what, __LINE__); - XFREE(d2); - XFREE(d1); -} - -#if defined(_MSC_VER) -#define LTC_TYPEOF(x) x -#elif defined(__GNUC__) && defined(__STRICT_ANSI__) -#define LTC_TYPEOF(x) __typeof__(x) /* needed for build with -std=c99 */ -#else -#define LTC_TYPEOF(x) typeof(x) -#endif - -#define DER_XCODE_X(n, b, x) { \ - (s_der_Xcode)der_encode_ ## n, \ - (s_der_Xcode)der_decode_ ## n, \ - b, \ - sizeof(b), \ - x, \ - sizeof(LTC_TYPEOF(b[0])),\ - #n \ -} - -#define DER_XCODE(n, b) DER_XCODE_X(n, b, 1) - -static void der_Xcode_test(void) -{ - unsigned long i; - ltc_asn1_list *list; - ltc_asn1_list ttex_neg_int[2]; - unsigned char buf[128]; - void* mpinteger; - const unsigned long oid[3] = { 1, 23, 42 }; - const unsigned char bit_string[] = { 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1 }; - const unsigned char multi_buf[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; - const char multi_string[] = {'l','i','b','t','o','m','c','r','y','p','t'}; - const wchar_t wchar_string[] = L"libtomcrypt"; - - const unsigned char teletex_neg_int[] = { 0x30, 0x11, 0x14, 0x0b, 0x6c, 0x69, 0x62, 0x74, - 0x6f, 0x6d, 0x63, 0x72, 0x79, 0x70, 0x74, 0x02, - 0x02, 0xfc, 0x19 }; - - const der_Xcode_t xcode_tests[] = - { - DER_XCODE(bit_string, bit_string), - DER_XCODE_X(raw_bit_string, multi_buf, 8), - DER_XCODE(octet_string, multi_buf), - DER_XCODE(object_identifier, oid), - DER_XCODE(ia5_string, multi_string), - DER_XCODE(printable_string, multi_string), - DER_XCODE(utf8_string, wchar_string), - }; - - for (i = 0; i < LTC_ARRAY_SIZE(xcode_tests); ++i) { - der_Xcode_run(&xcode_tests[i]); - } - - i = sizeof(teletex_neg_int); - DO(der_decode_sequence_flexi(teletex_neg_int, &i, &list)); - s_der_tests_print_flexi(list); - if (list->child == NULL || list->child->next == NULL) - exit(EXIT_FAILURE); - ttex_neg_int[0] = *list->child->next; - i = sizeof(buf); - DO(der_encode_sequence(ttex_neg_int, 1, buf, &i)); - der_sequence_free(list); - - DO(ltc_mp_init(&mpinteger)); - LTC_SET_ASN1(ttex_neg_int, 0, LTC_ASN1_TELETEX_STRING, buf, sizeof(buf)); - LTC_SET_ASN1(ttex_neg_int, 1, LTC_ASN1_INTEGER, mpinteger, 1); - - DO(der_decode_sequence(teletex_neg_int, sizeof(teletex_neg_int), ttex_neg_int, 2)); - - ltc_mp_clear(mpinteger); -} - -static int s_der_decode_sequence_flexi(const void *in, unsigned long inlen, void* ctx) -{ - int err; - ltc_asn1_list** list = ctx; - if ((err = der_decode_sequence_flexi(in, &inlen, list)) == CRYPT_OK) { - s_der_tests_print_flexi(*list); - der_sequence_free(*list); - } - return err; -} -#ifdef LTC_TEST_READDIR -static int s_der_decode_sequence_flexi_always_OK(const void *in, unsigned long inlen, void* ctx) -{ - s_der_decode_sequence_flexi(in, inlen, ctx); - return CRYPT_OK; -} -#endif - - -static void s_der_regression_test(void) -{ - static const unsigned char s_broken_sequence[] = { - 0x30,0x41,0x02,0x84,0x7f,0xff,0xff,0xff,0x1e,0x41,0xb4,0x79,0xad,0x57,0x69, - 0x05,0xb9,0x60,0xfe,0x14,0xea,0xdb,0x91,0xb0,0xcc,0xf3,0x48,0x43,0xda,0xb9, - 0x16,0x17,0x3b,0xb8,0xc9,0xcd,0x02,0x1d,0x00,0xad,0xe6,0x59,0x88,0xd2,0x37, - 0xd3,0x0f,0x9e,0xf4,0x1d,0xd4,0x24,0xa4,0xe1,0xc8,0xf1,0x69,0x67,0xcf,0x33, - 0x65,0x81,0x3f,0xe8,0x78,0x62,0x36 - }; - static const unsigned char s_addtl_bytes[] = { - 0x30,0x45,0x02,0x21,0x00,0xb7,0xba,0xba,0xe9,0x33,0x2b,0x54,0xb8,0xa3,0xa0,0x5b,0x70,0x04,0x57, - 0x98,0x21,0xa8,0x87,0xa1,0xb2,0x14,0x65,0xf7,0xdb,0x8a,0x3d,0x49,0x1b,0x39,0xfd,0x2c,0x3f,0x02, - 0x20,0x74,0x72,0x91,0xdd,0x2f,0x3f,0x44,0xaf,0x7a,0xce,0x68,0xea,0x33,0x43,0x1d,0x6f,0x94,0xe4, - 0x18,0xc1,0x06,0xa6,0xe7,0x62,0x85,0xcd,0x59,0xf4,0x32,0x60,0xec,0xce,0x00,0x00 - }; - static const unsigned char issue_507[] = "\x30\x04" /* Start DER-sequence of length 4 */ - "\x0c\x02\xbf\xbf" /* Start UTF8 string of actual length 2 and evaluated length 3 */ - "\xaa" /* One byte padding */ - "\x04\x82\xff\xff"; /* Start OCTET sequence of length 0xffff */ - /* (this will include the adjacent data into the decoded certificate) */ - static const unsigned char utf8_length[] = "\x0c\x02\x61\x61\x61"; - wchar_t wtmp[4]; - unsigned long len, outlen; - void *x, *y; - ltc_asn1_list seq[2]; - ltc_asn1_list *l; - ltc_mp_init_multi(&x, &y, LTC_NULL); - LTC_SET_ASN1(seq, 0, LTC_ASN1_INTEGER, x, 1UL); - LTC_SET_ASN1(seq, 1, LTC_ASN1_INTEGER, y, 1UL); - SHOULD_FAIL(der_decode_sequence(s_broken_sequence, sizeof(s_broken_sequence), seq, 2)); - ltc_mp_cleanup_multi(&y, &x, LTC_NULL); - len = sizeof(s_broken_sequence); - - ltc_mp_init_multi(&x, &y, LTC_NULL); - LTC_SET_ASN1(seq, 0, LTC_ASN1_INTEGER, x, 1UL); - LTC_SET_ASN1(seq, 1, LTC_ASN1_INTEGER, y, 1UL); - SHOULD_FAIL_WITH(der_decode_sequence(s_addtl_bytes, sizeof(s_addtl_bytes), seq, 2), CRYPT_INPUT_TOO_LONG); - ltc_mp_cleanup_multi(&y, &x, LTC_NULL); - len = sizeof(s_addtl_bytes); - s_der_decode_print(s_addtl_bytes, &len); - - len = sizeof(issue_507); - SHOULD_FAIL(der_decode_sequence_flexi(issue_507, &len, &l)); - - len = sizeof(utf8_length); - outlen = LTC_ARRAY_SIZE(wtmp); - DO(der_decode_utf8_string(utf8_length, len, wtmp, &outlen)); - ENSURE(outlen == 2); -} - -static void der_toolong_test(void) -{ - int n, err, failed = 0; - ltc_asn1_list *list; - unsigned long len, oid[16]; - unsigned char buf5[5], buf12[12], buf32[32]; - static const unsigned char invalid1[] = { - 0x30,0x19, /* SEQUENCE len=25 bytes */ - 0x30,0x0a, /* SEQUENCE len=10 bytes (which is wrong, should be 9) */ - 0x04,0x05, /* OCTET STRING len=5 */ 0x2b,0x0e,0x03,0x02,0x1a, - 0x05,0x00, /* NULL */ - 0x04,0x0c, /* OCTET STRING len=12 */ 0xf7,0xff,0x9e,0x8b,0x7b,0xb2,0xe0,0x9b,0x70,0x93,0x5a,0x5d, - }; - static const unsigned char invalid2[] = { - 0x30,0x0d, /* SEQUENCE len=13 bytes*/ - 0x02,0x05, /* INTEGER len=5 */ 0x00,0xb7,0xba,0xba,0xe9, - 0x02,0x04, /* INTEGER len=4 */ 0x74,0x72,0x91,0xdd, - 0x00,0x00 /* garbage after the sequence, der_decode_sequence_flexi should ignore this */ - }; - static const unsigned char invalid3[] = { - 0x30,0x0f, /* SEQUENCE len=15 bytes*/ - 0x02,0x05, /* INTEGER len=5 */ 0x00,0xb7,0xba,0xba,0xe9, - 0x02,0x04, /* INTEGER len=4 */ 0x74,0x72,0x91,0xdd, - 0x00,0x00 /* garbage inside the sequence */ - }; - static const unsigned char invalid4[] = { - 0x30, 0x30, - 0x30, 0x0d, - 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, - 0x05, 0x00, - 0x04, 0x20, 0x53, 0x2e, 0xaa, 0xbd, 0x95, 0x74, 0x88, 0x0d, 0xbf, 0x76, 0xb9, 0xb8, 0xcc, 0x00, 0x83, 0x2c, - 0x20, 0xa6, 0xec, 0x11, 0x3d, 0x68, 0x22, 0x99, 0x55, 0x0d, 0x7a, 0x6e, 0x0f, 0x34, 0x5e, 0x25 - - }; - static const unsigned char invalid5[] = { - 0x30, 0x31, - 0x30, 0x0e, - 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, - 0x05, 0x00, - 0x04, 0x20, 0x53, 0x2e, 0xaa, 0xbd, 0x95,0x74, 0x88, 0x0d, 0xbf, 0x76, 0xb9, 0xb8, 0xcc,0x00, 0x83, 0x2c, - 0x20, 0xa6, 0xec, 0x11, 0x3d,0x68, 0x22, 0x99, 0x55, 0x0d, 0x7a, 0x6e, 0x0f,0x34, 0x5e, 0x25 - - }; - static const unsigned char invalid6[] = { - 0x30, 0x31, - 0x30, 0x0c, - 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, - 0x05, 0x00, - 0x04, 0x20, 0x53, 0x2e, 0xaa, 0xbd, 0x95,0x74, 0x88, 0x0d, 0xbf, 0x76, 0xb9, 0xb8, 0xcc,0x00, 0x83, 0x2c, - 0x20, 0xa6, 0xec, 0x11, 0x3d,0x68, 0x22, 0x99, 0x55, 0x0d, 0x7a, 0x6e, 0x0f,0x34, 0x5e, 0x25 - - }; - - ltc_asn1_list seqsub[2], seqoid[2], seqmain[2], seqint[2]; - void *int1, *int2; - - LTC_SET_ASN1(seqsub, 0, LTC_ASN1_OCTET_STRING, buf5, 5); - LTC_SET_ASN1(seqsub, 1, LTC_ASN1_NULL, NULL, 0); - LTC_SET_ASN1(seqmain, 0, LTC_ASN1_SEQUENCE, seqsub, 2); - LTC_SET_ASN1(seqmain, 1, LTC_ASN1_OCTET_STRING, buf12, 12); - - n = 1; - len = sizeof(invalid1); - err = der_decode_sequence_strict(invalid1, len, seqmain, 2); - if (err == CRYPT_OK) { - fprintf(stderr,"Sequence invalid%d accepted by der_decode_sequence\n", n); - failed = 1; - } - len = sizeof(invalid1); - err = der_decode_sequence_flexi(invalid1, &len, &list); - if (err == CRYPT_OK) { - fprintf(stderr,"Sequence invalid%d accepted by der_decode_sequence_flexi\n", n); - failed = 1; - der_sequence_free(list); - } - - ltc_mp_init_multi(&int1, &int2, LTC_NULL); - LTC_SET_ASN1(seqint, 0, LTC_ASN1_INTEGER, int1, 1); - LTC_SET_ASN1(seqint, 1, LTC_ASN1_INTEGER, int2, 1); - - n++; - len = sizeof(invalid2); - err = der_decode_sequence_strict(invalid2, len, seqint, 2); - if (err == CRYPT_OK) { - fprintf(stderr,"Sequence invalid%d accepted by der_decode_sequence\n", n); - failed = 1; - } - len = sizeof(invalid2); - err = der_decode_sequence_flexi(invalid2, &len, &list); - /* flexi parser should decode this; however returning "len" shorter than "sizeof(invalid2)" */ - if (err != CRYPT_OK || len != 15) { - fprintf(stderr,"der_decode_sequence_flexi failed, err=%d (expected 0) len=%lu (expected 15)\n", err, len); - failed = 1; - } - if (err == CRYPT_OK) - der_sequence_free(list); - - n++; - len = sizeof(invalid3); - err = der_decode_sequence_strict(invalid3, len, seqint, 2); - if (err == CRYPT_OK) { - fprintf(stderr,"Sequence invalid%d accepted by der_decode_sequence\n", n); - failed = 1; - } - len = sizeof(invalid3); - err = der_decode_sequence_flexi(invalid3, &len, &list); - if (err == CRYPT_OK) { - fprintf(stderr,"Sequence invalid%d accepted by der_decode_sequence_flexi\n", n); - failed = 1; - der_sequence_free(list); - } - - ltc_mp_deinit_multi(int1, int2, LTC_NULL); - - LTC_SET_ASN1(seqoid, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid, LTC_ARRAY_SIZE(oid)); - LTC_SET_ASN1(seqoid, 1, LTC_ASN1_NULL, NULL, 0); - LTC_SET_ASN1(seqmain, 0, LTC_ASN1_SEQUENCE, seqoid, 2); - LTC_SET_ASN1(seqmain, 1, LTC_ASN1_OCTET_STRING, buf32, 32); - - n++; - len = sizeof(invalid4); - err = der_decode_sequence_strict(invalid4, len, seqmain, 2); - if (err == CRYPT_OK) { - fprintf(stderr,"Sequence invalid%d accepted by der_decode_sequence\n", n); - failed = 1; - } - len = sizeof(invalid4); - err = der_decode_sequence_flexi(invalid4, &len, &list); - if (err == CRYPT_OK) { - fprintf(stderr,"Sequence invalid%d accepted by der_decode_sequence_flexi\n", n); - failed = 1; - der_sequence_free(list); - } - - n++; - len = sizeof(invalid5); - err = der_decode_sequence_strict(invalid5, len, seqmain, 2); - if (err == CRYPT_OK) { - fprintf(stderr,"Sequence invalid%d accepted by der_decode_sequence\n", n); - failed = 1; - } - len = sizeof(invalid5); - err = der_decode_sequence_flexi(invalid5, &len, &list); - if (err == CRYPT_OK) { - fprintf(stderr,"Sequence invalid%d accepted by der_decode_sequence_flexi\n", n); - failed = 1; - der_sequence_free(list); - } - n++; - len = sizeof(invalid6); - err = der_decode_sequence_strict(invalid6, len, seqmain, 2); - if (err == CRYPT_OK) { - fprintf(stderr,"Sequence invalid%d accepted by der_decode_sequence\n", n); - failed = 1; - } - len = sizeof(invalid6); - err = der_decode_sequence_flexi(invalid6, &len, &list); - if (err == CRYPT_OK) { - fprintf(stderr,"Sequence invalid%d accepted by der_decode_sequence_flexi\n", n); - failed = 1; - der_sequence_free(list); - } - - if (failed) exit(EXIT_FAILURE); -} - -static void s_der_recursion_limit(void) -{ - unsigned int n, m; - unsigned long integer = 123, s; - ltc_asn1_list seqs[LTC_DER_MAX_RECURSION + 2], dummy[1], *flexi; - unsigned char buf[2048]; - for (m = 0; m < 3; ++m) { - LTC_SET_ASN1(dummy, 0, LTC_ASN1_SHORT_INTEGER, &integer, 1); - LTC_SET_ASN1(seqs, LTC_DER_MAX_RECURSION + 1, LTC_ASN1_SEQUENCE, dummy, 1); - for (n = m; n < LTC_DER_MAX_RECURSION + 1; ++n) { - LTC_SET_ASN1(seqs, LTC_DER_MAX_RECURSION - n, LTC_ASN1_SEQUENCE, &seqs[LTC_DER_MAX_RECURSION - n + 1], 1); - } - s = sizeof(buf); - DO(der_encode_sequence(&seqs[m], 1, buf, &s)); - DO(der_decode_sequence(buf, s, &seqs[m], 1)); - if (m < 2) { - SHOULD_FAIL(der_decode_sequence_flexi(buf, &s, &flexi)); - } - else { - DO(der_decode_sequence_flexi(buf, &s, &flexi)); - der_free_sequence_flexi(flexi); - } - } -} - -static void s_der_issue743(void) -{ - const unsigned char tests_asn1_0x028101FF_der[] = { - 0x02, 0x81, 0x01, 0xff - }; - const unsigned char tests_asn1_0x0500FF_der[] = { - 0x05, 0x00, 0xff - }; - const struct { - const unsigned char *d; - unsigned long l; - } test_cases[] = { -#define TEST_CASE(n) { n, sizeof(n) } - TEST_CASE(tests_asn1_0x028101FF_der), - TEST_CASE(tests_asn1_0x0500FF_der), -#undef TEST_CASE - }; - unsigned long n; - ltc_asn1_list *asn1 = NULL; - for (n = 0; n < LTC_ARRAY_SIZE(test_cases); ++n) { - SHOULD_FAIL(s_der_decode_sequence_flexi(test_cases[n].d, test_cases[n].l, &asn1)); - } -} - -int der_test(void) -{ - unsigned long x, y, z, zz, oid[2][32]; - unsigned char buf[3][2048]; - void *a, *b, *c, *d, *e, *f, *g; - - static const unsigned char rsa_oid_der[] = { 0x06, 0x06, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d }; - static const unsigned long rsa_oid[] = { 1, 2, 840, 113549 }; - - static const unsigned char rsa_ia5[] = "test1@rsa.com"; - static const unsigned char rsa_ia5_der[] = { 0x16, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x31, - 0x40, 0x72, 0x73, 0x61, 0x2e, 0x63, 0x6f, 0x6d }; - unsigned long rsa_ia5_len = XSTRLEN((char*)rsa_ia5); - - static const unsigned char rsa_printable[] = "Test User 1"; - static const unsigned char rsa_printable_der[] = { 0x13, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x20, 0x55, - 0x73, 0x65, 0x72, 0x20, 0x31 }; - unsigned long rsa_printable_len = XSTRLEN((char*)rsa_printable); - - static const ltc_utctime rsa_time1 = { 91, 5, 6, 16, 45, 40, 1, 7, 0 }; - static const ltc_utctime rsa_time2 = { 91, 5, 6, 23, 45, 40, 0, 0, 0 }; - ltc_utctime tmp_time; - - static const unsigned char rsa_time1_der[] = { 0x17, 0x11, 0x39, 0x31, 0x30, 0x35, 0x30, 0x36, 0x31, 0x36, 0x34, 0x35, 0x34, 0x30, 0x2D, 0x30, 0x37, 0x30, 0x30 }; - static const unsigned char rsa_time2_der[] = { 0x17, 0x0d, 0x39, 0x31, 0x30, 0x35, 0x30, 0x36, 0x32, 0x33, 0x34, 0x35, 0x34, 0x30, 0x5a }; - - static const wchar_t utf8_1[] = { 0x0041, 0x2262, 0x0391, 0x002E }; - static const unsigned char utf8_1_der[] = { 0x0C, 0x07, 0x41, 0xE2, 0x89, 0xA2, 0xCE, 0x91, 0x2E }; - static const wchar_t utf8_2[] = { 0xD55C, 0xAD6D, 0xC5B4 }; - static const unsigned char utf8_2_der[] = { 0x0C, 0x09, 0xED, 0x95, 0x9C, 0xEA, 0xB5, 0xAD, 0xEC, 0x96, 0xB4 }; - static const wchar_t utf8_3[] = { 0x05E9, 0x05DC, 0x05D5, 0x05DD }; - static const unsigned char utf8_3_der[] = { 0x0C, 0x08, 0xD7, 0xA9, 0xD7, 0x9C, 0xD7, 0x95, 0xD7, 0x9D }; - - unsigned char utf8_buf[32]; - wchar_t utf8_out[32]; -#ifdef LTC_TEST_READDIR - ltc_asn1_list *list; -#endif - - if (ltc_mp.name == NULL) return CRYPT_NOP; - - s_der_issue743(); - - s_der_recursion_limit(); - - der_Xcode_test(); - -#ifdef LTC_TEST_READDIR - DO(test_process_dir("tests/asn1", &list, s_der_decode_sequence_flexi_always_OK, NULL, NULL, "DER ASN.1 special cases")); -#endif - - der_custom_test(); - - s_der_regression_test(); - - der_toolong_test(); - - der_cacert_test(); - - s_der_oid_test(); - - y = 0xffffff00; -#if ULONG_MAX == ULLONG_MAX - y <<= 32; -#endif - while (y != 0) { - /* we have to modify x to be larger than the encoded - * length as der_decode_asn1_length() checks also if - * the encoded length is reasonable in regards to the - * available buffer size. - */ - x = sizeof(buf[0]); - DO(der_encode_asn1_length(y, buf[0], &x)); - x = y + x; - DO(der_decode_asn1_length(buf[0], &x, &z)); - if (y != z) { - fprintf(stderr, "Failed to en- or decode length correctly! %lu != %lu\n", y, z); - return 1; - } - y >>= 3; - } - - DO(ltc_mp_init_multi(&a, &b, &c, &d, &e, &f, &g, LTC_NULL)); - for (zz = 0; zz < 16; zz++) { -#ifdef USE_TFM - for (z = 0; z < 256; z++) { -#else - for (z = 0; z < 1024; z++) { -#endif - ENSURE(yarrow_read(buf[0], z, &yarrow_prng) == z); - DO(ltc_mp_read_unsigned_bin(a, buf[0], z)); -/* if (ltc_mp_iszero(a) == LTC_MP_NO) { a.sign = buf[0][0] & 1 ? LTC_MP_ZPOS : LTC_MP_NEG; } */ - x = sizeof(buf[0]); - DO(der_encode_integer(a, buf[0], &x)); - DO(der_length_integer(a, &y)); - if (y != x) { fprintf(stderr, "DER INTEGER size mismatch %lu != %lu\n", y, x); return 1; } - ltc_mp_set_int(b, 0); - DO(der_decode_integer(buf[0], y, b)); - if (y != x || ltc_mp_cmp(a, b) != LTC_MP_EQ) { - fprintf(stderr, "%lu: %lu vs %lu\n", z, x, y); - ltc_mp_deinit_multi(a, b, c, d, e, f, g, LTC_NULL); - return 1; - } - } - } - -/* test short integer */ - for (zz = 0; zz < 256; zz++) { - for (z = 1; z < 4; z++) { - ENSURE(yarrow_read(buf[2], z, &yarrow_prng) == z); - /* encode with normal */ - DO(ltc_mp_read_unsigned_bin(a, buf[2], z)); - - x = sizeof(buf[0]); - DO(der_encode_integer(a, buf[0], &x)); - - /* encode with short */ - y = sizeof(buf[1]); - DO(der_encode_short_integer(ltc_mp_get_int(a), buf[1], &y)); - if (x != y || memcmp(buf[0], buf[1], x)) { - fprintf(stderr, "DER INTEGER short encoding failed, %lu, %lu, 0x%lX\n", x, y, ltc_mp_get_int(a)); - for (zz = 0; zz < z; zz++) fprintf(stderr, "%02x ", buf[2][zz]); - fprintf(stderr, "\n"); - for (z = 0; z < x; z++) fprintf(stderr, "%02x ", buf[0][z]); - fprintf(stderr, "\n"); - for (z = 0; z < y; z++) fprintf(stderr, "%02x ", buf[1][z]); - fprintf(stderr, "\n"); - ltc_mp_deinit_multi(a, b, c, d, e, f, g, LTC_NULL); - return 1; - } - - /* decode it */ - x = 0; - DO(der_decode_short_integer(buf[1], y, &x)); - if (x != ltc_mp_get_int(a)) { - fprintf(stderr, "DER INTEGER short decoding failed, %lu, %lu\n", x, ltc_mp_get_int(a)); - ltc_mp_deinit_multi(a, b, c, d, e, f, g, LTC_NULL); - return 1; - } - } - } - ltc_mp_deinit_multi(a, b, c, d, e, f, g, LTC_NULL); - - -/* Test bit string */ - for (zz = 1; zz < 1536; zz++) { - ENSURE(yarrow_read(buf[0], zz, &yarrow_prng) == zz); - for (z = 0; z < zz; z++) { - buf[0][z] &= 0x01; - } - x = sizeof(buf[1]); - DO(der_encode_bit_string(buf[0], zz, buf[1], &x)); - DO(der_length_bit_string(zz, &y)); - if (y != x) { - fprintf(stderr, "\nDER BIT STRING length of encoded not match expected : %lu, %lu, %lu\n", z, x, y); - return 1; - } - - y = sizeof(buf[2]); - DO(der_decode_bit_string(buf[1], x, buf[2], &y)); - if (y != zz || memcmp(buf[0], buf[2], zz)) { - fprintf(stderr, "%lu, %lu, %d\n", y, zz, memcmp(buf[0], buf[2], zz)); - return 1; - } - } - -/* Wycheproof ecdh_brainpoolP224r1_test.json tcId=787 - reject SPKI whose BIT STRING "unused bits" byte is 0x80 (>7) */ - { - static const unsigned char bad_bs[] = { - /* outer SPKI; the BIT STRING starts at offset 24: 03 3a 80 04 d7 ba ... -- unused-bits = 0x80 */ - 0x30, 0x52, 0x30, 0x14, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x09, 0x2b, 0x24, 0x03, 0x03, 0x02, - 0x08, 0x01, 0x01, 0x05, 0x03, 0x3a, 0x80, 0x04, 0xd7, 0xba, 0x2d, 0xf5, 0x81, 0xb4, 0x54, 0xd8, 0x3c, 0x6b, 0xb8, 0x65, - 0x0f, 0xc3, 0xa1, 0xf1, 0x35, 0x21, 0x88, 0x1f, 0xa2, 0xea, 0x52, 0x06, 0x1d, 0x9e, 0x3a, 0xf5, 0x4e, 0x82, 0x0e, 0x75, - 0xfb, 0x86, 0x22, 0x18, 0x3b, 0x69, 0x9d, 0x86, 0x87, 0x89, 0xbf, 0x36, 0x82, 0x88, 0x9d, 0x70, 0x21, 0x79, 0x8a, 0x3e, - 0x4b, 0xa2, 0x7b, 0x71 - }; - unsigned char out[512]; - unsigned long outlen = sizeof(out); - SHOULD_FAIL(der_decode_bit_string(bad_bs + 24, sizeof(bad_bs) - 24, out, &outlen)); - outlen = sizeof(out); - SHOULD_FAIL(der_decode_raw_bit_string(bad_bs + 24, sizeof(bad_bs) - 24, out, &outlen)); - } - -/* Test octet string */ - for (zz = 1; zz < 1536; zz++) { - ENSURE(yarrow_read(buf[0], zz, &yarrow_prng) == zz); - x = sizeof(buf[1]); - DO(der_encode_octet_string(buf[0], zz, buf[1], &x)); - DO(der_length_octet_string(zz, &y)); - if (y != x) { - fprintf(stderr, "\nDER OCTET STRING length of encoded not match expected : %lu, %lu, %lu\n", z, x, y); - return 1; - } - y = sizeof(buf[2]); - DO(der_decode_octet_string(buf[1], x, buf[2], &y)); - if (y != zz || memcmp(buf[0], buf[2], zz)) { - fprintf(stderr, "%lu, %lu, %d\n", y, zz, memcmp(buf[0], buf[2], zz)); - return 1; - } - } - -/* test OID */ - x = sizeof(buf[0]); - DO(der_encode_object_identifier((unsigned long*)rsa_oid, LTC_ARRAY_SIZE(rsa_oid), buf[0], &x)); - if (x != sizeof(rsa_oid_der) || memcmp(rsa_oid_der, buf[0], x)) { - fprintf(stderr, "rsa_oid_der encode failed to match, %lu, ", x); - for (y = 0; y < x; y++) fprintf(stderr, "%02x ", buf[0][y]); - fprintf(stderr, "\n"); - return 1; - } - - y = LTC_ARRAY_SIZE(oid[0]); - DO(der_decode_object_identifier(buf[0], x, oid[0], &y)); - if (y != LTC_ARRAY_SIZE(rsa_oid) || memcmp(rsa_oid, oid[0], sizeof(rsa_oid))) { - fprintf(stderr, "rsa_oid_der decode failed to match, %lu, ", y); - for (z = 0; z < y; z++) fprintf(stderr, "%lu ", oid[0][z]); - fprintf(stderr, "\n"); - return 1; - } - - /* do random strings */ - for (zz = 0; zz < 5000; zz++) { - /* pick a random number of words */ - ENSURE(yarrow_read(buf[0], 4, &yarrow_prng) == 4); - LOAD32L(z, buf[0]); - z = 2 + (z % (LTC_ARRAY_SIZE(oid[0]) - 2)); - - /* fill them in */ - oid[0][0] = buf[0][0] % 3; - oid[0][1] = buf[0][1] % 40; - - for (y = 2; y < z; y++) { - ENSURE(yarrow_read(buf[0], 4, &yarrow_prng) == 4); - LOAD32L(oid[0][y], buf[0]); - } - - /* encode it */ - x = sizeof(buf[0]); - DO(der_encode_object_identifier(oid[0], z, buf[0], &x)); - DO(der_length_object_identifier(oid[0], z, &y)); - if (x != y) { - fprintf(stderr, "Random OID %lu test failed, length mismatch: %lu, %lu\n", z, x, y); - for (x = 0; x < z; x++) fprintf(stderr, "%lu\n", oid[0][x]); - return 1; - } - - /* decode it */ - y = LTC_ARRAY_SIZE(oid[0]); - DO(der_decode_object_identifier(buf[0], x, oid[1], &y)); - if (y != z) { - fprintf(stderr, "Random OID %lu test failed, decode length mismatch: %lu, %lu\n", z, x, y); - return 1; - } - if (memcmp(oid[0], oid[1], sizeof(oid[0][0]) * z)) { - fprintf(stderr, "Random OID %lu test failed, decoded values wrong\n", z); - for (x = 0; x < z; x++) fprintf(stderr, "%lu\n", oid[0][x]); - fprintf(stderr, "\n\n Got \n\n"); - for (x = 0; x < z; x++) fprintf(stderr, "%lu\n", oid[1][x]); - return 1; - } - } - -/* IA5 string */ - x = sizeof(buf[0]); - DO(der_encode_ia5_string(rsa_ia5, rsa_ia5_len, buf[0], &x)); - if (x != sizeof(rsa_ia5_der) || memcmp(buf[0], rsa_ia5_der, x)) { - fprintf(stderr, "IA5 encode failed: %lu, %lu\n", x, (unsigned long)sizeof(rsa_ia5_der)); - return 1; - } - DO(der_length_ia5_string(rsa_ia5, rsa_ia5_len, &y)); - if (y != x) { - fprintf(stderr, "IA5 length failed to match: %lu, %lu\n", x, y); - return 1; - } - y = sizeof(buf[1]); - DO(der_decode_ia5_string(buf[0], x, buf[1], &y)); - if (y != rsa_ia5_len || memcmp(buf[1], rsa_ia5, rsa_ia5_len)) { - fprintf(stderr, "DER IA5 failed test vector\n"); - return 1; - } - -/* Printable string */ - x = sizeof(buf[0]); - DO(der_encode_printable_string(rsa_printable, rsa_printable_len, buf[0], &x)); - if (x != sizeof(rsa_printable_der) || memcmp(buf[0], rsa_printable_der, x)) { - fprintf(stderr, "PRINTABLE encode failed: %lu, %lu\n", x, (unsigned long)sizeof(rsa_printable_der)); - return 1; - } - DO(der_length_printable_string(rsa_printable, rsa_printable_len, &y)); - if (y != x) { - fprintf(stderr, "printable length failed to match: %lu, %lu\n", x, y); - return 1; - } - y = sizeof(buf[1]); - DO(der_decode_printable_string(buf[0], x, buf[1], &y)); - if (y != rsa_printable_len || memcmp(buf[1], rsa_printable, rsa_printable_len)) { - fprintf(stderr, "DER printable failed test vector\n"); - return 1; - } - -/* Test UTC time */ - x = sizeof(buf[0]); - DO(der_encode_utctime((ltc_utctime*)&rsa_time1, buf[0], &x)); - if (x != sizeof(rsa_time1_der) || memcmp(buf[0], rsa_time1_der, x)) { - fprintf(stderr, "UTCTIME encode of rsa_time1 failed: %lu, %lu\n", x, (unsigned long)sizeof(rsa_time1_der)); - fprintf(stderr, "\n\n"); - for (y = 0; y < x; y++) fprintf(stderr, "%02x ", buf[0][y]); - fprintf(stderr, "\n"); - return 1; - } - DO(der_length_utctime((ltc_utctime*)&rsa_time1, &y)); - if (y != x) { - fprintf(stderr, "UTCTIME length failed to match for rsa_time1: %lu, %lu\n", x, y); - return 1; - } - DO(der_decode_utctime(buf[0], &y, &tmp_time)); - if (y != x || memcmp(&rsa_time1, &tmp_time, sizeof(ltc_utctime))) { - fprintf(stderr, "UTCTIME decode failed for rsa_time1: %lu %lu\n", x, y); -fprintf(stderr, "\n\n%u %u %u %u %u %u %u %u %u\n\n", -tmp_time.YY, -tmp_time.MM, -tmp_time.DD, -tmp_time.hh, -tmp_time.mm, -tmp_time.ss, -tmp_time.off_dir, -tmp_time.off_mm, -tmp_time.off_hh); - return 1; - } - - x = sizeof(buf[0]); - DO(der_encode_utctime((ltc_utctime*)&rsa_time2, buf[0], &x)); - if (x != sizeof(rsa_time2_der) || memcmp(buf[0], rsa_time2_der, x)) { - fprintf(stderr, "UTCTIME encode of rsa_time2 failed: %lu, %lu\n", x, (unsigned long)sizeof(rsa_time1_der)); - fprintf(stderr, "\n\n"); - for (y = 0; y < x; y++) fprintf(stderr, "%02x ", buf[0][y]); - fprintf(stderr, "\n"); - return 1; - } - DO(der_length_utctime((ltc_utctime*)&rsa_time2, &y)); - if (y != x) { - fprintf(stderr, "UTCTIME length failed to match for rsa_time2: %lu, %lu\n", x, y); - return 1; - } - DO(der_decode_utctime(buf[0], &y, &tmp_time)); - if (y != x || memcmp(&rsa_time2, &tmp_time, sizeof(ltc_utctime))) { - fprintf(stderr, "UTCTIME decode failed for rsa_time2: %lu %lu\n", x, y); -fprintf(stderr, "\n\n%u %u %u %u %u %u %u %u %u\n\n", -tmp_time.YY, -tmp_time.MM, -tmp_time.DD, -tmp_time.hh, -tmp_time.mm, -tmp_time.ss, -tmp_time.off_dir, -tmp_time.off_mm, -tmp_time.off_hh); - - - return 1; - } - - /* UTF 8 */ - /* encode it */ - x = sizeof(utf8_buf); - DO(der_encode_utf8_string(utf8_1, sizeof(utf8_1) / sizeof(utf8_1[0]), utf8_buf, &x)); - DO(der_length_utf8_string(utf8_1, sizeof(utf8_1) / sizeof(utf8_1[0]), &y)); - if (x != sizeof(utf8_1_der) || memcmp(utf8_buf, utf8_1_der, x) || x != y) { - fprintf(stderr, "DER UTF8_1 encoded to %lu bytes\n", x); - for (y = 0; y < x; y++) fprintf(stderr, "%02x ", (unsigned)utf8_buf[y]); - fprintf(stderr, "\n"); - return 1; - } - /* decode it */ - y = sizeof(utf8_out) / sizeof(utf8_out[0]); - DO(der_decode_utf8_string(utf8_buf, x, utf8_out, &y)); - if (y != (sizeof(utf8_1) / sizeof(utf8_1[0])) || memcmp(utf8_1, utf8_out, y * sizeof(wchar_t))) { - fprintf(stderr, "DER UTF8_1 decoded to %lu wchar_t\n", y); - for (x = 0; x < y; x++) fprintf(stderr, "%04lx ", (unsigned long)utf8_out[x]); - fprintf(stderr, "\n"); - return 1; - } - - /* encode it */ - x = sizeof(utf8_buf); - DO(der_encode_utf8_string(utf8_2, sizeof(utf8_2) / sizeof(utf8_2[0]), utf8_buf, &x)); - if (x != sizeof(utf8_2_der) || memcmp(utf8_buf, utf8_2_der, x)) { - fprintf(stderr, "DER UTF8_2 encoded to %lu bytes\n", x); - for (y = 0; y < x; y++) fprintf(stderr, "%02x ", (unsigned)utf8_buf[y]); - fprintf(stderr, "\n"); - return 1; - } - /* decode it */ - y = sizeof(utf8_out) / sizeof(utf8_out[0]); - DO(der_decode_utf8_string(utf8_buf, x, utf8_out, &y)); - if (y != (sizeof(utf8_2) / sizeof(utf8_2[0])) || memcmp(utf8_2, utf8_out, y * sizeof(wchar_t))) { - fprintf(stderr, "DER UTF8_2 decoded to %lu wchar_t\n", y); - for (x = 0; x < y; x++) fprintf(stderr, "%04lx ", (unsigned long)utf8_out[x]); - fprintf(stderr, "\n"); - return 1; - } - - /* encode it */ - x = sizeof(utf8_buf); - DO(der_encode_utf8_string(utf8_3, sizeof(utf8_3) / sizeof(utf8_3[0]), utf8_buf, &x)); - if (x != sizeof(utf8_3_der) || memcmp(utf8_buf, utf8_3_der, x)) { - fprintf(stderr, "DER UTF8_3 encoded to %lu bytes\n", x); - for (y = 0; y < x; y++) fprintf(stderr, "%02x ", (unsigned)utf8_buf[y]); - fprintf(stderr, "\n"); - return 1; - } - /* decode it */ - y = sizeof(utf8_out) / sizeof(utf8_out[0]); - DO(der_decode_utf8_string(utf8_buf, x, utf8_out, &y)); - if (y != (sizeof(utf8_3) / sizeof(utf8_3[0])) || memcmp(utf8_3, utf8_out, y * sizeof(wchar_t))) { - fprintf(stderr, "DER UTF8_3 decoded to %lu wchar_t\n", y); - for (x = 0; x < y; x++) fprintf(stderr, "%04lx ", (unsigned long)utf8_out[x]); - fprintf(stderr, "\n"); - return 1; - } - - der_set_test(); - der_flexi_test(); - return der_choice_n_custom_test(); -} - -#endif diff --git a/tests/dh_test.c b/tests/dh_test.c deleted file mode 100644 index acc4011d..00000000 --- a/tests/dh_test.c +++ /dev/null @@ -1,401 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#if defined(LTC_MDH) - -static int s_prime_test(void) -{ - void *p, *g, *tmp; - int x, err, primality; - - if ((err = ltc_mp_init_multi(&p, &g, &tmp, LTC_NULL)) != CRYPT_OK) { goto error; } - - for (x = 0; ltc_dh_sets[x].size != 0; x++) { - /* tfm has a problem with larger sizes */ - if ((strcmp(ltc_mp.name, "TomsFastMath") == 0) && (ltc_dh_sets[x].size > 256)) break; - - if ((err = ltc_mp_read_radix(g, ltc_dh_sets[x].base, 16)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_read_radix(p, ltc_dh_sets[x].prime, 16)) != CRYPT_OK) { goto error; } - - /* ensure p is prime */ - if ((err = ltc_mp_prime_is_prime(p, 8, &primality)) != CRYPT_OK) { goto done; } - if (primality != LTC_MP_YES ) { - err = CRYPT_FAIL_TESTVECTOR; - goto done; - } - - if ((err = ltc_mp_sub_d(p, 1, tmp)) != CRYPT_OK) { goto error; } - if ((err = ltc_mp_div_2(tmp, tmp)) != CRYPT_OK) { goto error; } - - /* ensure (p-1)/2 is prime */ - if ((err = ltc_mp_prime_is_prime(tmp, 8, &primality)) != CRYPT_OK) { goto done; } - if (primality == 0) { - err = CRYPT_FAIL_TESTVECTOR; - goto done; - } - - /* now see if g^((p-1)/2) mod p is in fact 1 */ - if ((err = ltc_mp_exptmod(g, tmp, p, tmp)) != CRYPT_OK) { goto error; } - if (ltc_mp_cmp_d(tmp, 1)) { - err = CRYPT_FAIL_TESTVECTOR; - goto done; - } - } - err = CRYPT_OK; -error: -done: - ltc_mp_deinit_multi(tmp, g, p, LTC_NULL); - return err; -} - -static int s_dhparam_test(void) -{ - dh_key k; - unsigned char buf[1024]; - /* generated by: openssl dhparam -outform der -out dhparam.der 2048 */ - unsigned char dhparam_der[] = { - 0x30, 0x82, 0x01, 0x08, 0x02, 0x82, 0x01, 0x01, 0x00, 0xae, 0xfe, 0x78, 0xce, 0x80, 0xd5, 0xd7, - 0x8e, 0xcc, 0x4f, 0x0c, 0x1b, 0xb0, 0x95, 0x10, 0xe1, 0x41, 0x15, 0x53, 0x4d, 0x0e, 0x68, 0xb0, - 0xf8, 0x5a, 0x41, 0x0e, 0x65, 0x2f, 0x9f, 0xac, 0x9c, 0x30, 0xb0, 0x76, 0xec, 0x02, 0xe9, 0x43, - 0x55, 0x08, 0xb4, 0x20, 0x60, 0xd9, 0x52, 0xda, 0x2d, 0xab, 0x9a, 0xba, 0xe6, 0xcf, 0x11, 0xa7, - 0x00, 0x44, 0xc2, 0x5e, 0xd1, 0xba, 0x9b, 0xaa, 0xfe, 0x03, 0xdd, 0xdc, 0xef, 0x41, 0x89, 0x9c, - 0xac, 0x64, 0x13, 0xd9, 0x6a, 0x8a, 0x55, 0xa0, 0x5b, 0xff, 0x12, 0x92, 0x37, 0x52, 0x6a, 0x91, - 0xa4, 0x6e, 0x9e, 0x61, 0xb7, 0xfe, 0xb0, 0x17, 0x8e, 0x67, 0x0f, 0x88, 0x46, 0xa7, 0x9e, 0xb1, - 0xdb, 0x68, 0x77, 0x70, 0xb5, 0x77, 0xf2, 0x7e, 0x33, 0xb1, 0x3e, 0x10, 0xc4, 0x63, 0x36, 0xd0, - 0x13, 0x27, 0xd3, 0x29, 0xc3, 0xb6, 0x5d, 0xf6, 0x5d, 0xa7, 0xd8, 0x25, 0x5c, 0x0b, 0x65, 0x99, - 0xfa, 0xf9, 0x5f, 0x1d, 0xee, 0xd1, 0x86, 0x64, 0x7c, 0x44, 0xcb, 0xa0, 0x12, 0x52, 0x4c, 0xd4, - 0x46, 0x81, 0xae, 0x07, 0xdb, 0xc7, 0x13, 0x29, 0xce, 0x9b, 0xcf, 0x1c, 0x06, 0xd2, 0x0f, 0x2d, - 0xbb, 0x12, 0x33, 0xb9, 0xb1, 0x0f, 0x67, 0x5d, 0x3f, 0x0c, 0xe4, 0xfa, 0x67, 0x26, 0xe2, 0x89, - 0xa2, 0xd5, 0x66, 0x29, 0x1c, 0xe2, 0x8e, 0xbb, 0x7b, 0xcb, 0xcc, 0x70, 0x7e, 0x4f, 0x0e, 0xd3, - 0x5d, 0x64, 0x64, 0x1b, 0x27, 0xbb, 0xda, 0xa9, 0x08, 0x2b, 0x62, 0xd4, 0xca, 0xc3, 0x3a, 0x23, - 0x39, 0x58, 0x57, 0xaf, 0x7b, 0x8b, 0x0c, 0x5b, 0x2e, 0xfc, 0x42, 0x57, 0x59, 0x39, 0x2e, 0x6d, - 0x39, 0x97, 0xdb, 0x5b, 0x5c, 0xb9, 0x59, 0x71, 0x42, 0xf3, 0xcd, 0xea, 0xda, 0x86, 0x54, 0x86, - 0x61, 0x8d, 0x93, 0x66, 0xc7, 0x65, 0xd1, 0x98, 0xcb, 0x02, 0x01, 0x02 - }; - /* text dump: openssl dh -inform DER -in dhparam.der -text - DH Parameters: (2048 bit) - prime: - 00:ae:fe:78:ce:80:d5:d7:8e:cc:4f:0c:1b:b0:95: - 10:e1:41:15:53:4d:0e:68:b0:f8:5a:41:0e:65:2f: - 9f:ac:9c:30:b0:76:ec:02:e9:43:55:08:b4:20:60: - d9:52:da:2d:ab:9a:ba:e6:cf:11:a7:00:44:c2:5e: - d1:ba:9b:aa:fe:03:dd:dc:ef:41:89:9c:ac:64:13: - d9:6a:8a:55:a0:5b:ff:12:92:37:52:6a:91:a4:6e: - 9e:61:b7:fe:b0:17:8e:67:0f:88:46:a7:9e:b1:db: - 68:77:70:b5:77:f2:7e:33:b1:3e:10:c4:63:36:d0: - 13:27:d3:29:c3:b6:5d:f6:5d:a7:d8:25:5c:0b:65: - 99:fa:f9:5f:1d:ee:d1:86:64:7c:44:cb:a0:12:52: - 4c:d4:46:81:ae:07:db:c7:13:29:ce:9b:cf:1c:06: - d2:0f:2d:bb:12:33:b9:b1:0f:67:5d:3f:0c:e4:fa: - 67:26:e2:89:a2:d5:66:29:1c:e2:8e:bb:7b:cb:cc: - 70:7e:4f:0e:d3:5d:64:64:1b:27:bb:da:a9:08:2b: - 62:d4:ca:c3:3a:23:39:58:57:af:7b:8b:0c:5b:2e: - fc:42:57:59:39:2e:6d:39:97:db:5b:5c:b9:59:71: - 42:f3:cd:ea:da:86:54:86:61:8d:93:66:c7:65:d1: - 98:cb - generator: 2 (0x2) - */ - unsigned char prime[] = { - 0xae, 0xfe, 0x78, 0xce, 0x80, 0xd5, 0xd7, 0x8e, 0xcc, 0x4f, 0x0c, 0x1b, 0xb0, 0x95, - 0x10, 0xe1, 0x41, 0x15, 0x53, 0x4d, 0x0e, 0x68, 0xb0, 0xf8, 0x5a, 0x41, 0x0e, 0x65, 0x2f, - 0x9f, 0xac, 0x9c, 0x30, 0xb0, 0x76, 0xec, 0x02, 0xe9, 0x43, 0x55, 0x08, 0xb4, 0x20, 0x60, - 0xd9, 0x52, 0xda, 0x2d, 0xab, 0x9a, 0xba, 0xe6, 0xcf, 0x11, 0xa7, 0x00, 0x44, 0xc2, 0x5e, - 0xd1, 0xba, 0x9b, 0xaa, 0xfe, 0x03, 0xdd, 0xdc, 0xef, 0x41, 0x89, 0x9c, 0xac, 0x64, 0x13, - 0xd9, 0x6a, 0x8a, 0x55, 0xa0, 0x5b, 0xff, 0x12, 0x92, 0x37, 0x52, 0x6a, 0x91, 0xa4, 0x6e, - 0x9e, 0x61, 0xb7, 0xfe, 0xb0, 0x17, 0x8e, 0x67, 0x0f, 0x88, 0x46, 0xa7, 0x9e, 0xb1, 0xdb, - 0x68, 0x77, 0x70, 0xb5, 0x77, 0xf2, 0x7e, 0x33, 0xb1, 0x3e, 0x10, 0xc4, 0x63, 0x36, 0xd0, - 0x13, 0x27, 0xd3, 0x29, 0xc3, 0xb6, 0x5d, 0xf6, 0x5d, 0xa7, 0xd8, 0x25, 0x5c, 0x0b, 0x65, - 0x99, 0xfa, 0xf9, 0x5f, 0x1d, 0xee, 0xd1, 0x86, 0x64, 0x7c, 0x44, 0xcb, 0xa0, 0x12, 0x52, - 0x4c, 0xd4, 0x46, 0x81, 0xae, 0x07, 0xdb, 0xc7, 0x13, 0x29, 0xce, 0x9b, 0xcf, 0x1c, 0x06, - 0xd2, 0x0f, 0x2d, 0xbb, 0x12, 0x33, 0xb9, 0xb1, 0x0f, 0x67, 0x5d, 0x3f, 0x0c, 0xe4, 0xfa, - 0x67, 0x26, 0xe2, 0x89, 0xa2, 0xd5, 0x66, 0x29, 0x1c, 0xe2, 0x8e, 0xbb, 0x7b, 0xcb, 0xcc, - 0x70, 0x7e, 0x4f, 0x0e, 0xd3, 0x5d, 0x64, 0x64, 0x1b, 0x27, 0xbb, 0xda, 0xa9, 0x08, 0x2b, - 0x62, 0xd4, 0xca, 0xc3, 0x3a, 0x23, 0x39, 0x58, 0x57, 0xaf, 0x7b, 0x8b, 0x0c, 0x5b, 0x2e, - 0xfc, 0x42, 0x57, 0x59, 0x39, 0x2e, 0x6d, 0x39, 0x97, 0xdb, 0x5b, 0x5c, 0xb9, 0x59, 0x71, - 0x42, 0xf3, 0xcd, 0xea, 0xda, 0x86, 0x54, 0x86, 0x61, 0x8d, 0x93, 0x66, 0xc7, 0x65, 0xd1, - 0x98, 0xcb - }; - - DO(dh_set_pg_dhparam(dhparam_der, sizeof(dhparam_der), &k)); - DO(dh_generate_key(&yarrow_prng, find_prng ("yarrow"), &k)); - if (ltc_mp_unsigned_bin_size(k.prime) > sizeof(buf)) { - printf("dhparam_test: short buf\n"); - dh_free(&k); - return CRYPT_ERROR; - } - DO(ltc_mp_to_unsigned_bin(k.prime, buf)); - COMPARE_TESTVECTOR(buf, sizeof(prime), prime, sizeof(prime), "dhparam_test: prime mismatch", 1); - if (ltc_mp_cmp_d(k.base, 2) != LTC_MP_EQ) { - printf("dhparam_test: base mismatch\n"); - dh_free(&k); - return CRYPT_ERROR; - } - dh_free(&k); - return CRYPT_OK; -} - -static int s_set_test(void) -{ - dh_key k1, k2, k3; - unsigned char buf[4096]; - unsigned long len; - int i; - unsigned char gbin[] = { 0x02 }; - unsigned char pbin[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, - 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, - 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, - 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, - 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, - 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, - 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, - 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, - 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, - 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, - 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, - 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, - 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, - 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, - 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, - 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAC, 0xAA, 0x68, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF - }; - unsigned char xbin[] = { - 0xA6, 0x68, 0x1A, 0xDC, 0x38, 0x6C, 0xE9, 0x44, 0xC3, 0xDE, 0xD9, 0xA7, 0x30, 0x1D, 0xCC, 0x9C, - 0x51, 0x82, 0x50, 0xE3, 0xED, 0xB6, 0x2F, 0x95, 0x91, 0x98, 0xF8, 0xDC, 0x00, 0x57, 0xDD, 0x6F, - 0xB5, 0x7A, 0xBA, 0xFD, 0x78, 0x81, 0x98, 0xB1 - }; - unsigned char ybin[] = { - 0x39, 0x04, 0x66, 0x32, 0xC8, 0x34, 0x41, 0x8D, 0xFA, 0x07, 0xB3, 0x09, 0x15, 0x38, 0xB6, 0x14, - 0xD1, 0xFB, 0x5D, 0xBB, 0x78, 0x5C, 0x0F, 0xBE, 0xA3, 0xB9, 0x8B, 0x29, 0x5B, 0xC0, 0xCD, 0x07, - 0x6A, 0x88, 0xD9, 0x45, 0x21, 0x41, 0xA2, 0x69, 0xE8, 0xBA, 0xEB, 0x1D, 0xD6, 0x54, 0xEB, 0xA0, - 0x3A, 0x57, 0x05, 0x31, 0x8D, 0x12, 0x97, 0x54, 0xCD, 0xF4, 0x00, 0x3A, 0x8C, 0x39, 0x92, 0x40, - 0xFB, 0xB8, 0xF1, 0x62, 0x49, 0x0F, 0x6F, 0x0D, 0xC7, 0x0E, 0x41, 0x4B, 0x6F, 0xEE, 0x88, 0x08, - 0x6A, 0xFA, 0xA4, 0x8E, 0x9F, 0x3A, 0x24, 0x8E, 0xDC, 0x09, 0x34, 0x52, 0x66, 0x3D, 0x34, 0xE0, - 0xE8, 0x09, 0xD4, 0xF6, 0xBA, 0xDB, 0xB3, 0x6F, 0x80, 0xB6, 0x81, 0x3E, 0xBF, 0x7C, 0x32, 0x81, - 0xB8, 0x62, 0x20, 0x9E, 0x56, 0x04, 0xBD, 0xEA, 0x8B, 0x8F, 0x5F, 0x7B, 0xFD, 0xC3, 0xEE, 0xB7, - 0xAD, 0xB7, 0x30, 0x48, 0x28, 0x9B, 0xCE, 0xA0, 0xF5, 0xA5, 0xCD, 0xEE, 0x7D, 0xF9, 0x1C, 0xD1, - 0xF0, 0xBA, 0x63, 0x2F, 0x06, 0xDB, 0xE9, 0xBA, 0x7E, 0xF0, 0x14, 0xB8, 0x4B, 0x02, 0xD4, 0x97, - 0xCA, 0x7D, 0x0C, 0x60, 0xF7, 0x34, 0x75, 0x2A, 0x64, 0x9D, 0xA4, 0x96, 0x94, 0x6B, 0x4E, 0x53, - 0x1B, 0x30, 0xD9, 0xF8, 0x2E, 0xDD, 0x85, 0x56, 0x36, 0xC0, 0xB0, 0xF2, 0xAE, 0x23, 0x2E, 0x41, - 0x86, 0x45, 0x4E, 0x88, 0x87, 0xBB, 0x42, 0x3E, 0x32, 0xA5, 0xA2, 0x49, 0x5E, 0xAC, 0xBA, 0x99, - 0x62, 0x0A, 0xCD, 0x03, 0xA3, 0x83, 0x45, 0xEB, 0xB6, 0x73, 0x5E, 0x62, 0x33, 0x0A, 0x8E, 0xE9, - 0xAA, 0x6C, 0x83, 0x70, 0x41, 0x0F, 0x5C, 0xD4, 0x5A, 0xF3, 0x7E, 0xE9, 0x0A, 0x0D, 0xA9, 0x5B, - 0xE9, 0x6F, 0xC9, 0x39, 0xE8, 0x8F, 0xE0, 0xBD, 0x2C, 0xD0, 0x9F, 0xC8, 0xF5, 0x24, 0x20, 0x8C - }; - - struct { - int radix; - void* g; int glen; - void* p; int plen; - void* x; int xlen; - void* y; int ylen; - } test[1] = { - { 256, gbin, sizeof(gbin), pbin, sizeof(pbin), xbin, sizeof(xbin), ybin, sizeof(ybin) } - }; - - unsigned char export_private[] = { - 0x30, 0x82, 0x01, 0x3A, 0x02, 0x01, 0x00, 0x03, 0x02, 0x07, 0x80, 0x02, 0x82, 0x01, 0x01, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, - 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, - 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, - 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, - 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, - 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, - 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, - 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, - 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, - 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, - 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, - 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, - 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, - 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, - 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, - 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAC, 0xAA, 0x68, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x02, 0x01, 0x02, 0x02, 0x29, 0x00, 0xA6, 0x68, 0x1A, 0xDC, 0x38, 0x6C, 0xE9, 0x44, 0xC3, 0xDE, - 0xD9, 0xA7, 0x30, 0x1D, 0xCC, 0x9C, 0x51, 0x82, 0x50, 0xE3, 0xED, 0xB6, 0x2F, 0x95, 0x91, 0x98, - 0xF8, 0xDC, 0x00, 0x57, 0xDD, 0x6F, 0xB5, 0x7A, 0xBA, 0xFD, 0x78, 0x81, 0x98, 0xB1 - }; - unsigned char export_public[] = { - 0x30, 0x82, 0x02, 0x13, 0x02, 0x01, 0x00, 0x03, 0x02, 0x07, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, - 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, - 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, - 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, - 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, - 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, - 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, - 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, - 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, - 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, - 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, - 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, - 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, - 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, - 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, - 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAC, 0xAA, 0x68, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x02, 0x01, 0x02, 0x02, 0x82, 0x01, 0x00, 0x39, 0x04, 0x66, 0x32, 0xC8, 0x34, 0x41, 0x8D, 0xFA, - 0x07, 0xB3, 0x09, 0x15, 0x38, 0xB6, 0x14, 0xD1, 0xFB, 0x5D, 0xBB, 0x78, 0x5C, 0x0F, 0xBE, 0xA3, - 0xB9, 0x8B, 0x29, 0x5B, 0xC0, 0xCD, 0x07, 0x6A, 0x88, 0xD9, 0x45, 0x21, 0x41, 0xA2, 0x69, 0xE8, - 0xBA, 0xEB, 0x1D, 0xD6, 0x54, 0xEB, 0xA0, 0x3A, 0x57, 0x05, 0x31, 0x8D, 0x12, 0x97, 0x54, 0xCD, - 0xF4, 0x00, 0x3A, 0x8C, 0x39, 0x92, 0x40, 0xFB, 0xB8, 0xF1, 0x62, 0x49, 0x0F, 0x6F, 0x0D, 0xC7, - 0x0E, 0x41, 0x4B, 0x6F, 0xEE, 0x88, 0x08, 0x6A, 0xFA, 0xA4, 0x8E, 0x9F, 0x3A, 0x24, 0x8E, 0xDC, - 0x09, 0x34, 0x52, 0x66, 0x3D, 0x34, 0xE0, 0xE8, 0x09, 0xD4, 0xF6, 0xBA, 0xDB, 0xB3, 0x6F, 0x80, - 0xB6, 0x81, 0x3E, 0xBF, 0x7C, 0x32, 0x81, 0xB8, 0x62, 0x20, 0x9E, 0x56, 0x04, 0xBD, 0xEA, 0x8B, - 0x8F, 0x5F, 0x7B, 0xFD, 0xC3, 0xEE, 0xB7, 0xAD, 0xB7, 0x30, 0x48, 0x28, 0x9B, 0xCE, 0xA0, 0xF5, - 0xA5, 0xCD, 0xEE, 0x7D, 0xF9, 0x1C, 0xD1, 0xF0, 0xBA, 0x63, 0x2F, 0x06, 0xDB, 0xE9, 0xBA, 0x7E, - 0xF0, 0x14, 0xB8, 0x4B, 0x02, 0xD4, 0x97, 0xCA, 0x7D, 0x0C, 0x60, 0xF7, 0x34, 0x75, 0x2A, 0x64, - 0x9D, 0xA4, 0x96, 0x94, 0x6B, 0x4E, 0x53, 0x1B, 0x30, 0xD9, 0xF8, 0x2E, 0xDD, 0x85, 0x56, 0x36, - 0xC0, 0xB0, 0xF2, 0xAE, 0x23, 0x2E, 0x41, 0x86, 0x45, 0x4E, 0x88, 0x87, 0xBB, 0x42, 0x3E, 0x32, - 0xA5, 0xA2, 0x49, 0x5E, 0xAC, 0xBA, 0x99, 0x62, 0x0A, 0xCD, 0x03, 0xA3, 0x83, 0x45, 0xEB, 0xB6, - 0x73, 0x5E, 0x62, 0x33, 0x0A, 0x8E, 0xE9, 0xAA, 0x6C, 0x83, 0x70, 0x41, 0x0F, 0x5C, 0xD4, 0x5A, - 0xF3, 0x7E, 0xE9, 0x0A, 0x0D, 0xA9, 0x5B, 0xE9, 0x6F, 0xC9, 0x39, 0xE8, 0x8F, 0xE0, 0xBD, 0x2C, - 0xD0, 0x9F, 0xC8, 0xF5, 0x24, 0x20, 0x8C - }; - - for (i = 0; i < 1; i++) { - DO(dh_set_pg(test[i].p, test[i].plen, test[i].g, test[i].glen, &k1)); - DO(dh_set_key(test[i].x, test[i].xlen, PK_PRIVATE, &k1)); - - len = sizeof(buf); - DO(dh_export(buf, &len, PK_PRIVATE, &k1)); - COMPARE_TESTVECTOR(buf, len, export_private, sizeof(export_private), "radix_test: dh_export+PK_PRIVATE mismatch", i*10 + 0); - len = sizeof(buf); - DO(dh_export(buf, &len, PK_PUBLIC, &k1)); - COMPARE_TESTVECTOR(buf, len, export_public, sizeof(export_public), "radix_test: dh_export+PK_PUBLIC mismatch", i*10 + 1); - len = sizeof(buf); - DO(dh_export_key(buf, &len, PK_PRIVATE, &k1)); - COMPARE_TESTVECTOR(buf, len, xbin, sizeof(xbin), "radix_test: dh_export+PK_PRIVATE mismatch", i*10 + 2); - len = sizeof(buf); - DO(dh_export_key(buf, &len, PK_PUBLIC, &k1)); - COMPARE_TESTVECTOR(buf, len, ybin, sizeof(ybin), "radix_test: dh_export+PK_PUBLIC mismatch", i*10 + 3); - dh_free(&k1); - - DO(dh_set_pg(test[i].p, test[i].plen, test[i].g, test[i].glen, &k1)); - DO(dh_set_key(test[i].x, test[i].xlen, PK_PRIVATE, &k1)); - - len = sizeof(buf); - DO(dh_export(buf, &len, PK_PRIVATE, &k1)); - COMPARE_TESTVECTOR(buf, len, export_private, sizeof(export_private), "radix_test: dh_export+PK_PRIVATE mismatc", i*10 + 4); - len = sizeof(buf); - DO(dh_export(buf, &len, PK_PUBLIC, &k1)); - COMPARE_TESTVECTOR(buf, len, export_public, sizeof(export_public), "radix_test: dh_export+PK_PUBLIC mismatch", i*10 + 5); - dh_free(&k1); - - DO(dh_set_pg(test[i].p, test[i].plen, test[i].g, test[i].glen, &k2)); - DO(dh_set_key(test[i].y, test[i].ylen, PK_PUBLIC, &k2)); - - len = sizeof(buf); - DO(dh_export(buf, &len, PK_PUBLIC, &k2)); - COMPARE_TESTVECTOR(buf, len, export_public, sizeof(export_public), "radix_test: dh_export+PK_PUBLIC mismatch", i*10 + 6); - len = sizeof(buf); - DO(dh_export_key(buf, &len, PK_PUBLIC, &k2)); - COMPARE_TESTVECTOR(buf, len, ybin, sizeof(ybin), "radix_test: dh_export+PK_PUBLIC mismatch", i*10 + 7); - dh_free(&k2); - - DO(dh_set_pg(test[i].p, test[i].plen, test[i].g, test[i].glen, &k3)); - DO(dh_generate_key(&yarrow_prng, find_prng("yarrow"), &k3)); - - len = ltc_mp_unsigned_bin_size(k3.prime); - DO(ltc_mp_to_unsigned_bin(k3.prime, buf)); - COMPARE_TESTVECTOR(buf, len, pbin, sizeof(pbin), "radix_test: dh_make_key_ex prime mismatch", i*10 + 8); - len = ltc_mp_unsigned_bin_size(k3.base); - DO(ltc_mp_to_unsigned_bin(k3.base, buf)); - COMPARE_TESTVECTOR(buf, len, gbin, sizeof(gbin), "radix_test: dh_make_key_ex base mismatch", i*10 + 9); - dh_free(&k3); - } - - return CRYPT_OK; -} - -static int s_basic_test(void) -{ - unsigned char buf[3][4096]; - unsigned long x, y, z; - int size, KEYSIZE; - dh_key usera, userb; - - /* tfm has a problem with larger sizes */ - KEYSIZE = (strcmp(ltc_mp.name, "TomsFastMath") == 0) ? 2048 : 4096; - - /* make up two keys */ - DO(dh_set_pg_groupsize(KEYSIZE/8, &usera)); - DO(dh_generate_key(&yarrow_prng, find_prng ("yarrow"), &usera)); - DO(dh_set_pg_groupsize(KEYSIZE/8, &userb)); - DO(dh_generate_key(&yarrow_prng, find_prng ("yarrow"), &userb)); - - /* make the shared secret */ - x = KEYSIZE; - DO(dh_shared_secret (&usera, &userb, buf[0], &x)); - - y = KEYSIZE; - DO(dh_shared_secret (&userb, &usera, buf[1], &y)); - if (y != x) { - fprintf(stderr, "DH Shared keys are not same size.\n"); - dh_free (&usera); - dh_free (&userb); - return CRYPT_ERROR; - } - if (memcmp (buf[0], buf[1], x)) { - fprintf(stderr, "DH Shared keys not same contents.\n"); - dh_free (&usera); - dh_free (&userb); - return CRYPT_ERROR; - } - - /* now export userb */ - y = KEYSIZE; - DO(dh_export (buf[1], &y, PK_PUBLIC, &userb)); - dh_free (&userb); - - /* import and make the shared secret again */ - DO(dh_import (buf[1], y, &userb)); - z = KEYSIZE; - DO(dh_shared_secret (&usera, &userb, buf[2], &z)); - - dh_free (&usera); - dh_free (&userb); - - if (z != x) { - fprintf(stderr, "failed. Size don't match?\n"); - return CRYPT_ERROR; - } - if (memcmp (buf[0], buf[2], x)) { - fprintf(stderr, "Failed. Content didn't match.\n"); - return CRYPT_ERROR; - } - - for (x = 0; ltc_dh_sets[x].size != 0; x++) { - /* tfm has a problem with larger sizes */ - if ((strcmp(ltc_mp.name, "TomsFastMath") == 0) && (ltc_dh_sets[x].size > 256)) break; - - DO(dh_set_pg_groupsize(ltc_dh_sets[x].size, &usera)); - DO(dh_generate_key(&yarrow_prng, find_prng ("yarrow"), &usera)); - size = dh_get_groupsize(&usera); - dh_free(&usera); - if (size != ltc_dh_sets[x].size) { - fprintf(stderr, "dh_groupsize mismatch %d %d\n", size, ltc_dh_sets[x].size); - return CRYPT_ERROR; - } - dh_free(&usera); - } - - return CRYPT_OK; -} - -int dh_test(void) -{ - int fails = 0; - - if (ltc_mp.name == NULL) return CRYPT_NOP; - - if (s_prime_test() != CRYPT_OK) fails++; - if (s_basic_test() != CRYPT_OK) fails++; - if (s_dhparam_test() != CRYPT_OK) fails++; - if (s_set_test() != CRYPT_OK) fails++; - return fails > 0 ? CRYPT_FAIL_TESTVECTOR : CRYPT_OK; -} - -#else -LTC_NOP_TEST(dh_test) -#endif diff --git a/tests/dsa_test.c b/tests/dsa_test.c deleted file mode 100644 index 879acaf1..00000000 --- a/tests/dsa_test.c +++ /dev/null @@ -1,389 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#if defined(LTC_MDSA) - -/* This is the private key from test_dsa.key */ -const unsigned char ltc_dsa_private_test_key[] = { - 0x30, 0x82, 0x01, 0xbb, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xc5, - 0x0a, 0x37, 0x51, 0x5c, 0xab, 0xd6, 0x18, 0xd5, 0xa2, 0x70, 0xbd, 0x4a, - 0x6f, 0x6b, 0x4a, 0xf9, 0xe1, 0x39, 0x95, 0x0f, 0x2b, 0x99, 0x38, 0x7d, - 0x9a, 0x64, 0xd6, 0x4c, 0xb5, 0x96, 0x7a, 0xdc, 0xed, 0xac, 0xa8, 0xac, - 0xc6, 0x1b, 0x65, 0x5a, 0xde, 0xdb, 0x00, 0x61, 0x25, 0x1a, 0x18, 0x2c, - 0xee, 0xa1, 0x07, 0x90, 0x62, 0x5e, 0x4d, 0x12, 0x31, 0x90, 0xc7, 0x03, - 0x21, 0xfa, 0x09, 0xe7, 0xb1, 0x73, 0xd7, 0x8e, 0xaf, 0xdb, 0xfd, 0xbf, - 0xb3, 0xef, 0xad, 0xd1, 0xa1, 0x2a, 0x03, 0x6d, 0xe7, 0x06, 0x92, 0x4a, - 0x85, 0x2a, 0xff, 0x7a, 0x01, 0x66, 0x53, 0x1f, 0xea, 0xc6, 0x67, 0x41, - 0x84, 0x5a, 0xc0, 0x6c, 0xed, 0x62, 0xf9, 0xc2, 0x62, 0x62, 0x05, 0xa4, - 0xfa, 0x48, 0xa0, 0x66, 0xec, 0x35, 0xc9, 0xa8, 0x11, 0xfe, 0xb9, 0x81, - 0xab, 0xee, 0xbe, 0x31, 0xb6, 0xbf, 0xcf, 0x02, 0x15, 0x00, 0xaa, 0x5b, - 0xd7, 0xf4, 0xe5, 0x06, 0x24, 0x13, 0xe5, 0x88, 0x35, 0xca, 0x00, 0xc7, - 0xa6, 0x35, 0x71, 0x61, 0x94, 0xc5, 0x02, 0x81, 0x80, 0x3b, 0x92, 0xe4, - 0xff, 0x59, 0x29, 0x15, 0x0b, 0x08, 0x99, 0x5a, 0x7b, 0xf2, 0xad, 0x14, - 0x40, 0x55, 0x6f, 0xa0, 0x47, 0xff, 0x90, 0x99, 0xb3, 0x44, 0xb3, 0xd4, - 0xfc, 0x45, 0x15, 0x05, 0xae, 0x67, 0x22, 0x43, 0x9c, 0xba, 0x37, 0x10, - 0xa5, 0x89, 0x47, 0x37, 0xec, 0xcc, 0xf5, 0xae, 0xad, 0xa8, 0xb4, 0x7a, - 0x35, 0xcb, 0x9d, 0x93, 0x5c, 0xed, 0xe6, 0xb0, 0x7e, 0x96, 0x94, 0xc4, - 0xa6, 0x0c, 0x7d, 0xd6, 0x70, 0x8a, 0x09, 0x4f, 0x81, 0x4a, 0x0e, 0xc2, - 0x13, 0xfb, 0xeb, 0x16, 0xbf, 0xea, 0xa4, 0xf4, 0x56, 0xff, 0x72, 0x30, - 0x05, 0xde, 0x8a, 0x44, 0x3f, 0xbe, 0xc6, 0x85, 0x26, 0x55, 0xd6, 0x2d, - 0x1d, 0x1e, 0xdb, 0x15, 0xda, 0xa4, 0x45, 0x83, 0x3c, 0x17, 0x97, 0x98, - 0x0b, 0x8d, 0x87, 0xf3, 0x49, 0x0d, 0x90, 0xbd, 0xa9, 0xab, 0x67, 0x6e, - 0x87, 0x68, 0x72, 0x23, 0xdc, 0x02, 0x81, 0x80, 0x53, 0x16, 0xb0, 0xfb, - 0xbf, 0x59, 0x8a, 0x5e, 0x55, 0x95, 0xc1, 0x4f, 0xac, 0x43, 0xb8, 0x08, - 0x53, 0xe6, 0xcf, 0x0d, 0x92, 0x23, 0xfa, 0xb1, 0x84, 0x59, 0x52, 0x39, - 0xbf, 0xcb, 0xf2, 0x2d, 0x38, 0x3a, 0xdd, 0x93, 0x52, 0x05, 0x49, 0x7e, - 0x2b, 0x12, 0xc4, 0x61, 0x73, 0xe3, 0x6f, 0x54, 0xbd, 0x96, 0xe5, 0xa7, - 0xaa, 0xa9, 0x5a, 0x58, 0xa4, 0xb7, 0x67, 0xd2, 0xc0, 0xbd, 0xc8, 0x1e, - 0xb1, 0x3a, 0x12, 0x4f, 0x98, 0xc0, 0x05, 0xef, 0x39, 0x5d, 0x6a, 0xba, - 0xb7, 0x0b, 0x3b, 0xd8, 0xb7, 0x95, 0xdd, 0x79, 0x6e, 0xa2, 0xd2, 0x84, - 0x73, 0x47, 0x03, 0x88, 0xb4, 0x64, 0xd9, 0xb9, 0xb8, 0x4f, 0xf1, 0xc9, - 0x34, 0xbb, 0xf9, 0x73, 0x66, 0xf5, 0x7c, 0x2e, 0x11, 0xfe, 0xc3, 0x31, - 0xe6, 0x08, 0x38, 0x59, 0x67, 0x81, 0xeb, 0x6d, 0x41, 0x27, 0xd7, 0x0d, - 0x74, 0xaf, 0xa0, 0x35, 0x02, 0x15, 0x00, 0x99, 0x36, 0xe5, 0xe4, 0xe9, - 0xfb, 0x28, 0xbe, 0x91, 0xf5, 0x06, 0x5f, 0xe8, 0xc9, 0x35, 0xb3, 0xf5, - 0xd8, 0x1f, 0xc5 -}; -const unsigned long ltc_dsa_private_test_key_sz = sizeof(ltc_dsa_private_test_key); - -/* private key - raw hexadecimal numbers */ -static const char *hex_g = "3B92E4FF5929150B08995A7BF2AD1440556FA047FF9099B344B3D4FC451505AE6722439CBA3710A5894737ECCCF5AEADA8B47A35CB9D935CEDE6B07E9694C4A60C7DD6708A094F814A0EC213FBEB16BFEAA4F456FF723005DE8A443FBEC6852655D62D1D1EDB15DAA445833C1797980B8D87F3490D90BDA9AB676E87687223DC"; -static const char *hex_p = "C50A37515CABD618D5A270BD4A6F6B4AF9E139950F2B99387D9A64D64CB5967ADCEDACA8ACC61B655ADEDB0061251A182CEEA10790625E4D123190C70321FA09E7B173D78EAFDBFDBFB3EFADD1A12A036DE706924A852AFF7A0166531FEAC66741845AC06CED62F9C2626205A4FA48A066EC35C9A811FEB981ABEEBE31B6BFCF"; -static const char *hex_q = "AA5BD7F4E5062413E58835CA00C7A635716194C5"; -static const char *hex_x = "9936E5E4E9FB28BE91F5065FE8C935B3F5D81FC5"; -static const char *hex_y = "5316B0FBBF598A5E5595C14FAC43B80853E6CF0D9223FAB184595239BFCBF22D383ADD935205497E2B12C46173E36F54BD96E5A7AAA95A58A4B767D2C0BDC81EB13A124F98C005EF395D6ABAB70B3BD8B795DD796EA2D28473470388B464D9B9B84FF1C934BBF97366F57C2E11FEC331E60838596781EB6D4127D70D74AFA035"; - -/* The public part of test_dsa.key in SubjectPublicKeyInfo format */ -static const unsigned char openssl_pub_dsa[] = { - 0x30, 0x82, 0x01, 0xb6, 0x30, 0x82, 0x01, 0x2b, 0x06, 0x07, 0x2a, 0x86, - 0x48, 0xce, 0x38, 0x04, 0x01, 0x30, 0x82, 0x01, 0x1e, 0x02, 0x81, 0x81, - 0x00, 0xc5, 0x0a, 0x37, 0x51, 0x5c, 0xab, 0xd6, 0x18, 0xd5, 0xa2, 0x70, - 0xbd, 0x4a, 0x6f, 0x6b, 0x4a, 0xf9, 0xe1, 0x39, 0x95, 0x0f, 0x2b, 0x99, - 0x38, 0x7d, 0x9a, 0x64, 0xd6, 0x4c, 0xb5, 0x96, 0x7a, 0xdc, 0xed, 0xac, - 0xa8, 0xac, 0xc6, 0x1b, 0x65, 0x5a, 0xde, 0xdb, 0x00, 0x61, 0x25, 0x1a, - 0x18, 0x2c, 0xee, 0xa1, 0x07, 0x90, 0x62, 0x5e, 0x4d, 0x12, 0x31, 0x90, - 0xc7, 0x03, 0x21, 0xfa, 0x09, 0xe7, 0xb1, 0x73, 0xd7, 0x8e, 0xaf, 0xdb, - 0xfd, 0xbf, 0xb3, 0xef, 0xad, 0xd1, 0xa1, 0x2a, 0x03, 0x6d, 0xe7, 0x06, - 0x92, 0x4a, 0x85, 0x2a, 0xff, 0x7a, 0x01, 0x66, 0x53, 0x1f, 0xea, 0xc6, - 0x67, 0x41, 0x84, 0x5a, 0xc0, 0x6c, 0xed, 0x62, 0xf9, 0xc2, 0x62, 0x62, - 0x05, 0xa4, 0xfa, 0x48, 0xa0, 0x66, 0xec, 0x35, 0xc9, 0xa8, 0x11, 0xfe, - 0xb9, 0x81, 0xab, 0xee, 0xbe, 0x31, 0xb6, 0xbf, 0xcf, 0x02, 0x15, 0x00, - 0xaa, 0x5b, 0xd7, 0xf4, 0xe5, 0x06, 0x24, 0x13, 0xe5, 0x88, 0x35, 0xca, - 0x00, 0xc7, 0xa6, 0x35, 0x71, 0x61, 0x94, 0xc5, 0x02, 0x81, 0x80, 0x3b, - 0x92, 0xe4, 0xff, 0x59, 0x29, 0x15, 0x0b, 0x08, 0x99, 0x5a, 0x7b, 0xf2, - 0xad, 0x14, 0x40, 0x55, 0x6f, 0xa0, 0x47, 0xff, 0x90, 0x99, 0xb3, 0x44, - 0xb3, 0xd4, 0xfc, 0x45, 0x15, 0x05, 0xae, 0x67, 0x22, 0x43, 0x9c, 0xba, - 0x37, 0x10, 0xa5, 0x89, 0x47, 0x37, 0xec, 0xcc, 0xf5, 0xae, 0xad, 0xa8, - 0xb4, 0x7a, 0x35, 0xcb, 0x9d, 0x93, 0x5c, 0xed, 0xe6, 0xb0, 0x7e, 0x96, - 0x94, 0xc4, 0xa6, 0x0c, 0x7d, 0xd6, 0x70, 0x8a, 0x09, 0x4f, 0x81, 0x4a, - 0x0e, 0xc2, 0x13, 0xfb, 0xeb, 0x16, 0xbf, 0xea, 0xa4, 0xf4, 0x56, 0xff, - 0x72, 0x30, 0x05, 0xde, 0x8a, 0x44, 0x3f, 0xbe, 0xc6, 0x85, 0x26, 0x55, - 0xd6, 0x2d, 0x1d, 0x1e, 0xdb, 0x15, 0xda, 0xa4, 0x45, 0x83, 0x3c, 0x17, - 0x97, 0x98, 0x0b, 0x8d, 0x87, 0xf3, 0x49, 0x0d, 0x90, 0xbd, 0xa9, 0xab, - 0x67, 0x6e, 0x87, 0x68, 0x72, 0x23, 0xdc, 0x03, 0x81, 0x84, 0x00, 0x02, - 0x81, 0x80, 0x53, 0x16, 0xb0, 0xfb, 0xbf, 0x59, 0x8a, 0x5e, 0x55, 0x95, - 0xc1, 0x4f, 0xac, 0x43, 0xb8, 0x08, 0x53, 0xe6, 0xcf, 0x0d, 0x92, 0x23, - 0xfa, 0xb1, 0x84, 0x59, 0x52, 0x39, 0xbf, 0xcb, 0xf2, 0x2d, 0x38, 0x3a, - 0xdd, 0x93, 0x52, 0x05, 0x49, 0x7e, 0x2b, 0x12, 0xc4, 0x61, 0x73, 0xe3, - 0x6f, 0x54, 0xbd, 0x96, 0xe5, 0xa7, 0xaa, 0xa9, 0x5a, 0x58, 0xa4, 0xb7, - 0x67, 0xd2, 0xc0, 0xbd, 0xc8, 0x1e, 0xb1, 0x3a, 0x12, 0x4f, 0x98, 0xc0, - 0x05, 0xef, 0x39, 0x5d, 0x6a, 0xba, 0xb7, 0x0b, 0x3b, 0xd8, 0xb7, 0x95, - 0xdd, 0x79, 0x6e, 0xa2, 0xd2, 0x84, 0x73, 0x47, 0x03, 0x88, 0xb4, 0x64, - 0xd9, 0xb9, 0xb8, 0x4f, 0xf1, 0xc9, 0x34, 0xbb, 0xf9, 0x73, 0x66, 0xf5, - 0x7c, 0x2e, 0x11, 0xfe, 0xc3, 0x31, 0xe6, 0x08, 0x38, 0x59, 0x67, 0x81, - 0xeb, 0x6d, 0x41, 0x27, 0xd7, 0x0d, 0x74, 0xaf, 0xa0, 0x35 -}; - -static unsigned char dsaparam_der[] = { - 0x30, 0x82, 0x01, 0x1e, 0x02, 0x81, 0x81, 0x00, 0xc5, 0x0a, 0x37, 0x51, - 0x5c, 0xab, 0xd6, 0x18, 0xd5, 0xa2, 0x70, 0xbd, 0x4a, 0x6f, 0x6b, 0x4a, - 0xf9, 0xe1, 0x39, 0x95, 0x0f, 0x2b, 0x99, 0x38, 0x7d, 0x9a, 0x64, 0xd6, - 0x4c, 0xb5, 0x96, 0x7a, 0xdc, 0xed, 0xac, 0xa8, 0xac, 0xc6, 0x1b, 0x65, - 0x5a, 0xde, 0xdb, 0x00, 0x61, 0x25, 0x1a, 0x18, 0x2c, 0xee, 0xa1, 0x07, - 0x90, 0x62, 0x5e, 0x4d, 0x12, 0x31, 0x90, 0xc7, 0x03, 0x21, 0xfa, 0x09, - 0xe7, 0xb1, 0x73, 0xd7, 0x8e, 0xaf, 0xdb, 0xfd, 0xbf, 0xb3, 0xef, 0xad, - 0xd1, 0xa1, 0x2a, 0x03, 0x6d, 0xe7, 0x06, 0x92, 0x4a, 0x85, 0x2a, 0xff, - 0x7a, 0x01, 0x66, 0x53, 0x1f, 0xea, 0xc6, 0x67, 0x41, 0x84, 0x5a, 0xc0, - 0x6c, 0xed, 0x62, 0xf9, 0xc2, 0x62, 0x62, 0x05, 0xa4, 0xfa, 0x48, 0xa0, - 0x66, 0xec, 0x35, 0xc9, 0xa8, 0x11, 0xfe, 0xb9, 0x81, 0xab, 0xee, 0xbe, - 0x31, 0xb6, 0xbf, 0xcf, 0x02, 0x15, 0x00, 0xaa, 0x5b, 0xd7, 0xf4, 0xe5, - 0x06, 0x24, 0x13, 0xe5, 0x88, 0x35, 0xca, 0x00, 0xc7, 0xa6, 0x35, 0x71, - 0x61, 0x94, 0xc5, 0x02, 0x81, 0x80, 0x3b, 0x92, 0xe4, 0xff, 0x59, 0x29, - 0x15, 0x0b, 0x08, 0x99, 0x5a, 0x7b, 0xf2, 0xad, 0x14, 0x40, 0x55, 0x6f, - 0xa0, 0x47, 0xff, 0x90, 0x99, 0xb3, 0x44, 0xb3, 0xd4, 0xfc, 0x45, 0x15, - 0x05, 0xae, 0x67, 0x22, 0x43, 0x9c, 0xba, 0x37, 0x10, 0xa5, 0x89, 0x47, - 0x37, 0xec, 0xcc, 0xf5, 0xae, 0xad, 0xa8, 0xb4, 0x7a, 0x35, 0xcb, 0x9d, - 0x93, 0x5c, 0xed, 0xe6, 0xb0, 0x7e, 0x96, 0x94, 0xc4, 0xa6, 0x0c, 0x7d, - 0xd6, 0x70, 0x8a, 0x09, 0x4f, 0x81, 0x4a, 0x0e, 0xc2, 0x13, 0xfb, 0xeb, - 0x16, 0xbf, 0xea, 0xa4, 0xf4, 0x56, 0xff, 0x72, 0x30, 0x05, 0xde, 0x8a, - 0x44, 0x3f, 0xbe, 0xc6, 0x85, 0x26, 0x55, 0xd6, 0x2d, 0x1d, 0x1e, 0xdb, - 0x15, 0xda, 0xa4, 0x45, 0x83, 0x3c, 0x17, 0x97, 0x98, 0x0b, 0x8d, 0x87, - 0xf3, 0x49, 0x0d, 0x90, 0xbd, 0xa9, 0xab, 0x67, 0x6e, 0x87, 0x68, 0x72, - 0x23, 0xdc - }; - - -int dsa_key_cmp(const int should_type, const dsa_key *should, const dsa_key *is) -{ - if (should_type != is->type) return CRYPT_ERROR; - if (should_type == PK_PRIVATE) { - if (ltc_mp_cmp(should->x, is->x) != LTC_MP_EQ) return CRYPT_ERROR; - } - if (ltc_mp_cmp(should->y, is->y) != LTC_MP_EQ) return CRYPT_ERROR; - if (ltc_mp_cmp(should->g, is->g) != LTC_MP_EQ) return CRYPT_ERROR; - if (ltc_mp_cmp(should->p, is->p) != LTC_MP_EQ) return CRYPT_ERROR; - if (ltc_mp_cmp(should->q, is->q) != LTC_MP_EQ) return CRYPT_ERROR; - if (should->qord != is->qord) return CRYPT_ERROR; - return CRYPT_OK; -} - -static int s_dsa_compat_test(void) -{ - dsa_key key; - unsigned char tmp[1024], buf[1024]; - unsigned long x, len; - unsigned char key_parts[5][256]; - unsigned long key_lens[5]; - int stat; - - DO(dsa_import(ltc_dsa_private_test_key, sizeof(ltc_dsa_private_test_key), &key)); - - x = sizeof(tmp); - DO(dsa_export(tmp, &x, PK_PRIVATE | PK_STD, &key)); - COMPARE_TESTVECTOR(tmp, x, ltc_dsa_private_test_key, sizeof(ltc_dsa_private_test_key), - "DSA private export from dsa_import(priv_key)\n", __LINE__); - - x = sizeof(tmp); - DO(dsa_export(tmp, &x, PK_PUBLIC | PK_STD, &key)); - COMPARE_TESTVECTOR(tmp, x, openssl_pub_dsa, sizeof(openssl_pub_dsa), - "DSA public export from dsa_import(priv_key)\n", __LINE__); - dsa_free(&key); - - DO(dsa_import(openssl_pub_dsa, sizeof(openssl_pub_dsa), &key)); - - x = sizeof(tmp); - DO(dsa_export(tmp, &x, PK_PUBLIC | PK_STD, &key)); - COMPARE_TESTVECTOR(tmp, x, openssl_pub_dsa, sizeof(openssl_pub_dsa), - "DSA public export from dsa_import(pub_key)\n", __LINE__); - dsa_free(&key); - - /* try import private key from raw hexadecimal numbers */ - for (x = 0; x < 5; ++x) { - key_lens[x] = sizeof(key_parts[x]); - } - DO(radix_to_bin(hex_p, 16, key_parts[0], &key_lens[0])); - DO(radix_to_bin(hex_q, 16, key_parts[1], &key_lens[1])); - DO(radix_to_bin(hex_g, 16, key_parts[2], &key_lens[2])); - DO(radix_to_bin(hex_y, 16, key_parts[3], &key_lens[3])); - DO(radix_to_bin(hex_x, 16, key_parts[4], &key_lens[4])); - - DO(dsa_set_pqg(key_parts[0], key_lens[0], - key_parts[1], key_lens[1], - key_parts[2], key_lens[2], - &key)); - DO(dsa_set_key(key_parts[4], key_lens[4], - PK_PRIVATE, - &key)); - len = sizeof(buf); - DO(dsa_export(buf, &len, PK_PRIVATE | PK_STD, &key)); - COMPARE_TESTVECTOR(buf, len, ltc_dsa_private_test_key, sizeof(ltc_dsa_private_test_key), - "DSA private export from dsa_set_pqg() & dsa_set_key()\n", __LINE__); - dsa_free(&key); - - /* try import public key from raw hexadecimal numbers */ - DO(dsa_set_pqg(key_parts[0], key_lens[0], - key_parts[1], key_lens[1], - key_parts[2], key_lens[2], - &key)); - DO(dsa_set_key(key_parts[3], key_lens[3], - PK_PUBLIC, - &key)); - len = sizeof(buf); - DO(dsa_export(buf, &len, PK_PUBLIC | PK_STD, &key)); - COMPARE_TESTVECTOR(buf, len, openssl_pub_dsa, sizeof(openssl_pub_dsa), - "DSA public export from dsa_set_pqg() & dsa_set_key()\n", __LINE__); - dsa_free(&key); - - /* try import dsaparam */ - DO(dsa_set_pqg_dsaparam(dsaparam_der, sizeof(dsaparam_der), &key)); - DO(dsa_generate_key(&yarrow_prng, find_prng("yarrow"), &key)); - /* verify it */ - DO(dsa_verify_key(&key, &stat)); - if (stat == 0) { - fprintf(stderr, "dsa_verify_key after dsa_set_pqg_dsaparam()"); - return CRYPT_FAIL_TESTVECTOR; - } - dsa_free(&key); - - /* try import dsaparam - our public key */ - DO(dsa_set_pqg_dsaparam(dsaparam_der, sizeof(dsaparam_der), &key)); - DO(dsa_set_key(key_parts[3], key_lens[3], - PK_PUBLIC, - &key)); - len = sizeof(buf); - DO(dsa_export(buf, &len, PK_PUBLIC | PK_STD, &key)); - COMPARE_TESTVECTOR(buf, len, openssl_pub_dsa, sizeof(openssl_pub_dsa), - "DSA public export from dsa_set_pqg_dsaparam()\n", __LINE__); - dsa_free(&key); - - /* try import dsaparam - our private key */ - DO(dsa_set_pqg_dsaparam(dsaparam_der, sizeof(dsaparam_der), &key)); - DO(dsa_set_key(key_parts[4], key_lens[4], - PK_PRIVATE, - &key)); - len = sizeof(buf); - DO(dsa_export(buf, &len, PK_PRIVATE | PK_STD, &key)); - COMPARE_TESTVECTOR(buf, len, ltc_dsa_private_test_key, sizeof(ltc_dsa_private_test_key), - "DSA private export from dsa_set_pqg_dsaparam()\n", __LINE__); - dsa_free(&key); - - return CRYPT_OK; -} - -static int s_dsa_wycheproof_test(void) -{ - /* test case from https://github.com/google/wycheproof/blob/master/testvectors/dsa_test.json - * - * "comment" : "appending unused 0's", - * "message" : "48656c6c6f", - * "result" : "invalid", - * "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", - * "tcId" : 55 - */ - unsigned char msg[] = { 0x48, 0x65, 0x6c, 0x6c, 0x6f }; - unsigned char sig[] = { 0x30, 0x3d, 0x02, 0x1c, 0x1e, 0x41, 0xb4, 0x79, 0xad, 0x57, 0x69, 0x05, 0xb9, 0x60, 0xfe, - 0x14, 0xea, 0xdb, 0x91, 0xb0, 0xcc, 0xf3, 0x48, 0x43, 0xda, 0xb9, 0x16, 0x17, 0x3b, 0xb8, - 0xc9, 0xcd, 0x02, 0x1d, 0x00, 0xad, 0xe6, 0x59, 0x88, 0xd2, 0x37, 0xd3, 0x0f, 0x9e, 0xf4, - 0x1d, 0xd4, 0x24, 0xa4, 0xe1, 0xc8, 0xf1, 0x69, 0x67, 0xcf, 0x33, 0x65, 0x81, 0x3f, 0xe8, - 0x78, 0x62, 0x36, 0x00, 0x00 }; - const char* b64key = - "MIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7FnjuvNxjo6sSWHz79" - "NgbnQ1GpxBgzObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwOjxSzNggooi/6JxEKPWKpk0U0CaD+" - "aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYpH51kjviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGM" - "n/qdgYHnM423krcw17njSVkvaAmYchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsIOKHEUOTh" - "jBopo33fXqFD3ktm/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0A" - "uvaWpoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQNNNo6NHjBVNTk" - "pcAtJC7gT5bmHkvQkEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJsyB2p5wypifyRz6Rh5uixOdE" - "vSCBVEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjGjQUntxyaOrsLC+EsRGiWOefTznTbEBplqiuH" - "9kxoJts+xy9LVZmDS7TtsC98kOmkltOlXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5HSPh+" - "+1/et1SEMWsiMt7lU92vAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8UoELxoi34u1DFuHv" - "F9veA4IBBQACggEAHnf4QrGuD82ZKdOUFh1B4UYU/3UHqaMfSh8U0i4qYnofTllmJIg/GlsWjpQl" - "FG8i1fbuKHV0FHFLuZS6ESnwFdbgSnF+35tTCl1cq5TxRjHotM95rrNYzHQYRVU4QeisRhYw6ASm" - "L0Nna6Z5SvZomcN3uGnqYSp7n+ZhGqlr5S64tiyXkRe7vMqKfsHh/6scffz8cEhwDTrjhYE26Jdw" - "HXwpIbXf7x0fiX9Q2WyhtcLtxYytoYkZ41ZC8IB+6/oAyZoy9NCVwxiPeO1UcRvgMlxLUyrszWVA" - "pWfDJyJUQOoVMZveBlEEeaGGF5niW1fezHPANtdaBwK9NzyiMTSZMQ=="; - unsigned char derkey[838]; - unsigned long derlen = sizeof(derkey); - unsigned char hash[32]; - unsigned long hashlen = sizeof(hash); - dsa_key key; - int stat; - - DO(base64_decode(b64key, XSTRLEN(b64key), derkey, &derlen)); - if (derlen != 838) { - fprintf(stderr, "base64_decode failed, derlen=%lu (expected 838)\n", derlen); - return CRYPT_FAIL_TESTVECTOR; - } - DO(dsa_import(derkey, derlen, &key)); - DO(hash_memory(find_hash("sha224"), msg, sizeof(msg), hash, &hashlen)); - if (hashlen != 28) { - fprintf(stderr, "hash_memory failed, hashlen=%lu (expected 32)\n", hashlen); - return CRYPT_FAIL_TESTVECTOR; - } - - stat = 666; /* intentionally not one, not zero */ - DO(dsa_verify_hash(sig, sizeof(sig)-2, hash, hashlen, &stat, &key)); - /* without the last two 0x00 bytes it is a valid signature */ - if (stat != 1) { - fprintf(stderr, "dsa_verify_hash rejected valid signature\n"); - return CRYPT_FAIL_TESTVECTOR; - } - - stat = 666; /* intentionally not one, not zero */ - DOX(dsa_verify_hash(sig, sizeof(sig), hash, hashlen, &stat, &key) - == CRYPT_INPUT_TOO_LONG ? CRYPT_OK:CRYPT_INVALID_PACKET, "should be too long"); - /* this should be invalid */ - if (stat != 0) { - fprintf(stderr, "dsa_verify_hash did not reject invalid signature\n"); - return CRYPT_FAIL_TESTVECTOR; - } - - dsa_free(&key); - return CRYPT_OK; -} - -int dsa_test(void) -{ - unsigned char msg[16], out[1024], out2[1024], ch; - unsigned long x, y; - int stat1, stat2; - dsa_key key, key2; - - if (ltc_mp.name == NULL) return CRYPT_NOP; - - DO(s_dsa_compat_test()); - DO(s_dsa_wycheproof_test()); - - /* make a random key */ - DO(dsa_generate_pqg(&yarrow_prng, find_prng("yarrow"), 20, 128, &key)); - DO(dsa_generate_key(&yarrow_prng, find_prng("yarrow"), &key)); - - /* verify it */ - DO(dsa_verify_key(&key, &stat1)); - if (stat1 == 0) { fprintf(stderr, "dsa_verify_key "); return 1; } - - /* encrypt a message */ - for (ch = 0; ch < 16; ch++) { msg[ch] = ch; } - x = sizeof(out); - DO(dsa_encrypt_key(msg, 16, out, &x, &yarrow_prng, find_prng("yarrow"), find_hash("sha1"), &key)); - - /* decrypt */ - y = sizeof(out2); - DO(dsa_decrypt_key(out, x, out2, &y, &key)); - - if (y != 16 || memcmp(out2, msg, 16)) { - fprintf(stderr, "dsa_decrypt failed, y == %lu\n", y); - return 1; - } - - /* sign the message */ - x = sizeof(out); - DO(dsa_sign_hash(msg, sizeof(msg), out, &x, &yarrow_prng, find_prng("yarrow"), &key)); - - /* verify it once */ - DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat1, &key)); - - /* Modify and verify again */ - msg[0] ^= 1; - DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat2, &key)); - msg[0] ^= 1; - if (!(stat1 == 1 && stat2 == 0)) { fprintf(stderr, "dsa_verify %d %d", stat1, stat2); return 1; } - - /* test exporting it */ - y = sizeof(out2); - DO(dsa_export(out2, &y, PK_PRIVATE, &key)); - DO(dsa_import(out2, y, &key2)); - - /* verify a signature with it */ - DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat1, &key2)); - if (stat1 == 0) { fprintf(stderr, "dsa_verify (import private) %d ", stat1); return 1; } - dsa_free(&key2); - - /* export as public now */ - y = sizeof(out2); - DO(dsa_export(out2, &y, PK_PUBLIC, &key)); - - DO(dsa_import(out2, y, &key2)); - /* verify a signature with it */ - DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat1, &key2)); - if (stat1 == 0) { fprintf(stderr, "dsa_verify (import public) %d ", stat1); return 1; } - dsa_free(&key2); - dsa_free(&key); - - return 0; -} - -#else -LTC_NOP_TEST(dsa_test) -#endif diff --git a/tests/ecc_test.c b/tests/ecc_test.c deleted file mode 100644 index 32f01284..00000000 --- a/tests/ecc_test.c +++ /dev/null @@ -1,2642 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#if defined(LTC_MECC) - -const unsigned char ltc_ecc_long_pri_test_key[] = { /* private + long public, explicit curve params */ - 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20, 0x0c, 0xf1, 0xad, 0x2f, 0x03, 0xf7, 0x91, - 0x1b, 0xba, 0x03, 0xcf, 0x23, 0x37, 0xc8, 0xf2, 0xf7, 0x36, 0xce, 0x65, 0xf1, 0x84, 0x2d, 0x7d, - 0x9f, 0x5f, 0x9e, 0x21, 0xd9, 0x5e, 0x49, 0xbd, 0x23, 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, - 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2f, - 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04, 0x41, 0x04, 0x79, 0xbe, 0x66, 0x7e, 0xf9, - 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xce, 0x87, 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, - 0xce, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8, 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, - 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0e, 0x11, 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, - 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10, 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xba, 0xae, - 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, - 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00, 0x04, 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, 0xd1, - 0xcf, 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, 0xd5, - 0xf9, 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16, 0x91, 0xbd, 0xb2, 0xb9, 0x1b, 0x40, 0x10, 0x5a, 0xb7, - 0x6c, 0x6e, 0x32, 0x5b, 0xf7, 0x63, 0x62, 0x94, 0x24, 0x24, 0xdb, 0xec, 0x3f, 0x8b, 0xe5, 0x6e, - 0x4b, 0x64, 0x37, 0x31, 0x24, 0x79, 0x4d -}; -const unsigned long ltc_ecc_long_pri_test_key_sz = sizeof(ltc_ecc_long_pri_test_key); - -static unsigned int sizes[] = { -#ifdef LTC_ECC_SECP112R1 -14, -#endif -#ifdef LTC_ECC_SECP128R1 -16, -#endif -#ifdef LTC_ECC_SECP160R1 -20, -#endif -#ifdef LTC_ECC_SECP192R1 -24, -#endif -#ifdef LTC_ECC_SECP224R1 -28, -#endif -#ifdef LTC_ECC_SECP256R1 -32, -#endif -#ifdef LTC_ECC_SECP384R1 -48, -#endif -#ifdef LTC_ECC_SECP512R1 -66 -#endif -}; - -static const char* curvenames[] = { -#ifdef LTC_ECC_SECP112R1 - "SECP112R1", "ECC-112", - "secp112r1", /* name is case-insensitive */ - "S E C-P-1_1_2r1", /* should pass fuzzy matching */ -#endif -#ifdef LTC_ECC_SECP112R2 - "SECP112R2", -#endif -#ifdef LTC_ECC_SECP128R1 - "SECP128R1", "ECC-128", -#endif -#ifdef LTC_ECC_SECP128R2 - "SECP128R2", -#endif -#ifdef LTC_ECC_SECP160R1 - "SECP160R1", "ECC-160", -#endif -#ifdef LTC_ECC_SECP160R2 - "SECP160R2", -#endif -#ifdef LTC_ECC_SECP160K1 - "SECP160K1", -#endif -#ifdef LTC_ECC_BRAINPOOLP160R1 - "BRAINPOOLP160R1", -#endif -#ifdef LTC_ECC_SECP192R1 - "SECP192R1", "NISTP192", "PRIME192V1", "ECC-192", "P-192", -#endif -#ifdef LTC_ECC_PRIME192V2 - "PRIME192V2", -#endif -#ifdef LTC_ECC_PRIME192V3 - "PRIME192V3", -#endif -#ifdef LTC_ECC_SECP192K1 - "SECP192K1", -#endif -#ifdef LTC_ECC_BRAINPOOLP192R1 - "BRAINPOOLP192R1", -#endif -#ifdef LTC_ECC_SECP224R1 - "SECP224R1", "NISTP224", "ECC-224", "P-224", -#endif -#ifdef LTC_ECC_SECP224K1 - "SECP224K1", -#endif -#ifdef LTC_ECC_BRAINPOOLP224R1 - "BRAINPOOLP224R1", -#endif -#ifdef LTC_ECC_PRIME239V1 - "PRIME239V1", -#endif -#ifdef LTC_ECC_PRIME239V2 - "PRIME239V2", -#endif -#ifdef LTC_ECC_PRIME239V3 - "PRIME239V3", -#endif -#ifdef LTC_ECC_SECP256R1 - "SECP256R1", "NISTP256", "PRIME256V1", "ECC-256", "P-256", -#endif -#ifdef LTC_ECC_SECP256K1 - "SECP256K1", -#endif -#ifdef LTC_ECC_BRAINPOOLP256R1 - "BRAINPOOLP256R1", -#endif -#ifdef LTC_ECC_BRAINPOOLP320R1 - "BRAINPOOLP320R1", -#endif -#ifdef LTC_ECC_SECP384R1 - "SECP384R1", "NISTP384", "ECC-384", "P-384", -#endif -#ifdef LTC_ECC_BRAINPOOLP384R1 - "BRAINPOOLP384R1", -#endif -#ifdef LTC_ECC_BRAINPOOLP512R1 - "BRAINPOOLP512R1", -#endif -#ifdef LTC_ECC_SECP521R1 - "SECP521R1", "NISTP521", "ECC-521", "P-521", -#endif -}; - - -#ifdef LTC_ECC_SHAMIR -static int s_ecc_test_shamir(void) -{ - void *a, *modulus, *mp, *kA, *kB, *rA, *rB; - void *mu, *ma; - ecc_point *G, *A, *B, *C1, *C2; - int x, y, z; - unsigned char buf[ECC_BUF_SIZE]; - - DO(ltc_mp_init_multi(&kA, &kB, &rA, &rB, &modulus, &a, &mu, &ma, LTC_NULL)); - LTC_ARGCHK((G = ltc_ecc_new_point()) != NULL); - LTC_ARGCHK((A = ltc_ecc_new_point()) != NULL); - LTC_ARGCHK((B = ltc_ecc_new_point()) != NULL); - LTC_ARGCHK((C1 = ltc_ecc_new_point()) != NULL); - LTC_ARGCHK((C2 = ltc_ecc_new_point()) != NULL); - - for (x = 0; x < (int)LTC_ARRAY_SIZE(sizes); x++) { - /* get the base point */ - for (z = 0; ltc_ecc_curves[z].prime != NULL; z++) { - DO(ltc_mp_read_radix(modulus, ltc_ecc_curves[z].prime, 16)); - if (sizes[x] <= ltc_mp_unsigned_bin_size(modulus)) break; - } - LTC_ARGCHK(ltc_ecc_curves[z].prime != NULL); - - /* load it */ - DO(ltc_mp_read_radix(G->x, ltc_ecc_curves[z].Gx, 16)); - DO(ltc_mp_read_radix(G->y, ltc_ecc_curves[z].Gy, 16)); - DO(ltc_mp_set(G->z, 1)); - DO(ltc_mp_read_radix(a, ltc_ecc_curves[z].A, 16)); - DO(ltc_mp_montgomery_setup(modulus, &mp)); - DO(ltc_mp_montgomery_normalization(mu, modulus)); - DO(ltc_mp_mulmod(a, mu, modulus, ma)); - - /* do 100 random tests */ - for (y = 0; y < 100; y++) { - /* pick a random r1, r2 */ - ENSURE(yarrow_read(buf, sizes[x], &yarrow_prng) == sizes[x]); - DO(ltc_mp_read_unsigned_bin(rA, buf, sizes[x])); - ENSURE(yarrow_read(buf, sizes[x], &yarrow_prng) == sizes[x]); - DO(ltc_mp_read_unsigned_bin(rB, buf, sizes[x])); - - /* compute rA * G = A */ - DO(ltc_mp.ecc_ptmul(rA, G, A, a, modulus, 1)); - - /* compute rB * G = B */ - DO(ltc_mp.ecc_ptmul(rB, G, B, a, modulus, 1)); - - /* pick a random kA, kB */ - ENSURE(yarrow_read(buf, sizes[x], &yarrow_prng) == sizes[x]); - DO(ltc_mp_read_unsigned_bin(kA, buf, sizes[x])); - ENSURE(yarrow_read(buf, sizes[x], &yarrow_prng) == sizes[x]); - DO(ltc_mp_read_unsigned_bin(kB, buf, sizes[x])); - - /* now, compute kA*A + kB*B = C1 using the older method */ - DO(ltc_mp.ecc_ptmul(kA, A, C1, a, modulus, 0)); - DO(ltc_mp.ecc_ptmul(kB, B, C2, a, modulus, 0)); - DO(ltc_mp.ecc_ptadd(C1, C2, C1, a, modulus, mp)); - DO(ltc_mp.ecc_map(C1, modulus, mp)); - - /* now compute using mul2add */ - DO(ltc_mp.ecc_mul2add(A, kA, B, kB, C2, ma, modulus)); - - /* is they the sames? */ - if ((ltc_mp_cmp(C1->x, C2->x) != LTC_MP_EQ) || (ltc_mp_cmp(C1->y, C2->y) != LTC_MP_EQ) || (ltc_mp_cmp(C1->z, C2->z) != LTC_MP_EQ)) { - fprintf(stderr, "ECC failed shamir test: size=%d, testno=%d\n", sizes[x], y); - return 1; - } - } - ltc_mp_montgomery_free(mp); - } - ltc_ecc_del_point(C2); - ltc_ecc_del_point(C1); - ltc_ecc_del_point(B); - ltc_ecc_del_point(A); - ltc_ecc_del_point(G); - ltc_mp_deinit_multi(kA, kB, rA, rB, modulus, a, mu, ma, LTC_NULL); - return 0; -} -#endif - -/* https://github.com/libtom/libtomcrypt/issues/630 */ -static int s_ecc_issue630(void) -{ - unsigned char protected_buffer[30], protected_buffer_copy[30]; - unsigned long keylen = 0; - ecc_key key; - int low, high; - - ecc_sizes(&low, &high); - - DO(ecc_make_key (&yarrow_prng, find_prng ("yarrow"), high, &key)); - if (yarrow_read(protected_buffer, sizeof(protected_buffer), &yarrow_prng) != sizeof(protected_buffer)) { - return CRYPT_ERROR_READPRNG; - } - XMEMCPY(protected_buffer_copy, protected_buffer, sizeof(protected_buffer)); - COMPARE_TESTVECTOR(protected_buffer, sizeof(protected_buffer), protected_buffer_copy, sizeof(protected_buffer), "Ensure copy is equal", 0); - - keylen = 10; - SHOULD_FAIL(ecc_get_key(&protected_buffer[10], &keylen, PK_PRIVATE, &key)); - COMPARE_TESTVECTOR(protected_buffer, 10, protected_buffer_copy, 10, "Start canary", 1); - COMPARE_TESTVECTOR(&protected_buffer[20], 10, &protected_buffer[20], 10, "End canary", 2); - ecc_free(&key); - return 0; -} - -/* https://github.com/libtom/libtomcrypt/issues/116 - verifies that ECDSA verification succeeds for an all-zero hash when the non-Shamir fallback is used - i.e. when u1 == 0 and the code path computes 0 * G + u2 * Q via two separate point multiplications - */ -static int s_ecc_issue116(void) -{ - const ltc_ecc_curve *dp; - ecc_key key; - int err, stat; - unsigned long siglen; - unsigned char hash[20]; - unsigned char sig[128]; - ltc_ecc_sig_opts sig_opts = { .type = LTC_ECCSIG_RFC7518, .prng = &yarrow_prng, .wprng = find_prng("yarrow") }; - int (*saved_mul2add)(const ecc_point *A, void *kA, const ecc_point *B, void *kB, ecc_point *C, const void *ma, const void *modulus); - - XMEMSET(hash, 0, sizeof(hash)); - - DO(ecc_find_curve("SECP256R1", &dp)); - DO(ecc_make_key_ex(&yarrow_prng, find_prng("yarrow"), &key, dp)); - - siglen = sizeof(sig); - DO(ecc_sign_hash_v2(hash, sizeof(hash), sig, &siglen, &sig_opts, &key)); - - saved_mul2add = ltc_mp.ecc_mul2add; - ltc_mp.ecc_mul2add = NULL; - stat = 0; - err = ecc_verify_hash_v2(sig, siglen, hash, sizeof(hash), &(ltc_ecc_sig_opts){ .type = LTC_ECCSIG_RFC7518 }, &stat, &key); - ltc_mp.ecc_mul2add = saved_mul2add; - ecc_free(&key); - - if (err != CRYPT_OK) return err; - if (stat != 1) return CRYPT_FAIL_TESTVECTOR; - return CRYPT_OK; -} - -/* Wycheproof ecdh_secp256r1_test.json tcId=202 */ -static int s_ecc_wycheproof_p256_edgecase_dbl(void) -{ - const char *priv_hex = "809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff"; - const char *pub_hex = "04dbfa466f12013255f9d57a6496c158ee7dd202a1ce4a5a53005b3564d509a0bbf2578007e857bdd082751ef2f3b4b9c38a0b87bab413d55ccb26a574f2b4be9d"; - const char *exp_hex = "e2d57eeec983756c9124f885a4d118ed5b8de7d2895fd91264cf291496949a12"; - const ltc_ecc_curve *cu; - ecc_key priv, pub; - unsigned char sk[32], pk[65], expected[32], out[64]; - unsigned long len, olen; - - DO(ecc_find_curve("SECP256R1", &cu)); - len = sizeof(sk); DO(base16_decode(priv_hex, XSTRLEN(priv_hex), sk, &len)); - len = sizeof(pk); DO(base16_decode(pub_hex, XSTRLEN(pub_hex), pk, &len)); - len = sizeof(expected); DO(base16_decode(exp_hex, XSTRLEN(exp_hex), expected, &len)); - - DO(ecc_set_curve(cu, &priv)); - DO(ecc_set_key(sk, sizeof(sk), PK_PRIVATE, &priv)); - DO(ecc_set_curve(cu, &pub)); - DO(ecc_set_key(pk, sizeof(pk), PK_PUBLIC, &pub)); - - olen = sizeof(out); - DO(ecc_shared_secret(&priv, &pub, out, &olen)); - COMPARE_TESTVECTOR(out, olen, expected, sizeof(expected), "Wycheproof ecdh_secp256r1 EdgeCaseDoubling", 202); - ecc_free(&priv); - ecc_free(&pub); - return CRYPT_OK; -} - -#if defined(LTC_PEM) && defined(LTC_DER) -/* Wycheproof ecdh_secp256r1_pem_test.json tcId=202 */ -static int s_ecc_wycheproof_p256_pem_edgecase_dbl(void) -{ - static const char priv_pem[] = - "-----BEGIN PRIVATE KEY-----\n" - "MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCCAnEYdizkWNTf/j171\n" - "uXfkzbmA5w44p+4LN8yHZynp/w==\n" - "-----END PRIVATE KEY-----\n"; - static const char pub_pem[] = - "-----BEGIN PUBLIC KEY-----\n" - "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2/pGbxIBMlX51XpklsFY7n3SAqHO\n" - "SlpTAFs1ZNUJoLvyV4AH6Fe90IJ1HvLztLnDiguHurQT1VzLJqV08rS+nQ==\n" - "-----END PUBLIC KEY-----\n"; - const char *exp_hex = "e2d57eeec983756c9124f885a4d118ed5b8de7d2895fd91264cf291496949a12"; - ltc_pka_key priv = {0}, pub = {0}; - unsigned char expected[32], out[64]; - unsigned long len, olen; - - DO(pem_decode(priv_pem, sizeof(priv_pem) - 1, &priv, NULL)); - ENSURE(priv.id == LTC_PKA_EC); - DO(pem_decode(pub_pem, sizeof(pub_pem) - 1, &pub, NULL)); - ENSURE(pub.id == LTC_PKA_EC); - - len = sizeof(expected); - DO(base16_decode(exp_hex, XSTRLEN(exp_hex), expected, &len)); - - olen = sizeof(out); - DO(ecc_shared_secret(&priv.u.ecc, &pub.u.ecc, out, &olen)); - COMPARE_TESTVECTOR(out, olen, expected, sizeof(expected), "Wycheproof ecdh_secp256r1_pem EdgeCaseDoubling", 202); - - pka_key_free(&priv); - pka_key_free(&pub); - return CRYPT_OK; -} - -/* Wycheproof ecdh_secp256r1_pem_test.json tcId=352 (WrongOrder), tcId=359 (NoCofactor) and tcId=363 (ModifiedPrime) */ -static int s_ecc_wycheproof_p256_pem_invalid_explicit(void) -{ - static const char priv_pem[] = - "-----BEGIN PRIVATE KEY-----\n" - "MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCBPNBTRWJtJ9xctQ5y7\n" - "545bU1Dchd6kDNLWJ0dAxuAjnA==\n" - "-----END PRIVATE KEY-----\n"; - /* tcId=352 WrongOrder (order = -secp256r1.order) */ - static const char pub_pem[] = - "-----BEGIN PUBLIC KEY-----\n" - "MIIBMzCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA/////wAAAAEAAAAA\n" - "AAAAAAAAAAD///////////////8wRAQg/////wAAAAEAAAAAAAAAAAAAAAD/////\n" - "//////////wEIFrGNdiqOpPns+u9VXaYhrxlHQawzFOw9jvOPD4n0mBLBEEEaxfR\n" - "8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84z\n" - "V2sxXs7LtkBoN79R9QIh/wAAAAD/////AAAAAAAAAABDGQVSWOhhewxGNT0DnNqv\n" - "AgEBA0IABBUQJkwYnD1SP/mRar1wae+mlo2Nx922RX14abU+pgzc+vt+1HhtoV0p\n" - "7lklb1Nto1daSIjBuwqVslb0p+n9dko=\n" - "-----END PUBLIC KEY-----\n"; - const char *bad_secret_hex = "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a"; - ltc_pka_key priv = {0}, pub = {0}; - unsigned char bad_secret[32], out[64]; - unsigned long len, olen; - int err; - - len = sizeof(bad_secret); - DO(base16_decode(bad_secret_hex, XSTRLEN(bad_secret_hex), bad_secret, &len)); - - /* private import must succeed (it's well-formed) */ - DO(pem_decode(priv_pem, sizeof(priv_pem) - 1, &priv, NULL)); - ENSURE(priv.id == LTC_PKA_EC); - - /* acceptable: pem_decode rejects the explicit-parameter SPKI */ - err = pem_decode(pub_pem, sizeof(pub_pem) - 1, &pub, NULL); - if (err != CRYPT_OK) { - pka_key_free(&priv); - return CRYPT_OK; - } - ENSURE(pub.id == LTC_PKA_EC); - - /* if import did succeed, ecc_shared_secret must either fail outright or produce a value that is *not* the documented bad secret */ - olen = sizeof(out); - err = ecc_shared_secret(&priv.u.ecc, &pub.u.ecc, out, &olen); - if (err == CRYPT_OK && olen == sizeof(bad_secret) && XMEMCMP(out, bad_secret, sizeof(bad_secret)) == 0) { - fprintf(stderr, "Wycheproof ecdh_secp256r1_pem invalid tcId=352\n"); - pka_key_free(&priv); - pka_key_free(&pub); - return CRYPT_FAIL_TESTVECTOR; - } - - pka_key_free(&priv); - pka_key_free(&pub); - return CRYPT_OK; -} -#endif /* LTC_PEM && LTC_DER */ - -#if defined(LTC_DER) && defined(LTC_ECC_BRAINPOOLP224R1) && defined(LTC_ECC_BRAINPOOLP224T1) -/* Wycheproof ecdh_brainpoolP224r1_test.json tcId=517 (WrongCurve) */ -static int s_ecc_wycheproof_bp224_wrong_curve(void) -{ - const char *priv_hex = "55a6601d488398ee537d8e745a461cfb8e60eeb7cb09088698faa6e9"; - const char *pub_spki_hex = "3052301406072a8648ce3d020106092b2403030208010106033a00040ad954137b533120d3344cc8b991" - "3491791ebf145bab44f200a507d3027e41442fabed87e7a30783fd1618790511098b0d004c60b5086b1a"; - const ltc_ecc_curve *bp_r1; - ecc_key priv, pub; - unsigned char sk[28], spki[256], out[64]; - unsigned long len, slen, olen; - int err; - - DO(ecc_find_curve("BRAINPOOLP224R1", &bp_r1)); - - slen = sizeof(spki); - DO(base16_decode(pub_spki_hex, XSTRLEN(pub_spki_hex), spki, &slen)); - - /* import public key from its own SPKI; the named-curve OID binds pub to bp224t1, but the point also lies on bp224r1 per the Wycheproof vector */ - DO(ecc_import_openssl(spki, slen, &pub)); - - /* set up the private key on bp224r1 with the listed scalar */ - len = sizeof(sk); - DO(base16_decode(priv_hex, XSTRLEN(priv_hex), sk, &len)); - DO(ecc_set_curve(bp_r1, &priv)); - DO(ecc_set_key(sk, len, PK_PRIVATE, &priv)); - - olen = sizeof(out); - err = ecc_shared_secret(&priv, &pub, out, &olen); - ecc_free(&priv); - ecc_free(&pub); - - if (err == CRYPT_OK) { - fprintf(stderr, "Wycheproof ecdh_brainpoolP224r1 tcId=517\n"); - return CRYPT_FAIL_TESTVECTOR; - } - return CRYPT_OK; -} -#endif - -/* https://github.com/libtom/libtomcrypt/issues/108 */ -static int s_ecc_issue108(void) -{ - void *a, *modulus, *order; - ecc_point *Q, *Result; - int err; - const ltc_ecc_curve* dp; - - /* init */ - if ((err = ltc_mp_init_multi(&modulus, &order, &a, LTC_NULL)) != CRYPT_OK) { return err; } - Q = ltc_ecc_new_point(); - Result = ltc_ecc_new_point(); - - /* ECC-224 AKA SECP224R1 */ - if ((err = ecc_find_curve("SECP224R1", &dp)) != CRYPT_OK) { goto done; } - /* read A */ - if ((err = ltc_mp_read_radix(a, dp->A, 16)) != CRYPT_OK) { goto done; } - /* read modulus */ - if ((err = ltc_mp_read_radix(modulus, dp->prime, 16)) != CRYPT_OK) { goto done; } - /* read order */ - if ((err = ltc_mp_read_radix(order, dp->order, 16)) != CRYPT_OK) { goto done; } - /* read Q */ - if ((err = ltc_mp_read_radix(Q->x, "EA3745501BBC6A70BBFDD8AEEDB18CF5073C6DC9AA7CBB5915170D60", 16)) != CRYPT_OK) { goto done; } - if ((err = ltc_mp_read_radix(Q->y, "6C9CB8E68AABFEC989CAC5E2326E0448B7E69C3E56039BA21A44FDAC", 16)) != CRYPT_OK) { goto done; } - ltc_mp_set(Q->z, 1); - /* calculate nQ */ - if ((err = ltc_mp.ecc_ptmul(order, Q, Result, a, modulus, 1)) != CRYPT_OK) { goto done; } - -done: - ltc_ecc_del_point(Result); - ltc_ecc_del_point(Q); - ltc_mp_deinit_multi(modulus, order, a, LTC_NULL); - return err; -} - -/* https://github.com/libtom/libtomcrypt/issues/443 */ -/* https://github.com/libtom/libtomcrypt/issues/447 */ -static int s_ecc_issue443_447(void) -{ - const ltc_ecc_curve* cu; - ecc_key key; - int err, stat = 0; - unsigned char hash[64]; - unsigned long hashlen; - const unsigned char msg[] = { 0x54,0x65,0x73,0x74 }; - /* msg+pub1+sig1 test vector is from wycheproof - ecdsa_webcrypto_test (incorrect size of signature) */ - const unsigned char pub1[] = { - 0x04, - 0x4a,0x03,0xef,0x9f,0x92,0xeb,0x26,0x8c,0xaf,0xa6,0x01,0x07,0x24,0x89,0xa5,0x63, - 0x80,0xfa,0x0d,0xc4,0x31,0x71,0xd7,0x71,0x28,0x13,0xb3,0xa1,0x9a,0x1e,0xb5,0xe5, - 0x3e,0x21,0x3e,0x28,0xa6,0x08,0xce,0x9a,0x2f,0x4a,0x17,0xfd,0x83,0x0c,0x66,0x54, - 0x01,0x8a,0x79,0xb3,0xe0,0x26,0x3d,0x91,0xa8,0xba,0x90,0x62,0x2d,0xf6,0xf2,0xf0 - }; - const unsigned char sig1[] = { 0x05, 0x01 }; - /* msg+pub2+sig2 test vector is from wycheproof - ecdsa_webcrypto_test (incorrect size of signature) */ - const unsigned char pub2[] = { - 0x04, - 0x00,0x5f,0x50,0x59,0x30,0x83,0x49,0xf9,0xeb,0xbb,0x4d,0x1c,0x55,0xc0,0xaf,0xcc,0xf6,0x21,0x62,0xec,0x1d,0xd1, - 0x2e,0xf3,0xed,0x90,0x66,0x56,0x92,0x4f,0xfd,0x99,0xca,0xb9,0xf0,0x6b,0x0e,0xb2,0x18,0xcf,0xf0,0x78,0xa4,0x67, - 0x7a,0x5c,0xe1,0xcc,0x07,0x65,0x2b,0xc9,0x76,0xae,0xfc,0x73,0x2c,0x28,0xf6,0x7e,0xf0,0x78,0xa4,0x34,0xe9,0x99, - 0x00,0xa5,0xd1,0x4d,0xf3,0x10,0x63,0x0d,0x76,0xec,0x03,0xcb,0x6f,0x9b,0x95,0xbf,0x1a,0x22,0x43,0x81,0x05,0xc8, - 0x8c,0xd9,0xfd,0x3d,0xac,0x80,0xf8,0x57,0xad,0xd3,0x82,0x71,0xd8,0xba,0x90,0x16,0x84,0xb2,0x6d,0x43,0x6d,0x4a, - 0x85,0x9a,0xd4,0xcd,0xa5,0xe9,0x67,0x7b,0x73,0xca,0xb3,0xf3,0xe5,0xe4,0x1a,0x3d,0x79,0x96,0x60,0x72,0x79,0xab - }; - const unsigned char sig2[] = { 0x01, 0x01 }; - - hashlen = sizeof(hash); - DO(hash_memory(find_hash("sha256"), msg, sizeof(msg), hash, &hashlen)); - DO(ecc_find_curve("secp256r1", &cu)); - DO(ecc_set_curve(cu, &key)); - DO(ecc_set_key(pub1, sizeof(pub1), PK_PUBLIC, &key)); - err = ecc_verify_hash_rfc7518_internal(sig1, sizeof(sig1), hash, hashlen, &stat, &key); /* should fail */ - ecc_free(&key); - if (err != CRYPT_INVALID_PACKET) return CRYPT_FAIL_TESTVECTOR; - - hashlen = sizeof(hash); - DO(hash_memory(find_hash("sha512"), msg, sizeof(msg), hash, &hashlen)); - DO(ecc_find_curve("secp521r1", &cu)); - DO(ecc_set_curve(cu, &key)); - DO(ecc_set_key(pub2, sizeof(pub2), PK_PUBLIC, &key)); - err = ecc_verify_hash_rfc7518_internal(sig2, sizeof(sig2), hash, hashlen, &stat, &key); /* should fail */ - ecc_free(&key); - if (err != CRYPT_INVALID_PACKET) return CRYPT_FAIL_TESTVECTOR; - - return CRYPT_OK; -} - -/* https://github.com/libtom/libtomcrypt/issues/446 */ -static int s_ecc_issue446(void) -{ - const ltc_ecc_curve* cu; - ecc_key key1, key2, key3, key4; - int stat = 0; - ltc_ecc_sig_opts sig_opts = { .type = LTC_ECCSIG_ANSIX962 }; - unsigned char hash[64]; - unsigned long hashlen; - const unsigned char msg1[] = { 0x31,0x32,0x33,0x34,0x30,0x30 }; - const unsigned char msg2[] = { 0x36,0x39,0x38,0x31,0x39 }; - const unsigned char msg3[] = { 0x4d,0x73,0x67 }; - const unsigned char msg4[] = { 0x54,0x65,0x73,0x74 }; - const unsigned char pub1[] = { - 0x04, /* secp256r1 */ - 0x29,0x27,0xb1,0x05,0x12,0xba,0xe3,0xed,0xdc,0xfe,0x46,0x78,0x28,0x12,0x8b,0xad, - 0x29,0x03,0x26,0x99,0x19,0xf7,0x08,0x60,0x69,0xc8,0xc4,0xdf,0x6c,0x73,0x28,0x38, - 0xc7,0x78,0x79,0x64,0xea,0xac,0x00,0xe5,0x92,0x1f,0xb1,0x49,0x8a,0x60,0xf4,0x60, - 0x67,0x66,0xb3,0xd9,0x68,0x50,0x01,0x55,0x8d,0x1a,0x97,0x4e,0x73,0x41,0x51,0x3e - }; - const unsigned char pub2[] = { - 0x04, /* secp224r1 */ - 0x53,0x88,0x35,0x38,0xd8,0x66,0x09,0x21,0x7a,0x4d,0x9c,0x27,0x99,0x2e, - 0x2b,0xd7,0x04,0xa4,0xbb,0x12,0xfb,0x91,0x25,0x3c,0xd4,0xf4,0x96,0xfa, - 0x00,0xb3,0x2f,0x3a,0x2d,0x15,0x3a,0x52,0xbb,0x57,0x76,0x50,0xcd,0xf1, - 0xb7,0x3a,0x34,0x05,0x35,0xc7,0xe7,0x3d,0xeb,0x59,0x9a,0xa9,0x50,0x88 - }; - const unsigned char pub3[] = { - 0x04, /* brainpoolP256r1 */ - 0x30,0x29,0x1b,0xca,0x4e,0xb9,0x3c,0x41,0x99,0x1d,0xae,0xc0,0xfd,0x2e,0x87,0xc2, - 0x77,0x8d,0x95,0x8d,0x9a,0x8e,0x2f,0xa4,0xe6,0xd3,0x83,0x5d,0x48,0x5b,0xc2,0x3e, - 0x42,0x17,0xf6,0x84,0xcf,0xdd,0x83,0x6d,0x7c,0xf6,0x09,0x9a,0x34,0xc6,0x82,0x61, - 0xe5,0xa0,0x94,0xad,0xb5,0xb3,0xe4,0xa9,0x26,0x2f,0xf5,0x95,0x7c,0x1b,0x1b,0xa8 - }; - const unsigned char pub4[] = { - 0x04, /* brainpoolP256t1 */ - 0x44,0x24,0xf0,0x9e,0x4f,0x86,0x92,0x31,0xe4,0x7b,0x1e,0x34,0x26,0xec,0x26,0x9e, - 0x5b,0xef,0x19,0xec,0x64,0xcc,0x96,0xda,0x5b,0x2e,0xfd,0xd2,0x11,0x6b,0x83,0xf0, - 0x7a,0x86,0x3d,0x25,0x74,0x3b,0xb2,0x60,0xa6,0x38,0xde,0x64,0x97,0x96,0xc6,0x76, - 0xe1,0x38,0x05,0x86,0x5c,0x8b,0xb9,0xda,0xc3,0x8e,0x16,0xfa,0xe5,0x4b,0x0c,0xef - }; - /* msg1+pub1+sig1 test vector is from wycheproof/ecdsa_test VALID */ - const unsigned char sig1[] = { - 0x30,0x45,0x02,0x20,0x2b,0xa3,0xa8,0xbe,0x6b,0x94,0xd5,0xec,0x80,0xa6,0xd9,0xd1,0x19,0x0a, - 0x43,0x6e,0xff,0xe5,0x0d,0x85,0xa1,0xee,0xe8,0x59,0xb8,0xcc,0x6a,0xf9,0xbd,0x5c,0x2e,0x18, - 0x02,0x21,0x00,0xb3,0x29,0xf4,0x79,0xa2,0xbb,0xd0,0xa5,0xc3,0x84,0xee,0x14,0x93,0xb1,0xf5, - 0x18,0x6a,0x87,0x13,0x9c,0xac,0x5d,0xf4,0x08,0x7c,0x13,0x4b,0x49,0x15,0x68,0x47,0xdb - }; - /* msg1+pub1+sig2 test vector is from wycheproof/ecdsa_test INVALID (changing tag value of sequence) */ - const unsigned char sig2[] = { - 0x31,0x45,0x02,0x20,0x2b,0xa3,0xa8,0xbe,0x6b,0x94,0xd5,0xec,0x80,0xa6,0xd9,0xd1,0x19,0x0a, - 0x43,0x6e,0xff,0xe5,0x0d,0x85,0xa1,0xee,0xe8,0x59,0xb8,0xcc,0x6a,0xf9,0xbd,0x5c,0x2e,0x18, - 0x02,0x21,0x00,0xb3,0x29,0xf4,0x79,0xa2,0xbb,0xd0,0xa5,0xc3,0x84,0xee,0x14,0x93,0xb1,0xf5, - 0x18,0x6a,0x87,0x13,0x9c,0xac,0x5d,0xf4,0x08,0x7c,0x13,0x4b,0x49,0x15,0x68,0x47,0xdb - }; - /* msg2+pub1+sig3 test vector is from wycheproof/ecdsa_test VALID (Edge case for Shamir multiplication) */ - const unsigned char sig3[] = { - 0x30,0x44,0x02,0x20,0x64,0xa1,0xaa,0xb5,0x00,0x0d,0x0e,0x80,0x4f,0x3e,0x2f,0xc0,0x2b,0xde, - 0xe9,0xbe,0x8f,0xf3,0x12,0x33,0x4e,0x2b,0xa1,0x6d,0x11,0x54,0x7c,0x97,0x71,0x1c,0x89,0x8e, - 0x02,0x20,0x6a,0xf0,0x15,0x97,0x1c,0xc3,0x0b,0xe6,0xd1,0xa2,0x06,0xd4,0xe0,0x13,0xe0,0x99, - 0x77,0x72,0xa2,0xf9,0x1d,0x73,0x28,0x6f,0xfd,0x68,0x3b,0x9b,0xb2,0xcf,0x4f,0x1b - }; - /* msg1+pub1+sig4 test vector is from wycheproof/ecdsa_test INVALID (long form encoding of length) */ - const unsigned char sig4[] = { - 0x30,0x81,0x45,0x02,0x20,0x2b,0xa3,0xa8,0xbe,0x6b,0x94,0xd5,0xec,0x80,0xa6,0xd9,0xd1,0x19, - 0x0a,0x43,0x6e,0xff,0xe5,0x0d,0x85,0xa1,0xee,0xe8,0x59,0xb8,0xcc,0x6a,0xf9,0xbd,0x5c,0x2e, - 0x18,0x02,0x21,0x00,0xb3,0x29,0xf4,0x79,0xa2,0xbb,0xd0,0xa5,0xc3,0x84,0xee,0x14,0x93,0xb1, - 0xf5,0x18,0x6a,0x87,0x13,0x9c,0xac,0x5d,0xf4,0x08,0x7c,0x13,0x4b,0x49,0x15,0x68,0x47,0xdb - }; - /* msg1+pub1+sig5 test vector is from wycheproof/ecdsa_test INVALID (length contains leading 0) */ - const unsigned char sig5[] = { - 0x30,0x82,0x00,0x45,0x02,0x20,0x2b,0xa3,0xa8,0xbe,0x6b,0x94,0xd5,0xec,0x80,0xa6,0xd9,0xd1, - 0x19,0x0a,0x43,0x6e,0xff,0xe5,0x0d,0x85,0xa1,0xee,0xe8,0x59,0xb8,0xcc,0x6a,0xf9,0xbd,0x5c, - 0x2e,0x18,0x02,0x21,0x00,0xb3,0x29,0xf4,0x79,0xa2,0xbb,0xd0,0xa5,0xc3,0x84,0xee,0x14,0x93, - 0xb1,0xf5,0x18,0x6a,0x87,0x13,0x9c,0xac,0x5d,0xf4,0x08,0x7c,0x13,0x4b,0x49,0x15,0x68,0x47,0xdb - }; - /* msg3+pub2+sig6 test vector is from wycheproof/ecdsa_test VALID (extreme value for k and edgecase s) */ - const unsigned char sig6[] = { - 0x30,0x3c,0x02,0x1c,0x70,0x6a,0x46,0xdc,0x76,0xdc,0xb7,0x67,0x98,0xe6,0x0e,0x6d,0x89,0x47,0x47,0x88,0xd1, - 0x6d,0xc1,0x80,0x32,0xd2,0x68,0xfd,0x1a,0x70,0x4f,0xa6,0x02,0x1c,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, - 0x55,0x55,0x55,0x55,0x55,0x55,0x07,0x8b,0xa0,0x3d,0xa5,0x6a,0x06,0x9f,0x0d,0xc1,0xc9,0x74,0x0e,0x14 - }; - /* msg4+pub3+sig7 test vector is from wycheproof/ecdsa_test VALID (extreme value for k) */ - const unsigned char sig7[] = { - 0x30,0x44,0x02,0x20,0x74,0x3c,0xf1,0xb8,0xb5,0xcd,0x4f,0x2e,0xb5,0x5f,0x8a,0xa3,0x69,0x59, - 0x3a,0xc4,0x36,0xef,0x04,0x41,0x66,0x69,0x9e,0x37,0xd5,0x1a,0x14,0xc2,0xce,0x13,0xea,0x0e, - 0x02,0x20,0x77,0x47,0x2d,0x9a,0x28,0xb4,0xec,0xe7,0x1c,0xf4,0x13,0xa6,0x8e,0xac,0x0e,0xb4, - 0x23,0xa1,0x6f,0xb4,0x62,0xb1,0xf4,0x87,0x06,0xfe,0xd4,0x8c,0xa4,0x37,0xbd,0x2d - }; - /* msg4+pub4+sig8 test vector is from wycheproof/ecdsa_test VALID (extreme value for k and s^-1) */ - const unsigned char sig8[] = { - 0x30,0x45,0x02,0x21,0x00,0x83,0x38,0x42,0x7c,0x7c,0xf4,0xd1,0x1c,0xb9,0x81,0xd9,0xb1,0x87, - 0x93,0xe3,0x77,0x9c,0x49,0x4c,0x50,0x2c,0x75,0xbd,0x73,0x9e,0x57,0x8d,0xe2,0xa7,0x00,0x57, - 0x8d,0x02,0x20,0x30,0x90,0xf4,0x87,0xe5,0x1f,0x9e,0x35,0xc8,0xaf,0x70,0xbb,0x9a,0xb7,0xdf, - 0x45,0x03,0x7e,0x23,0x0a,0x33,0xd2,0xc1,0xfd,0x96,0xe4,0x04,0x25,0x4f,0xcb,0x86,0x79 - }; - - DO(ecc_find_curve("secp256r1", &cu)); - DO(ecc_set_curve(cu, &key1)); - DO(ecc_set_key(pub1, sizeof(pub1), PK_PUBLIC, &key1)); - - DO(ecc_find_curve("secp224r1", &cu)); - DO(ecc_set_curve(cu, &key2)); - DO(ecc_set_key(pub2, sizeof(pub2), PK_PUBLIC, &key2)); - - DO(ecc_find_curve("brainpoolP256r1", &cu)); - DO(ecc_set_curve(cu, &key3)); - DO(ecc_set_key(pub3, sizeof(pub3), PK_PUBLIC, &key3)); - - DO(ecc_find_curve("brainpoolP256t1", &cu)); - DO(ecc_set_curve(cu, &key4)); - DO(ecc_set_key(pub4, sizeof(pub4), PK_PUBLIC, &key4)); - - hashlen = sizeof(hash); - DO(hash_memory(find_hash("sha256"), msg1, sizeof(msg1), hash, &hashlen)); - - DO(ecc_verify_hash_v2(sig1, sizeof(sig1), hash, hashlen, &sig_opts, &stat, &key1)); - ENSUREX(stat == 1, "sig1 - wycheproof / Valid"); - - SHOULD_FAIL(ecc_verify_hash_v2(sig2, sizeof(sig2), hash, hashlen, &sig_opts, &stat, &key1)); - ENSUREX(stat == 0, "sig2 - wycheproof / changing tag value of sequence"); - - SHOULD_FAIL(ecc_verify_hash_v2(sig4, sizeof(sig4), hash, hashlen, &sig_opts, &stat, &key1)); - ENSUREX(stat == 0, "sig4 - wycheproof / long form encoding of length"); - - SHOULD_FAIL(ecc_verify_hash_v2(sig5, sizeof(sig5), hash, hashlen, &sig_opts, &stat, &key1)); - ENSUREX(stat == 0, "sig5 - wycheproof / length contains leading 0"); - - hashlen = sizeof(hash); - DO(hash_memory(find_hash("sha256"), msg2, sizeof(msg2), hash, &hashlen)); - - DO(ecc_verify_hash_v2(sig3, sizeof(sig3), hash, hashlen, &sig_opts, &stat, &key1)); - ENSUREX(stat == 1, "wycheproof / Edge case for Shamir multiplication"); - - hashlen = sizeof(hash); - DO(hash_memory(find_hash("sha224"), msg3, sizeof(msg3), hash, &hashlen)); - DO(ecc_verify_hash_v2(sig6, sizeof(sig6), hash, hashlen, &sig_opts, &stat, &key2)); - ENSUREX(stat == 1, "wycheproof / extreme value for k and edgecase s"); - - hashlen = sizeof(hash); - DO(hash_memory(find_hash("sha256"), msg4, sizeof(msg4), hash, &hashlen)); - DO(ecc_verify_hash_v2(sig7, sizeof(sig7), hash, hashlen, &sig_opts, &stat, &key3)); - ENSUREX(stat == 1, "wycheproof / extreme value for k"); - - DO(ecc_verify_hash_v2(sig8, sizeof(sig8), hash, hashlen, &sig_opts, &stat, &key4)); - ENSUREX(stat == 1, "wycheproof / extreme value for k and s^-1"); - - ecc_free(&key1); - ecc_free(&key2); - ecc_free(&key3); - ecc_free(&key4); - return CRYPT_OK; -} - -#if defined(LTC_SHA3) && defined(LTC_DER) -static int s_ecc_shake_wycheproof_test(void) -{ - const struct { - const char *hash, *curve; - struct { - int tc_id, valid; - const char *pub, *msg, *sig; - } tests[2]; - } cases[] = { - { /* Project Wycheproof: testvectors_v1/ecdsa_secp256r1_shake128_test.json */ - "shake128", "SECP256R1", - { - { - 3, 1, /* valid */ - "0404aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", - "313233343030", - "304402202472b597920aaa98fdf7c7519531b46934df912d61a55d14970124dcdfd040870220049d0db50c18a8ce3a5f572863dfd1f809e2356c2f8ce8f8eef940cb8e40e82f" - }, - { - 6, 0, /* invalid */ - "042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", - "313233343030", - "304402207182f26bc75cb9735fe63539b290ef8c4828f2eea083aabca058bc2fb23a67c80220c96ce04ecaf994eb481e506669930f8232e89bc45848e9822d166066986ae097" - } - } - }, - { /* Project Wycheproof: testvectors_v1/ecdsa_secp384r1_shake256_test.json */ - "shake256", "SECP384R1", - { - { - 3, 1, /* valid */ - "0429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d" - "5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3", - "313233343030", - "3066023100ac1a2f58fa317f0cc20d6ca7c528da1270021429dd0989031d1efddd9fa5a2d63bd2f4b281707ceb66fa37f2d8344b9f0231009d984f3e6f6e5e114aaaaa91a2c8" - "c3e376b8304b8c2524e689008eb33048cebae4f98bf539550648f34be6eedeaa5182" - }, - { - 6, 0, /* invalid */ - "042da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa4b6d054d69dcf3e25ec49df870715e34883b183619" - "7d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f", - "313233343030", - "306402300ecab5652755adfd5e804d1201ea4ce8a209bcdadb68c65fa049cc76adfc200f7fae56855cbdf25fd0d306ba15bef3450230d4a89a0f736e2fe79fad390b17f37d11" - "604b7091681c911ecb407d49f47be55f81d159e7ab23e34fff24c66f304397d8" - } - } - }, - { /* Project Wycheproof: testvectors_v1/ecdsa_secp521r1_shake256_test.json */ - "shake256", "SECP521R1", - { - { - 3, 1, /* valid */ - "04012a908bfc5b70e17bdfae74294994808bf2a42dab59af8b0523a026d640a2a3d6d344520b62177e2cfa339ca42fb0883ec425904fbda2833a3b5b0a9a00811365d8012333" - "d532f8f8eb1a623c378a3694651192bbda833e3b8d7b8f90b2bfc9b045f8a55e1b6a5fe1512c400c4bc9c86fd7c699d642f5cee9bb827c8b0abc0da01cef1e", - "313233343030", - "308187024136c3e9fe2eb20fdce3fca2f1b7f3b67c08982605f42cbf562f8476cebae976efbd2c26bcc1eb3a3ed0c08a6611c6a118fca54411155de5b4a8c014a865df0da55d" - "0242013e41e59581e9f65812c9f84088fe4d4bd139895ce05936da1bd0410aa4f4493ed0911e07894aef3a0c10e67dd72a6540fe7f270f1fe086660def1df27f51027ca4" - }, - { - 6, 0, /* invalid */ - "04005c6457ec088d532f482093965ae53ccd07e556ed59e2af945cd8c7a95c1c644f8a56a8a8a3cd77392ddd861e8a924dac99c69069093bd52a52fa6c56004a074508007878" - "d6d42e4b4dd1e9c0696cb3e19f63033c3db4e60d473259b3ebe079aaf0a986ee6177f8217a78c68b813f7e149a4e56fd9562c07fed3d895942d7d101cb83f6", - "313233343030", - "308187024201f33bd8d0d201495be274a61b92565b80369f519af858a15a468651eefa84e8e7ae9be1e4577eaaa925646bbf7dec1ae63798c5571123514daa8f5e555b530d72" - "6b0241eae9de13cbbfbdd7b1ffcfefdd0452248a8702b339d04f4bcf0451bb3cc1bd1e3079ca27e6147c7f8f302c8fd61d3978d4cfc38117168e0907f39e5965d51be5c5" - } - } - } - }; - const ltc_ecc_curve *cu; - ltc_ecc_sig_opts sig_opts = { .type = LTC_ECCSIG_ANSIX962 }; - ecc_key key; - unsigned char pub[140], msg[64], sig[160], hash[64]; - unsigned long publen, msglen, siglen, hashlen; - unsigned int i, j; - - for (i = 0; i < LTC_ARRAY_SIZE(cases); ++i) { - int hash_idx = find_hash(cases[i].hash); - - DO(hash_is_valid(hash_idx)); - DO(ecc_find_curve(cases[i].curve, &cu)); - - for (j = 0; j < LTC_ARRAY_SIZE(cases[i].tests); ++j) { - int err, stat; - char name[64]; - - snprintf(name, sizeof(name), "Wycheproof %s/%d tcId=%d", cases[i].hash, hash_idx, cases[i].tests[j].tc_id); - publen = sizeof(pub); - msglen = sizeof(msg); - siglen = sizeof(sig); - DOX(base16_decode(cases[i].tests[j].pub, XSTRLEN(cases[i].tests[j].pub), pub, &publen), name); - DOX(base16_decode(cases[i].tests[j].msg, XSTRLEN(cases[i].tests[j].msg), msg, &msglen), name); - DOX(base16_decode(cases[i].tests[j].sig, XSTRLEN(cases[i].tests[j].sig), sig, &siglen), name); - - hashlen = sizeof(hash); - DOX(hash_memory(hash_idx, msg, msglen, hash, &hashlen), name); - - DO(ecc_set_curve(cu, &key)); - if ((err = ecc_set_key(pub, publen, PK_PUBLIC, &key)) != CRYPT_OK) { - ecc_free(&key); - DOX(err, name); - } - stat = 0; - err = ecc_verify_hash_v2(sig, siglen, hash, hashlen, &sig_opts, &stat, &key); - ecc_free(&key); - if (cases[i].tests[j].valid) { - DOX(err, name); - ENSUREX(stat == 1, name); - } - else { - ENSUREX(err != CRYPT_OK || stat == 0, name); - } - } - } - - return CRYPT_OK; -} -#endif - -static int s_ecc_test_mp(void) -{ - void *a, *modulus, *order; - ecc_point *G, *GG; - int i, err, primality; - char buf[4096]; - - DO(ltc_mp_init_multi(&modulus, &order, &a, LTC_NULL)); - - G = ltc_ecc_new_point(); - GG = ltc_ecc_new_point(); - if (G == NULL || GG == NULL) { - ltc_mp_deinit_multi(modulus, order, LTC_NULL); - ltc_ecc_del_point(G); - ltc_ecc_del_point(GG); - return CRYPT_MEM; - } - - err = CRYPT_OK; - - for (i = 0; ltc_ecc_curves[i].prime != NULL; i++) { - DO(ltc_mp_read_radix(a, ltc_ecc_curves[i].A, 16)); - DO(ltc_mp_read_radix(modulus, ltc_ecc_curves[i].prime, 16)); - DO(ltc_mp_read_radix(order, ltc_ecc_curves[i].order, 16)); - - /* is prime actually prime? */ - DO(ltc_mp_prime_is_prime(modulus, 8, &primality)); - if (primality == 0) { - err = CRYPT_FAIL_TESTVECTOR; - ltc_mp_tohex(modulus, buf); - printf("Modulus failed prime check: %s\n", buf); - } - - /* is order prime ? */ - DO(ltc_mp_prime_is_prime(order, 8, &primality)); - if (primality == 0) { - err = CRYPT_FAIL_TESTVECTOR; - ltc_mp_tohex(order, buf); - printf("Order failed prime check: %s\n", buf); - } - - DO(ltc_mp_read_radix(G->x, ltc_ecc_curves[i].Gx, 16)); - DO(ltc_mp_read_radix(G->y, ltc_ecc_curves[i].Gy, 16)); - ltc_mp_set(G->z, 1); - - /* then we should have G == (order + 1)G */ - DO(ltc_mp_add_d(order, 1, order)); - DO(ltc_mp.ecc_ptmul(order, G, GG, a, modulus, 1)); - if (ltc_mp_cmp(G->x, GG->x) != LTC_MP_EQ || ltc_mp_cmp(G->y, GG->y) != LTC_MP_EQ) { - err = CRYPT_FAIL_TESTVECTOR; - } - if (err != CRYPT_OK) { - goto done; - } - } - err = CRYPT_OK; -done: - ltc_ecc_del_point(GG); - ltc_ecc_del_point(G); - ltc_mp_deinit_multi(order, modulus, a, LTC_NULL); - return err; -} - -static int s_ecc_old_api(void) -{ - unsigned char buf[4][4096], ch; - unsigned long x, y, z, s; - int stat, stat2; - ecc_key usera, userb, pubKey, privKey; - ltc_ecc_sig_opts sig_opts = { - .prng = &yarrow_prng, - .wprng = find_prng ("yarrow") - }; - int low, high; - - ecc_sizes(&low, &high); - if (low < 14 || high < 14 || low > 100 || high > 100 || high < low) return CRYPT_FAIL_TESTVECTOR; - - for (s = 0; s < LTC_ARRAY_SIZE(sizes); s++) { - /* make up two keys */ - DO(ecc_make_key (&yarrow_prng, find_prng ("yarrow"), sizes[s], &usera)); - DO(ecc_make_key (&yarrow_prng, find_prng ("yarrow"), sizes[s], &userb)); - if (ecc_get_size(&usera) != (int)sizes[s]) return CRYPT_FAIL_TESTVECTOR; - if (ecc_get_size(&userb) != (int)sizes[s]) return CRYPT_FAIL_TESTVECTOR; - - /* make the shared secret */ - x = sizeof(buf[0]); - DO(ecc_shared_secret (&usera, &userb, buf[0], &x)); - - y = sizeof(buf[1]); - DO(ecc_shared_secret (&userb, &usera, buf[1], &y)); - - COMPARE_TESTVECTOR(buf[0], x, buf[1], y, "ecc Shared keys", s); - - /* now export userb */ - y = sizeof(buf[0]); - DO(ecc_export (buf[1], &y, PK_PUBLIC, &userb)); - ecc_free (&userb); - - /* import and make the shared secret again */ - DO(ecc_import (buf[1], y, &userb)); - - z = sizeof(buf[0]); - DO(ecc_shared_secret (&usera, &userb, buf[2], &z)); - - if (z != x) { - fprintf(stderr, "failed. Size don't match?"); - return 1; - } - if (memcmp (buf[0], buf[2], x)) { - fprintf(stderr, "Failed. Contents didn't match."); - return 1; - } - - /* export with ANSI X9.63 */ - y = sizeof(buf[1]); - DO(ecc_ansi_x963_export(&userb, buf[1], &y)); - ecc_free (&userb); - - /* now import the ANSI key */ - DO(ecc_ansi_x963_import(buf[1], y, &userb)); - - /* shared secret */ - z = sizeof(buf[0]); - DO(ecc_shared_secret (&usera, &userb, buf[2], &z)); - - if (z != x) { - fprintf(stderr, "failed. Size don't match?"); - return 1; - } - if (memcmp (buf[0], buf[2], x)) { - fprintf(stderr, "Failed. Contents didn't match."); - return 1; - } - - ecc_free (&usera); - ecc_free (&userb); - - /* test encrypt_key */ - DO(ecc_make_key (&yarrow_prng, find_prng ("yarrow"), sizes[s], &usera)); - - /* export key */ - x = sizeof(buf[0]); - DO(ecc_export(buf[0], &x, PK_PUBLIC, &usera)); - DO(ecc_import(buf[0], x, &pubKey)); - x = sizeof(buf[0]); - DO(ecc_export(buf[0], &x, PK_PRIVATE, &usera)); - DO(ecc_import(buf[0], x, &privKey)); - - for (ch = 0; ch < 32; ch++) { - buf[0][ch] = ch; - } - y = sizeof (buf[1]); - DO(ecc_encrypt_key (buf[0], 32, buf[1], &y, &yarrow_prng, find_prng ("yarrow"), find_hash ("sha256"), &pubKey)); - zeromem (buf[0], sizeof (buf[0])); - x = sizeof (buf[0]); - DO(ecc_decrypt_key (buf[1], y, buf[0], &x, &privKey)); - if (x != 32) { - fprintf(stderr, "Failed (length)"); - return 1; - } - for (ch = 0; ch < 32; ch++) { - if (buf[0][ch] != ch) { - fprintf(stderr, "Failed (contents)"); - return 1; - } - } - /* test sign_hash */ - for (ch = 0; ch < 16; ch++) { - buf[0][ch] = ch; - } - x = sizeof (buf[1]); - DO(ecc_sign_hash_v2(buf[0], 16, buf[1], &x, &sig_opts, &privKey)); - DO(ecc_verify_hash_v2(buf[1], x, buf[0], 16, &sig_opts, &stat, &pubKey)); - buf[0][0] ^= 1; - DO(ecc_verify_hash_v2(buf[1], x, buf[0], 16, &sig_opts, &stat2, &privKey)); - if (!(stat == 1 && stat2 == 0)) { - fprintf(stderr, "ecc_verify_hash failed %d, %d, ", stat, stat2); - return 1; - } - /* test sign_hash_rfc7518 */ - for (ch = 0; ch < 16; ch++) { - buf[0][ch] = ch; - } - x = sizeof (buf[1]); - DO(ecc_sign_hash_v2(buf[0], 16, buf[1], &x, &sig_opts, &privKey)); - DO(ecc_verify_hash_v2(buf[1], x, buf[0], 16, &sig_opts, &stat, &pubKey)); - buf[0][0] ^= 1; - DO(ecc_verify_hash_v2(buf[1], x, buf[0], 16, &sig_opts, &stat2, &privKey)); - if (!(stat == 1 && stat2 == 0)) { - fprintf(stderr, "ecc_verify_hash_rfc7518 failed %d, %d, ", stat, stat2); - return 1; - } - ecc_free (&usera); - ecc_free (&pubKey); - ecc_free (&privKey); - } - return CRYPT_OK; -} - -int ecc_key_cmp(const int should_type, const ecc_key *should, const ecc_key *is) -{ - if (should_type != is->type) return CRYPT_ERROR; - if (should_type == PK_PRIVATE) { - if (ltc_mp_cmp(should->k, is->k) != LTC_MP_EQ) return CRYPT_ERROR; - } - if (ltc_mp_cmp(should->dp.prime, is->dp.prime) != LTC_MP_EQ) return CRYPT_ERROR; - if (ltc_mp_cmp(should->dp.A, is->dp.A) != LTC_MP_EQ) return CRYPT_ERROR; - if (ltc_mp_cmp(should->dp.B, is->dp.B) != LTC_MP_EQ) return CRYPT_ERROR; - if (ltc_mp_cmp(should->dp.order, is->dp.order) != LTC_MP_EQ) return CRYPT_ERROR; - if (ltc_mp_cmp(should->dp.base.x, is->dp.base.x) != LTC_MP_EQ) return CRYPT_ERROR; - if (ltc_mp_cmp(should->dp.base.y, is->dp.base.y) != LTC_MP_EQ) return CRYPT_ERROR; - if (ltc_mp_cmp(should->pubkey.x, is->pubkey.x) != LTC_MP_EQ) return CRYPT_ERROR; - if (ltc_mp_cmp(should->pubkey.y, is->pubkey.y) != LTC_MP_EQ) return CRYPT_ERROR; - if (should->dp.size != is->dp.size) return CRYPT_ERROR; - if (should->dp.cofactor != is->dp.cofactor) return CRYPT_ERROR; - return CRYPT_OK; -} - -static int s_ecc_new_api(void) -{ - int i, stat; - const ltc_ecc_curve* dp; - ecc_key key, privkey, pubkey; - unsigned char buf[1000]; - unsigned long len, j; -#ifdef LTC_ECC_SHAMIR - unsigned long k; -#endif - unsigned char data16[MAXBLOCKSIZE]; - unsigned long len16; - const ecc_signature_type sig_algs[] = { -#ifdef LTC_DER - LTC_ECCSIG_ANSIX962, -#endif - LTC_ECCSIG_RFC7518, - LTC_ECCSIG_ETH27, -#ifdef LTC_SSH - LTC_ECCSIG_RFC5656, -#endif - }; - ltc_ecc_sig_opts sig_opts = { - .type = LTC_ECCSIG_ANSIX962, - .prng = &yarrow_prng, - .wprng = find_prng ("yarrow") - }; - XMEMSET(data16, 0xd1, sizeof(data16)); - - for (i = 0; i < (int)LTC_ARRAY_SIZE(curvenames); i++) { - DO(ecc_find_curve(curvenames[i], &dp)); - /* make new key */ - DO(ecc_make_key_ex(&yarrow_prng, find_prng ("yarrow"), &key, dp)); - len = sizeof(buf); - DO(ecc_export(buf, &len, PK_PRIVATE, &key)); - DO(ecc_import_ex(buf, len, &privkey, dp)); - ecc_free(&privkey); - len = sizeof(buf); - DO(ecc_export(buf, &len, PK_PUBLIC, &key)); - DO(ecc_import_ex(buf, len, &pubkey, dp)); - ecc_free(&pubkey); - len = sizeof(buf); - DO(ecc_ansi_x963_export(&key, buf, &len)); - ecc_free(&key); - DO(ecc_ansi_x963_import_ex(buf, len, &pubkey, dp)); - ecc_free(&pubkey); - - /* generate new key */ - DO(ecc_set_curve(dp, &key)); - DO(ecc_generate_key(&yarrow_prng, find_prng ("yarrow"), &key)); - len = sizeof(buf); - DO(ecc_get_key(buf, &len, PK_PRIVATE, &key)); - ecc_free(&key); - - /* load exported private key */ - DO(ecc_set_curve(dp, &privkey)); - DO(ecc_set_key(buf, len, PK_PRIVATE, &privkey)); - - if (strcmp(ltc_mp.name, "TomsFastMath") != 0) { - /* XXX-FIXME: TFM does not support sqrtmod_prime */ - /* export compressed public key */ - len = sizeof(buf); - DO(ecc_get_key(buf, &len, PK_PUBLIC|PK_COMPRESSED, &privkey)); - if (len != 1 + (unsigned)ecc_get_size(&privkey)) return CRYPT_FAIL_TESTVECTOR; - /* load exported public+compressed key */ - DO(ecc_set_curve(dp, &pubkey)); - DO(ecc_set_key(buf, len, PK_PUBLIC, &pubkey)); - ecc_free(&pubkey); - } - - /* export long public key */ - len = sizeof(buf); - DO(ecc_get_key(buf, &len, PK_PUBLIC, &privkey)); - if (len != 1 + 2 * (unsigned)ecc_get_size(&privkey)) return CRYPT_FAIL_TESTVECTOR; - /* load exported public key */ - DO(ecc_set_curve(dp, &pubkey)); - DO(ecc_set_key(buf, len, PK_PUBLIC, &pubkey)); - - for (j = 0; j < LTC_ARRAY_SIZE(sig_algs); ++j) { - /* test signature */ - if (sig_algs[j] == LTC_ECCSIG_ETH27 && XSTRCMP(dp->OID, "1.3.132.0.10")) - continue; - len = sizeof(buf); - sig_opts.type = sig_algs[j]; - DO(ecc_sign_hash_v2(data16, privkey.dp.size, buf, &len, &sig_opts, &privkey)); - stat = 0; - DO(ecc_verify_hash_v2(buf, len, data16, privkey.dp.size, &sig_opts, &stat, &pubkey)); - if (stat != 1) return CRYPT_FAIL_TESTVECTOR; - -#ifdef LTC_ECC_SHAMIR - if (strcmp(ltc_mp.name, "TomsFastMath") != 0) { - /* XXX-FIXME: TFM does not support sqrtmod_prime */ - int found = 0; - ecc_key reckey; - /* test recovery */ - sig_opts.enable_recovery_id = 1; - len = sizeof(buf); - DO(ecc_sign_hash_v2(data16, privkey.dp.size, buf, &len, &sig_opts, &privkey)); - DO(ecc_set_curve(dp, &reckey)); - for (k = 0; k < 2*(1+privkey.dp.cofactor); k++) { - sig_opts.recovery_id = k; - stat = ecc_recover_key(buf, len, data16, privkey.dp.size, &sig_opts, &reckey); - if (stat != CRYPT_OK) continue; /* last two will almost always fail, only possible if x<(prime mod order) */ - stat = ecc_key_cmp(PK_PUBLIC, &pubkey, &reckey); - if (stat == CRYPT_OK) found++; - } - sig_opts.enable_recovery_id = 0; - if (found != 1) return CRYPT_FAIL_TESTVECTOR; /* unique match */ - ecc_free(&reckey); - } -#endif - - } - - /* test encryption */ - len = sizeof(buf); - DO(ecc_encrypt_key(data16, 16, buf, &len, &yarrow_prng, find_prng("yarrow"), find_hash("sha256"), &pubkey)); - zeromem(data16, 16); - len16 = 16; - DO(ecc_decrypt_key(buf, len, data16, &len16, &privkey)); - if ((int)len16 != 16) return CRYPT_FAIL_TESTVECTOR; - for (j = 0; (int)j < 16; j++) if (data16[j] != 0xd1) return CRYPT_FAIL_TESTVECTOR; - - /* cleanup */ - ecc_free(&privkey); - ecc_free(&pubkey); - } - return CRYPT_OK; -} - -static int s_ecc_rfc6979(void) -{ - const struct { - const char *curve, *x, *Ux, *Uy; - struct { - const char *k, *r, *s; - } signatures[11]; - } tests[] = { - { - "P-192", - "6FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4", - "AC2C77F529F91689FEA0EA5EFEC7F210D8EEA0B9E047ED56", - "3BC723E57670BD4887EBC732C523063D0A7C957BC97C1C43", - { - { - "37D7CA00D2C7B0E5E412AC03BD44BA837FDD5B28CD3B0021", - "98C6BD12B23EAF5E2A2045132086BE3EB8EBD62ABF6698FF", - "57A22B07DEA9530F8DE9471B1DC6624472E8E2844BC25B64", - }, - { - "4381526B3FC1E7128F202E194505592F01D5FF4C5AF015D8", - "A1F00DAD97AEEC91C95585F36200C65F3C01812AA60378F5", - "E07EC1304C7C6C9DEBBE980B9692668F81D4DE7922A0F97A", - }, - { - "32B1B6D7D42A05CB449065727A84804FB1A3E34D8F261496", - "4B0B8CE98A92866A2820E20AA6B75B56382E0F9BFD5ECB55", - "CCDB006926EA9565CBADC840829D8C384E06DE1F1E381B85", - }, - { - "4730005C4FCB01834C063A7B6760096DBE284B8252EF4311", - "DA63BF0B9ABCF948FBB1E9167F136145F7A20426DCC287D5", - "C3AA2C960972BD7A2003A57E1C4C77F0578F8AE95E31EC5E", - }, - { - "A2AC7AB055E4F20692D49209544C203A7D1F2C0BFBC75DB1", - "4D60C5AB1996BD848343B31C00850205E2EA6922DAC2E4B8", - "3F6E837448F027A1BF4B34E796E32A811CBB4050908D8F67", - }, - { - "D9CF9C3D3297D3260773A1DA7418DB5537AB8DD93DE7FA25", - "0F2141A0EBBC44D2E1AF90A50EBCFCE5E197B3B7D4DE036D", - "EB18BC9E1F3D7387500CB99CF5F7C157070A8961E38700B7", - }, - { - "F5DC805F76EF851800700CCE82E7B98D8911B7D510059FBE", - "6945A1C1D1B2206B8145548F633BB61CEF04891BAF26ED34", - "B7FB7FDFC339C0B9BD61A9F5A8EAF9BE58FC5CBA2CB15293", - }, - { - "5C4CE89CF56D9E7C77C8585339B006B97B5F0680B4306C6C", - "3A718BD8B4926C3B52EE6BBE67EF79B18CB6EB62B1AD97AE", - "5662E6848A4A19B1F1AE2F72ACD4B8BBE50F1EAC65D9124F", - }, - { - "5AFEFB5D3393261B828DB6C91FBC68C230727B030C975693", - "B234B60B4DB75A733E19280A7A6034BD6B1EE88AF5332367", - "7994090B2D59BB782BE57E74A44C9A1C700413F8ABEFE77A", - }, - { - "0758753A5254759C7CFBAD2E2D9B0792EEE44136C9480527", - "FE4F4AE86A58B6507946715934FE2D8FF9D95B6B098FE739", - "74CF5605C98FBA0E1EF34D4B5A1577A7DCF59457CAE52290", - }, - { - NULL, NULL, NULL - } - } - }, - { - "P-224", - "F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C1", - "CF08DA5AD719E42707FA431292DEA11244D64FC51610D94B130D6C", - "EEAB6F3DEBE455E3DBF85416F7030CBD94F34F2D6F232C69F3C1385A", - { - { - "7EEFADD91110D8DE6C2C470831387C50D3357F7F4D477054B8B426BC", - "22226F9D40A96E19C4A301CE5B74B115303C0F3A4FD30FC257FB57AC", - "66D1CDD83E3AF75605DD6E2FEFF196D30AA7ED7A2EDF7AF475403D69", - }, - { - "C1D1F2F10881088301880506805FEB4825FE09ACB6816C36991AA06D", - "1CDFE6662DDE1E4A1EC4CDEDF6A1F5A2FB7FBD9145C12113E6ABFD3E", - "A6694FD7718A21053F225D3F46197CA699D45006C06F871808F43EBC", - }, - { - "AD3029E0278F80643DE33917CE6908C70A8FF50A411F06E41DEDFCDC", - "61AA3DA010E8E8406C656BC477A7A7189895E7E840CDFE8FF42307BA", - "BC814050DAB5D23770879494F9E0A680DC1AF7161991BDE692B10101", - }, - { - "52B40F5A9D3D13040F494E83D3906C6079F29981035C7BD51E5CAC40", - "0B115E5E36F0F9EC81F1325A5952878D745E19D7BB3EABFABA77E953", - "830F34CCDFE826CCFDC81EB4129772E20E122348A2BBD889A1B1AF1D", - }, - { - "9DB103FFEDEDF9CFDBA05184F925400C1653B8501BAB89CEA0FBEC14", - "074BD1D979D5F32BF958DDC61E4FB4872ADCAFEB2256497CDAC30397", - "A4CECA196C3D5A1FF31027B33185DC8EE43F288B21AB342E5D8EB084", - }, - { - "2519178F82C3F0E4F87ED5883A4E114E5B7A6E374043D8EFD329C253", - "DEAA646EC2AF2EA8AD53ED66B2E2DDAA49A12EFD8356561451F3E21C", - "95987796F6CF2062AB8135271DE56AE55366C045F6D9593F53787BD2", - }, - { - "DF8B38D40DCA3E077D0AC520BF56B6D565134D9B5F2EAE0D34900524", - "C441CE8E261DED634E4CF84910E4C5D1D22C5CF3B732BB204DBEF019", - "902F42847A63BDC5F6046ADA114953120F99442D76510150F372A3F4", - }, - { - "FF86F57924DA248D6E44E8154EB69F0AE2AEBAEE9931D0B5A969F904", - "AD04DDE87B84747A243A631EA47A1BA6D1FAA059149AD2440DE6FBA6", - "178D49B1AE90E3D8B629BE3DB5683915F4E8C99FDF6E666CF37ADCFD", - }, - { - "7046742B839478C1B5BD31DB2E862AD868E1A45C863585B5F22BDC2D", - "389B92682E399B26518A95506B52C03BC9379A9DADF3391A21FB0EA4", - "414A718ED3249FF6DBC5B50C27F71F01F070944DA22AB1F78F559AAB", - }, - { - "E39C2AA4EA6BE2306C72126D40ED77BF9739BB4D6EF2BBB1DCB6169D", - "049F050477C5ADD858CAC56208394B5A55BAEBBE887FDF765047C17C", - "077EB13E7005929CEFA3CD0403C7CDCC077ADF4E44F3C41B2F60ECFF", - }, - { - NULL, NULL, NULL - } - } - }, - { - "P-256", - "C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721", - "60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6", - "7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299", - { - { - "882905F1227FD620FBF2ABF21244F0BA83D0DC3A9103DBBEE43A1FB858109DB4", - "61340C88C3AAEBEB4F6D667F672CA9759A6CCAA9FA8811313039EE4A35471D32", - "6D7F147DAC089441BB2E2FE8F7A3FA264B9C475098FDCF6E00D7C996E1B8B7EB", - }, - { - "103F90EE9DC52E5E7FB5132B7033C63066D194321491862059967C715985D473", - "53B2FFF5D1752B2C689DF257C04C40A587FABABB3F6FC2702F1343AF7CA9AA3F", - "B9AFB64FDC03DC1A131C7D2386D11E349F070AA432A4ACC918BEA988BF75C74C", - }, - { - "A6E3C57DD01ABE90086538398355DD4C3B17AA873382B0F24D6129493D8AAD60", - "EFD48B2AACB6A8FD1140DD9CD45E81D69D2C877B56AAF991C34D0EA84EAF3716", - "F7CB1C942D657C41D436C7A1B6E29F65F3E900DBB9AFF4064DC4AB2F843ACDA8", - }, - { - "09F634B188CEFD98E7EC88B1AA9852D734D0BC272F7D2A47DECC6EBEB375AAD4", - "0EAFEA039B20E9B42309FB1D89E213057CBF973DC0CFC8F129EDDDC800EF7719", - "4861F0491E6998B9455193E34E7B0D284DDD7149A74B95B9261F13ABDE940954", - }, - { - "5FA81C63109BADB88C1F367B47DA606DA28CAD69AA22C4FE6AD7DF73A7173AA5", - "8496A60B5E9B47C825488827E0495B0E3FA109EC4568FD3F8D1097678EB97F00", - "2362AB1ADBE2B8ADF9CB9EDAB740EA6049C028114F2460F96554F61FAE3302FE", - }, - { - "8C9520267C55D6B980DF741E56B4ADEE114D84FBFA2E62137954164028632A2E", - "0CBCC86FD6ABD1D99E703E1EC50069EE5C0B4BA4B9AC60E409E8EC5910D81A89", - "01B9D7B73DFAA60D5651EC4591A0136F87653E0FD780C3B1BC872FFDEAE479B1", - }, - { - "669F4426F2688B8BE0DB3A6BD1989BDAEFFF84B649EEB84F3DD26080F667FAA7", - "C37EDB6F0AE79D47C3C27E962FA269BB4F441770357E114EE511F662EC34A692", - "C820053A05791E521FCAAD6042D40AEA1D6B1A540138558F47D0719800E18F2D", - }, - { - "D16B6AE827F17175E040871A1C7EC3500192C4C92677336EC2537ACAEE0008E0", - "F1ABB023518351CD71D881567B1EA663ED3EFCF6C5132B354F28D3B0B7D38367", - "019F4113742A2B14BD25926B49C649155F267E60D3814B4C0CC84250E46F0083", - }, - { - "16AEFFA357260B04B1DD199693960740066C1A8F3E8EDD79070AA914D361B3B8", - "83910E8B48BB0C74244EBDF7F07A1C5413D61472BD941EF3920E623FBCCEBEB6", - "8DDBEC54CF8CD5874883841D712142A56A8D0F218F5003CB0296B6B509619F2C", - }, - { - "6915D11632ACA3C40D5D51C08DAF9C555933819548784480E93499000D9F0B7F", - "461D93F31B6540894788FD206C07CFA0CC35F46FA3C91816FFF1040AD1581A04", - "39AF9F15DE0DB8D97E72719C74820D304CE5226E32DEDAE67519E840D1194E55", - }, - { - NULL, NULL, NULL - } - } - }, - { - "P-384", - "6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5", - "EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC13", - "8015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720", - { - { - "4471EF7518BB2C7C20F62EAE1C387AD0C5E8E470995DB4ACF694466E6AB096630F29E5938D25106C3C340045A2DB01A7", - "EC748D839243D6FBEF4FC5C4859A7DFFD7F3ABDDF72014540C16D73309834FA37B9BA002899F6FDA3A4A9386790D4EB2", - "A3BCFA947BEEF4732BF247AC17F71676CB31A847B9FF0CBC9C9ED4C1A5B3FACF26F49CA031D4857570CCB5CA4424A443", - }, - { - "A4E4D2F0E729EB786B31FC20AD5D849E304450E0AE8E3E341134A5C1AFA03CAB8083EE4E3C45B06A5899EA56C51B5879", - "42356E76B55A6D9B4631C865445DBE54E056D3B3431766D0509244793C3F9366450F76EE3DE43F5A125333A6BE060122", - "9DA0C81787064021E78DF658F2FBB0B042BF304665DB721F077A4298B095E4834C082C03D83028EFBF93A3C23940CA8D", - }, - { - "180AE9F9AEC5438A44BC159A1FCB277C7BE54FA20E7CF404B490650A8ACC414E375572342863C899F9F2EDF9747A9B60", - "21B13D1E013C7FA1392D03C5F99AF8B30C570C6F98D4EA8E354B63A21D3DAA33BDE1E888E63355D92FA2B3C36D8FB2CD", - "F3AA443FB107745BF4BD77CB3891674632068A10CA67E3D45DB2266FA7D1FEEBEFDC63ECCD1AC42EC0CB8668A4FA0AB0", - }, - { - "94ED910D1A099DAD3254E9242AE85ABDE4BA15168EAF0CA87A555FD56D10FBCA2907E3E83BA95368623B8C4686915CF9", - "94EDBB92A5ECB8AAD4736E56C691916B3F88140666CE9FA73D64C4EA95AD133C81A648152E44ACF96E36DD1E80FABE46", - "99EF4AEB15F178CEA1FE40DB2603138F130E740A19624526203B6351D0A3A94FA329C145786E679E7B82C71A38628AC8", - }, - { - "92FC3C7183A883E24216D1141F1A8976C5B0DD797DFA597E3D7B32198BD35331A4E966532593A52980D0E3AAA5E10EC3", - "ED0959D5880AB2D869AE7F6C2915C6D60F96507F9CB3E047C0046861DA4A799CFE30F35CC900056D7C99CD7882433709", - "512C8CCEEE3890A84058CE1E22DBC2198F42323CE8ACA9135329F03C068E5112DC7CC3EF3446DEFCEB01A45C2667FDD5", - }, - { - "66CC2C8F4D303FC962E5FF6A27BD79F84EC812DDAE58CF5243B64A4AD8094D47EC3727F3A3C186C15054492E30698497", - "4BC35D3A50EF4E30576F58CD96CE6BF638025EE624004A1F7789A8B8E43D0678ACD9D29876DAF46638645F7F404B11C7", - "D5A6326C494ED3FF614703878961C0FDE7B2C278F9A65FD8C4B7186201A2991695BA1C84541327E966FA7B50F7382282", - }, - { - "18FA39DB95AA5F561F30FA3591DC59C0FA3653A80DAFFA0B48D1A4C6DFCBFF6E3D33BE4DC5EB8886A8ECD093F2935726", - "E8C9D0B6EA72A0E7837FEA1D14A1A9557F29FAA45D3E7EE888FC5BF954B5E62464A9A817C47FF78B8C11066B24080E72", - "07041D4A7A0379AC7232FF72E6F77B6DDB8F09B16CCE0EC3286B2BD43FA8C6141C53EA5ABEF0D8231077A04540A96B66", - }, - { - "0CFAC37587532347DC3389FDC98286BBA8C73807285B184C83E62E26C401C0FAA48DD070BA79921A3457ABFF2D630AD7", - "6D6DEFAC9AB64DABAFE36C6BF510352A4CC27001263638E5B16D9BB51D451559F918EEDAF2293BE5B475CC8F0188636B", - "2D46F3BECBCC523D5F1A1256BF0C9B024D879BA9E838144C8BA6BAEB4B53B47D51AB373F9845C0514EEFB14024787265", - }, - { - "015EE46A5BF88773ED9123A5AB0807962D193719503C527B031B4C2D225092ADA71F4A459BC0DA98ADB95837DB8312EA", - "8203B63D3C853E8D77227FB377BCF7B7B772E97892A80F36AB775D509D7A5FEB0542A7F0812998DA8F1DD3CA3CF023DB", - "DDD0760448D42D8A43AF45AF836FCE4DE8BE06B485E9B61B827C2F13173923E06A739F040649A667BF3B828246BAA5A5", - }, - { - "3780C4F67CB15518B6ACAE34C9F83568D2E12E47DEAB6C50A4E4EE5319D1E8CE0E2CC8A136036DC4B9C00E6888F66B6C", - "A0D5D090C9980FAF3C2CE57B7AE951D31977DD11C775D314AF55F76C676447D06FB6495CD21B4B6E340FC236584FB277", - "976984E59B4C77B0E8E4460DCA3D9F20E07B9BB1F63BEEFAF576F6B2E8B224634A2092CD3792E0159AD9CEE37659C736", - }, - { - NULL, NULL, NULL - } - } - }, - { - "P-521", - "00FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538", - "1894550D0785932E00EAA23B694F213F8C3121F86DC97A04E5A7167DB4E5BCD371123D46E45DB6B5D5370A7F20FB633155D38FFA16D2BD761DCAC474B9A2F5023A4", - "493101C962CD4D2FDDF782285E64584139C2F91B47F87FF82354D6630F746A28A0DB25741B5B34A828008B22ACC23F924FAAFBD4D33F81EA66956DFEAA2BFDFCF5", - { - { - "89C071B419E1C2820962321787258469511958E80582E95D8378E0C2CCDB3CB42BEDE42F50E3FA3C71F5A76724281D31D9C89F0F91FC1BE4918DB1C03A5838D0F9", - "00343B6EC45728975EA5CBA6659BBB6062A5FF89EEA58BE3C80B619F322C87910FE092F7D45BB0F8EEE01ED3F20BABEC079D202AE677B243AB40B5431D497C55D75D", - "00E7B0E675A9B24413D448B8CC119D2BF7B2D2DF032741C096634D6D65D0DBE3D5694625FB9E8104D3B842C1B0E2D0B98BEA19341E8676AEF66AE4EBA3D5475D5D16", - }, - { - "0121415EC2CD7726330A61F7F3FA5DE14BE9436019C4DB8CB4041F3B54CF31BE0493EE3F427FB906393D895A19C9523F3A1D54BB8702BD4AA9C99DAB2597B92113F3", - "01776331CFCDF927D666E032E00CF776187BC9FDD8E69D0DABB4109FFE1B5E2A30715F4CC923A4A5E94D2503E9ACFED92857B7F31D7152E0F8C00C15FF3D87E2ED2E", - "0050CB5265417FE2320BBB5A122B8E1A32BD699089851128E360E620A30C7E17BA41A666AF126CE100E5799B153B60528D5300D08489CA9178FB610A2006C254B41F", - }, - { - "EDF38AFCAAECAB4383358B34D67C9F2216C8382AAEA44A3DAD5FDC9C32575761793FEF24EB0FC276DFC4F6E3EC476752F043CF01415387470BCBD8678ED2C7E1A0", - "01511BB4D675114FE266FC4372B87682BAECC01D3CC62CF2303C92B3526012659D16876E25C7C1E57648F23B73564D67F61C6F14D527D54972810421E7D87589E1A7", - "004A171143A83163D6DF460AAF61522695F207A58B95C0644D87E52AA1A347916E4F7A72930B1BC06DBE22CE3F58264AFD23704CBB63B29B931F7DE6C9D949A7ECFC", - }, - { - "01546A108BC23A15D6F21872F7DED661FA8431DDBD922D0DCDB77CC878C8553FFAD064C95A920A750AC9137E527390D2D92F153E66196966EA554D9ADFCB109C4211", - "01EA842A0E17D2DE4F92C15315C63DDF72685C18195C2BB95E572B9C5136CA4B4B576AD712A52BE9730627D16054BA40CC0B8D3FF035B12AE75168397F5D50C67451", - "01F21A3CEE066E1961025FB048BD5FE2B7924D0CD797BABE0A83B66F1E35EEAF5FDE143FA85DC394A7DEE766523393784484BDF3E00114A1C857CDE1AA203DB65D61", - }, - { - "01DAE2EA071F8110DC26882D4D5EAE0621A3256FC8847FB9022E2B7D28E6F10198B1574FDD03A9053C08A1854A168AA5A57470EC97DD5CE090124EF52A2F7ECBFFD3", - "00C328FAFCBD79DD77850370C46325D987CB525569FB63C5D3BC53950E6D4C5F174E25A1EE9017B5D450606ADD152B534931D7D4E8455CC91F9B15BF05EC36E377FA", - "00617CCE7CF5064806C467F678D3B4080D6F1CC50AF26CA209417308281B68AF282623EAA63E5B5C0723D8B8C37FF0777B1A20F8CCB1DCCC43997F1EE0E44DA4A67A", - }, - { - "00BB9F2BF4FE1038CCF4DABD7139A56F6FD8BB1386561BD3C6A4FC818B20DF5DDBA80795A947107A1AB9D12DAA615B1ADE4F7A9DC05E8E6311150F47F5C57CE8B222", - "013BAD9F29ABE20DE37EBEB823C252CA0F63361284015A3BF430A46AAA80B87B0693F0694BD88AFE4E661FC33B094CD3B7963BED5A727ED8BD6A3A202ABE009D0367", - "01E9BB81FF7944CA409AD138DBBEE228E1AFCC0C890FC78EC8604639CB0DBDC90F717A99EAD9D272855D00162EE9527567DD6A92CBD629805C0445282BBC916797FF", - }, - { - "0040D09FCF3C8A5F62CF4FB223CBBB2B9937F6B0577C27020A99602C25A01136987E452988781484EDBBCF1C47E554E7FC901BC3085E5206D9F619CFF07E73D6F706", - "01C7ED902E123E6815546065A2C4AF977B22AA8EADDB68B2C1110E7EA44D42086BFE4A34B67DDC0E17E96536E358219B23A706C6A6E16BA77B65E1C595D43CAE17FB", - "0177336676304FCB343CE028B38E7B4FBA76C1C1B277DA18CAD2A8478B2A9A9F5BEC0F3BA04F35DB3E4263569EC6AADE8C92746E4C82F8299AE1B8F1739F8FD519A4", - }, - { - "001DE74955EFAABC4C4F17F8E84D881D1310B5392D7700275F82F145C61E843841AF09035BF7A6210F5A431A6A9E81C9323354A9E69135D44EBD2FCAA7731B909258", - "000E871C4A14F993C6C7369501900C4BC1E9C7B0B4BA44E04868B30B41D8071042EB28C4C250411D0CE08CD197E4188EA4876F279F90B3D8D74A3C76E6F1E4656AA8", - "00CD52DBAA33B063C3A6CD8058A1FB0A46A4754B034FCC644766CA14DA8CA5CA9FDE00E88C1AD60CCBA759025299079D7A427EC3CC5B619BFBC828E7769BCD694E86", - }, - { - "01F1FC4A349A7DA9A9E116BFDD055DC08E78252FF8E23AC276AC88B1770AE0B5DCEB1ED14A4916B769A523CE1E90BA22846AF11DF8B300C38818F713DADD85DE0C88", - "014BEE21A18B6D8B3C93FAB08D43E739707953244FDBE924FA926D76669E7AC8C89DF62ED8975C2D8397A65A49DCC09F6B0AC62272741924D479354D74FF6075578C", - "0133330865C067A0EAF72362A65E2D7BC4E461E8C8995C3B6226A21BD1AA78F0ED94FE536A0DCA35534F0CD1510C41525D163FE9D74D134881E35141ED5E8E95B979", - }, - { - "016200813020EC986863BEDFC1B121F605C1215645018AEA1A7B215A564DE9EB1B38A67AA1128B80CE391C4FB71187654AAA3431027BFC7F395766CA988C964DC56D", - "013E99020ABF5CEE7525D16B69B229652AB6BDF2AFFCAEF38773B4B7D08725F10CDB93482FDCC54EDCEE91ECA4166B2A7C6265EF0CE2BD7051B7CEF945BABD47EE6D", - "01FBD0013C674AA79CB39849527916CE301C66EA7CE8B80682786AD60F98F7E78A19CA69EFF5C57400E3B3A0AD66CE0978214D13BAF4E9AC60752F7B155E2DE4DCE3", - }, - { - NULL, NULL, NULL - } - } - }, - { - 0 - } - }; - - const void *inputs[] = { - "sample", - "test" - }; - const char hashes[][7] = { - "sha1", - "sha224", - "sha256", - "sha384", - "sha512" - }; - const ltc_ecc_curve* dp; - ecc_key key; - unsigned char pk[MAXBLOCKSIZE], hash[MAXBLOCKSIZE], sig[512], should[512]; - char name[128], tmp[MAXBLOCKSIZE]; - unsigned int t, s, i, h; - unsigned long pklen, hashlen, curvelen, inputlen, siglen, shouldlen, shouldlen2; - ltc_ecc_sig_opts sig_opts = { - .type = LTC_ECCSIG_RFC7518, - .prng = &yarrow_prng, - .wprng = find_prng ("yarrow") - }; - for (t = 0; tests[t].curve; ++t) { - curvelen = XSTRLEN(tests[t].curve); - XMEMCPY(name, tests[t].curve, curvelen); - name[curvelen++] = '-'; - DOX(ecc_find_curve(tests[t].curve, &dp), tests[t].curve); - pklen = sizeof(pk); - DOX(base16_decode(tests[t].x, XSTRLEN(tests[t].x), pk, &pklen), tests[t].curve); - DOX(ecc_set_curve(dp, &key), tests[t].curve); - DOX(ecc_set_key(pk, pklen, PK_PRIVATE, &key), tests[t].curve); - name[curvelen] = 'U'; - name[curvelen + 1] = 'x'; - name[curvelen + 2] = '\0'; - ltc_mp.write_radix(key.pubkey.x, tmp, 16); - COMPARE_TESTVECTOR(tmp, XSTRLEN(tmp), tests[t].Ux, XSTRLEN(tests[t].Ux), name, t * 1000); - name[curvelen + 1] = 'y'; - ltc_mp.write_radix(key.pubkey.y, tmp, 16); - COMPARE_TESTVECTOR(tmp, XSTRLEN(tmp), tests[t].Uy, XSTRLEN(tests[t].Uy), name, t * 1000); - i = h = 0; - for (s = 0; tests[t].signatures[s].k; ++s) { - if (h == 0) { - inputlen = XSTRLEN(inputs[i]); - XMEMCPY(&name[curvelen], inputs[i], inputlen); - name[curvelen + inputlen++] = '-'; - } - XMEMCPY(&name[curvelen + inputlen], hashes[h], 7); - hashlen = sizeof(hash); - DOX(hash_memory(find_hash(hashes[h]), inputs[i], XSTRLEN(inputs[i]), hash, &hashlen), name); - sig_opts.rfc6979_hash_alg = hashes[h]; - siglen = sizeof(sig); - DOX(ecc_sign_hash_v2(hash, hashlen, sig, &siglen, &sig_opts, &key), name); - XMEMSET(should, 0, sizeof(should)); - shouldlen = sizeof(should); - DOX(base16_decode(tests[t].signatures[s].r, XSTRLEN(tests[t].signatures[s].r), should, &shouldlen), name); - shouldlen2 = sizeof(should) - shouldlen; - DOX(base16_decode(tests[t].signatures[s].s, XSTRLEN(tests[t].signatures[s].s), should + shouldlen, &shouldlen2), name); - COMPARE_TESTVECTOR(sig, siglen, should, shouldlen + shouldlen2, name, (t * 1000 | s * 100 | i * 10 | h)); - h++; - if (h == 5) { - h = 0; - i++; - } - } - ecc_free(&key); - } - return CRYPT_OK; -} - - -static int password_get(void **p, unsigned long *l, void *u) -{ - LTC_UNUSED_PARAM(u); - *p = strdup("secret"); - *l = 6; - return 0; -} - -static int s_ecc_import_export(void) { - const ltc_ecc_curve *cu; - ecc_key key, pri, pub; - unsigned char out[300]; - unsigned long outlen; - - /* the following test keys were generated by: - # no password - openssl ecparam -name secp256k1 -genkey -out main-key.pem - openssl ec -in main-key.pem -param_enc explicit -out long_pri.der -outform DER - openssl ec -in main-key.pem -param_enc explicit -conv_form compressed -out long_pric.der -outform DER - openssl ec -in main-key.pem -param_enc explicit -pubout -out long_pub.der -outform DER - openssl ec -in main-key.pem -param_enc explicit -pubout -conv_form compressed -out long_pubc.der -outform DER - openssl ec -in main-key.pem -param_enc named_curve -out short_pri.der -outform DER - openssl ec -in main-key.pem -param_enc named_curve -conv_form compressed -out short_pric.der -outform DER - openssl ec -in main-key.pem -param_enc named_curve -pubout -out short_pub.der -outform DER - openssl ec -in main-key.pem -param_enc named_curve -pubout -conv_form compressed -out short_pubc.der -outform DER - # X.509 EC certificates - openssl req -new -x509 -keyform der -key long_pri.der -sha512 -subj '/CN=Test Cert EC' -out x509_cert_long.der -outform der -days 365000 - openssl req -new -x509 -keyform der -key long_pric.der -sha512 -subj '/CN=Test Cert EC' -out x509_cert_longc.der -outform der -days 365000 - openssl req -new -x509 -keyform der -key short_pri.der -sha512 -subj '/CN=Test Cert EC' -out x509_cert_short.der -outform der -days 365000 - openssl req -new -x509 -keyform der -key short_pric.der -sha512 -subj '/CN=Test Cert EC' -out x509_cert_shortc.der -outform der -days 365000 - # pkcs8 without password - openssl pkcs8 -topk8 -inform DER -outform DER -nocrypt -in long_pri.der -out long_pri_pkcs8.der - openssl pkcs8 -topk8 -inform DER -outform DER -nocrypt -in long_pric.der -out long_pric_pkcs8.der - openssl pkcs8 -topk8 -inform DER -outform DER -nocrypt -in short_pri.der -out short_pri_pkcs8.der - openssl pkcs8 -topk8 -inform DER -outform DER -nocrypt -in short_pric.der -out short_pric_pkcs8.der - # password protected - PBES1 - openssl pkcs8 -topk8 -inform DER -outform DER -passout pass:secret -in long_pri.der -v1 PBE-MD2-DES -out long_pri_pkcs8_pbe_md2_des.der - openssl pkcs8 -topk8 -inform DER -outform DER -passout pass:secret -in long_pri.der -v1 PBE-MD2-RC2-64 -out long_pri_pkcs8_pbe_md2_rc2_64.der - openssl pkcs8 -topk8 -inform DER -outform DER -passout pass:secret -in ltc_ecc_long_pri_test_key.der -v1 PBE-MD5-DES -out long_pri_pkcs8_pbe_md5_des.der - openssl pkcs8 -topk8 -inform DER -outform DER -passout pass:secret -in ltc_ecc_long_pri_test_key.der -v1 PBE-SHA1-RC2-64 -out long_pri_pkcs8_pbe_sha1_rc2_64.der - openssl pkcs8 -topk8 -inform DER -outform DER -passout pass:secret -in ltc_ecc_long_pri_test_key.der -v1 PBE-MD5-RC2-64 -out long_pri_pkcs8_pbe_md5_rc2_64.der - openssl pkcs8 -topk8 -inform DER -outform DER -passout pass:secret -in ltc_ecc_long_pri_test_key.der -v1 PBE-SHA1-DES -out long_pri_pkcs8_pbe_sha1_des.der - # password protected - PBES2 - openssl pkcs8 -topk8 -inform DER -outform DER -passout pass:secret -in ltc_ecc_long_pri_test_key.der -v2 rc2 -out long_pri_pkcs8_pbkdf2_rc2_cbc.der - openssl pkcs8 -topk8 -inform DER -outform DER -passout pass:secret -in ltc_ecc_long_pri_test_key.der -v2 des -out long_pri_pkcs8_pbkdf2_des_cbc.der - openssl pkcs8 -topk8 -inform DER -outform DER -passout pass:secret -in ltc_ecc_long_pri_test_key.der -v2 des3 -out long_pri_pkcs8_pbkdf2_des_ede3_cbc.der - openssl pkcs8 -topk8 -inform DER -outform DER -passout pass:secret -in ltc_ecc_long_pri_test_key.der -v2 des3 -v2prf hmacWithSHA224 -out long_pri_pkcs8_pbkdf2_sha224_des_ede3_cbc.der - openssl pkcs8 -topk8 -inform DER -outform DER -passout pass:secret -in ltc_ecc_long_pri_test_key.der -v2 des3 -v2prf hmacWithSHA256 -out long_pri_pkcs8_pbkdf2_sha256_des_ede3_cbc.der - openssl pkcs8 -topk8 -inform DER -outform DER -passout pass:secret -in ltc_ecc_long_pri_test_key.der -v2 des3 -v2prf hmacWithSHA384 -out long_pri_pkcs8_pbkdf2_sha384_des_ede3_cbc.der - openssl pkcs8 -topk8 -inform DER -outform DER -passout pass:secret -in ltc_ecc_long_pri_test_key.der -v2 des3 -v2prf hmacWithSHA512 -out long_pri_pkcs8_pbkdf2_sha512_des_ede3_cbc.der - */ - /* static const unsigned char ltc_ecc_long_pri_test_key[] defined globally */ - static const unsigned char long_pri_pkcs8[] = { /* private + long public, explicit curve params, PKCS8 */ - 0x30, 0x82, 0x01, 0x23, 0x02, 0x01, 0x00, 0x30, 0x81, 0xae, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, - 0x3d, 0x02, 0x01, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48, - 0xce, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04, - 0x41, 0x04, 0x79, 0xbe, 0x66, 0x7e, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xce, 0x87, - 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xce, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8, - 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0e, 0x11, - 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10, - 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xfe, 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5e, - 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0x04, 0x6d, 0x30, 0x6b, 0x02, 0x01, 0x01, 0x04, - 0x20, 0x0c, 0xf1, 0xad, 0x2f, 0x03, 0xf7, 0x91, 0x1b, 0xba, 0x03, 0xcf, 0x23, 0x37, 0xc8, 0xf2, - 0xf7, 0x36, 0xce, 0x65, 0xf1, 0x84, 0x2d, 0x7d, 0x9f, 0x5f, 0x9e, 0x21, 0xd9, 0x5e, 0x49, 0xbd, - 0x23, 0xa1, 0x44, 0x03, 0x42, 0x00, 0x04, 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, 0xd1, - 0xcf, 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, 0xd5, - 0xf9, 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16, 0x91, 0xbd, 0xb2, 0xb9, 0x1b, 0x40, 0x10, 0x5a, 0xb7, - 0x6c, 0x6e, 0x32, 0x5b, 0xf7, 0x63, 0x62, 0x94, 0x24, 0x24, 0xdb, 0xec, 0x3f, 0x8b, 0xe5, 0x6e, - 0x4b, 0x64, 0x37, 0x31, 0x24, 0x79, 0x4d - }; -#if defined(LTC_MD2) && defined(LTC_DES) - static const unsigned char long_pri_pkcs8_pbe_md2_des[] = { - 0x30, 0x82, 0x01, 0x49, 0x30, 0x1b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, - 0x01, 0x30, 0x0e, 0x04, 0x08, 0xd8, 0x1c, 0x80, 0xac, 0xd9, 0xfa, 0x9d, 0xbc, 0x02, 0x02, 0x08, - 0x00, 0x04, 0x82, 0x01, 0x28, 0xe1, 0xd5, 0xa8, 0x9a, 0xa8, 0x23, 0x85, 0x53, 0x18, 0xb3, 0x96, - 0x67, 0x8d, 0x45, 0x72, 0xf8, 0x69, 0xc4, 0xb1, 0x01, 0x3e, 0x04, 0xf7, 0xf7, 0x5d, 0x07, 0xad, - 0xec, 0x8e, 0xd6, 0x23, 0x00, 0xe7, 0x59, 0xb0, 0x98, 0xbb, 0xdb, 0x85, 0xdb, 0x59, 0x4d, 0xb5, - 0x53, 0xb3, 0x32, 0x50, 0x66, 0x75, 0xc4, 0x69, 0x05, 0x07, 0xee, 0xd4, 0xd8, 0x33, 0xcd, 0x4c, - 0x94, 0xad, 0x82, 0xc7, 0x89, 0x53, 0x65, 0x9f, 0x55, 0x44, 0x95, 0x20, 0xe8, 0x4a, 0xc2, 0xef, - 0x41, 0xf2, 0x9d, 0xf8, 0x3d, 0x16, 0x8a, 0x6a, 0x4e, 0x85, 0x90, 0xa7, 0xf9, 0xf8, 0xac, 0x16, - 0x76, 0xf2, 0x29, 0x4b, 0x93, 0xec, 0xd8, 0x17, 0x3f, 0x89, 0x84, 0x79, 0x75, 0x90, 0x5f, 0xc3, - 0xf2, 0xb8, 0x1a, 0x0a, 0x25, 0xf4, 0xe2, 0x59, 0xe0, 0xea, 0xa6, 0x57, 0xc4, 0x9c, 0xce, 0xfd, - 0xa8, 0xbc, 0xf6, 0x0d, 0x3a, 0x47, 0x14, 0x9d, 0x6a, 0x92, 0x77, 0xe4, 0xcb, 0x88, 0x6e, 0xfa, - 0x19, 0xa4, 0x3d, 0x58, 0xdb, 0x5f, 0xc7, 0xad, 0x91, 0x64, 0xb0, 0x1f, 0xe2, 0x66, 0xc5, 0x5a, - 0x28, 0x21, 0xb0, 0xc1, 0xc8, 0x73, 0x55, 0xd8, 0x43, 0x66, 0x6a, 0x5c, 0xcd, 0xb0, 0x89, 0x60, - 0x59, 0x31, 0xe0, 0x2f, 0x20, 0x3b, 0x83, 0xdf, 0x27, 0xcf, 0x33, 0xcc, 0xb9, 0xb6, 0xe0, 0xec, - 0x8b, 0x94, 0x4b, 0xc4, 0x1c, 0x25, 0xba, 0x97, 0x6c, 0x83, 0x22, 0x8c, 0xca, 0x9d, 0xc6, 0xaa, - 0x74, 0x3f, 0x46, 0xdc, 0xba, 0x7a, 0x36, 0x04, 0xa7, 0xc8, 0x65, 0xb4, 0xf7, 0x14, 0x53, 0x8c, - 0xff, 0x4d, 0x19, 0xc1, 0xdb, 0xa4, 0xcc, 0x52, 0xc2, 0xd9, 0x38, 0x16, 0x8f, 0xd8, 0x6e, 0x55, - 0x41, 0xa8, 0xe0, 0x15, 0xd6, 0x2d, 0xa4, 0x37, 0x9f, 0xcc, 0x42, 0x3c, 0xcb, 0xcc, 0x92, 0x04, - 0xc8, 0xcf, 0xbc, 0x60, 0xfb, 0x45, 0xff, 0x62, 0x74, 0xa1, 0xe9, 0xba, 0x1e, 0x5d, 0x44, 0x6f, - 0x0e, 0xac, 0xdf, 0xde, 0xb1, 0xbb, 0x47, 0x5e, 0x0c, 0x88, 0x0a, 0x85, 0x0b, 0xa8, 0x9e, 0xcb, - 0x32, 0x99, 0x8d, 0xb1, 0xdd, 0x12, 0x08, 0xeb, 0x7e, 0x45, 0x70, 0x12, 0xe3 - }; -#endif -#if defined(LTC_MD2) && defined(LTC_RC2) - static const unsigned char long_pri_pkcs8_pbe_md2_rc2_64[] = { - 0x30, 0x82, 0x01, 0x49, 0x30, 0x1b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, - 0x04, 0x30, 0x0e, 0x04, 0x08, 0xa2, 0x28, 0xb7, 0x2a, 0x08, 0x1c, 0x4a, 0xc4, 0x02, 0x02, 0x08, - 0x00, 0x04, 0x82, 0x01, 0x28, 0x78, 0x12, 0x02, 0x58, 0x9b, 0xea, 0x77, 0xba, 0x84, 0x20, 0x96, - 0x63, 0xf0, 0xf3, 0x38, 0x0b, 0x98, 0x53, 0x63, 0x8d, 0xa4, 0x5a, 0xa0, 0xa9, 0x21, 0x93, 0xd0, - 0x56, 0xc9, 0xd2, 0x67, 0xb2, 0x5e, 0xb5, 0x9f, 0x15, 0x8c, 0x3c, 0x9a, 0xaf, 0x9c, 0xe5, 0x8b, - 0xe6, 0x61, 0xac, 0xa4, 0x26, 0x75, 0x96, 0xea, 0x73, 0xaf, 0xd6, 0xb7, 0x4c, 0x66, 0x33, 0x98, - 0x9e, 0x0b, 0xf8, 0xe6, 0x9c, 0xfd, 0x83, 0x0f, 0x55, 0x86, 0x9f, 0xa9, 0xf0, 0x23, 0xcb, 0x80, - 0xe5, 0x32, 0x50, 0xea, 0x5b, 0x7d, 0xe2, 0x69, 0xc4, 0x6b, 0x61, 0xb2, 0xb8, 0x81, 0xe9, 0x05, - 0xcb, 0x76, 0xae, 0xa5, 0x37, 0x0f, 0x3c, 0xe6, 0xde, 0x24, 0x6a, 0x9c, 0xf2, 0x0a, 0x28, 0x6a, - 0xc9, 0xec, 0xef, 0xd7, 0xda, 0xcc, 0xf4, 0x3b, 0x74, 0x36, 0xc5, 0xaf, 0x53, 0xd8, 0xf4, 0x30, - 0x0b, 0xd4, 0xb6, 0x36, 0xdc, 0x90, 0x4f, 0x83, 0x44, 0x79, 0xea, 0xc9, 0xb7, 0xb2, 0xd0, 0x03, - 0xa6, 0x63, 0x7e, 0x1d, 0xa8, 0x4e, 0x93, 0x16, 0x7a, 0x4f, 0xd2, 0x8b, 0xd6, 0x78, 0x7d, 0x48, - 0x41, 0x7c, 0xba, 0xc3, 0x64, 0x6f, 0x11, 0x22, 0x6d, 0x40, 0xb8, 0xc9, 0x03, 0x7a, 0x2c, 0xdf, - 0x76, 0x78, 0x4f, 0x5f, 0x50, 0x03, 0x7a, 0xaf, 0x78, 0x91, 0xbb, 0x2a, 0xe6, 0x5e, 0x0f, 0xf5, - 0x60, 0x9e, 0x8a, 0x2f, 0xdb, 0x9e, 0x57, 0xbe, 0xf6, 0x0f, 0x76, 0x6e, 0x44, 0x91, 0x7b, 0x36, - 0x88, 0x9c, 0xf9, 0xbe, 0x13, 0x3e, 0x6b, 0x85, 0x62, 0xda, 0x1f, 0xf9, 0x73, 0x98, 0x8a, 0x0d, - 0xdf, 0x11, 0x74, 0x18, 0xe1, 0x1c, 0xd1, 0x3f, 0x02, 0x43, 0xd4, 0x46, 0xe3, 0x8a, 0x3b, 0x6c, - 0x7f, 0x81, 0xb4, 0xc3, 0x85, 0x4f, 0x89, 0x67, 0x26, 0x5a, 0x08, 0x35, 0x31, 0xd3, 0x15, 0xbb, - 0xcc, 0x7d, 0x7b, 0x99, 0x41, 0xdb, 0x43, 0xa0, 0x83, 0x84, 0x74, 0x6c, 0x0a, 0x80, 0x46, 0xdc, - 0xc8, 0x88, 0x87, 0x01, 0x21, 0x19, 0xd4, 0x1e, 0xf4, 0x09, 0x0e, 0x18, 0x31, 0x91, 0x37, 0x35, - 0x1d, 0x07, 0xaf, 0x87, 0x92, 0x3d, 0xf8, 0xee, 0x6f, 0x87, 0x7b, 0x52, 0x3d - }; -#endif -#if defined(LTC_MD5) && defined(LTC_DES) - static const unsigned char long_pri_pkcs8_pbe_md5_des[] = { - 0x30, 0x82, 0x01, 0x49, 0x30, 0x1b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, - 0x03, 0x30, 0x0e, 0x04, 0x08, 0x33, 0xe7, 0xd9, 0xf1, 0x35, 0xd9, 0x74, 0x83, 0x02, 0x02, 0x08, - 0x00, 0x04, 0x82, 0x01, 0x28, 0x2f, 0x77, 0x7c, 0x48, 0xc9, 0x43, 0x6d, 0xdb, 0xd0, 0x1a, 0xef, - 0xfb, 0x29, 0x5e, 0x53, 0xa3, 0x52, 0x28, 0x27, 0x76, 0xc2, 0x01, 0x76, 0x5a, 0xea, 0x98, 0xe6, - 0x72, 0xdf, 0x06, 0xa2, 0xf5, 0xd0, 0x7b, 0x74, 0xe4, 0x6b, 0x98, 0xa6, 0xb5, 0xe1, 0x02, 0xf7, - 0xab, 0x2c, 0xf1, 0xeb, 0xf4, 0xec, 0xa6, 0xba, 0xd3, 0xd5, 0xb2, 0x26, 0x83, 0xeb, 0xff, 0xc9, - 0xf8, 0x7b, 0xbf, 0xab, 0xdc, 0xe5, 0xe4, 0x91, 0xd5, 0x48, 0xba, 0x49, 0xcb, 0xc5, 0xf1, 0x71, - 0x48, 0x1e, 0x96, 0x7c, 0x10, 0xe4, 0xa9, 0x35, 0xa7, 0xe6, 0x82, 0x97, 0x6f, 0xe4, 0x64, 0xd4, - 0x53, 0xa9, 0xf1, 0x1b, 0x6c, 0x31, 0xa1, 0xc7, 0x12, 0x46, 0x45, 0x6f, 0x45, 0xb2, 0x09, 0x3a, - 0xfe, 0x35, 0x4e, 0xbf, 0x7d, 0xf8, 0xcf, 0x94, 0x78, 0x0c, 0x78, 0xfb, 0xce, 0xc1, 0x30, 0xcd, - 0x6d, 0x6b, 0x08, 0x5e, 0xf6, 0xf5, 0x97, 0xff, 0x5e, 0x63, 0x44, 0x36, 0xa5, 0x71, 0x04, 0xe5, - 0x2d, 0xd9, 0xe3, 0x41, 0x91, 0x09, 0x1e, 0xa3, 0x30, 0xff, 0x12, 0x2a, 0x7a, 0xe1, 0x8f, 0x9c, - 0x38, 0x13, 0x3d, 0xc3, 0xbb, 0x68, 0xfa, 0xc0, 0xc6, 0x35, 0x77, 0xed, 0xe8, 0x73, 0xca, 0xc3, - 0x87, 0x62, 0xa9, 0x0e, 0xef, 0xcf, 0x73, 0x3c, 0xb3, 0xa0, 0x1b, 0xb5, 0x5d, 0x72, 0x89, 0x82, - 0xd4, 0xf6, 0x37, 0x0b, 0x57, 0x8f, 0x48, 0xd4, 0xf1, 0x10, 0xa1, 0xe5, 0x25, 0x90, 0xeb, 0xde, - 0x8d, 0x2a, 0x9d, 0xfb, 0x7c, 0x0d, 0xdc, 0x38, 0x45, 0x9e, 0xa0, 0x05, 0x98, 0x4e, 0x72, 0x9f, - 0x3d, 0xde, 0xc7, 0x00, 0xf9, 0xaf, 0xdc, 0x67, 0x47, 0x73, 0xf7, 0xcf, 0x63, 0x80, 0xe3, 0x05, - 0xb3, 0xda, 0x9f, 0x4b, 0x27, 0xd3, 0x14, 0xc9, 0x62, 0xd5, 0x09, 0xde, 0x4d, 0xe7, 0x21, 0x67, - 0xfa, 0x10, 0x34, 0x18, 0xbf, 0xde, 0xf7, 0x95, 0x25, 0x6d, 0xba, 0xe4, 0x10, 0xf0, 0x9d, 0x05, - 0x7b, 0xe4, 0xb5, 0xc0, 0x21, 0xb3, 0x7d, 0xcd, 0x1d, 0x80, 0xd0, 0x10, 0xd4, 0xdb, 0x9f, 0x06, - 0xd5, 0x86, 0xea, 0x62, 0x96, 0xb7, 0x31, 0x73, 0xde, 0x25, 0xd0, 0xbb, 0xb2 - }; -#endif -#if defined(LTC_MD5) && defined(LTC_RC2) - static const unsigned char long_pri_pkcs8_pbe_md5_rc2_64[] = { - 0x30, 0x82, 0x01, 0x49, 0x30, 0x1b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, - 0x06, 0x30, 0x0e, 0x04, 0x08, 0x95, 0x82, 0x6d, 0x08, 0xe4, 0x7e, 0xae, 0x5f, 0x02, 0x02, 0x08, - 0x00, 0x04, 0x82, 0x01, 0x28, 0x93, 0x2c, 0xd8, 0x27, 0xed, 0x13, 0xe1, 0x31, 0xef, 0x7c, 0x44, - 0x9c, 0xce, 0x85, 0x17, 0x38, 0x5a, 0xe3, 0xd8, 0xe9, 0xfd, 0x1e, 0x81, 0xae, 0x9c, 0xd7, 0x8b, - 0x11, 0x4e, 0x92, 0x08, 0x3a, 0x97, 0x2c, 0x4f, 0x9a, 0xb7, 0x10, 0xda, 0x6a, 0x06, 0x9e, 0xe2, - 0xb6, 0x41, 0xf8, 0xb3, 0xd4, 0x42, 0xcc, 0x67, 0xe8, 0x25, 0x76, 0x9a, 0xc2, 0x66, 0x1a, 0x94, - 0x19, 0x0c, 0xe1, 0x43, 0x27, 0x27, 0x1e, 0xad, 0xfb, 0xce, 0xb7, 0x96, 0xfb, 0x5d, 0x6d, 0xf3, - 0xe1, 0x73, 0xc5, 0x1c, 0xa0, 0xbe, 0x94, 0x2c, 0xe7, 0x1c, 0x04, 0xa9, 0xfe, 0xdf, 0x15, 0x79, - 0x0c, 0x5e, 0xf8, 0xe2, 0xb9, 0x4a, 0xa0, 0xc5, 0x89, 0x2c, 0xf8, 0x1d, 0x5f, 0xcc, 0xf0, 0xb6, - 0xe8, 0x31, 0xeb, 0xe5, 0xb4, 0x9d, 0x2a, 0xa8, 0x8d, 0xff, 0x69, 0xf7, 0x83, 0x65, 0xbb, 0xa2, - 0xdd, 0xcd, 0x97, 0x41, 0x6e, 0xfa, 0xb6, 0xe1, 0x76, 0x7e, 0xa3, 0x24, 0x9b, 0x23, 0x58, 0x0e, - 0xeb, 0x08, 0x00, 0x96, 0x53, 0xae, 0x6c, 0xb9, 0xaa, 0x5c, 0x9a, 0xf8, 0xee, 0xcd, 0xfd, 0xe5, - 0xc5, 0x40, 0x62, 0x58, 0x6d, 0xf0, 0x10, 0xd5, 0x85, 0xeb, 0xed, 0x8a, 0x75, 0xe9, 0x8c, 0x2b, - 0xe7, 0x39, 0xaf, 0xb1, 0x15, 0xdb, 0x4f, 0xe3, 0xa5, 0x24, 0x1d, 0xd2, 0xae, 0x82, 0x88, 0x1a, - 0x37, 0x4c, 0x6b, 0x30, 0x9d, 0x6f, 0x93, 0x9c, 0x87, 0x99, 0xd1, 0x1c, 0x93, 0x0c, 0xbb, 0xf9, - 0x70, 0x36, 0x28, 0x56, 0x68, 0x27, 0x2f, 0x1e, 0xf1, 0x86, 0x0a, 0x23, 0x04, 0xe6, 0x72, 0x1f, - 0x1b, 0x71, 0x45, 0x0b, 0xe7, 0x74, 0x45, 0x8e, 0x7f, 0x94, 0xbc, 0xcd, 0x6c, 0xf8, 0xf3, 0xed, - 0x44, 0x02, 0x4d, 0x0a, 0xdd, 0xe9, 0xe4, 0x46, 0x31, 0x94, 0x28, 0x9b, 0x5f, 0x05, 0x37, 0xf4, - 0x05, 0x9c, 0xa3, 0x9c, 0xdf, 0xb7, 0xfb, 0xab, 0xe0, 0x07, 0x26, 0x40, 0x79, 0x12, 0x9a, 0x78, - 0xf6, 0xb6, 0x30, 0x3d, 0x4e, 0x16, 0x2e, 0x39, 0x96, 0x98, 0x2a, 0x8c, 0xa7, 0xdb, 0xa0, 0x4a, - 0x3f, 0x42, 0x30, 0xd3, 0x5d, 0xd0, 0x26, 0xd0, 0xc5, 0xd5, 0xa4, 0x10, 0x10 - }; -#endif -#if defined(LTC_SHA1) && defined(LTC_DES) - static const unsigned char long_pri_pkcs8_pbe_sha1_des[] = { - 0x30, 0x82, 0x01, 0x49, 0x30, 0x1b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, - 0x0a, 0x30, 0x0e, 0x04, 0x08, 0x7c, 0x01, 0xae, 0xc9, 0x05, 0x43, 0x40, 0x70, 0x02, 0x02, 0x08, - 0x00, 0x04, 0x82, 0x01, 0x28, 0xff, 0x96, 0x47, 0x56, 0x02, 0xd5, 0xd3, 0x2a, 0xf0, 0x44, 0x47, - 0x7e, 0x74, 0x28, 0x62, 0x3f, 0x2b, 0xd4, 0xa9, 0xcc, 0x2c, 0xb7, 0x03, 0xc7, 0xa6, 0x39, 0xde, - 0xc1, 0x46, 0xf1, 0xcd, 0x53, 0xb8, 0x76, 0xcd, 0xb8, 0xfd, 0xe8, 0x96, 0x1d, 0x52, 0xc5, 0xc2, - 0x33, 0x2c, 0x2e, 0x4a, 0xe1, 0x83, 0x2e, 0x8a, 0x3a, 0x73, 0xfe, 0x50, 0x70, 0xcf, 0x2a, 0x29, - 0xd5, 0x8a, 0x77, 0x96, 0xa3, 0x29, 0x7e, 0xfa, 0x74, 0xde, 0x78, 0x31, 0xd6, 0x78, 0x0a, 0x4f, - 0x67, 0x8e, 0x26, 0xc9, 0x64, 0xf3, 0xde, 0xda, 0x5d, 0x15, 0xc2, 0x6b, 0x22, 0x25, 0x9e, 0x98, - 0x41, 0x71, 0x4c, 0x09, 0x56, 0x90, 0x44, 0x7d, 0x16, 0xab, 0x7e, 0xd3, 0x75, 0x54, 0xbd, 0x88, - 0x85, 0x4a, 0x01, 0xf4, 0x17, 0x19, 0xe2, 0x43, 0x5f, 0x31, 0xf9, 0x0b, 0x78, 0xd3, 0xb6, 0xc8, - 0xa0, 0x29, 0x65, 0x86, 0xbc, 0x4b, 0xcb, 0xe2, 0xe8, 0xe7, 0x06, 0xe2, 0x27, 0xa3, 0x6a, 0xdc, - 0x9f, 0x42, 0x40, 0xc4, 0x38, 0x49, 0x3b, 0x15, 0x28, 0x82, 0x9f, 0xa0, 0x2d, 0x42, 0x30, 0xa9, - 0x28, 0x84, 0x41, 0x2b, 0xa3, 0xfb, 0xf1, 0x74, 0xa1, 0xfa, 0xff, 0x9d, 0xb6, 0x7e, 0x9b, 0x9f, - 0xfa, 0xbd, 0x00, 0x17, 0x17, 0xa6, 0xb5, 0x2a, 0x1f, 0x6b, 0x55, 0x6c, 0xd4, 0x4b, 0xbe, 0xbb, - 0xa5, 0xa7, 0x9f, 0x0c, 0x90, 0x04, 0x91, 0x09, 0x4d, 0x82, 0xe1, 0x67, 0x21, 0x96, 0x3a, 0x3b, - 0xcf, 0x7f, 0xe9, 0xb9, 0xcc, 0x56, 0xd8, 0xc7, 0xe4, 0x98, 0x30, 0x11, 0x8f, 0xfd, 0xe5, 0xbc, - 0x5e, 0xc4, 0x60, 0xe9, 0xd4, 0xc6, 0xf2, 0x60, 0xf3, 0xcd, 0x36, 0xa4, 0xe4, 0x6c, 0xfe, 0xbf, - 0xab, 0xd5, 0x2f, 0x12, 0xf4, 0xa2, 0xf0, 0xeb, 0x10, 0xd9, 0x74, 0xef, 0x7c, 0x37, 0x8d, 0xdd, - 0xc1, 0xaa, 0x84, 0xf6, 0xf1, 0xb6, 0x5b, 0x43, 0x51, 0x06, 0x78, 0xae, 0x8e, 0x9d, 0xc5, 0xc9, - 0x26, 0xdc, 0x05, 0xa3, 0x00, 0xfa, 0x4a, 0x27, 0x5f, 0x19, 0xf3, 0x88, 0x2e, 0x01, 0xb8, 0xe7, - 0x23, 0x37, 0x77, 0xa1, 0xbb, 0xb0, 0x66, 0xe2, 0xba, 0x10, 0x50, 0x06, 0x65 - }; -#endif -#if defined(LTC_SHA1) && defined(LTC_RC2) - static const unsigned char long_pri_pkcs8_pbe_sha1_rc2_64[] = { - 0x30, 0x82, 0x01, 0x49, 0x30, 0x1b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, - 0x0b, 0x30, 0x0e, 0x04, 0x08, 0x64, 0x3c, 0xdb, 0x86, 0xd9, 0xa0, 0xae, 0x3e, 0x02, 0x02, 0x08, - 0x00, 0x04, 0x82, 0x01, 0x28, 0x78, 0x85, 0x55, 0x7f, 0x37, 0xb8, 0xf7, 0xff, 0x94, 0x94, 0xf3, - 0xf2, 0x21, 0x05, 0x6d, 0x75, 0xca, 0x03, 0x1c, 0xa3, 0x9f, 0x47, 0x41, 0x14, 0x57, 0xdd, 0x63, - 0x71, 0x6c, 0xc2, 0x51, 0x14, 0x4a, 0x0d, 0x63, 0x12, 0xa8, 0x27, 0xf6, 0x3c, 0xb7, 0x47, 0x6d, - 0xa0, 0x72, 0xfe, 0x60, 0x9f, 0x1c, 0xc8, 0xe4, 0xe5, 0xfe, 0x68, 0x9d, 0x85, 0x0f, 0x8e, 0x52, - 0x2e, 0x30, 0xd5, 0x81, 0xd8, 0xc9, 0x05, 0x14, 0x1b, 0x1b, 0xf3, 0xbc, 0x95, 0x6d, 0x5d, 0x94, - 0x71, 0xff, 0xa8, 0xfe, 0xa7, 0x34, 0xff, 0x30, 0xbe, 0x8e, 0xe4, 0x65, 0x6b, 0xd0, 0xa2, 0x43, - 0x42, 0x14, 0x63, 0x36, 0x6f, 0x5d, 0x79, 0x56, 0x1b, 0x23, 0xd6, 0xdf, 0x39, 0x75, 0x48, 0x07, - 0xa2, 0x5f, 0x8d, 0x11, 0x7c, 0x95, 0x48, 0x18, 0x2d, 0xdd, 0x92, 0x14, 0x4f, 0xfd, 0x45, 0x7e, - 0x60, 0x68, 0xde, 0x47, 0x04, 0x0d, 0x0a, 0xa6, 0x3a, 0x30, 0xcb, 0x29, 0xc7, 0x9e, 0x27, 0xc3, - 0x2d, 0x49, 0xbd, 0x1e, 0xc5, 0xc9, 0xd8, 0xd2, 0x22, 0x72, 0xe2, 0xd0, 0x8e, 0x03, 0xe8, 0x84, - 0xfd, 0x7e, 0xb8, 0x8a, 0xd7, 0x70, 0x6d, 0x0b, 0xec, 0x67, 0xd0, 0xb3, 0x08, 0x9a, 0x31, 0x32, - 0x43, 0x1f, 0xa3, 0xd1, 0x6b, 0x3a, 0x63, 0xbc, 0xca, 0x25, 0x1e, 0x55, 0xd7, 0x21, 0x68, 0x77, - 0xfa, 0x41, 0x70, 0xdc, 0x3a, 0xfb, 0x05, 0x19, 0xd8, 0x8a, 0xe3, 0xe7, 0xfc, 0xf1, 0xc1, 0x0d, - 0xd4, 0x9e, 0x64, 0xd0, 0x91, 0xa5, 0x4d, 0x7b, 0x8b, 0xd9, 0xee, 0xa7, 0x6b, 0x2b, 0x0f, 0xd9, - 0xcf, 0xb3, 0xb4, 0x5b, 0x4e, 0xcc, 0xac, 0x53, 0xe5, 0xd3, 0xdd, 0x73, 0x40, 0xa5, 0x35, 0x71, - 0xeb, 0xca, 0xa7, 0xc0, 0xae, 0x70, 0xdf, 0x14, 0x83, 0xbe, 0xd8, 0x37, 0xfa, 0x8b, 0x14, 0xdb, - 0x0c, 0x4e, 0x98, 0xc7, 0xe6, 0x40, 0x38, 0x94, 0x69, 0xd4, 0xd4, 0xa9, 0xb5, 0x3f, 0xec, 0xac, - 0x14, 0x59, 0x46, 0xb5, 0x98, 0xb0, 0x99, 0x89, 0xea, 0xf5, 0x43, 0xb4, 0x47, 0xa9, 0xb1, 0xf2, - 0x03, 0x2a, 0xaf, 0xd5, 0x5d, 0x81, 0xae, 0x3b, 0xb4, 0x52, 0x11, 0x85, 0xcb - }; -#endif -#if defined(LTC_DES) - static const unsigned char long_pri_pkcs8_pbkdf2_des_cbc[] = { - 0x30, 0x82, 0x01, 0x6b, 0x30, 0x3d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, - 0x0d, 0x30, 0x30, 0x30, 0x1b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, 0x0c, - 0x30, 0x0e, 0x04, 0x08, 0xda, 0x6b, 0x0a, 0x58, 0x7e, 0xd2, 0x9d, 0x38, 0x02, 0x02, 0x08, 0x00, - 0x30, 0x11, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x07, 0x04, 0x08, 0xcc, 0x5c, 0x19, 0x7c, 0xa6, - 0x0d, 0x01, 0x4b, 0x04, 0x82, 0x01, 0x28, 0x02, 0x9d, 0xec, 0xa4, 0xe1, 0x42, 0xc4, 0xdb, 0x18, - 0x32, 0x26, 0x96, 0x8b, 0x87, 0x1a, 0xb7, 0x66, 0x8e, 0xfd, 0x23, 0x1e, 0x1e, 0x20, 0x18, 0xcd, - 0x81, 0x1b, 0x67, 0x86, 0x78, 0xae, 0xb3, 0x70, 0x81, 0xf9, 0x6a, 0x26, 0x4e, 0x31, 0x64, 0xf8, - 0x7e, 0xbf, 0xf3, 0xd3, 0xea, 0x7c, 0xda, 0x5d, 0x4d, 0xb7, 0xe2, 0xda, 0x9a, 0x80, 0x94, 0xd1, - 0x65, 0x5f, 0x57, 0x17, 0xbc, 0xac, 0xd3, 0xb4, 0x94, 0xdc, 0xd0, 0x34, 0xe9, 0xed, 0x57, 0x97, - 0x53, 0xe9, 0x24, 0x21, 0xac, 0x2b, 0xd1, 0xd9, 0x35, 0x7f, 0xf0, 0x79, 0x14, 0xce, 0x96, 0xe2, - 0x55, 0xfb, 0xb9, 0x6e, 0xeb, 0xbf, 0xc8, 0xf2, 0x66, 0xc1, 0x42, 0xee, 0x94, 0x22, 0xac, 0x6a, - 0xe2, 0xf6, 0xba, 0xfc, 0xeb, 0xc1, 0xd0, 0xec, 0x3c, 0x16, 0xa4, 0x36, 0x7a, 0xbf, 0xe9, 0x9d, - 0x39, 0xd6, 0x32, 0x54, 0x3e, 0x86, 0xcf, 0xe4, 0x32, 0x1c, 0xc5, 0x54, 0x3f, 0x8d, 0x6e, 0xb9, - 0x6c, 0x3d, 0xd7, 0x68, 0xd7, 0x67, 0xdd, 0x04, 0x0e, 0x8c, 0xfd, 0x62, 0x1a, 0x21, 0xa8, 0xcc, - 0x67, 0xbd, 0x4f, 0x9b, 0x3c, 0x99, 0xd5, 0xa5, 0x98, 0x12, 0x33, 0x04, 0xcf, 0x1b, 0x58, 0x3f, - 0xb2, 0x70, 0xfe, 0x92, 0xff, 0x7a, 0x73, 0xf9, 0x37, 0xd5, 0x20, 0x0e, 0x49, 0xed, 0xb3, 0x77, - 0x73, 0x0f, 0x3e, 0xf8, 0x15, 0xc1, 0xfc, 0x28, 0x47, 0x10, 0xe8, 0x30, 0xee, 0xa9, 0x96, 0xcf, - 0x39, 0xb6, 0x83, 0xe2, 0x84, 0x1d, 0x0e, 0x65, 0xb7, 0x02, 0x08, 0xf7, 0x8d, 0xe7, 0xf2, 0xcc, - 0x52, 0xc2, 0xe6, 0x1d, 0xf6, 0x96, 0x17, 0x3e, 0x3f, 0xd8, 0x70, 0x8d, 0x2c, 0x62, 0x00, 0xf3, - 0x32, 0xbd, 0x1c, 0x6b, 0x4a, 0x0c, 0xc6, 0x46, 0x61, 0x92, 0x1c, 0x01, 0x11, 0xbc, 0x55, 0xdd, - 0x82, 0xd1, 0xbf, 0x2e, 0x1e, 0x97, 0xbe, 0xa7, 0x6e, 0x5a, 0xcd, 0xc6, 0x8f, 0x38, 0x24, 0x8f, - 0xb8, 0x36, 0x3d, 0x06, 0x82, 0x14, 0x5b, 0x1a, 0x84, 0x1e, 0x47, 0x53, 0x3a, 0x12, 0x21, 0x23, - 0xbe, 0xe4, 0xf4, 0x57, 0xc7, 0x31, 0x45, 0x24, 0x46, 0x94, 0x53, 0x0b, 0x1d, 0xcd, 0x57 - }; -#endif -#if defined(LTC_DES) - static const unsigned char long_pri_pkcs8_pbkdf2_des_ede3_cbc[] = { - 0x30, 0x82, 0x01, 0x6e, 0x30, 0x40, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, - 0x0d, 0x30, 0x33, 0x30, 0x1b, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, 0x0c, - 0x30, 0x0e, 0x04, 0x08, 0x6a, 0x99, 0x55, 0x06, 0x40, 0xd5, 0xe6, 0xc9, 0x02, 0x02, 0x08, 0x00, - 0x30, 0x14, 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x03, 0x07, 0x04, 0x08, 0x7f, 0xf2, - 0xa7, 0xa3, 0x2c, 0xbb, 0x8e, 0x78, 0x04, 0x82, 0x01, 0x28, 0x55, 0x4d, 0xcb, 0xab, 0xb8, 0x6e, - 0xcf, 0x00, 0xd2, 0xe8, 0x1e, 0x0e, 0xe1, 0x8f, 0x51, 0x8e, 0x32, 0x68, 0xaf, 0x44, 0xa6, 0xf2, - 0x9e, 0x11, 0xd7, 0x0f, 0xa7, 0xd5, 0x74, 0x77, 0xbc, 0x6b, 0x53, 0x40, 0x70, 0xb6, 0x02, 0xdb, - 0xa6, 0x2e, 0xc7, 0x20, 0x15, 0x78, 0x91, 0xcc, 0x5b, 0xa7, 0x15, 0x58, 0x65, 0xeb, 0xc7, 0x6f, - 0xb8, 0x14, 0xc9, 0x5f, 0x89, 0x58, 0xe2, 0xab, 0x69, 0x17, 0xe2, 0xe7, 0xe0, 0xa4, 0x59, 0xb7, - 0x6a, 0xc2, 0xe5, 0xba, 0x03, 0x0e, 0xcc, 0x0a, 0xb1, 0xf0, 0x69, 0xb2, 0x90, 0xac, 0x30, 0x79, - 0xd4, 0xa3, 0x90, 0xa2, 0x60, 0x37, 0x7d, 0xf8, 0xd9, 0x49, 0xa3, 0x0b, 0x6d, 0xd9, 0x98, 0x9e, - 0xb0, 0x6a, 0xad, 0x97, 0x08, 0xf1, 0xfd, 0xec, 0xf8, 0xa7, 0x3c, 0xf6, 0x48, 0x81, 0x5b, 0x6d, - 0x19, 0xcc, 0xed, 0x49, 0x94, 0x05, 0x6e, 0xa4, 0x9b, 0x58, 0xdd, 0xaf, 0xd7, 0x3d, 0x12, 0xe6, - 0xf4, 0x12, 0x46, 0xd9, 0x82, 0xde, 0xb7, 0xc4, 0xeb, 0x1c, 0x3a, 0xef, 0x93, 0x82, 0x3d, 0xf8, - 0x55, 0x88, 0xe5, 0x54, 0xd6, 0x74, 0x1c, 0x20, 0xbd, 0x40, 0x65, 0x99, 0x19, 0x5f, 0x25, 0x62, - 0x35, 0x6d, 0x32, 0x64, 0xd7, 0xa1, 0x45, 0xa8, 0xc4, 0x8d, 0xe0, 0x6d, 0x14, 0x85, 0x84, 0x75, - 0x62, 0x0f, 0xb0, 0xe9, 0xb1, 0xca, 0x31, 0x97, 0x22, 0x41, 0xb3, 0xf5, 0xdf, 0x5c, 0xbf, 0x3f, - 0x4f, 0x01, 0xf8, 0xe7, 0xbc, 0xdc, 0xb2, 0x9a, 0x7d, 0x0c, 0x96, 0x38, 0x48, 0x7a, 0x1b, 0x89, - 0x2b, 0xab, 0xa6, 0xbd, 0xee, 0x7a, 0xf8, 0x85, 0x82, 0x80, 0x8c, 0x3b, 0x05, 0x3c, 0x40, 0x69, - 0x97, 0x0a, 0x4c, 0x45, 0xae, 0x38, 0x22, 0xc5, 0x95, 0xf2, 0x4f, 0x0c, 0xd5, 0x54, 0x23, 0x92, - 0x9b, 0x06, 0x81, 0xca, 0xa5, 0x1e, 0x91, 0x7e, 0x2b, 0x85, 0xb4, 0xd4, 0xeb, 0xb6, 0xee, 0x22, - 0x10, 0x72, 0xaf, 0x9e, 0x6d, 0xcc, 0x16, 0x24, 0x01, 0x44, 0x48, 0xaa, 0xc9, 0xf8, 0x38, 0x72, - 0x7a, 0x35, 0x94, 0x20, 0x58, 0xa2, 0x1c, 0x81, 0xaf, 0x47, 0x3b, 0xb8, 0x23, 0xbb, 0x71, 0x09, - 0xbf, 0x93 - }; -#endif -#if defined(LTC_RC2) - static const unsigned char long_pri_pkcs8_pbkdf2_rc2_cbc[] = { - 0x30, 0x82, 0x01, 0x76, 0x30, 0x48, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, - 0x0d, 0x30, 0x3b, 0x30, 0x1e, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, 0x0c, - 0x30, 0x11, 0x04, 0x08, 0xbf, 0xef, 0x1a, 0x42, 0x5d, 0xc3, 0x6b, 0x0f, 0x02, 0x02, 0x08, 0x00, - 0x02, 0x01, 0x10, 0x30, 0x19, 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x03, 0x02, 0x30, - 0x0d, 0x02, 0x01, 0x3a, 0x04, 0x08, 0xfe, 0xf2, 0x09, 0x0c, 0xa4, 0xd0, 0xe6, 0x83, 0x04, 0x82, - 0x01, 0x28, 0x61, 0x18, 0x73, 0xb7, 0x9d, 0x58, 0xc8, 0x4a, 0xf4, 0x24, 0xec, 0xb4, 0xe6, 0x24, - 0xa7, 0xf0, 0x1e, 0xea, 0xc3, 0x57, 0x44, 0xb7, 0x5a, 0x77, 0xe5, 0x3c, 0x1c, 0x6a, 0x6b, 0x70, - 0x6e, 0x64, 0x35, 0xa5, 0x5d, 0x32, 0xe3, 0xce, 0xe8, 0x79, 0xa4, 0x7f, 0x2b, 0xfc, 0xcb, 0x07, - 0x62, 0xcd, 0xc9, 0x15, 0x30, 0xdf, 0x69, 0xae, 0xe8, 0xb4, 0x83, 0xec, 0x2a, 0xaf, 0xb3, 0x29, - 0x92, 0x77, 0xf3, 0x31, 0x4d, 0x5f, 0xcb, 0xea, 0xa2, 0x4d, 0xfb, 0xa1, 0x68, 0xbe, 0x00, 0x01, - 0x6d, 0x3f, 0xc6, 0xc1, 0x13, 0xee, 0xb0, 0x5a, 0x52, 0xce, 0xdc, 0x12, 0xf8, 0x42, 0x22, 0x2f, - 0x57, 0x2e, 0x54, 0xac, 0x48, 0x31, 0x4d, 0x3c, 0xa1, 0x97, 0x5e, 0x17, 0x74, 0x88, 0x9b, 0x31, - 0x91, 0x69, 0x00, 0x00, 0x15, 0x2c, 0xc2, 0xac, 0x70, 0x84, 0x9c, 0x7e, 0x5d, 0xc9, 0xee, 0x06, - 0xcc, 0x38, 0x9d, 0x7d, 0xea, 0x71, 0xc3, 0x4f, 0x99, 0x08, 0xde, 0xb0, 0x1b, 0x3b, 0x2a, 0xbd, - 0x7e, 0x01, 0x3b, 0x5e, 0xe5, 0xc2, 0x54, 0xf2, 0x30, 0xe5, 0xa0, 0xf3, 0x69, 0x87, 0x77, 0xed, - 0xa1, 0x37, 0x76, 0x6a, 0xec, 0xe2, 0x9c, 0x8d, 0x4c, 0xe9, 0xf4, 0xd0, 0xca, 0xb5, 0x8f, 0xd0, - 0x63, 0x17, 0x41, 0xcb, 0x29, 0x58, 0x4f, 0x2a, 0xd1, 0xe1, 0x03, 0x73, 0x09, 0xcc, 0x93, 0xc6, - 0xde, 0x1e, 0x34, 0x0f, 0xb3, 0x67, 0xfd, 0x5e, 0x49, 0x16, 0x84, 0x84, 0x6a, 0x8f, 0x55, 0x22, - 0x0b, 0xe4, 0xd8, 0xee, 0x2e, 0x9f, 0x25, 0x19, 0x89, 0x19, 0xe6, 0x8d, 0x64, 0x31, 0x38, 0x68, - 0xfa, 0x40, 0x84, 0xca, 0x39, 0xef, 0x1a, 0x4a, 0xe9, 0x04, 0xee, 0xcc, 0x4a, 0xea, 0x19, 0x96, - 0xa4, 0xcd, 0x62, 0x76, 0xb3, 0xc4, 0x2c, 0x23, 0x75, 0x24, 0xcd, 0x49, 0xe2, 0x17, 0x81, 0x45, - 0x24, 0x55, 0xeb, 0xe1, 0xb4, 0xeb, 0xda, 0xc5, 0x56, 0xac, 0xfa, 0x30, 0xbd, 0x05, 0xbb, 0x03, - 0x65, 0x50, 0xdc, 0xbf, 0xdf, 0xff, 0x2a, 0x80, 0x85, 0x6d, 0x6a, 0x5c, 0x93, 0xb8, 0x81, 0xc4, - 0xca, 0x91, 0x08, 0x7b, 0x8a, 0x9d, 0xe9, 0x2d, 0xfc, 0x3b - }; -#endif -#if defined(LTC_SHA224) && defined(LTC_DES) - static const unsigned char long_pri_pkcs8_pbkdf2_sha224_des_ede3_cbc[] = { - 0x30, 0x82, 0x01, 0x7c, 0x30, 0x4e, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, - 0x0d, 0x30, 0x41, 0x30, 0x29, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, 0x0c, - 0x30, 0x1c, 0x04, 0x08, 0xb2, 0x82, 0x71, 0xc5, 0xd6, 0x3c, 0x2b, 0x92, 0x02, 0x02, 0x08, 0x00, - 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x08, 0x05, 0x00, 0x30, 0x14, - 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x03, 0x07, 0x04, 0x08, 0x4a, 0x46, 0x2a, 0xa9, - 0xd5, 0x9f, 0x79, 0xea, 0x04, 0x82, 0x01, 0x28, 0xc4, 0x27, 0x05, 0xa8, 0x01, 0xa7, 0xc9, 0x0d, - 0x0e, 0x74, 0x06, 0x4a, 0xb8, 0x07, 0x9f, 0x7b, 0x0f, 0x82, 0xfd, 0x2c, 0xb5, 0x4f, 0x63, 0xed, - 0xed, 0x86, 0x96, 0x79, 0x08, 0x2d, 0x5f, 0x6d, 0x8c, 0x83, 0xc9, 0xcc, 0xd4, 0x9b, 0x0a, 0x81, - 0x60, 0x22, 0x09, 0xb9, 0x12, 0xca, 0xf1, 0xad, 0x61, 0x22, 0xf0, 0x6b, 0xdb, 0x52, 0x99, 0xae, - 0x70, 0x2b, 0x61, 0x63, 0xdc, 0x2f, 0xc1, 0xd3, 0xb5, 0x28, 0xbb, 0xa1, 0xd2, 0xb7, 0xaf, 0xbb, - 0x86, 0xa1, 0x1b, 0x46, 0x0a, 0xc9, 0xab, 0x44, 0xd2, 0x9c, 0x16, 0x18, 0x8b, 0x4a, 0x92, 0x56, - 0x5b, 0x50, 0x39, 0x1b, 0x88, 0x50, 0x92, 0x35, 0xb8, 0x85, 0xc3, 0xaa, 0x56, 0x76, 0xde, 0xbf, - 0x68, 0x91, 0x2e, 0xc8, 0x28, 0x29, 0xd8, 0x71, 0x60, 0xe3, 0xf0, 0x5a, 0x66, 0x85, 0xdd, 0x6b, - 0x5c, 0xaf, 0xf1, 0x28, 0xf8, 0xdc, 0xa7, 0x8d, 0xc4, 0x9b, 0xcb, 0xb2, 0x99, 0x34, 0x4d, 0x76, - 0xa0, 0x8b, 0xf2, 0x18, 0x8e, 0x42, 0xe0, 0x79, 0xc3, 0xeb, 0x0f, 0x00, 0xe7, 0xbe, 0x83, 0xdf, - 0xba, 0xa5, 0xf1, 0x81, 0x05, 0x1c, 0xc9, 0xda, 0xea, 0xe1, 0xc4, 0x38, 0x24, 0x1e, 0xcf, 0xea, - 0x22, 0x05, 0x75, 0x43, 0xfe, 0xfe, 0x14, 0xf7, 0x6d, 0x41, 0x67, 0xcf, 0xfd, 0x57, 0xa7, 0xfc, - 0x22, 0x03, 0x14, 0xc1, 0xf6, 0x4d, 0x40, 0x4e, 0xf1, 0xec, 0x72, 0xec, 0x3c, 0xb1, 0x87, 0x44, - 0xe9, 0x72, 0xc5, 0x8b, 0x48, 0xd9, 0x98, 0x08, 0x55, 0xc5, 0x40, 0x26, 0xf5, 0x8d, 0x73, 0x5e, - 0x35, 0x98, 0x71, 0x09, 0x98, 0xfa, 0xb7, 0x1c, 0x35, 0xcd, 0xd4, 0xf1, 0x65, 0xb4, 0x59, 0xdb, - 0x9e, 0x79, 0xe7, 0x21, 0x99, 0xd7, 0x9e, 0x8c, 0x13, 0x77, 0x0c, 0x5e, 0xae, 0x43, 0x82, 0xf1, - 0x83, 0x79, 0x7d, 0x37, 0x51, 0xde, 0x65, 0x26, 0x1f, 0x8f, 0x81, 0x1c, 0x55, 0x40, 0xec, 0xaf, - 0x3f, 0x0a, 0x68, 0xd2, 0xc7, 0x59, 0x47, 0xda, 0x78, 0x0c, 0x0e, 0x59, 0x6a, 0x93, 0xcd, 0x05, - 0x09, 0x51, 0x47, 0xb1, 0x45, 0x3f, 0x67, 0xf8, 0x76, 0x50, 0x76, 0xa3, 0x2d, 0x31, 0x17, 0x73 - }; -#endif -#if defined(LTC_SHA256) && defined(LTC_DES) - static const unsigned char long_pri_pkcs8_pbkdf2_sha256_des_ede3_cbc[] = { - 0x30, 0x82, 0x01, 0x7c, 0x30, 0x4e, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, - 0x0d, 0x30, 0x41, 0x30, 0x29, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, 0x0c, - 0x30, 0x1c, 0x04, 0x08, 0x93, 0x6e, 0x0a, 0x02, 0x8e, 0x72, 0xac, 0x98, 0x02, 0x02, 0x08, 0x00, - 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x09, 0x05, 0x00, 0x30, 0x14, - 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x03, 0x07, 0x04, 0x08, 0x89, 0xa4, 0xc9, 0xd9, - 0x82, 0xfa, 0x02, 0x76, 0x04, 0x82, 0x01, 0x28, 0xec, 0xd9, 0xee, 0xbf, 0xfa, 0xe6, 0x51, 0xdb, - 0x02, 0xcb, 0xf3, 0x2c, 0x55, 0xdb, 0x83, 0x90, 0x5d, 0x9e, 0xf6, 0xbe, 0x10, 0xae, 0x35, 0x8c, - 0x22, 0x39, 0xfc, 0xf9, 0xd1, 0x23, 0x27, 0x68, 0xd3, 0x15, 0x46, 0xed, 0x5d, 0x15, 0xfb, 0xdf, - 0x6f, 0xe1, 0x01, 0x1c, 0xed, 0x4c, 0xfc, 0x78, 0x94, 0x47, 0x71, 0x92, 0xbc, 0xa1, 0xa6, 0x06, - 0x74, 0x22, 0xcc, 0xbb, 0x49, 0x98, 0x43, 0xf1, 0xc2, 0xde, 0x4e, 0xeb, 0x56, 0x0e, 0x03, 0xc1, - 0xf1, 0xc1, 0x80, 0x4b, 0x70, 0xd0, 0x8f, 0xf3, 0xd8, 0x18, 0x08, 0x41, 0x7a, 0xf9, 0x8b, 0x74, - 0xe5, 0x28, 0x61, 0x77, 0x2f, 0x84, 0xb3, 0xb3, 0x68, 0xce, 0x19, 0xf0, 0xc6, 0xa9, 0xc1, 0x29, - 0x96, 0xca, 0x3b, 0xdb, 0x13, 0x99, 0x86, 0xbe, 0x21, 0x0d, 0x00, 0xd7, 0x30, 0x15, 0x74, 0xfb, - 0x43, 0xf7, 0x14, 0x97, 0x6d, 0xed, 0xeb, 0xe3, 0x4d, 0x67, 0x80, 0x35, 0x03, 0x69, 0x0d, 0xbe, - 0xf1, 0x99, 0x6b, 0x53, 0xb7, 0xa3, 0xdf, 0xf4, 0xc3, 0xda, 0x20, 0x9b, 0xbf, 0xf9, 0x3f, 0x19, - 0xae, 0xd5, 0x37, 0x91, 0x36, 0x42, 0xf3, 0x7d, 0xad, 0x40, 0x3c, 0x2a, 0x7f, 0x2d, 0xf1, 0x79, - 0xee, 0x4c, 0x08, 0x3a, 0xd6, 0x35, 0x9b, 0xc9, 0xff, 0xd8, 0x41, 0x41, 0xd1, 0xc6, 0xa1, 0xba, - 0x4d, 0xc6, 0xb7, 0x85, 0x05, 0xa1, 0x8e, 0xeb, 0xd1, 0xd2, 0x3a, 0x13, 0xd7, 0xbd, 0xb0, 0x02, - 0xfe, 0x54, 0xfe, 0xf4, 0xfd, 0x31, 0x0c, 0x42, 0x78, 0xb9, 0x17, 0x90, 0x36, 0x17, 0xb8, 0x1a, - 0x08, 0xe8, 0x7e, 0x5f, 0xbb, 0x30, 0xc2, 0xec, 0xd5, 0x08, 0xbc, 0xae, 0x2f, 0xe0, 0xca, 0xf2, - 0x44, 0x2c, 0xa4, 0xb5, 0xec, 0xb9, 0xc2, 0xa3, 0x4a, 0x1a, 0x49, 0xfb, 0x3e, 0x5c, 0xb5, 0xd8, - 0xb6, 0xf0, 0xbc, 0xa2, 0xda, 0xaa, 0x7a, 0x05, 0x4d, 0x06, 0xc0, 0x4b, 0x8f, 0x59, 0xce, 0x56, - 0x02, 0x26, 0xb2, 0xa0, 0x5f, 0x74, 0xbb, 0x0b, 0x01, 0x1c, 0xb2, 0x0b, 0x8a, 0x80, 0xa4, 0x5d, - 0x6e, 0x52, 0x24, 0xd0, 0xbe, 0xf5, 0x8e, 0x9e, 0x9e, 0x02, 0x40, 0x08, 0x99, 0xe0, 0x2c, 0xf9 - }; -#endif -#if defined(LTC_SHA384) && defined(LTC_DES) - static const unsigned char long_pri_pkcs8_pbkdf2_sha384_des_ede3_cbc[] = { - 0x30, 0x82, 0x01, 0x7c, 0x30, 0x4e, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, - 0x0d, 0x30, 0x41, 0x30, 0x29, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, 0x0c, - 0x30, 0x1c, 0x04, 0x08, 0xfd, 0x6c, 0xdf, 0x0b, 0x23, 0xed, 0x71, 0xf7, 0x02, 0x02, 0x08, 0x00, - 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x0a, 0x05, 0x00, 0x30, 0x14, - 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x03, 0x07, 0x04, 0x08, 0x99, 0xd0, 0x84, 0x7d, - 0x6d, 0x4e, 0x82, 0xe1, 0x04, 0x82, 0x01, 0x28, 0xac, 0x9a, 0x2c, 0x71, 0xdf, 0x1a, 0x19, 0x38, - 0xee, 0xc4, 0x9d, 0x7a, 0x27, 0xe0, 0xb9, 0x69, 0x32, 0xed, 0xe7, 0xa1, 0x77, 0x16, 0x60, 0x18, - 0x7a, 0xf1, 0x47, 0xc1, 0x98, 0x48, 0xa4, 0xff, 0xab, 0x83, 0x1a, 0x7d, 0xe3, 0xdb, 0xcc, 0xf0, - 0x40, 0x94, 0x3a, 0x6a, 0x3f, 0xf7, 0x88, 0x19, 0x59, 0xf4, 0xd8, 0x1b, 0x87, 0x14, 0x5b, 0x9c, - 0x1f, 0xc5, 0xaf, 0x80, 0xe8, 0x06, 0xdb, 0xfa, 0x2c, 0xac, 0x61, 0x1c, 0xec, 0xec, 0x99, 0x5e, - 0x06, 0x6e, 0x68, 0x4c, 0xb0, 0xc8, 0x6f, 0x74, 0x2c, 0x1e, 0x58, 0x2f, 0x49, 0x82, 0xa4, 0x2b, - 0xb4, 0x4a, 0x2d, 0x77, 0x13, 0x87, 0xed, 0xbd, 0x71, 0x5a, 0x29, 0x29, 0x0c, 0x88, 0x4a, 0xf3, - 0x76, 0x37, 0x7e, 0x04, 0x3c, 0x45, 0x76, 0x98, 0x22, 0x20, 0x97, 0xef, 0xae, 0x4a, 0xa9, 0x08, - 0x54, 0xef, 0x43, 0xe0, 0x86, 0x54, 0x72, 0x44, 0xd1, 0x25, 0x9c, 0xb6, 0x7d, 0x88, 0xbd, 0x8f, - 0xbe, 0xcb, 0xa8, 0x63, 0xfe, 0x66, 0x54, 0xa2, 0xce, 0x77, 0x19, 0x7e, 0xdd, 0xf7, 0x4d, 0xdc, - 0xb1, 0xf7, 0xbf, 0x3c, 0xb5, 0xd2, 0x30, 0x9d, 0x3c, 0x35, 0x09, 0x37, 0xae, 0xae, 0x0f, 0x0b, - 0x9d, 0xf5, 0x10, 0xae, 0x56, 0x83, 0x4f, 0xd8, 0xcd, 0xfe, 0xb7, 0xa9, 0x54, 0xf9, 0xb3, 0x89, - 0xf6, 0x9a, 0x11, 0x60, 0x04, 0x4d, 0x80, 0xaf, 0x74, 0x73, 0x2d, 0xc4, 0x24, 0x23, 0xaa, 0x50, - 0x4c, 0xf1, 0xd6, 0x2d, 0xc6, 0x74, 0xeb, 0x62, 0x02, 0xda, 0x81, 0x68, 0xc8, 0x68, 0xf0, 0x82, - 0x71, 0xb2, 0xa5, 0x8e, 0x45, 0x93, 0x29, 0x94, 0x8f, 0xec, 0x11, 0x65, 0xcc, 0xd6, 0x4c, 0x2e, - 0x0d, 0x4e, 0x45, 0xb4, 0x4e, 0x97, 0x38, 0xd0, 0xc2, 0x61, 0x43, 0x78, 0xa4, 0x08, 0x0a, 0x58, - 0x3f, 0x66, 0xdb, 0x34, 0x42, 0x17, 0x42, 0x92, 0x04, 0x9a, 0x2d, 0x73, 0xaf, 0x58, 0x38, 0xc8, - 0x3f, 0x5b, 0x83, 0x95, 0x3d, 0xae, 0xae, 0x60, 0x2b, 0x6d, 0xd9, 0xb4, 0xe3, 0x97, 0x6b, 0x49, - 0xef, 0xd9, 0x68, 0xbb, 0x8d, 0x3a, 0x7e, 0xcb, 0x57, 0x33, 0xf5, 0x1a, 0x8d, 0xb4, 0x6d, 0xfb - }; -#endif -#if defined(LTC_SHA512) && defined(LTC_DES) - static const unsigned char long_pri_pkcs8_pbkdf2_sha512_des_ede3_cbc[] = { - 0x30, 0x82, 0x01, 0x7c, 0x30, 0x4e, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, - 0x0d, 0x30, 0x41, 0x30, 0x29, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x05, 0x0c, - 0x30, 0x1c, 0x04, 0x08, 0xad, 0xb1, 0xe1, 0x21, 0xdc, 0xe5, 0x09, 0xee, 0x02, 0x02, 0x08, 0x00, - 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x0b, 0x05, 0x00, 0x30, 0x14, - 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x03, 0x07, 0x04, 0x08, 0x1a, 0x8b, 0x81, 0x3b, - 0x97, 0x7d, 0xfa, 0x51, 0x04, 0x82, 0x01, 0x28, 0x6d, 0x6f, 0x93, 0x77, 0xcb, 0x52, 0x2d, 0x3b, - 0x82, 0x12, 0x80, 0xce, 0x9e, 0x69, 0x03, 0xe4, 0x64, 0xa1, 0x4b, 0x8e, 0x60, 0x51, 0x4d, 0x08, - 0xe1, 0x25, 0x5d, 0xe6, 0xed, 0x20, 0x23, 0x4c, 0x4e, 0xa3, 0xe8, 0xab, 0x7a, 0xf8, 0x54, 0x65, - 0x22, 0x92, 0x0c, 0x45, 0xab, 0x1c, 0xe2, 0x68, 0x4e, 0xf3, 0xa9, 0x61, 0xd6, 0x44, 0x9d, 0x55, - 0x19, 0xc6, 0xd9, 0x2a, 0x0d, 0x45, 0x7d, 0xca, 0xa4, 0x41, 0xb5, 0x6d, 0xd5, 0x09, 0xf2, 0xb6, - 0x81, 0x95, 0x64, 0xdb, 0x2b, 0xed, 0x83, 0x6b, 0x44, 0xa6, 0xce, 0x36, 0x8d, 0x23, 0x89, 0xb6, - 0xf3, 0xb0, 0xe0, 0xcf, 0x57, 0x72, 0xc7, 0x61, 0x3f, 0x29, 0xb9, 0xea, 0xe8, 0x7a, 0xca, 0x43, - 0x90, 0x79, 0x81, 0x8a, 0xe2, 0x3c, 0xd1, 0xa6, 0xd9, 0x09, 0xd8, 0x7d, 0xd0, 0x90, 0x69, 0x7e, - 0xdd, 0x40, 0xde, 0xba, 0x11, 0xc6, 0x6f, 0x75, 0xfc, 0xc3, 0x99, 0x43, 0xd2, 0xa4, 0x16, 0x2e, - 0x95, 0x99, 0x12, 0x77, 0xe8, 0x86, 0x9a, 0xf9, 0x97, 0xf4, 0x43, 0x99, 0x1d, 0x7b, 0xe0, 0x69, - 0xb0, 0xe9, 0x45, 0xd0, 0x0b, 0xaa, 0xd0, 0xa9, 0x90, 0x85, 0x39, 0xd9, 0xe0, 0xe4, 0xe5, 0xf3, - 0xcf, 0xb6, 0x60, 0x63, 0x51, 0x0b, 0xd8, 0x3d, 0xa2, 0x0f, 0xf6, 0x53, 0x09, 0x2e, 0x11, 0xc4, - 0xe6, 0xe3, 0xfa, 0xfb, 0x9f, 0x4d, 0xf4, 0xef, 0xb2, 0xf6, 0x9b, 0xc6, 0xb3, 0x75, 0x66, 0xfd, - 0x1b, 0x44, 0xba, 0x3c, 0xa8, 0x51, 0xbe, 0x97, 0xf1, 0x54, 0xb5, 0xcc, 0x6f, 0x5f, 0x1d, 0x9b, - 0xee, 0xed, 0x7a, 0x82, 0xfa, 0x40, 0x39, 0xa7, 0xf5, 0x8e, 0x5e, 0x42, 0xfa, 0x37, 0xcc, 0xe8, - 0x99, 0x38, 0xc1, 0xab, 0x83, 0xb8, 0x3c, 0x25, 0x17, 0x5f, 0xb7, 0x45, 0x0f, 0xcd, 0xec, 0x2a, - 0x47, 0x07, 0x02, 0xba, 0x92, 0xc1, 0x79, 0xf1, 0x95, 0xc7, 0x83, 0x46, 0xd7, 0x9e, 0x04, 0x96, - 0x3c, 0x5d, 0x7e, 0x70, 0xe6, 0x2b, 0x72, 0x70, 0x42, 0x66, 0x17, 0x0e, 0xc3, 0xcf, 0x32, 0x28, - 0x0c, 0xf9, 0x46, 0x38, 0xb7, 0x64, 0xd6, 0x51, 0xf9, 0xbd, 0x57, 0xf2, 0x7a, 0xcc, 0x02, 0xe3 - }; -#endif - static const unsigned char long_pric[] = { /* private + compressed public, explicit curve params */ - 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20, 0x0c, 0xf1, 0xad, 0x2f, 0x03, 0xf7, 0x91, 0x1b, - 0xba, 0x03, 0xcf, 0x23, 0x37, 0xc8, 0xf2, 0xf7, 0x36, 0xce, 0x65, 0xf1, 0x84, 0x2d, 0x7d, 0x9f, - 0x5f, 0x9e, 0x21, 0xd9, 0x5e, 0x49, 0xbd, 0x23, 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, - 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2f, 0x30, - 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04, 0x21, 0x02, 0x79, 0xbe, 0x66, 0x7e, 0xf9, 0xdc, - 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xce, 0x87, 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xce, - 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8, 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xba, 0xae, 0xdc, - 0xe6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, - 0xa1, 0x24, 0x03, 0x22, 0x00, 0x03, 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, 0xd1, 0xcf, - 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, 0xd5, 0xf9, - 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16 - }; - static const unsigned char long_pric_pkcs8[] = { /* private + compressed public, explicit curve params, PKCS8 */ - 0x30, 0x81, 0xe3, 0x02, 0x01, 0x00, 0x30, 0x81, 0x8e, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, - 0x02, 0x01, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, - 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04, 0x21, - 0x02, 0x79, 0xbe, 0x66, 0x7e, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xce, 0x87, 0x0b, - 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xce, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8, 0x17, - 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfe, 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, - 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0x04, 0x4d, 0x30, 0x4b, 0x02, 0x01, 0x01, 0x04, 0x20, - 0x0c, 0xf1, 0xad, 0x2f, 0x03, 0xf7, 0x91, 0x1b, 0xba, 0x03, 0xcf, 0x23, 0x37, 0xc8, 0xf2, 0xf7, - 0x36, 0xce, 0x65, 0xf1, 0x84, 0x2d, 0x7d, 0x9f, 0x5f, 0x9e, 0x21, 0xd9, 0x5e, 0x49, 0xbd, 0x23, - 0xa1, 0x24, 0x03, 0x22, 0x00, 0x03, 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, 0xd1, 0xcf, - 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, 0xd5, 0xf9, - 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16 - }; - static const unsigned char long_pub[] = { /* long public, explicit curve params */ - 0x30, 0x81, 0xf5, 0x30, 0x81, 0xae, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x30, - 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x01, 0x01, - 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, - 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04, 0x41, 0x04, 0x79, 0xbe, - 0x66, 0x7e, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xce, 0x87, 0x0b, 0x07, 0x02, 0x9b, - 0xfc, 0xdb, 0x2d, 0xce, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8, 0x17, 0x98, 0x48, 0x3a, - 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0e, 0x11, 0x08, 0xa8, 0xfd, 0x17, - 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10, 0xd4, 0xb8, 0x02, 0x21, - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xfe, 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, - 0x41, 0x02, 0x01, 0x01, 0x03, 0x42, 0x00, 0x04, 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, - 0xd1, 0xcf, 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, - 0xd5, 0xf9, 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16, 0x91, 0xbd, 0xb2, 0xb9, 0x1b, 0x40, 0x10, 0x5a, - 0xb7, 0x6c, 0x6e, 0x32, 0x5b, 0xf7, 0x63, 0x62, 0x94, 0x24, 0x24, 0xdb, 0xec, 0x3f, 0x8b, 0xe5, - 0x6e, 0x4b, 0x64, 0x37, 0x31, 0x24, 0x79, 0x4d - }; - static const unsigned char long_pubc[] = { /* compressed public, explicit curve params */ - 0x30, 0x81, 0xb5, 0x30, 0x81, 0x8e, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x30, - 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x01, 0x01, - 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, - 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04, 0x21, 0x02, 0x79, 0xbe, - 0x66, 0x7e, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xce, 0x87, 0x0b, 0x07, 0x02, 0x9b, - 0xfc, 0xdb, 0x2d, 0xce, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8, 0x17, 0x98, 0x02, 0x21, - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xfe, 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, - 0x41, 0x02, 0x01, 0x01, 0x03, 0x22, 0x00, 0x03, 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, - 0xd1, 0xcf, 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, - 0xd5, 0xf9, 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16 - }; - static const unsigned char short_pri[] = { /* private + long public, curve by OID */ - 0x30, 0x74, 0x02, 0x01, 0x01, 0x04, 0x20, 0x0c, 0xf1, 0xad, 0x2f, 0x03, 0xf7, 0x91, 0x1b, 0xba, - 0x03, 0xcf, 0x23, 0x37, 0xc8, 0xf2, 0xf7, 0x36, 0xce, 0x65, 0xf1, 0x84, 0x2d, 0x7d, 0x9f, 0x5f, - 0x9e, 0x21, 0xd9, 0x5e, 0x49, 0xbd, 0x23, 0xa0, 0x07, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x0a, - 0xa1, 0x44, 0x03, 0x42, 0x00, 0x04, 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, 0xd1, 0xcf, - 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, 0xd5, 0xf9, - 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16, 0x91, 0xbd, 0xb2, 0xb9, 0x1b, 0x40, 0x10, 0x5a, 0xb7, 0x6c, - 0x6e, 0x32, 0x5b, 0xf7, 0x63, 0x62, 0x94, 0x24, 0x24, 0xdb, 0xec, 0x3f, 0x8b, 0xe5, 0x6e, 0x4b, - 0x64, 0x37, 0x31, 0x24, 0x79, 0x4d - }; - static const unsigned char short_pri_pkcs8[] = { /* private + long public, curve by OID, PKCS8 */ - 0x30, 0x81, 0x84, 0x02, 0x01, 0x00, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, - 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x0a, 0x04, 0x6d, 0x30, 0x6b, 0x02, 0x01, 0x01, 0x04, - 0x20, 0x0c, 0xf1, 0xad, 0x2f, 0x03, 0xf7, 0x91, 0x1b, 0xba, 0x03, 0xcf, 0x23, 0x37, 0xc8, 0xf2, - 0xf7, 0x36, 0xce, 0x65, 0xf1, 0x84, 0x2d, 0x7d, 0x9f, 0x5f, 0x9e, 0x21, 0xd9, 0x5e, 0x49, 0xbd, - 0x23, 0xa1, 0x44, 0x03, 0x42, 0x00, 0x04, 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, 0xd1, - 0xcf, 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, 0xd5, - 0xf9, 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16, 0x91, 0xbd, 0xb2, 0xb9, 0x1b, 0x40, 0x10, 0x5a, 0xb7, - 0x6c, 0x6e, 0x32, 0x5b, 0xf7, 0x63, 0x62, 0x94, 0x24, 0x24, 0xdb, 0xec, 0x3f, 0x8b, 0xe5, 0x6e, - 0x4b, 0x64, 0x37, 0x31, 0x24, 0x79, 0x4d - }; - static const unsigned char short_pric[] = { /* private + compressed public, curve by OID */ - 0x30, 0x54, 0x02, 0x01, 0x01, 0x04, 0x20, 0x0c, 0xf1, 0xad, 0x2f, 0x03, 0xf7, 0x91, 0x1b, 0xba, - 0x03, 0xcf, 0x23, 0x37, 0xc8, 0xf2, 0xf7, 0x36, 0xce, 0x65, 0xf1, 0x84, 0x2d, 0x7d, 0x9f, 0x5f, - 0x9e, 0x21, 0xd9, 0x5e, 0x49, 0xbd, 0x23, 0xa0, 0x07, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x0a, - 0xa1, 0x24, 0x03, 0x22, 0x00, 0x03, 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, 0xd1, 0xcf, - 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, 0xd5, 0xf9, - 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16 - }; - static const unsigned char short_pric_pkcs8[] = { /* private + compressed public, curve by OID, PKCS8 */ - 0x30, 0x64, 0x02, 0x01, 0x00, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, - 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x0a, 0x04, 0x4d, 0x30, 0x4b, 0x02, 0x01, 0x01, 0x04, 0x20, - 0x0c, 0xf1, 0xad, 0x2f, 0x03, 0xf7, 0x91, 0x1b, 0xba, 0x03, 0xcf, 0x23, 0x37, 0xc8, 0xf2, 0xf7, - 0x36, 0xce, 0x65, 0xf1, 0x84, 0x2d, 0x7d, 0x9f, 0x5f, 0x9e, 0x21, 0xd9, 0x5e, 0x49, 0xbd, 0x23, - 0xa1, 0x24, 0x03, 0x22, 0x00, 0x03, 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, 0xd1, 0xcf, - 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, 0xd5, 0xf9, - 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16 - }; - static const unsigned char short_pub[] = { /* long public, curve by OID */ - 0x30, 0x56, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, - 0x81, 0x04, 0x00, 0x0a, 0x03, 0x42, 0x00, 0x04, 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, - 0xd1, 0xcf, 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, - 0xd5, 0xf9, 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16, 0x91, 0xbd, 0xb2, 0xb9, 0x1b, 0x40, 0x10, 0x5a, - 0xb7, 0x6c, 0x6e, 0x32, 0x5b, 0xf7, 0x63, 0x62, 0x94, 0x24, 0x24, 0xdb, 0xec, 0x3f, 0x8b, 0xe5, - 0x6e, 0x4b, 0x64, 0x37, 0x31, 0x24, 0x79, 0x4d - }; - static const unsigned char short_pubc[] = { /* compressed public, curve by OID */ - 0x30, 0x36, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, - 0x81, 0x04, 0x00, 0x0a, 0x03, 0x22, 0x00, 0x03, 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, - 0xd1, 0xcf, 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, - 0xd5, 0xf9, 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16 - }; - static const unsigned char raw_pri[] = { /* raw private key */ - 0x0c, 0xf1, 0xad, 0x2f, 0x03, 0xf7, 0x91, 0x1b, 0xba, 0x03, 0xcf, 0x23, 0x37, 0xc8, 0xf2, 0xf7, - 0x36, 0xce, 0x65, 0xf1, 0x84, 0x2d, 0x7d, 0x9f, 0x5f, 0x9e, 0x21, 0xd9, 0x5e, 0x49, 0xbd, 0x23 - }; - static const unsigned char raw_pub[] = { /* raw public key - long form */ - 0x04, 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, 0xd1, 0xcf, 0x12, 0xd0, 0x24, 0xaf, 0xba, - 0xb6, 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, 0xd5, 0xf9, 0x8d, 0x6c, 0x73, 0x9d, 0xc5, - 0x16, 0x91, 0xbd, 0xb2, 0xb9, 0x1b, 0x40, 0x10, 0x5a, 0xb7, 0x6c, 0x6e, 0x32, 0x5b, 0xf7, 0x63, - 0x62, 0x94, 0x24, 0x24, 0xdb, 0xec, 0x3f, 0x8b, 0xe5, 0x6e, 0x4b, 0x64, 0x37, 0x31, 0x24, 0x79, - 0x4d - }; - static const unsigned char raw_pubc[] = { /* raw public key - compressed form */ - 0x03, 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, 0xd1, 0xcf, 0x12, 0xd0, 0x24, 0xaf, 0xba, - 0xb6, 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, 0xd5, 0xf9, 0x8d, 0x6c, 0x73, 0x9d, 0xc5, - 0x16 - }; - static const unsigned char x509_cert_long[] = { /* X.509 cert, long pubkey, explicit curve params */ - 0x30, 0x82, 0x02, 0x13, 0x30, 0x82, 0x01, 0xba, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, - 0xaf, 0x14, 0xe3, 0x53, 0x36, 0x06, 0x79, 0x34, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, - 0x3d, 0x04, 0x03, 0x04, 0x30, 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, - 0x0c, 0x54, 0x65, 0x73, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x20, 0x45, 0x43, 0x30, 0x20, 0x17, - 0x0d, 0x31, 0x37, 0x31, 0x32, 0x33, 0x30, 0x32, 0x30, 0x33, 0x33, 0x34, 0x31, 0x5a, 0x18, 0x0f, - 0x33, 0x30, 0x31, 0x37, 0x30, 0x35, 0x30, 0x32, 0x32, 0x30, 0x33, 0x33, 0x34, 0x31, 0x5a, 0x30, - 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c, 0x54, 0x65, 0x73, 0x74, - 0x20, 0x43, 0x65, 0x72, 0x74, 0x20, 0x45, 0x43, 0x30, 0x81, 0xf5, 0x30, 0x81, 0xae, 0x06, 0x07, - 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, - 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, - 0x04, 0x01, 0x07, 0x04, 0x41, 0x04, 0x79, 0xbe, 0x66, 0x7e, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, - 0x62, 0x95, 0xce, 0x87, 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xce, 0x28, 0xd9, 0x59, 0xf2, - 0x81, 0x5b, 0x16, 0xf8, 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, - 0xfb, 0xfc, 0x0e, 0x11, 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, - 0xd0, 0x8f, 0xfb, 0x10, 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, - 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0x03, 0x42, 0x00, 0x04, - 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, 0xd1, 0xcf, 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, - 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, 0xd5, 0xf9, 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16, - 0x91, 0xbd, 0xb2, 0xb9, 0x1b, 0x40, 0x10, 0x5a, 0xb7, 0x6c, 0x6e, 0x32, 0x5b, 0xf7, 0x63, 0x62, - 0x94, 0x24, 0x24, 0xdb, 0xec, 0x3f, 0x8b, 0xe5, 0x6e, 0x4b, 0x64, 0x37, 0x31, 0x24, 0x79, 0x4d, - 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x66, - 0xc9, 0x90, 0x3c, 0x8a, 0x81, 0xa3, 0x1c, 0x20, 0x61, 0xd2, 0xf3, 0xf5, 0xae, 0xa8, 0x85, 0x70, - 0xf9, 0x1f, 0x2c, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, - 0x66, 0xc9, 0x90, 0x3c, 0x8a, 0x81, 0xa3, 0x1c, 0x20, 0x61, 0xd2, 0xf3, 0xf5, 0xae, 0xa8, 0x85, - 0x70, 0xf9, 0x1f, 0x2c, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, - 0x01, 0xff, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x04, 0x03, 0x47, - 0x00, 0x30, 0x44, 0x02, 0x1f, 0x2a, 0x62, 0x64, 0x05, 0x67, 0xb0, 0x2c, 0xa0, 0xa3, 0xb8, 0x61, - 0x4e, 0x87, 0x06, 0x69, 0xf2, 0xda, 0x78, 0xd6, 0x0e, 0x8d, 0x9b, 0xf1, 0x43, 0x5f, 0xf6, 0x40, - 0x9d, 0x9d, 0xbd, 0xce, 0x02, 0x21, 0x00, 0xe9, 0x6f, 0x79, 0xb4, 0x4a, 0x00, 0xf7, 0xfa, 0x81, - 0x25, 0x29, 0xec, 0x79, 0xb2, 0xfa, 0x86, 0xf8, 0x84, 0xd1, 0x78, 0xe7, 0xf8, 0xfd, 0x76, 0x2d, - 0x4f, 0xfe, 0x02, 0x72, 0xba, 0x6c, 0xca - }; - static const unsigned char x509_cert_longc[] = { /* X.509 cert, compressed pubkey, explicit curve params */ - 0x30, 0x82, 0x01, 0xd3, 0x30, 0x82, 0x01, 0x7a, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, - 0x90, 0x5b, 0x48, 0x32, 0x37, 0x4b, 0x72, 0x54, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, - 0x3d, 0x04, 0x03, 0x04, 0x30, 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, - 0x0c, 0x54, 0x65, 0x73, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x20, 0x45, 0x43, 0x30, 0x20, 0x17, - 0x0d, 0x31, 0x37, 0x31, 0x32, 0x33, 0x30, 0x32, 0x30, 0x33, 0x33, 0x34, 0x31, 0x5a, 0x18, 0x0f, - 0x33, 0x30, 0x31, 0x37, 0x30, 0x35, 0x30, 0x32, 0x32, 0x30, 0x33, 0x33, 0x34, 0x31, 0x5a, 0x30, - 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c, 0x54, 0x65, 0x73, 0x74, - 0x20, 0x43, 0x65, 0x72, 0x74, 0x20, 0x45, 0x43, 0x30, 0x81, 0xb5, 0x30, 0x81, 0x8e, 0x06, 0x07, - 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, - 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, - 0x04, 0x01, 0x07, 0x04, 0x21, 0x02, 0x79, 0xbe, 0x66, 0x7e, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, - 0x62, 0x95, 0xce, 0x87, 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xce, 0x28, 0xd9, 0x59, 0xf2, - 0x81, 0x5b, 0x16, 0xf8, 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, - 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0x03, 0x22, 0x00, 0x03, - 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, 0xd1, 0xcf, 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, - 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, 0xd5, 0xf9, 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16, - 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xca, - 0x2a, 0xa1, 0x12, 0x97, 0x96, 0x2c, 0x85, 0xd3, 0x1f, 0xb1, 0x34, 0x7c, 0x26, 0xe9, 0xd6, 0x49, - 0x9f, 0x98, 0xcf, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, - 0xca, 0x2a, 0xa1, 0x12, 0x97, 0x96, 0x2c, 0x85, 0xd3, 0x1f, 0xb1, 0x34, 0x7c, 0x26, 0xe9, 0xd6, - 0x49, 0x9f, 0x98, 0xcf, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, - 0x01, 0xff, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x04, 0x03, 0x47, - 0x00, 0x30, 0x44, 0x02, 0x20, 0x24, 0x7a, 0xc1, 0xb4, 0x7d, 0x1c, 0x3c, 0x23, 0xc6, 0xad, 0xea, - 0x04, 0x27, 0x27, 0x65, 0xb8, 0x72, 0x93, 0x46, 0xc9, 0xe9, 0x60, 0x8f, 0xca, 0x96, 0x30, 0x60, - 0xb3, 0x22, 0xf7, 0x3b, 0x01, 0x02, 0x20, 0x48, 0x30, 0x2a, 0x58, 0x18, 0x46, 0xdb, 0x50, 0x3e, - 0xad, 0xc3, 0xca, 0xcd, 0x6d, 0x83, 0xd4, 0xc3, 0xc4, 0xa4, 0x8f, 0x37, 0xc3, 0x1d, 0x83, 0x3c, - 0xd3, 0x1f, 0x8f, 0x38, 0x29, 0x75, 0x2c - }; - static const unsigned char x509_cert_short[] = { /* X.509 cert, long pubkey, curve by OID */ - 0x30, 0x82, 0x01, 0x74, 0x30, 0x82, 0x01, 0x1a, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, - 0xbd, 0x81, 0x04, 0x29, 0x43, 0x12, 0x79, 0xce, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, - 0x3d, 0x04, 0x03, 0x04, 0x30, 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, - 0x0c, 0x54, 0x65, 0x73, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x20, 0x45, 0x43, 0x30, 0x20, 0x17, - 0x0d, 0x31, 0x37, 0x31, 0x32, 0x33, 0x30, 0x32, 0x30, 0x33, 0x33, 0x34, 0x31, 0x5a, 0x18, 0x0f, - 0x33, 0x30, 0x31, 0x37, 0x30, 0x35, 0x30, 0x32, 0x32, 0x30, 0x33, 0x33, 0x34, 0x31, 0x5a, 0x30, - 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c, 0x54, 0x65, 0x73, 0x74, - 0x20, 0x43, 0x65, 0x72, 0x74, 0x20, 0x45, 0x43, 0x30, 0x56, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, - 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x0a, 0x03, 0x42, 0x00, 0x04, - 0x2a, 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, 0xd1, 0xcf, 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, - 0x7f, 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, 0xd5, 0xf9, 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16, - 0x91, 0xbd, 0xb2, 0xb9, 0x1b, 0x40, 0x10, 0x5a, 0xb7, 0x6c, 0x6e, 0x32, 0x5b, 0xf7, 0x63, 0x62, - 0x94, 0x24, 0x24, 0xdb, 0xec, 0x3f, 0x8b, 0xe5, 0x6e, 0x4b, 0x64, 0x37, 0x31, 0x24, 0x79, 0x4d, - 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x66, - 0xc9, 0x90, 0x3c, 0x8a, 0x81, 0xa3, 0x1c, 0x20, 0x61, 0xd2, 0xf3, 0xf5, 0xae, 0xa8, 0x85, 0x70, - 0xf9, 0x1f, 0x2c, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, - 0x66, 0xc9, 0x90, 0x3c, 0x8a, 0x81, 0xa3, 0x1c, 0x20, 0x61, 0xd2, 0xf3, 0xf5, 0xae, 0xa8, 0x85, - 0x70, 0xf9, 0x1f, 0x2c, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, - 0x01, 0xff, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x04, 0x03, 0x48, - 0x00, 0x30, 0x45, 0x02, 0x21, 0x00, 0x9b, 0x4e, 0xb2, 0x6a, 0xcc, 0xfa, 0x02, 0x69, 0x22, 0x6a, - 0x32, 0x9c, 0x0c, 0xaa, 0x4c, 0xdf, 0xbb, 0x9b, 0x22, 0xfb, 0xd6, 0xec, 0x5d, 0xf9, 0x87, 0x82, - 0xeb, 0x37, 0xb8, 0x32, 0x7c, 0xd6, 0x02, 0x20, 0x50, 0x8b, 0x9f, 0xc1, 0xa8, 0x4a, 0xff, 0x49, - 0x0d, 0x7e, 0x04, 0x2d, 0x93, 0x3e, 0xdb, 0x30, 0xbc, 0x93, 0xd1, 0x16, 0x1d, 0x99, 0xbd, 0x3f, - 0xfa, 0x2a, 0x6d, 0xe0, 0x2a, 0x83, 0x55, 0x5d - }; - static const unsigned char x509_cert_shortc[] = { /* X.509 cert, compressed pubkey, curve by OID */ - 0x30, 0x82, 0x01, 0x54, 0x30, 0x81, 0xfa, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0x85, - 0x45, 0x77, 0x75, 0x02, 0x95, 0xf7, 0x06, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, - 0x04, 0x03, 0x04, 0x30, 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c, - 0x54, 0x65, 0x73, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x20, 0x45, 0x43, 0x30, 0x20, 0x17, 0x0d, - 0x31, 0x37, 0x31, 0x32, 0x33, 0x30, 0x32, 0x30, 0x33, 0x33, 0x34, 0x31, 0x5a, 0x18, 0x0f, 0x33, - 0x30, 0x31, 0x37, 0x30, 0x35, 0x30, 0x32, 0x32, 0x30, 0x33, 0x33, 0x34, 0x31, 0x5a, 0x30, 0x17, - 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x20, - 0x43, 0x65, 0x72, 0x74, 0x20, 0x45, 0x43, 0x30, 0x36, 0x30, 0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, - 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x0a, 0x03, 0x22, 0x00, 0x03, 0x2a, - 0xf9, 0x0b, 0xda, 0xbe, 0x71, 0x66, 0x9e, 0xd1, 0xcf, 0x12, 0xd0, 0x24, 0xaf, 0xba, 0xb6, 0x7f, - 0xfb, 0x96, 0x27, 0x3e, 0x2f, 0xbd, 0x1e, 0xd5, 0xf9, 0x8d, 0x6c, 0x73, 0x9d, 0xc5, 0x16, 0xa3, - 0x50, 0x30, 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xca, 0x2a, - 0xa1, 0x12, 0x97, 0x96, 0x2c, 0x85, 0xd3, 0x1f, 0xb1, 0x34, 0x7c, 0x26, 0xe9, 0xd6, 0x49, 0x9f, - 0x98, 0xcf, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xca, - 0x2a, 0xa1, 0x12, 0x97, 0x96, 0x2c, 0x85, 0xd3, 0x1f, 0xb1, 0x34, 0x7c, 0x26, 0xe9, 0xd6, 0x49, - 0x9f, 0x98, 0xcf, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, - 0xff, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x04, 0x03, 0x49, 0x00, - 0x30, 0x46, 0x02, 0x21, 0x00, 0xa4, 0xf9, 0x41, 0x2b, 0x4b, 0x56, 0xa5, 0xd4, 0x8c, 0xdf, 0xb0, - 0x14, 0xe3, 0xe7, 0xed, 0xcc, 0xc4, 0x46, 0x42, 0x04, 0xec, 0x15, 0x9f, 0xe1, 0xb2, 0x00, 0x07, - 0x8c, 0xc1, 0xf9, 0x25, 0xed, 0x02, 0x21, 0x00, 0x81, 0xd8, 0xc4, 0x3a, 0x9f, 0xdf, 0xc1, 0x70, - 0x9d, 0x7b, 0x70, 0x3e, 0xf5, 0x7d, 0xa4, 0xfd, 0x3c, 0xc6, 0x49, 0x93, 0xd3, 0x5b, 0xef, 0xc9, - 0xae, 0x97, 0xaf, 0x64, 0x64, 0xf9, 0x69, 0xd8 - }; - password_ctx pw_ctx = { .callback = password_get }; - - if (ltc_mp.sqrtmod_prime == NULL) return CRYPT_NOP; /* we need compressed points which requires sqrtmod_prime */ - - DO(ecc_import_openssl(short_pub, sizeof(short_pub), &pub)); - DO(ecc_import_openssl(short_pri, sizeof(short_pri), &pri)); - DO(ecc_find_curve("SECP256K1", &cu)); - - /* import - raw keys */ - DO(ecc_set_curve(cu, &key)); - DO(ecc_set_key(raw_pri, sizeof(raw_pri), PK_PRIVATE, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); - DO(ecc_set_curve(cu, &key)); - DO(ecc_set_key(raw_pub, sizeof(raw_pub), PK_PUBLIC, &key)); - DO(ecc_key_cmp(PK_PUBLIC, &pub, &key)); - ecc_free(&key); - DO(ecc_set_curve(cu, &key)); - DO(ecc_set_key(raw_pubc, sizeof(raw_pubc), PK_PUBLIC, &key)); - DO(ecc_key_cmp(PK_PUBLIC, &pub, &key)); - ecc_free(&key); - - /* import - openssl compatible DER format */ - DO(ecc_import_openssl(ltc_ecc_long_pri_test_key, sizeof(ltc_ecc_long_pri_test_key), &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); - DO(ecc_import_openssl(long_pric, sizeof(long_pric), &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); - DO(ecc_import_openssl(long_pub, sizeof(long_pub), &key)); - DO(ecc_key_cmp(PK_PUBLIC, &pub, &key)); - ecc_free(&key); - DO(ecc_import_openssl(long_pubc, sizeof(long_pubc), &key)); - DO(ecc_key_cmp(PK_PUBLIC, &pub, &key)); - ecc_free(&key); - DO(ecc_import_openssl(short_pri, sizeof(short_pri), &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); - DO(ecc_import_openssl(short_pric, sizeof(short_pric), &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); - DO(ecc_import_openssl(short_pub, sizeof(short_pub), &key)); - DO(ecc_key_cmp(PK_PUBLIC, &pub, &key)); - ecc_free(&key); - DO(ecc_import_openssl(short_pubc, sizeof(short_pubc), &key)); - DO(ecc_key_cmp(PK_PUBLIC, &pub, &key)); - ecc_free(&key); - - /* import - private PKCS8 format - no password */ - DO(ecc_import_pkcs8(long_pri_pkcs8, sizeof(long_pri_pkcs8), NULL, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); - DO(ecc_import_pkcs8(long_pric_pkcs8, sizeof(long_pric_pkcs8), NULL, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); - DO(ecc_import_pkcs8(short_pri_pkcs8, sizeof(short_pri_pkcs8), NULL, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); - DO(ecc_import_pkcs8(short_pric_pkcs8, sizeof(short_pric_pkcs8), NULL, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); - - /* import - private PKCS8 format - password protected (PBES1 algorithms) */ -#ifdef LTC_MD2 - DO(ecc_import_pkcs8(long_pri_pkcs8_pbe_md2_des, sizeof(long_pri_pkcs8_pbe_md2_des), &pw_ctx, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); -#endif -#ifdef LTC_MD5 - DO(ecc_import_pkcs8(long_pri_pkcs8_pbe_md5_des, sizeof(long_pri_pkcs8_pbe_md5_des), &pw_ctx, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); -#endif -#ifdef LTC_SHA1 - DO(ecc_import_pkcs8(long_pri_pkcs8_pbe_sha1_des, sizeof(long_pri_pkcs8_pbe_sha1_des), &pw_ctx, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); -#endif -#if defined(LTC_RC2) && defined(LTC_MD2) - DO(ecc_import_pkcs8(long_pri_pkcs8_pbe_md2_rc2_64, sizeof(long_pri_pkcs8_pbe_md2_rc2_64), &pw_ctx, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); -#endif -#if defined(LTC_RC2) && defined(LTC_MD5) - DO(ecc_import_pkcs8(long_pri_pkcs8_pbe_md5_rc2_64, sizeof(long_pri_pkcs8_pbe_md5_rc2_64), &pw_ctx, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); -#endif -#if defined(LTC_RC2) && defined(LTC_SHA1) - DO(ecc_import_pkcs8(long_pri_pkcs8_pbe_sha1_rc2_64, sizeof(long_pri_pkcs8_pbe_sha1_rc2_64), &pw_ctx, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); -#endif - - /* import - private PKCS8 format - password protected (PBES2 algorithms) */ -#if defined(LTC_RC2) - DO(ecc_import_pkcs8(long_pri_pkcs8_pbkdf2_rc2_cbc, sizeof(long_pri_pkcs8_pbkdf2_rc2_cbc), &pw_ctx, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); -#endif -#if defined(LTC_DES) - DO(ecc_import_pkcs8(long_pri_pkcs8_pbkdf2_des_cbc, sizeof(long_pri_pkcs8_pbkdf2_des_cbc), &pw_ctx, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); -#endif -#if defined(LTC_DES) - DO(ecc_import_pkcs8(long_pri_pkcs8_pbkdf2_des_ede3_cbc, sizeof(long_pri_pkcs8_pbkdf2_des_ede3_cbc), &pw_ctx, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); -#endif -#if defined(LTC_SHA224) && defined(LTC_DES) - DO(ecc_import_pkcs8(long_pri_pkcs8_pbkdf2_sha224_des_ede3_cbc, sizeof(long_pri_pkcs8_pbkdf2_sha224_des_ede3_cbc), &pw_ctx, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); -#endif -#if defined(LTC_SHA256) && defined(LTC_DES) - DO(ecc_import_pkcs8(long_pri_pkcs8_pbkdf2_sha256_des_ede3_cbc, sizeof(long_pri_pkcs8_pbkdf2_sha256_des_ede3_cbc), &pw_ctx, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); -#endif -#if defined(LTC_SHA384) && defined(LTC_DES) - DO(ecc_import_pkcs8(long_pri_pkcs8_pbkdf2_sha384_des_ede3_cbc, sizeof(long_pri_pkcs8_pbkdf2_sha384_des_ede3_cbc), &pw_ctx, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); -#endif -#if defined(LTC_SHA512) && defined(LTC_DES) - DO(ecc_import_pkcs8(long_pri_pkcs8_pbkdf2_sha512_des_ede3_cbc, sizeof(long_pri_pkcs8_pbkdf2_sha512_des_ede3_cbc), &pw_ctx, &key)); - DO(ecc_key_cmp(PK_PRIVATE, &pri, &key)); - ecc_free(&key); -#endif - - /* import - X.509 EC certificates */ - DO(ecc_import_x509(x509_cert_long, sizeof(x509_cert_long), &key)); - DO(ecc_key_cmp(PK_PUBLIC, &pub, &key)); - ecc_free(&key); - DO(ecc_import_x509(x509_cert_longc, sizeof(x509_cert_longc), &key)); - DO(ecc_key_cmp(PK_PUBLIC, &pub, &key)); - ecc_free(&key); - DO(ecc_import_x509(x509_cert_short, sizeof(x509_cert_short), &key)); - DO(ecc_key_cmp(PK_PUBLIC, &pub, &key)); - ecc_free(&key); - DO(ecc_import_x509(x509_cert_shortc, sizeof(x509_cert_shortc), &key)); - DO(ecc_key_cmp(PK_PUBLIC, &pub, &key)); - ecc_free(&key); - - /* export - openssl compatible DER format */ - outlen = sizeof(out); - DO(ecc_export_openssl(out, &outlen, PK_PRIVATE, &pri)); - COMPARE_TESTVECTOR(out, outlen, ltc_ecc_long_pri_test_key, sizeof(ltc_ecc_long_pri_test_key), "e-ltc_ecc_long_pri_test_key", 0); - outlen = sizeof(out); - DO(ecc_export_openssl(out, &outlen, PK_PRIVATE|PK_COMPRESSED, &pri)); - COMPARE_TESTVECTOR(out, outlen, long_pric, sizeof(long_pric), "e-long_pric", 0); - outlen = sizeof(out); - DO(ecc_export_openssl(out, &outlen, PK_PUBLIC, &pub)); - COMPARE_TESTVECTOR(out, outlen, long_pub, sizeof(long_pub), "e-long_pub", 0); - outlen = sizeof(out); - DO(ecc_export_openssl(out, &outlen, PK_PUBLIC|PK_COMPRESSED, &pub)); - COMPARE_TESTVECTOR(out, outlen, long_pubc, sizeof(long_pubc), "e-long_pubc", 0); - outlen = sizeof(out); - DO(ecc_export_openssl(out, &outlen, PK_PRIVATE|PK_CURVEOID, &pri)); - COMPARE_TESTVECTOR(out, outlen, short_pri, sizeof(short_pri), "e-short_pri", 0); - outlen = sizeof(out); - DO(ecc_export_openssl(out, &outlen, PK_PRIVATE|PK_CURVEOID|PK_COMPRESSED, &pri)); - COMPARE_TESTVECTOR(out, outlen, short_pric, sizeof(short_pric), "e-short_pric", 0); - outlen = sizeof(out); - DO(ecc_export_openssl(out, &outlen, PK_PUBLIC|PK_CURVEOID, &pub)); - COMPARE_TESTVECTOR(out, outlen, short_pub, sizeof(short_pub), "e-short_pub", 0); - outlen = sizeof(out); - DO(ecc_export_openssl(out, &outlen, PK_PUBLIC|PK_CURVEOID|PK_COMPRESSED, &pub)); - COMPARE_TESTVECTOR(out, outlen, short_pubc, sizeof(short_pubc), "e-short_pubc", 0); - - /* export - raw keys */ - outlen = sizeof(out); - DO(ecc_get_key(out, &outlen, PK_PRIVATE, &pri)); - COMPARE_TESTVECTOR(out, outlen, raw_pri, sizeof(raw_pri), "e-raw_pri", 0); - outlen = sizeof(out); - DO(ecc_get_key(out, &outlen, PK_PUBLIC, &pub)); - COMPARE_TESTVECTOR(out, outlen, raw_pub, sizeof(raw_pub), "e-raw_pub", 0); - outlen = sizeof(out); - DO(ecc_get_key(out, &outlen, PK_PUBLIC|PK_COMPRESSED, &pub)); - COMPARE_TESTVECTOR(out, outlen, raw_pubc, sizeof(raw_pubc), "e-raw_pubc", 0); - - ecc_free(&pri); - ecc_free(&pub); - return CRYPT_OK; -} - -#ifdef LTC_ECC_SHAMIR -static int s_ecc_test_ethereum(void) -{ -#ifdef LTC_ECC_SECP256K1 - int stat; - const ltc_ecc_curve* dp; - ecc_key key, reckey; - unsigned char buf[128]; - unsigned long len; - unsigned char data16[16] = { 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1 }; - ltc_ecc_sig_opts sig_opts = { - .type = LTC_ECCSIG_ETH27, - .prng = &yarrow_prng, - .wprng = find_prng ("yarrow"), - }; - - DO(ecc_find_curve("SECP256K1", &dp)); - - DO(ecc_make_key_ex(&yarrow_prng, find_prng ("yarrow"), &key, dp)); - - /* test Ethereum signature */ - len = sizeof(buf); - DO(ecc_sign_hash_v2(data16, 16, buf, &len, &sig_opts, &key)); - stat = 0; - DO(ecc_verify_hash_v2(buf, len, data16, 16, &sig_opts, &stat, &key)); - if (stat != 1) return CRYPT_FAIL_TESTVECTOR; - - /* XXX-FIXME: TFM does not support sqrtmod_prime */ - if (strcmp(ltc_mp.name, "TomsFastMath") != 0) { - DO(ecc_set_curve(dp, &reckey)); - DO(ecc_recover_key(buf, len, data16, 16, &sig_opts, &reckey)); - DO(ecc_key_cmp(PK_PUBLIC, &key, &reckey)); - - /* cleanup */ - ecc_free(&reckey); - } - /* cleanup */ - ecc_free(&key); - return CRYPT_OK; -#else - return CRYPT_NOP; -#endif -} - -static int s_ecc_test_recovery(void) -{ - int i, stat; - const ltc_ecc_curve* dp; - ecc_key key, privkey, pubkey, reckey; - unsigned char buf[1000]; - unsigned long len; - unsigned char data16[16] = { 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1 }; - unsigned char eth_hash[] = { /* Keccak-256 hash of "Hello World" */ - 0x59, 0x2f, 0xa7, 0x43, 0x88, 0x9f, 0xc7, 0xf9, 0x2a, 0xc2, 0xa3, 0x7b, 0xb1, 0xf5, 0xba, 0x1d, - 0xaf, 0x2a, 0x5c, 0x84, 0x74, 0x1c, 0xa0, 0xe0, 0x06, 0x1d, 0x24, 0x3a, 0x2e, 0x67, 0x07, 0xba - }; - unsigned char eth_pubkey[] = { /* Public part of randomly-generated key pair */ - 0x04, - 0xc6, 0x99, 0x5f, 0xdc, 0xf4, 0xf2, 0xda, 0x6e, 0x79, 0xe0, 0x47, 0x12, 0xd3, 0xbe, 0x22, 0xe7, - 0x65, 0xc6, 0xa3, 0x32, 0x89, 0x1b, 0x34, 0xba, 0xc1, 0xb7, 0x01, 0x83, 0xed, 0xdd, 0xf1, 0xcc, - 0xbf, 0x20, 0xdd, 0xcd, 0x05, 0x4e, 0x49, 0xc8, 0xcb, 0x66, 0x6c, 0xb7, 0x71, 0x2f, 0x7e, 0xc1, - 0xd6, 0x1a, 0x4a, 0x42, 0x3d, 0xe5, 0xc2, 0x8d, 0x74, 0x03, 0x81, 0xe7, 0xea, 0xc5, 0x3c, 0x10 - }; - unsigned char eth_sig[] = { /* Signature of eth_hash to be verified against eth_pubkey */ - 0xbd, 0x6d, 0xbb, 0xbe, 0x2d, 0xe7, 0x1d, 0x00, 0xae, 0x18, 0x57, 0x12, 0x1d, 0x63, 0xa5, 0x1b, - 0x0b, 0x42, 0x71, 0xa2, 0x80, 0x49, 0xe0, 0x5c, 0xfa, 0xc8, 0x1a, 0x0d, 0x8a, 0x88, 0x67, 0x56, - 0xf6, 0x67, 0x1b, 0x41, 0x46, 0x09, 0x4e, 0xd0, 0x44, 0x25, 0x18, 0xfd, 0xf4, 0xcd, 0x62, 0xa3, - 0xb7, 0x3c, 0x97, 0x55, 0xfa, 0x69, 0xf8, 0xef, 0xe9, 0xcf, 0x12, 0xaf, 0x48, 0x25, 0xe3, 0xe0, - 0x1b - }; - ltc_ecc_sig_opts sig_opts = { - .prng = &yarrow_prng, - .wprng = find_prng ("yarrow"), - .enable_recovery_id = 1, - }; - - /* XXX-FIXME: TFM does not support sqrtmod_prime */ - if (strcmp(ltc_mp.name, "TomsFastMath") == 0) return CRYPT_NOP; - -#ifdef LTC_ECC_SECP256K1 - DO(ecc_find_curve("SECP256K1", &dp)); - - DO(ecc_set_curve(dp, &pubkey)); - DO(ecc_set_key(eth_pubkey, sizeof(eth_pubkey), PK_PUBLIC, &pubkey)); - - DO(ecc_set_curve(dp, &reckey)); - sig_opts.recovery_id = 0; - sig_opts.type = LTC_ECCSIG_RFC7518; - DO(ecc_recover_key(eth_sig, sizeof(eth_sig)-1, eth_hash, sizeof(eth_hash), &sig_opts, &reckey)); - DO(ecc_key_cmp(PK_PUBLIC, &pubkey, &reckey)); - ecc_free(&reckey); - - DO(ecc_set_curve(dp, &reckey)); - sig_opts.recovery_id = -1; - sig_opts.type = LTC_ECCSIG_ETH27; - DO(ecc_recover_key(eth_sig, sizeof(eth_sig), eth_hash, sizeof(eth_hash), &sig_opts, &reckey)); - DO(ecc_key_cmp(PK_PUBLIC, &pubkey, &reckey)); - ecc_free(&reckey); - - ecc_free(&pubkey); -#endif - - sig_opts.type = LTC_ECCSIG_RFC7518; - for (i = 0; i < (int)LTC_ARRAY_SIZE(curvenames); i++) { - DO(ecc_find_curve(curvenames[i], &dp)); - - /* generate new key */ - DO(ecc_set_curve(dp, &key)); - DO(ecc_generate_key(&yarrow_prng, find_prng ("yarrow"), &key)); - - /* export private key */ - len = sizeof(buf); - DO(ecc_get_key(buf, &len, PK_PRIVATE, &key)); - ecc_free(&key); - - /* load exported private key */ - DO(ecc_set_curve(dp, &privkey)); - DO(ecc_set_key(buf, len, PK_PRIVATE, &privkey)); - - /* export long public key */ - len = sizeof(buf); - DO(ecc_get_key(buf, &len, PK_PUBLIC, &privkey)); - if (len != 1 + 2 * (unsigned)ecc_get_size(&privkey)) return CRYPT_FAIL_TESTVECTOR; - - /* load exported public key */ - DO(ecc_set_curve(dp, &pubkey)); - DO(ecc_set_key(buf, len, PK_PUBLIC, &pubkey)); - - /* test signature */ - len = sizeof(buf); - sig_opts.recovery_id = 0; - DO(ecc_sign_hash_v2(data16, 16, buf, &len, &sig_opts, &privkey)); - - /* test verification */ - stat = 0; - DO(ecc_verify_hash_v2(buf, len, data16, 16, &sig_opts, &stat, &pubkey)); - if (stat != 1) return CRYPT_FAIL_TESTVECTOR; - - /* test recovery */ - DO(ecc_set_curve(dp, &reckey)); - stat = ecc_recover_key(buf, len, data16, 16, &sig_opts, &reckey); - if (stat != CRYPT_OK) return CRYPT_FAIL_TESTVECTOR; - DO(ecc_key_cmp(PK_PUBLIC, &pubkey, &reckey)); - - /* cleanup */ - ecc_free(&reckey); - ecc_free(&privkey); - ecc_free(&pubkey); - } - - return CRYPT_OK; -} -#endif - -#ifdef LTC_ECC_SECP112R2 -/* https://github.com/libtom/libtomcrypt/issues/764 - small-subgroup attack regression test - SECP112R2 has cofactor 4, so the curve contains a subgroup of order 4 outside the prime-order generator subgroup - A point in that small subgroup is on the curve so Test 2 in ltc_ecc_verify_key passes. However n * P != O, so Test 3 must reject it - The point below has order 4: n * P gives -P, not the point at infinity. Therefore, importing it as a public key must fail -*/ -static int s_ecc_issue764(void) -{ - const ltc_ecc_curve *cu; - ecc_key key, priv; - int err; - unsigned char shared[14]; - unsigned long sharedlen; - const unsigned char pub[] = { - 0x04, /* uncompressed */ - 0xB1,0xFD,0x8D,0xE1,0x27,0xD4,0x65,0x6B,0x57,0x3E,0xB5,0x13,0x98,0x4C, /* x = B1FD8DE127D4656B573EB513984C */ - 0x2F,0x8C,0xD8,0x80,0x3D,0xB9,0x62,0x0F,0xA3,0xA6,0x0E,0x5B,0x31,0xE2 /* y = 2F8CD8803DB9620FA3A60E5B31E2 */ - }; - DO(ecc_find_curve("SECP112R2", &cu)); - - /* ecc_set_key must reject the malicious public key (verify_key Test 3) */ - DO(ecc_set_curve(cu, &key)); - err = ecc_set_key(pub, sizeof(pub), PK_PUBLIC, &key); /* must fail */ - if (err == CRYPT_OK) { - ecc_free(&key); - return CRYPT_FAIL_TESTVECTOR; - } - - /* ecc_shared_secret must reject the malicious peer key even when the caller bypassed ecc_set_key by directly loading the pubkey - priv.k = 4 (a multiple of the malicious point's order 4) so that k * pubkey is deterministically the point at infinity - */ - DO(ecc_set_curve(cu, &priv)); - DO(ltc_mp_set(priv.k, 4)); - priv.type = PK_PRIVATE; - - /* load the malicious point directly to simulate an attacker-supplied pubkey reaching ecc_shared_secret without import checks */ - DO(ecc_set_curve(cu, &key)); - DO(ltc_mp_read_unsigned_bin(key.pubkey.x, (unsigned char *)pub + 1, 14)); - DO(ltc_mp_read_unsigned_bin(key.pubkey.y, (unsigned char *)pub + 15, 14)); - DO(ltc_mp_set(key.pubkey.z, 1)); - key.type = PK_PUBLIC; - - sharedlen = sizeof(shared); - err = ecc_shared_secret(&priv, &key, shared, &sharedlen); /* must fail */ - ecc_free(&priv); - ecc_free(&key); - if (err == CRYPT_OK) { - return CRYPT_FAIL_TESTVECTOR; - } - return CRYPT_OK; -} -#endif - -int ecc_test(void) -{ - if (ltc_mp.name == NULL) return CRYPT_NOP; - - DO(s_ecc_wycheproof_p256_edgecase_dbl()); -#if defined(LTC_PEM) && defined(LTC_DER) - DO(s_ecc_wycheproof_p256_pem_edgecase_dbl()); - DO(s_ecc_wycheproof_p256_pem_invalid_explicit()); -#endif -#if defined(LTC_DER) && defined(LTC_ECC_BRAINPOOLP224R1) && defined(LTC_ECC_BRAINPOOLP224T1) - DO(s_ecc_wycheproof_bp224_wrong_curve()); -#endif - DO(s_ecc_issue446()); -#if defined(LTC_SHA3) && defined(LTC_DER) - DO(s_ecc_shake_wycheproof_test()); -#endif - DO(s_ecc_rfc6979()); - DO(s_ecc_old_api()); /* up to 1.18 */ - DO(s_ecc_new_api()); - DO(s_ecc_import_export()); - DO(s_ecc_test_mp()); - DO(s_ecc_issue108()); - DO(s_ecc_issue443_447()); - DO(s_ecc_issue630()); - DO(s_ecc_issue116()); -#ifdef LTC_ECC_SECP112R2 - DO(s_ecc_issue764()); -#endif -#ifdef LTC_ECC_SHAMIR - DO(s_ecc_test_shamir()); - DO(s_ecc_test_recovery()); - DO(s_ecc_test_ethereum()); -#endif - return CRYPT_OK; -} -#else -LTC_NOP_TEST(ecc_test) -#endif diff --git a/tests/ed25519_test.c b/tests/ed25519_test.c deleted file mode 100644 index 7f935a0c..00000000 --- a/tests/ed25519_test.c +++ /dev/null @@ -1,467 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_test.h" - -/** - @file ed25519_test.c - Ed25519 tests, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -static void xor_shuffle(unsigned char *buf, unsigned long size, unsigned char change) -{ - unsigned long i; - for(i = 0; i < size; i++) - buf[i] ^= change; -} - -static int password_get(void **p, unsigned long *l, void *u) -{ - LTC_UNUSED_PARAM(u); - *p = strdup("123456"); - *l = 6; - return 0; -} - -static int s_rfc_8410_10_test(void) -{ - const struct { - const char* b64; - int type; - } rfc_8410_10[] = { - /* RFC 8410 - 10.1. Example Ed25519 Public Key */ - { "MCowBQYDK2VwAyEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE=", PK_PUBLIC | PK_STD }, - /* Okay this is not from RFC 8410, but a custom generated certificate with Ed25519 Public Key. - * Since RFC 8410 has no testvector for that case, one had to be created. - * ( openssl req -verbose -new -x509 -subj "/CN=Public domain ed25519 self-signed certificate" -days 36525 -key <( openssl genpkey -algorithm ed25519 2>/dev/null | tee /dev/fd/3) | openssl x509 ) 3>&1 - * Thx @vdukhovni - */ - { "MIIBhDCCATagAwIBAgIUHDa8kJUZeCuIhknPJ/wDeBW6gZgwBQYDK2VwMDgxNjA0" - "BgNVBAMMLVB1YmxpYyBkb21haW4gZWQyNTUxOSBzZWxmLXNpZ25lZCBjZXJ0aWZp" - "Y2F0ZTAgFw0xOTA1MjMyMTAxMTZaGA8yMTE5MDUyNDIxMDExNlowODE2MDQGA1UE" - "AwwtUHVibGljIGRvbWFpbiBlZDI1NTE5IHNlbGYtc2lnbmVkIGNlcnRpZmljYXRl" - "MCowBQYDK2VwAyEAUEiKvHT0KHXOtNjIhaImokxbiog+Ki6lcgce05tf9UKjUDBO" - "MB0GA1UdDgQWBBS3fmpWaPK2fNpblEmg4tG4ZHO2BDAfBgNVHSMEGDAWgBS3fmpW" - "aPK2fNpblEmg4tG4ZHO2BDAMBgNVHRMEBTADAQH/MAUGAytlcANBADOnwkj8etmx" - "mTaXUP29RaenxpN8dQoQ4wnnIJwxQxTcVWOt2PlUxCFoB9gs0+YZOzhXnQg4hfqk" - "t/HPExwoZQg=", -2 }, - /* RFC 8410 - 10.3. Examples of Ed25519 Private Key */ - { "MC4CAQAwBQYDK2VwBCIEINTuctv5E1hK1bbY8fdp+K06/nwoy/HU++CXqI9EdVhC", PK_PRIVATE | PK_STD }, - /* RFC 8410 - 10.3. Examples of Ed25519 Private Key with attribute */ - { "MHICAQEwBQYDK2VwBCIEINTuctv5E1hK1bbY8fdp+K06/nwoy/HU++CXqI9EdVhC" - "oB8wHQYKKoZIhvcNAQkJFDEPDA1DdXJkbGUgQ2hhaXJzgSEAGb9ECWmEzf6FQbrB" - "Z9w7lshQhqowtrbLDFw4rXAxZuE=", -1 }, - /* Another self-created testvector. - * `openssl genpkey -algorithm ed25519 -pass stdin -aes128` - */ - { "MIGbMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAiFflnrBOdwjwICCAAw" - "DAYIKoZIhvcNAgkFADAdBglghkgBZQMEAQIEEMzFYoqiT6gxwFx2EA55MUYEQFD1" - "ZLxPNhm4YAsMZaxu5qpLjiZbkWsTHxURb6WhSW8GAbNbTwxeOaA02sUhJg8rx44/" - "N9PzN2QGzIQ1Yv/vHqQ=", -1 }, - }; - unsigned n; - curve25519_key key; - unsigned char buf[1024]; - char tmp[512]; - unsigned long buflen, tmplen; - password_ctx pw_ctx = { .callback = password_get }; - for (n = 0; n < LTC_ARRAY_SIZE(rfc_8410_10); ++n) { - buflen = sizeof(buf); - DO(base64_decode(rfc_8410_10[n].b64, XSTRLEN(rfc_8410_10[n].b64), buf, &buflen)); - switch (n) { - case 0: - DO(ed25519_import(buf, buflen, &key)); - break; - case 1: - DO(ed25519_import_x509(buf, buflen, &key)); - break; - case 2: - case 3: - DO(ed25519_import_pkcs8(buf, buflen, NULL, &key)); - break; - case 4: - DO(ed25519_import_pkcs8(buf, buflen, &pw_ctx, &key)); - break; - default: - return CRYPT_FAIL_TESTVECTOR; - } - zeromem(buf, sizeof(buf)); - if (rfc_8410_10[n].type > 0) { - buflen = sizeof(buf); - DO(ed25519_export(buf, &buflen, rfc_8410_10[n].type, &key)); - tmplen = sizeof(tmp); - DO(base64_encode(buf, buflen, tmp, &tmplen)); - COMPARE_TESTVECTOR(tmp, tmplen, rfc_8410_10[n].b64, XSTRLEN(rfc_8410_10[n].b64), "Ed25519 export-import", n); - } - } - return CRYPT_OK; -} - -typedef struct { - const char* secret_key; - const char* public_key; - const char* message; - const char* signature; - const char* context; -} rfc_8032_7_t; - -static int s_rfc_8032_7_1_test(void) -{ - const rfc_8032_7_t rfc_8032_7_1[] = { - { - /* SECRET KEY */ - "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60", - /* PUBLIC KEY */ - "d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a", - /* MESSAGE (length 0 bytes) */ - "", - /* SIGNATURE */ - "e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e06522490155" - "5fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b", - /* CONTEXT */ - NULL - }, - { - /* SECRET KEY */ - "4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb", - /* PUBLIC KEY */ - "3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c", - /* MESSAGE (length 1 byte) */ - "72", - /* SIGNATURE */ - "92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da" - "085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00", - /* CONTEXT */ - NULL - }, - { - /* SECRET KEY */ - "c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7", - /* PUBLIC KEY */ - "fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025", - /* MESSAGE (length 2 bytes) */ - "af82", - /* SIGNATURE */ - "6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac" - "18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a", - /* CONTEXT */ - NULL - }, - { - /* SECRET KEY */ - "f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5", - /* PUBLIC KEY */ - "278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e", - /* MESSAGE (length 1023 bytes) */ - "08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98" - "fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d8" - "79de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d" - "658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc" - "1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4fe" - "ba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e" - "06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbef" - "efd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7" - "aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed1" - "85ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2" - "d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24" - "554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f270" - "88d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc" - "2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b07" - "07e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128ba" - "b27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51a" - "ddd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429e" - "c96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb7" - "51fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c" - "42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8" - "ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34df" - "f7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08" - "d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649" - "de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e4" - "88acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a3" - "2ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e" - "6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5f" - "b93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b5" - "0d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1" - "369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380d" - "b2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c" - "0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0", - /* SIGNATURE */ - "0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350" - "aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03", - /* CONTEXT */ - NULL - }, - { - /* SECRET KEY */ - "833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42", - /* PUBLIC KEY */ - "ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf", - /* MESSAGE (length 64 bytes) */ - "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" - "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f", - /* SIGNATURE */ - "dc2a4459e7369633a52b1bf277839a00201009a3efbf3ecb69bea2186c26b589" - "09351fc9ac90b3ecfdfbc7c66431e0303dca179c138ac17ad9bef1177331a704", - /* CONTEXT */ - NULL - } - }; - unsigned int n; - unsigned long mlen, slen, plen, siglen, buflen; - unsigned char msg[1024], sec[32], pub[32], sig[64], buf[64]; - curve25519_key key, key2; - int ret; - const int should = 1; - for (n = 0; n < LTC_ARRAY_SIZE(rfc_8032_7_1); ++n) { - slen = sizeof(sec); - DO(base16_decode(rfc_8032_7_1[n].secret_key, XSTRLEN(rfc_8032_7_1[n].secret_key), sec, &slen)); - plen = sizeof(pub); - DO(base16_decode(rfc_8032_7_1[n].public_key, XSTRLEN(rfc_8032_7_1[n].public_key), pub, &plen)); - mlen = sizeof(msg); - DO(base16_decode(rfc_8032_7_1[n].message, XSTRLEN(rfc_8032_7_1[n].message), msg, &mlen)); - siglen = sizeof(sig); - DO(base16_decode(rfc_8032_7_1[n].signature, XSTRLEN(rfc_8032_7_1[n].signature), sig, &siglen)); - DO(ed25519_import_raw(sec, slen, PK_PRIVATE, &key)); - buflen = sizeof(buf); - DO(ed25519_sign(msg, mlen, buf, &buflen, &key)); - COMPARE_TESTVECTOR(buf, buflen, sig, siglen, "Ed25519 RFC8032 7.1 - sign", n); - DO(ed25519_verify(msg, mlen, sig, siglen, &ret, &key)); - COMPARE_TESTVECTOR(&ret, sizeof(ret), &should, sizeof(should), "Ed25519 RFC8032 7.1 - verify w/ privkey", n); - - xor_shuffle(sig, siglen, 0x8u); - DO( ed25519_verify(msg, mlen, sig, siglen, &ret, &key)); - ENSUREX(ret != 1, "ed25519_verify is expected to fail on the modified signature"); - xor_shuffle(msg, mlen, 0xfu); - DO( ed25519_verify(msg, mlen, sig, siglen, &ret, &key)); - ENSUREX(ret != 1, "ed25519_verify is expected to fail on the modified message"); - - plen = sizeof(pub); - DO(base16_decode(rfc_8032_7_1[n].public_key, XSTRLEN(rfc_8032_7_1[n].public_key), pub, &plen)); - mlen = sizeof(msg); - DO(base16_decode(rfc_8032_7_1[n].message, XSTRLEN(rfc_8032_7_1[n].message), msg, &mlen)); - siglen = sizeof(sig); - DO(base16_decode(rfc_8032_7_1[n].signature, XSTRLEN(rfc_8032_7_1[n].signature), sig, &siglen)); - DO(ed25519_import_raw(pub, plen, PK_PUBLIC, &key2)); - DO(ed25519_verify(msg, mlen, sig, siglen, &ret, &key2)); - COMPARE_TESTVECTOR(&ret, sizeof(ret), &should, sizeof(should), "Ed25519 RFC8032 7.1 - verify w/ pubkey", n); - - zeromem(&key, sizeof(key)); - zeromem(&key2, sizeof(key2)); - } - return CRYPT_OK; -} - -static int s_rfc_8032_7_2_test(void) -{ - const rfc_8032_7_t rfc_8032_7_2[] = { - { - /* SECRET KEY */ - "0305334e381af78f141cb666f6199f57bc3495335a256a95bd2a55bf546663f6", - /* PUBLIC KEY */ - "dfc9425e4f968f7f0c29f0259cf5f9aed6851c2bb4ad8bfb860cfee0ab248292", - /* MESSAGE (length 16 bytes) */ - "f726936d19c800494e3fdaff20b276a8", - /* SIGNATURE */ - "55a4cc2f70a54e04288c5f4cd1e45a7bb520b36292911876cada7323198dd87a" - "8b36950b95130022907a7fb7c4e9b2d5f6cca685a587b4b21f4b888e4e7edb0d", - /* CONTEXT */ - "666f6f", - }, - { - /* SECRET KEY */ - "0305334e381af78f141cb666f6199f57bc3495335a256a95bd2a55bf546663f6", - /* PUBLIC KEY */ - "dfc9425e4f968f7f0c29f0259cf5f9aed6851c2bb4ad8bfb860cfee0ab248292", - /* MESSAGE (length 16 bytes) */ - "f726936d19c800494e3fdaff20b276a8", - /* SIGNATURE */ - "fc60d5872fc46b3aa69f8b5b4351d5808f92bcc044606db097abab6dbcb1aee3" - "216c48e8b3b66431b5b186d1d28f8ee15a5ca2df6668346291c2043d4eb3e90d", - /* CONTEXT */ - "626172", - }, - { - /* SECRET KEY */ - "0305334e381af78f141cb666f6199f57bc3495335a256a95bd2a55bf546663f6", - /* PUBLIC KEY */ - "dfc9425e4f968f7f0c29f0259cf5f9aed6851c2bb4ad8bfb860cfee0ab248292", - /* MESSAGE (length 16 bytes) */ - "508e9e6882b979fea900f62adceaca35", - /* SIGNATURE */ - "8b70c1cc8310e1de20ac53ce28ae6e7207f33c3295e03bb5c0732a1d20dc6490" - "8922a8b052cf99b7c4fe107a5abb5b2c4085ae75890d02df26269d8945f84b0b", - /* CONTEXT */ - "666f6f", - }, - { - /* SECRET KEY */ - "ab9c2853ce297ddab85c993b3ae14bcad39b2c682beabc27d6d4eb20711d6560", - /* PUBLIC KEY */ - "0f1d1274943b91415889152e893d80e93275a1fc0b65fd71b4b0dda10ad7d772", - /* MESSAGE (length 16 bytes) */ - "f726936d19c800494e3fdaff20b276a8", - /* SIGNATURE */ - "21655b5f1aa965996b3f97b3c849eafba922a0a62992f73b3d1b73106a84ad85" - "e9b86a7b6005ea868337ff2d20a7f5fbd4cd10b0be49a68da2b2e0dc0ad8960f", - /* CONTEXT */ - "666f6f", - } - }; - - unsigned int n; - unsigned long mlen, slen, plen, siglen, buflen, ctxlen; - unsigned char msg[1024], sec[32], pub[32], sig[64], buf[64], ctx[64]; - curve25519_key key, key2; - int ret; - const int should = 1; - - for (n = 0; n < LTC_ARRAY_SIZE(rfc_8032_7_2); ++n) { - slen = sizeof(sec); - DO(base16_decode(rfc_8032_7_2[n].secret_key, XSTRLEN(rfc_8032_7_2[n].secret_key), sec, &slen)); - plen = sizeof(pub); - DO(base16_decode(rfc_8032_7_2[n].public_key, XSTRLEN(rfc_8032_7_2[n].public_key), pub, &plen)); - mlen = sizeof(msg); - DO(base16_decode(rfc_8032_7_2[n].message, XSTRLEN(rfc_8032_7_2[n].message), msg, &mlen)); - siglen = sizeof(sig); - DO(base16_decode(rfc_8032_7_2[n].signature, XSTRLEN(rfc_8032_7_2[n].signature), sig, &siglen)); - ctxlen = sizeof(ctx); - DO(base16_decode(rfc_8032_7_2[n].context, XSTRLEN(rfc_8032_7_2[n].context), ctx, &ctxlen)); - buflen = sizeof(buf); - - DO(ed25519_import_raw(sec, slen, PK_PRIVATE, &key)); - DO(ed25519ctx_sign(msg, mlen, buf, &buflen, ctx, ctxlen, &key)); - COMPARE_TESTVECTOR(buf, buflen, sig, siglen, "Ed25519 RFC8032 7.2 - sign", n); - DO(ed25519ctx_verify(msg, mlen, buf, buflen, ctx, ctxlen, &ret, &key)); - ENSUREX(ret == should, "Ed25519 RFC8032 7.2 - verify w/ privkey"); - - DO(ed25519_import_raw(pub, plen, PK_PUBLIC, &key2)); - DO(ed25519ctx_verify(msg, mlen, sig, siglen, ctx, ctxlen, &ret, &key2)); - ENSUREX(ret == should, "Ed25519 RFC8032 7.2 - verify w/ pubkey"); - - xor_shuffle(buf, buflen, 0x4u); - DO(ed25519ctx_verify(msg, mlen, buf, buflen, ctx, ctxlen, &ret, &key)); - ENSUREX(ret != 1, "ed25519ctx_verify is expected to fail on the modified signature"); - xor_shuffle(msg, mlen, 0x8u); - DO(ed25519ctx_verify(msg, mlen, buf, buflen, ctx, ctxlen, &ret, &key)); - ENSUREX(ret != 1, "ed25519ctx_verify is expected to fail on the modified message"); - - zeromem(&key, sizeof(key)); - zeromem(&key2, sizeof(key2)); - } - - return CRYPT_OK; -} - -static int s_rfc_8032_7_3_test(void) -{ - const rfc_8032_7_t rfc_8032_7_3[] = { - { - /* SECRET KEY */ - "833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42", - /* PUBLIC KEY */ - "ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf", - /* MESSAGE (length 16 bytes) */ - "616263", - /* SIGNATURE */ - "98a70222f0b8121aa9d30f813d683f809e462b469c7ff87639499bb94e6dae41" - "31f85042463c2a355a2003d062adf5aaa10b8c61e636062aaad11c2a26083406", - /* CONTEXT */ - NULL - }, - }; - - unsigned long mlen, slen, plen, siglen, buflen; - unsigned char msg[1024], sec[32], pub[32], sig[64], buf[64]; - curve25519_key key; - int ret; - const int should = 1; - - buflen = sizeof(buf); - slen = sizeof(sec); - DO(base16_decode(rfc_8032_7_3[0].secret_key, XSTRLEN(rfc_8032_7_3[0].secret_key), sec, &slen)); - plen = sizeof(pub); - DO(base16_decode(rfc_8032_7_3[0].public_key, XSTRLEN(rfc_8032_7_3[0].public_key), pub, &plen)); - mlen = sizeof(msg); - DO(base16_decode(rfc_8032_7_3[0].message, XSTRLEN(rfc_8032_7_3[0].message), msg, &mlen)); - siglen = sizeof(sig); - DO(base16_decode(rfc_8032_7_3[0].signature, XSTRLEN(rfc_8032_7_3[0].signature), sig, &siglen)); - - DO(ed25519_import_raw(sec, slen, PK_PRIVATE, &key)); - DO(ed25519ph_sign(msg, mlen, buf, &buflen, NULL, 0, &key)); - COMPARE_TESTVECTOR(buf, buflen, sig, siglen, "Ed25519 RFC8032 7.3 - sign", 0); - DO(ed25519ph_verify(msg, mlen, buf, buflen, NULL, 0, &ret, &key)); - ENSUREX(ret == should, "Ed25519 RFC8032 7.3 - verify w/ privkey"); - - return CRYPT_OK; -} - -static int s_signature_malleability_test(void) -{ - /* Wycheproof Ed25519 signature malleability test vectors. */ - static const struct { - int tc_id; - const char *sig; - } test_cases[] = { - { 63, "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab067654bce3832c2d76f8f6f5dafc08d9339d4eef676573336a5c51eb6f946b31d" }, - { 64, "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab05439412b5395d42f462c67008eba6ca839d4eef676573336a5c51eb6f946b32d" }, - { 65, "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab02ee12ce5875bf9dff26556464bae2ad239d4eef676573336a5c51eb6f946b34d" }, - { 66, "7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab0e2300459f1e742404cd934d2c595a6253ad4eef676573336a5c51eb6f946b38d" }, - }; - const char *public_key = "7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa"; - const char *message = "54657374"; - unsigned long n, mlen, plen, siglen; - unsigned char msg[32], pub[32], sig[64]; - curve25519_key key; - int ret; - const int should = 0; - - plen = sizeof(pub); - DO(base16_decode(public_key, XSTRLEN(public_key), pub, &plen)); - mlen = sizeof(msg); - DO(base16_decode(message, XSTRLEN(message), msg, &mlen)); - DO(ed25519_import_raw(pub, plen, PK_PUBLIC, &key)); - - for (n = 0; n < LTC_ARRAY_SIZE(test_cases); ++n) { - siglen = sizeof(sig); - DO(base16_decode(test_cases[n].sig, XSTRLEN(test_cases[n].sig), sig, &siglen)); - DO(ed25519_verify(msg, mlen, sig, siglen, &ret, &key)); - COMPARE_TESTVECTOR(&ret, sizeof(ret), &should, sizeof(should), "Ed25519 malleability rejection", test_cases[n].tc_id); - } - - zeromem(&key, sizeof(key)); - return CRYPT_OK; -} - -/** - Test the ed25519 system - @return CRYPT_OK if successful -*/ -int ed25519_test(void) -{ - int ret; - curve25519_key key; - - if ((ret = ed25519_make_key(&yarrow_prng, find_prng("yarrow"), &key)) != CRYPT_OK) { - return ret; - } - - DO(s_rfc_8032_7_1_test()); - DO(s_rfc_8032_7_2_test()); - DO(s_rfc_8032_7_3_test()); - DO(s_signature_malleability_test()); - - return ret; -} - -int ed25519_mpi_test(void) -{ - if (ltc_mp.name == NULL) return CRYPT_NOP; - DO(s_rfc_8410_10_test()); - return CRYPT_OK; -} - -#else -LTC_NOP_TEST(ed25519_test) -LTC_NOP_TEST(ed25519_mpi_test) -#endif diff --git a/tests/ed448_test.c b/tests/ed448_test.c deleted file mode 100644 index 736eb251..00000000 --- a/tests/ed448_test.c +++ /dev/null @@ -1,485 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_test.h" - -#ifdef LTC_CURVE448 - -typedef struct { - const char *secret_key; - const char *public_key; - const char *message; - const char *signature; - const char *context; -} rfc_8032_t; - -static int s_ed448_keygen_sign_verify(void) -{ - curve448_key key, pubkey; - const unsigned char msg[] = "test message"; - unsigned char sig[114], pk_buf[57]; - unsigned long siglen, pklen; - int stat, prng_idx; - - prng_idx = find_prng("yarrow"); - - /* keygen */ - DO(ed448_make_key(&yarrow_prng, prng_idx, &key)); - ENSURE(key.type == PK_PRIVATE); - ENSURE(key.pka == LTC_PKA_ED448); - - /* sign */ - siglen = sizeof(sig); - DO(ed448_sign(msg, sizeof(msg), sig, &siglen, &key)); - ENSURE(siglen == 114); - - /* export/import public key */ - pklen = sizeof(pk_buf); - DO(ed448_export(pk_buf, &pklen, PK_PUBLIC, &key)); - DO(ed448_import_raw(pk_buf, pklen, PK_PUBLIC, &pubkey)); - - /* verify */ - stat = 0; - DO(ed448_verify(msg, sizeof(msg), sig, siglen, &stat, &pubkey)); - ENSURE(stat == 1); - - /* corrupted sig must fail */ - sig[0] ^= 1; - stat = 1; - DO(ed448_verify(msg, sizeof(msg), sig, siglen, &stat, &pubkey)); - ENSURE(stat == 0); - - /* sign with context */ - siglen = sizeof(sig); - DO(ed448ctx_sign(msg, sizeof(msg), sig, &siglen, - (const unsigned char *)"ctx", 3, &key)); - stat = 0; - DO(ed448ctx_verify(msg, sizeof(msg), sig, siglen, - (const unsigned char *)"ctx", 3, &stat, &pubkey)); - ENSURE(stat == 1); - - /* wrong context must fail */ - stat = 1; - DO(ed448ctx_verify(msg, sizeof(msg), sig, siglen, - (const unsigned char *)"bad", 3, &stat, &pubkey)); - ENSURE(stat == 0); - - return CRYPT_OK; -} - -/* RFC 8032 Section 5.2.6 - Ed448 (pure, no context) */ -static int s_rfc_8032_5_2_6_pure_test(void) -{ - const rfc_8032_t vectors[] = { - { - /* 1: empty message */ - "6c82a562cb808d10d632be89c8513ebf6c929f34ddfa8c9f63c9960ef6e348a3" - "528c8a3fcc2f044e39a3fc5b94492f8f032e7549a20098f95b", - "5fd7449b59b461fd2ce787ec616ad46a1da1342485a70e1f8a0ea75d80e96778" - "edf124769b46c7061bd6783df1e50f6cd1fa1abeafe8256180", - "", - "533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f" - "2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a" - "9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4db" - "b61149f05a7363268c71d95808ff2e652600", - NULL - }, - { - /* 2: 1 byte message */ - "c4eab05d357007c632f3dbb48489924d552b08fe0c353a0d4a1f00acda2c463a" - "fbea67c5e8d2877c5e3bc397a659949ef8021e954e0a12274e", - "43ba28f430cdff456ae531545f7ecd0ac834a55d9358c0372bfa0c6c6798c086" - "6aea01eb00742802b8438ea4cb82169c235160627b4c3a9480", - "03", - "26b8f91727bd62897af15e41eb43c377efb9c610d48f2335cb0bd0087810f435" - "2541b143c4b981b7e18f62de8ccdf633fc1bf037ab7cd779805e0dbcc0aae1cb" - "cee1afb2e027df36bc04dcecbf154336c19f0af7e0a6472905e799f1953d2a0f" - "f3348ab21aa4adafd1d234441cf807c03a00", - NULL - }, - { - /* 4: 11 byte message */ - "cd23d24f714274e744343237b93290f511f6425f98e64459ff203e8985083ffd" - "f60500553abc0e05cd02184bdb89c4ccd67e187951267eb328", - "dcea9e78f35a1bf3499a831b10b86c90aac01cd84b67a0109b55a36e9328b1e3" - "65fce161d71ce7131a543ea4cb5f7e9f1d8b00696447001400", - "0c3e544074ec63b0265e0c", - "1f0a8888ce25e8d458a21130879b840a9089d999aaba039eaf3e3afa090a09d3" - "89dba82c4ff2ae8ac5cdfb7c55e94d5d961a29fe0109941e00b8dbdeea6d3b05" - "1068df7254c0cdc129cbe62db2dc957dbb47b51fd3f213fb8698f064774250a5" - "028961c9bf8ffd973fe5d5c206492b140e00", - NULL - }, - { - /* 5: 12 byte message */ - "258cdd4ada32ed9c9ff54e63756ae582fb8fab2ac721f2c8e676a72768513d93" - "9f63dddb55609133f29adf86ec9929dccb52c1c5fd2ff7e21b", - "3ba16da0c6f2cc1f30187740756f5e798d6bc5fc015d7c63cc9510ee3fd44adc" - "24d8e968b6e46e6f94d19b945361726bd75e149ef09817f580", - "64a65f3cdedcdd66811e2915", - "7eeeab7c4e50fb799b418ee5e3197ff6bf15d43a14c34389b59dd1a7b1b85b4a" - "e90438aca634bea45e3a2695f1270f07fdcdf7c62b8efeaf00b45c2c96ba457e" - "b1a8bf075a3db28e5c24f6b923ed4ad747c3c9e03c7079efb87cb110d3a99861" - "e72003cbae6d6b8b827e4e6c143064ff3c00", - NULL - }, - { - /* 6: 13 byte message */ - "7ef4e84544236752fbb56b8f31a23a10e42814f5f55ca037cdcc11c64c9a3b29" - "49c1bb60700314611732a6c2fea98eebc0266a11a93970100e", - "b3da079b0aa493a5772029f0467baebee5a8112d9d3a22532361da294f7bb381" - "5c5dc59e176b4d9f381ca0938e13c6c07b174be65dfa578e80", - "64a65f3cdedcdd66811e2915e7", - "6a12066f55331b6c22acd5d5bfc5d71228fbda80ae8dec26bdd306743c5027cb" - "4890810c162c027468675ecf645a83176c0d7323a2ccde2d80efe5a1268e8aca" - "1d6fbc194d3f77c44986eb4ab4177919ad8bec33eb47bbb5fc6e28196fd1caf5" - "6b4e7e0ba5519234d047155ac727a1053100", - NULL - }, - { - /* 7: 64 byte message */ - "d65df341ad13e008567688baedda8e9dcdc17dc024974ea5b4227b6530e339bf" - "f21f99e68ca6968f3cca6dfe0fb9f4fab4fa135d5542ea3f01", - "df9705f58edbab802c7f8363cfe5560ab1c6132c20a9f1dd163483a26f8ac53a" - "39d6808bf4a1dfbd261b099bb03b3fb50906cb28bd8a081f00", - "bd0f6a3747cd561bdddf4640a332461a4a30a12a434cd0bf40d766d9c6d458e5" - "512204a30c17d1f50b5079631f64eb3112182da3005835461113718d1a5ef944", - "554bc2480860b49eab8532d2a533b7d578ef473eeb58c98bb2d0e1ce488a98b1" - "8dfde9b9b90775e67f47d4a1c3482058efc9f40d2ca033a0801b63d45b3b722e" - "f552bad3b4ccb667da350192b61c508cf7b6b5adadc2c8d9a446ef003fb05cba" - "5f30e88e36ec2703b349ca229c2670833900", - NULL - }, - { - /* 8: 256 byte message */ - "2ec5fe3c17045abdb136a5e6a913e32ab75ae68b53d2fc149b77e504132d3756" - "9b7e766ba74a19bd6162343a21c8590aa9cebca9014c636df5", - "79756f014dcfe2079f5dd9e718be4171e2ef2486a08f25186f6bff43a9936b9b" - "fe12402b08ae65798a3d81e22e9ec80e7690862ef3d4ed3a00", - "15777532b0bdd0d1389f636c5f6b9ba734c90af572877e2d272dd078aa1e567c" - "fa80e12928bb542330e8409f3174504107ecd5efac61ae7504dabe2a602ede89" - "e5cca6257a7c77e27a702b3ae39fc769fc54f2395ae6a1178cab4738e543072f" - "c1c177fe71e92e25bf03e4ecb72f47b64d0465aaea4c7fad372536c8ba516a60" - "39c3c2a39f0e4d832be432dfa9a706a6e5c7e19f397964ca4258002f7c0541b5" - "90316dbc5622b6b2a6fe7a4abffd96105eca76ea7b98816af0748c10df048ce0" - "12d901015a51f189f3888145c03650aa23ce894c3bd889e030d565071c59f409" - "a9981b51878fd6fc110624dcbcde0bf7a69ccce38fabdf86f3bef6044819de11", - "c650ddbb0601c19ca11439e1640dd931f43c518ea5bea70d3dcde5f4191fe53f" - "00cf966546b72bcc7d58be2b9badef28743954e3a44a23f880e8d4f1cfce2d7a" - "61452d26da05896f0a50da66a239a8a188b6d825b3305ad77b73fbac0836ecc6" - "0987fd08527c1a8e80d5823e65cafe2a3d00", - NULL - }, - { - /* 9: 1023 byte message */ - "872d093780f5d3730df7c212664b37b8a0f24f56810daa8382cd4fa3f77634ec" - "44dc54f1c2ed9bea86fafb7632d8be199ea165f5ad55dd9ce8", - "a81b2e8a70a5ac94ffdbcc9badfc3feb0801f258578bb114ad44ece1ec0e799d" - "a08effb81c5d685c0c56f64eecaef8cdf11cc38737838cf400", - "6ddf802e1aae4986935f7f981ba3f0351d6273c0a0c22c9c0e8339168e675412" - "a3debfaf435ed651558007db4384b650fcc07e3b586a27a4f7a00ac8a6fec2cd" - "86ae4bf1570c41e6a40c931db27b2faa15a8cedd52cff7362c4e6e23daec0fbc" - "3a79b6806e316efcc7b68119bf46bc76a26067a53f296dafdbdc11c77f7777e9" - "72660cf4b6a9b369a6665f02e0cc9b6edfad136b4fabe723d2813db3136cfde9" - "b6d044322fee2947952e031b73ab5c603349b307bdc27bc6cb8b8bbd7bd32321" - "9b8033a581b59eadebb09b3c4f3d2277d4f0343624acc817804728b25ab79717" - "2b4c5c21a22f9c7839d64300232eb66e53f31c723fa37fe387c7d3e50bdf9813" - "a30e5bb12cf4cd930c40cfb4e1fc622592a49588794494d56d24ea4b40c89fc0" - "596cc9ebb961c8cb10adde976a5d602b1c3f85b9b9a001ed3c6a4d3b1437f520" - "96cd1956d042a597d561a596ecd3d1735a8d570ea0ec27225a2c4aaff26306d1" - "526c1af3ca6d9cf5a2c98f47e1c46db9a33234cfd4d81f2c98538a09ebe76998" - "d0d8fd25997c7d255c6d66ece6fa56f11144950f027795e653008f4bd7ca2dee" - "85d8e90f3dc315130ce2a00375a318c7c3d97be2c8ce5b6db41a6254ff264fa6" - "155baee3b0773c0f497c573f19bb4f4240281f0b1f4f7be857a4e59d416c06b4" - "c50fa09e1810ddc6b1467baeac5a3668d11b6ecaa901440016f389f80acc4db9" - "77025e7f5924388c7e340a732e554440e76570f8dd71b7d640b3450d1fd5f041" - "0a18f9a3494f707c717b79b4bf75c98400b096b21653b5d217cf3565c9597456" - "f70703497a078763829bc01bb1cbc8fa04eadc9a6e3f6699587a9e75c94e5bab" - "0036e0b2e711392cff0047d0d6b05bd2a588bc109718954259f1d86678a579a3" - "120f19cfb2963f177aeb70f2d4844826262e51b80271272068ef5b3856fa8535" - "aa2a88b2d41f2a0e2fda7624c2850272ac4a2f561f8f2f7a318bfd5caf969614" - "9e4ac824ad3460538fdc25421beec2cc6818162d06bbed0c40a387192349db67" - "a118bada6cd5ab0140ee273204f628aad1c135f770279a651e24d8c14d75a605" - "9d76b96a6fd857def5e0b354b27ab937a5815d16b5fae407ff18222c6d1ed263" - "be68c95f32d908bd895cd76207ae726487567f9a67dad79abec316f683b17f2d" - "02bf07e0ac8b5bc6162cf94697b3c27cd1fea49b27f23ba2901871962506520c" - "392da8b6ad0d99f7013fbc06c2c17a569500c8a7696481c1cd33e9b14e40b82e" - "79a5f5db82571ba97bae3ad3e0479515bb0e2b0f3bfcd1fd33034efc6245eddd" - "7ee2086ddae2600d8ca73e214e8c2b0bdb2b047c6a464a562ed77b73d2d841c4" - "b34973551257713b753632efba348169abc90a68f42611a40126d7cb21b58695" - "568186f7e569d2ff0f9e745d0487dd2eb997cafc5abf9dd102e62ff66cba87", - "e301345a41a39a4d72fff8df69c98075a0cc082b802fc9b2b6bc503f926b65bd" - "df7f4c8f1cb49f6396afc8a70abe6d8aef0db478d4c6b2970076c6a0484fe76d" - "76b3a97625d79f1ce240e7c576750d295528286f719b413de9ada3e8eb78ed57" - "3603ce30d8bb761785dc30dbc320869e1a00", - NULL - } - }; - unsigned int n; - unsigned long mlen, slen, plen, siglen, buflen; - unsigned char msg[1024], sec[57], pub[57], sig[114], buf[114]; - curve448_key key, key2; - int ret; - const int should = 1; - - for (n = 0; n < sizeof(vectors)/sizeof(vectors[0]); ++n) { - slen = sizeof(sec); - DO(base16_decode(vectors[n].secret_key, XSTRLEN(vectors[n].secret_key), sec, &slen)); - plen = sizeof(pub); - DO(base16_decode(vectors[n].public_key, XSTRLEN(vectors[n].public_key), pub, &plen)); - if (XSTRLEN(vectors[n].message) > 0) { - mlen = sizeof(msg); - DO(base16_decode(vectors[n].message, XSTRLEN(vectors[n].message), msg, &mlen)); - } else { - mlen = 0; - } - siglen = sizeof(sig); - DO(base16_decode(vectors[n].signature, XSTRLEN(vectors[n].signature), sig, &siglen)); - - /* sign with private key and compare */ - DO(ed448_import_raw(sec, slen, PK_PRIVATE, &key)); - buflen = sizeof(buf); - DO(ed448_sign(msg, mlen, buf, &buflen, &key)); - COMPARE_TESTVECTOR(buf, buflen, sig, siglen, "Ed448 RFC8032 5.2.6 - sign", n); - - /* verify with private key */ - DO(ed448_verify(msg, mlen, sig, siglen, &ret, &key)); - COMPARE_TESTVECTOR(&ret, sizeof(ret), &should, sizeof(should), "Ed448 RFC8032 5.2.6 - verify w/ privkey", n); - - /* verify with public key only */ - DO(ed448_import_raw(pub, plen, PK_PUBLIC, &key2)); - DO(ed448_verify(msg, mlen, sig, siglen, &ret, &key2)); - COMPARE_TESTVECTOR(&ret, sizeof(ret), &should, sizeof(should), "Ed448 RFC8032 5.2.6 - verify w/ pubkey", n); - - zeromem(&key, sizeof(key)); - zeromem(&key2, sizeof(key2)); - } - return CRYPT_OK; -} - -/* RFC 8032 Section 5.2.6 - Ed448 with context (vector 3) */ -static int s_rfc_8032_5_2_6_ctx_test(void) -{ - const rfc_8032_t vectors[] = { - { - /* 3: 1 byte message, context "foo" */ - "c4eab05d357007c632f3dbb48489924d552b08fe0c353a0d4a1f00acda2c463a" - "fbea67c5e8d2877c5e3bc397a659949ef8021e954e0a12274e", - "43ba28f430cdff456ae531545f7ecd0ac834a55d9358c0372bfa0c6c6798c086" - "6aea01eb00742802b8438ea4cb82169c235160627b4c3a9480", - "03", - "d4f8f6131770dd46f40867d6fd5d5055de43541f8c5e35abbcd001b32a89f7d2" - "151f7647f11d8ca2ae279fb842d607217fce6e042f6815ea000c85741de5c8da" - "1144a6a1aba7f96de42505d7a7298524fda538fccbbb754f578c1cad10d54d0d" - "5428407e85dcbc98a49155c13764e66c3c00", - "666f6f" - } - }; - unsigned int n; - unsigned long mlen, slen, plen, siglen, buflen, ctxlen; - unsigned char msg[1024], sec[57], pub[57], sig[114], buf[114], ctx[64]; - curve448_key key, key2; - int ret; - const int should = 1; - - for (n = 0; n < sizeof(vectors)/sizeof(vectors[0]); ++n) { - slen = sizeof(sec); - DO(base16_decode(vectors[n].secret_key, XSTRLEN(vectors[n].secret_key), sec, &slen)); - plen = sizeof(pub); - DO(base16_decode(vectors[n].public_key, XSTRLEN(vectors[n].public_key), pub, &plen)); - mlen = sizeof(msg); - DO(base16_decode(vectors[n].message, XSTRLEN(vectors[n].message), msg, &mlen)); - siglen = sizeof(sig); - DO(base16_decode(vectors[n].signature, XSTRLEN(vectors[n].signature), sig, &siglen)); - ctxlen = sizeof(ctx); - DO(base16_decode(vectors[n].context, XSTRLEN(vectors[n].context), ctx, &ctxlen)); - - /* sign with context and compare */ - DO(ed448_import_raw(sec, slen, PK_PRIVATE, &key)); - buflen = sizeof(buf); - DO(ed448ctx_sign(msg, mlen, buf, &buflen, ctx, ctxlen, &key)); - COMPARE_TESTVECTOR(buf, buflen, sig, siglen, "Ed448ctx RFC8032 5.2.6 - sign", n); - - /* verify with private key */ - DO(ed448ctx_verify(msg, mlen, sig, siglen, ctx, ctxlen, &ret, &key)); - COMPARE_TESTVECTOR(&ret, sizeof(ret), &should, sizeof(should), "Ed448ctx RFC8032 5.2.6 - verify w/ privkey", n); - - /* verify with public key only */ - DO(ed448_import_raw(pub, plen, PK_PUBLIC, &key2)); - DO(ed448ctx_verify(msg, mlen, sig, siglen, ctx, ctxlen, &ret, &key2)); - COMPARE_TESTVECTOR(&ret, sizeof(ret), &should, sizeof(should), "Ed448ctx RFC8032 5.2.6 - verify w/ pubkey", n); - - zeromem(&key, sizeof(key)); - zeromem(&key2, sizeof(key2)); - } - return CRYPT_OK; -} - -/* RFC 8032 Section 5.2.6 - Ed448ph (prehash) */ -static int s_rfc_8032_5_2_6_ph_test(void) -{ - const rfc_8032_t vectors[] = { - { - /* Ed448ph without context */ - "833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42" - "ef7822e0d5104127dc05d6dbefde69e3ab2cec7c867c6e2c49", - "259b71c19f83ef77a7abd26524cbdb3161b590a48f7d17de3ee0ba9c52beb743" - "c09428a131d6b1b57303d90d8132c276d5ed3d5d01c0f53880", - "616263", - "822f6901f7480f3d5f562c592994d9693602875614483256505600bbc281ae38" - "1f54d6bce2ea911574932f52a4e6cadd78769375ec3ffd1b801a0d9b3f4030cd" - "433964b6457ea39476511214f97469b57dd32dbc560a9a94d00bff07620464a3" - "ad203df7dc7ce360c3cd3696d9d9fab90f00", - NULL - }, - { - /* Ed448ph with context "foo" */ - "833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42" - "ef7822e0d5104127dc05d6dbefde69e3ab2cec7c867c6e2c49", - "259b71c19f83ef77a7abd26524cbdb3161b590a48f7d17de3ee0ba9c52beb743" - "c09428a131d6b1b57303d90d8132c276d5ed3d5d01c0f53880", - "616263", - "c32299d46ec8ff02b54540982814dce9a05812f81962b649d528095916a2aa48" - "1065b1580423ef927ecf0af5888f90da0f6a9a85ad5dc3f280d91224ba9911a3" - "653d00e484e2ce232521481c8658df304bb7745a73514cdb9bf3e15784ab7128" - "4f8d0704a608c54a6b62d97beb511d132100", - "666f6f" - } - }; - unsigned int n; - unsigned long mlen, slen, plen, siglen, buflen, ctxlen; - unsigned char msg[1024], sec[57], pub[57], sig[114], buf[114], ctx[64]; - curve448_key key; - int ret; - const int should = 1; - - for (n = 0; n < sizeof(vectors)/sizeof(vectors[0]); ++n) { - slen = sizeof(sec); - DO(base16_decode(vectors[n].secret_key, XSTRLEN(vectors[n].secret_key), sec, &slen)); - plen = sizeof(pub); - DO(base16_decode(vectors[n].public_key, XSTRLEN(vectors[n].public_key), pub, &plen)); - mlen = sizeof(msg); - DO(base16_decode(vectors[n].message, XSTRLEN(vectors[n].message), msg, &mlen)); - siglen = sizeof(sig); - DO(base16_decode(vectors[n].signature, XSTRLEN(vectors[n].signature), sig, &siglen)); - - if (vectors[n].context != NULL) { - ctxlen = sizeof(ctx); - DO(base16_decode(vectors[n].context, XSTRLEN(vectors[n].context), ctx, &ctxlen)); - } else { - ctxlen = 0; - } - - DO(ed448_import_raw(sec, slen, PK_PRIVATE, &key)); - buflen = sizeof(buf); - DO(ed448ph_sign(msg, mlen, buf, &buflen, ctx, ctxlen, &key)); - COMPARE_TESTVECTOR(buf, buflen, sig, siglen, "Ed448ph RFC8032 5.2.6 - sign", n); - - DO(ed448ph_verify(msg, mlen, sig, siglen, ctx, ctxlen, &ret, &key)); - COMPARE_TESTVECTOR(&ret, sizeof(ret), &should, sizeof(should), "Ed448ph RFC8032 5.2.6 - verify", n); - - zeromem(&key, sizeof(key)); - } - return CRYPT_OK; -} - -/* Wycheproof ed448_test.json tcId=63/64/65 signature malleability vectors */ -static int s_signature_malleability_test(void) -{ - static const struct { - int tc_id; - const char *sig; - } test_cases[] = { - { 63, - "5db94c53101f521f6c1f43b60ea4d7e06fbd49c2e8afaf4fcc289e645e0880a87b8e55858df4cf2291a7303ffda446b82a117b4dd408cff2811adf92201088e0" - "51ee48b57aecf46edfc68e5baeed5ae4910ba5681d370f75ab593811e18293ef0808581c254196bcbf2b4c454136a6711b00" - }, - { 64, - "5db94c53101f521f6c1f43b60ea4d7e06fbd49c2e8afaf4fcc289e645e0880a87b8e55858df4cf2291a7303ffda446b82a117b4dd408cff2825e06c3999e8308" - "be439c40940b0075d3e4f65147c1608cbe6e9c432e33bed6686f9393ae2568f0ad60febcb4b6179c0d90d034e7c3c4681000" - }, - { 65, - "5db94c53101f521f6c1f43b60ea4d7e06fbd49c2e8afaf4fcc289e645e0880a87b8e55858df4cf2291a7303ffda446b82a117b4dd408cff2c02456bbd141df04" - "8dbf1843be6d5fef402483314c2af547b361a09f3319489eaede43404df9faf634c1298d678b5261c808b0be3726013e3900" - }, - }; - const char *public_key = "419610a534af127f583b04818cdb7f0ff300b025f2e01682bcae33fd691cee039511df0cddc690ee978426e8b38e50ce5af7dcfba50f704c00"; - const char *message = "313233343030"; - unsigned long n, mlen, plen, siglen; - unsigned char msg[8], pub[57], sig[114]; - curve448_key key; - int ret; - const int should = 0; - - plen = sizeof(pub); - DO(base16_decode(public_key, XSTRLEN(public_key), pub, &plen)); - mlen = sizeof(msg); - DO(base16_decode(message, XSTRLEN(message), msg, &mlen)); - DO(ed448_import_raw(pub, plen, PK_PUBLIC, &key)); - - for (n = 0; n < LTC_ARRAY_SIZE(test_cases); ++n) { - siglen = sizeof(sig); - DO(base16_decode(test_cases[n].sig, XSTRLEN(test_cases[n].sig), sig, &siglen)); - DO(ed448_verify(msg, mlen, sig, siglen, &ret, &key)); - COMPARE_TESTVECTOR(&ret, sizeof(ret), &should, sizeof(should), "Ed448 malleability rejection", test_cases[n].tc_id); - } - - zeromem(&key, sizeof(key)); - return CRYPT_OK; -} - -/* Export/import round-trip for Ed448 (requires MPI for DER/PKCS8) */ -static int s_ed448_compat_test(void) -{ - curve448_key priv, pub, imported; - unsigned char buf[1024]; - unsigned long buflen; - int prng_idx = find_prng("yarrow"); - - XMEMSET(&priv, 0, sizeof(priv)); - XMEMSET(&pub, 0, sizeof(pub)); - XMEMSET(&imported, 0, sizeof(imported)); - - DO(ed448_make_key(&yarrow_prng, prng_idx, &priv)); - - /* private PKCS#8 export -> import */ - buflen = sizeof(buf); - DO(ed448_export(buf, &buflen, PK_PRIVATE | PK_STD, &priv)); - DO(ed448_import_pkcs8(buf, buflen, NULL, &imported)); - COMPARE_TESTVECTOR(&priv, sizeof(priv), &imported, sizeof(imported), "Ed448 priv pkcs8 round-trip", __LINE__); - XMEMSET(&imported, 0, sizeof(imported)); - - /* public raw export -> import */ - buflen = sizeof(buf); - DO(ed448_export(buf, &buflen, PK_PUBLIC, &priv)); - DO(ed448_import_raw(buf, buflen, PK_PUBLIC, &pub)); - - /* public DER export -> import */ - buflen = sizeof(buf); - DO(ed448_export(buf, &buflen, PK_PUBLIC | PK_STD, &priv)); - DO(ed448_import(buf, buflen, &imported)); - COMPARE_TESTVECTOR(&pub, sizeof(pub), &imported, sizeof(imported), "Ed448 pub DER round-trip", __LINE__); - - return CRYPT_OK; -} - -int ed448_test(void) -{ - DO(s_ed448_keygen_sign_verify()); - DO(s_rfc_8032_5_2_6_pure_test()); - DO(s_rfc_8032_5_2_6_ctx_test()); - DO(s_rfc_8032_5_2_6_ph_test()); - DO(s_signature_malleability_test()); - return CRYPT_OK; -} - -int ed448_mpi_test(void) -{ - if (ltc_mp.name == NULL) return CRYPT_NOP; - DO(s_ed448_compat_test()); - return CRYPT_OK; -} - -#else -LTC_NOP_TEST(ed448_test) -LTC_NOP_TEST(ed448_mpi_test) -#endif diff --git a/tests/file_test.c b/tests/file_test.c deleted file mode 100644 index 294e9550..00000000 --- a/tests/file_test.c +++ /dev/null @@ -1,114 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/* test file related functions */ - -#include - -int file_test(void) -{ -#ifdef LTC_NO_FILE - return CRYPT_NOP; -#else - unsigned char key[32] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F }; - unsigned char buf[200]; - unsigned long len; -#ifdef CMAKE_SOURCE_DIR -#define FILE_IN_SOURCE_DIR(f) CMAKE_SOURCE_DIR "/" f -#else -#define FILE_IN_SOURCE_DIR(f) f -#endif - const char *fname = FILE_IN_SOURCE_DIR("tests/test.key"); - FILE *in; - int err, isha256, iaes; - - /* expected results */ - unsigned char exp_sha256[32] = { 0x76, 0xEC, 0x7F, 0xAE, 0xBD, 0xC4, 0x2A, 0x4D, 0xE3, 0x5C, 0xA7, 0x00, 0x24, 0xC2, 0xD2, 0x73, - 0xE9, 0xF7, 0x85, 0x6C, 0xA6, 0x16, 0x12, 0xE8, 0x9F, 0x5F, 0x66, 0x35, 0x0B, 0xA8, 0xCF, 0x5F }; - isha256 = find_hash("sha256"); - iaes = find_cipher("aes"); - - /* Suppress warnings when building with -DLTC_MINIMAL */ - LTC_UNUSED_PARAM(iaes); - LTC_UNUSED_PARAM(key); - - len = sizeof(buf); - if ((in = fopen(fname, "rb")) == NULL) return CRYPT_FILE_NOTFOUND; - err = hash_filehandle(isha256, in, buf, &len); - fclose(in); - DO(err); - COMPARE_TESTVECTOR(buf, len, exp_sha256, 32, "hash_filehandle", 1); - - len = sizeof(buf); - DO(hash_file(isha256, fname, buf, &len)); - COMPARE_TESTVECTOR(buf, len, exp_sha256, 32, "hash_file", 1); - -#ifdef LTC_HMAC - { - unsigned char exp_hmacsha256[32] = { 0xE4, 0x07, 0x74, 0x95, 0xF1, 0xF8, 0x5B, 0xB5, 0xF1, 0x4F, 0x7D, 0x4F, 0x59, 0x8E, 0x4B, 0xBC, - 0x8F, 0x68, 0xCF, 0xBA, 0x2E, 0xAD, 0xC4, 0x63, 0x9D, 0x7F, 0x02, 0x99, 0x8C, 0x08, 0xAC, 0xC0 }; - len = sizeof(buf); - DO(hmac_file(isha256, fname, key, 32, buf, &len)); - COMPARE_TESTVECTOR(buf, len, exp_hmacsha256, 32, "hmac_file", 1); - } -#endif -#ifdef LTC_OMAC - { - unsigned char exp_omacaes[16] = { 0x50, 0xB4, 0x6C, 0x62, 0xE9, 0xCA, 0x48, 0xFC, 0x38, 0x8D, 0xF4, 0xA2, 0x7D, 0x6A, 0x1E, 0xD8 }; - len = sizeof(buf); - DO(omac_file(iaes, key, 32, fname, buf, &len)); - COMPARE_TESTVECTOR(buf, len, exp_omacaes, 16, "omac_file", 1); - } -#endif -#ifdef LTC_PMAC - { - unsigned char exp_pmacaes[16] = { 0x7D, 0x65, 0xF0, 0x75, 0x4F, 0x8D, 0xE2, 0xB0, 0xE4, 0xFA, 0x54, 0x4E, 0x45, 0x01, 0x36, 0x1B }; - len = sizeof(buf); - DO(pmac_file(iaes, key, 32, fname, buf, &len)); - COMPARE_TESTVECTOR(buf, len, exp_pmacaes, 16, "pmac_file", 1); - } -#endif -#ifdef LTC_XCBC - { - unsigned char exp_xcbcaes[16] = { 0x9C, 0x73, 0xA2, 0xD7, 0x90, 0xA5, 0x86, 0x25, 0x4D, 0x3C, 0x8A, 0x6A, 0x24, 0x6D, 0xD1, 0xAB }; - len = sizeof(buf); - DO(xcbc_file(iaes, key, 32, fname, buf, &len)); - COMPARE_TESTVECTOR(buf, len, exp_xcbcaes, 16, "xcbc_file", 1); - } -#endif -#ifdef LTC_F9_MODE - { - unsigned char exp_f9aes[16] = { 0x6B, 0x6A, 0x18, 0x34, 0x13, 0x8E, 0x01, 0xEF, 0x33, 0x8E, 0x7A, 0x3F, 0x5B, 0x9A, 0xA6, 0x7A }; - len = sizeof(buf); - DO(f9_file(iaes, key, 32, fname, buf, &len)); - COMPARE_TESTVECTOR(buf, len, exp_f9aes, 16, "f9_file", 1); - } -#endif -#ifdef LTC_POLY1305 - { - unsigned char exp_poly1305[16] = { 0xD0, 0xC7, 0xFB, 0x13, 0xA8, 0x87, 0x84, 0x23, 0x21, 0xCC, 0xA9, 0x43, 0x81, 0x18, 0x75, 0xBE }; - len = sizeof(buf); - DO(poly1305_file(fname, key, 32, buf, &len)); - COMPARE_TESTVECTOR(buf, len, exp_poly1305, 16, "poly1305_file", 1); - } -#endif -#ifdef LTC_BLAKE2SMAC - { - unsigned char exp_blake2smac[16] = { 0x4f, 0x94, 0x45, 0x15, 0xcd, 0xd1, 0xca, 0x02, 0x1a, 0x0c, 0x7a, 0xe4, 0x6d, 0x2f, 0xe8, 0xb3 }; - len = 16; - DO(blake2smac_file(fname, key, 32, buf, &len)); - COMPARE_TESTVECTOR(buf, len, exp_blake2smac, 16, "exp_blake2smac_file", 1); - } -#endif -#ifdef LTC_BLAKE2BMAC - { - unsigned char exp_blake2bmac[16] = { 0xdf, 0x0e, 0x7a, 0xab, 0x96, 0x6b, 0x75, 0x4e, 0x52, 0x6a, 0x43, 0x96, 0xbd, 0xef, 0xab, 0x44 }; - len = 16; - DO(blake2bmac_file(fname, key, 32, buf, &len)); - COMPARE_TESTVECTOR(buf, len, exp_blake2bmac, 16, "exp_blake2bmac_file", 1); - } -#endif - - return CRYPT_OK; -#endif -} diff --git a/tests/mac_test.c b/tests/mac_test.c deleted file mode 100644 index 14cb228d..00000000 --- a/tests/mac_test.c +++ /dev/null @@ -1,61 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/* test pmac/omac/hmac */ -#include - -int mac_test(void) -{ -#ifdef LTC_HMAC - DO(hmac_test()); -#endif -#ifdef LTC_PMAC - DO(pmac_test()); -#endif -#ifdef LTC_OMAC - DO(omac_test()); -#endif -#ifdef LTC_XCBC - DO(xcbc_test()); -#endif -#ifdef LTC_F9_MODE - DO(f9_test()); -#endif -#ifdef LTC_EAX_MODE - DO(eax_test()); -#endif -#ifdef LTC_OCB3_MODE - DO(ocb3_test()); -#endif -#ifdef LTC_CCM_MODE - DO(ccm_test()); -#endif -#ifdef LTC_GCM_MODE - DO(gcm_test()); -#endif -#ifdef LTC_PELICAN - DO(pelican_test()); -#endif -#ifdef LTC_POLY1305 - DO(poly1305_test()); -#endif -#ifdef LTC_CHACHA20POLY1305_MODE - DO(chacha20poly1305_test()); -#endif -#ifdef LTC_BLAKE2SMAC - DO(blake2smac_test()); -#endif -#ifdef LTC_BLAKE2BMAC - DO(blake2bmac_test()); -#endif -#ifdef LTC_KMAC - DO(kmac_test()); -#endif -#ifdef LTC_SIV_MODE - DO(siv_test()); - DO(siv_wycheproof_test()); -#endif -#ifdef LTC_GCM_SIV_MODE - DO(gcm_siv_test()); -#endif - return 0; -} diff --git a/tests/misc_test.c b/tests/misc_test.c deleted file mode 100644 index d3d2945d..00000000 --- a/tests/misc_test.c +++ /dev/null @@ -1,46 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -int misc_test(void) -{ -#ifdef LTC_ARGON2 - DO(argon2_test()); -#endif -#ifdef LTC_BCRYPT - DO(bcrypt_test()); -#endif -#ifdef LTC_SCRYPT - DO(scrypt_test()); -#endif -#ifdef LTC_HKDF - DO(hkdf_test()); -#endif -#ifdef LTC_PKCS_5 - DO(pkcs_5_test()); -#endif -#ifdef LTC_PADDING - DO(padding_test()); -#endif -#ifdef LTC_BASE64 - DO(base64_test()); -#endif -#ifdef LTC_BASE32 - DO(base32_test()); -#endif -#ifdef LTC_BASE16 - DO(base16_test()); -#endif -#ifdef LTC_ADLER32 - DO(adler32_test()); -#endif -#ifdef LTC_CRC32 - DO(crc32_test()); -#endif -#ifdef LTC_SSH - ssh_test(); -#endif - pk_oid_test(); - no_null_termination_check_test(); - return 0; -} diff --git a/tests/modes_test.c b/tests/modes_test.c deleted file mode 100644 index 9b16dd67..00000000 --- a/tests/modes_test.c +++ /dev/null @@ -1,143 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/* test CFB/OFB/CBC modes */ -#include - -#ifdef LTC_CFB_MODE -static const struct { - int width; - const char *key, *iv, *pt, *ct; -} cfb_testvectors[] = { - { - 1, - "2b7e151628aed2a6abf7158809cf4f3c", - "000102030405060708090a0b0c0d0e0f", - "6bc1", - "68b3", - }, - { - 8, - "2b7e151628aed2a6abf7158809cf4f3c", - "000102030405060708090a0b0c0d0e0f", - "6bc1b3e22e409f96e93d7e117393172aae2d", - "3b79424c9c0dd436bace9e0ed4586a4f32b9", - }, -}; -#endif - -int modes_test(void) -{ -#ifdef LTC_CBC_MODE - symmetric_CBC cbc; -#endif -#ifdef LTC_OFB_MODE - symmetric_OFB ofb; -#endif -#ifdef LTC_CFB_MODE - symmetric_CFB cfb; - unsigned char tmp2[64]; - unsigned long n; -#endif -#if defined(LTC_CBC_MODE) || defined(LTC_CFB_MODE) || defined(LTC_OFB_MODE) - unsigned char pt[64], ct[64], tmp[64], key[16], iv[16], iv2[16]; - int cipher_idx; - unsigned long l; - - /* make a random pt, key and iv */ - ENSURE(yarrow_read(pt, 64, &yarrow_prng) == 64); - ENSURE(yarrow_read(key, 16, &yarrow_prng) == 16); - ENSURE(yarrow_read(iv, 16, &yarrow_prng) == 16); - - /* get idx of AES handy */ - ENSURE((cipher_idx = find_cipher("aes")) != -1); -#endif - -#ifdef LTC_F8_MODE - DO(f8_test_mode()); -#endif - -#ifdef LTC_LRW_MODE - DO(lrw_test()); -#endif - -#ifdef LTC_CBC_MODE - /* test CBC mode */ - /* encode the block */ - DO(cbc_start(cipher_idx, iv, key, 16, 0, &cbc)); - l = sizeof(iv2); - DO(cbc_getiv(iv2, &l, &cbc)); - COMPARE_TESTVECTOR(iv2, l, iv, 16, "cbc_getiv", 0); - DO(cbc_encrypt(pt, ct, 64, &cbc)); - - /* decode the block */ - DO(cbc_setiv(iv2, l, &cbc)); - zeromem(tmp, sizeof(tmp)); - DO(cbc_decrypt(ct, tmp, 64, &cbc)); - COMPARE_TESTVECTOR(pt, 64, tmp, 64, "CBC", 0); -#endif - -#ifdef LTC_CFB_MODE - /* test CFB mode */ - /* encode the block */ - DO(cfb_start(cipher_idx, iv, key, 16, 0, &cfb)); - l = sizeof(iv2); - DO(cfb_getiv(iv2, &l, &cfb)); - /* note we don't memcmp iv2/iv since cfb_start processes the IV for the first block */ - ENSURE(l == 16); - DO(cfb_encrypt(pt, ct, 64, &cfb)); - - /* decode the block */ - DO(cfb_setiv(iv, l, &cfb)); - zeromem(tmp, sizeof(tmp)); - DO(cfb_decrypt(ct, tmp, 64, &cfb)); - COMPARE_TESTVECTOR(tmp, 64, pt, 64, "cfb128-enc-dec", 0); - cfb_done(&cfb); - XMEMSET(&cfb, 0, sizeof(cfb)); -#define b16(e, w) do { \ - l = sizeof(w); \ - DO(base16_decode(e . w, XSTRLEN(e . w), w, &l)); \ -} while(0) - for (n = 0; n < LTC_ARRAY_SIZE(cfb_testvectors); ++n) { - b16(cfb_testvectors[n], key); - b16(cfb_testvectors[n], iv); - b16(cfb_testvectors[n], pt); - b16(cfb_testvectors[n], ct); - - DO(cfb_start_ex(cipher_idx, iv, key, 16, 0, cfb_testvectors[n].width, &cfb)); - l = sizeof(iv2); - DO(cfb_getiv(iv2, &l, &cfb)); - ENSURE(l == 16); - DO(cfb_encrypt(pt, tmp, 2, &cfb)); - COMPARE_TESTVECTOR(tmp, 2, ct, 2, "cfb-enc", n); - DO(cfb_setiv(iv2, l, &cfb)); - DO(cfb_decrypt(tmp, tmp2, 2, &cfb)); - COMPARE_TESTVECTOR(tmp2, 2, pt, 2, "cfb-dec", n); - } -#endif - -#ifdef LTC_OFB_MODE - /* test OFB mode */ - /* encode the block */ - DO(ofb_start(cipher_idx, iv, key, 16, 0, &ofb)); - l = sizeof(iv2); - DO(ofb_getiv(iv2, &l, &ofb)); - COMPARE_TESTVECTOR(iv2, l, iv, 16, "ofb_getiv", 0); - DO(ofb_encrypt(pt, ct, 64, &ofb)); - - /* decode the block */ - DO(ofb_setiv(iv2, l, &ofb)); - zeromem(tmp, sizeof(tmp)); - DO(ofb_decrypt(ct, tmp, 64, &ofb)); - COMPARE_TESTVECTOR(tmp, 64, pt, 64, "OFB", 0); -#endif - -#if defined(LTC_CTR_MODE) && defined(LTC_RIJNDAEL) - DO(ctr_test()); -#endif - -#ifdef LTC_XTS_MODE - DO(xts_test()); -#endif - - return 0; -} diff --git a/tests/mpi_test.c b/tests/mpi_test.c deleted file mode 100644 index bdaa373e..00000000 --- a/tests/mpi_test.c +++ /dev/null @@ -1,141 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#if defined(LTC_MPI) -static int s_radix_to_bin_test(void) -{ - /* RADIX 16 */ - const char ghex[] = "2"; - const char phex[] = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22" - "514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6" - "F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB" - "9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E8603" - "9B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA0510" - "15728E5A8AACAA68FFFFFFFFFFFFFFFF"; - const char xhex[] = "A6681ADC386CE944C3DED9A7301DCC9C518250E3EDB62F959198F8DC0057DD6FB57ABAFD788198B1"; - const char yhex[] = "39046632C834418DFA07B3091538B614D1FB5DBB785C0FBEA3B98B295BC0CD076A88D9452141A269" - "E8BAEB1DD654EBA03A5705318D129754CDF4003A8C399240FBB8F162490F6F0DC70E414B6FEE8808" - "6AFAA48E9F3A248EDC093452663D34E0E809D4F6BADBB36F80B6813EBF7C3281B862209E5604BDEA" - "8B8F5F7BFDC3EEB7ADB73048289BCEA0F5A5CDEE7DF91CD1F0BA632F06DBE9BA7EF014B84B02D497" - "CA7D0C60F734752A649DA496946B4E531B30D9F82EDD855636C0B0F2AE232E4186454E8887BB423E" - "32A5A2495EACBA99620ACD03A38345EBB6735E62330A8EE9AA6C8370410F5CD45AF37EE90A0DA95B" - "E96FC939E88FE0BD2CD09FC8F524208C"; - /* RADIX 47 */ - const char gr47[] = "2"; - const char pr47[] = "F27Mg1SadOFIRbDOJ5dHgHiVF02Z1LHHQ6G5SLG2U8aTdfH1ETk4GARRE7WW99dBUBLb9e2OHFIaSM1A" - "ag2LNNjgYa9I9CjQGJihL3J7A2SGQe8j5Ch8EHMj5jVbAYDiQKhhPhM6Hc56fKS40GUfJkGO7KJ6EXZQ" - "VgbSa2AkPC65F91g0PaYie8AGNVaFKaV9HOQf3ia1iW4i6eCOB9CcBbH7TbQij8AEgjZ0VRBcLKc6UYO" - "1Zc3I2Jc0h1H2HBEH8ONI3OYBbaPV6XhAd8WCc60D0RDBU3H9U7cWL28a0c90XNO0dh5RXEFBbUCE2ZG" - "gh9XQSVIHkVbFIS5F5IGVOkiWAVc9i8BHB2V0UbGW6UdRTZVV"; - const char xr47[] = "6bhO7O9NWFRgEMjdU0Y5POj3c1JP15MYEdIg3FO1PEjUY2aGYNSXcaF01R"; - const char yr47[] = "3GNPNWEYfKML1cIbI7Cc1Z0O7aQLJgB734dO2i56LLYDdI4gHYk2GAbQH2WI97hNeC7dj3fPEH8I9gV9" - "U323AXj1AJXbFPFIHGOTdC29QUUeH2SSc6NWhfQDDXd5Q5iXCKEAUGX3SKcNFIfVOYJgZCLjfHYQdgOQ" - "GCjKNgbEV7Hj34MU3b79iANX2DbMYfb9iGi78BWH2HYAd7IAhk7U0OYGHKJX1bIUUj1KBLhAUg46GaER" - "G9W3ARMfBCj6kSdDF9TdkWAjWTDj722IeVJERC4bKU2VDFG20kDhCMF985efD1SS8DfXcdCHF1kDUkSA" - "884FHYiFEPkaagQOBQaN9BNaEHNbbd002DCIIX5eMP4HgPJPF"; - /* RADIX 64 */ - const char gr64[] = "2"; - const char pr64[] = "3//////////yaFsg8XQC8qnCPYYu3S7D4f0au8YcVCT08BlgOx4viYKKe8UOuq1DtlbHcppJf36p0h2c" - "toNnGtJ+4rRMrHmaNaXRLsObv+nlHCGkccD+rh2/zSjlG6j+tkE6lxMecVfQwV915yIn/cIIXcKUpaMp" - "t207oueME/1PZQI3OSLTEQQHO/gFqapr+3PLqZtAEjbXnYyrOWXLAxdjKf1t2Mbcrd33LEIhoO1F5qR0" - "ZA625yCf1UHYuspZlZddSi60w60vidWwBi1wAFjSLTy6zCKidUAylsbLWN63cLINpgbMhb5T8c69Zw1H" - "0LSevQYgogQF//////////"; - const char xr64[] = "2cQ1hSE6pfHCFUsQSm7SoSKO9Gu+ssBvMHcFZS05VTRxLwklruWPYn"; - const char yr64[] = "v16Ooo3H1ZVe7imaLEBOKqVjTktXS3xwZkOifMy3D1sg8sKKXGQ9fwBhh7TPKww0wLmKnZHANLCtq03g" - "CEP90+xZnOaaFRmt73a5BR+w826hwf8wVEYIEt0aqKcOzDE3e2TJskjkpRu2sWJw/V3A1k68WdbO4lUg" - "BZrzx/SFkjwstC4WecywWzQNDxdtv7D7mkcCl1jlfkdxm5BXB0jINodqCOFSqTIfadQIMb6jEKnimsVW" - "ktOLMDi2myguZBa66HKw8Xxj2FZAbeabUhBgPOWhD0wE3HUksSrvYCmgEwQfiWt113rpKMlD+wGeDgLl" - "fRyavw8/WlIpGdyZr922C"; - /* RADIX 256 */ - const unsigned char gbin[] = { 0x02 }; - const unsigned char pbin[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, - 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, - 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, - 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, - 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, - 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, - 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, - 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, - 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, - 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, - 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, - 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, - 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, - 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, - 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, - 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAC, 0xAA, 0x68, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF - }; - const unsigned char xbin[] = { - 0xA6, 0x68, 0x1A, 0xDC, 0x38, 0x6C, 0xE9, 0x44, 0xC3, 0xDE, 0xD9, 0xA7, 0x30, 0x1D, 0xCC, 0x9C, - 0x51, 0x82, 0x50, 0xE3, 0xED, 0xB6, 0x2F, 0x95, 0x91, 0x98, 0xF8, 0xDC, 0x00, 0x57, 0xDD, 0x6F, - 0xB5, 0x7A, 0xBA, 0xFD, 0x78, 0x81, 0x98, 0xB1 - }; - const unsigned char ybin[] = { - 0x39, 0x04, 0x66, 0x32, 0xC8, 0x34, 0x41, 0x8D, 0xFA, 0x07, 0xB3, 0x09, 0x15, 0x38, 0xB6, 0x14, - 0xD1, 0xFB, 0x5D, 0xBB, 0x78, 0x5C, 0x0F, 0xBE, 0xA3, 0xB9, 0x8B, 0x29, 0x5B, 0xC0, 0xCD, 0x07, - 0x6A, 0x88, 0xD9, 0x45, 0x21, 0x41, 0xA2, 0x69, 0xE8, 0xBA, 0xEB, 0x1D, 0xD6, 0x54, 0xEB, 0xA0, - 0x3A, 0x57, 0x05, 0x31, 0x8D, 0x12, 0x97, 0x54, 0xCD, 0xF4, 0x00, 0x3A, 0x8C, 0x39, 0x92, 0x40, - 0xFB, 0xB8, 0xF1, 0x62, 0x49, 0x0F, 0x6F, 0x0D, 0xC7, 0x0E, 0x41, 0x4B, 0x6F, 0xEE, 0x88, 0x08, - 0x6A, 0xFA, 0xA4, 0x8E, 0x9F, 0x3A, 0x24, 0x8E, 0xDC, 0x09, 0x34, 0x52, 0x66, 0x3D, 0x34, 0xE0, - 0xE8, 0x09, 0xD4, 0xF6, 0xBA, 0xDB, 0xB3, 0x6F, 0x80, 0xB6, 0x81, 0x3E, 0xBF, 0x7C, 0x32, 0x81, - 0xB8, 0x62, 0x20, 0x9E, 0x56, 0x04, 0xBD, 0xEA, 0x8B, 0x8F, 0x5F, 0x7B, 0xFD, 0xC3, 0xEE, 0xB7, - 0xAD, 0xB7, 0x30, 0x48, 0x28, 0x9B, 0xCE, 0xA0, 0xF5, 0xA5, 0xCD, 0xEE, 0x7D, 0xF9, 0x1C, 0xD1, - 0xF0, 0xBA, 0x63, 0x2F, 0x06, 0xDB, 0xE9, 0xBA, 0x7E, 0xF0, 0x14, 0xB8, 0x4B, 0x02, 0xD4, 0x97, - 0xCA, 0x7D, 0x0C, 0x60, 0xF7, 0x34, 0x75, 0x2A, 0x64, 0x9D, 0xA4, 0x96, 0x94, 0x6B, 0x4E, 0x53, - 0x1B, 0x30, 0xD9, 0xF8, 0x2E, 0xDD, 0x85, 0x56, 0x36, 0xC0, 0xB0, 0xF2, 0xAE, 0x23, 0x2E, 0x41, - 0x86, 0x45, 0x4E, 0x88, 0x87, 0xBB, 0x42, 0x3E, 0x32, 0xA5, 0xA2, 0x49, 0x5E, 0xAC, 0xBA, 0x99, - 0x62, 0x0A, 0xCD, 0x03, 0xA3, 0x83, 0x45, 0xEB, 0xB6, 0x73, 0x5E, 0x62, 0x33, 0x0A, 0x8E, 0xE9, - 0xAA, 0x6C, 0x83, 0x70, 0x41, 0x0F, 0x5C, 0xD4, 0x5A, 0xF3, 0x7E, 0xE9, 0x0A, 0x0D, 0xA9, 0x5B, - 0xE9, 0x6F, 0xC9, 0x39, 0xE8, 0x8F, 0xE0, 0xBD, 0x2C, 0xD0, 0x9F, 0xC8, 0xF5, 0x24, 0x20, 0x8C - }; - -#define MPI_TEST(n) (n), sizeof(n) -#define MPI_TESTSET(t) MPI_TEST(g ## t), MPI_TEST(p ## t), MPI_TEST(x ## t), MPI_TEST(y ## t) - struct { - int radix; - const void* g; int glen; - const void* p; int plen; - const void* x; int xlen; - const void* y; int ylen; - } test[4] = { - /* ground-truth values in binary format */ - { 256, MPI_TESTSET(bin) }, - /* test-cases in different radices */ - { 16, MPI_TESTSET(hex) }, - { 47, MPI_TESTSET(r47) }, - { 64, MPI_TESTSET(r64) }, - }; -#undef MPI_TESTSET -#undef MPI_TEST - int i, j; - unsigned char key_parts[4][256]; - unsigned long key_lens[4]; - - for (i = 1; i < 4; i++) { - for (j = 0; j < 4; ++j) { - key_lens[j] = sizeof(key_parts[j]); - } - DO(radix_to_bin(test[i].x, test[i].radix, key_parts[0], &key_lens[0])); - DO(radix_to_bin(test[i].y, test[i].radix, key_parts[1], &key_lens[1])); - DO(radix_to_bin(test[i].p, test[i].radix, key_parts[2], &key_lens[2])); - DO(radix_to_bin(test[i].g, test[i].radix, key_parts[3], &key_lens[3])); - - COMPARE_TESTVECTOR(key_parts[0], key_lens[0], test[0].x, test[0].xlen, "radix_to_bin(x)", i); - COMPARE_TESTVECTOR(key_parts[1], key_lens[1], test[0].y, test[0].ylen, "radix_to_bin(y)", i); - COMPARE_TESTVECTOR(key_parts[2], key_lens[2], test[0].p, test[0].plen, "radix_to_bin(p)", i); - COMPARE_TESTVECTOR(key_parts[3], key_lens[3], test[0].g, test[0].glen, "radix_to_bin(g)", i); - } - return CRYPT_OK; -} - -int mpi_test(void) -{ - if (ltc_mp.name == NULL) return CRYPT_NOP; - return s_radix_to_bin_test(); -} -#else -LTC_NOP_TEST(mpi_test) -#endif diff --git a/tests/multi_test.c b/tests/multi_test.c deleted file mode 100644 index 94236c1b..00000000 --- a/tests/multi_test.c +++ /dev/null @@ -1,243 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/* test the multi helpers... */ -#include - -int multi_test(void) -{ - unsigned char key[32] = { 0 }; - unsigned char buf[2][MAXBLOCKSIZE]; - unsigned long len, len2; - - /* Suppress warnings when building with -DLTC_MINIMAL */ - LTC_UNUSED_PARAM(key); - LTC_UNUSED_PARAM(buf); - LTC_UNUSED_PARAM(len); - LTC_UNUSED_PARAM(len2); -/* register algos */ - register_hash(&sha256_desc); - register_cipher(&aes_desc); - -#ifdef LTC_HASH_HELPERS -/* HASH testing */ - len = sizeof(buf[0]); -#if defined(ENDIAN_32BITWORD) || defined(_WIN32) || defined(ENDIAN_64BITWORD_ILP32) - len2 = 0x80000000UL; -#else - /* Check against the max. input limit of SHA-1 as of RFC8017 */ - len2 = 0x1ULL << 61; -#endif - SHOULD_FAIL_WITH(hash_memory(find_hash("sha256"), buf[0], len2, buf[0], &len), CRYPT_HASH_OVERFLOW); - - len = sizeof(buf[0]); - hash_memory(find_hash("sha256"), (unsigned char*)"hello", 5, buf[0], &len); - len2 = sizeof(buf[0]); - hash_memory_multi(find_hash("sha256"), buf[1], &len2, (unsigned char*)"hello", 5, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = sizeof(buf[0]); - hash_memory_multi(find_hash("sha256"), buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = sizeof(buf[0]); - hash_memory_multi(find_hash("sha256"), buf[1], &len2, (unsigned char*)"h", 1UL, "e", 1UL, "l", 1UL, "l", 1UL, "o", 1UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } -#endif - -#ifdef LTC_HMAC - len = sizeof(buf[0]); - hmac_memory(find_hash("sha256"), key, 16, (unsigned char*)"hello", 5, buf[0], &len); - len2 = sizeof(buf[0]); - hmac_memory_multi(find_hash("sha256"), key, 16, buf[1], &len2, (unsigned char*)"hello", 5UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = sizeof(buf[0]); - hmac_memory_multi(find_hash("sha256"), key, 16, buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = sizeof(buf[0]); - hmac_memory_multi(find_hash("sha256"), key, 16, buf[1], &len2, (unsigned char*)"h", 1UL, "e", 1UL, "l", 1UL, "l", 1UL, "o", 1UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } -#endif - -#ifdef LTC_OMAC - len = sizeof(buf[0]); - omac_memory(find_cipher("aes"), key, 16, (unsigned char*)"hello", 5, buf[0], &len); - len2 = sizeof(buf[0]); - omac_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"hello", 5UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = sizeof(buf[0]); - omac_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = sizeof(buf[0]); - omac_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"h", 1UL, "e", 1UL, "l", 1UL, "l", 1UL, "o", 1UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } -#endif - -#ifdef LTC_PMAC - len = sizeof(buf[0]); - pmac_memory(find_cipher("aes"), key, 16, (unsigned char*)"hello", 5, buf[0], &len); - len2 = sizeof(buf[0]); - pmac_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"hello", 5, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = sizeof(buf[0]); - pmac_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = sizeof(buf[0]); - pmac_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"h", 1UL, "e", 1UL, "l", 1UL, "l", 1UL, "o", 1UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } -#endif - -#ifdef LTC_XCBC - len = sizeof(buf[0]); - xcbc_memory(find_cipher("aes"), key, 16, (unsigned char*)"hello", 5, buf[0], &len); - len2 = sizeof(buf[0]); - xcbc_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"hello", 5, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = sizeof(buf[0]); - xcbc_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = sizeof(buf[0]); - xcbc_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"h", 1UL, "e", 1UL, "l", 1UL, "l", 1UL, "o", 1UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } -#endif - -#ifdef LTC_F9 - len = sizeof(buf[0]); - f9_memory(find_cipher("aes"), key, 16, (unsigned char*)"hello", 5, buf[0], &len); - len2 = sizeof(buf[0]); - f9_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"hello", 5, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = sizeof(buf[0]); - f9_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = sizeof(buf[0]); - f9_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"h", 1UL, "e", 1UL, "l", 1UL, "l", 1UL, "o", 1UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } -#endif - -#ifdef LTC_PELICAN - /* TODO: there is no pelican_memory_multi(..) */ -#endif - -#ifdef LTC_POLY1305 - len = sizeof(buf[0]); - poly1305_memory(key, 32, (unsigned char*)"hello", 5, buf[0], &len); - len2 = sizeof(buf[0]); - poly1305_memory_multi(key, 32, buf[1], &len2, (unsigned char*)"hello", 5, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = sizeof(buf[0]); - poly1305_memory_multi(key, 32, buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = sizeof(buf[0]); - poly1305_memory_multi(key, 32, buf[1], &len2, (unsigned char*)"h", 1UL, "e", 1UL, "l", 1UL, "l", 1UL, "o", 1UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } -#endif - -#ifdef LTC_BLAKE2SMAC - len = 32; - blake2smac_memory(key, 16, (unsigned char*)"hello", 5, buf[0], &len); - len2 = 32; - blake2smac_memory_multi(key, 16, buf[1], &len2, (unsigned char*)"hello", 5, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = 32; - blake2smac_memory_multi(key, 16, buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = 32; - blake2smac_memory_multi(key, 16, buf[1], &len2, (unsigned char*)"h", 1UL, "e", 1UL, "l", 1UL, "l", 1UL, "o", 1UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } -#endif - -#ifdef LTC_BLAKE2BMAC - len = 64; - blake2bmac_memory(key, 16, (unsigned char*)"hello", 5, buf[0], &len); - len2 = 64; - blake2bmac_memory_multi(key, 16, buf[1], &len2, (unsigned char*)"hello", 5, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = 64; - blake2bmac_memory_multi(key, 16, buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } - len2 = 64; - blake2bmac_memory_multi(key, 16, buf[1], &len2, (unsigned char*)"h", 1UL, "e", 1UL, "l", 1UL, "l", 1UL, "o", 1UL, LTC_NULL); - if (len != len2 || memcmp(buf[0], buf[1], len)) { - printf("Failed: %d %lu %lu\n", __LINE__, len, len2); - return CRYPT_FAIL_TESTVECTOR; - } -#endif - - return CRYPT_OK; -} diff --git a/tests/no_null_termination_check_test.c b/tests/no_null_termination_check_test.c deleted file mode 100644 index a3d70a2f..00000000 --- a/tests/no_null_termination_check_test.c +++ /dev/null @@ -1,12 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#define LTC_NO_NULL_TERMINATION_CHECK -#include - -#define NNTCT_NULL ((void *)0) - -int no_null_termination_check_test(void) -{ - return crypt_fsa(NNTCT_NULL, NNTCT_NULL, NNTCT_NULL, NNTCT_NULL, NNTCT_NULL, NNTCT_NULL, 0); -} diff --git a/tests/no_prng.c b/tests/no_prng.c deleted file mode 100644 index a612e723..00000000 --- a/tests/no_prng.c +++ /dev/null @@ -1,181 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_test.h" - -/** - @file no_prng.c - NO PRNG, Steffen Jaeckel -*/ - -#ifdef LTC_PKCS_1 - -typedef struct -{ - struct ltc_prng_descriptor desc; - char name[64]; - unsigned char entropy[1024]; - unsigned long len; - unsigned long offset; -} no_prng_desc_t; - -/** - Start the PRNG - @param prng [out] The PRNG state to initialize - @return CRYPT_OK if successful -*/ -static int no_prng_start(prng_state *prng) -{ - no_prng_desc_t *no_prng = (no_prng_desc_t*) prng; - LTC_ARGCHK(no_prng != NULL); - LTC_ARGCHK(no_prng->name == (char*)no_prng + offsetof(no_prng_desc_t, name)); - no_prng->len = 0; - no_prng->offset = 0; - - return CRYPT_OK; -} - -/** - Add entropy to the PRNG state - @param in The data to add - @param inlen Length of the data to add - @param prng PRNG state to update - @return CRYPT_OK if successful -*/ -static int no_prng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - no_prng_desc_t *no_prng = (no_prng_desc_t*) prng; - LTC_ARGCHK(no_prng != NULL); - LTC_ARGCHK(no_prng->name == (char*)no_prng + offsetof(no_prng_desc_t, name)); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen <= sizeof(no_prng->entropy)); - - no_prng->len = MIN(inlen, sizeof(no_prng->entropy)); - memcpy(no_prng->entropy, in, no_prng->len); - no_prng->offset = 0; - - return CRYPT_OK; - -} - -/** - Make the PRNG ready to read from - @param prng The PRNG to make active - @return CRYPT_OK if successful -*/ -static int no_prng_ready(prng_state *prng) -{ - LTC_ARGCHK(prng != NULL); - - return CRYPT_OK; -} - -/** - Read from the PRNG - @param out Destination - @param outlen Length of output - @param prng The active PRNG to read from - @return Number of octets read -*/ -static unsigned long no_prng_read(unsigned char *out, unsigned long outlen, prng_state *prng) -{ - no_prng_desc_t *no_prng = (no_prng_desc_t*) prng; - LTC_ARGCHK(no_prng != NULL); - LTC_ARGCHK(no_prng->name == (char*)no_prng + offsetof(no_prng_desc_t, name)); - LTC_ARGCHK(out != NULL); - - outlen = MIN(outlen, no_prng->len - no_prng->offset); - memcpy(out, &no_prng->entropy[no_prng->offset], outlen); - no_prng->offset += outlen; - - return outlen; -} - -/** - Terminate the PRNG - @param prng The PRNG to terminate - @return CRYPT_OK if successful -*/ -static int no_prng_done(prng_state *prng) -{ - LTC_UNUSED_PARAM(prng); - return CRYPT_OK; -} - -/** - Export the PRNG state - @param out [out] Destination - @param outlen [in/out] Max size and resulting size of the state - @param prng The PRNG to export - @return CRYPT_OK if successful -*/ -static int no_prng_export(unsigned char *out, unsigned long *outlen, prng_state *prng) -{ - LTC_UNUSED_PARAM(out); - LTC_UNUSED_PARAM(outlen); - LTC_UNUSED_PARAM(prng); - return CRYPT_OK; -} - -/** - Import a PRNG state - @param in The PRNG state - @param inlen Size of the state - @param prng The PRNG to import - @return CRYPT_OK if successful -*/ -static int no_prng_import(const unsigned char *in, unsigned long inlen, prng_state *prng) -{ - LTC_UNUSED_PARAM(in); - LTC_UNUSED_PARAM(inlen); - LTC_UNUSED_PARAM(prng); - return CRYPT_OK; -} - -/** - PRNG self-test - @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled -*/ -static int no_prng_test(void) -{ - return CRYPT_OK; -} - -static const struct ltc_prng_descriptor no_prng_desc = -{ - NULL, 0, - &no_prng_start, - &no_prng_add_entropy, - &no_prng_ready, - &no_prng_read, - &no_prng_done, - &no_prng_export, - &no_prng_import, - &no_prng_test -}; - -struct ltc_prng_descriptor* no_prng_desc_get(void) -{ - int ret; - no_prng_desc_t* no_prng = XMALLOC(sizeof(*no_prng)); - if (no_prng == NULL) return NULL; - XMEMCPY(&no_prng->desc, &no_prng_desc, sizeof(no_prng_desc)); - ret = snprintf(no_prng->name, sizeof(no_prng->name), "no_prng@%p", no_prng); - if((ret >= (int)sizeof(no_prng->name)) || (ret == -1)) { - XFREE(no_prng); - return NULL; - } - no_prng->desc.name = no_prng->name; - return &no_prng->desc; -} - -void no_prng_desc_free(struct ltc_prng_descriptor* prng) -{ - no_prng_desc_t *no_prng = (no_prng_desc_t*) prng; - LTC_ARGCHKVD(no_prng != NULL); - LTC_ARGCHKVD(no_prng->name == (char*)no_prng + offsetof(no_prng_desc_t, name)); - XFREE(no_prng); -} - -#endif - diff --git a/tests/padding_test.c b/tests/padding_test.c deleted file mode 100644 index d0447a25..00000000 --- a/tests/padding_test.c +++ /dev/null @@ -1,244 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include - -#ifdef LTC_PADDING - -typedef struct padding_testcase padding_testcase; - -typedef int (*cmp_padding_testcase)(const padding_testcase*, const unsigned char*, unsigned long); - -struct padding_testcase { - unsigned long is, should, max, mode; - const char* name; - cmp_padding_testcase cmp; -}; - -#define EQ(a, b) s_eq((a), (b), #a, #b) - -static int s_eq(unsigned long a, unsigned long b, const char* s_a, const char* s_b) -{ - if (a == b) return CRYPT_OK; -#if defined(LTC_TEST) && defined(LTC_TEST_DBG) - else fprintf(stderr, "'%s == %s' failed, %lu is not equal to %lu\n", s_a, s_b, a, b); -#else - LTC_UNUSED_PARAM(s_a); - LTC_UNUSED_PARAM(s_b); -#endif - return CRYPT_FAIL_TESTVECTOR; -} - -static int s_cmp_pkcs7(const padding_testcase* t, const unsigned char* p, unsigned long len) -{ - unsigned long n, diff = len - t->is; - DOX(EQ(len, t->should), t->name); - for (n = len - diff; n < len; ++n) { - DOX(EQ(p[n], diff), t->name); - } - return CRYPT_OK; -} - -#ifdef LTC_RNG_GET_BYTES -static int s_cmp_iso_10126(const padding_testcase* t, const unsigned char* p, unsigned long len) -{ - LTC_UNUSED_PARAM(p); - if (len < t->should || len > t->max) { -#if defined(LTC_TEST) && defined(LTC_TEST_DBG) - fprintf(stderr, "(%lu < %lu || %lu > %lu) failed, %s\n", len, t->should, len, t->max, t->name); -#endif - return CRYPT_FAIL_TESTVECTOR; - } - DOX(EQ(p[len - 1], len - t->is), t->name); - return CRYPT_OK; -} -#endif - -static int s_cmp_x923(const padding_testcase* t, const unsigned char* p, unsigned long len) -{ - unsigned long n, diff = len - t->is; - DOX(EQ(len, t->should), t->name); - for (n = len - diff; n < len - 1; ++n) { - DOX(EQ(p[n], 0x0), t->name); - } - DOX(EQ(p[len - 1], diff), t->name); - return CRYPT_OK; -} - -static int s_cmp_oaz(const padding_testcase* t, const unsigned char* p, unsigned long len) -{ - unsigned long n, diff = len - t->is; - DOX(EQ(len, t->should), t->name); - n = len - diff; - DOX(EQ(p[n], 0x80), t->name); - n++; - for (; n < len; ++n) { - DOX(EQ(p[n], 0x0), t->name); - } - return CRYPT_OK; -} - -static int s_cmp_zero(const padding_testcase* t, const unsigned char* p, unsigned long len) -{ - unsigned long n, diff = len - t->is; - DOX(EQ(len, t->should), t->name); - for (n = len - diff; n < len; ++n) { - DOX(EQ(p[n], 0x0), t->name); - } - return CRYPT_OK; -} - -static int s_cmp_ssh(const padding_testcase* t, const unsigned char* p, unsigned long len) -{ - unsigned long n, diff = len - t->is; - unsigned char pad = 0x1; - DOX(EQ(len, t->should), t->name); - for (n = len - diff; n < len; ++n) { - DOX(EQ(p[n], pad), t->name); - pad++; - } - return CRYPT_OK; -} - -static int s_padding_testrun(const padding_testcase* t) -{ - unsigned long len; - unsigned char buf[1024]; - - len = sizeof(buf); - XMEMSET(buf, 0xAA, t->is); - DO(padding_pad(buf, t->is, &len, t->mode)); - DO(t->cmp(t, buf, len)); - DO(padding_depad(buf, &len, t->mode)); - DO(EQ(len, t->is)); - return CRYPT_OK; -} - -int padding_test(void) -{ - const padding_testcase cases[] = { - { 0, 16, 0, LTC_PAD_PKCS7 | 16, "0-pkcs7", s_cmp_pkcs7 }, - { 1, 16, 0, LTC_PAD_PKCS7 | 16, "1-pkcs7", s_cmp_pkcs7 }, - { 15, 16, 0, LTC_PAD_PKCS7 | 16, "15-pkcs7", s_cmp_pkcs7 }, - { 16, 32, 0, LTC_PAD_PKCS7 | 16, "16-pkcs7", s_cmp_pkcs7 }, - { 255, 256, 0, LTC_PAD_PKCS7 | 16, "255-pkcs7", s_cmp_pkcs7 }, - { 256, 272, 0, LTC_PAD_PKCS7 | 16, "256-pkcs7", s_cmp_pkcs7 }, -#ifdef LTC_RNG_GET_BYTES - { 0, 16, 256, LTC_PAD_ISO_10126 | 16, "0-rand", s_cmp_iso_10126 }, - { 1, 16, 272, LTC_PAD_ISO_10126 | 16, "1-rand", s_cmp_iso_10126 }, - { 15, 16, 272, LTC_PAD_ISO_10126 | 16, "15-rand", s_cmp_iso_10126 }, - { 16, 32, 288, LTC_PAD_ISO_10126 | 16, "16-rand", s_cmp_iso_10126 }, - { 255, 256, 512, LTC_PAD_ISO_10126 | 16, "255-rand", s_cmp_iso_10126 }, - { 256, 272, 528, LTC_PAD_ISO_10126 | 16, "256-rand", s_cmp_iso_10126 }, -#endif - { 0, 16, 0, LTC_PAD_ANSI_X923 | 16, "0-x923", s_cmp_x923 }, - { 1, 16, 0, LTC_PAD_ANSI_X923 | 16, "1-x923", s_cmp_x923 }, - { 15, 16, 0, LTC_PAD_ANSI_X923 | 16, "15-x923", s_cmp_x923 }, - { 16, 32, 0, LTC_PAD_ANSI_X923 | 16, "16-x923", s_cmp_x923 }, - { 255, 256, 0, LTC_PAD_ANSI_X923 | 16, "255-x923", s_cmp_x923 }, - { 256, 272, 0, LTC_PAD_ANSI_X923 | 16, "256-x923", s_cmp_x923 }, - - { 0, 16, 0, LTC_PAD_SSH | 16, "0-ssh", s_cmp_ssh }, - { 1, 16, 0, LTC_PAD_SSH | 16, "1-ssh", s_cmp_ssh }, - { 15, 16, 0, LTC_PAD_SSH | 16, "15-ssh", s_cmp_ssh }, - { 16, 32, 0, LTC_PAD_SSH | 16, "16-ssh", s_cmp_ssh }, - { 255, 256, 0, LTC_PAD_SSH | 16, "255-ssh", s_cmp_ssh }, - { 256, 272, 0, LTC_PAD_SSH | 16, "256-ssh", s_cmp_ssh }, - - { 0, 16, 0, LTC_PAD_ONE_AND_ZERO | 16, "0-one-and-zero", s_cmp_oaz }, - { 1, 16, 0, LTC_PAD_ONE_AND_ZERO | 16, "1-one-and-zero", s_cmp_oaz }, - { 15, 16, 0, LTC_PAD_ONE_AND_ZERO | 16, "15-one-and-zero", s_cmp_oaz }, - { 16, 32, 0, LTC_PAD_ONE_AND_ZERO | 16, "16-one-and-zero", s_cmp_oaz }, - { 255, 256, 0, LTC_PAD_ONE_AND_ZERO | 16, "255-one-and-zero", s_cmp_oaz }, - { 256, 272, 0, LTC_PAD_ONE_AND_ZERO | 16, "256-one-and-zero", s_cmp_oaz }, - - { 0, 0, 0, LTC_PAD_ZERO | 16, "0-zero", s_cmp_zero }, - { 1, 16, 0, LTC_PAD_ZERO | 16, "1-zero", s_cmp_zero }, - { 15, 16, 0, LTC_PAD_ZERO | 16, "15-zero", s_cmp_zero }, - { 16, 16, 0, LTC_PAD_ZERO | 16, "16-zero", s_cmp_zero }, - { 255, 256, 0, LTC_PAD_ZERO | 16, "255-zero", s_cmp_zero }, - { 256, 256, 0, LTC_PAD_ZERO | 16, "256-zero", s_cmp_zero }, - - { 0, 16, 0, LTC_PAD_ZERO_ALWAYS | 16, "0-zero-always", s_cmp_zero }, - { 1, 16, 0, LTC_PAD_ZERO_ALWAYS | 16, "1-zero-always", s_cmp_zero }, - { 15, 16, 0, LTC_PAD_ZERO_ALWAYS | 16, "15-zero-always", s_cmp_zero }, - { 16, 32, 0, LTC_PAD_ZERO_ALWAYS | 16, "16-zero-always", s_cmp_zero }, - { 255, 256, 0, LTC_PAD_ZERO_ALWAYS | 16, "255-zero-always", s_cmp_zero }, - { 256, 272, 0, LTC_PAD_ZERO_ALWAYS | 16, "256-zero-always", s_cmp_zero }, - }; - unsigned i; - /* Examples from https://en.wikipedia.org/w/index.php?title=Padding_(cryptography)&oldid=823057951#Byte_padding */ - const struct { - unsigned char data[16]; - unsigned long len; - unsigned long mode; - } tv[] = { - { { 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x04, 0x04, 0x04, 0x04 }, 12, LTC_PAD_PKCS7 | 16 }, - { { 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x00, 0x00, 0x00, 0x04 }, 12, LTC_PAD_ANSI_X923 | 16 }, -#ifdef LTC_RNG_GET_BYTES - { { 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x81, 0xA6, 0x23, 0x04 }, 12, LTC_PAD_ISO_10126 | 16 }, -#endif - { { 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x80, 0x00, 0x00, 0x00 }, 12, LTC_PAD_ONE_AND_ZERO | 16 }, - { { 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x80 }, 15, LTC_PAD_ONE_AND_ZERO | 16 }, - { { 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x00, 0x00, 0x00, 0x00 }, 12, LTC_PAD_ZERO | 16 }, - }; - /* we need a big buffer like that as LTC_PAD_ISO_10126 - * is allowed to add 1-255 bytes of padding - */ - unsigned char buf[256 + 16]; - unsigned long l; - - for (i = 0; i < LTC_ARRAY_SIZE(cases); ++i) { - DOX(s_padding_testrun(&cases[i]), cases[i].name); - } - - for (i = 0; i < LTC_ARRAY_SIZE(tv); ++i) { - XMEMCPY(buf, tv[i].data, sizeof(tv[i].data)); - l = sizeof(tv[i].data); - DO(padding_depad(buf, &l, tv[i].mode)); - XMEMSET(buf, 0xDD, 16); - l = sizeof(buf); - DO(padding_pad(buf, tv[i].len, &l, tv[i].mode)); -#ifdef LTC_RNG_GET_BYTES - if ((tv[i].mode & LTC_PAD_MASK) != LTC_PAD_ISO_10126) -#endif - { - COMPARE_TESTVECTOR(tv[i].data, sizeof(tv[i].data), buf, l, "padding fixed TV", i); - } - } - - /* wycheproof failing test - https://github.com/libtom/libtomcrypt/pull/454 */ - { - unsigned char data[] = { 0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; - unsigned long len = sizeof(data); - - SHOULD_FAIL(padding_depad(data, &len, (LTC_PAD_PKCS7 | 16))); - } - - /* zero-length input must be rejected for every mode except LTC_PAD_ZERO */ - { - const unsigned long modes[] = { - LTC_PAD_PKCS7 | 16, -#ifdef LTC_RNG_GET_BYTES - LTC_PAD_ISO_10126 | 16, -#endif - LTC_PAD_ANSI_X923 | 16, - LTC_PAD_SSH | 16, - LTC_PAD_ONE_AND_ZERO | 16, - LTC_PAD_ZERO_ALWAYS | 16, - }; - unsigned char dummy = 0; - unsigned long zlen, j; - for (j = 0; j < LTC_ARRAY_SIZE(modes); ++j) { - zlen = 0; - SHOULD_FAIL(padding_depad(&dummy, &zlen, modes[j])); - } - /* LTC_PAD_ZERO with len=0 must round-trip to len=0 (CRYPT_OK). */ - zlen = 0; - DO(padding_depad(&dummy, &zlen, LTC_PAD_ZERO | 16)); - DO(EQ(zlen, 0)); - } - - return CRYPT_OK; -} -#endif diff --git a/tests/pem/empty b/tests/pem/empty deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/pem/non-tfm/ssh_rsa_4096_openssh b/tests/pem/non-tfm/ssh_rsa_4096_openssh deleted file mode 100755 index 2f069eab..00000000 --- a/tests/pem/non-tfm/ssh_rsa_4096_openssh +++ /dev/null @@ -1,49 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn -NhAAAAAwEAAQAAAgEAo6FKkV/bSemFY/hO2NA/aMtkglLaC5jaqLzDnP21gfhYPBoBEDaf -fV7x+qfv1wyGODJvdUPaNa8nVpwJxyrP/SzskqTlDW235Q7BbLTfGa6qsrj4iKGamsEL2H -sZNP9GcjXJAPX1gCmQyaJtTeQ7rQSueQ4KuNMh5KQAep5anVi2PCGm9FeCyk7TQRsna3T0 -fANdCOeJA5BccfNjTmTSfYau0GGCQ7C+S3v3wfj6iJLD+aqNpX2jyXvcbce5uPhSCUUEDi -6xXn/ytLTtWb9FOXVTR5llockzeLZ8KBF+KWe2JBx3pnARYl+Mbe9P86bxuXLiDzMCSAOT -+9sOwOYnykqEy65EBsu8lv3s8sa5uNjYOYzUG/o7IrkIXJ1PyCoqe8TtSts8Uj4XMA0USD -xhsJAnzK6+TxuBFZ/TyQnlv8nUKTpuMrCWsvAGcckKIT9Y0WrLrPqlBqLzhw+q44g64NJQ -6SWOwn+hLT1P2dBhcn+VmOPedpUYmsCFy4tFTgHsRv7P5/niIsE4hTrZ5lEY0Yyyd05ZFc -vwvSMOkwWibBfQ1vzDeAXmDEgFaHVY6lici0HO7pW8poLjLjZ5IQ40NV0dElzcPX80/ZRP -jQvhDsMcrDrvsvRK1epQPJhMcLZrv2vcx1J8rp11M/GVRYeplIT9E3O1/xf0Nl008c8wuI -8AAAdQ1ei8ZNXovGQAAAAHc3NoLXJzYQAAAgEAo6FKkV/bSemFY/hO2NA/aMtkglLaC5ja -qLzDnP21gfhYPBoBEDaffV7x+qfv1wyGODJvdUPaNa8nVpwJxyrP/SzskqTlDW235Q7BbL -TfGa6qsrj4iKGamsEL2HsZNP9GcjXJAPX1gCmQyaJtTeQ7rQSueQ4KuNMh5KQAep5anVi2 -PCGm9FeCyk7TQRsna3T0fANdCOeJA5BccfNjTmTSfYau0GGCQ7C+S3v3wfj6iJLD+aqNpX -2jyXvcbce5uPhSCUUEDi6xXn/ytLTtWb9FOXVTR5llockzeLZ8KBF+KWe2JBx3pnARYl+M -be9P86bxuXLiDzMCSAOT+9sOwOYnykqEy65EBsu8lv3s8sa5uNjYOYzUG/o7IrkIXJ1PyC -oqe8TtSts8Uj4XMA0USDxhsJAnzK6+TxuBFZ/TyQnlv8nUKTpuMrCWsvAGcckKIT9Y0WrL -rPqlBqLzhw+q44g64NJQ6SWOwn+hLT1P2dBhcn+VmOPedpUYmsCFy4tFTgHsRv7P5/niIs -E4hTrZ5lEY0Yyyd05ZFcvwvSMOkwWibBfQ1vzDeAXmDEgFaHVY6lici0HO7pW8poLjLjZ5 -IQ40NV0dElzcPX80/ZRPjQvhDsMcrDrvsvRK1epQPJhMcLZrv2vcx1J8rp11M/GVRYeplI -T9E3O1/xf0Nl008c8wuI8AAAADAQABAAACAHAjDAg+qfioSZruQ5LAfIQjx1is0PNbqJY0 -7tW65VYRzN47b/kdhgWUOL7vsiUtVxpSLiIuAvABfjMTsnvEsk8uJ16EFNk0FO+sQhBuj+ -p40lCzBNgV7+8YVzbffbHdM/j3NS4sYTeYxLn6T3Au9lqnN66MWfq57qNTZWSi+zST5Cen -ZFRVWLOue4ZFxqkUuKv4XhzJGBPSLhiFlMvXuoz97PWvrWcYTAFNDsjnCULpWdbS9Emypb -lh4fl2A6hovUfO/W1+wF0j0D/ZMkPsGdO7vPv3ezf5vAWBAesvucdEZQWwYKs2aCODmaiJ -dcBj64qM2bFS4sBZe2QBhsXZtPALnv+Ro0O/t+OUebPHCDIur9KC41TdzvZjuu+jPiOaiL -3v3g19xSiPxFPIF+8gHqu1FVfexM6HPw/d3guHzF6mK0TnKxThN0Ixa+wDQhf+vXKKWaP4 -I8RIzfOJLBR3fVAeQGANgXFF+QOnSKV1NR8Nh/q0uzuTnl6OwIV12fw+9vMy+FEMuZK2N1 -QEJ8YO44CGOaKCG7CRLbrD8BD2d1nqIABWAMSTVmAxCF9XV1pY03mLGHrRBVmBc/9zkinK -KQ8pQy3aqZ6aaUkO7K43msAecU+emX80a+UtpC0WcXFefbg2wy6zeodJ8vxMmRcRXxleIF -dHuqxoxn+bnEH9vP2RAAABAQDCfrnajeYRIgxxOcDIKyPQ8HZ/SMxxXzff4J/330b7CDfT -L2MXCtFITz0Pzx/hl4D2CQxGK0QvfhyZpCLPsf8c1srH7dPj8hZpQOQRIPLV7D6gaQ5Si6 -XfD1qJsHzePe2S3b94HhB83HWTnPu4rF+tEPYdESdBR/aQsAF07oYoXW0Sp0aBSFckksWG -yuuOJOk1udyzv48Ruq6URyM49p9kzLPZEcKeQNzjdgzO5/YEu3yPJOPl/WBpUwX7DtFSdm -OGUhWW1d3ACukSFPHKQLP9ncMnrdU4ytyfPC03MK77uEObwUY48oOLf8Ec6vqkgnwtQSr8 -GKPy03Vy+L9E+aFwAAABAQDTbPuTCLj8ayEZlxJnkhSTY6fEGfCYialihwbeQQtkDCgsap -h6tXDwkW8aY+QbCVduseDfi2Y4KY/Glx3oDyUGG5OYM7w5b5LWtaou5iF9X/U9g5aPVh62 -coChGYSprs+c9k9/a6R5irSAPMI5Di0HAoGqnBrSusbFqEgbAJaHzjIqCif+lnq2ObiGvQ -ZpkX7IrXcLLvgiIA5VdigLeqxW+O7lCqXrOTg2xfWmPwSQuZBzjhPndEGjCyQGVf97r8fj -bNLFsWeudmr5wSH1tNhwdk+HIyCDN63HXx2VmKXkHWAqG8OkqjldiIUa5zxLz/ghfF2wo3 -BLYGIo0IHo6yuZAAABAQDGILE58ZcsZ81t1qRDENuhJlZLuTI4gEEPCymPQmhvKJ+j9L0P -SEmZpThDBPtzfNcIHOOJxSaMoyAz19543usM5Z0GJGR2o5kAYLbThV/2MqZcB/2DBuzSj/ -flfLu3tBmUD48lDGvnq+KuWw+IQ0gZwxmFusL0+e+m/Z02HwFsFsMCaJ/s01t7pHL0q9DT -CjmdEjcF2XbJsWzCmeltNjr3K3Ec3Ni3KpgHJPbtxixj59KRF9rzl71NzEgLwE9NBOhOeb -va6HVQ1s/L+GbPX9OSIgtJDPE1dvERDbUtRCYz7BoF5Cm+sr667sX+doVXSdf1B1+tBoe8 -AK2Ko29NEF5nAAAAE1RoaXMgaXMgYSB0ZXN0IGtleSEBAgMEBQYH ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_4096_openssh_pw b/tests/pem/non-tfm/ssh_rsa_4096_openssh_pw deleted file mode 100755 index 2484fb04..00000000 --- a/tests/pem/non-tfm/ssh_rsa_4096_openssh_pw +++ /dev/null @@ -1,50 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDsZi+Ml8 -cPCAbWmdYXbDrmAAAAEAAAAAEAAAIXAAAAB3NzaC1yc2EAAAADAQABAAACAQCjoUqRX9tJ -6YVj+E7Y0D9oy2SCUtoLmNqovMOc/bWB+Fg8GgEQNp99XvH6p+/XDIY4Mm91Q9o1rydWnA -nHKs/9LOySpOUNbbflDsFstN8ZrqqyuPiIoZqawQvYexk0/0ZyNckA9fWAKZDJom1N5Dut -BK55Dgq40yHkpAB6nlqdWLY8Iab0V4LKTtNBGydrdPR8A10I54kDkFxx82NOZNJ9hq7QYY -JDsL5Le/fB+PqIksP5qo2lfaPJe9xtx7m4+FIJRQQOLrFef/K0tO1Zv0U5dVNHmWWhyTN4 -tnwoEX4pZ7YkHHemcBFiX4xt70/zpvG5cuIPMwJIA5P72w7A5ifKSoTLrkQGy7yW/ezyxr -m42Ng5jNQb+jsiuQhcnU/IKip7xO1K2zxSPhcwDRRIPGGwkCfMrr5PG4EVn9PJCeW/ydQp -Om4ysJay8AZxyQohP1jRasus+qUGovOHD6rjiDrg0lDpJY7Cf6EtPU/Z0GFyf5WY4952lR -iawIXLi0VOAexG/s/n+eIiwTiFOtnmURjRjLJ3TlkVy/C9Iw6TBaJsF9DW/MN4BeYMSAVo -dVjqWJyLQc7ulbymguMuNnkhDjQ1XR0SXNw9fzT9lE+NC+EOwxysOu+y9ErV6lA8mExwtm -u/a9zHUnyunXUz8ZVFh6mUhP0Tc7X/F/Q2XTTxzzC4jwAAB1CnkBRGe3lBHJvgjlhTh6MO -XwJ8EPoynE5uj4qWWdnZFgJll/m0fUbzPsTyXjOtxfQcfVuJf94plfKbP860JvJ0i7qaSC -MimbiWFqH/kyzK7qhHXcV6PRRjCXc41LsfRwT95JrLK8UFkfHAih6bKw2vwuxRwDtsNDHH -Tmr9i3KYg18RSfwMYJ2mdxRq8zRweHvJdXFezjUv6r4mtGPEVYWoGTcWCthwXm8RV76LzB -e89RuSxSS0cDlr+VY3bjckgsMR1WPwXPjO81VvZl/SAo2zjiTeGoH9x81v8WXoQtlSZp1p -O2O3VOfOEEpWmJUjqbbaiQXqEt9upEjYlPQJQwYU2O95ZjIr3hRzuHpbUIAwtoBaB67UCU -nxUGgPWtiIyHyUb2rSveQU8liU6vzImYyxUPSV7NUoZf2GgWpg3hNoWbtYYZPsHOYHoTTp -0GlQitJ6gFM5KxRJia5cTatkORe0/2M3TmhR9ZvJ2xvmjEi3DNxBC5YzRx3nBg2LLwZywS -fTw9KTEs9X99v84cUMVi/KD5jueNx/RnYisUj+hGPKQQnL6kbnSdSkW0m3SGDSCkLgLrwh -f5WWX9hOhpeUWLIawECrjR/+LvxWlpfjA3vaF4JSqua9vB47+c24H/p7Ugtn6CBW2GQKL7 -CqLgct+FNV8kuRCjXnZrSPRkTI9Z/K5wDcQjqtzw9ry6LiQIzTqOgqUFNNnUrp/NgoQs+H -l0+0ju8wKGrgH+3xCBBsEajD5a3M/D1BnvrezBGzzbM2pyT3fYgR8kib+XqGdEFBs73rVu -p94ZZ7YiXRwc7ylIpeNu903Kn4wqbu5fP90Qr5b5S5v5ohJYG/l19gq8u5sHsZTp8B4LZ/ -ifXQutxZafjfZHjqCgRVbSFGJQKmtfl0NVboBG3WlUUHaWHrT8TvhVj/5ZeHJjBbLxPD6l -09pajclzNCNKwgWpuDZOGn7FGAqjlzpZ0UQ1VIvAIUzscAUgolgleY8yuhMsc8V7l68mu1 -X/datYqzqer2iyMTn1W1L8aDlF/lxOOY8myF7d4KlW/G+Fh2BmxhNKDuaGFjdBcY0YYOwT -M7dJU6dtRhs9SnKqIyon7h1O4HXpQVYEatLf2UHECpMPCfq2WSFbhf9+Ml6AyRdPIecpKo -zB6fPbWivhYH9smUK0qvPcqbQAW6luxw1YWMMRjNpgtWqhpknTonlHOoe3daO+TESpmIX1 -CUalDlJVkwl4kY2Kveg0i0KiBh7aGVY42oYZiMq9YMDLyyWofgdX4zv6lqvw+1kyom4gLf -IeRIicTO/nLyrksiDFr3G7J/4+lzx0Jvicgt3Db7d2gKthod1W1Gi0cfYrDT4ZfFbaJH+W -QH39tFsF8HHO4OQ14DWC9fKdNpGEZrnMRHbCPmd1VHoRNlgAt8kyLNOdLV7zw//mqBIIUL -mUE4XniI++MNTDVeO6LsXFHFb3McwnqS7dRKkefCdIujc1T2j6UdsoJZR6pGgZqgMTnB0Z -rNk5bN1B8V8qw1gi/jz03wCBBEvEJ1oZtAtbTQ8NfmiaFC3LGzaFyKeOus5o7P+7RSJkwG -t/d/QT8CqCdVIidRllLxaBEOnndEHUqQkhGuQMEolO4C2TtTixbiMeJOt/KWOIf2KxIR4P -vZSx70SEmIW1bEeQK+kQt5lYTr0ytxG2ELUuIz5UaFzisUP0WwtVgnMJBatIEjWWR1n3kD -GwG73dzBCVSV6ccdTPMifMNGBdveRgrtNKWDD0vv8uBLpiGGdaqUHFCdPkTqMUJJwqwyBl -MrHxg5N+eJx+Qvz6lWEw1oxnKLLTATMCSoxa2zvBJo28d8EXVuUoOerNqb4MoBkVu1t3BS -QlhtfNGJuQfe2DUkheOVmDds4uO8QHSr8d52rvaYMulYJsbDotQOim/xuGNH9CG7OAJ9LP -5rZ9oF8YELcnrmImuxkLeIRmLcLK6v967Rn9iex6Jxa2iXbdJQPCJmNYMcZlgjLFY8YWCS -c5XqV7UAM10I0NjYwBVkKyEQb0uoegmYzntDJYGFym4A2gbC9oCQG+Lyqgswsvzwt92yOW -h39QtlU+HvJE/PkyIEmykfbaFRpzNwxprmEy0UcIPLH3xMgOzNxsnrZtcBKMNS6oRXXMVe -UnzLxlYv2ZLJLMqqyjNWWg0vMA2dVBVW3JuHXUfCWIbPDCZFvRs/xQcMEjscHxGU8G804p -9GOwuypOZWuCMAByuAigL6cm732fA4neu2zHxFpo1cA5PIaba1hotyYxJYeuuT02XiK9Jx -WNzvHHKTHHYjCqeydvEKPx0H3s7HxUnT3J1BqcerHcXmpCLqJ/ukMvmrxkHWbE6mstRwvD -9cVW0WqSGoV0eJtomjXZmPpi2571mKkY4KiSRbizXV3113Pen6xIWOUgd1RqB9WkElix52 -JUkyBItXIKvvsqQGECpD8yrwxOQRqm4MMUMTMhXBCSAMT56mAfC50iTHVjGmY+t9tfJ1LL -eF7XqLa7SIo0XBe/NQOsuEVlQ= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_4096_pem b/tests/pem/non-tfm/ssh_rsa_4096_pem deleted file mode 100755 index 0ec9e29a..00000000 --- a/tests/pem/non-tfm/ssh_rsa_4096_pem +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIJKAIBAAKCAgEAo6FKkV/bSemFY/hO2NA/aMtkglLaC5jaqLzDnP21gfhYPBoB -EDaffV7x+qfv1wyGODJvdUPaNa8nVpwJxyrP/SzskqTlDW235Q7BbLTfGa6qsrj4 -iKGamsEL2HsZNP9GcjXJAPX1gCmQyaJtTeQ7rQSueQ4KuNMh5KQAep5anVi2PCGm -9FeCyk7TQRsna3T0fANdCOeJA5BccfNjTmTSfYau0GGCQ7C+S3v3wfj6iJLD+aqN -pX2jyXvcbce5uPhSCUUEDi6xXn/ytLTtWb9FOXVTR5llockzeLZ8KBF+KWe2JBx3 -pnARYl+Mbe9P86bxuXLiDzMCSAOT+9sOwOYnykqEy65EBsu8lv3s8sa5uNjYOYzU -G/o7IrkIXJ1PyCoqe8TtSts8Uj4XMA0USDxhsJAnzK6+TxuBFZ/TyQnlv8nUKTpu -MrCWsvAGcckKIT9Y0WrLrPqlBqLzhw+q44g64NJQ6SWOwn+hLT1P2dBhcn+VmOPe -dpUYmsCFy4tFTgHsRv7P5/niIsE4hTrZ5lEY0Yyyd05ZFcvwvSMOkwWibBfQ1vzD -eAXmDEgFaHVY6lici0HO7pW8poLjLjZ5IQ40NV0dElzcPX80/ZRPjQvhDsMcrDrv -svRK1epQPJhMcLZrv2vcx1J8rp11M/GVRYeplIT9E3O1/xf0Nl008c8wuI8CAwEA -AQKCAgBwIwwIPqn4qEma7kOSwHyEI8dYrNDzW6iWNO7VuuVWEczeO2/5HYYFlDi+ -77IlLVcaUi4iLgLwAX4zE7J7xLJPLidehBTZNBTvrEIQbo/qeNJQswTYFe/vGFc2 -332x3TP49zUuLGE3mMS5+k9wLvZapzeujFn6ue6jU2Vkovs0k+Qnp2RUVVizrnuG -RcapFLir+F4cyRgT0i4YhZTL17qM/ez1r61nGEwBTQ7I5wlC6VnW0vRJsqW5YeH5 -dgOoaL1Hzv1tfsBdI9A/2TJD7BnTu7z793s3+bwFgQHrL7nHRGUFsGCrNmgjg5mo -iXXAY+uKjNmxUuLAWXtkAYbF2bTwC57/kaNDv7fjlHmzxwgyLq/SguNU3c72Y7rv -oz4jmoi9794NfcUoj8RTyBfvIB6rtRVX3sTOhz8P3d4Lh8xepitE5ysU4TdCMWvs -A0IX/r1yilmj+CPESM3ziSwUd31QHkBgDYFxRfkDp0ildTUfDYf6tLs7k55ejsCF -ddn8PvbzMvhRDLmStjdUBCfGDuOAhjmighuwkS26w/AQ9ndZ6iAAVgDEk1ZgMQhf -V1daWNN5ixh60QVZgXP/c5IpyikPKUMt2qmemmlJDuyuN5rAHnFPnpl/NGvlLaQt -FnFxXn24NsMus3qHSfL8TJkXEV8ZXiBXR7qsaMZ/m5xB/bz9kQKCAQEA02z7kwi4 -/GshGZcSZ5IUk2OnxBnwmImpYocG3kELZAwoLGqYerVw8JFvGmPkGwlXbrHg34tm -OCmPxpcd6A8lBhuTmDO8OW+S1rWqLuYhfV/1PYOWj1YetnKAoRmEqa7PnPZPf2uk -eYq0gDzCOQ4tBwKBqpwa0rrGxahIGwCWh84yKgon/pZ6tjm4hr0GaZF+yK13Cy74 -IiAOVXYoC3qsVvju5Qql6zk4NsX1pj8EkLmQc44T53RBowskBlX/e6/H42zSxbFn -rnZq+cEh9bTYcHZPhyMggzetx18dlZil5B1gKhvDpKo5XYiFGuc8S8/4IXxdsKNw -S2BiKNCB6OsrmQKCAQEAxiCxOfGXLGfNbdakQxDboSZWS7kyOIBBDwspj0Jobyif -o/S9D0hJmaU4QwT7c3zXCBzjicUmjKMgM9feeN7rDOWdBiRkdqOZAGC204Vf9jKm -XAf9gwbs0o/35Xy7t7QZlA+PJQxr56virlsPiENIGcMZhbrC9Pnvpv2dNh8BbBbD -Amif7NNbe6Ry9KvQ0wo5nRI3Bdl2ybFswpnpbTY69ytxHNzYtyqYByT27cYsY+fS -kRfa85e9TcxIC8BPTQToTnm72uh1UNbPy/hmz1/TkiILSQzxNXbxEQ21LUQmM+wa -BeQpvrK+uu7F/naFV0nX9QdfrQaHvACtiqNvTRBeZwKCAQAr5m02UpFWmEf/MEc6 -CjMLh53GMjyq76qkMrVSYN8knwGYd2nB0PrqeMhBCozKsF3fNkAjKqbG8ppP+gDT -tpFRe1hiOhvTMT+kJYR4yIAbsFkTtMcGbDNkXtImoU3SjeG+DcbkBk3Yjtx75CHQ -BwmCcxrJejB3oSC02gRe1vhqqn3wDLvROR2xyLpv/7/dG8DfmmUlhVMwgsd3J1mZ -SJeQV5ADLvrUpMTvWptvMZaZFm7QD6hCXvliCWYpiqHJ5O30YxxAwF1u9FeyFFAg -3LQ0ZdyNitWtaVpEE5PpBBEuFItrMuikwFO5ACfjNjBm7X/wNAqgKs+eVx0KrIDN -BEfBAoIBADsszIIX7CTxI+QodYsqX86z2pZnS96gP840cUc+eF6q7XNUx5rm5kSj -mjg6JrgJk1fy+OrPHYJnvlh9ow7K1b1WXx3UhMUCe9InELQAY/bujc1y/X7C9Ly3 -Dz1VkeN+QR19wC06loftSJj2zZ7PKZu4L8lHTK9Kbw+bM/dUL2KPMdNoWEutnOdC -6Kq3HnnJ1gdZx2FR4C7BdVByE8vwpI/qQ7BxLbEXYazQl4fQ5rU4KiX30AdtTLcN -yn7oA0dnrdKyfS8WuuNYJVwwZtSNNG2zCVfaK7jiO4HybCiG8DoVzHfx+53fWSQP -6Mbls1Gs1nlyqFrPVn8KXMrJoZaMywUCggEBAMJ+udqN5hEiDHE5wMgrI9Dwdn9I -zHFfN9/gn/ffRvsIN9MvYxcK0UhPPQ/PH+GXgPYJDEYrRC9+HJmkIs+x/xzWysft -0+PyFmlA5BEg8tXsPqBpDlKLpd8PWomwfN497ZLdv3geEHzcdZOc+7isX60Q9h0R -J0FH9pCwAXTuhihdbRKnRoFIVySSxYbK644k6TW53LO/jxG6rpRHIzj2n2TMs9kR -wp5A3ON2DM7n9gS7fI8k4+X9YGlTBfsO0VJ2Y4ZSFZbV3cAK6RIU8cpAs/2dwyet -1TjK3J88LTcwrvu4Q5vBRjjyg4t/wRzq+qSCfC1BKvwYo/LTdXL4v0T5oXA= ------END RSA PRIVATE KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_4096_pem.pub b/tests/pem/non-tfm/ssh_rsa_4096_pem.pub deleted file mode 100755 index 3d189b1d..00000000 --- a/tests/pem/non-tfm/ssh_rsa_4096_pem.pub +++ /dev/null @@ -1,13 +0,0 @@ ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAo6FKkV/bSemFY/hO2NA/aMtkglLaC5jaqLzDnP21gfhYPBoBEDaf -fV7x+qfv1wyGODJvdUPaNa8nVpwJxyrP/SzskqTlDW235Q7BbLTfGa6qsrj4iKGa -msEL2HsZNP9GcjXJAPX1gCmQyaJtTeQ7rQSueQ4KuNMh5KQAep5anVi2PCGm9FeC -yk7TQRsna3T0fANdCOeJA5BccfNjTmTSfYau0GGCQ7C+S3v3wfj6iJLD+aqNpX2j -yXvcbce5uPhSCUUEDi6xXn/ytLTtWb9FOXVTR5llockzeLZ8KBF+KWe2JBx3pnAR -Yl+Mbe9P86bxuXLiDzMCSAOT+9sOwOYnykqEy65EBsu8lv3s8sa5uNjYOYzUG/o7 -IrkIXJ1PyCoqe8TtSts8Uj4XMA0USDxhsJAnzK6+TxuBFZ/TyQnlv8nUKTpuMrCW -svAGcckKIT9Y0WrLrPqlBqLzhw+q44g64NJQ6SWOwn+hLT1P2dBhcn+VmOPedpUY -msCFy4tFTgHsRv7P5/niIsE4hTrZ5lEY0Yyyd05ZFcvwvSMOkwWibBfQ1vzDeAXm -DEgFaHVY6lici0HO7pW8poLjLjZ5IQ40NV0dElzcPX80/ZRPjQvhDsMcrDrvsvRK -1epQPJhMcLZrv2vcx1J8rp11M/GVRYeplIT9E3O1/xf0Nl008c8wuI8CAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_4096_pem_pw b/tests/pem/non-tfm/ssh_rsa_4096_pem_pw deleted file mode 100755 index 527163ff..00000000 --- a/tests/pem/non-tfm/ssh_rsa_4096_pem_pw +++ /dev/null @@ -1,54 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,E8CCE89C1882B2018C2B6C62759562F5 - -t86bjSrE+zRoSSlM5nIpX9zOnPvctVGKm52+SrwIyI/1A3xH9MfJ2ATwmgRR5bRe -1v+855s3K1M6S8cn9wpoih4I71tVPQ0oIBgQa8/jUam7cI+Ye0BDx5r124B2PVsu -QtFVPAMvUfZ7LXAwnPHxfMznJXmW2nhI86rYZYbhOFv+63F1KI4goBdlkAtNPtnW -NiMHWfUQQ0a02IngWxniIbcQ74ZgGYvsgs3ogeMBZ2QHjXakIizLpFndCoUu39z+ -UfrG7d+6D3azJW4/d1AUpKkNxyiVAJ8/sVkwIM6CcnCfWPhakWMcqOMyelBxAd2B -WOQnHqSIbPgAO4iGvImAaRQSEKh4ZZb2Ulb0Ol7TaU3LAUIdbYs2Q5IhmvaoXWsa -8LTBE8VmQ5Duaf38353ZmqMADne/yClaoW0DQJy8tbgbUuQK2DgUg1CFitT6zAoV -UFjVOPTBFiYyWlO9igdajm2deSWFbaJCtqvGMvP/oCiFDCQU8EELRVDIxRKzdKFK -mt5crHdhqqUChq7TYzDLqPeCWixi2tFQImp/1XGFloEmpQs50wEFChXMxCMwso24 -Ic7F2xByMdlWM3IM1/523QQ4urqEKeyd9o7j+rF/EUdtx+0PLhCjgxgvs8ZAzdkZ -nUh97ec0ttPCCYgorvFUMIlbWy9cLWA9Viq2NlHB14wy2+draSjGl9qY0q5ecieh -/ih04So8YDGf10R7WH+UFCwXEN4gDrtzAbnx3eIY36q96Y14QjS6rssC/AlQJk0B -M48WOndoa0fdOXvSjStkjTd+zHfs5dr1hYBuZLfI49/TpobysPjK8V+farhi4aWd -peCOcbUbmU9+Y49t1sxuDpINXs9tqJ40wuaSe4k2n0Qn8yt3Ud7tJLtVmvZ1Gg1g -BMouWXbT+lD0P1CDlkl4lzAXJSTigkXMFEt2HoxaY98seJCzXFNcZTqgHl/ATxHC -PGYF3KteOALZsnmBExm8HGE0doUSmo+20W5Uh67Wy8/9A8g7EyQ4IoFECf5gqdw8 -MFLEdkEgWxiANzb/Ksp0RzlmKhdNBpfglOV156Vt2r/uTDGpdoqvML7jT+OG+4Cm -K1kAfV4PGslNXTl/ziErlJ4pxOZJL+OpxpiYs2b7VUWVLo5Sa4N/6Y+lope4o9Y7 -mg38oiNOL2zRhRaC4rfEQyvrEFeES4xBZiiUQd07JzwxHD+YtXLcei7bwi3YVBDA -WTK5oCyIWvuslIFcqoCKlLh0+yOfjF+ecyBxIb8PF7ISdoWRYQWeJhFeVIJR09zU -FYv8GVKihHrG48J4Vy28wDPE9XH8TDzuELyVLLwev9h8CftblxYGDZLvHwhEuR6N -GqxuuLaOZcxuLFV/C0hPedfW0FVYG9OG45r617lWN3l1plH44d7PaKvFQpI3FauC -wWIPmkD6Romi2oBC2LvbZcNf52a29oAp3SyB0XXbTMkHqUqFShRJ4ohUUsDOU1N9 -3aKwLVcZoOb1yCynP3TBUA9//t+cRH1ihbfLs38AYZsk7W72vQ5P8w2hknWQmNyJ -QA0a2xMPHPeUA/j+NIofa+RRxR+J4yl+sY4t8qdtwFfvZuI9Bn301WF1KcXn4VER -Y+5vE6cObaLGu5xbbpgbPaHDOjW8pDQZ0qhIouQQIhZEqkJqGhtopjjfJfxvWyrk -4lusaOjg8KWzTMSEqS+Wc5AiaigM4ZfutHPjvynPPnIw47ersZwxTfvWv0zEyNve -xJluj2CBOxuG+B6zt8AKJmBGJrehpZ+b0UFiHqosgZHXleW4ruVPnYUIwD7outhr -BrSR3pFwIWJHAmI71UCJm9SjU6psl+WyV46O2BWX+D55QGg8GQTbob2UVsW8v/KB -2/A92GQR1Ozrl+TXNYTVWGu73mDC3l2ZmNaFeYP4OyVJ5GtYORq8FuEGgtezE1tD -RlBMgkOeS6X4ThGnwqYRJrIgjHOhpk8LPvFzSHjjfDMmWwns9bdnV6zXsrZowGnv -tsYtMEzuaMt/xFQQRUcUHmrVHdkH1O7TM5uR3+8c7Z9X/gxWCswXqifku6NS3wAR -q8uLholVN3lvEailMzU+1/WLGkDBHYqhfMB6gQB7qigdAhcjemqNgc9qHAMs3kz/ -iYMI1j2xamCwzR6CjV1P+O1aSzWdzrlzzPWQoSH9xq3TN4urAGHKTU0Vy0oawya+ -ifsyderqNiww+3d4MpGcgj9nQM0O9xJSdVHB50M9TwfZiAh6UzyfIkMGeizJ38q2 -Z0itpoR0fdP/LqBXNzYwc38YH8+xw6pERH3cPPUAn0sMp0+u+90ce7lW5dCCwl3J -UBUv5NdM2hGvUTwoGYRKW28mss+zwqeq+lB9aJD5q+UDO/xEgm1LgpXHnxPiq0vw -IFo/pOjUn61encDN3vfG7Srk+CMuNAaZN6CFvdj5eEFBfAQ7c0epO0ZGBBGZboWn -W/9amLGlLLjMpKSXqYZO7fezCUWKmfq1qQAZI9lF2zlBra4e/4RAx/EvqY8K85Sd -m3Ye98I36onVSOXakCk4D+YPi7rzXPO0RnuWSjv3RpEu9tpV/E2Dc8bYjmXRKUw9 -icF3IeTmKuV2ByzyaZOR0YLFdePeQa6rQVPNJ52XwolUDhwcQjmqjGdwW9lz2RBS -t3EBOJVgdilCmkInXVWMInqXdAa/5CQ5zqSnFlW+LoIFcbIguTAfU7U4SFu7CPBA -xEXBVPvHCdgnbgceg4aCZkTZS5TLTkUj+cDyscZGpXoy/MGer5VcxxGMXHInW4wf -USuHKpg3+kb7rfR8HUPaHh76/GifFWurkE2I/J5C1jKXHtTSlC30i4xmFAWRY9W8 -XbApcRQK3K5WV39S2HSEGa0ZWofl1L8hN9SOvt8lQ6iAcggRWcdw8S3cjQMe/z0m -QHTCMpyorxFht8Q0qqw+Pex+8P7QMjjG3f3jDlQCsN9qTM4kQk7esHjAppQ9qttU -749ZJjbP91n9eAo8C4BASuIve+ACGQZg7vBvUy+qdumyzFDDc78hpvwhHk4uQ9u2 -Vlx2/KbrQv5snYVCHN76P6Rj0UpMpUA9ujZIhQPcjH8RWf17sQ8zXtcssD30AelR -scrfgKLK4Wjxbez2r2oMQQTWV64o4GuYJx/8m/j1NLOlkdC8QyyQ3L+l9Bba2jDK ------END RSA PRIVATE KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_4096_pkcs8 b/tests/pem/non-tfm/ssh_rsa_4096_pkcs8 deleted file mode 100755 index a5cfe2f5..00000000 --- a/tests/pem/non-tfm/ssh_rsa_4096_pkcs8 +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQCjoUqRX9tJ6YVj -+E7Y0D9oy2SCUtoLmNqovMOc/bWB+Fg8GgEQNp99XvH6p+/XDIY4Mm91Q9o1rydW -nAnHKs/9LOySpOUNbbflDsFstN8ZrqqyuPiIoZqawQvYexk0/0ZyNckA9fWAKZDJ -om1N5DutBK55Dgq40yHkpAB6nlqdWLY8Iab0V4LKTtNBGydrdPR8A10I54kDkFxx -82NOZNJ9hq7QYYJDsL5Le/fB+PqIksP5qo2lfaPJe9xtx7m4+FIJRQQOLrFef/K0 -tO1Zv0U5dVNHmWWhyTN4tnwoEX4pZ7YkHHemcBFiX4xt70/zpvG5cuIPMwJIA5P7 -2w7A5ifKSoTLrkQGy7yW/ezyxrm42Ng5jNQb+jsiuQhcnU/IKip7xO1K2zxSPhcw -DRRIPGGwkCfMrr5PG4EVn9PJCeW/ydQpOm4ysJay8AZxyQohP1jRasus+qUGovOH -D6rjiDrg0lDpJY7Cf6EtPU/Z0GFyf5WY4952lRiawIXLi0VOAexG/s/n+eIiwTiF -OtnmURjRjLJ3TlkVy/C9Iw6TBaJsF9DW/MN4BeYMSAVodVjqWJyLQc7ulbymguMu -NnkhDjQ1XR0SXNw9fzT9lE+NC+EOwxysOu+y9ErV6lA8mExwtmu/a9zHUnyunXUz -8ZVFh6mUhP0Tc7X/F/Q2XTTxzzC4jwIDAQABAoICAHAjDAg+qfioSZruQ5LAfIQj -x1is0PNbqJY07tW65VYRzN47b/kdhgWUOL7vsiUtVxpSLiIuAvABfjMTsnvEsk8u -J16EFNk0FO+sQhBuj+p40lCzBNgV7+8YVzbffbHdM/j3NS4sYTeYxLn6T3Au9lqn -N66MWfq57qNTZWSi+zST5CenZFRVWLOue4ZFxqkUuKv4XhzJGBPSLhiFlMvXuoz9 -7PWvrWcYTAFNDsjnCULpWdbS9Emypblh4fl2A6hovUfO/W1+wF0j0D/ZMkPsGdO7 -vPv3ezf5vAWBAesvucdEZQWwYKs2aCODmaiJdcBj64qM2bFS4sBZe2QBhsXZtPAL -nv+Ro0O/t+OUebPHCDIur9KC41TdzvZjuu+jPiOaiL3v3g19xSiPxFPIF+8gHqu1 -FVfexM6HPw/d3guHzF6mK0TnKxThN0Ixa+wDQhf+vXKKWaP4I8RIzfOJLBR3fVAe -QGANgXFF+QOnSKV1NR8Nh/q0uzuTnl6OwIV12fw+9vMy+FEMuZK2N1QEJ8YO44CG -OaKCG7CRLbrD8BD2d1nqIABWAMSTVmAxCF9XV1pY03mLGHrRBVmBc/9zkinKKQ8p -Qy3aqZ6aaUkO7K43msAecU+emX80a+UtpC0WcXFefbg2wy6zeodJ8vxMmRcRXxle -IFdHuqxoxn+bnEH9vP2RAoIBAQDTbPuTCLj8ayEZlxJnkhSTY6fEGfCYialihwbe -QQtkDCgsaph6tXDwkW8aY+QbCVduseDfi2Y4KY/Glx3oDyUGG5OYM7w5b5LWtaou -5iF9X/U9g5aPVh62coChGYSprs+c9k9/a6R5irSAPMI5Di0HAoGqnBrSusbFqEgb -AJaHzjIqCif+lnq2ObiGvQZpkX7IrXcLLvgiIA5VdigLeqxW+O7lCqXrOTg2xfWm -PwSQuZBzjhPndEGjCyQGVf97r8fjbNLFsWeudmr5wSH1tNhwdk+HIyCDN63HXx2V -mKXkHWAqG8OkqjldiIUa5zxLz/ghfF2wo3BLYGIo0IHo6yuZAoIBAQDGILE58Zcs -Z81t1qRDENuhJlZLuTI4gEEPCymPQmhvKJ+j9L0PSEmZpThDBPtzfNcIHOOJxSaM -oyAz19543usM5Z0GJGR2o5kAYLbThV/2MqZcB/2DBuzSj/flfLu3tBmUD48lDGvn -q+KuWw+IQ0gZwxmFusL0+e+m/Z02HwFsFsMCaJ/s01t7pHL0q9DTCjmdEjcF2XbJ -sWzCmeltNjr3K3Ec3Ni3KpgHJPbtxixj59KRF9rzl71NzEgLwE9NBOhOebva6HVQ -1s/L+GbPX9OSIgtJDPE1dvERDbUtRCYz7BoF5Cm+sr667sX+doVXSdf1B1+tBoe8 -AK2Ko29NEF5nAoIBACvmbTZSkVaYR/8wRzoKMwuHncYyPKrvqqQytVJg3ySfAZh3 -acHQ+up4yEEKjMqwXd82QCMqpsbymk/6ANO2kVF7WGI6G9MxP6QlhHjIgBuwWRO0 -xwZsM2Re0iahTdKN4b4NxuQGTdiO3HvkIdAHCYJzGsl6MHehILTaBF7W+GqqffAM -u9E5HbHIum//v90bwN+aZSWFUzCCx3cnWZlIl5BXkAMu+tSkxO9am28xlpkWbtAP -qEJe+WIJZimKocnk7fRjHEDAXW70V7IUUCDctDRl3I2K1a1pWkQTk+kEES4Ui2sy -6KTAU7kAJ+M2MGbtf/A0CqAqz55XHQqsgM0ER8ECggEAOyzMghfsJPEj5Ch1iypf -zrPalmdL3qA/zjRxRz54Xqrtc1THmubmRKOaODomuAmTV/L46s8dgme+WH2jDsrV -vVZfHdSExQJ70icQtABj9u6NzXL9fsL0vLcPPVWR435BHX3ALTqWh+1ImPbNns8p -m7gvyUdMr0pvD5sz91QvYo8x02hYS62c50LoqrceecnWB1nHYVHgLsF1UHITy/Ck -j+pDsHEtsRdhrNCXh9DmtTgqJffQB21Mtw3KfugDR2et0rJ9Lxa641glXDBm1I00 -bbMJV9oruOI7gfJsKIbwOhXMd/H7nd9ZJA/oxuWzUazWeXKoWs9WfwpcysmhlozL -BQKCAQEAwn652o3mESIMcTnAyCsj0PB2f0jMcV833+Cf999G+wg30y9jFwrRSE89 -D88f4ZeA9gkMRitEL34cmaQiz7H/HNbKx+3T4/IWaUDkESDy1ew+oGkOUoul3w9a -ibB83j3tkt2/eB4QfNx1k5z7uKxfrRD2HREnQUf2kLABdO6GKF1tEqdGgUhXJJLF -hsrrjiTpNbncs7+PEbqulEcjOPafZMyz2RHCnkDc43YMzuf2BLt8jyTj5f1gaVMF -+w7RUnZjhlIVltXdwArpEhTxykCz/Z3DJ63VOMrcnzwtNzCu+7hDm8FGOPKDi3/B -HOr6pIJ8LUEq/Bij8tN1cvi/RPmhcA== ------END PRIVATE KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_4096_pkcs8.pub b/tests/pem/non-tfm/ssh_rsa_4096_pkcs8.pub deleted file mode 100755 index 8cff43fc..00000000 --- a/tests/pem/non-tfm/ssh_rsa_4096_pkcs8.pub +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo6FKkV/bSemFY/hO2NA/ -aMtkglLaC5jaqLzDnP21gfhYPBoBEDaffV7x+qfv1wyGODJvdUPaNa8nVpwJxyrP -/SzskqTlDW235Q7BbLTfGa6qsrj4iKGamsEL2HsZNP9GcjXJAPX1gCmQyaJtTeQ7 -rQSueQ4KuNMh5KQAep5anVi2PCGm9FeCyk7TQRsna3T0fANdCOeJA5BccfNjTmTS -fYau0GGCQ7C+S3v3wfj6iJLD+aqNpX2jyXvcbce5uPhSCUUEDi6xXn/ytLTtWb9F -OXVTR5llockzeLZ8KBF+KWe2JBx3pnARYl+Mbe9P86bxuXLiDzMCSAOT+9sOwOYn -ykqEy65EBsu8lv3s8sa5uNjYOYzUG/o7IrkIXJ1PyCoqe8TtSts8Uj4XMA0USDxh -sJAnzK6+TxuBFZ/TyQnlv8nUKTpuMrCWsvAGcckKIT9Y0WrLrPqlBqLzhw+q44g6 -4NJQ6SWOwn+hLT1P2dBhcn+VmOPedpUYmsCFy4tFTgHsRv7P5/niIsE4hTrZ5lEY -0Yyyd05ZFcvwvSMOkwWibBfQ1vzDeAXmDEgFaHVY6lici0HO7pW8poLjLjZ5IQ40 -NV0dElzcPX80/ZRPjQvhDsMcrDrvsvRK1epQPJhMcLZrv2vcx1J8rp11M/GVRYep -lIT9E3O1/xf0Nl008c8wuI8CAwEAAQ== ------END PUBLIC KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_4096_pkcs8_pw b/tests/pem/non-tfm/ssh_rsa_4096_pkcs8_pw deleted file mode 100755 index 369b6632..00000000 --- a/tests/pem/non-tfm/ssh_rsa_4096_pkcs8_pw +++ /dev/null @@ -1,54 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIJrTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIZ8W+TB/w4sACAggA -MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAECBBCcYoqV6gW8tDWp961nIwJ7BIIJ -UEdTApSDv5zLAnIofC+EsQ9csDFqwmnInKZynQAk3yrxAznTLmigv5mzSVV1Ixyo -ZH8XnQIxB/9HIpLUt/mBgmuLn0pbIrpOojS4lqM0o5P6ZhFJVJHp3ggdQ21B7pkB -Oce6dJFh0iRNra/dytyd3VpZdIxIuoGYBfgUP3b4+UhsHgRt5oUs/82veiQXA4QM -oqTWa5qSX/TMBNER3SQcsmsjmsOL5m0wnRAdJ+OYidhRqyOJfJLgtlA70o5HgHVm -83XqYS3zPqwNzFQq/sCZkW75NKoSKUlIDHDVu91NpAREk0P79vJjhaAhS69dd2tS -+1nte1Uie9vnDwYbBf/56RcjU7aQIcgePisFLM1pblJiJlCF6SU323hU20vxTXF1 -eyiM08AQBnlRJZYSArv/jJk8psT7oqqbEm05JF5oq/+nZqm6lYpP7YJ8j3n0x42V -Nc2Nilf0xdR5d2Cf4jhreiLFI7windxf/pk3veGjDUZfv26EBhiQRRs0pbLe+GoD -NbwREhaueHUTfz01EoswFmJ5cUiI1p2P6xGFyzaXaRJmAK35Rtk7/NWo9DHKfQt4 -VnijFYT5qf/ctkWMcMIyC/86QCM6u5VTN00obszfA8usF2rslg2mbqwmnHn+kmLo -+9jodEbVz406NooMr8gsgLVFhjQ+nSG3JIJPeTv58L0rIryE7ps+JsABUBDkqr2g -99aY6H9WVgiS5w4RF5hwW/UzRcT/ll+yYzwA/4D4m3P+XQX/Yk3EfQtRpihUWAPO -VQbJprMTRIrzr/od8BGizT7fJrlqxTkSoFf0tCd2RpmIWC7Uo/0joSG8ri0qrYb/ -5WehgmOu5bkSn4Na5dpnOqRiu2dVKfJ7l9STQluf2NQ/HNd3b6t1ynQRCSXu/+QA -eLqWEyRde6XIeom41BOvKbnlTr2Am1sNCBcNr/G/Ryjt5JwHUq/VrU8AIhOUlqQG -s8XQ27Nkfbn4X4/Yc8k3S0F+S/sguhh2NMLrz3BmVKa8+s0zLfOi7z2fCLcwzE6O -vwnyIsp7t8Y+D7sOzK01XPeONecy0QNNdgre4Q7BYMCCYjjsxK/d1HL5iaBUS+o5 -mb2poBtHoQtl9IMsbwWuDZwWsAdouGj97timoXORoqt/585ckuthN5NGQhJErjNU -5ueGoPXLKENWA1ZrPPPVgZfwAyiBoOsmrn9QcTki9+/byt1S5LcVGQabt5nCReVg -oecS4u4As410+vaul/0oLXu0xnMJ15PJw5Jbfq/bViyEdIqA/ZVMaXv2Ws4hXeuR -HMwWfJwLxHLPp1fPXTvIOW/URgtqZkR2a44xP6NuKvAIAIdifqag+BBs3D/MRMkD -rkDKOHXC2Yu82xfpOl5Zs+ptLggEYhzEiYQcmlW9jHG0bqxIiU5lTzb0WisAy76H -VnTxz3jvJyIhsTAooXQ8kehlwXATLkJLXePyhnUtOzAGoTqJy40kfcd9OHiRQB6q -WrlgS4BvV4eW5FnrNVN2M6zGWIzaPdB42+QVDHsrlOEqqmOd9SNfWrVVDw/bUCQv -zD6DVxa3WJm9mMrlmxEEi8MT2wzEiEuI4NygezDlFhsF9AB3VyjavIJdncB50x+m -Oj00idvZbQHHtizQIhBJPSqYVwUha0kw+lf4sUmaaJR2fklwIUiqhhBm1hdoB4ed -xdLfpmC8tQXk3HqLIs+lkQZpHUeAJq5+c3PTAERow6SznFUr/0Vh/Fd2hvrFRYOe -Yv1epzDP2od77l5ujaUACijAV3T2+voapcrjMoC1RYIlacVwZ7DLZfAt2gskP62/ -XJQInkORYMdHRMucYiYiSbTvhm/HpqValbqVvH/hjLjVkcbrttsuW/R9diMoB9Ug -owTqdCOriH1o0ARVdA99gykotIq8s2Lzjxr6V7H1AmLKOifhis2laz6NlI0V2yyr -pmaKabrYbHLdh/FKpbUacP3ZZgJrZx/9XA0gD/cxg8iMEHjlzqY+TvGLS3xJVQmD -VE7QSUDi9Xc6QY+tNz/PK8QDvxDJAnhV6aUC+xeAjW3v77iai+bX94Mg9N0Z9Z0C -x6Kz/0gk7jI3YP9dfF3SjItBfTB7/iz4gAU5EpJkZAIuTdrpQbHM6xbdzl77oIsq -AuQ9rncnvuQkOewiu9nURy8YFNfqmgsdFkoxc4XQr8RC0vPJkfo2IYto0p13dT+v -xJ/Z9UcGRYzBbDNlJcE8KRFpHVKukUbtc+wwOCDj0dSy4rrKo4Fwo6DO5/KFNM+S -3RZQc9kFCE0EO5qqdoiprc07fDhQxruvrO9D9axeGxlyno+bBW+8+zubX7dlrxst -EKPDxWECRMi7Q5eeCOhoODchiyFsJEv8/Sa2v+CRvvlLVF5arB3XGbCK1sHepjdg -z+RXplEUFe13Pu+lV1nwlZ5RYxKb25oLXB72JZdc2R9ymFuHJF2AcGFosi/kxwkY -4WXgz4uV1bfCvpEqG92xj8+R6VSogcS3H/g0GgT1rBhLqgnwXAT93c3wtlB7V2YJ -b0mYXJFBYzVoOqf6TzKXSYHJseftU5Z+Jw4hoqMUE+ksiIG7tRnn81P0+gHVUeuG -mMNWd7lr2UsTgbVVrHlgQ8GXqkwzOcoexiWZ972fRRwowcYaCEN80aNty5wDtmWf -sE50JPeam18JyBs6qvtikNJnfnDQ6XyRjOg73MxWmcWX7z4rmtJmi1VjpwUvxalT -1T8ectGTzCw0ss8rlNm0Yb0s3uysdO7Z+kLwdDLN/46ph3Vn6UAJtOkodUlqe1QK -dSiKlY5H6AsO5wWgxvmEen/Z/Q/bZGhVqKjAZclRYbH03QL60nYQaaTaBBhXdpQf -HAkK7x+lFJ3I+x/SmSKuAv45uZF5pRbSWUBI0QDsB3fs3kJlaagR5iaZydUnXjzk -JymhcjdpYsfyfCrV/qoD0yJ1F/13TnPuEBp8k2XEL3DEqQO2bylUtAdoIx72Ru2/ -SPmEwiuptZYA4iKJPKgrWMPyoxaEWU77apUlwx6Hg7VlpYhoWDoKhnmnIQVQuJn1 -1Q2YNKbeyM5JAHmFgK4wel9PE60QNyqKLch6hMc780kfbmOTkaEqYVsj1aBB5b9k -RJLD4S6SbsYkax+aU741EaI9ItajJsjG0hCo8AK41wDHhVKofmCoUbeMCziXi91f -NnmYJEiXd0J6RWdJ1d4eWGu2g3t6+fv1BnmnTHc8EpGu ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_4096_rfc4716.pub b/tests/pem/non-tfm/ssh_rsa_4096_rfc4716.pub deleted file mode 100755 index 16245285..00000000 --- a/tests/pem/non-tfm/ssh_rsa_4096_rfc4716.pub +++ /dev/null @@ -1,14 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "4096-bit RSA, converted by miko@YUE from OpenSSH" -AAAAB3NzaC1yc2EAAAADAQABAAACAQCjoUqRX9tJ6YVj+E7Y0D9oy2SCUtoLmNqovMOc/b -WB+Fg8GgEQNp99XvH6p+/XDIY4Mm91Q9o1rydWnAnHKs/9LOySpOUNbbflDsFstN8Zrqqy -uPiIoZqawQvYexk0/0ZyNckA9fWAKZDJom1N5DutBK55Dgq40yHkpAB6nlqdWLY8Iab0V4 -LKTtNBGydrdPR8A10I54kDkFxx82NOZNJ9hq7QYYJDsL5Le/fB+PqIksP5qo2lfaPJe9xt -x7m4+FIJRQQOLrFef/K0tO1Zv0U5dVNHmWWhyTN4tnwoEX4pZ7YkHHemcBFiX4xt70/zpv -G5cuIPMwJIA5P72w7A5ifKSoTLrkQGy7yW/ezyxrm42Ng5jNQb+jsiuQhcnU/IKip7xO1K -2zxSPhcwDRRIPGGwkCfMrr5PG4EVn9PJCeW/ydQpOm4ysJay8AZxyQohP1jRasus+qUGov -OHD6rjiDrg0lDpJY7Cf6EtPU/Z0GFyf5WY4952lRiawIXLi0VOAexG/s/n+eIiwTiFOtnm -URjRjLJ3TlkVy/C9Iw6TBaJsF9DW/MN4BeYMSAVodVjqWJyLQc7ulbymguMuNnkhDjQ1XR -0SXNw9fzT9lE+NC+EOwxysOu+y9ErV6lA8mExwtmu/a9zHUnyunXUz8ZVFh6mUhP0Tc7X/ -F/Q2XTTxzzC4jw== ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/non-tfm/ssh_rsa_8192_openssh b/tests/pem/non-tfm/ssh_rsa_8192_openssh deleted file mode 100755 index f4870250..00000000 --- a/tests/pem/non-tfm/ssh_rsa_8192_openssh +++ /dev/null @@ -1,93 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAEFwAAAAdzc2gtcn -NhAAAAAwEAAQAABAEAqV97tjVnMe5+B6Hu/wGKiyLWEcHLLW07r3tMk2ehx3MCrOkQoQob -p0lZ3tn5MXnLi3aYgGTa3Y2u7EMai9MA4vr41rnC5pdIQ0NoqT8uP/OPQ5kHjVYddaEaFJ -AOh6SOaEq+S0yRqV4p0/wkTD95VOKDOxl8MjrJRwSbEM98cImYIwvXbFNOha2S8W8tJ6Ae -RJBmB1iFO0wAaIFa5fqvGqohSJYuqFFuEBpXn0DW79cp/z9cZJPyQ6TewWVu119XGwHNfa -fjKlbjHpCN+G4xzKFVOXr2OFqprX1kSKKLpwHJQrojrnv6q2DKF8KOuCazGl9fZyJeuY6w -6n4wrUULVquovQ/6Uxdi8xEYBJC1PcVerLSFypHKY8hKwa75SpUR3V1oZBjdV6J0yt9hkj -zsbA5EbMozgq3zJU5HLjrpyASs6RVhdDfZuh+o4f5g3Wrb0Nbe9nJYE4ECNa67cYeEc24i -k4auxhLkJ+WlY7I/2dKvqnmO9be5TRdZGmi2uOJD1nJkjKr/brNFPdJoEp/ifyrRZwQQ87 -OIELJ+eARMmVIRf6jpeBX6YM0evis3UEX15RmNixR05T23ciZ7AZUbN5Xdlt5YIWzTYuFW -bC7dLMg3cmltsK92rVpRbKuV8ZBmO/5ckcx5VkQiAG0kmYA8/2lgQXab4OeALSL0ScrDtZ -2XXw9G9TS4w/KBrd4X7VslJ/+v1IoFt+gH6oLCYx5ctpqUlud5WCR5LbKz360AzU9yf0n7 -SqRk41OUcMc+NSUkMBInzOS6JhvzBq8OfpCRnaeBoZUUqn9uZUdwUUo0iOq+6H2DxjgknP -U1o5xIn79R7XB9PJs3fdgbullwlhaV8Xq3/aC0lmJWQy1JfZ8XaXJRmqkMslV8BViilInr -tPsIP7tmK8q0NSYE7AJVhWIfP0qPclsql3MBZCqS9HFn9bEW0U7i84VCMnN9TDVslTdT/o -9RxihL3ilXxk8YmjcfKsRBZbLLDVZhcB7ywe7F+z/ITF42cXr03pCi5Ckfv/xBEKfKsIxw -5Tj1ptbUD7ijB7Gw3I8cl6hTuhzBCYX3ldDliurQTJcqUozPPvH5qhQUoiRplzNUtL//Eu -g9kP9zq5xQ+VyzrLrm02HkqiTcyGi0jbx7xpNbSUanOKkIw0VyPGUPkBmSQZd3ox1DPX9X -DTAKQqJuEX3GarytDU3rG+DoRReyt1fAW+g32Glu+k7SUGLTf7BgMHkq4n812d12gR3pQq -4fdZKM8yqxHCWHhrVH0faPNt1N6U5OW1+0LxAoC7j+huS/C3OlfFSPIl4VeknxFTfXnMIe -py7FB4pqkuSL3cp26kPa49/mYWlUIh5qxdZ9468ZxCGNCFklHVMB+QAADlCJUCAtiVAgLQ -AAAAdzc2gtcnNhAAAEAQCpX3u2NWcx7n4Hoe7/AYqLItYRwcstbTuve0yTZ6HHcwKs6RCh -ChunSVne2fkxecuLdpiAZNrdja7sQxqL0wDi+vjWucLml0hDQ2ipPy4/849DmQeNVh11oR -oUkA6HpI5oSr5LTJGpXinT/CRMP3lU4oM7GXwyOslHBJsQz3xwiZgjC9dsU06FrZLxby0n -oB5EkGYHWIU7TABogVrl+q8aqiFIli6oUW4QGlefQNbv1yn/P1xkk/JDpN7BZW7XX1cbAc -19p+MqVuMekI34bjHMoVU5evY4WqmtfWRIoounAclCuiOue/qrYMoXwo64JrMaX19nIl65 -jrDqfjCtRQtWq6i9D/pTF2LzERgEkLU9xV6stIXKkcpjyErBrvlKlRHdXWhkGN1XonTK32 -GSPOxsDkRsyjOCrfMlTkcuOunIBKzpFWF0N9m6H6jh/mDdatvQ1t72clgTgQI1rrtxh4Rz -biKThq7GEuQn5aVjsj/Z0q+qeY71t7lNF1kaaLa44kPWcmSMqv9us0U90mgSn+J/KtFnBB -Dzs4gQsn54BEyZUhF/qOl4FfpgzR6+KzdQRfXlGY2LFHTlPbdyJnsBlRs3ld2W3lghbNNi -4VZsLt0syDdyaW2wr3atWlFsq5XxkGY7/lyRzHlWRCIAbSSZgDz/aWBBdpvg54AtIvRJys -O1nZdfD0b1NLjD8oGt3hftWyUn/6/UigW36AfqgsJjHly2mpSW53lYJHktsrPfrQDNT3J/ -SftKpGTjU5Rwxz41JSQwEifM5LomG/MGrw5+kJGdp4GhlRSqf25lR3BRSjSI6r7ofYPGOC -Sc9TWjnEifv1HtcH08mzd92Bu6WXCWFpXxerf9oLSWYlZDLUl9nxdpclGaqQyyVXwFWKKU -ieu0+wg/u2YryrQ1JgTsAlWFYh8/So9yWyqXcwFkKpL0cWf1sRbRTuLzhUIyc31MNWyVN1 -P+j1HGKEveKVfGTxiaNx8qxEFlsssNVmFwHvLB7sX7P8hMXjZxevTekKLkKR+//EEQp8qw -jHDlOPWm1tQPuKMHsbDcjxyXqFO6HMEJhfeV0OWK6tBMlypSjM8+8fmqFBSiJGmXM1S0v/ -8S6D2Q/3OrnFD5XLOsuubTYeSqJNzIaLSNvHvGk1tJRqc4qQjDRXI8ZQ+QGZJBl3ejHUM9 -f1cNMApCom4RfcZqvK0NTesb4OhFF7K3V8Bb6DfYaW76TtJQYtN/sGAweSrifzXZ3XaBHe -lCrh91kozzKrEcJYeGtUfR9o823U3pTk5bX7QvECgLuP6G5L8Lc6V8VI8iXhV6SfEVN9ec -wh6nLsUHimqS5IvdynbqQ9rj3+ZhaVQiHmrF1n3jrxnEIY0IWSUdUwH5AAAAAwEAAQAABA -BFJTD5IvYdIVMcRJSwUG3B/ZfNKgOLaRO7wSdy6hTWuvI1qvRZ+ilt8vkYjH46H5HkPqdl -i0b6ufPWilKVELBE+daKus2Bm/MpWqSoq51zCDjNjPTTU3u1YO6nxGPaJmjo1NK5JOo2bb -W/0Cj1Y9hhuhN/Fhlo3Cz9rDit9TbFLrcIX7YziBL/aewaWpvhmHGi5hxxFUdW/OERyPVV -/DBuP1RVMNKdbpjzQ/3PiwX0Zi/D/5b1jJyT1wQFiiZlEIwb/3FnwhlwWIZiHPuIl1wHQT -nsvHE2cnTg2dcN/CXtKUKD1j/o5L5iJqJ6brgbH9lwg80L6rEnKcS6BohSxGQrnurFPHei -YmLH/ouCmZ0UObY75XrVRw2MDOHQDmHBe/gOGisa6je6phzuEaHgtLSELJLsouPCjsc7zK -gsjGqSeK4qfcsKSh696Fzm3hWnbw+MQ5xEmkuwsrM3PT1SzNNa2HSPK6XAQUgZrZwGhmeg -wm1quDOPxtCEU2rR6DvoYJ73Nj4sW0bqZ491/Kb2K4WpCs7wMm3FP97liiktT/wBf8qbBl -dB6h8MU9EgK75qLBWF0RfC1rgeOkLg/Cqta7TvzWPoSp9KDgaCUKIaiktLE/Xm5HmebxOR -E9U3+xi8xImoJmCeOQ60FB6Zc/VEIWFFmDxunUBn4bqnMqTuVzPsuV5d4ik0MIeWAAPprf -i7WXYMhSRE8gN8InkEnzRjVdxKeouEKFzFB6jTesmbmj6q/hl6mw4rS7oP+J/pEcVZYI3A -5itEDNZGb4iijXz7aCNW0Gd5Tb5vD2YF4OVGFx0pDmJnBCBfLpLFgB7PoVx8V2fGNzDF90 -15Ti2H2oAR6UY2Bnt9m9i5DYNM9LR8DwU0o333+uFRaprAjCcm/G3GOSSUabTiwupg4W1p -t+QFXCyuoHPqHLrMyTzUe9S7Z9JhqsVyUW4oTBoRIiraJ8OAe88FRrsIT9lMLGkLN+obCw -W/JGqhf/i2MK8K+ZnYeO6czdCDFU000V8/VK8S5hDL40ubaSpRQNkc5sOhtd4h1/KLSzvP -TjSgbwSR41Jb5fzJF33wC6uLFfFmFk9ILNKwQJhGTrQsH1wVz75xGfTC0CQh5p+VXwbIBF -J0Hlvpjza91R9KETCin42vlOipkviH8sJIYznR/oB2Uu0dAQeBxYDxwfpSffgEqo9dCeEy -Djf7k+j4fkyeHx+Arr2/vPbAtAZkKdo8S27QNZbBCW0vVr7v39ZSZ7GeIa6jR4caX0x0nE -s6weM2pXwK8322aiQMsy9ExCucq17ylIMgQjOfcDzu4kHduQArGY4hA5Tfc1cpCwSev0aB -RBH9ypOh8S1SNLMq/fp6HFQJ6nQx0gglBMSxAAACAQC+CnJGv2gCGMSdle2NtwmRBPdV6W -yzwR1EDsRBxuVqVdOTHM8vswxyGa/w6l7Mxj+71fStj5qZd2KHbNdLEnqOYJDbMxNn5j/n -uEVXf+c9M7JhvR2KkCyqMpzDhRppxR00Y/v1PFQwJCuJTH+D8geT0ltHxuiwZZb42KbYOm -Pz80BoLqhoubQMJ8C3JHzs8ERnp6zQoej3MtTfq7iGah0AjdeebKOt40O9AuysCarZUlKf -pM9g8UgOQXBYHX1S4HJQ0IgcSaXVPWxc6ov1F4bfcJkKq1omfS08OTVk5/LIhiYrk5uY46 -fdi+BXVggPQWU5trnnWB+zaaSQSccU1zAzySvydyFvjuUWzbW7iN95pZU985X9mcCkvGcx -LtFP9DOua3Ege0eYAi7diACinG4WPQ9hMLqNu9ZTwKr6u4/OLiofGY2ysI8ITKEW7bdO+O -cS8LviGLZVCOe73R/EuBNZxvOthBtxudZXc4gDxfyRJk7dELZMfzwsRLFJOzBvZMm2e1s7 -5Cv49oLsz98EMuoq0zuFlhUDWV7/avagU9ILq7Nxs6F5vB9zrX+220pDHvMht9Csgq7HWD -k+sawTejznTm2pCYDYMkTN5ginY0M7wpm2hJyiUtBZcW7BNTBjrQaK0lxLL11vw0rkXksr -J1UQzZEbu2OWNKBgMEEOCeT34wAAAgEA0/9ojqvDrJ5Bd+bpm2jXiRa4BuLJe+Za8uFX4b -q3Waaqw05EVkGhHKwM6kYJV7+ZPHCi9oBlEAE80W1wltIT3T2jArYOCigqqIqeNThqRkA6 -zEbrD8DMRdSpsdQk+Dd0d3y+DT6kPfI0Y0f/FCfdAt+SV+WPFbcimsOjPRGgZ1g+Msya+f -mKtbS2xGrNB4ShvRHtZ3lS2Yj/Mx1SiPu1f0GCbNhzDslmSPdTUI+NQM7E/cBaZRtutyrZ -ZNLqY55rugfRDKsIFwNivEJ1b1WFvSybUFmM8y1GrnB6KSY+8v3x5hz77OOpEI4dzKvw// -zsguUaG7AHVGQWfyommNHSdcOL78gUJFRbIzXjuQU4K27UJ3az+uNsK3TFSE26ntgI1ve5 -7GP58bRv3U+oq/XfumGW6jFk8jWqRCg4LUOwvTZsJAxivSd4RiBo7hZ5KjOW84P5MS4x7U -9NkkvzThRuzLKBc3f4VpFTXa7T/td5X5rnzOkOXOcDH9o5fN7/74I1qKDC2fvt4qKTan58 -38HQOclQRtH6+IevoiBlMj7PnzMINQ2JWwBaT0n2PgJu/LT3pNKr3S1IrBbEEphCu8qXS7 -L5ASD58pnk6LLCjJprnbHimA4U/jjRaEXjlNKjfW3Cx6k9GFkIFopHUvwEotsLdeOg4MDc -Gp1Hi/Gyk2mx2kUAAAIBAMyHMSc80tP+z023DblBELWps4GeJq96XXgE3oNI/pPWR53HyD -STNnZW61RAL8aqSivBRypj3hXg9n0vvQzDAoMR5T6xIGYJMlrRIHpsprtwX1HRYEJ3uUp7 -XaKPIVHdSbvwm7syyLCYhtDPaHad6NVR/B+ba/kzZhG7W/aaBnr/ph7nyvxnwU0KM0KOkn -ppVEDfuEssK504wn+O6VbaT9A5SPM8UqtYevHhoVlIib9rxkskjuPqkY9gb4J5KvPoTkxU -KBdGENBPuEas7nc+CRE8eEtDL8/foR3SyOBOiXgi42PszhQZCLDnbuE7T1BOSwefL1uPhz -3D22qpEphdPac40Q194J5qYkpFJpWpX4n3SZwW1MncYxJSc4h4qOddoH3gvu+JVn9HfnYx -WExh/ayZEb8E3VaIztOavaICpZzS6X1it9gyu46Z6jfX0KDcQfNp19tFEUrF+5Exc7xR5h -P+ZcF+ocndm0OzkJgQ0URfgonfasPvHxJ15pJrVj1pu5YFTboK4XureVlUuzEenUfMS/v3 -Uh0T63HTma6OJadmcDL3V3+TzBBWFVvIj3eKP7DNxlF4DyNanYRM5e3Puwaesxt2mEt2mv -CaGU6N/uJOO9fTxlWTku5oFwhV0KLLr4idumBVD/1SLNUk/asELBk3qZ2OYiWMCo/1tG8X -tv4lAAAAE1RoaXMgaXMgYSB0ZXN0IGtleSEBAgMEBQYH ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_8192_openssh_pw b/tests/pem/non-tfm/ssh_rsa_8192_openssh_pw deleted file mode 100755 index d6462022..00000000 --- a/tests/pem/non-tfm/ssh_rsa_8192_openssh_pw +++ /dev/null @@ -1,94 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABCpjAMtPM -6khm1juMb40RR7AAAAEAAAAAEAAAQXAAAAB3NzaC1yc2EAAAADAQABAAAEAQCpX3u2NWcx -7n4Hoe7/AYqLItYRwcstbTuve0yTZ6HHcwKs6RChChunSVne2fkxecuLdpiAZNrdja7sQx -qL0wDi+vjWucLml0hDQ2ipPy4/849DmQeNVh11oRoUkA6HpI5oSr5LTJGpXinT/CRMP3lU -4oM7GXwyOslHBJsQz3xwiZgjC9dsU06FrZLxby0noB5EkGYHWIU7TABogVrl+q8aqiFIli -6oUW4QGlefQNbv1yn/P1xkk/JDpN7BZW7XX1cbAc19p+MqVuMekI34bjHMoVU5evY4Wqmt -fWRIoounAclCuiOue/qrYMoXwo64JrMaX19nIl65jrDqfjCtRQtWq6i9D/pTF2LzERgEkL -U9xV6stIXKkcpjyErBrvlKlRHdXWhkGN1XonTK32GSPOxsDkRsyjOCrfMlTkcuOunIBKzp -FWF0N9m6H6jh/mDdatvQ1t72clgTgQI1rrtxh4RzbiKThq7GEuQn5aVjsj/Z0q+qeY71t7 -lNF1kaaLa44kPWcmSMqv9us0U90mgSn+J/KtFnBBDzs4gQsn54BEyZUhF/qOl4FfpgzR6+ -KzdQRfXlGY2LFHTlPbdyJnsBlRs3ld2W3lghbNNi4VZsLt0syDdyaW2wr3atWlFsq5XxkG -Y7/lyRzHlWRCIAbSSZgDz/aWBBdpvg54AtIvRJysO1nZdfD0b1NLjD8oGt3hftWyUn/6/U -igW36AfqgsJjHly2mpSW53lYJHktsrPfrQDNT3J/SftKpGTjU5Rwxz41JSQwEifM5LomG/ -MGrw5+kJGdp4GhlRSqf25lR3BRSjSI6r7ofYPGOCSc9TWjnEifv1HtcH08mzd92Bu6WXCW -FpXxerf9oLSWYlZDLUl9nxdpclGaqQyyVXwFWKKUieu0+wg/u2YryrQ1JgTsAlWFYh8/So -9yWyqXcwFkKpL0cWf1sRbRTuLzhUIyc31MNWyVN1P+j1HGKEveKVfGTxiaNx8qxEFlsssN -VmFwHvLB7sX7P8hMXjZxevTekKLkKR+//EEQp8qwjHDlOPWm1tQPuKMHsbDcjxyXqFO6HM -EJhfeV0OWK6tBMlypSjM8+8fmqFBSiJGmXM1S0v/8S6D2Q/3OrnFD5XLOsuubTYeSqJNzI -aLSNvHvGk1tJRqc4qQjDRXI8ZQ+QGZJBl3ejHUM9f1cNMApCom4RfcZqvK0NTesb4OhFF7 -K3V8Bb6DfYaW76TtJQYtN/sGAweSrifzXZ3XaBHelCrh91kozzKrEcJYeGtUfR9o823U3p -Tk5bX7QvECgLuP6G5L8Lc6V8VI8iXhV6SfEVN9ecwh6nLsUHimqS5IvdynbqQ9rj3+ZhaV -QiHmrF1n3jrxnEIY0IWSUdUwH5AAAOUNVLHPxiTuOI9j6kj65yesPyWia9GyrXt1BPMmAY -YC7icvfJtN/QsxxxPumhjTh/dRlBktNns05MHcNTC8fOUtL5fciFzPAPQlb9qRFTM/aDes -dQIfP1VPw2YMaWojMwX6/Fd1PWrosISKdzy1XT+lPIGZ8WGoSLKXtMwbwb4ZptEkGqgkGz -tW6zAYIR08jGzRMku4sgucQ8GfRxhxrOrERRv1PEdSE6vOVzb8V6CZj+O5yxnZ/gVW7UGu -cztgaZJ/lh7gfXvuwSMiQNuyVa5DTbQcmVe0aiWHSgugBAM34n89f7JJbbEJ0Y2Xympr4c -/e0tx55yMwfFwhD0vdqrP5n2PWQVQsVNnZomnruPRv4gkDsjDv7Q7i0KzZu3aFXK1uba89 -lZ8mxMJq5xzrLQiDUe1/GTU+GUjU+16zn/bFLiufV8svFqGIhr2vusRlC2NXTbYjd6GIis -RqGp7BNQ3FwAAZhlMCT3WOrq9WvpwNQ3wSOOnhLa29pqiKf0G7G//K65oZ0LdvD7NKed50 -pLv1XmF3w2iseTMnzyT4ncnsYWs/wZO4kmhbCFMuJeQ5I12iQIJaoLWGlbEUB262q0qe/+ -SPYbWLFtl7kYX/fZNKwF7G8xAwIX3uL0ahMKCuvsHwgaDnjYBFZhnlYRp+dATVugBirhDr -cePTZoyCv3OsU+IxDDmLOq0QMo0RbYutIO1/kq53iN5BvIxdnd7ccJh61hksEYts0KjydZ -IByK+gKU0tVWnQ/33x8UoLoRfKmOLoy4KIYOQpgKxgLk1lb96/5QxhP3oeYpjgbsMTzd6h -0F7rlqf/MrobH12xc2dSkk2/JKFMqJY8hYgW0IPD3gCP8qi2Dv4q4gwyKM5toUi42uy4XR -oWiHm9DxxSPzBqPlEN5Ip+gfY/8nSFedHvXR9d0xS2vxg5TbOB2rxPk9fXVG+w2oiIl9Em -MjipLbkgwL1HTuesjD2O0Gu8psyB7nBRyEHESTZVeiWml7RFbS4vjrV+X38/s0pgzSuQDh -67BBERtGbKjO1OXMj7NTw/Bx8sMYiF0v2vgK5dbJ6PUi4IQLiL8YCyzJqRD3ShFgC5vNiv -a3jnAt+nMV8wZTF9s03CgpiagDs2B9CLNX5ZFcV6dSMyhZVHyLmZ1A9usFPWi92zS1b+tQ -eirvinpTiSPffZK2667XwuLYOkjCguW6so9icsi5OZkk5kgC6eOfbYjhqs2I9h2EOpGz7P -UPkSbugoI24DnfjYtbnpQfcC85Rx2bO7j1OEqF5yFoYrnebuxoCCqx2opOgAUXScSLicji -7pOl/2qoFbyJ2Zq4JPzxatfcJKUForkaIp17trQHPuknn5jduB51PcrlrNTblnAiN/P7gg -OjPBKXKEsyFLRGXplScVC5vXdu6icm3acgLMMA/aLKXSVZ87MdJwla2Tr/mNynCikxaBIC -Ju7GnfhC6WCvEWV6tBHZbaubdFhDvoKIudzWHcYAylHnZG9vhsd2eXa9c6jbuyTRi/w+im -J7xtp/0olupqIXiu+RXk6xcvb1di0SkEjtnaS3HwGsmgb2BQh69Fg7ZJBxPMKkDQekuG97 -lF1U1RQssOrekMtnjNSZpfxgVw5SU6ITpnI93OU4RgA9VCS/lnY0Rzxxu4mhHyQPG427Es -ZFpqQHph766VtwgozgxjFtqYljgiLFsE67enFAA/zlRxW69Cwb/1ly1txKxJl1sdcyQ/Dl -m3X0sI7H2GQibP25mgrEGqiHeeKDQvwraGwEpyKyg+VoUo+STz8W1ruxPnDVg7DO7vhko2 -tyEq0N3x9gGhtj0GT6PFKpn8yUyWMD2z6zLjfL8jqDREWka8j2bGxEn9X/7uUwilkLaTXs -3/ajpPMa3+rd18DfEIy3HZ01xbO8Mi0FKCCbsWJ43qWpFYuogv0Yq57K6QUKv5AASfWrzg -WUJkHOoZ+2glnNHuR65kYRSm/eHxmD8SgUTWAFkQ4WRD0+fqUYf/wOZgVMHxEiwTQUs4zs -Zd8WRDweUz3i1P4VDZT6Kg8B/rX40UZxxQVZlIwZEOnAqgvOfJlR4WlRi/W7ti1WTZcmMb -l6dVDQWZTqnIBnNeyysPFRhXVOSMQv2FyKOJh/TVbrH/Ko4AMFQ/YiUsdjGyUv8EXUPB5B -HPBmBCb5GbnKTyTMIPyTxyK25Yt5mk5dt/37Fq+FY7i+973jsxalTLQsN6UiEiznYyZdwF -AsDzN1OnwchUf4Qh+iCcmT5j/8muYbvOM547PU9n8e1Fo8xaGoT60mBV8i1I/SBxhQFr7x -2jtKB1fjM0+a3j/ZTS8O7NTAF/TOtycQuQBTQR9VWv4c/Cw9smhW9ECeEXVJ7TA2xi7pxI -eLKwEYC6UwZ8HmkTswZKXLN+wpdEyY3/2jhEJPefk3d11PaBP9L2O6nBQIqMon2u255lG3 -AOhJ0/hirimuiyR9cbeIOlluc3w66+HUoqOLHh+49Sd0A40MZkf51wLHEiTZMlcQbzZwqW -kXWeNok2lWSWPns7nLoZa/gzqdXGGMWeC2iRHourdBVEgsuhFc+KSW3zePFoVXbrRXTU7V -0dHncHjiA3j444an+S9iFAJJFsALMUbFAlGu0nXlqX54qDN+sWaDD3fJwAWwCdmUlkHSQD -fDnpgtzU90XA0nyvg8UHBTqDpz9mPhdVxtM8wCc+CGiAeARL6mshnVdltt1T4gHdEd2+7O -LzSnEVdIwGgq9c5lLllirZcjlrk3i4j1sR6s56I9UklutvdU1g6+a1cPyWMtUQmYRjFWz4 -Raa++6kmKJtqxZ2r5cWEMQPtTcUKm7MDJ90bsf2UHAzlg7b5BfeDIWcDj9QMSiMJpne6Ga -fx40/WhUg/TYpJVjjzeYRseSIvCcSjF/qh07M0N1txHj83EXsB6i7xZU5GJuFVuhfQaYHA -rKiJdrpsulhyVOKbQFrGTGNfo3WCcT/fTJEw5LI7VJKHkgRVs/ZTDqbjGQR5q/tZdQiM3W -fZZhgwTrb6X+wQ8Yib1oYcTnByZU0gaFlGUkt3VQXtk7CEJGM/LsfOnqw6nSStCgtv6gRM -eWdk6DXBydPvlTMTofFeEwPwzlswJ/44OIYZKGroes4K8fzsaHyx9DZ1OspGfr9Wd/D7Aj -I9Y1UPb15/rj5Z3FLOOZ3oHAGI6t9FHlBiHa3uao2DNoJD0NtTqc5H/3MaLvObZkt1oAnj -7K8Eor7IM8LmD6UzQuzR0FjoqA7Wt+4UqEIx9KFX+hOJpF7nuWIQEncwdUaary6DZsZJyi -P8Spy0YPXCo09hCP9VgSlF0rjduqOFPmle6GViy1GjLPuzUWqugzdNTymQgTFnjfzz9EFC -V6heUrI8NXiWB64c0SYyzcwFSNyORmK03Q5dZL/NVOLnacmoE7nR45UhbcLC8pNFa/rFdD -6SHD+N4W8npp5IRI7b6zpe0lOsOitEdd9/F3Xc2acFAraqEr/uZwE0csxZhJGdhn7G8ARx -lZ6LHzCx66Y+j+0VnM3TaMeqBZtAfFe7ClpUaXJ/e5aXxROFpc02FPaMZigl/xtoHnv7SH -VluAIn4jaOAfZ4nGYwJrX6KPW740Iy+1rtmuBykbDBYAdD+as+MJbW2y94uNBRbGfwJjRS -PjYKu2Wu1koq9ASyXk2t0pZ6MEoco4JNZVrpUvlSwgyCjMMU85jD1JK0L7Whe9YMd25pTu -IMOFLt2oxeOc91maHHdE47wrvhVtmTt2ro/imO20QJU4sg/IJz9NEIXdkHGQ4sdlQhdopR -8UVrghWl3HRe1CAwsVDVIbYHP0XQvR76ciUPPPj41itaxKFLFDBv6LGhGyedm+gLMOYuB9 -KxUd9p9DVQh93ujH+G6fttWWynFs31SAG2sozaj3Wk/eSXx3KIzww1XK6LeeIyRr/5zm/h -vj3syU6BI48G+hNcxly+i1aX0MUQD8QaL1/FPqvqoIGQdWLWqZQ6vT2nERJ+5nplTlZgu0 -58CpLRgRJjDLEgH+rufFBtrE6dt+XiA8UhjMuyn/OD6ZcBGoxVO3Vhr2Ti/EKXxGVODSuo -uQWLBSOjooFyCUeVEMS2XpFPcpU6E5lEAvG4Yl3oy3fYzuiv9GNrHXR7z5mGGsFeLLyJhl -D4LB02/wqSNvBIoPyhZJo6z5L6Nk7TCK2RaITyFJru/bPhZ+B/wJcsu1lZfH9rEXrHi3xI -vCJRoxT3aDgAqxnD8OoOR7zenpol/xm/MFVunYJke7psBn5rUc+aBXbPvUjqigKM1Cd0nx -+uKAl5o7K+1yE0y36We2+3hnQkx8V4WL8zmANXiK0rOvVWgj/8NcOtsb3LzybcqyZBVvA6 -OtkKbY8EDLSULtGu69HnU6XJcyoxIxuXEq91wHsjdhNeFdqFiHTRjnT7ZpZ/sdZq4RqUBS -synvIEH1YrAD+nCjPxgHsT8n3N3ylZT7hPS4kOoydQ9hwXHrtKi0pZMo5An68j7swO4qwm -SKf+0xRlahoW61pgzYeuB4sCLTCdGh/hx8HnUhVFbbOqCPbPXaihrvlwbrtyuwUDp/xZQP -g2mk8YSn9DGO3aqHfCfW7V3E+YKy3nb1GuarE9cnpagDRKD7HbiN64mYyiaMC7KrKH1/5Q -8LZxbW1dcfmv8ZVO7OUSdHWVz6yeOeo2uo7zXsdjvUH/I1K5SrW4k2SplbWfSi9IIqt2AV -7fIH0QlJvG+ddgJrZ7c+Vu0lwftrTnRCFRBhzVx1GgYHzcJz5qwiCKK36pS1HWpy7HPefQ -BboFymLXZ9kADIXB0kB7ACltmWCQsJ9G2fx3xIz6OYI1kaF4l5vnbuXaigu1gIS9OVlXzF -bfTHCmmftJdkKkAatLI2kFiTOy/dibBf2SgKr5pWY7GP7eskyGX97og+o1sWWMPd6gwsPX -H4oZcrVbjmmZUE+z4= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_8192_pem b/tests/pem/non-tfm/ssh_rsa_8192_pem deleted file mode 100755 index 225ee2d4..00000000 --- a/tests/pem/non-tfm/ssh_rsa_8192_pem +++ /dev/null @@ -1,99 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIISKQIBAAKCBAEAqV97tjVnMe5+B6Hu/wGKiyLWEcHLLW07r3tMk2ehx3MCrOkQ -oQobp0lZ3tn5MXnLi3aYgGTa3Y2u7EMai9MA4vr41rnC5pdIQ0NoqT8uP/OPQ5kH -jVYddaEaFJAOh6SOaEq+S0yRqV4p0/wkTD95VOKDOxl8MjrJRwSbEM98cImYIwvX -bFNOha2S8W8tJ6AeRJBmB1iFO0wAaIFa5fqvGqohSJYuqFFuEBpXn0DW79cp/z9c -ZJPyQ6TewWVu119XGwHNfafjKlbjHpCN+G4xzKFVOXr2OFqprX1kSKKLpwHJQroj -rnv6q2DKF8KOuCazGl9fZyJeuY6w6n4wrUULVquovQ/6Uxdi8xEYBJC1PcVerLSF -ypHKY8hKwa75SpUR3V1oZBjdV6J0yt9hkjzsbA5EbMozgq3zJU5HLjrpyASs6RVh -dDfZuh+o4f5g3Wrb0Nbe9nJYE4ECNa67cYeEc24ik4auxhLkJ+WlY7I/2dKvqnmO -9be5TRdZGmi2uOJD1nJkjKr/brNFPdJoEp/ifyrRZwQQ87OIELJ+eARMmVIRf6jp -eBX6YM0evis3UEX15RmNixR05T23ciZ7AZUbN5Xdlt5YIWzTYuFWbC7dLMg3cmlt -sK92rVpRbKuV8ZBmO/5ckcx5VkQiAG0kmYA8/2lgQXab4OeALSL0ScrDtZ2XXw9G -9TS4w/KBrd4X7VslJ/+v1IoFt+gH6oLCYx5ctpqUlud5WCR5LbKz360AzU9yf0n7 -SqRk41OUcMc+NSUkMBInzOS6JhvzBq8OfpCRnaeBoZUUqn9uZUdwUUo0iOq+6H2D -xjgknPU1o5xIn79R7XB9PJs3fdgbullwlhaV8Xq3/aC0lmJWQy1JfZ8XaXJRmqkM -slV8BViilInrtPsIP7tmK8q0NSYE7AJVhWIfP0qPclsql3MBZCqS9HFn9bEW0U7i -84VCMnN9TDVslTdT/o9RxihL3ilXxk8YmjcfKsRBZbLLDVZhcB7ywe7F+z/ITF42 -cXr03pCi5Ckfv/xBEKfKsIxw5Tj1ptbUD7ijB7Gw3I8cl6hTuhzBCYX3ldDliurQ -TJcqUozPPvH5qhQUoiRplzNUtL//Eug9kP9zq5xQ+VyzrLrm02HkqiTcyGi0jbx7 -xpNbSUanOKkIw0VyPGUPkBmSQZd3ox1DPX9XDTAKQqJuEX3GarytDU3rG+DoRRey -t1fAW+g32Glu+k7SUGLTf7BgMHkq4n812d12gR3pQq4fdZKM8yqxHCWHhrVH0faP -Nt1N6U5OW1+0LxAoC7j+huS/C3OlfFSPIl4VeknxFTfXnMIepy7FB4pqkuSL3cp2 -6kPa49/mYWlUIh5qxdZ9468ZxCGNCFklHVMB+QIDAQABAoIEAEUlMPki9h0hUxxE -lLBQbcH9l80qA4tpE7vBJ3LqFNa68jWq9Fn6KW3y+RiMfjofkeQ+p2WLRvq589aK -UpUQsET51oq6zYGb8ylapKirnXMIOM2M9NNTe7Vg7qfEY9omaOjU0rkk6jZttb/Q -KPVj2GG6E38WGWjcLP2sOK31NsUutwhftjOIEv9p7Bpam+GYcaLmHHEVR1b84RHI -9VX8MG4/VFUw0p1umPND/c+LBfRmL8P/lvWMnJPXBAWKJmUQjBv/cWfCGXBYhmIc -+4iXXAdBOey8cTZydODZ1w38Je0pQoPWP+jkvmImonpuuBsf2XCDzQvqsScpxLoG -iFLEZCue6sU8d6JiYsf+i4KZnRQ5tjvletVHDYwM4dAOYcF7+A4aKxrqN7qmHO4R -oeC0tIQskuyi48KOxzvMqCyMapJ4rip9ywpKHr3oXObeFadvD4xDnESaS7Cyszc9 -PVLM01rYdI8rpcBBSBmtnAaGZ6DCbWq4M4/G0IRTatHoO+hgnvc2PixbRupnj3X8 -pvYrhakKzvAybcU/3uWKKS1P/AF/ypsGV0HqHwxT0SArvmosFYXRF8LWuB46QuD8 -Kq1rtO/NY+hKn0oOBoJQohqKS0sT9ebkeZ5vE5ET1Tf7GLzEiagmYJ45DrQUHplz -9UQhYUWYPG6dQGfhuqcypO5XM+y5Xl3iKTQwh5YAA+mt+LtZdgyFJETyA3wieQSf -NGNV3Ep6i4QoXMUHqNN6yZuaPqr+GXqbDitLug/4n+kRxVlgjcDmK0QM1kZviKKN -fPtoI1bQZ3lNvm8PZgXg5UYXHSkOYmcEIF8uksWAHs+hXHxXZ8Y3MMX3TXlOLYfa -gBHpRjYGe32b2LkNg0z0tHwPBTSjfff64VFqmsCMJyb8bcY5JJRptOLC6mDhbWm3 -5AVcLK6gc+ocuszJPNR71Ltn0mGqxXJRbihMGhEiKtonw4B7zwVGuwhP2UwsaQs3 -6hsLBb8kaqF/+LYwrwr5mdh47pzN0IMVTTTRXz9UrxLmEMvjS5tpKlFA2Rzmw6G1 -3iHX8otLO89ONKBvBJHjUlvl/MkXffALq4sV8WYWT0gs0rBAmEZOtCwfXBXPvnEZ -9MLQJCHmn5VfBsgEUnQeW+mPNr3VH0oRMKKfja+U6KmS+IfywkhjOdH+gHZS7R0B -B4HFgPHB+lJ9+ASqj10J4TION/uT6Ph+TJ4fH4Cuvb+89sC0BmQp2jxLbtA1lsEJ -bS9Wvu/f1lJnsZ4hrqNHhxpfTHScSzrB4zalfArzfbZqJAyzL0TEK5yrXvKUgyBC -M59wPO7iQd25ACsZjiEDlN9zVykLBJ6/RoFEEf3Kk6HxLVI0syr9+nocVAnqdDHS -CCUExLECggIBANP/aI6rw6yeQXfm6Zto14kWuAbiyXvmWvLhV+G6t1mmqsNORFZB -oRysDOpGCVe/mTxwovaAZRABPNFtcJbSE909owK2DgooKqiKnjU4akZAOsxG6w/A -zEXUqbHUJPg3dHd8vg0+pD3yNGNH/xQn3QLfklfljxW3IprDoz0RoGdYPjLMmvn5 -irW0tsRqzQeEob0R7Wd5UtmI/zMdUoj7tX9BgmzYcw7JZkj3U1CPjUDOxP3AWmUb -brcq2WTS6mOea7oH0QyrCBcDYrxCdW9Vhb0sm1BZjPMtRq5weikmPvL98eYc++zj -qRCOHcyr8P/87ILlGhuwB1RkFn8qJpjR0nXDi+/IFCRUWyM147kFOCtu1Cd2s/rj -bCt0xUhNup7YCNb3uexj+fG0b91PqKv137phluoxZPI1qkQoOC1DsL02bCQMYr0n -eEYgaO4WeSozlvOD+TEuMe1PTZJL804UbsyygXN3+FaRU12u0/7XeV+a58zpDlzn -Ax/aOXze/++CNaigwtn77eKik2p+fN/B0DnJUEbR+viHr6IgZTI+z58zCDUNiVsA -Wk9J9j4Cbvy096TSq90tSKwWxBKYQrvKl0uy+QEg+fKZ5Oiywoyaa52x4pgOFP44 -0WhF45TSo31twsepPRhZCBaKR1L8BKLbC3XjoODA3BqdR4vxspNpsdpFAoICAQDM -hzEnPNLT/s9Ntw25QRC1qbOBniavel14BN6DSP6T1kedx8g0kzZ2VutUQC/Gqkor -wUcqY94V4PZ9L70MwwKDEeU+sSBmCTJa0SB6bKa7cF9R0WBCd7lKe12ijyFR3Um7 -8Ju7MsiwmIbQz2h2nejVUfwfm2v5M2YRu1v2mgZ6/6Ye58r8Z8FNCjNCjpJ6aVRA -37hLLCudOMJ/julW2k/QOUjzPFKrWHrx4aFZSIm/a8ZLJI7j6pGPYG+CeSrz6E5M -VCgXRhDQT7hGrO53PgkRPHhLQy/P36Ed0sjgTol4IuNj7M4UGQiw527hO09QTksH -ny9bj4c9w9tqqRKYXT2nONENfeCeamJKRSaVqV+J90mcFtTJ3GMSUnOIeKjnXaB9 -4L7viVZ/R352MVhMYf2smRG/BN1WiM7Tmr2iAqWc0ul9YrfYMruOmeo319Cg3EHz -adfbRRFKxfuRMXO8UeYT/mXBfqHJ3ZtDs5CYENFEX4KJ32rD7x8SdeaSa1Y9abuW -BU26CuF7q3lZVLsxHp1HzEv791IdE+tx05mujiWnZnAy91d/k8wQVhVbyI93ij+w -zcZReA8jWp2ETOXtz7sGnrMbdphLdprwmhlOjf7iTjvX08ZVk5LuaBcIVdCiy6+I -nbpgVQ/9UizVJP2rBCwZN6mdjmIljAqP9bRvF7b+JQKCAgBQ7yU/spuVfyWHXQS6 -bCA9GgtPta0uPBdkulsOtnXhKBvxTCQSuiOECrszhWFzupYJ2QaeDQ6IObC6U4m0 -SqeCw1FEa7SYdBU1GxajQtJv132bF0gOT5Cs6C+Q0Gj8yk8QfvMfo1aYv6r4bDgZ -vc5GlowMOnuR0sTHSQE9A0m1qp60TiCsZnRqQn+0JQH5aM1GnV2BL3RN0Ft9bChi -W5ZC6wOcAlaKwqDmImYQT32hzE6wgYsBJqPyEc3FDDCnr4d5EhrhNzpzbrt3G/gx -dPkF682vs0B4ZkShvBcnNo65vfFn5JDZM2EMDPWbedkcIbc5kbWR9HYX5c4g5jqu -BQzQIMN/22a1J+9TVfOGY1O6YSlll4/GrKRTQtU+cU5Z7igRyamVceWuPTCn0Q2X -+NpdEXzIE+tx/MLwGlq4DSugUPKgIIphpHvqad0laDcBwYhTl4K/H9+3tZrry0sr -9+kFBPEe4CJTClBFZ8VPeXvA4Ca2uBLfrOIoeuuPnKMhERjjM9yv09pRt7eH5JpP -4nJYXV7kaq3hzAtlXfDEae5h3N25Q124/D1+H8J+kfdFSuFwb21llzAzYs2gO7je -cM2p/L3LjIdf8xjNLdHQU/PZ1FupqVaiZ5aqtGPaIUCBVjISf63vaa4IzOnF6Kjs -c6vAahK1O2vMTVdPOgru9F8N8QKCAgEAxPaYnmnTuraT2wqjG7mOJvQjW3r7VFgp -9S/zPUkpaSOdWlQP+JmghDxWao9Zsx9BSHvcVfVQ5Y78sTgs/kI6hBDSzRn00m6e -4Jiuh1dlBfNEyF0zLy9u8Ex3stnVw6mwnV4sCw3v+SkaA7MJrdmKZQyMGcAqLhWS -gRcGjChufzr9NpwQfhxJKjDdhoYYh+wxaDxKlZIW+lSz8fWlvq+E10ijeSKpljsi -Qxf/syTJCt/2WVz+gnzd6s569JJNjBA2fwk4hplCDeoH04AsMgc64i9yxUARpkV9 -OmRIcMMRXfFzPELLfs1Q8lQeEqd0TSjo1pE1IR7Kpe+cuU3TC4oXmpd7s1t62fQn -bdDERLKUwB+18qyGBVPI0Nc4Tb+tIQqoSTELj1CaTP6DybzhhMWFbxcF4QgFQ5WC -YIOPhZq49JqkosxTsc/BkaWlylt6nb8fgBN4/b+41GJvTrbp9vyD7tM6GSojEmzo -Xj1pzRe8//RemPngLop0SOnjvzPBHGlbbjDzVmuuE9Phi+auUrJh0sfqkN7vY/NP -9RFK2bAokNp0yJAr4j9p8H2GGhq+Fue7SEAScViGc4yLTuJjNy6qtMhWQedm6J1y -vqwYHO9f+35N4R4fzT/N6uuw6qUBxBUVmSIUXzrrqA/f/u+dnnjpIuvY21NIL1J6 -xYJgXe/fmUUCggIBAL4Kcka/aAIYxJ2V7Y23CZEE91XpbLPBHUQOxEHG5WpV05Mc -zy+zDHIZr/DqXszGP7vV9K2Pmpl3Yods10sSeo5gkNszE2fmP+e4RVd/5z0zsmG9 -HYqQLKoynMOFGmnFHTRj+/U8VDAkK4lMf4PyB5PSW0fG6LBllvjYptg6Y/PzQGgu -qGi5tAwnwLckfOzwRGenrNCh6Pcy1N+ruIZqHQCN155so63jQ70C7KwJqtlSUp+k -z2DxSA5BcFgdfVLgclDQiBxJpdU9bFzqi/UXht9wmQqrWiZ9LTw5NWTn8siGJiuT -m5jjp92L4FdWCA9BZTm2uedYH7NppJBJxxTXMDPJK/J3IW+O5RbNtbuI33mllT3z -lf2ZwKS8ZzEu0U/0M65rcSB7R5gCLt2IAKKcbhY9D2Ewuo271lPAqvq7j84uKh8Z -jbKwjwhMoRbtt0745xLwu+IYtlUI57vdH8S4E1nG862EG3G51ldziAPF/JEmTt0Q -tkx/PCxEsUk7MG9kybZ7WzvkK/j2guzP3wQy6irTO4WWFQNZXv9q9qBT0gurs3Gz -oXm8H3Otf7bbSkMe8yG30KyCrsdYOT6xrBN6POdObakJgNgyRM3mCKdjQzvCmbaE -nKJS0FlxbsE1MGOtBorSXEsvXW/DSuReSysnVRDNkRu7Y5Y0oGAwQQ4J5Pfj ------END RSA PRIVATE KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_8192_pem.pub b/tests/pem/non-tfm/ssh_rsa_8192_pem.pub deleted file mode 100755 index 77db7442..00000000 --- a/tests/pem/non-tfm/ssh_rsa_8192_pem.pub +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN RSA PUBLIC KEY----- -MIIECgKCBAEAqV97tjVnMe5+B6Hu/wGKiyLWEcHLLW07r3tMk2ehx3MCrOkQoQob -p0lZ3tn5MXnLi3aYgGTa3Y2u7EMai9MA4vr41rnC5pdIQ0NoqT8uP/OPQ5kHjVYd -daEaFJAOh6SOaEq+S0yRqV4p0/wkTD95VOKDOxl8MjrJRwSbEM98cImYIwvXbFNO -ha2S8W8tJ6AeRJBmB1iFO0wAaIFa5fqvGqohSJYuqFFuEBpXn0DW79cp/z9cZJPy -Q6TewWVu119XGwHNfafjKlbjHpCN+G4xzKFVOXr2OFqprX1kSKKLpwHJQrojrnv6 -q2DKF8KOuCazGl9fZyJeuY6w6n4wrUULVquovQ/6Uxdi8xEYBJC1PcVerLSFypHK -Y8hKwa75SpUR3V1oZBjdV6J0yt9hkjzsbA5EbMozgq3zJU5HLjrpyASs6RVhdDfZ -uh+o4f5g3Wrb0Nbe9nJYE4ECNa67cYeEc24ik4auxhLkJ+WlY7I/2dKvqnmO9be5 -TRdZGmi2uOJD1nJkjKr/brNFPdJoEp/ifyrRZwQQ87OIELJ+eARMmVIRf6jpeBX6 -YM0evis3UEX15RmNixR05T23ciZ7AZUbN5Xdlt5YIWzTYuFWbC7dLMg3cmltsK92 -rVpRbKuV8ZBmO/5ckcx5VkQiAG0kmYA8/2lgQXab4OeALSL0ScrDtZ2XXw9G9TS4 -w/KBrd4X7VslJ/+v1IoFt+gH6oLCYx5ctpqUlud5WCR5LbKz360AzU9yf0n7SqRk -41OUcMc+NSUkMBInzOS6JhvzBq8OfpCRnaeBoZUUqn9uZUdwUUo0iOq+6H2Dxjgk -nPU1o5xIn79R7XB9PJs3fdgbullwlhaV8Xq3/aC0lmJWQy1JfZ8XaXJRmqkMslV8 -BViilInrtPsIP7tmK8q0NSYE7AJVhWIfP0qPclsql3MBZCqS9HFn9bEW0U7i84VC -MnN9TDVslTdT/o9RxihL3ilXxk8YmjcfKsRBZbLLDVZhcB7ywe7F+z/ITF42cXr0 -3pCi5Ckfv/xBEKfKsIxw5Tj1ptbUD7ijB7Gw3I8cl6hTuhzBCYX3ldDliurQTJcq -UozPPvH5qhQUoiRplzNUtL//Eug9kP9zq5xQ+VyzrLrm02HkqiTcyGi0jbx7xpNb -SUanOKkIw0VyPGUPkBmSQZd3ox1DPX9XDTAKQqJuEX3GarytDU3rG+DoRReyt1fA -W+g32Glu+k7SUGLTf7BgMHkq4n812d12gR3pQq4fdZKM8yqxHCWHhrVH0faPNt1N -6U5OW1+0LxAoC7j+huS/C3OlfFSPIl4VeknxFTfXnMIepy7FB4pqkuSL3cp26kPa -49/mYWlUIh5qxdZ9468ZxCGNCFklHVMB+QIDAQAB ------END RSA PUBLIC KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_8192_pem_pw b/tests/pem/non-tfm/ssh_rsa_8192_pem_pw deleted file mode 100755 index a591b0d7..00000000 --- a/tests/pem/non-tfm/ssh_rsa_8192_pem_pw +++ /dev/null @@ -1,102 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,08E74DA1D2393FDB21570427A7128EA6 - -6hwzv+UuSHy6Uof35kg6rzrSLIPTWUt/6ha0/F9/k8bFg1VTHexi5CnnMqwOBa+o -dVEaF3X/fL/mk8FS2H+n/jjvo2LSaGytrlL3Ns8IH9igRKoJhgia4Cgs8QZDWr5V -NI5JpMebeFjf2Mueeh50pNZoLbyqVnnCuf2pXiHKl3wwGdsoCOmGJtaIdd7TCbcR -jZT5eFr+2Fo1vY045PP8uisCyri+M82HNS/CM1Bt2pMk6AWDqbVFdT1VWOK0iAKC -XCq/+D6StMXS57NIgsoZe7alpsSzEbIWycT5MpCWod0JP/J7zjX0shiOO1jYG/WC -z9aLa2w4ErDVb+51QKfYuPwICMftmnlImLtgSMrdQ0LFpG5KSBtpCF45wLt+va4H -6jtJVFVoDwqlLSKlpe4IS4prHsySNVzabm6xtrt6NER8ER+gPAjvnhOprdU4Q50m -ZsrW+mYQLocbZFVN4KeIafO7XgyXTBP2sDT8VjcXM6wHQXP3o+Mv5UIMZq7eIgsd -A9jZeBD6Hm2NlbKinCL+as1MMpWb2yfLLVurMyjbG/AzF4dV7bFAr0ZVl5iIR4Ei -5IaOY3thKojROcug9J5Ppo2xAf/WWzyNSs0NwtFqueNVQw6e1EQmVU4Xi6V0uiJJ -e7PcP94BD35OhKYPtNFOOfFp1Dizsno3y/BXqnJV4c6POZEPUDA8ZZf2NKFwWdxa -ay8QnIEal5A2odV4C0dp1lfhiQNVnR2siyiIr99jC4vH9NIa9/YwBfenCxw7rkGr -oiNmjaBIkXQKccf4ye4ORV8VQo4r4PTzM1RNchCJ7egqNNCAxaErHKt84/tPvJFQ -fwPjGHeiARHFJFZBBBPXp49oCHGSH2IlZurEUN4C52qiWzrbY2TcjFKSJFOkH/8j -gnNqveauR5tAWhwKqxSEyKixLlB7ab2coI6D2nt9XOgSkXyUUyzWITTPv+Rs+sAJ -tc4aHBpTelyy9V8fjTgaGku/wZRP/kKhSYehXDAoqok9ztuh/QvgaGx016YKg3Rl -OxB12Z4cAB02ZrP0Wr680Zy7/ksVn6897sGogE4BNJpzeSkdbH/FcxgauB8Kdwwo -LEoKQRi9QrJNH9+6IQbn9hqYg4/s7l0N2Ng6jtUcgW1UZ4qNOM66g4how0SCZGHX -F6YKiG/Rt3ySXL9Awd8uPfbH/rp7WQfiqbzbVCnzNWejVLmrXMYQlIwWXaLxCax1 -ZPSseaFBBUJdPfXyWXgVBwGpCDqTlsunp8ag15KBuvdLu74Th5SbAdmnTr/La/b2 -i8MIGANIEkZLRSkRs+C/356iKu3BVFlZMI+eJ+I8u/WoV2KiVRWEzg1Xt2iHjrno -Xhlx+8b2mg3hcxTRJQ2AZF1D8Nym2SAMBJ9xKfyZjCNJc4EhPBgtBhHcqK5f9rPI -DcAhTntwNCqy/FvXaJqpALXjBmbB+LVLS/Pu66xLjM+OFkgyAcJcSu17IUMq+vLq -ogLtizpNAWJMB1Kgz9hfisiApnrz9Mahv92LGhr0ox6sfkW/UagjOvTfuw11e6Yk -eHJjgI7flDgO/S1rEiBjdTJJ5ertjq0LYrDViWp+wrPyHtC4mctz7ZBhWn9+ftxs -zhIq3EPXvqfWzyyhEBm74vn3i3WNLOqq3/rz1iCRmJKzt+LeMYQKARaSDUV7aCq4 -2xFs5XcuEmLrxwR8IZkhKVlfqf9T/qm/1kd5JusKxD8rlMIGxjpQ/vDOlFQvi3Na -22FuedfkNnWkSkXCttolMnOdEG+ZnaQit25kvxSmbXfB8xG4O6LSyZd80pHJ/3h4 -8pvGh19K2tJhK80eBMCpbATjQqPl2PJqUWSNWkCZp9kC+z70dr2Vy+pi5QuOjRuP -Fi6D/YYRvcQEt8AWYmVDs+5pnmBVzcbLylNADipw0jWxokzXH7LjtFokVbYfjgBI -xskTjHWq308mx6RrdyRwgjLySTYclv8yaBbff/KrXG2m6VDpmu4CevfjtFAOunc7 -812M2bpEICcOrU9GXTwZfbSFFFtRkCehmOmO+V7KV3liXCQPQLczcis+V8gAitGE -ZZImygiWaiZ25aA8EtIYYvfCURnkrNSoIStXXJg48Hl+FmwxDKlmLHRNjfAkLfqV -76SLdsVYAXBDk4f46BzVeMlh1IOxGvX2txb1fLsfFeVJ1cSQhkZfduhZMlSQbqw6 -LtHfzisPdVACUt+579ujDor4MIi4iAGihip+/RfyIJHfBoBLT73aWXnrrElmVscA -stVA+A3HrJVrRlpVT6T/pkBXKx3LfkuIkHAI+5o3+uJeFlphghDEpUMDAaNzXzVM -iYwgQZ2FDIB1avSLeDbfUbS+dbC+gXv1Wk2BP8L2mB/ZenyAxukgeFczrfnZ2KTZ -EPvLM8Zo49GLQ1p/MhmR4j2/AljEMdERi7gk1iihv2CwqYOudE9wn/CdOXKCljWe -up01IC5tYXGmpz3JlVG1nM6vNmclDni1s548gtSL+dmme29cJm3688JTW68uxaCp -Rsgw/tb1/hAcUTda8mTKpNIhKaRwXUKL+ZHOXOvSkEF7ztYXrPB7WcDN9BFgsmId -huiMxx9HyYq5ft823DAzsb8f+K/0HDg6nksU8OLRe6pTO6GAuKXv9Jpi+mi2XmUM -7mNxC6kwXhNYBouCT4rzzg1jmwkgnTG/u+JmFSs7SOC9pF0mhN/9OrSahHp1Dr4R -BL+K3kZImD4yCErVSrJ3o3TkRQ6lQeO7Ti2N8JKQeFgfHXZxL1zwRheRyRr0hLRK -NbVFxTUI9Ev/dbVF7TZeIQtwr17up0Aheq7OdkiR8h+RxcFpB/u0x57BLqln/+dB -j8n97gL1TG7mABPu8iQV3tMj2EujO8sjoewYHrr1sPUFWON6ilfASl8Niw7MF76T -E1fyC54iTP2bH5GaEMHTMqvgN68uX73yqYN7xEVPaJDt0aGyVo/fNj5O3EAT119m -b0Gr3XiGEzjmpxCMp2L2JVf8GGHppnBU/NZS5dcU16M7/Zfl7u9uRL/zAgg5y2Pi -yLrxN5vbVST8eSkh0UTsZs9vNOSVEeXxDL/1mT169y01hdoFCdyRsSLXrC0vYDzN -OL+1VguX0I431B/VHogkISAhtAnuVlUTrMLqcGWSLRlDVW3U5PrsFeN2m8SRhbtC -HTBVannV/nalIJJ03brjBj3lvswUoLW/3Q3VGFTM6OdxysHNt+XkBbh5gMBOI2uZ -+lxFO6hVLTELXtciW4IzwwPAmsiPyVPtTmFU7cUI9OHSNTQ7i3zHsPiL0AojHwIs -EG35PY5NqUi3rAvwakPURG4EwYG5ezQXWfdFuw3DFl1ZCPU3E8WFl1PuRF5RUXmu -N16JAg3W087ve+hhK/GbmY4pA9dz88zhxVIUiI23p98n5eHcRDP7Iwk4lNJ6tOUc -qT1W6nszSyAn/7bdqYdZhUIJXnVboB71T8GjBLzAVjUi5iq9uXZBSi1S1cf/ab44 -USFVY5NHCgiQEf99f5AzGZ9mi/1xmcU9G5bShLW6PQ7h+kOETaIuOkzPeJYk/DE8 -UhYHOC3Fnn/Q6PItIt+2GbwA4a1vRpF1/XW5xyuFJNubPTx0NbGZsecOw9HAUH+i -sE+mZ3BQ61P8/ImuO/llBMswwIibxrfa9gJt31wxd3jZSIhOfnCeRbVRnNG8116v -KZdPd5Faz5keuPr1mYtVJ6qK3+cwH/DVXH5Zj9b3sW67joASjx3+/j3/vFLhvsTB -OYWLdTlJesGP/ph5ip72VZvL0+xUcoVeoEM5cRgWmW5XmtXPl1wRRw//BPVuF83Z -zKYwFVPpH856AnKzv7PwMevubi+aQAb54mWdqPb6aSIUCAVJI6IXD7De1EVj8l+H -PBrsXZoLWIVGfo+srpPcR/TRfZe1q5gTirOcGhzzgrPsgQplMYG1uWebbI0kOQDR -4ACAuRbVZeTQU4TINX70vo9w8NOWq5/001t7O317C9HeJuGHjlU163gWtldyzM9R -w7xDfkVTTzfLgFKQTy2dCYM20rt9GK9Cvnt/ncFqU9mqqpPpc3r+8EI2Xx/64Y9U -+0O6Cu1VcBmgMSaJCw+4/1j2irXgFsCKNAX4HZFo4z3k3WO760yIgCEBsuuuk/qI -+Mi+KkAXhfNu3SRSTaWvehwOn9CjoX7Q2IwCqgwK5cEk42FDmBn6d6rqgiaw8uF9 -jdx1kaL5Sz4++8vdVtzyqs1GBRvw411gMe0u2gF2n9IBlpD1uZ1d9/Lx/fULSdA4 -v2bck825yl0MruFMQPo1Qx8rQ0U8R2fnKf5XXaIsbhDgPtAh2rRZ88P2xi7SaSFM -hJwU6rsfjSHiWnEnfynDh7TzcdO8gxuhUACeyRB/SHkD/TOCmXvJitoE3UuVMkL+ -pm8P70Lbk1BNR4RH/unHkKPE3CsNdDDZMtZQzOiCdKurSpK3fCxMlNXvgAdnBCNu -nuBANSi+DlPhjnowCKP6/DNTjbMNaLGIH2afTjkngZKeLx3xGS08789CPHvHFYqe -PJXxoHvWUxHNifzWvvTQQr3HUak18sP2SqrWM3JMQ1cxxNeetx3T4KmINxXPKCtx -bsBPIMqNSmx7Rgzbld8wuokLr+EKJtwP0CCdAs1yOsx9e4uNR8AYMiBNMu/3uZXL -77ajZCl3bsapXk6EtPj/GKT0BexRTj9BLTy7mJFA0Nba3UTOCUsHdtKGQg8lmil0 -r7nksExOanfUx2C2cAPiBPNNYEoKBuHQbOUhckYl+svctujRSr+Vnwzlre7Gcb/X -lqDoWHLdvmkSdVGgTKmIenvgQCshkG3zeIinupuAViAEfy9CWPtkN5E1ylmg3H9W -Z9RfRPpvEmAODHkGy4wTNQjvR9vkDj83K6XJ8k9iks2SR0W1e7/bvEIljTrrCTKC -Vqcs7Y+wIACOOSDYhrVzJb82DLL2famw4vZcfZ5S3Czg4JMu9C1jewFf4Sf0ccCv -Kxy9porL4WoREoTDVLgmVb2zYwsjLMR8iFy5B+V50BAFvj2+C5I9JcLhI90PE3p4 -3yZYoFu4rOQJ0BxYT3UTNI4E63TdUvg8ibDFo16M0ZGb40/Gx09JobvxzRnrzFgR -S8nsZfv3BQNiRPVhppUf4FFj7ei0JWibbPHuASRsyn1ggDJy7wKKwDXU0vJbV/e/ -TPyea6a4m3mVps5Ion2w6l8F8MSrSs/eLZpKK3j/gNY+FfqDB2HDx1K6OJAhcGsQ -06evisjGgSrQVeQjCxG6dlECQG4M2aLX3o/TuJN2wsNj8P3dExFuyJ778n35g8Cr -9epJjB0fKh4dXL7kBBgqqob0ThdnPyQlA2ssWG82d5pPED7ZQe/MKinNADUqvMTT -ZJdJZ7fQAX7s484HDkTI+HtRHrUH0n2IT/3kED9pdUw/Q/2YJ5qRX4jGUJ1kFM18 -L4kI+7NlcdgDat1dhgWzTZc0KLjgvpajLca7Aw8pRccKvW4Lu3sPyZSarWcdCY6X -IfrsXg6lMRE9FOIlcEUrZM4HcOfmaZgP4g4xxs0rhJPDsxLagoWhLRMwfE5+EcxS -06LwAuH6q9ndyz2G3LUrV7kC8AckeGxWVgq5l7oqbzsuImo8eXfNnoAeT6zA0WtG -nLQqfaE2oY9KM+LlHsOX3ASzBccErE1N+k8YT6R1Uxpocipu48esyAZBvMLnlLbu -LnnlvNdqE/m8rj2u1OS/fd+7uyMzWvepICXfa/lwqsS/A/pOCRlt8Vhc8BMjEDSi -psWWqf93n2ccRxcNGQ9RHH8NbCobiDQnv3u8C8qf3EUFFVhfJymKy8tkJxopnH0z -ZL3TufeCZM/DLsajGvFiCtVnb675aTBe+UURbqYezRRaV3aUg454mMiyQEaro3VD -r8r9qjNJbKrWE+2pCuFSftlCfGbc3PpkteyGGxKkt7e30U/RFQLTKBN2kqZaDLWe -dZilAxSDX6zTx9k8LaUjh0FzPX0oPqGm8zfYlejAK03OBSuTGNb/nfMhr9aZRPit -8wL95wI4NC6MwQUVdR15drJ40Cw/HS5Ey+eO0y/FpvLlHGmQLR8eGCXM775cEMTZ -/K4jvSMOvZniBwDQENZ7IitVUvDGH0QCxXJjOA/damiHJLd2zz3bYHpn9I36kBft -+k59FJHtHf412vg5PNmHEngoF0HX9T5UDtPW79tZ/BK34E1rR3vXWRskR5f3+ZiJ -rOYP6b8HQ2jXxj0xvHFWGb3ZbEd7rPGVmZQrq3lPB2kCxR1mvmTflrse+CW5Se3b ------END RSA PRIVATE KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_8192_pkcs8 b/tests/pem/non-tfm/ssh_rsa_8192_pkcs8 deleted file mode 100755 index c24c441d..00000000 --- a/tests/pem/non-tfm/ssh_rsa_8192_pkcs8 +++ /dev/null @@ -1,100 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIISQwIBADANBgkqhkiG9w0BAQEFAASCEi0wghIpAgEAAoIEAQCpX3u2NWcx7n4H -oe7/AYqLItYRwcstbTuve0yTZ6HHcwKs6RChChunSVne2fkxecuLdpiAZNrdja7s -QxqL0wDi+vjWucLml0hDQ2ipPy4/849DmQeNVh11oRoUkA6HpI5oSr5LTJGpXinT -/CRMP3lU4oM7GXwyOslHBJsQz3xwiZgjC9dsU06FrZLxby0noB5EkGYHWIU7TABo -gVrl+q8aqiFIli6oUW4QGlefQNbv1yn/P1xkk/JDpN7BZW7XX1cbAc19p+MqVuMe -kI34bjHMoVU5evY4WqmtfWRIoounAclCuiOue/qrYMoXwo64JrMaX19nIl65jrDq -fjCtRQtWq6i9D/pTF2LzERgEkLU9xV6stIXKkcpjyErBrvlKlRHdXWhkGN1XonTK -32GSPOxsDkRsyjOCrfMlTkcuOunIBKzpFWF0N9m6H6jh/mDdatvQ1t72clgTgQI1 -rrtxh4RzbiKThq7GEuQn5aVjsj/Z0q+qeY71t7lNF1kaaLa44kPWcmSMqv9us0U9 -0mgSn+J/KtFnBBDzs4gQsn54BEyZUhF/qOl4FfpgzR6+KzdQRfXlGY2LFHTlPbdy -JnsBlRs3ld2W3lghbNNi4VZsLt0syDdyaW2wr3atWlFsq5XxkGY7/lyRzHlWRCIA -bSSZgDz/aWBBdpvg54AtIvRJysO1nZdfD0b1NLjD8oGt3hftWyUn/6/UigW36Afq -gsJjHly2mpSW53lYJHktsrPfrQDNT3J/SftKpGTjU5Rwxz41JSQwEifM5LomG/MG -rw5+kJGdp4GhlRSqf25lR3BRSjSI6r7ofYPGOCSc9TWjnEifv1HtcH08mzd92Bu6 -WXCWFpXxerf9oLSWYlZDLUl9nxdpclGaqQyyVXwFWKKUieu0+wg/u2YryrQ1JgTs -AlWFYh8/So9yWyqXcwFkKpL0cWf1sRbRTuLzhUIyc31MNWyVN1P+j1HGKEveKVfG -TxiaNx8qxEFlsssNVmFwHvLB7sX7P8hMXjZxevTekKLkKR+//EEQp8qwjHDlOPWm -1tQPuKMHsbDcjxyXqFO6HMEJhfeV0OWK6tBMlypSjM8+8fmqFBSiJGmXM1S0v/8S -6D2Q/3OrnFD5XLOsuubTYeSqJNzIaLSNvHvGk1tJRqc4qQjDRXI8ZQ+QGZJBl3ej -HUM9f1cNMApCom4RfcZqvK0NTesb4OhFF7K3V8Bb6DfYaW76TtJQYtN/sGAweSri -fzXZ3XaBHelCrh91kozzKrEcJYeGtUfR9o823U3pTk5bX7QvECgLuP6G5L8Lc6V8 -VI8iXhV6SfEVN9ecwh6nLsUHimqS5IvdynbqQ9rj3+ZhaVQiHmrF1n3jrxnEIY0I -WSUdUwH5AgMBAAECggQARSUw+SL2HSFTHESUsFBtwf2XzSoDi2kTu8EncuoU1rry -Nar0WfopbfL5GIx+Oh+R5D6nZYtG+rnz1opSlRCwRPnWirrNgZvzKVqkqKudcwg4 -zYz001N7tWDup8Rj2iZo6NTSuSTqNm21v9Ao9WPYYboTfxYZaNws/aw4rfU2xS63 -CF+2M4gS/2nsGlqb4ZhxouYccRVHVvzhEcj1Vfwwbj9UVTDSnW6Y80P9z4sF9GYv -w/+W9Yyck9cEBYomZRCMG/9xZ8IZcFiGYhz7iJdcB0E57LxxNnJ04NnXDfwl7SlC -g9Y/6OS+Yiaiem64Gx/ZcIPNC+qxJynEugaIUsRkK57qxTx3omJix/6LgpmdFDm2 -O+V61UcNjAzh0A5hwXv4DhorGuo3uqYc7hGh4LS0hCyS7KLjwo7HO8yoLIxqkniu -Kn3LCkoevehc5t4Vp28PjEOcRJpLsLKzNz09UszTWth0jyulwEFIGa2cBoZnoMJt -argzj8bQhFNq0eg76GCe9zY+LFtG6mePdfym9iuFqQrO8DJtxT/e5YopLU/8AX/K -mwZXQeofDFPRICu+aiwVhdEXwta4HjpC4PwqrWu0781j6EqfSg4GglCiGopLSxP1 -5uR5nm8TkRPVN/sYvMSJqCZgnjkOtBQemXP1RCFhRZg8bp1AZ+G6pzKk7lcz7Lle -XeIpNDCHlgAD6a34u1l2DIUkRPIDfCJ5BJ80Y1XcSnqLhChcxQeo03rJm5o+qv4Z -epsOK0u6D/if6RHFWWCNwOYrRAzWRm+Ioo18+2gjVtBneU2+bw9mBeDlRhcdKQ5i -ZwQgXy6SxYAez6FcfFdnxjcwxfdNeU4th9qAEelGNgZ7fZvYuQ2DTPS0fA8FNKN9 -9/rhUWqawIwnJvxtxjkklGm04sLqYOFtabfkBVwsrqBz6hy6zMk81HvUu2fSYarF -clFuKEwaESIq2ifDgHvPBUa7CE/ZTCxpCzfqGwsFvyRqoX/4tjCvCvmZ2HjunM3Q -gxVNNNFfP1SvEuYQy+NLm2kqUUDZHObDobXeIdfyi0s7z040oG8EkeNSW+X8yRd9 -8AurixXxZhZPSCzSsECYRk60LB9cFc++cRn0wtAkIeaflV8GyARSdB5b6Y82vdUf -ShEwop+Nr5ToqZL4h/LCSGM50f6AdlLtHQEHgcWA8cH6Un34BKqPXQnhMg43+5Po -+H5Mnh8fgK69v7z2wLQGZCnaPEtu0DWWwQltL1a+79/WUmexniGuo0eHGl9MdJxL -OsHjNqV8CvN9tmokDLMvRMQrnKte8pSDIEIzn3A87uJB3bkAKxmOIQOU33NXKQsE -nr9GgUQR/cqTofEtUjSzKv36ehxUCep0MdIIJQTEsQKCAgEA0/9ojqvDrJ5Bd+bp -m2jXiRa4BuLJe+Za8uFX4bq3Waaqw05EVkGhHKwM6kYJV7+ZPHCi9oBlEAE80W1w -ltIT3T2jArYOCigqqIqeNThqRkA6zEbrD8DMRdSpsdQk+Dd0d3y+DT6kPfI0Y0f/ -FCfdAt+SV+WPFbcimsOjPRGgZ1g+Msya+fmKtbS2xGrNB4ShvRHtZ3lS2Yj/Mx1S -iPu1f0GCbNhzDslmSPdTUI+NQM7E/cBaZRtutyrZZNLqY55rugfRDKsIFwNivEJ1 -b1WFvSybUFmM8y1GrnB6KSY+8v3x5hz77OOpEI4dzKvw//zsguUaG7AHVGQWfyom -mNHSdcOL78gUJFRbIzXjuQU4K27UJ3az+uNsK3TFSE26ntgI1ve57GP58bRv3U+o -q/XfumGW6jFk8jWqRCg4LUOwvTZsJAxivSd4RiBo7hZ5KjOW84P5MS4x7U9Nkkvz -ThRuzLKBc3f4VpFTXa7T/td5X5rnzOkOXOcDH9o5fN7/74I1qKDC2fvt4qKTan58 -38HQOclQRtH6+IevoiBlMj7PnzMINQ2JWwBaT0n2PgJu/LT3pNKr3S1IrBbEEphC -u8qXS7L5ASD58pnk6LLCjJprnbHimA4U/jjRaEXjlNKjfW3Cx6k9GFkIFopHUvwE -otsLdeOg4MDcGp1Hi/Gyk2mx2kUCggIBAMyHMSc80tP+z023DblBELWps4GeJq96 -XXgE3oNI/pPWR53HyDSTNnZW61RAL8aqSivBRypj3hXg9n0vvQzDAoMR5T6xIGYJ -MlrRIHpsprtwX1HRYEJ3uUp7XaKPIVHdSbvwm7syyLCYhtDPaHad6NVR/B+ba/kz -ZhG7W/aaBnr/ph7nyvxnwU0KM0KOknppVEDfuEssK504wn+O6VbaT9A5SPM8UqtY -evHhoVlIib9rxkskjuPqkY9gb4J5KvPoTkxUKBdGENBPuEas7nc+CRE8eEtDL8/f -oR3SyOBOiXgi42PszhQZCLDnbuE7T1BOSwefL1uPhz3D22qpEphdPac40Q194J5q -YkpFJpWpX4n3SZwW1MncYxJSc4h4qOddoH3gvu+JVn9HfnYxWExh/ayZEb8E3VaI -ztOavaICpZzS6X1it9gyu46Z6jfX0KDcQfNp19tFEUrF+5Exc7xR5hP+ZcF+ocnd -m0OzkJgQ0URfgonfasPvHxJ15pJrVj1pu5YFTboK4XureVlUuzEenUfMS/v3Uh0T -63HTma6OJadmcDL3V3+TzBBWFVvIj3eKP7DNxlF4DyNanYRM5e3Puwaesxt2mEt2 -mvCaGU6N/uJOO9fTxlWTku5oFwhV0KLLr4idumBVD/1SLNUk/asELBk3qZ2OYiWM -Co/1tG8Xtv4lAoICAFDvJT+ym5V/JYddBLpsID0aC0+1rS48F2S6Ww62deEoG/FM -JBK6I4QKuzOFYXO6lgnZBp4NDog5sLpTibRKp4LDUURrtJh0FTUbFqNC0m/XfZsX -SA5PkKzoL5DQaPzKTxB+8x+jVpi/qvhsOBm9zkaWjAw6e5HSxMdJAT0DSbWqnrRO -IKxmdGpCf7QlAflozUadXYEvdE3QW31sKGJblkLrA5wCVorCoOYiZhBPfaHMTrCB -iwEmo/IRzcUMMKevh3kSGuE3OnNuu3cb+DF0+QXrza+zQHhmRKG8Fyc2jrm98Wfk -kNkzYQwM9Zt52RwhtzmRtZH0dhflziDmOq4FDNAgw3/bZrUn71NV84ZjU7phKWWX -j8aspFNC1T5xTlnuKBHJqZVx5a49MKfRDZf42l0RfMgT63H8wvAaWrgNK6BQ8qAg -imGke+pp3SVoNwHBiFOXgr8f37e1muvLSyv36QUE8R7gIlMKUEVnxU95e8DgJra4 -Et+s4ih664+coyERGOMz3K/T2lG3t4fkmk/iclhdXuRqreHMC2Vd8MRp7mHc3blD -Xbj8PX4fwn6R90VK4XBvbWWXMDNizaA7uN5wzan8vcuMh1/zGM0t0dBT89nUW6mp -VqJnlqq0Y9ohQIFWMhJ/re9prgjM6cXoqOxzq8BqErU7a8xNV086Cu70Xw3xAoIC -AQDE9pieadO6tpPbCqMbuY4m9CNbevtUWCn1L/M9SSlpI51aVA/4maCEPFZqj1mz -H0FIe9xV9VDljvyxOCz+QjqEENLNGfTSbp7gmK6HV2UF80TIXTMvL27wTHey2dXD -qbCdXiwLDe/5KRoDswmt2YplDIwZwCouFZKBFwaMKG5/Ov02nBB+HEkqMN2GhhiH -7DFoPEqVkhb6VLPx9aW+r4TXSKN5IqmWOyJDF/+zJMkK3/ZZXP6CfN3qznr0kk2M -EDZ/CTiGmUIN6gfTgCwyBzriL3LFQBGmRX06ZEhwwxFd8XM8Qst+zVDyVB4Sp3RN -KOjWkTUhHsql75y5TdMLiheal3uzW3rZ9Cdt0MREspTAH7XyrIYFU8jQ1zhNv60h -CqhJMQuPUJpM/oPJvOGExYVvFwXhCAVDlYJgg4+Fmrj0mqSizFOxz8GRpaXKW3qd -vx+AE3j9v7jUYm9Otun2/IPu0zoZKiMSbOhePWnNF7z/9F6Y+eAuinRI6eO/M8Ec -aVtuMPNWa64T0+GL5q5SsmHSx+qQ3u9j80/1EUrZsCiQ2nTIkCviP2nwfYYaGr4W -57tIQBJxWIZzjItO4mM3Lqq0yFZB52bonXK+rBgc71/7fk3hHh/NP83q67DqpQHE -FRWZIhRfOuuoD9/+752eeOki69jbU0gvUnrFgmBd79+ZRQKCAgEAvgpyRr9oAhjE -nZXtjbcJkQT3Velss8EdRA7EQcblalXTkxzPL7MMchmv8OpezMY/u9X0rY+amXdi -h2zXSxJ6jmCQ2zMTZ+Y/57hFV3/nPTOyYb0dipAsqjKcw4UaacUdNGP79TxUMCQr -iUx/g/IHk9JbR8bosGWW+Nim2Dpj8/NAaC6oaLm0DCfAtyR87PBEZ6es0KHo9zLU -36u4hmodAI3XnmyjreNDvQLsrAmq2VJSn6TPYPFIDkFwWB19UuByUNCIHEml1T1s -XOqL9ReG33CZCqtaJn0tPDk1ZOfyyIYmK5ObmOOn3YvgV1YID0FlOba551gfs2mk -kEnHFNcwM8kr8nchb47lFs21u4jfeaWVPfOV/ZnApLxnMS7RT/QzrmtxIHtHmAIu -3YgAopxuFj0PYTC6jbvWU8Cq+ruPzi4qHxmNsrCPCEyhFu23TvjnEvC74hi2VQjn -u90fxLgTWcbzrYQbcbnWV3OIA8X8kSZO3RC2TH88LESxSTswb2TJtntbO+Qr+PaC -7M/fBDLqKtM7hZYVA1le/2r2oFPSC6uzcbOhebwfc61/tttKQx7zIbfQrIKux1g5 -PrGsE3o8505tqQmA2DJEzeYIp2NDO8KZtoScolLQWXFuwTUwY60GitJcSy9db8NK -5F5LKydVEM2RG7tjljSgYDBBDgnk9+M= ------END PRIVATE KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_8192_pkcs8.pub b/tests/pem/non-tfm/ssh_rsa_8192_pkcs8.pub deleted file mode 100755 index 2996f374..00000000 --- a/tests/pem/non-tfm/ssh_rsa_8192_pkcs8.pub +++ /dev/null @@ -1,25 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIEIjANBgkqhkiG9w0BAQEFAAOCBA8AMIIECgKCBAEAqV97tjVnMe5+B6Hu/wGK -iyLWEcHLLW07r3tMk2ehx3MCrOkQoQobp0lZ3tn5MXnLi3aYgGTa3Y2u7EMai9MA -4vr41rnC5pdIQ0NoqT8uP/OPQ5kHjVYddaEaFJAOh6SOaEq+S0yRqV4p0/wkTD95 -VOKDOxl8MjrJRwSbEM98cImYIwvXbFNOha2S8W8tJ6AeRJBmB1iFO0wAaIFa5fqv -GqohSJYuqFFuEBpXn0DW79cp/z9cZJPyQ6TewWVu119XGwHNfafjKlbjHpCN+G4x -zKFVOXr2OFqprX1kSKKLpwHJQrojrnv6q2DKF8KOuCazGl9fZyJeuY6w6n4wrUUL -VquovQ/6Uxdi8xEYBJC1PcVerLSFypHKY8hKwa75SpUR3V1oZBjdV6J0yt9hkjzs -bA5EbMozgq3zJU5HLjrpyASs6RVhdDfZuh+o4f5g3Wrb0Nbe9nJYE4ECNa67cYeE -c24ik4auxhLkJ+WlY7I/2dKvqnmO9be5TRdZGmi2uOJD1nJkjKr/brNFPdJoEp/i -fyrRZwQQ87OIELJ+eARMmVIRf6jpeBX6YM0evis3UEX15RmNixR05T23ciZ7AZUb -N5Xdlt5YIWzTYuFWbC7dLMg3cmltsK92rVpRbKuV8ZBmO/5ckcx5VkQiAG0kmYA8 -/2lgQXab4OeALSL0ScrDtZ2XXw9G9TS4w/KBrd4X7VslJ/+v1IoFt+gH6oLCYx5c -tpqUlud5WCR5LbKz360AzU9yf0n7SqRk41OUcMc+NSUkMBInzOS6JhvzBq8OfpCR -naeBoZUUqn9uZUdwUUo0iOq+6H2DxjgknPU1o5xIn79R7XB9PJs3fdgbullwlhaV -8Xq3/aC0lmJWQy1JfZ8XaXJRmqkMslV8BViilInrtPsIP7tmK8q0NSYE7AJVhWIf -P0qPclsql3MBZCqS9HFn9bEW0U7i84VCMnN9TDVslTdT/o9RxihL3ilXxk8Ymjcf -KsRBZbLLDVZhcB7ywe7F+z/ITF42cXr03pCi5Ckfv/xBEKfKsIxw5Tj1ptbUD7ij -B7Gw3I8cl6hTuhzBCYX3ldDliurQTJcqUozPPvH5qhQUoiRplzNUtL//Eug9kP9z -q5xQ+VyzrLrm02HkqiTcyGi0jbx7xpNbSUanOKkIw0VyPGUPkBmSQZd3ox1DPX9X -DTAKQqJuEX3GarytDU3rG+DoRReyt1fAW+g32Glu+k7SUGLTf7BgMHkq4n812d12 -gR3pQq4fdZKM8yqxHCWHhrVH0faPNt1N6U5OW1+0LxAoC7j+huS/C3OlfFSPIl4V -eknxFTfXnMIepy7FB4pqkuSL3cp26kPa49/mYWlUIh5qxdZ9468ZxCGNCFklHVMB -+QIDAQAB ------END PUBLIC KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_8192_pkcs8_pw b/tests/pem/non-tfm/ssh_rsa_8192_pkcs8_pw deleted file mode 100755 index e9e43fa7..00000000 --- a/tests/pem/non-tfm/ssh_rsa_8192_pkcs8_pw +++ /dev/null @@ -1,102 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIISrTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI2doDzjPpbFYCAggA -MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAECBBAoRx/C3FObs8siwEyNKIT9BIIS -UIj1zexhRjGE0dMpGuwzSjYUqRDoRiDbshEzI+oAwivi5wkHC0am6CbHr3e3aYRn -iXfZSqjK9fo7K1sevy/CnYqBGwh/PG4wxiTQr+yM/rlgZ4NKSkF1xG5UHhpZh/Y9 -s/jj6t+co6/tkSFnQXw09ZL64tPkWv3p42FKtR5MINzlxuS6EraF2HdDkELdYciG -4vzXDAK9O5VSH/ad7gfIjOe3erHQTqPVJMqaTgvENcA9pCDRx9OHZdWY0QAT1CSM -A58T6oa4bNHJ/+rTzxfUecmhgjxIOtwX2NYD+YgMUTmBz2FIzvQJMuLigSGBe9MV -msaa/Aph8rvtfJihgFdzXvDW7F6gAMd0B+MaTxyB9iwmGRj4kGawTOTA4eax3d3O -J50mInJwYg+a/SIHFYqXeAP+OupEi8MR8I84yP/ZxLmWNgsoD5wV84gDfQ92jdgL -BNkqLnZFAedMTa7SFJhz8eXEz15W3ILSUVE2+gGJbuLNczJN7reSc5schwFq+MLD -+9xgMQU1Pl/6htHG85Vqx/wOrQNfG7PTep7gHfJWpMuZ59Q2TtOO7M8SxK7WDmhB -ni5eNQETZkixg2F3pejPFDMETcL4GrUc8RgkU8ArXV8GQo7blQpWK3f6xtZ3JdEs -VkElAPWr37o+5dff53mG+lU7F1Bx/kskugbM4nJalkFbp2v4KUOGWW1Tdnxp3wFL -QOWwIYoikoYyK3IWSq0x+7UPoo9d35+AT8f4kj0xct7euOR27g+Qag3J/Z4cDY30 -EvrDAo2ddrVCZAuMl3hC87BA6nY9sdXCVSDpNV+IdqHhr3844+dzpAXiEFKkgfzx -5HHD280HBVNiTMVxXCpQ6CZIKPSHwoZjbeC1XFxcL94te8mZdjIr8VqDlgNRV9ox -i6K+JVTuISjKlC3nNE3fQgcT+aIdpNP/0qKgwcVoSUJGiLa16MEtMzHSD7ttnhEP -LOTL9g+0HdV2KJzbiOE+Kjjoc4DI+SjQ4BxoL2GAvMPLr/9w+ah2+K3qB2WD2Ght -NKIulITS0s2IxyzanXdgnzkIT9rG6qoluFl88n+bgbykd2yy5ZDlOUse/vE+p65b -uIOhG4vp74oiy/QYaBj2vHdNraAhy5m7sj/pOXsyjWh8QpHIyU8XtvjmIWLGwNY5 -/xHwsxMWwaQSy0ovmQFepLAMDXYDwtZRJhlCC+1n0qUKK7911Kv2kTCshwOdUHlP -NSQWS+acJ0728kMeAMqHm/S6zlFCADD5mpLCEATvzpIIByfUPaYZ+FxoNv+NQ2K0 -6uwneQmJhd+DGZzz8MqX/p0R3GMoNWC4Tw0VMfhaliNP9fwDRUCoMVGBAoq2Tl3w -QmpwvnpQEPD2hduaNTK2GqUZnEE4lMaCSA6fidgIC+E+qTE1HX5g9u8HjPdiDYIJ -IHxzib06D4+KItUH8k9s5g52rFJY8TY1S/O3cDpRzawsoadZZX/cifWNLrEcFu5u -pPKP0ey27fOiVyO4KhjQ9fPjNhyQ2NIgwgtFAM/7dccrzxc0QOmHMs55S9zU7KeP -+IuwBnfitfLFVMJPhV5id6uEjH3E+MqclKYPQyfgzBJxreohk5mn3p3MrHdTSHkt -kAcrCZGsZ3AFMkZ2KgKvzf0h/ZD6XfNqB7WaEXDM7hWWQWqsSYdO6BRwD0+p9ukr -mvgQUJj2PJCUHp0PFx+IZrAe7bBC20Bif7l1nWYzSLMDfDqadAWVSSkEm+t89Wbk -Ajj5Oj4T21zrP+5DMCdz64cHD8eGKHMwTMU9Y/ZqLTh7+YAn1X2Q907ZY8TBzRbL -n4zxwu+WzNuafpSyGOshhCmQAjIKzSxvK866sBnzBVDyMgvTd4IX7GAYzC+Mn3Ca -akvLAmhbojUKB1ZKKjMToIuq92zfGQutVn2jOxfFsEMiG6V7Z0101mcF1ZJcmyoL -vcGDHGoqXiOK4E+x40V7E7KF6kPGp5jUta8UjaePv7RPJ6W66moK8tt0t85leiUX -bpBIWy7RoJf9PB3ZxhBStbwXhOAdaOHas4vBp0ZBUCUthdeKRds4lacHaoNuP4F3 -H4en4arSiWmpTt30LeprYP7Goth8ymRE6Rz733aNFN+fY9KoiYc+UGtqVEUBeKbK -MRdLqbBTrljxh232rJjp2rG+uBM1bDvPuAIcTiOuQRq9R+H24a6oFhFsqatrLmF/ -XDFkS9/rMe2GX8D7oZaS7K9WNqGgn26jPCYZpBIsXivjTYxXSpDk9z1hSlhy2y2/ -XhFZ50toieLOXLAWL3i5GtcQNkwYPW9/O/xrYwjG+edOILqv+SdKbsVwehnRwClZ -4Nof3jtnLuA2wbiu+ALa5wepSxgcqe2i2rN3+Q5BQNKhhE2Xqy+JUs5XSQ8PXDBV -BTBSCa9FoBTlnm/+qehnMYzZBi4nUxsmqWRp4jQIbfx12fmFniD3+4xL0+pUuI1x -SqwIxE3D8+Oi3RkBrnBAMVhveRUUTOQVQ6AQEaHhCDRZEx3F7eZB/gkNDDA0vd4j -Zc9HIJFhZigqY3KZ5zj1auPmwYstVpprhQTVtd5uYlMbw2e+a7Fw0U2X1yLavVNv -zLG4c877n8TOsSgGNqomWUNA9DTUzP7zFvzEtnc1dwz63CmK6PIE62AtbAvYBt21 -YE5LSY2IBEpNvEEFctsPLPStyd9rFcU06pEspApWbb+yd/wqu7SIEfIBT2z0JQe/ -UKhb+eGm1fHchv+VWJiaqDEyaj2hyj9bKOJNTrKbxXGQ3edSrUJbvZ3Vi8F2PseP -D++cazE2VitnJYTwZBhZOT8LVbxd9w7GQriWSfUdxZRRtDodOpZ09oDc5aoG8ag5 -Fp0xS0+BVFZcwwxm9QO2Z4ydfJEdlcsX8yqhC2rjd04TBBs351vpUkItEWimQ+/o -xgqVrbYu7+HPJbCrrp7dyV6ygJ9HtYXadba0X5rEHv/VrJ3Brqcx0sypscMYVMot -pBFxQif57yJzgnxOIWOOjV5TgTxCykjwm4gjhSxrhKeuptHQWRm+PHjWTqStO3aK -JRmpYuV0xSWl8CRLifK7U5dkiAQHi7xrhwCdr+Jd0VtQu9AQ8eGRaUfrxsM6pqhh -TpOvylwHCXr2xK4wU9dknGBHKBrzLqr2uEsKfltbZWAH+BBgMDyWXKMU5s1L+EXJ -KgvtnWqGTjK9OOlWqYiH47GJL1J0NABxH+PUywQ1GclHGtQ1VncWem/BXpcZ21GO -a2nT8UPCgdq3FWGexNknRIFuLgjR3OhvQe3ug/5XElFFJWMfzJWST+ig773WKeBL -bSmBQceX4zNpGJFTeggfYw1xLnU9sZzVpzbX1HzacjCSEnxhWPfiJlxRKHGnxmju -NuLlP5Cm/RYe1VA2C7AgtgOHsebB9vCbgfHabjtkwPgkFsEADmXNqqoaV8E7bQVy -cj7sme3C71FZQLUjBGmH1JBz/txzZzIFsdgTapvyURk7sPyJrjPpZ11FqKTSMqFm -bLxCvOn3TgP+tF4efGsDmFB5OUj+19b+3fZ190IJ5u8uHwmTwxTING7DPk+ds6OA -opursyvZl/snvRZIwYNSeM3AxXSOTO4tE69W7YBSY6yvaJUp/7Xwf8ukE22b2K99 -byi1zUkspYVy4ncDCXGpCN435wBlfw7N/py1SyYcA5ACxnphrID6tzVeOEbrRP/h -f7XB9uUvCFEtdqSxV2KZlX46G4WwzeeFRTexYVpKhGnvvg4+gwGbctU0vZX6hug6 -cOM7BU7KndbplHjcUZMfCuuayX6Xqv4NbW6j0YvQNCYh595mFgTTU5QmG8Q0YpfR -Tic0COZvOB2xqZitZv6FUoKCgGDSWp5q5ZWHywY4aamrMTM29SlB2qboJHX/Lim+ -Tdpqc7y29+XRF7X6sM68t8gAtHwXwFK16DnZR6G3tTEtX/WnWxAwu1rm5zVOUl47 -t4BH0rxwlBPDGZCXoGITL2opCRkgcj5xx1UFE2TAy7uV3Fx6MAsy2oQOUk6CBmEB -3VMDxgXwXBOb6iqw24hvtcxpSbX31TzOG7cR420kkErIy7iA8vcTA3empALqgylp -No07/zPz9U07xt7gHd+v/zQS9M5FUvKQJan60frC1hzKrtJEOABi/+dPnAfJs2Mj -QwMWbGCnT6jcauAi4iYT1fRYJxIDGwjh97+7eRuJJCVV6a5ukt+4h2lTJkGQlrJF -DOL7EKk0EXR4HeANuaKJKJV8Y+qdvE/ZgVDqTgezcRCtrUsiuEwRz9mCvXqpaNf2 -lj4H/pk68R86bOfifZxpINHQ6sYcAsQawZELgYWl9kTmNxyySzlt29PCEAcXFZDa -bAIQ3H9RlitUUMCyXyDYUcsEeETX3mdk8yWzavn/usefADxlFcNXunaxhEBi3BbZ -VeBeastodIARbycgIcIY8oZEJToZNEqcgrihYo480b+CX8ihugR0DkmcWrWIaPgz -aVHlrqW5Mi3eszSCow324TafQ525yPMZqqHzqjPa7cRkpS+zSRnbqzPQCxIeC+Pg -IMopmjXDWsdZ9xSBGZqbATY3yTYz9e/jeZoK+Xd0QdfIPxm3DYi40AWdNRBc5X30 -ZZc5kYe7P3BAxaeQKoktpg+7h2Vli7RKSvHWCNOpV8giwMzwgohyAjt8vxX5U3QR -/TKTz6yxRqa27d+2wSioETKdR2oxVHvS9OxWcQg45kMVj7aEXNqujTlVRvcfpUYI -766ARAUm8BaXbUjYsMy8v6fH6oqHWgYnjBmAN1AX1LL84Zb5rPg3JnXNHfo+RAfR -E6RjhUMxmYBVvFqKPX7ltmTbCyWZhBo09SJ4W78UbV2WSN7kuGx6qrL9PjHYZ8X4 -EZUhIrzpeF+V+GrQyfTMXMSfK1B0s1zRvBB5AaLeubst9yVqXLxkvJ6iLBu0syEv -mJgUqMybVS1t25eJknfUZs+MU2MBbFn6eECBrNpZHAcmT1VIe+aEg1C+riDgxuM5 -Gk0tZM7IIFgAwl3E8Lz48qZOWWFE72QEjfHM+BI+E9FGTQ1lr4QUufOQd4UxIiH9 -4I4L4DSaX1X0JH3ln02hKG1y+cMlYPL/t2DgGgt1ej84asZjWV/inrflQMC3tggU -c7SuN9ByX9C4HUXIqK3vrfzWu3GxeuiG34xidxUpLP77FIisdQDkhFf7kBi9D5jj -5vxoGDYJGtaM4WC+nwKJLBaAqQVHzH2sqoVoi4mf4JXnIJmbox24Pe7B9FkKXuLj -oGBwDgl+UeVNZyZ1/1APUz6rNxI8a4LsJ1JqUXrsl9DMj0ieGGbyNee+I1ufSrve -tLtl+S3/tdkbs5nJv9JTWbwc15apbPCZpesLUct1ONSMUgkh/L8hzRG5a/gl71O6 -Me+/P7aX55q2fJbt7y83Z9IHm8oW6Pez1Xny3qozwWhYDqIfPIrQN9SRc/TRg6P8 -S3pGpjE+F3tVDHNrrpdnM/cFO+rJeDXt3ZfUWCE4dW5u0hjZYC1JQoj9ABBpX3/W -GzAy5E4cbux310Pd0UL9BVkcClbMeQB7SF9BEDi679/x+IhfZ8BYg0o0kax8gVg2 -waDHxFo+F+ucbEKTBfpvcAfAjHQEH+5aA8aapd9glA+lI1L8Fn0+QiwHSChiLqsO -LIAYSo50FrD1g3w5ahGYJ0XLuQ28J1OdJ+igGqTWk/R5v3XUUFvBluPR+PqukY65 -vTLAnLatWW5goXs3HdjZ6wUfHI4mat5ataeRi7PdmdsO+ieS2DobaHjKO07Aoz7m -dYASdkNlepGU6Uj8IPtSnDzx8mq09XAjFrYs52X7ld2aBoY9G05kcCZ3SSqfgNXt -9HDiNtuYZj25oj88Y9Z+pUZYMxLP+jILLJVIxVTHICemaoYs4MJKIdDvgwKXZgmH -146PYlAMe25qe7aBzmLdFiDqyGQ5cIg94GEDbBkztgxPAUhh3yiRznt/1y32TUa3 -60ZTAyIIQ2l9Vl88ikSZ8bqALTLN2N4o/pnXgcpL1Mq4+7XX6sFS+popQxuOb4YF -KD6qlSZDDc0EvNgDCmtQoC+UF4ySAheJjG2uaQ5bdNmeW6br6SiU2D9UMhRjXfTh -23mb8WdxlQNJm+tlNnjdJODXxgU9ssGD2Cfllj9GWbzQVs+PcGDVzDanHzffBU0n -NIw7JN3A7504KxuqpcaIR8GnwyUeHTjxEbTqmua7wqLLk8GzxJfBipe2nGiug4rj -nhha38O6NmQ/EYEVFMKf/pHTApDHdPFxVGQO/T9EcXZLC3oAAyzrH5MCA4LU+5+X -uH1o1mvXXfvqM3RB458IHvYMjPSL//a9eDTi7wDDovcZ ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/non-tfm/ssh_rsa_8192_rfc4716.pub b/tests/pem/non-tfm/ssh_rsa_8192_rfc4716.pub deleted file mode 100755 index 3ca5bc10..00000000 --- a/tests/pem/non-tfm/ssh_rsa_8192_rfc4716.pub +++ /dev/null @@ -1,23 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "8192-bit RSA, converted by miko@YUE from OpenSSH" -AAAAB3NzaC1yc2EAAAADAQABAAAEAQCpX3u2NWcx7n4Hoe7/AYqLItYRwcstbTuve0yTZ6 -HHcwKs6RChChunSVne2fkxecuLdpiAZNrdja7sQxqL0wDi+vjWucLml0hDQ2ipPy4/849D -mQeNVh11oRoUkA6HpI5oSr5LTJGpXinT/CRMP3lU4oM7GXwyOslHBJsQz3xwiZgjC9dsU0 -6FrZLxby0noB5EkGYHWIU7TABogVrl+q8aqiFIli6oUW4QGlefQNbv1yn/P1xkk/JDpN7B -ZW7XX1cbAc19p+MqVuMekI34bjHMoVU5evY4WqmtfWRIoounAclCuiOue/qrYMoXwo64Jr -MaX19nIl65jrDqfjCtRQtWq6i9D/pTF2LzERgEkLU9xV6stIXKkcpjyErBrvlKlRHdXWhk -GN1XonTK32GSPOxsDkRsyjOCrfMlTkcuOunIBKzpFWF0N9m6H6jh/mDdatvQ1t72clgTgQ -I1rrtxh4RzbiKThq7GEuQn5aVjsj/Z0q+qeY71t7lNF1kaaLa44kPWcmSMqv9us0U90mgS -n+J/KtFnBBDzs4gQsn54BEyZUhF/qOl4FfpgzR6+KzdQRfXlGY2LFHTlPbdyJnsBlRs3ld -2W3lghbNNi4VZsLt0syDdyaW2wr3atWlFsq5XxkGY7/lyRzHlWRCIAbSSZgDz/aWBBdpvg -54AtIvRJysO1nZdfD0b1NLjD8oGt3hftWyUn/6/UigW36AfqgsJjHly2mpSW53lYJHktsr -PfrQDNT3J/SftKpGTjU5Rwxz41JSQwEifM5LomG/MGrw5+kJGdp4GhlRSqf25lR3BRSjSI -6r7ofYPGOCSc9TWjnEifv1HtcH08mzd92Bu6WXCWFpXxerf9oLSWYlZDLUl9nxdpclGaqQ -yyVXwFWKKUieu0+wg/u2YryrQ1JgTsAlWFYh8/So9yWyqXcwFkKpL0cWf1sRbRTuLzhUIy -c31MNWyVN1P+j1HGKEveKVfGTxiaNx8qxEFlsssNVmFwHvLB7sX7P8hMXjZxevTekKLkKR -+//EEQp8qwjHDlOPWm1tQPuKMHsbDcjxyXqFO6HMEJhfeV0OWK6tBMlypSjM8+8fmqFBSi -JGmXM1S0v/8S6D2Q/3OrnFD5XLOsuubTYeSqJNzIaLSNvHvGk1tJRqc4qQjDRXI8ZQ+QGZ -JBl3ejHUM9f1cNMApCom4RfcZqvK0NTesb4OhFF7K3V8Bb6DfYaW76TtJQYtN/sGAweSri -fzXZ3XaBHelCrh91kozzKrEcJYeGtUfR9o823U3pTk5bX7QvECgLuP6G5L8Lc6V8VI8iXh -V6SfEVN9ecwh6nLsUHimqS5IvdynbqQ9rj3+ZhaVQiHmrF1n3jrxnEIY0IWSUdUwH5 ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/openssl_ed448_pk.pem b/tests/pem/openssl_ed448_pk.pem deleted file mode 100644 index c31b2401..00000000 --- a/tests/pem/openssl_ed448_pk.pem +++ /dev/null @@ -1,4 +0,0 @@ ------BEGIN PUBLIC KEY----- -MEMwBQYDK2VxAzoAZkavwN2Jb7JwbSR79T0JZUDV1VOCgm1AlFdsW9dV+O57w7E2 -+y9O4Ejkhya86byArbdRsOk7ovqA ------END PUBLIC KEY----- diff --git a/tests/pem/openssl_ed448_sk.pem b/tests/pem/openssl_ed448_sk.pem deleted file mode 100644 index 7d6ee84c..00000000 --- a/tests/pem/openssl_ed448_sk.pem +++ /dev/null @@ -1,4 +0,0 @@ ------BEGIN PRIVATE KEY----- -MEcCAQAwBQYDK2VxBDsEOe/w/F8aSpwuG9cBnsAkhloXWhPJEVhCxzWdXebe27Tu -f1R24A1BP7pjIihNdlXTsxv+sFuKWMR5ng== ------END PRIVATE KEY----- diff --git a/tests/pem/openssl_ed448_x509.pem b/tests/pem/openssl_ed448_x509.pem deleted file mode 100644 index 33de3f85..00000000 --- a/tests/pem/openssl_ed448_x509.pem +++ /dev/null @@ -1,11 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIBhDCCAQSgAwIBAgIUA30c9xlNmn6aa6MeW/sattDShU8wBQYDK2VxMBExDzAN -BgNVBAMMBkNyeXB0WDAgFw0yNjA0MTQxMjAwMDNaGA8yMzAwMDEyNzEyMDAwM1ow -ETEPMA0GA1UEAwwGQ3J5cHRYMEMwBQYDK2VxAzoAZkavwN2Jb7JwbSR79T0JZUDV -1VOCgm1AlFdsW9dV+O57w7E2+y9O4Ejkhya86byArbdRsOk7ovqAo1MwUTAdBgNV -HQ4EFgQUrowTD38+WWdAZuwA1WLZu/7xsGIwHwYDVR0jBBgwFoAUrowTD38+WWdA -ZuwA1WLZu/7xsGIwDwYDVR0TAQH/BAUwAwEB/zAFBgMrZXEDcwDD6A7cE22i0417 -jNIVCCMPxY09OkC5yFLXV3MilpvyWyUQFz/J4XWxpnRyWYaap6EeZLzowTtPFgCH -uPj4rCSVFQkBRaMkBv1zsFUXz7mAg01aNZFu7aDO+n+ctpl/8+BLw1+lQm4BiOGw -47xwywstBgA= ------END CERTIFICATE----- diff --git a/tests/pem/openssl_x448_pk.pem b/tests/pem/openssl_x448_pk.pem deleted file mode 100644 index 3df5c952..00000000 --- a/tests/pem/openssl_x448_pk.pem +++ /dev/null @@ -1,4 +0,0 @@ ------BEGIN PUBLIC KEY----- -MEIwBQYDK2VvAzkApScinIzW1CGVm4zV1j6fw7GsbeHGFy8QY7JLd8tXGiaXzr+/ -OwJqRZ9X1QhfEYso6no4d1fP9N0= ------END PUBLIC KEY----- diff --git a/tests/pem/openssl_x448_sk.pem b/tests/pem/openssl_x448_sk.pem deleted file mode 100644 index f6c4fe67..00000000 --- a/tests/pem/openssl_x448_sk.pem +++ /dev/null @@ -1,4 +0,0 @@ ------BEGIN PRIVATE KEY----- -MEYCAQAwBQYDK2VvBDoEOPBQlJ/c83DaT71qCGj25lKh7rr3q6pRBIqHCjExTXD0 -vM82EulDzmjR9WU9zaS00j2LU4XXKpvV ------END PRIVATE KEY----- diff --git a/tests/pem/pkcs/dh-encrypted.pk8 b/tests/pem/pkcs/dh-encrypted.pk8 deleted file mode 100644 index a7e313fc..00000000 --- a/tests/pem/pkcs/dh-encrypted.pk8 +++ /dev/null @@ -1,11 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBjTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI+JYkd4NoIU4CAggA -MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBCNnY9OuYIvCurJu9sEYkz6BIIB -MGzX4GwCvBQV/dOiy0PvbY443xkKZHPTtNbirE+9NLVVrTI7EUQv5UO5Xl0wVHje -R4hADBzpIKAd0zjsGYfMQ6rEabIdO4R+UBKoibTgyOzt7Y5Ge/4+pYy14bMFeZ44 -6OaP6jXRsn1/DIi0mxcBo9eDfZX3FzgANWiDvFA2VWC+qEbsm4JBB8uDJ+aWtjyR -mct/FXzGHwi+IGuPBzo9dIywisW4whmBwh1XpFBMxjmMLqWInuUailAkIARJ0w04 -GdGZ6HYlKmsTvAKv4WRK+EnwZ8JmBiVl6ulcX8k1zbrT2ElyBUCFneMktFKULE1l -myVMuAQCuuGfWdquegqLOyvgK6S9p3wfVyzkney8qBN07WZHE+UUW8AQrZS6J5nS -wSAjBu3wmDmDo7AWEQZFMK4= ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/dh.pk8 b/tests/pem/pkcs/dh.pk8 deleted file mode 100644 index 0bd393f0..00000000 --- a/tests/pem/pkcs/dh.pk8 +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIBIQIBADCBlQYJKoZIhvcNAQMBMIGHAoGBANL7HwrNQcDtDCkqzYxzMCFLFCdJ -qkp7v5RtqHzNM+5VQZp/xo2BzWF5PLJQ9ssE5QYtl7zQGM8eK1Z4/ACKwm2GJR4d -5kkr3SCbK2zoedDj/LJy1xBWjtRa81W6LtBAnEH7w5hgwJiPPFbc5X2i2uv6bcRk -wk7SBstON/Nn+7KLAgECBIGDAoGAceccNmflU1P1oAb6pyQoWKokZXdkwSepQo65 -Fub3B2YW9/qI7DHiSskfQptl4ifeQRFGwq11kqsNUI+mcdGODs1r5MUZ99g1Bh3u -X3XOfTgZoyDY5uHwBLl6HndN/QcJ+nq9y3URt4ltklQQ3WFPzHTdJNg9qBeLqNVe -GaFVEJo= ------END PRIVATE KEY----- diff --git a/tests/pem/pkcs/dsa-encrypted.pem b/tests/pem/pkcs/dsa-encrypted.pem deleted file mode 100644 index f969cf39..00000000 --- a/tests/pem/pkcs/dsa-encrypted.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN DSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-256-CBC,B2C493F67D2CD758E063D3F1CDB32CF1 - -RA0nxX4tNhRbTvuHOelQ7XftpZuAA0tb8htZykyIjlNnGVunWQi98pGSTMhGvbxE -qAD3HJMiVKYh8zcIiQs0stGd0ZwbTSX+U17eWYQuGGcDj0I4G9MW2A+jbi7qhaQV -Nv8J6KWxvdTPXxGZojePtwUF+b1YJ4aDBrdCtS4aRTmFy/mL8J5UXmP7agg+x1o3 -3BSXedVqhB/JTWiojk4XRnf+PiPRsQ9gZkbeI2d5IN+I3QEO06UQSJASxH0o58Oi -NrTTS7BZkrRCpC7ljFcMS/lRV0sSZ8kfY77/vuK/R87F7snIvSda6SgvWwQxqV/A -rd+Y2xlu7+2taIsCYm8fgHg+PpXUOe/PwfILp7JqP6PwTBAgXIr5i4xUhes1RNXI -zyytK5b2i5WoY7rb20duzm3lwLAf51hBJ87/T9AWar+j/+8VNw0OAv64Q+1G6SZ8 -B6fv3hllr9QVhkGxQgheNOh2yU/ztNGdnstfXFI896r8RC0SoDHdOW8aDu+tjqDZ -oVvGoeZ4ruWHUBV30Qiug5/1je48Pf/BRMHo74I0uK+IlTqU9INiYYO6fCUWU6yP -kulpB6DiO+77d1yWNSyP4g== ------END DSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/dsa-encrypted.pk8 b/tests/pem/pkcs/dsa-encrypted.pk8 deleted file mode 100644 index d5886569..00000000 --- a/tests/pem/pkcs/dsa-encrypted.pk8 +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBrTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIhl5UM+zVfdsCAggA -MAwGCCqGSIb3DQILBQAwHQYJYIZIAWUDBAEqBBCKg6jOje2Z2PFCPX+F4SLmBIIB -UDhr7k75REqmtbMaTF/cHI/CYCVmIv5TzQPz9qWF1nrKrZ705TIUTtEFiMZ9fArM -nRGUHURbTaCpD+wFVBuYDuoNLcgnxtjKWW7HIykGPY6imkJ3wYGUt7mVGd9uikly -3sLtG1fVfDH79ZqKoaFTxVL89H5HwluOSaYYghenLXxcieTJ23zgsXFYlw+mbNpd -NtYUje4rmgtYJoB28b/7NNhBVEXq0VvyuWW3paRRzkIsZo+6dAPLO45KPHSBpQCa -iRXB4Sikq0og9RJyrw2Nxcwipzs+s61gfEHxjBnn1ZbJSQJ3kmzA4r3QtypTbKDR -ay9VEgvQY3yu3I9yJmTqLKMDAad3zzvotULylUmAIhY1Ejek+Rt9BTseKMOz8nIA -sQgxXr02g2kMAba8HaDU1kaSNV8Tj5Bwrl2DeiKfZfxQcVo2v5TBvYwjHYqljloW -sA== ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/dsa-pub.pem b/tests/pem/pkcs/dsa-pub.pem deleted file mode 100644 index e792f802..00000000 --- a/tests/pem/pkcs/dsa-pub.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBtjCCASsGByqGSM44BAEwggEeAoGBAMUKN1Fcq9YY1aJwvUpva0r54TmVDyuZ -OH2aZNZMtZZ63O2sqKzGG2Va3tsAYSUaGCzuoQeQYl5NEjGQxwMh+gnnsXPXjq/b -/b+z763RoSoDbecGkkqFKv96AWZTH+rGZ0GEWsBs7WL5wmJiBaT6SKBm7DXJqBH+ -uYGr7r4xtr/PAhUAqlvX9OUGJBPliDXKAMemNXFhlMUCgYA7kuT/WSkVCwiZWnvy -rRRAVW+gR/+QmbNEs9T8RRUFrmciQ5y6NxCliUc37Mz1rq2otHo1y52TXO3msH6W -lMSmDH3WcIoJT4FKDsIT++sWv+qk9Fb/cjAF3opEP77GhSZV1i0dHtsV2qRFgzwX -l5gLjYfzSQ2QvamrZ26HaHIj3AOBhAACgYBTFrD7v1mKXlWVwU+sQ7gIU+bPDZIj -+rGEWVI5v8vyLTg63ZNSBUl+KxLEYXPjb1S9luWnqqlaWKS3Z9LAvcgesToST5jA -Be85XWq6tws72LeV3XluotKEc0cDiLRk2bm4T/HJNLv5c2b1fC4R/sMx5gg4WWeB -621BJ9cNdK+gNQ== ------END PUBLIC KEY----- diff --git a/tests/pem/pkcs/dsa.pem b/tests/pem/pkcs/dsa.pem deleted file mode 100644 index 2f026694..00000000 --- a/tests/pem/pkcs/dsa.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN DSA PRIVATE KEY----- -MIIBuwIBAAKBgQDFCjdRXKvWGNWicL1Kb2tK+eE5lQ8rmTh9mmTWTLWWetztrKis -xhtlWt7bAGElGhgs7qEHkGJeTRIxkMcDIfoJ57Fz146v2/2/s++t0aEqA23nBpJK -hSr/egFmUx/qxmdBhFrAbO1i+cJiYgWk+kigZuw1yagR/rmBq+6+Mba/zwIVAKpb -1/TlBiQT5Yg1ygDHpjVxYZTFAoGAO5Lk/1kpFQsImVp78q0UQFVvoEf/kJmzRLPU -/EUVBa5nIkOcujcQpYlHN+zM9a6tqLR6Ncudk1zt5rB+lpTEpgx91nCKCU+BSg7C -E/vrFr/qpPRW/3IwBd6KRD++xoUmVdYtHR7bFdqkRYM8F5eYC42H80kNkL2pq2du -h2hyI9wCgYBTFrD7v1mKXlWVwU+sQ7gIU+bPDZIj+rGEWVI5v8vyLTg63ZNSBUl+ -KxLEYXPjb1S9luWnqqlaWKS3Z9LAvcgesToST5jABe85XWq6tws72LeV3XluotKE -c0cDiLRk2bm4T/HJNLv5c2b1fC4R/sMx5gg4WWeB621BJ9cNdK+gNQIVAJk25eTp -+yi+kfUGX+jJNbP12B/F ------END DSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/dsa.pk8 b/tests/pem/pkcs/dsa.pk8 deleted file mode 100644 index cca830cb..00000000 --- a/tests/pem/pkcs/dsa.pk8 +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIBSwIBADCCASsGByqGSM44BAEwggEeAoGBAMUKN1Fcq9YY1aJwvUpva0r54TmV -DyuZOH2aZNZMtZZ63O2sqKzGG2Va3tsAYSUaGCzuoQeQYl5NEjGQxwMh+gnnsXPX -jq/b/b+z763RoSoDbecGkkqFKv96AWZTH+rGZ0GEWsBs7WL5wmJiBaT6SKBm7DXJ -qBH+uYGr7r4xtr/PAhUAqlvX9OUGJBPliDXKAMemNXFhlMUCgYA7kuT/WSkVCwiZ -WnvyrRRAVW+gR/+QmbNEs9T8RRUFrmciQ5y6NxCliUc37Mz1rq2otHo1y52TXO3m -sH6WlMSmDH3WcIoJT4FKDsIT++sWv+qk9Fb/cjAF3opEP77GhSZV1i0dHtsV2qRF -gzwXl5gLjYfzSQ2QvamrZ26HaHIj3AQXAhUAmTbl5On7KL6R9QZf6Mk1s/XYH8U= ------END PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc-encrypted.pem b/tests/pem/pkcs/ecc-encrypted.pem deleted file mode 100644 index 9b6d1175..00000000 --- a/tests/pem/pkcs/ecc-encrypted.pem +++ /dev/null @@ -1,13 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-256-CBC,AB9C64372F927A0D0C27AFF8808FA408 - -7vsYSX4TxsNKVJ9rdDQ0KJV5fIjv8cmtm0hCfY3dXPaoBy7dnQmtoS1cB2L7/5lg -Qr/COJFKg0PY7y+aB+wK96rFZUvmHSwxjOUbz1/+e4PHbDaSJJCEJpqzS5Clo+nO -q/FKjfXmQ9yANLO0o4QcSRwSjxIuIK5KWG2EXWm9gCsR1tPW9UmSCSFOn02puF6e -HJZnrq7SHvTvuZ3Tbzzyhp7Z7LofSLPaHaCdWrGlY/AlsnUdOywHD3ATCvvjTVqJ -GelaUv12BEJK+B945LmgMkj+BRhKcLXmK5Q2am3ZdvwyZW7E9JcDLPjX08VEfxY3 -aOBv1mysIroniX3UEZmNR/gUnQTSGa9m+ZsQvZYoZsqK0dn9THf70fW6scmBvfR/ -wRnS1fe3WYsjkXAvAq/a/5Ev6go6G0xgKHI+TJMeFxC2v1r2aTlDKw8AcGwUzsll -HIbyabEaVwQviNuH6NHNpw== ------END EC PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc-encrypted.pk8 b/tests/pem/pkcs/ecc-encrypted.pk8 deleted file mode 100644 index f8c8d2fe..00000000 --- a/tests/pem/pkcs/ecc-encrypted.pk8 +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBzTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIDvEXvzqHE1ICAggA -MAwGCCqGSIb3DQILBQAwHQYJYIZIAWUDBAEqBBCj/pJclOyl8T9QLQ5hST9UBIIB -cAhS99K8b/rp2TaTvSSuwTS1qFcJ0O33zSSIprhVriNdArgQC0sX3XZKe5tyzWSD -+ZJZXJhcnQKRauDGhiF7dJWSgM0MbL90ZgwFyQvwzl1kxfKheaS8Hv/xGDvx+eAU -XwOAddifqcSediLUwtf5SRUmPy12gxcMFN0gY7fvjA0Wb/fDn6UuG0iu+y/msiu/ -S+dW+PbOZBDiQb1u/U+wKTdvQxowlu6zkapxRFRWC1i2S7vBtdK7aLTERUJwdEf/ -RdAMLXQdr5zhKHTjx7nQiPCksbNrpdTQHw/nsrNtE0pPvde3MCNIfvaDgHXyCV8F -Fo/fn97YhaKH8zCfvWhduuY2Bj3M1jBLRxGQZ2cs4hb6Ua3R2GiTD0h5zp9uNXRH -SrECToksdY5jNz1qMV6TA7gAOZ477sZCkJ0WU68B0jUVJKlEYCPzyTVcoy3a1hiF -Lx2H5WbsXSsZGaX+wyUUicYm8J+YnGtVd+FgS5e8Lh4w ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbe_md5_des.pem b/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbe_md5_des.pem deleted file mode 100644 index ae7ec312..00000000 --- a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbe_md5_des.pem +++ /dev/null @@ -1,11 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBiTAbBgkqhkiG9w0BBQMwDgQIzN684k11RQMCAggABIIBaL9W5ZvbQUeDz4Zb -jISViw6ehWft1lmvZpqzA8Fik3zFIhxSZ9qr03mRdh9fU6VOfLX15NyMdFxwcYnR -c4a/CWz/tu7XTlY4sA0lvI0tJLrTOQNcZdNUlUTbnrQ1N1VaAVWbmP4m+r+NUivz -7ml0q3wcClRZmADg9NcTx1KnZQrbboGjIfG9mSNcpuN9OYa8muat9ytCRlBj43Fa -YKe6xYgKwWUzBdjArIufsdeCwDnfj5qFJ/7DUOgFaGS1mzCP/zJaZHWRd5ArchP/ -NVYwIonzPgmH7UP/VHJaFiKc7qmaHP7WHuGWMci8pMH1fnpCFDshQfwBHmCwCdar -lUy3Kwu4DUarhyde3jbDFyMwM/ffu9VJor+KZXokTYNjXPzuuM5ZBx7ZKYnFTuMJ -NpaH+chSxK3Peif03mWQMJZuiBNh3tAGfkFb+gMAdhxzgWpDhhtE1c8Zbnwyc+Sk -MMNju1uX2plDFluAxQ== ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbe_md5_rc2_64.pem b/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbe_md5_rc2_64.pem deleted file mode 100644 index 0de45802..00000000 --- a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbe_md5_rc2_64.pem +++ /dev/null @@ -1,11 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBiTAbBgkqhkiG9w0BBQYwDgQIUliSQEiAS8wCAggABIIBaMP+c+hNliY66qDg -33YhJJfuzxVkmW95vpDNw5UqF4jWBW+3xoJHpPJk2zON5nkENQkFU2B/7HY23tLT -lPuWoA5GDotPEMadDMLvxzuynRL9ywZjLVouKNngcLSgxZC5+LS5BqwBlfvcCqk6 -3d0XXB616f4CocTA9s6FHM24vgVEJujjj7K7V4otW7kYfLUTx8ZQ+YUNCCXI/2jB -c0UzHlCWFQ4oZuqINzc/W04HIOerjfGhK1SN/cUboN/PJ090wFzqEPE2MWf8/2ug -N5V2vMkrwwN5uIUumFGY7+vXWOdbs7TAplZQDGlS6I5hnJXqJMXysnweAmw/TOKl -UM25+LQSf6V5FeRh1q7cUzRtzahXX/YKICBYHgOChVj8B5QI31RNFRUpOYOFpjeo -fCMvNI6Qp3U9sW462xq4hvemBUUSOuM5P8M+mZxpAXxB56W5bfVTD8nWTzdMH38o -sfWwu/7anoMxI6YN8w== ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbe_sha1_des.pem b/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbe_sha1_des.pem deleted file mode 100644 index 19826ead..00000000 --- a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbe_sha1_des.pem +++ /dev/null @@ -1,11 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBiTAbBgkqhkiG9w0BBQowDgQIT35B+lfH22gCAggABIIBaNDnpB3HZ1IxSmgD -9icYYXhKwHT9lpyAzlX8h43ccwROt/WR4N9+Q0Xcfdktv/5pVKkzkGsXD1u0x6OM -Oevtj/O7DbfzpW3pOUAB5aaA21QOksVAvjtjuwZ8eRGa4h6aXaMUQYOo5AQAHH8/ -Ev0MqqJucgEzONByZTp9B6FwWwbioEhap9h8qX6oQ09SXQnKCNi3KxD2IDAwMDMm -Ss+wMmq6xiGR2UUHg/+tiMHCmLTcCkvhTg6l7rsH6LEO4W3G0teholWSrke73yeO -NhU3O0AZjUCMXqli1WxeJByermRVAIY2lnMlG6+8sDQMEVePutd7x9Y7D223VwZR -ou59pwdJt+OHNKMCMiPIFNht5iir3zpJ+yP5wP5CDigb+RS5e03LGmT9An+8j/Kb -PZURQSa0aqQasn2QTAF7zRlLTOPpBlSPgmWuZolZbHqkDbX0xPJYO9BlfY5nX8hS -/18lPQ0wUIBYG19yuQ== ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbe_sha1_rc2_64.pem b/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbe_sha1_rc2_64.pem deleted file mode 100644 index 62b66dd9..00000000 --- a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbe_sha1_rc2_64.pem +++ /dev/null @@ -1,11 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBiTAbBgkqhkiG9w0BBQswDgQIh4GKHk4SmIcCAggABIIBaFWSw80nmDwiKdqt -u/t4WtFeyVbdtDZqX9pK1Um5lWVpdYNHBZFGtc+mQA4QTUGg7jCbOHC4YiO5FQtw -FVay9nMGd/MAfITULLUCNr7DERM9OgP3Iy8fvnloFV7DLafDeFGlreTrGVaEzb6+ -vHkys/Q107k3UpNNZl7LUSZ+u1olENDIkm/VhInmDS8fWgOt8KfKdmQB9hpnW3Q0 -WOiUBC/SEau/o0tLc9jqwXbkUxG4tYfFlQgA6ll1N7OPmX0XOleGsVJkeyakkkZm -78QQDDsEeDuS3Jk+L6VUbJimxUOFNzy27YhFYKFwvEoxVmAsKgBP+ycOQqIOM0Bu -NwtfNQm4gIySqfkMGnGIrOFpXT9nk2ouIoTnT1prGBHP7IosgJATlTytChhfXCj+ -pm119VBAHho+Rx0K7WPfWh6F7gBf8v+dtlPgYdtg9KgxsESkHqLQNAOxTgyw6Wv/ -f2Ma7GbDLKr98YTwEw== ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_des_cbc.pem b/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_des_cbc.pem deleted file mode 100644 index 3a64eb1c..00000000 --- a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_des_cbc.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBuTBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQISIYM8rI/jPMCAggA -MAwGCCqGSIb3DQIJBQAwEQYFKw4DAgcECDtoK11BLZ8yBIIBaBWpKqU/zd8dK45s -iC3X+IdPeXmg/tlJZyKJdlLgyZMzq2hwmqpNW6OqcVUf6vRJXrmUvLXdzbc8LmHi -hBUwtXAenYJHOt/dY2bQmHsh3UE6Rjo98CNUQkPY254kscMDCYIH2kYk5m7Axx9s -r/GSteJ73i1snCMlguBnAw4Hfn63aWJ+quu91lTupoZ5GzP2JmByNaobOzPbLj+o -RkQEdqjOCnRhnVKh6b7jJlJZjKC+pSrMovuVfrjfGk74MTnWDrYBBbM2whY2/1gV -JHjfI+2UUg2AJXqrZL6aNXgRAypWqEWm74quPzw1oED1xeBv3n3qTT8ibYHNXXcl -GGe8nduOm2sv+FZNx6LaKhutbSiCGW+TT14Rf7iYjDxDz2Zo+ngh9USb04VFhvN2 -rcdv3x2tetKqbQ6THhM9LfyArYpDF4tC2GRNCdmMcQClIMQIEwvabg14XORdYWBl -ETQPMiGjep69gcsCLg== ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_des_ede3_cbc.pem b/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_des_ede3_cbc.pem deleted file mode 100644 index 2124806f..00000000 --- a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_des_ede3_cbc.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBvDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIuVWjGRuwrEYCAggA -MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECPNKy7KzuZplBIIBaMCytdZYGgmG -HnRqZZefHmq6QoFtPFy0UcUx/k4QyPX98gftQZsOMQUjK3SYb0E1stwvJyuOxMk2 -QAAkSvQgdB4/O9Bn+YcAr2yN1kQ3ZGs4GhKeFdCVzha6DFXPnfumxB7nqH1A7hvq -6e/DkOPnfcwfq7yy8ydmfubZ5ycdQmCn/s6UuxmipSG3viAWXOWxxj0ujOuwcti0 -UtVNDYfiat77khdEmkbTjWek/ClaQhbs8c0ihQ3VTjjzNumCjK95SDWzNfyXr1Cz -BOz940PYzy/CWJ9kcPHtAzF9ZKBCE0iDx6dlAqUpMr8+cUDGHtoxeMG0SEhuneEx -+2PyO8eHACl+UZ7gvMRvU0HikmIXLIDuE4W/5bFwLlwe+W0vWx+/RrxSUhotY2f3 -tIUMchZH0V9e2bjcZEpoOgAbJFwpv4BhSzPFGUtCvaW02GprDFbkvpdeVEAOeJCo -AERV4FOHuiQN5xICywgs8w== ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_rc2_cbc.pem b/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_rc2_cbc.pem deleted file mode 100644 index add39d14..00000000 --- a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_rc2_cbc.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBxDBWBgkqhkiG9w0BBQ0wSTAsBgkqhkiG9w0BBQwwHwQID289hiP8sNACAggA -AgEQMAwGCCqGSIb3DQIJBQAwGQYIKoZIhvcNAwIwDQIBOgQIS6rg/BDDyx0EggFo -+EP7A0v/HXDb7sIKUaSRo31UgIvfB3ReCYvjl99OhGohyPKU5d0SG1P+a5qACAtM -9NOPIB8UdjjrKxz8i3hjpWEOCMQAdaXhkIiYaDbPvAVQwlfEA8LUlUoJce1JbyUy -O/BJx2FvSuQYMpzYdjj+PXifngb3qKAC7W+72D3d/npwCFMAfo/Bp9rCk/0MWakp -KpUspNT9b69YI0yGKxRpJNaX5B4FuaLe1O31Tveq0ImyiWEcSC6bsFfi8xWXmNMR -pw72Pv6FEgSc1aaSiViQVvkDaes1M4Po4K2geld07bnXn9e1JzInYquBnhFUe9Rs -HyGTqJp0S1Yyqdt46e13NIfM8knvapl9/0fZ/QJ9UIPbINpFRGeFBJY5pR1xEvNK -EST6HZIw84U0iMfGl2e9oyC4r+1hZfkELHSK3d/s/SRiRhw1yTOGU1dFMwUz8yif -CCNNR0cFDfSKHYQOu78bUZ+Nmt7ydzn5 ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_sha224_des_ede3_cbc.pem b/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_sha224_des_ede3_cbc.pem deleted file mode 100644 index d7714841..00000000 --- a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_sha224_des_ede3_cbc.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBvDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIF1hZIYPOrdkCAggA -MAwGCCqGSIb3DQIIBQAwFAYIKoZIhvcNAwcECO1sfQDcxpkyBIIBaHKe707yztqL -ZqMI2BkJdLhNUeysatW7IP9WLN4+kM9IGx8d3jVthFK28kmQv2yHjFqbuTYnJJz+ -7sskqfbv+xO+LmSlppeD2XaolcoCCu0ic/JmE++CORaR/cswkjZD6dDaB3saZO/T -gKleto54fMnMNUAF43aIKZGr1xOv6utMqWXULCIMkk1RtqRv5l/bTavFnnoHfuUW -+eNH+z4yopTuJYMSvYcxcTFaTx+SpoR+Cyp9HJAGmNk4LS3abxIu/QtB3Is1QZpS -tBmizAv+5pmIshWIAsIXbgK3a6VboxzJI1Twt74pPYEv+OJbOtvmDNrM8Anqc6pk -gc+0W9/CZ+gL9Zo0MZFnehnuK2EwpPmzHrRoyCM762wcImyz+5EVVpJrixUGpq8F -wjtw1xOMhyQ3K5j/kQWdLgoR47s9fbkkgSxIggY9JrWA8VY6uqm/AWJKrITFM6hx -75lOxEX6Cw/B4y0V+xZ1rw== ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_sha256_des_ede3_cbc.pem b/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_sha256_des_ede3_cbc.pem deleted file mode 100644 index 00ef0416..00000000 --- a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_sha256_des_ede3_cbc.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBvDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIqmXjSIb59wUCAggA -MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECAhqA2qQFwcrBIIBaACt+al/ytm9 -NKroYGO1rExbTYC87yT9N4Q3im7IHTrUXrWxm12t8PHJCpr+2OIrCaTC6bcAMcRI -cJEgsp6MISxZQXkFFt8zauC6cegsBnIngi3lPzpo+66v+jq3F26XXE1E6jWexcev -osngyT8Ng1lddwSeUZ6qmIoajOdliaZKt9zEnNre9uGi1tqjXyAjtMzRNPOdj8qK -6LS8U8bZlhNk/5LQiYdq/s93oA4XvIZaiVmNDnirfqYLWXhpPuk6pinZZIf45bNj -WpHR6nlS6zrfMbu7OsOVMk1dYMS0wyWf4V7c33EUGq3V+UpCwf7lHiXpKHf3VUql -ATJLCH0rVpVtSLQKzu+AtQ5hXWM5L95eDgJH4cHMvUZyH5fXBD0XVwGwF6jl5Bgu -qpiQrk0N4SINtOTUz6cpkCg2i1rT/y1OFtfzlcaU2O73MlEcRSo9X1FFQuKSY978 -XJWKmss54p2ZDZXjI9hKIQ== ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_sha384_des_ede3_cbc.pem b/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_sha384_des_ede3_cbc.pem deleted file mode 100644 index 5687c728..00000000 --- a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_sha384_des_ede3_cbc.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBvDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIsCQVVRoBSP0CAggA -MAwGCCqGSIb3DQIKBQAwFAYIKoZIhvcNAwcECO8+o1eRBcmTBIIBaDM+16hmyXFa -Nh02rGpKlggDDWc/bcpLnmi0vEyHIG5wpwS8RYiKY7AlJv/soNuGh/62kFJzvJyl -gwhAdqE4Q8u1ECKvIz9VUJkY7etvSP3Pu2lNeE2wVPk6k36RjSib7cwefrawJrTQ -50J9gdxw2vl/vep7nZRPVerqod9Us2x1/M0DMYtcm9iWgNGXKnF1bXE/TzDaWmUG -4Isx49V4CaUSNbdP/Y9wfj1LARi/qZ8sIMQmi7rWFZJOutJ2HBJcvkiAOUWtxGrV -PTPkWsCk8MQ6gzi0RTcotqC3Z8cJm7TQ0kVpytNAGNavuK+VklApSEPwK1RiLL5a -04KuIyO0qf/Yh+e7i1miX9aNcA8U7XrgrgUguccFm+25JPhwvKerEvgbthQtd4DL -09z8ClPcOqarLRzbpswcVppBmfI27TbQC5HS+UjPGa4CSTgOjwFmoFoV8P06E7/J -DB2MLT7THaLfYdv+dewaLA== ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_sha512_des_ede3_cbc.pem b/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_sha512_des_ede3_cbc.pem deleted file mode 100644 index e1769fb7..00000000 --- a/tests/pem/pkcs/ecc-pkcs8/long_pri_pkcs8_pbkdf2_sha512_des_ede3_cbc.pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBvDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIuyUx21YswXgCAggA -MAwGCCqGSIb3DQILBQAwFAYIKoZIhvcNAwcECHopIpIBxzQyBIIBaKCdLeYJSoYs -0tuuykMqh5YwG3yzsI5RoDHZVkuissmreb6AgFkwoH1PpvvbwY4NkAEZ3CADeeAr -R+CPBI2GZP83/VoJKgk4WZ3518FZPUks4obIE5/AVNjYTJXhfwPCXdf21h6DoAUr -OeSi4U72rsKTmNM/ARa44JJjkgC+77+Ith4+ayeq2h+v4ylRx533AkL8kbzBDVey -pyLENNSnwwZHUpAhV0ZlurXLHc0eNHyn6LzIXig1RawC0uuYKb+CxZrkbtX9R/HO -mTUf7EZrVvJb/G5H9Buhs8gi8Ul/C2LFnCdy2VbBkubnbK70mIyQ4HLY04NGpw+b -6TXHODwrSEwCHNdIyVEuIFW4TkQtWmKAqT2/wupJ8PWo83/mxlTb6NQlhSFFY/Tu -FiPRHi2q4rI3+283NJ/W624esG44u3+OBqHNZe1F7IXbEzM+iGo4osI7CXvvQrfo -PJAUlYc9TtaTQAqdJcVjdA== ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc-pub.pem b/tests/pem/pkcs/ecc-pub.pem deleted file mode 100644 index 99e2a9ef..00000000 --- a/tests/pem/pkcs/ecc-pub.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBMzCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA//////////////// -/////////////////////v///C8wRAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBEEEeb5m -fvncu6xVoGKVzocLBwKb/NstzijZWfKBWxb4F5hIOtp3JqPEZV2k+/wOEQio/Re0 -SKaFVBmcR9CP+xDUuAIhAP////////////////////66rtzmr0igO7/SXozQNkFB -AgEBA0IABCr5C9q+cWae0c8S0CSvurZ/+5YnPi+9HtX5jWxzncUWkb2yuRtAEFq3 -bG4yW/djYpQkJNvsP4vlbktkNzEkeU0= ------END PUBLIC KEY----- diff --git a/tests/pem/pkcs/ecc.pem b/tests/pem/pkcs/ecc.pem deleted file mode 100644 index 2cfd6c0d..00000000 --- a/tests/pem/pkcs/ecc.pem +++ /dev/null @@ -1,10 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -MIIBUQIBAQQgDPGtLwP3kRu6A88jN8jy9zbOZfGELX2fX54h2V5JvSOggeMwgeAC -AQEwLAYHKoZIzj0BAQIhAP////////////////////////////////////7///wv -MEQEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAABwRBBHm+Zn753LusVaBilc6HCwcCm/zbLc4o -2VnygVsW+BeYSDradyajxGVdpPv8DhEIqP0XtEimhVQZnEfQj/sQ1LgCIQD///// -///////////////+uq7c5q9IoDu/0l6M0DZBQQIBAaFEA0IABCr5C9q+cWae0c8S -0CSvurZ/+5YnPi+9HtX5jWxzncUWkb2yuRtAEFq3bG4yW/djYpQkJNvsP4vlbktk -NzEkeU0= ------END EC PRIVATE KEY----- diff --git a/tests/pem/pkcs/ecc.pk8 b/tests/pem/pkcs/ecc.pk8 deleted file mode 100644 index bb72e1b8..00000000 --- a/tests/pem/pkcs/ecc.pk8 +++ /dev/null @@ -1,10 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIBYQIBADCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA//////////// -/////////////////////////v///C8wRAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBEEE -eb5mfvncu6xVoGKVzocLBwKb/NstzijZWfKBWxb4F5hIOtp3JqPEZV2k+/wOEQio -/Re0SKaFVBmcR9CP+xDUuAIhAP////////////////////66rtzmr0igO7/SXozQ -NkFBAgEBBG0wawIBAQQgDPGtLwP3kRu6A88jN8jy9zbOZfGELX2fX54h2V5JvSOh -RANCAAQq+QvavnFmntHPEtAkr7q2f/uWJz4vvR7V+Y1sc53FFpG9srkbQBBat2xu -Mlv3Y2KUJCTb7D+L5W5LZDcxJHlN ------END PRIVATE KEY----- diff --git a/tests/pem/pkcs/ed25519-pub.pem b/tests/pem/pkcs/ed25519-pub.pem deleted file mode 100644 index 41b0218e..00000000 --- a/tests/pem/pkcs/ed25519-pub.pem +++ /dev/null @@ -1,3 +0,0 @@ ------BEGIN PUBLIC KEY----- -MCowBQYDK2VwAyEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE= ------END PUBLIC KEY----- diff --git a/tests/pem/pkcs/ed25519.pem b/tests/pem/pkcs/ed25519.pem deleted file mode 100644 index e447080a..00000000 --- a/tests/pem/pkcs/ed25519.pem +++ /dev/null @@ -1,3 +0,0 @@ ------BEGIN PRIVATE KEY----- -MC4CAQAwBQYDK2VwBCIEINTuctv5E1hK1bbY8fdp+K06/nwoy/HU++CXqI9EdVhC ------END PRIVATE KEY----- diff --git a/tests/pem/pkcs/ed25519_attrs.pem b/tests/pem/pkcs/ed25519_attrs.pem deleted file mode 100644 index 84961082..00000000 --- a/tests/pem/pkcs/ed25519_attrs.pem +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MHICAQEwBQYDK2VwBCIEINTuctv5E1hK1bbY8fdp+K06/nwoy/HU++CXqI9EdVhC -oB8wHQYKKoZIhvcNAQkJFDEPDA1DdXJkbGUgQ2hhaXJzgSEAGb9ECWmEzf6FQbrB -Z9w7lshQhqowtrbLDFw4rXAxZuE= ------END PRIVATE KEY----- diff --git a/tests/pem/pkcs/extra/ed25519-cryptx.pem b/tests/pem/pkcs/extra/ed25519-cryptx.pem deleted file mode 100644 index 771c68ee..00000000 --- a/tests/pem/pkcs/extra/ed25519-cryptx.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIBODCB66ADAgECAhRWDU9FZBBUZ7KTdX8f7Bco8jsoaTAFBgMrZXAwETEPMA0G -A1UEAwwGQ3J5cHRYMCAXDTIwMDExOTEzMDIwMloYDzIyOTMxMTAyMTMwMjAyWjAR -MQ8wDQYDVQQDDAZDcnlwdFgwKjAFBgMrZXADIQCgXRrqWDCsmmXN+zhGYNSX42l8 -RrQZzyzshd6L0kVFnaNTMFEwHQYDVR0OBBYEFHCGFtVibAxxWYyRt5wazMpqSZDV -MB8GA1UdIwQYMBaAFHCGFtVibAxxWYyRt5wazMpqSZDVMA8GA1UdEwEB/wQFMAMB -Af8wBQYDK2VwA0EAqG/+98smzqF/wmFX3zHXSaA67as202HnBJod1Tiurw1f+lr3 -BX6OMtsDpgRq9O77IF1Qyx/MdJEwwErczOIbAA== ------END CERTIFICATE----- diff --git a/tests/pem/pkcs/extra/ed25519-selfsigned.pem b/tests/pem/pkcs/extra/ed25519-selfsigned.pem deleted file mode 100644 index 64ac1414..00000000 --- a/tests/pem/pkcs/extra/ed25519-selfsigned.pem +++ /dev/null @@ -1,11 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIBhDCCATagAwIBAgIUHDa8kJUZeCuIhknPJ/wDeBW6gZgwBQYDK2VwMDgxNjA0 -BgNVBAMMLVB1YmxpYyBkb21haW4gZWQyNTUxOSBzZWxmLXNpZ25lZCBjZXJ0aWZp -Y2F0ZTAgFw0xOTA1MjMyMTAxMTZaGA8yMTE5MDUyNDIxMDExNlowODE2MDQGA1UE -AwwtUHVibGljIGRvbWFpbiBlZDI1NTE5IHNlbGYtc2lnbmVkIGNlcnRpZmljYXRl -MCowBQYDK2VwAyEAUEiKvHT0KHXOtNjIhaImokxbiog+Ki6lcgce05tf9UKjUDBO -MB0GA1UdDgQWBBS3fmpWaPK2fNpblEmg4tG4ZHO2BDAfBgNVHSMEGDAWgBS3fmpW -aPK2fNpblEmg4tG4ZHO2BDAMBgNVHRMEBTADAQH/MAUGAytlcANBADOnwkj8etmx -mTaXUP29RaenxpN8dQoQ4wnnIJwxQxTcVWOt2PlUxCFoB9gs0+YZOzhXnQg4hfqk -t/HPExwoZQg= ------END CERTIFICATE----- diff --git a/tests/pem/pkcs/extra/rsa.pem b/tests/pem/pkcs/extra/rsa.pem deleted file mode 100644 index 017f8877..00000000 --- a/tests/pem/pkcs/extra/rsa.pem +++ /dev/null @@ -1,23 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEogIBAAKCAQEA0KXMyuA9+cL1xMjAzoQNYs3ieZkNxnJxXvgDYx+vb+K30DiBdQyM5i7nCUcQ -oMPswnNTCx4NBJX4km0pp53NsqGIcT+OM0URPWMaCfVeAvYFPYe5BBxtVKQit0qOD95Mb13oxr3m -LKC1VKHsvbNSexlkjebq61lhirBlDGla6d1t9XElkLnZ+Z/H+BCPgGpKEriSQAcp27Ke6EbHlVNo -l25lnV6Z3pZkmeAv9SSWEnw/MHrG64AM7e0izOaNtPheLp1PGqp5vD2HgMD7L6VZn+PsZ4RPskd1 -bVaxfsbdvgUD6C2hhrxle9QUtzhfi0MO1sq5+B4wJ6yT1jd3n9uujwIDAQABAoIBAAntXD0/hm4G -lXyg6UeKJzw5u9pO6sWz4UAEVd5BU4QOdJzJa3i/DvR5a9BYW2qtbRY4DXiccUB0GukV8jhBklgQ -RnZ48Hzw/tJ9uhnvh4262IymaKpQ6Job2x5UbkZEAef/PwQ3DydgGBs9lGQsOYhA24oYNWTa56ta -cYcHJju1PCMF23rNVx49hSbG/H3TNRAAqOjmYsnvoG+w62Si1np7IBdlIbSdnTYC27kqRIBTIhMW -xkdWSChsgIbrNA5iYtOOeJ4yq17oAikEpUiDwMYqd522WXVRHvleHJQ9CnneOiTuRvnWHTrjeeS+ -lW1lPWQMTzdaTVLV0i+5+F5MIP0CgYEA0+8AKP+rUI4nc8ZZ5CioD7DpIRNGtD8/86QAv4w49nmX -P+g9TBmItLD7mQzjOGxrbe8Stt4hALUIb2Oe5beJQDlKJpe1Y6sSk9+Tx6IdgY75NWjvhQCnJu28 -QQXbO8Q/Eapqz/VH18cXLYfZnScI2toJXC8GwghQM8NYTwdimmUCgYEA/AfkaxY8q2qDuORn0WlT -SyB33N7sro/PwMOtLrosSwLSNyNpmQxiqSPSLhBxnO0ZHiMcSDL7SJbs3C4fOWiNImx7RuNfk8vY -Ox9WowtmYOC+5D5xnJ9TPvuKBhjsLRZMwK5k8gr7iIwU6v+Mjoif8SJ6MRUrPiNDK0ChHGVBu+MC -gYBIbxQv7wofUyaaxD0u5NJj4oQbYNo2erOh0vjKfuNtIiuWlQp2OvflQeQL8EKsoymofiB4Tb0b -38PNRlAllTAcujfkrs85DFwiHDUG8xqAkFwObBoI7Cs0++Xul1DRwYYIxKUTBHMUhaAfWKIAuzmk -iwbN8eiuYmb++hHxmMWTnQKBgEWXKEspaLcsQhLbfo8kNguYe4BRTaklrIfdgARXA8Pyk3kGHjJU -aSmq6m4tvDFIhpb7uuN0sE3q3pwtYBHJ/K50pdV9EvcMYjhw/ssmaq51YEBFvbkxhRru+b2VRCFu -9uJ9RQJQZgPeKih5R6ZTs1Yx3uuOnNIbioB26AWfL/dhAoGACIxtQG+DPfc8i3NFSOA4UmGtUfQY -fP4V9/26RAZ0o5PM9arVxp6gIZzU5++83DFCmlPjvN7cbSQmQgkjn7I5KJkiUEB0i95hDRISgaNl -QsvXdLhE3x77KR/76AAxv+4VxK6y4rrbi1MQwRCEVjp6BVzvdyT+2lMexhLmzucpP3w= ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/extra/rsa_cryptx_issue110_2407279713 b/tests/pem/pkcs/extra/rsa_cryptx_issue110_2407279713 deleted file mode 100644 index faad7c94..00000000 --- a/tests/pem/pkcs/extra/rsa_cryptx_issue110_2407279713 +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAs2jsmIoFuWzMkilJaA8//5/T30cnuzX9GImXUrFR2k9EKTMt -GMHCdKlWOl3BV+BTAU9TLz7Jzd/iJ5GJ6B8TrH1PHFmHpy8/qE/S5OhinIpIi7eb -ABqnoVcwDdCa8ugzq8k8SWxhRNXfVIlwz4NH1caJ8lmiERFj7IvNKqEhzAk0pyDr -8hubveTC39xREujKlsqutpPAFPJ3f2ybVsdykX5rx0h5SslG3jVWYhZ/SOb2aIzO -r0RMjhQmsYRwbpt3anjlBZ98aOzg7GAkbO8093X5VVk9vaPRg0zxJQ0Do0YLyzkR -isSAIFb0tdKuDnjRGK6y/N2j6At2HjkxntbtGQIDAQABAoIBADYq6LxJd977LWy3 -0HT9nboFPIf+SM2qSEc/S5Po+6ipJBA4ZlZCMf7dHa6znet1TDpqA9iQ4YcqIHMH -6xZNQ7hhgSAzG9TrXBHqP+djDlrrGWotvjuy0IfS9ixFnnLWjrtAH9afRWLuG+a/ -NHNC1M6DiiTE0TzL/lpt/zzut3CNmWzH+t19X6UsxUg95AzooEeewEYkv25eumWD -mfQZfCtSlIw1sp/QwxeJa/6LJw7KcPZ1wXUm1BN0b9eiKt9Cmni1MS7elgpZlgGt -xtfGTZtNLQ7bgDiM8MHzUfPBhbceNSIx2BeCuOCs/7eaqgpyYHBbAbuBQex2H61l -Lcc3Tz0CgYEA4Kx/avpCPxnvsJ+nHVQm5d/WERuDxk4vH1DNuCYBvXTdVCGADf6a -F5No1JcTH3nPTyPWazOyGdT9LcsEJicLyD8vCM6hBFstG4XjqcAuqG/9DRsElpHQ -yi1zc5DNP7Vxmiz9wII0Mjy0abYKtxnXh9YK4a9g6wrcTpvShhIcIb8CgYEAzGzG -lorVCfX9jXULIznnR/uuP5aSnTEsn0xJeqTlbW0RFWLdj8aIL1peirh1X89HroB9 -GeTNqEJXD+3CVL2cx+BRggMDUmEz4hR59meZCDGUyT5fex4LIsceb/ESUl2jo6Sw -HXwWbN67rQ55N4oiOcOppsGxzOHkl5HdExKidycCgYEAr5Qev2tz+fw65LzfzHvH -Kj4S/KuT/5V6He731cFd+sEpdmX3vPgLVAFPG1Q1DZQT/rTzDDQKK0XX1cGiLG63 -NnaqOye/jbfzOF8Z277kt51NFMDYhRLPKDD82IOA4xjY/rPKWndmcxwdob8yAIWh -efY76sMz6ntCT+xWSZA9i+ECgYBWMZM2TIlxLsBfEbfFfZewOUWKWEGvd9l5vV/K -D5cRIYivfMUw5yPq2267jPUolayCvniBH4E7beVpuPVUZ7KgcEvNxtlytbt7muil -5Z6X3tf+VodJ0Swe2NhTmNEB26uwxzLe68BE3VFCsbSYn2y48HAq+MawPZr18bHG -ZfgMxwKBgHHRg6HYqF5Pegzk1746uH2G+OoCovk5ylGGYzcH2ghWTK4agCHfBcDt -EYqYAev/l82wi+OZ5O8U+qjFUpT1CVeUJdDs0o5u19v0UJjunU1cwh9jsxBZAWLy -PAGd6SWf4S3uQCTw6dLeMna25YIlPh5qPA6I/pAahe8e3nSu2ckl ------END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/tests/pem/pkcs/extra/zerolength.pem b/tests/pem/pkcs/extra/zerolength.pem deleted file mode 100644 index e6d78fde..00000000 --- a/tests/pem/pkcs/extra/zerolength.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQowAAOCAQ8AMIIBCgKCAQEAvTHHoCaR0tlYfvapRv94 -hUTMrdSymIrWIIZ5Kmv5bIYWtK0TMX0icLkB0PzR2IDLj1L7hzBKUljBGzjf6ujf -Zwru5+odDZ344A6AhH5B5Zie1ALUTnizD+8XtWcdOtv4aF5NwgRJns0YY+HVr/KK -fPZurfMf7JI2wSCt0TRRUixkfJgypnLNZNMowcMiGD9GYdCb2mC43V8DKNpUIIIU -JK/auxqAxdEnY6GwI4zYnQdCv8ULai/LcB2CQhj5gm9PeKI6K1qkKs5/F1N2+2y9 -srrSk7pYPU0xxrj5Ap5GsTaJJJhV9QV1bgDiJaakWhh2m9jSs6SsufHCPT5RiCVh -5QIDAQAB ------END PUBLIC KEY----- \ No newline at end of file diff --git a/tests/pem/pkcs/invalid/pbes2-no-iv.pk8 b/tests/pem/pkcs/invalid/pbes2-no-iv.pk8 deleted file mode 100644 index 861c5242..00000000 --- a/tests/pem/pkcs/invalid/pbes2-no-iv.pk8 +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBzTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIDvEXvzqHE1ICAggA -MAwGCCqGSIb3DQILBQAwHQYJYIZIAWUDBAEqAhCj/pJclOyl8T9QLQ5hST9UBIIB -cAhS99K8b/rp2TaTvSSuwTS1qFcJ0O33zSSIprhVriNdArgQC0sX3XZKe5tyzWSD -+ZJZXJhcnQKRauDGhiF7dJWSgM0MbL90ZgwFyQvwzl1kxfKheaS8Hv/xGDvx+eAU -XwOAddifqcSediLUwtf5SRUmPy12gxcMFN0gY7fvjA0Wb/fDn6UuG0iu+y/msiu/ -S+dW+PbOZBDiQb1u/U+wKTdvQxowlu6zkapxRFRWC1i2S7vBtdK7aLTERUJwdEf/ -RdAMLXQdr5zhKHTjx7nQiPCksbNrpdTQHw/nsrNtE0pPvde3MCNIfvaDgHXyCV8F -Fo/fn97YhaKH8zCfvWhduuY2Bj3M1jBLRxGQZ2cs4hb6Ua3R2GiTD0h5zp9uNXRH -SrECToksdY5jNz1qMV6TA7gAOZ477sZCkJ0WU68B0jUVJKlEYCPzyTVcoy3a1hiF -Lx2H5WbsXSsZGaX+wyUUicYm8J+YnGtVd+FgS5e8Lh4w ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/invalid/single_line b/tests/pem/pkcs/invalid/single_line deleted file mode 100644 index fddc8b72..00000000 --- a/tests/pem/pkcs/invalid/single_line +++ /dev/null @@ -1 +0,0 @@ ------BEGIN EC PRIVATE KEY-----MHcCAQEEIFF9oAGC6vxNLIU8D+nuvM8ms1QQlPtpGzQTfzEBVB06oAoGCCqGSM49AwEHoUQDQgAE3VU0nT1p5W0zKHDknAgQpsOODuM2/AoZ/6wNqC9AoUCEpQempFg0aBqxleOP0uW0HG1YwCnOF8N0D8Q2RR2mlw==-----END EC PRIVATE KEY----- \ No newline at end of file diff --git a/tests/pem/pkcs/invalid/single_line.pub b/tests/pem/pkcs/invalid/single_line.pub deleted file mode 100644 index 9558549b..00000000 --- a/tests/pem/pkcs/invalid/single_line.pub +++ /dev/null @@ -1 +0,0 @@ ------BEGIN PUBLIC KEY-----MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3VU0nT1p5W0zKHDknAgQpsOODuM2/AoZ/6wNqC9AoUCEpQempFg0aBqxleOP0uW0HG1YwCnOF8N0D8Q2RR2mlw==-----END PUBLIC KEY----- \ No newline at end of file diff --git a/tests/pem/pkcs/invalid/tall_multi_line b/tests/pem/pkcs/invalid/tall_multi_line deleted file mode 100644 index ca06e8fb..00000000 --- a/tests/pem/pkcs/invalid/tall_multi_line +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN EC PRIVATE KEY----- - -MHcCAQEEIFF9oAGC6vxNLIU8D+nuvM8ms1QQlPtpGzQTfzEBVB06oAoGCCqGSM49 - -AwEHoUQDQgAE3VU0nT1p5W0zKHDknAgQpsOODuM2/AoZ/6wNqC9AoUCEpQempFg0 - -aBqxleOP0uW0HG1YwCnOF8N0D8Q2RR2mlw== - ------END EC PRIVATE KEY----- \ No newline at end of file diff --git a/tests/pem/pkcs/invalid/tall_multi_line.pub b/tests/pem/pkcs/invalid/tall_multi_line.pub deleted file mode 100644 index 9fdcd6f8..00000000 --- a/tests/pem/pkcs/invalid/tall_multi_line.pub +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN PUBLIC KEY----- - -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3VU0nT1p5W0zKHDknAgQpsOODuM2 - -/AoZ/6wNqC9AoUCEpQempFg0aBqxleOP0uW0HG1YwCnOF8N0D8Q2RR2mlw== - ------END PUBLIC KEY-----' \ No newline at end of file diff --git a/tests/pem/pkcs/invalid/weird_multi_line.pub b/tests/pem/pkcs/invalid/weird_multi_line.pub deleted file mode 100644 index 0fffd9c8..00000000 --- a/tests/pem/pkcs/invalid/weird_multi_line.pub +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN PUBLIC KEY----- -MHcCAQEEIFF9oAGC6vxNLIU8D+nuvM8ms1QQlPtp -GzQTfzEBVB06oAoGCCqGSM49AwEHoUQDQgAE3VU0 -nT1p5W0zKHDknAgQpsOODuM2/AoZ/6wNqC9AoUCE -pQempFg0aBqxleOP0uW0HG1YwCnOF8N0D8Q2RR2m -lw==-----END PUBLIC KEY----- \ No newline at end of file diff --git a/tests/pem/pkcs/invalid_but_supported/narrow_multi_line b/tests/pem/pkcs/invalid_but_supported/narrow_multi_line deleted file mode 100644 index 5a3ac630..00000000 --- a/tests/pem/pkcs/invalid_but_supported/narrow_multi_line +++ /dev/null @@ -1,8 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -MHcCAQEEIFF9oAGC6vxNLIU8D+nuvM8m -s1QQlPtpGzQTfzEBVB06oAoGCCqGSM49 -AwEHoUQDQgAE3VU0nT1p5W0zKHDknAgQ -psOODuM2/AoZ/6wNqC9AoUCEpQempFg0 -aBqxleOP0uW0HG1YwCnOF8N0D8Q2RR2m -lw== ------END EC PRIVATE KEY----- \ No newline at end of file diff --git a/tests/pem/pkcs/invalid_but_supported/narrow_multi_line.pub b/tests/pem/pkcs/invalid_but_supported/narrow_multi_line.pub deleted file mode 100644 index 8e364d4f..00000000 --- a/tests/pem/pkcs/invalid_but_supported/narrow_multi_line.pub +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN PUBLIC KEY----- -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD -QgAE3VU0nT1p5W0zKHDknAgQpsOODuM2 -/AoZ/6wNqC9AoUCEpQempFg0aBqxleOP -0uW0HG1YwCnOF8N0D8Q2RR2mlw== ------END PUBLIC KEY----- \ No newline at end of file diff --git a/tests/pem/pkcs/openssl_ed448_sk.pk8 b/tests/pem/pkcs/openssl_ed448_sk.pk8 deleted file mode 100644 index 7d6ee84c..00000000 --- a/tests/pem/pkcs/openssl_ed448_sk.pk8 +++ /dev/null @@ -1,4 +0,0 @@ ------BEGIN PRIVATE KEY----- -MEcCAQAwBQYDK2VxBDsEOe/w/F8aSpwuG9cBnsAkhloXWhPJEVhCxzWdXebe27Tu -f1R24A1BP7pjIihNdlXTsxv+sFuKWMR5ng== ------END PRIVATE KEY----- diff --git a/tests/pem/pkcs/openssl_ed448_sk_pbes1.pk8 b/tests/pem/pkcs/openssl_ed448_sk_pbes1.pk8 deleted file mode 100644 index c7574555..00000000 --- a/tests/pem/pkcs/openssl_ed448_sk_pbes1.pk8 +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MHAwHAYKKoZIhvcNAQwBAzAOBAjJ1wdj8L5FKgICCAAEUFrnEEVG1fA7XOx15h9T -H0TLtbCm/UYnFLh8GDGVjM+q/OYrfnTv5a6P5G/Ze7tMVsSCpgZBlSL9/Q6NJ37P -2X/Jd5vwyJSRzm+qeugIci5d ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/openssl_ed448_sk_pbes2.pk8 b/tests/pem/pkcs/openssl_ed448_sk_pbes2.pk8 deleted file mode 100644 index 27f9ef3a..00000000 --- a/tests/pem/pkcs/openssl_ed448_sk_pbes2.pk8 +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIGrMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAhhZGWQAxrkOAICCAAw -DAYIKoZIhvcNAgsFADAdBglghkgBZQMEASoEEBWa/IgJqnE1O2ibVuIkqVwEUIEG -2Wj76gtauZF1wEIts6PN/of37CQjdI8qBT95f0NemnXA9KWhqdT7zCVoZykdwTtr -QveA4USScJ1NjGRCgLcoh+RW0/7pQLI1s06UIptb ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/openssl_x448_sk.pk8 b/tests/pem/pkcs/openssl_x448_sk.pk8 deleted file mode 100644 index f6c4fe67..00000000 --- a/tests/pem/pkcs/openssl_x448_sk.pk8 +++ /dev/null @@ -1,4 +0,0 @@ ------BEGIN PRIVATE KEY----- -MEYCAQAwBQYDK2VvBDoEOPBQlJ/c83DaT71qCGj25lKh7rr3q6pRBIqHCjExTXD0 -vM82EulDzmjR9WU9zaS00j2LU4XXKpvV ------END PRIVATE KEY----- diff --git a/tests/pem/pkcs/openssl_x448_sk_pbes1.pk8 b/tests/pem/pkcs/openssl_x448_sk_pbes1.pk8 deleted file mode 100644 index b0c6a928..00000000 --- a/tests/pem/pkcs/openssl_x448_sk_pbes1.pk8 +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MHAwHAYKKoZIhvcNAQwBAzAOBAgZ7uqzZ0UIPAICCAAEUIoyzd9lPvjne3Bg7lk9 -PIHPqflbG9jCtk9192bVNj8+QHA1+XMEB9Ay3/Ljr+hQwiTS1tVELbzqyOoNYxpF -H91YfGjRZDrh2+k/K5MtLFUh ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/openssl_x448_sk_pbes2.pk8 b/tests/pem/pkcs/openssl_x448_sk_pbes2.pk8 deleted file mode 100644 index 14c70e5c..00000000 --- a/tests/pem/pkcs/openssl_x448_sk_pbes2.pk8 +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIGrMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAhzD7h+saEo1gICCAAw -DAYIKoZIhvcNAgsFADAdBglghkgBZQMEASoEEFcOyy6Y7TG3Z8wklZO14U8EUKKD -vdlVxsVBpoMpRTbYKen6rbSnAhysBG24K5AVyMAcsTXL1uzGHTIrV3xSjW4W8NV2 -N1MjPECNVcxH5HvsCOZ0lqYrj4IdSk4hL1+9Jrzz ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-128-cbc.pem b/tests/pem/pkcs/rsa-aes-128-cbc.pem deleted file mode 100644 index dc0deb46..00000000 --- a/tests/pem/pkcs/rsa-aes-128-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,7CDEA083529E2DB403D7B23206005446 - -rPM4VF5wWyLzeE6L3CbjNSar+RrvIJdYPPVXuVc25BLXJycvDqSaYlnpndtxY8kM -UAI9pNWQT1Icyp7sEvk3nWs2bAxLiv8uKpgZbNjVbpHoCkZTBbKwlwQFoJL1HMP0 -eG2rwNSbdcqY3JxnAU/F4js7Gg3sqD2fVK/vn+8b7iumuiz/SMNzR+aZ7FQBfE++ -Hnu2jM67wxt/uHaTOZDtPwqZv8taiDv7SgILIMBCygIsukclGi29NMMEO5gUK5fq -jS3sC9V3rInFsl1BkJr2mnqR84TGMGjXLfT3cqLzjmkv6JTENMxsIhE7igg1DkuX -nsNf4oReA9xnDOBH24gG+lrVYJNtn7YFb2jrGM97kISGqjCqsg5K/hC7gSFoUSq8 -ek09eglkfg2m8JQ1nB6KvlBPPvyghRrdcmHud9BYmmUopB//1235TBx4eq5vyZlz -KBWc1zxsY14ux5kMu0fbsdcGufHrkOgOnNa4OcmqQ+gK0RjfJtzXvwYTt5Owpp1/ -9tu0yLBFtI+XRd2xGDjuWD0lWrAiDOwlririhkNS3JRNRwyZfSpoGGJPuKeG7nmR -ZtZoWigNo4oyZ+mGwKmv1z8NTNMwju06FeA6W+BJDgUHx2rybne09egc7uetmMv5 -abeYq7kAP7XwNA3yhSO+63H/QdBLWZ+iClfBT3bJwZ3wg3Tc4b1lwzpF/opS7vHO -NIg3DAxohSlM4xu4pfA00nuOLsU/GJ8LPxnmTFpHBZDxSRkMwZIG9nt0d/Rwxq4Z -rqR8THeUTUMcuIdQFhixgRewcZqLsomU3HZDoS67Mf9QP2wxJBpEq6m+alFBC/oC ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-128-cfb.pem b/tests/pem/pkcs/rsa-aes-128-cfb.pem deleted file mode 100644 index e275dcdc..00000000 --- a/tests/pem/pkcs/rsa-aes-128-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CFB,7FAD08F428EB83172FBE8EB958139CAE - -y/2Can4r82eu9hayWp4zOo0kIhPYEnfLd5EDE9O5kqEOQwLuX0uLOY7pqBpiUJ5V -l5bbo/J4mVjxMAYD+tl4dCYH5nkKt6v8/g16dHVyNi2GnJLzsk3hP9neA6KOz+iE -ULdR0eYZ/lHw/o5nuLXOASccJ7/f2kvN2QMS/GtKPEwtHcl6/EVNOqUdCsDuv8Ks -cU746i11jMcL4Xtuj6beElXH/FR9xWFlnZU6sFe3tmd8KqEeeyXjE9IJg2voanmS -FwtjbPTuvu5DJf9P7QTAMar2TuZE2Yv9CcAXAw/LX30tviHFeqrVpOHc4WImcZ2P -LbraC3yI9mTwukqkmUSIZkBEvUw4bSEcBNyq8INqpuCfvNlNGPcpyX4shmJvGD5z -TLPMKfS6tPhLZUrrM/g8/aolkgxwUAKwGLYhzunTGZg9Hb3FMM3rnFxrPsbSVgn1 -pkrIQPOZObPZBo2c5cfpqmFYSs5VKpdTxX064efDDPAMf7EtKFGVFLansM6usCzA -IeiQEhrrfE4zDXKoqSzVj3FNN73PYF/AtkX24e1vDBiTA9PYNvBmwkJUeOKe0MK7 -/zt4bZPFIr87Mxy+PBX2niS8legDOCDJXUNf23FuR3F65KbbTVe+k+TcLS70SZvM -U12ilkgb5cls08vehvoEHfiCsXeSPPD9FD9CfFdihj+dZZ6MU7fRH0E80O7MGC2T -d2oOWYnLQ8rCuQLe4dXZyjmfLhoBIfs10OKJLnU82pxBrOxgN7QvfLEYi5Gz6SRf -Awaw0WMhYY+OmQQ/PuL9t8uEbSiDB/J/w8H61INZpbwmmA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-128-cfb1.pem b/tests/pem/pkcs/rsa-aes-128-cfb1.pem deleted file mode 100644 index 13f3bcf3..00000000 --- a/tests/pem/pkcs/rsa-aes-128-cfb1.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CFB1,8CD93B961F5E3101C3F5991677ED7359 - -nrin8hgkJgqlLo0x3urxd6Dk3NXpB8K59toOVySzyMcDSzxvW6W/n5U0oirF9jzC -9CD81bgqDvw2hbceiaomGFoHbOlHxPk4YIyGRsgzjokB4QU6P85AOVBW5c2d2+vo -knIxlDwkuoKOYWN3P3wmtR0ScrynUGrcK0yZHOOXE7jw9n/XcU+YC/Yx/fkkqs71 -WqWIKIRFt8nT4orbvEQ5axk9ucYbtXt0/JVFE0PGSyFOPe8soh8pe9FQ1zvu7rhF -ttoxiZSlFN1CIJLSsNvEb4qN7Va3H+fP4cS+CUT4UgU4XvnrLKDQQhKQxXGcxSDD -fQ5WZqKQusP2qGhFFvZKS1pWJ2lrstPixUyOK/BpCeNVfuzHHGmw87cqnRl3q1i0 -uOUQjCjZR4TIHkxfT/9vZNxtEYCm9eGHpUqQYF6BMTQfNFQhuFTzdoOlPpgolcX1 -XIeDUCu7ciX1Yal4tHSRP9P6qLAi6OIDc1Grq7hdwfdhiR5eoJMxZZruLEAjCqMa -PsAufIEje4u86x/cUKi56hxJPdyqNbpSDwHouuTiiX9VFWrt3lhdAf3dItwj8yqZ -u6ybmleW7R4J/3x0UdKONMTwbzjbWXkgYhno2P3RAGspkUfv8nApwD+hsdMNDApK -iy/6WSiy9g6ibQUs4hlAqs5VtG06T5fPHV+NhKsV/fg1Ywat85GIsBeZCU4xmVda -4ikhicq4dCWsFcQ8f9CqpBtbXRqqxXEKZhvqORkhkhawg6XVcubyRa7ABB/SqmxX -oCohFeIvZ2vf9rPwvbfRZ2H1UIHa6ofccfKzG0ZaqaCFFQ== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-128-cfb8.pem b/tests/pem/pkcs/rsa-aes-128-cfb8.pem deleted file mode 100644 index 376d370b..00000000 --- a/tests/pem/pkcs/rsa-aes-128-cfb8.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CFB8,8A9BFE2A6218456CAEC2727E8EFFEC73 - -HzLoJ94JXSkbUKko7CO3M7b8lXYQwC4trhLyiZ8kTrYO+yr73SKiZL32zXkH0cRu -JBZrRf2VwfTs6y0iu1EEl8bocdjqDigntmpCCopac+IYQAmVOTQrEL4iVnQv3cXJ -rSVjqE6RgMB8hblHwUWi3DJpGhpbzEq6ztAwF3oTxldY6qe0XMd8zXglJhEsmDu9 -k6OBk7zVSdGn97TqGhgP4YmxUQVs5BZ3SNa2xyyLXxA7E/hgupeEKeY9fXNdKWzF -3LGJwq8zLAj7/unAta4ScUh+uBQKq82TdTpwkhLCHcdbIeB/xPtJsaOuivZ4G78C -bUJaddN7hmRe+plJdLHyMK6d27NyBd+eB58jNcjF/8P8o12jWAIGZ9DdG/L3+p7+ -/SBSLIIApX0M8HkrjzjYc65mj9KwV3jNEmggkvJtWqXrG0TkoX7rvB3zt0iXfTZQ -hKZvnP94Ki2nASy1jMIsr2MJ2ErxYwW3eM8eZdEdm3IlULgGSLSBalYJm5AkVbbs -xDY3gAykTjJ8R/2Kk2i7KlkEBoO/sS1jvz93WL7n5D1etXwAzPvPGLqrQslCkcSO -x3FaM15SYVMyHthOeQ0dKsikF78I8Rnc99y9xCBzP3VOwkhPiTcISxM7dq5JnSNK -gQI4NPie84lv8hsDU0Spguf6pUUaKQeQ4NqHBHxfBoH14BuyKrKs0T2Eeb1q68nt -6NIuLzeey02DkplAnD/WpmC9uF4Oe/Va7wOvLnhzOonUxGbaRTtpcB2Loc6cyt40 -ed+0E3RNzaZCjZOSBlrHYvDTFHXa1QUu6cnOkg6k7IcM2Q== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-128-ctr.pem b/tests/pem/pkcs/rsa-aes-128-ctr.pem deleted file mode 100644 index f60df597..00000000 --- a/tests/pem/pkcs/rsa-aes-128-ctr.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CTR,E154FC61A8B6417FB086540C1B16B9C9 - -3Nay1Oc0YF2zmh4zEXehb0qpwzv3FHKYKFZYIns7EXZ8gYzWEhCa+Q0nkaGzBcDn -jad4TXZDmdWJRh+3fDmV11pZ14iYjXoiBfPPAzJEbENr10puMG2iFJ7akuKBIzAu -DjP+3mY5EPqO/Tz69+Vu4loy/IRaPmXJxRb18kXnjaC2XoaBqdzIFG3fJg7O6k9H -LCA5lNud6VLXt7TRLWtjKQusZbX6Y3vUBZjLXSmHGzqh286wKD/sRROINopDdzv4 -6ooAdoy08MAXGekd740D7L0Sm3PkSVzm39byq0h1Ulyg6Dq57SkZRX+qLiiM9KZ1 -LuhywWN5ioAqfRD6xQsdT4PK/RM4sV3bpQD4kFLW9UkoEAnt1cql91RNsz/UIII6 -9kVwjCwJ4AGH0XwzbOTYm5UmcWLXhaW1Z9fAMsXST0CzMnLzzV1qPb/9JYZTEoE1 -8mqN7a/X2uXrb3IOLjpJeCi52EwMt4+fGIxh0+eyxUzV9mFIlTKVn+jvYhryzk9I -XmG+/fAzk2DvzgG8nHTwlo2cknfof71fDb/rcLN2NXMQlw7m2lfAli3h0zOaBmFo -KIH2aBX9emMHikXu9ubtfDOZUHptMbMHUOoVODd2rw8ZwJwdO3CkTG7ZBmU7FwZZ -sjtQPHO0x+XfQ78XGeZCZCLSOMWw+qf5/WhnJ/wiM88UH8M9S70OOcjJxkg30c9V -v2QRSkNKsrazfBDi2bLB57jKjnMi32e0yM6y8+GmiSJcL3+NzESBu2xYPzfW0eou -xeZGpvUOxcoP3I9I45nx3Q/hQVqPqvTU8h9KFbQoH1Yc+w== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-128-ofb.pem b/tests/pem/pkcs/rsa-aes-128-ofb.pem deleted file mode 100644 index 40837ceb..00000000 --- a/tests/pem/pkcs/rsa-aes-128-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-OFB,3FBF6EDECB4C763D192AC4D9D1DD5E49 - -lcbgGFJBGIUaMCh/LEaK8bT8TwEmg7s6tLekeGvRvBG5QUOB8uf9OyzCJ5tK2OSg -SbS/tuVbibe+X4PIfm7pA9geX+3k3YCTNOHvlmjA1vgRFREb8fvhlOxF7ReGNOlN -lrNJVDD1xW07deC9MlCmqsl5NMNzSzfIxRjwxMx4mNyBRuaPqY5o2N/fDmKoahKG -HCT4VFMFtpp0E2v2SPc6iPbzqB9daak43vVU/8bpGvO1qRgV4cG/IN5U0WJGiDAD -1lR02gePO60jpm5aBhHX2INt4XVICuIFRXIJi31Bp+6Vzy79E98c9fbCX8/tBJH8 -nsq+HxtZdWHNrKFFXM9hYsDsjOQLDu6eek2oBwrSrgnRD44ki2MycehU2Db6gh66 -RTLvW+Oju/w/T3+K216r1qdzTQpNGeBmkU/Ecol3K+1y3dQNOKxF1hLUsturdFTM -XAaGo8eqDkDMyaDR8D90LDNh9S7h5UHf/W/5vglQQmrLmw5S51PU+y8k7aTuE/JO -1OB19BLbOXdESt4if04Po9q9Tdbm+I2kS9tCByyLDSYuLqbAXegqrFvJiCgmYlDv -qqCwdVjYpbOV11hxxs+AUjTyK6KXJMtLxZGTKqfDFDFmC3PcflXWh2dX4ImZnII1 -Dg1Flc/MvfbFhlcvk750BlwlIo83xOigbXXMwXTE8QE2Z3MqZvFzEKHKqcBBF++m -LKUdSddeSnEj41Zi8JvjdMzLFxyOtQgcZFYRHBIePN0xH2VuUHZ7vMsFJcHj0lla -7D5uhCoyjhGZsyq8Rnq2b5YwkVBkxq3g3jXDrWAUsKn11A== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-192-cbc.pem b/tests/pem/pkcs/rsa-aes-192-cbc.pem deleted file mode 100644 index 751d6b12..00000000 --- a/tests/pem/pkcs/rsa-aes-192-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-192-CBC,A233ABD2273847D1CE439B454A86A341 - -dUXLQDH80/9PFA3yPpvdwtzhWBJsAUqg3yUak+Rupbm2z9ylJvqFooa7k5um2/GB -waEAmig8p8tqZqjMxn0QhSKVYlvtfmuh4I3jw2DwlI+nkng3947Rx8q/bqcmUgyU -gUZ1Q6ekYc5u7UMKzCxtxV9avZMIMDE9AczErvTVv1ZFLjqv+yzihbL+h7Mb2vxZ -axh/RRlbkDoX6IbdZxIDOvvoriCHnOML960QctzzCaZDcllLnAnRJWZ5B7byDzhw -ckATCU0wANbMkp/TkZLPaTc4nFKzbB+97+LocD29ZldLGThOotd2dOTIvvIdVYw+ -HsNOx5xldRMH68YFCeiSgVBOIZNwGo4166Lr9So7CtMooQNHWMTP+gk8vDOFzV89 -shs9lu6AtLPlxHR0o7SrbgioHPUEcZ4I9P89yCPgmsLm4q83jZF1Mv4s94hpiBcS -LKV9TIB2TpophHqlLjq34hKVcM40NXSwVNPJvmDuiCHkqfU39x1BGpBZZwT3Eajo -kiP3d/fuOlfBx2V417bloaZZF9cBUwILwJZvhy2BZ24G5em4so7pVdylb91GWz15 -5/6CaeYET7HdBVUU+mdkBQvOfUP2tt00+m8RsYNYr7ENbZ+9kMsuWgXAuFs+zvN6 -eeedQ8KrWFVzE8GmrQYpuh8bmH+QFCopQedhUn3ZZuYM8/a4OTfuTp5uPIJH7Bfh -54a2UPC4fIngz+LLyOypDlK2qIo9uwh3Gq1Ahnlxm9NL5DOAigG8w0qmgfaBif+h -lTnvsl1Spp/MlYdC26fRCHbe/lPkdyr/RNnZEXqRRypfPbfltQsAdKiQBEuaKdgm ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-192-cfb.pem b/tests/pem/pkcs/rsa-aes-192-cfb.pem deleted file mode 100644 index 2f483f4c..00000000 --- a/tests/pem/pkcs/rsa-aes-192-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-192-CFB,6058618498B8041B2005DE63098CA36D - -2AeE/YLJ8olm0ZVEACO7JThl3i/XznCha5Rf4w5RYeRAbjoDlw/YLllbySDkmmQq -DVj12Qwo7nX+F02GDiUM9QyoW3/B/rHOouF6TGBQNZTvCVSyJRTAE9Eil3G2e4LR -4bFvW9rDM2yFy3Ze6frBXfffHWOD2M23gREyKkkPFhkXLUbD3My4iHjeFERoIeHN -QfKEV/T5v7ARFCPZ+rdP4nf9d+qHG/4aumerkS7TOsS3BZHfLJp5zVO/blCVQ1Px -tvXMv2p6krsjgcTLDAC5eSK4wOHhN2MkrSa7ShU2+AylGj3D3IqFVSQRf4Dwk5tb -qwUNq0LtarbJdjvfffFgN2Vl4LEAluRbNasjs+3J8x69LgV5Au8HBwyY2W7UeRBX -zpURCZGt+s0pzX5SPrCg7f/9STHEjCop0ZJPHOHtuJZpshcqRLPxrSKAV27VhUj8 -T0YPbp0WTnzhIlcLWNhFnhP+yIhlC7QPdPqI4RwSx2kBaeVrmWsYzA8dgajoYXAU -PZAgw+JLYD+g2bPIKYyZLHUXmeJ40zLB64cSgKn3Bv2dKAE36yrzNtJB5YgjVWj3 -K+UUpDxA9GGEmar+LdlCRG+KQ9BvDWtfcQClvzUG2nKQc9QIa4wsXX7QHqaGHIk/ -5Lwl4xtHRiZLMVkSTVGUem1Kdd9k0U8ax40QewHW5Ea5pRRUj7B6+MKDgRDoc7YB -jn9UQzIzQ5TqTNLWdgZR6Qt5uLSrVg3S2Au23yEc6jh439kC0FZHrZnALdByuoCC -Cx9BpHM++7MjCQMxWzeqs7x0czgGSf2u+XHz2N1sbQhmUw== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-192-cfb1.pem b/tests/pem/pkcs/rsa-aes-192-cfb1.pem deleted file mode 100644 index 22df3d93..00000000 --- a/tests/pem/pkcs/rsa-aes-192-cfb1.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-192-CFB1,756682AC3B191C82E8317DF6B71D8750 - -DqGTvVO1V75Q7nJe4bhM3x4HOUy9FUBl1lO5QfYxohUGzbzZelFLqj+25iYmYRCG -ebVAXWjhyl5fKZ1WCutQB5b1zQ5tSUdcB2q5KxzY4BvtUbYJXVQAtqbRU+xIi2ZJ -Xn7hw6fgGtwwQJpbS8VaZ2SnsKMMG7QqtY8+fblJQtvmU8IruKa12efS3YR8JvWy -e0eHdHY0b5XN53/ZjmySZHfegnXl6Hzgfx1TUb96dB9mP8hkjxkJfo0ow+k74rRS -BgbKxQAr1F9FdJuu1EsVuQgNZZIJKsi8HVwItXoxZEV1LHKfKL3J9VwUs9fFO6oB -KjQxW6qHYzHW/aMcsc3/zv38Uoq5Uz3hLbl6oFrd5w2cps5vd2Au33iPItC2CPKj -Yrh9jmYsboGclOcuqp8YmFdIzqszsJbraT3X1BaF5Oq5fcR1N6mh2pTiD+0jZ1gi -cIaJW/Z4M2gKAz/28X4peaaPB5gOHmabzMUme2Gl00UQdSZYVNo9N96MCjfYpVNW -0JHMQ2AsI8Cc5pd3L5q7Oi8/3W9ENWd3HrUsNgieryWdXCi2p3Tl/Zb/nb9R5MYR -aiQfQlOygw2OUHXnMU6SCD2w0MttCUatVGJ6w6DP9a1EkYzQw6nKqMM+K2qMyJEP -0j8K/4regxBOBhN9fDnmTxihUvGEfZNLou3zDOULOMkVnCezJJEJUUYwtFq5NM4m -nhgDLY+siE6e4kRWUVcHBDvHiZnt7JvK6jdfUiDyZrziyBTTkLLVBBrHXrNRJfV+ -zB4oQorUTiBKqhX01CJE/N1uymnOCUuYtmIz3ytU+/lZ4Q== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-192-cfb8.pem b/tests/pem/pkcs/rsa-aes-192-cfb8.pem deleted file mode 100644 index be297997..00000000 --- a/tests/pem/pkcs/rsa-aes-192-cfb8.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-192-CFB8,560B75E94CAE0D867F3516AD0F093CE3 - -R2X8uO7rpA19g6QZZ75kpKEadMnZSE4CMPgC5kxwSylHxs7x/tKWtYOYxAJFnVix -mSLI+5nFZpTqYPhvno5bK+EYJjdJuaI2stQ/SHaEB9tF556wZ1OtkwS1sK1a1J9R -lA/7zIahMOLjm3jWvgletItpT03n2rvr1SM69dRsqP3vFsTCAfWrjXQSnCdbnJZt -KaEXccYe50uUULdFbh9Tg+KchijY8f1QZ9qjEI5nYTYAOL2egQyJoxvBshrAAD+h -TKOxrAE8bVIr8Cc/3bK16HMdpPSfb+r8+aBGjq0Jbtr0ewxUP4kUfjBNJxsCZIcw -zsEjJrogLTvzTF2IaMuS86Roxo3SSLxbKSjf+JYpyhcJ2yKL3FjHoMLieYSfOppX -7zfLNAPe7nmxEMujQfdyxj1z7R/PjZU6alObSfVAP+OHzn7+lf7+hKNNqSobicx+ -oWjuyMlZV33YQq3Dl/UDeYrnGjkcm+5LOLWcd5cRSxslr/imIeqo3dgBvrfGLc66 -9Ybaw6kD91IBuAvJlNmLOhz0+cGjlIdXVXdUM2+RTeKkoJ0nFbMjMHxeCWVTjQc4 -yPWjTTy0YR0l/X7e072Q7e3PYvyljQE50GqVfaS45foJBia6EWT1tft6gPt2Nw/5 -hFiBFGSrgmO99/ptGbTLh/452bzzdcIYo3th+xtb45j9Z7uAO458XSSBmabw0XyE -famZ75NnTQlXeawakjYpFfbYCmBau+i6mBFXYKZqlfXnE9X6hNnPEX2tc7oqcYn/ -hkYwvC6AqVDK+TKROXdXyD33LAHY0KzxHdLriBUXSNDPUg== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-192-ctr.pem b/tests/pem/pkcs/rsa-aes-192-ctr.pem deleted file mode 100644 index d575697c..00000000 --- a/tests/pem/pkcs/rsa-aes-192-ctr.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-192-CTR,AC362D52E38D6A9216ED8297B189E40F - -GWGIYoBWv7LW6cvgscSDudBA8stXj7AOOnRRp1/LDaekqUQmEvp7e/roBuC5UvqZ -6SXdDGZ6dFtpYThDWJ5aD9cK4Bk9j0qe8nD97xKwQLIjVO0vkHmbuPzE4KJlHD9+ -4H9ooA4iH9jxdAc3y9TbALzydN8NNiDKMn72nfi6LF9c4L5Yxwf+mlnqRNmEt0pd -2XvAkslz70C4myer+I/KMyyNDLpwghvzdWh+TBlLPBV3entXbpUNYUT/HYZzzt7R -tuj4u0hg/378U9j1tpRvGXlx5wh1Besfy2x+bCc2Zw23/Ezj/dGrBGDpCOF6GjRB -wE0XkYgAgDn2O6akECoVNKI0zwwI6/I9PPj6Rnq/S8zJLmgLCgVxdDk466rCkcfY -fgQlSehYMxRRyvD3dE4TU7dQlm3tHzFFsGI3qHI1eu8O/GA8KfY6XQTp0X/rEuPj -n/qnuNirYboEYXbDm15QBDvUNJOYlseqcmFCz2SyE83GLabOrfivZpDXW4CF0plU -n40ilGWVCLpiIQqOhkufmFhvfQDZbwgnfhew3+fNxIc0a7Kd2uR1XTBA5tapiFBV -/qd9STIdW6PGCqptf2ag5wMNVpQNkGYexujR89Uqq6axBvLZRMY82JRd8jLQfDKK -cU4Rz+a7B1MwOF9itcDBQreYIjTBQGyV5xDF8Xrg8FQE9ATOWdDl8P2/z5AzCT6Y -TzjsM7fjdw3ac9mJZICY0++TbymUEAh6UqKhhn7R9TR0/WaPTdc0HHGip3t08fZA -ixdn0RHvV2QoWJiIv/AuntYb53bN2cQB1DB5W0NPrZQ6tw== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-192-ofb.pem b/tests/pem/pkcs/rsa-aes-192-ofb.pem deleted file mode 100644 index a193ce10..00000000 --- a/tests/pem/pkcs/rsa-aes-192-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-192-OFB,1E532FE273D9E016DAA31CB5A306DD19 - -G7dGS64FOLqwLg180YqKF79stjm+DuWgTL4HsoL/ZPRBQA0Km1t9onvwu5+60bo2 -VN14VGBulzGoGv2X6RiclMShUqpfD0TG+1zIpxQv1x1takw8vI3HFPRe6XnK0dOd -vofluqogbwM1+l9axD57l+v9kVhfG9z4QQsu75AIb0BLwUFIRSKK2kyu2BVhMbme -6iaBviv14w6SKhVChUNQOhiQ5pcvPx4OFmeTx5UxQCbS/cpJ9epH0hBKVo2mKH6V -BLLEP8gnqSPzunCaIwWlWy6IiNMySsAwlc81zUB5qGIWNGLthn/KzA9k2QwTKRQH -ZQ4LHr+l9grFyDEp0AqJgbHNmnUBqR+NHOsfZHrBuHmDGXaHS929TubEEzeP0+xg -ynYJyth91crnUWd5grJEDXyJJPFKhzWzdnEFpyNmC8UBpGyM0rWVDCVVta02E0LA -I8fKkc4q6VnlonbivlEBb0oSiW6Svb/MdXkzTvN/aDadYucSh8yNW2aDF6/GoWXt -57mGRQFEkMS8+C3QG0Mcv8Ij6l19kuTxR1VWEFFDIvHk/018gIiA15cZaJoiZQYQ -7rVNL6OSxjAryIR0e92bx9KoBN2hPy5iKkl4pZ3xy9ZKgFcvdhnXtbdQI/UxKCjO -JoLUsBEecnWC5hIsbmtYfzfsQ3DQBUoBEVq4+XMaF21EHYTixi3tV+Ya9CSWTw1V -UFbc1pNJ8P4cEFgiXPYsWcP2JwdABM3esXzwj3/Jxv11BUubHBCehHwxESSjkfMN -C+ua2QXGcvIziINZ407Mc+7HKXeDx/EHJwy6Jo838cgw+g== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-256-cbc.pem b/tests/pem/pkcs/rsa-aes-256-cbc.pem deleted file mode 100644 index 198aa3a4..00000000 --- a/tests/pem/pkcs/rsa-aes-256-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-256-CBC,610E0BE873DC7E35E19E8E8CE6F475F5 - -Z2SCHEfiMHHZ7GPuFFLVynP+hdzuRfGVTRKqNJG18f5/vDafYHcbd+RKWF9sVy7M -baORTuNarrrpw70NamFqHX+7UceFXeIdrRHcQN/HWwLtFaUWLFhAKjkc6NaoBK3b -xVvH7e8TkkKcDHJe5/PYTsqCmUHzGUFzOw5460oksWkURhmgS1blQJgROFGJ+h4w -T1nxmUoOKiKNLneyAgte4gSMM/FmgShcjw5e0vRIssLIWcP5U7kYLTIcsm8+qHzZ -fdXx35VUlR5J5EFP0txRWCEWOs4FqhOfJmmeeDOoMD7us4KL6TyPxdfxMfApDQJa -kiFU19Y/eRLvCaapD+x37H00iT6MXnRyn11zDvdLWbPB53ZZ7nT9xER9FzmGRBf9 -yhOdK4/ekC3oCdTzgHIz99iaAJE7HT10X9Yf4A5LXgr625HYoznDfmjDqIVynELu -9x9uwJ+XmfbqfDhop8YW9YJzVwNkeryouZbLF4On7pMvgqTdz7tokuo8hTX+0mc6 -HCItCPxALdA6HQYCZXbmDn1cQwc0yMLXC4fqipjOzd9/Ns0ApvdRkhrG9y6sKht3 -nh4xFPZ5yB0lIDScLY4Bhk1zvTaoOnrpY0K9r1WRysa2Xd9K7boRuK50P46lfXrW -eLJUI770NhqIHYnLDIY4p1jKPdBtRuMkqWvdLQq1McfnGpmFc9SnCLHCeNNWOFGP -20RFHPiQ98xPHnuMCVThiumewqBkMaPJ96nRjm6ZrJl7r/Oo9deFcQ2MR4N1rKNY -41ASM3Xn65BoUpEPS+MRP0lVVx+DF+6fs2NHGZS5J7VdlHoHEiCb+GnAwP7eGj2+ ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-256-cfb.pem b/tests/pem/pkcs/rsa-aes-256-cfb.pem deleted file mode 100644 index f56b3773..00000000 --- a/tests/pem/pkcs/rsa-aes-256-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-256-CFB,43D96087451881A68B7075CE32011024 - -KIRsgcI/JEhz2hht1AU77iMiUzW22AIIXYFMCelPkmkCA5E5kXGZz/l8L28L0A6c -DUVCQRlozlhLt2Ie48U86ph4IpW52bAiMvyUuZJNPFp3Am9zWujHf5BvS9QvBOM8 -Y8vdFcA2uJeVku0+vOQRBowEU0wg6FNAcJOjZiAzlKsjoVb++GqBC159MconYp5T -YqCbz3mUKF4nOR5NqiylgOeArQ1iNP/nf1C7uD1WPGZi1T71L5z95fll73yPmXkd -/uv5yak7DtNhh3Kh1xfw3ecHHCz2BRng/2pn5BjOo45g7BaTd0ejGUIN9iJ6FZdN -iOP/pzOvRU8gaJruFEpLtS0Y+HLPnoArwqYJHeGCH71QFDl8cVe3BjcWfhVYYbia -cGBxW3x9oy1Wc3queMuyv7M1IhYX+7QltcTKYQQuJd3yeioh/jfopLxtpuvNLWSP -Q2Vib421qnvjUrxn2EY6i87ten0Rzt8JqnzyVRsdtulAExARRTN8ggnPieSoGxwL -GXPwnZpRn4iAX2S6ETYWoPNtGeE54h+CmzidrqvrEk+8snyI7o+nhlPumbGvdTVx -ts9mI77065hxWUGa7o+dUN+28nFjfxdB35Zpt+/DPrc0VqvAkCefqNGE9JIFxXE8 -kKdLfXOwuiiz2xQcaYFVtbkw+LzbY4OFOKI47A92hqg357UbTdatjL4EQypPX6MY -CYe0XtPr5xAa5/D/j4HWYZ+Pa8I28G9EHxeGPFGZQOqFJFF8NaOrVSEHLLFhNDKr -CE7ZsOzGtsN6fJ+EoGTEHFVdNQpPZ0qVZDVc2bHmQ5WC2w== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-256-cfb1.pem b/tests/pem/pkcs/rsa-aes-256-cfb1.pem deleted file mode 100644 index ab48f91e..00000000 --- a/tests/pem/pkcs/rsa-aes-256-cfb1.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-256-CFB1,0AF157DBDA6F41A19A44B06CEA3AF621 - -G/vEnqttynXwg0r5ywMjFpmIlZ443oqkYHklWtoHoHZu51FJgDQIWwDIu3O4Efun -FAOWLszC6K0prA57PqV3FB+z9ldiYVEcEecNPS+VIj8wjPVbgoyRSDes/4pKqjR2 -7/z6FlJjoowjDHglJXrL+u2utpvUWd/8pD9BJ6ii0auVsgG20v4AJ55PTqxQg6uI -/7GrIlQ+r0T9GJl+HHFYmK62bScrv1HOgUtrcj456j3TlszleCOKTsAQk7GT/y8G -uHihHzcDJUxaH9puAifnbjeKqOmZQvfnDf52+/hPz5hmWxt35K8JNqthQjk8w+fI -Lq30pCuRgjJzDgIjbpFKSSy4szHsPmSIDpVEGSTDGNCKyi1ZcEFFm9fZL63/qfY+ -j0wZqOyzeqlQHTVUqVjwT4xFhArvU5ZinheuX/cmlBe3N5gTDEDweRCp4edW9+it -InGa7uSgyoyHAIMw0Dyzd7cbBrfX98i/eldjrnwDvCmrILf/KgjLzWMBdYNSmCzW -hzwNek98INgIoSIs4DoRvryV9Ux2aQfiYGEOLqkiTOjYgtu2fGgQVz6lYNRUNKn4 -RUNcofDkWUmXjTm64yhon3RymLrZcgKNOQ9LWV5p9JtUhBasWVuZUhOqsRt6qiRP -myOQFLpk/PcMeOwjBpVZ0wxZ6NVC5KHys7wKXX5oJXPzquLMdAubpQco0N5nZOpa -Lrec7355alzWKfngnu0SScU00NDUq+z/IXznV3Yr+weFot7oargTEpryzsfdMdjn -vwHdVWb0txoXY3sgNkKf5cOOY08B+MnrutexoXhj7XiuFg== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-256-cfb8.pem b/tests/pem/pkcs/rsa-aes-256-cfb8.pem deleted file mode 100644 index 3ebe8123..00000000 --- a/tests/pem/pkcs/rsa-aes-256-cfb8.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-256-CFB8,601BA164578A77F90131D15774EB5B76 - -32zECxJ94olMum3sLRALUPQT2U0M/Cd1cj+pVImgcWKoM/w0AL3XZhoBUXqT4VaK -SbERDE0v0ksKizpjytVRwIS9ufeahO1O2mRzHyeM21p1yEX9nlrKqzWco0FtzkCd -YntAoEDlASDFe6pVJjq6LKgcsq1CiwbbiUL21vHZsREcQwQvhr7+/WldnjBJ68MQ -aOVd1/YgoCNVnsK2NZ4lWlIvhVACsZ80aWSLftZg1f4W8lFetJWkYOjFll/k9FOA -xfavEHSZ+Bh8CF51I1izbDYL2qi0HQ+IoWkMqwUy+dM6Px2hAlM88gswKANu69+t -d9pFPKX29xOnWpA9nTyU4TDXgFEd9+1HZem424IQwQGuBlQ4tvqxQ6Yh8QUDbUCB -YqAaVM2N38cykw2uA44Pd+HRjYClNOcGmegXqWVaoOw+InvBweLV98POv1mRBMmT -lBzIPAHvf0Clkc9J8DV+Nfx0d7tfFlUK4J8j/zcZKLDe0AqwuMWFJDrZsDpACsPV -o3o/xrYlhuJjYcueRONlja92Jt/UPp9UZANguWLT3Q5GhmlDkKpzr1KVSebqCRDI -EuR55HR5PxGhPwXPukWMRYb/duQdZO7D0d0OHNkNJqSPhyWJx9FBnkzSRkhrz0cW -/hsOcPuab/KtRgI6IwEPGza36aNC7wfJ8ZUAzvC82emzaFWU3mHMHRZtzxXqQKT0 -yBtqd2XR0HqnAb1xEMy6QmLs4e/a88pRBBm/1gUeHyzjA+gFDJa0zIznLlQbXuPc -4LNyze+MB05WJQHjtKZG6X4wcu3q+H9mreD4cuTekwjicA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-256-ctr.pem b/tests/pem/pkcs/rsa-aes-256-ctr.pem deleted file mode 100644 index 5f49765d..00000000 --- a/tests/pem/pkcs/rsa-aes-256-ctr.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-256-CTR,D351845764A2C771E9EFF37A07848AC8 - -HXul+T5A4PiaDtzR9ZK6pS1Kjks3ZM4Xl4yQVcu6JPhg68CKkBkMBDa8R6Ny6tdt -IaQ1dbLquS0KbTr438WBhFd4yTwSy2BS/hQv8JjK9t/WdrvlFvhLXqqNosk1ojmK -L03tyrB9FDfqaw36fc2zOTL0U2YiL+yc1jXOxV/KeLFZ5vMCBLIIlCmDyX09CERe -9M/KX2dCJInj14RqXjK4sM1SnaEYjRfZwUkiEzqpOc3pfnnblo65v79jooVHO2j9 -7d3Uu0I8Kbzz6Ss7QDQpUqSmS696XfVudMVJFfhGM5yvT2iWc5L59dZ6PNNY+gOA -A7Qr31uR3ufpmpSsjuzWqPO5PjG808P6wEEZosT/ESofmlR7H5mKAuifxzxzEzKV -MTT0KSLNh4mLJ+x23MHxWDQ1EWHKeAGNznYDrnFVDLgzX6qHHLGZFw8nGKb3cTYY -zjIbW30jQxfAJNPisdBPCvetTV+Fr9CtesyTNw6ZP7YxYqFcd0/ZI1GL4BMSfY5c -OClXyWakdwXdfL48T/dR8EKFvD2pAJRtbs+lF6xdTR5OIsek/uu6+LYiNa31ItHK -QogMjXcmUEAUJchRmpS8CDby8RonSCOiRop4/Ct30G5xTOWSKTMv3hWLgOlvcC9E -+j/OXqKeFJ6/P11skhDjDSUnPVJhLBWlQvae9zaQ7Xwg6llbko6EcUDaFJbVavwj -gWeYcIT582AlMnnSFSfMSs4YLB6h+GdG0Ta+mKddtvFtn1PlhF0aWxHFQs8Pkebz -+60Jx6qoH0+/ceKHLPbV11af8Mmi2gHifpeTYXMi1DzQ+g== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aes-256-ofb.pem b/tests/pem/pkcs/rsa-aes-256-ofb.pem deleted file mode 100644 index ff9e3cfd..00000000 --- a/tests/pem/pkcs/rsa-aes-256-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-256-OFB,864C72C0D617986401AB8B278EB9039F - -db6VKZnrNYiDaMmZ1fWYfwVkIPMS5OpTmlcw+dB3ReUpo0y+D8Bg9ro5q5vHNxns -jkQoLZLfoOFjU8TM5X95TQ9SuzyLun32SE31CE/yoFgQYaj8liQ+s8t6tcRl6NiZ -wQxjvCQBOzP0d+RjSxXdEm4kjIgArYX1c3prMYyARondJbQYrR1XzBKR4HruMb79 -3JpddbOR8TT4rojnNd4nQ3f32qkLQ7tesIv9pDPvH53VCivZTcaNgHsMF3o4qKEu -i/qsOJiqKkJsqX++MEIel11M0vkTe+BzPNiIHOKyUDhZyPZbot67ELH+lrS0z9rG -RCj8HUNRPwfuPJAq7zSjeaA75N9Ybslj1rgoRTRwriLKdJqhszjz4loU13mJb5Qz -oZPOOWYdseeWGunlWFIu4shXTprKuAfrYgFamJXglHVMDxwzoRVS5b/kAHu+Mq26 -bW+NO7L5VQtRfTuON+3uoVMYQqBw8CM9B5YB4LUbySXnlENkDRkJELLccql/OrIA -1LmgP9tHlVPwOLV/X1lSfKjvb2/OFxwKMjZfT5jjuX9FcOy/Ozm/uBVH4RoZkGN8 -+XekkhFTLfAb9i01fWkvGhVOWQGezoMGOxN0PyMUNm6UnN77hO2bQrTPgdlVgUMo -vP/mY5RbW+PoviZOQLjMmwRHeJ2Fc0V0GLMbW5H3Mkn7oUHEZdHtlPOKG9Yqt+08 -pFT/L/oRn/Zu/9RajPCCK659VEE/Tu89hUigHoQpcj6qkS8iG0qBy/uN3EIZhQhW -2l1Lp2Gr6GfzxyLy64+FREnaoWHUAc87V95GkV1epsq07g== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-128-cbc.pem b/tests/pem/pkcs/rsa-aria-128-cbc.pem deleted file mode 100644 index 0660b97c..00000000 --- a/tests/pem/pkcs/rsa-aria-128-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-128-CBC,C4CA616BC1D18B52D59AB804BF572664 - -BX+iYt9uGjvKyiNtZHy0hMgqbozKfUApbR+9q3y7fItEYcpzi/8DW6kvKx5q9Umr -CRSAMQGya5ucx/+XCJEV52xufh1X53E3J4m81EzDvni347fH0ptJyhUXT7IsXztN -whTKlhlODV2Ic78/uVh5xoA54pSZF+SXzo8OzqTUEhfUjPAWeRUi1vwquYYu02tI -RrSQfEytR+/CBWHgKZjk+5YsggD0o5CzTzgey5tYdeR+i6o+yweyndVtaqA8AXcB -tG1TVch2hjKEt5DMyEJcxYWPscKiP1UvUh4XCklaGxJYXDp9MKiTG2lTnbdmGkyJ -OLpNxKpAHYqWlGM0uX+rwq7pquiJO7LtpCktpgPbjz1esi/WDvVQiVBzSUwVcq0t -m9sTvTWWmAkgyNn/vPUGvIK7LeQxvfeACzWYOCTKgKNBjGdCqQGapY3i2cx5/3I7 -2RaKuyqlxMepV8d9jZ+fIn1sYQb0klJxK94RtZ1PSgE4X5bpVVX5nhEFxnTlT6S9 -tirdArAjEq8i5k9ndnLPz56CAw3bUy4T9aM0qzWClD0A2xhJn53wdrPz7gcHJzKX -3qGSfqrGO1qJlmjey4gQeo0nVOsvVgjehi5mu2oRQzCSnU2gQJVgDiJePr8gEgfB -wlLCUoC6rpqr6zpwH/zVXFI+AdZSfs6/LjHHXN7+73lknhHnul00SazAMB6Yjsd0 -2df3kk/ifbJAbmL/WoRcg4A90HNkLMFSRViPyeHIYk9XEmW24Uuso8GzO1QZpLTp -Fa4k9AnbiGIbnwvAj0NbAwDFGW/ypBCtNAnSCTsLaGzHR0fEvAiOagCOIfqmpXbu ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-128-cfb.pem b/tests/pem/pkcs/rsa-aria-128-cfb.pem deleted file mode 100644 index 501d3931..00000000 --- a/tests/pem/pkcs/rsa-aria-128-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-128-CFB,2CACD00DD5C0671AD3065A1F8559BA90 - -74sBjYKQs7uued+LSGp0nnOLCEnjfXwxA1aDTmKDYC+dtn5CsX6dd0DI0m3FOy+q -zFbPJmslLPo3RH//pDDQhSS5HVKSPBRoh+Pg2Adp20y3Hzjc4kwzlfNkPmf/cH/w -qAvQyLNEA0NAnbpIunMCzs6zsdToCtausQcxr4sPUr4oxSLemJpC5Q5/Y7nVoclz -7jATzs6/c7OJcUUCKjbFbohdLzxFdu+kJ5VQAhDZQRPMWH114BOsMCbuchiZxaFw -+BayhQJUxXc9TcOwBrzOcHTRJXmNsBWZTwrLjcXO+Wo0OZE0s7uTv2jBHWDX4CtC -v8VN/lB/vanMTnRO1VCbFC/G9ghGSgbmiUFmR5XK4dTAlADKAlFnaY6DLuR9eI7g -pe2FF8mUHbc0p7IoZbGm470VYhF483EjtqvRUW6finn+oP9kZxnwZ76DFCXoHwlB -gmbZKPGSDXKI7TVJA4VplKbHAklfZ16fMAIfkbQ6IEf8IbXjgYVv3XYQAz5I1cWl -njgtjZKzhrldjgr4XPXyYFYpeun8qz/6yCDyIzvDxA2ZU8JT7Yl/+6/qAaiSYPxR -t1f1N7P8gHh0eiQ0rEw0TueEi/fN38ETGCArcbsPgRm8s9xjC1zCXUhdDWm5lSyI -6BqUtYLLTMyZjTC2ulmfcEG1jaZNIoIi6Bv2tCfRx8lQBxu3dBR51fg4GzmBs3pa -A+5ejFWr7cNemMbQ9Zsw50Bo+/ePseLP0Gv1bOxAwsa22xDq6/Pr7mwoD5tqoClL -BDAefg7Ojuq3NKkPdyhAQivgZgIk2fgBdItuzyv860ZSbA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-128-cfb1.pem b/tests/pem/pkcs/rsa-aria-128-cfb1.pem deleted file mode 100644 index b3d890c3..00000000 --- a/tests/pem/pkcs/rsa-aria-128-cfb1.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-128-CFB1,5BE32C16538BC64259F7A9F4DE67B585 - -P8m8Xs/fsGxCNhAGl6uNmmVPn1AOBG0PSEosYzS7F3EBYqkYGXCiB/xY81vBqaIm -2m636Va/aTVJyTrVwJIWy7sUtMLjdcnJWsbbq1TAZxDF+ps6BKnDj4Sdb6tQiW7C -8xHImav3+5xax1xQP1trecO3+T5WliMIpt5HumA/8BxXNN0FWhvxCnwcLgi4uJnG -Ki0LubH9dLO4Uo2dbEQJq+PUJumTxhLoAFpXk6DHc07pTdm26Xa4YRmvI66Wko8J -trQu6wB7qLWOXYdi5+NwSvAQ1hRGSUzyAJh/bUJh9Do0foAP2bhmQHcLd4hCIwNp -gixLvqvVUuqg+6tqbYgmTnZGMZcf/Qi0fHSCCI+Py2EZAZrXufvuh+8/R2yiml3F -lhBZzab580yEfuUci/Wu/X1r7bRMBMifz2FUSKqVJ7b7vPWild5Hb5V/39VHuLpu -Txf0KGcLT5ODn/oO0DF0B2v/04Eh3tb0UX5ehhbk3SdiYJFERifV83VZoTSj96vu -rGcazNdY+bRVNUKHb9cnwhU9Ilo2hfGX5sDnnkfcsVSX9ZGawSdtBwOlpWoLPdcV -3BABOP/e2QM4R0u6DJtNu9TO4xGwbBng7G7a+u7fhKZ9fb2boOt/oFdYwYuG+lVb -CscQYl0wji0/wHWOkMD0YhPffnAKFYIzhM5HNjN+yfzQDO9dIJKkzxpRopdDhTJ4 -94cfF0pjauOzl4DmUeF0ZbkwSuulqiofB0ifFgPtT8NpkGySGu72q7RrBqYZtUsF -kzkSsOEQYkNJXJvWCz2kq9HwmcuBlIvwzX6QysgPqQQ6Pg== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-128-cfb8.pem b/tests/pem/pkcs/rsa-aria-128-cfb8.pem deleted file mode 100644 index 76521825..00000000 --- a/tests/pem/pkcs/rsa-aria-128-cfb8.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-128-CFB8,88CBD4BF71D50C592BCD0A6A6B85E928 - -3oZ/8HV97F8q05OFGewJj4uzOK0MnL0bX92onJErzF6Ssq2/9be1p6WPxbelzf8s -mX35kT8qiSNHLETRMgoHBzFBhWApKUhMyS66ZFs/H+5ZU081/yiIGNg19oxaaNkb -QA/ib8HsZaN0ilON67tWkRGtR5XLCRUhTao/KzKAXU/U2Ex9UJUQggVNTIgBocVN -ogKRkhs7yZhZgMJfE/528u4iBuiYDRYX/IsUbAW6S5XgJq1f+qJAFgW1h8DVEhNs -PehsGaW4khlFWMogBfw80GOEATeKenysaax80axITEjOe8r2x4cxPcSsj6o0nsv5 -H+zBofd3KKGp9d1rdPdlRc2QMvI/afRyvHNmo1tAKbHMiMKNj4V4Js+eK5p53u1A -AbnkBwpSBwLQcKMu9Cg0SoMPUkYYJIPCxeQmBDhXyk6dYcZJQQTX6p3d3VvG/MqH -JjNxDlpzThWXX5bweDtlfIf3+FTsAChdV6UY3XUYqQu05cdHUj0YT9oaZga7gFyN -r5CvIhCzQPTSO0DhPau4pVsHphEIOCSWLvLfc3y9zA04t/Qhgf2BnuHXy//UL3sd -h4Lx46FFX4FZU9N27h+JJ8+sz9e5VxH321rL8QSUzkLMBv6OC48I4BLAVPSBBo3M -gTArbkDPDl9LcuKX434/h1toK1CHxTh4Zi69fYDRvCQrYljFiyponMC3SXU+elbe -yzyKup4475FQoTEd1z7uw4UvLDqefpmcWEIQVTx1XKRUql3LToBQP3yLTa5IA5iS -6zn49PJ9ce3HnAL8Ce3wUCPyRepqE4lAIP8udHkirMuKjA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-128-ctr.pem b/tests/pem/pkcs/rsa-aria-128-ctr.pem deleted file mode 100644 index 399c7eb6..00000000 --- a/tests/pem/pkcs/rsa-aria-128-ctr.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-128-CTR,70AC12CC5DE2B0F5FBDBFB790550DE3D - -pi4mrhg3Cm9kSV0ae7iGVEp/Vh+7Rdo7EwTV9IHey8BrZYBtvJnUFLvhwjTwyoSs -mAQ+fwyjQayWn7LEfQ30F9tETerzKkKoeFg34DD6Visof8ZWtVhkzt26j0LsAn8V -kRg/x2w78BlZ6HBoQagKF/UJQ3v1jsmQqPJ3rr4YA3JGmncCtJDsfqj4uhO4X+wV -JCBOdSbE0jnwzmxZWwJxELwm8oInnOTUHV3nKHAtxfodpl5C7Mt8Qljl/FDr1FBB -FU6nM9IksuuSYiHjRCsbe/ba+C8g7dgDF+wGt7wunhE4ZaKgTVnr8yD7E+vVEWeB -Jx5x8I5M2xKkkUsTsZtTEBtNxQwEP1hHpRw+/XPJm4+TzNrgW/pH1ip2Vn5cPlZt -kelwFSnpC3qnUZ7w91wVsyW23OpPzuq1x5Vtc/gF+cJuCt4/NtJuIVrMoykMrXU2 -/TdrIcdmCFu75ZTcRmo2ZftRLCt9VCH8PXas4NjoKGWYtDf/UYiBKIDft5IwJKAQ -OiUYkrpXOLx0I+eXWSSOLXSxKHi8aknOYfxp4oosDmQpJlf4R7mJKtxWPMloqu4w -jUvScQK4HuRq2F7C/H0AAhZO6B0BJeyhg93bL0XFs+g/GbwdqT966kttILspcV1Y -cUoM+32cpN3azofUE/bp/d5Q9jsUUQ1jLmLR4HTopgo5XvO7T516whIrznMb1JZY -u8d50Cv4EFz0XFoaPziY/aPRIHP0iCbQ+LHpy/ODISi2ldjDhP2sjuulMq90Izxh -spywbZzJrd406q2OApWx7XsAFEhbqwIXfUmPBSKetsr0gA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-128-ofb.pem b/tests/pem/pkcs/rsa-aria-128-ofb.pem deleted file mode 100644 index 8f0d26d4..00000000 --- a/tests/pem/pkcs/rsa-aria-128-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-128-OFB,36F3F3C0F7997750960FF93F9E0F7420 - -o2eCulHrodA4CKap2D8eIhN33Dg8t/2d+j2077vC0/fG99LSoasNZXLFD1Tc9t04 -8uWeXM6FuQXnbtAmxlCABmgpbV78+H5jBaVfQtYIUCZ1s5B/YhLhSk1hn6bAlrkb -Ab/sCaHqDy2VAftscHk8i7qGOk0qgFYNO/36TDQWUriQSxihBzVgc3xvxgu9N74X -D7Tl8bQFd7nGapmJPKiBMrH4cFMqB92MVvopPnAsx1TBRSyjxPf+uc3DOsOeXla4 -t9xLH2CXAgisra43vqgf5DDtef2TdsjH064fcdspZccVDcLKxzjPriInYXK5bwMQ -lT1Sw+J6z2GddetboZKDhzEROA/ihxna+SYfYdpgL3rwvkr2I35936Gxl8h+hebF -PEsE0BhiZowhjiMprM/6Ji4orxG2u/VubuW/vZxnG2RBsoSAF+ffN3hXB2B+lw+6 -pcPp8+FC06eHvkDylGcYrHfQGU0JDamhDkw7JiDdfE9n+IoT3GNHpfCzOxU9FxsX -6WpkW9weIgAyX6Q3UvOS+RzANNFw9Nx/52F/b4REv1KsuJyS0SeKfQr6oa0UrvWu -Rdna3u7Z9fNPw3EUe6IDD91co0iJLqVg375Tkd194RScVyGAfqIPS1Mj3tb8JHsA -QRZToK7hi4eLVK7WvVUaXTkj06xdMY/01yb+BtmX3m4fYdnez6h6Aw7cegvh7Sa/ -5IJI7QF3yghXpGkqhSJps01HNM9QNSwrQ2QkK40BG9hx4W1hextnTZicUC/XEuAK -reGbICAf68PC8GYjAnBWCZgQh3hiuFuOxD5uMmchF5jWEw== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-192-cbc.pem b/tests/pem/pkcs/rsa-aria-192-cbc.pem deleted file mode 100644 index b5e4003f..00000000 --- a/tests/pem/pkcs/rsa-aria-192-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-192-CBC,BA7EC51DDD5F82230DA5CA6A86A8A98D - -z9eXALlgsrjAbQ/oonXMxKTDNl8Xgujio5Yk3DqJtqhmKRHMAhESwPzF19FEDBXN -4W7knpCu9BnCkqI0aLCuaX56ABYq+ZZv1AGByLh/BFDTZth8YHccAxx/6tWYnmr1 -5NO+V1oDPY3tARJtd4ZD1fvQx/KZeAWxYuhKeqZbxcslDFZ47Rje7QkYFunHmX7H -F9WZGsh1XGYZ6pYu7BOC3x2wNpQW+tcEKG++bCtbcJwjklReDibX3xx7/791bEHF -6gRNsSIN+dc278iIfERpmQ8ANtowlaeyoLPElHn571EzhG+ZDwdYXCcREI4Pyy12 -6drxU/vRh9DuzFe2GAJtmx2dAN8/7JP/o1qV33MR2XXc6eEHQCIqT3npVn+bwaCO -SNyNW/N6KZQEEt7+wJZ0B49JMl0itBi5Mqosz4rBRNbaIlC0xGcHhyH306WKWguV -kWIi3fwgSb+zQCtSIsm9CPSYKAx69COvUbH7w3m2c5E3hYcdQGn3d9SP+W1TYmlU -K5oMyA5z9W2XUmcg3q6UB1qtmx7NhwnWT4/05vWKDwKvTURYp8dOFVc0OZfFfTt/ -bCAFZ5CwumYI+FMvPgGgjwMu9kTS5/VPQOHul1DumcPVk/rDRaJUtGxvm7XvnDi9 -u3ptnI8IBRqoIoY+FfBK4Dy9BlmkSQ3bencSgU4swmumZI6/PhTQdD1ZGqk4MKQ/ -a9PGd1P8H+4QuVcswPqoyl2XkVWbkdrjYZiiJOu3QnAGnwXU89uGeQ9Qe+hzG2L1 -lcNdpStu1AY+mU9MP6DD1kUMA7zrMg6n8gRs4JQ7XcY9jtjl5TeqZP/6u+XCOZ0D ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-192-cfb.pem b/tests/pem/pkcs/rsa-aria-192-cfb.pem deleted file mode 100644 index 5d1287ad..00000000 --- a/tests/pem/pkcs/rsa-aria-192-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-192-CFB,DCEFAEE0AF6131B664635EF73733478C - -rDzSZcCOkBjpNMKZ7Fg+qS0Ww3MA4+SxXw9IrfqKQGDq6HGBiw4PBLZL9WD4cqXV -BaFQ5wdO7UVzZrEJMCXj9S/AAWhCx02a4/uHGPUYW5Y6NkEgwqdoP8XMa2L86D78 -PCLXD4kaxZR7bmC47eK6XViZL40UVeUavLnFkErle4wDulkadSFwxe8AFimQN4+K -1Z/G7YZGbsiIA5rXaH42Ee89ZsVu77mkTeFABmM45g+TO7HoRGkk7sBHbGkX6wfP -G6cQHhSctrWQrDks1VbkZByWTzHhuGheAVwc+jtGmxje+C/LTKc0vJzu65lyasCS -CK2qTr6dU+BbMvcYjVtqH1+s38DmDxIxKAuYa+QSWSynrk33QJjdQu+4g7Cf9/vJ -7jBonUHT0GKueZL3w02X2p/6yIjmJ2NXM6+sSHQStWQbFEwxXkAzuekPx8fxiC1Y -Jh+OR8NbEOFiTKd6tk8hE8R1g0D+5JaXlA+C4nEYurt8UezkEdU22hFlYuqddLG2 -5hABmuakl1pECnpk4gY6LPUc+JJTsBCJx/NL3EmZXK7MHwoESLhs6NjmD18C4jej -q1Wseblc2G9Bq4uqz4Ta+0IOsBBpD4Ua45JtaCj3yPP+6wd3gFAHwtxjQ+9NPKkS -0887xZgV5K400Tmcv4or7I1B1f8IEUsqtk1qKNytJt0MQzkfB1nrNF0TjpBTtY+d -N7Es4Gk7CNCF3xw07wcLJygSp4KczN+RNOQoo3pjwJPKGafLjgMJ7ugS2FscgGvd -MOwQiPbxa07Yb+xL8pjZohQLWPCWfFPft6hi0TwMwpsNOg== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-192-cfb1.pem b/tests/pem/pkcs/rsa-aria-192-cfb1.pem deleted file mode 100644 index bcc46979..00000000 --- a/tests/pem/pkcs/rsa-aria-192-cfb1.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-192-CFB1,0540E76EA7E8A41210F498629963CECE - -7/gTJ4Ez++VZ+wdIZ6prnMXy8PedJs2gsMbqVtglFwohPfqMfpWknUj5EBX1QazT -NCflkxl/fmCl76zUJfeNUCdDrFfg0RIQUMPRanV7oPs/wNVhJH0ONTwYd85UbtPT -gx3C/S6j5m0hhoJtsL+u/BM3Pu6BkuU4tAI15JVI12k0ubm0z6pohXR29vNrPrif -Ahpp5X2zqTurPC9yjMWQcm5eVsSd1mFubeTohDhpnsrKLQCvq5rdveeyE5MMhZCk -rkz6NOHv3KBjQVKaDpABnOwi0O7kqzdvup1CmNaEd81ian+9d/18fObiG3gRdJz+ -ExgHFDqu/p6WMAtWAuKqWkmhOZ7PS8cln50n9h0cWqaGOtgDaT3La0Hs70bSRqH6 -kZetLaGlLZbOQH6j4CqvjkFcsv2SJDVru0pmhNsQnJxjq/97ssI8BmXFhctBP85M -GvyK5tepfiJiV0XbUjQ3o0ES0fwtP+kOsvCEjXMWQ+gQV3kAMfpbyZOZUiVGvuE/ -XjxHdFL/0Th0j+LhbOEVPRPa5EjGg6kYp+FKgASvjVQnSrKDdz/XONzb9la2k9Mm -xnUtWTrlCNIYlBS3TEzUU2BMpZXGlje8gqOtmQFKfAmxFi0MqpGDT+w2EvXGF302 -AgmGdKkC4lz7t+WC0uQyrwIpq2S2jxaPTXbOwXfnx0/otgFX0FKDGFslGTNaONPf -dcuQZJB2wkq486vy/zjdRXlKmei8LVLWlpxSV8Yd8ew+ZN4kUvpzVkTkJzYRq2ly -LP8FD0xwA0gl/6pPqPvbLCc95WfBZgusG/XGAskJ2FNl5A== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-192-cfb8.pem b/tests/pem/pkcs/rsa-aria-192-cfb8.pem deleted file mode 100644 index 7e082f9d..00000000 --- a/tests/pem/pkcs/rsa-aria-192-cfb8.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-192-CFB8,703281E033037322BA489CF6DAAEBF29 - -oPrXoQ7AffyrRS4qFOGyw2Vjgyp+RYCsdQmBZIIS+WPBa5QyAVDQw0eaaRKAe7wg -BoDUoJeksVCDAxJIq1R9pcZHmoJGFXS8SIoABcE9Hl3MVIqMvzdoLxLnZMU/pcNx -6cHop68cDTpF4853t+tk9jiTRdbvPa+uJI+ntxVIWdTe1WHdzRFgsC//w6D0drbc -7VgBFzhFxy94/I9iYlJudUsEWfRBetveuHqfUc72W+3x26cdUAe1is6/tqVi9LD7 -cQRzYiENeCBch7M6RVNkEqCy56wh+CpmXHV1y4c4aiVqEsKVkXlXaUcIjylelVWp -yY+ZDMa0Z6rFlwHR3d6qYsjREqjPtTrirL+YeD3kXoQM3BLOly63MK22CYI60Kc7 -xu3fA6ABFot7XvJEOIW9hJy94wRSr/ekNokDfzvkv1V9sa11VCYG0zFendfbdLMX -yqInVcSh0U1vS6E/O2Odg37OoVl0TdAaDCx6w7NQUorbyKgTN1yUxgmHTTgAvgMh -nk2Uydh5wSUcBcTbS0d2nidFtuaDmZHyea6k6uea+rQRaksfy0r9yEeHhR2VmDav -ifbZ9hMISnhPZdibNL4T3jBjFpMgX3rVQQQhUPu0alg1465EMVSBgFMeSRj0G6sh -HLtJDo3aUZNCu9jn4IeDCtW3YvRGqnA8QaFyU50dZ0ODKXQX7vo39GFxR9Nd3wLl -Syg+oXQlwV0v/p+QneQgj2PSEBnufG2AMDq+G3qV7uL3aotp+QjLiY5b4Ll2BRU+ -k+Gr2D3FYMP83FhL2H17PmVKDN1rJ+wuElp75+A5SrWLTg== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-192-ctr.pem b/tests/pem/pkcs/rsa-aria-192-ctr.pem deleted file mode 100644 index 3a1220c5..00000000 --- a/tests/pem/pkcs/rsa-aria-192-ctr.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-192-CTR,01CBC64C88FA8A67BBB034B1BE3B7ACD - -cWTtf4fpNcew/IKzv/P6MjV/eFrEL6AL8WET/bglgTq5DovWosVWhJIVtZPtlLrQ -Gg5HH1BsDaw3ilqrsBT70LcBYmh5GyEhm12bSXMUQ7f6oZzW6h20SDsgbhd44GZq -/Rn/D3xz+4qRUj96R6NaIhx4wemAWZ+WydX5PAwgbfq2lY5pqW/94dRedncYLBGJ -y/NbDmVI6ssY5j06Y31Prm83aG2FCCaOvuczOk1D2Je7FrBaJDNpNnwH3VKp3icy -LMKxqnzTlkYnxNJWDLUIqIwQUBeuJD0jqwaGrho3PzkRg6DU9c149S0Ce7HKDA2t -7xoYhd7q0f/mhv6t33o0/fkSAexvjLPDuEaThgb6S+liXABx2M0TIEA3c2pWAROn -bX4xcROF3g/SjSacMPVklaV/hKBK3qKN7Krn68Cxzz5aBghrtk7AdV8N4CyrdwtM -6Dty1djDO3b8AF71nmPN1AuIW5zaLy8dOnqVyE+a1nLmJL9Cdx/MZEC1MzrWulMB -ZOmiPg3hVTyx8qH9BE//6FJ2yWzs4OatkyhmIF1vqRcKMfELOyv8+m6x2A+h97Lq -drcu0vuqiQE4p0dynDP2LTeBKQcJYWD+SdxoOxh+2frJ6QlJER4E824sK3va8Qm/ -+nEdehTNonp3f8SzYGBST9AAWzBtS1NphUIUyIB6yU+SMgaMEtg4IzMXVGvTBsrO -ZauXkuklm87wTEk+uH69j6tu0l6/k5jourVSoOT4SJZT0S2lApTrzTRVuTjXmg2e -g31Wxn7PfNIpKxPUiiNAeQwXbfMJINUSFxkvOTKe1Osd6g== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-192-ofb.pem b/tests/pem/pkcs/rsa-aria-192-ofb.pem deleted file mode 100644 index bedfbe11..00000000 --- a/tests/pem/pkcs/rsa-aria-192-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-192-OFB,1D7BBDB48B438FA5B42D877840745531 - -kAb70nTB6uj+8Kj1ZYQ6JyBxb3spXTapsDW+a+GZ9CERaonpiqHaRct03lWcR7dP -DN6VOvVP1x2l3OEmttlVWVKy00SjXzet1TY0c2VKFwS8yrES3BLZE16ORVaKJObN -e0sJUPDTlciLGwl7dNjtDTJEMnHQvwBrVx871RzawE3EiuWNMVfEjMEQFjxYzX3H -hnRxkn92JTdxDBNAc40skn0zKg0Q9dBSZjuKZQ+XOeQtyjYRwx2RZax+Gk5V9EmW -CdyNPlAAeC7KbaHSvBWrL8lPgRgIhggusgV23SG1AAyelTRUIAws3CmAxMjKYyDq -laOr3xAHrveHnZBRPLYwyrhxS04oMWO4nNO/HbAPheXf+sbRruoOtJdT4KDmTJch -PspuN1ADOG+MoDsHqWUaIRQ12DNtB3EIzjKLQXJgvTA2cRz0aWJCidi4DT5zmvZG -s37eDw5on0hipsoZVbePs1kRggauZ17by0hRmvqRJg8JvQ0VgkIEm+JSiQk9viX4 -H0Nba+KL0bYRue4OCJHzhWNa/Zpz76pVzQxQBt6bUVfdWg+pgWvX7scX/U/kPn0Y -hiC4TD3pTZJFO02uzGt0i1rsUZ0pJ51kDp3oBk7/6P0//QFeSwcsTIkpgkvDS4eG -HK/fCwMPHYYHk9uI/QdXaXhysFnf/dAM/ltpTVjWVv+0GMhEUlnY7eRXMKLcK9ga -aR+TLX3o+BZWglkyF2IFCuDUTwc6fXTlv0TFqMvSvgjH1DgMLVeBiAHSIz0ak73t -dDi4wRYHq+jwMOLpITSoOC9b+K8x2h0jLUhLAkDzncSQ1w== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-256-cbc.pem b/tests/pem/pkcs/rsa-aria-256-cbc.pem deleted file mode 100644 index e5e0fbf1..00000000 --- a/tests/pem/pkcs/rsa-aria-256-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-256-CBC,65AE2886CA6649A6EA4CC9E82CD73B39 - -wVbk5rkIPJv7HpRHA6psb8bXUbOLO6o73DxOw9jNJeuaXFxuGwh3lQclTPPB098B -3BRsuORRoeSEjHBXpMpMfybgmGYRPY2oTDY7JV2QtB9ubUzTkUOhqtXv/B3a7vkA -Jxi3uA7X3W8La0wBFQJWdJKgPvEeV3JaTWmrprtjk60YJeoFbQkKLHAqoJAHwHP2 -kBD+o/9GvDNIAIcWtRQuLRMX1gTs/lw/Ped9iPgJPSzKdu4h+yOJY8ASb+E33Rzb -GSn/eTL1TWQwlFhw94JRG0RCXYslj6IzVYK6i4nFdo+eA+ePrRVjM1zkI7ahWyz5 -N3wVpbW6rbOvX9mIhzqNoCgETL631z6dJu/1ZrnMa1dePHLF5GmIzX4VD1r0VbCI -qUjQdI4iJLtJ7QPKT6LdQ/EoxIdFNBdD4hHhHVcdLC2F9KCTC7ncooW8xm/bCRej -jROEwjIQffCJV0jPgn/l7PlhcFlmJj54OLHqoNo1Ijp5kAbc5mUia6Kdduf50LlD -gMIweQCqsNWgJLAWYWUcWRIhD7mi5R4n1iQjrGeVon5TvUyZ8YCQNe031cfB14c9 -1Lbj7qwPcZ3v15MX5OAlbS2Qjot3k8/a0YElEvffyjcv2PINX3DUX1CxywX2ofRO -CftJF+5tRmFgaUHnvvsNmCeO9kM5A4APAzaHtZPQ5/gyLcrKXHeJUT+Gm6OGUzy+ -+asXbiZMC7gEYTFnhxgfX+5V4LescNSqZNg4WGWMQFugv3s0ky2dkyWXwr8Ngn0k -o+Rqdd0lS1+vdOx6E7PKdXukn9IJXMqy0wfoIHkuYSRL5aTEUf4s0hIlORv8QzKv ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-256-cfb.pem b/tests/pem/pkcs/rsa-aria-256-cfb.pem deleted file mode 100644 index 9743df27..00000000 --- a/tests/pem/pkcs/rsa-aria-256-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-256-CFB,2F31C3EC34318177E3C0F3B56F573666 - -vNS4psbIorG4NIfYEH1e5TVnIg2jPvOGwKXgOTEtXOXTN7dFenizoecfAkd558XL -EbW/ZAiFWyv+jLM1Ur5kx3gD6yM5nfs252p8fDK+eezYMxg64xQ51UAZazeFcpoy -8B8R7nFxyCr97kXLbYB8x2+L9+CQjVuxva9hwPE64h39kieL0jz/JLjJIpz4MCYq -Ju2pECfBzbu9MOI3taeJS6zd+0rS74WniIM5XQNifJkCFM6rytKxhf0KQA02X2Fm -wVC+WmnaK7v9HZrc1cs3u4JjQMLo/m/wMPMMDsQ2LYAeOkFKvUnqrwrjZoXv1NUW -qZq106uOPu+I5gHyDzPhuv7JEAGjw2ON1zP7DGir3xDDbOtyCfJYfu3VBykchMER -kG08LWwYa+cEr/4jUPpiHhu4tZX6iiJKNLxJZNleVinVCrQg8yHBfjgUo0RLKrm4 -QQXKMX2oLaBFwtfD/nAkxbTKSYePU5gavIrqqc9vSvDDknaMJbqOjgcyB5gd6B4N -3xTho/Aknm0q8QoalNzE+89zj8KyqOXMrN4+Czl4TMQlQZygElJaUKWpE4fTEynw -tY90XphfAN213hZnoBiqmV6ZOTSm/sxYZKv9phPTYVbniLJEn0d0KyVO/+XCYGhn -tnf358HL6Yj163Ucpa8n+aNna2vcJTlawedXaFr1+hzLCKQHYIOOgrK/kUCA9Fwb -dGQglvh69KsEX44ft7jXx31HqrJ1yAsVoj9rtrlBGhbrH2pmD9VpDjV3inbwGTrs -WJudMJGqLlGvhogpdWwSqIaPYlEZROVb/0WdpoWvV5RYUQ== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-256-cfb1.pem b/tests/pem/pkcs/rsa-aria-256-cfb1.pem deleted file mode 100644 index db7bd4aa..00000000 --- a/tests/pem/pkcs/rsa-aria-256-cfb1.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-256-CFB1,A570DFEDFC825F9F2688FCAAB3239432 - -9lUZCiEZuPPFXgNj6sn9eupe34xZRp75CwB5XnWF5satIlXHVZrfg9HheIm/00TE -iuzVIVaoA7wjqLbzQRjiZ5WPFUThaGf3RlkIDiSD/ckWGzf58y36fbcGQCGcP92a -ZyAS1jqSiozNa3Bl9yhapuL1VrLX4+ZDjgWV+AA/3XDjdGVm/U6dhSzqn7AY0LGH -vuD1mhSx1POw+UnF6wsXN7eSh9lQvS8ZumakgwPVU8U62XrRHLdyDzEvCP1isJHV -uLpRJyLQtV5BESLI5snuX2c7T+/dVw+S5X9+htgUYm7Zk071Xf+EMr6kNHs4VFLZ -XioR+/kReXXmmFPSLHMOwbxF+MJjgcM3vsw6d9IUOILuMtwz8Qn2kq6yCSBnzEcM -e/GhRe2+fTuHBTEptoQZr2BwRmotiSTxVEhbhtUfLvXRuEPJaxDoAJ36lC7zrJbH -WuwhOfIzroHoa+DiA76DiYRVjdFqfqxrPMrmRDKLDk9+tU19sqTUB4hXUaTVnxwn -sG2kvDBvU5/Nnpa2YqNFq/p5DVSz/vieEisBjcGvRbzMkpzBy+hGz3Bp5iard+GU -9LfeTalctevrLL+yPNmBZ3zxh8ICGXd2o6OzUW/hIS3A+8Ai9AiAQMumso489++8 -mPOZ90L3DkkUOSykUQHoB8kKAR7Mo3bMq4ci6wpbKHxcDs1UU7Gs7Hnnm2kz+UWy -qq0kOmq9ZW4EQ8DJL6Mrwt/yPniUopPp/AuTvg5kZ5epCBFsvgn+sYAEr2qpNeLT -Rg8lYhxJQH13R8vO7sEYMFLgvvrIOGx0MYUpwXZ0wT0ZHA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-256-cfb8.pem b/tests/pem/pkcs/rsa-aria-256-cfb8.pem deleted file mode 100644 index 9fdc3011..00000000 --- a/tests/pem/pkcs/rsa-aria-256-cfb8.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-256-CFB8,17C254E31F17EFEB81A06A97AD26C5D7 - -asUojDs9kmf05yEgPIB9c18hTjlqupLeqed7F/zK4gtZnQY3a6l1KOXORaHIZrmh -KlwdGcsZfS1/jfDeX5uCE1Lr0Mf+7z5oSR6xjSzjmDWhANJynV0VWy8dFUUVUYT7 -bKxWMXzqeEkt02T4HjBBs0JLEDCpQ0jBL9z8X/YbF0umlckR/kXSm6W+hOVUhg0z -tegmdUqYMRwJpP6CtWXUydpp9zVfdaS5IkItfkldJO+TtiuCZ68fFcXdYeBCYbyh -CaSH5dT275akoxBO0l6XEVrZPidiKU0pvMUPMAYfRNBvF5STLvWge2Uby4QLfOXt -Ry9psrwVVTOZqVd5IFzXS2+I0naNbeo+TbB+Ob43Vnq1O3uLFWwRh/gAyvL08ym1 -IcBhgjy+Zk+yNLgo1QgmOBqrKJm/8PkB0c1FxZ9c48jdCcCXnTWQwHcd8eyBOlMM -QCaFM9+lL7QR72D/DbkUbkdWV/0j/tk8ERVaTcWnmskOB9+1fo/PIm2I1r/cMGwQ -QRY0trKuW2avjKPqYrgiltowvM2zETRJDChl4LRvp11C1UzTwLFv98KpjC5ub5Ul -iH7aqB0UId7qmEUXNyQcq3WHax72Cc+WCHpJjpUVuLbJELnoxdrrf1i6+DGjr18M -qg5S78Wdj5Ic8uNQR6Ep7vF9RqMQT9g5Jv/A+d8XUZLg7ChpM3ixczlSHmTijVWo -znc73SoMdfxAYExZdicU4CV5eSBoPThhf7KhYhvOy0nv29L97dKWDfLTTetSfaWa -qLrOUJJnrjib4XO5qIE5z/x/M3+eOL/qdBe2X/Qx8d1ZLA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-256-ctr.pem b/tests/pem/pkcs/rsa-aria-256-ctr.pem deleted file mode 100644 index da5fcd0b..00000000 --- a/tests/pem/pkcs/rsa-aria-256-ctr.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-256-CTR,AE393C1AA3678350154D9BF7B6CEDA53 - -Nm+j1abO5IDUDCyhI8ogLxr5fXUxhBys/vNO/88qcXbGqA7fNcqVqFEtYdftPASi -w3G18VmC5Yk9O+aMz9gEb+UemxuQzpJVvR+9iBXvkvvjAKGLXZMrCk5ugpQ8QLSi -qE7sQahRwvxj/e+eoRyHSAa17IIjH3jG1xFht7X1Qbuy/ZZEqNYGdasx59zCcrSm -4JmFAGToj88fjR5lQaBk3ADifuHyNbW4CW/Jj6T/S3224YyRtEZYTGxlc0iqgcN+ -2ExuDAEyYSGgaecTEbxtKa+RMGP6K6CKsgKiLHSDvZUElTeQxu8aYUV7y7lRtbUc -Ylbm1nOtOqZi9SrwSaK2cRN0Dw3ZtEJciak6UqFg0vfZ00Lvft6uRpEyJfoxMElI -jGjV75LTFl00SMXs+UFxox3J3NvVQQR+jnbgwJAqc8yF4ZXv6Ptl7vLWMDCJnEN8 -nHvJiQDKE2crvdA5B69HjtPmd4Txd8lBdPrw6eUCHyLwNeaB0NnvN2wuH1lAQzw0 -YdKkF8TWUCSRNza2iJe9sOzVg8+Lci8IyJTl6F++UqObjYIXossh5qCvxfIzpMmT -NzXZfD3BGeqP49BAVCIKI0AULu9c5c5n0enB0Pk97vJDtj1xKpQQKqyAGFnRjglG -hcS5iagBvHUXz6FL0BlDqvpPURBRWNUu+NwXVBFw88E6Xz/DEXUvzkDnUGK8m/Q3 -iaBt9bCVU5kQvr/jVTlYpHXeg7cj52A588sQ1SJ/y44M0oOyjj6zfOFiY589qwm+ -N1YJSEdDKs7QOKwF78qVIPqd5SeDDn/IzAgIjTfAK8yiIA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-aria-256-ofb.pem b/tests/pem/pkcs/rsa-aria-256-ofb.pem deleted file mode 100644 index d2127548..00000000 --- a/tests/pem/pkcs/rsa-aria-256-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ARIA-256-OFB,6798508A2C71D072059504ACABCCB42D - -OUmKOC1QKC2ZdE7+1kGr0Vn+uvEvAs+KJAlmUlrOYOo5I9HVDlPd1Es1MQgr3i2B -ZsIstvYZhDNjvo4bZ/mgYiul9xISo4SRGfHIIIIhhSVjVJXHBy2ig11/yA9A5V5E -3AlRSRZSTJSgJd7Qonwe+RXCJYmdDnh0jTFFls6JlC/qxYaZiMmzxZQDpW8natkM -Bf0wPzIxX43uNv2VGfWTRwLKedS09GvInS/fxZ3Ehznv2/ihBtMISsVuXm2i3C2l -8qBw1suZ+fTZbFLj+gunxiTfd3LYxpR+1bynKPpJXcVZwhcHoLfbD09yPvlsqq77 -IoZeICkjW4WA2hi1UG5z6rYS2V9FcsPNTlmARWKMHH0rEPmVmBQ9qOxUzLZRud1q -1yPdy47PSneqC33X01XctJEPhoba+32rKBUEowHRTQY4EvbOxgjTNNtRCnw/FX3a -sbmRJHwIv2jRCOeE+8XlSSnmIVu2CfqkJoKsyrellRcRJtE+yYII9zjzsHA5DQAd -FeKpBQdwhKC+Q7uFcqNniBskJaboguUP0LRL7NQKDQDDaxhUrSay6CMNxoJ8TE6K -MP/Cdl/Na0GLRnxHW5+GmydAIpu+oqhxhICdfzgMzKaE1XFPf31vupTfmRRfQGC0 -MoVT4nEt/+GKMc8gL5LgOICSQpQkfnLRxftXm8IVYSLB+EyWMjwEGgSTpaLRfiSk -wvJA1wV/yxGWHQPhVGTgSMFaPMoBm/qSzRDcEqbgi5Y/HfRui7ppOVGnZQ7DVGvv -JuN21f3cVgZxq9Jw7WjpNGH7MURotxSglHkqLQzS4D1Fyw== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-bf-cbc.pem b/tests/pem/pkcs/rsa-bf-cbc.pem deleted file mode 100644 index f61fdbd6..00000000 --- a/tests/pem/pkcs/rsa-bf-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: BF-CBC,A2E3F3B8C60F1B85 - -aCYCwYq5jG18juJP4JVrMg2+Wq6Crj/wI406D2c5W9TVe8siHY32uAbz6o59mjnE -cZTmm9CDXdKtPPEfdeU6Auh/ys6PFgQqCwTlZkiDvzTUxK4E/64feV9MfwRj9w9E -2xLPIUwS4LsC0CmJK5nk1tObvk/nOEzSieD+kq5oE50mAuMbUnBTCiAZt0/82oEg -3ASkenCuwk2NgHQXp19PCd6A6L1tDmP0AbMLz1Oe7SXUCboFh3RMaJfg9S8Kv0nP -lPty/okSQIOku5Ja0C5TXFsEXzmzn28Qu261H2OHoy56hyJmulaQCu6yNjrbHL0j -JnuE8mnSyHqSEq+2/R2VEof0uVfNUO7It93ODJDoFRqs219R9P3JEb46PttIJG5A -imutE6iASRdwq9Y0/UgPK1d7nSnWjG5bqBgzkomA2kkJXQave72LvnJ0zwgOSor1 -md3GifM7YW0VeCnW8Lh33/GI+qUPvhPlrR0fjDfYMEKLkNE5aI/iYcxa7/jR5nP5 -WbxLLQUPQ93kbcPQ5+2lBWxilqqpmFXhWpi1W4triT81EDFH9/szHTnaZ0nwja3K -/AUXMccrgTSYaD4pXPY1BXz9fn8ok/Rn0TbdqobnggVbjFoSvehWtyfsq+3lNetA -b7ENuQaUKxAFVuKOSrXzanvFFSs7l+TIglJXxu6Zerbn0/UH/LlGshrkLNwhv+ba -Whg77NM2jFs31WYyCiPzH1RuxQkdGe6rnm+aSeEYc0g9dHnCDApImChEuiOEA3wt -YjWyRgLjQPQGgEl6dfeBpwSzx7dXC8Bhvv3IZY58lvgTxArFWWATVA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-bf-cfb.pem b/tests/pem/pkcs/rsa-bf-cfb.pem deleted file mode 100644 index fd2e0c56..00000000 --- a/tests/pem/pkcs/rsa-bf-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: BF-CFB,A1DD43A6698F0FDC - -mZV1GprXm3ZfUX3gSKoKrKf6OIfx3PuYoccsJQH1L+ftFpEpfFGMuPqG/6hLKPCg -Q4TYkL8HmP/b8RCTbGK0o3YsD5PdTygAsYP0VVbCmhzalcdUufI5ODeTZik/HF4S -3cszCR89IWEg1XK/ffa/0apB6nKAjzDTCVYUydGFwQ8gcwVKCz8gZVEc7Xk5XZJT -N9QWVLmrw/HGQfaImwpfMUi3hbhKGIYvQy3A40Ky4673IqcaTea99en4VeuAMrP5 -LjedSDu+tr8JB5XsjJj8bzCEyhMwbJyYiFBmRG421vocGResEwLhMLxc0VWIqHUN -KxGzlzQZPMIoF3bLOybtOYknxfIStRVuPhbdWZWOWPr+qe9NB+A1BESTM1huTVHp -ofgz1hggJtYrJqu5qKpURFIsRo0pOGadqbjYKV7ZrEBEmZsZXWbzWp69bVGbFwAj -ba4GExErLZBjwSvYXzusGgLv0HP4cECFbEOKGLIEHWm9pLXWFTTJBu2aSPp9P5RC -adrCDgb0zo9JtfQ/P8Bhk3EYd76GpMnJ/VIL3ID8IV7kD/EVOsGPSu1AtX/Zd/1y -BieSNSTL+WEil8YjzZ+Ijh75WYeFtQDn2x1LkpDDwFtZVXBjB4txGvHUQgwOcj6K -26Eng4rZtdDP3yu9txnNvrLVskBw823cuB9w91beq8Nzdk9A7QWdcNSH07evTUpQ -7mpWJQyU54TwG5Avsz//ErfpiwEIqXCtUWH5ROlCmyMboHDmiizsFdFJG1X72/fE -1oTOfDUbGb6aIAZQBD6axopqAPsIshHHR6CKPcMDMRvUww== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-bf-ofb.pem b/tests/pem/pkcs/rsa-bf-ofb.pem deleted file mode 100644 index 6a45d1ba..00000000 --- a/tests/pem/pkcs/rsa-bf-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: BF-OFB,6FF31D757E4299BA - -YSeBBk0kGRtQHi71/k7+QQCJXKPX05derG0Y9qqKonereIBEp4ef8OVbghyx1JoC -bBj3wOZbaiQUCvV2u26kAQjvTALR1Tie6mJTXec+phPczPnbQY0r3r7uB0JLECr5 -sYwSPkdgDOQXLINy55MAjHbpxo7srZOD2OxuUzT5AbNMReflKOlBbyH9GDeFcCN4 -6loM/KrPbpBVsm/ZPdRdKdUerGIVl7IesVQSyF8x3+HCtgenWtIsJxCGXKUsEz36 -iDFdR5vPZ7dInWNnJzq+Ay6Ldz99O8WeTLUwp9SaMn0+grTn2R13d9nP5091YkgS -K6FlQkn9nHkKhJtY21WvRJ+1QWZb8PvPIElYG8AFDzcMjVbG163mC7JD5MTc08GG -jlegCYDnhWkahj4zv3DbELq5Ysiv6MNObDBaXAJQSKNNcdkq6m7Qx+48ehq8+F/d -h188DCR4hMp2aQ/LvGL9m6YEUPAclrC91lIZQG+ohgI+0ih6r+0SYokn6gzQ2Cz5 -1qMB60blEX6U/pgQ00iSluR55499rSS1F1BrBXQ5hjFELnZeMN63+nfquGJQZYa4 -G72ZxnctzTX/P4CyWrmIeYMdP4MayZg+BQGnP9hcY4WlcVHtN/XJnVh9WZu596nO -FMQaDjBK/ll8I2yMZTHKsW5FtDBL5cjv/Qd9DFC+Z0hwvY06Cx5UAMkTwn1g2dBy -lcDpPYHWf0wR91/W34EPdggA8sWnF0+XOk00whQdY9hAQPGT2qvu6LI2COalCG4X -9nJHc6exhTktatfBFn4TcXFk+TKS4+gbFTmB0DHXDLXl3g== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-128-cbc.pem b/tests/pem/pkcs/rsa-camellia-128-cbc.pem deleted file mode 100644 index ffe13297..00000000 --- a/tests/pem/pkcs/rsa-camellia-128-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-128-CBC,94052F5E016AFF7E34BC3F724B0751CE - -UVk8DjmuP7e2Mq9g+QxNGoV6ZRMAFyDZPGCnUbE1kAAzMX7s1iY4jj+aHETeq6Uk -UIixuujCIanDwc6fTZUmhJOEKunAk4UsREa3SCxgqYy02oQxXsRXEwCbn1isI2EN -Fm0WiRvdsS+unuim97A6foCGiMksMNl/9fM2PUG7xl5E4Nj/tiv8ifAQnjAz0Na1 -fCUmDbPo+XJlDR5wmTup9ZEo3GfbF9lxBNsdVY5rW087aZm2Zn3I+mK/iL/9/oMj -kiXLS/kl9b+ahiYSuDKfbQQvM14i3r/XIl3sO81eT4NELTf3FZ/2W5V5tPp2SfFl -S9qtCkoey4r1c7iCB6iPOsvtSBqd8W3a44Z/ZcfYKbxQZpTiywpCz0AZ6TeUrhw6 -FC06tlU8mnwTlozS99ZFGdqiZoU/f4zZnHc12lSOrpUUZ1LPsY8C3a0LxEhBtkUn -/j0xgW6OlYZLqW+j4aOzKuzchCyfm01/x0NwBiT3eUbL8ZcD3dszNeu2S/MR07WJ -JcIh1jTNFrGV/kLNYSQbhw4F18oSbQ+tuS5E7De6BCK75TJtRNRTYHn2GBllN22a -GcOsW2VUNEdaT8/9Tt4Hv+gBM/oYsdIHqtiovcd0gNeJMUdZu5IJ7b3ob7ecbdjB -bDqVXzj/nUm9TjnyAFEk7IhvLV9kh0cWl4wxzIiVquAzBzg34WYj08+JM5QNEMrD -Aw/V03wSLfSKYfB8cuw6p4sH1LaDmMb/fumV1aM6uQWoP749vwKGCw4l8U/8PqNi -E9xiRjoO9ZFSpfEjPjlSVkoGBbXxKb5iyKEmNrP0aP5EqlAaFqftjhvEeOEIZ1+u ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-128-cfb.pem b/tests/pem/pkcs/rsa-camellia-128-cfb.pem deleted file mode 100644 index 9144c833..00000000 --- a/tests/pem/pkcs/rsa-camellia-128-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-128-CFB,0808625D5BD35FB6E9E85ADA0060C9D4 - -0kdNZ22ybhdCrR6wK2Lv5yyB7FOCBxpXqVYn1937l92SelyWWQnPbTBDFJW9Uf8j -EZUw75FI6H/1iVjBrHgWc8oeQxG6E0/vm6/2+PwSpABzRiqfHcgerQT87+aQ9AJo -/v/LhPhYlFgFl4jx0wej/dWs9a1zNxW6ZtNtQGcugOyrVlaNkVtfVl9ADGtpHPJg -vvggNvJuq/7QW5n9bVfVk9DLFqgj4XjRBEnyB3kMRWAPLVgKIGax5gScbH2MTpzB -c9ju3EZ5/EUSvdCjnlFf85ERVlDA1dfoknFqem3BQ+E6nmfTQ3gJFpm79eGA5RNm -K7hggxjXPqH4y2MmyeT5hMSO2sTYpKG3S/OdE4R2S+pC2xxXJvppuSKqeuirgWgf -JSPsJrfNY3VYg83ZWuaVsAjXqujpUGSO/gCx51/YnEcgCKXs0fhRa3madR2ztaTY -/sTPJ81X13yAllxG31ZkTkelxjXqYWLAqjHEhsyMb+oyS9g/w3EmgKbhy2ZI/nP3 -mb6KeVDlyOUXegzlhc6R3xdItBZyiyHWbVh7frj4Nq58Xp3o6Qtu/MixotkqnPaU -DGDUu4D5BRmFizPFag8JGr/vT0co6OxM2XUHdTzuCNXd36pU+rxCLvDPKZrCR7Yn -q/4pz9DzuTa9HrUvjHHe1tX0jNv2VfbJHtHJpBk+mN4nQy42rzPIXJG1i37C/qCV -MDbQcb+slu2QKDj+hZbmUu+4NLyBla4n4lLNszKxpSuxcvhQKCGFk73AaNXy1Stw -+4ojsPGdAnI+5DVBLspoF98Zwfs2YPruEvdh/Owv9ad5JQ== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-128-cfb1.pem b/tests/pem/pkcs/rsa-camellia-128-cfb1.pem deleted file mode 100644 index bdaf7ee4..00000000 --- a/tests/pem/pkcs/rsa-camellia-128-cfb1.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-128-CFB1,5CDE94606F26A3CEE27C797597BE100D - -yShn7gdjh4yv3ge6s84RwF8/j7lahTaba0j3AuzGuVosZZcZLoX5mzzW3kLe6HSA -0MBdPKmbvD1LQWNChOqWwvrnHuS8VyKVHba3u1L14gjwjICw9YNB6ABvyDvaStj0 -UW5CXTTTMRvwaf03ZU6GvFuHFu8qxRehpVJFYoGVqzyfRGnBrEPVWsz7TKmdZgS0 -0yzdoXAFl2Wp8gDgQj/4QU8dhbRrfI8JEdM1a/me3XnrD+NBlpyUAIMXFP9+TyCP -shWXmbUp8fAqPQ8zNAh18u/UW+K2j05YiWcC2U1UNeXM11intUMNx79xJzqWlytA -wfmU4tvHS0GCmEj6J6kkAuHxiSdtj2NeI3T1wPfaoSgjjGfHSv/wQqlpCoNH7pDL -1ofNLXBS8XqjdPz//ufh9w+4PyB3j4ctbPj7nzD4JRk1csLw/vKNSAtAo/+4xO+1 -6BP0DKSkjsC8Y+P1ix4Go9Zr6lsxfvbtY3dwmajeRyLRkSe9j1h0O6sIycSt5+aY -cwyxvbX4eToiEonB8NsVBSFyHmq5BUaNshQ1D3d1p5ppYA0CoCXWPxrEetPVxR8z -JBOEGK/hS/gxaU+DNtQeSNxH2Vr0Zr8XwNOwy7yQaZ2JngqhHtuc9JzmkKbZqSVx -M0k6qiadz7IZyicq++D/UT03deOi64dQHdHl48K7ZG8x5XnRYNt0vy5anpsoTE5a -5haDBav8C00KQJHj+feKtIdfgEbsYQyuufMJipXszUebN58pZAlKqS0ZO3cYMCyd -omEH73CzjUh3uwiEveXgw26X78YBqWHlGbguWguu4+jPgw== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-128-cfb8.pem b/tests/pem/pkcs/rsa-camellia-128-cfb8.pem deleted file mode 100644 index 4b1c166a..00000000 --- a/tests/pem/pkcs/rsa-camellia-128-cfb8.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-128-CFB8,AD99550C04BC36C7895EDBB4CF1E4C4B - -IbCvKqil/QTa935W0p2i3pzo1ZQTAMYeS7kP5UOfBkZ7w744DOP5mQWuoGTblkSl -J781MP+0KE3hVRgrcrRwlBKu0CkyzwXeqqSql9ZPnZXKpkSmQl8naODDq2cdn/5K -3xaL52ot9ySCdY84HgyoIy11sdHdRvgUaTnFsFi64lirHPcyLAFmUdLsFXR1D9Yu -4bP+NqhjZcNJ41eSuVL+9F4QNGd+SZqAdSm1VVAjit7xgBp5ayFzmi36S2/Uc0Bf -BVSI06q/cC21yw68hdnAMHT5XeAhff1myRCGb41joIQH+qZFoBAC56TqKgJHVahR -V0JOGRq9Y8l0ZyOxmbtwdvG38b5Y5HCbb87FtK9xruxyz4juzHGD1MCCTqaFU7Ec -p1E1j73fpw2OwfTCe9pLM17aribXZThjgiykaE0pqkxl4PShvyIM/N6wCXg1yXgx -kgdEtcOdqcJv65M2ljjLB9MpDw3Z6Ntcmnrl4VzVG1Sl/LXn6hj8B/TC/MDv6UGs -Jgv/daG48qMV3XB0MOU0NF/xCjlDq79TDRImJHlzPVxy0RDIgbSR/F2gBsxgikfY -1JCRm+flE/tegmRKnnsv3ewkCW/oUd3LPzVe7reNN7tAf/VctxLcS3N6YU+o0NM0 -pSf/uzXE3Hj2NtPwJlWRRfgr9q7DMzQqyZHt1r05pYHTZuG+Iz0T68eUoJm+N13v -lNREl5QHEZRj4inHhhRSUxdZQ4hZ/8b0sUUpaYrbneQ2UuINzXYOzRxdX7gZin7V -uLdxB+l0cZ4MDNbhH+RaMkSyQmU1cbpGbZKfMrWtD38O6w== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-128-ctr.pem b/tests/pem/pkcs/rsa-camellia-128-ctr.pem deleted file mode 100644 index f7ee63fa..00000000 --- a/tests/pem/pkcs/rsa-camellia-128-ctr.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-128-CTR,87CDF51FDA93F95AA505AD649897EB93 - -BMgD2+OliSyT2Zil46xcWmb422AULCwFSm3YA2TNRiYAwUMQFHAeTh/rBP2nOrGR -s9NDhLQo6YXvfCaZA/WNjffvCX2FQ9uSjJz18/iGmg2RGLo10FHYETpFtKTx6hua -3RqDSSpruOhV0ZGeloEmnLvgMTS3KGk5RKJE89j17NdyYK1YX22dXvr/KtmRvea6 -db0apZJV59eDI5kRLJSM+aGdbPelXCmVhnpJEBW6G53qU5IDmuupCZKnwhh/feZA -luLyRDlEK0+aOZQU0qhU7Mx8Jym11ukVXbKM2MzGB+JN24H+JOefwWIRPAd1hurU -4720UYOJ7mvW/1RLmuYBJDRDePYW6FYrEfhW+Gx5k79EDR8q487CHMxsKa2AlxvD -ug49TioXqHBL5GiDfdJiXYJ8kgGp7WonsC5p08DdxVCoFP6ksQza3iiVs8VH2en2 -+K1OABMkWojvDHdOYpLku1TZ+YxpCdgOZnEif/Ncd5Wp/z+w2RKDLHPeocxSd8Rv -/PoCTChCXemVrlFVO/wAMExmE5S+DcLCKFOuGBZHNdlaRGHpsbvhFyjM/PRU6Q09 -N2Y68b9UgfwVNMMvSCL/H3fNMmbtylQzD0KmSh2Zzpj/o/MSG+eCeK+xErRkuG0Y -PDzo52SHECiV7wPihj5Iku3Iojm69u/Vn7hmnogTLNSSLZxa1OJ3zhLc3n4/IBRN -Xbn8clIAGr/epW7rlTtjaKpN7I0Xj9cMUS4qKa2iiqgiwOpiEVOE6OLdzeJo2LBP -p/ocIIwMDehLo+dkHALGzo2ujWLOmyrD2yXX4YZKEmY9Rw== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-128-ofb.pem b/tests/pem/pkcs/rsa-camellia-128-ofb.pem deleted file mode 100644 index 5a12afa3..00000000 --- a/tests/pem/pkcs/rsa-camellia-128-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-128-OFB,22FA90277FF97D814794E402F3B34894 - -NQD9PUwn2cDOXckZZBoqjvVWku8h4ksBxHUetaYCOwKqQ4j3duyL34s4R65h6tir -w2aX9S6YTjUrZBxEdxNA/ZXlW/Ks9rLu2+JBbfJFPFwf+5hF4ufYKtvyize49fYq -CoYMhRHUslQ26Aw1tSbAmEQ/PnSi+7Rm4vC++ELKIiSYfeYiMnWlruwv1GfgaLxz -A8+UDkUeL1bKwxOEtPkYpqGV7T3cNJG6hcac+MZ+YojqWGdLVVwuIzOfouvd5s5Y -5ri7QrB00noCc0EzqroMvosGRCrr+6OzrnVbZt1423FXasYBuPMzyAOGzFPLbfQH -Biotquz0YO26GbEn2ihSwijruQ1f9yp60YOoGgYSeDlX3TtJUodB++D0RG19ZUEF -U3cIqPQ4EWdAwPNshBSOgBSQknZopQq7M8dY4ctdWrXxzVjKbUBPJjHOsGPg9cs2 -7A9kjaaTGC5jpmKVrJGrGzxwtc13Pt1uCIyQtWoYZ78mv8V65cLeAYf70ntrnaYY -964WkNBuKOcTaEuLOQbGbq9LYYiNTYJ92mzoZwB0ziIz3bcKd91cQyWY1Cpb9/e9 -AwD8jlaqsEv1WN47Es1VFrKbgo84EGudaqVVHhmcbke1inegadV/xGaYM+TqhcZH -u3r66WO0VzmQOy8Df8yCQ+udRTXX77Ky5Q31bKB5FKa6XFxK7MzPW8rGU0ucupH6 -ZcJhbUQ+N1qeck5X5wwuDgxzANz2N0qv1H/lwcU/4GsEAU31E2UMbBMQQOqH+xiv -CFhXY3x34phyg23SrldYXay2h65DSm8bqoGROj6AGaByQg== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-192-cbc.pem b/tests/pem/pkcs/rsa-camellia-192-cbc.pem deleted file mode 100644 index 8be51bef..00000000 --- a/tests/pem/pkcs/rsa-camellia-192-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-192-CBC,1E22C96DA08A146D1F6B137A3F310C4E - -hPZhYCVz0hLPnFPznHhFUkO6bOhAwS+9UXKTnt1K6K4Lb8fec+8xGBCExGM67e60 -XeVkcDoecnK7OHwXhplKJ8y32TdUCjooowVixUseEkKXwJ7IMsxpqdtpe6p9i1SV -Ry2eu7Xle01FByz5FTD3iW9A1e3a2AvDdSMa+o+Beu73F2y4Ii8M6K1mFlQtakDq -xZgxOZZ/Qy2MRnNhDlBl0IzUZ92q0Sh9iUBD+dUgfP2iJw52bb1aOsOm4/xuDlRW -pgk31MMn95Rp51nkc6Q4Zcc4n1cJlZbyG/0C/w65uvP2UxrdSRcEYXJuHmqXZIKk -gYlv8ZKyChV0f0gZqPbWOTCVBg4okaFmAVOwdqffa+SKQwKN9IYzq92gTSS4KJqy -5/70PAoXInM7Uo4mJBjBlQLV442fKIyw/Xitl+MjiH7EY4mMIqHn66SBj0rAB88x -S1G8lFgR4RTGklxeNQ09SkwW3ene3ag/6YJ8VZzvpXZ4iOC0yc2bVTpYFZwyNHGd -iwrMZRTi2hGP06M/zL0MqMNgOEJAQKKd+DeummIwgPSSvQc60MxL1SyUnLk24lq9 -5yMYFImX4c7EED+2d9dtMRNdkT9ZnTcSN/Vtl1pGU7SFSI6VHBhvBXUP2kxiHQqm -CFnKi7goIXzoU4oQM50TilRnW4EWK9drbrJR5ViZLQUbuWjTLKpwCadyxJC1Jd+c -PyQqVGDBesUP6tgt5U++jSsQgvi2ALq1dtYTuO92p5aQ++8YurS2C66JuyEuC98E -jbtX7fVBt7YGE0hy7z04j+TjXP6w/2Y2KLnYyOFfERa1d/neQG+4++HgigPBY8H5 ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-192-cfb.pem b/tests/pem/pkcs/rsa-camellia-192-cfb.pem deleted file mode 100644 index 63c2ef94..00000000 --- a/tests/pem/pkcs/rsa-camellia-192-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-192-CFB,625881A70DC172071E98F5C6B38CCAC4 - -5sK5qRMqGpAYGVRQUwdYhyKcQeLoDhq6Rj6K6/rbgZBUBSXpa3AKNuN1LVnuuZsC -5U+PBBv1VNnO/+oL9hYyOItDwB5X9OKgoI31qf8O+l1LJpcoIIyxaTBR36Y/JcBL -3PXjiBS+Ux+2Q21pTueFjJW1iGoxSIaklXZgRv7bIZXm8+Bc6kcsB9HcYeL3dGfx -0OYHkrF1/3KIu8TgnP7URN0FMB49WS4mWS2yB8FwbbO+nO09Mohbemdp00bSehlr -PjzcNl8KT38oWk5Apase/3AYg3Q5XP5h/sacjUo5B/IBHrS3RbNGYc0yejovvwWx -tyQQls501FTfDcFW+XKRIzcRHjEVLqCECHnq7OTQjawuy06zlUz9H25nGfBZ6EkV -KSCAvk06guE6sREZiG3qOaNrp4v3YJMGjzOhCvy/HAuvUDEuY9nchL90NAhM6HjJ -j0XzOlzpT6J1crjhru9+mIPGg1R3o28M3rPh0Czv3O2lQoQSVpxw+h5+Xeg4Vj3H -taRrBRrUWUFUco8jaXvAoVIFSp65Mlr9g10c0dWVt4o9InxdslkmmEJ2NYqDx4ja -mW6EMu5LW67dXX0PglayQxTnu7E68qAjVMSe1fYfwZ7p1ZVhrq31T2X22IdmAedQ -nGBiMUyAAytr/UzUCrkQKorlAQMJhCLQco+wCs5Tny8kkYXi9fht725hXvX6vhxg -d7dfcKgSrUnYxu0Qcb1L4nQPjPPc6j7rpicVbE+TOyCASdMsKBGwQ6PIvexrImyl -ZGtkoeuEIHIlkbl/u8MFOSCXO7YipoMHrKk+uzdK1Xg+zA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-192-cfb1.pem b/tests/pem/pkcs/rsa-camellia-192-cfb1.pem deleted file mode 100644 index 3c2beb15..00000000 --- a/tests/pem/pkcs/rsa-camellia-192-cfb1.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-192-CFB1,B8298D283C5EF29568B4F1238A4E3090 - -r6AvdtTUBhZKlhsjyj+eZ/GDuTciht2fBPGoIY4cwqdyh8BUrIOLhI5nYCfYTvLe -Ul4dc9A2b2JuwPguCBfV89SGvFEOnAib0Vf7K1VaNy68GccuBWfXyWkeKhMPFmt7 -EepKC3FZ3LvbHx6tWulYfgyr3nyCcwFpSENYgVTP15HkpvPfxCzM6u55khRpTIZv -JMpGglx3bwd46ylhiAOlkeZOA1fc5mlL/det4uL6O0zLUqvgrJtmTcM2Gbazz1+w -R3AVlgTDMOkdmTiVkCeLUWI36TCWubHKarhWKLNGN4G48tj07/+ippGrLSvs0Nfv -Udc+4imOxgWOYG5ZEH9UgbRDaRmZXwDvImaEs7V8/vaGZPEwapRIvKOZV0/KDiwA -5tmhRloVShAENqNsXJzHTPvVcoqzxiuc1Nww4o+Ik9X3w9jWXAmFiIDVyWU4gNwP -FZeorDEpKD3wu+WaLGo6SMANFbx6b8KYXRLxwgCcHHaS3bMHNk11jVRhEUwg9WBE -vYrExeLtwhuKt4SxgUHNd2mtrsS2TjzjUVsoAipSOQtD3XasjV5uSDNg2KDnc/oC -CZ/ROX+IHr0W0CrS+D8KtOAArPef1ciDbxR69QhMJo+MckZcGhre53BgyxCyzN2L -IUxj2AkDpUi9hsK3YPv9BnPPE3rCIiMtgYVnTUaGchs9EV3s5lSe2MDRVGu3rj1h -H1EyqCEPPnmpPP5OXCGpOQCuwgE0mNbYftkeRQ9BBZJrRinHRuo3C/sjWOb2D5Jq -zmEAi/CQZkA1PBi6XhTRaPheYz2TCvURNToTiBIuWDKNrQ== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-192-cfb8.pem b/tests/pem/pkcs/rsa-camellia-192-cfb8.pem deleted file mode 100644 index e258564b..00000000 --- a/tests/pem/pkcs/rsa-camellia-192-cfb8.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-192-CFB8,08DA172F25F18F682007A54E53C45C37 - -inBfkD7OWHVVmQHRs7VklNyt6JdGnLzQvVklqCwelZEj7SOC9uzMaCBOUrJMGiwF -EkQRuMabF8pGed5kCq9JBO30ixKhhomKbVq/CiId4rn860NfL8qwQY7KHRnxKRGs -aBNdl2fpkGJGzr2MdedP81dyba5MS4D6hV6LJQtFcugy9wtuIk/iR6jB+qn26+le -8QKTxLGw999h+OXw4MX/EhMzT/ARGFZEp+xJew6KEYWSHxKkDiKpa7taFsqsWWyZ -JUOLBBU2QCp/pj5Ng4p216kvJdLtx3haxHUEFKBUqry06PRGVH5kL/WQ6Z6keT4w -ZOnU/2xG7WL6saU8LJFEFqjVry1QscKlO3lq2azUmmfEH3V+wN0dYB54aNYJcBYg -iOFURwRgjhAERZxke/lF7yDd20hbnt+rmCIYJpBl0xxpa298fiz266wrWTgI0p6d -LPuA+XOlZYCyLvzx11mClIR60Z2teEHjA51VVNlkmUNGqtd074eyTuLMH7SFOL3t -KApdsLQtEA4haAz/xWN4ORmbJSnbSTwIPq3sG7OQkPSYmvlihnpr6b0k6hAw0u/r -MWPZfV8q3HLEAET7Cn0lvDWn8ya5N4uqSqVSoojezlePimDZmXp/w5SGUlnMvqx0 -8gONwWKfVvUNbn/FNI2dyboQErp8JxaBLkj3qe/+7dlp9g0q3zHirBQVcQ8iHjBd -HXTvOyeU1QAgtVvmzF+02qKB/j2EctsSIqZRqJOEMdZZ07odgxE/icUnMy+1MRjB -y5TAXaBsF29qRi/+YFP/p/JwmmisIxrJn6HDtEtTVZYE2g== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-192-ctr.pem b/tests/pem/pkcs/rsa-camellia-192-ctr.pem deleted file mode 100644 index b76e162d..00000000 --- a/tests/pem/pkcs/rsa-camellia-192-ctr.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-192-CTR,62E35C74BE30FE4769F3185166B5D237 - -cCPHKwYdF148WwKz2SERsqNFS4p5qyJMwyaUWT4OsOoOZRtUm8yesp9cWmDu7zyH -Y4LgDyK0Cll6XRbABwaLF0Vj/3S/tUBd5m45DNqGD1lfH+TNiJmA1/2m0qVojv+q -8gaN70Rbk16wuMLKnCbKQQSwnJxd5UO3scR+DK1XQO8K9ov4SMa8itJ/3iKSRbNt -R3b2+EDsOh1H3s49NUM4b7cZwdWIXwHxE0CupamFrX0/YykGD4IX/J5+rlGrx/FS -pRsJ2lsLR85ZfB1EqJ6s8PS7+tniya1h1vM5FzNlmIGT2OvbTn02xeK2OaY+0aLs -bHRy3jcgSGYUu/5EwZMzs82ipr4GM8h2z3J6UWci2jKUv1ndRboLRAJfa1Y50bJl -LDz/yrKDnyiFz+0I2fWUkiCsZstTxStSMva8fr/0s29DlduC/XUZRusumZMxrIFK -cj5ZH0EkcJa/zQ8NeYD6URx6KyYct8weg6pP8n7BV2V/n935zms8hv3pf+sEbIrI -xOO4eZOzJeHq7pARMzToOjPrQaZSOPh4jcAaFNZgsZlO5fMrhiXCPDjXvdZWOOSB -RSW48Z+U8rOSSVzwWhe6xz0ly+A+NvLNfBDxL+62rxUy/GJtDQR/B7jmlQ6LtCZL -vYsNDpHgAyoUEtKl0B8wAlnRpR51dHGzJap71TtVuMoprI1lPVC2g6xZgBXQ1bmT -nuKf22VKz2sd/IliGguiBp7mmYwQxlnyUs1hwlCftV9GVvXLisqct9LvacB32pBX -CZkKBpXs7231V61dZ/OINOUAUe+c0RTKf9RnQ4KRltUmqA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-192-ofb.pem b/tests/pem/pkcs/rsa-camellia-192-ofb.pem deleted file mode 100644 index fd31df47..00000000 --- a/tests/pem/pkcs/rsa-camellia-192-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-192-OFB,20EE340E8F45AFD605A39206EA647C85 - -2JY2q74uHMaGiloog9f+Uq6ml5L6rm8YLSnw3erhbI5GzQuFdDojSIW0htjd2jnU -GJN+qPN4vSuHYRd03vu2OJwOwsNWiEmTBtaf975wlKM7tNPDiO47Hk95dh6ySFcL -gCxMUBO6xd8h9N4V9tzAtH14pcNdW2gkQE0YISqZE3AYF+jNwZXJl4CmkbuyGXqP -qNSamLTYXrI/7glI7KGCVaAkis5g7g31cmY84PDzRe3WdA97PtGU5zJu7ku7QOC/ -V+jlbiYoOrP1YvQY3y3Swk9Rwiqp3+vos0EAP9b49S6Xp7YADN7uYW15qysfDh91 -oSfgsOsP0U8yi9KSA6PofAYq76C+LrLFNqFzuC2XQcr2xuHD2vQp5G+nC8BRxnIi -eM687gfQHvtktZ2Z8dSGWpKV0MnmJDRp2UQ5jGegTWk/iho3t+fldEjqo3Kh3Z0f -fxNxjKgvudnPuCnYkNknjcXaWojgG8pv5Ly6vQeaedeGN0IRMrqcdv3Eh02OIgUq -0tEPaQN28C7a7mJ+RxtLQxy15xMQZC8Rp48OChCGvOYGidDR8YGUnXU4kwGk0Mix -kOM/4/qF9aLi/3gwLOkSUkYormO69PAiL3MQS77cmDBwHKpu/Kko4tJdxVH2hHKO -eCXHbr7dMQOcHzo1P9VZTujKNlbOPn4ByMunH8TDpBUVde8fG5jg/XgJondVWGTM -qWPT0Jl+1IBFl5SlTzBhXkNL8Z5nimI3Sb8UYykyRaE2d6+e/lXh4t7kes9w4pA8 -1HeGMBt+2MoPHmAgMYZqUUJiWfJIxy4Yr4NSyyYz21sK7A== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-256-cbc.pem b/tests/pem/pkcs/rsa-camellia-256-cbc.pem deleted file mode 100644 index 2a0e5106..00000000 --- a/tests/pem/pkcs/rsa-camellia-256-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-256-CBC,8D2AA51F99BC9D7ADB548EDC14813D4F - -BGwDYb24zW0EFwiuWJnCVDb3wWifiTy5h0nqsAuUiqidl8JT9aGRTeadCjE6w28B -VKlHBXhIlsLWcuRcT8zx03A0HJ7RpZI8PkQSqdyjRDZ5MB3M6Xzy6bNcoUQlbuEm -RjD33jnrMjTV7GzNu4W7hF60Jp5icQd5gffAGDIXo0LHVoZn3+JBdDcLS2UK7XJQ -kTZxxQOwHFYpuzX4kZccNhxim3NDb5uGnmJM5lZDo9O9NHL4kLEMXLATixEfbfw3 -nnsyjCeGaVEVuB4A/6y1/C8ts1SEQd5mVySlYK2c2LEz+oRWZFXxn/007V5KcgdF -wkfQ2Ytak6vmM9lFyogvasg6Ln6csHUbV/xNelnMUTvzWZwQ9cwoaK9nQpHFk20F -FP6HadCD4uQEYMbtRschupXOkwB7nsK65a6rUPDAiUxJAQ+GWlR3aJueFtF1kInF -jN6NCQZUyOy2nNnsvamnUrzmatAPNLYpvI98zNnM1s97ZoLB81dNs79x6x8tEaUi -3PyVqqpglfpLCLHwCd4BLm/zaweaXf/jKgsYEeGglQhFiSmYUN1z3IVXUwXCHAUs -cPUhkXDGZPyf5SSPQ987a+zP4w3xXDzylVw4dwgzCbjODB75oGEpbSy9RDuLQUAY -goLtQ0dCVBBdVBQxsWkVCqtWKG60YkPQDXBk0g4XMSsERDb/INY3VBqjGY1XLnKs -E1CG5vXDU0Oe5Q/3JirFxfbkGUq5feZfICIBRqm/CCQn4BiBtq3nt9CskFTYxhSi -xPm+VuTi++z9hQuv5vWfrBewZcYo4Qb8SPSWfoLx03W5McCL+An/mFP3vYXG+aY4 ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-256-cfb.pem b/tests/pem/pkcs/rsa-camellia-256-cfb.pem deleted file mode 100644 index 269558ec..00000000 --- a/tests/pem/pkcs/rsa-camellia-256-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-256-CFB,D5829150A05DB72A98D8DE4DB46EE72F - -f+eHANkwPjpRYXfh9vT/k/vkFddd6PNDFeqiR+kegXCfPzmKzAq4BaBY3wLWyAI+ -OBkTX6e1V+HjXT15N1pWIOjtdpBHMDCeoJCWE4dUdNg9FsVWOjipnjHSoVlZLbJx -flT7c2OMYuklA+YBVk0/V1/siS9y1zxGZD2hsyKIIdlYVln5SJAv1tIu2qt7BQOM -1xA1MbetuJ9TinwfXerX8Hdnx+XOBa0G6g35EHZ9hDPn7h5D5vY8tfd5H7k0so9U -AdqOdBExYSoghY+3LoiEh87V6bQEOtG178TXYT+QQQQEZwSvwYOKVLreDlTO4Zuq -wVIp2fOiN3VJXIwRgULh5/QEwWtPegHhXLh24UHzCsSyDKmnLSdRaIZQQscfIQeM -n7ms0arKDsVBQ9/wQjsa1DFJC8hPII6j66w6qY3Xj30UwL1QwTz7f6TqPxLk/PiH -nQEm7OJRJzuilfZAh9m2uNb7jQ3OzMrRvf/gbTyfYiNjMDLzVLyFPh4dm7a/ofV9 -bamsflg2uWNgeSkJwYNRuqLp+Una/xLhcPGeRDJeUbgBQCuudJ4LcMOT/Uac5ivf -lajPg6XiU9DWQMHtuJ/QF39m4i26ArNOoyUP1iWUAeThhTX+7D3e6CjYepLC5Mn2 -pSZtZHS55y7yo0ZHSzoYNqL95fDw4oUvvln06/8dsmzNBH3wOgBc4Kl7buJG7h5o -2fDryfsjiPij+/FCo+0ez4LdvZ3fMz9JbdOAGXq5Ha+drhldlQWXytvat4Nxq0wp -pZ5qcZrO2iSa10dJGXnbsfBlq6LtozWqh7ovG8Wj2rS2wQ== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-256-cfb1.pem b/tests/pem/pkcs/rsa-camellia-256-cfb1.pem deleted file mode 100644 index e44cc11a..00000000 --- a/tests/pem/pkcs/rsa-camellia-256-cfb1.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-256-CFB1,CA5AE601415612BF933880E9E72B4C92 - -9iI6iMRbNnWCVYWYI44+dTBnZYuIaPnyRmOyoERHscBcsJQU1EEBLQxnxuZcmSM1 -yjrQokpQYb54JlxY+lzLLmtfnas3eLtUpSHePwqnpqs4D9odeju/pj5pmWFAB2Ug -GqLu33qUnzbBzMAntXVCJwSsOVjTLovCL5ErhN1FqJGxqNqSf4Ht0AXlvnrFRqam -Zc4+hQcMaZT/BLtUHmB9EmoKX94JlTdZy0Gz9+znXhCO3QgGy+VOiCMEfi8jpGmb -IUaf8aPzTzh7DfM+/TRHDKEvSYUW/x1cDDLZrHhecDFQT/IMcfYVtiGEslhdHAq9 -89M4EVIy/bbIgqUxAOP65HHZ8F1cpcRThInWFXvWMRrQso/7/pMwQolxfVYOjZfR -n4JjCX0xjqtTFGfF16CN+AOBul8vinWJa3yXtGInSO35PVte4IxK3EY1/YbgmWzk -mZgxrK59HqalNIc+yFPb7si6CRgygfWE9Vy449pqXAUADzD4RsdSjTFpTMt9zxm2 -M/Ej53AKfqmVdtb36PvphsvxvnwoducR/9adBbB8EJKSYo1cVTPXt+CHXB3th9fd -0pwB0t5JSXGHf1YWaXK2qmMDCXFEtOJVBvnuOdoxJuIyZRW6Z6SBC74twoeJTloG -EbRLnw8qVhITtllp3yiN7H6Y5vO3bIcZqb6ptLxBt492HOo5GdBPROL83vr9sb+E -7Jpf4ryDYBNjxit0UC578/UPYNsDk9Djb9flN9LmdEu7kBZp5nbZIeeeyntk42Zp -2mxUi+KflmR6/Umnv3IpHqYgNifSEJe87WknE86WMmZNVA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-256-cfb8.pem b/tests/pem/pkcs/rsa-camellia-256-cfb8.pem deleted file mode 100644 index 5b5a9013..00000000 --- a/tests/pem/pkcs/rsa-camellia-256-cfb8.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-256-CFB8,5537C1FD001AA3A278D156C48FCBFAD8 - -vUwDIWFnm0CSBKxTtPLUqMB4JDraX7+OeHnu12VfBhjqtcfQHtxSST6vfx9osNg7 -T6Uxae11cHW4CqFbP41JZjdMLJPh8SYQ47IkpQuGEDMRcMzaJHF5KaSzCgs7JiFY -je4NrPq9Sm26PnNBZi4PAs/F5XcBXQ6wR7Pft8mvWsnFA3S1yn3ud0I/8F1kmiK7 -Kk+cFlWOV0PQ7OSsxbTleSqELQvr7x7CMqpteXjYzTInB9R5i9leoogAEsls7O/D -U8TLW7uutCIALV92AIG+EjhpWzwt4UGpRcn3UY5oUs9WUjXCnKdwDrRP3vy2e20+ -Ce5rh81Cizn2rXeXVnDt+IF1QtUbkBUvWgmE3VWkg9bDaIVOk0RjKt6iBxe4gWK2 -peT7Kgaa5udxBD1un3+XhPr8oQi5jRhqOD/6HStQ0bPXGGUcZrlTSlMv34KxklkO -/3qdK1CE3i/CccZgN1uhbPdaRn1Xs+2QS3b+9ZfokkxQVFMrsA/MyMAGqV7dFL/J -MPpVA3MatuxxBoQHzngOjK5+h8xHBisrrPAZAG/VkQBD/8oUlPwClEZH+s5DvAG8 -8v9eoV+kvUcEGAzaqURW37+VSqmmbiy6Jq4YhTl+FoSrerbB9XWO7UOvgNWs6YzG -lFLjw79074VHKrNd4pyD6zefFaZ0+LlLjFdDEb+W/Yfk5+gJvY0+E1OxmsyVzZny -I72sNJq8+m4EgIryAP3SFMElkkC9yuRnxTpTmLsVqmuNH/Oht6HoA00CpE6kQQUT -mFymc5VQI+7ClNIWylZwDflEUXmdioGKg2qxi0v63oVxYQ== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-256-ctr.pem b/tests/pem/pkcs/rsa-camellia-256-ctr.pem deleted file mode 100644 index 1f1624f8..00000000 --- a/tests/pem/pkcs/rsa-camellia-256-ctr.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-256-CTR,BA614E4D3CBD5D006F3A9FDECB43E9F2 - -+C8UEHFN0kD3U9rIJokGJgvpAkEhzEvuI+fQrxyCRItVLUFvXR/T/LnNlfO58quA -COh19f0esntIFEuUoKIHtC+zkp9V6JbCxZOZWWIbs87adHh391IrJ4HVuobZwlJV -Erd9uZxJ0fCj3iaQe7sCJ5H6Dd7X88dDh4gQAYtggWb5/5njExqVINd3k8kj62VB -W4nW1KcE9Zzl2zCBhAyzAcgdP4mHHkNGICRP5bd0xh0J0CCNa9E2Eq7RFv9MuaJW -SqlZb/jqNmPRdaEEkPN6S9PQW7cx3ieyZSrMcqapSqi0R3Qnuug8kh+ugK+nncOy -TLwyJkALFvCfzaPF+Dm50UqYRyCcdHL+MfiDvI2F7XQEhfzcxA7LvP0HsRuRA1F4 -bYdQejOkB7HZovEdsyQO/3hMc+77KJ2X9UlW7NM5ezbdim4CdRe6sHY+vN9/lw7c -k9/yExP3KZ2LhvZROpXM9YyGxc3dYu6PlPARWr7xDXt2G7SxJRPwbHmTIw1z7726 -zj729K8c+p2RJ48/QKKIlRUu8oBRCHzFjNtpaOkV0ph6zCsiVRCtvh5LKI7/FJ/J -MWkgl1sES+V8HKck4VXCXrqbWSJUoMXvjRQKY554P32c3hmVR895OmOTUbKzO6wF -lrAng+ihdp76L3GCXgimZHrmzcqYjUw7eVBlMxaaKUNfL+PIxGGwEx1J9PKXSvw5 -iQoUIuD9WlVYM2UlvAHx5b5WnXzCsQOonROKnRmgLNEkeojpEw/tX+eQHnyLtfWf -riO4UaJeRW3LmBSmho3uv8dvYhuMFnsbjJR3qgOwfFlePQ== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-camellia-256-ofb.pem b/tests/pem/pkcs/rsa-camellia-256-ofb.pem deleted file mode 100644 index 4dbc3035..00000000 --- a/tests/pem/pkcs/rsa-camellia-256-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAMELLIA-256-OFB,68AC9278D459A0FE625854BCC9C9BB73 - -bA9raGY4hnnqsvvSAiQ2xqtgvQ0lna4IRSVEAsyhzNjmFg0Bqo1QMbqjhNYYyDbs -coxQlcH71o1VU2xyZ3Op+FmY00UEZwJhq4jSm/yUcJKZwY6v8vOKGPfUEOf31x5d -K1j7i3li7Zy2s+gPNmvwEsIEhTs0hzvRAI64GgRr3AlE4OoiJbLcTigEQMGWVrns -z/uLdPooeYUHjCF0rO7F2n6vmFvRPodxZ9p1mkTivGbZ0nqrtco7OwvFIFsMDoSj -eWvHNVyfz3Ulkwpd2o/txAO0KPyTPOoYdedGRbLsy61TG5Wq8i5RjtiqTZPXUC5E -b2r3Cs8rfxW3kww4hUW3cb34JtpEUGYnOUzYpXnOELAWaFaQyDlo1iEmug/HhSck -3eClO+tYj0Z4lnCBVNp+6aicpR8CZs/seAWBjWSLpciPCUs07mH9U9SMESHQsvRf -Yq93dTsJ/TwyksH5oJV8cHHqvzW2F5IVQknUe7nj6/VqzTyQpjryvzk7EKjpWNQZ -hFzJrpQBKuLt/apfSAaqTGY3pEbzg4gP0nMY3FdCL5BGftknyhsVAuR5qvC5AQjr -gbpHnJZKFdN1Szhzu5WNTFqCQ90d6do9oe8QOcmc4NNeheC3rrwfn6svwhJes+fA -G2dH4lcCnOcBLUATo7mgjCijMgF1zLkVmYaQ85pRi/75LyzcAk3XweobCXJf9GX5 -AvWU9c5IgdLQUZmYfx8ISyWZZdId1DDuU20MNf8UjeEyaHOGPwsaoKVesl1/xIQg -850vqhlD2gZcCrqsrlGoobYKIf+zWps6FTBubmvoYc1l2w== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-cast5-cbc.pem b/tests/pem/pkcs/rsa-cast5-cbc.pem deleted file mode 100644 index a169ad66..00000000 --- a/tests/pem/pkcs/rsa-cast5-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAST5-CBC,1333844494EA1A4F - -sX7saRVhAgQPnj8aQWyxeqi6XPORizi+iOvXGAbrOnIl4dVflDkgyFrnKeedzfRh -ehAXwCJHJCnc7LWVHaCx7LnSHT3KxOzSaT18kxIpPu8BiuDAiO1Yz9x9BezKaTyH -4GlyE68zdNGHL8qkb0A8nHQig9uSeNDd4OV64MisJJKaulxqQfx+CotVHZchttZX -DCoD3+Qq3MDD8Yw6vkxQe/U2m3K71lenJuaVB0+60+jj4KweUfXT7GJsGKmT4G6l -L+SORqLGl8GcP7fSI/KmyOAcnQONuz854RtIC6el86/LFuC/IYISlAIo5lBhvwBd -pR1+jwyFsBv9wn4x1HiBl2TXQCvjaIviSAvIpQzpP/cbGG+5GszMUroRJgetw64D -dCVbvOxW/hsy08v5W/1zZzvZx3VRJXUmey7sF/OLjrjviTuN3ApEYaLKL9w3HZqf -Uw96GA7LPG+zWzyXdhEahy5IwRnK8N7TC8Um3b+bj/qLAq0PC7wOnzt/wOGV0SaL -jBg3GN8uGJdrunyNPCwq+LDXHVg3MSGI1UOT8mLnqp30fVx5zelD1Dm5qUq+RgPg -NgQW8A4mmrILUbIRYU+Ef+QaWXwmPSj2W6y1+0UBbugXTFE36kuUG2Kg1QIbVbfe -c7RGOYbPpYuvhSUJYXKQdNmKz8Rb4dpDJ16OtlozRLTvzekEyhXVSrSH/NgHZ31N -WNIFlSpdnQfIRgiCW88gQ9iZMwHcjGNlXdwO4KtHG/beKw9An424h51rLKs8eU3j -/e+YenlOjNg7ck3YMDgYg4uwswaBmK6akXTgjDKgcN+jQpZsD31whQ== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-cast5-cfb.pem b/tests/pem/pkcs/rsa-cast5-cfb.pem deleted file mode 100644 index e38c9c2e..00000000 --- a/tests/pem/pkcs/rsa-cast5-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAST5-CFB,D9A10C14570FD7DB - -IgrLkHZq1o5WFKcMR4wYNh11nWLTGuExAGChZ92oLLMnbIdYNN+kQvEzYH6q9eJD -MwzZ1M39ymsY5YzCzloN1r5U5OPvw5Bh6X1i/9zg+mT+TpXeppaZOYnDb5MYHvlV -/qRX0jdImuVTGtArNQaHnvpQVKi1elu1+Uifv+xW53BOUjKzRfV5lQqYeAzZzkAm -Tm+Olsj1RJvDPAE/269Xgm6/PMhLVH4Y35jkHqUh/Fes6JfWNgc4ZjAZH1xZybxA -k2edwsENkwwMfZjYnCjb9Lkw4GO74w6PT2t482A5yWx3BjvvcpRRvKAYExWXGd7P -R2pJXzu7OH+8yRnHp2x5P9OsGKUIoQyzvCvdB9owsVj50HZQ7C3hchmiS2bfOXUm -1IlDH76EjnuLOeDuPOaKMZa5lEge0JDu9wWgMrEfC+t/9xybQMekfTCGfzwz3Dnj -i0fNNqRGSRTPQJ/RhSrBL5IUNdaZvO0+49jdQ29GTnS1/zypPb2tchUwd8N/XK+f -tKJyoDwhgRTttuB6+xepFMgqQUZNa8/NlAS0kyX6UROsiuKjLS6nHBQ+QaS9c6Va -KZWZMMdV7l/NzXWrvF+Zr92QusMPbN7hHAfW5raGGlT0KCno62WpU1MaWszYS77P -uW0ndVlbOQYE3PnTe6hyHU0zlbSNb3DIpJ2B7gwhAwh/xk2Wl7b8pifBQMTYc+bU -HJLORpuFrNS9oCOBA5V27wfwkVXk7m7X1eZvqS9IypRz/aNvWIHkZyEgEyGN16/x -VriluGDqIQOPiS9RF88SfRFtmqczcB55e+gVmptoYNQcRw== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-cast5-ofb.pem b/tests/pem/pkcs/rsa-cast5-ofb.pem deleted file mode 100644 index aecaf9e1..00000000 --- a/tests/pem/pkcs/rsa-cast5-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: CAST5-OFB,5DDA6D06E3E7B3AF - -j5nKw8XtGUSba7pObNE2hiOpqJAblYVtNp6LwgssM27FU8iOZL1b3KKt6KxZD/Zw -cD0if7jta5pRP8javi8ceeQcnwhVYY+Iop0+LLhNMPWYnjrJsBgjYNrFcPMrZXQE -le3TaXgprSPPS0eBxO0MUXxnVHbLK+kMKdzRCl6o15TY8ALrdlWqThrnP03t8yN2 -k0FBBLxvNh41n4NQOwyP81NxKR9EksClDFBh8AckE1skvpjGbqXfcjaREwgKXbxo -NInk0M21ckyAWoiD8WZfwZPJxaC4Wmulb2s49yoD9ps+zzmYTod0oLFbgXPrj6Mc -QyXhtBfwq/nvVN15DkKE7KCeveBh5ZkDQsQaZtGMmDm4IfLQzQ83wV7BgOe1n19J -FUnWSUVs6ftq9Cm5QiHxQGTX5D/m89QJEDhmTX7uLQR7+0RgXQ+6a2on4nEGnNra -x5q50TdOvg93JP1z9K4PlVpvcXbEqqCkdiOtYlyVeLjVaulBUJB7Tw2xgs/bASla -xjJq7fma7LG8NM6adX3+zm80Rq+5UopwfJqov+NwjNXTwNaokdANbL8FiUJBvRur -jn7YCQENe3+1N6EamE9xBt3RElp/UWu37nlX3FSWhtC/ipjc2x2HClf3LzZlv4G/ -NqBLMAAEPIE6Kb7+EIhaxhHQ7otPy0BvVCiPmKeS9ZoMcdwmqJPsLR7ayCvtuETy -ew4TPVGyuomAo3uS96t9G2j6V1ufLKnTVw0gjwQzu4iQtgM8jOfeec9x+96hXcGq -MVf+tLo24RRkmpj+TS3yrw6p/Yl3fdLUQDGj/ZdNlGG8GQ== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-chacha20.pem b/tests/pem/pkcs/rsa-chacha20.pem deleted file mode 100644 index ad6f6d23..00000000 --- a/tests/pem/pkcs/rsa-chacha20.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: ChaCha20,76D5D46424252459EF8D96B1119F49F3 - -joUj0jac3xH3O69VFpuogUKCf3neWW0AX43N6eJJQsPUXwC7TZ1TgJOUF/LZa6gl -i/5yAGOjovMyUGhVZVlxEQusYyOtiI8lol0AaEv1n+nvMHxn6px93+9DHEDD6XqV -c8e4mo/1aSbTH19sozD2Tt9xwUAMXpVEu8b9dts+lXE5MXAfwpok2W+kLLHL+5+8 -63pRot7CzIMOTY+Z4C5KtRI6Pgw9fmGDx0IC6CuAjsg2pzeLDngDIVcdDlfelHfy -KhpDnPUZeY+fQLqTDjllZa7l6rjjW9r7uAtOfpPkbV5e9+bMjhkCnrn5OUqlz0KA -2rC24wOnfQ5r3ILpZTkIx19baPr/mShz9Grb2+0+aJOEx3Vifk+h2q2igVut0Hzn -UHJzmreg8BXVEyZv5UcNDIfHmFwKnZQAdGhbbNSfHllFgorZ4DOn7Mcc2wR7m4Jh -v1Tkdjb4VtqOF5zTP2TbIGU1y8Umi+eXNtXUK6whAFPVlFhDrFfHpn1YBIsu9kcI -UjgY+VIcT8Jj7TrXYMPY8P59uXfta+07X+pkT4xkDbr6qjYwslllmPAMRbhS7xNM -8+y0QTeB5Z4txEywwjkFn67kXwnJj3lYNS0xZFsjCz3+6Sq75TwpMKN91CTK2cG3 -swT2CGHUk+l/ypec/5QpCdFS9N7MhAOZEJpmX2W/hnarYWI8UmohrqRtz1duM9QJ -PzLi3cgPzeN2Q7e70GDJ3x3JO6BObqXCtlmEdCIwmrPY1HZ1fgTwDJg/SYfnttl2 -3WmERtFppmbvtUBb+dahnQQdVU/Jw/t9WubmJF7VeHayPw== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-des-cbc.pem b/tests/pem/pkcs/rsa-des-cbc.pem deleted file mode 100644 index 78c5d985..00000000 --- a/tests/pem/pkcs/rsa-des-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-CBC,DA8680AB93BE83A6 - -2c9R3NnVdmpJzxxm5es5QvX3vi0Du5e+QMSPHm0NRIsTRi4MQSm1GEq13J8SXOEU -UJ8zEYfZYQFcnqnvyg31yLYNBNLXdv8DRqIC8JQoGp19BY+sxojTMiG+Ac0CftWP -WGthPPaD73Gb/26YULMFfph4jl4RxjtnAN45WmajVRXWQtqdDFdnzJqLgDGKnrWf -vf9Im5YZcBqmEeEipdG6WUBIjbdAz5QATobo7zuxztbIJL+/r5PfidT2yyahgFLA -DPkoWggfO6aXorYO1o58pUsPjJDRz9ID/rH8ibkvrVKF8NchlyP81CneL9DTV//i -ZSwv3fcuZObDREPNqh5Rr4wJ1xcsqHh4KmUgnTcaU24kl8w6/v10FSVTS5bT9ces -TPkPL2GeqT9c+XKztyWUSlSheji4vS6YfjcXbGyNwMZ+2DBy6XzgZOYXj5fQrPG2 -ioKZYwrpUQuCYRLpdcghej2owKlwxE4A7MB+APZHaYP9ItwD6BD5YZHncXOa4XUU -87+e26FbFq3joI+2qWLy9+Nnvbh1M6RwP+zcDedhR+S5lh/SYlODZitlp/l2Re9N -IaRwbQdS5vqHKIYOkMELNK1Rty6G7fFDwevrI20mnb3mcwpOOtDqLbsJrNjVjvdl -Nn3QIeh4IE1qa0opnncOezJzNIniypLiS0o2MFmFSIhcwHTqBk6A8bAuQf4cUNvA -yGqvXDQdY0LPYMIqZe4hcVIq+qsUSWSjhPw6LEXeQ6u0q7CPOHo7DDrVL9ui5gKw -hf5g3fMe2ixrfTPbX2h/Le6Rxmj3hQD4L94qeYrcVqS8NOsypp/IZw== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-des-cfb.pem b/tests/pem/pkcs/rsa-des-cfb.pem deleted file mode 100644 index 59c70757..00000000 --- a/tests/pem/pkcs/rsa-des-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-CFB,376CF2DFB180933E - -xsTzYGzuTb8ZXsuNaQ9LHDkHLDRu9WdpQWzfb7BHqmjZppteaQGaULfdEMGvgxW/ -RhE9n41jMFanAHpWXmhfAYwnnEVW2Voy3TE4EXKTjRr0gWIHeplb25GOsnZipOgB -uT6x8GzdX02/xHpDMzDJXy3vuAiMLucy7dUD0bQgj7+c3elYTLRRUOH1SEXg7qRp -VIcYg4xAvVmmOCzX6Qg6jB/gnJNyu2LgfEhYQFt+uKi+STzbuCPS+Wms7wX6w8gG -Ve6Kjc/sr6EYjypk99j6wblJds0FwmXfwwKyOAjz+M6DTPxvYZ73hhsRjpOJmiW0 -Y3hqPoK6O5U9Zq7ZwkmsTezRASHv/OnJkNSjsWTiWqXYdgn9cfGhtiK1ed8jc4BU -KCAJfR0Xq3MJMoxi3X3NeBuaUXaFus+02scF8DwEaF508lxbRyqGng0xXLGnDznC -UCLdiq2IQyUQQxq05bNHXcbNqC65vrA1wVqVBRztI+jBLy8lDhMsV5PnFxM++c1u -XbNTKaJ7UczgX7/Digwpx55eyUQVpNU3hwuLW39sYysZchnEnUCP9RikyU8A3KUS -to4NwK9RtAtIfk6AYeKoDtTHX5ErHcBbUmQGArpsy/pyunfhNE5G9VPPa0QjnihU -2nQII/EGeNB4JN+/qY8mQRr9rYvIl/ecnkM8wSFN4RIsgV7tUQwKMZTvcAln6wUd -agdAkVr+uOdbPtsAiZ6lb87jGok2oo86dwJeLfTPoCrKblN/aCA6LB7jAU277xh+ -A1yPdRSvQp1R7f2hJXvpspYaozyxum2qAQcsmqs5Rtq04Q== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-des-cfb1.pem b/tests/pem/pkcs/rsa-des-cfb1.pem deleted file mode 100644 index ff6f54f3..00000000 --- a/tests/pem/pkcs/rsa-des-cfb1.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-CFB1,6293609157F95999 - -oZByTXPct/RlUsozirjTviYda7DTEWSKD9TmuJ4wWKtk/mUnvWUXocUXlVB3DLQj -9JQiv2G5asaeKnJUI8LlKURctZ68n3uRfUX69izEGhawsbFqVujw9EyVM4/RwUf+ -vfUKThsgyBRGWltqQ/M5ntURKMDteOpwk+3legOYDjj+4qdKidggH1AK0qeHXdvq -LFhf+pxYk+uqhMpF+zI83iQW29KA5ogo3qdy/xabnRyiLhMuzEa9i51pJGL82I4z -jzWy/ntcV7+ok1VCPYwBLO8Kys7qs/awS4cDb9sd+Bv7xKBdTIJeqJv6cjtC0HZB -k893z5Jt5KOPzMWV6QsYjEAh59ov/2UXQTfaSLZcVA1fGdy1mNV4UjVfyOVhhesC -jrktiBa5k2TJK7Y42L9YVTNPgPOjV2/eeyCWZmvIJcn7n69NyFLYBdq6Cmm1Eys0 -EFDpVv7JOVFha1S0xZlJ79SAroaa+hSgltIblxbS2MyGLCCf3z2fZ4knkRC2a42e -LOfcPx9enLqFUXOUtckwRhG6As07u8waavRfFI7LVQfgEcVHBtK2K5dd2trguJ7f -WA92CWqE+yRvzz2hUS63u87u67nsZSLrqT9Dc4az50A12oQk6qwxFpMHTyo2joRA -T7vI8GLdtk43AGYceKZwhwTTFLwPa7caX5Kq4L3TPaU9B9tvriOqNFwqlLOC2sd6 -xhqF8OBdN76uapL1GMbpAxEp/cbFXj8hzbKppTnGsGyZU6wqqCUraETNFjkNX2YB -xLKfIDCwvNWFK/8qCO0L0XHaG5Y2sDX/Djit1cDhqtDD6Q== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-des-cfb8.pem b/tests/pem/pkcs/rsa-des-cfb8.pem deleted file mode 100644 index 23c58dc2..00000000 --- a/tests/pem/pkcs/rsa-des-cfb8.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-CFB8,D403C0C1F32C3152 - -vq1T+cbqR7fdU7qVO3pdk8mVuIJXsdfDx40me5Y20QBHGjrKN62YIgguEGRaGxwZ -mvAa5f4juiQ+T+5a7krNqmRbJcgTo1egWPoMR2iPsdrrMZbLRjcPuyXa+Moon3XY -Xg3OC+bOcn4NRPsnfm99J5aXzV2Qz92CU9eIsQbEgmtJoJRAcjElt50b2vAFC3qP -4WlyeYHH/0LD02yvWlCzOdgnvVAV1dvN6gTdpAYs9sl0MdSasHVl0M4cnR1yBnNh -qzNHV6tzijjrloFG+GNSEMDWY5dV+OFIA2lqfX0EQYbACbPHypEQ/ZK/SyFf7L84 -0G6zcfP6CktYDTxG1MJkXc69LWiO1O9/Voyu40eDruUjxpMJVCSIlQwI3mfNQA67 -BLe5TMku/+Xf0d/YcDp9pNU7/+TV9yJJCzxtuAp1qBa5XVCTMD87jQ5ZMCvPBGdz -i/DOygrL8tr4ASLqSbNZYoZPzSBNasj7ke5cmRBKZBtt7TMNYi6DOiZccRtivqPd -Y7BpPZ1BvgAO8bT3DPC//ojY+XHKQltgMGStGrJOTXhPyTrz4vEfPK+RE644VLNV -1SQ0EdzumkeQi6h13Q/gMowqqYCWGwIvT4O07E+Dra3fwHBV38t7W/DhtgJF9tHo -sT2p7LnYQxnw79brYeiEctIqLbmqizhW6VzvmbPFfMSy9o3QFjcZ4KGP18Mj1USR -TKCBfnbVqZLEIOq/rSVTiOFTHnN2l6KRbqEzy1itwR0bvfmeXN30B4eY66Lsr7g3 -BqoWYmRZHXvhCAwaF5XoVZBqG38C5Y1wOovK7dmf1jTPog== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-des-ede-cbc.pem b/tests/pem/pkcs/rsa-des-ede-cbc.pem deleted file mode 100644 index a75d5755..00000000 --- a/tests/pem/pkcs/rsa-des-ede-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE-CBC,28FFB61FA9A6BB4B - -gQbFrtQNCdJ7vIPX/P3ZcQeeIusVjP8te7F5eRwX3WksJGnvpgVwiM2G9kphg2P+ -3AGBymUYON28CN8rpZWF5sEGo79Y0tBjAS1bK1RZJTdpJAc7yOeJsXqOFyfSLhJI -1qy6W6kaN4feoSNldNdEjmc7vq2rqGR2N5aunnljV2JBegnUgtuOUGpuD1ZZABhp -O4ay0fyfzKjdDTTmZBvepBlpNOCbkhYoVzOoLJRxvgCkot5ZE01ei6CYK0esT7DU -O/wZfq+XNpQjDvH3ZVEj1Km4cp2xa1m9a4XHMUyYuDkott/KhaHf4z9drjQ0c/VT -CvR8SXRjrQLpogDwZmooYb3OUkdvQpGCdnpGJlK2lixr22EMrBRqcdVPveakpX60 -hFJKBq/pue9Z8GdedBwczlHIsrpahD4wtEoBJrVvY2xwZQlBBg07lbaRJEzJFMjO -tXY+NwhpyRXJ+XpvSn3Z72MsCLJxJFssB+3DHYYeoBMYCXg6OZ5gSGPVQ7tbqCw8 -X6aDDYXN6iPh3hLSml/NFy6C44WNT8QsnBrrU+sxmCwMqi1BoJVFc74w42Bi5g1O -aIp6ja4cWU64PhQ5acoP6c2J5psr8+qoPvMwcV3DEGopRXuXOCJYjKB1vkt9gWfQ -7XNaUH/xEzkvPP4uh8da8925hO/3/IztMq8JoTbcUxwcqX6Cb4NrE25g9JmvfKWz -53G+ThNJ+MsVWqXam0uHk8XYrOYVtlx4KYe7A3Bw4XLqxpKbeo18zoOeBnIyPKYE -XRfdGUWVQTW10yXlkntEcQ7EuZmE4YsCaTVvw+klmHsLnbSzBpn/RA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-des-ede-cfb.pem b/tests/pem/pkcs/rsa-des-ede-cfb.pem deleted file mode 100644 index 07111437..00000000 --- a/tests/pem/pkcs/rsa-des-ede-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE-CFB,D2EC2E14E45CF3A5 - -w8ho8faFohU73C4+Khm1G6qHcCv3k5HuaC8e4gnXify76kDRMQtOLiDXR9bhUvC0 -LRsE9PQ/VV33posoTdwht7gvrDxGb/OPmynIuMBztwSCQ5M0Sy9cVmGIdSV7IqhY -q2UaL+vkoEH5tQs29IkUB1nDDJ2hMSk4C44edbDwc/qwhwsN/aQIj+v0GiH2N7F2 -9lpS4idwtERKWisaxWYo27D5K03AA4952Xinh2cVORcrV43Zky/XwxB3Kunshrl0 -w6vVRwgTLMVHxCe1mfM18lCp4hMRbJ4H/yKsOEPKj3QyvJEzTTicvD+v2IuvlaO2 -3ca5rOu/J48KK7q+dm5P+HDZkxMUejeVebvbnn+b4Wx4dhjbAIJqFJ8nTl25Ksk3 -R95FO6xPT5X8TQrrJWgi50cXx1Tx06eYuILG6nlN2Rb26DVuoaQHdrCQ9/22Zkbb -gHBtXbhCxTFWJENt6tiRFAlJ314KwVoTXOtwH2ILWGu1BsUBVzOnlA8WP5gAfzPp -/zj2ttbZ70YNdNTX25BpAO2klbzchu4d+RLGnhQH/GgRA0ilm8DJ5gpSMG239IJY -a3dHoraCPTYldcKv9tRbxIejlVZ/f/4uXh/YhkS9YL7q6TK5hoUK8gqa2k9HPeLL -S9h+c5v8sHWXBt7OQpSsi3uEHnwC7FhIMNwKjg4cPrGBuVzTaptIsdBTJyiLfD6S -PMFYaq1GUe5VRjjJqyl2Zm5uAWEnzxvP+arZIEBsYVsCFapmsP29SxKS2Ofn7Nlm -CYtJK936wPvqF30v6no9mxrPfYok1QttxZAr1PQT5e4ZLg== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-des-ede-ofb.pem b/tests/pem/pkcs/rsa-des-ede-ofb.pem deleted file mode 100644 index 15879f74..00000000 --- a/tests/pem/pkcs/rsa-des-ede-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE-OFB,325013F43C2C8DFC - -o825cb02Mq6/X3ifbQxkLFHWO+hQQeuebohmv5Tw27EBmrAJ6eUBgNJGfrBzNnao -XLa15Ok1bmV0iEu8dn3kxb7vi9xNjqi6CXWrOcBVgesxPTGwPPAurHGK/tBG9Rf0 -jKAUS6i0cnAanACOO42P287Ll01ajyRv54lc6jpJP1CaEzsKSownSg/kKvILxgMx -4M6/LwgPzNXmyq/yDkW9EkulPT0BlvbWrl3WxlOCzzhlP3yN+yOF7+5vWXSnFOU1 -hk8SHEwRnIQEpXhCEVLMS47jaB9/SHfSfY1eS1tWVaV10tzSMuuSFC7jqhLJR8wo -KZdZV31w1lvAGfRHc7dl0KJx0H2UMgVCLl7XMErmf4Zug17RpgW86QHH09r4Z80a -uY96GHAJu4PF1EhNTjCjB6QQQruhwuJ8XWZutu3oOYSLr8/dBGnBOtvud07wwGPe -wkuXvknEvwBYfxv157LaKKeapvpBof9MvIqhGf153/xSPaQHUwKFovfwTiIDPDBh -e6TCsUHp2H68jbJyYD3PM8oeaah8oJsB3gwwD63stVnqSgU4gQhZd718r8ULLhUr -uoUtcxYVDThjvr/dxmOz4J6HYIosQrDSQmS2KYaCb4hO8NpuJFcy8u4x3kFbMRq8 -HPPbAOy87H7RwLRS4WapLxSxJmC05CalANXZrN591Uw8fHac96P2qG/Ma0lUCJWE -+2LnOK2pDRzAP1ZKC6ZhcuuqGTOB+940J+B00jyzlUjot4JMm4bvC+4CInNRThEF -7qhd2lOT6+BK1/6qYSVu/cHkp7Bo9vpmXZhztau2WznC0A== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-des-ede3-cbc.pem b/tests/pem/pkcs/rsa-des-ede3-cbc.pem deleted file mode 100644 index 5eae9b48..00000000 --- a/tests/pem/pkcs/rsa-des-ede3-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CBC,3DEAD22ADB3BD3C4 - -qJgIg8z1UdUEE6HOrwcYALUiYGIGYrmXJm2J3wxfdX9Km/2U9YVPR3sZv5V57gLb -xo9EpU+d0d5pmacbspGQeY9FtyXlkg5Y8TwaOTIfFs7EyBFj0BdsS0lXoIllIieg -ux3yHTYrA8lgXVMAdjOiFgJ7IMdGsKrxqz2TgZudz8hk6ErGQ1nI9Rh38tTiIqEO -tEBsxyEYFYLOy+RhTWw+OnELQZ8U4FtEjTYlfwfUIN+LZ2RBvJk2e8ndRpYYSsNY -Lc6rgEwFEJmooXqfHQuCRr7nC/pG95GaLqHRrWBHjK7dTRc8CmJ0t1CB9GQDCIv2 -9CnfrKcUWzXtfFkL7NjtYlz3B641pb1TsE/XPPqYnz6pi6cyApF1dpZvz1I2e/jW -H43Dun38wjPumJ7zd0YKh0waAaHpT197hM8BNyW51XSKAN3EFB3vhpZY6sgQyUQP -8PjCGkPEupCUloyGd/wK1gV5FTWl5Uv0vsrGlOJtdsDAV2LgzZ2n4Ho/KmuWfGUo -1CtfPejogme8pp5LlOEwGpr2ceb11U7CuplwjWs/Z7fo6kF+w6TQdA+f0FPBBZbF -b8K+vL4tYq9JgrtrUrgo04d8T9h/CMPJYJnytM5+0F2QiWlXGLvAi6gQIRnKL1qR -r/VGyVx2pVwL0TUAJpkYN9MHcdngVL8PmKYDs66b6zgLJxUxuhCb5Ps4xaqXzMhL -0QOtLUh3pMN3QD0yJOOcbNA1Pdbda+/7KIFLLuj0ouo5RQu/qz1WcREvXwiSvj4j -sB+X7S9GHFbytD6tO8Jj/YIgXBWeRHFeCXKcx6mLdXADlm+81qSqaA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-des-ede3-cfb.pem b/tests/pem/pkcs/rsa-des-ede3-cfb.pem deleted file mode 100644 index ca443f3a..00000000 --- a/tests/pem/pkcs/rsa-des-ede3-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CFB,BCD5DC47A5C62CA6 - -BgN0xi5XHTlT3ZwAeVUWyE95ud/9GBW7ghC08yqp4FIYiN9j0OsiWM/4rWjSonDq -ZOyr2Aq7Tc6Yx+zv3VY/4bHs0sGh9YFdaU9GAlFUGeb4kxyeuHZ272+BRaGDOeaD -cpd+jSfJgCI5pNE1YBrJM6EjkrcUfLnMu0uxY0d2S2tYtocaIRhJVDWwUfpTdXCz -z4cVnGJAV8T+O//Q5njrWnSy1COAHqaJZpERt35EmnpR3p7L0qtLFDY3HhJZiYSt -IttaRNucVF3T1czWHLxsx0n3ObLQRD2I09i4qIq/N/ek9uamHX9eGyW6AiDpVhGj -f8gt4EmCOnGAy5xOo1UwYkc7HS+SwComsEqm8cPKyWrndCdctYU3viH2C2zussNY -o/YqVfjGE4tg0/m+PHUfeuiiVErFMewJUDQ9TIrubdI+W76qVh+5YWRTZa7zGpw+ -+doVqgJgsi0gAH/c/RSwOO+Os0aHCrJ8jDhQ/KcVlRg5hAozzOtWrslxnCZ3e6ar -7PuqvHjJ8UgS7ahvyQXTAhmjyPma1+2TAlu5K8Nsse9r3AA1ZrKnjXssqE2NHepC -1cOlfTZjVHWrMh2GOVLqIBU0jb08EWC4gnv3Wy48To/1v219uxfBZItH7HMijirp -ikOgX0YpYuKR+dgjmKfxTJR/tr3HRBbmXzIiJiRi5BWXpw8RsD9tZxXLmaPotz0Y -u87od428FOhwqhipKChtzv8rTK2OebWQ6iAfx/Fqd6YAwQWDbKjMGMnDSamYcGwt -cxZI2F68DZK7soNSWgdQgUW8edE+FWW2laGa9lD2Fey00g== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-des-ede3-cfb1.pem b/tests/pem/pkcs/rsa-des-ede3-cfb1.pem deleted file mode 100644 index 24629569..00000000 --- a/tests/pem/pkcs/rsa-des-ede3-cfb1.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CFB1,0419E39778AFC124 - -GEeMgB+RzmdnJx9i6qX3jmy4i2CyTvxbV/GlRwUPeuMRXLb31Yvc8R2FwKZ3rl/H -CRaMYGig/GelIdcOr5U6haOp57fTJ0BQIyYksTB4wi3fbVBVIl6xgMo1UWLT2IR2 -odu5d0Y+AAh+QzKHHYqnOguM3EmQ2rTGQFbzPWuRpMIu8TZjmsPWMgQlW6mDf90V -iCJfbuQPHmnUQH/pQPnxiSacsxBrxJkxCHEvgBrlRcG2z+ttDqhISBJQ0L2sDQuQ -2Ukab2bZxWdWR5d06X5lb8N+XB1vxIuhB7s/PgaOhus8Hf5OwUfYHN0w7v5aymyS -nBvQlF9CnsmGWjUVjqWWCNUtV5Ip/W7NGFbBPKDr6MeNTOEmTUS7m1XZt77AcC7L -8NWMaT3mAdixrgwTbwJj5Jn+IMR1UXBn0+az32+ttqIiOFp/NQk0VNayfUz4TBKg -PH1wUzBVRlCDks3pUguKuQh/AG9HWhqFGQLysXPtriVlud+ERQ0BeHnkAU4c2yFc -unEnyXiz60C68xCQsDvt//Meoft8DL8oyBe+qG/fYBj+jspuLorlAGFLChkhM8Ms -2t/RfNvAQlF4DZ9rBvMB1glpQX5OIwL10iqjD8OvMD8WG/MrP1ncoWuSqdrDSaXI -GZnIS75EDBcjJu7nW0p409XaGu5665G4k78zN6PHBNnf+WW7M7pNOFAjC638fFFO -3vD5DbWuWWsiu3+u3Qqg4c6HdpCVGUMgmODDH/VamYmas6eXJpumJ7ro2yZNmeBg -FIO5SdUJhnhiPW0fum1mV6vBvLeo3HhTPW03zq1eR4dczg== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-des-ede3-cfb8.pem b/tests/pem/pkcs/rsa-des-ede3-cfb8.pem deleted file mode 100644 index 547e52a6..00000000 --- a/tests/pem/pkcs/rsa-des-ede3-cfb8.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CFB8,2EAF80F254E8E368 - -FYxKFpbGlvyR3Fy4fbDFKxaSPibxBg444Qj9K/sN6vHsmJNCM8TiSKz3Rzz3pYlV -bGV6HCi/Rh5W3wFJpMjvyzqRfZnkUWo2u5ZwygoBA7qFaWfp5hJil201bV0DNx7b -c9yAQGGnoqsXw+brgrCoIIxUXnRAPNIVmJWKdvLn40ksfxbbk9z4/6xSyX90TpiD -oUY5v8zeereJgZN3FS0+DSY63oq8dM2oHtHYih0iO4m4G52Rf3xa9adZeFqObGXL -TMEVD1dwkxiYgkwKt/bNC1STBHxF/a++OreUKOMrHV5TLyIlQz9wnI94aTnO+3/m -+olRJJTLIt8uADWcyl3/RmiksIyxKosOZ1VKJy6dFG1EaGdqbWZEXfZZl6J+SVQj -TIifbvR56+6d8XzP6d+WSE5njIaXsQ3jWhn1EGzHCnPJ/Ed+6SCOpUbPig+TdoaR -EkwfhooOaodwJdu2TJfTsrydB++C9/uAxAP2zWjVWzKsot7f+nKah51Tbb2ILeB+ -PuQbt3q41iJPZvBmWhM+wCsu5nwMF/z8jMOF/gOiJYI/9k+XMDUc+kJ9d7lk3/Jt -aRQ7/DGJ22cgGbVor4jChTS1ZQyvlURhBsegBoGPZeOA/1/V/vKdqax4pK+icpQN -+cmfSxQQBqZl36xlSEH8KBnh5L7ZxSUTPfF7x+ooDK2e05LDZz5em2d5gLVIMzJf -/zbJES9R594RKBtOry3ePqa7yAgorbK70rHUu4pfmx3dRr+MefgeDrtyOmC0i5Oy -J9/pbFaX4pkBHoGWJExaYwbpJW/Iq9sGeb8WIwEvzEpEjg== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-des-ede3-ofb.pem b/tests/pem/pkcs/rsa-des-ede3-ofb.pem deleted file mode 100644 index 1f10dac6..00000000 --- a/tests/pem/pkcs/rsa-des-ede3-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-OFB,7B40A4B78B61CC27 - -iAoUqthNG7mdy4xupBkFsc2GD39Pm9yreaCDnj8G5zEzHKNddpkomod7IC0OOFqi -f92qtpmAlDfaS+vd3vcBicy6/Ki2Xl8jZhTsrVqNoDrQgMRNuniNgO5M0uMfyvUD -NATWulb40OPMy5qGbwSZ0kJJJzqw36L5pMGShmxRAd9QxRtrpn0v6lUUex0Rlt6T -ueqZnnmqq4OcN6WFWsIaHPVu/clwNyboXgMs8jEEGMXz+0/9DZVqAYlt7GBycLHQ -Nlr2y+1NruQZXsctZ+d4OMEEcG1R5+tZWjOEQf2T4ne/XOOnYEzj7vgCo/iN4xnF -zNf75U3X0gz/wFzGhOHw/HIX9ON9rEj8OdbsH+tZYu410Yp4jP3VN4cFPt2RFbuE -TXBfRfbOSd3GiGWSTEkukvjvl36Ig2XM25/6gGHQ4g0W0/A2XeQHwOyWaKAwPx2f -qUonclgL6/ASDoF80odedgbaZqw+gWm74BhNMXDzGPc+7EuKkFpvVhw7jSTvXwYu -XPM4Zk2+dusUkhxJ8n8RdPF/0GmjbPQ4APG7zFLaasi7448NV2z39ViYSBlvUwXv -Po6CPYIRvoKH285Ax0r10PT3U46pjuAa9e0Qadrux6hCLUx7iwludTsEEsrnEUQQ -Fyncv1JjSL4Ca46P08IsZLy+zZS0g06aIVPFpq/HsGZJ0k28z9cl5aFKlC5rFcfQ -x9PX3bkzEMV3qcm/Nc9wD3PDpiXwIP9pMI/JOZoWDsUMzFWshihWDRp5CpKJQ6ih -hYycIyxnSJ2k8f/N20Dkz82+zJXHA8ArYTyxrnKFW4Q8qg== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-des-ofb.pem b/tests/pem/pkcs/rsa-des-ofb.pem deleted file mode 100644 index 4eca3c78..00000000 --- a/tests/pem/pkcs/rsa-des-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-OFB,D54F59B32E69FED6 - -kmgjwZgAfTs+sJ+bVuQmTxi3D3yrVHEoj/MCEVCizBvcaDQvcCIoeM8cr0kCZuVf -rwtW4j0tFPscjtsdf2qvAwpOmLbPtwp2QfEDZrYXjYo9Kc3V/1nb8eoKSrmpVwn1 -yNjM4+/ojNiP8cqfh7YfcSdnJnIzAS6Vp58WHxECTPNwAAqKH0C2ioN6IRkscz9j -h/PhTmpZkBGS5HwAX5sUSexa8VnzA+aSusrO2BNIRETEF7K7V9XTLTZQJKADNxC9 -aFGd7TH7rbbDZ435zmWwhZzbVxfZquFDWMTju2NxyvYJ9HvAq7COCiJ+TL70RRif -2tGX30aA4uUOTMIPgBM5TA/gm/iy7Z/InDU2urwN56syw0ot4IIs6n/lszWqhGZL -jEzbn6uiA1fq9Ln6Z6lQOLNkZOngtKrCztHmf3U5mUUHxp88UhH0G00bDlGAVFxa -HaY0kmk8mkDxHF0bnFNWE57KPqRGbFQdJR4n1qlW/FJ1rFfY/MUPw3ZAUYt5sHFB -5aEc5Dz6N48p3YiY9fYKqwSn8QbN1cKNC/+nh3Q20WeG2V8p7Qh4Cn+8lpE7kY7K -rFU1mwlC8WG4ggNwa5Pbn2aWX3cpIRhsd2VL4fJwOVmfIA4vmIKadva4UT48g3qU -ORT344NDyVHeewK3wI14FmpUkz8gK1mGXNMRIlsh+1658ghVoNueO5eYUDOaqqOV -eqTBLjHnhAz4RnIrUdTNRW9gcNzfJXey/rJmOWXqnutvExESA2e8gDqpdB9k5xA0 -PDkyFEsdtXjVxqFZ0Qrk5PgivCCXXlQKT52U4Gr2XLZ9LA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-desx-cbc.pem b/tests/pem/pkcs/rsa-desx-cbc.pem deleted file mode 100644 index ab15692e..00000000 --- a/tests/pem/pkcs/rsa-desx-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DESX-CBC,7C6B3D1DF2ED3BE2 - -kib+IhIUbbFzTAWj1noqVveQDvmSdsaZsbGpn8+dGBvQid+0ktvurQptooMR0omH -8FvKLX7rQaVk5VejPzYAz9Qq+78JVDI+hxzdWEqSiRvuKDWKOssUa1m4k5pxxnJz -tC9WYREulZ8QLHHOeWNDK0WZWrLGNuXX6m6P5wZw68diBV9MQqxLvao69lJ1sVb2 -F8xRolutpVBVe5avHlV2U9KqA4Sz/L5276C0763/mXFRGOM+OZ8nQOmQbK5sziI9 -BzK3Tje4bLQ0rjDGERVseDHGUF85T+xwoRRBK6GH0RYDf3cHNRYYi0p+6XdfM45t -AOU6XXMrXQEBo7kpFcdg17JucHupBWvI40vlNuRxoHceT0GYv5kZQn0l0zP2qLF/ -G3HIo/LCTRSUD5QKccS7uS849RIgDatD+iebTTiHqbu+WfSkRX5/HWRKesRwT3wt -WOtwyMpXjRo4IT2Yfu1lD9+Xawwu5BuRPeLFadgf3XdwTHhmY9NL4oPSY5dCwcG8 -uvI0mG6tM87elUr8X85sQn9ipWEKBTo0fJZ9MXgAJSESjJ/Z1wQvx5qHHJGXB8/R -qt/ZIkNtaHZ6Qu+tcCbcz6waGxMXz2NjqDMYV3W4Pjm9+wn+OxHr7nZ+mwcRTHU5 -e8wn95JZCbbbJa9DodhhEbxDbIJ5NRd6GEYbk9q6CtnUpNIoN1jJ9mneBb0d0BI5 -t+pGbFxmoKVBt8AJ6Pi8pUQu7yokGiMsjoh4Me0UEFk0pEc2TZdb7v+HZPa+Wg1i -ZLmjVjlwlFMtwvAN+ihuO84d8pjuLnIJ06QmE9x5gh3xC7nkUCNMKQ== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-encrypted.pk8 b/tests/pem/pkcs/rsa-encrypted.pk8 deleted file mode 100644 index c773664f..00000000 --- a/tests/pem/pkcs/rsa-encrypted.pk8 +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIC3TBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIzkqhs+PNHcUCAggA -MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBBjfvDZNKdgUMcoi06nycWNBIIC -gCh5mBr0KtjS8A0X8pXZ3A2fFo33RNLmkASq3l4o+OyZx8o/LHqLV0EqYI3ovV/r -A6Z4Y6aPJwAmyRULc8us4E8pZLc5I8rSu9rlGnmSz1JDlFKy8xdo5+0oVE1uRmWe -NBhWjCUp1wu/tOavM59rVSXXV/HOe4K350ANkZgJTqUsuud4YabhlIwu6umi3Fam -+jjZtGu5K2t8HHKLTYANDHYiW5a+YnZ66sFw+Ny9K3oEBCMTc/flxZnraihg5NwP -bmqgH4y2FCpRIsTknmPnOXwTHgdjbNT3si5Ja38ztU5QnmITPk8RDApeihbMyfln -UhWvOTXOGF85msA5uAa5QHrtokFpIpyOzDZh/OTznAz2Pe7w6D0AbJU19ozGyHwR -IKg4qyG1dzLz8YhBtscei8yoWjhIFsRpjd87mEEs6dEomFGndkDse7IZvyjFG5Yy -iVejSKXv9n2aJy8GhWrIO2ucyQ0wRZ93WwCTO3p4//nqXB/BlImZBE3moUxKdT/2 -UYT9uhk5ZUOlWur77Q3wO6IM9KcEcgxSkFwTuh7cpawM4qG5HTzob/3OAr0gYx/2 -0UbhcTtRgavYXNaEVrgNc+fXc3iAt1w80E6oblUPSkg9fyorrbQb6IbEesLLjIi9 -7Tnvv25p8Rdq2i5dmCUtUmiYLYm9E3lO/HKOpMtvRT3srv7+L6GiyuzQ4j4oSLr/ -9ktc+vLJ7eSZ8i3KUJDPwNhU+HRsTVmAIs2dOQiHGBfpEoHgUMxT448LrmV2OYMr -NPYCZKHDIocBYgR4K6WXi48Ta3D7P+Y+qB2oiRyyEC0AZKfUHVKM6xF1SehV7HWV -VUpdx4blblYjMEmdY3BRG+Y= ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-idea-cbc.pem b/tests/pem/pkcs/rsa-idea-cbc.pem deleted file mode 100644 index c9e1ec9c..00000000 --- a/tests/pem/pkcs/rsa-idea-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: IDEA-CBC,52254EE5ADBA46C4 - -3mltPg7ZYhnrVIUn1sy9D1DrE5q/vlYZoAsgUGIdI5UisVVR1XZIWxkxjVhQd240 -d7OImY9aLL9Lw4cQUuRk6+j++OlWw2K2oKatlCo1S3+Uh/lNcYgi44lDtcYbqOcy -qCLqqusyHKH7Bp/fMm3A5SaKMwcb27CkcW9eKsZRkgEoYHU+kddnjF0S3CSZEFX6 -/UT0bJOil1ca096EFeFJzEdKrsWPqNHlkgQvkEIp4ZZQG2vSo5AvLYykUbpxx3lL -ieEDPzPRl22EIO994gLckkovVIrv7X7UE/hGJ1LhaOAYFgfqhjowDQ6GngKKKaYY -4eviXS/ZxHzTYJYT2R/UtYbFrZiEAWO6wSddiMHY8mP769hqfZOdCBgkhlJBSzga -pKEFKM8TTcVUW09at+mWuyQsIE3vriqJGb3AQo2Tv0feDThwnUVYHzgHgWQIFpgB -amjAdHi2fw0bG09VIVyxKYs0cP4OzEtRCRhAmZ739ozlBTazihbDyFOF5a21HAAv -URWfleIU6cmk1TjH/20Aqx5vArL56+2gXf7JixZ0WT9yH/pqx1SgosoSW79UT74V -rPbIIKdaLg7xZ3Y5iSG+tvz+Gpe4RofjsfIIQ+qMkmGVr/qALt0HYdk3oRjeQpKF -nEcgM4W1c93x8eoKoJmx302PdUJqrsfKXDQMAGrAVEBtwbfSVFfWJxE1Jm1N+HiG -Ec7vaTRnaYbJpKxaAcah2roZiF/APR8RN5hq6V0sJNGlRIFK4FZGjJUpB3HVIGty -XRj1m3z9DWqLbC4hJoqEALrP4oGfGdW23VNNkjliOJyd+UpXmohc6Q== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-idea-cfb.pem b/tests/pem/pkcs/rsa-idea-cfb.pem deleted file mode 100644 index 290a92e2..00000000 --- a/tests/pem/pkcs/rsa-idea-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: IDEA-CFB,E870DDC34933C104 - -CzZsDfyRn8n/6ogbTDLibvmBelG2atvGG4aa2kqOV6DkM9q7zwvYEFO/CaDRLGD6 -1lq8HNf0di/UvxwafZlqc+JTwppZPmmIsm53YnN9JbRvRacA1FKkbN89/qQ6VZ6r -iYDF1U7KM+pMg1ieMUiQbaVDc30v0qokRJaURRaiIVB1tC7cb98gagY9kWAAYTli -wKc13VeSpldoFMwnGKNJZxhrLWXxIY5XsoPCb++3DZAcA3PJ+fIFmzhrieWddXpQ -3+3PcaSFySaY4WQkC49ibW3CZH5/kklmUa+CdLGgm2uEAGS/RxmUVU/Kw1nxfNN/ -+7CTD6S+rnEUUok/bPsQiRBgdxH8Qah5Rlfy5FSbYGnk6IUjqWhWaALWbMYsLfhe -Yabz0h8j+fG/hfy9QMaOMf0HDp1nchUe8MhLbpOAnYiQhnl+ypuz4bt1LYwE2xbA -cN0bSJ3+Nd1GQjMzNfBpI7rBQS/yccCUgdcnuAtGrCuctf2ZEWnZfR7r46DVKYgD -J+jcRpbpKyAkx0xNcIj96BwINbkxjSs2CCCvM+Xkwc5fHn1Ehqo+OUwqaEzv2+FP -LWrBdyKY4RQ/XTfiSuYgPxHL3tIZxwUi5Uhi0FaUyRWuR9vA8F9WQjxwKfsFVn7T -1zgOY59dSXKJRXKRt73VoVarypf6bkyGfdMygI2rvJ0g1VMxKkKu5NNZadO0O8UC -9t1vkKD5eaHB+qeuLkqyCG8RzFRYu8IHwmmDYaKkt7Mr1ciDryfCi8qfGOI46QML -ngVeR+Mt0j+YSWy6ucuZJTsPBFGyJo4RMTPC0i8Q58AgoQ== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-idea-ofb.pem b/tests/pem/pkcs/rsa-idea-ofb.pem deleted file mode 100644 index d1edefbe..00000000 --- a/tests/pem/pkcs/rsa-idea-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: IDEA-OFB,07F5E5868555E462 - -4STX7Z1jUIgBOvcBUJVcxMTjzGK9Mli/v425w/L3dRSFMHCnIBEwaFMk9Jg/V/Uy -qn9dTGyG2CQkR6R1HSvWLUZPTUYXtOmUvCI92t4w68x7N9BCJI2g1VUIe5Wrv4qv -vsWMDZKMUAp8DRTibFuy/l6UFKaTVG0ClRgkzhMV+Artls9CMQJLaukvgby18ATJ -+iDRoFzQwSZ6lxTQEMMN11DjUeal+8iYUdmmQXJgWaRf56B8iOQX9W8c52YIOrow -XqS1ft9hJLI2eft5DiPRPIfl77eJQdWL5Y+0M7ZDFOcKTtxkFP1gmk3m4j99vi9j -YnecbsB7J55x3Vbh4als/z5fVpIcwVuxuH2nGx6h4ayKQN00PeCY+xOSoyDCx8pD -SVpk/YpMfwoWVoIOId4AXjX4BSVuyi/2+0q0mj2aQXgJMw5g1xgd9ZscMJhc/naN -7xGYXPghBZLLwpqVyqiC9Z01cjhnX7opDFB4b2vBqInBLcTy740aOgtDSiR0RZNR -7zqy8og9Z59+O4+AprjmP65HlnnyPaOhGGwX1ibVXnk8mbczlB0gSnHu1ZHu7NBN -PZyj5wgnQisNtvvhuB6qkFZ8BVay0Oq/8ILybOBUzmDm+4JIT84he1F7txWX6/sj -pyDrxxIjw2vpGyjoj6J+yX1b+7Va+mTNI6nrNjNFBLDRpVMSM10mbNACSLnUaXlN -h1BzQaIpK5Ck3v/3T4DfI0hd0Apq51/YOEUUfsGuhs2/8AcQ8VQtg/y0ZMrOSwUJ -9unSbJij4e7g6vqV/ZzFGt0jBIbzhJCMYi0x9RvgVWZzmQ== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-pub.pem b/tests/pem/pkcs/rsa-pub.pem deleted file mode 100644 index e4518fa9..00000000 --- a/tests/pem/pkcs/rsa-pub.pem +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPmt5kitrIMyCp14MxGVSymoWn -obd1M7aprIQks97bfYUtlmXlP3KVJJ8oaMpP20QcPmASit0mpev/C17UiDhJKm5b -vxI3R70Fa7zb8+7kEY5BaHxhE9dCyIC+No/cCItPrKTidgzJY2xJWJPtzKrcJTsK -YD+LVDrDTTHnlKRE/QIDAQAB ------END PUBLIC KEY----- diff --git a/tests/pem/pkcs/rsa-rc2-40-cbc.pem b/tests/pem/pkcs/rsa-rc2-40-cbc.pem deleted file mode 100644 index 3933307d..00000000 --- a/tests/pem/pkcs/rsa-rc2-40-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: RC2-40-CBC,B3B2E2267CBC8E5C - -rICswWUUfbNtNYdP0Ub9F9VgRu5HJTY4y22XGGTV/V0MlZPus6cu4oOIJmhFL77J -VM27qUwAFlsjvgNhxcKNrbdLt8jtaPE+y8T/hX0jTEd007SPpu2DyZG6GngVkq5j -6OjLiI2/wif5xxtZuooM4ZDX4VTHBbvL6fpnYbl9ETziSAiO2ulvy1n92+mjXebM -dw30V9AmqRwb6nXQYkikasQuuOpEjHn+Mg80jIiKtq2oXKmzC1CvFdO08KYu806i -FCKffXbW6hqFNQgFepE28u0FS/TxqismDlh1ytAlbMihGaXgLdRrdN7NQdUhmXL6 -rM+ZOps/2ff2HN2FA1Bc+YO1B9WEcRZCSrlmIaW5zwyHMRTJAoq8DmpgK9LuhPSS -aSUXeZpGWnGLzuInEDNHt0krCt+Z4HoLExPoZpw1ilkN4xZfuz1wD0aa8KegYdmL -eytqJ+jiq2UP92izUb4lQYJM3uBM/o5q+FgkfB1GZUhjLoMx8vDGOGY56JqFucy9 -0bsMvh1ibedSAkSnIEWpFKLLYf+MEi42DI0uDrZteuf8yCfdyZbzj/eKOCPtIq+a -oAMyALOPI01g+3WN0uxfL/vyEkB+8dKyTaPix02gDSSxmZI1JY/V4Q30EmUOYrQz -4EqpJEiRokuBDF6zXTLHAPQpsh1xBOLemtB/l+lNUd0tG7TVvgXbM3azh9UyvLnV -ZcWnNle/wAXHeOtgk81EXNhBWnTP4zRrS1ONaTC6A8MsY25HNbExr16rLg94s3ls -as/JrUSq6sd7w0BV2kLomwYkASBiEm+GAQCmP2dYbUO38Mly4Y38MA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-rc2-64-cbc.pem b/tests/pem/pkcs/rsa-rc2-64-cbc.pem deleted file mode 100644 index b1b1656c..00000000 --- a/tests/pem/pkcs/rsa-rc2-64-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: RC2-64-CBC,09EB4FC3DA39725C - -jpPfTgJg2Go9eX1H/GqBM436WutjRhEQa6jiEG1w8LTGlhQPLc/xoYw64GChpZ/n -o94WvN/y0Jn+Rwo/Vwm2h36aY7BSSyBklZ57uejQ9ONeBj+Hk8Bm7QyxB/3jILnm -GEVDbzetmeDkGn39zTrxqKIpwiSiXPVhdg2dG0SA325kIf7tyPgRdBshlEylHoI3 -nFlhuBe2mxHOiaCB2ZqxhXwgxIxPcUnAWqBk6ezYx/xEvWOd2YiZcp9pLmiQp4s2 -Pf6Bew7bkcMaxmnHqVlJ5bColqh/g2voPpFIR69QNtGXmTpOb44Ml2uOanCS5L1f -XFeKl25Jnb4I3ql40eWtYxCcPVq2pqyeu+6o/eOS19v/Q9jCHbFxL0UIgaIm9qh5 -VUrWDYvOoaqFL8bA6hy3KnwECZUdc7OwOpi5B+56vffw+PJG7vIPwNhXsO+W+dIp -WR1UqMAztsh6jieVqOPaBc+X+QtRZ+mkAlo+apGkCynLQZN33ZCwpzWgiSBP06jq -G0t2bJkfPHi45FXgvJxv8OOOX27bkHU8CT0XfdnODD912GcVQaRrgirJXKIGCtS3 -qAX5HZ4aXhjGSq99f4V8FKbLeAIGEOUXrvuMmecxwsHpDnJ/s59pu8vHfU0s6UGF -S6hOLMfuIFxR8YnfzkCcDM9vudzXmkHv4zth8nTAEA26oOpfhn79RNBraG+nA/J9 -VP5r46gJxBWjLVXFiNDEWbdWn7HfJkAzdHIkdUT4Fn4lABZ4sUOZKLdzEmlwoBht -1463jKL4wIZnR/mZ40SVPQISjqmXucuFW5b2BizmbDLTaGqwD9EOHA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-rc2-cbc.pem b/tests/pem/pkcs/rsa-rc2-cbc.pem deleted file mode 100644 index c5b05632..00000000 --- a/tests/pem/pkcs/rsa-rc2-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: RC2-CBC,E15277F46A0D4382 - -+K6qWzPBSC2XWsDthT7L6DUuad80lpVf+WV/LQM1wvSwrHejHtly/RaoPjJhjaz4 -0jzTya9Phpep2j7yflkLD397JmsJUHTbgSUpNg7X4g1QGO93w4726EVWtHljNcPf -vZzW+D0tsjQtmOPjnw0OhBaBuqyS+dGi78YhtD/gG1geNDzcKsM5lXUci7QiJD6m -69frJVTh9sIfijKU0CQ9I5x0Eu74fP3f/Y0jyLpVCYhzsXjS03gheGmIGnZjmrY8 -1SlZrUPxk0DTBjvOw2Tnepb38rA63xidQ1ilLHt02npUFpEvT3X1OJC3DCc7oys/ -F8iIl0PYniRaQU8RWnvE08ckZOKIV5Vw5dXC0nVYNIpu7LFghuUiqgUEMpsS5R/u -AUZRrNKUGhXLbo6IuyDAFKBHWgbiOa8WxR0meZkIU0JxXL9SjfQ/XbeSCCrQqC15 -OWPZUsn5p3KJjZEDpzBshgr1+PAwZntUsCzplhYv+swQqzMFkIvEZxQo4vytYas3 -nPWLidJL3T6n0Lc53zOuj9qfWETjcfGoJAHjG0pZoDbg4RMfKXSHH81SZMTwd8V4 -7JYS6d4avGLVb5TtI/6YtIAWLO3bmYBd0BdMLQDhPLjadnUv8/7SXyEouYiqJbfi -qU12DZli3snK0U5hLO51vpl6Gk4LHOtBJKbQNxK4flOTlAWQFx4vPLPZYPqrsVmQ -6qjN8Wour1F2hTcJcSDYILBZIUAzMNXF5/CWfZNQJeJ4rbHorKrjRazs2BK5GsHV -m4+TB1bNv2cGdRQTkN4ohzo8SNz4UMJv90G2uV7NMZuUcEUNaNSPDw== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-rc2-cfb.pem b/tests/pem/pkcs/rsa-rc2-cfb.pem deleted file mode 100644 index 47e368a2..00000000 --- a/tests/pem/pkcs/rsa-rc2-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: RC2-CFB,70E45EC369F2C0D3 - -/Chxzf+eMWYQr1+GjTKQgFYLqMT8DLT5okfCfwa5C6Gg22/qzFLhXCfiY+PEwW+l -2cgKj9Dht0+EQr769DHiOtKUM9pB80u9AeWk1fnwwK37BPrL1ycvveMrqyHeevaa -i6V1t3BLVB0OVvq6c2g6q1Jvjip3ZUISF60ozlk58k5j+q3fmC0+tatUFouvk1dH -iwMVtLPPtR/bD+80IAuUAI8JYfvM3rFKcoO965STDQzIQlRoR2ea6E/4EFe3HzXZ -11wthzX+d85GLyEx/IfA2vFv45wznqGagIC43ZpB2JuvWatBV+ey5iaqxzophrX7 -9f7OLSo4AlYzR68Z8DneLGHuK2kag3JI2V1QJywz9EccLcdWqYWqm2bIMayV/Q4C -0QtIA2Uax+Y4FeUnDqdrTq3hhOk10Vg80ZHv4IkAj3LjcLQ8D1DX0XG+EFrmy2qR -RJEVXOYxuRDa1nZTRULVsEcVE8+giInooPxY39ozCykIhaYtswZpPtUx6x6AxMbp -ucXIAFrlN8l3Hg68q3X5iYJmJquSnxB+nI0eFG3oRPtwpTaCgodL4eB5BgIOCg56 -bk/dzrfrCZ9tB8ZAVEcsBsCXYI0eGpCdutOzE49FpKkJgESJ6Jhf9ijg9xf2bQ6m -rt2rm94CiaF+k5FUP/zdLJIRK/6nhaC3P2Ls2Y7RzcGrdxcSx2anm1Kp24A1kMnG -hlrbRzArX3U8wQ8jnoCUxBSYdXdhD7ruj07eZvKH4vR/ebGJboVhMFWN0DLi+MRm -mzwqwAS+L3nR8DQJHwikR+KV1u2OLRup1sPEcib4y5jmHQ== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-rc2-ofb.pem b/tests/pem/pkcs/rsa-rc2-ofb.pem deleted file mode 100644 index b84ca90b..00000000 --- a/tests/pem/pkcs/rsa-rc2-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: RC2-OFB,C5B0AE4B71C5CA69 - -QQdY1zNfQ1i2FJKlnDouwSDAOXT9VV6dndgOrD+JqfDwSxMukZrSSfBExpaOtBTq -74vP8Ae39JLfAq4H/pZjngNIgbpcOmSFxBVucykqNMLj0j9qoZe7YPXaLeYc6BYv -NWRsf+LQvOxIPuLGNsUCANWwuowZiGDEBnheUy9pR5DCPe8rp+aYc+/s/3CysTse -WoBSwNV+oJlzx6FfwNGT3oULouwBPSFnMtJ096WbQ4qkQHh4ZVq8c00PMFACNqJw -b+LXKKXVf9DeUd78qZ5/08u7c/w5OLX5FxNMMKfkZ8pddSlw/W6NQzLAhWC2b/7p -aqmf2Bpz+o+cNOcYtBOvzD7ygY+MDMrJlup4HuIRTyzQ2nb6dWc0Q776c8/qJsKu -HWB5cxm3F0Jg/P8p/vKst87WQxGzytzMsHbYSxqz930TJlyGkVauxNvJ2o3VlZJ9 -JPjKVM58Ge1Y0Mpo5koTSBTEC70xqrlZSAQtUsI3wbDXb+w7rRmtxkr4atzKGH1c -4jVvRejGDmLF3bh0wOAwFZKK8DaUbg3nSiF+I3y1WZLn6dLsYCUx6WFt3u+BHsAO -y8SblBJ6RO2Nz8vtA97qizPzjcBdVUqte8BY0W9Py0B0pVr2JT8nZ91e6Z2GhipE -PFTLnDWxRUlCJZc0/CvX6VbjwwvDCnOW+HsRMAAWr/gChVvqiK6OXj12wmS5JI+r -Z6e6k3gF4PoZ7Ui3VSQ7FAgxxxonh5P/RbhWhXhejTToSB5AQhp9emGv7GkJMpw0 -wPY9hiIRIurDJX5MBZFXqMt/pCJ4f7LzV6wCfdp8Yq6gZA== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-rc5-cbc.pem b/tests/pem/pkcs/rsa-rc5-cbc.pem deleted file mode 100644 index bfa956cb..00000000 --- a/tests/pem/pkcs/rsa-rc5-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: RC5-CBC,0F357D2C058DFC7D - -7R9clYlXUzb8YN+pmbAZVq/Z+v3HfcvaICjvia4Y8Yu6SzARsx3xlgVtv3SjWlPw -OyKV85M9WhaEVoRR149s0q7jlechbotUQxYhbtY+2xb9/JQBVWQWNHMiAiEILAjU -CH4aQjcKFlrDCzgts12DmHOmy+8KkKimvD4vjEezYRW83CQugcq15F8M34Jdhbjx -8drEjtAAC5QBllqaXmytLc9ON9HJLeN7+pao58lmYEV+/9aN8Kqtc05MPhkscpz4 -sT1APYt3vPy1nmzxLfQDfH+eYSt82ad47Btjvqa7lBGI2zvUTQOe1nUQHzqtXGDD -1CvtaioEsKFHUhZ/v+TpzNEsxXjpcmyuBR299h501O3D71r507JqGKZhz70aJxvV -gHh/4TDvdddQzx6Jm4jU4dj9XYqFber/IeYsCk1IIeLFZg6MVdebI4nS0Fe6pO8C -GUT4M3oiJu1/+1ztvbSsXkAO/l7a1c+Ww8hbQDiZJc+R398dUibcaU+rW9e14uu0 -dGFuLUZrIl6/26u5oiOA7nP2aGWZzAtwewY1TEWA//etdp6LxZoCchumLuUij3Wk -LZZCucFwWIURCf7iMmOJhNBu7laEZUyzO8r0bUNSiKeKjmxGsdSxunBM59yCtQbK -utrGyg8T7vk8gPjXPwco98XfN9f3ijlSB2Djkz4YpGt0OzPxd6ussq4PEWtZzY+k -cARtW3sBqk3ZOGXbsZDX8yGKlZQ31+++x4+2Vbnkbq0uSvo4ppKVpPYqG+am11wL -aS/2MAGDgO9HwRO2GklUKgRNTeBYMu9RaJYic1kPcPXf4X9lolMM0Q== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-rc5-cfb.pem b/tests/pem/pkcs/rsa-rc5-cfb.pem deleted file mode 100644 index 11b2700d..00000000 --- a/tests/pem/pkcs/rsa-rc5-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: RC5-CFB,45BBB5113B6228E9 - -hYBLZX2gE1Bgx93IvKmqxmgyHubVzuVNx1eL9JVS+fhJBh4Zy142QNaT4hHbt9mL -E6LTc/myv2uBCrROWHkL66irVyBIWRRRiwSC1jhkiA5xFLvCrKBM6tHqvQ9Ag60e -hrsQI2lbEyy8pQcAfMkI496jyTSHDuJWHT5HnMODk5rPNGpXmx1iq9bnNd+xU76I -JV+v+gHrZiMY+JwVWTxBf8aVtxHGqXiYp5wP5cjaQwsYjEypCwlqdrwChBH194Xo -bsxS0O1ms3lyIEDL04Thm7GVxIHohzkGUjCoYI8crk7sIFhf70ARqSbe33fIyLLq -2W1Ha598OXpDkpnk76NiHmTRmpl3mSOD1/ek1ZgTTyYjHg5/iOfqIY42MiwW99sp -Da0ObP3ZAM5VN2N2UtjO0RnpAUk2GGrRaMdco6GzsXALQJdKCJUSBMZjLMUfyMas -XEcRm54r1YpzobM8nglm1Jwg+h0ksUpkAHLQyguVknHn11rqTrPPBSbNDd48v/wG -OF3qQwWWreOy4VQ3aPVoOUiFyswHKTtvwqnnqeMxsa3dr3d3XSk6LNrLZ+hVJf9x -5L3MElYMZ/vKFnpbStgyEHo/vbkkT7jKWMQ6HWlRnoikPBFCwokYy/XSW4BJxD8r -tbj3JK4eqXVjXn6ZajDZEzVE9T3PEjz3kt21N2RQq5Z5keVpfDAhqvaszASkwu6u -FgSG3ugJXT/tldlmQzc0BdKsmWD++1s+fP/LmO5QTWG4mjCainSVthEeg17h8cC3 -AsHR4YOlSimlHehNh7jLRBKY0IhrxBLJQyEObN6HN8hUqw== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-rc5-ofb.pem b/tests/pem/pkcs/rsa-rc5-ofb.pem deleted file mode 100644 index 1169a1aa..00000000 --- a/tests/pem/pkcs/rsa-rc5-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: RC5-OFB,10777ECDF98A48B0 - -e8Qi/eDAgoqpYdYGHLKHrsHIoTYG0n27BYf6n7DUn9G4ngcoyQL6s3goOh08g8LV -5RyvDi9U7ZUEAGVzM1e8wpjil9FAbfCMTs5am+9u2WPNWWI7miuEPxhbxkvQ0GZJ -0TuFMybFXw4DTgjdcjcllwnKfDjXIs+RGPbzJlZC3PTgiicgm+w5/lZ3B3rPw/t/ -UK6Rk/7QNz/RglXKnzTpuaIabLOxNzZvpqcVWW96FILHOe1Yb+HJ1JkytMRe0XKf -Ck4p6WEKF8GnE/wrt3CpibGWQnwzNcSmJzJLUuJ7uLyyUtAzP0goM+Ir3weyNJuw -lFHbi71//IjccrHvWKK3J2uCnUemxuvXzsBw/1bQiR4AmpFc6wSMJnjJK6ALZ55W -IYPVz99L7lWzyF8Y3O5KLHwEeMlqZ1ny8Aa13r76UR4wZmXVRrsp2MRudtSLrqUU -W1VanZCHku143qNbrZeDMyYGY6YnZ+kCtngZg7fxims+2Hum1HP9aqTlxoA34IiQ -tXcDHn6Ftdpo2ZwwfswP49rkBbHKs6WAKc4AEFuHTbF0lLCBuf6fY6Nli3oYbO+B -MqZ9mRoVNGl65F5U2ToCVvVJ5i19oAJx8ylfUyDYra7w2Yo06dmg7UGImaEX3FTW -pvoDZmE/WOv+OFuD+yNzScMPHfP/mDuoXMertzNrZJJYTogT1xeXBtKWc1qieBrk -HF4oIW6UEJI+rv0f8HMjS+SLNZOXlZodiBVdkwZBbZ75h7ZoDbsFAAnEqcQ/YAge -PFTpcMxFiB45J3LAtIQthZRJgpHgfSuOBpwDS970erZB1w== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-seed-cbc.pem b/tests/pem/pkcs/rsa-seed-cbc.pem deleted file mode 100644 index e2455e7c..00000000 --- a/tests/pem/pkcs/rsa-seed-cbc.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: SEED-CBC,31E608E58FA8E09419F928D79A55AC9B - -k7uI5nfTFUi9nNSxEco8j5uj/9o/pd0X/+tQnhUEc655AKFEfILy2JkKAYSBdKSd -tPol6AgZFtdTaRxMbnaf6VGVHyU9omnp7FMtRNY5EbQLwbhVKXQVLAoOp7wVfbJ9 -iSU5Uo5VWQGYCt0CsZseeibQL2tP21gmtZxqfp38zsUwF0HvcUg+JW0CxiMYQ/1N -T48DYFIuuKXDL4Fv5zKn0IjgZHJ7dOHd0NG72Xabmccxpl3WZNkgH0HJagWKZybT -1/6Az6sWLEBvgdgFVu+Y3dx6os7Tq19I60pD+bKtjZj9+xJoFu1srpESDa4vIiFl -EsNDDlXsOivSKGkm/+eX/Oc8ge+1QfhCMno1yvl/fqXdi2nAXhomNIaZQxS8tS+t -Ms3MgsHhfWD0CMViaqolHcaMZIs+gfGpvaViEU0oLb9QdMAc0mHPodd19thawrux -Lk33sjTs2hj9hGSsF56XmMdHPXGG/mteScBOAqzboM93StgN7wDCnjry7E3H7d2F -xG8OP7pxaLbSeIaaBWBk/pw4omAMhBxWeJ9Xo0Qc7LdmsVAikjPFyapw/39+4FXu -CIwGrIj0PPut/eFu6rYOJTHkozarewGCUiILU0rPuZkJo22XZ8D2ximd3JiyujVO -OI9Q8NwB+Ry1eo0IvSYdDhiUvIT9m0JxVaWiLhmpJ2KgEZ+f70ksvzAuHJcxoc3U -6egzAUOgbxU6nFLSRtIegtwIxPb2vfGNgflHS3kXtk6bs22NdkpxGJNYBeAExcTC -CL5JMY8ew0SdD+W6Jg3+Oc+/TrGoM5ogNoij9x+PXXZClL1lOHifOGf7PnjsrWzd ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-seed-cfb.pem b/tests/pem/pkcs/rsa-seed-cfb.pem deleted file mode 100644 index 13bfb013..00000000 --- a/tests/pem/pkcs/rsa-seed-cfb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: SEED-CFB,8672C1DE1F4BA884DB37F0AF8A994FCC - -+vw6/VbJH5Of2S/afQyfQ2yz4MhyR82vyXf60vWH7qB5xuQjBUxyM+4ei8HeKTkC -5bKklX70v4oo0j8czzVZzkeSoH9ASisT1LTGomD6KwpiQhFVV7i+4aMADTuRlF10 -77hMInEXIDuS01N3/zTLJ+sEvm8nYej/BYJbyQhsQN3v/aY5AKQTyVtG2u+Qx4pq -wtDUDsmYFH/dfZJoikGlO1FQLKlIuWPIMXe2k8pV3kidMBfdeM8tyePI7YJXxDDr -0sc/nJAEbxjVsJaDOCUh3dqFQL0q6hYuyBeiY/PYvBrBzh7V+WxvhE0J3W6tlwZN -a4NDzZCnAmqKgLcfF9M+EUuLRoYv+0CBRQOuqwkhNjV5ytEObgOwEEFfCzWHGeID -/tRmfzWa5oqtbZACLtGnVm03NKRmF8OyKVHTKKh7FC11UdbWKFbkib8aNOafK10S -rTka7RGlTBh59F1MOp0Zt/siwUxyq4xqVT9R6K2GivTyijfl/iUiQlydkb+E+nwy -OghPqlb4Fz1RfW1l3fF5M2lv8+qmwkm3S7nta2iXVcdOWi6HlS3zVSN1mcZM5YQL -2JTTgNpxDTbLkQVMAroAdC08ZoLI9Ge5OXkDgpN+G1v79hcP6WvRtfbVsP0Gkqp6 -De4bG07wZBB9nCdxyxHwZRgff+0ZRAz9Jm/ezotjgrBSnh+g0gqAXGjfh3458d2a -6KEqm0RGaX9oZLRLcQhwQBbElRu+FJjhiC6X8Uik/AR5e/gMQq8l8Q3khl6vB57J -F9bNwo0dKHP6XFNA8BA/ivlnmGZKrv3j1rb6V7arQY/wpw== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa-seed-ofb.pem b/tests/pem/pkcs/rsa-seed-ofb.pem deleted file mode 100644 index 07d4ada3..00000000 --- a/tests/pem/pkcs/rsa-seed-ofb.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: SEED-OFB,28E4F629E7D1A0F23C9C80AF45928BB5 - -c8Cxs84U5Ton42kFOr5H/JWzQTMOWjDz7uGVR4AZMq5m9v+TjwN+jEL9Bwyo152c -x2sIdee34yAddLxZimopADlZKNbgAMP0j6P0idUvc4nKqDTv6DInwAdfnQBFqtIP -2P4lWobJRuqSS5EQV0eMQsaPgPL8XMyPINTJy/6+NizamyqA7FSkfvvniy9gE5ac -F2C0vU5j8B5uuctpCCRgkNbg7Bso02/aGiXgNLWkMs+XUX6vh6VmBnNsT06e+Lv7 -syrDDm39d1e/tvzA8rWXIEBiDEdfNj34kgmVbvpGzgwF0LhRnAjvPV6cOhumyGW2 -91Bw+vdLI6ngpIS0E1p0cBunHYFUVkxYpsoN/atUnk/qeKcNn4wTtn9mVfYE+/Ut -54ZU1sIBuULCKRhzzchl70iuYPsPenzY5WlEHkajVFbx1eqq7q9xRrhYFNvEriss -NPXfYZbYrBK09UDpIB8EM5pC1mjX9dyxFD+n9gLLT+wLmEx6Da37xevHwRA6ojsw -Yd2Rto/Bfk7FbBVKmv4IJDUG+xP964alQqmAk9G7xbc4D1PPHTG8p3gelRJXh+9i -s+igHv5sl2TCT5Aevo5Xmo0PqsEZuF7I3kC1QyyvWq6ui3ZQerdl95KblxdWCd8H -t8ETYzTdAEtV6ETO15RYCA/cw12oDQXZ/e2LKV8bwGCOF3BA2CMFRFq4ZPSRTnzQ -gnDcQEfcdiZm/KycfMZL74L0bTOAv1oG4vTbOTb8N/kdmHD6pV0ASh3fMMoGBCaU -i7jMzfc1QoOu5wC85dH0kuhCmD1TtAVFA3cbFXeSnAOmIw== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa.pem b/tests/pem/pkcs/rsa.pem deleted file mode 100644 index e4996c35..00000000 --- a/tests/pem/pkcs/rsa.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICXgIBAAKBgQDPmt5kitrIMyCp14MxGVSymoWnobd1M7aprIQks97bfYUtlmXl -P3KVJJ8oaMpP20QcPmASit0mpev/C17UiDhJKm5bvxI3R70Fa7zb8+7kEY5BaHxh -E9dCyIC+No/cCItPrKTidgzJY2xJWJPtzKrcJTsKYD+LVDrDTTHnlKRE/QIDAQAB -AoGBAMhiuereRFMdVpfZl54azzAeCohFhikwo02fYWVz4NaHj7bzBqOC3Hys/pso -mq79+/4vDtiXBOO7H9HsDbqjSX9HrIpEBH6GtzlCP60etw6lUfRAYx79veqfQZ+o -kB1vClqVExENgK9fZJiKLHhoZbAri6JTh8rxZASr8nvbg8iBAkEA975eI8MyP7+L -jjru/PzL5ffxC7xCgq7Vej7K99VpP2Qloh+3dXUFkkLruPHzCgXjlNFVeDWgNqCb -fJKEbN3cTQJBANaGDoVCCwQIhCFg8A4NiP0eNhBlTx5TtAhygFw/WWYX5pjy6Wx6 -Bkysdj3tjKHOrRu9tH0ovOMOOI2Z2AW1o3ECQG3rwy0u8F6kiDEFKQCK0ZUpm4PP -ddsx43on3jp0MAx2TNRQKkAtOdmZY6ldgK5TypQ/BSMe+AUE4bg18hezoIkCQQCr -kIj6YAgpUJpDi6BQzNha/pdkY3F0IqMgAlrP68YWlVTRy6uNGsYA+giSnHHVUlI1 -lnFLi5IM0Om/rWMLpemxAkEA3MwnyOTcYkjVm6/1q2D2If1T4rddCckaoQSp/GEs -XQRYOlo58UohVmf9zCCjj3gYWnk9Lo5+hgrmqDPBBBdKnw== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/pkcs/rsa.pk8 b/tests/pem/pkcs/rsa.pk8 deleted file mode 100644 index 20747bd9..00000000 --- a/tests/pem/pkcs/rsa.pk8 +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAM+a3mSK2sgzIKnX -gzEZVLKahaeht3UztqmshCSz3tt9hS2WZeU/cpUknyhoyk/bRBw+YBKK3Sal6/8L -XtSIOEkqblu/EjdHvQVrvNvz7uQRjkFofGET10LIgL42j9wIi0+spOJ2DMljbElY -k+3MqtwlOwpgP4tUOsNNMeeUpET9AgMBAAECgYEAyGK56t5EUx1Wl9mXnhrPMB4K -iEWGKTCjTZ9hZXPg1oePtvMGo4LcfKz+myiarv37/i8O2JcE47sf0ewNuqNJf0es -ikQEfoa3OUI/rR63DqVR9EBjHv296p9Bn6iQHW8KWpUTEQ2Ar19kmIoseGhlsCuL -olOHyvFkBKvye9uDyIECQQD3vl4jwzI/v4uOOu78/Mvl9/ELvEKCrtV6Psr31Wk/ -ZCWiH7d1dQWSQuu48fMKBeOU0VV4NaA2oJt8koRs3dxNAkEA1oYOhUILBAiEIWDw -Dg2I/R42EGVPHlO0CHKAXD9ZZhfmmPLpbHoGTKx2Pe2Moc6tG720fSi84w44jZnY -BbWjcQJAbevDLS7wXqSIMQUpAIrRlSmbg8912zHjeifeOnQwDHZM1FAqQC052Zlj -qV2ArlPKlD8FIx74BQThuDXyF7OgiQJBAKuQiPpgCClQmkOLoFDM2Fr+l2RjcXQi -oyACWs/rxhaVVNHLq40axgD6CJKccdVSUjWWcUuLkgzQ6b+tYwul6bECQQDczCfI -5NxiSNWbr/WrYPYh/VPit10JyRqhBKn8YSxdBFg6WjnxSiFWZ/3MIKOPeBhaeT0u -jn6GCuaoM8EEF0qf ------END PRIVATE KEY----- diff --git a/tests/pem/pkcs/x25519-encrypted.pk8 b/tests/pem/pkcs/x25519-encrypted.pk8 deleted file mode 100644 index 29ea91d0..00000000 --- a/tests/pem/pkcs/x25519-encrypted.pk8 +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIGbMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAjemFQzTzUb/QICCAAw -DAYIKoZIhvcNAgkFADAdBglghkgBZQMEAQIEEPhFOISMQdpDb6MkjW9pEkQEQP4C -Du/QGJw0fzI07h36dP6wSFeWj4Po0LD0AIcYpD8gsggm9H7huFuVv4MsXLFJWfZX -D4yrLu8Y1KC2Dc8kkZ4= ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/pkcs/x25519-pub.pem b/tests/pem/pkcs/x25519-pub.pem deleted file mode 100644 index 67d5d88f..00000000 --- a/tests/pem/pkcs/x25519-pub.pem +++ /dev/null @@ -1,3 +0,0 @@ ------BEGIN PUBLIC KEY----- -MCowBQYDK2VuAyEAk4OBwskGGOapbeWgTLKCz4XM2PzZorXOuyJQEbMmVmk= ------END PUBLIC KEY----- diff --git a/tests/pem/pubkeys/authorized_keys/all.pub b/tests/pem/pubkeys/authorized_keys/all.pub deleted file mode 100644 index 2e598c38..00000000 --- a/tests/pem/pubkeys/authorized_keys/all.pub +++ /dev/null @@ -1,11 +0,0 @@ -ssh-dss AAAAB3NzaC1kc3MAAACBAKU8/avmkFeGnSqwYG7dZnQlG+01QNaxu3F5v0NcL/SRUW7IdpUq8t14siK0mA6yjphLhOf5t8gugTEVBllP86ANSbFigH7WN3v6ydJWqm60pNhNHN//50cnNtIsXbxeq3VtsI64pkH1OJqeZDHLmu73k4T0EKOzsylSfF/wtVBJAAAAFQChpubLHViwPB+jSvUb8e4THS7PBQAAAIAJD1PMCiTCQa1xyD/NCWOajCufTOIzKAhm6l+nlBVPiKI+262XpYt127Ke4mPL8XJBizoTjSQN08uHMg/8L6W/cdO2aZ+mhkBnS1xAm83DAwqLrDraR1w/4QRFxr5Vbyy8qnejrPjTJobBN1BGsv84wHkjmoCn6pFIfkGYeATlJgAAAIAHYPU1zMVBTDWru7SNC4G2UyWGWYYLjLytBVHfQmBa51CmqrSs2kCfGLGA1ynfYENsxcJq9nsXrb4i17H5BHJFkH0g7BUDpeBeLr8gsK3WgfqWwtZsDkltObw9chUD/siK6q/dk/fSIB2Ho0inev7k68Z5ZkNI4XOwuEssAVhmwA== This is a test key! -ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBI4QIXX6Mg0NWD6OvWqb/L88sTs56hqs5sXkAh6vr9NleFczaijCUyn/9qLz/CfWg1pqj3KgOiFZ4ByT3xYfJIs= This is a test key! -ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBJZCFyqAiU2okJefOdynhpMGIakbXkkmywbUzl4jfAdCUaQg+lFDVrO5GSk4NlERd8iFqT++/fvydsCc2gkTr2H7HCLVbiEezPiqXBq0dckzBymK2LCHM9BkJtuOm4hmNA== This is a test key! -ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAFk35srteP9twCwYKvU9ovMBi77Dd6lEBPrFaMEb0CZdZ5MC3nSqflGHRWkSbUpjdPdO7cYQNpK9YXHbNSO5hbU1gFZgyiGFxwJYYz8NAjedBXMgyH4JWplK5FQm5P5cvaglItC9qkKioUXhCc67YMYBtivXlUe0PgIq6kbHTqbX6+5Nw== This is a test key! -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL0XsiFcRDp6Hpsoak8OdiiBMJhM2UKszNTxoGS7dJ++ This is a test key! -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC458k0igFgcvkrDjUKo0gIgPW0+7QEPck7/DXIpGAkHzHDTQLu7/IzxBDCL7iQhF2eQwaR/s9SXjs2DV/OT3SXM3QjJO4PS3nHkzfP7Zjqm9LGSicBgR8x5LPmxoNVA3qOInMP5xhhgbKYYusuBMAlpEgq/T9uCvLIuvRnGhBTDw== This is a test key! -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAwQCkYHef/kFhdtEwG4YZfanYY92cmDX9gqw7OE2dxMyQyj5Eyn/ztaIIERJGv2BG7TlEi8Gd83wFvSrqk4diHycQm2FbLtp258buy/PYCY3cvxYL1imUxt6aPeLphzxQpt2dSwCom6M5Dq/sxB4YV+lvVpWZEuIFzsfGtqiLO7U4x80lXC1430MtN5Z6nYTOVtktYkFJCmMSThYice6L4RHdTNejQZlmKGfLEKeR3wTwBIfLO9XFkSlHz2Uk4q/Clr0= This is a test key! -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDdxjN0+2xc7pdreBqYc/mDRC8OuWrS7wre5fEUBpylorQjbhtUVUU+Ox/6RSZbbeNg3EvcWTT7NQY71w7LGSgiNK9bgU1K1516zpvY0F2IGgx9xZvvIJVELSXQRFgIBSFesamVZvJRd5+szgq1jmMTibo9fyPJoZLPys5SFxPHDeyKUz8lzYHVmuOhzOhSjSNHQGVP0Hoe8N7dQaFU40A8JSsUh567vgjXlts13KErGaBey244oe4J+xlwzWHsigAj1DoCGMaDdSQ8WfE/BEUJq5mNEp+GxQe4hHMwbbg2RJZZ8kFRKOiCUicQkVCFA3yWao+5odcgyI03sqfnrgkb This is a test key! -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCjoUqRX9tJ6YVj+E7Y0D9oy2SCUtoLmNqovMOc/bWB+Fg8GgEQNp99XvH6p+/XDIY4Mm91Q9o1rydWnAnHKs/9LOySpOUNbbflDsFstN8ZrqqyuPiIoZqawQvYexk0/0ZyNckA9fWAKZDJom1N5DutBK55Dgq40yHkpAB6nlqdWLY8Iab0V4LKTtNBGydrdPR8A10I54kDkFxx82NOZNJ9hq7QYYJDsL5Le/fB+PqIksP5qo2lfaPJe9xtx7m4+FIJRQQOLrFef/K0tO1Zv0U5dVNHmWWhyTN4tnwoEX4pZ7YkHHemcBFiX4xt70/zpvG5cuIPMwJIA5P72w7A5ifKSoTLrkQGy7yW/ezyxrm42Ng5jNQb+jsiuQhcnU/IKip7xO1K2zxSPhcwDRRIPGGwkCfMrr5PG4EVn9PJCeW/ydQpOm4ysJay8AZxyQohP1jRasus+qUGovOHD6rjiDrg0lDpJY7Cf6EtPU/Z0GFyf5WY4952lRiawIXLi0VOAexG/s/n+eIiwTiFOtnmURjRjLJ3TlkVy/C9Iw6TBaJsF9DW/MN4BeYMSAVodVjqWJyLQc7ulbymguMuNnkhDjQ1XR0SXNw9fzT9lE+NC+EOwxysOu+y9ErV6lA8mExwtmu/a9zHUnyunXUz8ZVFh6mUhP0Tc7X/F/Q2XTTxzzC4jw== This is a test key! -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAYQDYebeGQFCnlQiNRE7r9UEbjr+DQMTdw1ZHGB2w6xD/DzKem8761GdCpqsLrGaw2D7aSIoP1B5Sz870YoVWHn6Ao7Hvm17V3Kxfn4B01GNQTM5+L26mdYs5iJNGu/ltUdc= comment for rsa/768 key -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAEAQCpX3u2NWcx7n4Hoe7/AYqLItYRwcstbTuve0yTZ6HHcwKs6RChChunSVne2fkxecuLdpiAZNrdja7sQxqL0wDi+vjWucLml0hDQ2ipPy4/849DmQeNVh11oRoUkA6HpI5oSr5LTJGpXinT/CRMP3lU4oM7GXwyOslHBJsQz3xwiZgjC9dsU06FrZLxby0noB5EkGYHWIU7TABogVrl+q8aqiFIli6oUW4QGlefQNbv1yn/P1xkk/JDpN7BZW7XX1cbAc19p+MqVuMekI34bjHMoVU5evY4WqmtfWRIoounAclCuiOue/qrYMoXwo64JrMaX19nIl65jrDqfjCtRQtWq6i9D/pTF2LzERgEkLU9xV6stIXKkcpjyErBrvlKlRHdXWhkGN1XonTK32GSPOxsDkRsyjOCrfMlTkcuOunIBKzpFWF0N9m6H6jh/mDdatvQ1t72clgTgQI1rrtxh4RzbiKThq7GEuQn5aVjsj/Z0q+qeY71t7lNF1kaaLa44kPWcmSMqv9us0U90mgSn+J/KtFnBBDzs4gQsn54BEyZUhF/qOl4FfpgzR6+KzdQRfXlGY2LFHTlPbdyJnsBlRs3ld2W3lghbNNi4VZsLt0syDdyaW2wr3atWlFsq5XxkGY7/lyRzHlWRCIAbSSZgDz/aWBBdpvg54AtIvRJysO1nZdfD0b1NLjD8oGt3hftWyUn/6/UigW36AfqgsJjHly2mpSW53lYJHktsrPfrQDNT3J/SftKpGTjU5Rwxz41JSQwEifM5LomG/MGrw5+kJGdp4GhlRSqf25lR3BRSjSI6r7ofYPGOCSc9TWjnEifv1HtcH08mzd92Bu6WXCWFpXxerf9oLSWYlZDLUl9nxdpclGaqQyyVXwFWKKUieu0+wg/u2YryrQ1JgTsAlWFYh8/So9yWyqXcwFkKpL0cWf1sRbRTuLzhUIyc31MNWyVN1P+j1HGKEveKVfGTxiaNx8qxEFlsssNVmFwHvLB7sX7P8hMXjZxevTekKLkKR+//EEQp8qwjHDlOPWm1tQPuKMHsbDcjxyXqFO6HMEJhfeV0OWK6tBMlypSjM8+8fmqFBSiJGmXM1S0v/8S6D2Q/3OrnFD5XLOsuubTYeSqJNzIaLSNvHvGk1tJRqc4qQjDRXI8ZQ+QGZJBl3ejHUM9f1cNMApCom4RfcZqvK0NTesb4OhFF7K3V8Bb6DfYaW76TtJQYtN/sGAweSrifzXZ3XaBHelCrh91kozzKrEcJYeGtUfR9o823U3pTk5bX7QvECgLuP6G5L8Lc6V8VI8iXhV6SfEVN9ecwh6nLsUHimqS5IvdynbqQ9rj3+ZhaVQiHmrF1n3jrxnEIY0IWSUdUwH5 This is a test key! diff --git a/tests/pem/pubkeys/authorized_keys/ssh_dsa_1024_openssh.pub b/tests/pem/pubkeys/authorized_keys/ssh_dsa_1024_openssh.pub deleted file mode 100755 index db98529d..00000000 --- a/tests/pem/pubkeys/authorized_keys/ssh_dsa_1024_openssh.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-dss AAAAB3NzaC1kc3MAAACBAKU8/avmkFeGnSqwYG7dZnQlG+01QNaxu3F5v0NcL/SRUW7IdpUq8t14siK0mA6yjphLhOf5t8gugTEVBllP86ANSbFigH7WN3v6ydJWqm60pNhNHN//50cnNtIsXbxeq3VtsI64pkH1OJqeZDHLmu73k4T0EKOzsylSfF/wtVBJAAAAFQChpubLHViwPB+jSvUb8e4THS7PBQAAAIAJD1PMCiTCQa1xyD/NCWOajCufTOIzKAhm6l+nlBVPiKI+262XpYt127Ke4mPL8XJBizoTjSQN08uHMg/8L6W/cdO2aZ+mhkBnS1xAm83DAwqLrDraR1w/4QRFxr5Vbyy8qnejrPjTJobBN1BGsv84wHkjmoCn6pFIfkGYeATlJgAAAIAHYPU1zMVBTDWru7SNC4G2UyWGWYYLjLytBVHfQmBa51CmqrSs2kCfGLGA1ynfYENsxcJq9nsXrb4i17H5BHJFkH0g7BUDpeBeLr8gsK3WgfqWwtZsDkltObw9chUD/siK6q/dk/fSIB2Ho0inev7k68Z5ZkNI4XOwuEssAVhmwA== This is a test key! diff --git a/tests/pem/pubkeys/authorized_keys/ssh_ecdsa_256_openssh.pub b/tests/pem/pubkeys/authorized_keys/ssh_ecdsa_256_openssh.pub deleted file mode 100755 index 703b53d2..00000000 --- a/tests/pem/pubkeys/authorized_keys/ssh_ecdsa_256_openssh.pub +++ /dev/null @@ -1 +0,0 @@ -ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBI4QIXX6Mg0NWD6OvWqb/L88sTs56hqs5sXkAh6vr9NleFczaijCUyn/9qLz/CfWg1pqj3KgOiFZ4ByT3xYfJIs= This is a test key! diff --git a/tests/pem/pubkeys/authorized_keys/ssh_ecdsa_384_openssh.pub b/tests/pem/pubkeys/authorized_keys/ssh_ecdsa_384_openssh.pub deleted file mode 100755 index e9d932ed..00000000 --- a/tests/pem/pubkeys/authorized_keys/ssh_ecdsa_384_openssh.pub +++ /dev/null @@ -1 +0,0 @@ -ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBJZCFyqAiU2okJefOdynhpMGIakbXkkmywbUzl4jfAdCUaQg+lFDVrO5GSk4NlERd8iFqT++/fvydsCc2gkTr2H7HCLVbiEezPiqXBq0dckzBymK2LCHM9BkJtuOm4hmNA== This is a test key! diff --git a/tests/pem/pubkeys/authorized_keys/ssh_ecdsa_521_openssh.pub b/tests/pem/pubkeys/authorized_keys/ssh_ecdsa_521_openssh.pub deleted file mode 100755 index b2c6e5b4..00000000 --- a/tests/pem/pubkeys/authorized_keys/ssh_ecdsa_521_openssh.pub +++ /dev/null @@ -1 +0,0 @@ -ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAFk35srteP9twCwYKvU9ovMBi77Dd6lEBPrFaMEb0CZdZ5MC3nSqflGHRWkSbUpjdPdO7cYQNpK9YXHbNSO5hbU1gFZgyiGFxwJYYz8NAjedBXMgyH4JWplK5FQm5P5cvaglItC9qkKioUXhCc67YMYBtivXlUe0PgIq6kbHTqbX6+5Nw== This is a test key! diff --git a/tests/pem/pubkeys/authorized_keys/ssh_ed25519_openssh-no_comment.pub b/tests/pem/pubkeys/authorized_keys/ssh_ed25519_openssh-no_comment.pub deleted file mode 100755 index b961d2ad..00000000 --- a/tests/pem/pubkeys/authorized_keys/ssh_ed25519_openssh-no_comment.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL0XsiFcRDp6Hpsoak8OdiiBMJhM2UKszNTxoGS7dJ++ diff --git a/tests/pem/pubkeys/authorized_keys/ssh_ed25519_openssh.pub b/tests/pem/pubkeys/authorized_keys/ssh_ed25519_openssh.pub deleted file mode 100755 index 2727b1f7..00000000 --- a/tests/pem/pubkeys/authorized_keys/ssh_ed25519_openssh.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL0XsiFcRDp6Hpsoak8OdiiBMJhM2UKszNTxoGS7dJ++ This is a test key! diff --git a/tests/pem/pubkeys/authorized_keys/ssh_rsa_1024_openssh.pub b/tests/pem/pubkeys/authorized_keys/ssh_rsa_1024_openssh.pub deleted file mode 100755 index 4882f64c..00000000 --- a/tests/pem/pubkeys/authorized_keys/ssh_rsa_1024_openssh.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC458k0igFgcvkrDjUKo0gIgPW0+7QEPck7/DXIpGAkHzHDTQLu7/IzxBDCL7iQhF2eQwaR/s9SXjs2DV/OT3SXM3QjJO4PS3nHkzfP7Zjqm9LGSicBgR8x5LPmxoNVA3qOInMP5xhhgbKYYusuBMAlpEgq/T9uCvLIuvRnGhBTDw== This is a test key! diff --git a/tests/pem/pubkeys/authorized_keys/ssh_rsa_1536_openssh.pub b/tests/pem/pubkeys/authorized_keys/ssh_rsa_1536_openssh.pub deleted file mode 100755 index d0572a34..00000000 --- a/tests/pem/pubkeys/authorized_keys/ssh_rsa_1536_openssh.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAwQCkYHef/kFhdtEwG4YZfanYY92cmDX9gqw7OE2dxMyQyj5Eyn/ztaIIERJGv2BG7TlEi8Gd83wFvSrqk4diHycQm2FbLtp258buy/PYCY3cvxYL1imUxt6aPeLphzxQpt2dSwCom6M5Dq/sxB4YV+lvVpWZEuIFzsfGtqiLO7U4x80lXC1430MtN5Z6nYTOVtktYkFJCmMSThYice6L4RHdTNejQZlmKGfLEKeR3wTwBIfLO9XFkSlHz2Uk4q/Clr0= This is a test key! diff --git a/tests/pem/pubkeys/authorized_keys/ssh_rsa_2048_openssh.pub b/tests/pem/pubkeys/authorized_keys/ssh_rsa_2048_openssh.pub deleted file mode 100755 index 9829973d..00000000 --- a/tests/pem/pubkeys/authorized_keys/ssh_rsa_2048_openssh.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDdxjN0+2xc7pdreBqYc/mDRC8OuWrS7wre5fEUBpylorQjbhtUVUU+Ox/6RSZbbeNg3EvcWTT7NQY71w7LGSgiNK9bgU1K1516zpvY0F2IGgx9xZvvIJVELSXQRFgIBSFesamVZvJRd5+szgq1jmMTibo9fyPJoZLPys5SFxPHDeyKUz8lzYHVmuOhzOhSjSNHQGVP0Hoe8N7dQaFU40A8JSsUh567vgjXlts13KErGaBey244oe4J+xlwzWHsigAj1DoCGMaDdSQ8WfE/BEUJq5mNEp+GxQe4hHMwbbg2RJZZ8kFRKOiCUicQkVCFA3yWao+5odcgyI03sqfnrgkb This is a test key! diff --git a/tests/pem/pubkeys/authorized_keys/ssh_rsa_4096_openssh.pub b/tests/pem/pubkeys/authorized_keys/ssh_rsa_4096_openssh.pub deleted file mode 100755 index e36f673d..00000000 --- a/tests/pem/pubkeys/authorized_keys/ssh_rsa_4096_openssh.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCjoUqRX9tJ6YVj+E7Y0D9oy2SCUtoLmNqovMOc/bWB+Fg8GgEQNp99XvH6p+/XDIY4Mm91Q9o1rydWnAnHKs/9LOySpOUNbbflDsFstN8ZrqqyuPiIoZqawQvYexk0/0ZyNckA9fWAKZDJom1N5DutBK55Dgq40yHkpAB6nlqdWLY8Iab0V4LKTtNBGydrdPR8A10I54kDkFxx82NOZNJ9hq7QYYJDsL5Le/fB+PqIksP5qo2lfaPJe9xtx7m4+FIJRQQOLrFef/K0tO1Zv0U5dVNHmWWhyTN4tnwoEX4pZ7YkHHemcBFiX4xt70/zpvG5cuIPMwJIA5P72w7A5ifKSoTLrkQGy7yW/ezyxrm42Ng5jNQb+jsiuQhcnU/IKip7xO1K2zxSPhcwDRRIPGGwkCfMrr5PG4EVn9PJCeW/ydQpOm4ysJay8AZxyQohP1jRasus+qUGovOHD6rjiDrg0lDpJY7Cf6EtPU/Z0GFyf5WY4952lRiawIXLi0VOAexG/s/n+eIiwTiFOtnmURjRjLJ3TlkVy/C9Iw6TBaJsF9DW/MN4BeYMSAVodVjqWJyLQc7ulbymguMuNnkhDjQ1XR0SXNw9fzT9lE+NC+EOwxysOu+y9ErV6lA8mExwtmu/a9zHUnyunXUz8ZVFh6mUhP0Tc7X/F/Q2XTTxzzC4jw== This is a test key! diff --git a/tests/pem/pubkeys/authorized_keys/ssh_rsa_768_openssh.pub b/tests/pem/pubkeys/authorized_keys/ssh_rsa_768_openssh.pub deleted file mode 100644 index babf9465..00000000 --- a/tests/pem/pubkeys/authorized_keys/ssh_rsa_768_openssh.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAYQDYebeGQFCnlQiNRE7r9UEbjr+DQMTdw1ZHGB2w6xD/DzKem8761GdCpqsLrGaw2D7aSIoP1B5Sz870YoVWHn6Ao7Hvm17V3Kxfn4B01GNQTM5+L26mdYs5iJNGu/ltUdc= comment for rsa/768 key diff --git a/tests/pem/pubkeys/authorized_keys/ssh_rsa_8192_openssh.pub b/tests/pem/pubkeys/authorized_keys/ssh_rsa_8192_openssh.pub deleted file mode 100755 index 65a15e1a..00000000 --- a/tests/pem/pubkeys/authorized_keys/ssh_rsa_8192_openssh.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAEAQCpX3u2NWcx7n4Hoe7/AYqLItYRwcstbTuve0yTZ6HHcwKs6RChChunSVne2fkxecuLdpiAZNrdja7sQxqL0wDi+vjWucLml0hDQ2ipPy4/849DmQeNVh11oRoUkA6HpI5oSr5LTJGpXinT/CRMP3lU4oM7GXwyOslHBJsQz3xwiZgjC9dsU06FrZLxby0noB5EkGYHWIU7TABogVrl+q8aqiFIli6oUW4QGlefQNbv1yn/P1xkk/JDpN7BZW7XX1cbAc19p+MqVuMekI34bjHMoVU5evY4WqmtfWRIoounAclCuiOue/qrYMoXwo64JrMaX19nIl65jrDqfjCtRQtWq6i9D/pTF2LzERgEkLU9xV6stIXKkcpjyErBrvlKlRHdXWhkGN1XonTK32GSPOxsDkRsyjOCrfMlTkcuOunIBKzpFWF0N9m6H6jh/mDdatvQ1t72clgTgQI1rrtxh4RzbiKThq7GEuQn5aVjsj/Z0q+qeY71t7lNF1kaaLa44kPWcmSMqv9us0U90mgSn+J/KtFnBBDzs4gQsn54BEyZUhF/qOl4FfpgzR6+KzdQRfXlGY2LFHTlPbdyJnsBlRs3ld2W3lghbNNi4VZsLt0syDdyaW2wr3atWlFsq5XxkGY7/lyRzHlWRCIAbSSZgDz/aWBBdpvg54AtIvRJysO1nZdfD0b1NLjD8oGt3hftWyUn/6/UigW36AfqgsJjHly2mpSW53lYJHktsrPfrQDNT3J/SftKpGTjU5Rwxz41JSQwEifM5LomG/MGrw5+kJGdp4GhlRSqf25lR3BRSjSI6r7ofYPGOCSc9TWjnEifv1HtcH08mzd92Bu6WXCWFpXxerf9oLSWYlZDLUl9nxdpclGaqQyyVXwFWKKUieu0+wg/u2YryrQ1JgTsAlWFYh8/So9yWyqXcwFkKpL0cWf1sRbRTuLzhUIyc31MNWyVN1P+j1HGKEveKVfGTxiaNx8qxEFlsssNVmFwHvLB7sX7P8hMXjZxevTekKLkKR+//EEQp8qwjHDlOPWm1tQPuKMHsbDcjxyXqFO6HMEJhfeV0OWK6tBMlypSjM8+8fmqFBSiJGmXM1S0v/8S6D2Q/3OrnFD5XLOsuubTYeSqJNzIaLSNvHvGk1tJRqc4qQjDRXI8ZQ+QGZJBl3ejHUM9f1cNMApCom4RfcZqvK0NTesb4OhFF7K3V8Bb6DfYaW76TtJQYtN/sGAweSrifzXZ3XaBHelCrh91kozzKrEcJYeGtUfR9o823U3pTk5bX7QvECgLuP6G5L8Lc6V8VI8iXhV6SfEVN9ecwh6nLsUHimqS5IvdynbqQ9rj3+ZhaVQiHmrF1n3jrxnEIY0IWSUdUwH5 This is a test key! diff --git a/tests/pem/pubkeys/ssh_dsa_1024_pkcs8.pub b/tests/pem/pubkeys/ssh_dsa_1024_pkcs8.pub deleted file mode 100755 index 40b1e3b3..00000000 --- a/tests/pem/pubkeys/ssh_dsa_1024_pkcs8.pub +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBtjCCASsGByqGSM44BAEwggEeAoGBAKU8/avmkFeGnSqwYG7dZnQlG+01QNax -u3F5v0NcL/SRUW7IdpUq8t14siK0mA6yjphLhOf5t8gugTEVBllP86ANSbFigH7W -N3v6ydJWqm60pNhNHN//50cnNtIsXbxeq3VtsI64pkH1OJqeZDHLmu73k4T0EKOz -sylSfF/wtVBJAhUAoabmyx1YsDwfo0r1G/HuEx0uzwUCgYAJD1PMCiTCQa1xyD/N -CWOajCufTOIzKAhm6l+nlBVPiKI+262XpYt127Ke4mPL8XJBizoTjSQN08uHMg/8 -L6W/cdO2aZ+mhkBnS1xAm83DAwqLrDraR1w/4QRFxr5Vbyy8qnejrPjTJobBN1BG -sv84wHkjmoCn6pFIfkGYeATlJgOBhAACgYAHYPU1zMVBTDWru7SNC4G2UyWGWYYL -jLytBVHfQmBa51CmqrSs2kCfGLGA1ynfYENsxcJq9nsXrb4i17H5BHJFkH0g7BUD -peBeLr8gsK3WgfqWwtZsDkltObw9chUD/siK6q/dk/fSIB2Ho0inev7k68Z5ZkNI -4XOwuEssAVhmwA== ------END PUBLIC KEY----- diff --git a/tests/pem/pubkeys/ssh_dsa_1024_rfc4716.pub b/tests/pem/pubkeys/ssh_dsa_1024_rfc4716.pub deleted file mode 100755 index f0c3d6f5..00000000 --- a/tests/pem/pubkeys/ssh_dsa_1024_rfc4716.pub +++ /dev/null @@ -1,12 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "1024-bit DSA, converted by miko@YUE from OpenSSH" -AAAAB3NzaC1kc3MAAACBAKU8/avmkFeGnSqwYG7dZnQlG+01QNaxu3F5v0NcL/SRUW7Idp -Uq8t14siK0mA6yjphLhOf5t8gugTEVBllP86ANSbFigH7WN3v6ydJWqm60pNhNHN//50cn -NtIsXbxeq3VtsI64pkH1OJqeZDHLmu73k4T0EKOzsylSfF/wtVBJAAAAFQChpubLHViwPB -+jSvUb8e4THS7PBQAAAIAJD1PMCiTCQa1xyD/NCWOajCufTOIzKAhm6l+nlBVPiKI+262X -pYt127Ke4mPL8XJBizoTjSQN08uHMg/8L6W/cdO2aZ+mhkBnS1xAm83DAwqLrDraR1w/4Q -RFxr5Vbyy8qnejrPjTJobBN1BGsv84wHkjmoCn6pFIfkGYeATlJgAAAIAHYPU1zMVBTDWr -u7SNC4G2UyWGWYYLjLytBVHfQmBa51CmqrSs2kCfGLGA1ynfYENsxcJq9nsXrb4i17H5BH -JFkH0g7BUDpeBeLr8gsK3WgfqWwtZsDkltObw9chUD/siK6q/dk/fSIB2Ho0inev7k68Z5 -ZkNI4XOwuEssAVhmwA== ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/pubkeys/ssh_ecdsa_256_pkcs8.pub b/tests/pem/pubkeys/ssh_ecdsa_256_pkcs8.pub deleted file mode 100755 index 9bfb613f..00000000 --- a/tests/pem/pubkeys/ssh_ecdsa_256_pkcs8.pub +++ /dev/null @@ -1,4 +0,0 @@ ------BEGIN PUBLIC KEY----- -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEjhAhdfoyDQ1YPo69apv8vzyxOznq -GqzmxeQCHq+v02V4VzNqKMJTKf/2ovP8J9aDWmqPcqA6IVngHJPfFh8kiw== ------END PUBLIC KEY----- diff --git a/tests/pem/pubkeys/ssh_ecdsa_256_rfc4716.pub b/tests/pem/pubkeys/ssh_ecdsa_256_rfc4716.pub deleted file mode 100755 index f7c3e9b9..00000000 --- a/tests/pem/pubkeys/ssh_ecdsa_256_rfc4716.pub +++ /dev/null @@ -1,5 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "256-bit ECDSA, converted by miko@YUE from OpenSSH" -AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBI4QIXX6Mg0NWD6OvW -qb/L88sTs56hqs5sXkAh6vr9NleFczaijCUyn/9qLz/CfWg1pqj3KgOiFZ4ByT3xYfJIs= ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/pubkeys/ssh_ecdsa_384_pkcs8.pub b/tests/pem/pubkeys/ssh_ecdsa_384_pkcs8.pub deleted file mode 100755 index df2cbfb4..00000000 --- a/tests/pem/pubkeys/ssh_ecdsa_384_pkcs8.pub +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PUBLIC KEY----- -MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAElkIXKoCJTaiQl5853KeGkwYhqRteSSbL -BtTOXiN8B0JRpCD6UUNWs7kZKTg2URF3yIWpP779+/J2wJzaCROvYfscItVuIR7M -+KpcGrR1yTMHKYrYsIcz0GQm246biGY0 ------END PUBLIC KEY----- diff --git a/tests/pem/pubkeys/ssh_ecdsa_384_rfc4716.pub b/tests/pem/pubkeys/ssh_ecdsa_384_rfc4716.pub deleted file mode 100755 index 8f1530e9..00000000 --- a/tests/pem/pubkeys/ssh_ecdsa_384_rfc4716.pub +++ /dev/null @@ -1,6 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "384-bit ECDSA, converted by miko@YUE from OpenSSH" -AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBJZCFyqAiU2okJefOd -ynhpMGIakbXkkmywbUzl4jfAdCUaQg+lFDVrO5GSk4NlERd8iFqT++/fvydsCc2gkTr2H7 -HCLVbiEezPiqXBq0dckzBymK2LCHM9BkJtuOm4hmNA== ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/pubkeys/ssh_ecdsa_521_pkcs8.pub b/tests/pem/pubkeys/ssh_ecdsa_521_pkcs8.pub deleted file mode 100755 index a84b585b..00000000 --- a/tests/pem/pubkeys/ssh_ecdsa_521_pkcs8.pub +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBZN+bK7Xj/bcAsGCr1PaLzAYu+w3e -pRAT6xWjBG9AmXWeTAt50qn5Rh0VpEm1KY3T3Tu3GEDaSvWFx2zUjuYW1NYBWYMo -hhccCWGM/DQI3nQVzIMh+CVqZSuRUJuT+XL2oJSLQvapCoqFF4QnOu2DGAbYr15V -HtD4CKupGx06m1+vuTc= ------END PUBLIC KEY----- diff --git a/tests/pem/pubkeys/ssh_ecdsa_521_rfc4716.pub b/tests/pem/pubkeys/ssh_ecdsa_521_rfc4716.pub deleted file mode 100755 index dd00a57c..00000000 --- a/tests/pem/pubkeys/ssh_ecdsa_521_rfc4716.pub +++ /dev/null @@ -1,7 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "521-bit ECDSA, converted by miko@YUE from OpenSSH" -AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAFk35srteP9twCwYK -vU9ovMBi77Dd6lEBPrFaMEb0CZdZ5MC3nSqflGHRWkSbUpjdPdO7cYQNpK9YXHbNSO5hbU -1gFZgyiGFxwJYYz8NAjedBXMgyH4JWplK5FQm5P5cvaglItC9qkKioUXhCc67YMYBtivXl -Ue0PgIq6kbHTqbX6+5Nw== ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/pubkeys/ssh_ed25519_rfc4716.pub b/tests/pem/pubkeys/ssh_ed25519_rfc4716.pub deleted file mode 100755 index 7a6fec19..00000000 --- a/tests/pem/pubkeys/ssh_ed25519_rfc4716.pub +++ /dev/null @@ -1,4 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "256-bit ED25519, converted by miko@YUE from OpenSSH" -AAAAC3NzaC1lZDI1NTE5AAAAIL0XsiFcRDp6Hpsoak8OdiiBMJhM2UKszNTxoGS7dJ++ ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/pubkeys/ssh_rsa_1024_pkcs8.pub b/tests/pem/pubkeys/ssh_rsa_1024_pkcs8.pub deleted file mode 100755 index f363b207..00000000 --- a/tests/pem/pubkeys/ssh_rsa_1024_pkcs8.pub +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC458k0igFgcvkrDjUKo0gIgPW0 -+7QEPck7/DXIpGAkHzHDTQLu7/IzxBDCL7iQhF2eQwaR/s9SXjs2DV/OT3SXM3Qj -JO4PS3nHkzfP7Zjqm9LGSicBgR8x5LPmxoNVA3qOInMP5xhhgbKYYusuBMAlpEgq -/T9uCvLIuvRnGhBTDwIDAQAB ------END PUBLIC KEY----- diff --git a/tests/pem/pubkeys/ssh_rsa_1024_rfc4716.pub b/tests/pem/pubkeys/ssh_rsa_1024_rfc4716.pub deleted file mode 100755 index cb051bb4..00000000 --- a/tests/pem/pubkeys/ssh_rsa_1024_rfc4716.pub +++ /dev/null @@ -1,6 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "1024-bit RSA, converted by miko@YUE from OpenSSH" -AAAAB3NzaC1yc2EAAAADAQABAAAAgQC458k0igFgcvkrDjUKo0gIgPW0+7QEPck7/DXIpG -AkHzHDTQLu7/IzxBDCL7iQhF2eQwaR/s9SXjs2DV/OT3SXM3QjJO4PS3nHkzfP7Zjqm9LG -SicBgR8x5LPmxoNVA3qOInMP5xhhgbKYYusuBMAlpEgq/T9uCvLIuvRnGhBTDw== ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/pubkeys/ssh_rsa_1536_pkcs8.pub b/tests/pem/pubkeys/ssh_rsa_1536_pkcs8.pub deleted file mode 100755 index 05df4c67..00000000 --- a/tests/pem/pubkeys/ssh_rsa_1536_pkcs8.pub +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIHfMA0GCSqGSIb3DQEBAQUAA4HNADCByQKBwQCkYHef/kFhdtEwG4YZfanYY92c -mDX9gqw7OE2dxMyQyj5Eyn/ztaIIERJGv2BG7TlEi8Gd83wFvSrqk4diHycQm2Fb -Ltp258buy/PYCY3cvxYL1imUxt6aPeLphzxQpt2dSwCom6M5Dq/sxB4YV+lvVpWZ -EuIFzsfGtqiLO7U4x80lXC1430MtN5Z6nYTOVtktYkFJCmMSThYice6L4RHdTNej -QZlmKGfLEKeR3wTwBIfLO9XFkSlHz2Uk4q/Clr0CAwEAAQ== ------END PUBLIC KEY----- diff --git a/tests/pem/pubkeys/ssh_rsa_1536_rfc4716.pub b/tests/pem/pubkeys/ssh_rsa_1536_rfc4716.pub deleted file mode 100755 index b5ed4145..00000000 --- a/tests/pem/pubkeys/ssh_rsa_1536_rfc4716.pub +++ /dev/null @@ -1,8 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "1536-bit RSA, converted by miko@YUE from OpenSSH" -AAAAB3NzaC1yc2EAAAADAQABAAAAwQCkYHef/kFhdtEwG4YZfanYY92cmDX9gqw7OE2dxM -yQyj5Eyn/ztaIIERJGv2BG7TlEi8Gd83wFvSrqk4diHycQm2FbLtp258buy/PYCY3cvxYL -1imUxt6aPeLphzxQpt2dSwCom6M5Dq/sxB4YV+lvVpWZEuIFzsfGtqiLO7U4x80lXC1430 -MtN5Z6nYTOVtktYkFJCmMSThYice6L4RHdTNejQZlmKGfLEKeR3wTwBIfLO9XFkSlHz2Uk -4q/Clr0= ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/pubkeys/ssh_rsa_2048_pkcs8.pub b/tests/pem/pubkeys/ssh_rsa_2048_pkcs8.pub deleted file mode 100755 index 9c1695be..00000000 --- a/tests/pem/pubkeys/ssh_rsa_2048_pkcs8.pub +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3cYzdPtsXO6Xa3gamHP5 -g0QvDrlq0u8K3uXxFAacpaK0I24bVFVFPjsf+kUmW23jYNxL3Fk0+zUGO9cOyxko -IjSvW4FNStedes6b2NBdiBoMfcWb7yCVRC0l0ERYCAUhXrGplWbyUXefrM4KtY5j -E4m6PX8jyaGSz8rOUhcTxw3silM/Jc2B1ZrjoczoUo0jR0BlT9B6HvDe3UGhVONA -PCUrFIeeu74I15bbNdyhKxmgXstuOKHuCfsZcM1h7IoAI9Q6AhjGg3UkPFnxPwRF -CauZjRKfhsUHuIRzMG24NkSWWfJBUSjoglInEJFQhQN8lmqPuaHXIMiNN7Kn564J -GwIDAQAB ------END PUBLIC KEY----- diff --git a/tests/pem/pubkeys/ssh_rsa_2048_rfc4716.pub b/tests/pem/pubkeys/ssh_rsa_2048_rfc4716.pub deleted file mode 100755 index f1d63d89..00000000 --- a/tests/pem/pubkeys/ssh_rsa_2048_rfc4716.pub +++ /dev/null @@ -1,9 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "2048-bit RSA, converted by miko@YUE from OpenSSH" -AAAAB3NzaC1yc2EAAAADAQABAAABAQDdxjN0+2xc7pdreBqYc/mDRC8OuWrS7wre5fEUBp -ylorQjbhtUVUU+Ox/6RSZbbeNg3EvcWTT7NQY71w7LGSgiNK9bgU1K1516zpvY0F2IGgx9 -xZvvIJVELSXQRFgIBSFesamVZvJRd5+szgq1jmMTibo9fyPJoZLPys5SFxPHDeyKUz8lzY -HVmuOhzOhSjSNHQGVP0Hoe8N7dQaFU40A8JSsUh567vgjXlts13KErGaBey244oe4J+xlw -zWHsigAj1DoCGMaDdSQ8WfE/BEUJq5mNEp+GxQe4hHMwbbg2RJZZ8kFRKOiCUicQkVCFA3 -yWao+5odcgyI03sqfnrgkb ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/pubkeys/ssh_rsa_768_pkcs8.pub b/tests/pem/pubkeys/ssh_rsa_768_pkcs8.pub deleted file mode 100644 index d671a61c..00000000 --- a/tests/pem/pubkeys/ssh_rsa_768_pkcs8.pub +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PUBLIC KEY----- -MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhANh5t4ZAUKeVCI1ETuv1QRuOv4NAxN3D -VkcYHbDrEP8PMp6bzvrUZ0KmqwusZrDYPtpIig/UHlLPzvRihVYefoCjse+bXtXc -rF+fgHTUY1BMzn4vbqZ1izmIk0a7+W1R1wIDAQAB ------END PUBLIC KEY----- diff --git a/tests/pem/pubkeys/ssh_rsa_768_rfc4716.pub b/tests/pem/pubkeys/ssh_rsa_768_rfc4716.pub deleted file mode 100644 index fb889631..00000000 --- a/tests/pem/pubkeys/ssh_rsa_768_rfc4716.pub +++ /dev/null @@ -1,6 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "768-bit RSA, converted by miko@HIROKO from OpenSSH" -AAAAB3NzaC1yc2EAAAADAQABAAAAYQDYebeGQFCnlQiNRE7r9UEbjr+DQMTdw1ZHGB2w6x -D/DzKem8761GdCpqsLrGaw2D7aSIoP1B5Sz870YoVWHn6Ao7Hvm17V3Kxfn4B01GNQTM5+ -L26mdYs5iJNGu/ltUdc= ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/ssh/authorized_keys-invalid/ssh_ed25519_openssh-wrong_type.pub b/tests/pem/ssh/authorized_keys-invalid/ssh_ed25519_openssh-wrong_type.pub deleted file mode 100755 index 7b205387..00000000 --- a/tests/pem/ssh/authorized_keys-invalid/ssh_ed25519_openssh-wrong_type.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAC3NzaC1lZDI1NTE5AAAAIL0XsiFcRDp6Hpsoak8OdiiBMJhM2UKszNTxoGS7dJ++ diff --git a/tests/pem/ssh/authorized_keys/empty b/tests/pem/ssh/authorized_keys/empty deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/pem/ssh/authorized_keys/ssh-rsa-3des-cbc.pub b/tests/pem/ssh/authorized_keys/ssh-rsa-3des-cbc.pub deleted file mode 100644 index 3fa62405..00000000 --- a/tests/pem/ssh/authorized_keys/ssh-rsa-3des-cbc.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDOxmrbSd4tw4r+XNX6XPziEMZ47NWr405J81yZGdqhqpftvmTadMXCUi3RqrYVeRASmLQyTj2NAKB4hm024gB7ObkYD3rkeDO04J7aGEzHDKCSIH/uRavFOx9SrOVyxj2D6rBLr35KOqq8Vw6nkPTlrEit1+VK5+6hS0e1NJHm1o2o/DSTQyDV/p4tpud7VIR/rZfHBeSiwY1AfhyJFx7PiNW1cmDeT4+CGr0iIehS6j0ZSLbNQBt8ngFtcs4ihk7rB0WspTSFFF2OjAguv0lxRalIQxTFb/fQpgihdST2dCL/GZ/kN2F+iS3GrlEW8BJIchRpgmNa6UCnJxPdVu+iwCSiBEb0gBrWC3qdVpJ+5S/zRJWfsiIdyRvNQxxhi6Ok8FWEkxrRXzSbHRBErYO4RzLZ0hdglRWC5JZGGnzChxZFnLf9iCzYfn2kV6Pa6BjF0nk4XKUG8WhvpvEVG9fcH6Bb9Ua6BWGGKt8lIBhaNptAmYEmMvHx25t0f6yssME= jaeckel@draupnir diff --git a/tests/pem/ssh/authorized_keys/ssh-rsa-aes128-cbc.pub b/tests/pem/ssh/authorized_keys/ssh-rsa-aes128-cbc.pub deleted file mode 100644 index 88864aa1..00000000 --- a/tests/pem/ssh/authorized_keys/ssh-rsa-aes128-cbc.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCxRCdPxlhZhS03U/Y6Fv5vR/AaBpGi1UKaH5cyfNGp75ywZJYWcXzp7fCesPwdTzDakqK31XMGQqGlavfj7AkW++iXC9aVmACg/RQeoSHCJotSeBnJZH+MTGJ1iskcfmzDiEOAqzWegh8hakj4RQQKznvhqoZ31B4K+4g7Hwu+srnPjQabDDmV2JoF8Ns7kAA4Uq+dJTaRJasJmPR5Kz3Gy1hWwTZ92LWdhCiNAM2bLLcERpTaB8FG+J8qNqrUp41I4u4B8zZPPZVK0NnYqAZt472CywnfRRFoZgM0zBw01w26manTvyFOadFngPOlvmu9smioKVU3FIlz/GKQn9U9WqMRURu7Vw2W7FwSBfq/ssfXAa8OkQIQHaq/+MOSt7hwkXKY9XgmHlN6ob6hoIql+rEHjxnpwXzl9aNiSEqqFMGBpvyXeUhjcCYFPsNyxshjNdMcKk9MrRQLPrSWP8uNTO7UZxktSBAgIoRJt3LZjkNm/2zzR1icP6NeJZLe+H0= jaeckel@draupnir diff --git a/tests/pem/ssh/authorized_keys/ssh-rsa-aes128-ctr.pub b/tests/pem/ssh/authorized_keys/ssh-rsa-aes128-ctr.pub deleted file mode 100644 index 270b6dff..00000000 --- a/tests/pem/ssh/authorized_keys/ssh-rsa-aes128-ctr.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC4y4UcYFe6sz/jLqBIgCoZWTneQ+NCOHz7+r6AgY8CJdt+osvXEv3FzpuSjrMkkY9ftcn/NWv3r6EFD4JuNzPecjqiSnunCM6v1+uOAsmYI8S3YmUoRAZOWhEgWsf/4QWj3cjNcJo0MPTYfJsM1LgXt/g85tRy1KsdifHSiJcgyK4piGqJYdw0BiUKd1Gj+KwglddbVEVqZDoaUYo/Wun10RAVzcgAWhglrbQLc1/U9VgY9zFIy5HOjJ1g87DQg2ZycP3clyLbR/RuHK6zyfuXna7yAqG4Eddtr1JBYWqCndBik5+unzD0vP2nNVHlvnQjzYfVxHcsP5X52LhI45GDfJZtbLsT14DYe9tXiaDIyMUpuuE7s0n2M+NI+5YOoDq8hzJwY+31T4/ZybIqs6HJve8XDFD7SwbUnYTlRO31AAELxTaq/t+oCCi0fHDfw+ugFYcEVb1yjpUghKMJsH21JNVYor0wxjX0Onq1Y109bQn6lMB5iB8cMheRiz/PYmU= jaeckel@draupnir diff --git a/tests/pem/ssh/authorized_keys/ssh-rsa-aes128-gcm.pub b/tests/pem/ssh/authorized_keys/ssh-rsa-aes128-gcm.pub deleted file mode 100644 index 9d190917..00000000 --- a/tests/pem/ssh/authorized_keys/ssh-rsa-aes128-gcm.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCp8bq6umYo3MZaQ1hg2kxJgWTA0O66Gq7ynGRtdm7xsSQX18QqXikKqqhez8z5fjh1gHVT8TyLFdIFJieSvKjIAQRDOw/cWGQpfbnPzr89ePuCY6Nzu37EvrN2W7ymVfOxvAYUkS0THv1/UoY3rC++1bX2P2cgOrZMp9ITrZfzXFxaOLuB34T+Qm1seUWJJJtSJqrxrAAXYYS/xDLx7AiD1zRjjwvBoIHZO2mpLz2YeB/6XrFWREIDaicUYrCXNBwZwV5nevaGgCjHCFKsjcQIzXFV/bcppwkaPSOgNfZCS9oDKUx1wj+yuhjCVydC4q3WJzwPK3ctN2wAqJAMR7TWih3j1kfHkDbV5vOFX4QYwqEZNTi8BWblGowhRdqINzIC+tret0VcojAWuvKt1p3q53k0YvCxSp7S78duv+NfoOHEorWQuXo+5RajQ3n2j1icRa0JxVDe7e/OnxY2Xzg5RISGV2JwqX9XTjfJCF64ytCneEc8Gqnf53aFAKFH4R0= jaeckel@draupnir diff --git a/tests/pem/ssh/authorized_keys/ssh-rsa-aes192-cbc.pub b/tests/pem/ssh/authorized_keys/ssh-rsa-aes192-cbc.pub deleted file mode 100644 index c2204186..00000000 --- a/tests/pem/ssh/authorized_keys/ssh-rsa-aes192-cbc.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDtWi3Z2q4/wtt8vjC9dN4Ma20U+rjD1uxalqmWpSPRpxGi/cB0qvGz0KhvGLbQrU/8djSkjCrN3Wj+AyWMnmMEedPM7ezD/F6B2I57QnKkv8J3rEq+0gKAo+W1FsFc08m9rHDxvoSVHv+OlWtk+IU1vn6eFmptfax+1ZMlBjwwbr0MCoarP9UzXhP1wCPUGZqIJJlJxu3IR3YE/1qJ/TQtxJaMyUrMwRdH9bjjMWEhobkmLOuM2kiuMXRbolwHXsvSPwfhvDWkqzdTK07xyet5B4RJJwAVolUTturkp9jbHkv4nXhrcM22D6NoP/h5GpgraGmU+SdALypWilArhU+uRROEQFXdabMhqKkzRNl8oDG2lIv5lYjkQ2RhEvREdA+PnSwtjpjtdBxZesvdu1cQqE5MvAzlqCTqf+oNE/8AqRgEevyLwamjkOPTz+IhyQs/m9uUrY4otje8kF8RJLYhH0QCR7Tk+uHD2Gbk+MghCMnlklaGlXaXm/+Pp6i+ync= jaeckel@draupnir diff --git a/tests/pem/ssh/authorized_keys/ssh-rsa-aes192-ctr.pub b/tests/pem/ssh/authorized_keys/ssh-rsa-aes192-ctr.pub deleted file mode 100644 index 481bb9d4..00000000 --- a/tests/pem/ssh/authorized_keys/ssh-rsa-aes192-ctr.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQD6r3dSEicm7KBlQpO4xF+ZCthECwvuKaIOU3QU2VWqSsq5YpxnJbhba8NLZuc73mS1D8t2xGQHkjYO7pWzcsa3YJAKL5NC+qtc98Pi/bbW6BrXfqnajU1IVyOXtKJUclG6TFYMk/3xgkGqeu7NXEaUUjJNWqNnU4Gr4FHzK7vK2IGidi0SCt2Q5OypGB31/pgI9nR2tn8oFkl21911tQ5rOiM6jBEQmMgIY7Bua8ocQm+TBTHaQDA8tATQdbkqMpBjl/VaA4mByomdj6exk+/RDIwp4wg0kaCcxZq9696xy2Yq1fZx/nS5Un+lVQZc8FJ8tCGofPobjTiDiFUS5+rbbeSmVZepBgbjTuFsUndWqZ/tGbrp5tGMqz89M76yAZoOvC2z6SVzbC2JItWYAfaZHrB1THunWr9XFDrB0a+EaMu9zcab7uVuZvfSPyLWb7mjvCRZxc6WEsFSTHZfEa4yPLWTC3D9Y2SfT+P1Vj2OEIYw955DeOboJhjjmghTM= jaeckel@draupnir diff --git a/tests/pem/ssh/authorized_keys/ssh-rsa-aes256-cbc.pub b/tests/pem/ssh/authorized_keys/ssh-rsa-aes256-cbc.pub deleted file mode 100644 index 32aadb94..00000000 --- a/tests/pem/ssh/authorized_keys/ssh-rsa-aes256-cbc.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC9fAOIIsW2S5tTCLh/Bd/9v7fQBZ673gXHHk5PyGilWchnLM2RRX4xgJ3lf+iHYdHHcHJo3w3d+48iO22tdplKOmsuje2wETxQVLTQ7pOlMRDXZXA1Vnia33d9GHFoas682FXGOtzEu6lVXM6U9KsvM9JA9CD1ddHg4XhVDXrDPgrs0Dvf3GyxuUkmFioKVIh8cj20AXLiaEhMjEygs0gOwEoPAmZyswe3Kjf2muOsEqErGYZajPKG2lBJUehlBMfDEcZTsqo9lG/7HszNTXDVJ2wMTEir7S7wtcB1qO23hwfT5IC6Lz/WhLFNt6x66OzL0S5j8zjLqkQvriwMQAIj20LjUs8yvvUtcYLPXBS9G4krkUwZ8LVrZfFPOOYcY0ssJj77hIzwe3AEJ0R24guG8aYz9ZeYzmIVW7yjIS+SYNhNky+AbsKaK52ZLaeruqnU39z3diojVTNeBdG/7wPgRye09bSsgTvRSMtYqbQY1ZyE8Wb4Qtx3kNT2bs1DL3E= jaeckel@draupnir diff --git a/tests/pem/ssh/authorized_keys/ssh-rsa-aes256-ctr.pub b/tests/pem/ssh/authorized_keys/ssh-rsa-aes256-ctr.pub deleted file mode 100644 index a5ae07da..00000000 --- a/tests/pem/ssh/authorized_keys/ssh-rsa-aes256-ctr.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC1U21x/saMfUgICTl0ZFkK5KDq3eeKHtR44xkkbcSmC5zxXxUO4c0EofKLx0YMDp3U+ozUydc0ZJwVF5iXVsiGlPSkgmGntrCeT3nA9YC8rEx/EE60DPSOU7we9eG8GmR2DL5uM2bmU9kx+Bh7Q9sno7PpUufBS8CLAADdv6Dro/pVTI7FIkrNGY/SD0DQtGm0cBjM2fA1b/1lUdQdznM5T/1Yn7fx84oxhJaJHsIXpU58lovieWPq/NT7rTG34Lz+MU/Ng31mFyamsY4IFFeq9AlDNWLtjOeEMRdNxDUbTGjT4ZjZrA7SuL/fGhl++rrGLpFw0f3dnR9AdbGu5UlM+6Kg3adlCkypVgPmhF6FVpgqWsMabC/tCeuMI8ajKizPRdGxvxr2DTkTCkJEtzdLUk7ifImIdL4m1OM3NnDpjZ/WJTlkU1x75T0QIy8HafrpRIRphXrpdwyt1E/OVWEb7suhWaYKxE9xXPTsFPDJi20/rGRup+jQ78JdDm8t8vE= jaeckel@draupnir diff --git a/tests/pem/ssh/authorized_keys/ssh-rsa-aes256-gcm.pub b/tests/pem/ssh/authorized_keys/ssh-rsa-aes256-gcm.pub deleted file mode 100644 index 3f952599..00000000 --- a/tests/pem/ssh/authorized_keys/ssh-rsa-aes256-gcm.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCodvU8nAv6a9nBw2XgPchNvzcx+ITion2Xm8uo+TKetw4k99Q04iT6MT4qzhjwkUHlIA4lfSLXRphSoy27oBpYwqctveZ4i/xR3+tt0WpGDHXLrB9EiCH1nbO0jRdl0cUDArNcXvAEI1T9C88Eqh37JULulgEYjdhsE2gNirXqlDBqj/9kVjULC57YTVrz8P0H3hwMcAqXXafTm136kTNJij1itVlWDeev7EAcysNTnhKgNRLhtE+3SvWUxEBb/oV4nSWeSKFnP1vpk0faE8H2norYDJEy7NxPSIF7z57WRiRU7NnuURHSpWPVJnyf0x1lq8OrRWEf1zqPR6bkgsJ2NyovR+KQIdd73+CDWbMHza+acDjWLfWIfpMmRE5T1UlcGZnUS8j3xQ09szuJdeSVOgGUQNb3m+ixGrXMyYonMiS+9BHqVxFnJZyGCDw4l/BCM5ERLrtMQsaNo+ZTy1nm9roSt/GtMgdlom/ZOqurouWwH5oT7DjiH3mta6TBCa0= jaeckel@draupnir diff --git a/tests/pem/ssh/authorized_keys/ssh-rsa-chacha20-poly1305.pub b/tests/pem/ssh/authorized_keys/ssh-rsa-chacha20-poly1305.pub deleted file mode 100644 index cd583c34..00000000 --- a/tests/pem/ssh/authorized_keys/ssh-rsa-chacha20-poly1305.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCL+P6OOxPshBtH7Z2UuYyPAtxjKkY7iNNQkkTr1MDPpxmoT5Z2whASASlMaSYxyh8XuEoFg60atbd0LaFELALZFBaKa183NhYoDWVROzrHFoYXmwQ4P+jHboUWcbY6A0Y2WDx0RuYaKKDPff8wJZxHybjB9YtCm+wKjZJ7O8k2sFa+VIZOzYL7mbn23w6JyV4BF8T+vnYRJMXI8SP5S8Kri0uBq2dOtDd3Fg0FmCBN9JqiXf/Dwdy2rQ0aJyPf8f4eTnxesUaEkkht1LUZLS4txLXfKOeL6ddzTVsmV/uyngbC9Rd/Sq2jIU4oflimW9cdhMZP/WBlVJ2FO5NM1UwAc8o553vQIFt7cX6S4IPIjZxGenW43MJ9prOFGwOY7Jk/Ojr8pTm1DxNiYQ+S0HuyUJw9sbbjWnfA0uiER6NpJkodmkrZmv8gmDo6PWUOpLjkkDqL/hOHvE7NQ+4gYYjJmBN+O1EkYG1/mMKVshNFIbR0+CMkhXFq828yLM1C5qc= jaeckel@draupnir diff --git a/tests/pem/ssh/empty b/tests/pem/ssh/empty deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/pem/ssh/extra/dsa-private.pem b/tests/pem/ssh/extra/dsa-private.pem deleted file mode 100644 index 6b4efa4b..00000000 --- a/tests/pem/ssh/extra/dsa-private.pem +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsQAAAAdzc2gtZH -NzAAAAgQClPP2r5pBXhp0qsGBu3WZ0JRvtNUDWsbtxeb9DXC/0kVFuyHaVKvLdeLIitJgO -so6YS4Tn+bfILoExFQZZT/OgDUmxYoB+1jd7+snSVqputKTYTRzf/+dHJzbSLF28Xqt1bb -COuKZB9TianmQxy5ru95OE9BCjs7MpUnxf8LVQSQAAABUAoabmyx1YsDwfo0r1G/HuEx0u -zwUAAACACQ9TzAokwkGtccg/zQljmowrn0ziMygIZupfp5QVT4iiPtutl6WLdduynuJjy/ -FyQYs6E40kDdPLhzIP/C+lv3HTtmmfpoZAZ0tcQJvNwwMKi6w62kdcP+EERca+VW8svKp3 -o6z40yaGwTdQRrL/OMB5I5qAp+qRSH5BmHgE5SYAAACAB2D1NczFQUw1q7u0jQuBtlMlhl -mGC4y8rQVR30JgWudQpqq0rNpAnxixgNcp32BDbMXCavZ7F62+Itex+QRyRZB9IOwVA6Xg -Xi6/ILCt1oH6lsLWbA5JbTm8PXIVA/7Iiuqv3ZP30iAdh6NIp3r+5OvGeWZDSOFzsLhLLA -FYZsAAAAHwKUeNkClHjZAAAAAHc3NoLWRzcwAAAIEApTz9q+aQV4adKrBgbt1mdCUb7TVA -1rG7cXm/Q1wv9JFRbsh2lSry3XiyIrSYDrKOmEuE5/m3yC6BMRUGWU/zoA1JsWKAftY3e/ -rJ0laqbrSk2E0c3//nRyc20ixdvF6rdW2wjrimQfU4mp5kMcua7veThPQQo7OzKVJ8X/C1 -UEkAAAAVAKGm5ssdWLA8H6NK9Rvx7hMdLs8FAAAAgAkPU8wKJMJBrXHIP80JY5qMK59M4j -MoCGbqX6eUFU+Ioj7brZeli3Xbsp7iY8vxckGLOhONJA3Ty4cyD/wvpb9x07Zpn6aGQGdL -XECbzcMDCousOtpHXD/hBEXGvlVvLLyqd6Os+NMmhsE3UEay/zjAeSOagKfqkUh+QZh4BO -UmAAAAgAdg9TXMxUFMNau7tI0LgbZTJYZZhguMvK0FUd9CYFrnUKaqtKzaQJ8YsYDXKd9g -Q2zFwmr2exetviLXsfkEckWQfSDsFQOl4F4uvyCwrdaB+pbC1mwOSW05vD1yFQP+yIrqr9 -2T99IgHYejSKd6/uTrxnlmQ0jhc7C4SywBWGbAAAAAFQCYwb2dlv1ktqrIWBTO+Hn+CJ4w -RAAAABNUaGlzIGlzIGEgdGVzdCBrZXkhAQIDBAUGBw== ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/extra/dsa-public.pem b/tests/pem/ssh/extra/dsa-public.pem deleted file mode 100644 index 3367b284..00000000 --- a/tests/pem/ssh/extra/dsa-public.pem +++ /dev/null @@ -1,12 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "1024-bit DSA, converted by user@machine from OpenSSH" -AAAAB3NzaC1kc3MAAACBAKU8/avmkFeGnSqwYG7dZnQlG+01QNaxu3F5v0NcL/SRUW7Idp -Uq8t14siK0mA6yjphLhOf5t8gugTEVBllP86ANSbFigH7WN3v6ydJWqm60pNhNHN//50cn -NtIsXbxeq3VtsI64pkH1OJqeZDHLmu73k4T0EKOzsylSfF/wtVBJAAAAFQChpubLHViwPB -+jSvUb8e4THS7PBQAAAIAJD1PMCiTCQa1xyD/NCWOajCufTOIzKAhm6l+nlBVPiKI+262X -pYt127Ke4mPL8XJBizoTjSQN08uHMg/8L6W/cdO2aZ+mhkBnS1xAm83DAwqLrDraR1w/4Q -RFxr5Vbyy8qnejrPjTJobBN1BGsv84wHkjmoCn6pFIfkGYeATlJgAAAIAHYPU1zMVBTDWr -u7SNC4G2UyWGWYYLjLytBVHfQmBa51CmqrSs2kCfGLGA1ynfYENsxcJq9nsXrb4i17H5BH -JFkH0g7BUDpeBeLr8gsK3WgfqWwtZsDkltObw9chUD/siK6q/dk/fSIB2Ho0inev7k68Z5 -ZkNI4XOwuEssAVhmwA== ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/ssh/extra/ecdsa256-public.pem b/tests/pem/ssh/extra/ecdsa256-public.pem deleted file mode 100644 index f7c3e9b9..00000000 --- a/tests/pem/ssh/extra/ecdsa256-public.pem +++ /dev/null @@ -1,5 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "256-bit ECDSA, converted by miko@YUE from OpenSSH" -AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBI4QIXX6Mg0NWD6OvW -qb/L88sTs56hqs5sXkAh6vr9NleFczaijCUyn/9qLz/CfWg1pqj3KgOiFZ4ByT3xYfJIs= ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/ssh/extra/rsa-public.pem b/tests/pem/ssh/extra/rsa-public.pem deleted file mode 100644 index cb051bb4..00000000 --- a/tests/pem/ssh/extra/rsa-public.pem +++ /dev/null @@ -1,6 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "1024-bit RSA, converted by miko@YUE from OpenSSH" -AAAAB3NzaC1yc2EAAAADAQABAAAAgQC458k0igFgcvkrDjUKo0gIgPW0+7QEPck7/DXIpG -AkHzHDTQLu7/IzxBDCL7iQhF2eQwaR/s9SXjs2DV/OT3SXM3QjJO4PS3nHkzfP7Zjqm9LG -SicBgR8x5LPmxoNVA3qOInMP5xhhgbKYYusuBMAlpEgq/T9uCvLIuvRnGhBTDw== ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/ssh/ssh-rsa-3des-cbc b/tests/pem/ssh/ssh-rsa-3des-cbc deleted file mode 100644 index bad201f6..00000000 --- a/tests/pem/ssh/ssh-rsa-3des-cbc +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACDNkZXMtY2JjAAAABmJjcnlwdAAAABgAAAAQKPktUV4Cvg -CBrkttDwMiXwAAABgAAAABAAABlwAAAAdzc2gtcnNhAAAAAwEAAQAAAYEAzsZq20neLcOK -/lzV+lz84hDGeOzVq+NOSfNcmRnaoaqX7b5k2nTFwlIt0aq2FXkQEpi0Mk49jQCgeIZtNu -IAezm5GA965HgztOCe2hhMxwygkiB/7kWrxTsfUqzlcsY9g+qwS69+SjqqvFcOp5D05axI -rdflSufuoUtHtTSR5taNqPw0k0Mg1f6eLabne1SEf62XxwXkosGNQH4ciRcez4jVtXJg3k -+Pghq9IiHoUuo9GUi2zUAbfJ4BbXLOIoZO6wdFrKU0hRRdjowILr9JcUWpSEMUxW/30KYI -oXUk9nQi/xmf5Ddhfoktxq5RFvASSHIUaYJjWulApycT3VbvosAkogRG9IAa1gt6nVaSfu -Uv80SVn7IiHckbzUMcYYujpPBVhJMa0V80mx0QRK2DuEcy2dIXYJUVguSWRhp8wocWRZy3 -/Ygs2H59pFej2ugYxdJ5OFylBvFob6bxFRvX3B+gW/VGugVhhirfJSAYWjabQJmBJjLx8d -ubdH+srLDBAAAFiJy39dzBrApRitaRntn9ZMWIfdUeQeQh6tisJGwS4X394IkncfmvQ3TH -dtnRb/YCk7Rwpu1/p4cpgczfynob2PUM2Uwl0PnV784eiAyGtwI8mCyMV26GqbZsqm6vSt -KjX+1k8XuXee7beECUuNKaMBn966ZcDRKaVlEeo5JzvvzGfXV0cWtqFYonwbZ4MAnMg2iv -v2YXhHhnNwXAoUnkyznsmLUSmR4RXcEBAwKwFYbypP/u3PLrEqg1HwEZTiyx2yJqRxuH/Q -esOFkwWr6uOh1Rv9ZgXDAswsRHVC0V2wHL0yN+hZk04eiOweIDa4vrz9R5IYEzwP7iidAr -m5FNxVCb5w0af5/2OwJPwjM3APV7QAj0JW0cfulsHdGaRFpJOWRFXM6adQInw7G0kpI7Nj -HGj3udqaQz/T2joLH5wCPL3oog3VQmyP8xeSNgobPZIRDV15dMyTILs+6pq9plvMmtb2Ud -idU+P6ClVh536WsV5R1t54bETXau3vHXuvcLRmSWFfWpgvk88teP30w6IKqQcE7qvjHJo8 -jT1es+fxwxjArW44HvDJgyzOvwowP81yKxTbuSKaJS3ZMFZ1j6O2FGaDXBiohU06h2WSwv -JYoLdkLUsPyF4pWVLW/aXBLho/rPDsd5MnRA1xaLARVoLBULi4axyotg/cysmWchduO8tE -0Uwh18LJcYsdGqEsxyMx6kZimKanRi8SBoH2YvGQywyshamUIlq45CwizlkKf2CD7Ld0NF -0kNMrZnWtmCMfH0aqvbsWBZwBFdb25PoxyBt8oVcskWgjgC1W+6D6nEAM1ZqWHETUSS+Fr -UxwXApoOp1C7LT+B+W67qPZVC+ZmA52fxfSCSbErdqEohTHU0lC62LkU5aW9AKxfib0Tw2 -2Us6HkuhIez/5bNtCI9N5sRvmarKRoQJT8isE31Yh+SQSIDUPXFmT5fJP5/J+XG5pATCwI -p/PM2DNw9LGQno2sPKFAvstbSHWhl0lPSzbYdDi0gwdyZyAsdyWSsdZgBWobH//vD1t2xL -05MTlfkZX4XBmTDECxWw5rNwV1DBraq6YfBdUxFGOx0wvGR/9Xebk7lDCoLeSAs8LhYxP0 -XH/MBVGkO+SovW7iI7Itgyer6XTdVmPid6UrCqmx51LLSgK9QqvLd2eyAejpA35Os+Lqpx -iZZ3jzbVfmYbDLgsTs9UI65a+/McGPrqZkp6zyjfM/l9SEZGreBMZfD5tjVYtQBE7Y6jGz -LqyeQTsWHH6EoyIX8k9l6FAi3pdrCY6vHrkb3WKuWLkQ5KKYcNu773fkYA/S8//XYdNIg/ -pkQ3F7x6Lemjd/spyfGnc06Z1SeEAbAJg17YHERl6LTIwuUjvr7UHNpCXERT7PfTpT2+kg -yuATsVT86YCboBd4/ZV02hY1f15c1de+qNym49GzNHdhc4O+S7keD11V9gHEGw6N9EZYNK -FkwRYhQQ5ZoN8bQKAyotLAaiUetlewZ9/SZCAek8tg57h6KCGbVaGKtTVZjEZzMlIVJLH3 -AfaYUokbGoa+74VyYQlLRDrfTMPWQHjgFl7pOIXFxrwoULExi4MA5DbsJskP/OLFbHPu6P -psGkIOewNkZ1O2tZ7+5HM2A5AUjcCcPFMVizapC0rOOXY++xadBM8tLkjiSuffnkar+sTj -xEbj/hDqcLCskKSAk3ggnB8dj/ioJFh4WzjEIun+pEofGh4AIZ796TgS4wChZ66ii0i8kA -mZw7gXPxBMG/fO5DYq0S2OQiK4JKdD1igzuW5zHG+pz4as8CigtRM0RvqLm6IzoRBA9jR4 -IR/9q22S5NFllbXA8tqe1Hg9fxdbDvj2mWhrY/Pc3HiUsFKAI4JdHVMlUPa4TSQETfSTz0 -j2GoBjHI742bRQ== ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-rsa-aes128-cbc b/tests/pem/ssh/ssh-rsa-aes128-cbc deleted file mode 100644 index e8a1cf41..00000000 --- a/tests/pem/ssh/ssh-rsa-aes128-cbc +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczEyOC1jYmMAAAAGYmNyeXB0AAAAGAAAABAVV+dV9h -ZkJrhUeTxZmjrbAAAAGAAAAAEAAAGXAAAAB3NzaC1yc2EAAAADAQABAAABgQCxRCdPxlhZ -hS03U/Y6Fv5vR/AaBpGi1UKaH5cyfNGp75ywZJYWcXzp7fCesPwdTzDakqK31XMGQqGlav -fj7AkW++iXC9aVmACg/RQeoSHCJotSeBnJZH+MTGJ1iskcfmzDiEOAqzWegh8hakj4RQQK -znvhqoZ31B4K+4g7Hwu+srnPjQabDDmV2JoF8Ns7kAA4Uq+dJTaRJasJmPR5Kz3Gy1hWwT -Z92LWdhCiNAM2bLLcERpTaB8FG+J8qNqrUp41I4u4B8zZPPZVK0NnYqAZt472CywnfRRFo -ZgM0zBw01w26manTvyFOadFngPOlvmu9smioKVU3FIlz/GKQn9U9WqMRURu7Vw2W7FwSBf -q/ssfXAa8OkQIQHaq/+MOSt7hwkXKY9XgmHlN6ob6hoIql+rEHjxnpwXzl9aNiSEqqFMGB -pvyXeUhjcCYFPsNyxshjNdMcKk9MrRQLPrSWP8uNTO7UZxktSBAgIoRJt3LZjkNm/2zzR1 -icP6NeJZLe+H0AAAWQ8CTj1156lRSjdFzkpPZwCg7/4uhJSJWvQesMHmK2K0JzrPxZoqXd -2iY3jFk9PtqH6tp+M2NfD/bqvoZiDH2KceXKq0WJ5ccFbki2eO17j87R0VzuTJ2NThaayk -9BQKG0USwbWpUBc0BDFwg8WLtt+EjrtrNbkibXjMmkr62kTvFwM1bg4fW76fUNfkj4QIeS -kM+1yTu/k7KWoBeiyPn3+6Wjb93alvVHpBMB76JcrRuMANhYJn/+wlnKVwGl9hFVnzu9S+ -hTDORL3I1Wj5ANEENU9hf2Totc9pteXOjCdnNPbZPjMPZZDqHLOm1QBN7u+OosQsp9p7ej -aEeOVB7pbY0GyDzW9w3VhQ7d4xMCI2NnqEvKt6FOy8YolGITal7lqvup4OfKGW+uT1bubD -O9Yjgt7embVQhFagfzj/tTJ+pHzSYpm6cAdT+fRTmIyccOD/NyE7dgUiJpo5TPpZeBcvHS -XbcKGLKcDmHXsTjuBExT8ONT9xvintfORjAX7ghZHzr06UGokSnIfpxOjzReO89VQmO32B -CnChSj56T0+Gv9rn2miViech8VDTbaqbYuL9rX+4p5h9DRoDPPkTUb0MSPQpqa4bwcgN7F -oB4W9QlfZKbkjj8d3ZTCsIIN243Wv3ITLyKRe+WzYcf+dMzfd6qwJuescF18Vb1OYLKazr -QCCYuzOvTWhhEJuVR/NJnFrnQCOAwZfVKLcV+PVgJgvUhToN+fXdtPzzuLrI7dxy/bxC8x -C97gDCz4TAUpsbDbnFpCbKZowyVS23pAgZn0kPl+3WTbWYc+As8oIcFiUSFW/qKtK70/3O -seBkwKMa/TGMzffxc5QSH07pjgvTKnhBpHwG29PJvKzxXR9nAuGTFopCwE8ceOx5i9OkQY -0hg88fedkNqGxdccyY1hY+8h2ou7GAXxQ+bnSKDBLexJQQ6izHkgMh8iem596gjSKV0QLI -USNelPsnFe26FL9a7xB7joqRZ6nPymYmw6J68bJCNlfhRXeVvJD3b0+tz/tjoWuuzRZijM -Y5PkKLlfgtAHcGtiwRGyLrovh08w+UjJdxrz81gk2ZLqUyBKqTc4GP6L7Paf8iTiyF/mb4 -SELfUu1cqYhlbwaAdhduwqxSwH6MfI9wfNIgsawA160zfhk8eUdqwjOwb9mkLALUD0muZ3 -0ewZkx8sUYNT8E8VoFxTNmZHoc4cb6eJKfLSgMQUqH0RPI1pM17TdhSSngnUNcx0BAeXk+ -tSVmHwk4W6N0yI5BmWkwJ05x/oWG+YUIamZJMNs/k1IPsquKXXpavTBYhYu3k2sP4V7DL/ -/alCv5AXVjT1MCy7OXHDCcwAFKj38jfIzpyl6Lc3x4x5fenYZFlzAsJUSfq2Qpl3o2AzL0 -y1CxmtU8H9yyYJGP5F6AkthqppjhOJoBucEnxFsc8PWvdBVyjEdFSVZqBSWqnhNcGYFS2X -ai5R/jLSX6KZETz2pDWjNSxuIDOPfxrg/nXIxy6otRHAZ0uIBavDxoyIgzLMRwHQ1BkVMS -SX67GiwqQZiqF8SeUE7oeRJtTOvxrE0jGYogXcr4Qbr598xF3L/T4xa0qHY/43LmpMPmxo -a1vvxy5N+5JUkSYwe6MYj/w7eANuxrRcStmUY15ekH9a/NXJcRcqA3ef4PW8PxoiEMXXJu -e3dvJU/8kZxCt+WdLh+kICmsJe7jy+xEZUAH5ihfQDSOF0ZOqmv5EjzK3Gmo1GdHB92deo -Gr/MMxUPiUiOpCgq7Kgati/QYv0Ds51GcTTcAg1RVxf7U+pYtsf/FgJ2FE2x8/1sug/OE5 -vZq6csDJbr8MVbCxvFwgKsJrvR7ZYqiwyYzcJM9jMsxR4Qjwch0CIDz9LGxHQnZFGJWPab -ux81voaC7xf25eHHFV5vVvzqxwQ= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-rsa-aes128-ctr b/tests/pem/ssh/ssh-rsa-aes128-ctr deleted file mode 100644 index 27d7f3be..00000000 --- a/tests/pem/ssh/ssh-rsa-aes128-ctr +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczEyOC1jdHIAAAAGYmNyeXB0AAAAGAAAABDzq5OQvu -zc3rEi/10AsEmjAAAAGAAAAAEAAAGXAAAAB3NzaC1yc2EAAAADAQABAAABgQC4y4UcYFe6 -sz/jLqBIgCoZWTneQ+NCOHz7+r6AgY8CJdt+osvXEv3FzpuSjrMkkY9ftcn/NWv3r6EFD4 -JuNzPecjqiSnunCM6v1+uOAsmYI8S3YmUoRAZOWhEgWsf/4QWj3cjNcJo0MPTYfJsM1LgX -t/g85tRy1KsdifHSiJcgyK4piGqJYdw0BiUKd1Gj+KwglddbVEVqZDoaUYo/Wun10RAVzc -gAWhglrbQLc1/U9VgY9zFIy5HOjJ1g87DQg2ZycP3clyLbR/RuHK6zyfuXna7yAqG4Eddt -r1JBYWqCndBik5+unzD0vP2nNVHlvnQjzYfVxHcsP5X52LhI45GDfJZtbLsT14DYe9tXia -DIyMUpuuE7s0n2M+NI+5YOoDq8hzJwY+31T4/ZybIqs6HJve8XDFD7SwbUnYTlRO31AAEL -xTaq/t+oCCi0fHDfw+ugFYcEVb1yjpUghKMJsH21JNVYor0wxjX0Onq1Y109bQn6lMB5iB -8cMheRiz/PYmUAAAWQWEuXZ1W1qMXpHxOe/MjemXgxnij8gzg3474OtWiaE7q48SERJCoK -EYeMvj+1ztzAY5ExoS/YVRR/f6/qMJnkxXUazqIn3n4SkAcFmnE0GWjwchkjmrD4ZnLrX8 -0CiK2+0WvxCGnIaKRE9DyADm2J5AaYayTGcG/4nC3XFUF1TA+EjUvvN+08LhHg26VKmTFS -+iMj1PXlkvqevRdIqhOQt6xFWwaNVRkdwdSx3qwbf/P3lKxljToeEvJaz9qpurXCEeD6DW -0MAseoQpDwkJobzEemQqb7MgY41IiR8qArE8FyZr/YZVc9XvIIwAMWvCWkNguuXLFSQDUy -htcaEpNJOmpdZw9BbJyGsvc9TJad3naxHjxIfiR64ujV/DAoxO8AC8K8+1djBZ8rM5jcwa -DohEIVZJRMzHiiW1lXi3L/m09g+PJGXF+uE7RkoewHRxpWT5guEkNrAhV350b0BQDBy+E6 -7G+VL8CF+3Oj9IaKfBIBZYiXHWs2wc8u/bGNXoxkmI05P1zA84tH0l5YPBYoau7xlDNv5d -Q4DjHQKfQwn/JLA8rEaCAngh9qppc4QtHn8v0Jf/bREGCK1/z34eq9G3RTpwDUpuZmD18R -yfKXlJxexluMWCgv5Kxl4Vs/bdne7tZolN5UNgB26d9Yoql+mh59C4ZKVleR2AfblJsaDb -J4tV7k7udDwa5pwM5Bgixr2uNu55in/np8KAXQsyTQgmunqv29qm9JHVdnJ1+h+MJ2WJP7 -JiloCGCi1HjXIq7OtioNKXxO0ZgPhlzPeyx8yx2GFDYqKk/x7vComsAnY9PPM2BV+taobH -hIx2WEXAASYgF+5gJmEyMBcrG7zhYTqGN6u/EF2VvXdiseurCqeJzsUyrQ/IMOJ2ujG9MI -m+YhNF1M1aixV4o4Tx8QhVP0+JYab0sSAikO5rqfDO8F/dbErWPVU4FEo0Er/lX8f6uCXJ -eETvic6pfpUgQWLQDvdbWOeJ1lwUckEyUg6I8FlP9L7oWmXVH74rK9wb0ypoG50SugFtsN -bstu02bIlO+KKTQsw3PXvImC6NXExlU/pRyXs4qjZBry08PVraxYQsdE4SqIuVs1Hm1bHp -QCgCv6q2fdjwA09tjNmEGqJxBR6xGdAOb2VAksjedxFJreTkiB0yDYSSctHK2ikRd6YdKn -5uNLTIyEujv0Ja5ctyzghTpU16Fz21eRcENzGopn5/hX9Pb9hsgY+0sgokfqvSj8LdYB1/ -l9yO2RcuS6i/wuzmNCgI9XNjsctPOz+I8PlmnTALUms7Hpo+r4Yg9RzZ8ieAcHCumBvG4C -G/vqB1sFk4lp4eoUOl/NBf0SMqDe7e+6zzBZ2wqvaxEEU5f5kDxDLGnkMMZanCcVHdy/Zd -lXvtsXPJnBgApayCjE++o8br/3g8yG3RrGRUxPiZlaTfKSWcanqlPo6VHdJKk5cCgiF5yL -VF+tXF+h/dorwHXjin0Uh4lt33E+IevOenCnt24VLAacbo3eced+kQSgwv4+VcILZ6d5Yn -NfIcJEapYbEVOIhZ62LK5ValvshLy4+WLGtXC6PaQspZoU18v1+RzEsloEki9xVlnGeeXv -D5KoZ4LmEuhciXqK1pW+7HgdEKGrLzwv4Io8T2UyluMko9LedNPGl4LPLGkHsO1LQfblvQ -g7FJ3Sr7EswmcKIayPngzHtQsD0ertPa4ugBnBCeti3owzkrJmkAetezBp0TyBjqotbru7 -0F2ls+tKR1IpcMWTM/JoWD1pyFyUvP+OtFb8TFeDTL6l8fp/KuXKZ8wsiI2Dv+2HyHZ6uC -0Q27tMNM+nFkUpBNNCSi/g6cqlJYn03vn3VB3QJ7/oLkuXVhBjlwGQSo4VHD4MzNsVtEZZ -BBQmxT0HymwCBJvqJmNzcng4psM= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-rsa-aes128-gcm b/tests/pem/ssh/ssh-rsa-aes128-gcm deleted file mode 100644 index 8ee1f94f..00000000 --- a/tests/pem/ssh/ssh-rsa-aes128-gcm +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAAFmFlczEyOC1nY21Ab3BlbnNzaC5jb20AAAAGYmNyeXB0AA -AAGAAAABB5ei8OkMkrusZkgWjbqCYuAAAAGAAAAAEAAAGXAAAAB3NzaC1yc2EAAAADAQAB -AAABgQCp8bq6umYo3MZaQ1hg2kxJgWTA0O66Gq7ynGRtdm7xsSQX18QqXikKqqhez8z5fj -h1gHVT8TyLFdIFJieSvKjIAQRDOw/cWGQpfbnPzr89ePuCY6Nzu37EvrN2W7ymVfOxvAYU -kS0THv1/UoY3rC++1bX2P2cgOrZMp9ITrZfzXFxaOLuB34T+Qm1seUWJJJtSJqrxrAAXYY -S/xDLx7AiD1zRjjwvBoIHZO2mpLz2YeB/6XrFWREIDaicUYrCXNBwZwV5nevaGgCjHCFKs -jcQIzXFV/bcppwkaPSOgNfZCS9oDKUx1wj+yuhjCVydC4q3WJzwPK3ctN2wAqJAMR7TWih -3j1kfHkDbV5vOFX4QYwqEZNTi8BWblGowhRdqINzIC+tret0VcojAWuvKt1p3q53k0YvCx -Sp7S78duv+NfoOHEorWQuXo+5RajQ3n2j1icRa0JxVDe7e/OnxY2Xzg5RISGV2JwqX9XTj -fJCF64ytCneEc8Gqnf53aFAKFH4R0AAAWQ5y9EHIAXpjEmJgkT3EBZoRbJNUx7iN1WGbsZ -MwEbnaOPAd0InVZegth+fdNvh8tz2v8s/X/ITbskdIuLof7OCslm+J+eRJfS6ba8t8/JGD -RNxTUKZHkyrDifBJyFLuL6m36WIcimLhjNHflauwe9HzhGh+CinuyKFHuM7mhEQK42vQ4h -QTs8nisnnnL2Q2NMxpP8ZON23CPD+fxmARFaBcMpN9OhZ62NmI8TEs25Xsss6VdLAWQ4Ey -dlFss5HQvWVB/t+uyNpcLPNpIkam16l6XuX/Iesa7dRtfi67vCLswFc8F5BQF3Tzbz1LY2 -37YdMF8o3Gpt9fP2Ym93ewqMthFww0mU3S3dK45qxSsjyg2bPbjomnSQmvyAfABpc9wNLr -ixY/lgrGiYKFpanHB2K2Y+xfkP1lzuf6sJ04t54bHF/ULk+tX4W9P/4rSLmgkEgmAfphAn -0l1fkgOBXL3LLFuRhazWICa0hCmlZbJOsSut1fq5i5mzdowzdVHic3DVXJKtQIZWbwoo5g -qeelAcLgqo0JCp+kSShs6EPQR9PIhzC9PunXreT+WgFHQi4X8SbTG1NIbZu6Y9tpw+a89t -zTTWsjK95zvjeg7wIPq/G9N43bB4CYHbisVQK7E/B/bPTfTkEMra7adP/ArpyeTAyMhwY6 -4nARR5tphzq+YKbOP8RSWkDEDf0qzw2tur5SY7N9N0ay7RTnP96vIt9+47RC3dm/buRaZ6 -nGKQKgzlL4U5eVdv2pdme1HguCyZrSyBRQbxYFUNBe51QDlmOGxmG6WyFDsbOeqpFkAAMv -YVj/6S0gqZmKrt0WihIartU0TQj+uZUoYbXQ3JnnDCD8I3Wu2cGbtTPQpE1egreNt10JXh -8phGVcHhvHBPk3bNS6hMDkqQJD9a4WhaBDkTnqPPRa2UlShvKOKAMcUIfaqgNWYqZ2kGAV -OlldnEqZ+/zaPKF4a8PvVt0ZNuBJo5D6SZ9571XA+ltoCCiHQChjZv/2NQlqeaIAri9Iua -j+0ZYIlGktYdbpqOxLtB2FdgFgnE2JIAhtqLMmzTZzcIuZwrKki99wYuVGN0h9YY7gItzt -dNPbG0IwXEr+YgrBW1dMI2kpgf6cPFtW/SrhUba6RohELpdOsxv2BhV7xRN7wUxgany9qL -w7JdngbG8+q1bQl9dMDLo/bChucln4t96qCKRPTJqaRFZX48awwTmboBMRDTN/+S/5pBrm -AUDn9+RUfqe8dFsS2t1LQi/7JfQnvJKcPwtKBV6m1ZdPt3oV30MokJkiVnyWa4139ZZzD8 -bRakFze4/sxRZI1Zkj0Ahc+M9eoN5mA6/aulUdPd2H69OKrSqp9xamm9iDVJckawxdgESr -sV5FBbBBM5+99HlPfGupQXr2Su27sxnUCa86RE+JtAkk171jy8qHJ3apWHdXQyU7P52A10 -igrVQydOTAlAFR5F3KsHdngHPrgI5H2RmQiveSrxQxqBT9LtV5IcFr7tcIcBPpvy7aXnzx -wgs3WwPrRx2jXRi3avclmXkVfxc4P+IE4zhhSysYs+sQHOMcfq5UHBVo6/LSD61800GKRC -AJKQp/hpoYo54GBF9a5ZvgosCyj7ZMUY3srpf7loXPI/mW9V+iq9BYHMHaDU4m2LDWjTko -NpkHCIA1OtyTW2jbSKD9eKUMvM+bAKEFGRDQZGvqhgHoHsgZlL6MxmzfinSlaAVILF+atx -97gLXTnqa8Rxku+i9meyNIBiUdMgOj+DSQ31GM0GDud2ra/c6POaEuHJMDU80262DjCXBy -vkaLcPZD6PGncIw/x+NkG4W5dufYtxF1AgfNaRENCdwWkEA2TsnIlnittWBj22iXCKM2qd -GCJuOJJHFAqy3WClGHib+S80rZ3Wh9Rkk2ugMZnzW0WNk8U2BIiE+Wgsr+2ezBeQ ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-rsa-aes192-cbc b/tests/pem/ssh/ssh-rsa-aes192-cbc deleted file mode 100644 index 5589157a..00000000 --- a/tests/pem/ssh/ssh-rsa-aes192-cbc +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczE5Mi1jYmMAAAAGYmNyeXB0AAAAGAAAABDB9xo8KN -JMTqh/FKp7SfngAAAAGAAAAAEAAAGXAAAAB3NzaC1yc2EAAAADAQABAAABgQDtWi3Z2q4/ -wtt8vjC9dN4Ma20U+rjD1uxalqmWpSPRpxGi/cB0qvGz0KhvGLbQrU/8djSkjCrN3Wj+Ay -WMnmMEedPM7ezD/F6B2I57QnKkv8J3rEq+0gKAo+W1FsFc08m9rHDxvoSVHv+OlWtk+IU1 -vn6eFmptfax+1ZMlBjwwbr0MCoarP9UzXhP1wCPUGZqIJJlJxu3IR3YE/1qJ/TQtxJaMyU -rMwRdH9bjjMWEhobkmLOuM2kiuMXRbolwHXsvSPwfhvDWkqzdTK07xyet5B4RJJwAVolUT -turkp9jbHkv4nXhrcM22D6NoP/h5GpgraGmU+SdALypWilArhU+uRROEQFXdabMhqKkzRN -l8oDG2lIv5lYjkQ2RhEvREdA+PnSwtjpjtdBxZesvdu1cQqE5MvAzlqCTqf+oNE/8AqRgE -evyLwamjkOPTz+IhyQs/m9uUrY4otje8kF8RJLYhH0QCR7Tk+uHD2Gbk+MghCMnlklaGlX -aXm/+Pp6i+yncAAAWQyh/VzfS9ScFptUfDeJ1S5l5kiMkKuI7syfL5Y5T0DGdTTWEjYn8k -NCuNS2bgu399Ui2scGiTTWAg8zfFNFg22bg9NZT6QvNEnsFAolxgVJX2TyGBeoDor3BR2v -L1A/eVZuopBhSUxnZd7gV1UYrSoMavKHjSO2iQUVLugwSwgB4aiNACtpIQUiOCx5dsNnmz -DJj8f7vKsPJgELNHi1Ol3254I/b0qPlrO97FcW1rR4jwI6rY8JO9TfLCIVFq3aXZACPgCv -XRJFNtvnLFmfLGgccZxpdD5OD1NG11izktyNZ0VIR63fe5FepO8QeKexynxPMWaEoiWEIw -+hAXsF2Tw5coiNMVMn2jSTUKvhatO7K1hO3ugNWpEsMWDxCCxzTPSZpRw86ORvcXH4Pa6Q -zzl9y4zWuUqyqGeq/0Pl88vRlD+dkUusZ6axuZeZe/dN3/HWxhR+i3uNdLHvSsCwG0TfGR -xoS2iNfDt2M7/jcTwNO6xT3P8izLp1RmdZNfOF03MjPpGoS+WHfgNqt8QhBTMp7P71igwV -BlSGTWvQC0RbyP5E3pjo+CpMkSf5Yu68mtN82JZH6hI4Lxwboytbu7JVNcpYa6g5O1Y2I6 -+C9SwD4jneoam/kIRwuY5TfRGN/N2rzUfE07hvW10l67SbG/8+4k87o0nOnWlSaq4Rz/u3 -EORE/PeLcNZC7ztIeo83Ows6pT44TAwCjPhAzwC0vzjgyKd48AZLZ8hCSVIJm7BLQsnK4W -wB93WOWSAaxQlW7uelrIBffX2hWs3ElZaGp57bcIBJYqNG9klBUEQtkWGWkGwEdlnhrfWz -SMaTLF71v13I9u/5xx/Voaj4Ftjh42uE/+PJpyRoaf+16gCw0TWf1ouVK5OeU+EEmWC9Em -ZnUVmDiRVsSFqTOdDwzB3dhZL1gUM2HA3HdMyzcelFv+BZklXDL2Bvi3lAwpyk7gnNnwn0 -nsxFlMysP89TidlJjLfmwuFEE/J9lKRupFKQEP3wFf1jFiROKyKnQoy4xwnReaD79L83Br -RX5yquNB7DLYQWLI+n0JyllkYILgDHXmxYmAUxk0WRS/lpFzd8nnszhskyTSeGMK13HgRp -2EgVLud4w6FZg6aKaLjPogQCv/GmHQNIF4BPRuzdjYfkHIbxrrQ1TAqdy2Clnp99Ib8sRp -MmmySHjFR7vtuXeoX7fJF5NNaSoyg7b/VFpOt0B8bhQiZQvwDKs3K+7sLq77OvfBv1lO9h -UXsjL+9h2mjSWOdlg6OyG8ZG+33lrZnw/NL15mWu/pW9ME49fIeG4ohzrSlBpNGd66TWp3 -Cx46dQoc9Y2KrZ1lT+PUJQUVCj/H6+ZkZMiypL/rOW00UnPRbLIlXb5FKVey7LgKOL2mUx -JzFT8I9/QxbgbOhfjhRfMgl68D+26AYQ3ZNTM2sH6gW7Hbyzb+p/fMxJMGfZEEqdivcTL3 -HemMZDYZtf+2XJRFavMIEj6i/muTf1Qk79BDiu9YPVPx9y6cKLtNEIzR28lz0hJqvKQkc6 -XkVAUbIojWpte+raVuIrcf871jf5rDn4SHk1DiHD75qTl+8+H6ywFD/pkjU/+0fAhWzXBc -/1+xefUYLpKf46jmvA18BsjN/LZjQw5t3AOgWXW4TeKup2Itw6/XNY/Unry4wq4TcymDsx -hy6C+FpDEiEmIaLOCwDmHFulRRfaq0TMzA0ePeVUQdyCBp1uE73J453ztDa0ex9WgTug9s -Xu0AAGIfTs4LIA5btGIHrywYCraN58U6rGW0v+ZWyjVMnPRFxRRnkTUwgc/rbypJ7eouRb -hyA15qlbqc4k4Bap6+AxMj5/MdaBqA7rzOr5rNQpK4YP7Pt7JtEcyA4a1LFjHjH47u5X54 -+rgDaLZCGc+P3k4moHJXnOLPFT4= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-rsa-aes192-ctr b/tests/pem/ssh/ssh-rsa-aes192-ctr deleted file mode 100644 index 215d2ec2..00000000 --- a/tests/pem/ssh/ssh-rsa-aes192-ctr +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczE5Mi1jdHIAAAAGYmNyeXB0AAAAGAAAABBW/O0h0S -KVx2abU99tL1gHAAAAGAAAAAEAAAGXAAAAB3NzaC1yc2EAAAADAQABAAABgQDQD6r3dSEi -cm7KBlQpO4xF+ZCthECwvuKaIOU3QU2VWqSsq5YpxnJbhba8NLZuc73mS1D8t2xGQHkjYO -7pWzcsa3YJAKL5NC+qtc98Pi/bbW6BrXfqnajU1IVyOXtKJUclG6TFYMk/3xgkGqeu7NXE -aUUjJNWqNnU4Gr4FHzK7vK2IGidi0SCt2Q5OypGB31/pgI9nR2tn8oFkl21911tQ5rOiM6 -jBEQmMgIY7Bua8ocQm+TBTHaQDA8tATQdbkqMpBjl/VaA4mByomdj6exk+/RDIwp4wg0ka -CcxZq9696xy2Yq1fZx/nS5Un+lVQZc8FJ8tCGofPobjTiDiFUS5+rbbeSmVZepBgbjTuFs -UndWqZ/tGbrp5tGMqz89M76yAZoOvC2z6SVzbC2JItWYAfaZHrB1THunWr9XFDrB0a+EaM -u9zcab7uVuZvfSPyLWb7mjvCRZxc6WEsFSTHZfEa4yPLWTC3D9Y2SfT+P1Vj2OEIYw955D -eOboJhjjmghTMAAAWQse0NSR5VmqhugQbrkk7ZmhNlp9WnBn7R9ptJ1muZvCHxbTSOCEmw -rrl5vgKzQ37P1J8rn0iE1N6h1epDFOkBLuFi1tBOM1vFFHyhPXPZKwuGM2haYTeeXAuYrT -rpO/IXC9UXHU+S/eRUZg4rE1PUQH4v/f6946nNDse6v7uUreZVzO4DsdwykfnHU3zYMj8+ -MdEan3wh1jL3vPLH1dJZxQqYV+3LcJvRLBrFbSv91oyMVIr2dFitKcF5K2WvZI8zUwZ3i3 -F2yLw4eSxADn9gLT9KEzzTJ4l99oM9UPsWVZQzWJLhmQ6sLoG5cW0Roi2JlfgdqExxBQmu -6rnCI6NhiaoCUAC9GQcPAgAR17bBONB3EZJL6KWYNoHvTD97nKoCrFITXjjwprjVZS6bO1 -/oEUo+nhPkvEDzPeAugwOOFPdrKL26stJpLG+xr330I/CU95qpR2QradI0b81YnXSZqTIV -UyiiJ/rQBx60kPpO/biR26oPxF7x6n9iVLmJ0iqfdCsgQGkxsPbNwVizjBSqF4Sv/02WV8 -fyx3vDYJdDwfDBOQY091ncJlh+Snil1nnxM1pNuYOVjMadFbgexExb5kvGz1Tb+U95Twz3 -aGolD0koliRpNVUwylsdlDMqiJLD8xfg89nkEloCCwVDhF1Yym6hLf7uWnvVJIGLiaMT/N -rTbV/ywsf9rwrBCZRp3GDpEp/y1wRC7o4yYhzViI4TunUb1bJ4Pc37zeAE1fyIipo/EmwN -EbeBmCMz1QbKaE+CL+hUd5RA/LAg+CNP0WN/HSk9lWojqK5o2NWfpmeOC5THJJiZYFEDtO -RZtodlPj7x8pvAw1a8QnctZg5gzN8ac7ge3TY/eENQEHOxdB1YEkhriksL0WPgagO5j+dM -Rp/oQaXqEu4xsIhJiIEF2TRHtYtqJxXj0JYED58NoG3KsYjaHUhC/R284BZfdCT1lj1bWu -Y1zZfWVrKDpJiLs+50SO7sP7g+BDtnwnk5ZZr2oHnYrFurWAICsGbPGpx76LqfrSYpLDfr -9ElOA/OghUfs0AZuNyeDgGlhj+bLtP6pIxgb+RwqOOtyMB2pQN5hgadDf5yAVYi5CsLb32 -zgASwDOWPihZIqfwn5y+fHXjhEsRZkKkTC3iFVA/HbvZw4mrMYdt24IiurEwDYqJGULxmt -W2afy5xBLlz40FV5Mubpk6/6idnGRQD/B96aUJQ4CNKSMG3utihqqlpuK+s6yXo0furpRa -9GRM12KVqi7On//1ZKVJOMlakhtzZSXbfc3mqG02V96/yZ9L3UOo1oVi5WHkm6D+z0OEUX -XdBRyn8WUbdq1UdcEiKE1undnZwk1ndAP0Du/SdQ9GIRfyEcyPRlWdMyuSB24eCoS9RfY8 -vdzzbsOfmBiWD/QZQvYlOUuPlSgDEfqPgLyM9VK58ic19Ih78ZulLrh8acTMUwlGT+0GQX -C7i1VSGEzJTfxr+rH9qa9WN5c4zNawFOH81ScQ8D3ieq7OxDHU1mU6DbLAq1ZveCs2VQR2 -qTms8mcOViLGU9lbWWFCIEkWGWVQMxkDRf6+W80QQKUhshlq9JtEbxByj5zhzhjkhygkor -CuMOBfpim5aXJFmjqMaIFBb+alhdY/YSRDPRFzXdYQqy3jaILE33uVNYIc6ehECYDAF0kz -2cEf6WolHvzM8n9q3LEIquJXPkj3+qYVsqNm8CIMgiPuXTfyEx7uCPvKW1wwxvdIBqAP0w -qnzDd441zfFD6uUguKp/AkWLDH5rE9b8A6CYWAjh00rFaLsJkLIyrWqY+xHPExSQ90Kaae -iXS76q8dFDaroGhrsLv3aCsPS+eqVDtYDSHNYoEWFziB0apuz78KnbvmuqIW80FV+7VpqG -6yQOvj6Y6UdsGovdp3KhlLJghmQ= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-rsa-aes256-cbc b/tests/pem/ssh/ssh-rsa-aes256-cbc deleted file mode 100644 index 963a33f0..00000000 --- a/tests/pem/ssh/ssh-rsa-aes256-cbc +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABCWmdLDLN -f7X95ZBwizPe89AAAAGAAAAAEAAAGXAAAAB3NzaC1yc2EAAAADAQABAAABgQC9fAOIIsW2 -S5tTCLh/Bd/9v7fQBZ673gXHHk5PyGilWchnLM2RRX4xgJ3lf+iHYdHHcHJo3w3d+48iO2 -2tdplKOmsuje2wETxQVLTQ7pOlMRDXZXA1Vnia33d9GHFoas682FXGOtzEu6lVXM6U9Ksv -M9JA9CD1ddHg4XhVDXrDPgrs0Dvf3GyxuUkmFioKVIh8cj20AXLiaEhMjEygs0gOwEoPAm -Zyswe3Kjf2muOsEqErGYZajPKG2lBJUehlBMfDEcZTsqo9lG/7HszNTXDVJ2wMTEir7S7w -tcB1qO23hwfT5IC6Lz/WhLFNt6x66OzL0S5j8zjLqkQvriwMQAIj20LjUs8yvvUtcYLPXB -S9G4krkUwZ8LVrZfFPOOYcY0ssJj77hIzwe3AEJ0R24guG8aYz9ZeYzmIVW7yjIS+SYNhN -ky+AbsKaK52ZLaeruqnU39z3diojVTNeBdG/7wPgRye09bSsgTvRSMtYqbQY1ZyE8Wb4Qt -x3kNT2bs1DL3EAAAWQ3QlhjB3uDww9gIt8DEeBqDTe4FH1sSPr+eoRfbC4H58amBatwt64 -aYTDEguvZDjtJfaQj+ntgfbKOXKAkAn/UHncVgLk5xywyp14yGcdS3+Sk6gN1/Kicn9YlG -xLChge+O/hzIsNchii3ZkKTpe7O7rN16Td+OgDAGyF+4oVoGxZb5DMuYz4w3Q5L/fv0xYN -84twd9L20clrul3JirM/6MjVb40Wzn0ZT/I4ImhAXhCbGsKT8xx0nfBlNLcPM+toUNz28D -zsgW0IaqX51lG9rpr54g5NwZpihRxp9gxZnyAoMFm8ymhDCXszb07vZ9ezAsxbmcP2T0JA -POxsE6q7cuTVthG9yJUkNswFUTNPPWP0m0XFXv8lxtxuMrCQJLFLIBXd2tjf6l/Kjx9laI -MHDe6SYQKFAw2H2gIThqBKL7ylNx/5MbtU5xkr0iP+coSgTD21C7q7QieSSdMRnqByLTB1 -XnQnuJRRApDIqyW6lAUAMTxix/dSEOGHnyhpyrp8QR6/Wj37ld8hNqlQ3i87mr26W3Bt2Q -5PLHmInnJUzI5kRzEevNhe+LVOskX35BOP+EEYm2JMXireCF0vzqew8Ld5WQ/KdQ+fTNjI -3SF/q5YKttNehWft4USPVzog3skS+TCAKk03kE+4svdLWX6gzjL+r0woMEPZCLlu7x93cW -I3bfMta+l4nS1sDoDpVto3yHFMqEUdE98n10euUyXyHSjn7423+ZwyswLi1DMrpf56ob6y -m9TF0jLRvTTYgx62EDnrA108/pni52NmomyrhmD90NA8oRFmRum9Q5vZb/00TxlCYGL4Lt -zcEW9V9l6ChLCbXi7P8F2GPqeux54hIp/KVBdwlZjyZ2uFvT2Q5vYUQs689rg2BAocfZ6V -Ao8m5IcI3H9/3CpwggvzjROXrR4Y1cMH2af2BiPLU8n1nAiNPqfW3EJUaeLC/SJnbzUxK1 -nfvn7dmJpGz/aks34eoWtvcY+nsG1Rp2Dhk64c3CwbeCxEkUgaxDmGHc7HuMKkYZlIhRSO -b3P3/QTWklqGOEzQrvhaY1RaNsdRODHYkfyp6UYxltuiTOLazeqJZOeQNF0cuFxDzsuryN -18AwEegd3xLyiiW2TQTF8XSaOCwk+OJeapaZsffv4jVjN9VmCwkqVwNumoGHGU2aOdH/HC -fGvIwjDtlisG7ZKESTTO45c3rbCJpazt/rOVdhh7+1SXh1+4RU6rCkh3QtDptPyez7UOSc -YNt+aewwxDTgSiEofFyBb4Fq9Rj2GdkbmU9duAyc/PPfCRZO21VnERkLuBOdQKgowCv3Ah -4yxdcErNqcWs2wjdn2wpSxAipGkBSHg/R8BLsVqXs4bAm3KqzZ4dycLI0tFapuS9hX1P9n -SoD44xK+lMd0mE+XUXvVqEWF3Gq58NfA9KunejmbyHHmCh+yOzrmC1bOybnJJRTp8KjlCP -aMWrxPrsx2tKbP4dasg8T9uEORdQkl65Al4UgYkxBLVOopCIDKYk89UxR+jB3nusbe6bTO -8mdYk9hZCvpghlkutdBiOjleBOehufFkKifNgphvebngLx3dX91lorltd6kdfLptKXrj0i -SkSFiAbpwegcuV2HRpdVFWinT9DKzulEjCRuvUzxc8lpmTfYI3Vgyr65iL1tenRtj6axf4 -qHJABZR259Ne/xNjOS2aMcp/FF0SGY1vfO+6vtTfwvwCwjx8zlKRDE3jPS+NmduK+QRJM8 -+q6cnRRWDU1XZQAy3B0ApxgihvOjm/ELQ6QuOs5pNzVbOutmpKGM3t0QdrU1Ypzo130F/M -tMODrGgnU4AVkjTHmjlmBloEi4+MmDh066Z7kxfHPceUgKWe65ZKwd6yh1PLDWjZqQdFWx -eWCjUisXuycPXKv3NwZF4Q4OaKM= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-rsa-aes256-ctr b/tests/pem/ssh/ssh-rsa-aes256-ctr deleted file mode 100644 index 55d4221f..00000000 --- a/tests/pem/ssh/ssh-rsa-aes256-ctr +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABBvGz8ruh -raz2/OX5A1AWiAAAAAGAAAAAEAAAGXAAAAB3NzaC1yc2EAAAADAQABAAABgQC1U21x/saM -fUgICTl0ZFkK5KDq3eeKHtR44xkkbcSmC5zxXxUO4c0EofKLx0YMDp3U+ozUydc0ZJwVF5 -iXVsiGlPSkgmGntrCeT3nA9YC8rEx/EE60DPSOU7we9eG8GmR2DL5uM2bmU9kx+Bh7Q9sn -o7PpUufBS8CLAADdv6Dro/pVTI7FIkrNGY/SD0DQtGm0cBjM2fA1b/1lUdQdznM5T/1Yn7 -fx84oxhJaJHsIXpU58lovieWPq/NT7rTG34Lz+MU/Ng31mFyamsY4IFFeq9AlDNWLtjOeE -MRdNxDUbTGjT4ZjZrA7SuL/fGhl++rrGLpFw0f3dnR9AdbGu5UlM+6Kg3adlCkypVgPmhF -6FVpgqWsMabC/tCeuMI8ajKizPRdGxvxr2DTkTCkJEtzdLUk7ifImIdL4m1OM3NnDpjZ/W -JTlkU1x75T0QIy8HafrpRIRphXrpdwyt1E/OVWEb7suhWaYKxE9xXPTsFPDJi20/rGRup+ -jQ78JdDm8t8vEAAAWQwVUSf4kf2qrekAw1uJJldgePvdD2LfTwOC/tpkbPgu84kRXKpm5O -GfUiwrKi48kBhRjXrN7HH+7rpMRXDA7zGdaGU2GZwDJJi1xaacblc0/0WWYFrkmP/wdZGb -DsNllO3XFVRqnAOEot7HLx+tGFFKSlBWNj1n93LGjF3vF7lx0mejtv//8jrH3pWYeC99T3 -6WPIn+bPcwqftfuCAFyVbizr8yGJN38aHAG/1xJPQvuYzn6lJdguDXPbL0cjNTTFNerzEO -rxcipaFA2R6M+9fQDMItPEk3GhyDc1lVaOTIYpWgNB1UpMdvrnbaGQH66A9fRhmpMDVn0Z -3hM0F/Q0tZN7ZKcZuFpDmAIciCIkNuqeyUdR3CBUXHYOGLOnSBEaEyV0vOF20Don+GsuY6 -GLax/JfmmSfvV5YJ3q4/icuvctE+HQcxiHlQc45BVgMfL4MYbPR1D9T3Xz107wGON0Kiz0 -F2BvBbaBKRIyPHoagcIsaDa+eYGAp55Xw4xpq3r1g7eMwv0kc0PrTIIZXU8yP7NOS5ILEX -ryY6Zt6ymYBwj9eKLgKsUsKaTvujLfYtWJKhhyNn4Hbrgu7UVnFSraxWXZX6rlaFKl8wc7 -yUq9/H2GHGq8lJz2FhPReouD9skTL30LGaSKvCWAttVs6k89IL90j3rCxxowMrMWcl3WMI -hQjvxLrAM54rF3CncwcFvZkQtu08dmdWTr2uiT1rQqkuRAhQwvCoIth9mFzsVR621/mJWa -GtXvyyCBze9kRKv32WrkOid+kMUX4rL3wE9+C4g6oKxMDV7zIvFM3naBGAxr7Mw3veFdZr -Tt3KyaBPvWQDTDmOWKrSyjv0ttnnphjxVgMFmAledZ1ujmErbjHXdW87PLgA/F1eqwQNEY -emyM/ekhgUoN/y//RMB4XEvfWZbd9hdGzjcQ6c6gjGnOO5Mn6xg5YDduwuKTVr59BmXKTK -/nj3NYrHD7FtZUarNFKX77YvTDmyK0m7XpwgHRLfzxV7N/sJ5JxrZUDzsAvvh8ibj5pASM -2aAk2Wj3MBuMYGi9kvkIlqk66WV+z16DVncWZvkiLP67sqzZebGmB4cYP8b0EQe/7cWQFM -+gD8KtbQ6XBrZASSAyykd69UeqVhQFwqTV0rRBsJSHcDbKVKNBhjvgpwsh8rie4J4q5L1O -Tj8rXbJqMZGnIvXmrpv0OSr4PBHVOx1yypIUlmkGDznTMlFqIclxfThehZ+2TWG/ZYJ8Km -eYXw6l0BX21UQaPT0iOOYJpPvSxP+iKrS2yavyX5QW6djuPtJE/Yhlgmkyqvx5Xuso6YNg -AaDsNJt5JnVrN8n7HKf00jpgD4Ou2Cvw1mvlDqlyUiLiM7jV6IF0atsVhHgjil8IPp5aig -yjv7Z/UzXVncQTuDV0wRx8MbPUldcnLwMyDAD+gfPtsbU187zZrUPbBB8w0StRpCNrCrS3 -Iu8xBycJOYQPLaxaQ8SgTQqBwYS/YMi1B8FZTJFkbxPB5IeRfIj+IooipDLC9FV1KV1WaO -C+FKaJkiwRyrGkjwl3B9Zbw9A73B/JZxtOEd147NIQJ38RalQaGF7jW/9JuVTDRkGX2k+N -32SWHmFB9A721s8Str1h6owH/3/CQV+OSqSK2pdI913naziOf59ahGEjFwqvjiVU5yANqH -hQZ/1HlmS6Hit35Myp81ZO8w8bYNJsKrhqyfnmCjvmWHJ0ZcBZPV14tbsusPpfZK+mxrKC -dnLCqJ7bcasKjAf5HJbKSZ4yA0QeXTxtxAIjBAFNRqlD5fJ5QtjuhNlze5jWYGFxDMnLAB -BCGlFwC4LQbREXYgof6zo2mu9pQ+aSnunwp8lQVQHBUZ/769pGKFaq4sC8fjaJl7J/aQaH -b8bgRSmFf3x6gsxQzglpjC8ZIlQ= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-rsa-aes256-gcm b/tests/pem/ssh/ssh-rsa-aes256-gcm deleted file mode 100644 index a5a06864..00000000 --- a/tests/pem/ssh/ssh-rsa-aes256-gcm +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAAFmFlczI1Ni1nY21Ab3BlbnNzaC5jb20AAAAGYmNyeXB0AA -AAGAAAABBT0YuZQhdh8Ee6y+RJqE8KAAAAGAAAAAEAAAGXAAAAB3NzaC1yc2EAAAADAQAB -AAABgQCodvU8nAv6a9nBw2XgPchNvzcx+ITion2Xm8uo+TKetw4k99Q04iT6MT4qzhjwkU -HlIA4lfSLXRphSoy27oBpYwqctveZ4i/xR3+tt0WpGDHXLrB9EiCH1nbO0jRdl0cUDArNc -XvAEI1T9C88Eqh37JULulgEYjdhsE2gNirXqlDBqj/9kVjULC57YTVrz8P0H3hwMcAqXXa -fTm136kTNJij1itVlWDeev7EAcysNTnhKgNRLhtE+3SvWUxEBb/oV4nSWeSKFnP1vpk0fa -E8H2norYDJEy7NxPSIF7z57WRiRU7NnuURHSpWPVJnyf0x1lq8OrRWEf1zqPR6bkgsJ2Ny -ovR+KQIdd73+CDWbMHza+acDjWLfWIfpMmRE5T1UlcGZnUS8j3xQ09szuJdeSVOgGUQNb3 -m+ixGrXMyYonMiS+9BHqVxFnJZyGCDw4l/BCM5ERLrtMQsaNo+ZTy1nm9roSt/GtMgdlom -/ZOqurouWwH5oT7DjiH3mta6TBCa0AAAWQMLl0uEJubwi1IQjSY15Hx/1i4apvTa3gXlGS -nncXIXXhf/RolrM9zUdeByb6X8f5r4nDsiRSY96efbe1TZXJY2lIUY4fvjvtgi1hPoH6T5 -HoYezrLMj8xtUnJUdkfMoYRFZp4Miw2rR9GJc7eXGjxK1QsXbAqpK7dO8EKVuYmoOI28wj -Kmy4qfp8FCKiBQHhEkF1CouALNBpQJ6hmvWVDIoGkgW/BUTcNPAcrjx81OXb5Cwo8BHsrs -nWjcJWLPj9HimOlgT3fs+AnOwwj1MXzRM2fikJm2hcgXmvTpgvUcy0wXUXwx6oU0VkXhaD -g767QaDN4Sl1rgOzlWlS0nj6QAAZHO2+hXFzOhP2auXdvvkzNCsT/hLhYqJsWc7iE19s0o -E/CuKVOvONkI1ZBU+K41YBQawOHNqRadaVhHp9AnzKAotbqvkZWz4GWd2FwyHupjKBm9Ga -opZHmu2sO2MLZsx0q0xQfqj9SrV0uXxkgCE328sh7O/ziy/2W9CdHjJketx9MxzwKyp1IG -Fwc6VoIF9O0nWmEqsZY07Ps1SFotpt3IvRofP2hzcURw6w6yykkjLjRkmpcU3xJR4QwhkR -dQk87dFA2Xfmlu6jxLnEVaubP3oz4aqG5eKOC3zbxq3ufg9KIA83ykcoji6Q1lupKBlCCQ -CXiDOIRTapsECwY3d9+1jpaItah9kehFvocfGibme8Df2u3j12GdrRCD+3RY16ss4F9YrW -KxnecwwWKl07ytWhuB4QeeaHVq+T1Y9q484rbuYXDnUflTSwY0djKLkrIAcXToqinJFC2h -XGKlIAkxPnt2UYmZpKbkd/UFMhJZx63rdPAOigNmLoMNsCUcGPBeV7C7pgzxtfsWFs1DLg -fKk6sYGyEpZbJ7NqpArYe2qCdH/uRVy8mkf6BJKxPFHd3kTsqjgOqw9d06FgpFmzhEIV5B -RWPF6sBrbTEVL75ksS/76Lth+bP7wEbNzJBxpLyL4jYUOX5qy9klhIH37JOC8M4ZFIXqOV -CT5objs1bgrginVhlkK1ZW3xpdO2VnMg9H1tEs2fb8wu71A8Sty26pwdST1eiijqtCXJ6t -xWdM/NFBPVMCmZgHUM00WQnQCHin3SpcGzBIOTevqeUs5PHoAwEhyNS5BIOpIKEsh0/9sv -jWYr8BlXgpWRsLlVuNC/AQLnZUQhn57ENGudeNSUk4GH/3feZ3Z8f9ZcgkiZnEmDRaL0L9 -IBlxxAb4i1iddlGbxEVgRGJT/3lp75s1ZiVaZvEWgT1iQdT0GV3/zS8/6w9f6+YUpH0A05 -dfTtevqoOjWT8ZIoPGGkPGrbYdD7ztCvVeTPpKxeOABh4qYvZIvQpN2KgyTweCHtKF8OQZ -DrJujGGZ+4mDi2c5I/958jMdsxnE4fBF1gB8a2QeVI74LnHIrSSv02SmFAO7uQbNv7S+uZ -e9oHVf9xvtbNDZpR6on/oedSXDBVuqO89L26D3PMTwyBpA9qncc89uDIqmcCp4bC15Cqq4 -HcE9/lDPz7y8qqaNHn/jqGl4UPl4LhlUrOBqdq9YyAWzJqZeKB091OXEoP9AMB5NG61+gn -Zvp8j9zWTSlp8JvziCE3DiSq6bcNG4QsAUpwYV6XAf9kGz03h7kYepAiIFjykReKbKBsTE -g7WzsqmU50+EBDXntOBtkR88SVetD1JsruPqJuPTTBIpiFMcRjFzERQejW53wIQhRcuqzd -7UlRBNzF5BprJftiu7cdSENWtJGdt/fGMnGTU0x55FeHVku7Le7vFZ5t8W4DyEsqoDROEK -ZL+q6zIPod3LvvikndEuiVmapF9TCQimz2+z6J/iR6htom3IsVFZq3NeAXVwxzb1WilQhv -inXXeZiypHxIvnOyPg5OaXJkNbrZYhzg2ZKQq4kTOMnJF1WX01DyGo8hSsiRaIDw ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-rsa-chacha20-poly1305 b/tests/pem/ssh/ssh-rsa-chacha20-poly1305 deleted file mode 100644 index e15a89f9..00000000 --- a/tests/pem/ssh/ssh-rsa-chacha20-poly1305 +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAAHWNoYWNoYTIwLXBvbHkxMzA1QG9wZW5zc2guY29tAAAABm -JjcnlwdAAAABgAAAAQxKLOSJ712VTf1CDMVxIv0AAAABgAAAABAAABlwAAAAdzc2gtcnNh -AAAAAwEAAQAAAYEAi/j+jjsT7IQbR+2dlLmMjwLcYypGO4jTUJJE69TAz6cZqE+WdsIQEg -EpTGkmMcofF7hKBYOtGrW3dC2hRCwC2RQWimtfNzYWKA1lUTs6xxaGF5sEOD/ox26FFnG2 -OgNGNlg8dEbmGiigz33/MCWcR8m4wfWLQpvsCo2SezvJNrBWvlSGTs2C+5m59t8OicleAR -fE/r52ESTFyPEj+UvCq4tLgatnTrQ3dxYNBZggTfSaol3/w8Hctq0NGicj3/H+Hk58XrFG -hJJIbdS1GS0uLcS13yjni+nXc01bJlf7sp4GwvUXf0qtoyFOKH5YplvXHYTGT/1gZVSdhT -uTTNVMAHPKOed70CBbe3F+kuCDyI2cRnp1uNzCfaazhRsDmOyZPzo6/KU5tQ8TYmEPktB7 -slCcPbG241p3wNLohEejaSZKHZpK2Zr/IJg6Oj1lDqS45JA6i/4Th7xOzUPuIGGIyZgTfj -tRJGBtf5jClbITRSG0dPgjJIVxavNvMizNQuanAAAFiNVsgHXksE3imH1jLIDUxpuRnEim -hIN8Pp7FCyKuNWirTRtopbxoutW6mxzJe7tWuuivjeK5MnPj5697HLtingE7fQEt1K8UfM -6HDQSG/MJdVrxey98FCw9FmNyIfSI3E1yUvtnoQ6FpgtWuqx3hU/gvoyzI2oIMZTOStQD0 -i21iy8IwMde0piMony+QaCZ6vq7jkCEgwzzydOIRGI3XgfbUAsgSLKRco+JH2oe+bpARs1 -bQk9EZMQSNjtl2pBfhVOaKTU9v0Q0EfeUkeu6uL6Wvp9G+C8wMmNEI84Perq8QlLA0oBIk -UvYURMHwvVX2SaToKgh4LxLVZVgxyRpxFj81sb+QV3uXOnqjaKjB6fUDdueDnQ4lEmbk/P -u04WZwbYDvaaACqAPKbRnhXXZwcCCq5u+upuMil3xW1PAM6SkB+Y/ftF35jo1mzDEELsyC -a1E0Hqoz0VZCBUUjHQFZAzA66T8TT/dokTD+mgz3EB5LvvVfsW3Fu6f+KDW7tSnQKMftTb -HV4eh1tVQTlMTO3i1kHNhrTdHU94Wp3bOVBkAWZXnLT/xXAukkaK5Z7xv2t4i/9EfT5jIJ -DE4PH60s7M2IF9pjP6GxoUFEr2w5TUGZ8d0nF/a3nqmCrLo36pm9YdD0DIsZwa1Sl3xh2a -5erjondHe9Nztl+AVqT0jjyDi8WZFYcq99rMG6gCBSwPQgJsXO8B1mS71xV1YgFmnw4os9 -sFrB2cbiuSaZa6ZEA7/ekoJ4eQA7TJJ+DfFQAEy9YjLImKWcsb2g5kNp/iTqfZCf3zvT7Y -fo49oeT7y3gepzLqD7Qq/aH39JVCQdZLwyz2dZq/OoPyzzM9X9IbGCYO7MncB92TzGD9P1 -M62nJbYDqSvhy2XMU4znv39F4GFsD+QRoMsLSpBUfWSE/2sYCxda+2i8Lt4GFcGZ+xIH+5 -5jbFx1sE4VNclxSeRl99/kmc2XOARp1p+SN7wKEXWVsp+ZyIcm9Ex/TDW2yeLR+1xg1n3K -oPsVQg4vX+JyNnlhtWqW8maBpRrJBbVWtEf2Iwa2ImSlSHI8D/KvvP/uTliu99sb/QFrzh -MBT6PC4GLgVYvfiU0ikq6W3N0ef47iuhoYzqMZzOEfujtjPhIcV5YpBwETbmm3SB96HKAe -melGalgOutWb8bbvJspuG1H9Pej7sq+RGDb+cDtTwx/NwODCB8TFmQb7ztc6hDdxVrRW2f -NREHOceRoA3N8q9XIOtwYMXxtt+3jCLWslVRGni52r8pgzjsg7g/X44h8Sgo4NEcmgnUV0 -8VGUSQ/Nm54pYZEvruiocpg8Mj+QLMzMZ5qG1RLl/gwU2se0Vh5g72o0IpiAaErVp1cMD7 -/e89SIxxa4ea5k90PYbBPOXEk6oaSs+ZTMu7MNm1Jb4+KV6SSYYqshs6c6V9PYR3Mc8bte -AN3XNSko03UWPS1AkqUemSuKhzIdI4WsuYmsS8CfuJXtfrBe1OBaOMPKOvnFS9Zq38ddV/ -DdgiY0ux1zQYXETl/ol6b/34qXuCh/7r4aIQATit5r2T6NtaCCkSK5yEwJYeO4+Zlnedxc -6kReDwwkRHjDt34p3xTh+ncdbjBrYfn5hvYOIPwvc0EqWPHb01Xc/rw87mlKV6jl8qROox -vmygQfmxJ0m2sFpDdP5EYe4n923Ssf8EuoGfLGghPZW4Q6rr2BJY2H2DAKxLorOk8o3hvQ -sJ6hd6mHhnpLaUACInjEcAjopMhbEwa2gnUDo7UeXiAve7Jtz2b5QGsMmEVsScOC+K0S1C -+FsAQrd4+QSmc4kKy7iGewFI0NZYoc86yXdabvH97VrmKoYn/Ry8xpD7TnQh6+WybF15sr -YyxZ8M85kY+unmOVE5u5featGysG8OvbmJtOG/YQj8d8sHWKS6EnXbITlJe0v9Q= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-testkey-ecdsa-521 b/tests/pem/ssh/ssh-testkey-ecdsa-521 deleted file mode 100644 index 838dc7e6..00000000 --- a/tests/pem/ssh/ssh-testkey-ecdsa-521 +++ /dev/null @@ -1,13 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABDPkTaUCD -8+sCQ1AWJVXCBTAAAAEAAAAAEAAACsAAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlz -dHA1MjEAAACFBAAn3wQoJ/ZfNuF2xsfUh8kIZ+UXjzW1vOgTqMA6bpLYN6sVccJTFII4zO -RSM+gEFymy/P4INPTcwTc0B4zjpwzcmABsNnUTf/N6DZBmcFbM0zTuZij4Ck/rXRfrVfMI -kr2oVcvqj1lKZcfKwHwK1dTHy9xHveKB4LkPl7i/VrWNDbYxOQAAARC7v80llW0VqWeSp3 -VgKXZtdSXD1XW+NDYmmbwR5cBhqqnniBUqXb+hlPc/jFo/Cb3IaLzumY8C8X4+cjQZa7i4 -os69nB/mc1FpfQLmu/7nW16mN/a14VMrZS3Ub6eO4DUYxfuSgLZ6vgBc5CKpH609Z4cpnv -lONyI3dhwq+29ruFFrccerzMoYRBLDGis2MH/U+AJEABQlwNeMp3DCY1+yAKNjz6dmzyP0 -mzkUhlTgqXCrh5lGdImK5crb+A+8QJIGkZtXz+N7rhJxKqBudMyIWls9bS7eCTkoazM9IB -3tBZvpCl2msrGxemTaeUeFWoZjlALOXgKQKN7pBMJfyTLF5Q33GDU5ZFVtyq/V0kBsFg== - ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-testkey-ecdsa-521-plain b/tests/pem/ssh/ssh-testkey-ecdsa-521-plain deleted file mode 100644 index e404925f..00000000 --- a/tests/pem/ssh/ssh-testkey-ecdsa-521-plain +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAArAAAABNlY2RzYS -1zaGEyLW5pc3RwNTIxAAAACG5pc3RwNTIxAAAAhQQAk8/IJIoDcA9yeNTV52Em3IE+4e1G -nS8BHsmAbH48ESjQljooUWSl5ZER9zzr88nR8Sd/rpQNf3wtKvD7xqok8F8A+vp9pv8jd1 -RodyVHeLKjGkL6uNki3a8fvotA1hPBjEQa/19WaSmNk3CBdsBpqltXwYgQxZn3CwS51BPo -KsAj8bMAAAEQ5btEZ+W7RGcAAAATZWNkc2Etc2hhMi1uaXN0cDUyMQAAAAhuaXN0cDUyMQ -AAAIUEAJPPyCSKA3APcnjU1edhJtyBPuHtRp0vAR7JgGx+PBEo0JY6KFFkpeWREfc86/PJ -0fEnf66UDX98LSrw+8aqJPBfAPr6fab/I3dUaHclR3iyoxpC+rjZIt2vH76LQNYTwYxEGv -9fVmkpjZNwgXbAaapbV8GIEMWZ9wsEudQT6CrAI/GzAAAAQgCRG0oaSe873pTZZRVmTaJm -1275E/qlCjN0eddd8osii6BPTICINvKU5C74bMkdR69NNxpWOxWfj3WE9grM6cVA1AAAAA -tsaWJ0b21jcnlwdAECAwQFBgc= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-testkey-ed25519 b/tests/pem/ssh/ssh-testkey-ed25519 deleted file mode 100644 index a9e02119..00000000 --- a/tests/pem/ssh/ssh-testkey-ed25519 +++ /dev/null @@ -1,8 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABAMGtBgdw -V5lwgRRqXm8vD/AAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAINmcW0NUcZtRAxOC -p99u1X65FTEP4rIyj6mp6NUxGXZuAAAAkKYfVXz5BP6ZUThjdsyEBPoeXTpKYD98yt28Ab -9kk3hSwgfK/7BWp4+Q9A6YK477kBfn8GRvfb9zHL2e/Td5Kx/hzrhjPWzfzGwaChDegWWv -yygQgdBV4ye7o7ir9KJpsqLxNQzKcy8DydcAJgVGkopFAhR77HuDTPymPFv7o+lyLIh7/v -wxHkZDd4TvKXzpGw== ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-testkey-ed25519-aesctr b/tests/pem/ssh/ssh-testkey-ed25519-aesctr deleted file mode 100644 index b7ddb839..00000000 --- a/tests/pem/ssh/ssh-testkey-ed25519-aesctr +++ /dev/null @@ -1,8 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABBYWWGgpa -+aAsoGsV6JUqJ3AAAAGAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIEVemuQ8wNLBW205 -dbGF8l0DjxP7xLIWvmollyOm+9RoAAAAkK4XJkJqpHsZ0rYuwfnZu02gpmy3GnNmexMcyU -SEtgIJNuTJbIlIn0oGBNt5xIWN6hweHq34gPvb6q9nbxgb6eS5WBFJI7+4Xng2hOrZ8rTm -WR1YJLCnw4zk8dKKDehik+K6psMb5l7JqIUvu/F95NzO+LZXErhZ2/e6v2X2mqhSelg9fm -gSe+OOWNesOUNtCQ== ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-testkey-ed25519-plain b/tests/pem/ssh/ssh-testkey-ed25519-plain deleted file mode 100644 index cec8acd9..00000000 --- a/tests/pem/ssh/ssh-testkey-ed25519-plain +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW -QyNTUxOQAAACCgWG/eiYfhjT1VUcm+IEEsJPvkfPVQG4Pj1P5z8iwYGwAAAJCLGRhrixkY -awAAAAtzc2gtZWQyNTUxOQAAACCgWG/eiYfhjT1VUcm+IEEsJPvkfPVQG4Pj1P5z8iwYGw -AAAEARECjst66ZUM0FBOHx7Kjf4kqAvQupHtxkMhs02jNeHqBYb96Jh+GNPVVRyb4gQSwk -++R89VAbg+PU/nPyLBgbAAAAC2xpYnRvbWNyeXB0AQI= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-testkey-ed25519-pub b/tests/pem/ssh/ssh-testkey-ed25519-pub deleted file mode 100644 index 92bbf5b3..00000000 --- a/tests/pem/ssh/ssh-testkey-ed25519-pub +++ /dev/null @@ -1,4 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "256-bit ED25519, converted by root@b9ac43ae19a4 from OpenSSH" -AAAAC3NzaC1lZDI1NTE5AAAAIKBYb96Jh+GNPVVRyb4gQSwk++R89VAbg+PU/nPyLBgb ----- END SSH2 PUBLIC KEY ---- diff --git a/tests/pem/ssh/ssh-testkey-rsa b/tests/pem/ssh/ssh-testkey-rsa deleted file mode 100644 index e4edbb6b..00000000 --- a/tests/pem/ssh/ssh-testkey-rsa +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABDFUUlb4r -0fS2eJ9gjh6F7ZAAAAEAAAAAEAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQCmZaJtNXja -0l6Z7uE7htLM2Zt0vPHfskpu5WIRVVf+9zdfHEAdXjVIT4wVsbNggxDoWbNJWqBWeqCHhF -ZjMqmjvVhIFpiLqCgcaT3+ulPP2DLE7zkfqntvSYvV6BCCB3aYxfQnpm+WuX5z0NNF5xQk -IcrVHtB7gfLWYY1Ec5dQuWJIMwGnrd88zBfIiEkZGse10a3v4WSy4TPYQbopJ6AURqTS+B -n1/3ImeoMEL4bGP6Jq5mmMjgbc5JKRdDYNuMV+rcGuwppCWNQzZ8DGxalcFgdzKT/ZUrNh -oG65BxQKL9yP+Jp4n/RDXx/HXSpaSWIk4sU/zhD+dSqjTAi13qv1AAAD0Ma4eNxWrYu151 -H7ydn+uxN42VtDTLZEWFMLFLHyoj4ohyxSs5GrAAIRoD2iZHqit+Y8DYAGEhYOlwRSCuSi -z1j2JhYKq1QIcrw4rPj/FwkOYa9A/kcVUcWEoUBK0pAJZYXwo7UMeoO0YnCPWbn6sgQL1S -rxKM13s6M3HVz3jIaM4e7541TIGonR/5akn0pMNYeF/M5sZmLZI7ESNRRCw7AxNmMew9xy -RhhFs+XW81tb2c9gVs7Q9NARsY5OUPeABoq2LYWrjRlhTFhMwGEJITuWNtoll9GetdjZSy -95eNKLCazQwbvw4k2LWfMrJ4GakHV7MyrrZ/EeEi88eOII16MHYhmrMSPUkwXarGDLNkJl -pWAeA7T1L+R2BMRYf2tNT1201eKtG7SpUx2yqvA6gQGEBOAl5lRnQi3yRbhJgRHNu/7SaJ -s1xEw8Ok7kCcgJDeDZwoi1wc2F21jtYi0fj9kQaGeNGgE1/LE+pwTR+c4sIcK19IQZnx45 -HV/SBsbE5hN6Et5ubvkQzqfOnchYaUq2yUA4WHm1kT7eqE3Qzn6AH4IX2RgjCQIU7Hbg3n -0Gz31TYHEDfRdWbfr+RRXBMl6AYQ4P5ONH/0wNcC9bRkwcebaOlQszS6SnwpGqSOKprLww -y1nY8kCegoNhWvRfLU5XTcJ3AXikqVQtRUno6E7Rs5UfXP0Pz9hUUQywjvDAAGwJxHwzir -UNNowV35dWF75OHK5yiEl389qz17TA/s5ZmJrDSO0nZ83NqpyhUwi96Bv5yx4lAbmKUR3k -5l7o7PYp3GOl2nbk74U+R4g34aw14oIWDwmBD9tTisz95Eqv+6sNvxnNbOec4fRoqKBlen -1EQlKZxqgpxDOXRT9FHE6AIUqUxEyTsm5rIAg2WAnEVbEu81xliKm6pMN5v9Dkx6Hd/SRl -C2WLLY6WoS299QoEZwWGGI0Kt1jg0R2YL04fBwjwmf01XjlOcABBvK+SwTtqLtaU+AJOHN -Q5era02uih7b19QERjodOpkhiCz3Mq4CSgIkEJ0DrvP0yZZG2qQq2rh/Ha2z7Mtu8TR38g -mPbUMwbITiWBNvFlEKEM17oBixE4XTfJ4KwUgkjb/6REwh0nH6FXJeLMEhw1KChEuodwk/ -tXYrds+VleQsUy3o3+DPa4S0VeAaPCgg/UFST/pLp5Bo8IfL/Ka2udcaQo9lXj9do3wb6k -D6BpIsfBgmypZgd8Wms+HzKZDhK5MmODvI4EO+vWNTwZtXiMxFViywj/MHezMXOD1k7euf -b3OCjesmNXSqByr0tze5QvUxVlPEQ= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-testkey-rsa-8192 b/tests/pem/ssh/ssh-testkey-rsa-8192 deleted file mode 100644 index 245ed551..00000000 --- a/tests/pem/ssh/ssh-testkey-rsa-8192 +++ /dev/null @@ -1,94 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABCHAkaobc -xwD5tun8ONijynAAAAEAAAAAEAAAQXAAAAB3NzaC1yc2EAAAADAQABAAAEAQDHbsr1aosX -g7rGuFdUNDfChiGdQ11hJcCJIS3VB2ng4YFClK9a//pehFaorht+qTyJnvbmp0Xh+B3IUC -UNLxuNB5LcF7ODO2fgEQd82/LjWFKoDqE2TjIRvxWhMUGKUB74TqDUSQrJKJDnr8hD04Wp -QSY6Nl8KYlxEeXGnbt+F8UikyygNdNK5x8JxBk2dqsps1XrCZKex66rTe+tS/7xju3C8fE -qWzhPcnKWNoLT3Bjnzzh/zXqQn9kWE+JZqdz63mVHeQNgt2E5bYXylqR/IjBZXtnXWNDSA -tS41mmhGvmipEyoRUI136ajmrQSv/LoUcmRfcqLQvQqUshtMLdDR7/BLAnKVHPlkhrwX7x -b1f71Zqd7QnWN4lk1AfoZmqUjw2O3cCfM0DRGz+xjHnKM4z6hyGSQMrTdLYwY0hUjUO1gw -tQgYw5neJGHWf/3uFheuJbwAQOMiOFKpqS/+lnyBLsB5GoaHhGWitiuXzvgMw0e87RbQGW -JAZyHxdHRsGo+pllrpOH9qlXF0aSFO31baE9VXAD950C/HguIe6OXxRXFxV02iltjB47/3 -HawTrAiZSNYgkeitWEk4oOopYQnwIa41Z0/4eDhahpwY+YlkNj7X3SFpmAHSMreDkI5zIC -jHVPJ7zqXjO2cRFJxnl68n3JSNKgRFqsUOgiKYlU4VJUt8T0AYuVLdVBxQbE+gtMv23Cpm -4+JyMq+FvT6WMaPvjCKSBZG8dcGLjjA4x+4GitLoEkvUlgcgptPsgzXvTjCE7AK959IvkE -U1X81UscbZyuRw4HgsD/lveoZejvrLFchUetSeQ6PjAowl1zAmR5NJog/EolCy65cM9/RF -QYVUN1/gdRrXs3BhX7AP4M+kRcAbL9YonRq9ORT66QucnbDYSI0H4/S8GHkeyz4MHSGK7m -ER9d++vgLV40mPuzIwgWfon4DzyzeYYSUCFj2pD+uz5yK4V+RWVZI7raGpCp5QEYOOy8Uq -8GnjHBGBfYH4PpFxE2L3rt9YvR2cB3iVMbbq5rwVVEmCS0qdVkxofdR3hB/uJUqLfLEvVY -FzZ6rB1n9RxrFo4pU2A+JhNC0c7NQWHa9ZhprFBDD0TnIzNFEgQ6IijCrH7jIxWORc09wo -RuKVdf+bxNfPUFQ+RmCZFUma/a8rLAu6Kjx7txGLeHWNJrsVeEygjAhgHDVWtIRM/mO1Xq -/RXSrjdhbgfXr4QiEQbEyBBPzfTEn7IlXEp/errtCVbf6HZXtLm+aID2seNC6Zt1pwgZc4 -M/KpQGORe1jotZandtH4kK0mbq0kkO0WBwTB8ERDha/r0lP3q/0T14Y7AFPxyIIuN0M/jU -I/lx+kB808zwyXRU+bVEVIVzgzAAAOUEDzTAJR6VcHo4NBLbYf+duKxK0cs8BUfX60jOzW -Qtgp/CWVl4U4/mdLnambxR8id3BYziFXbt1OrkjRG/Jy33vXwooBJlDgdZfgXuNzMYv1bq -RHbckdcBO+DnBmIA0bqYJNjSx7AJQgNRGK565aadDZUCr84MXGjd8zrQWLvRmAaFuj2pHj -GGnmTIHGo54FvZBPDd6ls9BNvj818UAzZ0JEXl3ayM7jFAs00LS6JKV/Pk6xSo0L9XOLTC -NIAlTngFJHAo1lCiMg/Horv6v3HfD//B013o3ltD/Xw5Tm0A1Zxqvtu3SHsAFaO/iWAmuO -u/zNlcPuZNxhOHJccKiTtWXdMfnGNpoRcBn8puQ0FDHKDBeI19laFeT6cLwcq0n1ihrUX6 -psRsY668I5NA4GyeQ+eLiU6a9KgpWZDbd0f54azAeW8T1DW9K6xnqk38Jn94HjHp7QPcwS -MqbezpcmQZqJZkLUAqcqdsnJytWTGPqjJ5+S1nXSHp5d72pR1udgxa/S90t9f6HHPiX7MM -u3WKJZesYt7rTfeX5MxJ0ylnA1A0SJSoETUShFgQM5BG9PFys5ZiwnFIwgeal56ym6bClc -tWXZSb08gaH1Vw67I0IO2DeOepQaSCbJnGU/+jJpBac9iRYnKheI7Zb+nQdrHKUts+fALd -V3mxLXcMne/wVYjAKQItZVqMiTlPYzkROL54HFW0Qx4Kd1zGWZo30VoxMdNKRONjmXRdzH -4WmPyF/uMBKL6PoST1JCU+BZTbGLopz643uMtEyQDYAGAFW86Lg59ZuAnN6nR5/ZtHj4/o -myKcpctFgHOL6EyreIh7jxM3/1TxLfpoO7JJSaC98Amzo8/r7rkHOxXyoXeZnqWb1kKvqj -Ax/7dBEGSU3sYF+JGCBq5T7r73ihcPznPOJggSavGoV8K/gGsJTnNi6OiIrByuAgzFsRu3 -6+9Cew3mLmb6TIwXlG8qTR7NTrQn23IWpoWi9tQf7ARb1xo8s9qEQwveOtDRQLv2C8cuz4 -gtOAfVGrJ46sJozwof4P3ie6QaKukdVg7Ln8rnhhG3YJhZ22Q1yZRj1nEemD4Xgt5cMKbu -jw23838azWTtV4Ly8rqS6GETH856AZd+nBIUlOnGghypHQ0dhauTlluZwpr0oEdo1+tZ/w -hM5+QjQa3A1Jchk086333na9SvwpelAsM3dliElwNyT9Nk5fodLDzmAbL+THlcTd755cKL -PzulwtQllZ5qcjSYEuLYw9jLTpQVVoxmPTEFntYZiIKgecYB3EIM0fPNgc+s8nzXIb+IW3 -ssaaWkmkQheJRFU+E2h5ofzfffmmKv5BRE5W5070GC97h0GDcBGqIA8nlixowF83NzPY0X -CsxozFa8jYN22jqwaKU8UImAGmfHk+cebW92T4J++dzz+gZnLArcvplSpQIws77lagxfNp -tD1v80g0igr9woV75JzwrnQeigw/TdixSIia0gIBdlpx59UCEY7CRzEDx2mwkmyZqRS1P1 -+Bef7YDdHVRmGOuJ8ZV8fT66nyDt5Ac9nwT49ZE/Z8VaE9jMWihEGRdSUx+mK3115ciU0N -vqzQoWS4xXQLZi5cl1ZqqXNefyrtBIw7RWrx+vjIe/nmClOWzpL6jT45CK6UcyAutvSOLd -nY4APaQRswi6WupXrF/tIozoNyPJG1JFxYyivrIggF32kPmKL+3ftIFcOOSp9Ro01cwlxZ -JV5UVsI7N3V2qMs0i4yexAQSggS1QliM4DzWXbOhv1u8QS4hBQu/w5/P6itTIvWG/4vsRw -p119lRuOZREnNT77qSdvmXVXtktamBgbjFnTdMhNUt6lk1+9Zas0402BjFzDJgj2rlqAxr -Jq92P99cFvcDgpraGvodh52p3RGdkj0yyiXhSdqeZHWIcTLNSJ+Kq548cregsEgmmQHJr8 -OUO2W2KniYx0SW01CvDJl6PdmF02w3ta8RSB+/+83OI/+Hr1wwGFLacXZjgjF8C7c5IU7s -/zpGKchnTzZw5otZ0diZz4bkbPn79KejHYk68pNdFy4uG4RMUu9CaloZ5EaHKGXMwHTCZP -WoGVb+2q8ivzEcea3Bb+H7M5b3MXUXDIRw345y47r9qiYYy2m1G9ndr4CyfEvouDmdyKa9 -8QlHAvsJt0YPR84vHdhKnL+czrf4QyW3QBY7jKs6rXStBZ7y/F/KWp6bwqnf/XtCIIHnMW -HCHGqm9PkR6eUiU90OfSaOK3nXMVDJC0EflyFVW9mSkH53bVVJova+mmLbs7JsyspyB8iS -AdQ4YcjMgACsr7w+ZRPQMV8O5puGaQbMQpvpR9I5IkSdzusCTldQjomyrRwIbv4Kk+jnpf -uPzApWhkVPhRycbAVnHERCzxiLZJr1mxWjpjmkLs1jfDjMPO522wolrlOLgFr1Sj18flyf -0psQpFZqouw7oOCQ2YuXpgUe6+YRk8D2qSILtjRJAfV9x0MXFr3IqbizpdjPur6hbL9jKK -I+H0v5/h3xBRKVqTRU6n74VgImsYi5RFv5YcruQVnKPvw046NPTycA9te5vuqgTnpEhl6K -skrmcTwpk+tsdp17Y02FLbeKQ/PTV0cIsadwqDwPbvgbVTiAFeIVOATYnKN76AiHDU4uU6 -qR6eIUSmR7pNH/8rSu6sPaYjzp/uIrup7nTVtzIrlMWlVrZxPMyQ/fxWJ3V68aMVbb1HIq -5r3bURN6IwTEZugDzFlPkE6mk9WxJ72xMYzeC7m933OcbJVtWwTPou2C6SXI212sp8cvMG -2iiCaHQskAKCSApAZqwOEi9KsOB1ytFDAguTrlq9cbpLCa9hEdl5Wytsk8fgp78Gotg3qS -z5o/fOSEOnq9D8TJZBdJx/7phEIVtFG2IA1+a/XLaFInjmGjm+dd8oRhRB1ZWu4wjZhpUi -fekE1Ixf5aPcFtdDWErncrLtiddEkW4gMHK2QKoVxk7oWxBniLF3JTBpCyPtLgLGd84MJr -c4yiVKxsaMfURoijwJE75CRLM8At/Jq/ZbldM7adenhP+kPfTSXN3Ld4focD/rcBM/6zML -/yTb2GP/0kmN3qTgB6sNvFrMMpR5kYmX2jSvx/rrx9fzAvSuzH1b/1pQumsHqZh0zwT6RX -K0yMcQs+dbJtZzQ92TSyx1Rq95v54fYV4rYmpnnWbIywnJReXzOjNixculPpawetJK64a6 -6i3sOPMEPGBDZIO+Re6h4il8A3BxBAdX8dUgyT6XvW3Xp48VzXeTLaZrnXG0POVXlifrMh -0Si5pA3f/L5ygkgsc8zv14/wv/YmoqNmu6g36IrggCkK8tLi8DbeyFA3aFmcDQorMDMhvz -HkbyIN+RhPdNVVgkA6nScNNZs7V0n3+2tWnaMxFp+j/UH1YwqNrviBJqfrUBuMW804lDHa -YX2bs3tzq186fsMlTFOKjfiIRFLJTYD+zQNM+eTkAuTiQgxrTqAJi5zMZJuXvsO8k0CcHI -EVcHGaP9otDq/KhsyUs9/Qio/gfJbU2qh70ZxYwJWC/8DvdfRpsSoGWb6GLnq3GxyYlVnT -V8Ov/nMCIDH3gzc+2bBxuTwfLZ0dElOWFuEuzZj5enw4CF9+IQW3CM4EfqUf7Y1JIyZvKy -BL+plHJF08mHEqlzFYxoAHL1IpZdSMn5uldYaPeB5uHLZbyLu8eoI0WRQPE9smhxa1UERd -2mUJpsEMA+emZzIsPs0zRUicGeGZLX8ultN9KI/4zsRJE3GZzcT17HYoVpqKNxZHoUKpip -sNTi42ZV2if7f36wZmPoYu4mKqCXhjyJS+Yq5S6V/0U1YbqdLxWN6kDTKwu9/O02uL/Hb3 -h1ZLunheDBP4k/SwK6I745J/aEreVtLpzuJeE7rD6I0faC+lQymrN9WxTd6k7hcOElQkiA -8AgOeaaNG4r2IsSTACFzw98ip3c4Kt/GTcEamFB4Gp8MvcCO7bFovbEHGx0bKu40oD5m/I -ZV2PbEQgF7oeL14YxCHyfNS6GUSREF2VreymnopWKqTEs/Av8uOvGRf/XD3fbWCHnRmLl7 -+odQaeXVhs9MIBPcGDt+6PplCvhw6H+freu+hwDCWsVEU0EBWz6bJi5bkWozmfzTL77d21 -rgX9bnJ1554Cz41uEPP57iyAONKnHOP6UIBiGv4pex6dciJWnmPW4aw9Xu3sMFQxWTyjoC -ed+cVxtJerrS/D22zMvTISyx/9GnFuRyQwXOjyw8VVWb0j84ObEi7dGkE3Qfy2g28s05Gy -2tgIYYRAd8OUtqsjpeF1ggxn6T30Gmpc2DDC49FlTUU4DyjMHpUrX0qOg2HwygELNMEWg/ -tKdvWAD32ggIqM2q5QfMntA3pWKdSoTRYK2GpFfe7K3loB/9aXKQBnPMpqxBsuCL28ty/T -m2PN5iVDDpTn9+IwYIK4ifGKoU5zXYvoAmDTru97kkbb9+L7sxcRVNmdrC2Aod29epO4xQ -Owpzc9fViIXyv3pEImgxcgrI818rYoSg4qm1hKV8O6rBNmYJTCW+VIai0dfeoZ5RvjDk5p -C5PGO0qLvmr5vDo5IE/i3aoJlirm4KFErzbMpyjjVrrEfIZO78qX79ZUwRLw+3zjLZN5jk -X3T22nv46E43rt045+mHglNxD1jbseJlSXNWUHPfuyl7xgqKv/kdDCxXC7yxddtyB2ioWQ -+WjmV7dwdPApuO7E8SN4A4aIFOdVNN1EisPOZxOB5o4i06b7RTcAJdluTC8uvuSLS9pOaD -Dyp2MTyfzsihx4CD42e99ylGR6Vua5SGknGx8CgsePEy9tbVPQC21dXKS/F4J4RjiHMscf -rLiYk1I4SfXkb1vZqtOuNX4O38qB54FpojKL/iZxaEb/QscfgonSz9R2x4VhNqpt6HBHRC -etY+1RNqGPnkvl8Y0= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-testkey-rsa-8192-plain b/tests/pem/ssh/ssh-testkey-rsa-8192-plain deleted file mode 100644 index 9590abea..00000000 --- a/tests/pem/ssh/ssh-testkey-rsa-8192-plain +++ /dev/null @@ -1,93 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAEFwAAAAdzc2gtcn -NhAAAAAwEAAQAABAEA5ZPD0zgd3y6u+3X7ITKpFKcoQRS46rczXd0GtU1oM4/REZQVU1Pl -PxBEh4YpMbbIkmfWIV64tEM1me8PmhvE63k38Kft5x5gMiM/AVjbjfApNuj1jT/ABOS4wZ -cjYGEr0ajgeyyXqp5FdYO1pkISOfGnxpj8kLnF+Pcbj8r9Ukh5bfYgir5SjuytIhYQ+zy/ -mDoNtnhW967QY1RJOosqLS0ymJFC7cgEq0n5Goi2tdf2fM0xr469C0aHK92lvfAO1+LZ52 -Fge6YlHOpdcVaUAZJmc4uMsJveEQsxA/g3L47lJEpoLXT4GICmXFLn9o+SEnJdC69Xm5nY -hyrPWruXaGkGFmVQsTYdU8w7zVtGZ3+n7IR+v87ESIPoOs3h/h1lx9YbknNiEz8Wxb7va9 -iJVFLC4bNp9r7d4KIlAlfALYHMztBvmGayfX1tUFfr92MyXPqNqvtFK8+HDbhgV8AXuVCw -5ZGG/YYI5ws5hamiaRiiAjLD5Zk7CNkAhdi3fKruhU2NTdTmHB1PtAcTB9SNdu7H+fDimV -9Jp+3aL6jsuFKFgeSzitCwXZ1Yuh7nnt6JjBbib2xgqrxMbVTY1HVICLUEZh0QOmFLDEos -RZk9oC9S/VvSXPGi1vejGc2otL1nLPKA3V+hf9J1QvJQloeT9UKR0ATaawmLLIOKGE0vjh -83SSx2kwsOhv0YRwcb676EECCjnLr15mNCSO2NQbGIlJNx/sG+fCXvt/aWmtVKQdXW0PpL -uum63lCm4lgaKYGOaBIvFAiok9YvQS0sVPAhcAqKOWk2SFzyHC6EplnFBPGEggFFumMGrm -Gi0yU1eP2lMvY6OVNw4XnpleZhEBQ/aqM3CPgJZslamC/lBAWX5PSU0aHYUKGZEKulisbg -i90TMKxUFrjXtCHVlqqSSbtDwEFzliFDW0Usvgq2N32xthgdaruFjCwKo6c9inSSNdbpks -i8CmJR7ISCF4/RSxBZbKDS49aKooGO8vf04CkdhAeD9goBei8ARpmRrksSZbyjyj7LHeng -XvmnDUJcFQhzFkFudKwK5FsRL4xsSweRxK1SPWIRJ8qTNrBcNREVKvtVKXdEbRfgSxkHA5 -3yMWLeoqxBIb3UF6PqWuwoZkwUvz+fwGdWejhh0fBzOvHi61aM4KXHVxwLfyMfZkZLWbYs -c1V3/K5UFXzbxCMVKf5BpRPGpd54Ngnqdv0domMcAAO1E2OTXEo5pwgqjZ//UbC1NtRBpO -LDwuFsCZbTvOwzGjIh/Ss6NmibEeV/otVJlyzs/hEWXaLasqu8yw4gD1StX2EfRCAFrFiX -Au4NDgJXzGNi2UCJkX1HT53TfL4fNO3uuGIcJEzQ95bnNxSFwai0fQAADkjjnrv94567/Q -AAAAdzc2gtcnNhAAAEAQDlk8PTOB3fLq77dfshMqkUpyhBFLjqtzNd3Qa1TWgzj9ERlBVT -U+U/EESHhikxtsiSZ9YhXri0QzWZ7w+aG8TreTfwp+3nHmAyIz8BWNuN8Ck26PWNP8AE5L -jBlyNgYSvRqOB7LJeqnkV1g7WmQhI58afGmPyQucX49xuPyv1SSHlt9iCKvlKO7K0iFhD7 -PL+YOg22eFb3rtBjVEk6iyotLTKYkULtyASrSfkaiLa11/Z8zTGvjr0LRocr3aW98A7X4t -nnYWB7piUc6l1xVpQBkmZzi4ywm94RCzED+DcvjuUkSmgtdPgYgKZcUuf2j5IScl0Lr1eb -mdiHKs9au5doaQYWZVCxNh1TzDvNW0Znf6fshH6/zsRIg+g6zeH+HWXH1huSc2ITPxbFvu -9r2IlUUsLhs2n2vt3goiUCV8AtgczO0G+YZrJ9fW1QV+v3YzJc+o2q+0Urz4cNuGBXwBe5 -ULDlkYb9hgjnCzmFqaJpGKICMsPlmTsI2QCF2Ld8qu6FTY1N1OYcHU+0BxMH1I127sf58O -KZX0mn7dovqOy4UoWB5LOK0LBdnVi6Huee3omMFuJvbGCqvExtVNjUdUgItQRmHRA6YUsM -SixFmT2gL1L9W9Jc8aLW96MZzai0vWcs8oDdX6F/0nVC8lCWh5P1QpHQBNprCYssg4oYTS -+OHzdJLHaTCw6G/RhHBxvrvoQQIKOcuvXmY0JI7Y1BsYiUk3H+wb58Je+39paa1UpB1dbQ -+ku66breUKbiWBopgY5oEi8UCKiT1i9BLSxU8CFwCoo5aTZIXPIcLoSmWcUE8YSCAUW6Yw -auYaLTJTV4/aUy9jo5U3DheemV5mEQFD9qozcI+AlmyVqYL+UEBZfk9JTRodhQoZkQq6WK -xuCL3RMwrFQWuNe0IdWWqpJJu0PAQXOWIUNbRSy+CrY3fbG2GB1qu4WMLAqjpz2KdJI11u -mSyLwKYlHshIIXj9FLEFlsoNLj1oqigY7y9/TgKR2EB4P2CgF6LwBGmZGuSxJlvKPKPssd -6eBe+acNQlwVCHMWQW50rArkWxEvjGxLB5HErVI9YhEnypM2sFw1ERUq+1Upd0RtF+BLGQ -cDnfIxYt6irEEhvdQXo+pa7ChmTBS/P5/AZ1Z6OGHR8HM68eLrVozgpcdXHAt/Ix9mRktZ -tixzVXf8rlQVfNvEIxUp/kGlE8al3ng2Cep2/R2iYxwAA7UTY5NcSjmnCCqNn/9RsLU21E -Gk4sPC4WwJltO87DMaMiH9Kzo2aJsR5X+i1UmXLOz+ERZdotqyq7zLDiAPVK1fYR9EIAWs -WJcC7g0OAlfMY2LZQImRfUdPndN8vh807e64YhwkTND3luc3FIXBqLR9AAAAAwEAAQAABA -EAytBsumej9CwAyAOllOF1f9pgdIZDCpBIH88IgxjcSljuQRJKeK/wIXNUp0l9kP7CWJzF -DfvpPs71RoVsih+oKsKPCdrBEGHEZ+a9XYpLhCw7rNfHPj6oe2o4UkYcKaQOmw0PK6HsZv -2lrThrPHK4OVpkds1mqtCDtftP7QtOGegO5nb+rrOOqdcq6KcH33v+YxQ+UwojAnL8hBPN -EZwp6Xk5bpE9yGTgwxX5rFhE2Ybtqbl5AHggSBrJhZYtOwwdgNlW2dMr8nCH7vCZFmx/Gp -hkTAVniApa90GkzrX0wt4BTrsxJ59jIfpdfch8RlT1nbhMvOrtgXg7UsYeIzEAhGvrxdNB -oxyEcihGWJgfLYYYKpmug/K9cradbX2+/cioxw8+knW+mfQtQQr55pOIVuc6ZTwkC6j4yN -9VxKkTDODTt41qWP+5BaXN8aGKw6Vts7hheUC8DgUrcZKGAl+gVcWUUWrsD4Le0IYZDh0b -bq8lSL3iVC63eYyDqrsW9lrnlvo5MB46H3JBnHB3fn5nbz9piUQmW4pTvrgg/ePFJN06Nt -N9TdApTrqXzO1KgA5nA0ygRAFBsPPirN+9Ioxt08tfFHrugDS9oSDR1baYO7AzJ8J7qEKM -Mk7ZVw1Z0jpVMN8Xuvol6Y9aqob5bNJfgteJi3UOJGts+SlH0Uo3DdyXfMdsMSSTNgvIv7 -ri5o6zjL6T0CjqIGoPlmV77fB54b+X5+z/m9b8b99zLf7JxDxOwhefqwUPDmcySZCKvHHE -VABp2yYfMU0wtG10r/FKfpj1vLhJVw/7C6iqEXPphJiTxzhf1axJETQmQd3wl/bP45rcIY -zEglFRH7aRS8ZbAsvunusVuWO8NmBIji1NtPjX41QAED2RvYjChwsycIfdyC1iaKvT9MdE -PvaEr3XgcFVbGuNVbmJxNJL/mUEOu5MunqDsJhSy4wnRzl2O8pDd/MVr1fnePS3U3iS5e6 -Mr0h8q4+FtYlqu/L/ittlupWe90UHt5EncpE8aWxCWiW++xwTSi5z8zWhMTR1YM3zfpHjd -cacCeSxgYaOofa8Frf5spuSW3FnQHbJLrjROAp/kNRNCUmYYQ0qV30sPJWkf10dZb6kpup -2BQIDnZ2qCGGB3UYNP4jaGgYoCe2vXSm3r8MgIeWaAJyzLt30r5VSdgi9xfbaJ/pRTjKyz -fM087BgSi2ab3vIx8APwg75gfCmfLe86oZl63W28OvngX2VossnaCgpgFLg7E3RFe7FWYf -Me7uhlx+Yih8ZWRqScaHfnEAoGRcJpp3V6AKuj/FFbItj5KxTvYeKBlkuQ7Cy1AOuq6bUt -tpB5tv3zIF34sFag1LyyCcrHZr5F/k9Uu5t/XQAAAgAWlfEwj6m+UC1/D6xqf19NeenWim -IQ03YLGHuK8MwUzjIYWoK8W7zU6lIvRGn6XPdwYjQ4fmwvZUyR6nXoIB8PEgd4kBJHnxLL -qoAS5QO+GxVindsJmbwSioTlvyZ5+x0pjuAfCVQms5HWHENBwA/02Tpg9EgFu8AhIgMm45 -bZWRJl8tTErpzoB9U90Rr3aykPRquuCuYHvn4OadwLeqHWZ74X+hUcR2AcRP45dPiMF50I -WP1o1lIgp6a+Yf9DaqKQfAbE3dk/ZMGfxhFDCpVE3JG2SErdOgLX0kULzlT93SQFKDTO83 -3IY+e3drnJcaZiP4azwZpFYiR2qn2b0fUEQZP9pPCxz84cxZR2WfCugxEZkGuvfAiMk8P1 -Os+ttZhzTWtqsYFVOLfuNQI9Cdpi8eu/n/Om/1uhTkJQLS8voZJXMAXOw85uLg1Wy/r2+E -gbynZVxFly3GSdV6uzoHmSSdUi6glpr9C5aE0iV84nQM+zXkfAna61rnBWfaSOVv2DhNQa -VMliDk88ZgMX8He91H+FpYMAJu7p2JLYildYY36iZz5fFeX0dvU8BxG87sVY6SJ7Zs7Ov2 -j6R5AzCyByeJ4V3tU598civ2utInSNUq1faYbXKz8ajwauqaa6wyaPkyUMV+eJDnf0blUE -+h+x5sj31Ine9g7rfNXH2TMWRwAAAgEA+B/6a8y20hMg8rWyqa3WQXcDoR/pVR0ofYvst8 -fGOD0fN/QwohaZ23mTFiCvX2zceNi0aeJ2vlAS7D9RTVnpD69yLn7xeJnchvHRCKhDGssT -oIvNphdAJ6JVwjcE96BvRFamE5E4ADC/ohzLDwbzCT/vlgmnBMh2FU/8BqdXguX1c2JiNs -T5UEgQY/YruE4V11bbigifSaIkjo2MGpHRqFJbpcwChh16e3Bv9LHj0sQ5v95m9s4THAZD -+fuMzD6TDmtAL8JDQo8lKzf96Qu2uImn2AY7intmBJ5WscU9R3c+mFuUescEqv7XlhEtKX -5UQgIXZtd/IbkNg0LPgvEsFEasTH/BR0I2fn4I0QXxUU8/xYMAb3ihOhCFIP3g/Hxm8tCl -oyWEAilW9T22MeLL8MkFNmuBTyLjBc6NsCLiblZ+NyqGtzKs8cYPatUI3Hsoau6jOMBnc4 -H5RExmiIgIJVV82sAzo6qTSG+hrAgJX46dcH4oSwIf6/m9455liquHh/O1c0CM1ay2DxNZ -ofqTveH5gfZFi7Gu7yJ5mQ5tKSis9CSstRS4FcPn4CnJECJLx02HlBPX275iEfRZCLaouz -9qWXiphk66PxkeSKFRr+UWrA7GoJwt3/ahofOmJkDx8GV2wiKhYgGN4EoQCPsE6yviA41K -dmnWAdFTN8vJiEMAAAIBAOzdFgo5VAbZxABE0uFjAtRPuytktFQ4KdRE/ryRNw2Qn7BIWd -VlBLRrHljbc3Owypuy2fkXd7jHUs3RqHH6JJiJKOfoONbLX7IcLJstMy+Cfcjm49Wz9xiO -EpZFXrPXk8fkhVM8COHvUjrW1SrK2TBonKNTnPSALDbsnyZXvfLppbTICUqMpy5+rAUXW7 -TpD8W76jCsQhjWVRt0tmaBem4pj94zO3FdOpRePS6EXt4xm6qAfHX+EUWS+58v7u7mXcoC -BHSrYgg1WVTKuerEmMRyMZ12cqmSzYnXSoB5fVh+6QJZwjV6Sntv8SHBcKbJIp7FqJkqot -ACZifMoqLe5AgO0go8+Q8kWpZ60OdQGfqZnbWCD8QCvTLEwYmmREb8+UvTnQhfivjJPscf -HVHjxkAjF9exNasMa+0LjIopqsd7VxvCIpzGFlxh5c9IlrvK8aVS5uCZRD+oNwOcbbUMUp -3dZMvqgOoetWt0TWLQwVgTDtPdzRIKzkRuA0Mgwe4cepYhwwqw/Pkwdlt3P8F4/yDMWfUY -qBw+VF/NFsa4QLHYoanno/TxBjL3fU9XfFIjH6Q/tnJemBOZSHqVgy1waby9SgBWt73Wn1 -7CtbLKy0H6F/RsATP4bXLnC6Pq91XDmFcyE+Wv5EYEe7I1DLJPFYV6Ld4iMc5T6TWagiC8 -cmQ/AAAAC2xpYnRvbWNyeXB0AQIDBAUGBw== ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh/ssh-testkey-rsa-plain b/tests/pem/ssh/ssh-testkey-rsa-plain deleted file mode 100644 index 4407e662..00000000 --- a/tests/pem/ssh/ssh-testkey-rsa-plain +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn -NhAAAAAwEAAQAAAQEArh/LZSjfJRtM1LchVnOvA1++dE+sxzdLC9Mi2lC6bL1tGjRcl6WE -lVrjzaugTWDtZ1oCq+FmxHJg3CgHC6724GpCk+2qCBAuFvtmZIUozzx3vRFSGB2UTd2R9s -bTdqUKFk2iPYhjRv25wfuRQJzippLbaUpTqMFPywY41iwc4Zf0TWuyLyA12BVuDJSLJaKX -xIvPWNgo/P1zVaAEwi2cSPpJWnu3K9zvdPVd9nBpOENhEPJXx6lZwHJPWX20Xa/v6zezUX -L7dk29YBVYzaaalPMDOPxZfVMG20LsaP7w22m/nVS/Ucb0uTA3lfAcTmzT7eI79hIzM4zW -SkT2kXBybwAAA8CrA7O4qwOzuAAAAAdzc2gtcnNhAAABAQCuH8tlKN8lG0zUtyFWc68DX7 -50T6zHN0sL0yLaULpsvW0aNFyXpYSVWuPNq6BNYO1nWgKr4WbEcmDcKAcLrvbgakKT7aoI -EC4W+2ZkhSjPPHe9EVIYHZRN3ZH2xtN2pQoWTaI9iGNG/bnB+5FAnOKmkttpSlOowU/LBj -jWLBzhl/RNa7IvIDXYFW4MlIslopfEi89Y2Cj8/XNVoATCLZxI+klae7cr3O909V32cGk4 -Q2EQ8lfHqVnAck9ZfbRdr+/rN7NRcvt2Tb1gFVjNppqU8wM4/Fl9UwbbQuxo/vDbab+dVL -9RxvS5MDeV8BxObNPt4jv2EjMzjNZKRPaRcHJvAAAAAwEAAQAAAQBi46O8G+4/QLXtyOOi -Gak3nVSo8ecKbRit6odMvbRitWIVE8/SQCqAOFJQKDyuNXIe1DvYKfcXcm4YGpOFyyRiZ3 -bQVJXQZoAGhVitlgKLT6ghNIkPMR1c641OPbUzGKAV8plFoQPg+ZBZ3umrbG48dAMwVQoW -OVN71ljJKdxtMdOQ7BL2T9fcgki9dJ9ZNlR4YwJL9ZdC76l/KXvq0dsSy3/gUQeuXp26nL -bGQwWz92JAc6IeEsQ5hhSVQi6BBiCdwBMOor2Fd5epzMNYMhgk+ugt7o042esvIOaTMsgX -CaiSRI2zVf+mrrMobzJPtTRYYBl6Z2Rz+G/e95KfPPrhAAAAgF6U/FQHKYg+jMYJ214uRh -Z9VobWdvjrzYIRr5G/+i94+9/Z49PbtAwcK65BVigvrJmK4xl+oLtWWO3GiPCTSUuGuUrj -rAjNEkJQvS93PJMMOpLuQl7qoI92bbcJGLd7x5mR7saXwGJTfjFlTYeAS0kudRbirueQ6E -4sGDwIMRlzAAAAgQDa4nWkERpjPHWmfa2K5CHjMWwuUVbDoXCokdgRDv47IXNVT+o3XYQQ -iAzgBksyoqjFYitZYuKnnl9hLqQl4KVwgtZEpXXRsGGsjsO7GZ37Cff5YckrdrFhbLtAhY -ViW1zoa+d21q82V4YIWrPwExwPh2Z/KDiB+APDkzlAzypqzQAAAIEAy6ZVsB6b1Mdom/QO -EAkCRpcWwG1+WPIvohUdIr5XwRWndEbCMhapH3XYt82T7A+j3UzZTJI/YCUjsr7tq2i7lO -xL23aoetmO390ze3/HQIzNjZAP+Fqar3dqcR8/0EvuI8mIk0l2h6C00asxbJcLTH3koNyz -bkzOkdo8zuK2iisAAAALbGlidG9tY3J5cHQ= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_dsa_1024_openssh b/tests/pem/ssh_dsa_1024_openssh deleted file mode 100755 index 6b4efa4b..00000000 --- a/tests/pem/ssh_dsa_1024_openssh +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsQAAAAdzc2gtZH -NzAAAAgQClPP2r5pBXhp0qsGBu3WZ0JRvtNUDWsbtxeb9DXC/0kVFuyHaVKvLdeLIitJgO -so6YS4Tn+bfILoExFQZZT/OgDUmxYoB+1jd7+snSVqputKTYTRzf/+dHJzbSLF28Xqt1bb -COuKZB9TianmQxy5ru95OE9BCjs7MpUnxf8LVQSQAAABUAoabmyx1YsDwfo0r1G/HuEx0u -zwUAAACACQ9TzAokwkGtccg/zQljmowrn0ziMygIZupfp5QVT4iiPtutl6WLdduynuJjy/ -FyQYs6E40kDdPLhzIP/C+lv3HTtmmfpoZAZ0tcQJvNwwMKi6w62kdcP+EERca+VW8svKp3 -o6z40yaGwTdQRrL/OMB5I5qAp+qRSH5BmHgE5SYAAACAB2D1NczFQUw1q7u0jQuBtlMlhl -mGC4y8rQVR30JgWudQpqq0rNpAnxixgNcp32BDbMXCavZ7F62+Itex+QRyRZB9IOwVA6Xg -Xi6/ILCt1oH6lsLWbA5JbTm8PXIVA/7Iiuqv3ZP30iAdh6NIp3r+5OvGeWZDSOFzsLhLLA -FYZsAAAAHwKUeNkClHjZAAAAAHc3NoLWRzcwAAAIEApTz9q+aQV4adKrBgbt1mdCUb7TVA -1rG7cXm/Q1wv9JFRbsh2lSry3XiyIrSYDrKOmEuE5/m3yC6BMRUGWU/zoA1JsWKAftY3e/ -rJ0laqbrSk2E0c3//nRyc20ixdvF6rdW2wjrimQfU4mp5kMcua7veThPQQo7OzKVJ8X/C1 -UEkAAAAVAKGm5ssdWLA8H6NK9Rvx7hMdLs8FAAAAgAkPU8wKJMJBrXHIP80JY5qMK59M4j -MoCGbqX6eUFU+Ioj7brZeli3Xbsp7iY8vxckGLOhONJA3Ty4cyD/wvpb9x07Zpn6aGQGdL -XECbzcMDCousOtpHXD/hBEXGvlVvLLyqd6Os+NMmhsE3UEay/zjAeSOagKfqkUh+QZh4BO -UmAAAAgAdg9TXMxUFMNau7tI0LgbZTJYZZhguMvK0FUd9CYFrnUKaqtKzaQJ8YsYDXKd9g -Q2zFwmr2exetviLXsfkEckWQfSDsFQOl4F4uvyCwrdaB+pbC1mwOSW05vD1yFQP+yIrqr9 -2T99IgHYejSKd6/uTrxnlmQ0jhc7C4SywBWGbAAAAAFQCYwb2dlv1ktqrIWBTO+Hn+CJ4w -RAAAABNUaGlzIGlzIGEgdGVzdCBrZXkhAQIDBAUGBw== ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_dsa_1024_openssh_pw b/tests/pem/ssh_dsa_1024_openssh_pw deleted file mode 100755 index d3eac10d..00000000 --- a/tests/pem/ssh_dsa_1024_openssh_pw +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABD+6VzZi/ -RWtIVvbzvZfeDvAAAAEAAAAAEAAAGxAAAAB3NzaC1kc3MAAACBAKU8/avmkFeGnSqwYG7d -ZnQlG+01QNaxu3F5v0NcL/SRUW7IdpUq8t14siK0mA6yjphLhOf5t8gugTEVBllP86ANSb -FigH7WN3v6ydJWqm60pNhNHN//50cnNtIsXbxeq3VtsI64pkH1OJqeZDHLmu73k4T0EKOz -sylSfF/wtVBJAAAAFQChpubLHViwPB+jSvUb8e4THS7PBQAAAIAJD1PMCiTCQa1xyD/NCW -OajCufTOIzKAhm6l+nlBVPiKI+262XpYt127Ke4mPL8XJBizoTjSQN08uHMg/8L6W/cdO2 -aZ+mhkBnS1xAm83DAwqLrDraR1w/4QRFxr5Vbyy8qnejrPjTJobBN1BGsv84wHkjmoCn6p -FIfkGYeATlJgAAAIAHYPU1zMVBTDWru7SNC4G2UyWGWYYLjLytBVHfQmBa51CmqrSs2kCf -GLGA1ynfYENsxcJq9nsXrb4i17H5BHJFkH0g7BUDpeBeLr8gsK3WgfqWwtZsDkltObw9ch -UD/siK6q/dk/fSIB2Ho0inev7k68Z5ZkNI4XOwuEssAVhmwAAAAfBwVCKgoMm2RK7ECBww -7k8irQcalhpJ9JtGRxIn2GPww1IR60ZMCOcRru1jji/zzdkfeKSA30VfwYK9FjOOcvi5OD -I6HyO8JYHRsCv4BW8G18r4c8Ew9IZbkv0nHNniCT24tJ28JG7JgMfv88SEo2MQDjCqyrXs -+SeNMZL938Ff7twEpaSGgQ3LD4af4uKWmcbUmrPyRGmSUsbCteTQ6clDBuJdP4Qyl1EcP2 -u/t3Ui5Wy3VU1P8hb8NgDQ1DHP6Oj8D+Ui4ulahrQSpjIUA+hm5fcvWp81DAwjMYJqEI/t -b+jm+HhGCmPkOF5EMjrkoiOjdRcNj7QWyiMg+a+xxcfrtPG+LqewGT1ERo3XtZ3/690zwX -RVzCfz3ad7dJwDA1xyuX3E4rFlNuxEYxQEq0i+DT65jHYY1yAJHzV28EFO9qxOLX17S4Da -YT+xwpXqbR3QZ33sKESPWoT1n09s8FEm0byRbvwbzojjFbaL5I03eRph7Rao2lQkDlYAFw -gGAmCrR1T+DBgRprVQy/WHHF3MfvUnWnwVE4a7Iul9N3724DFGz/dQZY8XenXIqgvr7Jas -LXWSz96CQ6YjKIKLaQaMPt9xucgzUV9YTn3DAq1aR+F0KYEUz4RR7sCh6N419QbPTjXXH5 -rSNFYIpHOfy9rQ ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_dsa_1024_pem b/tests/pem/ssh_dsa_1024_pem deleted file mode 100755 index efd234b4..00000000 --- a/tests/pem/ssh_dsa_1024_pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN DSA PRIVATE KEY----- -MIIBuwIBAAKBgQClPP2r5pBXhp0qsGBu3WZ0JRvtNUDWsbtxeb9DXC/0kVFuyHaV -KvLdeLIitJgOso6YS4Tn+bfILoExFQZZT/OgDUmxYoB+1jd7+snSVqputKTYTRzf -/+dHJzbSLF28Xqt1bbCOuKZB9TianmQxy5ru95OE9BCjs7MpUnxf8LVQSQIVAKGm -5ssdWLA8H6NK9Rvx7hMdLs8FAoGACQ9TzAokwkGtccg/zQljmowrn0ziMygIZupf -p5QVT4iiPtutl6WLdduynuJjy/FyQYs6E40kDdPLhzIP/C+lv3HTtmmfpoZAZ0tc -QJvNwwMKi6w62kdcP+EERca+VW8svKp3o6z40yaGwTdQRrL/OMB5I5qAp+qRSH5B -mHgE5SYCgYAHYPU1zMVBTDWru7SNC4G2UyWGWYYLjLytBVHfQmBa51CmqrSs2kCf -GLGA1ynfYENsxcJq9nsXrb4i17H5BHJFkH0g7BUDpeBeLr8gsK3WgfqWwtZsDklt -Obw9chUD/siK6q/dk/fSIB2Ho0inev7k68Z5ZkNI4XOwuEssAVhmwAIVAJjBvZ2W -/WS2qshYFM74ef4InjBE ------END DSA PRIVATE KEY----- diff --git a/tests/pem/ssh_dsa_1024_pem_pw b/tests/pem/ssh_dsa_1024_pem_pw deleted file mode 100755 index acec61e1..00000000 --- a/tests/pem/ssh_dsa_1024_pem_pw +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN DSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,FC53412322B9C202AED2949BF06265AD - -ohmK3nDoFdyf6WPogk70WVUp2LdIJK4pRaCRp717Idj8veVXn+RLiojuFIcrViWF -Hlmzold9A/pYegoXEwcKJCvoJm9UZf0sfBANMhe/MuauwyRelDnnA4OPoeyHnTV3 -HV6nHE/p0sJQtxDJ+QTG4eMHjX1MgurMVY+9W3iuu3vrWc3iBa8O61+AthNSWSWa -upy6t40Yu5BIwZYEyOY1nyJY8OWUvMj5uc3zTACa+Ua4GJ5L0eY7H5N8gn5ifN8W -itQBB2TEOjJc5ixTgJf/G+bZikLiK/7xJGAAlecPa+TWCy/c/rXZA4acBn0Ax3PZ -bZT3m5/9Xa3d/BIkScwSHLIyM7K/wL2DnFnNY2xZempIYW7FFnpexTfBOilr1YoY -2EYxuVZv8KcACRv4c6yC30MEE6r6MiemvvIwgs2HCbx+krpr0Dvxqxo3IoapSdO4 -CrxGGu490+v+ZqTQZH+pfAmrr8RdMFEwVdRNT7UN+ZwaqD/bAMlcUjIErNq5/Yf9 -hSl6Bi3ekOlJMyt53N/rpAa7f4RNPAuOBsHkIavCA09jjnmDawZtfChiQg+Lb27n -6/pfxpqEiejCIttRCW8/dQ== ------END DSA PRIVATE KEY----- diff --git a/tests/pem/ssh_dsa_1024_pkcs8 b/tests/pem/ssh_dsa_1024_pkcs8 deleted file mode 100755 index 8192fa03..00000000 --- a/tests/pem/ssh_dsa_1024_pkcs8 +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIBSwIBADCCASsGByqGSM44BAEwggEeAoGBAKU8/avmkFeGnSqwYG7dZnQlG+01 -QNaxu3F5v0NcL/SRUW7IdpUq8t14siK0mA6yjphLhOf5t8gugTEVBllP86ANSbFi -gH7WN3v6ydJWqm60pNhNHN//50cnNtIsXbxeq3VtsI64pkH1OJqeZDHLmu73k4T0 -EKOzsylSfF/wtVBJAhUAoabmyx1YsDwfo0r1G/HuEx0uzwUCgYAJD1PMCiTCQa1x -yD/NCWOajCufTOIzKAhm6l+nlBVPiKI+262XpYt127Ke4mPL8XJBizoTjSQN08uH -Mg/8L6W/cdO2aZ+mhkBnS1xAm83DAwqLrDraR1w/4QRFxr5Vbyy8qnejrPjTJobB -N1BGsv84wHkjmoCn6pFIfkGYeATlJgQXAhUAmMG9nZb9ZLaqyFgUzvh5/gieMEQ= ------END PRIVATE KEY----- diff --git a/tests/pem/ssh_dsa_1024_pkcs8_pw b/tests/pem/ssh_dsa_1024_pkcs8_pw deleted file mode 100755 index bf6271ab..00000000 --- a/tests/pem/ssh_dsa_1024_pkcs8_pw +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBrTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIC1Dl0imCfgMCAggA -MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAECBBChlIQxZfVu1iB5k+1BDnkyBIIB -UNCHjRWVQROFx7kHHqLIFP8riXrATt0CbYcyOMaJsFSIoIRz6G9UDBCgdYmVHe19 -LfmXMQ+IuXVc0IP3HJnoDNfXvbKmqdEtCZfg2efcLeWNTP+ck2jZmoXsq+tsFl5Y -4cB/5MEJah9R7/ashHJ22X0VpQBXzqcXaHiqCzudPYOmGT32CD8ECs1dkHVIHQIB -rhqlU4j3Lf+1C/ui1tG6gJRQkKaMmU9Rtgn3BcLf7iKRJZGFcmc1ND13mAqaS0II -aBvsRUao10ItfN5M0llaQrJoC2RFCg/3Mif0VOXJy5XUOE60JOVsLAdNBtaUtDD/ -8w6qlJf9c7qud2gNN4Ct2viXsOEZ+D83EmuGowIcJABMaHFKdBVfzO9kbUw6HAV1 -scIcbCsYzczr5fJXd/wQ5/jWYEvGLZZeFcddkwjnGkg5GZCgxVoC+b272BLqSsfo -7w== ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_256_openssh b/tests/pem/ssh_ecdsa_256_openssh deleted file mode 100755 index 168e4201..00000000 --- a/tests/pem/ssh_ecdsa_256_openssh +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS -1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQSOECF1+jINDVg+jr1qm/y/PLE7Oeoa -rObF5AIer6/TZXhXM2oowlMp//ai8/wn1oNaao9yoDohWeAck98WHySLAAAAsDnMKZ45zC -meAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBI4QIXX6Mg0NWD6O -vWqb/L88sTs56hqs5sXkAh6vr9NleFczaijCUyn/9qLz/CfWg1pqj3KgOiFZ4ByT3xYfJI -sAAAAgawKIwHs3k5dhRXIdHgA+9C6labiTG/M+XejrsL4lqiMAAAATVGhpcyBpcyBhIHRl -c3Qga2V5IQECAwQF ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_256_openssh_pw b/tests/pem/ssh_ecdsa_256_openssh_pw deleted file mode 100755 index 857bee5c..00000000 --- a/tests/pem/ssh_ecdsa_256_openssh_pw +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABAn5/9Dp+ -3e5/CONojF0m0zAAAAEAAAAAEAAABoAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlz -dHAyNTYAAABBBI4QIXX6Mg0NWD6OvWqb/L88sTs56hqs5sXkAh6vr9NleFczaijCUyn/9q -Lz/CfWg1pqj3KgOiFZ4ByT3xYfJIsAAACwdmVChYQWUHPXdRjHIakF5mpsXJCuad7ytcaP -Hfi4EpadWiB08WtFpfmefLLaICd5b7dqJyVqTLOi1euFQOtOOjkn9kFfIUZiS97RgTDJX1 -YpVgDr30M4rj83SdeaCsmkp4/cAqF3NGjzljMX6wpaSAFpTsCjnp7Cm4wcT02DRTJ/7/KG -OcvrFyuab2vtVWSBU4lmNs4Xg9GFstkp0ecf5ThbGhQkYkkSILM1sMnBmoA= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_256_pem b/tests/pem/ssh_ecdsa_256_pem deleted file mode 100755 index 2a614ea9..00000000 --- a/tests/pem/ssh_ecdsa_256_pem +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -MHcCAQEEIGsCiMB7N5OXYUVyHR4APvQupWm4kxvzPl3o67C+JaojoAoGCCqGSM49 -AwEHoUQDQgAEjhAhdfoyDQ1YPo69apv8vzyxOznqGqzmxeQCHq+v02V4VzNqKMJT -Kf/2ovP8J9aDWmqPcqA6IVngHJPfFh8kiw== ------END EC PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_256_pem_pw b/tests/pem/ssh_ecdsa_256_pem_pw deleted file mode 100755 index 1d328a3d..00000000 --- a/tests/pem/ssh_ecdsa_256_pem_pw +++ /dev/null @@ -1,8 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,9D82B6C20F99509D97334341A49FB673 - -v81D80E80YvIpPvV7k+e1TC1AQ4McvsmS3WavIAC8bN60seWSN0Q0A6tD+q6SET2 -MHM8Op660IeoZ8BdTfKjH8CwiRlDBiSKl2zpAb+R3wiq9M4XdbG0h5+NiztoErB6 -VPeHeML4pd4fFt5fyOliMgw9VW7ZAhH2akXcZumtsME= ------END EC PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_256_pkcs8 b/tests/pem/ssh_ecdsa_256_pkcs8 deleted file mode 100755 index ad21c448..00000000 --- a/tests/pem/ssh_ecdsa_256_pkcs8 +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgawKIwHs3k5dhRXId -HgA+9C6labiTG/M+XejrsL4lqiOhRANCAASOECF1+jINDVg+jr1qm/y/PLE7Oeoa -rObF5AIer6/TZXhXM2oowlMp//ai8/wn1oNaao9yoDohWeAck98WHySL ------END PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_256_pkcs8_pw b/tests/pem/ssh_ecdsa_256_pkcs8_pw deleted file mode 100755 index e25bfd7a..00000000 --- a/tests/pem/ssh_ecdsa_256_pkcs8_pw +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIHsMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAjv0zzuInVzRQICCAAw -DAYIKoZIhvcNAgkFADAdBglghkgBZQMEAQIEEK/HPCZMTSzrXy+kuS337CoEgZBX -nUxLaCttKGUGwBTPAXFmihMfI54wNG3rSPCI1YQ0vs197hGST+V6EChSRVJWG2Zq -9vbdqsZUGaAqfNwd4e0vq8dkG45+mnYapI9p1QT2+kpFT1Vfgf7BdZiwunNHyT1H -2bxbs4dy4WNqVjOGIl7HW6G1wuqTTxkEBKuk68aBvJiYDq92ccXzUMuL+kv8eJE= ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_384_openssh b/tests/pem/ssh_ecdsa_384_openssh deleted file mode 100755 index 7462e0b3..00000000 --- a/tests/pem/ssh_ecdsa_384_openssh +++ /dev/null @@ -1,10 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAiAAAABNlY2RzYS -1zaGEyLW5pc3RwMzg0AAAACG5pc3RwMzg0AAAAYQSWQhcqgIlNqJCXnzncp4aTBiGpG15J -JssG1M5eI3wHQlGkIPpRQ1azuRkpODZREXfIhak/vv378nbAnNoJE69h+xwi1W4hHsz4ql -watHXJMwcpitiwhzPQZCbbjpuIZjQAAADgAwOSlwMDkpcAAAATZWNkc2Etc2hhMi1uaXN0 -cDM4NAAAAAhuaXN0cDM4NAAAAGEElkIXKoCJTaiQl5853KeGkwYhqRteSSbLBtTOXiN8B0 -JRpCD6UUNWs7kZKTg2URF3yIWpP779+/J2wJzaCROvYfscItVuIR7M+KpcGrR1yTMHKYrY -sIcz0GQm246biGY0AAAAMQD3dcLYMCsBbWxLYEQybGLLM6eUtV3ANwkys6qIxd39ZBIJOX -Q6Rh53xIuu1X8HFlwAAAATVGhpcyBpcyBhIHRlc3Qga2V5IQECAwQ= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_384_openssh_pw b/tests/pem/ssh_ecdsa_384_openssh_pw deleted file mode 100755 index 84e4596f..00000000 --- a/tests/pem/ssh_ecdsa_384_openssh_pw +++ /dev/null @@ -1,11 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABBsDCK4+N -u8awAwogYgkan4AAAAEAAAAAEAAACIAAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlz -dHAzODQAAABhBJZCFyqAiU2okJefOdynhpMGIakbXkkmywbUzl4jfAdCUaQg+lFDVrO5GS -k4NlERd8iFqT++/fvydsCc2gkTr2H7HCLVbiEezPiqXBq0dckzBymK2LCHM9BkJtuOm4hm -NAAAAOCP90SKhFjPa4AQkGEBDdUgE9XeFIcfF6LMGU9kAvcxQEMzrgNyH8HqB2eaqmp/u4 -5+HuE/MUhS4f245E40AMCqD3RnQuQDw9j+M/YzV15xadIz/Ks2TAL0aKlagyxfzRpJWhFq -g+7V6bu3gc60ktvxM3kNcvc5w9uATfVPc0K4ZqRyYMYBoMoR/MFhwurTK8xBU1bldu1T7k -xWy3N0+OUA6kCx7CPHV2Wf5PTFkX98l5KjU/E4vqrr6z5QpiGcnrIJ4V5C3BjToqdrTR50 -QI624LZ3MHyL060gUXgMbSlnkg== ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_384_pem b/tests/pem/ssh_ecdsa_384_pem deleted file mode 100755 index 651e71f9..00000000 --- a/tests/pem/ssh_ecdsa_384_pem +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -MIGkAgEBBDD3dcLYMCsBbWxLYEQybGLLM6eUtV3ANwkys6qIxd39ZBIJOXQ6Rh53 -xIuu1X8HFlygBwYFK4EEACKhZANiAASWQhcqgIlNqJCXnzncp4aTBiGpG15JJssG -1M5eI3wHQlGkIPpRQ1azuRkpODZREXfIhak/vv378nbAnNoJE69h+xwi1W4hHsz4 -qlwatHXJMwcpitiwhzPQZCbbjpuIZjQ= ------END EC PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_384_pem_pw b/tests/pem/ssh_ecdsa_384_pem_pw deleted file mode 100755 index 25a033a6..00000000 --- a/tests/pem/ssh_ecdsa_384_pem_pw +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,578CCBDEBACEA1887BD7E416B5644199 - -55LvNV4jryWi7gkFMIRChGAoI18K+3GDuqBnRQ5GosqtVDa94XGZ38UcbY9BEqas -G6S5JgS00UKFUVOvYiwcZ+hGG4LW38Q6eDo82notKIrVd1GSlXkAEInrXNwuK0kl -OTQ3wSRrbjlndB4Taut3YKu3LqpNfAcA1q/KabjXTsLX80tj2ONMrLMikSqut1tr -uKaNYDsxhW+wm1seFKYxUOHJ7M3eRhd7DPL5LuyIXR0= ------END EC PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_384_pkcs8 b/tests/pem/ssh_ecdsa_384_pkcs8 deleted file mode 100755 index 45b79f96..00000000 --- a/tests/pem/ssh_ecdsa_384_pkcs8 +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDD3dcLYMCsBbWxLYEQy -bGLLM6eUtV3ANwkys6qIxd39ZBIJOXQ6Rh53xIuu1X8HFlyhZANiAASWQhcqgIlN -qJCXnzncp4aTBiGpG15JJssG1M5eI3wHQlGkIPpRQ1azuRkpODZREXfIhak/vv37 -8nbAnNoJE69h+xwi1W4hHsz4qlwatHXJMwcpitiwhzPQZCbbjpuIZjQ= ------END PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_384_pkcs8_pw b/tests/pem/ssh_ecdsa_384_pkcs8_pw deleted file mode 100755 index 9dba0242..00000000 --- a/tests/pem/ssh_ecdsa_384_pkcs8_pw +++ /dev/null @@ -1,8 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBHDBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIohYB0kuf38cCAggA -MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAECBBDU9x93yJ82oFkEaN8CK4BTBIHA -74OxXzZLYTPnedtq5wq6j4Dq4TNtyp6zqKPTiB3nva6QsrO8ekzf+lc4rj3+Tald -GuAIysEKglscGLb4er53tuzceYE0R18yMQgK3/RAHcf9K9UkfeXkAlVTJGAwj0LE -tBD2b/q5B4lf6ofGs+UCbQdJMFEGa4fcPUAeSmp4ftoLoCmizEo2AtnWBoR6DQH6 -wUDaC3/xMZpz70CBeNw06KAqO75lQgFtQS5MDz/OvBIu6jaYs46Dpg6qCi+3R35J ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_521_openssh b/tests/pem/ssh_ecdsa_521_openssh deleted file mode 100755 index 0db5a744..00000000 --- a/tests/pem/ssh_ecdsa_521_openssh +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAArAAAABNlY2RzYS -1zaGEyLW5pc3RwNTIxAAAACG5pc3RwNTIxAAAAhQQBZN+bK7Xj/bcAsGCr1PaLzAYu+w3e -pRAT6xWjBG9AmXWeTAt50qn5Rh0VpEm1KY3T3Tu3GEDaSvWFx2zUjuYW1NYBWYMohhccCW -GM/DQI3nQVzIMh+CVqZSuRUJuT+XL2oJSLQvapCoqFF4QnOu2DGAbYr15VHtD4CKupGx06 -m1+vuTcAAAEY56EKgOehCoAAAAATZWNkc2Etc2hhMi1uaXN0cDUyMQAAAAhuaXN0cDUyMQ -AAAIUEAWTfmyu14/23ALBgq9T2i8wGLvsN3qUQE+sVowRvQJl1nkwLedKp+UYdFaRJtSmN -0907txhA2kr1hcds1I7mFtTWAVmDKIYXHAlhjPw0CN50FcyDIfglamUrkVCbk/ly9qCUi0 -L2qQqKhReEJzrtgxgG2K9eVR7Q+AirqRsdOptfr7k3AAAAQgDeJefvwF/LJrhUok7XvKgI -WcZ2BoXq2ebXKSDC4GyYElLhjLtz4eIxp0kySKDqvw0RrelJV7dqbiItueACXH5uDgAAAB -NUaGlzIGlzIGEgdGVzdCBrZXkhAQIDBAUGBw== ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_521_openssh_pw b/tests/pem/ssh_ecdsa_521_openssh_pw deleted file mode 100755 index ce9c38bc..00000000 --- a/tests/pem/ssh_ecdsa_521_openssh_pw +++ /dev/null @@ -1,13 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABCH9NIw7T -kdQ3+vJ7X7mK9mAAAAEAAAAAEAAACsAAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlz -dHA1MjEAAACFBAFk35srteP9twCwYKvU9ovMBi77Dd6lEBPrFaMEb0CZdZ5MC3nSqflGHR -WkSbUpjdPdO7cYQNpK9YXHbNSO5hbU1gFZgyiGFxwJYYz8NAjedBXMgyH4JWplK5FQm5P5 -cvaglItC9qkKioUXhCc67YMYBtivXlUe0PgIq6kbHTqbX6+5NwAAASBhW6bs4n2BCSwr/d -36a0+zTe0UZIrEPZR1bVKIdUvsGzT6m9vt+X72Qzx+RtatepwcddgU7Y9MnO0Idn6N24DM -YeG75MHMX4kVOpaLDyCQe6xlFJevAJUnsv+cLLih3kv+YSg3sTb3GIYLrxwgngPKkCiG+F -69gbLh/nxxqbLzl67Xt5Yblmy6lV+sZRJMrNUQT66+2WX4aN2MLfAM0Umaue+aq4ijwV4+ -RNXNwXv/Eyhac2jDQW2+UgdWVSjqNwWmgaSi6m2gXKXIWxggdwgJlklVIQJIPkTZHd5r4P -KI5MysGGZYoFU209vyiii4nY2zckbuyM1j1AwzHwfqIMka/+Zy+h4yVupwljm+NncOy82q -5x/hgkh3zs+zCkZPPt8= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_521_pem b/tests/pem/ssh_ecdsa_521_pem deleted file mode 100755 index cbadfea1..00000000 --- a/tests/pem/ssh_ecdsa_521_pem +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -MIHcAgEBBEIA3iXn78Bfyya4VKJO17yoCFnGdgaF6tnm1ykgwuBsmBJS4Yy7c+Hi -MadJMkig6r8NEa3pSVe3am4iLbngAlx+bg6gBwYFK4EEACOhgYkDgYYABAFk35sr -teP9twCwYKvU9ovMBi77Dd6lEBPrFaMEb0CZdZ5MC3nSqflGHRWkSbUpjdPdO7cY -QNpK9YXHbNSO5hbU1gFZgyiGFxwJYYz8NAjedBXMgyH4JWplK5FQm5P5cvaglItC -9qkKioUXhCc67YMYBtivXlUe0PgIq6kbHTqbX6+5Nw== ------END EC PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_521_pem_pw b/tests/pem/ssh_ecdsa_521_pem_pw deleted file mode 100755 index dea18156..00000000 --- a/tests/pem/ssh_ecdsa_521_pem_pw +++ /dev/null @@ -1,10 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,CDE898660DF24DC4638A0C291D395218 - -ZQz9iMCd17RSwBBzi5dMk4hom1b9KKsfwCMOhfnh5bNtmMmwy00GoCDZgNmAsezC -vQ/t5f0S8ZNtJaUOr2JgQl30wPP7GAWcc7BCJP3Qp8wqqF4ByEbsIvcX5nmIT4ft -RK6SjBEU5HrsZEB5hOyl81C1ZwiqK8QgYOb034y2scT+CunraBOvXKiffuDUs0NO -hyulD92+jmfGlReoLFZjcPFH+H099QvZwKCoQ57hxrnVHsmozRAaPoPdWAMNHrkq -B6OLFk5UMge5Ctolb8JEK8fNdRj5xTNT7Xh99G8edT8= ------END EC PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_521_pkcs8 b/tests/pem/ssh_ecdsa_521_pkcs8 deleted file mode 100755 index 2dbbbfbb..00000000 --- a/tests/pem/ssh_ecdsa_521_pkcs8 +++ /dev/null @@ -1,8 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIA3iXn78Bfyya4VKJO -17yoCFnGdgaF6tnm1ykgwuBsmBJS4Yy7c+HiMadJMkig6r8NEa3pSVe3am4iLbng -Alx+bg6hgYkDgYYABAFk35srteP9twCwYKvU9ovMBi77Dd6lEBPrFaMEb0CZdZ5M -C3nSqflGHRWkSbUpjdPdO7cYQNpK9YXHbNSO5hbU1gFZgyiGFxwJYYz8NAjedBXM -gyH4JWplK5FQm5P5cvaglItC9qkKioUXhCc67YMYBtivXlUe0PgIq6kbHTqbX6+5 -Nw== ------END PRIVATE KEY----- diff --git a/tests/pem/ssh_ecdsa_521_pkcs8_pw b/tests/pem/ssh_ecdsa_521_pkcs8_pw deleted file mode 100755 index a48191d2..00000000 --- a/tests/pem/ssh_ecdsa_521_pkcs8_pw +++ /dev/null @@ -1,10 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIBXTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIj/klIHUYLiQCAggA -MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAECBBA7Rd+K0DxULl6ZqNjQB0QiBIIB -AKnis0COKrS7sq9kRq08FksIbkGJi+i0z/JQ3txzqWIE6NLgAkiZ7EJjk2DyTj5+ -XbNQwZB456Wt+6LxJQesRxL2DYrRZkWbmUIRIurdO0t2b0ibdAPoubEKW+SvhS6l -GihBpM3njn/C6z67P7DekGmWBWdkk36qaBKaYVQsE53sQ2whAtZt2EKrJxjONKBI -z5Yak6S00tgjHTf/DBSVLnh/2Y+Q1uGxmzgJORmtexssmqeVmF/uJhyOcshyIPQn -frpJ6Rw/4aLckxjZ5nwlULFM1B/3hGi/IH+rfcQOg0Jv7WnP/arfQyylWnPq4V8P -ztPdEmIvZ5+OADu9zhbZHX4= ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/ssh_ed25519_openssh b/tests/pem/ssh_ed25519_openssh deleted file mode 100755 index 6574a1a7..00000000 --- a/tests/pem/ssh_ed25519_openssh +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW -QyNTUxOQAAACC9F7IhXEQ6eh6bKGpPDnYogTCYTNlCrMzU8aBku3SfvgAAAJiavUZAmr1G -QAAAAAtzc2gtZWQyNTUxOQAAACC9F7IhXEQ6eh6bKGpPDnYogTCYTNlCrMzU8aBku3Sfvg -AAAEDVvPqQHjnRzlV/e2kq+R5egY12xCIw9mJIuVWBm05ZBL0XsiFcRDp6Hpsoak8OdiiB -MJhM2UKszNTxoGS7dJ++AAAAE1RoaXMgaXMgYSB0ZXN0IGtleSEBAg== ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_ed25519_openssh_pw b/tests/pem/ssh_ed25519_openssh_pw deleted file mode 100755 index 1b6ff85a..00000000 --- a/tests/pem/ssh_ed25519_openssh_pw +++ /dev/null @@ -1,8 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABBS5x65zJ -2KlBbJ8giugjyEAAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIL0XsiFcRDp6Hpso -ak8OdiiBMJhM2UKszNTxoGS7dJ++AAAAoIG2oeen4YUUXyDj3RS2qGYLFhXBg5zjs6eWUt -f/f7o7o41LkZavIAC3bBc8PTPQwXg6QnGtGNkQaHae1Xe1Ca0dFDivSiOtrKSWzvgObcFG -JhEuxuPnFtNBVzpJGxJf3bCXZujIWobOQM5tNgJuVzpUUzWl0yYFUILAHS9AXwVnO1zUZ2 -Ddv7nyEbUXx1fGK4WFFBFGFxk9HDDQFxXqfiw= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_1024_openssh b/tests/pem/ssh_rsa_1024_openssh deleted file mode 100755 index e70b2214..00000000 --- a/tests/pem/ssh_rsa_1024_openssh +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAlwAAAAdzc2gtcn -NhAAAAAwEAAQAAAIEAuOfJNIoBYHL5Kw41CqNICID1tPu0BD3JO/w1yKRgJB8xw00C7u/y -M8QQwi+4kIRdnkMGkf7PUl47Ng1fzk90lzN0IyTuD0t5x5M3z+2Y6pvSxkonAYEfMeSz5s -aDVQN6jiJzD+cYYYGymGLrLgTAJaRIKv0/bgryyLr0ZxoQUw8AAAII7z6CTO8+gkwAAAAH -c3NoLXJzYQAAAIEAuOfJNIoBYHL5Kw41CqNICID1tPu0BD3JO/w1yKRgJB8xw00C7u/yM8 -QQwi+4kIRdnkMGkf7PUl47Ng1fzk90lzN0IyTuD0t5x5M3z+2Y6pvSxkonAYEfMeSz5saD -VQN6jiJzD+cYYYGymGLrLgTAJaRIKv0/bgryyLr0ZxoQUw8AAAADAQABAAAAgA+VIQS3eK -Q7LDpvqRKrbf+hdpN4/tO4rUPL3nB5QczpgBUYYV3nhL7OECd9RA2Ryh3zQhN9qNUlMdI9 -UEyfr5CFh3EJi0fPXC0TpQeHMm/nuJIuPN0Tq+p4gzYZ4inmnlvUBjBByAG3/FG4LgNr1O -KfvcHHpjYhVCXMIkO+NMzRAAAAQAxffrTSdcbVtc/8Ev7tSBk5DC2AKcqlDH9nsH+crw/M -sR+DxHmBAvevpJ+m3RBK5OrLDj9jtZ/Y8CJUcmYHCjoAAABBAPYbLJBvMRRuKLAaMZsfXf -VpW87YW1ilhZyRCGB+sF3CQsQJQNEviCCoak6COcXhYVdrZQL8G8vJIASN/AGFTLcAAABB -AMBWwig0FiG5a0KAnhR1O+XwEmwl8BBrTCDv/hk/YXKVAAeYkI8DngDEBG7O2ns0rnxmyM -lFC+gCQRqERkVXBGkAAAATVGhpcyBpcyBhIHRlc3Qga2V5IQ== ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_1024_openssh_pw b/tests/pem/ssh_rsa_1024_openssh_pw deleted file mode 100755 index 1410eb95..00000000 --- a/tests/pem/ssh_rsa_1024_openssh_pw +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABBv0NW04p -+2tpZ2NtlcxyGfAAAAEAAAAAEAAACXAAAAB3NzaC1yc2EAAAADAQABAAAAgQC458k0igFg -cvkrDjUKo0gIgPW0+7QEPck7/DXIpGAkHzHDTQLu7/IzxBDCL7iQhF2eQwaR/s9SXjs2DV -/OT3SXM3QjJO4PS3nHkzfP7Zjqm9LGSicBgR8x5LPmxoNVA3qOInMP5xhhgbKYYusuBMAl -pEgq/T9uCvLIuvRnGhBTDwAAAhA6fF+4MQPLd7eHJrlLpmk1nBZcGkFxa8zwLHMQdT/xiM -VcOgfvuNowCbMPY4+vG5cxUcU5WSK2vE5JsnPKpNflcM+qcGtR6EBcTEHS6YFhJv5gWBuT -uT+kdTzpcsipcYpjo5oVIIeZbWziWBPKH6tq5XyFFEzKIipkIsluuvk5SqMwJAVJeOwutR -hWtAUyv/015L30WH1VVZ8jMYJDENiRqUkxwj7gCLNjLhARbm0ZgGXGBtwUL1Ni9Irzoei6 -xd/7PAwJeuQXgJpm4a12ueGDjZDGWndxOrzrNO5H/pJy/ExtYQN0Y3W7zlPOhVQl44bAcz -QixvEJNyHCpz+szKubtfix5g9ZlbnK887mm53M5boTB99B1KErXOvfjY41OYXpQprKyqku -7GffaG7xNDktXPhv0Qd4Oc1IBhqHwm/V7d1DZ2Ugu2Mib3wqg9f8I3VD5hA52wFG5A9pjb -ffbymsJAvx5xs/q026tElU3W3VL8+eQKOvMIEYDhqazcDY1l8MNCA6O7YNqhqQC78dA41m -9D64fdcJnmHsJjuKgCx1JdKNm2dMOiNs5wrdag0TEOe+nwwTV9/y6yZlerWac2Qhdu8hJD -aW55yDClwJdVwGLEPz1xyyQM3t70j4XuEdYOHruT5KKWDfG5zfWaitAS019iGcJOqiMDD7 -/wl9KNjIglXTX/wmCOK4veSjQBe4/Gs= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_1024_pem b/tests/pem/ssh_rsa_1024_pem deleted file mode 100755 index 38430491..00000000 --- a/tests/pem/ssh_rsa_1024_pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICWwIBAAKBgQC458k0igFgcvkrDjUKo0gIgPW0+7QEPck7/DXIpGAkHzHDTQLu -7/IzxBDCL7iQhF2eQwaR/s9SXjs2DV/OT3SXM3QjJO4PS3nHkzfP7Zjqm9LGSicB -gR8x5LPmxoNVA3qOInMP5xhhgbKYYusuBMAlpEgq/T9uCvLIuvRnGhBTDwIDAQAB -AoGAD5UhBLd4pDssOm+pEqtt/6F2k3j+07itQ8vecHlBzOmAFRhhXeeEvs4QJ31E -DZHKHfNCE32o1SUx0j1QTJ+vkIWHcQmLR89cLROlB4cyb+e4ki483ROr6niDNhni -KeaeW9QGMEHIAbf8UbguA2vU4p+9wcemNiFUJcwiQ740zNECQQD2GyyQbzEUbiiw -GjGbH131aVvO2FtYpYWckQhgfrBdwkLECUDRL4ggqGpOgjnF4WFXa2UC/BvLySAE -jfwBhUy3AkEAwFbCKDQWIblrQoCeFHU75fASbCXwEGtMIO/+GT9hcpUAB5iQjwOe -AMQEbs7aezSufGbIyUUL6AJBGoRGRVcEaQJALwEPqOJjyFgl00Sddtgt1OJzk3UF -NVAfzcBxjiSEQNQKdnCh/ZILeNlRvH7o099w/QZY+5H1KR3XzKblm9C+zwJAavKS -6Tn1KHFqg8Lyo1uAn9160OnTb73JyfLIbo+Ahu704kRh9TPEspZMBLU+ZQ2pDAE3 -GjsrYKmIO89bJ4k4KQJADF9+tNJ1xtW1z/wS/u1IGTkMLYApyqUMf2ewf5yvD8yx -H4PEeYEC96+kn6bdEErk6ssOP2O1n9jwIlRyZgcKOg== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_1024_pem.pub b/tests/pem/ssh_rsa_1024_pem.pub deleted file mode 100755 index 89892c7a..00000000 --- a/tests/pem/ssh_rsa_1024_pem.pub +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN RSA PUBLIC KEY----- -MIGJAoGBALjnyTSKAWBy+SsONQqjSAiA9bT7tAQ9yTv8NcikYCQfMcNNAu7v8jPE -EMIvuJCEXZ5DBpH+z1JeOzYNX85PdJczdCMk7g9LeceTN8/tmOqb0sZKJwGBHzHk -s+bGg1UDeo4icw/nGGGBsphi6y4EwCWkSCr9P24K8si69GcaEFMPAgMBAAE= ------END RSA PUBLIC KEY----- diff --git a/tests/pem/ssh_rsa_1024_pem_pw b/tests/pem/ssh_rsa_1024_pem_pw deleted file mode 100755 index 57db6560..00000000 --- a/tests/pem/ssh_rsa_1024_pem_pw +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,E477849D4A0566B706D2DFDD516E2F3E - -mkf+MOS5kcOUMqKEyiBiBgrB3Lv4KFQyc7V26EkYIziNwriuKArhBv8Vt5SBmrzk -z9nVqPVw/CgpTlf/4BkR78EHkV4DoCgt8JIOKz1kDl9GLyRPsHIPL+g0IpBg1+LK -B0uDFoP5/aQfSl+5t1RODd11wrUg6T1BSRzRTJvzvXagrelVrZlxieTNYHd0B5AX -eJyX39DpaEIoOfyfaQFWQIaMns2Vd1y0uYdhUd8DdTHyD176KNBW10qrbzjNrIDl -3TTx6RtU0m7qxRC1++BZ/ZeKo1EnUdzPzeFNq2mO2Th2i7n2VaSuYIrArAtewYCw -CiZPVFFZhwWc6PqR27hqC5wn8nX2NrlmBHiJ16Jrkb1jLW6jUMOJRITtEjCEjcQO -05Jcj+dk60VduXG25N6EfH3Ff1P256fRZfJOaN1abyc9TlFPO701OStTLiKm/O8O -CwOSHK75CAnvbeHeLxA7r5s+y10toEZw2eR6lbUnMsu9WkwF0J/6GbQh44sVfCIQ -WNqwX76qCPxZWzMY2mLdNAl0noNMNZVlYlw1t6a23P7lzWXOOI/nO42braR/OApQ -Xn6wiLh1CzL3CvgraDocbYEBGrx0wIiz/emKJKHDTuxbcR8QNYzcr1k7z6WWQP/8 -tiV/8xqneg4f4BM8zPat8fJXnr50ZB1u7UcLwDOK6ergkksRgIA7wJeL7yhZVJP8 -s39x8w57HSFY0JWIlap7hJDD7MnnLNbQzdJ4d4HyY53uOEtYA/hFzOPGEsWL+c90 -ulbWwNz2ew2VCUuTg4CDnsckR0OUGSXQIY4xUzcTwcw= ------END RSA PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_1024_pkcs8 b/tests/pem/ssh_rsa_1024_pkcs8 deleted file mode 100755 index cbc35140..00000000 --- a/tests/pem/ssh_rsa_1024_pkcs8 +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALjnyTSKAWBy+SsO -NQqjSAiA9bT7tAQ9yTv8NcikYCQfMcNNAu7v8jPEEMIvuJCEXZ5DBpH+z1JeOzYN -X85PdJczdCMk7g9LeceTN8/tmOqb0sZKJwGBHzHks+bGg1UDeo4icw/nGGGBsphi -6y4EwCWkSCr9P24K8si69GcaEFMPAgMBAAECgYAPlSEEt3ikOyw6b6kSq23/oXaT -eP7TuK1Dy95weUHM6YAVGGFd54S+zhAnfUQNkcod80ITfajVJTHSPVBMn6+QhYdx -CYtHz1wtE6UHhzJv57iSLjzdE6vqeIM2GeIp5p5b1AYwQcgBt/xRuC4Da9Tin73B -x6Y2IVQlzCJDvjTM0QJBAPYbLJBvMRRuKLAaMZsfXfVpW87YW1ilhZyRCGB+sF3C -QsQJQNEviCCoak6COcXhYVdrZQL8G8vJIASN/AGFTLcCQQDAVsIoNBYhuWtCgJ4U -dTvl8BJsJfAQa0wg7/4ZP2FylQAHmJCPA54AxARuztp7NK58ZsjJRQvoAkEahEZF -VwRpAkAvAQ+o4mPIWCXTRJ122C3U4nOTdQU1UB/NwHGOJIRA1Ap2cKH9kgt42VG8 -fujT33D9Blj7kfUpHdfMpuWb0L7PAkBq8pLpOfUocWqDwvKjW4Cf3XrQ6dNvvcnJ -8shuj4CG7vTiRGH1M8SylkwEtT5lDakMATcaOytgqYg7z1sniTgpAkAMX3600nXG -1bXP/BL+7UgZOQwtgCnKpQx/Z7B/nK8PzLEfg8R5gQL3r6Sfpt0QSuTqyw4/Y7Wf -2PAiVHJmBwo6 ------END PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_1024_pkcs8_pw b/tests/pem/ssh_rsa_1024_pkcs8_pw deleted file mode 100755 index 2af82926..00000000 --- a/tests/pem/ssh_rsa_1024_pkcs8_pw +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIC3TBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI2Sks1nL15TMCAggA -MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAECBBC04izjwickhqod+XNYhY7SBIIC -gBHoX9NakaLvJUH2rFMvrGEXsrt1FinzUDK1u2UOUfIfjcpA2cupAs8FR7kE0plQ -e55t1PW6lBpyCJTKhTxUxCKfDHPCnTSbvpVK9vdizbUDohX/fXpY03RawGcaBnDA -SchpegP1j6pbmgyCEXJP6e/mn/CYbsnWMiVXtlaFizEeJkSRn6mbl0Cq9KRwXqkI -GUZ9wdqyoHlXuAggWAXBpkvAXQ+KZbRQuQOJOHo4gL4FMnS4jXDpVswVg0voPZFb -EBzk6wUQJQSEUjN3l/Fshp9hzTOEKt8pgUIopKCVyrvuyY2gaUcOlHmNvCA/grsz -DUqV2je1wFQAoe+Wf/aa6WjMdc7WPsmaqPwHyOgk7qrYqH9XMx3IEHgV90LNrqzf -44qJlclsNl83ZFxjMcAOM4zzyoxfeq6crDRzzJeMzJVawlUmnAq1C3SMX0tHS2ax -l5NOjWOQxch3b8xAPDBQAp1xcepY4P3vzCG2o98rAJEJ4rlt/3NtklyXfXaaLsl/ -YsY1JKFZhlCtJ2uRRsp1ODKHiEBx2UAtQhPn5OVbVQwUmyUtldbnhX0KG6P8sJDU -XwzaS6QEYyqhXwuytAPzhoUyJdRop9+k5QYiQ4Z8t+xRq8+yhfhj3RJpoN1zoP/L -Anuogu1VRtwKZyLrEROSarCV47yz7ZpnNnfuaRYcHHwH5ayZ0P29iwXHIiQd6tCo -Y+0M05PkZTFcpsDmMjg5uGSSvo9kvBhg+1vwxC9CbfgL45G8ZXsrUOuMN5+HTrS5 -Qo9wzAwHvYrPFmaVTGhoZHmP2mupSnqg/ne1YdVfXzXRZpFPMPvj2YrawNOpM7T6 -PaQB/0Sn+vWbYsuyKzjH154= ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_1536_openssh b/tests/pem/ssh_rsa_1536_openssh deleted file mode 100755 index c341b86e..00000000 --- a/tests/pem/ssh_rsa_1536_openssh +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAA1wAAAAdzc2gtcn -NhAAAAAwEAAQAAAMEApGB3n/5BYXbRMBuGGX2p2GPdnJg1/YKsOzhNncTMkMo+RMp/87Wi -CBESRr9gRu05RIvBnfN8Bb0q6pOHYh8nEJthWy7adufG7svz2AmN3L8WC9YplMbemj3i6Y -c8UKbdnUsAqJujOQ6v7MQeGFfpb1aVmRLiBc7Hxraoizu1OMfNJVwteN9DLTeWep2EzlbZ -LWJBSQpjEk4WInHui+ER3UzXo0GZZihnyxCnkd8E8ASHyzvVxZEpR89lJOKvwpa9AAAC6F -7vujVe77o1AAAAB3NzaC1yc2EAAADBAKRgd5/+QWF20TAbhhl9qdhj3ZyYNf2CrDs4TZ3E -zJDKPkTKf/O1oggREka/YEbtOUSLwZ3zfAW9KuqTh2IfJxCbYVsu2nbnxu7L89gJjdy/Fg -vWKZTG3po94umHPFCm3Z1LAKibozkOr+zEHhhX6W9WlZkS4gXOx8a2qIs7tTjHzSVcLXjf -Qy03lnqdhM5W2S1iQUkKYxJOFiJx7ovhEd1M16NBmWYoZ8sQp5HfBPAEh8s71cWRKUfPZS -Tir8KWvQAAAAMBAAEAAADAfd03/BRt77lROGr65a3pTb46RNvwC2vxgW79T58PnJaf04DT -NMORjGe1/OIxUF35CdmRqeZ0wtg0cmYAtktwWDEB/RYFRiL3moYk8vlt3Oecc/fK4xbcAH -L+ux5IOuFpeg6nEVuLZ0Dc7KZEKAdcmRbdCUnKp+IYuUV1m05MJ2BBWuTz1x4oPZVkDTu+ -CyjLU7u3RboaOGCfLPvupcjRSTMVBORmfhzAopaLx6eDX4DFISjNgzHPpEfqb2P80q2pAA -AAYEZkrc//Bi+o7NQdMXuQDNJYMy9BOxZddy4VrB2W+KqeEXYrXBBZp8i0iHDWMl7wI+Uh -hrW8KYGWP/8PAvQRYbNrxig90FpRw5AqTjIKM0bb0BI+zFhJu5fcHY9I6UjISgAAAGEAzb -3spw8U81xstli3roBHN+hSeEeGiv0Xz9rf/meJvcQa1AAInDOoU151GI5c8B7fDMKY0fsN -p715kxOb7O/SBXTgI9tx7cpQtJZ9VrZna8K+ZP0dPd3i1aSEm1O+mzhHAAAAYQDMh8bxm+ -rZVJQ3MFobd2WmaPTCV53KMYpHNINhid17N2ajJ5sP0TniYS/662X9GTPnTxIbvL3kILA+ -TRJS6dOR/jIfmN2UFRW7846GMbDLe4BGndF54P1sciksz+xF/tsAAAATVGhpcyBpcyBhIH -Rlc3Qga2V5IQ== ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_1536_openssh_pw b/tests/pem/ssh_rsa_1536_openssh_pw deleted file mode 100755 index 3c041328..00000000 --- a/tests/pem/ssh_rsa_1536_openssh_pw +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABAybv501Y -8iWmZWeJtBAfWtAAAAEAAAAAEAAADXAAAAB3NzaC1yc2EAAAADAQABAAAAwQCkYHef/kFh -dtEwG4YZfanYY92cmDX9gqw7OE2dxMyQyj5Eyn/ztaIIERJGv2BG7TlEi8Gd83wFvSrqk4 -diHycQm2FbLtp258buy/PYCY3cvxYL1imUxt6aPeLphzxQpt2dSwCom6M5Dq/sxB4YV+lv -VpWZEuIFzsfGtqiLO7U4x80lXC1430MtN5Z6nYTOVtktYkFJCmMSThYice6L4RHdTNejQZ -lmKGfLEKeR3wTwBIfLO9XFkSlHz2Uk4q/Clr0AAALwd8Mc5VGKGi3PsF5/Tjo4V8VydbWF -IrFr+vEY/8jgS2VlzHDOi/yK4UdrsvL3xcSTZlt5RMLlT0kE7VGd/SX1/x0fi1P1Z8Uknw -/4qJDGy7Anx6YccTeUtWoKs2NSZ9A0fuRotNOp0jDq7Z+1zQ8eK0GwnvPWasbFgSnYxtrn -CIBxhL08Qy3CmD0+Ajy9EEpyELHHD36wKznpxVyoEXRRO3Hq7NRnie3SBvgKBbPxHlUxNM -if6538VhA2HIG5vdADzg31U4HnIjiuykze4AGHJnPhc9gTtpOmX5CYdVZX6KDOtUcfgfsw -L+CDqSxlPnm++VGIz7fzXmnaUUxD4Pyrr/bvTxBptXc3p1+oU9QLoBMBO0dkenhIDtEfQe -ENEmQxZD3sQflh8XhEtd7BUG9SAKRXWQSds5gLmTYQXo26RpsyKjTd4iAa9/lF/+gTSVBC -3PU0Qjw9zx4Pp7riLg5z8M6j1umOmBtnN4mO58LAOETnR9IK8WN6ZaWE3nFfhBodHDpkqZ -/LELo171IqZV8iKjMj5TV57nstnF6ME7SdPTWM/juhGj03hJc2r/Mg3mSU7eeVJefe9VNN -G5N1slfu40YvWYmfTX3lKRIfIJqkrdgjv45KcBQWpoS+jjWeE8RE9wfjhlfVrFoJOYN56n -3m7Jn9jtfqBNHyCoVbP1DEbn6bbaKsprrDUYswYcHPCDEx9N2WNLxzqq7PegHYwqS5Hyv7 -c56iqRdBYv0KsAhLYBb6to/Kpi6KlPJ/sNes4Fo+Q3PMVNmJS8qhFRTvwUVdqqRyy9S63P -Us8uEcD6w61sGBFTw0CTpHqRTbMqvaC+KCXQixsXS0CCSm7PQm0CQIfiV6gS4wfQVrBQ8g -uQPpQ25PZfDPJ8ez+na/HBcoyZrg+v9/kPP52FEZ/g5s4Oe+0O6WCw9hc+nzzFIFqtAlxL -ZIJUdOA5geshBuiBCJ2U6Tr8T/mOk7IwglKRZOW01NGekVhpEiP5QJTNVguLDYvsI= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_1536_pem b/tests/pem/ssh_rsa_1536_pem deleted file mode 100755 index 7b2451a2..00000000 --- a/tests/pem/ssh_rsa_1536_pem +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIDewIBAAKBwQCkYHef/kFhdtEwG4YZfanYY92cmDX9gqw7OE2dxMyQyj5Eyn/z -taIIERJGv2BG7TlEi8Gd83wFvSrqk4diHycQm2FbLtp258buy/PYCY3cvxYL1imU -xt6aPeLphzxQpt2dSwCom6M5Dq/sxB4YV+lvVpWZEuIFzsfGtqiLO7U4x80lXC14 -30MtN5Z6nYTOVtktYkFJCmMSThYice6L4RHdTNejQZlmKGfLEKeR3wTwBIfLO9XF -kSlHz2Uk4q/Clr0CAwEAAQKBwH3dN/wUbe+5UThq+uWt6U2+OkTb8Atr8YFu/U+f -D5yWn9OA0zTDkYxntfziMVBd+QnZkanmdMLYNHJmALZLcFgxAf0WBUYi95qGJPL5 -bdznnHP3yuMW3ABy/rseSDrhaXoOpxFbi2dA3OymRCgHXJkW3QlJyqfiGLlFdZtO -TCdgQVrk89ceKD2VZA07vgsoy1O7t0W6Gjhgnyz77qXI0UkzFQTkZn4cwKKWi8en -g1+AxSEozYMxz6RH6m9j/NKtqQJhAM297KcPFPNcbLZYt66ARzfoUnhHhor9F8/a -3/5nib3EGtQACJwzqFNedRiOXPAe3wzCmNH7Dae9eZMTm+zv0gV04CPbce3KULSW -fVa2Z2vCvmT9HT3d4tWkhJtTvps4RwJhAMyHxvGb6tlUlDcwWht3ZaZo9MJXncox -ikc0g2GJ3Xs3ZqMnmw/ROeJhL/rrZf0ZM+dPEhu8veQgsD5NElLp05H+Mh+Y3ZQV -FbvzjoYxsMt7gEad0Xng/WxyKSzP7EX+2wJgGn/A0E+P+jxIQEAzAEXDZn8EyDsm -KBarD3l4ajL5ubhdYDrU4RGCN6Kt4EjNzZucTO9vcXQtcRJlaz0WUzEcUtmX2OZ1 -yRPKy0eqwxVhQq7liOpU7tf6VFwJPFxP63wXAmBMNfunY5WqzZ08w0OQIHk7/LfX -ApbFFJiV17dszNY+Z3JTMRrSVf/fnp8mPDiQiqeQdSImO7n2G0gQrt85De/L4pAC -vg8ycnjaw/JDhph9+dLefUfkxjUoB5HYJNHBcykCYEZkrc//Bi+o7NQdMXuQDNJY -My9BOxZddy4VrB2W+KqeEXYrXBBZp8i0iHDWMl7wI+UhhrW8KYGWP/8PAvQRYbNr -xig90FpRw5AqTjIKM0bb0BI+zFhJu5fcHY9I6UjISg== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_1536_pem.pub b/tests/pem/ssh_rsa_1536_pem.pub deleted file mode 100755 index b6399f2a..00000000 --- a/tests/pem/ssh_rsa_1536_pem.pub +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN RSA PUBLIC KEY----- -MIHJAoHBAKRgd5/+QWF20TAbhhl9qdhj3ZyYNf2CrDs4TZ3EzJDKPkTKf/O1oggR -Eka/YEbtOUSLwZ3zfAW9KuqTh2IfJxCbYVsu2nbnxu7L89gJjdy/FgvWKZTG3po9 -4umHPFCm3Z1LAKibozkOr+zEHhhX6W9WlZkS4gXOx8a2qIs7tTjHzSVcLXjfQy03 -lnqdhM5W2S1iQUkKYxJOFiJx7ovhEd1M16NBmWYoZ8sQp5HfBPAEh8s71cWRKUfP -ZSTir8KWvQIDAQAB ------END RSA PUBLIC KEY----- diff --git a/tests/pem/ssh_rsa_1536_pem_pw b/tests/pem/ssh_rsa_1536_pem_pw deleted file mode 100755 index c4eca339..00000000 --- a/tests/pem/ssh_rsa_1536_pem_pw +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,DA5298F957F4BABAD26D9242D8D2FEEA - -RC9S5yEOPNePdHGCAWk8601b2glss7wSrb//kphbt4gnpxqq9OqNuZP2IlUjU6uM -/9dW4AK82pekBkywDI/zVpWBTh2FGxKOdXEcfB2IPe6HPhr9x+A0zEWJavpDjyyP -3GDU/V/A/jt5YmeEjtp0sN65xMHynl1sT7VJvGqvLqCk1p4S5Eans84+umn11XbP -s+GdP5zKkzQI0dLnf9cXYg0wLIZ5fseX1TP2m8dpx7PKH1t/eH7mWOcO1uAuCrAO -8pvfQ5GXs1g8nkwmXD7qZgxZobiQT6V+eXxAqYQy/Jqlq+zUUpd8tsJ5iwlzPNgZ -MtUzYZogNsReolQ4Rd8u6S7TLjAc3cYMXpt1W0vEpm0yB01dfmDfmsWrBfKdDX8d -bo3FLxBQXkHULTqEJXW5Gv+paltssXi/m7liPfsUbxVlJZ7mFmivSa1rQTV/pPm1 -AZyDMs/jzFn8jf/UZQWbtR2zeFCueq70N6JQTHqgEjitDHMEZcIZLLlXjw3PWaOC -xl1E5McO+p9D3ZYUdvTmYTx9DWRPRemDKrA7OFODCRyG0VlGgB6RMnRetgAcG9aD -P2kIEIDIYDAz+Y83ZTguauE44RMRNFAi735stbo5XGpQVUl7OxvlvKsUNyIVX58x -E7cIJne/QRz7NFN/52ShGjXZApKpRcpm1eH/uvsjYdA0jipU0MtkpP+HqxbMYwrr -BJ5RAjUlIYvWbz+UnW5Dnsmua0XRVTdk1GN/QDhbnHlybkk5KcJrVJlMswul2uvm -RPnyds4o0UTteqJvvpsdtkXSd1LPc0vPwbxHKNgjhF7BHxIdG16jjVfOqD5NaFzG -m+Mr9TqS/3CWI9dFkTJPjmo1NSr4vcWf2AA8KuaP+bEOx482+tZ0FwogSMbgmymX -RwvTf7O5uqo7mN44rLYe//PiC9zcZ2f+tmNWlCsz5FYxCNS5x+zpZB4fPt49S2c5 -ZhF+LqNdlh77fFyEM74pz1fcxveCKn6tx2lB/K511vXwThHJNOW+cwFfZOgqwosq -pSxqq3YtYJS5PdtRmiEnvz82PWmp7nOcTat7jnoPKhWhN24LPfygq2CWT1HM8KYC -XPIReyX3ney2bpt6cleg31kEyOnbcE7e/+vZEwwQpfUgdTzxdjyVlZTFu3yFji6E -Mjm/F3a6T4kwxgSeXEPBfie5J9RInjW8dT4W7H3PfmQ= ------END RSA PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_1536_pkcs8 b/tests/pem/ssh_rsa_1536_pkcs8 deleted file mode 100755 index f1061e98..00000000 --- a/tests/pem/ssh_rsa_1536_pkcs8 +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIDlQIBADANBgkqhkiG9w0BAQEFAASCA38wggN7AgEAAoHBAKRgd5/+QWF20TAb -hhl9qdhj3ZyYNf2CrDs4TZ3EzJDKPkTKf/O1oggREka/YEbtOUSLwZ3zfAW9KuqT -h2IfJxCbYVsu2nbnxu7L89gJjdy/FgvWKZTG3po94umHPFCm3Z1LAKibozkOr+zE -HhhX6W9WlZkS4gXOx8a2qIs7tTjHzSVcLXjfQy03lnqdhM5W2S1iQUkKYxJOFiJx -7ovhEd1M16NBmWYoZ8sQp5HfBPAEh8s71cWRKUfPZSTir8KWvQIDAQABAoHAfd03 -/BRt77lROGr65a3pTb46RNvwC2vxgW79T58PnJaf04DTNMORjGe1/OIxUF35CdmR -qeZ0wtg0cmYAtktwWDEB/RYFRiL3moYk8vlt3Oecc/fK4xbcAHL+ux5IOuFpeg6n -EVuLZ0Dc7KZEKAdcmRbdCUnKp+IYuUV1m05MJ2BBWuTz1x4oPZVkDTu+CyjLU7u3 -RboaOGCfLPvupcjRSTMVBORmfhzAopaLx6eDX4DFISjNgzHPpEfqb2P80q2pAmEA -zb3spw8U81xstli3roBHN+hSeEeGiv0Xz9rf/meJvcQa1AAInDOoU151GI5c8B7f -DMKY0fsNp715kxOb7O/SBXTgI9tx7cpQtJZ9VrZna8K+ZP0dPd3i1aSEm1O+mzhH -AmEAzIfG8Zvq2VSUNzBaG3dlpmj0wledyjGKRzSDYYndezdmoyebD9E54mEv+utl -/Rkz508SG7y95CCwPk0SUunTkf4yH5jdlBUVu/OOhjGwy3uARp3ReeD9bHIpLM/s -Rf7bAmAaf8DQT4/6PEhAQDMARcNmfwTIOyYoFqsPeXhqMvm5uF1gOtThEYI3oq3g -SM3Nm5xM729xdC1xEmVrPRZTMRxS2ZfY5nXJE8rLR6rDFWFCruWI6lTu1/pUXAk8 -XE/rfBcCYEw1+6djlarNnTzDQ5AgeTv8t9cClsUUmJXXt2zM1j5nclMxGtJV/9+e -nyY8OJCKp5B1IiY7ufYbSBCu3zkN78vikAK+DzJyeNrD8kOGmH350t59R+TGNSgH -kdgk0cFzKQJgRmStz/8GL6js1B0xe5AM0lgzL0E7Fl13LhWsHZb4qp4RditcEFmn -yLSIcNYyXvAj5SGGtbwpgZY//w8C9BFhs2vGKD3QWlHDkCpOMgozRtvQEj7MWEm7 -l9wdj0jpSMhK ------END PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_1536_pkcs8_pw b/tests/pem/ssh_rsa_1536_pkcs8_pw deleted file mode 100755 index d757d6d2..00000000 --- a/tests/pem/ssh_rsa_1536_pkcs8_pw +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIID/TBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIVsofOnml2ugCAggA -MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAECBBDuzw8XM1SrQmf7uDdU0B0wBIID -oGYDAsp3pnCzRnhbx/ouBA4uY4McoxM84DQLDmtRko8i3tMnowXFpvU4WzMhjPEO -lJ/i2bm4UWAbEkwxkhMz8efP6taD7ofsFjPQ6pTPUYjrOr9ul9K5Y/QuMJ+nC7WI -SgireB79vhp5iKGdUwNbfETf0JbJTdgQORP3CbI4UkBLM+M+gUPuBhzyS8TkyNUl -uCR4xyx7fEXsjL2csICyMIgnQFTy5aTOCW2PHwLOgnRvwkwckphQa71YOSp5/IBP -JPiZ8j/4bU2B94CatblFlyvu94R3VTKx0wV+sEQGSdMLiu/B0NF66VhbpZ27bqoc -ExbilhD1SWSHLthUhLwHpLfO1CVTBJEuVfyqF1ok/ywzVqVrNyJVHWzI5vPxuC3D -n1vaLUupOi8kh3+Igy0qKTORrrm6RQEVxiaaH1XBGhpVAKR1O7e83GwJF+SEKDUN -F/Y60T/B5nASfusHS9sOjXHjGECfOKrhVY8TkTLh4Eual8CEVYWJcO6YW2wGAFK6 -OAR9gFt50okyk8JkgcT3ocSncAv8l1E9+C8ZYlOf3YjnZVJ3WIDflz0TSHiJvj4b -zaMDjZWO9yZZmOw9Vztiwob6fDtjWvOFo8iNUG9V1hc74QbGffwPi5ak3ZPhfTJn -+vL5JhOZQw+V7gQOyy8xMiZrUsz1aN5KrXriAT2JvCe3+TV+Q3TMK9CMHnfkliXr -oKS+3IbXfm9KhnJdOAYcFmoLlntgADmK4yZvSPs9vOhn4qHjoHdnXp67MnBSX2WV -rLbar3Jf2PReei+rC/v55jOO/kxSUNPO1ndjcRHPi5Mjw5SI4NpuI/QCnV2i/M5N -whbtyFql2URL0Mv9ZblpeiJkpAsOFtYE+eA0WvZbo2yFbKDKqdGIbkiX65GPtcwM -U4cgh72Gj6/Rt4hKOljI7udS9i5QCwFz/u5tzkFVo3cYa+TqyfzVUhjDe4c6L5ei -bbJ7fgVRr8Oqwxa9FE6jvKrvHHwF543i2/ml8EUgZyvV7/Ogbz7E8h+bjqdKimye -evzGgiqcPPlFS8UIeO/gYocSYxQvdpBUT3UK1eBa6uM3rLO8zORalADit1Rrm3QA -8gYWMLUjkw5yTxeML6zRe1270E6WUhKlt+ZiS2lCM20nikzdeIJHBJiyN9yXvNMy -Cvj+sFWfIQU7shhVolKvTkEhWCa0raqtwFS0/lZjnb0OzHYRD0uMjyO/aNKcAeyW -Zlxinl0oqwmdHqWKwt/nDsw= ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_2048_openssh b/tests/pem/ssh_rsa_2048_openssh deleted file mode 100755 index 57bcae82..00000000 --- a/tests/pem/ssh_rsa_2048_openssh +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn -NhAAAAAwEAAQAAAQEA3cYzdPtsXO6Xa3gamHP5g0QvDrlq0u8K3uXxFAacpaK0I24bVFVF -Pjsf+kUmW23jYNxL3Fk0+zUGO9cOyxkoIjSvW4FNStedes6b2NBdiBoMfcWb7yCVRC0l0E -RYCAUhXrGplWbyUXefrM4KtY5jE4m6PX8jyaGSz8rOUhcTxw3silM/Jc2B1ZrjoczoUo0j -R0BlT9B6HvDe3UGhVONAPCUrFIeeu74I15bbNdyhKxmgXstuOKHuCfsZcM1h7IoAI9Q6Ah -jGg3UkPFnxPwRFCauZjRKfhsUHuIRzMG24NkSWWfJBUSjoglInEJFQhQN8lmqPuaHXIMiN -N7Kn564JGwAAA8jwkIH78JCB+wAAAAdzc2gtcnNhAAABAQDdxjN0+2xc7pdreBqYc/mDRC -8OuWrS7wre5fEUBpylorQjbhtUVUU+Ox/6RSZbbeNg3EvcWTT7NQY71w7LGSgiNK9bgU1K -1516zpvY0F2IGgx9xZvvIJVELSXQRFgIBSFesamVZvJRd5+szgq1jmMTibo9fyPJoZLPys -5SFxPHDeyKUz8lzYHVmuOhzOhSjSNHQGVP0Hoe8N7dQaFU40A8JSsUh567vgjXlts13KEr -GaBey244oe4J+xlwzWHsigAj1DoCGMaDdSQ8WfE/BEUJq5mNEp+GxQe4hHMwbbg2RJZZ8k -FRKOiCUicQkVCFA3yWao+5odcgyI03sqfnrgkbAAAAAwEAAQAAAQBDed6GJUlfLSjdBfnx -kLfF/KTksf2SmDCSiRvEoA5hRxPQA9xE2Hzs5khgeVGmV9Tqz5w1Ot8n34Y6BsD1gn33il -ggW0MNFnVPvDUmzp7mniZWzh0XsK45xBLRPzoZlpYEncGfN2da6i6nATm4682xUCJeO6TD -4Gku1+HWkDbwRPcr8oIkf8JH3wbk1wGhitv3iQKsXTdKWCb7VPh4PyBaEwTzntxUQ0RYq7 -omT3DNmV6TSk3lzwj3d7ldj8kNHoWF2uTeUM32Sc61DryVlYKFDPk3aS+y9rf1G3XEzgXx -IVocoLF7ycwB0UKKTuzRJGFkg7nn3AP2K5jhhiJzefIhAAAAgCQfYfqMrNht5sNlrA9irs -AkTlrEV0C5qGdCc9a4zMXuCaBiOdPwQipzUBHzb0vuQ+qo6PEH1u3JpUlpPWS4U+MThdot -mAmCAEbb4jdG6CbNNIVV5k8nR9J3zIdjBj6/A3HYVgI7mOFjKPP2r9a1SLxblmhnSs/ta5 -NQdzj1yhqAAAAAgQD32kbZ89Nf1md3cSjFZrgJ76ntAElI8qvWQqF/hn3MJ1yH5RPfXDhk -P+zdxcrpc6WPzKANXPFWbggM9LM8YN7J55iDuFusmK8GfFQqgcFLEpwejsK/oeGnOuFXvN -h1VCEVu+ox/6Pu8rO2XzVoiRTZNV3W7y85+xuUbSJc55SxhwAAAIEA5RB4Q2rAEShRlVOJ -myJQEpWCGvuQzLrjFZprs70lgowwpFUl/4aOaqp1aye+BZt9JvPvsI7nTM43VscQdWO4h6 -2Q+efjQPUzpELNhcW1SgtnNyZWW0vFTBr+U5P9eYjyHApnZbCVxS9QU3pXCe2j79V0ejIO -OA3nhxQ3z2v9IM0AAAATVGhpcyBpcyBhIHRlc3Qga2V5IQ== ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_2048_openssh_pw b/tests/pem/ssh_rsa_2048_openssh_pw deleted file mode 100755 index 218e5cf7..00000000 --- a/tests/pem/ssh_rsa_2048_openssh_pw +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABA8qUXOxc -3OrqTc3UI10qjAAAAAEAAAAAEAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQDdxjN0+2xc -7pdreBqYc/mDRC8OuWrS7wre5fEUBpylorQjbhtUVUU+Ox/6RSZbbeNg3EvcWTT7NQY71w -7LGSgiNK9bgU1K1516zpvY0F2IGgx9xZvvIJVELSXQRFgIBSFesamVZvJRd5+szgq1jmMT -ibo9fyPJoZLPys5SFxPHDeyKUz8lzYHVmuOhzOhSjSNHQGVP0Hoe8N7dQaFU40A8JSsUh5 -67vgjXlts13KErGaBey244oe4J+xlwzWHsigAj1DoCGMaDdSQ8WfE/BEUJq5mNEp+GxQe4 -hHMwbbg2RJZZ8kFRKOiCUicQkVCFA3yWao+5odcgyI03sqfnrgkbAAAD0LSbVnqqelotuL -f5dDjrKG1xpnMQJ+51P9Y0az9rjMBG/kNgILY/CuBOXo4QJ6bO5+Gm79UEU1V6X1yrrupG -GgpbE9NW7deP/8LySDeX5HqeLb9a9/6Z8PMvHzVD5hvyFYGrpRFCj+0gWOXQmOb1lZdzUW -TW6vAnRAEAgOj99oe9W4OUw/6w/8CMMdLPXpYDwY32M4YdN/Dy5QzLQAdsDrXaTZvHSTvl -kaPr5VpfFcMUlrWEZaAm+9Ph1zPBC0DidJ6s/2bk9/P2T0tBy6OEho4tFUshcNrKO4eZ+O -iY08ZNno15MLjNSvLgxmKtIoUWlKVgbPa3SXi+9KDE6KInz4dg18OAG8gs2YjAqMmR0rqk -xHExKOrCgFRNVymq8xrIyhq4V3vzagqCEHn+stk4ovCkgdaHc5+xR6zlFcw7DSQqYbqetZ -8ig1qpPQrNa7PuOcln7icG2WxBRV9ylUfRdQ3pT743+7orts3gPcMLYwLDOGfy36fk00nO -2weEeblDdX5RtdnIX/Uv4C/N6Ajz3ZfRH1yl7tjKyB152ybRUUqeFswyQQJCT+WhDlJZui -aSPVAt+/Qtpg7IDRSf6S1QkkA4BlBcdvLZnjg/dw2iRmoa/ZlzWmxoJsZZUgsjdnMz/92D -6j2v8F0AQJCtwlZnqYH3L5ur/U80g95eOrni+5gJVrl/Aqw/ZLv9mB5dyuVKf22RKqT6fb -+qPe5mwvQA7VgfUwhX7Duz40l6vGesjRR7ycCvkGvXXZzVWzJWbIF47TtY6aP8/88J4smI -nAo73v7t+Z5OiPj6WL/qJBIgNw2hDwZAzdD4IChBgrq57PREvl4d3OiMDLpV0hCrJaHnVp -IDhOoapf1qHCP9I2AcfPh6QnklvHlZKcdqQnYo2uLxGFa2bX30OE9zYOB1tj5daN07/hMH -5n4jnzuzAa5Wr6s6sZS59uJJ+PCRMyZujt174yIjaJeblmlfLMUMu2+5fjfNE6cUxuq8cE -kEft08acO74Q451Lw9KxziVhMNXNddQR0PnVL4cNC3dBZNvGTs/bLgBQwvysoPedbwxOZD -nd1z0treGr/euYSn5Rh8c00aPeC20pnWIFylkAtXW3JhQQcFzaAc/E0FGcRFocCl5WwZoK -C9Nu41t2V5H68pb5Nz3jY1CyK0d0OrvR0d1UyCftnmZXfBvCftvtXcNTykRKpfIcQ8b2ki -5ut5LtNCG+goSPibE8AFUkejjG9+ZWivD90Mb+54LWERKiAM67/ZpB+X05bUJRLRyejzYw -aNYsLAOlYRhvcD0h+Dg6XVE66SVc4= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_2048_pem b/tests/pem/ssh_rsa_2048_pem deleted file mode 100755 index ac227d7d..00000000 --- a/tests/pem/ssh_rsa_2048_pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEogIBAAKCAQEA3cYzdPtsXO6Xa3gamHP5g0QvDrlq0u8K3uXxFAacpaK0I24b -VFVFPjsf+kUmW23jYNxL3Fk0+zUGO9cOyxkoIjSvW4FNStedes6b2NBdiBoMfcWb -7yCVRC0l0ERYCAUhXrGplWbyUXefrM4KtY5jE4m6PX8jyaGSz8rOUhcTxw3silM/ -Jc2B1ZrjoczoUo0jR0BlT9B6HvDe3UGhVONAPCUrFIeeu74I15bbNdyhKxmgXstu -OKHuCfsZcM1h7IoAI9Q6AhjGg3UkPFnxPwRFCauZjRKfhsUHuIRzMG24NkSWWfJB -USjoglInEJFQhQN8lmqPuaHXIMiNN7Kn564JGwIDAQABAoIBAEN53oYlSV8tKN0F -+fGQt8X8pOSx/ZKYMJKJG8SgDmFHE9AD3ETYfOzmSGB5UaZX1OrPnDU63yffhjoG -wPWCffeKWCBbQw0WdU+8NSbOnuaeJlbOHRewrjnEEtE/OhmWlgSdwZ83Z1rqLqcB -ObjrzbFQIl47pMPgaS7X4daQNvBE9yvygiR/wkffBuTXAaGK2/eJAqxdN0pYJvtU -+Hg/IFoTBPOe3FRDRFiruiZPcM2ZXpNKTeXPCPd3uV2PyQ0ehYXa5N5QzfZJzrUO -vJWVgoUM+TdpL7L2t/UbdcTOBfEhWhygsXvJzAHRQopO7NEkYWSDuefcA/YrmOGG -InN58iECgYEA99pG2fPTX9Znd3EoxWa4Ce+p7QBJSPKr1kKhf4Z9zCdch+UT31w4 -ZD/s3cXK6XOlj8ygDVzxVm4IDPSzPGDeyeeYg7hbrJivBnxUKoHBSxKcHo7Cv6Hh -pzrhV7zYdVQhFbvqMf+j7vKztl81aIkU2TVd1u8vOfsblG0iXOeUsYcCgYEA5RB4 -Q2rAEShRlVOJmyJQEpWCGvuQzLrjFZprs70lgowwpFUl/4aOaqp1aye+BZt9JvPv -sI7nTM43VscQdWO4h62Q+efjQPUzpELNhcW1SgtnNyZWW0vFTBr+U5P9eYjyHApn -ZbCVxS9QU3pXCe2j79V0ejIOOA3nhxQ3z2v9IM0CgYBMdFCWutfhIEoaVhW1jtIG -fp90NDpm/jRzi2o15E65wwqQAOH4bIIYqn9uiazmBn5ztTNJ6/mmJ5rkJDeF0Hvo -3D/3oc7lltOmtINh+VSey8bMxkzcwBrTcx4/6kj7KFBsW+MKOUlgVA2LnCLldCOy -PPwNaQqwX/1J88A92FHN0QKBgDYocbbG24hy9u8OZD+ImlP6g1tr1S2ClkQ6UXKa -qu61xJ5l/2jt4Gg5yy89o0DiJXH7RNWCxA81xoG+6RZIMI3rrJZZjDKEhuQ0YzFY -sGdEUPAKIWrOfGRlEXKjT8/XYB7fGtlBKfgIGr7R8xhG1nbTCgoGIbSBHRej4Roq -lxuVAoGAJB9h+oys2G3mw2WsD2KuwCROWsRXQLmoZ0Jz1rjMxe4JoGI50/BCKnNQ -EfNvS+5D6qjo8QfW7cmlSWk9ZLhT4xOF2i2YCYIARtviN0boJs00hVXmTydH0nfM -h2MGPr8DcdhWAjuY4WMo8/av1rVIvFuWaGdKz+1rk1B3OPXKGoA= ------END RSA PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_2048_pem.pub b/tests/pem/ssh_rsa_2048_pem.pub deleted file mode 100755 index dc193fa9..00000000 --- a/tests/pem/ssh_rsa_2048_pem.pub +++ /dev/null @@ -1,8 +0,0 @@ ------BEGIN RSA PUBLIC KEY----- -MIIBCgKCAQEA3cYzdPtsXO6Xa3gamHP5g0QvDrlq0u8K3uXxFAacpaK0I24bVFVF -Pjsf+kUmW23jYNxL3Fk0+zUGO9cOyxkoIjSvW4FNStedes6b2NBdiBoMfcWb7yCV -RC0l0ERYCAUhXrGplWbyUXefrM4KtY5jE4m6PX8jyaGSz8rOUhcTxw3silM/Jc2B -1ZrjoczoUo0jR0BlT9B6HvDe3UGhVONAPCUrFIeeu74I15bbNdyhKxmgXstuOKHu -CfsZcM1h7IoAI9Q6AhjGg3UkPFnxPwRFCauZjRKfhsUHuIRzMG24NkSWWfJBUSjo -glInEJFQhQN8lmqPuaHXIMiNN7Kn564JGwIDAQAB ------END RSA PUBLIC KEY----- diff --git a/tests/pem/ssh_rsa_2048_pem_pw b/tests/pem/ssh_rsa_2048_pem_pw deleted file mode 100755 index 87f2f34c..00000000 --- a/tests/pem/ssh_rsa_2048_pem_pw +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,48BE75603CC92D6548DDFAEEE3C83DCD - -v/4FWfk2XRSTEjU5nIaahG2P2BisO0B/sn3PrICjbLOGTQ1iX6Na+7iFahpCDp7j -AU9xj9JnQ4gQfH7TNWiE4h0+wWSX5DgAkZWTmA9bzsVElJkXe2EfId7D5LMVyP9F -2iVMQ4q8uvQRM3M349A/YRZM7X/+uOz6fzVbscTSjke0WzSIdcDDlWy0FrG5MICY -inMUgqhilmIaU3SWmXaDQ69uK5OYgQHG0F8XDUYMvMstU+I214+qQyGlppitSTR7 -34JKOJSZDx82Kgu6F+OrIpXRhATyTMx26h8aDWd9C77OnCuCmimhxAnnCJjWmB1Q -thJy2UQPp4fFq4GYEeRxQKScCi/1equ3lhPjJK514pUWjfbzBMD/ntZUVNA+zJuy -Y51OodQERwap4Emj5/nl6DjXzl5vgliqFjE/IjY/hyv6I/o44kHx2Agd/Yc1UK/q -azds1qPAZmfmGj/tbBg4yOAVqfoF7xunL7cdF18tjLZ43nB6elZkLp/o78PUFTX9 -ji2kStRF03DRczWgP4U8xsElDedNxLshqbL/jWUHxS+9yMW3VPcycKfAPxlDUFxH -c2Dbbdjk0zhNcA+yCtuntWovHYvKSvev17T+LnaX5ICymM8xc0bBj7nlsBpkofap -u22p6sReLma2US+qsv+Y9YRE4yUUsxOEsPtIsF9UjOi1ExDlPjpKcAiqY8hLdUKt -vEIovX5yJNI9s/LOOaGcfM1eHO7law+UD2B5NVdlx7nvtY7iA6TaxDDnoq8vm+zo -W538NMa3fFlgH6hfIR7eUjeNGAk0yINH/Hm8MnR6k9RK87bMUo6hREY57v7MnBqA -LpyislhSzx0qL4zT3jRXStUGXZkKxm9HG1vXYZmCbdjmcUIo1jbshdJLg7lkxe00 -UrNN5DI4K+45uTBg/ULq2E1+LO/CwKjQDnHgVoVl9ueQjkouEj8zzBbWbzYYvdx+ -+yLA55VUvLHIq4WSkNbSFArj67Y8a2lRId3Fm3mKscgiiAGOETBmoFmHw1MkqVsa -1SjRPRxpi57fjIDdrDybz6LyXwmAWuuUNhloTU02zSXWWKRbnqy1I1blvzA4mbJ8 -3LTqMldUDZrRqcz4kN+6QUPI/lZ6komC/6eMmkeiZVDKYZgFNkxiVsX1PZJjga2L -6S+7as3xnv2vHNPfMRNaCsn2fmFSlMhLooYMMFo5sisdXhK9uwGkmemfkwW7SrU4 -wjNCPExoV3CDriikN1dHmScbhAnfahBn4u5N5ThIh7E4Ge1qBc09uc7VpAJyFOZr -H5oJnDA1gulWdkl/ONixMNYI1VORWuD4CZOvkGdQ5Ozx9jKEwRauhSx3sxXLtloh -hhqcJ44qjYbOYH9QH+/L4W7Cdg0C9qNDnUsBG8VQTN5XbtbGAaxiZ/zmEPl0/ZdM -z5NMNifm/WqdmrBgN7XXdxcyG1Hrbprf0GsT6dRNPgZTgjCL/VJLD68VBv3S7Z0u -UJepHEDITOgmqILGSDhlBlGYlDF+x+Iv6H4Pkx9/akGcg/vFCbL1S4Ot+UwCVpsI -A9vKX4HhSPqMxmfF96hg50nSqIsjvAsSRXBIP9f+kPo8NoPZDqFU8aWI/AzNDolT ------END RSA PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_2048_pkcs8 b/tests/pem/ssh_rsa_2048_pkcs8 deleted file mode 100755 index ae67ce10..00000000 --- a/tests/pem/ssh_rsa_2048_pkcs8 +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDdxjN0+2xc7pdr -eBqYc/mDRC8OuWrS7wre5fEUBpylorQjbhtUVUU+Ox/6RSZbbeNg3EvcWTT7NQY7 -1w7LGSgiNK9bgU1K1516zpvY0F2IGgx9xZvvIJVELSXQRFgIBSFesamVZvJRd5+s -zgq1jmMTibo9fyPJoZLPys5SFxPHDeyKUz8lzYHVmuOhzOhSjSNHQGVP0Hoe8N7d -QaFU40A8JSsUh567vgjXlts13KErGaBey244oe4J+xlwzWHsigAj1DoCGMaDdSQ8 -WfE/BEUJq5mNEp+GxQe4hHMwbbg2RJZZ8kFRKOiCUicQkVCFA3yWao+5odcgyI03 -sqfnrgkbAgMBAAECggEAQ3nehiVJXy0o3QX58ZC3xfyk5LH9kpgwkokbxKAOYUcT -0APcRNh87OZIYHlRplfU6s+cNTrfJ9+GOgbA9YJ994pYIFtDDRZ1T7w1Js6e5p4m -Vs4dF7CuOcQS0T86GZaWBJ3BnzdnWuoupwE5uOvNsVAiXjukw+BpLtfh1pA28ET3 -K/KCJH/CR98G5NcBoYrb94kCrF03Slgm+1T4eD8gWhME857cVENEWKu6Jk9wzZle -k0pN5c8I93e5XY/JDR6Fhdrk3lDN9knOtQ68lZWChQz5N2kvsva39Rt1xM4F8SFa -HKCxe8nMAdFCik7s0SRhZIO559wD9iuY4YYic3nyIQKBgQD32kbZ89Nf1md3cSjF -ZrgJ76ntAElI8qvWQqF/hn3MJ1yH5RPfXDhkP+zdxcrpc6WPzKANXPFWbggM9LM8 -YN7J55iDuFusmK8GfFQqgcFLEpwejsK/oeGnOuFXvNh1VCEVu+ox/6Pu8rO2XzVo -iRTZNV3W7y85+xuUbSJc55SxhwKBgQDlEHhDasARKFGVU4mbIlASlYIa+5DMuuMV -mmuzvSWCjDCkVSX/ho5qqnVrJ74Fm30m8++wjudMzjdWxxB1Y7iHrZD55+NA9TOk -Qs2FxbVKC2c3JlZbS8VMGv5Tk/15iPIcCmdlsJXFL1BTelcJ7aPv1XR6Mg44DeeH -FDfPa/0gzQKBgEx0UJa61+EgShpWFbWO0gZ+n3Q0Omb+NHOLajXkTrnDCpAA4fhs -ghiqf26JrOYGfnO1M0nr+aYnmuQkN4XQe+jcP/ehzuWW06a0g2H5VJ7LxszGTNzA -GtNzHj/qSPsoUGxb4wo5SWBUDYucIuV0I7I8/A1pCrBf/UnzwD3YUc3RAoGANihx -tsbbiHL27w5kP4iaU/qDW2vVLYKWRDpRcpqq7rXEnmX/aO3gaDnLLz2jQOIlcftE -1YLEDzXGgb7pFkgwjeusllmMMoSG5DRjMViwZ0RQ8Aohas58ZGURcqNPz9dgHt8a -2UEp+AgavtHzGEbWdtMKCgYhtIEdF6PhGiqXG5UCgYAkH2H6jKzYbebDZawPYq7A -JE5axFdAuahnQnPWuMzF7gmgYjnT8EIqc1AR829L7kPqqOjxB9btyaVJaT1kuFPj -E4XaLZgJggBG2+I3RugmzTSFVeZPJ0fSd8yHYwY+vwNx2FYCO5jhYyjz9q/WtUi8 -W5ZoZ0rP7WuTUHc49coagA== ------END PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_2048_pkcs8_pw b/tests/pem/ssh_rsa_2048_pkcs8_pw deleted file mode 100755 index 057db429..00000000 --- a/tests/pem/ssh_rsa_2048_pkcs8_pw +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQItFm0FeTcjJgCAggA -MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAECBBCBMDX93ZyUNlXHGQJ5FEF8BIIE -0J/YSliZKBiMp92txIXNWyMhQteWQHVW6gAn4TFTw14mQtTXWzkhX5xjjYal/uI8 -t7KWOjS9LODairbmCjShuD9sD+JR9pdvwADEbQYOh3WVwtoybDf042MEnaWs8Fsq -aL/S17OTI3mB3MVVCj7Tss3/zotcyaFZkgA6B1W6iVOsj1rihYMPmLZtL6q8EiYa -MVu4Hak1MnqzBzMWFyzJGPGg4qMxA3DiImx4N/zgwoKScpp2LJTezb2NndoekGc/ -onZd5qxGg5rwifx1ssrVFu0KDwFEe/0jenC7Fi2I5akPwl1EYS9FvYF+NwxonLT2 -75WlVrA8VxcH6l+mSr9bdSRYtUaKcyZf96IzmUbyPvXPFa25WOl3iPZOzd7rhw7T -sMe9W3s4YJbH5OpptUu7bUbGtEEbLExnQfFuRaD5Sa+Loeh9Om397XZjW9fJLZwS -BgqS4TRvuuh2Stq7cih/uOyo9631X+zRmFC14SvCbcQMIoZrIP4+pq3hgIJHMCOs -pGfePvNg50ZpVIxBkLYXMIO7uM8A4iiCwmEc7xt1lrN2B3FGRS1boVYyryFPmQFZ -xQ62zEyuDmvoWqYfxg06TL8yfqkYoW4Advaebt4FRprfHHD3u2ggVRg1PeSBq1nr -NQmCirJt4MsK9vnHEh8DId8p25ltPfs/8QtRihCYiZ6+BH0OYeYeWogoCF/VbZic -gcXmxYKJXz2Cy8U3N71awBIsOH3aSd/ib+6VnsqKPhNbz6WBurOHctqTZWc4+4vd -tCWD7NFQ3/4+OEcNaPMJTepMGToaVNLS8UHI4+4Ja2X2YABLB1cjNyGN2B0WBYnf -IuHvzLF0PV2KxuyqZ3uVyrUIeXybvUyGVYb1957dIFZL6j4KLQP0GX9q4EhyMIlK -z+x+2hWPVwCOvVXwsgWsUclUTaQ+3TQK7Vk3g6crGYNHeWsxf1khux7fif7odRer -7tJcI0KI9nga5THnd+F8dio05+lbUYYB+gB3MZrQoo842IOBpyZLwP3UM51gRaW1 -8ouBGe2bIJapoeyqzY5r93dROkZJbxUKafIg9DAOLZaO3SufG8vYoX/YgZCiWC0d -NDJFVvlDT9GPPNoyYPKjjLYWwmlrN4Ekqk26Zi+0CdvwH8F3gl1Bw+T2arlWm4Lf -uPwWOtXFn+ymuUkQiZOt5Hkhjl4BiqUUpKyzqy37ipoOG1pKGKBm8l9dlcBYMysv -XQDcYMEDZzG4S0GOMoUUs12ejcO1o5PO9F6O1Mf8VFmlPc3q5GTF6/b3ce3Pb45V -XEDewWd3AxUu+2a968r9hnrBY8pLjALVqwEHaFouiv9tW+n4A6kOf+LJ5J3oUN9E -oBlucLBrccq17Ml6UKA7reos1FIS96T+lnOhUIdUX52h1Z3WB+Jq7XecFPc7XXae -6jTFR7KHsWsZf8Gmac7ElrMPIzSZRXqaI/C3kS8KWUSTe5DQ0gUTwg9fZQgYfPrm -YqAfDV44OwUuVqbbBFGr8BFYlU7Urz6VOUjcHZScyEMiuT+IBtcitXzSWUOugJZ6 -2eqs06jTh/K1xEaex4NdAHy7ejSe6MP3QiewUOQhL2vItZGP5Ca/JjvDZNrR5T/r -3Glk2w/+jf5rz3Q5PeTpYmolXIvYBeKYOcMDT7OjnXcE ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_768_openssh b/tests/pem/ssh_rsa_768_openssh deleted file mode 100755 index d127f5cc..00000000 --- a/tests/pem/ssh_rsa_768_openssh +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAdwAAAAdz -c2gtcnNhAAAAAwEAAQAAAGEA2Hm3hkBQp5UIjURO6/VBG46/g0DE3cNWRxgdsOsQ -/w8ynpvO+tRnQqarC6xmsNg+2kiKD9QeUs/O9GKFVh5+gKOx75te1dysX5+AdNRj -UEzOfi9upnWLOYiTRrv5bVHXAAABoBEnz2cRJ89nAAAAB3NzaC1yc2EAAABhANh5 -t4ZAUKeVCI1ETuv1QRuOv4NAxN3DVkcYHbDrEP8PMp6bzvrUZ0KmqwusZrDYPtpI -ig/UHlLPzvRihVYefoCjse+bXtXcrF+fgHTUY1BMzn4vbqZ1izmIk0a7+W1R1wAA -AAMBAAEAAABhAKvBNwm/sb6lEpnzHqM8fiH9Spo7I3fIaoYR7kzW1S9pwYHyoXCG -Yj+RuZiTew7JIu+4Kl5DZNnuP4V3swURYFvX/ufD++5Qs4kNmu39uFBiX3y2sW8C -uySjsjjcgb+vAQAAADAEjSqGRZ0zY1NzZ2pxqlpOJVYT5+cebGlBxCbR+AJ1/IFh -Pi5sQOp8N3nzPDbcUqIAAAAxAO7sYlU1v/3oyV8QjvqRXgmeB0wuxOGFImzox4sO -0HBeAxfCxYcQfZiC4uVSxF5glwAAADEA5/KZlRMxLcRTSJ6Yco0C8GOFH8+jqWMU -aUez5zzukKy3D8ivg7Xc69oLf2FWPYDBAAAAE1RoaXMgaXMgYSB0ZXN0IGtleSEB -AgMEBQYH ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_768_openssh_pw b/tests/pem/ssh_rsa_768_openssh_pw deleted file mode 100755 index 8947e9eb..00000000 --- a/tests/pem/ssh_rsa_768_openssh_pw +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABAC -J8hSzoIyLx3E5jPIB2+dAAAAEAAAAAEAAAB3AAAAB3NzaC1yc2EAAAADAQABAAAA -YQDYebeGQFCnlQiNRE7r9UEbjr+DQMTdw1ZHGB2w6xD/DzKem8761GdCpqsLrGaw -2D7aSIoP1B5Sz870YoVWHn6Ao7Hvm17V3Kxfn4B01GNQTM5+L26mdYs5iJNGu/lt -UdcAAAGg5KEoKEGcbJHtDO+YEzKTpVbR3vJgiVQa+uZRbxxF4MSa/8/4KmXVAe4F -hcLVJ+lmuebATIlH/3E1nefqrshZNbStiJIDf810UBd0b4C56CPCgb3SUmS0FWeh -TTFdqXmJhMFlhLlCNVYxJrTEAmpFIBuhmz9Unj2B/qhhwgtDJny6RXwNklfwdAh+ -0K2xI7nQMY+9n/80PrIetXxdrI9Rauh4MIIhVzgif5ps02VbJ8Ts2BMpFBzaS6gY -+G/5IXqM2vmqIpe1zetvRCJP1WRTmaYGJ6El57m0OQ8ZwzCBGNGEfp74ouEIlS2A -LMuhSUwCfHfUK19t5lzrjBvjQp4XutST/bbjKhIRdQOwK1nusZazivxNocLLEYzD -UIL6OECmIRdeUVJZzQlYUvJR8oYVXvGX/cF/kA6ppyzZhoonBtGRwALplo6OfdOt -pNPk/ZmlyIUmV+Eil522Q9WO3a+e7sCGxGbj/Ua8/C8NJHs/rRvyZ8yfL6lvJKMi -Yk96FZiXS7rEi1p63A8oxgO4rYbghwIfXAN6UDgRpaM7ulC4Lao= ------END OPENSSH PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_768_pem b/tests/pem/ssh_rsa_768_pem deleted file mode 100644 index 021f1b52..00000000 --- a/tests/pem/ssh_rsa_768_pem +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIBywIBAAJhANh5t4ZAUKeVCI1ETuv1QRuOv4NAxN3DVkcYHbDrEP8PMp6bzvrU -Z0KmqwusZrDYPtpIig/UHlLPzvRihVYefoCjse+bXtXcrF+fgHTUY1BMzn4vbqZ1 -izmIk0a7+W1R1wIDAQABAmEAq8E3Cb+xvqUSmfMeozx+If1Kmjsjd8hqhhHuTNbV -L2nBgfKhcIZiP5G5mJN7Dski77gqXkNk2e4/hXezBRFgW9f+58P77lCziQ2a7f24 -UGJffLaxbwK7JKOyONyBv68BAjEA7uxiVTW//ejJXxCO+pFeCZ4HTC7E4YUibOjH -iw7QcF4DF8LFhxB9mILi5VLEXmCXAjEA5/KZlRMxLcRTSJ6Yco0C8GOFH8+jqWMU -aUez5zzukKy3D8ivg7Xc69oLf2FWPYDBAjAz9+i/ngxfvzWl3uUqrVnl/6CYuoeK -gjnltJBKt/MwrdJAZdYvNbAL71RJC0K5QIsCMQDTAoQv947E6RcvOIDNrXUgBhmk -z/w+7BE0mfOTiX4rBcVgSZ1KwFckBXBySLXxK8ECMASNKoZFnTNjU3NnanGqWk4l -VhPn5x5saUHEJtH4AnX8gWE+LmxA6nw3efM8NtxSog== ------END RSA PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_768_pem.pub b/tests/pem/ssh_rsa_768_pem.pub deleted file mode 100644 index 9fee2194..00000000 --- a/tests/pem/ssh_rsa_768_pem.pub +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN RSA PUBLIC KEY----- -MGgCYQDYebeGQFCnlQiNRE7r9UEbjr+DQMTdw1ZHGB2w6xD/DzKem8761GdCpqsL -rGaw2D7aSIoP1B5Sz870YoVWHn6Ao7Hvm17V3Kxfn4B01GNQTM5+L26mdYs5iJNG -u/ltUdcCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/tests/pem/ssh_rsa_768_pem_pw b/tests/pem/ssh_rsa_768_pem_pw deleted file mode 100644 index 3b3590ce..00000000 --- a/tests/pem/ssh_rsa_768_pem_pw +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,B8B44B077A4C4A63144875D0A8319272 - -4S9dwwHP6kvCq+PHpCOEuJV9eFZo30ujR4V4ju2GEDxoNzl+RvBurSABRv+MOwOO -+7cXxFOCNFOnhKxvwENLyJ/wvkO7X0al1lF0yFHoF5scWFG1LRxQKp3kpW+k/ncW -+eO72S7Er0fv3DbMC7ZqXXecHc5RauC16quRWqHrYuRHpGj8VqzveEz2r4XAg0zB -OBq+osTF/fxydpncrtChRwcgyCZ7Er9eMEID0T+vlJFmuNEUYvYW9j4BVqMcmoKA -qKr5vr95ss4Hq8lOnha4OQlVzod883QzB3MCMLFkE3e9x3DyvyfGgm0CIIZzz/I4 -3w40pmq1tB/yrp2V8PvdC+ksWHx/2MFuzhcgeugfnrE0my9khsGLkaS2k1fbueBl -s83tIODLBbvjS26KxrADo5vHltwGD9GK6CpnAbL4tS2YVHiOaaI8fqWjNNq8EoXI -tmMve/dEej0HILbjIp0IqKs/rOtrTxf4UBKAhf+j2S8VxDq1gf28YR34zHEpzM3p -bMTPlg0KZRYJ9x7VNz818a4FSBJOWMI8VXBbb7lW/iSQwvQ3orX5rhNrdkHa4B2W -aYaiT78/MwUzjmexGRSgNhymDmHrNx76cg40MeWV6vU= ------END RSA PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_768_pkcs8 b/tests/pem/ssh_rsa_768_pkcs8 deleted file mode 100644 index bcebb704..00000000 --- a/tests/pem/ssh_rsa_768_pkcs8 +++ /dev/null @@ -1,13 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIB5QIBADANBgkqhkiG9w0BAQEFAASCAc8wggHLAgEAAmEA2Hm3hkBQp5UIjURO -6/VBG46/g0DE3cNWRxgdsOsQ/w8ynpvO+tRnQqarC6xmsNg+2kiKD9QeUs/O9GKF -Vh5+gKOx75te1dysX5+AdNRjUEzOfi9upnWLOYiTRrv5bVHXAgMBAAECYQCrwTcJ -v7G+pRKZ8x6jPH4h/UqaOyN3yGqGEe5M1tUvacGB8qFwhmI/kbmYk3sOySLvuCpe -Q2TZ7j+Fd7MFEWBb1/7nw/vuULOJDZrt/bhQYl98trFvArsko7I43IG/rwECMQDu -7GJVNb/96MlfEI76kV4JngdMLsThhSJs6MeLDtBwXgMXwsWHEH2YguLlUsReYJcC -MQDn8pmVEzEtxFNInphyjQLwY4Ufz6OpYxRpR7PnPO6QrLcPyK+Dtdzr2gt/YVY9 -gMECMDP36L+eDF+/NaXe5SqtWeX/oJi6h4qCOeW0kEq38zCt0kBl1i81sAvvVEkL -QrlAiwIxANMChC/3jsTpFy84gM2tdSAGGaTP/D7sETSZ85OJfisFxWBJnUrAVyQF -cHJItfErwQIwBI0qhkWdM2NTc2dqcapaTiVWE+fnHmxpQcQm0fgCdfyBYT4ubEDq -fDd58zw23FKi ------END PRIVATE KEY----- diff --git a/tests/pem/ssh_rsa_768_pkcs8_pw b/tests/pem/ssh_rsa_768_pkcs8_pw deleted file mode 100644 index 1d34b244..00000000 --- a/tests/pem/ssh_rsa_768_pkcs8_pw +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIICTTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIEaKL7XuBIEICAggA -MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBCZ+XyUGrg7gYyFqeguoe1NBIIB -8Go4EfQEXAYL36fZ4VFayZ+TsC788ISC4fPlpw9mGDH2rzC0TvB8qAUhMaGkKyx3 -jxCs0jPObG3cW1W7R54ZN7Vc3HgXnqizEsImab8nejjJZc/MdgUU7vvUg+gPg6s2 -KdVIyJb5fQqKVR/412UEnZ5HZtKsi+L2EMBaorOWav7ZexEnJo9UTgdW1Fxt1LVy -qZmwJgZ6M0tlniWlBJXmTlsiaUW8rgXi7X+0YQLYslboSQdRw+Wkkjks/mHi2720 -fuoc/n4gR+Ijc8p8VrB8cjvTVNRJ2Ldi1ecmZqnpY2nZ5+7rVAbMzb+1LrJjYxuI -LICjRrJqI12/HGic1GQEz89pBKLQrO2S3yEDQfz88I5oEfG4tisKD4vctiWyp9BQ -AT3NWGuOS1jYMXwLGGQOPbC84GzZbzrtdHXKvboLlPg5RX5Chhw05na53rue5XI+ -pLRPr+ohw77Q9Dv0A4LZIJlDowdzmEzOl2fYluEHbFm0Qega+Dub+8U8eCejb9S4 -qBvZWpfNjNpcAypwHi9PHL7pHdY1w/l/Mwj/pn/4cN0dLz33u65sgDz590nkDVfG -peomL/xbDKMHHFIG/217RpDkIPS0sRbIdO3DgnUIjTle4OGRTpCsMW6VKfPy4liv -cRCMx2Tt+IfOdLWW38hi6u4= ------END ENCRYPTED PRIVATE KEY----- diff --git a/tests/pem_test.c b/tests/pem_test.c deleted file mode 100644 index 08b4519c..00000000 --- a/tests/pem_test.c +++ /dev/null @@ -1,206 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#if defined(LTC_PEM) && defined(LTC_TEST_READDIR) && !defined(LTC_EASY) - -#ifdef LTC_SSH - -static int password_get_ssh(void **p, unsigned long *l, void *u) -{ - LTC_UNUSED_PARAM(u); - *p = strdup("abc123"); - *l = 6; - return 0; -} -static int s_pem_decode_ssh(const void *in, unsigned long inlen, void *key) -{ - password_ctx pw_ctx = { .callback = password_get_ssh }; - return pem_decode_openssh(in, inlen, key, &pw_ctx); -} -static int s_pem_decode_ssh_f(FILE *f, void *key) -{ - password_ctx pw_ctx = { .callback = password_get_ssh }; - return pem_decode_openssh_filehandle(f, key, &pw_ctx); -} - -static int s_authorized_key_cb(ltc_pka_key *k, const char *comment, void *ctx) -{ - LTC_UNUSED_PARAM(comment); - LTC_UNUSED_PARAM(ctx); - pka_key_destroy(&k); - return 0; -} -static int s_read_authorized_keys(const void *in, unsigned long inlen, void *ctx) -{ - return ssh_read_authorized_keys(in, inlen, s_authorized_key_cb, ctx); -} -static int s_read_authorized_keys_f(FILE *f, void *ctx) -{ - return ssh_read_authorized_keys_filehandle(f, s_authorized_key_cb, ctx); -} -static int s_read_invalid_authorized_keys(const void *in, unsigned long inlen, void *ctx) -{ - SHOULD_FAIL(ssh_read_authorized_keys(in, inlen, s_authorized_key_cb, ctx)); - return CRYPT_OK; -} - -#endif - -static int password_get(void **p, unsigned long *l, void *u) -{ - LTC_UNUSED_PARAM(u); - *p = strdup("secret"); - *l = 6; - return 0; -} - -#if defined(LTC_MDSA) -static dsa_key s_dsa_key_should; -#endif -#if defined(LTC_MRSA) -static rsa_key s_rsa_key_should; -#endif -#if defined(LTC_MECC) -static ecc_key s_ecc_key_should; -#endif - -static int s_key_cmp(ltc_pka_key *key) -{ - switch (key->id) { - case LTC_PKA_DSA: -#if defined(LTC_MDSA) - return dsa_key_cmp(key->u.dsa.type, &s_dsa_key_should, &key->u.dsa); -#endif - break; - case LTC_PKA_RSA: -#if defined(LTC_MRSA) - return rsa_key_cmp(key->u.rsa.type, &s_rsa_key_should, &key->u.rsa); -#endif - break; - case LTC_PKA_EC: -#if defined(LTC_MECC) - return ecc_key_cmp(key->u.ecc.type, &s_ecc_key_should, &key->u.ecc); -#endif - break; - case LTC_PKA_ED25519: - case LTC_PKA_X25519: - case LTC_PKA_DH: - case LTC_PKA_X448: - case LTC_PKA_ED448: - return CRYPT_OK; - default: - return CRYPT_INVALID_ARG; - } - return CRYPT_INVALID_ARG; -} - -static int s_pem_decode_invalid_pkcs(const void *in, unsigned long inlen, void *key) -{ - password_ctx pw_ctx = { .callback = password_get }; - SHOULD_FAIL(pem_decode_pkcs(in, inlen, key, &pw_ctx)); - return CRYPT_OK; -} - -static int s_pem_only_decode_pkcs(const void *in, unsigned long inlen, void *key) -{ - password_ctx pw_ctx = { .callback = password_get }; - return pem_decode_pkcs(in, inlen, key, &pw_ctx); -} - -static int s_pem_decode_pkcs(const void *in, unsigned long inlen, void *key) -{ - int err; - if ((err = s_pem_only_decode_pkcs(in, inlen, key)) != CRYPT_OK) { - return err; - } - return s_key_cmp(key); -} - -static int s_pem_decode_pkcs_f(FILE *f, void *key) -{ - int err; - password_ctx pw_ctx = { .callback = password_get }; - if ((err = pem_decode_pkcs_filehandle(f, key, &pw_ctx)) != CRYPT_OK) { - return err; - } - return s_key_cmp(key); -} - -static int s_pem_only_decode(const void *in, unsigned long inlen, void *key) -{ - password_ctx pw_ctx = { .callback = password_get }; - if ((strcmp(ltc_mp.name, "TomsFastMath") == 0) && (inlen > 2048)) { -#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1 - fprintf(stderr, "Skipping testcase because of TomsFastMath\n"); -#endif - return CRYPT_NOP; - } - return pem_decode(in, inlen, key, &pw_ctx); -} - -static int s_pem_only_decode_f(FILE *f, void *key) -{ - password_ctx pw_ctx = { .callback = password_get }; - return pem_decode_filehandle(f, key, &pw_ctx); -} - -int pem_test(void) -{ - ltc_pka_key key; - - if (ltc_mp.name == NULL) return CRYPT_NOP; - -#if defined(LTC_MDSA) - DO(dsa_import(ltc_dsa_private_test_key, ltc_dsa_private_test_key_sz, &s_dsa_key_should)); -#endif -#if defined(LTC_MRSA) - DO(rsa_import(ltc_rsa_private_test_key, ltc_rsa_private_test_key_sz, &s_rsa_key_should)); -#endif -#if defined(LTC_MECC) - DO(ecc_import_openssl(ltc_ecc_long_pri_test_key, ltc_ecc_long_pri_test_key_sz, &s_ecc_key_should)); -#endif - - - DO(test_process_dir("tests/pem/pkcs", &key, s_pem_decode_pkcs, NULL, (dir_cleanup_cb)pka_key_free, "pem_pkcs_test")); - DO(test_process_dir("tests/pem/pkcs", &key, NULL, s_pem_decode_pkcs_f, (dir_cleanup_cb)pka_key_free, "pem_pkcs_test_filehandle")); - DO(test_process_dir("tests/pem/pkcs/ecc-pkcs8", &key, s_pem_decode_pkcs, NULL, (dir_cleanup_cb)pka_key_free, "pem_pkcs_test+ecc")); - DO(test_process_dir("tests/pem/pkcs/ecc-pkcs8", &key, NULL, s_pem_decode_pkcs_f, (dir_cleanup_cb)pka_key_free, "pem_pkcs_test_filehandle+ecc")); - DO(test_process_dir("tests/pem/pkcs/extra", &key, s_pem_only_decode_pkcs, NULL, (dir_cleanup_cb)pka_key_free, "pem_pkcs_test+extra")); - DO(test_process_dir("tests/pem/pkcs/invalid", &key, s_pem_decode_invalid_pkcs, NULL, NULL, "pem_test_invalid")); - DO(test_process_dir("tests/pem/pkcs/invalid_but_supported", &key, s_pem_only_decode_pkcs, NULL, (dir_cleanup_cb)pka_key_free, "pem_pkcs_invalid_but_supported")); -#ifdef LTC_SSH - DO(test_process_dir("tests/pem/ssh", &key, s_pem_decode_ssh, NULL, (dir_cleanup_cb)pka_key_free, "pem_ssh_test")); - DO(test_process_dir("tests/pem/ssh", &key, NULL, s_pem_decode_ssh_f, (dir_cleanup_cb)pka_key_free, "pem_ssh_test_filehandle")); - DO(test_process_dir("tests/pem/ssh/authorized_keys", &key, s_read_authorized_keys, NULL, (dir_cleanup_cb)pka_key_free, "pem_ssh_authorized_keys_test")); - DO(test_process_dir("tests/pem/ssh/authorized_keys", &key, NULL, s_read_authorized_keys_f, (dir_cleanup_cb)pka_key_free, "pem_ssh_authorized_keys_test")); - DO(test_process_dir("tests/pem/ssh/authorized_keys-invalid", &key, s_read_invalid_authorized_keys, NULL, NULL, "pem_ssh_authorized_keys_invalid_test")); - DO(test_process_dir("tests/pem/ssh/extra", &key, s_pem_decode_ssh, NULL, (dir_cleanup_cb)pka_key_free, "pem_ssh_test+extra")); - DO(test_process_dir("tests/pem/pubkeys", &key, s_pem_only_decode, NULL, (dir_cleanup_cb)pka_key_free, "pem_pubkeys_test")); - DO(test_process_dir("tests/pem/pubkeys", &key, NULL, s_pem_only_decode_f, (dir_cleanup_cb)pka_key_free, "pem_pubkeys_test_filehandle")); - DO(test_process_dir("tests/pem/pubkeys/authorized_keys", &key, s_read_authorized_keys, NULL, (dir_cleanup_cb)pka_key_free, "pem_pubkeys_authorized_keys_test")); - DO(test_process_dir("tests/pem/pubkeys/authorized_keys", &key, NULL, s_read_authorized_keys_f, (dir_cleanup_cb)pka_key_free, "pem_pubkeys_authorized_keys_test")); -#endif - DO(test_process_dir("tests/pem", &key, s_pem_only_decode, NULL, (dir_cleanup_cb)pka_key_free, "pem_test")); - DO(test_process_dir("tests/pem", &key, NULL, s_pem_only_decode_f, (dir_cleanup_cb)pka_key_free, "pem_test_filehandle")); - if (strcmp(ltc_mp.name, "TomsFastMath") != 0) { - DO(test_process_dir("tests/pem/non-tfm", &key, s_pem_only_decode, NULL, (dir_cleanup_cb)pka_key_free, "pem_test")); - DO(test_process_dir("tests/pem/non-tfm", &key, NULL, s_pem_only_decode_f, (dir_cleanup_cb)pka_key_free, "pem_test_filehandle")); - } - -#if defined(LTC_MDSA) - dsa_free(&s_dsa_key_should); -#endif -#if defined(LTC_MRSA) - rsa_free(&s_rsa_key_should); -#endif -#if defined(LTC_MECC) - ecc_free(&s_ecc_key_should); -#endif - - return 0; -} - -#else -LTC_NOP_TEST(pem_test) -#endif diff --git a/tests/pk_oid_test.c b/tests/pk_oid_test.c deleted file mode 100644 index d5632a58..00000000 --- a/tests/pk_oid_test.c +++ /dev/null @@ -1,41 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include - -int pk_oid_test(void) -{ - const char *oid_str = "1.2.3.4.5"; - const unsigned long oid_ul[] = { 1, 2, 3, 4, 5 }; - char str[16]; - unsigned long buf[6], num = LTC_ARRAY_SIZE(oid_ul), strlen = sizeof(str), should_size = 0; - - SHOULD_FAIL_WITH(pk_oid_str_to_num(oid_str, NULL, &should_size), CRYPT_BUFFER_OVERFLOW); - ENSURE(should_size == 5); - - DO(pk_oid_str_to_num(oid_str, buf, &num)); - ENSURE(num == 5); - - should_size = 1; - SHOULD_FAIL_WITH(pk_oid_num_to_str(oid_ul, 5, str, &should_size), CRYPT_BUFFER_OVERFLOW); - ENSURE(should_size == 10); - should_size = 1; - SHOULD_FAIL_WITH(pk_oid_num_to_str(oid_ul, 5, NULL, &should_size), CRYPT_BUFFER_OVERFLOW); - ENSURE(should_size == 10); - should_size = 16; - SHOULD_FAIL_WITH(pk_oid_num_to_str(oid_ul, 5, NULL, &should_size), CRYPT_BUFFER_OVERFLOW); - ENSURE(should_size == 10); - - XMEMSET(str, 'a', sizeof(str)); - DO(pk_oid_num_to_str(oid_ul, 5, str, &strlen)); - ENSURE(strlen == 10); - ENSURE(XMEMCMP(str, oid_str, strlen) == 0); - - XMEMSET(str, 'a', sizeof(str)); - strlen = 10; - DO(pk_oid_num_to_str(oid_ul, 5, str, &strlen)); - ENSURE(strlen == 10); - ENSURE(XMEMCMP(str, oid_str, strlen) == 0); - - return 0; -} diff --git a/tests/pkcs_1_eme_test.c b/tests/pkcs_1_eme_test.c deleted file mode 100644 index 172cfd30..00000000 --- a/tests/pkcs_1_eme_test.c +++ /dev/null @@ -1,64 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#if defined(LTC_PKCS_1) - -#include "../notes/rsa-testvectors/pkcs1v15crypt-vectors.c" - - - -int pkcs_1_eme_test(void) -{ - struct ltc_prng_descriptor* no_prng_desc = no_prng_desc_get(); - ltc_rsa_op_parameters rsa_params = { - .wprng = register_prng(no_prng_desc), - .prng = (void*)no_prng_desc, - .params.hash_idx = -1, - .padding = LTC_PKCS_1_V1_5 - }; - unsigned int i, j; - rsa_params.params.hash_idx = find_hash("sha1"); - - if (ltc_mp.name == NULL) return CRYPT_NOP; - - for (i = 0; i < LTC_ARRAY_SIZE(testcases_eme); ++i) { - testcase_t* t = &testcases_eme[i]; - rsa_key k, *key = &k; - DOX(rsa_init(key), t->name); - - DOX(ltc_mp_read_unsigned_bin(key->e, t->rsa.e, t->rsa.e_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->d, t->rsa.d, t->rsa.d_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->N, t->rsa.n, t->rsa.n_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->dQ, t->rsa.dQ, t->rsa.dQ_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->dP, t->rsa.dP, t->rsa.dP_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->qP, t->rsa.qInv, t->rsa.qInv_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->q, t->rsa.q, t->rsa.q_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->p, t->rsa.p, t->rsa.p_l), t->name); - key->type = PK_PRIVATE; - - for (j = 0; j < LTC_ARRAY_SIZE(t->data); ++j) { - rsaData_t* s = &t->data[j]; - unsigned char buf[256], obuf[256]; - unsigned long buflen = sizeof(buf), obuflen = sizeof(obuf); - int stat; - prng_descriptor[rsa_params.wprng].add_entropy(s->o2, s->o2_l, (void*)rsa_params.prng); - DOX(rsa_encrypt_key_v2(s->o1, s->o1_l, obuf, &obuflen, &rsa_params, key), s->name); - COMPARE_TESTVECTOR(obuf, obuflen, s->o3, s->o3_l,s->name, j); - DOX(rsa_decrypt_key_v2(obuf, obuflen, buf, &buflen, &rsa_params, &stat, key), s->name); - ENSUREX(stat == 1, s->name); - } /* for */ - - ltc_mp_deinit_multi(key->d, key->e, key->N, key->dQ, key->dP, key->qP, key->p, key->q, LTC_NULL); - } /* for */ - - unregister_prng(no_prng_desc); - no_prng_desc_free(no_prng_desc); - - return 0; -} - -#else -LTC_NOP_TEST(pkcs_1_eme_test) -#endif - diff --git a/tests/pkcs_1_emsa_test.c b/tests/pkcs_1_emsa_test.c deleted file mode 100644 index 47e77be4..00000000 --- a/tests/pkcs_1_emsa_test.c +++ /dev/null @@ -1,61 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#if defined(LTC_PKCS_1) - -#include "../notes/rsa-testvectors/pkcs1v15sign-vectors.c" - - - -int pkcs_1_emsa_test(void) -{ - ltc_rsa_op_parameters rsa_params = { - .params.hash_idx = -1, - .padding = LTC_PKCS_1_V1_5 - }; - int hash_idx = find_hash("sha1"); - unsigned int i, j; - rsa_params.params.hash_idx = hash_idx; - - if (ltc_mp.name == NULL) return CRYPT_NOP; - - DO(hash_is_valid(hash_idx)); - - for (i = 0; i < LTC_ARRAY_SIZE(testcases_emsa); ++i) { - testcase_t* t = &testcases_emsa[i]; - rsa_key k, *key = &k; - DOX(rsa_init(key), t->name); - - DOX(ltc_mp_read_unsigned_bin(key->e, t->rsa.e, t->rsa.e_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->d, t->rsa.d, t->rsa.d_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->N, t->rsa.n, t->rsa.n_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->dQ, t->rsa.dQ, t->rsa.dQ_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->dP, t->rsa.dP, t->rsa.dP_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->qP, t->rsa.qInv, t->rsa.qInv_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->q, t->rsa.q, t->rsa.q_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->p, t->rsa.p, t->rsa.p_l), t->name); - key->type = PK_PRIVATE; - - for (j = 0; j < LTC_ARRAY_SIZE(t->data); ++j) { - rsaData_t* s = &t->data[j]; - unsigned char buf[20], obuf[256]; - unsigned long buflen = sizeof(buf), obuflen = sizeof(obuf); - int stat; - DOX(hash_memory(hash_idx, s->o1, s->o1_l, buf, &buflen), s->name); - DOX(rsa_sign_hash_v2(buf, buflen, obuf, &obuflen, &rsa_params, key), s->name); - COMPARE_TESTVECTOR(obuf, obuflen, s->o2, s->o2_l,s->name, j); - DOX(rsa_verify_hash_v2(obuf, obuflen, buf, buflen, &rsa_params, &stat, key), s->name); - ENSUREX(stat == 1, s->name); - } /* for */ - - ltc_mp_deinit_multi(key->d, key->e, key->N, key->dQ, key->dP, key->qP, key->p, key->q, LTC_NULL); - } /* for */ - - return 0; -} - -#else -LTC_NOP_TEST(pkcs_1_emsa_test) -#endif - diff --git a/tests/pkcs_1_oaep_test.c b/tests/pkcs_1_oaep_test.c deleted file mode 100644 index 86d0b62b..00000000 --- a/tests/pkcs_1_oaep_test.c +++ /dev/null @@ -1,67 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#if defined(LTC_PKCS_1) - -#include "../notes/rsa-testvectors/oaep-vect.c" - - - -int pkcs_1_oaep_test(void) -{ - struct ltc_prng_descriptor* no_prng_desc = no_prng_desc_get(); - ltc_rsa_op_parameters rsa_params = { - .wprng = register_prng(no_prng_desc), - .prng = (void*)no_prng_desc, - .params.hash_idx = -1, - .params.mgf1_hash_idx = -1, - .padding = LTC_PKCS_1_OAEP - }; - unsigned int i, j; - rsa_params.params.hash_idx = find_hash("sha1"); - rsa_params.params.mgf1_hash_idx = rsa_params.params.hash_idx; - - if (ltc_mp.name == NULL) return CRYPT_NOP; - - - for (i = 0; i < LTC_ARRAY_SIZE(testcases_oaep); ++i) { - testcase_t* t = &testcases_oaep[i]; - rsa_key k, *key = &k; - DOX(rsa_init(key), t->name); - - DOX(ltc_mp_read_unsigned_bin(key->e, t->rsa.e, t->rsa.e_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->d, t->rsa.d, t->rsa.d_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->N, t->rsa.n, t->rsa.n_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->dQ, t->rsa.dQ, t->rsa.dQ_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->dP, t->rsa.dP, t->rsa.dP_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->qP, t->rsa.qInv, t->rsa.qInv_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->q, t->rsa.q, t->rsa.q_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->p, t->rsa.p, t->rsa.p_l), t->name); - key->type = PK_PRIVATE; - - for (j = 0; j < LTC_ARRAY_SIZE(t->data); ++j) { - rsaData_t* s = &t->data[j]; - unsigned char buf[256], obuf[256]; - unsigned long buflen = sizeof(buf), obuflen = sizeof(obuf); - int stat; - prng_descriptor[rsa_params.wprng].add_entropy(s->o2, s->o2_l, rsa_params.prng); - DOX(rsa_encrypt_key_v2(s->o1, s->o1_l, obuf, &obuflen, &rsa_params, key), s->name); - COMPARE_TESTVECTOR(obuf, obuflen, s->o3, s->o3_l,s->name, j); - DOX(rsa_decrypt_key_v2(obuf, obuflen, buf, &buflen, &rsa_params, &stat, key), s->name); - ENSUREX(stat == 1, s->name); - } /* for */ - - ltc_mp_deinit_multi(key->d, key->e, key->N, key->dQ, key->dP, key->qP, key->p, key->q, LTC_NULL); - } /* for */ - - unregister_prng(no_prng_desc); - no_prng_desc_free(no_prng_desc); - - return 0; -} - -#else -LTC_NOP_TEST(pkcs_1_oaep_test) -#endif - diff --git a/tests/pkcs_1_pss_test.c b/tests/pkcs_1_pss_test.c deleted file mode 100644 index 9f3d2064..00000000 --- a/tests/pkcs_1_pss_test.c +++ /dev/null @@ -1,186 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#if defined(LTC_PKCS_1) - -#include "../notes/rsa-testvectors/pss-vect.c" - - -#ifdef LTC_SHA3 -static int s_pss_shake_wycheproof_test(void) -{ - const struct { - const char *name; - const char *n, *e; - unsigned long saltlen; - struct { - int tc_id, valid; - const char *msg, *sig; - } tests[2]; - } cases[] = { - { /* Project Wycheproof: testvectors_v1/rsa_pss_2048_shake128_test.json */ - "shake128", - "00ac7ae7bde0bc9067fff5d5b4229350f8f6a1b285cda38b86ab61a54b02350889de49ff3ae1e243d380d4349ee3df2505d6041938fc270f8dcc265c5d022e3610d5f06ea2247e634b08d7aa3e24a347f6d61c127813e0302a5727c10292afa8" - "3b9775e5ba26d6b7ae217d05c469d193376d70ee92ff40f8424baaa4ded3814ac523016d8c7d7ccd1eec17459f3d2449f4cbfae3f2d51e506827282bde589a52e66320f54ca930a21f6aa7e3b0bc531ad1b568d7e32c0afed523ca6da62e5f22" - "fed6f7ee722974b5f70aad710dcb14fa7a3c561b3d4c8696a455abe4cb9b351a6c0b6e478c60a81f02fb3a285245ebfe93221e36ad8787b3e7f3099d7c23225641", - "010001", - 32, - { - { - 3, 1, /* valid */ - "54657374", - "62f31cf2a408ddae7a46914951080377319f310df9930d41566926a7aaa8938fcf3e91852abd12897aef378a13ad670b93ec13d5ace695377f3cf83d95d10375a6c14ffaf1ae6459cd381da1be9571a1de6e8e32dd741cb10d692ef0caaaa477" - "70b86ca05a2cf251d203aeaa048dbedc7d99e6e4c5a51e8b820d9df7b904834aef30190e9e36630794b687147a000167f599f902a22568fdb556518090f3e671734ec87874759e3efbf25b31582ef6b8cc687addea20c85917a941e59118b1e9" - "d847129fc6c2e071a6ef1a282e7b99d991208c6c127b87cc263af8c4942ead189f30c446a48161c465e71714265b4058c4a7410a589c89fd8e1ef821528e18c2" - }, - { - 87, 0, /* invalid */ - "313233343030", - "98b3e4580c788c9a4e6a49bc2a409e2930319c8136ff41df308299ae8c9cea98d29825d5288528a95310a6c92ac2073dbc9b1719f5e2b875ca72dffa2f192dcfe4a04ac63798605c77e3f48893696363f17a94ef1f0ad1774ffb86a32fee18d4" - "f975b44db75f24264143ebde795dbea887be4fba72ace4733e688ce1f44e2dd46ed9f703d8f6864c7bf899e13d4a6adefaebf9ac3c5aa901a2415f9f688765a80e41a6681e9d3762289d9bc54709fbd687b12104efe23413d3de97f880cd2e26" - "fd29c6426792e7ff576caf3fc46ec2e139cbe00a7864ef5b3256908914fecd3c3712f2c70098ada0d62778dadb4e77256fc67ac158a4af661a15b00f25182515" - } - } - }, - { /* Project Wycheproof: testvectors_v1/rsa_pss_2048_shake256_test.json */ - "shake256", - "008a33fe25984e4d5e5ac821ebad6c13051c5b48ccd4f22a60ea82d4802cc56ef3441c19df897bb7a45c0baf22972a6b35cfa176007555b8312de42bfa224a3d1d8e7dee5c3a484b491f4db7a7d70c4504efbd717abbaf0b9a7191c9aadc48e9" - "720a33ad578086321619a25b1da1d5c29949f69783e6e32b1d5d5875afb0f54786058dc970967e235e6eb6803f46b14be9f210fdbca164f7be0b5a3c486bc6f6971cfe9a5f1f08935a2559be01a058bb100715bb0d6c7745d08ab702d5ec9327" - "f1db33bf3555dc2f8a93bea42a4a0cf566ba7a5c0d8b6a848c23b92112462288dae97b56923385d7a8acb0014d04ba715f797d2716b6c13c3342b80be6b3e490cf", - "010001", - 64, - { - { - 3, 1, /* valid */ - "54657374", - "0f9be5d84919e2b58bf9079be5783d7b7b8ce4ac6bb6ed3f7f4f9640f1e9135084b4dae0c7d7c950d49c62a9a2013dec7aaba2b6c5465a2d3c952d1a805dcc2fc594ce94c2ebaf5dafcd5e62154d4d5f8e2a3592b63a9c3dace20a1fb859181d" - "895c02f64d0198c64514cc17315c99749617356cdcceacfb5ae87e01def90c6fb6d59cd4a9beb1c31fd8ee966c9c245795fd249c76b59f9f4c28614b9de3bd0ae04598794ba2864441efbe332cd68aa3107f7ec2e3b88dd3c063d57da1fc7cf1" - "5ef39213e81d94dd4f555eda5d8a37ad5e303b1532e753b330ec913bda57f11725a2bffa6e16250955680d21c510b5bddf2b6ba78556158c991a859c7a029ed3" - }, - { - 137, 0, /* invalid */ - "313233343030", - "4ddb8c5f83ebdcc5c08486df729549c9732117b5fac42645e58c45f40410a39538409af0cdc75cc1c03f43c5787821c252f5ddf50ac9e584e65f50e811402d683e9a246cb4246ee7b1427819e63f74b6b90bf023e3aad406e66fc9782d1d71c6" - "a70fa3787d08cb437106ad51cf7c78923b8b5df662788810e071645882955690c8b1a29a6a6fc54204fb1715b8d1a2bcbd739805e0dfaea734110ed719caf77143ba2863e2521127d4b7fc55488f1d26216b3e8a2861a6aabdff8732616d2f73" - "e78c868772877443a05847fb99c4738728be884668058289547848167724f5ebe4b7f637618a5c3641fe687105a52a7b44e5fd060b165fdf831c80b2769c26bd" - } - } - } - }; - unsigned char n[257], e[8], msg[64], sig[512], hash[64]; - unsigned long nlen, elen, msglen, siglen, hashlen; - unsigned int i, j; - rsa_key key; - ltc_rsa_op_parameters params = { .params.hash_idx = -1, .params.mgf1_hash_idx = -1, .padding = LTC_PKCS_1_PSS }; - - for (i = 0; i < LTC_ARRAY_SIZE(cases); ++i) { - int hash_idx = find_hash(cases[i].name); - DO(hash_is_valid(hash_idx)); - - DOX(rsa_init(&key), cases[i].name); - nlen = sizeof(n); - elen = sizeof(e); - DOX(base16_decode(cases[i].n, XSTRLEN(cases[i].n), n, &nlen), cases[i].name); - DOX(base16_decode(cases[i].e, XSTRLEN(cases[i].e), e, &elen), cases[i].name); - DOX(ltc_mp_read_unsigned_bin(key.N, n, nlen), cases[i].name); - DOX(ltc_mp_read_unsigned_bin(key.e, e, elen), cases[i].name); - key.type = PK_PUBLIC; - - params.params.hash_idx = hash_idx; - params.params.mgf1_hash_idx = hash_idx; - params.params.saltlen = cases[i].saltlen; - - for (j = 0; j < LTC_ARRAY_SIZE(cases[i].tests); ++j) { - int err, stat; - char name[64]; - - snprintf(name, sizeof(name), "Wycheproof %s/%d tcId=%d", cases[i].name, hash_idx, cases[i].tests[j].tc_id); - msglen = sizeof(msg); - siglen = sizeof(sig); - DOX(base16_decode(cases[i].tests[j].msg, XSTRLEN(cases[i].tests[j].msg), msg, &msglen), name); - DOX(base16_decode(cases[i].tests[j].sig, XSTRLEN(cases[i].tests[j].sig), sig, &siglen), name); - - hashlen = hash_descriptor[hash_idx].hashsize; - DOX(hash_memory(hash_idx, msg, msglen, hash, &hashlen), name); - - stat = 0; - err = rsa_verify_hash_v2(sig, siglen, hash, hashlen, ¶ms, &stat, &key); - if (cases[i].tests[j].valid) { - DOX(err, name); - ENSUREX(stat == 1, name); - } - else { - ENSUREX(err != CRYPT_OK || stat == 0, name); - } - } - rsa_free(&key); - } - return CRYPT_OK; -} -#endif - -int pkcs_1_pss_test(void) -{ - struct ltc_prng_descriptor* no_prng_desc = no_prng_desc_get(); - ltc_rsa_op_parameters rsa_params = { - .wprng = register_prng(no_prng_desc), - .prng = (void*)no_prng_desc, - .params.hash_idx = -1, - .params.mgf1_hash_idx = -1, - .padding = LTC_PKCS_1_PSS - }; - int hash_idx = find_hash("sha1"); - unsigned int i, j; - rsa_params.params.hash_idx = hash_idx; - rsa_params.params.mgf1_hash_idx = hash_idx; - - if (ltc_mp.name == NULL) return CRYPT_NOP; - - DO(hash_is_valid(hash_idx)); - - for (i = 0; i < LTC_ARRAY_SIZE(testcases_pss); ++i) { - testcase_t* t = &testcases_pss[i]; - rsa_key k, *key = &k; - DOX(rsa_init(key), t->name); - - DOX(ltc_mp_read_unsigned_bin(key->e, t->rsa.e, t->rsa.e_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->d, t->rsa.d, t->rsa.d_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->N, t->rsa.n, t->rsa.n_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->dQ, t->rsa.dQ, t->rsa.dQ_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->dP, t->rsa.dP, t->rsa.dP_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->qP, t->rsa.qInv, t->rsa.qInv_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->q, t->rsa.q, t->rsa.q_l), t->name); - DOX(ltc_mp_read_unsigned_bin(key->p, t->rsa.p, t->rsa.p_l), t->name); - key->type = PK_PRIVATE; - - for (j = 0; j < LTC_ARRAY_SIZE(t->data); ++j) { - rsaData_t* s = &t->data[j]; - unsigned char buf[20], obuf[256]; - unsigned long buflen = sizeof(buf), obuflen = sizeof(obuf); - int stat; - prng_descriptor[rsa_params.wprng].add_entropy(s->o2, s->o2_l, rsa_params.prng); - DOX(hash_memory(hash_idx, s->o1, s->o1_l, buf, &buflen), s->name); - rsa_params.params.saltlen = s->o2_l; - DOX(rsa_sign_hash_v2(buf, buflen, obuf, &obuflen, &rsa_params, key), s->name); - COMPARE_TESTVECTOR(obuf, obuflen, s->o3, s->o3_l,s->name, j); - DOX(rsa_verify_hash_v2(obuf, obuflen, buf, buflen, &rsa_params, &stat, key), s->name); - ENSUREX(stat == 1, s->name); - } /* for */ - - ltc_mp_deinit_multi(key->d, key->e, key->N, key->dQ, key->dP, key->qP, key->p, key->q, LTC_NULL); - } /* for */ - -#ifdef LTC_SHA3 - DO(s_pss_shake_wycheproof_test()); -#endif - unregister_prng(no_prng_desc); - no_prng_desc_free(no_prng_desc); - - return 0; -} - -#else -LTC_NOP_TEST(pkcs_1_pss_test) -#endif - diff --git a/tests/pkcs_1_test.c b/tests/pkcs_1_test.c deleted file mode 100644 index 70237cb9..00000000 --- a/tests/pkcs_1_test.c +++ /dev/null @@ -1,84 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#ifdef LTC_PKCS_1 - -#ifdef LTC_TEST_REAL_RAND -#define LTC_TEST_RAND_SEED time(NULL) -#else -#define LTC_TEST_RAND_SEED 23 -#endif - -int pkcs_1_test(void) -{ - unsigned char buf[3][128]; - int res1, res2, res3; - unsigned long x, y, l1, l2, l3, i1, modlen; - static const unsigned char lparam[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 }; - ltc_rsa_op_parameters rsa_params = { - .wprng = find_prng("yarrow"), - .prng = &yarrow_prng, - .params.hash_idx = -1, - .params.mgf1_hash_idx = -1, - }; - rsa_params.params.hash_idx = find_hash("sha1"); - rsa_params.params.mgf1_hash_idx = rsa_params.params.hash_idx; - - srand(LTC_TEST_RAND_SEED); - /* do many tests */ - for (x = 0; x < 100; x++) { - zeromem(buf, sizeof(buf)); - - /* make a dummy message (of random length) */ - l3 = (rand() & 31) + 8; - for (y = 0; y < l3; y++) buf[0][y] = rand() & 255; - - /* pick a random lparam len [0..16] */ - rsa_params.u.crypt.lparamlen = abs(rand()) % 17; - - /* pick a random saltlen 0..16 */ - rsa_params.params.saltlen = abs(rand()) % 17; - - /* PKCS #1 v2.0 supports modlens not multiple of 8 */ - modlen = 800 + (abs(rand()) % 224); - - /* encode it */ - l1 = sizeof(buf[1]); - rsa_params.padding = LTC_PKCS_1_OAEP; - rsa_params.u.crypt.lparam = lparam; - DO(ltc_pkcs_1_oaep_encode(buf[0], l3, &rsa_params, modlen, buf[1], &l1)); - - /* decode it */ - l2 = sizeof(buf[2]); - DO(ltc_pkcs_1_oaep_decode(buf[1], l1, &rsa_params, modlen, buf[2], &l2, &res1)); - - ENSURE(res1 == 1); - COMPARE_TESTVECTOR(buf[0], l3, buf[2], l2, "PKCS#1 OAEP", x); - - /* test PSS */ - l1 = sizeof(buf[1]); - rsa_params.padding = LTC_PKCS_1_PSS; - rsa_params.u.crypt.lparam = NULL; - rsa_params.u.crypt.lparamlen = 0; - DO(ltc_pkcs_1_pss_encode_mgf1(buf[0], l3, &rsa_params, modlen, buf[1], &l1)); - DO(ltc_pkcs_1_pss_decode_mgf1(buf[0], l3, buf[1], l1, &rsa_params, modlen, &res1)); - - buf[0][i1 = abs(rand()) % l3] ^= 1; - DO(ltc_pkcs_1_pss_decode_mgf1(buf[0], l3, buf[1], l1, &rsa_params, modlen, &res2)); - - buf[0][i1] ^= 1; - buf[1][abs(rand()) % (l1 - 1)] ^= 1; - ltc_pkcs_1_pss_decode_mgf1(buf[0], l3, buf[1], l1, &rsa_params, modlen, &res3); - if (!(res1 == 1 && res2 == 0 && res3 == 0)) { - fprintf(stderr, "PSS failed: %d, %d, %d, %lu, %lu\n", res1, res2, res3, l3, rsa_params.params.saltlen); - return 1; - } - } - return 0; -} - -#else -LTC_NOP_TEST(pkcs_1_test) -#endif - diff --git a/tests/prng_test.c b/tests/prng_test.c deleted file mode 100644 index 61d633e5..00000000 --- a/tests/prng_test.c +++ /dev/null @@ -1,107 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#ifdef LTC_PRNG_ENABLE_LTC_RNG - -static unsigned long my_test_rng_read; - -static unsigned long my_test_rng(unsigned char *buf, unsigned long len, - void (*callback)(void)) -{ - unsigned long n; - LTC_UNUSED_PARAM(callback); - for (n = 0; n < len; ++n) { - buf[n] = 4; - } - my_test_rng_read += n; - return n; -} - -#endif - -int prng_test(void) -{ - int err = CRYPT_NOP; - int x; - unsigned char buf[4096] = { 0 }; - unsigned long n, one; - prng_state nprng; - -#ifdef LTC_PRNG_ENABLE_LTC_RNG - unsigned long before; - - unsigned long (*previous)(unsigned char *, unsigned long , void (*)(void)) = ltc_rng; - ltc_rng = my_test_rng; - - before = my_test_rng_read; - - if ((err = rng_make_prng(128, find_prng("yarrow"), &nprng, NULL)) != CRYPT_OK) { - fprintf(stderr, "rng_make_prng with 'my_test_rng' failed: %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - DO(yarrow_done(&nprng)); - - if (before == my_test_rng_read) { - fprintf(stderr, "somehow there was no read from the ltc_rng! %lu == %lu\n", before, my_test_rng_read); - exit(EXIT_FAILURE); - } - - ltc_rng = previous; -#endif - - /* test prngs (test, import/export) */ - for (x = 0; x < TAB_SIZE && prng_descriptor[x].name != NULL; x++) { - if(strstr(prng_descriptor[x].name, "no_prng") == prng_descriptor[x].name) continue; - DOX(prng_descriptor[x].test(), prng_descriptor[x].name); - DOX(prng_descriptor[x].start(&nprng), prng_descriptor[x].name); - DOX(prng_descriptor[x].add_entropy((unsigned char *)"helloworld12", 12, &nprng), prng_descriptor[x].name); - DOX(prng_descriptor[x].ready(&nprng), prng_descriptor[x].name); - n = sizeof(buf); - if (strcmp(prng_descriptor[x].name, "sprng")) { - one = 1; - if (prng_descriptor[x].pexport(buf, &one, &nprng) != CRYPT_BUFFER_OVERFLOW) { - fprintf(stderr, "Error testing pexport with a short buffer (%s)\n", prng_descriptor[x].name); - return CRYPT_ERROR; - } - } - DOX(prng_descriptor[x].pexport(buf, &n, &nprng), prng_descriptor[x].name); - prng_descriptor[x].done(&nprng); - DOX(prng_descriptor[x].pimport(buf, n, &nprng), prng_descriptor[x].name); - DOX(prng_descriptor[x].pimport(buf, sizeof(buf), &nprng), prng_descriptor[x].name); /* try to import larger data */ - DOX(prng_descriptor[x].ready(&nprng), prng_descriptor[x].name); - if (prng_descriptor[x].read(buf, 100, &nprng) != 100) { - fprintf(stderr, "Error reading from imported PRNG (%s)!\n", prng_descriptor[x].name); - return CRYPT_ERROR; - } - prng_descriptor[x].done(&nprng); - } - - if ((err = rng_make_prng(-1, find_prng("yarrow"), &nprng, NULL)) != CRYPT_OK) { - fprintf(stderr, "rng_make_prng(-1,..) with 'yarrow' failed: %s\n", error_to_string(err)); - } - DO(yarrow_done(&nprng)); - -#ifdef LTC_FORTUNA - DO(fortuna_start(&nprng)); - DO(fortuna_add_entropy(buf, 32, &nprng)); - DO(fortuna_ready(&nprng)); - if (fortuna_read(buf + 32, 32, &nprng) != 32) { - fprintf(stderr, "Error reading from Fortuna after fortuna_add_entropy()!\n"); - return CRYPT_ERROR; - } - DO(fortuna_done(&nprng)); - - DO(fortuna_start(&nprng)); - DO(fortuna_add_random_event(0, 0, buf, 32, &nprng)); - DO(fortuna_ready(&nprng)); - if (fortuna_read(buf + 64, 32, &nprng) != 32) { - fprintf(stderr, "Error reading from Fortuna after fortuna_add_random_event()!\n"); - return CRYPT_ERROR; - } - DO(fortuna_done(&nprng)); - - COMPARE_TESTVECTOR(buf + 64, 32, buf + 32, 32, "fortuna_add_entropy() vs. fortuna_add_random_event()", 0); -#endif - return err; -} diff --git a/tests/rotate_test.c b/tests/rotate_test.c deleted file mode 100644 index 62e328c8..00000000 --- a/tests/rotate_test.c +++ /dev/null @@ -1,406 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -/* Test rotate macros */ -int rotate_test(void) -{ - ulong32 L32 = 0x12345678UL; - ulong64 L64 = CONST64(0x1122334455667788); - int err = 0; - - /* ROR */ - if (ROR(L32, 0 ) != 0x12345678UL) { fprintf(stderr, "ROR 0 failed\n"); err++; } - if (ROR(L32, 1 ) != 0x091a2b3cUL) { fprintf(stderr, "ROR 1 failed\n"); err++; } - if (ROR(L32, 2 ) != 0x048d159eUL) { fprintf(stderr, "ROR 2 failed\n"); err++; } - if (ROR(L32, 3 ) != 0x02468acfUL) { fprintf(stderr, "ROR 3 failed\n"); err++; } - if (ROR(L32, 4 ) != 0x81234567UL) { fprintf(stderr, "ROR 4 failed\n"); err++; } - if (ROR(L32, 5 ) != 0xc091a2b3UL) { fprintf(stderr, "ROR 5 failed\n"); err++; } - if (ROR(L32, 6 ) != 0xe048d159UL) { fprintf(stderr, "ROR 6 failed\n"); err++; } - if (ROR(L32, 7 ) != 0xf02468acUL) { fprintf(stderr, "ROR 7 failed\n"); err++; } - if (ROR(L32, 8 ) != 0x78123456UL) { fprintf(stderr, "ROR 8 failed\n"); err++; } - if (ROR(L32, 9 ) != 0x3c091a2bUL) { fprintf(stderr, "ROR 9 failed\n"); err++; } - if (ROR(L32, 10) != 0x9e048d15UL) { fprintf(stderr, "ROR 10 failed\n"); err++; } - if (ROR(L32, 11) != 0xcf02468aUL) { fprintf(stderr, "ROR 11 failed\n"); err++; } - if (ROR(L32, 12) != 0x67812345UL) { fprintf(stderr, "ROR 12 failed\n"); err++; } - if (ROR(L32, 13) != 0xb3c091a2UL) { fprintf(stderr, "ROR 13 failed\n"); err++; } - if (ROR(L32, 14) != 0x59e048d1UL) { fprintf(stderr, "ROR 14 failed\n"); err++; } - if (ROR(L32, 15) != 0xacf02468UL) { fprintf(stderr, "ROR 15 failed\n"); err++; } - if (ROR(L32, 16) != 0x56781234UL) { fprintf(stderr, "ROR 16 failed\n"); err++; } - if (ROR(L32, 17) != 0x2b3c091aUL) { fprintf(stderr, "ROR 17 failed\n"); err++; } - if (ROR(L32, 18) != 0x159e048dUL) { fprintf(stderr, "ROR 18 failed\n"); err++; } - if (ROR(L32, 19) != 0x8acf0246UL) { fprintf(stderr, "ROR 19 failed\n"); err++; } - if (ROR(L32, 20) != 0x45678123UL) { fprintf(stderr, "ROR 20 failed\n"); err++; } - if (ROR(L32, 21) != 0xa2b3c091UL) { fprintf(stderr, "ROR 21 failed\n"); err++; } - if (ROR(L32, 22) != 0xd159e048UL) { fprintf(stderr, "ROR 22 failed\n"); err++; } - if (ROR(L32, 23) != 0x68acf024UL) { fprintf(stderr, "ROR 23 failed\n"); err++; } - if (ROR(L32, 24) != 0x34567812UL) { fprintf(stderr, "ROR 24 failed\n"); err++; } - if (ROR(L32, 25) != 0x1a2b3c09UL) { fprintf(stderr, "ROR 25 failed\n"); err++; } - if (ROR(L32, 26) != 0x8d159e04UL) { fprintf(stderr, "ROR 26 failed\n"); err++; } - if (ROR(L32, 27) != 0x468acf02UL) { fprintf(stderr, "ROR 27 failed\n"); err++; } - if (ROR(L32, 28) != 0x23456781UL) { fprintf(stderr, "ROR 28 failed\n"); err++; } - if (ROR(L32, 29) != 0x91a2b3c0UL) { fprintf(stderr, "ROR 29 failed\n"); err++; } - if (ROR(L32, 30) != 0x48d159e0UL) { fprintf(stderr, "ROR 30 failed\n"); err++; } - if (ROR(L32, 31) != 0x2468acf0UL) { fprintf(stderr, "ROR 31 failed\n"); err++; } - /* ROR64 */ - if (ROR64(L64, 0 ) != CONST64(0x1122334455667788)) { fprintf(stderr, "ROR64 0 failed\n"); err++; } - if (ROR64(L64, 1 ) != CONST64(0x089119a22ab33bc4)) { fprintf(stderr, "ROR64 1 failed\n"); err++; } - if (ROR64(L64, 2 ) != CONST64(0x04488cd115599de2)) { fprintf(stderr, "ROR64 2 failed\n"); err++; } - if (ROR64(L64, 3 ) != CONST64(0x022446688aaccef1)) { fprintf(stderr, "ROR64 3 failed\n"); err++; } - if (ROR64(L64, 4 ) != CONST64(0x8112233445566778)) { fprintf(stderr, "ROR64 4 failed\n"); err++; } - if (ROR64(L64, 5 ) != CONST64(0x4089119a22ab33bc)) { fprintf(stderr, "ROR64 5 failed\n"); err++; } - if (ROR64(L64, 6 ) != CONST64(0x204488cd115599de)) { fprintf(stderr, "ROR64 6 failed\n"); err++; } - if (ROR64(L64, 7 ) != CONST64(0x1022446688aaccef)) { fprintf(stderr, "ROR64 7 failed\n"); err++; } - if (ROR64(L64, 8 ) != CONST64(0x8811223344556677)) { fprintf(stderr, "ROR64 8 failed\n"); err++; } - if (ROR64(L64, 9 ) != CONST64(0xc4089119a22ab33b)) { fprintf(stderr, "ROR64 9 failed\n"); err++; } - if (ROR64(L64, 10) != CONST64(0xe204488cd115599d)) { fprintf(stderr, "ROR64 10 failed\n"); err++; } - if (ROR64(L64, 11) != CONST64(0xf1022446688aacce)) { fprintf(stderr, "ROR64 11 failed\n"); err++; } - if (ROR64(L64, 12) != CONST64(0x7881122334455667)) { fprintf(stderr, "ROR64 12 failed\n"); err++; } - if (ROR64(L64, 13) != CONST64(0xbc4089119a22ab33)) { fprintf(stderr, "ROR64 13 failed\n"); err++; } - if (ROR64(L64, 14) != CONST64(0xde204488cd115599)) { fprintf(stderr, "ROR64 14 failed\n"); err++; } - if (ROR64(L64, 15) != CONST64(0xef1022446688aacc)) { fprintf(stderr, "ROR64 15 failed\n"); err++; } - if (ROR64(L64, 16) != CONST64(0x7788112233445566)) { fprintf(stderr, "ROR64 16 failed\n"); err++; } - if (ROR64(L64, 17) != CONST64(0x3bc4089119a22ab3)) { fprintf(stderr, "ROR64 17 failed\n"); err++; } - if (ROR64(L64, 18) != CONST64(0x9de204488cd11559)) { fprintf(stderr, "ROR64 18 failed\n"); err++; } - if (ROR64(L64, 19) != CONST64(0xcef1022446688aac)) { fprintf(stderr, "ROR64 19 failed\n"); err++; } - if (ROR64(L64, 20) != CONST64(0x6778811223344556)) { fprintf(stderr, "ROR64 20 failed\n"); err++; } - if (ROR64(L64, 21) != CONST64(0x33bc4089119a22ab)) { fprintf(stderr, "ROR64 21 failed\n"); err++; } - if (ROR64(L64, 22) != CONST64(0x99de204488cd1155)) { fprintf(stderr, "ROR64 22 failed\n"); err++; } - if (ROR64(L64, 23) != CONST64(0xccef1022446688aa)) { fprintf(stderr, "ROR64 23 failed\n"); err++; } - if (ROR64(L64, 24) != CONST64(0x6677881122334455)) { fprintf(stderr, "ROR64 24 failed\n"); err++; } - if (ROR64(L64, 25) != CONST64(0xb33bc4089119a22a)) { fprintf(stderr, "ROR64 25 failed\n"); err++; } - if (ROR64(L64, 26) != CONST64(0x599de204488cd115)) { fprintf(stderr, "ROR64 26 failed\n"); err++; } - if (ROR64(L64, 27) != CONST64(0xaccef1022446688a)) { fprintf(stderr, "ROR64 27 failed\n"); err++; } - if (ROR64(L64, 28) != CONST64(0x5667788112233445)) { fprintf(stderr, "ROR64 28 failed\n"); err++; } - if (ROR64(L64, 29) != CONST64(0xab33bc4089119a22)) { fprintf(stderr, "ROR64 29 failed\n"); err++; } - if (ROR64(L64, 30) != CONST64(0x5599de204488cd11)) { fprintf(stderr, "ROR64 30 failed\n"); err++; } - if (ROR64(L64, 31) != CONST64(0xaaccef1022446688)) { fprintf(stderr, "ROR64 31 failed\n"); err++; } - if (ROR64(L64, 32) != CONST64(0x5566778811223344)) { fprintf(stderr, "ROR64 32 failed\n"); err++; } - if (ROR64(L64, 33) != CONST64(0x2ab33bc4089119a2)) { fprintf(stderr, "ROR64 33 failed\n"); err++; } - if (ROR64(L64, 34) != CONST64(0x15599de204488cd1)) { fprintf(stderr, "ROR64 34 failed\n"); err++; } - if (ROR64(L64, 35) != CONST64(0x8aaccef102244668)) { fprintf(stderr, "ROR64 35 failed\n"); err++; } - if (ROR64(L64, 36) != CONST64(0x4556677881122334)) { fprintf(stderr, "ROR64 36 failed\n"); err++; } - if (ROR64(L64, 37) != CONST64(0x22ab33bc4089119a)) { fprintf(stderr, "ROR64 37 failed\n"); err++; } - if (ROR64(L64, 38) != CONST64(0x115599de204488cd)) { fprintf(stderr, "ROR64 38 failed\n"); err++; } - if (ROR64(L64, 39) != CONST64(0x88aaccef10224466)) { fprintf(stderr, "ROR64 39 failed\n"); err++; } - if (ROR64(L64, 40) != CONST64(0x4455667788112233)) { fprintf(stderr, "ROR64 40 failed\n"); err++; } - if (ROR64(L64, 41) != CONST64(0xa22ab33bc4089119)) { fprintf(stderr, "ROR64 41 failed\n"); err++; } - if (ROR64(L64, 42) != CONST64(0xd115599de204488c)) { fprintf(stderr, "ROR64 42 failed\n"); err++; } - if (ROR64(L64, 43) != CONST64(0x688aaccef1022446)) { fprintf(stderr, "ROR64 43 failed\n"); err++; } - if (ROR64(L64, 44) != CONST64(0x3445566778811223)) { fprintf(stderr, "ROR64 44 failed\n"); err++; } - if (ROR64(L64, 45) != CONST64(0x9a22ab33bc408911)) { fprintf(stderr, "ROR64 45 failed\n"); err++; } - if (ROR64(L64, 46) != CONST64(0xcd115599de204488)) { fprintf(stderr, "ROR64 46 failed\n"); err++; } - if (ROR64(L64, 47) != CONST64(0x6688aaccef102244)) { fprintf(stderr, "ROR64 47 failed\n"); err++; } - if (ROR64(L64, 48) != CONST64(0x3344556677881122)) { fprintf(stderr, "ROR64 48 failed\n"); err++; } - if (ROR64(L64, 49) != CONST64(0x19a22ab33bc40891)) { fprintf(stderr, "ROR64 49 failed\n"); err++; } - if (ROR64(L64, 50) != CONST64(0x8cd115599de20448)) { fprintf(stderr, "ROR64 50 failed\n"); err++; } - if (ROR64(L64, 51) != CONST64(0x46688aaccef10224)) { fprintf(stderr, "ROR64 51 failed\n"); err++; } - if (ROR64(L64, 52) != CONST64(0x2334455667788112)) { fprintf(stderr, "ROR64 52 failed\n"); err++; } - if (ROR64(L64, 53) != CONST64(0x119a22ab33bc4089)) { fprintf(stderr, "ROR64 53 failed\n"); err++; } - if (ROR64(L64, 54) != CONST64(0x88cd115599de2044)) { fprintf(stderr, "ROR64 54 failed\n"); err++; } - if (ROR64(L64, 55) != CONST64(0x446688aaccef1022)) { fprintf(stderr, "ROR64 55 failed\n"); err++; } - if (ROR64(L64, 56) != CONST64(0x2233445566778811)) { fprintf(stderr, "ROR64 56 failed\n"); err++; } - if (ROR64(L64, 57) != CONST64(0x9119a22ab33bc408)) { fprintf(stderr, "ROR64 57 failed\n"); err++; } - if (ROR64(L64, 58) != CONST64(0x488cd115599de204)) { fprintf(stderr, "ROR64 58 failed\n"); err++; } - if (ROR64(L64, 59) != CONST64(0x2446688aaccef102)) { fprintf(stderr, "ROR64 59 failed\n"); err++; } - if (ROR64(L64, 60) != CONST64(0x1223344556677881)) { fprintf(stderr, "ROR64 60 failed\n"); err++; } - if (ROR64(L64, 61) != CONST64(0x89119a22ab33bc40)) { fprintf(stderr, "ROR64 61 failed\n"); err++; } - if (ROR64(L64, 62) != CONST64(0x4488cd115599de20)) { fprintf(stderr, "ROR64 62 failed\n"); err++; } - if (ROR64(L64, 63) != CONST64(0x22446688aaccef10)) { fprintf(stderr, "ROR64 63 failed\n"); err++; } - /* ROL */ - if (ROL(L32, 0 ) != 0x12345678UL) { fprintf(stderr, "ROL 0 failed\n"); err++; } - if (ROL(L32, 1 ) != 0x2468acf0UL) { fprintf(stderr, "ROL 1 failed\n"); err++; } - if (ROL(L32, 2 ) != 0x48d159e0UL) { fprintf(stderr, "ROL 2 failed\n"); err++; } - if (ROL(L32, 3 ) != 0x91a2b3c0UL) { fprintf(stderr, "ROL 3 failed\n"); err++; } - if (ROL(L32, 4 ) != 0x23456781UL) { fprintf(stderr, "ROL 4 failed\n"); err++; } - if (ROL(L32, 5 ) != 0x468acf02UL) { fprintf(stderr, "ROL 5 failed\n"); err++; } - if (ROL(L32, 6 ) != 0x8d159e04UL) { fprintf(stderr, "ROL 6 failed\n"); err++; } - if (ROL(L32, 7 ) != 0x1a2b3c09UL) { fprintf(stderr, "ROL 7 failed\n"); err++; } - if (ROL(L32, 8 ) != 0x34567812UL) { fprintf(stderr, "ROL 8 failed\n"); err++; } - if (ROL(L32, 9 ) != 0x68acf024UL) { fprintf(stderr, "ROL 9 failed\n"); err++; } - if (ROL(L32, 10) != 0xd159e048UL) { fprintf(stderr, "ROL 10 failed\n"); err++; } - if (ROL(L32, 11) != 0xa2b3c091UL) { fprintf(stderr, "ROL 11 failed\n"); err++; } - if (ROL(L32, 12) != 0x45678123UL) { fprintf(stderr, "ROL 12 failed\n"); err++; } - if (ROL(L32, 13) != 0x8acf0246UL) { fprintf(stderr, "ROL 13 failed\n"); err++; } - if (ROL(L32, 14) != 0x159e048dUL) { fprintf(stderr, "ROL 14 failed\n"); err++; } - if (ROL(L32, 15) != 0x2b3c091aUL) { fprintf(stderr, "ROL 15 failed\n"); err++; } - if (ROL(L32, 16) != 0x56781234UL) { fprintf(stderr, "ROL 16 failed\n"); err++; } - if (ROL(L32, 17) != 0xacf02468UL) { fprintf(stderr, "ROL 17 failed\n"); err++; } - if (ROL(L32, 18) != 0x59e048d1UL) { fprintf(stderr, "ROL 18 failed\n"); err++; } - if (ROL(L32, 19) != 0xb3c091a2UL) { fprintf(stderr, "ROL 19 failed\n"); err++; } - if (ROL(L32, 20) != 0x67812345UL) { fprintf(stderr, "ROL 20 failed\n"); err++; } - if (ROL(L32, 21) != 0xcf02468aUL) { fprintf(stderr, "ROL 21 failed\n"); err++; } - if (ROL(L32, 22) != 0x9e048d15UL) { fprintf(stderr, "ROL 22 failed\n"); err++; } - if (ROL(L32, 23) != 0x3c091a2bUL) { fprintf(stderr, "ROL 23 failed\n"); err++; } - if (ROL(L32, 24) != 0x78123456UL) { fprintf(stderr, "ROL 24 failed\n"); err++; } - if (ROL(L32, 25) != 0xf02468acUL) { fprintf(stderr, "ROL 25 failed\n"); err++; } - if (ROL(L32, 26) != 0xe048d159UL) { fprintf(stderr, "ROL 26 failed\n"); err++; } - if (ROL(L32, 27) != 0xc091a2b3UL) { fprintf(stderr, "ROL 27 failed\n"); err++; } - if (ROL(L32, 28) != 0x81234567UL) { fprintf(stderr, "ROL 28 failed\n"); err++; } - if (ROL(L32, 29) != 0x02468acfUL) { fprintf(stderr, "ROL 29 failed\n"); err++; } - if (ROL(L32, 30) != 0x048d159eUL) { fprintf(stderr, "ROL 30 failed\n"); err++; } - if (ROL(L32, 31) != 0x091a2b3cUL) { fprintf(stderr, "ROL 31 failed\n"); err++; } - /* ROL64 */ - if (ROL64(L64, 0 ) != CONST64(0x1122334455667788)) { fprintf(stderr, "ROL64 0 failed\n"); err++; } - if (ROL64(L64, 1 ) != CONST64(0x22446688aaccef10)) { fprintf(stderr, "ROL64 1 failed\n"); err++; } - if (ROL64(L64, 2 ) != CONST64(0x4488cd115599de20)) { fprintf(stderr, "ROL64 2 failed\n"); err++; } - if (ROL64(L64, 3 ) != CONST64(0x89119a22ab33bc40)) { fprintf(stderr, "ROL64 3 failed\n"); err++; } - if (ROL64(L64, 4 ) != CONST64(0x1223344556677881)) { fprintf(stderr, "ROL64 4 failed\n"); err++; } - if (ROL64(L64, 5 ) != CONST64(0x2446688aaccef102)) { fprintf(stderr, "ROL64 5 failed\n"); err++; } - if (ROL64(L64, 6 ) != CONST64(0x488cd115599de204)) { fprintf(stderr, "ROL64 6 failed\n"); err++; } - if (ROL64(L64, 7 ) != CONST64(0x9119a22ab33bc408)) { fprintf(stderr, "ROL64 7 failed\n"); err++; } - if (ROL64(L64, 8 ) != CONST64(0x2233445566778811)) { fprintf(stderr, "ROL64 8 failed\n"); err++; } - if (ROL64(L64, 9 ) != CONST64(0x446688aaccef1022)) { fprintf(stderr, "ROL64 9 failed\n"); err++; } - if (ROL64(L64, 10) != CONST64(0x88cd115599de2044)) { fprintf(stderr, "ROL64 10 failed\n"); err++; } - if (ROL64(L64, 11) != CONST64(0x119a22ab33bc4089)) { fprintf(stderr, "ROL64 11 failed\n"); err++; } - if (ROL64(L64, 12) != CONST64(0x2334455667788112)) { fprintf(stderr, "ROL64 12 failed\n"); err++; } - if (ROL64(L64, 13) != CONST64(0x46688aaccef10224)) { fprintf(stderr, "ROL64 13 failed\n"); err++; } - if (ROL64(L64, 14) != CONST64(0x8cd115599de20448)) { fprintf(stderr, "ROL64 14 failed\n"); err++; } - if (ROL64(L64, 15) != CONST64(0x19a22ab33bc40891)) { fprintf(stderr, "ROL64 15 failed\n"); err++; } - if (ROL64(L64, 16) != CONST64(0x3344556677881122)) { fprintf(stderr, "ROL64 16 failed\n"); err++; } - if (ROL64(L64, 17) != CONST64(0x6688aaccef102244)) { fprintf(stderr, "ROL64 17 failed\n"); err++; } - if (ROL64(L64, 18) != CONST64(0xcd115599de204488)) { fprintf(stderr, "ROL64 18 failed\n"); err++; } - if (ROL64(L64, 19) != CONST64(0x9a22ab33bc408911)) { fprintf(stderr, "ROL64 19 failed\n"); err++; } - if (ROL64(L64, 20) != CONST64(0x3445566778811223)) { fprintf(stderr, "ROL64 20 failed\n"); err++; } - if (ROL64(L64, 21) != CONST64(0x688aaccef1022446)) { fprintf(stderr, "ROL64 21 failed\n"); err++; } - if (ROL64(L64, 22) != CONST64(0xd115599de204488c)) { fprintf(stderr, "ROL64 22 failed\n"); err++; } - if (ROL64(L64, 23) != CONST64(0xa22ab33bc4089119)) { fprintf(stderr, "ROL64 23 failed\n"); err++; } - if (ROL64(L64, 24) != CONST64(0x4455667788112233)) { fprintf(stderr, "ROL64 24 failed\n"); err++; } - if (ROL64(L64, 25) != CONST64(0x88aaccef10224466)) { fprintf(stderr, "ROL64 25 failed\n"); err++; } - if (ROL64(L64, 26) != CONST64(0x115599de204488cd)) { fprintf(stderr, "ROL64 26 failed\n"); err++; } - if (ROL64(L64, 27) != CONST64(0x22ab33bc4089119a)) { fprintf(stderr, "ROL64 27 failed\n"); err++; } - if (ROL64(L64, 28) != CONST64(0x4556677881122334)) { fprintf(stderr, "ROL64 28 failed\n"); err++; } - if (ROL64(L64, 29) != CONST64(0x8aaccef102244668)) { fprintf(stderr, "ROL64 29 failed\n"); err++; } - if (ROL64(L64, 30) != CONST64(0x15599de204488cd1)) { fprintf(stderr, "ROL64 30 failed\n"); err++; } - if (ROL64(L64, 31) != CONST64(0x2ab33bc4089119a2)) { fprintf(stderr, "ROL64 31 failed\n"); err++; } - if (ROL64(L64, 32) != CONST64(0x5566778811223344)) { fprintf(stderr, "ROL64 32 failed\n"); err++; } - if (ROL64(L64, 33) != CONST64(0xaaccef1022446688)) { fprintf(stderr, "ROL64 33 failed\n"); err++; } - if (ROL64(L64, 34) != CONST64(0x5599de204488cd11)) { fprintf(stderr, "ROL64 34 failed\n"); err++; } - if (ROL64(L64, 35) != CONST64(0xab33bc4089119a22)) { fprintf(stderr, "ROL64 35 failed\n"); err++; } - if (ROL64(L64, 36) != CONST64(0x5667788112233445)) { fprintf(stderr, "ROL64 36 failed\n"); err++; } - if (ROL64(L64, 37) != CONST64(0xaccef1022446688a)) { fprintf(stderr, "ROL64 37 failed\n"); err++; } - if (ROL64(L64, 38) != CONST64(0x599de204488cd115)) { fprintf(stderr, "ROL64 38 failed\n"); err++; } - if (ROL64(L64, 39) != CONST64(0xb33bc4089119a22a)) { fprintf(stderr, "ROL64 39 failed\n"); err++; } - if (ROL64(L64, 40) != CONST64(0x6677881122334455)) { fprintf(stderr, "ROL64 40 failed\n"); err++; } - if (ROL64(L64, 41) != CONST64(0xccef1022446688aa)) { fprintf(stderr, "ROL64 41 failed\n"); err++; } - if (ROL64(L64, 42) != CONST64(0x99de204488cd1155)) { fprintf(stderr, "ROL64 42 failed\n"); err++; } - if (ROL64(L64, 43) != CONST64(0x33bc4089119a22ab)) { fprintf(stderr, "ROL64 43 failed\n"); err++; } - if (ROL64(L64, 44) != CONST64(0x6778811223344556)) { fprintf(stderr, "ROL64 44 failed\n"); err++; } - if (ROL64(L64, 45) != CONST64(0xcef1022446688aac)) { fprintf(stderr, "ROL64 45 failed\n"); err++; } - if (ROL64(L64, 46) != CONST64(0x9de204488cd11559)) { fprintf(stderr, "ROL64 46 failed\n"); err++; } - if (ROL64(L64, 47) != CONST64(0x3bc4089119a22ab3)) { fprintf(stderr, "ROL64 47 failed\n"); err++; } - if (ROL64(L64, 48) != CONST64(0x7788112233445566)) { fprintf(stderr, "ROL64 48 failed\n"); err++; } - if (ROL64(L64, 49) != CONST64(0xef1022446688aacc)) { fprintf(stderr, "ROL64 49 failed\n"); err++; } - if (ROL64(L64, 50) != CONST64(0xde204488cd115599)) { fprintf(stderr, "ROL64 50 failed\n"); err++; } - if (ROL64(L64, 51) != CONST64(0xbc4089119a22ab33)) { fprintf(stderr, "ROL64 51 failed\n"); err++; } - if (ROL64(L64, 52) != CONST64(0x7881122334455667)) { fprintf(stderr, "ROL64 52 failed\n"); err++; } - if (ROL64(L64, 53) != CONST64(0xf1022446688aacce)) { fprintf(stderr, "ROL64 53 failed\n"); err++; } - if (ROL64(L64, 54) != CONST64(0xe204488cd115599d)) { fprintf(stderr, "ROL64 54 failed\n"); err++; } - if (ROL64(L64, 55) != CONST64(0xc4089119a22ab33b)) { fprintf(stderr, "ROL64 55 failed\n"); err++; } - if (ROL64(L64, 56) != CONST64(0x8811223344556677)) { fprintf(stderr, "ROL64 56 failed\n"); err++; } - if (ROL64(L64, 57) != CONST64(0x1022446688aaccef)) { fprintf(stderr, "ROL64 57 failed\n"); err++; } - if (ROL64(L64, 58) != CONST64(0x204488cd115599de)) { fprintf(stderr, "ROL64 58 failed\n"); err++; } - if (ROL64(L64, 59) != CONST64(0x4089119a22ab33bc)) { fprintf(stderr, "ROL64 59 failed\n"); err++; } - if (ROL64(L64, 60) != CONST64(0x8112233445566778)) { fprintf(stderr, "ROL64 60 failed\n"); err++; } - if (ROL64(L64, 61) != CONST64(0x022446688aaccef1)) { fprintf(stderr, "ROL64 61 failed\n"); err++; } - if (ROL64(L64, 62) != CONST64(0x04488cd115599de2)) { fprintf(stderr, "ROL64 62 failed\n"); err++; } - if (ROL64(L64, 63) != CONST64(0x089119a22ab33bc4)) { fprintf(stderr, "ROL64 63 failed\n"); err++; } - /* RORc */ - if (RORc(L32, 0 ) != 0x12345678UL) { fprintf(stderr, "RORc 0 failed\n"); err++; } - if (RORc(L32, 1 ) != 0x091a2b3cUL) { fprintf(stderr, "RORc 1 failed\n"); err++; } - if (RORc(L32, 2 ) != 0x048d159eUL) { fprintf(stderr, "RORc 2 failed\n"); err++; } - if (RORc(L32, 3 ) != 0x02468acfUL) { fprintf(stderr, "RORc 3 failed\n"); err++; } - if (RORc(L32, 4 ) != 0x81234567UL) { fprintf(stderr, "RORc 4 failed\n"); err++; } - if (RORc(L32, 5 ) != 0xc091a2b3UL) { fprintf(stderr, "RORc 5 failed\n"); err++; } - if (RORc(L32, 6 ) != 0xe048d159UL) { fprintf(stderr, "RORc 6 failed\n"); err++; } - if (RORc(L32, 7 ) != 0xf02468acUL) { fprintf(stderr, "RORc 7 failed\n"); err++; } - if (RORc(L32, 8 ) != 0x78123456UL) { fprintf(stderr, "RORc 8 failed\n"); err++; } - if (RORc(L32, 9 ) != 0x3c091a2bUL) { fprintf(stderr, "RORc 9 failed\n"); err++; } - if (RORc(L32, 10) != 0x9e048d15UL) { fprintf(stderr, "RORc 10 failed\n"); err++; } - if (RORc(L32, 11) != 0xcf02468aUL) { fprintf(stderr, "RORc 11 failed\n"); err++; } - if (RORc(L32, 12) != 0x67812345UL) { fprintf(stderr, "RORc 12 failed\n"); err++; } - if (RORc(L32, 13) != 0xb3c091a2UL) { fprintf(stderr, "RORc 13 failed\n"); err++; } - if (RORc(L32, 14) != 0x59e048d1UL) { fprintf(stderr, "RORc 14 failed\n"); err++; } - if (RORc(L32, 15) != 0xacf02468UL) { fprintf(stderr, "RORc 15 failed\n"); err++; } - if (RORc(L32, 16) != 0x56781234UL) { fprintf(stderr, "RORc 16 failed\n"); err++; } - if (RORc(L32, 17) != 0x2b3c091aUL) { fprintf(stderr, "RORc 17 failed\n"); err++; } - if (RORc(L32, 18) != 0x159e048dUL) { fprintf(stderr, "RORc 18 failed\n"); err++; } - if (RORc(L32, 19) != 0x8acf0246UL) { fprintf(stderr, "RORc 19 failed\n"); err++; } - if (RORc(L32, 20) != 0x45678123UL) { fprintf(stderr, "RORc 20 failed\n"); err++; } - if (RORc(L32, 21) != 0xa2b3c091UL) { fprintf(stderr, "RORc 21 failed\n"); err++; } - if (RORc(L32, 22) != 0xd159e048UL) { fprintf(stderr, "RORc 22 failed\n"); err++; } - if (RORc(L32, 23) != 0x68acf024UL) { fprintf(stderr, "RORc 23 failed\n"); err++; } - if (RORc(L32, 24) != 0x34567812UL) { fprintf(stderr, "RORc 24 failed\n"); err++; } - if (RORc(L32, 25) != 0x1a2b3c09UL) { fprintf(stderr, "RORc 25 failed\n"); err++; } - if (RORc(L32, 26) != 0x8d159e04UL) { fprintf(stderr, "RORc 26 failed\n"); err++; } - if (RORc(L32, 27) != 0x468acf02UL) { fprintf(stderr, "RORc 27 failed\n"); err++; } - if (RORc(L32, 28) != 0x23456781UL) { fprintf(stderr, "RORc 28 failed\n"); err++; } - if (RORc(L32, 29) != 0x91a2b3c0UL) { fprintf(stderr, "RORc 29 failed\n"); err++; } - if (RORc(L32, 30) != 0x48d159e0UL) { fprintf(stderr, "RORc 30 failed\n"); err++; } - if (RORc(L32, 31) != 0x2468acf0UL) { fprintf(stderr, "RORc 31 failed\n"); err++; } - /* ROR64c */ - if (ROR64c(L64, 0 ) != CONST64(0x1122334455667788)) { fprintf(stderr, "ROR64c 0 failed\n"); err++; } - if (ROR64c(L64, 1 ) != CONST64(0x089119a22ab33bc4)) { fprintf(stderr, "ROR64c 1 failed\n"); err++; } - if (ROR64c(L64, 2 ) != CONST64(0x04488cd115599de2)) { fprintf(stderr, "ROR64c 2 failed\n"); err++; } - if (ROR64c(L64, 3 ) != CONST64(0x022446688aaccef1)) { fprintf(stderr, "ROR64c 3 failed\n"); err++; } - if (ROR64c(L64, 4 ) != CONST64(0x8112233445566778)) { fprintf(stderr, "ROR64c 4 failed\n"); err++; } - if (ROR64c(L64, 5 ) != CONST64(0x4089119a22ab33bc)) { fprintf(stderr, "ROR64c 5 failed\n"); err++; } - if (ROR64c(L64, 6 ) != CONST64(0x204488cd115599de)) { fprintf(stderr, "ROR64c 6 failed\n"); err++; } - if (ROR64c(L64, 7 ) != CONST64(0x1022446688aaccef)) { fprintf(stderr, "ROR64c 7 failed\n"); err++; } - if (ROR64c(L64, 8 ) != CONST64(0x8811223344556677)) { fprintf(stderr, "ROR64c 8 failed\n"); err++; } - if (ROR64c(L64, 9 ) != CONST64(0xc4089119a22ab33b)) { fprintf(stderr, "ROR64c 9 failed\n"); err++; } - if (ROR64c(L64, 10) != CONST64(0xe204488cd115599d)) { fprintf(stderr, "ROR64c 10 failed\n"); err++; } - if (ROR64c(L64, 11) != CONST64(0xf1022446688aacce)) { fprintf(stderr, "ROR64c 11 failed\n"); err++; } - if (ROR64c(L64, 12) != CONST64(0x7881122334455667)) { fprintf(stderr, "ROR64c 12 failed\n"); err++; } - if (ROR64c(L64, 13) != CONST64(0xbc4089119a22ab33)) { fprintf(stderr, "ROR64c 13 failed\n"); err++; } - if (ROR64c(L64, 14) != CONST64(0xde204488cd115599)) { fprintf(stderr, "ROR64c 14 failed\n"); err++; } - if (ROR64c(L64, 15) != CONST64(0xef1022446688aacc)) { fprintf(stderr, "ROR64c 15 failed\n"); err++; } - if (ROR64c(L64, 16) != CONST64(0x7788112233445566)) { fprintf(stderr, "ROR64c 16 failed\n"); err++; } - if (ROR64c(L64, 17) != CONST64(0x3bc4089119a22ab3)) { fprintf(stderr, "ROR64c 17 failed\n"); err++; } - if (ROR64c(L64, 18) != CONST64(0x9de204488cd11559)) { fprintf(stderr, "ROR64c 18 failed\n"); err++; } - if (ROR64c(L64, 19) != CONST64(0xcef1022446688aac)) { fprintf(stderr, "ROR64c 19 failed\n"); err++; } - if (ROR64c(L64, 20) != CONST64(0x6778811223344556)) { fprintf(stderr, "ROR64c 20 failed\n"); err++; } - if (ROR64c(L64, 21) != CONST64(0x33bc4089119a22ab)) { fprintf(stderr, "ROR64c 21 failed\n"); err++; } - if (ROR64c(L64, 22) != CONST64(0x99de204488cd1155)) { fprintf(stderr, "ROR64c 22 failed\n"); err++; } - if (ROR64c(L64, 23) != CONST64(0xccef1022446688aa)) { fprintf(stderr, "ROR64c 23 failed\n"); err++; } - if (ROR64c(L64, 24) != CONST64(0x6677881122334455)) { fprintf(stderr, "ROR64c 24 failed\n"); err++; } - if (ROR64c(L64, 25) != CONST64(0xb33bc4089119a22a)) { fprintf(stderr, "ROR64c 25 failed\n"); err++; } - if (ROR64c(L64, 26) != CONST64(0x599de204488cd115)) { fprintf(stderr, "ROR64c 26 failed\n"); err++; } - if (ROR64c(L64, 27) != CONST64(0xaccef1022446688a)) { fprintf(stderr, "ROR64c 27 failed\n"); err++; } - if (ROR64c(L64, 28) != CONST64(0x5667788112233445)) { fprintf(stderr, "ROR64c 28 failed\n"); err++; } - if (ROR64c(L64, 29) != CONST64(0xab33bc4089119a22)) { fprintf(stderr, "ROR64c 29 failed\n"); err++; } - if (ROR64c(L64, 30) != CONST64(0x5599de204488cd11)) { fprintf(stderr, "ROR64c 30 failed\n"); err++; } - if (ROR64c(L64, 31) != CONST64(0xaaccef1022446688)) { fprintf(stderr, "ROR64c 31 failed\n"); err++; } - if (ROR64c(L64, 32) != CONST64(0x5566778811223344)) { fprintf(stderr, "ROR64c 32 failed\n"); err++; } - if (ROR64c(L64, 33) != CONST64(0x2ab33bc4089119a2)) { fprintf(stderr, "ROR64c 33 failed\n"); err++; } - if (ROR64c(L64, 34) != CONST64(0x15599de204488cd1)) { fprintf(stderr, "ROR64c 34 failed\n"); err++; } - if (ROR64c(L64, 35) != CONST64(0x8aaccef102244668)) { fprintf(stderr, "ROR64c 35 failed\n"); err++; } - if (ROR64c(L64, 36) != CONST64(0x4556677881122334)) { fprintf(stderr, "ROR64c 36 failed\n"); err++; } - if (ROR64c(L64, 37) != CONST64(0x22ab33bc4089119a)) { fprintf(stderr, "ROR64c 37 failed\n"); err++; } - if (ROR64c(L64, 38) != CONST64(0x115599de204488cd)) { fprintf(stderr, "ROR64c 38 failed\n"); err++; } - if (ROR64c(L64, 39) != CONST64(0x88aaccef10224466)) { fprintf(stderr, "ROR64c 39 failed\n"); err++; } - if (ROR64c(L64, 40) != CONST64(0x4455667788112233)) { fprintf(stderr, "ROR64c 40 failed\n"); err++; } - if (ROR64c(L64, 41) != CONST64(0xa22ab33bc4089119)) { fprintf(stderr, "ROR64c 41 failed\n"); err++; } - if (ROR64c(L64, 42) != CONST64(0xd115599de204488c)) { fprintf(stderr, "ROR64c 42 failed\n"); err++; } - if (ROR64c(L64, 43) != CONST64(0x688aaccef1022446)) { fprintf(stderr, "ROR64c 43 failed\n"); err++; } - if (ROR64c(L64, 44) != CONST64(0x3445566778811223)) { fprintf(stderr, "ROR64c 44 failed\n"); err++; } - if (ROR64c(L64, 45) != CONST64(0x9a22ab33bc408911)) { fprintf(stderr, "ROR64c 45 failed\n"); err++; } - if (ROR64c(L64, 46) != CONST64(0xcd115599de204488)) { fprintf(stderr, "ROR64c 46 failed\n"); err++; } - if (ROR64c(L64, 47) != CONST64(0x6688aaccef102244)) { fprintf(stderr, "ROR64c 47 failed\n"); err++; } - if (ROR64c(L64, 48) != CONST64(0x3344556677881122)) { fprintf(stderr, "ROR64c 48 failed\n"); err++; } - if (ROR64c(L64, 49) != CONST64(0x19a22ab33bc40891)) { fprintf(stderr, "ROR64c 49 failed\n"); err++; } - if (ROR64c(L64, 50) != CONST64(0x8cd115599de20448)) { fprintf(stderr, "ROR64c 50 failed\n"); err++; } - if (ROR64c(L64, 51) != CONST64(0x46688aaccef10224)) { fprintf(stderr, "ROR64c 51 failed\n"); err++; } - if (ROR64c(L64, 52) != CONST64(0x2334455667788112)) { fprintf(stderr, "ROR64c 52 failed\n"); err++; } - if (ROR64c(L64, 53) != CONST64(0x119a22ab33bc4089)) { fprintf(stderr, "ROR64c 53 failed\n"); err++; } - if (ROR64c(L64, 54) != CONST64(0x88cd115599de2044)) { fprintf(stderr, "ROR64c 54 failed\n"); err++; } - if (ROR64c(L64, 55) != CONST64(0x446688aaccef1022)) { fprintf(stderr, "ROR64c 55 failed\n"); err++; } - if (ROR64c(L64, 56) != CONST64(0x2233445566778811)) { fprintf(stderr, "ROR64c 56 failed\n"); err++; } - if (ROR64c(L64, 57) != CONST64(0x9119a22ab33bc408)) { fprintf(stderr, "ROR64c 57 failed\n"); err++; } - if (ROR64c(L64, 58) != CONST64(0x488cd115599de204)) { fprintf(stderr, "ROR64c 58 failed\n"); err++; } - if (ROR64c(L64, 59) != CONST64(0x2446688aaccef102)) { fprintf(stderr, "ROR64c 59 failed\n"); err++; } - if (ROR64c(L64, 60) != CONST64(0x1223344556677881)) { fprintf(stderr, "ROR64c 60 failed\n"); err++; } - if (ROR64c(L64, 61) != CONST64(0x89119a22ab33bc40)) { fprintf(stderr, "ROR64c 61 failed\n"); err++; } - if (ROR64c(L64, 62) != CONST64(0x4488cd115599de20)) { fprintf(stderr, "ROR64c 62 failed\n"); err++; } - if (ROR64c(L64, 63) != CONST64(0x22446688aaccef10)) { fprintf(stderr, "ROR64c 63 failed\n"); err++; } - /* ROLc */ - if (ROLc(L32, 0 ) != 0x12345678UL) { fprintf(stderr, "ROLc 0 failed\n"); err++; } - if (ROLc(L32, 1 ) != 0x2468acf0UL) { fprintf(stderr, "ROLc 1 failed\n"); err++; } - if (ROLc(L32, 2 ) != 0x48d159e0UL) { fprintf(stderr, "ROLc 2 failed\n"); err++; } - if (ROLc(L32, 3 ) != 0x91a2b3c0UL) { fprintf(stderr, "ROLc 3 failed\n"); err++; } - if (ROLc(L32, 4 ) != 0x23456781UL) { fprintf(stderr, "ROLc 4 failed\n"); err++; } - if (ROLc(L32, 5 ) != 0x468acf02UL) { fprintf(stderr, "ROLc 5 failed\n"); err++; } - if (ROLc(L32, 6 ) != 0x8d159e04UL) { fprintf(stderr, "ROLc 6 failed\n"); err++; } - if (ROLc(L32, 7 ) != 0x1a2b3c09UL) { fprintf(stderr, "ROLc 7 failed\n"); err++; } - if (ROLc(L32, 8 ) != 0x34567812UL) { fprintf(stderr, "ROLc 8 failed\n"); err++; } - if (ROLc(L32, 9 ) != 0x68acf024UL) { fprintf(stderr, "ROLc 9 failed\n"); err++; } - if (ROLc(L32, 10) != 0xd159e048UL) { fprintf(stderr, "ROLc 10 failed\n"); err++; } - if (ROLc(L32, 11) != 0xa2b3c091UL) { fprintf(stderr, "ROLc 11 failed\n"); err++; } - if (ROLc(L32, 12) != 0x45678123UL) { fprintf(stderr, "ROLc 12 failed\n"); err++; } - if (ROLc(L32, 13) != 0x8acf0246UL) { fprintf(stderr, "ROLc 13 failed\n"); err++; } - if (ROLc(L32, 14) != 0x159e048dUL) { fprintf(stderr, "ROLc 14 failed\n"); err++; } - if (ROLc(L32, 15) != 0x2b3c091aUL) { fprintf(stderr, "ROLc 15 failed\n"); err++; } - if (ROLc(L32, 16) != 0x56781234UL) { fprintf(stderr, "ROLc 16 failed\n"); err++; } - if (ROLc(L32, 17) != 0xacf02468UL) { fprintf(stderr, "ROLc 17 failed\n"); err++; } - if (ROLc(L32, 18) != 0x59e048d1UL) { fprintf(stderr, "ROLc 18 failed\n"); err++; } - if (ROLc(L32, 19) != 0xb3c091a2UL) { fprintf(stderr, "ROLc 19 failed\n"); err++; } - if (ROLc(L32, 20) != 0x67812345UL) { fprintf(stderr, "ROLc 20 failed\n"); err++; } - if (ROLc(L32, 21) != 0xcf02468aUL) { fprintf(stderr, "ROLc 21 failed\n"); err++; } - if (ROLc(L32, 22) != 0x9e048d15UL) { fprintf(stderr, "ROLc 22 failed\n"); err++; } - if (ROLc(L32, 23) != 0x3c091a2bUL) { fprintf(stderr, "ROLc 23 failed\n"); err++; } - if (ROLc(L32, 24) != 0x78123456UL) { fprintf(stderr, "ROLc 24 failed\n"); err++; } - if (ROLc(L32, 25) != 0xf02468acUL) { fprintf(stderr, "ROLc 25 failed\n"); err++; } - if (ROLc(L32, 26) != 0xe048d159UL) { fprintf(stderr, "ROLc 26 failed\n"); err++; } - if (ROLc(L32, 27) != 0xc091a2b3UL) { fprintf(stderr, "ROLc 27 failed\n"); err++; } - if (ROLc(L32, 28) != 0x81234567UL) { fprintf(stderr, "ROLc 28 failed\n"); err++; } - if (ROLc(L32, 29) != 0x02468acfUL) { fprintf(stderr, "ROLc 29 failed\n"); err++; } - if (ROLc(L32, 30) != 0x048d159eUL) { fprintf(stderr, "ROLc 30 failed\n"); err++; } - if (ROLc(L32, 31) != 0x091a2b3cUL) { fprintf(stderr, "ROLc 31 failed\n"); err++; } - /* ROL64c */ - if (ROL64c(L64, 0 ) != CONST64(0x1122334455667788)) { fprintf(stderr, "ROL64c 0 failed\n"); err++; } - if (ROL64c(L64, 1 ) != CONST64(0x22446688aaccef10)) { fprintf(stderr, "ROL64c 1 failed\n"); err++; } - if (ROL64c(L64, 2 ) != CONST64(0x4488cd115599de20)) { fprintf(stderr, "ROL64c 2 failed\n"); err++; } - if (ROL64c(L64, 3 ) != CONST64(0x89119a22ab33bc40)) { fprintf(stderr, "ROL64c 3 failed\n"); err++; } - if (ROL64c(L64, 4 ) != CONST64(0x1223344556677881)) { fprintf(stderr, "ROL64c 4 failed\n"); err++; } - if (ROL64c(L64, 5 ) != CONST64(0x2446688aaccef102)) { fprintf(stderr, "ROL64c 5 failed\n"); err++; } - if (ROL64c(L64, 6 ) != CONST64(0x488cd115599de204)) { fprintf(stderr, "ROL64c 6 failed\n"); err++; } - if (ROL64c(L64, 7 ) != CONST64(0x9119a22ab33bc408)) { fprintf(stderr, "ROL64c 7 failed\n"); err++; } - if (ROL64c(L64, 8 ) != CONST64(0x2233445566778811)) { fprintf(stderr, "ROL64c 8 failed\n"); err++; } - if (ROL64c(L64, 9 ) != CONST64(0x446688aaccef1022)) { fprintf(stderr, "ROL64c 9 failed\n"); err++; } - if (ROL64c(L64, 10) != CONST64(0x88cd115599de2044)) { fprintf(stderr, "ROL64c 10 failed\n"); err++; } - if (ROL64c(L64, 11) != CONST64(0x119a22ab33bc4089)) { fprintf(stderr, "ROL64c 11 failed\n"); err++; } - if (ROL64c(L64, 12) != CONST64(0x2334455667788112)) { fprintf(stderr, "ROL64c 12 failed\n"); err++; } - if (ROL64c(L64, 13) != CONST64(0x46688aaccef10224)) { fprintf(stderr, "ROL64c 13 failed\n"); err++; } - if (ROL64c(L64, 14) != CONST64(0x8cd115599de20448)) { fprintf(stderr, "ROL64c 14 failed\n"); err++; } - if (ROL64c(L64, 15) != CONST64(0x19a22ab33bc40891)) { fprintf(stderr, "ROL64c 15 failed\n"); err++; } - if (ROL64c(L64, 16) != CONST64(0x3344556677881122)) { fprintf(stderr, "ROL64c 16 failed\n"); err++; } - if (ROL64c(L64, 17) != CONST64(0x6688aaccef102244)) { fprintf(stderr, "ROL64c 17 failed\n"); err++; } - if (ROL64c(L64, 18) != CONST64(0xcd115599de204488)) { fprintf(stderr, "ROL64c 18 failed\n"); err++; } - if (ROL64c(L64, 19) != CONST64(0x9a22ab33bc408911)) { fprintf(stderr, "ROL64c 19 failed\n"); err++; } - if (ROL64c(L64, 20) != CONST64(0x3445566778811223)) { fprintf(stderr, "ROL64c 20 failed\n"); err++; } - if (ROL64c(L64, 21) != CONST64(0x688aaccef1022446)) { fprintf(stderr, "ROL64c 21 failed\n"); err++; } - if (ROL64c(L64, 22) != CONST64(0xd115599de204488c)) { fprintf(stderr, "ROL64c 22 failed\n"); err++; } - if (ROL64c(L64, 23) != CONST64(0xa22ab33bc4089119)) { fprintf(stderr, "ROL64c 23 failed\n"); err++; } - if (ROL64c(L64, 24) != CONST64(0x4455667788112233)) { fprintf(stderr, "ROL64c 24 failed\n"); err++; } - if (ROL64c(L64, 25) != CONST64(0x88aaccef10224466)) { fprintf(stderr, "ROL64c 25 failed\n"); err++; } - if (ROL64c(L64, 26) != CONST64(0x115599de204488cd)) { fprintf(stderr, "ROL64c 26 failed\n"); err++; } - if (ROL64c(L64, 27) != CONST64(0x22ab33bc4089119a)) { fprintf(stderr, "ROL64c 27 failed\n"); err++; } - if (ROL64c(L64, 28) != CONST64(0x4556677881122334)) { fprintf(stderr, "ROL64c 28 failed\n"); err++; } - if (ROL64c(L64, 29) != CONST64(0x8aaccef102244668)) { fprintf(stderr, "ROL64c 29 failed\n"); err++; } - if (ROL64c(L64, 30) != CONST64(0x15599de204488cd1)) { fprintf(stderr, "ROL64c 30 failed\n"); err++; } - if (ROL64c(L64, 31) != CONST64(0x2ab33bc4089119a2)) { fprintf(stderr, "ROL64c 31 failed\n"); err++; } - if (ROL64c(L64, 32) != CONST64(0x5566778811223344)) { fprintf(stderr, "ROL64c 32 failed\n"); err++; } - if (ROL64c(L64, 33) != CONST64(0xaaccef1022446688)) { fprintf(stderr, "ROL64c 33 failed\n"); err++; } - if (ROL64c(L64, 34) != CONST64(0x5599de204488cd11)) { fprintf(stderr, "ROL64c 34 failed\n"); err++; } - if (ROL64c(L64, 35) != CONST64(0xab33bc4089119a22)) { fprintf(stderr, "ROL64c 35 failed\n"); err++; } - if (ROL64c(L64, 36) != CONST64(0x5667788112233445)) { fprintf(stderr, "ROL64c 36 failed\n"); err++; } - if (ROL64c(L64, 37) != CONST64(0xaccef1022446688a)) { fprintf(stderr, "ROL64c 37 failed\n"); err++; } - if (ROL64c(L64, 38) != CONST64(0x599de204488cd115)) { fprintf(stderr, "ROL64c 38 failed\n"); err++; } - if (ROL64c(L64, 39) != CONST64(0xb33bc4089119a22a)) { fprintf(stderr, "ROL64c 39 failed\n"); err++; } - if (ROL64c(L64, 40) != CONST64(0x6677881122334455)) { fprintf(stderr, "ROL64c 40 failed\n"); err++; } - if (ROL64c(L64, 41) != CONST64(0xccef1022446688aa)) { fprintf(stderr, "ROL64c 41 failed\n"); err++; } - if (ROL64c(L64, 42) != CONST64(0x99de204488cd1155)) { fprintf(stderr, "ROL64c 42 failed\n"); err++; } - if (ROL64c(L64, 43) != CONST64(0x33bc4089119a22ab)) { fprintf(stderr, "ROL64c 43 failed\n"); err++; } - if (ROL64c(L64, 44) != CONST64(0x6778811223344556)) { fprintf(stderr, "ROL64c 44 failed\n"); err++; } - if (ROL64c(L64, 45) != CONST64(0xcef1022446688aac)) { fprintf(stderr, "ROL64c 45 failed\n"); err++; } - if (ROL64c(L64, 46) != CONST64(0x9de204488cd11559)) { fprintf(stderr, "ROL64c 46 failed\n"); err++; } - if (ROL64c(L64, 47) != CONST64(0x3bc4089119a22ab3)) { fprintf(stderr, "ROL64c 47 failed\n"); err++; } - if (ROL64c(L64, 48) != CONST64(0x7788112233445566)) { fprintf(stderr, "ROL64c 48 failed\n"); err++; } - if (ROL64c(L64, 49) != CONST64(0xef1022446688aacc)) { fprintf(stderr, "ROL64c 49 failed\n"); err++; } - if (ROL64c(L64, 50) != CONST64(0xde204488cd115599)) { fprintf(stderr, "ROL64c 50 failed\n"); err++; } - if (ROL64c(L64, 51) != CONST64(0xbc4089119a22ab33)) { fprintf(stderr, "ROL64c 51 failed\n"); err++; } - if (ROL64c(L64, 52) != CONST64(0x7881122334455667)) { fprintf(stderr, "ROL64c 52 failed\n"); err++; } - if (ROL64c(L64, 53) != CONST64(0xf1022446688aacce)) { fprintf(stderr, "ROL64c 53 failed\n"); err++; } - if (ROL64c(L64, 54) != CONST64(0xe204488cd115599d)) { fprintf(stderr, "ROL64c 54 failed\n"); err++; } - if (ROL64c(L64, 55) != CONST64(0xc4089119a22ab33b)) { fprintf(stderr, "ROL64c 55 failed\n"); err++; } - if (ROL64c(L64, 56) != CONST64(0x8811223344556677)) { fprintf(stderr, "ROL64c 56 failed\n"); err++; } - if (ROL64c(L64, 57) != CONST64(0x1022446688aaccef)) { fprintf(stderr, "ROL64c 57 failed\n"); err++; } - if (ROL64c(L64, 58) != CONST64(0x204488cd115599de)) { fprintf(stderr, "ROL64c 58 failed\n"); err++; } - if (ROL64c(L64, 59) != CONST64(0x4089119a22ab33bc)) { fprintf(stderr, "ROL64c 59 failed\n"); err++; } - if (ROL64c(L64, 60) != CONST64(0x8112233445566778)) { fprintf(stderr, "ROL64c 60 failed\n"); err++; } - if (ROL64c(L64, 61) != CONST64(0x022446688aaccef1)) { fprintf(stderr, "ROL64c 61 failed\n"); err++; } - if (ROL64c(L64, 62) != CONST64(0x04488cd115599de2)) { fprintf(stderr, "ROL64c 62 failed\n"); err++; } - if (ROL64c(L64, 63) != CONST64(0x089119a22ab33bc4)) { fprintf(stderr, "ROL64c 63 failed\n"); err++; } - - return err; -} diff --git a/tests/rsa-pkcs8/README.txt b/tests/rsa-pkcs8/README.txt deleted file mode 100644 index b70cc161..00000000 --- a/tests/rsa-pkcs8/README.txt +++ /dev/null @@ -1,33 +0,0 @@ -# pkcs8 without password -openssl pkcs8 -topk8 -inform PEM -outform DER -nocrypt -in ../test.key -out key_pkcs8.der - -# password protected - PBES1 -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v1 PBE-MD2-RC2-64 -out key_pkcs8_pbe_md2_rc2_64.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v1 PBE-MD2-DES -out key_pkcs8_pbe_md2_des.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v1 PBE-MD5-DES -out key_pkcs8_pbe_md5_des.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v1 PBE-SHA1-RC2-64 -out key_pkcs8_pbe_sha1_rc2_64.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v1 PBE-MD5-RC2-64 -out key_pkcs8_pbe_md5_rc2_64.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v1 PBE-SHA1-DES -out key_pkcs8_pbe_sha1_des.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v1 PBE-SHA1-3DES -out key_pkcs8_pbe_sha1_3des.der - -# password protected - PBES2 -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 rc2 -out key_pkcs8_pbkdf2_rc2_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 des -out key_pkcs8_pbkdf2_des_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 des3 -out key_pkcs8_pbkdf2_des_ede3_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 des3 -v2prf hmacWithSHA224 -out key_pkcs8_pbkdf2_sha224_des_ede3_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 des3 -v2prf hmacWithSHA256 -out key_pkcs8_pbkdf2_sha256_des_ede3_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 des3 -v2prf hmacWithSHA384 -out key_pkcs8_pbkdf2_sha384_des_ede3_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 des3 -v2prf hmacWithSHA512 -out key_pkcs8_pbkdf2_sha512_des_ede3_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 aes128 -v2prf hmacWithSHA512 -out key_pkcs8_pbkdf2_sha512_aes128_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 aes192 -v2prf hmacWithSHA512 -out key_pkcs8_pbkdf2_sha512_aes192_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 aes256 -v2prf hmacWithSHA512 -out key_pkcs8_pbkdf2_sha512_aes256_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 aes256 -v2prf hmacWithSHA512-224 -out key_pkcs8_pbkdf2_sha512_224_aes256_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 aes256 -v2prf hmacWithSHA512-256 -out key_pkcs8_pbkdf2_sha512_256_aes256_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 rc2-40 -v2prf hmacWithSHA512 -out key_pkcs8_pbkdf2_sha512_rc2_40_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 rc2-40 -v2prf hmacWithSHA512-256 -out key_pkcs8_pbkdf2_sha512_256_rc2_40_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 rc2-64 -v2prf hmacWithSHA512 -out key_pkcs8_pbkdf2_sha512_rc2_64_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 rc2-64 -v2prf hmacWithSHA512-256 -out key_pkcs8_pbkdf2_sha512_256_rc2_64_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 aes256 -v2prf id-hmacWithSHA3-224 -out key_pkcs8_pbkdf2_sha3_224_aes256_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 aes256 -v2prf id-hmacWithSHA3-256 -out key_pkcs8_pbkdf2_sha3_256_aes256_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 aes256 -v2prf id-hmacWithSHA3-384 -out key_pkcs8_pbkdf2_sha3_384_aes256_cbc.der -openssl pkcs8 -topk8 -inform PEM -outform DER -passout pass:secret -in ../test.key -v2 aes256 -v2prf id-hmacWithSHA3-512 -out key_pkcs8_pbkdf2_sha3_512_aes256_cbc.der diff --git a/tests/rsa-pkcs8/key_pkcs8.der b/tests/rsa-pkcs8/key_pkcs8.der deleted file mode 100644 index b8e02356..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbe_sha1_3des.der b/tests/rsa-pkcs8/key_pkcs8_pbe_sha1_3des.der deleted file mode 100644 index dfe01b9e..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbe_sha1_3des.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbe_sha1_des.der b/tests/rsa-pkcs8/key_pkcs8_pbe_sha1_des.der deleted file mode 100644 index 07c1e03e..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbe_sha1_des.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_des_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_des_cbc.der deleted file mode 100644 index f00879e4..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_des_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_des_ede3_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_des_ede3_cbc.der deleted file mode 100644 index 825e4bb6..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_des_ede3_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha224_des_ede3_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha224_des_ede3_cbc.der deleted file mode 100644 index a94765aa..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha224_des_ede3_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha256_des_ede3_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha256_des_ede3_cbc.der deleted file mode 100644 index 7e4a159c..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha256_des_ede3_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha384_des_ede3_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha384_des_ede3_cbc.der deleted file mode 100644 index 0ae0ea4c..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha384_des_ede3_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha3_224_aes256_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha3_224_aes256_cbc.der deleted file mode 100644 index d5d5b45f..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha3_224_aes256_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha3_256_aes256_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha3_256_aes256_cbc.der deleted file mode 100644 index c518e733..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha3_256_aes256_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha3_384_aes256_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha3_384_aes256_cbc.der deleted file mode 100644 index d5866743..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha3_384_aes256_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha3_512_aes256_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha3_512_aes256_cbc.der deleted file mode 100644 index 1aec2c97..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha3_512_aes256_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_224_aes256_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_224_aes256_cbc.der deleted file mode 100644 index 62375171..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_224_aes256_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_256_aes256_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_256_aes256_cbc.der deleted file mode 100644 index 13ff7ab3..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_256_aes256_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_aes128_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_aes128_cbc.der deleted file mode 100644 index 9747770f..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_aes128_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_aes192_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_aes192_cbc.der deleted file mode 100644 index 118fb725..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_aes192_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_aes256_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_aes256_cbc.der deleted file mode 100644 index 2a494ba5..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_aes256_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_des_ede3_cbc.der b/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_des_ede3_cbc.der deleted file mode 100644 index d88b6bd4..00000000 Binary files a/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_des_ede3_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/old/key_pkcs8_pbe_md2_des.der b/tests/rsa-pkcs8/old/key_pkcs8_pbe_md2_des.der deleted file mode 100644 index f4246011..00000000 Binary files a/tests/rsa-pkcs8/old/key_pkcs8_pbe_md2_des.der and /dev/null differ diff --git a/tests/rsa-pkcs8/old/key_pkcs8_pbe_md2_rc2_64.der b/tests/rsa-pkcs8/old/key_pkcs8_pbe_md2_rc2_64.der deleted file mode 100644 index 4471fa2f..00000000 Binary files a/tests/rsa-pkcs8/old/key_pkcs8_pbe_md2_rc2_64.der and /dev/null differ diff --git a/tests/rsa-pkcs8/old/key_pkcs8_pbe_md5_des.der b/tests/rsa-pkcs8/old/key_pkcs8_pbe_md5_des.der deleted file mode 100644 index ef70b424..00000000 Binary files a/tests/rsa-pkcs8/old/key_pkcs8_pbe_md5_des.der and /dev/null differ diff --git a/tests/rsa-pkcs8/old/key_pkcs8_pbe_md5_rc2_64.der b/tests/rsa-pkcs8/old/key_pkcs8_pbe_md5_rc2_64.der deleted file mode 100644 index 073f79eb..00000000 Binary files a/tests/rsa-pkcs8/old/key_pkcs8_pbe_md5_rc2_64.der and /dev/null differ diff --git a/tests/rsa-pkcs8/old/key_pkcs8_pbe_sha1_rc2_64.der b/tests/rsa-pkcs8/old/key_pkcs8_pbe_sha1_rc2_64.der deleted file mode 100644 index a644d3b4..00000000 Binary files a/tests/rsa-pkcs8/old/key_pkcs8_pbe_sha1_rc2_64.der and /dev/null differ diff --git a/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_rc2_cbc.der b/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_rc2_cbc.der deleted file mode 100644 index d71aa789..00000000 Binary files a/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_rc2_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_sha512_256_rc2_40_cbc.der b/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_sha512_256_rc2_40_cbc.der deleted file mode 100644 index 232cbba5..00000000 Binary files a/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_sha512_256_rc2_40_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_sha512_256_rc2_64_cbc.der b/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_sha512_256_rc2_64_cbc.der deleted file mode 100644 index 84d25b18..00000000 Binary files a/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_sha512_256_rc2_64_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_sha512_rc2_40_cbc.der b/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_sha512_rc2_40_cbc.der deleted file mode 100644 index 61190896..00000000 Binary files a/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_sha512_rc2_40_cbc.der and /dev/null differ diff --git a/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_sha512_rc2_64_cbc.der b/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_sha512_rc2_64_cbc.der deleted file mode 100644 index 9fd937f8..00000000 Binary files a/tests/rsa-pkcs8/old/key_pkcs8_pbkdf2_sha512_rc2_64_cbc.der and /dev/null differ diff --git a/tests/rsa/rsa_size_1024_bits.der b/tests/rsa/rsa_size_1024_bits.der deleted file mode 100644 index 63d05732..00000000 Binary files a/tests/rsa/rsa_size_1024_bits.der and /dev/null differ diff --git a/tests/rsa/rsa_size_16384_bits.der b/tests/rsa/rsa_size_16384_bits.der deleted file mode 100644 index 71e64e5c..00000000 Binary files a/tests/rsa/rsa_size_16384_bits.der and /dev/null differ diff --git a/tests/rsa/rsa_size_1999_bits.der b/tests/rsa/rsa_size_1999_bits.der deleted file mode 100644 index d2af9922..00000000 Binary files a/tests/rsa/rsa_size_1999_bits.der and /dev/null differ diff --git a/tests/rsa/rsa_size_2048_bits.der b/tests/rsa/rsa_size_2048_bits.der deleted file mode 100644 index 7aaf8050..00000000 Binary files a/tests/rsa/rsa_size_2048_bits.der and /dev/null differ diff --git a/tests/rsa/rsa_size_4096_bits.der b/tests/rsa/rsa_size_4096_bits.der deleted file mode 100644 index 2e3cc164..00000000 Binary files a/tests/rsa/rsa_size_4096_bits.der and /dev/null differ diff --git a/tests/rsa/rsa_size_512_bits.der b/tests/rsa/rsa_size_512_bits.der deleted file mode 100644 index 1fe69549..00000000 Binary files a/tests/rsa/rsa_size_512_bits.der and /dev/null differ diff --git a/tests/rsa/rsa_size_8192_bits.der b/tests/rsa/rsa_size_8192_bits.der deleted file mode 100644 index faba635d..00000000 Binary files a/tests/rsa/rsa_size_8192_bits.der and /dev/null differ diff --git a/tests/rsa_test.c b/tests/rsa_test.c deleted file mode 100644 index 45a3aca8..00000000 --- a/tests/rsa_test.c +++ /dev/null @@ -1,926 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#if defined(LTC_MRSA) -#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1 -#include -#define dbg_malloc_stats() do{ malloc_stats(); }while(0) -#else -#define dbg_malloc_stats() do{ }while(0) -#endif - -/* These are test keys [see file test.key] that I use to test my import/export against */ -const unsigned char ltc_rsa_private_test_key[] = { - 0x30, 0x82, 0x02, 0x5e, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xcf, 0x9a, 0xde, 0x64, 0x8a, - 0xda, 0xc8, 0x33, 0x20, 0xa9, 0xd7, 0x83, 0x31, 0x19, 0x54, 0xb2, 0x9a, 0x85, 0xa7, 0xa1, 0xb7, - 0x75, 0x33, 0xb6, 0xa9, 0xac, 0x84, 0x24, 0xb3, 0xde, 0xdb, 0x7d, 0x85, 0x2d, 0x96, 0x65, 0xe5, - 0x3f, 0x72, 0x95, 0x24, 0x9f, 0x28, 0x68, 0xca, 0x4f, 0xdb, 0x44, 0x1c, 0x3e, 0x60, 0x12, 0x8a, - 0xdd, 0x26, 0xa5, 0xeb, 0xff, 0x0b, 0x5e, 0xd4, 0x88, 0x38, 0x49, 0x2a, 0x6e, 0x5b, 0xbf, 0x12, - 0x37, 0x47, 0xbd, 0x05, 0x6b, 0xbc, 0xdb, 0xf3, 0xee, 0xe4, 0x11, 0x8e, 0x41, 0x68, 0x7c, 0x61, - 0x13, 0xd7, 0x42, 0xc8, 0x80, 0xbe, 0x36, 0x8f, 0xdc, 0x08, 0x8b, 0x4f, 0xac, 0xa4, 0xe2, 0x76, - 0x0c, 0xc9, 0x63, 0x6c, 0x49, 0x58, 0x93, 0xed, 0xcc, 0xaa, 0xdc, 0x25, 0x3b, 0x0a, 0x60, 0x3f, - 0x8b, 0x54, 0x3a, 0xc3, 0x4d, 0x31, 0xe7, 0x94, 0xa4, 0x44, 0xfd, 0x02, 0x03, 0x01, 0x00, 0x01, - 0x02, 0x81, 0x81, 0x00, 0xc8, 0x62, 0xb9, 0xea, 0xde, 0x44, 0x53, 0x1d, 0x56, 0x97, 0xd9, 0x97, - 0x9e, 0x1a, 0xcf, 0x30, 0x1e, 0x0a, 0x88, 0x45, 0x86, 0x29, 0x30, 0xa3, 0x4d, 0x9f, 0x61, 0x65, - 0x73, 0xe0, 0xd6, 0x87, 0x8f, 0xb6, 0xf3, 0x06, 0xa3, 0x82, 0xdc, 0x7c, 0xac, 0xfe, 0x9b, 0x28, - 0x9a, 0xae, 0xfd, 0xfb, 0xfe, 0x2f, 0x0e, 0xd8, 0x97, 0x04, 0xe3, 0xbb, 0x1f, 0xd1, 0xec, 0x0d, - 0xba, 0xa3, 0x49, 0x7f, 0x47, 0xac, 0x8a, 0x44, 0x04, 0x7e, 0x86, 0xb7, 0x39, 0x42, 0x3f, 0xad, - 0x1e, 0xb7, 0x0e, 0xa5, 0x51, 0xf4, 0x40, 0x63, 0x1e, 0xfd, 0xbd, 0xea, 0x9f, 0x41, 0x9f, 0xa8, - 0x90, 0x1d, 0x6f, 0x0a, 0x5a, 0x95, 0x13, 0x11, 0x0d, 0x80, 0xaf, 0x5f, 0x64, 0x98, 0x8a, 0x2c, - 0x78, 0x68, 0x65, 0xb0, 0x2b, 0x8b, 0xa2, 0x53, 0x87, 0xca, 0xf1, 0x64, 0x04, 0xab, 0xf2, 0x7b, - 0xdb, 0x83, 0xc8, 0x81, 0x02, 0x41, 0x00, 0xf7, 0xbe, 0x5e, 0x23, 0xc3, 0x32, 0x3f, 0xbf, 0x8b, - 0x8e, 0x3a, 0xee, 0xfc, 0xfc, 0xcb, 0xe5, 0xf7, 0xf1, 0x0b, 0xbc, 0x42, 0x82, 0xae, 0xd5, 0x7a, - 0x3e, 0xca, 0xf7, 0xd5, 0x69, 0x3f, 0x64, 0x25, 0xa2, 0x1f, 0xb7, 0x75, 0x75, 0x05, 0x92, 0x42, - 0xeb, 0xb8, 0xf1, 0xf3, 0x0a, 0x05, 0xe3, 0x94, 0xd1, 0x55, 0x78, 0x35, 0xa0, 0x36, 0xa0, 0x9b, - 0x7c, 0x92, 0x84, 0x6c, 0xdd, 0xdc, 0x4d, 0x02, 0x41, 0x00, 0xd6, 0x86, 0x0e, 0x85, 0x42, 0x0b, - 0x04, 0x08, 0x84, 0x21, 0x60, 0xf0, 0x0e, 0x0d, 0x88, 0xfd, 0x1e, 0x36, 0x10, 0x65, 0x4f, 0x1e, - 0x53, 0xb4, 0x08, 0x72, 0x80, 0x5c, 0x3f, 0x59, 0x66, 0x17, 0xe6, 0x98, 0xf2, 0xe9, 0x6c, 0x7a, - 0x06, 0x4c, 0xac, 0x76, 0x3d, 0xed, 0x8c, 0xa1, 0xce, 0xad, 0x1b, 0xbd, 0xb4, 0x7d, 0x28, 0xbc, - 0xe3, 0x0e, 0x38, 0x8d, 0x99, 0xd8, 0x05, 0xb5, 0xa3, 0x71, 0x02, 0x40, 0x6d, 0xeb, 0xc3, 0x2d, - 0x2e, 0xf0, 0x5e, 0xa4, 0x88, 0x31, 0x05, 0x29, 0x00, 0x8a, 0xd1, 0x95, 0x29, 0x9b, 0x83, 0xcf, - 0x75, 0xdb, 0x31, 0xe3, 0x7a, 0x27, 0xde, 0x3a, 0x74, 0x30, 0x0c, 0x76, 0x4c, 0xd4, 0x50, 0x2a, - 0x40, 0x2d, 0x39, 0xd9, 0x99, 0x63, 0xa9, 0x5d, 0x80, 0xae, 0x53, 0xca, 0x94, 0x3f, 0x05, 0x23, - 0x1e, 0xf8, 0x05, 0x04, 0xe1, 0xb8, 0x35, 0xf2, 0x17, 0xb3, 0xa0, 0x89, 0x02, 0x41, 0x00, 0xab, - 0x90, 0x88, 0xfa, 0x60, 0x08, 0x29, 0x50, 0x9a, 0x43, 0x8b, 0xa0, 0x50, 0xcc, 0xd8, 0x5a, 0xfe, - 0x97, 0x64, 0x63, 0x71, 0x74, 0x22, 0xa3, 0x20, 0x02, 0x5a, 0xcf, 0xeb, 0xc6, 0x16, 0x95, 0x54, - 0xd1, 0xcb, 0xab, 0x8d, 0x1a, 0xc6, 0x00, 0xfa, 0x08, 0x92, 0x9c, 0x71, 0xd5, 0x52, 0x52, 0x35, - 0x96, 0x71, 0x4b, 0x8b, 0x92, 0x0c, 0xd0, 0xe9, 0xbf, 0xad, 0x63, 0x0b, 0xa5, 0xe9, 0xb1, 0x02, - 0x41, 0x00, 0xdc, 0xcc, 0x27, 0xc8, 0xe4, 0xdc, 0x62, 0x48, 0xd5, 0x9b, 0xaf, 0xf5, 0xab, 0x60, - 0xf6, 0x21, 0xfd, 0x53, 0xe2, 0xb7, 0x5d, 0x09, 0xc9, 0x1a, 0xa1, 0x04, 0xa9, 0xfc, 0x61, 0x2c, - 0x5d, 0x04, 0x58, 0x3a, 0x5a, 0x39, 0xf1, 0x4a, 0x21, 0x56, 0x67, 0xfd, 0xcc, 0x20, 0xa3, 0x8f, - 0x78, 0x18, 0x5a, 0x79, 0x3d, 0x2e, 0x8e, 0x7e, 0x86, 0x0a, 0xe6, 0xa8, 0x33, 0xc1, 0x04, 0x17, - 0x4a, 0x9f, }; - -const unsigned long ltc_rsa_private_test_key_sz = sizeof(ltc_rsa_private_test_key); - -static const char x509_public_rsa[] = - "MIICdTCCAd4CCQCYjCwz0l9JpjANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJD\ - WjEPMA0GA1UECAwGTW9yYXZhMQ0wCwYDVQQHDARCcm5vMRAwDgYDVQQKDAdMVEMg\ - THRkMQ8wDQYDVQQLDAZDcnlwdG8xEjAQBgNVBAMMCVRlc3QgQ2VydDEYMBYGCSqG\ - SIb3DQEJARYJdGVzdEBjZXJ0MCAXDTE3MDMwOTIzNDMzOVoYDzIyOTAxMjIyMjM0\ - MzM5WjB+MQswCQYDVQQGEwJDWjEPMA0GA1UECAwGTW9yYXZhMQ0wCwYDVQQHDARC\ - cm5vMRAwDgYDVQQKDAdMVEMgTHRkMQ8wDQYDVQQLDAZDcnlwdG8xEjAQBgNVBAMM\ - CVRlc3QgQ2VydDEYMBYGCSqGSIb3DQEJARYJdGVzdEBjZXJ0MIGfMA0GCSqGSIb3\ - DQEBAQUAA4GNADCBiQKBgQDPmt5kitrIMyCp14MxGVSymoWnobd1M7aprIQks97b\ - fYUtlmXlP3KVJJ8oaMpP20QcPmASit0mpev/C17UiDhJKm5bvxI3R70Fa7zb8+7k\ - EY5BaHxhE9dCyIC+No/cCItPrKTidgzJY2xJWJPtzKrcJTsKYD+LVDrDTTHnlKRE\ - /QIDAQABMA0GCSqGSIb3DQEBCwUAA4GBAApwWqupmmLGHeKOLFLcthQpAXXYep6T\ - 3S3e8X7fIG6TGhfvn5DHn+/V/C4184oOCwImI+VYRokdXdQ1AMGfVUomHJxsFPia\ - bv5Aw3hiKsIG3jigKHwmMScgkl3yn+8hLkx6thNbqQoa6Yyo20RqaEFBwlZ5G8lF\ - rZsdeO84SeCH"; - -static const unsigned char pkcs8_private_rsa[] = { - 0x30, 0x82, 0x02, 0x78, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, - 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x02, 0x62, 0x30, 0x82, 0x02, 0x5e, 0x02, 0x01, - 0x00, 0x02, 0x81, 0x81, 0x00, 0xcf, 0x9a, 0xde, 0x64, 0x8a, 0xda, 0xc8, 0x33, 0x20, 0xa9, 0xd7, - 0x83, 0x31, 0x19, 0x54, 0xb2, 0x9a, 0x85, 0xa7, 0xa1, 0xb7, 0x75, 0x33, 0xb6, 0xa9, 0xac, 0x84, - 0x24, 0xb3, 0xde, 0xdb, 0x7d, 0x85, 0x2d, 0x96, 0x65, 0xe5, 0x3f, 0x72, 0x95, 0x24, 0x9f, 0x28, - 0x68, 0xca, 0x4f, 0xdb, 0x44, 0x1c, 0x3e, 0x60, 0x12, 0x8a, 0xdd, 0x26, 0xa5, 0xeb, 0xff, 0x0b, - 0x5e, 0xd4, 0x88, 0x38, 0x49, 0x2a, 0x6e, 0x5b, 0xbf, 0x12, 0x37, 0x47, 0xbd, 0x05, 0x6b, 0xbc, - 0xdb, 0xf3, 0xee, 0xe4, 0x11, 0x8e, 0x41, 0x68, 0x7c, 0x61, 0x13, 0xd7, 0x42, 0xc8, 0x80, 0xbe, - 0x36, 0x8f, 0xdc, 0x08, 0x8b, 0x4f, 0xac, 0xa4, 0xe2, 0x76, 0x0c, 0xc9, 0x63, 0x6c, 0x49, 0x58, - 0x93, 0xed, 0xcc, 0xaa, 0xdc, 0x25, 0x3b, 0x0a, 0x60, 0x3f, 0x8b, 0x54, 0x3a, 0xc3, 0x4d, 0x31, - 0xe7, 0x94, 0xa4, 0x44, 0xfd, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x81, 0x81, 0x00, 0xc8, 0x62, - 0xb9, 0xea, 0xde, 0x44, 0x53, 0x1d, 0x56, 0x97, 0xd9, 0x97, 0x9e, 0x1a, 0xcf, 0x30, 0x1e, 0x0a, - 0x88, 0x45, 0x86, 0x29, 0x30, 0xa3, 0x4d, 0x9f, 0x61, 0x65, 0x73, 0xe0, 0xd6, 0x87, 0x8f, 0xb6, - 0xf3, 0x06, 0xa3, 0x82, 0xdc, 0x7c, 0xac, 0xfe, 0x9b, 0x28, 0x9a, 0xae, 0xfd, 0xfb, 0xfe, 0x2f, - 0x0e, 0xd8, 0x97, 0x04, 0xe3, 0xbb, 0x1f, 0xd1, 0xec, 0x0d, 0xba, 0xa3, 0x49, 0x7f, 0x47, 0xac, - 0x8a, 0x44, 0x04, 0x7e, 0x86, 0xb7, 0x39, 0x42, 0x3f, 0xad, 0x1e, 0xb7, 0x0e, 0xa5, 0x51, 0xf4, - 0x40, 0x63, 0x1e, 0xfd, 0xbd, 0xea, 0x9f, 0x41, 0x9f, 0xa8, 0x90, 0x1d, 0x6f, 0x0a, 0x5a, 0x95, - 0x13, 0x11, 0x0d, 0x80, 0xaf, 0x5f, 0x64, 0x98, 0x8a, 0x2c, 0x78, 0x68, 0x65, 0xb0, 0x2b, 0x8b, - 0xa2, 0x53, 0x87, 0xca, 0xf1, 0x64, 0x04, 0xab, 0xf2, 0x7b, 0xdb, 0x83, 0xc8, 0x81, 0x02, 0x41, - 0x00, 0xf7, 0xbe, 0x5e, 0x23, 0xc3, 0x32, 0x3f, 0xbf, 0x8b, 0x8e, 0x3a, 0xee, 0xfc, 0xfc, 0xcb, - 0xe5, 0xf7, 0xf1, 0x0b, 0xbc, 0x42, 0x82, 0xae, 0xd5, 0x7a, 0x3e, 0xca, 0xf7, 0xd5, 0x69, 0x3f, - 0x64, 0x25, 0xa2, 0x1f, 0xb7, 0x75, 0x75, 0x05, 0x92, 0x42, 0xeb, 0xb8, 0xf1, 0xf3, 0x0a, 0x05, - 0xe3, 0x94, 0xd1, 0x55, 0x78, 0x35, 0xa0, 0x36, 0xa0, 0x9b, 0x7c, 0x92, 0x84, 0x6c, 0xdd, 0xdc, - 0x4d, 0x02, 0x41, 0x00, 0xd6, 0x86, 0x0e, 0x85, 0x42, 0x0b, 0x04, 0x08, 0x84, 0x21, 0x60, 0xf0, - 0x0e, 0x0d, 0x88, 0xfd, 0x1e, 0x36, 0x10, 0x65, 0x4f, 0x1e, 0x53, 0xb4, 0x08, 0x72, 0x80, 0x5c, - 0x3f, 0x59, 0x66, 0x17, 0xe6, 0x98, 0xf2, 0xe9, 0x6c, 0x7a, 0x06, 0x4c, 0xac, 0x76, 0x3d, 0xed, - 0x8c, 0xa1, 0xce, 0xad, 0x1b, 0xbd, 0xb4, 0x7d, 0x28, 0xbc, 0xe3, 0x0e, 0x38, 0x8d, 0x99, 0xd8, - 0x05, 0xb5, 0xa3, 0x71, 0x02, 0x40, 0x6d, 0xeb, 0xc3, 0x2d, 0x2e, 0xf0, 0x5e, 0xa4, 0x88, 0x31, - 0x05, 0x29, 0x00, 0x8a, 0xd1, 0x95, 0x29, 0x9b, 0x83, 0xcf, 0x75, 0xdb, 0x31, 0xe3, 0x7a, 0x27, - 0xde, 0x3a, 0x74, 0x30, 0x0c, 0x76, 0x4c, 0xd4, 0x50, 0x2a, 0x40, 0x2d, 0x39, 0xd9, 0x99, 0x63, - 0xa9, 0x5d, 0x80, 0xae, 0x53, 0xca, 0x94, 0x3f, 0x05, 0x23, 0x1e, 0xf8, 0x05, 0x04, 0xe1, 0xb8, - 0x35, 0xf2, 0x17, 0xb3, 0xa0, 0x89, 0x02, 0x41, 0x00, 0xab, 0x90, 0x88, 0xfa, 0x60, 0x08, 0x29, - 0x50, 0x9a, 0x43, 0x8b, 0xa0, 0x50, 0xcc, 0xd8, 0x5a, 0xfe, 0x97, 0x64, 0x63, 0x71, 0x74, 0x22, - 0xa3, 0x20, 0x02, 0x5a, 0xcf, 0xeb, 0xc6, 0x16, 0x95, 0x54, 0xd1, 0xcb, 0xab, 0x8d, 0x1a, 0xc6, - 0x00, 0xfa, 0x08, 0x92, 0x9c, 0x71, 0xd5, 0x52, 0x52, 0x35, 0x96, 0x71, 0x4b, 0x8b, 0x92, 0x0c, - 0xd0, 0xe9, 0xbf, 0xad, 0x63, 0x0b, 0xa5, 0xe9, 0xb1, 0x02, 0x41, 0x00, 0xdc, 0xcc, 0x27, 0xc8, - 0xe4, 0xdc, 0x62, 0x48, 0xd5, 0x9b, 0xaf, 0xf5, 0xab, 0x60, 0xf6, 0x21, 0xfd, 0x53, 0xe2, 0xb7, - 0x5d, 0x09, 0xc9, 0x1a, 0xa1, 0x04, 0xa9, 0xfc, 0x61, 0x2c, 0x5d, 0x04, 0x58, 0x3a, 0x5a, 0x39, - 0xf1, 0x4a, 0x21, 0x56, 0x67, 0xfd, 0xcc, 0x20, 0xa3, 0x8f, 0x78, 0x18, 0x5a, 0x79, 0x3d, 0x2e, - 0x8e, 0x7e, 0x86, 0x0a, 0xe6, 0xa8, 0x33, 0xc1, 0x04, 0x17, 0x4a, 0x9f }; - -/* private key - hexadecimal */ -enum { - pk_d , - pk_dP, - pk_dQ, - pk_e , - pk_N , - pk_p , - pk_q , - pk_qP, -}; -static const char *hex_key[] = { - "C862B9EADE44531D5697D9979E1ACF301E0A8845862930A34D9F616573E0D6878FB6F306A382DC7CACFE9B289AAEFDFBFE2F0ED89704E3BB1FD1EC0DBAA3497F47AC8A44047E86B739423FAD1EB70EA551F440631EFDBDEA9F419FA8901D6F0A5A9513110D80AF5F64988A2C786865B02B8BA25387CAF16404ABF27BDB83C881", - "6DEBC32D2EF05EA488310529008AD195299B83CF75DB31E37A27DE3A74300C764CD4502A402D39D99963A95D80AE53CA943F05231EF80504E1B835F217B3A089", - "AB9088FA600829509A438BA050CCD85AFE976463717422A320025ACFEBC6169554D1CBAB8D1AC600FA08929C71D552523596714B8B920CD0E9BFAD630BA5E9B1", - "010001", - "CF9ADE648ADAC83320A9D783311954B29A85A7A1B77533B6A9AC8424B3DEDB7D852D9665E53F7295249F2868CA4FDB441C3E60128ADD26A5EBFF0B5ED48838492A6E5BBF123747BD056BBCDBF3EEE4118E41687C6113D742C880BE368FDC088B4FACA4E2760CC9636C495893EDCCAADC253B0A603F8B543AC34D31E794A444FD", - "F7BE5E23C3323FBF8B8E3AEEFCFCCBE5F7F10BBC4282AED57A3ECAF7D5693F6425A21FB77575059242EBB8F1F30A05E394D1557835A036A09B7C92846CDDDC4D", - "D6860E85420B0408842160F00E0D88FD1E3610654F1E53B40872805C3F596617E698F2E96C7A064CAC763DED8CA1CEAD1BBDB47D28BCE30E388D99D805B5A371", - "DCCC27C8E4DC6248D59BAFF5AB60F621FD53E2B75D09C91AA104A9FC612C5D04583A5A39F14A215667FDCC20A38F78185A793D2E8E7E860AE6A833C104174A9F" }; - -/*** openssl public RSA key in DER format */ -const unsigned char ltc_openssl_public_rsa[] = { - 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, - 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xcf, 0x9a, 0xde, - 0x64, 0x8a, 0xda, 0xc8, 0x33, 0x20, 0xa9, 0xd7, 0x83, 0x31, 0x19, 0x54, 0xb2, 0x9a, 0x85, 0xa7, - 0xa1, 0xb7, 0x75, 0x33, 0xb6, 0xa9, 0xac, 0x84, 0x24, 0xb3, 0xde, 0xdb, 0x7d, 0x85, 0x2d, 0x96, - 0x65, 0xe5, 0x3f, 0x72, 0x95, 0x24, 0x9f, 0x28, 0x68, 0xca, 0x4f, 0xdb, 0x44, 0x1c, 0x3e, 0x60, - 0x12, 0x8a, 0xdd, 0x26, 0xa5, 0xeb, 0xff, 0x0b, 0x5e, 0xd4, 0x88, 0x38, 0x49, 0x2a, 0x6e, 0x5b, - 0xbf, 0x12, 0x37, 0x47, 0xbd, 0x05, 0x6b, 0xbc, 0xdb, 0xf3, 0xee, 0xe4, 0x11, 0x8e, 0x41, 0x68, - 0x7c, 0x61, 0x13, 0xd7, 0x42, 0xc8, 0x80, 0xbe, 0x36, 0x8f, 0xdc, 0x08, 0x8b, 0x4f, 0xac, 0xa4, - 0xe2, 0x76, 0x0c, 0xc9, 0x63, 0x6c, 0x49, 0x58, 0x93, 0xed, 0xcc, 0xaa, 0xdc, 0x25, 0x3b, 0x0a, - 0x60, 0x3f, 0x8b, 0x54, 0x3a, 0xc3, 0x4d, 0x31, 0xe7, 0x94, 0xa4, 0x44, 0xfd, 0x02, 0x03, 0x01, - 0x00, 0x01, }; -const unsigned long ltc_openssl_public_rsa_sz = sizeof(ltc_openssl_public_rsa); - -/* same key but with extra headers stripped */ -static const unsigned char openssl_public_rsa_stripped[] = { - 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xcf, 0x9a, 0xde, - 0x64, 0x8a, 0xda, 0xc8, 0x33, 0x20, 0xa9, 0xd7, 0x83, 0x31, 0x19, 0x54, 0xb2, 0x9a, 0x85, 0xa7, - 0xa1, 0xb7, 0x75, 0x33, 0xb6, 0xa9, 0xac, 0x84, 0x24, 0xb3, 0xde, 0xdb, 0x7d, 0x85, 0x2d, 0x96, - 0x65, 0xe5, 0x3f, 0x72, 0x95, 0x24, 0x9f, 0x28, 0x68, 0xca, 0x4f, 0xdb, 0x44, 0x1c, 0x3e, 0x60, - 0x12, 0x8a, 0xdd, 0x26, 0xa5, 0xeb, 0xff, 0x0b, 0x5e, 0xd4, 0x88, 0x38, 0x49, 0x2a, 0x6e, 0x5b, - 0xbf, 0x12, 0x37, 0x47, 0xbd, 0x05, 0x6b, 0xbc, 0xdb, 0xf3, 0xee, 0xe4, 0x11, 0x8e, 0x41, 0x68, - 0x7c, 0x61, 0x13, 0xd7, 0x42, 0xc8, 0x80, 0xbe, 0x36, 0x8f, 0xdc, 0x08, 0x8b, 0x4f, 0xac, 0xa4, - 0xe2, 0x76, 0x0c, 0xc9, 0x63, 0x6c, 0x49, 0x58, 0x93, 0xed, 0xcc, 0xaa, 0xdc, 0x25, 0x3b, 0x0a, - 0x60, 0x3f, 0x8b, 0x54, 0x3a, 0xc3, 0x4d, 0x31, 0xe7, 0x94, 0xa4, 0x44, 0xfd, 0x02, 0x03, 0x01, - 0x00, 0x01, }; - - -/* generated with the private key above as: - echo -n 'test' | openssl rsautl -sign -inkey rsa_private.pem -pkcs -hexdump - */ -static const unsigned char openssl_rsautl_pkcs[] = { - 0x24, 0xef, 0x54, 0xea, 0x1a, 0x12, 0x0c, 0xf4, 0x04, 0x0c, 0x48, 0xc8, 0xe8, 0x17, 0xd2, 0x6f, - 0xc3, 0x41, 0xb3, 0x97, 0x5c, 0xbc, 0xa3, 0x2d, 0x21, 0x00, 0x10, 0x0e, 0xbb, 0xf7, 0x30, 0x21, - 0x7e, 0x12, 0xd2, 0xdf, 0x26, 0x28, 0xd8, 0x0f, 0x6d, 0x4d, 0xc8, 0x4d, 0xa8, 0x78, 0xe7, 0x03, - 0xee, 0xbc, 0x68, 0xba, 0x98, 0xea, 0xe9, 0xb6, 0x06, 0x8d, 0x85, 0x5b, 0xdb, 0xa6, 0x49, 0x86, - 0x6f, 0xc7, 0x3d, 0xe0, 0x53, 0x83, 0xe0, 0xea, 0xb1, 0x08, 0x6a, 0x7b, 0xbd, 0xeb, 0xb5, 0x4a, - 0xdd, 0xbc, 0x64, 0x97, 0x8c, 0x17, 0x20, 0xa3, 0x5c, 0xd4, 0xb8, 0x87, 0x43, 0xc5, 0x13, 0xad, - 0x41, 0x6e, 0x45, 0x41, 0x32, 0xd4, 0x09, 0x12, 0x7f, 0xdc, 0x59, 0x1f, 0x28, 0x3f, 0x1e, 0xbc, - 0xef, 0x57, 0x23, 0x4b, 0x3a, 0xa3, 0x24, 0x91, 0x4d, 0xfb, 0xb2, 0xd4, 0xe7, 0x5e, 0x41, 0x7e, -}; - -static int rsa_compat_test(void) -{ - rsa_key key, pubkey; - int stat, i; - unsigned char buf[1024], key_parts[8][128]; - unsigned long len, key_lens[8]; - ltc_rsa_op_parameters rsa_params = {0}; - - /* try reading the key */ - DO(rsa_import(ltc_rsa_private_test_key, sizeof(ltc_rsa_private_test_key), &key)); - DO(rsa_import(ltc_openssl_public_rsa, sizeof(ltc_openssl_public_rsa), &pubkey)); - - /* sign-verify a message with PKCS #1 v1.5 no ASN.1 */ - len = sizeof(buf); - rsa_params.padding = LTC_PKCS_1_V1_5_NA1; - DO(rsa_sign_hash_v2((unsigned char*)"test", 4, buf, &len, &rsa_params, &key)); - if (len != sizeof(openssl_rsautl_pkcs) || memcmp(buf, openssl_rsautl_pkcs, len)) { - fprintf(stderr, "RSA rsa_sign_hash_v2 + LTC_PKCS_1_V1_5_NA1 failed\n"); - return 1; - } - stat = 0; - DO(rsa_verify_hash_v2(openssl_rsautl_pkcs, sizeof(openssl_rsautl_pkcs), (unsigned char*)"test", 4, &rsa_params, &stat, &pubkey)); - if (stat != 1) { - fprintf(stderr, "RSA rsa_verify_hash_v2 + LTC_PKCS_1_V1_5_NA1 failed\n"); - return 1; - } - rsa_free(&pubkey); - - /* now try to export private/public and compare */ - len = sizeof(buf); - DO(rsa_export(buf, &len, PK_PRIVATE, &key)); - COMPARE_TESTVECTOR(buf, len, ltc_rsa_private_test_key, sizeof(ltc_rsa_private_test_key), "RSA private export (from OpenSSL)", 0); - - len = sizeof(buf); - DO(rsa_export(buf, &len, PK_PUBLIC, &key)); - COMPARE_TESTVECTOR(buf, len, openssl_public_rsa_stripped, sizeof(openssl_public_rsa_stripped), "RSA public export (from OpenSSL private key)", 0); - rsa_free(&key); - - /* try reading the public key */ - DO(rsa_import(openssl_public_rsa_stripped, sizeof(openssl_public_rsa_stripped), &key)); - len = sizeof(buf); - DO(rsa_export(buf, &len, PK_PUBLIC, &key)); - COMPARE_TESTVECTOR(buf, len, openssl_public_rsa_stripped, sizeof(openssl_public_rsa_stripped), "RSA public export (from stripped OpenSSL)", 0); - rsa_free(&key); - - /* try reading the public key */ - DO(rsa_import(ltc_openssl_public_rsa, sizeof(ltc_openssl_public_rsa), &key)); - len = sizeof(buf); - DO(rsa_export(buf, &len, PK_PUBLIC, &key)); - COMPARE_TESTVECTOR(buf, len, openssl_public_rsa_stripped, sizeof(openssl_public_rsa_stripped), "RSA public export (from OpenSSL)", 0); - rsa_free(&key); - - /* try import private key in pkcs8 format */ - DO(rsa_import_pkcs8(pkcs8_private_rsa, sizeof(pkcs8_private_rsa), NULL, &key)); - len = sizeof(buf); - DO(rsa_export(buf, &len, PK_PRIVATE, &key)); - COMPARE_TESTVECTOR(buf, len, ltc_rsa_private_test_key, sizeof(ltc_rsa_private_test_key), "RSA private export (from PKCS#8)", 0); - rsa_free(&key); - - /* convert raw hexadecimal numbers to binary */ - for (i = 0; i < 8; ++i) { - key_lens[i] = sizeof(key_parts[i]); - DO(radix_to_bin(hex_key[i], 16, key_parts[i], &key_lens[i])); - } - /* try import private key from converted raw hexadecimal numbers */ - DO(rsa_set_key(key_parts[pk_N], key_lens[pk_N], key_parts[pk_e], key_lens[pk_e], key_parts[pk_d], key_lens[pk_d], &key)); - DO(rsa_set_factors(key_parts[pk_p], key_lens[pk_p], key_parts[pk_q], key_lens[pk_q], &key)); - DO(rsa_set_crt_params(key_parts[pk_dP], key_lens[pk_dP], key_parts[pk_dQ], key_lens[pk_dQ], key_parts[pk_qP], key_lens[pk_qP], &key)); - len = sizeof(buf); - DO(rsa_export(buf, &len, PK_PRIVATE, &key)); - COMPARE_TESTVECTOR(buf, len, ltc_rsa_private_test_key, sizeof(ltc_rsa_private_test_key), "RSA private export (from hex)", 0); - rsa_free(&key); - - /* try import public key from converted raw hexadecimal numbers */ - DO(rsa_set_key(key_parts[pk_N], key_lens[pk_N], key_parts[pk_e], key_lens[pk_e], NULL, 0, &key)); - len = sizeof(buf); - DO(rsa_export(buf, &len, PK_PUBLIC, &key)); - COMPARE_TESTVECTOR(buf, len, openssl_public_rsa_stripped, sizeof(openssl_public_rsa_stripped), "RSA public export (from hex)", 0); - rsa_free(&key); - - /* try export in SubjectPublicKeyInfo format of the public key */ - DO(rsa_import(ltc_openssl_public_rsa, sizeof(ltc_openssl_public_rsa), &key)); - len = sizeof(buf); - DO(rsa_export(buf, &len, PK_PUBLIC | PK_STD, &key)); - COMPARE_TESTVECTOR(buf, len, ltc_openssl_public_rsa, sizeof(ltc_openssl_public_rsa), "RSA public export (X.509)", 0); - rsa_free(&key); - - return 0; -} - -int rsa_key_cmp(const int should_type, const rsa_key *should, const rsa_key *is) -{ - if(should_type != is->type) - return CRYPT_ERROR; - if(should_type == PK_PRIVATE) { - if(ltc_mp_cmp(should->q, is->q) != LTC_MP_EQ) - return CRYPT_ERROR; - if(ltc_mp_cmp(should->p, is->p) != LTC_MP_EQ) - return CRYPT_ERROR; - if(ltc_mp_cmp(should->qP, is->qP) != LTC_MP_EQ) - return CRYPT_ERROR; - if(ltc_mp_cmp(should->dP, is->dP) != LTC_MP_EQ) - return CRYPT_ERROR; - if(ltc_mp_cmp(should->dQ, is->dQ) != LTC_MP_EQ) - return CRYPT_ERROR; - if(ltc_mp_cmp(should->d, is->d) != LTC_MP_EQ) - return CRYPT_ERROR; - } - if(ltc_mp_cmp(should->N, is->N) != LTC_MP_EQ) - return CRYPT_ERROR; - if(ltc_mp_cmp(should->e, is->e) != LTC_MP_EQ) - return CRYPT_ERROR; - return CRYPT_OK; -} - -/* https://github.com/DCIT/perl-CryptX/issues/69 */ -static int s_rsa_cryptx_issue_69(void) -{ - static const char *e = "03"; - static const char *N = "E932AC92252F585B3A80A4DD76A897C8B7652952FE788F6EC8DD640587A1EE5647670A8AD4C2BE0F9FA6E49C605ADF77B5174230" - "AF7BD50E5D6D6D6D28CCF0A886A514CC72E51D209CC772A52EF419F6A953F3135929588EBE9B351FCA61CED78F346FE00DBB6306" - "E5C2A4C6DFC3779AF85AB417371CF34D8387B9B30AE46D7A5FF5A655B8D8455F1B94AE736989D60A6F2FD5CADBFFBD504C5A756A" - "2E6BB5CECC13BCA7503F6DF8B52ACE5C410997E98809DB4DC30D943DE4E812A47553DCE54844A78E36401D13F77DC650619FED88" - "D8B3926E3D8E319C80C744779AC5D6ABE252896950917476ECE5E8FC27D5F053D6018D91B502C4787558A002B9283DA7"; - - static const char *sig1 = "8df69d774c6ac8b5f8aa16576ca37a4f948706c5daecb3c15cfd247a7657616b2bbb786b50158cac8c23e3" - "289d300d3fbb82380b8746d929df36bdaf43a5fc5d1d04c61c98d47c22de02d051be3ba9e42b1c47aa5192" - "66d4cae244e5ce99b24771a13a7c8c7b08868a3eccf70b4bc7570d5131a1ac8943d91b0151c39da2ad75cd" - "1b9a697d100eef6747217df581b272cfd1f549a901ff4951036a4eb28fd2ea1e9df3fa9fa457663f4259be" - "8e5f2f2fb84f831a0ca5320e2b79f04a17830f43062c4c8fc0d0b1ff90567f3342d524f682ca26661caadf" - "4272f2585e6013a92bfa68de72fe6174096890e4296aedd72da43aa508007df53fb852bd7162ab635b"; - static const char *sig2 = "1ee08947536e6b11d8923c3b00061d26a6933b5345077ea0214fdcbcc1ad68395008ff709117047e6b01dd" - "2a371dfa032c0732abc86ab2e0273bbd0dfe6b1c769e21bb9079982801d8f72e01be3244959312ab09bb8f" - "88572dc23216719b9810c73edf826749604feb8da1345f83f0209271aca462c1235b4cb4ba538f85a9c03d" - "d1dde1856fe73fd86b95566df2dfe8b0895c34489b97e02c8e48dabad7067619edec6267a776fa416fbcac" - "0fcacf3efa7852ce33ed63a9149c685c303d98c3dc37ee87521bc5b130377345fc95c87aa48505470deaf6" - "fb1064df041e3f03322b1ec90d3608deb17bf77f47066ecc6c511bfba69eed6da42881dcce603fcb2a"; - - static const char *hash = "7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9"; - rsa_key key; - unsigned char buf0[512], buf1[512]; - unsigned long l0, l1; - int stat; - ltc_rsa_op_parameters rsa_params = { - .params.hash_idx = -1, - .params.mgf1_hash_idx = -1, - }; - - l0 = sizeof(buf0); - l1 = sizeof(buf1); - DO(radix_to_bin(e, 16, buf0, &l0)); - DO(radix_to_bin(N, 16, buf1, &l1)); - - DO(rsa_set_key(buf1, l1, buf0, l0, NULL, 0, &key)); - - l0 = sizeof(buf0); - l1 = sizeof(buf1); - DO(radix_to_bin(sig1, 16, buf0, &l0)); - DO(radix_to_bin(hash, 16, buf1, &l1)); - rsa_params.padding = LTC_PKCS_1_V1_5; - SHOULD_FAIL(rsa_verify_hash_v2(buf0, l0, buf1, l1, &rsa_params, &stat, &key)); - DO(radix_to_bin(sig2, 16, buf0, &l0)); - SHOULD_FAIL(rsa_verify_hash_v2(buf0, l0, buf1, l1, &rsa_params, &stat, &key)); - rsa_free(&key); - return CRYPT_OK; -} - -static int s_rsa_issue_301(int prng_idx) -{ - rsa_key key, key_in; - unsigned char buf[4096]; - unsigned long len; - - DO(rsa_make_key(&yarrow_prng, prng_idx, sizeof(buf)/8, 65537, &key)); - - len = sizeof(buf); - DO(rsa_export(buf, &len, PK_PRIVATE, &key)); - DO(rsa_import(buf, len, &key_in)); - - DO(rsa_key_cmp(PK_PRIVATE, &key, &key_in)); - rsa_free(&key_in); - - len = sizeof(buf); - DO(rsa_export(buf, &len, PK_PUBLIC, &key)); - DO(rsa_import(buf, len, &key_in)); - - DO(rsa_key_cmp(PK_PUBLIC, &key, &key_in)); - rsa_free(&key_in); - - len = sizeof(buf); - DO(rsa_export(buf, &len, PK_PUBLIC | PK_STD, &key)); - DO(rsa_import(buf, len, &key_in)); - - DO(rsa_key_cmp(PK_PUBLIC, &key, &key_in)); - rsa_free(&key_in); - - rsa_free(&key); - return CRYPT_OK; -} - -static int s_rsa_public_ubin_e(int prng_idx) -{ - rsa_key key; - unsigned char e[32] = {0}; - unsigned long elen = sizeof(e); - - /* Check public exponent too small */ - e[elen - 1] = 1; - SHOULD_FAIL_WITH(rsa_make_key_ubin_e(&yarrow_prng, prng_idx, 128, e, elen, &key), - CRYPT_INVALID_ARG); - - /* - * Generate about 256 bits to check error when public exponent - * overflow. - */ - ENSURE(yarrow_read(e, elen, &yarrow_prng) == elen); - - /* Ensure that public exponent is: - * - odd value - * - MSB is even - */ - e[elen - 1] |= 0x1; - e[0] &= ~0x1; - - /* Check public exponent overflow */ - /* Set high bit of MSB set to get 256 bits, to get e overflow */ - e[0] |= 0x80; - SHOULD_FAIL_WITH(rsa_make_key_ubin_e(&yarrow_prng, prng_idx, 128, e, elen, &key), - CRYPT_INVALID_ARG); - - - /* Check public exponent not odd but e value < 256 bits */ - e[elen - 1] &= ~0x1; - e[0] &= ~0x80; - SHOULD_FAIL_WITH(rsa_make_key_ubin_e(&yarrow_prng, prng_idx, 128, e, elen, &key), - CRYPT_INVALID_ARG); - - /* Ensure that public exponent is odd value and e value < 256 bits */ - e[elen - 1] |= 0x1; - DO(rsa_make_key_ubin_e(&yarrow_prng, prng_idx, 128, e, elen, &key)); - rsa_free(&key); - - return CRYPT_OK; -} - -#ifdef LTC_TEST_READDIR -static int s_rsa_import_x509(const void *in, unsigned long inlen, void *key) -{ - /* here we use the filesize as indicator for the rsa size - * that would fail to import for tfm because it's fixed-size - */ - if ((strcmp(ltc_mp.name, "TomsFastMath") == 0) && (inlen > 2048)) { -#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1 - fprintf(stderr, "Skipping testcase because of TomsFastMath\n"); -#endif - return CRYPT_NOP; - } - return rsa_import_x509(in, inlen, key); -} - -#if defined(LTC_TEST_READDIR) -static int password_get(void **p, unsigned long *l, void *u) -{ - LTC_UNUSED_PARAM(u); - *p = strdup("secret"); - *l = 6; - return 0; -} - -static int s_rsa_import_pkcs8(const void *in, unsigned long inlen, void *key) -{ - password_ctx pw_ctx = { .callback = password_get }; - return rsa_import_pkcs8(in, inlen, &pw_ctx, key); -} -#endif -#endif - -static int s_rsa_macros_test(void) -{ - rsa_key key, pubkey; - int stat; - const unsigned char tv[] = "test"; - unsigned char buf0[1024], buf1[1024]; - unsigned long buf0len, buf1len; - - DO(rsa_import(ltc_rsa_private_test_key, sizeof(ltc_rsa_private_test_key), &key)); - DO(rsa_import(ltc_openssl_public_rsa, sizeof(ltc_openssl_public_rsa), &pubkey)); - - buf0len = sizeof(buf0); - DO(ltc_rsa_sign_hash(tv, 4, buf0, &buf0len, &yarrow_prng, find_prng("yarrow"), find_hash("sha1"), 8, &key)); - buf1len = sizeof(buf1); - DO(ltc_rsa_verify_hash(buf0, buf0len, tv, 4, find_hash("sha1"), 8, &stat, &key)); - ENSURE(stat == 1); - - buf0len = sizeof(buf0); - DO(ltc_rsa_encrypt_key(tv, 4, buf0, &buf0len, NULL, 0, &yarrow_prng, find_prng("yarrow"), find_hash("sha1"), &pubkey)); - buf1len = sizeof(buf1); - DO(ltc_rsa_decrypt_key(buf0, buf0len, buf1, &buf1len, NULL, 0, find_hash("sha1"), &stat, &key)); - ENSURE(stat == 1); - COMPARE_TESTVECTOR(buf1, buf1len, tv, 4, "s_rsa_macros_test", 0); - - rsa_free(&pubkey); - rsa_free(&key); - - return CRYPT_OK; -} - -static int s_rsa_pss_test(void) -{ - rsa_key key; - const unsigned char tv[] = "test"; - unsigned char buf0[1024]; - unsigned long buf0len; - ltc_rsa_op_parameters rsa_oparams = { - .prng = &yarrow_prng, - .wprng = find_prng("yarrow"), - .padding = LTC_PKCS_1_OAEP, - .u.crypt.lparam = tv, - .u.crypt.lparamlen = (unsigned long)4, - .params.saltlen = 7, - }; - - rsa_oparams.params.hash_idx = find_hash("sha1"); - rsa_oparams.params.mgf1_hash_idx = find_hash("sha256"); - - DO(rsa_import(ltc_rsa_private_test_key, sizeof(ltc_rsa_private_test_key), &key)); - - buf0len = sizeof(buf0); - DO(rsa_encrypt_key_v2(tv, 4, buf0, &buf0len, &rsa_oparams, &key)); - DO(rsa_encrypt_key_v2(tv, 4, buf0, &buf0len, &rsa_oparams, &key)); - key.params = rsa_oparams.params; - key.pss_oaep = 1; - DO(rsa_encrypt_key_v2(tv, 4, buf0, &buf0len, &rsa_oparams, &key)); - /* If the key is a PSS key, we must do a PSS operation */ - rsa_oparams.padding = LTC_PKCS_1_V1_5; - SHOULD_FAIL(rsa_encrypt_key_v2(tv, 4, buf0, &buf0len, &rsa_oparams, &key)); - - rsa_free(&key); - - return CRYPT_OK; -} - -static int s_rsa_oaep_small_ciphertext_test(int prng_idx) -{ - rsa_key key; - unsigned char ciphertext[256], plaintext[256], ct_zero[256], ct_one[256]; - unsigned long ciphertext_len, plaintext_len, modulus_len; - int hash_idx, stat; - const unsigned char msg[] = "hello strict-mode roundtrip"; - ltc_rsa_op_parameters rsa_params = { - .padding = LTC_PKCS_1_OAEP, - }; - - hash_idx = find_hash("sha256"); - if (hash_idx == -1) return CRYPT_NOP; - - rsa_params.prng = &yarrow_prng; - rsa_params.wprng = prng_idx; - rsa_params.params.hash_idx = hash_idx; - rsa_params.params.mgf1_hash_idx = hash_idx; - - DO(rsa_make_key(&yarrow_prng, prng_idx, 1024/8, 65537, &key)); - modulus_len = (unsigned long)rsa_get_size(&key); - ENSURE(modulus_len <= sizeof(ciphertext)); - - zeromem(ct_zero, modulus_len); - zeromem(ct_one, modulus_len); - ct_one[modulus_len - 1] = 1; - - plaintext_len = sizeof(plaintext); - SHOULD_FAIL_WITH(rsa_decrypt_key_v2(ct_zero, modulus_len, plaintext, &plaintext_len, &rsa_params, &stat, &key), CRYPT_INVALID_PACKET); - - plaintext_len = sizeof(plaintext); - SHOULD_FAIL_WITH(rsa_decrypt_key_v2(ct_one, modulus_len, plaintext, &plaintext_len, &rsa_params, &stat, &key), CRYPT_INVALID_PACKET); - - ciphertext_len = sizeof(ciphertext); - DO(rsa_encrypt_key_v2(msg, sizeof(msg) - 1, ciphertext, &ciphertext_len, &rsa_params, &key)); - - plaintext_len = sizeof(plaintext); - DO(rsa_decrypt_key_v2(ciphertext, ciphertext_len, plaintext, &plaintext_len, &rsa_params, &stat, &key)); - ENSURE(stat == 1); - COMPARE_TESTVECTOR(plaintext, plaintext_len, msg, sizeof(msg) - 1, "rsa oaep roundtrip", 0); - - rsa_free(&key); - return CRYPT_OK; -} - -int rsa_test(void) -{ - unsigned char in[1024], out[1024], tmp[3072]; - rsa_key key, privKey, pubKey; - int prng_idx, stat, stat2, i, mgf_hash; - unsigned long rsa_msgsize, len, len2, len3, cnt, cnt2, max_msgsize, label_hash; - static unsigned char lparam[] = { 0x01, 0x02, 0x03, 0x04 }; - void* dP; - unsigned char* p; - unsigned char* p2; - unsigned char* p3; - ltc_rsa_op_parameters rsa_params = {0}; - - if (ltc_mp.name == NULL) return CRYPT_NOP; - - if (rsa_compat_test() != 0) { - return 1; - } - - rsa_params.params.hash_idx = find_hash("sha1"); - rsa_params.params.mgf1_hash_idx = rsa_params.params.hash_idx; - rsa_params.wprng = find_prng("yarrow"); - mgf_hash = rsa_params.params.hash_idx; - if (mgf_hash == -1 || rsa_params.wprng == -1) { - fprintf(stderr, "rsa_test requires LTC_SHA1 and yarrow"); - return 1; - } - rsa_params.prng = &yarrow_prng; - prng_idx = rsa_params.wprng; - -#ifdef LTC_TEST_READDIR - DO(test_process_dir("tests/rsa", &key, s_rsa_import_x509, NULL, (dir_cleanup_cb)rsa_free, "rsa_test")); -#if defined(LTC_MD2) && defined(LTC_MD5) && defined(LTC_RC2) - DO(test_process_dir("tests/rsa-pkcs8/old", &key, s_rsa_import_pkcs8, NULL, (dir_cleanup_cb)rsa_free, "rsa_pkcs8_test")); -#endif - DO(test_process_dir("tests/rsa-pkcs8", &key, s_rsa_import_pkcs8, NULL, (dir_cleanup_cb)rsa_free, "rsa_pkcs8_test")); -#endif - - DO(s_rsa_pss_test()); - DO(s_rsa_macros_test()); - DO(s_rsa_cryptx_issue_69()); - DO(s_rsa_issue_301(prng_idx)); - DO(s_rsa_public_ubin_e(prng_idx)); - DO(s_rsa_oaep_small_ciphertext_test(prng_idx)); - - /* make 10 random key */ - for (cnt = 0; cnt < 10; cnt++) { - DO(rsa_make_key(&yarrow_prng, prng_idx, 1024/8, 65537, &key)); - if (ltc_mp_count_bits(key.N) != 1024) { - fprintf(stderr, "rsa_1024 key modulus has %d bits\n", ltc_mp_count_bits(key.N)); - -len = ltc_mp_unsigned_bin_size(key.N); -ltc_mp_to_unsigned_bin(key.N, tmp); -print_hex("N", tmp, len); - -len = ltc_mp_unsigned_bin_size(key.p); -ltc_mp_to_unsigned_bin(key.p, tmp); -print_hex("p", tmp, len); - -len = ltc_mp_unsigned_bin_size(key.q); -ltc_mp_to_unsigned_bin(key.q, tmp); -print_hex("q", tmp, len); - - return 1; - } - if (cnt != 9) { - rsa_free(&key); - } - } - /* make a random key/msg */ - ENSURE(yarrow_read(in, 117, &yarrow_prng) == 117); - - rsa_params.padding = LTC_PKCS_1_OAEP; -#ifdef LTC_TEST_EXT - for (mgf_hash = 0; mgf_hash < TAB_SIZE; ++mgf_hash) { - if (hash_is_valid(mgf_hash) != CRYPT_OK) - continue; -#else - { -#endif - for (label_hash = 0; label_hash < TAB_SIZE; ++label_hash) { - if (hash_is_valid(label_hash) != CRYPT_OK) - continue; - if (2 * hash_descriptor[label_hash].hashsize > 126) - continue; - max_msgsize = 128 - (2 * hash_descriptor[label_hash].hashsize) - 2; - rsa_params.params.hash_idx = label_hash; - rsa_params.params.mgf1_hash_idx = mgf_hash; - -#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1 - fprintf(stderr, "Test MGF(%s), Labelhash(%s) with max_msgsize %lu\n", hash_descriptor[mgf_hash].name, hash_descriptor[label_hash].name, max_msgsize); -#endif - /* encrypt the key (without lparam) */ - for (rsa_msgsize = 0; rsa_msgsize <= max_msgsize; rsa_msgsize++) { - - len = sizeof(out); - len2 = rsa_msgsize; - - DO(rsa_encrypt_key_v2(in, rsa_msgsize, out, &len, &rsa_params, &key)); - /* change a byte */ - out[8] ^= 1; - SHOULD_FAIL(rsa_decrypt_key_v2(out, len, tmp, &len2, &rsa_params, &stat2, &key)); - /* change a byte back */ - out[8] ^= 1; - ENSURE(len2 == rsa_msgsize); - - len2 = rsa_msgsize; - DO(rsa_decrypt_key_v2(out, len, tmp, &len2, &rsa_params, &stat, &key)); - ENSUREX(stat == 1 && stat2 == 0, "rsa_decrypt_key (without lparam)"); - COMPARE_TESTVECTOR(tmp, len2, in, rsa_msgsize, "rsa_decrypt_key (without lparam)", cnt << 8 | rsa_msgsize); - } - - /* encrypt the key (with lparam) */ - rsa_params.u.crypt.lparam = lparam; - rsa_params.u.crypt.lparamlen = sizeof(lparam); - for (rsa_msgsize = 0; rsa_msgsize <= max_msgsize; rsa_msgsize++) { - len = sizeof(out); - len2 = rsa_msgsize; - DO(rsa_encrypt_key_v2(rsa_msgsize ? in : NULL, rsa_msgsize, out, &len, &rsa_params, &key)); - /* change a byte */ - out[8] ^= 1; - SHOULD_FAIL(rsa_decrypt_key_v2(out, len, tmp, &len2, &rsa_params, &stat2, &key)); - ENSURE(len2 == rsa_msgsize); - - /* change a byte back */ - out[8] ^= 1; - - len2 = rsa_msgsize; - DO(rsa_decrypt_key_v2(out, len, tmp, &len2, &rsa_params, &stat, &key)); - ENSURE(stat == 1 && stat2 == 0); - COMPARE_TESTVECTOR(tmp, len2, in, rsa_msgsize, "rsa_decrypt_key (with lparam)", rsa_msgsize); - } - rsa_params.u.crypt.lparam = NULL; - rsa_params.u.crypt.lparamlen = 0; - - } - } - rsa_params.params.hash_idx = find_hash("sha1"); - rsa_params.params.mgf1_hash_idx = rsa_params.params.hash_idx; - - - /* encrypt the key PKCS #1 v1.5 (payload from 1 to 117 bytes) */ - rsa_params.padding = LTC_PKCS_1_V1_5; - for (rsa_msgsize = 0; rsa_msgsize <= 117; rsa_msgsize++) { - len = sizeof(out); - len2 = rsa_msgsize; - DO(rsa_encrypt_key_v2(in, rsa_msgsize, out, &len, &rsa_params, &key)); - - len2 = rsa_msgsize; - DO(rsa_decrypt_key_v2(out, len, tmp, &len2, &rsa_params, &stat, &key)); - ENSURE(stat == 1); - COMPARE_TESTVECTOR(tmp, len2, in, rsa_msgsize, "rsa_decrypt_key_ex", rsa_msgsize); - } - - /* sign a message (unsalted, lower cholestorol and Atkins approved) now */ - len = sizeof(out); - rsa_params.padding = LTC_PKCS_1_PSS; - DO(rsa_sign_hash_v2(in, 20, out, &len, &rsa_params, &key)); - -/* export key and import as both private and public */ - len2 = sizeof(tmp); - DO(rsa_export(tmp, &len2, PK_PRIVATE, &key)); - DO(rsa_import(tmp, len2, &privKey)); - len2 = sizeof(tmp); - DO(rsa_export(tmp, &len2, PK_PUBLIC, &key)); - DO(rsa_import(tmp, len2, &pubKey)); - - dbg_malloc_stats(); - rsa_shrink_key(&key); - dbg_malloc_stats(); - rsa_shrink_key(&pubKey); - dbg_malloc_stats(); - rsa_shrink_key(&privKey); - dbg_malloc_stats(); - - /* verify with original */ - DO(rsa_verify_hash_v2(out, len, in, 20, &rsa_params, &stat, &key)); - /* change a byte */ - in[0] ^= 1; - DO(rsa_verify_hash_v2(out, len, in, 20, &rsa_params, &stat2, &key)); - - ENSUREX(stat == 1 && stat2 == 0, "rsa_verify_hash (unsalted, origKey) failed"); - - /* verify with privKey */ - /* change byte back to original */ - in[0] ^= 1; - DO(rsa_verify_hash_v2(out, len, in, 20, &rsa_params, &stat, &privKey)); - /* change a byte */ - in[0] ^= 1; - DO(rsa_verify_hash_v2(out, len, in, 20, &rsa_params, &stat2, &privKey)); - - if (!(stat == 1 && stat2 == 0)) { - fprintf(stderr, "rsa_verify_hash (unsalted, privKey) failed, %d, %d", stat, stat2); - rsa_free(&key); - rsa_free(&pubKey); - rsa_free(&privKey); - return 1; - } - - /* verify with privKey but remove pointer to dP to test without CRT */ - - dP = privKey.dP; - privKey.dP = NULL; - /* change byte back to original */ - in[0] ^= 1; - DO(rsa_verify_hash_v2(out, len, in, 20, &rsa_params, &stat, &privKey)); - /* change a byte */ - in[0] ^= 1; - DO(rsa_verify_hash_v2(out, len, in, 20, &rsa_params, &stat2, &privKey)); - - if (!(stat == 1 && stat2 == 0)) { - fprintf(stderr, "rsa_verify_hash (unsalted, privKey) failed, %d, %d", stat, stat2); - rsa_free(&key); - rsa_free(&pubKey); - rsa_free(&privKey); - return 1; - } - privKey.dP = dP; - - /* verify with pubKey */ - /* change byte back to original */ - in[0] ^= 1; - DO(rsa_verify_hash_v2(out, len, in, 20, &rsa_params, &stat, &pubKey)); - /* change a byte */ - in[0] ^= 1; - DO(rsa_verify_hash_v2(out, len, in, 20, &rsa_params, &stat2, &pubKey)); - - if (!(stat == 1 && stat2 == 0)) { - fprintf(stderr, "rsa_verify_hash (unsalted, pubkey) failed, %d, %d", stat, stat2); - rsa_free(&key); - rsa_free(&pubKey); - rsa_free(&privKey); - return 1; - } - - /* sign a message (salted) now (use privKey to make, pubKey to verify) */ - len = sizeof(out); - rsa_params.params.saltlen = 8; - DO(rsa_sign_hash_v2(in, 20, out, &len, &rsa_params, &privKey)); - DO(rsa_verify_hash_v2(out, len, in, 20, &rsa_params, &stat, &pubKey)); - /* change a byte */ - in[0] ^= 1; - DO(rsa_verify_hash_v2(out, len, in, 20, &rsa_params, &stat2, &pubKey)); - - if (!(stat == 1 && stat2 == 0)) { - fprintf(stderr, "rsa_verify_hash (salted) failed, %d, %d", stat, stat2); - rsa_free(&key); - rsa_free(&pubKey); - rsa_free(&privKey); - return 1; - } - rsa_params.params.saltlen = 0; - - /* sign a message with PKCS #1 v1.5 */ - len = sizeof(out); - rsa_params.padding = LTC_PKCS_1_V1_5; - DO(rsa_sign_hash_v2(in, 20, out, &len, &rsa_params, &privKey)); - DO(rsa_verify_hash_v2(out, len, in, 20, &rsa_params, &stat, &pubKey)); - /* change a byte */ - in[0] ^= 1; - DO(rsa_verify_hash_v2(out, len, in, 20, &rsa_params, &stat2, &pubKey)); - - if (!(stat == 1 && stat2 == 0)) { - fprintf(stderr, "rsa_verify_hash_v2 failed, %d, %d", stat, stat2); - rsa_free(&key); - rsa_free(&pubKey); - rsa_free(&privKey); - return 1; - } - - /* Testcase for Bleichenbacher attack - * - * (1) Create a valid signature - * (2) Check that it can be verified - * (3) Decrypt the package to fetch plain text - * (4) Forge the structure of PKCS#1-EMSA encoded data - * (4.1) Search for start and end of the padding string - * (4.2) Move the signature to the front of the padding string - * (4.3) Zero the message until the end - * (5) Encrypt the package again - * (6) Profit :) - * For PS lengths < 8: the verification process should fail - * For PS lengths >= 8: the verification process should succeed - * For all PS lengths: the result should not be valid - */ - - p = in; - p2 = out; - p3 = tmp; - for (i = 0; i < 10; ++i) { - len = sizeof(in); - len2 = sizeof(out); - /* (1) */ - DO(rsa_sign_hash_v2(p, 20, p2, &len2, &rsa_params, &privKey)); - /* (2) */ - DOX(rsa_verify_hash_v2(p2, len2, p, 20, &rsa_params, &stat, &pubKey), "should succeed"); - ENSURE(stat == 1); - len3 = sizeof(tmp); - /* (3) */ - DO(ltc_mp.rsa_me(p2, len2, p3, &len3, PK_PUBLIC, &key)); - /* (4) */ -#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1 - print_hex("Original signature", p3, len3); -#endif - /* (4.1) */ - for (cnt = 0; cnt < len3; ++cnt) { - if (p3[cnt] == 0xff) - break; - } - for (cnt2 = cnt+1; cnt2 < len3; ++cnt2) { - if (p3[cnt2] != 0xff) - break; - } - /* (4.2) */ - memmove(&p3[cnt+i], &p3[cnt2], len3-cnt2); - /* (4.3) */ - for (cnt = cnt + len3-cnt2+i; cnt < len; ++cnt) { - p3[cnt] = 0; - } -#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1 - print_hex("Forged signature", p3, len3); -#endif - - len2 = sizeof(out); - /* (5) */ - DO(ltc_mp.rsa_me(p3, len3, p2, &len2, PK_PRIVATE, &key)); - - len3 = sizeof(tmp); - /* (6) */ - if (i < 8) - SHOULD_FAIL(rsa_verify_hash_v2(p2, len2, p, 20, &rsa_params, &stat, &pubKey)); - else - DO(rsa_verify_hash_v2(p2, len2, p, 20, &rsa_params, &stat, &pubKey)); - ENSURE(stat == 0); - } - rsa_free(&key); - - /* try reading the public RSA key from a X509 certificate */ - len3 = sizeof(tmp); - DO(base64_decode(x509_public_rsa, sizeof(x509_public_rsa), tmp, &len3)); - DO(rsa_import_x509(tmp, len3, &key)); - len = sizeof(tmp); - DO(rsa_export(tmp, &len, PK_PUBLIC, &key)); - COMPARE_TESTVECTOR(tmp, len, openssl_public_rsa_stripped, sizeof(openssl_public_rsa_stripped), "RSA public export to match rsa_import_x509", 0); - rsa_free(&key); - - len3 = sizeof(tmp); - DO(base64_decode(ltc_der_tests_cacert_root_cert, ltc_der_tests_cacert_root_cert_size, tmp, &len3)); - - DO(rsa_import_x509(tmp, len3, &key)); - - /* free the key and return */ - rsa_free(&key); - rsa_free(&pubKey); - rsa_free(&privKey); - return 0; -} - -#else -LTC_NOP_TEST(rsa_test) -#endif diff --git a/tests/scrypt_test.c b/tests/scrypt_test.c deleted file mode 100644 index 750e9453..00000000 --- a/tests/scrypt_test.c +++ /dev/null @@ -1,101 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include - -#ifdef LTC_SCRYPT - -/* RFC 7914 test vectors */ - -typedef struct { - const char *password; - unsigned long password_len; - const char *salt; - unsigned long salt_len; - unsigned long N, r, p; - const unsigned char expected[64]; - const char *name; -} scrypt_testcase; - -static const scrypt_testcase cases[] = { - { - "", 0, "", 0, 16, 1, 1, - { - 0x77, 0xd6, 0x57, 0x62, 0x38, 0x65, 0x7b, 0x20, - 0x3b, 0x19, 0xca, 0x42, 0xc1, 0x8a, 0x04, 0x97, - 0xf1, 0x6b, 0x48, 0x44, 0xe3, 0x07, 0x4a, 0xe8, - 0xdf, 0xdf, 0xfa, 0x3f, 0xed, 0xe2, 0x14, 0x42, - 0xfc, 0xd0, 0x06, 0x9d, 0xed, 0x09, 0x48, 0xf8, - 0x32, 0x6a, 0x75, 0x3a, 0x0f, 0xc8, 0x1f, 0x17, - 0xe8, 0xd3, 0xe0, 0xfb, 0x2e, 0x0d, 0x36, 0x28, - 0xcf, 0x35, 0xe2, 0x0c, 0x38, 0xd1, 0x89, 0x06 - }, - "scrypt(\"\", \"\", 16, 1, 1)" - }, - { - "password", 8, "NaCl", 4, 1024, 8, 16, - { - 0xfd, 0xba, 0xbe, 0x1c, 0x9d, 0x34, 0x72, 0x00, - 0x78, 0x56, 0xe7, 0x19, 0x0d, 0x01, 0xe9, 0xfe, - 0x7c, 0x6a, 0xd7, 0xcb, 0xc8, 0x23, 0x78, 0x30, - 0xe7, 0x73, 0x76, 0x63, 0x4b, 0x37, 0x31, 0x62, - 0x2e, 0xaf, 0x30, 0xd9, 0x2e, 0x22, 0xa3, 0x88, - 0x6f, 0xf1, 0x09, 0x27, 0x9d, 0x98, 0x30, 0xda, - 0xc7, 0x27, 0xaf, 0xb9, 0x4a, 0x83, 0xee, 0x6d, - 0x83, 0x60, 0xcb, 0xdf, 0xa2, 0xcc, 0x06, 0x40 - }, - "scrypt(\"password\", \"NaCl\", 1024, 8, 16)" - }, - { - "pleaseletmein", 13, "SodiumChloride", 14, 16384, 8, 1, - { - 0x70, 0x23, 0xbd, 0xcb, 0x3a, 0xfd, 0x73, 0x48, - 0x46, 0x1c, 0x06, 0xcd, 0x81, 0xfd, 0x38, 0xeb, - 0xfd, 0xa8, 0xfb, 0xba, 0x90, 0x4f, 0x8e, 0x3e, - 0xa9, 0xb5, 0x43, 0xf6, 0x54, 0x5d, 0xa1, 0xf2, - 0xd5, 0x43, 0x29, 0x55, 0x61, 0x3f, 0x0f, 0xcf, - 0x62, 0xd4, 0x97, 0x05, 0x24, 0x2a, 0x9a, 0xf9, - 0xe6, 0x1e, 0x85, 0xdc, 0x0d, 0x65, 0x1e, 0x40, - 0xdf, 0xcf, 0x01, 0x7b, 0x45, 0x57, 0x58, 0x87 - }, - "scrypt(\"pleaseletmein\", \"SodiumChloride\", 16384, 8, 1)" - }, -#ifdef LTC_SCRYPT_TEST_1GB - /* Define LTC_SCRYPT_TEST_1GB via CFLAGS to enable this test vector - * which allocates ~1 GiB of memory and takes a long time to run. */ - { - "pleaseletmein", 13, "SodiumChloride", 14, 1048576, 8, 1, - { - 0x21, 0x01, 0xcb, 0x9b, 0x6a, 0x51, 0x1a, 0xae, - 0xad, 0xdb, 0xbe, 0x09, 0xcf, 0x70, 0xf8, 0x81, - 0xec, 0x56, 0x8d, 0x57, 0x4a, 0x2f, 0xfd, 0x4d, - 0xab, 0xe5, 0xee, 0x98, 0x20, 0xad, 0xaa, 0x47, - 0x8e, 0x56, 0xfd, 0x8f, 0x4b, 0xa5, 0xd0, 0x9f, - 0xfa, 0x1c, 0x6d, 0x92, 0x7c, 0x40, 0xf4, 0xc3, - 0x37, 0x30, 0x40, 0x49, 0xe8, 0xa9, 0x52, 0xfb, - 0xcb, 0xf4, 0x5c, 0x6f, 0xa7, 0x7a, 0x41, 0xa4 - }, - "scrypt(\"pleaseletmein\", \"SodiumChloride\", 1048576, 8, 1)" - }, -#endif -}; - -int scrypt_test(void) -{ - unsigned char dk[64]; - unsigned int n; - - for (n = 0; n < LTC_ARRAY_SIZE(cases); ++n) { - DO(scrypt_pbkdf((const unsigned char *)cases[n].password, cases[n].password_len, - (const unsigned char *)cases[n].salt, cases[n].salt_len, - cases[n].N, cases[n].r, cases[n].p, - dk, sizeof(dk))); - COMPARE_TESTVECTOR(dk, sizeof(dk), cases[n].expected, sizeof(cases[n].expected), cases[n].name, n); - } - - return CRYPT_OK; -} - -#else -LTC_NOP_TEST(scrypt_test) -#endif diff --git a/tests/siv_wycheproof.h b/tests/siv_wycheproof.h deleted file mode 100644 index e194ca02..00000000 --- a/tests/siv_wycheproof.h +++ /dev/null @@ -1,1345 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#if defined(LTC_TEST) && defined(LTC_SIV_MODE) -#include -typedef enum ltc_aes_siv_test_case_result -{ - LTC_TEST_CASE_SHOULD_SUCCEED, - LTC_TEST_CASE_SHOULD_FAIL, -} ltc_aes_siv_test_case_result; - -typedef struct { int tcId; const char* comment; uint8_t key[64]; unsigned long keyLen; const uint8_t* aad; unsigned long aadLen; const uint8_t* msg; unsigned long msgLen; const uint8_t* ct; unsigned long ctLen; ltc_aes_siv_test_case_result result; } aes_siv_test_case; - -static const uint8_t aad_1[] = {0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27}; -static const uint8_t msg_1[] = {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee}; -static const uint8_t ct_1[] = {0x85,0x63,0x2d,0x07,0xc6,0xe8,0xf3,0x7f,0x95,0x0a,0xcd,0x32,0x0a,0x2e,0xcc,0x93,0x40,0xc0,0x2b,0x96,0x90,0xc4,0xdc,0x04,0xda,0xef,0x7f,0x6a,0xfe,0x5c}; -static const uint8_t ct_2[] = {0xb2,0xb2,0x35,0x4e,0x37,0x24,0xdc,0xda,0xa8,0x5e,0xcf,0x02,0x9b,0x49,0xa9,0x0c}; -static const uint8_t aad_3[] = {0x82,0x68,0xc5,0x19,0x4a,0x71,0xae,0xd0,0xfc,0x1d,0xaf,0xe3}; -static const uint8_t ct_3[] = {0x92,0xbc,0x07,0xee,0x20,0x0f,0xbd,0x48,0x8b,0x7f,0x70,0xa1,0x0d,0xa2,0x6a,0x21}; -static const uint8_t aad_4[] = {0x24,0xab,0x40,0xe7,0x96,0x6c,0x5b,0xfe,0x8a,0x5d,0x2b,0x0a,0x6a,0x97,0x65}; -static const uint8_t ct_4[] = {0xf4,0x49,0x34,0xd6,0xf5,0xba,0x77,0x12,0x2f,0x19,0x85,0x99,0xcd,0x0e,0x5e,0x52}; -static const uint8_t aad_5[] = {0x9f,0xff,0xf1,0x96,0xbe,0xfb,0x5f,0xfb,0xa0,0x1a,0xfa,0x92,0x35,0x41,0x8d,0x57}; -static const uint8_t ct_5[] = {0xc1,0x1a,0xb0,0xae,0x19,0x30,0x18,0xd2,0xc9,0xc7,0x98,0x5a,0xec,0x3f,0x8a,0x5b}; -static const uint8_t aad_6[] = {0xa9,0xef,0xd1,0x55,0x15,0x9b,0x53,0x3f,0x2b,0x64,0x9b,0x2e,0x5f,0xbf,0x87,0xe6,0xa2,0xc1,0x1e,0xe8}; -static const uint8_t ct_6[] = {0xcf,0x52,0xa3,0xc9,0xe2,0xd3,0xd9,0x9a,0x66,0xf7,0x41,0x35,0xf3,0x9e,0x28,0xbb}; -static const uint8_t aad_7[] = {0x89,0x6d,0xcd,0xb3,0x67,0xf3,0xc7,0x6d,0x60,0x09,0x3d,0xc5,0xae,0x09,0xbc,0x4f,0x30,0xe5,0xcb,0x88,0xe3,0x43,0x4e,0x6e,0xb0,0xf0,0x70,0x0a,0xc7,0x52,0xcd,0x97}; -static const uint8_t ct_7[] = {0x8f,0x60,0x3b,0x65,0xe7,0x67,0xef,0x17,0x8b,0x4d,0xd1,0x1d,0xb6,0xc1,0x14,0xc1}; -static const uint8_t aad_8[] = {0x86,0x5d,0x39,0xae,0x9b,0x5e,0x9f,0xf8,0xd6,0x30,0x8e,0x00,0x20,0x87,0x45,0xbc}; -static const uint8_t msg_8[] = {0xcc,0x37,0xfa,0xe1,0x5f,0x74,0x5a,0x2f,0x40,0xe2,0xc8,0xb1,0x92,0xf2,0xb3,0x8d}; -static const uint8_t ct_8[] = {0xc7,0x9c,0x86,0xcd,0x75,0x09,0xe6,0x0a,0x16,0xca,0x8c,0xec,0x6b,0xca,0xa1,0xc5,0x8f,0xbd,0x60,0x99,0x71,0x89,0x91,0xfe,0x77,0x5b,0xf5,0xa6,0x59,0xd3,0x0a,0x24}; -static const uint8_t aad_9[] = {0x8e,0xe2,0x1f,0x1a,0x5e,0x2b,0x3f,0x8b,0x8f,0x20,0x64,0xe5,0xce,0xca,0xc8,0x1d}; -static const uint8_t msg_9[] = {0x91,0xa1,0x7e,0x4d,0xfc,0xc3,0x16,0x6a,0x1a,0xdd,0x26,0xff,0x0e,0x7c,0x12,0x05,0x6e,0x8a,0x65,0x4f,0x28,0xa6,0xde,0x24,0xf4,0xba,0x73,0x9c,0xeb,0x5b,0x5b,0x18}; -static const uint8_t ct_9[] = {0x84,0x91,0x95,0x03,0x1e,0x89,0x27,0xa1,0xaf,0x4f,0x64,0xcb,0xdd,0x80,0x48,0x46,0x1c,0x03,0x59,0x8b,0xfb,0xa4,0x41,0x31,0x27,0x76,0xa4,0xe8,0xac,0x95,0x9b,0xee,0x44,0xc5,0x21,0x80,0x12,0x87,0xa2,0xfd,0x95,0xe2,0x32,0x9b,0x1c,0x69,0x44,0x41}; -static const uint8_t aad_10[] = {0x3a,0x83,0x63,0xf5,0x1b,0xce,0x89,0x1e,0xba,0x7b,0xcc,0x0a,0xa4,0x31,0x1e,0x10}; -static const uint8_t msg_10[] = {0x39,0xb4,0x47,0xbd,0x3a,0x01,0x98,0x3c,0x1c,0xb7,0x61,0xb4,0x56,0xd6,0x90,0x00,0x94,0x8c,0xeb,0x87,0x05,0x62,0xa5,0x36,0x12,0x6a,0x0d,0x18,0xa8,0xe7,0xe4,0x9b,0x16,0xde,0x8f,0xe6,0x72,0xf1,0x3d,0x08,0x08,0xd8,0xb7,0xd9,0x57,0x89,0x99,0x17}; -static const uint8_t ct_10[] = {0x9f,0x66,0x76,0x5a,0x01,0x92,0x77,0xa7,0xa7,0xac,0xb9,0x2e,0x80,0xf8,0x30,0x0b,0xaa,0x72,0x4c,0x92,0x56,0x09,0x51,0xeb,0x09,0xd8,0x55,0xf4,0x71,0xfe,0x1b,0x58,0x99,0x28,0xe5,0x1f,0x7a,0x8a,0x4b,0xbc,0x6c,0xc9,0xf5,0x5f,0xab,0xb2,0xec,0xa2,0xeb,0xb4,0xfa,0xca,0x14,0xd1,0xae,0x20,0xcf,0xdc,0x31,0xb9,0x60,0x2e,0x98,0x91}; -static const uint8_t aad_11[] = {0x4c,0x37,0x5f,0xd3,0xc4,0xd4,0x5c,0x5c,0xff,0xf1,0x6d,0x55}; -static const uint8_t msg_11[] = {0x49}; -static const uint8_t ct_11[] = {0xf5,0xc8,0x15,0x5c,0x7d,0xd7,0xf4,0x7c,0x61,0xd9,0x80,0xcc,0xd2,0x17,0x5b,0xeb,0x9b}; -static const uint8_t aad_12[] = {0x59,0x9f,0x61,0xc6,0x49,0xe7,0xcc,0x5c,0xbb,0xd7,0xa7,0x8f}; -static const uint8_t msg_12[] = {0x7c,0x0c}; -static const uint8_t ct_12[] = {0x13,0x0e,0x8d,0xe1,0x10,0x80,0xa3,0xb2,0x7c,0xc1,0xef,0x12,0x72,0x58,0x6c,0x24,0x71,0x7c}; -static const uint8_t aad_13[] = {0x9a,0x58,0x22,0x45,0xb4,0x6c,0x61,0x70,0xe3,0xf5,0xca,0x53}; -static const uint8_t msg_13[] = {0x2f,0x5c,0x53}; -static const uint8_t ct_13[] = {0xb9,0x89,0x02,0xdc,0x89,0xe6,0x81,0x1d,0xfb,0xa5,0xea,0xfb,0x15,0x61,0x18,0x6d,0xc1,0x84,0x9e}; -static const uint8_t aad_14[] = {0xea,0xb4,0x1f,0x34,0x17,0xc7,0x9b,0xc7,0x26,0x2c,0x7b,0x64}; -static const uint8_t msg_14[] = {0x41,0xec,0x71,0x78}; -static const uint8_t ct_14[] = {0xcd,0x82,0x47,0x17,0x88,0x6f,0x33,0x63,0x62,0x29,0x37,0xbc,0xd1,0x18,0x96,0x0a,0x0e,0x26,0x05,0xfe}; -static const uint8_t aad_15[] = {0xe9,0xa4,0xb0,0x8a,0x8e,0x2e,0xbb,0xb1,0x3f,0x82,0xf8,0x70}; -static const uint8_t msg_15[] = {0xeb,0xe6,0x56,0xa9,0x7b}; -static const uint8_t ct_15[] = {0x85,0x28,0x88,0x34,0xb2,0x5f,0x27,0xe9,0x60,0x83,0xe2,0xf3,0x60,0xd3,0xc7,0xe7,0x48,0x65,0x19,0xb4,0xf5}; -static const uint8_t aad_16[] = {0xfc,0xa5,0x37,0xf5,0x0d,0x5f,0xce,0x3c,0xdc,0x99,0x4b,0x70}; -static const uint8_t msg_16[] = {0x82,0xf0,0xd4,0x9b,0x77,0xa5}; -static const uint8_t ct_16[] = {0x9a,0xcd,0x6e,0xe8,0xa8,0x27,0xc2,0xc5,0xd0,0xda,0x7b,0xf7,0x81,0x5d,0xbd,0x85,0x11,0xbd,0x8c,0x5a,0x79,0xc1}; -static const uint8_t aad_17[] = {0x95,0xdc,0xea,0xfc,0xd4,0x26,0xa9,0xbc,0xbe,0x99,0xb8,0x42}; -static const uint8_t msg_17[] = {0x1d,0x63,0x52,0x48,0x01,0x4c,0x3b}; -static const uint8_t ct_17[] = {0xf7,0xc7,0x39,0xf6,0xa0,0xe2,0x0e,0x94,0x26,0x5e,0xcb,0xbd,0xae,0xc3,0x6c,0xd5,0x97,0x08,0x89,0x67,0x91,0x7d,0x47}; -static const uint8_t aad_18[] = {0x0c,0x78,0x41,0x25,0x71,0x5b,0x7f,0x9b,0x10,0x67,0xb0,0x77}; -static const uint8_t msg_18[] = {0xb9,0x78,0x58,0x7b,0xf0,0x28,0x55,0x8d}; -static const uint8_t ct_18[] = {0x16,0x38,0x33,0xac,0x90,0x4d,0x30,0x58,0x9c,0xad,0x9a,0x00,0x2b,0xd7,0x02,0xf5,0xc7,0x80,0x9b,0x04,0x69,0x3f,0xd8,0xfb}; -static const uint8_t aad_19[] = {0x53,0x35,0x39,0x76,0xf1,0x8a,0xe8,0xc8,0xcb,0xc7,0xe0,0x66}; -static const uint8_t msg_19[] = {0x07,0x8a,0x6a,0x3d,0x7d,0x1d,0x31,0x20,0x04}; -static const uint8_t ct_19[] = {0x87,0xa3,0x7e,0x3d,0xe3,0x69,0x0b,0x11,0xfb,0xa0,0x89,0xc0,0x68,0xe1,0xc1,0xea,0x17,0xa4,0xd0,0x5e,0xcf,0xb0,0xa9,0x76,0x31}; -static const uint8_t aad_20[] = {0x0b,0xae,0xd8,0xc0,0x67,0x18,0x69,0x7b,0x4e,0x84,0x5a,0xcb}; -static const uint8_t msg_20[] = {0x43,0x5e,0x10,0x1a,0x1a,0x44,0x16,0xab,0xe5,0xce}; -static const uint8_t ct_20[] = {0x1e,0xe7,0x89,0x1a,0xfb,0xc9,0x2d,0x52,0x28,0x2e,0xb3,0xfd,0xad,0xa6,0xf8,0x86,0xae,0x61,0x3f,0x6d,0x60,0xe5,0xd8,0xc1,0xa3,0xa6}; -static const uint8_t aad_21[] = {0x30,0x69,0x9d,0xc6,0xf4,0x97,0x21,0x5a,0xcd,0xa1,0x54,0x41}; -static const uint8_t msg_21[] = {0xcc,0xb3,0xe3,0xe1,0xbb,0xf6,0xc3,0xb0,0x3c,0x25,0x7b}; -static const uint8_t ct_21[] = {0xa7,0x8a,0x01,0x33,0x1b,0xb6,0xda,0x90,0x96,0x73,0x19,0x85,0x94,0x34,0xdb,0xfd,0xd2,0xf9,0xb9,0xc6,0x82,0x65,0xc1,0x90,0xe2,0x8b,0xa3}; -static const uint8_t aad_22[] = {0x16,0x44,0x00,0x93,0x60,0x32,0xde,0x67,0xa4,0x66,0x0b,0x87}; -static const uint8_t msg_22[] = {0x6c,0x9a,0x00,0x29,0xbf,0xc9,0x89,0x73,0x67,0x6d,0x42,0x08}; -static const uint8_t ct_22[] = {0x1a,0x10,0x4a,0x2d,0xe4,0x59,0xa3,0xaa,0x9f,0x7b,0x50,0x14,0x38,0xb1,0x20,0x60,0x2d,0xe2,0x7a,0x8d,0x25,0x9a,0xe4,0xf5,0x8e,0xf5,0x02,0x94}; -static const uint8_t aad_23[] = {0x00,0x90,0x02,0xfc,0xf1,0x32,0x82,0x0a,0xd3,0x83,0x89,0x38}; -static const uint8_t msg_23[] = {0x9e,0x98,0x13,0xcd,0x49,0x81,0x66,0x22,0x0b,0xd0,0xd4,0x9d,0xa9}; -static const uint8_t ct_23[] = {0x3d,0x81,0x75,0xb8,0x43,0x30,0x16,0x90,0x08,0x9b,0x8a,0xa5,0x41,0x36,0xd6,0x98,0xcc,0xd3,0xd8,0x8a,0x5d,0x02,0xa3,0xa6,0x5f,0x2b,0x11,0x5b,0x00}; -static const uint8_t aad_24[] = {0x52,0xdf,0xc3,0x2b,0xab,0x8b,0xc1,0x50,0x2d,0x18,0xa3,0x34}; -static const uint8_t msg_24[] = {0x2e,0x7a,0x1b,0x4c,0x80,0x8c,0x1c,0xf4,0xe6,0x4e,0x8c,0x5c,0xe5,0x4f}; -static const uint8_t ct_24[] = {0x9f,0xc0,0x42,0xa0,0x89,0x18,0x74,0x1e,0x2b,0x7b,0xea,0xb9,0xcd,0x79,0xd7,0x62,0x62,0x14,0xd8,0x96,0x00,0x91,0xcf,0x30,0x52,0x56,0xe5,0x49,0xee,0x36}; -static const uint8_t aad_25[] = {0x4d,0xbf,0x5c,0x20,0xce,0x4c,0xae,0xed,0xfe,0xfc,0xae,0x1d}; -static const uint8_t msg_25[] = {0xc9,0x65,0x96,0xeb,0xba,0x6f,0x89,0x76,0x1b,0x9d,0x14,0xdf,0xcc,0x8f,0xb4}; -static const uint8_t ct_25[] = {0x91,0xa7,0xf5,0xc4,0x58,0x53,0x51,0xb8,0xb7,0x6d,0x4a,0x48,0x36,0xa3,0x19,0x9a,0xa7,0x61,0xe5,0xf9,0xee,0x1c,0xdd,0x84,0x25,0x8a,0x6a,0x36,0x96,0xf7,0xe9}; -static const uint8_t aad_26[] = {0xa5,0xc2,0xf6,0xcf,0x30,0x9f,0x29,0xc2,0x5f,0x5c,0xe3,0x5d}; -static const uint8_t msg_26[] = {0xdb,0xcf,0x98,0x25,0x41,0x57,0x72,0x7c,0x35,0xf3,0x67,0xfe,0x6e,0x15,0xa2,0xd0,0x89}; -static const uint8_t ct_26[] = {0x96,0xbf,0x5d,0xd0,0xc2,0x8d,0xbd,0x60,0x72,0xb7,0x0e,0x2b,0x5b,0x72,0xd3,0xeb,0x9f,0x41,0xad,0xc6,0xd5,0xd8,0x77,0xe8,0x08,0xfb,0xf1,0x5e,0xd4,0x11,0x7b,0x50,0x07}; -static const uint8_t aad_27[] = {0xe4,0x0e,0x09,0xfe,0xa8,0x64,0x42,0xdc,0xf2,0xcd,0x17,0x6d}; -static const uint8_t msg_27[] = {0x3d,0xe2,0x18,0x65,0x21,0x7c,0x94,0xc4,0xf8,0x22,0x08,0xcc,0xd6,0x2a,0xd5,0x7f,0x13,0xba,0x1f,0x5e}; -static const uint8_t ct_27[] = {0xbe,0x36,0x6c,0xa7,0x6d,0x9a,0xfe,0x36,0xc7,0xd0,0x17,0xc1,0x22,0x1e,0x1b,0xe4,0x1a,0x59,0x4e,0x1d,0x85,0x35,0x74,0xc0,0x6d,0x23,0x57,0x75,0xb7,0x1c,0xc0,0xb5,0x6a,0x7d,0xa6,0x31}; -static const uint8_t aad_28[] = {0x34,0xea,0xfb,0x78,0x18,0x63,0xd8,0x56,0x49,0xf8,0xc9,0xb0}; -static const uint8_t msg_28[] = {0x8a,0x69,0xfb,0x2a,0xb5,0x3b,0x99,0x5d,0xaf,0x2c,0xd4,0x3f,0xc3,0x16,0x69,0x0f,0x71,0xe1,0x71,0xff,0xc5,0xab,0x84,0xf6,0x8b,0xae,0x3c,0x03,0x8a,0x9f,0xd7}; -static const uint8_t ct_28[] = {0x73,0xfb,0x50,0x1f,0x90,0x3d,0x90,0xc3,0x50,0x39,0xc0,0x65,0x56,0x3a,0x0b,0x8f,0x27,0x46,0x10,0xf0,0x5b,0x8d,0x98,0x8a,0x19,0x34,0x60,0x65,0x8d,0x32,0x5a,0x25,0x5e,0x80,0x88,0x47,0xf3,0xfa,0xf9,0x37,0xe0,0x35,0x4a,0x93,0x20,0x1a,0xb0}; -static const uint8_t aad_29[] = {0x46,0xa6,0x56,0x72,0xd2,0x69,0x92,0x67,0xab,0x27,0xda,0x82}; -static const uint8_t msg_29[] = {0x22,0x7e,0x71,0x4e,0x3e,0xfa,0x84,0xe4,0x80,0x49,0x14,0x2e,0xda,0xa3,0x11,0xda,0xb2,0x85,0x40,0x7f,0x9b,0x62,0x8b,0x14,0x6f,0x1d,0x61,0x32,0xc2,0x50,0x0c,0xa2,0x84,0x97,0xfb,0xd6,0xe3,0x86,0x67,0x9c}; -static const uint8_t ct_29[] = {0xb3,0x0e,0xc3,0xb9,0xc8,0x54,0x02,0xc3,0x56,0x72,0x83,0x91,0xac,0xf0,0x4f,0xcc,0x0d,0x02,0xba,0x85,0xb6,0xa9,0xe9,0x0c,0xf8,0x46,0x15,0x5d,0x4a,0xb3,0x15,0x89,0x52,0xbd,0x17,0x91,0x88,0x53,0x70,0xbf,0x23,0xba,0x26,0xd8,0xd2,0x33,0x59,0x63,0x7b,0x6e,0x24,0xe8,0x76,0x3e,0xd1,0x07}; -static const uint8_t aad_30[] = {0xed,0x9e,0xc5,0x61,0xec,0xf5,0xe2,0x89,0xa1,0x51,0x6c,0x9f}; -static const uint8_t msg_30[] = {0xf7,0x0e,0xf1,0x59,0x8f,0x40,0x39,0x02,0xdc,0xab,0x4c,0xc2,0x3b,0xb1,0x26,0x5f,0x34,0xe8,0x25,0xb9,0x9a,0xbc,0x61,0xb2,0x6a,0x22,0xb9,0xbb,0xf4,0x78,0xc3,0xc1,0xe6,0x1e,0x67,0xe9,0x82,0x01,0xbc,0x56,0x4d,0x02,0x2b,0x87,0xb4,0x10,0x6a,0xad,0x0c,0x4c,0xa2,0xd3,0x0e,0x89,0x27,0xfb,0xa5,0xb5,0x2a,0x76,0x97,0x1e,0xf7,0x9a,0x92,0xa1,0xeb,0x6c,0xf4,0xef,0x87,0xae,0xa6,0xb5,0x51,0x56,0x7a,0x2c,0x4c,0x41}; -static const uint8_t ct_30[] = {0xfa,0xfe,0xa5,0x5b,0xba,0x06,0x80,0xa5,0x10,0xce,0x09,0x5d,0x5c,0x8a,0x40,0xa8,0x4a,0x76,0x07,0x1b,0x89,0x38,0xdc,0xfe,0x99,0xc8,0xc7,0x3b,0x04,0x92,0x30,0xac,0x52,0xdf,0x7e,0x09,0x76,0x98,0x52,0xa6,0x05,0x73,0x53,0xa7,0xdf,0x7b,0x8d,0x18,0x88,0x2c,0xe5,0x36,0x9c,0x6b,0xb8,0x55,0xf2,0x71,0xd8,0x81,0x08,0x71,0x9a,0x1b,0x5e,0xa5,0x76,0x5f,0x54,0x9c,0x28,0x26,0x39,0xc8,0xbf,0xac,0xc3,0x4b,0x5b,0x10,0x99,0x1b,0x8f,0xbd,0xae,0x2e,0x42,0x42,0x9f,0xb7,0xf0,0x55,0x4e,0x0e,0x56,0x11}; -static const uint8_t msg_31[] = {0x1d,0x7f,0x9c,0xc8,0x1b,0x31,0x6c,0x51,0x8e,0xfc,0xd7,0x92,0x7e,0x8f,0x7b,0x88}; -static const uint8_t ct_31[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xdc,0xac,0x31,0x15,0xdd,0xbd,0x3d,0x8e,0xc2,0x88,0x22,0xe5,0x40,0x88,0xd0}; -static const uint8_t aad_32[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_32[] = {0xf1,0x6d,0x49,0x58,0xe9,0x33,0x77,0x8c,0x54,0xaa,0xbc,0xd6,0xfd,0xa1,0xca,0xbc}; -static const uint8_t ct_32[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0xce,0x79,0xa1,0xe7,0xdf,0xa6,0xe0,0x54,0x94,0xe3,0x66,0x66,0x6e,0x39,0xe4}; -static const uint8_t msg_33[] = {0x11,0x0d,0x3a,0xa6,0xf5,0x58,0xc3,0x09,0x77,0x87,0x06,0x72,0x80,0x40,0x64,0xe0}; -static const uint8_t ct_33[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xf7,0x4b,0x8e,0x43,0xa2,0x62,0x00,0x1d,0x83,0x57,0xf9,0x54,0x89,0x43,0x2e}; -static const uint8_t aad_34[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_34[] = {0xfd,0x1f,0xef,0x36,0x07,0x5a,0xd8,0xd4,0xad,0xd1,0x6d,0x36,0x03,0x6e,0xd5,0xd4}; -static const uint8_t ct_34[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xed,0xe5,0x9e,0x1e,0xb1,0xa0,0x79,0xdd,0xc7,0xd5,0x3c,0xbd,0xd7,0xa7,0xf2,0x1a}; -static const uint8_t msg_35[] = {0xc8,0x3e,0x25,0x6b,0xa8,0xba,0xec,0x09,0x38,0xe5,0x1a,0x60,0xbd,0x81,0x9c,0xc1}; -static const uint8_t ct_35[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xd8,0xc4,0x54,0x43,0x1e,0x40,0x4d,0x00,0x52,0xe1,0x4b,0xeb,0x69,0x48,0xbb,0x0f}; -static const uint8_t aad_36[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_36[] = {0x24,0x2c,0xf0,0xfb,0x5a,0xb8,0xf7,0xd4,0xe2,0xb3,0x71,0x24,0x3e,0xaf,0x2d,0xf5}; -static const uint8_t ct_36[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0x34,0xd6,0x81,0xd3,0xec,0x42,0x56,0xdd,0x88,0xb7,0x20,0xaf,0xea,0x66,0x0a,0x3b}; -static const uint8_t msg_37[] = {0xd8,0xc8,0x9e,0x8e,0xce,0x83,0xde,0x43,0x7e,0xac,0x13,0xca,0x7b,0x1e,0xbb,0x2c}; -static const uint8_t ct_37[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc8,0x32,0xef,0xa6,0x78,0x79,0x7f,0x4a,0x14,0xa8,0x42,0x41,0xaf,0xd7,0x9c,0xe2}; -static const uint8_t aad_38[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_38[] = {0x34,0xda,0x4b,0x1e,0x3c,0x81,0xc5,0x9e,0xa4,0xfa,0x78,0x8e,0xf8,0x30,0x0a,0x18}; -static const uint8_t ct_38[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x24,0x20,0x3a,0x36,0x8a,0x7b,0x64,0x97,0xce,0xfe,0x29,0x05,0x2c,0xf9,0x2d,0xd6}; -static const uint8_t msg_39[] = {0xb0,0x76,0x68,0x7f,0x33,0x46,0x0a,0xf3,0x2b,0x7f,0x0e,0xdc,0x33,0x04,0xbf,0xff}; -static const uint8_t ct_39[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xe2,0x14,0x95,0x31,0x22,0x3f,0x57,0x03,0xd3,0xcc,0xe8,0x87,0xd0,0xdf,0xe5,0x44}; -static const uint8_t aad_40[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_40[] = {0x5c,0x64,0xbd,0xef,0xc1,0x44,0x11,0x2e,0xf1,0x29,0x65,0x98,0xb0,0x2a,0x0e,0xcb}; -static const uint8_t ct_40[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x0e,0x06,0x40,0xa1,0xd0,0x3d,0x4c,0xde,0x09,0x9a,0x83,0xc3,0x53,0xf1,0x54,0x70}; -static const uint8_t ct_41[] = {0x65,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x23}; -static const uint8_t msg_42[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_42[] = {0x45,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf8,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_43[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_43[] = {0x61,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4e,0xda,0x58,0xc4,0x68,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_44[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_44[] = {0x10,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2e,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_45[] = {0x66,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x23}; -static const uint8_t msg_46[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_46[] = {0x46,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf8,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_47[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_47[] = {0x62,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4e,0xda,0x58,0xc4,0x68,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_48[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_48[] = {0x13,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2e,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_49[] = {0xe4,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x23}; -static const uint8_t msg_50[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_50[] = {0xc4,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf8,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_51[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_51[] = {0xe0,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4e,0xda,0x58,0xc4,0x68,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_52[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_52[] = {0x91,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2e,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_53[] = {0x64,0x6b,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x23}; -static const uint8_t msg_54[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_54[] = {0x44,0xc1,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf8,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_55[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_55[] = {0x60,0xe9,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4e,0xda,0x58,0xc4,0x68,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_56[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_56[] = {0x11,0xed,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2e,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_57[] = {0x64,0x6a,0x1c,0xbe,0xfe,0xb7,0xd2,0x58,0x9b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x23}; -static const uint8_t msg_58[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_58[] = {0x44,0xc0,0xcc,0x89,0xb8,0xcc,0x0c,0x37,0xf8,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_59[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_59[] = {0x60,0xe8,0x02,0x17,0xb0,0xba,0x41,0xc5,0x4e,0xda,0x58,0xc4,0x68,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_60[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_60[] = {0x11,0xec,0xf9,0xf2,0xc0,0x02,0x09,0x65,0x2e,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_61[] = {0x64,0x6a,0x1c,0x3e,0xff,0xb7,0xd2,0x58,0x9b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x23}; -static const uint8_t msg_62[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_62[] = {0x44,0xc0,0xcc,0x09,0xb9,0xcc,0x0c,0x37,0xf8,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_63[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_63[] = {0x60,0xe8,0x02,0x97,0xb1,0xba,0x41,0xc5,0x4e,0xda,0x58,0xc4,0x68,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_64[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_64[] = {0x11,0xec,0xf9,0x72,0xc1,0x02,0x09,0x65,0x2e,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_65[] = {0x64,0x6a,0x1c,0x3e,0xfc,0xb7,0xd2,0x58,0x9b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x23}; -static const uint8_t msg_66[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_66[] = {0x44,0xc0,0xcc,0x09,0xba,0xcc,0x0c,0x37,0xf8,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_67[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_67[] = {0x60,0xe8,0x02,0x97,0xb2,0xba,0x41,0xc5,0x4e,0xda,0x58,0xc4,0x68,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_68[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_68[] = {0x11,0xec,0xf9,0x72,0xc2,0x02,0x09,0x65,0x2e,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_69[] = {0x64,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0xd8,0x9b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x23}; -static const uint8_t msg_70[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_70[] = {0x44,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0xb7,0xf8,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_71[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_71[] = {0x60,0xe8,0x02,0x97,0xb0,0xba,0x41,0x45,0x4e,0xda,0x58,0xc4,0x68,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_72[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_72[] = {0x11,0xec,0xf9,0x72,0xc0,0x02,0x09,0xe5,0x2e,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_73[] = {0x64,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9a,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x23}; -static const uint8_t msg_74[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_74[] = {0x44,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf9,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_75[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_75[] = {0x60,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4f,0xda,0x58,0xc4,0x68,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_76[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_76[] = {0x11,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2f,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_77[] = {0x64,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x1b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x23}; -static const uint8_t msg_78[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_78[] = {0x44,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0x78,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_79[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_79[] = {0x60,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0xce,0xda,0x58,0xc4,0x68,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_80[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_80[] = {0x11,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0xae,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_81[] = {0x64,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9b,0xdd,0xd0,0x89,0x2c,0xc8,0x69,0x23}; -static const uint8_t msg_82[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_82[] = {0x44,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf8,0x42,0x6b,0x36,0xda,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_83[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_83[] = {0x60,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4e,0xfa,0x58,0xc4,0x68,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_84[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_84[] = {0x11,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2e,0x86,0xef,0x4a,0x3b,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_85[] = {0x64,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9b,0xfd,0xd1,0x89,0x2c,0xc8,0x69,0x23}; -static const uint8_t msg_86[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_86[] = {0x44,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf8,0x62,0x6a,0x36,0xda,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_87[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_87[] = {0x60,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4e,0xda,0x59,0xc4,0x68,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_88[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_88[] = {0x11,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2e,0xa6,0xee,0x4a,0x3b,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_89[] = {0x64,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9b,0xfd,0xd0,0x89,0x2d,0xc8,0x69,0x23}; -static const uint8_t msg_90[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_90[] = {0x44,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf8,0x62,0x6b,0x36,0xdb,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_91[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_91[] = {0x60,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4e,0xda,0x58,0xc4,0x69,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_92[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_92[] = {0x11,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2e,0xa6,0xef,0x4a,0x3a,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_93[] = {0x64,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9b,0xfd,0xd0,0x89,0x2e,0xc8,0x69,0x23}; -static const uint8_t msg_94[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_94[] = {0x44,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf8,0x62,0x6b,0x36,0xd8,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_95[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_95[] = {0x60,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4e,0xda,0x58,0xc4,0x6a,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_96[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_96[] = {0x11,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2e,0xa6,0xef,0x4a,0x39,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_97[] = {0x64,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9b,0xfd,0xd0,0x89,0xac,0xc8,0x69,0x23}; -static const uint8_t msg_98[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_98[] = {0x44,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf8,0x62,0x6b,0x36,0x5a,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_99[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_99[] = {0x60,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4e,0xda,0x58,0xc4,0xe8,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_100[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_100[] = {0x11,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2e,0xa6,0xef,0x4a,0xbb,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_101[] = {0x64,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x22}; -static const uint8_t msg_102[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_102[] = {0x44,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf8,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xf2,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_103[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_103[] = {0x60,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4e,0xda,0x58,0xc4,0x68,0x50,0x2b,0x33,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_104[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_104[] = {0x11,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2e,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x22,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_105[] = {0x64,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x21}; -static const uint8_t msg_106[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_106[] = {0x44,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf8,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xf1,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_107[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_107[] = {0x60,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4e,0xda,0x58,0xc4,0x68,0x50,0x2b,0x30,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_108[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_108[] = {0x11,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2e,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x21,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_109[] = {0x64,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x63}; -static const uint8_t msg_110[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_110[] = {0x44,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf8,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xb3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_111[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_111[] = {0x60,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4e,0xda,0x58,0xc4,0x68,0x50,0x2b,0x72,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_112[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_112[] = {0x11,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2e,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x63,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_113[] = {0x64,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0xa3}; -static const uint8_t msg_114[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_114[] = {0x44,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf8,0x62,0x6b,0x36,0xda,0xb9,0x5d,0x73,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_115[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_115[] = {0x60,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4e,0xda,0x58,0xc4,0x68,0x50,0x2b,0xb2,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_116[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_116[] = {0x11,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2e,0xa6,0xef,0x4a,0x3b,0x46,0xea,0xa3,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_117[] = {0x65,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0x58,0x9a,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x23}; -static const uint8_t msg_118[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_118[] = {0x45,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0x37,0xf9,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_119[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_119[] = {0x61,0xe8,0x02,0x97,0xb0,0xba,0x41,0xc5,0x4f,0xda,0x58,0xc4,0x68,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_120[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_120[] = {0x10,0xec,0xf9,0x72,0xc0,0x02,0x09,0x65,0x2f,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_121[] = {0x64,0x6a,0x1c,0xbe,0xfe,0xb7,0xd2,0xd8,0x9b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0x23}; -static const uint8_t msg_122[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_122[] = {0x44,0xc0,0xcc,0x89,0xb8,0xcc,0x0c,0xb7,0xf8,0x62,0x6b,0x36,0xda,0xb9,0x5d,0xf3,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_123[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_123[] = {0x60,0xe8,0x02,0x17,0xb0,0xba,0x41,0x45,0x4e,0xda,0x58,0xc4,0x68,0x50,0x2b,0x32,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_124[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_124[] = {0x11,0xec,0xf9,0xf2,0xc0,0x02,0x09,0xe5,0x2e,0xa6,0xef,0x4a,0x3b,0x46,0xea,0x23,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_125[] = {0x64,0x6a,0x1c,0x3e,0xfe,0xb7,0xd2,0xd8,0x9b,0xfd,0xd0,0x89,0x2c,0xc8,0x69,0xa3}; -static const uint8_t msg_126[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_126[] = {0x44,0xc0,0xcc,0x09,0xb8,0xcc,0x0c,0xb7,0xf8,0x62,0x6b,0x36,0xda,0xb9,0x5d,0x73,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_127[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_127[] = {0x60,0xe8,0x02,0x97,0xb0,0xba,0x41,0x45,0x4e,0xda,0x58,0xc4,0x68,0x50,0x2b,0xb2,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_128[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_128[] = {0x11,0xec,0xf9,0x72,0xc0,0x02,0x09,0xe5,0x2e,0xa6,0xef,0x4a,0x3b,0x46,0xea,0xa3,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_129[] = {0x9b,0x95,0xe3,0xc1,0x01,0x48,0x2d,0xa7,0x64,0x02,0x2f,0x76,0xd3,0x37,0x96,0xdc}; -static const uint8_t msg_130[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_130[] = {0xbb,0x3f,0x33,0xf6,0x47,0x33,0xf3,0xc8,0x07,0x9d,0x94,0xc9,0x25,0x46,0xa2,0x0c,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_131[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_131[] = {0x9f,0x17,0xfd,0x68,0x4f,0x45,0xbe,0x3a,0xb1,0x25,0xa7,0x3b,0x97,0xaf,0xd4,0xcd,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_132[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_132[] = {0xee,0x13,0x06,0x8d,0x3f,0xfd,0xf6,0x9a,0xd1,0x59,0x10,0xb5,0xc4,0xb9,0x15,0xdc,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_133[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -static const uint8_t msg_134[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_134[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_135[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_135[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_136[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_136[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_137[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; -static const uint8_t msg_138[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_138[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_139[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_139[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_140[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_140[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_141[] = {0xe4,0xea,0x9c,0xbe,0x7e,0x37,0x52,0xd8,0x1b,0x7d,0x50,0x09,0xac,0x48,0xe9,0xa3}; -static const uint8_t msg_142[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_142[] = {0xc4,0x40,0x4c,0x89,0x38,0x4c,0x8c,0xb7,0x78,0xe2,0xeb,0xb6,0x5a,0x39,0xdd,0x73,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_143[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_143[] = {0xe0,0x68,0x82,0x17,0x30,0x3a,0xc1,0x45,0xce,0x5a,0xd8,0x44,0xe8,0xd0,0xab,0xb2,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_144[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_144[] = {0x91,0x6c,0x79,0xf2,0x40,0x82,0x89,0xe5,0xae,0x26,0x6f,0xca,0xbb,0xc6,0x6a,0xa3,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_145[] = {0x65,0x6b,0x1d,0x3f,0xff,0xb6,0xd3,0x59,0x9a,0xfc,0xd1,0x88,0x2d,0xc9,0x68,0x22}; -static const uint8_t msg_146[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_146[] = {0x45,0xc1,0xcd,0x08,0xb9,0xcd,0x0d,0x36,0xf9,0x63,0x6a,0x37,0xdb,0xb8,0x5c,0xf2,0x2a,0xa0,0x3c,0xea,0xfa,0x0e,0x45,0xe6}; -static const uint8_t msg_147[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_147[] = {0x61,0xe9,0x03,0x96,0xb1,0xbb,0x40,0xc4,0x4f,0xdb,0x59,0xc5,0x69,0x51,0x2a,0x33,0xda,0x4e,0x0e,0xfa,0x57,0x35,0x2f,0x1a,0x11,0x4e,0x4b,0x3f,0x0c,0xb2,0x34,0xc6}; -static const uint8_t msg_148[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_148[] = {0x10,0xed,0xf8,0x73,0xc1,0x03,0x08,0x64,0x2f,0xa7,0xee,0x4b,0x3a,0x47,0xeb,0x22,0x59,0xe6,0xfa,0xeb,0xd6,0xaf,0x70,0x63,0xc8,0x66,0x03,0x62,0x86,0x6f,0x1b,0x2a,0xf5,0x3a,0x98,0x9e}; -static const uint8_t ct_149[] = {0x59,0xe0,0xa9,0xa0,0x4c,0xdb,0x1d,0x9d,0x7b,0xee,0x6b,0xe8,0xbb,0x06,0xfd,0x61}; -static const uint8_t aad_150[] = {0xb4,0x02,0xae,0x88,0x04,0x87,0xcf,0xaa,0x93,0x14,0x54,0x9b}; -static const uint8_t ct_150[] = {0xb5,0x0b,0xe5,0xe4,0x6a,0x39,0x12,0xdc,0xac,0xff,0x27,0x11,0x5e,0x20,0x9e,0x24}; -static const uint8_t aad_151[] = {0x3f,0x33,0xc7,0x81,0xea,0x57,0xec,0x1c,0x29,0x8f,0x40,0x2c,0xbb,0xd2,0x7e}; -static const uint8_t ct_151[] = {0x2a,0xec,0x07,0xdb,0x61,0xe8,0xe4,0x03,0xfa,0x04,0x65,0x99,0x21,0xcc,0xaf,0x65}; -static const uint8_t aad_152[] = {0xbd,0x2a,0xa0,0x7a,0x70,0xac,0xa6,0x9c,0x46,0x21,0xd9,0x1a,0x66,0x86,0xf4,0x2a}; -static const uint8_t ct_152[] = {0x86,0x31,0x61,0xc6,0x7e,0x86,0x64,0x83,0x40,0xfc,0x5e,0xab,0x9f,0xb7,0x28,0xa7}; -static const uint8_t aad_153[] = {0x9c,0xe5,0x88,0xda,0xa7,0x9d,0x68,0x25,0x30,0x5a,0x97,0x57,0x2d,0x27,0x67,0x4a,0x96,0x02,0xbf,0xeb}; -static const uint8_t ct_153[] = {0x4c,0x9c,0xb5,0x2e,0x91,0xee,0x8f,0xd7,0x84,0xe9,0x90,0x1b,0x2b,0xbf,0xd0,0x7e}; -static const uint8_t aad_154[] = {0x96,0x0d,0xba,0xaf,0xf3,0x75,0x10,0x15,0x29,0xf1,0x93,0xa5,0xb7,0xad,0xc2,0xcd,0x95,0xa3,0x6b,0x72,0x22,0xdf,0x7e,0x9f,0x6f,0xbf,0x31,0x10,0xe1,0x64,0x62,0xa1}; -static const uint8_t ct_154[] = {0xff,0xfc,0x48,0x6f,0x02,0x99,0x70,0x39,0x02,0x92,0x61,0x86,0xe4,0x39,0x32,0xd0}; -static const uint8_t aad_155[] = {0xd4,0xdb,0xfd,0xce,0x11,0xf1,0x14,0x7e,0x29,0xdd,0x06,0x2e,0xa3,0xbb,0xbd,0x17}; -static const uint8_t msg_155[] = {0xde,0xd5,0xa1,0x3d,0x75,0x99,0x03,0xec,0xd3,0x6c,0xb2,0x38,0x52,0x77,0x76,0xc6}; -static const uint8_t ct_155[] = {0xa4,0xe0,0x8b,0xdd,0x8a,0xb8,0xcb,0xef,0x46,0xe0,0xfd,0xb8,0xa7,0xca,0x10,0x97,0xa8,0xf9,0x63,0xe4,0x5e,0x55,0x4a,0x58,0x82,0x49,0x62,0x70,0xf9,0xfd,0x6d,0xe8}; -static const uint8_t aad_156[] = {0x2e,0x4b,0x50,0x22,0x12,0x84,0xbc,0x07,0xd7,0xe3,0x0b,0x1a,0x66,0x21,0x67,0x6d}; -static const uint8_t msg_156[] = {0xd0,0x53,0x54,0x03,0xfe,0xd2,0xc1,0xde,0xc9,0xf8,0x58,0xee,0xbd,0x68,0x8a,0xfe,0x4d,0x00,0x10,0xb2,0x82,0x32,0x75,0xd1,0xba,0xcf,0xd5,0x64,0xc0,0x74,0x41,0x5f}; -static const uint8_t ct_156[] = {0x01,0x31,0x70,0x5a,0x9a,0x6c,0x64,0x5f,0x13,0xfe,0x46,0x79,0xbd,0x03,0xda,0xac,0x23,0x4b,0xc1,0x1d,0xb1,0xf0,0x94,0x1b,0xe0,0x78,0x8c,0x1c,0x14,0xbb,0xf9,0x5e,0xf1,0xdb,0xfb,0xdf,0x5a,0xf7,0x86,0xa5,0xa5,0xa3,0xa7,0xd4,0xf3,0x5f,0xd1,0x69}; -static const uint8_t aad_157[] = {0x99,0x9a,0x35,0x70,0x55,0x30,0xc2,0xf6,0xa7,0xf2,0x42,0x7d,0x6b,0x25,0x88,0x36}; -static const uint8_t msg_157[] = {0xcd,0x9b,0xfe,0x98,0x21,0xb1,0xa5,0x89,0x57,0x37,0xa8,0x27,0xb4,0x1e,0x0e,0xe2,0x71,0xab,0x26,0x87,0x12,0x8b,0xb8,0x7f,0x17,0x37,0x09,0xb7,0x3b,0xf1,0x8c,0x7c,0x25,0x82,0x2f,0x32,0x28,0x28,0x95,0xca,0x89,0x35,0xdb,0x00,0xa1,0xd1,0x71,0xdb}; -static const uint8_t ct_157[] = {0xd2,0x37,0xa9,0xdd,0x9e,0xa0,0xf7,0x0e,0xbc,0x55,0x26,0xfd,0x5e,0x41,0x4f,0x31,0x8c,0x8a,0x01,0x6b,0xc6,0xec,0xbc,0xb3,0xde,0x5f,0x0a,0xff,0x93,0x30,0x25,0x9e,0x67,0xb4,0x98,0x4f,0x13,0xfb,0x7e,0x90,0x4a,0xe8,0xac,0x91,0xd8,0xe3,0x5f,0xaf,0x41,0xad,0x86,0x0b,0xc9,0x42,0x3d,0x2e,0xf5,0x96,0xc1,0x3e,0x15,0x02,0x5c,0xdf}; -static const uint8_t aad_158[] = {0x06,0xb2,0xcd,0x26,0x1a,0x35,0x08,0xa7,0xbf,0xd1,0xc0,0x49}; -static const uint8_t msg_158[] = {0x7e}; -static const uint8_t ct_158[] = {0x00,0x2a,0xbe,0xac,0x97,0x8f,0x66,0xd9,0x34,0xb9,0xed,0x06,0xf2,0x15,0xc4,0x95,0x1d}; -static const uint8_t aad_159[] = {0x90,0xf6,0x05,0xa2,0xcf,0x3f,0xf6,0xe7,0x9d,0x6a,0xd4,0xb9}; -static const uint8_t msg_159[] = {0x5b,0xff}; -static const uint8_t ct_159[] = {0xae,0x43,0xeb,0x59,0x49,0x4a,0x5f,0xe7,0xa7,0xca,0xc8,0xd5,0xd2,0x0f,0x7d,0x40,0x17,0x7f}; -static const uint8_t aad_160[] = {0x80,0x23,0x5b,0x12,0xc8,0x40,0xe3,0xfd,0x50,0xdc,0x62,0xfd}; -static const uint8_t msg_160[] = {0x8b,0x2a,0x68}; -static const uint8_t ct_160[] = {0x6b,0x8c,0x54,0xcd,0x6d,0x99,0xf5,0x47,0x0a,0x24,0x61,0xae,0xf6,0x14,0x01,0x2c,0xee,0x73,0x41}; -static const uint8_t aad_161[] = {0x43,0x63,0x4a,0x36,0x68,0xf7,0x8c,0x0b,0x00,0x59,0x71,0x66}; -static const uint8_t msg_161[] = {0x41,0xa1,0x24,0x1d}; -static const uint8_t ct_161[] = {0xad,0x0d,0x30,0x2a,0x32,0x2c,0xa7,0x3b,0x55,0x14,0xd8,0xcf,0xd6,0xd4,0x04,0x78,0xfc,0x60,0xae,0xe6}; -static const uint8_t aad_162[] = {0x26,0x30,0x6f,0x1d,0x6a,0x43,0x16,0x52,0x2a,0x92,0x87,0x15}; -static const uint8_t msg_162[] = {0x22,0xfa,0xba,0x30,0x76}; -static const uint8_t ct_162[] = {0x71,0x7e,0x9e,0x25,0x28,0x6a,0xc7,0xeb,0x4d,0x5a,0xa5,0x0e,0x61,0x30,0x46,0xc4,0x29,0x6f,0x69,0x3b,0xf4}; -static const uint8_t aad_163[] = {0x8f,0xf6,0x66,0x16,0x3c,0x2a,0xf9,0x9f,0x3e,0x65,0x3b,0x38}; -static const uint8_t msg_163[] = {0x2e,0xf9,0x0d,0x77,0xc7,0x25}; -static const uint8_t ct_163[] = {0xc1,0x11,0x78,0xfb,0x46,0xa4,0x33,0x4d,0xf8,0x04,0x4c,0xa1,0x74,0x6d,0xdd,0x12,0x9c,0xa6,0x18,0x5d,0x21,0xe1}; -static const uint8_t aad_164[] = {0xe5,0xcb,0x90,0x7e,0x8d,0xf4,0x2f,0x0e,0x56,0x8e,0x58,0x8a}; -static const uint8_t msg_164[] = {0x8f,0x1d,0xbf,0xb8,0xc9,0xdd,0x6a}; -static const uint8_t ct_164[] = {0x53,0x3f,0xa1,0x78,0x1a,0xf3,0xa3,0x67,0x9e,0x57,0x79,0xc9,0xc7,0xc7,0x27,0xfa,0x5a,0x1d,0x20,0xd7,0xa8,0x9f,0x6c}; -static const uint8_t aad_165[] = {0x82,0x5d,0x77,0x13,0x73,0xd6,0xe0,0x19,0x04,0x3d,0xd2,0xa0}; -static const uint8_t msg_165[] = {0x3d,0xa0,0x9c,0x27,0x59,0x06,0x83,0x5f}; -static const uint8_t ct_165[] = {0x05,0x28,0xc0,0x21,0x15,0x86,0x09,0xe0,0x7d,0x3c,0x71,0xfd,0x36,0x33,0x65,0xa6,0x44,0xca,0x61,0xb9,0x32,0xc1,0x61,0xba}; -static const uint8_t aad_166[] = {0x98,0x76,0x04,0xce,0xe2,0x9b,0x9e,0xe3,0x2f,0x26,0xf3,0x32}; -static const uint8_t msg_166[] = {0xcf,0x1e,0x93,0xa0,0x67,0xed,0x6b,0x4f,0x26}; -static const uint8_t ct_166[] = {0x4f,0x4d,0x35,0x33,0xc0,0xa6,0xd2,0x30,0x2c,0xc3,0xce,0x54,0x7c,0xa7,0x8f,0x1d,0x6d,0xce,0x6f,0x33,0x3c,0xca,0x0f,0xe8,0x89}; -static const uint8_t aad_167[] = {0x80,0xb9,0x53,0x4f,0x1e,0x83,0x59,0x82,0x35,0xc8,0x56,0x90}; -static const uint8_t msg_167[] = {0xb8,0x1c,0xc3,0xa3,0x82,0xa1,0xad,0x29,0xc1,0xdd}; -static const uint8_t ct_167[] = {0xc4,0xc9,0x7f,0x0c,0x35,0x30,0x98,0x1b,0xca,0xde,0x42,0xa1,0x74,0xa6,0x50,0x38,0xd8,0x92,0x5e,0xd8,0xa5,0xde,0xce,0xe8,0xa7,0xc6}; -static const uint8_t aad_168[] = {0x1b,0x7a,0x5c,0xe2,0xff,0x40,0x5b,0x01,0x91,0x25,0x91,0x0b}; -static const uint8_t msg_168[] = {0x96,0x2c,0x7c,0x7c,0xa5,0xbd,0xfc,0xbc,0xb3,0xeb,0xa4}; -static const uint8_t ct_168[] = {0x2d,0x60,0xae,0x19,0xa3,0x8f,0x40,0x0e,0x0e,0xd7,0x8b,0x65,0xdb,0x3d,0xf8,0x52,0xf4,0x1f,0x0d,0x1e,0x22,0xc9,0x17,0xb4,0x2e,0x7c,0x5a}; -static const uint8_t aad_169[] = {0xb5,0x5d,0x19,0x77,0x2f,0x27,0x76,0x77,0x2c,0x04,0x07,0x8a}; -static const uint8_t msg_169[] = {0x3c,0x32,0xca,0xfe,0xed,0xcc,0xe5,0x41,0x08,0xe3,0x95,0x88}; -static const uint8_t ct_169[] = {0xb9,0x72,0x90,0xf5,0xf2,0x25,0xd0,0x5b,0x40,0x70,0x4c,0x53,0xee,0x8f,0xdf,0xcf,0xfd,0x97,0x21,0x85,0xaa,0x96,0xd4,0xdb,0x4b,0x8d,0xdb,0x16}; -static const uint8_t aad_170[] = {0xb6,0x0c,0x69,0xa4,0xbe,0xfe,0xd3,0x9e,0xac,0x27,0x79,0x0b}; -static const uint8_t msg_170[] = {0x55,0x0d,0x0e,0x8b,0x83,0x73,0xa2,0x7e,0x40,0x72,0xa5,0xb7,0x6c}; -static const uint8_t ct_170[] = {0x0a,0xfe,0x67,0x5b,0x5b,0x92,0xfe,0xbd,0xdc,0x6b,0xd6,0xd4,0x50,0x71,0x5a,0xd4,0xda,0x97,0x71,0x1b,0xfb,0xf3,0x46,0x5d,0xa4,0x08,0x51,0x74,0x01}; -static const uint8_t aad_171[] = {0x29,0xd8,0x34,0xbc,0x7b,0xdd,0x2a,0x3e,0x95,0xae,0x83,0x08}; -static const uint8_t msg_171[] = {0xc9,0x69,0xbd,0x4b,0x5a,0xcf,0x1f,0x7b,0x50,0x0f,0x8f,0x21,0xf3,0xc9}; -static const uint8_t ct_171[] = {0x92,0xe1,0x43,0xe4,0x57,0xbe,0x47,0xa1,0x8c,0xa6,0x82,0x78,0x11,0x32,0x0c,0xe9,0xc7,0x0a,0x1b,0x4e,0x0e,0xf6,0x4c,0xf3,0x65,0x8b,0x25,0xcd,0x8f,0x51}; -static const uint8_t aad_172[] = {0xc3,0xf0,0xf5,0xc4,0x38,0xde,0x5f,0xd8,0x5b,0x7a,0x21,0xaf}; -static const uint8_t msg_172[] = {0xe8,0xd7,0xac,0x78,0xd2,0x80,0x5b,0xfd,0x65,0x66,0x34,0xd1,0x9b,0x58,0x34}; -static const uint8_t ct_172[] = {0x2e,0xea,0x01,0x15,0xc3,0x4a,0x46,0x1d,0x4d,0xe5,0xde,0x4a,0x41,0xb9,0x65,0x4b,0x8a,0xa8,0x7b,0x4c,0xc9,0x44,0xc0,0x50,0x57,0xf5,0xb3,0x06,0x94,0x2a,0x0f}; -static const uint8_t aad_173[] = {0xb4,0x9b,0x12,0xba,0x14,0x0f,0xa8,0xd7,0x94,0xa3,0x17,0x38}; -static const uint8_t msg_173[] = {0x34,0x06,0x12,0xda,0x2d,0x2d,0xbb,0xd2,0x5d,0x7f,0xa0,0x5c,0x77,0x5a,0x6e,0xcf,0xa8}; -static const uint8_t ct_173[] = {0xad,0xc7,0x24,0xb7,0xfa,0xbb,0xad,0x10,0x36,0xde,0xd1,0x52,0xb9,0x68,0xe5,0x57,0xa4,0xa1,0xb3,0xf5,0x01,0x4f,0x42,0xf8,0x4a,0x21,0xca,0x45,0x72,0x7f,0x4b,0x43,0x39}; -static const uint8_t aad_174[] = {0xb9,0x6c,0x86,0x82,0xcd,0x3c,0xe6,0x76,0xb0,0xd7,0x98,0x65}; -static const uint8_t msg_174[] = {0x14,0x85,0x12,0x6d,0x04,0x76,0xbb,0x4b,0x86,0xd0,0x87,0xd1,0x89,0x26,0x32,0xb5,0x3c,0xb4,0xf8,0xa2}; -static const uint8_t ct_174[] = {0x8f,0xd1,0x21,0x4e,0x80,0x78,0x2d,0x7c,0x14,0x00,0x7d,0x03,0x7f,0xeb,0x1a,0xb1,0x81,0xfd,0xcb,0x20,0x98,0x58,0x87,0xb5,0xee,0x8d,0x4a,0xcf,0x55,0x89,0x92,0x4b,0xe6,0x44,0x94,0x7d}; -static const uint8_t aad_175[] = {0x0f,0x1e,0xb4,0xee,0xe4,0x61,0x61,0x5b,0xc0,0xbe,0x84,0x74}; -static const uint8_t msg_175[] = {0x80,0xd9,0x77,0x96,0x5a,0x88,0x0b,0xc6,0xbb,0x5e,0x1c,0xc9,0x2f,0x23,0x47,0x71,0xad,0xb6,0x1e,0x7a,0xe7,0x19,0x88,0x44,0x62,0x3c,0x6b,0x1d,0x1b,0x54,0xec}; -static const uint8_t ct_175[] = {0x0d,0xa4,0xc7,0x88,0x5f,0xfc,0x41,0x25,0x87,0x8e,0xfe,0x1d,0x14,0xeb,0x5f,0x64,0x74,0x0b,0xca,0xed,0x91,0x50,0x88,0x80,0x6c,0x89,0xfb,0x2e,0xfd,0xde,0x2a,0x5b,0x0d,0x89,0xae,0xef,0x6a,0x23,0x24,0xba,0x26,0x26,0xb4,0x21,0x13,0xee,0x27}; -static const uint8_t aad_176[] = {0x7f,0xe4,0x97,0xba,0xcf,0x30,0xaf,0x3a,0x85,0x66,0x2a,0xa1}; -static const uint8_t msg_176[] = {0xb1,0xb1,0x97,0xcd,0x7f,0xf6,0x8b,0x62,0xe2,0x74,0xf5,0xd1,0x04,0x6f,0x42,0xf9,0x81,0x71,0x63,0xf0,0xa1,0x05,0xa0,0xfb,0x77,0x36,0xfa,0x9e,0x5e,0x8f,0x76,0x94,0x4a,0x22,0x28,0x2a,0xf4,0x80,0xee,0x79}; -static const uint8_t ct_176[] = {0xb4,0x40,0x39,0xf1,0xe5,0xba,0x80,0x8c,0xa0,0x55,0xae,0xa6,0xbc,0x2d,0x81,0x9d,0x38,0x8e,0x3c,0x27,0x1c,0xd9,0x7c,0x04,0x60,0x61,0xe5,0x72,0x23,0xbb,0xc2,0xa1,0x7a,0xa9,0xb3,0x68,0xd5,0xcf,0x28,0x1d,0xe4,0x6f,0x48,0xb3,0x4d,0x17,0x9c,0x16,0xcc,0x9e,0x9d,0x46,0x00,0xa8,0x7a,0xf4}; -static const uint8_t aad_177[] = {0x01,0x68,0x5c,0x58,0xb1,0x48,0x05,0xd6,0x36,0x54,0x11,0x79}; -static const uint8_t msg_177[] = {0x81,0xc8,0xa1,0x0f,0xcd,0x66,0x81,0x00,0xdc,0x76,0x21,0x25,0xe0,0x36,0x27,0xac,0x4e,0x68,0xd3,0x4c,0x72,0x56,0x8b,0xe4,0x38,0xa7,0xa0,0x68,0xc2,0x7e,0x2f,0x12,0xe2,0xf1,0x78,0x23,0xe4,0x1f,0xdd,0x13,0xe5,0x36,0x16,0xc6,0x22,0xd4,0xf3,0x20,0xa3,0x8f,0x97,0xc2,0xed,0xea,0xd9,0x80,0x0e,0xd1,0x09,0x1c,0x30,0x3f,0x10,0xd1,0x72,0xa2,0x84,0x28,0x4d,0x86,0x70,0x8e,0x53,0xde,0xdc,0x82,0xf6,0xa7,0x36,0x6b}; -static const uint8_t ct_177[] = {0xaa,0x3d,0x2c,0xd7,0x32,0x97,0x4b,0x73,0x35,0x97,0xa3,0x69,0xd4,0x7a,0x68,0x01,0x32,0xdd,0x5a,0x94,0x44,0x31,0x23,0x1e,0x6f,0x77,0x12,0x2d,0x40,0xae,0x70,0xc5,0xd0,0x32,0xcc,0x7d,0x62,0x20,0x8f,0x42,0x8e,0x6a,0x93,0x1c,0x7d,0xa6,0xe8,0x83,0x64,0xd5,0xce,0x1a,0x4d,0x94,0x03,0x43,0x67,0x40,0xb9,0xe7,0x14,0xa2,0xc3,0xb2,0x39,0xfe,0xbe,0x6a,0x6a,0x7b,0x42,0xf7,0x88,0x94,0x44,0x2c,0x91,0x2e,0x6a,0x9c,0x22,0xea,0x95,0x48,0xef,0x85,0x54,0x0c,0xa7,0x6d,0x7c,0x6d,0xf4,0x2b,0x65,0x34}; -static const uint8_t msg_178[] = {0x05,0xae,0x1d,0xed,0x78,0xb9,0x27,0xe7,0xbf,0x55,0x60,0x57,0x1e,0x17,0x77,0x60}; -static const uint8_t ct_178[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x46,0x0a,0xba,0x44,0xa6,0x80,0xfc,0x6c,0x77,0x6c,0x00,0xa1,0xe9,0x4b,0x6b}; -static const uint8_t aad_179[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_179[] = {0x11,0xa7,0xfa,0xe3,0xb1,0xb8,0x29,0x7b,0x31,0xbd,0xea,0x77,0xa8,0xd6,0xd6,0x7c}; -static const uint8_t ct_179[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x95,0x4f,0xed,0xb4,0x8d,0xa7,0x8e,0x60,0xe2,0x9f,0xe6,0x20,0x17,0x28,0xea,0x77}; -static const uint8_t msg_180[] = {0x3d,0xe1,0xfd,0x2f,0xf8,0xd5,0x26,0x00,0x05,0xed,0xbf,0x9b,0x59,0xb6,0xcf,0x06}; -static const uint8_t ct_180[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe8,0xa5,0x6d,0xba,0xe8,0x84,0xe9,0x90,0xcc,0x0d,0xf1,0x80,0xd5,0xe4,0x56,0xba}; -static const uint8_t aad_181[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_181[] = {0x29,0xe8,0x1a,0x21,0x31,0xd4,0x28,0x9c,0x8b,0x05,0x35,0xbb,0xef,0x77,0x6e,0x1a}; -static const uint8_t ct_181[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xac,0x8a,0xb4,0x21,0x85,0xe7,0x0c,0x42,0xe5,0x7b,0xa0,0x63,0x25,0xf7,0xa6}; -static const uint8_t msg_182[] = {0xb3,0xc7,0x5b,0x1d,0x29,0xb3,0xd5,0xd0,0x95,0x01,0xc4,0x29,0xc3,0xb8,0xfa,0xf2}; -static const uint8_t ct_182[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0x66,0x83,0xcb,0x88,0x39,0xe2,0x1a,0x40,0x5c,0xe1,0x8a,0x32,0x4f,0xea,0x63,0x4e}; -static const uint8_t aad_183[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_183[] = {0xa7,0xce,0xbc,0x13,0xe0,0xb2,0xdb,0x4c,0x1b,0xe9,0x4e,0x09,0x75,0x79,0x5b,0xee}; -static const uint8_t ct_183[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0x72,0x8a,0x2c,0x86,0xf0,0xe3,0x14,0xdc,0xd2,0x09,0x00,0x12,0xf9,0x2b,0xc2,0x52}; -static const uint8_t msg_184[] = {0x6a,0x14,0x2a,0x89,0x09,0xed,0x51,0xe7,0xb2,0xd7,0x7f,0xd0,0x71,0xf2,0x30,0xdf}; -static const uint8_t ct_184[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x50,0xba,0x1c,0x19,0xbc,0x9e,0x77,0x7b,0x37,0x31,0xcb,0xfd,0xa0,0xa9,0x63}; -static const uint8_t aad_185[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_185[] = {0x7e,0x1d,0xcd,0x87,0xc0,0xec,0x5f,0x7b,0x3c,0x3f,0xf5,0xf0,0xc7,0x33,0x91,0xc3}; -static const uint8_t ct_185[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0x59,0x5d,0x12,0xd0,0xbd,0x90,0xeb,0xf5,0xdf,0xbb,0xeb,0x4b,0x61,0x08,0x7f}; -static const uint8_t msg_186[] = {0xe7,0x20,0x2a,0xbb,0xfe,0x6f,0xcf,0xfa,0x78,0x87,0xa7,0xef,0x06,0x84,0x00,0x40}; -static const uint8_t ct_186[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xa0,0xd0,0x32,0xef,0xc9,0x53,0x3b,0xf7,0xbb,0x8a,0xc7,0xaf,0x5c,0x9c,0x7c,0xdc}; -static const uint8_t aad_187[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_187[] = {0xf3,0x29,0xcd,0xb5,0x37,0x6e,0xc1,0x66,0xf6,0x6f,0x2d,0xcf,0xb0,0x45,0xa1,0x5c}; -static const uint8_t ct_187[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xb4,0xd9,0xd5,0xe1,0x00,0x52,0x35,0x6b,0x35,0x62,0x4d,0x8f,0xea,0x5d,0xdd,0xc0}; -static const uint8_t ct_188[] = {0xe9,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xe0}; -static const uint8_t msg_189[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_189[] = {0xa3,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfd,0xf5,0x20,0x58,0x8d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_190[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_190[] = {0xe9,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdc,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_191[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_191[] = {0xc2,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0xac,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_192[] = {0xea,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xe0}; -static const uint8_t msg_193[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_193[] = {0xa0,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfd,0xf5,0x20,0x58,0x8d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_194[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_194[] = {0xea,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdc,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_195[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_195[] = {0xc1,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0xac,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_196[] = {0x68,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xe0}; -static const uint8_t msg_197[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_197[] = {0x22,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfd,0xf5,0x20,0x58,0x8d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_198[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_198[] = {0x68,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdc,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_199[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_199[] = {0x43,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0xac,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_200[] = {0xe8,0x4c,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xe0}; -static const uint8_t msg_201[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_201[] = {0xa2,0x58,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfd,0xf5,0x20,0x58,0x8d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_202[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_202[] = {0xe8,0x8f,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdc,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_203[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_203[] = {0xc3,0x58,0x76,0x00,0x03,0x21,0x13,0x19,0xac,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_204[] = {0xe8,0x4d,0xda,0x98,0xe9,0x8c,0xc8,0x13,0x9c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xe0}; -static const uint8_t msg_205[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_205[] = {0xa2,0x59,0x30,0xc8,0x79,0xd7,0x4e,0x14,0xfd,0xf5,0x20,0x58,0x8d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_206[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_206[] = {0xe8,0x8e,0xcb,0x80,0xac,0x9a,0x46,0x2c,0xdc,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_207[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_207[] = {0xc3,0x59,0x76,0x80,0x03,0x21,0x13,0x19,0xac,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_208[] = {0xe8,0x4d,0xda,0x18,0xe8,0x8c,0xc8,0x13,0x9c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xe0}; -static const uint8_t msg_209[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_209[] = {0xa2,0x59,0x30,0x48,0x78,0xd7,0x4e,0x14,0xfd,0xf5,0x20,0x58,0x8d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_210[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_210[] = {0xe8,0x8e,0xcb,0x00,0xad,0x9a,0x46,0x2c,0xdc,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_211[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_211[] = {0xc3,0x59,0x76,0x00,0x02,0x21,0x13,0x19,0xac,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_212[] = {0xe8,0x4d,0xda,0x18,0xeb,0x8c,0xc8,0x13,0x9c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xe0}; -static const uint8_t msg_213[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_213[] = {0xa2,0x59,0x30,0x48,0x7b,0xd7,0x4e,0x14,0xfd,0xf5,0x20,0x58,0x8d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_214[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_214[] = {0xe8,0x8e,0xcb,0x00,0xae,0x9a,0x46,0x2c,0xdc,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_215[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_215[] = {0xc3,0x59,0x76,0x00,0x01,0x21,0x13,0x19,0xac,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_216[] = {0xe8,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x93,0x9c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xe0}; -static const uint8_t msg_217[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_217[] = {0xa2,0x59,0x30,0x48,0x79,0xd7,0x4e,0x94,0xfd,0xf5,0x20,0x58,0x8d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_218[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_218[] = {0xe8,0x8e,0xcb,0x00,0xac,0x9a,0x46,0xac,0xdc,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_219[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_219[] = {0xc3,0x59,0x76,0x00,0x03,0x21,0x13,0x99,0xac,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_220[] = {0xe8,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9d,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xe0}; -static const uint8_t msg_221[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_221[] = {0xa2,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfc,0xf5,0x20,0x58,0x8d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_222[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_222[] = {0xe8,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdd,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_223[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_223[] = {0xc3,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0xad,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_224[] = {0xe8,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x1c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xe0}; -static const uint8_t msg_225[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_225[] = {0xa2,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0x7d,0xf5,0x20,0x58,0x8d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_226[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_226[] = {0xe8,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0x5c,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_227[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_227[] = {0xc3,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0x2c,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_228[] = {0xe8,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9c,0x9d,0xfd,0x22,0x71,0xd8,0xba,0xe0}; -static const uint8_t msg_229[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_229[] = {0xa2,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfd,0xd5,0x20,0x58,0x8d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_230[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_230[] = {0xe8,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdc,0xc6,0x24,0x2b,0x1b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_231[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_231[] = {0xc3,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0xac,0xf9,0xd2,0xd8,0xfa,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_232[] = {0xe8,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9c,0xbd,0xfc,0x22,0x71,0xd8,0xba,0xe0}; -static const uint8_t msg_233[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_233[] = {0xa2,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfd,0xf5,0x21,0x58,0x8d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_234[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_234[] = {0xe8,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdc,0xe6,0x25,0x2b,0x1b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_235[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_235[] = {0xc3,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0xac,0xd9,0xd3,0xd8,0xfa,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_236[] = {0xe8,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9c,0xbd,0xfd,0x22,0x70,0xd8,0xba,0xe0}; -static const uint8_t msg_237[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_237[] = {0xa2,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfd,0xf5,0x20,0x58,0x8c,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_238[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_238[] = {0xe8,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdc,0xe6,0x24,0x2b,0x1a,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_239[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_239[] = {0xc3,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0xac,0xd9,0xd2,0xd8,0xfb,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_240[] = {0xe8,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9c,0xbd,0xfd,0x22,0x73,0xd8,0xba,0xe0}; -static const uint8_t msg_241[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_241[] = {0xa2,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfd,0xf5,0x20,0x58,0x8f,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_242[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_242[] = {0xe8,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdc,0xe6,0x24,0x2b,0x19,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_243[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_243[] = {0xc3,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0xac,0xd9,0xd2,0xd8,0xf8,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_244[] = {0xe8,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9c,0xbd,0xfd,0x22,0xf1,0xd8,0xba,0xe0}; -static const uint8_t msg_245[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_245[] = {0xa2,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfd,0xf5,0x20,0x58,0x0d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_246[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_246[] = {0xe8,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdc,0xe6,0x24,0x2b,0x9b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_247[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_247[] = {0xc3,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0xac,0xd9,0xd2,0xd8,0x7a,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_248[] = {0xe8,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xe1}; -static const uint8_t msg_249[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_249[] = {0xa2,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfd,0xf5,0x20,0x58,0x8d,0x38,0x88,0xf1,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_250[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_250[] = {0xe8,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdc,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xe5,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_251[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_251[] = {0xc3,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0xac,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x45,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_252[] = {0xe8,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xe2}; -static const uint8_t msg_253[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_253[] = {0xa2,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfd,0xf5,0x20,0x58,0x8d,0x38,0x88,0xf2,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_254[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_254[] = {0xe8,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdc,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xe6,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_255[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_255[] = {0xc3,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0xac,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x46,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_256[] = {0xe8,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xa0}; -static const uint8_t msg_257[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_257[] = {0xa2,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfd,0xf5,0x20,0x58,0x8d,0x38,0x88,0xb0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_258[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_258[] = {0xe8,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdc,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xa4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_259[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_259[] = {0xc3,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0xac,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x04,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_260[] = {0xe8,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0x60}; -static const uint8_t msg_261[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_261[] = {0xa2,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfd,0xf5,0x20,0x58,0x8d,0x38,0x88,0x70,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_262[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_262[] = {0xe8,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdc,0xe6,0x24,0x2b,0x1b,0x49,0x51,0x64,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_263[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_263[] = {0xc3,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0xac,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0xc4,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_264[] = {0xe9,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x13,0x9d,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xe0}; -static const uint8_t msg_265[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_265[] = {0xa3,0x59,0x30,0x48,0x79,0xd7,0x4e,0x14,0xfc,0xf5,0x20,0x58,0x8d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_266[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_266[] = {0xe9,0x8e,0xcb,0x00,0xac,0x9a,0x46,0x2c,0xdd,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_267[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_267[] = {0xc2,0x59,0x76,0x00,0x03,0x21,0x13,0x19,0xad,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_268[] = {0xe8,0x4d,0xda,0x98,0xe9,0x8c,0xc8,0x93,0x9c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0xe0}; -static const uint8_t msg_269[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_269[] = {0xa2,0x59,0x30,0xc8,0x79,0xd7,0x4e,0x94,0xfd,0xf5,0x20,0x58,0x8d,0x38,0x88,0xf0,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_270[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_270[] = {0xe8,0x8e,0xcb,0x80,0xac,0x9a,0x46,0xac,0xdc,0xe6,0x24,0x2b,0x1b,0x49,0x51,0xe4,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_271[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_271[] = {0xc3,0x59,0x76,0x80,0x03,0x21,0x13,0x99,0xac,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0x44,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_272[] = {0xe8,0x4d,0xda,0x18,0xe9,0x8c,0xc8,0x93,0x9c,0xbd,0xfd,0x22,0x71,0xd8,0xba,0x60}; -static const uint8_t msg_273[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_273[] = {0xa2,0x59,0x30,0x48,0x79,0xd7,0x4e,0x94,0xfd,0xf5,0x20,0x58,0x8d,0x38,0x88,0x70,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_274[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_274[] = {0xe8,0x8e,0xcb,0x00,0xac,0x9a,0x46,0xac,0xdc,0xe6,0x24,0x2b,0x1b,0x49,0x51,0x64,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_275[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_275[] = {0xc3,0x59,0x76,0x00,0x03,0x21,0x13,0x99,0xac,0xd9,0xd2,0xd8,0xfa,0x26,0x08,0xc4,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_276[] = {0x17,0xb2,0x25,0xe7,0x16,0x73,0x37,0xec,0x63,0x42,0x02,0xdd,0x8e,0x27,0x45,0x1f}; -static const uint8_t msg_277[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_277[] = {0x5d,0xa6,0xcf,0xb7,0x86,0x28,0xb1,0xeb,0x02,0x0a,0xdf,0xa7,0x72,0xc7,0x77,0x0f,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_278[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_278[] = {0x17,0x71,0x34,0xff,0x53,0x65,0xb9,0xd3,0x23,0x19,0xdb,0xd4,0xe4,0xb6,0xae,0x1b,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_279[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_279[] = {0x3c,0xa6,0x89,0xff,0xfc,0xde,0xec,0xe6,0x53,0x26,0x2d,0x27,0x05,0xd9,0xf7,0xbb,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_280[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -static const uint8_t msg_281[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_281[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_282[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_282[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_283[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_283[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_284[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; -static const uint8_t msg_285[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_285[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_286[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_286[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_287[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_287[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_288[] = {0x68,0xcd,0x5a,0x98,0x69,0x0c,0x48,0x93,0x1c,0x3d,0x7d,0xa2,0xf1,0x58,0x3a,0x60}; -static const uint8_t msg_289[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_289[] = {0x22,0xd9,0xb0,0xc8,0xf9,0x57,0xce,0x94,0x7d,0x75,0xa0,0xd8,0x0d,0xb8,0x08,0x70,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_290[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_290[] = {0x68,0x0e,0x4b,0x80,0x2c,0x1a,0xc6,0xac,0x5c,0x66,0xa4,0xab,0x9b,0xc9,0xd1,0x64,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_291[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_291[] = {0x43,0xd9,0xf6,0x80,0x83,0xa1,0x93,0x99,0x2c,0x59,0x52,0x58,0x7a,0xa6,0x88,0xc4,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_292[] = {0xe9,0x4c,0xdb,0x19,0xe8,0x8d,0xc9,0x12,0x9d,0xbc,0xfc,0x23,0x70,0xd9,0xbb,0xe1}; -static const uint8_t msg_293[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_293[] = {0xa3,0x58,0x31,0x49,0x78,0xd6,0x4f,0x15,0xfc,0xf4,0x21,0x59,0x8c,0x39,0x89,0xf1,0x7a,0xb3,0xdd,0x3c,0x6c,0x31,0xa3,0x86}; -static const uint8_t msg_294[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_294[] = {0xe9,0x8f,0xca,0x01,0xad,0x9b,0x47,0x2d,0xdd,0xe7,0x25,0x2a,0x1a,0x48,0x50,0xe5,0x73,0x8b,0x59,0x5a,0xeb,0xf6,0xee,0x3e,0x7b,0xe4,0x24,0xbf,0xb5,0x1b,0xfd,0xee}; -static const uint8_t msg_295[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_295[] = {0xc2,0x58,0x77,0x01,0x02,0x20,0x12,0x18,0xad,0xd8,0xd3,0xd9,0xfb,0x27,0x09,0x45,0x8b,0x0b,0x5d,0xf8,0x33,0x21,0x50,0xff,0x08,0x77,0xd8,0x54,0x71,0xd5,0x40,0xc4,0xcf,0xf1,0xe1,0x83}; -static const uint8_t ct_296[] = {0x44,0xb1,0xc6,0xfe,0x8a,0x8c,0x07,0xde,0xe5,0x37,0x7b,0x16,0x1f,0x28,0x3c,0x31}; -static const uint8_t aad_297[] = {0xd0,0xbb,0x29,0x49,0xa4,0x11,0xe2,0x2d,0x32,0x96,0x45,0x26}; -static const uint8_t ct_297[] = {0xe2,0x88,0xd8,0x02,0xa0,0xe5,0x6e,0xd7,0x54,0x4a,0x2e,0x57,0x75,0x45,0x93,0x89}; -static const uint8_t aad_298[] = {0x1d,0x5c,0xe9,0x28,0x86,0x27,0xa1,0x2f,0x8f,0x5d,0x80,0x91,0x67,0xa3,0xb2}; -static const uint8_t ct_298[] = {0xf8,0x08,0x3e,0x55,0x30,0x79,0x32,0xd9,0x71,0xbf,0xc2,0xa8,0x91,0x3c,0x19,0x51}; -static const uint8_t aad_299[] = {0x76,0xaa,0xde,0x95,0x96,0x4f,0x07,0x4c,0x69,0x38,0x86,0xf2,0x45,0xfa,0x57,0xf9}; -static const uint8_t ct_299[] = {0xf1,0xad,0x6e,0xa9,0x98,0xa2,0xa4,0x38,0xac,0xaf,0x90,0xba,0xd0,0xcb,0x9f,0x9f}; -static const uint8_t aad_300[] = {0x41,0x25,0x7d,0xa6,0x10,0x8b,0xed,0xbb,0x15,0x0d,0x4e,0x29,0x0b,0x6b,0x9a,0x76,0xd1,0x10,0x92,0xc6}; -static const uint8_t ct_300[] = {0xa8,0xd2,0x79,0x44,0xa8,0x43,0x17,0x09,0x8e,0xed,0x17,0x06,0x31,0xf4,0xc8,0x67}; -static const uint8_t aad_301[] = {0xe9,0x41,0xd1,0x5f,0xad,0xeb,0xaf,0x46,0x71,0xe0,0xe3,0xd6,0xd8,0x35,0xf8,0x7b,0xfb,0x1c,0xc7,0x02,0x8f,0x14,0x99,0x30,0xda,0xa6,0x9c,0x3d,0xe4,0x46,0xc4,0x23}; -static const uint8_t ct_301[] = {0xb7,0x54,0xec,0xb5,0x5c,0x1e,0x12,0x4d,0xe0,0xc8,0xa9,0x73,0xd0,0x33,0xbd,0x7f}; -static const uint8_t aad_302[] = {0xde,0xeb,0x0c,0xcf,0x3a,0xef,0x47,0xa2,0x96,0xed,0x1c,0xa8,0xf4,0xae,0x59,0x07}; -static const uint8_t msg_302[] = {0xbe,0xec,0x61,0x03,0x0f,0xa3,0xd6,0x70,0x33,0x71,0x96,0xbe,0xad,0xe6,0xae,0xaa}; -static const uint8_t ct_302[] = {0x58,0x65,0x20,0x8e,0xab,0x91,0x63,0xdb,0x85,0xca,0xb9,0xf9,0x6d,0x84,0x62,0x34,0xa2,0x62,0x6a,0xae,0x22,0xf5,0xc1,0x7c,0x9a,0xad,0x4b,0x50,0x1f,0x44,0x16,0xe4}; -static const uint8_t aad_303[] = {0xcc,0x94,0xf6,0x4e,0x14,0xdf,0x90,0x26,0x5f,0x7f,0x12,0xa8,0xa0,0x38,0x6d,0x0a}; -static const uint8_t msg_303[] = {0x6b,0x1d,0xb0,0xf5,0xa4,0x33,0x76,0x88,0x50,0x02,0xdc,0x98,0xbd,0x55,0x6f,0x1d,0xac,0x9b,0x66,0xb6,0x62,0x13,0xa9,0xfa,0x60,0x69,0xdf,0x99,0x5a,0x12,0x33,0x84}; -static const uint8_t ct_303[] = {0xd0,0x01,0x6d,0x67,0x5b,0x49,0xf1,0x1e,0xa8,0x73,0x70,0x74,0x12,0xd4,0x57,0x09,0xb7,0x70,0x3a,0x02,0x8a,0x0c,0xfc,0x31,0x2c,0xf6,0x1c,0xbe,0x22,0xb9,0x1e,0x3c,0xf2,0x0b,0x7d,0x4c,0x93,0x08,0xee,0x15,0xf1,0x8b,0x4e,0xba,0x00,0x88,0x92,0x84}; -static const uint8_t aad_304[] = {0x1c,0xda,0x34,0x2c,0x16,0x6e,0xa2,0x08,0xdf,0x5c,0x56,0xbc,0xf9,0x95,0xa5,0x9b}; -static const uint8_t msg_304[] = {0x48,0xef,0x10,0xcc,0xb1,0x97,0x8b,0x53,0xae,0x73,0x16,0x7a,0xbe,0x1c,0xc5,0x38,0xfa,0x80,0xda,0x3f,0x5d,0xf9,0x3e,0x3d,0x5c,0x4e,0x9a,0x9a,0xd1,0xf2,0x13,0x50,0x4f,0x22,0xa6,0x94,0xb9,0x8a,0x35,0xad,0x67,0x62,0x0a,0xf9,0xd8,0xa2,0x9f,0xc7}; -static const uint8_t ct_304[] = {0xd5,0x5c,0x5d,0x0a,0xf0,0x26,0x0d,0xc1,0x12,0x3a,0xdb,0x5d,0x78,0x69,0x20,0x1f,0x8c,0xce,0xe4,0x6d,0xeb,0x66,0xdd,0x69,0x5c,0x59,0x3c,0xde,0x1d,0x76,0x45,0xc7,0x27,0x96,0xe4,0x2a,0x17,0x33,0xb6,0x70,0x57,0x53,0x63,0x1b,0x9b,0x62,0x69,0x91,0xdd,0xbd,0x28,0x47,0x3c,0xe7,0x5c,0xfd,0xc4,0xc1,0x4d,0x20,0xe6,0x6f,0x21,0x2d}; -static const uint8_t aad_305[] = {0xfa,0xb9,0x12,0xde,0xc2,0x9a,0x34,0xaa,0xbf,0xae,0xf1,0x76}; -static const uint8_t msg_305[] = {0x0d}; -static const uint8_t ct_305[] = {0x1c,0x69,0x69,0xec,0xb1,0x57,0x41,0xa9,0x95,0x9b,0x7a,0x84,0x92,0x25,0x0e,0x39,0x1a}; -static const uint8_t aad_306[] = {0xe8,0x60,0x5f,0x13,0xdb,0x8c,0x48,0x2d,0x48,0xbd,0xba,0x2d}; -static const uint8_t msg_306[] = {0x5c,0x6f}; -static const uint8_t ct_306[] = {0xfd,0xde,0xa9,0xac,0x77,0x8b,0x97,0x8a,0x96,0x80,0x33,0xce,0x52,0xec,0x61,0x16,0x25,0x88}; -static const uint8_t aad_307[] = {0x7f,0x89,0xa3,0xf6,0x48,0xc1,0xc7,0xc2,0x3e,0xdb,0xd5,0xca}; -static const uint8_t msg_307[] = {0x35,0xac,0x33}; -static const uint8_t ct_307[] = {0x38,0x34,0xfb,0xed,0xc3,0x50,0x22,0x27,0xe3,0xc9,0x1a,0x86,0x1f,0x2e,0x31,0x95,0xfb,0xb3,0x44}; -static const uint8_t aad_308[] = {0xc2,0xb7,0x5c,0x99,0x8f,0x4c,0xac,0x28,0xb4,0xb6,0x9d,0xfb}; -static const uint8_t msg_308[] = {0x1d,0x25,0xf8,0x33}; -static const uint8_t ct_308[] = {0x0d,0x1e,0x19,0x81,0xda,0x44,0xa7,0xd9,0xed,0xa6,0x0e,0x48,0xe7,0xae,0x4f,0x85,0x05,0xd8,0xba,0x98}; -static const uint8_t aad_309[] = {0xf5,0x04,0x2d,0x5a,0x5b,0x68,0xb2,0x62,0x27,0x49,0x74,0xa8}; -static const uint8_t msg_309[] = {0x9e,0x99,0x91,0x2c,0x7b}; -static const uint8_t ct_309[] = {0x65,0x5e,0xf7,0xf0,0x9f,0x4c,0xff,0x47,0xb4,0x27,0xe9,0xdf,0x7f,0xcc,0x64,0x26,0x64,0x71,0x5a,0xd1,0x4c}; -static const uint8_t aad_310[] = {0x75,0x5f,0x50,0xcf,0xdf,0xc8,0x49,0x65,0x4a,0xd9,0x8c,0xc7}; -static const uint8_t msg_310[] = {0xac,0x59,0x87,0x20,0xb9,0x6e}; -static const uint8_t ct_310[] = {0xad,0xee,0x2a,0x37,0x3a,0x7f,0x6b,0xba,0xf4,0xf0,0x0e,0x5f,0x3f,0x93,0x43,0x5a,0x09,0x09,0x1b,0x52,0x21,0xae}; -static const uint8_t aad_311[] = {0xf8,0x79,0x9b,0xc7,0x32,0xcb,0xf6,0xa3,0x9a,0xe2,0x26,0x8e}; -static const uint8_t msg_311[] = {0x8f,0x6b,0x2b,0x21,0xa6,0xdc,0x73}; -static const uint8_t ct_311[] = {0xff,0x61,0x73,0xa7,0x0d,0xee,0x05,0xdd,0xbd,0xe7,0x5a,0x96,0x0f,0x84,0x52,0x3e,0x01,0xb3,0x0a,0xdc,0xac,0x52,0x75}; -static const uint8_t aad_312[] = {0x7a,0x5d,0xbd,0xbf,0x80,0x3b,0x25,0x93,0xd3,0xe1,0x70,0x97}; -static const uint8_t msg_312[] = {0xde,0xb2,0xc7,0xc6,0x20,0x44,0x96,0xe5}; -static const uint8_t ct_312[] = {0x2f,0x8b,0x75,0x83,0x77,0x3a,0xe0,0x3b,0xa7,0xb3,0x95,0x24,0x53,0xc8,0x14,0x31,0x78,0x0b,0xfc,0xc9,0xd7,0xdf,0x9a,0x43}; -static const uint8_t aad_313[] = {0xe4,0x82,0xe9,0x42,0xce,0x26,0xd2,0x44,0xd4,0x96,0x2a,0xcf}; -static const uint8_t msg_313[] = {0x12,0x2d,0x1b,0xa3,0x94,0xaf,0xad,0x1f,0xe3}; -static const uint8_t ct_313[] = {0x81,0x85,0xd1,0x4e,0xe8,0x7c,0xc8,0x91,0xbb,0x9b,0xcf,0x3f,0xaf,0xde,0x4e,0xd2,0x46,0x59,0x96,0x26,0x21,0x1f,0xe0,0x4d,0x23}; -static const uint8_t aad_314[] = {0x89,0xf9,0x52,0x50,0xfb,0x66,0xb2,0xcd,0xa7,0x0b,0x88,0x54}; -static const uint8_t msg_314[] = {0x9c,0xab,0x7b,0xde,0x92,0x63,0x07,0x38,0x65,0x05}; -static const uint8_t ct_314[] = {0xc4,0xde,0xca,0x5c,0x53,0xbc,0xfa,0x62,0x08,0xb3,0x37,0x47,0x42,0x12,0x41,0x85,0x41,0xe4,0x4d,0x0f,0xbf,0x2d,0xe7,0xb4,0x8c,0x6f}; -static const uint8_t aad_315[] = {0x5c,0x36,0x61,0xf4,0x04,0x74,0x54,0xba,0xc4,0x45,0xf1,0xac}; -static const uint8_t msg_315[] = {0x08,0xeb,0x0a,0x19,0x6e,0x8f,0x3c,0xb6,0x42,0x8b,0x0a}; -static const uint8_t ct_315[] = {0x67,0x67,0x30,0x64,0xfc,0x54,0x0a,0xe1,0x28,0x23,0x2b,0xa8,0x7b,0xa2,0xe9,0xbb,0xe7,0xd3,0x56,0x9d,0xd4,0x19,0xbc,0xc5,0x27,0x96,0xec}; -static const uint8_t aad_316[] = {0x7b,0x3f,0x95,0x91,0x07,0x6e,0x32,0xa2,0x17,0x66,0xe2,0xbb}; -static const uint8_t msg_316[] = {0x06,0x28,0xd1,0x9c,0xc9,0x4c,0x4b,0x4f,0x3d,0x70,0x3e,0x1f}; -static const uint8_t ct_316[] = {0x56,0xe6,0xfd,0x5a,0x7f,0x44,0x9a,0x8e,0x6b,0xaf,0xa3,0x8f,0x94,0x5c,0x70,0xcf,0x8a,0x53,0x41,0x79,0xb3,0xb1,0xf2,0x62,0x66,0xfb,0x6b,0x56}; -static const uint8_t aad_317[] = {0xa3,0xc4,0xe3,0x87,0xbf,0xc0,0x05,0x40,0x2a,0xcd,0x20,0xbb}; -static const uint8_t msg_317[] = {0xa1,0x71,0x37,0x6f,0x2a,0x66,0xdb,0xdf,0x17,0xf3,0x29,0x61,0xe8}; -static const uint8_t ct_317[] = {0x4e,0x7b,0x64,0x2d,0xcc,0x3c,0xbd,0x93,0x5d,0x4c,0xda,0x81,0x93,0x98,0x2e,0xf7,0x24,0x0f,0xa4,0x7f,0x95,0x1e,0xc8,0xb3,0xfd,0x37,0x20,0x4a,0x73}; -static const uint8_t aad_318[] = {0x89,0x0d,0xce,0xa8,0x71,0xda,0x1c,0xaf,0xf4,0x76,0x6d,0x32}; -static const uint8_t msg_318[] = {0x6a,0xd3,0x48,0x47,0x08,0x91,0xd1,0xba,0xbb,0x13,0xf3,0xbf,0x0e,0x8c}; -static const uint8_t ct_318[] = {0xfb,0xb6,0x83,0x24,0xb8,0xc5,0xb3,0xe5,0x5e,0xbc,0x1f,0xeb,0x4b,0x98,0x76,0x15,0x21,0xf4,0xaa,0xc7,0xeb,0x7b,0x6c,0x0f,0xb0,0x50,0x5a,0x08,0x45,0x7b}; -static const uint8_t aad_319[] = {0x6a,0xe5,0x4f,0x41,0xac,0x52,0xba,0xf2,0xf8,0x9a,0xbe,0x8e}; -static const uint8_t msg_319[] = {0x3f,0xc3,0xbf,0x53,0xbb,0x48,0x5c,0x9e,0xdc,0xb1,0xd2,0x5a,0xdb,0x4c,0xa0}; -static const uint8_t ct_319[] = {0x2d,0x34,0x4a,0x54,0x03,0x8a,0x85,0x7f,0x47,0xe0,0xc7,0x7e,0xb0,0x83,0x45,0x38,0xaa,0xf0,0x1e,0x61,0xa8,0xac,0x82,0xc0,0x01,0x2f,0x9d,0xac,0x6f,0x15,0xef}; -static const uint8_t aad_320[] = {0xd3,0x9d,0xa7,0x3f,0xfc,0x03,0xad,0x0a,0x92,0x13,0xff,0xc7}; -static const uint8_t msg_320[] = {0x48,0x60,0x49,0x44,0xa8,0x0f,0xad,0xf5,0x0d,0x55,0xb8,0x77,0x27,0x93,0x44,0x58,0xc8}; -static const uint8_t ct_320[] = {0xa9,0xcf,0x73,0x95,0x1c,0xb3,0x98,0x23,0x77,0x7f,0x35,0xc9,0x6c,0x84,0x51,0x69,0x47,0x6e,0x2e,0xc2,0x31,0x7c,0xb6,0xb8,0xdd,0x8b,0x61,0x72,0xfd,0xce,0xab,0xff,0x9d}; -static const uint8_t aad_321[] = {0x29,0xd6,0x14,0xf9,0x08,0x59,0x3f,0x6a,0x5a,0xb0,0x3c,0xea}; -static const uint8_t msg_321[] = {0x0c,0x22,0xe4,0x87,0x5d,0xcd,0x23,0xde,0x89,0xa6,0xd3,0x2f,0x20,0x82,0xdd,0x40,0xe1,0x84,0x8f,0xc2}; -static const uint8_t ct_321[] = {0xbc,0xe8,0x86,0x62,0x3d,0x11,0x32,0x0d,0x22,0xdf,0xdc,0x1d,0xef,0xb0,0x4d,0x17,0xbd,0x00,0x1d,0x93,0x70,0xa3,0xd8,0xc8,0x3a,0xab,0xe4,0x49,0x4d,0x16,0xca,0x75,0xce,0x53,0x4f,0x7c}; -static const uint8_t aad_322[] = {0xb4,0x11,0xe4,0xd2,0xfa,0xcc,0xa6,0x7e,0xa4,0xa9,0xf2,0xa1}; -static const uint8_t msg_322[] = {0x2f,0x35,0x8d,0x45,0x34,0x55,0x9a,0xc9,0x9d,0xd7,0x17,0x98,0xb7,0x92,0x57,0x05,0xd6,0xf0,0x13,0xf6,0xb8,0x48,0xff,0xe0,0x1c,0xc8,0x6c,0xef,0x09,0xd8,0x8f}; -static const uint8_t ct_322[] = {0xd2,0x7a,0xe2,0x6d,0xfe,0x02,0xe3,0xee,0xdf,0x54,0x4e,0x1b,0x45,0x2c,0xb0,0xf0,0xc9,0x30,0x3a,0x4e,0x48,0x19,0x31,0x83,0x15,0xae,0x08,0x83,0x9b,0xcc,0xe5,0x58,0xe4,0x74,0x18,0x17,0xec,0x08,0xda,0xe4,0x06,0xbb,0xfc,0x09,0xf5,0x9a,0xa9}; -static const uint8_t aad_323[] = {0xb3,0xed,0xff,0xbb,0x89,0xb3,0x73,0xfe,0x04,0xda,0x24,0x4b}; -static const uint8_t msg_323[] = {0xeb,0xcf,0xb2,0xff,0xb6,0x81,0xcc,0x5d,0xfa,0x0c,0x5c,0x52,0x4c,0x1b,0x1c,0xc8,0x7c,0xc6,0xb2,0xbf,0xa3,0x5d,0xc3,0x6d,0x15,0xe8,0x05,0x05,0x11,0x8b,0x84,0xa0,0x72,0xa7,0x8a,0x15,0x7b,0x4d,0x18,0x37}; -static const uint8_t ct_323[] = {0x1a,0xc7,0x8a,0xae,0x2e,0xde,0x04,0xeb,0x47,0x92,0x4d,0x8f,0x9f,0x99,0xfe,0x75,0xde,0xb6,0x1b,0xf6,0x93,0xda,0x7f,0x3a,0x21,0x47,0xc0,0x5f,0x6d,0x29,0xd1,0x73,0x92,0x35,0x6f,0xe0,0x0f,0x82,0xb2,0x4c,0xdb,0xce,0x77,0x4f,0xd8,0x64,0x56,0x15,0x48,0xf3,0x3d,0xd3,0x19,0x2d,0x80,0x6f}; -static const uint8_t aad_324[] = {0x6a,0x8a,0xaf,0x2c,0x84,0x00,0x3e,0x0e,0x6f,0x40,0x96,0x58}; -static const uint8_t msg_324[] = {0x92,0xd8,0xf4,0xdc,0x7d,0x41,0xe8,0xb1,0x80,0xd6,0x6e,0x89,0x94,0x02,0x2d,0xb7,0x92,0x49,0xcd,0xc7,0x6f,0xd7,0xf3,0xea,0x12,0xd9,0x92,0x5b,0x51,0x92,0x52,0x50,0xcd,0x75,0xa1,0x5f,0xcf,0xd7,0x8e,0xa8,0x5c,0x57,0xfe,0x61,0x96,0xf8,0xd7,0x54,0x50,0x86,0xf9,0x9e,0xa7,0x96,0xa0,0xea,0x69,0x17,0x0d,0xb9,0x94,0x42,0x00,0x43,0x5d,0x9d,0x3d,0x55,0x19,0x43,0x89,0x24,0x00,0xce,0x78,0x7f,0x70,0x3c,0x11,0x05}; -static const uint8_t ct_324[] = {0x69,0xf7,0x20,0xf3,0x6b,0x0d,0xa8,0x6e,0xc8,0xcc,0x0f,0x46,0xd6,0x28,0x35,0xdc,0xb3,0x5a,0xc2,0x3f,0x5b,0x89,0x11,0x52,0xd8,0x61,0xc4,0xe0,0xf0,0x01,0x8f,0x19,0xd2,0x72,0xee,0x8b,0x12,0xd8,0x33,0x00,0xbf,0xd4,0x6a,0xee,0xc0,0x12,0x4d,0x5d,0x23,0xb3,0xcb,0x84,0x9c,0x1c,0xab,0x1f,0xdf,0x64,0xb7,0x09,0x47,0xeb,0xf7,0x9f,0x54,0x42,0xe2,0x09,0x07,0x6d,0xfa,0x9a,0x3f,0x36,0xab,0x0a,0x6d,0x3c,0xf4,0xa7,0x5d,0xdf,0xcd,0xc2,0x18,0x37,0x74,0x3b,0x20,0x88,0x5d,0xb4,0xc8,0x03,0xac,0x27}; -static const uint8_t msg_325[] = {0x8d,0xbf,0xee,0x95,0x80,0xe7,0xe2,0xbc,0x66,0x10,0x0a,0x67,0x44,0x97,0xf4,0xe1}; -static const uint8_t ct_325[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0xf8,0xaa,0x7e,0x4d,0xd4,0x9d,0x9c,0xfa,0x09,0xe9,0xcb,0x57,0x4f,0xd9,0x0d}; -static const uint8_t aad_326[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_326[] = {0xbf,0xa1,0x73,0x3d,0x07,0xaf,0xa0,0x3c,0xb3,0xf2,0xee,0xb8,0x1b,0xbd,0xe0,0x37}; -static const uint8_t ct_326[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0xe6,0x37,0xd6,0xca,0x9c,0xdf,0x1c,0x2f,0xeb,0x0d,0x14,0x08,0x65,0xcd,0xdb}; -static const uint8_t msg_327[] = {0x72,0x54,0x3a,0x9a,0x07,0xa3,0xc1,0x8a,0x28,0x00,0x60,0x65,0x34,0x32,0xc0,0x5c}; -static const uint8_t ct_327[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3d,0xb0,0x9c,0xc4,0x8f,0x27,0x80,0x85,0x93,0x51,0x90,0x1d,0x10,0x14,0xae,0x06}; -static const uint8_t aad_328[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_328[] = {0x40,0x4a,0xa7,0x32,0x80,0xeb,0x83,0x0a,0xfd,0xe2,0x84,0xba,0x6b,0x18,0xd4,0x8a}; -static const uint8_t ct_328[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xae,0x01,0x6c,0x08,0x6f,0xc2,0x05,0x46,0xb3,0x74,0xc2,0x4f,0x3e,0xba,0xd0}; -static const uint8_t msg_329[] = {0xff,0x4d,0x7c,0xde,0xb8,0xf3,0xc4,0xe3,0x7a,0x05,0xa9,0x1e,0xe2,0x6e,0x2a,0x84}; -static const uint8_t ct_329[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xb0,0xa9,0xda,0x80,0x30,0x77,0x85,0xec,0xc1,0x54,0x59,0x66,0xc6,0x48,0x44,0xde}; -static const uint8_t aad_330[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_330[] = {0xcd,0x53,0xe1,0x76,0x3f,0xbb,0x86,0x63,0xaf,0xe7,0x4d,0xc1,0xbd,0x44,0x3e,0x52}; -static const uint8_t ct_330[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0x82,0xb7,0x47,0x28,0xb7,0x3f,0xc7,0x6c,0x14,0xb6,0xbd,0xb9,0x99,0x62,0x50,0x08}; -static const uint8_t msg_331[] = {0x6e,0xb5,0x2f,0xc9,0x5a,0x51,0x85,0xa3,0xbd,0x2a,0x30,0xd3,0x05,0x84,0x14,0xab}; -static const uint8_t ct_331[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x21,0x51,0x89,0x97,0xd2,0xd5,0xc4,0xac,0x06,0x7b,0xc0,0xab,0x21,0xa2,0x7a,0xf1}; -static const uint8_t aad_332[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_332[] = {0x5c,0xab,0xb2,0x61,0xdd,0x19,0xc7,0x23,0x68,0xc8,0xd4,0x0c,0x5a,0xae,0x00,0x7d}; -static const uint8_t ct_332[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x13,0x4f,0x14,0x3f,0x55,0x9d,0x86,0x2c,0xd3,0x99,0x24,0x74,0x7e,0x88,0x6e,0x27}; -static const uint8_t msg_333[] = {0x11,0x4c,0xc3,0x6e,0x58,0xfa,0xce,0xb2,0xe6,0xa2,0x34,0x4a,0x67,0x9e,0xa4,0xc3}; -static const uint8_t ct_333[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x2f,0x84,0x96,0x50,0xd6,0xe8,0x9e,0x26,0x68,0xe9,0x90,0x21,0x91,0x95,0x71,0x9c}; -static const uint8_t aad_334[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; -static const uint8_t msg_334[] = {0x23,0x52,0x5e,0xc6,0xdf,0xb2,0x8c,0x32,0x33,0x40,0xd0,0x95,0x38,0xb4,0xb0,0x15}; -static const uint8_t ct_334[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x1d,0x9a,0x0b,0xf8,0x51,0xa0,0xdc,0xa6,0xbd,0x0b,0x74,0xfe,0xce,0xbf,0x65,0x4a}; -static const uint8_t ct_335[] = {0x6e,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x06,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x85}; -static const uint8_t msg_336[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_336[] = {0x20,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_337[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_337[] = {0x05,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x87,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_338[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_338[] = {0x31,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x84,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_339[] = {0x6d,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x06,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x85}; -static const uint8_t msg_340[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_340[] = {0x23,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_341[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_341[] = {0x06,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x87,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_342[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_342[] = {0x32,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x84,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_343[] = {0xef,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x06,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x85}; -static const uint8_t msg_344[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_344[] = {0xa1,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_345[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_345[] = {0x84,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x87,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_346[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_346[] = {0xb0,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x84,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_347[] = {0x6f,0xf4,0xb8,0xef,0x53,0xfc,0x36,0x56,0x06,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x85}; -static const uint8_t msg_348[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_348[] = {0x21,0x2f,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_349[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_349[] = {0x04,0xb5,0xe8,0x16,0x6f,0x28,0x08,0x29,0x87,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_350[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_350[] = {0x30,0x5c,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x84,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_351[] = {0x6f,0xf5,0xb8,0x6f,0x53,0xfc,0x36,0x56,0x06,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x85}; -static const uint8_t msg_352[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_352[] = {0x21,0x2e,0x4a,0x0f,0x8b,0x4c,0x66,0x78,0x8f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_353[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_353[] = {0x04,0xb4,0xe8,0x96,0x6f,0x28,0x08,0x29,0x87,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_354[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_354[] = {0x30,0x5d,0x6c,0x78,0xee,0xb3,0x6a,0x37,0x84,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_355[] = {0x6f,0xf5,0xb8,0xef,0x52,0xfc,0x36,0x56,0x06,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x85}; -static const uint8_t msg_356[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_356[] = {0x21,0x2e,0x4a,0x8f,0x8a,0x4c,0x66,0x78,0x8f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_357[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_357[] = {0x04,0xb4,0xe8,0x16,0x6e,0x28,0x08,0x29,0x87,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_358[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_358[] = {0x30,0x5d,0x6c,0xf8,0xef,0xb3,0x6a,0x37,0x84,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_359[] = {0x6f,0xf5,0xb8,0xef,0x51,0xfc,0x36,0x56,0x06,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x85}; -static const uint8_t msg_360[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_360[] = {0x21,0x2e,0x4a,0x8f,0x89,0x4c,0x66,0x78,0x8f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_361[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_361[] = {0x04,0xb4,0xe8,0x16,0x6d,0x28,0x08,0x29,0x87,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_362[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_362[] = {0x30,0x5d,0x6c,0xf8,0xec,0xb3,0x6a,0x37,0x84,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_363[] = {0x6f,0xf5,0xb8,0xef,0x53,0xfc,0x36,0xd6,0x06,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x85}; -static const uint8_t msg_364[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_364[] = {0x21,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0xf8,0x8f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_365[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_365[] = {0x04,0xb4,0xe8,0x16,0x6f,0x28,0x08,0xa9,0x87,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_366[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_366[] = {0x30,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0xb7,0x84,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_367[] = {0x6f,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x07,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x85}; -static const uint8_t msg_368[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_368[] = {0x21,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8e,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_369[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_369[] = {0x04,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x86,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_370[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_370[] = {0x30,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x85,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_371[] = {0x6f,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x86,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x85}; -static const uint8_t msg_372[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_372[] = {0x21,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x0f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_373[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_373[] = {0x04,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x07,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_374[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_374[] = {0x30,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x04,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_375[] = {0x6f,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x06,0xed,0x3e,0xa0,0x47,0x37,0x48,0x85}; -static const uint8_t msg_376[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_376[] = {0x21,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8f,0x1a,0xf2,0x30,0xfb,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_377[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_377[] = {0x04,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x87,0x83,0x2c,0xda,0xf5,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_378[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_378[] = {0x30,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x84,0xb7,0x10,0xe7,0xd1,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_379[] = {0x6f,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x06,0xcd,0x3f,0xa0,0x47,0x37,0x48,0x85}; -static const uint8_t msg_380[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_380[] = {0x21,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8f,0x3a,0xf3,0x30,0xfb,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_381[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_381[] = {0x04,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x87,0xa3,0x2d,0xda,0xf5,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_382[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_382[] = {0x30,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x84,0x97,0x11,0xe7,0xd1,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_383[] = {0x6f,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x06,0xcd,0x3e,0xa0,0x46,0x37,0x48,0x85}; -static const uint8_t msg_384[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_384[] = {0x21,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8f,0x3a,0xf2,0x30,0xfa,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_385[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_385[] = {0x04,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x87,0xa3,0x2c,0xda,0xf4,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_386[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_386[] = {0x30,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x84,0x97,0x10,0xe7,0xd0,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_387[] = {0x6f,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x06,0xcd,0x3e,0xa0,0x45,0x37,0x48,0x85}; -static const uint8_t msg_388[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_388[] = {0x21,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8f,0x3a,0xf2,0x30,0xf9,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_389[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_389[] = {0x04,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x87,0xa3,0x2c,0xda,0xf7,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_390[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_390[] = {0x30,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x84,0x97,0x10,0xe7,0xd3,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_391[] = {0x6f,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x06,0xcd,0x3e,0xa0,0xc7,0x37,0x48,0x85}; -static const uint8_t msg_392[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_392[] = {0x21,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8f,0x3a,0xf2,0x30,0x7b,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_393[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_393[] = {0x04,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x87,0xa3,0x2c,0xda,0x75,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_394[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_394[] = {0x30,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x84,0x97,0x10,0xe7,0x51,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_395[] = {0x6f,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x06,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x84}; -static const uint8_t msg_396[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_396[] = {0x21,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0xdb,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_397[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_397[] = {0x04,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x87,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x60,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_398[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_398[] = {0x30,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x84,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x41,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_399[] = {0x6f,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x06,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x87}; -static const uint8_t msg_400[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_400[] = {0x21,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0xd8,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_401[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_401[] = {0x04,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x87,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x63,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_402[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_402[] = {0x30,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x84,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x42,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_403[] = {0x6f,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x06,0xcd,0x3e,0xa0,0x47,0x37,0x48,0xc5}; -static const uint8_t msg_404[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_404[] = {0x21,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0x9a,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_405[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_405[] = {0x04,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x87,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x21,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_406[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_406[] = {0x30,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x84,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x00,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_407[] = {0x6f,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x06,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x05}; -static const uint8_t msg_408[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_408[] = {0x21,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0x5a,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_409[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_409[] = {0x04,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x87,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0xe1,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_410[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_410[] = {0x30,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x84,0x97,0x10,0xe7,0xd1,0xf7,0x29,0xc0,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_411[] = {0x6e,0xf5,0xb8,0xef,0x53,0xfc,0x36,0x56,0x07,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x85}; -static const uint8_t msg_412[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_412[] = {0x20,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0x78,0x8e,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_413[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_413[] = {0x05,0xb4,0xe8,0x16,0x6f,0x28,0x08,0x29,0x86,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_414[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_414[] = {0x31,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0x37,0x85,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_415[] = {0x6f,0xf5,0xb8,0x6f,0x53,0xfc,0x36,0xd6,0x06,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x85}; -static const uint8_t msg_416[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_416[] = {0x21,0x2e,0x4a,0x0f,0x8b,0x4c,0x66,0xf8,0x8f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0xda,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_417[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_417[] = {0x04,0xb4,0xe8,0x96,0x6f,0x28,0x08,0xa9,0x87,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0x61,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_418[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_418[] = {0x30,0x5d,0x6c,0x78,0xee,0xb3,0x6a,0xb7,0x84,0x97,0x10,0xe7,0xd1,0xf7,0x29,0x40,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_419[] = {0x6f,0xf5,0xb8,0xef,0x53,0xfc,0x36,0xd6,0x06,0xcd,0x3e,0xa0,0x47,0x37,0x48,0x05}; -static const uint8_t msg_420[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_420[] = {0x21,0x2e,0x4a,0x8f,0x8b,0x4c,0x66,0xf8,0x8f,0x3a,0xf2,0x30,0xfb,0x1c,0x3a,0x5a,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_421[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_421[] = {0x04,0xb4,0xe8,0x16,0x6f,0x28,0x08,0xa9,0x87,0xa3,0x2c,0xda,0xf5,0x3d,0xeb,0xe1,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_422[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_422[] = {0x30,0x5d,0x6c,0xf8,0xee,0xb3,0x6a,0xb7,0x84,0x97,0x10,0xe7,0xd1,0xf7,0x29,0xc0,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_423[] = {0x90,0x0a,0x47,0x10,0xac,0x03,0xc9,0xa9,0xf9,0x32,0xc1,0x5f,0xb8,0xc8,0xb7,0x7a}; -static const uint8_t msg_424[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_424[] = {0xde,0xd1,0xb5,0x70,0x74,0xb3,0x99,0x87,0x70,0xc5,0x0d,0xcf,0x04,0xe3,0xc5,0x25,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_425[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_425[] = {0xfb,0x4b,0x17,0xe9,0x90,0xd7,0xf7,0xd6,0x78,0x5c,0xd3,0x25,0x0a,0xc2,0x14,0x9e,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_426[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_426[] = {0xcf,0xa2,0x93,0x07,0x11,0x4c,0x95,0xc8,0x7b,0x68,0xef,0x18,0x2e,0x08,0xd6,0xbf,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_427[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -static const uint8_t msg_428[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_428[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_429[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_429[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_430[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_430[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_431[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; -static const uint8_t msg_432[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_432[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_433[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_433[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_434[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_434[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_435[] = {0xef,0x75,0x38,0x6f,0xd3,0x7c,0xb6,0xd6,0x86,0x4d,0xbe,0x20,0xc7,0xb7,0xc8,0x05}; -static const uint8_t msg_436[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_436[] = {0xa1,0xae,0xca,0x0f,0x0b,0xcc,0xe6,0xf8,0x0f,0xba,0x72,0xb0,0x7b,0x9c,0xba,0x5a,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_437[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_437[] = {0x84,0x34,0x68,0x96,0xef,0xa8,0x88,0xa9,0x07,0x23,0xac,0x5a,0x75,0xbd,0x6b,0xe1,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_438[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_438[] = {0xb0,0xdd,0xec,0x78,0x6e,0x33,0xea,0xb7,0x04,0x17,0x90,0x67,0x51,0x77,0xa9,0xc0,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; -static const uint8_t ct_439[] = {0x6e,0xf4,0xb9,0xee,0x52,0xfd,0x37,0x57,0x07,0xcc,0x3f,0xa1,0x46,0x36,0x49,0x84}; -static const uint8_t msg_440[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37}; -static const uint8_t ct_440[] = {0x20,0x2f,0x4b,0x8e,0x8a,0x4d,0x67,0x79,0x8e,0x3b,0xf3,0x31,0xfa,0x1d,0x3b,0xdb,0x5e,0xad,0x70,0xc7,0xf0,0x66,0xd4,0xdf}; -static const uint8_t msg_441[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}; -static const uint8_t ct_441[] = {0x05,0xb5,0xe9,0x17,0x6e,0x29,0x09,0x28,0x86,0xa2,0x2d,0xdb,0xf4,0x3c,0xea,0x60,0x21,0x1d,0xff,0xad,0x75,0x62,0xc4,0xb9,0x24,0xbb,0x79,0xfe,0xd7,0x3d,0x9c,0xe2}; -static const uint8_t msg_442[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43}; -static const uint8_t ct_442[] = {0x31,0x5c,0x6d,0xf9,0xef,0xb2,0x6b,0x36,0x85,0x96,0x11,0xe6,0xd0,0xf6,0x28,0x41,0xad,0xfd,0x10,0xa7,0x61,0x5d,0x65,0x15,0xb9,0x99,0xdb,0xfc,0x5a,0x10,0xf3,0xae,0x9d,0xf5,0xf1,0x9a}; - -static const aes_siv_test_case aes_siv_tests[] = { - { 1, "RFC 5297", {0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff}, 32, aad_1, 24, msg_1, 14, ct_1, 30, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 2, "empty message", {0x2b,0x27,0xe4,0x29,0xfb,0x6c,0x02,0x67,0x8e,0x58,0x9c,0xcc,0x44,0x37,0xc5,0xad,0xfb,0x44,0xb3,0x31,0xab,0x6d,0x21,0xea,0x32,0x17,0x27,0xe6,0xec,0x03,0xd3,0x54}, 32, NULL, 0, NULL, 0, ct_2, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 3, "empty message", {0xe4,0x09,0x92,0xeb,0x4f,0x64,0x9e,0x5d,0x49,0x13,0x46,0x52,0xae,0xcc,0x24,0xba,0xfa,0x6b,0x45,0xce,0x8d,0xd9,0xe9,0xd3,0x71,0xed,0xe7,0xd5,0xde,0x84,0xfa,0x72}, 32, aad_3, 12, NULL, 0, ct_3, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 4, "empty message", {0x99,0x03,0x79,0x35,0xe6,0x20,0xda,0x1d,0x67,0xfa,0xf1,0xe2,0x6d,0x5a,0x0e,0x2c,0x5a,0xc2,0xea,0xe5,0xee,0xc7,0xcb,0xb7,0xb7,0xa6,0x13,0x05,0x6f,0x67,0x19,0xe3}, 32, aad_4, 15, NULL, 0, ct_4, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 5, "empty message", {0x7b,0xf9,0xe5,0x36,0xb6,0x6a,0x21,0x5c,0x22,0x23,0x3f,0xe2,0xda,0xaa,0x74,0x3a,0x89,0x8b,0x9a,0xcb,0x9f,0x78,0x02,0xde,0x70,0xb4,0x0e,0x3d,0x6e,0x43,0xef,0x97}, 32, aad_5, 16, NULL, 0, ct_5, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 6, "empty message", {0xea,0x70,0x81,0xdb,0x53,0xce,0x49,0x55,0x9f,0x9f,0xd2,0xb5,0x3e,0x00,0xf9,0x1b,0x68,0xc2,0xbd,0xba,0x94,0x69,0x61,0xda,0x1a,0x5b,0xc7,0x09,0x18,0x29,0x7a,0x43}, 32, aad_6, 20, NULL, 0, ct_6, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 7, "empty message", {0x1e,0x22,0x5c,0xaf,0xb9,0x03,0x39,0xbb,0xa1,0xb2,0x40,0x76,0xd4,0x20,0x6c,0x3e,0x79,0xc3,0x55,0x80,0x5d,0x85,0x16,0x82,0xbc,0x81,0x8b,0xaa,0x4f,0x5a,0x77,0x79}, 32, aad_7, 32, NULL, 0, ct_7, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 8, "message size divisible by block size", {0x61,0x2e,0x83,0x78,0x43,0xce,0xae,0x7f,0x61,0xd4,0x96,0x25,0xfa,0xa7,0xe7,0x49,0x4f,0x92,0x53,0xe2,0x0c,0xb3,0xad,0xce,0xa6,0x86,0x51,0x2b,0x04,0x39,0x36,0xcd}, 32, aad_8, 16, msg_8, 16, ct_8, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 9, "message size divisible by block size", {0x96,0xe1,0xe4,0x89,0x6f,0xb2,0xcd,0x05,0xf1,0x33,0xa6,0xa1,0x00,0xbc,0x56,0x09,0xa7,0xac,0x3c,0xa6,0xd8,0x17,0x21,0xe9,0x22,0xda,0xdd,0x69,0xad,0x07,0xa8,0x92}, 32, aad_9, 16, msg_9, 32, ct_9, 48, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 10, "message size divisible by block size", {0x64,0x9e,0x37,0x3e,0x68,0x1e,0xf5,0x2e,0x3c,0x10,0xac,0x26,0x54,0x84,0x75,0x09,0x32,0xa9,0x91,0x8f,0x28,0xfb,0x82,0x4f,0x7c,0xb5,0x0a,0xda,0xb3,0x97,0x81,0xfe}, 32, aad_10, 16, msg_10, 48, ct_10, 64, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 11, "small plaintext size", {0x29,0x89,0x62,0x33,0x5a,0x07,0x5e,0x9e,0xac,0xb7,0xa7,0x62,0x7b,0xea,0xfa,0x4e,0xe5,0xa0,0x22,0x42,0x42,0x3c,0xdf,0xb0,0xb4,0xf1,0x06,0xeb,0x61,0xcf,0x56,0x63}, 32, aad_11, 12, msg_11, 1, ct_11, 17, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 12, "small plaintext size", {0xea,0x1a,0x78,0x31,0xe6,0xfd,0x08,0x04,0x56,0x50,0x7a,0x99,0x6b,0x6d,0x71,0x66,0x8c,0x2c,0xec,0x43,0xc7,0x57,0x53,0x9c,0x3b,0x53,0x42,0xfa,0xdb,0xe6,0x4d,0xc4}, 32, aad_12, 12, msg_12, 2, ct_12, 18, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 13, "small plaintext size", {0x00,0x9e,0x82,0x88,0xda,0x0a,0x3d,0x22,0xae,0xaa,0x23,0x1f,0xbb,0xfd,0xe9,0xed,0x90,0x1d,0x22,0xdf,0x9f,0x3a,0xb7,0x07,0xe1,0x5a,0xa2,0xfc,0x39,0x0d,0x06,0x79}, 32, aad_13, 12, msg_13, 3, ct_13, 19, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 14, "small plaintext size", {0xb6,0x20,0x2e,0xf3,0xda,0xd5,0xa4,0x26,0x67,0xf0,0x20,0xf0,0xe4,0xbd,0x89,0xd8,0x45,0x71,0x1d,0xa7,0x7f,0x98,0xc7,0x47,0xeb,0x91,0x4d,0xe8,0x69,0x63,0x8b,0xcf}, 32, aad_14, 12, msg_14, 4, ct_14, 20, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 15, "small plaintext size", {0xfa,0x82,0xae,0xf8,0xc8,0xd6,0xe3,0xcd,0x8f,0x8d,0x05,0x3e,0xa6,0xb1,0xb0,0x7c,0xa3,0xbc,0x01,0x52,0x50,0x6d,0x46,0x49,0x26,0x63,0x0d,0x6f,0xd8,0x3e,0x8a,0x72}, 32, aad_15, 12, msg_15, 5, ct_15, 21, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 16, "small plaintext size", {0x4e,0xd2,0x37,0xae,0x3d,0x06,0x6d,0xf7,0x66,0xbe,0xa9,0x23,0x11,0x6b,0xf9,0xd2,0xce,0x6f,0x63,0xd3,0x4a,0x4f,0x56,0xed,0x86,0x31,0xba,0xcc,0xab,0xd7,0x06,0x47}, 32, aad_16, 12, msg_16, 6, ct_16, 22, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 17, "small plaintext size", {0x56,0xdf,0x5d,0x41,0xa1,0x10,0xa6,0x3a,0xcc,0x7b,0x7c,0x04,0x5b,0xe9,0xf3,0x5a,0x8f,0x2f,0xaf,0x16,0xd8,0x3f,0xb5,0x59,0x26,0x8e,0xb8,0x96,0x34,0x84,0xf5,0x52}, 32, aad_17, 12, msg_17, 7, ct_17, 23, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 18, "small plaintext size", {0x2e,0x94,0xa8,0x4c,0x78,0xbe,0x80,0xcd,0x59,0x83,0x66,0x05,0x8d,0x4f,0x6c,0xdf,0x80,0x95,0x66,0x6d,0xca,0xc7,0xa0,0x0a,0xd8,0x32,0xd9,0xf3,0x3e,0x20,0xd1,0x3c}, 32, aad_18, 12, msg_18, 8, ct_18, 24, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 19, "small plaintext size", {0x60,0xbf,0x71,0x1a,0x16,0x2c,0xf6,0xa1,0xb1,0x08,0xd1,0x35,0x1f,0x9f,0xd2,0xee,0x50,0x22,0xa9,0xdf,0x3c,0x5e,0x49,0x42,0x68,0x22,0x6b,0x17,0x51,0x8a,0x93,0xb7}, 32, aad_19, 12, msg_19, 9, ct_19, 25, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 20, "small plaintext size", {0x5a,0xad,0xf8,0xdd,0x38,0x0e,0x42,0x87,0x58,0x21,0x55,0xf1,0x11,0x65,0xb3,0x1d,0xc8,0xed,0x76,0x94,0x68,0x89,0xa2,0xbb,0x86,0x33,0x99,0x0f,0xb6,0x2f,0xc4,0x6f}, 32, aad_20, 12, msg_20, 10, ct_20, 26, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 21, "small plaintext size", {0xb0,0x99,0xc4,0xa6,0x13,0xf5,0xef,0xda,0x82,0xb0,0x69,0xd9,0xa7,0x6c,0x02,0xa4,0x04,0x9c,0x12,0x31,0x0e,0x25,0xf2,0x72,0xdb,0xd9,0xd1,0x55,0xae,0xdd,0x8d,0x52}, 32, aad_21, 12, msg_21, 11, ct_21, 27, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 22, "small plaintext size", {0xdd,0x06,0x55,0xb5,0x09,0x9c,0x4a,0xcb,0x60,0xc8,0xaf,0xac,0xed,0xe1,0xb6,0xac,0x04,0x28,0x3c,0x4f,0xcd,0xd1,0xfe,0xe2,0xf5,0xaa,0xa6,0xd8,0x6b,0xf6,0xc0,0x25}, 32, aad_22, 12, msg_22, 12, ct_22, 28, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 23, "small plaintext size", {0xaa,0x62,0x85,0x69,0x3f,0xc4,0x0a,0x59,0xeb,0xc2,0xbd,0xab,0x16,0xf1,0xe9,0x11,0x1e,0xc7,0x94,0xce,0x5e,0xc6,0x3b,0x8f,0x89,0xfa,0xfe,0x1b,0x7f,0xed,0xfa,0xcf}, 32, aad_23, 12, msg_23, 13, ct_23, 29, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 24, "small plaintext size", {0x18,0xa4,0x68,0x8d,0xa2,0xad,0x1e,0x11,0x2e,0xa5,0x6e,0xf6,0xda,0x91,0x07,0xe0,0xf1,0x09,0x4e,0xee,0xd3,0xf6,0xb8,0x68,0x20,0x29,0x52,0xd5,0x6e,0x0f,0x82,0x39}, 32, aad_24, 12, msg_24, 14, ct_24, 30, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 25, "small plaintext size", {0x95,0xb3,0x30,0xaa,0x5f,0xff,0xa6,0xc0,0xe2,0x9f,0xd6,0xfa,0x0d,0xeb,0xdc,0xb9,0xcf,0x6b,0x44,0x88,0x20,0xbe,0xa2,0x48,0x75,0x08,0x9e,0xc8,0xca,0x5a,0x23,0x87}, 32, aad_25, 12, msg_25, 15, ct_25, 31, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 26, "plaintext size > 16", {0xb3,0xb7,0xc2,0xc6,0xd3,0xd8,0x09,0x18,0x21,0x8a,0xfc,0xd8,0xbf,0x2a,0x71,0xcf,0x02,0x20,0xe2,0xe8,0x08,0x4e,0xad,0x8b,0xa1,0xab,0xfb,0x89,0x3a,0xe3,0x6d,0x40}, 32, aad_26, 12, msg_26, 17, ct_26, 33, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 27, "plaintext size > 16", {0x27,0x00,0xa2,0x0e,0xf5,0xc3,0xeb,0x4d,0xf1,0x23,0x56,0x8d,0x0d,0xf0,0x42,0xc3,0x5d,0x32,0xb4,0x24,0x37,0xef,0xb1,0x03,0x2a,0x6a,0x1f,0xe5,0x35,0x97,0x67,0xcc}, 32, aad_27, 12, msg_27, 20, ct_27, 36, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 28, "plaintext size > 16", {0xcc,0x5d,0x59,0x9a,0xec,0xbe,0xd3,0x5b,0xb4,0xe1,0x3a,0x2f,0x79,0x58,0x6d,0xfe,0x42,0xe6,0x38,0x2e,0x8f,0xa8,0x32,0x6b,0x67,0x4f,0x34,0x71,0x6d,0x63,0x76,0xf2}, 32, aad_28, 12, msg_28, 31, ct_28, 47, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 29, "plaintext size > 16", {0x71,0xa7,0xad,0xc7,0x22,0x2f,0x47,0x1c,0x28,0xf6,0x82,0xc1,0x2d,0x45,0xfe,0xed,0x45,0x55,0x60,0x00,0xa9,0x86,0x03,0x59,0x22,0x92,0x4a,0xd1,0x54,0xba,0x5f,0xa5}, 32, aad_29, 12, msg_29, 40, ct_29, 56, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 30, "plaintext size > 16", {0x83,0xbc,0x39,0xbf,0x7b,0x5f,0xaa,0xf0,0xf9,0x22,0x3e,0xd2,0xaa,0x76,0x1a,0xb3,0x2c,0x04,0x99,0x3e,0x3f,0xbc,0xcd,0x34,0xee,0x61,0x6f,0xfd,0x28,0xce,0x57,0x66}, 32, aad_30, 12, msg_30, 80, ct_30, 96, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 31, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_31, 16, ct_31, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 32, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, aad_32, 16, msg_32, 16, ct_32, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 33, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_33, 16, ct_33, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 34, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, aad_34, 16, msg_34, 16, ct_34, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 35, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_35, 16, ct_35, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 36, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, aad_36, 16, msg_36, 16, ct_36, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 37, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_37, 16, ct_37, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 38, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, aad_38, 16, msg_38, 16, ct_38, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 39, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_39, 16, ct_39, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 40, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, aad_40, 16, msg_40, 16, ct_40, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 41, "Flipped bit 0 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_41, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 42, "Flipped bit 0 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_42, 8, ct_42, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 43, "Flipped bit 0 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_43, 16, ct_43, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 44, "Flipped bit 0 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_44, 20, ct_44, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 45, "Flipped bit 1 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_45, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 46, "Flipped bit 1 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_46, 8, ct_46, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 47, "Flipped bit 1 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_47, 16, ct_47, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 48, "Flipped bit 1 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_48, 20, ct_48, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 49, "Flipped bit 7 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_49, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 50, "Flipped bit 7 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_50, 8, ct_50, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 51, "Flipped bit 7 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_51, 16, ct_51, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 52, "Flipped bit 7 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_52, 20, ct_52, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 53, "Flipped bit 8 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_53, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 54, "Flipped bit 8 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_54, 8, ct_54, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 55, "Flipped bit 8 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_55, 16, ct_55, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 56, "Flipped bit 8 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_56, 20, ct_56, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 57, "Flipped bit 31 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_57, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 58, "Flipped bit 31 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_58, 8, ct_58, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 59, "Flipped bit 31 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_59, 16, ct_59, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 60, "Flipped bit 31 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_60, 20, ct_60, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 61, "Flipped bit 32 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_61, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 62, "Flipped bit 32 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_62, 8, ct_62, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 63, "Flipped bit 32 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_63, 16, ct_63, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 64, "Flipped bit 32 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_64, 20, ct_64, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 65, "Flipped bit 33 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_65, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 66, "Flipped bit 33 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_66, 8, ct_66, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 67, "Flipped bit 33 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_67, 16, ct_67, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 68, "Flipped bit 33 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_68, 20, ct_68, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 69, "Flipped bit 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_69, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 70, "Flipped bit 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_70, 8, ct_70, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 71, "Flipped bit 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_71, 16, ct_71, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 72, "Flipped bit 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_72, 20, ct_72, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 73, "Flipped bit 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_73, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 74, "Flipped bit 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_74, 8, ct_74, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 75, "Flipped bit 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_75, 16, ct_75, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 76, "Flipped bit 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_76, 20, ct_76, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 77, "Flipped bit 71 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_77, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 78, "Flipped bit 71 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_78, 8, ct_78, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 79, "Flipped bit 71 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_79, 16, ct_79, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 80, "Flipped bit 71 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_80, 20, ct_80, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 81, "Flipped bit 77 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_81, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 82, "Flipped bit 77 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_82, 8, ct_82, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 83, "Flipped bit 77 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_83, 16, ct_83, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 84, "Flipped bit 77 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_84, 20, ct_84, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 85, "Flipped bit 80 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_85, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 86, "Flipped bit 80 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_86, 8, ct_86, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 87, "Flipped bit 80 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_87, 16, ct_87, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 88, "Flipped bit 80 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_88, 20, ct_88, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 89, "Flipped bit 96 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_89, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 90, "Flipped bit 96 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_90, 8, ct_90, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 91, "Flipped bit 96 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_91, 16, ct_91, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 92, "Flipped bit 96 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_92, 20, ct_92, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 93, "Flipped bit 97 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_93, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 94, "Flipped bit 97 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_94, 8, ct_94, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 95, "Flipped bit 97 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_95, 16, ct_95, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 96, "Flipped bit 97 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_96, 20, ct_96, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 97, "Flipped bit 103 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_97, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 98, "Flipped bit 103 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_98, 8, ct_98, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 99, "Flipped bit 103 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_99, 16, ct_99, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 100, "Flipped bit 103 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_100, 20, ct_100, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 101, "Flipped bit 120 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_101, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 102, "Flipped bit 120 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_102, 8, ct_102, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 103, "Flipped bit 120 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_103, 16, ct_103, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 104, "Flipped bit 120 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_104, 20, ct_104, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 105, "Flipped bit 121 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_105, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 106, "Flipped bit 121 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_106, 8, ct_106, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 107, "Flipped bit 121 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_107, 16, ct_107, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 108, "Flipped bit 121 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_108, 20, ct_108, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 109, "Flipped bit 126 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_109, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 110, "Flipped bit 126 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_110, 8, ct_110, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 111, "Flipped bit 126 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_111, 16, ct_111, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 112, "Flipped bit 126 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_112, 20, ct_112, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 113, "Flipped bit 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_113, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 114, "Flipped bit 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_114, 8, ct_114, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 115, "Flipped bit 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_115, 16, ct_115, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 116, "Flipped bit 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_116, 20, ct_116, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 117, "Flipped bits 0 and 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_117, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 118, "Flipped bits 0 and 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_118, 8, ct_118, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 119, "Flipped bits 0 and 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_119, 16, ct_119, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 120, "Flipped bits 0 and 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_120, 20, ct_120, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 121, "Flipped bits 31 and 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_121, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 122, "Flipped bits 31 and 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_122, 8, ct_122, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 123, "Flipped bits 31 and 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_123, 16, ct_123, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 124, "Flipped bits 31 and 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_124, 20, ct_124, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 125, "Flipped bits 63 and 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_125, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 126, "Flipped bits 63 and 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_126, 8, ct_126, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 127, "Flipped bits 63 and 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_127, 16, ct_127, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 128, "Flipped bits 63 and 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_128, 20, ct_128, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 129, "all bits of tag flipped", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_129, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 130, "all bits of tag flipped", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_130, 8, ct_130, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 131, "all bits of tag flipped", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_131, 16, ct_131, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 132, "all bits of tag flipped", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_132, 20, ct_132, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 133, "Tag changed to all zero", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_133, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 134, "Tag changed to all zero", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_134, 8, ct_134, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 135, "Tag changed to all zero", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_135, 16, ct_135, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 136, "Tag changed to all zero", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_136, 20, ct_136, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 137, "tag changed to all 1", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_137, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 138, "tag changed to all 1", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_138, 8, ct_138, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 139, "tag changed to all 1", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_139, 16, ct_139, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 140, "tag changed to all 1", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_140, 20, ct_140, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 141, "msbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_141, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 142, "msbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_142, 8, ct_142, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 143, "msbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_143, 16, ct_143, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 144, "msbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_144, 20, ct_144, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 145, "lsbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, NULL, 0, ct_145, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 146, "lsbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_146, 8, ct_146, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 147, "lsbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_147, 16, ct_147, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 148, "lsbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f}, 32, NULL, 0, msg_148, 20, ct_148, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 149, "empty message", {0xd3,0xd5,0x8a,0x2f,0x21,0xe6,0x2f,0x50,0x95,0x54,0x2e,0x61,0x81,0x68,0xef,0x04,0x09,0x22,0xab,0x7d,0x80,0xb3,0x84,0x00,0x55,0xeb,0x9c,0xaf,0x57,0x26,0xa8,0xd4,0xa7,0xf0,0x71,0xdc,0x40,0xdd,0xb3,0x20,0xef,0xfc,0x09,0x42,0x11,0x73,0x50,0x90}, 48, NULL, 0, NULL, 0, ct_149, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 150, "empty message", {0xad,0x0f,0x78,0x62,0x38,0x6c,0x35,0xfe,0xe1,0x28,0xae,0x7f,0xf1,0x8d,0xb0,0x84,0xa0,0xf4,0x57,0xfc,0xfc,0x7f,0xe1,0xc5,0x37,0x0b,0x14,0x5f,0x7f,0xa6,0x45,0xa9,0x7b,0xa3,0xeb,0x4f,0x90,0xe1,0x89,0x41,0xb1,0x8e,0x8d,0x89,0x49,0x4e,0xc7,0x96}, 48, aad_150, 12, NULL, 0, ct_150, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 151, "empty message", {0x27,0x8e,0x77,0x0c,0xa6,0x00,0xbb,0x23,0xf5,0xd8,0x72,0x5b,0xfd,0x0c,0xfc,0x05,0xb9,0x10,0x57,0xe7,0x9c,0x89,0x0a,0x69,0x7d,0x41,0xe9,0xff,0x68,0x7c,0x6a,0x14,0xea,0x48,0xfb,0x22,0x8d,0x7f,0x95,0xab,0x4a,0x93,0xc5,0xba,0x9d,0x96,0x62,0x62}, 48, aad_151, 15, NULL, 0, ct_151, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 152, "empty message", {0x5a,0xd9,0x85,0xb9,0xbc,0xb4,0x61,0xf9,0x11,0x59,0x37,0xb6,0xbd,0xe7,0x07,0x3f,0xbe,0xd9,0xe8,0xbf,0x32,0x24,0x5a,0xfe,0x58,0x36,0xe8,0xc2,0xf6,0x7b,0x39,0x99,0x26,0x6b,0xa0,0xd8,0xd9,0xeb,0xa6,0xfa,0x97,0x8c,0x47,0xea,0x9e,0xf4,0x69,0x0a}, 48, aad_152, 16, NULL, 0, ct_152, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 153, "empty message", {0xb6,0x5c,0x2a,0x4f,0x88,0xf7,0x33,0x14,0x2c,0xc6,0x6e,0xd9,0xaf,0xf4,0x7e,0x77,0xf3,0xa6,0x33,0x9d,0x30,0xe0,0x30,0x29,0x0d,0x34,0xbe,0x40,0xdf,0xa7,0xb3,0x3e,0x37,0xbc,0x2f,0x48,0xea,0x86,0x17,0xf4,0xe7,0xd6,0x0c,0x28,0xc0,0xc0,0x1a,0x0d}, 48, aad_153, 20, NULL, 0, ct_153, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 154, "empty message", {0x4c,0xd9,0xd4,0xd7,0x29,0x79,0x2e,0x6a,0x59,0x9b,0xd5,0x9c,0x33,0x0a,0xe8,0xa4,0xdf,0x40,0x77,0x22,0x5c,0x9c,0x63,0x3c,0xb5,0x91,0x90,0xf3,0xa5,0xd1,0x15,0x0f,0xdc,0x38,0xa7,0xfb,0xc6,0x87,0x51,0x6f,0x82,0xd6,0x35,0x4e,0x57,0x28,0x1c,0x1a}, 48, aad_154, 32, NULL, 0, ct_154, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 155, "message size divisible by block size", {0xca,0x9d,0xb6,0x22,0x14,0xc3,0xaf,0xab,0x38,0x5b,0x90,0x86,0xf1,0xcb,0x90,0xd1,0x71,0x95,0xd4,0x95,0xef,0x47,0x64,0x2d,0xba,0xd0,0x6f,0x4e,0x7d,0x0b,0xab,0x13,0x6c,0x77,0x88,0x50,0x29,0xad,0x44,0x2b,0x30,0xc3,0x4c,0x8b,0x52,0x90,0xe7,0xd0}, 48, aad_155, 16, msg_155, 16, ct_155, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 156, "message size divisible by block size", {0xc4,0xbb,0x58,0xd7,0x3a,0x61,0xee,0xef,0x0e,0xc2,0x34,0x90,0xdc,0x3c,0x3a,0x3e,0x14,0x02,0x44,0xc9,0xbe,0x88,0x20,0x96,0x58,0xcc,0x56,0x54,0xa9,0x96,0xdb,0x23,0x72,0xc2,0x21,0x2f,0xfd,0xc2,0x60,0xbb,0xdb,0x92,0xa5,0x20,0xc8,0x6f,0x96,0xd8}, 48, aad_156, 16, msg_156, 32, ct_156, 48, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 157, "message size divisible by block size", {0x9e,0xae,0x72,0xa3,0x96,0x4b,0xdf,0x14,0xad,0xef,0x86,0x16,0xaa,0x54,0x41,0x57,0x7b,0x7b,0xbc,0x32,0x46,0x52,0x51,0x6b,0x4c,0x29,0xa7,0xb0,0xf3,0xbf,0xa7,0x19,0xbe,0x49,0xe3,0xd2,0xae,0x62,0x97,0x58,0x8a,0xda,0x65,0x2e,0xb4,0x5b,0x0a,0x00}, 48, aad_157, 16, msg_157, 48, ct_157, 64, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 158, "small plaintext size", {0xba,0x78,0x3a,0x71,0x5f,0xf6,0xee,0x6d,0x71,0xe3,0xa4,0xa7,0xad,0xb6,0x35,0x66,0x87,0xdb,0x12,0xcc,0x29,0x54,0x80,0x70,0x99,0xf9,0x74,0x71,0xc9,0x51,0xc7,0xf0,0xc3,0x35,0x71,0xd3,0x33,0x4d,0x11,0x1c,0x4e,0xa3,0x3a,0x12,0x36,0x5c,0x00,0x61}, 48, aad_158, 12, msg_158, 1, ct_158, 17, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 159, "small plaintext size", {0xb5,0xba,0x35,0xa5,0x97,0xbe,0x37,0xf8,0xf8,0x16,0x8a,0x40,0xe9,0xf4,0x7b,0x96,0x07,0x7c,0xec,0xed,0x6a,0xc0,0x96,0x8a,0x4e,0x5f,0xfa,0xbc,0x40,0x21,0x99,0x26,0x7b,0xcd,0x4f,0x74,0x06,0x40,0xc6,0x87,0x74,0x41,0xc6,0x3e,0x80,0x15,0xd8,0x6c}, 48, aad_159, 12, msg_159, 2, ct_159, 18, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 160, "small plaintext size", {0x17,0xa4,0x49,0x37,0xa1,0xf8,0xb8,0x02,0x9a,0x7f,0x64,0x13,0x7e,0xaa,0x2d,0x7d,0xe9,0x50,0xb4,0x9b,0x0e,0xf2,0xd8,0x39,0x94,0x15,0x1c,0x7b,0x9d,0xde,0x2e,0x87,0xc5,0xaa,0x3d,0xeb,0xfa,0x0a,0xd9,0xf0,0x28,0x26,0x0c,0x6d,0xc2,0xfc,0x7e,0x01}, 48, aad_160, 12, msg_160, 3, ct_160, 19, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 161, "small plaintext size", {0xbf,0xf6,0x84,0xf0,0x86,0xef,0x33,0x14,0x21,0x1b,0xa7,0x82,0xa2,0xe7,0xe7,0x5a,0x60,0xa9,0xa3,0xdf,0x9f,0xc5,0x05,0x05,0x7f,0x54,0xe2,0xb2,0x64,0xfb,0xe2,0xe5,0xea,0xe2,0x99,0x87,0x9f,0xcc,0xd2,0x6c,0xa3,0x9d,0x1e,0x33,0xb8,0x83,0x96,0x6e}, 48, aad_161, 12, msg_161, 4, ct_161, 20, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 162, "small plaintext size", {0x37,0x9c,0x42,0x55,0x81,0xca,0x80,0x94,0xe4,0x7d,0x1e,0xe4,0x9f,0xe9,0xa5,0xdd,0x3d,0xd8,0xd6,0x8c,0x6c,0x85,0xf8,0xb4,0xcb,0x56,0x84,0x9e,0x99,0x69,0x8e,0xe7,0x33,0x32,0xc8,0xb0,0xcc,0x6d,0xa0,0x62,0x7c,0x95,0xf2,0xde,0x9d,0xdd,0x08,0x71}, 48, aad_162, 12, msg_162, 5, ct_162, 21, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 163, "small plaintext size", {0x0f,0x11,0xa5,0x4e,0x9f,0x03,0x07,0x18,0x28,0x94,0x4e,0x39,0xa3,0xf5,0xa5,0x53,0x8c,0x4c,0x94,0x12,0x2e,0x75,0x7a,0xa7,0x06,0x2a,0xfd,0xb9,0x0d,0x5e,0x8b,0x4a,0xeb,0x41,0xe6,0x81,0x81,0x8a,0x14,0x98,0x31,0xab,0x7b,0x25,0xe2,0xca,0x3b,0x96}, 48, aad_163, 12, msg_163, 6, ct_163, 22, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 164, "small plaintext size", {0xe9,0x59,0xe0,0xc1,0x4f,0x3e,0x0d,0x8d,0xd4,0x41,0x62,0xd2,0x7f,0x4c,0x33,0x3a,0x33,0x73,0x32,0x55,0x01,0x67,0x73,0x19,0x49,0xc6,0x73,0x2b,0x23,0xa5,0xdb,0xd9,0xaa,0x3d,0xd8,0x01,0xb6,0x65,0x43,0x75,0x54,0x74,0xf4,0x47,0x74,0xe5,0xd8,0x23}, 48, aad_164, 12, msg_164, 7, ct_164, 23, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 165, "small plaintext size", {0xfe,0x64,0x12,0xc4,0x34,0x63,0xc2,0x2b,0x98,0x99,0x2f,0x8c,0x31,0x9b,0x66,0x27,0x18,0x25,0x5d,0x12,0x27,0x7c,0xe6,0x2e,0x56,0xba,0x25,0x8c,0xcc,0x7a,0x46,0x94,0x12,0x1e,0x69,0x12,0xed,0x74,0x5b,0x4a,0x6e,0x12,0xff,0x9d,0x38,0xc8,0x6e,0xf2}, 48, aad_165, 12, msg_165, 8, ct_165, 24, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 166, "small plaintext size", {0x71,0x00,0x2b,0x32,0x1b,0x1e,0x92,0x4a,0x45,0xd9,0x73,0x02,0xa0,0x8f,0x23,0x61,0xaf,0x1d,0x20,0x93,0xfa,0xf6,0x61,0xf0,0x4a,0xb4,0x7e,0xcc,0xa9,0xf5,0xec,0x9a,0x35,0xbe,0x3c,0xcf,0xf8,0xa4,0xae,0xd1,0xff,0x65,0x8d,0x19,0x5c,0x05,0xae,0xd7}, 48, aad_166, 12, msg_166, 9, ct_166, 25, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 167, "small plaintext size", {0xdf,0xf1,0xd0,0x25,0xa8,0xb6,0x2d,0xfb,0xe8,0xfd,0x7d,0x04,0x80,0xe5,0x72,0xf1,0xc5,0xe1,0x25,0xc1,0xab,0x4c,0x14,0x8e,0x37,0xff,0x9a,0x8e,0xc5,0xd8,0xa4,0xcf,0x35,0xbc,0x30,0x44,0x45,0xbe,0x3b,0xc4,0x5e,0xd3,0x7f,0x92,0xe0,0x32,0xaf,0x14}, 48, aad_167, 12, msg_167, 10, ct_167, 26, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 168, "small plaintext size", {0xda,0xe6,0x92,0x07,0x03,0xb8,0x05,0x00,0xb4,0x19,0x72,0x69,0xfa,0xf5,0xd7,0x4d,0xe8,0xe6,0x10,0x41,0x5e,0x19,0x4b,0x42,0x30,0x80,0xeb,0xaf,0x6d,0x99,0x87,0x3d,0xc3,0x07,0xdc,0x4f,0x6d,0x9f,0x32,0xad,0x0e,0xba,0xd8,0xad,0x78,0x52,0x69,0x0c}, 48, aad_168, 12, msg_168, 11, ct_168, 27, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 169, "small plaintext size", {0xe6,0x9e,0xa3,0x66,0xfd,0x38,0x5e,0x0e,0xd8,0xb9,0xcb,0xb0,0x17,0x00,0x65,0x4f,0xa2,0x8a,0xdd,0x8e,0x56,0xb7,0xea,0x68,0x3e,0x1f,0xd7,0x18,0x51,0x1a,0xb0,0xfb,0x22,0xdc,0xd7,0x10,0xc5,0x30,0xe0,0x0f,0xb6,0x6f,0x45,0x84,0xfa,0x21,0xe9,0xe6}, 48, aad_169, 12, msg_169, 12, ct_169, 28, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 170, "small plaintext size", {0xb6,0x0b,0x83,0x85,0x6f,0x56,0xcd,0xf8,0x90,0x27,0x46,0x0a,0x76,0x99,0x3f,0xdb,0xde,0x0f,0x2a,0xb0,0x1e,0x9d,0xde,0x2f,0xa7,0xc2,0x7e,0xf4,0x71,0x55,0xec,0x7c,0xab,0xa8,0x92,0xb2,0x7f,0xd9,0xa3,0x1e,0x89,0x23,0xbf,0xc4,0x47,0x94,0xcd,0x71}, 48, aad_170, 12, msg_170, 13, ct_170, 29, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 171, "small plaintext size", {0x85,0x96,0x98,0xa8,0x52,0xa1,0x31,0xa3,0x80,0x48,0x38,0xf3,0xd0,0x12,0xd6,0x08,0x8e,0x13,0x5b,0x6d,0xb1,0x60,0xb2,0xac,0x68,0xe6,0xdf,0xa6,0xec,0x33,0x0d,0xc0,0xd6,0x82,0xe4,0x06,0xc8,0x7c,0x15,0xb9,0xa7,0x4a,0xff,0xe4,0x41,0x74,0x94,0x95}, 48, aad_171, 12, msg_171, 14, ct_171, 30, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 172, "small plaintext size", {0xeb,0xe1,0xc2,0x73,0xba,0x54,0xb8,0x77,0xb9,0x37,0xe9,0x90,0x6c,0x40,0x63,0xe1,0x88,0xef,0xd5,0x7b,0xd3,0xa3,0x2b,0xe8,0x25,0x36,0x93,0x80,0xf1,0xb9,0xf6,0xb8,0xb6,0xa0,0xc2,0xab,0x13,0x90,0xe5,0x89,0xf6,0x10,0x1c,0x5f,0xfb,0x74,0x60,0xc7}, 48, aad_172, 12, msg_172, 15, ct_172, 31, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 173, "plaintext size > 16", {0x80,0xd5,0x0f,0xaf,0xb3,0xed,0xe5,0xdd,0xbb,0x50,0x58,0x82,0x73,0x03,0xa0,0x98,0xbf,0x21,0x3e,0x47,0xdc,0xff,0x12,0xea,0x53,0x38,0xa2,0xa0,0xf9,0x14,0xd8,0x4b,0xff,0x58,0xc8,0xc6,0x9c,0x3b,0x15,0x1d,0x6d,0xc3,0x80,0xfd,0x8f,0x3e,0x41,0x78}, 48, aad_173, 12, msg_173, 17, ct_173, 33, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 174, "plaintext size > 16", {0x5f,0x6b,0xfe,0x19,0x98,0x7d,0x5b,0xf6,0x47,0x1d,0xd9,0xe4,0x36,0x09,0x4f,0x7f,0xe3,0x3f,0x8a,0xcc,0xa3,0xb8,0xa4,0x1e,0x27,0x78,0x61,0xe2,0x02,0xbd,0x72,0x62,0xfc,0x2b,0x0b,0xd3,0xdf,0x9b,0x35,0xfa,0x2f,0xc3,0xc5,0x79,0x62,0x0f,0x00,0xeb}, 48, aad_174, 12, msg_174, 20, ct_174, 36, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 175, "plaintext size > 16", {0x9e,0xa3,0x73,0x52,0xe4,0x1b,0x57,0xd6,0x1e,0xd8,0x37,0xb2,0xac,0xe4,0x81,0x87,0x0d,0x24,0x13,0xd9,0x2b,0xf0,0x0f,0x30,0xdb,0xb8,0xfe,0x8d,0x25,0x0b,0x3c,0xeb,0xd0,0xf6,0x4d,0x71,0x4c,0xf6,0x1a,0x05,0x33,0xd0,0x2d,0x37,0x22,0x84,0xc6,0xc3}, 48, aad_175, 12, msg_175, 31, ct_175, 47, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 176, "plaintext size > 16", {0x25,0xb0,0xb4,0x04,0xbb,0x1f,0x78,0x44,0x6d,0x0e,0x5c,0xde,0x01,0x2e,0xe5,0x83,0x2c,0xb4,0x03,0x39,0x8a,0x3e,0x66,0xe9,0xb5,0xa2,0x44,0xb5,0x9d,0x89,0x94,0xee,0x10,0x18,0x4a,0x57,0x76,0xf3,0x57,0x8f,0xaa,0xb8,0x30,0xe8,0x65,0xf8,0x13,0x3c}, 48, aad_176, 12, msg_176, 40, ct_176, 56, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 177, "plaintext size > 16", {0x7e,0x22,0x5c,0xf2,0x00,0x4a,0x28,0xa0,0x91,0x98,0x6f,0x13,0x1f,0xd4,0x3e,0xd1,0x11,0xc0,0x69,0x3e,0x63,0x43,0x3f,0xfc,0x9d,0xad,0x90,0x29,0xc5,0x35,0x09,0x63,0x97,0x63,0x6e,0x13,0x29,0x6e,0xb6,0x21,0x43,0x16,0x26,0x43,0xb1,0x3c,0x75,0x46}, 48, aad_177, 12, msg_177, 80, ct_177, 96, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 178, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_178, 16, ct_178, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 179, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, aad_179, 16, msg_179, 16, ct_179, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 180, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_180, 16, ct_180, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 181, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, aad_181, 16, msg_181, 16, ct_181, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 182, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_182, 16, ct_182, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 183, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, aad_183, 16, msg_183, 16, ct_183, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 184, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_184, 16, ct_184, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 185, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, aad_185, 16, msg_185, 16, ct_185, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 186, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_186, 16, ct_186, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 187, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, aad_187, 16, msg_187, 16, ct_187, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 188, "Flipped bit 0 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_188, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 189, "Flipped bit 0 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_189, 8, ct_189, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 190, "Flipped bit 0 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_190, 16, ct_190, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 191, "Flipped bit 0 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_191, 20, ct_191, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 192, "Flipped bit 1 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_192, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 193, "Flipped bit 1 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_193, 8, ct_193, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 194, "Flipped bit 1 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_194, 16, ct_194, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 195, "Flipped bit 1 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_195, 20, ct_195, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 196, "Flipped bit 7 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_196, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 197, "Flipped bit 7 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_197, 8, ct_197, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 198, "Flipped bit 7 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_198, 16, ct_198, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 199, "Flipped bit 7 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_199, 20, ct_199, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 200, "Flipped bit 8 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_200, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 201, "Flipped bit 8 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_201, 8, ct_201, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 202, "Flipped bit 8 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_202, 16, ct_202, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 203, "Flipped bit 8 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_203, 20, ct_203, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 204, "Flipped bit 31 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_204, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 205, "Flipped bit 31 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_205, 8, ct_205, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 206, "Flipped bit 31 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_206, 16, ct_206, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 207, "Flipped bit 31 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_207, 20, ct_207, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 208, "Flipped bit 32 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_208, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 209, "Flipped bit 32 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_209, 8, ct_209, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 210, "Flipped bit 32 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_210, 16, ct_210, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 211, "Flipped bit 32 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_211, 20, ct_211, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 212, "Flipped bit 33 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_212, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 213, "Flipped bit 33 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_213, 8, ct_213, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 214, "Flipped bit 33 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_214, 16, ct_214, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 215, "Flipped bit 33 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_215, 20, ct_215, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 216, "Flipped bit 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_216, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 217, "Flipped bit 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_217, 8, ct_217, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 218, "Flipped bit 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_218, 16, ct_218, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 219, "Flipped bit 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_219, 20, ct_219, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 220, "Flipped bit 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_220, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 221, "Flipped bit 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_221, 8, ct_221, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 222, "Flipped bit 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_222, 16, ct_222, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 223, "Flipped bit 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_223, 20, ct_223, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 224, "Flipped bit 71 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_224, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 225, "Flipped bit 71 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_225, 8, ct_225, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 226, "Flipped bit 71 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_226, 16, ct_226, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 227, "Flipped bit 71 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_227, 20, ct_227, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 228, "Flipped bit 77 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_228, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 229, "Flipped bit 77 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_229, 8, ct_229, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 230, "Flipped bit 77 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_230, 16, ct_230, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 231, "Flipped bit 77 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_231, 20, ct_231, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 232, "Flipped bit 80 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_232, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 233, "Flipped bit 80 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_233, 8, ct_233, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 234, "Flipped bit 80 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_234, 16, ct_234, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 235, "Flipped bit 80 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_235, 20, ct_235, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 236, "Flipped bit 96 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_236, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 237, "Flipped bit 96 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_237, 8, ct_237, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 238, "Flipped bit 96 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_238, 16, ct_238, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 239, "Flipped bit 96 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_239, 20, ct_239, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 240, "Flipped bit 97 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_240, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 241, "Flipped bit 97 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_241, 8, ct_241, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 242, "Flipped bit 97 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_242, 16, ct_242, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 243, "Flipped bit 97 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_243, 20, ct_243, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 244, "Flipped bit 103 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_244, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 245, "Flipped bit 103 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_245, 8, ct_245, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 246, "Flipped bit 103 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_246, 16, ct_246, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 247, "Flipped bit 103 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_247, 20, ct_247, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 248, "Flipped bit 120 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_248, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 249, "Flipped bit 120 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_249, 8, ct_249, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 250, "Flipped bit 120 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_250, 16, ct_250, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 251, "Flipped bit 120 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_251, 20, ct_251, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 252, "Flipped bit 121 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_252, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 253, "Flipped bit 121 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_253, 8, ct_253, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 254, "Flipped bit 121 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_254, 16, ct_254, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 255, "Flipped bit 121 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_255, 20, ct_255, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 256, "Flipped bit 126 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_256, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 257, "Flipped bit 126 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_257, 8, ct_257, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 258, "Flipped bit 126 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_258, 16, ct_258, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 259, "Flipped bit 126 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_259, 20, ct_259, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 260, "Flipped bit 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_260, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 261, "Flipped bit 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_261, 8, ct_261, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 262, "Flipped bit 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_262, 16, ct_262, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 263, "Flipped bit 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_263, 20, ct_263, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 264, "Flipped bits 0 and 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_264, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 265, "Flipped bits 0 and 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_265, 8, ct_265, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 266, "Flipped bits 0 and 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_266, 16, ct_266, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 267, "Flipped bits 0 and 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_267, 20, ct_267, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 268, "Flipped bits 31 and 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_268, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 269, "Flipped bits 31 and 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_269, 8, ct_269, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 270, "Flipped bits 31 and 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_270, 16, ct_270, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 271, "Flipped bits 31 and 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_271, 20, ct_271, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 272, "Flipped bits 63 and 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_272, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 273, "Flipped bits 63 and 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_273, 8, ct_273, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 274, "Flipped bits 63 and 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_274, 16, ct_274, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 275, "Flipped bits 63 and 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_275, 20, ct_275, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 276, "all bits of tag flipped", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_276, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 277, "all bits of tag flipped", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_277, 8, ct_277, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 278, "all bits of tag flipped", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_278, 16, ct_278, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 279, "all bits of tag flipped", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_279, 20, ct_279, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 280, "Tag changed to all zero", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_280, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 281, "Tag changed to all zero", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_281, 8, ct_281, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 282, "Tag changed to all zero", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_282, 16, ct_282, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 283, "Tag changed to all zero", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_283, 20, ct_283, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 284, "tag changed to all 1", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_284, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 285, "tag changed to all 1", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_285, 8, ct_285, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 286, "tag changed to all 1", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_286, 16, ct_286, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 287, "tag changed to all 1", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_287, 20, ct_287, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 288, "msbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_288, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 289, "msbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_289, 8, ct_289, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 290, "msbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_290, 16, ct_290, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 291, "msbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_291, 20, ct_291, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 292, "lsbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, NULL, 0, ct_292, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 293, "lsbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_293, 8, ct_293, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 294, "lsbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_294, 16, ct_294, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 295, "lsbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f}, 48, NULL, 0, msg_295, 20, ct_295, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 296, "empty message", {0xbc,0x76,0x35,0xc1,0xfd,0x56,0x6a,0xa8,0x35,0x7f,0xd1,0x03,0x71,0x4b,0xfa,0xee,0x1c,0x9e,0x5b,0x3c,0x57,0x8b,0x39,0x80,0x40,0x1a,0x98,0x10,0x30,0x25,0x4a,0x54,0xb1,0x75,0x6a,0x8c,0x96,0xe6,0x00,0xb7,0x25,0x2f,0xd0,0xaa,0xb1,0x2f,0x39,0xd1,0x15,0xd2,0x56,0xb3,0xf3,0xe7,0xc2,0xc4,0x1a,0x7f,0xec,0xe7,0x2b,0xa7,0xc3,0xc4}, 64, NULL, 0, NULL, 0, ct_296, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 297, "empty message", {0xaf,0xf6,0x38,0x8f,0xdd,0x29,0x08,0xe0,0xc3,0xb6,0x10,0xe3,0xdc,0xd4,0x10,0xc8,0x14,0x6a,0x26,0x8d,0x6b,0xef,0xd5,0xc4,0x5f,0xfd,0xd2,0x35,0x08,0xb5,0xb3,0x11,0xcc,0x3a,0x9d,0x8f,0x83,0x8f,0x45,0x64,0x36,0xb2,0x89,0x01,0x86,0x82,0x15,0x1d,0xd5,0x7d,0x8d,0x65,0xd1,0xa8,0x23,0xc0,0x6e,0xca,0x8a,0xb8,0xee,0x01,0xda,0x01}, 64, aad_297, 12, NULL, 0, ct_297, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 298, "empty message", {0x48,0x42,0x61,0xeb,0xf7,0xe1,0xfb,0x66,0xe0,0xbc,0xaf,0xe8,0xf4,0xcc,0xf9,0xc5,0xac,0xcc,0x90,0x8f,0xdb,0x23,0xeb,0x7c,0x52,0x54,0xd6,0x14,0x07,0x2f,0x26,0xe1,0x06,0xb3,0x45,0x01,0xd1,0x3c,0x1d,0xad,0x1f,0x14,0x64,0x8c,0x6a,0x14,0x21,0x32,0xdd,0x7f,0x2f,0x12,0x68,0xdd,0x6b,0x70,0xfb,0xcd,0xe2,0xfe,0x98,0xf0,0x32,0x45}, 64, aad_298, 15, NULL, 0, ct_298, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 299, "empty message", {0x0b,0x6a,0xaf,0x05,0xf9,0xb5,0x22,0x1e,0x53,0x99,0x40,0xcd,0x83,0xcb,0x29,0xd2,0xbc,0xc7,0xa0,0xaa,0x47,0x2d,0x8f,0xc6,0x7b,0xed,0xd0,0x10,0x88,0x69,0x39,0x4e,0x33,0xc9,0xf2,0x33,0xd4,0xb2,0xcc,0x9c,0x6a,0x59,0xe8,0xce,0x9c,0xd2,0x68,0xa0,0xf3,0xf2,0x85,0x7e,0x08,0xfe,0x1e,0xb3,0x29,0xef,0x34,0x7d,0xac,0xe1,0x55,0x7d}, 64, aad_299, 16, NULL, 0, ct_299, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 300, "empty message", {0xd4,0x7a,0xb6,0xd5,0x1f,0x99,0xf4,0x24,0x9d,0xa5,0x6c,0x93,0xd1,0xf0,0x9e,0x85,0x62,0x31,0xf3,0xfe,0xd7,0x77,0xb3,0x03,0x11,0x1a,0xd3,0x10,0x79,0x27,0x08,0x39,0xe4,0xbc,0x4b,0x5d,0x86,0x23,0x16,0x2d,0x47,0x38,0xd7,0x08,0x03,0x93,0x4a,0x75,0xf4,0x57,0xfd,0xbf,0x4a,0x27,0x7b,0x82,0x8c,0xb6,0xe2,0x75,0x3e,0x88,0x70,0x2a}, 64, aad_300, 20, NULL, 0, ct_300, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 301, "empty message", {0xee,0xf6,0xbc,0xf1,0x6e,0xf7,0xae,0x17,0x32,0x6a,0x33,0xf2,0x2d,0x14,0x06,0xec,0x1b,0xd3,0xf8,0x66,0x50,0x5f,0x4b,0x2e,0x4f,0xe8,0xb4,0x5b,0xd6,0x2c,0xcb,0xd8,0x50,0x32,0xa9,0x89,0x9f,0xac,0xf2,0xdb,0x0c,0x93,0xa2,0x34,0x5c,0xb8,0x89,0x2a,0xfb,0x74,0xdb,0x54,0x97,0x81,0x21,0x1d,0xd8,0x88,0x1a,0x8c,0x8e,0x25,0xc1,0x71}, 64, aad_301, 32, NULL, 0, ct_301, 16, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 302, "message size divisible by block size", {0xc2,0x5c,0xaf,0xc6,0x01,0x8b,0x98,0xdf,0xbb,0x79,0xa4,0x0e,0xc8,0x9c,0x57,0x5a,0x4f,0x88,0xc4,0x11,0x64,0x89,0xbb,0xa2,0x77,0x07,0x47,0x98,0x00,0xc0,0x13,0x02,0x35,0x33,0x4a,0x45,0xdb,0xe8,0xd8,0xda,0xe3,0xda,0x8d,0xcb,0x45,0xbb,0xe5,0xdc,0xe0,0x31,0xb0,0xf6,0x8d,0xed,0x54,0x4f,0xda,0x7e,0xca,0x30,0xd6,0x74,0x94,0x42}, 64, aad_302, 16, msg_302, 16, ct_302, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 303, "message size divisible by block size", {0x27,0xfa,0xf9,0x7f,0xb3,0x03,0xaa,0x4f,0x2f,0x36,0x4e,0xdd,0x23,0x99,0x7f,0x4c,0x77,0xb8,0xe5,0x1e,0xbb,0x82,0x93,0xc5,0x9d,0xfb,0x1d,0x24,0xf0,0xfb,0x62,0x9f,0x6c,0x82,0x0f,0xc2,0xd9,0x1b,0xf4,0x8f,0x00,0x35,0xee,0xec,0x34,0x7e,0x37,0xec,0x4f,0xb0,0xcb,0x36,0x10,0x2b,0xcd,0xc5,0xa2,0x48,0xc4,0x7a,0x2f,0x97,0xea,0xb9}, 64, aad_303, 16, msg_303, 32, ct_303, 48, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 304, "message size divisible by block size", {0x97,0xbf,0xd0,0xf3,0xe9,0xbb,0x81,0x67,0xbb,0xb5,0x5f,0x4c,0xdc,0x14,0x52,0x9d,0x83,0x07,0xc0,0xec,0x2c,0x3f,0xe8,0xbc,0x88,0x52,0x2d,0x05,0xc1,0x26,0x1b,0xa4,0x60,0xc9,0xcb,0x41,0x16,0xf6,0x30,0xed,0xd7,0x4d,0x41,0x3e,0xc4,0x17,0x32,0x4c,0x6e,0x29,0xb5,0x66,0xfb,0x2d,0xd3,0xdf,0x18,0xe0,0x7b,0x53,0xb1,0xf9,0xf8,0x3b}, 64, aad_304, 16, msg_304, 48, ct_304, 64, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 305, "small plaintext size", {0xe2,0xc5,0x66,0x2b,0xb1,0x8f,0xbb,0x41,0x1d,0x03,0x04,0xe4,0x24,0x1d,0xb0,0x73,0xfe,0x60,0xa4,0x70,0x4f,0xee,0x29,0x00,0x73,0x51,0x30,0x38,0xa2,0x2b,0x4c,0xd5,0x42,0x58,0x0b,0x2b,0x4e,0xdb,0xc3,0x7e,0x3d,0xe0,0x1c,0x0c,0xb6,0x1a,0xbc,0xad,0x46,0x98,0x6c,0xdc,0x49,0x1c,0xe9,0xe5,0xae,0x5a,0xf2,0x23,0xff,0x58,0xb9,0x53}, 64, aad_305, 12, msg_305, 1, ct_305, 17, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 306, "small plaintext size", {0x3a,0xb0,0x62,0xdb,0xdd,0x38,0xb9,0x51,0xa9,0xfb,0x0d,0x8b,0xb1,0x85,0x95,0x9a,0x93,0xda,0xb3,0x49,0x6b,0x85,0x0a,0x30,0x62,0xb9,0x30,0x03,0x03,0x6c,0x8b,0xd2,0xaa,0xbb,0xf3,0x7d,0x5d,0x3f,0x6a,0x39,0x9d,0x4c,0xed,0xef,0xb7,0x0c,0x1b,0x8a,0x7b,0x45,0x63,0x9f,0xe1,0x18,0xc1,0x0e,0x39,0xf3,0x6f,0xa5,0x86,0x18,0xa8,0x4d}, 64, aad_306, 12, msg_306, 2, ct_306, 18, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 307, "small plaintext size", {0x9e,0x57,0x5c,0xd8,0x99,0x1b,0x32,0xf0,0x6f,0xba,0xf5,0x5a,0xd7,0x9e,0xb7,0x48,0x22,0x34,0x9e,0x07,0xfa,0x77,0xc4,0x09,0x84,0x8c,0x86,0x82,0x00,0x11,0x56,0x9f,0x26,0xdc,0xb4,0x9a,0xfa,0xea,0x19,0xa5,0x2a,0x96,0xb2,0x7e,0x67,0xf7,0x80,0xac,0x7a,0x00,0xda,0x9a,0x30,0x54,0xd1,0x67,0x8d,0x60,0x41,0x7c,0xf3,0x49,0x96,0xb1}, 64, aad_307, 12, msg_307, 3, ct_307, 19, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 308, "small plaintext size", {0x6d,0x43,0xcf,0xc9,0x30,0xa1,0xe0,0x05,0x1f,0x60,0x7d,0x0c,0x4a,0x76,0xad,0x5b,0xec,0x77,0xd9,0xf9,0x8b,0xbd,0x9a,0xe5,0xe5,0x6a,0x1d,0x65,0xfc,0xf1,0xbf,0x68,0xc7,0x78,0x0f,0x72,0x7b,0xfe,0x69,0x04,0x97,0xba,0xe4,0x78,0xaf,0xbc,0x4e,0xbf,0x7a,0x89,0x94,0x3e,0xe1,0x46,0xf7,0x2d,0x35,0x29,0x40,0x79,0x4f,0xf2,0x02,0xf4}, 64, aad_308, 12, msg_308, 4, ct_308, 20, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 309, "small plaintext size", {0x67,0x3c,0xea,0x58,0x2b,0xf3,0x98,0x2c,0xe3,0xfb,0xa5,0x30,0x4d,0xe8,0xfe,0x46,0xe3,0x16,0xd6,0x80,0x47,0x49,0xd6,0xdb,0x58,0xb7,0xab,0x7d,0x64,0xbd,0x4e,0x0a,0xf6,0x41,0x99,0x79,0x75,0x23,0x4f,0x8b,0x91,0x8c,0xca,0x32,0x47,0xd6,0x7c,0xfe,0xac,0x92,0x30,0xd1,0x5e,0xd2,0x8f,0x80,0x71,0xa8,0x5e,0x84,0xfa,0x9e,0xf2,0x11}, 64, aad_309, 12, msg_309, 5, ct_309, 21, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 310, "small plaintext size", {0x8f,0x13,0xf2,0xbf,0x02,0xd7,0x23,0x60,0xd9,0x95,0x8e,0xb8,0xaa,0x90,0x63,0x4a,0xe4,0x83,0x31,0xe7,0xdf,0xdb,0xf1,0x6f,0xc5,0x1c,0x72,0x38,0xae,0x9f,0x9d,0x50,0xd4,0x49,0x5d,0x19,0x66,0x76,0xef,0x52,0x59,0xb6,0x4a,0x61,0x63,0x05,0xff,0xaa,0xe5,0x17,0xc5,0x87,0xd4,0xe7,0xaf,0xba,0x40,0xe4,0xa2,0xc5,0xb0,0x98,0x91,0x82}, 64, aad_310, 12, msg_310, 6, ct_310, 22, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 311, "small plaintext size", {0x67,0xb3,0xab,0x00,0x07,0x5a,0x0e,0x3d,0x07,0xf3,0xfe,0x73,0xfa,0xbe,0xa5,0xd0,0x37,0x32,0x06,0xa0,0xaa,0xfa,0x93,0x97,0x98,0x19,0x24,0xdd,0xaf,0x2c,0xb2,0x83,0xc6,0x6a,0xf6,0x11,0x66,0x81,0x5d,0xff,0xbe,0x8f,0xaf,0xa6,0x88,0xb7,0x93,0xfd,0x25,0x9f,0xad,0x4a,0x1f,0x75,0xa2,0x59,0x34,0x2e,0x58,0x81,0x44,0x48,0xa4,0xb4}, 64, aad_311, 12, msg_311, 7, ct_311, 23, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 312, "small plaintext size", {0xa6,0x61,0xc6,0xa9,0x0f,0xd4,0x0d,0x8a,0x73,0x48,0x73,0xd6,0x6a,0xfd,0x44,0x77,0xc5,0x04,0x1c,0xdc,0x2b,0x31,0xa3,0xcd,0x0a,0xc3,0x60,0x4c,0xac,0x4f,0x74,0x41,0x12,0x19,0xe5,0x44,0x61,0x5b,0x56,0xe1,0x7f,0x57,0x74,0xb5,0x08,0x51,0x29,0xf6,0xdd,0x69,0x89,0x3b,0xb7,0x21,0x6b,0x53,0x9c,0xf4,0x2b,0x79,0xf0,0x06,0x82,0x78}, 64, aad_312, 12, msg_312, 8, ct_312, 24, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 313, "small plaintext size", {0xa4,0x0b,0x1c,0xc1,0x10,0xe1,0xaa,0x28,0xab,0x86,0xf7,0x14,0xab,0xd6,0xd3,0x13,0x01,0x69,0x89,0xa1,0xc8,0xcf,0xcb,0x62,0x06,0x3e,0x2c,0x39,0x6c,0xa1,0x2a,0x24,0x6d,0xe3,0xb9,0xbd,0x82,0x99,0x4e,0x5f,0x1c,0xb1,0x32,0x3f,0x78,0xa9,0xa0,0xed,0x02,0xfe,0x84,0x19,0x76,0xa6,0x59,0x42,0x36,0x03,0xd9,0x1c,0xcf,0x71,0xd5,0x8e}, 64, aad_313, 12, msg_313, 9, ct_313, 25, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 314, "small plaintext size", {0x8a,0xf0,0xe5,0x79,0x98,0xdd,0x68,0xb0,0xf4,0x5b,0x58,0xe7,0x08,0x40,0x5d,0x0a,0xd8,0x26,0x93,0x97,0x24,0x92,0x95,0xfd,0x33,0x60,0x96,0xe0,0x65,0xdb,0x2b,0xb1,0xe4,0x11,0x0d,0x55,0x07,0xc0,0x4d,0x73,0xc1,0x50,0xf6,0xe7,0xd8,0x7c,0xed,0x02,0x9a,0xb3,0x86,0x61,0xf2,0x01,0xec,0x77,0x87,0x4e,0x43,0x95,0x33,0x73,0xb3,0x8a}, 64, aad_314, 12, msg_314, 10, ct_314, 26, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 315, "small plaintext size", {0x6e,0x06,0x32,0x40,0xd8,0x3d,0x4a,0x90,0xe4,0x4e,0x56,0xe6,0x31,0xfe,0xfe,0x9f,0x6c,0x7c,0x7d,0x56,0x51,0x8e,0xff,0x3a,0x90,0x2d,0xdd,0x5c,0xa9,0xb8,0x37,0xa2,0x04,0x4b,0x37,0x27,0x57,0x1d,0x1c,0xa5,0x6a,0x68,0xab,0xfd,0x99,0x7d,0xa9,0x45,0xe4,0xd1,0x4f,0x71,0xdc,0x86,0xb0,0x14,0x9a,0x19,0xa9,0x3d,0x1e,0x5f,0xec,0x85}, 64, aad_315, 12, msg_315, 11, ct_315, 27, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 316, "small plaintext size", {0x95,0x93,0xf0,0xd6,0x67,0x9e,0x8e,0x18,0xb4,0x3c,0xb4,0xd2,0x6a,0x7e,0xa9,0xda,0x9d,0x60,0x37,0xfd,0x5a,0x82,0xdb,0x0b,0x09,0x1a,0x68,0x2b,0x65,0x47,0xa7,0x72,0x98,0xe4,0xfd,0x1d,0x14,0x81,0xf3,0x60,0x3d,0x0b,0x1e,0x7e,0x6d,0xcf,0x27,0x20,0x01,0x05,0xaf,0x0f,0x84,0x4f,0x2a,0xaa,0xcd,0x98,0x54,0x0a,0xb2,0xb6,0xc8,0xa8}, 64, aad_316, 12, msg_316, 12, ct_316, 28, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 317, "small plaintext size", {0x77,0xf7,0xdd,0x66,0x2a,0x8f,0x0a,0xaf,0x7f,0x19,0xc6,0x61,0x45,0x84,0xe4,0xac,0xf5,0xc7,0x74,0xd1,0x9e,0x10,0xd2,0x07,0x0e,0xaa,0x97,0x7e,0x9c,0x6b,0xa2,0x1b,0xa8,0x2f,0x0b,0xc8,0x49,0x39,0xcf,0x70,0x28,0x3d,0xca,0xc9,0xc6,0x45,0xb7,0x42,0x3c,0xa0,0xcc,0x94,0xba,0xc8,0x27,0xea,0x37,0x8f,0x1c,0xa0,0xc9,0xda,0x0e,0xee}, 64, aad_317, 12, msg_317, 13, ct_317, 29, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 318, "small plaintext size", {0x89,0x16,0xd0,0x34,0x20,0x01,0x56,0x19,0x22,0xe6,0x74,0xb0,0xcc,0x51,0xc0,0x5a,0x93,0x5e,0x5d,0xc4,0x5a,0x6d,0x62,0x84,0xf3,0x4a,0x4c,0x5c,0x79,0xe9,0x20,0x62,0xdc,0x30,0x91,0x21,0x75,0x84,0x60,0x7e,0x9c,0xf9,0x05,0x6a,0xa4,0x95,0xca,0x4c,0xd5,0x3f,0xd3,0xd4,0xc6,0xa9,0x4c,0x4b,0x38,0x40,0x07,0xe6,0x21,0x74,0x50,0x6b}, 64, aad_318, 12, msg_318, 14, ct_318, 30, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 319, "small plaintext size", {0x2a,0x93,0xa0,0xc3,0x77,0x97,0xbe,0xe0,0xc3,0x44,0xb9,0xce,0xed,0x1a,0x60,0x98,0x13,0xd8,0xc5,0xee,0x68,0x6d,0x26,0x0f,0x3a,0xa6,0xfc,0x2f,0x66,0xdc,0x59,0xf4,0x00,0x47,0x9d,0x1d,0xfe,0x04,0xe8,0x9e,0x6d,0xf6,0x08,0xa3,0xf6,0x99,0xff,0x1c,0xb4,0xe9,0xbf,0x24,0xa7,0x8f,0xb2,0xdf,0xdd,0xaa,0x00,0x11,0xa2,0xe4,0x02,0x08}, 64, aad_319, 12, msg_319, 15, ct_319, 31, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 320, "plaintext size > 16", {0x13,0x93,0x83,0xf3,0xf8,0x2d,0xc7,0x8e,0x0b,0x38,0x00,0x27,0xf9,0xe5,0xfc,0xd2,0xed,0x23,0x71,0x64,0x04,0xbe,0x5c,0x55,0x44,0x52,0xe4,0xdc,0x73,0xd2,0x37,0x02,0x65,0x94,0x49,0x18,0x20,0xc6,0xb8,0x29,0x71,0x85,0xcc,0x1f,0xa8,0x4f,0x49,0xa5,0xc7,0xd7,0xcd,0x05,0xc5,0xde,0x09,0x0f,0xf1,0xc3,0x39,0x7b,0xc2,0x74,0x04,0x37}, 64, aad_320, 12, msg_320, 17, ct_320, 33, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 321, "plaintext size > 16", {0xea,0xc9,0x6a,0x89,0xb8,0xe0,0xc9,0x28,0xa8,0x5c,0x91,0x39,0x63,0x46,0xef,0xe8,0x28,0x77,0x30,0x59,0x50,0x64,0x55,0x4c,0xd1,0x35,0x74,0xf8,0xb3,0x40,0xf5,0x41,0xc5,0xf0,0xbb,0x55,0xe6,0x54,0xe5,0x1b,0x05,0xe2,0x1b,0xa0,0x07,0x94,0x2c,0xab,0xab,0x5e,0xe1,0x02,0x09,0x22,0xf0,0xdd,0x00,0x21,0x96,0xa3,0x9d,0x7f,0xda,0x1d}, 64, aad_321, 12, msg_321, 20, ct_321, 36, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 322, "plaintext size > 16", {0xc0,0xf4,0xbe,0xde,0x68,0xc6,0xed,0x5a,0xd1,0x49,0x18,0xe2,0xdd,0xec,0xed,0x69,0x2d,0xfd,0x54,0x19,0xc0,0x42,0x04,0xd5,0xb9,0x6f,0x4c,0xa4,0x70,0x78,0xb0,0x70,0x28,0xc6,0xfb,0x87,0xb1,0xb4,0x90,0xd8,0x75,0xf0,0x70,0xbb,0xe4,0xd7,0x90,0xf6,0x5e,0x5d,0xf1,0x99,0x47,0xf0,0x2c,0x9d,0x3a,0x4e,0x49,0x3b,0x54,0x2d,0x02,0x91}, 64, aad_322, 12, msg_322, 31, ct_322, 47, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 323, "plaintext size > 16", {0xcd,0x86,0x89,0xf8,0x21,0x81,0x7f,0x59,0xbf,0xaa,0x75,0x51,0x31,0xf2,0x56,0x51,0x61,0xc7,0xf4,0x48,0x9f,0x89,0xb6,0x57,0xac,0x9f,0xa1,0x27,0xa9,0x76,0x85,0x35,0xa7,0x02,0xd0,0x01,0xb9,0xb9,0x9c,0xc1,0x1c,0x39,0x76,0x46,0x7b,0x1b,0x45,0x86,0x5f,0xf4,0x17,0xdc,0x25,0x6e,0xbb,0x50,0x79,0xb7,0xf1,0xb3,0xe0,0x83,0x07,0xb5}, 64, aad_323, 12, msg_323, 40, ct_323, 56, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 324, "plaintext size > 16", {0x72,0xa7,0x67,0x14,0xe0,0x17,0x1e,0x82,0x13,0xde,0x62,0x4f,0x00,0xe2,0x73,0xbc,0x90,0x00,0x50,0xe6,0x9d,0x25,0xc4,0x54,0xcc,0x42,0xb6,0x1e,0x8b,0x3f,0xbc,0x92,0xd4,0x94,0x2e,0x1a,0xe1,0x44,0x21,0xe1,0x64,0x04,0x6c,0x14,0x79,0xa7,0xb9,0xc9,0xf4,0xb5,0x0b,0x38,0x2c,0xb6,0x2d,0xfe,0xaa,0x21,0x0b,0x98,0xde,0xc7,0xd9,0x37}, 64, aad_324, 12, msg_324, 80, ct_324, 96, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 325, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_325, 16, ct_325, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 326, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, aad_326, 16, msg_326, 16, ct_326, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 327, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_327, 16, ct_327, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 328, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, aad_328, 16, msg_328, 16, ct_328, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 329, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_329, 16, ct_329, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 330, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, aad_330, 16, msg_330, 16, ct_330, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 331, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_331, 16, ct_331, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 332, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, aad_332, 16, msg_332, 16, ct_332, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 333, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_333, 16, ct_333, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 334, "edge case SIV", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, aad_334, 16, msg_334, 16, ct_334, 32, LTC_TEST_CASE_SHOULD_SUCCEED }, - { 335, "Flipped bit 0 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_335, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 336, "Flipped bit 0 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_336, 8, ct_336, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 337, "Flipped bit 0 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_337, 16, ct_337, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 338, "Flipped bit 0 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_338, 20, ct_338, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 339, "Flipped bit 1 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_339, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 340, "Flipped bit 1 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_340, 8, ct_340, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 341, "Flipped bit 1 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_341, 16, ct_341, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 342, "Flipped bit 1 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_342, 20, ct_342, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 343, "Flipped bit 7 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_343, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 344, "Flipped bit 7 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_344, 8, ct_344, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 345, "Flipped bit 7 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_345, 16, ct_345, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 346, "Flipped bit 7 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_346, 20, ct_346, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 347, "Flipped bit 8 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_347, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 348, "Flipped bit 8 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_348, 8, ct_348, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 349, "Flipped bit 8 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_349, 16, ct_349, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 350, "Flipped bit 8 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_350, 20, ct_350, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 351, "Flipped bit 31 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_351, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 352, "Flipped bit 31 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_352, 8, ct_352, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 353, "Flipped bit 31 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_353, 16, ct_353, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 354, "Flipped bit 31 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_354, 20, ct_354, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 355, "Flipped bit 32 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_355, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 356, "Flipped bit 32 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_356, 8, ct_356, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 357, "Flipped bit 32 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_357, 16, ct_357, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 358, "Flipped bit 32 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_358, 20, ct_358, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 359, "Flipped bit 33 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_359, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 360, "Flipped bit 33 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_360, 8, ct_360, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 361, "Flipped bit 33 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_361, 16, ct_361, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 362, "Flipped bit 33 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_362, 20, ct_362, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 363, "Flipped bit 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_363, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 364, "Flipped bit 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_364, 8, ct_364, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 365, "Flipped bit 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_365, 16, ct_365, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 366, "Flipped bit 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_366, 20, ct_366, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 367, "Flipped bit 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_367, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 368, "Flipped bit 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_368, 8, ct_368, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 369, "Flipped bit 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_369, 16, ct_369, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 370, "Flipped bit 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_370, 20, ct_370, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 371, "Flipped bit 71 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_371, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 372, "Flipped bit 71 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_372, 8, ct_372, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 373, "Flipped bit 71 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_373, 16, ct_373, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 374, "Flipped bit 71 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_374, 20, ct_374, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 375, "Flipped bit 77 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_375, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 376, "Flipped bit 77 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_376, 8, ct_376, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 377, "Flipped bit 77 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_377, 16, ct_377, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 378, "Flipped bit 77 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_378, 20, ct_378, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 379, "Flipped bit 80 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_379, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 380, "Flipped bit 80 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_380, 8, ct_380, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 381, "Flipped bit 80 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_381, 16, ct_381, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 382, "Flipped bit 80 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_382, 20, ct_382, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 383, "Flipped bit 96 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_383, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 384, "Flipped bit 96 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_384, 8, ct_384, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 385, "Flipped bit 96 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_385, 16, ct_385, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 386, "Flipped bit 96 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_386, 20, ct_386, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 387, "Flipped bit 97 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_387, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 388, "Flipped bit 97 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_388, 8, ct_388, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 389, "Flipped bit 97 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_389, 16, ct_389, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 390, "Flipped bit 97 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_390, 20, ct_390, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 391, "Flipped bit 103 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_391, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 392, "Flipped bit 103 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_392, 8, ct_392, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 393, "Flipped bit 103 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_393, 16, ct_393, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 394, "Flipped bit 103 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_394, 20, ct_394, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 395, "Flipped bit 120 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_395, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 396, "Flipped bit 120 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_396, 8, ct_396, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 397, "Flipped bit 120 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_397, 16, ct_397, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 398, "Flipped bit 120 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_398, 20, ct_398, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 399, "Flipped bit 121 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_399, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 400, "Flipped bit 121 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_400, 8, ct_400, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 401, "Flipped bit 121 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_401, 16, ct_401, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 402, "Flipped bit 121 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_402, 20, ct_402, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 403, "Flipped bit 126 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_403, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 404, "Flipped bit 126 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_404, 8, ct_404, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 405, "Flipped bit 126 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_405, 16, ct_405, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 406, "Flipped bit 126 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_406, 20, ct_406, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 407, "Flipped bit 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_407, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 408, "Flipped bit 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_408, 8, ct_408, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 409, "Flipped bit 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_409, 16, ct_409, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 410, "Flipped bit 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_410, 20, ct_410, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 411, "Flipped bits 0 and 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_411, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 412, "Flipped bits 0 and 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_412, 8, ct_412, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 413, "Flipped bits 0 and 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_413, 16, ct_413, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 414, "Flipped bits 0 and 64 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_414, 20, ct_414, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 415, "Flipped bits 31 and 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_415, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 416, "Flipped bits 31 and 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_416, 8, ct_416, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 417, "Flipped bits 31 and 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_417, 16, ct_417, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 418, "Flipped bits 31 and 63 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_418, 20, ct_418, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 419, "Flipped bits 63 and 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_419, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 420, "Flipped bits 63 and 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_420, 8, ct_420, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 421, "Flipped bits 63 and 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_421, 16, ct_421, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 422, "Flipped bits 63 and 127 in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_422, 20, ct_422, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 423, "all bits of tag flipped", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_423, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 424, "all bits of tag flipped", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_424, 8, ct_424, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 425, "all bits of tag flipped", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_425, 16, ct_425, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 426, "all bits of tag flipped", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_426, 20, ct_426, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 427, "Tag changed to all zero", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_427, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 428, "Tag changed to all zero", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_428, 8, ct_428, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 429, "Tag changed to all zero", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_429, 16, ct_429, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 430, "Tag changed to all zero", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_430, 20, ct_430, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 431, "tag changed to all 1", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_431, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 432, "tag changed to all 1", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_432, 8, ct_432, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 433, "tag changed to all 1", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_433, 16, ct_433, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 434, "tag changed to all 1", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_434, 20, ct_434, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 435, "msbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_435, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 436, "msbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_436, 8, ct_436, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 437, "msbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_437, 16, ct_437, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 438, "msbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_438, 20, ct_438, 36, LTC_TEST_CASE_SHOULD_FAIL }, - { 439, "lsbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, NULL, 0, ct_439, 16, LTC_TEST_CASE_SHOULD_FAIL }, - { 440, "lsbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_440, 8, ct_440, 24, LTC_TEST_CASE_SHOULD_FAIL }, - { 441, "lsbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_441, 16, ct_441, 32, LTC_TEST_CASE_SHOULD_FAIL }, - { 442, "lsbs changed in tag", {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f}, 64, NULL, 0, msg_442, 20, ct_442, 36, LTC_TEST_CASE_SHOULD_FAIL }, -}; -#endif /* defined(LTC_TEST) && defined(LTC_SIV_MODE) */ diff --git a/tests/siv_wycheproof_test.c b/tests/siv_wycheproof_test.c deleted file mode 100644 index f6eccfbe..00000000 --- a/tests/siv_wycheproof_test.c +++ /dev/null @@ -1,99 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -/* test SIV */ -#include - -#if defined(LTC_TEST) && defined(LTC_SIV_MODE) -#include "siv_wycheproof.h" - -/* typedef struct - * { - * int tcId; - * const char *comment; - * uint8_t key[64]; - * size_t keyLen; - * const uint8_t *aad; - * size_t aadLen; - * const uint8_t *msg; - * size_t msgLen; - * const uint8_t *ct; - * size_t ctLen; - * ltc_aes_siv_test_case_result result; - * } aes_siv_test_case; - */ -int siv_wycheproof_test(void) -{ - unsigned long n, buflen; - unsigned char buf[MAXBLOCKSIZE]; - const unsigned char *aad[2] = {0}; - unsigned long aadlen[2] = {0}; - int cipher; - cipher = find_cipher("aes"); - for (n = 0; n < LTC_ARRAY_SIZE(aes_siv_tests); ++n) { - XMEMSET(buf, 0, sizeof(buf)); - buflen = sizeof(buf); - if (aes_siv_tests[n].result == LTC_TEST_CASE_SHOULD_FAIL) { - SHOULD_FAIL(siv_memory(cipher, LTC_DECRYPT, - aes_siv_tests[n].key, aes_siv_tests[n].keyLen, - aes_siv_tests[n].ct, aes_siv_tests[n].ctLen, - buf, &buflen, - 1, - aes_siv_tests[n].aad, aes_siv_tests[n].aadLen, - LTC_NULL)); - XMEMSET(buf, 0, sizeof(buf)); - buflen = sizeof(buf); - aad[0] = aes_siv_tests[n].aad; - aadlen[0] = aes_siv_tests[n].aadLen; - SHOULD_FAIL(siv_decrypt_memory(cipher, - aes_siv_tests[n].key, aes_siv_tests[n].keyLen, - 1, - (const unsigned char **)aad, aadlen, - aes_siv_tests[n].ct, aes_siv_tests[n].ctLen, - buf, &buflen)); - } else { - DO(siv_memory(cipher, LTC_ENCRYPT, - aes_siv_tests[n].key, aes_siv_tests[n].keyLen, - aes_siv_tests[n].msg, aes_siv_tests[n].msgLen, - buf, &buflen, - 1, - aes_siv_tests[n].aad, aes_siv_tests[n].aadLen, - LTC_NULL)); - COMPARE_TESTVECTOR(buf, buflen, aes_siv_tests[n].ct, aes_siv_tests[n].ctLen, aes_siv_tests[n].comment, aes_siv_tests[n].tcId); - XMEMSET(buf, 0, sizeof(buf)); - buflen = sizeof(buf); - DO(siv_memory(cipher, LTC_DECRYPT, - aes_siv_tests[n].key, aes_siv_tests[n].keyLen, - aes_siv_tests[n].ct, aes_siv_tests[n].ctLen, - buf, &buflen, - 1, - aes_siv_tests[n].aad, aes_siv_tests[n].aadLen, - LTC_NULL)); - COMPARE_TESTVECTOR(buf, buflen, aes_siv_tests[n].msg, aes_siv_tests[n].msgLen, aes_siv_tests[n].comment, -aes_siv_tests[n].tcId); - - XMEMSET(buf, 0, sizeof(buf)); - buflen = sizeof(buf); - aad[0] = aes_siv_tests[n].aad; - aadlen[0] = aes_siv_tests[n].aadLen; - DO(siv_encrypt_memory(cipher, - aes_siv_tests[n].key, aes_siv_tests[n].keyLen, - 1, - (const unsigned char **)aad, aadlen, - aes_siv_tests[n].msg, aes_siv_tests[n].msgLen, - buf, &buflen)); - COMPARE_TESTVECTOR(buf, buflen, aes_siv_tests[n].ct, aes_siv_tests[n].ctLen, aes_siv_tests[n].comment, aes_siv_tests[n].tcId); - buflen = sizeof(buf); - DO(siv_decrypt_memory(cipher, - aes_siv_tests[n].key, aes_siv_tests[n].keyLen, - 1, - (const unsigned char **)aad, aadlen, - aes_siv_tests[n].ct, aes_siv_tests[n].ctLen, - buf, &buflen)); - COMPARE_TESTVECTOR(buf, buflen, aes_siv_tests[n].msg, aes_siv_tests[n].msgLen, aes_siv_tests[n].comment, -aes_siv_tests[n].tcId); - } - } - return CRYPT_OK; -} - -#else -LTC_NOP_TEST(siv_wycheproof_test) -#endif diff --git a/tests/sources.cmake b/tests/sources.cmake deleted file mode 100644 index a24ae5d6..00000000 --- a/tests/sources.cmake +++ /dev/null @@ -1,43 +0,0 @@ -set(SOURCES -argon2_test.c -base16_test.c -base32_test.c -base64_test.c -bcrypt_test.c -cipher_hash_test.c -common.c -deprecated_test.c -der_test.c -dh_test.c -dsa_test.c -ecc_test.c -ed25519_test.c -ed448_test.c -file_test.c -mac_test.c -misc_test.c -modes_test.c -mpi_test.c -multi_test.c -no_null_termination_check_test.c -no_prng.c -padding_test.c -pem_test.c -pk_oid_test.c -pkcs_1_eme_test.c -pkcs_1_emsa_test.c -pkcs_1_oaep_test.c -pkcs_1_pss_test.c -pkcs_1_test.c -prng_test.c -rotate_test.c -rsa_test.c -scrypt_test.c -siv_wycheproof_test.c -ssh_test.c -store_test.c -test.c -x25519_test.c -x448_test.c -) - diff --git a/tests/ssh_test.c b/tests/ssh_test.c deleted file mode 100644 index 0f062494..00000000 --- a/tests/ssh_test.c +++ /dev/null @@ -1,353 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_test.h" - -/** - @file ssh_test.c - Support for SSH data formats (RFC4251), Russ Williams -*/ - -#ifdef LTC_SSH - -#define BUFSIZE 64 - -/** - Test vectors from from RFC4251, section 5 - - uint32: "the value 699921578 (0x29b7f4aa) is stored as 29 b7 f4 aa" - - string: "the US-ASCII string "testing" is represented as 00 00 00 07 t e s t i n g" - - mpint: - value (hex) representation (hex) - ----------- -------------------- - 0 00 00 00 00 - 9a378f9b2e332a7 00 00 00 08 09 a3 78 f9 b2 e3 32 a7 - 80 00 00 00 02 00 80 - -1234 00 00 00 02 ed cc - -deadbeef 00 00 00 05 ff 21 52 41 11 - - name-list: - value representation (hex) - ----- -------------------- - (), the empty name-list 00 00 00 00 - ("zlib") 00 00 00 04 7a 6c 69 62 - ("zlib,none") 00 00 00 09 7a 6c 69 62 2c 6e 6f 6e 65 -*/ -static const unsigned char byte1[] = {0x01}; -static const unsigned char byte2[] = {0x71}; -static const unsigned char uint32[] = {0x29, 0xb7, 0xf4, 0xaa}; -static const unsigned char uint64[] = {0x09, 0xa3, 0x78, 0xf9, 0xb2, 0xe3, 0x32, 0xa7}; -static const unsigned char string[] = {0x00, 0x00, 0x00, 0x07, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67}; -static const unsigned char mpint1[] = {0x00, 0x00, 0x00, 0x00}; -static const unsigned char mpint2[] = {0x00, 0x00, 0x00, 0x08, 0x09, 0xa3, 0x78, 0xf9, 0xb2, 0xe3, 0x32, 0xa7}; -static const unsigned char mpint3[] = {0x00, 0x00, 0x00, 0x02, 0x00, 0x80}; -static const unsigned char nlist1[] = {0x00, 0x00, 0x00, 0x00}; -static const unsigned char nlist2[] = {0x00, 0x00, 0x00, 0x04, 0x7a, 0x6c, 0x69, 0x62}; -static const unsigned char nlist3[] = {0x00, 0x00, 0x00, 0x09, 0x7a, 0x6c, 0x69, 0x62, 0x2c, 0x6e, 0x6f, 0x6e, 0x65}; - - -/** - LTC_SSH encoding test - @return CRYPT_OK if successful -*/ -static int s_ssh_encoding_test(void) -{ - unsigned char buffer[BUFSIZE]; - unsigned long buflen; - unsigned long len; - void *v, *zero; - int err; - - /* Buffer too short */ - buflen = 3; - zeromem(buffer, BUFSIZE); - SHOULD_FAIL(ssh_encode_sequence_multi(buffer, &buflen, - LTC_SSHDATA_UINT32, 0x29b7f4aa, - LTC_SSHDATA_EOL, NULL)); - - - /* byte */ - buflen = BUFSIZE; - zeromem(buffer, BUFSIZE); - DO(ssh_encode_sequence_multi(buffer, &buflen, - LTC_SSHDATA_BYTE, 0x01, - LTC_SSHDATA_EOL, NULL)); - COMPARE_TESTVECTOR(buffer, buflen, byte1, sizeof(byte1), "enc-byte", 1); - - buflen = BUFSIZE; - zeromem(buffer, BUFSIZE); - DO(ssh_encode_sequence_multi(buffer, &buflen, - LTC_SSHDATA_BYTE, 0x71, - LTC_SSHDATA_EOL, NULL)); - COMPARE_TESTVECTOR(buffer, buflen, byte2, sizeof(byte2), "enc-byte", 2); - if (XMEMCMP(buffer, byte2, buflen) != 0) return CRYPT_FAIL_TESTVECTOR; - - /* boolean */ - buflen = BUFSIZE; - zeromem(buffer, BUFSIZE); - DO(ssh_encode_sequence_multi(buffer, &buflen, - LTC_SSHDATA_BOOLEAN, 0x01, - LTC_SSHDATA_EOL, NULL)); - COMPARE_TESTVECTOR(buffer, buflen, byte1, sizeof(byte1), "enc-boolean", 1); - - buflen = BUFSIZE; - zeromem(buffer, BUFSIZE); - DO(ssh_encode_sequence_multi(buffer, &buflen, - LTC_SSHDATA_BOOLEAN, 0x71, - LTC_SSHDATA_EOL, NULL)); - /* Should be written out as 0x01 */ - COMPARE_TESTVECTOR(buffer, buflen, byte1, sizeof(byte1), "enc-boolean", 2); - - /* uint32 */ - buflen = BUFSIZE; - zeromem(buffer, BUFSIZE); - DO(ssh_encode_sequence_multi(buffer, &buflen, - LTC_SSHDATA_UINT32, 0x29b7f4aa, - LTC_SSHDATA_EOL, NULL)); - COMPARE_TESTVECTOR(buffer, buflen, uint32, sizeof(uint32), "enc-uint32", 1); - - /* uint64 */ - buflen = BUFSIZE; - zeromem(buffer, BUFSIZE); - DO(ssh_encode_sequence_multi(buffer, &buflen, - LTC_SSHDATA_UINT64, CONST64(0x09a378f9b2e332a7), - LTC_SSHDATA_EOL, NULL)); - COMPARE_TESTVECTOR(buffer, buflen, uint64, sizeof(uint64), "enc-uint64", 1); - - - /* string */ - buflen = BUFSIZE; - zeromem(buffer, BUFSIZE); - len = strlen("testing"); - DO(ssh_encode_sequence_multi(buffer, &buflen, - LTC_SSHDATA_STRING, "testing", len, - LTC_SSHDATA_EOL, NULL)); - COMPARE_TESTVECTOR(buffer, buflen, string, sizeof(string), "enc-string", 1); - - - /* mpint */ - if ((err = ltc_mp_init_multi(&zero, &v, LTC_NULL)) != CRYPT_OK) { - return err; - } - - buflen = BUFSIZE; - zeromem(buffer, BUFSIZE); - DO(ltc_mp_set(zero, 0)); - DO(ssh_encode_sequence_multi(buffer, &buflen, - LTC_SSHDATA_MPINT, zero, - LTC_SSHDATA_EOL, NULL)); - COMPARE_TESTVECTOR(buffer, buflen, mpint1, sizeof(mpint1), "enc-mpint", 1); - - buflen = BUFSIZE; - zeromem(buffer, BUFSIZE); - DO(ltc_mp_read_radix(v, "9a378f9b2e332a7", 16)); - DO(ssh_encode_sequence_multi(buffer, &buflen, - LTC_SSHDATA_MPINT, v, - LTC_SSHDATA_EOL, NULL)); - COMPARE_TESTVECTOR(buffer, buflen, mpint2, sizeof(mpint2), "enc-mpint", 2); - - buflen = BUFSIZE; - zeromem(buffer, BUFSIZE); - DO(ltc_mp_set(v, 0x80)); - DO(ssh_encode_sequence_multi(buffer, &buflen, - LTC_SSHDATA_MPINT, v, - LTC_SSHDATA_EOL, NULL)); - COMPARE_TESTVECTOR(buffer, buflen, mpint3, sizeof(mpint3), "enc-mpint", 3); - - ltc_mp_deinit_multi(v, zero, LTC_NULL); - - - /* name-list */ - buflen = BUFSIZE; - zeromem(buffer, BUFSIZE); - len = strlen(""); - DO(ssh_encode_sequence_multi(buffer, &buflen, - LTC_SSHDATA_NAMELIST, "", len, - LTC_SSHDATA_EOL, NULL)); - COMPARE_TESTVECTOR(buffer, buflen, nlist1, sizeof(nlist1), "enc-nlist", 1); - - buflen = BUFSIZE; - zeromem(buffer, BUFSIZE); - len = strlen("zlib"); - DO(ssh_encode_sequence_multi(buffer, &buflen, - LTC_SSHDATA_NAMELIST, "zlib", len, - LTC_SSHDATA_EOL, NULL)); - COMPARE_TESTVECTOR(buffer, buflen, nlist2, sizeof(nlist2), "enc-nlist", 2); - - buflen = BUFSIZE; - zeromem(buffer, BUFSIZE); - len = strlen("zlib,none"); - DO(ssh_encode_sequence_multi(buffer, &buflen, - LTC_SSHDATA_NAMELIST, "zlib,none", len, - LTC_SSHDATA_EOL, NULL)); - COMPARE_TESTVECTOR(buffer, buflen, nlist3, sizeof(nlist3), "enc-nlist", 3); - - return CRYPT_OK; -} - -/** - LTC_SSH decoding test - @return CRYPT_OK if successful -*/ -static int s_ssh_decoding_test(void) -{ - char strbuf[BUFSIZE]; - void *u, *v; - unsigned long size; - ulong32 tmp32; - ulong64 tmp64; - unsigned char tmp8; - unsigned long len; - int err; - - /* Buffer longer */ - len = sizeof(strbuf); - strbuf[0] = 0; - DO(ssh_decode_sequence_multi((unsigned char*)strbuf, &len, - LTC_SSHDATA_BYTE, &tmp8, - LTC_SSHDATA_EOL, NULL)); - ENSURE(tmp8 == 0x00); - ENSURE(len == 1); - - - /* byte */ - len = sizeof(byte1); - DO(ssh_decode_sequence_multi(byte1, &len, - LTC_SSHDATA_BYTE, &tmp8, - LTC_SSHDATA_EOL, NULL)); - ENSURE(tmp8 == 0x01); - ENSURE(len == 1); - - len = sizeof(byte2); - DO(ssh_decode_sequence_multi(byte2, &len, - LTC_SSHDATA_BYTE, &tmp8, - LTC_SSHDATA_EOL, NULL)); - ENSURE(tmp8 == 0x71); - ENSURE(len == 1); - - /* boolean */ - len = sizeof(byte1); - DO(ssh_decode_sequence_multi(byte1, &len, - LTC_SSHDATA_BOOLEAN, &tmp8, - LTC_SSHDATA_EOL, NULL)); - ENSURE(tmp8 == 0x01); - ENSURE(len == 1); - - len = sizeof(byte2); - DO(ssh_decode_sequence_multi(byte2, &len, - LTC_SSHDATA_BOOLEAN, &tmp8, - LTC_SSHDATA_EOL, NULL)); - ENSURE(tmp8 == 0x01); - ENSURE(len == 1); - - /* uint32 */ - len = sizeof(uint32); - DO(ssh_decode_sequence_multi(uint32, &len, - LTC_SSHDATA_UINT32, &tmp32, - LTC_SSHDATA_EOL, NULL)); - ENSURE(tmp32 == 0x29b7f4aa); - ENSURE(len == 4); - - /* uint64 */ - len = sizeof(uint64); - DO(ssh_decode_sequence_multi(uint64, &len, - LTC_SSHDATA_UINT64, &tmp64, - LTC_SSHDATA_EOL, NULL)); - if (tmp64 != CONST64(0x09a378f9b2e332a7)) return CRYPT_FAIL_TESTVECTOR; - ENSURE(len == 8); - - /* string */ - zeromem(strbuf, BUFSIZE); - size = BUFSIZE; - len = sizeof(string); - DO(ssh_decode_sequence_multi(string, &len, - LTC_SSHDATA_STRING, strbuf, &size, - LTC_SSHDATA_EOL, NULL)); - ENSURE(strlen("testing") == size); - ENSURE(XSTRCMP(strbuf, "testing") == 0); - ENSURE(strlen("testing") + 4 == len); - - /* mpint */ - if ((err = ltc_mp_init_multi(&u, &v, LTC_NULL)) != CRYPT_OK) { - return err; - } - - len = sizeof(mpint1); - DO(ssh_decode_sequence_multi(mpint1, &len, - LTC_SSHDATA_MPINT, v, - LTC_SSHDATA_EOL, NULL)); - ENSURE(ltc_mp_cmp_d(v, 0) == LTC_MP_EQ); - ENSURE(sizeof(mpint1) == len); - - len = sizeof(mpint2); - DO(ssh_decode_sequence_multi(mpint2, &len, - LTC_SSHDATA_MPINT, v, - LTC_SSHDATA_EOL, NULL)); - DO(ltc_mp_read_radix(u, "9a378f9b2e332a7", 16)); - ENSURE(ltc_mp_cmp(u, v) == LTC_MP_EQ); - ENSURE(sizeof(mpint2) == len); - - len = sizeof(mpint3); - DO(ssh_decode_sequence_multi(mpint3, &len, - LTC_SSHDATA_MPINT, v, - LTC_SSHDATA_EOL, NULL)); - ENSURE(ltc_mp_cmp_d(v, 0x80) == LTC_MP_EQ); - ENSURE(sizeof(mpint3) == len); - - ltc_mp_deinit_multi(v, u, LTC_NULL); - - /* name-list */ - zeromem(strbuf, BUFSIZE); - size = BUFSIZE; - len = sizeof(nlist1); - DO(ssh_decode_sequence_multi(nlist1, &len, - LTC_SSHDATA_NAMELIST, strbuf, &size, - LTC_SSHDATA_EOL, NULL)); - ENSURE(strlen("") == size); - ENSURE(XSTRCMP(strbuf, "") == 0); - - zeromem(strbuf, BUFSIZE); - size = BUFSIZE; - len = sizeof(nlist2); - DO(ssh_decode_sequence_multi(nlist2, &len, - LTC_SSHDATA_NAMELIST, strbuf, &size, - LTC_SSHDATA_EOL, NULL)); - ENSURE(strlen("zlib") == size); - ENSURE(XSTRCMP(strbuf, "zlib") == 0); - ENSURE(strlen("zlib") + 4 == len); - - zeromem(strbuf, BUFSIZE); - size = BUFSIZE; - len = sizeof(nlist3); - DO(ssh_decode_sequence_multi(nlist3, &len, - LTC_SSHDATA_NAMELIST, strbuf, &size, - LTC_SSHDATA_EOL, NULL)); - ENSURE(strlen("zlib,none") == size); - ENSURE(XSTRCMP(strbuf, "zlib,none") == 0); - ENSURE(strlen("zlib,none") + 4 == len); - - - return CRYPT_OK; -} - -/** - LTC_SSH self-test - @return CRYPT_OK if successful, CRYPT_NOP if tests have been disabled. -*/ -int ssh_test(void) -{ - if (ltc_mp.name == NULL) return CRYPT_NOP; - - DO(s_ssh_encoding_test()); - DO(s_ssh_decoding_test()); - - return CRYPT_OK; -} - -#else - -LTC_NOP_TEST(ssh_test) - -#endif - diff --git a/tests/store_test.c b/tests/store_test.c deleted file mode 100644 index d7ee7d2e..00000000 --- a/tests/store_test.c +++ /dev/null @@ -1,76 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -/* Test store/load macros with offsets */ -int store_test(void) -{ - unsigned char buf[256]; - unsigned long y; - ulong32 L, L1; - ulong64 LL, LL1; -#ifdef LTC_FAST - unsigned long x, z, zz; -#endif - - for (y = 0; y < 4; y++) { - L = 0x12345678UL; - L1 = 0; - STORE32L(L, buf + y); - LOAD32L(L1, buf + y); - if (L1 != L) { - fprintf(stderr, "\n32L failed at offset %lu\n", y); - return 1; - } - STORE32H(L, buf + y); - LOAD32H(L1, buf + y); - if (L1 != L) { - fprintf(stderr, "\n32H failed at offset %lu\n", y); - return 1; - } - } - - for (y = 0; y < 8; y++) { - LL = CONST64 (0x01020304050607); - LL1 = 0; - STORE64L(LL, buf + y); - LOAD64L(LL1, buf + y); - if (LL1 != LL) { - fprintf(stderr, "\n64L failed at offset %lu\n", y); - return 1; - } - STORE64H(LL, buf + y); - LOAD64H(LL1, buf + y); - if (LL1 != LL) { - fprintf(stderr, "\n64H failed at offset %lu\n", y); - return 1; - } - } - -/* test LTC_FAST */ -#ifdef LTC_FAST - y = 16; - - for (z = 0, zz = 2*y - 1; z < y; z++, zz-=2) { - /* fill y bytes with random */ - ENSURE(yarrow_read(buf+z, y, &yarrow_prng) == y); - ENSURE(yarrow_read(buf+z+y+zz, y, &yarrow_prng) == y); - - /* now XOR it byte for byte */ - for (x = 0; x < y; x++) { - buf[4*y+z+x] = buf[z+x] ^ buf[z+y+x+zz]; - } - - /* now XOR it word for word */ - for (x = 0; x < y; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR3(&buf[5*y+z+x], &buf[z+x], &buf[z+y+x+zz]); - } - - if (memcmp(&buf[4*y+z], &buf[5*y+z], y)) { - fprintf(stderr, "\nLTC_FAST failed at offset %lu\n", z); - return 1; - } - } -#endif - return 0; -} diff --git a/tests/test.c b/tests/test.c deleted file mode 100644 index ff52c329..00000000 --- a/tests/test.c +++ /dev/null @@ -1,521 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include - -#ifndef GIT_VERSION -#define GIT_VERSION "Undefined version" -#endif - -#define LTC_TEST_FN(f) { f ## _test, #f } - -typedef struct { - int (*fn)(void); - const char* name; -} test_function; - -static const test_function test_functions[] = -{ - LTC_TEST_FN(store), - LTC_TEST_FN(rotate), - LTC_TEST_FN(cipher_hash), - LTC_TEST_FN(misc), - LTC_TEST_FN(mpi), - LTC_TEST_FN(mac), - LTC_TEST_FN(modes), - LTC_TEST_FN(der), - LTC_TEST_FN(pkcs_1), - LTC_TEST_FN(pkcs_1_pss), - LTC_TEST_FN(pkcs_1_oaep), - LTC_TEST_FN(pkcs_1_emsa), - LTC_TEST_FN(pkcs_1_eme), - LTC_TEST_FN(rsa), - LTC_TEST_FN(dh), - LTC_TEST_FN(ecc), - LTC_TEST_FN(dsa), - LTC_TEST_FN(ed25519), - LTC_TEST_FN(ed25519_mpi), - LTC_TEST_FN(x25519), - LTC_TEST_FN(x25519_mpi), - LTC_TEST_FN(ed448), - LTC_TEST_FN(ed448_mpi), - LTC_TEST_FN(x448), - LTC_TEST_FN(x448_mpi), - LTC_TEST_FN(file), - LTC_TEST_FN(multi), - LTC_TEST_FN(pem), - LTC_TEST_FN(deprecated), - LTC_TEST_FN(nop), - /* keep the prng_test always at the end as - * it has to be handled specially when - * testing with LTC_PTHREAD enabled - */ - LTC_TEST_FN(prng), -}; - - -#if defined(_WIN32) - #include /* GetSystemTimeAsFileTime */ -#else - #include -#endif - -/* microseconds since 1970 (UNIX epoch) */ -static ulong64 epoch_usec(void) -{ -#if defined(LTC_NO_TEST_TIMING) - return 0; -#elif defined(_WIN32) - FILETIME CurrentTime; - ulong64 cur_time; - ULARGE_INTEGER ul; - GetSystemTimeAsFileTime(&CurrentTime); - ul.LowPart = CurrentTime.dwLowDateTime; - ul.HighPart = CurrentTime.dwHighDateTime; - cur_time = ul.QuadPart; /* now we have 100ns intervals since 1 January 1601 */ - cur_time -= CONST64(116444736000000000); /* subtract 100ns intervals between 1601-1970 */ - cur_time /= 10; /* 100ns intervals > microseconds */ - return cur_time; -#elif defined(LTC_CLOCK_GETTIME) - struct timespec ts; - clock_gettime(CLOCK_MONOTONIC, &ts); - return (ulong64)(ts.tv_sec) * 1000000 + (ulong64)(ts.tv_nsec) / 1000; /* get microseconds */ -#else - struct timeval tv; - gettimeofday(&tv, NULL); - return (ulong64)(tv.tv_sec) * 1000000 + (ulong64)(tv.tv_usec); /* get microseconds */ -#endif -} - -#ifdef LTC_PTHREAD -typedef struct -{ - pthread_t thread_id; - const test_function* t; - int err; - ulong64 delta; -} thread_info; - -static void *run(void *arg) -{ - thread_info *tinfo = arg; - ulong64 ts; - - ts = epoch_usec(); - tinfo->err = tinfo->t->fn(); - tinfo->delta = epoch_usec() - ts; - - return arg; -} -#endif - - -/* - * unregister ciphers, hashes & prngs - */ -static void s_unregister_all(void) -{ -#ifdef LTC_RIJNDAEL - /* `aesni_desc` is not registered, i.e. also shouldn't be unregistered */ -#ifdef ENCRYPT_ONLY - /* alternative would be - * unregister_cipher(&rijndael_enc_desc); - */ - unregister_cipher(&aes_enc_desc); -#else - /* alternative would be - * unregister_cipher(&rijndael_desc); - */ - unregister_cipher(&aes_desc); -#endif -#endif -#ifdef LTC_BLOWFISH - unregister_cipher(&blowfish_desc); -#endif -#ifdef LTC_XTEA - unregister_cipher(&xtea_desc); -#endif -#ifdef LTC_RC5 - unregister_cipher(&rc5_desc); -#endif -#ifdef LTC_RC6 - unregister_cipher(&rc6_desc); -#endif -#ifdef LTC_SAFERP - unregister_cipher(&saferp_desc); -#endif -#ifdef LTC_TWOFISH - unregister_cipher(&twofish_desc); -#endif -#ifdef LTC_SAFER - unregister_cipher(&safer_k64_desc); - unregister_cipher(&safer_sk64_desc); - unregister_cipher(&safer_k128_desc); - unregister_cipher(&safer_sk128_desc); -#endif -#ifdef LTC_RC2 - unregister_cipher(&rc2_desc); -#endif -#ifdef LTC_DES - unregister_cipher(&des_desc); - unregister_cipher(&desx_desc); - unregister_cipher(&des3_desc); -#endif -#ifdef LTC_SM4 - unregister_cipher(&sm4_desc); -#endif -#ifdef LTC_CAST5 - unregister_cipher(&cast5_desc); -#endif -#ifdef LTC_NOEKEON - unregister_cipher(&noekeon_desc); -#endif -#ifdef LTC_SKIPJACK - unregister_cipher(&skipjack_desc); -#endif -#ifdef LTC_KHAZAD - unregister_cipher(&khazad_desc); -#endif -#ifdef LTC_ANUBIS - unregister_cipher(&anubis_desc); -#endif -#ifdef LTC_KSEED - unregister_cipher(&kseed_desc); -#endif -#ifdef LTC_KASUMI - unregister_cipher(&kasumi_desc); -#endif -#ifdef LTC_MULTI2 - unregister_cipher(&multi2_desc); -#endif -#ifdef LTC_CAMELLIA - unregister_cipher(&camellia_desc); -#endif -#ifdef LTC_IDEA - unregister_cipher(&idea_desc); -#endif -#ifdef LTC_SERPENT - unregister_cipher(&serpent_desc); -#endif -#ifdef LTC_ARIA - unregister_cipher(&aria_desc); -#endif - -#ifdef LTC_TIGER - unregister_hash(&tiger2_desc); - unregister_hash(&tiger_desc); -#endif -#ifdef LTC_MD2 - unregister_hash(&md2_desc); -#endif -#ifdef LTC_MD4 - unregister_hash(&md4_desc); -#endif -#ifdef LTC_SM3 - unregister_hash(&sm3_desc); -#endif -#ifdef LTC_MD5 - unregister_hash(&md5_desc); -#endif -#ifdef LTC_SHA1 - /* `register_all_hashes()` does not register - * - `sha1_portable_desc` - * - `sha1_x86_desc` - * so we don't have to unregister them */ - unregister_hash(&sha1_desc); -#endif -#ifdef LTC_SHA224 - /* `register_all_hashes()` does not register - * - `sha224_portable_desc` - * - `sha224_x86_desc` - * so we don't have to unregister them */ - unregister_hash(&sha224_desc); -#endif -#ifdef LTC_SHA256 - /* `register_all_hashes()` does not register - * - `sha256_portable_desc` - * - `sha256_x86_desc` - * so we don't have to unregister them */ - unregister_hash(&sha256_desc); -#endif -#ifdef LTC_SHA384 - /* `register_all_hashes()` does not register `sha384_portable_desc` nor `sha384_x86_desc`, so we don't have to unregister them */ - unregister_hash(&sha384_desc); -#endif -#ifdef LTC_SHA512 - /* `register_all_hashes()` does not register `sha512_portable_desc` nor `sha512_x86_desc`, so we don't have to unregister them */ - unregister_hash(&sha512_desc); -#endif -#ifdef LTC_SHA512_224 - /* `register_all_hashes()` does not register `sha512_224_portable_desc` nor `sha512_224_x86_desc`, so we don't have to unregister them */ - unregister_hash(&sha512_224_desc); -#endif -#ifdef LTC_SHA512_256 - /* `register_all_hashes()` does not register `sha512_256_portable_desc` nor `sha512_256_x86_desc`, so we don't have to unregister them */ - unregister_hash(&sha512_256_desc); -#endif -#ifdef LTC_SHA3 - unregister_hash(&sha3_224_desc); - unregister_hash(&sha3_256_desc); - unregister_hash(&sha3_384_desc); - unregister_hash(&sha3_512_desc); - unregister_hash(&shake128_desc); - unregister_hash(&shake256_desc); -#endif -#ifdef LTC_KECCAK - unregister_hash(&keccak224_desc); - unregister_hash(&keccak256_desc); - unregister_hash(&keccak384_desc); - unregister_hash(&keccak512_desc); -#endif -#ifdef LTC_RIPEMD128 - unregister_hash(&rmd128_desc); -#endif -#ifdef LTC_RIPEMD160 - unregister_hash(&rmd160_desc); -#endif -#ifdef LTC_RIPEMD256 - unregister_hash(&rmd256_desc); -#endif -#ifdef LTC_RIPEMD320 - unregister_hash(&rmd320_desc); -#endif -#ifdef LTC_WHIRLPOOL - unregister_hash(&whirlpool_desc); -#endif -#ifdef LTC_BLAKE2S - unregister_hash(&blake2s_128_desc); - unregister_hash(&blake2s_160_desc); - unregister_hash(&blake2s_224_desc); - unregister_hash(&blake2s_256_desc); -#endif -#ifdef LTC_BLAKE2B - unregister_hash(&blake2b_160_desc); - unregister_hash(&blake2b_256_desc); - unregister_hash(&blake2b_384_desc); - unregister_hash(&blake2b_512_desc); -#endif -#ifdef LTC_BLAKE3 - unregister_hash(&blake3_desc); -#endif -#ifdef LTC_CHC_HASH - unregister_hash(&chc_desc); -#endif - - unregister_prng(&yarrow_desc); -#ifdef LTC_FORTUNA - unregister_prng(&fortuna_desc); -#endif -#ifdef LTC_RC4 - unregister_prng(&rc4_desc); -#endif -#ifdef LTC_CHACHA20_PRNG - unregister_prng(&chacha20_prng_desc); -#endif -#ifdef LTC_SOBER128 - unregister_prng(&sober128_desc); -#endif -#ifdef LTC_SPRNG - unregister_prng(&sprng_desc); -#endif -} /* s_cleanup() */ - -static void register_algs(void) -{ - int err; - - atexit(s_unregister_all); - -#ifndef LTC_YARROW - #error This demo requires Yarrow. -#endif - if ((err = register_all_ciphers()) != CRYPT_OK) { - fprintf(stderr, "register_all_ciphers err=%s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - if ((err = register_all_hashes()) != CRYPT_OK) { - fprintf(stderr, "register_all_hashes err=%s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - if ((err = register_all_prngs()) != CRYPT_OK) { - fprintf(stderr, "register_all_prngs err=%s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - - if ((err = rng_make_prng(128, find_prng("yarrow"), &yarrow_prng, NULL)) != CRYPT_OK) { - fprintf(stderr, "rng_make_prng failed: %s\n", error_to_string(err)); - exit(EXIT_FAILURE); - } - - if (strcmp("CRYPT_OK", error_to_string(err))) { - exit(EXIT_FAILURE); - } -} -static void LTC_NORETURN die(int status) -{ - FILE* o = status == EXIT_SUCCESS ? stdout : stderr; - fprintf(o, - "Usage: test [<-h|-l|case>] [mpi]\n\n" - "Run all built-in tests, or only the one given in .\n\n" - "\tcase\tThe algorithms to test. Use the '-l' option to check for valid values.\n" - "\tmpi\tThe MPI provider to use.\n" - "\t-l\tList all tests that can be executed.\n" - "\t-h\tThe help you're looking at.\n\n" - "Examples:\n" - "\ttest rsa tfm\t\tWill run only the RSA tests with TomsFastMath as MPI provider.\n" - ); - exit(status); -} - -int main(int argc, char **argv) -{ -#ifdef LTC_PTHREAD - thread_info *tinfo, *res; -#endif - int x, pass = 0, fail = 0, nop = 0; - size_t fn_len, i, dots; - const char* mpi_provider = NULL; - char *single_test = NULL; - ulong64 ts; - long delta, dur, real = 0; - - if (argc > 1) { - if (strstr(argv[1], "-h")) { - die(EXIT_SUCCESS); - } else if (strstr(argv[1], "-l")) { - printf("The following tests are available:\n"); - for (i = 0; i < LTC_ARRAY_SIZE(test_functions); ++i) { - if (i % 4 == 0) - putchar('\n'); - printf(" %-13s", test_functions[i].name); - } - putchar('\n'); - exit(0); - } - } - - - register_algs(); - - printf("LTC_VERSION = %s\n%s\n\n", GIT_VERSION, crypt_build_settings); - - printf("AES-NI CPU support = %d\n", aesni_is_supported()); - printf("SHA-NI CPU support = %d\n", shani_is_supported()); - printf("SHA512-NI CPU support = %d\n", sha512ni_is_supported()); - printf("PMUL CPU support = %d\n", gcm_hw_pmul_is_supported()); - putchar('\n'); - -#ifdef USE_LTM - mpi_provider = "ltm"; -#elif defined(USE_TFM) - mpi_provider = "tfm"; -#elif defined(USE_GMP) - mpi_provider = "gmp"; -#elif defined(EXT_MATH_LIB) - mpi_provider = "ext"; -#endif - - if (argc > 2) { - mpi_provider = argv[2]; - } - - crypt_mp_init(mpi_provider); - - if (ltc_mp.name != NULL) { - printf("MP_PROVIDER = %s\n", ltc_mp.name); - printf("MP_DIGIT_BIT = %d\n", LTC_MP_DIGIT_BIT); - printf("sizeof(ltc_mp_digit) = %d\n", (int)sizeof(ltc_mp_digit)); - } else { - printf("NO math provider selected, all tests requiring MPI will 'nop'\n"); - } - -#ifdef LTC_PTHREAD - tinfo = XCALLOC(LTC_ARRAY_SIZE(test_functions), sizeof(thread_info)); - if (tinfo == NULL) { - printf("\n\nFAILURE: XCALLOC\n"); - return EXIT_FAILURE; - } -#endif - - fn_len = 0; - for (i = 0; i < sizeof(test_functions) / sizeof(test_functions[0]); ++i) { - size_t len = XSTRLEN(test_functions[i].name); - if (fn_len < len) fn_len = len; - -#ifdef LTC_PTHREAD - if(test_functions[i].fn == prng_test) continue; - tinfo[i].t = &test_functions[i]; - x = pthread_create(&tinfo[i].thread_id, NULL, run, &tinfo[i]); - if (x != 0) { - printf("\n\nFAILURE: pthread_create\n"); - return EXIT_FAILURE; - } -#endif - } - - fn_len = fn_len + (8 - (fn_len % 8)); - - /* single test name from commandline */ - if (argc > 1) single_test = argv[1]; - - dur = epoch_usec(); - for (i = 0; i < LTC_ARRAY_SIZE(test_functions); ++i) { - if (single_test && strstr(test_functions[i].name, single_test) == NULL) { - continue; - } - dots = fn_len - XSTRLEN(test_functions[i].name); - - printf("\n%s", test_functions[i].name); - while(dots--) printf("."); - fflush(stdout); - -#ifdef LTC_PTHREAD - if(test_functions[i].fn != prng_test) { - x = pthread_join(tinfo[i].thread_id, (void**)&res); - if (x != 0){ - printf("\n\nFAILURE: pthread_join\n"); - return EXIT_FAILURE; - } - x = res->err; - delta = res->delta; - } - else { - ts = epoch_usec(); - x = test_functions[i].fn(); - delta = (long)(epoch_usec() - ts); - } -#else - ts = epoch_usec(); - x = test_functions[i].fn(); - delta = (long)(epoch_usec() - ts); -#endif - real += delta; - - if (x == CRYPT_OK) { - printf("passed %10.3fms", (double)(delta)/1000); - pass++; - } - else if (x == CRYPT_NOP) { - printf("nop"); - nop++; - } - else { - printf("failed (%s) %10.3fms", error_to_string(x), (double)(delta)/1000); - fail++; - } - } - dur = epoch_usec() - dur; - -#ifdef LTC_PTHREAD - XFREE(tinfo); -#endif - - if (cipher_descriptor[TAB_SIZE - 1].name != NULL) - printf("cipher_descriptor Table full\n"); - if (hash_descriptor[TAB_SIZE - 1].name != NULL) - printf("hash_descriptor Table full\n"); - if (prng_descriptor[TAB_SIZE - 1].name != NULL) - printf("prng_descriptor Table full\n"); - x = (fail > 0 || fail+pass+nop == 0) ? EXIT_FAILURE : EXIT_SUCCESS; - printf("\n\n%s: passed=%d failed=%d nop=%d duration=%.1fsec real=%.1fsec\n", x ? "FAILURE" : "SUCCESS", pass, fail, nop, (double)(dur)/(1000*1000), (double)(real)/(1000*1000)); - return x; -} diff --git a/tests/test.der b/tests/test.der deleted file mode 100644 index d7041f9b..00000000 Binary files a/tests/test.der and /dev/null differ diff --git a/tests/test.key b/tests/test.key deleted file mode 100644 index e4996c35..00000000 --- a/tests/test.key +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICXgIBAAKBgQDPmt5kitrIMyCp14MxGVSymoWnobd1M7aprIQks97bfYUtlmXl -P3KVJJ8oaMpP20QcPmASit0mpev/C17UiDhJKm5bvxI3R70Fa7zb8+7kEY5BaHxh -E9dCyIC+No/cCItPrKTidgzJY2xJWJPtzKrcJTsKYD+LVDrDTTHnlKRE/QIDAQAB -AoGBAMhiuereRFMdVpfZl54azzAeCohFhikwo02fYWVz4NaHj7bzBqOC3Hys/pso -mq79+/4vDtiXBOO7H9HsDbqjSX9HrIpEBH6GtzlCP60etw6lUfRAYx79veqfQZ+o -kB1vClqVExENgK9fZJiKLHhoZbAri6JTh8rxZASr8nvbg8iBAkEA975eI8MyP7+L -jjru/PzL5ffxC7xCgq7Vej7K99VpP2Qloh+3dXUFkkLruPHzCgXjlNFVeDWgNqCb -fJKEbN3cTQJBANaGDoVCCwQIhCFg8A4NiP0eNhBlTx5TtAhygFw/WWYX5pjy6Wx6 -Bkysdj3tjKHOrRu9tH0ovOMOOI2Z2AW1o3ECQG3rwy0u8F6kiDEFKQCK0ZUpm4PP -ddsx43on3jp0MAx2TNRQKkAtOdmZY6ldgK5TypQ/BSMe+AUE4bg18hezoIkCQQCr -kIj6YAgpUJpDi6BQzNha/pdkY3F0IqMgAlrP68YWlVTRy6uNGsYA+giSnHHVUlI1 -lnFLi5IM0Om/rWMLpemxAkEA3MwnyOTcYkjVm6/1q2D2If1T4rddCckaoQSp/GEs -XQRYOlo58UohVmf9zCCjj3gYWnk9Lo5+hgrmqDPBBBdKnw== ------END RSA PRIVATE KEY----- diff --git a/tests/test_dsa.key b/tests/test_dsa.key deleted file mode 100644 index 2f026694..00000000 --- a/tests/test_dsa.key +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN DSA PRIVATE KEY----- -MIIBuwIBAAKBgQDFCjdRXKvWGNWicL1Kb2tK+eE5lQ8rmTh9mmTWTLWWetztrKis -xhtlWt7bAGElGhgs7qEHkGJeTRIxkMcDIfoJ57Fz146v2/2/s++t0aEqA23nBpJK -hSr/egFmUx/qxmdBhFrAbO1i+cJiYgWk+kigZuw1yagR/rmBq+6+Mba/zwIVAKpb -1/TlBiQT5Yg1ygDHpjVxYZTFAoGAO5Lk/1kpFQsImVp78q0UQFVvoEf/kJmzRLPU -/EUVBa5nIkOcujcQpYlHN+zM9a6tqLR6Ncudk1zt5rB+lpTEpgx91nCKCU+BSg7C -E/vrFr/qpPRW/3IwBd6KRD++xoUmVdYtHR7bFdqkRYM8F5eYC42H80kNkL2pq2du -h2hyI9wCgYBTFrD7v1mKXlWVwU+sQ7gIU+bPDZIj+rGEWVI5v8vyLTg63ZNSBUl+ -KxLEYXPjb1S9luWnqqlaWKS3Z9LAvcgesToST5jABe85XWq6tws72LeV3XluotKE -c0cDiLRk2bm4T/HJNLv5c2b1fC4R/sMx5gg4WWeB621BJ9cNdK+gNQIVAJk25eTp -+yi+kfUGX+jJNbP12B/F ------END DSA PRIVATE KEY----- diff --git a/tests/tomcrypt_test.h b/tests/tomcrypt_test.h deleted file mode 100644 index a1e2617f..00000000 --- a/tests/tomcrypt_test.h +++ /dev/null @@ -1,71 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#ifndef TOMCRYPT_TEST_H_ -#define TOMCRYPT_TEST_H_ - -#define _POSIX_C_SOURCE 200809L /* otherwise PATH_MAX + strdup are not defined for build with -std=c99 */ -#include "tomcrypt_private.h" - -#include "common.h" - -typedef struct { - char *name, *prov, *req; - int (*entry)(void); -} test_entry; - -/* TESTS */ -int cipher_hash_test(void); -int modes_test(void); -int mac_test(void); -int siv_wycheproof_test(void); -int pkcs_1_test(void); -int pkcs_1_pss_test(void); -int pkcs_1_oaep_test(void); -int pkcs_1_emsa_test(void); -int pkcs_1_eme_test(void); -int store_test(void); -int rotate_test(void); -int rsa_test(void); -int dh_test(void); -int ecc_test(void); -int dsa_test(void); -int der_test(void); -int misc_test(void); -int base64_test(void); -int base32_test(void); -int base16_test(void); -int file_test(void); -int multi_test(void); -int pem_test(void); -int prng_test(void); -int mpi_test(void); -int padding_test(void); -int x25519_test(void); -int x25519_mpi_test(void); -int x448_test(void); -int x448_mpi_test(void); -int ed25519_test(void); -int ed25519_mpi_test(void); -int ed448_test(void); -int ed448_mpi_test(void); -int ssh_test(void); -int argon2_test(void); -int bcrypt_test(void); -int scrypt_test(void); -int no_null_termination_check_test(void); -int pk_oid_test(void); -int deprecated_test(void); -int nop_test(void); - -extern const char ltc_der_tests_cacert_root_cert[]; -extern const unsigned long ltc_der_tests_cacert_root_cert_size; -extern const unsigned char ltc_openssl_public_rsa[]; -extern const unsigned long ltc_openssl_public_rsa_sz; - -#ifdef LTC_PKCS_1 -struct ltc_prng_descriptor* no_prng_desc_get(void); -void no_prng_desc_free(struct ltc_prng_descriptor*); -#endif - -#endif diff --git a/tests/x25519_test.c b/tests/x25519_test.c deleted file mode 100644 index 21728040..00000000 --- a/tests/x25519_test.c +++ /dev/null @@ -1,269 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_test.h" - -/** - @file x25519_test.c - x25519 tests, Steffen Jaeckel -*/ - -#ifdef LTC_CURVE25519 - -static int s_rfc_7748_5_2_test(void) -{ - /* RFC 7748 Ch. 5.2 */ - const struct { - unsigned char scalar[32]; - unsigned char u_in[32]; - unsigned char u_out[32]; - } rfc_7748_5_2[] = { - { - { 0xa5, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d, - 0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd, - 0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18, - 0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0xc4 }, - { 0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb, - 0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c, - 0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b, - 0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c }, - { 0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90, - 0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f, - 0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7, - 0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52 } - }, - { - { 0x4b, 0x66, 0xe9, 0xd4, 0xd1, 0xb4, 0x67, 0x3c, - 0x5a, 0xd2, 0x26, 0x91, 0x95, 0x7d, 0x6a, 0xf5, - 0xc1, 0x1b, 0x64, 0x21, 0xe0, 0xea, 0x01, 0xd4, - 0x2c, 0xa4, 0x16, 0x9e, 0x79, 0x18, 0xba, 0x0d }, - { 0xe5, 0x21, 0x0f, 0x12, 0x78, 0x68, 0x11, 0xd3, - 0xf4, 0xb7, 0x95, 0x9d, 0x05, 0x38, 0xae, 0x2c, - 0x31, 0xdb, 0xe7, 0x10, 0x6f, 0xc0, 0x3c, 0x3e, - 0xfc, 0x4c, 0xd5, 0x49, 0xc7, 0x15, 0xa4, 0x93 }, - { 0x95, 0xcb, 0xde, 0x94, 0x76, 0xe8, 0x90, 0x7d, - 0x7a, 0xad, 0xe4, 0x5c, 0xb4, 0xb8, 0x73, 0xf8, - 0x8b, 0x59, 0x5a, 0x68, 0x79, 0x9f, 0xa1, 0x52, - 0xe6, 0xf8, 0xf7, 0x64, 0x7a, 0xac, 0x79, 0x57 } - } - }; - unsigned char out[32]; - unsigned long n; - - for (n = 0; n < LTC_ARRAY_SIZE(rfc_7748_5_2); ++n) { - tweetnacl_crypto_scalarmult(out, rfc_7748_5_2[n].scalar, rfc_7748_5_2[n].u_in); - COMPARE_TESTVECTOR(out, sizeof(out), rfc_7748_5_2[n].u_out, sizeof(rfc_7748_5_2[n].u_out), "x25519 RFC 7748 Ch. 5.2", n); - } - return CRYPT_OK; -} - -static int s_rfc_7748_6_test(void) -{ - /* RFC 7748 Ch. 6 */ - const unsigned char alice_private[] = { - 0x77, 0x07, 0x6d, 0x0a, 0x73, 0x18, 0xa5, 0x7d, - 0x3c, 0x16, 0xc1, 0x72, 0x51, 0xb2, 0x66, 0x45, - 0xdf, 0x4c, 0x2f, 0x87, 0xeb, 0xc0, 0x99, 0x2a, - 0xb1, 0x77, 0xfb, 0xa5, 0x1d, 0xb9, 0x2c, 0x2a - }; - const unsigned char alice_public[] = { - 0x85, 0x20, 0xf0, 0x09, 0x89, 0x30, 0xa7, 0x54, - 0x74, 0x8b, 0x7d, 0xdc, 0xb4, 0x3e, 0xf7, 0x5a, - 0x0d, 0xbf, 0x3a, 0x0d, 0x26, 0x38, 0x1a, 0xf4, - 0xeb, 0xa4, 0xa9, 0x8e, 0xaa, 0x9b, 0x4e, 0x6a - }; - const unsigned char bob_private[] = { - 0x5d, 0xab, 0x08, 0x7e, 0x62, 0x4a, 0x8a, 0x4b, - 0x79, 0xe1, 0x7f, 0x8b, 0x83, 0x80, 0x0e, 0xe6, - 0x6f, 0x3b, 0xb1, 0x29, 0x26, 0x18, 0xb6, 0xfd, - 0x1c, 0x2f, 0x8b, 0x27, 0xff, 0x88, 0xe0, 0xeb - }; - const unsigned char bob_public[] = { - 0xde, 0x9e, 0xdb, 0x7d, 0x7b, 0x7d, 0xc1, 0xb4, - 0xd3, 0x5b, 0x61, 0xc2, 0xec, 0xe4, 0x35, 0x37, - 0x3f, 0x83, 0x43, 0xc8, 0x5b, 0x78, 0x67, 0x4d, - 0xad, 0xfc, 0x7e, 0x14, 0x6f, 0x88, 0x2b, 0x4f - }; - const unsigned char shared_secret[] = { - 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1, - 0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25, - 0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33, - 0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42 - }; - curve25519_key alice_priv, alice_pub, bob_priv, bob_pub; - unsigned char buf[32]; - unsigned long buflen = sizeof(buf); - - DO(x25519_import_raw(alice_private, sizeof(alice_private), PK_PRIVATE, &alice_priv)); - DO(x25519_import_raw(bob_private, sizeof(bob_private), PK_PRIVATE, &bob_priv)); - DO(x25519_import_raw(alice_public, sizeof(alice_public), PK_PUBLIC, &alice_pub)); - DO(x25519_import_raw(bob_public, sizeof(bob_public), PK_PUBLIC, &bob_pub)); - - DO(x25519_shared_secret(&alice_priv, &bob_pub, buf, &buflen)); - COMPARE_TESTVECTOR(buf, buflen, shared_secret, sizeof(shared_secret), "x25519 - RFC 7748 Ch. 6", 0); - - XMEMSET(buf, 0, sizeof(buf)); - - DO(x25519_shared_secret(&bob_priv, &alice_pub, buf, &buflen)); - COMPARE_TESTVECTOR(buf, buflen, shared_secret, sizeof(shared_secret), "x25519 - RFC 7748 Ch. 6", 1); - - return CRYPT_OK; -} - -static int s_rfc_8410_10_test(void) -{ - const struct { - const char *b64; - } rfc_8410_10[] = { - /* RFC 8410 - 10.2. Example X25519 Certificate */ - { "MIIBLDCB36ADAgECAghWAUdKKo3DMDAFBgMrZXAwGTEXMBUGA1UEAwwOSUVURiBUZX" - "N0IERlbW8wHhcNMTYwODAxMTIxOTI0WhcNNDAxMjMxMjM1OTU5WjAZMRcwFQYDVQQD" - "DA5JRVRGIFRlc3QgRGVtbzAqMAUGAytlbgMhAIUg8AmJMKdUdIt93LQ+91oNvzoNJj" - "ga9OukqY6qm05qo0UwQzAPBgNVHRMBAf8EBTADAQEAMA4GA1UdDwEBAAQEAwIDCDAg" - "BgNVHQ4BAQAEFgQUmx9e7e0EM4Xk97xiPFl1uQvIuzswBQYDK2VwA0EAryMB/t3J5v" - "/BzKc9dNZIpDmAgs3babFOTQbs+BolzlDUwsPrdGxO3YNGhW7Ibz3OGhhlxXrCe1Cg" - "w1AH9efZBw==" - }, - }; - unsigned n; - curve25519_key key; - unsigned char buf[1024]; - unsigned long buflen; - for (n = 0; n < LTC_ARRAY_SIZE(rfc_8410_10); ++n) { - buflen = sizeof(buf); - DO(base64_decode(rfc_8410_10[n].b64, XSTRLEN(rfc_8410_10[n].b64), buf, &buflen)); - DO(x25519_import_x509(buf, buflen, &key)); - zeromem(buf, sizeof(buf)); - } - return CRYPT_OK; -} - -static int password_get(void **p, unsigned long *l, void *u) -{ - *p = strdup(u); - *l = strlen(*p); - return 0; -} - -static int s_x25519_pkcs8_test(void) -{ - const struct { - const char *b64, *pass; - } s_x25519_pkcs8[] = { - /* `openssl genpkey -algorithm x25519 -pass stdin -aes128` */ - { - "MIGbMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAjG5kRkEihOvQICCAAw" - "DAYIKoZIhvcNAgkFADAdBglghkgBZQMEAQIEEHPLHLoCvesRyeToyMtGHWcEQM1+" - "FMpSO5DplX3d+YGTAvf0WxWaBff1q4bfKDn/7IoWQT1e4Fe6Psj62Vy9T69o3+Uy" - "VM6mdIOXGOkAtaMSsSk=", - "123456" - }, - /* `openssl genpkey -algorithm x25519 -pass stdin` */ - { - "MC4CAQAwBQYDK2VuBCIEIEAInaUdx+fQFfghpCzw/WdItRT3+FnPSkrU9TcIZTZW", - NULL - }, - }; - unsigned n; - curve25519_key key; - unsigned char buf[1024]; - unsigned long buflen; - password_ctx *p_pw_ctx, pw_ctx = { .callback = password_get }; - for (n = 0; n < LTC_ARRAY_SIZE(s_x25519_pkcs8); ++n) { - buflen = sizeof(buf); - DO(base64_decode(s_x25519_pkcs8[n].b64, XSTRLEN(s_x25519_pkcs8[n].b64), buf, &buflen)); - pw_ctx.userdata = (void*)s_x25519_pkcs8[n].pass; - if (s_x25519_pkcs8[n].pass != NULL) p_pw_ctx = &pw_ctx; - else p_pw_ctx = NULL; - DO(x25519_import_pkcs8(buf, buflen, p_pw_ctx, &key)); - zeromem(buf, sizeof(buf)); - } - return CRYPT_OK; -} - -static int s_x25519_compat_test(void) -{ - curve25519_key priv, pub, imported; - unsigned char buf[1024]; - unsigned long buflen = sizeof(buf); - int prng_idx = find_prng("yarrow"); - - XMEMSET(&priv, 0, sizeof(priv)); - XMEMSET(&pub, 0, sizeof(pub)); - XMEMSET(&imported, 0, sizeof(imported)); - - DO(x25519_make_key(&yarrow_prng, prng_idx, &priv)); - - DO(x25519_export(buf, &buflen, PK_PRIVATE | PK_STD, &priv)); - DO(x25519_import_pkcs8(buf, buflen, NULL, &imported)); - COMPARE_TESTVECTOR(&priv, sizeof(priv), &imported, sizeof(imported), "priv after ex-&import", __LINE__); - XMEMSET(&imported, 0, sizeof(imported)); - - buflen = sizeof(buf); - DO(x25519_export(buf, &buflen, PK_PUBLIC, &priv)); - DO(x25519_import_raw(buf, buflen, PK_PUBLIC, &pub)); - - buflen = sizeof(buf); - DO(x25519_export(buf, &buflen, PK_PUBLIC | PK_STD, &priv)); - DO(x25519_import(buf, buflen, &imported)); - - COMPARE_TESTVECTOR(&pub, sizeof(pub), &imported, sizeof(imported), "pub after private ex-&import", __LINE__); - XMEMSET(&imported, 0, sizeof(imported)); - - buflen = sizeof(buf); - DO(x25519_export(buf, &buflen, PK_PUBLIC | PK_STD, &pub)); - DO(x25519_import(buf, buflen, &imported)); - - COMPARE_TESTVECTOR(&pub, sizeof(pub), &imported, sizeof(imported), "pub after public ex-&import", __LINE__); - - return CRYPT_OK; -} - -static int s_x25519_zero_shared_secret_test(void) -{ - curve25519_key alice, bob, zero_pub; - unsigned char shared[32], zeros[32]; - unsigned long len; - int prng_idx = find_prng("yarrow"); - - zeromem(zeros, sizeof(zeros)); - - DO(x25519_make_key(&yarrow_prng, prng_idx, &alice)); - DO(x25519_make_key(&yarrow_prng, prng_idx, &bob)); - - len = sizeof(shared); - DO(x25519_shared_secret(&alice, &bob, shared, &len)); - ENSURE(len == sizeof(shared)); - - DO(x25519_import_raw(zeros, sizeof(zeros), PK_PUBLIC, &zero_pub)); - - len = sizeof(shared); - SHOULD_FAIL_WITH(x25519_shared_secret(&alice, &zero_pub, shared, &len), CRYPT_INVALID_PACKET); - - return CRYPT_OK; -} - -/** - Test the x25519 system - @return CRYPT_OK if successful -*/ -int x25519_test(void) -{ - DO(s_rfc_7748_5_2_test()); - DO(s_rfc_7748_6_test()); - DO(s_x25519_zero_shared_secret_test()); - return CRYPT_OK; -} - -int x25519_mpi_test(void) -{ - if (ltc_mp.name == NULL) return CRYPT_NOP; - DO(s_x25519_pkcs8_test()); - DO(s_rfc_8410_10_test()); - DO(s_x25519_compat_test()); - return CRYPT_OK; -} - -#else -LTC_NOP_TEST(x25519_test) -LTC_NOP_TEST(x25519_mpi_test) -#endif diff --git a/tests/x448_test.c b/tests/x448_test.c deleted file mode 100644 index 55f3f2f0..00000000 --- a/tests/x448_test.c +++ /dev/null @@ -1,274 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_test.h" - -#ifdef LTC_CURVE448 - -/* RFC 7748 Section 5.2 - X448 scalar multiplication test vectors */ -static int s_x448_rfc7748_scalarmult_test(void) -{ - /* First test vector */ - static const unsigned char k1[56] = { - 0x3d, 0x26, 0x2f, 0xdd, 0xf9, 0xec, 0x8e, 0x88, - 0x49, 0x52, 0x66, 0xfe, 0xa1, 0x9a, 0x34, 0xd2, - 0x88, 0x82, 0xac, 0xef, 0x04, 0x51, 0x04, 0xd0, - 0xd1, 0xaa, 0xe1, 0x21, 0x70, 0x0a, 0x77, 0x9c, - 0x98, 0x4c, 0x24, 0xf8, 0xcd, 0xd7, 0x8f, 0xbf, - 0xf4, 0x49, 0x43, 0xeb, 0xa3, 0x68, 0xf5, 0x4b, - 0x29, 0x25, 0x9a, 0x4f, 0x1c, 0x60, 0x0a, 0xd3 - }; - static const unsigned char u1[56] = { - 0x06, 0xfc, 0xe6, 0x40, 0xfa, 0x34, 0x87, 0xbf, - 0xda, 0x5f, 0x6c, 0xf2, 0xd5, 0x26, 0x3f, 0x8a, - 0xad, 0x88, 0x33, 0x4c, 0xbd, 0x07, 0x43, 0x7f, - 0x02, 0x0f, 0x08, 0xf9, 0x81, 0x4d, 0xc0, 0x31, - 0xdd, 0xbd, 0xc3, 0x8c, 0x19, 0xc6, 0xda, 0x25, - 0x83, 0xfa, 0x54, 0x29, 0xdb, 0x94, 0xad, 0xa1, - 0x8a, 0xa7, 0xa7, 0xfb, 0x4e, 0xf8, 0xa0, 0x86 - }; - static const unsigned char expected1[56] = { - 0xce, 0x3e, 0x4f, 0xf9, 0x5a, 0x60, 0xdc, 0x66, - 0x97, 0xda, 0x1d, 0xb1, 0xd8, 0x5e, 0x6a, 0xfb, - 0xdf, 0x79, 0xb5, 0x0a, 0x24, 0x12, 0xd7, 0x54, - 0x6d, 0x5f, 0x23, 0x9f, 0xe1, 0x4f, 0xba, 0xad, - 0xeb, 0x44, 0x5f, 0xc6, 0x6a, 0x01, 0xb0, 0x77, - 0x9d, 0x98, 0x22, 0x39, 0x61, 0x11, 0x1e, 0x21, - 0x76, 0x62, 0x82, 0xf7, 0x3d, 0xd9, 0x6b, 0x6f - }; - - /* Second test vector */ - static const unsigned char k2[56] = { - 0x20, 0x3d, 0x49, 0x44, 0x28, 0xb8, 0x39, 0x93, - 0x52, 0x66, 0x5d, 0xdc, 0xa4, 0x2f, 0x9d, 0xe8, - 0xfe, 0xf6, 0x00, 0x90, 0x8e, 0x0d, 0x46, 0x1c, - 0xb0, 0x21, 0xf8, 0xc5, 0x38, 0x34, 0x5d, 0xd7, - 0x7c, 0x3e, 0x48, 0x06, 0xe2, 0x5f, 0x46, 0xd3, - 0x31, 0x5c, 0x44, 0xe0, 0xa5, 0xb4, 0x37, 0x12, - 0x82, 0xdd, 0x2c, 0x8d, 0x5b, 0xe3, 0x09, 0x5b - }; - static const unsigned char u2[56] = { - 0x0f, 0xbc, 0xc2, 0xf9, 0x93, 0xcd, 0x56, 0xd3, - 0x30, 0x5b, 0x0b, 0x7d, 0x9e, 0x55, 0xd4, 0xc1, - 0xa8, 0xfb, 0x5d, 0xbb, 0x52, 0xf8, 0xe9, 0xa1, - 0xe9, 0xb6, 0x20, 0x1b, 0x16, 0x5d, 0x01, 0x58, - 0x94, 0xe5, 0x6c, 0x4d, 0x35, 0x70, 0xbe, 0xe5, - 0x2f, 0xe2, 0x05, 0xe2, 0x8a, 0x78, 0xb9, 0x1c, - 0xdf, 0xbd, 0xe7, 0x1c, 0xe8, 0xd1, 0x57, 0xdb - }; - static const unsigned char expected2[56] = { - 0xe4, 0x3a, 0x6e, 0x84, 0xc5, 0x41, 0x24, 0x19, - 0x69, 0xe1, 0xbc, 0x13, 0xaf, 0xae, 0xba, 0x34, - 0xe8, 0xe0, 0x91, 0x22, 0xaf, 0x0f, 0xaf, 0x6a, - 0x45, 0xf8, 0xd2, 0x51, 0x38, 0xb4, 0x80, 0x0f, - 0x07, 0xc8, 0x62, 0xd8, 0x04, 0xac, 0xaf, 0x18, - 0xd2, 0xc5, 0xf5, 0x02, 0x76, 0xcd, 0xf0, 0xbd, - 0x06, 0x8e, 0x95, 0x73, 0x73, 0xd3, 0x52, 0x97 - }; - - unsigned char out[56]; - - ec448_scalarmult_internal(out, k1, u1); - COMPARE_TESTVECTOR(out, 56, expected1, 56, "X448 RFC7748 5.2 #1", 0); - - ec448_scalarmult_internal(out, k2, u2); - COMPARE_TESTVECTOR(out, 56, expected2, 56, "X448 RFC7748 5.2 #2", 1); - - return CRYPT_OK; -} - -/* RFC 7748 Section 5.2 - X448 iterative scalar multiplication test - * - * Start with k = u = 5 (as 56-byte little-endian). - * Each iteration: out = X448(k, u), then u = old_k, k = out. - */ -static int s_x448_rfc7748_iter_test(void) -{ - /* Expected result after 1 iteration */ - static const unsigned char expected_1[56] = { - 0x3f, 0x48, 0x2c, 0x8a, 0x9f, 0x19, 0xb0, 0x1e, - 0x6c, 0x46, 0xee, 0x97, 0x11, 0xd9, 0xdc, 0x14, - 0xfd, 0x4b, 0xf6, 0x7a, 0xf3, 0x07, 0x65, 0xc2, - 0xae, 0x2b, 0x84, 0x6a, 0x4d, 0x23, 0xa8, 0xcd, - 0x0d, 0xb8, 0x97, 0x08, 0x62, 0x39, 0x49, 0x2c, - 0xaf, 0x35, 0x0b, 0x51, 0xf8, 0x33, 0x86, 0x8b, - 0x9b, 0xc2, 0xb3, 0xbc, 0xa9, 0xcf, 0x41, 0x13 - }; - - /* Expected result after 1000 iterations */ - static const unsigned char expected_1000[56] = { - 0xaa, 0x3b, 0x47, 0x49, 0xd5, 0x5b, 0x9d, 0xaf, - 0x1e, 0x5b, 0x00, 0x28, 0x88, 0x26, 0xc4, 0x67, - 0x27, 0x4c, 0xe3, 0xeb, 0xbd, 0xd5, 0xc1, 0x7b, - 0x97, 0x5e, 0x09, 0xd4, 0xaf, 0x6c, 0x67, 0xcf, - 0x10, 0xd0, 0x87, 0x20, 0x2d, 0xb8, 0x82, 0x86, - 0xe2, 0xb7, 0x9f, 0xce, 0xea, 0x3e, 0xc3, 0x53, - 0xef, 0x54, 0xfa, 0xa2, 0x6e, 0x21, 0x9f, 0x38 - }; - - unsigned char k[56], u[56], out[56], tmp[56]; - unsigned long i; - - /* k = u = 5 (little-endian) */ - XMEMSET(k, 0, 56); - XMEMSET(u, 0, 56); - k[0] = 5; - u[0] = 5; - - /* 1 iteration */ - ec448_scalarmult_internal(out, k, u); - XMEMCPY(u, k, 56); - XMEMCPY(k, out, 56); - COMPARE_TESTVECTOR(k, 56, expected_1, 56, "X448 RFC7748 iter=1", 0); - - /* Continue to 1000 iterations (we already did 1) */ - for (i = 1; i < 1000; i++) { - ec448_scalarmult_internal(out, k, u); - XMEMCPY(tmp, k, 56); - XMEMCPY(k, out, 56); - XMEMCPY(u, tmp, 56); - } - COMPARE_TESTVECTOR(k, 56, expected_1000, 56, "X448 RFC7748 iter=1000", 1); - - return CRYPT_OK; -} - -static int s_x448_keygen_dh_test(void) -{ - curve448_key alice, bob; - unsigned char ss_a[56], ss_b[56]; - unsigned long sslen; - int prng_idx; - - prng_idx = find_prng("yarrow"); - - /* Generate two key pairs */ - DO(x448_make_key(&yarrow_prng, prng_idx, &alice)); - DO(x448_make_key(&yarrow_prng, prng_idx, &bob)); - ENSURE(alice.type == PK_PRIVATE); - ENSURE(alice.pka == LTC_PKA_X448); - - /* DH: both sides compute the same shared secret */ - sslen = sizeof(ss_a); - DO(x448_shared_secret(&alice, &bob, ss_a, &sslen)); - ENSURE(sslen == 56); - - sslen = sizeof(ss_b); - DO(x448_shared_secret(&bob, &alice, ss_b, &sslen)); - ENSURE(sslen == 56); - - COMPARE_TESTVECTOR(ss_a, 56, ss_b, 56, "X448 DH shared secret", 0); - - /* Export/import raw round-trip */ - { - curve448_key imported; - unsigned char buf[56]; - unsigned long buflen = sizeof(buf); - - DO(x448_export(buf, &buflen, PK_PUBLIC, &alice)); - ENSURE(buflen == 56); - DO(x448_import_raw(buf, buflen, PK_PUBLIC, &imported)); - ENSURE(imported.type == PK_PUBLIC); - ENSURE(imported.pka == LTC_PKA_X448); - COMPARE_TESTVECTOR(imported.pub, 56, alice.pub, 56, "X448 import_raw pub", 0); - } - - return CRYPT_OK; -} - -/* Wycheproof x448_test.json tcId=22 (Twist + SpecialPublicKey) */ -static int s_x448_wycheproof_special_test(void) -{ - const char *priv_hex = "8c37fb35eac1dbda6a3b5bf492c1f642c761be3adf0ab7617a66002576c45bba8202970bae6c5e05f645f5439ca2f42b89dacace1a5d0e82"; - const char *pub_hex = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040"; - const char *exp_hex = "60c468df97e2e4427f27420cc6bc9eebaa2bceb827eb55a187fc5c29555e72a663243f6af4095641d72caeacb369720ea18cadd6efdbece6"; - unsigned char priv[56], pub[56], expected[56], out[56]; - unsigned long len; - - len = sizeof(priv); DO(base16_decode(priv_hex, XSTRLEN(priv_hex), priv, &len)); - len = sizeof(pub); DO(base16_decode(pub_hex, XSTRLEN(pub_hex), pub, &len)); - len = sizeof(expected); DO(base16_decode(exp_hex, XSTRLEN(exp_hex), expected, &len)); - ec448_scalarmult_internal(out, priv, pub); - COMPARE_TESTVECTOR(out, 56, expected, 56, "X448 Wycheproof tcId=22", 22); - return CRYPT_OK; -} - -/* Export/import round-trip (requires MPI for DER/PKCS8) */ -static int s_x448_compat_test(void) -{ - curve448_key priv, pub, imported; - unsigned char buf[1024]; - unsigned long buflen; - int prng_idx = find_prng("yarrow"); - - XMEMSET(&priv, 0, sizeof(priv)); - XMEMSET(&pub, 0, sizeof(pub)); - XMEMSET(&imported, 0, sizeof(imported)); - - DO(x448_make_key(&yarrow_prng, prng_idx, &priv)); - - /* private PKCS#8 export -> import */ - buflen = sizeof(buf); - DO(x448_export(buf, &buflen, PK_PRIVATE | PK_STD, &priv)); - DO(x448_import_pkcs8(buf, buflen, NULL, &imported)); - COMPARE_TESTVECTOR(&priv, sizeof(priv), &imported, sizeof(imported), "X448 priv pkcs8 round-trip", __LINE__); - XMEMSET(&imported, 0, sizeof(imported)); - - /* public raw export -> import */ - buflen = sizeof(buf); - DO(x448_export(buf, &buflen, PK_PUBLIC, &priv)); - DO(x448_import_raw(buf, buflen, PK_PUBLIC, &pub)); - - /* public DER export -> import */ - buflen = sizeof(buf); - DO(x448_export(buf, &buflen, PK_PUBLIC | PK_STD, &priv)); - DO(x448_import(buf, buflen, &imported)); - COMPARE_TESTVECTOR(&pub, sizeof(pub), &imported, sizeof(imported), "X448 pub DER round-trip", __LINE__); - - return CRYPT_OK; -} - -static int s_x448_zero_shared_secret_test(void) -{ - curve448_key alice, bob, zero_pub; - unsigned char shared[56], zeros[56]; - unsigned long len; - int prng_idx = find_prng("yarrow"); - - zeromem(zeros, sizeof(zeros)); - - DO(x448_make_key(&yarrow_prng, prng_idx, &alice)); - DO(x448_make_key(&yarrow_prng, prng_idx, &bob)); - - len = sizeof(shared); - DO(x448_shared_secret(&alice, &bob, shared, &len)); - ENSURE(len == sizeof(shared)); - - DO(x448_import_raw(zeros, sizeof(zeros), PK_PUBLIC, &zero_pub)); - - len = sizeof(shared); - SHOULD_FAIL_WITH(x448_shared_secret(&alice, &zero_pub, shared, &len), CRYPT_INVALID_PACKET); - - return CRYPT_OK; -} - -int x448_test(void) -{ - DO(s_x448_rfc7748_scalarmult_test()); - DO(s_x448_rfc7748_iter_test()); - DO(s_x448_keygen_dh_test()); - DO(s_x448_wycheproof_special_test()); - DO(s_x448_zero_shared_secret_test()); - return CRYPT_OK; -} - -int x448_mpi_test(void) -{ - if (ltc_mp.name == NULL) return CRYPT_NOP; - DO(s_x448_compat_test()); - return CRYPT_OK; -} - -#else -LTC_NOP_TEST(x448_test) -LTC_NOP_TEST(x448_mpi_test) -#endif diff --git a/src/hashes/tiger.c b/tiger.c similarity index 86% rename from src/hashes/tiger.c rename to tiger.c index c8b18dfe..06eb3840 100644 --- a/src/hashes/tiger.c +++ b/tiger.c @@ -1,49 +1,35 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ -#include "tomcrypt_private.h" +#include "mycrypt.h" -/** - @file tiger.c - Tiger hash function, Tom St Denis -*/ +#ifdef TIGER -#ifdef LTC_TIGER - -const struct ltc_hash_descriptor tiger_desc = +const struct _hash_descriptor tiger_desc = { "tiger", 1, 24, 64, - /* OID */ - { 1, 3, 6, 1, 4, 1, 11591, 12, 2, }, - 9, + /* DER identifier */ + { 0x30, 0x29, 0x30, 0x0D, 0x06, 0x09, 0x2B, 0x06, + 0x01, 0x04, 0x01, 0xDA, 0x47, 0x0C, 0x02, 0x05, + 0x00, 0x04, 0x18 }, + 19, &tiger_init, &tiger_process, &tiger_done, - &tiger_test, - NULL -}; - -const struct ltc_hash_descriptor tiger2_desc = -{ - "tiger2", - 33, - 24, - 64, - - /* OID ... does not exist */ - { 0 }, - 0, - - &tiger2_init, - &tiger_process, - &tiger_done, - &tiger2_test, - NULL + &tiger_test }; #define t1 (table) @@ -565,13 +551,19 @@ static const ulong64 table[4*256] = { CONST64(0xCD56D9430EA8280E) /* 1020 */, CONST64(0xC12591D7535F5065) /* 1021 */, CONST64(0xC83223F1720AEF96) /* 1022 */, CONST64(0xC3A0396F7363A51F) /* 1023 */}; +#ifdef _MSC_VER + #define INLINE __inline +#else + #define INLINE +#endif + /* one round of the hash function */ -static LTC_INLINE void s_tiger_round(ulong64 *a, ulong64 *b, ulong64 *c, ulong64 x, int mul) +INLINE static void tiger_round(ulong64 *a, ulong64 *b, ulong64 *c, ulong64 x, int mul) { ulong64 tmp; - tmp = (*c ^= x); - *a -= t1[LTC_BYTE(tmp, 0)] ^ t2[LTC_BYTE(tmp, 2)] ^ t3[LTC_BYTE(tmp, 4)] ^ t4[LTC_BYTE(tmp, 6)]; - tmp = (*b += t4[LTC_BYTE(tmp, 1)] ^ t3[LTC_BYTE(tmp, 3)] ^ t2[LTC_BYTE(tmp,5)] ^ t1[LTC_BYTE(tmp,7)]); + tmp = (*c ^= x); + *a -= t1[byte(tmp, 0)] ^ t2[byte(tmp, 2)] ^ t3[byte(tmp, 4)] ^ t4[byte(tmp, 6)]; + tmp = (*b += t4[byte(tmp, 1)] ^ t3[byte(tmp, 3)] ^ t2[byte(tmp,5)] ^ t1[byte(tmp,7)]); switch (mul) { case 5: *b = (tmp << 2) + tmp; break; case 7: *b = (tmp << 3) - tmp; break; @@ -580,46 +572,46 @@ static LTC_INLINE void s_tiger_round(ulong64 *a, ulong64 *b, ulong64 *c, ulong64 } /* one complete pass */ -static void s_pass(ulong64 *a, ulong64 *b, ulong64 *c, const ulong64 *x, int mul) +static void pass(ulong64 *a, ulong64 *b, ulong64 *c, ulong64 *x, int mul) { - s_tiger_round(a,b,c,x[0],mul); - s_tiger_round(b,c,a,x[1],mul); - s_tiger_round(c,a,b,x[2],mul); - s_tiger_round(a,b,c,x[3],mul); - s_tiger_round(b,c,a,x[4],mul); - s_tiger_round(c,a,b,x[5],mul); - s_tiger_round(a,b,c,x[6],mul); - s_tiger_round(b,c,a,x[7],mul); -} + tiger_round(a,b,c,x[0],mul); + tiger_round(b,c,a,x[1],mul); + tiger_round(c,a,b,x[2],mul); + tiger_round(a,b,c,x[3],mul); + tiger_round(b,c,a,x[4],mul); + tiger_round(c,a,b,x[5],mul); + tiger_round(a,b,c,x[6],mul); + tiger_round(b,c,a,x[7],mul); +} /* The key mixing schedule */ -static void s_key_schedule(ulong64 *x) +static void key_schedule(ulong64 *x) { - x[0] -= x[7] ^ CONST64(0xA5A5A5A5A5A5A5A5); - x[1] ^= x[0]; - x[2] += x[1]; - x[3] -= x[2] ^ ((~x[1])<<19); - x[4] ^= x[3]; - x[5] += x[4]; - x[6] -= x[5] ^ ((~x[4])>>23); - x[7] ^= x[6]; - x[0] += x[7]; - x[1] -= x[0] ^ ((~x[7])<<19); - x[2] ^= x[1]; - x[3] += x[2]; - x[4] -= x[3] ^ ((~x[2])>>23); - x[5] ^= x[4]; - x[6] += x[5]; + x[0] -= x[7] ^ CONST64(0xA5A5A5A5A5A5A5A5); + x[1] ^= x[0]; + x[2] += x[1]; + x[3] -= x[2] ^ ((~x[1])<<19); + x[4] ^= x[3]; + x[5] += x[4]; + x[6] -= x[5] ^ ((~x[4])>>23); + x[7] ^= x[6]; + x[0] += x[7]; + x[1] -= x[0] ^ ((~x[7])<<19); + x[2] ^= x[1]; + x[3] += x[2]; + x[4] -= x[3] ^ ((~x[2])>>23); + x[5] ^= x[4]; + x[6] += x[5]; x[7] -= x[6] ^ CONST64(0x0123456789ABCDEF); -} +} -#ifdef LTC_CLEAN_STACK -static int ss_tiger_compress(hash_state *md, const unsigned char *buf) +#ifdef CLEAN_STACK +static void _tiger_compress(hash_state *md, unsigned char *buf) #else -static int s_tiger_compress(hash_state *md, const unsigned char *buf) +static void tiger_compress(hash_state *md, unsigned char *buf) #endif { - ulong64 a, b, c, x[8], t; + ulong64 a, b, c, x[8]; unsigned long i; /* load words */ @@ -630,121 +622,42 @@ static int s_tiger_compress(hash_state *md, const unsigned char *buf) b = md->tiger.state[1]; c = md->tiger.state[2]; - s_pass(&a,&b,&c,x,5); - s_key_schedule(x); - s_pass(&c,&a,&b,x,7); - s_key_schedule(x); - s_pass(&b,&c,&a,x,9); - for (i = 3; i < md->tiger.passes; ++i) { - s_key_schedule(x); - s_pass(&a,&b,&c,x,9); - t = a; a = c; c = b; b = t; - } + pass(&a,&b,&c,x,5); + key_schedule(x); + pass(&c,&a,&b,x,7); + key_schedule(x); + pass(&b,&c,&a,x,9); /* store state */ md->tiger.state[0] = a ^ md->tiger.state[0]; md->tiger.state[1] = b - md->tiger.state[1]; md->tiger.state[2] = c + md->tiger.state[2]; - - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -static int s_tiger_compress(hash_state *md, const unsigned char *buf) +#ifdef CLEAN_STACK +static void tiger_compress(hash_state *md, unsigned char *buf) { - int err; - err = ss_tiger_compress(md, buf); + _tiger_compress(md, buf); burn_stack(sizeof(ulong64) * 11 + sizeof(unsigned long)); - return err; } #endif -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int tiger_init(hash_state *md) +void tiger_init(hash_state *md) { - LTC_ARGCHK(md != NULL); + _ARGCHK(md != NULL); md->tiger.state[0] = CONST64(0x0123456789ABCDEF); md->tiger.state[1] = CONST64(0xFEDCBA9876543210); md->tiger.state[2] = CONST64(0xF096A5B4C3B2E187); md->tiger.curlen = 0; md->tiger.length = 0; - md->tiger.passes = 3; - md->tiger.pad = 0x01u; - return CRYPT_OK; } -/** - Initialize the hash state (extended version) - @param md The hash state you wish to initialize - @param passes The number of passes that should be executed - when the compress function is called. - @return CRYPT_OK if successful -*/ -int tiger_init_ex(hash_state *md, unsigned long passes) -{ - int err; - if ((err = tiger_init(md) != CRYPT_OK)) { - return err; - } - md->tiger.passes = passes; - return CRYPT_OK; -} +HASH_PROCESS(tiger_process, tiger_compress, tiger, 64) -/** - Initialize the hash state (extended version) - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int tiger2_init(hash_state *md) +int tiger_done(hash_state * md, unsigned char *hash) { - int err; - if ((err = tiger_init(md) != CRYPT_OK)) { - return err; - } - md->tiger.pad = 0x80u; - return CRYPT_OK; -} - -/** - Initialize the hash state (extended version) - @param md The hash state you wish to initialize - @param passes The number of passes that should be executed - when the compress function is called. - @return CRYPT_OK if successful -*/ -int tiger2_init_ex(hash_state *md, unsigned long passes) -{ - int err; - if ((err = tiger2_init(md) != CRYPT_OK)) { - return err; - } - md->tiger.passes = passes; - return CRYPT_OK; -} - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(tiger_process, s_tiger_compress, tiger, 64) - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (24 bytes) - @return CRYPT_OK if successful -*/ -int tiger_done(hash_state * md, unsigned char *out) -{ - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); + _ARGCHK(md != NULL); + _ARGCHK(hash != NULL); if (md->tiger.curlen >= sizeof(md->tiger.buf)) { return CRYPT_INVALID_ARG; @@ -753,8 +666,8 @@ int tiger_done(hash_state * md, unsigned char *out) /* increase the length of the message */ md->tiger.length += md->tiger.curlen * 8; - /* append the padding bit */ - md->tiger.buf[md->tiger.curlen++] = md->tiger.pad; + /* append the '1' bit */ + md->tiger.buf[md->tiger.curlen++] = (unsigned char)0x01; /* if the length is currently above 56 bytes we append zeros * then compress. Then we can fall back to padding zeros and length @@ -763,106 +676,75 @@ int tiger_done(hash_state * md, unsigned char *out) while (md->tiger.curlen < 64) { md->tiger.buf[md->tiger.curlen++] = (unsigned char)0; } - s_tiger_compress(md, md->tiger.buf); + tiger_compress(md, md->tiger.buf); md->tiger.curlen = 0; } /* pad upto 56 bytes of zeroes */ while (md->tiger.curlen < 56) { - md->tiger.buf[md->tiger.curlen++] = (unsigned char)0; + md->tiger.buf[md->tiger.curlen++] = (unsigned char)0; } /* store length */ STORE64L(md->tiger.length, md->tiger.buf+56); - s_tiger_compress(md, md->tiger.buf); + tiger_compress(md, md->tiger.buf); /* copy output */ - STORE64L(md->tiger.state[0], &out[0]); - STORE64L(md->tiger.state[1], &out[8]); - STORE64L(md->tiger.state[2], &out[16]); -#ifdef LTC_CLEAN_STACK + STORE64L(md->tiger.state[0], &hash[0]); + STORE64L(md->tiger.state[1], &hash[8]); + STORE64L(md->tiger.state[2], &hash[16]); +#ifdef CLEAN_STACK zeromem(md, sizeof(hash_state)); #endif return CRYPT_OK; } -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -static int s_tiger_test(unsigned int idx) +int tiger_test(void) { #ifndef LTC_TEST - LTC_UNUSED_PARAM(idx); return CRYPT_NOP; - #else + #else static const struct { - const char *msg; - unsigned char hash[2][24]; + char *msg; + unsigned char hash[24]; } tests[] = { { "", - { - { 0x32, 0x93, 0xac, 0x63, 0x0c, 0x13, 0xf0, 0x24, - 0x5f, 0x92, 0xbb, 0xb1, 0x76, 0x6e, 0x16, 0x16, - 0x7a, 0x4e, 0x58, 0x49, 0x2d, 0xde, 0x73, 0xf3 }, - { 0x44, 0x41, 0xbe, 0x75, 0xf6, 0x01, 0x87, 0x73, - 0xc2, 0x06, 0xc2, 0x27, 0x45, 0x37, 0x4b, 0x92, - 0x4a, 0xa8, 0x31, 0x3f, 0xef, 0x91, 0x9f, 0x41 }, - }, + { 0x32, 0x93, 0xac, 0x63, 0x0c, 0x13, 0xf0, 0x24, + 0x5f, 0x92, 0xbb, 0xb1, 0x76, 0x6e, 0x16, 0x16, + 0x7a, 0x4e, 0x58, 0x49, 0x2d, 0xde, 0x73, 0xf3 } }, { "abc", - { - { 0x2a, 0xab, 0x14, 0x84, 0xe8, 0xc1, 0x58, 0xf2, - 0xbf, 0xb8, 0xc5, 0xff, 0x41, 0xb5, 0x7a, 0x52, - 0x51, 0x29, 0x13, 0x1c, 0x95, 0x7b, 0x5f, 0x93 }, - { 0xf6, 0x8d, 0x7b, 0xc5, 0xaf, 0x4b, 0x43, 0xa0, - 0x6e, 0x04, 0x8d, 0x78, 0x29, 0x56, 0x0d, 0x4a, - 0x94, 0x15, 0x65, 0x8b, 0xb0, 0xb1, 0xf3, 0xbf }, - }, + { 0x2a, 0xab, 0x14, 0x84, 0xe8, 0xc1, 0x58, 0xf2, + 0xbf, 0xb8, 0xc5, 0xff, 0x41, 0xb5, 0x7a, 0x52, + 0x51, 0x29, 0x13, 0x1c, 0x95, 0x7b, 0x5f, 0x93 } }, { "Tiger", - { - { 0xdd, 0x00, 0x23, 0x07, 0x99, 0xf5, 0x00, 0x9f, - 0xec, 0x6d, 0xeb, 0xc8, 0x38, 0xbb, 0x6a, 0x27, - 0xdf, 0x2b, 0x9d, 0x6f, 0x11, 0x0c, 0x79, 0x37 }, - { 0xfe, 0x40, 0x79, 0x8b, 0x8e, 0xb9, 0x37, 0xfd, - 0x97, 0x76, 0x08, 0x93, 0x05, 0x48, 0xd6, 0xa8, - 0x94, 0xc2, 0x0b, 0x04, 0xcb, 0xef, 0x7a, 0x42 }, - }, + { 0xdd, 0x00, 0x23, 0x07, 0x99, 0xf5, 0x00, 0x9f, + 0xec, 0x6d, 0xeb, 0xc8, 0x38, 0xbb, 0x6a, 0x27, + 0xdf, 0x2b, 0x9d, 0x6f, 0x11, 0x0c, 0x79, 0x37 } }, { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-", - { - { 0xf7, 0x1c, 0x85, 0x83, 0x90, 0x2a, 0xfb, 0x87, - 0x9e, 0xdf, 0xe6, 0x10, 0xf8, 0x2c, 0x0d, 0x47, - 0x86, 0xa3, 0xa5, 0x34, 0x50, 0x44, 0x86, 0xb5 }, - { 0x15, 0x9b, 0x38, 0x0a, 0xb7, 0x92, 0x94, 0xe0, - 0xda, 0x19, 0xf1, 0x62, 0x82, 0xce, 0x6d, 0xce, - 0x0f, 0x84, 0xd3, 0x4f, 0x72, 0x9d, 0xbe, 0xa3 }, - }, + { 0xf7, 0x1c, 0x85, 0x83, 0x90, 0x2a, 0xfb, 0x87, + 0x9e, 0xdf, 0xe6, 0x10, 0xf8, 0x2c, 0x0d, 0x47, + 0x86, 0xa3, 0xa5, 0x34, 0x50, 0x44, 0x86, 0xb5 } }, { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-", - { - { 0xc5, 0x40, 0x34, 0xe5, 0xb4, 0x3e, 0xb8, 0x00, - 0x58, 0x48, 0xa7, 0xe0, 0xae, 0x6a, 0xac, 0x76, - 0xe4, 0xff, 0x59, 0x0a, 0xe7, 0x15, 0xfd, 0x25 }, - { 0x01, 0xef, 0x91, 0x0b, 0x9b, 0xb2, 0xcb, 0x4c, - 0x6c, 0x47, 0x49, 0x5c, 0x86, 0xb3, 0x64, 0x1a, - 0xff, 0x14, 0xfb, 0xf7, 0x79, 0x40, 0x9c, 0x0e }, - }, + { 0xc5, 0x40, 0x34, 0xe5, 0xb4, 0x3e, 0xb8, 0x00, + 0x58, 0x48, 0xa7, 0xe0, 0xae, 0x6a, 0xac, 0x76, + 0xe4, 0xff, 0x59, 0x0a, 0xe7, 0x15, 0xfd, 0x25 } }, }; - int (*init[2])(hash_state *hash) = { tiger_init, tiger2_init }; int i; unsigned char tmp[24]; hash_state md; for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { - init[idx](&md); - tiger_process(&md, (unsigned char *)tests[i].msg, (unsigned long)XSTRLEN(tests[i].msg)); + tiger_init(&md); + tiger_process(&md, (unsigned char *)tests[i].msg, (unsigned long)strlen(tests[i].msg)); tiger_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash[idx], sizeof(tests[i].hash[idx]), !idx ? "TIGER": "TIGER2", i)) { + if (memcmp(tmp, tests[i].hash, 24) != 0) { return CRYPT_FAIL_TESTVECTOR; } } @@ -870,29 +752,6 @@ static int s_tiger_test(unsigned int idx) #endif } -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int tiger_test(void) -{ - return s_tiger_test(0); -} - -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int tiger2_test(void) -{ - return s_tiger_test(1); -} - -#undef t1 -#undef t2 -#undef t3 -#undef t4 - #endif /* diff --git a/tim_exptmod.c b/tim_exptmod.c new file mode 100644 index 00000000..67fe4454 --- /dev/null +++ b/tim_exptmod.c @@ -0,0 +1,77 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +/* RSA Code by Tom St Denis */ +#include "mycrypt.h" + +#ifdef RSA_TIMING + +/* decrypts c into m */ +int tim_exptmod(prng_state *prng, int prng_idx, + mp_int *c, mp_int *e, mp_int *d, mp_int *n, mp_int *m) +{ + int err; + mp_int r, tmp, tmp2; + unsigned char *rtmp; + unsigned long rlen; + + _ARGCHK(c != NULL); + _ARGCHK(e != NULL); + _ARGCHK(d != NULL); + _ARGCHK(n != NULL); + _ARGCHK(m != NULL); + + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + + /* pick random r */ + rlen = mp_unsigned_bin_size(n); + rtmp = XMALLOC(rlen); + if (rtmp == NULL) { + return CRYPT_MEM; + } + + /* read in random value "r" */ + if (prng_descriptor[prng_idx].read(rtmp, rlen, prng) != rlen) { + XFREE(rtmp); + return CRYPT_ERROR_READPRNG; + } + + if ((err = mp_init_multi(&r, &tmp, &tmp2, NULL)) != MP_OKAY) { + XFREE(rtmp); + return mpi_to_ltc_error(err); + } + + /* read in r */ + if ((err = mp_read_unsigned_bin(&r, rtmp, rlen)) != MP_OKAY) { goto __ERR; } + + /* compute tmp = r^e */ + if ((err = mp_exptmod(&r, e, n, &tmp)) != MP_OKAY) { goto __ERR; } + + /* multiply C into the mix */ + if ((err = mp_mulmod(c, &tmp, n, &tmp)) != MP_OKAY) { goto __ERR; } + + /* raise to d */ + if ((err = mp_exptmod(&tmp, d, n, &tmp)) != MP_OKAY) { goto __ERR; } + + /* invert r and multiply */ + if ((err = mp_invmod(&r, n, &tmp2)) != MP_OKAY) { goto __ERR; } + + /* multiply and we are totally set */ + if ((err = mp_mulmod(&tmp, &tmp2, n, m)) != MP_OKAY) { goto __ERR; } + +__ERR: mp_clear_multi(&r, &tmp, &tmp2, NULL); + XFREE(rtmp); + return mpi_to_ltc_error(err); +} + +#endif diff --git a/src/ciphers/twofish/twofish.c b/twofish.c similarity index 59% rename from src/ciphers/twofish/twofish.c rename to twofish.c index 9fb6e24f..b618b985 100644 --- a/src/ciphers/twofish/twofish.c +++ b/twofish.c @@ -1,22 +1,27 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - - /** - @file twofish.c - Implementation of Twofish by Tom St Denis +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org */ -#include "tomcrypt_private.h" -#ifdef LTC_TWOFISH +/* Implementation of Twofish by Tom St Denis */ +#include "mycrypt.h" -/* first LTC_TWOFISH_ALL_TABLES must ensure LTC_TWOFISH_TABLES is defined */ -#ifdef LTC_TWOFISH_ALL_TABLES -#ifndef LTC_TWOFISH_TABLES -#define LTC_TWOFISH_TABLES +#ifdef TWOFISH + +/* first TWOFISH_ALL_TABLES must ensure TWOFISH_TABLES is defined */ +#ifdef TWOFISH_ALL_TABLES +#ifndef TWOFISH_TABLES +#define TWOFISH_TABLES #endif #endif -const struct ltc_cipher_descriptor twofish_desc = +const struct _cipher_descriptor twofish_desc = { "twofish", 7, @@ -25,18 +30,20 @@ const struct ltc_cipher_descriptor twofish_desc = &twofish_ecb_encrypt, &twofish_ecb_decrypt, &twofish_test, - &twofish_done, - &twofish_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + &twofish_keysize }; /* the two polynomials */ -#ifndef LTC_TWOFISH_TABLES #define MDS_POLY 0x169 -#endif -#ifndef LTC_TWOFISH_ALL_TABLES #define RS_POLY 0x14D -#endif + +/* The 4x4 MDS Linear Transform */ +static const unsigned char MDS[4][4] = { + { 0x01, 0xEF, 0x5B, 0x5B }, + { 0x5B, 0xEF, 0xEF, 0x01 }, + { 0xEF, 0x5B, 0x01, 0xEF }, + { 0xEF, 0x01, 0xEF, 0x5B } +}; /* The 4x8 RS Linear Transform */ static const unsigned char RS[4][8] = { @@ -46,7 +53,6 @@ static const unsigned char RS[4][8] = { { 0XA4, 0X55, 0X87, 0X5A, 0X58, 0XDB, 0X9E, 0X03 } }; -#ifdef LTC_TWOFISH_SMALL /* sbox usage orderings */ static const unsigned char qord[4][5] = { { 1, 1, 0, 0, 1 }, @@ -54,16 +60,12 @@ static const unsigned char qord[4][5] = { { 0, 0, 0, 1, 1 }, { 1, 0, 1, 1, 0 } }; -#endif /* LTC_TWOFISH_SMALL */ -#define sbox s_twofish_sbox +#ifdef TWOFISH_TABLES -#ifdef LTC_TWOFISH_TABLES - -#define LTC_TWOFISH_TAB_C #include "twofish_tab.c" -#define s_twofish_sbox(i, x) ((ulong32)SBOX[i][(x)&255]) +#define sbox(i, x) ((ulong32)SBOX[i][(x)&255]) #else @@ -84,8 +86,8 @@ static const unsigned char qbox[2][4][16] = { }; /* computes S_i[x] */ -#ifdef LTC_CLEAN_STACK -static ulong32 s_sbox(int i, ulong32 x) +#ifdef CLEAN_STACK +static ulong32 _sbox(int i, ulong32 x) #else static ulong32 sbox(int i, ulong32 x) #endif @@ -123,17 +125,17 @@ static ulong32 sbox(int i, ulong32 x) return (ulong32)y; } -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK static ulong32 sbox(int i, ulong32 x) { ulong32 y; - y = s_sbox(i, x); + y = _sbox(i, x); burn_stack(sizeof(unsigned char) * 11); return y; } -#endif /* LTC_CLEAN_STACK */ +#endif /* CLEAN_STACK */ -#endif /* LTC_TWOFISH_TABLES */ +#endif /* TWOFISH_TABLES */ /* computes ab mod p */ static ulong32 gf_mult(ulong32 a, ulong32 b, ulong32 p) @@ -145,20 +147,20 @@ static ulong32 gf_mult(ulong32 a, ulong32 b, ulong32 p) result = P[0] = B[0] = 0; /* unrolled branchless GF multiplier */ - result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); - result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); - result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); - result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); - result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); - result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); - result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); - result ^= B[a&1]; + result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); + result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); + result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); + result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); + result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); + result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); + result ^= B[a&1]; a >>= 1; B[1] = P[B[1]>>7] ^ (B[1] << 1); + result ^= B[a&1]; return result; } /* computes [y0 y1 y2 y3] = MDS . [x0] */ -#ifndef LTC_TWOFISH_TABLES +#ifndef TWOFISH_TABLES static ulong32 mds_column_mult(unsigned char in, int col) { ulong32 x01, x5B, xEF; @@ -193,11 +195,11 @@ static ulong32 mds_column_mult(unsigned char in, int col) return 0; } -#else /* !LTC_TWOFISH_TABLES */ +#else /* !TWOFISH_TABLES */ #define mds_column_mult(x, i) mds_tab[i][x] -#endif /* LTC_TWOFISH_TABLES */ +#endif /* TWOFISH_TABLES */ /* Computes [y0 y1 y2 y3] = MDS . [x0 x1 x2 x3] */ static void mds_mult(const unsigned char *in, unsigned char *out) @@ -210,7 +212,7 @@ static void mds_mult(const unsigned char *in, unsigned char *out) STORE32L(tmp, out); } -#ifdef LTC_TWOFISH_ALL_TABLES +#ifdef TWOFISH_ALL_TABLES /* computes [y0 y1 y2 y3] = RS . [x0 x1 x2 x3 x4 x5 x6 x7] */ static void rs_mult(const unsigned char *in, unsigned char *out) { @@ -220,7 +222,7 @@ static void rs_mult(const unsigned char *in, unsigned char *out) STORE32L(tmp, out); } -#else /* !LTC_TWOFISH_ALL_TABLES */ +#else /* !TWOFISH_ALL_TABLES */ /* computes [y0 y1 y2 y3] = RS . [x0 x1 x2 x3 x4 x5 x6 x7] */ static void rs_mult(const unsigned char *in, unsigned char *out) @@ -237,60 +239,53 @@ static void rs_mult(const unsigned char *in, unsigned char *out) #endif /* computes h(x) */ -static void h_func(const unsigned char *in, unsigned char *out, const unsigned char *M, int k, int offset) +static void h_func(const unsigned char *in, unsigned char *out, unsigned char *M, int k, int offset) { int x; unsigned char y[4]; for (x = 0; x < 4; x++) { y[x] = in[x]; - } + } switch (k) { case 4: y[0] = (unsigned char)(sbox(1, (ulong32)y[0]) ^ M[4 * (6 + offset) + 0]); y[1] = (unsigned char)(sbox(0, (ulong32)y[1]) ^ M[4 * (6 + offset) + 1]); y[2] = (unsigned char)(sbox(0, (ulong32)y[2]) ^ M[4 * (6 + offset) + 2]); y[3] = (unsigned char)(sbox(1, (ulong32)y[3]) ^ M[4 * (6 + offset) + 3]); - LTC_FALLTHROUGH; /* FALLTHROUGH */ case 3: y[0] = (unsigned char)(sbox(1, (ulong32)y[0]) ^ M[4 * (4 + offset) + 0]); y[1] = (unsigned char)(sbox(1, (ulong32)y[1]) ^ M[4 * (4 + offset) + 1]); y[2] = (unsigned char)(sbox(0, (ulong32)y[2]) ^ M[4 * (4 + offset) + 2]); y[3] = (unsigned char)(sbox(0, (ulong32)y[3]) ^ M[4 * (4 + offset) + 3]); - LTC_FALLTHROUGH; /* FALLTHROUGH */ case 2: y[0] = (unsigned char)(sbox(1, sbox(0, sbox(0, (ulong32)y[0]) ^ M[4 * (2 + offset) + 0]) ^ M[4 * (0 + offset) + 0])); y[1] = (unsigned char)(sbox(0, sbox(0, sbox(1, (ulong32)y[1]) ^ M[4 * (2 + offset) + 1]) ^ M[4 * (0 + offset) + 1])); y[2] = (unsigned char)(sbox(1, sbox(1, sbox(0, (ulong32)y[2]) ^ M[4 * (2 + offset) + 2]) ^ M[4 * (0 + offset) + 2])); y[3] = (unsigned char)(sbox(0, sbox(1, sbox(1, (ulong32)y[3]) ^ M[4 * (2 + offset) + 3]) ^ M[4 * (0 + offset) + 3])); - break; } mds_mult(y, out); } -#ifndef LTC_TWOFISH_SMALL +#ifndef TWOFISH_SMALL /* for GCC we don't use pointer aliases */ #if defined(__GNUC__) - #define S1 skey->twofish.S[0] - #define S2 skey->twofish.S[1] - #define S3 skey->twofish.S[2] - #define S4 skey->twofish.S[3] + #define S1 key->twofish.S[0] + #define S2 key->twofish.S[1] + #define S3 key->twofish.S[2] + #define S4 key->twofish.S[3] #endif /* the G function */ -#define s_twofish_g_func(x, dum) (S1[LTC_BYTE(x,0)] ^ S2[LTC_BYTE(x,1)] ^ S3[LTC_BYTE(x,2)] ^ S4[LTC_BYTE(x,3)]) -#define s_twofish_g1_func(x, dum) (S2[LTC_BYTE(x,0)] ^ S3[LTC_BYTE(x,1)] ^ S4[LTC_BYTE(x,2)] ^ S1[LTC_BYTE(x,3)]) -#define g_func s_twofish_g_func -#define g1_func s_twofish_g1_func +#define g_func(x, dum) (S1[byte(x,0)] ^ S2[byte(x,1)] ^ S3[byte(x,2)] ^ S4[byte(x,3)]) +#define g1_func(x, dum) (S2[byte(x,0)] ^ S3[byte(x,1)] ^ S4[byte(x,2)] ^ S1[byte(x,3)]) #else -#define g_func s_twofish_g_func - -#ifdef LTC_CLEAN_STACK -static ulong32 s_g_func(ulong32 x, const symmetric_key *key) +#ifdef CLEAN_STACK +static ulong32 _g_func(ulong32 x, symmetric_key *key) #else -static ulong32 g_func(ulong32 x, const symmetric_key *key) +static ulong32 g_func(ulong32 x, symmetric_key *key) #endif { unsigned char g, i, y, z; @@ -318,43 +313,35 @@ static ulong32 g_func(ulong32 x, const symmetric_key *key) return res; } -#define g1_func(x, key) g_func(ROLc(x, 8), key) +#define g1_func(x, key) g_func(ROL(x, 8), key) -#ifdef LTC_CLEAN_STACK -static ulong32 g_func(ulong32 x, const symmetric_key *key) +#ifdef CLEAN_STACK +static ulong32 g_func(ulong32 x, symmetric_key *key) { ulong32 y; - y = s_g_func(x, key); + y = _g_func(x, key); burn_stack(sizeof(unsigned char) * 4 + sizeof(ulong32)); return y; } -#endif /* LTC_CLEAN_STACK */ +#endif /* CLEAN_STACK */ -#endif /* LTC_TWOFISH_SMALL */ +#endif /* TWOFISH_SMALL */ - /** - Initialize the Twofish block cipher - @param key The symmetric key you wish to pass - @param keylen The key length in bytes - @param num_rounds The number of rounds desired (0 for default) - @param skey The key in as scheduled by this function. - @return CRYPT_OK if successful - */ -#ifdef LTC_CLEAN_STACK -static int s_twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) +#ifdef CLEAN_STACK +static int _twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) #else int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) #endif { -#ifndef LTC_TWOFISH_SMALL +#ifndef TWOFISH_SMALL unsigned char S[4*4], tmpx0, tmpx1; #endif int k, x, y; unsigned char tmp[4], tmp2[4], M[8*4]; ulong32 A, B; - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(skey != NULL); + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); /* invalid arguments? */ if (num_rounds != 16 && num_rounds != 0) { @@ -374,7 +361,7 @@ int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetri } /* create the S[..] words */ -#ifndef LTC_TWOFISH_SMALL +#ifndef TWOFISH_SMALL for (x = 0; x < k; x++) { rs_mult(M+(x*8), S+(x*4)); } @@ -399,21 +386,21 @@ int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetri } h_func(tmp, tmp2, M, k, 1); LOAD32L(B, tmp2); - B = ROLc(B, 8); + B = ROL(B, 8); /* K[2i] = A + B */ skey->twofish.K[x+x] = (A + B) & 0xFFFFFFFFUL; /* K[2i+1] = (A + 2B) <<< 9 */ - skey->twofish.K[x+x+1] = ROLc(B + B + A, 9); + skey->twofish.K[x+x+1] = ROL(B + B + A, 9); } -#ifndef LTC_TWOFISH_SMALL +#ifndef TWOFISH_SMALL /* make the sboxes (large ram variant) */ if (k == 2) { for (x = 0; x < 256; x++) { - tmpx0 = (unsigned char)sbox(0, x); - tmpx1 = (unsigned char)sbox(1, x); + tmpx0 = sbox(0, x); + tmpx1 = sbox(1, x); skey->twofish.S[0][x] = mds_column_mult(sbox(1, (sbox(0, tmpx0 ^ S[0]) ^ S[4])),0); skey->twofish.S[1][x] = mds_column_mult(sbox(0, (sbox(0, tmpx1 ^ S[1]) ^ S[5])),1); skey->twofish.S[2][x] = mds_column_mult(sbox(1, (sbox(1, tmpx0 ^ S[2]) ^ S[6])),2); @@ -421,8 +408,8 @@ int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetri } } else if (k == 3) { for (x = 0; x < 256; x++) { - tmpx0 = (unsigned char)sbox(0, x); - tmpx1 = (unsigned char)sbox(1, x); + tmpx0 = sbox(0, x); + tmpx1 = sbox(1, x); skey->twofish.S[0][x] = mds_column_mult(sbox(1, (sbox(0, sbox(0, tmpx1 ^ S[0]) ^ S[4]) ^ S[8])),0); skey->twofish.S[1][x] = mds_column_mult(sbox(0, (sbox(0, sbox(1, tmpx1 ^ S[1]) ^ S[5]) ^ S[9])),1); skey->twofish.S[2][x] = mds_column_mult(sbox(1, (sbox(1, sbox(0, tmpx0 ^ S[2]) ^ S[6]) ^ S[10])),2); @@ -430,8 +417,8 @@ int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetri } } else { for (x = 0; x < 256; x++) { - tmpx0 = (unsigned char)sbox(0, x); - tmpx1 = (unsigned char)sbox(1, x); + tmpx0 = sbox(0, x); + tmpx1 = sbox(1, x); skey->twofish.S[0][x] = mds_column_mult(sbox(1, (sbox(0, sbox(0, sbox(1, tmpx1 ^ S[0]) ^ S[4]) ^ S[8]) ^ S[12])),0); skey->twofish.S[1][x] = mds_column_mult(sbox(0, (sbox(0, sbox(1, sbox(1, tmpx0 ^ S[1]) ^ S[5]) ^ S[9]) ^ S[13])),1); skey->twofish.S[2][x] = mds_column_mult(sbox(1, (sbox(1, sbox(0, sbox(0, tmpx0 ^ S[2]) ^ S[6]) ^ S[10]) ^ S[14])),2); @@ -443,183 +430,158 @@ int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetri /* small ram variant */ switch (k) { case 4 : skey->twofish.start = 0; break; - case 3 : skey->twofish.start = 1; break; + case 3 : skey->twofish.start = 1; break; default: skey->twofish.start = 2; break; } #endif return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { int x; - x = s_twofish_setup(key, keylen, num_rounds, skey); + x = _twofish_setup(key, keylen, num_rounds, skey); burn_stack(sizeof(int) * 7 + sizeof(unsigned char) * 56 + sizeof(ulong32) * 2); return x; } #endif -/** - Encrypts a block of text with Twofish - @param pt The input plaintext (16 bytes) - @param ct The output ciphertext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -#ifdef LTC_CLEAN_STACK -static int s_twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +#ifdef CLEAN_STACK +static void _twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) #else -int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +void twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) #endif { - ulong32 a,b,c,d,ta,tb,tc,td,t1,t2; - const ulong32 *k; + ulong32 a,b,c,d,ta,tb,tc,td,t1,t2, *k; int r; -#if !defined(LTC_TWOFISH_SMALL) && !defined(__GNUC__) - const ulong32 *S1, *S2, *S3, *S4; -#endif +#if !defined(TWOFISH_SMALL) && !defined(__GNUC__) + ulong32 *S1, *S2, *S3, *S4; +#endif - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - -#if !defined(LTC_TWOFISH_SMALL) && !defined(__GNUC__) - S1 = skey->twofish.S[0]; - S2 = skey->twofish.S[1]; - S3 = skey->twofish.S[2]; - S4 = skey->twofish.S[3]; -#endif + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(key != NULL); + +#if !defined(TWOFISH_SMALL) && !defined(__GNUC__) + S1 = key->twofish.S[0]; + S2 = key->twofish.S[1]; + S3 = key->twofish.S[2]; + S4 = key->twofish.S[3]; +#endif LOAD32L(a,&pt[0]); LOAD32L(b,&pt[4]); LOAD32L(c,&pt[8]); LOAD32L(d,&pt[12]); - a ^= skey->twofish.K[0]; - b ^= skey->twofish.K[1]; - c ^= skey->twofish.K[2]; - d ^= skey->twofish.K[3]; - - k = skey->twofish.K + 8; + a ^= key->twofish.K[0]; + b ^= key->twofish.K[1]; + c ^= key->twofish.K[2]; + d ^= key->twofish.K[3]; + + k = key->twofish.K + 8; for (r = 8; r != 0; --r) { - t2 = g1_func(b, skey); - t1 = g_func(a, skey) + t2; - c = RORc(c ^ (t1 + k[0]), 1); - d = ROLc(d, 1) ^ (t2 + t1 + k[1]); - - t2 = g1_func(d, skey); - t1 = g_func(c, skey) + t2; - a = RORc(a ^ (t1 + k[2]), 1); - b = ROLc(b, 1) ^ (t2 + t1 + k[3]); + t2 = g1_func(b, key); + t1 = g_func(a, key) + t2; + c = ROR(c ^ (t1 + k[0]), 1); + d = ROL(d, 1) ^ (t2 + t1 + k[1]); + + t2 = g1_func(d, key); + t1 = g_func(c, key) + t2; + a = ROR(a ^ (t1 + k[2]), 1); + b = ROL(b, 1) ^ (t2 + t1 + k[3]); k += 4; - } + } /* output with "undo last swap" */ - ta = c ^ skey->twofish.K[4]; - tb = d ^ skey->twofish.K[5]; - tc = a ^ skey->twofish.K[6]; - td = b ^ skey->twofish.K[7]; + ta = c ^ key->twofish.K[4]; + tb = d ^ key->twofish.K[5]; + tc = a ^ key->twofish.K[6]; + td = b ^ key->twofish.K[7]; /* store output */ STORE32L(ta,&ct[0]); STORE32L(tb,&ct[4]); STORE32L(tc,&ct[8]); STORE32L(td,&ct[12]); - - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +#ifdef CLEAN_STACK +void twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) { - int err = s_twofish_ecb_encrypt(pt, ct, skey); + _twofish_ecb_encrypt(pt, ct, key); burn_stack(sizeof(ulong32) * 10 + sizeof(int)); - return err; } #endif -/** - Decrypts a block of text with Twofish - @param ct The input ciphertext (16 bytes) - @param pt The output plaintext (16 bytes) - @param skey The key as scheduled - @return CRYPT_OK if successful -*/ -#ifdef LTC_CLEAN_STACK -static int s_twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +#ifdef CLEAN_STACK +static void _twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) #else -int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +void twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) #endif { - ulong32 a,b,c,d,ta,tb,tc,td,t1,t2; - const ulong32 *k; + ulong32 a,b,c,d,ta,tb,tc,td,t1,t2, *k; int r; -#if !defined(LTC_TWOFISH_SMALL) && !defined(__GNUC__) - const ulong32 *S1, *S2, *S3, *S4; -#endif +#if !defined(TWOFISH_SMALL) && !defined(__GNUC__) + ulong32 *S1, *S2, *S3, *S4; +#endif - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); - -#if !defined(LTC_TWOFISH_SMALL) && !defined(__GNUC__) - S1 = skey->twofish.S[0]; - S2 = skey->twofish.S[1]; - S3 = skey->twofish.S[2]; - S4 = skey->twofish.S[3]; -#endif + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(key != NULL); + +#if !defined(TWOFISH_SMALL) && !defined(__GNUC__) + S1 = key->twofish.S[0]; + S2 = key->twofish.S[1]; + S3 = key->twofish.S[2]; + S4 = key->twofish.S[3]; +#endif /* load input */ LOAD32L(ta,&ct[0]); LOAD32L(tb,&ct[4]); LOAD32L(tc,&ct[8]); LOAD32L(td,&ct[12]); /* undo undo final swap */ - a = tc ^ skey->twofish.K[6]; - b = td ^ skey->twofish.K[7]; - c = ta ^ skey->twofish.K[4]; - d = tb ^ skey->twofish.K[5]; + a = tc ^ key->twofish.K[6]; + b = td ^ key->twofish.K[7]; + c = ta ^ key->twofish.K[4]; + d = tb ^ key->twofish.K[5]; - k = skey->twofish.K + 36; + k = key->twofish.K + 36; for (r = 8; r != 0; --r) { - t2 = g1_func(d, skey); - t1 = g_func(c, skey) + t2; - a = ROLc(a, 1) ^ (t1 + k[2]); - b = RORc(b ^ (t2 + t1 + k[3]), 1); + t2 = g1_func(d, key); + t1 = g_func(c, key) + t2; + a = ROL(a, 1) ^ (t1 + k[2]); + b = ROR(b ^ (t2 + t1 + k[3]), 1); - t2 = g1_func(b, skey); - t1 = g_func(a, skey) + t2; - c = ROLc(c, 1) ^ (t1 + k[0]); - d = RORc(d ^ (t2 + t1 + k[1]), 1); + t2 = g1_func(b, key); + t1 = g_func(a, key) + t2; + c = ROL(c, 1) ^ (t1 + k[0]); + d = ROR(d ^ (t2 + t1 + k[1]), 1); k -= 4; } /* pre-white */ - a ^= skey->twofish.K[0]; - b ^= skey->twofish.K[1]; - c ^= skey->twofish.K[2]; - d ^= skey->twofish.K[3]; - + a ^= key->twofish.K[0]; + b ^= key->twofish.K[1]; + c ^= key->twofish.K[2]; + d ^= key->twofish.K[3]; + /* store */ STORE32L(a, &pt[0]); STORE32L(b, &pt[4]); STORE32L(c, &pt[8]); STORE32L(d, &pt[12]); - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +#ifdef CLEAN_STACK +void twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) { - int err = s_twofish_ecb_decrypt(ct, pt, skey); + _twofish_ecb_decrypt(ct, pt, key); burn_stack(sizeof(ulong32) * 10 + sizeof(int)); - return err; } #endif -/** - Performs a self-test of the Twofish block cipher - @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled -*/ int twofish_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else - static const struct { + #else + static const struct { int keylen; unsigned char key[32], pt[16], ct[16]; } tests[] = { @@ -639,7 +601,7 @@ int twofish_test(void) 0x85, 0xB6, 0xDC, 0x07, 0x3C, 0xA3, 0x41, 0xB2 }, { 0x18, 0x2B, 0x02, 0xD8, 0x14, 0x97, 0xEA, 0x45, 0xF9, 0xDA, 0xAC, 0xDC, 0x29, 0x19, 0x3A, 0x65 } - }, { + }, { 32, { 0xD4, 0x3B, 0xB7, 0x55, 0x6E, 0xA3, 0x2E, 0x46, 0xF2, 0xA2, 0x82, 0xB7, 0xD4, 0x5B, 0x4E, 0x0D, @@ -653,73 +615,47 @@ int twofish_test(void) }; - symmetric_key key; - unsigned char tmp[2][16]; - int err, i, y; - - for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) { + symmetric_key key; + unsigned char tmp[2][16]; + int err, i, y; + + for (i = 0; i < (int)(sizeof(tests)/sizeof(tests[0])); i++) { if ((err = twofish_setup(tests[i].key, tests[i].keylen, 0, &key)) != CRYPT_OK) { return err; } twofish_ecb_encrypt(tests[i].pt, tmp[0], &key); twofish_ecb_decrypt(tmp[0], tmp[1], &key); - if (ltc_compare_testvector(tmp[0], 16, tests[i].ct, 16, "Twofish Encrypt", i) != 0 || - ltc_compare_testvector(tmp[1], 16, tests[i].pt, 16, "Twofish Decrypt", i) != 0) { + if (memcmp(tmp[0], tests[i].ct, 16) != 0 || memcmp(tmp[1], tests[i].pt, 16) != 0) { return CRYPT_FAIL_TESTVECTOR; } - /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ - for (y = 0; y < 16; y++) tmp[0][y] = 0; - for (y = 0; y < 1000; y++) twofish_ecb_encrypt(tmp[0], tmp[0], &key); - for (y = 0; y < 1000; y++) twofish_ecb_decrypt(tmp[0], tmp[0], &key); - for (y = 0; y < 16; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; - } - return CRYPT_OK; -#endif + /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ + for (y = 0; y < 16; y++) tmp[0][y] = 0; + for (y = 0; y < 1000; y++) twofish_ecb_encrypt(tmp[0], tmp[0], &key); + for (y = 0; y < 1000; y++) twofish_ecb_decrypt(tmp[0], tmp[0], &key); + for (y = 0; y < 16; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; + } + return CRYPT_OK; +#endif } -/** Terminate the context - @param skey The scheduled key -*/ -void twofish_done(symmetric_key *skey) +int twofish_keysize(int *desired_keysize) { - LTC_UNUSED_PARAM(skey); -} - -/** - Gets suitable key size - @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. - @return CRYPT_OK if the input key size is acceptable. -*/ -int twofish_keysize(int *keysize) -{ - LTC_ARGCHK(keysize); - if (*keysize < 16) { + _ARGCHK(desired_keysize); + if (*desired_keysize < 16) return CRYPT_INVALID_KEYSIZE; - } - if (*keysize < 24) { - *keysize = 16; + if (*desired_keysize < 24) { + *desired_keysize = 16; + return CRYPT_OK; + } else if (*desired_keysize < 32) { + *desired_keysize = 24; + return CRYPT_OK; + } else { + *desired_keysize = 32; return CRYPT_OK; } - if (*keysize < 32) { - *keysize = 24; - return CRYPT_OK; - } - *keysize = 32; - return CRYPT_OK; } -#undef MDS_POLY -#undef RS_POLY -#undef sbox -#undef mds_column_mult -#undef S1 -#undef S2 -#undef S3 -#undef S4 -#undef s_twofish_g_func -#undef s_twofish_g1_func -#undef g_func -#undef g1_func - #endif + + diff --git a/src/ciphers/twofish/twofish_tab.c b/twofish_tab.c similarity index 57% rename from src/ciphers/twofish/twofish_tab.c rename to twofish_tab.c index 941ee274..5a2bb5b7 100644 --- a/src/ciphers/twofish/twofish_tab.c +++ b/twofish_tab.c @@ -1,486 +1,488 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - - /** - @file twofish_tab.c - Twofish tables, Tom St Denis +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org */ -#ifdef LTC_TWOFISH_TABLES -#if defined(LTC_TWOFISH) && defined(LTC_TWOFISH_TAB_C) + +#ifdef TWOFISH_TABLES /* pre generated 8x8 tables from the four 4x4s */ static const unsigned char SBOX[2][256] = { { - 0xa9, 0x67, 0xb3, 0xe8, 0x04, 0xfd, 0xa3, 0x76, 0x9a, 0x92, - 0x80, 0x78, 0xe4, 0xdd, 0xd1, 0x38, 0x0d, 0xc6, 0x35, 0x98, - 0x18, 0xf7, 0xec, 0x6c, 0x43, 0x75, 0x37, 0x26, 0xfa, 0x13, - 0x94, 0x48, 0xf2, 0xd0, 0x8b, 0x30, 0x84, 0x54, 0xdf, 0x23, - 0x19, 0x5b, 0x3d, 0x59, 0xf3, 0xae, 0xa2, 0x82, 0x63, 0x01, - 0x83, 0x2e, 0xd9, 0x51, 0x9b, 0x7c, 0xa6, 0xeb, 0xa5, 0xbe, - 0x16, 0x0c, 0xe3, 0x61, 0xc0, 0x8c, 0x3a, 0xf5, 0x73, 0x2c, - 0x25, 0x0b, 0xbb, 0x4e, 0x89, 0x6b, 0x53, 0x6a, 0xb4, 0xf1, + 0xa9, 0x67, 0xb3, 0xe8, 0x04, 0xfd, 0xa3, 0x76, 0x9a, 0x92, + 0x80, 0x78, 0xe4, 0xdd, 0xd1, 0x38, 0x0d, 0xc6, 0x35, 0x98, + 0x18, 0xf7, 0xec, 0x6c, 0x43, 0x75, 0x37, 0x26, 0xfa, 0x13, + 0x94, 0x48, 0xf2, 0xd0, 0x8b, 0x30, 0x84, 0x54, 0xdf, 0x23, + 0x19, 0x5b, 0x3d, 0x59, 0xf3, 0xae, 0xa2, 0x82, 0x63, 0x01, + 0x83, 0x2e, 0xd9, 0x51, 0x9b, 0x7c, 0xa6, 0xeb, 0xa5, 0xbe, + 0x16, 0x0c, 0xe3, 0x61, 0xc0, 0x8c, 0x3a, 0xf5, 0x73, 0x2c, + 0x25, 0x0b, 0xbb, 0x4e, 0x89, 0x6b, 0x53, 0x6a, 0xb4, 0xf1, 0xe1, 0xe6, 0xbd, 0x45, 0xe2, 0xf4, 0xb6, 0x66, 0xcc, 0x95, - 0x03, 0x56, 0xd4, 0x1c, 0x1e, 0xd7, 0xfb, 0xc3, 0x8e, 0xb5, - 0xe9, 0xcf, 0xbf, 0xba, 0xea, 0x77, 0x39, 0xaf, 0x33, 0xc9, - 0x62, 0x71, 0x81, 0x79, 0x09, 0xad, 0x24, 0xcd, 0xf9, 0xd8, - 0xe5, 0xc5, 0xb9, 0x4d, 0x44, 0x08, 0x86, 0xe7, 0xa1, 0x1d, - 0xaa, 0xed, 0x06, 0x70, 0xb2, 0xd2, 0x41, 0x7b, 0xa0, 0x11, + 0x03, 0x56, 0xd4, 0x1c, 0x1e, 0xd7, 0xfb, 0xc3, 0x8e, 0xb5, + 0xe9, 0xcf, 0xbf, 0xba, 0xea, 0x77, 0x39, 0xaf, 0x33, 0xc9, + 0x62, 0x71, 0x81, 0x79, 0x09, 0xad, 0x24, 0xcd, 0xf9, 0xd8, + 0xe5, 0xc5, 0xb9, 0x4d, 0x44, 0x08, 0x86, 0xe7, 0xa1, 0x1d, + 0xaa, 0xed, 0x06, 0x70, 0xb2, 0xd2, 0x41, 0x7b, 0xa0, 0x11, 0x31, 0xc2, 0x27, 0x90, 0x20, 0xf6, 0x60, 0xff, 0x96, 0x5c, - 0xb1, 0xab, 0x9e, 0x9c, 0x52, 0x1b, 0x5f, 0x93, 0x0a, 0xef, - 0x91, 0x85, 0x49, 0xee, 0x2d, 0x4f, 0x8f, 0x3b, 0x47, 0x87, - 0x6d, 0x46, 0xd6, 0x3e, 0x69, 0x64, 0x2a, 0xce, 0xcb, 0x2f, - 0xfc, 0x97, 0x05, 0x7a, 0xac, 0x7f, 0xd5, 0x1a, 0x4b, 0x0e, - 0xa7, 0x5a, 0x28, 0x14, 0x3f, 0x29, 0x88, 0x3c, 0x4c, 0x02, - 0xb8, 0xda, 0xb0, 0x17, 0x55, 0x1f, 0x8a, 0x7d, 0x57, 0xc7, - 0x8d, 0x74, 0xb7, 0xc4, 0x9f, 0x72, 0x7e, 0x15, 0x22, 0x12, - 0x58, 0x07, 0x99, 0x34, 0x6e, 0x50, 0xde, 0x68, 0x65, 0xbc, - 0xdb, 0xf8, 0xc8, 0xa8, 0x2b, 0x40, 0xdc, 0xfe, 0x32, 0xa4, - 0xca, 0x10, 0x21, 0xf0, 0xd3, 0x5d, 0x0f, 0x00, 0x6f, 0x9d, + 0xb1, 0xab, 0x9e, 0x9c, 0x52, 0x1b, 0x5f, 0x93, 0x0a, 0xef, + 0x91, 0x85, 0x49, 0xee, 0x2d, 0x4f, 0x8f, 0x3b, 0x47, 0x87, + 0x6d, 0x46, 0xd6, 0x3e, 0x69, 0x64, 0x2a, 0xce, 0xcb, 0x2f, + 0xfc, 0x97, 0x05, 0x7a, 0xac, 0x7f, 0xd5, 0x1a, 0x4b, 0x0e, + 0xa7, 0x5a, 0x28, 0x14, 0x3f, 0x29, 0x88, 0x3c, 0x4c, 0x02, + 0xb8, 0xda, 0xb0, 0x17, 0x55, 0x1f, 0x8a, 0x7d, 0x57, 0xc7, + 0x8d, 0x74, 0xb7, 0xc4, 0x9f, 0x72, 0x7e, 0x15, 0x22, 0x12, + 0x58, 0x07, 0x99, 0x34, 0x6e, 0x50, 0xde, 0x68, 0x65, 0xbc, + 0xdb, 0xf8, 0xc8, 0xa8, 0x2b, 0x40, 0xdc, 0xfe, 0x32, 0xa4, + 0xca, 0x10, 0x21, 0xf0, 0xd3, 0x5d, 0x0f, 0x00, 0x6f, 0x9d, 0x36, 0x42, 0x4a, 0x5e, 0xc1, 0xe0}, { - 0x75, 0xf3, 0xc6, 0xf4, 0xdb, 0x7b, 0xfb, 0xc8, 0x4a, 0xd3, + 0x75, 0xf3, 0xc6, 0xf4, 0xdb, 0x7b, 0xfb, 0xc8, 0x4a, 0xd3, 0xe6, 0x6b, 0x45, 0x7d, 0xe8, 0x4b, 0xd6, 0x32, 0xd8, 0xfd, 0x37, 0x71, 0xf1, 0xe1, 0x30, 0x0f, 0xf8, 0x1b, 0x87, 0xfa, 0x06, 0x3f, 0x5e, 0xba, 0xae, 0x5b, 0x8a, 0x00, 0xbc, 0x9d, - 0x6d, 0xc1, 0xb1, 0x0e, 0x80, 0x5d, 0xd2, 0xd5, 0xa0, 0x84, - 0x07, 0x14, 0xb5, 0x90, 0x2c, 0xa3, 0xb2, 0x73, 0x4c, 0x54, - 0x92, 0x74, 0x36, 0x51, 0x38, 0xb0, 0xbd, 0x5a, 0xfc, 0x60, - 0x62, 0x96, 0x6c, 0x42, 0xf7, 0x10, 0x7c, 0x28, 0x27, 0x8c, - 0x13, 0x95, 0x9c, 0xc7, 0x24, 0x46, 0x3b, 0x70, 0xca, 0xe3, + 0x6d, 0xc1, 0xb1, 0x0e, 0x80, 0x5d, 0xd2, 0xd5, 0xa0, 0x84, + 0x07, 0x14, 0xb5, 0x90, 0x2c, 0xa3, 0xb2, 0x73, 0x4c, 0x54, + 0x92, 0x74, 0x36, 0x51, 0x38, 0xb0, 0xbd, 0x5a, 0xfc, 0x60, + 0x62, 0x96, 0x6c, 0x42, 0xf7, 0x10, 0x7c, 0x28, 0x27, 0x8c, + 0x13, 0x95, 0x9c, 0xc7, 0x24, 0x46, 0x3b, 0x70, 0xca, 0xe3, 0x85, 0xcb, 0x11, 0xd0, 0x93, 0xb8, 0xa6, 0x83, 0x20, 0xff, - 0x9f, 0x77, 0xc3, 0xcc, 0x03, 0x6f, 0x08, 0xbf, 0x40, 0xe7, - 0x2b, 0xe2, 0x79, 0x0c, 0xaa, 0x82, 0x41, 0x3a, 0xea, 0xb9, - 0xe4, 0x9a, 0xa4, 0x97, 0x7e, 0xda, 0x7a, 0x17, 0x66, 0x94, - 0xa1, 0x1d, 0x3d, 0xf0, 0xde, 0xb3, 0x0b, 0x72, 0xa7, 0x1c, - 0xef, 0xd1, 0x53, 0x3e, 0x8f, 0x33, 0x26, 0x5f, 0xec, 0x76, - 0x2a, 0x49, 0x81, 0x88, 0xee, 0x21, 0xc4, 0x1a, 0xeb, 0xd9, - 0xc5, 0x39, 0x99, 0xcd, 0xad, 0x31, 0x8b, 0x01, 0x18, 0x23, - 0xdd, 0x1f, 0x4e, 0x2d, 0xf9, 0x48, 0x4f, 0xf2, 0x65, 0x8e, - 0x78, 0x5c, 0x58, 0x19, 0x8d, 0xe5, 0x98, 0x57, 0x67, 0x7f, - 0x05, 0x64, 0xaf, 0x63, 0xb6, 0xfe, 0xf5, 0xb7, 0x3c, 0xa5, - 0xce, 0xe9, 0x68, 0x44, 0xe0, 0x4d, 0x43, 0x69, 0x29, 0x2e, - 0xac, 0x15, 0x59, 0xa8, 0x0a, 0x9e, 0x6e, 0x47, 0xdf, 0x34, - 0x35, 0x6a, 0xcf, 0xdc, 0x22, 0xc9, 0xc0, 0x9b, 0x89, 0xd4, - 0xed, 0xab, 0x12, 0xa2, 0x0d, 0x52, 0xbb, 0x02, 0x2f, 0xa9, - 0xd7, 0x61, 0x1e, 0xb4, 0x50, 0x04, 0xf6, 0xc2, 0x16, 0x25, + 0x9f, 0x77, 0xc3, 0xcc, 0x03, 0x6f, 0x08, 0xbf, 0x40, 0xe7, + 0x2b, 0xe2, 0x79, 0x0c, 0xaa, 0x82, 0x41, 0x3a, 0xea, 0xb9, + 0xe4, 0x9a, 0xa4, 0x97, 0x7e, 0xda, 0x7a, 0x17, 0x66, 0x94, + 0xa1, 0x1d, 0x3d, 0xf0, 0xde, 0xb3, 0x0b, 0x72, 0xa7, 0x1c, + 0xef, 0xd1, 0x53, 0x3e, 0x8f, 0x33, 0x26, 0x5f, 0xec, 0x76, + 0x2a, 0x49, 0x81, 0x88, 0xee, 0x21, 0xc4, 0x1a, 0xeb, 0xd9, + 0xc5, 0x39, 0x99, 0xcd, 0xad, 0x31, 0x8b, 0x01, 0x18, 0x23, + 0xdd, 0x1f, 0x4e, 0x2d, 0xf9, 0x48, 0x4f, 0xf2, 0x65, 0x8e, + 0x78, 0x5c, 0x58, 0x19, 0x8d, 0xe5, 0x98, 0x57, 0x67, 0x7f, + 0x05, 0x64, 0xaf, 0x63, 0xb6, 0xfe, 0xf5, 0xb7, 0x3c, 0xa5, + 0xce, 0xe9, 0x68, 0x44, 0xe0, 0x4d, 0x43, 0x69, 0x29, 0x2e, + 0xac, 0x15, 0x59, 0xa8, 0x0a, 0x9e, 0x6e, 0x47, 0xdf, 0x34, + 0x35, 0x6a, 0xcf, 0xdc, 0x22, 0xc9, 0xc0, 0x9b, 0x89, 0xd4, + 0xed, 0xab, 0x12, 0xa2, 0x0d, 0x52, 0xbb, 0x02, 0x2f, 0xa9, + 0xd7, 0x61, 0x1e, 0xb4, 0x50, 0x04, 0xf6, 0xc2, 0x16, 0x25, 0x86, 0x56, 0x55, 0x09, 0xbe, 0x91} }; /* the 4x4 MDS in a nicer format */ static const ulong32 mds_tab[4][256] = { { -0x00000000UL, 0xefef5b01UL, 0xb7b7b602UL, 0x5858ed03UL, 0x07070504UL, 0xe8e85e05UL, 0xb0b0b306UL, 0x5f5fe807UL, -0x0e0e0a08UL, 0xe1e15109UL, 0xb9b9bc0aUL, 0x5656e70bUL, 0x09090f0cUL, 0xe6e6540dUL, 0xbebeb90eUL, 0x5151e20fUL, -0x1c1c1410UL, 0xf3f34f11UL, 0xababa212UL, 0x4444f913UL, 0x1b1b1114UL, 0xf4f44a15UL, 0xacaca716UL, 0x4343fc17UL, -0x12121e18UL, 0xfdfd4519UL, 0xa5a5a81aUL, 0x4a4af31bUL, 0x15151b1cUL, 0xfafa401dUL, 0xa2a2ad1eUL, 0x4d4df61fUL, -0x38382820UL, 0xd7d77321UL, 0x8f8f9e22UL, 0x6060c523UL, 0x3f3f2d24UL, 0xd0d07625UL, 0x88889b26UL, 0x6767c027UL, -0x36362228UL, 0xd9d97929UL, 0x8181942aUL, 0x6e6ecf2bUL, 0x3131272cUL, 0xdede7c2dUL, 0x8686912eUL, 0x6969ca2fUL, -0x24243c30UL, 0xcbcb6731UL, 0x93938a32UL, 0x7c7cd133UL, 0x23233934UL, 0xcccc6235UL, 0x94948f36UL, 0x7b7bd437UL, -0x2a2a3638UL, 0xc5c56d39UL, 0x9d9d803aUL, 0x7272db3bUL, 0x2d2d333cUL, 0xc2c2683dUL, 0x9a9a853eUL, 0x7575de3fUL, +0x00000000UL, 0xefef5b01UL, 0xb7b7b602UL, 0x5858ed03UL, 0x07070504UL, 0xe8e85e05UL, 0xb0b0b306UL, 0x5f5fe807UL, +0x0e0e0a08UL, 0xe1e15109UL, 0xb9b9bc0aUL, 0x5656e70bUL, 0x09090f0cUL, 0xe6e6540dUL, 0xbebeb90eUL, 0x5151e20fUL, +0x1c1c1410UL, 0xf3f34f11UL, 0xababa212UL, 0x4444f913UL, 0x1b1b1114UL, 0xf4f44a15UL, 0xacaca716UL, 0x4343fc17UL, +0x12121e18UL, 0xfdfd4519UL, 0xa5a5a81aUL, 0x4a4af31bUL, 0x15151b1cUL, 0xfafa401dUL, 0xa2a2ad1eUL, 0x4d4df61fUL, +0x38382820UL, 0xd7d77321UL, 0x8f8f9e22UL, 0x6060c523UL, 0x3f3f2d24UL, 0xd0d07625UL, 0x88889b26UL, 0x6767c027UL, +0x36362228UL, 0xd9d97929UL, 0x8181942aUL, 0x6e6ecf2bUL, 0x3131272cUL, 0xdede7c2dUL, 0x8686912eUL, 0x6969ca2fUL, +0x24243c30UL, 0xcbcb6731UL, 0x93938a32UL, 0x7c7cd133UL, 0x23233934UL, 0xcccc6235UL, 0x94948f36UL, 0x7b7bd437UL, +0x2a2a3638UL, 0xc5c56d39UL, 0x9d9d803aUL, 0x7272db3bUL, 0x2d2d333cUL, 0xc2c2683dUL, 0x9a9a853eUL, 0x7575de3fUL, 0x70705040UL, 0x9f9f0b41UL, 0xc7c7e642UL, 0x2828bd43UL, 0x77775544UL, 0x98980e45UL, 0xc0c0e346UL, 0x2f2fb847UL, -0x7e7e5a48UL, 0x91910149UL, 0xc9c9ec4aUL, 0x2626b74bUL, 0x79795f4cUL, 0x9696044dUL, 0xcecee94eUL, 0x2121b24fUL, -0x6c6c4450UL, 0x83831f51UL, 0xdbdbf252UL, 0x3434a953UL, 0x6b6b4154UL, 0x84841a55UL, 0xdcdcf756UL, 0x3333ac57UL, -0x62624e58UL, 0x8d8d1559UL, 0xd5d5f85aUL, 0x3a3aa35bUL, 0x65654b5cUL, 0x8a8a105dUL, 0xd2d2fd5eUL, 0x3d3da65fUL, -0x48487860UL, 0xa7a72361UL, 0xffffce62UL, 0x10109563UL, 0x4f4f7d64UL, 0xa0a02665UL, 0xf8f8cb66UL, 0x17179067UL, +0x7e7e5a48UL, 0x91910149UL, 0xc9c9ec4aUL, 0x2626b74bUL, 0x79795f4cUL, 0x9696044dUL, 0xcecee94eUL, 0x2121b24fUL, +0x6c6c4450UL, 0x83831f51UL, 0xdbdbf252UL, 0x3434a953UL, 0x6b6b4154UL, 0x84841a55UL, 0xdcdcf756UL, 0x3333ac57UL, +0x62624e58UL, 0x8d8d1559UL, 0xd5d5f85aUL, 0x3a3aa35bUL, 0x65654b5cUL, 0x8a8a105dUL, 0xd2d2fd5eUL, 0x3d3da65fUL, +0x48487860UL, 0xa7a72361UL, 0xffffce62UL, 0x10109563UL, 0x4f4f7d64UL, 0xa0a02665UL, 0xf8f8cb66UL, 0x17179067UL, 0x46467268UL, 0xa9a92969UL, 0xf1f1c46aUL, 0x1e1e9f6bUL, 0x4141776cUL, 0xaeae2c6dUL, 0xf6f6c16eUL, 0x19199a6fUL, -0x54546c70UL, 0xbbbb3771UL, 0xe3e3da72UL, 0x0c0c8173UL, 0x53536974UL, 0xbcbc3275UL, 0xe4e4df76UL, 0x0b0b8477UL, -0x5a5a6678UL, 0xb5b53d79UL, 0xededd07aUL, 0x02028b7bUL, 0x5d5d637cUL, 0xb2b2387dUL, 0xeaead57eUL, 0x05058e7fUL, -0xe0e0a080UL, 0x0f0ffb81UL, 0x57571682UL, 0xb8b84d83UL, 0xe7e7a584UL, 0x0808fe85UL, 0x50501386UL, 0xbfbf4887UL, -0xeeeeaa88UL, 0x0101f189UL, 0x59591c8aUL, 0xb6b6478bUL, 0xe9e9af8cUL, 0x0606f48dUL, 0x5e5e198eUL, 0xb1b1428fUL, -0xfcfcb490UL, 0x1313ef91UL, 0x4b4b0292UL, 0xa4a45993UL, 0xfbfbb194UL, 0x1414ea95UL, 0x4c4c0796UL, 0xa3a35c97UL, -0xf2f2be98UL, 0x1d1de599UL, 0x4545089aUL, 0xaaaa539bUL, 0xf5f5bb9cUL, 0x1a1ae09dUL, 0x42420d9eUL, 0xadad569fUL, -0xd8d888a0UL, 0x3737d3a1UL, 0x6f6f3ea2UL, 0x808065a3UL, 0xdfdf8da4UL, 0x3030d6a5UL, 0x68683ba6UL, 0x878760a7UL, -0xd6d682a8UL, 0x3939d9a9UL, 0x616134aaUL, 0x8e8e6fabUL, 0xd1d187acUL, 0x3e3edcadUL, 0x666631aeUL, 0x89896aafUL, -0xc4c49cb0UL, 0x2b2bc7b1UL, 0x73732ab2UL, 0x9c9c71b3UL, 0xc3c399b4UL, 0x2c2cc2b5UL, 0x74742fb6UL, 0x9b9b74b7UL, -0xcaca96b8UL, 0x2525cdb9UL, 0x7d7d20baUL, 0x92927bbbUL, 0xcdcd93bcUL, 0x2222c8bdUL, 0x7a7a25beUL, 0x95957ebfUL, -0x9090f0c0UL, 0x7f7fabc1UL, 0x272746c2UL, 0xc8c81dc3UL, 0x9797f5c4UL, 0x7878aec5UL, 0x202043c6UL, 0xcfcf18c7UL, -0x9e9efac8UL, 0x7171a1c9UL, 0x29294ccaUL, 0xc6c617cbUL, 0x9999ffccUL, 0x7676a4cdUL, 0x2e2e49ceUL, 0xc1c112cfUL, -0x8c8ce4d0UL, 0x6363bfd1UL, 0x3b3b52d2UL, 0xd4d409d3UL, 0x8b8be1d4UL, 0x6464bad5UL, 0x3c3c57d6UL, 0xd3d30cd7UL, -0x8282eed8UL, 0x6d6db5d9UL, 0x353558daUL, 0xdada03dbUL, 0x8585ebdcUL, 0x6a6ab0ddUL, 0x32325ddeUL, 0xdddd06dfUL, +0x54546c70UL, 0xbbbb3771UL, 0xe3e3da72UL, 0x0c0c8173UL, 0x53536974UL, 0xbcbc3275UL, 0xe4e4df76UL, 0x0b0b8477UL, +0x5a5a6678UL, 0xb5b53d79UL, 0xededd07aUL, 0x02028b7bUL, 0x5d5d637cUL, 0xb2b2387dUL, 0xeaead57eUL, 0x05058e7fUL, +0xe0e0a080UL, 0x0f0ffb81UL, 0x57571682UL, 0xb8b84d83UL, 0xe7e7a584UL, 0x0808fe85UL, 0x50501386UL, 0xbfbf4887UL, +0xeeeeaa88UL, 0x0101f189UL, 0x59591c8aUL, 0xb6b6478bUL, 0xe9e9af8cUL, 0x0606f48dUL, 0x5e5e198eUL, 0xb1b1428fUL, +0xfcfcb490UL, 0x1313ef91UL, 0x4b4b0292UL, 0xa4a45993UL, 0xfbfbb194UL, 0x1414ea95UL, 0x4c4c0796UL, 0xa3a35c97UL, +0xf2f2be98UL, 0x1d1de599UL, 0x4545089aUL, 0xaaaa539bUL, 0xf5f5bb9cUL, 0x1a1ae09dUL, 0x42420d9eUL, 0xadad569fUL, +0xd8d888a0UL, 0x3737d3a1UL, 0x6f6f3ea2UL, 0x808065a3UL, 0xdfdf8da4UL, 0x3030d6a5UL, 0x68683ba6UL, 0x878760a7UL, +0xd6d682a8UL, 0x3939d9a9UL, 0x616134aaUL, 0x8e8e6fabUL, 0xd1d187acUL, 0x3e3edcadUL, 0x666631aeUL, 0x89896aafUL, +0xc4c49cb0UL, 0x2b2bc7b1UL, 0x73732ab2UL, 0x9c9c71b3UL, 0xc3c399b4UL, 0x2c2cc2b5UL, 0x74742fb6UL, 0x9b9b74b7UL, +0xcaca96b8UL, 0x2525cdb9UL, 0x7d7d20baUL, 0x92927bbbUL, 0xcdcd93bcUL, 0x2222c8bdUL, 0x7a7a25beUL, 0x95957ebfUL, +0x9090f0c0UL, 0x7f7fabc1UL, 0x272746c2UL, 0xc8c81dc3UL, 0x9797f5c4UL, 0x7878aec5UL, 0x202043c6UL, 0xcfcf18c7UL, +0x9e9efac8UL, 0x7171a1c9UL, 0x29294ccaUL, 0xc6c617cbUL, 0x9999ffccUL, 0x7676a4cdUL, 0x2e2e49ceUL, 0xc1c112cfUL, +0x8c8ce4d0UL, 0x6363bfd1UL, 0x3b3b52d2UL, 0xd4d409d3UL, 0x8b8be1d4UL, 0x6464bad5UL, 0x3c3c57d6UL, 0xd3d30cd7UL, +0x8282eed8UL, 0x6d6db5d9UL, 0x353558daUL, 0xdada03dbUL, 0x8585ebdcUL, 0x6a6ab0ddUL, 0x32325ddeUL, 0xdddd06dfUL, 0xa8a8d8e0UL, 0x474783e1UL, 0x1f1f6ee2UL, 0xf0f035e3UL, 0xafafdde4UL, 0x404086e5UL, 0x18186be6UL, 0xf7f730e7UL, 0xa6a6d2e8UL, 0x494989e9UL, 0x111164eaUL, 0xfefe3febUL, 0xa1a1d7ecUL, 0x4e4e8cedUL, 0x161661eeUL, 0xf9f93aefUL, -0xb4b4ccf0UL, 0x5b5b97f1UL, 0x03037af2UL, 0xecec21f3UL, 0xb3b3c9f4UL, 0x5c5c92f5UL, 0x04047ff6UL, 0xebeb24f7UL, +0xb4b4ccf0UL, 0x5b5b97f1UL, 0x03037af2UL, 0xecec21f3UL, 0xb3b3c9f4UL, 0x5c5c92f5UL, 0x04047ff6UL, 0xebeb24f7UL, 0xbabac6f8UL, 0x55559df9UL, 0x0d0d70faUL, 0xe2e22bfbUL, 0xbdbdc3fcUL, 0x525298fdUL, 0x0a0a75feUL, 0xe5e52effUL -}, +}, { -0x00000000UL, 0x015befefUL, 0x02b6b7b7UL, 0x03ed5858UL, 0x04050707UL, 0x055ee8e8UL, 0x06b3b0b0UL, 0x07e85f5fUL, -0x080a0e0eUL, 0x0951e1e1UL, 0x0abcb9b9UL, 0x0be75656UL, 0x0c0f0909UL, 0x0d54e6e6UL, 0x0eb9bebeUL, 0x0fe25151UL, -0x10141c1cUL, 0x114ff3f3UL, 0x12a2ababUL, 0x13f94444UL, 0x14111b1bUL, 0x154af4f4UL, 0x16a7acacUL, 0x17fc4343UL, -0x181e1212UL, 0x1945fdfdUL, 0x1aa8a5a5UL, 0x1bf34a4aUL, 0x1c1b1515UL, 0x1d40fafaUL, 0x1eada2a2UL, 0x1ff64d4dUL, -0x20283838UL, 0x2173d7d7UL, 0x229e8f8fUL, 0x23c56060UL, 0x242d3f3fUL, 0x2576d0d0UL, 0x269b8888UL, 0x27c06767UL, -0x28223636UL, 0x2979d9d9UL, 0x2a948181UL, 0x2bcf6e6eUL, 0x2c273131UL, 0x2d7cdedeUL, 0x2e918686UL, 0x2fca6969UL, -0x303c2424UL, 0x3167cbcbUL, 0x328a9393UL, 0x33d17c7cUL, 0x34392323UL, 0x3562ccccUL, 0x368f9494UL, 0x37d47b7bUL, -0x38362a2aUL, 0x396dc5c5UL, 0x3a809d9dUL, 0x3bdb7272UL, 0x3c332d2dUL, 0x3d68c2c2UL, 0x3e859a9aUL, 0x3fde7575UL, -0x40507070UL, 0x410b9f9fUL, 0x42e6c7c7UL, 0x43bd2828UL, 0x44557777UL, 0x450e9898UL, 0x46e3c0c0UL, 0x47b82f2fUL, -0x485a7e7eUL, 0x49019191UL, 0x4aecc9c9UL, 0x4bb72626UL, 0x4c5f7979UL, 0x4d049696UL, 0x4ee9ceceUL, 0x4fb22121UL, -0x50446c6cUL, 0x511f8383UL, 0x52f2dbdbUL, 0x53a93434UL, 0x54416b6bUL, 0x551a8484UL, 0x56f7dcdcUL, 0x57ac3333UL, +0x00000000UL, 0x015befefUL, 0x02b6b7b7UL, 0x03ed5858UL, 0x04050707UL, 0x055ee8e8UL, 0x06b3b0b0UL, 0x07e85f5fUL, +0x080a0e0eUL, 0x0951e1e1UL, 0x0abcb9b9UL, 0x0be75656UL, 0x0c0f0909UL, 0x0d54e6e6UL, 0x0eb9bebeUL, 0x0fe25151UL, +0x10141c1cUL, 0x114ff3f3UL, 0x12a2ababUL, 0x13f94444UL, 0x14111b1bUL, 0x154af4f4UL, 0x16a7acacUL, 0x17fc4343UL, +0x181e1212UL, 0x1945fdfdUL, 0x1aa8a5a5UL, 0x1bf34a4aUL, 0x1c1b1515UL, 0x1d40fafaUL, 0x1eada2a2UL, 0x1ff64d4dUL, +0x20283838UL, 0x2173d7d7UL, 0x229e8f8fUL, 0x23c56060UL, 0x242d3f3fUL, 0x2576d0d0UL, 0x269b8888UL, 0x27c06767UL, +0x28223636UL, 0x2979d9d9UL, 0x2a948181UL, 0x2bcf6e6eUL, 0x2c273131UL, 0x2d7cdedeUL, 0x2e918686UL, 0x2fca6969UL, +0x303c2424UL, 0x3167cbcbUL, 0x328a9393UL, 0x33d17c7cUL, 0x34392323UL, 0x3562ccccUL, 0x368f9494UL, 0x37d47b7bUL, +0x38362a2aUL, 0x396dc5c5UL, 0x3a809d9dUL, 0x3bdb7272UL, 0x3c332d2dUL, 0x3d68c2c2UL, 0x3e859a9aUL, 0x3fde7575UL, +0x40507070UL, 0x410b9f9fUL, 0x42e6c7c7UL, 0x43bd2828UL, 0x44557777UL, 0x450e9898UL, 0x46e3c0c0UL, 0x47b82f2fUL, +0x485a7e7eUL, 0x49019191UL, 0x4aecc9c9UL, 0x4bb72626UL, 0x4c5f7979UL, 0x4d049696UL, 0x4ee9ceceUL, 0x4fb22121UL, +0x50446c6cUL, 0x511f8383UL, 0x52f2dbdbUL, 0x53a93434UL, 0x54416b6bUL, 0x551a8484UL, 0x56f7dcdcUL, 0x57ac3333UL, 0x584e6262UL, 0x59158d8dUL, 0x5af8d5d5UL, 0x5ba33a3aUL, 0x5c4b6565UL, 0x5d108a8aUL, 0x5efdd2d2UL, 0x5fa63d3dUL, -0x60784848UL, 0x6123a7a7UL, 0x62ceffffUL, 0x63951010UL, 0x647d4f4fUL, 0x6526a0a0UL, 0x66cbf8f8UL, 0x67901717UL, -0x68724646UL, 0x6929a9a9UL, 0x6ac4f1f1UL, 0x6b9f1e1eUL, 0x6c774141UL, 0x6d2caeaeUL, 0x6ec1f6f6UL, 0x6f9a1919UL, -0x706c5454UL, 0x7137bbbbUL, 0x72dae3e3UL, 0x73810c0cUL, 0x74695353UL, 0x7532bcbcUL, 0x76dfe4e4UL, 0x77840b0bUL, -0x78665a5aUL, 0x793db5b5UL, 0x7ad0ededUL, 0x7b8b0202UL, 0x7c635d5dUL, 0x7d38b2b2UL, 0x7ed5eaeaUL, 0x7f8e0505UL, -0x80a0e0e0UL, 0x81fb0f0fUL, 0x82165757UL, 0x834db8b8UL, 0x84a5e7e7UL, 0x85fe0808UL, 0x86135050UL, 0x8748bfbfUL, -0x88aaeeeeUL, 0x89f10101UL, 0x8a1c5959UL, 0x8b47b6b6UL, 0x8cafe9e9UL, 0x8df40606UL, 0x8e195e5eUL, 0x8f42b1b1UL, -0x90b4fcfcUL, 0x91ef1313UL, 0x92024b4bUL, 0x9359a4a4UL, 0x94b1fbfbUL, 0x95ea1414UL, 0x96074c4cUL, 0x975ca3a3UL, +0x60784848UL, 0x6123a7a7UL, 0x62ceffffUL, 0x63951010UL, 0x647d4f4fUL, 0x6526a0a0UL, 0x66cbf8f8UL, 0x67901717UL, +0x68724646UL, 0x6929a9a9UL, 0x6ac4f1f1UL, 0x6b9f1e1eUL, 0x6c774141UL, 0x6d2caeaeUL, 0x6ec1f6f6UL, 0x6f9a1919UL, +0x706c5454UL, 0x7137bbbbUL, 0x72dae3e3UL, 0x73810c0cUL, 0x74695353UL, 0x7532bcbcUL, 0x76dfe4e4UL, 0x77840b0bUL, +0x78665a5aUL, 0x793db5b5UL, 0x7ad0ededUL, 0x7b8b0202UL, 0x7c635d5dUL, 0x7d38b2b2UL, 0x7ed5eaeaUL, 0x7f8e0505UL, +0x80a0e0e0UL, 0x81fb0f0fUL, 0x82165757UL, 0x834db8b8UL, 0x84a5e7e7UL, 0x85fe0808UL, 0x86135050UL, 0x8748bfbfUL, +0x88aaeeeeUL, 0x89f10101UL, 0x8a1c5959UL, 0x8b47b6b6UL, 0x8cafe9e9UL, 0x8df40606UL, 0x8e195e5eUL, 0x8f42b1b1UL, +0x90b4fcfcUL, 0x91ef1313UL, 0x92024b4bUL, 0x9359a4a4UL, 0x94b1fbfbUL, 0x95ea1414UL, 0x96074c4cUL, 0x975ca3a3UL, 0x98bef2f2UL, 0x99e51d1dUL, 0x9a084545UL, 0x9b53aaaaUL, 0x9cbbf5f5UL, 0x9de01a1aUL, 0x9e0d4242UL, 0x9f56adadUL, -0xa088d8d8UL, 0xa1d33737UL, 0xa23e6f6fUL, 0xa3658080UL, 0xa48ddfdfUL, 0xa5d63030UL, 0xa63b6868UL, 0xa7608787UL, -0xa882d6d6UL, 0xa9d93939UL, 0xaa346161UL, 0xab6f8e8eUL, 0xac87d1d1UL, 0xaddc3e3eUL, 0xae316666UL, 0xaf6a8989UL, -0xb09cc4c4UL, 0xb1c72b2bUL, 0xb22a7373UL, 0xb3719c9cUL, 0xb499c3c3UL, 0xb5c22c2cUL, 0xb62f7474UL, 0xb7749b9bUL, -0xb896cacaUL, 0xb9cd2525UL, 0xba207d7dUL, 0xbb7b9292UL, 0xbc93cdcdUL, 0xbdc82222UL, 0xbe257a7aUL, 0xbf7e9595UL, -0xc0f09090UL, 0xc1ab7f7fUL, 0xc2462727UL, 0xc31dc8c8UL, 0xc4f59797UL, 0xc5ae7878UL, 0xc6432020UL, 0xc718cfcfUL, -0xc8fa9e9eUL, 0xc9a17171UL, 0xca4c2929UL, 0xcb17c6c6UL, 0xccff9999UL, 0xcda47676UL, 0xce492e2eUL, 0xcf12c1c1UL, -0xd0e48c8cUL, 0xd1bf6363UL, 0xd2523b3bUL, 0xd309d4d4UL, 0xd4e18b8bUL, 0xd5ba6464UL, 0xd6573c3cUL, 0xd70cd3d3UL, -0xd8ee8282UL, 0xd9b56d6dUL, 0xda583535UL, 0xdb03dadaUL, 0xdceb8585UL, 0xddb06a6aUL, 0xde5d3232UL, 0xdf06ddddUL, -0xe0d8a8a8UL, 0xe1834747UL, 0xe26e1f1fUL, 0xe335f0f0UL, 0xe4ddafafUL, 0xe5864040UL, 0xe66b1818UL, 0xe730f7f7UL, -0xe8d2a6a6UL, 0xe9894949UL, 0xea641111UL, 0xeb3ffefeUL, 0xecd7a1a1UL, 0xed8c4e4eUL, 0xee611616UL, 0xef3af9f9UL, -0xf0ccb4b4UL, 0xf1975b5bUL, 0xf27a0303UL, 0xf321ececUL, 0xf4c9b3b3UL, 0xf5925c5cUL, 0xf67f0404UL, 0xf724ebebUL, +0xa088d8d8UL, 0xa1d33737UL, 0xa23e6f6fUL, 0xa3658080UL, 0xa48ddfdfUL, 0xa5d63030UL, 0xa63b6868UL, 0xa7608787UL, +0xa882d6d6UL, 0xa9d93939UL, 0xaa346161UL, 0xab6f8e8eUL, 0xac87d1d1UL, 0xaddc3e3eUL, 0xae316666UL, 0xaf6a8989UL, +0xb09cc4c4UL, 0xb1c72b2bUL, 0xb22a7373UL, 0xb3719c9cUL, 0xb499c3c3UL, 0xb5c22c2cUL, 0xb62f7474UL, 0xb7749b9bUL, +0xb896cacaUL, 0xb9cd2525UL, 0xba207d7dUL, 0xbb7b9292UL, 0xbc93cdcdUL, 0xbdc82222UL, 0xbe257a7aUL, 0xbf7e9595UL, +0xc0f09090UL, 0xc1ab7f7fUL, 0xc2462727UL, 0xc31dc8c8UL, 0xc4f59797UL, 0xc5ae7878UL, 0xc6432020UL, 0xc718cfcfUL, +0xc8fa9e9eUL, 0xc9a17171UL, 0xca4c2929UL, 0xcb17c6c6UL, 0xccff9999UL, 0xcda47676UL, 0xce492e2eUL, 0xcf12c1c1UL, +0xd0e48c8cUL, 0xd1bf6363UL, 0xd2523b3bUL, 0xd309d4d4UL, 0xd4e18b8bUL, 0xd5ba6464UL, 0xd6573c3cUL, 0xd70cd3d3UL, +0xd8ee8282UL, 0xd9b56d6dUL, 0xda583535UL, 0xdb03dadaUL, 0xdceb8585UL, 0xddb06a6aUL, 0xde5d3232UL, 0xdf06ddddUL, +0xe0d8a8a8UL, 0xe1834747UL, 0xe26e1f1fUL, 0xe335f0f0UL, 0xe4ddafafUL, 0xe5864040UL, 0xe66b1818UL, 0xe730f7f7UL, +0xe8d2a6a6UL, 0xe9894949UL, 0xea641111UL, 0xeb3ffefeUL, 0xecd7a1a1UL, 0xed8c4e4eUL, 0xee611616UL, 0xef3af9f9UL, +0xf0ccb4b4UL, 0xf1975b5bUL, 0xf27a0303UL, 0xf321ececUL, 0xf4c9b3b3UL, 0xf5925c5cUL, 0xf67f0404UL, 0xf724ebebUL, 0xf8c6babaUL, 0xf99d5555UL, 0xfa700d0dUL, 0xfb2be2e2UL, 0xfcc3bdbdUL, 0xfd985252UL, 0xfe750a0aUL, 0xff2ee5e5UL -}, +}, { -0x00000000UL, 0xef01ef5bUL, 0xb702b7b6UL, 0x580358edUL, 0x07040705UL, 0xe805e85eUL, 0xb006b0b3UL, 0x5f075fe8UL, +0x00000000UL, 0xef01ef5bUL, 0xb702b7b6UL, 0x580358edUL, 0x07040705UL, 0xe805e85eUL, 0xb006b0b3UL, 0x5f075fe8UL, 0x0e080e0aUL, 0xe109e151UL, 0xb90ab9bcUL, 0x560b56e7UL, 0x090c090fUL, 0xe60de654UL, 0xbe0ebeb9UL, 0x510f51e2UL, -0x1c101c14UL, 0xf311f34fUL, 0xab12aba2UL, 0x441344f9UL, 0x1b141b11UL, 0xf415f44aUL, 0xac16aca7UL, 0x431743fcUL, -0x1218121eUL, 0xfd19fd45UL, 0xa51aa5a8UL, 0x4a1b4af3UL, 0x151c151bUL, 0xfa1dfa40UL, 0xa21ea2adUL, 0x4d1f4df6UL, -0x38203828UL, 0xd721d773UL, 0x8f228f9eUL, 0x602360c5UL, 0x3f243f2dUL, 0xd025d076UL, 0x8826889bUL, 0x672767c0UL, -0x36283622UL, 0xd929d979UL, 0x812a8194UL, 0x6e2b6ecfUL, 0x312c3127UL, 0xde2dde7cUL, 0x862e8691UL, 0x692f69caUL, -0x2430243cUL, 0xcb31cb67UL, 0x9332938aUL, 0x7c337cd1UL, 0x23342339UL, 0xcc35cc62UL, 0x9436948fUL, 0x7b377bd4UL, +0x1c101c14UL, 0xf311f34fUL, 0xab12aba2UL, 0x441344f9UL, 0x1b141b11UL, 0xf415f44aUL, 0xac16aca7UL, 0x431743fcUL, +0x1218121eUL, 0xfd19fd45UL, 0xa51aa5a8UL, 0x4a1b4af3UL, 0x151c151bUL, 0xfa1dfa40UL, 0xa21ea2adUL, 0x4d1f4df6UL, +0x38203828UL, 0xd721d773UL, 0x8f228f9eUL, 0x602360c5UL, 0x3f243f2dUL, 0xd025d076UL, 0x8826889bUL, 0x672767c0UL, +0x36283622UL, 0xd929d979UL, 0x812a8194UL, 0x6e2b6ecfUL, 0x312c3127UL, 0xde2dde7cUL, 0x862e8691UL, 0x692f69caUL, +0x2430243cUL, 0xcb31cb67UL, 0x9332938aUL, 0x7c337cd1UL, 0x23342339UL, 0xcc35cc62UL, 0x9436948fUL, 0x7b377bd4UL, 0x2a382a36UL, 0xc539c56dUL, 0x9d3a9d80UL, 0x723b72dbUL, 0x2d3c2d33UL, 0xc23dc268UL, 0x9a3e9a85UL, 0x753f75deUL, -0x70407050UL, 0x9f419f0bUL, 0xc742c7e6UL, 0x284328bdUL, 0x77447755UL, 0x9845980eUL, 0xc046c0e3UL, 0x2f472fb8UL, -0x7e487e5aUL, 0x91499101UL, 0xc94ac9ecUL, 0x264b26b7UL, 0x794c795fUL, 0x964d9604UL, 0xce4ecee9UL, 0x214f21b2UL, +0x70407050UL, 0x9f419f0bUL, 0xc742c7e6UL, 0x284328bdUL, 0x77447755UL, 0x9845980eUL, 0xc046c0e3UL, 0x2f472fb8UL, +0x7e487e5aUL, 0x91499101UL, 0xc94ac9ecUL, 0x264b26b7UL, 0x794c795fUL, 0x964d9604UL, 0xce4ecee9UL, 0x214f21b2UL, 0x6c506c44UL, 0x8351831fUL, 0xdb52dbf2UL, 0x345334a9UL, 0x6b546b41UL, 0x8455841aUL, 0xdc56dcf7UL, 0x335733acUL, -0x6258624eUL, 0x8d598d15UL, 0xd55ad5f8UL, 0x3a5b3aa3UL, 0x655c654bUL, 0x8a5d8a10UL, 0xd25ed2fdUL, 0x3d5f3da6UL, -0x48604878UL, 0xa761a723UL, 0xff62ffceUL, 0x10631095UL, 0x4f644f7dUL, 0xa065a026UL, 0xf866f8cbUL, 0x17671790UL, -0x46684672UL, 0xa969a929UL, 0xf16af1c4UL, 0x1e6b1e9fUL, 0x416c4177UL, 0xae6dae2cUL, 0xf66ef6c1UL, 0x196f199aUL, +0x6258624eUL, 0x8d598d15UL, 0xd55ad5f8UL, 0x3a5b3aa3UL, 0x655c654bUL, 0x8a5d8a10UL, 0xd25ed2fdUL, 0x3d5f3da6UL, +0x48604878UL, 0xa761a723UL, 0xff62ffceUL, 0x10631095UL, 0x4f644f7dUL, 0xa065a026UL, 0xf866f8cbUL, 0x17671790UL, +0x46684672UL, 0xa969a929UL, 0xf16af1c4UL, 0x1e6b1e9fUL, 0x416c4177UL, 0xae6dae2cUL, 0xf66ef6c1UL, 0x196f199aUL, 0x5470546cUL, 0xbb71bb37UL, 0xe372e3daUL, 0x0c730c81UL, 0x53745369UL, 0xbc75bc32UL, 0xe476e4dfUL, 0x0b770b84UL, -0x5a785a66UL, 0xb579b53dUL, 0xed7aedd0UL, 0x027b028bUL, 0x5d7c5d63UL, 0xb27db238UL, 0xea7eead5UL, 0x057f058eUL, +0x5a785a66UL, 0xb579b53dUL, 0xed7aedd0UL, 0x027b028bUL, 0x5d7c5d63UL, 0xb27db238UL, 0xea7eead5UL, 0x057f058eUL, 0xe080e0a0UL, 0x0f810ffbUL, 0x57825716UL, 0xb883b84dUL, 0xe784e7a5UL, 0x088508feUL, 0x50865013UL, 0xbf87bf48UL, 0xee88eeaaUL, 0x018901f1UL, 0x598a591cUL, 0xb68bb647UL, 0xe98ce9afUL, 0x068d06f4UL, 0x5e8e5e19UL, 0xb18fb142UL, -0xfc90fcb4UL, 0x139113efUL, 0x4b924b02UL, 0xa493a459UL, 0xfb94fbb1UL, 0x149514eaUL, 0x4c964c07UL, 0xa397a35cUL, -0xf298f2beUL, 0x1d991de5UL, 0x459a4508UL, 0xaa9baa53UL, 0xf59cf5bbUL, 0x1a9d1ae0UL, 0x429e420dUL, 0xad9fad56UL, -0xd8a0d888UL, 0x37a137d3UL, 0x6fa26f3eUL, 0x80a38065UL, 0xdfa4df8dUL, 0x30a530d6UL, 0x68a6683bUL, 0x87a78760UL, -0xd6a8d682UL, 0x39a939d9UL, 0x61aa6134UL, 0x8eab8e6fUL, 0xd1acd187UL, 0x3ead3edcUL, 0x66ae6631UL, 0x89af896aUL, -0xc4b0c49cUL, 0x2bb12bc7UL, 0x73b2732aUL, 0x9cb39c71UL, 0xc3b4c399UL, 0x2cb52cc2UL, 0x74b6742fUL, 0x9bb79b74UL, -0xcab8ca96UL, 0x25b925cdUL, 0x7dba7d20UL, 0x92bb927bUL, 0xcdbccd93UL, 0x22bd22c8UL, 0x7abe7a25UL, 0x95bf957eUL, -0x90c090f0UL, 0x7fc17fabUL, 0x27c22746UL, 0xc8c3c81dUL, 0x97c497f5UL, 0x78c578aeUL, 0x20c62043UL, 0xcfc7cf18UL, -0x9ec89efaUL, 0x71c971a1UL, 0x29ca294cUL, 0xc6cbc617UL, 0x99cc99ffUL, 0x76cd76a4UL, 0x2ece2e49UL, 0xc1cfc112UL, -0x8cd08ce4UL, 0x63d163bfUL, 0x3bd23b52UL, 0xd4d3d409UL, 0x8bd48be1UL, 0x64d564baUL, 0x3cd63c57UL, 0xd3d7d30cUL, -0x82d882eeUL, 0x6dd96db5UL, 0x35da3558UL, 0xdadbda03UL, 0x85dc85ebUL, 0x6add6ab0UL, 0x32de325dUL, 0xdddfdd06UL, -0xa8e0a8d8UL, 0x47e14783UL, 0x1fe21f6eUL, 0xf0e3f035UL, 0xafe4afddUL, 0x40e54086UL, 0x18e6186bUL, 0xf7e7f730UL, -0xa6e8a6d2UL, 0x49e94989UL, 0x11ea1164UL, 0xfeebfe3fUL, 0xa1eca1d7UL, 0x4eed4e8cUL, 0x16ee1661UL, 0xf9eff93aUL, -0xb4f0b4ccUL, 0x5bf15b97UL, 0x03f2037aUL, 0xecf3ec21UL, 0xb3f4b3c9UL, 0x5cf55c92UL, 0x04f6047fUL, 0xebf7eb24UL, +0xfc90fcb4UL, 0x139113efUL, 0x4b924b02UL, 0xa493a459UL, 0xfb94fbb1UL, 0x149514eaUL, 0x4c964c07UL, 0xa397a35cUL, +0xf298f2beUL, 0x1d991de5UL, 0x459a4508UL, 0xaa9baa53UL, 0xf59cf5bbUL, 0x1a9d1ae0UL, 0x429e420dUL, 0xad9fad56UL, +0xd8a0d888UL, 0x37a137d3UL, 0x6fa26f3eUL, 0x80a38065UL, 0xdfa4df8dUL, 0x30a530d6UL, 0x68a6683bUL, 0x87a78760UL, +0xd6a8d682UL, 0x39a939d9UL, 0x61aa6134UL, 0x8eab8e6fUL, 0xd1acd187UL, 0x3ead3edcUL, 0x66ae6631UL, 0x89af896aUL, +0xc4b0c49cUL, 0x2bb12bc7UL, 0x73b2732aUL, 0x9cb39c71UL, 0xc3b4c399UL, 0x2cb52cc2UL, 0x74b6742fUL, 0x9bb79b74UL, +0xcab8ca96UL, 0x25b925cdUL, 0x7dba7d20UL, 0x92bb927bUL, 0xcdbccd93UL, 0x22bd22c8UL, 0x7abe7a25UL, 0x95bf957eUL, +0x90c090f0UL, 0x7fc17fabUL, 0x27c22746UL, 0xc8c3c81dUL, 0x97c497f5UL, 0x78c578aeUL, 0x20c62043UL, 0xcfc7cf18UL, +0x9ec89efaUL, 0x71c971a1UL, 0x29ca294cUL, 0xc6cbc617UL, 0x99cc99ffUL, 0x76cd76a4UL, 0x2ece2e49UL, 0xc1cfc112UL, +0x8cd08ce4UL, 0x63d163bfUL, 0x3bd23b52UL, 0xd4d3d409UL, 0x8bd48be1UL, 0x64d564baUL, 0x3cd63c57UL, 0xd3d7d30cUL, +0x82d882eeUL, 0x6dd96db5UL, 0x35da3558UL, 0xdadbda03UL, 0x85dc85ebUL, 0x6add6ab0UL, 0x32de325dUL, 0xdddfdd06UL, +0xa8e0a8d8UL, 0x47e14783UL, 0x1fe21f6eUL, 0xf0e3f035UL, 0xafe4afddUL, 0x40e54086UL, 0x18e6186bUL, 0xf7e7f730UL, +0xa6e8a6d2UL, 0x49e94989UL, 0x11ea1164UL, 0xfeebfe3fUL, 0xa1eca1d7UL, 0x4eed4e8cUL, 0x16ee1661UL, 0xf9eff93aUL, +0xb4f0b4ccUL, 0x5bf15b97UL, 0x03f2037aUL, 0xecf3ec21UL, 0xb3f4b3c9UL, 0x5cf55c92UL, 0x04f6047fUL, 0xebf7eb24UL, 0xbaf8bac6UL, 0x55f9559dUL, 0x0dfa0d70UL, 0xe2fbe22bUL, 0xbdfcbdc3UL, 0x52fd5298UL, 0x0afe0a75UL, 0xe5ffe52eUL -}, +}, { -0x00000000UL, 0x5bef015bUL, 0xb6b702b6UL, 0xed5803edUL, 0x05070405UL, 0x5ee8055eUL, 0xb3b006b3UL, 0xe85f07e8UL, -0x0a0e080aUL, 0x51e10951UL, 0xbcb90abcUL, 0xe7560be7UL, 0x0f090c0fUL, 0x54e60d54UL, 0xb9be0eb9UL, 0xe2510fe2UL, -0x141c1014UL, 0x4ff3114fUL, 0xa2ab12a2UL, 0xf94413f9UL, 0x111b1411UL, 0x4af4154aUL, 0xa7ac16a7UL, 0xfc4317fcUL, -0x1e12181eUL, 0x45fd1945UL, 0xa8a51aa8UL, 0xf34a1bf3UL, 0x1b151c1bUL, 0x40fa1d40UL, 0xada21eadUL, 0xf64d1ff6UL, -0x28382028UL, 0x73d72173UL, 0x9e8f229eUL, 0xc56023c5UL, 0x2d3f242dUL, 0x76d02576UL, 0x9b88269bUL, 0xc06727c0UL, -0x22362822UL, 0x79d92979UL, 0x94812a94UL, 0xcf6e2bcfUL, 0x27312c27UL, 0x7cde2d7cUL, 0x91862e91UL, 0xca692fcaUL, -0x3c24303cUL, 0x67cb3167UL, 0x8a93328aUL, 0xd17c33d1UL, 0x39233439UL, 0x62cc3562UL, 0x8f94368fUL, 0xd47b37d4UL, +0x00000000UL, 0x5bef015bUL, 0xb6b702b6UL, 0xed5803edUL, 0x05070405UL, 0x5ee8055eUL, 0xb3b006b3UL, 0xe85f07e8UL, +0x0a0e080aUL, 0x51e10951UL, 0xbcb90abcUL, 0xe7560be7UL, 0x0f090c0fUL, 0x54e60d54UL, 0xb9be0eb9UL, 0xe2510fe2UL, +0x141c1014UL, 0x4ff3114fUL, 0xa2ab12a2UL, 0xf94413f9UL, 0x111b1411UL, 0x4af4154aUL, 0xa7ac16a7UL, 0xfc4317fcUL, +0x1e12181eUL, 0x45fd1945UL, 0xa8a51aa8UL, 0xf34a1bf3UL, 0x1b151c1bUL, 0x40fa1d40UL, 0xada21eadUL, 0xf64d1ff6UL, +0x28382028UL, 0x73d72173UL, 0x9e8f229eUL, 0xc56023c5UL, 0x2d3f242dUL, 0x76d02576UL, 0x9b88269bUL, 0xc06727c0UL, +0x22362822UL, 0x79d92979UL, 0x94812a94UL, 0xcf6e2bcfUL, 0x27312c27UL, 0x7cde2d7cUL, 0x91862e91UL, 0xca692fcaUL, +0x3c24303cUL, 0x67cb3167UL, 0x8a93328aUL, 0xd17c33d1UL, 0x39233439UL, 0x62cc3562UL, 0x8f94368fUL, 0xd47b37d4UL, 0x362a3836UL, 0x6dc5396dUL, 0x809d3a80UL, 0xdb723bdbUL, 0x332d3c33UL, 0x68c23d68UL, 0x859a3e85UL, 0xde753fdeUL, -0x50704050UL, 0x0b9f410bUL, 0xe6c742e6UL, 0xbd2843bdUL, 0x55774455UL, 0x0e98450eUL, 0xe3c046e3UL, 0xb82f47b8UL, -0x5a7e485aUL, 0x01914901UL, 0xecc94aecUL, 0xb7264bb7UL, 0x5f794c5fUL, 0x04964d04UL, 0xe9ce4ee9UL, 0xb2214fb2UL, -0x446c5044UL, 0x1f83511fUL, 0xf2db52f2UL, 0xa93453a9UL, 0x416b5441UL, 0x1a84551aUL, 0xf7dc56f7UL, 0xac3357acUL, -0x4e62584eUL, 0x158d5915UL, 0xf8d55af8UL, 0xa33a5ba3UL, 0x4b655c4bUL, 0x108a5d10UL, 0xfdd25efdUL, 0xa63d5fa6UL, -0x78486078UL, 0x23a76123UL, 0xceff62ceUL, 0x95106395UL, 0x7d4f647dUL, 0x26a06526UL, 0xcbf866cbUL, 0x90176790UL, -0x72466872UL, 0x29a96929UL, 0xc4f16ac4UL, 0x9f1e6b9fUL, 0x77416c77UL, 0x2cae6d2cUL, 0xc1f66ec1UL, 0x9a196f9aUL, -0x6c54706cUL, 0x37bb7137UL, 0xdae372daUL, 0x810c7381UL, 0x69537469UL, 0x32bc7532UL, 0xdfe476dfUL, 0x840b7784UL, -0x665a7866UL, 0x3db5793dUL, 0xd0ed7ad0UL, 0x8b027b8bUL, 0x635d7c63UL, 0x38b27d38UL, 0xd5ea7ed5UL, 0x8e057f8eUL, -0xa0e080a0UL, 0xfb0f81fbUL, 0x16578216UL, 0x4db8834dUL, 0xa5e784a5UL, 0xfe0885feUL, 0x13508613UL, 0x48bf8748UL, +0x50704050UL, 0x0b9f410bUL, 0xe6c742e6UL, 0xbd2843bdUL, 0x55774455UL, 0x0e98450eUL, 0xe3c046e3UL, 0xb82f47b8UL, +0x5a7e485aUL, 0x01914901UL, 0xecc94aecUL, 0xb7264bb7UL, 0x5f794c5fUL, 0x04964d04UL, 0xe9ce4ee9UL, 0xb2214fb2UL, +0x446c5044UL, 0x1f83511fUL, 0xf2db52f2UL, 0xa93453a9UL, 0x416b5441UL, 0x1a84551aUL, 0xf7dc56f7UL, 0xac3357acUL, +0x4e62584eUL, 0x158d5915UL, 0xf8d55af8UL, 0xa33a5ba3UL, 0x4b655c4bUL, 0x108a5d10UL, 0xfdd25efdUL, 0xa63d5fa6UL, +0x78486078UL, 0x23a76123UL, 0xceff62ceUL, 0x95106395UL, 0x7d4f647dUL, 0x26a06526UL, 0xcbf866cbUL, 0x90176790UL, +0x72466872UL, 0x29a96929UL, 0xc4f16ac4UL, 0x9f1e6b9fUL, 0x77416c77UL, 0x2cae6d2cUL, 0xc1f66ec1UL, 0x9a196f9aUL, +0x6c54706cUL, 0x37bb7137UL, 0xdae372daUL, 0x810c7381UL, 0x69537469UL, 0x32bc7532UL, 0xdfe476dfUL, 0x840b7784UL, +0x665a7866UL, 0x3db5793dUL, 0xd0ed7ad0UL, 0x8b027b8bUL, 0x635d7c63UL, 0x38b27d38UL, 0xd5ea7ed5UL, 0x8e057f8eUL, +0xa0e080a0UL, 0xfb0f81fbUL, 0x16578216UL, 0x4db8834dUL, 0xa5e784a5UL, 0xfe0885feUL, 0x13508613UL, 0x48bf8748UL, 0xaaee88aaUL, 0xf10189f1UL, 0x1c598a1cUL, 0x47b68b47UL, 0xafe98cafUL, 0xf4068df4UL, 0x195e8e19UL, 0x42b18f42UL, -0xb4fc90b4UL, 0xef1391efUL, 0x024b9202UL, 0x59a49359UL, 0xb1fb94b1UL, 0xea1495eaUL, 0x074c9607UL, 0x5ca3975cUL, -0xbef298beUL, 0xe51d99e5UL, 0x08459a08UL, 0x53aa9b53UL, 0xbbf59cbbUL, 0xe01a9de0UL, 0x0d429e0dUL, 0x56ad9f56UL, -0x88d8a088UL, 0xd337a1d3UL, 0x3e6fa23eUL, 0x6580a365UL, 0x8ddfa48dUL, 0xd630a5d6UL, 0x3b68a63bUL, 0x6087a760UL, -0x82d6a882UL, 0xd939a9d9UL, 0x3461aa34UL, 0x6f8eab6fUL, 0x87d1ac87UL, 0xdc3eaddcUL, 0x3166ae31UL, 0x6a89af6aUL, -0x9cc4b09cUL, 0xc72bb1c7UL, 0x2a73b22aUL, 0x719cb371UL, 0x99c3b499UL, 0xc22cb5c2UL, 0x2f74b62fUL, 0x749bb774UL, +0xb4fc90b4UL, 0xef1391efUL, 0x024b9202UL, 0x59a49359UL, 0xb1fb94b1UL, 0xea1495eaUL, 0x074c9607UL, 0x5ca3975cUL, +0xbef298beUL, 0xe51d99e5UL, 0x08459a08UL, 0x53aa9b53UL, 0xbbf59cbbUL, 0xe01a9de0UL, 0x0d429e0dUL, 0x56ad9f56UL, +0x88d8a088UL, 0xd337a1d3UL, 0x3e6fa23eUL, 0x6580a365UL, 0x8ddfa48dUL, 0xd630a5d6UL, 0x3b68a63bUL, 0x6087a760UL, +0x82d6a882UL, 0xd939a9d9UL, 0x3461aa34UL, 0x6f8eab6fUL, 0x87d1ac87UL, 0xdc3eaddcUL, 0x3166ae31UL, 0x6a89af6aUL, +0x9cc4b09cUL, 0xc72bb1c7UL, 0x2a73b22aUL, 0x719cb371UL, 0x99c3b499UL, 0xc22cb5c2UL, 0x2f74b62fUL, 0x749bb774UL, 0x96cab896UL, 0xcd25b9cdUL, 0x207dba20UL, 0x7b92bb7bUL, 0x93cdbc93UL, 0xc822bdc8UL, 0x257abe25UL, 0x7e95bf7eUL, -0xf090c0f0UL, 0xab7fc1abUL, 0x4627c246UL, 0x1dc8c31dUL, 0xf597c4f5UL, 0xae78c5aeUL, 0x4320c643UL, 0x18cfc718UL, -0xfa9ec8faUL, 0xa171c9a1UL, 0x4c29ca4cUL, 0x17c6cb17UL, 0xff99ccffUL, 0xa476cda4UL, 0x492ece49UL, 0x12c1cf12UL, -0xe48cd0e4UL, 0xbf63d1bfUL, 0x523bd252UL, 0x09d4d309UL, 0xe18bd4e1UL, 0xba64d5baUL, 0x573cd657UL, 0x0cd3d70cUL, -0xee82d8eeUL, 0xb56dd9b5UL, 0x5835da58UL, 0x03dadb03UL, 0xeb85dcebUL, 0xb06addb0UL, 0x5d32de5dUL, 0x06dddf06UL, -0xd8a8e0d8UL, 0x8347e183UL, 0x6e1fe26eUL, 0x35f0e335UL, 0xddafe4ddUL, 0x8640e586UL, 0x6b18e66bUL, 0x30f7e730UL, +0xf090c0f0UL, 0xab7fc1abUL, 0x4627c246UL, 0x1dc8c31dUL, 0xf597c4f5UL, 0xae78c5aeUL, 0x4320c643UL, 0x18cfc718UL, +0xfa9ec8faUL, 0xa171c9a1UL, 0x4c29ca4cUL, 0x17c6cb17UL, 0xff99ccffUL, 0xa476cda4UL, 0x492ece49UL, 0x12c1cf12UL, +0xe48cd0e4UL, 0xbf63d1bfUL, 0x523bd252UL, 0x09d4d309UL, 0xe18bd4e1UL, 0xba64d5baUL, 0x573cd657UL, 0x0cd3d70cUL, +0xee82d8eeUL, 0xb56dd9b5UL, 0x5835da58UL, 0x03dadb03UL, 0xeb85dcebUL, 0xb06addb0UL, 0x5d32de5dUL, 0x06dddf06UL, +0xd8a8e0d8UL, 0x8347e183UL, 0x6e1fe26eUL, 0x35f0e335UL, 0xddafe4ddUL, 0x8640e586UL, 0x6b18e66bUL, 0x30f7e730UL, 0xd2a6e8d2UL, 0x8949e989UL, 0x6411ea64UL, 0x3ffeeb3fUL, 0xd7a1ecd7UL, 0x8c4eed8cUL, 0x6116ee61UL, 0x3af9ef3aUL, -0xccb4f0ccUL, 0x975bf197UL, 0x7a03f27aUL, 0x21ecf321UL, 0xc9b3f4c9UL, 0x925cf592UL, 0x7f04f67fUL, 0x24ebf724UL, +0xccb4f0ccUL, 0x975bf197UL, 0x7a03f27aUL, 0x21ecf321UL, 0xc9b3f4c9UL, 0x925cf592UL, 0x7f04f67fUL, 0x24ebf724UL, 0xc6baf8c6UL, 0x9d55f99dUL, 0x700dfa70UL, 0x2be2fb2bUL, 0xc3bdfcc3UL, 0x9852fd98UL, 0x750afe75UL, 0x2ee5ff2eUL }}; -#ifdef LTC_TWOFISH_ALL_TABLES +#ifdef TWOFISH_ALL_TABLES /* the 4x8 RS transform */ static const ulong32 rs_tab0[256] = { -0x00000000LU, 0xa402a401LU, 0x05040502LU, 0xa106a103LU, 0x0a080a04LU, 0xae0aae05LU, 0x0f0c0f06LU, 0xab0eab07LU, -0x14101408LU, 0xb012b009LU, 0x1114110aLU, 0xb516b50bLU, 0x1e181e0cLU, 0xba1aba0dLU, 0x1b1c1b0eLU, 0xbf1ebf0fLU, -0x28202810LU, 0x8c228c11LU, 0x2d242d12LU, 0x89268913LU, 0x22282214LU, 0x862a8615LU, 0x272c2716LU, 0x832e8317LU, -0x3c303c18LU, 0x98329819LU, 0x3934391aLU, 0x9d369d1bLU, 0x3638361cLU, 0x923a921dLU, 0x333c331eLU, 0x973e971fLU, -0x50405020LU, 0xf442f421LU, 0x55445522LU, 0xf146f123LU, 0x5a485a24LU, 0xfe4afe25LU, 0x5f4c5f26LU, 0xfb4efb27LU, -0x44504428LU, 0xe052e029LU, 0x4154412aLU, 0xe556e52bLU, 0x4e584e2cLU, 0xea5aea2dLU, 0x4b5c4b2eLU, 0xef5eef2fLU, -0x78607830LU, 0xdc62dc31LU, 0x7d647d32LU, 0xd966d933LU, 0x72687234LU, 0xd66ad635LU, 0x776c7736LU, 0xd36ed337LU, -0x6c706c38LU, 0xc872c839LU, 0x6974693aLU, 0xcd76cd3bLU, 0x6678663cLU, 0xc27ac23dLU, 0x637c633eLU, 0xc77ec73fLU, -0xa080a040LU, 0x04820441LU, 0xa584a542LU, 0x01860143LU, 0xaa88aa44LU, 0x0e8a0e45LU, 0xaf8caf46LU, 0x0b8e0b47LU, -0xb490b448LU, 0x10921049LU, 0xb194b14aLU, 0x1596154bLU, 0xbe98be4cLU, 0x1a9a1a4dLU, 0xbb9cbb4eLU, 0x1f9e1f4fLU, -0x88a08850LU, 0x2ca22c51LU, 0x8da48d52LU, 0x29a62953LU, 0x82a88254LU, 0x26aa2655LU, 0x87ac8756LU, 0x23ae2357LU, -0x9cb09c58LU, 0x38b23859LU, 0x99b4995aLU, 0x3db63d5bLU, 0x96b8965cLU, 0x32ba325dLU, 0x93bc935eLU, 0x37be375fLU, -0xf0c0f060LU, 0x54c25461LU, 0xf5c4f562LU, 0x51c65163LU, 0xfac8fa64LU, 0x5eca5e65LU, 0xffccff66LU, 0x5bce5b67LU, -0xe4d0e468LU, 0x40d24069LU, 0xe1d4e16aLU, 0x45d6456bLU, 0xeed8ee6cLU, 0x4ada4a6dLU, 0xebdceb6eLU, 0x4fde4f6fLU, -0xd8e0d870LU, 0x7ce27c71LU, 0xdde4dd72LU, 0x79e67973LU, 0xd2e8d274LU, 0x76ea7675LU, 0xd7ecd776LU, 0x73ee7377LU, -0xccf0cc78LU, 0x68f26879LU, 0xc9f4c97aLU, 0x6df66d7bLU, 0xc6f8c67cLU, 0x62fa627dLU, 0xc3fcc37eLU, 0x67fe677fLU, -0x0d4d0d80LU, 0xa94fa981LU, 0x08490882LU, 0xac4bac83LU, 0x07450784LU, 0xa347a385LU, 0x02410286LU, 0xa643a687LU, -0x195d1988LU, 0xbd5fbd89LU, 0x1c591c8aLU, 0xb85bb88bLU, 0x1355138cLU, 0xb757b78dLU, 0x1651168eLU, 0xb253b28fLU, -0x256d2590LU, 0x816f8191LU, 0x20692092LU, 0x846b8493LU, 0x2f652f94LU, 0x8b678b95LU, 0x2a612a96LU, 0x8e638e97LU, -0x317d3198LU, 0x957f9599LU, 0x3479349aLU, 0x907b909bLU, 0x3b753b9cLU, 0x9f779f9dLU, 0x3e713e9eLU, 0x9a739a9fLU, -0x5d0d5da0LU, 0xf90ff9a1LU, 0x580958a2LU, 0xfc0bfca3LU, 0x570557a4LU, 0xf307f3a5LU, 0x520152a6LU, 0xf603f6a7LU, -0x491d49a8LU, 0xed1feda9LU, 0x4c194caaLU, 0xe81be8abLU, 0x431543acLU, 0xe717e7adLU, 0x461146aeLU, 0xe213e2afLU, -0x752d75b0LU, 0xd12fd1b1LU, 0x702970b2LU, 0xd42bd4b3LU, 0x7f257fb4LU, 0xdb27dbb5LU, 0x7a217ab6LU, 0xde23deb7LU, -0x613d61b8LU, 0xc53fc5b9LU, 0x643964baLU, 0xc03bc0bbLU, 0x6b356bbcLU, 0xcf37cfbdLU, 0x6e316ebeLU, 0xca33cabfLU, -0xadcdadc0LU, 0x09cf09c1LU, 0xa8c9a8c2LU, 0x0ccb0cc3LU, 0xa7c5a7c4LU, 0x03c703c5LU, 0xa2c1a2c6LU, 0x06c306c7LU, -0xb9ddb9c8LU, 0x1ddf1dc9LU, 0xbcd9bccaLU, 0x18db18cbLU, 0xb3d5b3ccLU, 0x17d717cdLU, 0xb6d1b6ceLU, 0x12d312cfLU, -0x85ed85d0LU, 0x21ef21d1LU, 0x80e980d2LU, 0x24eb24d3LU, 0x8fe58fd4LU, 0x2be72bd5LU, 0x8ae18ad6LU, 0x2ee32ed7LU, -0x91fd91d8LU, 0x35ff35d9LU, 0x94f994daLU, 0x30fb30dbLU, 0x9bf59bdcLU, 0x3ff73fddLU, 0x9ef19edeLU, 0x3af33adfLU, -0xfd8dfde0LU, 0x598f59e1LU, 0xf889f8e2LU, 0x5c8b5ce3LU, 0xf785f7e4LU, 0x538753e5LU, 0xf281f2e6LU, 0x568356e7LU, -0xe99de9e8LU, 0x4d9f4de9LU, 0xec99eceaLU, 0x489b48ebLU, 0xe395e3ecLU, 0x479747edLU, 0xe691e6eeLU, 0x429342efLU, -0xd5add5f0LU, 0x71af71f1LU, 0xd0a9d0f2LU, 0x74ab74f3LU, 0xdfa5dff4LU, 0x7ba77bf5LU, 0xdaa1daf6LU, 0x7ea37ef7LU, -0xc1bdc1f8LU, 0x65bf65f9LU, 0xc4b9c4faLU, 0x60bb60fbLU, 0xcbb5cbfcLU, 0x6fb76ffdLU, 0xceb1cefeLU, 0x6ab36affLU }; +0x00000000LU, 0xa402a401LU, 0x05040502LU, 0xa106a103LU, 0x0a080a04LU, 0xae0aae05LU, 0x0f0c0f06LU, 0xab0eab07LU, +0x14101408LU, 0xb012b009LU, 0x1114110aLU, 0xb516b50bLU, 0x1e181e0cLU, 0xba1aba0dLU, 0x1b1c1b0eLU, 0xbf1ebf0fLU, +0x28202810LU, 0x8c228c11LU, 0x2d242d12LU, 0x89268913LU, 0x22282214LU, 0x862a8615LU, 0x272c2716LU, 0x832e8317LU, +0x3c303c18LU, 0x98329819LU, 0x3934391aLU, 0x9d369d1bLU, 0x3638361cLU, 0x923a921dLU, 0x333c331eLU, 0x973e971fLU, +0x50405020LU, 0xf442f421LU, 0x55445522LU, 0xf146f123LU, 0x5a485a24LU, 0xfe4afe25LU, 0x5f4c5f26LU, 0xfb4efb27LU, +0x44504428LU, 0xe052e029LU, 0x4154412aLU, 0xe556e52bLU, 0x4e584e2cLU, 0xea5aea2dLU, 0x4b5c4b2eLU, 0xef5eef2fLU, +0x78607830LU, 0xdc62dc31LU, 0x7d647d32LU, 0xd966d933LU, 0x72687234LU, 0xd66ad635LU, 0x776c7736LU, 0xd36ed337LU, +0x6c706c38LU, 0xc872c839LU, 0x6974693aLU, 0xcd76cd3bLU, 0x6678663cLU, 0xc27ac23dLU, 0x637c633eLU, 0xc77ec73fLU, +0xa080a040LU, 0x04820441LU, 0xa584a542LU, 0x01860143LU, 0xaa88aa44LU, 0x0e8a0e45LU, 0xaf8caf46LU, 0x0b8e0b47LU, +0xb490b448LU, 0x10921049LU, 0xb194b14aLU, 0x1596154bLU, 0xbe98be4cLU, 0x1a9a1a4dLU, 0xbb9cbb4eLU, 0x1f9e1f4fLU, +0x88a08850LU, 0x2ca22c51LU, 0x8da48d52LU, 0x29a62953LU, 0x82a88254LU, 0x26aa2655LU, 0x87ac8756LU, 0x23ae2357LU, +0x9cb09c58LU, 0x38b23859LU, 0x99b4995aLU, 0x3db63d5bLU, 0x96b8965cLU, 0x32ba325dLU, 0x93bc935eLU, 0x37be375fLU, +0xf0c0f060LU, 0x54c25461LU, 0xf5c4f562LU, 0x51c65163LU, 0xfac8fa64LU, 0x5eca5e65LU, 0xffccff66LU, 0x5bce5b67LU, +0xe4d0e468LU, 0x40d24069LU, 0xe1d4e16aLU, 0x45d6456bLU, 0xeed8ee6cLU, 0x4ada4a6dLU, 0xebdceb6eLU, 0x4fde4f6fLU, +0xd8e0d870LU, 0x7ce27c71LU, 0xdde4dd72LU, 0x79e67973LU, 0xd2e8d274LU, 0x76ea7675LU, 0xd7ecd776LU, 0x73ee7377LU, +0xccf0cc78LU, 0x68f26879LU, 0xc9f4c97aLU, 0x6df66d7bLU, 0xc6f8c67cLU, 0x62fa627dLU, 0xc3fcc37eLU, 0x67fe677fLU, +0x0d4d0d80LU, 0xa94fa981LU, 0x08490882LU, 0xac4bac83LU, 0x07450784LU, 0xa347a385LU, 0x02410286LU, 0xa643a687LU, +0x195d1988LU, 0xbd5fbd89LU, 0x1c591c8aLU, 0xb85bb88bLU, 0x1355138cLU, 0xb757b78dLU, 0x1651168eLU, 0xb253b28fLU, +0x256d2590LU, 0x816f8191LU, 0x20692092LU, 0x846b8493LU, 0x2f652f94LU, 0x8b678b95LU, 0x2a612a96LU, 0x8e638e97LU, +0x317d3198LU, 0x957f9599LU, 0x3479349aLU, 0x907b909bLU, 0x3b753b9cLU, 0x9f779f9dLU, 0x3e713e9eLU, 0x9a739a9fLU, +0x5d0d5da0LU, 0xf90ff9a1LU, 0x580958a2LU, 0xfc0bfca3LU, 0x570557a4LU, 0xf307f3a5LU, 0x520152a6LU, 0xf603f6a7LU, +0x491d49a8LU, 0xed1feda9LU, 0x4c194caaLU, 0xe81be8abLU, 0x431543acLU, 0xe717e7adLU, 0x461146aeLU, 0xe213e2afLU, +0x752d75b0LU, 0xd12fd1b1LU, 0x702970b2LU, 0xd42bd4b3LU, 0x7f257fb4LU, 0xdb27dbb5LU, 0x7a217ab6LU, 0xde23deb7LU, +0x613d61b8LU, 0xc53fc5b9LU, 0x643964baLU, 0xc03bc0bbLU, 0x6b356bbcLU, 0xcf37cfbdLU, 0x6e316ebeLU, 0xca33cabfLU, +0xadcdadc0LU, 0x09cf09c1LU, 0xa8c9a8c2LU, 0x0ccb0cc3LU, 0xa7c5a7c4LU, 0x03c703c5LU, 0xa2c1a2c6LU, 0x06c306c7LU, +0xb9ddb9c8LU, 0x1ddf1dc9LU, 0xbcd9bccaLU, 0x18db18cbLU, 0xb3d5b3ccLU, 0x17d717cdLU, 0xb6d1b6ceLU, 0x12d312cfLU, +0x85ed85d0LU, 0x21ef21d1LU, 0x80e980d2LU, 0x24eb24d3LU, 0x8fe58fd4LU, 0x2be72bd5LU, 0x8ae18ad6LU, 0x2ee32ed7LU, +0x91fd91d8LU, 0x35ff35d9LU, 0x94f994daLU, 0x30fb30dbLU, 0x9bf59bdcLU, 0x3ff73fddLU, 0x9ef19edeLU, 0x3af33adfLU, +0xfd8dfde0LU, 0x598f59e1LU, 0xf889f8e2LU, 0x5c8b5ce3LU, 0xf785f7e4LU, 0x538753e5LU, 0xf281f2e6LU, 0x568356e7LU, +0xe99de9e8LU, 0x4d9f4de9LU, 0xec99eceaLU, 0x489b48ebLU, 0xe395e3ecLU, 0x479747edLU, 0xe691e6eeLU, 0x429342efLU, +0xd5add5f0LU, 0x71af71f1LU, 0xd0a9d0f2LU, 0x74ab74f3LU, 0xdfa5dff4LU, 0x7ba77bf5LU, 0xdaa1daf6LU, 0x7ea37ef7LU, +0xc1bdc1f8LU, 0x65bf65f9LU, 0xc4b9c4faLU, 0x60bb60fbLU, 0xcbb5cbfcLU, 0x6fb76ffdLU, 0xceb1cefeLU, 0x6ab36affLU }; static const ulong32 rs_tab1[256] = { -0x00000000LU, 0x55a156a4LU, 0xaa0fac05LU, 0xffaefaa1LU, 0x191e150aLU, 0x4cbf43aeLU, 0xb311b90fLU, 0xe6b0efabLU, -0x323c2a14LU, 0x679d7cb0LU, 0x98338611LU, 0xcd92d0b5LU, 0x2b223f1eLU, 0x7e8369baLU, 0x812d931bLU, 0xd48cc5bfLU, -0x64785428LU, 0x31d9028cLU, 0xce77f82dLU, 0x9bd6ae89LU, 0x7d664122LU, 0x28c71786LU, 0xd769ed27LU, 0x82c8bb83LU, -0x56447e3cLU, 0x03e52898LU, 0xfc4bd239LU, 0xa9ea849dLU, 0x4f5a6b36LU, 0x1afb3d92LU, 0xe555c733LU, 0xb0f49197LU, -0xc8f0a850LU, 0x9d51fef4LU, 0x62ff0455LU, 0x375e52f1LU, 0xd1eebd5aLU, 0x844febfeLU, 0x7be1115fLU, 0x2e4047fbLU, -0xfacc8244LU, 0xaf6dd4e0LU, 0x50c32e41LU, 0x056278e5LU, 0xe3d2974eLU, 0xb673c1eaLU, 0x49dd3b4bLU, 0x1c7c6defLU, -0xac88fc78LU, 0xf929aadcLU, 0x0687507dLU, 0x532606d9LU, 0xb596e972LU, 0xe037bfd6LU, 0x1f994577LU, 0x4a3813d3LU, -0x9eb4d66cLU, 0xcb1580c8LU, 0x34bb7a69LU, 0x611a2ccdLU, 0x87aac366LU, 0xd20b95c2LU, 0x2da56f63LU, 0x780439c7LU, -0xddad1da0LU, 0x880c4b04LU, 0x77a2b1a5LU, 0x2203e701LU, 0xc4b308aaLU, 0x91125e0eLU, 0x6ebca4afLU, 0x3b1df20bLU, -0xef9137b4LU, 0xba306110LU, 0x459e9bb1LU, 0x103fcd15LU, 0xf68f22beLU, 0xa32e741aLU, 0x5c808ebbLU, 0x0921d81fLU, -0xb9d54988LU, 0xec741f2cLU, 0x13dae58dLU, 0x467bb329LU, 0xa0cb5c82LU, 0xf56a0a26LU, 0x0ac4f087LU, 0x5f65a623LU, -0x8be9639cLU, 0xde483538LU, 0x21e6cf99LU, 0x7447993dLU, 0x92f77696LU, 0xc7562032LU, 0x38f8da93LU, 0x6d598c37LU, -0x155db5f0LU, 0x40fce354LU, 0xbf5219f5LU, 0xeaf34f51LU, 0x0c43a0faLU, 0x59e2f65eLU, 0xa64c0cffLU, 0xf3ed5a5bLU, -0x27619fe4LU, 0x72c0c940LU, 0x8d6e33e1LU, 0xd8cf6545LU, 0x3e7f8aeeLU, 0x6bdedc4aLU, 0x947026ebLU, 0xc1d1704fLU, -0x7125e1d8LU, 0x2484b77cLU, 0xdb2a4dddLU, 0x8e8b1b79LU, 0x683bf4d2LU, 0x3d9aa276LU, 0xc23458d7LU, 0x97950e73LU, +0x00000000LU, 0x55a156a4LU, 0xaa0fac05LU, 0xffaefaa1LU, 0x191e150aLU, 0x4cbf43aeLU, 0xb311b90fLU, 0xe6b0efabLU, +0x323c2a14LU, 0x679d7cb0LU, 0x98338611LU, 0xcd92d0b5LU, 0x2b223f1eLU, 0x7e8369baLU, 0x812d931bLU, 0xd48cc5bfLU, +0x64785428LU, 0x31d9028cLU, 0xce77f82dLU, 0x9bd6ae89LU, 0x7d664122LU, 0x28c71786LU, 0xd769ed27LU, 0x82c8bb83LU, +0x56447e3cLU, 0x03e52898LU, 0xfc4bd239LU, 0xa9ea849dLU, 0x4f5a6b36LU, 0x1afb3d92LU, 0xe555c733LU, 0xb0f49197LU, +0xc8f0a850LU, 0x9d51fef4LU, 0x62ff0455LU, 0x375e52f1LU, 0xd1eebd5aLU, 0x844febfeLU, 0x7be1115fLU, 0x2e4047fbLU, +0xfacc8244LU, 0xaf6dd4e0LU, 0x50c32e41LU, 0x056278e5LU, 0xe3d2974eLU, 0xb673c1eaLU, 0x49dd3b4bLU, 0x1c7c6defLU, +0xac88fc78LU, 0xf929aadcLU, 0x0687507dLU, 0x532606d9LU, 0xb596e972LU, 0xe037bfd6LU, 0x1f994577LU, 0x4a3813d3LU, +0x9eb4d66cLU, 0xcb1580c8LU, 0x34bb7a69LU, 0x611a2ccdLU, 0x87aac366LU, 0xd20b95c2LU, 0x2da56f63LU, 0x780439c7LU, +0xddad1da0LU, 0x880c4b04LU, 0x77a2b1a5LU, 0x2203e701LU, 0xc4b308aaLU, 0x91125e0eLU, 0x6ebca4afLU, 0x3b1df20bLU, +0xef9137b4LU, 0xba306110LU, 0x459e9bb1LU, 0x103fcd15LU, 0xf68f22beLU, 0xa32e741aLU, 0x5c808ebbLU, 0x0921d81fLU, +0xb9d54988LU, 0xec741f2cLU, 0x13dae58dLU, 0x467bb329LU, 0xa0cb5c82LU, 0xf56a0a26LU, 0x0ac4f087LU, 0x5f65a623LU, +0x8be9639cLU, 0xde483538LU, 0x21e6cf99LU, 0x7447993dLU, 0x92f77696LU, 0xc7562032LU, 0x38f8da93LU, 0x6d598c37LU, +0x155db5f0LU, 0x40fce354LU, 0xbf5219f5LU, 0xeaf34f51LU, 0x0c43a0faLU, 0x59e2f65eLU, 0xa64c0cffLU, 0xf3ed5a5bLU, +0x27619fe4LU, 0x72c0c940LU, 0x8d6e33e1LU, 0xd8cf6545LU, 0x3e7f8aeeLU, 0x6bdedc4aLU, 0x947026ebLU, 0xc1d1704fLU, +0x7125e1d8LU, 0x2484b77cLU, 0xdb2a4dddLU, 0x8e8b1b79LU, 0x683bf4d2LU, 0x3d9aa276LU, 0xc23458d7LU, 0x97950e73LU, 0x4319cbccLU, 0x16b89d68LU, 0xe91667c9LU, 0xbcb7316dLU, 0x5a07dec6LU, 0x0fa68862LU, 0xf00872c3LU, 0xa5a92467LU, -0xf7173a0dLU, 0xa2b66ca9LU, 0x5d189608LU, 0x08b9c0acLU, 0xee092f07LU, 0xbba879a3LU, 0x44068302LU, 0x11a7d5a6LU, -0xc52b1019LU, 0x908a46bdLU, 0x6f24bc1cLU, 0x3a85eab8LU, 0xdc350513LU, 0x899453b7LU, 0x763aa916LU, 0x239bffb2LU, -0x936f6e25LU, 0xc6ce3881LU, 0x3960c220LU, 0x6cc19484LU, 0x8a717b2fLU, 0xdfd02d8bLU, 0x207ed72aLU, 0x75df818eLU, +0xf7173a0dLU, 0xa2b66ca9LU, 0x5d189608LU, 0x08b9c0acLU, 0xee092f07LU, 0xbba879a3LU, 0x44068302LU, 0x11a7d5a6LU, +0xc52b1019LU, 0x908a46bdLU, 0x6f24bc1cLU, 0x3a85eab8LU, 0xdc350513LU, 0x899453b7LU, 0x763aa916LU, 0x239bffb2LU, +0x936f6e25LU, 0xc6ce3881LU, 0x3960c220LU, 0x6cc19484LU, 0x8a717b2fLU, 0xdfd02d8bLU, 0x207ed72aLU, 0x75df818eLU, 0xa1534431LU, 0xf4f21295LU, 0x0b5ce834LU, 0x5efdbe90LU, 0xb84d513bLU, 0xedec079fLU, 0x1242fd3eLU, 0x47e3ab9aLU, -0x3fe7925dLU, 0x6a46c4f9LU, 0x95e83e58LU, 0xc04968fcLU, 0x26f98757LU, 0x7358d1f3LU, 0x8cf62b52LU, 0xd9577df6LU, +0x3fe7925dLU, 0x6a46c4f9LU, 0x95e83e58LU, 0xc04968fcLU, 0x26f98757LU, 0x7358d1f3LU, 0x8cf62b52LU, 0xd9577df6LU, 0x0ddbb849LU, 0x587aeeedLU, 0xa7d4144cLU, 0xf27542e8LU, 0x14c5ad43LU, 0x4164fbe7LU, 0xbeca0146LU, 0xeb6b57e2LU, -0x5b9fc675LU, 0x0e3e90d1LU, 0xf1906a70LU, 0xa4313cd4LU, 0x4281d37fLU, 0x172085dbLU, 0xe88e7f7aLU, 0xbd2f29deLU, -0x69a3ec61LU, 0x3c02bac5LU, 0xc3ac4064LU, 0x960d16c0LU, 0x70bdf96bLU, 0x251cafcfLU, 0xdab2556eLU, 0x8f1303caLU, -0x2aba27adLU, 0x7f1b7109LU, 0x80b58ba8LU, 0xd514dd0cLU, 0x33a432a7LU, 0x66056403LU, 0x99ab9ea2LU, 0xcc0ac806LU, -0x18860db9LU, 0x4d275b1dLU, 0xb289a1bcLU, 0xe728f718LU, 0x019818b3LU, 0x54394e17LU, 0xab97b4b6LU, 0xfe36e212LU, -0x4ec27385LU, 0x1b632521LU, 0xe4cddf80LU, 0xb16c8924LU, 0x57dc668fLU, 0x027d302bLU, 0xfdd3ca8aLU, 0xa8729c2eLU, -0x7cfe5991LU, 0x295f0f35LU, 0xd6f1f594LU, 0x8350a330LU, 0x65e04c9bLU, 0x30411a3fLU, 0xcfefe09eLU, 0x9a4eb63aLU, -0xe24a8ffdLU, 0xb7ebd959LU, 0x484523f8LU, 0x1de4755cLU, 0xfb549af7LU, 0xaef5cc53LU, 0x515b36f2LU, 0x04fa6056LU, -0xd076a5e9LU, 0x85d7f34dLU, 0x7a7909ecLU, 0x2fd85f48LU, 0xc968b0e3LU, 0x9cc9e647LU, 0x63671ce6LU, 0x36c64a42LU, -0x8632dbd5LU, 0xd3938d71LU, 0x2c3d77d0LU, 0x799c2174LU, 0x9f2ccedfLU, 0xca8d987bLU, 0x352362daLU, 0x6082347eLU, -0xb40ef1c1LU, 0xe1afa765LU, 0x1e015dc4LU, 0x4ba00b60LU, 0xad10e4cbLU, 0xf8b1b26fLU, 0x071f48ceLU, 0x52be1e6aLU }; +0x5b9fc675LU, 0x0e3e90d1LU, 0xf1906a70LU, 0xa4313cd4LU, 0x4281d37fLU, 0x172085dbLU, 0xe88e7f7aLU, 0xbd2f29deLU, +0x69a3ec61LU, 0x3c02bac5LU, 0xc3ac4064LU, 0x960d16c0LU, 0x70bdf96bLU, 0x251cafcfLU, 0xdab2556eLU, 0x8f1303caLU, +0x2aba27adLU, 0x7f1b7109LU, 0x80b58ba8LU, 0xd514dd0cLU, 0x33a432a7LU, 0x66056403LU, 0x99ab9ea2LU, 0xcc0ac806LU, +0x18860db9LU, 0x4d275b1dLU, 0xb289a1bcLU, 0xe728f718LU, 0x019818b3LU, 0x54394e17LU, 0xab97b4b6LU, 0xfe36e212LU, +0x4ec27385LU, 0x1b632521LU, 0xe4cddf80LU, 0xb16c8924LU, 0x57dc668fLU, 0x027d302bLU, 0xfdd3ca8aLU, 0xa8729c2eLU, +0x7cfe5991LU, 0x295f0f35LU, 0xd6f1f594LU, 0x8350a330LU, 0x65e04c9bLU, 0x30411a3fLU, 0xcfefe09eLU, 0x9a4eb63aLU, +0xe24a8ffdLU, 0xb7ebd959LU, 0x484523f8LU, 0x1de4755cLU, 0xfb549af7LU, 0xaef5cc53LU, 0x515b36f2LU, 0x04fa6056LU, +0xd076a5e9LU, 0x85d7f34dLU, 0x7a7909ecLU, 0x2fd85f48LU, 0xc968b0e3LU, 0x9cc9e647LU, 0x63671ce6LU, 0x36c64a42LU, +0x8632dbd5LU, 0xd3938d71LU, 0x2c3d77d0LU, 0x799c2174LU, 0x9f2ccedfLU, 0xca8d987bLU, 0x352362daLU, 0x6082347eLU, +0xb40ef1c1LU, 0xe1afa765LU, 0x1e015dc4LU, 0x4ba00b60LU, 0xad10e4cbLU, 0xf8b1b26fLU, 0x071f48ceLU, 0x52be1e6aLU }; static const ulong32 rs_tab2[256] = { -0x00000000LU, 0x87fc8255LU, 0x43b549aaLU, 0xc449cbffLU, 0x86279219LU, 0x01db104cLU, 0xc592dbb3LU, 0x426e59e6LU, -0x414e6932LU, 0xc6b2eb67LU, 0x02fb2098LU, 0x8507a2cdLU, 0xc769fb2bLU, 0x4095797eLU, 0x84dcb281LU, 0x032030d4LU, -0x829cd264LU, 0x05605031LU, 0xc1299bceLU, 0x46d5199bLU, 0x04bb407dLU, 0x8347c228LU, 0x470e09d7LU, 0xc0f28b82LU, -0xc3d2bb56LU, 0x442e3903LU, 0x8067f2fcLU, 0x079b70a9LU, 0x45f5294fLU, 0xc209ab1aLU, 0x064060e5LU, 0x81bce2b0LU, -0x4975e9c8LU, 0xce896b9dLU, 0x0ac0a062LU, 0x8d3c2237LU, 0xcf527bd1LU, 0x48aef984LU, 0x8ce7327bLU, 0x0b1bb02eLU, -0x083b80faLU, 0x8fc702afLU, 0x4b8ec950LU, 0xcc724b05LU, 0x8e1c12e3LU, 0x09e090b6LU, 0xcda95b49LU, 0x4a55d91cLU, -0xcbe93bacLU, 0x4c15b9f9LU, 0x885c7206LU, 0x0fa0f053LU, 0x4dcea9b5LU, 0xca322be0LU, 0x0e7be01fLU, 0x8987624aLU, -0x8aa7529eLU, 0x0d5bd0cbLU, 0xc9121b34LU, 0x4eee9961LU, 0x0c80c087LU, 0x8b7c42d2LU, 0x4f35892dLU, 0xc8c90b78LU, -0x92ea9fddLU, 0x15161d88LU, 0xd15fd677LU, 0x56a35422LU, 0x14cd0dc4LU, 0x93318f91LU, 0x5778446eLU, 0xd084c63bLU, -0xd3a4f6efLU, 0x545874baLU, 0x9011bf45LU, 0x17ed3d10LU, 0x558364f6LU, 0xd27fe6a3LU, 0x16362d5cLU, 0x91caaf09LU, -0x10764db9LU, 0x978acfecLU, 0x53c30413LU, 0xd43f8646LU, 0x9651dfa0LU, 0x11ad5df5LU, 0xd5e4960aLU, 0x5218145fLU, -0x5138248bLU, 0xd6c4a6deLU, 0x128d6d21LU, 0x9571ef74LU, 0xd71fb692LU, 0x50e334c7LU, 0x94aaff38LU, 0x13567d6dLU, -0xdb9f7615LU, 0x5c63f440LU, 0x982a3fbfLU, 0x1fd6bdeaLU, 0x5db8e40cLU, 0xda446659LU, 0x1e0dada6LU, 0x99f12ff3LU, -0x9ad11f27LU, 0x1d2d9d72LU, 0xd964568dLU, 0x5e98d4d8LU, 0x1cf68d3eLU, 0x9b0a0f6bLU, 0x5f43c494LU, 0xd8bf46c1LU, -0x5903a471LU, 0xdeff2624LU, 0x1ab6eddbLU, 0x9d4a6f8eLU, 0xdf243668LU, 0x58d8b43dLU, 0x9c917fc2LU, 0x1b6dfd97LU, -0x184dcd43LU, 0x9fb14f16LU, 0x5bf884e9LU, 0xdc0406bcLU, 0x9e6a5f5aLU, 0x1996dd0fLU, 0xdddf16f0LU, 0x5a2394a5LU, -0x699973f7LU, 0xee65f1a2LU, 0x2a2c3a5dLU, 0xadd0b808LU, 0xefbee1eeLU, 0x684263bbLU, 0xac0ba844LU, 0x2bf72a11LU, -0x28d71ac5LU, 0xaf2b9890LU, 0x6b62536fLU, 0xec9ed13aLU, 0xaef088dcLU, 0x290c0a89LU, 0xed45c176LU, 0x6ab94323LU, -0xeb05a193LU, 0x6cf923c6LU, 0xa8b0e839LU, 0x2f4c6a6cLU, 0x6d22338aLU, 0xeadeb1dfLU, 0x2e977a20LU, 0xa96bf875LU, -0xaa4bc8a1LU, 0x2db74af4LU, 0xe9fe810bLU, 0x6e02035eLU, 0x2c6c5ab8LU, 0xab90d8edLU, 0x6fd91312LU, 0xe8259147LU, -0x20ec9a3fLU, 0xa710186aLU, 0x6359d395LU, 0xe4a551c0LU, 0xa6cb0826LU, 0x21378a73LU, 0xe57e418cLU, 0x6282c3d9LU, -0x61a2f30dLU, 0xe65e7158LU, 0x2217baa7LU, 0xa5eb38f2LU, 0xe7856114LU, 0x6079e341LU, 0xa43028beLU, 0x23ccaaebLU, -0xa270485bLU, 0x258cca0eLU, 0xe1c501f1LU, 0x663983a4LU, 0x2457da42LU, 0xa3ab5817LU, 0x67e293e8LU, 0xe01e11bdLU, -0xe33e2169LU, 0x64c2a33cLU, 0xa08b68c3LU, 0x2777ea96LU, 0x6519b370LU, 0xe2e53125LU, 0x26acfadaLU, 0xa150788fLU, -0xfb73ec2aLU, 0x7c8f6e7fLU, 0xb8c6a580LU, 0x3f3a27d5LU, 0x7d547e33LU, 0xfaa8fc66LU, 0x3ee13799LU, 0xb91db5ccLU, -0xba3d8518LU, 0x3dc1074dLU, 0xf988ccb2LU, 0x7e744ee7LU, 0x3c1a1701LU, 0xbbe69554LU, 0x7faf5eabLU, 0xf853dcfeLU, -0x79ef3e4eLU, 0xfe13bc1bLU, 0x3a5a77e4LU, 0xbda6f5b1LU, 0xffc8ac57LU, 0x78342e02LU, 0xbc7de5fdLU, 0x3b8167a8LU, -0x38a1577cLU, 0xbf5dd529LU, 0x7b141ed6LU, 0xfce89c83LU, 0xbe86c565LU, 0x397a4730LU, 0xfd338ccfLU, 0x7acf0e9aLU, -0xb20605e2LU, 0x35fa87b7LU, 0xf1b34c48LU, 0x764fce1dLU, 0x342197fbLU, 0xb3dd15aeLU, 0x7794de51LU, 0xf0685c04LU, -0xf3486cd0LU, 0x74b4ee85LU, 0xb0fd257aLU, 0x3701a72fLU, 0x756ffec9LU, 0xf2937c9cLU, 0x36dab763LU, 0xb1263536LU, -0x309ad786LU, 0xb76655d3LU, 0x732f9e2cLU, 0xf4d31c79LU, 0xb6bd459fLU, 0x3141c7caLU, 0xf5080c35LU, 0x72f48e60LU, -0x71d4beb4LU, 0xf6283ce1LU, 0x3261f71eLU, 0xb59d754bLU, 0xf7f32cadLU, 0x700faef8LU, 0xb4466507LU, 0x33bae752LU }; +0x00000000LU, 0x87fc8255LU, 0x43b549aaLU, 0xc449cbffLU, 0x86279219LU, 0x01db104cLU, 0xc592dbb3LU, 0x426e59e6LU, +0x414e6932LU, 0xc6b2eb67LU, 0x02fb2098LU, 0x8507a2cdLU, 0xc769fb2bLU, 0x4095797eLU, 0x84dcb281LU, 0x032030d4LU, +0x829cd264LU, 0x05605031LU, 0xc1299bceLU, 0x46d5199bLU, 0x04bb407dLU, 0x8347c228LU, 0x470e09d7LU, 0xc0f28b82LU, +0xc3d2bb56LU, 0x442e3903LU, 0x8067f2fcLU, 0x079b70a9LU, 0x45f5294fLU, 0xc209ab1aLU, 0x064060e5LU, 0x81bce2b0LU, +0x4975e9c8LU, 0xce896b9dLU, 0x0ac0a062LU, 0x8d3c2237LU, 0xcf527bd1LU, 0x48aef984LU, 0x8ce7327bLU, 0x0b1bb02eLU, +0x083b80faLU, 0x8fc702afLU, 0x4b8ec950LU, 0xcc724b05LU, 0x8e1c12e3LU, 0x09e090b6LU, 0xcda95b49LU, 0x4a55d91cLU, +0xcbe93bacLU, 0x4c15b9f9LU, 0x885c7206LU, 0x0fa0f053LU, 0x4dcea9b5LU, 0xca322be0LU, 0x0e7be01fLU, 0x8987624aLU, +0x8aa7529eLU, 0x0d5bd0cbLU, 0xc9121b34LU, 0x4eee9961LU, 0x0c80c087LU, 0x8b7c42d2LU, 0x4f35892dLU, 0xc8c90b78LU, +0x92ea9fddLU, 0x15161d88LU, 0xd15fd677LU, 0x56a35422LU, 0x14cd0dc4LU, 0x93318f91LU, 0x5778446eLU, 0xd084c63bLU, +0xd3a4f6efLU, 0x545874baLU, 0x9011bf45LU, 0x17ed3d10LU, 0x558364f6LU, 0xd27fe6a3LU, 0x16362d5cLU, 0x91caaf09LU, +0x10764db9LU, 0x978acfecLU, 0x53c30413LU, 0xd43f8646LU, 0x9651dfa0LU, 0x11ad5df5LU, 0xd5e4960aLU, 0x5218145fLU, +0x5138248bLU, 0xd6c4a6deLU, 0x128d6d21LU, 0x9571ef74LU, 0xd71fb692LU, 0x50e334c7LU, 0x94aaff38LU, 0x13567d6dLU, +0xdb9f7615LU, 0x5c63f440LU, 0x982a3fbfLU, 0x1fd6bdeaLU, 0x5db8e40cLU, 0xda446659LU, 0x1e0dada6LU, 0x99f12ff3LU, +0x9ad11f27LU, 0x1d2d9d72LU, 0xd964568dLU, 0x5e98d4d8LU, 0x1cf68d3eLU, 0x9b0a0f6bLU, 0x5f43c494LU, 0xd8bf46c1LU, +0x5903a471LU, 0xdeff2624LU, 0x1ab6eddbLU, 0x9d4a6f8eLU, 0xdf243668LU, 0x58d8b43dLU, 0x9c917fc2LU, 0x1b6dfd97LU, +0x184dcd43LU, 0x9fb14f16LU, 0x5bf884e9LU, 0xdc0406bcLU, 0x9e6a5f5aLU, 0x1996dd0fLU, 0xdddf16f0LU, 0x5a2394a5LU, +0x699973f7LU, 0xee65f1a2LU, 0x2a2c3a5dLU, 0xadd0b808LU, 0xefbee1eeLU, 0x684263bbLU, 0xac0ba844LU, 0x2bf72a11LU, +0x28d71ac5LU, 0xaf2b9890LU, 0x6b62536fLU, 0xec9ed13aLU, 0xaef088dcLU, 0x290c0a89LU, 0xed45c176LU, 0x6ab94323LU, +0xeb05a193LU, 0x6cf923c6LU, 0xa8b0e839LU, 0x2f4c6a6cLU, 0x6d22338aLU, 0xeadeb1dfLU, 0x2e977a20LU, 0xa96bf875LU, +0xaa4bc8a1LU, 0x2db74af4LU, 0xe9fe810bLU, 0x6e02035eLU, 0x2c6c5ab8LU, 0xab90d8edLU, 0x6fd91312LU, 0xe8259147LU, +0x20ec9a3fLU, 0xa710186aLU, 0x6359d395LU, 0xe4a551c0LU, 0xa6cb0826LU, 0x21378a73LU, 0xe57e418cLU, 0x6282c3d9LU, +0x61a2f30dLU, 0xe65e7158LU, 0x2217baa7LU, 0xa5eb38f2LU, 0xe7856114LU, 0x6079e341LU, 0xa43028beLU, 0x23ccaaebLU, +0xa270485bLU, 0x258cca0eLU, 0xe1c501f1LU, 0x663983a4LU, 0x2457da42LU, 0xa3ab5817LU, 0x67e293e8LU, 0xe01e11bdLU, +0xe33e2169LU, 0x64c2a33cLU, 0xa08b68c3LU, 0x2777ea96LU, 0x6519b370LU, 0xe2e53125LU, 0x26acfadaLU, 0xa150788fLU, +0xfb73ec2aLU, 0x7c8f6e7fLU, 0xb8c6a580LU, 0x3f3a27d5LU, 0x7d547e33LU, 0xfaa8fc66LU, 0x3ee13799LU, 0xb91db5ccLU, +0xba3d8518LU, 0x3dc1074dLU, 0xf988ccb2LU, 0x7e744ee7LU, 0x3c1a1701LU, 0xbbe69554LU, 0x7faf5eabLU, 0xf853dcfeLU, +0x79ef3e4eLU, 0xfe13bc1bLU, 0x3a5a77e4LU, 0xbda6f5b1LU, 0xffc8ac57LU, 0x78342e02LU, 0xbc7de5fdLU, 0x3b8167a8LU, +0x38a1577cLU, 0xbf5dd529LU, 0x7b141ed6LU, 0xfce89c83LU, 0xbe86c565LU, 0x397a4730LU, 0xfd338ccfLU, 0x7acf0e9aLU, +0xb20605e2LU, 0x35fa87b7LU, 0xf1b34c48LU, 0x764fce1dLU, 0x342197fbLU, 0xb3dd15aeLU, 0x7794de51LU, 0xf0685c04LU, +0xf3486cd0LU, 0x74b4ee85LU, 0xb0fd257aLU, 0x3701a72fLU, 0x756ffec9LU, 0xf2937c9cLU, 0x36dab763LU, 0xb1263536LU, +0x309ad786LU, 0xb76655d3LU, 0x732f9e2cLU, 0xf4d31c79LU, 0xb6bd459fLU, 0x3141c7caLU, 0xf5080c35LU, 0x72f48e60LU, +0x71d4beb4LU, 0xf6283ce1LU, 0x3261f71eLU, 0xb59d754bLU, 0xf7f32cadLU, 0x700faef8LU, 0xb4466507LU, 0x33bae752LU }; static const ulong32 rs_tab3[256] = { -0x00000000LU, 0x5ac1f387LU, 0xb4cfab43LU, 0xee0e58c4LU, 0x25d31b86LU, 0x7f12e801LU, 0x911cb0c5LU, 0xcbdd4342LU, -0x4aeb3641LU, 0x102ac5c6LU, 0xfe249d02LU, 0xa4e56e85LU, 0x6f382dc7LU, 0x35f9de40LU, 0xdbf78684LU, 0x81367503LU, -0x949b6c82LU, 0xce5a9f05LU, 0x2054c7c1LU, 0x7a953446LU, 0xb1487704LU, 0xeb898483LU, 0x0587dc47LU, 0x5f462fc0LU, +0x00000000LU, 0x5ac1f387LU, 0xb4cfab43LU, 0xee0e58c4LU, 0x25d31b86LU, 0x7f12e801LU, 0x911cb0c5LU, 0xcbdd4342LU, +0x4aeb3641LU, 0x102ac5c6LU, 0xfe249d02LU, 0xa4e56e85LU, 0x6f382dc7LU, 0x35f9de40LU, 0xdbf78684LU, 0x81367503LU, +0x949b6c82LU, 0xce5a9f05LU, 0x2054c7c1LU, 0x7a953446LU, 0xb1487704LU, 0xeb898483LU, 0x0587dc47LU, 0x5f462fc0LU, 0xde705ac3LU, 0x84b1a944LU, 0x6abff180LU, 0x307e0207LU, 0xfba34145LU, 0xa162b2c2LU, 0x4f6cea06LU, 0x15ad1981LU, -0x657bd849LU, 0x3fba2bceLU, 0xd1b4730aLU, 0x8b75808dLU, 0x40a8c3cfLU, 0x1a693048LU, 0xf467688cLU, 0xaea69b0bLU, -0x2f90ee08LU, 0x75511d8fLU, 0x9b5f454bLU, 0xc19eb6ccLU, 0x0a43f58eLU, 0x50820609LU, 0xbe8c5ecdLU, 0xe44dad4aLU, -0xf1e0b4cbLU, 0xab21474cLU, 0x452f1f88LU, 0x1feeec0fLU, 0xd433af4dLU, 0x8ef25ccaLU, 0x60fc040eLU, 0x3a3df789LU, -0xbb0b828aLU, 0xe1ca710dLU, 0x0fc429c9LU, 0x5505da4eLU, 0x9ed8990cLU, 0xc4196a8bLU, 0x2a17324fLU, 0x70d6c1c8LU, -0xcaf6fd92LU, 0x90370e15LU, 0x7e3956d1LU, 0x24f8a556LU, 0xef25e614LU, 0xb5e41593LU, 0x5bea4d57LU, 0x012bbed0LU, +0x657bd849LU, 0x3fba2bceLU, 0xd1b4730aLU, 0x8b75808dLU, 0x40a8c3cfLU, 0x1a693048LU, 0xf467688cLU, 0xaea69b0bLU, +0x2f90ee08LU, 0x75511d8fLU, 0x9b5f454bLU, 0xc19eb6ccLU, 0x0a43f58eLU, 0x50820609LU, 0xbe8c5ecdLU, 0xe44dad4aLU, +0xf1e0b4cbLU, 0xab21474cLU, 0x452f1f88LU, 0x1feeec0fLU, 0xd433af4dLU, 0x8ef25ccaLU, 0x60fc040eLU, 0x3a3df789LU, +0xbb0b828aLU, 0xe1ca710dLU, 0x0fc429c9LU, 0x5505da4eLU, 0x9ed8990cLU, 0xc4196a8bLU, 0x2a17324fLU, 0x70d6c1c8LU, +0xcaf6fd92LU, 0x90370e15LU, 0x7e3956d1LU, 0x24f8a556LU, 0xef25e614LU, 0xb5e41593LU, 0x5bea4d57LU, 0x012bbed0LU, 0x801dcbd3LU, 0xdadc3854LU, 0x34d26090LU, 0x6e139317LU, 0xa5ced055LU, 0xff0f23d2LU, 0x11017b16LU, 0x4bc08891LU, -0x5e6d9110LU, 0x04ac6297LU, 0xeaa23a53LU, 0xb063c9d4LU, 0x7bbe8a96LU, 0x217f7911LU, 0xcf7121d5LU, 0x95b0d252LU, -0x1486a751LU, 0x4e4754d6LU, 0xa0490c12LU, 0xfa88ff95LU, 0x3155bcd7LU, 0x6b944f50LU, 0x859a1794LU, 0xdf5be413LU, +0x5e6d9110LU, 0x04ac6297LU, 0xeaa23a53LU, 0xb063c9d4LU, 0x7bbe8a96LU, 0x217f7911LU, 0xcf7121d5LU, 0x95b0d252LU, +0x1486a751LU, 0x4e4754d6LU, 0xa0490c12LU, 0xfa88ff95LU, 0x3155bcd7LU, 0x6b944f50LU, 0x859a1794LU, 0xdf5be413LU, 0xaf8d25dbLU, 0xf54cd65cLU, 0x1b428e98LU, 0x41837d1fLU, 0x8a5e3e5dLU, 0xd09fcddaLU, 0x3e91951eLU, 0x64506699LU, -0xe566139aLU, 0xbfa7e01dLU, 0x51a9b8d9LU, 0x0b684b5eLU, 0xc0b5081cLU, 0x9a74fb9bLU, 0x747aa35fLU, 0x2ebb50d8LU, -0x3b164959LU, 0x61d7badeLU, 0x8fd9e21aLU, 0xd518119dLU, 0x1ec552dfLU, 0x4404a158LU, 0xaa0af99cLU, 0xf0cb0a1bLU, -0x71fd7f18LU, 0x2b3c8c9fLU, 0xc532d45bLU, 0x9ff327dcLU, 0x542e649eLU, 0x0eef9719LU, 0xe0e1cfddLU, 0xba203c5aLU, -0xd9a1b769LU, 0x836044eeLU, 0x6d6e1c2aLU, 0x37afefadLU, 0xfc72acefLU, 0xa6b35f68LU, 0x48bd07acLU, 0x127cf42bLU, -0x934a8128LU, 0xc98b72afLU, 0x27852a6bLU, 0x7d44d9ecLU, 0xb6999aaeLU, 0xec586929LU, 0x025631edLU, 0x5897c26aLU, -0x4d3adbebLU, 0x17fb286cLU, 0xf9f570a8LU, 0xa334832fLU, 0x68e9c06dLU, 0x322833eaLU, 0xdc266b2eLU, 0x86e798a9LU, -0x07d1edaaLU, 0x5d101e2dLU, 0xb31e46e9LU, 0xe9dfb56eLU, 0x2202f62cLU, 0x78c305abLU, 0x96cd5d6fLU, 0xcc0caee8LU, -0xbcda6f20LU, 0xe61b9ca7LU, 0x0815c463LU, 0x52d437e4LU, 0x990974a6LU, 0xc3c88721LU, 0x2dc6dfe5LU, 0x77072c62LU, -0xf6315961LU, 0xacf0aae6LU, 0x42fef222LU, 0x183f01a5LU, 0xd3e242e7LU, 0x8923b160LU, 0x672de9a4LU, 0x3dec1a23LU, -0x284103a2LU, 0x7280f025LU, 0x9c8ea8e1LU, 0xc64f5b66LU, 0x0d921824LU, 0x5753eba3LU, 0xb95db367LU, 0xe39c40e0LU, -0x62aa35e3LU, 0x386bc664LU, 0xd6659ea0LU, 0x8ca46d27LU, 0x47792e65LU, 0x1db8dde2LU, 0xf3b68526LU, 0xa97776a1LU, -0x13574afbLU, 0x4996b97cLU, 0xa798e1b8LU, 0xfd59123fLU, 0x3684517dLU, 0x6c45a2faLU, 0x824bfa3eLU, 0xd88a09b9LU, -0x59bc7cbaLU, 0x037d8f3dLU, 0xed73d7f9LU, 0xb7b2247eLU, 0x7c6f673cLU, 0x26ae94bbLU, 0xc8a0cc7fLU, 0x92613ff8LU, -0x87cc2679LU, 0xdd0dd5feLU, 0x33038d3aLU, 0x69c27ebdLU, 0xa21f3dffLU, 0xf8dece78LU, 0x16d096bcLU, 0x4c11653bLU, -0xcd271038LU, 0x97e6e3bfLU, 0x79e8bb7bLU, 0x232948fcLU, 0xe8f40bbeLU, 0xb235f839LU, 0x5c3ba0fdLU, 0x06fa537aLU, -0x762c92b2LU, 0x2ced6135LU, 0xc2e339f1LU, 0x9822ca76LU, 0x53ff8934LU, 0x093e7ab3LU, 0xe7302277LU, 0xbdf1d1f0LU, -0x3cc7a4f3LU, 0x66065774LU, 0x88080fb0LU, 0xd2c9fc37LU, 0x1914bf75LU, 0x43d54cf2LU, 0xaddb1436LU, 0xf71ae7b1LU, -0xe2b7fe30LU, 0xb8760db7LU, 0x56785573LU, 0x0cb9a6f4LU, 0xc764e5b6LU, 0x9da51631LU, 0x73ab4ef5LU, 0x296abd72LU, -0xa85cc871LU, 0xf29d3bf6LU, 0x1c936332LU, 0x465290b5LU, 0x8d8fd3f7LU, 0xd74e2070LU, 0x394078b4LU, 0x63818b33LU }; +0xe566139aLU, 0xbfa7e01dLU, 0x51a9b8d9LU, 0x0b684b5eLU, 0xc0b5081cLU, 0x9a74fb9bLU, 0x747aa35fLU, 0x2ebb50d8LU, +0x3b164959LU, 0x61d7badeLU, 0x8fd9e21aLU, 0xd518119dLU, 0x1ec552dfLU, 0x4404a158LU, 0xaa0af99cLU, 0xf0cb0a1bLU, +0x71fd7f18LU, 0x2b3c8c9fLU, 0xc532d45bLU, 0x9ff327dcLU, 0x542e649eLU, 0x0eef9719LU, 0xe0e1cfddLU, 0xba203c5aLU, +0xd9a1b769LU, 0x836044eeLU, 0x6d6e1c2aLU, 0x37afefadLU, 0xfc72acefLU, 0xa6b35f68LU, 0x48bd07acLU, 0x127cf42bLU, +0x934a8128LU, 0xc98b72afLU, 0x27852a6bLU, 0x7d44d9ecLU, 0xb6999aaeLU, 0xec586929LU, 0x025631edLU, 0x5897c26aLU, +0x4d3adbebLU, 0x17fb286cLU, 0xf9f570a8LU, 0xa334832fLU, 0x68e9c06dLU, 0x322833eaLU, 0xdc266b2eLU, 0x86e798a9LU, +0x07d1edaaLU, 0x5d101e2dLU, 0xb31e46e9LU, 0xe9dfb56eLU, 0x2202f62cLU, 0x78c305abLU, 0x96cd5d6fLU, 0xcc0caee8LU, +0xbcda6f20LU, 0xe61b9ca7LU, 0x0815c463LU, 0x52d437e4LU, 0x990974a6LU, 0xc3c88721LU, 0x2dc6dfe5LU, 0x77072c62LU, +0xf6315961LU, 0xacf0aae6LU, 0x42fef222LU, 0x183f01a5LU, 0xd3e242e7LU, 0x8923b160LU, 0x672de9a4LU, 0x3dec1a23LU, +0x284103a2LU, 0x7280f025LU, 0x9c8ea8e1LU, 0xc64f5b66LU, 0x0d921824LU, 0x5753eba3LU, 0xb95db367LU, 0xe39c40e0LU, +0x62aa35e3LU, 0x386bc664LU, 0xd6659ea0LU, 0x8ca46d27LU, 0x47792e65LU, 0x1db8dde2LU, 0xf3b68526LU, 0xa97776a1LU, +0x13574afbLU, 0x4996b97cLU, 0xa798e1b8LU, 0xfd59123fLU, 0x3684517dLU, 0x6c45a2faLU, 0x824bfa3eLU, 0xd88a09b9LU, +0x59bc7cbaLU, 0x037d8f3dLU, 0xed73d7f9LU, 0xb7b2247eLU, 0x7c6f673cLU, 0x26ae94bbLU, 0xc8a0cc7fLU, 0x92613ff8LU, +0x87cc2679LU, 0xdd0dd5feLU, 0x33038d3aLU, 0x69c27ebdLU, 0xa21f3dffLU, 0xf8dece78LU, 0x16d096bcLU, 0x4c11653bLU, +0xcd271038LU, 0x97e6e3bfLU, 0x79e8bb7bLU, 0x232948fcLU, 0xe8f40bbeLU, 0xb235f839LU, 0x5c3ba0fdLU, 0x06fa537aLU, +0x762c92b2LU, 0x2ced6135LU, 0xc2e339f1LU, 0x9822ca76LU, 0x53ff8934LU, 0x093e7ab3LU, 0xe7302277LU, 0xbdf1d1f0LU, +0x3cc7a4f3LU, 0x66065774LU, 0x88080fb0LU, 0xd2c9fc37LU, 0x1914bf75LU, 0x43d54cf2LU, 0xaddb1436LU, 0xf71ae7b1LU, +0xe2b7fe30LU, 0xb8760db7LU, 0x56785573LU, 0x0cb9a6f4LU, 0xc764e5b6LU, 0x9da51631LU, 0x73ab4ef5LU, 0x296abd72LU, +0xa85cc871LU, 0xf29d3bf6LU, 0x1c936332LU, 0x465290b5LU, 0x8d8fd3f7LU, 0xd74e2070LU, 0x394078b4LU, 0x63818b33LU }; static const ulong32 rs_tab4[256] = { -0x00000000LU, 0x58471e5aLU, 0xb08e3cb4LU, 0xe8c922eeLU, 0x2d517825LU, 0x7516667fLU, 0x9ddf4491LU, 0xc5985acbLU, -0x5aa2f04aLU, 0x02e5ee10LU, 0xea2cccfeLU, 0xb26bd2a4LU, 0x77f3886fLU, 0x2fb49635LU, 0xc77db4dbLU, 0x9f3aaa81LU, -0xb409ad94LU, 0xec4eb3ceLU, 0x04879120LU, 0x5cc08f7aLU, 0x9958d5b1LU, 0xc11fcbebLU, 0x29d6e905LU, 0x7191f75fLU, -0xeeab5ddeLU, 0xb6ec4384LU, 0x5e25616aLU, 0x06627f30LU, 0xc3fa25fbLU, 0x9bbd3ba1LU, 0x7374194fLU, 0x2b330715LU, -0x25121765LU, 0x7d55093fLU, 0x959c2bd1LU, 0xcddb358bLU, 0x08436f40LU, 0x5004711aLU, 0xb8cd53f4LU, 0xe08a4daeLU, -0x7fb0e72fLU, 0x27f7f975LU, 0xcf3edb9bLU, 0x9779c5c1LU, 0x52e19f0aLU, 0x0aa68150LU, 0xe26fa3beLU, 0xba28bde4LU, -0x911bbaf1LU, 0xc95ca4abLU, 0x21958645LU, 0x79d2981fLU, 0xbc4ac2d4LU, 0xe40ddc8eLU, 0x0cc4fe60LU, 0x5483e03aLU, -0xcbb94abbLU, 0x93fe54e1LU, 0x7b37760fLU, 0x23706855LU, 0xe6e8329eLU, 0xbeaf2cc4LU, 0x56660e2aLU, 0x0e211070LU, -0x4a242ecaLU, 0x12633090LU, 0xfaaa127eLU, 0xa2ed0c24LU, 0x677556efLU, 0x3f3248b5LU, 0xd7fb6a5bLU, 0x8fbc7401LU, -0x1086de80LU, 0x48c1c0daLU, 0xa008e234LU, 0xf84ffc6eLU, 0x3dd7a6a5LU, 0x6590b8ffLU, 0x8d599a11LU, 0xd51e844bLU, -0xfe2d835eLU, 0xa66a9d04LU, 0x4ea3bfeaLU, 0x16e4a1b0LU, 0xd37cfb7bLU, 0x8b3be521LU, 0x63f2c7cfLU, 0x3bb5d995LU, -0xa48f7314LU, 0xfcc86d4eLU, 0x14014fa0LU, 0x4c4651faLU, 0x89de0b31LU, 0xd199156bLU, 0x39503785LU, 0x611729dfLU, -0x6f3639afLU, 0x377127f5LU, 0xdfb8051bLU, 0x87ff1b41LU, 0x4267418aLU, 0x1a205fd0LU, 0xf2e97d3eLU, 0xaaae6364LU, -0x3594c9e5LU, 0x6dd3d7bfLU, 0x851af551LU, 0xdd5deb0bLU, 0x18c5b1c0LU, 0x4082af9aLU, 0xa84b8d74LU, 0xf00c932eLU, -0xdb3f943bLU, 0x83788a61LU, 0x6bb1a88fLU, 0x33f6b6d5LU, 0xf66eec1eLU, 0xae29f244LU, 0x46e0d0aaLU, 0x1ea7cef0LU, -0x819d6471LU, 0xd9da7a2bLU, 0x311358c5LU, 0x6954469fLU, 0xaccc1c54LU, 0xf48b020eLU, 0x1c4220e0LU, 0x44053ebaLU, -0x94485cd9LU, 0xcc0f4283LU, 0x24c6606dLU, 0x7c817e37LU, 0xb91924fcLU, 0xe15e3aa6LU, 0x09971848LU, 0x51d00612LU, -0xceeaac93LU, 0x96adb2c9LU, 0x7e649027LU, 0x26238e7dLU, 0xe3bbd4b6LU, 0xbbfccaecLU, 0x5335e802LU, 0x0b72f658LU, -0x2041f14dLU, 0x7806ef17LU, 0x90cfcdf9LU, 0xc888d3a3LU, 0x0d108968LU, 0x55579732LU, 0xbd9eb5dcLU, 0xe5d9ab86LU, -0x7ae30107LU, 0x22a41f5dLU, 0xca6d3db3LU, 0x922a23e9LU, 0x57b27922LU, 0x0ff56778LU, 0xe73c4596LU, 0xbf7b5bccLU, -0xb15a4bbcLU, 0xe91d55e6LU, 0x01d47708LU, 0x59936952LU, 0x9c0b3399LU, 0xc44c2dc3LU, 0x2c850f2dLU, 0x74c21177LU, -0xebf8bbf6LU, 0xb3bfa5acLU, 0x5b768742LU, 0x03319918LU, 0xc6a9c3d3LU, 0x9eeedd89LU, 0x7627ff67LU, 0x2e60e13dLU, -0x0553e628LU, 0x5d14f872LU, 0xb5ddda9cLU, 0xed9ac4c6LU, 0x28029e0dLU, 0x70458057LU, 0x988ca2b9LU, 0xc0cbbce3LU, -0x5ff11662LU, 0x07b60838LU, 0xef7f2ad6LU, 0xb738348cLU, 0x72a06e47LU, 0x2ae7701dLU, 0xc22e52f3LU, 0x9a694ca9LU, -0xde6c7213LU, 0x862b6c49LU, 0x6ee24ea7LU, 0x36a550fdLU, 0xf33d0a36LU, 0xab7a146cLU, 0x43b33682LU, 0x1bf428d8LU, +0x00000000LU, 0x58471e5aLU, 0xb08e3cb4LU, 0xe8c922eeLU, 0x2d517825LU, 0x7516667fLU, 0x9ddf4491LU, 0xc5985acbLU, +0x5aa2f04aLU, 0x02e5ee10LU, 0xea2cccfeLU, 0xb26bd2a4LU, 0x77f3886fLU, 0x2fb49635LU, 0xc77db4dbLU, 0x9f3aaa81LU, +0xb409ad94LU, 0xec4eb3ceLU, 0x04879120LU, 0x5cc08f7aLU, 0x9958d5b1LU, 0xc11fcbebLU, 0x29d6e905LU, 0x7191f75fLU, +0xeeab5ddeLU, 0xb6ec4384LU, 0x5e25616aLU, 0x06627f30LU, 0xc3fa25fbLU, 0x9bbd3ba1LU, 0x7374194fLU, 0x2b330715LU, +0x25121765LU, 0x7d55093fLU, 0x959c2bd1LU, 0xcddb358bLU, 0x08436f40LU, 0x5004711aLU, 0xb8cd53f4LU, 0xe08a4daeLU, +0x7fb0e72fLU, 0x27f7f975LU, 0xcf3edb9bLU, 0x9779c5c1LU, 0x52e19f0aLU, 0x0aa68150LU, 0xe26fa3beLU, 0xba28bde4LU, +0x911bbaf1LU, 0xc95ca4abLU, 0x21958645LU, 0x79d2981fLU, 0xbc4ac2d4LU, 0xe40ddc8eLU, 0x0cc4fe60LU, 0x5483e03aLU, +0xcbb94abbLU, 0x93fe54e1LU, 0x7b37760fLU, 0x23706855LU, 0xe6e8329eLU, 0xbeaf2cc4LU, 0x56660e2aLU, 0x0e211070LU, +0x4a242ecaLU, 0x12633090LU, 0xfaaa127eLU, 0xa2ed0c24LU, 0x677556efLU, 0x3f3248b5LU, 0xd7fb6a5bLU, 0x8fbc7401LU, +0x1086de80LU, 0x48c1c0daLU, 0xa008e234LU, 0xf84ffc6eLU, 0x3dd7a6a5LU, 0x6590b8ffLU, 0x8d599a11LU, 0xd51e844bLU, +0xfe2d835eLU, 0xa66a9d04LU, 0x4ea3bfeaLU, 0x16e4a1b0LU, 0xd37cfb7bLU, 0x8b3be521LU, 0x63f2c7cfLU, 0x3bb5d995LU, +0xa48f7314LU, 0xfcc86d4eLU, 0x14014fa0LU, 0x4c4651faLU, 0x89de0b31LU, 0xd199156bLU, 0x39503785LU, 0x611729dfLU, +0x6f3639afLU, 0x377127f5LU, 0xdfb8051bLU, 0x87ff1b41LU, 0x4267418aLU, 0x1a205fd0LU, 0xf2e97d3eLU, 0xaaae6364LU, +0x3594c9e5LU, 0x6dd3d7bfLU, 0x851af551LU, 0xdd5deb0bLU, 0x18c5b1c0LU, 0x4082af9aLU, 0xa84b8d74LU, 0xf00c932eLU, +0xdb3f943bLU, 0x83788a61LU, 0x6bb1a88fLU, 0x33f6b6d5LU, 0xf66eec1eLU, 0xae29f244LU, 0x46e0d0aaLU, 0x1ea7cef0LU, +0x819d6471LU, 0xd9da7a2bLU, 0x311358c5LU, 0x6954469fLU, 0xaccc1c54LU, 0xf48b020eLU, 0x1c4220e0LU, 0x44053ebaLU, +0x94485cd9LU, 0xcc0f4283LU, 0x24c6606dLU, 0x7c817e37LU, 0xb91924fcLU, 0xe15e3aa6LU, 0x09971848LU, 0x51d00612LU, +0xceeaac93LU, 0x96adb2c9LU, 0x7e649027LU, 0x26238e7dLU, 0xe3bbd4b6LU, 0xbbfccaecLU, 0x5335e802LU, 0x0b72f658LU, +0x2041f14dLU, 0x7806ef17LU, 0x90cfcdf9LU, 0xc888d3a3LU, 0x0d108968LU, 0x55579732LU, 0xbd9eb5dcLU, 0xe5d9ab86LU, +0x7ae30107LU, 0x22a41f5dLU, 0xca6d3db3LU, 0x922a23e9LU, 0x57b27922LU, 0x0ff56778LU, 0xe73c4596LU, 0xbf7b5bccLU, +0xb15a4bbcLU, 0xe91d55e6LU, 0x01d47708LU, 0x59936952LU, 0x9c0b3399LU, 0xc44c2dc3LU, 0x2c850f2dLU, 0x74c21177LU, +0xebf8bbf6LU, 0xb3bfa5acLU, 0x5b768742LU, 0x03319918LU, 0xc6a9c3d3LU, 0x9eeedd89LU, 0x7627ff67LU, 0x2e60e13dLU, +0x0553e628LU, 0x5d14f872LU, 0xb5ddda9cLU, 0xed9ac4c6LU, 0x28029e0dLU, 0x70458057LU, 0x988ca2b9LU, 0xc0cbbce3LU, +0x5ff11662LU, 0x07b60838LU, 0xef7f2ad6LU, 0xb738348cLU, 0x72a06e47LU, 0x2ae7701dLU, 0xc22e52f3LU, 0x9a694ca9LU, +0xde6c7213LU, 0x862b6c49LU, 0x6ee24ea7LU, 0x36a550fdLU, 0xf33d0a36LU, 0xab7a146cLU, 0x43b33682LU, 0x1bf428d8LU, 0x84ce8259LU, 0xdc899c03LU, 0x3440beedLU, 0x6c07a0b7LU, 0xa99ffa7cLU, 0xf1d8e426LU, 0x1911c6c8LU, 0x4156d892LU, -0x6a65df87LU, 0x3222c1ddLU, 0xdaebe333LU, 0x82acfd69LU, 0x4734a7a2LU, 0x1f73b9f8LU, 0xf7ba9b16LU, 0xaffd854cLU, -0x30c72fcdLU, 0x68803197LU, 0x80491379LU, 0xd80e0d23LU, 0x1d9657e8LU, 0x45d149b2LU, 0xad186b5cLU, 0xf55f7506LU, -0xfb7e6576LU, 0xa3397b2cLU, 0x4bf059c2LU, 0x13b74798LU, 0xd62f1d53LU, 0x8e680309LU, 0x66a121e7LU, 0x3ee63fbdLU, -0xa1dc953cLU, 0xf99b8b66LU, 0x1152a988LU, 0x4915b7d2LU, 0x8c8ded19LU, 0xd4caf343LU, 0x3c03d1adLU, 0x6444cff7LU, -0x4f77c8e2LU, 0x1730d6b8LU, 0xfff9f456LU, 0xa7beea0cLU, 0x6226b0c7LU, 0x3a61ae9dLU, 0xd2a88c73LU, 0x8aef9229LU, +0x6a65df87LU, 0x3222c1ddLU, 0xdaebe333LU, 0x82acfd69LU, 0x4734a7a2LU, 0x1f73b9f8LU, 0xf7ba9b16LU, 0xaffd854cLU, +0x30c72fcdLU, 0x68803197LU, 0x80491379LU, 0xd80e0d23LU, 0x1d9657e8LU, 0x45d149b2LU, 0xad186b5cLU, 0xf55f7506LU, +0xfb7e6576LU, 0xa3397b2cLU, 0x4bf059c2LU, 0x13b74798LU, 0xd62f1d53LU, 0x8e680309LU, 0x66a121e7LU, 0x3ee63fbdLU, +0xa1dc953cLU, 0xf99b8b66LU, 0x1152a988LU, 0x4915b7d2LU, 0x8c8ded19LU, 0xd4caf343LU, 0x3c03d1adLU, 0x6444cff7LU, +0x4f77c8e2LU, 0x1730d6b8LU, 0xfff9f456LU, 0xa7beea0cLU, 0x6226b0c7LU, 0x3a61ae9dLU, 0xd2a88c73LU, 0x8aef9229LU, 0x15d538a8LU, 0x4d9226f2LU, 0xa55b041cLU, 0xfd1c1a46LU, 0x3884408dLU, 0x60c35ed7LU, 0x880a7c39LU, 0xd04d6263LU }; static const ulong32 rs_tab5[256] = { -0x00000000LU, 0xdbaec658LU, 0xfb11c1b0LU, 0x20bf07e8LU, 0xbb22cf2dLU, 0x608c0975LU, 0x40330e9dLU, 0x9b9dc8c5LU, -0x3b44d35aLU, 0xe0ea1502LU, 0xc05512eaLU, 0x1bfbd4b2LU, 0x80661c77LU, 0x5bc8da2fLU, 0x7b77ddc7LU, 0xa0d91b9fLU, -0x7688ebb4LU, 0xad262decLU, 0x8d992a04LU, 0x5637ec5cLU, 0xcdaa2499LU, 0x1604e2c1LU, 0x36bbe529LU, 0xed152371LU, -0x4dcc38eeLU, 0x9662feb6LU, 0xb6ddf95eLU, 0x6d733f06LU, 0xf6eef7c3LU, 0x2d40319bLU, 0x0dff3673LU, 0xd651f02bLU, -0xec5d9b25LU, 0x37f35d7dLU, 0x174c5a95LU, 0xcce29ccdLU, 0x577f5408LU, 0x8cd19250LU, 0xac6e95b8LU, 0x77c053e0LU, -0xd719487fLU, 0x0cb78e27LU, 0x2c0889cfLU, 0xf7a64f97LU, 0x6c3b8752LU, 0xb795410aLU, 0x972a46e2LU, 0x4c8480baLU, -0x9ad57091LU, 0x417bb6c9LU, 0x61c4b121LU, 0xba6a7779LU, 0x21f7bfbcLU, 0xfa5979e4LU, 0xdae67e0cLU, 0x0148b854LU, -0xa191a3cbLU, 0x7a3f6593LU, 0x5a80627bLU, 0x812ea423LU, 0x1ab36ce6LU, 0xc11daabeLU, 0xe1a2ad56LU, 0x3a0c6b0eLU, -0x95ba7b4aLU, 0x4e14bd12LU, 0x6eabbafaLU, 0xb5057ca2LU, 0x2e98b467LU, 0xf536723fLU, 0xd58975d7LU, 0x0e27b38fLU, -0xaefea810LU, 0x75506e48LU, 0x55ef69a0LU, 0x8e41aff8LU, 0x15dc673dLU, 0xce72a165LU, 0xeecda68dLU, 0x356360d5LU, -0xe33290feLU, 0x389c56a6LU, 0x1823514eLU, 0xc38d9716LU, 0x58105fd3LU, 0x83be998bLU, 0xa3019e63LU, 0x78af583bLU, -0xd87643a4LU, 0x03d885fcLU, 0x23678214LU, 0xf8c9444cLU, 0x63548c89LU, 0xb8fa4ad1LU, 0x98454d39LU, 0x43eb8b61LU, -0x79e7e06fLU, 0xa2492637LU, 0x82f621dfLU, 0x5958e787LU, 0xc2c52f42LU, 0x196be91aLU, 0x39d4eef2LU, 0xe27a28aaLU, -0x42a33335LU, 0x990df56dLU, 0xb9b2f285LU, 0x621c34ddLU, 0xf981fc18LU, 0x222f3a40LU, 0x02903da8LU, 0xd93efbf0LU, -0x0f6f0bdbLU, 0xd4c1cd83LU, 0xf47eca6bLU, 0x2fd00c33LU, 0xb44dc4f6LU, 0x6fe302aeLU, 0x4f5c0546LU, 0x94f2c31eLU, -0x342bd881LU, 0xef851ed9LU, 0xcf3a1931LU, 0x1494df69LU, 0x8f0917acLU, 0x54a7d1f4LU, 0x7418d61cLU, 0xafb61044LU, -0x6739f694LU, 0xbc9730ccLU, 0x9c283724LU, 0x4786f17cLU, 0xdc1b39b9LU, 0x07b5ffe1LU, 0x270af809LU, 0xfca43e51LU, -0x5c7d25ceLU, 0x87d3e396LU, 0xa76ce47eLU, 0x7cc22226LU, 0xe75feae3LU, 0x3cf12cbbLU, 0x1c4e2b53LU, 0xc7e0ed0bLU, -0x11b11d20LU, 0xca1fdb78LU, 0xeaa0dc90LU, 0x310e1ac8LU, 0xaa93d20dLU, 0x713d1455LU, 0x518213bdLU, 0x8a2cd5e5LU, -0x2af5ce7aLU, 0xf15b0822LU, 0xd1e40fcaLU, 0x0a4ac992LU, 0x91d70157LU, 0x4a79c70fLU, 0x6ac6c0e7LU, 0xb16806bfLU, -0x8b646db1LU, 0x50caabe9LU, 0x7075ac01LU, 0xabdb6a59LU, 0x3046a29cLU, 0xebe864c4LU, 0xcb57632cLU, 0x10f9a574LU, -0xb020beebLU, 0x6b8e78b3LU, 0x4b317f5bLU, 0x909fb903LU, 0x0b0271c6LU, 0xd0acb79eLU, 0xf013b076LU, 0x2bbd762eLU, -0xfdec8605LU, 0x2642405dLU, 0x06fd47b5LU, 0xdd5381edLU, 0x46ce4928LU, 0x9d608f70LU, 0xbddf8898LU, 0x66714ec0LU, -0xc6a8555fLU, 0x1d069307LU, 0x3db994efLU, 0xe61752b7LU, 0x7d8a9a72LU, 0xa6245c2aLU, 0x869b5bc2LU, 0x5d359d9aLU, -0xf2838ddeLU, 0x292d4b86LU, 0x09924c6eLU, 0xd23c8a36LU, 0x49a142f3LU, 0x920f84abLU, 0xb2b08343LU, 0x691e451bLU, -0xc9c75e84LU, 0x126998dcLU, 0x32d69f34LU, 0xe978596cLU, 0x72e591a9LU, 0xa94b57f1LU, 0x89f45019LU, 0x525a9641LU, -0x840b666aLU, 0x5fa5a032LU, 0x7f1aa7daLU, 0xa4b46182LU, 0x3f29a947LU, 0xe4876f1fLU, 0xc43868f7LU, 0x1f96aeafLU, -0xbf4fb530LU, 0x64e17368LU, 0x445e7480LU, 0x9ff0b2d8LU, 0x046d7a1dLU, 0xdfc3bc45LU, 0xff7cbbadLU, 0x24d27df5LU, -0x1ede16fbLU, 0xc570d0a3LU, 0xe5cfd74bLU, 0x3e611113LU, 0xa5fcd9d6LU, 0x7e521f8eLU, 0x5eed1866LU, 0x8543de3eLU, -0x259ac5a1LU, 0xfe3403f9LU, 0xde8b0411LU, 0x0525c249LU, 0x9eb80a8cLU, 0x4516ccd4LU, 0x65a9cb3cLU, 0xbe070d64LU, -0x6856fd4fLU, 0xb3f83b17LU, 0x93473cffLU, 0x48e9faa7LU, 0xd3743262LU, 0x08daf43aLU, 0x2865f3d2LU, 0xf3cb358aLU, -0x53122e15LU, 0x88bce84dLU, 0xa803efa5LU, 0x73ad29fdLU, 0xe830e138LU, 0x339e2760LU, 0x13212088LU, 0xc88fe6d0LU }; +0x00000000LU, 0xdbaec658LU, 0xfb11c1b0LU, 0x20bf07e8LU, 0xbb22cf2dLU, 0x608c0975LU, 0x40330e9dLU, 0x9b9dc8c5LU, +0x3b44d35aLU, 0xe0ea1502LU, 0xc05512eaLU, 0x1bfbd4b2LU, 0x80661c77LU, 0x5bc8da2fLU, 0x7b77ddc7LU, 0xa0d91b9fLU, +0x7688ebb4LU, 0xad262decLU, 0x8d992a04LU, 0x5637ec5cLU, 0xcdaa2499LU, 0x1604e2c1LU, 0x36bbe529LU, 0xed152371LU, +0x4dcc38eeLU, 0x9662feb6LU, 0xb6ddf95eLU, 0x6d733f06LU, 0xf6eef7c3LU, 0x2d40319bLU, 0x0dff3673LU, 0xd651f02bLU, +0xec5d9b25LU, 0x37f35d7dLU, 0x174c5a95LU, 0xcce29ccdLU, 0x577f5408LU, 0x8cd19250LU, 0xac6e95b8LU, 0x77c053e0LU, +0xd719487fLU, 0x0cb78e27LU, 0x2c0889cfLU, 0xf7a64f97LU, 0x6c3b8752LU, 0xb795410aLU, 0x972a46e2LU, 0x4c8480baLU, +0x9ad57091LU, 0x417bb6c9LU, 0x61c4b121LU, 0xba6a7779LU, 0x21f7bfbcLU, 0xfa5979e4LU, 0xdae67e0cLU, 0x0148b854LU, +0xa191a3cbLU, 0x7a3f6593LU, 0x5a80627bLU, 0x812ea423LU, 0x1ab36ce6LU, 0xc11daabeLU, 0xe1a2ad56LU, 0x3a0c6b0eLU, +0x95ba7b4aLU, 0x4e14bd12LU, 0x6eabbafaLU, 0xb5057ca2LU, 0x2e98b467LU, 0xf536723fLU, 0xd58975d7LU, 0x0e27b38fLU, +0xaefea810LU, 0x75506e48LU, 0x55ef69a0LU, 0x8e41aff8LU, 0x15dc673dLU, 0xce72a165LU, 0xeecda68dLU, 0x356360d5LU, +0xe33290feLU, 0x389c56a6LU, 0x1823514eLU, 0xc38d9716LU, 0x58105fd3LU, 0x83be998bLU, 0xa3019e63LU, 0x78af583bLU, +0xd87643a4LU, 0x03d885fcLU, 0x23678214LU, 0xf8c9444cLU, 0x63548c89LU, 0xb8fa4ad1LU, 0x98454d39LU, 0x43eb8b61LU, +0x79e7e06fLU, 0xa2492637LU, 0x82f621dfLU, 0x5958e787LU, 0xc2c52f42LU, 0x196be91aLU, 0x39d4eef2LU, 0xe27a28aaLU, +0x42a33335LU, 0x990df56dLU, 0xb9b2f285LU, 0x621c34ddLU, 0xf981fc18LU, 0x222f3a40LU, 0x02903da8LU, 0xd93efbf0LU, +0x0f6f0bdbLU, 0xd4c1cd83LU, 0xf47eca6bLU, 0x2fd00c33LU, 0xb44dc4f6LU, 0x6fe302aeLU, 0x4f5c0546LU, 0x94f2c31eLU, +0x342bd881LU, 0xef851ed9LU, 0xcf3a1931LU, 0x1494df69LU, 0x8f0917acLU, 0x54a7d1f4LU, 0x7418d61cLU, 0xafb61044LU, +0x6739f694LU, 0xbc9730ccLU, 0x9c283724LU, 0x4786f17cLU, 0xdc1b39b9LU, 0x07b5ffe1LU, 0x270af809LU, 0xfca43e51LU, +0x5c7d25ceLU, 0x87d3e396LU, 0xa76ce47eLU, 0x7cc22226LU, 0xe75feae3LU, 0x3cf12cbbLU, 0x1c4e2b53LU, 0xc7e0ed0bLU, +0x11b11d20LU, 0xca1fdb78LU, 0xeaa0dc90LU, 0x310e1ac8LU, 0xaa93d20dLU, 0x713d1455LU, 0x518213bdLU, 0x8a2cd5e5LU, +0x2af5ce7aLU, 0xf15b0822LU, 0xd1e40fcaLU, 0x0a4ac992LU, 0x91d70157LU, 0x4a79c70fLU, 0x6ac6c0e7LU, 0xb16806bfLU, +0x8b646db1LU, 0x50caabe9LU, 0x7075ac01LU, 0xabdb6a59LU, 0x3046a29cLU, 0xebe864c4LU, 0xcb57632cLU, 0x10f9a574LU, +0xb020beebLU, 0x6b8e78b3LU, 0x4b317f5bLU, 0x909fb903LU, 0x0b0271c6LU, 0xd0acb79eLU, 0xf013b076LU, 0x2bbd762eLU, +0xfdec8605LU, 0x2642405dLU, 0x06fd47b5LU, 0xdd5381edLU, 0x46ce4928LU, 0x9d608f70LU, 0xbddf8898LU, 0x66714ec0LU, +0xc6a8555fLU, 0x1d069307LU, 0x3db994efLU, 0xe61752b7LU, 0x7d8a9a72LU, 0xa6245c2aLU, 0x869b5bc2LU, 0x5d359d9aLU, +0xf2838ddeLU, 0x292d4b86LU, 0x09924c6eLU, 0xd23c8a36LU, 0x49a142f3LU, 0x920f84abLU, 0xb2b08343LU, 0x691e451bLU, +0xc9c75e84LU, 0x126998dcLU, 0x32d69f34LU, 0xe978596cLU, 0x72e591a9LU, 0xa94b57f1LU, 0x89f45019LU, 0x525a9641LU, +0x840b666aLU, 0x5fa5a032LU, 0x7f1aa7daLU, 0xa4b46182LU, 0x3f29a947LU, 0xe4876f1fLU, 0xc43868f7LU, 0x1f96aeafLU, +0xbf4fb530LU, 0x64e17368LU, 0x445e7480LU, 0x9ff0b2d8LU, 0x046d7a1dLU, 0xdfc3bc45LU, 0xff7cbbadLU, 0x24d27df5LU, +0x1ede16fbLU, 0xc570d0a3LU, 0xe5cfd74bLU, 0x3e611113LU, 0xa5fcd9d6LU, 0x7e521f8eLU, 0x5eed1866LU, 0x8543de3eLU, +0x259ac5a1LU, 0xfe3403f9LU, 0xde8b0411LU, 0x0525c249LU, 0x9eb80a8cLU, 0x4516ccd4LU, 0x65a9cb3cLU, 0xbe070d64LU, +0x6856fd4fLU, 0xb3f83b17LU, 0x93473cffLU, 0x48e9faa7LU, 0xd3743262LU, 0x08daf43aLU, 0x2865f3d2LU, 0xf3cb358aLU, +0x53122e15LU, 0x88bce84dLU, 0xa803efa5LU, 0x73ad29fdLU, 0xe830e138LU, 0x339e2760LU, 0x13212088LU, 0xc88fe6d0LU }; static const ulong32 rs_tab6[256] = { -0x00000000LU, 0x9e3d68dbLU, 0x717ad0fbLU, 0xef47b820LU, 0xe2f4edbbLU, 0x7cc98560LU, 0x938e3d40LU, 0x0db3559bLU, -0x89a5973bLU, 0x1798ffe0LU, 0xf8df47c0LU, 0x66e22f1bLU, 0x6b517a80LU, 0xf56c125bLU, 0x1a2baa7bLU, 0x8416c2a0LU, -0x5f076376LU, 0xc13a0badLU, 0x2e7db38dLU, 0xb040db56LU, 0xbdf38ecdLU, 0x23cee616LU, 0xcc895e36LU, 0x52b436edLU, -0xd6a2f44dLU, 0x489f9c96LU, 0xa7d824b6LU, 0x39e54c6dLU, 0x345619f6LU, 0xaa6b712dLU, 0x452cc90dLU, 0xdb11a1d6LU, -0xbe0ec6ecLU, 0x2033ae37LU, 0xcf741617LU, 0x51497eccLU, 0x5cfa2b57LU, 0xc2c7438cLU, 0x2d80fbacLU, 0xb3bd9377LU, -0x37ab51d7LU, 0xa996390cLU, 0x46d1812cLU, 0xd8ece9f7LU, 0xd55fbc6cLU, 0x4b62d4b7LU, 0xa4256c97LU, 0x3a18044cLU, -0xe109a59aLU, 0x7f34cd41LU, 0x90737561LU, 0x0e4e1dbaLU, 0x03fd4821LU, 0x9dc020faLU, 0x728798daLU, 0xecbaf001LU, -0x68ac32a1LU, 0xf6915a7aLU, 0x19d6e25aLU, 0x87eb8a81LU, 0x8a58df1aLU, 0x1465b7c1LU, 0xfb220fe1LU, 0x651f673aLU, -0x311cc195LU, 0xaf21a94eLU, 0x4066116eLU, 0xde5b79b5LU, 0xd3e82c2eLU, 0x4dd544f5LU, 0xa292fcd5LU, 0x3caf940eLU, -0xb8b956aeLU, 0x26843e75LU, 0xc9c38655LU, 0x57feee8eLU, 0x5a4dbb15LU, 0xc470d3ceLU, 0x2b376beeLU, 0xb50a0335LU, -0x6e1ba2e3LU, 0xf026ca38LU, 0x1f617218LU, 0x815c1ac3LU, 0x8cef4f58LU, 0x12d22783LU, 0xfd959fa3LU, 0x63a8f778LU, -0xe7be35d8LU, 0x79835d03LU, 0x96c4e523LU, 0x08f98df8LU, 0x054ad863LU, 0x9b77b0b8LU, 0x74300898LU, 0xea0d6043LU, -0x8f120779LU, 0x112f6fa2LU, 0xfe68d782LU, 0x6055bf59LU, 0x6de6eac2LU, 0xf3db8219LU, 0x1c9c3a39LU, 0x82a152e2LU, +0x00000000LU, 0x9e3d68dbLU, 0x717ad0fbLU, 0xef47b820LU, 0xe2f4edbbLU, 0x7cc98560LU, 0x938e3d40LU, 0x0db3559bLU, +0x89a5973bLU, 0x1798ffe0LU, 0xf8df47c0LU, 0x66e22f1bLU, 0x6b517a80LU, 0xf56c125bLU, 0x1a2baa7bLU, 0x8416c2a0LU, +0x5f076376LU, 0xc13a0badLU, 0x2e7db38dLU, 0xb040db56LU, 0xbdf38ecdLU, 0x23cee616LU, 0xcc895e36LU, 0x52b436edLU, +0xd6a2f44dLU, 0x489f9c96LU, 0xa7d824b6LU, 0x39e54c6dLU, 0x345619f6LU, 0xaa6b712dLU, 0x452cc90dLU, 0xdb11a1d6LU, +0xbe0ec6ecLU, 0x2033ae37LU, 0xcf741617LU, 0x51497eccLU, 0x5cfa2b57LU, 0xc2c7438cLU, 0x2d80fbacLU, 0xb3bd9377LU, +0x37ab51d7LU, 0xa996390cLU, 0x46d1812cLU, 0xd8ece9f7LU, 0xd55fbc6cLU, 0x4b62d4b7LU, 0xa4256c97LU, 0x3a18044cLU, +0xe109a59aLU, 0x7f34cd41LU, 0x90737561LU, 0x0e4e1dbaLU, 0x03fd4821LU, 0x9dc020faLU, 0x728798daLU, 0xecbaf001LU, +0x68ac32a1LU, 0xf6915a7aLU, 0x19d6e25aLU, 0x87eb8a81LU, 0x8a58df1aLU, 0x1465b7c1LU, 0xfb220fe1LU, 0x651f673aLU, +0x311cc195LU, 0xaf21a94eLU, 0x4066116eLU, 0xde5b79b5LU, 0xd3e82c2eLU, 0x4dd544f5LU, 0xa292fcd5LU, 0x3caf940eLU, +0xb8b956aeLU, 0x26843e75LU, 0xc9c38655LU, 0x57feee8eLU, 0x5a4dbb15LU, 0xc470d3ceLU, 0x2b376beeLU, 0xb50a0335LU, +0x6e1ba2e3LU, 0xf026ca38LU, 0x1f617218LU, 0x815c1ac3LU, 0x8cef4f58LU, 0x12d22783LU, 0xfd959fa3LU, 0x63a8f778LU, +0xe7be35d8LU, 0x79835d03LU, 0x96c4e523LU, 0x08f98df8LU, 0x054ad863LU, 0x9b77b0b8LU, 0x74300898LU, 0xea0d6043LU, +0x8f120779LU, 0x112f6fa2LU, 0xfe68d782LU, 0x6055bf59LU, 0x6de6eac2LU, 0xf3db8219LU, 0x1c9c3a39LU, 0x82a152e2LU, 0x06b79042LU, 0x988af899LU, 0x77cd40b9LU, 0xe9f02862LU, 0xe4437df9LU, 0x7a7e1522LU, 0x9539ad02LU, 0x0b04c5d9LU, -0xd015640fLU, 0x4e280cd4LU, 0xa16fb4f4LU, 0x3f52dc2fLU, 0x32e189b4LU, 0xacdce16fLU, 0x439b594fLU, 0xdda63194LU, -0x59b0f334LU, 0xc78d9befLU, 0x28ca23cfLU, 0xb6f74b14LU, 0xbb441e8fLU, 0x25797654LU, 0xca3ece74LU, 0x5403a6afLU, -0x6238cf67LU, 0xfc05a7bcLU, 0x13421f9cLU, 0x8d7f7747LU, 0x80cc22dcLU, 0x1ef14a07LU, 0xf1b6f227LU, 0x6f8b9afcLU, -0xeb9d585cLU, 0x75a03087LU, 0x9ae788a7LU, 0x04dae07cLU, 0x0969b5e7LU, 0x9754dd3cLU, 0x7813651cLU, 0xe62e0dc7LU, -0x3d3fac11LU, 0xa302c4caLU, 0x4c457ceaLU, 0xd2781431LU, 0xdfcb41aaLU, 0x41f62971LU, 0xaeb19151LU, 0x308cf98aLU, +0xd015640fLU, 0x4e280cd4LU, 0xa16fb4f4LU, 0x3f52dc2fLU, 0x32e189b4LU, 0xacdce16fLU, 0x439b594fLU, 0xdda63194LU, +0x59b0f334LU, 0xc78d9befLU, 0x28ca23cfLU, 0xb6f74b14LU, 0xbb441e8fLU, 0x25797654LU, 0xca3ece74LU, 0x5403a6afLU, +0x6238cf67LU, 0xfc05a7bcLU, 0x13421f9cLU, 0x8d7f7747LU, 0x80cc22dcLU, 0x1ef14a07LU, 0xf1b6f227LU, 0x6f8b9afcLU, +0xeb9d585cLU, 0x75a03087LU, 0x9ae788a7LU, 0x04dae07cLU, 0x0969b5e7LU, 0x9754dd3cLU, 0x7813651cLU, 0xe62e0dc7LU, +0x3d3fac11LU, 0xa302c4caLU, 0x4c457ceaLU, 0xd2781431LU, 0xdfcb41aaLU, 0x41f62971LU, 0xaeb19151LU, 0x308cf98aLU, 0xb49a3b2aLU, 0x2aa753f1LU, 0xc5e0ebd1LU, 0x5bdd830aLU, 0x566ed691LU, 0xc853be4aLU, 0x2714066aLU, 0xb9296eb1LU, -0xdc36098bLU, 0x420b6150LU, 0xad4cd970LU, 0x3371b1abLU, 0x3ec2e430LU, 0xa0ff8cebLU, 0x4fb834cbLU, 0xd1855c10LU, -0x55939eb0LU, 0xcbaef66bLU, 0x24e94e4bLU, 0xbad42690LU, 0xb767730bLU, 0x295a1bd0LU, 0xc61da3f0LU, 0x5820cb2bLU, -0x83316afdLU, 0x1d0c0226LU, 0xf24bba06LU, 0x6c76d2ddLU, 0x61c58746LU, 0xfff8ef9dLU, 0x10bf57bdLU, 0x8e823f66LU, -0x0a94fdc6LU, 0x94a9951dLU, 0x7bee2d3dLU, 0xe5d345e6LU, 0xe860107dLU, 0x765d78a6LU, 0x991ac086LU, 0x0727a85dLU, -0x53240ef2LU, 0xcd196629LU, 0x225ede09LU, 0xbc63b6d2LU, 0xb1d0e349LU, 0x2fed8b92LU, 0xc0aa33b2LU, 0x5e975b69LU, -0xda8199c9LU, 0x44bcf112LU, 0xabfb4932LU, 0x35c621e9LU, 0x38757472LU, 0xa6481ca9LU, 0x490fa489LU, 0xd732cc52LU, -0x0c236d84LU, 0x921e055fLU, 0x7d59bd7fLU, 0xe364d5a4LU, 0xeed7803fLU, 0x70eae8e4LU, 0x9fad50c4LU, 0x0190381fLU, -0x8586fabfLU, 0x1bbb9264LU, 0xf4fc2a44LU, 0x6ac1429fLU, 0x67721704LU, 0xf94f7fdfLU, 0x1608c7ffLU, 0x8835af24LU, -0xed2ac81eLU, 0x7317a0c5LU, 0x9c5018e5LU, 0x026d703eLU, 0x0fde25a5LU, 0x91e34d7eLU, 0x7ea4f55eLU, 0xe0999d85LU, -0x648f5f25LU, 0xfab237feLU, 0x15f58fdeLU, 0x8bc8e705LU, 0x867bb29eLU, 0x1846da45LU, 0xf7016265LU, 0x693c0abeLU, -0xb22dab68LU, 0x2c10c3b3LU, 0xc3577b93LU, 0x5d6a1348LU, 0x50d946d3LU, 0xcee42e08LU, 0x21a39628LU, 0xbf9efef3LU, -0x3b883c53LU, 0xa5b55488LU, 0x4af2eca8LU, 0xd4cf8473LU, 0xd97cd1e8LU, 0x4741b933LU, 0xa8060113LU, 0x363b69c8LU }; +0xdc36098bLU, 0x420b6150LU, 0xad4cd970LU, 0x3371b1abLU, 0x3ec2e430LU, 0xa0ff8cebLU, 0x4fb834cbLU, 0xd1855c10LU, +0x55939eb0LU, 0xcbaef66bLU, 0x24e94e4bLU, 0xbad42690LU, 0xb767730bLU, 0x295a1bd0LU, 0xc61da3f0LU, 0x5820cb2bLU, +0x83316afdLU, 0x1d0c0226LU, 0xf24bba06LU, 0x6c76d2ddLU, 0x61c58746LU, 0xfff8ef9dLU, 0x10bf57bdLU, 0x8e823f66LU, +0x0a94fdc6LU, 0x94a9951dLU, 0x7bee2d3dLU, 0xe5d345e6LU, 0xe860107dLU, 0x765d78a6LU, 0x991ac086LU, 0x0727a85dLU, +0x53240ef2LU, 0xcd196629LU, 0x225ede09LU, 0xbc63b6d2LU, 0xb1d0e349LU, 0x2fed8b92LU, 0xc0aa33b2LU, 0x5e975b69LU, +0xda8199c9LU, 0x44bcf112LU, 0xabfb4932LU, 0x35c621e9LU, 0x38757472LU, 0xa6481ca9LU, 0x490fa489LU, 0xd732cc52LU, +0x0c236d84LU, 0x921e055fLU, 0x7d59bd7fLU, 0xe364d5a4LU, 0xeed7803fLU, 0x70eae8e4LU, 0x9fad50c4LU, 0x0190381fLU, +0x8586fabfLU, 0x1bbb9264LU, 0xf4fc2a44LU, 0x6ac1429fLU, 0x67721704LU, 0xf94f7fdfLU, 0x1608c7ffLU, 0x8835af24LU, +0xed2ac81eLU, 0x7317a0c5LU, 0x9c5018e5LU, 0x026d703eLU, 0x0fde25a5LU, 0x91e34d7eLU, 0x7ea4f55eLU, 0xe0999d85LU, +0x648f5f25LU, 0xfab237feLU, 0x15f58fdeLU, 0x8bc8e705LU, 0x867bb29eLU, 0x1846da45LU, 0xf7016265LU, 0x693c0abeLU, +0xb22dab68LU, 0x2c10c3b3LU, 0xc3577b93LU, 0x5d6a1348LU, 0x50d946d3LU, 0xcee42e08LU, 0x21a39628LU, 0xbf9efef3LU, +0x3b883c53LU, 0xa5b55488LU, 0x4af2eca8LU, 0xd4cf8473LU, 0xd97cd1e8LU, 0x4741b933LU, 0xa8060113LU, 0x363b69c8LU }; static const ulong32 rs_tab7[256] = { -0x00000000LU, 0x0319e59eLU, 0x06328771LU, 0x052b62efLU, 0x0c6443e2LU, 0x0f7da67cLU, 0x0a56c493LU, 0x094f210dLU, -0x18c88689LU, 0x1bd16317LU, 0x1efa01f8LU, 0x1de3e466LU, 0x14acc56bLU, 0x17b520f5LU, 0x129e421aLU, 0x1187a784LU, -0x30dd415fLU, 0x33c4a4c1LU, 0x36efc62eLU, 0x35f623b0LU, 0x3cb902bdLU, 0x3fa0e723LU, 0x3a8b85ccLU, 0x39926052LU, -0x2815c7d6LU, 0x2b0c2248LU, 0x2e2740a7LU, 0x2d3ea539LU, 0x24718434LU, 0x276861aaLU, 0x22430345LU, 0x215ae6dbLU, -0x60f782beLU, 0x63ee6720LU, 0x66c505cfLU, 0x65dce051LU, 0x6c93c15cLU, 0x6f8a24c2LU, 0x6aa1462dLU, 0x69b8a3b3LU, -0x783f0437LU, 0x7b26e1a9LU, 0x7e0d8346LU, 0x7d1466d8LU, 0x745b47d5LU, 0x7742a24bLU, 0x7269c0a4LU, 0x7170253aLU, -0x502ac3e1LU, 0x5333267fLU, 0x56184490LU, 0x5501a10eLU, 0x5c4e8003LU, 0x5f57659dLU, 0x5a7c0772LU, 0x5965e2ecLU, -0x48e24568LU, 0x4bfba0f6LU, 0x4ed0c219LU, 0x4dc92787LU, 0x4486068aLU, 0x479fe314LU, 0x42b481fbLU, 0x41ad6465LU, -0xc0a34931LU, 0xc3baacafLU, 0xc691ce40LU, 0xc5882bdeLU, 0xccc70ad3LU, 0xcfdeef4dLU, 0xcaf58da2LU, 0xc9ec683cLU, -0xd86bcfb8LU, 0xdb722a26LU, 0xde5948c9LU, 0xdd40ad57LU, 0xd40f8c5aLU, 0xd71669c4LU, 0xd23d0b2bLU, 0xd124eeb5LU, -0xf07e086eLU, 0xf367edf0LU, 0xf64c8f1fLU, 0xf5556a81LU, 0xfc1a4b8cLU, 0xff03ae12LU, 0xfa28ccfdLU, 0xf9312963LU, -0xe8b68ee7LU, 0xebaf6b79LU, 0xee840996LU, 0xed9dec08LU, 0xe4d2cd05LU, 0xe7cb289bLU, 0xe2e04a74LU, 0xe1f9afeaLU, -0xa054cb8fLU, 0xa34d2e11LU, 0xa6664cfeLU, 0xa57fa960LU, 0xac30886dLU, 0xaf296df3LU, 0xaa020f1cLU, 0xa91bea82LU, -0xb89c4d06LU, 0xbb85a898LU, 0xbeaeca77LU, 0xbdb72fe9LU, 0xb4f80ee4LU, 0xb7e1eb7aLU, 0xb2ca8995LU, 0xb1d36c0bLU, -0x90898ad0LU, 0x93906f4eLU, 0x96bb0da1LU, 0x95a2e83fLU, 0x9cedc932LU, 0x9ff42cacLU, 0x9adf4e43LU, 0x99c6abddLU, -0x88410c59LU, 0x8b58e9c7LU, 0x8e738b28LU, 0x8d6a6eb6LU, 0x84254fbbLU, 0x873caa25LU, 0x8217c8caLU, 0x810e2d54LU, -0xcd0b9262LU, 0xce1277fcLU, 0xcb391513LU, 0xc820f08dLU, 0xc16fd180LU, 0xc276341eLU, 0xc75d56f1LU, 0xc444b36fLU, -0xd5c314ebLU, 0xd6daf175LU, 0xd3f1939aLU, 0xd0e87604LU, 0xd9a75709LU, 0xdabeb297LU, 0xdf95d078LU, 0xdc8c35e6LU, -0xfdd6d33dLU, 0xfecf36a3LU, 0xfbe4544cLU, 0xf8fdb1d2LU, 0xf1b290dfLU, 0xf2ab7541LU, 0xf78017aeLU, 0xf499f230LU, -0xe51e55b4LU, 0xe607b02aLU, 0xe32cd2c5LU, 0xe035375bLU, 0xe97a1656LU, 0xea63f3c8LU, 0xef489127LU, 0xec5174b9LU, -0xadfc10dcLU, 0xaee5f542LU, 0xabce97adLU, 0xa8d77233LU, 0xa198533eLU, 0xa281b6a0LU, 0xa7aad44fLU, 0xa4b331d1LU, -0xb5349655LU, 0xb62d73cbLU, 0xb3061124LU, 0xb01ff4baLU, 0xb950d5b7LU, 0xba493029LU, 0xbf6252c6LU, 0xbc7bb758LU, -0x9d215183LU, 0x9e38b41dLU, 0x9b13d6f2LU, 0x980a336cLU, 0x91451261LU, 0x925cf7ffLU, 0x97779510LU, 0x946e708eLU, -0x85e9d70aLU, 0x86f03294LU, 0x83db507bLU, 0x80c2b5e5LU, 0x898d94e8LU, 0x8a947176LU, 0x8fbf1399LU, 0x8ca6f607LU, -0x0da8db53LU, 0x0eb13ecdLU, 0x0b9a5c22LU, 0x0883b9bcLU, 0x01cc98b1LU, 0x02d57d2fLU, 0x07fe1fc0LU, 0x04e7fa5eLU, -0x15605ddaLU, 0x1679b844LU, 0x1352daabLU, 0x104b3f35LU, 0x19041e38LU, 0x1a1dfba6LU, 0x1f369949LU, 0x1c2f7cd7LU, -0x3d759a0cLU, 0x3e6c7f92LU, 0x3b471d7dLU, 0x385ef8e3LU, 0x3111d9eeLU, 0x32083c70LU, 0x37235e9fLU, 0x343abb01LU, -0x25bd1c85LU, 0x26a4f91bLU, 0x238f9bf4LU, 0x20967e6aLU, 0x29d95f67LU, 0x2ac0baf9LU, 0x2febd816LU, 0x2cf23d88LU, -0x6d5f59edLU, 0x6e46bc73LU, 0x6b6dde9cLU, 0x68743b02LU, 0x613b1a0fLU, 0x6222ff91LU, 0x67099d7eLU, 0x641078e0LU, -0x7597df64LU, 0x768e3afaLU, 0x73a55815LU, 0x70bcbd8bLU, 0x79f39c86LU, 0x7aea7918LU, 0x7fc11bf7LU, 0x7cd8fe69LU, -0x5d8218b2LU, 0x5e9bfd2cLU, 0x5bb09fc3LU, 0x58a97a5dLU, 0x51e65b50LU, 0x52ffbeceLU, 0x57d4dc21LU, 0x54cd39bfLU, +0x00000000LU, 0x0319e59eLU, 0x06328771LU, 0x052b62efLU, 0x0c6443e2LU, 0x0f7da67cLU, 0x0a56c493LU, 0x094f210dLU, +0x18c88689LU, 0x1bd16317LU, 0x1efa01f8LU, 0x1de3e466LU, 0x14acc56bLU, 0x17b520f5LU, 0x129e421aLU, 0x1187a784LU, +0x30dd415fLU, 0x33c4a4c1LU, 0x36efc62eLU, 0x35f623b0LU, 0x3cb902bdLU, 0x3fa0e723LU, 0x3a8b85ccLU, 0x39926052LU, +0x2815c7d6LU, 0x2b0c2248LU, 0x2e2740a7LU, 0x2d3ea539LU, 0x24718434LU, 0x276861aaLU, 0x22430345LU, 0x215ae6dbLU, +0x60f782beLU, 0x63ee6720LU, 0x66c505cfLU, 0x65dce051LU, 0x6c93c15cLU, 0x6f8a24c2LU, 0x6aa1462dLU, 0x69b8a3b3LU, +0x783f0437LU, 0x7b26e1a9LU, 0x7e0d8346LU, 0x7d1466d8LU, 0x745b47d5LU, 0x7742a24bLU, 0x7269c0a4LU, 0x7170253aLU, +0x502ac3e1LU, 0x5333267fLU, 0x56184490LU, 0x5501a10eLU, 0x5c4e8003LU, 0x5f57659dLU, 0x5a7c0772LU, 0x5965e2ecLU, +0x48e24568LU, 0x4bfba0f6LU, 0x4ed0c219LU, 0x4dc92787LU, 0x4486068aLU, 0x479fe314LU, 0x42b481fbLU, 0x41ad6465LU, +0xc0a34931LU, 0xc3baacafLU, 0xc691ce40LU, 0xc5882bdeLU, 0xccc70ad3LU, 0xcfdeef4dLU, 0xcaf58da2LU, 0xc9ec683cLU, +0xd86bcfb8LU, 0xdb722a26LU, 0xde5948c9LU, 0xdd40ad57LU, 0xd40f8c5aLU, 0xd71669c4LU, 0xd23d0b2bLU, 0xd124eeb5LU, +0xf07e086eLU, 0xf367edf0LU, 0xf64c8f1fLU, 0xf5556a81LU, 0xfc1a4b8cLU, 0xff03ae12LU, 0xfa28ccfdLU, 0xf9312963LU, +0xe8b68ee7LU, 0xebaf6b79LU, 0xee840996LU, 0xed9dec08LU, 0xe4d2cd05LU, 0xe7cb289bLU, 0xe2e04a74LU, 0xe1f9afeaLU, +0xa054cb8fLU, 0xa34d2e11LU, 0xa6664cfeLU, 0xa57fa960LU, 0xac30886dLU, 0xaf296df3LU, 0xaa020f1cLU, 0xa91bea82LU, +0xb89c4d06LU, 0xbb85a898LU, 0xbeaeca77LU, 0xbdb72fe9LU, 0xb4f80ee4LU, 0xb7e1eb7aLU, 0xb2ca8995LU, 0xb1d36c0bLU, +0x90898ad0LU, 0x93906f4eLU, 0x96bb0da1LU, 0x95a2e83fLU, 0x9cedc932LU, 0x9ff42cacLU, 0x9adf4e43LU, 0x99c6abddLU, +0x88410c59LU, 0x8b58e9c7LU, 0x8e738b28LU, 0x8d6a6eb6LU, 0x84254fbbLU, 0x873caa25LU, 0x8217c8caLU, 0x810e2d54LU, +0xcd0b9262LU, 0xce1277fcLU, 0xcb391513LU, 0xc820f08dLU, 0xc16fd180LU, 0xc276341eLU, 0xc75d56f1LU, 0xc444b36fLU, +0xd5c314ebLU, 0xd6daf175LU, 0xd3f1939aLU, 0xd0e87604LU, 0xd9a75709LU, 0xdabeb297LU, 0xdf95d078LU, 0xdc8c35e6LU, +0xfdd6d33dLU, 0xfecf36a3LU, 0xfbe4544cLU, 0xf8fdb1d2LU, 0xf1b290dfLU, 0xf2ab7541LU, 0xf78017aeLU, 0xf499f230LU, +0xe51e55b4LU, 0xe607b02aLU, 0xe32cd2c5LU, 0xe035375bLU, 0xe97a1656LU, 0xea63f3c8LU, 0xef489127LU, 0xec5174b9LU, +0xadfc10dcLU, 0xaee5f542LU, 0xabce97adLU, 0xa8d77233LU, 0xa198533eLU, 0xa281b6a0LU, 0xa7aad44fLU, 0xa4b331d1LU, +0xb5349655LU, 0xb62d73cbLU, 0xb3061124LU, 0xb01ff4baLU, 0xb950d5b7LU, 0xba493029LU, 0xbf6252c6LU, 0xbc7bb758LU, +0x9d215183LU, 0x9e38b41dLU, 0x9b13d6f2LU, 0x980a336cLU, 0x91451261LU, 0x925cf7ffLU, 0x97779510LU, 0x946e708eLU, +0x85e9d70aLU, 0x86f03294LU, 0x83db507bLU, 0x80c2b5e5LU, 0x898d94e8LU, 0x8a947176LU, 0x8fbf1399LU, 0x8ca6f607LU, +0x0da8db53LU, 0x0eb13ecdLU, 0x0b9a5c22LU, 0x0883b9bcLU, 0x01cc98b1LU, 0x02d57d2fLU, 0x07fe1fc0LU, 0x04e7fa5eLU, +0x15605ddaLU, 0x1679b844LU, 0x1352daabLU, 0x104b3f35LU, 0x19041e38LU, 0x1a1dfba6LU, 0x1f369949LU, 0x1c2f7cd7LU, +0x3d759a0cLU, 0x3e6c7f92LU, 0x3b471d7dLU, 0x385ef8e3LU, 0x3111d9eeLU, 0x32083c70LU, 0x37235e9fLU, 0x343abb01LU, +0x25bd1c85LU, 0x26a4f91bLU, 0x238f9bf4LU, 0x20967e6aLU, 0x29d95f67LU, 0x2ac0baf9LU, 0x2febd816LU, 0x2cf23d88LU, +0x6d5f59edLU, 0x6e46bc73LU, 0x6b6dde9cLU, 0x68743b02LU, 0x613b1a0fLU, 0x6222ff91LU, 0x67099d7eLU, 0x641078e0LU, +0x7597df64LU, 0x768e3afaLU, 0x73a55815LU, 0x70bcbd8bLU, 0x79f39c86LU, 0x7aea7918LU, 0x7fc11bf7LU, 0x7cd8fe69LU, +0x5d8218b2LU, 0x5e9bfd2cLU, 0x5bb09fc3LU, 0x58a97a5dLU, 0x51e65b50LU, 0x52ffbeceLU, 0x57d4dc21LU, 0x54cd39bfLU, 0x454a9e3bLU, 0x46537ba5LU, 0x4378194aLU, 0x4061fcd4LU, 0x492eddd9LU, 0x4a373847LU, 0x4f1c5aa8LU, 0x4c05bf36LU }; -#endif /* LTC_TWOFISH_ALL_TABLES */ +#endif /* TWOFISH_ALL_TABLES */ -#endif /* LTC_TWOFISH_TAB_C */ #endif diff --git a/updatemakes.sh b/updatemakes.sh deleted file mode 100755 index 98cd90c7..00000000 --- a/updatemakes.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -./helper.pl --update-makefiles || exit 1 - -makefiles=(makefile makefile_include.mk makefile.shared makefile.unix makefile.mingw makefile.msvc sources.cmake tests/sources.cmake) -vcproj=(libtomcrypt_VS2008.vcproj) - -if [ $# -eq 1 ] && [ "$1" == "-c" ]; then - git add ${makefiles[@]} ${vcproj[@]} doc/Doxyfile && git commit -m 'Update makefiles' -fi - -exit 0 diff --git a/src/hashes/whirl/whirl.c b/whirl.c similarity index 77% rename from src/hashes/whirl/whirl.c rename to whirl.c index 48706150..5233c47b 100644 --- a/src/hashes/whirl/whirl.c +++ b/whirl.c @@ -1,62 +1,63 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ -/** - @file whirl.c - LTC_WHIRLPOOL (using their new sbox) hash function by Tom St Denis -*/ +/* WHIRLPOOL (using their new sbox) hash function by Tom St Denis */ -#include "tomcrypt_private.h" +#include "mycrypt.h" -#ifdef LTC_WHIRLPOOL +#ifdef WHIRLPOOL -const struct ltc_hash_descriptor whirlpool_desc = +const struct _hash_descriptor whirlpool_desc = { "whirlpool", 11, 64, 64, - /* OID */ - { 1, 0, 10118, 3, 0, 55 }, - 6, + /* DER encoding (not yet supported) */ + { 0x00 }, + 0, &whirlpool_init, &whirlpool_process, &whirlpool_done, - &whirlpool_test, - NULL + &whirlpool_test }; /* the sboxes */ -#ifndef LTC_WHIRLTAB_C -#define LTC_WHIRLTAB_C #include "whirltab.c" -#endif /* get a_{i,j} */ #define GB(a,i,j) ((a[(i) & 7] >> (8 * (j))) & 255) /* shortcut macro to perform three functions at once */ #define theta_pi_gamma(a, i) \ - (SB0(GB(a, i-0, 7)) ^ \ + SB0(GB(a, i-0, 7)) ^ \ SB1(GB(a, i-1, 6)) ^ \ SB2(GB(a, i-2, 5)) ^ \ SB3(GB(a, i-3, 4)) ^ \ SB4(GB(a, i-4, 3)) ^ \ SB5(GB(a, i-5, 2)) ^ \ SB6(GB(a, i-6, 1)) ^ \ - SB7(GB(a, i-7, 0))) + SB7(GB(a, i-7, 0)) -#ifdef LTC_CLEAN_STACK -static int ss_whirlpool_compress(hash_state *md, const unsigned char *buf) +#ifdef CLEAN_STACK +static void _whirlpool_compress(hash_state *md, unsigned char *buf) #else -static int s_whirlpool_compress(hash_state *md, const unsigned char *buf) +static void whirlpool_compress(hash_state *md, unsigned char *buf) #endif { ulong64 K[2][8], T[3][8]; int x, y; - + /* load the block/state */ for (x = 0; x < 8; x++) { K[0][x] = md->whirlpool.state[x]; @@ -65,7 +66,7 @@ static int s_whirlpool_compress(hash_state *md, const unsigned char *buf) T[2][x] = T[0][x]; T[0][x] ^= K[0][x]; } - + /* do rounds 1..10 */ for (x = 0; x < 10; x += 2) { /* odd round */ @@ -75,7 +76,7 @@ static int s_whirlpool_compress(hash_state *md, const unsigned char *buf) } /* xor the constant */ K[1][0] ^= cont[x]; - + /* apply main transform to T[0] into T[1] */ for (y = 0; y < 8; y++) { T[1][y] = theta_pi_gamma(T[0], y) ^ K[1][y]; @@ -88,66 +89,43 @@ static int s_whirlpool_compress(hash_state *md, const unsigned char *buf) } /* xor the constant */ K[0][0] ^= cont[x+1]; - - /* apply main transform to T[1] into T[0] */ + + /* apply main transform to T[0] into T[1] */ for (y = 0; y < 8; y++) { T[0][y] = theta_pi_gamma(T[1], y) ^ K[0][y]; } } - + /* store state */ for (x = 0; x < 8; x++) { md->whirlpool.state[x] ^= T[0][x] ^ T[2][x]; } - - return CRYPT_OK; } -#ifdef LTC_CLEAN_STACK -static int s_whirlpool_compress(hash_state *md, const unsigned char *buf) +#ifdef CLEAN_STACK +static void whirlpool_compress(hash_state *md, unsigned char *buf) { - int err; - err = ss_whirlpool_compress(md, buf); + _whirlpool_compress(md, buf); burn_stack((5 * 8 * sizeof(ulong64)) + (2 * sizeof(int))); - return err; } #endif -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return CRYPT_OK if successful -*/ -int whirlpool_init(hash_state * md) +void whirlpool_init(hash_state * md) { - LTC_ARGCHK(md != NULL); + _ARGCHK(md != NULL); zeromem(&md->whirlpool, sizeof(md->whirlpool)); - return CRYPT_OK; } -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return CRYPT_OK if successful -*/ -HASH_PROCESS(whirlpool_process, s_whirlpool_compress, whirlpool, 64) +HASH_PROCESS(whirlpool_process, whirlpool_compress, whirlpool, 64) -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (64 bytes) - @return CRYPT_OK if successful -*/ -int whirlpool_done(hash_state * md, unsigned char *out) +int whirlpool_done(hash_state * md, unsigned char *hash) { int i; - LTC_ARGCHK(md != NULL); - LTC_ARGCHK(out != NULL); + _ARGCHK(md != NULL); + _ARGCHK(hash != NULL); if (md->whirlpool.curlen >= sizeof(md->whirlpool.buf)) { return CRYPT_INVALID_ARG; @@ -167,7 +145,7 @@ int whirlpool_done(hash_state * md, unsigned char *out) while (md->whirlpool.curlen < 64) { md->whirlpool.buf[md->whirlpool.curlen++] = (unsigned char)0; } - s_whirlpool_compress(md, md->whirlpool.buf); + whirlpool_compress(md, md->whirlpool.buf); md->whirlpool.curlen = 0; } @@ -178,35 +156,32 @@ int whirlpool_done(hash_state * md, unsigned char *out) /* store length */ STORE64H(md->whirlpool.length, md->whirlpool.buf+56); - s_whirlpool_compress(md, md->whirlpool.buf); + whirlpool_compress(md, md->whirlpool.buf); /* copy output */ for (i = 0; i < 8; i++) { - STORE64H(md->whirlpool.state[i], out+(8*i)); + STORE64H(md->whirlpool.state[i], hash+(8*i)); } -#ifdef LTC_CLEAN_STACK +#ifdef CLEAN_STACK zeromem(md, sizeof(*md)); #endif return CRYPT_OK; } -/** - Self-test the hash - @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ + int whirlpool_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else static const struct { int len; unsigned char msg[128], hash[64]; } tests[] = { - + /* NULL Message */ { - 0, + 0, { 0x00 }, { 0x19, 0xFA, 0x61, 0xD7, 0x55, 0x22, 0xA4, 0x66, 0x9B, 0x44, 0xE3, 0x9C, 0x1D, 0x2E, 0x17, 0x26, 0xC5, 0x30, 0x23, 0x21, 0x30, 0xD4, 0x07, 0xF8, 0x9A, 0xFE, 0xE0, 0x96, 0x49, 0x97, 0xF7, 0xA7, @@ -274,18 +249,25 @@ int whirlpool_test(void) 0x06, 0xDB, 0x4F, 0xF7, 0x08, 0xA3, 0xA2, 0x8B, 0xC3, 0x7A, 0x92, 0x1E, 0xEE, 0x11, 0xED, 0x7B, 0x6A, 0x53, 0x79, 0x32, 0xCC, 0x5E, 0x94, 0xEE, 0x1E, 0xA6, 0x57, 0x60, 0x7E, 0x36, 0xC9, 0xF7 } }, - + }; int i; unsigned char tmp[64]; hash_state md; - for (i = 0; i < (int)LTC_ARRAY_SIZE(tests); i++) { + for (i = 0; i < (int)(sizeof(tests)/sizeof(tests[0])); i++) { whirlpool_init(&md); whirlpool_process(&md, (unsigned char *)tests[i].msg, tests[i].len); whirlpool_done(&md, tmp); - if (ltc_compare_testvector(tmp, sizeof(tmp), tests[i].hash, sizeof(tests[i].hash), "WHIRLPOOL", i)) { + if (memcmp(tmp, tests[i].hash, 64) != 0) { +#if 0 + printf("\nFailed test %d\n", i); + for (i = 0; i < 64; ) { + printf("%02x ", tmp[i]); + if (!(++i & 15)) printf("\n"); + } +#endif return CRYPT_FAIL_TESTVECTOR; } } @@ -293,8 +275,6 @@ int whirlpool_test(void) #endif } -#undef GB -#undef theta_pi_gamma #endif diff --git a/src/hashes/whirl/whirltab.c b/whirltab.c similarity index 55% rename from src/hashes/whirl/whirltab.c rename to whirltab.c index 7c913f76..031c6432 100644 --- a/src/hashes/whirl/whirltab.c +++ b/whirltab.c @@ -1,90 +1,80 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -/** - @file whirltab.c - LTC_WHIRLPOOL tables, Tom St Denis -*/ - -#if defined(LTC_WHIRLPOOL) && defined(LTC_WHIRLTAB_C) - static const ulong64 sbox0[] = { -CONST64(0x18186018c07830d8), CONST64(0x23238c2305af4626), CONST64(0xc6c63fc67ef991b8), CONST64(0xe8e887e8136fcdfb), -CONST64(0x878726874ca113cb), CONST64(0xb8b8dab8a9626d11), CONST64(0x0101040108050209), CONST64(0x4f4f214f426e9e0d), -CONST64(0x3636d836adee6c9b), CONST64(0xa6a6a2a6590451ff), CONST64(0xd2d26fd2debdb90c), CONST64(0xf5f5f3f5fb06f70e), -CONST64(0x7979f979ef80f296), CONST64(0x6f6fa16f5fcede30), CONST64(0x91917e91fcef3f6d), CONST64(0x52525552aa07a4f8), -CONST64(0x60609d6027fdc047), CONST64(0xbcbccabc89766535), CONST64(0x9b9b569baccd2b37), CONST64(0x8e8e028e048c018a), -CONST64(0xa3a3b6a371155bd2), CONST64(0x0c0c300c603c186c), CONST64(0x7b7bf17bff8af684), CONST64(0x3535d435b5e16a80), -CONST64(0x1d1d741de8693af5), CONST64(0xe0e0a7e05347ddb3), CONST64(0xd7d77bd7f6acb321), CONST64(0xc2c22fc25eed999c), -CONST64(0x2e2eb82e6d965c43), CONST64(0x4b4b314b627a9629), CONST64(0xfefedffea321e15d), CONST64(0x575741578216aed5), -CONST64(0x15155415a8412abd), CONST64(0x7777c1779fb6eee8), CONST64(0x3737dc37a5eb6e92), CONST64(0xe5e5b3e57b56d79e), -CONST64(0x9f9f469f8cd92313), CONST64(0xf0f0e7f0d317fd23), CONST64(0x4a4a354a6a7f9420), CONST64(0xdada4fda9e95a944), -CONST64(0x58587d58fa25b0a2), CONST64(0xc9c903c906ca8fcf), CONST64(0x2929a429558d527c), CONST64(0x0a0a280a5022145a), -CONST64(0xb1b1feb1e14f7f50), CONST64(0xa0a0baa0691a5dc9), CONST64(0x6b6bb16b7fdad614), CONST64(0x85852e855cab17d9), -CONST64(0xbdbdcebd8173673c), CONST64(0x5d5d695dd234ba8f), CONST64(0x1010401080502090), CONST64(0xf4f4f7f4f303f507), -CONST64(0xcbcb0bcb16c08bdd), CONST64(0x3e3ef83eedc67cd3), CONST64(0x0505140528110a2d), CONST64(0x676781671fe6ce78), -CONST64(0xe4e4b7e47353d597), CONST64(0x27279c2725bb4e02), CONST64(0x4141194132588273), CONST64(0x8b8b168b2c9d0ba7), -CONST64(0xa7a7a6a7510153f6), CONST64(0x7d7de97dcf94fab2), CONST64(0x95956e95dcfb3749), CONST64(0xd8d847d88e9fad56), -CONST64(0xfbfbcbfb8b30eb70), CONST64(0xeeee9fee2371c1cd), CONST64(0x7c7ced7cc791f8bb), CONST64(0x6666856617e3cc71), -CONST64(0xdddd53dda68ea77b), CONST64(0x17175c17b84b2eaf), CONST64(0x4747014702468e45), CONST64(0x9e9e429e84dc211a), -CONST64(0xcaca0fca1ec589d4), CONST64(0x2d2db42d75995a58), CONST64(0xbfbfc6bf9179632e), CONST64(0x07071c07381b0e3f), -CONST64(0xadad8ead012347ac), CONST64(0x5a5a755aea2fb4b0), CONST64(0x838336836cb51bef), CONST64(0x3333cc3385ff66b6), -CONST64(0x636391633ff2c65c), CONST64(0x02020802100a0412), CONST64(0xaaaa92aa39384993), CONST64(0x7171d971afa8e2de), -CONST64(0xc8c807c80ecf8dc6), CONST64(0x19196419c87d32d1), CONST64(0x494939497270923b), CONST64(0xd9d943d9869aaf5f), -CONST64(0xf2f2eff2c31df931), CONST64(0xe3e3abe34b48dba8), CONST64(0x5b5b715be22ab6b9), CONST64(0x88881a8834920dbc), -CONST64(0x9a9a529aa4c8293e), CONST64(0x262698262dbe4c0b), CONST64(0x3232c8328dfa64bf), CONST64(0xb0b0fab0e94a7d59), -CONST64(0xe9e983e91b6acff2), CONST64(0x0f0f3c0f78331e77), CONST64(0xd5d573d5e6a6b733), CONST64(0x80803a8074ba1df4), -CONST64(0xbebec2be997c6127), CONST64(0xcdcd13cd26de87eb), CONST64(0x3434d034bde46889), CONST64(0x48483d487a759032), -CONST64(0xffffdbffab24e354), CONST64(0x7a7af57af78ff48d), CONST64(0x90907a90f4ea3d64), CONST64(0x5f5f615fc23ebe9d), -CONST64(0x202080201da0403d), CONST64(0x6868bd6867d5d00f), CONST64(0x1a1a681ad07234ca), CONST64(0xaeae82ae192c41b7), -CONST64(0xb4b4eab4c95e757d), CONST64(0x54544d549a19a8ce), CONST64(0x93937693ece53b7f), CONST64(0x222288220daa442f), -CONST64(0x64648d6407e9c863), CONST64(0xf1f1e3f1db12ff2a), CONST64(0x7373d173bfa2e6cc), CONST64(0x12124812905a2482), -CONST64(0x40401d403a5d807a), CONST64(0x0808200840281048), CONST64(0xc3c32bc356e89b95), CONST64(0xecec97ec337bc5df), -CONST64(0xdbdb4bdb9690ab4d), CONST64(0xa1a1bea1611f5fc0), CONST64(0x8d8d0e8d1c830791), CONST64(0x3d3df43df5c97ac8), -CONST64(0x97976697ccf1335b), CONST64(0x0000000000000000), CONST64(0xcfcf1bcf36d483f9), CONST64(0x2b2bac2b4587566e), -CONST64(0x7676c57697b3ece1), CONST64(0x8282328264b019e6), CONST64(0xd6d67fd6fea9b128), CONST64(0x1b1b6c1bd87736c3), -CONST64(0xb5b5eeb5c15b7774), CONST64(0xafaf86af112943be), CONST64(0x6a6ab56a77dfd41d), CONST64(0x50505d50ba0da0ea), -CONST64(0x45450945124c8a57), CONST64(0xf3f3ebf3cb18fb38), CONST64(0x3030c0309df060ad), CONST64(0xefef9bef2b74c3c4), -CONST64(0x3f3ffc3fe5c37eda), CONST64(0x55554955921caac7), CONST64(0xa2a2b2a2791059db), CONST64(0xeaea8fea0365c9e9), -CONST64(0x656589650fecca6a), CONST64(0xbabad2bab9686903), CONST64(0x2f2fbc2f65935e4a), CONST64(0xc0c027c04ee79d8e), -CONST64(0xdede5fdebe81a160), CONST64(0x1c1c701ce06c38fc), CONST64(0xfdfdd3fdbb2ee746), CONST64(0x4d4d294d52649a1f), -CONST64(0x92927292e4e03976), CONST64(0x7575c9758fbceafa), CONST64(0x06061806301e0c36), CONST64(0x8a8a128a249809ae), -CONST64(0xb2b2f2b2f940794b), CONST64(0xe6e6bfe66359d185), CONST64(0x0e0e380e70361c7e), CONST64(0x1f1f7c1ff8633ee7), -CONST64(0x6262956237f7c455), CONST64(0xd4d477d4eea3b53a), CONST64(0xa8a89aa829324d81), CONST64(0x96966296c4f43152), -CONST64(0xf9f9c3f99b3aef62), CONST64(0xc5c533c566f697a3), CONST64(0x2525942535b14a10), CONST64(0x59597959f220b2ab), -CONST64(0x84842a8454ae15d0), CONST64(0x7272d572b7a7e4c5), CONST64(0x3939e439d5dd72ec), CONST64(0x4c4c2d4c5a619816), -CONST64(0x5e5e655eca3bbc94), CONST64(0x7878fd78e785f09f), CONST64(0x3838e038ddd870e5), CONST64(0x8c8c0a8c14860598), -CONST64(0xd1d163d1c6b2bf17), CONST64(0xa5a5aea5410b57e4), CONST64(0xe2e2afe2434dd9a1), CONST64(0x616199612ff8c24e), -CONST64(0xb3b3f6b3f1457b42), CONST64(0x2121842115a54234), CONST64(0x9c9c4a9c94d62508), CONST64(0x1e1e781ef0663cee), -CONST64(0x4343114322528661), CONST64(0xc7c73bc776fc93b1), CONST64(0xfcfcd7fcb32be54f), CONST64(0x0404100420140824), -CONST64(0x51515951b208a2e3), CONST64(0x99995e99bcc72f25), CONST64(0x6d6da96d4fc4da22), CONST64(0x0d0d340d68391a65), -CONST64(0xfafacffa8335e979), CONST64(0xdfdf5bdfb684a369), CONST64(0x7e7ee57ed79bfca9), CONST64(0x242490243db44819), -CONST64(0x3b3bec3bc5d776fe), CONST64(0xabab96ab313d4b9a), CONST64(0xcece1fce3ed181f0), CONST64(0x1111441188552299), -CONST64(0x8f8f068f0c890383), CONST64(0x4e4e254e4a6b9c04), CONST64(0xb7b7e6b7d1517366), CONST64(0xebeb8beb0b60cbe0), -CONST64(0x3c3cf03cfdcc78c1), CONST64(0x81813e817cbf1ffd), CONST64(0x94946a94d4fe3540), CONST64(0xf7f7fbf7eb0cf31c), -CONST64(0xb9b9deb9a1676f18), CONST64(0x13134c13985f268b), CONST64(0x2c2cb02c7d9c5851), CONST64(0xd3d36bd3d6b8bb05), -CONST64(0xe7e7bbe76b5cd38c), CONST64(0x6e6ea56e57cbdc39), CONST64(0xc4c437c46ef395aa), CONST64(0x03030c03180f061b), -CONST64(0x565645568a13acdc), CONST64(0x44440d441a49885e), CONST64(0x7f7fe17fdf9efea0), CONST64(0xa9a99ea921374f88), -CONST64(0x2a2aa82a4d825467), CONST64(0xbbbbd6bbb16d6b0a), CONST64(0xc1c123c146e29f87), CONST64(0x53535153a202a6f1), -CONST64(0xdcdc57dcae8ba572), CONST64(0x0b0b2c0b58271653), CONST64(0x9d9d4e9d9cd32701), CONST64(0x6c6cad6c47c1d82b), -CONST64(0x3131c43195f562a4), CONST64(0x7474cd7487b9e8f3), CONST64(0xf6f6fff6e309f115), CONST64(0x464605460a438c4c), -CONST64(0xacac8aac092645a5), CONST64(0x89891e893c970fb5), CONST64(0x14145014a04428b4), CONST64(0xe1e1a3e15b42dfba), -CONST64(0x16165816b04e2ca6), CONST64(0x3a3ae83acdd274f7), CONST64(0x6969b9696fd0d206), CONST64(0x09092409482d1241), -CONST64(0x7070dd70a7ade0d7), CONST64(0xb6b6e2b6d954716f), CONST64(0xd0d067d0ceb7bd1e), CONST64(0xeded93ed3b7ec7d6), -CONST64(0xcccc17cc2edb85e2), CONST64(0x424215422a578468), CONST64(0x98985a98b4c22d2c), CONST64(0xa4a4aaa4490e55ed), +CONST64(0x18186018c07830d8), CONST64(0x23238c2305af4626), CONST64(0xc6c63fc67ef991b8), CONST64(0xe8e887e8136fcdfb), +CONST64(0x878726874ca113cb), CONST64(0xb8b8dab8a9626d11), CONST64(0x0101040108050209), CONST64(0x4f4f214f426e9e0d), +CONST64(0x3636d836adee6c9b), CONST64(0xa6a6a2a6590451ff), CONST64(0xd2d26fd2debdb90c), CONST64(0xf5f5f3f5fb06f70e), +CONST64(0x7979f979ef80f296), CONST64(0x6f6fa16f5fcede30), CONST64(0x91917e91fcef3f6d), CONST64(0x52525552aa07a4f8), +CONST64(0x60609d6027fdc047), CONST64(0xbcbccabc89766535), CONST64(0x9b9b569baccd2b37), CONST64(0x8e8e028e048c018a), +CONST64(0xa3a3b6a371155bd2), CONST64(0x0c0c300c603c186c), CONST64(0x7b7bf17bff8af684), CONST64(0x3535d435b5e16a80), +CONST64(0x1d1d741de8693af5), CONST64(0xe0e0a7e05347ddb3), CONST64(0xd7d77bd7f6acb321), CONST64(0xc2c22fc25eed999c), +CONST64(0x2e2eb82e6d965c43), CONST64(0x4b4b314b627a9629), CONST64(0xfefedffea321e15d), CONST64(0x575741578216aed5), +CONST64(0x15155415a8412abd), CONST64(0x7777c1779fb6eee8), CONST64(0x3737dc37a5eb6e92), CONST64(0xe5e5b3e57b56d79e), +CONST64(0x9f9f469f8cd92313), CONST64(0xf0f0e7f0d317fd23), CONST64(0x4a4a354a6a7f9420), CONST64(0xdada4fda9e95a944), +CONST64(0x58587d58fa25b0a2), CONST64(0xc9c903c906ca8fcf), CONST64(0x2929a429558d527c), CONST64(0x0a0a280a5022145a), +CONST64(0xb1b1feb1e14f7f50), CONST64(0xa0a0baa0691a5dc9), CONST64(0x6b6bb16b7fdad614), CONST64(0x85852e855cab17d9), +CONST64(0xbdbdcebd8173673c), CONST64(0x5d5d695dd234ba8f), CONST64(0x1010401080502090), CONST64(0xf4f4f7f4f303f507), +CONST64(0xcbcb0bcb16c08bdd), CONST64(0x3e3ef83eedc67cd3), CONST64(0x0505140528110a2d), CONST64(0x676781671fe6ce78), +CONST64(0xe4e4b7e47353d597), CONST64(0x27279c2725bb4e02), CONST64(0x4141194132588273), CONST64(0x8b8b168b2c9d0ba7), +CONST64(0xa7a7a6a7510153f6), CONST64(0x7d7de97dcf94fab2), CONST64(0x95956e95dcfb3749), CONST64(0xd8d847d88e9fad56), +CONST64(0xfbfbcbfb8b30eb70), CONST64(0xeeee9fee2371c1cd), CONST64(0x7c7ced7cc791f8bb), CONST64(0x6666856617e3cc71), +CONST64(0xdddd53dda68ea77b), CONST64(0x17175c17b84b2eaf), CONST64(0x4747014702468e45), CONST64(0x9e9e429e84dc211a), +CONST64(0xcaca0fca1ec589d4), CONST64(0x2d2db42d75995a58), CONST64(0xbfbfc6bf9179632e), CONST64(0x07071c07381b0e3f), +CONST64(0xadad8ead012347ac), CONST64(0x5a5a755aea2fb4b0), CONST64(0x838336836cb51bef), CONST64(0x3333cc3385ff66b6), +CONST64(0x636391633ff2c65c), CONST64(0x02020802100a0412), CONST64(0xaaaa92aa39384993), CONST64(0x7171d971afa8e2de), +CONST64(0xc8c807c80ecf8dc6), CONST64(0x19196419c87d32d1), CONST64(0x494939497270923b), CONST64(0xd9d943d9869aaf5f), +CONST64(0xf2f2eff2c31df931), CONST64(0xe3e3abe34b48dba8), CONST64(0x5b5b715be22ab6b9), CONST64(0x88881a8834920dbc), +CONST64(0x9a9a529aa4c8293e), CONST64(0x262698262dbe4c0b), CONST64(0x3232c8328dfa64bf), CONST64(0xb0b0fab0e94a7d59), +CONST64(0xe9e983e91b6acff2), CONST64(0x0f0f3c0f78331e77), CONST64(0xd5d573d5e6a6b733), CONST64(0x80803a8074ba1df4), +CONST64(0xbebec2be997c6127), CONST64(0xcdcd13cd26de87eb), CONST64(0x3434d034bde46889), CONST64(0x48483d487a759032), +CONST64(0xffffdbffab24e354), CONST64(0x7a7af57af78ff48d), CONST64(0x90907a90f4ea3d64), CONST64(0x5f5f615fc23ebe9d), +CONST64(0x202080201da0403d), CONST64(0x6868bd6867d5d00f), CONST64(0x1a1a681ad07234ca), CONST64(0xaeae82ae192c41b7), +CONST64(0xb4b4eab4c95e757d), CONST64(0x54544d549a19a8ce), CONST64(0x93937693ece53b7f), CONST64(0x222288220daa442f), +CONST64(0x64648d6407e9c863), CONST64(0xf1f1e3f1db12ff2a), CONST64(0x7373d173bfa2e6cc), CONST64(0x12124812905a2482), +CONST64(0x40401d403a5d807a), CONST64(0x0808200840281048), CONST64(0xc3c32bc356e89b95), CONST64(0xecec97ec337bc5df), +CONST64(0xdbdb4bdb9690ab4d), CONST64(0xa1a1bea1611f5fc0), CONST64(0x8d8d0e8d1c830791), CONST64(0x3d3df43df5c97ac8), +CONST64(0x97976697ccf1335b), CONST64(0x0000000000000000), CONST64(0xcfcf1bcf36d483f9), CONST64(0x2b2bac2b4587566e), +CONST64(0x7676c57697b3ece1), CONST64(0x8282328264b019e6), CONST64(0xd6d67fd6fea9b128), CONST64(0x1b1b6c1bd87736c3), +CONST64(0xb5b5eeb5c15b7774), CONST64(0xafaf86af112943be), CONST64(0x6a6ab56a77dfd41d), CONST64(0x50505d50ba0da0ea), +CONST64(0x45450945124c8a57), CONST64(0xf3f3ebf3cb18fb38), CONST64(0x3030c0309df060ad), CONST64(0xefef9bef2b74c3c4), +CONST64(0x3f3ffc3fe5c37eda), CONST64(0x55554955921caac7), CONST64(0xa2a2b2a2791059db), CONST64(0xeaea8fea0365c9e9), +CONST64(0x656589650fecca6a), CONST64(0xbabad2bab9686903), CONST64(0x2f2fbc2f65935e4a), CONST64(0xc0c027c04ee79d8e), +CONST64(0xdede5fdebe81a160), CONST64(0x1c1c701ce06c38fc), CONST64(0xfdfdd3fdbb2ee746), CONST64(0x4d4d294d52649a1f), +CONST64(0x92927292e4e03976), CONST64(0x7575c9758fbceafa), CONST64(0x06061806301e0c36), CONST64(0x8a8a128a249809ae), +CONST64(0xb2b2f2b2f940794b), CONST64(0xe6e6bfe66359d185), CONST64(0x0e0e380e70361c7e), CONST64(0x1f1f7c1ff8633ee7), +CONST64(0x6262956237f7c455), CONST64(0xd4d477d4eea3b53a), CONST64(0xa8a89aa829324d81), CONST64(0x96966296c4f43152), +CONST64(0xf9f9c3f99b3aef62), CONST64(0xc5c533c566f697a3), CONST64(0x2525942535b14a10), CONST64(0x59597959f220b2ab), +CONST64(0x84842a8454ae15d0), CONST64(0x7272d572b7a7e4c5), CONST64(0x3939e439d5dd72ec), CONST64(0x4c4c2d4c5a619816), +CONST64(0x5e5e655eca3bbc94), CONST64(0x7878fd78e785f09f), CONST64(0x3838e038ddd870e5), CONST64(0x8c8c0a8c14860598), +CONST64(0xd1d163d1c6b2bf17), CONST64(0xa5a5aea5410b57e4), CONST64(0xe2e2afe2434dd9a1), CONST64(0x616199612ff8c24e), +CONST64(0xb3b3f6b3f1457b42), CONST64(0x2121842115a54234), CONST64(0x9c9c4a9c94d62508), CONST64(0x1e1e781ef0663cee), +CONST64(0x4343114322528661), CONST64(0xc7c73bc776fc93b1), CONST64(0xfcfcd7fcb32be54f), CONST64(0x0404100420140824), +CONST64(0x51515951b208a2e3), CONST64(0x99995e99bcc72f25), CONST64(0x6d6da96d4fc4da22), CONST64(0x0d0d340d68391a65), +CONST64(0xfafacffa8335e979), CONST64(0xdfdf5bdfb684a369), CONST64(0x7e7ee57ed79bfca9), CONST64(0x242490243db44819), +CONST64(0x3b3bec3bc5d776fe), CONST64(0xabab96ab313d4b9a), CONST64(0xcece1fce3ed181f0), CONST64(0x1111441188552299), +CONST64(0x8f8f068f0c890383), CONST64(0x4e4e254e4a6b9c04), CONST64(0xb7b7e6b7d1517366), CONST64(0xebeb8beb0b60cbe0), +CONST64(0x3c3cf03cfdcc78c1), CONST64(0x81813e817cbf1ffd), CONST64(0x94946a94d4fe3540), CONST64(0xf7f7fbf7eb0cf31c), +CONST64(0xb9b9deb9a1676f18), CONST64(0x13134c13985f268b), CONST64(0x2c2cb02c7d9c5851), CONST64(0xd3d36bd3d6b8bb05), +CONST64(0xe7e7bbe76b5cd38c), CONST64(0x6e6ea56e57cbdc39), CONST64(0xc4c437c46ef395aa), CONST64(0x03030c03180f061b), +CONST64(0x565645568a13acdc), CONST64(0x44440d441a49885e), CONST64(0x7f7fe17fdf9efea0), CONST64(0xa9a99ea921374f88), +CONST64(0x2a2aa82a4d825467), CONST64(0xbbbbd6bbb16d6b0a), CONST64(0xc1c123c146e29f87), CONST64(0x53535153a202a6f1), +CONST64(0xdcdc57dcae8ba572), CONST64(0x0b0b2c0b58271653), CONST64(0x9d9d4e9d9cd32701), CONST64(0x6c6cad6c47c1d82b), +CONST64(0x3131c43195f562a4), CONST64(0x7474cd7487b9e8f3), CONST64(0xf6f6fff6e309f115), CONST64(0x464605460a438c4c), +CONST64(0xacac8aac092645a5), CONST64(0x89891e893c970fb5), CONST64(0x14145014a04428b4), CONST64(0xe1e1a3e15b42dfba), +CONST64(0x16165816b04e2ca6), CONST64(0x3a3ae83acdd274f7), CONST64(0x6969b9696fd0d206), CONST64(0x09092409482d1241), +CONST64(0x7070dd70a7ade0d7), CONST64(0xb6b6e2b6d954716f), CONST64(0xd0d067d0ceb7bd1e), CONST64(0xeded93ed3b7ec7d6), +CONST64(0xcccc17cc2edb85e2), CONST64(0x424215422a578468), CONST64(0x98985a98b4c22d2c), CONST64(0xa4a4aaa4490e55ed), CONST64(0x2828a0285d885075), CONST64(0x5c5c6d5cda31b886), CONST64(0xf8f8c7f8933fed6b), CONST64(0x8686228644a411c2) }; -#ifdef LTC_SMALL_CODE +#ifdef SMALL_CODE #define SB0(x) sbox0[x] -#define SB1(x) ROR64c(sbox0[x], 8) -#define SB2(x) ROR64c(sbox0[x], 16) -#define SB3(x) ROR64c(sbox0[x], 24) -#define SB4(x) ROR64c(sbox0[x], 32) -#define SB5(x) ROR64c(sbox0[x], 40) -#define SB6(x) ROR64c(sbox0[x], 48) -#define SB7(x) ROR64c(sbox0[x], 56) +#define SB1(x) ROR64(sbox0[x], 8) +#define SB2(x) ROR64(sbox0[x], 16) +#define SB3(x) ROR64(sbox0[x], 24) +#define SB4(x) ROR64(sbox0[x], 32) +#define SB5(x) ROR64(sbox0[x], 40) +#define SB6(x) ROR64(sbox0[x], 48) +#define SB7(x) ROR64(sbox0[x], 56) #else @@ -99,471 +89,471 @@ CONST64(0x2828a0285d885075), CONST64(0x5c5c6d5cda31b886), CONST64(0xf8f8c7f8933f static const ulong64 sbox1[] = { -CONST64(0xd818186018c07830), CONST64(0x2623238c2305af46), CONST64(0xb8c6c63fc67ef991), CONST64(0xfbe8e887e8136fcd), -CONST64(0xcb878726874ca113), CONST64(0x11b8b8dab8a9626d), CONST64(0x0901010401080502), CONST64(0x0d4f4f214f426e9e), -CONST64(0x9b3636d836adee6c), CONST64(0xffa6a6a2a6590451), CONST64(0x0cd2d26fd2debdb9), CONST64(0x0ef5f5f3f5fb06f7), -CONST64(0x967979f979ef80f2), CONST64(0x306f6fa16f5fcede), CONST64(0x6d91917e91fcef3f), CONST64(0xf852525552aa07a4), -CONST64(0x4760609d6027fdc0), CONST64(0x35bcbccabc897665), CONST64(0x379b9b569baccd2b), CONST64(0x8a8e8e028e048c01), -CONST64(0xd2a3a3b6a371155b), CONST64(0x6c0c0c300c603c18), CONST64(0x847b7bf17bff8af6), CONST64(0x803535d435b5e16a), -CONST64(0xf51d1d741de8693a), CONST64(0xb3e0e0a7e05347dd), CONST64(0x21d7d77bd7f6acb3), CONST64(0x9cc2c22fc25eed99), -CONST64(0x432e2eb82e6d965c), CONST64(0x294b4b314b627a96), CONST64(0x5dfefedffea321e1), CONST64(0xd5575741578216ae), -CONST64(0xbd15155415a8412a), CONST64(0xe87777c1779fb6ee), CONST64(0x923737dc37a5eb6e), CONST64(0x9ee5e5b3e57b56d7), -CONST64(0x139f9f469f8cd923), CONST64(0x23f0f0e7f0d317fd), CONST64(0x204a4a354a6a7f94), CONST64(0x44dada4fda9e95a9), -CONST64(0xa258587d58fa25b0), CONST64(0xcfc9c903c906ca8f), CONST64(0x7c2929a429558d52), CONST64(0x5a0a0a280a502214), -CONST64(0x50b1b1feb1e14f7f), CONST64(0xc9a0a0baa0691a5d), CONST64(0x146b6bb16b7fdad6), CONST64(0xd985852e855cab17), -CONST64(0x3cbdbdcebd817367), CONST64(0x8f5d5d695dd234ba), CONST64(0x9010104010805020), CONST64(0x07f4f4f7f4f303f5), -CONST64(0xddcbcb0bcb16c08b), CONST64(0xd33e3ef83eedc67c), CONST64(0x2d0505140528110a), CONST64(0x78676781671fe6ce), -CONST64(0x97e4e4b7e47353d5), CONST64(0x0227279c2725bb4e), CONST64(0x7341411941325882), CONST64(0xa78b8b168b2c9d0b), -CONST64(0xf6a7a7a6a7510153), CONST64(0xb27d7de97dcf94fa), CONST64(0x4995956e95dcfb37), CONST64(0x56d8d847d88e9fad), -CONST64(0x70fbfbcbfb8b30eb), CONST64(0xcdeeee9fee2371c1), CONST64(0xbb7c7ced7cc791f8), CONST64(0x716666856617e3cc), -CONST64(0x7bdddd53dda68ea7), CONST64(0xaf17175c17b84b2e), CONST64(0x454747014702468e), CONST64(0x1a9e9e429e84dc21), -CONST64(0xd4caca0fca1ec589), CONST64(0x582d2db42d75995a), CONST64(0x2ebfbfc6bf917963), CONST64(0x3f07071c07381b0e), -CONST64(0xacadad8ead012347), CONST64(0xb05a5a755aea2fb4), CONST64(0xef838336836cb51b), CONST64(0xb63333cc3385ff66), -CONST64(0x5c636391633ff2c6), CONST64(0x1202020802100a04), CONST64(0x93aaaa92aa393849), CONST64(0xde7171d971afa8e2), -CONST64(0xc6c8c807c80ecf8d), CONST64(0xd119196419c87d32), CONST64(0x3b49493949727092), CONST64(0x5fd9d943d9869aaf), -CONST64(0x31f2f2eff2c31df9), CONST64(0xa8e3e3abe34b48db), CONST64(0xb95b5b715be22ab6), CONST64(0xbc88881a8834920d), -CONST64(0x3e9a9a529aa4c829), CONST64(0x0b262698262dbe4c), CONST64(0xbf3232c8328dfa64), CONST64(0x59b0b0fab0e94a7d), -CONST64(0xf2e9e983e91b6acf), CONST64(0x770f0f3c0f78331e), CONST64(0x33d5d573d5e6a6b7), CONST64(0xf480803a8074ba1d), -CONST64(0x27bebec2be997c61), CONST64(0xebcdcd13cd26de87), CONST64(0x893434d034bde468), CONST64(0x3248483d487a7590), -CONST64(0x54ffffdbffab24e3), CONST64(0x8d7a7af57af78ff4), CONST64(0x6490907a90f4ea3d), CONST64(0x9d5f5f615fc23ebe), -CONST64(0x3d202080201da040), CONST64(0x0f6868bd6867d5d0), CONST64(0xca1a1a681ad07234), CONST64(0xb7aeae82ae192c41), -CONST64(0x7db4b4eab4c95e75), CONST64(0xce54544d549a19a8), CONST64(0x7f93937693ece53b), CONST64(0x2f222288220daa44), -CONST64(0x6364648d6407e9c8), CONST64(0x2af1f1e3f1db12ff), CONST64(0xcc7373d173bfa2e6), CONST64(0x8212124812905a24), -CONST64(0x7a40401d403a5d80), CONST64(0x4808082008402810), CONST64(0x95c3c32bc356e89b), CONST64(0xdfecec97ec337bc5), -CONST64(0x4ddbdb4bdb9690ab), CONST64(0xc0a1a1bea1611f5f), CONST64(0x918d8d0e8d1c8307), CONST64(0xc83d3df43df5c97a), -CONST64(0x5b97976697ccf133), CONST64(0x0000000000000000), CONST64(0xf9cfcf1bcf36d483), CONST64(0x6e2b2bac2b458756), -CONST64(0xe17676c57697b3ec), CONST64(0xe68282328264b019), CONST64(0x28d6d67fd6fea9b1), CONST64(0xc31b1b6c1bd87736), -CONST64(0x74b5b5eeb5c15b77), CONST64(0xbeafaf86af112943), CONST64(0x1d6a6ab56a77dfd4), CONST64(0xea50505d50ba0da0), -CONST64(0x5745450945124c8a), CONST64(0x38f3f3ebf3cb18fb), CONST64(0xad3030c0309df060), CONST64(0xc4efef9bef2b74c3), -CONST64(0xda3f3ffc3fe5c37e), CONST64(0xc755554955921caa), CONST64(0xdba2a2b2a2791059), CONST64(0xe9eaea8fea0365c9), -CONST64(0x6a656589650fecca), CONST64(0x03babad2bab96869), CONST64(0x4a2f2fbc2f65935e), CONST64(0x8ec0c027c04ee79d), -CONST64(0x60dede5fdebe81a1), CONST64(0xfc1c1c701ce06c38), CONST64(0x46fdfdd3fdbb2ee7), CONST64(0x1f4d4d294d52649a), -CONST64(0x7692927292e4e039), CONST64(0xfa7575c9758fbcea), CONST64(0x3606061806301e0c), CONST64(0xae8a8a128a249809), -CONST64(0x4bb2b2f2b2f94079), CONST64(0x85e6e6bfe66359d1), CONST64(0x7e0e0e380e70361c), CONST64(0xe71f1f7c1ff8633e), -CONST64(0x556262956237f7c4), CONST64(0x3ad4d477d4eea3b5), CONST64(0x81a8a89aa829324d), CONST64(0x5296966296c4f431), -CONST64(0x62f9f9c3f99b3aef), CONST64(0xa3c5c533c566f697), CONST64(0x102525942535b14a), CONST64(0xab59597959f220b2), -CONST64(0xd084842a8454ae15), CONST64(0xc57272d572b7a7e4), CONST64(0xec3939e439d5dd72), CONST64(0x164c4c2d4c5a6198), -CONST64(0x945e5e655eca3bbc), CONST64(0x9f7878fd78e785f0), CONST64(0xe53838e038ddd870), CONST64(0x988c8c0a8c148605), -CONST64(0x17d1d163d1c6b2bf), CONST64(0xe4a5a5aea5410b57), CONST64(0xa1e2e2afe2434dd9), CONST64(0x4e616199612ff8c2), -CONST64(0x42b3b3f6b3f1457b), CONST64(0x342121842115a542), CONST64(0x089c9c4a9c94d625), CONST64(0xee1e1e781ef0663c), -CONST64(0x6143431143225286), CONST64(0xb1c7c73bc776fc93), CONST64(0x4ffcfcd7fcb32be5), CONST64(0x2404041004201408), -CONST64(0xe351515951b208a2), CONST64(0x2599995e99bcc72f), CONST64(0x226d6da96d4fc4da), CONST64(0x650d0d340d68391a), -CONST64(0x79fafacffa8335e9), CONST64(0x69dfdf5bdfb684a3), CONST64(0xa97e7ee57ed79bfc), CONST64(0x19242490243db448), -CONST64(0xfe3b3bec3bc5d776), CONST64(0x9aabab96ab313d4b), CONST64(0xf0cece1fce3ed181), CONST64(0x9911114411885522), -CONST64(0x838f8f068f0c8903), CONST64(0x044e4e254e4a6b9c), CONST64(0x66b7b7e6b7d15173), CONST64(0xe0ebeb8beb0b60cb), -CONST64(0xc13c3cf03cfdcc78), CONST64(0xfd81813e817cbf1f), CONST64(0x4094946a94d4fe35), CONST64(0x1cf7f7fbf7eb0cf3), -CONST64(0x18b9b9deb9a1676f), CONST64(0x8b13134c13985f26), CONST64(0x512c2cb02c7d9c58), CONST64(0x05d3d36bd3d6b8bb), -CONST64(0x8ce7e7bbe76b5cd3), CONST64(0x396e6ea56e57cbdc), CONST64(0xaac4c437c46ef395), CONST64(0x1b03030c03180f06), -CONST64(0xdc565645568a13ac), CONST64(0x5e44440d441a4988), CONST64(0xa07f7fe17fdf9efe), CONST64(0x88a9a99ea921374f), -CONST64(0x672a2aa82a4d8254), CONST64(0x0abbbbd6bbb16d6b), CONST64(0x87c1c123c146e29f), CONST64(0xf153535153a202a6), -CONST64(0x72dcdc57dcae8ba5), CONST64(0x530b0b2c0b582716), CONST64(0x019d9d4e9d9cd327), CONST64(0x2b6c6cad6c47c1d8), -CONST64(0xa43131c43195f562), CONST64(0xf37474cd7487b9e8), CONST64(0x15f6f6fff6e309f1), CONST64(0x4c464605460a438c), -CONST64(0xa5acac8aac092645), CONST64(0xb589891e893c970f), CONST64(0xb414145014a04428), CONST64(0xbae1e1a3e15b42df), -CONST64(0xa616165816b04e2c), CONST64(0xf73a3ae83acdd274), CONST64(0x066969b9696fd0d2), CONST64(0x4109092409482d12), -CONST64(0xd77070dd70a7ade0), CONST64(0x6fb6b6e2b6d95471), CONST64(0x1ed0d067d0ceb7bd), CONST64(0xd6eded93ed3b7ec7), -CONST64(0xe2cccc17cc2edb85), CONST64(0x68424215422a5784), CONST64(0x2c98985a98b4c22d), CONST64(0xeda4a4aaa4490e55), +CONST64(0xd818186018c07830), CONST64(0x2623238c2305af46), CONST64(0xb8c6c63fc67ef991), CONST64(0xfbe8e887e8136fcd), +CONST64(0xcb878726874ca113), CONST64(0x11b8b8dab8a9626d), CONST64(0x0901010401080502), CONST64(0x0d4f4f214f426e9e), +CONST64(0x9b3636d836adee6c), CONST64(0xffa6a6a2a6590451), CONST64(0x0cd2d26fd2debdb9), CONST64(0x0ef5f5f3f5fb06f7), +CONST64(0x967979f979ef80f2), CONST64(0x306f6fa16f5fcede), CONST64(0x6d91917e91fcef3f), CONST64(0xf852525552aa07a4), +CONST64(0x4760609d6027fdc0), CONST64(0x35bcbccabc897665), CONST64(0x379b9b569baccd2b), CONST64(0x8a8e8e028e048c01), +CONST64(0xd2a3a3b6a371155b), CONST64(0x6c0c0c300c603c18), CONST64(0x847b7bf17bff8af6), CONST64(0x803535d435b5e16a), +CONST64(0xf51d1d741de8693a), CONST64(0xb3e0e0a7e05347dd), CONST64(0x21d7d77bd7f6acb3), CONST64(0x9cc2c22fc25eed99), +CONST64(0x432e2eb82e6d965c), CONST64(0x294b4b314b627a96), CONST64(0x5dfefedffea321e1), CONST64(0xd5575741578216ae), +CONST64(0xbd15155415a8412a), CONST64(0xe87777c1779fb6ee), CONST64(0x923737dc37a5eb6e), CONST64(0x9ee5e5b3e57b56d7), +CONST64(0x139f9f469f8cd923), CONST64(0x23f0f0e7f0d317fd), CONST64(0x204a4a354a6a7f94), CONST64(0x44dada4fda9e95a9), +CONST64(0xa258587d58fa25b0), CONST64(0xcfc9c903c906ca8f), CONST64(0x7c2929a429558d52), CONST64(0x5a0a0a280a502214), +CONST64(0x50b1b1feb1e14f7f), CONST64(0xc9a0a0baa0691a5d), CONST64(0x146b6bb16b7fdad6), CONST64(0xd985852e855cab17), +CONST64(0x3cbdbdcebd817367), CONST64(0x8f5d5d695dd234ba), CONST64(0x9010104010805020), CONST64(0x07f4f4f7f4f303f5), +CONST64(0xddcbcb0bcb16c08b), CONST64(0xd33e3ef83eedc67c), CONST64(0x2d0505140528110a), CONST64(0x78676781671fe6ce), +CONST64(0x97e4e4b7e47353d5), CONST64(0x0227279c2725bb4e), CONST64(0x7341411941325882), CONST64(0xa78b8b168b2c9d0b), +CONST64(0xf6a7a7a6a7510153), CONST64(0xb27d7de97dcf94fa), CONST64(0x4995956e95dcfb37), CONST64(0x56d8d847d88e9fad), +CONST64(0x70fbfbcbfb8b30eb), CONST64(0xcdeeee9fee2371c1), CONST64(0xbb7c7ced7cc791f8), CONST64(0x716666856617e3cc), +CONST64(0x7bdddd53dda68ea7), CONST64(0xaf17175c17b84b2e), CONST64(0x454747014702468e), CONST64(0x1a9e9e429e84dc21), +CONST64(0xd4caca0fca1ec589), CONST64(0x582d2db42d75995a), CONST64(0x2ebfbfc6bf917963), CONST64(0x3f07071c07381b0e), +CONST64(0xacadad8ead012347), CONST64(0xb05a5a755aea2fb4), CONST64(0xef838336836cb51b), CONST64(0xb63333cc3385ff66), +CONST64(0x5c636391633ff2c6), CONST64(0x1202020802100a04), CONST64(0x93aaaa92aa393849), CONST64(0xde7171d971afa8e2), +CONST64(0xc6c8c807c80ecf8d), CONST64(0xd119196419c87d32), CONST64(0x3b49493949727092), CONST64(0x5fd9d943d9869aaf), +CONST64(0x31f2f2eff2c31df9), CONST64(0xa8e3e3abe34b48db), CONST64(0xb95b5b715be22ab6), CONST64(0xbc88881a8834920d), +CONST64(0x3e9a9a529aa4c829), CONST64(0x0b262698262dbe4c), CONST64(0xbf3232c8328dfa64), CONST64(0x59b0b0fab0e94a7d), +CONST64(0xf2e9e983e91b6acf), CONST64(0x770f0f3c0f78331e), CONST64(0x33d5d573d5e6a6b7), CONST64(0xf480803a8074ba1d), +CONST64(0x27bebec2be997c61), CONST64(0xebcdcd13cd26de87), CONST64(0x893434d034bde468), CONST64(0x3248483d487a7590), +CONST64(0x54ffffdbffab24e3), CONST64(0x8d7a7af57af78ff4), CONST64(0x6490907a90f4ea3d), CONST64(0x9d5f5f615fc23ebe), +CONST64(0x3d202080201da040), CONST64(0x0f6868bd6867d5d0), CONST64(0xca1a1a681ad07234), CONST64(0xb7aeae82ae192c41), +CONST64(0x7db4b4eab4c95e75), CONST64(0xce54544d549a19a8), CONST64(0x7f93937693ece53b), CONST64(0x2f222288220daa44), +CONST64(0x6364648d6407e9c8), CONST64(0x2af1f1e3f1db12ff), CONST64(0xcc7373d173bfa2e6), CONST64(0x8212124812905a24), +CONST64(0x7a40401d403a5d80), CONST64(0x4808082008402810), CONST64(0x95c3c32bc356e89b), CONST64(0xdfecec97ec337bc5), +CONST64(0x4ddbdb4bdb9690ab), CONST64(0xc0a1a1bea1611f5f), CONST64(0x918d8d0e8d1c8307), CONST64(0xc83d3df43df5c97a), +CONST64(0x5b97976697ccf133), CONST64(0x0000000000000000), CONST64(0xf9cfcf1bcf36d483), CONST64(0x6e2b2bac2b458756), +CONST64(0xe17676c57697b3ec), CONST64(0xe68282328264b019), CONST64(0x28d6d67fd6fea9b1), CONST64(0xc31b1b6c1bd87736), +CONST64(0x74b5b5eeb5c15b77), CONST64(0xbeafaf86af112943), CONST64(0x1d6a6ab56a77dfd4), CONST64(0xea50505d50ba0da0), +CONST64(0x5745450945124c8a), CONST64(0x38f3f3ebf3cb18fb), CONST64(0xad3030c0309df060), CONST64(0xc4efef9bef2b74c3), +CONST64(0xda3f3ffc3fe5c37e), CONST64(0xc755554955921caa), CONST64(0xdba2a2b2a2791059), CONST64(0xe9eaea8fea0365c9), +CONST64(0x6a656589650fecca), CONST64(0x03babad2bab96869), CONST64(0x4a2f2fbc2f65935e), CONST64(0x8ec0c027c04ee79d), +CONST64(0x60dede5fdebe81a1), CONST64(0xfc1c1c701ce06c38), CONST64(0x46fdfdd3fdbb2ee7), CONST64(0x1f4d4d294d52649a), +CONST64(0x7692927292e4e039), CONST64(0xfa7575c9758fbcea), CONST64(0x3606061806301e0c), CONST64(0xae8a8a128a249809), +CONST64(0x4bb2b2f2b2f94079), CONST64(0x85e6e6bfe66359d1), CONST64(0x7e0e0e380e70361c), CONST64(0xe71f1f7c1ff8633e), +CONST64(0x556262956237f7c4), CONST64(0x3ad4d477d4eea3b5), CONST64(0x81a8a89aa829324d), CONST64(0x5296966296c4f431), +CONST64(0x62f9f9c3f99b3aef), CONST64(0xa3c5c533c566f697), CONST64(0x102525942535b14a), CONST64(0xab59597959f220b2), +CONST64(0xd084842a8454ae15), CONST64(0xc57272d572b7a7e4), CONST64(0xec3939e439d5dd72), CONST64(0x164c4c2d4c5a6198), +CONST64(0x945e5e655eca3bbc), CONST64(0x9f7878fd78e785f0), CONST64(0xe53838e038ddd870), CONST64(0x988c8c0a8c148605), +CONST64(0x17d1d163d1c6b2bf), CONST64(0xe4a5a5aea5410b57), CONST64(0xa1e2e2afe2434dd9), CONST64(0x4e616199612ff8c2), +CONST64(0x42b3b3f6b3f1457b), CONST64(0x342121842115a542), CONST64(0x089c9c4a9c94d625), CONST64(0xee1e1e781ef0663c), +CONST64(0x6143431143225286), CONST64(0xb1c7c73bc776fc93), CONST64(0x4ffcfcd7fcb32be5), CONST64(0x2404041004201408), +CONST64(0xe351515951b208a2), CONST64(0x2599995e99bcc72f), CONST64(0x226d6da96d4fc4da), CONST64(0x650d0d340d68391a), +CONST64(0x79fafacffa8335e9), CONST64(0x69dfdf5bdfb684a3), CONST64(0xa97e7ee57ed79bfc), CONST64(0x19242490243db448), +CONST64(0xfe3b3bec3bc5d776), CONST64(0x9aabab96ab313d4b), CONST64(0xf0cece1fce3ed181), CONST64(0x9911114411885522), +CONST64(0x838f8f068f0c8903), CONST64(0x044e4e254e4a6b9c), CONST64(0x66b7b7e6b7d15173), CONST64(0xe0ebeb8beb0b60cb), +CONST64(0xc13c3cf03cfdcc78), CONST64(0xfd81813e817cbf1f), CONST64(0x4094946a94d4fe35), CONST64(0x1cf7f7fbf7eb0cf3), +CONST64(0x18b9b9deb9a1676f), CONST64(0x8b13134c13985f26), CONST64(0x512c2cb02c7d9c58), CONST64(0x05d3d36bd3d6b8bb), +CONST64(0x8ce7e7bbe76b5cd3), CONST64(0x396e6ea56e57cbdc), CONST64(0xaac4c437c46ef395), CONST64(0x1b03030c03180f06), +CONST64(0xdc565645568a13ac), CONST64(0x5e44440d441a4988), CONST64(0xa07f7fe17fdf9efe), CONST64(0x88a9a99ea921374f), +CONST64(0x672a2aa82a4d8254), CONST64(0x0abbbbd6bbb16d6b), CONST64(0x87c1c123c146e29f), CONST64(0xf153535153a202a6), +CONST64(0x72dcdc57dcae8ba5), CONST64(0x530b0b2c0b582716), CONST64(0x019d9d4e9d9cd327), CONST64(0x2b6c6cad6c47c1d8), +CONST64(0xa43131c43195f562), CONST64(0xf37474cd7487b9e8), CONST64(0x15f6f6fff6e309f1), CONST64(0x4c464605460a438c), +CONST64(0xa5acac8aac092645), CONST64(0xb589891e893c970f), CONST64(0xb414145014a04428), CONST64(0xbae1e1a3e15b42df), +CONST64(0xa616165816b04e2c), CONST64(0xf73a3ae83acdd274), CONST64(0x066969b9696fd0d2), CONST64(0x4109092409482d12), +CONST64(0xd77070dd70a7ade0), CONST64(0x6fb6b6e2b6d95471), CONST64(0x1ed0d067d0ceb7bd), CONST64(0xd6eded93ed3b7ec7), +CONST64(0xe2cccc17cc2edb85), CONST64(0x68424215422a5784), CONST64(0x2c98985a98b4c22d), CONST64(0xeda4a4aaa4490e55), CONST64(0x752828a0285d8850), CONST64(0x865c5c6d5cda31b8), CONST64(0x6bf8f8c7f8933fed), CONST64(0xc28686228644a411) }; static const ulong64 sbox2[] = { -CONST64(0x30d818186018c078), CONST64(0x462623238c2305af), CONST64(0x91b8c6c63fc67ef9), CONST64(0xcdfbe8e887e8136f), -CONST64(0x13cb878726874ca1), CONST64(0x6d11b8b8dab8a962), CONST64(0x0209010104010805), CONST64(0x9e0d4f4f214f426e), -CONST64(0x6c9b3636d836adee), CONST64(0x51ffa6a6a2a65904), CONST64(0xb90cd2d26fd2debd), CONST64(0xf70ef5f5f3f5fb06), -CONST64(0xf2967979f979ef80), CONST64(0xde306f6fa16f5fce), CONST64(0x3f6d91917e91fcef), CONST64(0xa4f852525552aa07), -CONST64(0xc04760609d6027fd), CONST64(0x6535bcbccabc8976), CONST64(0x2b379b9b569baccd), CONST64(0x018a8e8e028e048c), -CONST64(0x5bd2a3a3b6a37115), CONST64(0x186c0c0c300c603c), CONST64(0xf6847b7bf17bff8a), CONST64(0x6a803535d435b5e1), -CONST64(0x3af51d1d741de869), CONST64(0xddb3e0e0a7e05347), CONST64(0xb321d7d77bd7f6ac), CONST64(0x999cc2c22fc25eed), -CONST64(0x5c432e2eb82e6d96), CONST64(0x96294b4b314b627a), CONST64(0xe15dfefedffea321), CONST64(0xaed5575741578216), -CONST64(0x2abd15155415a841), CONST64(0xeee87777c1779fb6), CONST64(0x6e923737dc37a5eb), CONST64(0xd79ee5e5b3e57b56), -CONST64(0x23139f9f469f8cd9), CONST64(0xfd23f0f0e7f0d317), CONST64(0x94204a4a354a6a7f), CONST64(0xa944dada4fda9e95), -CONST64(0xb0a258587d58fa25), CONST64(0x8fcfc9c903c906ca), CONST64(0x527c2929a429558d), CONST64(0x145a0a0a280a5022), -CONST64(0x7f50b1b1feb1e14f), CONST64(0x5dc9a0a0baa0691a), CONST64(0xd6146b6bb16b7fda), CONST64(0x17d985852e855cab), -CONST64(0x673cbdbdcebd8173), CONST64(0xba8f5d5d695dd234), CONST64(0x2090101040108050), CONST64(0xf507f4f4f7f4f303), -CONST64(0x8bddcbcb0bcb16c0), CONST64(0x7cd33e3ef83eedc6), CONST64(0x0a2d050514052811), CONST64(0xce78676781671fe6), -CONST64(0xd597e4e4b7e47353), CONST64(0x4e0227279c2725bb), CONST64(0x8273414119413258), CONST64(0x0ba78b8b168b2c9d), -CONST64(0x53f6a7a7a6a75101), CONST64(0xfab27d7de97dcf94), CONST64(0x374995956e95dcfb), CONST64(0xad56d8d847d88e9f), -CONST64(0xeb70fbfbcbfb8b30), CONST64(0xc1cdeeee9fee2371), CONST64(0xf8bb7c7ced7cc791), CONST64(0xcc716666856617e3), -CONST64(0xa77bdddd53dda68e), CONST64(0x2eaf17175c17b84b), CONST64(0x8e45474701470246), CONST64(0x211a9e9e429e84dc), -CONST64(0x89d4caca0fca1ec5), CONST64(0x5a582d2db42d7599), CONST64(0x632ebfbfc6bf9179), CONST64(0x0e3f07071c07381b), -CONST64(0x47acadad8ead0123), CONST64(0xb4b05a5a755aea2f), CONST64(0x1bef838336836cb5), CONST64(0x66b63333cc3385ff), -CONST64(0xc65c636391633ff2), CONST64(0x041202020802100a), CONST64(0x4993aaaa92aa3938), CONST64(0xe2de7171d971afa8), -CONST64(0x8dc6c8c807c80ecf), CONST64(0x32d119196419c87d), CONST64(0x923b494939497270), CONST64(0xaf5fd9d943d9869a), -CONST64(0xf931f2f2eff2c31d), CONST64(0xdba8e3e3abe34b48), CONST64(0xb6b95b5b715be22a), CONST64(0x0dbc88881a883492), -CONST64(0x293e9a9a529aa4c8), CONST64(0x4c0b262698262dbe), CONST64(0x64bf3232c8328dfa), CONST64(0x7d59b0b0fab0e94a), -CONST64(0xcff2e9e983e91b6a), CONST64(0x1e770f0f3c0f7833), CONST64(0xb733d5d573d5e6a6), CONST64(0x1df480803a8074ba), -CONST64(0x6127bebec2be997c), CONST64(0x87ebcdcd13cd26de), CONST64(0x68893434d034bde4), CONST64(0x903248483d487a75), -CONST64(0xe354ffffdbffab24), CONST64(0xf48d7a7af57af78f), CONST64(0x3d6490907a90f4ea), CONST64(0xbe9d5f5f615fc23e), -CONST64(0x403d202080201da0), CONST64(0xd00f6868bd6867d5), CONST64(0x34ca1a1a681ad072), CONST64(0x41b7aeae82ae192c), -CONST64(0x757db4b4eab4c95e), CONST64(0xa8ce54544d549a19), CONST64(0x3b7f93937693ece5), CONST64(0x442f222288220daa), -CONST64(0xc86364648d6407e9), CONST64(0xff2af1f1e3f1db12), CONST64(0xe6cc7373d173bfa2), CONST64(0x248212124812905a), -CONST64(0x807a40401d403a5d), CONST64(0x1048080820084028), CONST64(0x9b95c3c32bc356e8), CONST64(0xc5dfecec97ec337b), -CONST64(0xab4ddbdb4bdb9690), CONST64(0x5fc0a1a1bea1611f), CONST64(0x07918d8d0e8d1c83), CONST64(0x7ac83d3df43df5c9), -CONST64(0x335b97976697ccf1), CONST64(0x0000000000000000), CONST64(0x83f9cfcf1bcf36d4), CONST64(0x566e2b2bac2b4587), -CONST64(0xece17676c57697b3), CONST64(0x19e68282328264b0), CONST64(0xb128d6d67fd6fea9), CONST64(0x36c31b1b6c1bd877), -CONST64(0x7774b5b5eeb5c15b), CONST64(0x43beafaf86af1129), CONST64(0xd41d6a6ab56a77df), CONST64(0xa0ea50505d50ba0d), -CONST64(0x8a5745450945124c), CONST64(0xfb38f3f3ebf3cb18), CONST64(0x60ad3030c0309df0), CONST64(0xc3c4efef9bef2b74), -CONST64(0x7eda3f3ffc3fe5c3), CONST64(0xaac755554955921c), CONST64(0x59dba2a2b2a27910), CONST64(0xc9e9eaea8fea0365), -CONST64(0xca6a656589650fec), CONST64(0x6903babad2bab968), CONST64(0x5e4a2f2fbc2f6593), CONST64(0x9d8ec0c027c04ee7), -CONST64(0xa160dede5fdebe81), CONST64(0x38fc1c1c701ce06c), CONST64(0xe746fdfdd3fdbb2e), CONST64(0x9a1f4d4d294d5264), -CONST64(0x397692927292e4e0), CONST64(0xeafa7575c9758fbc), CONST64(0x0c3606061806301e), CONST64(0x09ae8a8a128a2498), -CONST64(0x794bb2b2f2b2f940), CONST64(0xd185e6e6bfe66359), CONST64(0x1c7e0e0e380e7036), CONST64(0x3ee71f1f7c1ff863), -CONST64(0xc4556262956237f7), CONST64(0xb53ad4d477d4eea3), CONST64(0x4d81a8a89aa82932), CONST64(0x315296966296c4f4), -CONST64(0xef62f9f9c3f99b3a), CONST64(0x97a3c5c533c566f6), CONST64(0x4a102525942535b1), CONST64(0xb2ab59597959f220), -CONST64(0x15d084842a8454ae), CONST64(0xe4c57272d572b7a7), CONST64(0x72ec3939e439d5dd), CONST64(0x98164c4c2d4c5a61), -CONST64(0xbc945e5e655eca3b), CONST64(0xf09f7878fd78e785), CONST64(0x70e53838e038ddd8), CONST64(0x05988c8c0a8c1486), -CONST64(0xbf17d1d163d1c6b2), CONST64(0x57e4a5a5aea5410b), CONST64(0xd9a1e2e2afe2434d), CONST64(0xc24e616199612ff8), -CONST64(0x7b42b3b3f6b3f145), CONST64(0x42342121842115a5), CONST64(0x25089c9c4a9c94d6), CONST64(0x3cee1e1e781ef066), -CONST64(0x8661434311432252), CONST64(0x93b1c7c73bc776fc), CONST64(0xe54ffcfcd7fcb32b), CONST64(0x0824040410042014), -CONST64(0xa2e351515951b208), CONST64(0x2f2599995e99bcc7), CONST64(0xda226d6da96d4fc4), CONST64(0x1a650d0d340d6839), -CONST64(0xe979fafacffa8335), CONST64(0xa369dfdf5bdfb684), CONST64(0xfca97e7ee57ed79b), CONST64(0x4819242490243db4), -CONST64(0x76fe3b3bec3bc5d7), CONST64(0x4b9aabab96ab313d), CONST64(0x81f0cece1fce3ed1), CONST64(0x2299111144118855), -CONST64(0x03838f8f068f0c89), CONST64(0x9c044e4e254e4a6b), CONST64(0x7366b7b7e6b7d151), CONST64(0xcbe0ebeb8beb0b60), -CONST64(0x78c13c3cf03cfdcc), CONST64(0x1ffd81813e817cbf), CONST64(0x354094946a94d4fe), CONST64(0xf31cf7f7fbf7eb0c), -CONST64(0x6f18b9b9deb9a167), CONST64(0x268b13134c13985f), CONST64(0x58512c2cb02c7d9c), CONST64(0xbb05d3d36bd3d6b8), -CONST64(0xd38ce7e7bbe76b5c), CONST64(0xdc396e6ea56e57cb), CONST64(0x95aac4c437c46ef3), CONST64(0x061b03030c03180f), -CONST64(0xacdc565645568a13), CONST64(0x885e44440d441a49), CONST64(0xfea07f7fe17fdf9e), CONST64(0x4f88a9a99ea92137), -CONST64(0x54672a2aa82a4d82), CONST64(0x6b0abbbbd6bbb16d), CONST64(0x9f87c1c123c146e2), CONST64(0xa6f153535153a202), -CONST64(0xa572dcdc57dcae8b), CONST64(0x16530b0b2c0b5827), CONST64(0x27019d9d4e9d9cd3), CONST64(0xd82b6c6cad6c47c1), -CONST64(0x62a43131c43195f5), CONST64(0xe8f37474cd7487b9), CONST64(0xf115f6f6fff6e309), CONST64(0x8c4c464605460a43), -CONST64(0x45a5acac8aac0926), CONST64(0x0fb589891e893c97), CONST64(0x28b414145014a044), CONST64(0xdfbae1e1a3e15b42), -CONST64(0x2ca616165816b04e), CONST64(0x74f73a3ae83acdd2), CONST64(0xd2066969b9696fd0), CONST64(0x124109092409482d), -CONST64(0xe0d77070dd70a7ad), CONST64(0x716fb6b6e2b6d954), CONST64(0xbd1ed0d067d0ceb7), CONST64(0xc7d6eded93ed3b7e), -CONST64(0x85e2cccc17cc2edb), CONST64(0x8468424215422a57), CONST64(0x2d2c98985a98b4c2), CONST64(0x55eda4a4aaa4490e), +CONST64(0x30d818186018c078), CONST64(0x462623238c2305af), CONST64(0x91b8c6c63fc67ef9), CONST64(0xcdfbe8e887e8136f), +CONST64(0x13cb878726874ca1), CONST64(0x6d11b8b8dab8a962), CONST64(0x0209010104010805), CONST64(0x9e0d4f4f214f426e), +CONST64(0x6c9b3636d836adee), CONST64(0x51ffa6a6a2a65904), CONST64(0xb90cd2d26fd2debd), CONST64(0xf70ef5f5f3f5fb06), +CONST64(0xf2967979f979ef80), CONST64(0xde306f6fa16f5fce), CONST64(0x3f6d91917e91fcef), CONST64(0xa4f852525552aa07), +CONST64(0xc04760609d6027fd), CONST64(0x6535bcbccabc8976), CONST64(0x2b379b9b569baccd), CONST64(0x018a8e8e028e048c), +CONST64(0x5bd2a3a3b6a37115), CONST64(0x186c0c0c300c603c), CONST64(0xf6847b7bf17bff8a), CONST64(0x6a803535d435b5e1), +CONST64(0x3af51d1d741de869), CONST64(0xddb3e0e0a7e05347), CONST64(0xb321d7d77bd7f6ac), CONST64(0x999cc2c22fc25eed), +CONST64(0x5c432e2eb82e6d96), CONST64(0x96294b4b314b627a), CONST64(0xe15dfefedffea321), CONST64(0xaed5575741578216), +CONST64(0x2abd15155415a841), CONST64(0xeee87777c1779fb6), CONST64(0x6e923737dc37a5eb), CONST64(0xd79ee5e5b3e57b56), +CONST64(0x23139f9f469f8cd9), CONST64(0xfd23f0f0e7f0d317), CONST64(0x94204a4a354a6a7f), CONST64(0xa944dada4fda9e95), +CONST64(0xb0a258587d58fa25), CONST64(0x8fcfc9c903c906ca), CONST64(0x527c2929a429558d), CONST64(0x145a0a0a280a5022), +CONST64(0x7f50b1b1feb1e14f), CONST64(0x5dc9a0a0baa0691a), CONST64(0xd6146b6bb16b7fda), CONST64(0x17d985852e855cab), +CONST64(0x673cbdbdcebd8173), CONST64(0xba8f5d5d695dd234), CONST64(0x2090101040108050), CONST64(0xf507f4f4f7f4f303), +CONST64(0x8bddcbcb0bcb16c0), CONST64(0x7cd33e3ef83eedc6), CONST64(0x0a2d050514052811), CONST64(0xce78676781671fe6), +CONST64(0xd597e4e4b7e47353), CONST64(0x4e0227279c2725bb), CONST64(0x8273414119413258), CONST64(0x0ba78b8b168b2c9d), +CONST64(0x53f6a7a7a6a75101), CONST64(0xfab27d7de97dcf94), CONST64(0x374995956e95dcfb), CONST64(0xad56d8d847d88e9f), +CONST64(0xeb70fbfbcbfb8b30), CONST64(0xc1cdeeee9fee2371), CONST64(0xf8bb7c7ced7cc791), CONST64(0xcc716666856617e3), +CONST64(0xa77bdddd53dda68e), CONST64(0x2eaf17175c17b84b), CONST64(0x8e45474701470246), CONST64(0x211a9e9e429e84dc), +CONST64(0x89d4caca0fca1ec5), CONST64(0x5a582d2db42d7599), CONST64(0x632ebfbfc6bf9179), CONST64(0x0e3f07071c07381b), +CONST64(0x47acadad8ead0123), CONST64(0xb4b05a5a755aea2f), CONST64(0x1bef838336836cb5), CONST64(0x66b63333cc3385ff), +CONST64(0xc65c636391633ff2), CONST64(0x041202020802100a), CONST64(0x4993aaaa92aa3938), CONST64(0xe2de7171d971afa8), +CONST64(0x8dc6c8c807c80ecf), CONST64(0x32d119196419c87d), CONST64(0x923b494939497270), CONST64(0xaf5fd9d943d9869a), +CONST64(0xf931f2f2eff2c31d), CONST64(0xdba8e3e3abe34b48), CONST64(0xb6b95b5b715be22a), CONST64(0x0dbc88881a883492), +CONST64(0x293e9a9a529aa4c8), CONST64(0x4c0b262698262dbe), CONST64(0x64bf3232c8328dfa), CONST64(0x7d59b0b0fab0e94a), +CONST64(0xcff2e9e983e91b6a), CONST64(0x1e770f0f3c0f7833), CONST64(0xb733d5d573d5e6a6), CONST64(0x1df480803a8074ba), +CONST64(0x6127bebec2be997c), CONST64(0x87ebcdcd13cd26de), CONST64(0x68893434d034bde4), CONST64(0x903248483d487a75), +CONST64(0xe354ffffdbffab24), CONST64(0xf48d7a7af57af78f), CONST64(0x3d6490907a90f4ea), CONST64(0xbe9d5f5f615fc23e), +CONST64(0x403d202080201da0), CONST64(0xd00f6868bd6867d5), CONST64(0x34ca1a1a681ad072), CONST64(0x41b7aeae82ae192c), +CONST64(0x757db4b4eab4c95e), CONST64(0xa8ce54544d549a19), CONST64(0x3b7f93937693ece5), CONST64(0x442f222288220daa), +CONST64(0xc86364648d6407e9), CONST64(0xff2af1f1e3f1db12), CONST64(0xe6cc7373d173bfa2), CONST64(0x248212124812905a), +CONST64(0x807a40401d403a5d), CONST64(0x1048080820084028), CONST64(0x9b95c3c32bc356e8), CONST64(0xc5dfecec97ec337b), +CONST64(0xab4ddbdb4bdb9690), CONST64(0x5fc0a1a1bea1611f), CONST64(0x07918d8d0e8d1c83), CONST64(0x7ac83d3df43df5c9), +CONST64(0x335b97976697ccf1), CONST64(0x0000000000000000), CONST64(0x83f9cfcf1bcf36d4), CONST64(0x566e2b2bac2b4587), +CONST64(0xece17676c57697b3), CONST64(0x19e68282328264b0), CONST64(0xb128d6d67fd6fea9), CONST64(0x36c31b1b6c1bd877), +CONST64(0x7774b5b5eeb5c15b), CONST64(0x43beafaf86af1129), CONST64(0xd41d6a6ab56a77df), CONST64(0xa0ea50505d50ba0d), +CONST64(0x8a5745450945124c), CONST64(0xfb38f3f3ebf3cb18), CONST64(0x60ad3030c0309df0), CONST64(0xc3c4efef9bef2b74), +CONST64(0x7eda3f3ffc3fe5c3), CONST64(0xaac755554955921c), CONST64(0x59dba2a2b2a27910), CONST64(0xc9e9eaea8fea0365), +CONST64(0xca6a656589650fec), CONST64(0x6903babad2bab968), CONST64(0x5e4a2f2fbc2f6593), CONST64(0x9d8ec0c027c04ee7), +CONST64(0xa160dede5fdebe81), CONST64(0x38fc1c1c701ce06c), CONST64(0xe746fdfdd3fdbb2e), CONST64(0x9a1f4d4d294d5264), +CONST64(0x397692927292e4e0), CONST64(0xeafa7575c9758fbc), CONST64(0x0c3606061806301e), CONST64(0x09ae8a8a128a2498), +CONST64(0x794bb2b2f2b2f940), CONST64(0xd185e6e6bfe66359), CONST64(0x1c7e0e0e380e7036), CONST64(0x3ee71f1f7c1ff863), +CONST64(0xc4556262956237f7), CONST64(0xb53ad4d477d4eea3), CONST64(0x4d81a8a89aa82932), CONST64(0x315296966296c4f4), +CONST64(0xef62f9f9c3f99b3a), CONST64(0x97a3c5c533c566f6), CONST64(0x4a102525942535b1), CONST64(0xb2ab59597959f220), +CONST64(0x15d084842a8454ae), CONST64(0xe4c57272d572b7a7), CONST64(0x72ec3939e439d5dd), CONST64(0x98164c4c2d4c5a61), +CONST64(0xbc945e5e655eca3b), CONST64(0xf09f7878fd78e785), CONST64(0x70e53838e038ddd8), CONST64(0x05988c8c0a8c1486), +CONST64(0xbf17d1d163d1c6b2), CONST64(0x57e4a5a5aea5410b), CONST64(0xd9a1e2e2afe2434d), CONST64(0xc24e616199612ff8), +CONST64(0x7b42b3b3f6b3f145), CONST64(0x42342121842115a5), CONST64(0x25089c9c4a9c94d6), CONST64(0x3cee1e1e781ef066), +CONST64(0x8661434311432252), CONST64(0x93b1c7c73bc776fc), CONST64(0xe54ffcfcd7fcb32b), CONST64(0x0824040410042014), +CONST64(0xa2e351515951b208), CONST64(0x2f2599995e99bcc7), CONST64(0xda226d6da96d4fc4), CONST64(0x1a650d0d340d6839), +CONST64(0xe979fafacffa8335), CONST64(0xa369dfdf5bdfb684), CONST64(0xfca97e7ee57ed79b), CONST64(0x4819242490243db4), +CONST64(0x76fe3b3bec3bc5d7), CONST64(0x4b9aabab96ab313d), CONST64(0x81f0cece1fce3ed1), CONST64(0x2299111144118855), +CONST64(0x03838f8f068f0c89), CONST64(0x9c044e4e254e4a6b), CONST64(0x7366b7b7e6b7d151), CONST64(0xcbe0ebeb8beb0b60), +CONST64(0x78c13c3cf03cfdcc), CONST64(0x1ffd81813e817cbf), CONST64(0x354094946a94d4fe), CONST64(0xf31cf7f7fbf7eb0c), +CONST64(0x6f18b9b9deb9a167), CONST64(0x268b13134c13985f), CONST64(0x58512c2cb02c7d9c), CONST64(0xbb05d3d36bd3d6b8), +CONST64(0xd38ce7e7bbe76b5c), CONST64(0xdc396e6ea56e57cb), CONST64(0x95aac4c437c46ef3), CONST64(0x061b03030c03180f), +CONST64(0xacdc565645568a13), CONST64(0x885e44440d441a49), CONST64(0xfea07f7fe17fdf9e), CONST64(0x4f88a9a99ea92137), +CONST64(0x54672a2aa82a4d82), CONST64(0x6b0abbbbd6bbb16d), CONST64(0x9f87c1c123c146e2), CONST64(0xa6f153535153a202), +CONST64(0xa572dcdc57dcae8b), CONST64(0x16530b0b2c0b5827), CONST64(0x27019d9d4e9d9cd3), CONST64(0xd82b6c6cad6c47c1), +CONST64(0x62a43131c43195f5), CONST64(0xe8f37474cd7487b9), CONST64(0xf115f6f6fff6e309), CONST64(0x8c4c464605460a43), +CONST64(0x45a5acac8aac0926), CONST64(0x0fb589891e893c97), CONST64(0x28b414145014a044), CONST64(0xdfbae1e1a3e15b42), +CONST64(0x2ca616165816b04e), CONST64(0x74f73a3ae83acdd2), CONST64(0xd2066969b9696fd0), CONST64(0x124109092409482d), +CONST64(0xe0d77070dd70a7ad), CONST64(0x716fb6b6e2b6d954), CONST64(0xbd1ed0d067d0ceb7), CONST64(0xc7d6eded93ed3b7e), +CONST64(0x85e2cccc17cc2edb), CONST64(0x8468424215422a57), CONST64(0x2d2c98985a98b4c2), CONST64(0x55eda4a4aaa4490e), CONST64(0x50752828a0285d88), CONST64(0xb8865c5c6d5cda31), CONST64(0xed6bf8f8c7f8933f), CONST64(0x11c28686228644a4) }; static const ulong64 sbox3[] = { -CONST64(0x7830d818186018c0), CONST64(0xaf462623238c2305), CONST64(0xf991b8c6c63fc67e), CONST64(0x6fcdfbe8e887e813), -CONST64(0xa113cb878726874c), CONST64(0x626d11b8b8dab8a9), CONST64(0x0502090101040108), CONST64(0x6e9e0d4f4f214f42), -CONST64(0xee6c9b3636d836ad), CONST64(0x0451ffa6a6a2a659), CONST64(0xbdb90cd2d26fd2de), CONST64(0x06f70ef5f5f3f5fb), -CONST64(0x80f2967979f979ef), CONST64(0xcede306f6fa16f5f), CONST64(0xef3f6d91917e91fc), CONST64(0x07a4f852525552aa), -CONST64(0xfdc04760609d6027), CONST64(0x766535bcbccabc89), CONST64(0xcd2b379b9b569bac), CONST64(0x8c018a8e8e028e04), -CONST64(0x155bd2a3a3b6a371), CONST64(0x3c186c0c0c300c60), CONST64(0x8af6847b7bf17bff), CONST64(0xe16a803535d435b5), -CONST64(0x693af51d1d741de8), CONST64(0x47ddb3e0e0a7e053), CONST64(0xacb321d7d77bd7f6), CONST64(0xed999cc2c22fc25e), -CONST64(0x965c432e2eb82e6d), CONST64(0x7a96294b4b314b62), CONST64(0x21e15dfefedffea3), CONST64(0x16aed55757415782), -CONST64(0x412abd15155415a8), CONST64(0xb6eee87777c1779f), CONST64(0xeb6e923737dc37a5), CONST64(0x56d79ee5e5b3e57b), -CONST64(0xd923139f9f469f8c), CONST64(0x17fd23f0f0e7f0d3), CONST64(0x7f94204a4a354a6a), CONST64(0x95a944dada4fda9e), -CONST64(0x25b0a258587d58fa), CONST64(0xca8fcfc9c903c906), CONST64(0x8d527c2929a42955), CONST64(0x22145a0a0a280a50), -CONST64(0x4f7f50b1b1feb1e1), CONST64(0x1a5dc9a0a0baa069), CONST64(0xdad6146b6bb16b7f), CONST64(0xab17d985852e855c), -CONST64(0x73673cbdbdcebd81), CONST64(0x34ba8f5d5d695dd2), CONST64(0x5020901010401080), CONST64(0x03f507f4f4f7f4f3), -CONST64(0xc08bddcbcb0bcb16), CONST64(0xc67cd33e3ef83eed), CONST64(0x110a2d0505140528), CONST64(0xe6ce78676781671f), -CONST64(0x53d597e4e4b7e473), CONST64(0xbb4e0227279c2725), CONST64(0x5882734141194132), CONST64(0x9d0ba78b8b168b2c), -CONST64(0x0153f6a7a7a6a751), CONST64(0x94fab27d7de97dcf), CONST64(0xfb374995956e95dc), CONST64(0x9fad56d8d847d88e), -CONST64(0x30eb70fbfbcbfb8b), CONST64(0x71c1cdeeee9fee23), CONST64(0x91f8bb7c7ced7cc7), CONST64(0xe3cc716666856617), -CONST64(0x8ea77bdddd53dda6), CONST64(0x4b2eaf17175c17b8), CONST64(0x468e454747014702), CONST64(0xdc211a9e9e429e84), -CONST64(0xc589d4caca0fca1e), CONST64(0x995a582d2db42d75), CONST64(0x79632ebfbfc6bf91), CONST64(0x1b0e3f07071c0738), -CONST64(0x2347acadad8ead01), CONST64(0x2fb4b05a5a755aea), CONST64(0xb51bef838336836c), CONST64(0xff66b63333cc3385), -CONST64(0xf2c65c636391633f), CONST64(0x0a04120202080210), CONST64(0x384993aaaa92aa39), CONST64(0xa8e2de7171d971af), -CONST64(0xcf8dc6c8c807c80e), CONST64(0x7d32d119196419c8), CONST64(0x70923b4949394972), CONST64(0x9aaf5fd9d943d986), -CONST64(0x1df931f2f2eff2c3), CONST64(0x48dba8e3e3abe34b), CONST64(0x2ab6b95b5b715be2), CONST64(0x920dbc88881a8834), -CONST64(0xc8293e9a9a529aa4), CONST64(0xbe4c0b262698262d), CONST64(0xfa64bf3232c8328d), CONST64(0x4a7d59b0b0fab0e9), -CONST64(0x6acff2e9e983e91b), CONST64(0x331e770f0f3c0f78), CONST64(0xa6b733d5d573d5e6), CONST64(0xba1df480803a8074), -CONST64(0x7c6127bebec2be99), CONST64(0xde87ebcdcd13cd26), CONST64(0xe468893434d034bd), CONST64(0x75903248483d487a), -CONST64(0x24e354ffffdbffab), CONST64(0x8ff48d7a7af57af7), CONST64(0xea3d6490907a90f4), CONST64(0x3ebe9d5f5f615fc2), -CONST64(0xa0403d202080201d), CONST64(0xd5d00f6868bd6867), CONST64(0x7234ca1a1a681ad0), CONST64(0x2c41b7aeae82ae19), -CONST64(0x5e757db4b4eab4c9), CONST64(0x19a8ce54544d549a), CONST64(0xe53b7f93937693ec), CONST64(0xaa442f222288220d), -CONST64(0xe9c86364648d6407), CONST64(0x12ff2af1f1e3f1db), CONST64(0xa2e6cc7373d173bf), CONST64(0x5a24821212481290), -CONST64(0x5d807a40401d403a), CONST64(0x2810480808200840), CONST64(0xe89b95c3c32bc356), CONST64(0x7bc5dfecec97ec33), -CONST64(0x90ab4ddbdb4bdb96), CONST64(0x1f5fc0a1a1bea161), CONST64(0x8307918d8d0e8d1c), CONST64(0xc97ac83d3df43df5), -CONST64(0xf1335b97976697cc), CONST64(0x0000000000000000), CONST64(0xd483f9cfcf1bcf36), CONST64(0x87566e2b2bac2b45), -CONST64(0xb3ece17676c57697), CONST64(0xb019e68282328264), CONST64(0xa9b128d6d67fd6fe), CONST64(0x7736c31b1b6c1bd8), -CONST64(0x5b7774b5b5eeb5c1), CONST64(0x2943beafaf86af11), CONST64(0xdfd41d6a6ab56a77), CONST64(0x0da0ea50505d50ba), -CONST64(0x4c8a574545094512), CONST64(0x18fb38f3f3ebf3cb), CONST64(0xf060ad3030c0309d), CONST64(0x74c3c4efef9bef2b), -CONST64(0xc37eda3f3ffc3fe5), CONST64(0x1caac75555495592), CONST64(0x1059dba2a2b2a279), CONST64(0x65c9e9eaea8fea03), -CONST64(0xecca6a656589650f), CONST64(0x686903babad2bab9), CONST64(0x935e4a2f2fbc2f65), CONST64(0xe79d8ec0c027c04e), -CONST64(0x81a160dede5fdebe), CONST64(0x6c38fc1c1c701ce0), CONST64(0x2ee746fdfdd3fdbb), CONST64(0x649a1f4d4d294d52), -CONST64(0xe0397692927292e4), CONST64(0xbceafa7575c9758f), CONST64(0x1e0c360606180630), CONST64(0x9809ae8a8a128a24), -CONST64(0x40794bb2b2f2b2f9), CONST64(0x59d185e6e6bfe663), CONST64(0x361c7e0e0e380e70), CONST64(0x633ee71f1f7c1ff8), -CONST64(0xf7c4556262956237), CONST64(0xa3b53ad4d477d4ee), CONST64(0x324d81a8a89aa829), CONST64(0xf4315296966296c4), -CONST64(0x3aef62f9f9c3f99b), CONST64(0xf697a3c5c533c566), CONST64(0xb14a102525942535), CONST64(0x20b2ab59597959f2), -CONST64(0xae15d084842a8454), CONST64(0xa7e4c57272d572b7), CONST64(0xdd72ec3939e439d5), CONST64(0x6198164c4c2d4c5a), -CONST64(0x3bbc945e5e655eca), CONST64(0x85f09f7878fd78e7), CONST64(0xd870e53838e038dd), CONST64(0x8605988c8c0a8c14), -CONST64(0xb2bf17d1d163d1c6), CONST64(0x0b57e4a5a5aea541), CONST64(0x4dd9a1e2e2afe243), CONST64(0xf8c24e616199612f), -CONST64(0x457b42b3b3f6b3f1), CONST64(0xa542342121842115), CONST64(0xd625089c9c4a9c94), CONST64(0x663cee1e1e781ef0), -CONST64(0x5286614343114322), CONST64(0xfc93b1c7c73bc776), CONST64(0x2be54ffcfcd7fcb3), CONST64(0x1408240404100420), -CONST64(0x08a2e351515951b2), CONST64(0xc72f2599995e99bc), CONST64(0xc4da226d6da96d4f), CONST64(0x391a650d0d340d68), -CONST64(0x35e979fafacffa83), CONST64(0x84a369dfdf5bdfb6), CONST64(0x9bfca97e7ee57ed7), CONST64(0xb44819242490243d), -CONST64(0xd776fe3b3bec3bc5), CONST64(0x3d4b9aabab96ab31), CONST64(0xd181f0cece1fce3e), CONST64(0x5522991111441188), -CONST64(0x8903838f8f068f0c), CONST64(0x6b9c044e4e254e4a), CONST64(0x517366b7b7e6b7d1), CONST64(0x60cbe0ebeb8beb0b), -CONST64(0xcc78c13c3cf03cfd), CONST64(0xbf1ffd81813e817c), CONST64(0xfe354094946a94d4), CONST64(0x0cf31cf7f7fbf7eb), -CONST64(0x676f18b9b9deb9a1), CONST64(0x5f268b13134c1398), CONST64(0x9c58512c2cb02c7d), CONST64(0xb8bb05d3d36bd3d6), -CONST64(0x5cd38ce7e7bbe76b), CONST64(0xcbdc396e6ea56e57), CONST64(0xf395aac4c437c46e), CONST64(0x0f061b03030c0318), -CONST64(0x13acdc565645568a), CONST64(0x49885e44440d441a), CONST64(0x9efea07f7fe17fdf), CONST64(0x374f88a9a99ea921), -CONST64(0x8254672a2aa82a4d), CONST64(0x6d6b0abbbbd6bbb1), CONST64(0xe29f87c1c123c146), CONST64(0x02a6f153535153a2), -CONST64(0x8ba572dcdc57dcae), CONST64(0x2716530b0b2c0b58), CONST64(0xd327019d9d4e9d9c), CONST64(0xc1d82b6c6cad6c47), -CONST64(0xf562a43131c43195), CONST64(0xb9e8f37474cd7487), CONST64(0x09f115f6f6fff6e3), CONST64(0x438c4c464605460a), -CONST64(0x2645a5acac8aac09), CONST64(0x970fb589891e893c), CONST64(0x4428b414145014a0), CONST64(0x42dfbae1e1a3e15b), -CONST64(0x4e2ca616165816b0), CONST64(0xd274f73a3ae83acd), CONST64(0xd0d2066969b9696f), CONST64(0x2d12410909240948), -CONST64(0xade0d77070dd70a7), CONST64(0x54716fb6b6e2b6d9), CONST64(0xb7bd1ed0d067d0ce), CONST64(0x7ec7d6eded93ed3b), -CONST64(0xdb85e2cccc17cc2e), CONST64(0x578468424215422a), CONST64(0xc22d2c98985a98b4), CONST64(0x0e55eda4a4aaa449), +CONST64(0x7830d818186018c0), CONST64(0xaf462623238c2305), CONST64(0xf991b8c6c63fc67e), CONST64(0x6fcdfbe8e887e813), +CONST64(0xa113cb878726874c), CONST64(0x626d11b8b8dab8a9), CONST64(0x0502090101040108), CONST64(0x6e9e0d4f4f214f42), +CONST64(0xee6c9b3636d836ad), CONST64(0x0451ffa6a6a2a659), CONST64(0xbdb90cd2d26fd2de), CONST64(0x06f70ef5f5f3f5fb), +CONST64(0x80f2967979f979ef), CONST64(0xcede306f6fa16f5f), CONST64(0xef3f6d91917e91fc), CONST64(0x07a4f852525552aa), +CONST64(0xfdc04760609d6027), CONST64(0x766535bcbccabc89), CONST64(0xcd2b379b9b569bac), CONST64(0x8c018a8e8e028e04), +CONST64(0x155bd2a3a3b6a371), CONST64(0x3c186c0c0c300c60), CONST64(0x8af6847b7bf17bff), CONST64(0xe16a803535d435b5), +CONST64(0x693af51d1d741de8), CONST64(0x47ddb3e0e0a7e053), CONST64(0xacb321d7d77bd7f6), CONST64(0xed999cc2c22fc25e), +CONST64(0x965c432e2eb82e6d), CONST64(0x7a96294b4b314b62), CONST64(0x21e15dfefedffea3), CONST64(0x16aed55757415782), +CONST64(0x412abd15155415a8), CONST64(0xb6eee87777c1779f), CONST64(0xeb6e923737dc37a5), CONST64(0x56d79ee5e5b3e57b), +CONST64(0xd923139f9f469f8c), CONST64(0x17fd23f0f0e7f0d3), CONST64(0x7f94204a4a354a6a), CONST64(0x95a944dada4fda9e), +CONST64(0x25b0a258587d58fa), CONST64(0xca8fcfc9c903c906), CONST64(0x8d527c2929a42955), CONST64(0x22145a0a0a280a50), +CONST64(0x4f7f50b1b1feb1e1), CONST64(0x1a5dc9a0a0baa069), CONST64(0xdad6146b6bb16b7f), CONST64(0xab17d985852e855c), +CONST64(0x73673cbdbdcebd81), CONST64(0x34ba8f5d5d695dd2), CONST64(0x5020901010401080), CONST64(0x03f507f4f4f7f4f3), +CONST64(0xc08bddcbcb0bcb16), CONST64(0xc67cd33e3ef83eed), CONST64(0x110a2d0505140528), CONST64(0xe6ce78676781671f), +CONST64(0x53d597e4e4b7e473), CONST64(0xbb4e0227279c2725), CONST64(0x5882734141194132), CONST64(0x9d0ba78b8b168b2c), +CONST64(0x0153f6a7a7a6a751), CONST64(0x94fab27d7de97dcf), CONST64(0xfb374995956e95dc), CONST64(0x9fad56d8d847d88e), +CONST64(0x30eb70fbfbcbfb8b), CONST64(0x71c1cdeeee9fee23), CONST64(0x91f8bb7c7ced7cc7), CONST64(0xe3cc716666856617), +CONST64(0x8ea77bdddd53dda6), CONST64(0x4b2eaf17175c17b8), CONST64(0x468e454747014702), CONST64(0xdc211a9e9e429e84), +CONST64(0xc589d4caca0fca1e), CONST64(0x995a582d2db42d75), CONST64(0x79632ebfbfc6bf91), CONST64(0x1b0e3f07071c0738), +CONST64(0x2347acadad8ead01), CONST64(0x2fb4b05a5a755aea), CONST64(0xb51bef838336836c), CONST64(0xff66b63333cc3385), +CONST64(0xf2c65c636391633f), CONST64(0x0a04120202080210), CONST64(0x384993aaaa92aa39), CONST64(0xa8e2de7171d971af), +CONST64(0xcf8dc6c8c807c80e), CONST64(0x7d32d119196419c8), CONST64(0x70923b4949394972), CONST64(0x9aaf5fd9d943d986), +CONST64(0x1df931f2f2eff2c3), CONST64(0x48dba8e3e3abe34b), CONST64(0x2ab6b95b5b715be2), CONST64(0x920dbc88881a8834), +CONST64(0xc8293e9a9a529aa4), CONST64(0xbe4c0b262698262d), CONST64(0xfa64bf3232c8328d), CONST64(0x4a7d59b0b0fab0e9), +CONST64(0x6acff2e9e983e91b), CONST64(0x331e770f0f3c0f78), CONST64(0xa6b733d5d573d5e6), CONST64(0xba1df480803a8074), +CONST64(0x7c6127bebec2be99), CONST64(0xde87ebcdcd13cd26), CONST64(0xe468893434d034bd), CONST64(0x75903248483d487a), +CONST64(0x24e354ffffdbffab), CONST64(0x8ff48d7a7af57af7), CONST64(0xea3d6490907a90f4), CONST64(0x3ebe9d5f5f615fc2), +CONST64(0xa0403d202080201d), CONST64(0xd5d00f6868bd6867), CONST64(0x7234ca1a1a681ad0), CONST64(0x2c41b7aeae82ae19), +CONST64(0x5e757db4b4eab4c9), CONST64(0x19a8ce54544d549a), CONST64(0xe53b7f93937693ec), CONST64(0xaa442f222288220d), +CONST64(0xe9c86364648d6407), CONST64(0x12ff2af1f1e3f1db), CONST64(0xa2e6cc7373d173bf), CONST64(0x5a24821212481290), +CONST64(0x5d807a40401d403a), CONST64(0x2810480808200840), CONST64(0xe89b95c3c32bc356), CONST64(0x7bc5dfecec97ec33), +CONST64(0x90ab4ddbdb4bdb96), CONST64(0x1f5fc0a1a1bea161), CONST64(0x8307918d8d0e8d1c), CONST64(0xc97ac83d3df43df5), +CONST64(0xf1335b97976697cc), CONST64(0x0000000000000000), CONST64(0xd483f9cfcf1bcf36), CONST64(0x87566e2b2bac2b45), +CONST64(0xb3ece17676c57697), CONST64(0xb019e68282328264), CONST64(0xa9b128d6d67fd6fe), CONST64(0x7736c31b1b6c1bd8), +CONST64(0x5b7774b5b5eeb5c1), CONST64(0x2943beafaf86af11), CONST64(0xdfd41d6a6ab56a77), CONST64(0x0da0ea50505d50ba), +CONST64(0x4c8a574545094512), CONST64(0x18fb38f3f3ebf3cb), CONST64(0xf060ad3030c0309d), CONST64(0x74c3c4efef9bef2b), +CONST64(0xc37eda3f3ffc3fe5), CONST64(0x1caac75555495592), CONST64(0x1059dba2a2b2a279), CONST64(0x65c9e9eaea8fea03), +CONST64(0xecca6a656589650f), CONST64(0x686903babad2bab9), CONST64(0x935e4a2f2fbc2f65), CONST64(0xe79d8ec0c027c04e), +CONST64(0x81a160dede5fdebe), CONST64(0x6c38fc1c1c701ce0), CONST64(0x2ee746fdfdd3fdbb), CONST64(0x649a1f4d4d294d52), +CONST64(0xe0397692927292e4), CONST64(0xbceafa7575c9758f), CONST64(0x1e0c360606180630), CONST64(0x9809ae8a8a128a24), +CONST64(0x40794bb2b2f2b2f9), CONST64(0x59d185e6e6bfe663), CONST64(0x361c7e0e0e380e70), CONST64(0x633ee71f1f7c1ff8), +CONST64(0xf7c4556262956237), CONST64(0xa3b53ad4d477d4ee), CONST64(0x324d81a8a89aa829), CONST64(0xf4315296966296c4), +CONST64(0x3aef62f9f9c3f99b), CONST64(0xf697a3c5c533c566), CONST64(0xb14a102525942535), CONST64(0x20b2ab59597959f2), +CONST64(0xae15d084842a8454), CONST64(0xa7e4c57272d572b7), CONST64(0xdd72ec3939e439d5), CONST64(0x6198164c4c2d4c5a), +CONST64(0x3bbc945e5e655eca), CONST64(0x85f09f7878fd78e7), CONST64(0xd870e53838e038dd), CONST64(0x8605988c8c0a8c14), +CONST64(0xb2bf17d1d163d1c6), CONST64(0x0b57e4a5a5aea541), CONST64(0x4dd9a1e2e2afe243), CONST64(0xf8c24e616199612f), +CONST64(0x457b42b3b3f6b3f1), CONST64(0xa542342121842115), CONST64(0xd625089c9c4a9c94), CONST64(0x663cee1e1e781ef0), +CONST64(0x5286614343114322), CONST64(0xfc93b1c7c73bc776), CONST64(0x2be54ffcfcd7fcb3), CONST64(0x1408240404100420), +CONST64(0x08a2e351515951b2), CONST64(0xc72f2599995e99bc), CONST64(0xc4da226d6da96d4f), CONST64(0x391a650d0d340d68), +CONST64(0x35e979fafacffa83), CONST64(0x84a369dfdf5bdfb6), CONST64(0x9bfca97e7ee57ed7), CONST64(0xb44819242490243d), +CONST64(0xd776fe3b3bec3bc5), CONST64(0x3d4b9aabab96ab31), CONST64(0xd181f0cece1fce3e), CONST64(0x5522991111441188), +CONST64(0x8903838f8f068f0c), CONST64(0x6b9c044e4e254e4a), CONST64(0x517366b7b7e6b7d1), CONST64(0x60cbe0ebeb8beb0b), +CONST64(0xcc78c13c3cf03cfd), CONST64(0xbf1ffd81813e817c), CONST64(0xfe354094946a94d4), CONST64(0x0cf31cf7f7fbf7eb), +CONST64(0x676f18b9b9deb9a1), CONST64(0x5f268b13134c1398), CONST64(0x9c58512c2cb02c7d), CONST64(0xb8bb05d3d36bd3d6), +CONST64(0x5cd38ce7e7bbe76b), CONST64(0xcbdc396e6ea56e57), CONST64(0xf395aac4c437c46e), CONST64(0x0f061b03030c0318), +CONST64(0x13acdc565645568a), CONST64(0x49885e44440d441a), CONST64(0x9efea07f7fe17fdf), CONST64(0x374f88a9a99ea921), +CONST64(0x8254672a2aa82a4d), CONST64(0x6d6b0abbbbd6bbb1), CONST64(0xe29f87c1c123c146), CONST64(0x02a6f153535153a2), +CONST64(0x8ba572dcdc57dcae), CONST64(0x2716530b0b2c0b58), CONST64(0xd327019d9d4e9d9c), CONST64(0xc1d82b6c6cad6c47), +CONST64(0xf562a43131c43195), CONST64(0xb9e8f37474cd7487), CONST64(0x09f115f6f6fff6e3), CONST64(0x438c4c464605460a), +CONST64(0x2645a5acac8aac09), CONST64(0x970fb589891e893c), CONST64(0x4428b414145014a0), CONST64(0x42dfbae1e1a3e15b), +CONST64(0x4e2ca616165816b0), CONST64(0xd274f73a3ae83acd), CONST64(0xd0d2066969b9696f), CONST64(0x2d12410909240948), +CONST64(0xade0d77070dd70a7), CONST64(0x54716fb6b6e2b6d9), CONST64(0xb7bd1ed0d067d0ce), CONST64(0x7ec7d6eded93ed3b), +CONST64(0xdb85e2cccc17cc2e), CONST64(0x578468424215422a), CONST64(0xc22d2c98985a98b4), CONST64(0x0e55eda4a4aaa449), CONST64(0x8850752828a0285d), CONST64(0x31b8865c5c6d5cda), CONST64(0x3fed6bf8f8c7f893), CONST64(0xa411c28686228644) }; static const ulong64 sbox4[] = { -CONST64(0xc07830d818186018), CONST64(0x05af462623238c23), CONST64(0x7ef991b8c6c63fc6), CONST64(0x136fcdfbe8e887e8), -CONST64(0x4ca113cb87872687), CONST64(0xa9626d11b8b8dab8), CONST64(0x0805020901010401), CONST64(0x426e9e0d4f4f214f), -CONST64(0xadee6c9b3636d836), CONST64(0x590451ffa6a6a2a6), CONST64(0xdebdb90cd2d26fd2), CONST64(0xfb06f70ef5f5f3f5), -CONST64(0xef80f2967979f979), CONST64(0x5fcede306f6fa16f), CONST64(0xfcef3f6d91917e91), CONST64(0xaa07a4f852525552), -CONST64(0x27fdc04760609d60), CONST64(0x89766535bcbccabc), CONST64(0xaccd2b379b9b569b), CONST64(0x048c018a8e8e028e), -CONST64(0x71155bd2a3a3b6a3), CONST64(0x603c186c0c0c300c), CONST64(0xff8af6847b7bf17b), CONST64(0xb5e16a803535d435), -CONST64(0xe8693af51d1d741d), CONST64(0x5347ddb3e0e0a7e0), CONST64(0xf6acb321d7d77bd7), CONST64(0x5eed999cc2c22fc2), -CONST64(0x6d965c432e2eb82e), CONST64(0x627a96294b4b314b), CONST64(0xa321e15dfefedffe), CONST64(0x8216aed557574157), -CONST64(0xa8412abd15155415), CONST64(0x9fb6eee87777c177), CONST64(0xa5eb6e923737dc37), CONST64(0x7b56d79ee5e5b3e5), -CONST64(0x8cd923139f9f469f), CONST64(0xd317fd23f0f0e7f0), CONST64(0x6a7f94204a4a354a), CONST64(0x9e95a944dada4fda), -CONST64(0xfa25b0a258587d58), CONST64(0x06ca8fcfc9c903c9), CONST64(0x558d527c2929a429), CONST64(0x5022145a0a0a280a), -CONST64(0xe14f7f50b1b1feb1), CONST64(0x691a5dc9a0a0baa0), CONST64(0x7fdad6146b6bb16b), CONST64(0x5cab17d985852e85), -CONST64(0x8173673cbdbdcebd), CONST64(0xd234ba8f5d5d695d), CONST64(0x8050209010104010), CONST64(0xf303f507f4f4f7f4), -CONST64(0x16c08bddcbcb0bcb), CONST64(0xedc67cd33e3ef83e), CONST64(0x28110a2d05051405), CONST64(0x1fe6ce7867678167), -CONST64(0x7353d597e4e4b7e4), CONST64(0x25bb4e0227279c27), CONST64(0x3258827341411941), CONST64(0x2c9d0ba78b8b168b), -CONST64(0x510153f6a7a7a6a7), CONST64(0xcf94fab27d7de97d), CONST64(0xdcfb374995956e95), CONST64(0x8e9fad56d8d847d8), -CONST64(0x8b30eb70fbfbcbfb), CONST64(0x2371c1cdeeee9fee), CONST64(0xc791f8bb7c7ced7c), CONST64(0x17e3cc7166668566), -CONST64(0xa68ea77bdddd53dd), CONST64(0xb84b2eaf17175c17), CONST64(0x02468e4547470147), CONST64(0x84dc211a9e9e429e), -CONST64(0x1ec589d4caca0fca), CONST64(0x75995a582d2db42d), CONST64(0x9179632ebfbfc6bf), CONST64(0x381b0e3f07071c07), -CONST64(0x012347acadad8ead), CONST64(0xea2fb4b05a5a755a), CONST64(0x6cb51bef83833683), CONST64(0x85ff66b63333cc33), -CONST64(0x3ff2c65c63639163), CONST64(0x100a041202020802), CONST64(0x39384993aaaa92aa), CONST64(0xafa8e2de7171d971), -CONST64(0x0ecf8dc6c8c807c8), CONST64(0xc87d32d119196419), CONST64(0x7270923b49493949), CONST64(0x869aaf5fd9d943d9), -CONST64(0xc31df931f2f2eff2), CONST64(0x4b48dba8e3e3abe3), CONST64(0xe22ab6b95b5b715b), CONST64(0x34920dbc88881a88), -CONST64(0xa4c8293e9a9a529a), CONST64(0x2dbe4c0b26269826), CONST64(0x8dfa64bf3232c832), CONST64(0xe94a7d59b0b0fab0), -CONST64(0x1b6acff2e9e983e9), CONST64(0x78331e770f0f3c0f), CONST64(0xe6a6b733d5d573d5), CONST64(0x74ba1df480803a80), -CONST64(0x997c6127bebec2be), CONST64(0x26de87ebcdcd13cd), CONST64(0xbde468893434d034), CONST64(0x7a75903248483d48), -CONST64(0xab24e354ffffdbff), CONST64(0xf78ff48d7a7af57a), CONST64(0xf4ea3d6490907a90), CONST64(0xc23ebe9d5f5f615f), -CONST64(0x1da0403d20208020), CONST64(0x67d5d00f6868bd68), CONST64(0xd07234ca1a1a681a), CONST64(0x192c41b7aeae82ae), -CONST64(0xc95e757db4b4eab4), CONST64(0x9a19a8ce54544d54), CONST64(0xece53b7f93937693), CONST64(0x0daa442f22228822), -CONST64(0x07e9c86364648d64), CONST64(0xdb12ff2af1f1e3f1), CONST64(0xbfa2e6cc7373d173), CONST64(0x905a248212124812), -CONST64(0x3a5d807a40401d40), CONST64(0x4028104808082008), CONST64(0x56e89b95c3c32bc3), CONST64(0x337bc5dfecec97ec), -CONST64(0x9690ab4ddbdb4bdb), CONST64(0x611f5fc0a1a1bea1), CONST64(0x1c8307918d8d0e8d), CONST64(0xf5c97ac83d3df43d), -CONST64(0xccf1335b97976697), CONST64(0x0000000000000000), CONST64(0x36d483f9cfcf1bcf), CONST64(0x4587566e2b2bac2b), -CONST64(0x97b3ece17676c576), CONST64(0x64b019e682823282), CONST64(0xfea9b128d6d67fd6), CONST64(0xd87736c31b1b6c1b), -CONST64(0xc15b7774b5b5eeb5), CONST64(0x112943beafaf86af), CONST64(0x77dfd41d6a6ab56a), CONST64(0xba0da0ea50505d50), -CONST64(0x124c8a5745450945), CONST64(0xcb18fb38f3f3ebf3), CONST64(0x9df060ad3030c030), CONST64(0x2b74c3c4efef9bef), -CONST64(0xe5c37eda3f3ffc3f), CONST64(0x921caac755554955), CONST64(0x791059dba2a2b2a2), CONST64(0x0365c9e9eaea8fea), -CONST64(0x0fecca6a65658965), CONST64(0xb9686903babad2ba), CONST64(0x65935e4a2f2fbc2f), CONST64(0x4ee79d8ec0c027c0), -CONST64(0xbe81a160dede5fde), CONST64(0xe06c38fc1c1c701c), CONST64(0xbb2ee746fdfdd3fd), CONST64(0x52649a1f4d4d294d), -CONST64(0xe4e0397692927292), CONST64(0x8fbceafa7575c975), CONST64(0x301e0c3606061806), CONST64(0x249809ae8a8a128a), -CONST64(0xf940794bb2b2f2b2), CONST64(0x6359d185e6e6bfe6), CONST64(0x70361c7e0e0e380e), CONST64(0xf8633ee71f1f7c1f), -CONST64(0x37f7c45562629562), CONST64(0xeea3b53ad4d477d4), CONST64(0x29324d81a8a89aa8), CONST64(0xc4f4315296966296), -CONST64(0x9b3aef62f9f9c3f9), CONST64(0x66f697a3c5c533c5), CONST64(0x35b14a1025259425), CONST64(0xf220b2ab59597959), -CONST64(0x54ae15d084842a84), CONST64(0xb7a7e4c57272d572), CONST64(0xd5dd72ec3939e439), CONST64(0x5a6198164c4c2d4c), -CONST64(0xca3bbc945e5e655e), CONST64(0xe785f09f7878fd78), CONST64(0xddd870e53838e038), CONST64(0x148605988c8c0a8c), -CONST64(0xc6b2bf17d1d163d1), CONST64(0x410b57e4a5a5aea5), CONST64(0x434dd9a1e2e2afe2), CONST64(0x2ff8c24e61619961), -CONST64(0xf1457b42b3b3f6b3), CONST64(0x15a5423421218421), CONST64(0x94d625089c9c4a9c), CONST64(0xf0663cee1e1e781e), -CONST64(0x2252866143431143), CONST64(0x76fc93b1c7c73bc7), CONST64(0xb32be54ffcfcd7fc), CONST64(0x2014082404041004), -CONST64(0xb208a2e351515951), CONST64(0xbcc72f2599995e99), CONST64(0x4fc4da226d6da96d), CONST64(0x68391a650d0d340d), -CONST64(0x8335e979fafacffa), CONST64(0xb684a369dfdf5bdf), CONST64(0xd79bfca97e7ee57e), CONST64(0x3db4481924249024), -CONST64(0xc5d776fe3b3bec3b), CONST64(0x313d4b9aabab96ab), CONST64(0x3ed181f0cece1fce), CONST64(0x8855229911114411), -CONST64(0x0c8903838f8f068f), CONST64(0x4a6b9c044e4e254e), CONST64(0xd1517366b7b7e6b7), CONST64(0x0b60cbe0ebeb8beb), -CONST64(0xfdcc78c13c3cf03c), CONST64(0x7cbf1ffd81813e81), CONST64(0xd4fe354094946a94), CONST64(0xeb0cf31cf7f7fbf7), -CONST64(0xa1676f18b9b9deb9), CONST64(0x985f268b13134c13), CONST64(0x7d9c58512c2cb02c), CONST64(0xd6b8bb05d3d36bd3), -CONST64(0x6b5cd38ce7e7bbe7), CONST64(0x57cbdc396e6ea56e), CONST64(0x6ef395aac4c437c4), CONST64(0x180f061b03030c03), -CONST64(0x8a13acdc56564556), CONST64(0x1a49885e44440d44), CONST64(0xdf9efea07f7fe17f), CONST64(0x21374f88a9a99ea9), -CONST64(0x4d8254672a2aa82a), CONST64(0xb16d6b0abbbbd6bb), CONST64(0x46e29f87c1c123c1), CONST64(0xa202a6f153535153), -CONST64(0xae8ba572dcdc57dc), CONST64(0x582716530b0b2c0b), CONST64(0x9cd327019d9d4e9d), CONST64(0x47c1d82b6c6cad6c), -CONST64(0x95f562a43131c431), CONST64(0x87b9e8f37474cd74), CONST64(0xe309f115f6f6fff6), CONST64(0x0a438c4c46460546), -CONST64(0x092645a5acac8aac), CONST64(0x3c970fb589891e89), CONST64(0xa04428b414145014), CONST64(0x5b42dfbae1e1a3e1), -CONST64(0xb04e2ca616165816), CONST64(0xcdd274f73a3ae83a), CONST64(0x6fd0d2066969b969), CONST64(0x482d124109092409), -CONST64(0xa7ade0d77070dd70), CONST64(0xd954716fb6b6e2b6), CONST64(0xceb7bd1ed0d067d0), CONST64(0x3b7ec7d6eded93ed), -CONST64(0x2edb85e2cccc17cc), CONST64(0x2a57846842421542), CONST64(0xb4c22d2c98985a98), CONST64(0x490e55eda4a4aaa4), +CONST64(0xc07830d818186018), CONST64(0x05af462623238c23), CONST64(0x7ef991b8c6c63fc6), CONST64(0x136fcdfbe8e887e8), +CONST64(0x4ca113cb87872687), CONST64(0xa9626d11b8b8dab8), CONST64(0x0805020901010401), CONST64(0x426e9e0d4f4f214f), +CONST64(0xadee6c9b3636d836), CONST64(0x590451ffa6a6a2a6), CONST64(0xdebdb90cd2d26fd2), CONST64(0xfb06f70ef5f5f3f5), +CONST64(0xef80f2967979f979), CONST64(0x5fcede306f6fa16f), CONST64(0xfcef3f6d91917e91), CONST64(0xaa07a4f852525552), +CONST64(0x27fdc04760609d60), CONST64(0x89766535bcbccabc), CONST64(0xaccd2b379b9b569b), CONST64(0x048c018a8e8e028e), +CONST64(0x71155bd2a3a3b6a3), CONST64(0x603c186c0c0c300c), CONST64(0xff8af6847b7bf17b), CONST64(0xb5e16a803535d435), +CONST64(0xe8693af51d1d741d), CONST64(0x5347ddb3e0e0a7e0), CONST64(0xf6acb321d7d77bd7), CONST64(0x5eed999cc2c22fc2), +CONST64(0x6d965c432e2eb82e), CONST64(0x627a96294b4b314b), CONST64(0xa321e15dfefedffe), CONST64(0x8216aed557574157), +CONST64(0xa8412abd15155415), CONST64(0x9fb6eee87777c177), CONST64(0xa5eb6e923737dc37), CONST64(0x7b56d79ee5e5b3e5), +CONST64(0x8cd923139f9f469f), CONST64(0xd317fd23f0f0e7f0), CONST64(0x6a7f94204a4a354a), CONST64(0x9e95a944dada4fda), +CONST64(0xfa25b0a258587d58), CONST64(0x06ca8fcfc9c903c9), CONST64(0x558d527c2929a429), CONST64(0x5022145a0a0a280a), +CONST64(0xe14f7f50b1b1feb1), CONST64(0x691a5dc9a0a0baa0), CONST64(0x7fdad6146b6bb16b), CONST64(0x5cab17d985852e85), +CONST64(0x8173673cbdbdcebd), CONST64(0xd234ba8f5d5d695d), CONST64(0x8050209010104010), CONST64(0xf303f507f4f4f7f4), +CONST64(0x16c08bddcbcb0bcb), CONST64(0xedc67cd33e3ef83e), CONST64(0x28110a2d05051405), CONST64(0x1fe6ce7867678167), +CONST64(0x7353d597e4e4b7e4), CONST64(0x25bb4e0227279c27), CONST64(0x3258827341411941), CONST64(0x2c9d0ba78b8b168b), +CONST64(0x510153f6a7a7a6a7), CONST64(0xcf94fab27d7de97d), CONST64(0xdcfb374995956e95), CONST64(0x8e9fad56d8d847d8), +CONST64(0x8b30eb70fbfbcbfb), CONST64(0x2371c1cdeeee9fee), CONST64(0xc791f8bb7c7ced7c), CONST64(0x17e3cc7166668566), +CONST64(0xa68ea77bdddd53dd), CONST64(0xb84b2eaf17175c17), CONST64(0x02468e4547470147), CONST64(0x84dc211a9e9e429e), +CONST64(0x1ec589d4caca0fca), CONST64(0x75995a582d2db42d), CONST64(0x9179632ebfbfc6bf), CONST64(0x381b0e3f07071c07), +CONST64(0x012347acadad8ead), CONST64(0xea2fb4b05a5a755a), CONST64(0x6cb51bef83833683), CONST64(0x85ff66b63333cc33), +CONST64(0x3ff2c65c63639163), CONST64(0x100a041202020802), CONST64(0x39384993aaaa92aa), CONST64(0xafa8e2de7171d971), +CONST64(0x0ecf8dc6c8c807c8), CONST64(0xc87d32d119196419), CONST64(0x7270923b49493949), CONST64(0x869aaf5fd9d943d9), +CONST64(0xc31df931f2f2eff2), CONST64(0x4b48dba8e3e3abe3), CONST64(0xe22ab6b95b5b715b), CONST64(0x34920dbc88881a88), +CONST64(0xa4c8293e9a9a529a), CONST64(0x2dbe4c0b26269826), CONST64(0x8dfa64bf3232c832), CONST64(0xe94a7d59b0b0fab0), +CONST64(0x1b6acff2e9e983e9), CONST64(0x78331e770f0f3c0f), CONST64(0xe6a6b733d5d573d5), CONST64(0x74ba1df480803a80), +CONST64(0x997c6127bebec2be), CONST64(0x26de87ebcdcd13cd), CONST64(0xbde468893434d034), CONST64(0x7a75903248483d48), +CONST64(0xab24e354ffffdbff), CONST64(0xf78ff48d7a7af57a), CONST64(0xf4ea3d6490907a90), CONST64(0xc23ebe9d5f5f615f), +CONST64(0x1da0403d20208020), CONST64(0x67d5d00f6868bd68), CONST64(0xd07234ca1a1a681a), CONST64(0x192c41b7aeae82ae), +CONST64(0xc95e757db4b4eab4), CONST64(0x9a19a8ce54544d54), CONST64(0xece53b7f93937693), CONST64(0x0daa442f22228822), +CONST64(0x07e9c86364648d64), CONST64(0xdb12ff2af1f1e3f1), CONST64(0xbfa2e6cc7373d173), CONST64(0x905a248212124812), +CONST64(0x3a5d807a40401d40), CONST64(0x4028104808082008), CONST64(0x56e89b95c3c32bc3), CONST64(0x337bc5dfecec97ec), +CONST64(0x9690ab4ddbdb4bdb), CONST64(0x611f5fc0a1a1bea1), CONST64(0x1c8307918d8d0e8d), CONST64(0xf5c97ac83d3df43d), +CONST64(0xccf1335b97976697), CONST64(0x0000000000000000), CONST64(0x36d483f9cfcf1bcf), CONST64(0x4587566e2b2bac2b), +CONST64(0x97b3ece17676c576), CONST64(0x64b019e682823282), CONST64(0xfea9b128d6d67fd6), CONST64(0xd87736c31b1b6c1b), +CONST64(0xc15b7774b5b5eeb5), CONST64(0x112943beafaf86af), CONST64(0x77dfd41d6a6ab56a), CONST64(0xba0da0ea50505d50), +CONST64(0x124c8a5745450945), CONST64(0xcb18fb38f3f3ebf3), CONST64(0x9df060ad3030c030), CONST64(0x2b74c3c4efef9bef), +CONST64(0xe5c37eda3f3ffc3f), CONST64(0x921caac755554955), CONST64(0x791059dba2a2b2a2), CONST64(0x0365c9e9eaea8fea), +CONST64(0x0fecca6a65658965), CONST64(0xb9686903babad2ba), CONST64(0x65935e4a2f2fbc2f), CONST64(0x4ee79d8ec0c027c0), +CONST64(0xbe81a160dede5fde), CONST64(0xe06c38fc1c1c701c), CONST64(0xbb2ee746fdfdd3fd), CONST64(0x52649a1f4d4d294d), +CONST64(0xe4e0397692927292), CONST64(0x8fbceafa7575c975), CONST64(0x301e0c3606061806), CONST64(0x249809ae8a8a128a), +CONST64(0xf940794bb2b2f2b2), CONST64(0x6359d185e6e6bfe6), CONST64(0x70361c7e0e0e380e), CONST64(0xf8633ee71f1f7c1f), +CONST64(0x37f7c45562629562), CONST64(0xeea3b53ad4d477d4), CONST64(0x29324d81a8a89aa8), CONST64(0xc4f4315296966296), +CONST64(0x9b3aef62f9f9c3f9), CONST64(0x66f697a3c5c533c5), CONST64(0x35b14a1025259425), CONST64(0xf220b2ab59597959), +CONST64(0x54ae15d084842a84), CONST64(0xb7a7e4c57272d572), CONST64(0xd5dd72ec3939e439), CONST64(0x5a6198164c4c2d4c), +CONST64(0xca3bbc945e5e655e), CONST64(0xe785f09f7878fd78), CONST64(0xddd870e53838e038), CONST64(0x148605988c8c0a8c), +CONST64(0xc6b2bf17d1d163d1), CONST64(0x410b57e4a5a5aea5), CONST64(0x434dd9a1e2e2afe2), CONST64(0x2ff8c24e61619961), +CONST64(0xf1457b42b3b3f6b3), CONST64(0x15a5423421218421), CONST64(0x94d625089c9c4a9c), CONST64(0xf0663cee1e1e781e), +CONST64(0x2252866143431143), CONST64(0x76fc93b1c7c73bc7), CONST64(0xb32be54ffcfcd7fc), CONST64(0x2014082404041004), +CONST64(0xb208a2e351515951), CONST64(0xbcc72f2599995e99), CONST64(0x4fc4da226d6da96d), CONST64(0x68391a650d0d340d), +CONST64(0x8335e979fafacffa), CONST64(0xb684a369dfdf5bdf), CONST64(0xd79bfca97e7ee57e), CONST64(0x3db4481924249024), +CONST64(0xc5d776fe3b3bec3b), CONST64(0x313d4b9aabab96ab), CONST64(0x3ed181f0cece1fce), CONST64(0x8855229911114411), +CONST64(0x0c8903838f8f068f), CONST64(0x4a6b9c044e4e254e), CONST64(0xd1517366b7b7e6b7), CONST64(0x0b60cbe0ebeb8beb), +CONST64(0xfdcc78c13c3cf03c), CONST64(0x7cbf1ffd81813e81), CONST64(0xd4fe354094946a94), CONST64(0xeb0cf31cf7f7fbf7), +CONST64(0xa1676f18b9b9deb9), CONST64(0x985f268b13134c13), CONST64(0x7d9c58512c2cb02c), CONST64(0xd6b8bb05d3d36bd3), +CONST64(0x6b5cd38ce7e7bbe7), CONST64(0x57cbdc396e6ea56e), CONST64(0x6ef395aac4c437c4), CONST64(0x180f061b03030c03), +CONST64(0x8a13acdc56564556), CONST64(0x1a49885e44440d44), CONST64(0xdf9efea07f7fe17f), CONST64(0x21374f88a9a99ea9), +CONST64(0x4d8254672a2aa82a), CONST64(0xb16d6b0abbbbd6bb), CONST64(0x46e29f87c1c123c1), CONST64(0xa202a6f153535153), +CONST64(0xae8ba572dcdc57dc), CONST64(0x582716530b0b2c0b), CONST64(0x9cd327019d9d4e9d), CONST64(0x47c1d82b6c6cad6c), +CONST64(0x95f562a43131c431), CONST64(0x87b9e8f37474cd74), CONST64(0xe309f115f6f6fff6), CONST64(0x0a438c4c46460546), +CONST64(0x092645a5acac8aac), CONST64(0x3c970fb589891e89), CONST64(0xa04428b414145014), CONST64(0x5b42dfbae1e1a3e1), +CONST64(0xb04e2ca616165816), CONST64(0xcdd274f73a3ae83a), CONST64(0x6fd0d2066969b969), CONST64(0x482d124109092409), +CONST64(0xa7ade0d77070dd70), CONST64(0xd954716fb6b6e2b6), CONST64(0xceb7bd1ed0d067d0), CONST64(0x3b7ec7d6eded93ed), +CONST64(0x2edb85e2cccc17cc), CONST64(0x2a57846842421542), CONST64(0xb4c22d2c98985a98), CONST64(0x490e55eda4a4aaa4), CONST64(0x5d8850752828a028), CONST64(0xda31b8865c5c6d5c), CONST64(0x933fed6bf8f8c7f8), CONST64(0x44a411c286862286) }; static const ulong64 sbox5[] = { -CONST64(0x18c07830d8181860), CONST64(0x2305af462623238c), CONST64(0xc67ef991b8c6c63f), CONST64(0xe8136fcdfbe8e887), -CONST64(0x874ca113cb878726), CONST64(0xb8a9626d11b8b8da), CONST64(0x0108050209010104), CONST64(0x4f426e9e0d4f4f21), -CONST64(0x36adee6c9b3636d8), CONST64(0xa6590451ffa6a6a2), CONST64(0xd2debdb90cd2d26f), CONST64(0xf5fb06f70ef5f5f3), -CONST64(0x79ef80f2967979f9), CONST64(0x6f5fcede306f6fa1), CONST64(0x91fcef3f6d91917e), CONST64(0x52aa07a4f8525255), -CONST64(0x6027fdc04760609d), CONST64(0xbc89766535bcbcca), CONST64(0x9baccd2b379b9b56), CONST64(0x8e048c018a8e8e02), -CONST64(0xa371155bd2a3a3b6), CONST64(0x0c603c186c0c0c30), CONST64(0x7bff8af6847b7bf1), CONST64(0x35b5e16a803535d4), -CONST64(0x1de8693af51d1d74), CONST64(0xe05347ddb3e0e0a7), CONST64(0xd7f6acb321d7d77b), CONST64(0xc25eed999cc2c22f), -CONST64(0x2e6d965c432e2eb8), CONST64(0x4b627a96294b4b31), CONST64(0xfea321e15dfefedf), CONST64(0x578216aed5575741), -CONST64(0x15a8412abd151554), CONST64(0x779fb6eee87777c1), CONST64(0x37a5eb6e923737dc), CONST64(0xe57b56d79ee5e5b3), -CONST64(0x9f8cd923139f9f46), CONST64(0xf0d317fd23f0f0e7), CONST64(0x4a6a7f94204a4a35), CONST64(0xda9e95a944dada4f), -CONST64(0x58fa25b0a258587d), CONST64(0xc906ca8fcfc9c903), CONST64(0x29558d527c2929a4), CONST64(0x0a5022145a0a0a28), -CONST64(0xb1e14f7f50b1b1fe), CONST64(0xa0691a5dc9a0a0ba), CONST64(0x6b7fdad6146b6bb1), CONST64(0x855cab17d985852e), -CONST64(0xbd8173673cbdbdce), CONST64(0x5dd234ba8f5d5d69), CONST64(0x1080502090101040), CONST64(0xf4f303f507f4f4f7), -CONST64(0xcb16c08bddcbcb0b), CONST64(0x3eedc67cd33e3ef8), CONST64(0x0528110a2d050514), CONST64(0x671fe6ce78676781), -CONST64(0xe47353d597e4e4b7), CONST64(0x2725bb4e0227279c), CONST64(0x4132588273414119), CONST64(0x8b2c9d0ba78b8b16), -CONST64(0xa7510153f6a7a7a6), CONST64(0x7dcf94fab27d7de9), CONST64(0x95dcfb374995956e), CONST64(0xd88e9fad56d8d847), -CONST64(0xfb8b30eb70fbfbcb), CONST64(0xee2371c1cdeeee9f), CONST64(0x7cc791f8bb7c7ced), CONST64(0x6617e3cc71666685), -CONST64(0xdda68ea77bdddd53), CONST64(0x17b84b2eaf17175c), CONST64(0x4702468e45474701), CONST64(0x9e84dc211a9e9e42), -CONST64(0xca1ec589d4caca0f), CONST64(0x2d75995a582d2db4), CONST64(0xbf9179632ebfbfc6), CONST64(0x07381b0e3f07071c), -CONST64(0xad012347acadad8e), CONST64(0x5aea2fb4b05a5a75), CONST64(0x836cb51bef838336), CONST64(0x3385ff66b63333cc), -CONST64(0x633ff2c65c636391), CONST64(0x02100a0412020208), CONST64(0xaa39384993aaaa92), CONST64(0x71afa8e2de7171d9), -CONST64(0xc80ecf8dc6c8c807), CONST64(0x19c87d32d1191964), CONST64(0x497270923b494939), CONST64(0xd9869aaf5fd9d943), -CONST64(0xf2c31df931f2f2ef), CONST64(0xe34b48dba8e3e3ab), CONST64(0x5be22ab6b95b5b71), CONST64(0x8834920dbc88881a), -CONST64(0x9aa4c8293e9a9a52), CONST64(0x262dbe4c0b262698), CONST64(0x328dfa64bf3232c8), CONST64(0xb0e94a7d59b0b0fa), -CONST64(0xe91b6acff2e9e983), CONST64(0x0f78331e770f0f3c), CONST64(0xd5e6a6b733d5d573), CONST64(0x8074ba1df480803a), -CONST64(0xbe997c6127bebec2), CONST64(0xcd26de87ebcdcd13), CONST64(0x34bde468893434d0), CONST64(0x487a75903248483d), -CONST64(0xffab24e354ffffdb), CONST64(0x7af78ff48d7a7af5), CONST64(0x90f4ea3d6490907a), CONST64(0x5fc23ebe9d5f5f61), -CONST64(0x201da0403d202080), CONST64(0x6867d5d00f6868bd), CONST64(0x1ad07234ca1a1a68), CONST64(0xae192c41b7aeae82), -CONST64(0xb4c95e757db4b4ea), CONST64(0x549a19a8ce54544d), CONST64(0x93ece53b7f939376), CONST64(0x220daa442f222288), -CONST64(0x6407e9c86364648d), CONST64(0xf1db12ff2af1f1e3), CONST64(0x73bfa2e6cc7373d1), CONST64(0x12905a2482121248), -CONST64(0x403a5d807a40401d), CONST64(0x0840281048080820), CONST64(0xc356e89b95c3c32b), CONST64(0xec337bc5dfecec97), -CONST64(0xdb9690ab4ddbdb4b), CONST64(0xa1611f5fc0a1a1be), CONST64(0x8d1c8307918d8d0e), CONST64(0x3df5c97ac83d3df4), -CONST64(0x97ccf1335b979766), CONST64(0x0000000000000000), CONST64(0xcf36d483f9cfcf1b), CONST64(0x2b4587566e2b2bac), -CONST64(0x7697b3ece17676c5), CONST64(0x8264b019e6828232), CONST64(0xd6fea9b128d6d67f), CONST64(0x1bd87736c31b1b6c), -CONST64(0xb5c15b7774b5b5ee), CONST64(0xaf112943beafaf86), CONST64(0x6a77dfd41d6a6ab5), CONST64(0x50ba0da0ea50505d), -CONST64(0x45124c8a57454509), CONST64(0xf3cb18fb38f3f3eb), CONST64(0x309df060ad3030c0), CONST64(0xef2b74c3c4efef9b), -CONST64(0x3fe5c37eda3f3ffc), CONST64(0x55921caac7555549), CONST64(0xa2791059dba2a2b2), CONST64(0xea0365c9e9eaea8f), -CONST64(0x650fecca6a656589), CONST64(0xbab9686903babad2), CONST64(0x2f65935e4a2f2fbc), CONST64(0xc04ee79d8ec0c027), -CONST64(0xdebe81a160dede5f), CONST64(0x1ce06c38fc1c1c70), CONST64(0xfdbb2ee746fdfdd3), CONST64(0x4d52649a1f4d4d29), -CONST64(0x92e4e03976929272), CONST64(0x758fbceafa7575c9), CONST64(0x06301e0c36060618), CONST64(0x8a249809ae8a8a12), -CONST64(0xb2f940794bb2b2f2), CONST64(0xe66359d185e6e6bf), CONST64(0x0e70361c7e0e0e38), CONST64(0x1ff8633ee71f1f7c), -CONST64(0x6237f7c455626295), CONST64(0xd4eea3b53ad4d477), CONST64(0xa829324d81a8a89a), CONST64(0x96c4f43152969662), -CONST64(0xf99b3aef62f9f9c3), CONST64(0xc566f697a3c5c533), CONST64(0x2535b14a10252594), CONST64(0x59f220b2ab595979), -CONST64(0x8454ae15d084842a), CONST64(0x72b7a7e4c57272d5), CONST64(0x39d5dd72ec3939e4), CONST64(0x4c5a6198164c4c2d), -CONST64(0x5eca3bbc945e5e65), CONST64(0x78e785f09f7878fd), CONST64(0x38ddd870e53838e0), CONST64(0x8c148605988c8c0a), -CONST64(0xd1c6b2bf17d1d163), CONST64(0xa5410b57e4a5a5ae), CONST64(0xe2434dd9a1e2e2af), CONST64(0x612ff8c24e616199), -CONST64(0xb3f1457b42b3b3f6), CONST64(0x2115a54234212184), CONST64(0x9c94d625089c9c4a), CONST64(0x1ef0663cee1e1e78), -CONST64(0x4322528661434311), CONST64(0xc776fc93b1c7c73b), CONST64(0xfcb32be54ffcfcd7), CONST64(0x0420140824040410), -CONST64(0x51b208a2e3515159), CONST64(0x99bcc72f2599995e), CONST64(0x6d4fc4da226d6da9), CONST64(0x0d68391a650d0d34), -CONST64(0xfa8335e979fafacf), CONST64(0xdfb684a369dfdf5b), CONST64(0x7ed79bfca97e7ee5), CONST64(0x243db44819242490), -CONST64(0x3bc5d776fe3b3bec), CONST64(0xab313d4b9aabab96), CONST64(0xce3ed181f0cece1f), CONST64(0x1188552299111144), -CONST64(0x8f0c8903838f8f06), CONST64(0x4e4a6b9c044e4e25), CONST64(0xb7d1517366b7b7e6), CONST64(0xeb0b60cbe0ebeb8b), -CONST64(0x3cfdcc78c13c3cf0), CONST64(0x817cbf1ffd81813e), CONST64(0x94d4fe354094946a), CONST64(0xf7eb0cf31cf7f7fb), -CONST64(0xb9a1676f18b9b9de), CONST64(0x13985f268b13134c), CONST64(0x2c7d9c58512c2cb0), CONST64(0xd3d6b8bb05d3d36b), -CONST64(0xe76b5cd38ce7e7bb), CONST64(0x6e57cbdc396e6ea5), CONST64(0xc46ef395aac4c437), CONST64(0x03180f061b03030c), -CONST64(0x568a13acdc565645), CONST64(0x441a49885e44440d), CONST64(0x7fdf9efea07f7fe1), CONST64(0xa921374f88a9a99e), -CONST64(0x2a4d8254672a2aa8), CONST64(0xbbb16d6b0abbbbd6), CONST64(0xc146e29f87c1c123), CONST64(0x53a202a6f1535351), -CONST64(0xdcae8ba572dcdc57), CONST64(0x0b582716530b0b2c), CONST64(0x9d9cd327019d9d4e), CONST64(0x6c47c1d82b6c6cad), -CONST64(0x3195f562a43131c4), CONST64(0x7487b9e8f37474cd), CONST64(0xf6e309f115f6f6ff), CONST64(0x460a438c4c464605), -CONST64(0xac092645a5acac8a), CONST64(0x893c970fb589891e), CONST64(0x14a04428b4141450), CONST64(0xe15b42dfbae1e1a3), -CONST64(0x16b04e2ca6161658), CONST64(0x3acdd274f73a3ae8), CONST64(0x696fd0d2066969b9), CONST64(0x09482d1241090924), -CONST64(0x70a7ade0d77070dd), CONST64(0xb6d954716fb6b6e2), CONST64(0xd0ceb7bd1ed0d067), CONST64(0xed3b7ec7d6eded93), -CONST64(0xcc2edb85e2cccc17), CONST64(0x422a578468424215), CONST64(0x98b4c22d2c98985a), CONST64(0xa4490e55eda4a4aa), +CONST64(0x18c07830d8181860), CONST64(0x2305af462623238c), CONST64(0xc67ef991b8c6c63f), CONST64(0xe8136fcdfbe8e887), +CONST64(0x874ca113cb878726), CONST64(0xb8a9626d11b8b8da), CONST64(0x0108050209010104), CONST64(0x4f426e9e0d4f4f21), +CONST64(0x36adee6c9b3636d8), CONST64(0xa6590451ffa6a6a2), CONST64(0xd2debdb90cd2d26f), CONST64(0xf5fb06f70ef5f5f3), +CONST64(0x79ef80f2967979f9), CONST64(0x6f5fcede306f6fa1), CONST64(0x91fcef3f6d91917e), CONST64(0x52aa07a4f8525255), +CONST64(0x6027fdc04760609d), CONST64(0xbc89766535bcbcca), CONST64(0x9baccd2b379b9b56), CONST64(0x8e048c018a8e8e02), +CONST64(0xa371155bd2a3a3b6), CONST64(0x0c603c186c0c0c30), CONST64(0x7bff8af6847b7bf1), CONST64(0x35b5e16a803535d4), +CONST64(0x1de8693af51d1d74), CONST64(0xe05347ddb3e0e0a7), CONST64(0xd7f6acb321d7d77b), CONST64(0xc25eed999cc2c22f), +CONST64(0x2e6d965c432e2eb8), CONST64(0x4b627a96294b4b31), CONST64(0xfea321e15dfefedf), CONST64(0x578216aed5575741), +CONST64(0x15a8412abd151554), CONST64(0x779fb6eee87777c1), CONST64(0x37a5eb6e923737dc), CONST64(0xe57b56d79ee5e5b3), +CONST64(0x9f8cd923139f9f46), CONST64(0xf0d317fd23f0f0e7), CONST64(0x4a6a7f94204a4a35), CONST64(0xda9e95a944dada4f), +CONST64(0x58fa25b0a258587d), CONST64(0xc906ca8fcfc9c903), CONST64(0x29558d527c2929a4), CONST64(0x0a5022145a0a0a28), +CONST64(0xb1e14f7f50b1b1fe), CONST64(0xa0691a5dc9a0a0ba), CONST64(0x6b7fdad6146b6bb1), CONST64(0x855cab17d985852e), +CONST64(0xbd8173673cbdbdce), CONST64(0x5dd234ba8f5d5d69), CONST64(0x1080502090101040), CONST64(0xf4f303f507f4f4f7), +CONST64(0xcb16c08bddcbcb0b), CONST64(0x3eedc67cd33e3ef8), CONST64(0x0528110a2d050514), CONST64(0x671fe6ce78676781), +CONST64(0xe47353d597e4e4b7), CONST64(0x2725bb4e0227279c), CONST64(0x4132588273414119), CONST64(0x8b2c9d0ba78b8b16), +CONST64(0xa7510153f6a7a7a6), CONST64(0x7dcf94fab27d7de9), CONST64(0x95dcfb374995956e), CONST64(0xd88e9fad56d8d847), +CONST64(0xfb8b30eb70fbfbcb), CONST64(0xee2371c1cdeeee9f), CONST64(0x7cc791f8bb7c7ced), CONST64(0x6617e3cc71666685), +CONST64(0xdda68ea77bdddd53), CONST64(0x17b84b2eaf17175c), CONST64(0x4702468e45474701), CONST64(0x9e84dc211a9e9e42), +CONST64(0xca1ec589d4caca0f), CONST64(0x2d75995a582d2db4), CONST64(0xbf9179632ebfbfc6), CONST64(0x07381b0e3f07071c), +CONST64(0xad012347acadad8e), CONST64(0x5aea2fb4b05a5a75), CONST64(0x836cb51bef838336), CONST64(0x3385ff66b63333cc), +CONST64(0x633ff2c65c636391), CONST64(0x02100a0412020208), CONST64(0xaa39384993aaaa92), CONST64(0x71afa8e2de7171d9), +CONST64(0xc80ecf8dc6c8c807), CONST64(0x19c87d32d1191964), CONST64(0x497270923b494939), CONST64(0xd9869aaf5fd9d943), +CONST64(0xf2c31df931f2f2ef), CONST64(0xe34b48dba8e3e3ab), CONST64(0x5be22ab6b95b5b71), CONST64(0x8834920dbc88881a), +CONST64(0x9aa4c8293e9a9a52), CONST64(0x262dbe4c0b262698), CONST64(0x328dfa64bf3232c8), CONST64(0xb0e94a7d59b0b0fa), +CONST64(0xe91b6acff2e9e983), CONST64(0x0f78331e770f0f3c), CONST64(0xd5e6a6b733d5d573), CONST64(0x8074ba1df480803a), +CONST64(0xbe997c6127bebec2), CONST64(0xcd26de87ebcdcd13), CONST64(0x34bde468893434d0), CONST64(0x487a75903248483d), +CONST64(0xffab24e354ffffdb), CONST64(0x7af78ff48d7a7af5), CONST64(0x90f4ea3d6490907a), CONST64(0x5fc23ebe9d5f5f61), +CONST64(0x201da0403d202080), CONST64(0x6867d5d00f6868bd), CONST64(0x1ad07234ca1a1a68), CONST64(0xae192c41b7aeae82), +CONST64(0xb4c95e757db4b4ea), CONST64(0x549a19a8ce54544d), CONST64(0x93ece53b7f939376), CONST64(0x220daa442f222288), +CONST64(0x6407e9c86364648d), CONST64(0xf1db12ff2af1f1e3), CONST64(0x73bfa2e6cc7373d1), CONST64(0x12905a2482121248), +CONST64(0x403a5d807a40401d), CONST64(0x0840281048080820), CONST64(0xc356e89b95c3c32b), CONST64(0xec337bc5dfecec97), +CONST64(0xdb9690ab4ddbdb4b), CONST64(0xa1611f5fc0a1a1be), CONST64(0x8d1c8307918d8d0e), CONST64(0x3df5c97ac83d3df4), +CONST64(0x97ccf1335b979766), CONST64(0x0000000000000000), CONST64(0xcf36d483f9cfcf1b), CONST64(0x2b4587566e2b2bac), +CONST64(0x7697b3ece17676c5), CONST64(0x8264b019e6828232), CONST64(0xd6fea9b128d6d67f), CONST64(0x1bd87736c31b1b6c), +CONST64(0xb5c15b7774b5b5ee), CONST64(0xaf112943beafaf86), CONST64(0x6a77dfd41d6a6ab5), CONST64(0x50ba0da0ea50505d), +CONST64(0x45124c8a57454509), CONST64(0xf3cb18fb38f3f3eb), CONST64(0x309df060ad3030c0), CONST64(0xef2b74c3c4efef9b), +CONST64(0x3fe5c37eda3f3ffc), CONST64(0x55921caac7555549), CONST64(0xa2791059dba2a2b2), CONST64(0xea0365c9e9eaea8f), +CONST64(0x650fecca6a656589), CONST64(0xbab9686903babad2), CONST64(0x2f65935e4a2f2fbc), CONST64(0xc04ee79d8ec0c027), +CONST64(0xdebe81a160dede5f), CONST64(0x1ce06c38fc1c1c70), CONST64(0xfdbb2ee746fdfdd3), CONST64(0x4d52649a1f4d4d29), +CONST64(0x92e4e03976929272), CONST64(0x758fbceafa7575c9), CONST64(0x06301e0c36060618), CONST64(0x8a249809ae8a8a12), +CONST64(0xb2f940794bb2b2f2), CONST64(0xe66359d185e6e6bf), CONST64(0x0e70361c7e0e0e38), CONST64(0x1ff8633ee71f1f7c), +CONST64(0x6237f7c455626295), CONST64(0xd4eea3b53ad4d477), CONST64(0xa829324d81a8a89a), CONST64(0x96c4f43152969662), +CONST64(0xf99b3aef62f9f9c3), CONST64(0xc566f697a3c5c533), CONST64(0x2535b14a10252594), CONST64(0x59f220b2ab595979), +CONST64(0x8454ae15d084842a), CONST64(0x72b7a7e4c57272d5), CONST64(0x39d5dd72ec3939e4), CONST64(0x4c5a6198164c4c2d), +CONST64(0x5eca3bbc945e5e65), CONST64(0x78e785f09f7878fd), CONST64(0x38ddd870e53838e0), CONST64(0x8c148605988c8c0a), +CONST64(0xd1c6b2bf17d1d163), CONST64(0xa5410b57e4a5a5ae), CONST64(0xe2434dd9a1e2e2af), CONST64(0x612ff8c24e616199), +CONST64(0xb3f1457b42b3b3f6), CONST64(0x2115a54234212184), CONST64(0x9c94d625089c9c4a), CONST64(0x1ef0663cee1e1e78), +CONST64(0x4322528661434311), CONST64(0xc776fc93b1c7c73b), CONST64(0xfcb32be54ffcfcd7), CONST64(0x0420140824040410), +CONST64(0x51b208a2e3515159), CONST64(0x99bcc72f2599995e), CONST64(0x6d4fc4da226d6da9), CONST64(0x0d68391a650d0d34), +CONST64(0xfa8335e979fafacf), CONST64(0xdfb684a369dfdf5b), CONST64(0x7ed79bfca97e7ee5), CONST64(0x243db44819242490), +CONST64(0x3bc5d776fe3b3bec), CONST64(0xab313d4b9aabab96), CONST64(0xce3ed181f0cece1f), CONST64(0x1188552299111144), +CONST64(0x8f0c8903838f8f06), CONST64(0x4e4a6b9c044e4e25), CONST64(0xb7d1517366b7b7e6), CONST64(0xeb0b60cbe0ebeb8b), +CONST64(0x3cfdcc78c13c3cf0), CONST64(0x817cbf1ffd81813e), CONST64(0x94d4fe354094946a), CONST64(0xf7eb0cf31cf7f7fb), +CONST64(0xb9a1676f18b9b9de), CONST64(0x13985f268b13134c), CONST64(0x2c7d9c58512c2cb0), CONST64(0xd3d6b8bb05d3d36b), +CONST64(0xe76b5cd38ce7e7bb), CONST64(0x6e57cbdc396e6ea5), CONST64(0xc46ef395aac4c437), CONST64(0x03180f061b03030c), +CONST64(0x568a13acdc565645), CONST64(0x441a49885e44440d), CONST64(0x7fdf9efea07f7fe1), CONST64(0xa921374f88a9a99e), +CONST64(0x2a4d8254672a2aa8), CONST64(0xbbb16d6b0abbbbd6), CONST64(0xc146e29f87c1c123), CONST64(0x53a202a6f1535351), +CONST64(0xdcae8ba572dcdc57), CONST64(0x0b582716530b0b2c), CONST64(0x9d9cd327019d9d4e), CONST64(0x6c47c1d82b6c6cad), +CONST64(0x3195f562a43131c4), CONST64(0x7487b9e8f37474cd), CONST64(0xf6e309f115f6f6ff), CONST64(0x460a438c4c464605), +CONST64(0xac092645a5acac8a), CONST64(0x893c970fb589891e), CONST64(0x14a04428b4141450), CONST64(0xe15b42dfbae1e1a3), +CONST64(0x16b04e2ca6161658), CONST64(0x3acdd274f73a3ae8), CONST64(0x696fd0d2066969b9), CONST64(0x09482d1241090924), +CONST64(0x70a7ade0d77070dd), CONST64(0xb6d954716fb6b6e2), CONST64(0xd0ceb7bd1ed0d067), CONST64(0xed3b7ec7d6eded93), +CONST64(0xcc2edb85e2cccc17), CONST64(0x422a578468424215), CONST64(0x98b4c22d2c98985a), CONST64(0xa4490e55eda4a4aa), CONST64(0x285d8850752828a0), CONST64(0x5cda31b8865c5c6d), CONST64(0xf8933fed6bf8f8c7), CONST64(0x8644a411c2868622) }; static const ulong64 sbox6[] = { -CONST64(0x6018c07830d81818), CONST64(0x8c2305af46262323), CONST64(0x3fc67ef991b8c6c6), CONST64(0x87e8136fcdfbe8e8), -CONST64(0x26874ca113cb8787), CONST64(0xdab8a9626d11b8b8), CONST64(0x0401080502090101), CONST64(0x214f426e9e0d4f4f), -CONST64(0xd836adee6c9b3636), CONST64(0xa2a6590451ffa6a6), CONST64(0x6fd2debdb90cd2d2), CONST64(0xf3f5fb06f70ef5f5), -CONST64(0xf979ef80f2967979), CONST64(0xa16f5fcede306f6f), CONST64(0x7e91fcef3f6d9191), CONST64(0x5552aa07a4f85252), -CONST64(0x9d6027fdc0476060), CONST64(0xcabc89766535bcbc), CONST64(0x569baccd2b379b9b), CONST64(0x028e048c018a8e8e), -CONST64(0xb6a371155bd2a3a3), CONST64(0x300c603c186c0c0c), CONST64(0xf17bff8af6847b7b), CONST64(0xd435b5e16a803535), -CONST64(0x741de8693af51d1d), CONST64(0xa7e05347ddb3e0e0), CONST64(0x7bd7f6acb321d7d7), CONST64(0x2fc25eed999cc2c2), -CONST64(0xb82e6d965c432e2e), CONST64(0x314b627a96294b4b), CONST64(0xdffea321e15dfefe), CONST64(0x41578216aed55757), -CONST64(0x5415a8412abd1515), CONST64(0xc1779fb6eee87777), CONST64(0xdc37a5eb6e923737), CONST64(0xb3e57b56d79ee5e5), -CONST64(0x469f8cd923139f9f), CONST64(0xe7f0d317fd23f0f0), CONST64(0x354a6a7f94204a4a), CONST64(0x4fda9e95a944dada), -CONST64(0x7d58fa25b0a25858), CONST64(0x03c906ca8fcfc9c9), CONST64(0xa429558d527c2929), CONST64(0x280a5022145a0a0a), -CONST64(0xfeb1e14f7f50b1b1), CONST64(0xbaa0691a5dc9a0a0), CONST64(0xb16b7fdad6146b6b), CONST64(0x2e855cab17d98585), -CONST64(0xcebd8173673cbdbd), CONST64(0x695dd234ba8f5d5d), CONST64(0x4010805020901010), CONST64(0xf7f4f303f507f4f4), -CONST64(0x0bcb16c08bddcbcb), CONST64(0xf83eedc67cd33e3e), CONST64(0x140528110a2d0505), CONST64(0x81671fe6ce786767), -CONST64(0xb7e47353d597e4e4), CONST64(0x9c2725bb4e022727), CONST64(0x1941325882734141), CONST64(0x168b2c9d0ba78b8b), -CONST64(0xa6a7510153f6a7a7), CONST64(0xe97dcf94fab27d7d), CONST64(0x6e95dcfb37499595), CONST64(0x47d88e9fad56d8d8), -CONST64(0xcbfb8b30eb70fbfb), CONST64(0x9fee2371c1cdeeee), CONST64(0xed7cc791f8bb7c7c), CONST64(0x856617e3cc716666), -CONST64(0x53dda68ea77bdddd), CONST64(0x5c17b84b2eaf1717), CONST64(0x014702468e454747), CONST64(0x429e84dc211a9e9e), -CONST64(0x0fca1ec589d4caca), CONST64(0xb42d75995a582d2d), CONST64(0xc6bf9179632ebfbf), CONST64(0x1c07381b0e3f0707), -CONST64(0x8ead012347acadad), CONST64(0x755aea2fb4b05a5a), CONST64(0x36836cb51bef8383), CONST64(0xcc3385ff66b63333), -CONST64(0x91633ff2c65c6363), CONST64(0x0802100a04120202), CONST64(0x92aa39384993aaaa), CONST64(0xd971afa8e2de7171), -CONST64(0x07c80ecf8dc6c8c8), CONST64(0x6419c87d32d11919), CONST64(0x39497270923b4949), CONST64(0x43d9869aaf5fd9d9), -CONST64(0xeff2c31df931f2f2), CONST64(0xabe34b48dba8e3e3), CONST64(0x715be22ab6b95b5b), CONST64(0x1a8834920dbc8888), -CONST64(0x529aa4c8293e9a9a), CONST64(0x98262dbe4c0b2626), CONST64(0xc8328dfa64bf3232), CONST64(0xfab0e94a7d59b0b0), -CONST64(0x83e91b6acff2e9e9), CONST64(0x3c0f78331e770f0f), CONST64(0x73d5e6a6b733d5d5), CONST64(0x3a8074ba1df48080), -CONST64(0xc2be997c6127bebe), CONST64(0x13cd26de87ebcdcd), CONST64(0xd034bde468893434), CONST64(0x3d487a7590324848), -CONST64(0xdbffab24e354ffff), CONST64(0xf57af78ff48d7a7a), CONST64(0x7a90f4ea3d649090), CONST64(0x615fc23ebe9d5f5f), -CONST64(0x80201da0403d2020), CONST64(0xbd6867d5d00f6868), CONST64(0x681ad07234ca1a1a), CONST64(0x82ae192c41b7aeae), -CONST64(0xeab4c95e757db4b4), CONST64(0x4d549a19a8ce5454), CONST64(0x7693ece53b7f9393), CONST64(0x88220daa442f2222), -CONST64(0x8d6407e9c8636464), CONST64(0xe3f1db12ff2af1f1), CONST64(0xd173bfa2e6cc7373), CONST64(0x4812905a24821212), -CONST64(0x1d403a5d807a4040), CONST64(0x2008402810480808), CONST64(0x2bc356e89b95c3c3), CONST64(0x97ec337bc5dfecec), -CONST64(0x4bdb9690ab4ddbdb), CONST64(0xbea1611f5fc0a1a1), CONST64(0x0e8d1c8307918d8d), CONST64(0xf43df5c97ac83d3d), -CONST64(0x6697ccf1335b9797), CONST64(0x0000000000000000), CONST64(0x1bcf36d483f9cfcf), CONST64(0xac2b4587566e2b2b), -CONST64(0xc57697b3ece17676), CONST64(0x328264b019e68282), CONST64(0x7fd6fea9b128d6d6), CONST64(0x6c1bd87736c31b1b), -CONST64(0xeeb5c15b7774b5b5), CONST64(0x86af112943beafaf), CONST64(0xb56a77dfd41d6a6a), CONST64(0x5d50ba0da0ea5050), -CONST64(0x0945124c8a574545), CONST64(0xebf3cb18fb38f3f3), CONST64(0xc0309df060ad3030), CONST64(0x9bef2b74c3c4efef), -CONST64(0xfc3fe5c37eda3f3f), CONST64(0x4955921caac75555), CONST64(0xb2a2791059dba2a2), CONST64(0x8fea0365c9e9eaea), -CONST64(0x89650fecca6a6565), CONST64(0xd2bab9686903baba), CONST64(0xbc2f65935e4a2f2f), CONST64(0x27c04ee79d8ec0c0), -CONST64(0x5fdebe81a160dede), CONST64(0x701ce06c38fc1c1c), CONST64(0xd3fdbb2ee746fdfd), CONST64(0x294d52649a1f4d4d), -CONST64(0x7292e4e039769292), CONST64(0xc9758fbceafa7575), CONST64(0x1806301e0c360606), CONST64(0x128a249809ae8a8a), -CONST64(0xf2b2f940794bb2b2), CONST64(0xbfe66359d185e6e6), CONST64(0x380e70361c7e0e0e), CONST64(0x7c1ff8633ee71f1f), -CONST64(0x956237f7c4556262), CONST64(0x77d4eea3b53ad4d4), CONST64(0x9aa829324d81a8a8), CONST64(0x6296c4f431529696), -CONST64(0xc3f99b3aef62f9f9), CONST64(0x33c566f697a3c5c5), CONST64(0x942535b14a102525), CONST64(0x7959f220b2ab5959), -CONST64(0x2a8454ae15d08484), CONST64(0xd572b7a7e4c57272), CONST64(0xe439d5dd72ec3939), CONST64(0x2d4c5a6198164c4c), -CONST64(0x655eca3bbc945e5e), CONST64(0xfd78e785f09f7878), CONST64(0xe038ddd870e53838), CONST64(0x0a8c148605988c8c), -CONST64(0x63d1c6b2bf17d1d1), CONST64(0xaea5410b57e4a5a5), CONST64(0xafe2434dd9a1e2e2), CONST64(0x99612ff8c24e6161), -CONST64(0xf6b3f1457b42b3b3), CONST64(0x842115a542342121), CONST64(0x4a9c94d625089c9c), CONST64(0x781ef0663cee1e1e), -CONST64(0x1143225286614343), CONST64(0x3bc776fc93b1c7c7), CONST64(0xd7fcb32be54ffcfc), CONST64(0x1004201408240404), -CONST64(0x5951b208a2e35151), CONST64(0x5e99bcc72f259999), CONST64(0xa96d4fc4da226d6d), CONST64(0x340d68391a650d0d), -CONST64(0xcffa8335e979fafa), CONST64(0x5bdfb684a369dfdf), CONST64(0xe57ed79bfca97e7e), CONST64(0x90243db448192424), -CONST64(0xec3bc5d776fe3b3b), CONST64(0x96ab313d4b9aabab), CONST64(0x1fce3ed181f0cece), CONST64(0x4411885522991111), -CONST64(0x068f0c8903838f8f), CONST64(0x254e4a6b9c044e4e), CONST64(0xe6b7d1517366b7b7), CONST64(0x8beb0b60cbe0ebeb), -CONST64(0xf03cfdcc78c13c3c), CONST64(0x3e817cbf1ffd8181), CONST64(0x6a94d4fe35409494), CONST64(0xfbf7eb0cf31cf7f7), -CONST64(0xdeb9a1676f18b9b9), CONST64(0x4c13985f268b1313), CONST64(0xb02c7d9c58512c2c), CONST64(0x6bd3d6b8bb05d3d3), -CONST64(0xbbe76b5cd38ce7e7), CONST64(0xa56e57cbdc396e6e), CONST64(0x37c46ef395aac4c4), CONST64(0x0c03180f061b0303), -CONST64(0x45568a13acdc5656), CONST64(0x0d441a49885e4444), CONST64(0xe17fdf9efea07f7f), CONST64(0x9ea921374f88a9a9), -CONST64(0xa82a4d8254672a2a), CONST64(0xd6bbb16d6b0abbbb), CONST64(0x23c146e29f87c1c1), CONST64(0x5153a202a6f15353), -CONST64(0x57dcae8ba572dcdc), CONST64(0x2c0b582716530b0b), CONST64(0x4e9d9cd327019d9d), CONST64(0xad6c47c1d82b6c6c), -CONST64(0xc43195f562a43131), CONST64(0xcd7487b9e8f37474), CONST64(0xfff6e309f115f6f6), CONST64(0x05460a438c4c4646), -CONST64(0x8aac092645a5acac), CONST64(0x1e893c970fb58989), CONST64(0x5014a04428b41414), CONST64(0xa3e15b42dfbae1e1), -CONST64(0x5816b04e2ca61616), CONST64(0xe83acdd274f73a3a), CONST64(0xb9696fd0d2066969), CONST64(0x2409482d12410909), -CONST64(0xdd70a7ade0d77070), CONST64(0xe2b6d954716fb6b6), CONST64(0x67d0ceb7bd1ed0d0), CONST64(0x93ed3b7ec7d6eded), -CONST64(0x17cc2edb85e2cccc), CONST64(0x15422a5784684242), CONST64(0x5a98b4c22d2c9898), CONST64(0xaaa4490e55eda4a4), +CONST64(0x6018c07830d81818), CONST64(0x8c2305af46262323), CONST64(0x3fc67ef991b8c6c6), CONST64(0x87e8136fcdfbe8e8), +CONST64(0x26874ca113cb8787), CONST64(0xdab8a9626d11b8b8), CONST64(0x0401080502090101), CONST64(0x214f426e9e0d4f4f), +CONST64(0xd836adee6c9b3636), CONST64(0xa2a6590451ffa6a6), CONST64(0x6fd2debdb90cd2d2), CONST64(0xf3f5fb06f70ef5f5), +CONST64(0xf979ef80f2967979), CONST64(0xa16f5fcede306f6f), CONST64(0x7e91fcef3f6d9191), CONST64(0x5552aa07a4f85252), +CONST64(0x9d6027fdc0476060), CONST64(0xcabc89766535bcbc), CONST64(0x569baccd2b379b9b), CONST64(0x028e048c018a8e8e), +CONST64(0xb6a371155bd2a3a3), CONST64(0x300c603c186c0c0c), CONST64(0xf17bff8af6847b7b), CONST64(0xd435b5e16a803535), +CONST64(0x741de8693af51d1d), CONST64(0xa7e05347ddb3e0e0), CONST64(0x7bd7f6acb321d7d7), CONST64(0x2fc25eed999cc2c2), +CONST64(0xb82e6d965c432e2e), CONST64(0x314b627a96294b4b), CONST64(0xdffea321e15dfefe), CONST64(0x41578216aed55757), +CONST64(0x5415a8412abd1515), CONST64(0xc1779fb6eee87777), CONST64(0xdc37a5eb6e923737), CONST64(0xb3e57b56d79ee5e5), +CONST64(0x469f8cd923139f9f), CONST64(0xe7f0d317fd23f0f0), CONST64(0x354a6a7f94204a4a), CONST64(0x4fda9e95a944dada), +CONST64(0x7d58fa25b0a25858), CONST64(0x03c906ca8fcfc9c9), CONST64(0xa429558d527c2929), CONST64(0x280a5022145a0a0a), +CONST64(0xfeb1e14f7f50b1b1), CONST64(0xbaa0691a5dc9a0a0), CONST64(0xb16b7fdad6146b6b), CONST64(0x2e855cab17d98585), +CONST64(0xcebd8173673cbdbd), CONST64(0x695dd234ba8f5d5d), CONST64(0x4010805020901010), CONST64(0xf7f4f303f507f4f4), +CONST64(0x0bcb16c08bddcbcb), CONST64(0xf83eedc67cd33e3e), CONST64(0x140528110a2d0505), CONST64(0x81671fe6ce786767), +CONST64(0xb7e47353d597e4e4), CONST64(0x9c2725bb4e022727), CONST64(0x1941325882734141), CONST64(0x168b2c9d0ba78b8b), +CONST64(0xa6a7510153f6a7a7), CONST64(0xe97dcf94fab27d7d), CONST64(0x6e95dcfb37499595), CONST64(0x47d88e9fad56d8d8), +CONST64(0xcbfb8b30eb70fbfb), CONST64(0x9fee2371c1cdeeee), CONST64(0xed7cc791f8bb7c7c), CONST64(0x856617e3cc716666), +CONST64(0x53dda68ea77bdddd), CONST64(0x5c17b84b2eaf1717), CONST64(0x014702468e454747), CONST64(0x429e84dc211a9e9e), +CONST64(0x0fca1ec589d4caca), CONST64(0xb42d75995a582d2d), CONST64(0xc6bf9179632ebfbf), CONST64(0x1c07381b0e3f0707), +CONST64(0x8ead012347acadad), CONST64(0x755aea2fb4b05a5a), CONST64(0x36836cb51bef8383), CONST64(0xcc3385ff66b63333), +CONST64(0x91633ff2c65c6363), CONST64(0x0802100a04120202), CONST64(0x92aa39384993aaaa), CONST64(0xd971afa8e2de7171), +CONST64(0x07c80ecf8dc6c8c8), CONST64(0x6419c87d32d11919), CONST64(0x39497270923b4949), CONST64(0x43d9869aaf5fd9d9), +CONST64(0xeff2c31df931f2f2), CONST64(0xabe34b48dba8e3e3), CONST64(0x715be22ab6b95b5b), CONST64(0x1a8834920dbc8888), +CONST64(0x529aa4c8293e9a9a), CONST64(0x98262dbe4c0b2626), CONST64(0xc8328dfa64bf3232), CONST64(0xfab0e94a7d59b0b0), +CONST64(0x83e91b6acff2e9e9), CONST64(0x3c0f78331e770f0f), CONST64(0x73d5e6a6b733d5d5), CONST64(0x3a8074ba1df48080), +CONST64(0xc2be997c6127bebe), CONST64(0x13cd26de87ebcdcd), CONST64(0xd034bde468893434), CONST64(0x3d487a7590324848), +CONST64(0xdbffab24e354ffff), CONST64(0xf57af78ff48d7a7a), CONST64(0x7a90f4ea3d649090), CONST64(0x615fc23ebe9d5f5f), +CONST64(0x80201da0403d2020), CONST64(0xbd6867d5d00f6868), CONST64(0x681ad07234ca1a1a), CONST64(0x82ae192c41b7aeae), +CONST64(0xeab4c95e757db4b4), CONST64(0x4d549a19a8ce5454), CONST64(0x7693ece53b7f9393), CONST64(0x88220daa442f2222), +CONST64(0x8d6407e9c8636464), CONST64(0xe3f1db12ff2af1f1), CONST64(0xd173bfa2e6cc7373), CONST64(0x4812905a24821212), +CONST64(0x1d403a5d807a4040), CONST64(0x2008402810480808), CONST64(0x2bc356e89b95c3c3), CONST64(0x97ec337bc5dfecec), +CONST64(0x4bdb9690ab4ddbdb), CONST64(0xbea1611f5fc0a1a1), CONST64(0x0e8d1c8307918d8d), CONST64(0xf43df5c97ac83d3d), +CONST64(0x6697ccf1335b9797), CONST64(0x0000000000000000), CONST64(0x1bcf36d483f9cfcf), CONST64(0xac2b4587566e2b2b), +CONST64(0xc57697b3ece17676), CONST64(0x328264b019e68282), CONST64(0x7fd6fea9b128d6d6), CONST64(0x6c1bd87736c31b1b), +CONST64(0xeeb5c15b7774b5b5), CONST64(0x86af112943beafaf), CONST64(0xb56a77dfd41d6a6a), CONST64(0x5d50ba0da0ea5050), +CONST64(0x0945124c8a574545), CONST64(0xebf3cb18fb38f3f3), CONST64(0xc0309df060ad3030), CONST64(0x9bef2b74c3c4efef), +CONST64(0xfc3fe5c37eda3f3f), CONST64(0x4955921caac75555), CONST64(0xb2a2791059dba2a2), CONST64(0x8fea0365c9e9eaea), +CONST64(0x89650fecca6a6565), CONST64(0xd2bab9686903baba), CONST64(0xbc2f65935e4a2f2f), CONST64(0x27c04ee79d8ec0c0), +CONST64(0x5fdebe81a160dede), CONST64(0x701ce06c38fc1c1c), CONST64(0xd3fdbb2ee746fdfd), CONST64(0x294d52649a1f4d4d), +CONST64(0x7292e4e039769292), CONST64(0xc9758fbceafa7575), CONST64(0x1806301e0c360606), CONST64(0x128a249809ae8a8a), +CONST64(0xf2b2f940794bb2b2), CONST64(0xbfe66359d185e6e6), CONST64(0x380e70361c7e0e0e), CONST64(0x7c1ff8633ee71f1f), +CONST64(0x956237f7c4556262), CONST64(0x77d4eea3b53ad4d4), CONST64(0x9aa829324d81a8a8), CONST64(0x6296c4f431529696), +CONST64(0xc3f99b3aef62f9f9), CONST64(0x33c566f697a3c5c5), CONST64(0x942535b14a102525), CONST64(0x7959f220b2ab5959), +CONST64(0x2a8454ae15d08484), CONST64(0xd572b7a7e4c57272), CONST64(0xe439d5dd72ec3939), CONST64(0x2d4c5a6198164c4c), +CONST64(0x655eca3bbc945e5e), CONST64(0xfd78e785f09f7878), CONST64(0xe038ddd870e53838), CONST64(0x0a8c148605988c8c), +CONST64(0x63d1c6b2bf17d1d1), CONST64(0xaea5410b57e4a5a5), CONST64(0xafe2434dd9a1e2e2), CONST64(0x99612ff8c24e6161), +CONST64(0xf6b3f1457b42b3b3), CONST64(0x842115a542342121), CONST64(0x4a9c94d625089c9c), CONST64(0x781ef0663cee1e1e), +CONST64(0x1143225286614343), CONST64(0x3bc776fc93b1c7c7), CONST64(0xd7fcb32be54ffcfc), CONST64(0x1004201408240404), +CONST64(0x5951b208a2e35151), CONST64(0x5e99bcc72f259999), CONST64(0xa96d4fc4da226d6d), CONST64(0x340d68391a650d0d), +CONST64(0xcffa8335e979fafa), CONST64(0x5bdfb684a369dfdf), CONST64(0xe57ed79bfca97e7e), CONST64(0x90243db448192424), +CONST64(0xec3bc5d776fe3b3b), CONST64(0x96ab313d4b9aabab), CONST64(0x1fce3ed181f0cece), CONST64(0x4411885522991111), +CONST64(0x068f0c8903838f8f), CONST64(0x254e4a6b9c044e4e), CONST64(0xe6b7d1517366b7b7), CONST64(0x8beb0b60cbe0ebeb), +CONST64(0xf03cfdcc78c13c3c), CONST64(0x3e817cbf1ffd8181), CONST64(0x6a94d4fe35409494), CONST64(0xfbf7eb0cf31cf7f7), +CONST64(0xdeb9a1676f18b9b9), CONST64(0x4c13985f268b1313), CONST64(0xb02c7d9c58512c2c), CONST64(0x6bd3d6b8bb05d3d3), +CONST64(0xbbe76b5cd38ce7e7), CONST64(0xa56e57cbdc396e6e), CONST64(0x37c46ef395aac4c4), CONST64(0x0c03180f061b0303), +CONST64(0x45568a13acdc5656), CONST64(0x0d441a49885e4444), CONST64(0xe17fdf9efea07f7f), CONST64(0x9ea921374f88a9a9), +CONST64(0xa82a4d8254672a2a), CONST64(0xd6bbb16d6b0abbbb), CONST64(0x23c146e29f87c1c1), CONST64(0x5153a202a6f15353), +CONST64(0x57dcae8ba572dcdc), CONST64(0x2c0b582716530b0b), CONST64(0x4e9d9cd327019d9d), CONST64(0xad6c47c1d82b6c6c), +CONST64(0xc43195f562a43131), CONST64(0xcd7487b9e8f37474), CONST64(0xfff6e309f115f6f6), CONST64(0x05460a438c4c4646), +CONST64(0x8aac092645a5acac), CONST64(0x1e893c970fb58989), CONST64(0x5014a04428b41414), CONST64(0xa3e15b42dfbae1e1), +CONST64(0x5816b04e2ca61616), CONST64(0xe83acdd274f73a3a), CONST64(0xb9696fd0d2066969), CONST64(0x2409482d12410909), +CONST64(0xdd70a7ade0d77070), CONST64(0xe2b6d954716fb6b6), CONST64(0x67d0ceb7bd1ed0d0), CONST64(0x93ed3b7ec7d6eded), +CONST64(0x17cc2edb85e2cccc), CONST64(0x15422a5784684242), CONST64(0x5a98b4c22d2c9898), CONST64(0xaaa4490e55eda4a4), CONST64(0xa0285d8850752828), CONST64(0x6d5cda31b8865c5c), CONST64(0xc7f8933fed6bf8f8), CONST64(0x228644a411c28686) }; static const ulong64 sbox7[] = { -CONST64(0x186018c07830d818), CONST64(0x238c2305af462623), CONST64(0xc63fc67ef991b8c6), CONST64(0xe887e8136fcdfbe8), -CONST64(0x8726874ca113cb87), CONST64(0xb8dab8a9626d11b8), CONST64(0x0104010805020901), CONST64(0x4f214f426e9e0d4f), -CONST64(0x36d836adee6c9b36), CONST64(0xa6a2a6590451ffa6), CONST64(0xd26fd2debdb90cd2), CONST64(0xf5f3f5fb06f70ef5), -CONST64(0x79f979ef80f29679), CONST64(0x6fa16f5fcede306f), CONST64(0x917e91fcef3f6d91), CONST64(0x525552aa07a4f852), -CONST64(0x609d6027fdc04760), CONST64(0xbccabc89766535bc), CONST64(0x9b569baccd2b379b), CONST64(0x8e028e048c018a8e), -CONST64(0xa3b6a371155bd2a3), CONST64(0x0c300c603c186c0c), CONST64(0x7bf17bff8af6847b), CONST64(0x35d435b5e16a8035), -CONST64(0x1d741de8693af51d), CONST64(0xe0a7e05347ddb3e0), CONST64(0xd77bd7f6acb321d7), CONST64(0xc22fc25eed999cc2), -CONST64(0x2eb82e6d965c432e), CONST64(0x4b314b627a96294b), CONST64(0xfedffea321e15dfe), CONST64(0x5741578216aed557), -CONST64(0x155415a8412abd15), CONST64(0x77c1779fb6eee877), CONST64(0x37dc37a5eb6e9237), CONST64(0xe5b3e57b56d79ee5), -CONST64(0x9f469f8cd923139f), CONST64(0xf0e7f0d317fd23f0), CONST64(0x4a354a6a7f94204a), CONST64(0xda4fda9e95a944da), -CONST64(0x587d58fa25b0a258), CONST64(0xc903c906ca8fcfc9), CONST64(0x29a429558d527c29), CONST64(0x0a280a5022145a0a), -CONST64(0xb1feb1e14f7f50b1), CONST64(0xa0baa0691a5dc9a0), CONST64(0x6bb16b7fdad6146b), CONST64(0x852e855cab17d985), -CONST64(0xbdcebd8173673cbd), CONST64(0x5d695dd234ba8f5d), CONST64(0x1040108050209010), CONST64(0xf4f7f4f303f507f4), -CONST64(0xcb0bcb16c08bddcb), CONST64(0x3ef83eedc67cd33e), CONST64(0x05140528110a2d05), CONST64(0x6781671fe6ce7867), -CONST64(0xe4b7e47353d597e4), CONST64(0x279c2725bb4e0227), CONST64(0x4119413258827341), CONST64(0x8b168b2c9d0ba78b), -CONST64(0xa7a6a7510153f6a7), CONST64(0x7de97dcf94fab27d), CONST64(0x956e95dcfb374995), CONST64(0xd847d88e9fad56d8), -CONST64(0xfbcbfb8b30eb70fb), CONST64(0xee9fee2371c1cdee), CONST64(0x7ced7cc791f8bb7c), CONST64(0x66856617e3cc7166), -CONST64(0xdd53dda68ea77bdd), CONST64(0x175c17b84b2eaf17), CONST64(0x47014702468e4547), CONST64(0x9e429e84dc211a9e), -CONST64(0xca0fca1ec589d4ca), CONST64(0x2db42d75995a582d), CONST64(0xbfc6bf9179632ebf), CONST64(0x071c07381b0e3f07), -CONST64(0xad8ead012347acad), CONST64(0x5a755aea2fb4b05a), CONST64(0x8336836cb51bef83), CONST64(0x33cc3385ff66b633), -CONST64(0x6391633ff2c65c63), CONST64(0x020802100a041202), CONST64(0xaa92aa39384993aa), CONST64(0x71d971afa8e2de71), -CONST64(0xc807c80ecf8dc6c8), CONST64(0x196419c87d32d119), CONST64(0x4939497270923b49), CONST64(0xd943d9869aaf5fd9), -CONST64(0xf2eff2c31df931f2), CONST64(0xe3abe34b48dba8e3), CONST64(0x5b715be22ab6b95b), CONST64(0x881a8834920dbc88), -CONST64(0x9a529aa4c8293e9a), CONST64(0x2698262dbe4c0b26), CONST64(0x32c8328dfa64bf32), CONST64(0xb0fab0e94a7d59b0), -CONST64(0xe983e91b6acff2e9), CONST64(0x0f3c0f78331e770f), CONST64(0xd573d5e6a6b733d5), CONST64(0x803a8074ba1df480), -CONST64(0xbec2be997c6127be), CONST64(0xcd13cd26de87ebcd), CONST64(0x34d034bde4688934), CONST64(0x483d487a75903248), -CONST64(0xffdbffab24e354ff), CONST64(0x7af57af78ff48d7a), CONST64(0x907a90f4ea3d6490), CONST64(0x5f615fc23ebe9d5f), -CONST64(0x2080201da0403d20), CONST64(0x68bd6867d5d00f68), CONST64(0x1a681ad07234ca1a), CONST64(0xae82ae192c41b7ae), -CONST64(0xb4eab4c95e757db4), CONST64(0x544d549a19a8ce54), CONST64(0x937693ece53b7f93), CONST64(0x2288220daa442f22), -CONST64(0x648d6407e9c86364), CONST64(0xf1e3f1db12ff2af1), CONST64(0x73d173bfa2e6cc73), CONST64(0x124812905a248212), -CONST64(0x401d403a5d807a40), CONST64(0x0820084028104808), CONST64(0xc32bc356e89b95c3), CONST64(0xec97ec337bc5dfec), -CONST64(0xdb4bdb9690ab4ddb), CONST64(0xa1bea1611f5fc0a1), CONST64(0x8d0e8d1c8307918d), CONST64(0x3df43df5c97ac83d), -CONST64(0x976697ccf1335b97), CONST64(0x0000000000000000), CONST64(0xcf1bcf36d483f9cf), CONST64(0x2bac2b4587566e2b), -CONST64(0x76c57697b3ece176), CONST64(0x82328264b019e682), CONST64(0xd67fd6fea9b128d6), CONST64(0x1b6c1bd87736c31b), -CONST64(0xb5eeb5c15b7774b5), CONST64(0xaf86af112943beaf), CONST64(0x6ab56a77dfd41d6a), CONST64(0x505d50ba0da0ea50), -CONST64(0x450945124c8a5745), CONST64(0xf3ebf3cb18fb38f3), CONST64(0x30c0309df060ad30), CONST64(0xef9bef2b74c3c4ef), -CONST64(0x3ffc3fe5c37eda3f), CONST64(0x554955921caac755), CONST64(0xa2b2a2791059dba2), CONST64(0xea8fea0365c9e9ea), -CONST64(0x6589650fecca6a65), CONST64(0xbad2bab9686903ba), CONST64(0x2fbc2f65935e4a2f), CONST64(0xc027c04ee79d8ec0), -CONST64(0xde5fdebe81a160de), CONST64(0x1c701ce06c38fc1c), CONST64(0xfdd3fdbb2ee746fd), CONST64(0x4d294d52649a1f4d), -CONST64(0x927292e4e0397692), CONST64(0x75c9758fbceafa75), CONST64(0x061806301e0c3606), CONST64(0x8a128a249809ae8a), -CONST64(0xb2f2b2f940794bb2), CONST64(0xe6bfe66359d185e6), CONST64(0x0e380e70361c7e0e), CONST64(0x1f7c1ff8633ee71f), -CONST64(0x62956237f7c45562), CONST64(0xd477d4eea3b53ad4), CONST64(0xa89aa829324d81a8), CONST64(0x966296c4f4315296), -CONST64(0xf9c3f99b3aef62f9), CONST64(0xc533c566f697a3c5), CONST64(0x25942535b14a1025), CONST64(0x597959f220b2ab59), -CONST64(0x842a8454ae15d084), CONST64(0x72d572b7a7e4c572), CONST64(0x39e439d5dd72ec39), CONST64(0x4c2d4c5a6198164c), -CONST64(0x5e655eca3bbc945e), CONST64(0x78fd78e785f09f78), CONST64(0x38e038ddd870e538), CONST64(0x8c0a8c148605988c), -CONST64(0xd163d1c6b2bf17d1), CONST64(0xa5aea5410b57e4a5), CONST64(0xe2afe2434dd9a1e2), CONST64(0x6199612ff8c24e61), -CONST64(0xb3f6b3f1457b42b3), CONST64(0x21842115a5423421), CONST64(0x9c4a9c94d625089c), CONST64(0x1e781ef0663cee1e), -CONST64(0x4311432252866143), CONST64(0xc73bc776fc93b1c7), CONST64(0xfcd7fcb32be54ffc), CONST64(0x0410042014082404), -CONST64(0x515951b208a2e351), CONST64(0x995e99bcc72f2599), CONST64(0x6da96d4fc4da226d), CONST64(0x0d340d68391a650d), -CONST64(0xfacffa8335e979fa), CONST64(0xdf5bdfb684a369df), CONST64(0x7ee57ed79bfca97e), CONST64(0x2490243db4481924), -CONST64(0x3bec3bc5d776fe3b), CONST64(0xab96ab313d4b9aab), CONST64(0xce1fce3ed181f0ce), CONST64(0x1144118855229911), -CONST64(0x8f068f0c8903838f), CONST64(0x4e254e4a6b9c044e), CONST64(0xb7e6b7d1517366b7), CONST64(0xeb8beb0b60cbe0eb), -CONST64(0x3cf03cfdcc78c13c), CONST64(0x813e817cbf1ffd81), CONST64(0x946a94d4fe354094), CONST64(0xf7fbf7eb0cf31cf7), -CONST64(0xb9deb9a1676f18b9), CONST64(0x134c13985f268b13), CONST64(0x2cb02c7d9c58512c), CONST64(0xd36bd3d6b8bb05d3), -CONST64(0xe7bbe76b5cd38ce7), CONST64(0x6ea56e57cbdc396e), CONST64(0xc437c46ef395aac4), CONST64(0x030c03180f061b03), -CONST64(0x5645568a13acdc56), CONST64(0x440d441a49885e44), CONST64(0x7fe17fdf9efea07f), CONST64(0xa99ea921374f88a9), -CONST64(0x2aa82a4d8254672a), CONST64(0xbbd6bbb16d6b0abb), CONST64(0xc123c146e29f87c1), CONST64(0x535153a202a6f153), -CONST64(0xdc57dcae8ba572dc), CONST64(0x0b2c0b582716530b), CONST64(0x9d4e9d9cd327019d), CONST64(0x6cad6c47c1d82b6c), -CONST64(0x31c43195f562a431), CONST64(0x74cd7487b9e8f374), CONST64(0xf6fff6e309f115f6), CONST64(0x4605460a438c4c46), -CONST64(0xac8aac092645a5ac), CONST64(0x891e893c970fb589), CONST64(0x145014a04428b414), CONST64(0xe1a3e15b42dfbae1), -CONST64(0x165816b04e2ca616), CONST64(0x3ae83acdd274f73a), CONST64(0x69b9696fd0d20669), CONST64(0x092409482d124109), -CONST64(0x70dd70a7ade0d770), CONST64(0xb6e2b6d954716fb6), CONST64(0xd067d0ceb7bd1ed0), CONST64(0xed93ed3b7ec7d6ed), -CONST64(0xcc17cc2edb85e2cc), CONST64(0x4215422a57846842), CONST64(0x985a98b4c22d2c98), CONST64(0xa4aaa4490e55eda4), +CONST64(0x186018c07830d818), CONST64(0x238c2305af462623), CONST64(0xc63fc67ef991b8c6), CONST64(0xe887e8136fcdfbe8), +CONST64(0x8726874ca113cb87), CONST64(0xb8dab8a9626d11b8), CONST64(0x0104010805020901), CONST64(0x4f214f426e9e0d4f), +CONST64(0x36d836adee6c9b36), CONST64(0xa6a2a6590451ffa6), CONST64(0xd26fd2debdb90cd2), CONST64(0xf5f3f5fb06f70ef5), +CONST64(0x79f979ef80f29679), CONST64(0x6fa16f5fcede306f), CONST64(0x917e91fcef3f6d91), CONST64(0x525552aa07a4f852), +CONST64(0x609d6027fdc04760), CONST64(0xbccabc89766535bc), CONST64(0x9b569baccd2b379b), CONST64(0x8e028e048c018a8e), +CONST64(0xa3b6a371155bd2a3), CONST64(0x0c300c603c186c0c), CONST64(0x7bf17bff8af6847b), CONST64(0x35d435b5e16a8035), +CONST64(0x1d741de8693af51d), CONST64(0xe0a7e05347ddb3e0), CONST64(0xd77bd7f6acb321d7), CONST64(0xc22fc25eed999cc2), +CONST64(0x2eb82e6d965c432e), CONST64(0x4b314b627a96294b), CONST64(0xfedffea321e15dfe), CONST64(0x5741578216aed557), +CONST64(0x155415a8412abd15), CONST64(0x77c1779fb6eee877), CONST64(0x37dc37a5eb6e9237), CONST64(0xe5b3e57b56d79ee5), +CONST64(0x9f469f8cd923139f), CONST64(0xf0e7f0d317fd23f0), CONST64(0x4a354a6a7f94204a), CONST64(0xda4fda9e95a944da), +CONST64(0x587d58fa25b0a258), CONST64(0xc903c906ca8fcfc9), CONST64(0x29a429558d527c29), CONST64(0x0a280a5022145a0a), +CONST64(0xb1feb1e14f7f50b1), CONST64(0xa0baa0691a5dc9a0), CONST64(0x6bb16b7fdad6146b), CONST64(0x852e855cab17d985), +CONST64(0xbdcebd8173673cbd), CONST64(0x5d695dd234ba8f5d), CONST64(0x1040108050209010), CONST64(0xf4f7f4f303f507f4), +CONST64(0xcb0bcb16c08bddcb), CONST64(0x3ef83eedc67cd33e), CONST64(0x05140528110a2d05), CONST64(0x6781671fe6ce7867), +CONST64(0xe4b7e47353d597e4), CONST64(0x279c2725bb4e0227), CONST64(0x4119413258827341), CONST64(0x8b168b2c9d0ba78b), +CONST64(0xa7a6a7510153f6a7), CONST64(0x7de97dcf94fab27d), CONST64(0x956e95dcfb374995), CONST64(0xd847d88e9fad56d8), +CONST64(0xfbcbfb8b30eb70fb), CONST64(0xee9fee2371c1cdee), CONST64(0x7ced7cc791f8bb7c), CONST64(0x66856617e3cc7166), +CONST64(0xdd53dda68ea77bdd), CONST64(0x175c17b84b2eaf17), CONST64(0x47014702468e4547), CONST64(0x9e429e84dc211a9e), +CONST64(0xca0fca1ec589d4ca), CONST64(0x2db42d75995a582d), CONST64(0xbfc6bf9179632ebf), CONST64(0x071c07381b0e3f07), +CONST64(0xad8ead012347acad), CONST64(0x5a755aea2fb4b05a), CONST64(0x8336836cb51bef83), CONST64(0x33cc3385ff66b633), +CONST64(0x6391633ff2c65c63), CONST64(0x020802100a041202), CONST64(0xaa92aa39384993aa), CONST64(0x71d971afa8e2de71), +CONST64(0xc807c80ecf8dc6c8), CONST64(0x196419c87d32d119), CONST64(0x4939497270923b49), CONST64(0xd943d9869aaf5fd9), +CONST64(0xf2eff2c31df931f2), CONST64(0xe3abe34b48dba8e3), CONST64(0x5b715be22ab6b95b), CONST64(0x881a8834920dbc88), +CONST64(0x9a529aa4c8293e9a), CONST64(0x2698262dbe4c0b26), CONST64(0x32c8328dfa64bf32), CONST64(0xb0fab0e94a7d59b0), +CONST64(0xe983e91b6acff2e9), CONST64(0x0f3c0f78331e770f), CONST64(0xd573d5e6a6b733d5), CONST64(0x803a8074ba1df480), +CONST64(0xbec2be997c6127be), CONST64(0xcd13cd26de87ebcd), CONST64(0x34d034bde4688934), CONST64(0x483d487a75903248), +CONST64(0xffdbffab24e354ff), CONST64(0x7af57af78ff48d7a), CONST64(0x907a90f4ea3d6490), CONST64(0x5f615fc23ebe9d5f), +CONST64(0x2080201da0403d20), CONST64(0x68bd6867d5d00f68), CONST64(0x1a681ad07234ca1a), CONST64(0xae82ae192c41b7ae), +CONST64(0xb4eab4c95e757db4), CONST64(0x544d549a19a8ce54), CONST64(0x937693ece53b7f93), CONST64(0x2288220daa442f22), +CONST64(0x648d6407e9c86364), CONST64(0xf1e3f1db12ff2af1), CONST64(0x73d173bfa2e6cc73), CONST64(0x124812905a248212), +CONST64(0x401d403a5d807a40), CONST64(0x0820084028104808), CONST64(0xc32bc356e89b95c3), CONST64(0xec97ec337bc5dfec), +CONST64(0xdb4bdb9690ab4ddb), CONST64(0xa1bea1611f5fc0a1), CONST64(0x8d0e8d1c8307918d), CONST64(0x3df43df5c97ac83d), +CONST64(0x976697ccf1335b97), CONST64(0x0000000000000000), CONST64(0xcf1bcf36d483f9cf), CONST64(0x2bac2b4587566e2b), +CONST64(0x76c57697b3ece176), CONST64(0x82328264b019e682), CONST64(0xd67fd6fea9b128d6), CONST64(0x1b6c1bd87736c31b), +CONST64(0xb5eeb5c15b7774b5), CONST64(0xaf86af112943beaf), CONST64(0x6ab56a77dfd41d6a), CONST64(0x505d50ba0da0ea50), +CONST64(0x450945124c8a5745), CONST64(0xf3ebf3cb18fb38f3), CONST64(0x30c0309df060ad30), CONST64(0xef9bef2b74c3c4ef), +CONST64(0x3ffc3fe5c37eda3f), CONST64(0x554955921caac755), CONST64(0xa2b2a2791059dba2), CONST64(0xea8fea0365c9e9ea), +CONST64(0x6589650fecca6a65), CONST64(0xbad2bab9686903ba), CONST64(0x2fbc2f65935e4a2f), CONST64(0xc027c04ee79d8ec0), +CONST64(0xde5fdebe81a160de), CONST64(0x1c701ce06c38fc1c), CONST64(0xfdd3fdbb2ee746fd), CONST64(0x4d294d52649a1f4d), +CONST64(0x927292e4e0397692), CONST64(0x75c9758fbceafa75), CONST64(0x061806301e0c3606), CONST64(0x8a128a249809ae8a), +CONST64(0xb2f2b2f940794bb2), CONST64(0xe6bfe66359d185e6), CONST64(0x0e380e70361c7e0e), CONST64(0x1f7c1ff8633ee71f), +CONST64(0x62956237f7c45562), CONST64(0xd477d4eea3b53ad4), CONST64(0xa89aa829324d81a8), CONST64(0x966296c4f4315296), +CONST64(0xf9c3f99b3aef62f9), CONST64(0xc533c566f697a3c5), CONST64(0x25942535b14a1025), CONST64(0x597959f220b2ab59), +CONST64(0x842a8454ae15d084), CONST64(0x72d572b7a7e4c572), CONST64(0x39e439d5dd72ec39), CONST64(0x4c2d4c5a6198164c), +CONST64(0x5e655eca3bbc945e), CONST64(0x78fd78e785f09f78), CONST64(0x38e038ddd870e538), CONST64(0x8c0a8c148605988c), +CONST64(0xd163d1c6b2bf17d1), CONST64(0xa5aea5410b57e4a5), CONST64(0xe2afe2434dd9a1e2), CONST64(0x6199612ff8c24e61), +CONST64(0xb3f6b3f1457b42b3), CONST64(0x21842115a5423421), CONST64(0x9c4a9c94d625089c), CONST64(0x1e781ef0663cee1e), +CONST64(0x4311432252866143), CONST64(0xc73bc776fc93b1c7), CONST64(0xfcd7fcb32be54ffc), CONST64(0x0410042014082404), +CONST64(0x515951b208a2e351), CONST64(0x995e99bcc72f2599), CONST64(0x6da96d4fc4da226d), CONST64(0x0d340d68391a650d), +CONST64(0xfacffa8335e979fa), CONST64(0xdf5bdfb684a369df), CONST64(0x7ee57ed79bfca97e), CONST64(0x2490243db4481924), +CONST64(0x3bec3bc5d776fe3b), CONST64(0xab96ab313d4b9aab), CONST64(0xce1fce3ed181f0ce), CONST64(0x1144118855229911), +CONST64(0x8f068f0c8903838f), CONST64(0x4e254e4a6b9c044e), CONST64(0xb7e6b7d1517366b7), CONST64(0xeb8beb0b60cbe0eb), +CONST64(0x3cf03cfdcc78c13c), CONST64(0x813e817cbf1ffd81), CONST64(0x946a94d4fe354094), CONST64(0xf7fbf7eb0cf31cf7), +CONST64(0xb9deb9a1676f18b9), CONST64(0x134c13985f268b13), CONST64(0x2cb02c7d9c58512c), CONST64(0xd36bd3d6b8bb05d3), +CONST64(0xe7bbe76b5cd38ce7), CONST64(0x6ea56e57cbdc396e), CONST64(0xc437c46ef395aac4), CONST64(0x030c03180f061b03), +CONST64(0x5645568a13acdc56), CONST64(0x440d441a49885e44), CONST64(0x7fe17fdf9efea07f), CONST64(0xa99ea921374f88a9), +CONST64(0x2aa82a4d8254672a), CONST64(0xbbd6bbb16d6b0abb), CONST64(0xc123c146e29f87c1), CONST64(0x535153a202a6f153), +CONST64(0xdc57dcae8ba572dc), CONST64(0x0b2c0b582716530b), CONST64(0x9d4e9d9cd327019d), CONST64(0x6cad6c47c1d82b6c), +CONST64(0x31c43195f562a431), CONST64(0x74cd7487b9e8f374), CONST64(0xf6fff6e309f115f6), CONST64(0x4605460a438c4c46), +CONST64(0xac8aac092645a5ac), CONST64(0x891e893c970fb589), CONST64(0x145014a04428b414), CONST64(0xe1a3e15b42dfbae1), +CONST64(0x165816b04e2ca616), CONST64(0x3ae83acdd274f73a), CONST64(0x69b9696fd0d20669), CONST64(0x092409482d124109), +CONST64(0x70dd70a7ade0d770), CONST64(0xb6e2b6d954716fb6), CONST64(0xd067d0ceb7bd1ed0), CONST64(0xed93ed3b7ec7d6ed), +CONST64(0xcc17cc2edb85e2cc), CONST64(0x4215422a57846842), CONST64(0x985a98b4c22d2c98), CONST64(0xa4aaa4490e55eda4), CONST64(0x28a0285d88507528), CONST64(0x5c6d5cda31b8865c), CONST64(0xf8c7f8933fed6bf8), CONST64(0x86228644a411c286) }; @@ -583,4 +573,3 @@ CONST64(0xca2dbf07ad5a8333), CONST64(0x6302aa71c81949d9), }; -#endif /* LTC_WHIRLTAB_C */ diff --git a/xtea.c b/xtea.c new file mode 100644 index 00000000..14341490 --- /dev/null +++ b/xtea.c @@ -0,0 +1,169 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef XTEA + +const struct _cipher_descriptor xtea_desc = +{ + "xtea", + 1, + 16, 16, 8, 32, + &xtea_setup, + &xtea_ecb_encrypt, + &xtea_ecb_decrypt, + &xtea_test, + &xtea_keysize +}; + +int xtea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) +{ + unsigned long x, sum, K[4]; + + _ARGCHK(key != NULL); + _ARGCHK(skey != NULL); + + /* check arguments */ + if (keylen != 16) { + return CRYPT_INVALID_KEYSIZE; + } + + if (num_rounds != 0 && num_rounds != 32) { + return CRYPT_INVALID_ROUNDS; + } + + /* load key */ + LOAD32L(K[0], key+0); + LOAD32L(K[1], key+4); + LOAD32L(K[2], key+8); + LOAD32L(K[3], key+12); + + for (x = sum = 0; x < 32; x++) { + skey->xtea.A[x] = (sum + K[sum&3]) & 0xFFFFFFFFUL; + sum = (sum + 0x9E3779B9UL) & 0xFFFFFFFFUL; + skey->xtea.B[x] = (sum + K[(sum>>11)&3]) & 0xFFFFFFFFUL; + } + +#ifdef CLEAN_STACK + zeromem(&K, sizeof(K)); +#endif + + return CRYPT_OK; +} + +void xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key) +{ + unsigned long y, z; + int r; + + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(key != NULL); + + LOAD32L(y, &pt[0]); + LOAD32L(z, &pt[4]); + for (r = 0; r < 32; r += 4) { + y = (y + ((((z<<4)^(z>>5)) + z) ^ key->xtea.A[r])) & 0xFFFFFFFFUL; + z = (z + ((((y<<4)^(y>>5)) + y) ^ key->xtea.B[r])) & 0xFFFFFFFFUL; + + y = (y + ((((z<<4)^(z>>5)) + z) ^ key->xtea.A[r+1])) & 0xFFFFFFFFUL; + z = (z + ((((y<<4)^(y>>5)) + y) ^ key->xtea.B[r+1])) & 0xFFFFFFFFUL; + + y = (y + ((((z<<4)^(z>>5)) + z) ^ key->xtea.A[r+2])) & 0xFFFFFFFFUL; + z = (z + ((((y<<4)^(y>>5)) + y) ^ key->xtea.B[r+2])) & 0xFFFFFFFFUL; + + y = (y + ((((z<<4)^(z>>5)) + z) ^ key->xtea.A[r+3])) & 0xFFFFFFFFUL; + z = (z + ((((y<<4)^(y>>5)) + y) ^ key->xtea.B[r+3])) & 0xFFFFFFFFUL; + } + STORE32L(y, &ct[0]); + STORE32L(z, &ct[4]); +} + +void xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key) +{ + unsigned long y, z; + int r; + + _ARGCHK(pt != NULL); + _ARGCHK(ct != NULL); + _ARGCHK(key != NULL); + + LOAD32L(y, &ct[0]); + LOAD32L(z, &ct[4]); + for (r = 31; r >= 0; r -= 4) { + z = (z - ((((y<<4)^(y>>5)) + y) ^ key->xtea.B[r])) & 0xFFFFFFFFUL; + y = (y - ((((z<<4)^(z>>5)) + z) ^ key->xtea.A[r])) & 0xFFFFFFFFUL; + + z = (z - ((((y<<4)^(y>>5)) + y) ^ key->xtea.B[r-1])) & 0xFFFFFFFFUL; + y = (y - ((((z<<4)^(z>>5)) + z) ^ key->xtea.A[r-1])) & 0xFFFFFFFFUL; + + z = (z - ((((y<<4)^(y>>5)) + y) ^ key->xtea.B[r-2])) & 0xFFFFFFFFUL; + y = (y - ((((z<<4)^(z>>5)) + z) ^ key->xtea.A[r-2])) & 0xFFFFFFFFUL; + + z = (z - ((((y<<4)^(y>>5)) + y) ^ key->xtea.B[r-3])) & 0xFFFFFFFFUL; + y = (y - ((((z<<4)^(z>>5)) + z) ^ key->xtea.A[r-3])) & 0xFFFFFFFFUL; + } + STORE32L(y, &pt[0]); + STORE32L(z, &pt[4]); +} + +int xtea_test(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + static const unsigned char key[16] = + { 0x78, 0x56, 0x34, 0x12, 0xf0, 0xcd, 0xcb, 0x9a, + 0x48, 0x37, 0x26, 0x15, 0xc0, 0xbf, 0xae, 0x9d }; + static const unsigned char pt[8] = + { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }; + static const unsigned char ct[8] = + { 0x75, 0xd7, 0xc5, 0xbf, 0xcf, 0x58, 0xc9, 0x3f }; + unsigned char tmp[2][8]; + symmetric_key skey; + int err, y; + + if ((err = xtea_setup(key, 16, 0, &skey)) != CRYPT_OK) { + return err; + } + xtea_ecb_encrypt(pt, tmp[0], &skey); + xtea_ecb_decrypt(tmp[0], tmp[1], &skey); + + if (memcmp(tmp[0], ct, 8) != 0 || memcmp(tmp[1], pt, 8) != 0) { + return CRYPT_FAIL_TESTVECTOR; + } + + /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ + for (y = 0; y < 8; y++) tmp[0][y] = 0; + for (y = 0; y < 1000; y++) xtea_ecb_encrypt(tmp[0], tmp[0], &skey); + for (y = 0; y < 1000; y++) xtea_ecb_decrypt(tmp[0], tmp[0], &skey); + for (y = 0; y < 8; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; + + return CRYPT_OK; + #endif +} + +int xtea_keysize(int *desired_keysize) +{ + _ARGCHK(desired_keysize != NULL); + if (*desired_keysize < 16) { + return CRYPT_INVALID_KEYSIZE; + } + *desired_keysize = 16; + return CRYPT_OK; +} + + +#endif + + + diff --git a/yarrow.c b/yarrow.c new file mode 100644 index 00000000..7354d47b --- /dev/null +++ b/yarrow.c @@ -0,0 +1,232 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ + +#include "mycrypt.h" + +#ifdef YARROW + +const struct _prng_descriptor yarrow_desc = +{ + "yarrow", + &yarrow_start, + &yarrow_add_entropy, + &yarrow_ready, + &yarrow_read, + &yarrow_done, + &yarrow_export, + &yarrow_import +}; + +int yarrow_start(prng_state *prng) +{ + int err; + + _ARGCHK(prng != NULL); + + /* these are the default hash/cipher combo used */ +#ifdef RIJNDAEL +#if YARROW_AES==0 + prng->yarrow.cipher = register_cipher(&rijndael_enc_desc); +#elif YARROW_AES==1 + prng->yarrow.cipher = register_cipher(&aes_enc_desc); +#elif YARROW_AES==2 + prng->yarrow.cipher = register_cipher(&rijndael_desc); +#elif YARROW_AES==3 + prng->yarrow.cipher = register_cipher(&aes_desc); +#endif +#elif defined(BLOWFISH) + prng->yarrow.cipher = register_cipher(&blowfish_desc); +#elif defined(TWOFISH) + prng->yarrow.cipher = register_cipher(&twofish_desc); +#elif defined(RC6) + prng->yarrow.cipher = register_cipher(&rc6_desc); +#elif defined(RC5) + prng->yarrow.cipher = register_cipher(&rc5_desc); +#elif defined(SAFERP) + prng->yarrow.cipher = register_cipher(&saferp_desc); +#elif defined(RC2) + prng->yarrow.cipher = register_cipher(&rc2_desc); +#elif defined(NOEKEON) + prng->yarrow.cipher = register_cipher(&noekeon_desc); +#elif defined(CAST5) + prng->yarrow.cipher = register_cipher(&cast5_desc); +#elif defined(XTEA) + prng->yarrow.cipher = register_cipher(&xtea_desc); +#elif defined(SAFER) + prng->yarrow.cipher = register_cipher(&safer_sk128_desc); +#elif defined(DES) + prng->yarrow.cipher = register_cipher(&des3_desc); +#elif + #error YARROW needs at least one CIPHER +#endif + if ((err = cipher_is_valid(prng->yarrow.cipher)) != CRYPT_OK) { + return err; + } + +#ifdef SHA256 + prng->yarrow.hash = register_hash(&sha256_desc); +#elif defined(SHA512) + prng->yarrow.hash = register_hash(&sha512_desc); +#elif defined(TIGER) + prng->yarrow.hash = register_hash(&tiger_desc); +#elif defined(SHA1) + prng->yarrow.hash = register_hash(&sha1_desc); +#elif defined(RIPEMD160) + prng->yarrow.hash = register_hash(&rmd160_desc); +#elif defined(RIPEMD128) + prng->yarrow.hash = register_hash(&rmd128_desc); +#elif defined(MD5) + prng->yarrow.hash = register_hash(&md5_desc); +#elif defined(MD4) + prng->yarrow.hash = register_hash(&md4_desc); +#elif defined(MD2) + prng->yarrow.hash = register_hash(&md2_desc); +#elif defined(WHIRLPOOL) + prng->yarrow.hash = register_hash(&whirlpool_desc); +#else + #error YARROW needs at least one HASH +#endif + if ((err = hash_is_valid(prng->yarrow.hash)) != CRYPT_OK) { + return err; + } + + /* zero the memory used */ + zeromem(prng->yarrow.pool, sizeof(prng->yarrow.pool)); + + return CRYPT_OK; +} + +int yarrow_add_entropy(const unsigned char *buf, unsigned long len, prng_state *prng) +{ + hash_state md; + int err; + + _ARGCHK(buf != NULL); + _ARGCHK(prng != NULL); + + if ((err = hash_is_valid(prng->yarrow.hash)) != CRYPT_OK) { + return err; + } + + /* start the hash */ + hash_descriptor[prng->yarrow.hash].init(&md); + + /* hash the current pool */ + if ((err = hash_descriptor[prng->yarrow.hash].process(&md, prng->yarrow.pool, + hash_descriptor[prng->yarrow.hash].hashsize)) != CRYPT_OK) { + return err; + } + + /* add the new entropy */ + if ((err = hash_descriptor[prng->yarrow.hash].process(&md, buf, len)) != CRYPT_OK) { + return err; + } + + /* store result */ + if ((err = hash_descriptor[prng->yarrow.hash].done(&md, prng->yarrow.pool)) != CRYPT_OK) { + return err; + } + + return CRYPT_OK; +} + +int yarrow_ready(prng_state *prng) +{ + int ks, err; + + _ARGCHK(prng != NULL); + + if ((err = hash_is_valid(prng->yarrow.hash)) != CRYPT_OK) { + return err; + } + + if ((err = cipher_is_valid(prng->yarrow.cipher)) != CRYPT_OK) { + return err; + } + + /* setup CTR mode using the "pool" as the key */ + ks = (int)hash_descriptor[prng->yarrow.hash].hashsize; + if ((err = cipher_descriptor[prng->yarrow.cipher].keysize(&ks)) != CRYPT_OK) { + return err; + } + + if ((err = ctr_start(prng->yarrow.cipher, /* what cipher to use */ + prng->yarrow.pool, /* IV */ + prng->yarrow.pool, ks, /* KEY and key size */ + 0, /* number of rounds */ + &prng->yarrow.ctr)) != CRYPT_OK) { + return err; + } + return CRYPT_OK; +} + +unsigned long yarrow_read(unsigned char *buf, unsigned long len, prng_state *prng) +{ + _ARGCHK(buf != NULL); + _ARGCHK(prng != NULL); + + /* put buf in predictable state first */ + zeromem(buf, len); + + /* now randomize it */ + if (ctr_encrypt(buf, buf, len, &prng->yarrow.ctr) != CRYPT_OK) { + return 0; + } + return len; +} + +void yarrow_done(prng_state *prng) +{ + _ARGCHK(prng != NULL); + /* call cipher done when we invent one ;-) */ +} + +int yarrow_export(unsigned char *out, unsigned long *outlen, prng_state *prng) +{ + _ARGCHK(out != NULL); + _ARGCHK(outlen != NULL); + _ARGCHK(prng != NULL); + + /* we'll write 64 bytes for s&g's */ + if (*outlen < 64) { + return CRYPT_BUFFER_OVERFLOW; + } + + if (yarrow_read(out, 64, prng) != 64) { + return CRYPT_ERROR_READPRNG; + } + *outlen = 64; + + return CRYPT_OK; +} + +int yarrow_import(const unsigned char *in, unsigned long inlen, prng_state *prng) +{ + int err; + + _ARGCHK(in != NULL); + _ARGCHK(prng != NULL); + + if (inlen != 64) { + return CRYPT_INVALID_ARG; + } + + if ((err = yarrow_start(prng)) != CRYPT_OK) { + return err; + } + if ((err = yarrow_add_entropy(in, 64, &prng)) != CRYPT_OK) { + return err; + } + return yarrow_ready(&prng); +} + +#endif + diff --git a/zeromem.c b/zeromem.c new file mode 100644 index 00000000..15181ac5 --- /dev/null +++ b/zeromem.c @@ -0,0 +1,19 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://libtomcrypt.org + */ +#include "mycrypt.h" + +void zeromem(void *dst, size_t len) +{ + unsigned char *mem = (unsigned char *)dst; + _ARGCHK(dst != NULL); + while (len-- > 0) + *mem++ = 0; +}